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 void power_fit(int n, int nset, real **val, real *t) { real *x, *y, quality, a, b, r; int s, i; snew(x, n); snew(y, n); if (t[0] > 0) { for (i = 0; i < n; i++) { if (t[0] > 0) { x[i] = log(t[i]); } } } else { fprintf(stdout, "First time is not larger than 0, using index number as time for power fit\n"); for (i = 0; i < n; i++) { x[i] = gmx_log1p(i); } } for (s = 0; s < nset; s++) { i = 0; for (i = 0; i < n && val[s][i] >= 0; i++) { y[i] = log(val[s][i]); } if (i < n) { fprintf(stdout, "Will power fit up to point %d, since it is not larger than 0\n", i); } lsq_y_ax_b(i, x, y, &a, &b, &r, &quality); fprintf(stdout, "Power fit set %3d: error %.3f a %g b %g\n", s+1, quality, a, exp(b)); } sfree(y); sfree(x); }