Skip to content

Commit

Permalink
options for IN/CNN and MERRA2 climo of microphysics fv3atm (ufs-comm…
Browse files Browse the repository at this point in the history
  • Loading branch information
AnningCheng-NOAA authored Apr 10, 2020
1 parent 7c3eade commit 9b5a420
Show file tree
Hide file tree
Showing 17 changed files with 1,307 additions and 2,300 deletions.
93 changes: 93 additions & 0 deletions ccpp/suites/suite_FV3_GFS_v16_csawmg.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,93 @@
<?xml version="1.0" encoding="UTF-8"?>

<suite name="FV3_GFS_v16_csawmg" lib="ccppphys" ver="3">
<!-- <init></init> -->
<group name="time_vary">
<subcycle loop="1">
<scheme>GFS_time_vary_pre</scheme>
<scheme>GFS_rrtmg_setup</scheme>
<scheme>GFS_rad_time_vary</scheme>
<scheme>GFS_phys_time_vary</scheme>
</subcycle>
</group>
<group name="radiation">
<subcycle loop="1">
<scheme>GFS_suite_interstitial_rad_reset</scheme>
<scheme>GFS_rrtmg_pre</scheme>
<scheme>rrtmg_sw_pre</scheme>
<scheme>rrtmg_sw</scheme>
<scheme>rrtmg_sw_post</scheme>
<scheme>rrtmg_lw_pre</scheme>
<scheme>rrtmg_lw</scheme>
<scheme>rrtmg_lw_post</scheme>
<scheme>GFS_rrtmg_post</scheme>
</subcycle>
</group>
<group name="physics">
<subcycle loop="1">
<scheme>GFS_suite_interstitial_phys_reset</scheme>
<scheme>GFS_suite_stateout_reset</scheme>
<scheme>get_prs_fv3</scheme>
<scheme>GFS_suite_interstitial_1</scheme>
<scheme>GFS_surface_generic_pre</scheme>
<scheme>GFS_surface_composites_pre</scheme>
<scheme>dcyc2t3</scheme>
<scheme>GFS_surface_composites_inter</scheme>
<scheme>GFS_suite_interstitial_2</scheme>
</subcycle>
<!-- Surface iteration loop -->
<subcycle loop="2">
<scheme>sfc_diff</scheme>
<scheme>GFS_surface_loop_control_part1</scheme>
<scheme>sfc_nst_pre</scheme>
<scheme>sfc_nst</scheme>
<scheme>sfc_nst_post</scheme>
<scheme>lsm_noah</scheme>
<scheme>sfc_sice</scheme>
<scheme>GFS_surface_loop_control_part2</scheme>
</subcycle>
<!-- End of surface iteration loop -->
<subcycle loop="1">
<scheme>GFS_surface_composites_post</scheme>
<scheme>sfc_diag</scheme>
<scheme>sfc_diag_post</scheme>
<scheme>GFS_surface_generic_post</scheme>
<scheme>GFS_PBL_generic_pre</scheme>
<scheme>satmedmfvdif</scheme>
<scheme>GFS_PBL_generic_post</scheme>
<scheme>GFS_GWD_generic_pre</scheme>
<scheme>cires_ugwp</scheme>
<scheme>cires_ugwp_post</scheme>
<scheme>GFS_GWD_generic_post</scheme>
<scheme>rayleigh_damp</scheme>
<scheme>GFS_suite_stateout_update</scheme>
<scheme>ozphys_2015</scheme>
<scheme>h2ophys</scheme>
<scheme>GFS_DCNV_generic_pre</scheme>
<scheme>get_phi_fv3</scheme>
<scheme>GFS_suite_interstitial_3</scheme>
<scheme>cs_conv_pre</scheme>
<scheme>cs_conv</scheme>
<scheme>cs_conv_post</scheme>
<scheme>GFS_DCNV_generic_post</scheme>
<scheme>GFS_SCNV_generic_pre</scheme>
<scheme>samfshalcnv</scheme>
<scheme>GFS_SCNV_generic_post</scheme>
<scheme>GFS_suite_interstitial_4</scheme>
<scheme>cnvc90</scheme>
<scheme>GFS_MP_generic_pre</scheme>
<scheme>m_micro_pre</scheme>
<scheme>m_micro</scheme>
<scheme>m_micro_post</scheme>
<scheme>cs_conv_aw_adj</scheme>
<scheme>GFS_MP_generic_post</scheme>
<scheme>maximum_hourly_diagnostics</scheme>
</subcycle>
</group>
<group name="stochastics">
<subcycle loop="1">
<scheme>GFS_stochastics</scheme>
</subcycle>
</group>
<!-- <finalize></finalize> -->
</suite>
79 changes: 78 additions & 1 deletion gfsphysics/GFS_layer/GFS_diagnostics.F90
Original file line number Diff line number Diff line change
Expand Up @@ -700,8 +700,85 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop
ExtDiag(idx)%data(nb)%var2 => IntDiag(nb)%fluxr(:,16)
ExtDiag(idx)%data(nb)%var21 => IntDiag(nb)%fluxr(:,7)
enddo
! if(mpp_pe()==mpp_root_pe())print *,'in gfdl_diag_register,af TEMP_avelct,idx=',idx
!--- aerosol diagnostics ---
idx = idx + 1
ExtDiag(idx)%axes = 2
ExtDiag(idx)%name = 'AOD_550'
ExtDiag(idx)%desc = 'total aerosol optical depth at 550 nm'
ExtDiag(idx)%unit = 'numerical'
ExtDiag(idx)%mod_name = 'gfs_phys'
ExtDiag(idx)%intpl_method = 'bilinear'
allocate (ExtDiag(idx)%data(nblks))
do nb = 1,nblks
ExtDiag(idx)%data(nb)%var2 => IntDiag(nb)%fluxr(:,34)
enddo

!--- aerosol diagnostics ---
idx = idx + 1
ExtDiag(idx)%axes = 2
ExtDiag(idx)%name = 'DU_AOD_550'
ExtDiag(idx)%desc = 'dust aerosol optical depth at 550 nm'
ExtDiag(idx)%unit = 'numerical'
ExtDiag(idx)%mod_name = 'gfs_phys'
ExtDiag(idx)%intpl_method = 'bilinear'
allocate (ExtDiag(idx)%data(nblks))
do nb = 1,nblks
ExtDiag(idx)%data(nb)%var2 => IntDiag(nb)%fluxr(:,35)
enddo

!--- aerosol diagnostics ---
idx = idx + 1
ExtDiag(idx)%axes = 2
ExtDiag(idx)%name = 'BC_AOD_550'
ExtDiag(idx)%desc = 'soot aerosol optical depth at 550 nm'
ExtDiag(idx)%unit = 'numerical'
ExtDiag(idx)%mod_name = 'gfs_phys'
ExtDiag(idx)%intpl_method = 'bilinear'
allocate (ExtDiag(idx)%data(nblks))
do nb = 1,nblks
ExtDiag(idx)%data(nb)%var2 => IntDiag(nb)%fluxr(:,36)
enddo

!--- aerosol diagnostics ---
idx = idx + 1
ExtDiag(idx)%axes = 2
ExtDiag(idx)%name = 'OC_AOD_550'
ExtDiag(idx)%desc = 'waso aerosol optical depth at 550 nm'
ExtDiag(idx)%unit = 'numerical'
ExtDiag(idx)%mod_name = 'gfs_phys'
ExtDiag(idx)%intpl_method = 'bilinear'
allocate (ExtDiag(idx)%data(nblks))
do nb = 1,nblks
ExtDiag(idx)%data(nb)%var2 => IntDiag(nb)%fluxr(:,37)
enddo

!--- aerosol diagnostics ---
idx = idx + 1
ExtDiag(idx)%axes = 2
ExtDiag(idx)%name = 'SU_AOD_550'
ExtDiag(idx)%desc = 'suso aerosol optical depth at 550 nm'
ExtDiag(idx)%unit = 'numerical'
ExtDiag(idx)%mod_name = 'gfs_phys'
ExtDiag(idx)%intpl_method = 'bilinear'
allocate (ExtDiag(idx)%data(nblks))
do nb = 1,nblks
ExtDiag(idx)%data(nb)%var2 => IntDiag(nb)%fluxr(:,38)
enddo

!--- aerosol diagnostics ---
idx = idx + 1
ExtDiag(idx)%axes = 2
ExtDiag(idx)%name = 'SS_AOD_550'
ExtDiag(idx)%desc = 'salt aerosol optical depth at 550 nm'
ExtDiag(idx)%unit = 'numerical'
ExtDiag(idx)%mod_name = 'gfs_phys'
ExtDiag(idx)%intpl_method = 'bilinear'
allocate (ExtDiag(idx)%data(nblks))
do nb = 1,nblks
ExtDiag(idx)%data(nb)%var2 => IntDiag(nb)%fluxr(:,39)
enddo

!
!
!--- accumulated diagnostics ---
do num = 1,NFXR
Expand Down
12 changes: 6 additions & 6 deletions gfsphysics/GFS_layer/GFS_driver.F90
Original file line number Diff line number Diff line change
Expand Up @@ -210,10 +210,10 @@ subroutine GFS_initialize (Model, Statein, Stateout, Sfcprop, &
#ifndef CCPP
call read_o3data (Model%ntoz, Model%me, Model%master)
call read_h2odata (Model%h2o_phys, Model%me, Model%master)
if (Model%aero_in) then
if (Model%iaerclm) then
call read_aerdata (Model%me,Model%master,Model%iflip,Model%idate)
endif
if (Model%iccn) then
if (Model%iccn == 1) then
call read_cidata ( Model%me, Model%master)
endif
#endif
Expand Down Expand Up @@ -286,7 +286,7 @@ subroutine GFS_initialize (Model, Statein, Stateout, Sfcprop, &
endif

!--- read in and initialize IN and CCN
if (Model%iccn) then
if (Model%iccn == 1) then
do nb = 1, nblks
call setindxci (Init_parm%blksz(nb), Grid(nb)%xlat_d, Grid(nb)%jindx1_ci, &
Grid(nb)%jindx2_ci, Grid(nb)%ddy_ci, Grid(nb)%xlon_d, &
Expand All @@ -295,7 +295,7 @@ subroutine GFS_initialize (Model, Statein, Stateout, Sfcprop, &
endif

!--- read in and initialize aerosols
if (Model%aero_in) then
if (Model%iaerclm) then
do nb = 1, nblks
call setindxaer (Init_parm%blksz(nb),Grid(nb)%xlat_d,Grid(nb)%jindx1_aer, &
Grid(nb)%jindx2_aer, Grid(nb)%ddy_aer, Grid(nb)%xlon_d, &
Expand Down Expand Up @@ -1009,7 +1009,7 @@ subroutine GFS_phys_time_vary (Model, Grid, Tbd, Statein)
endif

!--- ICCN interpolation
if (Model%ICCN ) then
if (Model%ICCN == 1) then
do nb = 1, nblks
call ciinterpol (Model%me, blksz(nb), Model%idate, Model%fhour, &
Grid(nb)%jindx1_ci, Grid(nb)%jindx2_ci, &
Expand All @@ -1021,7 +1021,7 @@ subroutine GFS_phys_time_vary (Model, Grid, Tbd, Statein)
endif

!--- aerosol interpolation
if (Model%aero_in ) then
if (Model%iaerclm ) then
do nb = 1, nblks
call aerinterpol (Model%me, Model%master, blksz(nb), &
Model%idate, Model%fhour, &
Expand Down
50 changes: 24 additions & 26 deletions gfsphysics/GFS_layer/GFS_physics_driver.F90
Original file line number Diff line number Diff line change
Expand Up @@ -4949,32 +4949,30 @@ subroutine GFS_physics_driver &
! write(1000+me,*)' maxwatncb=',maxval(Stateout%gq0(1:im,k,ntlnc)),' k=',k,' kdt',kdt
! enddo

!## CCPP ##* m_micro.F90/m_micro_run
call m_micro_driver (im, ix, levs, Model%flipv, dtp, Statein%prsl, &
Statein%prsi, Statein%phil, Statein%phii, &
Statein%vvl, clw(1,1,2), QLCN, clw(1,1,1), QICN, &
Radtend%htrlw, Radtend%htrsw, w_upi, cf_upi, &
FRLAND, Diag%HPBL, CNV_MFD, CNV_DQLDT, &
! FRLAND, Diag%HPBL, CNV_MFD, CNV_PRC3, CNV_DQLDT, &
CLCN, Stateout%gu0, Stateout%gv0, Diag%dusfc, &
Diag%dvsfc, dusfc1, dvsfc1, dusfc1, dvsfc1, &
CNV_FICE, CNV_NDROP, CNV_NICE, Stateout%gq0(1,1,1), &
Stateout%gq0(1,1,ntcw), &
Stateout%gq0(1,1,ntiw), Stateout%gt0, rain1, &
Diag%sr, Stateout%gq0(1,1,ntlnc), &
Stateout%gq0(1,1,ntinc), Model%fprcp, qrn, &
qsnw, qgl, ncpr, ncps, ncgl, &
Tbd%phy_f3d(1,1,1), kbot, &
Tbd%phy_f3d(1,1,2), Tbd%phy_f3d(1,1,3), &
Tbd%phy_f3d(1,1,4), Tbd%phy_f3d(1,1,5), &
Tbd%phy_f3d(1,1,kk), Tbd%aer_nm, &
Model%aero_in, Tbd%in_nm, Tbd%ccn_nm, Model%iccn, &
skip_macro, lprnt, &
! skip_macro, cn_prc, cn_snr, lprnt, &
! ipr, kdt, Grid%xlat, Grid%xlon)
Model%mg_alf, Model%mg_qcmin, Model%pdfflag, &
ipr, kdt, Grid%xlat, Grid%xlon, rhc)
!*## CCPP ##
call m_micro_driver (im, ix, levs, Model%flipv, dtp, Statein%prsl, &
Statein%prsi, Statein%phil, Statein%phii, &
Statein%vvl, clw(1,1,2), QLCN, clw(1,1,1), QICN, &
Radtend%htrlw, Radtend%htrsw, w_upi, cf_upi, &
FRLAND, Diag%HPBL, CNV_MFD, CNV_DQLDT, &
! FRLAND, Diag%HPBL, CNV_MFD, CNV_PRC3, CNV_DQLDT, &
CLCN, Stateout%gu0, Stateout%gv0, Diag%dusfc, &
Diag%dvsfc, dusfc1, dvsfc1, dusfc1, dvsfc1, &
CNV_FICE, CNV_NDROP, CNV_NICE, Stateout%gq0(1,1,1), &
Stateout%gq0(1,1,ntcw), &
Stateout%gq0(1,1,ntiw), Stateout%gt0, rain1, &
Diag%sr, Stateout%gq0(1,1,ntlnc), &
Stateout%gq0(1,1,ntinc), Model%fprcp, qrn, &
qsnw, qgl, ncpr, ncps, ncgl, &
Tbd%phy_f3d(1,1,1), kbot, &
Tbd%phy_f3d(1,1,2), Tbd%phy_f3d(1,1,3), &
Tbd%phy_f3d(1,1,4), Tbd%phy_f3d(1,1,5), &
Tbd%phy_f3d(1,1,kk), Tbd%aer_nm, &
Tbd%in_nm, Tbd%ccn_nm, Model%iccn, &
skip_macro, lprnt, &
! skip_macro, cn_prc, cn_snr, lprnt, &
! ipr, kdt, Grid%xlat, Grid%xlon)
Model%mg_alf, Model%mg_qcmin, Model%pdfflag, &
ipr, kdt, Grid%xlat, Grid%xlon, rhc)
! do k=1,levs
! write(1000+me,*)' maxwatnca=',maxval(Stateout%gq0(1:im,k,ntlnc)),' k=',k,' kdt=',kdt
! enddo
Expand Down
21 changes: 14 additions & 7 deletions gfsphysics/GFS_layer/GFS_radiation_driver.F90
Original file line number Diff line number Diff line change
Expand Up @@ -1566,7 +1566,8 @@ subroutine GFS_radiation_driver &
!check print *,' in grrad : calling setaer '
!## CCPP ##* GFS_rrtmg_pre.F90/GFS_rrtmg_pre_run
call setaer (plvl, plyr, prslk1, tvly, rhly, Sfcprop%slmsk, & ! --- inputs
tracer1, Grid%xlon, Grid%xlat, IM, LMK, LMP, &
tracer1, Tbd%aer_nm, &
Grid%xlon, Grid%xlat, IM, LMK, LMP, &
Model%lsswr,Model%lslwr, &
faersw,faerlw,aerodp) ! --- outputs

Expand Down Expand Up @@ -2058,12 +2059,18 @@ subroutine GFS_radiation_driver &
if (Model%lssav) then
if (Model%lsswr) then
do i=1,im
Diag%fluxr(i,34) = Diag%fluxr(i,34) + Model%fhswr*aerodp(i,1) ! total aod at 550nm
Diag%fluxr(i,35) = Diag%fluxr(i,35) + Model%fhswr*aerodp(i,2) ! DU aod at 550nm
Diag%fluxr(i,36) = Diag%fluxr(i,36) + Model%fhswr*aerodp(i,3) ! BC aod at 550nm
Diag%fluxr(i,37) = Diag%fluxr(i,37) + Model%fhswr*aerodp(i,4) ! OC aod at 550nm
Diag%fluxr(i,38) = Diag%fluxr(i,38) + Model%fhswr*aerodp(i,5) ! SU aod at 550nm
Diag%fluxr(i,39) = Diag%fluxr(i,39) + Model%fhswr*aerodp(i,6) ! SS aod at 550nm
! Diag%fluxr(i,34) = Diag%fluxr(i,34) + Model%fhswr*aerodp(i,1) ! total aod at 550nm
! Diag%fluxr(i,35) = Diag%fluxr(i,35) + Model%fhswr*aerodp(i,2) ! DU aod at 550nm
! Diag%fluxr(i,36) = Diag%fluxr(i,36) + Model%fhswr*aerodp(i,3) ! BC aod at 550nm
! Diag%fluxr(i,37) = Diag%fluxr(i,37) + Model%fhswr*aerodp(i,4) ! OC aod at 550nm
! Diag%fluxr(i,38) = Diag%fluxr(i,38) + Model%fhswr*aerodp(i,5) ! SU aod at 550nm
! Diag%fluxr(i,39) = Diag%fluxr(i,39) + Model%fhswr*aerodp(i,6) ! SS aod at 550nm
Diag%fluxr(i,34) = aerodp(i,1) ! total aod at 550nm
Diag%fluxr(i,35) = aerodp(i,2) ! DU aod at 550nm
Diag%fluxr(i,36) = aerodp(i,3) ! BC aod at 550nm
Diag%fluxr(i,37) = aerodp(i,4) ! OC aod at 550nm
Diag%fluxr(i,38) = aerodp(i,5) ! SU aod at 550nm
Diag%fluxr(i,39) = aerodp(i,6) ! SS aod at 550nm
enddo
endif

Expand Down
Loading

0 comments on commit 9b5a420

Please sign in to comment.