Exemple #1
0
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;
}