20 const Array4<Real >& state,
21 const Array4<Real >& state_rhs,
22 const Array4<Real const>& diff2,
23 const Array4<Real const>& Hz,
24 const Array4<Real const>& pm,
25 const Array4<Real const>& pn,
26 const Array4<Real const>& msku,
27 const Array4<Real const>& mskv,
28 const Real dt_lev,
const int ncomp)
34 Box xbx(bx); xbx.surroundingNodes(0);
35 Box ybx(bx); ybx.surroundingNodes(1);
37 FArrayBox fab_FX(xbx,ncomp,The_Async_Arena());
38 FArrayBox fab_FE(ybx,ncomp,The_Async_Arena());
40 auto FX=fab_FX.array();
41 auto FE=fab_FE.array();
43 ParallelFor(xbx, ncomp, [=] AMREX_GPU_DEVICE (
int i,
int j,
int k,
int n)
45 const Real pmon_u = (pm(i-1,j,0)+pm(i,j,0))/(pn(i-1,j,0)+pn(i,j,0));
47 const Real cff = 0.25_rt * (diff2(i,j,n) + diff2(i-1,j,n)) * pmon_u;
48 FX(i,j,k,n) = cff * (Hz(i,j,k) + Hz(i-1,j,k)) * (state_rhs(i,j,k,n)-state_rhs(i-1,j,k,n));
49 FX(i,j,k,n) *= msku(i,j,0);
52 ParallelFor(ybx, ncomp, [=] AMREX_GPU_DEVICE (
int i,
int j,
int k,
int n)
54 const Real pnom_v = (pn(i,j-1,0)+pn(i,j,0))/(pm(i,j-1,0)+pm(i,j,0));
56 const Real cff = 0.25_rt*(diff2(i,j,n)+diff2(i,j-1,n)) * pnom_v;
57 FE(i,j,k,n) = cff * (Hz(i,j,k) + Hz(i,j-1,k)) * (state_rhs(i,j,k,n) - state_rhs(i,j-1,k,n));
58 FE(i,j,k,n) *= mskv(i,j,0);
64 ParallelFor(bx, ncomp, [=] AMREX_GPU_DEVICE (
int i,
int j,
int k,
int n)
66 const Real cff = dt_lev*pm(i,j,0)*pn(i,j,0);
68 state(i,j,k,n) += cff * ( (FX(i+1,j ,k,n)-FX(i,j,k,n))
69 +(FE(i ,j+1,k,n)-FE(i,j,k,n)) );
void t3dmix(const amrex::Box &bx, const amrex::Array4< amrex::Real > &state, const amrex::Array4< amrex::Real > &state_rhs, const amrex::Array4< amrex::Real const > &diff2, const amrex::Array4< amrex::Real const > &Hz, const amrex::Array4< amrex::Real const > &pm, const amrex::Array4< amrex::Real const > &pn, const amrex::Array4< amrex::Real const > &msku, const amrex::Array4< amrex::Real const > &mskv, const amrex::Real dt_lev, const int ncomp)
Harmonic diffusivity for tracers.