FE-Project
Loading...
Searching...
No Matches
mod_atmos_dyn.F90
Go to the documentation of this file.
1!-------------------------------------------------------------------------------
10!-------------------------------------------------------------------------------
11#include "scaleFElib.h"
13 !-----------------------------------------------------------------------------
14 !
15 !++ used modules
16 !
17 use scale_precision
18 use scale_prc
19 use scale_io
20 use scale_prof
21 use scale_const, only: &
22 undef8 => const_undef8
23
24 use scale_sparsemat, only: sparsemat
26
27 use scale_mesh_base, only: meshbase
30
34 use scale_element_base, only: &
36
38 use scale_localmeshfield_base, only: &
40
41 use scale_model_mesh_manager, only: modelmeshbase
44
47
49
50 use mod_atmos_mesh, only: atmosmesh
51 use mod_atmos_vars, only: &
56 use mod_atmos_dyn_vars, only: &
59
60 !-----------------------------------------------------------------------------
61 implicit none
62 private
63 !-----------------------------------------------------------------------------
64 !
65 !++ Public type & procedure
66 !
67
70 type, extends(modelcomponentproc), public :: atmosdyn
71 type(atmdyndgmdriver_nonhydro3d) :: dyncore_driver
72 type(atmdyndgmdriver_trcadv3d) :: trcadv_driver
73
74 type(atmosdynvars) :: dyn_vars
75
76 ! explicit numerical diffusion
77 logical :: calc_numdiff_flag
79
80 contains
81 procedure, public :: setup => atmosdyn_setup
82 procedure, public :: calc_tendency => atmosdyn_calc_tendency
83 procedure, public :: update => atmosdyn_update
84 procedure, public :: finalize => atmosdyn_finalize
85 end type atmosdyn
86
87 !-----------------------------------------------------------------------------
88 !++ Public parameters & variables
89 !-----------------------------------------------------------------------------
90
91 !-----------------------------------------------------------------------------
92 !
93 !++ Private procedure
94 !
95 private :: setup_coriolis_parameter
96
97 !-----------------------------------------------------------------------------
98 !
99 !++ Private parameters & variables
100 !
101 !-----------------------------------------------------------------------------
102
103contains
104
110!OCL SERIAL
111 subroutine atmosdyn_setup( this, model_mesh, tm_parent_comp )
112 use mod_atmos_mesh, only: atmosmesh
114
115 implicit none
116
117 class(atmosdyn), intent(inout) :: this
118 class(modelmeshbase), target, intent(in) :: model_mesh
119 class(time_manager_component), intent(inout) :: tm_parent_comp
120
121 character(len=H_MID) :: EQS_TYPE = "NONHYDRO3D_HEVE"
122 character(len=H_SHORT) :: TINTEG_TYPE = 'ERK_SSP_3s3o'
123 character(len=H_SHORT) :: TINTEG_TYPE_TRACER = 'ERK_SSP_3s3o'
124 real(DP) :: TIME_DT = undef8
125 character(len=H_SHORT) :: TIME_DT_UNIT = 'SEC'
126
127 logical :: MODALFILTER_FLAG = .false.
128 logical :: NUMDIFF_FLAG = .false.
129 logical :: SPONGELAYER_FLAG = .false.
130 logical :: ONLY_TRACERADV_FLAG = .false.
131 logical :: TRACERADV_DISABLE_LIMITER = .false.
132 logical :: TRACERADV_MODALFILTER_FLAG = .false.
133 logical :: HIDE_MPI_COMM_FLAG = .false.
134
135 namelist / param_atmos_dyn / &
136 eqs_type, &
137 tinteg_type, &
138 tinteg_type_tracer, &
139 time_dt, &
140 time_dt_unit, &
141 modalfilter_flag, &
142 numdiff_flag, &
143 spongelayer_flag, &
144 only_traceradv_flag, &
145 traceradv_disable_limiter, &
146 traceradv_modalfilter_flag, &
147 hide_mpi_comm_flag
148
149 class(atmosmesh), pointer :: atm_mesh
150 class(meshbase), pointer :: ptr_mesh
151 class(localmeshbase), pointer :: ptr_lcmesh
152 class(elementbase3d), pointer :: elem3D
153 integer :: n
154 real(DP) :: dtsec
155
156 class(meshbase3d), pointer :: mesh3D
157
158 integer :: ierr
159 !--------------------------------------------------
160
161 if (.not. this%IsActivated()) return
162 log_info('AtmosDyn_setup',*)
163
164 !--- read namelist
165 rewind(io_fid_conf)
166 read(io_fid_conf,nml=param_atmos_dyn,iostat=ierr)
167 if( ierr < 0 ) then !--- missing
168 log_info("ATMOS_DYN_setup",*) 'Not found namelist. Default used.'
169 elseif( ierr > 0 ) then !--- fatal error
170 log_error("ATMOS_DYN_setup",*) 'Not appropriate names in namelist PARAM_ATMOS_DYN. Check!'
171 call prc_abort
172 endif
173 log_nml(param_atmos_dyn)
174
175 !- get mesh --------------------------------------------------
176
177 call model_mesh%GetModelMesh( ptr_mesh )
178 select type(model_mesh)
179 class is (atmosmesh)
180 atm_mesh => model_mesh
181 end select
182 mesh3d => atm_mesh%ptr_mesh
183
184 !- Setup the temporal integrator
185
186 call tm_parent_comp%Regist_process( 'ATMOS_DYN', time_dt, time_dt_unit, & ! (in)
187 this%tm_process_id ) ! (out)
188
189 dtsec = tm_parent_comp%process_list(this%tm_process_id)%dtsec
190
191 !- initialize the variables
192 call this%dyn_vars%Init( model_mesh )
193
194 call setup_coriolis_parameter( this%dyn_vars, atm_mesh )
195
196 !- Initialize a module for 3D dynamical core
197 call this%dyncore_driver%Init( eqs_type, &
198 tinteg_type, dtsec, &
199 spongelayer_flag, modalfilter_flag, &
200 hide_mpi_comm_flag, &
201 atm_mesh )
202
203 !- Initialize a module for tracer equations
204 call this%trcadv_driver%Init( "TRCADV3D_HEVE", &
205 tinteg_type_tracer, dtsec, &
206 traceradv_modalfilter_flag, traceradv_disable_limiter, &
207 atm_mesh, this%dyncore_driver%boundary_cond, only_traceradv_flag )
208
209 !- Setup the numerical diffusion
210 this%CALC_NUMDIFF_FLAG = numdiff_flag
211 if (this%CALC_NUMDIFF_FLAG) call this%numdiff%Init( atm_mesh, dtsec )
212
213 return
214 end subroutine atmosdyn_setup
215
216
228!OCL SERIAL
229 subroutine atmosdyn_calc_tendency( this, model_mesh, prgvars_list, trcvars_list, auxvars_list, forcing_list, is_update )
230 implicit none
231
232 class(atmosdyn), intent(inout) :: this
233 class(modelmeshbase), intent(in) :: model_mesh
234 class(modelvarmanager), intent(inout) :: prgvars_list
235 class(modelvarmanager), intent(inout) :: trcvars_list
236 class(modelvarmanager), intent(inout) :: auxvars_list
237 class(modelvarmanager), intent(inout) :: forcing_list
238 logical, intent(in) :: is_update
239 !--------------------------------------------------
240 if (.not. this%IsActivated()) return
241 !LOG_INFO('AtmosDyn_tendency',*)
242
243 return
244 end subroutine atmosdyn_calc_tendency
245
246
256!OCL SERIAL
257 subroutine atmosdyn_update( this, model_mesh, prgvars_list, trcvars_list, auxvars_list, forcing_list, is_update )
258 use scale_tracer, only: &
259 qa
260 use scale_const, only: &
261 grav => const_grav, &
262 rdry => const_rdry, &
263 cpdry => const_cpdry, &
264 cvdry => const_cvdry, &
265 pres00 => const_pre00
266
267 use scale_meshfield_base, only: &
270 prgvar_num, &
273 trcddens_id => trcvars3d_dens_id, trcddens0_id => trcvars3d_dens0_id, &
274 massflx_z_tavg => massflx_z_id, massflx_x_tavg => massflx_x_id, massflx_y_tavg => massflx_y_id
275
276 use mod_atmos_dyn_vars, only: &
278
279 implicit none
280
281 class(atmosdyn), intent(inout) :: this
282 class(modelmeshbase), intent(in) :: model_mesh
283 class(modelvarmanager), intent(inout) :: prgvars_list
284 class(modelvarmanager), intent(inout) :: trcvars_list
285 class(modelvarmanager), intent(inout) :: auxvars_list
286 class(modelvarmanager), intent(inout) :: forcing_list
287 logical, intent(in) :: is_update
288
289 class(meshbase), pointer :: mesh
290 class(meshbase3d), pointer :: mesh3D
291 !--------------------------------------------------
292
293 call prof_rapstart( 'ATM_DYN_update', 1)
294
295 call model_mesh%GetModelMesh( mesh )
296 select type(mesh)
297 class is (meshbase3d)
298 mesh3d => mesh
299 end select
300
301 if ( .not. this%trcadv_driver%ONLY_TRACERADV_FLAG ) then
302
303 call prof_rapstart( 'ATM_DYN_core', 2)
304
305 call this%dyncore_driver%Update( &
306 prgvars_list, auxvars_list, forcing_list, & ! (inout)
307 this%trcadv_driver%TRCVARS3D(trcddens_id), & ! (inout)
308 this%trcadv_driver%TRCVARS3D(trcddens0_id), & ! (inout)
309 this%trcadv_driver%AUXTRC_FLUX_VARS3D(massflx_x_tavg), & ! (inout)
310 this%trcadv_driver%AUXTRC_FLUX_VARS3D(massflx_y_tavg), & ! (inout)
311 this%trcadv_driver%AUXTRC_FLUX_VARS3D(massflx_z_tavg), & ! (inout)
312 this%trcadv_driver%alphaDensM, this%trcadv_driver%alphaDensP, & ! (inout)
313 this%dyn_vars%AUX_VARS2D(atmos_dyn_auxvars2d_coriolis_id), & ! (in)
314 model_mesh%element3D_operation, & ! (in)
315 model_mesh%DOptrMat(1), model_mesh%DOptrMat(2), model_mesh%DOptrMat(3), & ! (in)
316 model_mesh%SOptrMat(1), model_mesh%SOptrMat(2), model_mesh%SOptrMat(3), & ! (in)
317 model_mesh%LiftOptrMat, mesh3d ) ! (in)
318
319 call prof_rapend( 'ATM_DYN_core', 2)
320
321 end if
322
323 !-- Tracer advection (prepair) ------------------------------------------------
324
325 if ( qa > 0 ) then
326 call prof_rapstart( 'ATM_DYN_qtracer', 2)
327
328 call this%trcadv_driver%Update( &
329 trcvars_list, prgvars_list, auxvars_list, forcing_list, & ! (inout)
330 model_mesh%element3D_operation, & ! (in)
331 model_mesh%DOptrMat(1), model_mesh%DOptrMat(2), model_mesh%DOptrMat(3), & ! (in)
332 model_mesh%SOptrMat(1), model_mesh%SOptrMat(2), model_mesh%SOptrMat(3), & ! (in)
333 model_mesh%LiftOptrMat, mesh3d, & ! (in)
334 this%dyncore_driver ) ! (in)
335
336 call prof_rapend( 'ATM_DYN_qtracer', 2)
337 end if
338
339 !-- numerical diffusion for dynamical variables -----------------------------
340
341 if ( this%CALC_NUMDIFF_FLAG ) then
342 call prof_rapstart( 'ATM_DYN_numfilter', 2)
343 call this%numdiff%Apply( prgvars_list, &
344 auxvars_list, this%dyncore_driver%boundary_cond, &
345 model_mesh%DOptrMat(1), model_mesh%DOptrMat(2), model_mesh%DOptrMat(3), & ! (in)
346 model_mesh%LiftOptrMat, mesh3d ) ! (in)
347 call prof_rapend( 'ATM_DYN_numfilter', 2)
348 end if
349
350 !---------------------------
351 call prof_rapend( 'ATM_DYN_update', 1)
352
353 return
354 end subroutine atmosdyn_update
355
358!OCL SERIAL
359 subroutine atmosdyn_finalize( this )
360 implicit none
361 class(atmosdyn), intent(inout) :: this
362
363 integer :: n
364 !--------------------------------------------------
365 if (.not. this%IsActivated()) return
366 log_info('AtmosDyn_finalize',*)
367
368 call this%dyncore_driver%Final()
369 call this%trcadv_driver%Final()
370
371 if (this%CALC_NUMDIFF_FLAG) call this%numdiff%Final()
372
373 call this%dyn_vars%Final()
374
375 return
376 end subroutine atmosdyn_finalize
377
378 !--- private ---------------
379
380!OCL SERIAL
381 subroutine setup_coriolis_parameter( this, atm_mesh )
382
385 implicit none
386
387 class(atmosdynvars), target, intent(inout) :: this
388 class(atmosmesh), target, intent(in) :: atm_mesh
389
390 class(localmeshfieldbase), pointer :: coriolis
391 class(localmesh3d), pointer :: lcmesh3D
392 class(localmesh2d), pointer :: lcmesh2D
393 integer :: n
394
395 character(len=H_SHORT) :: CORIOLIS_type
396 real(RP) :: CORIOLIS_f0 = 0.0_rp
397 real(RP) :: CORIOLIS_beta = 0.0_rp
398 real(RP) :: CORIOLIS_y0
399
400 namelist /param_atmos_dyn_coriolis/ &
401 coriolis_type, &
402 coriolis_f0, coriolis_beta, coriolis_y0
403
404 class(meshbase3d), pointer :: mesh3D
405 class(meshcubedom3d), pointer :: meshCube
406 integer :: ierr
407 !---------------------------------------------------------------
408
409 mesh3d => atm_mesh%ptr_mesh
410
411 coriolis_type = 'NONE'
412
413 select type(mesh3d)
414 type is (meshcubedom3d)
415 coriolis_y0 = 0.5_rp*(mesh3d%ymax_gl + mesh3d%ymin_gl)
416 end select
417
418 rewind(io_fid_conf)
419 read(io_fid_conf,nml=param_atmos_dyn_coriolis,iostat=ierr)
420 if( ierr < 0 ) then !--- missing
421 log_info("ATMOS_DYN_setup_coriolis",*) 'Not found namelist. Default used.'
422 else if( ierr > 0 ) then !--- fatal error
423 log_error("ATMOS_DYN_setup_coriolis",*) 'Not appropriate names in namelist PARAM_ATMOS_DYN_CORIOLIS. Check!'
424 call prc_abort
425 end if
426 log_nml(param_atmos_dyn_coriolis)
427
428 do n = 1, mesh3d%LOCAL_MESH_NUM
429 call atmosdynauxvars_getlocalmeshfields( n, mesh3d, this%AUXVARS2D_manager, &
430 coriolis, lcmesh3d )
431 lcmesh2d => lcmesh3d%lcmesh2D
432
434 coriolis%val(:,lcmesh2d%NeS:lcmesh2d%NeE), & ! (out)
435 coriolis_type, lcmesh2d%refElem2D%Np * lcmesh2d%Ne, & ! (in)
436 lcmesh2d%pos_en(:,:,2), coriolis_f0, coriolis_beta, coriolis_y0, & ! (in)
437 lcmesh3d%lat2D(:,:) ) ! (in)
438 end do
439
440 return
441 end subroutine setup_coriolis_parameter
442
443!--------
444
445! subroutine cal_MOMZ_tend( &
446! MOMZ_t, MOMZ_t_advx, MOMZ_t_advY, MOMZ_t_advZ, MOMZ_t_lift, MOMZ_t_buoy, & ! (out)
447! DDENS_, MOMX_, MOMY_, MOMZ_, DRHOT_, DENS_hyd, PRES_hyd, & ! (in)
448! Dx, Dy, Dz, Sx, Sy, Sz, Lift, lmesh, elem, lmesh2D, elem2D )
449
450! use scale_element_base
451! use scale_sparsemat
452! use scale_const, only: &
453! GRAV => CONST_GRAV, &
454! Rdry => CONST_Rdry, &
455! CPdry => CONST_CPdry, &
456! CVdry => CONST_CVdry, &
457! PRES00 => CONST_PRE00
458! use scale_atm_dyn_nonhydro3d, only: IntrpMat_VPOrdM1
459! implicit none
460
461! class(LocalMesh3D), intent(in) :: lmesh
462! class(elementbase3D), intent(in) :: elem
463! class(LocalMesh2D), intent(in) :: lmesh2D
464! class(elementbase2D), intent(in) :: elem2D
465! type(SparseMat), intent(in) :: Dx, Dy, Dz, Sx, Sy, Sz, Lift
466! real(RP), intent(out) :: MOMZ_t(elem%Np,lmesh%NeA)
467! real(RP), intent(out) :: MOMZ_t_advx(elem%Np,lmesh%NeA)
468! real(RP), intent(out) :: MOMZ_t_advy(elem%Np,lmesh%NeA)
469! real(RP), intent(out) :: MOMZ_t_advz(elem%Np,lmesh%NeA)
470! real(RP), intent(out) :: MOMZ_t_lift(elem%Np,lmesh%NeA)
471! real(RP), intent(out) :: MOMZ_t_buoy(elem%Np,lmesh%NeA)
472
473! real(RP), intent(in) :: DDENS_(elem%Np,lmesh%NeA)
474! real(RP), intent(in) :: MOMX_(elem%Np,lmesh%NeA)
475! real(RP), intent(in) :: MOMY_(elem%Np,lmesh%NeA)
476! real(RP), intent(in) :: MOMZ_(elem%Np,lmesh%NeA)
477! real(RP), intent(in) :: DRHOT_(elem%Np,lmesh%NeA)
478! real(RP), intent(in) :: DENS_hyd(elem%Np,lmesh%NeA)
479! real(RP), intent(in) :: PRES_hyd(elem%Np,lmesh%NeA)
480
481! real(RP) :: Fx(elem%Np), Fy(elem%Np), Fz(elem%Np), LiftDelFlx(elem%Np)
482! real(RP) :: del_flux(elem%NfpTot,lmesh%Ne)
483! real(RP) :: dens_(elem%Np), RHOT_(elem%Np), dpres_(elem%Np)
484! real(RP) :: pres_(elem%Np), u_(elem%Np), v_(elem%Np), w_(elem%Np)
485
486! integer :: ke
487! !------------------------------------------------------------------------
488
489! call cal_del_flux_dyn( del_flux, & ! (out)
490! DDENS_, MOMX_, MOMY_, MOMZ_, DRHOT_, DENS_hyd, PRES_hyd, & ! (in)
491! lmesh%normal_fn(:,:,1), lmesh%normal_fn(:,:,2), lmesh%normal_fn(:,:,3), & ! (in)
492! lmesh%vmapM, lmesh%vmapP, & ! (in)
493! lmesh, elem ) ! (in)
494
495! !-----
496! !$omp parallel do private(RHOT_,pres_,dpres_,dens_,u_,v_,w_,Fx,Fy,Fz,LiftDelFlx)
497! do ke = lmesh%NeS, lmesh%NeE
498! !--
499
500! RHOT_(:) = PRES00/Rdry * (PRES_hyd(:,ke)/PRES00)**(CVdry/CPdry) + DRHOT_(:,ke)
501! pres_(:) = PRES00 * (Rdry*RHOT_(:)/PRES00)**(CPdry/Cvdry)
502! dpres_(:) = pres_(:) - PRES_hyd(:,ke)
503! dens_(:) = DDENS_(:,ke) + DENS_hyd(:,ke)
504
505! u_(:) = MOMX_(:,ke)/dens_(:)
506! v_(:) = MOMY_(:,ke)/dens_(:)
507! w_(:) = MOMZ_(:,ke)/dens_(:)
508
509! !-- MOMZ
510! call sparsemat_matmul(Dx, u_(:)*MOMZ_(:,ke), Fx)
511! call sparsemat_matmul(Dy, v_(:)*MOMZ_(:,ke), Fy)
512! call sparsemat_matmul(Dz, w_(:)*MOMZ_(:,ke), Fz)
513! MOMZ_t_advx(:,ke) = - lmesh%Escale(:,ke,1,1) * Fx(:)
514! MOMZ_t_advy(:,ke) = - lmesh%Escale(:,ke,2,2) * Fy(:)
515! MOMZ_t_advz(:,ke) = - lmesh%Escale(:,ke,3,3) * Fz(:)
516
517! call sparsemat_matmul(Dz, dpres_(:), Fz)
518! MOMZ_t_buoy(:,ke) = - lmesh%Escale(:,ke,3,3) * Fz(:) &
519! - matmul(IntrpMat_VPOrdM1, DDENS_(:,ke)) * Grav
520
521! call sparsemat_matmul(Lift, lmesh%Fscale(:,ke)*del_flux(:,ke), LiftDelFlx)
522! MOMZ_t_lift(:,ke) = - LiftDelFlx(:)
523
524! MOMZ_t(:,ke) = MOMZ_t_advx(:,ke) + MOMZ_t_advy(:,ke) + MOMZ_t_advz(:,ke) &
525! + MOMZ_t_lift(:,ke) + MOMZ_t_buoy(:,ke)
526! end do
527
528! return
529! end subroutine cal_MOMZ_tend
530
531
532! subroutine cal_del_flux_dyn( del_flux, &
533! DDENS_, MOMX_, MOMY_, MOMZ_, DRHOT_, DENS_hyd, PRES_hyd, &
534! nx, ny, nz, vmapM, vmapP, lmesh, elem )
535
536! use scale_const, only: &
537! GRAV => CONST_GRAV, &
538! Rdry => CONST_Rdry, &
539! CPdry => CONST_CPdry, &
540! CVdry => CONST_CVdry, &
541! PRES00 => CONST_PRE00
542
543! implicit none
544
545! class(LocalMesh3D), intent(in) :: lmesh
546! class(elementbase3D), intent(in) :: elem
547! real(RP), intent(out) :: del_flux(elem%NfpTot*lmesh%Ne)
548! real(RP), intent(in) :: DDENS_(elem%Np*lmesh%NeA)
549! real(RP), intent(in) :: MOMX_(elem%Np*lmesh%NeA)
550! real(RP), intent(in) :: MOMY_(elem%Np*lmesh%NeA)
551! real(RP), intent(in) :: MOMZ_(elem%Np*lmesh%NeA)
552! real(RP), intent(in) :: DRHOT_(elem%Np*lmesh%NeA)
553! real(RP), intent(in) :: DENS_hyd(elem%Np*lmesh%NeA)
554! real(RP), intent(in) :: PRES_hyd(elem%Np*lmesh%NeA)
555! real(RP), intent(in) :: nx(elem%NfpTot*lmesh%Ne)
556! real(RP), intent(in) :: ny(elem%NfpTot*lmesh%Ne)
557! real(RP), intent(in) :: nz(elem%NfpTot*lmesh%Ne)
558! integer, intent(in) :: vmapM(elem%NfpTot*lmesh%Ne)
559! integer, intent(in) :: vmapP(elem%NfpTot*lmesh%Ne)
560
561! integer :: i, iP, iM
562! real(RP) :: VelP, VelM, alpha
563! real(RP) :: uM, uP, vM, vP, wM, wP, presM, presP, dpresM, dpresP, densM, densP, rhotM, rhotP, rhot_hyd_M, rhot_hyd_P
564! real(RP) :: gamm, rgamm
565! !------------------------------------------------------------------------
566
567! gamm = CpDry/CvDry
568! rgamm = CvDry/CpDry
569
570! !$omp parallel do private( &
571! !$omp iM, iP, uM, VelP, VelM, alpha, &
572! !$omp uP, vM, vP, wM, wP, presM, presP, dpresM, dpresP, densM, densP, rhotM, rhotP, rhot_hyd_M, rhot_hyd_P)
573! do i=1, elem%NfpTot*lmesh%Ne
574! iM = vmapM(i); iP = vmapP(i)
575
576! rhot_hyd_M = PRES00/Rdry * (PRES_hyd(iM)/PRES00)**rgamm
577! rhot_hyd_P = PRES00/Rdry * (PRES_hyd(iP)/PRES00)**rgamm
578
579! rhotM = rhot_hyd_M + DRHOT_(iM)
580! presM = PRES00 * (Rdry*rhotM/PRES00)**gamm
581! dpresM = presM - PRES_hyd(iM)*abs(nz(i))
582
583! rhotP = rhot_hyd_P + DRHOT_(iP)
584! presP = PRES00 * (Rdry*rhotP/PRES00)**gamm
585! dpresP = presP - PRES_hyd(iP)*abs(nz(i))
586
587! densM = DDENS_(iM) + DENS_hyd(iM)
588! densP = DDENS_(iP) + DENS_hyd(iP)
589
590! VelM = (MOMX_(iM)*nx(i) + MOMY_(iM)*ny(i) + MOMZ_(iM)*nz(i))/densM
591! VelP = (MOMX_(iP)*nx(i) + MOMY_(iP)*ny(i) + MOMZ_(iP)*nz(i))/densP
592
593! alpha = max( sqrt(gamm*presM/densM) + abs(VelM), sqrt(gamm*presP/densP) + abs(VelP) )
594
595
596! del_flux(i) = 0.5_RP*( &
597! ( MOMZ_(iP)*VelP - MOMZ_(iM)*VelM) &
598! + ( dpresP - dpresM )*nz(i) &
599! - alpha*(MOMZ_(iP) - MOMZ_(iM)) )
600! end do
601
602! return
603! end subroutine cal_del_flux_dyn
604
605end module mod_atmos_dyn
module ATMOSPHERE dynamics
integer, parameter, public atmos_dyn_auxvars2d_coriolis_id
subroutine, public atmosdynauxvars_getlocalmeshfields(domid, mesh, auxvars_list, coriolis, lcmesh3d)
module ATMOSPHERE dynamics
subroutine atmosdyn_setup(this, model_mesh, tm_parent_comp)
Setup a component of atmospheric dynamics.
module Atmosphere / Mesh
module ATMOSPHERE / Variables
subroutine, public atmosvars_getlocalmeshprgvar(domid, mesh, prgvars_list, auxvars_list, varid, var, dens_hyd, pres_hyd, lcmesh3d)
subroutine, public atmosvars_getlocalmeshprgvars(domid, mesh, prgvars_list, auxvars_list, ddens, momx, momy, momz, therm, dens_hyd, pres_hyd, rtot, cvtot, cptot, lcmesh3d)
subroutine, public atmosvars_getlocalmeshqtrcphytend(domid, mesh, phytends_list, qtrcid, rhoq_tp)
subroutine, public atmosvars_getlocalmeshqtrcvar(domid, mesh, trcvars_list, varid, var, lcmesh3d)
module FElib / Fluid dyn solver / Atmosphere / driver (3D nonhydrostatic model)
module FElib / Fluid dyn solver / Atmosphere / DGM driver (tracer advection)
module FElib / Fluid dyn solver / Atmosphere / Nonhydrostatic model / Common
module common / Coriolis parameter
subroutine, public get_coriolis_parameter(coriolis, colioris_type, np, y, f0, beta, y0, lat)
module FElib / Element / Base
module FElib / Mesh / Local 2D
module FElib / Mesh / Local 3D
module FElib / Mesh / Local, Base
module FElib / Mesh / Base 2D
module FElib / Mesh / Base 3D
module FElib / Mesh / Base
module FElib / Mesh / Cubic 3D domain
module FElib / Data / base
FElib / model framework / physics process.
FElib / model framework / mesh manager.
FElib / model framework / variable manager.
module common / sparsemat
module common / time
module common / Runge-Kutta scheme
Derived type to manage a component of atmospheric dynamics.
Derived type to provide a driver of dynamical core with the atmospheric nonhydrostatic equations.