diff --git a/atmos_cubed_sphere b/atmos_cubed_sphere index 84c30284b2..019eb4c686 160000 --- a/atmos_cubed_sphere +++ b/atmos_cubed_sphere @@ -1 +1 @@ -Subproject commit 84c30284b2a1e7efb4c6ef9c05566c1a27d1a8fd +Subproject commit 019eb4c6865831c059663f750f632093bb802a60 diff --git a/ccpp/driver/GFS_diagnostics.F90 b/ccpp/driver/GFS_diagnostics.F90 index 2a9cb5d90b..5d68f3a897 100644 --- a/ccpp/driver/GFS_diagnostics.F90 +++ b/ccpp/driver/GFS_diagnostics.F90 @@ -3847,6 +3847,18 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%data(nb)%var2 => Sfcprop(nb)%q2m(:) enddo + idx = idx + 1 + ExtDiag(idx)%axes = 2 + ExtDiag(idx)%name = 'qss' + ExtDiag(idx)%desc = 'surface specific humidity' + ExtDiag(idx)%unit = 'kg/kg' + ExtDiag(idx)%mod_name = 'gfs_sfc' + ExtDiag(idx)%intpl_method = 'bilinear' + allocate (ExtDiag(idx)%data(nblks)) + do nb = 1,nblks + ExtDiag(idx)%data(nb)%var2 => Sfcprop(nb)%qss(:) + enddo + idx = idx + 1 ExtDiag(idx)%axes = 2 ExtDiag(idx)%name = 't2m' diff --git a/ccpp/driver/GFS_restart.F90 b/ccpp/driver/GFS_restart.F90 index 890aeb9fb0..f007846798 100644 --- a/ccpp/driver/GFS_restart.F90 +++ b/ccpp/driver/GFS_restart.F90 @@ -179,7 +179,7 @@ subroutine GFS_restart_populate (Restart, Model, Statein, Stateout, Sfcprop, & Restart%num3d = Restart%num3d + 9 endif if (Model%rrfs_sd) then - Restart%num3d = Restart%num3d + 4 + Restart%num3d = Restart%num3d + 5 endif !Prognostic area fraction if (Model%progsigma) then @@ -690,6 +690,11 @@ subroutine GFS_restart_populate (Restart, Model, Statein, Stateout, Sfcprop, & Restart%data(nb,num)%var3p => Coupling(nb)%chem3d(:,:,3) enddo num = num + 1 + Restart%name3d(num) = 'ebu_smoke' + do nb = 1,nblks + Restart%data(nb,num)%var3p => Coupling(nb)%ebu_smoke(:,:) + enddo + num = num + 1 Restart%name3d(num) = 'ext550' do nb = 1,nblks Restart%data(nb,num)%var3p => Radtend(nb)%ext550(:,:) diff --git a/ccpp/physics b/ccpp/physics index c197599640..db2ff85f4f 160000 --- a/ccpp/physics +++ b/ccpp/physics @@ -1 +1 @@ -Subproject commit c197599640f63a35867c0cee993fee66a67e1b68 +Subproject commit db2ff85f4fa448b45a4720297f1b561d978e6f4c diff --git a/io/fv3atm_restart_io.F90 b/io/fv3atm_restart_io.F90 index 7dc8460ba8..55bfb6c9f6 100644 --- a/io/fv3atm_restart_io.F90 +++ b/io/fv3atm_restart_io.F90 @@ -405,6 +405,8 @@ subroutine fv3atm_checksum (Model, GFS_Data, Atm_block) call copy_from_GFS_Data(ii1,jj1,isc,jsc,nt,temp2d,GFS_Data(nb)%Sfcprop%tsnow_ice) call copy_from_GFS_Data(ii1,jj1,isc,jsc,nt,temp2d,GFS_Data(nb)%Sfcprop%snowfallac_land) call copy_from_GFS_Data(ii1,jj1,isc,jsc,nt,temp2d,GFS_Data(nb)%Sfcprop%snowfallac_ice) + call copy_from_GFS_Data(ii1,jj1,isc,jsc,nt,temp2d,GFS_Data(nb)%Sfcprop%acsnow_land) + call copy_from_GFS_Data(ii1,jj1,isc,jsc,nt,temp2d,GFS_Data(nb)%Sfcprop%acsnow_ice) call copy_from_GFS_Data(ii1,jj1,isc,jsc,nt,temp2d,GFS_Data(nb)%Sfcprop%sfalb_lnd) call copy_from_GFS_Data(ii1,jj1,isc,jsc,nt,temp2d,GFS_Data(nb)%Sfcprop%sfalb_lnd_bck) call copy_from_GFS_Data(ii1,jj1,isc,jsc,nt,temp2d,GFS_Data(nb)%Sfcprop%sfalb_ice) diff --git a/io/fv3atm_sfc_io.F90 b/io/fv3atm_sfc_io.F90 index c0bfcf6d92..bfd5d8c0f8 100644 --- a/io/fv3atm_sfc_io.F90 +++ b/io/fv3atm_sfc_io.F90 @@ -123,9 +123,9 @@ function Sfc_io_calculate_indices(sfc, Model, reading, warm_start) endif if (Model%lsm == Model%lsm_ruc .and. warm_start) then if (Model%rdlai) then - nvar2r = 13 + nvar2r = 15 else - nvar2r = 12 + nvar2r = 14 endif nvar3 = 5 else @@ -534,6 +534,8 @@ subroutine Sfc_io_fill_2d_names(sfc,Model,warm_start) nt=nt+1 ; sfc%name2(nt) = 'tsnow_ice' nt=nt+1 ; sfc%name2(nt) = 'snowfall_acc_land' nt=nt+1 ; sfc%name2(nt) = 'snowfall_acc_ice' + nt=nt+1 ; sfc%name2(nt) = 'acsnow_land' + nt=nt+1 ; sfc%name2(nt) = 'acsnow_ice' nt=nt+1 ; sfc%name2(nt) = 'sfalb_lnd' nt=nt+1 ; sfc%name2(nt) = 'sfalb_lnd_bck' nt=nt+1 ; sfc%name2(nt) = 'sfalb_ice' @@ -1051,6 +1053,8 @@ subroutine Sfc_io_transfer(sfc, reading, Model, Atm_block, Sfcprop, warm_start, call GFS_Data_transfer(reading,ii1,jj1,isc,jsc,nt,sfc%var2,Sfcprop(nb)%tsnow_ice) call GFS_Data_transfer(reading,ii1,jj1,isc,jsc,nt,sfc%var2,Sfcprop(nb)%snowfallac_land) call GFS_Data_transfer(reading,ii1,jj1,isc,jsc,nt,sfc%var2,Sfcprop(nb)%snowfallac_ice) + call GFS_Data_transfer(reading,ii1,jj1,isc,jsc,nt,sfc%var2,Sfcprop(nb)%acsnow_land) + call GFS_Data_transfer(reading,ii1,jj1,isc,jsc,nt,sfc%var2,Sfcprop(nb)%acsnow_ice) call GFS_Data_transfer(reading,ii1,jj1,isc,jsc,nt,sfc%var2,Sfcprop(nb)%sfalb_lnd) call GFS_Data_transfer(reading,ii1,jj1,isc,jsc,nt,sfc%var2,Sfcprop(nb)%sfalb_lnd_bck) call GFS_Data_transfer(reading,ii1,jj1,isc,jsc,nt,sfc%var2,Sfcprop(nb)%sfalb_ice) diff --git a/module_fcst_grid_comp.F90 b/module_fcst_grid_comp.F90 index ea622369c4..77ca8c1b84 100644 --- a/module_fcst_grid_comp.F90 +++ b/module_fcst_grid_comp.F90 @@ -59,7 +59,9 @@ module module_fcst_grid_comp use fv3atm_restart_io_mod, only: fv_phy_restart_bundle_setup, fv_sfc_restart_bundle_setup use fv_ufs_restart_io_mod, only: fv_core_restart_bundle_setup, & fv_srf_wnd_restart_bundle_setup, & - fv_tracer_restart_bundle_setup + fv_tracer_restart_bundle_setup, & + fv_diag_restart_bundle_setup + use module_diag_hailcast, only: do_hailcast use fms2_io_mod, only: FmsNetcdfFile_t, open_file, close_file, variable_exists, read_data @@ -361,6 +363,9 @@ subroutine init_dyn_fb(nest, importState, exportState, clock, rc) else if (fb_name(1:21) == 'restart_fv_tracer.res') then call fv_tracer_restart_bundle_setup(fbList(1), grid, rc=rc) if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, line=__LINE__, file=__FILE__)) return + else if (fb_name(1:19) == 'restart_fv_diag.res') then + call fv_diag_restart_bundle_setup(fbList(1), grid, rc=rc) + if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, line=__LINE__, file=__FILE__)) return else do i=1, itemCount call fv_dyn_bundle_setup(Atmos%axes, fbList(i), grid, quilting=.true., rc=rc) @@ -581,6 +586,11 @@ subroutine fcst_initialize(fcst_comp, importState, exportState, clock, rc) logical,allocatable :: is_moving_on_all_pets(:), is_moving(:) character(len=7) :: nest_suffix + integer, parameter :: MAX_NUM_DYN_BUNDLES = 10 + character(len=esmf_maxstr), dimension(MAX_NUM_DYN_BUNDLES) :: dyn_bundles_name + + integer :: num_dyn_bundles = 0 + type(FmsNetcdfFile_t) :: fileobj ! !----------------------------------------------------------------------- @@ -1055,21 +1065,24 @@ subroutine fcst_initialize(fcst_comp, importState, exportState, clock, rc) if ( quilting_restart ) then - do i=1,3 ! 3 dynamics restart bundles + ! Number of non-optional dyn bundles (core, srf_wnd and tracer) + num_dyn_bundles = 3 + dyn_bundles_name(1) = 'restart_fv_core.res' + dyn_bundles_name(2) = 'restart_fv_srf_wnd.res' + dyn_bundles_name(3) = 'restart_fv_tracer.res' + + ! Optional dyn bundles + if (do_hailcast) then + num_dyn_bundles = num_dyn_bundles + 1 + dyn_bundles_name(num_dyn_bundles) = 'restart_fv_diag.res' + end if + + do i=1,num_dyn_bundles ! dynamics restart bundles tempState = ESMF_StateCreate(rc=rc) if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, line=__LINE__, file=__FILE__)) return - if (i == 1) then - name_FB = 'restart_fv_core.res' - elseif (i == 2) then - name_FB = 'restart_fv_srf_wnd.res' - elseif (i == 3) then - name_FB = 'restart_fv_tracer.res' - else - write(0,*)' unknown name_dynamics restart bundle ', i - ESMF_ERR_ABORT(101) - endif + name_FB = dyn_bundles_name(i) if (n > 1) then write(nest_suffix,'(A5,I2.2)') '.nest', n