Function for computing the scalar RHS for diffusion operator without terrain.
74 const Real dz_inv = cellSizeInv[2];
76 for (
int n(0); n<num_comp; ++n) {
77 const int qty_index = start_comp + n;
81 ParallelFor(
xbx, [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept
83 const int prim_index = qty_index - 1;
85 const int prim_scal_index = prim_index;
94 ext_dir_on_xlo &= (i ==
dom_lo.x);
99 ext_dir_on_xlo &= (i ==
dom_hi.x+1);
101 Real rhoFace = 0.5 * ( cell_data(i, j, k,
Rho_comp) + cell_data(i-1, j, k,
Rho_comp) );
102 Real rhoAlpha = rhoFace *
d_alpha_eff[prim_scal_index];
103 rhoAlpha += 0.5 * ( mu_turb(i , j, k,
d_eddy_diff_idx[prim_scal_index])
106 if (ext_dir_on_xlo) {
107 xflux(i,j,k) = -rhoAlpha * ( -(8./3.) * cell_prim(i-1, j, k, prim_index)
108 + 3. * cell_prim(i , j, k, prim_index)
109 - (1./3.) * cell_prim(i+1, j, k, prim_index) ) *
dx_inv * mf_ux(i,j,0)/mf_uy(i,j,0);
110 }
else if (ext_dir_on_xhi) {
111 xflux(i,j,k) = -rhoAlpha * ( (8./3.) * cell_prim(i , j, k, prim_index)
112 - 3. * cell_prim(i-1, j, k, prim_index)
113 + (1./3.) * cell_prim(i-2, j, k, prim_index) ) *
dx_inv * mf_ux(i,j,0)/mf_uy(i,j,0);
115 xflux(i,j,k) = -rhoAlpha * (cell_prim(i, j, k, prim_index) -
116 cell_prim(i-1, j, k, prim_index)) *
dx_inv * mf_ux(i,j,0)/mf_uy(i,j,0);
119 ParallelFor(
ybx, [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept
121 const int prim_index = qty_index - 1;
123 const int prim_scal_index = prim_index;
131 ext_dir_on_ylo &= (j ==
dom_lo.y);
135 ext_dir_on_yhi &= (j ==
dom_hi.y+1);
137 Real rhoFace = 0.5 * ( cell_data(i, j, k,
Rho_comp) + cell_data(i, j-1, k,
Rho_comp) );
138 Real rhoAlpha = rhoFace *
d_alpha_eff[prim_scal_index];
139 rhoAlpha += 0.5 * ( mu_turb(i, j , k,
d_eddy_diff_idy[prim_scal_index])
142 if (ext_dir_on_ylo) {
143 yflux(i,j,k) = -rhoAlpha * ( -(8./3.) * cell_prim(i, j-1, k, prim_index)
144 + 3. * cell_prim(i, j , k, prim_index)
145 - (1./3.) * cell_prim(i, j+1, k, prim_index) ) *
dy_inv * mf_vy(i,j,0)/mf_vx(i,j,0);
146 }
else if (ext_dir_on_yhi) {
147 yflux(i,j,k) = -rhoAlpha * ( (8./3.) * cell_prim(i, j , k, prim_index)
148 - 3. * cell_prim(i, j-1, k, prim_index)
149 + (1./3.) * cell_prim(i, j-2, k, prim_index) ) *
dy_inv * mf_vy(i,j,0)/mf_vx(i,j,0);
151 yflux(i,j,k) = -rhoAlpha * (cell_prim(i, j, k, prim_index) - cell_prim(i, j-1, k, prim_index)) *
dy_inv * mf_vy(i,j,0)/mf_vx(i,j,0);
154 ParallelFor(
zbx, [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept
156 const int prim_index = qty_index - 1;
158 const int prim_scal_index = prim_index;
160 Real rhoFace = 0.5 * ( cell_data(i, j, k,
Rho_comp) + cell_data(i, j, k-1,
Rho_comp) );
161 Real rhoAlpha = rhoFace *
d_alpha_eff[prim_scal_index];
162 rhoAlpha += 0.5 * ( mu_turb(i, j, k ,
d_eddy_diff_idz[prim_scal_index])
175 bool SurfLayer_on_zlo = ( use_SurfLayer && k==
dom_lo.z);
177 if (ext_dir_on_zlo) {
178 zflux(i,j,k) = -rhoAlpha * ( -(8./3.) * cell_prim(i, j, k-1, prim_index)
179 + 3. * cell_prim(i, j, k , prim_index)
180 - (1./3.) * cell_prim(i, j, k+1, prim_index) ) * dz_inv;
181 }
else if (ext_dir_on_zhi) {
182 zflux(i,j,k) = -rhoAlpha * ( (8./3.) * cell_prim(i, j, k , prim_index)
183 - 3. * cell_prim(i, j, k-1, prim_index)
184 + (1./3.) * cell_prim(i, j, k-2, prim_index) ) * dz_inv;
185 }
else if (SurfLayer_on_zlo && (qty_index ==
RhoTheta_comp)) {
186 zflux(i,j,k) = hfx_z(i,j,0);
187 }
else if (SurfLayer_on_zlo && (qty_index ==
RhoQ1_comp)) {
188 zflux(i,j,k) = qfx1_z(i,j,0);
190 zflux(i,j,k) = -rhoAlpha * (cell_prim(i, j, k, prim_index) - cell_prim(i, j, k-1, prim_index)) * dz_inv;
194 if (!SurfLayer_on_zlo) {
195 hfx_z(i,j,k) = zflux(i,j,k);
198 if (!SurfLayer_on_zlo) {
199 qfx1_z(i,j,k) = zflux(i,j,k);
202 qfx2_z(i,j,k) = zflux(i,j,k);
207 ParallelFor(
xbx, [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept
209 const int prim_index = qty_index - 1;
218 ext_dir_on_xlo &= (i ==
dom_lo.x);
223 ext_dir_on_xhi &= (i ==
dom_hi.x+1);
229 if (ext_dir_on_xlo) {
230 xflux(i,j,k) = -rhoAlpha * ( -(8./3.) * cell_prim(i-1, j, k, prim_index)
231 + 3. * cell_prim(i , j, k, prim_index)
232 - (1./3.) * cell_prim(i+1, j, k, prim_index) ) *
dx_inv * mf_ux(i,j,0)/mf_uy(i,j,0);
233 }
else if (ext_dir_on_xhi) {
234 xflux(i,j,k) = -rhoAlpha * ( (8./3.) * cell_prim(i , j, k, prim_index)
235 - 3. * cell_prim(i-1, j, k, prim_index)
236 + (1./3.) * cell_prim(i-2, j, k, prim_index) ) *
dx_inv * mf_ux(i,j,0)/mf_uy(i,j,0);
238 xflux(i,j,k) = -rhoAlpha * (cell_prim(i, j, k, prim_index) - cell_prim(i-1, j, k, prim_index)) *
dx_inv * mf_ux(i,j,0)/mf_uy(i,j,0);
241 ParallelFor(
ybx, [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept
243 const int prim_index = qty_index - 1;
252 ext_dir_on_ylo &= (j ==
dom_lo.y);
257 ext_dir_on_yhi &= (j ==
dom_hi.y+1);
263 if (ext_dir_on_ylo) {
264 yflux(i,j,k) = -rhoAlpha * ( -(8./3.) * cell_prim(i, j-1, k, prim_index)
265 + 3. * cell_prim(i, j , k, prim_index)
266 - (1./3.) * cell_prim(i, j+1, k, prim_index) ) *
dy_inv * mf_vy(i,j,0)/mf_vx(i,j,0);
267 }
else if (ext_dir_on_yhi) {
268 yflux(i,j,k) = -rhoAlpha * ( (8./3.) * cell_prim(i, j , k, prim_index)
269 - 3. * cell_prim(i, j-1, k, prim_index)
270 + (1./3.) * cell_prim(i, j-2, k, prim_index) ) *
dy_inv * mf_vy(i,j,0)/mf_vx(i,j,0);
272 yflux(i,j,k) = -rhoAlpha * (cell_prim(i, j, k, prim_index) - cell_prim(i, j-1, k, prim_index)) *
dy_inv * mf_vy(i,j,0)/mf_vx(i,j,0);
275 ParallelFor(
zbx, [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept
277 const int prim_index = qty_index - 1;
292 bool SurfLayer_on_zlo = ( use_SurfLayer && k ==
dom_lo.z);
294 if (ext_dir_on_zlo) {
295 zflux(i,j,k) = -rhoAlpha * ( -(8./3.) * cell_prim(i, j, k-1, prim_index)
296 + 3. * cell_prim(i, j, k , prim_index)
297 - (1./3.) * cell_prim(i, j, k+1, prim_index) ) * dz_inv;
298 }
else if (ext_dir_on_zhi) {
299 zflux(i,j,k) = -rhoAlpha * ( (8./3.) * cell_prim(i, j, k , prim_index)
300 - 3. * cell_prim(i, j, k-1, prim_index)
301 + (1./3.) * cell_prim(i, j, k-2, prim_index) ) * dz_inv;
302 }
else if (SurfLayer_on_zlo && (qty_index ==
RhoTheta_comp)) {
303 zflux(i,j,k) = hfx_z(i,j,0);
304 }
else if (SurfLayer_on_zlo && (qty_index ==
RhoQ1_comp)) {
305 zflux(i,j,k) = qfx1_z(i,j,0);
307 zflux(i,j,k) = -rhoAlpha * (cell_prim(i, j, k, prim_index) - cell_prim(i, j, k-1, prim_index)) * dz_inv;
311 if (!SurfLayer_on_zlo) {
312 hfx_z(i,j,k) = zflux(i,j,k);
315 if (!SurfLayer_on_zlo) {
316 qfx1_z(i,j,k) = zflux(i,j,k);
319 qfx2_z(i,j,k) = zflux(i,j,k);
324 ParallelFor(
xbx, [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept
326 const int prim_index = qty_index - 1;
335 ext_dir_on_xlo &= (i ==
dom_lo.x);
340 ext_dir_on_xhi &= (i ==
dom_hi.x+1);
342 Real rhoFace = 0.5 * ( cell_data(i, j, k,
Rho_comp) + cell_data(i-1, j, k,
Rho_comp) );
345 if (ext_dir_on_xlo) {
346 xflux(i,j,k) = -rhoAlpha * ( -(8./3.) * cell_prim(i-1, j, k, prim_index)
347 + 3. * cell_prim(i , j, k, prim_index)
348 - (1./3.) * cell_prim(i+1, j, k, prim_index) ) *
dx_inv * mf_ux(i,j,0)/mf_uy(i,j,0);
349 }
else if (ext_dir_on_xhi) {
350 xflux(i,j,k) = -rhoAlpha * ( (8./3.) * cell_prim(i , j, k, prim_index)
351 - 3. * cell_prim(i-1, j, k, prim_index)
352 + (1./3.) * cell_prim(i-2, j, k, prim_index) ) *
dx_inv * mf_ux(i,j,0)/mf_uy(i,j,0);
354 xflux(i,j,k) = -rhoAlpha * (cell_prim(i, j, k, prim_index) - cell_prim(i-1, j, k, prim_index)) *
dx_inv * mf_ux(i,j,0)/mf_uy(i,j,0);
357 ParallelFor(
ybx, [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept
359 const int prim_index = qty_index - 1;
368 ext_dir_on_ylo &= (j ==
dom_lo.y);
373 ext_dir_on_yhi &= (j ==
dom_hi.y+1);
375 Real rhoFace = 0.5 * ( cell_data(i, j, k,
Rho_comp) + cell_data(i, j-1, k,
Rho_comp) );
378 if (ext_dir_on_ylo) {
379 yflux(i,j,k) = -rhoAlpha * ( -(8./3.) * cell_prim(i, j-1, k, prim_index)
380 + 3. * cell_prim(i, j , k, prim_index)
381 - (1./3.) * cell_prim(i, j+1, k, prim_index) ) *
dy_inv * mf_vy(i,j,0)/mf_vx(i,j,0);
382 }
else if (ext_dir_on_yhi) {
383 yflux(i,j,k) = -rhoAlpha * ( (8./3.) * cell_prim(i, j , k, prim_index)
384 - 3. * cell_prim(i, j-1, k, prim_index)
385 + (1./3.) * cell_prim(i, j-2, k, prim_index) ) *
dy_inv * mf_vy(i,j,0)/mf_vx(i,j,0);
387 yflux(i,j,k) = -rhoAlpha * (cell_prim(i, j, k, prim_index) - cell_prim(i, j-1, k, prim_index)) *
dy_inv * mf_vy(i,j,0)/mf_vx(i,j,0);
390 ParallelFor(
zbx, [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept
392 const int prim_index = qty_index - 1;
394 Real rhoFace = 0.5 * ( cell_data(i, j, k,
Rho_comp) + cell_data(i, j, k-1,
Rho_comp) );
406 bool SurfLayer_on_zlo = ( use_SurfLayer && k ==
dom_lo.z);
408 if (ext_dir_on_zlo) {
409 zflux(i,j,k) = -rhoAlpha * ( -(8./3.) * cell_prim(i, j, k-1, prim_index)
410 + 3. * cell_prim(i, j, k , prim_index)
411 - (1./3.) * cell_prim(i, j, k+1, prim_index) ) * dz_inv;
412 }
else if (ext_dir_on_zhi) {
413 zflux(i,j,k) = -rhoAlpha * ( (8./3.) * cell_prim(i, j, k , prim_index)
414 - 3. * cell_prim(i, j, k-1, prim_index)
415 + (1./3.) * cell_prim(i, j, k-2, prim_index) ) * dz_inv;
416 }
else if (SurfLayer_on_zlo && (qty_index ==
RhoTheta_comp)) {
417 zflux(i,j,k) = hfx_z(i,j,0);
418 }
else if (SurfLayer_on_zlo && (qty_index ==
RhoQ1_comp)) {
419 zflux(i,j,k) = qfx1_z(i,j,0);
421 zflux(i,j,k) = -rhoAlpha * (cell_prim(i, j, k, prim_index) - cell_prim(i, j, k-1, prim_index)) * dz_inv;
425 if (!SurfLayer_on_zlo) {
426 hfx_z(i,j,k) = zflux(i,j,k);
429 if (!SurfLayer_on_zlo) {
430 qfx1_z(i,j,k) = zflux(i,j,k);
433 qfx2_z(i,j,k) = zflux(i,j,k);
439 ParallelFor(
xbx, [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept
441 const int prim_index = qty_index - 1;
450 ext_dir_on_xlo &= (i ==
dom_lo.x);
455 ext_dir_on_xhi &= (i ==
dom_hi.x+1);
459 if (ext_dir_on_xlo) {
460 xflux(i,j,k) = -rhoAlpha * ( -(8./3.) * cell_prim(i-1, j, k, prim_index)
461 + 3. * cell_prim(i , j, k, prim_index)
462 - (1./3.) * cell_prim(i+1, j, k, prim_index) ) *
dx_inv * mf_ux(i,j,0)/mf_uy(i,j,0);
463 }
else if (ext_dir_on_xhi) {
464 xflux(i,j,k) = -rhoAlpha * ( (8./3.) * cell_prim(i , j, k, prim_index)
465 - 3. * cell_prim(i-1, j, k, prim_index)
466 + (1./3.) * cell_prim(i-2, j, k, prim_index) ) *
dx_inv * mf_ux(i,j,0)/mf_uy(i,j,0);
468 xflux(i,j,k) = -rhoAlpha * (cell_prim(i, j, k, prim_index) - cell_prim(i-1, j, k, prim_index)) *
dx_inv * mf_ux(i,j,0)/mf_uy(i,j,0);
471 ParallelFor(
ybx, [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept
473 const int prim_index = qty_index - 1;
482 ext_dir_on_ylo &= (j ==
dom_lo.y);
487 ext_dir_on_yhi &= (j ==
dom_hi.y+1);
491 if (ext_dir_on_ylo) {
492 yflux(i,j,k) = -rhoAlpha * ( -(8./3.) * cell_prim(i, j-1, k, prim_index)
493 + 3. * cell_prim(i, j , k, prim_index)
494 - (1./3.) * cell_prim(i, j+1, k, prim_index) ) *
dy_inv * mf_vy(i,j,0)/mf_vx(i,j,0);
495 }
else if (ext_dir_on_yhi) {
496 yflux(i,j,k) = -rhoAlpha * ( (8./3.) * cell_prim(i, j , k, prim_index)
497 - 3. * cell_prim(i, j-1, k, prim_index)
498 + (1./3.) * cell_prim(i, j-2, k, prim_index) ) *
dy_inv * mf_vy(i,j,0)/mf_vx(i,j,0);
500 yflux(i,j,k) = -rhoAlpha * (cell_prim(i, j, k, prim_index) - cell_prim(i, j-1, k, prim_index)) *
dy_inv * mf_vy(i,j,0)/mf_vx(i,j,0);
503 ParallelFor(
zbx, [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept
505 const int prim_index = qty_index - 1;
518 bool SurfLayer_on_zlo = ( use_SurfLayer && k ==
dom_lo.z);
520 if (ext_dir_on_zlo) {
521 zflux(i,j,k) = -rhoAlpha * ( -(8./3.) * cell_prim(i, j, k-1, prim_index)
522 + 3. * cell_prim(i, j, k , prim_index)
523 - (1./3.) * cell_prim(i, j, k+1, prim_index) ) * dz_inv;
524 }
else if (ext_dir_on_zhi) {
525 zflux(i,j,k) = -rhoAlpha * ( (8./3.) * cell_prim(i, j, k , prim_index)
526 - 3. * cell_prim(i, j, k-1, prim_index)
527 + (1./3.) * cell_prim(i, j, k-2, prim_index) ) * dz_inv;
528 }
else if (SurfLayer_on_zlo && (qty_index ==
RhoTheta_comp)) {
529 zflux(i,j,k) = hfx_z(i,j,0);
530 }
else if (SurfLayer_on_zlo && (qty_index ==
RhoQ1_comp)) {
531 zflux(i,j,k) = qfx1_z(i,j,0);
533 zflux(i,j,k) = -rhoAlpha * (cell_prim(i, j, k, prim_index) - cell_prim(i, j, k-1, prim_index)) * dz_inv;
537 if (!SurfLayer_on_zlo) {
538 hfx_z(i,j,k) = zflux(i,j,k);
541 if (!SurfLayer_on_zlo) {
542 qfx1_z(i,j,k) = zflux(i,j,k);
545 qfx2_z(i,j,k) = zflux(i,j,k);
551 ParallelFor(bx,[=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept
553 Real mfsq = mf_mx(i,j,0) * mf_my(i,j,0);
554 cell_rhs(i,j,k,qty_index) -= (xflux(i+1,j ,k ) - xflux(i, j, k)) *
dx_inv * mfsq
555 +(yflux(i ,j+1,k ) - yflux(i, j, k)) *
dy_inv * mfsq
556 +(zflux(i ,j ,k+1) - zflux(i, j, k)) * dz_inv;
const auto & dom_hi
Definition: ERF_DiffSetup.H:10
bool l_turb
Definition: ERF_DiffSetup.H:19
const auto & dom_lo
Definition: ERF_DiffSetup.H:9
bool l_consA
Definition: ERF_DiffSetup.H:18
int * d_eddy_diff_idx
Definition: ERF_DiffSetup.H:120
const Box zbx
Definition: ERF_DiffSetup.H:23
int * d_eddy_diff_idz
Definition: ERF_DiffSetup.H:122
const Real dx_inv
Definition: ERF_DiffSetup.H:6
const Real dy_inv
Definition: ERF_DiffSetup.H:7
int * d_eddy_diff_idy
Definition: ERF_DiffSetup.H:121
const Box xbx
Definition: ERF_DiffSetup.H:21
Real * d_alpha_eff
Definition: ERF_DiffSetup.H:119
const Box ybx
Definition: ERF_DiffSetup.H:22
void DiffusionSrcForState_N(const Box &bx, const Box &domain, int start_comp, int num_comp, const Array4< const Real > &u, const Array4< const Real > &v, const Array4< const Real > &cell_data, const Array4< const Real > &cell_prim, const Array4< Real > &cell_rhs, const Array4< Real > &xflux, const Array4< Real > &yflux, const Array4< Real > &zflux, const GpuArray< Real, AMREX_SPACEDIM > &cellSizeInv, const Array4< const Real > &SmnSmn_a, const Array4< const Real > &mf_mx, const Array4< const Real > &mf_ux, const Array4< const Real > &mf_vx, const Array4< const Real > &mf_my, const Array4< const Real > &mf_uy, const Array4< const Real > &mf_vy, Array4< Real > &hfx_z, Array4< Real > &qfx1_z, Array4< Real > &qfx2_z, Array4< Real > &diss, const Array4< const Real > &mu_turb, const SolverChoice &solverChoice, const int level, const Array4< const Real > &tm_arr, const GpuArray< Real, AMREX_SPACEDIM > grav_gpu, const BCRec *bc_ptr, const bool use_SurfLayer)
Definition: ERF_DiffusionSrcForState_N.cpp:40
#define RhoScalar_comp
Definition: ERF_IndexDefines.H:40
#define Rho_comp
Definition: ERF_IndexDefines.H:36
#define RhoTheta_comp
Definition: ERF_IndexDefines.H:37
#define RhoQ2_comp
Definition: ERF_IndexDefines.H:43
#define NSCALARS
Definition: ERF_IndexDefines.H:16
#define RhoQ1_comp
Definition: ERF_IndexDefines.H:42
@ RhoScalar_bc_comp
Definition: ERF_IndexDefines.H:80
@ ext_dir
Definition: ERF_IndexDefines.H:209
@ ext_dir_prim
Definition: ERF_IndexDefines.H:211
@ ext_dir_upwind
Definition: ERF_IndexDefines.H:217