diff --git a/ccpp/suites/suite_FV3_ideal_mp_nssl.xml b/ccpp/suites/suite_FV3_ideal_mp_nssl.xml new file mode 100644 index 0000000000..d86be222d0 --- /dev/null +++ b/ccpp/suites/suite_FV3_ideal_mp_nssl.xml @@ -0,0 +1,44 @@ + + + + + + + GFS_time_vary_pre + GFS_phys_time_vary + + + + + + + + + + + + + + + + + GFS_suite_stateout_update + + get_prs_fv3 + get_phi_fv3 + GFS_MP_generic_pre + mp_nssl + GFS_MP_generic_post + maximum_hourly_diagnostics + GFS_physics_post + + + + + + diff --git a/ccpp/suites/suite_FV3_ideal_pbl_mp_nssl.xml b/ccpp/suites/suite_FV3_ideal_pbl_mp_nssl.xml new file mode 100644 index 0000000000..4df1affce6 --- /dev/null +++ b/ccpp/suites/suite_FV3_ideal_pbl_mp_nssl.xml @@ -0,0 +1,62 @@ + + + + + + + GFS_time_vary_pre + GFS_rrtmg_setup + GFS_rad_time_vary + GFS_phys_time_vary + + + + + sgscloud_radpre + GFS_rrtmg_pre + GFS_radiation_surface + rad_sw_pre + rrtmg_sw + rrtmg_sw_post + rrtmg_lw + sgscloud_radpost + rrtmg_lw_post + GFS_rrtmg_post + + + + + GFS_suite_stateout_reset + get_prs_fv3 + GFS_suite_interstitial_1 + GFS_surface_generic_pre + GFS_surface_composites_pre + dcyc2t3 + GFS_surface_composites_inter + GFS_suite_interstitial_2 + + + + mynnsfc_wrapper + GFS_surface_loop_control_part1 + sfc_nst_pre + sfc_nst + sfc_nst_post + noahmpdrv + sfc_sice + GFS_surface_loop_control_part2 + + + + + + mynnedmf_wrapper + get_phi_fv3 + GFS_MP_generic_pre + mp_nssl + GFS_MP_generic_post + maximum_hourly_diagnostics + GFS_physics_post + + + diff --git a/fv3/atmos_cubed_sphere b/fv3/atmos_cubed_sphere index 4f1a5ef4b8..77be6d28a8 160000 --- a/fv3/atmos_cubed_sphere +++ b/fv3/atmos_cubed_sphere @@ -1 +1 @@ -Subproject commit 4f1a5ef4b83461a79a62c8d965ebc2b26cf5eba8 +Subproject commit 77be6d28a8cbf39fa5299baed27f58260de7a45b diff --git a/fv3/atmos_model.F90 b/fv3/atmos_model.F90 index ecd3d750d1..2e60dd0c80 100644 --- a/fv3/atmos_model.F90 +++ b/fv3/atmos_model.F90 @@ -144,6 +144,7 @@ module atmos_model_mod ! (they correspond to the x, y, pfull, phalf axes) integer, pointer :: pelist(:) =>null() ! pelist where atmosphere is running. integer :: layout(2) ! computer task laytout + integer :: grid_type logical :: regional ! true if domain is regional logical :: nested ! true if there is a nest logical :: moving_nest_parent ! true if this grid has a moving nest child @@ -580,7 +581,7 @@ subroutine atmos_model_init (Atmos, Time_init, Time, Time_step) call atmosphere_resolution (mlon, mlat, global=.true.) call atmosphere_domain (Atmos%domain, Atmos%domain_for_read, Atmos%layout, & Atmos%regional, Atmos%nested, & - Atmos%ngrids, Atmos%mygrid, Atmos%pelist) + Atmos%ngrids, Atmos%mygrid, Atmos%pelist, Atmos%grid_type) Atmos%moving_nest_parent = .false. Atmos%is_moving_nest = .false. #ifdef MOVING_NEST diff --git a/fv3/module_fcst_grid_comp.F90 b/fv3/module_fcst_grid_comp.F90 index cea2dfdf2c..41d0161e69 100644 --- a/fv3/module_fcst_grid_comp.F90 +++ b/fv3/module_fcst_grid_comp.F90 @@ -201,7 +201,7 @@ subroutine SetServicesNest(nest, rc) grid_typekind = ESMF_TYPEKIND_R8 endif - if (trim(name)=="global") then + if (trim(name) == "global" .and. Atmos%grid_type /= 4) then ! global domain call ESMF_InfoGet(info, key="tilesize", value=tilesize, rc=rc); ESMF_ERR_ABORT(rc) if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, line=__LINE__, file=__FILE__)) return @@ -219,7 +219,7 @@ subroutine SetServicesNest(nest, rc) name="fcst_grid", rc=rc) if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, line=__LINE__, file=__FILE__)) return else - ! nest domain + ! nest and doubly periodic domain call ESMF_InfoGet(info, key="nx", value=nx, rc=rc) if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, line=__LINE__, file=__FILE__)) return call ESMF_InfoGet(info, key="ny", value=ny, rc=rc) @@ -239,6 +239,7 @@ subroutine SetServicesNest(nest, rc) ! - Create coordinate arrays around allocations held within Atmos data structure and set in Grid + call ESMF_GridGet(grid, staggerloc=ESMF_STAGGERLOC_CENTER, distgrid=distgrid, rc=rc) if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, line=__LINE__, file=__FILE__)) return @@ -841,7 +842,8 @@ subroutine fcst_initialize(fcst_comp, importState, exportState, clock, rc) call ESMF_InfoGetFromHost(fcstGridComp(n), info=info, rc=rc); ESMF_ERR_ABORT(rc) call ESMF_InfoSet(info, key="layout", values=layout, rc=rc); ESMF_ERR_ABORT(rc) call ESMF_InfoSet(info, key="tilesize", value=Atmos%mlon, rc=rc); ESMF_ERR_ABORT(rc) - + call ESMF_InfoSet(info, key="nx", value=nx, rc=rc); ESMF_ERR_ABORT(rc) + call ESMF_InfoSet(info, key="ny", value=ny, rc=rc); ESMF_ERR_ABORT(rc) call ESMF_GridCompSetServices(fcstGridComp(n), SetServicesNest, userrc=urc, rc=rc) if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, line=__LINE__, file=__FILE__)) return if (ESMF_LogFoundError(rcToCheck=urc, msg=ESMF_LOGERR_PASSTHRU, line=__LINE__, file=__FILE__, rcToReturn=rc)) return