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