diff --git a/.gitmodules b/.gitmodules
index 22c723ac1..591ae5437 100644
--- a/.gitmodules
+++ b/.gitmodules
@@ -1,7 +1,7 @@
[submodule "atmos_cubed_sphere"]
path = atmos_cubed_sphere
- url = https://github.com/NOAA-GFDL/GFDL_atmos_cubed_sphere
- branch = dev/emc
+ url = https://github.com/LarissaReames-NOAA/GFDL_atmos_cubed_sphere.git
+ branch = ideal-periodic
[submodule "ccpp/framework"]
path = ccpp/framework
url = https://github.com/NCAR/ccpp-framework
diff --git a/atmos_cubed_sphere b/atmos_cubed_sphere
index 0519df1af..252c674dc 160000
--- a/atmos_cubed_sphere
+++ b/atmos_cubed_sphere
@@ -1 +1 @@
-Subproject commit 0519df1af731548b1e35aa5685a35605e3e66d5a
+Subproject commit 252c674dc5d5e2be4d490739a22997a644394524
diff --git a/atmos_model.F90 b/atmos_model.F90
index 5468249f3..82998fd90 100644
--- a/atmos_model.F90
+++ b/atmos_model.F90
@@ -142,6 +142,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
@@ -577,7 +578,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/ccpp/suites/suite_FV3_ideal_mp_nssl.xml b/ccpp/suites/suite_FV3_ideal_mp_nssl.xml
new file mode 100644
index 000000000..d91ccc488
--- /dev/null
+++ b/ccpp/suites/suite_FV3_ideal_mp_nssl.xml
@@ -0,0 +1,39 @@
+
+
+
+
+
+
+ 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 000000000..75c428a25
--- /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
+
+
+
+
+ GFS_suite_interstitial_rad_reset
+ 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_interstitial_phys_reset
+ 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/module_fcst_grid_comp.F90 b/module_fcst_grid_comp.F90
index 4b79c34af..52a0eef1d 100644
--- a/module_fcst_grid_comp.F90
+++ b/module_fcst_grid_comp.F90
@@ -61,7 +61,8 @@ module module_fcst_grid_comp
fv_srf_wnd_restart_bundle_setup, &
fv_tracer_restart_bundle_setup
- use fms2_io_mod, only: FmsNetcdfFile_t, open_file, close_file, variable_exists, read_data
+ use fms2_io_mod, only: FmsNetcdfFile_t, open_file, close_file, variable_exists, &
+ read_data
use atmosphere_mod, only: atmosphere_control_data
@@ -171,7 +172,6 @@ subroutine SetServicesNest(nest, rc)
character(3) :: myGridStr
type(ESMF_DistGrid) :: distgrid
type(ESMF_Array) :: array
-
rc = ESMF_SUCCESS
call ESMF_GridCompSetEntryPoint(nest, ESMF_METHOD_INITIALIZE, userRoutine=init_dyn_fb, phase=1, rc=rc)
@@ -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
@@ -289,7 +290,7 @@ subroutine SetServicesNest(nest, rc)
! filename='fv3cap_fv3Grid', rc=rc)
! if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, line=__LINE__, file=__FILE__)) return
! endif
-!
+ !
! Write grid to netcdf file
if( cplprint_flag ) then
write (myGridStr,"(I0)") mygrid
@@ -821,7 +822,7 @@ subroutine fcst_initialize(fcst_comp, importState, exportState, clock, rc)
endif
!-----------------------------------------------------------------------
!---- open and close dummy file in restart dir to check if dir exists --
-
+!
if (mpp_pe() == 0 ) then
open( newunit=unit, file='RESTART/file', iostat=stat )
if (stat == 0) then
@@ -888,7 +889,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