Function for computing the scalar RHS for diffusion operator without terrain.
77 const Real explicit_fac =
one - implicit_fac;
80 Real l_abs_g = std::abs(grav_gpu[2]);
82 const Real dz_inv = cellSizeInv[2];
84 for (
int n(0); n<num_comp; ++n) {
85 const int qty_index = start_comp + n;
88 if (l_consA && l_turb) {
89 ParallelFor(xbx, [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept
91 const int prim_index = qty_index - 1;
95 Real rhoAlpha = rhoFace * d_alpha_eff[prim_scal_index];
96 rhoAlpha +=
myhalf * ( mu_turb(i , j, k, d_eddy_diff_idx[prim_scal_index])
97 + mu_turb(i-1, j, k, d_eddy_diff_idx[prim_scal_index]) );
106 ext_dir_on_xlo &= (i == dom_lo.x);
111 ext_dir_on_xhi &= (i == dom_hi.x+1);
113 if (ext_dir_on_xlo) {
114 xflux(i,j,k) = -rhoAlpha * ( -(
Real(8.)/
three) * cell_prim(i-1, j, k, prim_index)
115 +
three * cell_prim(i , j, k, prim_index)
116 - (
one/
three) * cell_prim(i+1, j, k, prim_index) ) * dx_inv * mf_ux(i,j,0)/mf_uy(i,j,0);
117 }
else if (ext_dir_on_xhi) {
118 xflux(i,j,k) = -rhoAlpha * ( (
Real(8.)/
three) * cell_prim(i , j, k, prim_index)
119 -
three * cell_prim(i-1, j, k, prim_index)
120 + (
one/
three) * cell_prim(i-2, j, k, prim_index) ) * dx_inv * mf_ux(i,j,0)/mf_uy(i,j,0);
122 xflux(i,j,k) = -rhoAlpha * ( cell_prim(i , j, k, prim_index)
123 - cell_prim(i-1, j, k, prim_index) ) * dx_inv * mf_ux(i,j,0)/mf_uy(i,j,0);
126 ParallelFor(ybx, [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept
128 const int prim_index = qty_index - 1;
132 Real rhoAlpha = rhoFace * d_alpha_eff[prim_scal_index];
133 rhoAlpha +=
myhalf * ( mu_turb(i, j , k, d_eddy_diff_idy[prim_scal_index])
134 + mu_turb(i, j-1, k, d_eddy_diff_idy[prim_scal_index]) );
142 ext_dir_on_ylo &= (j == dom_lo.y);
146 ext_dir_on_yhi &= (j == dom_hi.y+1);
148 if (ext_dir_on_ylo) {
149 yflux(i,j,k) = -rhoAlpha * ( -(
Real(8.)/
three) * cell_prim(i, j-1, k, prim_index)
150 +
three * cell_prim(i, j , k, prim_index)
151 - (
one/
three) * cell_prim(i, j+1, k, prim_index) ) * dy_inv * mf_vy(i,j,0)/mf_vx(i,j,0);
152 }
else if (ext_dir_on_yhi) {
153 yflux(i,j,k) = -rhoAlpha * ( (
Real(8.)/
three) * cell_prim(i, j , k, prim_index)
154 -
three * cell_prim(i, j-1, k, prim_index)
155 + (
one/
three) * cell_prim(i, j-2, k, prim_index) ) * dy_inv * mf_vy(i,j,0)/mf_vx(i,j,0);
157 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);
160 ParallelFor(zbx, [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept
162 const int prim_index = qty_index - 1;
166 Real rhoAlpha = rhoFace * d_alpha_eff[prim_scal_index];
167 rhoAlpha +=
myhalf * ( mu_turb(i, j, k , d_eddy_diff_idz[prim_scal_index])
168 + mu_turb(i, j, k-1, d_eddy_diff_idz[prim_scal_index]) );
180 bool SurfLayer_on_zlo = ( use_SurfLayer && k==dom_lo.z);
182 if (ext_dir_on_zlo) {
183 zflux(i,j,k) = -rhoAlpha * ( -(
Real(8.)/
three) * cell_prim(i, j, k-1, prim_index)
184 +
three * cell_prim(i, j, k , prim_index)
185 - (
one/
three) * cell_prim(i, j, k+1, prim_index) ) * dz_inv;
186 }
else if (ext_dir_on_zhi) {
187 zflux(i,j,k) = -rhoAlpha * ( (
Real(8.)/
three) * cell_prim(i, j, k , prim_index)
188 -
three * cell_prim(i, j, k-1, prim_index)
189 + (
one/
three) * cell_prim(i, j, k-2, prim_index) ) * dz_inv;
190 }
else if (SurfLayer_on_zlo) {
192 zflux(i,j,k) = hfx_z(i,j,0);
194 zflux(i,j,k) = qfx1_z(i,j,0);
199 zflux(i,j,k) = -rhoAlpha * (cell_prim(i, j, k, prim_index) - cell_prim(i, j, k-1, prim_index)) * dz_inv;
203 if (!SurfLayer_on_zlo) {
204 hfx_z(i,j,k) = zflux(i,j,k) * explicit_fac;
207 if (!SurfLayer_on_zlo) {
208 qfx1_z(i,j,k) = zflux(i,j,k) * explicit_fac;
211 qfx2_z(i,j,k) = zflux(i,j,k);
216 ParallelFor(xbx, [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept
218 const int prim_index = qty_index - 1;
220 Real rhoAlpha = d_alpha_eff[prim_index];
221 rhoAlpha +=
myhalf * ( mu_turb(i , j, k, d_eddy_diff_idx[prim_index])
222 + mu_turb(i-1, j, k, d_eddy_diff_idx[prim_index]) );
231 ext_dir_on_xlo &= (i == dom_lo.x);
236 ext_dir_on_xhi &= (i == dom_hi.x+1);
238 if (ext_dir_on_xlo) {
239 xflux(i,j,k) = -rhoAlpha * ( -(
Real(8.)/
three) * cell_prim(i-1, j, k, prim_index)
240 +
three * cell_prim(i , j, k, prim_index)
241 - (
one/
three) * cell_prim(i+1, j, k, prim_index) ) * dx_inv * mf_ux(i,j,0)/mf_uy(i,j,0);
242 }
else if (ext_dir_on_xhi) {
243 xflux(i,j,k) = -rhoAlpha * ( (
Real(8.)/
three) * cell_prim(i , j, k, prim_index)
244 -
three * cell_prim(i-1, j, k, prim_index)
245 + (
one/
three) * cell_prim(i-2, j, k, prim_index) ) * dx_inv * mf_ux(i,j,0)/mf_uy(i,j,0);
247 xflux(i,j,k) = -rhoAlpha * ( cell_prim(i , j, k, prim_index)
248 - cell_prim(i-1, j, k, prim_index) ) * dx_inv * mf_ux(i,j,0)/mf_uy(i,j,0);
251 ParallelFor(ybx, [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept
253 const int prim_index = qty_index - 1;
255 Real rhoAlpha = d_alpha_eff[prim_index];
256 rhoAlpha +=
myhalf * ( mu_turb(i, j , k, d_eddy_diff_idy[prim_index])
257 + mu_turb(i, j-1, k, d_eddy_diff_idy[prim_index]) );
266 ext_dir_on_ylo &= (j == dom_lo.y);
271 ext_dir_on_yhi &= (j == dom_hi.y+1);
273 if (ext_dir_on_ylo) {
274 yflux(i,j,k) = -rhoAlpha * ( -(
Real(8.)/
three) * cell_prim(i, j-1, k, prim_index)
275 +
three * cell_prim(i, j , k, prim_index)
276 - (
one/
three) * cell_prim(i, j+1, k, prim_index) ) * dy_inv * mf_vy(i,j,0)/mf_vx(i,j,0);
277 }
else if (ext_dir_on_yhi) {
278 yflux(i,j,k) = -rhoAlpha * ( (
Real(8.)/
three) * cell_prim(i, j , k, prim_index)
279 -
three * cell_prim(i, j-1, k, prim_index)
280 + (
one/
three) * cell_prim(i, j-2, k, prim_index) ) * dy_inv * mf_vy(i,j,0)/mf_vx(i,j,0);
282 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);
285 ParallelFor(zbx, [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept
287 const int prim_index = qty_index - 1;
289 Real rhoAlpha = d_alpha_eff[prim_index];
290 rhoAlpha +=
myhalf * ( mu_turb(i, j, k , d_eddy_diff_idz[prim_index])
291 + mu_turb(i, j, k-1, d_eddy_diff_idz[prim_index]) );
302 bool SurfLayer_on_zlo = ( use_SurfLayer && k == dom_lo.z);
304 if (ext_dir_on_zlo) {
305 zflux(i,j,k) = -rhoAlpha * ( -(
Real(8.)/
three) * cell_prim(i, j, k-1, prim_index)
306 +
three * cell_prim(i, j, k , prim_index)
307 - (
one/
three) * cell_prim(i, j, k+1, prim_index) ) * dz_inv;
308 }
else if (ext_dir_on_zhi) {
309 zflux(i,j,k) = -rhoAlpha * ( (
Real(8.)/
three) * cell_prim(i, j, k , prim_index)
310 -
three * cell_prim(i, j, k-1, prim_index)
311 + (
one/
three) * cell_prim(i, j, k-2, prim_index) ) * dz_inv;
312 }
else if (SurfLayer_on_zlo) {
314 zflux(i,j,k) = hfx_z(i,j,0);
316 zflux(i,j,k) = qfx1_z(i,j,0);
321 zflux(i,j,k) = -rhoAlpha * (cell_prim(i, j, k, prim_index) - cell_prim(i, j, k-1, prim_index)) * dz_inv;
325 if (!SurfLayer_on_zlo) {
326 hfx_z(i,j,k) = zflux(i,j,k) * explicit_fac;
329 if (!SurfLayer_on_zlo) {
330 qfx1_z(i,j,k) = zflux(i,j,k) * explicit_fac;
333 qfx2_z(i,j,k) = zflux(i,j,k);
338 ParallelFor(xbx, [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept
340 const int prim_index = qty_index - 1;
343 Real rhoAlpha = rhoFace * d_alpha_eff[prim_index];
352 ext_dir_on_xlo &= (i == dom_lo.x);
357 ext_dir_on_xhi &= (i == dom_hi.x+1);
359 if (ext_dir_on_xlo) {
360 xflux(i,j,k) = -rhoAlpha * ( -(
Real(8.)/
three) * cell_prim(i-1, j, k, prim_index)
361 +
three * cell_prim(i , j, k, prim_index)
362 - (
one/
three) * cell_prim(i+1, j, k, prim_index) ) * dx_inv * mf_ux(i,j,0)/mf_uy(i,j,0);
363 }
else if (ext_dir_on_xhi) {
364 xflux(i,j,k) = -rhoAlpha * ( (
Real(8.)/
three) * cell_prim(i , j, k, prim_index)
365 -
three * cell_prim(i-1, j, k, prim_index)
366 + (
one/
three) * cell_prim(i-2, j, k, prim_index) ) * dx_inv * mf_ux(i,j,0)/mf_uy(i,j,0);
368 xflux(i,j,k) = -rhoAlpha * ( cell_prim(i , j, k, prim_index)
369 - cell_prim(i-1, j, k, prim_index) ) * dx_inv * mf_ux(i,j,0)/mf_uy(i,j,0);
372 ParallelFor(ybx, [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept
374 const int prim_index = qty_index - 1;
377 Real rhoAlpha = rhoFace * d_alpha_eff[prim_index];
386 ext_dir_on_ylo &= (j == dom_lo.y);
391 ext_dir_on_yhi &= (j == dom_hi.y+1);
393 if (ext_dir_on_ylo) {
394 yflux(i,j,k) = -rhoAlpha * ( -(
Real(8.)/
three) * cell_prim(i, j-1, k, prim_index)
395 +
three * cell_prim(i, j , k, prim_index)
396 - (
one/
three) * cell_prim(i, j+1, k, prim_index) ) * dy_inv * mf_vy(i,j,0)/mf_vx(i,j,0);
397 }
else if (ext_dir_on_yhi) {
398 yflux(i,j,k) = -rhoAlpha * ( (
Real(8.)/
three) * cell_prim(i, j , k, prim_index)
399 -
three * cell_prim(i, j-1, k, prim_index)
400 + (
one/
three) * cell_prim(i, j-2, k, prim_index) ) * dy_inv * mf_vy(i,j,0)/mf_vx(i,j,0);
402 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);
405 ParallelFor(zbx, [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept
407 const int prim_index = qty_index - 1;
410 Real rhoAlpha = rhoFace * d_alpha_eff[prim_index];
421 bool SurfLayer_on_zlo = ( use_SurfLayer && k == dom_lo.z);
423 if (ext_dir_on_zlo) {
424 zflux(i,j,k) = -rhoAlpha * ( -(
Real(8.)/
three) * cell_prim(i, j, k-1, prim_index)
425 +
three * cell_prim(i, j, k , prim_index)
426 - (
one/
three) * cell_prim(i, j, k+1, prim_index) ) * dz_inv;
427 }
else if (ext_dir_on_zhi) {
428 zflux(i,j,k) = -rhoAlpha * ( (
Real(8.)/
three) * cell_prim(i, j, k , prim_index)
429 -
three * cell_prim(i, j, k-1, prim_index)
430 + (
one/
three) * cell_prim(i, j, k-2, prim_index) ) * dz_inv;
431 }
else if (SurfLayer_on_zlo) {
433 zflux(i,j,k) = hfx_z(i,j,0);
435 zflux(i,j,k) = qfx1_z(i,j,0);
440 zflux(i,j,k) = -rhoAlpha * (cell_prim(i, j, k, prim_index) - cell_prim(i, j, k-1, prim_index)) * dz_inv;
444 if (!SurfLayer_on_zlo) {
445 hfx_z(i,j,k) = zflux(i,j,k) * explicit_fac;
448 if (!SurfLayer_on_zlo) {
449 qfx1_z(i,j,k) = zflux(i,j,k) * explicit_fac;
452 qfx2_z(i,j,k) = zflux(i,j,k);
457 ParallelFor(xbx, [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept
459 const int prim_index = qty_index - 1;
461 Real rhoAlpha = d_alpha_eff[prim_index];
470 ext_dir_on_xlo &= (i == dom_lo.x);
475 ext_dir_on_xhi &= (i == dom_hi.x+1);
477 if (ext_dir_on_xlo) {
478 xflux(i,j,k) = -rhoAlpha * ( -(
Real(8.)/
three) * cell_prim(i-1, j, k, prim_index)
479 +
three * cell_prim(i , j, k, prim_index)
480 - (
one/
three) * cell_prim(i+1, j, k, prim_index) ) * dx_inv * mf_ux(i,j,0)/mf_uy(i,j,0);
481 }
else if (ext_dir_on_xhi) {
482 xflux(i,j,k) = -rhoAlpha * ( (
Real(8.)/
three) * cell_prim(i , j, k, prim_index)
483 -
three * cell_prim(i-1, j, k, prim_index)
484 + (
one/
three) * cell_prim(i-2, j, k, prim_index) ) * dx_inv * mf_ux(i,j,0)/mf_uy(i,j,0);
486 xflux(i,j,k) = -rhoAlpha * ( cell_prim(i , j, k, prim_index)
487 - cell_prim(i-1, j, k, prim_index) ) * dx_inv * mf_ux(i,j,0)/mf_uy(i,j,0);
490 ParallelFor(ybx, [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept
492 const int prim_index = qty_index - 1;
494 Real rhoAlpha = d_alpha_eff[prim_index];
503 ext_dir_on_ylo &= (j == dom_lo.y);
508 ext_dir_on_yhi &= (j == dom_hi.y+1);
510 if (ext_dir_on_ylo) {
511 yflux(i,j,k) = -rhoAlpha * ( -(
Real(8.)/
three) * cell_prim(i, j-1, k, prim_index)
512 +
three * cell_prim(i, j , k, prim_index)
513 - (
one/
three) * cell_prim(i, j+1, k, prim_index) ) * dy_inv * mf_vy(i,j,0)/mf_vx(i,j,0);
514 }
else if (ext_dir_on_yhi) {
515 yflux(i,j,k) = -rhoAlpha * ( (
Real(8.)/
three) * cell_prim(i, j , k, prim_index)
516 -
three * cell_prim(i, j-1, k, prim_index)
517 + (
one/
three) * cell_prim(i, j-2, k, prim_index) ) * dy_inv * mf_vy(i,j,0)/mf_vx(i,j,0);
519 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);
522 ParallelFor(zbx, [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept
524 const int prim_index = qty_index - 1;
526 Real rhoAlpha = d_alpha_eff[prim_index];
537 bool SurfLayer_on_zlo = ( use_SurfLayer && k == dom_lo.z);
539 if (ext_dir_on_zlo) {
540 zflux(i,j,k) = -rhoAlpha * ( -(
Real(8.)/
three) * cell_prim(i, j, k-1, prim_index)
541 +
three * cell_prim(i, j, k , prim_index)
542 - (
one/
three) * cell_prim(i, j, k+1, prim_index) ) * dz_inv;
543 }
else if (ext_dir_on_zhi) {
544 zflux(i,j,k) = -rhoAlpha * ( (
Real(8.)/
three) * cell_prim(i, j, k , prim_index)
545 -
three * cell_prim(i, j, k-1, prim_index)
546 + (
one/
three) * cell_prim(i, j, k-2, prim_index) ) * dz_inv;
547 }
else if (SurfLayer_on_zlo) {
549 zflux(i,j,k) = hfx_z(i,j,0);
551 zflux(i,j,k) = qfx1_z(i,j,0);
556 zflux(i,j,k) = -rhoAlpha * (cell_prim(i, j, k, prim_index) - cell_prim(i, j, k-1, prim_index)) * dz_inv;
560 if (!SurfLayer_on_zlo) {
561 hfx_z(i,j,k) = zflux(i,j,k) * explicit_fac;
564 if (!SurfLayer_on_zlo) {
565 qfx1_z(i,j,k) = zflux(i,j,k) * explicit_fac;
568 qfx2_z(i,j,k) = zflux(i,j,k);
577 ParallelFor(zbx, [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept
579 zflux(i,j,k) *= explicit_fac;
584 ParallelFor(bx,[=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept
586 Real mfsq = mf_mx(i,j,0) * mf_my(i,j,0);
587 cell_rhs(i,j,k,qty_index) -= (xflux(i+1,j ,k ) - xflux(i, j, k)) * dx_inv * mfsq
588 +(yflux(i ,j+1,k ) - yflux(i, j, k)) * dy_inv * mfsq
589 +(zflux(i ,j ,k+1) - zflux(i, j, k)) * dz_inv;
constexpr amrex::Real three
Definition: ERF_Constants.H:11
constexpr amrex::Real one
Definition: ERF_Constants.H:9
constexpr amrex::Real zero
Definition: ERF_Constants.H:8
constexpr amrex::Real myhalf
Definition: ERF_Constants.H:13
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:44
#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
#define RhoKE_comp
Definition: ERF_IndexDefines.H:38
ParallelFor(fab_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);})
amrex::Real Real
Definition: ERF_ShocInterface.H:19
@ RhoScalar_bc_comp
Definition: ERF_IndexDefines.H:90
@ ext_dir
Definition: ERF_IndexDefines.H:249
@ ext_dir_prim
Definition: ERF_IndexDefines.H:252
@ ext_dir_upwind
Definition: ERF_IndexDefines.H:257
Definition: ERF_PBLModels.H:387