24 const Array4<Real >& phi,
25 const Array4<Real const>& Hz,
26 const Array4<Real >& Hzk,
27 const Array4<Real >& AK,
28 const Array4<Real const>& Akv,
29 const Array4<Real >& BC,
30 const Array4<Real >& DC,
31 const Array4<Real >& FC,
32 const Array4<Real >& CF,
33 const int nnew,
const int N,
const Real dt_lev)
35 BL_PROFILE(
"REMORA::vert_visc_3d()");
40 amrex::Print() <<
"updating on box in vert_visc_3d: " << phi_bx << std::endl;
42 ParallelFor(phi_bx, [=] AMREX_GPU_DEVICE (
int i,
int j,
int k)
44 Hzk(i,j,k)=0.5_rt*(Hz(i-ioff,j-joff,k)+Hz(i,j,k));
50 ParallelFor(surroundingNodes(phi_bx,2), [=] AMREX_GPU_DEVICE (
int i,
int j,
int k)
52 AK(i,j,k) = 0.5_rt * (Akv(i-ioff,j-joff,k)+Akv(i,j,k));
55 Gpu::streamSynchronize();
62 const Real sixth = 1.0_rt / 6.0_rt;
63 const Real third = 1.0_rt / 3.0_rt;
65 ParallelFor(makeSlab(phi_bx,2,0), [=] AMREX_GPU_DEVICE (
int i,
int j,
int )
72 ParallelFor(makeSlab(phi_bx,2,0), N, [=] AMREX_GPU_DEVICE (
int i,
int j,
int ,
int kk)
80 const Real oHzkm1 = 1.0_rt/ Hzk(i,j,k-1);
81 const Real oHz = 1.0_rt/ Hzk(i,j,k);
84 FC(i,j,k) = sixth * Hzk(i,j,k-1) - dt_lev * AK(i,j,k-1) / Hzk(i,j,k-1);
85 CF(i,j,k) = sixth * Hzk(i,j,k ) - dt_lev * AK(i,j,k+1) / Hzk(i,j,k );
87 BC(i,j,k) = third * (Hzk(i,j,k-1) + Hzk(i,j,k )) + dt_lev * AK(i,j,k) * (oHzkm1 + oHz);
88 Real cff = 1.0_rt / (BC(i,j,k) - FC(i,j,k) * CF(i,j,k-1));
90 DC(i,j,k) = cff * (phi(i,j,k ,nnew) - phi(i,j,k-1,nnew) - FC(i,j,k)*DC(i,j,k-1));
96 Gpu::streamSynchronize();
97 ParallelFor(makeSlab(phi_bx,2,0), [=] AMREX_GPU_DEVICE (
int i,
int j,
int )
100 for(
int k=N; k>=1; k--) {
104 DC(i,j,k) -= CF(i,j,k)*DC(i,j,k+1);
112 ParallelFor(surroundingNodes(phi_bx,2), [=] AMREX_GPU_DEVICE (
int i,
int j,
int k)
114 DC(i,j,k) *= AK(i,j,k);
117 ParallelFor(phi_bx, [=] AMREX_GPU_DEVICE (
int i,
int j,
int k)
119 const Real oHz = 1.0_rt/ Hzk(i,j,k);
120 Real cff = dt_lev*oHz*(DC(i,j,k+1)-DC(i,j,k));
void vert_visc_3d(const amrex::Box &bx, const int ioff, const int joff, const amrex::Array4< amrex::Real > &phi, const amrex::Array4< amrex::Real const > &Hz, const amrex::Array4< amrex::Real > &Hzk, const amrex::Array4< amrex::Real > &AK, const amrex::Array4< amrex::Real const > &Akv, const amrex::Array4< amrex::Real > &BC, const amrex::Array4< amrex::Real > &DC, const amrex::Array4< amrex::Real > &FC, const amrex::Array4< amrex::Real > &CF, const int nnew, const int N, const amrex::Real dt_lev)
Calculate effects of vertical viscosity or diffusivity.