FE-Project
Loading...
Searching...
No Matches
scale_atm_dyn_dgm_nonhydro3d_rhot_heve_splitform.F90
Go to the documentation of this file.
1!-------------------------------------------------------------------------------
2!> module Atmosphere / Dynamics HEVE
3!!
4!! @par Description
5!! HEVE DGM scheme for Atmospheric dynamical process.
6!! To improve the numerical instability due to the aliasing errors,
7!! the split form based on Gassner et al. (2016, JCP) is used for advection terms.
8!!
9!! @author Yuta Kawai, Team SCALE
10!<
11!-------------------------------------------------------------------------------
12#include "scaleFElib.h"
14 !-----------------------------------------------------------------------------
15 !
16 !++ Used modules
17 !
18 use scale_precision
19 use scale_io
20 use scale_prc
21 use scale_prof
22 use scale_const, only: &
23 grav => const_grav, &
24 rdry => const_rdry, &
25 cpdry => const_cpdry, &
26 cvdry => const_cvdry, &
27 pres00 => const_pre00
28
31 use scale_element_base, only: &
40
44 dens_vid => prgvar_ddens_id, rhot_vid => prgvar_drhot_id, &
45 momx_vid => prgvar_momx_id, momy_vid => prgvar_momy_id, &
46 momz_vid => prgvar_momz_id, &
48
49 !-----------------------------------------------------------------------------
50 implicit none
51 private
52 !-----------------------------------------------------------------------------
53 !
54 !++ Public procedures
55 !
59
60 !-----------------------------------------------------------------------------
61 !
62 !++ Public parameters & variables
63 !
64
65 !-----------------------------------------------------------------------------
66 !
67 !++ Private procedures & variables
68 !
69 !-------------------
70
71 real(RP), private, allocatable :: DxT1D_(:,:)
72 real(RP), private, allocatable :: DyT1D_(:,:)
73 real(RP), private, allocatable :: DzT1D_(:,:)
74
75 private :: dx_ab, dy_ab, dz_ab
76 private :: dx_abc, dy_abc, dz_abc
77
78contains
80 implicit none
81 class(meshbase3d), intent(in) :: mesh
82
83 integer :: p1, p2, p3, p_
84 type(elementbase3d), pointer :: elem
85 !--------------------------------------------
86
88 elem => mesh%refElem3D
89
90 allocate( dxt1d_(elem%Nnode_h1D,elem%Nnode_h1D) )
91 allocate( dyt1d_(elem%Nnode_h1D,elem%Nnode_h1D) )
92 allocate( dzt1d_(elem%Nnode_v,elem%Nnode_v) )
93
94 do p1=1, elem%Nnode_h1D
95 dxt1d_(:,p1) = elem%Dx1(p1,1:elem%Nnode_h1D)
96 end do
97
98 do p2=1, elem%Nnode_h1D
99 do p_=1, elem%Nnode_h1D
100 dyt1d_(p_,p2) = elem%Dx2(1+(p2-1)*elem%Nnode_h1D,1+(p_-1)*elem%Nnode_h1D)
101 end do
102 end do
103
104 do p3=1, elem%Nnode_v
105 dzt1d_(:,p3) = elem%Dx3(elem%Colmask(p3,1),elem%Colmask(:,1))
106 end do
107
108 return
110
111
113 implicit none
114 !--------------------------------------------
115
116 deallocate( dxt1d_, dyt1d_, dzt1d_ )
118
119 return
121
122 !-------------------------------
123
125 DENS_dt, MOMX_dt, MOMY_dt, MOMZ_dt, RHOT_dt, & ! (out)
126 ddens_, momx_, momy_, momz_, drhot_, dpres_, & ! (in)
127 dens_hyd, pres_hyd, pres_hyd_ref, therm_hyd, & ! (in)
128 coriolis, rtot, cvtot, cptot, dphyddx, dphyddy, & ! (in)
129 element3d_operation, dx, dy, dz, sx, sy, sz, lift, & ! (in)
130 lmesh, elem, lmesh2d, elem2d ) ! (in)
131
134
135 implicit none
136
137 class(localmesh3d), intent(in) :: lmesh
138 class(elementbase3d), intent(in) :: elem
139 class(localmesh2d), intent(in) :: lmesh2d
140 class(elementbase2d), intent(in) :: elem2d
141 class(elementoperationbase3d), intent(in) :: element3d_operation
142 type(sparsemat), intent(in) :: dx, dy, dz, sx, sy, sz, lift
143 real(rp), intent(out) :: dens_dt(elem%np,lmesh%nea)
144 real(rp), intent(out) :: momx_dt(elem%np,lmesh%nea)
145 real(rp), intent(out) :: momy_dt(elem%np,lmesh%nea)
146 real(rp), intent(out) :: momz_dt(elem%np,lmesh%nea)
147 real(rp), intent(out) :: rhot_dt(elem%np,lmesh%nea)
148 real(rp), intent(in) :: ddens_(elem%np,lmesh%nea)
149 real(rp), intent(in) :: momx_(elem%np,lmesh%nea)
150 real(rp), intent(in) :: momy_(elem%np,lmesh%nea)
151 real(rp), intent(in) :: momz_(elem%np,lmesh%nea)
152 real(rp), intent(in) :: drhot_(elem%np,lmesh%nea)
153 real(rp), intent(in) :: dpres_(elem%np,lmesh%nea)
154 real(rp), intent(in) :: dens_hyd(elem%np,lmesh%nea)
155 real(rp), intent(in) :: pres_hyd(elem%np,lmesh%nea)
156 real(rp), intent(in) :: pres_hyd_ref(elem%np,lmesh%nea)
157 real(rp), intent(in) :: therm_hyd(elem%np,lmesh%nea)
158 real(rp), intent(in) :: coriolis(elem2d%np,lmesh2d%nea)
159 real(rp), intent(in) :: rtot(elem%np,lmesh%nea)
160 real(rp), intent(in) :: cvtot(elem%np,lmesh%nea)
161 real(rp), intent(in) :: cptot(elem%np,lmesh%nea)
162 real(rp), intent(in) :: dphyddx(elem%np,lmesh%nea)
163 real(rp), intent(in) :: dphyddy(elem%np,lmesh%nea)
164
165 real(rp) :: fx(elem%np), fy(elem%np), fz(elem%np), liftdelflx(elem%np)
166 real(rp) :: fx_sp(elem%np), fy_sp(elem%np), fz_sp(elem%np)
167 real(rp) :: dpres_hyd(elem%np), gradphyd_x(elem%np), gradphyd_y(elem%np)
168 real(rp) :: del_flux(elem%nfptot,lmesh%ne,prgvar_num)
169 real(rp) :: del_flux_hyd(elem%nfptot,lmesh%ne,2)
170 real(rp) :: gsqrtdens_(elem%np), rdens_(elem%np), rhot_(elem%np)
171 real(rp) :: u_(elem%np), v_(elem%np), w_(elem%np), wt_(elem%np), pot_(elem%np)
172 real(rp) :: drho(elem%np), cori(elem%np)
173 real(rp) :: gsqrtv(elem%np), rgsqrtv(elem%np)
174
175 integer :: ke, ke2d
176
177 real(rp) :: gamm, rgamm
178 real(rp) :: rp0
179 real(rp) :: rovp0, p0ovr
180 !------------------------------------------------------------------------
181
182 call prof_rapstart( 'cal_dyn_tend_bndflux', 3)
183 call get_ebnd_flux( &
184 del_flux, del_flux_hyd, & ! (out)
185 ddens_, momx_, momy_, momz_, drhot_, dpres_, dens_hyd, pres_hyd, & ! (in)
186 rtot, cvtot, cptot, & ! (in)
187 lmesh%Gsqrt, lmesh%GI3(:,:,1), lmesh%GI3(:,:,2), & ! (in)
188 lmesh%normal_fn(:,:,1), lmesh%normal_fn(:,:,2), lmesh%normal_fn(:,:,3), & ! (in)
189 lmesh%vmapM, lmesh%vmapP, & ! (in)
190 lmesh, elem, lmesh2d, elem2d ) ! (in)
191 call prof_rapend( 'cal_dyn_tend_bndflux', 3)
192
193 !-----
194 call prof_rapstart( 'cal_dyn_tend_interior', 3)
195 gamm = cpdry / cvdry
196 rgamm = cvdry / cpdry
197 rp0 = 1.0_rp / pres00
198 rovp0 = rdry * rp0
199 p0ovr = pres00 / rdry
200
201 !$omp parallel do private( ke2d, Cori, &
202 !$omp RHOT_, GsqrtDens_, rdens_, u_, v_, w_, wt_, pot_, &
203 !$omp DPRES_hyd, GradPhyd_x, GradPhyd_y, drho, &
204 !$omp GsqrtV, RGsqrtV, &
205 !$omp Fx, Fy, Fz, Fx_sp, Fy_sp, Fz_sp, LiftDelFlx )
206 do ke = lmesh%NeS, lmesh%NeE
207 !--
208 ke2d = lmesh%EMap3Dto2D(ke)
209 cori(:) = coriolis(elem%IndexH2Dto3D(:),ke2d)
210
211 gsqrtv(:) = lmesh%Gsqrt(:,ke) / lmesh%GsqrtH(elem%IndexH2Dto3D,ke2d)
212 rgsqrtv(:) = 1.0_rp / gsqrtv(:)
213
214 !--
215 rhot_(:) = p0ovr * (pres_hyd(:,ke) * rp0)**rgamm + drhot_(:,ke)
216 ! DPRES_(:) = PRES00 * ( Rtot(:,ke) * rP0 * RHOT_(:) )**( CPtot(:,ke) / CVtot(:,ke) ) &
217 ! - PRES_hyd(:,ke)
218
219 gsqrtdens_(:) = lmesh%Gsqrt(:,ke) * ( ddens_(:,ke) + dens_hyd(:,ke) )
220 rdens_(:) = 1.0_rp / gsqrtdens_(:)
221 u_(:) = momx_(:,ke) * rdens_(:)
222 v_(:) = momy_(:,ke) * rdens_(:)
223 w_(:) = momz_(:,ke) * rdens_(:)
224 wt_(:) = w_(:) * rgsqrtv(:) + lmesh%GI3(:,ke,1) * u_(:) + lmesh%GI3(:,ke,2) * v_(:)
225 pot_(:) = rhot_(:) * rdens_(:)
226
227 ke2d = lmesh%EMap3Dto2D(ke)
228 cori(:) = coriolis(elem%IndexH2Dto3D(:),ke2d)
229
230 drho(:) = matmul(intrpmat_vpordm1, ddens_(:,ke))
231
232 !-- Gradient hydrostatic pressure
233
234 dpres_hyd(:) = pres_hyd(:,ke) - pres_hyd_ref(:,ke)
235
236 call sparsemat_matmul(dx, gsqrtv(:) * dpres_hyd(:), fx)
237 call sparsemat_matmul(dz, gsqrtv(:) * lmesh%GI3(:,ke,1) * dpres_hyd(:), fz)
238 call sparsemat_matmul(lift, lmesh%Fscale(:,ke) * del_flux_hyd(:,ke,1), liftdelflx)
239 gradphyd_x(:) = lmesh%Escale(:,ke,1,1) * fx(:) &
240 + lmesh%Escale(:,ke,3,3) * fz(:) &
241 + liftdelflx(:)
242
243 call sparsemat_matmul(dy, gsqrtv(:) * dpres_hyd(:), fy)
244 call sparsemat_matmul(dz, gsqrtv(:) * lmesh%GI3(:,ke,2) * dpres_hyd(:), fz)
245 call sparsemat_matmul(lift, lmesh%Fscale(:,ke) * del_flux_hyd(:,ke,2), liftdelflx)
246 gradphyd_y(:) = lmesh%Escale(:,ke,2,2) * fy(:) &
247 + lmesh%Escale(:,ke,3,3) * fz(:) &
248 + liftdelflx(:)
249
250 !-- DENS
251 call dx_ab( dxt1d_, gsqrtdens_(:), u_, elem%Nnode_h1D, elem%Nnode_v, fx_sp )
252 call dy_ab( dyt1d_, gsqrtdens_(:), v_, elem%Nnode_h1D, elem%Nnode_v, fy_sp )
253 call dz_ab( dzt1d_, gsqrtdens_(:), wt_(:), elem%Nnode_h1D, elem%Nnode_v, fz_sp )
254 call sparsemat_matmul(lift, lmesh%Fscale(:,ke) * del_flux(:,ke,dens_vid), liftdelflx)
255
256 dens_dt(:,ke) = - ( &
257 lmesh%Escale(:,ke,1,1) * fx_sp(:) &
258 + lmesh%Escale(:,ke,2,2) * fy_sp(:) &
259 + lmesh%Escale(:,ke,3,3) * fz_sp(:) &
260 + liftdelflx(:) )
261
262 !-- MOMX
263 call dx_abc( dxt1d_, gsqrtdens_, u_, u_, elem%Nnode_h1D, elem%Nnode_v, fx_sp )
264 call dy_abc( dyt1d_, gsqrtdens_, u_, v_, elem%Nnode_h1D, elem%Nnode_v, fy_sp )
265 call dz_abc( dzt1d_, gsqrtdens_, u_, wt_, elem%Nnode_h1D, elem%Nnode_v, fz_sp )
266 call sparsemat_matmul(dx, lmesh%Gsqrt(:,ke) * dpres_(:,ke) , fx)
267 call sparsemat_matmul(lift, lmesh%Fscale(:,ke) * del_flux(:,ke,momx_vid), liftdelflx)
268
269 momx_dt(:,ke) = &
270 - ( lmesh%Escale(:,ke,1,1) * ( fx_sp(:) + fx(:) ) &
271 + lmesh%Escale(:,ke,2,2) * fy_sp(:) &
272 + lmesh%Escale(:,ke,3,3) * fz_sp(:) &
273 + liftdelflx(:) ) / lmesh%Gsqrt(:,ke) &
274 - gradphyd_x(:) * rgsqrtv(:) &
275 + cori(:) * momy_(:,ke)
276
277 !-- MOMY
278 call dx_abc( dxt1d_, gsqrtdens_, v_, u_, elem%Nnode_h1D, elem%Nnode_v, fx_sp )
279 call dy_abc( dyt1d_, gsqrtdens_, v_, v_, elem%Nnode_h1D, elem%Nnode_v, fy_sp )
280 call dz_abc( dzt1d_, gsqrtdens_, v_, wt_, elem%Nnode_h1D, elem%Nnode_v, fz_sp )
281 call sparsemat_matmul(dy, lmesh%Gsqrt(:,ke) * dpres_(:,ke) , fy)
282 call sparsemat_matmul(lift, lmesh%Fscale(:,ke) * del_flux(:,ke,momy_vid), liftdelflx)
283
284 momy_dt(:,ke) = &
285 - ( lmesh%Escale(:,ke,1,1) * fx_sp(:) &
286 + lmesh%Escale(:,ke,2,2) * ( fy_sp(:) + fy(:) ) &
287 + lmesh%Escale(:,ke,3,3) * fz_sp(:) &
288 + liftdelflx(:) ) / lmesh%Gsqrt(:,ke) &
289 - gradphyd_y(:) * rgsqrtv(:) &
290 - cori(:) * momx_(:,ke)
291
292 !-- MOMZ
293 call dx_abc( dxt1d_, gsqrtdens_, w_, u_, elem%Nnode_h1D, elem%Nnode_v, fx_sp )
294 call dy_abc( dyt1d_, gsqrtdens_, w_, v_, elem%Nnode_h1D, elem%Nnode_v, fy_sp )
295 call dz_abc( dzt1d_, gsqrtdens_, w_, wt_, elem%Nnode_h1D, elem%Nnode_v, fz_sp )
296 call sparsemat_matmul(dz, lmesh%Gsqrt(:,ke) * rgsqrtv(:) * dpres_(:,ke) , fz)
297 call sparsemat_matmul(lift, lmesh%Fscale(:,ke) * del_flux(:,ke,momz_vid), liftdelflx)
298
299 momz_dt(:,ke) = - ( &
300 lmesh%Escale(:,ke,1,1) * fx_sp(:) &
301 + lmesh%Escale(:,ke,2,2) * fy_sp(:) &
302 + lmesh%Escale(:,ke,3,3) * ( fz_sp(:) + fz(:) ) &
303 + liftdelflx(:) ) &
304 - grav * drho(:)
305
306 !-- RHOT
307 call dx_abc( dxt1d_, gsqrtdens_, pot_, u_, elem%Nnode_h1D, elem%Nnode_v, fx_sp )
308 call dy_abc( dyt1d_, gsqrtdens_, pot_, v_, elem%Nnode_h1D, elem%Nnode_v, fy_sp )
309 call dz_abc( dzt1d_, gsqrtdens_, pot_, wt_(:), elem%Nnode_h1D, elem%Nnode_v, fz_sp )
310 call sparsemat_matmul(lift, lmesh%Fscale(:,ke) * del_flux(:,ke,rhot_vid), liftdelflx)
311
312 rhot_dt(:,ke) = - ( &
313 lmesh%Escale(:,ke,1,1) * fx_sp(:) &
314 + lmesh%Escale(:,ke,2,2) * fy_sp(:) &
315 + lmesh%Escale(:,ke,3,3) * fz_sp(:) &
316 + liftdelflx(:) )
317 end do
318 call prof_rapend( 'cal_dyn_tend_interior', 3)
319
320 return
322
323!-----------------------------------------
324
325 subroutine dx_ab(DxT1D, a, b, Nnode_h1D, Nnode_v, fx)
326 integer, intent(in) :: nnode_h1d, nnode_v
327 real(rp), intent(in) :: dxt1d(nnode_h1d,nnode_h1d)
328 real(rp), intent(in) :: a(nnode_h1d,nnode_h1d,nnode_v)
329 real(rp), intent(in) :: b(nnode_h1d,nnode_h1d,nnode_v)
330 real(rp), intent(out) :: fx(nnode_h1d,nnode_h1d,nnode_v)
331
332 integer :: i, j, k, p
333 integer :: i2, j2, k2, p2
334 !-------------------------------------------------
335
336 do k=1, nnode_v
337 do j=1, nnode_h1d
338 do i=1, nnode_h1d
339 fx(i,j,k) = 0.5_rp * sum( dxt1d(:,i) * (a(i,j,k) + a(:,j,k)) * (b(i,j,k) + b(:,j,k)) )
340 end do
341 end do
342 end do
343
344 return
345 end subroutine dx_ab
346
347 subroutine dy_ab(DyT1D, a, b, Nnode_h1D, Nnode_v, fy)
348 integer, intent(in) :: nnode_h1d, nnode_v
349 real(rp), intent(in) :: dyt1d(nnode_h1d,nnode_h1d)
350 real(rp), intent(in) :: a(nnode_h1d,nnode_h1d,nnode_v)
351 real(rp), intent(in) :: b(nnode_h1d,nnode_h1d,nnode_v)
352 real(rp), intent(out) :: fy(nnode_h1d,nnode_h1d,nnode_v)
353
354 integer :: i, j, k, p
355 integer :: i2, j2, k2, p2
356 !-------------------------------------------------
357
358 do k=1, nnode_v
359 do j=1, nnode_h1d
360 do i=1, nnode_h1d
361 fy(i,j,k) = 0.5_rp * sum( dyt1d(:,j) * (a(i,j,k) + a(i,:,k)) * (b(i,j,k) + b(i,:,k)) )
362 end do
363 end do
364 end do
365
366 return
367 end subroutine dy_ab
368
369 subroutine dz_ab(DzT1D, a, b, Nnode_h1D, Nnode_v, fz)
370 integer, intent(in) :: nnode_h1d, nnode_v
371 real(rp), intent(in) :: dzt1d(nnode_v,nnode_v)
372 real(rp), intent(in) :: a(nnode_h1d,nnode_h1d,nnode_v)
373 real(rp), intent(in) :: b(nnode_h1d,nnode_h1d,nnode_v)
374 real(rp), intent(out) :: fz(nnode_h1d,nnode_h1d,nnode_v)
375
376 integer :: i, j, k, p
377 integer :: i2, j2, k2, p2
378 !-------------------------------------------------
379
380 do k=1, nnode_v
381 do j=1, nnode_h1d
382 do i=1, nnode_h1d
383 fz(i,j,k) = 0.5_rp * sum( dzt1d(:,k) * (a(i,j,k) + a(i,j,:)) * (b(i,j,k) + b(i,j,:)) )
384 end do
385 end do
386 end do
387
388 return
389 end subroutine dz_ab
390
391 subroutine dx_abc(DxT1D, a, b, c, Nnode_h1D, Nnode_v, fx)
392 integer, intent(in) :: nnode_h1d, nnode_v
393 real(rp), intent(in) :: dxt1d(nnode_h1d,nnode_h1d)
394 real(rp), intent(in) :: a(nnode_h1d,nnode_h1d,nnode_v)
395 real(rp), intent(in) :: b(nnode_h1d,nnode_h1d,nnode_v)
396 real(rp), intent(in) :: c(nnode_h1d,nnode_h1d,nnode_v)
397 real(rp), intent(out) :: fx(nnode_h1d,nnode_h1d,nnode_v)
398
399 integer :: i, j, k, p
400 integer :: i2, j2, k2, p2
401 !-------------------------------------------------
402
403 do k=1, nnode_v
404 do j=1, nnode_h1d
405 do i=1, nnode_h1d
406 fx(i,j,k) = 0.25_rp * sum( dxt1d(:,i) * (a(i,j,k) + a(:,j,k)) * (b(i,j,k) + b(:,j,k)) * (c(i,j,k) + c(:,j,k)) )
407 end do
408 end do
409 end do
410
411 return
412 end subroutine dx_abc
413
414 subroutine dy_abc(DyT1D, a, b, c, Nnode_h1D, Nnode_v, fy)
415 integer, intent(in) :: nnode_h1d, nnode_v
416 real(rp), intent(in) :: dyt1d(nnode_h1d,nnode_h1d)
417 real(rp), intent(in) :: a(nnode_h1d,nnode_h1d,nnode_v)
418 real(rp), intent(in) :: b(nnode_h1d,nnode_h1d,nnode_v)
419 real(rp), intent(in) :: c(nnode_h1d,nnode_h1d,nnode_v)
420 real(rp), intent(out) :: fy(nnode_h1d,nnode_h1d,nnode_v)
421
422 integer :: i, j, k, p
423 integer :: i2, j2, k2, p2
424 !-------------------------------------------------
425
426 do k=1, nnode_v
427 do j=1, nnode_h1d
428 do i=1, nnode_h1d
429 fy(i,j,k) = 0.25_rp * sum( dyt1d(:,j) * (a(i,j,k) + a(i,:,k)) * (b(i,j,k) + b(i,:,k)) * (c(i,j,k) + c(i,:,k)) )
430 end do
431 end do
432 end do
433
434 return
435 end subroutine dy_abc
436
437 subroutine dz_abc(DzT1D, a, b, c, Nnode_h1D, Nnode_v, fz)
438 integer, intent(in) :: nnode_h1d, nnode_v
439 real(rp), intent(in) :: dzt1d(nnode_v,nnode_v)
440 real(rp), intent(in) :: a(nnode_h1d,nnode_h1d,nnode_v)
441 real(rp), intent(in) :: b(nnode_h1d,nnode_h1d,nnode_v)
442 real(rp), intent(in) :: c(nnode_h1d,nnode_h1d,nnode_v)
443 real(rp), intent(out) :: fz(nnode_h1d,nnode_h1d,nnode_v)
444
445 integer :: i, j, k, p
446 integer :: i2, j2, k2, p2
447 !-------------------------------------------------
448
449 do k=1, nnode_v
450 do j=1, nnode_h1d
451 do i=1, nnode_h1d
452 fz(i,j,k) = 0.25_rp * sum( dzt1d(:,k) * (a(i,j,k) + a(i,j,:)) * (b(i,j,k) + b(i,j,:)) * (c(i,j,k) + c(i,j,:)) )
453 end do
454 end do
455 end do
456
457 return
458 end subroutine dz_abc
459
module FElib / Fluid dyn solver / Atmosphere / Nonhydrostatic model / Common
subroutine, public atm_dyn_dgm_nonhydro3d_common_init(mesh)
Initialize a common module for atmospheric nonhydrostatic dynamical core.
real(rp), dimension(:,:), allocatable, public intrpmat_vpordm1
subroutine, public atm_dyn_dgm_nonhydro3d_common_final()
Finalize a common module for atmospheric nonhydrostatic dynamical core.
module FElib / Fluid dyn solver / Atmosphere / Nonhydrostatic model / HEVE / Numflux
subroutine, public atm_dyn_dgm_nonhydro3d_rhot_heve_numflux_get_generalvc_asis(del_flux, del_flux_hyd, ddens_, momx_, momy_, momz_, drhot_, dpres_, dens_hyd, pres_hyd, rtot, cvtot, cptot, gsqrt, g13, g23, nx, ny, nz, vmapm, vmapp, lmesh, elem, lmesh2d, elem2d)
subroutine, public atm_dyn_dgm_nonhydro3d_rhot_heve_splitform_cal_tend(dens_dt, momx_dt, momy_dt, momz_dt, rhot_dt, ddens_, momx_, momy_, momz_, drhot_, dpres_, dens_hyd, pres_hyd, pres_hyd_ref, therm_hyd, coriolis, rtot, cvtot, cptot, dphyddx, dphyddy, element3d_operation, dx, dy, dz, sx, sy, sz, lift, lmesh, elem, lmesh2d, elem2d)
module FElib / Element / Base
module FElib / Element / hexahedron
module FElib / Element/ ModalFilter
module FElib / Element / Operation / Base
module FElib / Mesh / Local 2D
module FElib / Mesh / Local 3D
module FElib / Mesh / Base 3D
module FElib / Data / base
Module common / sparsemat.
Derived type representing a 2D reference element.
Derived type representing a 3D reference element.
Derived type representing a hexahedral element.
Derived type representing a modal filter.
Derived type representing a local mesh for 2D domain.
Derived type to manage a local 3D computational domain.
Derived type representing a field with 3D local mesh.
Derived type to manage a computational mesh (base type for 3D domain)
Derived type representing a field with 3D mesh.
Derived type to manage a sparse matrix.