26 const Array4<Real >& u,
27 const Array4<Real >& v,
28 const Array4<Real const>& uold,
29 const Array4<Real const>& vold,
30 const Array4<Real >& rufrc,
31 const Array4<Real >& rvfrc,
32 const Array4<Real const>& visc2_p,
33 const Array4<Real const>& visc2_r,
34 const Array4<Real const>& Hz,
35 const Array4<Real const>& pm,
36 const Array4<Real const>& pn,
37 const Array4<Real const>& mskp,
45 FArrayBox fab_UFx(growLo(xbx,0,1),1,amrex::The_Async_Arena()); fab_UFx.template setVal<RunOn::Device>(0.);
46 FArrayBox fab_UFe(growHi(xbx,1,1),1,amrex::The_Async_Arena()); fab_UFe.template setVal<RunOn::Device>(0.);
47 FArrayBox fab_VFe(growLo(ybx,1,1),1,amrex::The_Async_Arena()); fab_VFe.template setVal<RunOn::Device>(0.);
48 FArrayBox fab_VFx(growHi(ybx,0,1),1,amrex::The_Async_Arena()); fab_VFx.template setVal<RunOn::Device>(0.);
50 auto UFx=fab_UFx.array();
51 auto UFe=fab_UFe.array();
52 auto VFx=fab_VFx.array();
53 auto VFe=fab_VFe.array();
55 auto N = xbx.hiVect()[2] - ybx.loVect()[2];
67 ParallelFor(growLo(xbx,0,1), [=] AMREX_GPU_DEVICE (
int i,
int j,
int k)
69 const Real cff = 0.5_rt*Hz(i,j,k) * ( pm(i,j,0) / pn(i,j,0) *
70 ( (pn(i ,j,0) + pn(i+1,j,0)) * uold(i+1,j,k,nrhs)-
71 (pn(i-1,j,0) + pn(i ,j,0)) * uold(i ,j,k,nrhs) )-
72 pn(i,j,0) / pm(i,j,0) *
73 ( (pm(i,j ,0) + pm(i,j+1,0)) * vold(i,j+1,k,nrhs)-
74 (pm(i,j-1,0) + pm(i,j ,0)) * vold(i,j ,k,nrhs) ) );
76 Real on_r = 1.0_rt / pn(i,j,0);
77 UFx(i,j,k) = on_r * on_r * visc2_r(i,j,0) * cff;
80 ParallelFor(growHi(xbx,1,1), [=] AMREX_GPU_DEVICE (
int i,
int j,
int k)
82 const Real pmon_p = (pm(i-1,j-1,0)+pm(i-1,j,0)+pm(i,j-1,0)+pm(i,j,0)) /
83 (pn(i-1,j-1,0)+pn(i-1,j,0)+pn(i,j-1,0)+pn(i,j,0));
84 const Real pnom_p = (pn(i-1,j-1,0)+pn(i-1,j,0)+pn(i,j-1,0)+pn(i,j,0)) /
85 (pm(i-1,j-1,0)+pm(i-1,j,0)+pm(i,j-1,0)+pm(i,j,0));
86 const Real cff = mskp(i,j,0) * 0.125_rt *
87 (Hz(i-1,j ,k) + Hz(i,j ,k)+ Hz(i-1,j-1,k) + Hz(i,j-1,k))*
89 ((pn(i ,j-1,0)+pn(i ,j,0))*vold(i ,j,k,nrhs)-
90 (pn(i-1,j-1,0)+pn(i-1,j,0))*vold(i-1,j,k,nrhs))+
92 ((pm(i-1,j ,0)+pm(i,j ,0))*uold(i,j ,k,nrhs)-
93 (pm(i-1,j-1,0)+pm(i,j-1,0))*uold(i,j-1,k,nrhs)));
95 const Real om_p = 4.0_rt / (pm(i-1,j-1,0)+pm(i-1,j,0)+pm(i,j-1,0)+pm(i,j,0));
96 UFe(i,j,k) = om_p*om_p*visc2_p(i,j,0)*cff;
99 ParallelFor(makeSlab(xbx,2,0), [=] AMREX_GPU_DEVICE (
int i,
int j,
int)
101 for (
int k=0; k<=N; k++) {
102 const Real cff=dt_lev*0.25_rt*(pm(i-1,j,0)+pm(i,j,0))*(pn(i-1,j,0)+pn(i,j,0));
103 const Real cff1=0.5_rt*(pn(i-1,j,0)+pn(i,j,0))*(UFx(i,j ,k)-UFx(i-1,j,k));
104 const Real cff2=0.5_rt*(pm(i-1,j,0)+pm(i,j,0))*(UFe(i,j+1,k)-UFe(i ,j,k));
105 const Real cff3=cff*(cff1+cff2);
106 u(i,j,k,nnew)=u(i,j,k,nnew)+cff3;
107 rufrc(i,j,0) += cff1+cff2;
122 ParallelFor(growLo(ybx,1,1), [=] AMREX_GPU_DEVICE (
int i,
int j,
int k)
125 const Real cff = 0.5_rt*Hz(i,j,k) * (pm(i,j,0) / pn(i,j,0) *
126 ((pn(i, j,0) + pn(i+1,j,0)) * uold(i+1,j,k,nrhs)-
127 (pn(i-1,j,0) + pn(i, j,0)) * uold(i ,j,k,nrhs))-
128 pn(i,j,0) / pm(i,j,0) *
129 ((pm(i,j ,0)+pm(i,j+1,0))*vold(i,j+1,k,nrhs)-
130 (pm(i,j-1,0)+pm(i,j ,0))*vold(i,j ,k,nrhs)));
132 Real om_r = 1.0_rt / pm(i,j,0);
133 VFe(i,j,k) = om_r * om_r * visc2_r(i,j,0) * cff;
136 ParallelFor(growHi(ybx,0,1), [=] AMREX_GPU_DEVICE (
int i,
int j,
int k)
138 const Real pmon_p = (pm(i-1,j-1,0)+pm(i-1,j,0)+pm(i,j-1,0)+pm(i,j,0)) /
139 (pn(i-1,j-1,0)+pn(i-1,j,0)+pn(i,j-1,0)+pn(i,j,0));
140 const Real pnom_p = (pn(i-1,j-1,0)+pn(i-1,j,0)+pn(i,j-1,0)+pn(i,j,0)) /
141 (pm(i-1,j-1,0)+pm(i-1,j,0)+pm(i,j-1,0)+pm(i,j,0));
142 const Real cff = mskp(i,j,0) * 0.125_rt * (Hz(i-1,j ,k)+Hz(i,j ,k)+
143 Hz(i-1,j-1,k)+Hz(i,j-1,k))*
145 ((pn(i ,j-1,0)+pn(i ,j,0))*vold(i ,j,k,nrhs)-
146 (pn(i-1,j-1,0)+pn(i-1,j,0))*vold(i-1,j,k,nrhs))+
148 ((pm(i-1,j ,0)+pm(i,j ,0))*uold(i,j ,k,nrhs)-
149 (pm(i-1,j-1,0)+pm(i,j-1,0))*uold(i,j-1,k,nrhs)));
151 const Real on_p = 4.0_rt / (pn(i-1,j-1,0)+pn(i-1,j,0)+pn(i,j-1,0)+pn(i,j,0));
152 VFx(i,j,k) = on_p*on_p*visc2_p(i,j,0)*cff;
155 ParallelFor(makeSlab(ybx,2,0), [=] AMREX_GPU_DEVICE (
int i,
int j,
int )
157 for (
int k=0; k<=N; k++) {
158 const Real cff=dt_lev*0.25_rt*(pm(i,j,0)+pm(i,j-1,0))*(pn(i,j,0)+pn(i,j-1,0));
159 const Real cff1=0.5_rt*(pn(i,j-1,0)+pn(i,j,0))*(VFx(i+1,j,k)-VFx(i,j ,k));
160 const Real cff2=0.5_rt*(pm(i,j-1,0)+pm(i,j,0))*(VFe(i ,j,k)-VFe(i,j-1,k));
161 const Real cff3=cff*(cff1-cff2);
163 v(i,j,k,nnew)=v(i,j,k,nnew)+cff3;
164 rvfrc(i,j,0) += cff1-cff2;