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