static real wSsolid(real nu, real beta) { real bhn = beta*PLANCK*nu; if (bhn == 0) { return 1; } else { return bhn/gmx_expm1(bhn) - gmx_log1p(-exp(-bhn)); } }
static real wEsolid(real nu, real beta) { real bhn = beta*PLANCK*nu; if (bhn == 0) { return 1; } else { return bhn/2 + bhn/gmx_expm1(bhn)-1; } }
/*! \brief Exponent minus 1 function that prevents overflow */ static double safe_expm1(double x) { double exp_max = 200; double exp_min = -exp_max; if (x <= exp_min) { return -1; } else if (x >= exp_max) { return exp(exp_max); } else { return gmx_expm1(x); } }