80 auto dz_ptr = stretched_dz_d.data();
82 for (
int n(0); n<num_comp; ++n) {
83 const int qty_index = start_comp + n;
87 ParallelFor(
xbx, [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept
89 const int prim_index = qty_index - 1;
101 bool SurfLayer_on_zlo = ( use_SurfLayer && k ==
dom_lo.z);
103 Real GradCx =
dx_inv * ( cell_prim(i, j, k , prim_index) - cell_prim(i-1, j, k , prim_index) );
106 xflux(i,j,k) = hfx_x(i,j,0);
107 }
else if (SurfLayer_on_zlo && (qty_index ==
RhoQ1_comp)) {
108 xflux(i,j,k) = qfx1_x(i,j,0);
110 xflux(i,j,k) = -rhoAlpha * mf_ux(i,j,0) * GradCx;
113 ParallelFor(
ybx, [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept
115 const int prim_index = qty_index - 1;
120 rhoAlpha += 0.5 * ( mu_turb(i, j , k,
d_eddy_diff_idy[prim_scal_index])
126 bool SurfLayer_on_zlo = ( use_SurfLayer && k ==
dom_lo.z);
128 Real GradCy =
dy_inv * ( cell_prim(i, j, k , prim_index) - cell_prim(i, j-1, k , prim_index) );
131 yflux(i,j,k) = hfx_y(i,j,0);
132 }
else if (SurfLayer_on_zlo && (qty_index ==
RhoQ1_comp)) {
133 yflux(i,j,k) = qfx1_y(i,j,0);
135 yflux(i,j,k) = -rhoAlpha * mf_vy(i,j,0) * GradCy;
138 ParallelFor(
zbx, [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept
140 const int prim_index = qty_index - 1;
145 rhoAlpha += 0.5 * ( mu_turb(i, j, k ,
d_eddy_diff_idz[prim_scal_index])
158 bool SurfLayer_on_zlo = ( use_SurfLayer && k ==
dom_lo.z);
160 if (ext_dir_on_zlo) {
162 Real dz0 = dz_ptr[k];
163 Real dz1 = dz_ptr[k+1];
164 Real idz0 = 1.0 / dz0;
165 Real f = (dz1 / dz0) + 2.0;
167 Real c3 = 2.0 / (f - f2);
170 GradCz = idz0 * (
c1 * cell_prim(i, j, k-1, prim_index)
171 +
c2 * cell_prim(i, j, k , prim_index)
172 + c3 * cell_prim(i, j, k+1, prim_index) );
173 }
else if (ext_dir_on_zhi) {
175 Real dz0 = dz_ptr[k-1];
176 Real dz1 = dz_ptr[k-2];
177 Real idz0 = 1.0 / dz0;
178 Real f = (dz1 / dz0) + 2.0;
180 Real c3 = 2.0 / (f - f2);
183 GradCz = idz0 * ( -(
c1 * cell_prim(i, j, k , prim_index)
184 +
c2 * cell_prim(i, j, k-1, prim_index)
185 + c3 * cell_prim(i, j, k-2, prim_index) ) );
187 Real dzk_inv = (k == 0) ? 1.0 / dz_ptr[k] : 2.0 / (dz_ptr[k] + dz_ptr[k-1]);
188 GradCz = dzk_inv * ( cell_prim(i, j, k, prim_index) - cell_prim(i, j, k-1, prim_index) );
192 zflux(i,j,k) = hfx_z(i,j,0);
193 }
else if (SurfLayer_on_zlo && (qty_index ==
RhoQ1_comp)) {
194 zflux(i,j,k) = qfx1_z(i,j,0);
196 zflux(i,j,k) = -rhoAlpha * GradCz;
200 if (!SurfLayer_on_zlo) {
201 hfx_z(i,j,k) = zflux(i,j,k);
204 if (!SurfLayer_on_zlo) {
205 qfx1_z(i,j,k) = zflux(i,j,k);
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;
224 bool SurfLayer_on_zlo = ( use_SurfLayer && k ==
dom_lo.z);
226 Real GradCx =
dx_inv * ( cell_prim(i, j, k , prim_index) - cell_prim(i-1, j, k , prim_index) );
229 xflux(i,j,k) = hfx_x(i,j,0);
230 }
else if (SurfLayer_on_zlo && (qty_index ==
RhoQ1_comp)) {
231 xflux(i,j,k) = qfx1_x(i,j,0);
233 xflux(i,j,k) = -rhoAlpha * mf_ux(i,j,0) * GradCx;
236 ParallelFor(
ybx, [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept
238 const int prim_index = qty_index - 1;
247 bool SurfLayer_on_zlo = ( use_SurfLayer && k ==
dom_lo.z);
249 Real GradCy =
dy_inv * ( cell_prim(i, j, k , prim_index) - cell_prim(i, j-1, k , prim_index) );
252 yflux(i,j,k) = hfx_y(i,j,0);
253 }
else if (SurfLayer_on_zlo && (qty_index ==
RhoQ1_comp)) {
254 yflux(i,j,k) = qfx1_y(i,j,0);
256 yflux(i,j,k) = -rhoAlpha * mf_vy(i,j,0) * GradCy;
259 ParallelFor(
zbx, [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept
261 const int prim_index = qty_index - 1;
278 bool SurfLayer_on_zlo = ( use_SurfLayer && k ==
dom_lo.z);
280 if (ext_dir_on_zlo) {
282 Real dz0 = dz_ptr[k];
283 Real dz1 = dz_ptr[k+1];
284 Real idz0 = 1.0 / dz0;
285 Real f = (dz1 / dz0) + 2.0;
287 Real c3 = 2.0 / (f - f2);
290 GradCz = idz0 * (
c1 * cell_prim(i, j, k-1, prim_index)
291 +
c2 * cell_prim(i, j, k , prim_index)
292 + c3 * cell_prim(i, j, k+1, prim_index) );
293 }
else if (ext_dir_on_zhi) {
295 Real dz0 = dz_ptr[k-1];
296 Real dz1 = dz_ptr[k-2];
297 Real idz0 = 1.0 / dz0;
298 Real f = (dz1 / dz0) + 2.0;
300 Real c3 = 2.0 / (f - f2);
303 GradCz = idz0 * ( -(
c1 * cell_prim(i, j, k , prim_index)
304 +
c2 * cell_prim(i, j, k-1, prim_index)
305 + c3 * cell_prim(i, j, k-2, prim_index) ) );
307 Real dzk_inv = (k == 0) ? 1.0 / dz_ptr[k] : 2.0 / (dz_ptr[k] + dz_ptr[k-1]);
308 GradCz = dzk_inv * ( cell_prim(i, j, k, prim_index) - cell_prim(i, j, k-1, prim_index) );
312 zflux(i,j,k) = hfx_z(i,j,0);
313 }
else if (SurfLayer_on_zlo && (qty_index ==
RhoQ1_comp)) {
314 zflux(i,j,k) = qfx1_z(i,j,0);
316 zflux(i,j,k) = -rhoAlpha * GradCz;
320 if (!SurfLayer_on_zlo) {
321 hfx_z(i,j,k) = zflux(i,j,k);
324 if (!SurfLayer_on_zlo) {
325 qfx1_z(i,j,k) = zflux(i,j,k);
328 qfx2_z(i,j,k) = zflux(i,j,k);
333 ParallelFor(
xbx, [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept
335 const int prim_index = qty_index - 1;
343 bool SurfLayer_on_zlo = ( use_SurfLayer && k ==
dom_lo.z);
345 Real GradCx =
dx_inv * ( cell_prim(i, j, k , prim_index) - cell_prim(i-1, j, k , prim_index) );
348 xflux(i,j,k) = hfx_x(i,j,0);
349 }
else if (SurfLayer_on_zlo && (qty_index ==
RhoQ1_comp)) {
350 xflux(i,j,k) = qfx1_x(i,j,0);
352 xflux(i,j,k) = -rhoAlpha * mf_ux(i,j,0) * GradCx;
355 ParallelFor(
ybx, [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept
357 const int prim_index = qty_index - 1;
365 bool SurfLayer_on_zlo = ( use_SurfLayer && k ==
dom_lo.z);
367 Real GradCy =
dy_inv * ( cell_prim(i, j, k , prim_index) - cell_prim(i, j-1, k , prim_index) );
370 yflux(i,j,k) = hfx_y(i,j,0);
371 }
else if (SurfLayer_on_zlo && (qty_index ==
RhoQ1_comp)) {
372 yflux(i,j,k) = qfx1_y(i,j,0);
374 yflux(i,j,k) = -rhoAlpha * mf_vy(i,j,0) * GradCy;
377 ParallelFor(
zbx, [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept
379 const int prim_index = qty_index - 1;
394 bool SurfLayer_on_zlo = ( use_SurfLayer && k ==
dom_lo.z);
396 if (ext_dir_on_zlo) {
398 Real dz0 = dz_ptr[k];
399 Real dz1 = dz_ptr[k+1];
400 Real idz0 = 1.0 / dz0;
401 Real f = (dz1 / dz0) + 2.0;
403 Real c3 = 2.0 / (f - f2);
406 GradCz = idz0 * (
c1 * cell_prim(i, j, k-1, prim_index)
407 +
c2 * cell_prim(i, j, k , prim_index)
408 + c3 * cell_prim(i, j, k+1, prim_index) );
409 }
else if (ext_dir_on_zhi) {
411 Real dz0 = dz_ptr[k-1];
412 Real dz1 = dz_ptr[k-2];
413 Real idz0 = 1.0 / dz0;
414 Real f = (dz1 / dz0) + 2.0;
416 Real c3 = 2.0 / (f - f2);
419 GradCz = idz0 * ( -(
c1 * cell_prim(i, j, k , prim_index)
420 +
c2 * cell_prim(i, j, k-1, prim_index)
421 + c3 * cell_prim(i, j, k-2, prim_index) ) );
423 Real dzk_inv = (k == 0) ? 1.0 / dz_ptr[k] : 2.0 / (dz_ptr[k] + dz_ptr[k-1]);
424 GradCz = dzk_inv * ( cell_prim(i, j, k, prim_index) - cell_prim(i, j, k-1, prim_index) );
428 zflux(i,j,k) = hfx_z(i,j,0);
429 }
else if (SurfLayer_on_zlo && (qty_index ==
RhoQ1_comp)) {
430 zflux(i,j,k) = qfx1_z(i,j,0);
432 zflux(i,j,k) = -rhoAlpha * GradCz;
436 if (!SurfLayer_on_zlo) {
437 hfx_z(i,j,k) = zflux(i,j,k);
440 if (!SurfLayer_on_zlo) {
441 qfx1_z(i,j,k) = zflux(i,j,k);
444 qfx2_z(i,j,k) = zflux(i,j,k);
449 ParallelFor(
xbx, [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept
451 const int prim_index = qty_index - 1;
458 bool SurfLayer_on_zlo = ( use_SurfLayer && k ==
dom_lo.z);
460 Real GradCx =
dx_inv * ( cell_prim(i, j, k , prim_index) - cell_prim(i-1, j, k , prim_index) );
463 xflux(i,j,k) = hfx_x(i,j,0);
464 }
else if (SurfLayer_on_zlo && (qty_index ==
RhoQ1_comp)) {
465 xflux(i,j,k) = qfx1_x(i,j,0);
467 xflux(i,j,k) = -rhoAlpha * mf_ux(i,j,0) * GradCx;
470 ParallelFor(
ybx, [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept
472 const int prim_index = qty_index - 1;
479 bool SurfLayer_on_zlo = ( use_SurfLayer && k ==
dom_lo.z);
481 Real GradCy =
dy_inv * ( cell_prim(i, j, k , prim_index) - cell_prim(i, j-1, k , prim_index) );
484 yflux(i,j,k) = hfx_y(i,j,0);
485 }
else if (SurfLayer_on_zlo && (qty_index ==
RhoQ1_comp)) {
486 yflux(i,j,k) = qfx1_y(i,j,0);
488 yflux(i,j,k) = -rhoAlpha * mf_vy(i,j,0) * GradCy;
491 ParallelFor(
zbx, [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept
493 const int prim_index = qty_index - 1;
507 bool SurfLayer_on_zlo = ( use_SurfLayer && k ==
dom_lo.z);
509 if (ext_dir_on_zlo) {
511 Real dz0 = dz_ptr[k];
512 Real dz1 = dz_ptr[k+1];
513 Real idz0 = 1.0 / dz0;
514 Real f = (dz1 / dz0) + 2.0;
516 Real c3 = 2.0 / (f - f2);
519 GradCz = idz0 * (
c1 * cell_prim(i, j, k-1, prim_index)
520 +
c2 * cell_prim(i, j, k , prim_index)
521 + c3 * cell_prim(i, j, k+1, prim_index) );
522 }
else if (ext_dir_on_zhi) {
524 Real dz0 = dz_ptr[k-1];
525 Real dz1 = dz_ptr[k-2];
526 Real idz0 = 1.0 / dz0;
527 Real f = (dz1 / dz0) + 2.0;
529 Real c3 = 2.0 / (f - f2);
532 GradCz = idz0 * ( -(
c1 * cell_prim(i, j, k , prim_index)
533 +
c2 * cell_prim(i, j, k-1, prim_index)
534 + c3 * cell_prim(i, j, k-2, prim_index) ) );
536 Real dzk_inv = (k == 0) ? 1.0 / dz_ptr[k] : 2.0 / (dz_ptr[k] + dz_ptr[k-1]);
537 GradCz = dzk_inv * ( cell_prim(i, j, k, prim_index) - cell_prim(i, j, k-1, prim_index) );
541 zflux(i,j,k) = hfx_z(i,j,0);
542 }
else if (SurfLayer_on_zlo && (qty_index ==
RhoQ1_comp)) {
543 zflux(i,j,k) = qfx1_z(i,j,0);
545 zflux(i,j,k) = -rhoAlpha * GradCz;
549 if (!SurfLayer_on_zlo) {
550 hfx_z(i,j,k) = zflux(i,j,k);
553 if (!SurfLayer_on_zlo) {
554 qfx1_z(i,j,k) = zflux(i,j,k);
557 qfx2_z(i,j,k) = zflux(i,j,k);
563 ParallelFor(
xbx, [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept
565 xflux(i,j,k) /= mf_uy(i,j,0);
567 ParallelFor(
ybx, [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept
569 yflux(i,j,k) /= mf_vx(i,j,0);
575 ParallelFor(bx,[=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept
577 Real mfsq = mf_mx(i,j,0) * mf_my(i,j,0);
578 Real dzk_inv = 1.0 / dz_ptr[k];
579 Real stateContrib = (xflux(i+1,j ,k ) - xflux(i, j, k)) *
dx_inv * mfsq
580 +(yflux(i ,j+1,k ) - yflux(i, j, k)) *
dy_inv * mfsq
581 +(zflux(i ,j ,k+1) - zflux(i, j, k)) * dzk_inv;
583 cell_rhs(i,j,k,qty_index) -= stateContrib;
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_S(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 Gpu::DeviceVector< Real > &stretched_dz_d, 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_x, Array4< Real > &hfx_y, Array4< Real > &hfx_z, Array4< Real > &qfx1_x, Array4< Real > &qfx1_y, 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_S.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:52
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
real(c_double), parameter c2
Definition: ERF_module_model_constants.F90:35
real(c_double), private c1
Definition: ERF_module_mp_morr_two_moment.F90:211