-
Notifications
You must be signed in to change notification settings - Fork 147
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
Implement Ferrier-Aligo MP scheme in CCPP-Physics #352
Changes from 51 commits
193435b
e77c0a1
d0d4035
63f07c4
d666a3e
970ae66
d06f755
bbac675
7c481b5
dbabee7
b78a1a2
8b886b9
c29c3cd
473ff9e
80fedc4
fb011da
d5f8a62
73f95a6
6b88864
9aaa575
4e0d9bd
c7faeb7
1426c6e
3a26975
ec729e8
727417c
1808226
44137a3
1f8a26a
bed9c0e
dff5b0f
d749a68
9fc5ac1
08662ae
2b8d9e4
bbbf155
370d49f
957ff82
1a024b7
fc744d3
dfccc5b
1656aac
53fba5b
258fceb
1ff46c7
a5b5fa9
bfedaab
327b07f
6777489
f2c9271
a312444
380229c
482a43b
db9e3a7
ab52b26
db7fc8d
4c2abd1
bd4a30c
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -81,7 +81,7 @@ end subroutine GFS_MP_generic_post_init | |
!> \section gfs_mp_gen GFS MP Generic Post General Algorithm | ||
!> @{ | ||
subroutine GFS_MP_generic_post_run(im, ix, levs, kdt, nrcm, ncld, nncl, ntcw, ntrac, imp_physics, imp_physics_gfdl, & | ||
imp_physics_thompson, imp_physics_mg, cal_pre, lssav, ldiag3d, cplflx, cplchm, con_g, dtf, frain, rainc, rain1, & | ||
imp_physics_thompson, imp_physics_mg, imp_physics_fer_hires, cal_pre, lssav, ldiag3d, cplflx, cplchm, con_g, dtf, frain, rainc, rain1, & | ||
rann, xlat, xlon, gt0, gq0, prsl, prsi, phii, tsfc, ice, snow, graupel, save_t, save_qv, rain0, ice0, snow0, & | ||
graupel0, del, rain, domr_diag, domzr_diag, domip_diag, doms_diag, tprcp, srflag, sr, cnvprcp, totprcp, totice, & | ||
totsnw, totgrp, cnvprcpb, totprcpb, toticeb, totsnwb, totgrpb, dt3dt, dq3dt, rain_cpl, rainc_cpl, snow_cpl, pwat, & | ||
|
@@ -93,7 +93,7 @@ subroutine GFS_MP_generic_post_run(im, ix, levs, kdt, nrcm, ncld, nncl, ntcw, nt | |
implicit none | ||
|
||
integer, intent(in) :: im, ix, levs, kdt, nrcm, ncld, nncl, ntcw, ntrac | ||
integer, intent(in) :: imp_physics, imp_physics_gfdl, imp_physics_thompson, imp_physics_mg | ||
integer, intent(in) :: imp_physics, imp_physics_gfdl, imp_physics_thompson, imp_physics_mg, imp_physics_fer_hires | ||
logical, intent(in) :: cal_pre, lssav, ldiag3d, cplflx, cplchm | ||
|
||
real(kind=kind_phys), intent(in) :: dtf, frain, con_g | ||
|
@@ -179,6 +179,10 @@ subroutine GFS_MP_generic_post_run(im, ix, levs, kdt, nrcm, ncld, nncl, ntcw, nt | |
graupel = frain*graupel0 ! time-step graupel | ||
ice = frain*ice0 ! time-step ice | ||
snow = frain*snow0 ! time-step snow | ||
|
||
else if (imp_physics == imp_physics_fer_hires) then | ||
tprcp = max (0.,rain) ! time-step convective and explicit precip | ||
ice = frain*rain1*sr ! time-step ice | ||
end if | ||
|
||
if (lsm==lsm_ruc) then | ||
|
@@ -277,7 +281,7 @@ subroutine GFS_MP_generic_post_run(im, ix, levs, kdt, nrcm, ncld, nncl, ntcw, nt | |
!! and determine explicit rain/snow by snow/ice/graupel coming out directly from MP | ||
!! and convective rainfall from the cumulus scheme if the surface temperature is below | ||
!! \f$0^oC\f$. | ||
if (imp_physics == imp_physics_gfdl .or. imp_physics == imp_physics_thompson) then | ||
if (imp_physics == imp_physics_gfdl .or. imp_physics == imp_physics_thompson ) then | ||
! determine convective rain/snow by surface temperature | ||
! determine large-scale rain/snow by rain/snow coming out directly from MP | ||
|
||
|
@@ -297,10 +301,17 @@ subroutine GFS_MP_generic_post_run(im, ix, levs, kdt, nrcm, ncld, nncl, ntcw, nt | |
! Sfcprop%srflag(i) = 1. ! clu: set srflag to 'snow' (i.e. 1) | ||
! endif | ||
! compute fractional srflag | ||
!if(imp_physics == imp_physics_fer_hires) then | ||
mzhangw marked this conversation as resolved.
Show resolved
Hide resolved
|
||
! total_precip = tprcp(i) | ||
! if (total_precip > rainmin) then | ||
! srflag(i) = (ice(i)+csnow)/total_precip | ||
! endif | ||
!else | ||
total_precip = snow0(i)+ice0(i)+graupel0(i)+rain0(i)+rainc(i) | ||
if (total_precip > rainmin) then | ||
srflag(i) = (snow0(i)+ice0(i)+graupel0(i)+csnow)/total_precip | ||
endif | ||
!endif | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Please remove this comment line 307 There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. DONE |
||
enddo | ||
else | ||
! only for RUC LSM | ||
|
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -21,6 +21,7 @@ end subroutine GFS_rrtmg_pre_init | |
subroutine GFS_rrtmg_pre_run (Model, Grid, Sfcprop, Statein, & ! input | ||
Tbd, Cldprop, Coupling, & | ||
Radtend, & ! input/output | ||
f_ice, f_rain, f_rimef, flgmin, cwm, & ! F-A mp scheme only | ||
lm, im, lmk, lmp, & ! input | ||
kd, kt, kb, raddt, delp, dz, plvl, plyr, & ! output | ||
tlvl, tlyr, tsfg, tsfa, qlyr, olyr, & | ||
|
@@ -60,6 +61,7 @@ subroutine GFS_rrtmg_pre_run (Model, Grid, Sfcprop, Statein, & ! input | |
& NSPC1 | ||
use module_radiation_clouds, only: NF_CLDS, & ! cld_init | ||
& progcld1, progcld3, & | ||
& progcld2, & | ||
& progcld4, progcld5, & | ||
& progclduni | ||
use module_radsw_parameters, only: topfsw_type, sfcfsw_type, & | ||
|
@@ -81,8 +83,16 @@ subroutine GFS_rrtmg_pre_run (Model, Grid, Sfcprop, Statein, & ! input | |
|
||
integer, intent(in) :: im, lm, lmk, lmp | ||
integer, intent(out) :: kd, kt, kb | ||
|
||
! F-A mp scheme only | ||
real(kind=kind_phys), dimension(size(Grid%xlon,1),Model%levr+LTP), intent(in) :: f_ice | ||
real(kind=kind_phys), dimension(size(Grid%xlon,1),Model%levr+LTP), intent(in) :: f_rain | ||
real(kind=kind_phys), dimension(size(Grid%xlon,1),Model%levr+LTP), intent(in) :: f_rimef | ||
real(kind=kind_phys), dimension(size(Grid%xlon,1),Model%levr+LTP), intent(out) :: cwm | ||
real(kind=kind_phys), dimension(size(Grid%xlon,1)), intent(in) :: flgmin | ||
real(kind=kind_phys), intent(out) :: raddt | ||
|
||
|
||
real(kind=kind_phys), dimension(size(Grid%xlon,1),Model%levr+LTP), intent(out) :: delp | ||
real(kind=kind_phys), dimension(size(Grid%xlon,1),Model%levr+LTP), intent(out) :: dz | ||
real(kind=kind_phys), dimension(size(Grid%xlon,1),Model%levr+1+LTP), intent(out) :: plvl | ||
|
@@ -519,7 +529,7 @@ subroutine GFS_rrtmg_pre_run (Model, Grid, Sfcprop, Statein, & ! input | |
ccnd(i,k,1) = tracer1(i,k,ntcw) ! liquid water/ice | ||
enddo | ||
enddo | ||
elseif (Model%ncnd == 2) then ! MG | ||
elseif (Model%ncnd == 2) then ! MG or F-A | ||
do k=1,LMK | ||
do i=1,IM | ||
ccnd(i,k,1) = tracer1(i,k,ntcw) ! liquid water | ||
|
@@ -713,6 +723,33 @@ subroutine GFS_rrtmg_pre_run (Model, Grid, Sfcprop, Statein, & ! input | |
Model%sup, Model%kdt, me, & | ||
clouds, cldsa, mtopa, mbota, de_lgth) ! --- outputs | ||
|
||
! elseif (Model%imp_physics == 15) then ! F-A cloud scheme | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Same comment as above and applies to all commented code in this scheme. Consider removing unless you really need to keep this in for later use, like if you're still debugging the scheme. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Done |
||
|
||
|
||
! if(Model%me==0) then | ||
! write(0,*)'F-A: progclduni max(cldcov), min(cldcov) =' & | ||
! ,maxval(cldcov),minval(cldcov) | ||
! write(0,*)'F-A: progclduni max(ccnd_c), min(ccnd_c) =' & | ||
! ,maxval(ccnd(:,:,1)),minval(ccnd(:,:,1)) | ||
! write(0,*)'F-A: progclduni max(ccnd_i), min(ccnd_i) =' & | ||
! ,maxval(ccnd(:,:,2)),minval(ccnd(:,:,2)) | ||
! write(0,*)'F-A: progclduni max(ccnd_r), min(ccnd_r) =' & | ||
! ,maxval(ccnd(:,:,3)),minval(ccnd(:,:,3)) | ||
! write(0,*)'F-A: progclduni max(ccnd_s), min(ccnd_s) =' & | ||
! ,maxval(ccnd(:,:,4)),minval(ccnd(:,:,4)) | ||
! write(0,*)'F-A:-----------------------------------' | ||
! endif | ||
|
||
! call progclduni (plyr, plvl, tlyr, tvly, ccnd, ncndl, & ! --- inputs | ||
! Grid%xlat, Grid%xlon, Sfcprop%slmsk, dz,delp, & | ||
! IM, LMK, LMP, cldcov, & | ||
! effrl, effri, effrr, effrs, Model%effr_in, & | ||
! clouds, cldsa, mtopa, mbota, de_lgth) ! --- outputs | ||
|
||
! if(Model%me==0) write(0,*)'F-A: progclduni max(clouds(:,:,1)),& | ||
! min(clouds(:,:,1)) = ' & | ||
! ,maxval(clouds(:,:,1)),minval(clouds(:,:,1)) | ||
|
||
elseif (Model%imp_physics == 11) then ! GFDL cloud scheme | ||
|
||
if (.not.Model%lgfdlmprad) then | ||
|
@@ -737,14 +774,30 @@ subroutine GFS_rrtmg_pre_run (Model, Grid, Sfcprop, Statein, & ! input | |
! clouds, cldsa, mtopa, mbota, de_lgth) ! --- outputs | ||
endif | ||
|
||
elseif(Model%imp_physics == 8 .or. Model%imp_physics == 6) then ! Thompson / WSM6 cloud micrphysics scheme | ||
|
||
! elseif(Model%imp_physics == 8 .or. Model%imp_physics == 6) then ! Thompson / WSM6 cloud micrphysics scheme | ||
!MZ | ||
elseif(Model%imp_physics == 8 .or. Model%imp_physics == 6 .or. & | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. At some point, we should be using == imp_physics_thompson instead of == 8 here (not this PR). |
||
Model%imp_physics == 15) then | ||
if (Model%kdt == 1) then | ||
Tbd%phy_f3d(:,:,Model%nleffr) = 10. | ||
Tbd%phy_f3d(:,:,Model%nieffr) = 50. | ||
Tbd%phy_f3d(:,:,Model%nseffr) = 250. | ||
endif | ||
|
||
! if(Model%me==0) then | ||
! write(0,*)'F-A: progcld5 max(cldcov), min(cldcov) =' & | ||
! ,maxval(cldcov),minval(cldcov) | ||
! write(0,*)'F-A: progcld5 max(ccnd_c), min(ccnd_c) =' & | ||
! ,maxval(ccnd(:,:,1)),minval(ccnd(:,:,1)) | ||
! write(0,*)'F-A: progcld5 max(ccnd_i), min(ccnd_i) =' & | ||
! ,maxval(ccnd(:,:,2)),minval(ccnd(:,:,2)) | ||
! write(0,*)'F-A: progcld5 max(ccnd_r), min(ccnd_r) =' & | ||
! ,maxval(ccnd(:,:,3)),minval(ccnd(:,:,3)) | ||
! write(0,*)'F-A: progcld5 max(ccnd_s), min(ccnd_s) =' & | ||
! ,maxval(ccnd(:,:,4)),minval(ccnd(:,:,4)) | ||
! write(0,*)'F-A:-----------------------------------' | ||
! endif | ||
|
||
call progcld5 (plyr,plvl,tlyr,qlyr,qstl,rhly,tracer1, & ! --- inputs | ||
Grid%xlat,Grid%xlon,Sfcprop%slmsk,dz,delp, & | ||
ntrac-1, ntcw-1,ntiw-1,ntrw-1, & | ||
|
@@ -755,6 +808,20 @@ subroutine GFS_rrtmg_pre_run (Model, Grid, Sfcprop, Statein, & ! input | |
Tbd%phy_f3d(:,:,2), Tbd%phy_f3d(:,:,3), & | ||
clouds,cldsa,mtopa,mbota, de_lgth) ! --- outputs | ||
|
||
! if(Model%me==0) then | ||
! write(0,*)'F-A: progcld5 max(cldsa1), min(cldsa1) =' & | ||
! ,maxval(cldsa(:,1)),minval(cldsa(:,1)) | ||
! write(0,*)'F-A: progcld5 max(cldsa2), min(cldsa2) =' & | ||
! ,maxval(cldsa(:,2)),minval(cldsa(:,2)) | ||
! write(0,*)'F-A: progcld5 max(cldsa3), min(cldsa3) =' & | ||
! ,maxval(cldsa(:,3)),minval(cldsa(:,3)) | ||
! write(0,*)'F-A: progcld5 max(cldsa4), min(cldsa4) =' & | ||
! ,maxval(cldsa(:,4)),minval(cldsa(:,4)) | ||
! write(0,*)'F-A: progcld5 max(cldsa5), min(cldsa5) =' & | ||
! ,maxval(cldsa(:,5)),minval(cldsa(:,5)) | ||
! write(0,*)'F-A:-----------------------------------' | ||
! endif | ||
|
||
endif ! end if_imp_physics | ||
|
||
! endif ! end_if_ntcw | ||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This change shouldn't be in the PR.