5 #include "PatchPluto.H"
10 void PatchPluto::computeRefGradient(FArrayBox& gFab, FArrayBox& UFab,
11 const FArrayBox& a_dV,
const Box& b)
26 CH_assert(m_isDefined);
29 int Uib, Uie, Ujb=0, Uje=0, Ukb=0, Uke=0;
30 int Gib, Gie, Gjb=0, Gje=0, Gkb=0, Gke=0;
33 double x, dqx_p, dqx_m, d2qx, den_x;
34 double y, dqy_p, dqy_m, d2qy, den_y;
35 double z, dqz_p, dqz_m, d2qz, den_z;
37 double alpha, qref, gr1, gr2;
40 double ***UU[
NVAR], ***
q, ***grad;
55 Ujb = UFab.loVect()[
JDIR]; Uje = UFab.hiVect()[
JDIR]; ,
56 Ukb = UFab.loVect()[
KDIR]; Uke = UFab.hiVect()[
KDIR]; );
59 Gjb = gFab.loVect()[
JDIR]; Gje = gFab.hiVect()[
JDIR]; ,
60 Gkb = gFab.loVect()[
KDIR]; Gke = gFab.hiVect()[
KDIR]; );
62 for (nv=0 ; nv<
NVAR ; nv ++){
63 UU[nv] =
ArrayBoxMap(Ukb, Uke, Ujb, Uje, Uib, Uie, UFab.dataPtr(nv));
65 grad =
ArrayBoxMap(Gkb, Gke, Gjb, Gje, Gib, Gie,gFab.dataPtr(0));
74 #if (EOS != ISOTHERMAL) && (AMR_EN_SWITCH == NO)
80 for (k = Gkb; k <= Gke; k++) { z = k*m_dx +
g_domBeg[
KDIR];
81 for (j = Gjb; j <= Gje; j++) { y = j*m_dx + g_domBeg[
JDIR];
82 for (i = Gib; i <= Gie; i++) { x = i*m_dx + g_domBeg[
IDIR];
84 #if GEOMETRY == CYLINDRICAL
89 D_EXPAND(dqx_p = q[k][j][i+1]*rp - q[k][j][i];
90 dqx_m = -(q[
k][
j][i-1]*rm - q[
k][
j][
i]); ,
91 dqy_p = q[
k][j+1][
i] - q[
k][
j][
i];
92 dqy_m = -(q[
k][j-1][
i] - q[
k][
j][
i]); ,
93 dqz_p = q[k+1][
j][
i] - q[
k][
j][
i];
94 dqz_m = -(q[k-1][
j][
i] - q[
k][
j][
i]);)
105 D_EXPAND(
if (i == 0) dqx_m = dqx_p; ,
106 if (j == 0) dqy_m = dqy_p; ,
107 if (k == 0) dqz_m = dqz_p;)
110 if (j == m_domain.size(
JDIR)-1) dqy_p = dqy_m; ,
111 if (k == m_domain.size(
KDIR)-1) dqz_p = dqz_m;)
143 qref = fabs(q[k][j][i]);
144 gr1 =
D_EXPAND( fabs(dqx_p + dqx_m)/qref ,
145 + fabs(dqy_p + dqy_m)/qref ,
146 + fabs(dqz_p + dqz_m)/qref);
150 gr2 =
D_EXPAND( fabs(dqx_p - dqx_m)/(fabs(dqx_p) + fabs(dqx_m) + eps*qref) ,
151 + fabs(dqy_p - dqy_m)/(fabs(dqy_p) + fabs(dqy_m) + eps*qref) ,
152 + fabs(dqz_p - dqz_m)/(fabs(dqz_p) + fabs(dqz_m) + eps*qref));
154 grad[k][j][i] = alpha*gr1 + (1.0 - alpha)*gr2;
158 for (nv=0 ; nv<NVAR ; nv ++){
double g_domBeg[3]
Lower limits of the computational domain.
D_EXPAND(tot/[n]=(double) grid[IDIR].np_int_glob;, tot/[n]=(double) grid[JDIR].np_int_glob;, tot/[n]=(double) grid[KDIR].np_int_glob;)
double *** ArrayBoxMap(int nrl, int nrh, int ncl, int nch, int ndl, int ndh, double *uptr)
void FreeArrayBoxMap(double ***t, int nrl, int nrh, int ncl, int nch, int ndl, int ndh)