5 #include "PatchPluto.H"
10 #if (EOS != ISOTHERMAL) && (ENTROPY_SWITCH == NO)
11 #ifndef CHOMBO_REF_VAR
12 #define CHOMBO_REF_VAR ENG
15 #ifndef CHOMBO_REF_VAR
16 #define CHOMBO_REF_VAR RHO
23 void PatchPluto::computeRefGradient(FArrayBox& gFab, FArrayBox& UFab,
24 const FArrayBox& a_dV,
const Box& b)
51 CH_assert(m_isDefined);
54 double x1, dqx_p, dqx_m, dqx, d2qx, den_x;
55 double x2, dqy_p, dqy_m, dqy, d2qy, den_y;
56 double x3, dqz_p, dqz_m, dqz, d2qz, den_z;
57 double gr1, gr2,
eps = 0.01;
58 #if CHOMBO_REF_VAR == -1
66 #if REF_CRIT != 1 && REF_CRIT != 2
67 print (
"! TagCells.cpp: Refinement criterion not valid\n");
78 Ubox.
jb = Ubox.
je = Ubox.
kb = Ubox.
ke = 0;
79 Gbox.
jb = Gbox.
je = Gbox.
kb = Gbox.
ke = 0;
82 Ubox.
jb = UFab.loVect()[
JDIR]; Ubox.
je = UFab.hiVect()[
JDIR]; ,
83 Ubox.
kb = UFab.loVect()[
KDIR]; Ubox.
ke = UFab.hiVect()[
KDIR]; );
86 Gbox.
jb = gFab.loVect()[
JDIR]; Gbox.
je = gFab.hiVect()[
JDIR]; ,
87 Gbox.
kb = gFab.loVect()[
KDIR]; Gbox.
ke = gFab.hiVect()[
KDIR]; );
96 #if CHOMBO_REF_VAR == -1
97 FArrayBox tmpU(UFab.box(),
NVAR);
100 FArrayBox tmpU(UFab.box(),1);
104 #if GEOMETRY != CARTESIAN
106 #if CHOMBO_REF_VAR == -1
108 for (nv = 0; nv <
NVAR; nv++) tmpU.divide(a_dV,0,nv);
109 #if CHOMBO_CONS_AM == YES
110 #if ROTATING_FRAME == YES
111 Box curBox = UFab.box();
112 for(BoxIterator bit(curBox); bit.ok(); ++bit) {
113 const IntVect& iv = bit();
114 tmpU(iv,
iMPHI) /= a_dV(iv,1);
118 tmpU.divide(a_dV,1,
iMPHI);
124 tmpU.divide(a_dV,0,0);
130 if (g_stretch_fact != 1.) tmpU /= g_stretch_fact;
132 #endif // GEOMETRY == CARTESIAN
138 #if CHOMBO_REF_VAR == -1
139 for (nv = 0; nv <
NVAR; nv++)
142 Ubox.
ib, Ubox.
ie, tmpU.dataPtr(nv));
148 Ubox.
ib, Ubox.
ie, tmpU.dataPtr(0));
153 Gbox.
ib, Gbox.
ie, gFab.dataPtr(0));
162 x2 = (j + 0.5)*m_dx*g_x2stretch + g_domBeg[
JDIR];
163 #if CHOMBO_LOGR == NO
164 x1 = (i + 0.5)*m_dx + g_domBeg[
IDIR];
166 double xl = g_domBeg[
IDIR] + i*m_dx;
167 double xr = xl + m_dx;
168 x1 = g_domBeg[
IDIR]*0.5*(exp(xr)+exp(xl));
171 D_EXPAND(dqx_p = q[k][j][i+1] - q[k][j][i];
172 dqx_m = - (q[
k][
j][i-1] - q[
k][
j][
i]); ,
173 dqy_p = q[
k][j+1][
i] - q[
k][
j][
i];
174 dqy_m = - (q[
k][j-1][
i] - q[
k][
j][
i]); ,
175 dqz_p = q[k+1][
j][
i] - q[
k][
j][
i];
176 dqz_m = - (q[k-1][
j][
i] - q[
k][
j][
i]);)
187 D_EXPAND(
if (i == 0) dqx_m = dqx_p; ,
188 if (j == 0) dqy_m = dqy_p; ,
189 if (k == 0) dqz_m = dqz_p;)
191 D_EXPAND(
if (i == m_domain.size(
IDIR)-1) dqx_p = dqx_m; ,
192 if (j == m_domain.size(
JDIR)-1) dqy_p = dqy_m; ,
193 if (k == m_domain.size(
KDIR)-1) dqz_p = dqz_m;)
201 dqy = dqy_p + dqy_m; ,
202 dqz = dqz_p + dqz_m;)
204 D_EXPAND(den_x = fabs(q[k][j][i+1]) + fabs(q[k][j][i-1]); ,
205 den_y = fabs(q[k][j+1][i]) + fabs(q[k][j-1][i]); ,
206 den_z = fabs(q[k+1][j][i]) + fabs(q[k-1][j][i]);)
208 gr1 =
D_EXPAND(dqx*dqx, + dqy*dqy, + dqz*dqz);
209 gr1 /=
D_EXPAND(den_x*den_x, + den_y*den_y, + den_z*den_z);
211 grad[
k][
j][
i] = sqrt(gr1);
220 d2qy = dqy_p - dqy_m; ,
221 d2qz = dqz_p - dqz_m;)
224 den_x = 2.0*fabs(q[k][j][i]) + fabs(q[k][j][i+1]) + fabs(q[k][j][i-1]);
225 den_x = fabs(dqx_p) + fabs(dqx_m) + eps*den_x; ,
227 den_y = 2.0*fabs(q[k][j][i]) + fabs(q[k][j+1][i]) + fabs(q[k][j-1][i]);
228 den_y = fabs(dqy_p) + fabs(dqy_m) + eps*den_y; ,
230 den_z = 2.0*fabs(q[k][j][i]) + fabs(q[k+1][j][i]) + fabs(q[k-1][j][i]);
231 den_z = fabs(dqz_p) + fabs(dqz_m) + eps*den_z;
234 gr2 =
D_EXPAND(d2qx*d2qx, + d2qy*d2qy, + d2qz*d2qz);
235 gr2 /=
D_EXPAND(den_x*den_x, + den_y*den_y, + den_z*den_z);
237 grad[
k][
j][
i] = sqrt(gr2);
247 #if CHOMBO_REF_VAR == -1
248 for (nv = 0; nv <
NVAR; nv++){
250 Ubox.
jb, Ubox.
je, Ubox.
ib, Ubox.
ie);
int jb
Lower corner index in the x2 direction.
static void computeRefVar(double ***UU[], double ***q, double, RBox *Ubox)
#define BOX_LOOP(B, k, j, i)
int kb
Lower corner index in the x3 direction.
void FreeArrayBox(double ***t, long nrl, long ncl, long ndl)
double *** ArrayBox(long int nrl, long int nrh, long int ncl, long int nch, long int ndl, long int ndh)
int ib
Lower corner index in the x1 direction.
void print(const char *fmt,...)
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;)
int ie
Upper corner index in the x1 direction.
int ke
Upper corner index in the x3 direction.
int je
Upper corner index in the x2 direction.
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)
#define QUIT_PLUTO(e_code)