26 const Box& utbx,
const Box& vtbx,
27 const Array4<Real >& ru,
28 const Array4<Real >& rv,
29 const Array4<Real const>& pn,
30 const Array4<Real const>& pm,
31 const Array4<Real const>& rho,
32 const Array4<Real >& FC,
33 const Array4<Real const>& Hz,
34 const Array4<Real const>& z_r,
35 const Array4<Real const>& z_w,
36 const Array4<Real const>& msku,
37 const Array4<Real const>& mskv,
38 const int nrhs,
const int N)
41 phi_bxD.makeSlab(2,0);
42 auto phi_gbxD=phi_gbx & phi_bx;
43 phi_gbxD.makeSlab(2,0);
44 Box phi_ubx = surroundingNodes(phi_bx,0);
45 Box phi_vbx = surroundingNodes(phi_bx,1);
51 const Real OneFifth = 0.2_rt;
52 const Real OneTwelfth = 1.0_rt/12.0_rt;
53 const Real eps = 1.0E-10_rt;
55 Real GRho0 = 1000.0_rt * GRho;
56 Real HalfGRho = 0.5_rt * GRho;
58 FArrayBox fab_P(phi_bx,1,The_Async_Arena());
59 FArrayBox fab_aux(Box(z_r),1,The_Async_Arena());
60 FArrayBox fab_dR(phi_bx,1,The_Async_Arena());
61 FArrayBox fab_dZ(phi_bx,1,The_Async_Arena());
62 FArrayBox fab_dRx(phi_bx,1,The_Async_Arena());
63 FArrayBox fab_dZx(phi_bx,1,The_Async_Arena());
66 auto aux=fab_aux.array();
67 auto dR=fab_dR.array();
68 auto dZ=fab_dZ.array();
69 auto dRx=fab_dRx.array();
70 auto dZx=fab_dZx.array();
74 [=] AMREX_GPU_DEVICE (
int i,
int j,
int k)
77 dR(i,j,k)=rho(i,j,k+1)-rho(i,j,k);
78 dZ(i,j,k)=z_r(i,j,k+1)-z_r(i,j,k);
80 dR(i,j,N)=rho(i,j,N)-rho(i,j,N-1);
81 dZ(i,j,N)=z_r(i,j,N)-z_r(i,j,N-1);
86 [=] AMREX_GPU_DEVICE (
int i,
int j,
int )
88 for(
int k=N;k>=0;k--) {
89 Real cff= k>0 ? 2.0_rt*dR(i,j,k)*dR(i,j,k-1) : 2.0_rt*dR(i,j,k)*dR(i,j,k);
91 dR(i,j,k)= k>0 ? cff/(dR(i,j,k)+dR(i,j,k-1)) : cff/(dR(i,j,k)+dR(i,j,k));
95 dZ(i,j,k)= k>0 ? 2.0_rt*dZ(i,j,k)*dZ(i,j,k-1)/(dZ(i,j,k)+dZ(i,j,k-1)) :
96 2.0_rt*dZ(i,j,k)*dZ(i,j,k)/(dZ(i,j,k)+dZ(i,j,k));
101 [=] AMREX_GPU_DEVICE (
int i,
int j,
int )
103 Real cff1=1.0_rt/(z_r(i,j,N)-z_r(i,j,N-1));
104 Real cff2=0.5_rt*(rho(i,j,N)-rho(i,j,N-1))*(z_w(i,j,N+1)-z_r(i,j,N))*cff1;
106 P(i,j,N)=GRho0*z_w(i,j,N+1)+GRho*(rho(i,j,N)+cff2)*(z_w(i,j,N+1)-z_r(i,j,N));
108 for (
int k=N-1;k>=0;k--)
110 Real rho_diff = rho(i,j,k+1)-rho(i,j,k) - OneTwelfth* (dR(i,j,k+1)+dR(i,j,k));
111 Real z_diff = z_r(i,j,k+1)-z_r(i,j,k) - OneTwelfth* (dZ(i,j,k+1)+dZ(i,j,k));
112 Real rz_avg = (rho(i,j,k+1)+rho(i,j,k)) * (z_r(i,j,k+1)-z_r(i,j,k));
114 P(i,j,k) = P(i,j,k+1) + HalfGRho * ( rz_avg -
115 OneFifth* ( (dR(i,j,k+1)-dR(i,j,k)) * z_diff -
116 (dZ(i,j,k+1)-dZ(i,j,k)) * rho_diff ) );
123 [=] AMREX_GPU_DEVICE (
int i,
int j,
int k)
125 FC(i,j,k)=(rho(i,j,k)-rho(i-1,j,k)) * msku(i,j,0);
126 aux(i,j,k)=(z_r(i,j,k)-z_r(i-1,j,k)) * msku(i,j,0);
132 [=] AMREX_GPU_DEVICE (
int i,
int j,
int )
134 for(
int k=N;k>=0;k--) {
135 Real cff= 2.0_rt*aux(i,j,k)*aux(i+1,j,k);
137 Real cff1= 1.0_rt/(aux(i+1,j,k)+aux(i,j,k));
142 Real cff1= 2.0_rt*FC(i,j,k)*FC(i+1,j,k);
144 Real cff2= 1.0_rt/(FC(i,j,k)+FC(i+1,j,k));
145 dRx(i,j,k)=cff1*cff2;
153 ParallelFor(utbxD, [=] AMREX_GPU_DEVICE (
int i,
int j,
int )
155 for(
int k=N;k>=0;k--)
157 Real rho_diff = rho(i,j,k)-rho(i-1,j,k)- OneTwelfth* (dRx(i,j,k)+dRx(i-1,j,k));
158 Real z_r_diff = z_r(i,j,k)-z_r(i-1,j,k)- OneTwelfth* (dZx(i,j,k)+dZx(i-1,j,k));
159 Real Hz_avg = 0.5_rt * (Hz(i,j,k)+Hz(i-1,j,k));
161 Real on_u = 2.0_rt / (pn(i-1,j,0)+pn(i,j,0));
162 ru(i,j,k,nrhs) = on_u * Hz_avg * (
163 P(i-1,j,k) - P(i,j,k) - HalfGRho *
164 ( (rho(i,j,k)+rho(i-1,j,k))*(z_r(i,j,k)-z_r(i-1,j,k))-
165 OneFifth * ( (dRx(i,j,k)-dRx(i-1,j,k)) * z_r_diff -
166 (dZx(i,j,k)-dZx(i-1,j,k)) * rho_diff ) ) );
171 ParallelFor(phi_vbx, [=] AMREX_GPU_DEVICE (
int i,
int j,
int k)
173 FC(i,j,k)= (rho(i,j,k)-rho(i,j-1,k)) * mskv(i,j,0);
174 aux(i,j,k)= (z_r(i,j,k)-z_r(i,j-1,k)) * mskv(i,j,0);
179 ParallelFor(phi_bxD, [=] AMREX_GPU_DEVICE (
int i,
int j,
int )
181 for(
int k=N;k>=0;k--) {
182 Real cff= 2.0_rt*aux(i,j,k)*aux(i,j+1,k);
184 Real cff1= 1.0_rt/(aux(i,j+1,k)+aux(i,j,k));
189 Real cff1= 2.0_rt*FC(i,j,k)*FC(i,j+1,k);
191 Real cff2= 1.0_rt/(FC(i,j,k)+FC(i,j+1,k));
192 dRx(i,j,k)=cff1*cff2;
200 ParallelFor(vtbxD, [=] AMREX_GPU_DEVICE (
int i,
int j,
int )
202 for (
int k=N;k>=0;k--)
204 Real rho_diff = rho(i,j,k)-rho(i,j-1,k)- OneTwelfth* (dRx(i,j,k)+dRx(i,j-1,k));
205 Real z_r_diff = z_r(i,j,k)-z_r(i,j-1,k)- OneTwelfth* (dZx(i,j,k)+dZx(i,j-1,k));
206 Real Hz_avg = 0.5_rt * (Hz(i,j,k)+Hz(i,j-1,k));
208 Real om_v = 2.0_rt / (pm(i,j-1,0)+pm(i,j,0));
209 rv(i,j,k,nrhs) = om_v * Hz_avg * (
210 P(i,j-1,k) - P(i,j,k) - HalfGRho *
211 ( (rho(i,j,k)+rho(i,j-1,k))*(z_r(i,j,k)-z_r(i,j-1,k))-
212 OneFifth * ( (dRx(i,j,k)-dRx(i,j-1,k)) * z_r_diff -
213 (dZx(i,j,k)-dZx(i,j-1,k)) * rho_diff ) ) );