75 const Real explicit_fac =
one - implicit_fac;
78 Real l_abs_g = std::abs(grav_gpu[2]);
80 int klo = domain.smallEnd(2);
81 int khi = domain.bigEnd(2);
82 auto dz_ptr = stretched_dz_d.data();
84 for (
int n(0); n<num_comp; ++n) {
85 const int qty_index = start_comp + n;
89 ParallelFor(
xbx, [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept
91 const int prim_index = qty_index - 1;
103 Real GradCx =
dx_inv * ( cell_prim(i, j, k , prim_index) - cell_prim(i-1, j, k , prim_index) );
105 xflux(i,j,k) = -rhoAlpha * mf_ux(i,j,0) * GradCx;
107 ParallelFor(
ybx, [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept
109 const int prim_index = qty_index - 1;
121 Real GradCy =
dy_inv * ( cell_prim(i, j, k , prim_index) - cell_prim(i, j-1, k , prim_index) );
123 yflux(i,j,k) = -rhoAlpha * mf_vy(i,j,0) * GradCy;
125 ParallelFor(
zbx, [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept
127 const int prim_index = qty_index - 1;
145 bool SurfLayer_on_zlo = ( use_SurfLayer && k ==
dom_lo.z);
147 if (ext_dir_on_zlo) {
149 Real dz0 = dz_ptr[k];
150 Real dz1 = dz_ptr[k+1];
157 GradCz = idz0 * (
c1 * cell_prim(i, j, k-1, prim_index)
158 +
c2 * cell_prim(i, j, k , prim_index)
159 + c3 * cell_prim(i, j, k+1, prim_index) );
160 }
else if (ext_dir_on_zhi) {
162 Real dz0 = dz_ptr[k-1];
163 Real dz1 = dz_ptr[k-2];
170 GradCz = idz0 * ( -(
c1 * cell_prim(i, j, k , prim_index)
171 +
c2 * cell_prim(i, j, k-1, prim_index)
172 + c3 * cell_prim(i, j, k-2, prim_index) ) );
176 dzk_inv =
one / dz_ptr[k];
177 }
else if (k==(
khi+1)) {
178 dzk_inv =
one / dz_ptr[k-1];
180 dzk_inv =
two / (dz_ptr[k] + dz_ptr[k-1]);
182 GradCz = dzk_inv * ( cell_prim(i, j, k, prim_index) - cell_prim(i, j, k-1, prim_index) );
185 if (SurfLayer_on_zlo) {
187 zflux(i,j,k) = hfx_z(i,j,0);
189 zflux(i,j,k) = qfx1_z(i,j,0);
194 zflux(i,j,k) = -rhoAlpha * GradCz;
198 if (!SurfLayer_on_zlo) {
199 hfx_z(i,j,k) = zflux(i,j,k) * explicit_fac;
202 if (!SurfLayer_on_zlo) {
203 qfx1_z(i,j,k) = zflux(i,j,k) * explicit_fac;
206 qfx2_z(i,j,k) = zflux(i,j,k);
211 ParallelFor(
xbx, [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept
213 const int prim_index = qty_index - 1;
223 Real GradCx =
dx_inv * ( cell_prim(i, j, k , prim_index) - cell_prim(i-1, j, k , prim_index) );
225 xflux(i,j,k) = -rhoAlpha * mf_ux(i,j,0) * GradCx;
227 ParallelFor(
ybx, [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept
229 const int prim_index = qty_index - 1;
239 Real GradCy =
dy_inv * ( cell_prim(i, j, k , prim_index) - cell_prim(i, j-1, k , prim_index) );
241 yflux(i,j,k) = -rhoAlpha * mf_vy(i,j,0) * GradCy;
243 ParallelFor(
zbx, [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept
245 const int prim_index = qty_index - 1;
262 if (ext_dir_on_zlo) {
264 Real dz0 = dz_ptr[k];
265 Real dz1 = dz_ptr[k+1];
272 GradCz = idz0 * (
c1 * cell_prim(i, j, k-1, prim_index)
273 +
c2 * cell_prim(i, j, k , prim_index)
274 + c3 * cell_prim(i, j, k+1, prim_index) );
275 }
else if (ext_dir_on_zhi) {
277 Real dz0 = dz_ptr[k-1];
278 Real dz1 = dz_ptr[k-2];
285 GradCz = idz0 * ( -(
c1 * cell_prim(i, j, k , prim_index)
286 +
c2 * cell_prim(i, j, k-1, prim_index)
287 + c3 * cell_prim(i, j, k-2, prim_index) ) );
291 dzk_inv =
one / dz_ptr[k];
292 }
else if (k==(
khi+1)) {
293 dzk_inv =
one / dz_ptr[k-1];
295 dzk_inv =
two / (dz_ptr[k] + dz_ptr[k-1]);
297 GradCz = dzk_inv * ( cell_prim(i, j, k, prim_index) - cell_prim(i, j, k-1, prim_index) );
300 bool SurfLayer_on_zlo = ( use_SurfLayer && k ==
dom_lo.z);
302 if (SurfLayer_on_zlo) {
304 zflux(i,j,k) = hfx_z(i,j,0);
306 zflux(i,j,k) = qfx1_z(i,j,0);
311 zflux(i,j,k) = -rhoAlpha * GradCz;
315 if (!SurfLayer_on_zlo) {
316 hfx_z(i,j,k) = zflux(i,j,k) * explicit_fac;
319 if (!SurfLayer_on_zlo) {
320 qfx1_z(i,j,k) = zflux(i,j,k) * explicit_fac;
323 qfx2_z(i,j,k) = zflux(i,j,k);
328 ParallelFor(
xbx, [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept
330 const int prim_index = qty_index - 1;
339 Real GradCx =
dx_inv * ( cell_prim(i, j, k , prim_index) - cell_prim(i-1, j, k , prim_index) );
341 xflux(i,j,k) = -rhoAlpha * mf_ux(i,j,0) * GradCx;
343 ParallelFor(
ybx, [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept
345 const int prim_index = qty_index - 1;
354 Real GradCy =
dy_inv * ( cell_prim(i, j, k , prim_index) - cell_prim(i, j-1, k , prim_index) );
356 yflux(i,j,k) = -rhoAlpha * mf_vy(i,j,0) * GradCy;
358 ParallelFor(
zbx, [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept
360 const int prim_index = qty_index - 1;
376 if (ext_dir_on_zlo) {
378 Real dz0 = dz_ptr[k];
379 Real dz1 = dz_ptr[k+1];
386 GradCz = idz0 * (
c1 * cell_prim(i, j, k-1, prim_index)
387 +
c2 * cell_prim(i, j, k , prim_index)
388 + c3 * cell_prim(i, j, k+1, prim_index) );
389 }
else if (ext_dir_on_zhi) {
391 Real dz0 = dz_ptr[k-1];
392 Real dz1 = dz_ptr[k-2];
399 GradCz = idz0 * ( -(
c1 * cell_prim(i, j, k , prim_index)
400 +
c2 * cell_prim(i, j, k-1, prim_index)
401 + c3 * cell_prim(i, j, k-2, prim_index) ) );
405 dzk_inv =
one / dz_ptr[k];
406 }
else if (k==(
khi+1)) {
407 dzk_inv =
one / dz_ptr[k-1];
409 dzk_inv =
two / (dz_ptr[k] + dz_ptr[k-1]);
411 GradCz = dzk_inv * ( cell_prim(i, j, k, prim_index) - cell_prim(i, j, k-1, prim_index) );
414 bool SurfLayer_on_zlo = ( use_SurfLayer && k ==
dom_lo.z);
416 if (SurfLayer_on_zlo) {
418 zflux(i,j,k) = hfx_z(i,j,0);
420 zflux(i,j,k) = qfx1_z(i,j,0);
425 zflux(i,j,k) = -rhoAlpha * GradCz;
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) * explicit_fac;
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;
452 Real GradCx =
dx_inv * ( cell_prim(i, j, k , prim_index) - cell_prim(i-1, j, k , prim_index) );
454 xflux(i,j,k) = -rhoAlpha * mf_ux(i,j,0) * GradCx;
456 ParallelFor(
ybx, [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept
458 const int prim_index = qty_index - 1;
466 Real GradCy =
dy_inv * ( cell_prim(i, j, k , prim_index) - cell_prim(i, j-1, k , prim_index) );
468 yflux(i,j,k) = -rhoAlpha * mf_vy(i,j,0) * GradCy;
470 ParallelFor(
zbx, [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept
472 const int prim_index = qty_index - 1;
487 if (ext_dir_on_zlo) {
489 Real dz0 = dz_ptr[k];
490 Real dz1 = dz_ptr[k+1];
497 GradCz = idz0 * (
c1 * cell_prim(i, j, k-1, prim_index)
498 +
c2 * cell_prim(i, j, k , prim_index)
499 + c3 * cell_prim(i, j, k+1, prim_index) );
500 }
else if (ext_dir_on_zhi) {
502 Real dz0 = dz_ptr[k-1];
503 Real dz1 = dz_ptr[k-2];
510 GradCz = idz0 * ( -(
c1 * cell_prim(i, j, k , prim_index)
511 +
c2 * cell_prim(i, j, k-1, prim_index)
512 + c3 * cell_prim(i, j, k-2, prim_index) ) );
516 dzk_inv =
one / dz_ptr[k];
517 }
else if (k==(
khi+1)) {
518 dzk_inv =
one / dz_ptr[k-1];
520 dzk_inv =
two / (dz_ptr[k] + dz_ptr[k-1]);
522 GradCz = dzk_inv * ( cell_prim(i, j, k, prim_index) - cell_prim(i, j, k-1, prim_index) );
525 bool SurfLayer_on_zlo = ( use_SurfLayer && k ==
dom_lo.z);
527 if (SurfLayer_on_zlo) {
529 zflux(i,j,k) = hfx_z(i,j,0);
531 zflux(i,j,k) = qfx1_z(i,j,0);
536 zflux(i,j,k) = -rhoAlpha * GradCz;
540 if (!SurfLayer_on_zlo) {
541 hfx_z(i,j,k) = zflux(i,j,k) * explicit_fac;
544 if (!SurfLayer_on_zlo) {
545 qfx1_z(i,j,k) = zflux(i,j,k) * explicit_fac;
548 qfx2_z(i,j,k) = zflux(i,j,k);
554 ParallelFor(
xbx, [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept
556 xflux(i,j,k) /= mf_uy(i,j,0);
558 ParallelFor(
ybx, [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept
560 yflux(i,j,k) /= mf_vx(i,j,0);
566 ParallelFor(
zbx, [=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept
568 zflux(i,j,k) *= explicit_fac;
574 ParallelFor(bx,[=] AMREX_GPU_DEVICE (
int i,
int j,
int k) noexcept
576 Real mfsq = mf_mx(i,j,0) * mf_my(i,j,0);
577 Real dzk_inv =
one / dz_ptr[k];
578 Real stateContrib = (xflux(i+1,j ,k ) - xflux(i, j, k)) *
dx_inv * mfsq
579 +(yflux(i ,j+1,k ) - yflux(i, j, k)) *
dy_inv * mfsq
580 +(zflux(i ,j ,k+1) - zflux(i, j, k)) * dzk_inv;
582 cell_rhs(i,j,k,qty_index) -= stateContrib;
constexpr amrex::Real two
Definition: ERF_Constants.H:8
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_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_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_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:57
const int khi
Definition: ERF_InitCustomPert_Bubble.H:21
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
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:212