1 #ifndef ERF_SCALAR_DIFFUSION_H_
2 #define ERF_SCALAR_DIFFUSION_H_
7 #include "AMReX_FArrayBox.H"
29 static_assert(std::is_trivially_copyable_v<ScalarDiffusionCoefficients>);
34 amrex::Array4<const amrex::Real>
scalar;
39 amrex::Array4<amrex::Real>
xflux;
40 amrex::Array4<amrex::Real>
yflux;
41 amrex::Array4<amrex::Real>
zflux;
43 amrex::Array4<amrex::Real>
rhs;
62 amrex::Array4<const amrex::Real>
x;
63 amrex::Array4<const amrex::Real>
y;
64 amrex::Array4<const amrex::Real>
z;
75 amrex::Array4<amrex::Real>
z;
100 static_assert(std::is_trivially_copyable_v<ScalarDiffusionFieldViews>);
101 static_assert(std::is_trivially_copyable_v<ScalarDiffusionFluxPolicy>);
111 template <
bool MultiplyMolecularByDensity,
bool AddTurbulence>
112 AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE
amrex::Real
114 const amrex::Array4<const amrex::Real>&
rho,
116 const amrex::Array4<const amrex::Real>& mu_turb,
124 const int eddy_comp) noexcept
127 if constexpr (MultiplyMolecularByDensity) {
129 (
rho(i, j, k, rho_comp) +
rho(i -
di, j - dj, k - dk, rho_comp));
131 if constexpr (AddTurbulence) {
132 coeff +=
amrex::Real(0.5) * (mu_turb(i, j, k, eddy_comp) +
133 mu_turb(i -
di, j - dj, k - dk, eddy_comp));
151 return {-(
amrex::Real(1.0) - f2) * c3, -f2 * c3, c3};
162 template <
int Direction>
163 AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE
amrex::Real
165 const amrex::Array4<const amrex::Real>& scalar,
166 const int scalar_comp,
174 const bool ext_dir_lo,
175 const bool ext_dir_hi) noexcept
177 static_assert(Direction >= 0 && Direction < 3);
179 if constexpr (Direction == 0) {
182 scalar(i - 1, j, k, scalar_comp) +
185 scalar(i + 1, j, k, scalar_comp);
186 }
else if (ext_dir_hi) {
189 amrex::Real(3.0) * scalar(i - 1, j, k, scalar_comp) +
191 scalar(i - 2, j, k, scalar_comp);
193 grad = scalar(i, j, k, scalar_comp) - scalar(i - 1, j, k, scalar_comp);
195 }
else if constexpr (Direction == 1) {
198 scalar(i, j - 1, k, scalar_comp) +
201 scalar(i, j + 1, k, scalar_comp);
202 }
else if (ext_dir_hi) {
205 amrex::Real(3.0) * scalar(i, j - 1, k, scalar_comp) +
207 scalar(i, j - 2, k, scalar_comp);
209 grad = scalar(i, j, k, scalar_comp) - scalar(i, j - 1, k, scalar_comp);
214 scalar(i, j, k - 1, scalar_comp) +
217 scalar(i, j, k + 1, scalar_comp);
218 }
else if (ext_dir_hi) {
221 amrex::Real(3.0) * scalar(i, j, k - 1, scalar_comp) +
223 scalar(i, j, k - 2, scalar_comp);
225 grad = scalar(i, j, k, scalar_comp) - scalar(i, j, k - 1, scalar_comp);
228 if constexpr (Direction == 2) {
229 return -coeff * grad * inv_spacing;
231 return -coeff * grad * inv_spacing * map_numerator / map_denominator;
237 AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE
amrex::Real
239 const amrex::Array4<const amrex::Real>& scalar,
240 const int scalar_comp,
247 const bool ext_dir_lo,
248 const bool ext_dir_hi) noexcept
253 (
w.c1 * scalar(i, j, k - 1, scalar_comp) +
254 w.c2 * scalar(i, j, k, scalar_comp) +
255 w.c3 * scalar(i, j, k + 1, scalar_comp));
261 w.c1 * scalar(i, j, k, scalar_comp) +
262 w.c2 * scalar(i, j, k - 1, scalar_comp) +
263 w.c3 * scalar(i, j, k - 2, scalar_comp)));
270 (scalar(i, j, k, scalar_comp) - scalar(i, j, k - 1, scalar_comp));
275 template <
int Direction>
276 AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE
amrex::Real
278 const amrex::Array4<const amrex::Real>& scalar,
279 const int scalar_comp,
287 static_assert(Direction == 0 || Direction == 1);
290 ? scalar(i, j, k, scalar_comp) - scalar(i - 1, j, k, scalar_comp)
291 : scalar(i, j, k, scalar_comp) - scalar(i, j - 1, k, scalar_comp);
293 return -coeff * face_map * gradient;
296 AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE
amrex::Real
304 return -coeff * face_map * (grad_xi - h_xi * grad_z);
307 AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE
amrex::Real
315 return -coeff * face_map * (grad_eta - h_eta * grad_z);
324 AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE
amrex::Real
326 const amrex::Array4<const amrex::Real>& scalar,
327 const int scalar_comp,
332 const amrex::Array4<const amrex::Real>& z_nd,
333 const amrex::Array4<const amrex::Real>& z_cc,
334 const amrex::GpuArray<amrex::Real, AMREX_SPACEDIM>& cellSizeInv,
335 const amrex::Array4<const amrex::Real>& mf_ux) noexcept
339 amrex::Real(1.0) / (z_cc(i, j, k + 1) - z_cc(i, j, k - 1));
341 amrex::Real(1.0) / (z_cc(i - 1, j, k + 1) - z_cc(i - 1, j, k - 1));
343 amrex::Real(0.5) * (scalar(i, j, k + 1, scalar_comp) * idz_hi +
344 scalar(i - 1, j, k + 1, scalar_comp) * idz_lo -
345 scalar(i, j, k - 1, scalar_comp) * idz_hi -
346 scalar(i - 1, j, k - 1, scalar_comp) * idz_lo);
349 (scalar(i, j, k, scalar_comp) - scalar(i - 1, j, k, scalar_comp));
354 AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE
amrex::Real
356 const amrex::Array4<const amrex::Real>& scalar,
357 const int scalar_comp,
362 const amrex::Array4<const amrex::Real>& z_nd,
363 const amrex::Array4<const amrex::Real>& z_cc,
364 const amrex::GpuArray<amrex::Real, AMREX_SPACEDIM>& cellSizeInv,
365 const amrex::Array4<const amrex::Real>& mf_vy) noexcept
369 amrex::Real(1.0) / (z_cc(i, j, k + 1) - z_cc(i, j, k - 1));
371 amrex::Real(1.0) / (z_cc(i, j - 1, k + 1) - z_cc(i, j - 1, k - 1));
373 amrex::Real(0.5) * (scalar(i, j, k + 1, scalar_comp) * idz_hi +
374 scalar(i, j - 1, k + 1, scalar_comp) * idz_lo -
375 scalar(i, j, k - 1, scalar_comp) * idz_hi -
376 scalar(i, j - 1, k - 1, scalar_comp) * idz_lo);
379 (scalar(i, j, k, scalar_comp) - scalar(i, j - 1, k, scalar_comp));
388 AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE
amrex::Real
390 const amrex::Array4<const amrex::Real>& scalar,
391 const int scalar_comp,
396 const amrex::Array4<const amrex::Real>& z_nd,
397 const amrex::GpuArray<amrex::Real, AMREX_SPACEDIM>& cellSizeInv,
398 const bool ext_dir_lo,
399 const bool ext_dir_hi) noexcept
412 grad_z = idz0 * (
c1 * scalar(i, j, kface - 1, scalar_comp) +
413 c2 * scalar(i, j, kface, scalar_comp) +
414 c3 * scalar(i, j, kface + 1, scalar_comp));
415 }
else if (ext_dir_hi) {
426 c1 * scalar(i, j, kface, scalar_comp) +
427 c2 * scalar(i, j, kface - 1, scalar_comp) +
428 c3 * scalar(i, j, kface - 2, scalar_comp)));
432 grad_z = (cellSizeInv[2] / h_zeta) * (scalar(i, j, kface, scalar_comp) -
433 scalar(i, j, kface - 1, scalar_comp));
435 return -coeff * grad_z;
443 AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE
amrex::Real
453 return raw_Fz - h_xi * mx * Fbar_x - h_eta * my * Fbar_y;
456 AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE
amrex::Real
462 return raw_Fx * h_zeta / my;
465 AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE
amrex::Real
471 return raw_Fy * h_zeta / mx;
479 AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE
amrex::Real
484 return raw_flux * face_area;
488 AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE
amrex::Real
494 return raw_flux / (mx * my);
502 AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE
amrex::Real
507 const amrex::Box& domain,
508 const amrex::Array4<const amrex::Real>& raw_xflux,
509 const amrex::Array4<const amrex::Real>& raw_yflux,
510 const amrex::Array4<const amrex::Real>& raw_zflux,
512 const amrex::Array4<const amrex::Real>& z_nd,
513 const amrex::GpuArray<amrex::Real, AMREX_SPACEDIM>& cellSizeInv,
514 const amrex::Array4<const amrex::Real>& mf_mx,
515 const amrex::Array4<const amrex::Real>& mf_my) noexcept
517 const int klo = domain.smallEnd(2);
518 const int khi = domain.bigEnd(2) + 1;
523 raw_xflux(i + 1, j,
klo, flux_comp));
525 raw_xflux(i + 1, j,
klo + 1, flux_comp));
528 raw_yflux(i, j + 1,
klo, flux_comp));
530 raw_yflux(i, j + 1,
klo + 1, flux_comp));
532 }
else if (kface ==
khi) {
534 raw_xflux(i + 1, j,
khi - 2, flux_comp));
536 raw_xflux(i + 1, j,
khi - 1, flux_comp));
539 raw_yflux(i, j + 1,
khi - 2, flux_comp));
541 raw_yflux(i, j + 1,
khi - 1, flux_comp));
544 xbar =
fourth * (raw_xflux(i, j, kface, flux_comp) +
545 raw_xflux(i + 1, j, kface, flux_comp) +
546 raw_xflux(i, j, kface - 1, flux_comp) +
547 raw_xflux(i + 1, j, kface - 1, flux_comp));
548 ybar =
fourth * (raw_yflux(i, j, kface, flux_comp) +
549 raw_yflux(i, j + 1, kface, flux_comp) +
550 raw_yflux(i, j, kface - 1, flux_comp) +
551 raw_yflux(i, j + 1, kface - 1, flux_comp));
560 raw_zflux(i, j, kface, flux_comp), mx, h_xi, xbar, my, h_eta, ybar);
574 AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE
amrex::Real
579 const amrex::Box& domain,
580 const amrex::Array4<const amrex::Real>& raw_xflux,
581 const amrex::Array4<const amrex::Real>& raw_yflux,
582 const amrex::Array4<const amrex::Real>& raw_zflux,
584 const amrex::Array4<const amrex::Real>& z_nd,
585 const amrex::GpuArray<amrex::Real, AMREX_SPACEDIM>& cellSizeInv,
586 const amrex::Array4<const amrex::Real>& mf_mx,
587 const amrex::Array4<const amrex::Real>& mf_my,
588 const bool suppress_transfer =
false) noexcept
592 i, j, kface, domain, raw_xflux, raw_yflux, raw_zflux, flux_comp, z_nd,
593 cellSizeInv, mf_mx, mf_my);
595 Gz, mf_mx(i, j, 0), mf_my(i, j, 0));
603 AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE
amrex::Real
620 const amrex::Real map_over_jacobian = (mx * my) / detJ_cell;
621 return map_over_jacobian *
622 ((fx_hi - fx_lo) * dx_inv + (fy_hi - fy_lo) * dy_inv +
623 (fz_hi - fz_lo) * dzeta_inv);
627 AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE
amrex::Real
642 (mapped_Fx_hi - mapped_Fx_lo) * dx_inv * mfsq +
643 (mapped_Fy_hi - mapped_Fy_lo) * dy_inv * mfsq +
644 (Gz_hi - Gz_lo) * dz_inv;
645 stateContrib /= detJ_cell;
654 template <
bool MultiplyMolecularByDensity,
bool AddTurbulence>
657 const amrex::Box& bx,
658 const amrex::Box& domain,
661 const amrex::GpuArray<amrex::Real, AMREX_SPACEDIM>& cellSizeInv,
662 const amrex::Array4<const amrex::Real>& u,
663 const amrex::Array4<const amrex::Real>& v,
664 const amrex::Array4<const amrex::Real>& mf_ux,
665 const amrex::Array4<const amrex::Real>& mf_uy,
666 const amrex::Array4<const amrex::Real>& mf_vx,
667 const amrex::Array4<const amrex::Real>& mf_vy,
668 const amrex::BCRec* bc_ptr,
671 using namespace amrex;
672 const auto dom_lo = lbound(domain);
673 const auto dom_hi = ubound(domain);
674 const Box xbx = surroundingNodes(bx, 0);
675 const Box ybx = surroundingNodes(bx, 1);
676 const Box zbx = surroundingNodes(bx, 2);
677 const Real dx_inv = cellSizeInv[0];
678 const Real dy_inv = cellSizeInv[1];
679 const Real dz_inv = cellSizeInv[2];
683 const auto surface = policy.
surface;
685 const int rho_comp = field.
rho_comp;
687 const auto scalar = field.
scalar;
688 const auto density = field.
density;
689 const auto mu_turb = field.
mu_turb;
690 const auto xflux = field.
xflux;
691 const auto yflux = field.
yflux;
692 const auto zflux = field.
zflux;
694 ParallelFor(xbx, [=] AMREX_GPU_DEVICE(
int i,
int j,
int k) noexcept {
696 MultiplyMolecularByDensity, AddTurbulence>(
697 density, rho_comp, mu_turb, coefficients, i, j, k, 1, 0, 0,
698 coefficients.eddy_h_comp);
703 u(dom_lo.x, j, k) >=
Real(0.0))) &&
709 u(dom_hi.x + 1, j, k) <=
Real(0.0))) &&
711 const bool on_surface =
712 (surface.xlo && i == dom_lo.x) ||
713 (surface.xhi && i == dom_hi.x + 1);
716 xflux(i, j, k, flux_comp) = ScalarDiffusionFlux_N<0>(
717 scalar, scalar_comp, i, j, k, coeff, dx_inv,
718 mf_ux(i, j, 0), mf_uy(i, j, 0),
true,
false);
720 xflux(i, j, k, flux_comp) = ScalarDiffusionFlux_N<0>(
721 scalar, scalar_comp, i, j, k, coeff, dx_inv,
722 mf_ux(i, j, 0), mf_uy(i, j, 0),
false,
true);
723 }
else if (on_surface && prescribed.use_x_on_side) {
724 xflux(i, j, k, flux_comp) = prescribed.x(i, j, k, prescribed.x_comp);
726 xflux(i, j, k, flux_comp) = ScalarDiffusionFlux_N<0>(
727 scalar, scalar_comp, i, j, k, coeff, dx_inv,
728 mf_ux(i, j, 0), mf_uy(i, j, 0),
false,
false);
732 ParallelFor(ybx, [=] AMREX_GPU_DEVICE(
int i,
int j,
int k) noexcept {
734 MultiplyMolecularByDensity, AddTurbulence>(
735 density, rho_comp, mu_turb, coefficients, i, j, k, 0, 1, 0,
736 coefficients.eddy_h_comp);
741 v(i, dom_lo.y, k) >=
Real(0.0))) &&
747 v(i, dom_hi.y + 1, k) <=
Real(0.0))) &&
749 const bool on_surface =
750 (surface.ylo && j == dom_lo.y) ||
751 (surface.yhi && j == dom_hi.y + 1);
754 yflux(i, j, k, flux_comp) = ScalarDiffusionFlux_N<1>(
755 scalar, scalar_comp, i, j, k, coeff, dy_inv,
756 mf_vy(i, j, 0), mf_vx(i, j, 0),
true,
false);
758 yflux(i, j, k, flux_comp) = ScalarDiffusionFlux_N<1>(
759 scalar, scalar_comp, i, j, k, coeff, dy_inv,
760 mf_vy(i, j, 0), mf_vx(i, j, 0),
false,
true);
761 }
else if (on_surface && prescribed.use_y_on_side) {
762 yflux(i, j, k, flux_comp) = prescribed.y(i, j, k, prescribed.y_comp);
764 yflux(i, j, k, flux_comp) = ScalarDiffusionFlux_N<1>(
765 scalar, scalar_comp, i, j, k, coeff, dy_inv,
766 mf_vy(i, j, 0), mf_vx(i, j, 0),
false,
false);
770 ParallelFor(zbx, [=] AMREX_GPU_DEVICE(
int i,
int j,
int k) noexcept {
772 MultiplyMolecularByDensity, AddTurbulence>(
773 density, rho_comp, mu_turb, coefficients, i, j, k, 0, 0, 1,
774 coefficients.eddy_v_comp);
783 const bool on_surface =
784 (surface.zlo && k == dom_lo.z) ||
785 (surface.zhi && k == dom_hi.z + 1);
788 zflux(i, j, k, flux_comp) = ScalarDiffusionFlux_N<2>(
789 scalar, scalar_comp, i, j, k, coeff, dz_inv,
Real(1.0),
Real(1.0),
792 zflux(i, j, k, flux_comp) = ScalarDiffusionFlux_N<2>(
793 scalar, scalar_comp, i, j, k, coeff, dz_inv,
Real(1.0),
Real(1.0),
795 }
else if (on_surface && prescribed.use_z_on_side) {
796 zflux(i, j, k, flux_comp) = prescribed.z(i, j, k, prescribed.z_comp);
797 }
else if (on_surface) {
798 zflux(i, j, k, flux_comp) =
Real(0.0);
800 zflux(i, j, k, flux_comp) = ScalarDiffusionFlux_N<2>(
801 scalar, scalar_comp, i, j, k, coeff, dz_inv,
Real(1.0),
Real(1.0),
805 if (diagnostic.enabled && (diagnostic.write_on_surface || !on_surface)) {
806 diagnostic.z(i, j, k, diagnostic.z_comp) = zflux(i, j, k, flux_comp);
814 const amrex::Box& bx,
815 const amrex::Box& domain,
818 const amrex::GpuArray<amrex::Real, AMREX_SPACEDIM>& cellSizeInv,
819 const amrex::Array4<const amrex::Real>& u,
820 const amrex::Array4<const amrex::Real>& v,
821 const amrex::Array4<const amrex::Real>& mf_ux,
822 const amrex::Array4<const amrex::Real>& mf_uy,
823 const amrex::Array4<const amrex::Real>& mf_vx,
824 const amrex::Array4<const amrex::Real>& mf_vy,
825 const amrex::BCRec* bc_ptr,
829 if (mode.molecular_is_kinematic) {
830 if (mode.add_turbulence) {
831 BuildScalarDiffusionFluxes_N_Impl<true, true>(
832 bx, domain, field, policy, cellSizeInv, u, v, mf_ux, mf_uy, mf_vx,
833 mf_vy, bc_ptr, bc_comp);
835 BuildScalarDiffusionFluxes_N_Impl<true, false>(
836 bx, domain, field, policy, cellSizeInv, u, v, mf_ux, mf_uy, mf_vx,
837 mf_vy, bc_ptr, bc_comp);
839 }
else if (mode.add_turbulence) {
840 BuildScalarDiffusionFluxes_N_Impl<false, true>(
841 bx, domain, field, policy, cellSizeInv, u, v, mf_ux, mf_uy, mf_vx,
842 mf_vy, bc_ptr, bc_comp);
844 BuildScalarDiffusionFluxes_N_Impl<false, false>(
845 bx, domain, field, policy, cellSizeInv, u, v, mf_ux, mf_uy, mf_vx,
846 mf_vy, bc_ptr, bc_comp);
850 template <
bool MultiplyMolecularByDensity,
bool AddTurbulence>
853 const amrex::Box& bx,
854 const amrex::Box& domain,
862 const amrex::Array4<const amrex::Real>& mf_ux,
863 const amrex::Array4<const amrex::Real>& mf_uy,
864 const amrex::Array4<const amrex::Real>& mf_vx,
865 const amrex::Array4<const amrex::Real>& mf_vy,
866 const amrex::BCRec* bc_ptr,
869 using namespace amrex;
870 const auto dom_lo = lbound(domain);
871 const auto dom_hi = ubound(domain);
872 const Box xbx = surroundingNodes(bx, 0);
873 const Box ybx = surroundingNodes(bx, 1);
874 const Box zbx = surroundingNodes(bx, 2);
878 const auto surface = policy.
surface;
880 const int rho_comp = field.
rho_comp;
882 const auto scalar = field.
scalar;
883 const auto density = field.
density;
884 const auto mu_turb = field.
mu_turb;
885 const auto xflux = field.
xflux;
886 const auto yflux = field.
yflux;
887 const auto zflux = field.
zflux;
889 ParallelFor(xbx, [=] AMREX_GPU_DEVICE(
int i,
int j,
int k) noexcept {
891 MultiplyMolecularByDensity, AddTurbulence>(
892 density, rho_comp, mu_turb, coefficients, i, j, k, 1, 0, 0,
893 coefficients.eddy_h_comp);
894 const bool on_surface =
895 (surface.xlo && i == dom_lo.x) ||
896 (surface.xhi && i == dom_hi.x + 1);
897 if (on_surface && prescribed.use_x_on_side) {
898 xflux(i, j, k, flux_comp) = prescribed.x(i, j, k, prescribed.x_comp);
900 xflux(i, j, k, flux_comp) = ScalarDiffusionFlux_S_Horizontal<0>(
901 scalar, scalar_comp, i, j, k, coeff, dx_inv, mf_ux(i, j, 0));
905 ParallelFor(ybx, [=] AMREX_GPU_DEVICE(
int i,
int j,
int k) noexcept {
907 MultiplyMolecularByDensity, AddTurbulence>(
908 density, rho_comp, mu_turb, coefficients, i, j, k, 0, 1, 0,
909 coefficients.eddy_h_comp);
910 const bool on_surface =
911 (surface.ylo && j == dom_lo.y) ||
912 (surface.yhi && j == dom_hi.y + 1);
913 if (on_surface && prescribed.use_y_on_side) {
914 yflux(i, j, k, flux_comp) = prescribed.y(i, j, k, prescribed.y_comp);
916 yflux(i, j, k, flux_comp) = ScalarDiffusionFlux_S_Horizontal<1>(
917 scalar, scalar_comp, i, j, k, coeff, dy_inv, mf_vy(i, j, 0));
921 ParallelFor(zbx, [=] AMREX_GPU_DEVICE(
int i,
int j,
int k) noexcept {
923 MultiplyMolecularByDensity, AddTurbulence>(
924 density, rho_comp, mu_turb, coefficients, i, j, k, 0, 0, 1,
925 coefficients.eddy_v_comp);
934 const bool on_surface =
935 (surface.zlo && k == dom_lo.z) ||
936 (surface.zhi && k == dom_hi.z + 1);
938 scalar, scalar_comp, i, j, k,
dz,
klo,
khi, ext_lo, ext_hi);
939 if (on_surface && prescribed.use_z_on_side) {
940 zflux(i, j, k, flux_comp) = prescribed.z(i, j, k, prescribed.z_comp);
941 }
else if (on_surface) {
942 zflux(i, j, k, flux_comp) =
Real(0.0);
944 zflux(i, j, k, flux_comp) = -coeff * grad;
946 if (diagnostic.enabled && (diagnostic.write_on_surface || !on_surface)) {
947 diagnostic.z(i, j, k, diagnostic.z_comp) = zflux(i, j, k, flux_comp);
953 ParallelFor(xbx, [=] AMREX_GPU_DEVICE(
int i,
int j,
int k) noexcept {
954 xflux(i, j, k, flux_comp) /= mf_uy(i, j, 0);
956 ParallelFor(ybx, [=] AMREX_GPU_DEVICE(
int i,
int j,
int k) noexcept {
957 yflux(i, j, k, flux_comp) /= mf_vx(i, j, 0);
964 const amrex::Box& bx,
965 const amrex::Box& domain,
973 const amrex::Array4<const amrex::Real>& mf_ux,
974 const amrex::Array4<const amrex::Real>& mf_uy,
975 const amrex::Array4<const amrex::Real>& mf_vx,
976 const amrex::Array4<const amrex::Real>& mf_vy,
977 const amrex::BCRec* bc_ptr,
981 if (mode.molecular_is_kinematic) {
982 if (mode.add_turbulence) {
983 BuildScalarDiffusionFluxes_S_Impl<true, true>(
984 bx, domain, field, policy, dx_inv, dy_inv,
dz,
klo,
khi, mf_ux,
985 mf_uy, mf_vx, mf_vy, bc_ptr, bc_comp);
987 BuildScalarDiffusionFluxes_S_Impl<true, false>(
988 bx, domain, field, policy, dx_inv, dy_inv,
dz,
klo,
khi, mf_ux,
989 mf_uy, mf_vx, mf_vy, bc_ptr, bc_comp);
991 }
else if (mode.add_turbulence) {
992 BuildScalarDiffusionFluxes_S_Impl<false, true>(
993 bx, domain, field, policy, dx_inv, dy_inv,
dz,
klo,
khi, mf_ux,
994 mf_uy, mf_vx, mf_vy, bc_ptr, bc_comp);
996 BuildScalarDiffusionFluxes_S_Impl<false, false>(
997 bx, domain, field, policy, dx_inv, dy_inv,
dz,
klo,
khi, mf_ux,
998 mf_uy, mf_vx, mf_vy, bc_ptr, bc_comp);
1002 template <
bool MultiplyMolecularByDensity,
bool AddTurbulence>
1005 const amrex::Box& bx,
1006 const amrex::Box& domain,
1010 const amrex::Array4<const amrex::Real>& z_nd,
1011 const amrex::Array4<const amrex::Real>& z_cc,
1012 const amrex::GpuArray<amrex::Real, AMREX_SPACEDIM>& cellSizeInv,
1013 const amrex::Array4<const amrex::Real>& mf_ux,
1014 const amrex::Array4<const amrex::Real>& mf_vy,
1015 const amrex::BCRec* bc_ptr,
1018 using namespace amrex;
1019 const auto dom_lo = lbound(domain);
1020 const auto dom_hi = ubound(domain);
1021 Box xbx = surroundingNodes(bx, 0);
1022 Box ybx = surroundingNodes(bx, 1);
1023 const Box zbx = surroundingNodes(bx, 2);
1024 if (xbx.smallEnd(2) != dom_lo.z) xbx.growLo(2, 1);
1025 if (ybx.smallEnd(2) != dom_lo.z) ybx.growLo(2, 1);
1026 if (xbx.bigEnd(2) != dom_hi.z) xbx.growHi(2, 1);
1027 if (ybx.bigEnd(2) != dom_hi.z) ybx.growHi(2, 1);
1032 const auto surface = policy.
surface;
1034 const int rho_comp = field.
rho_comp;
1036 const auto scalar = field.
scalar;
1037 const auto density = field.
density;
1038 const auto mu_turb = field.
mu_turb;
1039 const auto xflux = field.
xflux;
1040 const auto yflux = field.
yflux;
1041 const auto zflux = field.
zflux;
1043 ParallelFor(xbx, [=] AMREX_GPU_DEVICE(
int i,
int j,
int k) noexcept {
1045 MultiplyMolecularByDensity, AddTurbulence>(
1046 density, rho_comp, mu_turb, coefficients, i, j, k, 1, 0, 0,
1047 coefficients.eddy_h_comp);
1048 const bool on_side =
1049 (surface.xlo && i == dom_lo.x) ||
1050 (surface.xhi && i == dom_hi.x + 1);
1051 const bool on_bottom_z =
1052 surface.zlo && rotate && k == dom_lo.z;
1054 if (on_side && prescribed.use_x_on_side) {
1055 xflux(i, j, k, flux_comp) = prescribed.x(i, j, k, prescribed.x_comp);
1056 }
else if (on_bottom_z && prescribed.use_x_on_bottom_z) {
1057 xflux(i, j, k, flux_comp) = prescribed.x(i, j, 0, prescribed.x_comp);
1060 scalar, scalar_comp, coeff, i, j, k, z_nd, z_cc, cellSizeInv, mf_ux);
1064 ParallelFor(ybx, [=] AMREX_GPU_DEVICE(
int i,
int j,
int k) noexcept {
1066 MultiplyMolecularByDensity, AddTurbulence>(
1067 density, rho_comp, mu_turb, coefficients, i, j, k, 0, 1, 0,
1068 coefficients.eddy_h_comp);
1069 const bool on_side =
1070 (surface.ylo && j == dom_lo.y) ||
1071 (surface.yhi && j == dom_hi.y + 1);
1072 const bool on_bottom_z =
1073 surface.zlo && rotate && k == dom_lo.z;
1075 if (on_side && prescribed.use_y_on_side) {
1076 yflux(i, j, k, flux_comp) = prescribed.y(i, j, k, prescribed.y_comp);
1077 }
else if (on_bottom_z && prescribed.use_y_on_bottom_z) {
1078 yflux(i, j, k, flux_comp) = prescribed.y(i, j, 0, prescribed.y_comp);
1081 scalar, scalar_comp, coeff, i, j, k, z_nd, z_cc, cellSizeInv, mf_vy);
1085 ParallelFor(zbx, [=] AMREX_GPU_DEVICE(
int i,
int j,
int k) noexcept {
1087 MultiplyMolecularByDensity, AddTurbulence>(
1088 density, rho_comp, mu_turb, coefficients, i, j, k, 0, 0, 1,
1089 coefficients.eddy_v_comp);
1098 const bool on_surface =
1099 (surface.zlo && k == dom_lo.z) ||
1100 (surface.zhi && k == dom_hi.z + 1);
1103 scalar, scalar_comp, coeff, i, j, k, z_nd, cellSizeInv, ext_lo, ext_hi);
1105 if (on_surface && prescribed.use_z_on_side) {
1106 zflux(i, j, k, flux_comp) = prescribed.z(i, j, k, prescribed.z_comp);
1107 }
else if (on_surface) {
1108 zflux(i, j, k, flux_comp) =
Real(0.0);
1110 zflux(i, j, k, flux_comp) = raw_flux;
1112 if (diagnostic.enabled && (diagnostic.write_on_surface || !on_surface)) {
1113 diagnostic.z(i, j, k, diagnostic.z_comp) = zflux(i, j, k, flux_comp);
1122 const amrex::Box& bx,
1123 const amrex::Box& domain,
1127 const amrex::Array4<const amrex::Real>& z_nd,
1128 const amrex::Array4<const amrex::Real>& z_cc,
1129 const amrex::GpuArray<amrex::Real, AMREX_SPACEDIM>& cellSizeInv,
1130 const amrex::Array4<const amrex::Real>& mf_ux,
1131 const amrex::Array4<const amrex::Real>& mf_vy,
1132 const amrex::BCRec* bc_ptr,
1136 if (mode.molecular_is_kinematic) {
1137 if (mode.add_turbulence) {
1138 BuildScalarDiffusionFluxes_T_Impl<true, true>(
1139 bx, domain, field, policy, rotate, z_nd, z_cc, cellSizeInv, mf_ux,
1140 mf_vy, bc_ptr, bc_comp);
1142 BuildScalarDiffusionFluxes_T_Impl<true, false>(
1143 bx, domain, field, policy, rotate, z_nd, z_cc, cellSizeInv, mf_ux,
1144 mf_vy, bc_ptr, bc_comp);
1146 }
else if (mode.add_turbulence) {
1147 BuildScalarDiffusionFluxes_T_Impl<false, true>(
1148 bx, domain, field, policy, rotate, z_nd, z_cc, cellSizeInv, mf_ux,
1149 mf_vy, bc_ptr, bc_comp);
1151 BuildScalarDiffusionFluxes_T_Impl<false, false>(
1152 bx, domain, field, policy, rotate, z_nd, z_cc, cellSizeInv, mf_ux,
1153 mf_vy, bc_ptr, bc_comp);
1164 const amrex::Box& bx,
1165 const amrex::Array4<const amrex::Real>& raw_x,
1166 const int raw_x_comp,
1167 const amrex::Array4<const amrex::Real>& raw_y,
1168 const int raw_y_comp,
1169 const amrex::Array4<const amrex::Real>& raw_z,
1170 const int raw_z_comp,
1171 const amrex::Array4<amrex::Real>& mapped_x,
1172 const int mapped_x_comp,
1173 const amrex::Array4<amrex::Real>& mapped_y,
1174 const int mapped_y_comp,
1175 const amrex::Array4<amrex::Real>& mapped_z,
1176 const int mapped_z_comp,
1177 const amrex::Array4<const amrex::Real>& mf_mx,
1178 const amrex::Array4<const amrex::Real>& mf_my)
1180 const amrex::Box xbx = amrex::surroundingNodes(bx, 0);
1181 const amrex::Box ybx = amrex::surroundingNodes(bx, 1);
1182 const amrex::Box zbx = amrex::surroundingNodes(bx, 2);
1184 xbx, [=] AMREX_GPU_DEVICE(
int i,
int j,
int k) noexcept {
1185 mapped_x(i, j, k, mapped_x_comp) =
1190 ybx, [=] AMREX_GPU_DEVICE(
int i,
int j,
int k) noexcept {
1191 mapped_y(i, j, k, mapped_y_comp) =
1196 zbx, [=] AMREX_GPU_DEVICE(
int i,
int j,
int k) noexcept {
1197 mapped_z(i, j, k, mapped_z_comp) =
1199 raw_z(i, j, k, raw_z_comp), mf_mx(i, j, 0), mf_my(i, j, 0));
1210 const amrex::Box& bx,
1211 const amrex::Array4<const amrex::Real>& raw_x,
1212 const int raw_x_comp,
1213 const amrex::Array4<const amrex::Real>& raw_y,
1214 const int raw_y_comp,
1215 const amrex::Array4<const amrex::Real>& raw_z,
1216 const int raw_z_comp,
1217 const amrex::Array4<amrex::Real>& mapped_x,
1218 const int mapped_x_comp,
1219 const amrex::Array4<amrex::Real>& mapped_y,
1220 const int mapped_y_comp,
1221 const amrex::Array4<amrex::Real>& mapped_z,
1222 const int mapped_z_comp,
1223 const amrex::Array4<const amrex::Real>& ax,
1224 const amrex::Array4<const amrex::Real>& ay,
1225 const amrex::Array4<const amrex::Real>& mf_mx,
1226 const amrex::Array4<const amrex::Real>& mf_my)
1228 const amrex::Box xbx = amrex::surroundingNodes(bx, 0);
1229 const amrex::Box ybx = amrex::surroundingNodes(bx, 1);
1230 const amrex::Box zbx = amrex::surroundingNodes(bx, 2);
1232 xbx, [=] AMREX_GPU_DEVICE(
int i,
int j,
int k) noexcept {
1233 mapped_x(i, j, k, mapped_x_comp) =
1235 raw_x(i, j, k, raw_x_comp), ax(i, j, k));
1238 ybx, [=] AMREX_GPU_DEVICE(
int i,
int j,
int k) noexcept {
1239 mapped_y(i, j, k, mapped_y_comp) =
1241 raw_y(i, j, k, raw_y_comp), ay(i, j, k));
1244 zbx, [=] AMREX_GPU_DEVICE(
int i,
int j,
int k) noexcept {
1245 mapped_z(i, j, k, mapped_z_comp) =
1247 raw_z(i, j, k, raw_z_comp), mf_mx(i, j, 0), mf_my(i, j, 0));
1271 const amrex::Box& bx,
1272 const amrex::Box& domain,
1273 const amrex::Array4<const amrex::Real>& raw_x,
1274 const amrex::Array4<const amrex::Real>& raw_y,
1275 const amrex::Array4<const amrex::Real>& raw_z,
1276 const int raw_flux_comp,
1277 const amrex::Array4<amrex::Real>& mapped_x,
1278 const int mapped_x_comp,
1279 const amrex::Array4<amrex::Real>& mapped_y,
1280 const int mapped_y_comp,
1281 const amrex::Array4<amrex::Real>& mapped_z,
1282 const int mapped_z_comp,
1283 const amrex::Array4<const amrex::Real>& z_nd,
1284 const amrex::Array4<const amrex::Real>& ax,
1285 const amrex::Array4<const amrex::Real>& ay,
1286 const amrex::GpuArray<amrex::Real, AMREX_SPACEDIM>& cellSizeInv,
1287 const amrex::Array4<const amrex::Real>& mf_mx,
1288 const amrex::Array4<const amrex::Real>& mf_uy,
1289 const amrex::Array4<const amrex::Real>& mf_my,
1290 const amrex::Array4<const amrex::Real>& mf_vx,
1291 const bool suppress_lower_surface_z_transfer)
1293 const amrex::Box xbx = amrex::surroundingNodes(bx, 0);
1294 const amrex::Box ybx = amrex::surroundingNodes(bx, 1);
1295 const amrex::Box zbx = amrex::surroundingNodes(bx, 2);
1296 const amrex::Array4<const amrex::Real> xflux(raw_x);
1297 const amrex::Array4<const amrex::Real> yflux(raw_y);
1298 const amrex::Array4<const amrex::Real> zflux(raw_z);
1300 zbx, [=] AMREX_GPU_DEVICE(
int i,
int j,
int k) noexcept {
1301 const bool suppress = suppress_lower_surface_z_transfer &&
1302 k == domain.smallEnd(2);
1303 mapped_z(i, j, k, mapped_z_comp) =
1305 i, j, k, domain, xflux, yflux, zflux, raw_flux_comp, z_nd,
1306 cellSizeInv, mf_mx, mf_my, suppress);
1310 raw_x(i, j, k, raw_flux_comp), ax(i, j, k), mf_uy(i, j, 0));
1314 raw_y(i, j, k, raw_flux_comp), ay(i, j, k), mf_vx(i, j, 0));
1330 const amrex::Box& bx,
1331 const amrex::Array4<const amrex::Real>& mapped_x,
1332 const int mapped_x_comp,
1333 const amrex::Array4<const amrex::Real>& mapped_y,
1334 const int mapped_y_comp,
1335 const amrex::Array4<const amrex::Real>& mapped_z,
1336 const int mapped_z_comp,
1337 const amrex::Array4<amrex::Real>& rhs,
1339 const amrex::Array4<const amrex::Real>& detJ,
1340 const amrex::GpuArray<amrex::Real, AMREX_SPACEDIM>& cellSizeInv,
1341 const amrex::Array4<const amrex::Real>& mf_mx,
1342 const amrex::Array4<const amrex::Real>& mf_my)
1348 bx, [=] AMREX_GPU_DEVICE(
int i,
int j,
int k) noexcept {
1351 mapped_x(i + 1, j, k, mapped_x_comp),
1352 mapped_x(i, j, k, mapped_x_comp),
1353 mapped_y(i, j + 1, k, mapped_y_comp),
1354 mapped_y(i, j, k, mapped_y_comp),
1355 mapped_z(i, j, k + 1, mapped_z_comp),
1356 mapped_z(i, j, k, mapped_z_comp), dx_inv, dy_inv, dzeta_inv,
1357 mf_mx(i, j, 0), mf_my(i, j, 0), detJ(i, j, k));
1365 const amrex::Box& bx,
1366 const amrex::Box& domain,
1368 const amrex::Array4<const amrex::Real>& z_nd,
1369 const amrex::Array4<const amrex::Real>& ax,
1370 const amrex::Array4<const amrex::Real>& ay,
1371 const amrex::Array4<const amrex::Real>& detJ,
1372 const amrex::GpuArray<amrex::Real, AMREX_SPACEDIM>& cellSizeInv,
1373 const amrex::Array4<const amrex::Real>& mf_mx,
1374 const amrex::Array4<const amrex::Real>& mf_uy,
1375 const amrex::Array4<const amrex::Real>& mf_my,
1376 const amrex::Array4<const amrex::Real>& mf_vx,
1377 const bool suppress_lower_surface_z_flux)
1379 using namespace amrex;
1380 const auto dom_lo = lbound(domain);
1381 const Real dx_inv = cellSizeInv[0];
1382 const Real dy_inv = cellSizeInv[1];
1383 const Real dz_inv = cellSizeInv[2];
1384 const Array4<const Real> xflux(field.
xflux);
1385 const Array4<const Real> yflux(field.
yflux);
1386 const Array4<const Real> zflux(field.
zflux);
1387 const auto rhs = field.
rhs;
1389 const int rhs_comp = field.
rhs_comp;
1391 ParallelFor(bx, [=] AMREX_GPU_DEVICE(
int i,
int j,
int k) noexcept {
1393 xflux(i, j, k, flux_comp), ax(i, j, k), mf_uy(i, j, 0));
1395 xflux(i + 1, j, k, flux_comp), ax(i + 1, j, k), mf_uy(i + 1, j, 0));
1397 yflux(i, j, k, flux_comp), ay(i, j, k), mf_vx(i, j, 0));
1399 yflux(i, j + 1, k, flux_comp), ay(i, j + 1, k), mf_vx(i, j + 1, 0));
1400 const Real Gz_lo = (suppress_lower_surface_z_flux && k == dom_lo.z)
1403 i, j, k, domain, xflux, yflux, zflux, flux_comp,
1404 z_nd, cellSizeInv, mf_mx, mf_my);
1406 i, j, k + 1, domain, xflux, yflux, zflux, flux_comp, z_nd, cellSizeInv,
1408 const Real mfsq = mf_mx(i, j, 0) * mf_my(i, j, 0);
1410 mapped_Fx_hi, mapped_Fx_lo, mapped_Fy_hi, mapped_Fy_lo, Gz_hi, Gz_lo,
1411 dx_inv, dy_inv, dz_inv, mfsq, detJ(i, j, k));
1412 rhs(i, j, k, rhs_comp) -= stateContrib;
1422 const amrex::Box& bx,
1423 const amrex::Array4<const amrex::Real>& xflux,
1424 const amrex::Array4<const amrex::Real>& yflux,
1425 const amrex::Array4<const amrex::Real>& raw_Fz,
1426 const int flux_comp,
1427 const amrex::Array4<amrex::Real>& rhs,
1429 const amrex::GpuArray<amrex::Real, AMREX_SPACEDIM>& cellSizeInv,
1430 const amrex::Array4<const amrex::Real>& mf_mx,
1431 const amrex::Array4<const amrex::Real>& mf_my)
1437 const amrex::Real mfsq = mf_mx(i, j, 0) * mf_my(i, j, 0);
1438 rhs(i, j, k, rhs_comp) -=
1439 (xflux(i + 1, j, k, flux_comp) - xflux(i, j, k, flux_comp)) * dx_inv *
1441 (yflux(i, j + 1, k, flux_comp) - yflux(i, j, k, flux_comp)) * dy_inv *
1443 (raw_Fz(i, j, k + 1, flux_comp) - raw_Fz(i, j, k, flux_comp)) * dz_inv;
1451 const amrex::Box& bx,
1452 const amrex::Array4<const amrex::Real>& xflux,
1453 const amrex::Array4<const amrex::Real>& yflux,
1454 const amrex::Array4<const amrex::Real>& raw_Fz,
1455 const int flux_comp,
1456 const amrex::Array4<amrex::Real>& rhs,
1458 const amrex::Array4<const amrex::Real>& mf_mx,
1459 const amrex::Array4<const amrex::Real>& mf_my,
1465 const amrex::Real mfsq = mf_mx(i, j, 0) * mf_my(i, j, 0);
1468 (xflux(i + 1, j, k, flux_comp) - xflux(i, j, k, flux_comp)) * dx_inv *
1470 (yflux(i, j + 1, k, flux_comp) - yflux(i, j, k, flux_comp)) * dy_inv *
1472 (raw_Fz(i, j, k + 1, flux_comp) - raw_Fz(i, j, k, flux_comp)) * dzk_inv;
1473 rhs(i, j, k, rhs_comp) -= stateContrib;
1484 template <
bool MultiplyMolecularByDensity,
bool AddTurbulence>
1487 const amrex::Box& zbx,
1488 const amrex::Box& domain,
1491 const amrex::Array4<const amrex::Real>& z_nd,
1492 const amrex::GpuArray<amrex::Real, AMREX_SPACEDIM>& cellSizeInv,
1493 const amrex::Array4<const amrex::Real>& mf_mx,
1494 const amrex::Array4<const amrex::Real>& mf_my,
1497 using namespace amrex;
1498 const int dom_klo = domain.smallEnd(2);
1499 const int dom_khi = domain.bigEnd(2);
1500 const auto scalar = field.
scalar;
1501 const auto density = field.
density;
1502 const auto mu_turb = field.
mu_turb;
1503 const auto zflux = field.
zflux;
1505 const int rho_comp = field.
rho_comp;
1507 ParallelFor(zbx, [=] AMREX_GPU_DEVICE(
int i,
int j,
int k) noexcept {
1510 MultiplyMolecularByDensity, AddTurbulence>(
1511 density, rho_comp, mu_turb, coefficients, i, j, k, 0, 0, 1,
1514 const Real grad_z = (cellSizeInv[2] / h_zeta) *
1515 (scalar(i, j, k, scalar_comp) - scalar(i, j, k - 1, scalar_comp));
1519 mf_mx(i, j, 0), mf_my(i, j, 0));
1520 zflux(i, j, k, flux_comp) += implicit_fac * kh * metric * grad_z;
1527 const amrex::Box& bx,
1528 const amrex::Box& domain,
1531 const amrex::Array4<const amrex::Real>& z_nd,
1532 const amrex::GpuArray<amrex::Real, AMREX_SPACEDIM>& cellSizeInv,
1533 const amrex::Array4<const amrex::Real>& mf_mx,
1534 const amrex::Array4<const amrex::Real>& mf_my,
1537 const amrex::Box zbx = amrex::surroundingNodes(bx, 2);
1539 if (mode.molecular_is_kinematic) {
1540 if (mode.add_turbulence) {
1541 SubtractTerrainMetricImplicitPart_T_Impl<true, true>(
1542 zbx, domain, field, policy.
coefficients, z_nd, cellSizeInv, mf_mx, mf_my, implicit_fac);
1544 SubtractTerrainMetricImplicitPart_T_Impl<true, false>(
1545 zbx, domain, field, policy.
coefficients, z_nd, cellSizeInv, mf_mx, mf_my, implicit_fac);
1547 }
else if (mode.add_turbulence) {
1548 SubtractTerrainMetricImplicitPart_T_Impl<false, true>(
1549 zbx, domain, field, policy.
coefficients, z_nd, cellSizeInv, mf_mx, mf_my, implicit_fac);
1551 SubtractTerrainMetricImplicitPart_T_Impl<false, false>(
1552 zbx, domain, field, policy.
coefficients, z_nd, cellSizeInv, mf_mx, mf_my, implicit_fac);
1559 const amrex::Box& zbx,
1560 const amrex::Array4<amrex::Real>& raw_Fz,
1561 const int flux_comp,
1565 raw_Fz(i, j, k, flux_comp) *= explicit_fac;
const int klo
Definition: ERF_InitCustomPert_ABL.H:75
const int khi
Definition: ERF_InitCustomPert_Bubble.H:21
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);})
Dimensionless numeric literals and pure mathematical constants.
constexpr amrex::Real fourth
Definition: ERF_NumericalConstants.H:42
constexpr amrex::Real myhalf
Definition: ERF_NumericalConstants.H:41
Real w
Definition: ERF_Plotfile2DInterpolator.cpp:22
void BuildScalarDiffusionFluxes_S(const amrex::Box &bx, const amrex::Box &domain, const ScalarDiffusionFieldViews &field, const ScalarDiffusionFluxPolicy &policy, const amrex::Real dx_inv, const amrex::Real dy_inv, const amrex::Real *dz, const int klo, const int khi, const amrex::Array4< const amrex::Real > &mf_ux, const amrex::Array4< const amrex::Real > &mf_uy, const amrex::Array4< const amrex::Real > &mf_vx, const amrex::Array4< const amrex::Real > &mf_vy, const amrex::BCRec *bc_ptr, const int bc_comp)
Definition: ERF_ScalarDiffusion.H:963
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE amrex::Real ScalarDiffusionFlux_Tx(const amrex::Real coeff, const amrex::Real face_map, const amrex::Real grad_xi, const amrex::Real h_xi, const amrex::Real grad_z) noexcept
Definition: ERF_ScalarDiffusion.H:297
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE amrex::Real ScalarDiffusionFlux_N(const amrex::Array4< const amrex::Real > &scalar, const int scalar_comp, const int i, const int j, const int k, const amrex::Real coeff, const amrex::Real inv_spacing, const amrex::Real map_numerator, const amrex::Real map_denominator, const bool ext_dir_lo, const bool ext_dir_hi) noexcept
Definition: ERF_ScalarDiffusion.H:164
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE StretchedDiffusionBoundaryWeights StretchedDiffusionDirichletWeights(const amrex::Real dz_near, const amrex::Real dz_next) noexcept
Definition: ERF_ScalarDiffusion.H:145
void BuildScalarDiffusionFluxes_N(const amrex::Box &bx, const amrex::Box &domain, const ScalarDiffusionFieldViews &field, const ScalarDiffusionFluxPolicy &policy, const amrex::GpuArray< amrex::Real, AMREX_SPACEDIM > &cellSizeInv, const amrex::Array4< const amrex::Real > &u, const amrex::Array4< const amrex::Real > &v, const amrex::Array4< const amrex::Real > &mf_ux, const amrex::Array4< const amrex::Real > &mf_uy, const amrex::Array4< const amrex::Real > &mf_vx, const amrex::Array4< const amrex::Real > &mf_vy, const amrex::BCRec *bc_ptr, const int bc_comp)
Definition: ERF_ScalarDiffusion.H:813
void BuildScalarDiffusionFluxes_S_Impl(const amrex::Box &bx, const amrex::Box &domain, const ScalarDiffusionFieldViews &field, const ScalarDiffusionFluxPolicy &policy, const amrex::Real dx_inv, const amrex::Real dy_inv, const amrex::Real *dz, const int klo, const int khi, const amrex::Array4< const amrex::Real > &mf_ux, const amrex::Array4< const amrex::Real > &mf_uy, const amrex::Array4< const amrex::Real > &mf_vx, const amrex::Array4< const amrex::Real > &mf_vy, const amrex::BCRec *bc_ptr, const int bc_comp)
Definition: ERF_ScalarDiffusion.H:852
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE amrex::Real TerrainDiffusionGz(const amrex::Real raw_Fz, const amrex::Real mx, const amrex::Real h_xi, const amrex::Real Fbar_x, const amrex::Real my, const amrex::Real h_eta, const amrex::Real Fbar_y) noexcept
Definition: ERF_ScalarDiffusion.H:444
void BuildScalarDiffusionFluxes_T_Impl(const amrex::Box &bx, const amrex::Box &domain, const ScalarDiffusionFieldViews &field, const ScalarDiffusionFluxPolicy &policy, const bool rotate, const amrex::Array4< const amrex::Real > &z_nd, const amrex::Array4< const amrex::Real > &z_cc, const amrex::GpuArray< amrex::Real, AMREX_SPACEDIM > &cellSizeInv, const amrex::Array4< const amrex::Real > &mf_ux, const amrex::Array4< const amrex::Real > &mf_vy, const amrex::BCRec *bc_ptr, const int bc_comp)
Definition: ERF_ScalarDiffusion.H:1004
void ApplyScalarDiffusionFluxDivergence_N(const amrex::Box &bx, const amrex::Array4< const amrex::Real > &xflux, const amrex::Array4< const amrex::Real > &yflux, const amrex::Array4< const amrex::Real > &raw_Fz, const int flux_comp, const amrex::Array4< amrex::Real > &rhs, const int rhs_comp, const amrex::GpuArray< amrex::Real, AMREX_SPACEDIM > &cellSizeInv, const amrex::Array4< const amrex::Real > &mf_mx, const amrex::Array4< const amrex::Real > &mf_my)
Definition: ERF_ScalarDiffusion.H:1421
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE amrex::Real ScalarDiffusionFaceCoefficient(const amrex::Array4< const amrex::Real > &rho, const int rho_comp, const amrex::Array4< const amrex::Real > &mu_turb, const ScalarDiffusionCoefficients &coefficients, const int i, const int j, const int k, const int di, const int dj, const int dk, const int eddy_comp) noexcept
Definition: ERF_ScalarDiffusion.H:113
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE amrex::Real ScalarDiffusionMappedHorizontalTransfer(const amrex::Real raw_flux, const amrex::Real face_area) noexcept
Definition: ERF_ScalarDiffusion.H:480
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE amrex::Real ScalarDiffusionMappedFluxDivergence(const amrex::Real fx_hi, const amrex::Real fx_lo, const amrex::Real fy_hi, const amrex::Real fy_lo, const amrex::Real fz_hi, const amrex::Real fz_lo, const amrex::Real dx_inv, const amrex::Real dy_inv, const amrex::Real dzeta_inv, const amrex::Real mx, const amrex::Real my, const amrex::Real detJ_cell) noexcept
Definition: ERF_ScalarDiffusion.H:604
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE amrex::Real ScalarDiffusionMappedVerticalTransfer(const amrex::Real raw_flux, const amrex::Real mx, const amrex::Real my) noexcept
Definition: ERF_ScalarDiffusion.H:489
void BuildScalarDiffusionMappedTransfers_S(const amrex::Box &bx, const amrex::Array4< const amrex::Real > &raw_x, const int raw_x_comp, const amrex::Array4< const amrex::Real > &raw_y, const int raw_y_comp, const amrex::Array4< const amrex::Real > &raw_z, const int raw_z_comp, const amrex::Array4< amrex::Real > &mapped_x, const int mapped_x_comp, const amrex::Array4< amrex::Real > &mapped_y, const int mapped_y_comp, const amrex::Array4< amrex::Real > &mapped_z, const int mapped_z_comp, const amrex::Array4< const amrex::Real > &ax, const amrex::Array4< const amrex::Real > &ay, const amrex::Array4< const amrex::Real > &mf_mx, const amrex::Array4< const amrex::Real > &mf_my)
Definition: ERF_ScalarDiffusion.H:1209
void ScaleScalarDiffusionVerticalFlux(const amrex::Box &zbx, const amrex::Array4< amrex::Real > &raw_Fz, const int flux_comp, const amrex::Real explicit_fac)
Definition: ERF_ScalarDiffusion.H:1558
void BuildScalarDiffusionMappedTransfers_N(const amrex::Box &bx, const amrex::Array4< const amrex::Real > &raw_x, const int raw_x_comp, const amrex::Array4< const amrex::Real > &raw_y, const int raw_y_comp, const amrex::Array4< const amrex::Real > &raw_z, const int raw_z_comp, const amrex::Array4< amrex::Real > &mapped_x, const int mapped_x_comp, const amrex::Array4< amrex::Real > &mapped_y, const int mapped_y_comp, const amrex::Array4< amrex::Real > &mapped_z, const int mapped_z_comp, const amrex::Array4< const amrex::Real > &mf_mx, const amrex::Array4< const amrex::Real > &mf_my)
Definition: ERF_ScalarDiffusion.H:1163
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE amrex::Real TerrainScalarDiffusionFluxAtJFace(const amrex::Array4< const amrex::Real > &scalar, const int scalar_comp, const amrex::Real coeff, const int i, const int j, const int k, const amrex::Array4< const amrex::Real > &z_nd, const amrex::Array4< const amrex::Real > &z_cc, const amrex::GpuArray< amrex::Real, AMREX_SPACEDIM > &cellSizeInv, const amrex::Array4< const amrex::Real > &mf_vy) noexcept
Definition: ERF_ScalarDiffusion.H:355
void ApplyScalarDiffusionFluxDivergence_S(const amrex::Box &bx, const amrex::Array4< const amrex::Real > &xflux, const amrex::Array4< const amrex::Real > &yflux, const amrex::Array4< const amrex::Real > &raw_Fz, const int flux_comp, const amrex::Array4< amrex::Real > &rhs, const int rhs_comp, const amrex::Array4< const amrex::Real > &mf_mx, const amrex::Array4< const amrex::Real > &mf_my, const amrex::Real dx_inv, const amrex::Real dy_inv, const amrex::Real *dz)
Definition: ERF_ScalarDiffusion.H:1450
void SubtractTerrainMetricImplicitPart_T_Impl(const amrex::Box &zbx, const amrex::Box &domain, const ScalarDiffusionFieldViews &field, const ScalarDiffusionCoefficients &coefficients, const amrex::Array4< const amrex::Real > &z_nd, const amrex::GpuArray< amrex::Real, AMREX_SPACEDIM > &cellSizeInv, const amrex::Array4< const amrex::Real > &mf_mx, const amrex::Array4< const amrex::Real > &mf_my, const amrex::Real implicit_fac)
Definition: ERF_ScalarDiffusion.H:1486
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE amrex::Real ScalarDiffusionFlux_Ty(const amrex::Real coeff, const amrex::Real face_map, const amrex::Real grad_eta, const amrex::Real h_eta, const amrex::Real grad_z) noexcept
Definition: ERF_ScalarDiffusion.H:308
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE amrex::Real TerrainScalarDiffusionFluxAtKFace(const amrex::Array4< const amrex::Real > &scalar, const int scalar_comp, const amrex::Real coeff, const int i, const int j, const int kface, const amrex::Array4< const amrex::Real > &z_nd, const amrex::GpuArray< amrex::Real, AMREX_SPACEDIM > &cellSizeInv, const bool ext_dir_lo, const bool ext_dir_hi) noexcept
Definition: ERF_ScalarDiffusion.H:389
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE amrex::Real ScalarDiffusionFlux_S_Horizontal(const amrex::Array4< const amrex::Real > &scalar, const int scalar_comp, const int i, const int j, const int k, const amrex::Real coeff, const amrex::Real inv_spacing, const amrex::Real face_map) noexcept
Definition: ERF_ScalarDiffusion.H:277
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE amrex::Real TerrainScalarDiffusionMappedTransferAtKFace(const int i, const int j, const int kface, const amrex::Box &domain, const amrex::Array4< const amrex::Real > &raw_xflux, const amrex::Array4< const amrex::Real > &raw_yflux, const amrex::Array4< const amrex::Real > &raw_zflux, const int flux_comp, const amrex::Array4< const amrex::Real > &z_nd, const amrex::GpuArray< amrex::Real, AMREX_SPACEDIM > &cellSizeInv, const amrex::Array4< const amrex::Real > &mf_mx, const amrex::Array4< const amrex::Real > &mf_my, const bool suppress_transfer=false) noexcept
Definition: ERF_ScalarDiffusion.H:575
void SubtractTerrainMetricImplicitPart_T(const amrex::Box &bx, const amrex::Box &domain, const ScalarDiffusionFieldViews &field, const ScalarDiffusionFluxPolicy &policy, const amrex::Array4< const amrex::Real > &z_nd, const amrex::GpuArray< amrex::Real, AMREX_SPACEDIM > &cellSizeInv, const amrex::Array4< const amrex::Real > &mf_mx, const amrex::Array4< const amrex::Real > &mf_my, const amrex::Real implicit_fac)
Definition: ERF_ScalarDiffusion.H:1526
void ApplyScalarMappedFluxDivergence(const amrex::Box &bx, const amrex::Array4< const amrex::Real > &mapped_x, const int mapped_x_comp, const amrex::Array4< const amrex::Real > &mapped_y, const int mapped_y_comp, const amrex::Array4< const amrex::Real > &mapped_z, const int mapped_z_comp, const amrex::Array4< amrex::Real > &rhs, const int rhs_comp, const amrex::Array4< const amrex::Real > &detJ, const amrex::GpuArray< amrex::Real, AMREX_SPACEDIM > &cellSizeInv, const amrex::Array4< const amrex::Real > &mf_mx, const amrex::Array4< const amrex::Real > &mf_my)
Definition: ERF_ScalarDiffusion.H:1329
void ApplyScalarDiffusionMappedDivergence_T(const amrex::Box &bx, const amrex::Box &domain, const ScalarDiffusionFieldViews &field, const amrex::Array4< const amrex::Real > &z_nd, const amrex::Array4< const amrex::Real > &ax, const amrex::Array4< const amrex::Real > &ay, const amrex::Array4< const amrex::Real > &detJ, const amrex::GpuArray< amrex::Real, AMREX_SPACEDIM > &cellSizeInv, const amrex::Array4< const amrex::Real > &mf_mx, const amrex::Array4< const amrex::Real > &mf_uy, const amrex::Array4< const amrex::Real > &mf_my, const amrex::Array4< const amrex::Real > &mf_vx, const bool suppress_lower_surface_z_flux)
Definition: ERF_ScalarDiffusion.H:1364
void BuildScalarDiffusionFluxes_N_Impl(const amrex::Box &bx, const amrex::Box &domain, const ScalarDiffusionFieldViews &field, const ScalarDiffusionFluxPolicy &policy, const amrex::GpuArray< amrex::Real, AMREX_SPACEDIM > &cellSizeInv, const amrex::Array4< const amrex::Real > &u, const amrex::Array4< const amrex::Real > &v, const amrex::Array4< const amrex::Real > &mf_ux, const amrex::Array4< const amrex::Real > &mf_uy, const amrex::Array4< const amrex::Real > &mf_vx, const amrex::Array4< const amrex::Real > &mf_vy, const amrex::BCRec *bc_ptr, const int bc_comp)
Definition: ERF_ScalarDiffusion.H:656
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE amrex::Real TerrainDiffusionDivergence_T(const amrex::Real mapped_Fx_hi, const amrex::Real mapped_Fx_lo, const amrex::Real mapped_Fy_hi, const amrex::Real mapped_Fy_lo, const amrex::Real Gz_hi, const amrex::Real Gz_lo, const amrex::Real dx_inv, const amrex::Real dy_inv, const amrex::Real dz_inv, const amrex::Real mfsq, const amrex::Real detJ_cell) noexcept
Definition: ERF_ScalarDiffusion.H:628
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE amrex::Real StretchedScalarGradient(const amrex::Array4< const amrex::Real > &scalar, const int scalar_comp, const int i, const int j, const int k, const amrex::Real *dz, const int klo, const int khi, const bool ext_dir_lo, const bool ext_dir_hi) noexcept
Definition: ERF_ScalarDiffusion.H:238
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE amrex::Real TerrainScalarDiffusionFluxAtIFace(const amrex::Array4< const amrex::Real > &scalar, const int scalar_comp, const amrex::Real coeff, const int i, const int j, const int k, const amrex::Array4< const amrex::Real > &z_nd, const amrex::Array4< const amrex::Real > &z_cc, const amrex::GpuArray< amrex::Real, AMREX_SPACEDIM > &cellSizeInv, const amrex::Array4< const amrex::Real > &mf_ux) noexcept
Definition: ERF_ScalarDiffusion.H:325
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE amrex::Real TerrainDiffusionMappedTy(const amrex::Real raw_Fy, const amrex::Real h_zeta, const amrex::Real mx) noexcept
Definition: ERF_ScalarDiffusion.H:466
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE amrex::Real TerrainScalarDiffusionGzAtKFace(const int i, const int j, const int kface, const amrex::Box &domain, const amrex::Array4< const amrex::Real > &raw_xflux, const amrex::Array4< const amrex::Real > &raw_yflux, const amrex::Array4< const amrex::Real > &raw_zflux, const int flux_comp, const amrex::Array4< const amrex::Real > &z_nd, const amrex::GpuArray< amrex::Real, AMREX_SPACEDIM > &cellSizeInv, const amrex::Array4< const amrex::Real > &mf_mx, const amrex::Array4< const amrex::Real > &mf_my) noexcept
Definition: ERF_ScalarDiffusion.H:503
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE amrex::Real TerrainDiffusionMappedTx(const amrex::Real raw_Fx, const amrex::Real h_zeta, const amrex::Real my) noexcept
Definition: ERF_ScalarDiffusion.H:457
void BuildScalarDiffusionMappedTransfers_T(const amrex::Box &bx, const amrex::Box &domain, const amrex::Array4< const amrex::Real > &raw_x, const amrex::Array4< const amrex::Real > &raw_y, const amrex::Array4< const amrex::Real > &raw_z, const int raw_flux_comp, const amrex::Array4< amrex::Real > &mapped_x, const int mapped_x_comp, const amrex::Array4< amrex::Real > &mapped_y, const int mapped_y_comp, const amrex::Array4< amrex::Real > &mapped_z, const int mapped_z_comp, const amrex::Array4< const amrex::Real > &z_nd, const amrex::Array4< const amrex::Real > &ax, const amrex::Array4< const amrex::Real > &ay, const amrex::GpuArray< amrex::Real, AMREX_SPACEDIM > &cellSizeInv, const amrex::Array4< const amrex::Real > &mf_mx, const amrex::Array4< const amrex::Real > &mf_uy, const amrex::Array4< const amrex::Real > &mf_my, const amrex::Array4< const amrex::Real > &mf_vx, const bool suppress_lower_surface_z_transfer)
Definition: ERF_ScalarDiffusion.H:1270
void BuildScalarDiffusionFluxes_T(const amrex::Box &bx, const amrex::Box &domain, const ScalarDiffusionFieldViews &field, const ScalarDiffusionFluxPolicy &policy, const bool rotate, const amrex::Array4< const amrex::Real > &z_nd, const amrex::Array4< const amrex::Real > &z_cc, const amrex::GpuArray< amrex::Real, AMREX_SPACEDIM > &cellSizeInv, const amrex::Array4< const amrex::Real > &mf_ux, const amrex::Array4< const amrex::Real > &mf_vy, const amrex::BCRec *bc_ptr, const int bc_comp)
Definition: ERF_ScalarDiffusion.H:1121
amrex::Real Real
Definition: ERF_ShocInterface.H:19
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE bool TerrainMetricImplicitFace(const int kface, const int dom_lo, const int dom_hi) noexcept
Definition: ERF_TerrainImplicitMetric.H:72
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE amrex::Real TerrainMetricScalarFactor(const amrex::Real h_xi, const amrex::Real h_eta, const amrex::Real mx, const amrex::Real my) noexcept
Definition: ERF_TerrainImplicitMetric.H:56
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE amrex::Real Compute_h_xi_AtKface(const int &i, const int &j, const int &k, const amrex::GpuArray< amrex::Real, AMREX_SPACEDIM > &cellSizeInv, const amrex::Array4< const amrex::Real > &z_nd)
Definition: ERF_TerrainMetrics.H:440
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE amrex::Real Compute_h_eta_AtJface(const int &i, const int &j, const int &k, const amrex::GpuArray< amrex::Real, AMREX_SPACEDIM > &cellSizeInv, const amrex::Array4< const amrex::Real > &z_nd)
Definition: ERF_TerrainMetrics.H:392
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE amrex::Real Compute_h_eta_AtKface(const int &i, const int &j, const int &k, const amrex::GpuArray< amrex::Real, AMREX_SPACEDIM > &cellSizeInv, const amrex::Array4< const amrex::Real > &z_nd)
Definition: ERF_TerrainMetrics.H:463
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE amrex::Real Compute_h_zeta_AtKface(const int &i, const int &j, const int &k, const amrex::GpuArray< amrex::Real, AMREX_SPACEDIM > &cellSizeInv, const amrex::Array4< const amrex::Real > &z_nd)
Definition: ERF_TerrainMetrics.H:416
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE amrex::Real Compute_Z_AtWFace(const int &i, const int &j, const int &k, const amrex::Array4< const amrex::Real > &z_nd)
Definition: ERF_TerrainMetrics.H:736
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE amrex::Real Compute_h_xi_AtIface(const int &i, const int &j, const int &k, const amrex::GpuArray< amrex::Real, AMREX_SPACEDIM > &cellSizeInv, const amrex::Array4< const amrex::Real > &z_nd)
Definition: ERF_TerrainMetrics.H:299
@ ext_dir
Definition: ERF_IndexDefines.H:300
@ ext_dir_prim
Definition: ERF_IndexDefines.H:303
@ ext_dir_upwind
Definition: ERF_IndexDefines.H:308
@ rho
Definition: ERF_Kessler.H:25
@ dz
Definition: ERF_AdvanceWDM6.cpp:272
Definition: ERF_ConsoleIO.cpp:17
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
real(c_double), private di
Definition: ERF_module_mp_morr_two_moment.F90:203
Definition: ERF_ScalarDiffusion.H:49
bool molecular_is_kinematic
Definition: ERF_ScalarDiffusion.H:50
bool add_turbulence
Definition: ERF_ScalarDiffusion.H:51
Definition: ERF_ScalarDiffusion.H:23
int eddy_v_comp
Definition: ERF_ScalarDiffusion.H:26
int eddy_h_comp
Definition: ERF_ScalarDiffusion.H:25
amrex::Real molecular_coeff
Definition: ERF_ScalarDiffusion.H:24
Definition: ERF_ScalarDiffusion.H:33
int rho_comp
Definition: ERF_ScalarDiffusion.H:37
amrex::Array4< amrex::Real > xflux
Definition: ERF_ScalarDiffusion.H:39
amrex::Array4< amrex::Real > rhs
Definition: ERF_ScalarDiffusion.H:43
int rhs_comp
Definition: ERF_ScalarDiffusion.H:44
amrex::Array4< const amrex::Real > scalar
Definition: ERF_ScalarDiffusion.H:34
amrex::Array4< amrex::Real > yflux
Definition: ERF_ScalarDiffusion.H:40
int flux_comp
Definition: ERF_ScalarDiffusion.H:42
amrex::Array4< const amrex::Real > density
Definition: ERF_ScalarDiffusion.H:36
int scalar_comp
Definition: ERF_ScalarDiffusion.H:35
amrex::Array4< amrex::Real > zflux
Definition: ERF_ScalarDiffusion.H:41
amrex::Array4< const amrex::Real > mu_turb
Definition: ERF_ScalarDiffusion.H:38
Definition: ERF_ScalarDiffusion.H:92
ScalarDiffusionRawFluxDiagnostic diagnostic
Definition: ERF_ScalarDiffusion.H:96
ScalarDiffusionPrescribedFluxes prescribed
Definition: ERF_ScalarDiffusion.H:95
ScalarDiffusionCoefficientMode coefficient_mode
Definition: ERF_ScalarDiffusion.H:94
ScalarDiffusionSurfaceFaces surface
Definition: ERF_ScalarDiffusion.H:97
ScalarDiffusionCoefficients coefficients
Definition: ERF_ScalarDiffusion.H:93
Definition: ERF_ScalarDiffusion.H:56
bool use_z_on_side
Definition: ERF_ScalarDiffusion.H:59
int z_comp
Definition: ERF_ScalarDiffusion.H:67
bool use_y_on_bottom_z
Definition: ERF_ScalarDiffusion.H:61
amrex::Array4< const amrex::Real > x
Definition: ERF_ScalarDiffusion.H:62
amrex::Array4< const amrex::Real > z
Definition: ERF_ScalarDiffusion.H:64
bool use_x_on_side
Definition: ERF_ScalarDiffusion.H:57
int y_comp
Definition: ERF_ScalarDiffusion.H:66
bool use_x_on_bottom_z
Definition: ERF_ScalarDiffusion.H:60
amrex::Array4< const amrex::Real > y
Definition: ERF_ScalarDiffusion.H:63
bool use_y_on_side
Definition: ERF_ScalarDiffusion.H:58
int x_comp
Definition: ERF_ScalarDiffusion.H:65
Definition: ERF_ScalarDiffusion.H:72
int z_comp
Definition: ERF_ScalarDiffusion.H:76
amrex::Array4< amrex::Real > z
Definition: ERF_ScalarDiffusion.H:75
bool write_on_surface
Definition: ERF_ScalarDiffusion.H:74
bool enabled
Definition: ERF_ScalarDiffusion.H:73
Definition: ERF_ScalarDiffusion.H:81
bool zlo
Definition: ERF_ScalarDiffusion.H:86
bool xlo
Definition: ERF_ScalarDiffusion.H:82
bool ylo
Definition: ERF_ScalarDiffusion.H:84
bool xhi
Definition: ERF_ScalarDiffusion.H:83
bool yhi
Definition: ERF_ScalarDiffusion.H:85
bool zhi
Definition: ERF_ScalarDiffusion.H:87
Definition: ERF_ScalarDiffusion.H:140
amrex::Real c2
Definition: ERF_ScalarDiffusion.H:141
amrex::Real c3
Definition: ERF_ScalarDiffusion.H:141
amrex::Real c1
Definition: ERF_ScalarDiffusion.H:141