Function for computing the scalar RHS for diffusion operator without terrain.
74 const Real explicit_fac =
one - 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 * ( -(
Real(8.)/
three) * cell_prim(i-1, j, k, prim_index)
112 +
three * cell_prim(i , j, k, prim_index)
113 - (
one/
three) * 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 * ( (
Real(8.)/
three) * cell_prim(i , j, k, prim_index)
116 -
three * cell_prim(i-1, j, k, prim_index)
117 + (
one/
three) * 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;
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 * ( -(
Real(8.)/
three) * cell_prim(i, j-1, k, prim_index)
147 +
three * cell_prim(i, j , k, prim_index)
148 - (
one/
three) * 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 * ( (
Real(8.)/
three) * cell_prim(i, j , k, prim_index)
151 -
three * cell_prim(i, j-1, k, prim_index)
152 + (
one/
three) * 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;
177 bool SurfLayer_on_zlo = ( use_SurfLayer && k==
dom_lo.z);
179 if (ext_dir_on_zlo) {
180 zflux(i,j,k) = -rhoAlpha * ( -(
Real(8.)/
three) * cell_prim(i, j, k-1, prim_index)
181 +
three * cell_prim(i, j, k , prim_index)
182 - (
one/
three) * cell_prim(i, j, k+1, prim_index) ) * dz_inv;
183 }
else if (ext_dir_on_zhi) {
184 zflux(i,j,k) = -rhoAlpha * ( (
Real(8.)/
three) * cell_prim(i, j, k , prim_index)
185 -
three * cell_prim(i, j, k-1, prim_index)
186 + (
one/
three) * cell_prim(i, j, k-2, prim_index) ) * dz_inv;
187 }
else if (SurfLayer_on_zlo) {
189 zflux(i,j,k) = hfx_z(i,j,0);
191 zflux(i,j,k) = qfx1_z(i,j,0);
196 zflux(i,j,k) = -rhoAlpha * (cell_prim(i, j, k, prim_index) - cell_prim(i, j, k-1, prim_index)) * dz_inv;
200 if (!SurfLayer_on_zlo) {
201 hfx_z(i,j,k) = zflux(i,j,k) * explicit_fac;
204 if (!SurfLayer_on_zlo) {
205 qfx1_z(i,j,k) = zflux(i,j,k) * explicit_fac;
208 qfx2_z(i,j,k) = zflux(i,j,k);
213 ParallelFor(
xbx, [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept
215 const int prim_index = qty_index - 1;
228 ext_dir_on_xlo &= (i ==
dom_lo.x);
233 ext_dir_on_xhi &= (i ==
dom_hi.x+1);
235 if (ext_dir_on_xlo) {
236 xflux(i,j,k) = -rhoAlpha * ( -(
Real(8.)/
three) * cell_prim(i-1, j, k, prim_index)
237 +
three * cell_prim(i , j, k, prim_index)
238 - (
one/
three) * cell_prim(i+1, j, k, prim_index) ) *
dx_inv * mf_ux(i,j,0)/mf_uy(i,j,0);
239 }
else if (ext_dir_on_xhi) {
240 xflux(i,j,k) = -rhoAlpha * ( (
Real(8.)/
three) * cell_prim(i , j, k, prim_index)
241 -
three * cell_prim(i-1, j, k, prim_index)
242 + (
one/
three) * cell_prim(i-2, j, k, prim_index) ) *
dx_inv * mf_ux(i,j,0)/mf_uy(i,j,0);
244 xflux(i,j,k) = -rhoAlpha * ( cell_prim(i , j, k, prim_index)
245 - cell_prim(i-1, j, k, prim_index) ) *
dx_inv * mf_ux(i,j,0)/mf_uy(i,j,0);
248 ParallelFor(
ybx, [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept
250 const int prim_index = qty_index - 1;
263 ext_dir_on_ylo &= (j ==
dom_lo.y);
268 ext_dir_on_yhi &= (j ==
dom_hi.y+1);
270 if (ext_dir_on_ylo) {
271 yflux(i,j,k) = -rhoAlpha * ( -(
Real(8.)/
three) * cell_prim(i, j-1, k, prim_index)
272 +
three * cell_prim(i, j , k, prim_index)
273 - (
one/
three) * cell_prim(i, j+1, k, prim_index) ) *
dy_inv * mf_vy(i,j,0)/mf_vx(i,j,0);
274 }
else if (ext_dir_on_yhi) {
275 yflux(i,j,k) = -rhoAlpha * ( (
Real(8.)/
three) * cell_prim(i, j , k, prim_index)
276 -
three * cell_prim(i, j-1, k, prim_index)
277 + (
one/
three) * cell_prim(i, j-2, k, prim_index) ) *
dy_inv * mf_vy(i,j,0)/mf_vx(i,j,0);
279 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);
282 ParallelFor(
zbx, [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept
284 const int prim_index = qty_index - 1;
299 bool SurfLayer_on_zlo = ( use_SurfLayer && k ==
dom_lo.z);
301 if (ext_dir_on_zlo) {
302 zflux(i,j,k) = -rhoAlpha * ( -(
Real(8.)/
three) * cell_prim(i, j, k-1, prim_index)
303 +
three * cell_prim(i, j, k , prim_index)
304 - (
one/
three) * cell_prim(i, j, k+1, prim_index) ) * dz_inv;
305 }
else if (ext_dir_on_zhi) {
306 zflux(i,j,k) = -rhoAlpha * ( (
Real(8.)/
three) * cell_prim(i, j, k , prim_index)
307 -
three * cell_prim(i, j, k-1, prim_index)
308 + (
one/
three) * cell_prim(i, j, k-2, prim_index) ) * dz_inv;
309 }
else if (SurfLayer_on_zlo) {
311 zflux(i,j,k) = hfx_z(i,j,0);
313 zflux(i,j,k) = qfx1_z(i,j,0);
318 zflux(i,j,k) = -rhoAlpha * (cell_prim(i, j, k, prim_index) - cell_prim(i, j, k-1, prim_index)) * dz_inv;
322 if (!SurfLayer_on_zlo) {
323 hfx_z(i,j,k) = zflux(i,j,k) * explicit_fac;
326 if (!SurfLayer_on_zlo) {
327 qfx1_z(i,j,k) = zflux(i,j,k) * explicit_fac;
330 qfx2_z(i,j,k) = zflux(i,j,k);
335 ParallelFor(
xbx, [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept
337 const int prim_index = qty_index - 1;
349 ext_dir_on_xlo &= (i ==
dom_lo.x);
354 ext_dir_on_xhi &= (i ==
dom_hi.x+1);
356 if (ext_dir_on_xlo) {
357 xflux(i,j,k) = -rhoAlpha * ( -(
Real(8.)/
three) * cell_prim(i-1, j, k, prim_index)
358 +
three * cell_prim(i , j, k, prim_index)
359 - (
one/
three) * cell_prim(i+1, j, k, prim_index) ) *
dx_inv * mf_ux(i,j,0)/mf_uy(i,j,0);
360 }
else if (ext_dir_on_xhi) {
361 xflux(i,j,k) = -rhoAlpha * ( (
Real(8.)/
three) * cell_prim(i , j, k, prim_index)
362 -
three * cell_prim(i-1, j, k, prim_index)
363 + (
one/
three) * cell_prim(i-2, j, k, prim_index) ) *
dx_inv * mf_ux(i,j,0)/mf_uy(i,j,0);
365 xflux(i,j,k) = -rhoAlpha * ( cell_prim(i , j, k, prim_index)
366 - cell_prim(i-1, j, k, prim_index) ) *
dx_inv * mf_ux(i,j,0)/mf_uy(i,j,0);
369 ParallelFor(
ybx, [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept
371 const int prim_index = qty_index - 1;
383 ext_dir_on_ylo &= (j ==
dom_lo.y);
388 ext_dir_on_yhi &= (j ==
dom_hi.y+1);
390 if (ext_dir_on_ylo) {
391 yflux(i,j,k) = -rhoAlpha * ( -(
Real(8.)/
three) * cell_prim(i, j-1, k, prim_index)
392 +
three * cell_prim(i, j , k, prim_index)
393 - (
one/
three) * cell_prim(i, j+1, k, prim_index) ) *
dy_inv * mf_vy(i,j,0)/mf_vx(i,j,0);
394 }
else if (ext_dir_on_yhi) {
395 yflux(i,j,k) = -rhoAlpha * ( (
Real(8.)/
three) * cell_prim(i, j , k, prim_index)
396 -
three * cell_prim(i, j-1, k, prim_index)
397 + (
one/
three) * cell_prim(i, j-2, k, prim_index) ) *
dy_inv * mf_vy(i,j,0)/mf_vx(i,j,0);
399 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);
402 ParallelFor(
zbx, [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept
404 const int prim_index = qty_index - 1;
418 bool SurfLayer_on_zlo = ( use_SurfLayer && k ==
dom_lo.z);
420 if (ext_dir_on_zlo) {
421 zflux(i,j,k) = -rhoAlpha * ( -(
Real(8.)/
three) * cell_prim(i, j, k-1, prim_index)
422 +
three * cell_prim(i, j, k , prim_index)
423 - (
one/
three) * cell_prim(i, j, k+1, prim_index) ) * dz_inv;
424 }
else if (ext_dir_on_zhi) {
425 zflux(i,j,k) = -rhoAlpha * ( (
Real(8.)/
three) * cell_prim(i, j, k , prim_index)
426 -
three * cell_prim(i, j, k-1, prim_index)
427 + (
one/
three) * cell_prim(i, j, k-2, prim_index) ) * dz_inv;
428 }
else if (SurfLayer_on_zlo) {
430 zflux(i,j,k) = hfx_z(i,j,0);
432 zflux(i,j,k) = qfx1_z(i,j,0);
437 zflux(i,j,k) = -rhoAlpha * (cell_prim(i, j, k, prim_index) - cell_prim(i, j, k-1, prim_index)) * dz_inv;
441 if (!SurfLayer_on_zlo) {
442 hfx_z(i,j,k) = zflux(i,j,k) * explicit_fac;
445 if (!SurfLayer_on_zlo) {
446 qfx1_z(i,j,k) = zflux(i,j,k) * explicit_fac;
449 qfx2_z(i,j,k) = zflux(i,j,k);
454 ParallelFor(
xbx, [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept
456 const int prim_index = qty_index - 1;
467 ext_dir_on_xlo &= (i ==
dom_lo.x);
472 ext_dir_on_xhi &= (i ==
dom_hi.x+1);
474 if (ext_dir_on_xlo) {
475 xflux(i,j,k) = -rhoAlpha * ( -(
Real(8.)/
three) * cell_prim(i-1, j, k, prim_index)
476 +
three * cell_prim(i , j, k, prim_index)
477 - (
one/
three) * cell_prim(i+1, j, k, prim_index) ) *
dx_inv * mf_ux(i,j,0)/mf_uy(i,j,0);
478 }
else if (ext_dir_on_xhi) {
479 xflux(i,j,k) = -rhoAlpha * ( (
Real(8.)/
three) * cell_prim(i , j, k, prim_index)
480 -
three * cell_prim(i-1, j, k, prim_index)
481 + (
one/
three) * cell_prim(i-2, j, k, prim_index) ) *
dx_inv * mf_ux(i,j,0)/mf_uy(i,j,0);
483 xflux(i,j,k) = -rhoAlpha * ( cell_prim(i , j, k, prim_index)
484 - cell_prim(i-1, j, k, prim_index) ) *
dx_inv * mf_ux(i,j,0)/mf_uy(i,j,0);
487 ParallelFor(
ybx, [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept
489 const int prim_index = qty_index - 1;
500 ext_dir_on_ylo &= (j ==
dom_lo.y);
505 ext_dir_on_yhi &= (j ==
dom_hi.y+1);
507 if (ext_dir_on_ylo) {
508 yflux(i,j,k) = -rhoAlpha * ( -(
Real(8.)/
three) * cell_prim(i, j-1, k, prim_index)
509 +
three * cell_prim(i, j , k, prim_index)
510 - (
one/
three) * cell_prim(i, j+1, k, prim_index) ) *
dy_inv * mf_vy(i,j,0)/mf_vx(i,j,0);
511 }
else if (ext_dir_on_yhi) {
512 yflux(i,j,k) = -rhoAlpha * ( (
Real(8.)/
three) * cell_prim(i, j , k, prim_index)
513 -
three * cell_prim(i, j-1, k, prim_index)
514 + (
one/
three) * cell_prim(i, j-2, k, prim_index) ) *
dy_inv * mf_vy(i,j,0)/mf_vx(i,j,0);
516 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);
519 ParallelFor(
zbx, [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept
521 const int prim_index = qty_index - 1;
534 bool SurfLayer_on_zlo = ( use_SurfLayer && k ==
dom_lo.z);
536 if (ext_dir_on_zlo) {
537 zflux(i,j,k) = -rhoAlpha * ( -(
Real(8.)/
three) * cell_prim(i, j, k-1, prim_index)
538 +
three * cell_prim(i, j, k , prim_index)
539 - (
one/
three) * cell_prim(i, j, k+1, prim_index) ) * dz_inv;
540 }
else if (ext_dir_on_zhi) {
541 zflux(i,j,k) = -rhoAlpha * ( (
Real(8.)/
three) * cell_prim(i, j, k , prim_index)
542 -
three * cell_prim(i, j, k-1, prim_index)
543 + (
one/
three) * cell_prim(i, j, k-2, prim_index) ) * dz_inv;
544 }
else if (SurfLayer_on_zlo) {
546 zflux(i,j,k) = hfx_z(i,j,0);
548 zflux(i,j,k) = qfx1_z(i,j,0);
553 zflux(i,j,k) = -rhoAlpha * (cell_prim(i, j, k, prim_index) - cell_prim(i, j, k-1, prim_index)) * dz_inv;
557 if (!SurfLayer_on_zlo) {
558 hfx_z(i,j,k) = zflux(i,j,k) * explicit_fac;
561 if (!SurfLayer_on_zlo) {
562 qfx1_z(i,j,k) = zflux(i,j,k) * explicit_fac;
565 qfx2_z(i,j,k) = zflux(i,j,k);
573 ParallelFor(
zbx, [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept
575 zflux(i,j,k) *= explicit_fac;
580 ParallelFor(bx,[=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept
582 Real mfsq = mf_mx(i,j,0) * mf_my(i,j,0);
583 cell_rhs(i,j,k,qty_index) -= (xflux(i+1,j ,k ) - xflux(i, j, k)) *
dx_inv * mfsq
584 +(yflux(i ,j+1,k ) - yflux(i, j, k)) *
dy_inv * mfsq
585 +(zflux(i ,j ,k+1) - zflux(i, j, k)) * dz_inv;
constexpr amrex::Real three
Definition: ERF_Constants.H:9
constexpr amrex::Real one
Definition: ERF_Constants.H:7
constexpr amrex::Real zero
Definition: ERF_Constants.H:6
constexpr amrex::Real myhalf
Definition: ERF_Constants.H:11
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
#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:57
ParallelFor(grown_box, [=] AMREX_GPU_DEVICE(int i, int j, int k) { qrcuten_arr(i, j, k)=Real(0);qscuten_arr(i, j, k)=Real(0);qicuten_arr(i, j, k)=Real(0);})
int * d_eddy_diff_idx
Definition: ERF_SetupDiff.H:45
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:46
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:9
const auto & dom_lo
Definition: ERF_SetupVertDiff.H:1
bool l_consA
Definition: ERF_SetupVertDiff.H:8
int * d_eddy_diff_idz
Definition: ERF_SetupVertDiff.H:99
Real * d_alpha_eff
Definition: ERF_SetupVertDiff.H:98
amrex::Real Real
Definition: ERF_ShocInterface.H:19
@ RhoScalar_bc_comp
Definition: ERF_IndexDefines.H:90
@ ext_dir
Definition: ERF_IndexDefines.H:243
@ ext_dir_prim
Definition: ERF_IndexDefines.H:246
@ ext_dir_upwind
Definition: ERF_IndexDefines.H:251