24 const Array4<Real const>& uold,
25 const Array4<Real const>& vold,
26 const Array4<Real >& ru,
27 const Array4<Real >& rv,
28 const Array4<Real const>& Hz,
29 const Array4<Real const>& dndx,
30 const Array4<Real const>& dmde,
33 BL_PROFILE(
"REMORA::curvilinear()");
41 int UFx_comp = ncomp++;
42 int VFe_comp = ncomp++;
44 FArrayBox fab(grow(bx,IntVect(1,1,0)),ncomp,The_Async_Arena());
46 auto UFx = fab.array(UFx_comp);
47 auto VFe = fab.array(VFe_comp);
49 ParallelFor(grow(bx,IntVect(1,1,0)),
50 [=] AMREX_GPU_DEVICE (
int i,
int j,
int k)
52 Real cff1 = 0.5_rt * (vold(i,j,k,nrhs) + vold(i ,j+1,k,nrhs));
53 Real cff2 = 0.5_rt * (uold(i,j,k,nrhs) + uold(i+1,j ,k,nrhs));
54 Real cff3 = cff1 * dndx(i,j,0);
55 Real cff4 = cff2 * dmde(i,j,0);
56 Real cff = Hz(i,j,k) * (cff3 - cff4);
57 UFx(i,j,k) = cff * cff1;
58 VFe(i,j,k) = cff * cff2;
62 [=] AMREX_GPU_DEVICE (
int i,
int j,
int k)
64 ru(i,j,k,nr) += 0.5_rt * (UFx(i,j,k) + UFx(i-1,j,k));
68 [=] AMREX_GPU_DEVICE (
int i,
int j,
int k)
70 rv(i,j,k,nr) -= 0.5_rt * (VFe(i,j,k) + VFe(i,j-1,k));
void curvilinear(const amrex::Box &bx, const amrex::Box &xbx, const amrex::Box &ybx, const amrex::Array4< amrex::Real const > &uold, const amrex::Array4< amrex::Real const > &vold, const amrex::Array4< amrex::Real > &ru, const amrex::Array4< amrex::Real > &rv, const amrex::Array4< amrex::Real const > &Hz, const amrex::Array4< amrex::Real const > &dndx, const amrex::Array4< amrex::Real const > &dmde, int nrhs, int nr)
Calculate curvilinear advection terms.