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 <complex>

  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.
