Function for computing the scalar RHS for diffusion operator without terrain.
48 const int prim_index = qty_index - 1;
52 int ilo = bx.smallEnd(0);
53 int ihi = bx.bigEnd(0);
54 int jlo = bx.smallEnd(1);
55 int jhi = bx.bigEnd(1);
56 int klo = bx.smallEnd(2);
57 int khi = bx.bigEnd(2);
58 amrex::ignore_unused(ilo, ihi, jlo, jhi);
62 amrex::FArrayBox RHS_fab, soln_fab, coeffA_fab, coeffB_fab, inv_coeffB_fab, coeffC_fab;
63 RHS_fab.resize(bx,1, amrex::The_Async_Arena());
64 soln_fab.resize(bx,1, amrex::The_Async_Arena());
65 coeffA_fab.resize(bx,1, amrex::The_Async_Arena());
66 coeffB_fab.resize(bx,1, amrex::The_Async_Arena());
67 inv_coeffB_fab.resize(bx,1, amrex::The_Async_Arena());
68 coeffC_fab.resize(bx,1, amrex::The_Async_Arena());
69 auto const& RHS_a = RHS_fab.array();
70 auto const& soln_a = soln_fab.array();
71 auto const& coeffA_a = coeffA_fab.array();
72 auto const& coeffB_a = coeffB_fab.array();
73 auto const& inv_coeffB_a = inv_coeffB_fab.array();
74 auto const& coeffC_a = coeffC_fab.array();
78 Real dz_inv = cellSizeInv[2];
88 ParallelFor(makeSlab(bx,2,0), [=] AMREX_GPU_DEVICE (
int i,
int j,
int)
91 for (
int j(jlo); j<=jhi; ++j) {
92 for (
int i(ilo); i<=ihi; ++i) {
95 for (
int k(klo); k <= khi; k++)
131 RHS_a(i,j,k) = detJ(i,j,k) * cell_data(i,j,k,n);
135 coeffA_a(i,j,k) = -implicit_fac * rhoAlpha_lo * dt * dz_inv * dz_inv / met_h_zeta_lo;
136 coeffC_a(i,j,k) = -implicit_fac * rhoAlpha_hi * dt * dz_inv * dz_inv / met_h_zeta_hi;
140 RHS_a(i,j,klo) += implicit_fac * dt * dz_inv * hfx_z(i,j,0);
141 }
else if (neumann_on_zlo) {
142 RHS_a(i,j,klo) += coeffA_a(i,j,klo) * bc_neumann_vals[2] / dz_inv*met_h_zeta_lo;
145 coeffA_a(i,j,klo) = 0.;
148 if (neumann_on_zhi) {
149 RHS_a(i,j,khi) -= coeffC_a(i,j,khi) * bc_neumann_vals[5] / dz_inv*met_h_zeta_hi;
152 coeffC_a(i,j,khi) = 0.;
155 coeffB_a(i,j,k) = detJ(i,j,k)*cell_data(i,j,k,
Rho_comp) - coeffA_a(i,j,k) - coeffC_a(i,j,k);
160 Real bet = coeffB_a(i,j,klo);
162 for (
int k(klo+1); k<=khi; ++k) {
163 Real gam = coeffC_a(i,j,k-1) / bet;
164 bet = coeffB_a(i,j,k) - coeffA_a(i,j,k)*gam;
165 AMREX_ASSERT(bet != 0.0);
166 coeffB_a(i,j,k) = bet;
169 for (
int k(klo); k<=khi; ++k) {
170 inv_coeffB_a(i,j,k) = 1.0 / coeffB_a(i,j,k);
176 soln_a(i,j,klo) = RHS_a(i,j,klo) * inv_coeffB_a(i,j,klo);
178 for (
int k(klo+1); k<=khi; ++k) {
179 soln_a(i,j,k) = (RHS_a(i,j,k)-coeffA_a(i,j,k)*soln_a(i,j,k-1)) * inv_coeffB_a(i,j,k);
182 for (
int k(khi-1); k>=klo; --k) {
183 soln_a(i,j,k) -= ( coeffC_a(i,j,k) * inv_coeffB_a(i,j,k) ) * soln_a(i,j,k+1);
189 for (
int k(klo); k<=khi; ++k) {
190 cell_data(i,j,k,n) = soln_a(i,j,k) * cell_data(i,j,k,
Rho_comp);
void ImplicitDiffForState_T(const Box &bx, const Box &domain, const int level, const Real dt, const GpuArray< Real, AMREX_SPACEDIM *2 > &bc_neumann_vals, const Array4< Real > &cell_data, const Array4< const Real > &z_nd, const Array4< const Real > &detJ, const GpuArray< Real, AMREX_SPACEDIM > &cellSizeInv, const Array4< Real > &hfx_z, const Array4< const Real > &mu_turb, const SolverChoice &solverChoice, const BCRec *bc_ptr, const bool use_SurfLayer, const Real implicit_fac)
Definition: ERF_ImplicitDiff_T.cpp:26
const int bc_comp
Definition: ERF_Implicit.H:8
#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 NSCALARS
Definition: ERF_IndexDefines.H:16
#define PrimScalar_comp
Definition: ERF_IndexDefines.H:52
const auto & dom_hi
Definition: ERF_SetupVertDiff.H:2
bool l_turb
Definition: ERF_SetupVertDiff.H:8
const auto & dom_lo
Definition: ERF_SetupVertDiff.H:1
bool l_consA
Definition: ERF_SetupVertDiff.H:7
int * d_eddy_diff_idz
Definition: ERF_SetupVertDiff.H:107
Real * d_alpha_eff
Definition: ERF_SetupVertDiff.H:104
amrex::Real Real
Definition: ERF_ShocInterface.H:19
AMREX_GPU_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:182
@ neumann
Definition: ERF_IndexDefines.H:213