June 18, 2020 Version 1.45 --------------------------- * TSIL_Trilogseries() in trilog.c rewritten to make it more efficient. Thanks to Alexander Voigt for this. March 23, 2019 Version 1.44 --------------------------- * Function TSIL_M0x0y0Atx added, based on analytic limit of M0x0y0 as s -> x, to fix a numerical instability in previous implementation of this case. Thanks to Alexander Voigt and Harun Acaroglu for pointing out this problem. * In tsil_cpp.h, all function wrappers now defined as *inline* to allow linking of multiple C++ source files that include this header. Thanks to Alexander Voigt and Harun Acaroglu for pointing out this problem. * Fixed bugs in tsil_cpp.h: functions TSIL_cprintfM_, TSIL_Dilog_ and TSIL_Trilog_ now take arguments of type TSIL_COMPLEXCPP, rather than TSIL_COMPLEX. Thanks to Alexander Voigt and Harun Acaroglu for pointing out this problem. * In tsil.h, inclusion of C standard headers moved out of extern "C" block. July 16, 2018 Version 1.43 -------------------------- * Changed dilog.c to make TSIL_REAL CLZcoeffs[] local rather than global. Similarly changed trilog.c to make CLZcoeffs_trilog[] local rather than global. June 3, 2018 Version 1.42 ------------------------- * Fixed bug in the function TSIL_IsInfinite() in functions.c for the handling of infinite function values, for gcc version 5 and later. NOTE that the present code requires the compiler to implement the C99 standard. Thanks to Ben Allanach for alerting us to this problem. February 22, 2017 Version 1.41 ------------------------------ * Fixed typo in tsil_cpp.h, in the function TSIL_Aeps_function, which had been erroneously returning TSIL_Ap instead of TSIL_Aeps. Thanks to Andreas Meier for pointing this out. May 15, 2016 Version 1.4 ----------------------- * Tweaks to tsil_cpp.h: Added #include and deleted using namespace std; Thanks to Alexander Voigt for these suggestions. * Functions in analyticAB.c (TSIL_A and _Ap) and analyticI.c (_I2, _I20xy, _I200x) fixed to return correct imaginary parts for negative mass squared arguments. Thanks to Nikita Blinov for bringing this issue to our attention. * TSIL_Ap now returns TSIL_Infinity if called with zero as argument. * Added TSIL_GetFunctionR and TSIL_GetDataR, which are the same as TSIL_GetFunction and TSIL_GetData, respectively, except that they extract from a TSIL_RESULT * rather than a TSIL_DATA *. * Functions TSIL_WriteData and TSIL_WriteDataM now also print out the values of the integrals I, A, Aeps, and Beps, with relevant arguments. * Fixed several type mismatches involving FABS, CABS with the other type argument. * Typo (g^3 -> lambda g^2) fixed in scalarpole.c and scaparpole.cpp. June 11, 2015 Version 1.3 ------------------------- * For convenience, function identifier strings that are permutations of the standard strings, matching the symmetries of the basis functions, are now allowed. Thus for example, one can access U(z,x,y,v) by specifying either "Uzxyv" or "Uzxvy" in a call to TSIL_GetFunction, since the U functions are symmetric under interchange of their last two arguments. Likewise, any of "Suxv", "Sxuv", "Suvx", "Svux", "Sxvu", or "Svxu" will return the function S(u,x,v) (symmetric under interchange of any of its arguments), etc. * All internal function names now preceded by TSIL_, to avoid collisions with user-defined entities. * TSIL_GetFunction(), TSIL_GetBoldFunctio(), TSIL_GetData(), and TSIL_GetBoldData() now issue a fatal error (rather than a warning) if an invalid function identifier is supplied, or if a function is requested from an unevaluated TSIL_DATA struct. * Added functions TSIL_WarnsOn() and TSIL_WarnsOff(), which toggle printing of warning messages on and off, to user API. Selection remains in effect until changed by the other of these functions, or until the variable printWarns is changed directly by the user. Note that, as before, a call to TSIL_Evaluate() never generates warnings for undefined functions; these are issued only when users try to access such functions via TSIL_GetFunction(), etc. But if TSIL_WarnsOff() has been called, warnings are not issued even in this case. * Fixed problem that could arise in TSIL_M0x0y0() when s is equal to x or y. * Added utilites to make TSIL more easily callable from C++ (details in README.txt). * Added function TSIL_NumFuncs (const char *which) to user API. Takes arg "M", "U" etc. and returns the number of basis functions of that type. * Header file tsil_build.h deprecated. September 3, 2014 Version 1.21 ------------------------------ * Changed generic.c to fix problems that occurred for small s in cases where s=0 is a threshold. Thanks to Stefano Di Vita for pointing out the problem. June 1, 2014 Version 1.2 ------------------------ * Added code in function U0xyz(), located in file analyticU.c, to trap cases that could evaluate to incorrect branches of CLOG. This problem was noticed on recent systems running Ubuntu 12.04, Ubuntu 14.04, and OpenSuse 13.1 with gcc. Thanks to Stefano Di Vita for pointing out the problem. * Added the TSIL_RESULT struct, plus the manipulation utilities TSIL_CopyResult and TSIL_PermuteResult. See the end of section 5.2 and Appendix C of the preprint http://arxiv.org/abs/hep-ph/0501132 for more information. * Updated TSIL_A, TSIL_Ap (new function), TSIL_I2, I20xy, and I200x to work with negative mass squared arguments. * Data rescaling in TSIL_Evaluate now saves original argument values and restores them, rather than recomputing them and subjecting them to roundoff error. * Added a toggle (printWarns) that controls printing of warning messages. Warnings for undefined functions no longer appear when invoking TSIL_Evaluate(); instead, such warnings are issued whan a user tries to access such a function with TSIL_GetFunction() or TSIL_GetBoldFunction() or TSIL_GetData() or TSIL_GetBoldData(), or when an analytic evaluation routine is called directly by the user. * Fixed printfs lacking format strings in testprog.c. * Makefile updates: -lm moved to end of $(LIBS); thanks to Filippo Sala for pointing out the issue. Antiquated entries for gcc under Mac OS X deleted. * Deleted obsolete remarks about long doubles in Mac OS X from ISSUES.txt. * Added to ISSUES.txt a mention of a problem encountered on a system with Red Hat 4.1.2-52 and gcc 4.1.2. November 1, 2006 Version 1.1 ---------------------------- * Added capability to compute subsets of the basis functions, specifically: 1) Case STU, in which there is no M function, only a single U function, and all necessary subsidiary functions, specifically three T functions, one S and one B. The B function is not involved in the integration and so is computed analytically. 2) Case ST, in which there are only three T functions and one S. This has been accomplished by adding functions TSIL_SetParametersSTU and TSIL_SetParametersST, which set appropriate subsets of the mass-squared parameters and control which Runge-Kutta steppers are used. Output functions display appropriately according to the case selected. For generic cases, the STU evaluation is a factor 4-5 faster than full evaluation, with the ST case gaining a further 20%. The test program has also been configured to evaluate and test these subset modes. This is controlled by a compiler flag; see the Makefile for details. Note that the test program expects full benchmark data, i.e. the input files should include all basis functions, like the present test data files. The program evaluates subset cases and only tests the relevant results against the benchmark data. * TSIL_GetFunction and TSIL_GetBoldFunction modified so that in subset cases where there is only a single function of a given type (U, V, S, or B) only the first letter of the specification string is relevant. So, for example, either "U" or "Uxzuv" will work in the STU evaluation case. * Eliminated some TSIL_EPSILONs in favor of the less dangerous TSIL_TOL, to avoid roundoff errors in certain cases. * TSIL_IsInfinite () updated to work with gcc4, which implements more of the C99 standard as regards special floating point values. * Array size 3 made explicit in prototype for TSIL_GetBoldData (in tsil.h), to conform to compiler standards including gcc4. * Return type of TSIL_GetData and TSIL_GetBoldData changed from int to void. Possible errors are now all handled by calls to TSIL_Error. * README.txt updated. February 24, 2006 Version 1.04 ------------------------------ * The function TSIL_SetParameters () now always calls Construct () (see line 112 of initialize.c). This avoids core dumps that previously could occur if isAligned() happened to evaluate to YES. * The function rk6() now rejects the step (by setting maxerr to 10 times max_allowed_error) for any occurrence of non-numerical values for the integrals. This avoids divergences in rare cases near thresholds involving large mass hierarchies, which happened to occur abruptly without ever triggering a large estimated error on a previous step. * Calling any of the functions TSIL_GetData(), TSIL_GetFunction (), TSIL_GetBoldData() or TSIL_GetBoldFunction () with an invalid identifier string now results in a TSIL_Error, rather than a TSIL_Warn. August 22, 2005 Version 1.03 ---------------------------- * The code in generic.c and rk6.c has been modified to avoid taking too many small steps very close to threshold when roundoff errors begin to dominate. This avoids erroneous results and/or long computation times in certain cases at or very near threshold, especially when DOUBLE data is used. July 6, 2005 Version 1.02 ------------------------- * Non-analytic cases near the lowest threshold are now treated in Runge-Kutta by going off the real s-axis (generic.c). Also, the step-size adjustment algorithm has been improved (rk6.c). These changes eliminate significant errors that sometimes occurred in certain non-analytic cases exactly at or very close to threshold, and eliminate some anomalously long computation times in those and other special cases. February 28, 2005 Version 1.01 ------------------------------ * Error in function UnnaturalCase fixed (functions.c). * UnnaturalCase now called after data rescaling, not before (evaluate.c). * Warning messages in trilog.c updated and now produced by calls to TSIL_Warn (trilog.c). * Test data files have been modified to reduce the number of trailing zeroes for the input parameters. This avoids an obscure I/O problem that may arise with gcc v2.96 under RedHat Linux, using LONG DOUBLE data. * Makefile updated with flags to control uninteresting compiler warnings. Documentation Changes: * Prototype for TSIL_Manalytic in README.txt corrected. * Advice on suppressing TSIL warning messages added to ISSUES.txt.