******************************
Helper Functions and Libraries
******************************

The ``util/`` directory contains a number of external libraries and simple
utilities that are used by the different components of Microphysics.

* ``approx_math/`` : these are a set of headers that implement
  approximations to ``atan()``, ``exp()``, ``log()``, and ``pow()``.
  These can be much faster than the C++ library versions, especially
  on GPUs.

* ``autodiff/`` : this is a clone of the C++ autodiff library from
  https://github.com/autodiff/autodiff

  The header ``microphysics_autodiff.H`` provides a set of interfaces
  for working with the AMReX datatypes and interfacing with the
  autodiff library.

* ``build_scripts/`` : a set of python scripts used during the build
  process to parse the runtime parameters.

* ``cj_detonation/`` : a simple routine to compute the Chapman-Jouguet
  detonation speed for one of our networks.

* ``esum.H`` : an implementation of the exact sum algorithm based on the
  msum algorithm by Raymond Hettinger.  It is generated automatically
  by the ``esum_cxx.py`` script and creates implementations for exact
  numbers of terms (``esum3()``, ``esum4()``, ...)

* ``gcem/`` : a templated math library that provides implementations of
  the standard library math functions that can be used in ``constexpr``
  expressions.  This is from https://github.com/kthohr/gcem

  Some of the constants are redefined in 64-bit floating point in
  ``microphysics_math.H`` to avoid ``long double`` issues on some
  architectures.

* ``hybrj/`` : a C++ port of the MINPACK hybrid Powell minimization function
  to zero a set of functions.

* ``linpack.H`` : a C++ port of the LINPACK ``dgesl`` and ``dgefa`` LU
  decomposition Gaussian elimination routines.

* ``microphysics_sort.H`` : a set of sorting routines for
  ``amrex::Array1D`` data.