120 use constants_mod,
only: pi=>pi_8, kappa, radius, grav, rdgas
121 use field_manager_mod,
only: model_atmos
122 use fms_mod,
only: write_version_number, open_namelist_file, &
123 check_nml_error, close_file, file_exist
124 use mpp_mod,
only: fatal, mpp_error, mpp_pe, stdlog, &
125 mpp_npes, mpp_get_current_pelist, &
126 input_nml_file, get_unit, warning, &
127 read_ascii_file, input_str_length
128 use mpp_domains_mod,
only: mpp_get_data_domain, mpp_get_compute_domain
129 use tracer_manager_mod,
only: tm_get_number_tracers => get_number_tracers, &
130 tm_get_tracer_index => get_tracer_index, &
131 tm_get_tracer_indices => get_tracer_indices, &
132 tm_set_tracer_profile => set_tracer_profile, &
133 tm_get_tracer_names => get_tracer_names, &
134 tm_check_if_prognostic=> check_if_prognostic,&
135 tm_register_tracers => register_tracers
144 use fv_mp_mod,
only: mp_start, mp_assign_gid, domain_decomp
146 use fv_mp_mod,
only: broadcast_domains, mp_barrier, is_master, setup_master
150 use mpp_domains_mod,
only: domain2d
151 use mpp_domains_mod,
only: mpp_define_nest_domains, nest_domain_type, mpp_get_global_domain
152 use mpp_domains_mod,
only: mpp_get_c2f_index, mpp_get_f2c_index, mpp_broadcast_domain
153 use mpp_domains_mod,
only: center, corner, north, east, west, south
154 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
158 use constants_mod,
only: rvgas, cp_air
366 #include<file_version.h> 374 subroutine fv_init(Atm, dt_atmos, grids_on_this_pe, p_split)
376 type(
fv_atmos_type),
allocatable,
intent(inout),
target :: atm(:)
377 real,
intent(in) :: dt_atmos
378 logical,
allocatable,
intent(INOUT) :: grids_on_this_pe(:)
379 integer,
intent(INOUT) :: p_split
381 integer :: i, j, k, n, p
385 integer :: num_family
387 integer :: isc_p, iec_p, jsc_p, jec_p, isg, ieg, jsg, jeg, upoff, jind
408 call run_setup(atm,dt_atmos, grids_on_this_pe, p_split)
413 call switch_current_atm(atm(n))
426 write(*,*)
'ncnst=',
ncnst,
' num_prog=',
nt_prog,
' pnats=',
pnats,
' dnats=',
dnats,
' num_family=',num_family
430 if (grids_on_this_pe(n))
then 432 atm(n)%bd%isc, atm(n)%bd%iec, atm(n)%bd%jsc, atm(n)%bd%jec, &
435 if (grids_on_this_pe(n))
then 437 call switch_current_atm(atm(n))
440 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 441 if (is_master())
write(*,
'(6I6)') atm(n)%bd%isc, atm(n)%bd%iec, atm(n)%bd%jsc, atm(n)%bd%jec, n
442 call mpp_error(fatal,
'Domain Decomposition: Cubed Sphere compute domain has a & 443 &minium requirement of 4 points in X and Y, respectively')
449 atm(n)%gridstruct%nested => atm(n)%neststruct%nested
450 atm(n)%gridstruct%grid_type => atm(n)%flagstruct%grid_type
451 atm(n)%flagstruct%grid_number => atm(n)%grid_number
452 atm(n)%gridstruct%regional => atm(n)%flagstruct%regional
461 if ( is_master() )
then 464 write(*,*)
'Divergence damping Coefficients' 465 write(*,*)
'For small dt=', sdt
466 write(*,*)
'External mode del-2 (m**2/s)=',
d_ext*atm(n)%gridstruct%da_min_c/sdt
467 write(*,*)
'Internal mode del-2 SMAG dimensionless coeff=',
dddmp 468 write(*,*)
'Internal mode del-2 background diff=',
d2_bg*atm(n)%gridstruct%da_min_c/sdt
471 write(*,*)
'Internal mode del-4 background diff=',
d4_bg 472 write(*,*)
'Vorticity del-4 (m**4/s)=', (
vtdm4*atm(n)%gridstruct%da_min)**2/sdt*1.e-6
474 if (
nord==2)
write(*,*)
'Internal mode del-6 background diff=',
d4_bg 475 if (
nord==3)
write(*,*)
'Internal mode del-8 background diff=',
d4_bg 476 write(*,*)
'tracer del-2 diff=',
trdm2 478 write(*,*)
'Vorticity del-4 (m**4/s)=', (
vtdm4*atm(n)%gridstruct%da_min)**2/sdt*1.e-6
479 write(*,*)
'beta=',
beta 497 atm(n)%bd%isc, atm(n)%bd%iec, atm(n)%bd%jsc, atm(n)%bd%jec, &
501 if (atm(n)%neststruct%nested)
then 503 call mpp_get_global_domain( atm(n)%parent_grid%domain, &
508 if (
gid == atm(n)%parent_grid%pelist(1))
then 509 call mpp_send(atm(n)%parent_grid%grid_global(isg-ng:ieg+1+ng,jsg-ng:jeg+1+ng,1:2,
parent_tile), &
510 size(atm(n)%parent_grid%grid_global(isg-ng:ieg+1+ng,jsg-ng:jeg+1+ng,1:2,
parent_tile)), &
515 if (atm(n)%neststruct%twowaynest)
then 523 atm(n)%neststruct%ind_update_h = -99999
525 if (atm(n)%parent_grid%tile == atm(n)%neststruct%parent_tile)
then 527 isc_p = atm(n)%parent_grid%bd%isc
528 iec_p = atm(n)%parent_grid%bd%iec
529 jsc_p = atm(n)%parent_grid%bd%jsc
530 jec_p = atm(n)%parent_grid%bd%jec
531 upoff = atm(n)%neststruct%upoff
533 atm(n)%neststruct%jsu = jsc_p
534 atm(n)%neststruct%jeu = jsc_p-1
538 atm(n)%neststruct%ind_update_h(i,j,2) = -9999
540 atm(n)%neststruct%jsu = atm(n)%neststruct%jsu + 1
543 atm(n)%neststruct%ind_update_h(i,j,2) = -9999
548 atm(n)%neststruct%ind_update_h(i,j,2) = jind
555 atm(n)%neststruct%isu = isc_p
556 atm(n)%neststruct%ieu = isc_p-1
559 atm(n)%neststruct%ind_update_h(i,:,1) = -9999
560 atm(n)%neststruct%isu = atm(n)%neststruct%isu + 1
562 atm(n)%neststruct%ind_update_h(i,:,1) = -9999
589 if (
ntilesme > 1)
call switch_current_atm(atm(1))
597 subroutine fv_end(Atm, grids_on_this_pe)
600 logical,
intent(INOUT) :: grids_on_this_pe(:)
624 subroutine run_setup(Atm, dt_atmos, grids_on_this_pe, p_split)
626 real,
intent(in) :: dt_atmos
627 logical,
intent(INOUT) :: grids_on_this_pe(:)
628 integer,
intent(INOUT) :: p_split
630 character(len=80) :: tracername, errstring
631 character(len=32) :: nested_grid_filename
632 integer :: ios, ierr, f_unit, unit
640 real :: dimx, dl, dp, dxmin, dymin, d_fac
645 integer :: pe_counter
1020 use_logp,
p_fac,
a_imp,
k_split,
n_split,
m_split,
q_split,
print_freq,
write_3d_diags,
do_schmidt, &
1025 dddmp,
d2_bg,
d4_bg,
vtdm4,
trdm2,
d_ext,
delt_max,
beta,
non_ortho,
n_sponge, &
1043 namelist /multi_gases_nml/ rilist,cpilist
1047 pe_counter = mpp_root_pe()
1054 #ifdef INTERNAL_FILE_NML 1056 read (input_nml_file,fv_grid_nml,iostat=ios)
1057 ierr = check_nml_error(ios,
'fv_grid_nml')
1059 f_unit=open_namelist_file()
1062 read (f_unit,fv_grid_nml,iostat=ios)
1063 ierr = check_nml_error(ios,
'fv_grid_nml')
1064 call close_file(f_unit)
1067 call write_version_number (
'FV_CONTROL_MOD', version )
1069 write(unit, nml=fv_grid_nml)
1073 call switch_current_atm(atm(n), .false.)
1075 atm(n)%grid_number = n
1076 if (grids_on_this_pe(n))
then 1080 #ifdef INTERNAL_FILE_NML 1083 write(nested_grid_filename,
'(A4, I2.2)')
'nest', n
1084 call read_input_nml(nested_grid_filename)
1087 read (input_nml_file,fv_core_nml,iostat=ios)
1088 ierr = check_nml_error(ios,
'fv_core_nml')
1090 if( is_master() ) print *,
' enter multi_gases: ncnst = ',
ncnst 1091 allocate (rilist(0:
ncnst))
1092 allocate (cpilist(0:
ncnst))
1098 cpilist(1) = 4*cp_air
1100 read (input_nml_file,multi_gases_nml,iostat=ios)
1101 ierr = check_nml_error(ios,
'multi_gases_nml')
1104 read (input_nml_file,test_case_nml,iostat=ios)
1105 ierr = check_nml_error(ios,
'test_case_nml')
1110 if (
size(atm) == 1)
then 1111 f_unit = open_namelist_file()
1112 else if (n == 1)
then 1113 f_unit = open_namelist_file(
'input.nml')
1115 write(nested_grid_filename,
'(A10, I2.2, A4)')
'input_nest', n,
'.nml' 1116 f_unit = open_namelist_file(nested_grid_filename)
1120 read (f_unit,fv_core_nml,iostat=ios)
1121 ierr = check_nml_error(ios,
'fv_core_nml')
1124 if( is_master() ) print *,
' enter multi_gases: ncnst = ',
ncnst 1125 allocate (rilist(0:
ncnst))
1126 allocate (cpilist(0:
ncnst))
1132 cpilist(1) = 4*cp_air
1135 read (f_unit,multi_gases_nml,iostat=ios)
1136 ierr = check_nml_error(ios,
'multi_gases_nml')
1140 read (f_unit,test_case_nml,iostat=ios)
1141 ierr = check_nml_error(ios,
'test_case_nml')
1142 call close_file(f_unit)
1144 write(unit, nml=fv_core_nml)
1145 write(unit, nml=test_case_nml)
1147 write(unit, nml=multi_gases_nml)
1169 if (
npx >= 120 ) ns0 = 6
1171 if (
npx <= 45 )
then 1173 elseif (
npx <= 90 )
then 1180 dimx = max(
npx, 2*(
npy-1) )
1184 n0split = nint( ns0*abs(dt_atmos)*dimx/(dt0*dim0) + 0.49 )
1197 n0split = nint( 2.*
umax*dt_atmos/sqrt(dxmin**2 + dymin**2) + 0.49 )
1199 n0split = max( 1, n0split )
1203 if(is_master())
write(*,*)
'For k_split (remapping)=',
k_split 1204 if(is_master())
write(*,198)
'n_split is set to ',
n_split,
' for resolution-dt=',
npx,
npy,
ntiles,dt_atmos
1206 if(is_master())
write(*,199)
'Using n_split from the namelist: ',
n_split 1208 if (is_master() .and. n == 1 .and. abs(p_split) > 1)
then 1209 write(*,199)
'Using p_split = ', p_split
1212 if (atm(n)%neststruct%nested)
then 1215 atm(n)%parent_grid => atm(i)
1219 if (.not.
associated(atm(n)%parent_grid))
then 1220 write(errstring,
'(2(A,I3))')
"Could not find parent grid #",
parent_grid_num,
' for grid #', n
1221 call mpp_error(fatal, errstring)
1225 if ( atm(n)%parent_grid%flagstruct%grid_type < 3 .and. &
1226 .not.
associated(atm(n)%parent_grid%parent_grid))
then 1228 call mpp_error(fatal,
'parent tile must be between 1 and 6 if the parent is a cubed-sphere grid')
1232 call mpp_error(fatal,
'parent tile must be 1 if the parent is not a cubed-sphere grid')
1236 if (
refinement < 1 )
call mpp_error(fatal,
'grid refinement must be positive')
1241 call mpp_error(warning,
'npx-1 or npy-1 is not evenly divisible by the refinement ratio; averaging update cannot be mass-conservative.')
1247 call mpp_error(fatal,
'The global energy fixer cannot be used on a nested grid. consv_te must be set to 0.')
1250 atm(n)%neststruct%refinement_of_global = atm(n)%neststruct%refinement * atm(n)%parent_grid%neststruct%refinement_of_global
1252 atm(n)%neststruct%npx_global = atm(n)%neststruct%refinement * atm(n)%parent_grid%neststruct%npx_global
1255 atm(n)%neststruct%ioffset = -999
1256 atm(n)%neststruct%joffset = -999
1257 atm(n)%neststruct%parent_tile = -1
1258 atm(n)%neststruct%refinement = -1
1261 if (atm(n)%neststruct%nested)
then 1262 if (atm(n)%flagstruct%grid_type >= 4 .and. atm(n)%parent_grid%flagstruct%grid_type >= 4)
then 1263 atm(n)%flagstruct%dx_const = atm(n)%parent_grid%flagstruct%dx_const /
real(atm(n)%neststruct%
refinement)
1264 atm(n)%flagstruct%dy_const = atm(n)%parent_grid%flagstruct%dy_const /
real(atm(n)%neststruct%
refinement)
1279 if (is_master())
write(*,*)
" fv_control: using original values for divergence damping " 1296 if (abs(
a_imp) < 0.5)
then 1297 if(is_master())
write(*,199)
'm_split is set to ',
m_split 1300 if(is_master())
then 1301 write(*,*)
'Off center implicit scheme param=',
a_imp 1302 write(*,*)
' p_fac=',
p_fac 1306 if(is_master())
then 1308 write(*,197)
'Using non_ortho : ',
non_ortho 1312 198
format(a,i2.2,a,i4.4,
'x',i4.4,
'x',i1.1,
'-',f9.3)
1318 allocate(atm(n)%neststruct%child_grids(
size(atm)))
1319 atm(n)%neststruct%child_grids = .false.
1329 if (any(atm(n)%pelist ==
gid))
then 1330 call mpp_set_current_pelist(atm(n)%pelist)
1331 call mpp_get_current_pelist(atm(n)%pelist,
commid=
commid)
1335 if (atm(n)%neststruct%nested)
then 1336 atm(n)%neststruct%parent_proc = any(atm(n)%parent_grid%pelist ==
gid)
1337 atm(n)%neststruct%child_proc = any(atm(n)%pelist ==
gid)
1343 call switch_current_atm(atm(n),.false.)
1352 call broadcast_domains(atm)
1355 call switch_current_atm(atm(n))
1360 call mpp_error(fatal,
'npx or npy not an even refinement of its coarse grid.')
1364 call mpp_define_nest_domains(atm(n)%neststruct%nest_domain, atm(n)%domain, atm(
parent_grid_num)%domain, &
1369 (/ (i,i=0,mpp_npes()-1) /), extra_halo = 0, name=
"nest_domain")
1370 call mpp_define_nest_domains(atm(n)%neststruct%nest_domain, atm(n)%domain, atm(
parent_grid_num)%domain, &
1375 (/ (i,i=0,mpp_npes()-1) /), extra_halo = 0, name=
"nest_domain")
1380 if (atm(n)%neststruct%nestbctype > 1)
then 1382 call mpp_error(fatal,
'nestbctype > 1 not yet implemented')
1396 atm(n)%neststruct%upoff = 0
1402 if (n == 1)
allocate(atm(nn)%neststruct%nest_domain_all(
size(atm)))
1403 atm(nn)%neststruct%nest_domain_all(n) = atm(n)%neststruct%nest_domain
1409 if (any(atm(n)%pelist ==
gid))
then 1410 call mpp_set_current_pelist(atm(n)%pelist)
1414 end subroutine run_setup
1415 subroutine init_nesting(Atm, grids_on_this_pe, p_split)
1417 type(fv_atmos_type),
intent(inout),
allocatable :: Atm(:)
1418 logical,
allocatable,
intent(INOUT) :: grids_on_this_pe(:)
1419 integer,
intent(INOUT) :: p_split
1420 character(100) :: pe_list_name
1421 integer :: nest_pes(100)
1422 integer :: n, npes, ntiles, pecounter, i
1423 integer,
allocatable :: pelist(:)
1424 integer :: f_unit, ios, ierr
1427 namelist /nest_nml/
ngrids, ntiles, nest_pes, p_split
1434 #ifdef INTERNAL_FILE_NML 1435 read (input_nml_file,nest_nml,iostat=ios)
1436 ierr = check_nml_error(ios,
'nest_nml')
1438 f_unit=open_namelist_file()
1440 read (f_unit,nest_nml,iostat=ios)
1441 ierr = check_nml_error(ios,
'nest_nml')
1442 call close_file(f_unit)
1445 if (ntiles /= -999)
ngrids = ntiles
1446 if (
ngrids > 10)
call mpp_error(fatal,
"More than 10 nested grids not supported")
1450 allocate(grids_on_this_pe(
ngrids))
1451 grids_on_this_pe = .false.
1463 allocate(atm(1)%pelist(npes))
1464 atm(1)%pelist = (/(i, i=0, npes-1)/)
1465 atm(1)%pelist = atm(1)%pelist + mpp_root_pe()
1466 call mpp_declare_pelist(atm(1)%pelist)
1467 call mpp_set_current_pelist(atm(1)%pelist)
1470 call setup_master(atm(1)%pelist)
1471 grids_on_this_pe(1) = .true.
1472 atm(1)%npes_this_grid = npes
1476 pecounter = mpp_root_pe()
1481 write(pe_list_name,
'(A4, I2.2)')
'nest', n
1484 if (nest_pes(n) == 0)
then 1485 if (n <
ngrids)
call mpp_error(fatal,
'Only nest_pes(ngrids) in nest_nml can be zero; preceeding values must be nonzero.')
1486 allocate(atm(n)%pelist(npes-pecounter))
1487 atm(n)%pelist = (/(i, i=pecounter, npes-1)/)
1489 call mpp_declare_pelist(atm(n)%pelist, trim(pe_list_name))
1491 if (.not. file_exist(
'input_'//trim(pe_list_name)//
'.nml'))
then 1492 call mpp_error(fatal,
"Could not find nested grid namelist input_"//trim(pe_list_name)//
".nml")
1497 allocate(atm(n)%pelist(nest_pes(n)))
1498 atm(n)%pelist = (/ (i, i=pecounter, pecounter+nest_pes(n)-1) /)
1499 if (atm(n)%pelist(nest_pes(n)) >= npes)
then 1500 call mpp_error(fatal,
'PEs assigned by nest_pes in nest_nml exceeds number of available PEs.')
1503 call mpp_declare_pelist(atm(n)%pelist, trim(pe_list_name))
1506 if (.not. file_exist(
'input_'//trim(pe_list_name)//
'.nml'))
then 1507 call mpp_error(fatal,
"Could not find nested grid namelist input_"//trim(pe_list_name)//
".nml")
1510 pecounter = pecounter+nest_pes(n)
1516 atm(n)%npes_this_grid =
size(atm(n)%pelist)
1517 if (any(
gid == atm(n)%pelist))
then 1518 call mpp_set_current_pelist(atm(n)%pelist)
1521 call setup_master(atm(n)%pelist)
1522 grids_on_this_pe(n) = .true.
1527 if (pecounter /= npes)
then 1528 call mpp_error(fatal,
'nest_pes in nest_nml does not assign all of the available PEs.')
1541 type(fv_atmos_type),
intent(INOUT),
target :: Atm
1551 hord_mt => atm%flagstruct%hord_mt
1552 kord_mt => atm%flagstruct%kord_mt
1553 kord_wz => atm%flagstruct%kord_wz
1554 hord_vt => atm%flagstruct%hord_vt
1555 hord_tm => atm%flagstruct%hord_tm
1556 hord_dp => atm%flagstruct%hord_dp
1557 kord_tm => atm%flagstruct%kord_tm
1558 hord_tr => atm%flagstruct%hord_tr
1559 kord_tr => atm%flagstruct%kord_tr
1560 scale_z => atm%flagstruct%scale_z
1561 w_max => atm%flagstruct%w_max
1562 z_min => atm%flagstruct%z_min
1563 lim_fac => atm%flagstruct%lim_fac
1564 nord => atm%flagstruct%nord
1565 nord_tr => atm%flagstruct%nord_tr
1566 dddmp => atm%flagstruct%dddmp
1567 d2_bg => atm%flagstruct%d2_bg
1568 d4_bg => atm%flagstruct%d4_bg
1569 vtdm4 => atm%flagstruct%vtdm4
1570 trdm2 => atm%flagstruct%trdm2
1571 d2_bg_k1 => atm%flagstruct%d2_bg_k1
1572 d2_bg_k2 => atm%flagstruct%d2_bg_k2
1580 rf_fast => atm%flagstruct%RF_fast
1581 consv_am => atm%flagstruct%consv_am
1583 do_f3d => atm%flagstruct%do_f3d
1588 beta => atm%flagstruct%beta
1589 n_sponge => atm%flagstruct%n_sponge
1590 d_ext => atm%flagstruct%d_ext
1591 nwat => atm%flagstruct%nwat
1592 use_logp => atm%flagstruct%use_logp
1594 inline_q => atm%flagstruct%inline_q
1600 regional => atm%flagstruct%regional
1603 p_fac => atm%flagstruct%p_fac
1604 a_imp => atm%flagstruct%a_imp
1605 n_split => atm%flagstruct%n_split
1607 fhouri => atm%flagstruct%fhouri
1608 m_split => atm%flagstruct%m_split
1609 k_split => atm%flagstruct%k_split
1610 use_logp => atm%flagstruct%use_logp
1611 q_split => atm%flagstruct%q_split
1614 npx => atm%flagstruct%npx
1615 npy => atm%flagstruct%npy
1616 npz => atm%flagstruct%npz
1617 npz_rst => atm%flagstruct%npz_rst
1618 ncnst => atm%flagstruct%ncnst
1619 pnats => atm%flagstruct%pnats
1620 dnats => atm%flagstruct%dnats
1621 ntiles => atm%flagstruct%ntiles
1622 nf_omega => atm%flagstruct%nf_omega
1624 na_init => atm%flagstruct%na_init
1625 nudge_dz => atm%flagstruct%nudge_dz
1626 p_ref => atm%flagstruct%p_ref
1627 dry_mass => atm%flagstruct%dry_mass
1628 nt_prog => atm%flagstruct%nt_prog
1629 nt_phys => atm%flagstruct%nt_phys
1630 tau_h2o => atm%flagstruct%tau_h2o
1631 delt_max => atm%flagstruct%delt_max
1632 d_con => atm%flagstruct%d_con
1633 ke_bg => atm%flagstruct%ke_bg
1634 consv_te => atm%flagstruct%consv_te
1635 tau => atm%flagstruct%tau
1638 dwind_2d => atm%flagstruct%dwind_2d
1641 fill => atm%flagstruct%fill
1642 fill_dp => atm%flagstruct%fill_dp
1643 fill_wz => atm%flagstruct%fill_wz
1653 fv_debug => atm%flagstruct%fv_debug
1654 srf_init => atm%flagstruct%srf_init
1655 mountain => atm%flagstruct%mountain
1656 remap_t => atm%flagstruct%remap_t
1657 z_tracer => atm%flagstruct%z_tracer
1659 fv_land => atm%flagstruct%fv_land
1660 nudge => atm%flagstruct%nudge
1661 nudge_ic => atm%flagstruct%nudge_ic
1662 ncep_ic => atm%flagstruct%ncep_ic
1663 nggps_ic => atm%flagstruct%nggps_ic
1664 ecmwf_ic => atm%flagstruct%ecmwf_ic
1665 gfs_phil => atm%flagstruct%gfs_phil
1679 hybrid_z => atm%flagstruct%hybrid_z
1680 make_nh => atm%flagstruct%Make_NH
1682 nudge_qv => atm%flagstruct%nudge_qv
1684 a2b_ord => atm%flagstruct%a2b_ord
1685 c2l_ord => atm%flagstruct%c2l_ord
1686 ndims => atm%flagstruct%ndims
1688 dx_const => atm%flagstruct%dx_const
1689 dy_const => atm%flagstruct%dy_const
1695 deglat => atm%flagstruct%deglat
1697 nested => atm%neststruct%nested
1703 nsponge => atm%neststruct%nsponge
1704 s_weight => atm%neststruct%s_weight
1705 ioffset => atm%neststruct%ioffset
1706 joffset => atm%neststruct%joffset
logical, pointer check_negative
logical, pointer reset_eta
logical, pointer do_schmidt
logical, pointer nggps_ic
logical, pointer warm_start
logical, public bubble_do
logical, pointer non_ortho
real(kind=r_grid), pointer deglat
integer, dimension(:), pointer io_layout
integer, pointer bc_update_interval
The module 'fv_mp_mod' is a single program multiple data (SPMD) parallel decompostion/communication m...
subroutine timing_off(blk_name)
The subroutine 'timing_off' stops a timer.
logical, pointer adj_mass_vmr
integer, dimension(:), pointer layout
subroutine, public fv_init(Atm, dt_atmos, grids_on_this_pe, p_split)
The subroutine 'fv_init' initializes FV3.
subroutine, public fv_restart_end(Atm, grids_on_this_pe)
The subroutine 'fv_restart_end' writes ending restart files, terminates I/O, and prints out diagnosti...
logical, pointer dwind_2d
real umax
max wave speed for grid_type>3
logical, pointer write_3d_diags
integer, pointer grid_type
integer, dimension(:), allocatable, public pelist_all
logical, pointer ecmwf_ic
subroutine, public set_eta(km, ks, ptop, ak, bk)
This is the version of set_eta used in fvGFS and AM4.
The module 'multi_gases' peforms multi constitutents computations.
logical, pointer adiabatic
logical, pointer agrid_vel_rst
integer, pointer fv_sg_adj
integer, public test_case
integer max_refinement_of_global
logical, pointer nudge_ic
The module 'fv_io' contains restart facilities for FV core.
real(kind=r_grid), pointer deglon_start
logical, pointer nudge_dz
logical, pointer use_logp
integer, parameter, public r_grid
real, dimension(:), allocatable ri
subroutine, public fv_diag_init_gn(Atm)
real(kind=r_grid), pointer target_lat
subroutine init_nesting(Atm, grids_on_this_pe, p_split)
integer, pointer parent_tile
logical, pointer external_ic
subroutine setup_pointers(Atm)
The subroutine 'setup_pointers' associates the MODULE flag pointers with the ARRAY flag variables for...
logical, pointer do_vort_damp
logical, pointer mountain
logical, pointer no_dycore
integer, pointer nestupdate
The module 'fv_timing' contains FV3 timers.
subroutine, public fv_restart_init()
real(kind=r_grid), pointer deglon_stop
character(len=128), pointer res_latlon_tracers
real, pointer d2_divg_max_k2
logical, pointer moist_phys
real, parameter, public ptop_min
integer, pointer nf_omega
real(kind=r_grid), pointer dx_const
logical, pointer twowaynest
logical, pointer filter_phys
logical, pointer hydrostatic
logical, pointer convert_ke
logical, pointer make_hybrid_z
logical, pointer read_increment
logical, pointer use_old_omega
The module 'fv_arrays' contains the 'fv_atmos_type' and associated datatypes.
logical, pointer use_new_ncep
logical, pointer do_reed_physics
integer, pointer print_freq
real, public soliton_umax
logical, pointer external_eta
The module 'fv_eta' contains routine to set up the reference (Eulerian) pressure coordinate.
integer, pointer nord_zs_filter
logical, pointer fv_debug
logical, pointer phys_hydrostatic
integer, pointer n_zs_filter
logical, pointer breed_vortex_inline
subroutine, public fv_io_exit
Close the fv core restart facilities.
real, public soliton_size
integer, public nsolitons
integer, pointer n_sponge
subroutine, public multi_gases_init(ngas, nwat)
logical, pointer do_uni_zfull
subroutine, public grid_utils_init(Atm, npx, npy, npz, non_ortho, grid_type, c2l_order)
real, dimension(:), allocatable cpi
logical, pointer fv_diag_ic
character(len=120), pointer grid_file
character(len=128), pointer res_latlon_dynamics
real(kind=r_grid), pointer deglat_start
logical, pointer reed_cond_only
subroutine timing_on(blk_name)
The subroutine 'timing_on' starts a timer.
logical, pointer hybrid_z
logical, pointer regional
integer, parameter, public ng
subroutine timing_prt(gid)
The subroutine 'timing_prt' prints all timers.
logical, pointer adjust_dry_mass
logical, pointer inline_q
@ The module 'fv_diagnostics' contains routines to compute diagnosic fields.
logical, pointer gfs_phil
The module 'fv_grid_utils' contains routines for setting up and computing grid-related quantities...
logical, pointer range_warn
real, pointer update_blend
real(kind=r_grid), pointer target_lon
logical, pointer do_sat_adj
character(len=80), pointer grid_name
real(kind=r_grid), pointer deglat_stop
logical, pointer nudge_qv
integer, pointer refinement
real(kind=r_grid), pointer dy_const
real(kind=r_grid), pointer stretch_fac
logical, pointer reproduce_sum
logical, pointer old_divg_damp
logical, pointer consv_am
subroutine timing_init
The subroutine 'timing_init' initializes timers.
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)
The subroutine 'allocate_fv_atmos_type' allocates the fv_atmos_type.
logical, pointer use_ncep_phy
logical, pointer srf_init
subroutine, public grid_utils_end
logical, pointer use_hydro_pressure
The module 'FV3_control' is for initialization and termination of the model, and controls namelist pa...
logical, pointer full_zs_filter
logical, pointer z_tracer
real, pointer d2_divg_max_k1
integer halo_update_type
1 for two-interfaces non-block 2 for block 3 for four-interfaces non-block
subroutine, public fv_end(Atm, grids_on_this_pe)
The subroutine 'fv_end' terminates FV3, deallocates memory, saves restart files, and stops I/O...
integer, pointer nestbctype
subroutine deallocate_fv_atmos_type(Atm)
The subroutine 'deallocate_fv_atmos_type' deallocates the fv_atmos_type.
logical, pointer do_held_suarez