// generate parameter sequence from pdf sequence using gradient static void mlpgGrad(PStreamChol *pst, const int max, double th, double e, double alpha, DVECTOR vm, DVECTOR vv, XBOOL nrmflag) { register int m, i, t; double diff, n, dth; if (nrmflag == XTRUE) n = (double)(pst->T * pst->vSize) / (double)(vm->length); else n = 1.0; // generating parameter in each dimension for (m = 0; m <= pst->order; m++) { calc_R_and_r(pst, m); dth = th * sqrt(vm->data[m]); for (i = 0; i < max; i++) { calc_grad(pst, m); if (vm != NODATA && vv != NODATA) calc_vargrad(pst, m, alpha, n, vm->data[m], vv->data[m]); for (t = 0, diff = 0.0; t < pst->T; t++) { diff += pst->g[t] * pst->g[t]; pst->c[t][m] += e * pst->g[t]; } diff = sqrt(diff / (double)pst->T); if (diff < dth || diff == 0.0) break; } } return; }
void substep(struct grid *g, double rkfac1, double rkfac2, double dt, struct parList *pars) { //Calculate gradients of grid quantities calc_grad(g, pars); //Solve Riemann problems. add_fluxes(g, dt, pars); //Add Sources. add_sources(g, dt, pars); //Update prims. calc_prim(g, pars); //Boundary Conditions. bc_1L(g, pars); bc_1R(g, pars); bc_2L(g, pars); bc_2R(g, pars); //Re-update cons. calc_cons(g, pars); }