diff --git a/ccpp/physics b/ccpp/physics index 03e778972..ce091f900 160000 --- a/ccpp/physics +++ b/ccpp/physics @@ -1 +1 @@ -Subproject commit 03e778972087da65443e6ab5b6382b715b623b7b +Subproject commit ce091f90099d4aa8ae18fcaa63d37423b72bf9c8 diff --git a/gfsphysics/GFS_layer/GFS_restart.F90 b/gfsphysics/GFS_layer/GFS_restart.F90 index eada1fc3d..ba993249d 100644 --- a/gfsphysics/GFS_layer/GFS_restart.F90 +++ b/gfsphysics/GFS_layer/GFS_restart.F90 @@ -102,7 +102,11 @@ subroutine GFS_restart_populate (Restart, Model, Statein, Stateout, Sfcprop, & if (Model%imfdeepcnv == 3) then Restart%num2d = Restart%num2d + 1 endif - ! RUC + ! NoahMP + if (Model%lsm == Model%lsm_noahmp) then + Restart%num2d = Restart%num2d + 10 + endif + ! RUC if (Model%lsm == Model%lsm_ruc) then Restart%num2d = Restart%num2d + 5 endif @@ -195,7 +199,60 @@ subroutine GFS_restart_populate (Restart, Model, Statein, Stateout, Sfcprop, & Restart%data(nb,num)%var2p => Sfcprop(nb)%conv_act(:) enddo endif - ! RUC + ! NoahMP + if (Model%lsm == Model%lsm_noahmp) then + num = num + 1 + Restart%name2d(num) = 'noahmp_2d_raincprv' + do nb = 1,nblks + Restart%data(nb,num)%var2p => Sfcprop(nb)%raincprv(:) + enddo + num = num + 1 + Restart%name2d(num) = 'noahmp_2d_rainncprv' + do nb = 1,nblks + Restart%data(nb,num)%var2p => Sfcprop(nb)%rainncprv(:) + enddo + num = num + 1 + Restart%name2d(num) = 'noahmp_2d_iceprv' + do nb = 1,nblks + Restart%data(nb,num)%var2p => Sfcprop(nb)%iceprv(:) + enddo + num = num + 1 + Restart%name2d(num) = 'noahmp_2d_snowprv' + do nb = 1,nblks + Restart%data(nb,num)%var2p => Sfcprop(nb)%snowprv(:) + enddo + num = num + 1 + Restart%name2d(num) = 'noahmp_2d_graupelprv' + do nb = 1,nblks + Restart%data(nb,num)%var2p => Sfcprop(nb)%graupelprv(:) + enddo + num = num + 1 + Restart%name2d(num) = 'noahmp_2d_draincprv' + do nb = 1,nblks + Restart%data(nb,num)%var2p => Sfcprop(nb)%draincprv(:) + enddo + num = num + 1 + Restart%name2d(num) = 'noahmp_2d_drainncprv' + do nb = 1,nblks + Restart%data(nb,num)%var2p => Sfcprop(nb)%drainncprv(:) + enddo + num = num + 1 + Restart%name2d(num) = 'noahmp_2d_diceprv' + do nb = 1,nblks + Restart%data(nb,num)%var2p => Sfcprop(nb)%diceprv(:) + enddo + num = num + 1 + Restart%name2d(num) = 'noahmp_2d_dsnowprv' + do nb = 1,nblks + Restart%data(nb,num)%var2p => Sfcprop(nb)%dsnowprv(:) + enddo + num = num + 1 + Restart%name2d(num) = 'noahmp_2d_dgraupelprv' + do nb = 1,nblks + Restart%data(nb,num)%var2p => Sfcprop(nb)%dgraupelprv(:) + enddo + endif + ! RUC if (Model%lsm == Model%lsm_ruc) then num = num + 1 Restart%name2d(num) = 'ruc_2d_raincprv' diff --git a/io/FV3GFS_io.F90 b/io/FV3GFS_io.F90 index e0898c3f6..6b49edde0 100644 --- a/io/FV3GFS_io.F90 +++ b/io/FV3GFS_io.F90 @@ -955,11 +955,11 @@ subroutine sfc_prop_restart_read (Sfcprop, Atm_block, Model, fv_domain) endif #endif !--- register the 3D fields - if (Model%frac_grid) then +! if (Model%frac_grid) then sfc_name3(0) = 'tiice' var3_p => sfc_var3ice(:,:,:) id_restart = register_restart_field(Sfc_restart, fn_srf, sfc_name3(0), var3_p, domain=fv_domain, mandatory=.false.) - end if +! end if do num = 1,nvar_s3 var3_p => sfc_var3(:,:,:,num) @@ -1077,16 +1077,16 @@ subroutine sfc_prop_restart_read (Sfcprop, Atm_block, Model, fv_domain) if (Sfcprop(nb)%lakefrac(ix) > zero) then Sfcprop(nb)%oceanfrac(ix) = zero ! lake & ocean don't coexist in a cell - if (Sfcprop(nb)%fice(ix) < Model%min_lakeice) then - Sfcprop(nb)%fice(ix) = zero - if (Sfcprop(nb)%slmsk(ix) == 2) Sfcprop(nb)%slmsk(ix) = 0 - endif +! if (Sfcprop(nb)%fice(ix) < Model%min_lakeice) then +! Sfcprop(nb)%fice(ix) = zero +! if (Sfcprop(nb)%slmsk(ix) == 2) Sfcprop(nb)%slmsk(ix) = 0 +! endif else Sfcprop(nb)%oceanfrac(ix) = one - Sfcprop(nb)%landfrac(ix) - if (Sfcprop(nb)%fice(ix) < Model%min_seaice) then - Sfcprop(nb)%fice(ix) = zero - if (Sfcprop(nb)%slmsk(ix) == 2) Sfcprop(nb)%slmsk(ix) = 0 - endif +! if (Sfcprop(nb)%fice(ix) < Model%min_seaice) then +! Sfcprop(nb)%fice(ix) = zero +! if (Sfcprop(nb)%slmsk(ix) == 2) Sfcprop(nb)%slmsk(ix) = 0 +! endif endif ! !--- NSSTM variables @@ -1357,28 +1357,47 @@ subroutine sfc_prop_restart_read (Sfcprop, Atm_block, Model, fv_domain) enddo enddo else + if( Model%phour < 1.e-7) then !$omp parallel do default(shared) private(nb, ix, tem) - do nb = 1, Atm_block%nblks - do ix = 1, Atm_block%blksz(nb) + do nb = 1, Atm_block%nblks + do ix = 1, Atm_block%blksz(nb) + !--- specify tsfcl/zorll/zorli from existing variable tsfco/zorlo +! Sfcprop(nb)%tsfcl(ix) = Sfcprop(nb)%tsfco(ix) +! Sfcprop(nb)%zorll(ix) = Sfcprop(nb)%zorlo(ix) +! Sfcprop(nb)%zorli(ix) = Sfcprop(nb)%zorlo(ix) +! Sfcprop(nb)%zorl(ix) = Sfcprop(nb)%zorlo(ix) + if (Sfcprop(nb)%slmsk(ix) == 1) then + Sfcprop(nb)%zorl(ix) = Sfcprop(nb)%zorll(ix) + Sfcprop(nb)%tsfc(ix) = Sfcprop(nb)%tsfcl(ix) + else + tem = one - Sfcprop(nb)%fice(ix) + Sfcprop(nb)%zorl(ix) = Sfcprop(nb)%zorli(ix) * Sfcprop(nb)%fice(ix) & + + Sfcprop(nb)%zorlo(ix) * tem + Sfcprop(nb)%tsfc(ix) = Sfcprop(nb)%tisfc(ix) * Sfcprop(nb)%fice(ix) & + + Sfcprop(nb)%tsfco(ix) * tem + endif + enddo + enddo + else +!$omp parallel do default(shared) private(nb, ix, tem) + do nb = 1, Atm_block%nblks + do ix = 1, Atm_block%blksz(nb) !--- specify tsfcl/zorll/zorli from existing variable tsfco/zorlo -! Sfcprop(nb)%tsfcl(ix) = Sfcprop(nb)%tsfco(ix) -! Sfcprop(nb)%zorll(ix) = Sfcprop(nb)%zorlo(ix) -! Sfcprop(nb)%zorli(ix) = Sfcprop(nb)%zorlo(ix) -! Sfcprop(nb)%zorl(ix) = Sfcprop(nb)%zorlo(ix) -! Sfcprop(nb)%tsfc(ix) = Sfcprop(nb)%tsfco(ix) - if (Sfcprop(nb)%slmsk(ix) == 1) then - Sfcprop(nb)%zorl(ix) = Sfcprop(nb)%zorll(ix) - Sfcprop(nb)%tsfc(ix) = Sfcprop(nb)%tsfcl(ix) - else - tem = one - Sfcprop(nb)%fice(ix) - Sfcprop(nb)%zorl(ix) = Sfcprop(nb)%zorli(ix) * Sfcprop(nb)%fice(ix) & - + Sfcprop(nb)%zorlo(ix) * tem - - Sfcprop(nb)%tsfc(ix) = Sfcprop(nb)%tisfc(ix) * Sfcprop(nb)%fice(ix) & - + Sfcprop(nb)%tsfco(ix) * tem - endif + Sfcprop(nb)%tsfc(ix) = Sfcprop(nb)%tsfco(ix) + if (Sfcprop(nb)%slmsk(ix) == 1) then + Sfcprop(nb)%zorl(ix) = Sfcprop(nb)%zorll(ix) + Sfcprop(nb)%tsfc(ix) = Sfcprop(nb)%tsfcl(ix) + else + tem = one - Sfcprop(nb)%fice(ix) + Sfcprop(nb)%zorl(ix) = Sfcprop(nb)%zorli(ix) * Sfcprop(nb)%fice(ix) & + + Sfcprop(nb)%zorlo(ix) * tem + if (Sfcprop(nb)%fice(ix) > min(Model%min_seaice,Model%min_lakeice)) then + Sfcprop(nb)%tsfc(ix) = Sfcprop(nb)%tsfcl(ix) + endif + endif + enddo enddo - enddo + endif endif ! if (Model%frac_grid) !#ifdef CCPP @@ -1959,11 +1978,11 @@ subroutine sfc_prop_restart_write (Sfcprop, Atm_block, Model, fv_domain, timesta #endif !--- register the 3D fields - if (Model%frac_grid) then +! if (Model%frac_grid) then sfc_name3(0) = 'tiice' var3_p => sfc_var3ice(:,:,:) id_restart = register_restart_field(Sfc_restart, fn_srf, sfc_name3(0), var3_p, domain=fv_domain) - endif +! endif do num = 1,nvar3 var3_p => sfc_var3(:,:,:,num)