Function for computing the scalar RHS for diffusion operator without terrain.
74 const Real explicit_fac = 1.0 - implicit_fac;
77 Real l_abs_g = std::abs(grav_gpu[2]);
79 const Real dz_inv = cellSizeInv[2];
81 for (
int n(0); n<num_comp; ++n) {
82 const int qty_index = start_comp + n;
86 ParallelFor(
xbx, [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept
88 const int prim_index = qty_index - 1;
103 ext_dir_on_xlo &= (i ==
dom_lo.x);
108 ext_dir_on_xlo &= (i ==
dom_hi.x+1);
110 if (ext_dir_on_xlo) {
111 xflux(i,j,k) = -rhoAlpha * ( -(8./3.) * cell_prim(i-1, j, k, prim_index)
112 + 3. * cell_prim(i , j, k, prim_index)
113 - (1./3.) * cell_prim(i+1, j, k, prim_index) ) *
dx_inv * mf_ux(i,j,0)/mf_uy(i,j,0);
114 }
else if (ext_dir_on_xhi) {
115 xflux(i,j,k) = -rhoAlpha * ( (8./3.) * cell_prim(i , j, k, prim_index)
116 - 3. * cell_prim(i-1, j, k, prim_index)
117 + (1./3.) * cell_prim(i-2, j, k, prim_index) ) *
dx_inv * mf_ux(i,j,0)/mf_uy(i,j,0);
119 xflux(i,j,k) = -rhoAlpha * ( cell_prim(i , j, k, prim_index)
120 - cell_prim(i-1, j, k, prim_index) ) *
dx_inv * mf_ux(i,j,0)/mf_uy(i,j,0);
123 ParallelFor(
ybx, [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept
125 const int prim_index = qty_index - 1;
130 rhoAlpha += 0.5 * ( mu_turb(i, j , k,
d_eddy_diff_idy[prim_scal_index])
139 ext_dir_on_ylo &= (j ==
dom_lo.y);
143 ext_dir_on_yhi &= (j ==
dom_hi.y+1);
145 if (ext_dir_on_ylo) {
146 yflux(i,j,k) = -rhoAlpha * ( -(8./3.) * cell_prim(i, j-1, k, prim_index)
147 + 3. * cell_prim(i, j , k, prim_index)
148 - (1./3.) * cell_prim(i, j+1, k, prim_index) ) *
dy_inv * mf_vy(i,j,0)/mf_vx(i,j,0);
149 }
else if (ext_dir_on_yhi) {
150 yflux(i,j,k) = -rhoAlpha * ( (8./3.) * cell_prim(i, j , k, prim_index)
151 - 3. * cell_prim(i, j-1, k, prim_index)
152 + (1./3.) * cell_prim(i, j-2, k, prim_index) ) *
dy_inv * mf_vy(i,j,0)/mf_vx(i,j,0);
154 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);
157 ParallelFor(
zbx, [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept
159 const int prim_index = qty_index - 1;
164 rhoAlpha += 0.5 * ( mu_turb(i, j, k ,
d_eddy_diff_idz[prim_scal_index])
177 bool SurfLayer_on_zlo = ( use_SurfLayer && k==
dom_lo.z);
179 if (ext_dir_on_zlo) {
180 zflux(i,j,k) = -rhoAlpha * ( -(8./3.) * cell_prim(i, j, k-1, prim_index)
181 + 3. * cell_prim(i, j, k , prim_index)
182 - (1./3.) * cell_prim(i, j, k+1, prim_index) ) * dz_inv;
183 }
else if (ext_dir_on_zhi) {
184 zflux(i,j,k) = -rhoAlpha * ( (8./3.) * cell_prim(i, j, k , prim_index)
185 - 3. * cell_prim(i, j, k-1, prim_index)
186 + (1./3.) * cell_prim(i, j, k-2, prim_index) ) * dz_inv;
187 }
else if (SurfLayer_on_zlo && (qty_index ==
RhoTheta_comp)) {
188 zflux(i,j,k) = hfx_z(i,j,0);
189 }
else if (SurfLayer_on_zlo && (qty_index ==
RhoQ1_comp)) {
190 zflux(i,j,k) = qfx1_z(i,j,0);
192 zflux(i,j,k) = -rhoAlpha * (cell_prim(i, j, k, prim_index) - cell_prim(i, j, k-1, prim_index)) * dz_inv;
196 if (!SurfLayer_on_zlo) {
197 hfx_z(i,j,k) = zflux(i,j,k) * explicit_fac;
200 if (!SurfLayer_on_zlo) {
201 qfx1_z(i,j,k) = zflux(i,j,k);
204 qfx2_z(i,j,k) = zflux(i,j,k);
209 ParallelFor(
xbx, [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept
211 const int prim_index = qty_index - 1;
224 ext_dir_on_xlo &= (i ==
dom_lo.x);
229 ext_dir_on_xhi &= (i ==
dom_hi.x+1);
231 if (ext_dir_on_xlo) {
232 xflux(i,j,k) = -rhoAlpha * ( -(8./3.) * cell_prim(i-1, j, k, prim_index)
233 + 3. * cell_prim(i , j, k, prim_index)
234 - (1./3.) * cell_prim(i+1, j, k, prim_index) ) *
dx_inv * mf_ux(i,j,0)/mf_uy(i,j,0);
235 }
else if (ext_dir_on_xhi) {
236 xflux(i,j,k) = -rhoAlpha * ( (8./3.) * cell_prim(i , j, k, prim_index)
237 - 3. * cell_prim(i-1, j, k, prim_index)
238 + (1./3.) * cell_prim(i-2, j, k, prim_index) ) *
dx_inv * mf_ux(i,j,0)/mf_uy(i,j,0);
240 xflux(i,j,k) = -rhoAlpha * ( cell_prim(i , j, k, prim_index)
241 - cell_prim(i-1, j, k, prim_index) ) *
dx_inv * mf_ux(i,j,0)/mf_uy(i,j,0);
244 ParallelFor(
ybx, [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept
246 const int prim_index = qty_index - 1;
259 ext_dir_on_ylo &= (j ==
dom_lo.y);
264 ext_dir_on_yhi &= (j ==
dom_hi.y+1);
266 if (ext_dir_on_ylo) {
267 yflux(i,j,k) = -rhoAlpha * ( -(8./3.) * cell_prim(i, j-1, k, prim_index)
268 + 3. * cell_prim(i, j , k, prim_index)
269 - (1./3.) * cell_prim(i, j+1, k, prim_index) ) *
dy_inv * mf_vy(i,j,0)/mf_vx(i,j,0);
270 }
else if (ext_dir_on_yhi) {
271 yflux(i,j,k) = -rhoAlpha * ( (8./3.) * cell_prim(i, j , k, prim_index)
272 - 3. * cell_prim(i, j-1, k, prim_index)
273 + (1./3.) * cell_prim(i, j-2, k, prim_index) ) *
dy_inv * mf_vy(i,j,0)/mf_vx(i,j,0);
275 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);
278 ParallelFor(
zbx, [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept
280 const int prim_index = qty_index - 1;
295 bool SurfLayer_on_zlo = ( use_SurfLayer && k ==
dom_lo.z);
297 if (ext_dir_on_zlo) {
298 zflux(i,j,k) = -rhoAlpha * ( -(8./3.) * cell_prim(i, j, k-1, prim_index)
299 + 3. * cell_prim(i, j, k , prim_index)
300 - (1./3.) * cell_prim(i, j, k+1, prim_index) ) * dz_inv;
301 }
else if (ext_dir_on_zhi) {
302 zflux(i,j,k) = -rhoAlpha * ( (8./3.) * cell_prim(i, j, k , prim_index)
303 - 3. * cell_prim(i, j, k-1, prim_index)
304 + (1./3.) * cell_prim(i, j, k-2, prim_index) ) * dz_inv;
305 }
else if (SurfLayer_on_zlo && (qty_index ==
RhoTheta_comp)) {
306 zflux(i,j,k) = hfx_z(i,j,0);
307 }
else if (SurfLayer_on_zlo && (qty_index ==
RhoQ1_comp)) {
308 zflux(i,j,k) = qfx1_z(i,j,0);
310 zflux(i,j,k) = -rhoAlpha * (cell_prim(i, j, k, prim_index) - cell_prim(i, j, k-1, prim_index)) * dz_inv;
314 if (!SurfLayer_on_zlo) {
315 hfx_z(i,j,k) = zflux(i,j,k) * explicit_fac;
318 if (!SurfLayer_on_zlo) {
319 qfx1_z(i,j,k) = zflux(i,j,k);
322 qfx2_z(i,j,k) = zflux(i,j,k);
327 ParallelFor(
xbx, [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept
329 const int prim_index = qty_index - 1;
341 ext_dir_on_xlo &= (i ==
dom_lo.x);
346 ext_dir_on_xhi &= (i ==
dom_hi.x+1);
348 if (ext_dir_on_xlo) {
349 xflux(i,j,k) = -rhoAlpha * ( -(8./3.) * cell_prim(i-1, j, k, prim_index)
350 + 3. * cell_prim(i , j, k, prim_index)
351 - (1./3.) * cell_prim(i+1, j, k, prim_index) ) *
dx_inv * mf_ux(i,j,0)/mf_uy(i,j,0);
352 }
else if (ext_dir_on_xhi) {
353 xflux(i,j,k) = -rhoAlpha * ( (8./3.) * cell_prim(i , j, k, prim_index)
354 - 3. * cell_prim(i-1, j, k, prim_index)
355 + (1./3.) * cell_prim(i-2, j, k, prim_index) ) *
dx_inv * mf_ux(i,j,0)/mf_uy(i,j,0);
357 xflux(i,j,k) = -rhoAlpha * ( cell_prim(i , j, k, prim_index)
358 - cell_prim(i-1, j, k, prim_index) ) *
dx_inv * mf_ux(i,j,0)/mf_uy(i,j,0);
361 ParallelFor(
ybx, [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept
363 const int prim_index = qty_index - 1;
375 ext_dir_on_ylo &= (j ==
dom_lo.y);
380 ext_dir_on_yhi &= (j ==
dom_hi.y+1);
382 if (ext_dir_on_ylo) {
383 yflux(i,j,k) = -rhoAlpha * ( -(8./3.) * cell_prim(i, j-1, k, prim_index)
384 + 3. * cell_prim(i, j , k, prim_index)
385 - (1./3.) * cell_prim(i, j+1, k, prim_index) ) *
dy_inv * mf_vy(i,j,0)/mf_vx(i,j,0);
386 }
else if (ext_dir_on_yhi) {
387 yflux(i,j,k) = -rhoAlpha * ( (8./3.) * cell_prim(i, j , k, prim_index)
388 - 3. * cell_prim(i, j-1, k, prim_index)
389 + (1./3.) * cell_prim(i, j-2, k, prim_index) ) *
dy_inv * mf_vy(i,j,0)/mf_vx(i,j,0);
391 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);
394 ParallelFor(
zbx, [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept
396 const int prim_index = qty_index - 1;
410 bool SurfLayer_on_zlo = ( use_SurfLayer && k ==
dom_lo.z);
412 if (ext_dir_on_zlo) {
413 zflux(i,j,k) = -rhoAlpha * ( -(8./3.) * cell_prim(i, j, k-1, prim_index)
414 + 3. * cell_prim(i, j, k , prim_index)
415 - (1./3.) * cell_prim(i, j, k+1, prim_index) ) * dz_inv;
416 }
else if (ext_dir_on_zhi) {
417 zflux(i,j,k) = -rhoAlpha * ( (8./3.) * cell_prim(i, j, k , prim_index)
418 - 3. * cell_prim(i, j, k-1, prim_index)
419 + (1./3.) * cell_prim(i, j, k-2, prim_index) ) * dz_inv;
420 }
else if (SurfLayer_on_zlo && (qty_index ==
RhoTheta_comp)) {
421 zflux(i,j,k) = hfx_z(i,j,0);
422 }
else if (SurfLayer_on_zlo && (qty_index ==
RhoQ1_comp)) {
423 zflux(i,j,k) = qfx1_z(i,j,0);
425 zflux(i,j,k) = -rhoAlpha * (cell_prim(i, j, k, prim_index) - cell_prim(i, j, k-1, prim_index)) * dz_inv;
429 if (!SurfLayer_on_zlo) {
430 hfx_z(i,j,k) = zflux(i,j,k) * explicit_fac;
433 if (!SurfLayer_on_zlo) {
434 qfx1_z(i,j,k) = zflux(i,j,k);
437 qfx2_z(i,j,k) = zflux(i,j,k);
442 ParallelFor(
xbx, [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept
444 const int prim_index = qty_index - 1;
455 ext_dir_on_xlo &= (i ==
dom_lo.x);
460 ext_dir_on_xhi &= (i ==
dom_hi.x+1);
462 if (ext_dir_on_xlo) {
463 xflux(i,j,k) = -rhoAlpha * ( -(8./3.) * cell_prim(i-1, j, k, prim_index)
464 + 3. * cell_prim(i , j, k, prim_index)
465 - (1./3.) * cell_prim(i+1, j, k, prim_index) ) *
dx_inv * mf_ux(i,j,0)/mf_uy(i,j,0);
466 }
else if (ext_dir_on_xhi) {
467 xflux(i,j,k) = -rhoAlpha * ( (8./3.) * cell_prim(i , j, k, prim_index)
468 - 3. * cell_prim(i-1, j, k, prim_index)
469 + (1./3.) * cell_prim(i-2, j, k, prim_index) ) *
dx_inv * mf_ux(i,j,0)/mf_uy(i,j,0);
471 xflux(i,j,k) = -rhoAlpha * ( cell_prim(i , j, k, prim_index)
472 - cell_prim(i-1, j, k, prim_index) ) *
dx_inv * mf_ux(i,j,0)/mf_uy(i,j,0);
475 ParallelFor(
ybx, [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept
477 const int prim_index = qty_index - 1;
488 ext_dir_on_ylo &= (j ==
dom_lo.y);
493 ext_dir_on_yhi &= (j ==
dom_hi.y+1);
495 if (ext_dir_on_ylo) {
496 yflux(i,j,k) = -rhoAlpha * ( -(8./3.) * cell_prim(i, j-1, k, prim_index)
497 + 3. * cell_prim(i, j , k, prim_index)
498 - (1./3.) * cell_prim(i, j+1, k, prim_index) ) *
dy_inv * mf_vy(i,j,0)/mf_vx(i,j,0);
499 }
else if (ext_dir_on_yhi) {
500 yflux(i,j,k) = -rhoAlpha * ( (8./3.) * cell_prim(i, j , k, prim_index)
501 - 3. * cell_prim(i, j-1, k, prim_index)
502 + (1./3.) * cell_prim(i, j-2, k, prim_index) ) *
dy_inv * mf_vy(i,j,0)/mf_vx(i,j,0);
504 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);
507 ParallelFor(
zbx, [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept
509 const int prim_index = qty_index - 1;
522 bool SurfLayer_on_zlo = ( use_SurfLayer && k ==
dom_lo.z);
524 if (ext_dir_on_zlo) {
525 zflux(i,j,k) = -rhoAlpha * ( -(8./3.) * cell_prim(i, j, k-1, prim_index)
526 + 3. * cell_prim(i, j, k , prim_index)
527 - (1./3.) * cell_prim(i, j, k+1, prim_index) ) * dz_inv;
528 }
else if (ext_dir_on_zhi) {
529 zflux(i,j,k) = -rhoAlpha * ( (8./3.) * cell_prim(i, j, k , prim_index)
530 - 3. * cell_prim(i, j, k-1, prim_index)
531 + (1./3.) * cell_prim(i, j, k-2, prim_index) ) * dz_inv;
532 }
else if (SurfLayer_on_zlo && (qty_index ==
RhoTheta_comp)) {
533 zflux(i,j,k) = hfx_z(i,j,0);
534 }
else if (SurfLayer_on_zlo && (qty_index ==
RhoQ1_comp)) {
535 zflux(i,j,k) = qfx1_z(i,j,0);
537 zflux(i,j,k) = -rhoAlpha * (cell_prim(i, j, k, prim_index) - cell_prim(i, j, k-1, prim_index)) * dz_inv;
541 if (!SurfLayer_on_zlo) {
542 hfx_z(i,j,k) = zflux(i,j,k) * explicit_fac;
545 if (!SurfLayer_on_zlo) {
546 qfx1_z(i,j,k) = zflux(i,j,k);
549 qfx2_z(i,j,k) = zflux(i,j,k);
556 ParallelFor(
zbx, [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept
558 zflux(i,j,k) *= explicit_fac;
563 ParallelFor(bx,[=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept
565 Real mfsq = mf_mx(i,j,0) * mf_my(i,j,0);
566 cell_rhs(i,j,k,qty_index) -= (xflux(i+1,j ,k ) - xflux(i, j, k)) *
dx_inv * mfsq
567 +(yflux(i ,j+1,k ) - yflux(i, j, k)) *
dy_inv * mfsq
568 +(zflux(i ,j ,k+1) - zflux(i, j, k)) * dz_inv;
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, const Real implicit_fac)
Definition: ERF_DiffusionSrcForState_N.cpp:41
const int bc_comp
Definition: ERF_Implicit.H:8
#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
#define PrimScalar_comp
Definition: ERF_IndexDefines.H:52
int * d_eddy_diff_idx
Definition: ERF_SetupDiff.H:47
const Box zbx
Definition: ERF_SetupDiff.H:9
const Real dx_inv
Definition: ERF_SetupDiff.H:4
const Real dy_inv
Definition: ERF_SetupDiff.H:5
int * d_eddy_diff_idy
Definition: ERF_SetupDiff.H:48
const Box xbx
Definition: ERF_SetupDiff.H:7
const Box ybx
Definition: ERF_SetupDiff.H:8
const auto & dom_hi
Definition: ERF_SetupVertDiff.H:2
bool l_turb
Definition: ERF_SetupVertDiff.H:8
const auto & dom_lo
Definition: ERF_SetupVertDiff.H:1
bool l_consA
Definition: ERF_SetupVertDiff.H:7
int * d_eddy_diff_idz
Definition: ERF_SetupVertDiff.H:107
Real * d_alpha_eff
Definition: ERF_SetupVertDiff.H:104
amrex::Real Real
Definition: ERF_ShocInterface.H:19
@ 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