****************************** 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.