Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 4 additions & 1 deletion GFS_layer/GFS_driver.F90
Original file line number Diff line number Diff line change
Expand Up @@ -156,7 +156,10 @@ subroutine GFS_initialize (Model, Statein, Stateout, Sfcprop, &
Init_parm%tracer_names, &
Init_parm%input_nml_file, Init_parm%tile_num, &
Init_parm%blksz, Init_parm%hydro, &
Init_parm%do_inline_mp, Init_parm%do_cosp)
Init_parm%do_inline_mp, &
Init_parm%do_inline_pbl, &
Init_parm%do_inline_cnv, &
Init_parm%do_inline_gwd, Init_parm%do_cosp)


call read_o3data (Model%ntoz, Model%me, Model%master)
Expand Down
124 changes: 119 additions & 5 deletions GFS_layer/GFS_physics_driver.F90
Original file line number Diff line number Diff line change
Expand Up @@ -620,6 +620,22 @@ subroutine GFS_physics_driver_down &
!
! --- ... frain=factor for centered difference scheme correction of rain amount.

if (Model%do_inline_pbl) then

do i=1,im
! from dycore (because ocean and sea ice are off)
Sfcprop%slmsk(i) = statein%lsm(i)
!Sfcprop%tsfc(i) = statein%tsfc(i)
Sfcprop%vfrac(i) = statein%vfrac(i)
Sfcprop%vtype(i) = statein%vtype(i)
Sfcprop%hice(i) = statein%hice(i)
Sfcprop%fice(i) = statein%fice(i)
Sfcprop%tisfc(i) = statein%tice(i)
Sfcprop%stc(i,:) = statein%stc(i,:)
enddo

endif

Statemid%stored_frain = dtf / dtp

do i= 1, im
Expand Down Expand Up @@ -946,7 +962,29 @@ subroutine GFS_physics_driver_down &
Diag%smcwlt2(:) = 0.0
Diag%smcref2(:) = 0.0

if (Model%do_inline_pbl) then

do i=1,im
! from dycore (because ocean and sea ice are off)
Statemid%stored_hflx(i) = statein%hflx(i)
Statemid%stored_evap(i) = statein%evap(i)
ep1d(i) = statein%ep(i)
Statemid%stored_qss(i) = statein%qsurf(i)
gflx(i) = statein%gflux(i)
Sfcprop%ffmm(i) = statein%ffmm(i)
Sfcprop%ffhh(i) = statein%ffhh(i)
Sfcprop%snowd(i) = statein%snowd(i)
Sfcprop%zorl(i) = statein%zorl(i)
Sfcprop%uustar(i) = statein%uustar(i)
Sfcprop%shdmax(i) = statein%shdmax(i)
!Sfcprop%srflag(i) = statein%srflag(i)
Sfcprop%weasd(i) = statein%weasd(i)
Sfcprop%tprcp(i) = statein%tprcp(i)
Diag%cmm(i) = statein%cmm(i)
Diag%chh(i) = statein%chh(i)
enddo

endif
! check the definition from atmos_model.F90
! 2: all ocean and land fluxes from full coupler
! 1: ocean fluxes only
Expand Down Expand Up @@ -1216,6 +1254,8 @@ subroutine GFS_physics_driver_down &

else

if (.not. Model%do_inline_pbl) then

! --- ... surface energy balance over ocean

if (Model%sfc_coupled==1) then
Expand Down Expand Up @@ -1243,6 +1283,7 @@ subroutine GFS_physics_driver_down &
! --- outputs:
Statemid%stored_qss, Diag%cmm, Diag%chh, gflx, Statemid%stored_evap, Statemid%stored_hflx, ep1d)
endif
endif

endif ! if ( nstf_name(1) > 0 ) then

Expand Down Expand Up @@ -1336,6 +1377,8 @@ subroutine GFS_physics_driver_down &
enddo
endif

if (.not. Model%do_inline_pbl) then

call sfc_sice &
! --- inputs:
(im, Model%lsoil, Statein%pgr, Statein%ugrs, Statein%vgrs, &
Expand All @@ -1351,6 +1394,8 @@ subroutine GFS_physics_driver_down &
Sfcprop%snowd, Statemid%stored_qss, snowmt, gflx, Diag%cmm, Diag%chh, Statemid%stored_evap, &
Statemid%stored_hflx)

endif

