74 & LBi, UBi, LBj, UBj, &
75 & IminS, ImaxS, JminS, JmaxS, &
79 & u_stokes, v_stokes, &
95 integer,
intent(in) :: ng, tile, model
96 integer,
intent(in) :: LBi, UBi, LBj, UBj
97 integer,
intent(in) :: IminS, ImaxS, JminS, JmaxS
98 integer,
intent(in) :: nrhs
101 real(r8),
intent(in) :: u(LBi:,LBj:,:,:)
102 real(r8),
intent(in) :: v(LBi:,LBj:,:,:)
104 real(r8),
intent(in) :: u_stokes(LBi:,LBj:,:)
105 real(r8),
intent(in) :: v_stokes(LBi:,LBj:,:)
107 real(r8),
intent(in) :: Hz(LBi:,LBj:,:)
108 real(r8),
intent(in) :: om_v(LBi:,LBj:)
109 real(r8),
intent(in) :: on_u(LBi:,LBj:)
111 real(r8),
intent(out) :: Huon(LBi:,LBj:,:)
112 real(r8),
intent(out) :: Hvom(LBi:,LBj:,:)
114 real(r8),
intent(in) :: u(LBi:UBi,LBj:UBj,N(ng),2)
115 real(r8),
intent(in) :: v(LBi:UBi,LBj:UBj,N(ng),2)
117 real(r8),
intent(in) :: u_stokes(LBi:UBi,LBj:UBj,N(ng))
118 real(r8),
intent(in) :: v_stokes(LBi:UBi,LBj:UBj,N(ng))
120 real(r8),
intent(in) :: Hz(LBi:UBi,LBj:UBj,N(ng))
121 real(r8),
intent(in) :: om_v(LBi:UBi,LBj:UBj)
122 real(r8),
intent(in) :: on_u(LBi:UBi,LBj:UBj)
124 real(r8),
intent(out) :: Huon(LBi:UBi,LBj:UBj,N(ng))
125 real(r8),
intent(out) :: Hvom(LBi:UBi,LBj:UBj,N(ng))
132# include "set_bounds.h"
143 huon(i,j,k)=0.5_r8*(hz(i,j,k)+hz(i-1,j,k))*u(i,j,k,nrhs)* &
146 huon(i,j,k)=huon(i,j,k)+ &
147 & 0.5_r8*(hz(i,j,k)+hz(i-1,j,k))* &
148 & u_stokes(i,j,k)*on_u(i,j)
154 hvom(i,j,k)=0.5_r8*(hz(i,j,k)+hz(i,j-1,k))*v(i,j,k,nrhs)* &
157 hvom(i,j,k)=hvom(i,j,k)+ &
158 & 0.5_r8*(hz(i,j,k)+hz(i,j-1,k))* &
159 & v_stokes(i,j,k)*om_v(i,j)
169 & lbi, ubi, lbj, ubj, 1, n(ng), &
172 & lbi, ubi, lbj, ubj, 1, n(ng), &
178 & lbi, ubi, lbj, ubj, 1, n(ng), &
239 & LBi, UBi, LBj, UBj, &
240 & IminS, ImaxS, JminS, JmaxS, &
242 & DU_avg2, DV_avg2, &
245 & u_stokes, v_stokes, &
261 integer,
intent(in) :: ng, tile, model
262 integer,
intent(in) :: LBi, UBi, LBj, UBj
263 integer,
intent(in) :: IminS, ImaxS, JminS, JmaxS
265 integer,
intent(in) :: nnew
268 real(r8),
intent(in) :: DU_avg2(LBi:,LBj:)
269 real(r8),
intent(in) :: DV_avg2(LBi:,LBj:)
270 real(r8),
intent(in) :: u(LBi:,LBj:,:,:)
271 real(r8),
intent(in) :: v(LBi:,LBj:,:,:)
273 real(r8),
intent(in) :: u_stokes(LBi:,LBj:,:)
274 real(r8),
intent(in) :: v_stokes(LBi:,LBj:,:)
276 real(r8),
intent(in) :: Hz(LBi:,LBj:,:)
277 real(r8),
intent(in) :: om_v(LBi:,LBj:)
278 real(r8),
intent(in) :: on_u(LBi:,LBj:)
280 real(r8),
intent(inout) :: Huon(LBi:,LBj:,:)
281 real(r8),
intent(inout) :: Hvom(LBi:,LBj:,:)
283 real(r8),
intent(in) :: DU_avg2(LBi:UBi,LBj:UBj)
284 real(r8),
intent(in) :: DV_avg2(LBi:UBi,LBj:UBj)
285 real(r8),
intent(in) :: u(LBi:UBi,LBj:UBj,N(ng),2)
286 real(r8),
intent(in) :: v(LBi:UBi,LBj:UBj,N(ng),2)
288 real(r8),
intent(in) :: u_stokes(LBi:UBi,LBj:UBj,N(Ng))
289 real(r8),
intent(in) :: v_stokes(LBi:UBi,LBj:UBj,N(ng))
291 real(r8),
intent(in) :: Hz(LBi:UBi,LBj:UBj,N(ng))
292 real(r8),
intent(in) :: om_v(LBi:UBi,LBj:UBj)
293 real(r8),
intent(in) :: on_u(LBi:UBi,LBj:UBj)
295 real(r8),
intent(inout) :: Huon(LBi:UBi,LBj:UBj,N(ng))
296 real(r8),
intent(inout) :: Hvom(LBi:UBi,LBj:UBj,N(ng))
303 real(r8),
dimension(IminS:ImaxS,0:N(ng)) :: DC
304 real(r8),
dimension(IminS:ImaxS,0:N(ng)) :: FC
306# include "set_bounds.h"
323 dc(i,k)=0.5_r8*(hz(i,j,k)+hz(i-1,j,k))*on_u(i,j)
324 dc(i,0)=dc(i,0)+dc(i,k)
329 huon(i,j,k)=0.5_r8*(huon(i,j,k)+u(i,j,k,nnew)*dc(i,k))
331 huon(i,j,k)=huon(i,j,k)+0.5_r8*u_stokes(i,j,k)*dc(i,k)
333 fc(i,0)=fc(i,0)+huon(i,j,k)
340 dc(i,0)=1.0_r8/dc(i,0)
341 fc(i,0)=dc(i,0)*(fc(i,0)-du_avg2(i,j))
345 huon(i,j,k)=huon(i,j,k)-dc(i,k)*fc(i,0)
358 dc(i,k)=0.5_r8*(hz(i,j,k)+hz(i,j-1,k))*om_v(i,j)
359 dc(i,0)=dc(i,0)+dc(i,k)
364 hvom(i,j,k)=0.5_r8*(hvom(i,j,k)+v(i,j,k,nnew)*dc(i,k))
366 hvom(i,j,k)=hvom(i,j,k)+0.5_r8*v_stokes(i,j,k)*dc(i,k)
368 fc(i,0)=fc(i,0)+hvom(i,j,k)
375 dc(i,0)=1.0_r8/dc(i,0)
376 fc(i,0)=dc(i,0)*(fc(i,0)-dv_avg2(i,j))
380 hvom(i,j,k)=hvom(i,j,k)-dc(i,k)*fc(i,0)
390 & lbi, ubi, lbj, ubj, 1, n(ng), &
393 & lbi, ubi, lbj, ubj, 1, n(ng), &
399 & lbi, ubi, lbj, ubj, 1, n(ng), &
subroutine mp_exchange3d(ng, tile, model, nvar, lbi, ubi, lbj, ubj, lbk, ubk, nghost, ew_periodic, ns_periodic, a, b, c, d)
subroutine reset_massflux_tile(ng, tile, model, lbi, ubi, lbj, ubj, imins, imaxs, jmins, jmaxs, nnew, du_avg2, dv_avg2, u, v, hz, om_v, on_u, huon, hvom)
subroutine set_massflux_tile(ng, tile, model, lbi, ubi, lbj, ubj, imins, imaxs, jmins, jmaxs, nrhs, u, v, hz, om_v, on_u, huon, hvom)