10#include "scaleFElib.h"
20 use scale_const,
only: &
23 cpdry => const_cpdry, &
24 cvdry => const_cvdry, &
170 subroutine atm_dyn_nonhydro3d_cal_tend_ex( &
171 DENS_dt, MOMX_dt, MOMY_dt, MOMZ_dt, RHOT_dt, & ! (out)
172 ddens_, momx_, momy_, momz_, therm_, dpres_, &
173 dens_hyd, pres_hyd, pres_hyd_ref, therm_hyd, coriolis, &
174 rtot, cvtot, cptot, &
176 element3d_operation, dx, dy, dz, sx, sy, sz, lift, &
177 lmesh, elem, lmesh2d, elem2d )
188 class(LocalMesh3D),
intent(in) :: lmesh
189 class(ElementBase3D),
intent(in) :: elem
190 class(LocalMesh2D),
intent(in) :: lmesh2D
191 class(ElementBase2D),
intent(in) :: elem2D
192 class(ElementOperationBase3D),
intent(in) :: element3D_operation
193 type(SparseMat),
intent(in) :: Dx, Dy, Dz, Sx, Sy, Sz, Lift
194 real(RP),
intent(out) :: DENS_dt(elem%Np,lmesh%NeA)
195 real(RP),
intent(out) :: MOMX_dt(elem%Np,lmesh%NeA)
196 real(RP),
intent(out) :: MOMY_dt(elem%Np,lmesh%NeA)
197 real(RP),
intent(out) :: MOMZ_dt(elem%Np,lmesh%NeA)
198 real(RP),
intent(out) :: RHOT_dt(elem%Np,lmesh%NeA)
199 real(RP),
intent(in) :: DDENS_(elem%Np,lmesh%NeA)
200 real(RP),
intent(in) :: MOMX_(elem%Np,lmesh%NeA)
201 real(RP),
intent(in) :: MOMY_(elem%Np,lmesh%NeA)
202 real(RP),
intent(in) :: MOMZ_(elem%Np,lmesh%NeA)
203 real(RP),
intent(in) :: THERM_(elem%Np,lmesh%NeA)
204 real(RP),
intent(in) :: DPRES_(elem%Np,lmesh%NeA)
205 real(RP),
intent(in) :: DENS_hyd(elem%Np,lmesh%NeA)
206 real(RP),
intent(in) :: PRES_hyd(elem%Np,lmesh%NeA)
207 real(RP),
intent(in) :: PRES_hyd_ref(elem%Np,lmesh%NeA)
208 real(RP),
intent(in) :: THERM_hyd(elem%Np,lmesh%NeA)
209 real(RP),
intent(in) :: CORIOLIS(elem2D%Np,lmesh2D%NeA)
210 real(RP),
intent(in) :: Rtot(elem%Np,lmesh%NeA)
211 real(RP),
intent(in) :: CVtot(elem%Np,lmesh%NeA)
212 real(RP),
intent(in) :: CPtot(elem%Np,lmesh%NeA)
213 real(RP),
intent(in) :: DPhydDx(elem%Np,lmesh%NeA)
214 real(RP),
intent(in) :: DPhydDy(elem%Np,lmesh%NeA)
215 end subroutine atm_dyn_nonhydro3d_cal_tend_ex
219 subroutine atm_dyn_nonhydro3d_cal_vi( &
220 DENS_dt, MOMX_dt, MOMY_dt, MOMZ_dt, RHOT_dt, & ! (out)
221 ddens_, momx_, momy_, momz_, therm_, dens_hyd, pres_hyd, &
222 ddens0_, momx0_, momy0_, momz0_, therm0_, &
223 rtot, cvtot, cptot, &
224 element3d_operation, dz, lift, &
226 lmesh, elem, lmesh2d, elem2d )
238 class(LocalMesh3D),
intent(in) :: lmesh
239 class(ElementBase3D),
intent(in) :: elem
240 class(LocalMesh2D),
intent(in) :: lmesh2D
241 class(ElementBase2D),
intent(in) :: elem2D
242 real(RP),
intent(out) :: DENS_dt(elem%Np,lmesh%NeA)
243 real(RP),
intent(out) :: MOMX_dt(elem%Np,lmesh%NeA)
244 real(RP),
intent(out) :: MOMY_dt(elem%Np,lmesh%NeA)
245 real(RP),
intent(out) :: MOMZ_dt(elem%Np,lmesh%NeA)
246 real(RP),
intent(out) :: RHOT_dt(elem%Np,lmesh%NeA)
247 real(RP),
intent(in) :: DDENS_(elem%Np,lmesh%NeA)
248 real(RP),
intent(in) :: MOMX_(elem%Np,lmesh%NeA)
249 real(RP),
intent(in) :: MOMY_(elem%Np,lmesh%NeA)
250 real(RP),
intent(in) :: MOMZ_(elem%Np,lmesh%NeA)
251 real(RP),
intent(in) :: THERM_(elem%Np,lmesh%NeA)
252 real(RP),
intent(in) :: DENS_hyd(elem%Np,lmesh%NeA)
253 real(RP),
intent(in) :: PRES_hyd(elem%Np,lmesh%NeA)
254 real(RP),
intent(in) :: DDENS0_(elem%Np,lmesh%NeA)
255 real(RP),
intent(in) :: MOMX0_(elem%Np,lmesh%NeA)
256 real(RP),
intent(in) :: MOMY0_(elem%Np,lmesh%NeA)
257 real(RP),
intent(in) :: MOMZ0_(elem%Np,lmesh%NeA)
258 real(RP),
intent(in) :: THERM0_(elem%Np,lmesh%NeA)
259 real(RP),
intent(in) :: Rtot(elem%Np,lmesh%NeA)
260 real(RP),
intent(in) :: CVtot(elem%Np,lmesh%NeA)
261 real(RP),
intent(in) :: CPtot(elem%Np,lmesh%NeA)
262 class(ElementOperationBase3D),
intent(in) :: element3D_operation
263 class(SparseMat),
intent(in) :: Dz, Lift
264 real(RP),
intent(in) :: impl_fac
265 real(RP),
intent(in) :: dt
266 end subroutine atm_dyn_nonhydro3d_cal_vi
270 subroutine atm_dyn_nonhydro3d_final()
271 end subroutine atm_dyn_nonhydro3d_final
276 integer :: eqs_typeid
277 logical :: entot_conserve_scheme_flag
280 logical :: modalfilter_flag
289 logical :: spongelayer_flag
294 integer :: auxdynvar3d_commid
301 logical :: hevi_use_lapack_flag
304 logical :: hide_mpi_comm_flag
306 procedure(atm_dyn_nonhydro3d_cal_vi),
pointer,
nopass :: cal_vi => null()
307 procedure(atm_dyn_nonhydro3d_cal_tend_ex),
pointer,
nopass :: cal_tend_ex => null()
308 procedure(atm_dyn_nonhydro3d_final),
pointer,
nopass :: dynsolver_final => null()
310 procedure :: init => atmdyndgmdriver_nonhydro3d_init
311 procedure :: final => atmdyndgmdriver_nonhydro3d_final
312 procedure :: update => atmdyndgmdriver_nonhydro3d_update
313 procedure :: is_thermvar_rhot => atmdyndgmdriver_nonhydro3d_is_thermvar_rhot
314 procedure :: calc_pressure => atmdyndgmdriver_nonhydro3d_calc_pressure
315 procedure :: update_therm_hyd => atmdyndgmdriver_nonhydro3d_update_thermhyd
316 procedure :: update_phyd_hgrad => atmdyndgmdriver_nonhydro3d_update_phyd_hgrad
348 '1', 3,
'XYZ',
'' ), &
350 '1', 3,
'XYZ',
'' ), &
352 '1', 3,
'XYZ',
'' ) /
360 private :: add_phy_tend
361 private :: add_phy_tend_new
362 private :: setup_modalfilter
374 subroutine atmdyndgmdriver_nonhydro3d_init( this, &
375 eqs_type_name, tint_type_name, dtsec, &
376 sponge_layer_flag, modal_filter_flag, &
377 hide_mpi_comm_flag, &
384 character(len=*),
intent(in) :: eqs_type_name
385 character(len=*),
intent(in) :: tint_type_name
386 real(dp),
intent(in) :: dtsec
387 logical,
intent(in) :: sponge_layer_flag
388 logical,
intent(in) :: modal_filter_flag
389 logical,
intent(in) :: hide_mpi_comm_flag
390 class(
modelmesh3d),
intent(inout),
target :: model_mesh3d
402 mesh3d => model_mesh3d%ptr_mesh
403 select type( mesh3d )
410 tint_type_name, dtsec, &
413 this%ENTOT_CONSERVE_SCHEME_FLAG = .false.
414 this%hevi_flag = .false.
415 this%hide_mpi_comm_flag = hide_mpi_comm_flag
417 select case(eqs_type_name)
423 this%cal_vi => null()
426 case(
"NONHYDRO3D_HEVE_ASIS",
"NONHYDRO3D_RHOT_HEVE_ASIS")
430 this%cal_vi => null()
432 case(
"NONHYDRO3D_HEVE",
"NONHYDRO3D_RHOT_HEVE")
436 this%cal_vi => null()
438 case(
"NONHYDRO3D_HEVE_GPU")
442 this%cal_vi => null()
444 case(
"NONHYDRO3D_HEVE_GPU2")
448 this%cal_vi => null()
450 case(
"NONHYDRO3D_HEVE_CCO")
454 this%cal_vi => null()
456 case(
"NONHYDRO3D_ETOT_HEVE")
460 this%cal_vi => null()
462 this%ENTOT_CONSERVE_SCHEME_FLAG = .true.
463 case(
"GLOBALNONHYDRO3D_HEVE_ASIS",
"GLOBALNONHYDRO3D_RHOT_HEVE_ASIS")
466 if ( gm_mesh3d%shallow_approx )
then
471 this%cal_vi => null()
473 case(
"GLOBALNONHYDRO3D_HEVE",
"GLOBALNONHYDRO3D_RHOT_HEVE")
476 if ( gm_mesh3d%shallow_approx )
then
481 this%cal_vi => null()
483 case(
"GLOBALNONHYDRO3D_HEVE_GPU",
"GLOBALNONHYDRO3D_RHOT_HEVE_GPU")
486 if ( gm_mesh3d%shallow_approx )
then
491 this%cal_vi => null()
493 case(
"GLOBALNONHYDRO3D_ETOT_HEVE")
496 if ( .not. gm_mesh3d%shallow_approx )
then
497 log_error(
"AtmDynDGMDriver_nonhydro3d_Init",*)
'EQS Type:', eqs_type_name,
'Deep atmosphere is not supported. Check!'
501 this%cal_vi => null()
503 this%ENTOT_CONSERVE_SCHEME_FLAG = .true.
504 case(
"NONHYDRO3D_HEVE_SPLITFORM",
"NONHYDRO3D_RHOT_HEVE_SPLITFORM")
508 this%cal_vi => null()
511 case(
"NONHYDRO3D_HEVI_ASIS",
"NONHYDRO3D_RHOT_HEVI_ASIS")
517 this%hevi_flag = .true.
518 case(
"NONHYDRO3D_HEVI",
"NONHYDRO3D_RHOT_HEVI")
524 this%hevi_flag = .true.
525 case(
"NONHYDRO3D_ETOT_HEVI")
531 this%ENTOT_CONSERVE_SCHEME_FLAG = .true.
532 this%hevi_flag = .true.
533 case(
"GLOBALNONHYDRO3D_HEVI_ASIS",
"GLOBALNONHYDRO3D_RHOT_HEVI_ASIS")
536 if ( .not. gm_mesh3d%shallow_approx )
then
537 log_error(
"AtmDynDGMDriver_nonhydro3d_Init",*)
'EQS Type:', eqs_type_name,
'Deep atmosphere is not supported. Check!'
543 this%hevi_flag = .true.
544 case(
"GLOBALNONHYDRO3D_HEVI",
"GLOBALNONHYDRO3D_RHOT_HEVI")
547 if ( .not. gm_mesh3d%shallow_approx )
then
548 log_error(
"AtmDynDGMDriver_nonhydro3d_Init",*)
'EQS Type:', eqs_type_name,
'Deep atmosphere is not supported. Check!'
554 this%hevi_flag = .true.
555 case(
"GLOBALNONHYDRO3D_ETOT_HEVI")
558 if ( .not. gm_mesh3d%shallow_approx )
then
559 log_error(
"AtmDynDGMDriver_nonhydro3d_Init",*)
'EQS Type:', eqs_type_name,
'Deep atmosphere is not supported. Check!'
565 this%ENTOT_CONSERVE_SCHEME_FLAG = .true.
566 this%hevi_flag = .true.
567 case(
"NONHYDRO3D_HEVI_SPLITFORM",
"NONHYDRO3D_RHOT_HEVI_SPLITFORM")
573 this%hevi_flag = .true.
575 log_error(
"AtmDynDGMDriver_nonhydro3d_Init",*)
'Invalid EQS_TYPE in namelist PARAM_ATMOS_DYN. Check!'
581 call this%AUXDYNVAR3D_manager%Init()
585 call this%AUXDYNVAR3D_manager%Regist( &
587 this%AUX_DYNVARS3D(iv), &
588 .false., fill_zero=.true. )
592 call model_mesh3d%Create_communicator( &
594 this%AUXDYNVAR3D_manager, &
595 this%AUX_DYNVARS3D, &
596 this%AUXDYNVAR3D_commid, &
597 field_list_is=1, field_list_ie=1 )
601 call this%boundary_cond%Init()
602 call this%boundary_cond%SetBCInfo( mesh3d )
605 this%SPONGELAYER_FLAG = sponge_layer_flag
606 if (this%SPONGELAYER_FLAG)
then
607 call this%sponge_layer%Init( mesh3d, dtsec )
611 this%MODALFILTER_FLAG = modal_filter_flag
612 if (this%MODALFILTER_FLAG)
then
613 refelem => mesh3d%refElem
619 call setup_modalfilter( this, refelem3d, model_mesh3d%element3D_operation )
623 end subroutine atmdyndgmdriver_nonhydro3d_init
627 function atmdyndgmdriver_nonhydro3d_is_thermvar_rhot( this )
result(ret)
634 if ( this%ENTOT_CONSERVE_SCHEME_FLAG )
then
640 end function atmdyndgmdriver_nonhydro3d_is_thermvar_rhot
644 subroutine atmdyndgmdriver_nonhydro3d_update( this, &
645 PROG_VARS, AUX_VARS, PHYTENDS, &
646 DENS_TRC, DENS0_TRC, &
647 MFLX_x_tavg, MFLX_y_tavg, MFLX_z_tavg, &
648 ALPH_DENS_M_tavg, ALPH_DENS_P_tavg, &
651 Dx, Dy, Dz, Sx, Sy, Sz, Lift, mesh3D )
653 use scale_tracer,
only: &
654 qa, tracer_advc, tracer_name
666 class(
meshbase3d),
intent(in),
target :: mesh3d
675 type(
meshfield3d),
intent(inout) :: alph_dens_m_tavg
676 type(
meshfield3d),
intent(inout) :: alph_dens_p_tavg
679 type(
sparsemat),
intent(in) :: dx, dy, dz
680 type(
sparsemat),
intent(in) :: sx, sy, sz
684 integer :: tintbuf_ind
686 real(rp) :: implicit_fac
688 real(rp) :: tavg_coef_mflxz(this%tint(1)%nstage)
694 class(
meshfield3d),
pointer :: ddens, momx, momy, momz, therm
695 class(
meshfield3d),
pointer :: pres_hyd, pres_hyd_ref, dens_hyd, therm_hyd, rtot, cvtot, cptot, pres
696 class(
meshfield3d),
pointer :: dens_tp, momx_tp, momy_tp, momz_tp, rhot_tp, rhoh_p
697 class(
meshfield3d),
pointer :: dpres, dphyddx, dphyddy
700 integer :: rkvar_ids(5)
706 call prof_rapstart(
'ATM_DYN_update_pre', 2)
707 call prog_vars%Get3D( dens_vid , ddens )
708 call prog_vars%Get3D( therm_vid, therm )
709 call prog_vars%Get3D( momz_vid , momz )
710 call prog_vars%Get3D( momx_vid , momx )
711 call prog_vars%Get3D( momy_vid , momy )
713 call aux_vars%Get3D( preshyd_vid, pres_hyd )
714 call aux_vars%Get3D( denshyd_vid, dens_hyd )
715 call aux_vars%Get3D( thermhyd_vid, therm_hyd )
716 call aux_vars%Get3D( preshyd_ref_vid, pres_hyd_ref )
717 call aux_vars%Get3D( pres_vid, pres )
718 call aux_vars%Get3D( rtot_vid, rtot )
719 call aux_vars%Get3D( cvtot_vid, cvtot )
720 call aux_vars%Get3D( cptot_vid, cptot )
733 if (this%hevi_flag)
then
734 do n=1, mesh3d%LOCAL_MESH_NUM
735 lcmesh3d => mesh3d%lcmesh_list(n)
737 call this%tint(n)%StoreVar0( ddens%local(n)%val, dens_vid, 1, lcmesh3d%refElem%Np, lcmesh3d%NeS, lcmesh3d%NeE )
738 call this%tint(n)%StoreVar0( therm%local(n)%val, therm_vid, 1, lcmesh3d%refElem%Np, lcmesh3d%NeS, lcmesh3d%NeE )
739 call this%tint(n)%StoreVar0( momz%local(n)%val, momz_vid, 1, lcmesh3d%refElem%Np, lcmesh3d%NeS, lcmesh3d%NeE )
740 call this%tint(n)%StoreVar0( momx%local(n)%val, momx_vid, 1, lcmesh3d%refElem%Np, lcmesh3d%NeS, lcmesh3d%NeE )
741 call this%tint(n)%StoreVar0( momy%local(n)%val, momy_vid, 1, lcmesh3d%refElem%Np, lcmesh3d%NeS, lcmesh3d%NeE )
745 do n=1, mesh3d%LOCAL_MESH_NUM
746 rkvar_list(1,n)%var2D => ddens%local(n)%val
747 rkvar_list(2,n)%var2D => therm%local(n)%val
748 rkvar_list(3,n)%var2D => momz%local(n)%val
749 rkvar_list(4,n)%var2D => momx%local(n)%val
750 rkvar_list(5,n)%var2D => momy%local(n)%val
751 rkvar_ids(:) = (/ dens_vid, therm_vid, momz_vid, momx_vid, momy_vid /)
754 do_wait = (.not. this%hide_mpi_comm_flag)
755 call prof_rapend(
'ATM_DYN_update_pre', 2)
757 do rkstage=1, this%tint(1)%nstage
760 if (this%hevi_flag)
then
761 do n=1, mesh3d%LOCAL_MESH_NUM
762 lcmesh3d => mesh3d%lcmesh_list(n)
764 call prof_rapstart(
'ATM_DYN_cal_vi', 2)
765 implicit_fac = this%tint(n)%Get_implicit_diagfac(rkstage)
766 tintbuf_ind = this%tint(n)%tend_buf_indmap(rkstage)
767 dt = this%tint(n)%Get_deltime()
769 this%tint(n)%tend_buf2D_im(:,:,dens_vid,tintbuf_ind), &
770 this%tint(n)%tend_buf2D_im(:,:,momx_vid ,tintbuf_ind), &
771 this%tint(n)%tend_buf2D_im(:,:,momy_vid ,tintbuf_ind), &
772 this%tint(n)%tend_buf2D_im(:,:,momz_vid ,tintbuf_ind), &
773 this%tint(n)%tend_buf2D_im(:,:,therm_vid,tintbuf_ind), &
774 ddens%local(n)%val, momx%local(n)%val, momy%local(n)%val, momz%local(n)%val, &
775 therm%local(n)%val, &
776 dens_hyd%local(n)%val, pres_hyd%local(n)%val, &
777 this%tint(n)%var0_2D(:,:,dens_vid), this%tint(n)%var0_2D(:,:,momx_vid), &
778 this%tint(n)%var0_2D(:,:,momy_vid ), this%tint(n)%var0_2D(:,:,momz_vid), &
779 this%tint(n)%var0_2D(:,:,therm_vid ), &
780 rtot%local(n)%val, cvtot%local(n)%val, cptot%local(n)%val, &
781 element_operation, dz, lift, &
783 lcmesh3d, lcmesh3d%refElem3D, lcmesh3d%lcmesh2D, lcmesh3d%lcmesh2D%refElem2D )
785 call prof_rapend(
'ATM_DYN_cal_vi', 2)
787 call prof_rapstart(
'ATM_DYN_store_impl', 2)
788 call this%tint(n)%StoreImplicit( rkstage, ddens%local(n)%val, dens_vid, 1, lcmesh3d%refElem%Np, lcmesh3d%NeS, lcmesh3d%NeE )
789 call this%tint(n)%StoreImplicit( rkstage, therm%local(n)%val, therm_vid, 1, lcmesh3d%refElem%Np, lcmesh3d%NeS, lcmesh3d%NeE )
790 call this%tint(n)%StoreImplicit( rkstage, momz%local(n)%val, momz_vid, 1, lcmesh3d%refElem%Np, lcmesh3d%NeS, lcmesh3d%NeE )
791 call this%tint(n)%StoreImplicit( rkstage, momx%local(n)%val, momx_vid, 1, lcmesh3d%refElem%Np, lcmesh3d%NeS, lcmesh3d%NeE )
792 call this%tint(n)%StoreImplicit( rkstage, momy%local(n)%val, momy_vid, 1, lcmesh3d%refElem%Np, lcmesh3d%NeS, lcmesh3d%NeE )
793 call prof_rapend(
'ATM_DYN_store_impl', 2)
799 call prof_rapstart(
'ATM_DYN_exchange_prgv', 2)
800 call prog_vars%MeshFieldComm_Exchange( do_wait )
801 call prof_rapend(
'ATM_DYN_exchange_prgv', 2)
806 call prof_rapstart(
'ATM_DYN_cal_pres', 2)
809 ddens, momx, momy, momz, therm, &
810 pres_hyd, dens_hyd, therm_hyd, rtot, cvtot, cptot, &
811 mesh3d, this%ENTOT_CONSERVE_SCHEME_FLAG )
812 call prof_rapend(
'ATM_DYN_cal_pres', 2)
815 if ( ( .not. this%hide_mpi_comm_flag ) .or. this%ENTOT_CONSERVE_SCHEME_FLAG )
then
816 call prof_rapstart(
'ATM_DYN_exchange_prgv', 2)
817 call this%AUXDYNVAR3D_manager%MeshFieldComm_Exchange( do_wait )
818 call prof_rapend(
'ATM_DYN_exchange_prgv', 2)
821 if ( .not. this%hide_mpi_comm_flag )
then
822 do n=1, mesh3d%LOCAL_MESH_NUM
823 lcmesh3d => mesh3d%lcmesh_list(n)
826 call prof_rapstart(
'ATM_DYN_applyBC_prgv', 2)
827 call this%boundary_cond%ApplyBC_PROGVARS_lc( n, &
828 ddens%local(n)%val, momx%local(n)%val, momy%local(n)%val, momz%local(n)%val, therm%local(n)%val, &
829 dens_hyd%local(n)%val, pres_hyd%local(n)%val, &
830 lcmesh3d%Gsqrt, lcmesh3d%GsqrtH, lcmesh3d%GIJ(:,:,1,1), lcmesh3d%GIJ(:,:,1,2), lcmesh3d%GIJ(:,:,2,2), &
831 lcmesh3d%GI3(:,:,1), lcmesh3d%GI3(:,:,2), &
832 lcmesh3d%normal_fn(:,:,1), lcmesh3d%normal_fn(:,:,2), lcmesh3d%normal_fn(:,:,3), &
833 lcmesh3d%vmapM, lcmesh3d%vmapP, lcmesh3d%vmapB, &
834 lcmesh3d, lcmesh3d%refElem3D, lcmesh3d%lcmesh2D, lcmesh3d%lcmesh2D%refElem2D )
835 call prof_rapend(
'ATM_DYN_applyBC_prgv', 2)
840 do n=1, mesh3d%LOCAL_MESH_NUM
841 lcmesh3d => mesh3d%lcmesh_list(n)
843 call prof_rapstart(
'ATM_DYN_update_caltend_ex', 2)
844 tintbuf_ind = this%tint(n)%tend_buf_indmap(rkstage)
845 call this%cal_tend_ex( &
846 this%tint(n)%tend_buf2D_ex(:,:,dens_vid,tintbuf_ind), &
847 this%tint(n)%tend_buf2D_ex(:,:,momx_vid ,tintbuf_ind), &
848 this%tint(n)%tend_buf2D_ex(:,:,momy_vid ,tintbuf_ind), &
849 this%tint(n)%tend_buf2D_ex(:,:,momz_vid ,tintbuf_ind), &
850 this%tint(n)%tend_buf2D_ex(:,:,therm_vid,tintbuf_ind), &
851 ddens%local(n)%val, momx%local(n)%val, momy%local(n)%val, momz%local(n)%val, &
852 therm%local(n)%val, dpres%local(n)%val, &
853 dens_hyd%local(n)%val, pres_hyd%local(n)%val, pres_hyd_ref%local(n)%val, &
854 therm_hyd%local(n)%val, &
855 coriolis%local(n)%val, rtot%local(n)%val, cvtot%local(n)%val, cptot%local(n)%val, &
856 dphyddx%local(n)%val, dphyddy%local(n)%val, &
857 element_operation, dx, dy, dz, sx, sy, sz, lift, &
858 lcmesh3d, lcmesh3d%refElem3D, lcmesh3d%lcmesh2D, lcmesh3d%lcmesh2D%refElem2D )
859 call prof_rapend(
'ATM_DYN_update_caltend_ex', 2)
862 if (this%SPONGELAYER_FLAG)
then
863 call prof_rapstart(
'ATM_DYN_caltend_sponge', 2)
864 call this%sponge_layer%AddTend( &
865 this%tint(n)%tend_buf2D_ex(:,:,momx_vid ,tintbuf_ind), &
866 this%tint(n)%tend_buf2D_ex(:,:,momy_vid ,tintbuf_ind), &
867 this%tint(n)%tend_buf2D_ex(:,:,momz_vid ,tintbuf_ind), &
868 momx%local(n)%val, momy%local(n)%val, momz%local(n)%val, &
869 lcmesh3d, lcmesh3d%refElem3D )
870 call prof_rapend(
'ATM_DYN_caltend_sponge', 2)
874 call prof_rapstart(
'ATM_DYN_update_add_tp', 2)
875 do n=1, mesh3d%LOCAL_MESH_NUM
876 lcmesh3d => mesh3d%lcmesh_list(n)
878 tintbuf_ind = this%tint(n)%tend_buf_indmap(rkstage)
880 this, this%tint(n)%tend_buf2D_ex(:,:,:,tintbuf_ind), &
881 dens_tp%local(n)%val, momx_tp%local(n)%val, momy_tp%local(n)%val, &
882 momz_tp%local(n)%val, rhot_tp%local(n)%val, rhoh_p %local(n)%val, &
883 pres%local(n)%val, rtot%local(n)%val, cptot%local(n)%val, &
884 n, lcmesh3d, lcmesh3d%refElem3D )
886 call prof_rapend(
'ATM_DYN_update_add_tp', 2)
889 if ( this%hide_mpi_comm_flag )
then
891 call prof_rapstart(
'ATM_DYN_exchange_prgv_wait', 2)
892 call prog_vars%MeshFieldComm_Get()
893 if ( this%ENTOT_CONSERVE_SCHEME_FLAG ) &
894 call this%AUXDYNVAR3D_manager%MeshFieldComm_Get()
895 call prof_rapend(
'ATM_DYN_exchange_prgv_wait', 2)
897 do n=1, mesh3d%LOCAL_MESH_NUM
898 lcmesh3d => mesh3d%lcmesh_list(n)
899 tintbuf_ind = this%tint(n)%tend_buf_indmap(rkstage)
902 call prof_rapstart(
'ATM_DYN_applyBC_prgv', 2)
903 call this%boundary_cond%ApplyBC_PROGVARS_lc( n, &
904 ddens%local(n)%val, momx%local(n)%val, momy%local(n)%val, momz%local(n)%val, therm%local(n)%val, &
905 dens_hyd%local(n)%val, pres_hyd%local(n)%val, &
906 lcmesh3d%Gsqrt, lcmesh3d%GsqrtH, lcmesh3d%GIJ(:,:,1,1), lcmesh3d%GIJ(:,:,1,2), lcmesh3d%GIJ(:,:,2,2), &
907 lcmesh3d%GI3(:,:,1), lcmesh3d%GI3(:,:,2), &
908 lcmesh3d%normal_fn(:,:,1), lcmesh3d%normal_fn(:,:,2), lcmesh3d%normal_fn(:,:,3), &
909 lcmesh3d%vmapM, lcmesh3d%vmapP, lcmesh3d%vmapB, &
910 lcmesh3d, lcmesh3d%refElem3D, lcmesh3d%lcmesh2D, lcmesh3d%lcmesh2D%refElem2D )
911 call prof_rapend(
'ATM_DYN_applyBC_prgv', 2)
913 call prof_rapstart(
'ATM_DYN_ebnd_flux', 2)
915 this%tint(n)%tend_buf2D_ex(:,:,:,tintbuf_ind), &
916 ddens%local(n)%val, momx%local(n)%val, momy%local(n)%val, momz%local(n)%val, &
917 therm%local(n)%val, dpres%local(n)%val, &
918 dens_hyd%local(n)%val, pres_hyd%local(n)%val, therm_hyd%local(n)%val, &
919 rtot%local(n)%val, cvtot%local(n)%val, cptot%local(n)%val, &
920 lcmesh3d%Gsqrt, lcmesh3d%GI3(:,:,1), lcmesh3d%GI3(:,:,2), lcmesh3d%normal_fn(:,:,1),lcmesh3d%normal_fn(:,:,2),lcmesh3d%normal_fn(:,:,3), &
921 lcmesh3d%VMapM, lcmesh3d%VMapP, lcmesh3d, lcmesh3d%refElem3D, lcmesh3d%lcmesh2D, lcmesh3d%lcmesh2D%refElem2D, &
923 call prof_rapend(
'ATM_DYN_ebnd_flux', 2)
927 do n=1, mesh3d%LOCAL_MESH_NUM
928 lcmesh3d => mesh3d%lcmesh_list(n)
931 call prof_rapstart(
'ATM_DYN_tavg_mflx', 2)
932 if (this%tint(1)%imex_flag)
then
933 tavg_coef_mflxz(:) = this%tint(n)%coef_b_im(:)
935 tavg_coef_mflxz(:) = this%tint(n)%coef_b_ex(:)
938 mflx_x_tavg%local(n)%val, mflx_y_tavg%local(n)%val, mflx_z_tavg%local(n)%val, &
939 alph_dens_m_tavg%local(n)%face_val, alph_dens_p_tavg%local(n)%face_val, &
940 ddens%local(n)%val, momx%local(n)%val, momy%local(n)%val, momz%local(n)%val, &
941 dpres%local(n)%val, dens_hyd%local(n)%val, pres_hyd%local(n)%val, &
942 rtot%local(n)%val, cvtot%local(n)%val, cptot%local(n)%val, &
943 lcmesh3d, lcmesh3d%refElem3D, &
944 rkstage, this%tint(n)%coef_b_ex(rkstage), tavg_coef_mflxz(rkstage), &
946 call prof_rapend(
'ATM_DYN_tavg_mflx', 2)
949 call prof_rapstart(
'ATM_DYN_update_advance', 2)
950 call this%tint(n)%Advance_varlist( rkstage, rkvar_list(:,n), rkvar_ids, 1, lcmesh3d%refElem%Np, lcmesh3d%NeS, lcmesh3d%NeE )
951 call prof_rapend(
'ATM_DYN_update_advance', 2)
956 call prof_rapstart(
'ATM_DYN_update_post', 2)
958 do n=1, mesh3d%LOCAL_MESH_NUM
959 lcmesh3d => mesh3d%lcmesh_list(n)
962 do ke=lcmesh3d%NeS, lcmesh3d%NeE
963 dens0_trc%local(n)%val(:,ke) = this%tint(n)%var0_2D(:,ke,dens_vid)
964 dens_trc %local(n)%val(:,ke) = ddens%local(n)%val(:,ke)
968 call prof_rapend(
'ATM_DYN_update_post', 2)
970 if ( this%MODALFILTER_FLAG )
then
971 do n=1, mesh3d%LOCAL_MESH_NUM
972 lcmesh3d => mesh3d%lcmesh_list(n)
974 call prof_rapstart(
'ATM_DYN_update_modalfilter', 2)
976 ddens%local(n)%val, momx%local(n)%val, momy%local(n)%val, momz%local(n)%val, therm%local(n)%val, &
977 lcmesh3d, lcmesh3d%refElem3D, element_operation, &
978 do_weight_gsqrt = .true. )
979 call prof_rapend(
'ATM_DYN_update_modalfilter', 2)
983 call prof_rapstart(
'ATM_DYN_update_post', 2)
986 ddens, momx, momy, momz, therm, &
987 pres_hyd, dens_hyd, therm_hyd, &
988 rtot, cvtot, cptot, &
989 mesh3d, this%ENTOT_CONSERVE_SCHEME_FLAG )
990 call prof_rapend(
'ATM_DYN_update_post', 2)
993 end subroutine atmdyndgmdriver_nonhydro3d_update
997 subroutine atmdyndgmdriver_nonhydro3d_final( this )
1003 call this%dynsolver_final()
1004 call this%boundary_cond%Final()
1006 if ( this%SPONGELAYER_FLAG )
call this%sponge_layer%Final()
1008 if ( this%MODALFILTER_FLAG )
then
1009 call this%modal_filter_3d%Final()
1010 if ( this%hevi_flag )
call this%modal_filter_v1D%Final()
1013 call this%AUXDYNVAR3D_manager%Final()
1017 end subroutine atmdyndgmdriver_nonhydro3d_final
1021 subroutine atmdyndgmdriver_nonhydro3d_calc_pressure( this, &
1022 PRES, PROG_VARS, AUX_VARS )
1028 class(modelvarmanager),
intent(inout) :: prog_vars
1029 class(modelvarmanager),
intent(inout) :: aux_vars
1032 class(
meshfield3d),
pointer :: ddens, momx, momy, momz, therm
1033 class(
meshfield3d),
pointer :: pres_hyd, dens_hyd, therm_hyd, rtot, cvtot, cptot
1038 call prog_vars%Get3D(dens_vid , ddens)
1039 call prog_vars%Get3D(therm_vid, therm)
1040 call prog_vars%Get3D(momz_vid , momz )
1041 call prog_vars%Get3D(momx_vid , momx )
1042 call prog_vars%Get3D(momy_vid , momy )
1044 call aux_vars%Get3D( preshyd_vid, pres_hyd )
1045 call aux_vars%Get3D( denshyd_vid, dens_hyd )
1046 call aux_vars%Get3D( thermhyd_vid, therm_hyd )
1047 call aux_vars%Get3D( rtot_vid, rtot )
1048 call aux_vars%Get3D( cvtot_vid, cvtot )
1049 call aux_vars%Get3D( cptot_vid, cptot )
1051 mesh3d => ddens%mesh
1052 call dpres%Init(
"DPRES",
"Pa", mesh3d )
1056 ddens, momx, momy, momz, therm, &
1057 pres_hyd, dens_hyd, therm_hyd, rtot, cvtot, cptot, &
1058 mesh3d, this%ENTOT_CONSERVE_SCHEME_FLAG )
1063 end subroutine atmdyndgmdriver_nonhydro3d_calc_pressure
1067 subroutine atmdyndgmdriver_nonhydro3d_update_thermhyd( this, &
1073 class(modelvarmanager),
intent(inout) :: aux_vars
1075 class(
meshfield3d),
pointer :: pres_hyd, dens_hyd, therm_hyd
1079 call aux_vars%Get3D( preshyd_vid, pres_hyd )
1080 call aux_vars%Get3D( denshyd_vid, dens_hyd )
1081 call aux_vars%Get3D( thermhyd_vid, therm_hyd )
1083 mesh3d => dens_hyd%mesh
1087 pres_hyd, dens_hyd, &
1088 mesh3d, this%ENTOT_CONSERVE_SCHEME_FLAG )
1091 end subroutine atmdyndgmdriver_nonhydro3d_update_thermhyd
1095 subroutine atmdyndgmdriver_nonhydro3d_update_phyd_hgrad( this, &
1096 PRES_hyd, PRES_hyd_ref, & ! (in)
1097 mesh3d, element_operation )
1104 class(
meshbase3d),
intent(in),
target :: mesh3d
1111 do n=1, mesh3d%LOCAL_MESH_NUM
1112 lcmesh3d => mesh3d%lcmesh_list(n)
1118 pres_hyd%local(n)%val, pres_hyd_ref%local(n)%val, &
1119 element_operation, lcmesh3d, lcmesh3d%refElem3D )
1126 end subroutine atmdyndgmdriver_nonhydro3d_update_phyd_hgrad
1131 subroutine add_phy_tend( this, & ! (in)
1133 dens_tp, momx_tp, momy_tp, momz_tp, rhot_tp, rhoh_p, &
1134 pres, rtot, cptot, &
1135 domid, lcmesh, elem3d )
1142 real(rp),
intent(inout) :: dyn_tends(elem3d%np,lcmesh%nea,prgvar_num)
1143 real(rp),
intent(in) :: dens_tp(elem3d%np,lcmesh%nea)
1144 real(rp),
intent(in) :: momx_tp(elem3d%np,lcmesh%nea)
1145 real(rp),
intent(in) :: momy_tp(elem3d%np,lcmesh%nea)
1146 real(rp),
intent(in) :: momz_tp(elem3d%np,lcmesh%nea)
1147 real(rp),
intent(in) :: rhot_tp(elem3d%np,lcmesh%nea)
1148 real(rp),
intent(in) :: rhoh_p (elem3d%np,lcmesh%nea)
1149 real(rp),
intent(in) :: pres(elem3d%np,lcmesh%nea)
1150 real(rp),
intent(in) :: rtot(elem3d%np,lcmesh%nea)
1151 real(rp),
intent(in) :: cptot(elem3d%np,lcmesh%nea)
1152 integer,
intent(in) :: domid
1155 real(rp) :: exner(elem3d%np)
1160 rp0 = 1.0_rp / pres00
1165 do ke=lcmesh%NeS, lcmesh%NeE
1168 dyn_tends(p,ke,dens_vid) = dyn_tends(p,ke,dens_vid) + dens_tp(p,ke)
1169 dyn_tends(p,ke,momz_vid) = dyn_tends(p,ke,momz_vid) + momz_tp(p,ke)
1170 dyn_tends(p,ke,momx_vid) = dyn_tends(p,ke,momx_vid) + momx_tp(p,ke)
1171 dyn_tends(p,ke,momy_vid) = dyn_tends(p,ke,momy_vid) + momy_tp(p,ke)
1176 if ( this%ENTOT_CONSERVE_SCHEME_FLAG )
then
1178 do ke=lcmesh%NeS, lcmesh%NeE
1179 exner(:) = ( pres(:,ke) * rp0 )**( rtot(:,ke) / cptot(:,ke) )
1181 dyn_tends(:,ke,therm_vid) = dyn_tends(:,ke,therm_vid) &
1183 + ( cptot(:,ke) * exner(:) ) * rhot_tp(:,ke)
1189 do ke=lcmesh%NeS, lcmesh%NeE
1193 exner_ = ( pres(p,ke) * rp0 )**( rtot(p,ke) / cptot(p,ke) )
1195 dyn_tends(p,ke,therm_vid) = dyn_tends(p,ke,therm_vid) &
1197 + rhoh_p(p,ke) / ( cptot(p,ke) * exner_ )
1200 exner(:) = ( pres(:,ke) * rp0 )**( rtot(:,ke) / cptot(:,ke) )
1202 dyn_tends(:,ke,therm_vid) = dyn_tends(:,ke,therm_vid) &
1204 + rhoh_p(:,ke) / ( cptot(:,ke) * exner(:) )
1211 end subroutine add_phy_tend
1214 subroutine add_phy_tend_new( this, & ! (in)
1216 dens_tp, momx_tp, momy_tp, momz_tp, rhot_tp, rhoh_p, &
1217 pres, rtot, cptot, &
1218 domid, lcmesh, elem3d )
1225 real(rp),
intent(inout) :: dyn_tends(elem3d%np,lcmesh%nea,prgvar_num)
1226 real(rp),
intent(in) :: dens_tp(elem3d%np,lcmesh%nea)
1227 real(rp),
intent(in) :: momx_tp(elem3d%np,lcmesh%nea)
1228 real(rp),
intent(in) :: momy_tp(elem3d%np,lcmesh%nea)
1229 real(rp),
intent(in) :: momz_tp(elem3d%np,lcmesh%nea)
1230 real(rp),
intent(in) :: rhot_tp(elem3d%np,lcmesh%nea)
1231 real(rp),
intent(in) :: rhoh_p (elem3d%np,lcmesh%nea)
1232 real(rp),
intent(in) :: pres(elem3d%np,lcmesh%nea)
1233 real(rp),
intent(in) :: rtot(elem3d%np,lcmesh%nea)
1234 real(rp),
intent(in) :: cptot(elem3d%np,lcmesh%nea)
1235 integer,
intent(in) :: domid
1238 real(rp) :: exner(elem3d%np)
1242 rp0 = 1.0_rp / pres00
1247 do ke=lcmesh%NeS, lcmesh%NeE
1248 dyn_tends(:,ke,dens_vid) = dyn_tends(:,ke,dens_vid) + dens_tp(:,ke)
1249 dyn_tends(:,ke,momz_vid) = dyn_tends(:,ke,momz_vid) + momz_tp(:,ke)
1250 dyn_tends(:,ke,momx_vid) = dyn_tends(:,ke,momx_vid) + momx_tp(:,ke)
1251 dyn_tends(:,ke,momy_vid) = dyn_tends(:,ke,momy_vid) + momy_tp(:,ke)
1255 if ( this%ENTOT_CONSERVE_SCHEME_FLAG )
then
1257 do ke=lcmesh%NeS, lcmesh%NeE
1258 exner(:) = ( pres(:,ke) * rp0 )**( rtot(:,ke) / cptot(:,ke) )
1260 dyn_tends(:,ke,therm_vid) = dyn_tends(:,ke,therm_vid) &
1262 + ( cptot(:,ke) * exner(:) ) * rhot_tp(:,ke)
1267 do ke=lcmesh%NeS, lcmesh%NeE
1268 exner(:) = ( pres(:,ke) * rp0 )**( rtot(:,ke) / cptot(:,ke) )
1270 dyn_tends(:,ke,therm_vid) = dyn_tends(:,ke,therm_vid) &
1272 + rhoh_p(:,ke) / ( cptot(:,ke) * exner(:) )
1278 end subroutine add_phy_tend_new
1282 subroutine setup_modalfilter( this, refElem3D, element_operation )
1290 real(rp) :: mf_etac_h = 2.0_rp/3.0_rp
1291 real(rp) :: mf_alpha_h = 36.0_rp
1292 integer :: mf_order_h = 16
1293 real(rp) :: mf_etac_v = 2.0_rp/3.0_rp
1294 real(rp) :: mf_alpha_v = 36.0_rp
1295 integer :: mf_order_v = 16
1297 namelist /param_atmos_dyn_modalfilter/ &
1298 mf_etac_h, mf_alpha_h, mf_order_h, &
1299 mf_etac_v, mf_alpha_v, mf_order_v
1307 read(io_fid_conf,nml=param_atmos_dyn_modalfilter,iostat=ierr)
1309 log_info(
"ATMOS_DYN_setup_modalfilter",*)
'Not found namelist. Default used.'
1310 elseif( ierr > 0 )
then
1311 log_error(
"ATMOS_DYN_setup_modalfilter",*)
'Invalid names in namelist PARAM_ATMOS_DYN_MODALFILTER. Check!'
1315 log_nml(param_atmos_dyn_modalfilter)
1317 call this%modal_filter_3d%Init( &
1319 mf_etac_h, mf_alpha_h, mf_order_h, &
1320 mf_etac_v, mf_alpha_v, mf_order_v )
1322 call element_operation%Setup_ModalFilter( &
1323 mf_etac_h, mf_alpha_h, mf_order_h, &
1324 mf_etac_v, mf_alpha_v, mf_order_v )
1327 end subroutine setup_modalfilter
module FElib / Fluid dyn solver / Atmosphere / Boundary
module FElib / Fluid dyn solver / Atmosphere / driver (base)
subroutine, public atmdyndgmdriver_base3d_final(this)
subroutine, public atmdyndgmdriver_base3d_init(this, prgvar_num, tint_type, dtsec, mesh)
module FElib / Fluid dyn solver / Atmosphere / driver (3D nonhydrostatic model)
integer, parameter, public auxdynvars3d_dphyddy_id
integer, parameter, public auxdynvars3d_dphyddx_id
integer, parameter, public eqs_typeid_none
integer, parameter, public eqs_typeid_globalnonhyd3d_heve
integer, parameter, public eqs_typeid_nonhyd3d_heve
integer, parameter, public eqs_typeid_nonhyd3d_splitform_hevi
integer, parameter, public eqs_typeid_nonhyd3d_hevi
integer, parameter, public eqs_typeid_nonhyd3d_splitform_heve
type(variableinfo), dimension(auxdynvars3d_num), public atmos_dyn_auxdynvars3d_vinfo
integer, parameter, public eqs_typeid_globalnonhyd3d_hevi
integer, parameter, public eqs_typeid_globalnonhyd3d_hevi_entot
integer, parameter, public eqs_typeid_nonhyd3d_heve_entot
integer, parameter, public auxdynvars3d_num
integer, parameter, public auxdynvars3d_dpres_id
integer, parameter, public eqs_typeid_nonhyd3d_hevi_entot
integer, parameter, public eqs_typeid_globalnonhyd3d_heve_entot
module FElib / Fluid dyn solver / Atmosphere / Global nonhydrostatic model / HEVE
subroutine, public atm_dyn_dgm_globalnonhydro3d_etot_heve_final()
subroutine, public atm_dyn_dgm_globalnonhydro3d_etot_heve_init(mesh)
subroutine, public atm_dyn_dgm_globalnonhydro3d_etot_heve_cal_tend(dens_dt, momx_dt, momy_dt, momz_dt, entot_dt, ddens_, momx_, momy_, momz_, etot_, 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 / Fluid dyn solver / Atmosphere / Global nonhydrostatic model / HEVI
subroutine, public atm_dyn_dgm_globalnonhydro3d_etot_hevi_cal_tend(dens_dt, momx_dt, momy_dt, momz_dt, entot_dt, ddens_, momx_, momy_, momz_, etot_, 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)
subroutine, public atm_dyn_dgm_globalnonhydro3d_etot_hevi_cal_vi(dens_dt, momx_dt, momy_dt, momz_dt, etot_dt, ddens_, momx_, momy_, momz_, etot_, dens_hyd, pres_hyd, ddens0_, momx0_, momy0_, momz0_, etot0_, rtot, cvtot, cptot, element3d_operation, dz, lift, impl_fac, dt, lmesh, elem, lmesh2d, elem2d)
subroutine, public atm_dyn_dgm_globalnonhydro3d_etot_hevi_init(mesh)
subroutine, public atm_dyn_dgm_globalnonhydro3d_etot_hevi_final()
module FElib / Fluid dyn solver / Atmosphere / Global nonhydrostatic model / HEVE
subroutine, public atm_dyn_dgm_globalnonhydro3d_rhot_heve_gpu_final()
subroutine, public atm_dyn_dgm_globalnonhydro3d_rhot_heve_gpu_cal_tend_deep_atm(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)
subroutine, public atm_dyn_dgm_globalnonhydro3d_rhot_heve_gpu_init(mesh)
subroutine, public atm_dyn_dgm_globalnonhydro3d_rhot_heve_gpu_cal_tend_shallow_atm(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 / Fluid dyn solver / Atmosphere / Global nonhydrostatic model / HEVE
subroutine, public atm_dyn_dgm_globalnonhydro3d_rhot_heve_init(mesh)
subroutine, public atm_dyn_dgm_globalnh3d_rhot_heve_cal_tend_shallow_atm_asis(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)
subroutine, public atm_dyn_dgm_globalnonhydro3d_rhot_heve_final()
subroutine, public atm_dyn_dgm_globalnonhydro3d_rhot_heve_cal_tend_deep_atm(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)
subroutine, public atm_dyn_dgm_globalnonhydro3d_rhot_heve_cal_tend_shallow_atm(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 / Fluid dyn solver / Atmosphere / Global nonhydrostatic model / HEVI
subroutine, public atm_dyn_dgm_globalnonhydro3d_rhot_hevi_cal_vi_asis(dens_dt, momx_dt, momy_dt, momz_dt, rhot_dt, ddens_, momx_, momy_, momz_, drhot_, dens_hyd, pres_hyd, ddens0_, momx0_, momy0_, momz0_, drhot0_, rtot, cvtot, cptot, element3d_operation, dz, lift, impl_fac, dt, lmesh, elem, lmesh2d, elem2d)
subroutine, public atm_dyn_dgm_globalnonhydro3d_rhot_hevi_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)
subroutine, public atm_dyn_dgm_globalnonhydro3d_rhot_hevi_init(mesh)
subroutine, public atm_dyn_dgm_globalnonhydro3d_rhot_hevi_cal_vi(dens_dt, momx_dt, momy_dt, momz_dt, rhot_dt, ddens_, momx_, momy_, momz_, drhot_, dens_hyd, pres_hyd, ddens0_, momx0_, momy0_, momz0_, drhot0_, rtot, cvtot, cptot, element3d_operation, dz, lift, impl_fac, dt, lmesh, elem, lmesh2d, elem2d)
subroutine, public atm_dyn_dgm_globalnonhydro3d_rhot_hevi_final()
subroutine, public atm_dyn_dgm_globalnonhydro3d_rhot_hevi_cal_tend_asis(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 / Fluid dyn solver / Atmosphere / Common / Modal filter
subroutine, public atm_dyn_dgm_modalfilter_apply(ddens_, momx_, momy_, momz_, drhot_, lmesh, elem, elem_operation, do_weight_gsqrt)
module FElib / Fluid dyn solver / Atmosphere / Regional nonhydrostatic model / Skip dynamical process
subroutine, public atm_dyn_dgm_none_init(mesh)
subroutine, public atm_dyn_dgm_none_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)
subroutine, public atm_dyn_dgm_none_final()
module FElib / Fluid dyn solver / Atmosphere / Nonhydrostatic model / Common
integer, parameter, public phytend_momz_id
integer, parameter, public prgvar_momy_id
integer, parameter, public auxvar_cptot_id
integer, parameter, public prgvar_therm_id
integer, parameter, public auxvar_cvtot_id
integer, parameter, public prgvar_ddens_id
integer, parameter, public prgvar_momz_id
integer, parameter, public phytend_rhot_id
subroutine, public atm_dyn_dgm_nonhydro3d_common_calc_phyd_hgrad_lc(dphyddx, dphyddy, pres_hyd, pres_hyd_ref, element3d_operation, lmesh, elem)
Calculate horizontal graidient of hydrostatic pressure In this calculation, we assume that PRES_hyd_r...
integer, parameter, public phytend_momx_id
integer, parameter, public phytend_momy_id
integer, parameter, public prgvar_momx_id
integer, parameter, public auxvar_num
integer, parameter, public prgvar_num
integer, parameter, public phytend_rhoh_id
integer, parameter, public auxvar_preshydro_id
integer, parameter, public auxvar_thermhydro_id
subroutine, public atm_dyn_dgm_nonhydro3d_common_calc_pressure(pres, dpres, ddens, momx, momy, momz, therm, pres_hyd, dens_hyd, therm_hyd, rtot, cvtot, cptot, mesh3d, entot_conserve_scheme_flag)
integer, parameter, public auxvar_denshydro_id
integer, parameter, public phytend_dens_id
integer, parameter, public auxvar_rtot_id
subroutine, public atm_dyn_dgm_nonhydro3d_common_calc_therm_phyd(therm_hyd, pres_hyd, dens_hyd, mesh3d, entot_conserve_scheme_flag)
integer, parameter, public auxvar_preshydro_ref_id
integer, parameter, public auxvar_pres_id
module FElib / Fluid dyn solver / Atmosphere / Regional nonhydrostatic model / HEVE
subroutine, public atm_dyn_dgm_nonhydro3d_etot_heve_init(mesh)
subroutine, public atm_dyn_dgm_nonhydro3d_etot_heve_final()
subroutine, public atm_dyn_dgm_nonhydro3d_etot_heve_cal_tend(dens_dt, momx_dt, momy_dt, momz_dt, etot_dt, ddens_, momx_, momy_, momz_, etot_, 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 / Fluid dyn solver / Atmosphere / Regional nonhydrostatic model / HEVI
subroutine, public atm_dyn_dgm_nonhydro3d_etot_hevi_cal_tend(dens_dt, momx_dt, momy_dt, momz_dt, etot_dt, ddens_, momx_, momy_, momz_, etot_, 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)
subroutine, public atm_dyn_dgm_nonhydro3d_etot_hevi_cal_vi(dens_dt, momx_dt, momy_dt, momz_dt, etot_dt, ddens_, momx_, momy_, momz_, etot_, dens_hyd, pres_hyd, ddens0_, momx0_, momy0_, momz0_, etot0_, rtot, cvtot, cptot, element3d_operation, dz, lift, impl_fac, dt, lmesh, elem, lmesh2d, elem2d)
subroutine, public atm_dyn_dgm_nonhydro3d_etot_hevi_init(mesh)
subroutine, public atm_dyn_dgm_nonhydro3d_etot_hevi_final()
module FElib / Fluid dyn solver / Atmosphere / Regional nonhydrostatic model / HEVE
subroutine, public atm_dyn_dgm_nonhydro3d_rhot_heve_gpu_init(mesh)
Initialize the module for HEVE scheme on GPU.
subroutine, public atm_dyn_dgm_nonhydro3d_rhot_heve_cal_tend_gpu2(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)
subroutine, public atm_dyn_dgm_nonhydro3d_rhot_heve_gpu_final()
Finalize the module for HEVE scheme on GPU.
subroutine, public atm_dyn_dgm_nonhydro3d_rhot_heve_cal_tend_gpu(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 / Fluid dyn solver / Atmosphere / Nonhydrostatic model / HEVE / Numflux
subroutine, public atm_dyn_dgm_nonhydro3d_rhot_heve_add_bnd_contrib_generalvc(prgvar_dt, ddens_, momx_, momy_, momz_, drhot_, dpres, dens_hyd, pres_hyd, therm_hyd, rtot, cvtot, cptot, gsqrt, g13, g23, nx, ny, nz, vmapm, vmapp, lmesh, elem, lmesh2d, elem2d, elem3d_optr)
module FElib / Fluid dyn solver / Atmosphere / Regional nonhydrostatic model / HEVE
subroutine, public atm_dyn_dgm_nonhydro3d_rhot_heve_init(mesh)
subroutine, public atm_dyn_dgm_nonhydro3d_rhot_heve_final()
subroutine, public atm_dyn_dgm_nonhydro3d_rhot_heve_cal_tend_cco(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)
subroutine, public atm_dyn_dgm_nonhydro3d_rhot_heve_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)
subroutine, public atm_dyn_dgm_nonhydro3d_rhot_heve_cal_tend_asis(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 / Fluid dyn solver / Atmosphere / Regional nonhydrostatic model / HEVI
subroutine, public atm_dyn_dgm_nonhydro3d_rhot_hevi_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)
subroutine, public atm_dyn_dgm_nonhydro3d_rhot_hevi_init(mesh)
subroutine, public atm_dyn_dgm_nonhydro3d_rhot_hevi_cal_tend_asis(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)
subroutine, public atm_dyn_dgm_nonhydro3d_rhot_hevi_cal_vi(dens_dt, momx_dt, momy_dt, momz_dt, rhot_dt, ddens_, momx_, momy_, momz_, drhot_, dens_hyd, pres_hyd, ddens0_, momx0_, momy0_, momz0_, drhot0_, rtot, cvtot, cptot, element3d_operation, dz, lift, impl_fac, dt, lmesh, elem, lmesh2d, elem2d)
subroutine, public atm_dyn_dgm_nonhydro3d_rhot_hevi_cal_vi_asis(dens_dt, momx_dt, momy_dt, momz_dt, rhot_dt, ddens_, momx_, momy_, momz_, drhot_, dens_hyd, pres_hyd, ddens0_, momx0_, momy0_, momz0_, drhot0_, rtot, cvtot, cptot, element3d_operation, dz, lift, impl_fac, dt, lmesh, elem, lmesh2d, elem2d)
subroutine, public atm_dyn_dgm_nonhydro3d_rhot_hevi_final()
module FElib / Fluid dyn solver / Atmosphere / Common
module FElib / Fluid dyn solver / Atmosphere / Tracer advection
subroutine, public atm_dyn_dgm_trcadvect3d_save_massflux(mflx_x_tavg, mflx_y_tavg, mflx_z_tavg, alph_dens_m, alph_dens_p, ddens, momx, momy, momz, dpres, dens_hyd, pres_hyd, rtot, cvtot, cptot, lmesh, elem, rkstage, tavg_weight_h, tavg_weight_v, is_hevi)
module FElib / Element / Base
module FElib / Element / hexahedron
module FElib / Element / line
module FElib / Element/ ModalFilter
module FElib / Element / Operation / Base
module FElib / Mesh / Local 2D
module FElib / Mesh / Local 3D
module FElib / Mesh / Local, Base
module FElib / Mesh / Base 3D
module FElib / Mesh / Cubed-sphere 3D domain
module FElib / Data / base
FElib / model framework / mesh manager.
FElib / model framework / variable manager.
Module common / sparsemat.
Module common / Runge-Kutta scheme.
A derived type useful for apply boundary conditions.
Derived type to provide a driver of dynamical core with the atmospheric nonhydrostatic equations.
Derived type representing a 2D reference element.
Derived type representing a 3D reference element.
Derived type representing an arbitrary finite element.
Derived type representing a hexahedral element.
Derived type representing a line element.
Derived type representing a modal filter.
Base type for elementwise operations.
Derived type representing a local mesh for 2D domain.
Derived type to manage a local 3D computational domain.
Derived type to manage a local computational domain (base type)
Derived type to manage a computational mesh (base type for 3D domain)
Derived type to manage a cubed-sphere 3D computational domain.
Derived type representing a field with 2D mesh.
Derived type representing a field with 3D mesh.
Derived type representing a field (base type)
Derived type to manage a sparse matrix.
Derived type to store pointer to variable data when using varlist in RK advance procedures.
Derived type to provide RK scheme.