68 del_flux, del_flux_hyd, & ! (out)
69 ddens_, momx_, momy_, momz_, etot_, dpres_, dens_hyd, pres_hyd, &
71 gsqrt, g13, g23, zlev, nx, ny, nz, &
72 vmapm, vmapp, lmesh, elem, lmesh2d, elem2d )
80 real(rp),
intent(out) :: del_flux(elem%nfptot,lmesh%ne,
prgvar_num)
81 real(rp),
intent(out) :: del_flux_hyd(elem%nfptot,lmesh%ne,2)
82 real(rp),
intent(in) :: ddens_(elem%np*lmesh%nea)
83 real(rp),
intent(in) :: momx_(elem%np*lmesh%nea)
84 real(rp),
intent(in) :: momy_(elem%np*lmesh%nea)
85 real(rp),
intent(in) :: momz_(elem%np*lmesh%nea)
86 real(rp),
intent(in) :: etot_(elem%np*lmesh%nea)
87 real(rp),
intent(in) :: dpres_(elem%np*lmesh%nea)
88 real(rp),
intent(in) :: dens_hyd(elem%np*lmesh%nea)
89 real(rp),
intent(in) :: pres_hyd(elem%np*lmesh%nea)
90 real(rp),
intent(in) :: rtot (elem%np*lmesh%nea)
91 real(rp),
intent(in) :: cvtot(elem%np*lmesh%nea)
92 real(rp),
intent(in) :: cptot(elem%np*lmesh%nea)
93 real(rp),
intent(in) :: gsqrt(elem%np*lmesh%nea)
94 real(rp),
intent(in) :: g13(elem%np*lmesh%nea)
95 real(rp),
intent(in) :: g23(elem%np*lmesh%nea)
96 real(rp),
intent(in) :: zlev(elem%np*lmesh%ne)
97 real(rp),
intent(in) :: nx(elem%nfptot,lmesh%ne)
98 real(rp),
intent(in) :: ny(elem%nfptot,lmesh%ne)
99 real(rp),
intent(in) :: nz(elem%nfptot,lmesh%ne)
100 integer,
intent(in) :: vmapm(elem%nfptot,lmesh%ne)
101 integer,
intent(in) :: vmapp(elem%nfptot,lmesh%ne)
103 integer :: ke, i, ip(elem%nfptot), im(elem%nfptot)
105 real(rp) :: velp(elem%nfptot), velm(elem%nfptot), alpha(elem%nfptot)
106 real(rp) :: dpresp(elem%nfptot), dpresm(elem%nfptot)
107 real(rp) :: gsqrtdensm(elem%nfptot), gsqrtdensp(elem%nfptot)
108 real(rp) :: gsqrtenthalpym(elem%nfptot), gsqrtenthalpyp(elem%nfptot)
109 real(rp) :: gsqrtddens_p(elem%nfptot), gsqrtddens_m(elem%nfptot)
110 real(rp) :: gsqrtmomx_p(elem%nfptot), gsqrtmomx_m(elem%nfptot)
111 real(rp) :: gsqrtmomy_p(elem%nfptot), gsqrtmomy_m(elem%nfptot)
112 real(rp) :: gsqrtmomz_p(elem%nfptot), gsqrtmomz_m(elem%nfptot)
113 real(rp) :: gsqrtetot_p(elem%nfptot), gsqrtetot_m(elem%nfptot)
114 real(rp) :: phyd_p(elem%nfptot), phyd_m(elem%nfptot)
115 real(rp) :: gsqrt_p(elem%nfptot), gsqrt_m(elem%nfptot)
116 real(rp) :: gsqrtv_p(elem%nfptot), gsqrtv_m(elem%nfptot)
117 real(rp) :: g13_m(elem%nfptot), g13_p(elem%nfptot)
118 real(rp) :: g23_m(elem%nfptot), g23_p(elem%nfptot)
120 real(rp) :: gnn_m(elem%nfptot), gnn_p(elem%nfptot)
122 real(rp) :: gamm, rgamm
124 real(rp) :: rovp0, p0ovr
128 rgamm = cvdry / cpdry
129 rp0 = 1.0_rp / pres00
131 p0ovr = pres00 / rdry
143 do ke=lmesh%NeS, lmesh%NeE
144 im(:) = vmapm(:,ke); ip(:) = vmapp(:,ke)
145 ke2d = lmesh%EMap3Dto2D(ke)
147 gsqrt_m(:) = gsqrt(im)
148 gsqrt_p(:) = gsqrt(ip)
149 gsqrtv_m(:) = gsqrt_m(:)
150 gsqrtv_p(:) = gsqrt_p(:)
157 gsqrtddens_m(:) = gsqrt_m(:) * ddens_(im)
158 gsqrtddens_p(:) = gsqrt_p(:) * ddens_(ip)
159 gsqrtmomx_m(:) = gsqrt_m(:) * momx_(im)
160 gsqrtmomx_p(:) = gsqrt_p(:) * momx_(ip)
161 gsqrtmomy_m(:) = gsqrt_m(:) * momy_(im)
162 gsqrtmomy_p(:) = gsqrt_p(:) * momy_(ip)
163 gsqrtmomz_m(:) = gsqrt_m(:) * momz_(im)
164 gsqrtmomz_p(:) = gsqrt_p(:) * momz_(ip)
165 gsqrtetot_m(:) = gsqrt_m(:) * etot_(im)
166 gsqrtetot_p(:) = gsqrt_p(:) * etot_(ip)
167 phyd_m(:) = pres_hyd(im)
168 phyd_p(:) = pres_hyd(ip)
170 gnn_m(:) = abs( nx(:,ke) ) + abs( ny(:,ke) ) &
171 + ( 1.0_rp / gsqrtv_m(:)**2 + g13_m(:)**2 + g23_m(:)**2 ) * abs( nz(:,ke) )
172 gnn_p(:) = abs( nx(:,ke) ) + abs( ny(:,ke) ) &
173 + ( 1.0_rp / gsqrtv_p(:)**2 + g13_p(:)**2 + g23_p(:)**2 ) * abs( nz(:,ke) )
175 gsqrtdensm(:) = gsqrtddens_m(:) + gsqrt_m(:) * dens_hyd(im)
176 gsqrtdensp(:) = gsqrtddens_p(:) + gsqrt_p(:) * dens_hyd(ip)
178 velm(:) = ( gsqrtmomx_m(:) * nx(:,ke) + gsqrtmomy_m(:) * ny(:,ke) &
179 + ( ( gsqrtmomz_m(:) / gsqrtv_m(:) &
180 + g13_m(:) * gsqrtmomx_m(:) + g23_m(:) * gsqrtmomy_m(:) ) * nz(:,ke) ) &
182 velp(:) = ( gsqrtmomx_p(:) * nx(:,ke) + gsqrtmomy_p(:) * ny(:,ke) &
183 + ( ( gsqrtmomz_p(:) / gsqrtv_p(:) &
184 + g13_p(:) * gsqrtmomx_p(:) + g23_p(:) * gsqrtmomy_p(:) ) * nz(:,ke) ) &
195 dpresm(:) = dpres_(im)
196 dpresp(:) = dpres_(ip)
198 gsqrtenthalpym(:) = gsqrtetot_m(:) + gsqrt_m(:) * ( phyd_m(:) + dpresm(:) )
199 gsqrtenthalpyp(:) = gsqrtetot_p(:) + gsqrt_p(:) * ( phyd_p(:) + dpresp(:) )
201 alpha(:) = max( sqrt( gnn_m(:) * gamm * ( phyd_m(:) + dpresm(:) ) * gsqrt_m(:) / gsqrtdensm(:) ) + abs(velm(:)), &
202 sqrt( gnn_p(:) * gamm * ( phyd_p(:) + dpresp(:) ) * gsqrt_p(:) / gsqrtdensp(:) ) + abs(velp(:)) )
204 del_flux(:,ke,dens_vid) = 0.5_rp * ( &
205 ( gsqrtdensp(:) * velp(:) - gsqrtdensm(:) * velm(:) ) &
206 - alpha(:) * ( gsqrtddens_p(:) - gsqrtddens_m(:) ) )
208 del_flux(:,ke,momx_vid ) = 0.5_rp * ( &
209 ( gsqrtmomx_p(:) * velp(:) - gsqrtmomx_m(:) * velm(:) ) &
210 + ( gsqrt_p(:) * ( nx(:,ke) + g13_p(:) * nz(:,ke)) * dpresp(:) &
211 - gsqrt_m(:) * ( nx(:,ke) + g13_m(:) * nz(:,ke)) * dpresm(:) ) &
212 - alpha(:) * ( gsqrtmomx_p(:) - gsqrtmomx_m(:) ) )
214 del_flux(:,ke,momy_vid ) = 0.5_rp * ( &
215 ( gsqrtmomy_p(:) * velp(:) - gsqrtmomy_m(:) * velm(:) ) &
216 + ( gsqrt_p(:) * ( ny(:,ke) + g23_p(:) * nz(:,ke)) * dpresp(:) &
217 - gsqrt_m(:) * ( ny(:,ke) + g23_m(:) * nz(:,ke)) * dpresm(:) ) &
218 - alpha(:) * ( gsqrtmomy_p(:) - gsqrtmomy_m(:) ) )
220 del_flux(:,ke,momz_vid ) = 0.5_rp * ( &
221 ( gsqrtmomz_p(:) * velp(:) - gsqrtmomz_m(:) * velm(:) ) &
222 + ( gsqrt_p(:) * dpresp(:) / gsqrtv_p(:) &
223 - gsqrt_m(:) * dpresm(:) / gsqrtv_m(:) ) * nz(:,ke) &
224 - alpha(:) * ( gsqrtmomz_p(:) - gsqrtmomz_m(:) ) )
226 del_flux(:,ke,etot_vid) = 0.5_rp * ( &
227 ( gsqrtenthalpyp(:) * velp(:) - gsqrtenthalpym(:) * velm(:) ) &
228 - alpha(:) * ( gsqrtetot_p(:) - gsqrtetot_m(:) ) )
231 del_flux_hyd(:,ke,1) = 0.5_rp * ( &
232 gsqrtv_p(:) * ( nx(:,ke) + g13_p(:) * nz(:,ke) ) * phyd_p(:) &
233 - gsqrtv_m(:) * ( nx(:,ke) + g13_m(:) * nz(:,ke) ) * phyd_m(:) )
235 del_flux_hyd(:,ke,2) = 0.5_rp * ( &
236 gsqrtv_p(:) * ( ny(:,ke) + g23_p(:) * nz(:,ke) ) * phyd_p(:) &
237 - gsqrtv_m(:) * ( ny(:,ke) + g23_m(:) * nz(:,ke) ) * phyd_m(:) )
246 del_flux, del_flux_hyd, & ! (out)
247 ddens_, momx_, momy_, momz_, etot_, dpres_, dens_hyd, pres_hyd, &
248 rtot, cvtot, cptot, &
249 gsqrt, g11, g12, g22, g_11, g_12, g_22, gsqrth, g13, g23, zlev, &
250 nx, ny, nz, vmapm, vmapp, im2dto3d, lmesh, elem, lmesh2d, elem2d )
258 real(rp),
intent(out) :: del_flux(elem%nfptot,lmesh%ne,
prgvar_num)
259 real(rp),
intent(out) :: del_flux_hyd(elem%nfptot,lmesh%ne,2)
260 real(rp),
intent(in) :: ddens_(elem%np*lmesh%nea)
261 real(rp),
intent(in) :: momx_(elem%np*lmesh%nea)
262 real(rp),
intent(in) :: momy_(elem%np*lmesh%nea)
263 real(rp),
intent(in) :: momz_(elem%np*lmesh%nea)
264 real(rp),
intent(in) :: etot_(elem%np*lmesh%nea)
265 real(rp),
intent(in) :: dpres_(elem%np*lmesh%nea)
266 real(rp),
intent(in) :: dens_hyd(elem%np*lmesh%nea)
267 real(rp),
intent(in) :: pres_hyd(elem%np*lmesh%nea)
268 real(rp),
intent(in) :: rtot (elem%np*lmesh%nea)
269 real(rp),
intent(in) :: cvtot(elem%np*lmesh%nea)
270 real(rp),
intent(in) :: cptot(elem%np*lmesh%nea)
271 real(rp),
intent(in) :: gsqrt(elem%np*lmesh%nea)
272 real(rp),
intent(in) :: g11(elem2d%np,lmesh2d%ne)
273 real(rp),
intent(in) :: g12(elem2d%np,lmesh2d%ne)
274 real(rp),
intent(in) :: g22(elem2d%np,lmesh2d%ne)
275 real(rp),
intent(in) :: g_11(elem2d%np,lmesh2d%ne)
276 real(rp),
intent(in) :: g_12(elem2d%np,lmesh2d%ne)
277 real(rp),
intent(in) :: g_22(elem2d%np,lmesh2d%ne)
278 real(rp),
intent(in) :: gsqrth(elem2d%np,lmesh2d%ne)
279 real(rp),
intent(in) :: g13(elem%np*lmesh%nea)
280 real(rp),
intent(in) :: g23(elem%np*lmesh%nea)
281 real(rp),
intent(in) :: zlev(elem%np*lmesh%ne)
282 real(rp),
intent(in) :: nx(elem%nfptot,lmesh%ne)
283 real(rp),
intent(in) :: ny(elem%nfptot,lmesh%ne)
284 real(rp),
intent(in) :: nz(elem%nfptot,lmesh%ne)
285 integer,
intent(in) :: vmapm(elem%nfptot,lmesh%ne)
286 integer,
intent(in) :: vmapp(elem%nfptot,lmesh%ne)
287 integer,
intent(in) :: im2dto3d(elem%nfptot)
289 integer :: ke, ip(elem%nfptot), im(elem%nfptot)
291 real(rp) :: velp(elem%nfptot), velm(elem%nfptot), alpha(elem%nfptot)
292 real(rp) :: dpresp(elem%nfptot), dpresm(elem%nfptot)
293 real(rp) :: gsqrtdensm(elem%nfptot), gsqrtdensp(elem%nfptot)
294 real(rp) :: gsqrtenthalpym(elem%nfptot), gsqrtenthalpyp(elem%nfptot)
295 real(rp) :: gsqrtddens_p(elem%nfptot), gsqrtddens_m(elem%nfptot)
296 real(rp) :: gsqrtmomx_p(elem%nfptot), gsqrtmomx_m(elem%nfptot)
297 real(rp) :: gsqrtmomy_p(elem%nfptot), gsqrtmomy_m(elem%nfptot)
298 real(rp) :: gsqrtmomz_p(elem%nfptot), gsqrtmomz_m(elem%nfptot)
299 real(rp) :: gsqrtetot_p(elem%nfptot), gsqrtetot_m(elem%nfptot)
300 real(rp) :: phyd_p(elem%nfptot), phyd_m(elem%nfptot)
301 real(rp) :: gsqrt_p(elem%nfptot), gsqrt_m(elem%nfptot)
302 real(rp) :: gsqrtv_p(elem%nfptot), gsqrtv_m(elem%nfptot)
303 real(rp) :: g13_m(elem%nfptot), g13_p(elem%nfptot)
304 real(rp) :: g23_m(elem%nfptot), g23_p(elem%nfptot)
305 real(rp) :: g1n_m(elem%nfptot), g2n_m(elem%nfptot)
306 real(rp) :: gnn_m(elem%nfptot), gnn_p(elem%nfptot)
307 real(rp) :: gxz_m(elem%nfptot), gxz_p(elem%nfptot)
308 real(rp) :: gyz_m(elem%nfptot), gyz_p(elem%nfptot)
309 real(rp) :: gsqrt_u1m(elem%nfptot), gsqrt_u2m(elem%nfptot)
310 real(rp) :: gsqrt_u1p(elem%nfptot), gsqrt_u2p(elem%nfptot)
312 real(rp) :: gamm, rgamm
314 real(rp) :: rovp0, p0ovr
319 rgamm = cvdry / cpdry
320 rp0 = 1.0_rp / pres00
322 p0ovr = pres00 / rdry
335 do ke=lmesh%NeS, lmesh%NeE
336 im(:) = vmapm(:,ke); ip(:) = vmapp(:,ke)
337 ke2d = lmesh%EMap3Dto2D(ke)
339 gsqrt_m(:) = gsqrt(im)
340 gsqrt_p(:) = gsqrt(ip)
341 gsqrtv_m(:) = gsqrt_m(:) / gsqrth(im2dto3d(:),ke2d)
342 gsqrtv_p(:) = gsqrt_p(:) / gsqrth(im2dto3d(:),ke2d)
349 gsqrtddens_m(:) = gsqrt_m(:) * ddens_(im)
350 gsqrtddens_p(:) = gsqrt_p(:) * ddens_(ip)
351 gsqrtmomx_m(:) = gsqrt_m(:) * momx_(im)
352 gsqrtmomx_p(:) = gsqrt_p(:) * momx_(ip)
353 gsqrtmomy_m(:) = gsqrt_m(:) * momy_(im)
354 gsqrtmomy_p(:) = gsqrt_p(:) * momy_(ip)
355 gsqrtmomz_m(:) = gsqrt_m(:) * momz_(im)
356 gsqrtmomz_p(:) = gsqrt_p(:) * momz_(ip)
357 gsqrtetot_m(:) = gsqrt_m(:) * etot_(im)
358 gsqrtetot_p(:) = gsqrt_p(:) * etot_(ip)
359 phyd_m(:) = pres_hyd(im)
360 phyd_p(:) = pres_hyd(ip)
362 gxz_m(:) = g11(im2dto3d(:),ke2d) * g13_m(:) + g12(im2dto3d(:),ke2d) * g23_m(:)
363 gxz_p(:) = g11(im2dto3d(:),ke2d) * g13_p(:) + g12(im2dto3d(:),ke2d) * g23_p(:)
365 gyz_m(:) = g12(im2dto3d(:),ke2d) * g13_m(:) + g22(im2dto3d(:),ke2d) * g23_m(:)
366 gyz_p(:) = g12(im2dto3d(:),ke2d) * g13_p(:) + g22(im2dto3d(:),ke2d) * g23_p(:)
368 g1n_m(:) = g11(im2dto3d(:),ke2d) * nx(:,ke) + g12(im2dto3d(:),ke2d) * ny(:,ke)
369 g2n_m(:) = g12(im2dto3d(:),ke2d) * nx(:,ke) + g22(im2dto3d(:),ke2d) * ny(:,ke)
371 gnn_m(:) = g11(im2dto3d(:),ke2d) * abs( nx(:,ke) ) + g22(im2dto3d(:),ke2d) * abs( ny(:,ke) ) &
372 + ( 1.0_rp / gsqrtv_m(:)**2 + g13_m(:) * gxz_m(:) + g23_m(:) * gyz_m(:) ) * abs( nz(:,ke) )
373 gnn_p(:) = g11(im2dto3d(:),ke2d) * abs( nx(:,ke) ) + g22(im2dto3d(:),ke2d) * abs( ny(:,ke) ) &
374 + ( 1.0_rp / gsqrtv_p(:)**2 + g13_p(:) * gxz_p(:) + g23_p(:) * gyz_p(:) ) * abs( nz(:,ke) )
376 gsqrtdensm(:) = gsqrtddens_m(:) + gsqrt_m(:) * dens_hyd(im)
377 gsqrtdensp(:) = gsqrtddens_p(:) + gsqrt_p(:) * dens_hyd(ip)
379 velm(:) = ( gsqrtmomx_m(:) * nx(:,ke) + gsqrtmomy_m(:) * ny(:,ke) &
380 + ( ( gsqrtmomz_m(:) / gsqrtv_m(:) &
381 + g13_m(:) * gsqrtmomx_m(:) + g23_m(:) * gsqrtmomy_m(:) ) * nz(:,ke) ) &
383 velp(:) = ( gsqrtmomx_p(:) * nx(:,ke) + gsqrtmomy_p(:) * ny(:,ke) &
384 + ( ( gsqrtmomz_p(:) / gsqrtv_p(:) &
385 + g13_p(:) * gsqrtmomx_p(:) + g23_p(:) * gsqrtmomy_p(:) ) * nz(:,ke) ) &
388 gsqrt_u1m(:) = ( g_11(im2dto3d(:),ke2d) * gsqrtmomx_m(:) + g_12(im2dto3d(:),ke2d) * gsqrtmomy_m(:) )
389 gsqrt_u2m(:) = ( g_12(im2dto3d(:),ke2d) * gsqrtmomx_m(:) + g_22(im2dto3d(:),ke2d) * gsqrtmomy_m(:) )
390 gsqrt_u1p(:) = ( g_11(im2dto3d(:),ke2d) * gsqrtmomx_p(:) + g_12(im2dto3d(:),ke2d) * gsqrtmomy_p(:) )
391 gsqrt_u2p(:) = ( g_12(im2dto3d(:),ke2d) * gsqrtmomx_p(:) + g_22(im2dto3d(:),ke2d) * gsqrtmomy_p(:) )
401 dpresm(:) = dpres_(im)
402 dpresp(:) = dpres_(ip)
404 gsqrtenthalpym(:) = gsqrtetot_m(:) + gsqrt_m(:) * ( phyd_m(:) + dpresm(:) )
405 gsqrtenthalpyp(:) = gsqrtetot_p(:) + gsqrt_p(:) * ( phyd_p(:) + dpresp(:) )
407 alpha(:) = max( sqrt( gnn_m(:) * gamm * ( phyd_m(:) + dpresm(:) ) * gsqrt_m(:) / gsqrtdensm(:) ) + abs(velm(:)), &
408 sqrt( gnn_p(:) * gamm * ( phyd_p(:) + dpresp(:) ) * gsqrt_p(:) / gsqrtdensp(:) ) + abs(velp(:)) )
410 del_flux(:,ke,dens_vid) = 0.5_rp * ( &
411 ( gsqrtdensp(:) * velp(:) - gsqrtdensm(:) * velm(:) ) &
412 - alpha(:) * ( gsqrtddens_p(:) - gsqrtddens_m(:) ) )
414 del_flux(:,ke,momx_vid ) = 0.5_rp * ( &
415 ( gsqrtmomx_p(:) * velp(:) - gsqrtmomx_m(:) * velm(:) ) &
416 + ( gsqrt_p(:) * ( g1n_m(:) + gxz_p(:) * nz(:,ke)) * dpresp(:) &
417 - gsqrt_m(:) * ( g1n_m(:) + gxz_m(:) * nz(:,ke)) * dpresm(:) ) &
418 - alpha(:) * ( gsqrtmomx_p(:) - gsqrtmomx_m(:) ) )
420 del_flux(:,ke,momy_vid ) = 0.5_rp * ( &
421 ( gsqrtmomy_p(:) * velp(:) - gsqrtmomy_m(:) * velm(:) ) &
422 + ( gsqrt_p(:) * ( g2n_m(:) + gyz_p(:) * nz(:,ke) ) * dpresp(:) &
423 - gsqrt_m(:) * ( g2n_m(:) + gyz_m(:) * nz(:,ke) ) * dpresm(:) ) &
424 - alpha(:) * ( gsqrtmomy_p(:) - gsqrtmomy_m(:) ) )
426 del_flux(:,ke,momz_vid ) = 0.5_rp * ( &
427 ( gsqrtmomz_p(:) * velp(:) - gsqrtmomz_m(:) * velm(:) ) &
428 + ( gsqrt_p(:) * dpresp(:) / gsqrtv_p(:) &
429 - gsqrt_m(:) * dpresm(:) / gsqrtv_m(:) ) * nz(:,ke) &
430 - alpha(:) * ( gsqrtmomz_p(:) - gsqrtmomz_m(:) ) )
432 del_flux(:,ke,etot_vid) = 0.5_rp * ( &
433 ( gsqrtenthalpyp(:) * velp(:) - gsqrtenthalpym(:) * velm(:) ) &
434 - alpha(:) * ( gsqrtetot_p(:) - gsqrtetot_m(:) ) )
436 del_flux_hyd(:,ke,1) = 0.5_rp * ( &
437 gsqrtv_p(:) * ( nx(:,ke) + g13_p(:) * nz(:,ke) ) * phyd_p(:) &
438 - gsqrtv_m(:) * ( nx(:,ke) + g13_m(:) * nz(:,ke) ) * phyd_m(:) )
440 del_flux_hyd(:,ke,2) = 0.5_rp * ( &
441 gsqrtv_p(:) * ( ny(:,ke) + g23_p(:) * nz(:,ke) ) * phyd_p(:) &
442 - gsqrtv_m(:) * ( ny(:,ke) + g23_m(:) * nz(:,ke) ) * phyd_m(:) )