From 8047c4f32e0c44bc18e686e3fceed9b2fcebfa69 Mon Sep 17 00:00:00 2001 From: Dustin Swales Date: Tue, 28 Nov 2023 20:35:05 +0000 Subject: [PATCH] Stash away --- scm/src/CCPP_typedefs.F90 | 638 ++++++++-------- scm/src/GFS_typedefs.F90 | 1488 ++++++++++++++++++------------------- scm/src/scm.F90 | 16 +- scm/src/scm_type_defs.F90 | 74 +- 4 files changed, 1106 insertions(+), 1110 deletions(-) diff --git a/scm/src/CCPP_typedefs.F90 b/scm/src/CCPP_typedefs.F90 index 6be455d89..41a321a68 100644 --- a/scm/src/CCPP_typedefs.F90 +++ b/scm/src/CCPP_typedefs.F90 @@ -42,173 +42,173 @@ module CCPP_typedefs !! type GFS_interstitial_type - real (kind=kind_phys), pointer :: adjsfculw_land(:) => null() !< - real (kind=kind_phys), pointer :: adjsfculw_ice(:) => null() !< - real (kind=kind_phys), pointer :: adjsfculw_water(:) => null() !< - real (kind=kind_phys), pointer :: adjnirbmd(:) => null() !< - real (kind=kind_phys), pointer :: adjnirbmu(:) => null() !< - real (kind=kind_phys), pointer :: adjnirdfd(:) => null() !< - real (kind=kind_phys), pointer :: adjnirdfu(:) => null() !< - real (kind=kind_phys), pointer :: adjvisbmd(:) => null() !< - real (kind=kind_phys), pointer :: adjvisbmu(:) => null() !< - real (kind=kind_phys), pointer :: adjvisdfu(:) => null() !< - real (kind=kind_phys), pointer :: adjvisdfd(:) => null() !< - real (kind=kind_phys), pointer :: aerodp(:,:) => null() !< - real (kind=kind_phys), pointer :: alb1d(:) => null() !< - real (kind=kind_phys), pointer :: alpha(:,:) => null() !< - real (kind=kind_phys), pointer :: bexp1d(:) => null() !< - real (kind=kind_phys), pointer :: cd(:) => null() !< - real (kind=kind_phys), pointer :: cd_ice(:) => null() !< - real (kind=kind_phys), pointer :: cd_land(:) => null() !< - real (kind=kind_phys), pointer :: cd_water(:) => null() !< - real (kind=kind_phys), pointer :: cdq(:) => null() !< - real (kind=kind_phys), pointer :: cdq_ice(:) => null() !< - real (kind=kind_phys), pointer :: cdq_land(:) => null() !< - real (kind=kind_phys), pointer :: cdq_water(:) => null() !< - real (kind=kind_phys), pointer :: cf_upi(:,:) => null() !< - real (kind=kind_phys), pointer :: chh_ice(:) => null() !< - real (kind=kind_phys), pointer :: chh_land(:) => null() !< - real (kind=kind_phys), pointer :: chh_water(:) => null() !< - real (kind=kind_phys), pointer :: clcn(:,:) => null() !< - real (kind=kind_phys), pointer :: cldf(:) => null() !< - real (kind=kind_phys), pointer :: cldsa(:,:) => null() !< - real (kind=kind_phys), pointer :: cldtaulw(:,:) => null() !< - real (kind=kind_phys), pointer :: cldtausw(:,:) => null() !< - real (kind=kind_phys), pointer :: cld1d(:) => null() !< - real (kind=kind_phys), pointer :: clouds(:,:,:) => null() !< - real (kind=kind_phys), pointer :: clw(:,:,:) => null() !< - real (kind=kind_phys), pointer :: clx(:,:) => null() !< - real (kind=kind_phys), pointer :: cmm_ice(:) => null() !< - real (kind=kind_phys), pointer :: cmm_land(:) => null() !< - real (kind=kind_phys), pointer :: cmm_water(:) => null() !< - real (kind=kind_phys), pointer :: cnv_dqldt(:,:) => null() !< - real (kind=kind_phys), pointer :: cnv_fice(:,:) => null() !< - real (kind=kind_phys), pointer :: cnv_mfd(:,:) => null() !< - real (kind=kind_phys), pointer :: cnv_ndrop(:,:) => null() !< - real (kind=kind_phys), pointer :: cnv_nice(:,:) => null() !< - real (kind=kind_phys), pointer :: cnvc(:,:) => null() !< - real (kind=kind_phys), pointer :: cnvw(:,:) => null() !< - real (kind=kind_phys), pointer :: ctei_r(:) => null() !< - real (kind=kind_phys), pointer :: ctei_rml(:) => null() !< - real (kind=kind_phys), pointer :: cumabs(:) => null() !< - real (kind=kind_phys), pointer :: dd_mf(:,:) => null() !< - real (kind=kind_phys), pointer :: de_lgth(:) => null() !< - real (kind=kind_phys), pointer :: del(:,:) => null() !< - real (kind=kind_phys), pointer :: del_gz(:,:) => null() !< - real (kind=kind_phys), pointer :: delr(:,:) => null() !< - real (kind=kind_phys), pointer :: dlength(:) => null() !< - real (kind=kind_phys), pointer :: dqdt(:,:,:) => null() !< - real (kind=kind_phys), pointer :: dqsfc1(:) => null() !< - real (kind=kind_phys), pointer :: drain(:) => null() !< - real (kind=kind_phys), pointer :: dtdt(:,:) => null() !< - real (kind=kind_phys), pointer :: dtsfc1(:) => null() !< - real (kind=kind_phys), pointer :: dtzm(:) => null() !< - real (kind=kind_phys), pointer :: dt_mf(:,:) => null() !< - real (kind=kind_phys), pointer :: dudt(:,:) => null() !< - real (kind=kind_phys), pointer :: dusfcg(:) => null() !< - real (kind=kind_phys), pointer :: dusfc1(:) => null() !< - real (kind=kind_phys), pointer :: dvdftra(:,:,:) => null() !< - real (kind=kind_phys), pointer :: dvdt(:,:) => null() !< - real (kind=kind_phys), pointer :: dvsfcg(:) => null() !< - real (kind=kind_phys), pointer :: dvsfc1(:) => null() !< - real (kind=kind_phys), pointer :: dzlyr(:,:) => null() !< - real (kind=kind_phys), pointer :: elvmax(:) => null() !< - real (kind=kind_phys), pointer :: ep1d(:) => null() !< - real (kind=kind_phys), pointer :: ep1d_ice(:) => null() !< - real (kind=kind_phys), pointer :: ep1d_land(:) => null() !< - real (kind=kind_phys), pointer :: ep1d_water(:) => null() !< - real (kind=kind_phys), pointer :: evap_ice(:) => null() !< - real (kind=kind_phys), pointer :: evap_land(:) => null() !< - real (kind=kind_phys), pointer :: evap_water(:) => null() !< - real (kind=kind_phys), pointer :: evbs(:) => null() !< - real (kind=kind_phys), pointer :: evcw(:) => null() !< - real (kind=kind_phys), pointer :: pah(:) => null() !< - real (kind=kind_phys), pointer :: ecan(:) => null() !< - real (kind=kind_phys), pointer :: etran(:) => null() !< - real (kind=kind_phys), pointer :: edir(:) => null() !< - real (kind=kind_phys), pointer :: faerlw(:,:,:,:) => null() !< - real (kind=kind_phys), pointer :: faersw(:,:,:,:) => null() !< - real (kind=kind_phys), pointer :: ffhh_ice(:) => null() !< - real (kind=kind_phys), pointer :: ffhh_land(:) => null() !< - real (kind=kind_phys), pointer :: ffhh_water(:) => null() !< - real (kind=kind_phys), pointer :: fh2(:) => null() !< - real (kind=kind_phys), pointer :: fh2_ice(:) => null() !< - real (kind=kind_phys), pointer :: fh2_land(:) => null() !< - real (kind=kind_phys), pointer :: fh2_water(:) => null() !< - logical, pointer :: flag_cice(:) => null() !< - logical, pointer :: flag_guess(:) => null() !< - logical, pointer :: flag_iter(:) => null() !< - real (kind=kind_phys), pointer :: ffmm_ice(:) => null() !< - real (kind=kind_phys), pointer :: ffmm_land(:) => null() !< - real (kind=kind_phys), pointer :: ffmm_water(:) => null() !< - real (kind=kind_phys), pointer :: fm10(:) => null() !< - real (kind=kind_phys), pointer :: fm10_ice(:) => null() !< - real (kind=kind_phys), pointer :: fm10_land(:) => null() !< - real (kind=kind_phys), pointer :: fm10_water(:) => null() !< + real (kind=kind_phys), allocatable :: adjsfculw_land(:) !< + real (kind=kind_phys), allocatable :: adjsfculw_ice(:) !< + real (kind=kind_phys), allocatable :: adjsfculw_water(:) !< + real (kind=kind_phys), allocatable :: adjnirbmd(:) !< + real (kind=kind_phys), allocatable :: adjnirbmu(:) !< + real (kind=kind_phys), allocatable :: adjnirdfd(:) !< + real (kind=kind_phys), allocatable :: adjnirdfu(:) !< + real (kind=kind_phys), allocatable :: adjvisbmd(:) !< + real (kind=kind_phys), allocatable :: adjvisbmu(:) !< + real (kind=kind_phys), allocatable :: adjvisdfu(:) !< + real (kind=kind_phys), allocatable :: adjvisdfd(:) !< + real (kind=kind_phys), allocatable :: aerodp(:,:) !< + real (kind=kind_phys), allocatable :: alb1d(:) !< + real (kind=kind_phys), allocatable :: alpha(:,:) !< + real (kind=kind_phys), allocatable :: bexp1d(:) !< + real (kind=kind_phys), allocatable :: cd(:) !< + real (kind=kind_phys), allocatable :: cd_ice(:) !< + real (kind=kind_phys), allocatable :: cd_land(:) !< + real (kind=kind_phys), allocatable :: cd_water(:) !< + real (kind=kind_phys), allocatable :: cdq(:) !< + real (kind=kind_phys), allocatable :: cdq_ice(:) !< + real (kind=kind_phys), allocatable :: cdq_land(:) !< + real (kind=kind_phys), allocatable :: cdq_water(:) !< + real (kind=kind_phys), allocatable :: cf_upi(:,:) !< + real (kind=kind_phys), allocatable :: chh_ice(:) !< + real (kind=kind_phys), allocatable :: chh_land(:) !< + real (kind=kind_phys), allocatable :: chh_water(:) !< + real (kind=kind_phys), allocatable :: clcn(:,:) !< + real (kind=kind_phys), allocatable :: cldf(:) !< + real (kind=kind_phys), allocatable :: cldsa(:,:) !< + real (kind=kind_phys), allocatable :: cldtaulw(:,:) !< + real (kind=kind_phys), allocatable :: cldtausw(:,:) !< + real (kind=kind_phys), allocatable :: cld1d(:) !< + real (kind=kind_phys), allocatable :: clouds(:,:,:) !< + real (kind=kind_phys), allocatable :: clw(:,:,:) !< + real (kind=kind_phys), allocatable :: clx(:,:) !< + real (kind=kind_phys), allocatable :: cmm_ice(:) !< + real (kind=kind_phys), allocatable :: cmm_land(:) !< + real (kind=kind_phys), allocatable :: cmm_water(:) !< + real (kind=kind_phys), allocatable :: cnv_dqldt(:,:) !< + real (kind=kind_phys), allocatable :: cnv_fice(:,:) !< + real (kind=kind_phys), allocatable :: cnv_mfd(:,:) !< + real (kind=kind_phys), allocatable :: cnv_ndrop(:,:) !< + real (kind=kind_phys), allocatable :: cnv_nice(:,:) !< + real (kind=kind_phys), allocatable :: cnvc(:,:) !< + real (kind=kind_phys), allocatable :: cnvw(:,:) !< + real (kind=kind_phys), allocatable :: ctei_r(:) !< + real (kind=kind_phys), allocatable :: ctei_rml(:) !< + real (kind=kind_phys), allocatable :: cumabs(:) !< + real (kind=kind_phys), allocatable :: dd_mf(:,:) !< + real (kind=kind_phys), allocatable :: de_lgth(:) !< + real (kind=kind_phys), allocatable :: del(:,:) !< + real (kind=kind_phys), allocatable :: del_gz(:,:) !< + real (kind=kind_phys), allocatable :: delr(:,:) !< + real (kind=kind_phys), allocatable :: dlength(:) !< + real (kind=kind_phys), allocatable :: dqdt(:,:,:) !< + real (kind=kind_phys), allocatable :: dqsfc1(:) !< + real (kind=kind_phys), allocatable :: drain(:) !< + real (kind=kind_phys), allocatable :: dtdt(:,:) !< + real (kind=kind_phys), allocatable :: dtsfc1(:) !< + real (kind=kind_phys), allocatable :: dtzm(:) !< + real (kind=kind_phys), allocatable :: dt_mf(:,:) !< + real (kind=kind_phys), allocatable :: dudt(:,:) !< + real (kind=kind_phys), allocatable :: dusfcg(:) !< + real (kind=kind_phys), allocatable :: dusfc1(:) !< + real (kind=kind_phys), allocatable :: dvdftra(:,:,:) !< + real (kind=kind_phys), allocatable :: dvdt(:,:) !< + real (kind=kind_phys), allocatable :: dvsfcg(:) !< + real (kind=kind_phys), allocatable :: dvsfc1(:) !< + real (kind=kind_phys), allocatable :: dzlyr(:,:) !< + real (kind=kind_phys), allocatable :: elvmax(:) !< + real (kind=kind_phys), allocatable :: ep1d(:) !< + real (kind=kind_phys), allocatable :: ep1d_ice(:) !< + real (kind=kind_phys), allocatable :: ep1d_land(:) !< + real (kind=kind_phys), allocatable :: ep1d_water(:) !< + real (kind=kind_phys), allocatable :: evap_ice(:) !< + real (kind=kind_phys), allocatable :: evap_land(:) !< + real (kind=kind_phys), allocatable :: evap_water(:) !< + real (kind=kind_phys), allocatable :: evbs(:) !< + real (kind=kind_phys), allocatable :: evcw(:) !< + real (kind=kind_phys), allocatable :: pah(:) !< + real (kind=kind_phys), allocatable :: ecan(:) !< + real (kind=kind_phys), allocatable :: etran(:) !< + real (kind=kind_phys), allocatable :: edir(:) !< + real (kind=kind_phys), allocatable :: faerlw(:,:,:,:) !< + real (kind=kind_phys), allocatable :: faersw(:,:,:,:) !< + real (kind=kind_phys), allocatable :: ffhh_ice(:) !< + real (kind=kind_phys), allocatable :: ffhh_land(:) !< + real (kind=kind_phys), allocatable :: ffhh_water(:) !< + real (kind=kind_phys), allocatable :: fh2(:) !< + real (kind=kind_phys), allocatable :: fh2_ice(:) !< + real (kind=kind_phys), allocatable :: fh2_land(:) !< + real (kind=kind_phys), allocatable :: fh2_water(:) !< + logical, allocatable :: flag_cice(:) !< + logical, allocatable :: flag_guess(:) !< + logical, allocatable :: flag_iter(:) !< + real (kind=kind_phys), allocatable :: ffmm_ice(:) !< + real (kind=kind_phys), allocatable :: ffmm_land(:) !< + real (kind=kind_phys), allocatable :: ffmm_water(:) !< + real (kind=kind_phys), allocatable :: fm10(:) !< + real (kind=kind_phys), allocatable :: fm10_ice(:) !< + real (kind=kind_phys), allocatable :: fm10_land(:) !< + real (kind=kind_phys), allocatable :: fm10_water(:) !< real (kind=kind_phys) :: frain !< - real (kind=kind_phys), pointer :: frland(:) => null() !< - real (kind=kind_phys), pointer :: fscav(:) => null() !< - real (kind=kind_phys), pointer :: fswtr(:) => null() !< - real (kind=kind_phys), pointer :: gabsbdlw(:) => null() !< - real (kind=kind_phys), pointer :: gabsbdlw_ice(:) => null() !< - real (kind=kind_phys), pointer :: gabsbdlw_land(:) => null() !< - real (kind=kind_phys), pointer :: gabsbdlw_water(:) => null() !< - real (kind=kind_phys), pointer :: gamma(:) => null() !< - real (kind=kind_phys), pointer :: gamq(:) => null() !< - real (kind=kind_phys), pointer :: gamt(:) => null() !< - real (kind=kind_phys), pointer :: gasvmr(:,:,:) => null() !< - real (kind=kind_phys), pointer :: gflx(:) => null() !< - real (kind=kind_phys), pointer :: gflx_ice(:) => null() !< - real (kind=kind_phys), pointer :: gflx_land(:) => null() !< - real (kind=kind_phys), pointer :: gflx_water(:) => null() !< - real (kind=kind_phys), pointer :: graupelmp(:) => null() !< - real (kind=kind_phys), pointer :: gwdcu(:,:) => null() !< - real (kind=kind_phys), pointer :: gwdcv(:,:) => null() !< - real (kind=kind_phys), pointer :: zvfun(:) => null() !< - real (kind=kind_phys), pointer :: hffac(:) => null() !< - real (kind=kind_phys), pointer :: hflxq(:) => null() !< - real (kind=kind_phys), pointer :: hflx_ice(:) => null() !< - real (kind=kind_phys), pointer :: hflx_land(:) => null() !< - real (kind=kind_phys), pointer :: hflx_water(:) => null() !< + real (kind=kind_phys), allocatable :: frland(:) !< + real (kind=kind_phys), allocatable :: fscav(:) !< + real (kind=kind_phys), allocatable :: fswtr(:) !< + real (kind=kind_phys), allocatable :: gabsbdlw(:) !< + real (kind=kind_phys), allocatable :: gabsbdlw_ice(:) !< + real (kind=kind_phys), allocatable :: gabsbdlw_land(:) !< + real (kind=kind_phys), allocatable :: gabsbdlw_water(:) !< + real (kind=kind_phys), allocatable :: gamma(:) !< + real (kind=kind_phys), allocatable :: gamq(:) !< + real (kind=kind_phys), allocatable :: gamt(:) !< + real (kind=kind_phys), allocatable :: gasvmr(:,:,:) !< + real (kind=kind_phys), allocatable :: gflx(:) !< + real (kind=kind_phys), allocatable :: gflx_ice(:) !< + real (kind=kind_phys), allocatable :: gflx_land(:) !< + real (kind=kind_phys), allocatable :: gflx_water(:) !< + real (kind=kind_phys), allocatable :: graupelmp(:) !< + real (kind=kind_phys), allocatable :: gwdcu(:,:) !< + real (kind=kind_phys), allocatable :: gwdcv(:,:) !< + real (kind=kind_phys), allocatable :: zvfun(:) !< + real (kind=kind_phys), allocatable :: hffac(:) !< + real (kind=kind_phys), allocatable :: hflxq(:) !< + real (kind=kind_phys), allocatable :: hflx_ice(:) !< + real (kind=kind_phys), allocatable :: hflx_land(:) !< + real (kind=kind_phys), allocatable :: hflx_water(:) !< !--- radiation variables that need to be carried over from radiation to physics - real (kind=kind_phys), pointer :: htlwc(:,:) => null() !< - real (kind=kind_phys), pointer :: htlw0(:,:) => null() !< - real (kind=kind_phys), pointer :: htswc(:,:) => null() !< - real (kind=kind_phys), pointer :: htsw0(:,:) => null() !< + real (kind=kind_phys), allocatable :: htlwc(:,:) !< + real (kind=kind_phys), allocatable :: htlw0(:,:) !< + real (kind=kind_phys), allocatable :: htswc(:,:) !< + real (kind=kind_phys), allocatable :: htsw0(:,:) !< ! - real (kind=kind_phys), pointer :: icemp(:) => null() !< - logical, pointer :: dry(:) => null() !< - integer, pointer :: idxday(:) => null() !< - logical, pointer :: icy(:) => null() !< - logical, pointer :: lake(:) => null() !< - logical, pointer :: ocean(:) => null() !< + real (kind=kind_phys), allocatable :: icemp(:) !< + logical, allocatable :: dry(:) !< + integer, allocatable :: idxday(:) !< + logical, allocatable :: icy(:) !< + logical, allocatable :: lake(:) !< + logical, allocatable :: ocean(:) !< integer :: ipr !< - integer, pointer :: islmsk(:) => null() !< - integer, pointer :: islmsk_cice(:) => null() !< + integer, allocatable :: islmsk(:) !< + integer, allocatable :: islmsk_cice(:) !< integer :: itc !< - logical, pointer :: wet(:) => null() !< + logical, allocatable :: wet(:) !< integer :: kb !< - integer, pointer :: kbot(:) => null() !< - integer, pointer :: kcnv(:) => null() !< + integer, allocatable :: kbot(:) !< + integer, allocatable :: kcnv(:) !< integer :: kd !< - integer, pointer :: kinver(:) => null() !< - integer, pointer :: kpbl(:) => null() !< + integer, allocatable :: kinver(:) !< + integer, allocatable :: kpbl(:) !< integer :: kt !< - integer, pointer :: ktop(:) => null() !< + integer, allocatable :: ktop(:) !< integer :: latidxprnt !< integer :: levi !< integer :: lmk !< integer :: lmp !< - integer, pointer :: mbota(:,:) => null() !< + integer, allocatable :: mbota(:,:) !< logical :: mg3_as_mg2 !< - integer, pointer :: mtopa(:,:) => null() !< + integer, allocatable :: mtopa(:,:) !< integer :: nbdlw !< integer :: nbdsw !< - real (kind=kind_phys), pointer :: ncgl(:,:) => null() !< - real (kind=kind_phys), pointer :: ncpi(:,:) => null() !< - real (kind=kind_phys), pointer :: ncpl(:,:) => null() !< - real (kind=kind_phys), pointer :: ncpr(:,:) => null() !< - real (kind=kind_phys), pointer :: ncps(:,:) => null() !< + real (kind=kind_phys), allocatable :: ncgl(:,:) !< + real (kind=kind_phys), allocatable :: ncpi(:,:) !< + real (kind=kind_phys), allocatable :: ncpl(:,:) !< + real (kind=kind_phys), allocatable :: ncpr(:,:) !< + real (kind=kind_phys), allocatable :: ncps(:,:) !< integer :: ncstrac !< integer :: nday !< integer :: nf_aelw !< @@ -224,200 +224,200 @@ module CCPP_typedefs integer :: ntk !< integer :: ntkev !< integer :: nvdiff !< - real (kind=kind_phys), pointer :: oa4(:,:) => null() !< - real (kind=kind_phys), pointer :: oc(:) => null() !< - real (kind=kind_phys), pointer :: olyr(:,:) => null() !< - logical , pointer :: otspt(:,:) => null() !< - logical , pointer :: otsptflag(:) => null() !< + real (kind=kind_phys), allocatable :: oa4(:,:) !< + real (kind=kind_phys), allocatable :: oc(:) !< + real (kind=kind_phys), allocatable :: olyr(:,:) !< + logical , allocatable :: otspt(:,:) !< + logical , allocatable :: otsptflag(:) !< integer :: oz_coeffp5 !< logical :: phys_hydrostatic !< - real (kind=kind_phys), pointer :: plvl(:,:) => null() !< - real (kind=kind_phys), pointer :: plyr(:,:) => null() !< - real (kind=kind_phys), pointer :: prcpmp(:) => null() !< - real (kind=kind_phys), pointer :: prnum(:,:) => null() !< - real (kind=kind_phys), pointer :: q2mp(:) => null() !< - real (kind=kind_phys), pointer :: qgl(:,:) => null() !< - real (kind=kind_phys), pointer :: qicn(:,:) => null() !< - real (kind=kind_phys), pointer :: qlcn(:,:) => null() !< - real (kind=kind_phys), pointer :: qlyr(:,:) => null() !< - real (kind=kind_phys), pointer :: qrn(:,:) => null() !< - real (kind=kind_phys), pointer :: qsnw(:,:) => null() !< - real (kind=kind_phys), pointer :: qss_ice(:) => null() !< - real (kind=kind_phys), pointer :: qss_land(:) => null() !< - real (kind=kind_phys), pointer :: qss_water(:) => null() !< + real (kind=kind_phys), allocatable :: plvl(:,:) !< + real (kind=kind_phys), allocatable :: plyr(:,:) !< + real (kind=kind_phys), allocatable :: prcpmp(:) !< + real (kind=kind_phys), allocatable :: prnum(:,:) !< + real (kind=kind_phys), allocatable :: q2mp(:) !< + real (kind=kind_phys), allocatable :: qgl(:,:) !< + real (kind=kind_phys), allocatable :: qicn(:,:) !< + real (kind=kind_phys), allocatable :: qlcn(:,:) !< + real (kind=kind_phys), allocatable :: qlyr(:,:) !< + real (kind=kind_phys), allocatable :: qrn(:,:) !< + real (kind=kind_phys), allocatable :: qsnw(:,:) !< + real (kind=kind_phys), allocatable :: qss_ice(:) !< + real (kind=kind_phys), allocatable :: qss_land(:) !< + real (kind=kind_phys), allocatable :: qss_water(:) !< logical :: fullradar_diag !< real (kind=kind_phys) :: raddt !< - real (kind=kind_phys), pointer :: rainmp(:) => null() !< - real (kind=kind_phys), pointer :: raincd(:) => null() !< - real (kind=kind_phys), pointer :: raincs(:) => null() !< - real (kind=kind_phys), pointer :: rainmcadj(:) => null() !< - real (kind=kind_phys), pointer :: rainp(:,:) => null() !< - real (kind=kind_phys), pointer :: rb(:) => null() !< - real (kind=kind_phys), pointer :: rb_ice(:) => null() !< - real (kind=kind_phys), pointer :: rb_land(:) => null() !< - real (kind=kind_phys), pointer :: rb_water(:) => null() !< + real (kind=kind_phys), allocatable :: rainmp(:) !< + real (kind=kind_phys), allocatable :: raincd(:) !< + real (kind=kind_phys), allocatable :: raincs(:) !< + real (kind=kind_phys), allocatable :: rainmcadj(:) !< + real (kind=kind_phys), allocatable :: rainp(:,:) !< + real (kind=kind_phys), allocatable :: rb(:) !< + real (kind=kind_phys), allocatable :: rb_ice(:) !< + real (kind=kind_phys), allocatable :: rb_land(:) !< + real (kind=kind_phys), allocatable :: rb_water(:) !< logical :: max_hourly_reset !< logical :: ext_diag_thompson_reset !< - real (kind=kind_phys), pointer :: rhc(:,:) => null() !< - real (kind=kind_phys), pointer :: runoff(:) => null() !< - real (kind=kind_phys), pointer :: save_q(:,:,:) => null() !< - real (kind=kind_phys), pointer :: save_t(:,:) => null() !< - real (kind=kind_phys), pointer :: save_tcp(:,:) => null() !< - real (kind=kind_phys), pointer :: save_u(:,:) => null() !< - real (kind=kind_phys), pointer :: save_v(:,:) => null() !< - real (kind=kind_phys), pointer :: sbsno(:) => null() !< - type (cmpfsw_type), pointer :: scmpsw(:) => null() !< - real (kind=kind_phys), pointer :: sfcalb(:,:) => null() !< - real (kind=kind_phys), pointer :: sigma(:) => null() !< - real (kind=kind_phys), pointer :: sigmaf(:) => null() !< - real (kind=kind_phys), pointer :: sigmafrac(:,:) => null() !< - real (kind=kind_phys), pointer :: sigmatot(:,:) => null() !< + real (kind=kind_phys), allocatable :: rhc(:,:) !< + real (kind=kind_phys), allocatable :: runoff(:) !< + real (kind=kind_phys), allocatable :: save_q(:,:,:) !< + real (kind=kind_phys), allocatable :: save_t(:,:) !< + real (kind=kind_phys), allocatable :: save_tcp(:,:) !< + real (kind=kind_phys), allocatable :: save_u(:,:) !< + real (kind=kind_phys), allocatable :: save_v(:,:) !< + real (kind=kind_phys), allocatable :: sbsno(:) !< + type (cmpfsw_type), allocatable :: scmpsw(:) !< + real (kind=kind_phys), allocatable :: sfcalb(:,:) !< + real (kind=kind_phys), allocatable :: sigma(:) !< + real (kind=kind_phys), allocatable :: sigmaf(:) !< + real (kind=kind_phys), allocatable :: sigmafrac(:,:) !< + real (kind=kind_phys), allocatable :: sigmatot(:,:) !< logical :: skip_macro !< - real (kind=kind_phys), pointer :: snowc(:) => null() !< - real (kind=kind_phys), pointer :: snohf(:) => null() !< - real (kind=kind_phys), pointer :: snowmp(:) => null() !< - real (kind=kind_phys), pointer :: snowmt(:) => null() !< - real (kind=kind_phys), pointer :: stress(:) => null() !< - real (kind=kind_phys), pointer :: stress_ice(:) => null() !< - real (kind=kind_phys), pointer :: stress_land(:) => null() !< - real (kind=kind_phys), pointer :: stress_water(:) => null() !< - real (kind=kind_phys), pointer :: t2mmp(:) => null() !< - real (kind=kind_phys), pointer :: theta(:) => null() !< - real (kind=kind_phys), pointer :: tlvl(:,:) => null() !< - real (kind=kind_phys), pointer :: tlyr(:,:) => null() !< - real (kind=kind_phys), pointer :: tprcp_ice(:) => null() !< - real (kind=kind_phys), pointer :: tprcp_land(:) => null() !< - real (kind=kind_phys), pointer :: tprcp_water(:) => null() !< + real (kind=kind_phys), allocatable :: snowc(:) !< + real (kind=kind_phys), allocatable :: snohf(:) !< + real (kind=kind_phys), allocatable :: snowmp(:) !< + real (kind=kind_phys), allocatable :: snowmt(:) !< + real (kind=kind_phys), allocatable :: stress(:) !< + real (kind=kind_phys), allocatable :: stress_ice(:) !< + real (kind=kind_phys), allocatable :: stress_land(:) !< + real (kind=kind_phys), allocatable :: stress_water(:) !< + real (kind=kind_phys), allocatable :: t2mmp(:) !< + real (kind=kind_phys), allocatable :: theta(:) !< + real (kind=kind_phys), allocatable :: tlvl(:,:) !< + real (kind=kind_phys), allocatable :: tlyr(:,:) !< + real (kind=kind_phys), allocatable :: tprcp_ice(:) !< + real (kind=kind_phys), allocatable :: tprcp_land(:) !< + real (kind=kind_phys), allocatable :: tprcp_water(:) !< integer :: tracers_start_index !< integer :: tracers_total !< integer :: tracers_water !< logical :: trans_aero !< - real (kind=kind_phys), pointer :: trans(:) => null() !< - real (kind=kind_phys), pointer :: tseal(:) => null() !< - real (kind=kind_phys), pointer :: tsfa(:) => null() !< - real (kind=kind_phys), pointer :: tsfc_water(:) => null() !< - real (kind=kind_phys), pointer :: tsfg(:) => null() !< - real (kind=kind_phys), pointer :: tsurf_ice(:) => null() !< - real (kind=kind_phys), pointer :: tsurf_land(:) => null() !< - real (kind=kind_phys), pointer :: tsurf_water(:) => null() !< - real (kind=kind_phys), pointer :: uustar_ice(:) => null() !< - real (kind=kind_phys), pointer :: uustar_land(:) => null() !< - real (kind=kind_phys), pointer :: uustar_water(:) => null() !< - real (kind=kind_phys), pointer :: vdftra(:,:,:) => null() !< - real (kind=kind_phys), pointer :: vegf1d(:) => null() !< + real (kind=kind_phys), allocatable :: trans(:) !< + real (kind=kind_phys), allocatable :: tseal(:) !< + real (kind=kind_phys), allocatable :: tsfa(:) !< + real (kind=kind_phys), allocatable :: tsfc_water(:) !< + real (kind=kind_phys), allocatable :: tsfg(:) !< + real (kind=kind_phys), allocatable :: tsurf_ice(:) !< + real (kind=kind_phys), allocatable :: tsurf_land(:) !< + real (kind=kind_phys), allocatable :: tsurf_water(:) !< + real (kind=kind_phys), allocatable :: uustar_ice(:) !< + real (kind=kind_phys), allocatable :: uustar_land(:) !< + real (kind=kind_phys), allocatable :: uustar_water(:) !< + real (kind=kind_phys), allocatable :: vdftra(:,:,:) !< + real (kind=kind_phys), allocatable :: vegf1d(:) !< real (kind=kind_phys) :: lndp_vgf !< - real (kind=kind_phys), pointer :: w_upi(:,:) => null() !< - real (kind=kind_phys), pointer :: wcbmax(:) => null() !< - real (kind=kind_phys), pointer :: wind(:) => null() !< - real (kind=kind_phys), pointer :: work1(:) => null() !< - real (kind=kind_phys), pointer :: work2(:) => null() !< - real (kind=kind_phys), pointer :: work3(:) => null() !< - real (kind=kind_phys), pointer :: xcosz(:) => null() !< - real (kind=kind_phys), pointer :: xlai1d(:) => null() !< - real (kind=kind_phys), pointer :: xmu(:) => null() !< - real (kind=kind_phys), pointer :: z01d(:) => null() !< - real (kind=kind_phys), pointer :: zt1d(:) => null() !< - real (kind=kind_phys), pointer :: ztmax_ice(:) => null() !< - real (kind=kind_phys), pointer :: ztmax_land(:) => null() !< - real (kind=kind_phys), pointer :: ztmax_water(:) => null() !< + real (kind=kind_phys), allocatable :: w_upi(:,:) !< + real (kind=kind_phys), allocatable :: wcbmax(:) !< + real (kind=kind_phys), allocatable :: wind(:) !< + real (kind=kind_phys), allocatable :: work1(:) !< + real (kind=kind_phys), allocatable :: work2(:) !< + real (kind=kind_phys), allocatable :: work3(:) !< + real (kind=kind_phys), allocatable :: xcosz(:) !< + real (kind=kind_phys), allocatable :: xlai1d(:) !< + real (kind=kind_phys), allocatable :: xmu(:) !< + real (kind=kind_phys), allocatable :: z01d(:) !< + real (kind=kind_phys), allocatable :: zt1d(:) !< + real (kind=kind_phys), allocatable :: ztmax_ice(:) !< + real (kind=kind_phys), allocatable :: ztmax_land(:) !< + real (kind=kind_phys), allocatable :: ztmax_water(:) !< !================================================================================================== ! UGWP - five mechnanisms of momentum deposition due to various types of GWs ! (oss, ofd, obl, ogw) + ngw = sum( sso + ngw) !================================================================================================== ! nGWs - real (kind=kind_phys), pointer :: dudt_ngw(:,:) => null() !< - real (kind=kind_phys), pointer :: dvdt_ngw(:,:) => null() !< - real (kind=kind_phys), pointer :: dtdt_ngw(:,:) => null() !< - real (kind=kind_phys), pointer :: kdis_ngw(:,:) => null() !< + real (kind=kind_phys), allocatable :: dudt_ngw(:,:) !< + real (kind=kind_phys), allocatable :: dvdt_ngw(:,:) !< + real (kind=kind_phys), allocatable :: dtdt_ngw(:,:) !< + real (kind=kind_phys), allocatable :: kdis_ngw(:,:) !< - real (kind=kind_phys), pointer :: tau_oss(: ) => null() !< instantaneous momentum flux due to OSS - real (kind=kind_phys), pointer :: tau_tofd(:) => null() !< instantaneous momentum flux due to TOFD - real (kind=kind_phys), pointer :: tau_mtb(:) => null() !< instantaneous momentum of mountain blocking drag - real (kind=kind_phys), pointer :: tau_ogw(:) => null() !< instantaneous momentum flux of OGWs - real (kind=kind_phys), pointer :: tau_ngw(:) => null() !< instantaneous momentum flux of NGWs + real (kind=kind_phys), allocatable :: tau_oss(: ) !< instantaneous momentum flux due to OSS + real (kind=kind_phys), allocatable :: tau_tofd(:) !< instantaneous momentum flux due to TOFD + real (kind=kind_phys), allocatable :: tau_mtb(:) !< instantaneous momentum of mountain blocking drag + real (kind=kind_phys), allocatable :: tau_ogw(:) !< instantaneous momentum flux of OGWs + real (kind=kind_phys), allocatable :: tau_ngw(:) !< instantaneous momentum flux of NGWs - real (kind=kind_phys), pointer :: zngw(:) => null() !< launch levels of NGWs - real (kind=kind_phys), pointer :: zmtb(:) => null() !< mountain blocking height - real (kind=kind_phys), pointer :: zlwb(:) => null() !< low level wave breaking height - real (kind=kind_phys), pointer :: zogw(:) => null() !< height of OGW-launch + real (kind=kind_phys), allocatable :: zngw(:) !< launch levels of NGWs + real (kind=kind_phys), allocatable :: zmtb(:) !< mountain blocking height + real (kind=kind_phys), allocatable :: zlwb(:) !< low level wave breaking height + real (kind=kind_phys), allocatable :: zogw(:) !< height of OGW-launch - real (kind=kind_phys), pointer :: dudt_mtb(:,:) => null() !< daily aver u-wind tend due to mountain blocking - real (kind=kind_phys), pointer :: dudt_tms(:,:) => null() !< daily aver u-wind tend due to TMS + real (kind=kind_phys), allocatable :: dudt_mtb(:,:) !< daily aver u-wind tend due to mountain blocking + real (kind=kind_phys), allocatable :: dudt_tms(:,:) !< daily aver u-wind tend due to TMS ! RRTMGP - real (kind=kind_phys), pointer :: p_lay(:,:) => null() !< - real (kind=kind_phys), pointer :: p_lev(:,:) => null() !< - real (kind=kind_phys), pointer :: t_lev(:,:) => null() !< - real (kind=kind_phys), pointer :: t_lay(:,:) => null() !< - real (kind=kind_phys), pointer :: relhum(:,:) => null() !< - real (kind=kind_phys), pointer :: tv_lay(:,:) => null() !< - real (kind=kind_phys), pointer :: qs_lay(:,:) => null() !< - real (kind=kind_phys), pointer :: q_lay(:,:) => null() !< - real (kind=kind_phys), pointer :: deltaZ(:,:) => null() !< - real (kind=kind_phys), pointer :: deltaZc(:,:) => null() !< - real (kind=kind_phys), pointer :: deltaP(:,:) => null() !< - real (kind=kind_phys), pointer :: cloud_overlap_param(:,:) => null() !< Cloud overlap parameter - real (kind=kind_phys), pointer :: cnv_cloud_overlap_param(:,:) => null() !< Convective cloud overlap parameter - real (kind=kind_phys), pointer :: precip_overlap_param(:,:) => null() !< Precipitation overlap parameter - real (kind=kind_phys), pointer :: tracer(:,:,:) => null() !< - real (kind=kind_phys), pointer :: aerosolslw(:,:,:,:) => null() !< Aerosol radiative properties in each LW band. - real (kind=kind_phys), pointer :: aerosolssw(:,:,:,:) => null() !< Aerosol radiative properties in each SW band. - real (kind=kind_phys), pointer :: cld_frac(:,:) => null() !< Total cloud fraction - real (kind=kind_phys), pointer :: cld_lwp(:,:) => null() !< Cloud liquid water path - real (kind=kind_phys), pointer :: cld_reliq(:,:) => null() !< Cloud liquid effective radius - real (kind=kind_phys), pointer :: cld_iwp(:,:) => null() !< Cloud ice water path - real (kind=kind_phys), pointer :: cld_reice(:,:) => null() !< Cloud ice effecive radius - real (kind=kind_phys), pointer :: cld_swp(:,:) => null() !< Cloud snow water path - real (kind=kind_phys), pointer :: cld_resnow(:,:) => null() !< Cloud snow effective radius - real (kind=kind_phys), pointer :: cld_rwp(:,:) => null() !< Cloud rain water path - real (kind=kind_phys), pointer :: cld_rerain(:,:) => null() !< Cloud rain effective radius - real (kind=kind_phys), pointer :: precip_frac(:,:) => null() !< Precipitation fraction - real (kind=kind_phys), pointer :: cld_cnv_frac(:,:) => null() !< SGS convective cloud fraction - real (kind=kind_phys), pointer :: cld_cnv_lwp(:,:) => null() !< SGS convective cloud liquid water path - real (kind=kind_phys), pointer :: cld_cnv_reliq(:,:) => null() !< SGS convective cloud liquid effective radius - real (kind=kind_phys), pointer :: cld_cnv_iwp(:,:) => null() !< SGS convective cloud ice water path - real (kind=kind_phys), pointer :: cld_cnv_reice(:,:) => null() !< SGS convective cloud ice effecive radius - real (kind=kind_phys), pointer :: cld_pbl_lwp(:,:) => null() !< SGS PBL cloud liquid water path - real (kind=kind_phys), pointer :: cld_pbl_reliq(:,:) => null() !< SGS PBL cloud liquid effective radius - real (kind=kind_phys), pointer :: cld_pbl_iwp(:,:) => null() !< SGS PBL cloud ice water path - real (kind=kind_phys), pointer :: cld_pbl_reice(:,:) => null() !< SGS PBL cloud ice effecive radius - real (kind=kind_phys), pointer :: fluxlwUP_allsky(:,:) => null() !< RRTMGP upward longwave all-sky flux profile - real (kind=kind_phys), pointer :: fluxlwDOWN_allsky(:,:) => null() !< RRTMGP downward longwave all-sky flux profile - real (kind=kind_phys), pointer :: fluxlwUP_clrsky(:,:) => null() !< RRTMGP upward longwave clr-sky flux profile - real (kind=kind_phys), pointer :: fluxlwDOWN_clrsky(:,:) => null() !< RRTMGP downward longwave clr-sky flux profile - real (kind=kind_phys), pointer :: fluxswUP_allsky(:,:) => null() !< RRTMGP upward shortwave all-sky flux profile - real (kind=kind_phys), pointer :: fluxswDOWN_allsky(:,:) => null() !< RRTMGP downward shortwave all-sky flux profile - real (kind=kind_phys), pointer :: fluxswUP_clrsky(:,:) => null() !< RRTMGP upward shortwave clr-sky flux profile - real (kind=kind_phys), pointer :: fluxswDOWN_clrsky(:,:) => null() !< RRTMGP downward shortwave clr-sky flux profile - real (kind=kind_phys), pointer :: sfc_emiss_byband(:,:) => null() !< - real (kind=kind_phys), pointer :: sec_diff_byband(:,:) => null() !< - real (kind=kind_phys), pointer :: sfc_alb_nir_dir(:,:) => null() !< - real (kind=kind_phys), pointer :: sfc_alb_nir_dif(:,:) => null() !< - real (kind=kind_phys), pointer :: sfc_alb_uvvis_dir(:,:) => null() !< - real (kind=kind_phys), pointer :: sfc_alb_uvvis_dif(:,:) => null() !< - real (kind=kind_phys), pointer :: toa_src_lw(:,:) => null() !< - real (kind=kind_phys), pointer :: toa_src_sw(:,:) => null() !< - type(proflw_type), pointer :: flxprf_lw(:,:) => null() !< DDT containing RRTMGP longwave fluxes - type(profsw_type), pointer :: flxprf_sw(:,:) => null() !< DDT containing RRTMGP shortwave fluxes - real (kind=kind_phys), pointer :: vmr_o2(:,:) => null() !< - real (kind=kind_phys), pointer :: vmr_h2o(:,:) => null() !< - real (kind=kind_phys), pointer :: vmr_o3(:,:) => null() !< - real (kind=kind_phys), pointer :: vmr_ch4(:,:) => null() !< - real (kind=kind_phys), pointer :: vmr_n2o(:,:) => null() !< - real (kind=kind_phys), pointer :: vmr_co2(:,:) => null() !< + real (kind=kind_phys), allocatable :: p_lay(:,:) !< + real (kind=kind_phys), allocatable :: p_lev(:,:) !< + real (kind=kind_phys), allocatable :: t_lev(:,:) !< + real (kind=kind_phys), allocatable :: t_lay(:,:) !< + real (kind=kind_phys), allocatable :: relhum(:,:) !< + real (kind=kind_phys), allocatable :: tv_lay(:,:) !< + real (kind=kind_phys), allocatable :: qs_lay(:,:) !< + real (kind=kind_phys), allocatable :: q_lay(:,:) !< + real (kind=kind_phys), allocatable :: deltaZ(:,:) !< + real (kind=kind_phys), allocatable :: deltaZc(:,:) !< + real (kind=kind_phys), allocatable :: deltaP(:,:) !< + real (kind=kind_phys), allocatable :: cloud_overlap_param(:,:) !< Cloud overlap parameter + real (kind=kind_phys), allocatable :: cnv_cloud_overlap_param(:,:) !< Convective cloud overlap parameter + real (kind=kind_phys), allocatable :: precip_overlap_param(:,:) !< Precipitation overlap parameter + real (kind=kind_phys), allocatable :: tracer(:,:,:) !< + real (kind=kind_phys), allocatable :: aerosolslw(:,:,:,:) !< Aerosol radiative properties in each LW band. + real (kind=kind_phys), allocatable :: aerosolssw(:,:,:,:) !< Aerosol radiative properties in each SW band. + real (kind=kind_phys), allocatable :: cld_frac(:,:) !< Total cloud fraction + real (kind=kind_phys), allocatable :: cld_lwp(:,:) !< Cloud liquid water path + real (kind=kind_phys), allocatable :: cld_reliq(:,:) !< Cloud liquid effective radius + real (kind=kind_phys), allocatable :: cld_iwp(:,:) !< Cloud ice water path + real (kind=kind_phys), allocatable :: cld_reice(:,:) !< Cloud ice effecive radius + real (kind=kind_phys), allocatable :: cld_swp(:,:) !< Cloud snow water path + real (kind=kind_phys), allocatable :: cld_resnow(:,:) !< Cloud snow effective radius + real (kind=kind_phys), allocatable :: cld_rwp(:,:) !< Cloud rain water path + real (kind=kind_phys), allocatable :: cld_rerain(:,:) !< Cloud rain effective radius + real (kind=kind_phys), allocatable :: precip_frac(:,:) !< Precipitation fraction + real (kind=kind_phys), allocatable :: cld_cnv_frac(:,:) !< SGS convective cloud fraction + real (kind=kind_phys), allocatable :: cld_cnv_lwp(:,:) !< SGS convective cloud liquid water path + real (kind=kind_phys), allocatable :: cld_cnv_reliq(:,:) !< SGS convective cloud liquid effective radius + real (kind=kind_phys), allocatable :: cld_cnv_iwp(:,:) !< SGS convective cloud ice water path + real (kind=kind_phys), allocatable :: cld_cnv_reice(:,:) !< SGS convective cloud ice effecive radius + real (kind=kind_phys), allocatable :: cld_pbl_lwp(:,:) !< SGS PBL cloud liquid water path + real (kind=kind_phys), allocatable :: cld_pbl_reliq(:,:) !< SGS PBL cloud liquid effective radius + real (kind=kind_phys), allocatable :: cld_pbl_iwp(:,:) !< SGS PBL cloud ice water path + real (kind=kind_phys), allocatable :: cld_pbl_reice(:,:) !< SGS PBL cloud ice effecive radius + real (kind=kind_phys), allocatable :: fluxlwUP_allsky(:,:) !< RRTMGP upward longwave all-sky flux profile + real (kind=kind_phys), allocatable :: fluxlwDOWN_allsky(:,:) !< RRTMGP downward longwave all-sky flux profile + real (kind=kind_phys), allocatable :: fluxlwUP_clrsky(:,:) !< RRTMGP upward longwave clr-sky flux profile + real (kind=kind_phys), allocatable :: fluxlwDOWN_clrsky(:,:) !< RRTMGP downward longwave clr-sky flux profile + real (kind=kind_phys), allocatable :: fluxswUP_allsky(:,:) !< RRTMGP upward shortwave all-sky flux profile + real (kind=kind_phys), allocatable :: fluxswDOWN_allsky(:,:) !< RRTMGP downward shortwave all-sky flux profile + real (kind=kind_phys), allocatable :: fluxswUP_clrsky(:,:) !< RRTMGP upward shortwave clr-sky flux profile + real (kind=kind_phys), allocatable :: fluxswDOWN_clrsky(:,:) !< RRTMGP downward shortwave clr-sky flux profile + real (kind=kind_phys), allocatable :: sfc_emiss_byband(:,:) !< + real (kind=kind_phys), allocatable :: sec_diff_byband(:,:) !< + real (kind=kind_phys), allocatable :: sfc_alb_nir_dir(:,:) !< + real (kind=kind_phys), allocatable :: sfc_alb_nir_dif(:,:) !< + real (kind=kind_phys), allocatable :: sfc_alb_uvvis_dir(:,:) !< + real (kind=kind_phys), allocatable :: sfc_alb_uvvis_dif(:,:) !< + real (kind=kind_phys), allocatable :: toa_src_lw(:,:) !< + real (kind=kind_phys), allocatable :: toa_src_sw(:,:) !< + type(proflw_type), allocatable :: flxprf_lw(:,:) !< DDT containing RRTMGP longwave fluxes + type(profsw_type), allocatable :: flxprf_sw(:,:) !< DDT containing RRTMGP shortwave fluxes + real (kind=kind_phys), allocatable :: vmr_o2(:,:) !< + real (kind=kind_phys), allocatable :: vmr_h2o(:,:) !< + real (kind=kind_phys), allocatable :: vmr_o3(:,:) !< + real (kind=kind_phys), allocatable :: vmr_ch4(:,:) !< + real (kind=kind_phys), allocatable :: vmr_n2o(:,:) !< + real (kind=kind_phys), allocatable :: vmr_co2(:,:) !< !-- GSL drag suite - real (kind=kind_phys), pointer :: varss(:) => null() !< - real (kind=kind_phys), pointer :: ocss(:) => null() !< - real (kind=kind_phys), pointer :: oa4ss(:,:) => null() !< - real (kind=kind_phys), pointer :: clxss(:,:) => null() !< + real (kind=kind_phys), allocatable :: varss(:) !< + real (kind=kind_phys), allocatable :: ocss(:) !< + real (kind=kind_phys), allocatable :: oa4ss(:,:) !< + real (kind=kind_phys), allocatable :: clxss(:,:) !< !-- 3D diagnostics integer :: rtg_ozone_index, rtg_tke_index !-- CCPP suite simulator - real (kind=kind_phys), pointer :: active_phys_tend(:,:,:) => null() ! tendencies for active physics process + real (kind=kind_phys), allocatable :: active_phys_tend(:,:,:) ! tendencies for active physics process contains @@ -785,10 +785,10 @@ subroutine gfs_interstitial_create (Interstitial, IM, Model) allocate (Interstitial%cnv_nice (IM,Model%levs)) end if if (Model%do_shoc) then - if (.not. associated(Interstitial%qrn)) allocate (Interstitial%qrn (IM,Model%levs)) - if (.not. associated(Interstitial%qsnw)) allocate (Interstitial%qsnw (IM,Model%levs)) + allocate (Interstitial%qrn (IM,Model%levs)) + allocate (Interstitial%qsnw (IM,Model%levs)) ! DH* updated version of shoc from May 22 2019 (not yet in CCPP) doesn't use qgl? remove? - if (.not. associated(Interstitial%qgl)) allocate (Interstitial%qgl (IM,Model%levs)) + allocate (Interstitial%qgl (IM,Model%levs)) ! *DH allocate (Interstitial%ncpi (IM,Model%levs)) allocate (Interstitial%ncpl (IM,Model%levs)) diff --git a/scm/src/GFS_typedefs.F90 b/scm/src/GFS_typedefs.F90 index 1ded0e1d6..4bef2ba62 100644 --- a/scm/src/GFS_typedefs.F90 +++ b/scm/src/GFS_typedefs.F90 @@ -111,21 +111,21 @@ module GFS_typedefs !--- hydrostatic/non-hydrostatic flag logical :: hydrostatic !< flag whether this is a hydrostatic or non-hydrostatic run !--- blocking data - integer, pointer :: blksz(:) !< for explicit data blocking + integer, allocatable :: blksz(:) !< for explicit data blocking !< default blksz(1)=[nx*ny] !--- ak/bk for pressure level calculations - real(kind=kind_phys), pointer :: ak(:) !< from surface (k=1) to TOA (k=levs) - real(kind=kind_phys), pointer :: bk(:) !< from surface (k=1) to TOA (k=levs) + real(kind=kind_phys), allocatable :: ak(:) !< from surface (k=1) to TOA (k=levs) + real(kind=kind_phys), allocatable :: bk(:) !< from surface (k=1) to TOA (k=levs) !--- grid metrics - real(kind=kind_phys), pointer :: xlon(:,:) !< column longitude for MPI rank - real(kind=kind_phys), pointer :: xlat(:,:) !< column latitude for MPI rank - real(kind=kind_phys), pointer :: area(:,:) !< column area for length scale calculations + real(kind=kind_phys), allocatable :: xlon(:,:) !< column longitude for MPI rank + real(kind=kind_phys), allocatable :: xlat(:,:) !< column latitude for MPI rank + real(kind=kind_phys), allocatable :: area(:,:) !< column area for length scale calculations integer :: nwat !< number of hydrometeors in dcyore (including water vapor) - character(len=32), pointer :: tracer_names(:) !< tracers names to dereference tracer id - integer, pointer :: tracer_types(:) !< tracers types: 0=generic, 1=chem,prog, 2=chem,diag + character(len=32), allocatable :: tracer_names(:) !< tracers names to dereference tracer id + integer, allocatable :: tracer_types(:) !< tracers types: 0=generic, 1=chem,prog, 2=chem,diag character(len=64) :: fn_nml !< namelist filename - character(len=:), pointer, dimension(:) :: input_nml_file => null() !< character string containing full namelist + character(len=:), allocatable, dimension(:) :: input_nml_file !< character string containing full namelist !< for use with internal file reads end type GFS_init_type @@ -140,29 +140,29 @@ module GFS_typedefs type GFS_statein_type !--- level geopotential and pressures - real (kind=kind_phys), pointer :: phii (:,:) => null() !< interface geopotential height - real (kind=kind_phys), pointer :: prsi (:,:) => null() !< model level pressure in Pa - real (kind=kind_phys), pointer :: prsik (:,:) => null() !< Exner function at interface + real (kind=kind_phys), allocatable :: phii (:,:) !< interface geopotential height + real (kind=kind_phys), allocatable :: prsi (:,:) !< model level pressure in Pa + real (kind=kind_phys), allocatable :: prsik (:,:) !< Exner function at interface !--- layer geopotential and pressures - real (kind=kind_phys), pointer :: phil (:,:) => null() !< layer geopotential height - real (kind=kind_phys), pointer :: prsl (:,:) => null() !< model layer mean pressure Pa - real (kind=kind_phys), pointer :: prslk (:,:) => null() !< exner function = (p/p0)**rocp + real (kind=kind_phys), allocatable :: phil (:,:) !< layer geopotential height + real (kind=kind_phys), allocatable :: prsl (:,:) !< model layer mean pressure Pa + real (kind=kind_phys), allocatable :: prslk (:,:) !< exner function = (p/p0)**rocp !--- prognostic variables - real (kind=kind_phys), pointer :: pgr (:) => null() !< surface pressure (Pa) real - real (kind=kind_phys), pointer :: ugrs (:,:) => null() !< u component of layer wind - real (kind=kind_phys), pointer :: vgrs (:,:) => null() !< v component of layer wind - real (kind=kind_phys), pointer :: wgrs (:,:) => null() !< w component of layer wind - real (kind=kind_phys), pointer :: vvl (:,:) => null() !< layer mean vertical velocity in pa/sec - real (kind=kind_phys), pointer :: tgrs (:,:) => null() !< model layer mean temperature in k - real (kind=kind_phys), pointer :: qgrs (:,:,:) => null() !< layer mean tracer concentration + real (kind=kind_phys), allocatable :: pgr (:) !< surface pressure (Pa) real + real (kind=kind_phys), allocatable :: ugrs (:,:) !< u component of layer wind + real (kind=kind_phys), allocatable :: vgrs (:,:) !< v component of layer wind + real (kind=kind_phys), allocatable :: wgrs (:,:) !< w component of layer wind + real (kind=kind_phys), allocatable :: vvl (:,:) !< layer mean vertical velocity in pa/sec + real (kind=kind_phys), allocatable :: tgrs (:,:) !< model layer mean temperature in k + real (kind=kind_phys), allocatable :: qgrs (:,:,:) !< layer mean tracer concentration ! dissipation estimate - real (kind=kind_phys), pointer :: diss_est(:,:) => null() !< model layer mean temperature in k + real (kind=kind_phys), allocatable :: diss_est(:,:) !< model layer mean temperature in k ! soil state variables - for soil SPPT - sfc-perts, mgehne - real (kind=kind_phys), pointer :: smc (:,:) => null() !< soil moisture content - real (kind=kind_phys), pointer :: stc (:,:) => null() !< soil temperature content - real (kind=kind_phys), pointer :: slc (:,:) => null() !< soil liquid water content + real (kind=kind_phys), allocatable :: smc (:,:) !< soil moisture content + real (kind=kind_phys), allocatable :: stc (:,:) !< soil temperature content + real (kind=kind_phys), allocatable :: slc (:,:) !< soil liquid water content contains procedure :: create => statein_create !< allocate array data @@ -179,10 +179,10 @@ module GFS_typedefs type GFS_stateout_type !-- Out (physics only) - real (kind=kind_phys), pointer :: gu0 (:,:) => null() !< updated zonal wind - real (kind=kind_phys), pointer :: gv0 (:,:) => null() !< updated meridional wind - real (kind=kind_phys), pointer :: gt0 (:,:) => null() !< updated temperature - real (kind=kind_phys), pointer :: gq0 (:,:,:) => null() !< updated tracers + real (kind=kind_phys), allocatable :: gu0 (:,:) !< updated zonal wind + real (kind=kind_phys), allocatable :: gv0 (:,:) !< updated meridional wind + real (kind=kind_phys), allocatable :: gt0 (:,:) !< updated temperature + real (kind=kind_phys), allocatable :: gq0 (:,:,:) !< updated tracers contains procedure :: create => stateout_create !< allocate array data @@ -199,275 +199,275 @@ module GFS_typedefs type GFS_sfcprop_type !--- In (radiation and physics) - real (kind=kind_phys), pointer :: slmsk (:) => null() !< sea/land mask array (sea:0,land:1,sea-ice:2) - real (kind=kind_phys), pointer :: oceanfrac(:) => null() !< ocean fraction [0:1] - real (kind=kind_phys), pointer :: landfrac(:) => null() !< land fraction [0:1] + real (kind=kind_phys), allocatable :: slmsk (:) !< sea/land mask array (sea:0,land:1,sea-ice:2) + real (kind=kind_phys), allocatable :: oceanfrac(:) !< ocean fraction [0:1] + real (kind=kind_phys), allocatable :: landfrac(:) !< land fraction [0:1] !--- In (lakes) - real (kind=kind_phys), pointer :: lakefrac(:) => null() !< lake fraction [0:1] - real (kind=kind_phys), pointer :: lakedepth(:) => null() !< lake depth [ m ] - real (kind=kind_phys), pointer :: clm_lakedepth(:) => null() !< clm internal lake depth [ m ] - integer, pointer :: use_lake_model(:) => null()!1=run lake, 2=run lake&nsst, 0=no lake - real (kind=kind_phys), pointer :: lake_t2m (:) => null() !< 2 meter temperature from CLM Lake model - real (kind=kind_phys), pointer :: lake_q2m (:) => null() !< 2 meter humidity from CLM Lake model - - real (kind=kind_phys), pointer :: h_ML(:) => null() !Mixed Layer depth of lakes [m] - real (kind=kind_phys), pointer :: t_ML(:) => null() !Mixing layer temperature in K - real (kind=kind_phys), pointer :: t_mnw(:) => null() !Mean temperature of the water column [K] - real (kind=kind_phys), pointer :: h_talb(:) => null() !the thermally active layer depth of the bottom sediments [m] - real (kind=kind_phys), pointer :: t_talb(:) => null() !Temperature at the bottom of the sediment upper layer [K] - real (kind=kind_phys), pointer :: t_bot1(:) => null() !Temperature at the water-bottom sediment interface [K] - real (kind=kind_phys), pointer :: t_bot2(:) => null() !Temperature for bottom layer of water [K] - real (kind=kind_phys), pointer :: c_t(:) => null() !Shape factor of water temperature vertical profile - real (kind=kind_phys), pointer :: T_snow(:) => null() !temperature of snow on a lake [K] - real (kind=kind_phys), pointer :: T_ice(:) => null() !temperature of ice on a lake [K] - - real (kind=kind_phys), pointer :: tsfc (:) => null() !< surface air temperature in K - real (kind=kind_phys), pointer :: vegtype_frac (:,:) => null() !< fractions [0:1] of veg. categories - real (kind=kind_phys), pointer :: soiltype_frac(:,:) => null() !< fractions [0:1] of soil categories + real (kind=kind_phys), allocatable :: lakefrac(:) !< lake fraction [0:1] + real (kind=kind_phys), allocatable :: lakedepth(:) !< lake depth [ m ] + real (kind=kind_phys), allocatable :: clm_lakedepth(:) !< clm internal lake depth [ m ] + integer, allocatable :: use_lake_model(:) !1=run lake, 2=run lake&nsst, 0=no lake + real (kind=kind_phys), allocatable :: lake_t2m (:) !< 2 meter temperature from CLM Lake model + real (kind=kind_phys), allocatable :: lake_q2m (:) !< 2 meter humidity from CLM Lake model + + real (kind=kind_phys), allocatable :: h_ML(:) !Mixed Layer depth of lakes [m] + real (kind=kind_phys), allocatable :: t_ML(:) !Mixing layer temperature in K + real (kind=kind_phys), allocatable :: t_mnw(:) !Mean temperature of the water column [K] + real (kind=kind_phys), allocatable :: h_talb(:) !the thermally active layer depth of the bottom sediments [m] + real (kind=kind_phys), allocatable :: t_talb(:) !Temperature at the bottom of the sediment upper layer [K] + real (kind=kind_phys), allocatable :: t_bot1(:) !Temperature at the water-bottom sediment interface [K] + real (kind=kind_phys), allocatable :: t_bot2(:) !Temperature for bottom layer of water [K] + real (kind=kind_phys), allocatable :: c_t(:) !Shape factor of water temperature vertical profile + real (kind=kind_phys), allocatable :: T_snow(:) !temperature of snow on a lake [K] + real (kind=kind_phys), allocatable :: T_ice(:) !temperature of ice on a lake [K] + + real (kind=kind_phys), allocatable :: tsfc (:) !< surface air temperature in K + real (kind=kind_phys), allocatable :: vegtype_frac (:,:) !< fractions [0:1] of veg. categories + real (kind=kind_phys), allocatable :: soiltype_frac(:,:) !< fractions [0:1] of soil categories !< [tsea in gbphys.f] - real (kind=kind_phys), pointer :: tsfco (:) => null() !< sst in K - real (kind=kind_phys), pointer :: tsfcl (:) => null() !< surface land temperature in K - real (kind=kind_phys), pointer :: tisfc (:) => null() !< surface temperature over ice fraction - real (kind=kind_phys), pointer :: tiice(:,:) => null() !< internal ice temperature - real (kind=kind_phys), pointer :: snowd (:) => null() !< snow depth water equivalent in mm ; same as snwdph - real (kind=kind_phys), pointer :: zorl (:) => null() !< composite surface roughness in cm - real (kind=kind_phys), pointer :: zorlw (:) => null() !< water surface roughness in cm - real (kind=kind_phys), pointer :: zorll (:) => null() !< land surface roughness in cm - real (kind=kind_phys), pointer :: zorli (:) => null() !< ice surface roughness in cm - real (kind=kind_phys), pointer :: zorlwav(:) => null() !< wave surface roughness in cm derived from wave model - real (kind=kind_phys), pointer :: fice (:) => null() !< ice fraction over open water grid - real (kind=kind_phys), pointer :: snodl (:) => null() !< snow depth over land - real (kind=kind_phys), pointer :: weasdl (:) => null() !< weasd over land - real (kind=kind_phys), pointer :: snodi (:) => null() !< snow depth over ice - real (kind=kind_phys), pointer :: weasdi (:) => null() !< weasd over ice - real (kind=kind_phys), pointer :: hprime (:,:) => null() !< orographic metrics - real (kind=kind_phys), pointer :: dust12m_in (:,:,:) => null() !< fengsha dust input - real (kind=kind_phys), pointer :: emi_in (:,:) => null() !< anthropogenic background input - real (kind=kind_phys), pointer :: smoke_RRFS(:,:,:) => null() !< RRFS fire input - real (kind=kind_phys), pointer :: z0base (:) => null() !< background or baseline surface roughness length in m - real (kind=kind_phys), pointer :: semisbase(:) => null() !< background surface emissivity - real (kind=kind_phys), pointer :: sfalb_lnd (:) => null() !< surface albedo over land for LSM - real (kind=kind_phys), pointer :: sfalb_ice (:) => null() !< surface albedo over ice for LSM - real (kind=kind_phys), pointer :: emis_lnd (:) => null() !< surface emissivity over land for LSM - real (kind=kind_phys), pointer :: emis_ice (:) => null() !< surface emissivity over ice for LSM - real (kind=kind_phys), pointer :: emis_wat (:) => null() !< surface emissivity over water - real (kind=kind_phys), pointer :: sfalb_lnd_bck (:) => null() !< snow-free albedo over land + real (kind=kind_phys), allocatable :: tsfco (:) !< sst in K + real (kind=kind_phys), allocatable :: tsfcl (:) !< surface land temperature in K + real (kind=kind_phys), allocatable :: tisfc (:) !< surface temperature over ice fraction + real (kind=kind_phys), allocatable :: tiice(:,:) !< internal ice temperature + real (kind=kind_phys), allocatable :: snowd (:) !< snow depth water equivalent in mm ; same as snwdph + real (kind=kind_phys), allocatable :: zorl (:) !< composite surface roughness in cm + real (kind=kind_phys), allocatable :: zorlw (:) !< water surface roughness in cm + real (kind=kind_phys), allocatable :: zorll (:) !< land surface roughness in cm + real (kind=kind_phys), allocatable :: zorli (:) !< ice surface roughness in cm + real (kind=kind_phys), allocatable :: zorlwav(:) !< wave surface roughness in cm derived from wave model + real (kind=kind_phys), allocatable :: fice (:) !< ice fraction over open water grid + real (kind=kind_phys), allocatable :: snodl (:) !< snow depth over land + real (kind=kind_phys), allocatable :: weasdl (:) !< weasd over land + real (kind=kind_phys), allocatable :: snodi (:) !< snow depth over ice + real (kind=kind_phys), allocatable :: weasdi (:) !< weasd over ice + real (kind=kind_phys), allocatable :: hprime (:,:) !< orographic metrics + real (kind=kind_phys), allocatable :: dust12m_in (:,:,:) !< fengsha dust input + real (kind=kind_phys), allocatable :: emi_in (:,:) !< anthropogenic background input + real (kind=kind_phys), allocatable :: smoke_RRFS(:,:,:) !< RRFS fire input + real (kind=kind_phys), allocatable :: z0base (:) !< background or baseline surface roughness length in m + real (kind=kind_phys), allocatable :: semisbase(:) !< background surface emissivity + real (kind=kind_phys), allocatable :: sfalb_lnd (:) !< surface albedo over land for LSM + real (kind=kind_phys), allocatable :: sfalb_ice (:) !< surface albedo over ice for LSM + real (kind=kind_phys), allocatable :: emis_lnd (:) !< surface emissivity over land for LSM + real (kind=kind_phys), allocatable :: emis_ice (:) !< surface emissivity over ice for LSM + real (kind=kind_phys), allocatable :: emis_wat (:) !< surface emissivity over water + real (kind=kind_phys), allocatable :: sfalb_lnd_bck (:) !< snow-free albedo over land !--- In (radiation only) - real (kind=kind_phys), pointer :: sncovr (:) => null() !< snow cover in fraction over land - real (kind=kind_phys), pointer :: sncovr_ice (:) => null() !< snow cover in fraction over ice (RUC LSM only) - real (kind=kind_phys), pointer :: snoalb (:) => null() !< maximum snow albedo in fraction - real (kind=kind_phys), pointer :: alvsf (:) => null() !< mean vis albedo with strong cosz dependency - real (kind=kind_phys), pointer :: alnsf (:) => null() !< mean nir albedo with strong cosz dependency - real (kind=kind_phys), pointer :: alvwf (:) => null() !< mean vis albedo with weak cosz dependency - real (kind=kind_phys), pointer :: alnwf (:) => null() !< mean nir albedo with weak cosz dependency - real (kind=kind_phys), pointer :: facsf (:) => null() !< fractional coverage with strong cosz dependency - real (kind=kind_phys), pointer :: facwf (:) => null() !< fractional coverage with weak cosz dependency + real (kind=kind_phys), allocatable :: sncovr (:) !< snow cover in fraction over land + real (kind=kind_phys), allocatable :: sncovr_ice (:) !< snow cover in fraction over ice (RUC LSM only) + real (kind=kind_phys), allocatable :: snoalb (:) !< maximum snow albedo in fraction + real (kind=kind_phys), allocatable :: alvsf (:) !< mean vis albedo with strong cosz dependency + real (kind=kind_phys), allocatable :: alnsf (:) !< mean nir albedo with strong cosz dependency + real (kind=kind_phys), allocatable :: alvwf (:) !< mean vis albedo with weak cosz dependency + real (kind=kind_phys), allocatable :: alnwf (:) !< mean nir albedo with weak cosz dependency + real (kind=kind_phys), allocatable :: facsf (:) !< fractional coverage with strong cosz dependency + real (kind=kind_phys), allocatable :: facwf (:) !< fractional coverage with weak cosz dependency !--- In (physics only) - integer, pointer :: slope (:) => null() !< sfc slope type for lsm - integer, pointer :: slope_save (:) => null()!< sfc slope type save - real (kind=kind_phys), pointer :: shdmin (:) => null() !< min fractional coverage of green veg - real (kind=kind_phys), pointer :: shdmax (:) => null() !< max fractnl cover of green veg (not used) - real (kind=kind_phys), pointer :: tg3 (:) => null() !< deep soil temperature - real (kind=kind_phys), pointer :: vfrac (:) => null() !< vegetation fraction - integer, pointer :: vtype (:) => null() !< vegetation type - integer, pointer :: stype (:) => null() !< soil type - integer, pointer :: scolor (:) => null() !< soil color - integer, pointer :: vtype_save (:) => null()!< vegetation type save - integer, pointer :: stype_save (:) => null()!< soil type save - integer, pointer :: scolor_save (:) => null()!< soil color save - real (kind=kind_phys), pointer :: uustar (:) => null() !< boundary layer parameter - real (kind=kind_phys), pointer :: oro (:) => null() !< orography - real (kind=kind_phys), pointer :: oro_uf (:) => null() !< unfiltered orography - real (kind=kind_phys), pointer :: evap (:) => null() !< - real (kind=kind_phys), pointer :: hflx (:) => null() !< - real (kind=kind_phys), pointer :: qss (:) => null() !< - real (kind=kind_phys), pointer :: spec_sh_flux (:) => null() !< specified kinematic surface sensible heat flux - real (kind=kind_phys), pointer :: spec_lh_flux (:) => null() !< specified kinematic surface latent heat flux + integer, allocatable :: slope (:) !< sfc slope type for lsm + integer, allocatable :: slope_save (:) !< sfc slope type save + real (kind=kind_phys), allocatable :: shdmin (:) !< min fractional coverage of green veg + real (kind=kind_phys), allocatable :: shdmax (:) !< max fractnl cover of green veg (not used) + real (kind=kind_phys), allocatable :: tg3 (:) !< deep soil temperature + real (kind=kind_phys), allocatable :: vfrac (:) !< vegetation fraction + integer, allocatable :: vtype (:) !< vegetation type + integer, allocatable :: stype (:) !< soil type + integer, allocatable :: scolor (:) !< soil color + integer, allocatable :: vtype_save (:) !< vegetation type save + integer, allocatable :: stype_save (:) !< soil type save + integer, allocatable :: scolor_save (:) !< soil color save + real (kind=kind_phys), allocatable :: uustar (:) !< boundary layer parameter + real (kind=kind_phys), allocatable :: oro (:) !< orography + real (kind=kind_phys), allocatable :: oro_uf (:) !< unfiltered orography + real (kind=kind_phys), allocatable :: evap (:) !< + real (kind=kind_phys), allocatable :: hflx (:) !< + real (kind=kind_phys), allocatable :: qss (:) !< + real (kind=kind_phys), allocatable :: spec_sh_flux (:) !< specified kinematic surface sensible heat flux + real (kind=kind_phys), allocatable :: spec_lh_flux (:) !< specified kinematic surface latent heat flux !-- In/Out - real (kind=kind_phys), pointer :: maxupmf(:) => null() !< maximum up draft mass flux for Grell-Freitas - real (kind=kind_phys), pointer :: conv_act(:) => null() !< convective activity counter for Grell-Freitas - real (kind=kind_phys), pointer :: conv_act_m(:)=> null() !< midlevel convective activity counter for Grell-Freitas - real (kind=kind_phys), pointer :: hice (:) => null() !< sea ice thickness - real (kind=kind_phys), pointer :: weasd (:) => null() !< water equiv of accumulated snow depth (kg/m**2) + real (kind=kind_phys), allocatable :: maxupmf(:) !< maximum up draft mass flux for Grell-Freitas + real (kind=kind_phys), allocatable :: conv_act(:) !< convective activity counter for Grell-Freitas + real (kind=kind_phys), allocatable :: conv_act_m(:) !< midlevel convective activity counter for Grell-Freitas + real (kind=kind_phys), allocatable :: hice (:) !< sea ice thickness + real (kind=kind_phys), allocatable :: weasd (:) !< water equiv of accumulated snow depth (kg/m**2) !< over land and sea ice - real (kind=kind_phys), pointer :: canopy (:) => null() !< canopy water - real (kind=kind_phys), pointer :: ffmm (:) => null() !< fm parameter from PBL scheme - real (kind=kind_phys), pointer :: ffhh (:) => null() !< fh parameter from PBL scheme - real (kind=kind_phys), pointer :: f10m (:) => null() !< fm at 10m - Ratio of sigma level 1 wind and 10m wind - real (kind=kind_phys), pointer :: rca (:) => null() !< canopy resistance - real (kind=kind_phys), pointer :: tprcp (:) => null() !< sfc_fld%tprcp - total precipitation - real (kind=kind_phys), pointer :: srflag (:) => null() !< sfc_fld%srflag - snow/rain flag for precipitation - real (kind=kind_phys), pointer :: slc (:,:) => null() !< liquid soil moisture - real (kind=kind_phys), pointer :: smc (:,:) => null() !< total soil moisture - real (kind=kind_phys), pointer :: stc (:,:) => null() !< soil temperature + real (kind=kind_phys), allocatable :: canopy (:) !< canopy water + real (kind=kind_phys), allocatable :: ffmm (:) !< fm parameter from PBL scheme + real (kind=kind_phys), allocatable :: ffhh (:) !< fh parameter from PBL scheme + real (kind=kind_phys), allocatable :: f10m (:) !< fm at 10m - Ratio of sigma level 1 wind and 10m wind + real (kind=kind_phys), allocatable :: rca (:) !< canopy resistance + real (kind=kind_phys), allocatable :: tprcp (:) !< sfc_fld%tprcp - total precipitation + real (kind=kind_phys), allocatable :: srflag (:) !< sfc_fld%srflag - snow/rain flag for precipitation + real (kind=kind_phys), allocatable :: slc (:,:) !< liquid soil moisture + real (kind=kind_phys), allocatable :: smc (:,:) !< total soil moisture + real (kind=kind_phys), allocatable :: stc (:,:) !< soil temperature !--- Out - real (kind=kind_phys), pointer :: t2m (:) => null() !< 2 meter temperature - real (kind=kind_phys), pointer :: th2m (:) => null() !< 2 meter potential temperature - real (kind=kind_phys), pointer :: q2m (:) => null() !< 2 meter humidity + real (kind=kind_phys), allocatable :: t2m (:) !< 2 meter temperature + real (kind=kind_phys), allocatable :: th2m (:) !< 2 meter potential temperature + real (kind=kind_phys), allocatable :: q2m (:) !< 2 meter humidity ! -- In/Out for Noah MP - real (kind=kind_phys), pointer :: snowxy (:) => null() !< - real (kind=kind_phys), pointer :: tvxy (:) => null() !< veg temp - real (kind=kind_phys), pointer :: tgxy (:) => null() !< ground temp - real (kind=kind_phys), pointer :: canicexy(:) => null() !< - real (kind=kind_phys), pointer :: canliqxy(:) => null() !< - real (kind=kind_phys), pointer :: eahxy (:) => null() !< - real (kind=kind_phys), pointer :: tahxy (:) => null() !< - real (kind=kind_phys), pointer :: cmxy (:) => null() !< - real (kind=kind_phys), pointer :: chxy (:) => null() !< - real (kind=kind_phys), pointer :: fwetxy (:) => null() !< - real (kind=kind_phys), pointer :: sneqvoxy(:) => null() !< - real (kind=kind_phys), pointer :: alboldxy(:) => null() !< - real (kind=kind_phys), pointer :: qsnowxy (:) => null() !< - real (kind=kind_phys), pointer :: wslakexy(:) => null() !< - real (kind=kind_phys), pointer :: zwtxy (:) => null() !< - real (kind=kind_phys), pointer :: waxy (:) => null() !< - real (kind=kind_phys), pointer :: wtxy (:) => null() !< - real (kind=kind_phys), pointer :: lfmassxy(:) => null() !< - real (kind=kind_phys), pointer :: rtmassxy(:) => null() !< - real (kind=kind_phys), pointer :: stmassxy(:) => null() !< - real (kind=kind_phys), pointer :: woodxy (:) => null() !< - real (kind=kind_phys), pointer :: stblcpxy(:) => null() !< - real (kind=kind_phys), pointer :: fastcpxy(:) => null() !< - real (kind=kind_phys), pointer :: xsaixy (:) => null() !< - real (kind=kind_phys), pointer :: xlaixy (:) => null() !< - real (kind=kind_phys), pointer :: taussxy (:) => null() !< - real (kind=kind_phys), pointer :: smcwtdxy(:) => null() !< - real (kind=kind_phys), pointer :: deeprechxy(:)=> null() !< - real (kind=kind_phys), pointer :: rechxy (:) => null() !< - real (kind=kind_phys), pointer :: albdirvis_lnd (:) => null() !< - real (kind=kind_phys), pointer :: albdirnir_lnd (:) => null() !< - real (kind=kind_phys), pointer :: albdifvis_lnd (:) => null() !< - real (kind=kind_phys), pointer :: albdifnir_lnd (:) => null() !< - - real (kind=kind_phys), pointer :: albdirvis_ice (:) => null() !< - real (kind=kind_phys), pointer :: albdifvis_ice (:) => null() !< - real (kind=kind_phys), pointer :: albdirnir_ice (:) => null() !< - real (kind=kind_phys), pointer :: albdifnir_ice (:) => null() !< -! real (kind=kind_phys), pointer :: sfalb_ice (:) => null() !< - - real (kind=kind_phys), pointer :: snicexy (:,:) => null() !< - real (kind=kind_phys), pointer :: snliqxy (:,:) => null() !< - real (kind=kind_phys), pointer :: tsnoxy (:,:) => null() !< - real (kind=kind_phys), pointer :: smoiseq (:,:) => null() !< - real (kind=kind_phys), pointer :: zsnsoxy (:,:) => null() !< + real (kind=kind_phys), allocatable :: snowxy (:) !< + real (kind=kind_phys), allocatable :: tvxy (:) !< veg temp + real (kind=kind_phys), allocatable :: tgxy (:) !< ground temp + real (kind=kind_phys), allocatable :: canicexy(:) !< + real (kind=kind_phys), allocatable :: canliqxy(:) !< + real (kind=kind_phys), allocatable :: eahxy (:) !< + real (kind=kind_phys), allocatable :: tahxy (:) !< + real (kind=kind_phys), allocatable :: cmxy (:) !< + real (kind=kind_phys), allocatable :: chxy (:) !< + real (kind=kind_phys), allocatable :: fwetxy (:) !< + real (kind=kind_phys), allocatable :: sneqvoxy(:) !< + real (kind=kind_phys), allocatable :: alboldxy(:) !< + real (kind=kind_phys), allocatable :: qsnowxy (:) !< + real (kind=kind_phys), allocatable :: wslakexy(:) !< + real (kind=kind_phys), allocatable :: zwtxy (:) !< + real (kind=kind_phys), allocatable :: waxy (:) !< + real (kind=kind_phys), allocatable :: wtxy (:) !< + real (kind=kind_phys), allocatable :: lfmassxy(:) !< + real (kind=kind_phys), allocatable :: rtmassxy(:) !< + real (kind=kind_phys), allocatable :: stmassxy(:) !< + real (kind=kind_phys), allocatable :: woodxy (:) !< + real (kind=kind_phys), allocatable :: stblcpxy(:) !< + real (kind=kind_phys), allocatable :: fastcpxy(:) !< + real (kind=kind_phys), allocatable :: xsaixy (:) !< + real (kind=kind_phys), allocatable :: xlaixy (:) !< + real (kind=kind_phys), allocatable :: taussxy (:) !< + real (kind=kind_phys), allocatable :: smcwtdxy(:) !< + real (kind=kind_phys), allocatable :: deeprechxy(:) !< + real (kind=kind_phys), allocatable :: rechxy (:) !< + real (kind=kind_phys), allocatable :: albdirvis_lnd (:) !< + real (kind=kind_phys), allocatable :: albdirnir_lnd (:) !< + real (kind=kind_phys), allocatable :: albdifvis_lnd (:) !< + real (kind=kind_phys), allocatable :: albdifnir_lnd (:) !< + + real (kind=kind_phys), allocatable :: albdirvis_ice (:) !< + real (kind=kind_phys), allocatable :: albdifvis_ice (:) !< + real (kind=kind_phys), allocatable :: albdirnir_ice (:) !< + real (kind=kind_phys), allocatable :: albdifnir_ice (:) !< +! real (kind=kind_phys), allocatable :: sfalb_ice (:) !< + + real (kind=kind_phys), allocatable :: snicexy (:,:) !< + real (kind=kind_phys), allocatable :: snliqxy (:,:) !< + real (kind=kind_phys), allocatable :: tsnoxy (:,:) !< + real (kind=kind_phys), allocatable :: smoiseq (:,:) !< + real (kind=kind_phys), allocatable :: zsnsoxy (:,:) !< !--- NSSTM variables (only allocated when [Model%nstf_name(1) > 0]) - real (kind=kind_phys), pointer :: tref (:) => null() !< nst_fld%Tref - Reference Temperature - real (kind=kind_phys), pointer :: z_c (:) => null() !< nst_fld%z_c - Sub layer cooling thickness - real (kind=kind_phys), pointer :: c_0 (:) => null() !< nst_fld%c_0 - coefficient1 to calculate d(Tz)/d(Ts) - real (kind=kind_phys), pointer :: c_d (:) => null() !< nst_fld%c_d - coefficient2 to calculate d(Tz)/d(Ts) - real (kind=kind_phys), pointer :: w_0 (:) => null() !< nst_fld%w_0 - coefficient3 to calculate d(Tz)/d(Ts) - real (kind=kind_phys), pointer :: w_d (:) => null() !< nst_fld%w_d - coefficient4 to calculate d(Tz)/d(Ts) - real (kind=kind_phys), pointer :: xt (:) => null() !< nst_fld%xt heat content in DTL - real (kind=kind_phys), pointer :: xs (:) => null() !< nst_fld%xs salinity content in DTL - real (kind=kind_phys), pointer :: xu (:) => null() !< nst_fld%xu u current content in DTL - real (kind=kind_phys), pointer :: xv (:) => null() !< nst_fld%xv v current content in DTL - real (kind=kind_phys), pointer :: xz (:) => null() !< nst_fld%xz DTL thickness - real (kind=kind_phys), pointer :: zm (:) => null() !< nst_fld%zm MXL thickness - real (kind=kind_phys), pointer :: xtts (:) => null() !< nst_fld%xtts d(xt)/d(ts) - real (kind=kind_phys), pointer :: xzts (:) => null() !< nst_fld%xzts d(xz)/d(ts) - real (kind=kind_phys), pointer :: d_conv (:) => null() !< nst_fld%d_conv thickness of Free Convection Layer (FCL) - real (kind=kind_phys), pointer :: ifd (:) => null() !< nst_fld%ifd index to start DTM run or not - real (kind=kind_phys), pointer :: dt_cool(:) => null() !< nst_fld%dt_cool Sub layer cooling amount - real (kind=kind_phys), pointer :: qrain (:) => null() !< nst_fld%qrain sensible heat flux due to rainfall (watts) + real (kind=kind_phys), allocatable :: tref (:) !< nst_fld%Tref - Reference Temperature + real (kind=kind_phys), allocatable :: z_c (:) !< nst_fld%z_c - Sub layer cooling thickness + real (kind=kind_phys), allocatable :: c_0 (:) !< nst_fld%c_0 - coefficient1 to calculate d(Tz)/d(Ts) + real (kind=kind_phys), allocatable :: c_d (:) !< nst_fld%c_d - coefficient2 to calculate d(Tz)/d(Ts) + real (kind=kind_phys), allocatable :: w_0 (:) !< nst_fld%w_0 - coefficient3 to calculate d(Tz)/d(Ts) + real (kind=kind_phys), allocatable :: w_d (:) !< nst_fld%w_d - coefficient4 to calculate d(Tz)/d(Ts) + real (kind=kind_phys), allocatable :: xt (:) !< nst_fld%xt heat content in DTL + real (kind=kind_phys), allocatable :: xs (:) !< nst_fld%xs salinity content in DTL + real (kind=kind_phys), allocatable :: xu (:) !< nst_fld%xu u current content in DTL + real (kind=kind_phys), allocatable :: xv (:) !< nst_fld%xv v current content in DTL + real (kind=kind_phys), allocatable :: xz (:) !< nst_fld%xz DTL thickness + real (kind=kind_phys), allocatable :: zm (:) !< nst_fld%zm MXL thickness + real (kind=kind_phys), allocatable :: xtts (:) !< nst_fld%xtts d(xt)/d(ts) + real (kind=kind_phys), allocatable :: xzts (:) !< nst_fld%xzts d(xz)/d(ts) + real (kind=kind_phys), allocatable :: d_conv (:) !< nst_fld%d_conv thickness of Free Convection Layer (FCL) + real (kind=kind_phys), allocatable :: ifd (:) !< nst_fld%ifd index to start DTM run or not + real (kind=kind_phys), allocatable :: dt_cool(:) !< nst_fld%dt_cool Sub layer cooling amount + real (kind=kind_phys), allocatable :: qrain (:) !< nst_fld%qrain sensible heat flux due to rainfall (watts) ! Soil properties for RUC LSM (number of levels different from NOAH 4-layer model) - real (kind=kind_phys), pointer :: wetness(:) => null() !< normalized soil wetness for lsm - real (kind=kind_phys), pointer :: sh2o(:,:) => null() !< volume fraction of unfrozen soil moisture for lsm - real (kind=kind_phys), pointer :: keepsmfr(:,:) => null() !< RUC LSM: frozen moisture in soil - real (kind=kind_phys), pointer :: smois(:,:) => null() !< volumetric fraction of soil moisture for lsm - real (kind=kind_phys), pointer :: tslb(:,:) => null() !< soil temperature for land surface model - real (kind=kind_phys), pointer :: flag_frsoil(:,:) => null() !< RUC LSM: flag for frozen soil physics + real (kind=kind_phys), allocatable :: wetness(:) !< normalized soil wetness for lsm + real (kind=kind_phys), allocatable :: sh2o(:,:) !< volume fraction of unfrozen soil moisture for lsm + real (kind=kind_phys), allocatable :: keepsmfr(:,:) !< RUC LSM: frozen moisture in soil + real (kind=kind_phys), allocatable :: smois(:,:) !< volumetric fraction of soil moisture for lsm + real (kind=kind_phys), allocatable :: tslb(:,:) !< soil temperature for land surface model + real (kind=kind_phys), allocatable :: flag_frsoil(:,:) !< RUC LSM: flag for frozen soil physics ! - real (kind=kind_phys), pointer :: clw_surf_land(:) => null() !< RUC LSM: moist cloud water mixing ratio at surface over land - real (kind=kind_phys), pointer :: clw_surf_ice(:) => null() !< RUC LSM: moist cloud water mixing ratio at surface over ice - real (kind=kind_phys), pointer :: qwv_surf_land(:) => null() !< RUC LSM: water vapor mixing ratio at surface over land - real (kind=kind_phys), pointer :: qwv_surf_ice(:) => null() !< RUC LSM: water vapor mixing ratio at surface over ice - real (kind=kind_phys), pointer :: rhofr(:) => null() !< RUC LSM: internal density of frozen precipitation - real (kind=kind_phys), pointer :: tsnow_land(:) => null() !< RUC LSM: snow temperature at the bottom of the first snow layer over land - real (kind=kind_phys), pointer :: tsnow_ice(:) => null() !< RUC LSM: snow temperature at the bottom of the first snow layer over ice - real (kind=kind_phys), pointer :: snowfallac_land(:) => null() !< ruc lsm diagnostics over land - real (kind=kind_phys), pointer :: snowfallac_ice(:) => null() !< ruc lsm diagnostics over ice - real (kind=kind_phys), pointer :: acsnow_land(:) => null() !< ruc lsm diagnostics over land - real (kind=kind_phys), pointer :: acsnow_ice(:) => null() !< ruc lsm diagnostics over ice + real (kind=kind_phys), allocatable :: clw_surf_land(:) !< RUC LSM: moist cloud water mixing ratio at surface over land + real (kind=kind_phys), allocatable :: clw_surf_ice(:) !< RUC LSM: moist cloud water mixing ratio at surface over ice + real (kind=kind_phys), allocatable :: qwv_surf_land(:) !< RUC LSM: water vapor mixing ratio at surface over land + real (kind=kind_phys), allocatable :: qwv_surf_ice(:) !< RUC LSM: water vapor mixing ratio at surface over ice + real (kind=kind_phys), allocatable :: rhofr(:) !< RUC LSM: internal density of frozen precipitation + real (kind=kind_phys), allocatable :: tsnow_land(:) !< RUC LSM: snow temperature at the bottom of the first snow layer over land + real (kind=kind_phys), allocatable :: tsnow_ice(:) !< RUC LSM: snow temperature at the bottom of the first snow layer over ice + real (kind=kind_phys), allocatable :: snowfallac_land(:) !< ruc lsm diagnostics over land + real (kind=kind_phys), allocatable :: snowfallac_ice(:) !< ruc lsm diagnostics over ice + real (kind=kind_phys), allocatable :: acsnow_land(:) !< ruc lsm diagnostics over land + real (kind=kind_phys), allocatable :: acsnow_ice(:) !< ruc lsm diagnostics over ice ! MYNN surface layer - real (kind=kind_phys), pointer :: ustm (:) => null() !u* including drag - real (kind=kind_phys), pointer :: zol(:) => null() !surface stability parameter - real (kind=kind_phys), pointer :: mol(:) => null() !theta star - real (kind=kind_phys), pointer :: rmol(:) => null() !reciprocal of obukhov length - real (kind=kind_phys), pointer :: flhc(:) => null() !drag coeff for heat - real (kind=kind_phys), pointer :: flqc(:) => null() !drag coeff for moisture - real (kind=kind_phys), pointer :: chs2(:) => null() !exch coeff for heat at 2m - real (kind=kind_phys), pointer :: cqs2(:) => null() !exch coeff for moisture at 2m - real (kind=kind_phys), pointer :: lh(:) => null() !latent heating at the surface + real (kind=kind_phys), allocatable :: ustm (:) !u* including drag + real (kind=kind_phys), allocatable :: zol(:) !surface stability parameter + real (kind=kind_phys), allocatable :: mol(:) !theta star + real (kind=kind_phys), allocatable :: rmol(:) !reciprocal of obukhov length + real (kind=kind_phys), allocatable :: flhc(:) !drag coeff for heat + real (kind=kind_phys), allocatable :: flqc(:) !drag coeff for moisture + real (kind=kind_phys), allocatable :: chs2(:) !exch coeff for heat at 2m + real (kind=kind_phys), allocatable :: cqs2(:) !exch coeff for moisture at 2m + real (kind=kind_phys), allocatable :: lh(:) !latent heating at the surface !---- precipitation amounts from previous time step for RUC LSM/NoahMP LSM - real (kind=kind_phys), pointer :: raincprv (:) => null() !< explicit rainfall from previous timestep - real (kind=kind_phys), pointer :: rainncprv (:) => null() !< convective_precipitation_amount from previous timestep - real (kind=kind_phys), pointer :: iceprv (:) => null() !< ice amount from previous timestep - real (kind=kind_phys), pointer :: snowprv (:) => null() !< snow amount from previous timestep - real (kind=kind_phys), pointer :: graupelprv(:) => null() !< graupel amount from previous timestep + real (kind=kind_phys), allocatable :: raincprv (:) !< explicit rainfall from previous timestep + real (kind=kind_phys), allocatable :: rainncprv (:) !< convective_precipitation_amount from previous timestep + real (kind=kind_phys), allocatable :: iceprv (:) !< ice amount from previous timestep + real (kind=kind_phys), allocatable :: snowprv (:) !< snow amount from previous timestep + real (kind=kind_phys), allocatable :: graupelprv(:) !< graupel amount from previous timestep !---- precipitation rates from previous time step for NoahMP LSM - real (kind=kind_phys), pointer :: draincprv (:) => null() !< convective precipitation rate from previous timestep - real (kind=kind_phys), pointer :: drainncprv (:) => null() !< explicit rainfall rate from previous timestep - real (kind=kind_phys), pointer :: diceprv (:) => null() !< ice precipitation rate from previous timestep - real (kind=kind_phys), pointer :: dsnowprv (:) => null() !< snow precipitation rate from previous timestep - real (kind=kind_phys), pointer :: dgraupelprv(:) => null() !< graupel precipitation rate from previous timestep + real (kind=kind_phys), allocatable :: draincprv (:) !< convective precipitation rate from previous timestep + real (kind=kind_phys), allocatable :: drainncprv (:) !< explicit rainfall rate from previous timestep + real (kind=kind_phys), allocatable :: diceprv (:) !< ice precipitation rate from previous timestep + real (kind=kind_phys), allocatable :: dsnowprv (:) !< snow precipitation rate from previous timestep + real (kind=kind_phys), allocatable :: dgraupelprv(:) !< graupel precipitation rate from previous timestep ! CLM Lake model internal variables: - real (kind=kind_phys), pointer :: lake_albedo(:) => null() ! - real (kind=kind_phys), pointer :: lake_z3d(:,:) => null() ! - real (kind=kind_phys), pointer :: lake_dz3d(:,:) => null() ! - real (kind=kind_phys), pointer :: lake_soil_watsat3d(:,:) => null() ! - real (kind=kind_phys), pointer :: lake_csol3d(:,:) => null() ! - real (kind=kind_phys), pointer :: lake_soil_tkmg3d(:,:) => null() ! - real (kind=kind_phys), pointer :: lake_soil_tkdry3d(:,:) => null() ! - real (kind=kind_phys), pointer :: lake_soil_tksatu3d(:,:) => null() ! - real (kind=kind_phys), pointer :: lake_h2osno2d(:) => null() ! - real (kind=kind_phys), pointer :: lake_sndpth2d(:) => null() ! - real (kind=kind_phys), pointer :: lake_snl2d(:) => null() ! - real (kind=kind_phys), pointer :: lake_snow_z3d(:,:) => null() ! - real (kind=kind_phys), pointer :: lake_snow_dz3d(:,:) => null() ! - real (kind=kind_phys), pointer :: lake_snow_zi3d(:,:) => null() ! - real (kind=kind_phys), pointer :: lake_h2osoi_vol3d(:,:) => null() ! - real (kind=kind_phys), pointer :: lake_h2osoi_liq3d(:,:) => null() ! - real (kind=kind_phys), pointer :: lake_h2osoi_ice3d(:,:) => null() ! - real (kind=kind_phys), pointer :: lake_tsfc(:) => null() ! - real (kind=kind_phys), pointer :: lake_t_soisno3d(:,:) => null() ! - real (kind=kind_phys), pointer :: lake_t_lake3d(:,:) => null() ! - real (kind=kind_phys), pointer :: lake_savedtke12d(:)=> null() ! - real (kind=kind_phys), pointer :: lake_icefrac3d(:,:)=> null() - real (kind=kind_phys), pointer :: lake_rho0(:)=> null() - real (kind=kind_phys), pointer :: lake_ht(:)=> null() - real (kind=kind_phys), pointer :: lake_clay3d(:,:) => null() - real (kind=kind_phys), pointer :: lake_sand3d(:,:) => null() - integer, pointer :: lake_is_salty(:) => null() - integer, pointer :: lake_cannot_freeze(:) => null() - real (kind=kind_phys), pointer :: clm_lake_initialized(:) => null() !< lakeini was called + real (kind=kind_phys), allocatable :: lake_albedo(:) ! + real (kind=kind_phys), allocatable :: lake_z3d(:,:) ! + real (kind=kind_phys), allocatable :: lake_dz3d(:,:) ! + real (kind=kind_phys), allocatable :: lake_soil_watsat3d(:,:) ! + real (kind=kind_phys), allocatable :: lake_csol3d(:,:) ! + real (kind=kind_phys), allocatable :: lake_soil_tkmg3d(:,:) ! + real (kind=kind_phys), allocatable :: lake_soil_tkdry3d(:,:) ! + real (kind=kind_phys), allocatable :: lake_soil_tksatu3d(:,:) ! + real (kind=kind_phys), allocatable :: lake_h2osno2d(:) ! + real (kind=kind_phys), allocatable :: lake_sndpth2d(:) ! + real (kind=kind_phys), allocatable :: lake_snl2d(:) ! + real (kind=kind_phys), allocatable :: lake_snow_z3d(:,:) ! + real (kind=kind_phys), allocatable :: lake_snow_dz3d(:,:) ! + real (kind=kind_phys), allocatable :: lake_snow_zi3d(:,:) ! + real (kind=kind_phys), allocatable :: lake_h2osoi_vol3d(:,:) ! + real (kind=kind_phys), allocatable :: lake_h2osoi_liq3d(:,:) ! + real (kind=kind_phys), allocatable :: lake_h2osoi_ice3d(:,:) ! + real (kind=kind_phys), allocatable :: lake_tsfc(:) ! + real (kind=kind_phys), allocatable :: lake_t_soisno3d(:,:) ! + real (kind=kind_phys), allocatable :: lake_t_lake3d(:,:) ! + real (kind=kind_phys), allocatable :: lake_savedtke12d(:) ! + real (kind=kind_phys), allocatable :: lake_icefrac3d(:,:) + real (kind=kind_phys), allocatable :: lake_rho0(:) + real (kind=kind_phys), allocatable :: lake_ht(:) + real (kind=kind_phys), allocatable :: lake_clay3d(:,:) + real (kind=kind_phys), allocatable :: lake_sand3d(:,:) + integer, allocatable :: lake_is_salty(:) + integer, allocatable :: lake_cannot_freeze(:) + real (kind=kind_phys), allocatable :: clm_lake_initialized(:) !< lakeini was called !--- aerosol surface emissions for Thompson microphysics & smoke dust - real (kind=kind_phys), pointer :: emdust (:) => null() !< instantaneous dust emission - real (kind=kind_phys), pointer :: emseas (:) => null() !< instantaneous sea salt emission - real (kind=kind_phys), pointer :: emanoc (:) => null() !< instantaneous anthro. oc emission + real (kind=kind_phys), allocatable :: emdust (:) !< instantaneous dust emission + real (kind=kind_phys), allocatable :: emseas (:) !< instantaneous sea salt emission + real (kind=kind_phys), allocatable :: emanoc (:) !< instantaneous anthro. oc emission !--- Smoke. These 3 arrays are hourly, so their dimension is imx24 (output is hourly) - real (kind=kind_phys), pointer :: ebb_smoke_hr(:) => null() !< hourly smoke emission - real (kind=kind_phys), pointer :: frp_hr (:) => null() !< hourly FRP - real (kind=kind_phys), pointer :: frp_std_hr (:) => null() !< hourly std. FRP + real (kind=kind_phys), allocatable :: ebb_smoke_hr(:) !< hourly smoke emission + real (kind=kind_phys), allocatable :: frp_hr (:) !< hourly FRP + real (kind=kind_phys), allocatable :: frp_std_hr (:) !< hourly std. FRP !--- For fire diurnal cycle - real (kind=kind_phys), pointer :: fhist (:) => null() !< instantaneous fire coef_bb - real (kind=kind_phys), pointer :: coef_bb_dc (:) => null() !< instantaneous fire coef_bb + real (kind=kind_phys), allocatable :: fhist (:) !< instantaneous fire coef_bb + real (kind=kind_phys), allocatable :: coef_bb_dc (:) !< instantaneous fire coef_bb !--- For smoke and dust auxiliary inputs - real (kind=kind_phys), pointer :: fire_in (:,:) => null() !< fire auxiliary inputs + real (kind=kind_phys), allocatable :: fire_in (:,:) !< fire auxiliary inputs contains procedure :: create => sfcprop_create !< allocate array data @@ -484,157 +484,157 @@ module GFS_typedefs type GFS_coupling_type !--- Out (radiation only) - real (kind=kind_phys), pointer :: nirbmdi(:) => null() !< sfc nir beam sw downward flux (w/m2) - real (kind=kind_phys), pointer :: nirdfdi(:) => null() !< sfc nir diff sw downward flux (w/m2) - real (kind=kind_phys), pointer :: visbmdi(:) => null() !< sfc uv+vis beam sw downward flux (w/m2) - real (kind=kind_phys), pointer :: visdfdi(:) => null() !< sfc uv+vis diff sw downward flux (w/m2) - real (kind=kind_phys), pointer :: nirbmui(:) => null() !< sfc nir beam sw upward flux (w/m2) - real (kind=kind_phys), pointer :: nirdfui(:) => null() !< sfc nir diff sw upward flux (w/m2) - real (kind=kind_phys), pointer :: visbmui(:) => null() !< sfc uv+vis beam sw upward flux (w/m2) - real (kind=kind_phys), pointer :: visdfui(:) => null() !< sfc uv+vis diff sw upward flux (w/m2) + real (kind=kind_phys), allocatable :: nirbmdi(:) !< sfc nir beam sw downward flux (w/m2) + real (kind=kind_phys), allocatable :: nirdfdi(:) !< sfc nir diff sw downward flux (w/m2) + real (kind=kind_phys), allocatable :: visbmdi(:) !< sfc uv+vis beam sw downward flux (w/m2) + real (kind=kind_phys), allocatable :: visdfdi(:) !< sfc uv+vis diff sw downward flux (w/m2) + real (kind=kind_phys), allocatable :: nirbmui(:) !< sfc nir beam sw upward flux (w/m2) + real (kind=kind_phys), allocatable :: nirdfui(:) !< sfc nir diff sw upward flux (w/m2) + real (kind=kind_phys), allocatable :: visbmui(:) !< sfc uv+vis beam sw upward flux (w/m2) + real (kind=kind_phys), allocatable :: visdfui(:) !< sfc uv+vis diff sw upward flux (w/m2) ! RRTMGP - real (kind=kind_phys), pointer :: fluxlwUP_jac(:,:) => null() !< RRTMGP Jacobian of upward longwave all-sky flux - real (kind=kind_phys), pointer :: htrlw(:,:) => null() !< RRTMGP updated LW heating rate - real (kind=kind_phys), pointer :: tsfc_radtime(:) => null() !< RRTMGP surface temperature on radiation timestep - real (kind=kind_phys), pointer :: fluxlwUP_radtime(:,:) => null() !< RRTMGP upward longwave all-sky flux profile - real (kind=kind_phys), pointer :: fluxlwDOWN_radtime(:,:) => null() !< RRTMGP downward longwave all-sky flux profile + real (kind=kind_phys), allocatable :: fluxlwUP_jac(:,:) !< RRTMGP Jacobian of upward longwave all-sky flux + real (kind=kind_phys), allocatable :: htrlw(:,:) !< RRTMGP updated LW heating rate + real (kind=kind_phys), allocatable :: tsfc_radtime(:) !< RRTMGP surface temperature on radiation timestep + real (kind=kind_phys), allocatable :: fluxlwUP_radtime(:,:) !< RRTMGP upward longwave all-sky flux profile + real (kind=kind_phys), allocatable :: fluxlwDOWN_radtime(:,:) !< RRTMGP downward longwave all-sky flux profile !--- In (physics only) - real (kind=kind_phys), pointer :: sfcdsw(:) => null() !< total sky sfc downward sw flux ( w/m**2 ) + real (kind=kind_phys), allocatable :: sfcdsw(:) !< total sky sfc downward sw flux ( w/m**2 ) !< GFS_radtend_type%sfcfsw%dnfxc - real (kind=kind_phys), pointer :: sfcnsw(:) => null() !< total sky sfc netsw flx into ground(w/m**2) + real (kind=kind_phys), allocatable :: sfcnsw(:) !< total sky sfc netsw flx into ground(w/m**2) !< difference of dnfxc & upfxc from GFS_radtend_type%sfcfsw - real (kind=kind_phys), pointer :: sfcdlw(:) => null() !< total sky sfc downward lw flux ( w/m**2 ) + real (kind=kind_phys), allocatable :: sfcdlw(:) !< total sky sfc downward lw flux ( w/m**2 ) !< GFS_radtend_type%sfclsw%dnfxc - real (kind=kind_phys), pointer :: sfculw(:) => null() !< total sky sfc upward lw flux ( w/m**2 ) + real (kind=kind_phys), allocatable :: sfculw(:) !< total sky sfc upward lw flux ( w/m**2 ) !--- incoming quantities - real (kind=kind_phys), pointer :: dusfcin_cpl(:) => null() !< aoi_fld%dusfcin(item,lan) - real (kind=kind_phys), pointer :: dvsfcin_cpl(:) => null() !< aoi_fld%dvsfcin(item,lan) - real (kind=kind_phys), pointer :: dtsfcin_cpl(:) => null() !< aoi_fld%dtsfcin(item,lan) - real (kind=kind_phys), pointer :: dqsfcin_cpl(:) => null() !< aoi_fld%dqsfcin(item,lan) - real (kind=kind_phys), pointer :: ulwsfcin_cpl(:) => null() !< aoi_fld%ulwsfcin(item,lan) -! real (kind=kind_phys), pointer :: tseain_cpl(:) => null() !< aoi_fld%tseain(item,lan) -! real (kind=kind_phys), pointer :: tisfcin_cpl(:) => null() !< aoi_fld%tisfcin(item,lan) -! real (kind=kind_phys), pointer :: ficein_cpl(:) => null() !< aoi_fld%ficein(item,lan) -! real (kind=kind_phys), pointer :: hicein_cpl(:) => null() !< aoi_fld%hicein(item,lan) - real (kind=kind_phys), pointer :: hsnoin_cpl(:) => null() !< aoi_fld%hsnoin(item,lan) -! real (kind=kind_phys), pointer :: sfc_alb_nir_dir_cpl(:) => null() !< sfc nir albedo for direct rad -! real (kind=kind_phys), pointer :: sfc_alb_nir_dif_cpl(:) => null() !< sfc nir albedo for diffuse rad -! real (kind=kind_phys), pointer :: sfc_alb_vis_dir_cpl(:) => null() !< sfc vis albedo for direct rad -! real (kind=kind_phys), pointer :: sfc_alb_vis_dif_cpl(:) => null() !< sfc vis albedo for diffuse rad + real (kind=kind_phys), allocatable :: dusfcin_cpl(:) !< aoi_fld%dusfcin(item,lan) + real (kind=kind_phys), allocatable :: dvsfcin_cpl(:) !< aoi_fld%dvsfcin(item,lan) + real (kind=kind_phys), allocatable :: dtsfcin_cpl(:) !< aoi_fld%dtsfcin(item,lan) + real (kind=kind_phys), allocatable :: dqsfcin_cpl(:) !< aoi_fld%dqsfcin(item,lan) + real (kind=kind_phys), allocatable :: ulwsfcin_cpl(:) !< aoi_fld%ulwsfcin(item,lan) +! real (kind=kind_phys), allocatable :: tseain_cpl(:) !< aoi_fld%tseain(item,lan) +! real (kind=kind_phys), allocatable :: tisfcin_cpl(:) !< aoi_fld%tisfcin(item,lan) +! real (kind=kind_phys), allocatable :: ficein_cpl(:) !< aoi_fld%ficein(item,lan) +! real (kind=kind_phys), allocatable :: hicein_cpl(:) !< aoi_fld%hicein(item,lan) + real (kind=kind_phys), allocatable :: hsnoin_cpl(:) !< aoi_fld%hsnoin(item,lan) +! real (kind=kind_phys), allocatable :: sfc_alb_nir_dir_cpl(:) !< sfc nir albedo for direct rad +! real (kind=kind_phys), allocatable :: sfc_alb_nir_dif_cpl(:) !< sfc nir albedo for diffuse rad +! real (kind=kind_phys), allocatable :: sfc_alb_vis_dir_cpl(:) !< sfc vis albedo for direct rad +! real (kind=kind_phys), allocatable :: sfc_alb_vis_dif_cpl(:) !< sfc vis albedo for diffuse rad !--- only variable needed for cplwav2atm=.TRUE. -! real (kind=kind_phys), pointer :: zorlwav_cpl(:) => null() !< roughness length from wave model +! real (kind=kind_phys), allocatable :: zorlwav_cpl(:) !< roughness length from wave model !--- also needed for ice/ocn coupling - real (kind=kind_phys), pointer :: slimskin_cpl(:)=> null() !< aoi_fld%slimskin(item,lan) + real (kind=kind_phys), allocatable :: slimskin_cpl(:) !< aoi_fld%slimskin(item,lan) !--- variables needed for use_med_flux =.TRUE. - real (kind=kind_phys), pointer :: dusfcin_med(:) => null() !< sfc u momentum flux over ocean - real (kind=kind_phys), pointer :: dvsfcin_med(:) => null() !< sfc v momentum flux over ocean - real (kind=kind_phys), pointer :: dtsfcin_med(:) => null() !< sfc latent heat flux over ocean - real (kind=kind_phys), pointer :: dqsfcin_med(:) => null() !< sfc sensible heat flux over ocean - real (kind=kind_phys), pointer :: ulwsfcin_med(:) => null() !< sfc upward lw flux over ocean + real (kind=kind_phys), allocatable :: dusfcin_med(:) !< sfc u momentum flux over ocean + real (kind=kind_phys), allocatable :: dvsfcin_med(:) !< sfc v momentum flux over ocean + real (kind=kind_phys), allocatable :: dtsfcin_med(:) !< sfc latent heat flux over ocean + real (kind=kind_phys), allocatable :: dqsfcin_med(:) !< sfc sensible heat flux over ocean + real (kind=kind_phys), allocatable :: ulwsfcin_med(:) !< sfc upward lw flux over ocean !--- outgoing accumulated quantities - real (kind=kind_phys), pointer :: rain_cpl (:) => null() !< total rain precipitation - real (kind=kind_phys), pointer :: rainc_cpl (:) => null() !< convective rain precipitation - real (kind=kind_phys), pointer :: snow_cpl (:) => null() !< total snow precipitation - real (kind=kind_phys), pointer :: dusfc_cpl (:) => null() !< sfc u momentum flux - real (kind=kind_phys), pointer :: dvsfc_cpl (:) => null() !< sfc v momentum flux - real (kind=kind_phys), pointer :: dtsfc_cpl (:) => null() !< sfc sensible heat flux - real (kind=kind_phys), pointer :: dqsfc_cpl (:) => null() !< sfc latent heat flux - real (kind=kind_phys), pointer :: dlwsfc_cpl(:) => null() !< sfc downward lw flux (w/m**2) - real (kind=kind_phys), pointer :: dswsfc_cpl(:) => null() !< sfc downward sw flux (w/m**2) - real (kind=kind_phys), pointer :: dnirbm_cpl(:) => null() !< sfc nir beam downward sw flux (w/m**2) - real (kind=kind_phys), pointer :: dnirdf_cpl(:) => null() !< sfc nir diff downward sw flux (w/m**2) - real (kind=kind_phys), pointer :: dvisbm_cpl(:) => null() !< sfc uv+vis beam dnwd sw flux (w/m**2) - real (kind=kind_phys), pointer :: dvisdf_cpl(:) => null() !< sfc uv+vis diff dnwd sw flux (w/m**2) - real (kind=kind_phys), pointer :: nlwsfc_cpl(:) => null() !< net downward lw flux (w/m**2) - real (kind=kind_phys), pointer :: nswsfc_cpl(:) => null() !< net downward sw flux (w/m**2) - real (kind=kind_phys), pointer :: nnirbm_cpl(:) => null() !< net nir beam downward sw flux (w/m**2) - real (kind=kind_phys), pointer :: nnirdf_cpl(:) => null() !< net nir diff downward sw flux (w/m**2) - real (kind=kind_phys), pointer :: nvisbm_cpl(:) => null() !< net uv+vis beam downward sw rad flux (w/m**2) - real (kind=kind_phys), pointer :: nvisdf_cpl(:) => null() !< net uv+vis diff downward sw rad flux (w/m**2) + real (kind=kind_phys), allocatable :: rain_cpl (:) !< total rain precipitation + real (kind=kind_phys), allocatable :: rainc_cpl (:) !< convective rain precipitation + real (kind=kind_phys), allocatable :: snow_cpl (:) !< total snow precipitation + real (kind=kind_phys), allocatable :: dusfc_cpl (:) !< sfc u momentum flux + real (kind=kind_phys), allocatable :: dvsfc_cpl (:) !< sfc v momentum flux + real (kind=kind_phys), allocatable :: dtsfc_cpl (:) !< sfc sensible heat flux + real (kind=kind_phys), allocatable :: dqsfc_cpl (:) !< sfc latent heat flux + real (kind=kind_phys), allocatable :: dlwsfc_cpl(:) !< sfc downward lw flux (w/m**2) + real (kind=kind_phys), allocatable :: dswsfc_cpl(:) !< sfc downward sw flux (w/m**2) + real (kind=kind_phys), allocatable :: dnirbm_cpl(:) !< sfc nir beam downward sw flux (w/m**2) + real (kind=kind_phys), allocatable :: dnirdf_cpl(:) !< sfc nir diff downward sw flux (w/m**2) + real (kind=kind_phys), allocatable :: dvisbm_cpl(:) !< sfc uv+vis beam dnwd sw flux (w/m**2) + real (kind=kind_phys), allocatable :: dvisdf_cpl(:) !< sfc uv+vis diff dnwd sw flux (w/m**2) + real (kind=kind_phys), allocatable :: nlwsfc_cpl(:) !< net downward lw flux (w/m**2) + real (kind=kind_phys), allocatable :: nswsfc_cpl(:) !< net downward sw flux (w/m**2) + real (kind=kind_phys), allocatable :: nnirbm_cpl(:) !< net nir beam downward sw flux (w/m**2) + real (kind=kind_phys), allocatable :: nnirdf_cpl(:) !< net nir diff downward sw flux (w/m**2) + real (kind=kind_phys), allocatable :: nvisbm_cpl(:) !< net uv+vis beam downward sw rad flux (w/m**2) + real (kind=kind_phys), allocatable :: nvisdf_cpl(:) !< net uv+vis diff downward sw rad flux (w/m**2) !--- outgoing instantaneous quantities - real (kind=kind_phys), pointer :: dusfci_cpl (:) => null() !< instantaneous sfc u momentum flux - real (kind=kind_phys), pointer :: dvsfci_cpl (:) => null() !< instantaneous sfc v momentum flux - real (kind=kind_phys), pointer :: dtsfci_cpl (:) => null() !< instantaneous sfc sensible heat flux - real (kind=kind_phys), pointer :: dqsfci_cpl (:) => null() !< instantaneous sfc latent heat flux - real (kind=kind_phys), pointer :: dlwsfci_cpl(:) => null() !< instantaneous sfc downward lw flux - real (kind=kind_phys), pointer :: dswsfci_cpl(:) => null() !< instantaneous sfc downward sw flux - real (kind=kind_phys), pointer :: dnirbmi_cpl(:) => null() !< instantaneous sfc nir beam downward sw flux - real (kind=kind_phys), pointer :: dnirdfi_cpl(:) => null() !< instantaneous sfc nir diff downward sw flux - real (kind=kind_phys), pointer :: dvisbmi_cpl(:) => null() !< instantaneous sfc uv+vis beam downward sw flux - real (kind=kind_phys), pointer :: dvisdfi_cpl(:) => null() !< instantaneous sfc uv+vis diff downward sw flux - real (kind=kind_phys), pointer :: nlwsfci_cpl(:) => null() !< instantaneous net sfc downward lw flux - real (kind=kind_phys), pointer :: nswsfci_cpl(:) => null() !< instantaneous net sfc downward sw flux - real (kind=kind_phys), pointer :: nnirbmi_cpl(:) => null() !< instantaneous net nir beam sfc downward sw flux - real (kind=kind_phys), pointer :: nnirdfi_cpl(:) => null() !< instantaneous net nir diff sfc downward sw flux - real (kind=kind_phys), pointer :: nvisbmi_cpl(:) => null() !< instantaneous net uv+vis beam downward sw flux - real (kind=kind_phys), pointer :: nvisdfi_cpl(:) => null() !< instantaneous net uv+vis diff downward sw flux - real (kind=kind_phys), pointer :: t2mi_cpl (:) => null() !< instantaneous T2m - real (kind=kind_phys), pointer :: q2mi_cpl (:) => null() !< instantaneous Q2m - real (kind=kind_phys), pointer :: u10mi_cpl (:) => null() !< instantaneous U10m - real (kind=kind_phys), pointer :: v10mi_cpl (:) => null() !< instantaneous V10m - real (kind=kind_phys), pointer :: tsfci_cpl (:) => null() !< instantaneous sfc temperature - real (kind=kind_phys), pointer :: psurfi_cpl (:) => null() !< instantaneous sfc pressure + real (kind=kind_phys), allocatable :: dusfci_cpl (:) !< instantaneous sfc u momentum flux + real (kind=kind_phys), allocatable :: dvsfci_cpl (:) !< instantaneous sfc v momentum flux + real (kind=kind_phys), allocatable :: dtsfci_cpl (:) !< instantaneous sfc sensible heat flux + real (kind=kind_phys), allocatable :: dqsfci_cpl (:) !< instantaneous sfc latent heat flux + real (kind=kind_phys), allocatable :: dlwsfci_cpl(:) !< instantaneous sfc downward lw flux + real (kind=kind_phys), allocatable :: dswsfci_cpl(:) !< instantaneous sfc downward sw flux + real (kind=kind_phys), allocatable :: dnirbmi_cpl(:) !< instantaneous sfc nir beam downward sw flux + real (kind=kind_phys), allocatable :: dnirdfi_cpl(:) !< instantaneous sfc nir diff downward sw flux + real (kind=kind_phys), allocatable :: dvisbmi_cpl(:) !< instantaneous sfc uv+vis beam downward sw flux + real (kind=kind_phys), allocatable :: dvisdfi_cpl(:) !< instantaneous sfc uv+vis diff downward sw flux + real (kind=kind_phys), allocatable :: nlwsfci_cpl(:) !< instantaneous net sfc downward lw flux + real (kind=kind_phys), allocatable :: nswsfci_cpl(:) !< instantaneous net sfc downward sw flux + real (kind=kind_phys), allocatable :: nnirbmi_cpl(:) !< instantaneous net nir beam sfc downward sw flux + real (kind=kind_phys), allocatable :: nnirdfi_cpl(:) !< instantaneous net nir diff sfc downward sw flux + real (kind=kind_phys), allocatable :: nvisbmi_cpl(:) !< instantaneous net uv+vis beam downward sw flux + real (kind=kind_phys), allocatable :: nvisdfi_cpl(:) !< instantaneous net uv+vis diff downward sw flux + real (kind=kind_phys), allocatable :: t2mi_cpl (:) !< instantaneous T2m + real (kind=kind_phys), allocatable :: q2mi_cpl (:) !< instantaneous Q2m + real (kind=kind_phys), allocatable :: u10mi_cpl (:) !< instantaneous U10m + real (kind=kind_phys), allocatable :: v10mi_cpl (:) !< instantaneous V10m + real (kind=kind_phys), allocatable :: tsfci_cpl (:) !< instantaneous sfc temperature + real (kind=kind_phys), allocatable :: psurfi_cpl (:) !< instantaneous sfc pressure !--- topography-based information for the coupling system - real (kind=kind_phys), pointer :: oro_cpl (:) => null() !< orography ( oro from GFS_sfcprop_type) - real (kind=kind_phys), pointer :: slmsk_cpl (:) => null() !< Land/Sea/Ice mask (slmsk from GFS_sfcprop_type) + real (kind=kind_phys), allocatable :: oro_cpl (:) !< orography ( oro from GFS_sfcprop_type) + real (kind=kind_phys), allocatable :: slmsk_cpl (:) !< Land/Sea/Ice mask (slmsk from GFS_sfcprop_type) !--- cellular automata - real (kind=kind_phys), pointer :: ca1 (:) => null() ! - real (kind=kind_phys), pointer :: ca2 (:) => null() ! - real (kind=kind_phys), pointer :: ca3 (:) => null() ! - real (kind=kind_phys), pointer :: ca_deep (:) => null() ! - real (kind=kind_phys), pointer :: ca_turb (:) => null() ! - real (kind=kind_phys), pointer :: ca_shal (:) => null() ! - real (kind=kind_phys), pointer :: ca_rad (:) => null() ! - real (kind=kind_phys), pointer :: ca_micro (:) => null() ! - real (kind=kind_phys), pointer :: condition(:) => null() ! + real (kind=kind_phys), allocatable :: ca1 (:) ! + real (kind=kind_phys), allocatable :: ca2 (:) ! + real (kind=kind_phys), allocatable :: ca3 (:) ! + real (kind=kind_phys), allocatable :: ca_deep (:) ! + real (kind=kind_phys), allocatable :: ca_turb (:) ! + real (kind=kind_phys), allocatable :: ca_shal (:) ! + real (kind=kind_phys), allocatable :: ca_rad (:) ! + real (kind=kind_phys), allocatable :: ca_micro (:) ! + real (kind=kind_phys), allocatable :: condition(:) ! !--- stochastic physics - real (kind=kind_phys), pointer :: shum_wts (:,:) => null() ! - real (kind=kind_phys), pointer :: sppt_wts (:,:) => null() ! - real (kind=kind_phys), pointer :: skebu_wts (:,:) => null() ! - real (kind=kind_phys), pointer :: skebv_wts (:,:) => null() ! - real (kind=kind_phys), pointer :: sfc_wts (:,:) => null() ! mg, sfc-perts - real (kind=kind_phys), pointer :: spp_wts_pbl (:,:) => null() ! spp-pbl-perts - real (kind=kind_phys), pointer :: spp_wts_sfc (:,:) => null() ! spp-sfc-perts - real (kind=kind_phys), pointer :: spp_wts_mp (:,:) => null() ! spp-mp-perts - real (kind=kind_phys), pointer :: spp_wts_gwd (:,:) => null() ! spp-gwd-perts - real (kind=kind_phys), pointer :: spp_wts_rad (:,:) => null() ! spp-rad-perts + real (kind=kind_phys), allocatable :: shum_wts (:,:) ! + real (kind=kind_phys), allocatable :: sppt_wts (:,:) ! + real (kind=kind_phys), allocatable :: skebu_wts (:,:) ! + real (kind=kind_phys), allocatable :: skebv_wts (:,:) ! + real (kind=kind_phys), allocatable :: sfc_wts (:,:) ! mg, sfc-perts + real (kind=kind_phys), allocatable :: spp_wts_pbl (:,:) ! spp-pbl-perts + real (kind=kind_phys), allocatable :: spp_wts_sfc (:,:) ! spp-sfc-perts + real (kind=kind_phys), allocatable :: spp_wts_mp (:,:) ! spp-mp-perts + real (kind=kind_phys), allocatable :: spp_wts_gwd (:,:) ! spp-gwd-perts + real (kind=kind_phys), allocatable :: spp_wts_rad (:,:) ! spp-rad-perts !--- aerosol surface emissions for Thompson microphysics - real (kind=kind_phys), pointer :: nwfa2d (:) => null() !< instantaneous water-friendly sfc aerosol source - real (kind=kind_phys), pointer :: nifa2d (:) => null() !< instantaneous ice-friendly sfc aerosol source + real (kind=kind_phys), allocatable :: nwfa2d (:) !< instantaneous water-friendly sfc aerosol source + real (kind=kind_phys), allocatable :: nifa2d (:) !< instantaneous ice-friendly sfc aerosol source !--- For fire diurnal cycle - real (kind=kind_phys), pointer :: ebu_smoke (:,:) => null() !< 3D ebu array + real (kind=kind_phys), allocatable :: ebu_smoke (:,:) !< 3D ebu array !--- For smoke and dust optical extinction - real (kind=kind_phys), pointer :: smoke_ext (:,:) => null() !< 3D aod array - real (kind=kind_phys), pointer :: dust_ext (:,:) => null() !< 3D aod array + real (kind=kind_phys), allocatable :: smoke_ext (:,:) !< 3D aod array + real (kind=kind_phys), allocatable :: dust_ext (:,:) !< 3D aod array !--- For MYNN PBL transport of smoke and dust - real (kind=kind_phys), pointer :: chem3d (:,:,:) => null() !< 3D aod array - real (kind=kind_phys), pointer :: ddvel (:,: ) => null() !< 2D dry deposition velocity + real (kind=kind_phys), allocatable :: chem3d (:,:,:) !< 3D aod array + real (kind=kind_phys), allocatable :: ddvel (:,: ) !< 2D dry deposition velocity !--- Fire plume rise diagnostics - real (kind=kind_phys), pointer :: min_fplume (:) => null() !< minimum plume rise level - real (kind=kind_phys), pointer :: max_fplume (:) => null() !< maximum plume rise level + real (kind=kind_phys), allocatable :: min_fplume (:) !< minimum plume rise level + real (kind=kind_phys), allocatable :: max_fplume (:) !< maximum plume rise level !--- hourly fire potential index - real (kind=kind_phys), pointer :: rrfs_hwp (:) => null() !< hourly fire potential index + real (kind=kind_phys), allocatable :: rrfs_hwp (:) !< hourly fire potential index !--- instantaneous quantities for chemistry coupling - real (kind=kind_phys), pointer :: ushfsfci(:) => null() !< instantaneous upward sensible heat flux (w/m**2) - real (kind=kind_phys), pointer :: qci_conv(:,:) => null() !< convective cloud condesate after rainout - real (kind=kind_phys), pointer :: pfi_lsan(:,:) => null() !< instantaneous 3D flux of ice nonconvective precipitation (kg m-2 s-1) - real (kind=kind_phys), pointer :: pfl_lsan(:,:) => null() !< instantaneous 3D flux of liquid nonconvective precipitation (kg m-2 s-1) + real (kind=kind_phys), allocatable :: ushfsfci(:) !< instantaneous upward sensible heat flux (w/m**2) + real (kind=kind_phys), allocatable :: qci_conv(:,:) !< convective cloud condesate after rainout + real (kind=kind_phys), allocatable :: pfi_lsan(:,:) !< instantaneous 3D flux of ice nonconvective precipitation (kg m-2 s-1) + real (kind=kind_phys), allocatable :: pfl_lsan(:,:) !< instantaneous 3D flux of liquid nonconvective precipitation (kg m-2 s-1) !-- prognostic updraft area fraction coupling in convection - real (kind=kind_phys), pointer :: dqdt_qmicro(:,:) => null() !< instantanious microphysics tendency to be passed from MP to convection + real (kind=kind_phys), allocatable :: dqdt_qmicro(:,:) !< instantanious microphysics tendency to be passed from MP to convection contains procedure :: create => coupling_create !< allocate array data @@ -678,7 +678,7 @@ module GFS_typedefs integer :: nthreads !< OpenMP threads available for physics integer :: nlunit !< unit for namelist character(len=64) :: fn_nml !< namelist filename for surface data cycling - character(len=:), pointer, dimension(:) :: input_nml_file => null() !< character string containing full namelist + character(len=:), allocatable, dimension(:) :: input_nml_file !< character string containing full namelist !< for use with internal file reads integer :: input_nml_file_length !< length (number of lines) in namelist for internal reads integer :: logunit @@ -692,8 +692,8 @@ module GFS_typedefs logical :: lssav !< logical flag for storing diagnostics integer :: naux2d !< number of auxiliary 2d arrays to output (for debugging) integer :: naux3d !< number of auxiliary 3d arrays to output (for debugging) - logical, pointer :: aux2d_time_avg(:) !< flags for time averaging of auxiliary 2d arrays - logical, pointer :: aux3d_time_avg(:) !< flags for time averaging of auxiliary 3d arrays + logical, allocatable :: aux2d_time_avg(:) !< flags for time averaging of auxiliary 2d arrays + logical, allocatable :: aux3d_time_avg(:) !< flags for time averaging of auxiliary 3d arrays real(kind=kind_phys) :: fhcyc !< frequency for surface data cycling (hours) integer :: thermodyn_id !< valid for GFS only for get_prs/phi @@ -707,8 +707,8 @@ module GFS_typedefs integer :: ny !< number of points in the j-dir for this MPI-domain integer :: levs !< number of vertical levels !--- ak/bk for pressure level calculations - real(kind=kind_phys), pointer :: ak(:) !< from surface (k=1) to TOA (k=levs) - real(kind=kind_phys), pointer :: bk(:) !< from surface (k=1) to TOA (k=levs) + real(kind=kind_phys), allocatable :: ak(:) !< from surface (k=1) to TOA (k=levs) + real(kind=kind_phys), allocatable :: bk(:) !< from surface (k=1) to TOA (k=levs) integer :: levsp1 !< number of vertical levels plus one integer :: levsm1 !< number of vertical levels minus one integer :: cnx !< number of points in the i-dir for this cubed-sphere face @@ -717,7 +717,7 @@ module GFS_typedefs integer :: latr !< number of global points in y-dir (j) along any meridian integer :: tile_num integer :: nblks !< for explicit data blocking: number of blocks - integer, pointer :: blksz(:) !< for explicit data blocking: block sizes of all blocks + integer, allocatable :: blksz(:) !< for explicit data blocking: block sizes of all blocks integer :: ncols !< total number of columns for all blocks integer :: fire_aux_data_levels !< vertical levels of fire auxiliary data @@ -862,7 +862,7 @@ module GFS_typedefs integer :: rrtmgp_nrghice !< Number of ice-roughness categories integer :: rrtmgp_nGauss_ang !< Number of angles used in Gaussian quadrature logical :: do_GPsw_Glw !< If set to true use rrtmgp for SW calculation, rrtmg for LW. - character(len=128), pointer :: active_gases_array(:) => null() !< character array for each trace gas name + character(len=128), allocatable :: active_gases_array(:) !< character array for each trace gas name logical :: use_LW_jacobian !< If true, use Jacobian of LW to update radiation tendency. logical :: damp_LW_fluxadj !< If true, damp the LW flux adjustment using the Jacobian w/ height with logistic function real(kind_phys) :: lfnc_k !< Logistic function transition depth (Pa) @@ -1013,10 +1013,10 @@ module GFS_typedefs integer :: lsnow_lsm_lbound!< lower bound for snow arrays, depending on lsnow_lsm integer :: lsnow_lsm_ubound!< upper bound for snow arrays, depending on lsnow_lsm logical :: exticeden !< flag for calculating frozen precip ice density outside of the LSM - real(kind=kind_phys), pointer :: zs(:) => null() !< depth of soil levels for land surface model - real(kind=kind_phys), pointer :: dzs(:) => null() !< thickness of soil levels for land surface model - real(kind=kind_phys), pointer :: pores(:) => null() !< max soil moisture for a given soil type for land surface model - real(kind=kind_phys), pointer :: resid(:) => null() !< min soil moisture for a given soil type for land surface model + real(kind=kind_phys), allocatable :: zs(:) !< depth of soil levels for land surface model + real(kind=kind_phys), allocatable :: dzs(:) !< thickness of soil levels for land surface model + real(kind=kind_phys), allocatable :: pores(:) !< max soil moisture for a given soil type for land surface model + real(kind=kind_phys), allocatable :: resid(:) !< min soil moisture for a given soil type for land surface model logical :: rdlai !< read LAI from input file (for RUC LSM or NOAH LSM WRFv4) logical :: ua_phys !< flag for using University of Arizona? extension to NOAH LSM WRFv4 logical :: usemonalb !< flag to read surface diffused shortwave albedo from input file for NOAH LSM WRFv4 @@ -1354,8 +1354,8 @@ module GFS_typedefs ! after gcycle is run ! next two are duplicated here to support lndp_type=1. If delete that scheme, could remove from GFS defs? - character(len=3) , pointer :: lndp_var_list(:) - real(kind=kind_phys), pointer :: lndp_prt_list(:) + character(len=3) , allocatable :: lndp_var_list(:) + real(kind=kind_phys), allocatable :: lndp_prt_list(:) logical :: do_spp ! Overall flag to turn on SPP or not integer :: spp_pbl integer :: spp_sfc @@ -1363,21 +1363,21 @@ module GFS_typedefs integer :: spp_rad integer :: spp_gwd integer :: n_var_spp - character(len=3) , pointer :: spp_var_list(:) - real(kind=kind_phys), pointer :: spp_prt_list(:) - real(kind=kind_phys), pointer :: spp_stddev_cutoff(:) + character(len=3) , allocatable :: spp_var_list(:) + real(kind=kind_phys), allocatable :: spp_prt_list(:) + real(kind=kind_phys), allocatable :: spp_stddev_cutoff(:) !--- tracer handling - character(len=32), pointer :: tracer_names(:) !< array of initialized tracers from dynamic core + character(len=32), allocatable :: tracer_names(:) !< array of initialized tracers from dynamic core integer :: ntrac !< number of tracers integer :: ntracp1 !< number of tracers plus one integer :: ntracp100 !< number of tracers plus one hundred integer :: nqrimef !< tracer index for mass weighted rime factor - integer, pointer :: dtidx(:,:) => null() !< index in outermost dimension of dtend + integer, allocatable :: dtidx(:,:) !< index in outermost dimension of dtend integer :: ndtend !< size of outermost dimension of dtend - type(dtend_var_label), pointer :: dtend_var_labels(:) => null() !< information about first dim of dtidx - type(dtend_process_label), pointer :: dtend_process_labels(:) => null() !< information about second dim of dtidx + type(dtend_var_label), allocatable :: dtend_var_labels(:) !< information about first dim of dtidx + type(dtend_process_label), allocatable :: dtend_process_labels(:) !< information about second dim of dtidx ! Indices within inner dimension of dtidx for things that are not tracers: integer :: index_of_temperature !< temperature in dtidx @@ -1405,7 +1405,7 @@ module GFS_typedefs integer :: index_of_process_non_physics !< tracer changes caused by everything except physics schemes integer :: index_of_process_dfi_radar !< tracer changes caused by radar mp temperature tendency forcing integer :: index_of_process_photochem !< all changes to ozone - logical, pointer :: is_photochem(:) => null()!< flags for which processes should be summed as photochemical + logical, allocatable :: is_photochem(:) !< flags for which processes should be summed as photochemical integer :: ntqv !< tracer index for water vapor (specific humidity) integer :: ntoz !< tracer index for ozone mixing ratio @@ -1458,8 +1458,8 @@ module GFS_typedefs integer :: ndchm !< number of diagnostic chemical tracers (not advected) integer :: ndchs !< tracer index for first diagnostic chemical tracer integer :: ndche !< tracer index for last diagnostic chemical tracer - logical, pointer :: ntdiag(:) => null() !< array to control diagnostics for chemical tracers - real(kind=kind_phys), pointer :: fscav(:) => null() !< array of aerosol scavenging coefficients + logical, allocatable :: ntdiag(:) !< array to control diagnostics for chemical tracers + real(kind=kind_phys), allocatable :: fscav(:) !< array of aerosol scavenging coefficients !--- derived totals for phy_f*d integer :: ntot2d !< total number of variables for phyf2d @@ -1542,7 +1542,7 @@ module GFS_typedefs integer :: yearlen !< length of the current forecast year in days ! integer :: iccn !< using IN CCN forcing for MG2/3 - real(kind=kind_phys), pointer :: si(:) !< vertical sigma coordinate for model initialization + real(kind=kind_phys), allocatable :: si(:) !< vertical sigma coordinate for model initialization real(kind=kind_phys) :: sec !< seconds since model initialization !--- IAU @@ -1593,50 +1593,50 @@ module GFS_typedefs !! type GFS_grid_type - real (kind=kind_phys), pointer :: xlon (:) => null() !< grid longitude in radians, ok for both 0->2pi + real (kind=kind_phys), allocatable :: xlon (:) !< grid longitude in radians, ok for both 0->2pi !! or -pi -> +pi ranges - real (kind=kind_phys), pointer :: xlat (:) => null() !< grid latitude in radians, default to pi/2 -> + real (kind=kind_phys), allocatable :: xlat (:) !< grid latitude in radians, default to pi/2 -> !! -pi/2 range, otherwise adj in subr called - real (kind=kind_phys), pointer :: xlat_d (:) => null() !< grid latitude in degrees, default to 90 -> + real (kind=kind_phys), allocatable :: xlat_d (:) !< grid latitude in degrees, default to 90 -> !! -90 range, otherwise adj in subr called - real (kind=kind_phys), pointer :: xlon_d (:) => null() !< grid longitude in degrees, default to 0 -> + real (kind=kind_phys), allocatable :: xlon_d (:) !< grid longitude in degrees, default to 0 -> !! 360 range, otherwise adj in subr called - real (kind=kind_phys), pointer :: sinlat (:) => null() !< sine of the grids corresponding latitudes - real (kind=kind_phys), pointer :: coslat (:) => null() !< cosine of the grids corresponding latitudes - real (kind=kind_phys), pointer :: area (:) => null() !< area of the grid cell - real (kind=kind_phys), pointer :: dx (:) => null() !< relative dx for the grid cell + real (kind=kind_phys), allocatable :: sinlat (:) !< sine of the grids corresponding latitudes + real (kind=kind_phys), allocatable :: coslat (:) !< cosine of the grids corresponding latitudes + real (kind=kind_phys), allocatable :: area (:) !< area of the grid cell + real (kind=kind_phys), allocatable :: dx (:) !< relative dx for the grid cell !--- grid-related interpolation data for prognostic ozone - real (kind=kind_phys), pointer :: ddy_o3 (:) => null() !< interpolation weight for ozone - integer, pointer :: jindx1_o3 (:) => null() !< interpolation low index for ozone - integer, pointer :: jindx2_o3 (:) => null() !< interpolation high index for ozone + real (kind=kind_phys), allocatable :: ddy_o3 (:) !< interpolation weight for ozone + integer, allocatable :: jindx1_o3 (:) !< interpolation low index for ozone + integer, allocatable :: jindx2_o3 (:) !< interpolation high index for ozone !--- grid-related interpolation data for stratosphere water - real (kind=kind_phys), pointer :: ddy_h (:) => null() !< interpolation weight for h2o - integer, pointer :: jindx1_h (:) => null() !< interpolation low index for h2o - integer, pointer :: jindx2_h (:) => null() !< interpolation high index for h2o + real (kind=kind_phys), allocatable :: ddy_h (:) !< interpolation weight for h2o + integer, allocatable :: jindx1_h (:) !< interpolation low index for h2o + integer, allocatable :: jindx2_h (:) !< interpolation high index for h2o !--- grid-related interpolation data for prognostic iccn - real (kind=kind_phys), pointer :: ddy_ci (:) => null() !< interpolation weight for iccn - integer, pointer :: jindx1_ci (:) => null() !< interpolation low index for iccn - integer, pointer :: jindx2_ci (:) => null() !< interpolation high index for iccn - real (kind=kind_phys), pointer :: ddx_ci (:) => null() !< interpolation weight for iccn - integer, pointer :: iindx1_ci (:) => null() !< interpolation low index for iccn - integer, pointer :: iindx2_ci (:) => null() !< interpolation high index for iccn + real (kind=kind_phys), allocatable :: ddy_ci (:) !< interpolation weight for iccn + integer, allocatable :: jindx1_ci (:) !< interpolation low index for iccn + integer, allocatable :: jindx2_ci (:) !< interpolation high index for iccn + real (kind=kind_phys), allocatable :: ddx_ci (:) !< interpolation weight for iccn + integer, allocatable :: iindx1_ci (:) !< interpolation low index for iccn + integer, allocatable :: iindx2_ci (:) !< interpolation high index for iccn !--- grid-related interpolation data for prescribed aerosols - real (kind=kind_phys), pointer :: ddy_aer (:) => null() !< interpolation weight for iaerclm - integer, pointer :: jindx1_aer (:) => null() !< interpolation low index for iaerclm - integer, pointer :: jindx2_aer (:) => null() !< interpolation high index for iaerclm - real (kind=kind_phys), pointer :: ddx_aer (:) => null() !< interpolation weight for iaerclm - integer, pointer :: iindx1_aer (:) => null() !< interpolation low index for iaerclm - integer, pointer :: iindx2_aer (:) => null() !< interpolation high index for iaerclm + real (kind=kind_phys), allocatable :: ddy_aer (:) !< interpolation weight for iaerclm + integer, allocatable :: jindx1_aer (:) !< interpolation low index for iaerclm + integer, allocatable :: jindx2_aer (:) !< interpolation high index for iaerclm + real (kind=kind_phys), allocatable :: ddx_aer (:) !< interpolation weight for iaerclm + integer, allocatable :: iindx1_aer (:) !< interpolation low index for iaerclm + integer, allocatable :: iindx2_aer (:) !< interpolation high index for iaerclm !--- grid-related interpolation data for cires_ugwp_v1 - real (kind=kind_phys), pointer :: ddy_j1tau (:) => null() !< interpolation weight for tau_ugwp - real (kind=kind_phys), pointer :: ddy_j2tau (:) => null() !< interpolation weight for tau_ugwp - integer, pointer :: jindx1_tau (:) => null() !< interpolation low index for tau_ugwp - integer, pointer :: jindx2_tau (:) => null() !< interpolation high index for tau_ugwp + real (kind=kind_phys), allocatable :: ddy_j1tau (:) !< interpolation weight for tau_ugwp + real (kind=kind_phys), allocatable :: ddy_j2tau (:) !< interpolation weight for tau_ugwp + integer, allocatable :: jindx1_tau (:) !< interpolation low index for tau_ugwp + integer, allocatable :: jindx2_tau (:) !< interpolation high index for tau_ugwp contains procedure :: create => grid_create !< allocate array data @@ -1653,85 +1653,85 @@ module GFS_typedefs type GFS_tbd_type !--- radiation random seeds - integer, pointer :: icsdsw (:) => null() !< (rad. only) auxiliary cloud control arrays passed to main - integer, pointer :: icsdlw (:) => null() !< (rad. only) radiations. if isubcsw/isubclw (input to init) + integer, allocatable :: icsdsw (:) !< (rad. only) auxiliary cloud control arrays passed to main + integer, allocatable :: icsdlw (:) !< (rad. only) radiations. if isubcsw/isubclw (input to init) !< (rad. only) are set to 2, the arrays contains provided !< (rad. only) random seeds for sub-column clouds generators - integer, pointer :: rseeds (:,:) => null() !< (rad. only) random seeds provided by host + integer, allocatable :: rseeds (:,:) !< (rad. only) random seeds provided by host !--- In - real (kind=kind_phys), pointer :: ozpl (:,:,:) => null() !< ozone forcing data - real (kind=kind_phys), pointer :: h2opl (:,:,:) => null() !< water forcing data - real (kind=kind_phys), pointer :: in_nm (:,:) => null() !< IN number concentration - real (kind=kind_phys), pointer :: ccn_nm (:,:) => null() !< CCN number concentration - real (kind=kind_phys), pointer :: aer_nm (:,:,:) => null() !< GOCART aerosol climo - real (kind=kind_phys), pointer :: tau_amf (: ) => null() !< nonsta-gw monthly data + real (kind=kind_phys), allocatable :: ozpl (:,:,:) !< ozone forcing data + real (kind=kind_phys), allocatable :: h2opl (:,:,:) !< water forcing data + real (kind=kind_phys), allocatable :: in_nm (:,:) !< IN number concentration + real (kind=kind_phys), allocatable :: ccn_nm (:,:) !< CCN number concentration + real (kind=kind_phys), allocatable :: aer_nm (:,:,:) !< GOCART aerosol climo + real (kind=kind_phys), allocatable :: tau_amf (: ) !< nonsta-gw monthly data - integer, pointer :: imap (:) => null() !< map of local index ix to global index i for this block - integer, pointer :: jmap (:) => null() !< map of local index ix to global index j for this block + integer, allocatable :: imap (:) !< map of local index ix to global index i for this block + integer, allocatable :: jmap (:) !< map of local index ix to global index j for this block !--- active when ((.not. newsas .or. cal_pre) .and. random_clds) - real (kind=kind_phys), pointer :: rann (:,:) => null() !< random number array (0-1) + real (kind=kind_phys), allocatable :: rann (:,:) !< random number array (0-1) !--- In/Out - real (kind=kind_phys), pointer :: acv (:) => null() !< array containing accumulated convective clouds - real (kind=kind_phys), pointer :: acvb (:) => null() !< arrays used by cnvc90 bottom - real (kind=kind_phys), pointer :: acvt (:) => null() !< arrays used by cnvc90 top (cnvc90.f) + real (kind=kind_phys), allocatable :: acv (:) !< array containing accumulated convective clouds + real (kind=kind_phys), allocatable :: acvb (:) !< arrays used by cnvc90 bottom + real (kind=kind_phys), allocatable :: acvt (:) !< arrays used by cnvc90 top (cnvc90.f) !--- Stochastic physics properties calculated in physics_driver - real (kind=kind_phys), pointer :: dtdtnp (:,:) => null() !< temperature change from physics that should not be perturbed with SPPT (k) - real (kind=kind_phys), pointer :: dtotprcp (:) => null() !< change in totprcp (diag_type) - real (kind=kind_phys), pointer :: dcnvprcp (:) => null() !< change in cnvprcp (diag_type) - real (kind=kind_phys), pointer :: drain_cpl (:) => null() !< change in rain_cpl (coupling_type) - real (kind=kind_phys), pointer :: dsnow_cpl (:) => null() !< change in show_cpl (coupling_type) + real (kind=kind_phys), allocatable :: dtdtnp (:,:) !< temperature change from physics that should not be perturbed with SPPT (k) + real (kind=kind_phys), allocatable :: dtotprcp (:) !< change in totprcp (diag_type) + real (kind=kind_phys), allocatable :: dcnvprcp (:) !< change in cnvprcp (diag_type) + real (kind=kind_phys), allocatable :: drain_cpl (:) !< change in rain_cpl (coupling_type) + real (kind=kind_phys), allocatable :: dsnow_cpl (:) !< change in show_cpl (coupling_type) !--- phy_f*d variables needed for seamless restarts and moving data between grrad and gbphys - real (kind=kind_phys), pointer :: phy_fctd (:,:) => null() !< cloud base mass flux for CS convection - real (kind=kind_phys), pointer :: phy_f2d (:,:) => null() !< 2d arrays saved for restart - real (kind=kind_phys), pointer :: phy_f3d (:,:,:) => null() !< 3d arrays saved for restart + real (kind=kind_phys), allocatable :: phy_fctd (:,:) !< cloud base mass flux for CS convection + real (kind=kind_phys), allocatable :: phy_f2d (:,:) !< 2d arrays saved for restart + real (kind=kind_phys), allocatable :: phy_f3d (:,:,:) !< 3d arrays saved for restart !--- Diagnostic that needs to be carried over to the next time step (removed from diag_type) - real (kind=kind_phys), pointer :: hpbl (:) => null() !< Planetary boundary layer height - real (kind=kind_phys), pointer :: ud_mf (:,:) => null() !< updraft mass flux + real (kind=kind_phys), allocatable :: hpbl (:) !< Planetary boundary layer height + real (kind=kind_phys), allocatable :: ud_mf (:,:) !< updraft mass flux !--- dynamical forcing variables for Grell-Freitas convection - real (kind=kind_phys), pointer :: forcet (:,:) => null() !< - real (kind=kind_phys), pointer :: forceq (:,:) => null() !< - real (kind=kind_phys), pointer :: prevst (:,:) => null() !< - real (kind=kind_phys), pointer :: prevsq (:,:) => null() !< - integer, pointer :: cactiv (:) => null() !< convective activity memory contour - integer, pointer :: cactiv_m (:) => null() !< mid-level convective activity memory contour - real (kind=kind_phys), pointer :: aod_gf (:) => null() + real (kind=kind_phys), allocatable :: forcet (:,:) !< + real (kind=kind_phys), allocatable :: forceq (:,:) !< + real (kind=kind_phys), allocatable :: prevst (:,:) !< + real (kind=kind_phys), allocatable :: prevsq (:,:) !< + integer, allocatable :: cactiv (:) !< convective activity memory contour + integer, allocatable :: cactiv_m (:) !< mid-level convective activity memory contour + real (kind=kind_phys), allocatable :: aod_gf (:) !--- MYNN prognostic variables that can't be in the Intdiag or Interstitial DDTs - real (kind=kind_phys), pointer :: CLDFRA_BL (:,:) => null() ! - real (kind=kind_phys), pointer :: QC_BL (:,:) => null() ! - real (kind=kind_phys), pointer :: QI_BL (:,:) => null() ! - real (kind=kind_phys), pointer :: el_pbl (:,:) => null() ! - real (kind=kind_phys), pointer :: Sh3D (:,:) => null() ! - real (kind=kind_phys), pointer :: Sm3D (:,:) => null() ! - real (kind=kind_phys), pointer :: qke (:,:) => null() ! - real (kind=kind_phys), pointer :: tsq (:,:) => null() ! - real (kind=kind_phys), pointer :: qsq (:,:) => null() ! - real (kind=kind_phys), pointer :: cov (:,:) => null() ! + real (kind=kind_phys), allocatable :: CLDFRA_BL (:,:) ! + real (kind=kind_phys), allocatable :: QC_BL (:,:) ! + real (kind=kind_phys), allocatable :: QI_BL (:,:) ! + real (kind=kind_phys), allocatable :: el_pbl (:,:) ! + real (kind=kind_phys), allocatable :: Sh3D (:,:) ! + real (kind=kind_phys), allocatable :: Sm3D (:,:) ! + real (kind=kind_phys), allocatable :: qke (:,:) ! + real (kind=kind_phys), allocatable :: tsq (:,:) ! + real (kind=kind_phys), allocatable :: qsq (:,:) ! + real (kind=kind_phys), allocatable :: cov (:,:) ! !--- MYJ schemes saved variables (from previous time step) - real (kind=kind_phys), pointer :: phy_myj_qsfc(:) => null() ! - real (kind=kind_phys), pointer :: phy_myj_thz0(:) => null() ! - real (kind=kind_phys), pointer :: phy_myj_qz0(:) => null() ! - real (kind=kind_phys), pointer :: phy_myj_uz0(:) => null() ! - real (kind=kind_phys), pointer :: phy_myj_vz0(:) => null() ! - real (kind=kind_phys), pointer :: phy_myj_akhs(:) => null() ! - real (kind=kind_phys), pointer :: phy_myj_akms(:) => null() ! - real (kind=kind_phys), pointer :: phy_myj_chkqlm(:) => null() ! - real (kind=kind_phys), pointer :: phy_myj_elflx(:) => null() ! - real (kind=kind_phys), pointer :: phy_myj_a1u(:) => null() ! - real (kind=kind_phys), pointer :: phy_myj_a1t(:) => null() ! - real (kind=kind_phys), pointer :: phy_myj_a1q(:) => null() ! + real (kind=kind_phys), allocatable :: phy_myj_qsfc(:) ! + real (kind=kind_phys), allocatable :: phy_myj_thz0(:) ! + real (kind=kind_phys), allocatable :: phy_myj_qz0(:) ! + real (kind=kind_phys), allocatable :: phy_myj_uz0(:) ! + real (kind=kind_phys), allocatable :: phy_myj_vz0(:) ! + real (kind=kind_phys), allocatable :: phy_myj_akhs(:) ! + real (kind=kind_phys), allocatable :: phy_myj_akms(:) ! + real (kind=kind_phys), allocatable :: phy_myj_chkqlm(:) ! + real (kind=kind_phys), allocatable :: phy_myj_elflx(:) ! + real (kind=kind_phys), allocatable :: phy_myj_a1u(:) ! + real (kind=kind_phys), allocatable :: phy_myj_a1t(:) ! + real (kind=kind_phys), allocatable :: phy_myj_a1q(:) ! !--- DFI Radar - real (kind=kind_phys), pointer :: dfi_radar_tten(:,:,:) => null() ! - real (kind=kind_phys), pointer :: cap_suppress(:,:) => null() ! + real (kind=kind_phys), allocatable :: dfi_radar_tten(:,:,:) ! + real (kind=kind_phys), allocatable :: cap_suppress(:,:) ! contains procedure :: create => tbd_create !< allocate array data @@ -1749,9 +1749,9 @@ module GFS_typedefs !--- In (radiation) !--- In/Out (physics) - real (kind=kind_phys), pointer :: cv (:) => null() !< fraction of convective cloud ; phys - real (kind=kind_phys), pointer :: cvt (:) => null() !< convective cloud top pressure in pa ; phys - real (kind=kind_phys), pointer :: cvb (:) => null() !< convective cloud bottom pressure in pa ; phys, cnvc90 + real (kind=kind_phys), allocatable :: cv (:) !< fraction of convective cloud ; phys + real (kind=kind_phys), allocatable :: cvt (:) !< convective cloud top pressure in pa ; phys + real (kind=kind_phys), allocatable :: cvb (:) !< convective cloud bottom pressure in pa ; phys, cnvc90 contains procedure :: create => cldprop_create !< allocate array data @@ -1767,7 +1767,7 @@ module GFS_typedefs !! type GFS_radtend_type - type (sfcfsw_type), pointer :: sfcfsw(:) => null() !< sw radiation fluxes at sfc + type (sfcfsw_type), allocatable :: sfcfsw(:) !< sw radiation fluxes at sfc !< [dim(im): created in grrad.f], components: !! (check module_radsw_parameters for definition) !!\n %upfxc - total sky upward sw flux at sfc (w/m**2) @@ -1775,7 +1775,7 @@ module GFS_typedefs !!\n %dnfxc - total sky downward sw flux at sfc (w/m**2) !!\n %dnfx0 - clear sky downward sw flux at sfc (w/m**2) - type (sfcflw_type), pointer :: sfcflw(:) => null() !< lw radiation fluxes at sfc + type (sfcflw_type), allocatable :: sfcflw(:) !< lw radiation fluxes at sfc !< [dim(im): created in grrad.f], components: !! (check module_radlw_paramters for definition) !!\n %upfxc - total sky upward lw flux at sfc (w/m**2) @@ -1784,22 +1784,22 @@ module GFS_typedefs !!\n %dnfx0 - clear sky downward lw flux at sfc (w/m**2) !--- Out (radiation only) - real (kind=kind_phys), pointer :: htrsw (:,:) => null() !< swh total sky sw heating rate in k/sec - real (kind=kind_phys), pointer :: htrlw (:,:) => null() !< hlw total sky lw heating rate in k/sec - real (kind=kind_phys), pointer :: sfalb (:) => null() !< mean surface diffused sw albedo + real (kind=kind_phys), allocatable :: htrsw (:,:) !< swh total sky sw heating rate in k/sec + real (kind=kind_phys), allocatable :: htrlw (:,:) !< hlw total sky lw heating rate in k/sec + real (kind=kind_phys), allocatable :: sfalb (:) !< mean surface diffused sw albedo - real (kind=kind_phys), pointer :: coszen(:) => null() !< mean cos of zenith angle over rad call period - real (kind=kind_phys), pointer :: tsflw (:) => null() !< surface air temp during lw calculation in k - real (kind=kind_phys), pointer :: semis (:) => null() !< surface lw emissivity in fraction - real (kind=kind_phys), pointer :: ext550 (:,:) => null() !< aerosol optical extinction from radiation + real (kind=kind_phys), allocatable :: coszen(:) !< mean cos of zenith angle over rad call period + real (kind=kind_phys), allocatable :: tsflw (:) !< surface air temp during lw calculation in k + real (kind=kind_phys), allocatable :: semis (:) !< surface lw emissivity in fraction + real (kind=kind_phys), allocatable :: ext550 (:,:) !< aerosol optical extinction from radiation !--- In/Out (???) (radiaition only) - real (kind=kind_phys), pointer :: coszdg(:) => null() !< daytime mean cosz over rad call period + real (kind=kind_phys), allocatable :: coszdg(:) !< daytime mean cosz over rad call period !--- In/Out (???) (physics only) - real (kind=kind_phys), pointer :: swhc (:,:) => null() !< clear sky sw heating rates ( k/s ) - real (kind=kind_phys), pointer :: lwhc (:,:) => null() !< clear sky lw heating rates ( k/s ) - real (kind=kind_phys), pointer :: lwhd (:,:,:) => null() !< idea sky lw heating rates ( k/s ) + real (kind=kind_phys), allocatable :: swhc (:,:) !< clear sky sw heating rates ( k/s ) + real (kind=kind_phys), allocatable :: lwhc (:,:) !< clear sky lw heating rates ( k/s ) + real (kind=kind_phys), allocatable :: lwhd (:,:,:) !< idea sky lw heating rates ( k/s ) contains procedure :: create => radtend_create !< allocate array data @@ -1816,239 +1816,239 @@ module GFS_typedefs type GFS_diag_type !! Input/Output only in radiation - real (kind=kind_phys), pointer :: fluxr(:,:) => null() !< to save time accumulated 2-d fields defined as:! + real (kind=kind_phys), allocatable :: fluxr(:,:) !< to save time accumulated 2-d fields defined as:! !< hardcoded field indices, opt. includes aerosols! - type (topfsw_type), pointer :: topfsw(:) => null() !< sw radiation fluxes at toa, components: + type (topfsw_type), allocatable :: topfsw(:) !< sw radiation fluxes at toa, components: ! %upfxc - total sky upward sw flux at toa (w/m**2) ! %dnfxc - total sky downward sw flux at toa (w/m**2) ! %upfx0 - clear sky upward sw flux at toa (w/m**2) - type (topflw_type), pointer :: topflw(:) => null() !< lw radiation fluxes at top, component: + type (topflw_type), allocatable :: topflw(:) !< lw radiation fluxes at top, component: ! %upfxc - total sky upward lw flux at toa (w/m**2) ! %upfx0 - clear sky upward lw flux at toa (w/m**2) ! Input/output - used by physics - real (kind=kind_phys), pointer :: srunoff(:) => null() !< accumulated surface storm runoff (from lsm) - real (kind=kind_phys), pointer :: evbsa (:) => null() !< accumulated direct evaporation - real (kind=kind_phys), pointer :: evcwa (:) => null() !< accumulated canopy evaporation - real (kind=kind_phys), pointer :: snohfa (:) => null() !< heat flux for phase change of snow (melting) - real (kind=kind_phys), pointer :: transa (:) => null() !< accumulated transpiration - real (kind=kind_phys), pointer :: sbsnoa (:) => null() !< accumulated snow sublimation - real (kind=kind_phys), pointer :: snowca (:) => null() !< snow cover - real (kind=kind_phys), pointer :: sbsno (:) => null() !< instantaneous snow sublimation - real (kind=kind_phys), pointer :: evbs(:) => null() !< instantaneous direct evaporation - real (kind=kind_phys), pointer :: trans (:) => null() !< instantaneous transpiration - real (kind=kind_phys), pointer :: evcw(:) => null() !< instantaneous canopy evaporation - real (kind=kind_phys), pointer :: snowmt_land(:) => null() !< ruc lsm diagnostics over land - real (kind=kind_phys), pointer :: snowmt_ice(:) => null() !< ruc lsm diagnostics over ice - real (kind=kind_phys), pointer :: soilm (:) => null() !< integrated soil moisture - real (kind=kind_phys), pointer :: paha (:) => null() !< noah lsm diagnostics - real (kind=kind_phys), pointer :: tmpmin (:) => null() !< min temperature at 2m height (k) - real (kind=kind_phys), pointer :: tmpmax (:) => null() !< max temperature at 2m height (k) - real (kind=kind_phys), pointer :: dusfc (:) => null() !< u component of surface stress - real (kind=kind_phys), pointer :: dvsfc (:) => null() !< v component of surface stress - real (kind=kind_phys), pointer :: dtsfc (:) => null() !< sensible heat flux (w/m2) - real (kind=kind_phys), pointer :: dqsfc (:) => null() !< latent heat flux (w/m2) - real (kind=kind_phys), pointer :: totprcp(:) => null() !< accumulated total precipitation (kg/m2) - real (kind=kind_phys), pointer :: totprcpb(:) => null() !< accumulated total precipitation in bucket(kg/m2) - real (kind=kind_phys), pointer :: gflux (:) => null() !< groud conductive heat flux - real (kind=kind_phys), pointer :: dlwsfc (:) => null() !< time accumulated sfc dn lw flux ( w/m**2 ) - real (kind=kind_phys), pointer :: ulwsfc (:) => null() !< time accumulated sfc up lw flux ( w/m**2 ) - real (kind=kind_phys), pointer :: suntim (:) => null() !< sunshine duration time (s) - real (kind=kind_phys), pointer :: runoff (:) => null() !< total water runoff - real (kind=kind_phys), pointer :: ep (:) => null() !< potential evaporation - real (kind=kind_phys), pointer :: tecan (:) => null() !< total evaporation of intercepted water - real (kind=kind_phys), pointer :: tetran (:) => null() !< total transpiration rate - real (kind=kind_phys), pointer :: tedir (:) => null() !< total soil surface evaporation rate - real (kind=kind_phys), pointer :: twa (:) => null() !< total water storage in aquifer - real (kind=kind_phys), pointer :: cldwrk (:) => null() !< cloud workfunction (valid only with sas) - real (kind=kind_phys), pointer :: dugwd (:) => null() !< vertically integrated u change by OGWD - real (kind=kind_phys), pointer :: dvgwd (:) => null() !< vertically integrated v change by OGWD - real (kind=kind_phys), pointer :: psmean (:) => null() !< surface pressure (kPa) - real (kind=kind_phys), pointer :: cnvprcp(:) => null() !< accumulated convective precipitation (kg/m2) - real (kind=kind_phys), pointer :: cnvprcpb(:) => null() !< accumulated convective precipitation in bucket (kg/m2) - real (kind=kind_phys), pointer :: spfhmin(:) => null() !< minimum specific humidity - real (kind=kind_phys), pointer :: spfhmax(:) => null() !< maximum specific humidity - real (kind=kind_phys), pointer :: u10mmax(:) => null() !< maximum u-wind - real (kind=kind_phys), pointer :: v10mmax(:) => null() !< maximum v-wind - real (kind=kind_phys), pointer :: wind10mmax(:) => null() !< maximum wind speed - real (kind=kind_phys), pointer :: u10max(:) => null() !< maximum u-wind used with avg_max_length - real (kind=kind_phys), pointer :: v10max(:) => null() !< maximum v-wind used with avg_max_length - real (kind=kind_phys), pointer :: spd10max(:) => null() !< maximum wind speed used with avg_max_length - real (kind=kind_phys), pointer :: rain (:) => null() !< total rain at this time step - real (kind=kind_phys), pointer :: rainc (:) => null() !< convective rain at this time step - real (kind=kind_phys), pointer :: ice (:) => null() !< ice fall at this time step - real (kind=kind_phys), pointer :: snow (:) => null() !< snow fall at this time step - real (kind=kind_phys), pointer :: graupel(:) => null() !< graupel fall at this time step - real (kind=kind_phys), pointer :: totice (:) => null() !< accumulated ice precipitation (kg/m2) - real (kind=kind_phys), pointer :: totsnw (:) => null() !< accumulated snow precipitation (kg/m2) - real (kind=kind_phys), pointer :: totgrp (:) => null() !< accumulated graupel precipitation (kg/m2) - real (kind=kind_phys), pointer :: toticeb(:) => null() !< accumulated ice precipitation in bucket (kg/m2) - real (kind=kind_phys), pointer :: totsnwb(:) => null() !< accumulated snow precipitation in bucket (kg/m2) - real (kind=kind_phys), pointer :: totgrpb(:) => null() !< accumulated graupel precipitation in bucket (kg/m2) - real (kind=kind_phys), pointer :: frzr (:) => null() !< accumulated surface freezing rain (m) - real (kind=kind_phys), pointer :: frzrb (:) => null() !< accumulated surface freezing rain in bucket (m) - real (kind=kind_phys), pointer :: frozr (:) => null() !< accumulated surface graupel (m) - real (kind=kind_phys), pointer :: frozrb (:) => null() !< accumulated surface graupel in bucket (m) - real (kind=kind_phys), pointer :: tsnowp (:) => null() !< accumulated surface snowfall (m) - real (kind=kind_phys), pointer :: tsnowpb(:) => null() !< accumulated surface snowfall in bucket (m) - real (kind=kind_phys), pointer :: rhonewsn1(:) => null() !< precipitation ice density outside RUC LSM (kg/m3) + real (kind=kind_phys), allocatable :: srunoff(:) !< accumulated surface storm runoff (from lsm) + real (kind=kind_phys), allocatable :: evbsa (:) !< accumulated direct evaporation + real (kind=kind_phys), allocatable :: evcwa (:) !< accumulated canopy evaporation + real (kind=kind_phys), allocatable :: snohfa (:) !< heat flux for phase change of snow (melting) + real (kind=kind_phys), allocatable :: transa (:) !< accumulated transpiration + real (kind=kind_phys), allocatable :: sbsnoa (:) !< accumulated snow sublimation + real (kind=kind_phys), allocatable :: snowca (:) !< snow cover + real (kind=kind_phys), allocatable :: sbsno (:) !< instantaneous snow sublimation + real (kind=kind_phys), allocatable :: evbs(:) !< instantaneous direct evaporation + real (kind=kind_phys), allocatable :: trans (:) !< instantaneous transpiration + real (kind=kind_phys), allocatable :: evcw(:) !< instantaneous canopy evaporation + real (kind=kind_phys), allocatable :: snowmt_land(:) !< ruc lsm diagnostics over land + real (kind=kind_phys), allocatable :: snowmt_ice(:) !< ruc lsm diagnostics over ice + real (kind=kind_phys), allocatable :: soilm (:) !< integrated soil moisture + real (kind=kind_phys), allocatable :: paha (:) !< noah lsm diagnostics + real (kind=kind_phys), allocatable :: tmpmin (:) !< min temperature at 2m height (k) + real (kind=kind_phys), allocatable :: tmpmax (:) !< max temperature at 2m height (k) + real (kind=kind_phys), allocatable :: dusfc (:) !< u component of surface stress + real (kind=kind_phys), allocatable :: dvsfc (:) !< v component of surface stress + real (kind=kind_phys), allocatable :: dtsfc (:) !< sensible heat flux (w/m2) + real (kind=kind_phys), allocatable :: dqsfc (:) !< latent heat flux (w/m2) + real (kind=kind_phys), allocatable :: totprcp(:) !< accumulated total precipitation (kg/m2) + real (kind=kind_phys), allocatable :: totprcpb(:) !< accumulated total precipitation in bucket(kg/m2) + real (kind=kind_phys), allocatable :: gflux (:) !< groud conductive heat flux + real (kind=kind_phys), allocatable :: dlwsfc (:) !< time accumulated sfc dn lw flux ( w/m**2 ) + real (kind=kind_phys), allocatable :: ulwsfc (:) !< time accumulated sfc up lw flux ( w/m**2 ) + real (kind=kind_phys), allocatable :: suntim (:) !< sunshine duration time (s) + real (kind=kind_phys), allocatable :: runoff (:) !< total water runoff + real (kind=kind_phys), allocatable :: ep (:) !< potential evaporation + real (kind=kind_phys), allocatable :: tecan (:) !< total evaporation of intercepted water + real (kind=kind_phys), allocatable :: tetran (:) !< total transpiration rate + real (kind=kind_phys), allocatable :: tedir (:) !< total soil surface evaporation rate + real (kind=kind_phys), allocatable :: twa (:) !< total water storage in aquifer + real (kind=kind_phys), allocatable :: cldwrk (:) !< cloud workfunction (valid only with sas) + real (kind=kind_phys), allocatable :: dugwd (:) !< vertically integrated u change by OGWD + real (kind=kind_phys), allocatable :: dvgwd (:) !< vertically integrated v change by OGWD + real (kind=kind_phys), allocatable :: psmean (:) !< surface pressure (kPa) + real (kind=kind_phys), allocatable :: cnvprcp(:) !< accumulated convective precipitation (kg/m2) + real (kind=kind_phys), allocatable :: cnvprcpb(:) !< accumulated convective precipitation in bucket (kg/m2) + real (kind=kind_phys), allocatable :: spfhmin(:) !< minimum specific humidity + real (kind=kind_phys), allocatable :: spfhmax(:) !< maximum specific humidity + real (kind=kind_phys), allocatable :: u10mmax(:) !< maximum u-wind + real (kind=kind_phys), allocatable :: v10mmax(:) !< maximum v-wind + real (kind=kind_phys), allocatable :: wind10mmax(:) !< maximum wind speed + real (kind=kind_phys), allocatable :: u10max(:) !< maximum u-wind used with avg_max_length + real (kind=kind_phys), allocatable :: v10max(:) !< maximum v-wind used with avg_max_length + real (kind=kind_phys), allocatable :: spd10max(:) !< maximum wind speed used with avg_max_length + real (kind=kind_phys), allocatable :: rain (:) !< total rain at this time step + real (kind=kind_phys), allocatable :: rainc (:) !< convective rain at this time step + real (kind=kind_phys), allocatable :: ice (:) !< ice fall at this time step + real (kind=kind_phys), allocatable :: snow (:) !< snow fall at this time step + real (kind=kind_phys), allocatable :: graupel(:) !< graupel fall at this time step + real (kind=kind_phys), allocatable :: totice (:) !< accumulated ice precipitation (kg/m2) + real (kind=kind_phys), allocatable :: totsnw (:) !< accumulated snow precipitation (kg/m2) + real (kind=kind_phys), allocatable :: totgrp (:) !< accumulated graupel precipitation (kg/m2) + real (kind=kind_phys), allocatable :: toticeb(:) !< accumulated ice precipitation in bucket (kg/m2) + real (kind=kind_phys), allocatable :: totsnwb(:) !< accumulated snow precipitation in bucket (kg/m2) + real (kind=kind_phys), allocatable :: totgrpb(:) !< accumulated graupel precipitation in bucket (kg/m2) + real (kind=kind_phys), allocatable :: frzr (:) !< accumulated surface freezing rain (m) + real (kind=kind_phys), allocatable :: frzrb (:) !< accumulated surface freezing rain in bucket (m) + real (kind=kind_phys), allocatable :: frozr (:) !< accumulated surface graupel (m) + real (kind=kind_phys), allocatable :: frozrb (:) !< accumulated surface graupel in bucket (m) + real (kind=kind_phys), allocatable :: tsnowp (:) !< accumulated surface snowfall (m) + real (kind=kind_phys), allocatable :: tsnowpb(:) !< accumulated surface snowfall in bucket (m) + real (kind=kind_phys), allocatable :: rhonewsn1(:) !< precipitation ice density outside RUC LSM (kg/m3) !--- MYNN variables - real (kind=kind_phys), pointer :: edmf_a (:,:) => null() ! - real (kind=kind_phys), pointer :: edmf_w (:,:) => null() ! - real (kind=kind_phys), pointer :: edmf_qt (:,:) => null() ! - real (kind=kind_phys), pointer :: edmf_thl (:,:) => null() ! - real (kind=kind_phys), pointer :: edmf_ent (:,:) => null() ! - real (kind=kind_phys), pointer :: edmf_qc (:,:) => null() ! - real (kind=kind_phys), pointer :: sub_thl (:,:) => null() ! - real (kind=kind_phys), pointer :: sub_sqv (:,:) => null() ! - real (kind=kind_phys), pointer :: det_thl (:,:) => null() ! - real (kind=kind_phys), pointer :: det_sqv (:,:) => null() ! - real (kind=kind_phys), pointer :: maxMF (:) => null() ! - integer, pointer :: nupdraft (:) => null() ! - integer, pointer :: ktop_plume (:) => null() ! - real (kind=kind_phys), pointer :: exch_h (:,:) => null() ! - real (kind=kind_phys), pointer :: exch_m (:,:) => null() ! - real (kind=kind_phys), pointer :: dqke (:,:) => null() !< timestep change of tke - real (kind=kind_phys), pointer :: qwt (:,:) => null() !< vertical transport of tke - real (kind=kind_phys), pointer :: qshear (:,:) => null() !< shear production of tke - real (kind=kind_phys), pointer :: qbuoy (:,:) => null() !< buoyancy production of tke - real (kind=kind_phys), pointer :: qdiss (:,:) => null() !< dissipation of tke + real (kind=kind_phys), allocatable :: edmf_a (:,:) ! + real (kind=kind_phys), allocatable :: edmf_w (:,:) ! + real (kind=kind_phys), allocatable :: edmf_qt (:,:) ! + real (kind=kind_phys), allocatable :: edmf_thl (:,:) ! + real (kind=kind_phys), allocatable :: edmf_ent (:,:) ! + real (kind=kind_phys), allocatable :: edmf_qc (:,:) ! + real (kind=kind_phys), allocatable :: sub_thl (:,:) ! + real (kind=kind_phys), allocatable :: sub_sqv (:,:) ! + real (kind=kind_phys), allocatable :: det_thl (:,:) ! + real (kind=kind_phys), allocatable :: det_sqv (:,:) ! + real (kind=kind_phys), allocatable :: maxMF (:) ! + integer, allocatable :: nupdraft (:) ! + integer, allocatable :: ktop_plume (:) ! + real (kind=kind_phys), allocatable :: exch_h (:,:) ! + real (kind=kind_phys), allocatable :: exch_m (:,:) ! + real (kind=kind_phys), allocatable :: dqke (:,:) !< timestep change of tke + real (kind=kind_phys), allocatable :: qwt (:,:) !< vertical transport of tke + real (kind=kind_phys), allocatable :: qshear (:,:) !< shear production of tke + real (kind=kind_phys), allocatable :: qbuoy (:,:) !< buoyancy production of tke + real (kind=kind_phys), allocatable :: qdiss (:,:) !< dissipation of tke ! Output - only in physics - real (kind=kind_phys), pointer :: u10m (:) => null() !< 10 meter u/v wind speed - real (kind=kind_phys), pointer :: v10m (:) => null() !< 10 meter u/v wind speed - real (kind=kind_phys), pointer :: dpt2m (:) => null() !< 2 meter dew point temperature - real (kind=kind_phys), pointer :: zlvl (:) => null() !< layer 1 height (m) - real (kind=kind_phys), pointer :: psurf (:) => null() !< surface pressure (Pa) - real (kind=kind_phys), pointer :: pwat (:) => null() !< precipitable water - real (kind=kind_phys), pointer :: t1 (:) => null() !< layer 1 temperature (K) - real (kind=kind_phys), pointer :: q1 (:) => null() !< layer 1 specific humidity (kg/kg) - real (kind=kind_phys), pointer :: u1 (:) => null() !< layer 1 zonal wind (m/s) - real (kind=kind_phys), pointer :: v1 (:) => null() !< layer 1 merdional wind (m/s) - real (kind=kind_phys), pointer :: chh (:) => null() !< thermal exchange coefficient - real (kind=kind_phys), pointer :: cmm (:) => null() !< momentum exchange coefficient - real (kind=kind_phys), pointer :: dlwsfci(:) => null() !< instantaneous sfc dnwd lw flux ( w/m**2 ) - real (kind=kind_phys), pointer :: ulwsfci(:) => null() !< instantaneous sfc upwd lw flux ( w/m**2 ) - real (kind=kind_phys), pointer :: dswsfci(:) => null() !< instantaneous sfc dnwd sw flux ( w/m**2 ) - real (kind=kind_phys), pointer :: nswsfci(:) => null() !< instantaneous sfc net dnwd sw flux ( w/m**2 ) - real (kind=kind_phys), pointer :: uswsfci(:) => null() !< instantaneous sfc upwd sw flux ( w/m**2 ) - real (kind=kind_phys), pointer :: dusfci (:) => null() !< instantaneous u component of surface stress - real (kind=kind_phys), pointer :: dvsfci (:) => null() !< instantaneous v component of surface stress - real (kind=kind_phys), pointer :: dtsfci (:) => null() !< instantaneous sfc sensible heat flux - real (kind=kind_phys), pointer :: dqsfci (:) => null() !< instantaneous sfc latent heat flux - real (kind=kind_phys), pointer :: gfluxi (:) => null() !< instantaneous sfc ground heat flux - real (kind=kind_phys), pointer :: pahi (:) => null() !< instantaneous precipitation advected heat flux - real (kind=kind_phys), pointer :: epi (:) => null() !< instantaneous sfc potential evaporation - real (kind=kind_phys), pointer :: smcwlt2(:) => null() !< wilting point (volumetric) - real (kind=kind_phys), pointer :: smcref2(:) => null() !< soil moisture threshold (volumetric) - real (kind=kind_phys), pointer :: wet1 (:) => null() !< normalized soil wetness - real (kind=kind_phys), pointer :: sr (:) => null() !< snow ratio : ratio of snow to total precipitation - real (kind=kind_phys), pointer :: tdomr (:) => null() !< dominant accumulated rain type - real (kind=kind_phys), pointer :: tdomzr (:) => null() !< dominant accumulated freezing rain type - real (kind=kind_phys), pointer :: tdomip (:) => null() !< dominant accumulated sleet type - real (kind=kind_phys), pointer :: tdoms (:) => null() !< dominant accumulated snow type - real (kind=kind_phys), pointer :: zmtnblck(:) => null() ! null() !< tracer changes due to physics - - real (kind=kind_phys), pointer :: refdmax (:) => null() !< max hourly 1-km agl reflectivity - real (kind=kind_phys), pointer :: refdmax263k(:) => null() !< max hourly -10C reflectivity - real (kind=kind_phys), pointer :: t02max (:) => null() !< max hourly 2m T - real (kind=kind_phys), pointer :: t02min (:) => null() !< min hourly 2m T - real (kind=kind_phys), pointer :: rh02max (:) => null() !< max hourly 2m RH - real (kind=kind_phys), pointer :: rh02min (:) => null() !< min hourly 2m RH - real (kind=kind_phys), pointer :: pratemax(:) => null() !< max hourly precipitation rate + real (kind=kind_phys), allocatable :: dtend (:,:,:) !< tracer changes due to physics + + real (kind=kind_phys), allocatable :: refdmax (:) !< max hourly 1-km agl reflectivity + real (kind=kind_phys), allocatable :: refdmax263k(:) !< max hourly -10C reflectivity + real (kind=kind_phys), allocatable :: t02max (:) !< max hourly 2m T + real (kind=kind_phys), allocatable :: t02min (:) !< min hourly 2m T + real (kind=kind_phys), allocatable :: rh02max (:) !< max hourly 2m RH + real (kind=kind_phys), allocatable :: rh02min (:) !< min hourly 2m RH + real (kind=kind_phys), allocatable :: pratemax(:) !< max hourly precipitation rate !--- accumulated quantities for 3D diagnostics - real (kind=kind_phys), pointer :: upd_mf (:,:) => null() !< instantaneous convective updraft mass flux - real (kind=kind_phys), pointer :: dwn_mf (:,:) => null() !< instantaneous convective downdraft mass flux - real (kind=kind_phys), pointer :: det_mf (:,:) => null() !< instantaneous convective detrainment mass flux + real (kind=kind_phys), allocatable :: upd_mf (:,:) !< instantaneous convective updraft mass flux + real (kind=kind_phys), allocatable :: dwn_mf (:,:) !< instantaneous convective downdraft mass flux + real (kind=kind_phys), allocatable :: det_mf (:,:) !< instantaneous convective detrainment mass flux !--- F-A MP scheme - real (kind=kind_phys), pointer :: train (:,:) => null() !< accumulated stratiform T tendency (K s-1) - real (kind=kind_phys), pointer :: cldfra (:,:) => null() !< instantaneous 3D cloud fraction + real (kind=kind_phys), allocatable :: train (:,:) !< accumulated stratiform T tendency (K s-1) + real (kind=kind_phys), allocatable :: cldfra (:,:) !< instantaneous 3D cloud fraction !--- MP quantities for 3D diagnositics - real (kind=kind_phys), pointer :: refl_10cm(:,:) => null() !< instantaneous refl_10cm - real (kind=kind_phys), pointer :: cldfra2d (:) => null() !< instantaneous 2D cloud fraction - real (kind=kind_phys), pointer :: total_albedo (:) => null() !< total sky (with cloud) albedo at toa - real (kind=kind_phys), pointer :: lwp_ex (:) => null() !< liquid water path from microphysics - real (kind=kind_phys), pointer :: iwp_ex (:) => null() !< ice water path from microphysics - real (kind=kind_phys), pointer :: lwp_fc (:) => null() !< liquid water path from cloud fraction scheme - real (kind=kind_phys), pointer :: iwp_fc (:) => null() !< ice water path from cloud fraction scheme + real (kind=kind_phys), allocatable :: refl_10cm(:,:) !< instantaneous refl_10cm + real (kind=kind_phys), allocatable :: cldfra2d (:) !< instantaneous 2D cloud fraction + real (kind=kind_phys), allocatable :: total_albedo (:) !< total sky (with cloud) albedo at toa + real (kind=kind_phys), allocatable :: lwp_ex (:) !< liquid water path from microphysics + real (kind=kind_phys), allocatable :: iwp_ex (:) !< ice water path from microphysics + real (kind=kind_phys), allocatable :: lwp_fc (:) !< liquid water path from cloud fraction scheme + real (kind=kind_phys), allocatable :: iwp_fc (:) !< ice water path from cloud fraction scheme !--- Extra PBL diagnostics - real (kind=kind_phys), pointer :: dkt(:,:) => null() !< Eddy diffusitivity for heat - real (kind=kind_phys), pointer :: dku(:,:) => null() !< Eddy diffusitivity for momentum + real (kind=kind_phys), allocatable :: dkt(:,:) !< Eddy diffusitivity for heat + real (kind=kind_phys), allocatable :: dku(:,:) !< Eddy diffusitivity for momentum ! !---vay-2018 UGWP-diagnostics instantaneous ! ! OGWs +NGWs - real (kind=kind_phys), pointer :: dudt_gw(:,:) => null() !< - real (kind=kind_phys), pointer :: dvdt_gw(:,:) => null() !< - real (kind=kind_phys), pointer :: dtdt_gw(:,:) => null() !< - real (kind=kind_phys), pointer :: kdis_gw(:,:) => null() !< + real (kind=kind_phys), allocatable :: dudt_gw(:,:) !< + real (kind=kind_phys), allocatable :: dvdt_gw(:,:) !< + real (kind=kind_phys), allocatable :: dtdt_gw(:,:) !< + real (kind=kind_phys), allocatable :: kdis_gw(:,:) !< !oro-GWs - real (kind=kind_phys), pointer :: dudt_ogw(:,:) => null() !< - real (kind=kind_phys), pointer :: dvdt_ogw(:,:) => null() !< - real (kind=kind_phys), pointer :: dudt_obl(:,:) => null() !< - real (kind=kind_phys), pointer :: dvdt_obl(:,:) => null() !< - real (kind=kind_phys), pointer :: dudt_oss(:,:) => null() !< - real (kind=kind_phys), pointer :: dvdt_oss(:,:) => null() !< - real (kind=kind_phys), pointer :: dudt_ofd(:,:) => null() !< - real (kind=kind_phys), pointer :: dvdt_ofd(:,:) => null() !< - - real (kind=kind_phys), pointer :: du_ogwcol(:) => null() !< instantaneous sfc u-momentum flux from OGW - real (kind=kind_phys), pointer :: dv_ogwcol(:) => null() !< instantaneous sfc v-momentum flux from OGW - real (kind=kind_phys), pointer :: du_oblcol(:) => null() !< instantaneous sfc u-momentum flux from blocking - real (kind=kind_phys), pointer :: dv_oblcol(:) => null() !< instantaneous sfc v-momentum flux from blocking - real (kind=kind_phys), pointer :: du_osscol(:) => null() !< instantaneous sfc u-momentum flux from SSGWD - real (kind=kind_phys), pointer :: dv_osscol(:) => null() !< instantaneous sfc v-momentum flux from SSGWD - real (kind=kind_phys), pointer :: du_ofdcol(:) => null() !< instantaneous sfc u-momentum flux from TOFD - real (kind=kind_phys), pointer :: dv_ofdcol(:) => null() !< instantaneous sfc v-momentum flux from TOFD - real (kind=kind_phys), pointer :: du3_ogwcol(:) => null() !< time-averaged sfc u-momentum flux from OGW - real (kind=kind_phys), pointer :: dv3_ogwcol(:) => null() !< time-averaged sfc v-momentum flux from OGW - real (kind=kind_phys), pointer :: du3_oblcol(:) => null() !< time-averaged sfc u-momentum flux from blocking - real (kind=kind_phys), pointer :: dv3_oblcol(:) => null() !< time-averaged sfc v-momentum flux from blocking - real (kind=kind_phys), pointer :: du3_osscol(:) => null() !< time-averaged sfc u-momentum flux from SSGWD - real (kind=kind_phys), pointer :: dv3_osscol(:) => null() !< time-averaged sfc v-momentum flux from SSGWD - real (kind=kind_phys), pointer :: du3_ofdcol(:) => null() !< time-averaged sfc u-momentum flux from TOFD - real (kind=kind_phys), pointer :: dv3_ofdcol(:) => null() !< time-averaged sfc v-momentum flux from TOFD + real (kind=kind_phys), allocatable :: dudt_ogw(:,:) !< + real (kind=kind_phys), allocatable :: dvdt_ogw(:,:) !< + real (kind=kind_phys), allocatable :: dudt_obl(:,:) !< + real (kind=kind_phys), allocatable :: dvdt_obl(:,:) !< + real (kind=kind_phys), allocatable :: dudt_oss(:,:) !< + real (kind=kind_phys), allocatable :: dvdt_oss(:,:) !< + real (kind=kind_phys), allocatable :: dudt_ofd(:,:) !< + real (kind=kind_phys), allocatable :: dvdt_ofd(:,:) !< + + real (kind=kind_phys), allocatable :: du_ogwcol(:) !< instantaneous sfc u-momentum flux from OGW + real (kind=kind_phys), allocatable :: dv_ogwcol(:) !< instantaneous sfc v-momentum flux from OGW + real (kind=kind_phys), allocatable :: du_oblcol(:) !< instantaneous sfc u-momentum flux from blocking + real (kind=kind_phys), allocatable :: dv_oblcol(:) !< instantaneous sfc v-momentum flux from blocking + real (kind=kind_phys), allocatable :: du_osscol(:) !< instantaneous sfc u-momentum flux from SSGWD + real (kind=kind_phys), allocatable :: dv_osscol(:) !< instantaneous sfc v-momentum flux from SSGWD + real (kind=kind_phys), allocatable :: du_ofdcol(:) !< instantaneous sfc u-momentum flux from TOFD + real (kind=kind_phys), allocatable :: dv_ofdcol(:) !< instantaneous sfc v-momentum flux from TOFD + real (kind=kind_phys), allocatable :: du3_ogwcol(:) !< time-averaged sfc u-momentum flux from OGW + real (kind=kind_phys), allocatable :: dv3_ogwcol(:) !< time-averaged sfc v-momentum flux from OGW + real (kind=kind_phys), allocatable :: du3_oblcol(:) !< time-averaged sfc u-momentum flux from blocking + real (kind=kind_phys), allocatable :: dv3_oblcol(:) !< time-averaged sfc v-momentum flux from blocking + real (kind=kind_phys), allocatable :: du3_osscol(:) !< time-averaged sfc u-momentum flux from SSGWD + real (kind=kind_phys), allocatable :: dv3_osscol(:) !< time-averaged sfc v-momentum flux from SSGWD + real (kind=kind_phys), allocatable :: du3_ofdcol(:) !< time-averaged sfc u-momentum flux from TOFD + real (kind=kind_phys), allocatable :: dv3_ofdcol(:) !< time-averaged sfc v-momentum flux from TOFD ! !---vay-2018 UGWP-diagnostics daily mean ! - real (kind=kind_phys), pointer :: dudt_tot (:,:) => null() !< daily aver GFS_phys tend for WE-U - real (kind=kind_phys), pointer :: dvdt_tot (:,:) => null() !< daily aver GFS_phys tend for SN-V - real (kind=kind_phys), pointer :: dtdt_tot (:,:) => null() !< daily aver GFS_phys tend for Temp-re + real (kind=kind_phys), allocatable :: dudt_tot (:,:) !< daily aver GFS_phys tend for WE-U + real (kind=kind_phys), allocatable :: dvdt_tot (:,:) !< daily aver GFS_phys tend for SN-V + real (kind=kind_phys), allocatable :: dtdt_tot (:,:) !< daily aver GFS_phys tend for Temp-re ! - real (kind=kind_phys), pointer :: du3dt_pbl(:,:) => null() !< daily aver GFS_phys tend for WE-U pbl - real (kind=kind_phys), pointer :: dv3dt_pbl(:,:) => null() !< daily aver GFS_phys tend for SN-V pbl - real (kind=kind_phys), pointer :: dt3dt_pbl(:,:) => null() !< daily aver GFS_phys tend for Temp pbl + real (kind=kind_phys), allocatable :: du3dt_pbl(:,:) !< daily aver GFS_phys tend for WE-U pbl + real (kind=kind_phys), allocatable :: dv3dt_pbl(:,:) !< daily aver GFS_phys tend for SN-V pbl + real (kind=kind_phys), allocatable :: dt3dt_pbl(:,:) !< daily aver GFS_phys tend for Temp pbl ! - real (kind=kind_phys), pointer :: du3dt_ogw(:,:) => null() !< daily aver GFS_phys tend for WE-U OGW + real (kind=kind_phys), allocatable :: du3dt_ogw(:,:) !< daily aver GFS_phys tend for WE-U OGW ! - real (kind=kind_phys), pointer :: ldu3dt_ogw(:,:) => null() !< time aver GFS_phys tend for WE-U OGW - real (kind=kind_phys), pointer :: ldu3dt_obl(:,:) => null() !< time aver GFS_phys tend for WE-U OBL - real (kind=kind_phys), pointer :: ldu3dt_oss(:,:) => null() !< time aver GFS_phys tend for WE-U OSS - real (kind=kind_phys), pointer :: ldu3dt_ofd(:,:) => null() !< time aver GFS_phys tend for WE-U OFD + real (kind=kind_phys), allocatable :: ldu3dt_ogw(:,:) !< time aver GFS_phys tend for WE-U OGW + real (kind=kind_phys), allocatable :: ldu3dt_obl(:,:) !< time aver GFS_phys tend for WE-U OBL + real (kind=kind_phys), allocatable :: ldu3dt_oss(:,:) !< time aver GFS_phys tend for WE-U OSS + real (kind=kind_phys), allocatable :: ldu3dt_ofd(:,:) !< time aver GFS_phys tend for WE-U OFD ! - real (kind=kind_phys), pointer :: du3dt_mtb(:,:) => null() !< daily aver GFS_phys tend for WE-U MTB + real (kind=kind_phys), allocatable :: du3dt_mtb(:,:) !< daily aver GFS_phys tend for WE-U MTB ! - real (kind=kind_phys), pointer :: du3dt_tms(:,:) => null() !< daily aver GFS_phys tend for WE-U TMS + real (kind=kind_phys), allocatable :: du3dt_tms(:,:) !< daily aver GFS_phys tend for WE-U TMS ! - real (kind=kind_phys), pointer :: du3dt_ngw(:,:) => null() !< daily aver GFS_phys tend for WE-U NGW - real (kind=kind_phys), pointer :: dv3dt_ngw(:,:) => null() !< daily aver GFS_phys tend for SN-V NGW + real (kind=kind_phys), allocatable :: du3dt_ngw(:,:) !< daily aver GFS_phys tend for WE-U NGW + real (kind=kind_phys), allocatable :: dv3dt_ngw(:,:) !< daily aver GFS_phys tend for SN-V NGW ! - real (kind=kind_phys), pointer :: dws3dt_ogw(:,:) => null() !< time aver GFS_phys tend for windspeed OGW - real (kind=kind_phys), pointer :: dws3dt_obl(:,:) => null() !< time aver GFS_phys tend for windspeed OBL - real (kind=kind_phys), pointer :: dws3dt_oss(:,:) => null() !< time aver GFS_phys tend for windspeed OSS - real (kind=kind_phys), pointer :: dws3dt_ofd(:,:) => null() !< time aver GFS_phys tend for windspeed OFD + real (kind=kind_phys), allocatable :: dws3dt_ogw(:,:) !< time aver GFS_phys tend for windspeed OGW + real (kind=kind_phys), allocatable :: dws3dt_obl(:,:) !< time aver GFS_phys tend for windspeed OBL + real (kind=kind_phys), allocatable :: dws3dt_oss(:,:) !< time aver GFS_phys tend for windspeed OSS + real (kind=kind_phys), allocatable :: dws3dt_ofd(:,:) !< time aver GFS_phys tend for windspeed OFD ! - real (kind=kind_phys), pointer :: ldu3dt_ngw(:,:) => null() !< time aver GFS_phys tend for u wind NGW - real (kind=kind_phys), pointer :: ldv3dt_ngw(:,:) => null() !< time aver GFS_phys tend for v wind NGW - real (kind=kind_phys), pointer :: ldt3dt_ngw(:,:) => null() !< time aver GFS_phys tend for temperature NGW + real (kind=kind_phys), allocatable :: ldu3dt_ngw(:,:) !< time aver GFS_phys tend for u wind NGW + real (kind=kind_phys), allocatable :: ldv3dt_ngw(:,:) !< time aver GFS_phys tend for v wind NGW + real (kind=kind_phys), allocatable :: ldt3dt_ngw(:,:) !< time aver GFS_phys tend for temperature NGW ! !--- Instantaneous UGWP-diagnostics 16-variables ! Diag%gwp_ax, Diag%gwp_axo, Diag%gwp_axc, Diag%gwp_axf, & @@ -2057,55 +2057,55 @@ module GFS_typedefs ! Diag%gwp_dcheat, Diag%gwp_precip, Diag%gwp_klevs, & ! Diag%gwp_scheat - real (kind=kind_phys), pointer :: gwp_scheat(:,:) => null() ! instant shal-conv heat tendency - real (kind=kind_phys), pointer :: gwp_dcheat(:,:) => null() ! instant deep-conv heat tendency - real (kind=kind_phys), pointer :: gwp_precip(:) => null() ! total precip rates - integer , pointer :: gwp_klevs(:,:) => null() ! instant levels for GW-launches - real (kind=kind_phys), pointer :: gwp_fgf(:) => null() ! fgf triggers - real (kind=kind_phys), pointer :: gwp_okw(:) => null() ! okw triggers - - real (kind=kind_phys), pointer :: gwp_ax(:,:) => null() ! instant total UGWP tend m/s/s EW - real (kind=kind_phys), pointer :: gwp_ay(:,:) => null() ! instant total UGWP tend m/s/s NS - real (kind=kind_phys), pointer :: gwp_dtdt(:,:) => null() ! instant total heat tend K/s - real (kind=kind_phys), pointer :: gwp_kdis(:,:) => null() ! instant total eddy mixing m2/s - real (kind=kind_phys), pointer :: gwp_axc(:,:) => null() ! instant con-UGWP tend m/s/s EW - real (kind=kind_phys), pointer :: gwp_ayc(:,:) => null() ! instant con-UGWP tend m/s/s NS - real (kind=kind_phys), pointer :: gwp_axo(:,:) => null() ! instant oro-UGWP tend m/s/s EW - real (kind=kind_phys), pointer :: gwp_ayo(:,:) => null() ! instant oro-UGWP tend m/s/s NS - real (kind=kind_phys), pointer :: gwp_axf(:,:) => null() ! instant jet-UGWP tend m/s/s EW - real (kind=kind_phys), pointer :: gwp_ayf(:,:) => null() ! instant jet-UGWP tend m/s/s NS - - real (kind=kind_phys), pointer :: uav_ugwp(:,:) => null() ! aver wind UAV from physics - real (kind=kind_phys), pointer :: tav_ugwp(:,:) => null() ! aver temp UAV from physics - real (kind=kind_phys), pointer :: du3dt_dyn(:,:) => null() ! U Tend-dynamics "In"-"PhysOut" + real (kind=kind_phys), allocatable :: gwp_scheat(:,:) ! instant shal-conv heat tendency + real (kind=kind_phys), allocatable :: gwp_dcheat(:,:) ! instant deep-conv heat tendency + real (kind=kind_phys), allocatable :: gwp_precip(:) ! total precip rates + integer , allocatable :: gwp_klevs(:,:) ! instant levels for GW-launches + real (kind=kind_phys), allocatable :: gwp_fgf(:) ! fgf triggers + real (kind=kind_phys), allocatable :: gwp_okw(:) ! okw triggers + + real (kind=kind_phys), allocatable :: gwp_ax(:,:) ! instant total UGWP tend m/s/s EW + real (kind=kind_phys), allocatable :: gwp_ay(:,:) ! instant total UGWP tend m/s/s NS + real (kind=kind_phys), allocatable :: gwp_dtdt(:,:) ! instant total heat tend K/s + real (kind=kind_phys), allocatable :: gwp_kdis(:,:) ! instant total eddy mixing m2/s + real (kind=kind_phys), allocatable :: gwp_axc(:,:) ! instant con-UGWP tend m/s/s EW + real (kind=kind_phys), allocatable :: gwp_ayc(:,:) ! instant con-UGWP tend m/s/s NS + real (kind=kind_phys), allocatable :: gwp_axo(:,:) ! instant oro-UGWP tend m/s/s EW + real (kind=kind_phys), allocatable :: gwp_ayo(:,:) ! instant oro-UGWP tend m/s/s NS + real (kind=kind_phys), allocatable :: gwp_axf(:,:) ! instant jet-UGWP tend m/s/s EW + real (kind=kind_phys), allocatable :: gwp_ayf(:,:) ! instant jet-UGWP tend m/s/s NS + + real (kind=kind_phys), allocatable :: uav_ugwp(:,:) ! aver wind UAV from physics + real (kind=kind_phys), allocatable :: tav_ugwp(:,:) ! aver temp UAV from physics + real (kind=kind_phys), allocatable :: du3dt_dyn(:,:) ! U Tend-dynamics "In"-"PhysOut" !--- COODRE ORO diagnostics - real (kind=kind_phys), pointer :: zmtb(:) => null() ! - real (kind=kind_phys), pointer :: zogw(:) => null() ! - real (kind=kind_phys), pointer :: zlwb(:) => null() ! - real (kind=kind_phys), pointer :: tau_ogw(:) => null() ! - real (kind=kind_phys), pointer :: tau_ngw(:) => null() ! - real (kind=kind_phys), pointer :: tau_mtb(:) => null() ! - real (kind=kind_phys), pointer :: tau_tofd(:) => null() ! + real (kind=kind_phys), allocatable :: zmtb(:) ! + real (kind=kind_phys), allocatable :: zogw(:) ! + real (kind=kind_phys), allocatable :: zlwb(:) ! + real (kind=kind_phys), allocatable :: tau_ogw(:) ! + real (kind=kind_phys), allocatable :: tau_ngw(:) ! + real (kind=kind_phys), allocatable :: tau_mtb(:) ! + real (kind=kind_phys), allocatable :: tau_tofd(:) ! !---vay-2018 UGWP-diagnostics ! Diagnostic arrays for per-timestep diagnostics - real (kind=kind_phys), pointer :: old_pgr(:) => null() !< pgr at last timestep + real (kind=kind_phys), allocatable :: old_pgr(:) !< pgr at last timestep ! Extended output diagnostics for Thompson MP - real (kind=kind_phys), pointer :: thompson_ext_diag3d (:,:,:) => null() ! extended diagnostic 3d output arrays from Thompson MP + real (kind=kind_phys), allocatable :: thompson_ext_diag3d (:,:,:) ! extended diagnostic 3d output arrays from Thompson MP ! Diagnostics for coupled air quality model - real (kind=kind_phys), pointer :: aod (:) => null() !< instantaneous aerosol optical depth ( n/a ) + real (kind=kind_phys), allocatable :: aod (:) !< instantaneous aerosol optical depth ( n/a ) ! Auxiliary output arrays for debugging - real (kind=kind_phys), pointer :: aux2d(:,:) => null() !< auxiliary 2d arrays in output (for debugging) - real (kind=kind_phys), pointer :: aux3d(:,:,:)=> null() !< auxiliary 2d arrays in output (for debugging) + real (kind=kind_phys), allocatable :: aux2d(:,:) !< auxiliary 2d arrays in output (for debugging) + real (kind=kind_phys), allocatable :: aux3d(:,:,:) !< auxiliary 2d arrays in output (for debugging) !--- Lightning threat indices - real (kind=kind_phys), pointer :: ltg1_max(:) => null() ! - real (kind=kind_phys), pointer :: ltg2_max(:) => null() ! - real (kind=kind_phys), pointer :: ltg3_max(:) => null() ! + real (kind=kind_phys), allocatable :: ltg1_max(:) ! + real (kind=kind_phys), allocatable :: ltg2_max(:) ! + real (kind=kind_phys), allocatable :: ltg3_max(:) ! contains procedure :: create => diag_create @@ -2365,7 +2365,6 @@ subroutine sfcprop_create (Sfcprop, IM, Model) allocate (Sfcprop%slope_save (IM)) allocate (Sfcprop%shdmin (IM)) allocate (Sfcprop%shdmax (IM)) - allocate (Sfcprop%snoalb (IM)) allocate (Sfcprop%tg3 (IM)) allocate (Sfcprop%vfrac (IM)) allocate (Sfcprop%vtype (IM)) @@ -3003,8 +3002,8 @@ subroutine coupling_create (Coupling, IM, Model) Coupling%nlwsfci_cpl = clear_val Coupling%t2mi_cpl = clear_val Coupling%q2mi_cpl = clear_val - Coupling%oro_cpl = clear_val !< pointer to sfcprop%oro - Coupling%slmsk_cpl = clear_val !< pointer to sfcprop%slmsk + Coupling%oro_cpl = clear_val !< allocatable to sfcprop%oro + Coupling%slmsk_cpl = clear_val !< allocatable to sfcprop%slmsk endif !-- cellular automata @@ -3192,7 +3191,7 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, & integer, intent(in) :: nwat character(len=32), intent(in) :: tracer_names(:) integer, intent(in) :: tracer_types(:) - character(len=:), intent(in), dimension(:), pointer :: input_nml_file + character(len=:), intent(in), dimension(:), allocatable :: input_nml_file integer, intent(in) :: blksz(:) real(kind=kind_phys), dimension(:), intent(in) :: ak real(kind=kind_phys), dimension(:), intent(in) :: bk @@ -6981,8 +6980,8 @@ subroutine tbd_create (Tbd, IM, Model) endif !--- DFI radar forcing - nullify(Tbd%dfi_radar_tten) - nullify(Tbd%cap_suppress) + !nullify(Tbd%dfi_radar_tten) + !nullify(Tbd%cap_suppress) if(Model%num_dfi_radar>0) then allocate(Tbd%dfi_radar_tten(IM,Model%levs,Model%num_dfi_radar)) Tbd%dfi_radar_tten = -20.0 @@ -7394,9 +7393,6 @@ subroutine allocate_dtend_labels_and_causes(Model) type(GFS_control_type), intent(inout) :: Model integer :: i - allocate(Model%dtend_var_labels(Model%ntracp100)) - allocate(Model%dtend_process_labels(Model%nprocess)) - Model%dtend_var_labels(1)%name = 'unallocated' Model%dtend_var_labels(1)%desc = 'unallocated tracer' Model%dtend_var_labels(1)%unit = 'kg kg-1 s-1' diff --git a/scm/src/scm.F90 b/scm/src/scm.F90 index ba152f1c1..ea2dac1e8 100644 --- a/scm/src/scm.F90 +++ b/scm/src/scm.F90 @@ -102,15 +102,15 @@ subroutine scm_main_sub() physics%Init_parm%cdat(:) = physics%Init_parm%bdat physics%Init_parm%dt_dycore = scm_state%dt physics%Init_parm%dt_phys = scm_state%dt - physics%Init_parm%ak => scm_state%a_k - physics%Init_parm%bk => scm_state%b_k - !physics%Init_parm%xlon => scm_state%lon !rank mismatch -> why does Init_parm%xlon have 2 dimensions? - !physics%Init_parm%xlat => scm_state%lat !rank mismatch -> why does Init_parm%xlat have 2 dimensions? - !physics%Init_parm%area => scm_state%area !rank mismatch -> why does Init_parm%area have 2 dimensions? - physics%Init_parm%tracer_names => scm_state%tracer_names - physics%Init_parm%tracer_types => scm_state%tracer_types + physics%Init_parm%ak = scm_state%a_k + physics%Init_parm%bk = scm_state%b_k + !physics%Init_parm%xlon = scm_state%lon !rank mismatch -> why does Init_parm%xlon have 2 dimensions? + !physics%Init_parm%xlat = scm_state%lat !rank mismatch -> why does Init_parm%xlat have 2 dimensions? + !physics%Init_parm%area = scm_state%area !rank mismatch -> why does Init_parm%area have 2 dimensions? + physics%Init_parm%tracer_names = scm_state%tracer_names + physics%Init_parm%tracer_types = scm_state%tracer_types physics%Init_parm%fn_nml = scm_state%physics_nml - physics%Init_parm%blksz => scm_state%blksz + physics%Init_parm%blksz = scm_state%blksz physics%Init_parm%tile_num = 1 physics%Init_parm%hydrostatic = .true. physics%Init_parm%restart = .false. diff --git a/scm/src/scm_type_defs.F90 b/scm/src/scm_type_defs.F90 index df026e067..3a5ca57fe 100644 --- a/scm/src/scm_type_defs.F90 +++ b/scm/src/scm_type_defs.F90 @@ -957,13 +957,13 @@ subroutine physics_create(physics, n_columns) physics%Init_parm%dt_dycore = kind_phys_zero physics%Init_parm%dt_phys = kind_phys_zero physics%Init_parm%iau_offset = int_zero - physics%Init_parm%ak => null() - physics%Init_parm%bk => null() - physics%Init_parm%xlon => null() - physics%Init_parm%xlat => null() - physics%Init_parm%area => null() - physics%Init_parm%tracer_names => null() - physics%Init_parm%blksz => null() + physics%Init_parm%ak(:) = kind_phys_zero + physics%Init_parm%bk(:) = kind_phys_zero + physics%Init_parm%xlon(:,:) = kind_phys_zero + physics%Init_parm%xlat(:,:) = kind_phys_zero + physics%Init_parm%area(:,:) = kind_phys_zero + physics%Init_parm%tracer_names(:) = '' + physics%Init_parm%blksz = int_one physics%Init_parm%restart = .false. physics%Init_parm%hydrostatic = .true. physics%Init_parm%tile_num = int_one @@ -976,53 +976,53 @@ subroutine physics_associate(physics, scm_state) integer :: i - physics%Statein%phii => scm_state%geopotential_i - physics%Statein%prsi => scm_state%pres_i - physics%Statein%prsik => scm_state%exner_i - physics%Statein%phil => scm_state%geopotential_l - physics%Statein%prsl => scm_state%pres_l - physics%Statein%prslk => scm_state%exner_l - - physics%Statein%pgr => scm_state%pres_surf - physics%Statein%ugrs => scm_state%state_u(:,:,1) - physics%Statein%vgrs => scm_state%state_v(:,:,1) - physics%Statein%vvl => scm_state%omega - physics%Statein%tgrs => scm_state%state_T(:,:,1) - physics%Statein%qgrs => scm_state%state_tracer(:,:,:,1) + physics%Statein%phii = scm_state%geopotential_i + physics%Statein%prsi = scm_state%pres_i + physics%Statein%prsik = scm_state%exner_i + physics%Statein%phil = scm_state%geopotential_l + physics%Statein%prsl = scm_state%pres_l + physics%Statein%prslk = scm_state%exner_l + + physics%Statein%pgr = scm_state%pres_surf + physics%Statein%ugrs = scm_state%state_u(:,:,1) + physics%Statein%vgrs = scm_state%state_v(:,:,1) + physics%Statein%vvl = scm_state%omega + physics%Statein%tgrs = scm_state%state_T(:,:,1) + physics%Statein%qgrs = scm_state%state_tracer(:,:,:,1) if (.not. (scm_state%model_ics .or. scm_state%lsm_ics) .and. .not. scm_state%sfc_flux_spec) then do i =1, physics%Model%ncols if (scm_state%sfc_type(i) == 0) then - physics%Sfcprop%tsfco => scm_state%T_surf + physics%Sfcprop%tsfco = scm_state%T_surf elseif (scm_state%sfc_type(i) == 1) then - physics%Sfcprop%tsfcl => scm_state%T_surf + physics%Sfcprop%tsfcl = scm_state%T_surf elseif (scm_state%sfc_type(i) == 2) then - physics%Sfcprop%tisfc => scm_state%T_surf + physics%Sfcprop%tisfc = scm_state%T_surf end if end do end if if (scm_state%sfc_flux_spec) then do i =1, physics%Model%ncols - physics%Sfcprop%tsfc => scm_state%T_surf + physics%Sfcprop%tsfc = scm_state%T_surf end do end if if(scm_state%time_scheme == 2) then - physics%Stateout%gu0 => scm_state%state_u(:,:,2) - physics%Stateout%gv0 => scm_state%state_v(:,:,2) - physics%Stateout%gt0 => scm_state%state_T(:,:,2) - physics%Stateout%gq0 => scm_state%state_tracer(:,:,:,2) + physics%Stateout%gu0 = scm_state%state_u(:,:,2) + physics%Stateout%gv0 = scm_state%state_v(:,:,2) + physics%Stateout%gt0 = scm_state%state_T(:,:,2) + physics%Stateout%gq0 = scm_state%state_tracer(:,:,:,2) else - physics%Stateout%gu0 => scm_state%state_u(:,:,1) - physics%Stateout%gv0 => scm_state%state_v(:,:,1) - physics%Stateout%gt0 => scm_state%state_T(:,:,1) - physics%Stateout%gq0 => scm_state%state_tracer(:,:,:,1) + physics%Stateout%gu0 = scm_state%state_u(:,:,1) + physics%Stateout%gv0 = scm_state%state_v(:,:,1) + physics%Stateout%gt0 = scm_state%state_T(:,:,1) + physics%Stateout%gq0 = scm_state%state_tracer(:,:,:,1) endif if(scm_state%sfc_flux_spec) then - physics%Sfcprop%spec_sh_flux => scm_state%sh_flux - physics%Sfcprop%spec_lh_flux => scm_state%lh_flux + physics%Sfcprop%spec_sh_flux = scm_state%sh_flux + physics%Sfcprop%spec_lh_flux = scm_state%lh_flux endif end subroutine physics_associate @@ -1197,12 +1197,12 @@ subroutine physics_set(physics, scm_input, scm_state) else physics%Sfcprop%slmsk(i) = scm_state%sfc_type(i) ! tsfco is already pointing to T_surf forcing in physics_associate - ! physics%Sfcprop%tsfco(i) => scm_state%T_surf + ! physics%Sfcprop%tsfco(i) = scm_state%T_surf physics%Sfcprop%zorl(i) = scm_state%sfc_roughness_length_cm(i) ! tisfc is already pointing to T_surf forcing in physics_associate - ! physics%Sfcprop%tisfc(i) => scm_state%T_surf + ! physics%Sfcprop%tisfc(i) = scm_state%T_surf ! tsfcl is already pointing to T_surf forcing in physics_associate - ! physics%Sfcprop%tsfcl(i) => scm_state%T_surf + ! physics%Sfcprop%tsfcl(i) = scm_state%T_surf if (physics%Sfcprop%slmsk(i) > 1.9_dp) physics%Sfcprop%fice(i) = 1.0 !needed to calculate tsfc and zorl below when model_ics == .false. if (physics%Sfcprop%slmsk(i) < 0.1_dp) physics%Sfcprop%oceanfrac(i) = 1.0 end if