29 use fms_mod,
only: write_version_number, open_namelist_file, &
32 mpp_npes, mpp_get_current_pelist, &
51 use fv_mp_nlm_mod,
only: mp_start, mp_assign_gid, domain_decomp
53 use fv_mp_nlm_mod,
only: broadcast_domains, mp_barrier, is_master, setup_master
61 use mpp_mod,
only:
mpp_send, mpp_sync,
mpp_transmit, mpp_set_current_pelist, mpp_declare_pelist, mpp_root_pe,
mpp_recv, mpp_sync_self,
mpp_broadcast, read_input_nml
246 real :: dyn_timer, comm_timer
247 public :: dyn_timer, comm_timer
260 subroutine fv_init(Atm, dt_atmos, grids_on_this_pe, p_split)
262 type(
fv_atmos_type),
allocatable,
intent(inout),
target :: atm(:)
263 real,
intent(in) :: dt_atmos
264 logical,
allocatable,
intent(INOUT) :: grids_on_this_pe(:)
265 integer,
intent(INOUT) :: p_split
267 integer :: i, j, k, n, p
271 integer :: num_family
273 integer :: isc_p, iec_p, jsc_p, jec_p, isg, ieg, jsg, jeg, upoff, jind
295 call run_setup(atm,dt_atmos, grids_on_this_pe, p_split)
300 call switch_current_atm(atm(n))
313 write(*,*)
'ncnst=',
ncnst,
' num_prog=',
nt_prog,
' pnats=',
pnats,
' dnats=',
dnats,
' num_family=',num_family
317 if (grids_on_this_pe(n))
then 319 atm(n)%bd%isc, atm(n)%bd%iec, atm(n)%bd%jsc, atm(n)%bd%jec, &
322 if (grids_on_this_pe(n))
then 324 call switch_current_atm(atm(n))
327 if ( (atm(n)%bd%iec-atm(n)%bd%isc+1).lt.4 .or. (atm(n)%bd%jec-atm(n)%bd%jsc+1).lt.4 )
then 328 if (is_master())
write(*,
'(6I6)') atm(n)%bd%isc, atm(n)%bd%iec, atm(n)%bd%jsc, atm(n)%bd%jec, n
329 call mpp_error(fatal,
'Domain Decomposition: Cubed Sphere compute domain has a & 330 &minium requirement of 4 points in X and Y, respectively')
336 atm(n)%gridstruct%nested => atm(n)%neststruct%nested
337 atm(n)%gridstruct%grid_type => atm(n)%flagstruct%grid_type
338 atm(n)%flagstruct%grid_number => atm(n)%grid_number
341 atm(n)%gridstruct%sw_corner = .false.
342 atm(n)%gridstruct%se_corner = .false.
343 atm(n)%gridstruct%ne_corner = .false.
344 atm(n)%gridstruct%nw_corner = .false.
346 if (atm(n)%gridstruct%grid_type < 3 .and. .not. atm(n)%neststruct%nested)
then 347 if ( atm(n)%bd%is ==1 .and. atm(n)%bd%js ==1 ) atm(n)%gridstruct%sw_corner = .true.
348 if ( (atm(n)%bd%ie+1)==
npx .and. atm(n)%bd%js ==1 ) atm(n)%gridstruct%se_corner = .true.
349 if ( (atm(n)%bd%ie+1)==
npx .and. (atm(n)%bd%je+1)==
npy ) atm(n)%gridstruct%ne_corner = .true.
350 if ( atm(n)%bd%is ==1 .and. (atm(n)%bd%je+1)==
npy ) atm(n)%gridstruct%nw_corner = .true.
360 if ( is_master() )
then 363 write(*,*)
'Divergence damping Coefficients' 364 write(*,*)
'For small dt=', sdt
365 write(*,*)
'External mode del-2 (m**2/s)=',
d_ext*atm(n)%gridstruct%da_min_c/sdt
366 write(*,*)
'Internal mode del-2 SMAG dimensionless coeff=',
dddmp 367 write(*,*)
'Internal mode del-2 background diff=',
d2_bg*atm(n)%gridstruct%da_min_c/sdt
370 write(*,*)
'Internal mode del-4 background diff=',
d4_bg 371 write(*,*)
'Vorticity del-4 (m**4/s)=', (
vtdm4*atm(n)%gridstruct%da_min)**2/sdt*1.e-6
373 if (
nord==2)
write(*,*)
'Internal mode del-6 background diff=',
d4_bg 374 if (
nord==3)
write(*,*)
'Internal mode del-8 background diff=',
d4_bg 375 write(*,*)
'tracer del-2 diff=',
trdm2 377 write(*,*)
'Vorticity del-4 (m**4/s)=', (
vtdm4*atm(n)%gridstruct%da_min)**2/sdt*1.e-6
378 write(*,*)
'beta=',
beta 396 atm(n)%bd%isc, atm(n)%bd%iec, atm(n)%bd%jsc, atm(n)%bd%jec, &
400 if (atm(n)%neststruct%nested)
then 407 if (
gid == atm(n)%parent_grid%pelist(1))
then 408 call mpp_send(atm(n)%parent_grid%grid_global(isg-ng:ieg+1+ng,jsg-ng:jeg+1+ng,1:2,
parent_tile), &
409 size(atm(n)%parent_grid%grid_global(isg-ng:ieg+1+ng,jsg-ng:jeg+1+ng,1:2,
parent_tile)), &
414 if (atm(n)%neststruct%twowaynest)
then 422 atm(n)%neststruct%ind_update_h = -99999
424 if (atm(n)%parent_grid%tile == atm(n)%neststruct%parent_tile)
then 426 isc_p = atm(n)%parent_grid%bd%isc
427 iec_p = atm(n)%parent_grid%bd%iec
428 jsc_p = atm(n)%parent_grid%bd%jsc
429 jec_p = atm(n)%parent_grid%bd%jec
430 upoff = atm(n)%neststruct%upoff
432 atm(n)%neststruct%jsu = jsc_p
433 atm(n)%neststruct%jeu = jsc_p-1
437 atm(n)%neststruct%ind_update_h(i,j,2) = -9999
439 atm(n)%neststruct%jsu = atm(n)%neststruct%jsu + 1
442 atm(n)%neststruct%ind_update_h(i,j,2) = -9999
447 atm(n)%neststruct%ind_update_h(i,j,2) = jind
454 atm(n)%neststruct%isu = isc_p
455 atm(n)%neststruct%ieu = isc_p-1
458 atm(n)%neststruct%ind_update_h(i,:,1) = -9999
459 atm(n)%neststruct%isu = atm(n)%neststruct%isu + 1
461 atm(n)%neststruct%ind_update_h(i,:,1) = -9999
488 if (
ntilesme > 1)
call switch_current_atm(atm(1))
496 subroutine fv_end(Atm, grids_on_this_pe, restarts)
499 logical,
intent(INOUT) :: grids_on_this_pe(:)
500 logical,
intent(IN) :: restarts
527 subroutine run_setup(Atm, dt_atmos, grids_on_this_pe, p_split)
528 type(fv_atmos_type),
intent(inout),
target :: Atm(:)
529 real,
intent(in) :: dt_atmos
530 logical,
intent(INOUT) :: grids_on_this_pe(:)
531 integer,
intent(INOUT) :: p_split
533 character(len=80) :: filename, tracerName, errString, nested_grid_filename
534 integer :: ios, ierr, f_unit, unit
542 real :: dimx, dl, dp, dxmin, dymin, d_fac
547 integer :: pe_counter
550 character(len=128) :: res_latlon_dynamics =
'' 551 character(len=128) :: res_latlon_tracers =
'' 552 character(len=80) :: grid_name =
'' 553 character(len=120) :: grid_file =
'' 555 namelist /fv_grid_nml/ grid_name, grid_file
562 dddmp,
d2_bg,
d4_bg,
vtdm4,
trdm2,
d_ext,
delt_max,
beta,
non_ortho,
n_sponge,
n_zfilter, &
581 real,
dimension(2048) :: fdiag = 0.
582 namelist /nggps_diag_nml/ fdiag
585 pe_counter = mpp_root_pe()
592 filename =
"input.nml" 594 inquire(file=filename,exist=exists)
595 if (.not. exists)
then 596 if(is_master())
write(*,*)
"file ",trim(filename),
" doesn't exist" 597 call mpp_error(fatal,
'FV core terminating 1')
600 #ifdef INTERNAL_FILE_NML 603 read (input_nml_file,fv_grid_nml,iostat=ios)
606 read (input_nml_file,test_case_nml,iostat=ios)
609 f_unit=open_namelist_file()
612 read (f_unit,fv_grid_nml,iostat=ios)
615 call close_file(f_unit)
619 write(unit, nml=fv_grid_nml)
623 call switch_current_atm(atm(n), .false.)
625 atm(n)%grid_number = n
626 if (grids_on_this_pe(n))
then 630 #ifdef INTERNAL_FILE_NML 631 if (
size(atm) > 1)
then 632 call mpp_error(fatal,
"Nesting not implemented with INTERNAL_FILE_NML")
635 read (input_nml_file,fv_core_nml,iostat=ios)
638 read (input_nml_file,test_case_nml,iostat=ios)
642 read (input_nml_file,nggps_diag_nml,iostat=ios)
645 if (nint(fdiag(2)) == 0)
then 646 atm(n)%fdiag(1) = fdiag(1)
647 do i = 2,
size(fdiag,1)
648 atm(n)%fdiag(i) = atm(n)%fdiag(i-1) + fdiag(1)
655 if (
size(atm) == 1)
then 656 f_unit = open_namelist_file()
657 else if (n == 1)
then 658 f_unit = open_namelist_file(
'input.nml')
660 write(nested_grid_filename,
'(A10, I2.2, A4)')
'input_nest', n,
'.nml' 661 f_unit = open_namelist_file(nested_grid_filename)
665 read (f_unit,fv_core_nml,iostat=ios)
670 read (f_unit,test_case_nml,iostat=ios)
675 read (f_unit,nggps_diag_nml,iostat=ios)
678 if (nint(fdiag(2)) == 0)
then 679 atm(n)%fdiag(1) = fdiag(1)
680 do i = 2,
size(fdiag,1)
681 atm(n)%fdiag(i) = atm(n)%fdiag(i-1) + fdiag(1)
687 call close_file(f_unit)
689 if (len_trim(grid_file) /= 0) atm(n)%flagstruct%grid_file = grid_file
690 if (len_trim(grid_name) /= 0) atm(n)%flagstruct%grid_name = grid_name
691 if (len_trim(res_latlon_dynamics) /= 0) atm(n)%flagstruct%res_latlon_dynamics = res_latlon_dynamics
692 if (len_trim(res_latlon_tracers) /= 0) atm(n)%flagstruct%res_latlon_tracers = res_latlon_tracers
694 write(unit, nml=fv_core_nml)
695 write(unit, nml=test_case_nml)
697 write(unit, nml=nggps_diag_nml)
707 if (.not.
nested) atm(n)%neststruct%npx_global =
npx 714 if (
npx >= 120 ) ns0 = 6
716 if (
npx <= 45 )
then 718 elseif (
npx <=90 )
then 730 n0split = nint( ns0*abs(dt_atmos)*dimx/(dt0*dim0) + 0.49 )
743 n0split = nint( 2.*
umax*dt_atmos/sqrt(dxmin**2 + dymin**2) + 0.49 )
745 n0split =
max( 1, n0split )
748 n_split = nint(
real(n0split)/
real(k_split*abs(p_split)) * stretch_fac + 0.5 )
749 if(is_master())
write(*,*)
'For k_split (remapping)=',
k_split 750 if(is_master())
write(*,198)
'n_split is set to ',
n_split,
' for resolution-dt=',
npx,
npy,
ntiles,dt_atmos
752 if(is_master())
write(*,199)
'Using n_split from the namelist: ',
n_split 754 if (is_master() .and. n == 1 .and. abs(p_split) > 1)
then 755 write(*,199)
'Using p_split = ', p_split
758 if (atm(n)%neststruct%nested)
then 761 atm(n)%parent_grid => atm(i)
765 if (.not.
associated(atm(n)%parent_grid))
then 766 write(errstring,
'(2(A,I3))')
"Could not find parent grid #",
parent_grid_num,
' for grid #', n
771 if ( atm(n)%parent_grid%flagstruct%grid_type < 3 .and. &
772 .not.
associated(atm(n)%parent_grid%parent_grid))
then 774 call mpp_error(fatal,
'parent tile must be between 1 and 6 if the parent is a cubed-sphere grid')
778 call mpp_error(fatal,
'parent tile must be 1 if the parent is not a cubed-sphere grid')
787 call mpp_error(warning,
'npx-1 or npy-1 is not evenly divisible by the refinement ratio; averaging update cannot be mass-conservative.')
793 call mpp_error(fatal,
'The global energy fixer cannot be used on a nested grid. consv_te must be set to 0.')
796 atm(n)%neststruct%refinement_of_global = atm(n)%neststruct%refinement * atm(n)%parent_grid%neststruct%refinement_of_global
798 atm(n)%neststruct%npx_global = atm(n)%neststruct%refinement * atm(n)%parent_grid%neststruct%npx_global
801 atm(n)%neststruct%ioffset = -999
802 atm(n)%neststruct%joffset = -999
803 atm(n)%neststruct%parent_tile = -1
804 atm(n)%neststruct%refinement = -1
807 if (atm(n)%neststruct%nested)
then 808 if (atm(n)%flagstruct%grid_type >= 4 .and. atm(n)%parent_grid%flagstruct%grid_type >= 4)
then 809 atm(n)%flagstruct%dx_const = atm(n)%parent_grid%flagstruct%dx_const /
real(Atm(n)%neststruct%refinement)
810 atm(n)%flagstruct%dy_const = atm(n)%parent_grid%flagstruct%dy_const /
real(Atm(n)%neststruct%refinement)
825 if (is_master())
write(*,*)
" fv_control: using original values for divergence damping " 841 m_split = 1. + abs(dt_atmos)/
real(k_split*n_split*abs(p_split))
842 if (abs(
a_imp) < 0.5)
then 843 if(is_master())
write(*,199)
'm_split is set to ',
m_split 847 write(*,*)
'Off center implicit scheme param=',
a_imp 848 write(*,*)
' p_fac=',
p_fac 855 write(*,197)
'Using non_ortho : ',
non_ortho 859 198
format(a,i2.2,a,i4.4,
'x',i4.4,
'x',i1.1,
'-',f9.3)
865 allocate(atm(n)%neststruct%child_grids(
size(atm)))
866 atm(n)%neststruct%child_grids = .false.
876 if (any(atm(n)%pelist ==
gid))
then 877 call mpp_set_current_pelist(atm(n)%pelist)
878 call mpp_get_current_pelist(atm(n)%pelist,
commid=
commid)
882 if (atm(n)%neststruct%nested)
then 883 atm(n)%neststruct%parent_proc = any(atm(n)%parent_grid%pelist ==
gid)
884 atm(n)%neststruct%child_proc = any(atm(n)%pelist ==
gid)
890 call switch_current_atm(atm(n),.false.)
899 call broadcast_domains(atm)
902 call switch_current_atm(atm(n))
906 if (mod(
npx-1 , refinement) /= 0 .or. mod(
npy-1, refinement) /= 0) &
907 call mpp_error(fatal,
'npx or npy not an even refinement of its coarse grid.')
911 call mpp_define_nest_domains(atm(n)%neststruct%nest_domain, atm(n)%domain, atm(
parent_grid_num)%domain, &
916 (/ (i,i=0,mpp_npes()-1) /), extra_halo = 0, name=
"nest_domain")
917 call mpp_define_nest_domains(atm(n)%neststruct%nest_domain, atm(n)%domain, atm(
parent_grid_num)%domain, &
922 (/ (i,i=0,mpp_npes()-1) /), extra_halo = 0, name=
"nest_domain")
927 if (atm(n)%neststruct%nestbctype > 1)
then 929 call mpp_error(fatal,
'nestbctype > 1 not yet implemented')
943 atm(n)%neststruct%upoff = 0
949 if (n == 1)
allocate(atm(nn)%neststruct%nest_domain_all(
size(atm)))
950 atm(nn)%neststruct%nest_domain_all(n) = atm(n)%neststruct%nest_domain
956 if (any(atm(n)%pelist ==
gid))
then 957 call mpp_set_current_pelist(atm(n)%pelist)
965 type(fv_atmos_type),
intent(inout),
allocatable :: Atm(:)
966 logical,
allocatable,
intent(INOUT) :: grids_on_this_pe(:)
967 integer,
intent(INOUT) :: p_split
968 character(100) :: pe_list_name
969 integer :: nest_pes(100)
970 integer :: n, npes, ntiles, pecounter, i
971 integer,
allocatable :: pelist(:)
972 integer :: f_unit, ios, ierr
975 namelist /nest_nml/
ngrids, ntiles, nest_pes, p_split
982 #ifdef INTERNAL_FILE_NML 983 read (input_nml_file,nest_nml,iostat=ios)
986 f_unit=open_namelist_file()
988 read (f_unit,nest_nml,iostat=ios)
990 call close_file(f_unit)
993 if (ntiles /= -999)
ngrids = ntiles
994 if (
ngrids > 10)
call mpp_error(fatal,
"More than 10 nested grids not supported")
998 allocate(grids_on_this_pe(
ngrids))
999 grids_on_this_pe = .false.
1011 allocate(atm(1)%pelist(npes))
1012 atm(1)%pelist = (/(i, i=0, npes-1)/)
1013 atm(1)%pelist = atm(1)%pelist + mpp_root_pe()
1014 call mpp_declare_pelist(atm(1)%pelist)
1015 call mpp_set_current_pelist(atm(1)%pelist)
1018 call setup_master(atm(1)%pelist)
1019 grids_on_this_pe(1) = .true.
1020 atm(1)%npes_this_grid = npes
1024 pecounter = mpp_root_pe()
1029 write(pe_list_name,
'(A4, I2.2)')
'nest', n
1032 if (nest_pes(n) == 0)
then 1033 if (n <
ngrids)
call mpp_error(fatal,
'Only nest_pes(ngrids) in nest_nml can be zero; preceeding values must be nonzero.')
1034 allocate(atm(n)%pelist(npes-pecounter))
1035 atm(n)%pelist = (/(i, i=pecounter, npes-1)/)
1037 call mpp_declare_pelist(atm(n)%pelist, trim(pe_list_name))
1039 if (.not. file_exist(
'input_'//trim(pe_list_name)//
'.nml'))
then 1040 call mpp_error(fatal,
"Could not find nested grid namelist input_"//trim(pe_list_name)//
".nml")
1045 allocate(atm(n)%pelist(nest_pes(n)))
1046 atm(n)%pelist = (/ (i, i=pecounter, pecounter+nest_pes(n)-1) /)
1047 if (atm(n)%pelist(nest_pes(n)) >= npes)
then 1048 call mpp_error(fatal,
'PEs assigned by nest_pes in nest_nml exceeds number of available PEs.')
1051 call mpp_declare_pelist(atm(n)%pelist, trim(pe_list_name))
1054 if (.not. file_exist(
'input_'//trim(pe_list_name)//
'.nml'))
then 1055 call mpp_error(fatal,
"Could not find nested grid namelist input_"//trim(pe_list_name)//
".nml")
1058 pecounter = pecounter+nest_pes(n)
1064 atm(n)%npes_this_grid =
size(atm(n)%pelist)
1065 if (any(
gid == atm(n)%pelist))
then 1066 call mpp_set_current_pelist(atm(n)%pelist)
1069 call setup_master(atm(n)%pelist)
1070 grids_on_this_pe(n) = .true.
1071 #if defined (INTERNAL_FILE_NML) 1072 if (n > 1)
call read_input_nml
1080 if (pecounter /= npes)
then 1081 call mpp_error(fatal,
'nest_pes in nest_nml does not assign all of the available PEs.')
1091 type(fv_atmos_type),
intent(INOUT),
target :: Atm
1101 hord_mt => atm%flagstruct%hord_mt
1102 kord_mt => atm%flagstruct%kord_mt
1103 kord_wz => atm%flagstruct%kord_wz
1104 hord_vt => atm%flagstruct%hord_vt
1105 hord_tm => atm%flagstruct%hord_tm
1106 hord_dp => atm%flagstruct%hord_dp
1107 kord_tm => atm%flagstruct%kord_tm
1108 hord_tr => atm%flagstruct%hord_tr
1109 kord_tr => atm%flagstruct%kord_tr
1110 scale_z => atm%flagstruct%scale_z
1111 w_max => atm%flagstruct%w_max
1112 z_min => atm%flagstruct%z_min
1113 nord => atm%flagstruct%nord
1114 nord_tr => atm%flagstruct%nord_tr
1115 dddmp => atm%flagstruct%dddmp
1116 d2_bg => atm%flagstruct%d2_bg
1117 d4_bg => atm%flagstruct%d4_bg
1118 vtdm4 => atm%flagstruct%vtdm4
1119 trdm2 => atm%flagstruct%trdm2
1120 d2_bg_k1 => atm%flagstruct%d2_bg_k1
1121 d2_bg_k2 => atm%flagstruct%d2_bg_k2
1129 consv_am => atm%flagstruct%consv_am
1131 do_f3d => atm%flagstruct%do_f3d
1136 beta => atm%flagstruct%beta
1138 n_sponge => atm%flagstruct%n_sponge
1139 d_ext => atm%flagstruct%d_ext
1140 nwat => atm%flagstruct%nwat
1141 use_logp => atm%flagstruct%use_logp
1143 inline_q => atm%flagstruct%inline_q
1150 p_fac => atm%flagstruct%p_fac
1151 a_imp => atm%flagstruct%a_imp
1152 n_split => atm%flagstruct%n_split
1153 m_split => atm%flagstruct%m_split
1154 k_split => atm%flagstruct%k_split
1155 use_logp => atm%flagstruct%use_logp
1156 q_split => atm%flagstruct%q_split
1158 npx => atm%flagstruct%npx
1159 npy => atm%flagstruct%npy
1160 npz => atm%flagstruct%npz
1161 npz_rst => atm%flagstruct%npz_rst
1162 ncnst => atm%flagstruct%ncnst
1163 pnats => atm%flagstruct%pnats
1164 dnats => atm%flagstruct%dnats
1165 ntiles => atm%flagstruct%ntiles
1166 nf_omega => atm%flagstruct%nf_omega
1168 na_init => atm%flagstruct%na_init
1169 p_ref => atm%flagstruct%p_ref
1170 dry_mass => atm%flagstruct%dry_mass
1171 nt_prog => atm%flagstruct%nt_prog
1172 nt_phys => atm%flagstruct%nt_phys
1173 tau_h2o => atm%flagstruct%tau_h2o
1174 delt_max => atm%flagstruct%delt_max
1175 d_con => atm%flagstruct%d_con
1176 ke_bg => atm%flagstruct%ke_bg
1177 consv_te => atm%flagstruct%consv_te
1178 tau => atm%flagstruct%tau
1181 dwind_2d => atm%flagstruct%dwind_2d
1184 fill => atm%flagstruct%fill
1185 fill_dp => atm%flagstruct%fill_dp
1186 fill_wz => atm%flagstruct%fill_wz
1196 fv_debug => atm%flagstruct%fv_debug
1197 srf_init => atm%flagstruct%srf_init
1198 mountain => atm%flagstruct%mountain
1200 z_tracer => atm%flagstruct%z_tracer
1202 fv_land => atm%flagstruct%fv_land
1203 nudge => atm%flagstruct%nudge
1204 nudge_ic => atm%flagstruct%nudge_ic
1205 ncep_ic => atm%flagstruct%ncep_ic
1206 nggps_ic => atm%flagstruct%nggps_ic
1207 ecmwf_ic => atm%flagstruct%ecmwf_ic
1208 gfs_phil => atm%flagstruct%gfs_phil
1220 hybrid_z => atm%flagstruct%hybrid_z
1221 make_nh => atm%flagstruct%Make_NH
1223 nudge_qv => atm%flagstruct%nudge_qv
1225 a2b_ord => atm%flagstruct%a2b_ord
1226 c2l_ord => atm%flagstruct%c2l_ord
1227 ndims => atm%flagstruct%ndims
1229 dx_const => atm%flagstruct%dx_const
1230 dy_const => atm%flagstruct%dy_const
1236 deglat => atm%flagstruct%deglat
1238 nested => atm%neststruct%nested
1244 nsponge => atm%neststruct%nsponge
1245 s_weight => atm%neststruct%s_weight
1246 ioffset => atm%neststruct%ioffset
1247 joffset => atm%neststruct%joffset
subroutine, public fv_restart_end(Atm, grids_on_this_pe)
real(kind=r_grid), pointer dy_const
subroutine init_nesting(Atm, grids_on_this_pe, p_split)
real, parameter, public radius
Radius of the Earth [m].
subroutine, public grid_utils_end
logical, pointer make_hybrid_z
integer, parameter, public model_atmos
logical, pointer warm_start
logical, pointer nudge_qv
logical, pointer gfs_phil
integer max_refinement_of_global
logical, pointer use_hydro_pressure
real, parameter, public ptop_min
logical, pointer reset_eta
logical, pointer do_vort_damp
logical, pointer breed_vortex_inline
character(len=128), pointer res_latlon_tracers
integer, parameter, public input_str_length
subroutine setup_pointers(Atm)
real(kind=8), parameter, public pi_8
Ratio of circle circumference to diameter [N/A].
integer, pointer n_sponge
logical, pointer moist_phys
logical, pointer adjust_dry_mass
logical, pointer convert_ke
integer, pointer n_zfilter
subroutine, public set_eta(km, ks, ptop, ak, bk)
logical, pointer do_held_suarez
subroutine allocate_fv_atmos_type(Atm, isd_in, ied_in, jsd_in, jed_in, is_in, ie_in, js_in, je_in, npx_in, npy_in, npz_in, ndims_in, ncnst_in, nq_in, ng_in, dummy, alloc_2d, ngrids_in)
subroutine, public fv_end(Atm, grids_on_this_pe, restarts)
character(len=128), pointer res_latlon_dynamics
integer, pointer nestupdate
real(kind=r_grid), pointer target_lat
subroutine, public get_tracer_indices(model, ind, prog_ind, diag_ind, fam_ind)
real(kind=r_grid), pointer deglat_start
integer, pointer remap_option
logical, pointer check_negative
integer, pointer refinement
integer, dimension(:), allocatable, public pelist_all
real(kind=r_grid), pointer dx_const
real(kind=r_grid), pointer target_lon
real, parameter, public rdgas
Gas constant for dry air [J/kg/deg].
logical, pointer inline_q
subroutine, public get_number_tracers(model, num_tracers, num_prog, num_diag, num_family)
integer, pointer print_freq
real, pointer d2_divg_max_k1
logical, pointer no_dycore
logical, pointer reproduce_sum
logical, pointer nudge_ic
real(kind=r_grid), pointer deglon_stop
character(len=80), pointer grid_name
integer function, public check_nml_error(IOSTAT, NML_NAME)
logical, pointer range_warn
subroutine timing_prt(gid)
real(kind=r_grid), pointer deglat
logical, pointer agrid_vel_rst
character(len=input_str_length), dimension(:), allocatable, target, public input_nml_file
logical, pointer filter_phys
real(kind=r_grid), pointer deglon_start
logical, pointer use_logp
integer, pointer nord_zs_filter
subroutine, public set_tracer_profile(model, n, tracer, err_msg)
integer, pointer fv_sg_adj
logical, pointer mountain
subroutine, public fv_init(Atm, dt_atmos, grids_on_this_pe, p_split)
logical, pointer consv_am
integer, parameter, public ng
real, public soliton_size
subroutine timing_on(blk_name)
logical, pointer fv_diag_ic
logical, pointer srf_init
logical, pointer hybrid_z
integer, pointer nestbctype
logical, pointer hydrostatic
logical, pointer z_tracer
real(kind=r_grid), pointer deglat_stop
logical, pointer old_divg_damp
integer, parameter, public r_grid
subroutine, public fv_diag_init_gn(Atm)
logical function, public check_if_prognostic(model, n, err_msg)
logical, pointer full_zs_filter
integer, public nsolitons
subroutine, public fv_io_exit
subroutine run_setup(Atm, dt_atmos, grids_on_this_pe, p_split)
real, public soliton_umax
logical, pointer do_uni_zfull
integer, dimension(:), pointer io_layout
real, pointer d2_divg_max_k2
real, parameter, public grav
Acceleration due to gravity [m/s^2].
real(kind=r_grid), pointer stretch_fac
logical, pointer fv_debug
logical, public bubble_do
subroutine, public grid_utils_init(Atm, npx, npy, npz, non_ortho, grid_type, c2l_order)
logical, pointer use_new_ncep
character(len=120), pointer grid_file
subroutine, public get_tracer_names(model, n, name, longname, units, err_msg)
logical, pointer do_sat_adj
subroutine, public fv_restart_init()
subroutine deallocate_fv_atmos_type(Atm)
logical, pointer use_old_omega
integer, pointer nf_omega
logical, pointer twowaynest
integer, public test_case
integer, pointer n_zs_filter
logical, pointer ecmwf_ic
logical, pointer external_ic
integer, dimension(:), pointer layout
logical, pointer phys_hydrostatic
logical, pointer use_ncep_phy
logical, pointer reed_cond_only
logical, pointer do_schmidt
real, parameter, public kappa
RDGAS / CP_AIR [dimensionless].
logical, pointer nggps_ic
logical, pointer adj_mass_vmr
Derived type containing the data.
logical, pointer do_reed_physics
real(fp), parameter, public pi
subroutine timing_off(blk_name)
integer, pointer parent_tile
logical, pointer dwind_2d
logical, pointer non_ortho
subroutine, public register_tracers(model, num_tracers, num_prog, num_diag, num_family)
logical, pointer adiabatic