static void lb_calc_local_moments(double *f) { int i; double *m = f + lblattice.halo_grid_volume*lbmodel.n_vel; double rho, p, dp, d2p; for (i=0; i<lbmodel.n_vel; ++i) { m[i] = 0.0; } for (i=0; i<lbmodel.n_vel; ++i) { m[0] += f[i]; m[1] += f[i]*lbmodel.c[i][0]; m[2] += f[i]*lbmodel.c[i][1]; m[3] += f[i]*lbmodel.c[i][0]*lbmodel.c[i][0]; m[4] += f[i]*lbmodel.c[i][1]*lbmodel.c[i][1]; m[5] += f[i]*lbmodel.c[i][0]*lbmodel.c[i][1]; } /* evaluate equation of state */ rho = m[0]; p = rho*eq_state(rho); dp = derP(rho); d2p = der2P(rho); LB_Moments *lbmom = (LB_Moments *)m; /* pressure and derivatives */ lbmom->p = p; lbmom->dp = dp; lbmom->pmrdp = p - rho*dp; lbmom->rd2p = rho*d2p; /* force */ lbmom->force[0] = 0.0; lbmom->force[1] = 0.0; /* velocity */ lbmom->u[0] = m[1]/m[0]; lbmom->u[1] = m[2]/m[0]; /* correction current */ //lbmom->jcorr[0] = 0.0; //lbmom->jcorr[1] = 0.0; }
// Derivative of the error function static double dererrh(int n, double *c, double y, double epsilon) { double p = P(n, c, y, epsilon), dp = derP(n, c, y, epsilon); return -0.5 * p / sqrt(y) - sqrt(y) * dp; }