Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

GFS.v16.0.4 physics update #460

Merged
merged 4 commits into from
Jun 12, 2020
Merged
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
2 changes: 1 addition & 1 deletion physics/radsw_datatb.f
Original file line number Diff line number Diff line change
Expand Up @@ -2551,7 +2551,7 @@ module module_radsw_sflux !
!> band index (3rd index in array sfluxref described below)
integer, dimension(nblow:nbhgh), public :: ibx

data layreffr/ 18,30, 6, 3, 3, 8, 2, 6, 1, 2, 0,32,58,49 /
data layreffr/ 18,30, 6, 3, 3, 8, 2, 6, 1, 2, 0,32,42,49 /
data ix1 / 1, 1, 1, 1, 0, 1, 1, 0, 1, 0, 0, 0, 3, 0 /
data ix2 / 5, 2, 5, 2, 0, 2, 6, 0, 6, 0, 0, 0, 6, 0 /
data ibx / 1, 1, 1, 2, 2, 3, 4, 3, 5, 4, 5, 6, 2, 7 /
Expand Down
16 changes: 3 additions & 13 deletions physics/samfdeepcnv.f
Original file line number Diff line number Diff line change
Expand Up @@ -222,7 +222,7 @@ subroutine samfdeepcnv_run (im,ix,km,itc,ntc,cliq,cp,cvap, &
parameter(clamd=0.03,tkemx=0.65,tkemn=0.05)
parameter(dtke=tkemx-tkemn)
parameter(dbeta=0.1)
parameter(cthk=200.,dthk=25.)
parameter(cthk=150.,dthk=25.)
parameter(cinpcrmx=180.,cinpcrmn=120.)
! parameter(cinacrmx=-120.,cinacrmn=-120.)
parameter(cinacrmx=-120.,cinacrmn=-80.)
Expand Down Expand Up @@ -1239,23 +1239,13 @@ subroutine samfdeepcnv_run (im,ix,km,itc,ntc,cliq,cp,cvap, &
c specify upper limit of mass flux at cloud base
c
!> - Calculate the maximum value of the cloud base mass flux using the CFL-criterion-based formula of Han and Pan (2011) \cite han_and_pan_2011, equation 7.
if(hwrf_samfdeep) then
do i = 1, im
do i = 1, im
if(cnvflg(i)) then
k = kbcon(i)
dp = 1000. * del(i,k)
xmbmax(i) = dp / (grav * dt2)
endif
enddo
else
do i = 1, im
if(cnvflg(i)) then
k = kbcon(i)
dp = 1000. * del(i,k)
xmbmax(i) = dp / (2. * grav * dt2)
endif
enddo
endif
enddo
c
c compute cloud moisture property and precipitation
c
Expand Down
37 changes: 28 additions & 9 deletions physics/satmedmfvdifq.F
Original file line number Diff line number Diff line change
Expand Up @@ -59,8 +59,8 @@ end subroutine satmedmfvdifq_finalize
!! @{
subroutine satmedmfvdifq_run(ix,im,km,ntrac,ntcw,ntiw,ntke, &
& grav,rd,cp,rv,hvap,hfus,fv,eps,epsm1, &
& dv,du,tdt,rtg,u1,v1,t1,q1,swh,hlw,xmu,garea, &
& psk,rbsoil,zorl,u10m,v10m,fm,fh, &
& dv,du,tdt,rtg,u1,v1,t1,q1,swh,hlw,xmu,garea,islimsk, &
& snwdph_lnd,psk,rbsoil,zorl,u10m,v10m,fm,fh, &
& tsea,heat,evap,stress,spd1,kpbl, &
& prsi,del,prsl,prslk,phii,phil,delt, &
& dspheat,dusfc,dvsfc,dtsfc,dqsfc,hpbl, &
Expand All @@ -75,6 +75,7 @@ subroutine satmedmfvdifq_run(ix,im,km,ntrac,ntcw,ntiw,ntke, &
!----------------------------------------------------------------------
integer, intent(in) :: ix, im, km, ntrac, ntcw, ntiw, ntke
integer, intent(in) :: kinver(im)
integer, intent(in) :: islimsk(im)
integer, intent(out) :: kpbl(im)
!
real(kind=kind_phys), intent(in) :: grav,rd,cp,rv,hvap,hfus,fv, &
Expand All @@ -88,6 +89,7 @@ subroutine satmedmfvdifq_run(ix,im,km,ntrac,ntcw,ntiw,ntke, &
& t1(ix,km), q1(ix,km,ntrac), &
& swh(ix,km), hlw(ix,km), &
& xmu(im), garea(im), &
& snwdph_lnd(im), &
& psk(ix), rbsoil(im), &
& zorl(im), tsea(im), &
& u10m(im), v10m(im), &
Expand Down Expand Up @@ -201,6 +203,8 @@ subroutine satmedmfvdifq_run(ix,im,km,ntrac,ntcw,ntiw,ntke, &
& zlup, zldn, bsum,
& tem, tem1, tem2,
& ptem, ptem0, ptem1, ptem2
!
real(kind=kind_phys) xkzm_mp, xkzm_hp
!
real(kind=kind_phys) ck0, ck1, ch0, ch1, ce0, rchck
!
Expand All @@ -212,7 +216,7 @@ subroutine satmedmfvdifq_run(ix,im,km,ntrac,ntcw,ntiw,ntke, &
parameter(gamcrt=3.,gamcrq=0.,sfcfrac=0.1)
parameter(vk=0.4,rimin=-100.)
parameter(rbcr=0.25,zolcru=-0.02,tdzmin=1.e-3)
parameter(rlmn=30.,rlmn1=5.,rlmn2=15.)
parameter(rlmn=30.,rlmn1=5.,rlmn2=10.)
parameter(rlmx=300.,elmx=300.)
parameter(prmin=0.25,prmax=4.0)
parameter(pr0=1.0,prtke=1.0,prscu=0.67)
Expand All @@ -222,7 +226,7 @@ subroutine satmedmfvdifq_run(ix,im,km,ntrac,ntcw,ntiw,ntke, &
parameter(aphi5=5.,aphi16=16.)
parameter(elmfac=1.0,elefac=1.0,cql=100.)
parameter(dw2min=1.e-4,dkmax=1000.,xkgdx=5000.)
parameter(qlcr=3.5e-5,zstblmax=2500.,xkzinv=0.15)
parameter(qlcr=3.5e-5,zstblmax=2500.,xkzinv=0.1)
parameter(h1=0.33333333)
parameter(ck0=0.4,ck1=0.15,ch0=0.4,ch1=0.15)
parameter(ce0=0.4)
Expand Down Expand Up @@ -317,16 +321,31 @@ subroutine satmedmfvdifq_run(ix,im,km,ntrac,ntcw,ntiw,ntke, &
!! \n xkzm_mx = 0.01 + (xkzm_h - 0.01)/(xkgdx-5.) * (gdx-5.)

do i=1,im
xkzm_mp = xkzm_m
xkzm_hp = xkzm_h
!
if( islimsk(i) == 1 .and. snwdph_lnd(i) > 10.0 ) then ! over land
if (rbsoil(i) > 0. .and. rbsoil(i) <= 0.25) then
xkzm_mp = xkzm_m * (1.0 - rbsoil(i)/0.25)**2 +
& 0.1 * (1.0 - (1.0-rbsoil(i)/0.25)**2)
xkzm_hp = xkzm_h * (1.0 - rbsoil(i)/0.25)**2 +
& 0.1 * (1.0 - (1.0-rbsoil(i)/0.25)**2)
else if (rbsoil(i) > 0.25) then
xkzm_mp = 0.1
xkzm_hp = 0.1
endif
endif
!
kx1(i) = 1
tx1(i) = 1.0 / prsi(i,1)
tx2(i) = tx1(i)
if(gdx(i) >= xkgdx) then
xkzm_hx(i) = xkzm_h
xkzm_mx(i) = xkzm_m
xkzm_hx(i) = xkzm_hp
xkzm_mx(i) = xkzm_mp
else
tem = 1. / (xkgdx - 5.)
tem1 = (xkzm_h - 0.01) * tem
tem2 = (xkzm_m - 0.01) * tem
tem1 = (xkzm_hp - 0.01) * tem
tem2 = (xkzm_mp - 0.01) * tem
ptem = gdx(i) - 5.
xkzm_hx(i) = 0.01 + tem1 * ptem
xkzm_mx(i) = 0.01 + tem2 * ptem
Expand Down Expand Up @@ -833,7 +852,7 @@ subroutine satmedmfvdifq_run(ix,im,km,ntrac,ntcw,ntiw,ntke, &
! tem1 = (tvx(i,k+1)-tvx(i,k)) * rdzt(i,k)
! if(tem1 > 1.e-5) then
tem1 = tvx(i,k+1)-tvx(i,k)
if(tem1 > 0.) then
if(tem1 > 0. .and. islimsk(i) /= 1) then
xkzo(i,k) = min(xkzo(i,k), xkzinv)
xkzmo(i,k) = min(xkzmo(i,k), xkzinv)
rlmnz(i,k) = min(rlmnz(i,k), rlmn2)
Expand Down
17 changes: 17 additions & 0 deletions physics/satmedmfvdifq.meta
Original file line number Diff line number Diff line change
Expand Up @@ -284,6 +284,23 @@
kind = kind_phys
intent = in
optional = F
[islimsk]
standard_name = sea_land_ice_mask
long_name = sea/land/ice mask (=0/1/2)
units = flag
dimensions = (horizontal_dimension)
type = integer
intent = in
optional = F
[snwdph_lnd]
standard_name = surface_snow_thickness_water_equivalent_over_land
long_name = water equivalent snow depth over land
units = mm
dimensions = (horizontal_dimension)
type = real
kind = kind_phys
intent = in
optional = F
[psk]
standard_name = dimensionless_exner_function_at_lowest_model_interface
long_name = dimensionless Exner function at the surface interface
Expand Down
25 changes: 8 additions & 17 deletions physics/sfc_diff.f
Original file line number Diff line number Diff line change
Expand Up @@ -220,15 +220,11 @@ subroutine sfc_diff_run (im,rvrdm1,eps,epsm1,grav, & !intent(in)
z0max = max(z0max, 1.0e-6)

! czilc = 10.0 ** (- (0.40/0.07) * z0) ! fei's canopy height dependance of czil
! czilc = 0.8
czilc = 0.8

! tem1 = 1.0 - sigmaf(i)
! ztmax = z0max*exp( - tem1*tem1
! & * czilc*ca*sqrt(ustar_lnd(i)*(0.01/1.5e-05)))
!
czilc = 10.0 ** (- 4. * z0max) ! Trier et al. (2011, WAF)
ztmax = z0max * exp( - czilc * ca
& * 258.2 * sqrt(ustar_lnd(i)*z0max) )
tem1 = 1.0 - sigmaf(i)
ztmax = z0max*exp( - tem1*tem1
& * czilc*ca*sqrt(ustar_lnd(i)*(0.01/1.5e-05)))


! mg, sfc-perts: add surface perturbations to ztmax/z0max ratio over land
Expand Down Expand Up @@ -265,15 +261,11 @@ subroutine sfc_diff_run (im,rvrdm1,eps,epsm1,grav, & !intent(in)

! czilc = 10.0 ** (- (0.40/0.07) * z0) ! fei's canopy height
! dependance of czil
! czilc = 0.8

! tem1 = 1.0 - sigmaf(i)
! ztmax = z0max*exp( - tem1*tem1
! & * czilc*ca*sqrt(ustar_ice(i)*(0.01/1.5e-05)))
czilc = 10.0 ** (- 4. * z0max) ! Trier et al. (2011, WAF)
ztmax = z0max * exp( - czilc * ca
& * 258.2 * sqrt(ustar_ice(i)*z0max) )
czilc = 0.8

tem1 = 1.0 - sigmaf(i)
ztmax = z0max*exp( - tem1*tem1
& * czilc*ca*sqrt(ustar_ice(i)*(0.01/1.5e-05)))
ztmax = max(ztmax, 1.0e-6)
!
call stability
Expand Down Expand Up @@ -357,7 +349,6 @@ subroutine sfc_diff_run (im,rvrdm1,eps,epsm1,grav, & !intent(in)
else
z0rl_wat(i) = 1.0e-4
endif

endif
endif ! end of if(open ocean)
!
Expand Down