if (Model%cplflx) then
do i = 1, im
if (Statemid%stored_flag_cice(i)) then
Expand Down Expand Up @@ -1871,7 +1916,55 @@ subroutine GFS_physics_driver_up(Model, Statein, Stateout, Sfcprop, Coupling, Gr
! dtsfc1(:) = 0.
! dqsfc1(:) = 0.

if (Model%do_shoc) then
if (Model%do_inline_pbl) then ! Need to double check the transition from _down XX

do i=1,im
! from dycore (because PBL is off)
Diag%hpbl(i) = Statein%hpbl(i)
Statemid%stored_kpbl(i) = Statein%kpbl(i)
Statemid%stored_dtsfc1(i) = Statein%dtsfc(i)
Statemid%stored_dqsfc1(i) = Statein%dqsfc(i)
Statemid%stored_dusfc1(i) = Statein%dusfc(i)
Statemid%stored_dvsfc1(i) = Statein%dvsfc(i)
! to dycore (for inline PBL)
stateout%lsm(i) = Statemid%stored_islmsk(i)
Stateout%radh(i,:) = Radtend%htrsw(i,:)*Statemid%stored_xmu(i)+Radtend%htrlw(i,:)
stateout%hflx(i) = Statemid%stored_hflx(i)
stateout%evap(i) = Statemid%stored_evap(i)
stateout%tsfc(i) = Sfcprop%tsfc(i)
stateout%ffmm(i) = Sfcprop%ffmm(i)
stateout%ffhh(i) = Sfcprop%ffhh(i)
stateout%zorl(i) = Sfcprop%zorl(i)
! to dycore (for inline surface)
stateout%vfrac(i) = Sfcprop%vfrac(i)
stateout%vtype(i) = Sfcprop%vtype(i)
stateout%snowd(i) = Sfcprop%snowd(i)
stateout%uustar(i) = Sfcprop%uustar(i)
stateout%shdmax(i) = Sfcprop%shdmax(i)
stateout%sfcemis(i) = Radtend%semis(i)
!stateout%dlwflx(i) = gabsbdlw(i)
stateout%sfcnsw(i) = Statemid%stored_adjsfcnsw(i)
stateout%sfcdsw(i) = Statemid%stored_adjsfcdsw(i)
stateout%srflag(i) = Sfcprop%srflag(i)
if (Statemid%stored_islmsk(i) == 2) then
stateout%hice(i) = Statemid%stored_zice(i)
stateout%fice(i) = Statemid%stored_cice(i)
stateout%tice(i) = Statemid%stored_tice(i)
else
stateout%hice(i) = 0.0
stateout%fice(i) = 0.0
stateout%tice(i) = Sfcprop%tsfc(i)
endif
stateout%weasd(i) = Sfcprop%weasd(i)
stateout%tprcp(i) = Sfcprop%tprcp(i)
stateout%stc(i,:) = Sfcprop%stc(i,:)
stateout%qsurf(i) = Statemid%stored_qss(i)
stateout%cmm(i) = Diag%cmm(i)
stateout%chh(i) = Diag%chh(i)
!stateout%gflux(i) = gflx(i)
!stateout%ep(i) = ep1d(i)
enddo
elseif (Model%do_shoc) then
call moninshoc(ix, im, levs, ntrac, Model%ntcw, Statemid%stored_dvdt, Statemid%stored_dudt, Statemid%stored_dtdt, Statemid%stored_dqdt, &
Statein%ugrs, Statein%vgrs, Statein%tgrs, Statein%qgrs, &
Statemid%phy_f3d(1,1,Model%ntot3d-1), prnum, Model%ntke, &
Expand Down Expand Up @@ -2733,7 +2826,20 @@ subroutine GFS_physics_driver_up(Model, Statein, Stateout, Sfcprop, Coupling, Gr
!
if (.not. Model%ras .and. .not. Model%cscnv) then

if (Model%do_deep) then
if (Model%do_inline_cnv) then

cld1d = 0.
rain1 = Statein%prec(:)
ud_mf = 0.
dd_mf = 0.
dt_mf = 0.
cnvw = 0.
cnvc = 0.
ktop = Statein%ktop(:)
kbot = Statein%kbot(:)
Statemid%stored_kcnv(:) = Statein%kcnv(:)

elseif (Model%do_deep) then

if (Model%do_ca) then
do k=1,levs
Expand Down Expand Up @@ -3018,6 +3124,12 @@ subroutine GFS_physics_driver_up(Model, Statein, Stateout, Sfcprop, Coupling, Gr
! --- ... calculate maximum convective heating rate
! cuhr = temperature change due to deep convection

if (Model%do_inline_cnv) then

cumabs(:) = Statein%cumabs(:)

else

cumabs(:) = 0.0
work3 (:) = 0.0
do k = 1, levs
Expand All @@ -3032,6 +3144,8 @@ subroutine GFS_physics_driver_up(Model, Statein, Stateout, Sfcprop, Coupling, Gr
if (work3(i) > 0.0) cumabs(i) = cumabs(i) / (dtp*work3(i))
enddo

endif

! do i = 1, im
! do k = kbot(i), ktop(i)
! do k1 = kbot(i), k
Expand Down Expand Up @@ -3776,7 +3890,7 @@ subroutine GFS_physics_driver_up(Model, Statein, Stateout, Sfcprop, Coupling, Gr

endif

if (Model%do_inline_mp) then ! GFDL Cloud microphysics
if (Model%do_inline_mp) then ! inline microphysics

tem = dtp * con_p001 / con_day
Statein%prew(:) = Statein%prew(:) * tem
Expand Down Expand Up @@ -3965,7 +4079,7 @@ subroutine GFS_physics_driver_up(Model, Statein, Stateout, Sfcprop, Coupling, Gr
enddo

if (Model%do_cosp) then
if (Model%do_inline_mp) then ! GFDL Cloud microphysics
if (Model%do_inline_mp) then ! inline microphysics
Diag%pfr = Statein%prefluxr
Diag%pfs = Statein%prefluxs
Diag%pfg = Statein%prefluxg
Expand Down Expand Up @@ -4125,7 +4239,7 @@ subroutine GFS_physics_driver_up(Model, Statein, Stateout, Sfcprop, Coupling, Gr
crain = 0.0
csnow = Diag%rainc(i)
endif
if (Model%do_inline_mp) then ! GFDL Cloud microphysics
if (Model%do_inline_mp) then ! inline microphysics
if ((Statein%prei(i)+Statein%pres(i)+Statein%preg(i)+csnow) .gt. (Statein%prew(i)+Statein%prer(i)+crain)) then
Sfcprop%srflag(i) = 1. ! clu: set srflag to 'snow' (i.e. 1)
endif
Expand Down
Loading
Loading