From a9328ae948362a48e9fa5621efd71f654f425ea4 Mon Sep 17 00:00:00 2001 From: Jesse Nusbaumer Date: Thu, 9 Jan 2025 15:18:18 -0700 Subject: [PATCH 01/26] Add PUMAS directory with stub interstitial file. --- physics/MP/PUMAS/pumas_pre_main.F90 | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 physics/MP/PUMAS/pumas_pre_main.F90 diff --git a/physics/MP/PUMAS/pumas_pre_main.F90 b/physics/MP/PUMAS/pumas_pre_main.F90 new file mode 100644 index 00000000..9fb8d791 --- /dev/null +++ b/physics/MP/PUMAS/pumas_pre_main.F90 @@ -0,0 +1,21 @@ +!This is just a placeholder for the eventual CCPP +!interstitial schemes needed for the PUMAS cloud +!microphysics package. + +!The hope that there will eventually be one set of +!portable interstitials and possibly another set +!of host-specific intersititals (if needed) above +!the portable layer. + +module pumas_pre_main + + implicit none + + contains + + !Add subroutines here + !for any pre-processing + !steps needed before the core + !PUMAS calls. + +end module pumas_pre_main From e7205c387661c44434fefb771537d21a2ac45b21 Mon Sep 17 00:00:00 2001 From: Jesse Nusbaumer Date: Thu, 9 Jan 2025 15:42:50 -0700 Subject: [PATCH 02/26] Add wv_sat_methods.F90, which is needed by PUMAS. --- physics/tools/wv_sat_methods.F90 | 759 +++++++++++++++++++++++++++++++ 1 file changed, 759 insertions(+) create mode 100644 physics/tools/wv_sat_methods.F90 diff --git a/physics/tools/wv_sat_methods.F90 b/physics/tools/wv_sat_methods.F90 new file mode 100644 index 00000000..534628e7 --- /dev/null +++ b/physics/tools/wv_sat_methods.F90 @@ -0,0 +1,759 @@ +module wv_sat_methods + +! This portable module contains all CAM methods for estimating +! the saturation vapor pressure of water. +! +! wv_saturation provides CAM-specific interfaces and utilities +! based on these formulae. +! +! Typical usage of this module: +! +! Init: +! call wv_sat_methods_init(r8, , errstring) +! +! Get scheme index from a name string: +! scheme_idx = wv_sat_get_scheme_idx(scheme_name) +! if (.not. wv_sat_valid_idx(scheme_idx)) +! +! Get pressures: +! es = wv_sat_svp_water(t, scheme_idx) +! es = wv_sat_svp_ice(t, scheme_idx) +! +! Use ice/water transition range: +! es = wv_sat_svp_trice(t, ttrice, scheme_idx) +! +! Note that elemental functions cannot be pointed to, nor passed +! as arguments. If you need to do either, it is recommended to +! wrap the function so that it can be given an explicit (non- +! elemental) interface. + +use ccpp_kinds, only: r8=>kind_phys !real-type precision used by CCPP + +implicit none +private +save + +integer, parameter :: VLENS = 128 ! vector length for a GPU kernel + +real(r8) :: tmelt ! Melting point of water at 1 atm (K) +real(r8) :: h2otrip ! Triple point temperature of water (K) +real(r8) :: tboil ! Boiling point of water at 1 atm (K) + +real(r8) :: ttrice ! Ice-water transition range + +real(r8) :: epsilo ! Ice-water transition range +real(r8) :: omeps ! 1._r8 - epsilo + +! Indices representing individual schemes +integer, parameter :: Invalid_idx = -1 +integer, parameter :: GoffGratch_idx = 1 +integer, parameter :: MurphyKoop_idx = 2 +integer, parameter :: Bolton_idx = 3 + +! Index representing the current default scheme. +integer, parameter :: initial_default_idx = GoffGratch_idx +integer :: default_idx = initial_default_idx + +!$acc declare create (epsilo, tmelt, tboil, omeps, h2otrip, ttrice) + +public wv_sat_methods_init +public wv_sat_get_scheme_idx +public wv_sat_valid_idx + +public wv_sat_set_default +public wv_sat_reset_default + +public wv_sat_qsat_water, wv_sat_qsat_water_vect +public wv_sat_qsat_ice, wv_sat_qsat_ice_vect + +public wv_sat_svp_trans, wv_sat_svp_trans_vect + +! pressure -> humidity conversion +public wv_sat_svp_to_qsat, wv_sat_svp_to_qsat_vect + +! Combined qsat operations +public wv_sat_qsat_trans + +public wv_sat_svp_water, wv_sat_svp_water_vect +public wv_sat_svp_ice, wv_sat_svp_ice_vect + +contains + +!--------------------------------------------------------------------- +! ADMINISTRATIVE FUNCTIONS +!--------------------------------------------------------------------- + +! Get physical constants +subroutine wv_sat_methods_init(kind, tmelt_in, h2otrip_in, tboil_in, & + ttrice_in, epsilo_in, errstring) + integer, intent(in) :: kind + real(r8), intent(in) :: tmelt_in + real(r8), intent(in) :: h2otrip_in + real(r8), intent(in) :: tboil_in + real(r8), intent(in) :: ttrice_in + real(r8), intent(in) :: epsilo_in + character(len=*), intent(out) :: errstring + + errstring = ' ' + + if (kind /= r8) then + write(errstring,*) 'wv_sat_methods_init: ERROR: ', & + kind,' was input kind but ',r8,' is internal kind.' + return + end if + + if (ttrice_in < 0._r8) then + write(errstring,*) 'wv_sat_methods_init: ERROR: ', & + ttrice_in,' was input for ttrice, but negative range is invalid.' + return + end if + + tmelt = tmelt_in + h2otrip = h2otrip_in + tboil = tboil_in + ttrice = ttrice_in + epsilo = epsilo_in + + omeps = 1._r8 - epsilo + + !$acc update device (tmelt,h2otrip,tboil,ttrice,epsilo,omeps) + +end subroutine wv_sat_methods_init + +! Look up index by name. +pure function wv_sat_get_scheme_idx(name) result(idx) + character(len=*), intent(in) :: name + integer :: idx + + select case (name) + case("GoffGratch") + idx = GoffGratch_idx + case("MurphyKoop") + idx = MurphyKoop_idx + case("Bolton") + idx = Bolton_idx + case default + idx = Invalid_idx + end select + +end function wv_sat_get_scheme_idx + +! Check validity of an index from the above routine. +pure function wv_sat_valid_idx(idx) result(status) + integer, intent(in) :: idx + logical :: status + + status = (idx /= Invalid_idx) + +end function wv_sat_valid_idx + +! Set default scheme (otherwise, Goff & Gratch is default) +! Returns a logical representing success (.true.) or +! failure (.false.). +function wv_sat_set_default(name) result(status) + character(len=*), intent(in) :: name + logical :: status + + ! Don't want to overwrite valid default with invalid, + ! so assign to temporary and check it first. + integer :: tmp_idx + + tmp_idx = wv_sat_get_scheme_idx(name) + + status = wv_sat_valid_idx(tmp_idx) + + if (status) default_idx = tmp_idx + +end function wv_sat_set_default + +! Reset default scheme to initial value. +! The same thing can be accomplished with wv_sat_set_default; +! the real reason to provide this routine is to reset the +! module for testing purposes. +subroutine wv_sat_reset_default() + + default_idx = initial_default_idx + +end subroutine wv_sat_reset_default + +!--------------------------------------------------------------------- +! UTILITIES +!--------------------------------------------------------------------- + +! Get saturation specific humidity given pressure and SVP. +! Specific humidity is limited to range 0-1. +function wv_sat_svp_to_qsat(es, p) result(qs) + real(r8), intent(in) :: es ! SVP + real(r8), intent(in) :: p ! Current pressure. + real(r8) :: qs + + ! If pressure is less than SVP, set qs to maximum of 1. + if ( (p - es) <= 0._r8 ) then + qs = 1.0_r8 + else + qs = epsilo*es / (p - omeps*es) + end if + +end function wv_sat_svp_to_qsat + +! Get saturation specific humidity given pressure and SVP. +! Specific humidity is limited to range 0-1. +subroutine wv_sat_svp_to_qsat_vect(es, p, qs, vlen) + + integer, intent(in) :: vlen + real(r8), intent(in) :: es(vlen) ! SVP + real(r8), intent(in) :: p(vlen) ! Current pressure. + real(r8), intent(out) :: qs(vlen) + integer :: i + + ! If pressure is less than SVP, set qs to maximum of 1. + + !$acc data present (es,p,qs) + + !$acc parallel vector_length(VLENS) default(present) + !$acc loop gang vector + do i=1,vlen + if ( (p(i) - es(i)) <= 0._r8 ) then + qs(i) = 1.0_r8 + else + qs(i) = epsilo*es(i) / (p(i) - omeps*es(i)) + end if + end do + !$acc end parallel + + !$acc end data +end subroutine wv_sat_svp_to_qsat_vect + +subroutine wv_sat_qsat_water(t, p, es, qs, idx) + !------------------------------------------------------------------! + ! Purpose: ! + ! Calculate SVP over water at a given temperature, and then ! + ! calculate and return saturation specific humidity. ! + !------------------------------------------------------------------! + + ! Inputs + real(r8), intent(in) :: t ! Temperature + real(r8), intent(in) :: p ! Pressure + ! Outputs + real(r8), intent(out) :: es ! Saturation vapor pressure + real(r8), intent(out) :: qs ! Saturation specific humidity + + integer, intent(in), optional :: idx ! Scheme index + + es = wv_sat_svp_water(t, idx) + + qs = wv_sat_svp_to_qsat(es, p) + + ! Ensures returned es is consistent with limiters on qs. + es = min(es, p) + +end subroutine wv_sat_qsat_water + +subroutine wv_sat_qsat_water_vect(t, p, es, qs, vlen, idx) + !------------------------------------------------------------------! + ! Purpose: ! + ! Calculate SVP over water at a given temperature, and then ! + ! calculate and return saturation specific humidity. ! + !------------------------------------------------------------------! + ! Inputs + + integer, intent(in) :: vlen + real(r8), intent(in) :: t(vlen) ! Temperature + real(r8), intent(in) :: p(vlen) ! Pressure + ! Outputs + real(r8), intent(out) :: es(vlen) ! Saturation vapor pressure + real(r8), intent(out) :: qs(vlen) ! Saturation specific humidity + + integer, intent(in), optional :: idx ! Scheme index + integer :: i + + !$acc data present (t,p,es,qs) + + call wv_sat_svp_water_vect(t, es, vlen, idx) + call wv_sat_svp_to_qsat_vect(es, p, qs, vlen) + + !$acc parallel vector_length(VLENS) default(present) + !$acc loop gang vector + do i=1,vlen + ! Ensures returned es is consistent with limiters on qs. + es(i) = min(es(i), p(i)) + enddo + !$acc end parallel + + !$acc end data +end subroutine wv_sat_qsat_water_vect + +subroutine wv_sat_qsat_ice(t, p, es, qs, idx) + !------------------------------------------------------------------! + ! Purpose: ! + ! Calculate SVP over ice at a given temperature, and then ! + ! calculate and return saturation specific humidity. ! + !------------------------------------------------------------------! + + ! Inputs + real(r8), intent(in) :: t ! Temperature + real(r8), intent(in) :: p ! Pressure + ! Outputs + real(r8), intent(out) :: es ! Saturation vapor pressure + real(r8), intent(out) :: qs ! Saturation specific humidity + + integer, intent(in), optional :: idx ! Scheme index + + es = wv_sat_svp_ice(t, idx) + + qs = wv_sat_svp_to_qsat(es, p) + + ! Ensures returned es is consistent with limiters on qs. + es = min(es, p) + +end subroutine wv_sat_qsat_ice + +subroutine wv_sat_qsat_ice_vect(t, p, es, qs, vlen, idx) + !------------------------------------------------------------------! + ! Purpose: ! + ! Calculate SVP over ice at a given temperature, and then ! + ! calculate and return saturation specific humidity. ! + !------------------------------------------------------------------! + ! Inputs + + integer, intent(in) :: vlen + real(r8), intent(in) :: t(vlen) ! Temperature + real(r8), intent(in) :: p(vlen) ! Pressure + ! Outputs + real(r8), intent(out) :: es(vlen) ! Saturation vapor pressure + real(r8), intent(out) :: qs(vlen) ! Saturation specific humidity + + integer, intent(in), optional :: idx ! Scheme index + integer :: i + + !$acc data present (t,p,es,qs) + + call wv_sat_svp_ice_vect(t, es, vlen, idx) + call wv_sat_svp_to_qsat_vect(es, p, qs, vlen) + + !$acc parallel vector_length(VLENS) default(present) + !$acc loop gang vector + do i=1,vlen + ! Ensures returned es is consistent with limiters on qs. + es(i) = min(es(i), p(i)) + enddo + !$acc end parallel + + !$acc end data +end subroutine wv_sat_qsat_ice_vect + +subroutine wv_sat_qsat_trans(t, p, es, qs, idx) + !------------------------------------------------------------------! + ! Purpose: ! + ! Calculate SVP over ice at a given temperature, and then ! + ! calculate and return saturation specific humidity. ! + !------------------------------------------------------------------! + + ! Inputs + real(r8), intent(in) :: t ! Temperature + real(r8), intent(in) :: p ! Pressure + ! Outputs + real(r8), intent(out) :: es ! Saturation vapor pressure + real(r8), intent(out) :: qs ! Saturation specific humidity + + integer, intent(in), optional :: idx ! Scheme index + + es = wv_sat_svp_trans(t, idx) + + qs = wv_sat_svp_to_qsat(es, p) + + ! Ensures returned es is consistent with limiters on qs. + es = min(es, p) + +end subroutine wv_sat_qsat_trans + +!--------------------------------------------------------------------- +! SVP INTERFACE FUNCTIONS +!--------------------------------------------------------------------- + +function wv_sat_svp_water(t, idx) result(es) + real(r8), intent(in) :: t + integer, intent(in), optional :: idx + real(r8) :: es + + integer :: use_idx + + if (present(idx)) then + use_idx = idx + else + use_idx = default_idx + end if + + select case (use_idx) + case(GoffGratch_idx) + es = GoffGratch_svp_water(t) + case(MurphyKoop_idx) + es = MurphyKoop_svp_water(t) + case(Bolton_idx) + es = Bolton_svp_water(t) + end select + +end function wv_sat_svp_water + +subroutine wv_sat_svp_water_vect(t, es, vlen, idx) + integer, intent(in) :: vlen + real(r8), intent(in) :: t(vlen) + integer, intent(in), optional :: idx + real(r8), intent(out) :: es(vlen) + integer :: i + integer :: use_idx + + !$acc data present (t,es) + + if (present(idx)) then + use_idx = idx + else + use_idx = default_idx + end if + + select case (use_idx) + case(GoffGratch_idx) + call GoffGratch_svp_water_vect(t,es,vlen) + case(MurphyKoop_idx) + call MurphyKoop_svp_water_vect(t,es,vlen) + case(Bolton_idx) + call Bolton_svp_water_vect(t,es,vlen) + end select + + !$acc end data +end subroutine wv_sat_svp_water_vect + +function wv_sat_svp_ice(t, idx) result(es) + real(r8), intent(in) :: t + integer, intent(in), optional :: idx + real(r8) :: es + + integer :: use_idx + + if (present(idx)) then + use_idx = idx + else + use_idx = default_idx + end if + + select case (use_idx) + case(GoffGratch_idx) + es = GoffGratch_svp_ice(t) + case(MurphyKoop_idx) + es = MurphyKoop_svp_ice(t) + case(Bolton_idx) + es = Bolton_svp_water(t) + end select + +end function wv_sat_svp_ice + +subroutine wv_sat_svp_ice_vect(t, es, vlen, idx) + integer, intent(in) :: vlen + real(r8), intent(in) :: t(vlen) + integer, intent(in), optional :: idx + real(r8), intent(out) :: es(vlen) + integer :: i + + integer :: use_idx + + !$acc data present (t,es) + + if (present(idx)) then + use_idx = idx + else + use_idx = default_idx + end if + + select case (use_idx) + case(GoffGratch_idx) + call GoffGratch_svp_ice_vect(t,es,vlen) + case(MurphyKoop_idx) + call MurphyKoop_svp_ice_vect(t,es,vlen) + case(Bolton_idx) + call Bolton_svp_water_vect(t,es,vlen) + end select + + !$acc end data +end subroutine wv_sat_svp_ice_vect + +function wv_sat_svp_trans(t, idx) result(es) + + real(r8), intent(in) :: t + integer, intent(in), optional :: idx + real(r8) :: es + + real(r8) :: esice ! Saturation vapor pressure over ice + real(r8) :: weight ! Intermediate scratch variable for es transition + +! +! Water +! + if (t >= (tmelt - ttrice)) then + es = wv_sat_svp_water(t,idx) + else + es = 0.0_r8 + end if + +! +! Ice +! + if (t < tmelt) then + + esice = wv_sat_svp_ice(t,idx) + + if ( (tmelt - t) > ttrice ) then + weight = 1.0_r8 + else + weight = (tmelt - t)/ttrice + end if + + es = weight*esice + (1.0_r8 - weight)*es + end if + +end function wv_sat_svp_trans + +subroutine wv_sat_svp_trans_vect(t, es, vlen, idx) + + integer, intent(in) :: vlen + real(r8), intent(in) :: t(vlen) + integer, intent(in), optional :: idx + real(r8), intent(out) :: es(vlen) + + real(r8) :: esice(vlen) ! Saturation vapor pressure over ice + real(r8) :: weight ! Intermediate scratch variable for es transition + integer :: i + + !$acc data present (t,es) & + !$acc create (esice) + +! +! Water +! + call wv_sat_svp_water_vect(t,es,vlen,idx) + !$acc parallel vector_length(VLENS) default(present) + !$acc loop gang vector + do i = 1, vlen + if (t(i) < (tmelt - ttrice)) then + es(i) = 0.0_r8 + end if + end do + !$acc end parallel +! +! Ice +! + call wv_sat_svp_ice_vect(t,esice,vlen,idx) + !$acc parallel vector_length(VLENS) default(present) + !$acc loop gang vector + do i = 1, vlen + if (t(i) < tmelt) then + if ( (tmelt - t(i)) > ttrice ) then + weight = 1.0_r8 + else + weight = (tmelt - t(i))/ttrice + end if + + es(i) = weight*esice(i) + (1.0_r8 - weight)*es(i) + end if + end do + !$acc end parallel + + !$acc end data +end subroutine wv_sat_svp_trans_vect + +!--------------------------------------------------------------------- +! SVP METHODS +!--------------------------------------------------------------------- + +! Goff & Gratch (1946) + +function GoffGratch_svp_water(t) result(es) + real(r8), intent(in) :: t ! Temperature in Kelvin + real(r8) :: es ! SVP in Pa + + ! uncertain below -70 C + es = 10._r8**(-7.90298_r8*(tboil/t-1._r8)+ & + 5.02808_r8*log10(tboil/t)- & + 1.3816e-7_r8*(10._r8**(11.344_r8*(1._r8-t/tboil))-1._r8)+ & + 8.1328e-3_r8*(10._r8**(-3.49149_r8*(tboil/t-1._r8))-1._r8)+ & + log10(1013.246_r8))*100._r8 + +end function GoffGratch_svp_water + +subroutine GoffGratch_svp_water_vect(t, es, vlen) + integer, intent(in) :: vlen + real(r8), intent(in) :: t(vlen) ! Temperature in Kelvin + real(r8), intent(out) :: es(vlen) ! SVP in Pa + real(r8) :: log_tboil + integer :: i + + !$acc data present (t,es) + + ! Goff, J. A., and S. Gratch. “Low-Pressure Properties of Water from -160F + ! to 212F.” Trans. Am. Soc. Heat. Vent. Eng. 52 (1946): 95–121. + ! uncertain below -70 C + + log_tboil = log10(tboil) + + !$acc parallel vector_length(VLENS) default(present) + !$acc loop gang vector + do i=1,vlen + es(i) = 10._r8**(-7.90298_r8*(tboil/t(i)-1._r8)+ & + 5.02808_r8*(log_tboil-log10(t(i)))- & + 1.3816e-7_r8*(10._r8**(11.344_r8*(1._r8-t(i)/tboil))-1._r8)+ & + 8.1328e-3_r8*(10._r8**(-3.49149_r8*(tboil/t(i)-1._r8))-1._r8)+ & + log10(1013.246_r8))*100._r8 + enddo + !$acc end parallel + + !$acc end data +end subroutine GoffGratch_svp_water_vect + +function GoffGratch_svp_ice(t) result(es) + real(r8), intent(in) :: t ! Temperature in Kelvin + real(r8) :: es ! SVP in Pa + + ! good down to -100 C + es = 10._r8**(-9.09718_r8*(h2otrip/t-1._r8)-3.56654_r8* & + log10(h2otrip/t)+0.876793_r8*(1._r8-t/h2otrip)+ & + log10(6.1071_r8))*100._r8 + +end function GoffGratch_svp_ice + +subroutine GoffGratch_svp_ice_vect(t, es, vlen) + integer, intent(in) :: vlen + real(r8), intent(in) :: t(vlen) ! Temperature in Kelvin + real(r8), intent(out) :: es(vlen) ! SVP in Pa + real(r8), parameter :: log_param = log10(6.1071_r8) + integer :: i + ! good down to -100 C + + !$acc data present (t,es) + + !$acc parallel vector_length(VLENS) default(present) + !$acc loop gang vector + do i=1,vlen + es(i) = 10._r8**(-9.09718_r8*(h2otrip/t(i)-1._r8)-3.56654_r8* & + log10(h2otrip/t(i))+0.876793_r8*(1._r8-t(i)/h2otrip)+ & + log_param)*100._r8 + enddo + !$acc end parallel + + !$acc end data +end subroutine GoffGratch_svp_ice_vect + +! Murphy & Koop (2005) + +function MurphyKoop_svp_water(t) result(es) + real(r8), intent(in) :: t ! Temperature in Kelvin + real(r8) :: es ! SVP in Pa + + ! (good for 123 < T < 332 K) + es = exp(54.842763_r8 - (6763.22_r8 / t) - (4.210_r8 * log(t)) + & + (0.000367_r8 * t) + (tanh(0.0415_r8 * (t - 218.8_r8)) * & + (53.878_r8 - (1331.22_r8 / t) - (9.44523_r8 * log(t)) + & + 0.014025_r8 * t))) + +end function MurphyKoop_svp_water + +subroutine MurphyKoop_svp_water_vect(t, es, vlen) + integer, intent(in) :: vlen + real(r8), intent(in) :: t(vlen) ! Temperature in Kelvin + real(r8), intent(out) :: es(vlen) ! SVP in Pa + + integer :: i + ! Murphy, D. M., and T. Koop. “Review of the Vapour Pressure of Ice and + ! Supercooled Water for Atmospheric Applications.” Q. J. R. Meteorol. + ! Soc. 131, no. 608 (2005): 1539–65. 10.1256/qj.04.94 + ! (good for 123 < T < 332 K) + + !$acc data present (t,es) + + !$acc parallel vector_length(VLENS) default(present) + !$acc loop gang vector + do i = 1, vlen + es(i) = exp(54.842763_r8 - (6763.22_r8 / t(i)) - (4.210_r8 * log(t(i))) + & + (0.000367_r8 * t(i)) + (tanh(0.0415_r8 * (t(i) - 218.8_r8)) * & + (53.878_r8 - (1331.22_r8 / t(i)) - (9.44523_r8 * log(t(i))) + & + 0.014025_r8 * t(i)))) + end do + !$acc end parallel + + !$acc end data +end subroutine MurphyKoop_svp_water_vect + +function MurphyKoop_svp_ice(t) result(es) + real(r8), intent(in) :: t ! Temperature in Kelvin + real(r8) :: es ! SVP in Pa + + ! (good down to 110 K) + es = exp(9.550426_r8 - (5723.265_r8 / t) + (3.53068_r8 * log(t)) & + - (0.00728332_r8 * t)) + +end function MurphyKoop_svp_ice + +subroutine MurphyKoop_svp_ice_vect(t, es, vlen) + integer, intent(in) :: vlen + real(r8), intent(in) :: t(vlen) ! Temperature in Kelvin + real(r8), intent(out) :: es(vlen) ! SVP in Pa + + integer :: i + ! (good down to 110 K) + + !$acc data present (t,es) + + !$acc parallel vector_length(VLENS) default(present) + !$acc loop gang vector + do i = 1, vlen + es(i) = exp(9.550426_r8 - (5723.265_r8 / t(i)) + (3.53068_r8 * log(t(i))) & + - (0.00728332_r8 * t(i))) + end do + !$acc end parallel + + !$acc end data +end subroutine MurphyKoop_svp_ice_vect + +! Bolton (1980) +! zm_conv deep convection scheme contained this SVP calculation. +! It appears to be from D. Bolton, 1980, Monthly Weather Review. +! Unlike the other schemes, no distinct ice formula is associated +! with it. (However, a Bolton ice formula exists in CLUBB.) + +! The original formula used degrees C, but this function +! takes Kelvin and internally converts. + +function Bolton_svp_water(t) result(es) + real(r8),parameter :: c1 = 611.2_r8 + real(r8),parameter :: c2 = 17.67_r8 + real(r8),parameter :: c3 = 243.5_r8 + + real(r8), intent(in) :: t ! Temperature in Kelvin + real(r8) :: es ! SVP in Pa + + es = c1*exp( (c2*(t - tmelt))/((t - tmelt)+c3) ) + +end function Bolton_svp_water + +subroutine Bolton_svp_water_vect(t, es,vlen) + real(r8),parameter :: c1 = 611.2_r8 + real(r8),parameter :: c2 = 17.67_r8 + real(r8),parameter :: c3 = 243.5_r8 + + integer, intent(in) :: vlen + real(r8), intent(in) :: t(vlen) ! Temperature in Kelvin + real(r8), intent(out) :: es(vlen) ! SVP in Pa + + integer :: i + + !$acc data present (t,es) + + !$acc parallel vector_length(VLENS) default(present) + !$acc loop gang vector + do i = 1, vlen + es(i) = c1*exp( (c2*(t(i) - tmelt))/((t(i) - tmelt)+c3) ) + end do + !$acc end parallel + + !$acc end data +end subroutine Bolton_svp_water_vect + +end module wv_sat_methods From 8b56c47e9ca8314f94d7f6bcfc4b5b137b3ac957 Mon Sep 17 00:00:00 2001 From: Jesse Nusbaumer Date: Wed, 22 Jan 2025 14:38:04 -0700 Subject: [PATCH 03/26] Add PUMAS submodule. --- physics/MP/PUMAS/pumas | 1 + 1 file changed, 1 insertion(+) create mode 160000 physics/MP/PUMAS/pumas diff --git a/physics/MP/PUMAS/pumas b/physics/MP/PUMAS/pumas new file mode 160000 index 00000000..fb7bbedf --- /dev/null +++ b/physics/MP/PUMAS/pumas @@ -0,0 +1 @@ +Subproject commit fb7bbedfe5984d23a8a4cc7af16e78eed3d6420c From 301f43e6a736af8e08cd8d8cdbad04f85d50e38c Mon Sep 17 00:00:00 2001 From: Jesse Nusbaumer Date: Thu, 30 Jan 2025 10:19:24 -0700 Subject: [PATCH 04/26] Add init phase and metadata file to 'pre_main' scheme. --- physics/MP/PUMAS/pumas_pre_main.F90 | 7 +++++++ physics/MP/PUMAS/pumas_pre_main.meta | 25 +++++++++++++++++++++++++ 2 files changed, 32 insertions(+) create mode 100644 physics/MP/PUMAS/pumas_pre_main.meta diff --git a/physics/MP/PUMAS/pumas_pre_main.F90 b/physics/MP/PUMAS/pumas_pre_main.F90 index 9fb8d791..dda9e6a6 100644 --- a/physics/MP/PUMAS/pumas_pre_main.F90 +++ b/physics/MP/PUMAS/pumas_pre_main.F90 @@ -18,4 +18,11 @@ module pumas_pre_main !steps needed before the core !PUMAS calls. + subroutine pumas_pre_main_init(errmsg, errcode) + + character(len=512), intent(out) :: errmsg + integer, intent(out) :: errcode + + end subroutine pumas_pre_main_init + end module pumas_pre_main diff --git a/physics/MP/PUMAS/pumas_pre_main.meta b/physics/MP/PUMAS/pumas_pre_main.meta new file mode 100644 index 00000000..a3e11139 --- /dev/null +++ b/physics/MP/PUMAS/pumas_pre_main.meta @@ -0,0 +1,25 @@ +[ccpp-table-properties] + name = pumas_pre_main + type = scheme + +[ccpp-arg-table] + name = pumas_pre_main_init + type = scheme +[ errmsg ] + standard_name = ccpp_error_message + long_name = Error message for error handling in CCPP + units = none + type = character | kind = len=512 + dimensions = () + intent = out +[ errcode ] + standard_name = ccpp_error_code + long_name = Error flag for error handling in CCPP + units = 1 + type = integer + dimensions = () + intent = out + +##################### +#End of metadata file +##################### From ece068b1fbb3c655705296deaf65254bdc9e9584 Mon Sep 17 00:00:00 2001 From: Bill Sacks Date: Thu, 30 Jan 2025 13:16:10 -0700 Subject: [PATCH 05/26] Add pumas_pre_main_namelist.xml based on micro_pumas_ccpp.meta --- physics/MP/PUMAS/pumas_pre_main_namelist.xml | 597 +++++++++++++++++++ 1 file changed, 597 insertions(+) create mode 100644 physics/MP/PUMAS/pumas_pre_main_namelist.xml diff --git a/physics/MP/PUMAS/pumas_pre_main_namelist.xml b/physics/MP/PUMAS/pumas_pre_main_namelist.xml new file mode 100644 index 00000000..aab2634d --- /dev/null +++ b/physics/MP/PUMAS/pumas_pre_main_namelist.xml @@ -0,0 +1,597 @@ + + + + + + + + microphys + micro_mg_nl + relative_humidity_threshold_for_ice_nucleation + frac + real + kind_phys + relative humidity threshold parameter for nucleating ice for MG microphysics + + + 0 + + + + + microphys + micro_mg_nl + flag_for_hail_instead_of_graupel + flag + logical + flag for hail for MG microphysics (graupel possible if false) + + + .false. + + + + + microphys + micro_mg_nl + flag_for_graupel_instead_of_hail + flag + logical + flag for graupel for MG microphysics (hail possible if false) + + + .false. + + + + + microphys + micro_mg_nl + flag_for_uniform_subcolumns + flag + logical + flag for uniform subcolumns for MG microphysics + + + .false. + + + + + microphys + micro_mg_nl + flag_for_cloud_ice_processes + flag + logical + flag for cloud ice processes for MG microphysics + + + .false. + + + + + microphys + micro_mg_nl + flag_for_heterogeneous_ice_nucleation + flag + logical + flag for heterogeneous freezing for MG microphysics + + + .false. + + + + + microphys + micro_mg_nl + flag_for_allowance_of_supersaturation_after_sedimentation + flag + logical + allow supersaturation after sedimentation for MG microphysics + + + .false. + + + + + microphys + micro_mg_nl + flag_for_no_evaporation_of_precipitation + flag + logical + true for sedimenting condensate does not evaporate for MG microphysics + + + .false. + + + + + microphys + micro_mg_nl + flag_to_remove_threshold_for_ice_nucleation + flag + logical + If .true., remove RH threshold from ice nucelation calculation for MG microphysics + + + .false. + + + + + microphys + micro_mg_nl + flag_to_use_meyers_ice_nucleation + flag + logical + use temperature dependent ice nucleation from Meyers 1992 for MG microphysics + + + .false. + + + + + microphys + micro_mg_nl + flag_to_scale_evaporation_like_ifs + flag + logical + if True Apply 0.3 scaling factor to evaporation of precipitation for MG microphysics + + + .false. + + + + + microphys + micro_mg_nl + flag_use_ifs_evaporation_threshold + flag + logical + Do not evaporate precipitation until RH below 90% as done in the for MG microphysics + + + .false. + + + + + microphys + micro_mg_nl + flag_to_freeze_rain_at_0C + flag + logical + Freeze rain at 0C for MG microphysics + + + .false. + + + + + microphys + micro_mg_nl + flag_for_constant_sedimentation_fall_speed + flag + logical + Use constant sedimentation of all species for MG microphysics + + + .false. + + + + + microphys + micro_mg_nl + flag_for_fall_speed_correction + flag + logical + ensure non-zero precipitation fallspeed for MG microphysics + + + .false. + + + + + microphys + micro_mg_nl + flag_for_accretion_sees_autoconverted_condensate + flag + logical + KK200 accretion sees newely formed rain for MG microphysics + + + .false. + + + + + microphys + micro_mg_nl + do_implicit_fall_speed_calc + flag + logical + use implicit calculation for fall speed for MG microphysics + + + .false. + + + + + microphys + micro_mg_nl + flag_for_prescribed_cloud_droplet_number_concentration + flag + logical + flag for constant droplet concentration for MG microphysics + + + .false. + + + + + microphys + micro_mg_nl + flag_for_prescribed_cloud_ice_number_concentration + flag + logical + flag for constant ice concentration for MG microphysics + + + .false. + + + + + microphys + micro_mg_nl + flag_for_prescribed_graupel_number_concentration + flag + logical + flag for constant graupel concentration for MG microphysics + + + .false. + + + + + microphys + micro_mg_nl + flag_for_prescribed_rain_number_concentration + flag + logical + flag for constant rain concentration for MG microphysics + + + .false. + + + + + microphys + micro_mg_nl + flag_for_prescribed_snow_number_concentration + flag + logical + flag for constant snow concentration for MG microphysics + + + .false. + + + + + microphys + micro_mg_nl + control_for_precipitation_area_fraction_method + none + char*256 + type of precip fraction method for MG microphysics (in_cloud or max_overlap) + + + " " + + + + + microphys + micro_mg_nl + control_for_warm_rain_method + none + char*256 + warm rain method (KK2000,sb2001,tau,emulated) + + + " " + + + + + microphys + micro_mg_nl + filename_of_emulated_stochastic_collection_quantiles + none + char*256 + emulated stochastic collection filename for quantiles + + + " " + + + + + microphys + micro_mg_nl + filename_of_emulated_stochastic_collection_input_scalings + none + char*256 + emulated stochastic collection filename for input scaling + + + " " + + + + + microphys + micro_mg_nl + filename_of_emulated_stochastic_collection_output_scalings + none + char*256 + emulated stochastic collection filename for output scaling + + + " " + + + + + microphys + micro_mg_nl + autoconverion_to_snow_size_threshold + um + real + kind_phys + autoconversion size threshold for cloud ice to snow for MG microphysics + + + 0 + + + + + microphys + micro_mg_nl + bergeron_findeisen_process_efficiency_factor + frac + real + kind_phys + bergeron efficiency factor for MG microphysics + + + 0 + + + + + microphys + micro_mg_nl + accretion_enhancement_factor + none + real + kind_phys + KK2000 accretion enhancement factor for MG microphysics + + + 0 + + + + + microphys + micro_mg_nl + autconversion_enhancement_factor + none + real + kind_phys + KK2000 autonconverion enhancement factor for MG microphysics + + + 0 + + + + + microphys + micro_mg_nl + autconversion_nd_exponent + none + real + kind_phys + KK2000 autonconverion nd exponent in MG microphysics + + + 0 + + + + + microphys + micro_mg_nl + autconversion_lwp_exponent + none + real + kind_phys + KK2000 autonconverion lwp (qc) exponent in MG microphysics + + + 0 + + + + + microphys + micro_mg_nl + homogeneous_freezing_radius + m + real + kind_phys + radius of drops homogeneously frozen in MG microphysics + + + 0 + + + + + microphys + micro_mg_nl + scaling_factor_for_ice_fall_speed + 1 + real + kind_phys + scaling factor for cloud ice fall speed in MG microphysics + + + 0 + + + + + microphys + micro_mg_nl + scaling_factor_for_snow_fall_speed + 1 + real + kind_phys + scaling factor for snow fall speed in MG microphysics + + + 0 + + + + + microphys + micro_mg_nl + scaling_factor_for_ice_in_radiation + 1 + real + kind_phys + scaling factor for ice effective radition used by radiation + + + 0 + + + + + microphys + micro_mg_nl + scaling_factor_for_ice_accretion + 1 + real + kind_phys + scaling factor for ice accretion in MG microphysics + + + 0 + + + + + microphys + micro_mg_nl + maximum_ice_number_concentration + m-3 + real + kind_phys + maximum allowed ice number concentration for MG microphysics + + + 0 + + + + + microphys + micro_mg_nl + prescribed_cloud_droplet_number_concentration + m-3 + real + kind_phys + droplet concentration constant for MG microphysics + + + 0 + + + + + microphys + micro_mg_nl + prescribed_cloud_ice_number_concentration + m-3 + real + kind_phys + ice concentration constant for MG microphysics + + + 0 + + + + + microphys + micro_mg_nl + prescribed_graupel_number_concentration + m-3 + real + kind_phys + graupel concentration constant for MG microphysics + + + 0 + + + + + microphys + micro_mg_nl + prescribed_rain_number_concentration + m-3 + real + kind_phys + rain concentration constant for MG microphysics + + + 0 + + + + + microphys + micro_mg_nl + prescribed_snow_number_concentration + m-3 + real + kind_phys + snow concentration constant for MG microphysics + + + 0 + + + + \ No newline at end of file From 659327a8287cda8a3806153bb9641d2cb77eea69 Mon Sep 17 00:00:00 2001 From: peverwhee Date: Thu, 30 Jan 2025 15:13:15 -0700 Subject: [PATCH 06/26] add pre and post dimension mapping schemes --- .../micro_pumas_ccpp_dimensions_post.F90 | 427 ++++++ .../micro_pumas_ccpp_dimensions_post.meta | 1189 +++++++++++++++++ .../PUMAS/micro_pumas_ccpp_dimensions_pre.F90 | 193 +++ .../micro_pumas_ccpp_dimensions_pre.meta | 569 ++++++++ physics/MP/PUMAS/pumas_pre_main.F90 | 2 + 5 files changed, 2380 insertions(+) create mode 100644 physics/MP/PUMAS/micro_pumas_ccpp_dimensions_post.F90 create mode 100644 physics/MP/PUMAS/micro_pumas_ccpp_dimensions_post.meta create mode 100644 physics/MP/PUMAS/micro_pumas_ccpp_dimensions_pre.F90 create mode 100644 physics/MP/PUMAS/micro_pumas_ccpp_dimensions_pre.meta diff --git a/physics/MP/PUMAS/micro_pumas_ccpp_dimensions_post.F90 b/physics/MP/PUMAS/micro_pumas_ccpp_dimensions_post.F90 new file mode 100644 index 00000000..b7473aed --- /dev/null +++ b/physics/MP/PUMAS/micro_pumas_ccpp_dimensions_post.F90 @@ -0,0 +1,427 @@ +module micro_pumas_ccpp_dimensions_post + use ccpp_kinds, only: kind_phys +! This will be replaced by subcolumn averaging when subcolumns are enabled + + public :: micro_pumas_ccpp_dimensions_post_run + +contains + !> \section arg_table_micro_pumas_ccpp_dimensions_post_run Argument Table + !! \htmlinclude micro_pumas_ccpp_dimensions_post_run.html + subroutine micro_pumas_ccpp_dimensions_post_run(ncol, micro_ncol, nlev, micro_nlev, & + nlevp1, micro_nlevp1, qcsinksum_rate1ord, micro_qcsinksum_rate1ord, airT_tend, & + micro_airT_tend, airq_tend, micro_airq_tend, & + cldliq_tend, micro_cldliq_tend, cldice_tend, micro_cldice_tend, numliq_tend, & + micro_numliq_tend, numice_tend, micro_numice_tend, rainliq_tend, micro_rainliq_tend, & + snowice_tend, micro_snowice_tend, numrain_tend, micro_numrain_tend, numsnow_tend, & + micro_numsnow_tend, graupice_tend, micro_graupice_tend, numgraup_tend, & + micro_numgraup_tend, effc, micro_effc, effc_fn, micro_effc_fn, effi, micro_effi, & + sadice, micro_sadice, sadsnow, micro_sadsnow, prect, micro_prect, preci, micro_preci,& + prec_evap, micro_prec_evap, am_evap_st, micro_am_evap_st, prec_prod, micro_prec_prod,& + cmeice, micro_cmeice, deffi, micro_deffi, pgamrad, micro_pgamrad, lamcrad, & + micro_lamcrad, snowice_in_prec, micro_snowice_in_prec, scaled_diam_snow, & + micro_scaled_diam_snow, graupice_in_prec, micro_graupice_in_prec, & + numgraup_vol_in_prec, micro_numgraup_vol_in_prec, scaled_diam_graup, & + micro_scaled_diam_graup, lflx, micro_lflx, iflx, micro_iflx, gflx, micro_gflx, rflx, & + micro_rflx, sflx, micro_sflx, rainliq_in_prec, micro_rainliq_in_prec, reff_rain, & + micro_reff_rain, reff_snow, micro_reff_snow, reff_grau, micro_reff_grau, & + numrain_vol_in_prec, micro_numrain_vol_in_prec, numsnow_vol_in_prec, & + micro_numsnow_vol_in_prec, refl, micro_refl, arefl, micro_arefl, areflz, micro_areflz,& + frefl, micro_frefl, csrfl, micro_csrfl, acsrfl, micro_acsrfl, fcsrfl, micro_fcsrfl, & + refl10cm, micro_refl10cm, reflz10cm, micro_reflz10cm, rercld, micro_rercld, ncai, & + micro_ncai, ncal, micro_ncal, rainliq, micro_rainliq, snowice, micro_snowice, & + numrain_vol, micro_numrain_vol, numsnow_vol, micro_numsnow_vol, diam_rain, & + micro_diam_rain, diam_snow, micro_diam_snow, graupice, micro_graupice, numgraup_vol, & + micro_numgraup_vol, diam_graup, micro_diam_graup, freq_graup, micro_freq_graup, & + freq_snow, micro_freq_snow, freq_rain, micro_freq_rain, frac_ice, micro_frac_ice, & + frac_cldliq_tend, micro_frac_cldliq_tend, rain_evap, micro_rain_evap, & + errmsg, errcode) + + ! horizontal dimension + integer, intent(in) :: ncol + ! microphysics_horizontal_dimension + integer, intent(in) :: micro_ncol + ! vertical layer dimension + integer, intent(in) :: nlev + ! microphysics vertical layer dimension + integer, intent(in) :: micro_nlev + ! vertical interface dimension + integer, intent(in) :: nlevp1 + ! microphysics vertical interface dimension + integer, intent(in) :: micro_nlevp1 + + !microphysics direct conversion rate of stratiform cloud water to precipitation (s-1) + real(kind_phys), intent(in) :: micro_qcsinksum_rate1ord(:, :) + !microphysics tendency of dry air enthalpy at constant pressure (J kg-1 s-1) + real(kind_phys), intent(in) :: micro_airT_tend(:, :) + !microphysics tendency of water vapor mixing ratio wrt moist air and condensed water (kg kg-1 s-1) + real(kind_phys), intent(in) :: micro_airq_tend(:, :) + !microphysics tendency of cloud liquid water mixing ratio wrt moist air and condensed water (kg kg-1 s-1) + real(kind_phys), intent(in) :: micro_cldliq_tend(:, :) + !microphysics tendency of cloud ice mixing ratio wrt moist air and condensed water (kg kg-1 s-1) + real(kind_phys), intent(in) :: micro_cldice_tend(:, :) + !microphysics tendency of mass number concentration of cloud liquid water wrt moist air and condensed water (kg-1 s-1) + real(kind_phys), intent(in) :: micro_numliq_tend(:, :) + !microphysics tendency of mass number concentration of cloud ice wrt moist air and condensed water (kg-1 s-1) + real(kind_phys), intent(in) :: micro_numice_tend(:, :) + !microphysics tendency of rain mixing ratio wrt moist air and condensed water (kg kg-1 s-1) + real(kind_phys), intent(in) :: micro_rainliq_tend(:, :) + !microphysics tendency of snow mixing ratio wrt moist air and condensed water (kg kg-1 s-1) + real(kind_phys), intent(in) :: micro_snowice_tend(:, :) + !microphysics tendency of mass number concentration of rain wrt moist air and condensed water (kg-1 s-1) + real(kind_phys), intent(in) :: micro_numrain_tend(:, :) + !microphysics tendency of mass number concentration of snow wrt moist air and condensed water (kg-1 s-1) + real(kind_phys), intent(in) :: micro_numsnow_tend(:, :) + !microphysics tendency of graupel mixing ratio wrt moist air and condensed water (kg kg-1 s-1) + real(kind_phys), intent(in) :: micro_graupice_tend(:, :) + !microphysics tendency of mass number concentration of graupel wrt moist air and condensed water (kg-1 s-1) + real(kind_phys), intent(in) :: micro_numgraup_tend(:, :) + !microphysics effective radius of stratiform cloud liquid water particle (um) + real(kind_phys), intent(in) :: micro_effc(:, :) + !microphysics effective radius of stratiform cloud liquid water particle assuming droplet number concentration of 1e8 kg-1 (um) + real(kind_phys), intent(in) :: micro_effc_fn(:, :) + !microphysics effective radius of stratiform cloud ice particle (um) + real(kind_phys), intent(in) :: micro_effi(:, :) + !microphysics cloud ice surface area density (cm2 cm-3) + real(kind_phys), intent(in) :: micro_sadice(:, :) + !microphysics snow surface area density (cm2 cm-3) + real(kind_phys), intent(in) :: micro_sadsnow(:, :) + !microphysics LWE large scale precipitation rate at surface (m s-1) + real(kind_phys), intent(in) :: micro_prect(:) + !microphysics LWE large scale snowfall rate at surface (m s-1) + real(kind_phys), intent(in) :: micro_preci(:) + !microphysics precipitation evaporation rate wrt moist air and condensed water (kg kg-1 s-1) + real(kind_phys), intent(in) :: micro_prec_evap(:, :) + !microphysics precipitation evaporation area (fraction) + real(kind_phys), intent(in) :: micro_am_evap_st(:, :) + !microphysics precipitation production rate wrt moist air and condensed water (kg kg-1 s-1) + real(kind_phys), intent(in) :: micro_prec_prod(:, :) + !microphysics condensation minus evaporation rate of in-cloud ice wrt moist air and condensed water (kg kg-1 s-1) + real(kind_phys), intent(in) :: micro_cmeice(:, :) + !microphysics effective diameter of stratiform cloud ice particles for radiation (um) + real(kind_phys), intent(in) :: micro_deffi(:, :) + !microphysics cloud particle size distribution shape parameter (1) + real(kind_phys), intent(in) :: micro_pgamrad(:, :) + !microphysics cloud particle size distribution slope parameter (1) + real(kind_phys), intent(in) :: micro_lamcrad(:, :) + !microphysics snow mixing ratio wrt moist air and condensed water of new state in precipitating fraction of gridcell (kg kg-1) + real(kind_phys), intent(in) :: micro_snowice_in_prec(:, :) + !microphysics snow scaled diameter (m) + real(kind_phys), intent(in) :: micro_scaled_diam_snow(:, :) + !microphysics graupel mixing ratio wrt moist air and condensed water of new state in precipitating fraction of gridcell (kg kg-1) + real(kind_phys), intent(in) :: micro_graupice_in_prec(:, :) + !microphysics graupel number concentration of new state in precipitating fraction of gridcell (m-3) + real(kind_phys), intent(in) :: micro_numgraup_vol_in_prec(:, :) + !microphysics graupel scaled diameter (m) + real(kind_phys), intent(in) :: micro_scaled_diam_graup(:, :) + !microphysics cloud liquid sedimentation flux (kg m-2 s-1) + real(kind_phys), intent(in) :: micro_lflx(:, :) + !microphysics cloud ice sedimentation flux (kg m-2 s-1) + real(kind_phys), intent(in) :: micro_iflx(:, :) + !microphysics graupel sedimentation flux (kg m-2 s-1) + real(kind_phys), intent(in) :: micro_gflx(:, :) + !microphysics rain sedimentation flux (kg m-2 s-1) + real(kind_phys), intent(in) :: micro_rflx(:, :) + !microphysics snow sedimentation flux (kg m-2 s-1) + real(kind_phys), intent(in) :: micro_sflx(:, :) + !microphysics rain mixing ratio wrt moist air and condensed water of new state in precipitating fraction of gridcell (kg kg-1) + real(kind_phys), intent(in) :: micro_rainliq_in_prec(:, :) + !microphysics effective radius of stratiform rain particle (um) + real(kind_phys), intent(in) :: micro_reff_rain(:, :) + !microphysics effective radius of stratiform snow particle (um) + real(kind_phys), intent(in) :: micro_reff_snow(:, :) + !microphysics effective radius of stratiform graupel particle (um) + real(kind_phys), intent(in) :: micro_reff_grau(:, :) + !microphysics rain number concentration of new state in precipitating fraction of gridcell (m-3) + real(kind_phys), intent(in) :: micro_numrain_vol_in_prec(:, :) + !microphysics snow number concentration of new state in precipitating fraction of gridcell (m-3) + real(kind_phys), intent(in) :: micro_numsnow_vol_in_prec(:, :) + !microphysics analytic radar reflectivity at 94 GHz in precipitating fraction of gridcell (dBZ) + real(kind_phys), intent(in) :: micro_refl(:, :) + !microphysics analytic radar reflectivity at 94 GHz (dBZ) + real(kind_phys), intent(in) :: micro_arefl(:, :) + !microphysics analytic radar reflectivity z factor at 94 GHz (mm6 m-3) + real(kind_phys), intent(in) :: micro_areflz(:, :) + !microphysics fraction of gridcell with nonzero radar reflectivity (fraction) + real(kind_phys), intent(in) :: micro_frefl(:, :) + !microphysics analytic radar reflectivity at 94 GHz with CloudSat thresholds in precipitating fraction of gridcell (dBZ) + real(kind_phys), intent(in) :: micro_csrfl(:, :) + !microphysics analytic radar reflectivity at 94 GHz with CloudSat thresholds (dBZ) + real(kind_phys), intent(in) :: micro_acsrfl(:, :) + !microphysics fraction of gridcell with nonzero radar reflectivity with CloudSat thresholds (fraction) + real(kind_phys), intent(in) :: micro_fcsrfl(:, :) + !microphysics analytic radar reflectivity at 10 cm wavelength (dBZ) + real(kind_phys), intent(in) :: micro_refl10cm(:, :) + !microphysics analytic radar reflectivity z factor at 10 cm wavelength (mm6 m-3) + real(kind_phys), intent(in) :: micro_reflz10cm(:, :) + !microphysics effective radius of stratiform cloud liquid plus rain particles (m) + real(kind_phys), intent(in) :: micro_rercld(:, :) + !microphysics available ice nuclei number concentration of new state (m-3) + real(kind_phys), intent(in) :: micro_ncai(:, :) + !microphysics available cloud condensation nuclei number concentration of new state (m-3) + real(kind_phys), intent(in) :: micro_ncal(:, :) + !microphysics rain mixing ratio wrt moist air and condensed water of new state (kg kg-1) + real(kind_phys), intent(in) :: micro_rainliq(:, :) + !microphysics snow mixing ratio wrt moist air and condensed water of new state (kg kg-1) + real(kind_phys), intent(in) :: micro_snowice(:, :) + !microphysics rain number concentration of new state (m-3) + real(kind_phys), intent(in) :: micro_numrain_vol(:, :) + !microphysics snow number concentration of new state in precipitating fraction of gridcell (m-3) + real(kind_phys), intent(in) :: micro_numsnow_vol(:, :) + !microphysics average diameter of stratiform rain particle (m) + real(kind_phys), intent(in) :: micro_diam_rain(:, :) + !microphysics average diameter of stratiform snow particle (m) + real(kind_phys), intent(in) :: micro_diam_snow(:, :) + !microphysics graupel mixing ratio wrt moist air and condensed water of new state (kg kg-1) + real(kind_phys), intent(in) :: micro_graupice(:, :) + !microphysics graupel number concentration of new state (m-3) + real(kind_phys), intent(in) :: micro_numgraup_vol(:, :) + !microphysics average diameter of stratiform graupel particle (m) + real(kind_phys), intent(in) :: micro_diam_graup(:, :) + !microphysics fraction of gridcell with graupel (fraction) + real(kind_phys), intent(in) :: micro_freq_graup(:, :) + !microphysics fraction of gridcell with snow (fraction) + real(kind_phys), intent(in) :: micro_freq_snow(:, :) + !microphysics fraction of gridcell with rain (fraction) + real(kind_phys), intent(in) :: micro_freq_rain(:, :) + !microphysics fraction of frozen water to total condensed water (fraction) + real(kind_phys), intent(in) :: micro_frac_ice(:, :) + !microphysics fraction of cloud liquid tendency applied to state (fraction) + real(kind_phys), intent(in) :: micro_frac_cldliq_tend(:, :) + !microphysics rain evaporation rate wrt moist air and condensed water (kg kg-1 s-1) + real(kind_phys), intent(in) :: micro_rain_evap(:, :) + + !direct conversion rate of stratiform cloud water to precipitation (s-1) + real(kind_phys), intent(out) :: qcsinksum_rate1ord(:, :) + !tendency of dry air enthalpy at constant pressure (J kg-1 s-1) + real(kind_phys), intent(out) :: airT_tend(:, :) + !tendency of water vapor mixing ratio wrt moist air and condensed water (kg kg-1 s-1) + real(kind_phys), intent(out) :: airq_tend(:, :) + !tendency of cloud liquid water mixing ratio wrt moist air and condensed water (kg kg-1 s-1) + real(kind_phys), intent(out) :: cldliq_tend(:, :) + !tendency of cloud ice mixing ratio wrt moist air and condensed water (kg kg-1 s-1) + real(kind_phys), intent(out) :: cldice_tend(:, :) + !tendency of mass number concentration of cloud liquid water wrt moist air and condensed water (kg-1 s-1) + real(kind_phys), intent(out) :: numliq_tend(:, :) + !tendency of mass number concentration of cloud ice wrt moist air and condensed water (kg-1 s-1) + real(kind_phys), intent(out) :: numice_tend(:, :) + !tendency of rain mixing ratio wrt moist air and condensed water (kg kg-1 s-1) + real(kind_phys), intent(out) :: rainliq_tend(:, :) + !tendency of snow mixing ratio wrt moist air and condensed water (kg kg-1 s-1) + real(kind_phys), intent(out) :: snowice_tend(:, :) + !tendency of mass number concentration of rain wrt moist air and condensed water (kg-1 s-1) + real(kind_phys), intent(out) :: numrain_tend(:, :) + !tendency of mass number concentration of snow wrt moist air and condensed water (kg-1 s-1) + real(kind_phys), intent(out) :: numsnow_tend(:, :) + !tendency of graupel mixing ratio wrt moist air and condensed water (kg kg-1 s-1) + real(kind_phys), intent(out) :: graupice_tend(:, :) + !tendency of mass number concentration of graupel wrt moist air and condensed water (kg-1 s-1) + real(kind_phys), intent(out) :: numgraup_tend(:, :) + !effective radius of stratiform cloud liquid water particle (um) + real(kind_phys), intent(out) :: effc(:, :) + !effective radius of stratiform cloud liquid water particle assuming droplet number concentration of 1e8 kg-1 (um) + real(kind_phys), intent(out) :: effc_fn(:, :) + !effective radius of stratiform cloud ice particle (um) + real(kind_phys), intent(out) :: effi(:, :) + !cloud ice surface area density (cm2 cm-3) + real(kind_phys), intent(out) :: sadice(:, :) + !snow surface area density (cm2 cm-3) + real(kind_phys), intent(out) :: sadsnow(:, :) + !LWE large scale precipitation rate at surface (m s-1) + real(kind_phys), intent(out) :: prect(:) + !LWE large scale snowfall rate at surface (m s-1) + real(kind_phys), intent(out) :: preci(:) + !precipitation evaporation rate wrt moist air and condensed water (kg kg-1 s-1) + real(kind_phys), intent(out) :: prec_evap(:, :) + !precipitation evaporation area (fraction) + real(kind_phys), intent(out) :: am_evap_st(:, :) + !precipitation production rate wrt moist air and condensed water (kg kg-1 s-1) + real(kind_phys), intent(out) :: prec_prod(:, :) + !condensation minus evaporation rate of in-cloud ice wrt moist air and condensed water (kg kg-1 s-1) + real(kind_phys), intent(out) :: cmeice(:, :) + !effective diameter of stratiform cloud ice particles for radiation (um) + real(kind_phys), intent(out) :: deffi(:, :) + !cloud particle size distribution shape parameter (1) + real(kind_phys), intent(out) :: pgamrad(:, :) + !cloud particle size distribution slope parameter (1) + real(kind_phys), intent(out) :: lamcrad(:, :) + !snow mixing ratio wrt moist air and condensed water of new state in precipitating fraction of gridcell (kg kg-1) + real(kind_phys), intent(out) :: snowice_in_prec(:, :) + !snow scaled diameter (m) + real(kind_phys), intent(out) :: scaled_diam_snow(:, :) + !graupel mixing ratio wrt moist air and condensed water of new state in precipitating fraction of gridcell (kg kg-1) + real(kind_phys), intent(out) :: graupice_in_prec(:, :) + !graupel number concentration of new state in precipitating fraction of gridcell (m-3) + real(kind_phys), intent(out) :: numgraup_vol_in_prec(:, :) + !graupel scaled diameter (m) + real(kind_phys), intent(out) :: scaled_diam_graup(:, :) + !cloud liquid sedimentation flux (kg m-2 s-1) + real(kind_phys), intent(out) :: lflx(:, :) + !cloud ice sedimentation flux (kg m-2 s-1) + real(kind_phys), intent(out) :: iflx(:, :) + !graupel sedimentation flux (kg m-2 s-1) + real(kind_phys), intent(out) :: gflx(:, :) + !rain sedimentation flux (kg m-2 s-1) + real(kind_phys), intent(out) :: rflx(:, :) + !snow sedimentation flux (kg m-2 s-1) + real(kind_phys), intent(out) :: sflx(:, :) + !rain mixing ratio wrt moist air and condensed water of new state in precipitating fraction of gridcell (kg kg-1) + real(kind_phys), intent(out) :: rainliq_in_prec(:, :) + !effective radius of stratiform rain particle (um) + real(kind_phys), intent(out) :: reff_rain(:, :) + !effective radius of stratiform snow particle (um) + real(kind_phys), intent(out) :: reff_snow(:, :) + !effective radius of stratiform graupel particle (um) + real(kind_phys), intent(out) :: reff_grau(:, :) + !rain number concentration of new state in precipitating fraction of gridcell (m-3) + real(kind_phys), intent(out) :: numrain_vol_in_prec(:, :) + !snow number concentration of new state in precipitating fraction of gridcell (m-3) + real(kind_phys), intent(out) :: numsnow_vol_in_prec(:, :) + !analytic radar reflectivity at 94 GHz in precipitating fraction of gridcell (dBZ) + real(kind_phys), intent(out) :: refl(:, :) + !analytic radar reflectivity at 94 GHz (dBZ) + real(kind_phys), intent(out) :: arefl(:, :) + !analytic radar reflectivity z factor at 94 GHz (mm6 m-3) + real(kind_phys), intent(out) :: areflz(:, :) + !fraction of gridcell with nonzero radar reflectivity (fraction) + real(kind_phys), intent(out) :: frefl(:, :) + !analytic radar reflectivity at 94 GHz with CloudSat thresholds in precipitating fraction of gridcell (dBZ) + real(kind_phys), intent(out) :: csrfl(:, :) + !analytic radar reflectivity at 94 GHz with CloudSat thresholds (dBZ) + real(kind_phys), intent(out) :: acsrfl(:, :) + !fraction of gridcell with nonzero radar reflectivity with CloudSat thresholds (fraction) + real(kind_phys), intent(out) :: fcsrfl(:, :) + !analytic radar reflectivity at 10 cm wavelength (dBZ) + real(kind_phys), intent(out) :: refl10cm(:, :) + !analytic radar reflectivity z factor at 10 cm wavelength (mm6 m-3) + real(kind_phys), intent(out) :: reflz10cm(:, :) + !effective radius of stratiform cloud liquid plus rain particles (m) + real(kind_phys), intent(out) :: rercld(:, :) + !available ice nuclei number concentration of new state (m-3) + real(kind_phys), intent(out) :: ncai(:, :) + !available cloud condensation nuclei number concentration of new state (m-3) + real(kind_phys), intent(out) :: ncal(:, :) + !rain mixing ratio wrt moist air and condensed water of new state (kg kg-1) + real(kind_phys), intent(out) :: rainliq(:, :) + !snow mixing ratio wrt moist air and condensed water of new state (kg kg-1) + real(kind_phys), intent(out) :: snowice(:, :) + !rain number concentration of new state (m-3) + real(kind_phys), intent(out) :: numrain_vol(:, :) + !snow number concentration of new state in precipitating fraction of gridcell (m-3) + real(kind_phys), intent(out) :: numsnow_vol(:, :) + !average diameter of stratiform rain particle (m) + real(kind_phys), intent(out) :: diam_rain(:, :) + !average diameter of stratiform snow particle (m) + real(kind_phys), intent(out) :: diam_snow(:, :) + !graupel mixing ratio wrt moist air and condensed water of new state (kg kg-1) + real(kind_phys), intent(out) :: graupice(:, :) + !graupel number concentration of new state (m-3) + real(kind_phys), intent(out) :: numgraup_vol(:, :) + !average diameter of stratiform graupel particle (m) + real(kind_phys), intent(out) :: diam_graup(:, :) + !fraction of gridcell with graupel (fraction) + real(kind_phys), intent(out) :: freq_graup(:, :) + !fraction of gridcell with snow (fraction) + real(kind_phys), intent(out) :: freq_snow(:, :) + !fraction of gridcell with rain (fraction) + real(kind_phys), intent(out) :: freq_rain(:, :) + !fraction of frozen water to total condensed water (fraction) + real(kind_phys), intent(out) :: frac_ice(:, :) + !fraction of cloud liquid tendency applied to state (fraction) + real(kind_phys), intent(out) :: frac_cldliq_tend(:, :) + !rain evaporation rate wrt moist air and condensed water (kg kg-1 s-1) + real(kind_phys), intent(out) :: rain_evap(:, :) + + character(len=512), intent(out) :: errmsg !PUMAS/CCPP error message (none) + integer, intent(out) :: errcode !CCPP error code (1) + + ! Set error variables + errcode = 0 + errmsg = '' + + ilflx(:,:micro_nlevp1) = micro_lflx(:ncol,:) + iflx(:,:micro_nlevp1) = micro_iflx(:ncol,:) + gflx(:,:micro_nlevp1) = micro_gflx(:ncol,:) + rflx(:,:micro_nlevp1) = micro_rflx(:ncol,:) + sflx(:,:micro_nlevp1) = micro_sflx(:ncol,:) + pint(:,:micro_nlevp1) = micro_pint(:ncol,:) + qcsinksum_rate1ord(:,:micro_nlev) = micro_qcsinksum_rate1ord(:ncol,:) + airT_tend(:,:micro_nlev) = micro_airT_tend(:ncol,:) + airq_tend(:,:micro_nlev) = micro_airq_tend(:ncol,:) + cldliq_tend(:,:micro_nlev) = micro_cldliq_tend(:ncol,:) + cldice_tend(:,:micro_nlev) = micro_cldice_tend(:ncol,:) + numliq_tend(:,:micro_nlev) = micro_numliq_tend(:ncol,:) + numice_tend(:,:micro_nlev) = micro_numice_tend(:ncol,:) + rainliq_tend(:,:micro_nlev) = micro_rainliq_tend(:ncol,:) + snowice_tend(:,:micro_nlev) = micro_snowice_tend(:ncol,:) + numliq_tend(:,:micro_nlev) = micro_numliq_tend(:ncol,:) + numice_tend(:,:micro_nlev) = micro_numice_tend(:ncol,:) + numrain_tend(:,:micro_nlev) = micro_numrain_tend(:ncol,:) + numsnow_tend(:,:micro_nlev) = micro_numsnow_tend(:ncol,:) + graupice_tend(:,:micro_nlev) = micro_graupice_tend(:ncol,:) + numgraup_tend(:,:micro_nlev) = micro_numgraup_tend(:ncol,:) + effc(:,:micro_nlev) = micro_effc(:ncol,:) + effc_fn(:,:micro_nlev) = micro_effc_f(:ncol,:) + effi(:,:micro_nlev) = micro_effi(:ncol,:) + sadice(:,:micro_nlev) = micro_sadice(:ncol,:) + sadsnow(:,:micro_nlev) = micro_sadsnow(:ncol,:) + prect(:) = micro_prect(:ncol) + preci(:) = micro_preci(:ncol) + prec_evap(:,:micro_nlev) = micro_prec_evap(:ncol,:) + am_evap_st(:,:micro_nlev) = micro_am_evap_st(:ncol,:) + prec_prod(:,:micro_nlev) = micro_prec_prod(:ncol,:) + cmeice(:,:micro_nlev) = micro_cmeice(:ncol,:) + deffi(:,:micro_nlev) = micro_deffi(:ncol,:) + pgamrad(:,:micro_nlev) = micro_pgamrad(:ncol,:) + lamcrad(:,:micro_nlev) = micro_lamcrad(:ncol,:) + snowice_in_prec(:,:micro_nlev) = micro_snowice_in_prec(:ncol,:) + scaled_diam_snow(:,:micro_nlev) = micro_scaled_diam_snow(:ncol,:) + graupice_in_prec(:,:micro_nlev) = micro_graupice_in_prec(:ncol,:) + numgraup_vol_in_prec(:,:micro_nlev) = micro_numgraup_vol_in_prec(:ncol,:) + scaled_diam_graup(:,:micro_nlev) = micro_scaled_diam_graup(:ncol,:) + lflx(:,:micro_nlev) = micro_lflx(:ncol,:) + iflx(:,:micro_nlev) = micro_iflx(:ncol,:) + gflx(:,:micro_nlev) = micro_gflx(:ncol,:) + rlfx(:,:micro_nlev) = micro_rflx(:ncol,:) + sflx(:,:micro_nlev) = micro_sflx(:ncol,:) + rainliq_in_prec(:,:micro_nlev) = micro_rainliq_in_prec(:ncol,:) + reff_rain(:,:micro_nlev) = micro_reff_rain(:ncol,:) + reff_snow(:,:micro_nlev) = micro_reff_snow(:ncol,:) + reff_grau(:,:micro_nlev) = micro_reff_grau(:ncol,:) + numrain_vol_in_prec(:,:micro_nlev) = micro_numrain_vol_in_prec(:ncol,:) + numsnow_vol_in_prec(:,:micro_nlev) = micro_numsnow_vol_in_prec(:ncol,:) + refl(:,:micro_nlev) = micro_refl(:ncol,:) + arefl(:,:micro_nlev) = micro_arefl(:ncol,:) + areflz(:,:micro_nlev) = micro_areflz(:ncol,:) + frefl(:,:micro_nlev) = micro_frefl(:ncol,:) + csrfl(:,:micro_nlev) = micro_csrfl(:ncol,:) + acsrfl(:,:micro_nlev) = micro_acsrfl(:ncol,:) + fcsrfl(:,:micro_nlev) = micro_fcsrfl(:ncol,:) + refl10cm(:,:micro_nlev) = micro_refl10cm(:ncol,:) + reflz10cm(:,:micro_nlev) = micro_reflz10cm(:ncol,:) + rercld(:,:micro_nlev) = micro_rercld(:ncol,:) + ncai(:,:micro_nlev) = micro_ncai(:ncol,:) + ncal(:,:micro_nlev) = micro_ncal(:ncol,:) + rainliq(:,:micro_nlev) = micro_rainliq(:ncol,:) + snowice(:,:micro_nlev) = micro_snowice(:ncol,:) + numrain_vol(:,:micro_nlev) = micro_numrain_vol(:ncol,:) + numsnow_vol(:,:micro_nlev) = micro_numsnow_vol(:ncol,:) + diam_rain(:,:micro_nlev) = micro_diam_rain(:ncol,:) + diam_snow(:,:micro_nlev) = micro_diam_snow(:ncol,:) + graupice(:,:micro_nlev) = micro_graupice(:ncol,:) + numgraup_vol(:,:micro_nlev) = micro_numgraup_vol(:ncol,:) + diam_graup(:,:micro_nlev) = micro_diam_graup(:ncol,:) + freq_graup(:,:micro_nlev) = micro_freq_graup(:ncol,:) + freq_snow(:,:micro_nlev) = micro_freq_graup(:ncol,:) + freq_rain(:,:micro_nlev) = micro_freq_rain(:ncol,:) + frac_ice(:,:micro_nlev) = micro_frac_ice(:ncol,:) + frac_cldliq_tend(:,:micro_nlev) = micro_frac_cldliq_tend(:ncol,:) + rain_evap(:,:micro_nlev) = micro_rain_evap(:ncol,:) + + + airT(ncol, nlev) + micro_airT(micro_ncol, micro_nlev) + + micro_airT(:ncol,:) = airT(:,:micro_nlev) + + end subroutine micro_pumas_ccpp_dimensions_post_run +module micro_pumas_ccpp_dimensions_post diff --git a/physics/MP/PUMAS/micro_pumas_ccpp_dimensions_post.meta b/physics/MP/PUMAS/micro_pumas_ccpp_dimensions_post.meta new file mode 100644 index 00000000..d5683f04 --- /dev/null +++ b/physics/MP/PUMAS/micro_pumas_ccpp_dimensions_post.meta @@ -0,0 +1,1189 @@ +[ccpp-table-properties] + name = micro_pumas_ccpp_dimensions_post + type = scheme +######################################################################## +[ccpp-arg-table] + name = micro_pumas_ccpp_dimensions_post_run + type = scheme + +##### Run Arguments +[ncol] + standard_name = horizontal_loop_extent + long_name = number of horizontal columns + units = count + dimensions = () + type = integer + intent = in +[micro_ncol] + #Equivalent to "horizontal_loop_extent" unless subcolumns is enabled + standard_name = microphysics_horizontal_loop_extent + long_name = number of horizontal columns used by microphysics + units = count + dimensions = () + type = integer + intent = in +[nlev] + standard_name = vertical_layer_dimension + long_name = vertical layer dimension + units = count + dimensions = () + type = integer + intent = in +[micro_nlev] + #Vertical levels from surface to highest level with tropospheric clouds + standard_name = microphysics_vertical_layer_dimension + long_name = vertical layer dimension used by microphysics + units = count + dimensions = () + type = integer + intent = in +[nlevp1] + standard_name = vertical_interface_dimension + long_name = vertical interface dimension + units = count + dimensions = () + type = integer + intent = in +[micro_nlevp1] + #Vertical interfaces from surface to highest level with tropospheric clouds + standard_name = microphysics_vertical_interface_dimension + long_name = vertical interface dimension used by microphysics + units = count + dimensions = () + type = integer + intent = in +[qcsinksum_rate1ord] + standard_name = direct_conversion_rate_of_stratiform_cloud_water_to_precipitation_for_scavenging + long_name = direct conversion rate of stratiform cloud water to precipitation + units = s-1 + dimensions = (horizontal_loop_extent, vertical_layer_dimension) + type = real + kind = kind_phys + intent = out +[micro_qcsinksum_rate1ord] + standard_name = microphysics_direct_conversion_rate_of_stratiform_cloud_water_to_precipitation_for_scavenging + long_name = microphysics direct conversion rate of stratiform cloud water to precipitation + units = s-1 + dimensions = (microphysics_horizontal_loop_extent, microphysics_vertical_layer_dimension) + type = real + kind = kind_phys + intent = in +[airT_tend] + standard_name = tendency_of_dry_air_enthalpy_at_constant_pressure + long_name = tendency of dry air enthalpy at constant pressure + units = J kg-1 s-1 + dimensions = (horizontal_loop_extent, vertical_layer_dimension) + type = real + kind = kind_phys + intent = out +[micro_airT_tend] + standard_name = microphysics_tendency_of_dry_air_enthalpy_at_constant_pressure + long_name = microphysics tendency of dry air enthalpy at constant pressure + units = J kg-1 s-1 + dimensions = (microphysics_horizontal_loop_extent, microphysics_vertical_layer_dimension) + type = real + kind = kind_phys + intent = in +[airq_tend] + standard_name = tendency_of_water_vapor_mixing_ratio_wrt_moist_air_and_condensed_water + long_name = tendency of water vapor mixing ratio wrt moist air and condensed water + units = kg kg-1 s-1 + dimensions = (horizontal_loop_extent, vertical_layer_dimension) + type = real + kind = kind_phys + intent = out +[micro_airq_tend] + standard_name = microphysics_tendency_of_water_vapor_mixing_ratio_wrt_moist_air_and_condensed_water + long_name = microphysics tendency of water vapor mixing ratio wrt moist air and condensed water + units = kg kg-1 s-1 + dimensions = (microphysics_horizontal_loop_extent, microphysics_vertical_layer_dimension) + type = real + kind = kind_phys + intent = in +[cldliq_tend] + standard_name = tendency_of_cloud_liquid_water_mixing_ratio_wrt_moist_air_and_condensed_water + long_name = tendency of cloud liquid water mixing ratio wrt moist air and condensed water + units = kg kg-1 s-1 + dimensions = (horizontal_loop_extent, vertical_layer_dimension) + type = real + kind = kind_phys + intent = out +[micro_cldliq_tend] + standard_name = microphysics_tendency_of_cloud_liquid_water_mixing_ratio_wrt_moist_air_and_condensed_water + long_name = microphysics tendency of cloud liquid water mixing ratio wrt moist air and condensed water + units = kg kg-1 s-1 + dimensions = (microphysics_horizontal_loop_extent, microphysics_vertical_layer_dimension) + type = real + kind = kind_phys + intent = in +[cldice_tend] + standard_name = tendency_of_cloud_ice_mixing_ratio_wrt_moist_air_and_condensed_water + long_name = tendency of cloud ice mixing ratio wrt moist air and condensed water + units = kg kg-1 s-1 + dimensions = (horizontal_loop_extent, vertical_layer_dimension) + type = real + kind = kind_phys + intent = out +[micro_cldice_tend] + standard_name = microphysics_tendency_of_cloud_ice_mixing_ratio_wrt_moist_air_and_condensed_water + long_name = microphysics tendency of cloud ice mixing ratio wrt moist air and condensed water + units = kg kg-1 s-1 + dimensions = (microphysics_horizontal_loop_extent, microphysics_vertical_layer_dimension) + type = real + kind = kind_phys + intent = in +[numliq_tend] + standard_name = mass_number_concentration_of_cloud_liquid_water_wrt_moist_air_and_condensed_water + long_name = mass number concentration of cloud liquid water wrt moist air and condensed water + units = kg-1 s-1 + dimensions = (horizontal_loop_extent, vertical_layer_dimension) + type = real + kind = kind_phys + intent = out +[micro_numliq_tend] + standard_name = microphysics_tendency_of_mass_number_concentration_of_cloud_liquid_water_wrt_moist_air_and_condensed_water + long_name = microphysics mass number concentration of cloud liquid water wrt moist air and condensed water + units = kg-1 s-1 + dimensions = (microphysics_horizontal_loop_extent, microphysics_vertical_layer_dimension) + type = real + kind = kind_phys + intent = in +[numice_tend] + standard_name = tendency_of_mass_number_concentration_of_cloud_ice_wrt_moist_air_and_condensed_water + long_name = mass number concentration of cloud ice wrt moist air and condensed water + units = kg-1 s-1 + dimensions = (horizontal_loop_extent, vertical_layer_dimension) + type = real + kind = kind_phys + intent = out +[micro_numice_tend] + standard_name = microphysics_tendency_of_mass_number_concentration_of_cloud_ice_wrt_moist_air_and_condensed_water + long_name = microphysics mass number concentration of cloud ice wrt moist air and condensed water + units = kg-1 s-1 + dimensions = (microphysics_horizontal_loop_extent, microphysics_vertical_layer_dimension) + type = real + kind = kind_phys + intent = in +[rainliq_tend] + standard_name = tendency_of_rain_mixing_ratio_wrt_moist_air_and_condensed_water + long_name = tendency of rain mixing ratio wrt moist air and condensed water + units = kg kg-1 s-1 + dimensions = (horizontal_loop_extent, vertical_layer_dimension) + type = real + kind = kind_phys + intent = out +[micro_rainliq_tend] + standard_name = microphysics_tendency_of_rain_mixing_ratio_wrt_moist_air_and_condensed_water + long_name = microphysics tendency of rain mixing ratio wrt moist air and condensed water + units = kg kg-1 s-1 + dimensions = (microphysics_horizontal_loop_extent, microphysics_vertical_layer_dimension) + type = real + kind = kind_phys + intent = in +[snowice_tend] + standard_name = tendency_of_snow_mixing_ratio_wrt_moist_air_and_condensed_water + long_name = tendency of rain mixing ratio wrt moist air and condensed water + units = kg kg-1 s-1 + dimensions = (horizontal_loop_extent, vertical_layer_dimension) + type = real + kind = kind_phys + intent = out +[micro_snowice_tend] + standard_name = microphysics_tendency_of_snow_mixing_ratio_wrt_moist_air_and_condensed_water + long_name = microphysics tendency of rain mixing ratio wrt moist air and condensed water + units = kg kg-1 s-1 + dimensions = (microphysics_horizontal_loop_extent, microphysics_vertical_layer_dimension) + type = real + kind = kind_phys + intent = in +[numrain_tend] + standard_name = tendency_of_mass_number_concentration_of_rain_wrt_moist_air_and_condensed_water + long_name = tendency of mass number concentration of rain wrt moist air and condensed water + units = kg-1 s-1 + dimensions = (horizontal_loop_extent, vertical_layer_dimension) + type = real + kind = kind_phys + intent = out +[micro_numrain_tend] + standard_name = microphysics_tendency_of_mass_number_concentration_of_rain_wrt_moist_air_and_condensed_water + long_name = microphysics tendency of mass number concentration of rain wrt moist air and condensed water + units = kg-1 s-1 + dimensions = (microphysics_horizontal_loop_extent, microphysics_vertical_layer_dimension) + type = real + kind = kind_phys + intent = in +[numsnow_tend] + standard_name = tendency_of_mass_number_concentration_of_snow_wrt_moist_air_and_condensed_water + long_name = tendency of mass number concentration of snow wrt moist air and condensed water + units = kg-1 s-1 + dimensions = (horizontal_loop_extent, vertical_layer_dimension) + type = real + kind = kind_phys + intent = out +[micro_numsnow_tend] + standard_name = microphysics_tendency_of_mass_number_concentration_of_snow_wrt_moist_air_and_condensed_water + long_name = microphysics tendency of mass number concentration of snow wrt moist air and condensed water + units = kg-1 s-1 + dimensions = (microphysics_horizontal_loop_extent, microphysics_vertical_layer_dimension) + type = real + kind = kind_phys + intent = in +[graupice_tend] + standard_name = tendency_of_graupel_mixing_ratio_wrt_moist_air_and_condensed_water + long_name = tendency of graupel mixing ratio wrt moist air and condensed water + units = kg kg-1 s-1 + dimensions = (horizontal_loop_extent, vertical_layer_dimension) + type = real + kind = kind_phys + intent = out +[micro_graupice_tend] + standard_name = microphysics_tendency_of_graupel_mixing_ratio_wrt_moist_air_and_condensed_water + long_name = microphysics tendency of graupel mixing ratio wrt moist air and condensed water + units = kg kg-1 s-1 + dimensions = (microphysics_horizontal_loop_extent, microphysics_vertical_layer_dimension) + type = real + kind = kind_phys + intent = in +[numgraup_tend] + standard_name = tendency_of_mass_number_concentration_of_graupel_wrt_moist_air_and_condensed_water + long_name = tendency of mass number concentration of graupel wrt moist air and condensed water + units = kg-1 s-1 + dimensions = (horizontal_loop_extent, vertical_layer_dimension) + type = real + kind = kind_phys + intent = out +[micro_numgraup_tend] + standard_name = microphysics_tendency_of_mass_number_concentration_of_graupel_wrt_moist_air_and_condensed_water + long_name = microphysics tendency of mass number concentration of graupel wrt moist air and condensed water + units = kg-1 s-1 + dimensions = (microphysics_horizontal_loop_extent, microphysics_vertical_layer_dimension) + type = real + kind = kind_phys + intent = in +[effc] + standard_name = effective_radius_of_stratiform_cloud_liquid_water_particle + long_name = effective radius of stratiform cloud liquid water particle + units = um + dimensions = (horizontal_loop_extent, vertical_layer_dimension) + type = real + kind = kind_phys + intent = out +[micro_effc] + standard_name = microphysics_effective_radius_of_stratiform_cloud_liquid_water_particle + long_name = microphysics effective radius of stratiform cloud liquid water particle + units = um + dimensions = (microphysics_horizontal_loop_extent, microphysics_vertical_layer_dimension) + type = real + kind = kind_phys + intent = in +[effc_fn] + standard_name = effective_radius_of_stratiform_cloud_liquid_water_particle_assuming_cloud_water_number_concentration_of_1e8_per_kg_air + long_name = effective radius of stratiform cloud liquid water particle assuming cloud water number concentration of 1e8 per kg air + units = um + dimensions = (horizontal_loop_extent, vertical_layer_dimension) + type = real + kind = kind_phys + intent = out +[micro_effc_fn] + standard_name = microphysics_effective_radius_of_stratiform_cloud_liquid_water_particle_assuming_cloud_water_number_concentration_of_1e8_per_kg_air + long_name = microphysics effective radius of stratiform cloud liquid water particle assuming cloud water number concentration of 1e8 per kg air + units = um + dimensions = (microphysics_horizontal_loop_extent, microphysics_vertical_layer_dimension) + type = real + kind = kind_phys + intent = in +[effi] + standard_name = effective_radius_of_stratiform_cloud_ice_particle + long_name = effective radius of stratiform cloud ice particle + units = um + dimensions = (horizontal_loop_extent, vertical_layer_dimension) + type = real + kind = kind_phys + intent = out +[micro_effi] + standard_name = microphysics_effective_radius_of_stratiform_cloud_ice_particle + long_name = microphysics effective radius of stratiform cloud ice particle + units = um + dimensions = (microphysics_horizontal_loop_extent, microphysics_vertical_layer_dimension) + type = real + kind = kind_phys + intent = in +[sadice] + standard_name = cloud_ice_surface_area_density + long_name = cloud ice surface area density + units = cm2 cm-3 + dimensions = (horizontal_loop_extent, vertical_layer_dimension) + type = real + kind = kind_phys + intent = out +[micro_sadice] + standard_name = microphysics_cloud_ice_surface_area_density + long_name = microphysics cloud ice surface area density + units = cm2 cm-3 + dimensions = (microphysics_horizontal_loop_extent, microphysics_vertical_layer_dimension) + type = real + kind = kind_phys + intent = in +[sadsnow] + standard_name = snow_surface_area_density + long_name = snow surface area density + units = cm2 cm-3 + dimensions = (horizontal_loop_extent, vertical_layer_dimension) + type = real + kind = kind_phys + intent = out +[micro_sadsnow] + standard_name = microphysics_snow_surface_area_density + long_name = microphysics snow surface area density + units = cm2 cm-3 + dimensions = (microphysics_horizontal_loop_extent, microphysics_vertical_layer_dimension) + type = real + kind = kind_phys + intent = in +[prect] + standard_name = lwe_large_scale_precipitation_rate_at_surface + long_name = LWE large scale precipitation rate at surface + units = m s-1 + dimensions = (horizontal_loop_extent) + type = real + kind = kind_phys + intent = out +[micro_prect] + standard_name = microphysics_lwe_large_scale_precipitation_rate_at_surface + long_name = microphysics LWE large scale precipitation rate at surface + units = m s-1 + dimensions = (microphysics_horizontal_loop_extent) + type = real + kind = kind_phys + intent = in +[preci] + standard_name = lwe_large_scale_snowfall_rate_at_surface + long_name = LWE large scale snowfall rate at surface + units = m s-1 + dimensions = (horizontal_loop_extent) + type = real + kind = kind_phys + intent = out +[micro_preci] + standard_name = microphysics_lwe_large_scale_snowfall_rate_at_surface + long_name = microphysics LWE large scale snowfall rate at surface + units = m s-1 + dimensions = (microphysics_horizontal_loop_extent) + type = real + kind = kind_phys + intent = in +[prec_evap] + standard_name = precipitation_evaporation_rate_wrt_moist_air_and_condensed_water + long_name = precipitation evaporation rate wrt moist air and condensed water + units = kg kg-1 s-1 + dimensions = (horizontal_loop_extent, vertical_layer_dimension) + type = real + kind = kind_phys + intent = out +[micro_prec_evap] + standard_name = microphysics_precipitation_evaporation_rate_wrt_moist_air_and_condensed_water + long_name = microphysics precipitation evaporation rate wrt moist air and condensed water + units = kg kg-1 s-1 + dimensions = (microphysics_horizontal_loop_extent, microphysics_vertical_layer_dimension) + type = real + kind = kind_phys + intent = in +[am_evap_st] + standard_name = precipitation_evaporation_area + long_name = precipitation evaporation area + units = fraction + dimensions = (horizontal_loop_extent, vertical_layer_dimension) + type = real + kind = kind_phys + intent = out +[micro_am_evap_st] + standard_name = microphysics_precipitation_evaporation_area + long_name = microphysics precipitation evaporation area + units = fraction + dimensions = (microphysics_horizontal_loop_extent, microphysics_vertical_layer_dimension) + type = real + kind = kind_phys + intent = in +[prec_prod] + standard_name = precipitation_production_rate_wrt_moist_air_and_condensed_water + long_name = precipitation production rate wrt moist air and condensed water + units = kg kg-1 s-1 + dimensions = (horizontal_loop_extent, vertical_layer_dimension) + type = real + kind = kind_phys + intent = out +[micro_prec_prod] + standard_name = microphysics_precipitation_production_rate_wrt_moist_air_and_condensed_water + long_name = microphysics precipitation production rate wrt moist air and condensed water + units = kg kg-1 s-1 + dimensions = (microphysics_horizontal_loop_extent, microphysics_vertical_layer_dimension) + type = real + kind = kind_phys + intent = in +[cmeice] + standard_name = condensation_minus_evaporation_rate_of_in_cloud_ice_wrt_moist_air_and_condensed_water + long_name = condensation minus evaporation rate of in-cloud ice wrt moist air and condensed water + units = kg kg-1 s-1 + dimensions = (horizontal_loop_extent, vertical_layer_dimension) + type = real + kind = kind_phys + intent = out +[micro_cmeice] + standard_name = microphysics_condensation_minus_evaporation_rate_of_in_cloud_ice_wrt_moist_air_and_condensed_water + long_name = microphysics condensation minus evaporation rate of in-cloud ice wrt moist air and condensed water + units = kg kg-1 s-1 + dimensions = (microphysics_horizontal_loop_extent, microphysics_vertical_layer_dimension) + type = real + kind = kind_phys + intent = in +[deffi] + standard_name = effective_diameter_of_stratiform_cloud_ice_particles_for_radiation + long_name = effective diameter of stratiform cloud ice particles for radiation + units = um + dimensions = (horizontal_loop_extent, vertical_layer_dimension) + type = real + kind = kind_phys + intent = out +[micro_deffi] + standard_name = microphysics_effective_diameter_of_stratiform_cloud_ice_particles_for_radiation + long_name = microphysics effective diameter of stratiform cloud ice particles for radiation + units = um + dimensions = (microphysics_horizontal_loop_extent, microphysics_vertical_layer_dimension) + type = real + kind = kind_phys + intent = in +[pgamrad] + standard_name = cloud_particle_size_distribution_shape_parameter + long_name = cloud particle size distribution shape (gamma) parameter + units = 1 + dimensions = (horizontal_loop_extent, vertical_layer_dimension) + type = real + kind = kind_phys + intent = out +[micro_pgamrad] + standard_name = microphysics_cloud_particle_size_distribution_shape_parameter + long_name = microphysics cloud particle size distribution shape (gamma) parameter + units = 1 + dimensions = (microphysics_horizontal_loop_extent, microphysics_vertical_layer_dimension) + type = real + kind = kind_phys + intent = in +[lamcrad] + standard_name = cloud_particle_size_distribution_slope_parameter + long_name = cloud particle size distribution slope (lambda) parameter + units = 1 + dimensions = (horizontal_loop_extent, vertical_layer_dimension) + type = real + kind = kind_phys + intent = out +[micro_lamcrad] + standard_name = microphysics_cloud_particle_size_distribution_slope_parameter + long_name = microphysics cloud particle size distribution slope (lambda) parameter + units = 1 + dimensions = (microphysics_horizontal_loop_extent, microphysics_vertical_layer_dimension) + type = real + kind = kind_phys + intent = in +[snowice_in_prec] + standard_name = snow_mixing_ratio_wrt_moist_air_and_condensed_water_of_new_state_in_precipitating_fraction_of_gridcell + long_name = snow mixing ratio wrt moist air and condensed water of new state in precipitating fraction of gridcell + units = kg kg-1 + dimensions = (horizontal_loop_extent, vertical_layer_dimension) + type = real + kind = kind_phys + intent = out +[micro_snowice_in_prec] + standard_name = microphysics_snow_mixing_ratio_wrt_moist_air_and_condensed_water_of_new_state_in_precipitating_fraction_of_gridcell + long_name = microphysics snow mixing ratio wrt moist air and condensed water of new state in precipitating fraction of gridcell + units = kg kg-1 + dimensions = (microphysics_horizontal_loop_extent, microphysics_vertical_layer_dimension) + type = real + kind = kind_phys + intent = in +[scaled_diam_snow] + standard_name = snow_scaled_diameter + long_name = snow scaled diameter + units = m + dimensions = (horizontal_loop_extent, vertical_layer_dimension) + type = real + kind = kind_phys + intent = out +[micro_scaled_diam_snow] + standard_name = microphysics_snow_scaled_diameter + long_name = microphysics snow scaled diameter + units = m + dimensions = (microphysics_horizontal_loop_extent, microphysics_vertical_layer_dimension) + type = real + kind = kind_phys + intent = in +[graupice_in_prec] + standard_name = graupel_mixing_ratio_wrt_moist_air_and_condensed_water_of_new_state_in_precipitating_fraction_of_gridcell + long_name = graupel mixing ratio wrt moist air and condensed water of new state in precipitating fraction of gridcell + units = kg kg-1 + dimensions = (horizontal_loop_extent, vertical_layer_dimension) + type = real + kind = kind_phys + intent = out +[micro_graupice_in_prec] + standard_name = microphysics_graupel_mixing_ratio_wrt_moist_air_and_condensed_water_of_new_state_in_precipitating_fraction_of_gridcell + long_name = microphysics graupel mixing ratio wrt moist air and condensed water of new state in precipitating fraction of gridcell + units = kg kg-1 + dimensions = (microphysics_horizontal_loop_extent, microphysics_vertical_layer_dimension) + type = real + kind = kind_phys + intent = in +[numgraup_vol_in_prec] + standard_name = graupel_number_concentration_of_new_state_in_precipitating_fraction_of_gridcell + long_name = graupel number concentration of new state in precipitating fraction of gridcell + units = m-3 + dimensions = (horizontal_loop_extent, vertical_layer_dimension) + type = real + kind = kind_phys + intent = out +[micro_numgraup_vol_in_prec] + standard_name = microphysics_graupel_number_concentration_of_new_state_in_precipitating_fraction_of_gridcell + long_name = microphysics graupel number concentration of new state in precipitating fraction of gridcell + units = m-3 + dimensions = (microphysics_horizontal_loop_extent, microphysics_vertical_layer_dimension) + type = real + kind = kind_phys + intent = in +[scaled_diam_graup] + standard_name = graupel_scaled_diameter + long_name = graupel diameter + units = m + dimensions = (horizontal_loop_extent, vertical_layer_dimension) + type = real + kind = kind_phys + intent = out +[micro_scaled_diam_graup] + standard_name = microphysics_graupel_scaled_diameter + long_name = microphysics graupel diameter + units = m + dimensions = (microphysics_horizontal_loop_extent, microphysics_vertical_layer_dimension) + type = real + kind = kind_phys + intent = in +[lflx] + standard_name = cloud_liquid_sedimentation_flux + long_name = cloud liquid sedimentation flux + units = kg m-2 s-1 + dimensions = (horizontal_loop_extent, vertical_interface_dimension) + type = real + kind = kind_phys + intent = out +[micro_lflx] + standard_name = microphysics_cloud_liquid_sedimentation_flux + long_name = microphysics cloud liquid sedimentation flux + units = kg m-2 s-1 + dimensions = (microphysics_horizontal_loop_extent, microphysics_vertical_interface_dimension) + type = real + kind = kind_phys + intent = in +[iflx] + standard_name = cloud_ice_sedimentation_flux + long_name = cloud ice sedimentation flux + units = kg m-2 s-1 + dimensions = (horizontal_loop_extent, vertical_interface_dimension) + type = real + kind = kind_phys + intent = out +[micro_iflx] + standard_name = microphysics_cloud_ice_sedimentation_flux + long_name = microphysics cloud ice sedimentation flux + units = kg m-2 s-1 + dimensions = (microphysics_horizontal_loop_extent, microphysics_vertical_interface_dimension) + type = real + kind = kind_phys + intent = in +[gflx] + standard_name = graupel_sedimentation_flux + long_name = graupel sedimentation flux + units = kg m-2 s-1 + dimensions = (horizontal_loop_extent, vertical_interface_dimension) + type = real + kind = kind_phys + intent = out +[micro_gflx] + standard_name = microphysics_graupel_sedimentation_flux + long_name = microphysics graupel sedimentation flux + units = kg m-2 s-1 + dimensions = (microphysics_horizontal_loop_extent, microphysics_vertical_interface_dimension) + type = real + kind = kind_phys + intent = in +[rflx] + standard_name = rain_sedimentation_flux + long_name = rain sedimentation flux + units = kg m-2 s-1 + dimensions = (horizontal_loop_extent, vertical_interface_dimension) + type = real + kind = kind_phys + intent = out +[micro_rflx] + standard_name = microphysics_rain_sedimentation_flux + long_name = microphysics rain sedimentation flux + units = kg m-2 s-1 + dimensions = (microphysics_horizontal_loop_extent, microphysics_vertical_interface_dimension) + type = real + kind = kind_phys + intent = in +[sflx] + standard_name = snow_sedimentation_flux + long_name = snow sedimentation flux + units = kg m-2 s-1 + dimensions = (horizontal_loop_extent, vertical_interface_dimension) + type = real + kind = kind_phys + intent = out +[micro_sflx] + standard_name = microphysics_snow_sedimentation_flux + long_name = microphysics snow sedimentation flux + units = kg m-2 s-1 + dimensions = (microphysics_horizontal_loop_extent, microphysics_vertical_interface_dimension) + type = real + kind = kind_phys + intent = in +[rainliq_in_prec] + standard_name = rain_mixing_ratio_wrt_moist_air_and_condensed_water_of_new_state_in_precipitating_fraction_of_gridcell + long_name = rain mixing ratio wrt moist air and condensed water of new state in precipitating fraction of gridcell + units = kg kg-1 + dimensions = (horizontal_loop_extent, vertical_layer_dimension) + type = real + kind = kind_phys + intent = out +[micro_rainliq_in_prec] + standard_name = microphysics_rain_mixing_ratio_wrt_moist_air_and_condensed_water_of_new_state_in_precipitating_fraction_of_gridcell + long_name = microphysics rain mixing ratio wrt moist air and condensed water of new state in precipitating fraction of gridcell + units = kg kg-1 + dimensions = (microphysics_horizontal_loop_extent, microphysics_vertical_layer_dimension) + type = real + kind = kind_phys + intent = in +[reff_rain] + standard_name = effective_radius_of_stratiform_rain_particle + long_name = effective radius of stratiform rain particle + units = um + dimensions = (horizontal_loop_extent, vertical_layer_dimension) + type = real + kind = kind_phys + intent = out +[micro_reff_rain] + standard_name = microphysics_effective_radius_of_stratiform_rain_particle + long_name = microphysics effective radius of stratiform rain particle + units = um + dimensions = (microphysics_horizontal_loop_extent, microphysics_vertical_layer_dimension) + type = real + kind = kind_phys + intent = in +[reff_snow] + standard_name = effective_radius_of_stratiform_snow_particle + long_name = effective radius of stratiform snow particle + units = um + dimensions = (horizontal_loop_extent, vertical_layer_dimension) + type = real + kind = kind_phys + intent = out +[micro_reff_snow] + standard_name = microphysics_effective_radius_of_stratiform_snow_particle + long_name = microphysics effective radius of stratiform snow particle + units = um + dimensions = (microphysics_horizontal_loop_extent, microphysics_vertical_layer_dimension) + type = real + kind = kind_phys + intent = in +[reff_grau] + standard_name = effective_radius_of_stratiform_graupel_particle + long_name = effective radius of stratiform graupel particle + units = um + dimensions = (horizontal_loop_extent, vertical_layer_dimension) + type = real + kind = kind_phys + intent = out +[micro_reff_grau] + standard_name = microphysics_effective_radius_of_stratiform_graupel_particle + long_name = microphysics effective radius of stratiform graupel particle + units = um + dimensions = (microphysics_horizontal_loop_extent, microphysics_vertical_layer_dimension) + type = real + kind = kind_phys + intent = in +[numrain_vol_in_prec] + standard_name = rain_number_concentration_of_new_state_in_precipitating_fraction_of_gridcell + long_name = rain number concentration of new state in precipitating fraction of gridcell + units = m-3 + dimensions = (horizontal_loop_extent, vertical_layer_dimension) + type = real + kind = kind_phys + intent = out +[micro_numrain_vol_in_prec] + standard_name = microphysics_rain_number_concentration_of_new_state_in_precipitating_fraction_of_gridcell + long_name = microphysics rain number concentration of new state in precipitating fraction of gridcell + units = m-3 + dimensions = (microphysics_horizontal_loop_extent, microphysics_vertical_layer_dimension) + type = real + kind = kind_phys + intent = in +[numsnow_vol_in_prec] + standard_name = snow_number_concentration_of_new_state_in_precipitating_fraction_of_gridcell + long_name = snow number concentration of new state in precipitating fraction of gridcell + units = m-3 + dimensions = (horizontal_loop_extent, vertical_layer_dimension) + type = real + kind = kind_phys + intent = out +[micro_numsnow_vol_in_prec] + standard_name = microphysics_snow_number_concentration_of_new_state_in_precipitating_fraction_of_gridcell + long_name = microphysics snow number concentration of new state in precipitating fraction of gridcell + units = m-3 + dimensions = (microphysics_horizontal_loop_extent, microphysics_vertical_layer_dimension) + type = real + kind = kind_phys + intent = in +[refl] + standard_name = analytic_radar_reflectivity_at_94_GHz_in_precipitating_fraction_of_gridcell + long_name = analytic radar reflectivity at 94 GHz in precipitating fraction of gridcell + units = dBZ + dimensions = (horizontal_loop_extent, vertical_layer_dimension) + type = real + kind = kind_phys + intent = out +[micro_refl] + standard_name = microphysics_analytic_radar_reflectivity_at_94_GHz_in_precipitating_fraction_of_gridcell + long_name = microphysics analytic radar reflectivity at 94 GHz in precipitating fraction of gridcell + units = dBZ + dimensions = (microphysics_horizontal_loop_extent, microphysics_vertical_layer_dimension) + type = real + kind = kind_phys + intent = in +[arefl] + standard_name = analytic_radar_reflectivity_at_94_GHz + long_name = analytic radar reflectivity at 94 GHz + units = dBZ + dimensions = (horizontal_loop_extent, vertical_layer_dimension) + type = real + kind = kind_phys + intent = out +[micro_arefl] + standard_name = microphysics_analytic_radar_reflectivity_at_94_GHz + long_name = microphysics analytic radar reflectivity at 94 GHz + units = dBZ + dimensions = (microphysics_horizontal_loop_extent, microphysics_vertical_layer_dimension) + type = real + kind = kind_phys + intent = in +[areflz] + standard_name = analytic_radar_reflectivity_z_factor_at_94_GHz + long_name = analytic radar reflectivity z factor at 94 GHz + units = mm6 m-3 + dimensions = (horizontal_loop_extent, vertical_layer_dimension) + type = real + kind = kind_phys + intent = out +[micro_areflz] + standard_name = microphysics_analytic_radar_reflectivity_z_factor_at_94_GHz + long_name = microphysics analytic radar reflectivity z factor at 94 GHz + units = mm6 m-3 + dimensions = (microphysics_horizontal_loop_extent, microphysics_vertical_layer_dimension) + type = real + kind = kind_phys + intent = in +[frefl] + standard_name = fraction_of_gridcell_with_nonzero_radar_reflectivity + long_name = fraction of gridcell with nonzero radar reflectivity + units = fraction + dimensions = (horizontal_loop_extent, vertical_layer_dimension) + type = real + kind = kind_phys + intent = out +[micro_frefl] + standard_name = microphysics_fraction_of_gridcell_with_nonzero_radar_reflectivity + long_name = microphysics fraction of gridcell with nonzero radar reflectivity + units = fraction + dimensions = (microphysics_horizontal_loop_extent, microphysics_vertical_layer_dimension) + type = real + kind = kind_phys + intent = in +[csrfl] + standard_name = analytic_radar_reflectivity_at_94_GHz_with_cloudsat_thresholds_in_precipitating_fraction_of_gridcell + long_name = analytic radar reflectivity at 94 GHz with CloudSat thresholds in precipitating fraction of gridcell + units = dBZ + dimensions = (horizontal_loop_extent, vertical_layer_dimension) + type = real + kind = kind_phys + intent = out +[micro_csrfl] + standard_name = microphysics_analytic_radar_reflectivity_at_94_GHz_with_cloudsat_thresholds_in_precipitating_fraction_of_gridcell + long_name = microphysics analytic radar reflectivity at 94 GHz with CloudSat thresholds in precipitating fraction of gridcell + units = dBZ + dimensions = (microphysics_horizontal_loop_extent, microphysics_vertical_layer_dimension) + type = real + kind = kind_phys + intent = in +[acsrfl] + standard_name = analytic_radar_reflectivity_at_94_GHz_with_cloudsat_thresholds + long_name = analytic radar reflectivity at 94 GHz with CloudSat thresholds + units = dBZ + dimensions = (horizontal_loop_extent, vertical_layer_dimension) + type = real + kind = kind_phys + intent = out +[micro_acsrfl] + standard_name = microphysics_analytic_radar_reflectivity_at_94_GHz_with_cloudsat_thresholds + long_name = microphysics analytic radar reflectivity at 94 GHz with CloudSat thresholds + units = dBZ + dimensions = (microphysics_horizontal_loop_extent, microphysics_vertical_layer_dimension) + type = real + kind = kind_phys + intent = in +[fcsrfl] + standard_name = fraction_of_gridcell_with_nonzero_radar_reflectivity_with_cloudsat_thresholds + long_name = fraction of gridcell with nonzero radar reflectivity with CloudSat thresholds + units = fraction + dimensions = (horizontal_loop_extent, vertical_layer_dimension) + type = real + kind = kind_phys + intent = out +[micro_fcsrfl] + standard_name = microphysics_fraction_of_gridcell_with_nonzero_radar_reflectivity_with_cloudsat_thresholds + long_name = microphysics fraction of gridcell with nonzero radar reflectivity with CloudSat thresholds + units = fraction + dimensions = (microphysics_horizontal_loop_extent, microphysics_vertical_layer_dimension) + type = real + kind = kind_phys + intent = in +[refl10cm] + standard_name = analytic_radar_reflectivity_at_10_cm_wavelength + long_name = analytic radar reflectivity at 10 cm wavelength + units = dBZ + dimensions = (horizontal_loop_extent, vertical_layer_dimension) + type = real + kind = kind_phys + intent = out +[micro_refl10cm] + standard_name = microphysics_analytic_radar_reflectivity_at_10_cm_wavelength + long_name = microphysics analytic radar reflectivity at 10 cm wavelength + units = dBZ + dimensions = (microphysics_horizontal_loop_extent, microphysics_vertical_layer_dimension) + type = real + kind = kind_phys + intent = in +[reflz10cm] + standard_name = analytic_radar_reflectivity_z_factor_at_10_cm_wavelength + long_name = analytic radar reflectivity z factor at 10 cm wavelength + units = mm6 m-3 + dimensions = (horizontal_loop_extent, vertical_layer_dimension) + type = real + kind = kind_phys + intent = out +[micro_reflz10cm] + standard_name = microphysics_analytic_radar_reflectivity_z_factor_at_10_cm_wavelength + long_name = microphysics analytic radar reflectivity z factor at 10 cm wavelength + units = mm6 m-3 + dimensions = (microphysics_horizontal_loop_extent, microphysics_vertical_layer_dimension) + type = real + kind = kind_phys + intent = in +[rercld] + standard_name = effective_radius_of_stratiform_cloud_liquid_plus_rain_particles + long_name = effective radius of stratiform cloud liquid plus rain particles + units = m + dimensions = (horizontal_loop_extent, vertical_layer_dimension) + type = real + kind = kind_phys + intent = out +[micro_rercld] + standard_name = microphysics_effective_radius_of_stratiform_cloud_liquid_plus_rain_particles + long_name = microphysics effective radius of stratiform cloud liquid plus rain particles + units = m + dimensions = (microphysics_horizontal_loop_extent, microphysics_vertical_layer_dimension) + type = real + kind = kind_phys + intent = in +[ncai] + standard_name = available_ice_nuclei_number_concentration_of_new_state + long_name = available ice nuclei number concentration of new state + units = m-3 + dimensions = (horizontal_loop_extent, vertical_layer_dimension) + type = real + kind = kind_phys + intent = out +[micro_ncai] + standard_name = microphysics_available_ice_nuclei_number_concentration_of_new_state + long_name = microphysics available ice nuclei number concentration of new state + units = m-3 + dimensions = (microphysics_horizontal_loop_extent, microphysics_vertical_layer_dimension) + type = real + kind = kind_phys + intent = in +[ncal] + standard_name = available_cloud_condensation_nuclei_number_concentration_of_new_state + long_name = available cloud condensation nuclei number concentration of new state + units = m-3 + dimensions = (horizontal_loop_extent, vertical_layer_dimension) + type = real + kind = kind_phys + intent = out +[micro_ncal] + standard_name = microphysics_available_cloud_condensation_nuclei_number_concentration_of_new_state + long_name = microphysics available cloud condensation nuclei number concentration of new state + units = m-3 + dimensions = (microphysics_horizontal_loop_extent, microphysics_vertical_layer_dimension) + type = real + kind = kind_phys + intent = in +[rainliq] + standard_name = rain_mixing_ratio_wrt_moist_air_and_condensed_water_of_new_state + long_name = rain mixing ratio wrt moist air and condensed water of new state + units = kg kg-1 + dimensions = (horizontal_loop_extent, vertical_layer_dimension) + type = real + kind = kind_phys + intent = out +[micro_rainliq] + standard_name = microphysics_rain_mixing_ratio_wrt_moist_air_and_condensed_water_of_new_state + long_name = microphysics rain mixing ratio wrt moist air and condensed water of new state + units = kg kg-1 + dimensions = (microphysics_horizontal_loop_extent, microphysics_vertical_layer_dimension) + type = real + kind = kind_phys + intent = in +[snowice] + standard_name = snow_mixing_ratio_wrt_moist_air_and_condensed_water_of_new_state + long_name = snow mixing ratio wrt moist air and condensed water of new state + units = kg kg-1 + dimensions = (horizontal_loop_extent, vertical_layer_dimension) + type = real + kind = kind_phys + intent = out +[micro_snowice] + standard_name = microphysics_snow_mixing_ratio_wrt_moist_air_and_condensed_water_of_new_state + long_name = microphysics snow mixing ratio wrt moist air and condensed water of new state + units = kg kg-1 + dimensions = (microphysics_horizontal_loop_extent, microphysics_vertical_layer_dimension) + type = real + kind = kind_phys + intent = in +[numrain_vol] + standard_name = rain_number_concentration_of_new_state + long_name = rain number concentration of new state + units = m-3 + dimensions = (horizontal_loop_extent, vertical_layer_dimension) + type = real + kind = kind_phys + intent = out +[micro_numrain_vol] + standard_name = microphysics_rain_number_concentration_of_new_state + long_name = microphysics rain number concentration of new state + units = m-3 + dimensions = (microphysics_horizontal_loop_extent, microphysics_vertical_layer_dimension) + type = real + kind = kind_phys + intent = in +[numsnow_vol] + standard_name = snow_number_concentration_of_new_state + long_name = snow number concentration of new state + units = m-3 + dimensions = (horizontal_loop_extent, vertical_layer_dimension) + type = real + kind = kind_phys + intent = out +[micro_numsnow_vol] + standard_name = microphysics_snow_number_concentration_of_new_state + long_name = microphysics snow number concentration of new state + units = m-3 + dimensions = (microphysics_horizontal_loop_extent, microphysics_vertical_layer_dimension) + type = real + kind = kind_phys + intent = in +[diam_rain] + standard_name = average_diameter_of_stratiform_rain_particle + long_name = average diameter of stratiform rain particle + units = m + dimensions = (horizontal_loop_extent, vertical_layer_dimension) + type = real + kind = kind_phys + intent = out +[micro_diam_rain] + standard_name = microphysics_average_diameter_of_stratiform_rain_particle + long_name = microphysics average diameter of stratiform rain particle + units = m + dimensions = (microphysics_horizontal_loop_extent, microphysics_vertical_layer_dimension) + type = real + kind = kind_phys + intent = in +[diam_snow] + standard_name = average_diameter_of_stratiform_snow_particle + long_name = average diameter of stratiform snow particle + units = m + dimensions = (horizontal_loop_extent, vertical_layer_dimension) + type = real + kind = kind_phys + intent = out +[micro_diam_snow] + standard_name = microphysics_average_diameter_of_stratiform_snow_particle + long_name = microphysics average diameter of stratiform snow particle + units = m + dimensions = (microphysics_horizontal_loop_extent, microphysics_vertical_layer_dimension) + type = real + kind = kind_phys + intent = in +[graupice] + standard_name = graupel_mixing_ratio_wrt_moist_air_and_condensed_water_of_new_state + long_name = graupel mixing ratio wrt moist air and condensed water of new state + units = kg kg-1 + dimensions = (horizontal_loop_extent, vertical_layer_dimension) + type = real + kind = kind_phys + intent = out +[micro_graupice] + standard_name = microphysics_graupel_mixing_ratio_wrt_moist_air_and_condensed_water_of_new_state + long_name = microphysics graupel mixing ratio wrt moist air and condensed water of new state + units = kg kg-1 + dimensions = (microphysics_horizontal_loop_extent, microphysics_vertical_layer_dimension) + type = real + kind = kind_phys + intent = in +[numgraup_vol] + standard_name = graupel_number_concentration_of_new_state + long_name = graupel number concentration of new state + units = m-3 + dimensions = (horizontal_loop_extent, vertical_layer_dimension) + type = real + kind = kind_phys + intent = out +[micro_numgraup_vol] + standard_name = microphysics_graupel_number_concentration_of_new_state + long_name = microphysics graupel number concentration of new state + units = m-3 + dimensions = (microphysics_horizontal_loop_extent, microphysics_vertical_layer_dimension) + type = real + kind = kind_phys + intent = in +[diam_graup] + standard_name = average_diameter_of_stratiform_graupel_particle + long_name = average diameter of stratiform graupel particle + units = m + dimensions = (horizontal_loop_extent, vertical_layer_dimension) + type = real + kind = kind_phys + intent = out +[micro_diam_graup] + standard_name = microphysics_average_diameter_of_stratiform_graupel_particle + long_name = microphysics average diameter of stratiform graupel particle + units = m + dimensions = (microphysics_horizontal_loop_extent, microphysics_vertical_layer_dimension) + type = real + kind = kind_phys + intent = in +[freq_graup] + standard_name = fraction_of_gridcell_with_graupel + long_name = fraction of gridcell with graupel + units = fraction + dimensions = (horizontal_loop_extent, vertical_layer_dimension) + type = real + kind = kind_phys + intent = out +[micro_freq_graup] + standard_name = microphysics_fraction_of_gridcell_with_graupel + long_name = microphysics fraction of gridcell with graupel + units = fraction + dimensions = (microphysics_horizontal_loop_extent, microphysics_vertical_layer_dimension) + type = real + kind = kind_phys + intent = in +[freq_snow] + standard_name = fraction_of_gridcell_with_snow + long_name = fraction of gridcell with snow + units = fraction + dimensions = (horizontal_loop_extent, vertical_layer_dimension) + type = real + kind = kind_phys + intent = out +[micro_freq_snow] + standard_name = microphysics_fraction_of_gridcell_with_snow + long_name = microphysics fraction of gridcell with snow + units = fraction + dimensions = (microphysics_horizontal_loop_extent, microphysics_vertical_layer_dimension) + type = real + kind = kind_phys + intent = in +[freq_rain] + standard_name = fraction_of_gridcell_with_rain + long_name = fraction of gridcell with rain + units = fraction + dimensions = (horizontal_loop_extent, vertical_layer_dimension) + type = real + kind = kind_phys + intent = out +[micro_freq_rain] + standard_name = microphysics_fraction_of_gridcell_with_rain + long_name = microphysics fraction of gridcell with rain + units = fraction + dimensions = (microphysics_horizontal_loop_extent, microphysics_vertical_layer_dimension) + type = real + kind = kind_phys + intent = in +[frac_ice] + standard_name = fraction_of_frozen_water_to_total_condensed_water + long_name = fraction of frozen water to total condensed water + units = fraction + dimensions = (horizontal_loop_extent, vertical_layer_dimension) + type = real + kind = kind_phys + intent = out +[micro_frac_ice] + standard_name = microphysics_fraction_of_frozen_water_to_total_condensed_water + long_name = microphysics fraction of frozen water to total condensed water + units = fraction + dimensions = (microphysics_horizontal_loop_extent, microphysics_vertical_layer_dimension) + type = real + kind = kind_phys + intent = in +[frac_cldliq_tend] + standard_name = fraction_of_cloud_liquid_tendency_applied_to_state + long_name = fraction of cloud liquid tendency applied to state + units = fraction + dimensions = (horizontal_loop_extent, vertical_layer_dimension) + type = real + kind = kind_phys + intent = out +[micro_frac_cldliq_tend] + standard_name = microphysics_fraction_of_cloud_liquid_tendency_applied_to_state + long_name = microphysics fraction of cloud liquid tendency applied to state + units = fraction + dimensions = (microphysics_horizontal_loop_extent, microphysics_vertical_layer_dimension) + type = real + kind = kind_phys + intent = in +[rain_evap] + standard_name = rain_evaporation_rate_wrt_moist_air_and_condensed_water + long_name = rain evaporation rate wrt moist air and condensed water + units = kg kg-1 s-1 + dimensions = (horizontal_loop_extent, vertical_layer_dimension) + type = real + kind = kind_phys + intent = out +[micro_rain_evap] + standard_name = microphysics_rain_evaporation_rate_wrt_moist_air_and_condensed_water + long_name = microphysics rain evaporation rate wrt moist air and condensed water + units = kg kg-1 s-1 + dimensions = (microphysics_horizontal_loop_extent, microphysics_vertical_layer_dimension) + type = real + kind = kind_phys + intent = in +[errmsg] + standard_name = ccpp_error_message + long_name = error message for error handling in CCPP + units = none + dimensions = () + type = character + kind = len=512 + intent = out +[errcode] + standard_name = ccpp_error_code + long_name = error code for error handling in CCPP + units = 1 + dimensions = () + type = integer + intent = out diff --git a/physics/MP/PUMAS/micro_pumas_ccpp_dimensions_pre.F90 b/physics/MP/PUMAS/micro_pumas_ccpp_dimensions_pre.F90 new file mode 100644 index 00000000..dd19b46b --- /dev/null +++ b/physics/MP/PUMAS/micro_pumas_ccpp_dimensions_pre.F90 @@ -0,0 +1,193 @@ +module micro_pumas_ccpp_dimensions_pre + + implicit none + +contains + + !> \section arg_table_micro_pumas_ccpp_dimensions_pre_run Argument Table + !! \htmlinclude micro_pumas_ccpp_dimensions_pre_run.html + subroutine micro_pumas_ccpp_dimensions_pre_run(ncol, nlev, nlevp1, & + micro_ncol, micro_nlev, micro_nlevp1, & + airT_in, micro_airT, airq_in, micro_airq, & + cldliq_in, micro_cldliq, & + cldice_in, micro_cldice, & + numliq_in, micro_numliq, & + numice_in, micro_numice, & + rainliq_in, micro_rainliq, & + snowice_in, micro_snowice, & + numrain_in, micro_numrain, & + numsnow_in, micro_numsnow, & + graupice_in, micro_graupice, & + numgraup_in, micro_numgraup, & + relvar_in, micro_relvar, & + accre_enhan_in, micro_accre_enhan, & + pmid_in, micro_pmid, & + pdel_in, micro_pdel, & + pint_in, micro_pint, & + strat_cldfrc_in, micro_strat_cldfrc, & + strat_liq_cldfrc_in, micro_strat_liq_cldfrc, & + strat_ice_cldfrc_in, micro_strat_ice_cldfrc, & + qsatfac_in, micro_qsatfac, & + naai_in, micro_naai, & + npccn_in, micro_npccn, & + rndst_in, micro_rndst, & + nacon_in, micro_nacon, & + snowice_tend_external_in, micro_snowice_tend_external, & + numsnow_tend_external_in, micro_numsnow_tend_external, & + effi_external_in, micro_effi_external, & + frzimm_in, micro_frzimm, & + frzcnt_in, micro_frzcnt, & + frzdep_in, micro_frzdep, & + errmsg, errcode) + + !External dependencies: + use ccpp_kinds, only: kind_phys + + !Host model dimensions/parameters: + integer, intent(in) :: ncol + integer, intent(in) :: nlev + integer, intent(in) :: nlevp1 + integer, intent(in) :: micro_ncol !Number of horizontal microphysics columns (count) + integer, intent(in) :: micro_nlev !Number of microphysics vertical layers (count) + integer, intent(in) :: micro_nlevp1 !Number of microphysics vertical interfaces (count) + + ! Air temperature (K) + real(kind_phys), intent(in) :: airT_in(:, :) + real(kind_phys), intent(out) :: micro_airT(:, :) + ! Water vapor mixing ratio wrt moist air and condensed water (kg kg-1) + real(kind_phys), intent(in) :: airq_in(:, :) + real(kind_phys), intent(out) :: micro_airq(:, :) + ! Cloud liquid water mixing ratio wrt moist air and condensed water (kg kg-1) + real(kind_phys), intent(in) :: cldliq_in(:, :) + real(kind_phys), intent(out) :: micro_cldliq(:, :) + ! Cloud ice mixing ratio wrt moist air and condensed water (kg kg-1) + real(kind_phys), intent(in) :: cldice_in(:, :) + real(kind_phys), intent(out) :: micro_cldice(:, :) + ! Mass number concentration of cloud liquid water wrt moist air and condensed water (kg-1) + real(kind_phys), intent(in) :: numliq_in(:, :) + real(kind_phys), intent(out) :: micro_numliq(:, :) + ! Mass number concentration of cloud ice wrt moist air and condensed water (kg-1) + real(kind_phys), intent(in) :: numice_in(:, :) + real(kind_phys), intent(out) :: micro_numice(:, :) + ! Rain mixing ratio wrt moist air and condensed water (kg kg-1) + real(kind_phys), intent(in) :: rainliq_in(:, :) + real(kind_phys), intent(out) :: micro_rainliq(:, :) + ! Snow mixing ratio wrt moist air and condensed water (kg kg-1) + real(kind_phys), intent(in) :: snowice_in(:, :) + real(kind_phys), intent(out) :: micro_snowice(:, :) + ! Mass number concentration of rain wrt moist air and condensed water (kg-1) + real(kind_phys), intent(in) :: numrain_in(:, :) + real(kind_phys), intent(out) :: micro_numrain(:, :) + ! Mass number concentration of snow wrt moist air and condensed water (kg-1) + real(kind_phys), intent(in) :: numsnow_in(:, :) + real(kind_phys), intent(out) :: micro_numsnow(:, :) + ! Graupel mixing ratio wrt moist air and condensed water (kg kg-1) + real(kind_phys), intent(in) :: graupice_in(:, :) + real(kind_phys), intent(out) :: micro_graupice(:, :) + ! Mass number concentration of graupel wrt moist air and condensed water (kg-1) + real(kind_phys), intent(in) :: numgraup_in(:, :) + real(kind_phys), intent(out) :: micro_numgraup(:, :) + ! Relative variance of cloud water (1) + real(kind_phys), intent(in) :: relvar_in(:, :) + real(kind_phys), intent(out) :: micro_relvar(:, :) + ! Accretion enhancement factor (1) + real(kind_phys), intent(in) :: accre_enhan_in(:, :) + real(kind_phys), intent(out) :: micro_accre_enhan(:, :) + ! Air pressure (Pa) + real(kind_phys), intent(in) :: pmid_in(:, :) + real(kind_phys), intent(out) :: micro_pmid(:, :) + ! Air pressure thickness (Pa) + real(kind_phys), intent(in) :: pdel_in(:, :) + real(kind_phys), intent(out) :: micro_pdel(:, :) + ! Air pressure at interfaces (Pa) + real(kind_phys), intent(in) :: pint_in(:, :) + real(kind_phys), intent(out) :: micro_pint(:, :) + ! Stratiform cloud area fraction (fraction) + real(kind_phys), intent(in) :: strat_cldfrc_in(:, :) + real(kind_phys), intent(out) :: micro_strat_cldfrc(:, :) + ! Stratiform cloud liquid area fraction (fraction) + real(kind_phys), intent(in) :: strat_liq_cldfrc_in(:, :) + real(kind_phys), intent(out) :: micro_strat_liq_cldfrc(:, :) + ! Stratiform cloud ice area fraction (fraction) + real(kind_phys), intent(in) :: strat_ice_cldfrc_in(:, :) + real(kind_phys), intent(out) :: micro_strat_ice_cldfrc(:, :) + ! Subgrid cloud water saturation scaling factor (1) + real(kind_phys), intent(in) :: qsatfac_in(:, :) + real(kind_phys), intent(out) :: micro_qsatfac(:, :) + ! Tendency of activated ice nuclei mass number concentration (kg-1 s-1) + real(kind_phys), intent(in) :: naai_in(:, :) + real(kind_phys), intent(out) :: micro_naai(:, :) + ! Tendency of activated cloud condensation nuclei mass number concentration (kg-1 s-1) + real(kind_phys), intent(in) :: npccn_in(:, :) + real(kind_phys), intent(out) :: micro_npccn(:, :) + ! Dust radii by size bin (m) + real(kind_phys), intent(in) :: rndst_in(:, :, :) + real(kind_phys), intent(out) :: micro_rndst(:, micro_nlev, :) + ! Dust number concentration by size bin (m-3) + real(kind_phys), intent(in) :: nacon_in(:, :, :) + real(kind_phys), intent(out) :: micro_nacon(:, micro_nlev, :) + ! Tendency of snow mixing ratio wrt moist air and condensed water from external microphysics (kg kg-1 s-1) + real(kind_phys), intent(in) :: snowice_tend_external_in(:, :) + real(kind_phys), intent(out) :: micro_snowice_tend_external(:, :) + ! Tendency of mass number concentration of snow wrt moist air and condensed water from external microphysics (kg-1 s-1) + real(kind_phys), intent(in) :: numsnow_tend_external_in(:, :) + real(kind_phys), intent(out) :: micro_numsnow_tend_external(:, :) + ! Effective radius of stratiform cloud ice particle from external microphysics (m) + real(kind_phys), intent(in) :: effi_external_in(:, :) + real(kind_phys), intent(out) :: micro_effi_external(:, :) + ! Tendency of cloud liquid droplet number concentration due to immersion freezing (cm-3) + real(kind_phys), intent(in) :: frzimm_in(:, :) + real(kind_phys), intent(out) :: micro_frzimm(:, :) + ! Tendency of cloud liquid droplet number concentration due to contact freezing (cm-3) + real(kind_phys), intent(in) :: frzcnt_in(:, :) + real(kind_phys), intent(out) :: micro_frzcnt(:, :) + ! Tendency of cloud ice number concentration due to deposition nucleation (cm-3) + real(kind_phys), intent(in) :: frzdep_in(:, :) + real(kind_phys), intent(out) :: micro_frzdep(:, :) + + character(len=512), intent(out) :: errmsg + integer, intent(out) :: errcode + + !Initialize error message and error code: + errmsg = '' + errcode = 0 + +!+ IH +! For now we just use nocls = micro_ncol, but we need to constrain the vertical extent for the microphysical fields. +! Therefore micro_xxx(:ncol,:) = xxx(:,::) +!- IH + micro_airT(:ncol,:) = airT_in(:,::) + micro_airq(:ncol,:) = airq_in(:,::) + micro_cldliq(:ncol,:) = cldliq_in(:,::) + micro_cldice(:ncol,:) = cldice_in(:,::) + micro_numliq(:ncol,:) = numliq_in(:,::) + micro_numice(:ncol,:) = numice_in(:,::) + micro_rainliq(:ncol,:) = rainliq_in(:,::) + micro_snowice(:ncol,:) = snowice_in(:,::) + micro_numrain(:ncol,:) = numrain_in(:,::) + micro_numsnow(:ncol,:) = numsnow_in(:,::) + micro_graupice(:ncol,:) = graupice_in(:,::) + micro_numgraup(:ncol,:) = numgraup_in(:,::) + micro_relvar(:ncol,:) = relvar_in(:,::) + micro_accre_enhan(:ncol,:) = accre_enhan_in(:,::) + micro_pmid(:ncol,:) = pmid_in(:,::) + micro_pdel(:ncol,:) = pdel_in(:,::) + micro_pint(:ncol,:) = pint_in(:,:micro_nlevp1) + micro_strat_cldfrc(:ncol,:) = strat_cldfrc_in(:,::) + micro_strat_liq_cldfrc(:ncol,:) = strat_liq_cldfrc_in(:,::) + micro_strat_ice_cldfrc(:ncol,:) = strat_ice_cldfrc_in(:,::) + micro_qsatfac(:ncol,:) = qsatfac_in(:,::) + micro_naai(:ncol,:) = naai_in(:,::) + micro_npccn(:ncol,:) = npccn_in(:,::) + micro_rndst(:ncol,:,:) = rndst_in(:,:micro_nlev,:) + micro_nacon(:ncol,:,:) = nacon_in(:,:micro_nlev,:) + micro_snowice_tend_external(:ncol,:) = snowice_tend_external_in(:,::) + micro_numsnow_tend_external(:ncol,:) = numsnow_tend_external_in(:,::) + micro_effi_external(:ncol,:) = effi_external_in(:,::) + micro_frzcnt(:ncol,:) = frzcnt_in(:,::) + micro_frzdep(:ncol,:) = frzdep_in(:,::) + + + end subroutine micro_pumas_ccpp_dimensions_pre_run + +end module micro_pumas_ccpp_dimensions_pre diff --git a/physics/MP/PUMAS/micro_pumas_ccpp_dimensions_pre.meta b/physics/MP/PUMAS/micro_pumas_ccpp_dimensions_pre.meta new file mode 100644 index 00000000..8c7bf5a5 --- /dev/null +++ b/physics/MP/PUMAS/micro_pumas_ccpp_dimensions_pre.meta @@ -0,0 +1,569 @@ +[ccpp-table-properties] + name = micro_pumas_ccpp_dimensions_pre + type = scheme + +######################################################################## +[ccpp-arg-table] + name = micro_pumas_ccpp_dimensions_pre_run + type = scheme +[ncol] + standard_name = horizontal_dimension + long_name = horizontal dimension + units = count + dimensions = () + type = integer + intent = in +[nlev] + standard_name = vertical_layer_dimension + long_name = number of vertical levels + units = count + dimensions = () + type = integer + intent = in +[nlevp1] + standard_name = vertical_interface_dimension + long_name = number of vertical levels plus one + units = count + dimensions = () + type = integer + intent = in +[micro_ncol] + #Equivalent to "horizontal_loop_extent" unless subcolumns is enabled + standard_name = microphysics_horizontal_loop_extent + long_name = number of horizontal columns used by microphysics + units = count + dimensions = () + type = integer + intent = in +[micro_nlev] + #Vertical levels from surface to highest level with tropospheric clouds + standard_name = microphysics_vertical_layer_dimension + long_name = vertical layer dimension used by microphysics + units = count + dimensions = () + type = integer + intent = in +[micro_nlevp1] + #Vertical interfaces from surface to highest level with tropospheric clouds + standard_name = microphysics_vertical_interface_dimension + long_name = vertical interface dimension used by microphysics + units = count + dimensions = () + type = integer + intent = in +[airT_in] + standard_name = air_temperature + long_name = air temperature of new state + units = K + dimensions = (horizontal_loop_extent, vertical_layer_dimension) + type = real + kind = kind_phys + intent = in +[micro_airT] + standard_name = microphysics_air_temperature + long_name = microphysics air temperature of new state + units = K + dimensions = (microphysics_horizontal_loop_extent, microphysics_vertical_layer_dimension) + type = real + kind = kind_phys + intent = out +[airq_in] + standard_name = water_vapor_mixing_ratio_wrt_moist_air_and_condensed_water + long_name = water vapor mixing ratio wrt moist air and condensed water of new state + units = kg kg-1 + dimensions = (horizontal_loop_extent, vertical_layer_dimension) + type = real + kind = kind_phys + intent = in +[micro_airq] + standard_name = microphysics_water_vapor_mixing_ratio_wrt_moist_air_and_condensed_water + long_name = microphysics water vapor mixing ratio wrt moist air and condensed water of new state + units = kg kg-1 + dimensions = (microphysics_horizontal_loop_extent, microphysics_vertical_layer_dimension) + type = real + kind = kind_phys + intent = out +[cldliq_in] + standard_name = cloud_liquid_water_mixing_ratio_wrt_moist_air_and_condensed_water + long_name = cloud liquid wrt moist air and condensed water of new state + units = kg kg-1 + dimensions = (horizontal_loop_extent, vertical_layer_dimension) + type = real + kind = kind_phys + intent = in +[micro_cldliq] + standard_name = microphysics_cloud_liquid_water_mixing_ratio_wrt_moist_air_and_condensed_water + long_name = microphysics cloud liquid wrt moist air and condensed water of new state + units = kg kg-1 + dimensions = (microphysics_horizontal_loop_extent, microphysics_vertical_layer_dimension) + type = real + kind = kind_phys + intent = out +[cldice_in] + standard_name = cloud_ice_mixing_ratio_wrt_moist_air_and_condensed_water + long_name = cloud ice mixing ratio wrt moist air and condensed water of new state + units = kg kg-1 + dimensions = (horizontal_loop_extent, vertical_layer_dimension) + type = real + kind = kind_phys + intent = in +[micro_cldice] + standard_name = microphysics_cloud_ice_mixing_ratio_wrt_moist_air_and_condensed_water + long_name = microphysics cloud ice mixing ratio wrt moist air and condensed water of new state + units = kg kg-1 + dimensions = (microphysics_horizontal_loop_extent, microphysics_vertical_layer_dimension) + type = real + kind = kind_phys + intent = out +[numliq_in] + standard_name = mass_number_concentration_of_cloud_liquid_water_wrt_moist_air_and_condensed_water + long_name = mass number concentration of cloud liquid wrt moist air and condensed water of new state + units = kg-1 + dimensions = (horizontal_loop_extent, vertical_layer_dimension) + type = real + kind = kind_phys + intent = in +[micro_numliq] + standard_name = microphysics_mass_number_concentration_of_cloud_liquid_water_wrt_moist_air_and_condensed_water + long_name = microphysics mass number concentration of cloud liquid wrt moist air and condensed water of new state + units = kg-1 + dimensions = (microphysics_horizontal_loop_extent, microphysics_vertical_layer_dimension) + type = real + kind = kind_phys + intent = out +[numice_in] + standard_name = mass_number_concentration_of_cloud_ice_wrt_moist_air_and_condensed_water + long_name = mass number concentration of cloud ice wrt moist air and condensed water of new state + units = kg-1 + dimensions = (horizontal_loop_extent, vertical_layer_dimension) + type = real + kind = kind_phys + intent = in +[micro_numice] + standard_name = microphysics_mass_number_concentration_of_cloud_ice_wrt_moist_air_and_condensed_water + long_name = microphysics mass number concentration of cloud ice wrt moist air and condensed water of new state + units = kg-1 + dimensions = (microphysics_horizontal_loop_extent, microphysics_vertical_layer_dimension) + type = real + kind = kind_phys + intent = out +[rainliq_in] + standard_name = rain_mixing_ratio_wrt_moist_air_and_condensed_water + long_name = rain mixing ratio wrt moist air and condensed water of new state + units = kg kg-1 + dimensions = (horizontal_loop_extent, vertical_layer_dimension) + type = real + kind = kind_phys + intent = in +[micro_rainliq] + standard_name = microphysics_rain_mixing_ratio_wrt_moist_air_and_condensed_water + long_name = microphysics rain mixing ratio wrt moist air and condensed water of new state + units = kg kg-1 + dimensions = (microphysics_horizontal_loop_extent, microphysics_vertical_layer_dimension) + type = real + kind = kind_phys + intent = out +[snowice_in] + standard_name = snow_mixing_ratio_wrt_moist_air_and_condensed_water + long_name = snow mixing ratio wrt moist air and condensed water of new state + units = kg kg-1 + dimensions = (horizontal_loop_extent, vertical_layer_dimension) + type = real + kind = kind_phys + intent = in +[micro_snowice] + standard_name = microphysics_snow_mixing_ratio_wrt_moist_air_and_condensed_water + long_name = microphysics snow mixing ratio wrt moist air and condensed water of new state + units = kg kg-1 + dimensions = (microphysics_horizontal_loop_extent, microphysics_vertical_layer_dimension) + type = real + kind = kind_phys + intent = out +[numrain_in] + standard_name = mass_number_concentration_of_rain_wrt_moist_air_and_condensed_water + long_name = mass number concentration of rain wrt moist air and condensed water of new state + units = kg-1 + dimensions = (horizontal_loop_extent, vertical_layer_dimension) + type = real + kind = kind_phys + intent = in +[micro_numrain] + standard_name = microphysics_mass_number_concentration_of_rain_wrt_moist_air_and_condensed_water + long_name = microphysics mass number concentration of rain wrt moist air and condensed water of new state + units = kg-1 + dimensions = (microphysics_horizontal_loop_extent, microphysics_vertical_layer_dimension) + type = real + kind = kind_phys + intent = out +[numsnow_in] + standard_name = mass_number_concentration_of_snow_wrt_moist_air_and_condensed_water + long_name = mass number concentration of snow wrt moist air and condensed water of new state + units = kg-1 + dimensions = (horizontal_loop_extent, vertical_layer_dimension) + type = real + kind = kind_phys + intent = in +[micro_numsnow] + standard_name = microphysics_mass_number_concentration_of_snow_wrt_moist_air_and_condensed_water + long_name = microphysics mass number concentration of snow wrt moist air and condensed water of new state + units = kg-1 + dimensions = (microphysics_horizontal_loop_extent, microphysics_vertical_layer_dimension) + type = real + kind = kind_phys + intent = out +[graupice_in] + standard_name = graupel_mixing_ratio_wrt_moist_air_and_condensed_water + long_name = graupel mixing ratio wrt moist air and condensed water of new state + units = kg kg-1 + dimensions = (horizontal_loop_extent, vertical_layer_dimension) + type = real + kind = kind_phys + intent = in +[micro_graupice] + standard_name = microphysics_graupel_mixing_ratio_wrt_moist_air_and_condensed_water + long_name = microphysics graupel mixing ratio wrt moist air and condensed water of new state + units = kg kg-1 + dimensions = (microphysics_horizontal_loop_extent, microphysics_vertical_layer_dimension) + type = real + kind = kind_phys + intent = out +[numgraup_in] + standard_name = mass_number_concentration_of_graupel_wrt_moist_air_and_condensed_water + long_name = mass number concentration of graupel wrt moist air and condensed water of new state + units = kg-1 + dimensions = (horizontal_loop_extent, vertical_layer_dimension) + type = real + kind = kind_phys + intent = in +[micro_numgraup] + standard_name = microphysics_mass_number_concentration_of_graupel_wrt_moist_air_and_condensed_water + long_name = microphysics mass number concentration of graupel wrt moist air and condensed water of new state + units = kg-1 + dimensions = (microphysics_horizontal_loop_extent, microphysics_vertical_layer_dimension) + type = real + kind = kind_phys + intent = out +[relvar_in] + standard_name = relative_variance_of_cloud_water + long_name = relative variance of cloud water + units = 1 + dimensions = (horizontal_loop_extent, vertical_layer_dimension) + type = real + kind = kind_phys + intent = in +[micro_relvar] + standard_name = microphysics_relative_variance_of_cloud_water + long_name = microphysics relative variance of cloud water + units = 1 + dimensions = (microphysics_horizontal_loop_extent, microphysics_vertical_layer_dimension) + type = real + kind = kind_phys + intent = out +[accre_enhan_in] + standard_name = accretion_enhancement_factor + long_name = accretion enhancement factor + units = 1 + dimensions = (horizontal_loop_extent, vertical_layer_dimension) + type = real + kind = kind_phys + intent = in +[micro_accre_enhan] + standard_name = microphysics_accretion_enhancement_factor + long_name = microphysics accretion enhancement factor + units = 1 + dimensions = (microphysics_horizontal_loop_extent, microphysics_vertical_layer_dimension) + type = real + kind = kind_phys + intent = out +[pmid_in] + standard_name = air_pressure + long_name = air pressure + units = Pa + dimensions = (horizontal_loop_extent, vertical_layer_dimension) + type = real + kind = kind_phys + intent = in +[micro_pmid] + standard_name = microphysics_air_pressure + long_name = microphysics air pressure + units = Pa + dimensions = (microphysics_horizontal_loop_extent, microphysics_vertical_layer_dimension) + type = real + kind = kind_phys + intent = out +[pdel_in] + standard_name = air_pressure_thickness + long_name = air pressure thickness + units = Pa + dimensions = (horizontal_loop_extent, vertical_layer_dimension) + type = real + kind = kind_phys + intent = in +[micro_pdel] + standard_name = microphysics_air_pressure_thickness + long_name = microphysics air pressure thickness + units = Pa + dimensions = (microphysics_horizontal_loop_extent, microphysics_vertical_layer_dimension) + type = real + kind = kind_phys + intent = out +[pint_in] + standard_name = air_pressure_at_interfaces + long_name = air pressure at interfaces + units = Pa + dimensions = (horizontal_loop_extent, vertical_interface_dimension) + type = real + kind = kind_phys + intent = in +[micro_pint] + standard_name = microphysics_air_pressure_at_interfaces + long_name = microphysics air pressure at interfaces + units = Pa + dimensions = (microphysics_horizontal_loop_extent, microphysics_vertical_interface_dimension) + type = real + kind = kind_phys + intent = out +[strat_cldfrc_in] + standard_name = stratiform_cloud_area_fraction + long_name = stratiform cloud area fraction + units = fraction + dimensions = (horizontal_loop_extent, vertical_layer_dimension) + type = real + kind = kind_phys + intent = in +[micro_strat_cldfrc] + standard_name = microphysics_stratiform_cloud_area_fraction + long_name = microphysics stratiform cloud area fraction + units = fraction + dimensions = (microphysics_horizontal_loop_extent, microphysics_vertical_layer_dimension) + type = real + kind = kind_phys + intent = out +[strat_liq_cldfrc_in] + standard_name = stratiform_cloud_liquid_area_fraction + long_name = stratiform cloud liquid area fraction + units = fraction + dimensions = (horizontal_loop_extent, vertical_layer_dimension) + type = real + kind = kind_phys + intent = in +[micro_strat_liq_cldfrc] + standard_name = microphysics_stratiform_cloud_liquid_area_fraction + long_name = microphysics stratiform cloud liquid area fraction + units = fraction + dimensions = (microphysics_horizontal_loop_extent, microphysics_vertical_layer_dimension) + type = real + kind = kind_phys + intent = out +[strat_ice_cldfrc_in] + standard_name = stratiform_cloud_ice_area_fraction + long_name = stratiform cloud ice area fraction + units = fraction + dimensions = (horizontal_loop_extent, vertical_layer_dimension) + type = real + kind = kind_phys + intent = in +[micro_strat_ice_cldfrc] + standard_name = microphysics_stratiform_cloud_ice_area_fraction + long_name = microphysics stratiform cloud ice area fraction + units = fraction + dimensions = (microphysics_horizontal_loop_extent, microphysics_vertical_layer_dimension) + type = real + kind = kind_phys + intent = out +[qsatfac_in] + standard_name = subgrid_cloud_water_saturation_scaling_factor + long_name = subgrid cloud water saturation scaling factor + units = 1 + dimensions = (horizontal_loop_extent, vertical_layer_dimension) + type = real + kind = kind_phys + intent = in +[micro_qsatfac] + standard_name = microphysics_subgrid_cloud_water_saturation_scaling_factor + long_name = microphysics subgrid cloud water saturation scaling factor + units = 1 + dimensions = (microphysics_horizontal_loop_extent, microphysics_vertical_layer_dimension) + type = real + kind = kind_phys + intent = out +[naai_in] + standard_name = tendency_of_activated_ice_nuclei_mass_number_concentration + long_name = tendency of activated ice nuclei mass number concentration + units = kg-1 s-1 + dimensions = (horizontal_loop_extent, vertical_layer_dimension) + type = real + kind = kind_phys + intent = in +[micro_naai] + standard_name = microphysics_tendency_of_activated_ice_nuclei_mass_number_concentration + long_name = microphysics tendency of activated ice nuclei mass number concentration + units = kg-1 s-1 + dimensions = (microphysics_horizontal_loop_extent, microphysics_vertical_layer_dimension) + type = real + kind = kind_phys + intent = out +[npccn_in] + standard_name = tendency_of_activated_cloud_condensation_nuclei_mass_number_concentration + long_name = tendency of activated cloud condensation nuclei mass number concentration + units = kg-1 s-1 + dimensions = (horizontal_loop_extent, vertical_layer_dimension) + type = real + kind = kind_phys + intent = in +[micro_npccn] + standard_name = microphysics_tendency_of_activated_cloud_condensation_nuclei_mass_number_concentration + long_name = microphysics tendency of activated cloud condensation nuclei mass number concentration + units = kg-1 s-1 + dimensions = (microphysics_horizontal_loop_extent, microphysics_vertical_layer_dimension) + type = real + kind = kind_phys + intent = out +[rndst_in] + standard_name = dust_radii_by_size_bin + long_name = dust bin radii + units = m + dimensions = (horizontal_loop_extent, vertical_layer_dimension, dust_size_bins_dimension) + type = real + kind = kind_phys + intent = in +[micro_rndst] + standard_name = microphysics_dust_radii_by_size_bin + long_name = microphysics dust bin radii + units = m + dimensions = (microphysics_horizontal_loop_extent, microphysics_vertical_layer_dimension, dust_size_bins_dimension) + type = real + kind = kind_phys + intent = out +[nacon_in] + standard_name = dust_number_concentration_by_size_bin + long_name = dust number concentration by size bin + units = m-3 + dimensions = (horizontal_loop_extent, vertical_layer_dimension, dust_size_bins_dimension) + type = real + kind = kind_phys + intent = in +[micro_nacon] + standard_name = microphysics_dust_number_concentration_by_size_bin + long_name = microphysics dust number concentration by size bin + units = m-3 + dimensions = (microphysics_horizontal_loop_extent, microphysics_vertical_layer_dimension, dust_size_bins_dimension) + type = real + kind = kind_phys + intent = out +[snowice_tend_external_in] + standard_name = tendency_of_snow_mixing_ratio_wrt_moist_air_and_condensed_water_from_external_microphysics + long_name = tendency of snow mixing ratio wrt moist air and condensed water from external microphysics + units = kg kg-1 s-1 + dimensions = (horizontal_loop_extent, vertical_layer_dimension) + type = real + kind = kind_phys + intent = in +[micro_snowice_tend_external] + standard_name = microphysics_tendency_of_snow_mixing_ratio_wrt_moist_air_and_condensed_water_from_external_microphysics + long_name = microphysics tendency of snow mixing ratio wrt moist air and condensed water from external microphysics + units = kg kg-1 s-1 + dimensions = (microphysics_horizontal_loop_extent, microphysics_vertical_layer_dimension) + type = real + kind = kind_phys + intent = out +[numsnow_tend_external_in] + standard_name = tendency_of_mass_number_concentration_of_snow_wrt_moist_air_and_condensed_water_from_external_microphysics + long_name = tendency of mass number concentration of snow wrt moist air and condensed water from external microphysics + units = kg-1 s-1 + dimensions = (horizontal_loop_extent, vertical_layer_dimension) + type = real + kind = kind_phys + intent = in +[micro_numsnow_tend_external] + standard_name = microphysics_tendency_of_mass_number_concentration_of_snow_wrt_moist_air_and_condensed_water_from_external_microphysics + long_name = microphysics tendency of mass number concentration of snow wrt moist air and condensed water from external microphysics + units = kg-1 s-1 + dimensions = (microphysics_horizontal_loop_extent, microphysics_vertical_layer_dimension) + type = real + kind = kind_phys + intent = out + +[effi_external_in] + standard_name = effective_radius_of_stratiform_cloud_ice_particle_from_external_microphysics + long_name = effective radius of stratiform cloud ice particle from external microphysics + units = m + dimensions = (horizontal_loop_extent, vertical_layer_dimension) + type = real + kind = kind_phys + intent = in +[micro_effi_external] + standard_name = microphysics_effective_radius_of_stratiform_cloud_ice_particle_from_external_microphysics + long_name = microphysics effective radius of stratiform cloud ice particle from external microphysics + units = m + dimensions = (microphysics_horizontal_loop_extent, microphysics_vertical_layer_dimension) + type = real + kind = kind_phys + intent = out +[frzimm_in] + standard_name = tendency_of_cloud_liquid_droplet_number_concentration_due_to_immersion_freezing + long_name = tendency of cloud liquid droplet number concentration due to immersion freezing + units = cm-3 + dimensions = (horizontal_loop_extent, vertical_layer_dimension) + type = real + kind = kind_phys + intent = in +[micro_frzimm] + standard_name = microphysics_tendency_of_cloud_liquid_droplet_number_concentration_due_to_immersion_freezing + long_name = microphysics tendency of cloud liquid droplet number concentration due to immersion freezing + units = cm-3 + dimensions = (microphysics_horizontal_loop_extent, microphysics_vertical_layer_dimension) + type = real + kind = kind_phys + intent = out +[frzcnt_in] + standard_name = tendency_of_cloud_liquid_droplet_number_concentration_due_to_contact_freezing + long_name = tendency of cloud liquid droplet number concentration due to contact freezing + units = cm-3 + dimensions = (horizontal_loop_extent, vertical_layer_dimension) + type = real + kind = kind_phys + intent = in +[micro_frzcnt] + standard_name = microphysics_tendency_of_cloud_liquid_droplet_number_concentration_due_to_contact_freezing + long_name = microphysics tendency of cloud liquid droplet number concentration due to contact freezing + units = cm-3 + dimensions = (microphysics_horizontal_loop_extent, microphysics_vertical_layer_dimension) + type = real + kind = kind_phys + intent = out +[frzdep_in] + standard_name = tendency_of_cloud_ice_number_concentration_due_to_deposition_nucleation + long_name = tendency of cloud ice number concentration due to deposition nucleation + units = cm-3 + dimensions = (horizontal_loop_extent, vertical_layer_dimension) + type = real + kind = kind_phys + intent = in +[micro_frzdep] + standard_name = microphysics_tendency_of_cloud_ice_number_concentration_due_to_deposition_nucleation + long_name = microphysics tendency of cloud ice number concentration due to deposition nucleation + units = cm-3 + dimensions = (microphysics_horizontal_loop_extent, microphysics_vertical_layer_dimension) + type = real + kind = kind_phys + intent = out +[errmsg] + standard_name = ccpp_error_message + long_name = error message for error handling in CCPP + units = none + dimensions = () + type = character + kind = len=512 + intent = out +[errcode] + standard_name = ccpp_error_code + long_name = error code for error handling in CCPP + units = 1 + dimensions = () + type = integer + intent = out +##################### +#End of metadata file +##################### + diff --git a/physics/MP/PUMAS/pumas_pre_main.F90 b/physics/MP/PUMAS/pumas_pre_main.F90 index dda9e6a6..6f63a922 100644 --- a/physics/MP/PUMAS/pumas_pre_main.F90 +++ b/physics/MP/PUMAS/pumas_pre_main.F90 @@ -18,6 +18,8 @@ module pumas_pre_main !steps needed before the core !PUMAS calls. + !> \section arg_table_pumas_pre_main_init Argument Table + !! \htmlinclude pumas_pre_main_init.html subroutine pumas_pre_main_init(errmsg, errcode) character(len=512), intent(out) :: errmsg From b188b6715060a65b5d37b556d6c69576dbee86c2 Mon Sep 17 00:00:00 2001 From: peverwhee Date: Thu, 30 Jan 2025 15:41:55 -0700 Subject: [PATCH 07/26] add constituent metadata; fix stdname --- .../MP/PUMAS/micro_pumas_ccpp_dimensions_post.meta | 13 ++++++++++++- .../MP/PUMAS/micro_pumas_ccpp_dimensions_pre.meta | 13 +++++++++++++ 2 files changed, 25 insertions(+), 1 deletion(-) diff --git a/physics/MP/PUMAS/micro_pumas_ccpp_dimensions_post.meta b/physics/MP/PUMAS/micro_pumas_ccpp_dimensions_post.meta index d5683f04..05891f61 100644 --- a/physics/MP/PUMAS/micro_pumas_ccpp_dimensions_post.meta +++ b/physics/MP/PUMAS/micro_pumas_ccpp_dimensions_post.meta @@ -92,6 +92,7 @@ type = real kind = kind_phys intent = out + constituent = true [micro_airq_tend] standard_name = microphysics_tendency_of_water_vapor_mixing_ratio_wrt_moist_air_and_condensed_water long_name = microphysics tendency of water vapor mixing ratio wrt moist air and condensed water @@ -108,6 +109,7 @@ type = real kind = kind_phys intent = out + constituent = true [micro_cldliq_tend] standard_name = microphysics_tendency_of_cloud_liquid_water_mixing_ratio_wrt_moist_air_and_condensed_water long_name = microphysics tendency of cloud liquid water mixing ratio wrt moist air and condensed water @@ -124,6 +126,7 @@ type = real kind = kind_phys intent = out + constituent = true [micro_cldice_tend] standard_name = microphysics_tendency_of_cloud_ice_mixing_ratio_wrt_moist_air_and_condensed_water long_name = microphysics tendency of cloud ice mixing ratio wrt moist air and condensed water @@ -133,13 +136,14 @@ kind = kind_phys intent = in [numliq_tend] - standard_name = mass_number_concentration_of_cloud_liquid_water_wrt_moist_air_and_condensed_water + standard_name = tendency_of_mass_number_concentration_of_cloud_liquid_water_wrt_moist_air_and_condensed_water long_name = mass number concentration of cloud liquid water wrt moist air and condensed water units = kg-1 s-1 dimensions = (horizontal_loop_extent, vertical_layer_dimension) type = real kind = kind_phys intent = out + constituent = true [micro_numliq_tend] standard_name = microphysics_tendency_of_mass_number_concentration_of_cloud_liquid_water_wrt_moist_air_and_condensed_water long_name = microphysics mass number concentration of cloud liquid water wrt moist air and condensed water @@ -156,6 +160,7 @@ type = real kind = kind_phys intent = out + constituent = true [micro_numice_tend] standard_name = microphysics_tendency_of_mass_number_concentration_of_cloud_ice_wrt_moist_air_and_condensed_water long_name = microphysics mass number concentration of cloud ice wrt moist air and condensed water @@ -172,6 +177,7 @@ type = real kind = kind_phys intent = out + constituent = true [micro_rainliq_tend] standard_name = microphysics_tendency_of_rain_mixing_ratio_wrt_moist_air_and_condensed_water long_name = microphysics tendency of rain mixing ratio wrt moist air and condensed water @@ -188,6 +194,7 @@ type = real kind = kind_phys intent = out + constituent = true [micro_snowice_tend] standard_name = microphysics_tendency_of_snow_mixing_ratio_wrt_moist_air_and_condensed_water long_name = microphysics tendency of rain mixing ratio wrt moist air and condensed water @@ -204,6 +211,7 @@ type = real kind = kind_phys intent = out + constituent = true [micro_numrain_tend] standard_name = microphysics_tendency_of_mass_number_concentration_of_rain_wrt_moist_air_and_condensed_water long_name = microphysics tendency of mass number concentration of rain wrt moist air and condensed water @@ -220,6 +228,7 @@ type = real kind = kind_phys intent = out + constituent = true [micro_numsnow_tend] standard_name = microphysics_tendency_of_mass_number_concentration_of_snow_wrt_moist_air_and_condensed_water long_name = microphysics tendency of mass number concentration of snow wrt moist air and condensed water @@ -236,6 +245,7 @@ type = real kind = kind_phys intent = out + constituent = true [micro_graupice_tend] standard_name = microphysics_tendency_of_graupel_mixing_ratio_wrt_moist_air_and_condensed_water long_name = microphysics tendency of graupel mixing ratio wrt moist air and condensed water @@ -252,6 +262,7 @@ type = real kind = kind_phys intent = out + constituent = true [micro_numgraup_tend] standard_name = microphysics_tendency_of_mass_number_concentration_of_graupel_wrt_moist_air_and_condensed_water long_name = microphysics tendency of mass number concentration of graupel wrt moist air and condensed water diff --git a/physics/MP/PUMAS/micro_pumas_ccpp_dimensions_pre.meta b/physics/MP/PUMAS/micro_pumas_ccpp_dimensions_pre.meta index 8c7bf5a5..486a2846 100644 --- a/physics/MP/PUMAS/micro_pumas_ccpp_dimensions_pre.meta +++ b/physics/MP/PUMAS/micro_pumas_ccpp_dimensions_pre.meta @@ -75,6 +75,7 @@ type = real kind = kind_phys intent = in + advected = true [micro_airq] standard_name = microphysics_water_vapor_mixing_ratio_wrt_moist_air_and_condensed_water long_name = microphysics water vapor mixing ratio wrt moist air and condensed water of new state @@ -91,6 +92,7 @@ type = real kind = kind_phys intent = in + advected = true [micro_cldliq] standard_name = microphysics_cloud_liquid_water_mixing_ratio_wrt_moist_air_and_condensed_water long_name = microphysics cloud liquid wrt moist air and condensed water of new state @@ -107,6 +109,7 @@ type = real kind = kind_phys intent = in + advected = true [micro_cldice] standard_name = microphysics_cloud_ice_mixing_ratio_wrt_moist_air_and_condensed_water long_name = microphysics cloud ice mixing ratio wrt moist air and condensed water of new state @@ -123,6 +126,7 @@ type = real kind = kind_phys intent = in + advected = true [micro_numliq] standard_name = microphysics_mass_number_concentration_of_cloud_liquid_water_wrt_moist_air_and_condensed_water long_name = microphysics mass number concentration of cloud liquid wrt moist air and condensed water of new state @@ -139,6 +143,7 @@ type = real kind = kind_phys intent = in + advected = true [micro_numice] standard_name = microphysics_mass_number_concentration_of_cloud_ice_wrt_moist_air_and_condensed_water long_name = microphysics mass number concentration of cloud ice wrt moist air and condensed water of new state @@ -155,6 +160,7 @@ type = real kind = kind_phys intent = in + advected = true [micro_rainliq] standard_name = microphysics_rain_mixing_ratio_wrt_moist_air_and_condensed_water long_name = microphysics rain mixing ratio wrt moist air and condensed water of new state @@ -171,6 +177,7 @@ type = real kind = kind_phys intent = in + advected = true [micro_snowice] standard_name = microphysics_snow_mixing_ratio_wrt_moist_air_and_condensed_water long_name = microphysics snow mixing ratio wrt moist air and condensed water of new state @@ -187,6 +194,7 @@ type = real kind = kind_phys intent = in + advected = true [micro_numrain] standard_name = microphysics_mass_number_concentration_of_rain_wrt_moist_air_and_condensed_water long_name = microphysics mass number concentration of rain wrt moist air and condensed water of new state @@ -203,6 +211,7 @@ type = real kind = kind_phys intent = in + advected = true [micro_numsnow] standard_name = microphysics_mass_number_concentration_of_snow_wrt_moist_air_and_condensed_water long_name = microphysics mass number concentration of snow wrt moist air and condensed water of new state @@ -219,6 +228,7 @@ type = real kind = kind_phys intent = in + advected = true [micro_graupice] standard_name = microphysics_graupel_mixing_ratio_wrt_moist_air_and_condensed_water long_name = microphysics graupel mixing ratio wrt moist air and condensed water of new state @@ -235,6 +245,7 @@ type = real kind = kind_phys intent = in + advected = true [micro_numgraup] standard_name = microphysics_mass_number_concentration_of_graupel_wrt_moist_air_and_condensed_water long_name = microphysics mass number concentration of graupel wrt moist air and condensed water of new state @@ -459,6 +470,7 @@ type = real kind = kind_phys intent = in + constituent = true [micro_snowice_tend_external] standard_name = microphysics_tendency_of_snow_mixing_ratio_wrt_moist_air_and_condensed_water_from_external_microphysics long_name = microphysics tendency of snow mixing ratio wrt moist air and condensed water from external microphysics @@ -475,6 +487,7 @@ type = real kind = kind_phys intent = in + constituent = true [micro_numsnow_tend_external] standard_name = microphysics_tendency_of_mass_number_concentration_of_snow_wrt_moist_air_and_condensed_water_from_external_microphysics long_name = microphysics tendency of mass number concentration of snow wrt moist air and condensed water from external microphysics From 6b3cc4b9b45cbaec78d6461d3e09126fedbbb6cb Mon Sep 17 00:00:00 2001 From: Cheryl Craig Date: Mon, 14 Jul 2025 11:41:26 -0600 Subject: [PATCH 08/26] Moved from MP/PUMAS to pumas directory --- .../pumas}/MP/PUMAS/micro_pumas_ccpp_dimensions_post.F90 | 0 .../pumas}/MP/PUMAS/micro_pumas_ccpp_dimensions_post.meta | 0 .../pumas}/MP/PUMAS/micro_pumas_ccpp_dimensions_pre.F90 | 0 .../pumas}/MP/PUMAS/micro_pumas_ccpp_dimensions_pre.meta | 0 {physics => schemes/pumas}/MP/PUMAS/pumas | 0 {physics => schemes/pumas}/MP/PUMAS/pumas_pre_main.F90 | 0 {physics => schemes/pumas}/MP/PUMAS/pumas_pre_main.meta | 0 {physics => schemes/pumas}/MP/PUMAS/pumas_pre_main_namelist.xml | 0 {physics => schemes/pumas}/tools/wv_sat_methods.F90 | 0 9 files changed, 0 insertions(+), 0 deletions(-) rename {physics => schemes/pumas}/MP/PUMAS/micro_pumas_ccpp_dimensions_post.F90 (100%) rename {physics => schemes/pumas}/MP/PUMAS/micro_pumas_ccpp_dimensions_post.meta (100%) rename {physics => schemes/pumas}/MP/PUMAS/micro_pumas_ccpp_dimensions_pre.F90 (100%) rename {physics => schemes/pumas}/MP/PUMAS/micro_pumas_ccpp_dimensions_pre.meta (100%) rename {physics => schemes/pumas}/MP/PUMAS/pumas (100%) rename {physics => schemes/pumas}/MP/PUMAS/pumas_pre_main.F90 (100%) rename {physics => schemes/pumas}/MP/PUMAS/pumas_pre_main.meta (100%) rename {physics => schemes/pumas}/MP/PUMAS/pumas_pre_main_namelist.xml (100%) rename {physics => schemes/pumas}/tools/wv_sat_methods.F90 (100%) diff --git a/physics/MP/PUMAS/micro_pumas_ccpp_dimensions_post.F90 b/schemes/pumas/MP/PUMAS/micro_pumas_ccpp_dimensions_post.F90 similarity index 100% rename from physics/MP/PUMAS/micro_pumas_ccpp_dimensions_post.F90 rename to schemes/pumas/MP/PUMAS/micro_pumas_ccpp_dimensions_post.F90 diff --git a/physics/MP/PUMAS/micro_pumas_ccpp_dimensions_post.meta b/schemes/pumas/MP/PUMAS/micro_pumas_ccpp_dimensions_post.meta similarity index 100% rename from physics/MP/PUMAS/micro_pumas_ccpp_dimensions_post.meta rename to schemes/pumas/MP/PUMAS/micro_pumas_ccpp_dimensions_post.meta diff --git a/physics/MP/PUMAS/micro_pumas_ccpp_dimensions_pre.F90 b/schemes/pumas/MP/PUMAS/micro_pumas_ccpp_dimensions_pre.F90 similarity index 100% rename from physics/MP/PUMAS/micro_pumas_ccpp_dimensions_pre.F90 rename to schemes/pumas/MP/PUMAS/micro_pumas_ccpp_dimensions_pre.F90 diff --git a/physics/MP/PUMAS/micro_pumas_ccpp_dimensions_pre.meta b/schemes/pumas/MP/PUMAS/micro_pumas_ccpp_dimensions_pre.meta similarity index 100% rename from physics/MP/PUMAS/micro_pumas_ccpp_dimensions_pre.meta rename to schemes/pumas/MP/PUMAS/micro_pumas_ccpp_dimensions_pre.meta diff --git a/physics/MP/PUMAS/pumas b/schemes/pumas/MP/PUMAS/pumas similarity index 100% rename from physics/MP/PUMAS/pumas rename to schemes/pumas/MP/PUMAS/pumas diff --git a/physics/MP/PUMAS/pumas_pre_main.F90 b/schemes/pumas/MP/PUMAS/pumas_pre_main.F90 similarity index 100% rename from physics/MP/PUMAS/pumas_pre_main.F90 rename to schemes/pumas/MP/PUMAS/pumas_pre_main.F90 diff --git a/physics/MP/PUMAS/pumas_pre_main.meta b/schemes/pumas/MP/PUMAS/pumas_pre_main.meta similarity index 100% rename from physics/MP/PUMAS/pumas_pre_main.meta rename to schemes/pumas/MP/PUMAS/pumas_pre_main.meta diff --git a/physics/MP/PUMAS/pumas_pre_main_namelist.xml b/schemes/pumas/MP/PUMAS/pumas_pre_main_namelist.xml similarity index 100% rename from physics/MP/PUMAS/pumas_pre_main_namelist.xml rename to schemes/pumas/MP/PUMAS/pumas_pre_main_namelist.xml diff --git a/physics/tools/wv_sat_methods.F90 b/schemes/pumas/tools/wv_sat_methods.F90 similarity index 100% rename from physics/tools/wv_sat_methods.F90 rename to schemes/pumas/tools/wv_sat_methods.F90 From 50be09058efe63f984975f5321a71f926203cb10 Mon Sep 17 00:00:00 2001 From: Cheryl Craig Date: Mon, 14 Jul 2025 11:49:06 -0600 Subject: [PATCH 09/26] reorder pumas directory --- .../micro_pumas_ccpp_dimensions_post.F90 | 0 .../micro_pumas_ccpp_dimensions_post.meta | 0 .../micro_pumas_ccpp_dimensions_pre.F90 | 0 .../micro_pumas_ccpp_dimensions_pre.meta | 0 .../pumas/{MP/PUMAS => }/pumas_pre_main.F90 | 0 .../pumas/{MP/PUMAS => }/pumas_pre_main.meta | 0 .../PUMAS => }/pumas_pre_main_namelist.xml | 0 schemes/pumas/tools/wv_sat_methods.F90 | 759 ------------------ 8 files changed, 759 deletions(-) rename schemes/pumas/{MP/PUMAS => }/micro_pumas_ccpp_dimensions_post.F90 (100%) rename schemes/pumas/{MP/PUMAS => }/micro_pumas_ccpp_dimensions_post.meta (100%) rename schemes/pumas/{MP/PUMAS => }/micro_pumas_ccpp_dimensions_pre.F90 (100%) rename schemes/pumas/{MP/PUMAS => }/micro_pumas_ccpp_dimensions_pre.meta (100%) rename schemes/pumas/{MP/PUMAS => }/pumas_pre_main.F90 (100%) rename schemes/pumas/{MP/PUMAS => }/pumas_pre_main.meta (100%) rename schemes/pumas/{MP/PUMAS => }/pumas_pre_main_namelist.xml (100%) delete mode 100644 schemes/pumas/tools/wv_sat_methods.F90 diff --git a/schemes/pumas/MP/PUMAS/micro_pumas_ccpp_dimensions_post.F90 b/schemes/pumas/micro_pumas_ccpp_dimensions_post.F90 similarity index 100% rename from schemes/pumas/MP/PUMAS/micro_pumas_ccpp_dimensions_post.F90 rename to schemes/pumas/micro_pumas_ccpp_dimensions_post.F90 diff --git a/schemes/pumas/MP/PUMAS/micro_pumas_ccpp_dimensions_post.meta b/schemes/pumas/micro_pumas_ccpp_dimensions_post.meta similarity index 100% rename from schemes/pumas/MP/PUMAS/micro_pumas_ccpp_dimensions_post.meta rename to schemes/pumas/micro_pumas_ccpp_dimensions_post.meta diff --git a/schemes/pumas/MP/PUMAS/micro_pumas_ccpp_dimensions_pre.F90 b/schemes/pumas/micro_pumas_ccpp_dimensions_pre.F90 similarity index 100% rename from schemes/pumas/MP/PUMAS/micro_pumas_ccpp_dimensions_pre.F90 rename to schemes/pumas/micro_pumas_ccpp_dimensions_pre.F90 diff --git a/schemes/pumas/MP/PUMAS/micro_pumas_ccpp_dimensions_pre.meta b/schemes/pumas/micro_pumas_ccpp_dimensions_pre.meta similarity index 100% rename from schemes/pumas/MP/PUMAS/micro_pumas_ccpp_dimensions_pre.meta rename to schemes/pumas/micro_pumas_ccpp_dimensions_pre.meta diff --git a/schemes/pumas/MP/PUMAS/pumas_pre_main.F90 b/schemes/pumas/pumas_pre_main.F90 similarity index 100% rename from schemes/pumas/MP/PUMAS/pumas_pre_main.F90 rename to schemes/pumas/pumas_pre_main.F90 diff --git a/schemes/pumas/MP/PUMAS/pumas_pre_main.meta b/schemes/pumas/pumas_pre_main.meta similarity index 100% rename from schemes/pumas/MP/PUMAS/pumas_pre_main.meta rename to schemes/pumas/pumas_pre_main.meta diff --git a/schemes/pumas/MP/PUMAS/pumas_pre_main_namelist.xml b/schemes/pumas/pumas_pre_main_namelist.xml similarity index 100% rename from schemes/pumas/MP/PUMAS/pumas_pre_main_namelist.xml rename to schemes/pumas/pumas_pre_main_namelist.xml diff --git a/schemes/pumas/tools/wv_sat_methods.F90 b/schemes/pumas/tools/wv_sat_methods.F90 deleted file mode 100644 index 534628e7..00000000 --- a/schemes/pumas/tools/wv_sat_methods.F90 +++ /dev/null @@ -1,759 +0,0 @@ -module wv_sat_methods - -! This portable module contains all CAM methods for estimating -! the saturation vapor pressure of water. -! -! wv_saturation provides CAM-specific interfaces and utilities -! based on these formulae. -! -! Typical usage of this module: -! -! Init: -! call wv_sat_methods_init(r8, , errstring) -! -! Get scheme index from a name string: -! scheme_idx = wv_sat_get_scheme_idx(scheme_name) -! if (.not. wv_sat_valid_idx(scheme_idx)) -! -! Get pressures: -! es = wv_sat_svp_water(t, scheme_idx) -! es = wv_sat_svp_ice(t, scheme_idx) -! -! Use ice/water transition range: -! es = wv_sat_svp_trice(t, ttrice, scheme_idx) -! -! Note that elemental functions cannot be pointed to, nor passed -! as arguments. If you need to do either, it is recommended to -! wrap the function so that it can be given an explicit (non- -! elemental) interface. - -use ccpp_kinds, only: r8=>kind_phys !real-type precision used by CCPP - -implicit none -private -save - -integer, parameter :: VLENS = 128 ! vector length for a GPU kernel - -real(r8) :: tmelt ! Melting point of water at 1 atm (K) -real(r8) :: h2otrip ! Triple point temperature of water (K) -real(r8) :: tboil ! Boiling point of water at 1 atm (K) - -real(r8) :: ttrice ! Ice-water transition range - -real(r8) :: epsilo ! Ice-water transition range -real(r8) :: omeps ! 1._r8 - epsilo - -! Indices representing individual schemes -integer, parameter :: Invalid_idx = -1 -integer, parameter :: GoffGratch_idx = 1 -integer, parameter :: MurphyKoop_idx = 2 -integer, parameter :: Bolton_idx = 3 - -! Index representing the current default scheme. -integer, parameter :: initial_default_idx = GoffGratch_idx -integer :: default_idx = initial_default_idx - -!$acc declare create (epsilo, tmelt, tboil, omeps, h2otrip, ttrice) - -public wv_sat_methods_init -public wv_sat_get_scheme_idx -public wv_sat_valid_idx - -public wv_sat_set_default -public wv_sat_reset_default - -public wv_sat_qsat_water, wv_sat_qsat_water_vect -public wv_sat_qsat_ice, wv_sat_qsat_ice_vect - -public wv_sat_svp_trans, wv_sat_svp_trans_vect - -! pressure -> humidity conversion -public wv_sat_svp_to_qsat, wv_sat_svp_to_qsat_vect - -! Combined qsat operations -public wv_sat_qsat_trans - -public wv_sat_svp_water, wv_sat_svp_water_vect -public wv_sat_svp_ice, wv_sat_svp_ice_vect - -contains - -!--------------------------------------------------------------------- -! ADMINISTRATIVE FUNCTIONS -!--------------------------------------------------------------------- - -! Get physical constants -subroutine wv_sat_methods_init(kind, tmelt_in, h2otrip_in, tboil_in, & - ttrice_in, epsilo_in, errstring) - integer, intent(in) :: kind - real(r8), intent(in) :: tmelt_in - real(r8), intent(in) :: h2otrip_in - real(r8), intent(in) :: tboil_in - real(r8), intent(in) :: ttrice_in - real(r8), intent(in) :: epsilo_in - character(len=*), intent(out) :: errstring - - errstring = ' ' - - if (kind /= r8) then - write(errstring,*) 'wv_sat_methods_init: ERROR: ', & - kind,' was input kind but ',r8,' is internal kind.' - return - end if - - if (ttrice_in < 0._r8) then - write(errstring,*) 'wv_sat_methods_init: ERROR: ', & - ttrice_in,' was input for ttrice, but negative range is invalid.' - return - end if - - tmelt = tmelt_in - h2otrip = h2otrip_in - tboil = tboil_in - ttrice = ttrice_in - epsilo = epsilo_in - - omeps = 1._r8 - epsilo - - !$acc update device (tmelt,h2otrip,tboil,ttrice,epsilo,omeps) - -end subroutine wv_sat_methods_init - -! Look up index by name. -pure function wv_sat_get_scheme_idx(name) result(idx) - character(len=*), intent(in) :: name - integer :: idx - - select case (name) - case("GoffGratch") - idx = GoffGratch_idx - case("MurphyKoop") - idx = MurphyKoop_idx - case("Bolton") - idx = Bolton_idx - case default - idx = Invalid_idx - end select - -end function wv_sat_get_scheme_idx - -! Check validity of an index from the above routine. -pure function wv_sat_valid_idx(idx) result(status) - integer, intent(in) :: idx - logical :: status - - status = (idx /= Invalid_idx) - -end function wv_sat_valid_idx - -! Set default scheme (otherwise, Goff & Gratch is default) -! Returns a logical representing success (.true.) or -! failure (.false.). -function wv_sat_set_default(name) result(status) - character(len=*), intent(in) :: name - logical :: status - - ! Don't want to overwrite valid default with invalid, - ! so assign to temporary and check it first. - integer :: tmp_idx - - tmp_idx = wv_sat_get_scheme_idx(name) - - status = wv_sat_valid_idx(tmp_idx) - - if (status) default_idx = tmp_idx - -end function wv_sat_set_default - -! Reset default scheme to initial value. -! The same thing can be accomplished with wv_sat_set_default; -! the real reason to provide this routine is to reset the -! module for testing purposes. -subroutine wv_sat_reset_default() - - default_idx = initial_default_idx - -end subroutine wv_sat_reset_default - -!--------------------------------------------------------------------- -! UTILITIES -!--------------------------------------------------------------------- - -! Get saturation specific humidity given pressure and SVP. -! Specific humidity is limited to range 0-1. -function wv_sat_svp_to_qsat(es, p) result(qs) - real(r8), intent(in) :: es ! SVP - real(r8), intent(in) :: p ! Current pressure. - real(r8) :: qs - - ! If pressure is less than SVP, set qs to maximum of 1. - if ( (p - es) <= 0._r8 ) then - qs = 1.0_r8 - else - qs = epsilo*es / (p - omeps*es) - end if - -end function wv_sat_svp_to_qsat - -! Get saturation specific humidity given pressure and SVP. -! Specific humidity is limited to range 0-1. -subroutine wv_sat_svp_to_qsat_vect(es, p, qs, vlen) - - integer, intent(in) :: vlen - real(r8), intent(in) :: es(vlen) ! SVP - real(r8), intent(in) :: p(vlen) ! Current pressure. - real(r8), intent(out) :: qs(vlen) - integer :: i - - ! If pressure is less than SVP, set qs to maximum of 1. - - !$acc data present (es,p,qs) - - !$acc parallel vector_length(VLENS) default(present) - !$acc loop gang vector - do i=1,vlen - if ( (p(i) - es(i)) <= 0._r8 ) then - qs(i) = 1.0_r8 - else - qs(i) = epsilo*es(i) / (p(i) - omeps*es(i)) - end if - end do - !$acc end parallel - - !$acc end data -end subroutine wv_sat_svp_to_qsat_vect - -subroutine wv_sat_qsat_water(t, p, es, qs, idx) - !------------------------------------------------------------------! - ! Purpose: ! - ! Calculate SVP over water at a given temperature, and then ! - ! calculate and return saturation specific humidity. ! - !------------------------------------------------------------------! - - ! Inputs - real(r8), intent(in) :: t ! Temperature - real(r8), intent(in) :: p ! Pressure - ! Outputs - real(r8), intent(out) :: es ! Saturation vapor pressure - real(r8), intent(out) :: qs ! Saturation specific humidity - - integer, intent(in), optional :: idx ! Scheme index - - es = wv_sat_svp_water(t, idx) - - qs = wv_sat_svp_to_qsat(es, p) - - ! Ensures returned es is consistent with limiters on qs. - es = min(es, p) - -end subroutine wv_sat_qsat_water - -subroutine wv_sat_qsat_water_vect(t, p, es, qs, vlen, idx) - !------------------------------------------------------------------! - ! Purpose: ! - ! Calculate SVP over water at a given temperature, and then ! - ! calculate and return saturation specific humidity. ! - !------------------------------------------------------------------! - ! Inputs - - integer, intent(in) :: vlen - real(r8), intent(in) :: t(vlen) ! Temperature - real(r8), intent(in) :: p(vlen) ! Pressure - ! Outputs - real(r8), intent(out) :: es(vlen) ! Saturation vapor pressure - real(r8), intent(out) :: qs(vlen) ! Saturation specific humidity - - integer, intent(in), optional :: idx ! Scheme index - integer :: i - - !$acc data present (t,p,es,qs) - - call wv_sat_svp_water_vect(t, es, vlen, idx) - call wv_sat_svp_to_qsat_vect(es, p, qs, vlen) - - !$acc parallel vector_length(VLENS) default(present) - !$acc loop gang vector - do i=1,vlen - ! Ensures returned es is consistent with limiters on qs. - es(i) = min(es(i), p(i)) - enddo - !$acc end parallel - - !$acc end data -end subroutine wv_sat_qsat_water_vect - -subroutine wv_sat_qsat_ice(t, p, es, qs, idx) - !------------------------------------------------------------------! - ! Purpose: ! - ! Calculate SVP over ice at a given temperature, and then ! - ! calculate and return saturation specific humidity. ! - !------------------------------------------------------------------! - - ! Inputs - real(r8), intent(in) :: t ! Temperature - real(r8), intent(in) :: p ! Pressure - ! Outputs - real(r8), intent(out) :: es ! Saturation vapor pressure - real(r8), intent(out) :: qs ! Saturation specific humidity - - integer, intent(in), optional :: idx ! Scheme index - - es = wv_sat_svp_ice(t, idx) - - qs = wv_sat_svp_to_qsat(es, p) - - ! Ensures returned es is consistent with limiters on qs. - es = min(es, p) - -end subroutine wv_sat_qsat_ice - -subroutine wv_sat_qsat_ice_vect(t, p, es, qs, vlen, idx) - !------------------------------------------------------------------! - ! Purpose: ! - ! Calculate SVP over ice at a given temperature, and then ! - ! calculate and return saturation specific humidity. ! - !------------------------------------------------------------------! - ! Inputs - - integer, intent(in) :: vlen - real(r8), intent(in) :: t(vlen) ! Temperature - real(r8), intent(in) :: p(vlen) ! Pressure - ! Outputs - real(r8), intent(out) :: es(vlen) ! Saturation vapor pressure - real(r8), intent(out) :: qs(vlen) ! Saturation specific humidity - - integer, intent(in), optional :: idx ! Scheme index - integer :: i - - !$acc data present (t,p,es,qs) - - call wv_sat_svp_ice_vect(t, es, vlen, idx) - call wv_sat_svp_to_qsat_vect(es, p, qs, vlen) - - !$acc parallel vector_length(VLENS) default(present) - !$acc loop gang vector - do i=1,vlen - ! Ensures returned es is consistent with limiters on qs. - es(i) = min(es(i), p(i)) - enddo - !$acc end parallel - - !$acc end data -end subroutine wv_sat_qsat_ice_vect - -subroutine wv_sat_qsat_trans(t, p, es, qs, idx) - !------------------------------------------------------------------! - ! Purpose: ! - ! Calculate SVP over ice at a given temperature, and then ! - ! calculate and return saturation specific humidity. ! - !------------------------------------------------------------------! - - ! Inputs - real(r8), intent(in) :: t ! Temperature - real(r8), intent(in) :: p ! Pressure - ! Outputs - real(r8), intent(out) :: es ! Saturation vapor pressure - real(r8), intent(out) :: qs ! Saturation specific humidity - - integer, intent(in), optional :: idx ! Scheme index - - es = wv_sat_svp_trans(t, idx) - - qs = wv_sat_svp_to_qsat(es, p) - - ! Ensures returned es is consistent with limiters on qs. - es = min(es, p) - -end subroutine wv_sat_qsat_trans - -!--------------------------------------------------------------------- -! SVP INTERFACE FUNCTIONS -!--------------------------------------------------------------------- - -function wv_sat_svp_water(t, idx) result(es) - real(r8), intent(in) :: t - integer, intent(in), optional :: idx - real(r8) :: es - - integer :: use_idx - - if (present(idx)) then - use_idx = idx - else - use_idx = default_idx - end if - - select case (use_idx) - case(GoffGratch_idx) - es = GoffGratch_svp_water(t) - case(MurphyKoop_idx) - es = MurphyKoop_svp_water(t) - case(Bolton_idx) - es = Bolton_svp_water(t) - end select - -end function wv_sat_svp_water - -subroutine wv_sat_svp_water_vect(t, es, vlen, idx) - integer, intent(in) :: vlen - real(r8), intent(in) :: t(vlen) - integer, intent(in), optional :: idx - real(r8), intent(out) :: es(vlen) - integer :: i - integer :: use_idx - - !$acc data present (t,es) - - if (present(idx)) then - use_idx = idx - else - use_idx = default_idx - end if - - select case (use_idx) - case(GoffGratch_idx) - call GoffGratch_svp_water_vect(t,es,vlen) - case(MurphyKoop_idx) - call MurphyKoop_svp_water_vect(t,es,vlen) - case(Bolton_idx) - call Bolton_svp_water_vect(t,es,vlen) - end select - - !$acc end data -end subroutine wv_sat_svp_water_vect - -function wv_sat_svp_ice(t, idx) result(es) - real(r8), intent(in) :: t - integer, intent(in), optional :: idx - real(r8) :: es - - integer :: use_idx - - if (present(idx)) then - use_idx = idx - else - use_idx = default_idx - end if - - select case (use_idx) - case(GoffGratch_idx) - es = GoffGratch_svp_ice(t) - case(MurphyKoop_idx) - es = MurphyKoop_svp_ice(t) - case(Bolton_idx) - es = Bolton_svp_water(t) - end select - -end function wv_sat_svp_ice - -subroutine wv_sat_svp_ice_vect(t, es, vlen, idx) - integer, intent(in) :: vlen - real(r8), intent(in) :: t(vlen) - integer, intent(in), optional :: idx - real(r8), intent(out) :: es(vlen) - integer :: i - - integer :: use_idx - - !$acc data present (t,es) - - if (present(idx)) then - use_idx = idx - else - use_idx = default_idx - end if - - select case (use_idx) - case(GoffGratch_idx) - call GoffGratch_svp_ice_vect(t,es,vlen) - case(MurphyKoop_idx) - call MurphyKoop_svp_ice_vect(t,es,vlen) - case(Bolton_idx) - call Bolton_svp_water_vect(t,es,vlen) - end select - - !$acc end data -end subroutine wv_sat_svp_ice_vect - -function wv_sat_svp_trans(t, idx) result(es) - - real(r8), intent(in) :: t - integer, intent(in), optional :: idx - real(r8) :: es - - real(r8) :: esice ! Saturation vapor pressure over ice - real(r8) :: weight ! Intermediate scratch variable for es transition - -! -! Water -! - if (t >= (tmelt - ttrice)) then - es = wv_sat_svp_water(t,idx) - else - es = 0.0_r8 - end if - -! -! Ice -! - if (t < tmelt) then - - esice = wv_sat_svp_ice(t,idx) - - if ( (tmelt - t) > ttrice ) then - weight = 1.0_r8 - else - weight = (tmelt - t)/ttrice - end if - - es = weight*esice + (1.0_r8 - weight)*es - end if - -end function wv_sat_svp_trans - -subroutine wv_sat_svp_trans_vect(t, es, vlen, idx) - - integer, intent(in) :: vlen - real(r8), intent(in) :: t(vlen) - integer, intent(in), optional :: idx - real(r8), intent(out) :: es(vlen) - - real(r8) :: esice(vlen) ! Saturation vapor pressure over ice - real(r8) :: weight ! Intermediate scratch variable for es transition - integer :: i - - !$acc data present (t,es) & - !$acc create (esice) - -! -! Water -! - call wv_sat_svp_water_vect(t,es,vlen,idx) - !$acc parallel vector_length(VLENS) default(present) - !$acc loop gang vector - do i = 1, vlen - if (t(i) < (tmelt - ttrice)) then - es(i) = 0.0_r8 - end if - end do - !$acc end parallel -! -! Ice -! - call wv_sat_svp_ice_vect(t,esice,vlen,idx) - !$acc parallel vector_length(VLENS) default(present) - !$acc loop gang vector - do i = 1, vlen - if (t(i) < tmelt) then - if ( (tmelt - t(i)) > ttrice ) then - weight = 1.0_r8 - else - weight = (tmelt - t(i))/ttrice - end if - - es(i) = weight*esice(i) + (1.0_r8 - weight)*es(i) - end if - end do - !$acc end parallel - - !$acc end data -end subroutine wv_sat_svp_trans_vect - -!--------------------------------------------------------------------- -! SVP METHODS -!--------------------------------------------------------------------- - -! Goff & Gratch (1946) - -function GoffGratch_svp_water(t) result(es) - real(r8), intent(in) :: t ! Temperature in Kelvin - real(r8) :: es ! SVP in Pa - - ! uncertain below -70 C - es = 10._r8**(-7.90298_r8*(tboil/t-1._r8)+ & - 5.02808_r8*log10(tboil/t)- & - 1.3816e-7_r8*(10._r8**(11.344_r8*(1._r8-t/tboil))-1._r8)+ & - 8.1328e-3_r8*(10._r8**(-3.49149_r8*(tboil/t-1._r8))-1._r8)+ & - log10(1013.246_r8))*100._r8 - -end function GoffGratch_svp_water - -subroutine GoffGratch_svp_water_vect(t, es, vlen) - integer, intent(in) :: vlen - real(r8), intent(in) :: t(vlen) ! Temperature in Kelvin - real(r8), intent(out) :: es(vlen) ! SVP in Pa - real(r8) :: log_tboil - integer :: i - - !$acc data present (t,es) - - ! Goff, J. A., and S. Gratch. “Low-Pressure Properties of Water from -160F - ! to 212F.” Trans. Am. Soc. Heat. Vent. Eng. 52 (1946): 95–121. - ! uncertain below -70 C - - log_tboil = log10(tboil) - - !$acc parallel vector_length(VLENS) default(present) - !$acc loop gang vector - do i=1,vlen - es(i) = 10._r8**(-7.90298_r8*(tboil/t(i)-1._r8)+ & - 5.02808_r8*(log_tboil-log10(t(i)))- & - 1.3816e-7_r8*(10._r8**(11.344_r8*(1._r8-t(i)/tboil))-1._r8)+ & - 8.1328e-3_r8*(10._r8**(-3.49149_r8*(tboil/t(i)-1._r8))-1._r8)+ & - log10(1013.246_r8))*100._r8 - enddo - !$acc end parallel - - !$acc end data -end subroutine GoffGratch_svp_water_vect - -function GoffGratch_svp_ice(t) result(es) - real(r8), intent(in) :: t ! Temperature in Kelvin - real(r8) :: es ! SVP in Pa - - ! good down to -100 C - es = 10._r8**(-9.09718_r8*(h2otrip/t-1._r8)-3.56654_r8* & - log10(h2otrip/t)+0.876793_r8*(1._r8-t/h2otrip)+ & - log10(6.1071_r8))*100._r8 - -end function GoffGratch_svp_ice - -subroutine GoffGratch_svp_ice_vect(t, es, vlen) - integer, intent(in) :: vlen - real(r8), intent(in) :: t(vlen) ! Temperature in Kelvin - real(r8), intent(out) :: es(vlen) ! SVP in Pa - real(r8), parameter :: log_param = log10(6.1071_r8) - integer :: i - ! good down to -100 C - - !$acc data present (t,es) - - !$acc parallel vector_length(VLENS) default(present) - !$acc loop gang vector - do i=1,vlen - es(i) = 10._r8**(-9.09718_r8*(h2otrip/t(i)-1._r8)-3.56654_r8* & - log10(h2otrip/t(i))+0.876793_r8*(1._r8-t(i)/h2otrip)+ & - log_param)*100._r8 - enddo - !$acc end parallel - - !$acc end data -end subroutine GoffGratch_svp_ice_vect - -! Murphy & Koop (2005) - -function MurphyKoop_svp_water(t) result(es) - real(r8), intent(in) :: t ! Temperature in Kelvin - real(r8) :: es ! SVP in Pa - - ! (good for 123 < T < 332 K) - es = exp(54.842763_r8 - (6763.22_r8 / t) - (4.210_r8 * log(t)) + & - (0.000367_r8 * t) + (tanh(0.0415_r8 * (t - 218.8_r8)) * & - (53.878_r8 - (1331.22_r8 / t) - (9.44523_r8 * log(t)) + & - 0.014025_r8 * t))) - -end function MurphyKoop_svp_water - -subroutine MurphyKoop_svp_water_vect(t, es, vlen) - integer, intent(in) :: vlen - real(r8), intent(in) :: t(vlen) ! Temperature in Kelvin - real(r8), intent(out) :: es(vlen) ! SVP in Pa - - integer :: i - ! Murphy, D. M., and T. Koop. “Review of the Vapour Pressure of Ice and - ! Supercooled Water for Atmospheric Applications.” Q. J. R. Meteorol. - ! Soc. 131, no. 608 (2005): 1539–65. 10.1256/qj.04.94 - ! (good for 123 < T < 332 K) - - !$acc data present (t,es) - - !$acc parallel vector_length(VLENS) default(present) - !$acc loop gang vector - do i = 1, vlen - es(i) = exp(54.842763_r8 - (6763.22_r8 / t(i)) - (4.210_r8 * log(t(i))) + & - (0.000367_r8 * t(i)) + (tanh(0.0415_r8 * (t(i) - 218.8_r8)) * & - (53.878_r8 - (1331.22_r8 / t(i)) - (9.44523_r8 * log(t(i))) + & - 0.014025_r8 * t(i)))) - end do - !$acc end parallel - - !$acc end data -end subroutine MurphyKoop_svp_water_vect - -function MurphyKoop_svp_ice(t) result(es) - real(r8), intent(in) :: t ! Temperature in Kelvin - real(r8) :: es ! SVP in Pa - - ! (good down to 110 K) - es = exp(9.550426_r8 - (5723.265_r8 / t) + (3.53068_r8 * log(t)) & - - (0.00728332_r8 * t)) - -end function MurphyKoop_svp_ice - -subroutine MurphyKoop_svp_ice_vect(t, es, vlen) - integer, intent(in) :: vlen - real(r8), intent(in) :: t(vlen) ! Temperature in Kelvin - real(r8), intent(out) :: es(vlen) ! SVP in Pa - - integer :: i - ! (good down to 110 K) - - !$acc data present (t,es) - - !$acc parallel vector_length(VLENS) default(present) - !$acc loop gang vector - do i = 1, vlen - es(i) = exp(9.550426_r8 - (5723.265_r8 / t(i)) + (3.53068_r8 * log(t(i))) & - - (0.00728332_r8 * t(i))) - end do - !$acc end parallel - - !$acc end data -end subroutine MurphyKoop_svp_ice_vect - -! Bolton (1980) -! zm_conv deep convection scheme contained this SVP calculation. -! It appears to be from D. Bolton, 1980, Monthly Weather Review. -! Unlike the other schemes, no distinct ice formula is associated -! with it. (However, a Bolton ice formula exists in CLUBB.) - -! The original formula used degrees C, but this function -! takes Kelvin and internally converts. - -function Bolton_svp_water(t) result(es) - real(r8),parameter :: c1 = 611.2_r8 - real(r8),parameter :: c2 = 17.67_r8 - real(r8),parameter :: c3 = 243.5_r8 - - real(r8), intent(in) :: t ! Temperature in Kelvin - real(r8) :: es ! SVP in Pa - - es = c1*exp( (c2*(t - tmelt))/((t - tmelt)+c3) ) - -end function Bolton_svp_water - -subroutine Bolton_svp_water_vect(t, es,vlen) - real(r8),parameter :: c1 = 611.2_r8 - real(r8),parameter :: c2 = 17.67_r8 - real(r8),parameter :: c3 = 243.5_r8 - - integer, intent(in) :: vlen - real(r8), intent(in) :: t(vlen) ! Temperature in Kelvin - real(r8), intent(out) :: es(vlen) ! SVP in Pa - - integer :: i - - !$acc data present (t,es) - - !$acc parallel vector_length(VLENS) default(present) - !$acc loop gang vector - do i = 1, vlen - es(i) = c1*exp( (c2*(t(i) - tmelt))/((t(i) - tmelt)+c3) ) - end do - !$acc end parallel - - !$acc end data -end subroutine Bolton_svp_water_vect - -end module wv_sat_methods From 3ec547cfe4f81211812173807b7d0ee6c5f8219d Mon Sep 17 00:00:00 2001 From: Cheryl Craig Date: Wed, 16 Jul 2025 14:40:55 -0600 Subject: [PATCH 10/26] Add hackathon work from Kate and Cheryl --- .../sima_diagnostics/pumas_diagnostics.F90 | 2146 +++++++++++++++++ .../pumas_diagnostics_calling.F90 | 139 ++ 2 files changed, 2285 insertions(+) create mode 100644 schemes/sima_diagnostics/pumas_diagnostics.F90 create mode 100644 schemes/sima_diagnostics/pumas_diagnostics_calling.F90 diff --git a/schemes/sima_diagnostics/pumas_diagnostics.F90 b/schemes/sima_diagnostics/pumas_diagnostics.F90 new file mode 100644 index 00000000..a07c1493 --- /dev/null +++ b/schemes/sima_diagnostics/pumas_diagnostics.F90 @@ -0,0 +1,2146 @@ +!CACNOTE - All outfld calls to history_out_field are converted + - All history_add_field calls are done + - Except the constituent history_add_field needs to be changed - see CACNOTE + - Need to replace "#" in units? + - need to line up calls +!!!---------------------------------------------- + +module pumas_diagnostics + + use ccpp_kinds, only: kind_phys + + implicit none + private + save + + public :: pumas_diagnostics_init ! init routine + public :: pumas_diagnostics_run ! main routine + +CONTAINS + +!> \section arg_table_pumas_diagnostics_init Argument Table +!! \htmlinclude pumas_diagnostics_init.html +subroutine pumas_diagnostics_init(errmsg, errflg) + + use cam_history, only: history_add_field + use cam_history_support, only: horiz_only + + character(len=512), intent(out) :: errmsg + integer, intent(out) :: errflg + + ! Local variables: + + errmsg = '' + errflg = 0 + + ! NOTE -subcyc comments below mean that the original CAM code had "sampled_on_subcycle=.true." in the old outfld call + ! Will use this for guidance during future developmen + +!CACNOTE - come back to this - did not convert get the constituent info yet + + do m = 1, ncnst + call cnst_get_ind(cnst_names(m), mm) + if ( any(mm == (/ ixcldliq, ixcldice, ixrain, ixsnow, ixgraupel /)) ) then + ! mass mixing ratios + call history_add_field(cnst_name(mm), cnst_longname(mm), 'lev', 'avg', 'kg kg-1') !subcyc + call history_add_field(sflxnam(mm), trim(cnst_name(mm))//' surface flux', horiz_only, 'avg', 'kg m-2 s-1') !subcyc + else if ( any(mm == (/ ixnumliq, ixnumice, ixnumrain, ixnumsnow, ixnumgraupel /)) ) then + ! number concentrations + call history_add_field(cnst_name(mm), cnst_longname(mm), 'lev', 'avg', 'kg-1') !subcyc + call history_add_field(sflxnam(mm), trim(cnst_name(mm))//' surface flux', horiz_only, 'avg', '1 m-2 s-1') !subcyc + else + call endrun( "micro_pumas_cam_init: & + &Could not call history_add_field for constituent with unknown units.") + endif + end do + + call history_add_field(apcnst(ixcldliq), trim(cnst_name(ixcldliq))//' after physics', 'lev', 'avg', 'kg kg-1') !subcyc + call history_add_field(apcnst(ixcldice), trim(cnst_name(ixcldice))//' after physics', 'lev', 'avg', 'kg kg-1') !subcyc + call history_add_field(bpcnst(ixcldliq), trim(cnst_name(ixcldliq))//' before physics','lev', 'avg', 'kg kg-1') !subcyc + call history_add_field(bpcnst(ixcldice), trim(cnst_name(ixcldice))//' before physics','lev', 'avg', 'kg kg-1') !subcyc + + call history_add_field(apcnst(ixrain), trim(cnst_name(ixrain))//' after physics', 'lev', 'avg', 'kg kg-1') !subcyc + call history_add_field(apcnst(ixsnow), trim(cnst_name(ixsnow))//' after physics', 'lev', 'avg', 'kg kg-1') !subcyc + call history_add_field(bpcnst(ixrain), trim(cnst_name(ixrain))//' before physics','lev', 'avg', 'kg kg-1') !subcyc + call history_add_field(bpcnst(ixsnow), trim(cnst_name(ixsnow))//' before physics','lev', 'avg', 'kg kg-1') !subcyc + + if (micro_mg_version > 2) then + call history_add_field(apcnst(ixgraupel), trim(cnst_name(ixgraupel))//' after physics', 'lev', 'avg', 'kg kg-1') !subcyc + call history_add_field(bpcnst(ixgraupel), trim(cnst_name(ixgraupel))//' before physics','lev', 'avg', 'kg kg-1') !subcyc + end if + + call history_add_field ('CME', 'Rate of cond-evap within the cloud', 'lev', 'avg', 'kg kg-1 s-1') !subcyc + call history_add_field ('PRODPREC', 'Rate of conversion of condensate to precip','lev', 'avg', 'kg kg-1 s-1') !subcyc + call history_add_field ('EVAPPREC', 'Rate of evaporation of falling precip', 'lev', 'avg', 'kg kg-1 s-1') !subcyc + call history_add_field ('EVAPSNOW', 'Rate of evaporation of falling snow', 'trop_cld_lev','avg', 'kg kg-1 s-1') !subcyc + call history_add_field ('HPROGCLD', 'Heating from prognostic clouds', 'lev', 'avg', 'W kg-1' ) !subcyc + call history_add_field ('FICE', 'Fractional ice content within cloud', 'lev', 'avg', 'fraction') !subcyc + call history_add_field ('CLDFSNOW', 'Cloud fraction adjusted for snow', 'lev', 'avg', '1' ) !subcyc + call history_add_field ('ICWMRST', 'Prognostic in-stratus water mixing ratio', 'lev', 'avg', 'kg kg-1') !subcyc + call history_add_field ('ICIMRST', 'Prognostic in-stratus ice mixing ratio', 'lev', 'avg', 'kg kg-1') !subcyc + + ! MG microphysics diagnostics + call history_add_field ('QCSEVAP', 'Rate of evaporation of falling cloud water', 'trop_cld_lev', 'avg', 'kg kg-1 s-1') !subcyc + call history_add_field ('QISEVAP', 'Rate of sublimation of falling cloud ice', 'trop_cld_lev', 'avg', 'kg kg-1 s-1') !subcyc + call history_add_field ('QVRES', 'Rate of residual condensation term', 'trop_cld_lev', 'avg', 'kg kg-1 s-1') !subcyc + call history_add_field ('CMEIOUT', 'Rate of deposition/sublimation of cloud ice', 'trop_cld_lev', 'avg', 'kg kg-1/s') !subcyc + call history_add_field ('VTRMC', 'Mass-weighted cloud water fallspeed', 'trop_cld_lev', 'avg', 'm s-1') !subcyc + call history_add_field ('VTRMI', 'Mass-weighted cloud ice fallspeed', 'trop_cld_lev', 'avg', 'm s-1') !subcyc + + call history_add_field ('QCSEDTEN','Cloud water mixing ratio tendency from sedimentation', 'trop_cld_lev', 'avg', & + 'kg kg-1 s-1') !subcyc + call history_add_field ('QISEDTEN','Cloud ice mixing ratio tendency from sedimentation', 'trop_cld_lev', 'avg', & + 'kg kg-1 s-1') !subcyc + + call history_add_field ('PRAO', 'Accretion of cloud water by rain', 'lev', 'avg', 'kg kg-1 s-1') !subcyc + call history_add_field ('PRCO', 'Autoconversion of cloud water', 'lev', 'avg', 'kg kg-1 s-1') !subcyc + call history_add_field ('MNUCCCO', 'Immersion freezing of cloud water', 'lev', 'avg', 'kg kg-1 s-1') !subcyc + call history_add_field ('MNUCCTO', 'Contact freezing of cloud water', 'lev', 'avg', 'kg kg-1 s-1') !subcyc + + call history_add_field ('MNUCCDO', 'Homogeneous and heterogeneous nucleation from vapor', 'trop_cld_lev', 'avg', & + 'kg kg-1 s-1') !subcyc + + call history_add_field ('MNUCCDOhet', 'Heterogeneous nucleation from vapor', 'lev', 'avg', 'kg kg-1 s-1') !subcyc + call history_add_field ('MSACWIO', 'Conversion of cloud water from rime-splintering', 'lev', 'avg', 'kg kg-1 s-1') !subcyc + call history_add_field ('PSACWSO', 'Accretion of cloud water by snow', 'lev', 'avg', 'kg kg-1 s-1') !subcyc + call history_add_field ('BERGSO', 'Conversion of cloud water to snow from bergeron', 'lev', 'avg', 'kg kg-1 s-1') !subcyc + call history_add_field ('BERGO', 'Conversion of cloud water to cloud ice from bergeron','lev', 'avg', 'kg kg-1 s-1') !subcyc + + call history_add_field ('MELTO', 'Melting of cloud ice', 'lev', 'avg', 'kg kg-1 s-1') !subcyc + call history_add_field ('MELTSTOT', 'Melting of snow', 'trop_cld_lev', 'avg', 'kg kg-1 s-1') !subcyc + call history_add_field ('MNUDEPO', 'Deposition Nucleation', 'trop_cld_lev', 'avg', 'kg kg-1 s-1') !subcyc + call history_add_field ('HOMOO', 'Homogeneous freezing of cloud water', 'lev', 'avg', 'kg kg-1 s-1') !subcyc + call history_add_field ('QCRESO', 'Residual condensation term for cloud water', 'lev', 'avg', 'kg kg-1 s-1') !subcyc + call history_add_field ('PRCIO', 'Autoconversion of cloud ice to snow', 'lev', 'avg', 'kg kg-1 s-1') !subcyc + call history_add_field ('PRAIO', 'Accretion of cloud ice to snow', 'lev', 'avg', 'kg kg-1 s-1') !subcyc + call history_add_field ('QIRESO', 'Residual deposition term for cloud ice', 'lev', 'avg', 'kg kg-1 s-1') !subcyc + call history_add_field ('MNUCCRO', 'Heterogeneous freezing of rain to snow', 'trop_cld_lev', 'avg', 'kg kg-1 s-1') !subcyc + call history_add_field ('MNUCCRIO', 'Heterogeneous freezing of rain to ice', 'trop_cld_lev', 'avg', 'kg kg-1 s-1') !subcyc + call history_add_field ('PRACSO', 'Accretion of rain by snow', 'trop_cld_lev', 'avg', 'kg kg-1 s-1') !subcyc + call history_add_field ('VAPDEPSO', 'Vapor deposition onto snow', 'trop_cld_lev', 'avg', 'kg kg-1 s-1') !subcyc + call history_add_field ('MELTSDT', 'Latent heating rate due to melting of snow', 'trop_cld_lev', 'avg', 'W kg-1') !subcyc + + call history_add_field ('FRZRDT', 'Latent heating rate due to homogeneous freezing of rain', 'trop_cld_lev', 'avg', & + 'W kg-1') !subcyc + call history_add_field ('QRSEDTEN', 'Rain mixing ratio tendency from sedimentation', 'trop_cld_lev', 'avg', & + 'kg kg-1 s-1') !subcyc + call history_add_field ('QSSEDTEN', 'Snow mixing ratio tendency from sedimentation', 'trop_cld_lev', 'avg', & + 'kg kg-1 s-1'' !subcyc + call history_add_field ('NNUCCCO', 'Number Tendency due to Immersion freezing of cloud water', 'trop_cld_lev', 'avg', & + '# kg-1 s-1') !subcyc + call history_add_field ('NNUCCTO', 'Number Tendency due to Contact freezing of cloud water', 'trop_cld_lev', 'avg', & + '# kg-1 s-1') !subcyc + call history_add_field ('NNUCCDO', 'Number Tendency due to Ice nucleation', 'trop_cld_lev', 'avg', & + '# kg-1 s-1'') !subcyc + call history_add_field ('NNUDEPO', 'Number Tendency due to Deposition Nucleation', 'trop_cld_lev', 'avg', & + '# kg-1 s-1') !subcyc + call history_add_field ('NHOMO', 'Number Tendency due to Homogeneous freezing of cloud water', 'trop_cld_lev', 'avg', & + '# kg-1 s-1') !subcyc + call history_add_field ('NNUCCRO', 'Number Tendency due to heterogeneous freezing of rain to snow', 'trop_cld_lev', 'avg', & + '# kg-1 s-1') !subcyc + call history_add_field ('NNUCCRIO', 'Number Tendency due to Heterogeneous freezing of rain to ice', 'trop_cld_lev', 'avg', & + '# kg-1 s-1') !subcyc + call history_add_field ('NSACWIO', 'Number Tendency due to Ice Multiplication- Rime-splintering', 'trop_cld_lev', 'avg', & + '# kg-1 s-1') !subcyc + call history_add_field ('NPRAO', 'Number Tendency due to Accretion of cloud water by rain', 'trop_cld_lev', 'avg', & + '# kg-1 s-1') !subcyc + call history_add_field ('NPSACWSO', 'Number Tendency due to Accretion of cloud water by snow', 'trop_cld_lev', 'avg', & + '# kg-1 s-1') !subcyc + call history_add_field ('NPRAIO', 'Number Tendency due to Accretion of cloud ice to snow', 'trop_cld_lev', 'avg', & + '# kg-1 s-1') !subcyc + call history_add_field ('NPRACSO', 'Number Tendency due to Accretion of rain by snow', 'trop_cld_lev', 'avg', & + '# kg-1 s-1') !subcyc + call history_add_field ('NPRCO', 'Number Tendency due to Autoconversion of cloud water [to rain]','trop_cld_lev', 'avg', & + '# kg-1 s-1') !subcyc + call history_add_field ('NPRCIO', 'Number Tendency due to Autoconversion of cloud ice to snow', 'trop_cld_lev', 'avg', & + '# kg-1 s-1') !subcyc + call history_add_field ('NCSEDTEN', 'Number Tendency due to cloud liquid sedimentation', 'trop_cld_lev', 'avg', & + '# kg-1 s-1') !subcyc + call history_add_field ('NISEDTEN', 'Number Tendency due to cloud ice sedimentation', 'trop_cld_lev', 'avg', & + '# kg-1 s-1') !subcyc + + call history_add_field ('NRSEDTEN', 'Number Tendency due to rain sedimentation', 'trop_cld_lev', 'avg', '# kg-1 s-1') !subcyc + call history_add_field ('NSSEDTEN', 'Number Tendency due to snow sedimentation', 'trop_cld_lev', 'avg', '# kg-1 s-1') !subcyc + call history_add_field ('NMELTO', 'Number Tendency due to Melting of cloud ice', 'trop_cld_lev', 'avg', '# kg-1 s-1') !subcyc + call history_add_field ('NMELTS', 'Number Tendency due to Melting of snow', 'trop_cld_lev', 'avg', '# kg-1 s-1') !subcyc + + if (trim(micro_mg_warm_rain) == 'kk2000') then + call history_add_field ('qctend_KK2000', 'cloud liquid mass tendency due to autoconversion accretion from KK2000', & + 'trop_cld_lev', 'avg', 'kg kg-1 s-1') !subcyc + call history_add_field ('nctend_KK2000', 'cloud number mass tendency due to autoconversion accretion from KK2000', & + 'trop_cld_lev', 'avg', '# kg-1 s-1') !subcyc + call history_add_field ('qrtend_KK2000', 'rain mass tendency due to autoconversion accretion from KK2000', & + 'trop_cld_lev', 'avg', 'kg kg-1 s-1') !subcyc + call history_add_field ('nrtend_KK2000', 'rain number tendency due to autoconversion accretion from KK2000', & + 'trop_cld_lev', 'avg', '# kg-1 s-1') !subcyc + end if + + if (trim(micro_mg_warm_rain) == 'sb2001') then + call history_add_field ('qctend_SB2001', 'cloud liquid mass tendency due to autoconversion accretion from SB2001', & + 'trop_cld_lev', 'avg', 'kg kg-1 s-1') !subcyc + call history_add_field ('nctend_SB2001', 'cloud liquid number tendency due to autoconversion accretion from SB2001', & + 'trop_cld_lev', 'avg', '# kg-1 s-1') !subcyc + call history_add_field ('qrtend_SB2001', 'rain mass tendency due to autoconversion accretion from SB2001'), & + 'trop_cld_lev', 'avg', 'kg kg-1 s-1') !subcyc + call history_add_field ('nrtend_SB2001', 'rain number tendency due to autoconversion accretion from SB2001', & + 'trop_cld_lev', 'avg', '# kg-1 s-1') !subcyc + end if + + call history_add_field ('LAMC', 'Size distribution parameter lambda for liquid', 'trop_cld_lev', 'avg', 'unitless') !subcyc + call history_add_field ('LAMR', 'Size distribution parameter lambda for rain', 'trop_cld_lev', 'avg', 'unitless') !subcyc + call history_add_field ('PGAM', 'Size distribution parameter mu (pgam) for liquid', 'trop_cld_lev', 'avg', 'unitless') !subcyc + call history_add_field ('N0R', 'Size distribution parameter n0 for rain', 'trop_cld_lev', 'avg', 'unitless') !subcyc + + if (micro_mg_version > 2) then + call history_add_field ('NMELTG', 'Number Tendency due to Melting of graupel', 'trop_cld_lev', 'avg', & + '# kg-1 s-1') !subcyc + call history_add_field ('NGSEDTEN', 'Number Tendency due to graupel sedimentation', 'trop_cld_lev', 'avg', & + '# kg-1 s-1') !subcyc + call history_add_field ('PSACRO', 'Collisions between rain & snow (Graupel collecting snow)', 'lev', 'avg', & + 'kg kg-1 s-1') !subcyc + call history_add_field ('PRACGO', 'Change in q collection rain by graupel', 'lev', 'avg', & + 'kg kg-1 s-1') !subcyc + call history_add_field ('PSACWGO', 'Change in q collection droplets by graupel', 'lev', 'avg', & + 'kg kg-1 s-1') !subcyc + call history_add_field ('PGSACWO', 'Q conversion to graupel due to collection droplets by snow','lev', 'avg', & + 'kg kg-1 s-1') !subcyc + call history_add_field ('PGRACSO', 'Q conversion to graupel due to collection rain by snow', 'lev', 'avg', & + 'kg kg-1 s-1') !subcyc + + call history_add_field ('PRDGO', 'Deposition of graupel', 'lev', & + 'avg', 'kg kg-1 s-1') !subcyc + call history_add_field ('QMULTGO', 'Q change due to ice mult droplets/graupel', 'lev', & + 'avg', 'kg kg-1 s-1') !subcyc + call history_add_field ('QMULTRGO', 'Q change due to ice mult rain/graupel', 'lev', & + 'avg', 'kg kg-1 s-1') !subcyc + call history_add_field ('QGSEDTEN', 'Graupel/Hail mixing ratio tendency from sedimentation', 'trop_cld_lev', & + 'avg', 'kg kg-1 s-1') !subcyc + call history_add_field ('NPRACGO', 'Change N collection rain by graupel', 'lev', & + 'avg', '# kg-1 s-1') !subcyc + call history_add_field ('NSCNGO', 'Change N conversion to graupel due to collection droplets by snow','lev', & + 'avg', '# kg-1 s-1' ) !subcyc + call history_add_field ('NGRACSO', 'Change N conversion to graupel due to collection rain by snow', 'lev', & + 'avg', '# kg-1 s-1') !subcyc + call history_add_field ('NMULTGO', 'Ice mult due to acc droplets by graupel', 'lev', & + 'avg', '# kg-1 s-1') !subcyc + call history_add_field ('NMULTRGO', 'Ice mult due to acc rain by graupel', 'lev', & + 'avg', '# kg-1 s-1') !subcyc + call history_add_field ('NPSACWGO', 'Change N collection droplets by graupel', 'lev', & + 'avg', '# kg-1 s-1') !subcyc + call history_add_field ('CLDFGRAU', 'Cloud fraction adjusted for graupel', 'lev', & + 'avg', '1') !subcyc + call history_add_field ('MELTGTOT', 'Melting of graupel', 'trop_cld_lev', & + 'avg', 'kg kg-1 s-1') !subcyc + end if + + + call history_add_field ('RBFRAC', 'Fraction of sky covered by a potential rainbow', horiz_only, 'avg', 'Fraction') !subcyc + call history_add_field ('RBFREQ', 'Potential rainbow frequency', horiz_only, 'avg', 'Frequency') !subcyc + call history_add_field( 'rbSZA', 'solar zenith angle', horiz_only, 'inst', 'degrees') !subcyc + + ! History variables for CAM5 microphysics + call history_add_field ('MPDT', 'Heating tendency - Morrison microphysics', 'lev', 'avg', 'W kg-1') !subcyc + call history_add_field ('MPDQ', 'Q tendency - Morrison microphysics', 'lev', 'avg', 'kg kg-1 s-1') !subcyc + call history_add_field ('MPDLIQ', 'CLDLIQ tendency - Morrison microphysics', 'lev', 'avg', 'kg kg-1 s-1') !subcyc + call history_add_field ('MPDICE', 'CLDICE tendency - Morrison microphysics', 'lev', 'avg', 'kg kg-1 s-1') !subcyc + call history_add_field ('MPDNLIQ', 'NUMLIQ tendency - Morrison microphysics', 'lev', 'avg', 'kg-1 s-1') !subcyc + call history_add_field ('MPDNICE', 'NUMICE tendency - Morrison microphysics'), 'lev', 'avg', 'kg-1 s-1') !subcyc + call history_add_field ('MPDW2V', 'Water <--> Vapor tendency - Morrison microphysics', 'lev', 'avg', 'kg kg-1 s-1') !subcyc + call history_add_field ('MPDW2I', 'Water <--> Ice tendency - Morrison microphysics', 'lev', 'avg', 'kg kg-1 s-1') !subcyc + call history_add_field ('MPDW2P', 'Water <--> Precip tendency - Morrison microphysics', 'lev', 'avg', 'kg kg-1 s-1') !subcyc + call history_add_field ('MPDI2V', 'Ice <--> Vapor tendency - Morrison microphysics', 'lev', 'avg', 'kg kg-1 s-1') !subcyc + call history_add_field ('MPDI2W', 'Ice <--> Water tendency - Morrison microphysics', 'lev', 'avg', 'kg kg-1 s-1') !subcyc + call history_add_field ('MPDI2P', 'Ice <--> Precip tendency - Morrison microphysics', 'lev', 'avg', 'kg kg-1 s-1') !subcyc + call history_add_field ('ICWNC', 'Prognostic in-cloud water number conc', 'lev', 'avg', 'm-3') !subcyc + call history_add_field ('ICINC', 'Prognostic in-cloud ice number conc', 'lev', 'avg', 'm-3') !subcyc + call history_add_field ('EFFLIQ_IND','Prognostic droplet effective radius (indirect effect)','lev', 'avg','Micron') !subcyc + + call history_add_field ('CDNUMC', 'Vertically-integrated droplet concentration', horiz_only, 'avg', & + '1 m-2') !subcyc + call history_add_field ('MPICLWPI', 'Vertically-integrated in-cloud Initial Liquid WP (Before Micro)', horiz_only, 'avg', & + 'kg m-2') !subcyc + call history_add_field ('MPICIWPI', 'Vertically-integrated in-cloud Initial Ice WP (Before Micro)', horiz_only, 'avg', & + 'kg m-2') !subcyc + + + ! This is only if the coldpoint temperatures are being adjusted. + ! NOTE: Some fields related to these and output later are added in tropopause.F90. + if (micro_mg_adjust_cpt) then + call history_add_field ('TROPF_TADJ', 'Temperatures after cold point adjustment', 'lev', 'avg', 'K') !subcyc + call history_add_field ('TROPF_RHADJ','Relative Hunidity after cold point adjustment', 'lev', 'avg', 'K') !subcyc + call history_add_field ('TROPF_CDT', 'Cold point temperature adjustment', horiz_only, 'avg', 'K') !subcyc + call history_add_field ('TROPF_CDZ', 'Distance of coldpoint from coldest model level', horiz_only, 'avg', 'm') !subcyc + end if + + + ! Averaging for cloud particle number and size + call history_add_field ('AWNC', 'Average cloud water number conc', 'lev', 'avg', 'm-3') !subcyc + call history_add_field ('AWNI', 'Average cloud ice number conc', 'lev', 'avg', 'm-3') !subcyc + call history_add_field ('AREL', 'Average droplet effective radius', 'lev', 'avg', 'Micron') !subcyc + call history_add_field ('AREI', 'Average ice effective radius', 'lev', 'avg', 'Micron') !subcyc + ! Frequency arrays for above + call history_add_field ('FREQL', 'Fractional occurrence of liquid', 'lev', 'avg', 'fraction') !subcyc + call history_add_field ('FREQI', 'Fractional occurrence of ice', 'lev', 'avg', 'fraction') !subcyc + + + ! Average cloud top particle size and number (liq, ice) and frequency + call history_add_field ('ACTREL', 'Average Cloud Top droplet effective radius', horiz_only, 'avg', 'Micron') !subcyc + call history_add_field ('ACTREI', 'Average Cloud Top ice effective radius', horiz_only, 'avg', 'Micron') !subcyc + call history_add_field ('ACTNL', 'Average Cloud Top droplet number', horiz_only, 'avg', 'm-3') !subcyc + call history_add_field ('ACTNI', 'Average Cloud Top ice number', horiz_only, 'avg', 'm-3') !subcyc + + call history_add_field ('FCTL', 'Fractional occurrence of cloud top liquid', horiz_only, 'avg', 'fraction') !subcyc + call history_add_field ('FCTI', 'Fractional occurrence of cloud top ice', horiz_only, 'avg', 'fraction') !subcyc + + ! New frequency arrays for mixed phase and supercooled liquid (only and mixed) for (a) Cloud Top and (b) everywhere.. + call history_add_field ('FREQM', 'Fractional occurrence of mixed phase', 'lev', 'avg', 'fraction') !subcyc + call history_add_field ('FREQSL', 'Fractional occurrence of only supercooled liquid', 'lev', 'avg', 'fraction') !subcyc + call history_add_field ('FREQSLM', 'Fractional occurrence of super cooled liquid with ice','lev', 'avg', 'fraction') !subcyc + + call history_add_field ('FCTM', 'Fractional occurrence of cloud top mixed phase', horiz_only, 'avg', & + 'fraction') !subcyc + call history_add_field ('FCTSL', 'Fractional occurrence of cloud top only supercooled liquid', horiz_only, 'avg', & + 'fraction') !subcyc + call history_add_field ('FCTSLM', 'Fractional occurrence of cloud top super cooled liquid with ice',horiz_only, 'avg', & + 'fraction') !subcyc + + call history_add_field ('LS_FLXPRC', 'ls stratiform gbm interface rain+snow flux', 'ilev', 'avg', 'kg m-2 s-1') !subcyc + call history_add_field ('LS_FLXSNW', 'ls stratiform gbm interface snow flux', 'ilev', 'avg', 'kg m-2 s-1') !subcyc + + call history_add_field ('REL', 'MG REL stratiform cloud effective radius liquid', 'lev', 'avg', 'micron') !subcyc + call history_add_field ('REI', 'MG REI stratiform cloud effective radius ice', 'lev', 'avg', 'micron') !subcyc + call history_add_field ('LS_REFFRAIN', 'ls stratiform rain effective radius', 'lev', 'avg', 'micron') !subcyc + call history_add_field ('LS_REFFSNOW','ls stratiform snow effective radius', 'lev', 'avg', 'micron') !subcyc + call history_add_field ('CV_REFFLIQ', 'convective cloud liq effective radius', 'lev', 'avg', 'micron') !subcyc + call history_add_field ('CV_REFFICE', 'convective cloud ice effective radius, , 'lev' 'avg', 'micron') !subcyc + call history_add_field ('MG_SADICE', 'MG surface area density ice', 'lev', 'avg', 'cm2 cm-3') !subcyc + call history_add_field ('MG_SADSNOW', 'MG surface area density snow', 'lev', 'avg', 'cm2 cm-3') !subcyc + + ! diagnostic precip + call history_add_field ('QRAIN', 'Diagnostic grid-mean rain mixing ratio', 'lev', 'avg', 'kg kg-1') !subcyc + call history_add_field ('QSNOW', 'Diagnostic grid-mean snow mixing ratio', 'lev', 'avg', 'kg kg-1') !subcyc + call history_add_field ('NRAIN', 'Diagnostic grid-mean rain number conc', 'lev', 'avg', 'm-3') !subcyc + call history_add_field ('NSNOW', 'Diagnostic grid-mean snow number conc', 'lev', 'avg', 'm-3') !subcyc + + ! size of precip + call history_add_field ('RERCLD', 'Diagnostic effective radius of Liquid Cloud and Rain', 'lev', 'avg', 'm') !subcyc + call history_add_field ('DSNOW', 'Diagnostic grid-mean snow diameter', 'lev', 'avg', 'm') !subcyc + + ! diagnostic radar reflectivity, cloud-averaged + call history_add_field ('REFL', '94 GHz radar reflectivity', 'lev', 'avg', 'DBz') !subcyc + call history_add_field ('AREFL', 'Average 94 GHz radar reflectivity', 'lev', 'avg', 'DBz') !subcyc + call history_add_field ('FREFL', 'Fractional occurrence of radar reflectivity', 'lev', 'avg', 'fraction') !subcyc + + call history_add_field ('CSRFL', '94 GHz radar reflectivity (CloudSat thresholds)', 'lev', 'avg', 'DBz') !subcyc + call history_add_field ('ACSRFL', 'Average 94 GHz radar reflectivity (CloudSat thresholds)', 'lev', 'avg', 'DBz') !subcyc + + call history_add_field ('FCSRFL', 'Fractional occurrence of radar reflectivity (CloudSat thresholds)', 'lev', 'avg', & + 'fraction') !subcyc + + call history_add_field ('AREFLZ', 'Average 94 GHz radar reflectivity', 'lev', 'avg', 'mm6 m-3') !subcyc + + ! 10cm (rain) radar reflectivity + call history_add_field ('REFL10CM', '10cm (Rain) radar reflectivity (Dbz)', 'lev', 'avg', 'DBz') !subcyc + call history_add_field ('REFLZ10CM', '10cm (Rain) radar reflectivity (Z units)', 'lev', 'avg', 'mm6 m-3') !subcyc + + ! Aerosol information + call history_add_field ('NCAL', 'Number Concentation Activated for Liquid', 'lev', 'avg', 'm-3') !subcyc + call history_add_field ('NCAI', 'Number Concentation Activated for Ice', 'lev', 'avg', 'm-3') !subcyc + + ! Average rain and snow mixing ratio (Q), number (N) and diameter (D), with frequency + call history_add_field ('AQRAIN', 'Average rain mixing ratio', 'lev', 'avg', 'kg kg-1') !subcyc + call history_add_field ('AQSNOW', 'Average snow mixing ratio', 'lev', 'avg', 'kg kg-1') !subcyc + call history_add_field ('ANRAIN', 'Average rain number conc', 'lev', 'avg', 'm-3') !subcyc + call history_add_field ('ANSNOW', 'Average snow number conc', 'lev', 'avg', 'm-3') !subcyc + call history_add_field ('ADRAIN', 'Average rain effective Diameter', 'lev', 'avg', 'm') !subcyc + call history_add_field ('ADSNOW', 'Average snow effective Diameter', 'lev', 'avg', 'm') !subcyc + call history_add_field ('FREQR', 'Fractional occurrence of rain', 'lev', 'avg', 'fraction') !subcyc + call history_add_field ('FREQS', 'Fractional occurrence of snow', 'lev', 'avg', 'fraction') !subcyc + + ! precipitation efficiency & other diagnostic fields + call history_add_field('PE' , 'Stratiform Precipitation Efficiency (precip/cmeliq)', horiz_only, 'avg', & + '1') !subcyc + call history_add_field('APRL' , 'Average Stratiform Precip Rate over efficiency calculation', horiz_only, 'avg', & + 'm s-1') !subcyc + + call history_add_field('PEFRAC', 'Fraction of timesteps precip efficiency reported', horiz_only, 'avg', '1') !subcyc + call history_add_field('VPRCO' , 'Vertical average of autoconversion rate', horiz_only, 'avg', 'kg kg-1 s-1') !subcyc + call history_add_field('VPRAO' , 'Vertical average of accretion rate', horiz_only, 'avg', 'kg kg-1 s-1') !subcyc + call history_add_field('RACAU' , 'Accretion/autoconversion ratio from vertical average',horiz_only, 'avg', 'kg kg-1 s-1') !subcyc + + call history_add_field('UMR','Mass-weighted rain fallspeed', 'trop_cld_lev', 'avg', 'm s-1') !subcyc + + if (micro_mg_version > 2) then + call history_add_field('UMG', 'Mass-weighted graupel/hail fallspeed', 'trop_cld_lev', 'avg', 'm s-1') !subcyc + call history_add_field('FREQG', 'Fractional occurrence of Graupel', 'lev', 'avg', 'fraction') !subcyc + call history_add_field('LS_REFFGRAU','ls stratiform graupel/hail effective radius', 'lev', 'avg', 'micron') !subcyc + call history_add_field('AQGRAU', 'Average graupel/hail mixing ratio', 'lev', 'avg', 'kg kg-1') !subcyc + call history_add_field('ANGRAU', 'Average graupel/hail number conc', 'lev', 'avg', 'm-3') !subcyc + end if + + + ! qc limiter (only output in versions 1.5 and later) + call history_add_field('QCRAT', 'Qc Limiter: Fraction of qc tendency applied', 'lev', 'avg', 'fraction') !subcyc + +end subroutine pumas_diagnostics_init + +!=============================================================================== + +subroutine pumas_diagnostics_run(state, ptend, dtime, pbuf) + + +!> \section arg_table_pumas_diagnostics_run Argument Table +!! \htmlinclude pumas_diagnostics_run.html +subroutine pumas_diagnostics_run(proc_rates, qcsinksum_rate1ord, naai, npccn, rndst, nacon, tlat, qvlat, qctend, qitend, & + nctend, nitend, qrtend, qstend, nrtend, nstend, qgtend, ngtend, effc, effc_fn, effi, sadice, sadsnow, & + prect, preci, nevapr, am_evp_st, prain, cmeout, deffi, pgamrad, lamcrad, qsout, dsout, qgout, ngout, & + dgout, lflx, iflx, gflx, rflx, sflx, qrout, reff_rain, reff_snow, reff_grau, nrout, nsout, refl, & + arefl, areflz, frefl, csrfl, acsrfl, fcsrfl, refl10cm, reflz10cm, rercld, ncai, ncal, qrout2, qsout2, & + nrout2, nsout2, drout2, dsout2, qgout2, ngout2, dgout2, freqg, freqs, freqr, nfice, qcrat, proc_rates, & + errstring, tnd_qsnow, tnd_nsnow, re_ice, prer_evap, frzimm, frzcnt, frzdep, errmsg, errflg) + + use cam_history, only: history_in_field + + type (proc_rates_type), intent(inout) :: proc_rates + + real(kind_phys), intent(in) :: qcsinksum_rate1ord(:,:) ! 1st order rate for direct cw to precip conversion + real(kind_phys), intent(in) :: tlat(:,:) ! latent heating rate (W/kg) + real(kind_phys), intent(in) :: qvlat(:,:) ! microphysical tendency qv (1/s) + real(kind_phys), intent(in) :: qctend(:,:) ! microphysical tendency qc (1/s) + real(kind_phys), intent(in) :: qitend(:,:) ! microphysical tendency qi (1/s) + real(kind_phys), intent(in) :: nctend(:,:) ! microphysical tendency nc (1/(kg*s)) + real(kind_phys), intent(in) :: nitend(:,:) ! microphysical tendency ni (1/(kg*s)) + + real(kind_phys), intent(in) :: qrtend(:,:) ! microphysical tendency qr (1/s) + real(kind_phys), intent(in) :: qstend(:,:) ! microphysical tendency qs (1/s) + real(kind_phys), intent(in) :: nrtend(:,:) ! microphysical tendency nr (1/(kg*s)) + real(kind_phys), intent(in) :: nstend(:,:) ! microphysical tendency ns (1/(kg*s)) + real(kind_phys), intent(in) :: qgtend(:,:) ! microphysical tendency qg (1/s) + real(kind_phys), intent(in) :: ngtend(:,:) ! microphysical tendency ng (1/(kg*s)) + + real(kind_phys), intent(in) :: effc(:,:) ! droplet effective radius (micron) + real(kind_phys), intent(in) :: effc_fn(:,:) ! droplet effective radius, assuming nc = 1.e8 kg-1 + real(kind_phys), intent(in) :: effi(:,:) ! cloud ice effective radius (micron) + real(kind_phys), intent(in) :: sadice(:,:) ! cloud ice surface area density (cm2/cm3) + real(kind_phys), intent(in) :: sadsnow(:,:) ! cloud snow surface area density (cm2/cm3) + real(kind_phys), intent(in) :: prect(:) ! surface precip rate (m/s) + real(kind_phys), intent(in) :: preci(:) ! surface ice/snow precip rate (m/s) + real(kind_phys), intent(in) :: nevapr(:,:) ! evaporation rate of rain + snow (kg/kg/s) + real(kind_phys), intent(in) :: am_evp_st(:,:) ! stratiform evaporation area (frac) + real(kind_phys), intent(in) :: prain(:,:) ! production of rain + snow (kg/kg/s) + real(kind_phys), intent(in) :: cmeout(:,:) ! Rate of cond-evap of ice (kg/kg/s) + real(kind_phys), intent(in) :: deffi(:,:) ! ice effective diameter for optics (radiation) (micron) + real(kind_phys), intent(in) :: pgamrad(:,:) ! ice gamma parameter for optics (radiation) (no units) + real(kind_phys), intent(in) :: lamcrad(:,:) ! slope of droplet distribution for optics (radiation) (1/m) + real(kind_phys), intent(in) :: qsout(:,:) ! snow mixing ratio (kg/kg) + real(kind_phys), intent(in) :: dsout(:,:) ! snow diameter (m) + real(kind_phys), intent(in) :: lflx(:,:) ! grid-box average liquid condensate flux (kg m^-2 s^-1) + real(kind_phys), intent(in) :: iflx(:,:) ! grid-box average ice condensate flux (kg m^-2 s^-1) + real(kind_phys), intent(in) :: rflx(:,:) ! grid-box average rain flux (kg m^-2 s^-1) + real(kind_phys), intent(in) :: sflx(:,:) ! grid-box average snow flux (kg m^-2 s^-1) + real(kind_phys), intent(in) :: gflx(:,:) ! grid-box average graupel/hail flux (kg m^-2 s^-1) + + real(kind_phys), intent(in) :: qrout(:,:) ! grid-box average rain mixing ratio (kg/kg) + real(kind_phys), intent(in) :: reff_rain(:,:) ! rain effective radius (micron) + real(kind_phys), intent(in) :: reff_snow(:,:) ! snow effective radius (micron) + real(kind_phys), intent(in) :: reff_grau(:,:) ! graupel effective radius (micron) + + real(kind_phys), intent(in) :: nrout(:,:) ! rain number concentration (1/m3) + real(kind_phys), intent(in) :: nsout(:,:) ! snow number concentration (1/m3) + real(kind_phys), intent(in) :: refl(:,:) ! analytic radar reflectivity (94GHZ, cloud radar) (dBZ) + real(kind_phys), intent(in) :: arefl(:,:) ! average reflectivity will zero points inside valid range (dBZ) + real(kind_phys), intent(in) :: areflz(:,:) ! average reflectivity in z. (mm6 m-3) + real(kind_phys), intent(in) :: frefl(:,:) ! fractional occurrence of radar reflectivity + real(kind_phys), intent(in) :: csrfl(:,:) ! cloudsat reflectivity (dBZ) + real(kind_phys), intent(in) :: acsrfl(:,:) ! cloudsat average (dBZ) + real(kind_phys), intent(in) :: fcsrfl(:,:) ! cloudsat fractional occurrence of radar reflectivity + real(kind_phys), intent(in) :: refl10cm(:,:) ! 10cm (rain) analytic radar reflectivity (dBZ) + real(kind_phys), intent(in) :: reflz10cm(:,:) ! 10cm (rain) analytic radar reflectivity (mm6 m-3) + real(kind_phys), intent(in) :: rercld(:,:) ! effective radius calculation for rain + cloud + real(kind_phys), intent(in) :: ncai(:,:) ! input number conc of ice nuclei available (1/m3) + real(kind_phys), intent(in) :: ncal(:,:) ! input number conc of CCN (1/m3) + real(kind_phys), intent(in) :: qrout2(:,:) ! copy of qrin as used to compute drin2 + real(kind_phys), intent(in) :: qsout2(:,:) ! copy of qsin as used to compute dsin2 + real(kind_phys), intent(in) :: nrout2(:,:) ! copy of nrin as used to compute drin2 + real(kind_phys), intent(in) :: nsout2(:,:) ! copy of nsin as used to compute dsin2 + real(kind_phys), intent(in) :: drout2(:,:) ! mean rain particle diameter (m) + real(kind_phys), intent(in) :: dsout2(:,:) ! mean snow particle diameter (m) + real(kind_phys), intent(in) :: freqs(:,:) ! fractional occurrence of snow + real(kind_phys), intent(in) :: freqr(:,:) ! fractional occurrence of rain + real(kind_phys), intent(in) :: nfice(:,:) ! fraction of frozen water to total condensed water + real(kind_phys), intent(in) :: qcrat(:,:) ! limiter for qc process rates (1=no limit --> 0. no qc) + real(kind_phys), intent(in) :: qgout(:,:) ! graupel/hail mixing ratio (kg/kg) + real(kind_phys), intent(in) :: dgout(:,:) ! graupel/hail diameter (m) + real(kind_phys), intent(in) :: ngout(:,:) ! graupel/hail number concentration (1/m3) + real(kind_phys), intent(in) :: qgout2(:,:) ! copy of qgin as used to compute dgin2 + real(kind_phys), intent(in) :: ngout2(:,:) ! copy of ngin as used to compute dgin2 + real(kind_phys), intent(in) :: dgout2(:,:) ! mean graupel/hail particle diameter (m) + real(kind_phys), intent(in) :: freqg(:,:) ! fractional occurrence of graupel + real(kind_phys), intent(in) :: prer_evap(:,:) ! evaporation rate of rain (kg/kg/s) + + ! CCPP error handling variables + character(len=512), intent(in) :: errmsg + integer, intent(in) :: errflg + + errmsg = '' + errflg = 0 + + +! KATES HACKATHON NOTES +!! The calls for history_out_field are in the pumas_diagnostcis.F90 file, but also with all of the other pumas code. +!! Those calls need to be hooked up to the parameters in the call list here. +!! There is an issue with subcolumn/grid scale I'm not sure how to address the grid averaging that is done after the +!! pumas_tend function call. + + + !------------------------------------------------------------------------------- + + lchnk = state%lchnk + ncol = state%ncol + psetcols = state%psetcols + ngrdcol = state%ngrdcol + itim_old = pbuf_old_tim_idx() + nlev = pver - top_lev + 1 + + nan_array = nan + + ! Allocate the proc_rates DDT + ! IMPORTANT NOTE -- elements in proc_rates are dimensioned to the nlev dimension while + ! all the other arrays in this routine are dimensioned pver. This is required because + ! PUMAS only gets the top_lev:pver array subsection, and the proc_rates arrays + ! need to be the same levels. + call proc_rates%allocate(ncol, nlev, ncd, micro_mg_warm_rain, errstring) + + call handle_errmsg(errstring, subname="micro_pumas_cam_tend") + + + call phys_getopts(use_subcol_microp_out=use_subcol_microp) + + ! Set the col_type flag to grid or subcolumn dependent on the value of use_subcol_microp + call pbuf_col_type_index(use_subcol_microp, col_type=col_type) + + !----------------------- + ! These physics buffer fields are read only and not set in this parameterization + ! If these fields do not have subcolumn data, copy the grid to the subcolumn if subcolumns is turned on + ! If subcolumns is not turned on, then these fields will be grid data + + call pbuf_get_field(pbuf, naai_hom_idx, naai_hom, col_type=col_type, copy_if_needed=use_subcol_microp) + call pbuf_get_field(pbuf, relvar_idx, relvar, col_type=col_type, copy_if_needed=use_subcol_microp) + call pbuf_get_field(pbuf, accre_enhan_idx, accre_enhan, col_type=col_type, copy_if_needed=use_subcol_microp) + call pbuf_get_field(pbuf, cmeliq_idx, cmeliq, col_type=col_type, copy_if_needed=use_subcol_microp) + + call pbuf_get_field(pbuf, cld_idx, cld, start=(/1,1,itim_old/), kount=(/psetcols,pver,1/), & + col_type=col_type, copy_if_needed=use_subcol_microp) + call pbuf_get_field(pbuf, concld_idx, concld, start=(/1,1,itim_old/), kount=(/psetcols,pver,1/), & + col_type=col_type, copy_if_needed=use_subcol_microp) + call pbuf_get_field(pbuf, ast_idx, ast, start=(/1,1,itim_old/), kount=(/psetcols,pver,1/), & + col_type=col_type, copy_if_needed=use_subcol_microp) + + ! Get convective precip for rainbows + if (prec_dp_idx > 0) then + call pbuf_get_field(pbuf, prec_dp_idx, prec_dp, col_type=col_type, copy_if_needed=use_subcol_microp) + else + nullify(prec_dp) + end if + if (prec_sh_idx > 0) then + call pbuf_get_field(pbuf, prec_sh_idx, prec_sh, col_type=col_type, copy_if_needed=use_subcol_microp) + else + nullify(prec_sh) + end if + +! Merge Precipitation rates (multi-process) + if (associated(prec_dp) .and. associated(prec_sh)) then + precc(:ncol) = prec_dp(:ncol) + prec_sh(:ncol) + else if (associated(prec_dp)) then + precc(:ncol) = prec_dp(:ncol) + else if (associated(prec_sh)) then + precc(:ncol) = prec_sh(:ncol) + else + precc(:ncol) = 0._r8 + end if + + if (do_cldice) then + ! If we ARE prognosing tendencies, then just point to an array of NaN fields to have + ! something for PUMAS to use in call + tnd_qsnow => nan_array + tnd_nsnow => nan_array + re_ice => nan_array + end if + + if (.not. use_hetfrz_classnuc) then + ! Needed to satisfy gnu compiler with optional argument - set to an array of Nan fields + frzimm => nan_array + frzcnt => nan_array + frzdep => nan_array + end if + + if (qsatfac_idx > 0) then + call pbuf_get_field(pbuf, qsatfac_idx, qsatfac, col_type=col_type, copy_if_needed=use_subcol_microp) + else + allocate(qsatfac(ncol,pver),stat=ierr) + call handle_allocate_error(ierr, 'micro_pumas_cam_tend', 'qsatfac') + qsatfac = 1._r8 + end if + + ! initialize tendency variables + preci = 0._r8 + prect = 0._r8 + + + !----------------------- + ! These physics buffer fields are calculated and set in this parameterization + ! If subcolumns is turned on, then these fields will be calculated on a subcolumn grid, otherwise they will be a normal grid + + call pbuf_get_field(pbuf, prec_str_idx, prec_str, col_type=col_type) + call pbuf_get_field(pbuf, snow_str_idx, snow_str, col_type=col_type) + call pbuf_get_field(pbuf, prec_pcw_idx, prec_pcw, col_type=col_type) + call pbuf_get_field(pbuf, snow_pcw_idx, snow_pcw, col_type=col_type) + call pbuf_get_field(pbuf, prec_sed_idx, prec_sed, col_type=col_type) + call pbuf_get_field(pbuf, snow_sed_idx, snow_sed, col_type=col_type) + call pbuf_get_field(pbuf, dei_idx, dei, col_type=col_type) + call pbuf_get_field(pbuf, mu_idx, mu, col_type=col_type) + call pbuf_get_field(pbuf, lambdac_idx, lambdac, col_type=col_type) + call pbuf_get_field(pbuf, des_idx, des, col_type=col_type) + call pbuf_get_field(pbuf, ls_flxprc_idx, mgflxprc, col_type=col_type) + call pbuf_get_field(pbuf, ls_flxsnw_idx, mgflxsnw, col_type=col_type) + call pbuf_get_field(pbuf, ls_mrprc_idx, mgmrprc, col_type=col_type) + call pbuf_get_field(pbuf, ls_mrsnw_idx, mgmrsnw, col_type=col_type) + call pbuf_get_field(pbuf, cv_reffliq_idx, cvreffliq, col_type=col_type) + call pbuf_get_field(pbuf, cv_reffice_idx, cvreffice, col_type=col_type) + call pbuf_get_field(pbuf, iciwpst_idx, iciwpst, col_type=col_type) + call pbuf_get_field(pbuf, iclwpst_idx, iclwpst, col_type=col_type) + call pbuf_get_field(pbuf, icswp_idx, icswp, col_type=col_type) + call pbuf_get_field(pbuf, rel_idx, rel, col_type=col_type) + call pbuf_get_field(pbuf, rei_idx, rei, col_type=col_type) + call pbuf_get_field(pbuf, wsedl_idx, wsedl, col_type=col_type) + call pbuf_get_field(pbuf, qme_idx, qme, col_type=col_type) + call pbuf_get_field(pbuf, bergso_idx, bergstot, col_type=col_type) + + ! Assign the pointer values to the non-pointer proc_rates element + proc_rates%bergstot(:ncol,1:nlev) = bergstot(:ncol,top_lev:pver) + + if (degrau_idx > 0) call pbuf_get_field(pbuf, degrau_idx, degrau, col_type=col_type) + if (icgrauwp_idx > 0) call pbuf_get_field(pbuf, icgrauwp_idx, icgrauwp, col_type=col_type) + if (cldfgrau_idx > 0) call pbuf_get_field(pbuf, cldfgrau_idx, cldfgrau, col_type=col_type) + + call pbuf_get_field(pbuf, cldo_idx, cldo, start=(/1,1,itim_old/), kount=(/psetcols,pver,1/), col_type=col_type) + call pbuf_get_field(pbuf, cldfsnow_idx, cldfsnow, start=(/1,1,itim_old/), kount=(/psetcols,pver,1/), col_type=col_type) + call pbuf_get_field(pbuf, cc_t_idx, CC_t, start=(/1,1,itim_old/), kount=(/psetcols,pver,1/), col_type=col_type) + call pbuf_get_field(pbuf, cc_qv_idx, CC_qv, start=(/1,1,itim_old/), kount=(/psetcols,pver,1/), col_type=col_type) + call pbuf_get_field(pbuf, cc_ql_idx, CC_ql, start=(/1,1,itim_old/), kount=(/psetcols,pver,1/), col_type=col_type) + call pbuf_get_field(pbuf, cc_qi_idx, CC_qi, start=(/1,1,itim_old/), kount=(/psetcols,pver,1/), col_type=col_type) + call pbuf_get_field(pbuf, cc_nl_idx, CC_nl, start=(/1,1,itim_old/), kount=(/psetcols,pver,1/), col_type=col_type) + call pbuf_get_field(pbuf, cc_ni_idx, CC_ni, start=(/1,1,itim_old/), kount=(/psetcols,pver,1/), col_type=col_type) + call pbuf_get_field(pbuf, cc_qlst_idx, CC_qlst, start=(/1,1,itim_old/), kount=(/psetcols,pver,1/), col_type=col_type) + + if (rate1_cw2pr_st_idx > 0) then + call pbuf_get_field(pbuf, rate1_cw2pr_st_idx, rate1ord_cw2pr_st, col_type=col_type) + end if + + !----------------------- + ! These are only on the grid regardless of whether subcolumns are turned on or not + call pbuf_get_field(pbuf, ls_reffrain_idx, mgreffrain_grid) + call pbuf_get_field(pbuf, ls_reffsnow_idx, mgreffsnow_grid) + call pbuf_get_field(pbuf, acpr_idx, acprecl_grid) + call pbuf_get_field(pbuf, acgcme_idx, acgcme_grid) + call pbuf_get_field(pbuf, acnum_idx, acnum_grid) + call pbuf_get_field(pbuf, cmeliq_idx, cmeliq_grid) + call pbuf_get_field(pbuf, ast_idx, ast_grid, start=(/1,1,itim_old/), kount=(/pcols,pver,1/)) + + call pbuf_get_field(pbuf, evprain_st_idx, evprain_st_grid) + call pbuf_get_field(pbuf, evpsnow_st_idx, evpsnow_st_grid) +!!!!! CACNOTE? call pbuf_get_field(pbuf, am_evp_st_idx, am_evp_st_grid) + + !----------------------------------------------------------------------- + ! ... Calculate cosine of zenith angle + ! then cast back to angle (radians) + !----------------------------------------------------------------------- + + zen_angle(:) = 0.0_r8 + rlats(:) = 0.0_r8 + rlons(:) = 0.0_r8 + calday = get_curr_calday() + call get_rlat_all_p( lchnk, ncol, rlats ) + call get_rlon_all_p( lchnk, ncol, rlons ) + call zenith( calday, rlats, rlons, zen_angle, ncol ) + where (zen_angle(:) <= 1.0_r8 .and. zen_angle(:) >= -1.0_r8) + zen_angle(:) = acos( zen_angle(:) ) + elsewhere + zen_angle(:) = 0.0_r8 + end where + + sza(:) = zen_angle(:) * rad2deg + call history_out_field( 'rbSZA', sza) + + !------------------------------------------------------------------------------------- + ! Microphysics assumes 'liquid stratus frac = ice stratus frac + ! = max( liquid stratus frac, ice stratus frac )'. + alst_mic => ast + aist_mic => ast + + ! Output initial in-cloud LWP (before microphysics) + + iclwpi = 0._r8 + iciwpi = 0._r8 + + do i = 1, ncol + do k = top_lev, pver + iclwpi(i) = iclwpi(i) + & + min(state%q(i,k,ixcldliq) / max(mincld,ast(i,k)),0.005_r8) & + * state%pdel(i,k) / gravit + iciwpi(i) = iciwpi(i) + & + min(state%q(i,k,ixcldice) / max(mincld,ast(i,k)),0.005_r8) & + * state%pdel(i,k) / gravit + end do + end do + + cldo(:ncol,top_lev:pver)=ast(:ncol,top_lev:pver) + + ! Initialize local state from input. + call physics_state_copy(state, state_loc) + + ! Because of the of limited vertical resolution, there can be a signifcant + ! warm bias at the cold point tropopause, which can create a wet bias in the + ! stratosphere. For the microphysics only, update the cold point temperature, with + ! an estimate of the coldest point between the model layers. + if (micro_mg_adjust_cpt) then + cp_rh(:ncol, :pver) = 0._r8 + cp_dt(:ncol) = 0._r8 + cp_dz(:ncol) = 0._r8 + + !REMOVECAM - no longer need this when CAM is retired and pcols no longer exists + troplev(:) = 0 + cp_z(:) = 0._r8 + cp_t(:) = 0._r8 + !REMOVECAM_END + call tropopause_find_cam(state_loc, troplev, primary=TROP_ALG_CPP, backup=TROP_ALG_NONE, & + tropZ=cp_z, tropT=cp_t) + + do i = 1, ncol + + ! Update statistics and output results. + if (troplev(i) .ne. NOTFOUND) then + cp_dt(i) = cp_t(i) - state_loc%t(i,troplev(i)) + cp_dz(i) = cp_z(i) - state_loc%zm(i,troplev(i)) + + ! NOTE: This change in temperature is just for the microphysics + ! and should not be added to any tendencies or used to update + ! any states + state_loc%t(i,troplev(i)) = state_loc%t(i,troplev(i)) + cp_dt(i) + end if + end do + + ! Output all of the statistics related to the cold point + ! tropopause adjustment. Th cold point information itself is + ! output in tropopause.F90. + call history_out_field("TROPF_TADJ", state_loc%t) + call history_out_field("TROPF_CDT", cp_dt) + call history_out_field("TROPF_CDZ", cp_dz) + end if + + ! Initialize ptend for output. + lq = .false. + lq(ixq) = .true. + lq(ixcldliq) = .true. + lq(ixcldice) = .true. + lq(ixnumliq) = .true. + lq(ixnumice) = .true. + lq(ixrain) = .true. + lq(ixsnow) = .true. + lq(ixnumrain) = .true. + lq(ixnumsnow) = .true. + if (micro_mg_version > 2) then + lq(ixgraupel) = .true. + lq(ixnumgraupel) = .true. + end if + + ! the name 'cldwat' triggers special tests on cldliq + ! and cldice in physics_update + call physics_ptend_init(ptend, psetcols, "cldwat", ls=.true., lq=lq) + + if (micro_mg_version > 2) then + state_loc_graup(:ncol,:) = state_loc%q(:ncol,:,ixgraupel) + state_loc_numgraup(:ncol,:) = state_loc%q(:ncol,:,ixnumgraupel) + else + state_loc_graup(:ncol,:) = 0._r8 + state_loc_numgraup(:ncol,:) = 0._r8 + end if + + ! Zero out diagnostic rainbow arrays + rbfreq = 0._r8 + rbfrac = 0._r8 + + ! Zero out values above top_lev before passing into _tend for some pbuf variables that are inputs + naai(:ncol,:top_lev-1) = 0._r8 + npccn(:ncol,:top_lev-1) = 0._r8 + + ! The null value for qsatfac is 1, not zero + qsatfac(:ncol,:top_lev-1) = 1._r8 + + ! Zero out values above top_lev for all output variables + ! Note that elements in proc_rates do not have the extra levels as they are dimensioned to be nlev instead of pver + tlat(:ncol,:top_lev-1)=0._r8 + qvlat(:ncol,:top_lev-1)=0._r8 + qcten(:ncol,:top_lev-1)=0._r8 + qiten(:ncol,:top_lev-1)=0._r8 + ncten(:ncol,:top_lev-1)=0._r8 + niten(:ncol,:top_lev-1)=0._r8 + qrten(:ncol,:top_lev-1)=0._r8 + qsten(:ncol,:top_lev-1)=0._r8 + nrten(:ncol,:top_lev-1)=0._r8 + nsten(:ncol,:top_lev-1)=0._r8 + qgten(:ncol,:top_lev-1)=0._r8 + ngten(:ncol,:top_lev-1)=0._r8 + rel(:ncol,:top_lev-1)=0._r8 + rel_fn_dum(:ncol,:top_lev-1)=0._r8 + rei(:ncol,:top_lev-1)=0._r8 + sadice(:ncol,:top_lev-1)=0._r8 + sadsnow(:ncol,:top_lev-1)=0._r8 + prect(:ncol)=0._r8 + preci(:ncol)=0._r8 + nevapr(:ncol,:top_lev-1)=0._r8 + am_evp_st(:ncol,:top_lev-1)=0._r8 + prain(:ncol,:top_lev-1)=0._r8 + cmeice(:ncol,:top_lev-1)=0._r8 + dei(:ncol,:top_lev-1)=0._r8 + mu(:ncol,:top_lev-1)=0._r8 + lambdac(:ncol,:top_lev-1)=0._r8 + qsout(:ncol,:top_lev-1)=0._r8 + des(:ncol,:top_lev-1)=0._r8 + qgout(:ncol,:top_lev-1)=0._r8 + ngout(:ncol,:top_lev-1)=0._r8 + dgout(:ncol,:top_lev-1)=0._r8 + cflx(:ncol,:top_lev-1)=0._r8 + iflx(:ncol,:top_lev-1)=0._r8 + gflx(:ncol,:top_lev-1)=0._r8 + rflx(:ncol,:top_lev-1)=0._r8 + sflx(:ncol,:top_lev-1)=0._r8 + qrout(:ncol,:top_lev-1)=0._r8 + reff_rain_dum(:ncol,:top_lev-1)=0._r8 + reff_snow_dum(:ncol,:top_lev-1)=0._r8 + reff_grau_dum(:ncol,:top_lev-1)=0._r8 + nrout(:ncol,:top_lev-1)=0._r8 + nsout(:ncol,:top_lev-1)=0._r8 + refl(:ncol,:top_lev-1)=0._r8 + arefl(:ncol,:top_lev-1)=0._r8 + areflz(:ncol,:top_lev-1)=0._r8 + frefl(:ncol,:top_lev-1)=0._r8 + csrfl(:ncol,:top_lev-1)=0._r8 + acsrfl(:ncol,:top_lev-1)=0._r8 + fcsrfl(:ncol,:top_lev-1)=0._r8 + refl10cm(:ncol,:top_lev-1)=-9999._r8 + reflz10cm(:ncol,:top_lev-1)=0._r8 + rercld(:ncol,:top_lev-1)=0._r8 + ncai(:ncol,:top_lev-1)=0._r8 + ncal(:ncol,:top_lev-1)=0._r8 + qrout2(:ncol,:top_lev-1)=0._r8 + qsout2(:ncol,:top_lev-1)=0._r8 + nrout2(:ncol,:top_lev-1)=0._r8 + nsout2(:ncol,:top_lev-1)=0._r8 + qgout2(:ncol,:top_lev-1)=0._r8 + ngout2(:ncol,:top_lev-1)=0._r8 + dgout2(:ncol,:top_lev-1)=0._r8 + freqg(:ncol,:top_lev-1)=0._r8 + freqs(:ncol,:top_lev-1)=0._r8 + freqr(:ncol,:top_lev-1)=0._r8 + nfice(:ncol,:top_lev-1)=0._r8 + qcrat(:ncol,:top_lev-1)=0._r8 + tnd_qsnow(:ncol,:top_lev-1)=0._r8 + tnd_nsnow(:ncol,:top_lev-1)=0._r8 + re_ice(:ncol,:top_lev-1)=0._r8 + prer_evap(:ncol,:top_lev-1)=0._r8 + frzimm(:ncol,:top_lev-1)=0._r8 + frzcnt(:ncol,:top_lev-1)=0._r8 + frzdep(:ncol,:top_lev-1)=0._r8 + + do it = 1, num_steps + + call micro_pumas_tend( & + ncol, nlev, dtime/num_steps,& + state_loc%t(:ncol,top_lev:), state_loc%q(:ncol,top_lev:,ixq), & + state_loc%q(:ncol,top_lev:,ixcldliq), state_loc%q(:ncol,top_lev:,ixcldice), & + state_loc%q(:ncol,top_lev:,ixnumliq), state_loc%q(:ncol,top_lev:,ixnumice), & + state_loc%q(:ncol,top_lev:,ixrain), state_loc%q(:ncol,top_lev:,ixsnow), & + state_loc%q(:ncol,top_lev:,ixnumrain), state_loc%q(:ncol,top_lev:,ixnumsnow), & + state_loc_graup(:ncol,top_lev:), state_loc_numgraup(:ncol,top_lev:), & + relvar(:ncol,top_lev:), accre_enhan(:ncol,top_lev:), & + state_loc%pmid(:ncol,top_lev:), state_loc%pdel(:ncol,top_lev:), state_loc%pint(:ncol,top_lev:), & + ast(:ncol,top_lev:), alst_mic(:ncol,top_lev:), aist_mic(:ncol,top_lev:), qsatfac(:ncol,top_lev:), & + rate1cld(:ncol,top_lev:), & + naai(:ncol,top_lev:), npccn(:ncol,top_lev:), & + rndst(:ncol,top_lev:,:), nacon(:ncol,top_lev:,:), & + tlat(:ncol,top_lev:), qvlat(:ncol,top_lev:), & + qcten(:ncol,top_lev:), qiten(:ncol,top_lev:), & + ncten(:ncol,top_lev:), niten(:ncol,top_lev:), & + qrten(:ncol,top_lev:), qsten(:ncol,top_lev:), & + nrten(:ncol,top_lev:), nsten(:ncol,top_lev:), & + qgten(:ncol,top_lev:), ngten(:ncol,top_lev:), & + rel(:ncol,top_lev:), rel_fn_dum(:ncol,top_lev:), rei(:ncol,top_lev:), & + sadice(:ncol,top_lev:), sadsnow(:ncol,top_lev:), & + prect(:ncol), preci(:ncol), & + nevapr(:ncol,top_lev:), am_evp_st(:ncol,top_lev:), & + prain(:ncol,top_lev:), & + cmeice(:ncol,top_lev:), dei(:ncol,top_lev:), & + mu(:ncol,top_lev:), lambdac(:ncol,top_lev:), & + qsout(:ncol,top_lev:), des(:ncol,top_lev:), & + qgout(:ncol,top_lev:), ngout(:ncol,top_lev:), dgout(:ncol,top_lev:), & + cflx(:ncol,top_lev:), iflx(:ncol,top_lev:), & + gflx(:ncol,top_lev:), & + rflx(:ncol,top_lev:), sflx(:ncol,top_lev:), qrout(:ncol,top_lev:), & + reff_rain_dum(:ncol,top_lev:), reff_snow_dum(:ncol,top_lev:), reff_grau_dum(:ncol,top_lev:), & + nrout(:ncol,top_lev:), nsout(:ncol,top_lev:), & + refl(:ncol,top_lev:), arefl(:ncol,top_lev:), areflz(:ncol,top_lev:), & + frefl(:ncol,top_lev:), csrfl(:ncol,top_lev:), acsrfl(:ncol,top_lev:), & + fcsrfl(:ncol,top_lev:), & + refl10cm(:ncol,top_lev:), reflz10cm(:ncol,top_lev:), rercld(:ncol,top_lev:), & + ncai(:ncol,top_lev:), ncal(:ncol,top_lev:), & + qrout2(:ncol,top_lev:), qsout2(:ncol,top_lev:), & + nrout2(:ncol,top_lev:), nsout2(:ncol,top_lev:), & + drout_dum(:ncol,top_lev:), dsout2_dum(:ncol,top_lev:), & + qgout2(:ncol,top_lev:), ngout2(:ncol,top_lev:), dgout2(:ncol,top_lev:), freqg(:ncol,top_lev:), & + freqs(:ncol,top_lev:), freqr(:ncol,top_lev:), & + nfice(:ncol,top_lev:), qcrat(:ncol,top_lev:), & + proc_rates, & + errstring, & + tnd_qsnow(:ncol,top_lev:),tnd_nsnow(:ncol,top_lev:),re_ice(:ncol,top_lev:),& + prer_evap(:ncol,top_lev:), & + frzimm(:ncol,top_lev:), frzcnt(:ncol,top_lev:), frzdep(:ncol,top_lev:) ) + + call handle_errmsg(errstring, subname="micro_pumas_cam_tend") + + call physics_ptend_init(ptend_loc, psetcols, "micro_pumas", & + ls=.true., lq=lq) + + ! Set local tendency. + ptend_loc%s(:ncol,top_lev:) = tlat(:ncol,top_lev:) + ptend_loc%q(:ncol,top_lev:,ixq) = qvlat(:ncol,top_lev:) + ptend_loc%q(:ncol,top_lev:,ixcldliq) = qcten(:ncol,top_lev:) + ptend_loc%q(:ncol,top_lev:,ixcldice) = qiten(:ncol,top_lev:) + ptend_loc%q(:ncol,top_lev:,ixnumliq) = ncten(:ncol,top_lev:) + + if (do_cldice) then + ptend_loc%q(:ncol,top_lev:,ixnumice) = niten(:ncol,top_lev:) + else + ! In this case, the tendency should be all 0. + if (any(niten(:ncol,:) /= 0._r8)) then + call endrun("micro_pumas_cam:ERROR - MG microphysics is configured not to prognose cloud ice,"// & + " but micro_pumas_tend has ice number tendencies.") + end if + ptend_loc%q(:ncol,:,ixnumice) = 0._r8 + end if + + ptend_loc%q(:ncol,top_lev:,ixrain) = qrten(:ncol,top_lev:) + ptend_loc%q(:ncol,top_lev:,ixsnow) = qsten(:ncol,top_lev:) + ptend_loc%q(:ncol,top_lev:,ixnumrain) = nrten(:ncol,top_lev:) + ptend_loc%q(:ncol,top_lev:,ixnumsnow) = nsten(:ncol,top_lev:) + + if (micro_mg_version > 2) then + ptend_loc%q(:ncol,top_lev:,ixgraupel) = qgten(:ncol,top_lev:) + ptend_loc%q(:ncol,top_lev:,ixnumgraupel) = ngten(:ncol,top_lev:) + end if + + ! Sum into overall ptend + call physics_ptend_sum(ptend_loc, ptend, ncol) + + ! Update local state + call physics_update(state_loc, ptend_loc, dtime/num_steps) + + if (trim(micro_mg_warm_rain) == 'tau') then + proc_rates%amk_c(:ncol,:,:) = proc_rates%amk_c(:ncol,:,:)/num_steps + proc_rates%ank_c(:ncol,:,:) = proc_rates%ank_c(:ncol,:,:)/num_steps + proc_rates%amk_r(:ncol,:,:) = proc_rates%amk_r(:ncol,:,:)/num_steps + proc_rates%ank_r(:ncol,:,:) = proc_rates%ank_r(:ncol,:,:)/num_steps + proc_rates%amk(:ncol,:,:) = proc_rates%amk(:ncol,:,:)/num_steps + proc_rates%ank(:ncol,:,:) = proc_rates%ank(:ncol,:,:)/num_steps + proc_rates%amk_out(:ncol,:,:) = proc_rates%amk_out(:ncol,:,:)/num_steps + end if + + end do + + ! Divide ptend by substeps. + call physics_ptend_scale(ptend, 1._r8/num_steps, ncol) + + ! Check to make sure that the microphysics code is respecting the flags that control + ! whether MG should be prognosing cloud ice and cloud liquid or not. + if (.not. do_cldice) then + if (any(ptend%q(:ncol,top_lev:pver,ixcldice) /= 0.0_r8)) & + call endrun("micro_pumas_cam:ERROR - MG microphysics is configured not to prognose cloud ice,"// & + " but micro_pumas_tend has ice mass tendencies.") + if (any(ptend%q(:ncol,top_lev:pver,ixnumice) /= 0.0_r8)) & + call endrun("micro_pumas_cam:ERROR - MG microphysics is configured not to prognose cloud ice,"// & + " but micro_pumas_tend has ice number tendencies.") + end if + if (.not. do_cldliq) then + if (any(ptend%q(:ncol,top_lev:pver,ixcldliq) /= 0.0_r8)) & + call endrun("micro_pumas_cam:ERROR - MG microphysics is configured not to prognose cloud liquid,"// & + " but micro_pumas_tend has liquid mass tendencies.") + if (any(ptend%q(:ncol,top_lev:pver,ixnumliq) /= 0.0_r8)) & + call endrun("micro_pumas_cam:ERROR - MG microphysics is configured not to prognose cloud liquid,"// & + " but micro_pumas_tend has liquid number tendencies.") + end if + + mnuccdohet = 0._r8 + do k=top_lev,pver + do i=1,ncol + if (naai(i,k) > 0._r8) then + mnuccdohet(i,k) = proc_rates%mnuccdtot(i,k-top_lev+1) - (naai_hom(i,k)/naai(i,k))*proc_rates%mnuccdtot(i,k-top_lev+1) + end if + end do + end do + + mgflxprc(:ncol,top_lev:pverp) = rflx(:ncol,top_lev:pverp) + sflx(:ncol,top_lev:pverp) + mgflxsnw(:ncol,top_lev:pverp) = sflx(:ncol,top_lev:pverp) + + !add condensate fluxes for MG2 (ice and snow already added for MG1) + if (micro_mg_version >= 2) then + mgflxprc(:ncol,top_lev:pverp) = mgflxprc(:ncol,top_lev:pverp)+ iflx(:ncol,top_lev:pverp) + cflx(:ncol,top_lev:pverp) + mgflxsnw(:ncol,top_lev:pverp) = mgflxsnw(:ncol,top_lev:pverp) + iflx(:ncol,top_lev:pverp) + end if + + !add graupel fluxes for MG3 to snow flux + if (micro_mg_version >= 3) then + mgflxprc(:ncol,top_lev:pverp) = mgflxprc(:ncol,top_lev:pverp)+gflx(:ncol,top_lev:pverp) + mgflxsnw(:ncol,top_lev:pverp) = mgflxsnw(:ncol,top_lev:pverp)+gflx(:ncol,top_lev:pverp) + end if + + mgmrprc(:ncol,top_lev:pver) = qrout(:ncol,top_lev:pver) + qsout(:ncol,top_lev:pver) + mgmrsnw(:ncol,top_lev:pver) = qsout(:ncol,top_lev:pver) + + !! calculate effective radius of convective liquid and ice using dcon and deicon (not used by code, not useful for COSP) + !! hard-coded as average of hard-coded values used for deep/shallow convective detrainment (near line 1502/1505) + cvreffliq(:ncol,top_lev:pver) = 9.0_r8 + cvreffice(:ncol,top_lev:pver) = 37.0_r8 + + ! Reassign rate1 if modal aerosols + if (rate1_cw2pr_st_idx > 0) then + rate1ord_cw2pr_st(:ncol,top_lev:pver) = rate1cld(:ncol,top_lev:pver) + end if + + ! Sedimentation velocity for liquid stratus cloud droplet + wsedl(:ncol,top_lev:pver) = proc_rates%vtrmc(:ncol,1:nlev) + + ! Microphysical tendencies for use in the macrophysics at the next time step + CC_T(:ncol,top_lev:pver) = tlat(:ncol,top_lev:pver)/cpair + CC_qv(:ncol,top_lev:pver) = qvlat(:ncol,top_lev:pver) + CC_ql(:ncol,top_lev:pver) = qcten(:ncol,top_lev:pver) + CC_qi(:ncol,top_lev:pver) = qiten(:ncol,top_lev:pver) + CC_nl(:ncol,top_lev:pver) = ncten(:ncol,top_lev:pver) + CC_ni(:ncol,top_lev:pver) = niten(:ncol,top_lev:pver) + CC_qlst(:ncol,top_lev:pver) = qcten(:ncol,top_lev:pver)/max(0.01_r8,alst_mic(:ncol,top_lev:pver)) + + ! Net micro_pumas_cam condensation rate + qme(:ncol,:top_lev-1) = 0._r8 + qme(:ncol,top_lev:pver) = cmeliq(:ncol,top_lev:pver) + proc_rates%cmeitot(:ncol,1:nlev) + + ! For precip, accumulate only total precip in prec_pcw and snow_pcw variables. + ! Other precip output variables are set to 0 + ! Do not subscript by ncol here, because in physpkg we divide the whole + ! array and need to avoid an FPE due to uninitialized data. + prec_pcw = prect + snow_pcw = preci + prec_sed = 0._r8 + snow_sed = 0._r8 + prec_str = prec_pcw + prec_sed + snow_str = snow_pcw + snow_sed + + icecldf(:ncol,top_lev:pver) = ast(:ncol,top_lev:pver) + liqcldf(:ncol,top_lev:pver) = ast(:ncol,top_lev:pver) + + ! ------------------------------------------------------------ ! + ! Compute in cloud ice and liquid mixing ratios ! + ! Note that 'iclwp, iciwp' are used for radiation computation. ! + ! ------------------------------------------------------------ ! + + icinc = 0._r8 + icwnc = 0._r8 + iciwpst = 0._r8 + iclwpst = 0._r8 + icswp = 0._r8 + cldfsnow = 0._r8 + if (micro_mg_version > 2) then + icgrauwp = 0._r8 + cldfgrau = 0._r8 + end if + + do k = top_lev, pver + do i = 1, ncol + ! Limits for in-cloud mixing ratios consistent with MG microphysics + ! in-cloud mixing ratio maximum limit of 0.005 kg/kg + icimrst(i,k) = min( state_loc%q(i,k,ixcldice) / max(mincld,icecldf(i,k)),0.005_r8 ) + icwmrst(i,k) = min( state_loc%q(i,k,ixcldliq) / max(mincld,liqcldf(i,k)),0.005_r8 ) + icinc(i,k) = state_loc%q(i,k,ixnumice) / max(mincld,icecldf(i,k)) * & + state_loc%pmid(i,k) / (287.15_r8*state_loc%t(i,k)) + icwnc(i,k) = state_loc%q(i,k,ixnumliq) / max(mincld,liqcldf(i,k)) * & + state_loc%pmid(i,k) / (287.15_r8*state_loc%t(i,k)) + ! Calculate micro_pumas_cam cloud water paths in each layer + ! Note: uses stratiform cloud fraction! + iciwpst(i,k) = min(state_loc%q(i,k,ixcldice)/max(mincld,ast(i,k)),0.005_r8) * state_loc%pdel(i,k) / gravit + iclwpst(i,k) = min(state_loc%q(i,k,ixcldliq)/max(mincld,ast(i,k)),0.005_r8) * state_loc%pdel(i,k) / gravit + + ! ------------------------------ ! + ! Adjust cloud fraction for snow ! + ! ------------------------------ ! + cldfsnow(i,k) = cld(i,k) + ! If cloud and only ice ( no convective cloud or ice ), then set to 0. + if( ( cldfsnow(i,k) .gt. 1.e-4_r8 ) .and. & + ( concld(i,k) .lt. 1.e-4_r8 ) .and. & + ( state_loc%q(i,k,ixcldliq) .lt. 1.e-10_r8 ) ) then + cldfsnow(i,k) = 0._r8 + end if + ! If no cloud and snow, then set to 0.25 + if( ( cldfsnow(i,k) .le. 1.e-4_r8 ) .and. ( qsout(i,k) .gt. 1.e-6_r8 ) ) then + cldfsnow(i,k) = 0.25_r8 + end if + ! Calculate in-cloud snow water path + icswp(i,k) = qsout(i,k) / max( mincld, cldfsnow(i,k) ) * state_loc%pdel(i,k) / gravit + + ! --------------------------------- ! + ! Adjust cloud fraction for graupel ! + ! --------------------------------- ! + if (micro_mg_version > 2) then + cldfgrau(i,k) = cld(i,k) + ! If cloud and only ice ( no convective cloud or ice ), then set to 0. + if( ( cldfgrau(i,k) .gt. 1.e-4_r8 ) .and. & + ( concld(i,k) .lt. 1.e-4_r8 ) .and. & + ( state_loc%q(i,k,ixcldliq) .lt. 1.e-10_r8 ) ) then + cldfgrau(i,k) = 0._r8 + end if + ! If no cloud and graupel, then set to 0.25 + if( ( cldfgrau(i,k) .le. 1.e-4_r8 ) .and. ( qgout(i,k) .gt. 1.e-9_r8 ) ) then + cldfgrau(i,k) = 0.25_r8 + end if + + ! Calculate in-cloud snow water path + icgrauwp(i,k) = qgout(i,k) / max( 1.e-2_r8, cldfgrau(i,k) ) * state_loc%pdel(i,k) / gravit + end if + + end do + end do + + ! Calculate cloud fraction for prognostic precip sizes. + ! Cloud fraction for purposes of precipitation is maximum cloud + ! fraction out of all the layers that the precipitation may be + ! falling down from. + cldmax(:ncol,top_lev:) = max(mincld, ast(:ncol,top_lev:)) + do k = top_lev+1, pver + where (state_loc%q(:ncol,k-1,ixrain) >= qsmall .or. & + state_loc%q(:ncol,k-1,ixsnow) >= qsmall) + cldmax(:ncol,k) = max(cldmax(:ncol,k-1), cldmax(:ncol,k)) + end where + end do + + !Copy pbuf field from proc_rates back to pbuf pointer + bergstot(:ncol,top_lev:) = proc_rates%bergstot(:ncol,1:nlev) + bergstot(:ncol,1:top_lev-1) = 0._r8 + + ! ------------------------------------------------------ ! + ! ------------------------------------------------------ ! + ! All code from here to the end is on grid columns only ! + ! ------------------------------------------------------ ! + ! ------------------------------------------------------ ! + + ! Average the fields which are needed later in this paramterization to be on the grid + if (use_subcol_microp) then + call subcol_field_avg(prec_str, ngrdcol, lchnk, prec_str_grid) + call subcol_field_avg(iclwpst, ngrdcol, lchnk, iclwpst_grid) + call subcol_field_avg(cvreffliq, ngrdcol, lchnk, cvreffliq_grid) + call subcol_field_avg(cvreffice, ngrdcol, lchnk, cvreffice_grid) + call subcol_field_avg(mgflxprc, ngrdcol, lchnk, mgflxprc_grid) + call subcol_field_avg(mgflxsnw, ngrdcol, lchnk, mgflxsnw_grid) + call subcol_field_avg(qme, ngrdcol, lchnk, qme_grid) + call subcol_field_avg(nevapr, ngrdcol, lchnk, nevapr_grid) + call subcol_field_avg(prain, ngrdcol, lchnk, prain_grid) + call subcol_field_avg(proc_rates%evapsnow, ngrdcol, lchnk, evpsnow_st_grid(:,top_lev:)) + call subcol_field_avg(proc_rates%bergstot, ngrdcol, lchnk, bergso_grid(:,top_lev:)) + + call subcol_field_avg(am_evp_st, ngrdcol, lchnk, am_evp_st_grid) + + ! Average fields which are not in pbuf + call subcol_field_avg(qrout, ngrdcol, lchnk, qrout_grid) + call subcol_field_avg(qsout, ngrdcol, lchnk, qsout_grid) + call subcol_field_avg(nsout, ngrdcol, lchnk, nsout_grid) + call subcol_field_avg(nrout, ngrdcol, lchnk, nrout_grid) + call subcol_field_avg(cld, ngrdcol, lchnk, cld_grid) + call subcol_field_avg(proc_rates%qcrestot, ngrdcol, lchnk, qcreso_grid(:,top_lev:)) + call subcol_field_avg(proc_rates%melttot, ngrdcol, lchnk, melto_grid(:,top_lev:)) + call subcol_field_avg(proc_rates%mnuccctot, ngrdcol, lchnk, mnuccco_grid(:,top_lev:)) + call subcol_field_avg(proc_rates%mnuccttot, ngrdcol, lchnk, mnuccto_grid(:,top_lev:)) + call subcol_field_avg(proc_rates%bergtot, ngrdcol, lchnk, bergo_grid(:,top_lev:)) + call subcol_field_avg(proc_rates%homotot, ngrdcol, lchnk, homoo_grid(:,top_lev:)) + call subcol_field_avg(proc_rates%msacwitot, ngrdcol, lchnk, msacwio_grid(:,top_lev:)) + call subcol_field_avg(proc_rates%psacwstot, ngrdcol, lchnk, psacwso_grid(:,top_lev:)) + call subcol_field_avg(proc_rates%cmeitot, ngrdcol, lchnk, cmeiout_grid(:,top_lev:)) + call subcol_field_avg(proc_rates%qirestot, ngrdcol, lchnk, qireso_grid(:,top_lev:)) + call subcol_field_avg(proc_rates%prcitot, ngrdcol, lchnk, prcio_grid(:,top_lev:)) + call subcol_field_avg(proc_rates%praitot, ngrdcol, lchnk, praio_grid(:,top_lev:)) + call subcol_field_avg(icwmrst, ngrdcol, lchnk, icwmrst_grid) + call subcol_field_avg(icimrst, ngrdcol, lchnk, icimrst_grid) + call subcol_field_avg(liqcldf, ngrdcol, lchnk, liqcldf_grid) + call subcol_field_avg(icecldf, ngrdcol, lchnk, icecldf_grid) + call subcol_field_avg(icwnc, ngrdcol, lchnk, icwnc_grid) + call subcol_field_avg(icinc, ngrdcol, lchnk, icinc_grid) + call subcol_field_avg(state_loc%pdel, ngrdcol, lchnk, pdel_grid) + call subcol_field_avg(proc_rates%pratot, ngrdcol, lchnk, prao_grid(:,top_lev:)) + call subcol_field_avg(proc_rates%prctot, ngrdcol, lchnk, prco_grid(:,top_lev:)) + + call subcol_field_avg(state_loc%q(:,:,ixnumliq), ngrdcol, lchnk, nc_grid(:,top_lev:)) + call subcol_field_avg(state_loc%q(:,:,ixnumice), ngrdcol, lchnk, ni_grid(:,top_lev:)) + + call subcol_field_avg(proc_rates%qcsedten, ngrdcol, lchnk, qcsedtenout_grid(:,top_lev:)) + call subcol_field_avg(proc_rates%qisedten, ngrdcol, lchnk, qisedtenout_grid(:,top_lev:)) + call subcol_field_avg(proc_rates%vtrmc, ngrdcol, lchnk, vtrmcout_grid(:,top_lev:)) + call subcol_field_avg(proc_rates%vtrmi, ngrdcol, lchnk, vtrmiout_grid(:,top_lev:)) + call subcol_field_avg(proc_rates%qcsevap, ngrdcol, lchnk, qcsevapout_grid(:,top_lev:)) + call subcol_field_avg(proc_rates%qisevap, ngrdcol, lchnk, qisevapout_grid(:,top_lev:)) + + call subcol_field_avg(cldmax, ngrdcol, lchnk, cldmax_grid) + + call subcol_field_avg(state_loc%q(:,:,ixrain), ngrdcol, lchnk, qr_grid) + call subcol_field_avg(state_loc%q(:,:,ixnumrain), ngrdcol, lchnk, nr_grid) + call subcol_field_avg(state_loc%q(:,:,ixsnow), ngrdcol, lchnk, qs_grid) + call subcol_field_avg(state_loc%q(:,:,ixnumsnow), ngrdcol, lchnk, ns_grid) + call subcol_field_avg(proc_rates%qrsedten, ngrdcol, lchnk, qrsedtenout_grid(:,top_lev:)) + call subcol_field_avg(proc_rates%qssedten, ngrdcol, lchnk, qssedtenout_grid(:,top_lev:)) + call subcol_field_avg(proc_rates%umr, ngrdcol, lchnk, umrout_grid(:,top_lev:)) + call subcol_field_avg(proc_rates%ums, ngrdcol, lchnk, umsout_grid(:,top_lev:)) + + if (micro_mg_version > 2) then + call subcol_field_avg(state_loc%q(:,:,ixgraupel), ngrdcol, lchnk, qg_grid) + call subcol_field_avg(state_loc%q(:,:,ixnumgraupel), ngrdcol, lchnk, ng_grid) + call subcol_field_avg(proc_rates%psacrtot, ngrdcol, lchnk, psacro_grid(:,top_lev:)) + call subcol_field_avg(proc_rates%pracgtot, ngrdcol, lchnk, pracgo_grid(:,top_lev:)) + call subcol_field_avg(proc_rates%psacwgtot, ngrdcol, lchnk, psacwgo_grid(:,top_lev:)) + call subcol_field_avg(proc_rates%pgsacwtot, ngrdcol, lchnk, pgsacwo_grid(:,top_lev:)) + call subcol_field_avg(proc_rates%pgracstot, ngrdcol, lchnk, pgracso_grid(:,top_lev:)) + call subcol_field_avg(proc_rates%prdgtot, ngrdcol, lchnk, prdgo_grid(:,top_lev:)) + call subcol_field_avg(proc_rates%qmultgtot, ngrdcol, lchnk, qmultgo_grid(:,top_lev:)) + call subcol_field_avg(proc_rates%qmultrgtot, ngrdcol, lchnk, qmultrgo_grid(:,top_lev:)) + call subcol_field_avg(proc_rates%npracgtot, ngrdcol, lchnk, npracgo_grid(:,top_lev:)) + call subcol_field_avg(proc_rates%nscngtot, ngrdcol, lchnk, nscngo_grid(:,top_lev:)) + call subcol_field_avg(proc_rates%ngracstot, ngrdcol, lchnk, ngracso_grid(:,top_lev:)) + call subcol_field_avg(proc_rates%nmultgtot, ngrdcol, lchnk, nmultgo_grid(:,top_lev:)) + call subcol_field_avg(proc_rates%nmultrgtot, ngrdcol, lchnk, nmultrgo_grid(:,top_lev:)) + call subcol_field_avg(proc_rates%npsacwgtot, ngrdcol, lchnk, npsacwgo_grid(:,top_lev:)) + end if + + else + qcreso_grid(:ncol,:top_lev-1) = 0._r8 + melto_grid(:ncol,:top_lev-1) = 0._r8 + mnuccco_grid(:ncol,:top_lev-1) = 0._r8 + mnuccto_grid(:ncol,:top_lev-1) = 0._r8 + bergo_grid(:ncol,:top_lev-1) = 0._r8 + homoo_grid(:ncol,:top_lev-1) = 0._r8 + msacwio_grid(:ncol,:top_lev-1) = 0._r8 + psacwso_grid(:ncol,:top_lev-1) = 0._r8 + cmeiout_grid(:ncol,:top_lev-1) = 0._r8 + qireso_grid(:ncol,:top_lev-1) = 0._r8 + prcio_grid(:ncol,:top_lev-1) = 0._r8 + praio_grid(:ncol,:top_lev-1) = 0._r8 + prao_grid(:ncol,:top_lev-1) = 0._r8 + prco_grid(:ncol,:top_lev-1) = 0._r8 + qcsedtenout_grid(:ncol,:top_lev-1) = 0._r8 + qisedtenout_grid(:ncol,:top_lev-1) = 0._r8 + vtrmcout_grid(:ncol,:top_lev-1) = 0._r8 + vtrmiout_grid(:ncol,:top_lev-1) = 0._r8 + qcsevapout_grid(:ncol,:top_lev-1) = 0._r8 + qisevapout_grid(:ncol,:top_lev-1) = 0._r8 + qrsedtenout_grid(:ncol,:top_lev-1) = 0._r8 + qssedtenout_grid(:ncol,:top_lev-1) = 0._r8 + umrout_grid(:ncol,:top_lev-1) = 0._r8 + umsout_grid(:ncol,:top_lev-1) = 0._r8 + psacro_grid(:ncol,:top_lev-1) = 0._r8 + pracgo_grid(:ncol,:top_lev-1) = 0._r8 + psacwgo_grid(:ncol,:top_lev-1) = 0._r8 + pgsacwo_grid(:ncol,:top_lev-1) = 0._r8 + pgracso_grid(:ncol,:top_lev-1) = 0._r8 + prdgo_grid(:ncol,:top_lev-1) = 0._r8 + qmultgo_grid(:ncol,:top_lev-1) = 0._r8 + qmultrgo_grid(:ncol,:top_lev-1) = 0._r8 + npracgo_grid(:ncol,:top_lev-1) = 0._r8 + nscngo_grid(:ncol,:top_lev-1) = 0._r8 + ngracso_grid(:ncol,:top_lev-1) = 0._r8 + nmultgo_grid(:ncol,:top_lev-1) = 0._r8 + nmultrgo_grid(:ncol,:top_lev-1) = 0._r8 + npsacwgo_grid(:ncol,:top_lev-1) = 0._r8 + bergso_grid(:ncol,:top_lev-1) = 0._r8 + + ! These pbuf fields need to be assigned. There is no corresponding subcol_field_avg + ! as they are reset before being used, so it would be a needless calculation + lambdac_grid => lambdac + mu_grid => mu + rel_grid => rel + rei_grid => rei + sadice_grid => sadice + sadsnow_grid => sadsnow + dei_grid => dei + des_grid => des + degrau_grid => degrau + + ! fields already on grids, so just assign + prec_str_grid => prec_str + iclwpst_grid => iclwpst + cvreffliq_grid => cvreffliq + cvreffice_grid => cvreffice + mgflxprc_grid => mgflxprc + mgflxsnw_grid => mgflxsnw + qme_grid => qme + nevapr_grid => nevapr + prain_grid => prain + + bergso_grid(:ncol,top_lev:) = proc_rates%bergstot + am_evp_st_grid = am_evp_st + + evpsnow_st_grid(:ncol,top_lev:) = proc_rates%evapsnow + qrout_grid = qrout + qsout_grid = qsout + nsout_grid = nsout + nrout_grid = nrout + cld_grid = cld + qcreso_grid(:ncol,top_lev:) = proc_rates%qcrestot + melto_grid(:ncol,top_lev:) = proc_rates%melttot + mnuccco_grid(:ncol,top_lev:) = proc_rates%mnuccctot + mnuccto_grid(:ncol,top_lev:) = proc_rates%mnuccttot + bergo_grid(:ncol,top_lev:) = proc_rates%bergtot + homoo_grid(:ncol,top_lev:) = proc_rates%homotot + msacwio_grid(:ncol,top_lev:) = proc_rates%msacwitot + psacwso_grid(:ncol,top_lev:) = proc_rates%psacwstot + cmeiout_grid(:ncol,top_lev:) = proc_rates%cmeitot + qireso_grid(:ncol,top_lev:) = proc_rates%qirestot + prcio_grid(:ncol,top_lev:) = proc_rates%prcitot + praio_grid(:ncol,top_lev:) = proc_rates%praitot + icwmrst_grid = icwmrst + icimrst_grid = icimrst + liqcldf_grid = liqcldf + icecldf_grid = icecldf + icwnc_grid = icwnc + icinc_grid = icinc + pdel_grid = state_loc%pdel + prao_grid(:ncol,top_lev:) = proc_rates%pratot + prco_grid(:ncol,top_lev:) = proc_rates%prctot + + nc_grid = state_loc%q(:,:,ixnumliq) + ni_grid = state_loc%q(:,:,ixnumice) + + qcsedtenout_grid(:ncol,top_lev:) = proc_rates%qcsedten + qisedtenout_grid(:ncol,top_lev:) = proc_rates%qisedten + vtrmcout_grid(:ncol,top_lev:) = proc_rates%vtrmc + vtrmiout_grid(:ncol,top_lev:) = proc_rates%vtrmi + qcsevapout_grid(:ncol,top_lev:) = proc_rates%qcsevap + qisevapout_grid(:ncol,top_lev:) = proc_rates%qisevap + + cldmax_grid = cldmax + + qr_grid = state_loc%q(:,:,ixrain) + nr_grid = state_loc%q(:,:,ixnumrain) + qs_grid = state_loc%q(:,:,ixsnow) + ns_grid = state_loc%q(:,:,ixnumsnow) + qrsedtenout_grid(:ncol,top_lev:) = proc_rates%qrsedten + qssedtenout_grid(:ncol,top_lev:) = proc_rates%qssedten + umrout_grid(:ncol,top_lev:) = proc_rates%umr + umsout_grid(:ncol,top_lev:) = proc_rates%ums + +! Zero out terms for budgets if not mg3.... + psacwgo_grid = 0._r8 + pgsacwo_grid = 0._r8 + qmultgo_grid = 0._r8 + + if (micro_mg_version > 2) then + qg_grid = state_loc%q(:,:,ixgraupel) + ng_grid = state_loc%q(:,:,ixnumgraupel) + psacro_grid(:ncol,top_lev:) = proc_rates%psacrtot + pracgo_grid(:ncol,top_lev:) = proc_rates%pracgtot + psacwgo_grid(:ncol,top_lev:) = proc_rates%psacwgtot + pgsacwo_grid(:ncol,top_lev:) = proc_rates%pgsacwtot + pgracso_grid(:ncol,top_lev:) = proc_rates%pgracstot + prdgo_grid(:ncol,top_lev:) = proc_rates%prdgtot + qmultgo_grid(:ncol,top_lev:) = proc_rates%qmultgtot + qmultrgo_grid(:ncol,top_lev:) = proc_rates%qmultrgtot + npracgo_grid(:ncol,top_lev:) = proc_rates%npracgtot + nscngo_grid(:ncol,top_lev:) = proc_rates%nscngtot + ngracso_grid(:ncol,top_lev:) = proc_rates%ngracstot + nmultgo_grid(:ncol,top_lev:) = proc_rates%nmultgtot + nmultrgo_grid(:ncol,top_lev:) = proc_rates%nmultrgtot + npsacwgo_grid(:ncol,top_lev:) = proc_rates%npsacwgtot + end if + + + end if + + ! If on subcolumns, average the rest of the pbuf fields which were modified on subcolumns but are not used further in + ! this parameterization (no need to assign in the non-subcolumn case -- the else step) + if (use_subcol_microp) then + call subcol_field_avg(snow_str, ngrdcol, lchnk, snow_str_grid) + call subcol_field_avg(prec_pcw, ngrdcol, lchnk, prec_pcw_grid) + call subcol_field_avg(snow_pcw, ngrdcol, lchnk, snow_pcw_grid) + call subcol_field_avg(prec_sed, ngrdcol, lchnk, prec_sed_grid) + call subcol_field_avg(snow_sed, ngrdcol, lchnk, snow_sed_grid) + call subcol_field_avg(cldo, ngrdcol, lchnk, cldo_grid) + call subcol_field_avg(mgmrprc, ngrdcol, lchnk, mgmrprc_grid) + call subcol_field_avg(mgmrsnw, ngrdcol, lchnk, mgmrsnw_grid) + call subcol_field_avg(wsedl, ngrdcol, lchnk, wsedl_grid) + call subcol_field_avg(cc_t, ngrdcol, lchnk, cc_t_grid) + call subcol_field_avg(cc_qv, ngrdcol, lchnk, cc_qv_grid) + call subcol_field_avg(cc_ql, ngrdcol, lchnk, cc_ql_grid) + call subcol_field_avg(cc_qi, ngrdcol, lchnk, cc_qi_grid) + call subcol_field_avg(cc_nl, ngrdcol, lchnk, cc_nl_grid) + call subcol_field_avg(cc_ni, ngrdcol, lchnk, cc_ni_grid) + call subcol_field_avg(cc_qlst, ngrdcol, lchnk, cc_qlst_grid) + call subcol_field_avg(iciwpst, ngrdcol, lchnk, iciwpst_grid) + call subcol_field_avg(icswp, ngrdcol, lchnk, icswp_grid) + call subcol_field_avg(cldfsnow, ngrdcol, lchnk, cldfsnow_grid) + + if (micro_mg_version > 2) then + call subcol_field_avg(icgrauwp, ngrdcol, lchnk, icgrauwp_grid) + call subcol_field_avg(cldfgrau, ngrdcol, lchnk, cldfsnow_grid) + end if + + if (rate1_cw2pr_st_idx > 0) then + call subcol_field_avg(rate1ord_cw2pr_st, ngrdcol, lchnk, rate1ord_cw2pr_st_grid) + end if + + end if + + ! ------------------------------------- ! + ! Size distribution calculation ! + ! ------------------------------------- ! + + ! Calculate rho (on subcolumns if turned on) for size distribution + ! parameter calculations and average it if needed + ! + ! State instead of state_loc to preserve answers for MG1 (and in any + ! case, it is unlikely to make much difference). + rho(:ncol,top_lev:) = state%pmid(:ncol,top_lev:) / & + (rair*state%t(:ncol,top_lev:)) + if (use_subcol_microp) then + call subcol_field_avg(rho, ngrdcol, lchnk, rho_grid) + else + rho_grid = rho + end if + + ! Effective radius for cloud liquid, fixed number. + mu_grid = 0._r8 + lambdac_grid = 0._r8 + rel_fn_grid = 10._r8 + + ncic_grid = 1.e8_r8 + + do k = top_lev, pver + !$acc data copyin (mg_liq_props,icwmrst_grid(:ngrdcol,k),rho_grid(:ngrdcol,k)) & + !$acc copy (ncic_grid(:ngrdcol,k)) & + !$acc copyout (mu_grid(:ngrdcol,k),lambdac_grid(:ngrdcol,k)) + call size_dist_param_liq(mg_liq_props, icwmrst_grid(:ngrdcol,k), & + ncic_grid(:ngrdcol,k), rho_grid(:ngrdcol,k), & + mu_grid(:ngrdcol,k), lambdac_grid(:ngrdcol,k), ngrdcol) + !$acc end data + end do + + where (icwmrst_grid(:ngrdcol,top_lev:) > qsmall) + rel_fn_grid(:ngrdcol,top_lev:) = & + (mu_grid(:ngrdcol,top_lev:) + 3._r8)/ & + lambdac_grid(:ngrdcol,top_lev:)/2._r8 * 1.e6_r8 + end where + + ! Effective radius for cloud liquid, and size parameters + ! mu_grid and lambdac_grid. + mu_grid = 0._r8 + lambdac_grid = 0._r8 + rel_grid = 10._r8 + + ! Calculate ncic on the grid + ncic_grid(:ngrdcol,top_lev:) = nc_grid(:ngrdcol,top_lev:) / & + max(mincld,liqcldf_grid(:ngrdcol,top_lev:)) + + do k = top_lev, pver + !$acc data copyin (mg_liq_props,icwmrst_grid(:ngrdcol,k), rho_grid(:ngrdcol,k)) & + !$acc copy (ncic_grid(:ngrdcol,k)) & + !$acc copyout (mu_grid(:ngrdcol,k),lambdac_grid(:ngrdcol,k)) + call size_dist_param_liq(mg_liq_props, icwmrst_grid(:ngrdcol,k), & + ncic_grid(:ngrdcol,k), rho_grid(:ngrdcol,k), & + mu_grid(:ngrdcol,k), lambdac_grid(:ngrdcol,k), ngrdcol) + !$acc end data + end do + + where (icwmrst_grid(:ngrdcol,top_lev:) >= qsmall) + rel_grid(:ngrdcol,top_lev:) = & + (mu_grid(:ngrdcol,top_lev:) + 3._r8) / & + lambdac_grid(:ngrdcol,top_lev:)/2._r8 * 1.e6_r8 + elsewhere + ! Deal with the fact that size_dist_param_liq sets mu_grid to -100 + ! wherever there is no cloud. + mu_grid(:ngrdcol,top_lev:) = 0._r8 + end where + + ! Rain/snow effective diameter. + drout2_grid = 0._r8 + reff_rain_grid = 0._r8 + des_grid = 0._r8 + dsout2_grid = 0._r8 + reff_snow_grid = 0._r8 + reff_grau_grid = 0._r8 + + ! Prognostic precipitation + + where (qr_grid(:ngrdcol,top_lev:) >= 1.e-7_r8) + drout2_grid(:ngrdcol,top_lev:) = avg_diameter( & + qr_grid(:ngrdcol,top_lev:), & + nr_grid(:ngrdcol,top_lev:) * rho_grid(:ngrdcol,top_lev:), & + rho_grid(:ngrdcol,top_lev:), rhow) + + reff_rain_grid(:ngrdcol,top_lev:) = drout2_grid(:ngrdcol,top_lev:) * & + shapeparam * micron2meter + end where + + where (qs_grid(:ngrdcol,top_lev:) >= 1.e-7_r8) + dsout2_grid(:ngrdcol,top_lev:) = avg_diameter( & + qs_grid(:ngrdcol,top_lev:), & + ns_grid(:ngrdcol,top_lev:) * rho_grid(:ngrdcol,top_lev:), & + rho_grid(:ngrdcol,top_lev:), rhosn) + + des_grid(:ngrdcol,top_lev:) = dsout2_grid(:ngrdcol,top_lev:) *& + 3._r8 * rhosn/rhows + + reff_snow_grid(:ngrdcol,top_lev:) = dsout2_grid(:ngrdcol,top_lev:) * & + shapeparam * micron2meter + end where + + +! Graupel/Hail size distribution Placeholder + if (micro_mg_version > 2) then + degrau_grid = 0._r8 + where (qg_grid(:ngrdcol,top_lev:) >= 1.e-7_r8) + dgout2_grid(:ngrdcol,top_lev:) = avg_diameter( & + qg_grid(:ngrdcol,top_lev:), & + ng_grid(:ngrdcol,top_lev:) * rho_grid(:ngrdcol,top_lev:), & + rho_grid(:ngrdcol,top_lev:), rhog) + + reff_grau_grid(:ngrdcol,top_lev:) = dgout2_grid(:ngrdcol,top_lev:) * & + 1.5_r8 * 1.e6_r8 + degrau_grid(:ngrdcol,top_lev:) = dgout2_grid(:ngrdcol,top_lev:) *& + 3._r8 * rhog/rhows + end where + end if + + ! Effective radius and diameter for cloud ice. + rei_grid = 25._r8 + + niic_grid(:ngrdcol,top_lev:) = ni_grid(:ngrdcol,top_lev:) / & + max(mincld,icecldf_grid(:ngrdcol,top_lev:)) + + do k = top_lev, pver + !$acc data copyin (mg_ice_props, icimrst_grid(:ngrdcol,k)) & + !$acc copy (niic_grid(:ngrdcol,k)) & + !$acc copyout (rei_grid(:ngrdcol,k)) + call size_dist_param_basic(mg_ice_props,icimrst_grid(:ngrdcol,k), & + niic_grid(:ngrdcol,k),rei_grid(:ngrdcol,k),ngrdcol) + !$acc end data + end do + + where (icimrst_grid(:ngrdcol,top_lev:) >= qsmall) + rei_grid(:ngrdcol,top_lev:) = 1.5_r8/rei_grid(:ngrdcol,top_lev:) & + * 1.e6_r8 + elsewhere + rei_grid(:ngrdcol,top_lev:) = 25._r8 + end where + + dei_grid = rei_grid * rhoi/rhows * 2._r8 + + ! Limiters for low cloud fraction. + do k = top_lev, pver + do i = 1, ngrdcol + ! Convert snow effective diameter to microns + des_grid(i,k) = des_grid(i,k) * 1.e6_r8 + if ( ast_grid(i,k) < 1.e-4_r8 ) then + mu_grid(i,k) = mucon + lambdac_grid(i,k) = (mucon + 1._r8)/dcon + dei_grid(i,k) = deicon + end if + end do + end do + + mgreffrain_grid(:ngrdcol,top_lev:pver) = reff_rain_grid(:ngrdcol,top_lev:pver) + mgreffsnow_grid(:ngrdcol,top_lev:pver) = reff_snow_grid(:ngrdcol,top_lev:pver) + + ! ------------------------------------- ! + ! Precipitation efficiency Calculation ! + ! ------------------------------------- ! + + !----------------------------------------------------------------------- + ! Liquid water path + + ! Compute liquid water paths, and column condensation + tgliqwp_grid(:ngrdcol) = 0._r8 + tgcmeliq_grid(:ngrdcol) = 0._r8 + do k = top_lev, pver + do i = 1, ngrdcol + tgliqwp_grid(i) = tgliqwp_grid(i) + iclwpst_grid(i,k)*cld_grid(i,k) + + if (cmeliq_grid(i,k) > 1.e-12_r8) then + !convert cmeliq to right units: kgh2o/kgair/s * kgair/m2 / kgh2o/m3 = m/s + tgcmeliq_grid(i) = tgcmeliq_grid(i) + cmeliq_grid(i,k) * & + (pdel_grid(i,k) / gravit) / rhoh2o + end if + end do + end do + + ! note: 1e-6 kgho2/kgair/s * 1000. pa / (9.81 m/s2) / 1000 kgh2o/m3 = 1e-7 m/s + ! this is 1ppmv of h2o in 10hpa + ! alternatively: 0.1 mm/day * 1.e-4 m/mm * 1/86400 day/s = 1.e-9 + + !----------------------------------------------------------------------- + ! precipitation efficiency calculation (accumulate cme and precip) + + minlwp = 0.01_r8 !minimum lwp threshold (kg/m3) + + ! zero out precip efficiency and total averaged precip + pe_grid(:ngrdcol) = 0._r8 + tpr_grid(:ngrdcol) = 0._r8 + pefrac_grid(:ngrdcol) = 0._r8 + + ! accumulate precip and condensation + do i = 1, ngrdcol + + acgcme_grid(i) = acgcme_grid(i) + tgcmeliq_grid(i) + acprecl_grid(i) = acprecl_grid(i) + prec_str_grid(i) + acnum_grid(i) = acnum_grid(i) + 1 + + ! if LWP is zero, then 'end of cloud': calculate precip efficiency + if (tgliqwp_grid(i) < minlwp) then + if (acprecl_grid(i) > 5.e-8_r8) then + tpr_grid(i) = max(acprecl_grid(i)/acnum_grid(i), 1.e-15_r8) + if (acgcme_grid(i) > 1.e-10_r8) then + pe_grid(i) = min(max(acprecl_grid(i)/acgcme_grid(i), 1.e-15_r8), 1.e5_r8) + pefrac_grid(i) = 1._r8 + end if + end if + + ! reset counters +! if (pe_grid(i) /= 0._r8 .and. (pe_grid(i) < 1.e-8_r8 .or. pe_grid(i) > 1.e3_r8)) then +! write (iulog,*) 'PE_grid:ANOMALY pe_grid, acprecl_grid, acgcme_grid, tpr_grid, acnum_grid ', & +! pe_grid(i),acprecl_grid(i), acgcme_grid(i), tpr_grid(i), acnum_grid(i) +! endif + + acprecl_grid(i) = 0._r8 + acgcme_grid(i) = 0._r8 + acnum_grid(i) = 0 + end if ! end LWP zero conditional + + ! if never find any rain....(after 10^3 timesteps...) + if (acnum_grid(i) > 1000) then + acnum_grid(i) = 0 + acprecl_grid(i) = 0._r8 + acgcme_grid(i) = 0._r8 + end if + + end do + + !----------------------------------------------------------------------- + ! vertical average of non-zero accretion, autoconversion and ratio. + ! vars: vprco_grid(i),vprao_grid(i),racau_grid(i),cnt_grid + + vprao_grid = 0._r8 + cnt_grid = 0 + do k = top_lev, pver + vprao_grid(:ngrdcol) = vprao_grid(:ngrdcol) + prao_grid(:ngrdcol,k) + where (prao_grid(:ngrdcol,k) /= 0._r8) cnt_grid(:ngrdcol) = cnt_grid(:ngrdcol) + 1 + end do + + where (cnt_grid > 0) vprao_grid = vprao_grid/cnt_grid + + vprco_grid = 0._r8 + cnt_grid = 0 + do k = top_lev, pver + vprco_grid(:ngrdcol) = vprco_grid(:ngrdcol) + prco_grid(:ngrdcol,k) + where (prco_grid(:ngrdcol,k) /= 0._r8) cnt_grid(:ngrdcol) = cnt_grid(:ngrdcol) + 1 + end do + + where (cnt_grid > 0) + vprco_grid = vprco_grid/cnt_grid + racau_grid = vprao_grid/vprco_grid + elsewhere + racau_grid = 0._r8 + end where + + racau_grid = min(racau_grid, 1.e10_r8) + +!----------------------------------------------------------------------- +! Diagnostic Rainbow Calculation. Seriously. +!----------------------------------------------------------------------- + + do i = 1, ngrdcol + + top_idx = pver + convmx = 0._r8 + frlow = 0._r8 + cldmx = 0._r8 + cldtot = maxval(ast(i,top_lev:)) + +! Find levels in surface layer + do k = top_lev, pver + if (state%pmid(i,k) > rb_pmin) then + top_idx = min(k,top_idx) + end if + end do + +!For all fractional precip calculated below, use maximum in surface layer. +!For convective precip, base on convective cloud area + convmx = maxval(concld(i,top_idx:)) +!For stratiform precip, base on precip fraction + cldmx= maxval(freqr(i,top_idx:)) +! Combine and use maximum of strat or conv fraction + frlow= max(cldmx,convmx) + +!max precip + rmax=maxval(qrout_grid(i,top_idx:)) + +! Stratiform precip mixing ratio OR some convective precip +! (rval = true if any sig precip) + + rval = ((precc(i) > rb_rcmin) .or. (rmax > rb_rmin)) + +!Now can find conditions for a rainbow: +! Maximum cloud cover (CLDTOT) < 0.5 +! 48 < SZA < 90 +! freqr (below rb_pmin) > 0.25 +! Some rain (liquid > 1.e-6 kg/kg, convective precip > 1.e-7 m/s + + if ((cldtot < 0.5_r8) .and. (sza(i) > 48._r8) .and. (sza(i) < 90._r8) .and. rval) then + +!Rainbow 'probability' (area) derived from solid angle theory +!as the fraction of the hemisphere for a spherical cap with angle phi=sza-48. +! This is only valid between 48 < sza < 90 (controlled for above). + + rbfrac(i) = max(0._r8,(1._r8-COS((sza(i)-48._r8)*deg2rad))/2._r8) * frlow + rbfreq(i) = 1.0_r8 + end if + + end do ! end column loop for rainbows + + call history_out_field('RBFRAC', rbfrac) ! subcols + call history_out_field('RBFREQ', rbfreq) ! subcols + + + ! --------------------- ! + ! History Output Fields ! + ! --------------------- ! + + ! Column droplet concentration + cdnumc_grid(:ngrdcol) = sum(nc_grid(:ngrdcol,top_lev:pver) * & + pdel_grid(:ngrdcol,top_lev:pver)/gravit, dim=2) + + ! Averaging for new output fields + efcout_grid = 0._r8 + efiout_grid = 0._r8 + ncout_grid = 0._r8 + niout_grid = 0._r8 + freql_grid = 0._r8 + freqi_grid = 0._r8 + icwmrst_grid_out = 0._r8 + icimrst_grid_out = 0._r8 + freqm_grid = 0._r8 + freqsl_grid = 0._r8 + freqslm_grid = 0._r8 + + do k = top_lev, pver + do i = 1, ngrdcol + if ( liqcldf_grid(i,k) > 0.01_r8 .and. icwmrst_grid(i,k) > 5.e-5_r8 ) then + efcout_grid(i,k) = rel_grid(i,k) * liqcldf_grid(i,k) + ncout_grid(i,k) = icwnc_grid(i,k) * liqcldf_grid(i,k) + freql_grid(i,k) = liqcldf_grid(i,k) + icwmrst_grid_out(i,k) = icwmrst_grid(i,k) + end if + if ( icecldf_grid(i,k) > 0.01_r8 .and. icimrst_grid(i,k) > 1.e-6_r8 ) then + efiout_grid(i,k) = rei_grid(i,k) * icecldf_grid(i,k) + niout_grid(i,k) = icinc_grid(i,k) * icecldf_grid(i,k) + freqi_grid(i,k) = icecldf_grid(i,k) + icimrst_grid_out(i,k) = icimrst_grid(i,k) + end if + + ! Supercooled liquid + if (freql_grid(i,k) > 0.01_r8 .and. freqi_grid(i,k) > 0.01_r8 ) then + freqm_grid(i,k)=min(liqcldf_grid(i,k),icecldf_grid(i,k)) + end if + if (freql_grid(i,k) > 0.01_r8 .and. freqi_grid(i,k) < 0.01_r8 .and. state_loc%t(i,k) < tmelt ) then + freqsl_grid(i,k)=liqcldf_grid(i,k) + end if + if (freql_grid(i,k) > 0.01_r8 .and. freqi_grid(i,k) > 0.01_r8 .and. state_loc%t(i,k) < tmelt ) then + freqslm_grid(i,k)=liqcldf_grid(i,k) + end if + + end do + end do + + ! Cloud top effective radius and number. + fcti_grid = 0._r8 + fctl_grid = 0._r8 + ctrel_grid = 0._r8 + ctrei_grid = 0._r8 + ctnl_grid = 0._r8 + ctni_grid = 0._r8 + fctm_grid = 0._r8 + fctsl_grid = 0._r8 + fctslm_grid= 0._r8 + + do i = 1, ngrdcol + do k = top_lev, pver + if ( liqcldf_grid(i,k) > 0.01_r8 .and. icwmrst_grid(i,k) > 1.e-7_r8 ) then + ctrel_grid(i) = rel_grid(i,k) * liqcldf_grid(i,k) + ctnl_grid(i) = icwnc_grid(i,k) * liqcldf_grid(i,k) + fctl_grid(i) = liqcldf_grid(i,k) + + ! Cloud Top Mixed phase, supercooled liquid only and supercooled liquid mixed + if (freqi_grid(i,k) > 0.01_r8) then + fctm_grid(i)=min(liqcldf_grid(i,k),icecldf_grid(i,k)) + end if + if (freqi_grid(i,k) < 0.01_r8 .and. state_loc%t(i,k) < tmelt ) then + fctsl_grid(i)=liqcldf_grid(i,k) + end if + if (freqi_grid(i,k) > 0.01_r8 .and. state_loc%t(i,k) < tmelt ) then + fctslm_grid(i)=liqcldf_grid(i,k) + end if + + exit + end if + + if ( icecldf_grid(i,k) > 0.01_r8 .and. icimrst_grid(i,k) > 1.e-7_r8 ) then + ctrei_grid(i) = rei_grid(i,k) * icecldf_grid(i,k) + ctni_grid(i) = icinc_grid(i,k) * icecldf_grid(i,k) + fcti_grid(i) = icecldf_grid(i,k) + exit + end if + end do + end do + + ! Evaporation of stratiform precipitation fields for UNICON + evprain_st_grid(:ngrdcol,:pver) = nevapr_grid(:ngrdcol,:pver) - evpsnow_st_grid(:ngrdcol,:pver) + do k = top_lev, pver + do i = 1, ngrdcol + evprain_st_grid(i,k) = max(evprain_st_grid(i,k), 0._r8) + evpsnow_st_grid(i,k) = max(evpsnow_st_grid(i,k), 0._r8) + end do + end do + + ! Assign the values to the pbuf pointers if they exist in pbuf + if (qrain_idx > 0) qrout_grid_ptr = qrout_grid + if (qsnow_idx > 0) qsout_grid_ptr = qsout_grid + if (nrain_idx > 0) nrout_grid_ptr = nrout_grid + if (nsnow_idx > 0) nsout_grid_ptr = nsout_grid + if (qcsedten_idx > 0) qcsedtenout_grid_ptr = qcsedtenout_grid + if (qrsedten_idx > 0) qrsedtenout_grid_ptr = qrsedtenout_grid + if (qisedten_idx > 0) qisedtenout_grid_ptr = qisedtenout_grid + if (qssedten_idx > 0) qssedtenout_grid_ptr = qssedtenout_grid + if (vtrmc_idx > 0) vtrmcout_grid_ptr = vtrmcout_grid + if (umr_idx > 0) umrout_grid_ptr = umrout_grid + if (vtrmi_idx > 0) vtrmiout_grid_ptr = vtrmiout_grid + if (ums_idx > 0) umsout_grid_ptr = umsout_grid + if (qcsevap_idx > 0 ) qcsevapout_grid_ptr = qcsevapout_grid + if (qisevap_idx > 0 ) qisevapout_grid_ptr = qisevapout_grid + + ! --------------------------------------------- ! + ! General outfield calls for microphysics ! + ! --------------------------------------------- ! + + ! Output a handle of variables which are calculated on the fly + + ftem_grid = 0._r8 + + ftem_grid(:ngrdcol,top_lev:pver) = qcreso_grid(:ngrdcol,top_lev:pver) + call history_out_field( 'MPDW2V', ftem_grid) + + ftem_grid(:ngrdcol,top_lev:pver) = melto_grid(:ngrdcol,top_lev:pver) - mnuccco_grid(:ngrdcol,top_lev:pver)& + - mnuccto_grid(:ngrdcol,top_lev:pver) - bergo_grid(:ngrdcol,top_lev:pver) - homoo_grid(:ngrdcol,top_lev:pver)& + - msacwio_grid(:ngrdcol,top_lev:pver) + call history_out_field( 'MPDW2I', ftem_grid) + + if (micro_mg_version > 2) then + ftem_grid(:ngrdcol,top_lev:pver) = -prao_grid(:ngrdcol,top_lev:pver) - prco_grid(:ngrdcol,top_lev:pver)& + - psacwso_grid(:ngrdcol,top_lev:pver) - bergso_grid(:ngrdcol,top_lev:pver)& + - psacwgo_grid(:ngrdcol,top_lev:pver) - pgsacwo_grid(:ngrdcol,top_lev:pver) + else + ftem_grid(:ngrdcol,top_lev:pver) = -prao_grid(:ngrdcol,top_lev:pver) - prco_grid(:ngrdcol,top_lev:pver)& + - psacwso_grid(:ngrdcol,top_lev:pver) - bergso_grid(:ngrdcol,top_lev:pver) + endif + + call history_out_field( 'MPDW2P', ftem_grid) + + ftem_grid(:ngrdcol,top_lev:pver) = cmeiout_grid(:ngrdcol,top_lev:pver) + qireso_grid(:ngrdcol,top_lev:pver) + call history_out_field( 'MPDI2V', ftem_grid) + + if (micro_mg_version > 2) then + ftem_grid(:ngrdcol,top_lev:pver) = -melto_grid(:ngrdcol,top_lev:pver) + mnuccco_grid(:ngrdcol,top_lev:pver) & + + mnuccto_grid(:ngrdcol,top_lev:pver) + bergo_grid(:ngrdcol,top_lev:pver) + homoo_grid(:ngrdcol,top_lev:pver)& + + msacwio_grid(:ngrdcol,top_lev:pver)& + - qmultgo_grid(:ngrdcol,top_lev:pver) + else + ftem_grid(:ngrdcol,top_lev:pver) = -melto_grid(:ngrdcol,top_lev:pver) + mnuccco_grid(:ngrdcol,top_lev:pver) & + + mnuccto_grid(:ngrdcol,top_lev:pver) + bergo_grid(:ngrdcol,top_lev:pver) + homoo_grid(:ngrdcol,top_lev:pver)& + + msacwio_grid(:ngrdcol,top_lev:pver) + endif + + call history_out_field( 'MPDI2W', ftem_grid) + + ftem_grid(:ngrdcol,top_lev:pver) = -prcio_grid(:ngrdcol,top_lev:pver) - praio_grid(:ngrdcol,top_lev:pver) + call history_out_field( 'MPDI2P', ftem_grid) + + ! Output fields which have not been averaged already, averaging if use_subcol_microp is true + if (trim(micro_mg_warm_rain) == 'tau' .or. trim(micro_mg_warm_rain) == 'emulated') then + call history_out_field('scale_qc', proc_rates%scale_qc) ! subcols + call history_out_field('scale_nc', proc_rates%scale_nc) ! subcols + call history_out_field('scale_qr', proc_rates%scale_qr) ! subcols + call history_out_field('scale_nr', proc_rates%scale_nr) ! subcols + call history_out_field('amk_c', proc_rates%amk_c) ! subcols + call history_out_field('ank_c', proc_rates%ank_c) ! subcols + call history_out_field('amk_r', proc_rates%amk_r) ! subcols + call history_out_field('ank_r', proc_rates%ank_r) ! subcols + call history_out_field('amk', proc_rates%amk) ! subcols + call history_out_field('ank', proc_rates%ank) ! subcols + call history_out_field('amk_out', proc_rates%amk_out) ! subcols + call history_out_field('ank_out', proc_rates%ank_out) ! subcols + call history_out_field('QC_TAU_out', proc_rates%qc_out_TAU) ! subcols + call history_out_field('NC_TAU_out', proc_rates%nc_out_TAU) ! subcols + call history_out_field('QR_TAU_out', proc_rates%qr_out_TAU) ! subcols + call history_out_field('NR_TAU_out', proc_rates%nr_out_TAU) ! subcols + call history_out_field('qctend_TAU', proc_rates%qctend_TAU) ! subcols + call history_out_field('nctend_TAU', proc_rates%nctend_TAU) ! subcols + call history_out_field('qrtend_TAU', proc_rates%qrtend_TAU) ! subcols + call history_out_field('nrtend_TAU', proc_rates%nrtend_TAU) ! subcols + call history_out_field('gmnnn_lmnnn_TAU', proc_rates%gmnnn_lmnnn_TAU) ! subcols + call history_out_field('ML_fixer', proc_rates%ML_fixer) ! subcols + call history_out_field('qc_fixer', proc_rates%qc_fixer) ! subcols + call history_out_field('nc_fixer', proc_rates%nc_fixer) ! subcols + call history_out_field('qr_fixer', proc_rates%qr_fixer) ! subcols + call history_out_field('nr_fixer', proc_rates%nr_fixer) ! subcols + call history_out_field('QC_TAU_in', proc_rates%qc_in_TAU) ! subcols + call history_out_field('NC_TAU_in', proc_rates%nc_in_TAU) ! subcols + call history_out_field('QR_TAU_in', proc_rates%qr_in_TAU) ! subcols + call history_out_field('NR_TAU_in', proc_rates%nr_in_TAU) ! subcols + end if + + if (trim(micro_mg_warm_rain) == 'sb2001') then + call history_out_field('qctend_SB2001', proc_rates%qctend_SB2001) ! subcols + call history_out_field('nctend_SB2001', proc_rates%nctend_SB2001) ! subcols + call history_out_field('qrtend_SB2001', proc_rates%qrtend_SB2001) ! subcols + call history_out_field('nrtend_SB2001', proc_rates%nrtend_SB2001) ! subcols + end if + if (trim(micro_mg_warm_rain) == 'kk2000') then + call history_out_field('qctend_KK2000', proc_rates%qctend_KK2000) ! subcols + call history_out_field('nctend_KK2000', proc_rates%nctend_KK2000) ! subcols + call history_out_field('qrtend_KK2000', proc_rates%qrtend_KK2000) ! subcols + call history_out_field('nrtend_KK2000', proc_rates%nrtend_KK2000) ! subcols + end if + call history_out_field('LAMC', proc_rates%lamc_out) ! subcols + call history_out_field('LAMR', proc_rates%lamr_out) ! subcols + call history_out_field('PGAM', proc_rates%pgam_out) ! subcols + call history_out_field('N0R', proc_rates%n0r_out) ! subcols + + call history_out_field('MPICLWPI', iclwpi) ! subcols + call history_out_field('MPICIWPI', iciwpi) ! subcols + call history_out_field('REFL', refl) ! subcols + call history_out_field('AREFL', arefl) ! subcols + call history_out_field('AREFLZ', areflz) ! subcols + call history_out_field('FREFL', frefl) ! subcols + call history_out_field('CSRFL', csrfl) ! subcols + call history_out_field('ACSRFL', acsrfl) ! subcols + call history_out_field('FCSRFL', fcsrfl) ! subcols + call history_out_field('REFL10CM', refl10cm) ! subcols + call history_out_field('REFLZ10CM', reflz10cm) ! subcols + call history_out_field('RERCLD', rercld) ! subcols + call history_out_field('NCAL', ncal) ! subcols + call history_out_field('NCAI', ncai) ! subcols + call history_out_field('AQRAIN', qrout2) ! subcols + call history_out_field('AQSNOW', qsout2) ! subcols + call history_out_field('ANRAIN', nrout2) ! subcols + call history_out_field('ANSNOW', nsout2) ! subcols + call history_out_field('FREQR', freqr) ! subcols + call history_out_field('FREQS', freqs) ! subcols + call history_out_field('MPDT', tlat) ! subcols + call history_out_field('MPDQ', qvlat) ! subcols + call history_out_field('MPDLIQ', qcten) ! subcols + call history_out_field('MPDICE', qiten) ! subcols + call history_out_field('MPDNLIQ', ncten) ! subcols + call history_out_field('MPDNICE', niten) ! subcols + call history_out_field('EVAPSNOW', proc_rates%evapsnow) ! subcols + call history_out_field('QCSEVAP', proc_rates%qcsevap) ! subcols + call history_out_field('QISEVAP', proc_rates%qisevap) ! subcols + call history_out_field('QVRES', proc_rates%qvres) ! subcols + call history_out_field('VTRMC', proc_rates%vtrmc) ! subcols + call history_out_field('VTRMI', proc_rates%vtrmi) ! subcols + call history_out_field('QCSEDTEN', proc_rates%qcsedten) ! subcols + call history_out_field('QISEDTEN', proc_rates%qisedten) ! subcols + call history_out_field('QRSEDTEN', proc_rates%qrsedten) ! subcols + call history_out_field('QSSEDTEN', proc_rates%qssedten) ! subcols + call history_out_field('MNUCCRIO', proc_rates%mnuccritot) ! subcols + call history_out_field('MNUDEPO', proc_rates%mnudeptot) ! subcols + call history_out_field('MELTSTOT', proc_rates%meltstot) ! subcols + call history_out_field('MNUCCDO', proc_rates%mnuccdtot) ! subcols + call history_out_field('MNUCCDOhet', mnuccdohet) ! subcols + call history_out_field('MNUCCRO', proc_rates%mnuccrtot) ! subcols + call history_out_field('PRACSO', proc_rates%pracstot ) ! subcols + call history_out_field('VAPDEPSO', proc_rates%vapdepstot) ! subcols + call history_out_field('MELTSDT', proc_rates%meltsdttot) ! subcols + call history_out_field('FRZRDT', proc_rates%frzrdttot ) ! subcols + call history_out_field('FICE', nfice) ! subcols + call history_out_field('CLDFSNOW', cldfsnow) ! subcols + call history_out_field ('NNUCCCO', proc_rates%nnuccctot ) ! subcols + call history_out_field ('NNUCCTO', proc_rates%nnuccttot ) ! subcols + call history_out_field ('NNUCCDO', proc_rates%nnuccdtot ) ! subcols + call history_out_field ('NNUDEPO', proc_rates%nnudeptot ) ! subcols + call history_out_field ('NHOMO', proc_rates%nhomotot ) ! subcols + call history_out_field ('NNUCCRO', proc_rates%nnuccrtot ) ! subcols + call history_out_field ('NNUCCRIO', proc_rates%nnuccritot ) ! subcols + call history_out_field ('NSACWIO', proc_rates%nsacwitot ) ! subcols + call history_out_field ('NPRAO', proc_rates%npratot ) ! subcols + call history_out_field ('NPSACWSO', proc_rates%npsacwstot ) ! subcols + call history_out_field ('NPRAIO', proc_rates%npraitot ) ! subcols + call history_out_field ('NPRACSO', proc_rates%npracstot ) ! subcols + call history_out_field ('NPRCO', proc_rates%nprctot ) ! subcols + call history_out_field ('NPRCIO', proc_rates%nprcitot ) ! subcols + call history_out_field ('NCSEDTEN', proc_rates%ncsedten ) ! subcols + call history_out_field ('NISEDTEN', proc_rates%nisedten ) ! subcols + call history_out_field ('NRSEDTEN', proc_rates%nrsedten ) ! subcols + call history_out_field ('NSSEDTEN', proc_rates%nssedten ) ! subcols + call history_out_field ('NMELTO', proc_rates%nmelttot ) ! subcols + call history_out_field ('NMELTS', proc_rates%nmeltstot ) ! subcols + + call history_out_field('UMR', proc_rates%umr) ! subcols + call history_out_field('UMS', proc_rates%ums) ! subcols + + call history_out_field('QCRAT', qcrat) ! subcols + + if (micro_mg_version > 2) then + call history_out_field('UMG', proc_rates%umg) ! subcols + call history_out_field('QGSEDTEN', proc_rates%qgsedten) ! subcols + call history_out_field('FREQG', freqg) ! subcols + call history_out_field('AQGRAU', qgout2) ! subcols + call history_out_field('ANGRAU', ngout2) ! subcols + call history_out_field('CLDFGRAU', cldfgrau) ! subcols + call history_out_field('MELTGTOT', proc_rates%meltgtot) ! subcols + call history_out_field('NMELTG', proc_rates%nmeltgtot) ! subcols + call history_out_field('NGSEDTEN', proc_rates%ngsedten ) ! subcols + + end if + + ! Example subcolumn history_out_field call + if (use_subcol_microp) then + call history_out_field('FICE_SCOL', nfice) ! subcols + call history_out_field('MPDLIQ_SCOL', ptend%q(:,:,ixcldliq)) ! subcols + call history_out_field('MPDICE_SCOL', qiten) ! subcols + end if + + ! Output fields which are already on the grid + call history_out_field('QRAIN', qrout_grid) + call history_out_field('QSNOW', qsout_grid) + call history_out_field('NRAIN', nrout_grid) + call history_out_field('NSNOW', nsout_grid) + call history_out_field('CV_REFFLIQ', cvreffliq_grid) + call history_out_field('CV_REFFICE', cvreffice_grid) + call history_out_field('LS_FLXPRC', mgflxprc_grid) + call history_out_field('LS_FLXSNW', mgflxsnw_grid) + call history_out_field('CME', qme_grid) + call history_out_field('PRODPREC', prain_grid) + call history_out_field('EVAPPREC', nevapr_grid) + call history_out_field('QCRESO', qcreso_grid) + call history_out_field('LS_REFFRAIN', mgreffrain_grid) + call history_out_field('LS_REFFSNOW', mgreffsnow_grid) + call history_out_field('DSNOW', des_grid) + call history_out_field('ADRAIN', drout2_grid) + call history_out_field('ADSNOW', dsout2_grid) + call history_out_field('PE', pe_grid) + call history_out_field('PEFRAC', pefrac_grid) + call history_out_field('APRL', tpr_grid) + call history_out_field('VPRAO', vprao_grid) + call history_out_field('VPRCO', vprco_grid) + call history_out_field('RACAU', racau_grid) + call history_out_field('AREL', efcout_grid) + call history_out_field('AREI', efiout_grid) + call history_out_field('AWNC' , ncout_grid) + call history_out_field('AWNI' , niout_grid) + call history_out_field('FREQL', freql_grid) + call history_out_field('FREQI', freqi_grid) + call history_out_field('ACTREL', ctrel_grid) + call history_out_field('ACTREI', ctrei_grid) + call history_out_field('ACTNL', ctnl_grid) + call history_out_field('ACTNI', ctni_grid) + call history_out_field('FCTL', fctl_grid) + call history_out_field('FCTI', fcti_grid) + call history_out_field('ICINC', icinc_grid) + call history_out_field('ICWNC', icwnc_grid) + call history_out_field('EFFLIQ_IND', rel_fn_grid) + call history_out_field('CDNUMC', cdnumc_grid) + call history_out_field('REL', rel_grid) + call history_out_field('REI', rei_grid) + call history_out_field('MG_SADICE', sadice_grid) + call history_out_field('MG_SADSNOW', sadsnow_grid) + call history_out_field('ICIMRST', icimrst_grid_out) + call history_out_field('ICWMRST', icwmrst_grid_out) + call history_out_field('CMEIOUT', cmeiout_grid) + call history_out_field('PRAO', prao_grid) + call history_out_field('PRCO', prco_grid) + call history_out_field('MNUCCCO', mnuccco_grid) + call history_out_field('MNUCCTO', mnuccto_grid) + call history_out_field('MSACWIO', msacwio_grid) + call history_out_field('PSACWSO', psacwso_grid) + call history_out_field('BERGSO', bergso_grid) + call history_out_field('BERGO', bergo_grid) + call history_out_field('MELTO', melto_grid) + call history_out_field('HOMOO', homoo_grid) + call history_out_field('PRCIO', prcio_grid) + call history_out_field('PRAIO', praio_grid) + call history_out_field('QIRESO', qireso_grid) + call history_out_field('FREQM', freqm_grid) + call history_out_field('FREQSL', freqsl_grid) + call history_out_field('FREQSLM', freqslm_grid) + call history_out_field('FCTM', fctm_grid) + call history_out_field('FCTSL', fctsl_grid) + call history_out_field('FCTSLM', fctslm_grid) + + if (micro_mg_version > 2) then + call history_out_field('PRACGO', pracgo_grid) + call history_out_field('PSACRO', psacro_grid) + call history_out_field('PSACWGO', psacwgo_grid) + call history_out_field('PGSACWO', pgsacwo_grid) + call history_out_field('PGRACSO', pgracso_grid) + call history_out_field('PRDGO', prdgo_grid) + call history_out_field('QMULTGO', qmultgo_grid) + call history_out_field('QMULTRGO', qmultrgo_grid) + call history_out_field('LS_REFFGRAU', reff_grau_grid) + call history_out_field ('NPRACGO', npracgo_grid) + call history_out_field ('NSCNGO', nscngo_grid) + call history_out_field ('NGRACSO', ngracso_grid) + call history_out_field ('NMULTGO', nmultgo_grid) + call history_out_field ('NMULTRGO', nmultrgo_grid) + call history_out_field ('NPSACWGO', npsacwgo_grid) + end if + + if (micro_mg_adjust_cpt) then + cp_rh(:ncol, :pver) = 0._r8 + + do i = 1, ncol + + ! Calculate the RH including any T change that we make. + do k = top_lev, pver + call qsat(state_loc%t(i,k), state_loc%pmid(i,k), es, qs) + cp_rh(i,k) = state_loc%q(i, k, ixq) / qs * 100._r8 + end do + end do + + call history_out_field("TROPF_RHADJ", cp_rh) + end if + + ! deallocate the temporary pbuf grid variable which was allocated if subcolumns are not used + if (.not. use_subcol_microp) then + deallocate(bergso_grid) + end if + + ! deallocate the proc_rates DDT + call proc_rates%deallocate(micro_mg_warm_rain) + + ! ptend_loc is deallocated in physics_update above + call physics_state_dealloc(state_loc) + + if (qsatfac_idx <= 0) then + deallocate(qsatfac) + end if + +end subroutine pumas_diagnostics_run + +end module pumas_diagnostics diff --git a/schemes/sima_diagnostics/pumas_diagnostics_calling.F90 b/schemes/sima_diagnostics/pumas_diagnostics_calling.F90 new file mode 100644 index 00000000..291d8a21 --- /dev/null +++ b/schemes/sima_diagnostics/pumas_diagnostics_calling.F90 @@ -0,0 +1,139 @@ +module pumas_diagnostics_calling + + use ccpp_kinds, only: kind_phys + + implicit none + private + save + + public :: pumas_diagnostics_init ! init routine + public :: pumas_diagnostics_run ! main routine + +CONTAINS + + + + !> \section arg_table_pumas_diagnostics_init Argument Table + !! \htmlinclude pumas_diagnostics_init.html + subroutine pumas_diagnostics_init(errmsg, errflg) + use cam_history, only: history_add_field + use cam_history_support, only: horiz_only + + character(len=512), intent(out) :: errmsg + integer, intent(out) :: errflg + + ! Local variables: + + errmsg = '' + errflg = 0 + + + + end subroutine pumas_diagnostics_init + + !> \section arg_table_pumas_diagnostics_run Argument Table + !! \htmlinclude pumas_diagnostics_run.html + subroutine pumas_diagnostics_run(proc_rates,qcsinksum_rate1ord,naai,npccn,rndst,nacon,tlat,qvlat,qctend,qitend,nctend,nitend,qrtend,qstend, & + nrtend,nstend,qgtend,ngtend,effc,effc_fn,effi,sadice,sadsnow,prect,preci,nevapr,am_evp_st, & + prain,cmeout,deffi,pgamrad,lamcrad,qsout,dsout,qgout,ngout,dgout,lflx,iflx,gflx,rflx,sflx, & + qrout,reff_rain,reff_snow,reff_grau,nrout,nsout,refl,arefl,areflz,frefl,csrfl,acsrfl,fcsrfl, & + refl10cm, reflz10cm,rercld,ncai,ncal,qrout2,qsout2,nrout2,nsout2,drout2,dsout2,qgout2,ngout2,dgout2, & + freqg,freqs,freqr,nfice,qcrat,proc_rates,errstring,tnd_qsnow,tnd_nsnow,re_ice,prer_evap,frzimm, & + frzcnt,frzdep, errmsg, errflg) + + use cam_history, only: history_in_field + + type (proc_rates_type), intent(inout) :: proc_rates + + real(kind_phys), intent(in) :: qcsinksum_rate1ord(:,:) ! 1st order rate for direct cw to precip conversion + real(kind_phys), intent(in) :: tlat(:,:) ! latent heating rate (W/kg) + real(kind_phys), intent(in) :: qvlat(:,:) ! microphysical tendency qv (1/s) + real(kind_phys), intent(in) :: qctend(:,:) ! microphysical tendency qc (1/s) + real(kind_phys), intent(in) :: qitend(:,:) ! microphysical tendency qi (1/s) + real(kind_phys), intent(in) :: nctend(:,:) ! microphysical tendency nc (1/(kg*s)) + real(kind_phys), intent(in) :: nitend(:,:) ! microphysical tendency ni (1/(kg*s)) + + real(kind_phys), intent(in) :: qrtend(:,:) ! microphysical tendency qr (1/s) + real(kind_phys), intent(in) :: qstend(:,:) ! microphysical tendency qs (1/s) + real(kind_phys), intent(in) :: nrtend(:,:) ! microphysical tendency nr (1/(kg*s)) + real(kind_phys), intent(in) :: nstend(:,:) ! microphysical tendency ns (1/(kg*s)) + real(kind_phys), intent(in) :: qgtend(:,:) ! microphysical tendency qg (1/s) + real(kind_phys), intent(in) :: ngtend(:,:) ! microphysical tendency ng (1/(kg*s)) + + real(kind_phys), intent(in) :: effc(:,:) ! droplet effective radius (micron) + real(kind_phys), intent(in) :: effc_fn(:,:) ! droplet effective radius, assuming nc = 1.e8 kg-1 + real(kind_phys), intent(in) :: effi(:,:) ! cloud ice effective radius (micron) + real(kind_phys), intent(in) :: sadice(:,:) ! cloud ice surface area density (cm2/cm3) + real(kind_phys), intent(in) :: sadsnow(:,:) ! cloud snow surface area density (cm2/cm3) + real(kind_phys), intent(in) :: prect(:) ! surface precip rate (m/s) + real(kind_phys), intent(in) :: preci(:) ! surface ice/snow precip rate (m/s) + real(kind_phys), intent(in) :: nevapr(:,:) ! evaporation rate of rain + snow (kg/kg/s) + real(kind_phys), intent(in) :: am_evp_st(:,:) ! stratiform evaporation area (frac) + real(kind_phys), intent(in) :: prain(:,:) ! production of rain + snow (kg/kg/s) + real(kind_phys), intent(in) :: cmeout(:,:) ! Rate of cond-evap of ice (kg/kg/s) + real(kind_phys), intent(in) :: deffi(:,:) ! ice effective diameter for optics (radiation) (micron) + real(kind_phys), intent(in) :: pgamrad(:,:) ! ice gamma parameter for optics (radiation) (no units) + real(kind_phys), intent(in) :: lamcrad(:,:) ! slope of droplet distribution for optics (radiation) (1/m) + real(kind_phys), intent(in) :: qsout(:,:) ! snow mixing ratio (kg/kg) + real(kind_phys), intent(in) :: dsout(:,:) ! snow diameter (m) + real(kind_phys), intent(in) :: lflx(:,:) ! grid-box average liquid condensate flux (kg m^-2 s^-1) + real(kind_phys), intent(in) :: iflx(:,:) ! grid-box average ice condensate flux (kg m^-2 s^-1) + real(kind_phys), intent(in) :: rflx(:,:) ! grid-box average rain flux (kg m^-2 s^-1) + real(kind_phys), intent(in) :: sflx(:,:) ! grid-box average snow flux (kg m^-2 s^-1) + real(kind_phys), intent(in) :: gflx(:,:) ! grid-box average graupel/hail flux (kg m^-2 s^-1) + + real(kind_phys), intent(in) :: qrout(:,:) ! grid-box average rain mixing ratio (kg/kg) + real(kind_phys), intent(in) :: reff_rain(:,:) ! rain effective radius (micron) + real(kind_phys), intent(in) :: reff_snow(:,:) ! snow effective radius (micron) + real(kind_phys), intent(in) :: reff_grau(:,:) ! graupel effective radius (micron) + + real(kind_phys), intent(in) :: nrout(:,:) ! rain number concentration (1/m3) + real(kind_phys), intent(in) :: nsout(:,:) ! snow number concentration (1/m3) + real(kind_phys), intent(in) :: refl(:,:) ! analytic radar reflectivity (94GHZ, cloud radar) (dBZ) + real(kind_phys), intent(in) :: arefl(:,:) ! average reflectivity will zero points inside valid range (dBZ) + real(kind_phys), intent(in) :: areflz(:,:) ! average reflectivity in z. (mm6 m-3) + real(kind_phys), intent(in) :: frefl(:,:) ! fractional occurrence of radar reflectivity + real(kind_phys), intent(in) :: csrfl(:,:) ! cloudsat reflectivity (dBZ) + real(kind_phys), intent(in) :: acsrfl(:,:) ! cloudsat average (dBZ) + real(kind_phys), intent(in) :: fcsrfl(:,:) ! cloudsat fractional occurrence of radar reflectivity + real(kind_phys), intent(in) :: refl10cm(:,:) ! 10cm (rain) analytic radar reflectivity (dBZ) + real(kind_phys), intent(in) :: reflz10cm(:,:) ! 10cm (rain) analytic radar reflectivity (mm6 m-3) + real(kind_phys), intent(in) :: rercld(:,:) ! effective radius calculation for rain + cloud + real(kind_phys), intent(in) :: ncai(:,:) ! input number conc of ice nuclei available (1/m3) + real(kind_phys), intent(in) :: ncal(:,:) ! input number conc of CCN (1/m3) + real(kind_phys), intent(in) :: qrout2(:,:) ! copy of qrin as used to compute drin2 + real(kind_phys), intent(in) :: qsout2(:,:) ! copy of qsin as used to compute dsin2 + real(kind_phys), intent(in) :: nrout2(:,:) ! copy of nrin as used to compute drin2 + real(kind_phys), intent(in) :: nsout2(:,:) ! copy of nsin as used to compute dsin2 + real(kind_phys), intent(in) :: drout2(:,:) ! mean rain particle diameter (m) + real(kind_phys), intent(in) :: dsout2(:,:) ! mean snow particle diameter (m) + real(kind_phys), intent(in) :: freqs(:,:) ! fractional occurrence of snow + real(kind_phys), intent(in) :: freqr(:,:) ! fractional occurrence of rain + real(kind_phys), intent(in) :: nfice(:,:) ! fraction of frozen water to total condensed water + real(kind_phys), intent(in) :: qcrat(:,:) ! limiter for qc process rates (1=no limit --> 0. no qc) + real(kind_phys), intent(in) :: qgout(:,:) ! graupel/hail mixing ratio (kg/kg) + real(kind_phys), intent(in) :: dgout(:,:) ! graupel/hail diameter (m) + real(kind_phys), intent(in) :: ngout(:,:) ! graupel/hail number concentration (1/m3) + real(kind_phys), intent(in) :: qgout2(:,:) ! copy of qgin as used to compute dgin2 + real(kind_phys), intent(in) :: ngout2(:,:) ! copy of ngin as used to compute dgin2 + real(kind_phys), intent(in) :: dgout2(:,:) ! mean graupel/hail particle diameter (m) + real(kind_phys), intent(in) :: freqg(:,:) ! fractional occurrence of graupel + real(kind_phys), intent(in) :: prer_evap(:,:) ! evaporation rate of rain (kg/kg/s) + + ! CCPP error handling variables + character(len=512), intent(in) :: errmsg + integer, intent(in) :: errflg + + errmsg = '' + errflg = 0 + +!!!!!!!! DIAGNOSTIC CODE GOES HERE !!!!!!!!! + +!! The calls for history_out_field are in the pumas_diagnostcis.F90 file, but also with all of the other pumas code. +!! Those calls need to be hooked up to the parameters in the call list here. +!! There is an issue with subcolumn/grid scale I'm not sure how to address the grid averaging that is done after the +!! pumas_tend function call. + + end subroutine pumas_diagnostics_run + +end module pumas_diagnostics_calling From ffbac28f8e5b1609ae469ec2f705d769068d42a1 Mon Sep 17 00:00:00 2001 From: Cheryl Craig Date: Thu, 17 Jul 2025 12:30:10 -0600 Subject: [PATCH 11/26] Add pumas test_suite --- src/physics/pumas | 1 + test/test_suites/suite_pumas.xml | 10 ++++++++++ 2 files changed, 11 insertions(+) create mode 160000 src/physics/pumas create mode 100644 test/test_suites/suite_pumas.xml diff --git a/src/physics/pumas b/src/physics/pumas new file mode 160000 index 00000000..5f6e420d --- /dev/null +++ b/src/physics/pumas @@ -0,0 +1 @@ +Subproject commit 5f6e420d9530aee8595d33c95dfbfec53867ced5 diff --git a/test/test_suites/suite_pumas.xml b/test/test_suites/suite_pumas.xml new file mode 100644 index 00000000..bad0ee6a --- /dev/null +++ b/test/test_suites/suite_pumas.xml @@ -0,0 +1,10 @@ + + + + + + pumas_pre_main + + micro_pumas_ccpp + + From 07b71dca93f1cebfc522ea3582809a96fc03e3e2 Mon Sep 17 00:00:00 2001 From: Cheryl Craig Date: Thu, 17 Jul 2025 15:42:14 -0600 Subject: [PATCH 12/26] remove unused directory --- schemes/pumas/MP/PUMAS/pumas | 1 - 1 file changed, 1 deletion(-) delete mode 160000 schemes/pumas/MP/PUMAS/pumas diff --git a/schemes/pumas/MP/PUMAS/pumas b/schemes/pumas/MP/PUMAS/pumas deleted file mode 160000 index fb7bbedf..00000000 --- a/schemes/pumas/MP/PUMAS/pumas +++ /dev/null @@ -1 +0,0 @@ -Subproject commit fb7bbedfe5984d23a8a4cc7af16e78eed3d6420c From 335b649bf40aaa590152b74379e3a60e33df5d5a Mon Sep 17 00:00:00 2001 From: Cheryl Craig Date: Thu, 14 Aug 2025 14:35:08 -0600 Subject: [PATCH 13/26] Update NamesNotInDictionary.txt --- doc/NamesNotInDictionary.txt | 1480 +++++++++++++++++++--------------- 1 file changed, 849 insertions(+), 631 deletions(-) diff --git a/doc/NamesNotInDictionary.txt b/doc/NamesNotInDictionary.txt index 6359b6fc..2b7b8fae 100644 --- a/doc/NamesNotInDictionary.txt +++ b/doc/NamesNotInDictionary.txt @@ -1,14 +1,14 @@ ####################### Date/time of when script was run: -2025-07-09 16:37:10.272741 +2025-08-14 14:27:18.156834 ####################### Non-dictionary standard names found in the following metadata files: -------------------------- -/glade/u/home/cacraig/cam_sima_caminout/src/physics/ncar_ccpp/test/test_schemes/initialize_constituents.meta +/home/cacraig/cam_pumas_round2/src/atmos_phys/test/test_schemes/initialize_constituents.meta - ccpp_error_code - ccpp_error_message @@ -16,7 +16,7 @@ Non-dictionary standard names found in the following metadata files: -------------------------- -/glade/u/home/cacraig/cam_sima_caminout/src/physics/ncar_ccpp/test/test_schemes/file_io_test.meta +/home/cacraig/cam_pumas_round2/src/atmos_phys/test/test_schemes/file_io_test.meta - ccpp_error_code - ccpp_error_message @@ -24,102 +24,153 @@ Non-dictionary standard names found in the following metadata files: -------------------------- -/glade/u/home/cacraig/cam_sima_caminout/src/physics/ncar_ccpp/schemes/held_suarez/held_suarez_1994.meta +/home/cacraig/cam_pumas_round2/src/atmos_phys/schemes/rasch_kristjansson/prognostic_cloud_water.meta + - accretion_of_cloud_ice_by_snow + - accretion_of_cloud_liquid_water_by_rain + - accretion_of_cloud_liquid_water_by_snow - ccpp_error_code - ccpp_error_message - - scheme_name - --------------------------- - -/glade/u/home/cacraig/cam_sima_caminout/src/physics/ncar_ccpp/schemes/hack_shallow/set_general_conv_fluxes_to_shallow.meta - - - frozen_precipitation_flux_at_interface_due_to_convection - - frozen_precipitation_flux_at_interface_due_to_shallow_convection - - lwe_frozen_precipitation_rate_at_surface_due_to_convection - - lwe_frozen_precipitation_rate_at_surface_due_to_shallow_convection - - lwe_precipitation_rate_at_surface_due_to_convection - - lwe_precipitation_rate_at_surface_due_to_shallow_convection - - net_lwe_ice_fluxes_through_top_and_bottom_of_atmosphere_column - - precipitation_flux_at_interface_due_to_convection - - precipitation_flux_at_interface_due_to_shallow_convection - - tendency_of_dry_air_enthalpy_at_constant_pressure_due_to_evaporation_and_melting_of_frozen_precipitation_due_to_convection - - tendency_of_dry_air_enthalpy_at_constant_pressure_due_to_evaporation_and_melting_of_frozen_precipitation_due_to_shallow_convection - - tendency_of_dry_air_enthalpy_at_constant_pressure_due_to_frozen_precipitation_production_due_to_convection - - tendency_of_dry_air_enthalpy_at_constant_pressure_due_to_frozen_precipitation_production_due_to_shallow_convection - - tendency_of_frozen_precipitation_wrt_moist_air_and_condensed_water_due_to_convection - - tendency_of_frozen_precipitation_wrt_moist_air_and_condensed_water_due_to_shallow_convection - - tendency_of_precipitation_wrt_moist_air_and_condensed_water_due_to_convection - - tendency_of_precipitation_wrt_moist_air_and_condensed_water_due_to_shallow_convection + - cloud_area_fraction + - density_of_dry_air_at_stp + - flag_for_relative_humidity_threshold_for_cloud_formation_in_polar_stratosphere_for_rk_microphysics + - freezing_point_of_water + - gas_constant_of_water_vapor + - geopotential_height_wrt_surface_at_interface + - latent_heat_of_fusion_of_water_at_0c + - latitude_degrees_north + - lwe_snow_precipitation_rate_at_surface_due_to_microphysics + - lwe_stratiform_precipitation_rate_at_surface + - lwe_surface_snow_depth_over_land_from_coupler + - mass_fraction_of_ice_content_within_stratiform_cloud + - mass_fraction_of_snow_content_within_stratiform_cloud + - net_condensation_rate_due_to_microphysics + - pi_constant + - precipitation_production_due_to_microphysics + - rate_of_evaporation_of_falling_snow_due_to_microphysics + - rate_of_evaporation_of_precipitation_due_to_microphysics + - ratio_of_water_vapor_to_dry_air_molecular_weights + - relative_humidity_divided_by_cloud_area_fraction_perturbation + - relative_humidity_threshold_for_cloud_formation + - relative_humidity_threshold_for_cloud_formation_in_polar_stratosphere_for_rk_microphysics + - relative_importance_of_cloud_ice_autoconversion + - relative_importance_of_cloud_liquid_water_autoconversion + - relative_importance_of_rain_accreting_cloud_liquid_water + - relative_importance_of_snow_accreting_cloud_ice + - relative_importance_of_snow_accreting_cloud_liquid_water + - sea_ice_area_fraction_from_coupler + - smoothed_land_area_fraction + - snow_production_due_to_microphysics + - stratiform_rain_and_snow_flux_at_interface + - stratiform_snow_flux_at_interface + - tendency_of_air_temperature_not_due_to_microphysics + - tendency_of_cloud_ice_mixing_ratio_wrt_to_moist_air_and_condensed_water_due_to_ice_to_snow_autoconversion + - tendency_of_cloud_liquid_water_mixing_ratio_wrt_to_moist_air_and_condensed_water_due_to_liquid_to_rain_autoconversion + - tendency_of_cloud_liquid_water_mixing_ratio_wrt_to_moist_air_and_condensed_water_due_to_liquid_to_snow_autoconversion + - tendency_of_cloud_water_mixing_ratio_wrt_moist_air_and_condensed_water_not_due_to_microphysics + - tendency_of_dry_air_enthalpy_at_constant_pressure_due_to_evaporation_of_precipitation + - tendency_of_dry_air_enthalpy_at_constant_pressure_due_to_freezing_of_precipitation + - tendency_of_dry_air_enthalpy_at_constant_pressure_due_to_snow_melt + - tendency_of_water_vapor_mixing_ratio_wrt_moist_air_and_condensed_water_not_due_to_microphysics + - tropopause_vertical_layer_index + - tunable_parameter_for_autoconversion_of_cold_ice_for_rk_microphysics + - tunable_parameter_for_autoconversion_of_warm_ice_for_rk_microphysics + - tunable_parameter_for_cloud_water_autoconversion_for_rk_microphysics + - tunable_parameter_for_precipitation_evaporation_for_rk_microphysics + - vertical_layer_index_of_troposphere_cloud_physics_top -------------------------- -/glade/u/home/cacraig/cam_sima_caminout/src/physics/ncar_ccpp/schemes/hack_shallow/convect_shallow_sum_to_deep.meta +/home/cacraig/cam_pumas_round2/src/atmos_phys/schemes/rasch_kristjansson/rk_stratiform.meta - - atmosphere_convective_mass_flux_due_to_all_convection - - atmosphere_convective_mass_flux_due_to_deep_convection - - atmosphere_convective_mass_flux_due_to_shallow_convection - ccpp_error_code - ccpp_error_message + - cloud_area_fraction + - cloud_water_mixing_ratio_wrt_moist_air_and_condensed_water_on_previous_timestep + - deep_convective_cloud_area_fraction - detrainment_of_cloud_liquid_water_wrt_moist_air_and_condensed_water_due_to_all_convection - - detrainment_of_cloud_liquid_water_wrt_moist_air_and_condensed_water_due_to_deep_convection - - detrainment_of_cloud_liquid_water_wrt_moist_air_and_condensed_water_due_to_shallow_convection - - pressure_at_cloud_base_for_all_convection - - pressure_at_cloud_top_for_all_convection - - tendency_of_precipitation_wrt_moist_air_and_condensed_water_due_to_convection_excluding_subcloud_evaporation - - tendency_of_precipitation_wrt_moist_air_and_condensed_water_due_to_deep_convection_excluding_subcloud_evaporation - - tendency_of_precipitation_wrt_moist_air_and_condensed_water_due_to_shallow_convection_excluding_subcloud_evaporation - - vertical_index_at_cloud_base_for_all_convection - - vertical_index_at_cloud_base_for_shallow_convection - - vertical_index_at_cloud_top_for_all_convection - - vertical_index_at_cloud_top_for_shallow_convection - - vertical_index_at_top_of_deep_convection_for_convective_columns - - vertical_index_of_deep_convection_launch_level_for_convective_columns + - freezing_point_of_water + - land_area_fraction_from_coupler + - latent_heat_of_fusion_of_water_at_0c + - lwe_large_scale_precipitation_rate_at_surface + - lwe_snow_and_cloud_ice_precipitation_rate_at_surface_due_to_microphysics + - lwe_snow_precipitation_rate_at_surface_due_to_microphysics + - lwe_stratiform_precipitation_rate_at_surface + - lwe_surface_snow_depth_over_land_from_coupler + - mass_fraction_of_ice_content_within_stratiform_cloud + - net_condensation_rate_due_to_microphysics + - ocean_area_fraction_from_coupler + - rate_of_condensation_minus_evaporation_for_cloud_ice_mixing_ratio_wrt_moist_air_and_condensed_water + - rate_of_condensation_minus_evaporation_for_cloud_liquid_water_mixing_ratio_wrt_moist_air_and_condensed_water + - rate_of_evaporation_of_precipitation_due_to_microphysics + - ratio_of_dry_air_gas_constant_to_specific_heat_of_dry_air_at_constant_pressure + - reference_temperature_lapse_rate + - relative_humidity_divided_by_cloud_area_fraction_perturbation + - relative_humidity_threshold_for_cloud_formation + - sea_ice_area_fraction_from_coupler + - sea_surface_temperature_from_coupler + - shallow_convective_cloud_area_fraction + - smoothed_land_area_fraction + - stratiform_cloud_water_surface_flux_due_to_sedimentation + - stratiform_lwe_cloud_ice_surface_flux_due_to_sedimentation + - stratiform_rain_flux_at_surface_due_to_sedimentation + - surface_air_pressure + - tendency_of_air_temperature_not_due_to_microphysics + - tendency_of_cloud_ice_mixing_ratio_wrt_moist_air_and_condensed_water + - tendency_of_cloud_ice_mixing_ratio_wrt_to_moist_air_and_condensed_water_due_to_ice_to_snow_autoconversion + - tendency_of_cloud_liquid_water_mixing_ratio_wrt_moist_air_and_condensed_water + - tendency_of_cloud_liquid_water_mixing_ratio_wrt_to_moist_air_and_condensed_water_due_to_liquid_to_rain_autoconversion + - tendency_of_cloud_water_mixing_ratio_wrt_moist_air_and_condensed_water_not_due_to_microphysics + - tendency_of_dry_air_enthalpy_at_constant_pressure_due_to_cloud_ice_and_cloud_liquid_repartitioning + - tendency_of_dry_air_enthalpy_at_constant_pressure_due_to_condensation_minus_evaporation + - tendency_of_dry_air_enthalpy_at_constant_pressure_due_to_evaporation_of_precipitation + - tendency_of_dry_air_enthalpy_at_constant_pressure_due_to_freezing_of_precipitation + - tendency_of_dry_air_enthalpy_at_constant_pressure_due_to_snow_melt + - tendency_of_water_vapor_mixing_ratio_wrt_moist_air_and_condensed_water + - tendency_of_water_vapor_mixing_ratio_wrt_moist_air_and_condensed_water_not_due_to_microphysics + - vertical_layer_index_of_cloud_fraction_top - vertically_integrated_cloud_liquid_water_tendency_due_to_all_convection_to_be_applied_later_in_time_loop - - vertically_integrated_cloud_liquid_water_tendency_due_to_shallow_convection_to_be_applied_later_in_time_loop + - water_vapor_mixing_ratio_wrt_moist_air_and_condensed_water_on_previous_timestep -------------------------- -/glade/u/home/cacraig/cam_sima_caminout/src/physics/ncar_ccpp/schemes/hack_shallow/set_shallow_conv_fluxes_to_general.meta +/home/cacraig/cam_pumas_round2/src/atmos_phys/schemes/rasch_kristjansson/cloud_particle_sedimentation.meta - - lwe_precipitation_rate_at_surface_due_to_convection - - lwe_precipitation_rate_at_surface_due_to_shallow_convection - - tendency_of_precipitation_wrt_moist_air_and_condensed_water_due_to_convection_excluding_subcloud_evaporation - - tendency_of_precipitation_wrt_moist_air_and_condensed_water_due_to_shallow_convection_excluding_subcloud_evaporation + - air_pressure_at_interface + - ccpp_error_code + - ccpp_error_message + - cloud_area_fraction + - freezing_point_of_water + - land_area_fraction_from_coupler + - latent_heat_of_fusion_of_water_at_0c + - lwe_surface_snow_depth_over_land_from_coupler + - magnitude_of_vertical_pressure_velocity_of_cloud_ice_due_to_sedimentation + - magnitude_of_vertical_pressure_velocity_of_cloud_liquid_water_due_to_sedimentation + - ocean_area_fraction_from_coupler + - sea_ice_area_fraction_from_coupler + - smoothed_land_area_fraction + - stratiform_lwe_cloud_ice_surface_flux_due_to_sedimentation + - stratiform_rain_flux_at_surface_due_to_sedimentation + - tendency_of_cloud_ice_mixing_ratio_wrt_moist_air_and_condensed_water + - tendency_of_cloud_liquid_water_mixing_ratio_wrt_moist_air_and_condensed_water + - tendency_of_water_vapor_mixing_ratio_wrt_moist_air_and_condensed_water + - tunable_parameter_for_autoconversion_of_cold_ice_for_rk_microphysics + - tunable_parameter_for_ice_fall_velocity_for_rk_microphysics -------------------------- -/glade/u/home/cacraig/cam_sima_caminout/src/physics/ncar_ccpp/schemes/hack_shallow/hack_convect_shallow.meta +/home/cacraig/cam_pumas_round2/src/atmos_phys/schemes/sima_diagnostics/check_energy_gmean_diagnostics.meta - - atmosphere_convective_mass_flux_due_to_shallow_convection - - ccpp_constituent_properties - - ccpp_constituent_tendencies - - ccpp_constituents - ccpp_error_code - ccpp_error_message - - characteristic_adjustment_time_for_shallow_convection - - convective_water_vapor_wrt_moist_air_and_condensed_water_perturbation_due_to_pbl_eddies - - detrainment_of_cloud_liquid_water_wrt_moist_air_and_condensed_water_due_to_shallow_convection - - flag_for_cloud_area_fraction_to_use_shallow_convection_calculated_cloud_area_fraction - - in_cloud_water_vapor_mixing_ratio_wrt_moist_air_and_condensed_water_due_to_shallow_convection - - liquid_water_static_energy_flux_due_to_shallow_convection - - lwe_precipitation_rate_at_surface_due_to_shallow_convection - - net_liquid_and_lwe_ice_fluxes_through_top_and_bottom_of_atmosphere_column - - number_of_ccpp_constituents - - rain_water_autoconversion_coefficient_for_shallow_convection - - reference_pressure_at_interface - - scheme_name - - shallow_convective_cloud_area_fraction_from_shallow_convection - - tendency_of_precipitation_wrt_moist_air_and_condensed_water_due_to_shallow_convection_excluding_subcloud_evaporation - - total_water_flux_due_to_shallow_convection - - vertical_index_at_cloud_base_for_shallow_convection - - vertical_index_at_cloud_top_for_shallow_convection - - vertical_layer_index_of_cloud_fraction_top - - vertically_integrated_cloud_liquid_water_tendency_due_to_shallow_convection_to_be_applied_later_in_time_loop + - flag_for_energy_global_means_output + - global_mean_heating_rate_correction_for_energy_conservation + - global_mean_vertically_integrated_total_energy_using_dycore_energy_formula_at_end_of_physics_timestep + - global_mean_vertically_integrated_total_energy_using_dycore_energy_formula_at_start_of_physics_timestep -------------------------- -/glade/u/home/cacraig/cam_sima_caminout/src/physics/ncar_ccpp/schemes/sima_diagnostics/check_energy_fix_diagnostics.meta +/home/cacraig/cam_pumas_round2/src/atmos_phys/schemes/sima_diagnostics/check_energy_fix_diagnostics.meta - ccpp_error_code - ccpp_error_message @@ -130,7 +181,30 @@ Non-dictionary standard names found in the following metadata files: -------------------------- -/glade/u/home/cacraig/cam_sima_caminout/src/physics/ncar_ccpp/schemes/sima_diagnostics/zm_diagnostics.meta +/home/cacraig/cam_pumas_round2/src/atmos_phys/schemes/sima_diagnostics/zm_convr_tendency_diagnostics.meta + + - ccpp_error_code + - ccpp_error_message + - tendency_of_water_vapor_mixing_ratio_wrt_moist_air_and_condensed_water + +-------------------------- + +/home/cacraig/cam_pumas_round2/src/atmos_phys/schemes/sima_diagnostics/sima_state_diagnostics.meta + + - air_pressure_at_interface + - air_pressure_of_dry_air_at_interface + - ccpp_constituent_properties + - ccpp_constituents + - ccpp_error_code + - ccpp_error_message + - geopotential_height_wrt_surface_at_interface + - ln_air_pressure_at_interface + - ln_air_pressure_of_dry_air_at_interface + - surface_air_pressure + +-------------------------- + +/home/cacraig/cam_pumas_round2/src/atmos_phys/schemes/sima_diagnostics/zm_diagnostics.meta - atmosphere_convective_mass_flux_due_to_deep_convection - atmosphere_downdraft_convective_mass_flux_for_deep_convection_for_convective_columns @@ -159,17 +233,37 @@ Non-dictionary standard names found in the following metadata files: -------------------------- -/glade/u/home/cacraig/cam_sima_caminout/src/physics/ncar_ccpp/schemes/sima_diagnostics/zm_evap_tendency_diagnostics.meta +/home/cacraig/cam_pumas_round2/src/atmos_phys/schemes/sima_diagnostics/zm_tendency_diagnostics.meta + - ccpp_constituent_properties + - ccpp_constituent_tendencies - ccpp_error_code - ccpp_error_message - - tendency_of_dry_air_enthalpy_at_constant_pressure_due_to_evaporation_and_melting_of_frozen_precipitation_due_to_deep_convection - - tendency_of_dry_air_enthalpy_at_constant_pressure_due_to_frozen_precipitation_production_due_to_deep_convection - - tendency_of_water_vapor_mixing_ratio_wrt_moist_air_and_condensed_water -------------------------- -/glade/u/home/cacraig/cam_sima_caminout/src/physics/ncar_ccpp/schemes/sima_diagnostics/rk_stratiform_diagnostics.meta +/home/cacraig/cam_pumas_round2/src/atmos_phys/schemes/sima_diagnostics/sima_tend_diagnostics.meta + + - ccpp_error_code + - ccpp_error_message + +-------------------------- + +/home/cacraig/cam_pumas_round2/src/atmos_phys/schemes/sima_diagnostics/zm_momtran_tendency_diagnostics.meta + + - ccpp_error_code + - ccpp_error_message + +-------------------------- + +/home/cacraig/cam_pumas_round2/src/atmos_phys/schemes/sima_diagnostics/rayleigh_friction_diagnostics.meta + + - ccpp_error_code + - ccpp_error_message + +-------------------------- + +/home/cacraig/cam_pumas_round2/src/atmos_phys/schemes/sima_diagnostics/rk_stratiform_diagnostics.meta - accretion_of_cloud_ice_by_snow - accretion_of_cloud_liquid_water_by_rain @@ -205,7 +299,31 @@ Non-dictionary standard names found in the following metadata files: -------------------------- -/glade/u/home/cacraig/cam_sima_caminout/src/physics/ncar_ccpp/schemes/sima_diagnostics/tropopause_diagnostics.meta +/home/cacraig/cam_pumas_round2/src/atmos_phys/schemes/sima_diagnostics/kessler_diagnostics.meta + + - ccpp_error_code + - ccpp_error_message + +-------------------------- + +/home/cacraig/cam_pumas_round2/src/atmos_phys/schemes/sima_diagnostics/convective_cloud_cover_diagnostics.meta + + - ccpp_error_code + - ccpp_error_message + - deep_convective_cloud_area_fraction + - shallow_convective_cloud_area_fraction + +-------------------------- + +/home/cacraig/cam_pumas_round2/src/atmos_phys/schemes/sima_diagnostics/compute_cloud_fraction_diagnostics.meta + + - ccpp_error_code + - ccpp_error_message + - stratiform_cloud_area_fraction + +-------------------------- + +/home/cacraig/cam_pumas_round2/src/atmos_phys/schemes/sima_diagnostics/tropopause_diagnostics.meta - ccpp_error_code - ccpp_error_message @@ -235,53 +353,20 @@ Non-dictionary standard names found in the following metadata files: -------------------------- -/glade/u/home/cacraig/cam_sima_caminout/src/physics/ncar_ccpp/schemes/sima_diagnostics/rayleigh_friction_diagnostics.meta +/home/cacraig/cam_pumas_round2/src/atmos_phys/schemes/sima_diagnostics/check_energy_diagnostics.meta - ccpp_error_code - ccpp_error_message + - cumulative_total_energy_boundary_flux_using_physics_energy_formula + - cumulative_total_water_boundary_flux + - ratio_of_specific_heat_of_air_used_in_physics_energy_formula_to_specific_heat_of_air_used_in_dycore_energy_formula + - specific_heat_of_air_used_in_dycore + - vertically_integrated_total_energy_using_physics_energy_formula + - vertically_integrated_total_water -------------------------- -/glade/u/home/cacraig/cam_sima_caminout/src/physics/ncar_ccpp/schemes/sima_diagnostics/compute_cloud_fraction_diagnostics.meta - - - ccpp_error_code - - ccpp_error_message - - stratiform_cloud_area_fraction - --------------------------- - -/glade/u/home/cacraig/cam_sima_caminout/src/physics/ncar_ccpp/schemes/sima_diagnostics/sima_state_diagnostics.meta - - - air_pressure_at_interface - - air_pressure_of_dry_air_at_interface - - ccpp_constituent_properties - - ccpp_constituents - - ccpp_error_code - - ccpp_error_message - - geopotential_height_wrt_surface_at_interface - - ln_air_pressure_at_interface - - ln_air_pressure_of_dry_air_at_interface - - surface_air_pressure - --------------------------- - -/glade/u/home/cacraig/cam_sima_caminout/src/physics/ncar_ccpp/schemes/sima_diagnostics/kessler_diagnostics.meta - - - ccpp_error_code - - ccpp_error_message - --------------------------- - -/glade/u/home/cacraig/cam_sima_caminout/src/physics/ncar_ccpp/schemes/sima_diagnostics/convective_cloud_cover_diagnostics.meta - - - ccpp_error_code - - ccpp_error_message - - deep_convective_cloud_area_fraction - - shallow_convective_cloud_area_fraction - --------------------------- - -/glade/u/home/cacraig/cam_sima_caminout/src/physics/ncar_ccpp/schemes/sima_diagnostics/convect_shallow_diagnostics.meta +/home/cacraig/cam_pumas_round2/src/atmos_phys/schemes/sima_diagnostics/convect_shallow_diagnostics.meta - atmosphere_convective_mass_flux_due_to_all_convection - atmosphere_convective_mass_flux_due_to_shallow_convection @@ -311,89 +396,124 @@ Non-dictionary standard names found in the following metadata files: -------------------------- -/glade/u/home/cacraig/cam_sima_caminout/src/physics/ncar_ccpp/schemes/sima_diagnostics/sima_tend_diagnostics.meta +/home/cacraig/cam_pumas_round2/src/atmos_phys/schemes/sima_diagnostics/cloud_particle_sedimentation_diagnostics.meta + + - ccpp_error_code + - ccpp_error_message + - stratiform_lwe_cloud_ice_surface_flux_due_to_sedimentation + - stratiform_rain_flux_at_surface_due_to_sedimentation + - tendency_of_cloud_ice_mixing_ratio_wrt_moist_air_and_condensed_water + - tendency_of_cloud_liquid_water_mixing_ratio_wrt_moist_air_and_condensed_water + - tendency_of_water_vapor_mixing_ratio_wrt_moist_air_and_condensed_water + +-------------------------- + +/home/cacraig/cam_pumas_round2/src/atmos_phys/schemes/sima_diagnostics/zm_evap_tendency_diagnostics.meta - ccpp_error_code - ccpp_error_message + - tendency_of_dry_air_enthalpy_at_constant_pressure_due_to_evaporation_and_melting_of_frozen_precipitation_due_to_deep_convection + - tendency_of_dry_air_enthalpy_at_constant_pressure_due_to_frozen_precipitation_production_due_to_deep_convection + - tendency_of_water_vapor_mixing_ratio_wrt_moist_air_and_condensed_water -------------------------- -/glade/u/home/cacraig/cam_sima_caminout/src/physics/ncar_ccpp/schemes/sima_diagnostics/zm_tendency_diagnostics.meta +/home/cacraig/cam_pumas_round2/src/atmos_phys/schemes/musica/musica_ccpp.meta + - blackbody_temperature_at_surface - ccpp_constituent_properties - - ccpp_constituent_tendencies + - ccpp_constituents - ccpp_error_code - ccpp_error_message + - cloud_area_fraction + - dynamic_constituents_for_musica_ccpp + - earth_sun_distance + - extraterrestrial_radiation_flux + - geopotential_height_wrt_surface_at_interface + - molecular_weight_of_dry_air + - photolysis_wavelength_grid_interfaces + - solar_zenith_angle + - surface_albedo_due_to_UV_and_VIS_direct -------------------------- -/glade/u/home/cacraig/cam_sima_caminout/src/physics/ncar_ccpp/schemes/sima_diagnostics/zm_convr_tendency_diagnostics.meta +/home/cacraig/cam_pumas_round2/src/atmos_phys/schemes/dry_adiabatic_adjust/dadadj.meta + - air_pressure_at_interface + - binary_indicator_for_dry_adiabatic_adjusted_grid_cell - ccpp_error_code - ccpp_error_message + - number_of_iterations_for_dry_adiabatic_adjustment_algorithm_convergence + - number_of_vertical_levels_from_model_top_where_dry_adiabatic_adjustment_occurs + - scheme_name - tendency_of_water_vapor_mixing_ratio_wrt_moist_air_and_condensed_water -------------------------- -/glade/u/home/cacraig/cam_sima_caminout/src/physics/ncar_ccpp/schemes/sima_diagnostics/cloud_particle_sedimentation_diagnostics.meta +/home/cacraig/cam_pumas_round2/src/atmos_phys/schemes/utilities/geopotential_temp.meta + - air_pressure_at_interface + - ccpp_constituent_properties + - ccpp_constituents - ccpp_error_code - ccpp_error_message - - stratiform_lwe_cloud_ice_surface_flux_due_to_sedimentation - - stratiform_rain_flux_at_surface_due_to_sedimentation - - tendency_of_cloud_ice_mixing_ratio_wrt_moist_air_and_condensed_water - - tendency_of_cloud_liquid_water_mixing_ratio_wrt_moist_air_and_condensed_water - - tendency_of_water_vapor_mixing_ratio_wrt_moist_air_and_condensed_water + - geopotential_height_wrt_surface_at_interface + - ln_air_pressure_at_interface + - number_of_ccpp_constituents -------------------------- -/glade/u/home/cacraig/cam_sima_caminout/src/physics/ncar_ccpp/schemes/sima_diagnostics/zm_momtran_tendency_diagnostics.meta +/home/cacraig/cam_pumas_round2/src/atmos_phys/schemes/utilities/static_energy.meta - ccpp_error_code - ccpp_error_message -------------------------- -/glade/u/home/cacraig/cam_sima_caminout/src/physics/ncar_ccpp/schemes/sima_diagnostics/check_energy_gmean_diagnostics.meta +/home/cacraig/cam_pumas_round2/src/atmos_phys/schemes/utilities/state_converters.meta - ccpp_error_code - ccpp_error_message - - flag_for_energy_global_means_output - - global_mean_heating_rate_correction_for_energy_conservation - - global_mean_vertically_integrated_total_energy_using_dycore_energy_formula_at_end_of_physics_timestep - - global_mean_vertically_integrated_total_energy_using_dycore_energy_formula_at_start_of_physics_timestep -------------------------- -/glade/u/home/cacraig/cam_sima_caminout/src/physics/ncar_ccpp/schemes/sima_diagnostics/check_energy_diagnostics.meta +/home/cacraig/cam_pumas_round2/src/atmos_phys/schemes/utilities/to_be_ccppized_temporary.meta - ccpp_error_code - ccpp_error_message - - cumulative_total_energy_boundary_flux_using_physics_energy_formula - - cumulative_total_water_boundary_flux - - ratio_of_specific_heat_of_air_used_in_physics_energy_formula_to_specific_heat_of_air_used_in_dycore_energy_formula - - specific_heat_of_air_used_in_dycore - - vertically_integrated_total_energy_using_physics_energy_formula - - vertically_integrated_total_water -------------------------- -/glade/u/home/cacraig/cam_sima_caminout/src/physics/ncar_ccpp/schemes/kessler/kessler_update.meta +/home/cacraig/cam_pumas_round2/src/atmos_phys/schemes/utilities/physics_tendency_updaters.meta + - ccpp_constituent_tendencies + - ccpp_constituents - ccpp_error_code - ccpp_error_message -------------------------- -/glade/u/home/cacraig/cam_sima_caminout/src/physics/ncar_ccpp/schemes/kessler/kessler.meta +/home/cacraig/cam_pumas_round2/src/atmos_phys/schemes/utilities/qneg.meta + - ccpp_constituent_minimum_values + - ccpp_constituent_properties + - ccpp_constituents - ccpp_error_code - ccpp_error_message + - number_of_ccpp_constituents - scheme_name -------------------------- -/glade/u/home/cacraig/cam_sima_caminout/src/physics/ncar_ccpp/schemes/mmm/mmm_physics_compat.meta +/home/cacraig/cam_pumas_round2/src/atmos_phys/schemes/thermo_water_update/thermo_water_update.meta + + - ccpp_constituents + - specific_heat_of_air_used_in_dycore + - total_energy_formula_for_dycore + +-------------------------- + +/home/cacraig/cam_pumas_round2/src/atmos_phys/schemes/mmm/mmm_physics_compat.meta - ccpp_error_code - ccpp_error_message @@ -402,7 +522,7 @@ Non-dictionary standard names found in the following metadata files: -------------------------- -/glade/u/home/cacraig/cam_sima_caminout/src/physics/ncar_ccpp/schemes/mmm/bl_gwdo_compat.meta +/home/cacraig/cam_pumas_round2/src/atmos_phys/schemes/mmm/bl_gwdo_compat.meta - air_pressure_at_interface - atmosphere_x_stress_due_to_orographic_gwd @@ -433,234 +553,105 @@ Non-dictionary standard names found in the following metadata files: -------------------------- -/glade/u/home/cacraig/cam_sima_caminout/src/physics/ncar_ccpp/schemes/zhang_mcfarlane/zm_conv_momtran.meta +/home/cacraig/cam_pumas_round2/src/atmos_phys/schemes/tropopause_find/tropopause_find.meta - - atmosphere_detrainment_convective_mass_flux_for_deep_convection_for_convective_columns - - atmosphere_downdraft_convective_mass_flux_for_deep_convection_for_convective_columns - - atmosphere_downdraft_entrainment_convective_mass_flux_for_deep_convection_for_convective_columns - - atmosphere_updraft_convective_mass_flux_for_deep_convection_for_convective_columns - - atmosphere_updraft_entrainment_convective_mass_flux_for_deep_convection_for_convective_columns + - air_pressure_at_interface - ccpp_error_code - ccpp_error_message - - current_timestep_number - - flag_for_momentum_transport_by_zhang_mcfarlane_deep_convection_scheme - - horizontal_index_of_convective_columns_for_deep_convection_for_convective_columns - - in_cloud_eastward_wind_in_downdraft_due_to_deep_convection - - in_cloud_eastward_wind_in_updraft_due_to_deep_convection - - in_cloud_northward_wind_in_downdraft_due_to_deep_convection - - in_cloud_northward_wind_in_updraft_due_to_deep_convection - - index_of_first_column_of_gathered_deep_convection_arrays - - index_of_last_column_of_gathered_deep_convection_arrays - - momentum_transport_parameter_for_vertical_pressure_gradient_force_for_downdraft_for_zhang_mcfarlane_deep_convection_scheme - - momentum_transport_parameter_for_vertical_pressure_gradient_force_for_updraft_for_zhang_mcfarlane_deep_convection_scheme - - pressure_thickness_for_deep_convection_for_convective_columns - - pressure_thickness_for_subcloud_layer_for_deep_convection_for_convective_columns + - fill_value_for_diagnostic_output + - fractional_calendar_days_on_end_of_current_timestep + - geopotential_height_wrt_surface_at_interface + - pi_constant + - ratio_of_dry_air_gas_constant_to_specific_heat_of_dry_air_at_constant_pressure - scheme_name - - tendency_of_eastward_wind_due_to_zhang_mcfarlane_deep_convective_downdraft_pressure_gradient_term - - tendency_of_eastward_wind_due_to_zhang_mcfarlane_deep_convective_updraft_pressure_gradient_term - - tendency_of_northward_wind_due_to_zhang_mcfarlane_deep_convective_downdraft_pressure_gradient_term - - tendency_of_northward_wind_due_to_zhang_mcfarlane_deep_convective_updraft_pressure_gradient_term - - vertical_index_at_top_of_deep_convection_for_convective_columns - - vertical_index_of_deep_convection_launch_level_for_convective_columns + - tropopause_air_pressure + - tropopause_air_pressure_from_chemical_method + - tropopause_air_pressure_from_climatological_method + - tropopause_air_pressure_from_cold_point_method + - tropopause_air_pressure_from_hybrid_stobie_linoz_with_climatological_backup_method + - tropopause_air_pressure_from_lapse_rate_method + - tropopause_air_pressure_from_tropopause_climatology_dataset + - tropopause_air_temperature + - tropopause_air_temperature_from_chemical_method + - tropopause_air_temperature_from_climatological_method + - tropopause_air_temperature_from_cold_point_method + - tropopause_air_temperature_from_hybrid_stobie_linoz_with_climatological_backup_method + - tropopause_air_temperature_from_lapse_rate_method + - tropopause_calendar_days_from_tropopause_climatology + - tropopause_geopotential_height_wrt_surface + - tropopause_geopotential_height_wrt_surface_from_chemical_method + - tropopause_geopotential_height_wrt_surface_from_climatological_method + - tropopause_geopotential_height_wrt_surface_from_cold_point_method + - tropopause_geopotential_height_wrt_surface_from_hybrid_stobie_linoz_with_climatological_backup_method + - tropopause_geopotential_height_wrt_surface_from_lapse_rate_method + - tropopause_vertical_layer_index + - tropopause_vertical_layer_index_from_chemical_method + - tropopause_vertical_layer_index_from_climatological_method + - tropopause_vertical_layer_index_from_cold_point_method + - tropopause_vertical_layer_index_from_hybrid_stobie_linoz_with_climatological_backup_method + - tropopause_vertical_layer_index_from_hybrid_stobie_linoz_with_climatological_backup_method_for_chemistry + - tropopause_vertical_layer_index_from_lapse_rate_method + - vertical_layer_index_lower_bound_from_hybrid_stobie_linoz_with_climatological_backup_method_for_linearized_ozone_chemistry + - vertical_layer_index_lower_bound_from_hybrid_stobie_linoz_with_climatological_backup_method_for_stratospheric_chemistry -------------------------- -/glade/u/home/cacraig/cam_sima_caminout/src/physics/ncar_ccpp/schemes/zhang_mcfarlane/set_deep_conv_fluxes_to_general.meta +/home/cacraig/cam_pumas_round2/src/atmos_phys/schemes/conservation_adjust/dme_adjust/dme_adjust.meta - - lwe_precipitation_rate_at_surface_due_to_convection - - lwe_precipitation_rate_at_surface_due_to_deep_convection - - tendency_of_precipitation_wrt_moist_air_and_condensed_water_due_to_convection_excluding_subcloud_evaporation - - tendency_of_precipitation_wrt_moist_air_and_condensed_water_due_to_deep_convection_excluding_subcloud_evaporation + - air_pressure_at_interface + - ccpp_constituent_properties + - ccpp_constituents + - ccpp_error_code + - ccpp_error_message + - is_moist_basis_dycore + - ln_air_pressure_at_interface + - number_of_ccpp_constituents + - surface_air_pressure + - total_ice_water_mixing_ratio_wrt_moist_air_and_condensed_water_before_physics + - total_liquid_water_mixing_ratio_wrt_moist_air_and_condensed_water_before_physics + - water_vapor_mixing_ratio_wrt_moist_air_and_condensed_water_before_physics -------------------------- -/glade/u/home/cacraig/cam_sima_caminout/src/physics/ncar_ccpp/schemes/zhang_mcfarlane/zm_conv_evap.meta +/home/cacraig/cam_pumas_round2/src/atmos_phys/schemes/conservation_adjust/check_energy/dycore_energy_consistency_adjust.meta - ccpp_error_code - ccpp_error_message - - cloud_area_fraction - - freezing_point_of_water - - frozen_precipitation_flux_at_interface_due_to_convection - - land_area_fraction_from_coupler - - latent_heat_of_fusion_of_water_at_0c - - lwe_frozen_precipitation_rate_at_surface_due_to_convection - - lwe_precipitation_rate_at_surface_due_to_convection - - mass_fraction_of_snow_content_within_stratiform_cloud - - precipitation_flux_at_interface_due_to_convection - - scheme_name - - tendency_of_dry_air_enthalpy_at_constant_pressure_due_to_evaporation_and_melting_of_frozen_precipitation_due_to_convection - - tendency_of_dry_air_enthalpy_at_constant_pressure_due_to_frozen_precipitation_production_due_to_convection - - tendency_of_frozen_precipitation_wrt_moist_air_and_condensed_water_due_to_convection - - tendency_of_precipitation_wrt_moist_air_and_condensed_water_due_to_convection - - tendency_of_precipitation_wrt_moist_air_and_condensed_water_due_to_convection_excluding_subcloud_evaporation - - tendency_of_water_vapor_mixing_ratio_wrt_moist_air_and_condensed_water - - tunable_evaporation_efficiency_over_land_for_zhang_mcfarlane_deep_convection_scheme - - tunable_evaporation_efficiency_over_ocean_for_zhang_mcfarlane_deep_convection_scheme + - flag_for_dycore_energy_consistency_adjustment + - ratio_of_specific_heat_of_air_used_in_physics_energy_formula_to_specific_heat_of_air_used_in_dycore_energy_formula -------------------------- -/glade/u/home/cacraig/cam_sima_caminout/src/physics/ncar_ccpp/schemes/zhang_mcfarlane/set_general_conv_fluxes_to_deep.meta +/home/cacraig/cam_pumas_round2/src/atmos_phys/schemes/conservation_adjust/check_energy/check_energy_scaling.meta - - frozen_precipitation_flux_at_interface_due_to_convection - - frozen_precipitation_flux_at_interface_due_to_deep_convection - - lwe_frozen_precipitation_rate_at_surface_due_to_convection - - lwe_frozen_precipitation_rate_at_surface_due_to_deep_convection - - lwe_precipitation_rate_at_surface_due_to_convection - - lwe_precipitation_rate_at_surface_due_to_deep_convection - - precipitation_flux_at_interface_due_to_convection - - precipitation_flux_at_interface_due_to_deep_convection - - tendency_of_dry_air_enthalpy_at_constant_pressure_due_to_evaporation_and_melting_of_frozen_precipitation_due_to_convection - - tendency_of_dry_air_enthalpy_at_constant_pressure_due_to_evaporation_and_melting_of_frozen_precipitation_due_to_deep_convection - - tendency_of_dry_air_enthalpy_at_constant_pressure_due_to_frozen_precipitation_production_due_to_convection - - tendency_of_dry_air_enthalpy_at_constant_pressure_due_to_frozen_precipitation_production_due_to_deep_convection - - tendency_of_frozen_precipitation_wrt_moist_air_and_condensed_water_due_to_convection - - tendency_of_frozen_precipitation_wrt_moist_air_and_condensed_water_due_to_deep_convection - - tendency_of_precipitation_wrt_moist_air_and_condensed_water_due_to_convection - - tendency_of_precipitation_wrt_moist_air_and_condensed_water_due_to_deep_convection + - ccpp_error_code + - ccpp_error_message + - ratio_of_specific_heat_of_air_used_in_physics_energy_formula_to_specific_heat_of_air_used_in_dycore_energy_formula + - specific_heat_of_air_used_in_dycore -------------------------- -/glade/u/home/cacraig/cam_sima_caminout/src/physics/ncar_ccpp/schemes/zhang_mcfarlane/zm_conv_convtran.meta +/home/cacraig/cam_pumas_round2/src/atmos_phys/schemes/conservation_adjust/check_energy/check_energy_fix.meta - - atmosphere_detrainment_convective_mass_flux_for_deep_convection_for_convective_columns - - atmosphere_downdraft_convective_mass_flux_for_deep_convection_for_convective_columns - - atmosphere_downdraft_entrainment_convective_mass_flux_for_deep_convection_for_convective_columns - - atmosphere_updraft_convective_mass_flux_for_deep_convection_for_convective_columns - - atmosphere_updraft_entrainment_convective_mass_flux_for_deep_convection_for_convective_columns - - ccpp_constituent_properties - - ccpp_constituent_tendencies - - ccpp_constituents + - air_pressure_at_interface - ccpp_error_code - ccpp_error_message - - current_timestep_number - - flag_for_tracer_transport_by_zhang_mcfarlane_deep_scheme - - fraction_of_water_insoluble_convectively_transported_species - - horizontal_index_of_convective_columns_for_deep_convection_for_convective_columns - - index_of_first_column_of_gathered_deep_convection_arrays - - index_of_last_column_of_gathered_deep_convection_arrays - - number_of_ccpp_constituents - - pressure_thickness_for_deep_convection_for_convective_columns - - pressure_thickness_for_subcloud_layer_for_deep_convection_for_convective_columns + - global_mean_heating_rate_correction_for_energy_conservation + - net_sensible_heat_flux_through_top_and_bottom_of_atmosphere_column - scheme_name - - vertical_index_at_top_of_deep_convection_for_convective_columns - - vertical_index_of_deep_convection_launch_level_for_convective_columns -------------------------- -/glade/u/home/cacraig/cam_sima_caminout/src/physics/ncar_ccpp/schemes/zhang_mcfarlane/zm_convr.meta +/home/cacraig/cam_pumas_round2/src/atmos_phys/schemes/conservation_adjust/check_energy/check_energy_save_teout.meta - - air_pressure_at_interface - - atmosphere_convective_mass_flux_due_to_deep_convection - - atmosphere_detrainment_convective_mass_flux_for_deep_convection_for_convective_columns - - atmosphere_downdraft_convective_mass_flux_for_deep_convection_for_convective_columns - - atmosphere_downdraft_entrainment_convective_mass_flux_for_deep_convection_for_convective_columns - - atmosphere_updraft_convective_mass_flux_for_deep_convection_for_convective_columns - - atmosphere_updraft_entrainment_convective_mass_flux_for_deep_convection_for_convective_columns - - cape_threshold_for_zhang_mcfarlane_deep_convection_scheme - ccpp_error_code - ccpp_error_message - - cloud_condensate_to_precipitation_autoconversion_coefficient_over_land_for_zhang_mcfarlane_deep_convection_scheme - - cloud_condensate_to_precipitation_autoconversion_coefficient_over_ocean_for_zhang_mcfarlane_deep_convection_scheme - - convective_temperature_perturbation_due_to_pbl_eddies - - deep_convective_adjustment_timescale_for_zhang_mcfarlane_deep_convection_scheme - - detrainment_mass_flux_due_to_deep_convection - - detrainment_of_cloud_ice_wrt_moist_air_and_condensed_water_due_to_deep_convection - - detrainment_of_cloud_liquid_water_wrt_moist_air_and_condensed_water_due_to_deep_convection - - entrainment_rate_for_cape_for_zhang_mcfarlane_deep_convection_scheme - - flag_for_no_deep_convection_in_pbl - - flag_for_well_mixed_pbl_parcel_property_for_zhang_mcfarlane_deep_convection_scheme - - fraction_of_pbl_depth_mixed_for_initial_zhang_mcfarlane_parcel_properties - - freezing_point_of_water - - gas_constant_of_water_vapor - - geopotential_height_wrt_surface_at_interface - - horizontal_index_of_convective_columns_for_deep_convection_for_convective_columns - - in_cloud_water_vapor_mixing_ratio_wrt_moist_air_and_condensed_water_due_to_deep_convection - - index_of_last_column_of_gathered_deep_convection_arrays - - land_area_fraction_from_coupler - - latent_heat_of_fusion_of_water_at_0c - - lwe_precipitation_rate_at_surface_due_to_deep_convection - - momentum_transport_parameter_for_vertical_pressure_gradient_force_for_downdraft_for_zhang_mcfarlane_deep_convection_scheme - - momentum_transport_parameter_for_vertical_pressure_gradient_force_for_updraft_for_zhang_mcfarlane_deep_convection_scheme - - number_of_negative_buoyancy_layers_allowed_before_convection_top_for_zhang_mcfarlane_deep_convection_scheme - - parcel_temperature_perturbation_for_zhang_mcfarlane_deep_convection_scheme - - pressure_thickness_for_deep_convection_for_convective_columns - - pressure_thickness_for_subcloud_layer_for_deep_convection_for_convective_columns - - ratio_of_water_vapor_to_dry_air_molecular_weights - - reference_pressure_at_interface - - scheme_name - - specific_heat_of_liquid_water_at_constant_pressure - - specific_heat_of_water_vapor_at_constant_pressure - - tendency_of_precipitation_wrt_moist_air_and_condensed_water_due_to_deep_convection_excluding_subcloud_evaporation - - tendency_of_water_vapor_mixing_ratio_wrt_moist_air_and_condensed_water - - tendency_of_water_vapor_mixing_ratio_wrt_moist_air_and_condensed_water_from_cloud_condensation_minus_precipitation_evaporation_due_to_deep_convection - - tunable_evaporation_efficiency_over_land_for_zhang_mcfarlane_deep_convection_scheme - - tunable_evaporation_efficiency_over_ocean_for_zhang_mcfarlane_deep_convection_scheme - - vertical_index_at_top_of_deep_convection_for_convective_columns - - vertical_index_of_deep_convection_launch_level_for_convective_columns - - vertically_integrated_cloud_ice_tendency_due_to_all_convection_to_be_applied_later_in_time_loop - - vertically_integrated_cloud_liquid_water_tendency_due_to_all_convection_to_be_applied_later_in_time_loop - - zhang_mcfarlane_convective_available_potential_energy - --------------------------- - -/glade/u/home/cacraig/cam_sima_caminout/src/physics/ncar_ccpp/schemes/zhang_mcfarlane/zm_conv_options.meta - - - cape_threshold_for_zhang_mcfarlane_deep_convection_scheme - - cloud_condensate_to_precipitation_autoconversion_coefficient_over_land_for_zhang_mcfarlane_deep_convection_scheme - - cloud_condensate_to_precipitation_autoconversion_coefficient_over_ocean_for_zhang_mcfarlane_deep_convection_scheme - - deep_convective_adjustment_timescale_for_zhang_mcfarlane_deep_convection_scheme - - entrainment_rate_for_cape_for_zhang_mcfarlane_deep_convection_scheme - - flag_for_no_deep_convection_in_pbl - - flag_for_well_mixed_pbl_parcel_property_for_zhang_mcfarlane_deep_convection_scheme - - fraction_of_pbl_depth_mixed_for_initial_zhang_mcfarlane_parcel_properties - - momentum_transport_parameter_for_vertical_pressure_gradient_force_for_downdraft_for_zhang_mcfarlane_deep_convection_scheme - - momentum_transport_parameter_for_vertical_pressure_gradient_force_for_updraft_for_zhang_mcfarlane_deep_convection_scheme - - number_of_negative_buoyancy_layers_allowed_before_convection_top_for_zhang_mcfarlane_deep_convection_scheme - - parcel_temperature_perturbation_for_zhang_mcfarlane_deep_convection_scheme - - tunable_evaporation_efficiency_over_land_for_zhang_mcfarlane_deep_convection_scheme - - tunable_evaporation_efficiency_over_ocean_for_zhang_mcfarlane_deep_convection_scheme - --------------------------- - -/glade/u/home/cacraig/cam_sima_caminout/src/physics/ncar_ccpp/schemes/conservation_adjust/dme_adjust/dme_adjust.meta - - - air_pressure_at_interface - - ccpp_constituent_properties - - ccpp_constituents - - ccpp_error_code - - ccpp_error_message - - is_moist_basis_dycore - - ln_air_pressure_at_interface - - number_of_ccpp_constituents - - surface_air_pressure - - total_ice_water_mixing_ratio_wrt_moist_air_and_condensed_water_before_physics - - total_liquid_water_mixing_ratio_wrt_moist_air_and_condensed_water_before_physics - - water_vapor_mixing_ratio_wrt_moist_air_and_condensed_water_before_physics - --------------------------- - -/glade/u/home/cacraig/cam_sima_caminout/src/physics/ncar_ccpp/schemes/conservation_adjust/check_energy/dycore_energy_consistency_adjust.meta - - - ccpp_error_code - - ccpp_error_message - - flag_for_dycore_energy_consistency_adjustment - - ratio_of_specific_heat_of_air_used_in_physics_energy_formula_to_specific_heat_of_air_used_in_dycore_energy_formula - --------------------------- - -/glade/u/home/cacraig/cam_sima_caminout/src/physics/ncar_ccpp/schemes/conservation_adjust/check_energy/check_energy_zero_fluxes.meta - - - ccpp_error_code - - ccpp_error_message - - net_liquid_and_lwe_ice_fluxes_through_top_and_bottom_of_atmosphere_column - - net_lwe_ice_fluxes_through_top_and_bottom_of_atmosphere_column - - net_sensible_heat_flux_through_top_and_bottom_of_atmosphere_column - - net_water_vapor_fluxes_through_top_and_bottom_of_atmosphere_column - - scheme_name + - vertically_integrated_total_energy_using_dycore_energy_formula + - vertically_integrated_total_energy_using_dycore_energy_formula_at_end_of_physics_timestep -------------------------- -/glade/u/home/cacraig/cam_sima_caminout/src/physics/ncar_ccpp/schemes/conservation_adjust/check_energy/check_energy_chng.meta +/home/cacraig/cam_pumas_round2/src/atmos_phys/schemes/conservation_adjust/check_energy/check_energy_chng.meta - air_pressure_of_dry_air_at_interface - air_temperature_at_start_of_physics_timestep @@ -693,36 +684,19 @@ Non-dictionary standard names found in the following metadata files: -------------------------- -/glade/u/home/cacraig/cam_sima_caminout/src/physics/ncar_ccpp/schemes/conservation_adjust/check_energy/check_energy_fix.meta +/home/cacraig/cam_pumas_round2/src/atmos_phys/schemes/conservation_adjust/check_energy/check_energy_zero_fluxes.meta - - air_pressure_at_interface - ccpp_error_code - ccpp_error_message - - global_mean_heating_rate_correction_for_energy_conservation + - net_liquid_and_lwe_ice_fluxes_through_top_and_bottom_of_atmosphere_column + - net_lwe_ice_fluxes_through_top_and_bottom_of_atmosphere_column - net_sensible_heat_flux_through_top_and_bottom_of_atmosphere_column + - net_water_vapor_fluxes_through_top_and_bottom_of_atmosphere_column - scheme_name -------------------------- -/glade/u/home/cacraig/cam_sima_caminout/src/physics/ncar_ccpp/schemes/conservation_adjust/check_energy/check_energy_save_teout.meta - - - ccpp_error_code - - ccpp_error_message - - vertically_integrated_total_energy_using_dycore_energy_formula - - vertically_integrated_total_energy_using_dycore_energy_formula_at_end_of_physics_timestep - --------------------------- - -/glade/u/home/cacraig/cam_sima_caminout/src/physics/ncar_ccpp/schemes/conservation_adjust/check_energy/check_energy_scaling.meta - - - ccpp_error_code - - ccpp_error_message - - ratio_of_specific_heat_of_air_used_in_physics_energy_formula_to_specific_heat_of_air_used_in_dycore_energy_formula - - specific_heat_of_air_used_in_dycore - --------------------------- - -/glade/u/home/cacraig/cam_sima_caminout/src/physics/ncar_ccpp/schemes/conservation_adjust/check_energy/check_energy_gmean/check_energy_gmean.meta +/home/cacraig/cam_pumas_round2/src/atmos_phys/schemes/conservation_adjust/check_energy/check_energy_gmean/check_energy_gmean.meta - air_pressure_at_interface - ccpp_error_code @@ -738,395 +712,639 @@ Non-dictionary standard names found in the following metadata files: -------------------------- -/glade/u/home/cacraig/cam_sima_caminout/src/physics/ncar_ccpp/schemes/cloud_fraction/cloud_fraction_fice.meta +/home/cacraig/cam_pumas_round2/src/atmos_phys/schemes/kessler/kessler_update.meta - ccpp_error_code - ccpp_error_message - - freezing_point_of_water - - mass_fraction_of_ice_content_within_stratiform_cloud - - mass_fraction_of_snow_content_within_stratiform_cloud - - vertical_layer_index_of_cloud_fraction_top -------------------------- -/glade/u/home/cacraig/cam_sima_caminout/src/physics/ncar_ccpp/schemes/cloud_fraction/set_cloud_fraction_top.meta +/home/cacraig/cam_pumas_round2/src/atmos_phys/schemes/kessler/kessler.meta - ccpp_error_code - ccpp_error_message - - vertical_layer_index_of_cloud_fraction_top - - vertical_layer_index_of_troposphere_cloud_physics_top + - scheme_name -------------------------- -/glade/u/home/cacraig/cam_sima_caminout/src/physics/ncar_ccpp/schemes/cloud_fraction/compute_cloud_fraction.meta +/home/cacraig/cam_pumas_round2/src/atmos_phys/schemes/held_suarez/held_suarez_1994.meta - ccpp_error_code - ccpp_error_message - - cloud_area_fraction - - cloud_area_fraction_from_relative_humidity_method - - control_for_ice_cloud_fraction - - deep_convective_cloud_area_fraction - - do_ice_cloud_fraction_for_cloud_fraction - - do_no_stratification_based_cloud_fraction - - do_relative_humidity_perturbation_for_cloud_fraction - - do_vavrus_freeze_dry_adjustment_for_cloud_fraction - - freezing_point_of_water - - land_area_fraction_from_coupler - - lwe_surface_snow_depth_over_land_from_coupler - - ocean_area_fraction_from_coupler - - ratio_of_dry_air_gas_constant_to_specific_heat_of_dry_air_at_constant_pressure - - reference_temperature_lapse_rate - - relative_humidity_threshold_for_cloud_formation - - sea_surface_temperature_from_coupler - - shallow_convective_cloud_area_fraction - - stratiform_cloud_area_fraction - - stratiform_cloud_ice_area_fraction - - stratiform_cloud_liquid_area_fraction - - surface_air_pressure - - tunable_parameter_for_adjustment_to_minimum_relative_humidity_for_low_stable_clouds_for_land_without_snow_cover_for_cloud_fraction - - tunable_parameter_for_bottom_pressure_bound_for_mid_level_liquid_stratus_for_cloud_fraction - - tunable_parameter_for_critical_relative_humidity_for_ice_clouds_for_cloud_fraction_using_wilson_and_ballard_scheme - - tunable_parameter_for_minimum_relative_humidity_for_high_stable_clouds_for_cloud_fraction - - tunable_parameter_for_minimum_relative_humidity_for_low_stable_clouds_for_cloud_fraction - - tunable_parameter_for_top_pressure_bound_for_mid_level_clouds_for_cloud_fraction - - vertical_layer_index_of_cloud_fraction_top + - scheme_name -------------------------- -/glade/u/home/cacraig/cam_sima_caminout/src/physics/ncar_ccpp/schemes/cloud_fraction/convective_cloud_cover.meta +/home/cacraig/cam_pumas_round2/src/atmos_phys/schemes/zhang_mcfarlane/zm_conv_momtran.meta - - atmosphere_convective_mass_flux_due_to_all_convection - - atmosphere_convective_mass_flux_due_to_shallow_convection + - atmosphere_detrainment_convective_mass_flux_for_deep_convection_for_convective_columns + - atmosphere_downdraft_convective_mass_flux_for_deep_convection_for_convective_columns + - atmosphere_downdraft_entrainment_convective_mass_flux_for_deep_convection_for_convective_columns + - atmosphere_updraft_convective_mass_flux_for_deep_convection_for_convective_columns + - atmosphere_updraft_entrainment_convective_mass_flux_for_deep_convection_for_convective_columns - ccpp_error_code - ccpp_error_message - - deep_convective_cloud_area_fraction - - flag_for_cloud_area_fraction_to_use_shallow_convection_calculated_cloud_area_fraction - - shallow_convective_cloud_area_fraction - - shallow_convective_cloud_area_fraction_from_shallow_convection - - tunable_parameter_for_deep_convection_1_for_cloud_fraction - - tunable_parameter_for_deep_convection_2_for_cloud_fraction - - tunable_parameter_for_shallow_convection_1_for_cloud_fraction - - tunable_parameter_for_shallow_convection_2_for_cloud_fraction - - vertical_layer_index_of_cloud_fraction_top + - current_timestep_number + - flag_for_momentum_transport_by_zhang_mcfarlane_deep_convection_scheme + - horizontal_index_of_convective_columns_for_deep_convection_for_convective_columns + - in_cloud_eastward_wind_in_downdraft_due_to_deep_convection + - in_cloud_eastward_wind_in_updraft_due_to_deep_convection + - in_cloud_northward_wind_in_downdraft_due_to_deep_convection + - in_cloud_northward_wind_in_updraft_due_to_deep_convection + - index_of_first_column_of_gathered_deep_convection_arrays + - index_of_last_column_of_gathered_deep_convection_arrays + - momentum_transport_parameter_for_vertical_pressure_gradient_force_for_downdraft_for_zhang_mcfarlane_deep_convection_scheme + - momentum_transport_parameter_for_vertical_pressure_gradient_force_for_updraft_for_zhang_mcfarlane_deep_convection_scheme + - pressure_thickness_for_deep_convection_for_convective_columns + - pressure_thickness_for_subcloud_layer_for_deep_convection_for_convective_columns + - scheme_name + - tendency_of_eastward_wind_due_to_zhang_mcfarlane_deep_convective_downdraft_pressure_gradient_term + - tendency_of_eastward_wind_due_to_zhang_mcfarlane_deep_convective_updraft_pressure_gradient_term + - tendency_of_northward_wind_due_to_zhang_mcfarlane_deep_convective_downdraft_pressure_gradient_term + - tendency_of_northward_wind_due_to_zhang_mcfarlane_deep_convective_updraft_pressure_gradient_term + - vertical_index_at_top_of_deep_convection_for_convective_columns + - vertical_index_of_deep_convection_launch_level_for_convective_columns -------------------------- -/glade/u/home/cacraig/cam_sima_caminout/src/physics/ncar_ccpp/schemes/rasch_kristjansson/prognostic_cloud_water.meta +/home/cacraig/cam_pumas_round2/src/atmos_phys/schemes/zhang_mcfarlane/zm_convr.meta - - accretion_of_cloud_ice_by_snow - - accretion_of_cloud_liquid_water_by_rain - - accretion_of_cloud_liquid_water_by_snow + - air_pressure_at_interface + - atmosphere_convective_mass_flux_due_to_deep_convection + - atmosphere_detrainment_convective_mass_flux_for_deep_convection_for_convective_columns + - atmosphere_downdraft_convective_mass_flux_for_deep_convection_for_convective_columns + - atmosphere_downdraft_entrainment_convective_mass_flux_for_deep_convection_for_convective_columns + - atmosphere_updraft_convective_mass_flux_for_deep_convection_for_convective_columns + - atmosphere_updraft_entrainment_convective_mass_flux_for_deep_convection_for_convective_columns + - cape_threshold_for_zhang_mcfarlane_deep_convection_scheme - ccpp_error_code - ccpp_error_message - - cloud_area_fraction - - density_of_dry_air_at_stp - - flag_for_relative_humidity_threshold_for_cloud_formation_in_polar_stratosphere_for_rk_microphysics + - cloud_condensate_to_precipitation_autoconversion_coefficient_over_land_for_zhang_mcfarlane_deep_convection_scheme + - cloud_condensate_to_precipitation_autoconversion_coefficient_over_ocean_for_zhang_mcfarlane_deep_convection_scheme + - convective_temperature_perturbation_due_to_pbl_eddies + - deep_convective_adjustment_timescale_for_zhang_mcfarlane_deep_convection_scheme + - detrainment_mass_flux_due_to_deep_convection + - detrainment_of_cloud_ice_wrt_moist_air_and_condensed_water_due_to_deep_convection + - detrainment_of_cloud_liquid_water_wrt_moist_air_and_condensed_water_due_to_deep_convection + - entrainment_rate_for_cape_for_zhang_mcfarlane_deep_convection_scheme + - flag_for_no_deep_convection_in_pbl + - flag_for_well_mixed_pbl_parcel_property_for_zhang_mcfarlane_deep_convection_scheme + - fraction_of_pbl_depth_mixed_for_initial_zhang_mcfarlane_parcel_properties - freezing_point_of_water - gas_constant_of_water_vapor - geopotential_height_wrt_surface_at_interface - - latent_heat_of_fusion_of_water_at_0c - - latitude_degrees_north - - lwe_snow_precipitation_rate_at_surface_due_to_microphysics - - lwe_stratiform_precipitation_rate_at_surface - - lwe_surface_snow_depth_over_land_from_coupler - - mass_fraction_of_ice_content_within_stratiform_cloud - - mass_fraction_of_snow_content_within_stratiform_cloud - - net_condensation_rate_due_to_microphysics - - pi_constant - - precipitation_production_due_to_microphysics - - rate_of_evaporation_of_falling_snow_due_to_microphysics - - rate_of_evaporation_of_precipitation_due_to_microphysics - - ratio_of_water_vapor_to_dry_air_molecular_weights - - relative_humidity_divided_by_cloud_area_fraction_perturbation - - relative_humidity_threshold_for_cloud_formation - - relative_humidity_threshold_for_cloud_formation_in_polar_stratosphere_for_rk_microphysics - - relative_importance_of_cloud_ice_autoconversion - - relative_importance_of_cloud_liquid_water_autoconversion - - relative_importance_of_rain_accreting_cloud_liquid_water - - relative_importance_of_snow_accreting_cloud_ice - - relative_importance_of_snow_accreting_cloud_liquid_water - - sea_ice_area_fraction_from_coupler - - smoothed_land_area_fraction - - snow_production_due_to_microphysics - - stratiform_rain_and_snow_flux_at_interface - - stratiform_snow_flux_at_interface - - tendency_of_air_temperature_not_due_to_microphysics - - tendency_of_cloud_ice_mixing_ratio_wrt_to_moist_air_and_condensed_water_due_to_ice_to_snow_autoconversion - - tendency_of_cloud_liquid_water_mixing_ratio_wrt_to_moist_air_and_condensed_water_due_to_liquid_to_rain_autoconversion - - tendency_of_cloud_liquid_water_mixing_ratio_wrt_to_moist_air_and_condensed_water_due_to_liquid_to_snow_autoconversion - - tendency_of_cloud_water_mixing_ratio_wrt_moist_air_and_condensed_water_not_due_to_microphysics - - tendency_of_dry_air_enthalpy_at_constant_pressure_due_to_evaporation_of_precipitation - - tendency_of_dry_air_enthalpy_at_constant_pressure_due_to_freezing_of_precipitation - - tendency_of_dry_air_enthalpy_at_constant_pressure_due_to_snow_melt - - tendency_of_water_vapor_mixing_ratio_wrt_moist_air_and_condensed_water_not_due_to_microphysics - - tropopause_vertical_layer_index - - tunable_parameter_for_autoconversion_of_cold_ice_for_rk_microphysics - - tunable_parameter_for_autoconversion_of_warm_ice_for_rk_microphysics - - tunable_parameter_for_cloud_water_autoconversion_for_rk_microphysics - - tunable_parameter_for_precipitation_evaporation_for_rk_microphysics - - vertical_layer_index_of_troposphere_cloud_physics_top - --------------------------- - -/glade/u/home/cacraig/cam_sima_caminout/src/physics/ncar_ccpp/schemes/rasch_kristjansson/cloud_particle_sedimentation.meta - - - air_pressure_at_interface - - ccpp_error_code - - ccpp_error_message - - cloud_area_fraction - - freezing_point_of_water + - horizontal_index_of_convective_columns_for_deep_convection_for_convective_columns + - in_cloud_water_vapor_mixing_ratio_wrt_moist_air_and_condensed_water_due_to_deep_convection + - index_of_last_column_of_gathered_deep_convection_arrays - land_area_fraction_from_coupler - latent_heat_of_fusion_of_water_at_0c - - lwe_surface_snow_depth_over_land_from_coupler - - magnitude_of_vertical_pressure_velocity_of_cloud_ice_due_to_sedimentation - - magnitude_of_vertical_pressure_velocity_of_cloud_liquid_water_due_to_sedimentation - - ocean_area_fraction_from_coupler - - sea_ice_area_fraction_from_coupler - - smoothed_land_area_fraction - - stratiform_lwe_cloud_ice_surface_flux_due_to_sedimentation - - stratiform_rain_flux_at_surface_due_to_sedimentation - - tendency_of_cloud_ice_mixing_ratio_wrt_moist_air_and_condensed_water - - tendency_of_cloud_liquid_water_mixing_ratio_wrt_moist_air_and_condensed_water + - lwe_precipitation_rate_at_surface_due_to_deep_convection + - momentum_transport_parameter_for_vertical_pressure_gradient_force_for_downdraft_for_zhang_mcfarlane_deep_convection_scheme + - momentum_transport_parameter_for_vertical_pressure_gradient_force_for_updraft_for_zhang_mcfarlane_deep_convection_scheme + - number_of_negative_buoyancy_layers_allowed_before_convection_top_for_zhang_mcfarlane_deep_convection_scheme + - parcel_temperature_perturbation_for_zhang_mcfarlane_deep_convection_scheme + - pressure_thickness_for_deep_convection_for_convective_columns + - pressure_thickness_for_subcloud_layer_for_deep_convection_for_convective_columns + - ratio_of_water_vapor_to_dry_air_molecular_weights + - reference_pressure_at_interface + - scheme_name + - specific_heat_of_liquid_water_at_constant_pressure + - specific_heat_of_water_vapor_at_constant_pressure + - tendency_of_precipitation_wrt_moist_air_and_condensed_water_due_to_deep_convection_excluding_subcloud_evaporation - tendency_of_water_vapor_mixing_ratio_wrt_moist_air_and_condensed_water - - tunable_parameter_for_autoconversion_of_cold_ice_for_rk_microphysics - - tunable_parameter_for_ice_fall_velocity_for_rk_microphysics + - tendency_of_water_vapor_mixing_ratio_wrt_moist_air_and_condensed_water_from_cloud_condensation_minus_precipitation_evaporation_due_to_deep_convection + - tunable_evaporation_efficiency_over_land_for_zhang_mcfarlane_deep_convection_scheme + - tunable_evaporation_efficiency_over_ocean_for_zhang_mcfarlane_deep_convection_scheme + - vertical_index_at_top_of_deep_convection_for_convective_columns + - vertical_index_of_deep_convection_launch_level_for_convective_columns + - vertically_integrated_cloud_ice_tendency_due_to_all_convection_to_be_applied_later_in_time_loop + - vertically_integrated_cloud_liquid_water_tendency_due_to_all_convection_to_be_applied_later_in_time_loop + - zhang_mcfarlane_convective_available_potential_energy + +-------------------------- + +/home/cacraig/cam_pumas_round2/src/atmos_phys/schemes/zhang_mcfarlane/set_general_conv_fluxes_to_deep.meta + + - frozen_precipitation_flux_at_interface_due_to_convection + - frozen_precipitation_flux_at_interface_due_to_deep_convection + - lwe_frozen_precipitation_rate_at_surface_due_to_convection + - lwe_frozen_precipitation_rate_at_surface_due_to_deep_convection + - lwe_precipitation_rate_at_surface_due_to_convection + - lwe_precipitation_rate_at_surface_due_to_deep_convection + - precipitation_flux_at_interface_due_to_convection + - precipitation_flux_at_interface_due_to_deep_convection + - tendency_of_dry_air_enthalpy_at_constant_pressure_due_to_evaporation_and_melting_of_frozen_precipitation_due_to_convection + - tendency_of_dry_air_enthalpy_at_constant_pressure_due_to_evaporation_and_melting_of_frozen_precipitation_due_to_deep_convection + - tendency_of_dry_air_enthalpy_at_constant_pressure_due_to_frozen_precipitation_production_due_to_convection + - tendency_of_dry_air_enthalpy_at_constant_pressure_due_to_frozen_precipitation_production_due_to_deep_convection + - tendency_of_frozen_precipitation_wrt_moist_air_and_condensed_water_due_to_convection + - tendency_of_frozen_precipitation_wrt_moist_air_and_condensed_water_due_to_deep_convection + - tendency_of_precipitation_wrt_moist_air_and_condensed_water_due_to_convection + - tendency_of_precipitation_wrt_moist_air_and_condensed_water_due_to_deep_convection -------------------------- -/glade/u/home/cacraig/cam_sima_caminout/src/physics/ncar_ccpp/schemes/rasch_kristjansson/rk_stratiform.meta +/home/cacraig/cam_pumas_round2/src/atmos_phys/schemes/zhang_mcfarlane/zm_conv_convtran.meta + + - atmosphere_detrainment_convective_mass_flux_for_deep_convection_for_convective_columns + - atmosphere_downdraft_convective_mass_flux_for_deep_convection_for_convective_columns + - atmosphere_downdraft_entrainment_convective_mass_flux_for_deep_convection_for_convective_columns + - atmosphere_updraft_convective_mass_flux_for_deep_convection_for_convective_columns + - atmosphere_updraft_entrainment_convective_mass_flux_for_deep_convection_for_convective_columns + - ccpp_constituent_properties + - ccpp_constituent_tendencies + - ccpp_constituents + - ccpp_error_code + - ccpp_error_message + - current_timestep_number + - flag_for_tracer_transport_by_zhang_mcfarlane_deep_scheme + - fraction_of_water_insoluble_convectively_transported_species + - horizontal_index_of_convective_columns_for_deep_convection_for_convective_columns + - index_of_first_column_of_gathered_deep_convection_arrays + - index_of_last_column_of_gathered_deep_convection_arrays + - number_of_ccpp_constituents + - pressure_thickness_for_deep_convection_for_convective_columns + - pressure_thickness_for_subcloud_layer_for_deep_convection_for_convective_columns + - scheme_name + - vertical_index_at_top_of_deep_convection_for_convective_columns + - vertical_index_of_deep_convection_launch_level_for_convective_columns + +-------------------------- + +/home/cacraig/cam_pumas_round2/src/atmos_phys/schemes/zhang_mcfarlane/set_deep_conv_fluxes_to_general.meta + + - lwe_precipitation_rate_at_surface_due_to_convection + - lwe_precipitation_rate_at_surface_due_to_deep_convection + - tendency_of_precipitation_wrt_moist_air_and_condensed_water_due_to_convection_excluding_subcloud_evaporation + - tendency_of_precipitation_wrt_moist_air_and_condensed_water_due_to_deep_convection_excluding_subcloud_evaporation + +-------------------------- + +/home/cacraig/cam_pumas_round2/src/atmos_phys/schemes/zhang_mcfarlane/zm_conv_options.meta + + - cape_threshold_for_zhang_mcfarlane_deep_convection_scheme + - cloud_condensate_to_precipitation_autoconversion_coefficient_over_land_for_zhang_mcfarlane_deep_convection_scheme + - cloud_condensate_to_precipitation_autoconversion_coefficient_over_ocean_for_zhang_mcfarlane_deep_convection_scheme + - deep_convective_adjustment_timescale_for_zhang_mcfarlane_deep_convection_scheme + - entrainment_rate_for_cape_for_zhang_mcfarlane_deep_convection_scheme + - flag_for_no_deep_convection_in_pbl + - flag_for_well_mixed_pbl_parcel_property_for_zhang_mcfarlane_deep_convection_scheme + - fraction_of_pbl_depth_mixed_for_initial_zhang_mcfarlane_parcel_properties + - momentum_transport_parameter_for_vertical_pressure_gradient_force_for_downdraft_for_zhang_mcfarlane_deep_convection_scheme + - momentum_transport_parameter_for_vertical_pressure_gradient_force_for_updraft_for_zhang_mcfarlane_deep_convection_scheme + - number_of_negative_buoyancy_layers_allowed_before_convection_top_for_zhang_mcfarlane_deep_convection_scheme + - parcel_temperature_perturbation_for_zhang_mcfarlane_deep_convection_scheme + - tunable_evaporation_efficiency_over_land_for_zhang_mcfarlane_deep_convection_scheme + - tunable_evaporation_efficiency_over_ocean_for_zhang_mcfarlane_deep_convection_scheme + +-------------------------- + +/home/cacraig/cam_pumas_round2/src/atmos_phys/schemes/zhang_mcfarlane/zm_conv_evap.meta - ccpp_error_code - ccpp_error_message - cloud_area_fraction - - cloud_water_mixing_ratio_wrt_moist_air_and_condensed_water_on_previous_timestep - - deep_convective_cloud_area_fraction - - detrainment_of_cloud_liquid_water_wrt_moist_air_and_condensed_water_due_to_all_convection - freezing_point_of_water + - frozen_precipitation_flux_at_interface_due_to_convection - land_area_fraction_from_coupler - latent_heat_of_fusion_of_water_at_0c - - lwe_large_scale_precipitation_rate_at_surface - - lwe_snow_and_cloud_ice_precipitation_rate_at_surface_due_to_microphysics - - lwe_snow_precipitation_rate_at_surface_due_to_microphysics - - lwe_stratiform_precipitation_rate_at_surface + - lwe_frozen_precipitation_rate_at_surface_due_to_convection + - lwe_precipitation_rate_at_surface_due_to_convection + - mass_fraction_of_snow_content_within_stratiform_cloud + - precipitation_flux_at_interface_due_to_convection + - scheme_name + - tendency_of_dry_air_enthalpy_at_constant_pressure_due_to_evaporation_and_melting_of_frozen_precipitation_due_to_convection + - tendency_of_dry_air_enthalpy_at_constant_pressure_due_to_frozen_precipitation_production_due_to_convection + - tendency_of_frozen_precipitation_wrt_moist_air_and_condensed_water_due_to_convection + - tendency_of_precipitation_wrt_moist_air_and_condensed_water_due_to_convection + - tendency_of_precipitation_wrt_moist_air_and_condensed_water_due_to_convection_excluding_subcloud_evaporation + - tendency_of_water_vapor_mixing_ratio_wrt_moist_air_and_condensed_water + - tunable_evaporation_efficiency_over_land_for_zhang_mcfarlane_deep_convection_scheme + - tunable_evaporation_efficiency_over_ocean_for_zhang_mcfarlane_deep_convection_scheme + +-------------------------- + +/home/cacraig/cam_pumas_round2/src/atmos_phys/schemes/cloud_fraction/compute_cloud_fraction.meta + + - ccpp_error_code + - ccpp_error_message + - cloud_area_fraction + - cloud_area_fraction_from_relative_humidity_method + - control_for_ice_cloud_fraction + - deep_convective_cloud_area_fraction + - do_ice_cloud_fraction_for_cloud_fraction + - do_no_stratification_based_cloud_fraction + - do_relative_humidity_perturbation_for_cloud_fraction + - do_vavrus_freeze_dry_adjustment_for_cloud_fraction + - freezing_point_of_water + - land_area_fraction_from_coupler - lwe_surface_snow_depth_over_land_from_coupler - - mass_fraction_of_ice_content_within_stratiform_cloud - - net_condensation_rate_due_to_microphysics - ocean_area_fraction_from_coupler - - rate_of_condensation_minus_evaporation_for_cloud_ice_mixing_ratio_wrt_moist_air_and_condensed_water - - rate_of_condensation_minus_evaporation_for_cloud_liquid_water_mixing_ratio_wrt_moist_air_and_condensed_water - - rate_of_evaporation_of_precipitation_due_to_microphysics - ratio_of_dry_air_gas_constant_to_specific_heat_of_dry_air_at_constant_pressure - reference_temperature_lapse_rate - - relative_humidity_divided_by_cloud_area_fraction_perturbation - relative_humidity_threshold_for_cloud_formation - - sea_ice_area_fraction_from_coupler - sea_surface_temperature_from_coupler - shallow_convective_cloud_area_fraction - - smoothed_land_area_fraction - - stratiform_cloud_water_surface_flux_due_to_sedimentation - - stratiform_lwe_cloud_ice_surface_flux_due_to_sedimentation - - stratiform_rain_flux_at_surface_due_to_sedimentation + - stratiform_cloud_area_fraction + - stratiform_cloud_ice_area_fraction + - stratiform_cloud_liquid_area_fraction - surface_air_pressure - - tendency_of_air_temperature_not_due_to_microphysics - - tendency_of_cloud_ice_mixing_ratio_wrt_moist_air_and_condensed_water - - tendency_of_cloud_ice_mixing_ratio_wrt_to_moist_air_and_condensed_water_due_to_ice_to_snow_autoconversion - - tendency_of_cloud_liquid_water_mixing_ratio_wrt_moist_air_and_condensed_water - - tendency_of_cloud_liquid_water_mixing_ratio_wrt_to_moist_air_and_condensed_water_due_to_liquid_to_rain_autoconversion - - tendency_of_cloud_water_mixing_ratio_wrt_moist_air_and_condensed_water_not_due_to_microphysics - - tendency_of_dry_air_enthalpy_at_constant_pressure_due_to_cloud_ice_and_cloud_liquid_repartitioning - - tendency_of_dry_air_enthalpy_at_constant_pressure_due_to_condensation_minus_evaporation - - tendency_of_dry_air_enthalpy_at_constant_pressure_due_to_evaporation_of_precipitation - - tendency_of_dry_air_enthalpy_at_constant_pressure_due_to_freezing_of_precipitation - - tendency_of_dry_air_enthalpy_at_constant_pressure_due_to_snow_melt - - tendency_of_water_vapor_mixing_ratio_wrt_moist_air_and_condensed_water - - tendency_of_water_vapor_mixing_ratio_wrt_moist_air_and_condensed_water_not_due_to_microphysics + - tunable_parameter_for_adjustment_to_minimum_relative_humidity_for_low_stable_clouds_for_land_without_snow_cover_for_cloud_fraction + - tunable_parameter_for_bottom_pressure_bound_for_mid_level_liquid_stratus_for_cloud_fraction + - tunable_parameter_for_critical_relative_humidity_for_ice_clouds_for_cloud_fraction_using_wilson_and_ballard_scheme + - tunable_parameter_for_minimum_relative_humidity_for_high_stable_clouds_for_cloud_fraction + - tunable_parameter_for_minimum_relative_humidity_for_low_stable_clouds_for_cloud_fraction + - tunable_parameter_for_top_pressure_bound_for_mid_level_clouds_for_cloud_fraction - vertical_layer_index_of_cloud_fraction_top - - vertically_integrated_cloud_liquid_water_tendency_due_to_all_convection_to_be_applied_later_in_time_loop - - water_vapor_mixing_ratio_wrt_moist_air_and_condensed_water_on_previous_timestep -------------------------- -/glade/u/home/cacraig/cam_sima_caminout/src/physics/ncar_ccpp/schemes/thermo_water_update/thermo_water_update.meta +/home/cacraig/cam_pumas_round2/src/atmos_phys/schemes/cloud_fraction/cloud_fraction_fice.meta - - ccpp_constituents - - specific_heat_of_air_used_in_dycore - - total_energy_formula_for_dycore + - ccpp_error_code + - ccpp_error_message + - freezing_point_of_water + - mass_fraction_of_ice_content_within_stratiform_cloud + - mass_fraction_of_snow_content_within_stratiform_cloud + - vertical_layer_index_of_cloud_fraction_top -------------------------- -/glade/u/home/cacraig/cam_sima_caminout/src/physics/ncar_ccpp/schemes/tj2016/tj2016_sfc_pbl_hs.meta +/home/cacraig/cam_pumas_round2/src/atmos_phys/schemes/cloud_fraction/convective_cloud_cover.meta - - air_pressure_at_interface + - atmosphere_convective_mass_flux_due_to_all_convection + - atmosphere_convective_mass_flux_due_to_shallow_convection - ccpp_error_code - ccpp_error_message - - eddy_heat_diffusivity - - eddy_momentum_diffusivity - - gas_constant_of_water_vapor - - ln_air_pressure_at_interface - - pi_constant - - ratio_of_water_vapor_to_dry_air_molecular_weights - - scheme_name - - sea_surface_temperature_from_coupler - - sum_of_sigma_pressure_hybrid_coordinate_a_coefficient_and_sigma_pressure_hybrid_coordinate_b_coefficient - - surface_air_pressure - - surface_eastward_wind_stress - - surface_evaporation_rate - - surface_northward_wind_stress - - surface_upward_sensible_heat_flux - - tendency_of_air_temperature_due_to_diabatic_heating - - tendency_of_air_temperature_due_to_vertical_diffusion - - tendency_of_water_vapor_mixing_ratio_wrt_moist_air_and_condensed_water_due_to_vertical_diffusion + - deep_convective_cloud_area_fraction + - flag_for_cloud_area_fraction_to_use_shallow_convection_calculated_cloud_area_fraction + - shallow_convective_cloud_area_fraction + - shallow_convective_cloud_area_fraction_from_shallow_convection + - tunable_parameter_for_deep_convection_1_for_cloud_fraction + - tunable_parameter_for_deep_convection_2_for_cloud_fraction + - tunable_parameter_for_shallow_convection_1_for_cloud_fraction + - tunable_parameter_for_shallow_convection_2_for_cloud_fraction + - vertical_layer_index_of_cloud_fraction_top -------------------------- -/glade/u/home/cacraig/cam_sima_caminout/src/physics/ncar_ccpp/schemes/tj2016/tj2016_precip.meta +/home/cacraig/cam_pumas_round2/src/atmos_phys/schemes/cloud_fraction/set_cloud_fraction_top.meta - ccpp_error_code - ccpp_error_message - - gas_constant_of_water_vapor - - lwe_large_scale_precipitation_rate_at_surface - - ratio_of_water_vapor_to_dry_air_molecular_weights - - scheme_name - - sum_of_sigma_pressure_hybrid_coordinate_a_coefficient_and_sigma_pressure_hybrid_coordinate_b_coefficient + - vertical_layer_index_of_cloud_fraction_top + - vertical_layer_index_of_troposphere_cloud_physics_top -------------------------- -/glade/u/home/cacraig/cam_sima_caminout/src/physics/ncar_ccpp/schemes/musica/musica_ccpp.meta +/home/cacraig/cam_pumas_round2/src/atmos_phys/schemes/rayleigh_friction/rayleigh_friction.meta - - blackbody_temperature_at_surface - - ccpp_constituent_properties - - ccpp_constituents - ccpp_error_code - ccpp_error_message - - cloud_area_fraction - - dynamic_constituents_for_musica_ccpp - - earth_sun_distance - - extraterrestrial_radiation_flux - - geopotential_height_wrt_surface_at_interface - - molecular_weight_of_dry_air - - photolysis_wavelength_grid_interfaces - - solar_zenith_angle - - surface_albedo_due_to_UV_and_VIS_direct + - center_vertical_layer_for_rayleigh_friction + - model_top_decay_time_for_rayleigh_friction + - number_of_vertical_layers_for_rayleigh_friction -------------------------- -/glade/u/home/cacraig/cam_sima_caminout/src/physics/ncar_ccpp/schemes/dry_adiabatic_adjust/dadadj.meta +/home/cacraig/cam_pumas_round2/src/atmos_phys/schemes/tj2016/tj2016_precip.meta - - air_pressure_at_interface - - binary_indicator_for_dry_adiabatic_adjusted_grid_cell - ccpp_error_code - ccpp_error_message - - number_of_iterations_for_dry_adiabatic_adjustment_algorithm_convergence - - number_of_vertical_levels_from_model_top_where_dry_adiabatic_adjustment_occurs + - gas_constant_of_water_vapor + - lwe_large_scale_precipitation_rate_at_surface + - ratio_of_water_vapor_to_dry_air_molecular_weights - scheme_name - - tendency_of_water_vapor_mixing_ratio_wrt_moist_air_and_condensed_water + - sum_of_sigma_pressure_hybrid_coordinate_a_coefficient_and_sigma_pressure_hybrid_coordinate_b_coefficient -------------------------- -/glade/u/home/cacraig/cam_sima_caminout/src/physics/ncar_ccpp/schemes/rayleigh_friction/rayleigh_friction.meta +/home/cacraig/cam_pumas_round2/src/atmos_phys/schemes/tj2016/tj2016_sfc_pbl_hs.meta + - air_pressure_at_interface - ccpp_error_code - ccpp_error_message - - center_vertical_layer_for_rayleigh_friction - - model_top_decay_time_for_rayleigh_friction - - number_of_vertical_layers_for_rayleigh_friction + - eddy_heat_diffusivity + - eddy_momentum_diffusivity + - gas_constant_of_water_vapor + - ln_air_pressure_at_interface + - pi_constant + - ratio_of_water_vapor_to_dry_air_molecular_weights + - scheme_name + - sea_surface_temperature_from_coupler + - sum_of_sigma_pressure_hybrid_coordinate_a_coefficient_and_sigma_pressure_hybrid_coordinate_b_coefficient + - surface_air_pressure + - surface_eastward_wind_stress + - surface_evaporation_rate + - surface_northward_wind_stress + - surface_upward_sensible_heat_flux + - tendency_of_air_temperature_due_to_diabatic_heating + - tendency_of_air_temperature_due_to_vertical_diffusion + - tendency_of_water_vapor_mixing_ratio_wrt_moist_air_and_condensed_water_due_to_vertical_diffusion -------------------------- -/glade/u/home/cacraig/cam_sima_caminout/src/physics/ncar_ccpp/schemes/utilities/static_energy.meta +/home/cacraig/cam_pumas_round2/src/atmos_phys/schemes/pumas/pumas_pre_main.meta - ccpp_error_code - ccpp_error_message -------------------------- -/glade/u/home/cacraig/cam_sima_caminout/src/physics/ncar_ccpp/schemes/utilities/physics_tendency_updaters.meta +/home/cacraig/cam_pumas_round2/src/atmos_phys/schemes/pumas/micro_pumas_ccpp_dimensions_post.meta - - ccpp_constituent_tendencies - - ccpp_constituents + - analytic_radar_reflectivity_at_10_cm_wavelength + - analytic_radar_reflectivity_at_94_GHz + - analytic_radar_reflectivity_at_94_GHz_in_precipitating_fraction_of_gridcell + - analytic_radar_reflectivity_at_94_GHz_with_cloudsat_thresholds + - analytic_radar_reflectivity_at_94_GHz_with_cloudsat_thresholds_in_precipitating_fraction_of_gridcell + - analytic_radar_reflectivity_z_factor_at_10_cm_wavelength + - analytic_radar_reflectivity_z_factor_at_94_GHz + - available_cloud_condensation_nuclei_number_concentration_of_new_state + - available_ice_nuclei_number_concentration_of_new_state + - average_diameter_of_stratiform_graupel_particle + - average_diameter_of_stratiform_rain_particle + - average_diameter_of_stratiform_snow_particle - ccpp_error_code - ccpp_error_message + - cloud_ice_sedimentation_flux + - cloud_ice_surface_area_density + - cloud_liquid_sedimentation_flux + - cloud_particle_size_distribution_shape_parameter + - cloud_particle_size_distribution_slope_parameter + - condensation_minus_evaporation_rate_of_in_cloud_ice_wrt_moist_air_and_condensed_water + - direct_conversion_rate_of_stratiform_cloud_water_to_precipitation_for_scavenging + - effective_diameter_of_stratiform_cloud_ice_particles_for_radiation + - effective_radius_of_stratiform_cloud_liquid_plus_rain_particles + - effective_radius_of_stratiform_cloud_liquid_water_particle_assuming_cloud_water_number_concentration_of_1e8_per_kg_air + - effective_radius_of_stratiform_graupel_particle + - effective_radius_of_stratiform_rain_particle + - effective_radius_of_stratiform_snow_particle + - fraction_of_cloud_liquid_tendency_applied_to_state + - fraction_of_frozen_water_to_total_condensed_water + - fraction_of_gridcell_with_graupel + - fraction_of_gridcell_with_nonzero_radar_reflectivity + - fraction_of_gridcell_with_nonzero_radar_reflectivity_with_cloudsat_thresholds + - fraction_of_gridcell_with_rain + - fraction_of_gridcell_with_snow + - graupel_mixing_ratio_wrt_moist_air_and_condensed_water_of_new_state + - graupel_mixing_ratio_wrt_moist_air_and_condensed_water_of_new_state_in_precipitating_fraction_of_gridcell + - graupel_number_concentration_of_new_state + - graupel_number_concentration_of_new_state_in_precipitating_fraction_of_gridcell + - graupel_scaled_diameter + - graupel_sedimentation_flux + - lwe_large_scale_precipitation_rate_at_surface + - lwe_large_scale_snowfall_rate_at_surface + - microphysics_analytic_radar_reflectivity_at_10_cm_wavelength + - microphysics_analytic_radar_reflectivity_at_94_GHz + - microphysics_analytic_radar_reflectivity_at_94_GHz_in_precipitating_fraction_of_gridcell + - microphysics_analytic_radar_reflectivity_at_94_GHz_with_cloudsat_thresholds + - microphysics_analytic_radar_reflectivity_at_94_GHz_with_cloudsat_thresholds_in_precipitating_fraction_of_gridcell + - microphysics_analytic_radar_reflectivity_z_factor_at_10_cm_wavelength + - microphysics_analytic_radar_reflectivity_z_factor_at_94_GHz + - microphysics_available_cloud_condensation_nuclei_number_concentration_of_new_state + - microphysics_available_ice_nuclei_number_concentration_of_new_state + - microphysics_average_diameter_of_stratiform_graupel_particle + - microphysics_average_diameter_of_stratiform_rain_particle + - microphysics_average_diameter_of_stratiform_snow_particle + - microphysics_cloud_ice_sedimentation_flux + - microphysics_cloud_ice_surface_area_density + - microphysics_cloud_liquid_sedimentation_flux + - microphysics_cloud_particle_size_distribution_shape_parameter + - microphysics_cloud_particle_size_distribution_slope_parameter + - microphysics_condensation_minus_evaporation_rate_of_in_cloud_ice_wrt_moist_air_and_condensed_water + - microphysics_direct_conversion_rate_of_stratiform_cloud_water_to_precipitation_for_scavenging + - microphysics_effective_diameter_of_stratiform_cloud_ice_particles_for_radiation + - microphysics_effective_radius_of_stratiform_cloud_ice_particle + - microphysics_effective_radius_of_stratiform_cloud_liquid_plus_rain_particles + - microphysics_effective_radius_of_stratiform_cloud_liquid_water_particle + - microphysics_effective_radius_of_stratiform_cloud_liquid_water_particle_assuming_cloud_water_number_concentration_of_1e8_per_kg_air + - microphysics_effective_radius_of_stratiform_graupel_particle + - microphysics_effective_radius_of_stratiform_rain_particle + - microphysics_effective_radius_of_stratiform_snow_particle + - microphysics_fraction_of_cloud_liquid_tendency_applied_to_state + - microphysics_fraction_of_frozen_water_to_total_condensed_water + - microphysics_fraction_of_gridcell_with_graupel + - microphysics_fraction_of_gridcell_with_nonzero_radar_reflectivity + - microphysics_fraction_of_gridcell_with_nonzero_radar_reflectivity_with_cloudsat_thresholds + - microphysics_fraction_of_gridcell_with_rain + - microphysics_fraction_of_gridcell_with_snow + - microphysics_graupel_mixing_ratio_wrt_moist_air_and_condensed_water_of_new_state + - microphysics_graupel_mixing_ratio_wrt_moist_air_and_condensed_water_of_new_state_in_precipitating_fraction_of_gridcell + - microphysics_graupel_number_concentration_of_new_state + - microphysics_graupel_number_concentration_of_new_state_in_precipitating_fraction_of_gridcell + - microphysics_graupel_scaled_diameter + - microphysics_graupel_sedimentation_flux + - microphysics_horizontal_loop_extent + - microphysics_lwe_large_scale_precipitation_rate_at_surface + - microphysics_lwe_large_scale_snowfall_rate_at_surface + - microphysics_precipitation_evaporation_area + - microphysics_precipitation_evaporation_rate_wrt_moist_air_and_condensed_water + - microphysics_precipitation_production_rate_wrt_moist_air_and_condensed_water + - microphysics_rain_evaporation_rate_wrt_moist_air_and_condensed_water + - microphysics_rain_mixing_ratio_wrt_moist_air_and_condensed_water_of_new_state + - microphysics_rain_mixing_ratio_wrt_moist_air_and_condensed_water_of_new_state_in_precipitating_fraction_of_gridcell + - microphysics_rain_number_concentration_of_new_state + - microphysics_rain_number_concentration_of_new_state_in_precipitating_fraction_of_gridcell + - microphysics_rain_sedimentation_flux + - microphysics_snow_mixing_ratio_wrt_moist_air_and_condensed_water_of_new_state + - microphysics_snow_mixing_ratio_wrt_moist_air_and_condensed_water_of_new_state_in_precipitating_fraction_of_gridcell + - microphysics_snow_number_concentration_of_new_state + - microphysics_snow_number_concentration_of_new_state_in_precipitating_fraction_of_gridcell + - microphysics_snow_scaled_diameter + - microphysics_snow_sedimentation_flux + - microphysics_snow_surface_area_density + - microphysics_tendency_of_cloud_ice_mixing_ratio_wrt_moist_air_and_condensed_water + - microphysics_tendency_of_cloud_liquid_water_mixing_ratio_wrt_moist_air_and_condensed_water + - microphysics_tendency_of_dry_air_enthalpy_at_constant_pressure + - microphysics_tendency_of_graupel_mixing_ratio_wrt_moist_air_and_condensed_water + - microphysics_tendency_of_mass_number_concentration_of_cloud_ice_wrt_moist_air_and_condensed_water + - microphysics_tendency_of_mass_number_concentration_of_cloud_liquid_water_wrt_moist_air_and_condensed_water + - microphysics_tendency_of_mass_number_concentration_of_graupel_wrt_moist_air_and_condensed_water + - microphysics_tendency_of_mass_number_concentration_of_rain_wrt_moist_air_and_condensed_water + - microphysics_tendency_of_mass_number_concentration_of_snow_wrt_moist_air_and_condensed_water + - microphysics_tendency_of_rain_mixing_ratio_wrt_moist_air_and_condensed_water + - microphysics_tendency_of_snow_mixing_ratio_wrt_moist_air_and_condensed_water + - microphysics_tendency_of_water_vapor_mixing_ratio_wrt_moist_air_and_condensed_water + - microphysics_vertical_interface_dimension + - microphysics_vertical_layer_dimension + - precipitation_evaporation_area + - precipitation_evaporation_rate_wrt_moist_air_and_condensed_water + - precipitation_production_rate_wrt_moist_air_and_condensed_water + - rain_evaporation_rate_wrt_moist_air_and_condensed_water + - rain_mixing_ratio_wrt_moist_air_and_condensed_water_of_new_state + - rain_mixing_ratio_wrt_moist_air_and_condensed_water_of_new_state_in_precipitating_fraction_of_gridcell + - rain_number_concentration_of_new_state + - rain_number_concentration_of_new_state_in_precipitating_fraction_of_gridcell + - rain_sedimentation_flux + - snow_mixing_ratio_wrt_moist_air_and_condensed_water_of_new_state + - snow_mixing_ratio_wrt_moist_air_and_condensed_water_of_new_state_in_precipitating_fraction_of_gridcell + - snow_number_concentration_of_new_state + - snow_number_concentration_of_new_state_in_precipitating_fraction_of_gridcell + - snow_scaled_diameter + - snow_sedimentation_flux + - snow_surface_area_density + - tendency_of_cloud_ice_mixing_ratio_wrt_moist_air_and_condensed_water + - tendency_of_cloud_liquid_water_mixing_ratio_wrt_moist_air_and_condensed_water + - tendency_of_graupel_mixing_ratio_wrt_moist_air_and_condensed_water + - tendency_of_mass_number_concentration_of_cloud_ice_wrt_moist_air_and_condensed_water + - tendency_of_mass_number_concentration_of_cloud_liquid_water_wrt_moist_air_and_condensed_water + - tendency_of_mass_number_concentration_of_graupel_wrt_moist_air_and_condensed_water + - tendency_of_mass_number_concentration_of_rain_wrt_moist_air_and_condensed_water + - tendency_of_mass_number_concentration_of_snow_wrt_moist_air_and_condensed_water + - tendency_of_rain_mixing_ratio_wrt_moist_air_and_condensed_water + - tendency_of_snow_mixing_ratio_wrt_moist_air_and_condensed_water + - tendency_of_water_vapor_mixing_ratio_wrt_moist_air_and_condensed_water -------------------------- -/glade/u/home/cacraig/cam_sima_caminout/src/physics/ncar_ccpp/schemes/utilities/to_be_ccppized_temporary.meta +/home/cacraig/cam_pumas_round2/src/atmos_phys/schemes/pumas/micro_pumas_ccpp_dimensions_pre.meta + - accretion_enhancement_factor - ccpp_error_code - ccpp_error_message + - dust_number_concentration_by_size_bin + - dust_radii_by_size_bin + - effective_radius_of_stratiform_cloud_ice_particle_from_external_microphysics + - graupel_mixing_ratio_wrt_moist_air_and_condensed_water + - mass_number_concentration_of_cloud_ice_wrt_moist_air_and_condensed_water + - mass_number_concentration_of_cloud_liquid_water_wrt_moist_air_and_condensed_water + - mass_number_concentration_of_graupel_wrt_moist_air_and_condensed_water + - mass_number_concentration_of_rain_wrt_moist_air_and_condensed_water + - mass_number_concentration_of_snow_wrt_moist_air_and_condensed_water + - microphysics_accretion_enhancement_factor + - microphysics_air_pressure + - microphysics_air_pressure_at_interfaces + - microphysics_air_pressure_thickness + - microphysics_air_temperature + - microphysics_cloud_ice_mixing_ratio_wrt_moist_air_and_condensed_water + - microphysics_cloud_liquid_water_mixing_ratio_wrt_moist_air_and_condensed_water + - microphysics_dust_number_concentration_by_size_bin + - microphysics_dust_radii_by_size_bin + - microphysics_effective_radius_of_stratiform_cloud_ice_particle_from_external_microphysics + - microphysics_graupel_mixing_ratio_wrt_moist_air_and_condensed_water + - microphysics_horizontal_loop_extent + - microphysics_mass_number_concentration_of_cloud_ice_wrt_moist_air_and_condensed_water + - microphysics_mass_number_concentration_of_cloud_liquid_water_wrt_moist_air_and_condensed_water + - microphysics_mass_number_concentration_of_graupel_wrt_moist_air_and_condensed_water + - microphysics_mass_number_concentration_of_rain_wrt_moist_air_and_condensed_water + - microphysics_mass_number_concentration_of_snow_wrt_moist_air_and_condensed_water + - microphysics_rain_mixing_ratio_wrt_moist_air_and_condensed_water + - microphysics_relative_variance_of_cloud_water + - microphysics_snow_mixing_ratio_wrt_moist_air_and_condensed_water + - microphysics_stratiform_cloud_area_fraction + - microphysics_stratiform_cloud_ice_area_fraction + - microphysics_stratiform_cloud_liquid_area_fraction + - microphysics_subgrid_cloud_water_saturation_scaling_factor + - microphysics_tendency_of_activated_cloud_condensation_nuclei_mass_number_concentration + - microphysics_tendency_of_activated_ice_nuclei_mass_number_concentration + - microphysics_tendency_of_cloud_ice_number_concentration_due_to_deposition_nucleation + - microphysics_tendency_of_cloud_liquid_droplet_number_concentration_due_to_contact_freezing + - microphysics_tendency_of_cloud_liquid_droplet_number_concentration_due_to_immersion_freezing + - microphysics_tendency_of_mass_number_concentration_of_snow_wrt_moist_air_and_condensed_water_from_external_microphysics + - microphysics_tendency_of_snow_mixing_ratio_wrt_moist_air_and_condensed_water_from_external_microphysics + - microphysics_vertical_interface_dimension + - microphysics_vertical_layer_dimension + - microphysics_water_vapor_mixing_ratio_wrt_moist_air_and_condensed_water + - relative_variance_of_cloud_water + - snow_mixing_ratio_wrt_moist_air_and_condensed_water + - stratiform_cloud_area_fraction + - stratiform_cloud_ice_area_fraction + - stratiform_cloud_liquid_area_fraction + - subgrid_cloud_water_saturation_scaling_factor + - tendency_of_activated_cloud_condensation_nuclei_mass_number_concentration + - tendency_of_activated_ice_nuclei_mass_number_concentration + - tendency_of_cloud_ice_number_concentration_due_to_deposition_nucleation + - tendency_of_cloud_liquid_droplet_number_concentration_due_to_contact_freezing + - tendency_of_cloud_liquid_droplet_number_concentration_due_to_immersion_freezing + - tendency_of_mass_number_concentration_of_snow_wrt_moist_air_and_condensed_water_from_external_microphysics + - tendency_of_snow_mixing_ratio_wrt_moist_air_and_condensed_water_from_external_microphysics -------------------------- -/glade/u/home/cacraig/cam_sima_caminout/src/physics/ncar_ccpp/schemes/utilities/qneg.meta +/home/cacraig/cam_pumas_round2/src/atmos_phys/schemes/hack_shallow/set_general_conv_fluxes_to_shallow.meta - - ccpp_constituent_minimum_values - - ccpp_constituent_properties - - ccpp_constituents - - ccpp_error_code - - ccpp_error_message - - number_of_ccpp_constituents - - scheme_name + - frozen_precipitation_flux_at_interface_due_to_convection + - frozen_precipitation_flux_at_interface_due_to_shallow_convection + - lwe_frozen_precipitation_rate_at_surface_due_to_convection + - lwe_frozen_precipitation_rate_at_surface_due_to_shallow_convection + - lwe_precipitation_rate_at_surface_due_to_convection + - lwe_precipitation_rate_at_surface_due_to_shallow_convection + - net_lwe_ice_fluxes_through_top_and_bottom_of_atmosphere_column + - precipitation_flux_at_interface_due_to_convection + - precipitation_flux_at_interface_due_to_shallow_convection + - tendency_of_dry_air_enthalpy_at_constant_pressure_due_to_evaporation_and_melting_of_frozen_precipitation_due_to_convection + - tendency_of_dry_air_enthalpy_at_constant_pressure_due_to_evaporation_and_melting_of_frozen_precipitation_due_to_shallow_convection + - tendency_of_dry_air_enthalpy_at_constant_pressure_due_to_frozen_precipitation_production_due_to_convection + - tendency_of_dry_air_enthalpy_at_constant_pressure_due_to_frozen_precipitation_production_due_to_shallow_convection + - tendency_of_frozen_precipitation_wrt_moist_air_and_condensed_water_due_to_convection + - tendency_of_frozen_precipitation_wrt_moist_air_and_condensed_water_due_to_shallow_convection + - tendency_of_precipitation_wrt_moist_air_and_condensed_water_due_to_convection + - tendency_of_precipitation_wrt_moist_air_and_condensed_water_due_to_shallow_convection -------------------------- -/glade/u/home/cacraig/cam_sima_caminout/src/physics/ncar_ccpp/schemes/utilities/geopotential_temp.meta +/home/cacraig/cam_pumas_round2/src/atmos_phys/schemes/hack_shallow/set_shallow_conv_fluxes_to_general.meta - - air_pressure_at_interface - - ccpp_constituent_properties - - ccpp_constituents - - ccpp_error_code - - ccpp_error_message - - geopotential_height_wrt_surface_at_interface - - ln_air_pressure_at_interface - - number_of_ccpp_constituents + - lwe_precipitation_rate_at_surface_due_to_convection + - lwe_precipitation_rate_at_surface_due_to_shallow_convection + - tendency_of_precipitation_wrt_moist_air_and_condensed_water_due_to_convection_excluding_subcloud_evaporation + - tendency_of_precipitation_wrt_moist_air_and_condensed_water_due_to_shallow_convection_excluding_subcloud_evaporation -------------------------- -/glade/u/home/cacraig/cam_sima_caminout/src/physics/ncar_ccpp/schemes/utilities/state_converters.meta +/home/cacraig/cam_pumas_round2/src/atmos_phys/schemes/hack_shallow/hack_convect_shallow.meta + - atmosphere_convective_mass_flux_due_to_shallow_convection + - ccpp_constituent_properties + - ccpp_constituent_tendencies + - ccpp_constituents - ccpp_error_code - ccpp_error_message + - characteristic_adjustment_time_for_shallow_convection + - convective_water_vapor_wrt_moist_air_and_condensed_water_perturbation_due_to_pbl_eddies + - detrainment_of_cloud_liquid_water_wrt_moist_air_and_condensed_water_due_to_shallow_convection + - flag_for_cloud_area_fraction_to_use_shallow_convection_calculated_cloud_area_fraction + - in_cloud_water_vapor_mixing_ratio_wrt_moist_air_and_condensed_water_due_to_shallow_convection + - liquid_water_static_energy_flux_due_to_shallow_convection + - lwe_precipitation_rate_at_surface_due_to_shallow_convection + - net_liquid_and_lwe_ice_fluxes_through_top_and_bottom_of_atmosphere_column + - number_of_ccpp_constituents + - rain_water_autoconversion_coefficient_for_shallow_convection + - reference_pressure_at_interface + - scheme_name + - shallow_convective_cloud_area_fraction_from_shallow_convection + - tendency_of_precipitation_wrt_moist_air_and_condensed_water_due_to_shallow_convection_excluding_subcloud_evaporation + - total_water_flux_due_to_shallow_convection + - vertical_index_at_cloud_base_for_shallow_convection + - vertical_index_at_cloud_top_for_shallow_convection + - vertical_layer_index_of_cloud_fraction_top + - vertically_integrated_cloud_liquid_water_tendency_due_to_shallow_convection_to_be_applied_later_in_time_loop -------------------------- -/glade/u/home/cacraig/cam_sima_caminout/src/physics/ncar_ccpp/schemes/tropopause_find/tropopause_find.meta +/home/cacraig/cam_pumas_round2/src/atmos_phys/schemes/hack_shallow/convect_shallow_sum_to_deep.meta - - air_pressure_at_interface + - atmosphere_convective_mass_flux_due_to_all_convection + - atmosphere_convective_mass_flux_due_to_deep_convection + - atmosphere_convective_mass_flux_due_to_shallow_convection - ccpp_error_code - ccpp_error_message - - fill_value_for_diagnostic_output - - fractional_calendar_days_on_end_of_current_timestep - - geopotential_height_wrt_surface_at_interface - - pi_constant - - ratio_of_dry_air_gas_constant_to_specific_heat_of_dry_air_at_constant_pressure - - scheme_name - - tropopause_air_pressure - - tropopause_air_pressure_from_chemical_method - - tropopause_air_pressure_from_climatological_method - - tropopause_air_pressure_from_cold_point_method - - tropopause_air_pressure_from_hybrid_stobie_linoz_with_climatological_backup_method - - tropopause_air_pressure_from_lapse_rate_method - - tropopause_air_pressure_from_tropopause_climatology_dataset - - tropopause_air_temperature - - tropopause_air_temperature_from_chemical_method - - tropopause_air_temperature_from_climatological_method - - tropopause_air_temperature_from_cold_point_method - - tropopause_air_temperature_from_hybrid_stobie_linoz_with_climatological_backup_method - - tropopause_air_temperature_from_lapse_rate_method - - tropopause_calendar_days_from_tropopause_climatology - - tropopause_geopotential_height_wrt_surface - - tropopause_geopotential_height_wrt_surface_from_chemical_method - - tropopause_geopotential_height_wrt_surface_from_climatological_method - - tropopause_geopotential_height_wrt_surface_from_cold_point_method - - tropopause_geopotential_height_wrt_surface_from_hybrid_stobie_linoz_with_climatological_backup_method - - tropopause_geopotential_height_wrt_surface_from_lapse_rate_method - - tropopause_vertical_layer_index - - tropopause_vertical_layer_index_from_chemical_method - - tropopause_vertical_layer_index_from_climatological_method - - tropopause_vertical_layer_index_from_cold_point_method - - tropopause_vertical_layer_index_from_hybrid_stobie_linoz_with_climatological_backup_method - - tropopause_vertical_layer_index_from_hybrid_stobie_linoz_with_climatological_backup_method_for_chemistry - - tropopause_vertical_layer_index_from_lapse_rate_method - - vertical_layer_index_lower_bound_from_hybrid_stobie_linoz_with_climatological_backup_method_for_linearized_ozone_chemistry - - vertical_layer_index_lower_bound_from_hybrid_stobie_linoz_with_climatological_backup_method_for_stratospheric_chemistry + - detrainment_of_cloud_liquid_water_wrt_moist_air_and_condensed_water_due_to_all_convection + - detrainment_of_cloud_liquid_water_wrt_moist_air_and_condensed_water_due_to_deep_convection + - detrainment_of_cloud_liquid_water_wrt_moist_air_and_condensed_water_due_to_shallow_convection + - pressure_at_cloud_base_for_all_convection + - pressure_at_cloud_top_for_all_convection + - tendency_of_precipitation_wrt_moist_air_and_condensed_water_due_to_convection_excluding_subcloud_evaporation + - tendency_of_precipitation_wrt_moist_air_and_condensed_water_due_to_deep_convection_excluding_subcloud_evaporation + - tendency_of_precipitation_wrt_moist_air_and_condensed_water_due_to_shallow_convection_excluding_subcloud_evaporation + - vertical_index_at_cloud_base_for_all_convection + - vertical_index_at_cloud_base_for_shallow_convection + - vertical_index_at_cloud_top_for_all_convection + - vertical_index_at_cloud_top_for_shallow_convection + - vertical_index_at_top_of_deep_convection_for_convective_columns + - vertical_index_of_deep_convection_launch_level_for_convective_columns + - vertically_integrated_cloud_liquid_water_tendency_due_to_all_convection_to_be_applied_later_in_time_loop + - vertically_integrated_cloud_liquid_water_tendency_due_to_shallow_convection_to_be_applied_later_in_time_loop ####################### From fcc84530bb293614e1cf5188c44acc7e434b725a Mon Sep 17 00:00:00 2001 From: Jesse Nusbaumer Date: Tue, 23 Sep 2025 10:43:47 -0600 Subject: [PATCH 14/26] Remove unused 'src/physics/pumas' directory. --- src/physics/pumas | 1 - 1 file changed, 1 deletion(-) delete mode 160000 src/physics/pumas diff --git a/src/physics/pumas b/src/physics/pumas deleted file mode 160000 index 5f6e420d..00000000 --- a/src/physics/pumas +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 5f6e420d9530aee8595d33c95dfbfec53867ced5 From 88c2e98658601f1c6af37f04a7e60cae47332ac6 Mon Sep 17 00:00:00 2001 From: Jesse Nusbaumer Date: Mon, 29 Sep 2025 14:51:57 -0600 Subject: [PATCH 15/26] Fix unit metadata bugs in PUMAS and PUMAS namelist definition file. --- .gitmodules | 4 ++-- schemes/pumas/pumas_pre_main_namelist.xml | 14 +++++++------- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/.gitmodules b/.gitmodules index 6606b271..f8ca584b 100644 --- a/.gitmodules +++ b/.gitmodules @@ -6,9 +6,9 @@ fxDONOTUSEurl = https://github.com/NCAR/MMM-physics.git [submodule "pumas"] path = schemes/pumas/pumas - url = https://github.com/ESCOMP/PUMAS + url = https://github.com/nusbaume/PUMAS fxrequired = AlwaysRequired - fxtag = pumas_cam-release_v1.39 + fxtag = 81d173b21981913ab94b1eb1d403f7c98a8d23f3 fxDONOTUSEurl = https://github.com/ESCOMP/PUMAS [submodule "rte-rrtmgp"] path = schemes/rrtmgp/ext diff --git a/schemes/pumas/pumas_pre_main_namelist.xml b/schemes/pumas/pumas_pre_main_namelist.xml index aab2634d..b6e04eb5 100644 --- a/schemes/pumas/pumas_pre_main_namelist.xml +++ b/schemes/pumas/pumas_pre_main_namelist.xml @@ -8,7 +8,7 @@ microphys micro_mg_nl relative_humidity_threshold_for_ice_nucleation - frac + fraction real kind_phys relative humidity threshold parameter for nucleating ice for MG microphysics @@ -374,7 +374,7 @@ microphys micro_mg_nl bergeron_findeisen_process_efficiency_factor - frac + 1 real kind_phys bergeron efficiency factor for MG microphysics @@ -388,7 +388,7 @@ microphys micro_mg_nl accretion_enhancement_factor - none + 1 real kind_phys KK2000 accretion enhancement factor for MG microphysics @@ -402,7 +402,7 @@ microphys micro_mg_nl autconversion_enhancement_factor - none + 1 real kind_phys KK2000 autonconverion enhancement factor for MG microphysics @@ -416,7 +416,7 @@ microphys micro_mg_nl autconversion_nd_exponent - none + 1 real kind_phys KK2000 autonconverion nd exponent in MG microphysics @@ -430,7 +430,7 @@ microphys micro_mg_nl autconversion_lwp_exponent - none + 1 real kind_phys KK2000 autonconverion lwp (qc) exponent in MG microphysics @@ -594,4 +594,4 @@ - \ No newline at end of file + From 80ae20a51ccca0036996eb5df68b6fe3f07b0580 Mon Sep 17 00:00:00 2001 From: Jesse Nusbaumer Date: Tue, 30 Sep 2025 12:02:05 -0600 Subject: [PATCH 16/26] Update logical variable standard names, and create new 'ccpp_dimensions_pre' init phase. --- .gitmodules | 2 +- .../pumas/micro_pumas_ccpp_dimensions_pre.F90 | 47 +++++++++-- .../micro_pumas_ccpp_dimensions_pre.meta | 78 +++++++++++++++++- schemes/pumas/pumas_pre_main_namelist.xml | 82 +++++++++---------- test/test_suites/suite_pumas.xml | 6 +- 5 files changed, 163 insertions(+), 52 deletions(-) diff --git a/.gitmodules b/.gitmodules index f8ca584b..c48593fa 100644 --- a/.gitmodules +++ b/.gitmodules @@ -8,7 +8,7 @@ path = schemes/pumas/pumas url = https://github.com/nusbaume/PUMAS fxrequired = AlwaysRequired - fxtag = 81d173b21981913ab94b1eb1d403f7c98a8d23f3 + fxtag = ab966b9d60b9d9a14e0cf4259472f5d1f967bd03 fxDONOTUSEurl = https://github.com/ESCOMP/PUMAS [submodule "rte-rrtmgp"] path = schemes/rrtmgp/ext diff --git a/schemes/pumas/micro_pumas_ccpp_dimensions_pre.F90 b/schemes/pumas/micro_pumas_ccpp_dimensions_pre.F90 index dd19b46b..e67b70e2 100644 --- a/schemes/pumas/micro_pumas_ccpp_dimensions_pre.F90 +++ b/schemes/pumas/micro_pumas_ccpp_dimensions_pre.F90 @@ -4,6 +4,39 @@ module micro_pumas_ccpp_dimensions_pre contains + !> \section arg_table_micro_pumas_ccpp_dimensions_pre_init Argument Table + !! \htmlinclude micro_pumas_ccpp_dimensions_pre_init.html + subroutine micro_pumas_ccpp_dimensions_pre_init( ncol, nlev, nlevp1, & + trop_cloud_top_lev, micro_ncol, micro_nlev, & + micro_nlevp1, errmsg, errcode) + + !Host model dimensions/parameters: + integer, intent(in) :: ncol + integer, intent(in) :: nlev + integer, intent(in) :: nlevp1 + integer, intent(in) :: trop_cloud_top_lev !Index of the top model level for which + !cloud physics is applied (1 to nlev) + + !PUMAS dimensions/parameters: + integer, intent(out) :: micro_ncol !Number of horizontal microphysics columns (count) + integer, intent(out) :: micro_nlev !Number of microphysics vertical layers (count) + integer, intent(out) :: micro_nlevp1 !Number of microphysics vertical interfaces (count) + + !CCPP error handling: + character(len=512), intent(out) :: errmsg + integer, intent(out) :: errcode + + !Initialize error message and error code: + errmsg = '' + errcode = 0 + + !Set PUMAS (cloud microphysics) dimensions: + micro_ncol = ncol + micro_nlev = nlev-trop_cloud_top_lev+1 + micro_nlevp1 = micro_nlev + 1 + + end subroutine micro_pumas_ccpp_dimensions_pre_init + !> \section arg_table_micro_pumas_ccpp_dimensions_pre_run Argument Table !! \htmlinclude micro_pumas_ccpp_dimensions_pre_run.html subroutine micro_pumas_ccpp_dimensions_pre_run(ncol, nlev, nlevp1, & @@ -26,7 +59,7 @@ subroutine micro_pumas_ccpp_dimensions_pre_run(ncol, nlev, nlevp1, pint_in, micro_pint, & strat_cldfrc_in, micro_strat_cldfrc, & strat_liq_cldfrc_in, micro_strat_liq_cldfrc, & - strat_ice_cldfrc_in, micro_strat_ice_cldfrc, & + strat_ice_cldfrc_in, micro_strat_ice_cldfrc, & qsatfac_in, micro_qsatfac, & naai_in, micro_naai, & npccn_in, micro_npccn, & @@ -47,9 +80,11 @@ subroutine micro_pumas_ccpp_dimensions_pre_run(ncol, nlev, nlevp1, integer, intent(in) :: ncol integer, intent(in) :: nlev integer, intent(in) :: nlevp1 - integer, intent(in) :: micro_ncol !Number of horizontal microphysics columns (count) - integer, intent(in) :: micro_nlev !Number of microphysics vertical layers (count) - integer, intent(in) :: micro_nlevp1 !Number of microphysics vertical interfaces (count) + + !PUMAS dimensions/parameters: + integer, intent(in) :: micro_ncol !Number of horizontal microphysics columns (count) + integer, intent(in) :: micro_nlev !Number of microphysics vertical layers (count) + integer, intent(in) :: micro_nlevp1 !Number of microphysics vertical interfaces (count) ! Air temperature (K) real(kind_phys), intent(in) :: airT_in(:, :) @@ -152,8 +187,8 @@ subroutine micro_pumas_ccpp_dimensions_pre_run(ncol, nlev, nlevp1, errmsg = '' errcode = 0 -!+ IH -! For now we just use nocls = micro_ncol, but we need to constrain the vertical extent for the microphysical fields. +!+ IH +! For now we just use ncols = micro_ncol, but we need to constrain the vertical extent for the microphysical fields. ! Therefore micro_xxx(:ncol,:) = xxx(:,::) !- IH micro_airT(:ncol,:) = airT_in(:,::) diff --git a/schemes/pumas/micro_pumas_ccpp_dimensions_pre.meta b/schemes/pumas/micro_pumas_ccpp_dimensions_pre.meta index 486a2846..04fac295 100644 --- a/schemes/pumas/micro_pumas_ccpp_dimensions_pre.meta +++ b/schemes/pumas/micro_pumas_ccpp_dimensions_pre.meta @@ -3,14 +3,87 @@ type = scheme ######################################################################## + +[ccpp-arg-table] + name = micro_pumas_ccpp_dimensions_pre_init + type = scheme +[ncol] + standard_name = horizontal_dimension + long_name = horizontal dimension + units = count + dimensions = () + type = integer + intent = in +[nlev] + standard_name = vertical_layer_dimension + long_name = number of vertical levels + units = count + dimensions = () + type = integer + intent = in +[nlevp1] + standard_name = vertical_interface_dimension + long_name = number of vertical levels plus one + units = count + dimensions = () + type = integer + intent = in +[trop_cloud_top_lev] + standard_name = vertical_layer_index_of_troposphere_cloud_physics_top + units = index + type = integer + dimensions = () + intent = in +[micro_ncol] + #Equivalent to "horizontal_loop_extent" unless subcolumns is enabled + standard_name = microphysics_horizontal_loop_extent + long_name = number of horizontal columns used by microphysics + units = count + dimensions = () + type = integer + intent = out +[micro_nlev] + #Vertical levels from surface to highest level with tropospheric clouds + standard_name = microphysics_vertical_layer_dimension + long_name = vertical layer dimension used by microphysics + units = count + dimensions = () + type = integer + intent = out +[micro_nlevp1] + #Vertical interfaces from surface to highest level with tropospheric clouds + standard_name = microphysics_vertical_interface_dimension + long_name = vertical interface dimension used by microphysics + units = count + dimensions = () + type = integer + intent = out +[errmsg] + standard_name = ccpp_error_message + long_name = error message for error handling in CCPP + units = none + dimensions = () + type = character + kind = len=512 + intent = out +[errcode] + standard_name = ccpp_error_code + long_name = error code for error handling in CCPP + units = 1 + dimensions = () + type = integer + intent = out + +######################################################################## + [ccpp-arg-table] name = micro_pumas_ccpp_dimensions_pre_run type = scheme -[ncol] +[ncol] standard_name = horizontal_dimension long_name = horizontal dimension units = count - dimensions = () + dimensions = () type = integer intent = in [nlev] @@ -579,4 +652,3 @@ ##################### #End of metadata file ##################### - diff --git a/schemes/pumas/pumas_pre_main_namelist.xml b/schemes/pumas/pumas_pre_main_namelist.xml index b6e04eb5..d356877b 100644 --- a/schemes/pumas/pumas_pre_main_namelist.xml +++ b/schemes/pumas/pumas_pre_main_namelist.xml @@ -11,7 +11,7 @@ fraction real kind_phys - relative humidity threshold parameter for nucleating ice for MG microphysics + relative humidity threshold parameter for nucleating ice for PUMAS microphysics 0 @@ -21,10 +21,10 @@ microphys micro_mg_nl - flag_for_hail_instead_of_graupel + do_hail_instead_of_graupel flag logical - flag for hail for MG microphysics (graupel possible if false) + flag for hail for PUMAS microphysics (graupel possible if false) .false. @@ -34,10 +34,10 @@ microphys micro_mg_nl - flag_for_graupel_instead_of_hail + do_graupel_instead_of_hail flag logical - flag for graupel for MG microphysics (hail possible if false) + flag for graupel for PUMAS microphysics (hail possible if false) .false. @@ -47,10 +47,10 @@ microphys micro_mg_nl - flag_for_uniform_subcolumns + do_uniform_subcolumns flag logical - flag for uniform subcolumns for MG microphysics + flag for uniform subcolumns for PUMAS microphysics .false. @@ -60,10 +60,10 @@ microphys micro_mg_nl - flag_for_cloud_ice_processes + do_cloud_ice_processes flag logical - flag for cloud ice processes for MG microphysics + do cloud ice processes for PUMAS microphysics (skip all cloud ice processes if false) .false. @@ -73,7 +73,7 @@ microphys micro_mg_nl - flag_for_heterogeneous_ice_nucleation + do_heterogeneous_ice_nucleation flag logical flag for heterogeneous freezing for MG microphysics @@ -86,10 +86,10 @@ microphys micro_mg_nl - flag_for_allowance_of_supersaturation_after_sedimentation + remove_supersaturation_after_sedimentation flag logical - allow supersaturation after sedimentation for MG microphysics + Remove supersaturation after sedimentation in PUMAS? .false. @@ -99,10 +99,10 @@ microphys micro_mg_nl - flag_for_no_evaporation_of_precipitation + turn_off_evaporation_of_precipitation flag logical - true for sedimenting condensate does not evaporate for MG microphysics + true means sedimenting condensate does not evaporate for PUMAS microphysics .false. @@ -112,10 +112,10 @@ microphys micro_mg_nl - flag_to_remove_threshold_for_ice_nucleation + remove_relative_humidity_threshold_for_ice_nucleation flag logical - If .true., remove RH threshold from ice nucelation calculation for MG microphysics + If .true., remove RH threshold from ice nucelation calculation for PUMAS microphysics .false. @@ -125,10 +125,10 @@ microphys micro_mg_nl - flag_to_use_meyers_ice_nucleation + use_meyers_ice_nucleation flag logical - use temperature dependent ice nucleation from Meyers 1992 for MG microphysics + use temperature dependent ice nucleation from Meyers 1992 for PUMAS microphysics .false. @@ -138,10 +138,10 @@ microphys micro_mg_nl - flag_to_scale_evaporation_like_ifs + scale_evaporation_like_ecmwf_integrated_forecast_system flag logical - if True Apply 0.3 scaling factor to evaporation of precipitation for MG microphysics + if True Apply 0.3 scaling factor to evaporation of precipitation for PUMAS microphysics .false. @@ -151,10 +151,10 @@ microphys micro_mg_nl - flag_use_ifs_evaporation_threshold + use_ecmwf_integrated_forecasting_system_relative_humidity_evaporation_threshold flag logical - Do not evaporate precipitation until RH below 90% as done in the for MG microphysics + Do not evaporate precipitation until RH below 90% in PUMAS microphysics .false. @@ -164,10 +164,10 @@ microphys micro_mg_nl - flag_to_freeze_rain_at_0C + freeze_rain_at_0C flag logical - Freeze rain at 0C for MG microphysics + Freeze rain at 0C for PUMAS microphysics .false. @@ -177,10 +177,10 @@ microphys micro_mg_nl - flag_for_constant_sedimentation_fall_speed + do_constant_sedimentation_fall_speed flag logical - Use constant sedimentation of all species for MG microphysics + Use constant sedimentation fall speed for all species in PUMAS microphysics .false. @@ -190,10 +190,10 @@ microphys micro_mg_nl - flag_for_fall_speed_correction + do_precipitation_fall_speed_correction flag logical - ensure non-zero precipitation fallspeed for MG microphysics + ensure non-zero precipitation fallspeed for PUMAS microphysics .false. @@ -203,10 +203,10 @@ microphys micro_mg_nl - flag_for_accretion_sees_autoconverted_condensate + accretion_sees_autoconverted_condensate flag logical - KK200 accretion sees newely formed rain for MG microphysics + KK200 accretion sees newely formed rain for PUMAS microphysics .false. @@ -219,7 +219,7 @@ do_implicit_fall_speed_calc flag logical - use implicit calculation for fall speed for MG microphysics + use implicit calculation for fall speed for PUMAS microphysics .false. @@ -229,10 +229,10 @@ microphys micro_mg_nl - flag_for_prescribed_cloud_droplet_number_concentration + use_prescribed_cloud_droplet_number_concentration flag logical - flag for constant droplet concentration for MG microphysics + flag for constant droplet concentration for PUMAS microphysics .false. @@ -242,10 +242,10 @@ microphys micro_mg_nl - flag_for_prescribed_cloud_ice_number_concentration + use_prescribed_cloud_ice_number_concentration flag logical - flag for constant ice concentration for MG microphysics + flag for constant ice concentration for PUMAS microphysics .false. @@ -255,10 +255,10 @@ microphys micro_mg_nl - flag_for_prescribed_graupel_number_concentration + use_prescribed_graupel_number_concentration flag logical - flag for constant graupel concentration for MG microphysics + flag for constant graupel concentration for PUMAS microphysics .false. @@ -268,10 +268,10 @@ microphys micro_mg_nl - flag_for_prescribed_rain_number_concentration + use_prescribed_rain_number_concentration flag logical - flag for constant rain concentration for MG microphysics + flag for constant rain concentration for PUMAS microphysics .false. @@ -281,10 +281,10 @@ microphys micro_mg_nl - flag_for_prescribed_snow_number_concentration + use_prescribed_snow_number_concentration flag logical - flag for constant snow concentration for MG microphysics + flag for constant snow concentration for PUMAS microphysics .false. diff --git a/test/test_suites/suite_pumas.xml b/test/test_suites/suite_pumas.xml index bad0ee6a..5e28cd34 100644 --- a/test/test_suites/suite_pumas.xml +++ b/test/test_suites/suite_pumas.xml @@ -2,9 +2,13 @@ - + pumas_pre_main + + micro_pumas_ccpp_dimensions_pre micro_pumas_ccpp + + micro_pumas_ccpp_dimensions_post From 1bc8363544711a1bef534844b97d158bc70488a0 Mon Sep 17 00:00:00 2001 From: Cheryl Craig Date: Tue, 21 Oct 2025 17:28:27 -0600 Subject: [PATCH 17/26] fixes to get further in a CAM-SIMA build --- .../pumas/micro_pumas_ccpp_dimensions_pre.F90 | 11 +-- .../micro_pumas_ccpp_dimensions_pre.meta | 41 ++++++----- schemes/pumas/pumas_pre_main.F90 | 10 ++- schemes/pumas/pumas_pre_main.meta | 8 +++ schemes/pumas/pumas_pre_main_namelist.xml | 72 +++++++++---------- 5 files changed, 83 insertions(+), 59 deletions(-) diff --git a/schemes/pumas/micro_pumas_ccpp_dimensions_pre.F90 b/schemes/pumas/micro_pumas_ccpp_dimensions_pre.F90 index e67b70e2..60553751 100644 --- a/schemes/pumas/micro_pumas_ccpp_dimensions_pre.F90 +++ b/schemes/pumas/micro_pumas_ccpp_dimensions_pre.F90 @@ -40,7 +40,7 @@ end subroutine micro_pumas_ccpp_dimensions_pre_init !> \section arg_table_micro_pumas_ccpp_dimensions_pre_run Argument Table !! \htmlinclude micro_pumas_ccpp_dimensions_pre_run.html subroutine micro_pumas_ccpp_dimensions_pre_run(ncol, nlev, nlevp1, & - micro_ncol, micro_nlev, micro_nlevp1, & + micro_ncol, micro_nlev, micro_nlevp1, micro_dust_nbins,& airT_in, micro_airT, airq_in, micro_airq, & cldliq_in, micro_cldliq, & cldice_in, micro_cldice, & @@ -53,7 +53,7 @@ subroutine micro_pumas_ccpp_dimensions_pre_run(ncol, nlev, nlevp1, graupice_in, micro_graupice, & numgraup_in, micro_numgraup, & relvar_in, micro_relvar, & - accre_enhan_in, micro_accre_enhan, & + spat_vary_accre_enhan_in, micro_spat_vary_accre_enhan, & pmid_in, micro_pmid, & pdel_in, micro_pdel, & pint_in, micro_pint, & @@ -85,6 +85,7 @@ subroutine micro_pumas_ccpp_dimensions_pre_run(ncol, nlev, nlevp1, integer, intent(in) :: micro_ncol !Number of horizontal microphysics columns (count) integer, intent(in) :: micro_nlev !Number of microphysics vertical layers (count) integer, intent(in) :: micro_nlevp1 !Number of microphysics vertical interfaces (count) + integer, intent(in) :: micro_dust_nbins !Number of dust bins ! Air temperature (K) real(kind_phys), intent(in) :: airT_in(:, :) @@ -126,8 +127,8 @@ subroutine micro_pumas_ccpp_dimensions_pre_run(ncol, nlev, nlevp1, real(kind_phys), intent(in) :: relvar_in(:, :) real(kind_phys), intent(out) :: micro_relvar(:, :) ! Accretion enhancement factor (1) - real(kind_phys), intent(in) :: accre_enhan_in(:, :) - real(kind_phys), intent(out) :: micro_accre_enhan(:, :) + real(kind_phys), intent(in) :: spat_vary_accre_enhan_in(:, :) + real(kind_phys), intent(out) :: micro_spat_vary_accre_enhan(:, :) ! Air pressure (Pa) real(kind_phys), intent(in) :: pmid_in(:, :) real(kind_phys), intent(out) :: micro_pmid(:, :) @@ -204,7 +205,7 @@ subroutine micro_pumas_ccpp_dimensions_pre_run(ncol, nlev, nlevp1, micro_graupice(:ncol,:) = graupice_in(:,::) micro_numgraup(:ncol,:) = numgraup_in(:,::) micro_relvar(:ncol,:) = relvar_in(:,::) - micro_accre_enhan(:ncol,:) = accre_enhan_in(:,::) + micro_spat_vary_accre_enhan(:ncol,:) = spat_vary_accre_enhan_in(:,::) micro_pmid(:ncol,:) = pmid_in(:,::) micro_pdel(:ncol,:) = pdel_in(:,::) micro_pint(:ncol,:) = pint_in(:,:micro_nlevp1) diff --git a/schemes/pumas/micro_pumas_ccpp_dimensions_pre.meta b/schemes/pumas/micro_pumas_ccpp_dimensions_pre.meta index 04fac295..305a6d34 100644 --- a/schemes/pumas/micro_pumas_ccpp_dimensions_pre.meta +++ b/schemes/pumas/micro_pumas_ccpp_dimensions_pre.meta @@ -80,8 +80,8 @@ name = micro_pumas_ccpp_dimensions_pre_run type = scheme [ncol] - standard_name = horizontal_dimension - long_name = horizontal dimension + standard_name = horizontal_loop_extent + long_name = horizontal_loop_extent units = count dimensions = () type = integer @@ -124,6 +124,13 @@ dimensions = () type = integer intent = in +[micro_dust_nbins] + standard_name = dust_size_bins_dimension + long_name = number of dust bins + units = count + dimensions = () + type = integer + intent = in [airT_in] standard_name = air_temperature long_name = air temperature of new state @@ -328,7 +335,7 @@ kind = kind_phys intent = out [relvar_in] - standard_name = relative_variance_of_cloud_water + standard_name = relative_variance_of_subgrid_cloud_condensate_distribution long_name = relative variance of cloud water units = 1 dimensions = (horizontal_loop_extent, vertical_layer_dimension) @@ -343,17 +350,17 @@ type = real kind = kind_phys intent = out -[accre_enhan_in] - standard_name = accretion_enhancement_factor - long_name = accretion enhancement factor +[spat_vary_accre_enhan_in] + standard_name = spatial_varying_accretion_enhancement_factor + long_name = spatial varying accretion enhancement factor units = 1 dimensions = (horizontal_loop_extent, vertical_layer_dimension) type = real kind = kind_phys intent = in -[micro_accre_enhan] - standard_name = microphysics_accretion_enhancement_factor - long_name = microphysics accretion enhancement factor +[micro_spat_vary_accre_enhan] + standard_name = microphysics_spatial_varying_accretion_enhancement_factor + long_name = microphysics spatial varying accretion enhancement factor units = 1 dimensions = (microphysics_horizontal_loop_extent, microphysics_vertical_layer_dimension) type = real @@ -392,16 +399,16 @@ kind = kind_phys intent = out [pint_in] - standard_name = air_pressure_at_interfaces - long_name = air pressure at interfaces + standard_name = air_pressure_at_interface + long_name = air pressure at interface units = Pa dimensions = (horizontal_loop_extent, vertical_interface_dimension) type = real kind = kind_phys intent = in [micro_pint] - standard_name = microphysics_air_pressure_at_interfaces - long_name = microphysics air pressure at interfaces + standard_name = microphysics_air_pressure_at_interface + long_name = microphysics air pressure at interface units = Pa dimensions = (microphysics_horizontal_loop_extent, microphysics_vertical_interface_dimension) type = real @@ -456,7 +463,7 @@ kind = kind_phys intent = out [qsatfac_in] - standard_name = subgrid_cloud_water_saturation_scaling_factor + standard_name = subgrid_cloud_water_saturation_scaling_factor_for_microphysics long_name = subgrid cloud water saturation scaling factor units = 1 dimensions = (horizontal_loop_extent, vertical_layer_dimension) @@ -520,7 +527,7 @@ kind = kind_phys intent = out [nacon_in] - standard_name = dust_number_concentration_by_size_bin + standard_name = dust_number_concentration_by_size_bin_for_contact_freezing long_name = dust number concentration by size bin units = m-3 dimensions = (horizontal_loop_extent, vertical_layer_dimension, dust_size_bins_dimension) @@ -573,7 +580,7 @@ [effi_external_in] standard_name = effective_radius_of_stratiform_cloud_ice_particle_from_external_microphysics long_name = effective radius of stratiform cloud ice particle from external microphysics - units = m + units = micron dimensions = (horizontal_loop_extent, vertical_layer_dimension) type = real kind = kind_phys @@ -627,7 +634,7 @@ kind = kind_phys intent = in [micro_frzdep] - standard_name = microphysics_tendency_of_cloud_ice_number_concentration_due_to_deposition_nucleation + standard_name = microphysics_ long_name = microphysics tendency of cloud ice number concentration due to deposition nucleation units = cm-3 dimensions = (microphysics_horizontal_loop_extent, microphysics_vertical_layer_dimension) diff --git a/schemes/pumas/pumas_pre_main.F90 b/schemes/pumas/pumas_pre_main.F90 index 6f63a922..151673e0 100644 --- a/schemes/pumas/pumas_pre_main.F90 +++ b/schemes/pumas/pumas_pre_main.F90 @@ -20,11 +20,19 @@ module pumas_pre_main !> \section arg_table_pumas_pre_main_init Argument Table !! \htmlinclude pumas_pre_main_init.html - subroutine pumas_pre_main_init(errmsg, errcode) + subroutine pumas_pre_main_init(spat_vary_accre_enhan_in, errmsg, errcode) + + real(kind_phys), dimension (:,:) , intent(out) :: spat_vary_accre_enhan_in character(len=512), intent(out) :: errmsg integer, intent(out) :: errcode + errmsg = ' ' + errcode = 0 + + ! Inside CAM, the pbuf accre_enhan variable is hardwired to 1. + spat_vary_accre_enhan_in(:,:) = 1._kind_phys + end subroutine pumas_pre_main_init end module pumas_pre_main diff --git a/schemes/pumas/pumas_pre_main.meta b/schemes/pumas/pumas_pre_main.meta index a3e11139..58be9c2a 100644 --- a/schemes/pumas/pumas_pre_main.meta +++ b/schemes/pumas/pumas_pre_main.meta @@ -5,6 +5,14 @@ [ccpp-arg-table] name = pumas_pre_main_init type = scheme +[spat_vary_accre_enhan_in] + standard_name = spatial_varying_accretion_enhancement_factor + long_name = spatial varying accretion enhancement factor + units = 1 + dimensions = (horizontal_dimension, vertical_layer_dimension) + type = real + kind = kind_phys + intent = out [ errmsg ] standard_name = ccpp_error_message long_name = Error message for error handling in CCPP diff --git a/schemes/pumas/pumas_pre_main_namelist.xml b/schemes/pumas/pumas_pre_main_namelist.xml index d356877b..49f928f1 100644 --- a/schemes/pumas/pumas_pre_main_namelist.xml +++ b/schemes/pumas/pumas_pre_main_namelist.xml @@ -18,7 +18,7 @@ - + microphys micro_mg_nl do_hail_instead_of_graupel @@ -31,7 +31,7 @@ - + microphys micro_mg_nl do_graupel_instead_of_hail @@ -96,7 +96,7 @@ - + microphys micro_mg_nl turn_off_evaporation_of_precipitation @@ -109,7 +109,7 @@ - + microphys micro_mg_nl remove_relative_humidity_threshold_for_ice_nucleation @@ -122,7 +122,7 @@ - + microphys micro_mg_nl use_meyers_ice_nucleation @@ -135,7 +135,7 @@ - + microphys micro_mg_nl scale_evaporation_like_ecmwf_integrated_forecast_system @@ -148,7 +148,7 @@ - + microphys micro_mg_nl use_ecmwf_integrated_forecasting_system_relative_humidity_evaporation_threshold @@ -161,7 +161,7 @@ - + microphys micro_mg_nl freeze_rain_at_0C @@ -174,7 +174,7 @@ - + microphys micro_mg_nl do_constant_sedimentation_fall_speed @@ -187,7 +187,7 @@ - + microphys micro_mg_nl do_precipitation_fall_speed_correction @@ -200,7 +200,7 @@ - + microphys micro_mg_nl accretion_sees_autoconverted_condensate @@ -213,7 +213,7 @@ - + microphys micro_mg_nl do_implicit_fall_speed_calc @@ -226,7 +226,7 @@ - + microphys micro_mg_nl use_prescribed_cloud_droplet_number_concentration @@ -239,7 +239,7 @@ - + microphys micro_mg_nl use_prescribed_cloud_ice_number_concentration @@ -252,7 +252,7 @@ - + microphys micro_mg_nl use_prescribed_graupel_number_concentration @@ -265,7 +265,7 @@ - + microphys micro_mg_nl use_prescribed_rain_number_concentration @@ -278,7 +278,7 @@ - + microphys micro_mg_nl use_prescribed_snow_number_concentration @@ -291,7 +291,7 @@ - + microphys micro_mg_nl control_for_precipitation_area_fraction_method @@ -304,7 +304,7 @@ - + microphys micro_mg_nl control_for_warm_rain_method @@ -356,7 +356,7 @@ - + microphys micro_mg_nl autoconverion_to_snow_size_threshold @@ -370,7 +370,7 @@ - + microphys micro_mg_nl bergeron_findeisen_process_efficiency_factor @@ -384,7 +384,7 @@ - + microphys micro_mg_nl accretion_enhancement_factor @@ -398,7 +398,7 @@ - + microphys micro_mg_nl autconversion_enhancement_factor @@ -412,7 +412,7 @@ - + microphys micro_mg_nl autconversion_nd_exponent @@ -426,7 +426,7 @@ - + microphys micro_mg_nl autconversion_lwp_exponent @@ -440,7 +440,7 @@ - + microphys micro_mg_nl homogeneous_freezing_radius @@ -454,7 +454,7 @@ - + microphys micro_mg_nl scaling_factor_for_ice_fall_speed @@ -468,7 +468,7 @@ - + microphys micro_mg_nl scaling_factor_for_snow_fall_speed @@ -482,7 +482,7 @@ - + microphys micro_mg_nl scaling_factor_for_ice_in_radiation @@ -496,7 +496,7 @@ - + microphys micro_mg_nl scaling_factor_for_ice_accretion @@ -510,7 +510,7 @@ - + microphys micro_mg_nl maximum_ice_number_concentration @@ -524,7 +524,7 @@ - + microphys micro_mg_nl prescribed_cloud_droplet_number_concentration @@ -538,7 +538,7 @@ - + microphys micro_mg_nl prescribed_cloud_ice_number_concentration @@ -552,7 +552,7 @@ - + microphys micro_mg_nl prescribed_graupel_number_concentration @@ -566,7 +566,7 @@ - + microphys micro_mg_nl prescribed_rain_number_concentration @@ -580,7 +580,7 @@ - + microphys micro_mg_nl prescribed_snow_number_concentration From 90fed138e8f118cbd63aafcde55979136c49a48e Mon Sep 17 00:00:00 2001 From: Cheryl Craig Date: Fri, 5 Dec 2025 14:12:13 -0700 Subject: [PATCH 18/26] Updates to support accum_enhan --- .../pumas/micro_pumas_ccpp_dimensions_pre.F90 | 15 ++++++++--- .../micro_pumas_ccpp_dimensions_pre.meta | 26 ++++++++++++++++--- schemes/pumas/pumas_pre_main_namelist.xml | 15 ++++++++++- 3 files changed, 49 insertions(+), 7 deletions(-) diff --git a/schemes/pumas/micro_pumas_ccpp_dimensions_pre.F90 b/schemes/pumas/micro_pumas_ccpp_dimensions_pre.F90 index 60553751..5650b4cf 100644 --- a/schemes/pumas/micro_pumas_ccpp_dimensions_pre.F90 +++ b/schemes/pumas/micro_pumas_ccpp_dimensions_pre.F90 @@ -2,6 +2,8 @@ module micro_pumas_ccpp_dimensions_pre implicit none + use pumas_kinds, only: pumas_r8=>kind_r8 + contains !> \section arg_table_micro_pumas_ccpp_dimensions_pre_init Argument Table @@ -44,6 +46,7 @@ subroutine micro_pumas_ccpp_dimensions_pre_run(ncol, nlev, nlevp1, airT_in, micro_airT, airq_in, micro_airq, & cldliq_in, micro_cldliq, & cldice_in, micro_cldice, & + micro_mg_num_steps, dtime, micro_timestep, & numliq_in, micro_numliq, & numice_in, micro_numice, & rainliq_in, micro_rainliq, & @@ -53,7 +56,7 @@ subroutine micro_pumas_ccpp_dimensions_pre_run(ncol, nlev, nlevp1, graupice_in, micro_graupice, & numgraup_in, micro_numgraup, & relvar_in, micro_relvar, & - spat_vary_accre_enhan_in, micro_spat_vary_accre_enhan, & + spat_vary_accre_enhan_in, pumas_accre_enhan, & pmid_in, micro_pmid, & pdel_in, micro_pdel, & pint_in, micro_pint, & @@ -99,6 +102,10 @@ subroutine micro_pumas_ccpp_dimensions_pre_run(ncol, nlev, nlevp1, ! Cloud ice mixing ratio wrt moist air and condensed water (kg kg-1) real(kind_phys), intent(in) :: cldice_in(:, :) real(kind_phys), intent(out) :: micro_cldice(:, :) + ! Substepping in microphysics variables + integer, intent(in) :: micro_mg_num_steps + real(kind_phys), intent(in) :: dtime + real(kind_phys), intent(out) :: micro_timestep ! Mass number concentration of cloud liquid water wrt moist air and condensed water (kg-1) real(kind_phys), intent(in) :: numliq_in(:, :) real(kind_phys), intent(out) :: micro_numliq(:, :) @@ -128,7 +135,7 @@ subroutine micro_pumas_ccpp_dimensions_pre_run(ncol, nlev, nlevp1, real(kind_phys), intent(out) :: micro_relvar(:, :) ! Accretion enhancement factor (1) real(kind_phys), intent(in) :: spat_vary_accre_enhan_in(:, :) - real(kind_phys), intent(out) :: micro_spat_vary_accre_enhan(:, :) + real(pumas_r8), intent(out) :: pumas_accre_enhan(:, :) ! Air pressure (Pa) real(kind_phys), intent(in) :: pmid_in(:, :) real(kind_phys), intent(out) :: micro_pmid(:, :) @@ -188,6 +195,8 @@ subroutine micro_pumas_ccpp_dimensions_pre_run(ncol, nlev, nlevp1, errmsg = '' errcode = 0 + micro_timestep = dtime/micro_mg_num_steps + !+ IH ! For now we just use ncols = micro_ncol, but we need to constrain the vertical extent for the microphysical fields. ! Therefore micro_xxx(:ncol,:) = xxx(:,::) @@ -205,7 +214,7 @@ subroutine micro_pumas_ccpp_dimensions_pre_run(ncol, nlev, nlevp1, micro_graupice(:ncol,:) = graupice_in(:,::) micro_numgraup(:ncol,:) = numgraup_in(:,::) micro_relvar(:ncol,:) = relvar_in(:,::) - micro_spat_vary_accre_enhan(:ncol,:) = spat_vary_accre_enhan_in(:,::) + pumas_accre_enhan(:ncol,:) = real(spat_vary_accre_enhan_in(:,::), pumas_r8) micro_pmid(:ncol,:) = pmid_in(:,::) micro_pdel(:ncol,:) = pdel_in(:,::) micro_pint(:ncol,:) = pint_in(:,:micro_nlevp1) diff --git a/schemes/pumas/micro_pumas_ccpp_dimensions_pre.meta b/schemes/pumas/micro_pumas_ccpp_dimensions_pre.meta index 305a6d34..b716ed67 100644 --- a/schemes/pumas/micro_pumas_ccpp_dimensions_pre.meta +++ b/schemes/pumas/micro_pumas_ccpp_dimensions_pre.meta @@ -198,6 +198,26 @@ type = real kind = kind_phys intent = out +[micro_mg_num_steps] + standard_name = number_of_microphysics_substeps + units = count + dimensions = () + type = integer + intent = in +[ dtime ] + standard_name = timestep_for_physics + units = s + type = real + kind = kind_phys + dimensions = () + intent = in +[micro_timestep] + standard_name = timestep_for_microphysics + units = s + dimensions = () + type = real + kind = kind_phys + intent = out [numliq_in] standard_name = mass_number_concentration_of_cloud_liquid_water_wrt_moist_air_and_condensed_water long_name = mass number concentration of cloud liquid wrt moist air and condensed water of new state @@ -358,13 +378,13 @@ type = real kind = kind_phys intent = in -[micro_spat_vary_accre_enhan] - standard_name = microphysics_spatial_varying_accretion_enhancement_factor +[pumas_accre_enhan] + standard_name = pumas_spatially_variable_microphysics_accretion_enhancement_factor long_name = microphysics spatial varying accretion enhancement factor units = 1 dimensions = (microphysics_horizontal_loop_extent, microphysics_vertical_layer_dimension) type = real - kind = kind_phys + kind = pumas_r8 intent = out [pmid_in] standard_name = air_pressure diff --git a/schemes/pumas/pumas_pre_main_namelist.xml b/schemes/pumas/pumas_pre_main_namelist.xml index 49f928f1..c0e0e583 100644 --- a/schemes/pumas/pumas_pre_main_namelist.xml +++ b/schemes/pumas/pumas_pre_main_namelist.xml @@ -70,6 +70,19 @@ + + microphys + micro_mg_nl + number_of_microphysics_substeps + count + integer + number of substeps for the microphysics + + + 1 + + + microphys micro_mg_nl @@ -387,7 +400,7 @@ microphys micro_mg_nl - accretion_enhancement_factor + microphysics_accretion_enhancement_factor 1 real kind_phys From 171fa8e493343ebc85d0011174e427fec1f0be30 Mon Sep 17 00:00:00 2001 From: Cheryl Craig Date: Wed, 10 Dec 2025 16:33:26 -0700 Subject: [PATCH 19/26] Next round of changes which compiled in CAM --- schemes/pumas/micro_pumas_ccpp_dimensions_pre.F90 | 6 +++--- schemes/pumas/micro_pumas_ccpp_dimensions_pre.meta | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/schemes/pumas/micro_pumas_ccpp_dimensions_pre.F90 b/schemes/pumas/micro_pumas_ccpp_dimensions_pre.F90 index 5650b4cf..c3371149 100644 --- a/schemes/pumas/micro_pumas_ccpp_dimensions_pre.F90 +++ b/schemes/pumas/micro_pumas_ccpp_dimensions_pre.F90 @@ -56,7 +56,7 @@ subroutine micro_pumas_ccpp_dimensions_pre_run(ncol, nlev, nlevp1, graupice_in, micro_graupice, & numgraup_in, micro_numgraup, & relvar_in, micro_relvar, & - spat_vary_accre_enhan_in, pumas_accre_enhan, & + accre_enhan_in, pumas_accre_enhan, & pmid_in, micro_pmid, & pdel_in, micro_pdel, & pint_in, micro_pint, & @@ -134,7 +134,7 @@ subroutine micro_pumas_ccpp_dimensions_pre_run(ncol, nlev, nlevp1, real(kind_phys), intent(in) :: relvar_in(:, :) real(kind_phys), intent(out) :: micro_relvar(:, :) ! Accretion enhancement factor (1) - real(kind_phys), intent(in) :: spat_vary_accre_enhan_in(:, :) + real(kind_phys), intent(in) :: accre_enhan_in(:, :) real(pumas_r8), intent(out) :: pumas_accre_enhan(:, :) ! Air pressure (Pa) real(kind_phys), intent(in) :: pmid_in(:, :) @@ -214,7 +214,7 @@ subroutine micro_pumas_ccpp_dimensions_pre_run(ncol, nlev, nlevp1, micro_graupice(:ncol,:) = graupice_in(:,::) micro_numgraup(:ncol,:) = numgraup_in(:,::) micro_relvar(:ncol,:) = relvar_in(:,::) - pumas_accre_enhan(:ncol,:) = real(spat_vary_accre_enhan_in(:,::), pumas_r8) + pumas_accre_enhan(:ncol,:) = real(accre_enhan_in(:,::), pumas_r8) micro_pmid(:ncol,:) = pmid_in(:,::) micro_pdel(:ncol,:) = pdel_in(:,::) micro_pint(:ncol,:) = pint_in(:,:micro_nlevp1) diff --git a/schemes/pumas/micro_pumas_ccpp_dimensions_pre.meta b/schemes/pumas/micro_pumas_ccpp_dimensions_pre.meta index b716ed67..9defec4f 100644 --- a/schemes/pumas/micro_pumas_ccpp_dimensions_pre.meta +++ b/schemes/pumas/micro_pumas_ccpp_dimensions_pre.meta @@ -370,8 +370,8 @@ type = real kind = kind_phys intent = out -[spat_vary_accre_enhan_in] - standard_name = spatial_varying_accretion_enhancement_factor +[accre_enhan_in] + standard_name = accretion_enhancement_factor long_name = spatial varying accretion enhancement factor units = 1 dimensions = (horizontal_loop_extent, vertical_layer_dimension) @@ -379,7 +379,7 @@ kind = kind_phys intent = in [pumas_accre_enhan] - standard_name = pumas_spatially_variable_microphysics_accretion_enhancement_factor + standard_name = pumas_accretion_enhancement_factor long_name = microphysics spatial varying accretion enhancement factor units = 1 dimensions = (microphysics_horizontal_loop_extent, microphysics_vertical_layer_dimension) From 7443df33de8ea663229500bc7cc918d0f895abe1 Mon Sep 17 00:00:00 2001 From: Cheryl Craig Date: Wed, 31 Dec 2025 10:53:47 -0700 Subject: [PATCH 20/26] Remove extra copy - do subsetting and pumas_r8 conversion in same step --- .../micro_pumas_ccpp_dimensions_post.F90 | 352 +++++++-------- .../micro_pumas_ccpp_dimensions_post.meta | 424 +++++++++--------- .../pumas/micro_pumas_ccpp_dimensions_pre.F90 | 182 ++++---- .../micro_pumas_ccpp_dimensions_pre.meta | 194 ++++---- schemes/pumas/pumas_pre_main_namelist.xml | 2 +- .../pumas_diagnostics_calling.F90 | 18 +- test/test_suites/suite_pumas.xml | 2 + 7 files changed, 588 insertions(+), 586 deletions(-) diff --git a/schemes/pumas/micro_pumas_ccpp_dimensions_post.F90 b/schemes/pumas/micro_pumas_ccpp_dimensions_post.F90 index b7473aed..6861f4bc 100644 --- a/schemes/pumas/micro_pumas_ccpp_dimensions_post.F90 +++ b/schemes/pumas/micro_pumas_ccpp_dimensions_post.F90 @@ -8,32 +8,32 @@ module micro_pumas_ccpp_dimensions_post !> \section arg_table_micro_pumas_ccpp_dimensions_post_run Argument Table !! \htmlinclude micro_pumas_ccpp_dimensions_post_run.html subroutine micro_pumas_ccpp_dimensions_post_run(ncol, micro_ncol, nlev, micro_nlev, & - nlevp1, micro_nlevp1, qcsinksum_rate1ord, micro_qcsinksum_rate1ord, airT_tend, & - micro_airT_tend, airq_tend, micro_airq_tend, & - cldliq_tend, micro_cldliq_tend, cldice_tend, micro_cldice_tend, numliq_tend, & - micro_numliq_tend, numice_tend, micro_numice_tend, rainliq_tend, micro_rainliq_tend, & - snowice_tend, micro_snowice_tend, numrain_tend, micro_numrain_tend, numsnow_tend, & - micro_numsnow_tend, graupice_tend, micro_graupice_tend, numgraup_tend, & - micro_numgraup_tend, effc, micro_effc, effc_fn, micro_effc_fn, effi, micro_effi, & - sadice, micro_sadice, sadsnow, micro_sadsnow, prect, micro_prect, preci, micro_preci,& - prec_evap, micro_prec_evap, am_evap_st, micro_am_evap_st, prec_prod, micro_prec_prod,& - cmeice, micro_cmeice, deffi, micro_deffi, pgamrad, micro_pgamrad, lamcrad, & - micro_lamcrad, snowice_in_prec, micro_snowice_in_prec, scaled_diam_snow, & - micro_scaled_diam_snow, graupice_in_prec, micro_graupice_in_prec, & - numgraup_vol_in_prec, micro_numgraup_vol_in_prec, scaled_diam_graup, & - micro_scaled_diam_graup, lflx, micro_lflx, iflx, micro_iflx, gflx, micro_gflx, rflx, & - micro_rflx, sflx, micro_sflx, rainliq_in_prec, micro_rainliq_in_prec, reff_rain, & - micro_reff_rain, reff_snow, micro_reff_snow, reff_grau, micro_reff_grau, & - numrain_vol_in_prec, micro_numrain_vol_in_prec, numsnow_vol_in_prec, & - micro_numsnow_vol_in_prec, refl, micro_refl, arefl, micro_arefl, areflz, micro_areflz,& - frefl, micro_frefl, csrfl, micro_csrfl, acsrfl, micro_acsrfl, fcsrfl, micro_fcsrfl, & - refl10cm, micro_refl10cm, reflz10cm, micro_reflz10cm, rercld, micro_rercld, ncai, & - micro_ncai, ncal, micro_ncal, rainliq, micro_rainliq, snowice, micro_snowice, & - numrain_vol, micro_numrain_vol, numsnow_vol, micro_numsnow_vol, diam_rain, & - micro_diam_rain, diam_snow, micro_diam_snow, graupice, micro_graupice, numgraup_vol, & - micro_numgraup_vol, diam_graup, micro_diam_graup, freq_graup, micro_freq_graup, & - freq_snow, micro_freq_snow, freq_rain, micro_freq_rain, frac_ice, micro_frac_ice, & - frac_cldliq_tend, micro_frac_cldliq_tend, rain_evap, micro_rain_evap, & + nlevp1, micro_nlevp1, qcsinksum_rate1ord, pumas_qcsinksum_rate1ord, airT_tend, & + pumas_airT_tend, airq_tend, pumas_airq_tend, & + cldliq_tend, pumas_cldliq_tend, cldice_tend, pumas_cldice_tend, numliq_tend, & + pumas_numliq_tend, numice_tend, pumas_numice_tend, rainliq_tend, pumas_rainliq_tend, & + snowice_tend, pumas_snowice_tend, numrain_tend, pumas_numrain_tend, numsnow_tend, & + pumas_numsnow_tend, graupice_tend, pumas_graupice_tend, numgraup_tend, & + pumas_numgraup_tend, effc, pumas_effc, effc_fn, pumas_effc_fn, effi, pumas_effi, & + sadice, pumas_sadice, sadsnow, pumas_sadsnow, prect, pumas_prect, preci, pumas_preci,& + prec_evap, pumas_prec_evap, am_evap_st, pumas_am_evap_st, prec_prod, pumas_prec_prod,& + cmeice, pumas_cmeice, deffi, pumas_deffi, pgamrad, pumas_pgamrad, lamcrad, & + pumas_lamcrad, snowice_in_prec, pumas_snowice_in_prec, scaled_diam_snow, & + pumas_scaled_diam_snow, graupice_in_prec, pumas_graupice_in_prec, & + numgraup_vol_in_prec, pumas_numgraup_vol_in_prec, scaled_diam_graup, & + pumas_scaled_diam_graup, lflx, pumas_lflx, iflx, pumas_iflx, gflx, pumas_gflx, rflx, & + pumas_rflx, sflx, pumas_sflx, rainliq_in_prec, pumas_rainliq_in_prec, reff_rain, & + pumas_reff_rain, reff_snow, pumas_reff_snow, reff_grau, pumas_reff_grau, & + numrain_vol_in_prec, pumas_numrain_vol_in_prec, numsnow_vol_in_prec, & + pumas_numsnow_vol_in_prec, refl, pumas_refl, arefl, pumas_arefl, areflz, pumas_areflz,& + frefl, pumas_frefl, csrfl, pumas_csrfl, acsrfl, pumas_acsrfl, fcsrfl, pumas_fcsrfl, & + refl10cm, pumas_refl10cm, reflz10cm, pumas_reflz10cm, rercld, pumas_rercld, ncai, & + pumas_ncai, ncal, pumas_ncal, rainliq, pumas_rainliq, snowice, pumas_snowice, & + numrain_vol, pumas_numrain_vol, numsnow_vol, pumas_numsnow_vol, diam_rain, & + pumas_diam_rain, diam_snow, pumas_diam_snow, graupice, pumas_graupice, numgraup_vol, & + pumas_numgraup_vol, diam_graup, pumas_diam_graup, freq_graup, pumas_freq_graup, & + freq_snow, pumas_freq_snow, freq_rain, pumas_freq_rain, frac_ice, pumas_frac_ice, & + frac_cldliq_tend, pumas_frac_cldliq_tend, rain_evap, pumas_rain_evap, & errmsg, errcode) ! horizontal dimension @@ -50,145 +50,145 @@ subroutine micro_pumas_ccpp_dimensions_post_run(ncol, micro_ncol, nlev, micro_nl integer, intent(in) :: micro_nlevp1 !microphysics direct conversion rate of stratiform cloud water to precipitation (s-1) - real(kind_phys), intent(in) :: micro_qcsinksum_rate1ord(:, :) + real(pumas_r8), intent(in) :: pumas_qcsinksum_rate1ord(:, :) !microphysics tendency of dry air enthalpy at constant pressure (J kg-1 s-1) - real(kind_phys), intent(in) :: micro_airT_tend(:, :) + real(pumas_r8), intent(in) :: pumas_airT_tend(:, :) !microphysics tendency of water vapor mixing ratio wrt moist air and condensed water (kg kg-1 s-1) - real(kind_phys), intent(in) :: micro_airq_tend(:, :) + real(pumas_r8), intent(in) :: pumas_airq_tend(:, :) !microphysics tendency of cloud liquid water mixing ratio wrt moist air and condensed water (kg kg-1 s-1) - real(kind_phys), intent(in) :: micro_cldliq_tend(:, :) + real(pumas_r8), intent(in) :: pumas_cldliq_tend(:, :) !microphysics tendency of cloud ice mixing ratio wrt moist air and condensed water (kg kg-1 s-1) - real(kind_phys), intent(in) :: micro_cldice_tend(:, :) + real(pumas_r8), intent(in) :: pumas_cldice_tend(:, :) !microphysics tendency of mass number concentration of cloud liquid water wrt moist air and condensed water (kg-1 s-1) - real(kind_phys), intent(in) :: micro_numliq_tend(:, :) + real(pumas_r8), intent(in) :: pumas_numliq_tend(:, :) !microphysics tendency of mass number concentration of cloud ice wrt moist air and condensed water (kg-1 s-1) - real(kind_phys), intent(in) :: micro_numice_tend(:, :) + real(pumas_r8), intent(in) :: pumas_numice_tend(:, :) !microphysics tendency of rain mixing ratio wrt moist air and condensed water (kg kg-1 s-1) - real(kind_phys), intent(in) :: micro_rainliq_tend(:, :) + real(pumas_r8), intent(in) :: pumas_rainliq_tend(:, :) !microphysics tendency of snow mixing ratio wrt moist air and condensed water (kg kg-1 s-1) - real(kind_phys), intent(in) :: micro_snowice_tend(:, :) + real(pumas_r8), intent(in) :: pumas_snowice_tend(:, :) !microphysics tendency of mass number concentration of rain wrt moist air and condensed water (kg-1 s-1) - real(kind_phys), intent(in) :: micro_numrain_tend(:, :) + real(pumas_r8), intent(in) :: pumas_numrain_tend(:, :) !microphysics tendency of mass number concentration of snow wrt moist air and condensed water (kg-1 s-1) - real(kind_phys), intent(in) :: micro_numsnow_tend(:, :) + real(pumas_r8), intent(in) :: pumas_numsnow_tend(:, :) !microphysics tendency of graupel mixing ratio wrt moist air and condensed water (kg kg-1 s-1) - real(kind_phys), intent(in) :: micro_graupice_tend(:, :) + real(pumas_r8), intent(in) :: pumas_graupice_tend(:, :) !microphysics tendency of mass number concentration of graupel wrt moist air and condensed water (kg-1 s-1) - real(kind_phys), intent(in) :: micro_numgraup_tend(:, :) + real(pumas_r8), intent(in) :: pumas_numgraup_tend(:, :) !microphysics effective radius of stratiform cloud liquid water particle (um) - real(kind_phys), intent(in) :: micro_effc(:, :) + real(pumas_r8), intent(in) :: pumas_effc(:, :) !microphysics effective radius of stratiform cloud liquid water particle assuming droplet number concentration of 1e8 kg-1 (um) - real(kind_phys), intent(in) :: micro_effc_fn(:, :) + real(pumas_r8), intent(in) :: pumas_effc_fn(:, :) !microphysics effective radius of stratiform cloud ice particle (um) - real(kind_phys), intent(in) :: micro_effi(:, :) + real(pumas_r8), intent(in) :: pumas_effi(:, :) !microphysics cloud ice surface area density (cm2 cm-3) - real(kind_phys), intent(in) :: micro_sadice(:, :) + real(pumas_r8), intent(in) :: pumas_sadice(:, :) !microphysics snow surface area density (cm2 cm-3) - real(kind_phys), intent(in) :: micro_sadsnow(:, :) + real(pumas_r8), intent(in) :: pumas_sadsnow(:, :) !microphysics LWE large scale precipitation rate at surface (m s-1) - real(kind_phys), intent(in) :: micro_prect(:) + real(pumas_r8), intent(in) :: pumas_prect(:) !microphysics LWE large scale snowfall rate at surface (m s-1) - real(kind_phys), intent(in) :: micro_preci(:) + real(pumas_r8), intent(in) :: pumas_preci(:) !microphysics precipitation evaporation rate wrt moist air and condensed water (kg kg-1 s-1) - real(kind_phys), intent(in) :: micro_prec_evap(:, :) + real(pumas_r8), intent(in) :: pumas_prec_evap(:, :) !microphysics precipitation evaporation area (fraction) - real(kind_phys), intent(in) :: micro_am_evap_st(:, :) + real(pumas_r8), intent(in) :: pumas_am_evap_st(:, :) !microphysics precipitation production rate wrt moist air and condensed water (kg kg-1 s-1) - real(kind_phys), intent(in) :: micro_prec_prod(:, :) + real(pumas_r8), intent(in) :: pumas_prec_prod(:, :) !microphysics condensation minus evaporation rate of in-cloud ice wrt moist air and condensed water (kg kg-1 s-1) - real(kind_phys), intent(in) :: micro_cmeice(:, :) + real(pumas_r8), intent(in) :: pumas_cmeice(:, :) !microphysics effective diameter of stratiform cloud ice particles for radiation (um) - real(kind_phys), intent(in) :: micro_deffi(:, :) + real(pumas_r8), intent(in) :: pumas_deffi(:, :) !microphysics cloud particle size distribution shape parameter (1) - real(kind_phys), intent(in) :: micro_pgamrad(:, :) + real(pumas_r8), intent(in) :: pumas_pgamrad(:, :) !microphysics cloud particle size distribution slope parameter (1) - real(kind_phys), intent(in) :: micro_lamcrad(:, :) + real(pumas_r8), intent(in) :: pumas_lamcrad(:, :) !microphysics snow mixing ratio wrt moist air and condensed water of new state in precipitating fraction of gridcell (kg kg-1) - real(kind_phys), intent(in) :: micro_snowice_in_prec(:, :) + real(pumas_r8), intent(in) :: pumas_snowice_in_prec(:, :) !microphysics snow scaled diameter (m) - real(kind_phys), intent(in) :: micro_scaled_diam_snow(:, :) + real(pumas_r8), intent(in) :: pumas_scaled_diam_snow(:, :) !microphysics graupel mixing ratio wrt moist air and condensed water of new state in precipitating fraction of gridcell (kg kg-1) - real(kind_phys), intent(in) :: micro_graupice_in_prec(:, :) + real(pumas_r8), intent(in) :: pumas_graupice_in_prec(:, :) !microphysics graupel number concentration of new state in precipitating fraction of gridcell (m-3) - real(kind_phys), intent(in) :: micro_numgraup_vol_in_prec(:, :) + real(pumas_r8), intent(in) :: pumas_numgraup_vol_in_prec(:, :) !microphysics graupel scaled diameter (m) - real(kind_phys), intent(in) :: micro_scaled_diam_graup(:, :) + real(pumas_r8), intent(in) :: pumas_scaled_diam_graup(:, :) !microphysics cloud liquid sedimentation flux (kg m-2 s-1) - real(kind_phys), intent(in) :: micro_lflx(:, :) + real(pumas_r8), intent(in) :: pumas_lflx(:, :) !microphysics cloud ice sedimentation flux (kg m-2 s-1) - real(kind_phys), intent(in) :: micro_iflx(:, :) + real(pumas_r8), intent(in) :: pumas_iflx(:, :) !microphysics graupel sedimentation flux (kg m-2 s-1) - real(kind_phys), intent(in) :: micro_gflx(:, :) + real(pumas_r8), intent(in) :: pumas_gflx(:, :) !microphysics rain sedimentation flux (kg m-2 s-1) - real(kind_phys), intent(in) :: micro_rflx(:, :) + real(pumas_r8), intent(in) :: pumas_rflx(:, :) !microphysics snow sedimentation flux (kg m-2 s-1) - real(kind_phys), intent(in) :: micro_sflx(:, :) + real(pumas_r8), intent(in) :: pumas_sflx(:, :) !microphysics rain mixing ratio wrt moist air and condensed water of new state in precipitating fraction of gridcell (kg kg-1) - real(kind_phys), intent(in) :: micro_rainliq_in_prec(:, :) + real(pumas_r8), intent(in) :: pumas_rainliq_in_prec(:, :) !microphysics effective radius of stratiform rain particle (um) - real(kind_phys), intent(in) :: micro_reff_rain(:, :) + real(pumas_r8), intent(in) :: pumas_reff_rain(:, :) !microphysics effective radius of stratiform snow particle (um) - real(kind_phys), intent(in) :: micro_reff_snow(:, :) + real(pumas_r8), intent(in) :: pumas_reff_snow(:, :) !microphysics effective radius of stratiform graupel particle (um) - real(kind_phys), intent(in) :: micro_reff_grau(:, :) + real(pumas_r8), intent(in) :: pumas_reff_grau(:, :) !microphysics rain number concentration of new state in precipitating fraction of gridcell (m-3) - real(kind_phys), intent(in) :: micro_numrain_vol_in_prec(:, :) + real(pumas_r8), intent(in) :: pumas_numrain_vol_in_prec(:, :) !microphysics snow number concentration of new state in precipitating fraction of gridcell (m-3) - real(kind_phys), intent(in) :: micro_numsnow_vol_in_prec(:, :) + real(pumas_r8), intent(in) :: pumas_numsnow_vol_in_prec(:, :) !microphysics analytic radar reflectivity at 94 GHz in precipitating fraction of gridcell (dBZ) - real(kind_phys), intent(in) :: micro_refl(:, :) + real(pumas_r8), intent(in) :: pumas_refl(:, :) !microphysics analytic radar reflectivity at 94 GHz (dBZ) - real(kind_phys), intent(in) :: micro_arefl(:, :) + real(pumas_r8), intent(in) :: pumas_arefl(:, :) !microphysics analytic radar reflectivity z factor at 94 GHz (mm6 m-3) - real(kind_phys), intent(in) :: micro_areflz(:, :) + real(pumas_r8), intent(in) :: pumas_areflz(:, :) !microphysics fraction of gridcell with nonzero radar reflectivity (fraction) - real(kind_phys), intent(in) :: micro_frefl(:, :) + real(pumas_r8), intent(in) :: pumas_frefl(:, :) !microphysics analytic radar reflectivity at 94 GHz with CloudSat thresholds in precipitating fraction of gridcell (dBZ) - real(kind_phys), intent(in) :: micro_csrfl(:, :) + real(pumas_r8), intent(in) :: pumas_csrfl(:, :) !microphysics analytic radar reflectivity at 94 GHz with CloudSat thresholds (dBZ) - real(kind_phys), intent(in) :: micro_acsrfl(:, :) + real(pumas_r8), intent(in) :: pumas_acsrfl(:, :) !microphysics fraction of gridcell with nonzero radar reflectivity with CloudSat thresholds (fraction) - real(kind_phys), intent(in) :: micro_fcsrfl(:, :) + real(pumas_r8), intent(in) :: pumas_fcsrfl(:, :) !microphysics analytic radar reflectivity at 10 cm wavelength (dBZ) - real(kind_phys), intent(in) :: micro_refl10cm(:, :) + real(pumas_r8), intent(in) :: pumas_refl10cm(:, :) !microphysics analytic radar reflectivity z factor at 10 cm wavelength (mm6 m-3) - real(kind_phys), intent(in) :: micro_reflz10cm(:, :) + real(pumas_r8), intent(in) :: pumas_reflz10cm(:, :) !microphysics effective radius of stratiform cloud liquid plus rain particles (m) - real(kind_phys), intent(in) :: micro_rercld(:, :) + real(pumas_r8), intent(in) :: pumas_rercld(:, :) !microphysics available ice nuclei number concentration of new state (m-3) - real(kind_phys), intent(in) :: micro_ncai(:, :) + real(pumas_r8), intent(in) :: pumas_ncai(:, :) !microphysics available cloud condensation nuclei number concentration of new state (m-3) - real(kind_phys), intent(in) :: micro_ncal(:, :) + real(pumas_r8), intent(in) :: pumas_ncal(:, :) !microphysics rain mixing ratio wrt moist air and condensed water of new state (kg kg-1) - real(kind_phys), intent(in) :: micro_rainliq(:, :) + real(pumas_r8), intent(in) :: pumas_rainliq(:, :) !microphysics snow mixing ratio wrt moist air and condensed water of new state (kg kg-1) - real(kind_phys), intent(in) :: micro_snowice(:, :) + real(pumas_r8), intent(in) :: pumas_snowice(:, :) !microphysics rain number concentration of new state (m-3) - real(kind_phys), intent(in) :: micro_numrain_vol(:, :) + real(pumas_r8), intent(in) :: pumas_numrain_vol(:, :) !microphysics snow number concentration of new state in precipitating fraction of gridcell (m-3) - real(kind_phys), intent(in) :: micro_numsnow_vol(:, :) + real(pumas_r8), intent(in) :: pumas_numsnow_vol(:, :) !microphysics average diameter of stratiform rain particle (m) - real(kind_phys), intent(in) :: micro_diam_rain(:, :) + real(pumas_r8), intent(in) :: pumas_diam_rain(:, :) !microphysics average diameter of stratiform snow particle (m) - real(kind_phys), intent(in) :: micro_diam_snow(:, :) + real(pumas_r8), intent(in) :: pumas_diam_snow(:, :) !microphysics graupel mixing ratio wrt moist air and condensed water of new state (kg kg-1) - real(kind_phys), intent(in) :: micro_graupice(:, :) + real(pumas_r8), intent(in) :: pumas_graupice(:, :) !microphysics graupel number concentration of new state (m-3) - real(kind_phys), intent(in) :: micro_numgraup_vol(:, :) + real(pumas_r8), intent(in) :: pumas_numgraup_vol(:, :) !microphysics average diameter of stratiform graupel particle (m) - real(kind_phys), intent(in) :: micro_diam_graup(:, :) + real(pumas_r8), intent(in) :: pumas_diam_graup(:, :) !microphysics fraction of gridcell with graupel (fraction) - real(kind_phys), intent(in) :: micro_freq_graup(:, :) + real(pumas_r8), intent(in) :: pumas_freq_graup(:, :) !microphysics fraction of gridcell with snow (fraction) - real(kind_phys), intent(in) :: micro_freq_snow(:, :) + real(pumas_r8), intent(in) :: pumas_freq_snow(:, :) !microphysics fraction of gridcell with rain (fraction) - real(kind_phys), intent(in) :: micro_freq_rain(:, :) + real(pumas_r8), intent(in) :: pumas_freq_rain(:, :) !microphysics fraction of frozen water to total condensed water (fraction) - real(kind_phys), intent(in) :: micro_frac_ice(:, :) + real(pumas_r8), intent(in) :: pumas_frac_ice(:, :) !microphysics fraction of cloud liquid tendency applied to state (fraction) - real(kind_phys), intent(in) :: micro_frac_cldliq_tend(:, :) + real(pumas_r8), intent(in) :: pumas_frac_cldliq_tend(:, :) !microphysics rain evaporation rate wrt moist air and condensed water (kg kg-1 s-1) - real(kind_phys), intent(in) :: micro_rain_evap(:, :) + real(pumas_r8), intent(in) :: pumas_rain_evap(:, :) !direct conversion rate of stratiform cloud water to precipitation (s-1) real(kind_phys), intent(out) :: qcsinksum_rate1ord(:, :) @@ -338,90 +338,90 @@ subroutine micro_pumas_ccpp_dimensions_post_run(ncol, micro_ncol, nlev, micro_nl errcode = 0 errmsg = '' - ilflx(:,:micro_nlevp1) = micro_lflx(:ncol,:) - iflx(:,:micro_nlevp1) = micro_iflx(:ncol,:) - gflx(:,:micro_nlevp1) = micro_gflx(:ncol,:) - rflx(:,:micro_nlevp1) = micro_rflx(:ncol,:) - sflx(:,:micro_nlevp1) = micro_sflx(:ncol,:) - pint(:,:micro_nlevp1) = micro_pint(:ncol,:) - qcsinksum_rate1ord(:,:micro_nlev) = micro_qcsinksum_rate1ord(:ncol,:) - airT_tend(:,:micro_nlev) = micro_airT_tend(:ncol,:) - airq_tend(:,:micro_nlev) = micro_airq_tend(:ncol,:) - cldliq_tend(:,:micro_nlev) = micro_cldliq_tend(:ncol,:) - cldice_tend(:,:micro_nlev) = micro_cldice_tend(:ncol,:) - numliq_tend(:,:micro_nlev) = micro_numliq_tend(:ncol,:) - numice_tend(:,:micro_nlev) = micro_numice_tend(:ncol,:) - rainliq_tend(:,:micro_nlev) = micro_rainliq_tend(:ncol,:) - snowice_tend(:,:micro_nlev) = micro_snowice_tend(:ncol,:) - numliq_tend(:,:micro_nlev) = micro_numliq_tend(:ncol,:) - numice_tend(:,:micro_nlev) = micro_numice_tend(:ncol,:) - numrain_tend(:,:micro_nlev) = micro_numrain_tend(:ncol,:) - numsnow_tend(:,:micro_nlev) = micro_numsnow_tend(:ncol,:) - graupice_tend(:,:micro_nlev) = micro_graupice_tend(:ncol,:) - numgraup_tend(:,:micro_nlev) = micro_numgraup_tend(:ncol,:) - effc(:,:micro_nlev) = micro_effc(:ncol,:) - effc_fn(:,:micro_nlev) = micro_effc_f(:ncol,:) - effi(:,:micro_nlev) = micro_effi(:ncol,:) - sadice(:,:micro_nlev) = micro_sadice(:ncol,:) - sadsnow(:,:micro_nlev) = micro_sadsnow(:ncol,:) - prect(:) = micro_prect(:ncol) - preci(:) = micro_preci(:ncol) - prec_evap(:,:micro_nlev) = micro_prec_evap(:ncol,:) - am_evap_st(:,:micro_nlev) = micro_am_evap_st(:ncol,:) - prec_prod(:,:micro_nlev) = micro_prec_prod(:ncol,:) - cmeice(:,:micro_nlev) = micro_cmeice(:ncol,:) - deffi(:,:micro_nlev) = micro_deffi(:ncol,:) - pgamrad(:,:micro_nlev) = micro_pgamrad(:ncol,:) - lamcrad(:,:micro_nlev) = micro_lamcrad(:ncol,:) - snowice_in_prec(:,:micro_nlev) = micro_snowice_in_prec(:ncol,:) - scaled_diam_snow(:,:micro_nlev) = micro_scaled_diam_snow(:ncol,:) - graupice_in_prec(:,:micro_nlev) = micro_graupice_in_prec(:ncol,:) - numgraup_vol_in_prec(:,:micro_nlev) = micro_numgraup_vol_in_prec(:ncol,:) - scaled_diam_graup(:,:micro_nlev) = micro_scaled_diam_graup(:ncol,:) - lflx(:,:micro_nlev) = micro_lflx(:ncol,:) - iflx(:,:micro_nlev) = micro_iflx(:ncol,:) - gflx(:,:micro_nlev) = micro_gflx(:ncol,:) - rlfx(:,:micro_nlev) = micro_rflx(:ncol,:) - sflx(:,:micro_nlev) = micro_sflx(:ncol,:) - rainliq_in_prec(:,:micro_nlev) = micro_rainliq_in_prec(:ncol,:) - reff_rain(:,:micro_nlev) = micro_reff_rain(:ncol,:) - reff_snow(:,:micro_nlev) = micro_reff_snow(:ncol,:) - reff_grau(:,:micro_nlev) = micro_reff_grau(:ncol,:) - numrain_vol_in_prec(:,:micro_nlev) = micro_numrain_vol_in_prec(:ncol,:) - numsnow_vol_in_prec(:,:micro_nlev) = micro_numsnow_vol_in_prec(:ncol,:) - refl(:,:micro_nlev) = micro_refl(:ncol,:) - arefl(:,:micro_nlev) = micro_arefl(:ncol,:) - areflz(:,:micro_nlev) = micro_areflz(:ncol,:) - frefl(:,:micro_nlev) = micro_frefl(:ncol,:) - csrfl(:,:micro_nlev) = micro_csrfl(:ncol,:) - acsrfl(:,:micro_nlev) = micro_acsrfl(:ncol,:) - fcsrfl(:,:micro_nlev) = micro_fcsrfl(:ncol,:) - refl10cm(:,:micro_nlev) = micro_refl10cm(:ncol,:) - reflz10cm(:,:micro_nlev) = micro_reflz10cm(:ncol,:) - rercld(:,:micro_nlev) = micro_rercld(:ncol,:) - ncai(:,:micro_nlev) = micro_ncai(:ncol,:) - ncal(:,:micro_nlev) = micro_ncal(:ncol,:) - rainliq(:,:micro_nlev) = micro_rainliq(:ncol,:) - snowice(:,:micro_nlev) = micro_snowice(:ncol,:) - numrain_vol(:,:micro_nlev) = micro_numrain_vol(:ncol,:) - numsnow_vol(:,:micro_nlev) = micro_numsnow_vol(:ncol,:) - diam_rain(:,:micro_nlev) = micro_diam_rain(:ncol,:) - diam_snow(:,:micro_nlev) = micro_diam_snow(:ncol,:) - graupice(:,:micro_nlev) = micro_graupice(:ncol,:) - numgraup_vol(:,:micro_nlev) = micro_numgraup_vol(:ncol,:) - diam_graup(:,:micro_nlev) = micro_diam_graup(:ncol,:) - freq_graup(:,:micro_nlev) = micro_freq_graup(:ncol,:) - freq_snow(:,:micro_nlev) = micro_freq_graup(:ncol,:) - freq_rain(:,:micro_nlev) = micro_freq_rain(:ncol,:) - frac_ice(:,:micro_nlev) = micro_frac_ice(:ncol,:) - frac_cldliq_tend(:,:micro_nlev) = micro_frac_cldliq_tend(:ncol,:) - rain_evap(:,:micro_nlev) = micro_rain_evap(:ncol,:) + ilflx(:,:micro_nlevp1) = pumas_lflx(:ncol,:) + iflx(:,:micro_nlevp1) = pumas_iflx(:ncol,:) + gflx(:,:micro_nlevp1) = pumas_gflx(:ncol,:) + rflx(:,:micro_nlevp1) = pumas_rflx(:ncol,:) + sflx(:,:micro_nlevp1) = pumas_sflx(:ncol,:) + pint(:,:micro_nlevp1) = pumas_pint(:ncol,:) + qcsinksum_rate1ord(:,:micro_nlev) = pumas_qcsinksum_rate1ord(:ncol,:) + airT_tend(:,:micro_nlev) = pumas_airT_tend(:ncol,:) + airq_tend(:,:micro_nlev) = pumas_airq_tend(:ncol,:) + cldliq_tend(:,:micro_nlev) = pumas_cldliq_tend(:ncol,:) + cldice_tend(:,:micro_nlev) = pumas_cldice_tend(:ncol,:) + numliq_tend(:,:micro_nlev) = pumas_numliq_tend(:ncol,:) + numice_tend(:,:micro_nlev) = pumas_numice_tend(:ncol,:) + rainliq_tend(:,:micro_nlev) = pumas_rainliq_tend(:ncol,:) + snowice_tend(:,:micro_nlev) = pumas_snowice_tend(:ncol,:) + numliq_tend(:,:micro_nlev) = pumas_numliq_tend(:ncol,:) + numice_tend(:,:micro_nlev) = pumas_numice_tend(:ncol,:) + numrain_tend(:,:micro_nlev) = pumas_numrain_tend(:ncol,:) + numsnow_tend(:,:micro_nlev) = pumas_numsnow_tend(:ncol,:) + graupice_tend(:,:micro_nlev) = pumas_graupice_tend(:ncol,:) + numgraup_tend(:,:micro_nlev) = pumas_numgraup_tend(:ncol,:) + effc(:,:micro_nlev) = pumas_effc(:ncol,:) + effc_fn(:,:micro_nlev) = pumas_effc_f(:ncol,:) + effi(:,:micro_nlev) = pumas_effi(:ncol,:) + sadice(:,:micro_nlev) = pumas_sadice(:ncol,:) + sadsnow(:,:micro_nlev) = pumas_sadsnow(:ncol,:) + prect(:) = pumas_prect(:ncol) + preci(:) = pumas_preci(:ncol) + prec_evap(:,:micro_nlev) = pumas_prec_evap(:ncol,:) + am_evap_st(:,:micro_nlev) = pumas_am_evap_st(:ncol,:) + prec_prod(:,:micro_nlev) = pumas_prec_prod(:ncol,:) + cmeice(:,:micro_nlev) = pumas_cmeice(:ncol,:) + deffi(:,:micro_nlev) = pumas_deffi(:ncol,:) + pgamrad(:,:micro_nlev) = pumas_pgamrad(:ncol,:) + lamcrad(:,:micro_nlev) = pumas_lamcrad(:ncol,:) + snowice_in_prec(:,:micro_nlev) = pumas_snowice_in_prec(:ncol,:) + scaled_diam_snow(:,:micro_nlev) = pumas_scaled_diam_snow(:ncol,:) + graupice_in_prec(:,:micro_nlev) = pumas_graupice_in_prec(:ncol,:) + numgraup_vol_in_prec(:,:micro_nlev) = pumas_numgraup_vol_in_prec(:ncol,:) + scaled_diam_graup(:,:micro_nlev) = pumas_scaled_diam_graup(:ncol,:) + lflx(:,:micro_nlev) = pumas_lflx(:ncol,:) + iflx(:,:micro_nlev) = pumas_iflx(:ncol,:) + gflx(:,:micro_nlev) = pumas_gflx(:ncol,:) + rlfx(:,:micro_nlev) = pumas_rflx(:ncol,:) + sflx(:,:micro_nlev) = pumas_sflx(:ncol,:) + rainliq_in_prec(:,:micro_nlev) = pumas_rainliq_in_prec(:ncol,:) + reff_rain(:,:micro_nlev) = pumas_reff_rain(:ncol,:) + reff_snow(:,:micro_nlev) = pumas_reff_snow(:ncol,:) + reff_grau(:,:micro_nlev) = pumas_reff_grau(:ncol,:) + numrain_vol_in_prec(:,:micro_nlev) = pumas_numrain_vol_in_prec(:ncol,:) + numsnow_vol_in_prec(:,:micro_nlev) = pumas_numsnow_vol_in_prec(:ncol,:) + refl(:,:micro_nlev) = pumas_refl(:ncol,:) + arefl(:,:micro_nlev) = pumas_arefl(:ncol,:) + areflz(:,:micro_nlev) = pumas_areflz(:ncol,:) + frefl(:,:micro_nlev) = pumas_frefl(:ncol,:) + csrfl(:,:micro_nlev) = pumas_csrfl(:ncol,:) + acsrfl(:,:micro_nlev) = pumas_acsrfl(:ncol,:) + fcsrfl(:,:micro_nlev) = pumas_fcsrfl(:ncol,:) + refl10cm(:,:micro_nlev) = pumas_refl10cm(:ncol,:) + reflz10cm(:,:micro_nlev) = pumas_reflz10cm(:ncol,:) + rercld(:,:micro_nlev) = pumas_rercld(:ncol,:) + ncai(:,:micro_nlev) = pumas_ncai(:ncol,:) + ncal(:,:micro_nlev) = pumas_ncal(:ncol,:) + rainliq(:,:micro_nlev) = pumas_rainliq(:ncol,:) + snowice(:,:micro_nlev) = pumas_snowice(:ncol,:) + numrain_vol(:,:micro_nlev) = pumas_numrain_vol(:ncol,:) + numsnow_vol(:,:micro_nlev) = pumas_numsnow_vol(:ncol,:) + diam_rain(:,:micro_nlev) = pumas_diam_rain(:ncol,:) + diam_snow(:,:micro_nlev) = pumas_diam_snow(:ncol,:) + graupice(:,:micro_nlev) = pumas_graupice(:ncol,:) + numgraup_vol(:,:micro_nlev) = pumas_numgraup_vol(:ncol,:) + diam_graup(:,:micro_nlev) = pumas_diam_graup(:ncol,:) + freq_graup(:,:micro_nlev) = pumas_freq_graup(:ncol,:) + freq_snow(:,:micro_nlev) = pumas_freq_graup(:ncol,:) + freq_rain(:,:micro_nlev) = pumas_freq_rain(:ncol,:) + frac_ice(:,:micro_nlev) = pumas_frac_ice(:ncol,:) + frac_cldliq_tend(:,:micro_nlev) = pumas_frac_cldliq_tend(:ncol,:) + rain_evap(:,:micro_nlev) = pumas_rain_evap(:ncol,:) airT(ncol, nlev) - micro_airT(micro_ncol, micro_nlev) + pumas_airT(micro_ncol, micro_nlev) - micro_airT(:ncol,:) = airT(:,:micro_nlev) + pumas_airT(:ncol,:) = airT(:,:micro_nlev) end subroutine micro_pumas_ccpp_dimensions_post_run module micro_pumas_ccpp_dimensions_post diff --git a/schemes/pumas/micro_pumas_ccpp_dimensions_post.meta b/schemes/pumas/micro_pumas_ccpp_dimensions_post.meta index 05891f61..acac5142 100644 --- a/schemes/pumas/micro_pumas_ccpp_dimensions_post.meta +++ b/schemes/pumas/micro_pumas_ccpp_dimensions_post.meta @@ -60,13 +60,13 @@ type = real kind = kind_phys intent = out -[micro_qcsinksum_rate1ord] - standard_name = microphysics_direct_conversion_rate_of_stratiform_cloud_water_to_precipitation_for_scavenging +[pumas_qcsinksum_rate1ord] + standard_name = pumas_direct_conversion_rate_of_stratiform_cloud_water_to_precipitation_for_scavenging long_name = microphysics direct conversion rate of stratiform cloud water to precipitation units = s-1 dimensions = (microphysics_horizontal_loop_extent, microphysics_vertical_layer_dimension) type = real - kind = kind_phys + kind = pumas_r8 intent = in [airT_tend] standard_name = tendency_of_dry_air_enthalpy_at_constant_pressure @@ -76,13 +76,13 @@ type = real kind = kind_phys intent = out -[micro_airT_tend] - standard_name = microphysics_tendency_of_dry_air_enthalpy_at_constant_pressure +[pumas_airT_tend] + standard_name = tendency_of_pumas_dry_air_enthalpy_at_constant_pressure long_name = microphysics tendency of dry air enthalpy at constant pressure units = J kg-1 s-1 dimensions = (microphysics_horizontal_loop_extent, microphysics_vertical_layer_dimension) type = real - kind = kind_phys + kind = pumas_r8 intent = in [airq_tend] standard_name = tendency_of_water_vapor_mixing_ratio_wrt_moist_air_and_condensed_water @@ -93,13 +93,13 @@ kind = kind_phys intent = out constituent = true -[micro_airq_tend] - standard_name = microphysics_tendency_of_water_vapor_mixing_ratio_wrt_moist_air_and_condensed_water +[pumas_airq_tend] + standard_name = tendency_of_pumas_water_vapor_mixing_ratio_wrt_moist_air_and_condensed_water long_name = microphysics tendency of water vapor mixing ratio wrt moist air and condensed water units = kg kg-1 s-1 dimensions = (microphysics_horizontal_loop_extent, microphysics_vertical_layer_dimension) type = real - kind = kind_phys + kind = pumas_r8 intent = in [cldliq_tend] standard_name = tendency_of_cloud_liquid_water_mixing_ratio_wrt_moist_air_and_condensed_water @@ -110,13 +110,13 @@ kind = kind_phys intent = out constituent = true -[micro_cldliq_tend] - standard_name = microphysics_tendency_of_cloud_liquid_water_mixing_ratio_wrt_moist_air_and_condensed_water +[pumas_cldliq_tend] + standard_name = tendency_of_pumas_cloud_liquid_water_mixing_ratio_wrt_moist_air_and_condensed_water long_name = microphysics tendency of cloud liquid water mixing ratio wrt moist air and condensed water units = kg kg-1 s-1 dimensions = (microphysics_horizontal_loop_extent, microphysics_vertical_layer_dimension) type = real - kind = kind_phys + kind = pumas_r8 intent = in [cldice_tend] standard_name = tendency_of_cloud_ice_mixing_ratio_wrt_moist_air_and_condensed_water @@ -127,13 +127,13 @@ kind = kind_phys intent = out constituent = true -[micro_cldice_tend] - standard_name = microphysics_tendency_of_cloud_ice_mixing_ratio_wrt_moist_air_and_condensed_water +[pumas_cldice_tend] + standard_name = tendency_of_pumas_cloud_ice_mixing_ratio_wrt_moist_air_and_condensed_water long_name = microphysics tendency of cloud ice mixing ratio wrt moist air and condensed water units = kg kg-1 s-1 dimensions = (microphysics_horizontal_loop_extent, microphysics_vertical_layer_dimension) type = real - kind = kind_phys + kind = pumas_r8 intent = in [numliq_tend] standard_name = tendency_of_mass_number_concentration_of_cloud_liquid_water_wrt_moist_air_and_condensed_water @@ -144,13 +144,13 @@ kind = kind_phys intent = out constituent = true -[micro_numliq_tend] - standard_name = microphysics_tendency_of_mass_number_concentration_of_cloud_liquid_water_wrt_moist_air_and_condensed_water +[pumas_numliq_tend] + standard_name = tendency_of_pumas_mass_number_concentration_of_cloud_liquid_water_wrt_moist_air_and_condensed_water long_name = microphysics mass number concentration of cloud liquid water wrt moist air and condensed water units = kg-1 s-1 dimensions = (microphysics_horizontal_loop_extent, microphysics_vertical_layer_dimension) type = real - kind = kind_phys + kind = pumas_r8 intent = in [numice_tend] standard_name = tendency_of_mass_number_concentration_of_cloud_ice_wrt_moist_air_and_condensed_water @@ -161,13 +161,13 @@ kind = kind_phys intent = out constituent = true -[micro_numice_tend] - standard_name = microphysics_tendency_of_mass_number_concentration_of_cloud_ice_wrt_moist_air_and_condensed_water +[pumas_numice_tend] + standard_name = tendency_of_pumas_mass_number_concentration_of_cloud_ice_wrt_moist_air_and_condensed_water long_name = microphysics mass number concentration of cloud ice wrt moist air and condensed water units = kg-1 s-1 dimensions = (microphysics_horizontal_loop_extent, microphysics_vertical_layer_dimension) type = real - kind = kind_phys + kind = pumas_r8 intent = in [rainliq_tend] standard_name = tendency_of_rain_mixing_ratio_wrt_moist_air_and_condensed_water @@ -178,13 +178,13 @@ kind = kind_phys intent = out constituent = true -[micro_rainliq_tend] - standard_name = microphysics_tendency_of_rain_mixing_ratio_wrt_moist_air_and_condensed_water +[pumas_rainliq_tend] + standard_name = tendency_of_pumas_rain_mixing_ratio_wrt_moist_air_and_condensed_water long_name = microphysics tendency of rain mixing ratio wrt moist air and condensed water units = kg kg-1 s-1 dimensions = (microphysics_horizontal_loop_extent, microphysics_vertical_layer_dimension) type = real - kind = kind_phys + kind = pumas_r8 intent = in [snowice_tend] standard_name = tendency_of_snow_mixing_ratio_wrt_moist_air_and_condensed_water @@ -195,13 +195,13 @@ kind = kind_phys intent = out constituent = true -[micro_snowice_tend] - standard_name = microphysics_tendency_of_snow_mixing_ratio_wrt_moist_air_and_condensed_water +[pumas_snowice_tend] + standard_name = tendency_of_pumas_snow_mixing_ratio_wrt_moist_air_and_condensed_water long_name = microphysics tendency of rain mixing ratio wrt moist air and condensed water units = kg kg-1 s-1 dimensions = (microphysics_horizontal_loop_extent, microphysics_vertical_layer_dimension) type = real - kind = kind_phys + kind = pumas_r8 intent = in [numrain_tend] standard_name = tendency_of_mass_number_concentration_of_rain_wrt_moist_air_and_condensed_water @@ -212,13 +212,13 @@ kind = kind_phys intent = out constituent = true -[micro_numrain_tend] - standard_name = microphysics_tendency_of_mass_number_concentration_of_rain_wrt_moist_air_and_condensed_water +[pumas_numrain_tend] + standard_name = tendency_of_pumas_mass_number_concentration_of_rain_wrt_moist_air_and_condensed_water long_name = microphysics tendency of mass number concentration of rain wrt moist air and condensed water units = kg-1 s-1 dimensions = (microphysics_horizontal_loop_extent, microphysics_vertical_layer_dimension) type = real - kind = kind_phys + kind = pumas_r8 intent = in [numsnow_tend] standard_name = tendency_of_mass_number_concentration_of_snow_wrt_moist_air_and_condensed_water @@ -229,13 +229,13 @@ kind = kind_phys intent = out constituent = true -[micro_numsnow_tend] - standard_name = microphysics_tendency_of_mass_number_concentration_of_snow_wrt_moist_air_and_condensed_water +[pumas_numsnow_tend] + standard_name = tendency_of_pumas_mass_number_concentration_of_snow_wrt_moist_air_and_condensed_water long_name = microphysics tendency of mass number concentration of snow wrt moist air and condensed water units = kg-1 s-1 dimensions = (microphysics_horizontal_loop_extent, microphysics_vertical_layer_dimension) type = real - kind = kind_phys + kind = pumas_r8 intent = in [graupice_tend] standard_name = tendency_of_graupel_mixing_ratio_wrt_moist_air_and_condensed_water @@ -246,13 +246,13 @@ kind = kind_phys intent = out constituent = true -[micro_graupice_tend] - standard_name = microphysics_tendency_of_graupel_mixing_ratio_wrt_moist_air_and_condensed_water +[pumas_graupice_tend] + standard_name = tendency_of_pumas_graupel_mixing_ratio_wrt_moist_air_and_condensed_water long_name = microphysics tendency of graupel mixing ratio wrt moist air and condensed water units = kg kg-1 s-1 dimensions = (microphysics_horizontal_loop_extent, microphysics_vertical_layer_dimension) type = real - kind = kind_phys + kind = pumas_r8 intent = in [numgraup_tend] standard_name = tendency_of_mass_number_concentration_of_graupel_wrt_moist_air_and_condensed_water @@ -263,13 +263,13 @@ kind = kind_phys intent = out constituent = true -[micro_numgraup_tend] - standard_name = microphysics_tendency_of_mass_number_concentration_of_graupel_wrt_moist_air_and_condensed_water +[pumas_numgraup_tend] + standard_name = tendency_of_pumas_mass_number_concentration_of_graupel_wrt_moist_air_and_condensed_water long_name = microphysics tendency of mass number concentration of graupel wrt moist air and condensed water units = kg-1 s-1 dimensions = (microphysics_horizontal_loop_extent, microphysics_vertical_layer_dimension) type = real - kind = kind_phys + kind = pumas_r8 intent = in [effc] standard_name = effective_radius_of_stratiform_cloud_liquid_water_particle @@ -279,13 +279,13 @@ type = real kind = kind_phys intent = out -[micro_effc] - standard_name = microphysics_effective_radius_of_stratiform_cloud_liquid_water_particle +[pumas_effc] + standard_name = pumas_effective_radius_of_stratiform_cloud_liquid_water_particle long_name = microphysics effective radius of stratiform cloud liquid water particle units = um dimensions = (microphysics_horizontal_loop_extent, microphysics_vertical_layer_dimension) type = real - kind = kind_phys + kind = pumas_r8 intent = in [effc_fn] standard_name = effective_radius_of_stratiform_cloud_liquid_water_particle_assuming_cloud_water_number_concentration_of_1e8_per_kg_air @@ -295,29 +295,29 @@ type = real kind = kind_phys intent = out -[micro_effc_fn] - standard_name = microphysics_effective_radius_of_stratiform_cloud_liquid_water_particle_assuming_cloud_water_number_concentration_of_1e8_per_kg_air +[pumas_effc_fn] + standard_name = pumas_effective_radius_of_stratiform_cloud_liquid_water_particle_assuming_cloud_water_number_concentration_of_1e8_per_kg_air long_name = microphysics effective radius of stratiform cloud liquid water particle assuming cloud water number concentration of 1e8 per kg air units = um dimensions = (microphysics_horizontal_loop_extent, microphysics_vertical_layer_dimension) type = real - kind = kind_phys + kind = pumas_r8 intent = in [effi] standard_name = effective_radius_of_stratiform_cloud_ice_particle long_name = effective radius of stratiform cloud ice particle - units = um + units = micron dimensions = (horizontal_loop_extent, vertical_layer_dimension) type = real kind = kind_phys intent = out -[micro_effi] - standard_name = microphysics_effective_radius_of_stratiform_cloud_ice_particle +[pumas_effi] + standard_name = pumas_effective_radius_of_stratiform_cloud_ice_particle long_name = microphysics effective radius of stratiform cloud ice particle - units = um + units = micron dimensions = (microphysics_horizontal_loop_extent, microphysics_vertical_layer_dimension) type = real - kind = kind_phys + kind = pumas_r8 intent = in [sadice] standard_name = cloud_ice_surface_area_density @@ -327,13 +327,13 @@ type = real kind = kind_phys intent = out -[micro_sadice] - standard_name = microphysics_cloud_ice_surface_area_density +[pumas_sadice] + standard_name = pumas_cloud_ice_surface_area_density long_name = microphysics cloud ice surface area density units = cm2 cm-3 dimensions = (microphysics_horizontal_loop_extent, microphysics_vertical_layer_dimension) type = real - kind = kind_phys + kind = pumas_r8 intent = in [sadsnow] standard_name = snow_surface_area_density @@ -343,13 +343,13 @@ type = real kind = kind_phys intent = out -[micro_sadsnow] - standard_name = microphysics_snow_surface_area_density +[pumas_sadsnow] + standard_name = pumas_snow_surface_area_density long_name = microphysics snow surface area density units = cm2 cm-3 dimensions = (microphysics_horizontal_loop_extent, microphysics_vertical_layer_dimension) type = real - kind = kind_phys + kind = pumas_r8 intent = in [prect] standard_name = lwe_large_scale_precipitation_rate_at_surface @@ -359,13 +359,13 @@ type = real kind = kind_phys intent = out -[micro_prect] - standard_name = microphysics_lwe_large_scale_precipitation_rate_at_surface +[pumas_prect] + standard_name = pumas_lwe_large_scale_precipitation_rate_at_surface long_name = microphysics LWE large scale precipitation rate at surface units = m s-1 dimensions = (microphysics_horizontal_loop_extent) type = real - kind = kind_phys + kind = pumas_r8 intent = in [preci] standard_name = lwe_large_scale_snowfall_rate_at_surface @@ -375,13 +375,13 @@ type = real kind = kind_phys intent = out -[micro_preci] - standard_name = microphysics_lwe_large_scale_snowfall_rate_at_surface +[pumas_preci] + standard_name = pumas_lwe_large_scale_snowfall_rate_at_surface long_name = microphysics LWE large scale snowfall rate at surface units = m s-1 dimensions = (microphysics_horizontal_loop_extent) type = real - kind = kind_phys + kind = pumas_r8 intent = in [prec_evap] standard_name = precipitation_evaporation_rate_wrt_moist_air_and_condensed_water @@ -391,13 +391,13 @@ type = real kind = kind_phys intent = out -[micro_prec_evap] - standard_name = microphysics_precipitation_evaporation_rate_wrt_moist_air_and_condensed_water +[pumas_prec_evap] + standard_name = pumas_precipitation_evaporation_rate_wrt_moist_air_and_condensed_water long_name = microphysics precipitation evaporation rate wrt moist air and condensed water units = kg kg-1 s-1 dimensions = (microphysics_horizontal_loop_extent, microphysics_vertical_layer_dimension) type = real - kind = kind_phys + kind = pumas_r8 intent = in [am_evap_st] standard_name = precipitation_evaporation_area @@ -407,13 +407,13 @@ type = real kind = kind_phys intent = out -[micro_am_evap_st] - standard_name = microphysics_precipitation_evaporation_area +[pumas_am_evap_st] + standard_name = pumas_precipitation_evaporation_area long_name = microphysics precipitation evaporation area units = fraction dimensions = (microphysics_horizontal_loop_extent, microphysics_vertical_layer_dimension) type = real - kind = kind_phys + kind = pumas_r8 intent = in [prec_prod] standard_name = precipitation_production_rate_wrt_moist_air_and_condensed_water @@ -423,13 +423,13 @@ type = real kind = kind_phys intent = out -[micro_prec_prod] - standard_name = microphysics_precipitation_production_rate_wrt_moist_air_and_condensed_water +[pumas_prec_prod] + standard_name = pumas_precipitation_production_rate_wrt_moist_air_and_condensed_water long_name = microphysics precipitation production rate wrt moist air and condensed water units = kg kg-1 s-1 dimensions = (microphysics_horizontal_loop_extent, microphysics_vertical_layer_dimension) type = real - kind = kind_phys + kind = pumas_r8 intent = in [cmeice] standard_name = condensation_minus_evaporation_rate_of_in_cloud_ice_wrt_moist_air_and_condensed_water @@ -439,13 +439,13 @@ type = real kind = kind_phys intent = out -[micro_cmeice] - standard_name = microphysics_condensation_minus_evaporation_rate_of_in_cloud_ice_wrt_moist_air_and_condensed_water +[pumas_cmeice] + standard_name = pumas_condensation_minus_evaporation_rate_of_in_cloud_ice_wrt_moist_air_and_condensed_water long_name = microphysics condensation minus evaporation rate of in-cloud ice wrt moist air and condensed water units = kg kg-1 s-1 dimensions = (microphysics_horizontal_loop_extent, microphysics_vertical_layer_dimension) type = real - kind = kind_phys + kind = pumas_r8 intent = in [deffi] standard_name = effective_diameter_of_stratiform_cloud_ice_particles_for_radiation @@ -455,13 +455,13 @@ type = real kind = kind_phys intent = out -[micro_deffi] - standard_name = microphysics_effective_diameter_of_stratiform_cloud_ice_particles_for_radiation +[pumas_deffi] + standard_name = pumas_effective_diameter_of_stratiform_cloud_ice_particles_for_radiation long_name = microphysics effective diameter of stratiform cloud ice particles for radiation units = um dimensions = (microphysics_horizontal_loop_extent, microphysics_vertical_layer_dimension) type = real - kind = kind_phys + kind = pumas_r8 intent = in [pgamrad] standard_name = cloud_particle_size_distribution_shape_parameter @@ -471,13 +471,13 @@ type = real kind = kind_phys intent = out -[micro_pgamrad] - standard_name = microphysics_cloud_particle_size_distribution_shape_parameter +[pumas_pgamrad] + standard_name = pumas_cloud_particle_size_distribution_shape_parameter long_name = microphysics cloud particle size distribution shape (gamma) parameter units = 1 dimensions = (microphysics_horizontal_loop_extent, microphysics_vertical_layer_dimension) type = real - kind = kind_phys + kind = pumas_r8 intent = in [lamcrad] standard_name = cloud_particle_size_distribution_slope_parameter @@ -487,13 +487,13 @@ type = real kind = kind_phys intent = out -[micro_lamcrad] - standard_name = microphysics_cloud_particle_size_distribution_slope_parameter +[pumas_lamcrad] + standard_name = pumas_cloud_particle_size_distribution_slope_parameter long_name = microphysics cloud particle size distribution slope (lambda) parameter units = 1 dimensions = (microphysics_horizontal_loop_extent, microphysics_vertical_layer_dimension) type = real - kind = kind_phys + kind = pumas_r8 intent = in [snowice_in_prec] standard_name = snow_mixing_ratio_wrt_moist_air_and_condensed_water_of_new_state_in_precipitating_fraction_of_gridcell @@ -503,13 +503,13 @@ type = real kind = kind_phys intent = out -[micro_snowice_in_prec] - standard_name = microphysics_snow_mixing_ratio_wrt_moist_air_and_condensed_water_of_new_state_in_precipitating_fraction_of_gridcell +[pumas_snowice_in_prec] + standard_name = pumas_snow_mixing_ratio_wrt_moist_air_and_condensed_water_of_new_state_in_precipitating_fraction_of_gridcell long_name = microphysics snow mixing ratio wrt moist air and condensed water of new state in precipitating fraction of gridcell units = kg kg-1 dimensions = (microphysics_horizontal_loop_extent, microphysics_vertical_layer_dimension) type = real - kind = kind_phys + kind = pumas_r8 intent = in [scaled_diam_snow] standard_name = snow_scaled_diameter @@ -519,13 +519,13 @@ type = real kind = kind_phys intent = out -[micro_scaled_diam_snow] - standard_name = microphysics_snow_scaled_diameter +[pumas_scaled_diam_snow] + standard_name = pumas_snow_scaled_diameter long_name = microphysics snow scaled diameter units = m dimensions = (microphysics_horizontal_loop_extent, microphysics_vertical_layer_dimension) type = real - kind = kind_phys + kind = pumas_r8 intent = in [graupice_in_prec] standard_name = graupel_mixing_ratio_wrt_moist_air_and_condensed_water_of_new_state_in_precipitating_fraction_of_gridcell @@ -535,13 +535,13 @@ type = real kind = kind_phys intent = out -[micro_graupice_in_prec] - standard_name = microphysics_graupel_mixing_ratio_wrt_moist_air_and_condensed_water_of_new_state_in_precipitating_fraction_of_gridcell +[pumas_graupice_in_prec] + standard_name = pumas_graupel_mixing_ratio_wrt_moist_air_and_condensed_water_of_new_state_in_precipitating_fraction_of_gridcell long_name = microphysics graupel mixing ratio wrt moist air and condensed water of new state in precipitating fraction of gridcell units = kg kg-1 dimensions = (microphysics_horizontal_loop_extent, microphysics_vertical_layer_dimension) type = real - kind = kind_phys + kind = pumas_r8 intent = in [numgraup_vol_in_prec] standard_name = graupel_number_concentration_of_new_state_in_precipitating_fraction_of_gridcell @@ -551,13 +551,13 @@ type = real kind = kind_phys intent = out -[micro_numgraup_vol_in_prec] - standard_name = microphysics_graupel_number_concentration_of_new_state_in_precipitating_fraction_of_gridcell +[pumas_numgraup_vol_in_prec] + standard_name = pumas_graupel_number_concentration_of_new_state_in_precipitating_fraction_of_gridcell long_name = microphysics graupel number concentration of new state in precipitating fraction of gridcell units = m-3 dimensions = (microphysics_horizontal_loop_extent, microphysics_vertical_layer_dimension) type = real - kind = kind_phys + kind = pumas_r8 intent = in [scaled_diam_graup] standard_name = graupel_scaled_diameter @@ -567,13 +567,13 @@ type = real kind = kind_phys intent = out -[micro_scaled_diam_graup] - standard_name = microphysics_graupel_scaled_diameter +[pumas_scaled_diam_graup] + standard_name = pumas_graupel_scaled_diameter long_name = microphysics graupel diameter units = m dimensions = (microphysics_horizontal_loop_extent, microphysics_vertical_layer_dimension) type = real - kind = kind_phys + kind = pumas_r8 intent = in [lflx] standard_name = cloud_liquid_sedimentation_flux @@ -583,13 +583,13 @@ type = real kind = kind_phys intent = out -[micro_lflx] - standard_name = microphysics_cloud_liquid_sedimentation_flux +[pumas_lflx] + standard_name = pumas_cloud_liquid_sedimentation_flux long_name = microphysics cloud liquid sedimentation flux units = kg m-2 s-1 dimensions = (microphysics_horizontal_loop_extent, microphysics_vertical_interface_dimension) type = real - kind = kind_phys + kind = pumas_r8 intent = in [iflx] standard_name = cloud_ice_sedimentation_flux @@ -599,13 +599,13 @@ type = real kind = kind_phys intent = out -[micro_iflx] - standard_name = microphysics_cloud_ice_sedimentation_flux +[pumas_iflx] + standard_name = pumas_cloud_ice_sedimentation_flux long_name = microphysics cloud ice sedimentation flux units = kg m-2 s-1 dimensions = (microphysics_horizontal_loop_extent, microphysics_vertical_interface_dimension) type = real - kind = kind_phys + kind = pumas_r8 intent = in [gflx] standard_name = graupel_sedimentation_flux @@ -615,13 +615,13 @@ type = real kind = kind_phys intent = out -[micro_gflx] - standard_name = microphysics_graupel_sedimentation_flux +[pumas_gflx] + standard_name = pumas_graupel_sedimentation_flux long_name = microphysics graupel sedimentation flux units = kg m-2 s-1 dimensions = (microphysics_horizontal_loop_extent, microphysics_vertical_interface_dimension) type = real - kind = kind_phys + kind = pumas_r8 intent = in [rflx] standard_name = rain_sedimentation_flux @@ -631,13 +631,13 @@ type = real kind = kind_phys intent = out -[micro_rflx] - standard_name = microphysics_rain_sedimentation_flux +[pumas_rflx] + standard_name = pumas_rain_sedimentation_flux long_name = microphysics rain sedimentation flux units = kg m-2 s-1 dimensions = (microphysics_horizontal_loop_extent, microphysics_vertical_interface_dimension) type = real - kind = kind_phys + kind = pumas_r8 intent = in [sflx] standard_name = snow_sedimentation_flux @@ -647,13 +647,13 @@ type = real kind = kind_phys intent = out -[micro_sflx] - standard_name = microphysics_snow_sedimentation_flux +[pumas_sflx] + standard_name = pumas_snow_sedimentation_flux long_name = microphysics snow sedimentation flux units = kg m-2 s-1 dimensions = (microphysics_horizontal_loop_extent, microphysics_vertical_interface_dimension) type = real - kind = kind_phys + kind = pumas_r8 intent = in [rainliq_in_prec] standard_name = rain_mixing_ratio_wrt_moist_air_and_condensed_water_of_new_state_in_precipitating_fraction_of_gridcell @@ -663,13 +663,13 @@ type = real kind = kind_phys intent = out -[micro_rainliq_in_prec] - standard_name = microphysics_rain_mixing_ratio_wrt_moist_air_and_condensed_water_of_new_state_in_precipitating_fraction_of_gridcell +[pumas_rainliq_in_prec] + standard_name = pumas_rain_mixing_ratio_wrt_moist_air_and_condensed_water_of_new_state_in_precipitating_fraction_of_gridcell long_name = microphysics rain mixing ratio wrt moist air and condensed water of new state in precipitating fraction of gridcell units = kg kg-1 dimensions = (microphysics_horizontal_loop_extent, microphysics_vertical_layer_dimension) type = real - kind = kind_phys + kind = pumas_r8 intent = in [reff_rain] standard_name = effective_radius_of_stratiform_rain_particle @@ -679,13 +679,13 @@ type = real kind = kind_phys intent = out -[micro_reff_rain] - standard_name = microphysics_effective_radius_of_stratiform_rain_particle +[pumas_reff_rain] + standard_name = pumas_effective_radius_of_stratiform_rain_particle long_name = microphysics effective radius of stratiform rain particle units = um dimensions = (microphysics_horizontal_loop_extent, microphysics_vertical_layer_dimension) type = real - kind = kind_phys + kind = pumas_r8 intent = in [reff_snow] standard_name = effective_radius_of_stratiform_snow_particle @@ -695,13 +695,13 @@ type = real kind = kind_phys intent = out -[micro_reff_snow] - standard_name = microphysics_effective_radius_of_stratiform_snow_particle +[pumas_reff_snow] + standard_name = pumas_effective_radius_of_stratiform_snow_particle long_name = microphysics effective radius of stratiform snow particle units = um dimensions = (microphysics_horizontal_loop_extent, microphysics_vertical_layer_dimension) type = real - kind = kind_phys + kind = pumas_r8 intent = in [reff_grau] standard_name = effective_radius_of_stratiform_graupel_particle @@ -711,13 +711,13 @@ type = real kind = kind_phys intent = out -[micro_reff_grau] - standard_name = microphysics_effective_radius_of_stratiform_graupel_particle +[pumas_reff_grau] + standard_name = pumas_effective_radius_of_stratiform_graupel_particle long_name = microphysics effective radius of stratiform graupel particle units = um dimensions = (microphysics_horizontal_loop_extent, microphysics_vertical_layer_dimension) type = real - kind = kind_phys + kind = pumas_r8 intent = in [numrain_vol_in_prec] standard_name = rain_number_concentration_of_new_state_in_precipitating_fraction_of_gridcell @@ -727,13 +727,13 @@ type = real kind = kind_phys intent = out -[micro_numrain_vol_in_prec] - standard_name = microphysics_rain_number_concentration_of_new_state_in_precipitating_fraction_of_gridcell +[pumas_numrain_vol_in_prec] + standard_name = pumas_rain_number_concentration_of_new_state_in_precipitating_fraction_of_gridcell long_name = microphysics rain number concentration of new state in precipitating fraction of gridcell units = m-3 dimensions = (microphysics_horizontal_loop_extent, microphysics_vertical_layer_dimension) type = real - kind = kind_phys + kind = pumas_r8 intent = in [numsnow_vol_in_prec] standard_name = snow_number_concentration_of_new_state_in_precipitating_fraction_of_gridcell @@ -743,13 +743,13 @@ type = real kind = kind_phys intent = out -[micro_numsnow_vol_in_prec] - standard_name = microphysics_snow_number_concentration_of_new_state_in_precipitating_fraction_of_gridcell +[pumas_numsnow_vol_in_prec] + standard_name = pumas_snow_number_concentration_of_new_state_in_precipitating_fraction_of_gridcell long_name = microphysics snow number concentration of new state in precipitating fraction of gridcell units = m-3 dimensions = (microphysics_horizontal_loop_extent, microphysics_vertical_layer_dimension) type = real - kind = kind_phys + kind = pumas_r8 intent = in [refl] standard_name = analytic_radar_reflectivity_at_94_GHz_in_precipitating_fraction_of_gridcell @@ -759,13 +759,13 @@ type = real kind = kind_phys intent = out -[micro_refl] - standard_name = microphysics_analytic_radar_reflectivity_at_94_GHz_in_precipitating_fraction_of_gridcell +[pumas_refl] + standard_name = pumas_analytic_radar_reflectivity_at_94_GHz_in_precipitating_fraction_of_gridcell long_name = microphysics analytic radar reflectivity at 94 GHz in precipitating fraction of gridcell units = dBZ dimensions = (microphysics_horizontal_loop_extent, microphysics_vertical_layer_dimension) type = real - kind = kind_phys + kind = pumas_r8 intent = in [arefl] standard_name = analytic_radar_reflectivity_at_94_GHz @@ -775,13 +775,13 @@ type = real kind = kind_phys intent = out -[micro_arefl] - standard_name = microphysics_analytic_radar_reflectivity_at_94_GHz +[pumas_arefl] + standard_name = pumas_analytic_radar_reflectivity_at_94_GHz long_name = microphysics analytic radar reflectivity at 94 GHz units = dBZ dimensions = (microphysics_horizontal_loop_extent, microphysics_vertical_layer_dimension) type = real - kind = kind_phys + kind = pumas_r8 intent = in [areflz] standard_name = analytic_radar_reflectivity_z_factor_at_94_GHz @@ -791,13 +791,13 @@ type = real kind = kind_phys intent = out -[micro_areflz] - standard_name = microphysics_analytic_radar_reflectivity_z_factor_at_94_GHz +[pumas_areflz] + standard_name = pumas_analytic_radar_reflectivity_z_factor_at_94_GHz long_name = microphysics analytic radar reflectivity z factor at 94 GHz units = mm6 m-3 dimensions = (microphysics_horizontal_loop_extent, microphysics_vertical_layer_dimension) type = real - kind = kind_phys + kind = pumas_r8 intent = in [frefl] standard_name = fraction_of_gridcell_with_nonzero_radar_reflectivity @@ -807,13 +807,13 @@ type = real kind = kind_phys intent = out -[micro_frefl] - standard_name = microphysics_fraction_of_gridcell_with_nonzero_radar_reflectivity +[pumas_frefl] + standard_name = pumas_fraction_of_gridcell_with_nonzero_radar_reflectivity long_name = microphysics fraction of gridcell with nonzero radar reflectivity units = fraction dimensions = (microphysics_horizontal_loop_extent, microphysics_vertical_layer_dimension) type = real - kind = kind_phys + kind = pumas_r8 intent = in [csrfl] standard_name = analytic_radar_reflectivity_at_94_GHz_with_cloudsat_thresholds_in_precipitating_fraction_of_gridcell @@ -823,13 +823,13 @@ type = real kind = kind_phys intent = out -[micro_csrfl] - standard_name = microphysics_analytic_radar_reflectivity_at_94_GHz_with_cloudsat_thresholds_in_precipitating_fraction_of_gridcell +[pumas_csrfl] + standard_name = pumas_analytic_radar_reflectivity_at_94_GHz_with_cloudsat_thresholds_in_precipitating_fraction_of_gridcell long_name = microphysics analytic radar reflectivity at 94 GHz with CloudSat thresholds in precipitating fraction of gridcell units = dBZ dimensions = (microphysics_horizontal_loop_extent, microphysics_vertical_layer_dimension) type = real - kind = kind_phys + kind = pumas_r8 intent = in [acsrfl] standard_name = analytic_radar_reflectivity_at_94_GHz_with_cloudsat_thresholds @@ -839,13 +839,13 @@ type = real kind = kind_phys intent = out -[micro_acsrfl] - standard_name = microphysics_analytic_radar_reflectivity_at_94_GHz_with_cloudsat_thresholds +[pumas_acsrfl] + standard_name = pumas_analytic_radar_reflectivity_at_94_GHz_with_cloudsat_thresholds long_name = microphysics analytic radar reflectivity at 94 GHz with CloudSat thresholds units = dBZ dimensions = (microphysics_horizontal_loop_extent, microphysics_vertical_layer_dimension) type = real - kind = kind_phys + kind = pumas_r8 intent = in [fcsrfl] standard_name = fraction_of_gridcell_with_nonzero_radar_reflectivity_with_cloudsat_thresholds @@ -855,13 +855,13 @@ type = real kind = kind_phys intent = out -[micro_fcsrfl] - standard_name = microphysics_fraction_of_gridcell_with_nonzero_radar_reflectivity_with_cloudsat_thresholds +[pumas_fcsrfl] + standard_name = pumas_fraction_of_gridcell_with_nonzero_radar_reflectivity_with_cloudsat_thresholds long_name = microphysics fraction of gridcell with nonzero radar reflectivity with CloudSat thresholds units = fraction dimensions = (microphysics_horizontal_loop_extent, microphysics_vertical_layer_dimension) type = real - kind = kind_phys + kind = pumas_r8 intent = in [refl10cm] standard_name = analytic_radar_reflectivity_at_10_cm_wavelength @@ -871,13 +871,13 @@ type = real kind = kind_phys intent = out -[micro_refl10cm] - standard_name = microphysics_analytic_radar_reflectivity_at_10_cm_wavelength +[pumas_refl10cm] + standard_name = pumas_analytic_radar_reflectivity_at_10_cm_wavelength long_name = microphysics analytic radar reflectivity at 10 cm wavelength units = dBZ dimensions = (microphysics_horizontal_loop_extent, microphysics_vertical_layer_dimension) type = real - kind = kind_phys + kind = pumas_r8 intent = in [reflz10cm] standard_name = analytic_radar_reflectivity_z_factor_at_10_cm_wavelength @@ -887,13 +887,13 @@ type = real kind = kind_phys intent = out -[micro_reflz10cm] - standard_name = microphysics_analytic_radar_reflectivity_z_factor_at_10_cm_wavelength +[pumas_reflz10cm] + standard_name = pumas_analytic_radar_reflectivity_z_factor_at_10_cm_wavelength long_name = microphysics analytic radar reflectivity z factor at 10 cm wavelength units = mm6 m-3 dimensions = (microphysics_horizontal_loop_extent, microphysics_vertical_layer_dimension) type = real - kind = kind_phys + kind = pumas_r8 intent = in [rercld] standard_name = effective_radius_of_stratiform_cloud_liquid_plus_rain_particles @@ -903,13 +903,13 @@ type = real kind = kind_phys intent = out -[micro_rercld] - standard_name = microphysics_effective_radius_of_stratiform_cloud_liquid_plus_rain_particles +[pumas_rercld] + standard_name = pumas_effective_radius_of_stratiform_cloud_liquid_plus_rain_particles long_name = microphysics effective radius of stratiform cloud liquid plus rain particles units = m dimensions = (microphysics_horizontal_loop_extent, microphysics_vertical_layer_dimension) type = real - kind = kind_phys + kind = pumas_r8 intent = in [ncai] standard_name = available_ice_nuclei_number_concentration_of_new_state @@ -919,13 +919,13 @@ type = real kind = kind_phys intent = out -[micro_ncai] - standard_name = microphysics_available_ice_nuclei_number_concentration_of_new_state +[pumas_ncai] + standard_name = pumas_available_ice_nuclei_number_concentration_of_new_state long_name = microphysics available ice nuclei number concentration of new state units = m-3 dimensions = (microphysics_horizontal_loop_extent, microphysics_vertical_layer_dimension) type = real - kind = kind_phys + kind = pumas_r8 intent = in [ncal] standard_name = available_cloud_condensation_nuclei_number_concentration_of_new_state @@ -935,13 +935,13 @@ type = real kind = kind_phys intent = out -[micro_ncal] - standard_name = microphysics_available_cloud_condensation_nuclei_number_concentration_of_new_state +[pumas_ncal] + standard_name = pumas_available_cloud_condensation_nuclei_number_concentration_of_new_state long_name = microphysics available cloud condensation nuclei number concentration of new state units = m-3 dimensions = (microphysics_horizontal_loop_extent, microphysics_vertical_layer_dimension) type = real - kind = kind_phys + kind = pumas_r8 intent = in [rainliq] standard_name = rain_mixing_ratio_wrt_moist_air_and_condensed_water_of_new_state @@ -951,13 +951,13 @@ type = real kind = kind_phys intent = out -[micro_rainliq] - standard_name = microphysics_rain_mixing_ratio_wrt_moist_air_and_condensed_water_of_new_state +[pumas_rainliq] + standard_name = pumas_rain_mixing_ratio_wrt_moist_air_and_condensed_water_of_new_state long_name = microphysics rain mixing ratio wrt moist air and condensed water of new state units = kg kg-1 dimensions = (microphysics_horizontal_loop_extent, microphysics_vertical_layer_dimension) type = real - kind = kind_phys + kind = pumas_r8 intent = in [snowice] standard_name = snow_mixing_ratio_wrt_moist_air_and_condensed_water_of_new_state @@ -967,13 +967,13 @@ type = real kind = kind_phys intent = out -[micro_snowice] - standard_name = microphysics_snow_mixing_ratio_wrt_moist_air_and_condensed_water_of_new_state +[pumas_snowice] + standard_name = pumas_snow_mixing_ratio_wrt_moist_air_and_condensed_water_of_new_state long_name = microphysics snow mixing ratio wrt moist air and condensed water of new state units = kg kg-1 dimensions = (microphysics_horizontal_loop_extent, microphysics_vertical_layer_dimension) type = real - kind = kind_phys + kind = pumas_r8 intent = in [numrain_vol] standard_name = rain_number_concentration_of_new_state @@ -983,13 +983,13 @@ type = real kind = kind_phys intent = out -[micro_numrain_vol] - standard_name = microphysics_rain_number_concentration_of_new_state +[pumas_numrain_vol] + standard_name = pumas_rain_number_concentration_of_new_state long_name = microphysics rain number concentration of new state units = m-3 dimensions = (microphysics_horizontal_loop_extent, microphysics_vertical_layer_dimension) type = real - kind = kind_phys + kind = pumas_r8 intent = in [numsnow_vol] standard_name = snow_number_concentration_of_new_state @@ -999,13 +999,13 @@ type = real kind = kind_phys intent = out -[micro_numsnow_vol] - standard_name = microphysics_snow_number_concentration_of_new_state +[pumas_numsnow_vol] + standard_name = pumas_snow_number_concentration_of_new_state long_name = microphysics snow number concentration of new state units = m-3 dimensions = (microphysics_horizontal_loop_extent, microphysics_vertical_layer_dimension) type = real - kind = kind_phys + kind = pumas_r8 intent = in [diam_rain] standard_name = average_diameter_of_stratiform_rain_particle @@ -1015,13 +1015,13 @@ type = real kind = kind_phys intent = out -[micro_diam_rain] - standard_name = microphysics_average_diameter_of_stratiform_rain_particle +[pumas_diam_rain] + standard_name = pumas_average_diameter_of_stratiform_rain_particle long_name = microphysics average diameter of stratiform rain particle units = m dimensions = (microphysics_horizontal_loop_extent, microphysics_vertical_layer_dimension) type = real - kind = kind_phys + kind = pumas_r8 intent = in [diam_snow] standard_name = average_diameter_of_stratiform_snow_particle @@ -1031,13 +1031,13 @@ type = real kind = kind_phys intent = out -[micro_diam_snow] - standard_name = microphysics_average_diameter_of_stratiform_snow_particle +[pumas_diam_snow] + standard_name = pumas_average_diameter_of_stratiform_snow_particle long_name = microphysics average diameter of stratiform snow particle units = m dimensions = (microphysics_horizontal_loop_extent, microphysics_vertical_layer_dimension) type = real - kind = kind_phys + kind = pumas_r8 intent = in [graupice] standard_name = graupel_mixing_ratio_wrt_moist_air_and_condensed_water_of_new_state @@ -1047,13 +1047,13 @@ type = real kind = kind_phys intent = out -[micro_graupice] - standard_name = microphysics_graupel_mixing_ratio_wrt_moist_air_and_condensed_water_of_new_state +[pumas_graupice] + standard_name = pumas_graupel_mixing_ratio_wrt_moist_air_and_condensed_water_of_new_state long_name = microphysics graupel mixing ratio wrt moist air and condensed water of new state units = kg kg-1 dimensions = (microphysics_horizontal_loop_extent, microphysics_vertical_layer_dimension) type = real - kind = kind_phys + kind = pumas_r8 intent = in [numgraup_vol] standard_name = graupel_number_concentration_of_new_state @@ -1063,13 +1063,13 @@ type = real kind = kind_phys intent = out -[micro_numgraup_vol] - standard_name = microphysics_graupel_number_concentration_of_new_state +[pumas_numgraup_vol] + standard_name = pumas_graupel_number_concentration_of_new_state long_name = microphysics graupel number concentration of new state units = m-3 dimensions = (microphysics_horizontal_loop_extent, microphysics_vertical_layer_dimension) type = real - kind = kind_phys + kind = pumas_r8 intent = in [diam_graup] standard_name = average_diameter_of_stratiform_graupel_particle @@ -1079,13 +1079,13 @@ type = real kind = kind_phys intent = out -[micro_diam_graup] - standard_name = microphysics_average_diameter_of_stratiform_graupel_particle +[pumas_diam_graup] + standard_name = pumas_average_diameter_of_stratiform_graupel_particle long_name = microphysics average diameter of stratiform graupel particle units = m dimensions = (microphysics_horizontal_loop_extent, microphysics_vertical_layer_dimension) type = real - kind = kind_phys + kind = pumas_r8 intent = in [freq_graup] standard_name = fraction_of_gridcell_with_graupel @@ -1095,13 +1095,13 @@ type = real kind = kind_phys intent = out -[micro_freq_graup] - standard_name = microphysics_fraction_of_gridcell_with_graupel +[pumas_freq_graup] + standard_name = pumas_fraction_of_gridcell_with_graupel long_name = microphysics fraction of gridcell with graupel units = fraction dimensions = (microphysics_horizontal_loop_extent, microphysics_vertical_layer_dimension) type = real - kind = kind_phys + kind = pumas_r8 intent = in [freq_snow] standard_name = fraction_of_gridcell_with_snow @@ -1111,13 +1111,13 @@ type = real kind = kind_phys intent = out -[micro_freq_snow] - standard_name = microphysics_fraction_of_gridcell_with_snow +[pumas_freq_snow] + standard_name = pumas_fraction_of_gridcell_with_snow long_name = microphysics fraction of gridcell with snow units = fraction dimensions = (microphysics_horizontal_loop_extent, microphysics_vertical_layer_dimension) type = real - kind = kind_phys + kind = pumas_r8 intent = in [freq_rain] standard_name = fraction_of_gridcell_with_rain @@ -1127,13 +1127,13 @@ type = real kind = kind_phys intent = out -[micro_freq_rain] - standard_name = microphysics_fraction_of_gridcell_with_rain +[pumas_freq_rain] + standard_name = pumas_fraction_of_gridcell_with_rain long_name = microphysics fraction of gridcell with rain units = fraction dimensions = (microphysics_horizontal_loop_extent, microphysics_vertical_layer_dimension) type = real - kind = kind_phys + kind = pumas_r8 intent = in [frac_ice] standard_name = fraction_of_frozen_water_to_total_condensed_water @@ -1143,13 +1143,13 @@ type = real kind = kind_phys intent = out -[micro_frac_ice] - standard_name = microphysics_fraction_of_frozen_water_to_total_condensed_water +[pumas_frac_ice] + standard_name = pumas_fraction_of_frozen_water_to_total_condensed_water long_name = microphysics fraction of frozen water to total condensed water units = fraction dimensions = (microphysics_horizontal_loop_extent, microphysics_vertical_layer_dimension) type = real - kind = kind_phys + kind = pumas_r8 intent = in [frac_cldliq_tend] standard_name = fraction_of_cloud_liquid_tendency_applied_to_state @@ -1159,13 +1159,13 @@ type = real kind = kind_phys intent = out -[micro_frac_cldliq_tend] - standard_name = microphysics_fraction_of_cloud_liquid_tendency_applied_to_state +[pumas_frac_cldliq_tend] + standard_name = pumas_fraction_of_cloud_liquid_tendency_applied_to_state long_name = microphysics fraction of cloud liquid tendency applied to state units = fraction dimensions = (microphysics_horizontal_loop_extent, microphysics_vertical_layer_dimension) type = real - kind = kind_phys + kind = pumas_r8 intent = in [rain_evap] standard_name = rain_evaporation_rate_wrt_moist_air_and_condensed_water @@ -1175,13 +1175,13 @@ type = real kind = kind_phys intent = out -[micro_rain_evap] - standard_name = microphysics_rain_evaporation_rate_wrt_moist_air_and_condensed_water +[pumas_rain_evap] + standard_name = pumas_rain_evaporation_rate_wrt_moist_air_and_condensed_water long_name = microphysics rain evaporation rate wrt moist air and condensed water units = kg kg-1 s-1 dimensions = (microphysics_horizontal_loop_extent, microphysics_vertical_layer_dimension) type = real - kind = kind_phys + kind = pumas_r8 intent = in [errmsg] standard_name = ccpp_error_message diff --git a/schemes/pumas/micro_pumas_ccpp_dimensions_pre.F90 b/schemes/pumas/micro_pumas_ccpp_dimensions_pre.F90 index c3371149..7bf60c0b 100644 --- a/schemes/pumas/micro_pumas_ccpp_dimensions_pre.F90 +++ b/schemes/pumas/micro_pumas_ccpp_dimensions_pre.F90 @@ -43,37 +43,37 @@ end subroutine micro_pumas_ccpp_dimensions_pre_init !! \htmlinclude micro_pumas_ccpp_dimensions_pre_run.html subroutine micro_pumas_ccpp_dimensions_pre_run(ncol, nlev, nlevp1, & micro_ncol, micro_nlev, micro_nlevp1, micro_dust_nbins,& - airT_in, micro_airT, airq_in, micro_airq, & - cldliq_in, micro_cldliq, & - cldice_in, micro_cldice, & - micro_mg_num_steps, dtime, micro_timestep, & - numliq_in, micro_numliq, & - numice_in, micro_numice, & - rainliq_in, micro_rainliq, & - snowice_in, micro_snowice, & - numrain_in, micro_numrain, & - numsnow_in, micro_numsnow, & - graupice_in, micro_graupice, & - numgraup_in, micro_numgraup, & - relvar_in, micro_relvar, & + airT_in, pumas_airT, airq_in, pumas_airq, & + cldliq_in, pumas_cldliq, & + cldice_in, pumas_cldice, & + micro_mg_num_steps, dtime, pumas_timestep, & + numliq_in, pumas_numliq, & + numice_in, pumas_numice, & + rainliq_in, pumas_rainliq, & + snowice_in, pumas_snowice, & + numrain_in, pumas_numrain, & + numsnow_in, pumas_numsnow, & + graupice_in, pumas_graupice, & + numgraup_in, pumas_numgraup, & + relvar_in, pumas_relvar, & accre_enhan_in, pumas_accre_enhan, & - pmid_in, micro_pmid, & - pdel_in, micro_pdel, & - pint_in, micro_pint, & - strat_cldfrc_in, micro_strat_cldfrc, & - strat_liq_cldfrc_in, micro_strat_liq_cldfrc, & - strat_ice_cldfrc_in, micro_strat_ice_cldfrc, & - qsatfac_in, micro_qsatfac, & - naai_in, micro_naai, & - npccn_in, micro_npccn, & - rndst_in, micro_rndst, & - nacon_in, micro_nacon, & - snowice_tend_external_in, micro_snowice_tend_external, & - numsnow_tend_external_in, micro_numsnow_tend_external, & - effi_external_in, micro_effi_external, & - frzimm_in, micro_frzimm, & - frzcnt_in, micro_frzcnt, & - frzdep_in, micro_frzdep, & + pmid_in, pumas_pmid, & + pdel_in, pumas_pdel, & + pint_in, pumas_pint, & + strat_cldfrc_in, pumas_strat_cldfrc, & + strat_liq_cldfrc_in, pumas_strat_liq_cldfrc, & + strat_ice_cldfrc_in, pumas_strat_ice_cldfrc, & + qsatfac_in, pumas_qsatfac, & + naai_in, pumas_naai, & + npccn_in, pumas_npccn, & + rndst_in, pumas_rndst, & + nacon_in, pumas_nacon, & + snowice_tend_external_in, pumas_snowice_tend_external, & + numsnow_tend_external_in, pumas_numsnow_tend_external, & + effi_external_in, pumas_effi_external, & + frzimm_in, pumas_frzimm, & + frzcnt_in, pumas_frzcnt, & + frzdep_in, pumas_frzdep, & errmsg, errcode) !External dependencies: @@ -92,101 +92,101 @@ subroutine micro_pumas_ccpp_dimensions_pre_run(ncol, nlev, nlevp1, ! Air temperature (K) real(kind_phys), intent(in) :: airT_in(:, :) - real(kind_phys), intent(out) :: micro_airT(:, :) + real(pumas_r8), intent(out) :: pumas_airT(:, :) ! Water vapor mixing ratio wrt moist air and condensed water (kg kg-1) real(kind_phys), intent(in) :: airq_in(:, :) - real(kind_phys), intent(out) :: micro_airq(:, :) + real(pumas_r8), intent(out) :: pumas_airq(:, :) ! Cloud liquid water mixing ratio wrt moist air and condensed water (kg kg-1) real(kind_phys), intent(in) :: cldliq_in(:, :) - real(kind_phys), intent(out) :: micro_cldliq(:, :) + real(pumas_r8), intent(out) :: pumas_cldliq(:, :) ! Cloud ice mixing ratio wrt moist air and condensed water (kg kg-1) real(kind_phys), intent(in) :: cldice_in(:, :) - real(kind_phys), intent(out) :: micro_cldice(:, :) + real(pumas_r8), intent(out) :: pumas_cldice(:, :) ! Substepping in microphysics variables integer, intent(in) :: micro_mg_num_steps real(kind_phys), intent(in) :: dtime - real(kind_phys), intent(out) :: micro_timestep + real(pumas_r8), intent(out) :: pumas_timestep ! Mass number concentration of cloud liquid water wrt moist air and condensed water (kg-1) real(kind_phys), intent(in) :: numliq_in(:, :) - real(kind_phys), intent(out) :: micro_numliq(:, :) + real(pumas_r8), intent(out) :: pumas_numliq(:, :) ! Mass number concentration of cloud ice wrt moist air and condensed water (kg-1) real(kind_phys), intent(in) :: numice_in(:, :) - real(kind_phys), intent(out) :: micro_numice(:, :) + real(pumas_r8), intent(out) :: pumas_numice(:, :) ! Rain mixing ratio wrt moist air and condensed water (kg kg-1) real(kind_phys), intent(in) :: rainliq_in(:, :) - real(kind_phys), intent(out) :: micro_rainliq(:, :) + real(pumas_r8), intent(out) :: pumas_rainliq(:, :) ! Snow mixing ratio wrt moist air and condensed water (kg kg-1) real(kind_phys), intent(in) :: snowice_in(:, :) - real(kind_phys), intent(out) :: micro_snowice(:, :) + real(pumas_r8), intent(out) :: pumas_snowice(:, :) ! Mass number concentration of rain wrt moist air and condensed water (kg-1) real(kind_phys), intent(in) :: numrain_in(:, :) - real(kind_phys), intent(out) :: micro_numrain(:, :) + real(pumas_r8), intent(out) :: pumas_numrain(:, :) ! Mass number concentration of snow wrt moist air and condensed water (kg-1) real(kind_phys), intent(in) :: numsnow_in(:, :) - real(kind_phys), intent(out) :: micro_numsnow(:, :) + real(pumas_r8), intent(out) :: pumas_numsnow(:, :) ! Graupel mixing ratio wrt moist air and condensed water (kg kg-1) real(kind_phys), intent(in) :: graupice_in(:, :) - real(kind_phys), intent(out) :: micro_graupice(:, :) + real(pumas_r8), intent(out) :: pumas_graupice(:, :) ! Mass number concentration of graupel wrt moist air and condensed water (kg-1) real(kind_phys), intent(in) :: numgraup_in(:, :) - real(kind_phys), intent(out) :: micro_numgraup(:, :) + real(pumas_r8), intent(out) :: pumas_numgraup(:, :) ! Relative variance of cloud water (1) real(kind_phys), intent(in) :: relvar_in(:, :) - real(kind_phys), intent(out) :: micro_relvar(:, :) + real(pumas_r8), intent(out) :: pumas_relvar(:, :) ! Accretion enhancement factor (1) real(kind_phys), intent(in) :: accre_enhan_in(:, :) real(pumas_r8), intent(out) :: pumas_accre_enhan(:, :) ! Air pressure (Pa) real(kind_phys), intent(in) :: pmid_in(:, :) - real(kind_phys), intent(out) :: micro_pmid(:, :) + real(pumas_r8), intent(out) :: pumas_pmid(:, :) ! Air pressure thickness (Pa) real(kind_phys), intent(in) :: pdel_in(:, :) - real(kind_phys), intent(out) :: micro_pdel(:, :) + real(pumas_r8), intent(out) :: pumas_pdel(:, :) ! Air pressure at interfaces (Pa) real(kind_phys), intent(in) :: pint_in(:, :) - real(kind_phys), intent(out) :: micro_pint(:, :) + real(pumas_r8), intent(out) :: pumas_pint(:, :) ! Stratiform cloud area fraction (fraction) real(kind_phys), intent(in) :: strat_cldfrc_in(:, :) - real(kind_phys), intent(out) :: micro_strat_cldfrc(:, :) + real(pumas_r8), intent(out) :: pumas_strat_cldfrc(:, :) ! Stratiform cloud liquid area fraction (fraction) real(kind_phys), intent(in) :: strat_liq_cldfrc_in(:, :) - real(kind_phys), intent(out) :: micro_strat_liq_cldfrc(:, :) + real(pumas_r8), intent(out) :: pumas_strat_liq_cldfrc(:, :) ! Stratiform cloud ice area fraction (fraction) real(kind_phys), intent(in) :: strat_ice_cldfrc_in(:, :) - real(kind_phys), intent(out) :: micro_strat_ice_cldfrc(:, :) + real(pumas_r8), intent(out) :: pumas_strat_ice_cldfrc(:, :) ! Subgrid cloud water saturation scaling factor (1) real(kind_phys), intent(in) :: qsatfac_in(:, :) - real(kind_phys), intent(out) :: micro_qsatfac(:, :) + real(pumas_r8), intent(out) :: pumas_qsatfac(:, :) ! Tendency of activated ice nuclei mass number concentration (kg-1 s-1) real(kind_phys), intent(in) :: naai_in(:, :) - real(kind_phys), intent(out) :: micro_naai(:, :) + real(pumas_r8), intent(out) :: pumas_naai(:, :) ! Tendency of activated cloud condensation nuclei mass number concentration (kg-1 s-1) real(kind_phys), intent(in) :: npccn_in(:, :) - real(kind_phys), intent(out) :: micro_npccn(:, :) + real(pumas_r8), intent(out) :: pumas_npccn(:, :) ! Dust radii by size bin (m) real(kind_phys), intent(in) :: rndst_in(:, :, :) - real(kind_phys), intent(out) :: micro_rndst(:, micro_nlev, :) + real(pumas_r8), intent(out) :: pumas_rndst(:, micro_nlev, :) ! Dust number concentration by size bin (m-3) real(kind_phys), intent(in) :: nacon_in(:, :, :) - real(kind_phys), intent(out) :: micro_nacon(:, micro_nlev, :) + real(pumas_r8), intent(out) :: pumas_nacon(:, micro_nlev, :) ! Tendency of snow mixing ratio wrt moist air and condensed water from external microphysics (kg kg-1 s-1) real(kind_phys), intent(in) :: snowice_tend_external_in(:, :) - real(kind_phys), intent(out) :: micro_snowice_tend_external(:, :) + real(pumas_r8), intent(out) :: pumas_snowice_tend_external(:, :) ! Tendency of mass number concentration of snow wrt moist air and condensed water from external microphysics (kg-1 s-1) real(kind_phys), intent(in) :: numsnow_tend_external_in(:, :) - real(kind_phys), intent(out) :: micro_numsnow_tend_external(:, :) + real(pumas_r8), intent(out) :: pumas_numsnow_tend_external(:, :) ! Effective radius of stratiform cloud ice particle from external microphysics (m) real(kind_phys), intent(in) :: effi_external_in(:, :) - real(kind_phys), intent(out) :: micro_effi_external(:, :) + real(pumas_r8), intent(out) :: pumas_effi_external(:, :) ! Tendency of cloud liquid droplet number concentration due to immersion freezing (cm-3) real(kind_phys), intent(in) :: frzimm_in(:, :) - real(kind_phys), intent(out) :: micro_frzimm(:, :) + real(pumas_r8), intent(out) :: pumas_frzimm(:, :) ! Tendency of cloud liquid droplet number concentration due to contact freezing (cm-3) real(kind_phys), intent(in) :: frzcnt_in(:, :) - real(kind_phys), intent(out) :: micro_frzcnt(:, :) + real(pumas_r8), intent(out) :: pumas_frzcnt(:, :) ! Tendency of cloud ice number concentration due to deposition nucleation (cm-3) real(kind_phys), intent(in) :: frzdep_in(:, :) - real(kind_phys), intent(out) :: micro_frzdep(:, :) + real(pumas_r8), intent(out) :: pumas_frzdep(:, :) character(len=512), intent(out) :: errmsg integer, intent(out) :: errcode @@ -195,42 +195,42 @@ subroutine micro_pumas_ccpp_dimensions_pre_run(ncol, nlev, nlevp1, errmsg = '' errcode = 0 - micro_timestep = dtime/micro_mg_num_steps + pumas_timestep = dtime/micro_mg_num_steps !+ IH ! For now we just use ncols = micro_ncol, but we need to constrain the vertical extent for the microphysical fields. ! Therefore micro_xxx(:ncol,:) = xxx(:,::) !- IH - micro_airT(:ncol,:) = airT_in(:,::) - micro_airq(:ncol,:) = airq_in(:,::) - micro_cldliq(:ncol,:) = cldliq_in(:,::) - micro_cldice(:ncol,:) = cldice_in(:,::) - micro_numliq(:ncol,:) = numliq_in(:,::) - micro_numice(:ncol,:) = numice_in(:,::) - micro_rainliq(:ncol,:) = rainliq_in(:,::) - micro_snowice(:ncol,:) = snowice_in(:,::) - micro_numrain(:ncol,:) = numrain_in(:,::) - micro_numsnow(:ncol,:) = numsnow_in(:,::) - micro_graupice(:ncol,:) = graupice_in(:,::) - micro_numgraup(:ncol,:) = numgraup_in(:,::) - micro_relvar(:ncol,:) = relvar_in(:,::) + pumas_airT(:ncol,:) = real(airT_in(:,::), pumas_r8) + pumas_airq(:ncol,:) = real(airq_in(:,::), pumas_r8) + pumas_cldliq(:ncol,:) = real(cldliq_in(:,::), pumas_r8) + pumas_cldice(:ncol,:) = real(cldice_in(:,::), pumas_r8) + pumas_numliq(:ncol,:) = real(numliq_in(:,::), pumas_r8) + pumas_numice(:ncol,:) = real(numice_in(:,::), pumas_r8) + pumas_rainliq(:ncol,:) = real(rainliq_in(:,::), pumas_r8) + pumas_snowice(:ncol,:) = real(snowice_in(:,::), pumas_r8) + pumas_numrain(:ncol,:) = real(numrain_in(:,::), pumas_r8) + pumas_numsnow(:ncol,:) = real(numsnow_in(:,::), pumas_r8) + pumas_graupice(:ncol,:) = real(graupice_in(:,::), pumas_r8) + pumas_numgraup(:ncol,:) = real(numgraup_in(:,::), pumas_r8) + pumas_relvar(:ncol,:) = real(relvar_in(:,::), pumas_r8) pumas_accre_enhan(:ncol,:) = real(accre_enhan_in(:,::), pumas_r8) - micro_pmid(:ncol,:) = pmid_in(:,::) - micro_pdel(:ncol,:) = pdel_in(:,::) - micro_pint(:ncol,:) = pint_in(:,:micro_nlevp1) - micro_strat_cldfrc(:ncol,:) = strat_cldfrc_in(:,::) - micro_strat_liq_cldfrc(:ncol,:) = strat_liq_cldfrc_in(:,::) - micro_strat_ice_cldfrc(:ncol,:) = strat_ice_cldfrc_in(:,::) - micro_qsatfac(:ncol,:) = qsatfac_in(:,::) - micro_naai(:ncol,:) = naai_in(:,::) - micro_npccn(:ncol,:) = npccn_in(:,::) - micro_rndst(:ncol,:,:) = rndst_in(:,:micro_nlev,:) - micro_nacon(:ncol,:,:) = nacon_in(:,:micro_nlev,:) - micro_snowice_tend_external(:ncol,:) = snowice_tend_external_in(:,::) - micro_numsnow_tend_external(:ncol,:) = numsnow_tend_external_in(:,::) - micro_effi_external(:ncol,:) = effi_external_in(:,::) - micro_frzcnt(:ncol,:) = frzcnt_in(:,::) - micro_frzdep(:ncol,:) = frzdep_in(:,::) + pumas_pmid(:ncol,:) = real(pmid_in(:,::), pumas_r8) + pumas_pdel(:ncol,:) = real(pdel_in(:,::), pumas_r8) + pumas_pint(:ncol,:) = real(pint_in(:,:micro_nlevp1), pumas_r8) + pumas_strat_cldfrc(:ncol,:) = real(strat_cldfrc_in(:,::), pumas_r8) + pumas_strat_liq_cldfrc(:ncol,:) = real(strat_liq_cldfrc_in(:,::), pumas_r8) + pumas_strat_ice_cldfrc(:ncol,:) = real(strat_ice_cldfrc_in(:,::), pumas_r8) + pumas_qsatfac(:ncol,:) = real(qsatfac_in(:,::), pumas_r8) + pumas_naai(:ncol,:) = real(naai_in(:,::), pumas_r8) + pumas_npccn(:ncol,:) = real(npccn_in(:,::), pumas_r8) + pumas_rndst(:ncol,:,:) = real(rndst_in(:,:micro_nlev,:), pumas_r8) + pumas_nacon(:ncol,:,:) = real(nacon_in(:,:micro_nlev,:), pumas_r8) + pumas_snowice_tend_external(:ncol,:) = real(snowice_tend_external_in(:,::), pumas_r8) + pumas_numsnow_tend_external(:ncol,:) = real(numsnow_tend_external_in(:,::), pumas_r8) + pumas_effi_external(:ncol,:) = real(effi_external_in(:,::), pumas_r8) + pumas_frzcnt(:ncol,:) = real(frzcnt_in(:,::), pumas_r8) + pumas_frzdep(:ncol,:) = real(frzdep_in(:,::), pumas_r8) end subroutine micro_pumas_ccpp_dimensions_pre_run diff --git a/schemes/pumas/micro_pumas_ccpp_dimensions_pre.meta b/schemes/pumas/micro_pumas_ccpp_dimensions_pre.meta index 9defec4f..573a29b6 100644 --- a/schemes/pumas/micro_pumas_ccpp_dimensions_pre.meta +++ b/schemes/pumas/micro_pumas_ccpp_dimensions_pre.meta @@ -139,13 +139,13 @@ type = real kind = kind_phys intent = in -[micro_airT] - standard_name = microphysics_air_temperature +[pumas_airT] + standard_name = pumas_air_temperature long_name = microphysics air temperature of new state units = K dimensions = (microphysics_horizontal_loop_extent, microphysics_vertical_layer_dimension) type = real - kind = kind_phys + kind = pumas_r8 intent = out [airq_in] standard_name = water_vapor_mixing_ratio_wrt_moist_air_and_condensed_water @@ -156,13 +156,13 @@ kind = kind_phys intent = in advected = true -[micro_airq] - standard_name = microphysics_water_vapor_mixing_ratio_wrt_moist_air_and_condensed_water +[pumas_airq] + standard_name = pumas_water_vapor_mixing_ratio_wrt_moist_air_and_condensed_water long_name = microphysics water vapor mixing ratio wrt moist air and condensed water of new state units = kg kg-1 dimensions = (microphysics_horizontal_loop_extent, microphysics_vertical_layer_dimension) type = real - kind = kind_phys + kind = pumas_r8 intent = out [cldliq_in] standard_name = cloud_liquid_water_mixing_ratio_wrt_moist_air_and_condensed_water @@ -173,13 +173,13 @@ kind = kind_phys intent = in advected = true -[micro_cldliq] - standard_name = microphysics_cloud_liquid_water_mixing_ratio_wrt_moist_air_and_condensed_water +[pumas_cldliq] + standard_name = pumas_cloud_liquid_water_mixing_ratio_wrt_moist_air_and_condensed_water long_name = microphysics cloud liquid wrt moist air and condensed water of new state units = kg kg-1 dimensions = (microphysics_horizontal_loop_extent, microphysics_vertical_layer_dimension) type = real - kind = kind_phys + kind = pumas_r8 intent = out [cldice_in] standard_name = cloud_ice_mixing_ratio_wrt_moist_air_and_condensed_water @@ -190,13 +190,13 @@ kind = kind_phys intent = in advected = true -[micro_cldice] - standard_name = microphysics_cloud_ice_mixing_ratio_wrt_moist_air_and_condensed_water +[pumas_cldice] + standard_name = pumas_cloud_ice_mixing_ratio_wrt_moist_air_and_condensed_water long_name = microphysics cloud ice mixing ratio wrt moist air and condensed water of new state units = kg kg-1 dimensions = (microphysics_horizontal_loop_extent, microphysics_vertical_layer_dimension) type = real - kind = kind_phys + kind = pumas_r8 intent = out [micro_mg_num_steps] standard_name = number_of_microphysics_substeps @@ -211,12 +211,12 @@ kind = kind_phys dimensions = () intent = in -[micro_timestep] +[pumas_timestep] standard_name = timestep_for_microphysics units = s dimensions = () type = real - kind = kind_phys + kind = pumas_r8 intent = out [numliq_in] standard_name = mass_number_concentration_of_cloud_liquid_water_wrt_moist_air_and_condensed_water @@ -227,13 +227,13 @@ kind = kind_phys intent = in advected = true -[micro_numliq] - standard_name = microphysics_mass_number_concentration_of_cloud_liquid_water_wrt_moist_air_and_condensed_water +[pumas_numliq] + standard_name = pumas_mass_number_concentration_of_cloud_liquid_water_wrt_moist_air_and_condensed_water long_name = microphysics mass number concentration of cloud liquid wrt moist air and condensed water of new state units = kg-1 dimensions = (microphysics_horizontal_loop_extent, microphysics_vertical_layer_dimension) type = real - kind = kind_phys + kind = pumas_r8 intent = out [numice_in] standard_name = mass_number_concentration_of_cloud_ice_wrt_moist_air_and_condensed_water @@ -244,13 +244,13 @@ kind = kind_phys intent = in advected = true -[micro_numice] - standard_name = microphysics_mass_number_concentration_of_cloud_ice_wrt_moist_air_and_condensed_water +[pumas_numice] + standard_name = pumas_mass_number_concentration_of_cloud_ice_wrt_moist_air_and_condensed_water long_name = microphysics mass number concentration of cloud ice wrt moist air and condensed water of new state units = kg-1 dimensions = (microphysics_horizontal_loop_extent, microphysics_vertical_layer_dimension) type = real - kind = kind_phys + kind = pumas_r8 intent = out [rainliq_in] standard_name = rain_mixing_ratio_wrt_moist_air_and_condensed_water @@ -261,13 +261,13 @@ kind = kind_phys intent = in advected = true -[micro_rainliq] - standard_name = microphysics_rain_mixing_ratio_wrt_moist_air_and_condensed_water +[pumas_rainliq] + standard_name = pumas_rain_mixing_ratio_wrt_moist_air_and_condensed_water long_name = microphysics rain mixing ratio wrt moist air and condensed water of new state units = kg kg-1 dimensions = (microphysics_horizontal_loop_extent, microphysics_vertical_layer_dimension) type = real - kind = kind_phys + kind = pumas_r8 intent = out [snowice_in] standard_name = snow_mixing_ratio_wrt_moist_air_and_condensed_water @@ -278,13 +278,13 @@ kind = kind_phys intent = in advected = true -[micro_snowice] - standard_name = microphysics_snow_mixing_ratio_wrt_moist_air_and_condensed_water +[pumas_snowice] + standard_name = pumas_snow_mixing_ratio_wrt_moist_air_and_condensed_water long_name = microphysics snow mixing ratio wrt moist air and condensed water of new state units = kg kg-1 dimensions = (microphysics_horizontal_loop_extent, microphysics_vertical_layer_dimension) type = real - kind = kind_phys + kind = pumas_r8 intent = out [numrain_in] standard_name = mass_number_concentration_of_rain_wrt_moist_air_and_condensed_water @@ -295,13 +295,13 @@ kind = kind_phys intent = in advected = true -[micro_numrain] - standard_name = microphysics_mass_number_concentration_of_rain_wrt_moist_air_and_condensed_water +[pumas_numrain] + standard_name = pumas_mass_number_concentration_of_rain_wrt_moist_air_and_condensed_water long_name = microphysics mass number concentration of rain wrt moist air and condensed water of new state units = kg-1 dimensions = (microphysics_horizontal_loop_extent, microphysics_vertical_layer_dimension) type = real - kind = kind_phys + kind = pumas_r8 intent = out [numsnow_in] standard_name = mass_number_concentration_of_snow_wrt_moist_air_and_condensed_water @@ -312,13 +312,13 @@ kind = kind_phys intent = in advected = true -[micro_numsnow] - standard_name = microphysics_mass_number_concentration_of_snow_wrt_moist_air_and_condensed_water +[pumas_numsnow] + standard_name = pumas_mass_number_concentration_of_snow_wrt_moist_air_and_condensed_water long_name = microphysics mass number concentration of snow wrt moist air and condensed water of new state units = kg-1 dimensions = (microphysics_horizontal_loop_extent, microphysics_vertical_layer_dimension) type = real - kind = kind_phys + kind = pumas_r8 intent = out [graupice_in] standard_name = graupel_mixing_ratio_wrt_moist_air_and_condensed_water @@ -329,13 +329,13 @@ kind = kind_phys intent = in advected = true -[micro_graupice] - standard_name = microphysics_graupel_mixing_ratio_wrt_moist_air_and_condensed_water +[pumas_graupice] + standard_name = pumas_graupel_mixing_ratio_wrt_moist_air_and_condensed_water long_name = microphysics graupel mixing ratio wrt moist air and condensed water of new state units = kg kg-1 dimensions = (microphysics_horizontal_loop_extent, microphysics_vertical_layer_dimension) type = real - kind = kind_phys + kind = pumas_r8 intent = out [numgraup_in] standard_name = mass_number_concentration_of_graupel_wrt_moist_air_and_condensed_water @@ -346,13 +346,13 @@ kind = kind_phys intent = in advected = true -[micro_numgraup] - standard_name = microphysics_mass_number_concentration_of_graupel_wrt_moist_air_and_condensed_water +[pumas_numgraup] + standard_name = pumas_mass_number_concentration_of_graupel_wrt_moist_air_and_condensed_water long_name = microphysics mass number concentration of graupel wrt moist air and condensed water of new state units = kg-1 dimensions = (microphysics_horizontal_loop_extent, microphysics_vertical_layer_dimension) type = real - kind = kind_phys + kind = pumas_r8 intent = out [relvar_in] standard_name = relative_variance_of_subgrid_cloud_condensate_distribution @@ -362,13 +362,13 @@ type = real kind = kind_phys intent = in -[micro_relvar] - standard_name = microphysics_relative_variance_of_cloud_water +[pumas_relvar] + standard_name = pumas_relative_variance_of_cloud_water long_name = microphysics relative variance of cloud water units = 1 dimensions = (microphysics_horizontal_loop_extent, microphysics_vertical_layer_dimension) type = real - kind = kind_phys + kind = pumas_r8 intent = out [accre_enhan_in] standard_name = accretion_enhancement_factor @@ -394,13 +394,13 @@ type = real kind = kind_phys intent = in -[micro_pmid] - standard_name = microphysics_air_pressure +[pumas_pmid] + standard_name = pumas_air_pressure long_name = microphysics air pressure units = Pa dimensions = (microphysics_horizontal_loop_extent, microphysics_vertical_layer_dimension) type = real - kind = kind_phys + kind = pumas_r8 intent = out [pdel_in] standard_name = air_pressure_thickness @@ -410,13 +410,13 @@ type = real kind = kind_phys intent = in -[micro_pdel] - standard_name = microphysics_air_pressure_thickness +[pumas_pdel] + standard_name = pumas_air_pressure_thickness long_name = microphysics air pressure thickness units = Pa dimensions = (microphysics_horizontal_loop_extent, microphysics_vertical_layer_dimension) type = real - kind = kind_phys + kind = pumas_r8 intent = out [pint_in] standard_name = air_pressure_at_interface @@ -426,13 +426,13 @@ type = real kind = kind_phys intent = in -[micro_pint] - standard_name = microphysics_air_pressure_at_interface +[pumas_pint] + standard_name = pumas_air_pressure_at_interface long_name = microphysics air pressure at interface units = Pa dimensions = (microphysics_horizontal_loop_extent, microphysics_vertical_interface_dimension) type = real - kind = kind_phys + kind = pumas_r8 intent = out [strat_cldfrc_in] standard_name = stratiform_cloud_area_fraction @@ -442,13 +442,13 @@ type = real kind = kind_phys intent = in -[micro_strat_cldfrc] - standard_name = microphysics_stratiform_cloud_area_fraction +[pumas_strat_cldfrc] + standard_name = pumas_stratiform_cloud_area_fraction long_name = microphysics stratiform cloud area fraction units = fraction dimensions = (microphysics_horizontal_loop_extent, microphysics_vertical_layer_dimension) type = real - kind = kind_phys + kind = pumas_r8 intent = out [strat_liq_cldfrc_in] standard_name = stratiform_cloud_liquid_area_fraction @@ -458,13 +458,13 @@ type = real kind = kind_phys intent = in -[micro_strat_liq_cldfrc] - standard_name = microphysics_stratiform_cloud_liquid_area_fraction +[pumas_strat_liq_cldfrc] + standard_name = pumas_stratiform_cloud_liquid_area_fraction long_name = microphysics stratiform cloud liquid area fraction units = fraction dimensions = (microphysics_horizontal_loop_extent, microphysics_vertical_layer_dimension) type = real - kind = kind_phys + kind = pumas_r8 intent = out [strat_ice_cldfrc_in] standard_name = stratiform_cloud_ice_area_fraction @@ -474,13 +474,13 @@ type = real kind = kind_phys intent = in -[micro_strat_ice_cldfrc] - standard_name = microphysics_stratiform_cloud_ice_area_fraction +[pumas_strat_ice_cldfrc] + standard_name = pumas_stratiform_cloud_ice_area_fraction long_name = microphysics stratiform cloud ice area fraction units = fraction dimensions = (microphysics_horizontal_loop_extent, microphysics_vertical_layer_dimension) type = real - kind = kind_phys + kind = pumas_r8 intent = out [qsatfac_in] standard_name = subgrid_cloud_water_saturation_scaling_factor_for_microphysics @@ -490,13 +490,13 @@ type = real kind = kind_phys intent = in -[micro_qsatfac] - standard_name = microphysics_subgrid_cloud_water_saturation_scaling_factor +[pumas_qsatfac] + standard_name = pumas_subgrid_cloud_water_saturation_scaling_factor long_name = microphysics subgrid cloud water saturation scaling factor units = 1 dimensions = (microphysics_horizontal_loop_extent, microphysics_vertical_layer_dimension) type = real - kind = kind_phys + kind = pumas_r8 intent = out [naai_in] standard_name = tendency_of_activated_ice_nuclei_mass_number_concentration @@ -506,13 +506,13 @@ type = real kind = kind_phys intent = in -[micro_naai] - standard_name = microphysics_tendency_of_activated_ice_nuclei_mass_number_concentration +[pumas_naai] + standard_name = tendency_of_pumas_activated_ice_nuclei_mass_number_concentration long_name = microphysics tendency of activated ice nuclei mass number concentration units = kg-1 s-1 dimensions = (microphysics_horizontal_loop_extent, microphysics_vertical_layer_dimension) type = real - kind = kind_phys + kind = pumas_r8 intent = out [npccn_in] standard_name = tendency_of_activated_cloud_condensation_nuclei_mass_number_concentration @@ -522,13 +522,13 @@ type = real kind = kind_phys intent = in -[micro_npccn] - standard_name = microphysics_tendency_of_activated_cloud_condensation_nuclei_mass_number_concentration +[pumas_npccn] + standard_name = tendency_of_pumas_activated_cloud_condensation_nuclei_mass_number_concentration long_name = microphysics tendency of activated cloud condensation nuclei mass number concentration units = kg-1 s-1 dimensions = (microphysics_horizontal_loop_extent, microphysics_vertical_layer_dimension) type = real - kind = kind_phys + kind = pumas_r8 intent = out [rndst_in] standard_name = dust_radii_by_size_bin @@ -538,13 +538,13 @@ type = real kind = kind_phys intent = in -[micro_rndst] - standard_name = microphysics_dust_radii_by_size_bin +[pumas_rndst] + standard_name = pumas_dust_radii_by_size_bin long_name = microphysics dust bin radii units = m dimensions = (microphysics_horizontal_loop_extent, microphysics_vertical_layer_dimension, dust_size_bins_dimension) type = real - kind = kind_phys + kind = pumas_r8 intent = out [nacon_in] standard_name = dust_number_concentration_by_size_bin_for_contact_freezing @@ -554,64 +554,62 @@ type = real kind = kind_phys intent = in -[micro_nacon] - standard_name = microphysics_dust_number_concentration_by_size_bin +[pumas_nacon] + standard_name = pumas_dust_number_concentration_by_size_bin long_name = microphysics dust number concentration by size bin units = m-3 dimensions = (microphysics_horizontal_loop_extent, microphysics_vertical_layer_dimension, dust_size_bins_dimension) type = real - kind = kind_phys + kind = pumas_r8 intent = out [snowice_tend_external_in] - standard_name = tendency_of_snow_mixing_ratio_wrt_moist_air_and_condensed_water_from_external_microphysics + standard_name = tendency_of_snow_mixing_ratio_wrt_moist_air_and_condensed_water_from_external long_name = tendency of snow mixing ratio wrt moist air and condensed water from external microphysics units = kg kg-1 s-1 dimensions = (horizontal_loop_extent, vertical_layer_dimension) type = real kind = kind_phys intent = in - constituent = true -[micro_snowice_tend_external] - standard_name = microphysics_tendency_of_snow_mixing_ratio_wrt_moist_air_and_condensed_water_from_external_microphysics +[pumas_snowice_tend_external] + standard_name = tendency_of_pumas_snow_mixing_ratio_wrt_moist_air_and_condensed_water_from_external long_name = microphysics tendency of snow mixing ratio wrt moist air and condensed water from external microphysics units = kg kg-1 s-1 dimensions = (microphysics_horizontal_loop_extent, microphysics_vertical_layer_dimension) type = real - kind = kind_phys + kind = pumas_r8 intent = out [numsnow_tend_external_in] - standard_name = tendency_of_mass_number_concentration_of_snow_wrt_moist_air_and_condensed_water_from_external_microphysics + standard_name = tendency_of_mass_number_concentration_of_snow_wrt_moist_air_and_condensed_water_from_external long_name = tendency of mass number concentration of snow wrt moist air and condensed water from external microphysics units = kg-1 s-1 dimensions = (horizontal_loop_extent, vertical_layer_dimension) type = real kind = kind_phys intent = in - constituent = true -[micro_numsnow_tend_external] - standard_name = microphysics_tendency_of_mass_number_concentration_of_snow_wrt_moist_air_and_condensed_water_from_external_microphysics +[pumas_numsnow_tend_external] + standard_name = tendency_of_pumas_mass_number_concentration_of_snow_wrt_moist_air_and_condensed_water_from_external long_name = microphysics tendency of mass number concentration of snow wrt moist air and condensed water from external microphysics units = kg-1 s-1 dimensions = (microphysics_horizontal_loop_extent, microphysics_vertical_layer_dimension) type = real - kind = kind_phys + kind = pumas_r8 intent = out [effi_external_in] - standard_name = effective_radius_of_stratiform_cloud_ice_particle_from_external_microphysics + standard_name = effective_radius_of_stratiform_cloud_ice_particle long_name = effective radius of stratiform cloud ice particle from external microphysics units = micron dimensions = (horizontal_loop_extent, vertical_layer_dimension) type = real kind = kind_phys intent = in -[micro_effi_external] - standard_name = microphysics_effective_radius_of_stratiform_cloud_ice_particle_from_external_microphysics +[pumas_effi_external] + standard_name = pumas_effective_radius_of_stratiform_cloud_ice_particle_from_external long_name = microphysics effective radius of stratiform cloud ice particle from external microphysics - units = m + units = micron dimensions = (microphysics_horizontal_loop_extent, microphysics_vertical_layer_dimension) type = real - kind = kind_phys + kind = pumas_r8 intent = out [frzimm_in] standard_name = tendency_of_cloud_liquid_droplet_number_concentration_due_to_immersion_freezing @@ -621,13 +619,13 @@ type = real kind = kind_phys intent = in -[micro_frzimm] - standard_name = microphysics_tendency_of_cloud_liquid_droplet_number_concentration_due_to_immersion_freezing +[pumas_frzimm] + standard_name = tendency_of_pumas_cloud_liquid_droplet_number_concentration_due_to_immersion_freezing long_name = microphysics tendency of cloud liquid droplet number concentration due to immersion freezing units = cm-3 dimensions = (microphysics_horizontal_loop_extent, microphysics_vertical_layer_dimension) type = real - kind = kind_phys + kind = pumas_r8 intent = out [frzcnt_in] standard_name = tendency_of_cloud_liquid_droplet_number_concentration_due_to_contact_freezing @@ -637,13 +635,13 @@ type = real kind = kind_phys intent = in -[micro_frzcnt] - standard_name = microphysics_tendency_of_cloud_liquid_droplet_number_concentration_due_to_contact_freezing +[pumas_frzcnt] + standard_name = tendency_of_pumas_cloud_liquid_droplet_number_concentration_due_to_contact_freezing long_name = microphysics tendency of cloud liquid droplet number concentration due to contact freezing units = cm-3 dimensions = (microphysics_horizontal_loop_extent, microphysics_vertical_layer_dimension) type = real - kind = kind_phys + kind = pumas_r8 intent = out [frzdep_in] standard_name = tendency_of_cloud_ice_number_concentration_due_to_deposition_nucleation @@ -653,13 +651,13 @@ type = real kind = kind_phys intent = in -[micro_frzdep] - standard_name = microphysics_ +[pumas_frzdep] + standard_name = tendency_of_pumas_cloud_ice_number_concentration_due_to_deposition_nucleation long_name = microphysics tendency of cloud ice number concentration due to deposition nucleation units = cm-3 dimensions = (microphysics_horizontal_loop_extent, microphysics_vertical_layer_dimension) type = real - kind = kind_phys + kind = pumas_r8 intent = out [errmsg] standard_name = ccpp_error_message diff --git a/schemes/pumas/pumas_pre_main_namelist.xml b/schemes/pumas/pumas_pre_main_namelist.xml index c0e0e583..05dd56c1 100644 --- a/schemes/pumas/pumas_pre_main_namelist.xml +++ b/schemes/pumas/pumas_pre_main_namelist.xml @@ -372,7 +372,7 @@ microphys micro_mg_nl - autoconverion_to_snow_size_threshold + autoconversion_to_snow_size_threshold um real kind_phys diff --git a/schemes/sima_diagnostics/pumas_diagnostics_calling.F90 b/schemes/sima_diagnostics/pumas_diagnostics_calling.F90 index 291d8a21..8be01c52 100644 --- a/schemes/sima_diagnostics/pumas_diagnostics_calling.F90 +++ b/schemes/sima_diagnostics/pumas_diagnostics_calling.F90 @@ -27,19 +27,21 @@ subroutine pumas_diagnostics_init(errmsg, errflg) errmsg = '' errflg = 0 - + end subroutine pumas_diagnostics_init !> \section arg_table_pumas_diagnostics_run Argument Table !! \htmlinclude pumas_diagnostics_run.html - subroutine pumas_diagnostics_run(proc_rates,qcsinksum_rate1ord,naai,npccn,rndst,nacon,tlat,qvlat,qctend,qitend,nctend,nitend,qrtend,qstend, & - nrtend,nstend,qgtend,ngtend,effc,effc_fn,effi,sadice,sadsnow,prect,preci,nevapr,am_evp_st, & - prain,cmeout,deffi,pgamrad,lamcrad,qsout,dsout,qgout,ngout,dgout,lflx,iflx,gflx,rflx,sflx, & - qrout,reff_rain,reff_snow,reff_grau,nrout,nsout,refl,arefl,areflz,frefl,csrfl,acsrfl,fcsrfl, & - refl10cm, reflz10cm,rercld,ncai,ncal,qrout2,qsout2,nrout2,nsout2,drout2,dsout2,qgout2,ngout2,dgout2, & - freqg,freqs,freqr,nfice,qcrat,proc_rates,errstring,tnd_qsnow,tnd_nsnow,re_ice,prer_evap,frzimm, & - frzcnt,frzdep, errmsg, errflg) + subroutine pumas_diagnostics_run(proc_rates,qcsinksum_rate1ord,naai,npccn,rndst,nacon,tlat,qvlat,qctend,qitend,nctend, & + nitend,qrtend,qstend, & + nrtend,nstend,qgtend,ngtend,effc,effc_fn,effi,sadice,sadsnow,prect,preci,nevapr,am_evp_st, & + prain,cmeout,deffi,pgamrad,lamcrad,qsout,dsout,qgout,ngout,dgout,lflx,iflx,gflx,rflx,sflx, & + qrout,reff_rain,reff_snow,reff_grau,nrout,nsout,refl,arefl,areflz,frefl,csrfl,acsrfl,fcsrfl,& + refl10cm, reflz10cm,rercld,ncai,ncal,qrout2,qsout2,nrout2,nsout2,drout2,dsout2,qgout2, & + ngout2,dgout2, & + freqg,freqs,freqr,nfice,qcrat,prer_evap, & + errmsg, errflg) use cam_history, only: history_in_field diff --git a/test/test_suites/suite_pumas.xml b/test/test_suites/suite_pumas.xml index 5e28cd34..6ba84796 100644 --- a/test/test_suites/suite_pumas.xml +++ b/test/test_suites/suite_pumas.xml @@ -4,6 +4,8 @@ pumas_pre_main + + micro_pumas_tempfix micro_pumas_ccpp_dimensions_pre From 01d55b0dbb3c84c8484ab9b75b5821a7782ed15b Mon Sep 17 00:00:00 2001 From: Cheryl Craig Date: Wed, 31 Dec 2025 14:29:29 -0700 Subject: [PATCH 21/26] Fixes for CAM-SIMA prebuild processing --- schemes/pumas/micro_pumas_ccpp_dimensions_post.F90 | 1 - 1 file changed, 1 deletion(-) diff --git a/schemes/pumas/micro_pumas_ccpp_dimensions_post.F90 b/schemes/pumas/micro_pumas_ccpp_dimensions_post.F90 index 6861f4bc..935d940e 100644 --- a/schemes/pumas/micro_pumas_ccpp_dimensions_post.F90 +++ b/schemes/pumas/micro_pumas_ccpp_dimensions_post.F90 @@ -424,4 +424,3 @@ subroutine micro_pumas_ccpp_dimensions_post_run(ncol, micro_ncol, nlev, micro_nl pumas_airT(:ncol,:) = airT(:,:micro_nlev) end subroutine micro_pumas_ccpp_dimensions_post_run -module micro_pumas_ccpp_dimensions_post From 485736b92086c0259ee2c41f36d48dc1631e0c80 Mon Sep 17 00:00:00 2001 From: Cheryl Craig Date: Mon, 12 Jan 2026 11:45:56 -0700 Subject: [PATCH 22/26] Fix compiler errors --- .../micro_pumas_ccpp_dimensions_post.F90 | 26 ++++---- .../micro_pumas_ccpp_dimensions_post.meta | 16 +++++ .../pumas/micro_pumas_ccpp_dimensions_pre.F90 | 66 +++++++++---------- .../micro_pumas_ccpp_dimensions_pre.meta | 3 +- schemes/pumas/pumas | 2 +- schemes/pumas/pumas_pre_main.F90 | 3 + 6 files changed, 64 insertions(+), 52 deletions(-) diff --git a/schemes/pumas/micro_pumas_ccpp_dimensions_post.F90 b/schemes/pumas/micro_pumas_ccpp_dimensions_post.F90 index 935d940e..cd780fc4 100644 --- a/schemes/pumas/micro_pumas_ccpp_dimensions_post.F90 +++ b/schemes/pumas/micro_pumas_ccpp_dimensions_post.F90 @@ -1,5 +1,8 @@ module micro_pumas_ccpp_dimensions_post - use ccpp_kinds, only: kind_phys + + use pumas_kinds, only: pumas_r8=>kind_r8 + use ccpp_kinds, only: kind_phys + ! This will be replaced by subcolumn averaging when subcolumns are enabled public :: micro_pumas_ccpp_dimensions_post_run @@ -8,7 +11,7 @@ module micro_pumas_ccpp_dimensions_post !> \section arg_table_micro_pumas_ccpp_dimensions_post_run Argument Table !! \htmlinclude micro_pumas_ccpp_dimensions_post_run.html subroutine micro_pumas_ccpp_dimensions_post_run(ncol, micro_ncol, nlev, micro_nlev, & - nlevp1, micro_nlevp1, qcsinksum_rate1ord, pumas_qcsinksum_rate1ord, airT_tend, & + nlevp1, micro_nlevp1, pint, pumas_pint, qcsinksum_rate1ord, pumas_qcsinksum_rate1ord, airT_tend, & pumas_airT_tend, airq_tend, pumas_airq_tend, & cldliq_tend, pumas_cldliq_tend, cldice_tend, pumas_cldice_tend, numliq_tend, & pumas_numliq_tend, numice_tend, pumas_numice_tend, rainliq_tend, pumas_rainliq_tend, & @@ -49,6 +52,7 @@ subroutine micro_pumas_ccpp_dimensions_post_run(ncol, micro_ncol, nlev, micro_nl ! microphysics vertical interface dimension integer, intent(in) :: micro_nlevp1 + real(pumas_r8), intent(in) :: pumas_pint(:,:) !microphysics direct conversion rate of stratiform cloud water to precipitation (s-1) real(pumas_r8), intent(in) :: pumas_qcsinksum_rate1ord(:, :) !microphysics tendency of dry air enthalpy at constant pressure (J kg-1 s-1) @@ -190,6 +194,7 @@ subroutine micro_pumas_ccpp_dimensions_post_run(ncol, micro_ncol, nlev, micro_nl !microphysics rain evaporation rate wrt moist air and condensed water (kg kg-1 s-1) real(pumas_r8), intent(in) :: pumas_rain_evap(:, :) + real(kind_phys), intent(out ) :: pint(:,:) !direct conversion rate of stratiform cloud water to precipitation (s-1) real(kind_phys), intent(out) :: qcsinksum_rate1ord(:, :) !tendency of dry air enthalpy at constant pressure (J kg-1 s-1) @@ -338,11 +343,6 @@ subroutine micro_pumas_ccpp_dimensions_post_run(ncol, micro_ncol, nlev, micro_nl errcode = 0 errmsg = '' - ilflx(:,:micro_nlevp1) = pumas_lflx(:ncol,:) - iflx(:,:micro_nlevp1) = pumas_iflx(:ncol,:) - gflx(:,:micro_nlevp1) = pumas_gflx(:ncol,:) - rflx(:,:micro_nlevp1) = pumas_rflx(:ncol,:) - sflx(:,:micro_nlevp1) = pumas_sflx(:ncol,:) pint(:,:micro_nlevp1) = pumas_pint(:ncol,:) qcsinksum_rate1ord(:,:micro_nlev) = pumas_qcsinksum_rate1ord(:ncol,:) airT_tend(:,:micro_nlev) = pumas_airT_tend(:ncol,:) @@ -360,7 +360,7 @@ subroutine micro_pumas_ccpp_dimensions_post_run(ncol, micro_ncol, nlev, micro_nl graupice_tend(:,:micro_nlev) = pumas_graupice_tend(:ncol,:) numgraup_tend(:,:micro_nlev) = pumas_numgraup_tend(:ncol,:) effc(:,:micro_nlev) = pumas_effc(:ncol,:) - effc_fn(:,:micro_nlev) = pumas_effc_f(:ncol,:) + effc_fn(:,:micro_nlev) = pumas_effc_fn(:ncol,:) effi(:,:micro_nlev) = pumas_effi(:ncol,:) sadice(:,:micro_nlev) = pumas_sadice(:ncol,:) sadsnow(:,:micro_nlev) = pumas_sadsnow(:ncol,:) @@ -381,7 +381,7 @@ subroutine micro_pumas_ccpp_dimensions_post_run(ncol, micro_ncol, nlev, micro_nl lflx(:,:micro_nlev) = pumas_lflx(:ncol,:) iflx(:,:micro_nlev) = pumas_iflx(:ncol,:) gflx(:,:micro_nlev) = pumas_gflx(:ncol,:) - rlfx(:,:micro_nlev) = pumas_rflx(:ncol,:) + rflx(:,:micro_nlev) = pumas_rflx(:ncol,:) sflx(:,:micro_nlev) = pumas_sflx(:ncol,:) rainliq_in_prec(:,:micro_nlev) = pumas_rainliq_in_prec(:ncol,:) reff_rain(:,:micro_nlev) = pumas_reff_rain(:ncol,:) @@ -417,10 +417,6 @@ subroutine micro_pumas_ccpp_dimensions_post_run(ncol, micro_ncol, nlev, micro_nl frac_cldliq_tend(:,:micro_nlev) = pumas_frac_cldliq_tend(:ncol,:) rain_evap(:,:micro_nlev) = pumas_rain_evap(:ncol,:) - - airT(ncol, nlev) - pumas_airT(micro_ncol, micro_nlev) - - pumas_airT(:ncol,:) = airT(:,:micro_nlev) - end subroutine micro_pumas_ccpp_dimensions_post_run + +end module micro_pumas_ccpp_dimensions_post diff --git a/schemes/pumas/micro_pumas_ccpp_dimensions_post.meta b/schemes/pumas/micro_pumas_ccpp_dimensions_post.meta index acac5142..9e15ee56 100644 --- a/schemes/pumas/micro_pumas_ccpp_dimensions_post.meta +++ b/schemes/pumas/micro_pumas_ccpp_dimensions_post.meta @@ -52,6 +52,22 @@ dimensions = () type = integer intent = in +[pint] + standard_name = air_pressure_at_interface + long_name = air pressure at interface + units = Pa + dimensions = (horizontal_loop_extent, vertical_interface_dimension) + type = real + kind = kind_phys + intent = out +[pumas_pint] + standard_name = pumas_air_pressure_at_interface + long_name = pumas air pressure at interface + units = Pa + dimensions = (microphysics_horizontal_loop_extent, microphysics_vertical_interface_dimension) + type = real + kind = pumas_r8 + intent = in [qcsinksum_rate1ord] standard_name = direct_conversion_rate_of_stratiform_cloud_water_to_precipitation_for_scavenging long_name = direct conversion rate of stratiform cloud water to precipitation diff --git a/schemes/pumas/micro_pumas_ccpp_dimensions_pre.F90 b/schemes/pumas/micro_pumas_ccpp_dimensions_pre.F90 index 7bf60c0b..8e1a0398 100644 --- a/schemes/pumas/micro_pumas_ccpp_dimensions_pre.F90 +++ b/schemes/pumas/micro_pumas_ccpp_dimensions_pre.F90 @@ -1,8 +1,9 @@ module micro_pumas_ccpp_dimensions_pre - implicit none - use pumas_kinds, only: pumas_r8=>kind_r8 + use ccpp_kinds, only: kind_phys + + implicit none contains @@ -76,9 +77,6 @@ subroutine micro_pumas_ccpp_dimensions_pre_run(ncol, nlev, nlevp1, frzdep_in, pumas_frzdep, & errmsg, errcode) - !External dependencies: - use ccpp_kinds, only: kind_phys - !Host model dimensions/parameters: integer, intent(in) :: ncol integer, intent(in) :: nlev @@ -165,10 +163,10 @@ subroutine micro_pumas_ccpp_dimensions_pre_run(ncol, nlev, nlevp1, real(pumas_r8), intent(out) :: pumas_npccn(:, :) ! Dust radii by size bin (m) real(kind_phys), intent(in) :: rndst_in(:, :, :) - real(pumas_r8), intent(out) :: pumas_rndst(:, micro_nlev, :) + real(pumas_r8), intent(out) :: pumas_rndst(:, :, :) ! Dust number concentration by size bin (m-3) real(kind_phys), intent(in) :: nacon_in(:, :, :) - real(pumas_r8), intent(out) :: pumas_nacon(:, micro_nlev, :) + real(pumas_r8), intent(out) :: pumas_nacon(:, :, :) ! Tendency of snow mixing ratio wrt moist air and condensed water from external microphysics (kg kg-1 s-1) real(kind_phys), intent(in) :: snowice_tend_external_in(:, :) real(pumas_r8), intent(out) :: pumas_snowice_tend_external(:, :) @@ -201,36 +199,36 @@ subroutine micro_pumas_ccpp_dimensions_pre_run(ncol, nlev, nlevp1, ! For now we just use ncols = micro_ncol, but we need to constrain the vertical extent for the microphysical fields. ! Therefore micro_xxx(:ncol,:) = xxx(:,::) !- IH - pumas_airT(:ncol,:) = real(airT_in(:,::), pumas_r8) - pumas_airq(:ncol,:) = real(airq_in(:,::), pumas_r8) - pumas_cldliq(:ncol,:) = real(cldliq_in(:,::), pumas_r8) - pumas_cldice(:ncol,:) = real(cldice_in(:,::), pumas_r8) - pumas_numliq(:ncol,:) = real(numliq_in(:,::), pumas_r8) - pumas_numice(:ncol,:) = real(numice_in(:,::), pumas_r8) - pumas_rainliq(:ncol,:) = real(rainliq_in(:,::), pumas_r8) - pumas_snowice(:ncol,:) = real(snowice_in(:,::), pumas_r8) - pumas_numrain(:ncol,:) = real(numrain_in(:,::), pumas_r8) - pumas_numsnow(:ncol,:) = real(numsnow_in(:,::), pumas_r8) - pumas_graupice(:ncol,:) = real(graupice_in(:,::), pumas_r8) - pumas_numgraup(:ncol,:) = real(numgraup_in(:,::), pumas_r8) - pumas_relvar(:ncol,:) = real(relvar_in(:,::), pumas_r8) - pumas_accre_enhan(:ncol,:) = real(accre_enhan_in(:,::), pumas_r8) - pumas_pmid(:ncol,:) = real(pmid_in(:,::), pumas_r8) - pumas_pdel(:ncol,:) = real(pdel_in(:,::), pumas_r8) + pumas_airT(:ncol,:) = real(airT_in(:,:), pumas_r8) + pumas_airq(:ncol,:) = real(airq_in(:,:), pumas_r8) + pumas_cldliq(:ncol,:) = real(cldliq_in(:,:), pumas_r8) + pumas_cldice(:ncol,:) = real(cldice_in(:,:), pumas_r8) + pumas_numliq(:ncol,:) = real(numliq_in(:,:), pumas_r8) + pumas_numice(:ncol,:) = real(numice_in(:,:), pumas_r8) + pumas_rainliq(:ncol,:) = real(rainliq_in(:,:), pumas_r8) + pumas_snowice(:ncol,:) = real(snowice_in(:,:), pumas_r8) + pumas_numrain(:ncol,:) = real(numrain_in(:,:), pumas_r8) + pumas_numsnow(:ncol,:) = real(numsnow_in(:,:), pumas_r8) + pumas_graupice(:ncol,:) = real(graupice_in(:,:), pumas_r8) + pumas_numgraup(:ncol,:) = real(numgraup_in(:,:), pumas_r8) + pumas_relvar(:ncol,:) = real(relvar_in(:,:), pumas_r8) + pumas_accre_enhan(:ncol,:) = real(accre_enhan_in(:,:), pumas_r8) + pumas_pmid(:ncol,:) = real(pmid_in(:,:), pumas_r8) + pumas_pdel(:ncol,:) = real(pdel_in(:,:), pumas_r8) pumas_pint(:ncol,:) = real(pint_in(:,:micro_nlevp1), pumas_r8) - pumas_strat_cldfrc(:ncol,:) = real(strat_cldfrc_in(:,::), pumas_r8) - pumas_strat_liq_cldfrc(:ncol,:) = real(strat_liq_cldfrc_in(:,::), pumas_r8) - pumas_strat_ice_cldfrc(:ncol,:) = real(strat_ice_cldfrc_in(:,::), pumas_r8) - pumas_qsatfac(:ncol,:) = real(qsatfac_in(:,::), pumas_r8) - pumas_naai(:ncol,:) = real(naai_in(:,::), pumas_r8) - pumas_npccn(:ncol,:) = real(npccn_in(:,::), pumas_r8) + pumas_strat_cldfrc(:ncol,:) = real(strat_cldfrc_in(:,:), pumas_r8) + pumas_strat_liq_cldfrc(:ncol,:) = real(strat_liq_cldfrc_in(:,:), pumas_r8) + pumas_strat_ice_cldfrc(:ncol,:) = real(strat_ice_cldfrc_in(:,:), pumas_r8) + pumas_qsatfac(:ncol,:) = real(qsatfac_in(:,:), pumas_r8) + pumas_naai(:ncol,:) = real(naai_in(:,:), pumas_r8) + pumas_npccn(:ncol,:) = real(npccn_in(:,:), pumas_r8) pumas_rndst(:ncol,:,:) = real(rndst_in(:,:micro_nlev,:), pumas_r8) pumas_nacon(:ncol,:,:) = real(nacon_in(:,:micro_nlev,:), pumas_r8) - pumas_snowice_tend_external(:ncol,:) = real(snowice_tend_external_in(:,::), pumas_r8) - pumas_numsnow_tend_external(:ncol,:) = real(numsnow_tend_external_in(:,::), pumas_r8) - pumas_effi_external(:ncol,:) = real(effi_external_in(:,::), pumas_r8) - pumas_frzcnt(:ncol,:) = real(frzcnt_in(:,::), pumas_r8) - pumas_frzdep(:ncol,:) = real(frzdep_in(:,::), pumas_r8) + pumas_snowice_tend_external(:ncol,:) = real(snowice_tend_external_in(:,:), pumas_r8) + pumas_numsnow_tend_external(:ncol,:) = real(numsnow_tend_external_in(:,:), pumas_r8) + pumas_effi_external(:ncol,:) = real(effi_external_in(:,:), pumas_r8) + pumas_frzcnt(:ncol,:) = real(frzcnt_in(:,:), pumas_r8) + pumas_frzdep(:ncol,:) = real(frzdep_in(:,:), pumas_r8) end subroutine micro_pumas_ccpp_dimensions_pre_run diff --git a/schemes/pumas/micro_pumas_ccpp_dimensions_pre.meta b/schemes/pumas/micro_pumas_ccpp_dimensions_pre.meta index 573a29b6..dd785ee2 100644 --- a/schemes/pumas/micro_pumas_ccpp_dimensions_pre.meta +++ b/schemes/pumas/micro_pumas_ccpp_dimensions_pre.meta @@ -583,8 +583,7 @@ long_name = tendency of mass number concentration of snow wrt moist air and condensed water from external microphysics units = kg-1 s-1 dimensions = (horizontal_loop_extent, vertical_layer_dimension) - type = real - kind = kind_phys + type = real | kind = kind_phys intent = in [pumas_numsnow_tend_external] standard_name = tendency_of_pumas_mass_number_concentration_of_snow_wrt_moist_air_and_condensed_water_from_external diff --git a/schemes/pumas/pumas b/schemes/pumas/pumas index 5f6e420d..4ba6311d 160000 --- a/schemes/pumas/pumas +++ b/schemes/pumas/pumas @@ -1 +1 @@ -Subproject commit 5f6e420d9530aee8595d33c95dfbfec53867ced5 +Subproject commit 4ba6311dd46b5046c515c7316239620cba31b867 diff --git a/schemes/pumas/pumas_pre_main.F90 b/schemes/pumas/pumas_pre_main.F90 index 151673e0..526d8c97 100644 --- a/schemes/pumas/pumas_pre_main.F90 +++ b/schemes/pumas/pumas_pre_main.F90 @@ -9,6 +9,8 @@ module pumas_pre_main + use ccpp_kinds, only: kind_phys + implicit none contains @@ -18,6 +20,7 @@ module pumas_pre_main !steps needed before the core !PUMAS calls. + !> \section arg_table_pumas_pre_main_init Argument Table !! \htmlinclude pumas_pre_main_init.html subroutine pumas_pre_main_init(spat_vary_accre_enhan_in, errmsg, errcode) From 2b8b259071d9d202f579a70ac3c9dd754c9a589d Mon Sep 17 00:00:00 2001 From: Cheryl Craig Date: Mon, 12 Jan 2026 12:00:02 -0700 Subject: [PATCH 23/26] update pumas external --- .gitmodules | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitmodules b/.gitmodules index c48593fa..37122e55 100644 --- a/.gitmodules +++ b/.gitmodules @@ -8,7 +8,7 @@ path = schemes/pumas/pumas url = https://github.com/nusbaume/PUMAS fxrequired = AlwaysRequired - fxtag = ab966b9d60b9d9a14e0cf4259472f5d1f967bd03 + fxtag = 485736b fxDONOTUSEurl = https://github.com/ESCOMP/PUMAS [submodule "rte-rrtmgp"] path = schemes/rrtmgp/ext From 55fb203739f3e61cb3e0649f719ea2e0ee065de6 Mon Sep 17 00:00:00 2001 From: Cheryl Craig Date: Mon, 12 Jan 2026 13:35:31 -0700 Subject: [PATCH 24/26] update pumas external --- .gitmodules | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitmodules b/.gitmodules index 37122e55..d8223bfd 100644 --- a/.gitmodules +++ b/.gitmodules @@ -8,7 +8,7 @@ path = schemes/pumas/pumas url = https://github.com/nusbaume/PUMAS fxrequired = AlwaysRequired - fxtag = 485736b + fxtag = 101b267 fxDONOTUSEurl = https://github.com/ESCOMP/PUMAS [submodule "rte-rrtmgp"] path = schemes/rrtmgp/ext From ff987b85770c16050cfc7db472688fb1a7b8f3a5 Mon Sep 17 00:00:00 2001 From: Cheryl Craig Date: Fri, 16 Jan 2026 16:57:41 -0700 Subject: [PATCH 25/26] Verified pumas_diagnostics routines are not currently used - Added comment to top for reviewers --- schemes/sima_diagnostics/pumas_diagnostics.F90 | 2 ++ schemes/sima_diagnostics/pumas_diagnostics_calling.F90 | 2 ++ 2 files changed, 4 insertions(+) diff --git a/schemes/sima_diagnostics/pumas_diagnostics.F90 b/schemes/sima_diagnostics/pumas_diagnostics.F90 index a07c1493..47766d56 100644 --- a/schemes/sima_diagnostics/pumas_diagnostics.F90 +++ b/schemes/sima_diagnostics/pumas_diagnostics.F90 @@ -1,3 +1,5 @@ +REVIEWERS - This is a work in progress. Please save reviews until a future PR + !CACNOTE - All outfld calls to history_out_field are converted - All history_add_field calls are done - Except the constituent history_add_field needs to be changed - see CACNOTE diff --git a/schemes/sima_diagnostics/pumas_diagnostics_calling.F90 b/schemes/sima_diagnostics/pumas_diagnostics_calling.F90 index 8be01c52..623d0ec1 100644 --- a/schemes/sima_diagnostics/pumas_diagnostics_calling.F90 +++ b/schemes/sima_diagnostics/pumas_diagnostics_calling.F90 @@ -1,3 +1,5 @@ +REVIEWERS - This is a work in progress. Please save reviews until a future PR + module pumas_diagnostics_calling use ccpp_kinds, only: kind_phys From 90508274183181a44bd83d30e06a4d6e09d25e19 Mon Sep 17 00:00:00 2001 From: Cheryl Craig Date: Thu, 5 Feb 2026 11:04:35 -0700 Subject: [PATCH 26/26] Mods for diagnostics init (and placeholder file which contains the partially implemented run mods) --- .../sima_diagnostics/pumas_diagnostics.F90 | 1875 +------------- .../pumas_diagnostics.F90-keep_for_run | 2150 +++++++++++++++++ 2 files changed, 2213 insertions(+), 1812 deletions(-) create mode 100644 schemes/sima_diagnostics/pumas_diagnostics.F90-keep_for_run diff --git a/schemes/sima_diagnostics/pumas_diagnostics.F90 b/schemes/sima_diagnostics/pumas_diagnostics.F90 index 47766d56..7e587f76 100644 --- a/schemes/sima_diagnostics/pumas_diagnostics.F90 +++ b/schemes/sima_diagnostics/pumas_diagnostics.F90 @@ -1,11 +1,11 @@ -REVIEWERS - This is a work in progress. Please save reviews until a future PR +!REVIEWERS - This is a work in progress. Please save reviews until a future PR !CACNOTE - All outfld calls to history_out_field are converted - - All history_add_field calls are done - - Except the constituent history_add_field needs to be changed - see CACNOTE - - Need to replace "#" in units? - - need to line up calls -!!!---------------------------------------------- +! - All history_add_field calls are done +! - Except the constituent history_add_field needs to be changed - see CACNOTE +! - Need to replace "#" in units? +! - need to line up calls +!!!!---------------------------------------------- module pumas_diagnostics @@ -16,17 +16,19 @@ module pumas_diagnostics save public :: pumas_diagnostics_init ! init routine - public :: pumas_diagnostics_run ! main routine CONTAINS !> \section arg_table_pumas_diagnostics_init Argument Table !! \htmlinclude pumas_diagnostics_init.html -subroutine pumas_diagnostics_init(errmsg, errflg) +subroutine pumas_diagnostics_init(qprops, ncnst, errmsg, errflg) use cam_history, only: history_add_field use cam_history_support, only: horiz_only + type(ccpp_constituent_prop_ptr_t), intent(in) :: qprops(:) + integer, intent(in) :: ncnst ! number of tracers to transport + character(len=512), intent(out) :: errmsg integer, intent(out) :: errflg @@ -39,37 +41,39 @@ subroutine pumas_diagnostics_init(errmsg, errflg) ! Will use this for guidance during future developmen !CACNOTE - come back to this - did not convert get the constituent info yet - - do m = 1, ncnst - call cnst_get_ind(cnst_names(m), mm) - if ( any(mm == (/ ixcldliq, ixcldice, ixrain, ixsnow, ixgraupel /)) ) then - ! mass mixing ratios - call history_add_field(cnst_name(mm), cnst_longname(mm), 'lev', 'avg', 'kg kg-1') !subcyc - call history_add_field(sflxnam(mm), trim(cnst_name(mm))//' surface flux', horiz_only, 'avg', 'kg m-2 s-1') !subcyc - else if ( any(mm == (/ ixnumliq, ixnumice, ixnumrain, ixnumsnow, ixnumgraupel /)) ) then - ! number concentrations - call history_add_field(cnst_name(mm), cnst_longname(mm), 'lev', 'avg', 'kg-1') !subcyc - call history_add_field(sflxnam(mm), trim(cnst_name(mm))//' surface flux', horiz_only, 'avg', '1 m-2 s-1') !subcyc - else - call endrun( "micro_pumas_cam_init: & - &Could not call history_add_field for constituent with unknown units.") - endif - end do - - call history_add_field(apcnst(ixcldliq), trim(cnst_name(ixcldliq))//' after physics', 'lev', 'avg', 'kg kg-1') !subcyc - call history_add_field(apcnst(ixcldice), trim(cnst_name(ixcldice))//' after physics', 'lev', 'avg', 'kg kg-1') !subcyc - call history_add_field(bpcnst(ixcldliq), trim(cnst_name(ixcldliq))//' before physics','lev', 'avg', 'kg kg-1') !subcyc - call history_add_field(bpcnst(ixcldice), trim(cnst_name(ixcldice))//' before physics','lev', 'avg', 'kg kg-1') !subcyc - - call history_add_field(apcnst(ixrain), trim(cnst_name(ixrain))//' after physics', 'lev', 'avg', 'kg kg-1') !subcyc - call history_add_field(apcnst(ixsnow), trim(cnst_name(ixsnow))//' after physics', 'lev', 'avg', 'kg kg-1') !subcyc - call history_add_field(bpcnst(ixrain), trim(cnst_name(ixrain))//' before physics','lev', 'avg', 'kg kg-1') !subcyc - call history_add_field(bpcnst(ixsnow), trim(cnst_name(ixsnow))//' before physics','lev', 'avg', 'kg kg-1') !subcyc - - if (micro_mg_version > 2) then - call history_add_field(apcnst(ixgraupel), trim(cnst_name(ixgraupel))//' after physics', 'lev', 'avg', 'kg kg-1') !subcyc - call history_add_field(bpcnst(ixgraupel), trim(cnst_name(ixgraupel))//' before physics','lev', 'avg', 'kg kg-1') !subcyc - end if +!-------------------- +! do m = 1, ncnst +! call cnst_get_ind(cnst_names(m), mm) +! if ( any(mm == (/ ixcldliq, ixcldice, ixrain, ixsnow, ixgraupel /)) ) then +! mass mixing ratios +! call history_add_field(cnst_name(mm), cnst_longname(mm), 'lev', 'avg', 'kg kg-1') !subcyc +! call history_add_field(sflxnam(mm), trim(cnst_name(mm))//' surface flux', horiz_only, 'avg', 'kg m-2 s-1') !subcyc +! else if ( any(mm == (/ ixnumliq, ixnumice, ixnumrain, ixnumsnow, ixnumgraupel /)) ) then +! ! number concentrations +! call history_add_field(cnst_name(mm), cnst_longname(mm), 'lev', 'avg', 'kg-1') !subcyc +! call history_add_field(sflxnam(mm), trim(cnst_name(mm))//' surface flux', horiz_only, 'avg', '1 m-2 s-1') !subcyc +! else +! call endrun( "micro_pumas_cam_init: & +! &Could not call history_add_field for constituent with unknown units.") +! endif +! end do + +! call history_add_field(apcnst(ixcldliq), trim(cnst_name(ixcldliq))//' after physics', 'lev', 'avg', 'kg kg-1') !subcyc +! call history_add_field(apcnst(ixcldice), trim(cnst_name(ixcldice))//' after physics', 'lev', 'avg', 'kg kg-1') !subcyc +! call history_add_field(bpcnst(ixcldliq), trim(cnst_name(ixcldliq))//' before physics','lev', 'avg', 'kg kg-1') !subcyc +! call history_add_field(bpcnst(ixcldice), trim(cnst_name(ixcldice))//' before physics','lev', 'avg', 'kg kg-1') !subcyc + +! call history_add_field(apcnst(ixrain), trim(cnst_name(ixrain))//' after physics', 'lev', 'avg', 'kg kg-1') !subcyc +! call history_add_field(apcnst(ixsnow), trim(cnst_name(ixsnow))//' after physics', 'lev', 'avg', 'kg kg-1') !subcyc +! call history_add_field(bpcnst(ixrain), trim(cnst_name(ixrain))//' before physics','lev', 'avg', 'kg kg-1') !subcyc +! call history_add_field(bpcnst(ixsnow), trim(cnst_name(ixsnow))//' before physics','lev', 'avg', 'kg kg-1') !subcyc + +! if (micro_mg_version > 2) then +! call history_add_field(apcnst(ixgraupel), trim(cnst_name(ixgraupel))//' after physics', 'lev', 'avg', 'kg kg-1') !subcyc +! call history_add_field(bpcnst(ixgraupel), trim(cnst_name(ixgraupel))//' before physics','lev', 'avg', 'kg kg-1') !subcyc +! end if + +!-------------------- call history_add_field ('CME', 'Rate of cond-evap within the cloud', 'lev', 'avg', 'kg kg-1 s-1') !subcyc call history_add_field ('PRODPREC', 'Rate of conversion of condensate to precip','lev', 'avg', 'kg kg-1 s-1') !subcyc @@ -127,13 +131,13 @@ subroutine pumas_diagnostics_init(errmsg, errflg) call history_add_field ('QRSEDTEN', 'Rain mixing ratio tendency from sedimentation', 'trop_cld_lev', 'avg', & 'kg kg-1 s-1') !subcyc call history_add_field ('QSSEDTEN', 'Snow mixing ratio tendency from sedimentation', 'trop_cld_lev', 'avg', & - 'kg kg-1 s-1'' !subcyc + 'kg kg-1 s-1') !subcyc call history_add_field ('NNUCCCO', 'Number Tendency due to Immersion freezing of cloud water', 'trop_cld_lev', 'avg', & '# kg-1 s-1') !subcyc call history_add_field ('NNUCCTO', 'Number Tendency due to Contact freezing of cloud water', 'trop_cld_lev', 'avg', & '# kg-1 s-1') !subcyc call history_add_field ('NNUCCDO', 'Number Tendency due to Ice nucleation', 'trop_cld_lev', 'avg', & - '# kg-1 s-1'') !subcyc + '# kg-1 s-1') !subcyc call history_add_field ('NNUDEPO', 'Number Tendency due to Deposition Nucleation', 'trop_cld_lev', 'avg', & '# kg-1 s-1') !subcyc call history_add_field ('NHOMO', 'Number Tendency due to Homogeneous freezing of cloud water', 'trop_cld_lev', 'avg', & @@ -166,7 +170,8 @@ subroutine pumas_diagnostics_init(errmsg, errflg) call history_add_field ('NMELTO', 'Number Tendency due to Melting of cloud ice', 'trop_cld_lev', 'avg', '# kg-1 s-1') !subcyc call history_add_field ('NMELTS', 'Number Tendency due to Melting of snow', 'trop_cld_lev', 'avg', '# kg-1 s-1') !subcyc - if (trim(micro_mg_warm_rain) == 'kk2000') then +! CACNOTE +! if (trim(micro_mg_warm_rain) == 'kk2000') then call history_add_field ('qctend_KK2000', 'cloud liquid mass tendency due to autoconversion accretion from KK2000', & 'trop_cld_lev', 'avg', 'kg kg-1 s-1') !subcyc call history_add_field ('nctend_KK2000', 'cloud number mass tendency due to autoconversion accretion from KK2000', & @@ -175,25 +180,27 @@ subroutine pumas_diagnostics_init(errmsg, errflg) 'trop_cld_lev', 'avg', 'kg kg-1 s-1') !subcyc call history_add_field ('nrtend_KK2000', 'rain number tendency due to autoconversion accretion from KK2000', & 'trop_cld_lev', 'avg', '# kg-1 s-1') !subcyc - end if +! end if - if (trim(micro_mg_warm_rain) == 'sb2001') then +! CACNOTE +! if (trim(micro_mg_warm_rain) == 'sb2001') then call history_add_field ('qctend_SB2001', 'cloud liquid mass tendency due to autoconversion accretion from SB2001', & 'trop_cld_lev', 'avg', 'kg kg-1 s-1') !subcyc call history_add_field ('nctend_SB2001', 'cloud liquid number tendency due to autoconversion accretion from SB2001', & 'trop_cld_lev', 'avg', '# kg-1 s-1') !subcyc - call history_add_field ('qrtend_SB2001', 'rain mass tendency due to autoconversion accretion from SB2001'), & + call history_add_field ('qrtend_SB2001', 'rain mass tendency due to autoconversion accretion from SB2001', & 'trop_cld_lev', 'avg', 'kg kg-1 s-1') !subcyc call history_add_field ('nrtend_SB2001', 'rain number tendency due to autoconversion accretion from SB2001', & 'trop_cld_lev', 'avg', '# kg-1 s-1') !subcyc - end if +! end if call history_add_field ('LAMC', 'Size distribution parameter lambda for liquid', 'trop_cld_lev', 'avg', 'unitless') !subcyc call history_add_field ('LAMR', 'Size distribution parameter lambda for rain', 'trop_cld_lev', 'avg', 'unitless') !subcyc call history_add_field ('PGAM', 'Size distribution parameter mu (pgam) for liquid', 'trop_cld_lev', 'avg', 'unitless') !subcyc call history_add_field ('N0R', 'Size distribution parameter n0 for rain', 'trop_cld_lev', 'avg', 'unitless') !subcyc - if (micro_mg_version > 2) then +! CACNOTE +! if (micro_mg_version > 2) then call history_add_field ('NMELTG', 'Number Tendency due to Melting of graupel', 'trop_cld_lev', 'avg', & '# kg-1 s-1') !subcyc call history_add_field ('NGSEDTEN', 'Number Tendency due to graupel sedimentation', 'trop_cld_lev', 'avg', & @@ -233,7 +240,7 @@ subroutine pumas_diagnostics_init(errmsg, errflg) 'avg', '1') !subcyc call history_add_field ('MELTGTOT', 'Melting of graupel', 'trop_cld_lev', & 'avg', 'kg kg-1 s-1') !subcyc - end if +! end if call history_add_field ('RBFRAC', 'Fraction of sky covered by a potential rainbow', horiz_only, 'avg', 'Fraction') !subcyc @@ -246,7 +253,7 @@ subroutine pumas_diagnostics_init(errmsg, errflg) call history_add_field ('MPDLIQ', 'CLDLIQ tendency - Morrison microphysics', 'lev', 'avg', 'kg kg-1 s-1') !subcyc call history_add_field ('MPDICE', 'CLDICE tendency - Morrison microphysics', 'lev', 'avg', 'kg kg-1 s-1') !subcyc call history_add_field ('MPDNLIQ', 'NUMLIQ tendency - Morrison microphysics', 'lev', 'avg', 'kg-1 s-1') !subcyc - call history_add_field ('MPDNICE', 'NUMICE tendency - Morrison microphysics'), 'lev', 'avg', 'kg-1 s-1') !subcyc + call history_add_field ('MPDNICE', 'NUMICE tendency - Morrison microphysics', 'lev', 'avg', 'kg-1 s-1') !subcyc call history_add_field ('MPDW2V', 'Water <--> Vapor tendency - Morrison microphysics', 'lev', 'avg', 'kg kg-1 s-1') !subcyc call history_add_field ('MPDW2I', 'Water <--> Ice tendency - Morrison microphysics', 'lev', 'avg', 'kg kg-1 s-1') !subcyc call history_add_field ('MPDW2P', 'Water <--> Precip tendency - Morrison microphysics', 'lev', 'avg', 'kg kg-1 s-1') !subcyc @@ -267,12 +274,13 @@ subroutine pumas_diagnostics_init(errmsg, errflg) ! This is only if the coldpoint temperatures are being adjusted. ! NOTE: Some fields related to these and output later are added in tropopause.F90. - if (micro_mg_adjust_cpt) then +!CACNOTE +! if (micro_mg_adjust_cpt) then call history_add_field ('TROPF_TADJ', 'Temperatures after cold point adjustment', 'lev', 'avg', 'K') !subcyc call history_add_field ('TROPF_RHADJ','Relative Hunidity after cold point adjustment', 'lev', 'avg', 'K') !subcyc call history_add_field ('TROPF_CDT', 'Cold point temperature adjustment', horiz_only, 'avg', 'K') !subcyc call history_add_field ('TROPF_CDZ', 'Distance of coldpoint from coldest model level', horiz_only, 'avg', 'm') !subcyc - end if +! end if ! Averaging for cloud particle number and size @@ -314,7 +322,7 @@ subroutine pumas_diagnostics_init(errmsg, errflg) call history_add_field ('LS_REFFRAIN', 'ls stratiform rain effective radius', 'lev', 'avg', 'micron') !subcyc call history_add_field ('LS_REFFSNOW','ls stratiform snow effective radius', 'lev', 'avg', 'micron') !subcyc call history_add_field ('CV_REFFLIQ', 'convective cloud liq effective radius', 'lev', 'avg', 'micron') !subcyc - call history_add_field ('CV_REFFICE', 'convective cloud ice effective radius, , 'lev' 'avg', 'micron') !subcyc + call history_add_field ('CV_REFFICE', 'convective cloud ice effective radius', 'lev', 'avg', 'micron') !subcyc call history_add_field ('MG_SADICE', 'MG surface area density ice', 'lev', 'avg', 'cm2 cm-3') !subcyc call history_add_field ('MG_SADSNOW', 'MG surface area density snow', 'lev', 'avg', 'cm2 cm-3') !subcyc @@ -372,13 +380,14 @@ subroutine pumas_diagnostics_init(errmsg, errflg) call history_add_field('UMR','Mass-weighted rain fallspeed', 'trop_cld_lev', 'avg', 'm s-1') !subcyc - if (micro_mg_version > 2) then +! CACNOTE +! if (micro_mg_version > 2) then call history_add_field('UMG', 'Mass-weighted graupel/hail fallspeed', 'trop_cld_lev', 'avg', 'm s-1') !subcyc call history_add_field('FREQG', 'Fractional occurrence of Graupel', 'lev', 'avg', 'fraction') !subcyc call history_add_field('LS_REFFGRAU','ls stratiform graupel/hail effective radius', 'lev', 'avg', 'micron') !subcyc call history_add_field('AQGRAU', 'Average graupel/hail mixing ratio', 'lev', 'avg', 'kg kg-1') !subcyc call history_add_field('ANGRAU', 'Average graupel/hail number conc', 'lev', 'avg', 'm-3') !subcyc - end if +! end if ! qc limiter (only output in versions 1.5 and later) @@ -386,1763 +395,5 @@ subroutine pumas_diagnostics_init(errmsg, errflg) end subroutine pumas_diagnostics_init -!=============================================================================== - -subroutine pumas_diagnostics_run(state, ptend, dtime, pbuf) - - -!> \section arg_table_pumas_diagnostics_run Argument Table -!! \htmlinclude pumas_diagnostics_run.html -subroutine pumas_diagnostics_run(proc_rates, qcsinksum_rate1ord, naai, npccn, rndst, nacon, tlat, qvlat, qctend, qitend, & - nctend, nitend, qrtend, qstend, nrtend, nstend, qgtend, ngtend, effc, effc_fn, effi, sadice, sadsnow, & - prect, preci, nevapr, am_evp_st, prain, cmeout, deffi, pgamrad, lamcrad, qsout, dsout, qgout, ngout, & - dgout, lflx, iflx, gflx, rflx, sflx, qrout, reff_rain, reff_snow, reff_grau, nrout, nsout, refl, & - arefl, areflz, frefl, csrfl, acsrfl, fcsrfl, refl10cm, reflz10cm, rercld, ncai, ncal, qrout2, qsout2, & - nrout2, nsout2, drout2, dsout2, qgout2, ngout2, dgout2, freqg, freqs, freqr, nfice, qcrat, proc_rates, & - errstring, tnd_qsnow, tnd_nsnow, re_ice, prer_evap, frzimm, frzcnt, frzdep, errmsg, errflg) - - use cam_history, only: history_in_field - - type (proc_rates_type), intent(inout) :: proc_rates - - real(kind_phys), intent(in) :: qcsinksum_rate1ord(:,:) ! 1st order rate for direct cw to precip conversion - real(kind_phys), intent(in) :: tlat(:,:) ! latent heating rate (W/kg) - real(kind_phys), intent(in) :: qvlat(:,:) ! microphysical tendency qv (1/s) - real(kind_phys), intent(in) :: qctend(:,:) ! microphysical tendency qc (1/s) - real(kind_phys), intent(in) :: qitend(:,:) ! microphysical tendency qi (1/s) - real(kind_phys), intent(in) :: nctend(:,:) ! microphysical tendency nc (1/(kg*s)) - real(kind_phys), intent(in) :: nitend(:,:) ! microphysical tendency ni (1/(kg*s)) - - real(kind_phys), intent(in) :: qrtend(:,:) ! microphysical tendency qr (1/s) - real(kind_phys), intent(in) :: qstend(:,:) ! microphysical tendency qs (1/s) - real(kind_phys), intent(in) :: nrtend(:,:) ! microphysical tendency nr (1/(kg*s)) - real(kind_phys), intent(in) :: nstend(:,:) ! microphysical tendency ns (1/(kg*s)) - real(kind_phys), intent(in) :: qgtend(:,:) ! microphysical tendency qg (1/s) - real(kind_phys), intent(in) :: ngtend(:,:) ! microphysical tendency ng (1/(kg*s)) - - real(kind_phys), intent(in) :: effc(:,:) ! droplet effective radius (micron) - real(kind_phys), intent(in) :: effc_fn(:,:) ! droplet effective radius, assuming nc = 1.e8 kg-1 - real(kind_phys), intent(in) :: effi(:,:) ! cloud ice effective radius (micron) - real(kind_phys), intent(in) :: sadice(:,:) ! cloud ice surface area density (cm2/cm3) - real(kind_phys), intent(in) :: sadsnow(:,:) ! cloud snow surface area density (cm2/cm3) - real(kind_phys), intent(in) :: prect(:) ! surface precip rate (m/s) - real(kind_phys), intent(in) :: preci(:) ! surface ice/snow precip rate (m/s) - real(kind_phys), intent(in) :: nevapr(:,:) ! evaporation rate of rain + snow (kg/kg/s) - real(kind_phys), intent(in) :: am_evp_st(:,:) ! stratiform evaporation area (frac) - real(kind_phys), intent(in) :: prain(:,:) ! production of rain + snow (kg/kg/s) - real(kind_phys), intent(in) :: cmeout(:,:) ! Rate of cond-evap of ice (kg/kg/s) - real(kind_phys), intent(in) :: deffi(:,:) ! ice effective diameter for optics (radiation) (micron) - real(kind_phys), intent(in) :: pgamrad(:,:) ! ice gamma parameter for optics (radiation) (no units) - real(kind_phys), intent(in) :: lamcrad(:,:) ! slope of droplet distribution for optics (radiation) (1/m) - real(kind_phys), intent(in) :: qsout(:,:) ! snow mixing ratio (kg/kg) - real(kind_phys), intent(in) :: dsout(:,:) ! snow diameter (m) - real(kind_phys), intent(in) :: lflx(:,:) ! grid-box average liquid condensate flux (kg m^-2 s^-1) - real(kind_phys), intent(in) :: iflx(:,:) ! grid-box average ice condensate flux (kg m^-2 s^-1) - real(kind_phys), intent(in) :: rflx(:,:) ! grid-box average rain flux (kg m^-2 s^-1) - real(kind_phys), intent(in) :: sflx(:,:) ! grid-box average snow flux (kg m^-2 s^-1) - real(kind_phys), intent(in) :: gflx(:,:) ! grid-box average graupel/hail flux (kg m^-2 s^-1) - - real(kind_phys), intent(in) :: qrout(:,:) ! grid-box average rain mixing ratio (kg/kg) - real(kind_phys), intent(in) :: reff_rain(:,:) ! rain effective radius (micron) - real(kind_phys), intent(in) :: reff_snow(:,:) ! snow effective radius (micron) - real(kind_phys), intent(in) :: reff_grau(:,:) ! graupel effective radius (micron) - - real(kind_phys), intent(in) :: nrout(:,:) ! rain number concentration (1/m3) - real(kind_phys), intent(in) :: nsout(:,:) ! snow number concentration (1/m3) - real(kind_phys), intent(in) :: refl(:,:) ! analytic radar reflectivity (94GHZ, cloud radar) (dBZ) - real(kind_phys), intent(in) :: arefl(:,:) ! average reflectivity will zero points inside valid range (dBZ) - real(kind_phys), intent(in) :: areflz(:,:) ! average reflectivity in z. (mm6 m-3) - real(kind_phys), intent(in) :: frefl(:,:) ! fractional occurrence of radar reflectivity - real(kind_phys), intent(in) :: csrfl(:,:) ! cloudsat reflectivity (dBZ) - real(kind_phys), intent(in) :: acsrfl(:,:) ! cloudsat average (dBZ) - real(kind_phys), intent(in) :: fcsrfl(:,:) ! cloudsat fractional occurrence of radar reflectivity - real(kind_phys), intent(in) :: refl10cm(:,:) ! 10cm (rain) analytic radar reflectivity (dBZ) - real(kind_phys), intent(in) :: reflz10cm(:,:) ! 10cm (rain) analytic radar reflectivity (mm6 m-3) - real(kind_phys), intent(in) :: rercld(:,:) ! effective radius calculation for rain + cloud - real(kind_phys), intent(in) :: ncai(:,:) ! input number conc of ice nuclei available (1/m3) - real(kind_phys), intent(in) :: ncal(:,:) ! input number conc of CCN (1/m3) - real(kind_phys), intent(in) :: qrout2(:,:) ! copy of qrin as used to compute drin2 - real(kind_phys), intent(in) :: qsout2(:,:) ! copy of qsin as used to compute dsin2 - real(kind_phys), intent(in) :: nrout2(:,:) ! copy of nrin as used to compute drin2 - real(kind_phys), intent(in) :: nsout2(:,:) ! copy of nsin as used to compute dsin2 - real(kind_phys), intent(in) :: drout2(:,:) ! mean rain particle diameter (m) - real(kind_phys), intent(in) :: dsout2(:,:) ! mean snow particle diameter (m) - real(kind_phys), intent(in) :: freqs(:,:) ! fractional occurrence of snow - real(kind_phys), intent(in) :: freqr(:,:) ! fractional occurrence of rain - real(kind_phys), intent(in) :: nfice(:,:) ! fraction of frozen water to total condensed water - real(kind_phys), intent(in) :: qcrat(:,:) ! limiter for qc process rates (1=no limit --> 0. no qc) - real(kind_phys), intent(in) :: qgout(:,:) ! graupel/hail mixing ratio (kg/kg) - real(kind_phys), intent(in) :: dgout(:,:) ! graupel/hail diameter (m) - real(kind_phys), intent(in) :: ngout(:,:) ! graupel/hail number concentration (1/m3) - real(kind_phys), intent(in) :: qgout2(:,:) ! copy of qgin as used to compute dgin2 - real(kind_phys), intent(in) :: ngout2(:,:) ! copy of ngin as used to compute dgin2 - real(kind_phys), intent(in) :: dgout2(:,:) ! mean graupel/hail particle diameter (m) - real(kind_phys), intent(in) :: freqg(:,:) ! fractional occurrence of graupel - real(kind_phys), intent(in) :: prer_evap(:,:) ! evaporation rate of rain (kg/kg/s) - - ! CCPP error handling variables - character(len=512), intent(in) :: errmsg - integer, intent(in) :: errflg - - errmsg = '' - errflg = 0 - - -! KATES HACKATHON NOTES -!! The calls for history_out_field are in the pumas_diagnostcis.F90 file, but also with all of the other pumas code. -!! Those calls need to be hooked up to the parameters in the call list here. -!! There is an issue with subcolumn/grid scale I'm not sure how to address the grid averaging that is done after the -!! pumas_tend function call. - - - !------------------------------------------------------------------------------- - - lchnk = state%lchnk - ncol = state%ncol - psetcols = state%psetcols - ngrdcol = state%ngrdcol - itim_old = pbuf_old_tim_idx() - nlev = pver - top_lev + 1 - - nan_array = nan - - ! Allocate the proc_rates DDT - ! IMPORTANT NOTE -- elements in proc_rates are dimensioned to the nlev dimension while - ! all the other arrays in this routine are dimensioned pver. This is required because - ! PUMAS only gets the top_lev:pver array subsection, and the proc_rates arrays - ! need to be the same levels. - call proc_rates%allocate(ncol, nlev, ncd, micro_mg_warm_rain, errstring) - - call handle_errmsg(errstring, subname="micro_pumas_cam_tend") - - - call phys_getopts(use_subcol_microp_out=use_subcol_microp) - - ! Set the col_type flag to grid or subcolumn dependent on the value of use_subcol_microp - call pbuf_col_type_index(use_subcol_microp, col_type=col_type) - - !----------------------- - ! These physics buffer fields are read only and not set in this parameterization - ! If these fields do not have subcolumn data, copy the grid to the subcolumn if subcolumns is turned on - ! If subcolumns is not turned on, then these fields will be grid data - - call pbuf_get_field(pbuf, naai_hom_idx, naai_hom, col_type=col_type, copy_if_needed=use_subcol_microp) - call pbuf_get_field(pbuf, relvar_idx, relvar, col_type=col_type, copy_if_needed=use_subcol_microp) - call pbuf_get_field(pbuf, accre_enhan_idx, accre_enhan, col_type=col_type, copy_if_needed=use_subcol_microp) - call pbuf_get_field(pbuf, cmeliq_idx, cmeliq, col_type=col_type, copy_if_needed=use_subcol_microp) - - call pbuf_get_field(pbuf, cld_idx, cld, start=(/1,1,itim_old/), kount=(/psetcols,pver,1/), & - col_type=col_type, copy_if_needed=use_subcol_microp) - call pbuf_get_field(pbuf, concld_idx, concld, start=(/1,1,itim_old/), kount=(/psetcols,pver,1/), & - col_type=col_type, copy_if_needed=use_subcol_microp) - call pbuf_get_field(pbuf, ast_idx, ast, start=(/1,1,itim_old/), kount=(/psetcols,pver,1/), & - col_type=col_type, copy_if_needed=use_subcol_microp) - - ! Get convective precip for rainbows - if (prec_dp_idx > 0) then - call pbuf_get_field(pbuf, prec_dp_idx, prec_dp, col_type=col_type, copy_if_needed=use_subcol_microp) - else - nullify(prec_dp) - end if - if (prec_sh_idx > 0) then - call pbuf_get_field(pbuf, prec_sh_idx, prec_sh, col_type=col_type, copy_if_needed=use_subcol_microp) - else - nullify(prec_sh) - end if - -! Merge Precipitation rates (multi-process) - if (associated(prec_dp) .and. associated(prec_sh)) then - precc(:ncol) = prec_dp(:ncol) + prec_sh(:ncol) - else if (associated(prec_dp)) then - precc(:ncol) = prec_dp(:ncol) - else if (associated(prec_sh)) then - precc(:ncol) = prec_sh(:ncol) - else - precc(:ncol) = 0._r8 - end if - - if (do_cldice) then - ! If we ARE prognosing tendencies, then just point to an array of NaN fields to have - ! something for PUMAS to use in call - tnd_qsnow => nan_array - tnd_nsnow => nan_array - re_ice => nan_array - end if - - if (.not. use_hetfrz_classnuc) then - ! Needed to satisfy gnu compiler with optional argument - set to an array of Nan fields - frzimm => nan_array - frzcnt => nan_array - frzdep => nan_array - end if - - if (qsatfac_idx > 0) then - call pbuf_get_field(pbuf, qsatfac_idx, qsatfac, col_type=col_type, copy_if_needed=use_subcol_microp) - else - allocate(qsatfac(ncol,pver),stat=ierr) - call handle_allocate_error(ierr, 'micro_pumas_cam_tend', 'qsatfac') - qsatfac = 1._r8 - end if - - ! initialize tendency variables - preci = 0._r8 - prect = 0._r8 - - - !----------------------- - ! These physics buffer fields are calculated and set in this parameterization - ! If subcolumns is turned on, then these fields will be calculated on a subcolumn grid, otherwise they will be a normal grid - - call pbuf_get_field(pbuf, prec_str_idx, prec_str, col_type=col_type) - call pbuf_get_field(pbuf, snow_str_idx, snow_str, col_type=col_type) - call pbuf_get_field(pbuf, prec_pcw_idx, prec_pcw, col_type=col_type) - call pbuf_get_field(pbuf, snow_pcw_idx, snow_pcw, col_type=col_type) - call pbuf_get_field(pbuf, prec_sed_idx, prec_sed, col_type=col_type) - call pbuf_get_field(pbuf, snow_sed_idx, snow_sed, col_type=col_type) - call pbuf_get_field(pbuf, dei_idx, dei, col_type=col_type) - call pbuf_get_field(pbuf, mu_idx, mu, col_type=col_type) - call pbuf_get_field(pbuf, lambdac_idx, lambdac, col_type=col_type) - call pbuf_get_field(pbuf, des_idx, des, col_type=col_type) - call pbuf_get_field(pbuf, ls_flxprc_idx, mgflxprc, col_type=col_type) - call pbuf_get_field(pbuf, ls_flxsnw_idx, mgflxsnw, col_type=col_type) - call pbuf_get_field(pbuf, ls_mrprc_idx, mgmrprc, col_type=col_type) - call pbuf_get_field(pbuf, ls_mrsnw_idx, mgmrsnw, col_type=col_type) - call pbuf_get_field(pbuf, cv_reffliq_idx, cvreffliq, col_type=col_type) - call pbuf_get_field(pbuf, cv_reffice_idx, cvreffice, col_type=col_type) - call pbuf_get_field(pbuf, iciwpst_idx, iciwpst, col_type=col_type) - call pbuf_get_field(pbuf, iclwpst_idx, iclwpst, col_type=col_type) - call pbuf_get_field(pbuf, icswp_idx, icswp, col_type=col_type) - call pbuf_get_field(pbuf, rel_idx, rel, col_type=col_type) - call pbuf_get_field(pbuf, rei_idx, rei, col_type=col_type) - call pbuf_get_field(pbuf, wsedl_idx, wsedl, col_type=col_type) - call pbuf_get_field(pbuf, qme_idx, qme, col_type=col_type) - call pbuf_get_field(pbuf, bergso_idx, bergstot, col_type=col_type) - - ! Assign the pointer values to the non-pointer proc_rates element - proc_rates%bergstot(:ncol,1:nlev) = bergstot(:ncol,top_lev:pver) - - if (degrau_idx > 0) call pbuf_get_field(pbuf, degrau_idx, degrau, col_type=col_type) - if (icgrauwp_idx > 0) call pbuf_get_field(pbuf, icgrauwp_idx, icgrauwp, col_type=col_type) - if (cldfgrau_idx > 0) call pbuf_get_field(pbuf, cldfgrau_idx, cldfgrau, col_type=col_type) - - call pbuf_get_field(pbuf, cldo_idx, cldo, start=(/1,1,itim_old/), kount=(/psetcols,pver,1/), col_type=col_type) - call pbuf_get_field(pbuf, cldfsnow_idx, cldfsnow, start=(/1,1,itim_old/), kount=(/psetcols,pver,1/), col_type=col_type) - call pbuf_get_field(pbuf, cc_t_idx, CC_t, start=(/1,1,itim_old/), kount=(/psetcols,pver,1/), col_type=col_type) - call pbuf_get_field(pbuf, cc_qv_idx, CC_qv, start=(/1,1,itim_old/), kount=(/psetcols,pver,1/), col_type=col_type) - call pbuf_get_field(pbuf, cc_ql_idx, CC_ql, start=(/1,1,itim_old/), kount=(/psetcols,pver,1/), col_type=col_type) - call pbuf_get_field(pbuf, cc_qi_idx, CC_qi, start=(/1,1,itim_old/), kount=(/psetcols,pver,1/), col_type=col_type) - call pbuf_get_field(pbuf, cc_nl_idx, CC_nl, start=(/1,1,itim_old/), kount=(/psetcols,pver,1/), col_type=col_type) - call pbuf_get_field(pbuf, cc_ni_idx, CC_ni, start=(/1,1,itim_old/), kount=(/psetcols,pver,1/), col_type=col_type) - call pbuf_get_field(pbuf, cc_qlst_idx, CC_qlst, start=(/1,1,itim_old/), kount=(/psetcols,pver,1/), col_type=col_type) - - if (rate1_cw2pr_st_idx > 0) then - call pbuf_get_field(pbuf, rate1_cw2pr_st_idx, rate1ord_cw2pr_st, col_type=col_type) - end if - - !----------------------- - ! These are only on the grid regardless of whether subcolumns are turned on or not - call pbuf_get_field(pbuf, ls_reffrain_idx, mgreffrain_grid) - call pbuf_get_field(pbuf, ls_reffsnow_idx, mgreffsnow_grid) - call pbuf_get_field(pbuf, acpr_idx, acprecl_grid) - call pbuf_get_field(pbuf, acgcme_idx, acgcme_grid) - call pbuf_get_field(pbuf, acnum_idx, acnum_grid) - call pbuf_get_field(pbuf, cmeliq_idx, cmeliq_grid) - call pbuf_get_field(pbuf, ast_idx, ast_grid, start=(/1,1,itim_old/), kount=(/pcols,pver,1/)) - - call pbuf_get_field(pbuf, evprain_st_idx, evprain_st_grid) - call pbuf_get_field(pbuf, evpsnow_st_idx, evpsnow_st_grid) -!!!!! CACNOTE? call pbuf_get_field(pbuf, am_evp_st_idx, am_evp_st_grid) - - !----------------------------------------------------------------------- - ! ... Calculate cosine of zenith angle - ! then cast back to angle (radians) - !----------------------------------------------------------------------- - - zen_angle(:) = 0.0_r8 - rlats(:) = 0.0_r8 - rlons(:) = 0.0_r8 - calday = get_curr_calday() - call get_rlat_all_p( lchnk, ncol, rlats ) - call get_rlon_all_p( lchnk, ncol, rlons ) - call zenith( calday, rlats, rlons, zen_angle, ncol ) - where (zen_angle(:) <= 1.0_r8 .and. zen_angle(:) >= -1.0_r8) - zen_angle(:) = acos( zen_angle(:) ) - elsewhere - zen_angle(:) = 0.0_r8 - end where - - sza(:) = zen_angle(:) * rad2deg - call history_out_field( 'rbSZA', sza) - - !------------------------------------------------------------------------------------- - ! Microphysics assumes 'liquid stratus frac = ice stratus frac - ! = max( liquid stratus frac, ice stratus frac )'. - alst_mic => ast - aist_mic => ast - - ! Output initial in-cloud LWP (before microphysics) - - iclwpi = 0._r8 - iciwpi = 0._r8 - - do i = 1, ncol - do k = top_lev, pver - iclwpi(i) = iclwpi(i) + & - min(state%q(i,k,ixcldliq) / max(mincld,ast(i,k)),0.005_r8) & - * state%pdel(i,k) / gravit - iciwpi(i) = iciwpi(i) + & - min(state%q(i,k,ixcldice) / max(mincld,ast(i,k)),0.005_r8) & - * state%pdel(i,k) / gravit - end do - end do - - cldo(:ncol,top_lev:pver)=ast(:ncol,top_lev:pver) - - ! Initialize local state from input. - call physics_state_copy(state, state_loc) - - ! Because of the of limited vertical resolution, there can be a signifcant - ! warm bias at the cold point tropopause, which can create a wet bias in the - ! stratosphere. For the microphysics only, update the cold point temperature, with - ! an estimate of the coldest point between the model layers. - if (micro_mg_adjust_cpt) then - cp_rh(:ncol, :pver) = 0._r8 - cp_dt(:ncol) = 0._r8 - cp_dz(:ncol) = 0._r8 - - !REMOVECAM - no longer need this when CAM is retired and pcols no longer exists - troplev(:) = 0 - cp_z(:) = 0._r8 - cp_t(:) = 0._r8 - !REMOVECAM_END - call tropopause_find_cam(state_loc, troplev, primary=TROP_ALG_CPP, backup=TROP_ALG_NONE, & - tropZ=cp_z, tropT=cp_t) - - do i = 1, ncol - - ! Update statistics and output results. - if (troplev(i) .ne. NOTFOUND) then - cp_dt(i) = cp_t(i) - state_loc%t(i,troplev(i)) - cp_dz(i) = cp_z(i) - state_loc%zm(i,troplev(i)) - - ! NOTE: This change in temperature is just for the microphysics - ! and should not be added to any tendencies or used to update - ! any states - state_loc%t(i,troplev(i)) = state_loc%t(i,troplev(i)) + cp_dt(i) - end if - end do - - ! Output all of the statistics related to the cold point - ! tropopause adjustment. Th cold point information itself is - ! output in tropopause.F90. - call history_out_field("TROPF_TADJ", state_loc%t) - call history_out_field("TROPF_CDT", cp_dt) - call history_out_field("TROPF_CDZ", cp_dz) - end if - - ! Initialize ptend for output. - lq = .false. - lq(ixq) = .true. - lq(ixcldliq) = .true. - lq(ixcldice) = .true. - lq(ixnumliq) = .true. - lq(ixnumice) = .true. - lq(ixrain) = .true. - lq(ixsnow) = .true. - lq(ixnumrain) = .true. - lq(ixnumsnow) = .true. - if (micro_mg_version > 2) then - lq(ixgraupel) = .true. - lq(ixnumgraupel) = .true. - end if - - ! the name 'cldwat' triggers special tests on cldliq - ! and cldice in physics_update - call physics_ptend_init(ptend, psetcols, "cldwat", ls=.true., lq=lq) - - if (micro_mg_version > 2) then - state_loc_graup(:ncol,:) = state_loc%q(:ncol,:,ixgraupel) - state_loc_numgraup(:ncol,:) = state_loc%q(:ncol,:,ixnumgraupel) - else - state_loc_graup(:ncol,:) = 0._r8 - state_loc_numgraup(:ncol,:) = 0._r8 - end if - - ! Zero out diagnostic rainbow arrays - rbfreq = 0._r8 - rbfrac = 0._r8 - - ! Zero out values above top_lev before passing into _tend for some pbuf variables that are inputs - naai(:ncol,:top_lev-1) = 0._r8 - npccn(:ncol,:top_lev-1) = 0._r8 - - ! The null value for qsatfac is 1, not zero - qsatfac(:ncol,:top_lev-1) = 1._r8 - - ! Zero out values above top_lev for all output variables - ! Note that elements in proc_rates do not have the extra levels as they are dimensioned to be nlev instead of pver - tlat(:ncol,:top_lev-1)=0._r8 - qvlat(:ncol,:top_lev-1)=0._r8 - qcten(:ncol,:top_lev-1)=0._r8 - qiten(:ncol,:top_lev-1)=0._r8 - ncten(:ncol,:top_lev-1)=0._r8 - niten(:ncol,:top_lev-1)=0._r8 - qrten(:ncol,:top_lev-1)=0._r8 - qsten(:ncol,:top_lev-1)=0._r8 - nrten(:ncol,:top_lev-1)=0._r8 - nsten(:ncol,:top_lev-1)=0._r8 - qgten(:ncol,:top_lev-1)=0._r8 - ngten(:ncol,:top_lev-1)=0._r8 - rel(:ncol,:top_lev-1)=0._r8 - rel_fn_dum(:ncol,:top_lev-1)=0._r8 - rei(:ncol,:top_lev-1)=0._r8 - sadice(:ncol,:top_lev-1)=0._r8 - sadsnow(:ncol,:top_lev-1)=0._r8 - prect(:ncol)=0._r8 - preci(:ncol)=0._r8 - nevapr(:ncol,:top_lev-1)=0._r8 - am_evp_st(:ncol,:top_lev-1)=0._r8 - prain(:ncol,:top_lev-1)=0._r8 - cmeice(:ncol,:top_lev-1)=0._r8 - dei(:ncol,:top_lev-1)=0._r8 - mu(:ncol,:top_lev-1)=0._r8 - lambdac(:ncol,:top_lev-1)=0._r8 - qsout(:ncol,:top_lev-1)=0._r8 - des(:ncol,:top_lev-1)=0._r8 - qgout(:ncol,:top_lev-1)=0._r8 - ngout(:ncol,:top_lev-1)=0._r8 - dgout(:ncol,:top_lev-1)=0._r8 - cflx(:ncol,:top_lev-1)=0._r8 - iflx(:ncol,:top_lev-1)=0._r8 - gflx(:ncol,:top_lev-1)=0._r8 - rflx(:ncol,:top_lev-1)=0._r8 - sflx(:ncol,:top_lev-1)=0._r8 - qrout(:ncol,:top_lev-1)=0._r8 - reff_rain_dum(:ncol,:top_lev-1)=0._r8 - reff_snow_dum(:ncol,:top_lev-1)=0._r8 - reff_grau_dum(:ncol,:top_lev-1)=0._r8 - nrout(:ncol,:top_lev-1)=0._r8 - nsout(:ncol,:top_lev-1)=0._r8 - refl(:ncol,:top_lev-1)=0._r8 - arefl(:ncol,:top_lev-1)=0._r8 - areflz(:ncol,:top_lev-1)=0._r8 - frefl(:ncol,:top_lev-1)=0._r8 - csrfl(:ncol,:top_lev-1)=0._r8 - acsrfl(:ncol,:top_lev-1)=0._r8 - fcsrfl(:ncol,:top_lev-1)=0._r8 - refl10cm(:ncol,:top_lev-1)=-9999._r8 - reflz10cm(:ncol,:top_lev-1)=0._r8 - rercld(:ncol,:top_lev-1)=0._r8 - ncai(:ncol,:top_lev-1)=0._r8 - ncal(:ncol,:top_lev-1)=0._r8 - qrout2(:ncol,:top_lev-1)=0._r8 - qsout2(:ncol,:top_lev-1)=0._r8 - nrout2(:ncol,:top_lev-1)=0._r8 - nsout2(:ncol,:top_lev-1)=0._r8 - qgout2(:ncol,:top_lev-1)=0._r8 - ngout2(:ncol,:top_lev-1)=0._r8 - dgout2(:ncol,:top_lev-1)=0._r8 - freqg(:ncol,:top_lev-1)=0._r8 - freqs(:ncol,:top_lev-1)=0._r8 - freqr(:ncol,:top_lev-1)=0._r8 - nfice(:ncol,:top_lev-1)=0._r8 - qcrat(:ncol,:top_lev-1)=0._r8 - tnd_qsnow(:ncol,:top_lev-1)=0._r8 - tnd_nsnow(:ncol,:top_lev-1)=0._r8 - re_ice(:ncol,:top_lev-1)=0._r8 - prer_evap(:ncol,:top_lev-1)=0._r8 - frzimm(:ncol,:top_lev-1)=0._r8 - frzcnt(:ncol,:top_lev-1)=0._r8 - frzdep(:ncol,:top_lev-1)=0._r8 - - do it = 1, num_steps - - call micro_pumas_tend( & - ncol, nlev, dtime/num_steps,& - state_loc%t(:ncol,top_lev:), state_loc%q(:ncol,top_lev:,ixq), & - state_loc%q(:ncol,top_lev:,ixcldliq), state_loc%q(:ncol,top_lev:,ixcldice), & - state_loc%q(:ncol,top_lev:,ixnumliq), state_loc%q(:ncol,top_lev:,ixnumice), & - state_loc%q(:ncol,top_lev:,ixrain), state_loc%q(:ncol,top_lev:,ixsnow), & - state_loc%q(:ncol,top_lev:,ixnumrain), state_loc%q(:ncol,top_lev:,ixnumsnow), & - state_loc_graup(:ncol,top_lev:), state_loc_numgraup(:ncol,top_lev:), & - relvar(:ncol,top_lev:), accre_enhan(:ncol,top_lev:), & - state_loc%pmid(:ncol,top_lev:), state_loc%pdel(:ncol,top_lev:), state_loc%pint(:ncol,top_lev:), & - ast(:ncol,top_lev:), alst_mic(:ncol,top_lev:), aist_mic(:ncol,top_lev:), qsatfac(:ncol,top_lev:), & - rate1cld(:ncol,top_lev:), & - naai(:ncol,top_lev:), npccn(:ncol,top_lev:), & - rndst(:ncol,top_lev:,:), nacon(:ncol,top_lev:,:), & - tlat(:ncol,top_lev:), qvlat(:ncol,top_lev:), & - qcten(:ncol,top_lev:), qiten(:ncol,top_lev:), & - ncten(:ncol,top_lev:), niten(:ncol,top_lev:), & - qrten(:ncol,top_lev:), qsten(:ncol,top_lev:), & - nrten(:ncol,top_lev:), nsten(:ncol,top_lev:), & - qgten(:ncol,top_lev:), ngten(:ncol,top_lev:), & - rel(:ncol,top_lev:), rel_fn_dum(:ncol,top_lev:), rei(:ncol,top_lev:), & - sadice(:ncol,top_lev:), sadsnow(:ncol,top_lev:), & - prect(:ncol), preci(:ncol), & - nevapr(:ncol,top_lev:), am_evp_st(:ncol,top_lev:), & - prain(:ncol,top_lev:), & - cmeice(:ncol,top_lev:), dei(:ncol,top_lev:), & - mu(:ncol,top_lev:), lambdac(:ncol,top_lev:), & - qsout(:ncol,top_lev:), des(:ncol,top_lev:), & - qgout(:ncol,top_lev:), ngout(:ncol,top_lev:), dgout(:ncol,top_lev:), & - cflx(:ncol,top_lev:), iflx(:ncol,top_lev:), & - gflx(:ncol,top_lev:), & - rflx(:ncol,top_lev:), sflx(:ncol,top_lev:), qrout(:ncol,top_lev:), & - reff_rain_dum(:ncol,top_lev:), reff_snow_dum(:ncol,top_lev:), reff_grau_dum(:ncol,top_lev:), & - nrout(:ncol,top_lev:), nsout(:ncol,top_lev:), & - refl(:ncol,top_lev:), arefl(:ncol,top_lev:), areflz(:ncol,top_lev:), & - frefl(:ncol,top_lev:), csrfl(:ncol,top_lev:), acsrfl(:ncol,top_lev:), & - fcsrfl(:ncol,top_lev:), & - refl10cm(:ncol,top_lev:), reflz10cm(:ncol,top_lev:), rercld(:ncol,top_lev:), & - ncai(:ncol,top_lev:), ncal(:ncol,top_lev:), & - qrout2(:ncol,top_lev:), qsout2(:ncol,top_lev:), & - nrout2(:ncol,top_lev:), nsout2(:ncol,top_lev:), & - drout_dum(:ncol,top_lev:), dsout2_dum(:ncol,top_lev:), & - qgout2(:ncol,top_lev:), ngout2(:ncol,top_lev:), dgout2(:ncol,top_lev:), freqg(:ncol,top_lev:), & - freqs(:ncol,top_lev:), freqr(:ncol,top_lev:), & - nfice(:ncol,top_lev:), qcrat(:ncol,top_lev:), & - proc_rates, & - errstring, & - tnd_qsnow(:ncol,top_lev:),tnd_nsnow(:ncol,top_lev:),re_ice(:ncol,top_lev:),& - prer_evap(:ncol,top_lev:), & - frzimm(:ncol,top_lev:), frzcnt(:ncol,top_lev:), frzdep(:ncol,top_lev:) ) - - call handle_errmsg(errstring, subname="micro_pumas_cam_tend") - - call physics_ptend_init(ptend_loc, psetcols, "micro_pumas", & - ls=.true., lq=lq) - - ! Set local tendency. - ptend_loc%s(:ncol,top_lev:) = tlat(:ncol,top_lev:) - ptend_loc%q(:ncol,top_lev:,ixq) = qvlat(:ncol,top_lev:) - ptend_loc%q(:ncol,top_lev:,ixcldliq) = qcten(:ncol,top_lev:) - ptend_loc%q(:ncol,top_lev:,ixcldice) = qiten(:ncol,top_lev:) - ptend_loc%q(:ncol,top_lev:,ixnumliq) = ncten(:ncol,top_lev:) - - if (do_cldice) then - ptend_loc%q(:ncol,top_lev:,ixnumice) = niten(:ncol,top_lev:) - else - ! In this case, the tendency should be all 0. - if (any(niten(:ncol,:) /= 0._r8)) then - call endrun("micro_pumas_cam:ERROR - MG microphysics is configured not to prognose cloud ice,"// & - " but micro_pumas_tend has ice number tendencies.") - end if - ptend_loc%q(:ncol,:,ixnumice) = 0._r8 - end if - - ptend_loc%q(:ncol,top_lev:,ixrain) = qrten(:ncol,top_lev:) - ptend_loc%q(:ncol,top_lev:,ixsnow) = qsten(:ncol,top_lev:) - ptend_loc%q(:ncol,top_lev:,ixnumrain) = nrten(:ncol,top_lev:) - ptend_loc%q(:ncol,top_lev:,ixnumsnow) = nsten(:ncol,top_lev:) - - if (micro_mg_version > 2) then - ptend_loc%q(:ncol,top_lev:,ixgraupel) = qgten(:ncol,top_lev:) - ptend_loc%q(:ncol,top_lev:,ixnumgraupel) = ngten(:ncol,top_lev:) - end if - - ! Sum into overall ptend - call physics_ptend_sum(ptend_loc, ptend, ncol) - - ! Update local state - call physics_update(state_loc, ptend_loc, dtime/num_steps) - - if (trim(micro_mg_warm_rain) == 'tau') then - proc_rates%amk_c(:ncol,:,:) = proc_rates%amk_c(:ncol,:,:)/num_steps - proc_rates%ank_c(:ncol,:,:) = proc_rates%ank_c(:ncol,:,:)/num_steps - proc_rates%amk_r(:ncol,:,:) = proc_rates%amk_r(:ncol,:,:)/num_steps - proc_rates%ank_r(:ncol,:,:) = proc_rates%ank_r(:ncol,:,:)/num_steps - proc_rates%amk(:ncol,:,:) = proc_rates%amk(:ncol,:,:)/num_steps - proc_rates%ank(:ncol,:,:) = proc_rates%ank(:ncol,:,:)/num_steps - proc_rates%amk_out(:ncol,:,:) = proc_rates%amk_out(:ncol,:,:)/num_steps - end if - - end do - - ! Divide ptend by substeps. - call physics_ptend_scale(ptend, 1._r8/num_steps, ncol) - - ! Check to make sure that the microphysics code is respecting the flags that control - ! whether MG should be prognosing cloud ice and cloud liquid or not. - if (.not. do_cldice) then - if (any(ptend%q(:ncol,top_lev:pver,ixcldice) /= 0.0_r8)) & - call endrun("micro_pumas_cam:ERROR - MG microphysics is configured not to prognose cloud ice,"// & - " but micro_pumas_tend has ice mass tendencies.") - if (any(ptend%q(:ncol,top_lev:pver,ixnumice) /= 0.0_r8)) & - call endrun("micro_pumas_cam:ERROR - MG microphysics is configured not to prognose cloud ice,"// & - " but micro_pumas_tend has ice number tendencies.") - end if - if (.not. do_cldliq) then - if (any(ptend%q(:ncol,top_lev:pver,ixcldliq) /= 0.0_r8)) & - call endrun("micro_pumas_cam:ERROR - MG microphysics is configured not to prognose cloud liquid,"// & - " but micro_pumas_tend has liquid mass tendencies.") - if (any(ptend%q(:ncol,top_lev:pver,ixnumliq) /= 0.0_r8)) & - call endrun("micro_pumas_cam:ERROR - MG microphysics is configured not to prognose cloud liquid,"// & - " but micro_pumas_tend has liquid number tendencies.") - end if - - mnuccdohet = 0._r8 - do k=top_lev,pver - do i=1,ncol - if (naai(i,k) > 0._r8) then - mnuccdohet(i,k) = proc_rates%mnuccdtot(i,k-top_lev+1) - (naai_hom(i,k)/naai(i,k))*proc_rates%mnuccdtot(i,k-top_lev+1) - end if - end do - end do - - mgflxprc(:ncol,top_lev:pverp) = rflx(:ncol,top_lev:pverp) + sflx(:ncol,top_lev:pverp) - mgflxsnw(:ncol,top_lev:pverp) = sflx(:ncol,top_lev:pverp) - - !add condensate fluxes for MG2 (ice and snow already added for MG1) - if (micro_mg_version >= 2) then - mgflxprc(:ncol,top_lev:pverp) = mgflxprc(:ncol,top_lev:pverp)+ iflx(:ncol,top_lev:pverp) + cflx(:ncol,top_lev:pverp) - mgflxsnw(:ncol,top_lev:pverp) = mgflxsnw(:ncol,top_lev:pverp) + iflx(:ncol,top_lev:pverp) - end if - - !add graupel fluxes for MG3 to snow flux - if (micro_mg_version >= 3) then - mgflxprc(:ncol,top_lev:pverp) = mgflxprc(:ncol,top_lev:pverp)+gflx(:ncol,top_lev:pverp) - mgflxsnw(:ncol,top_lev:pverp) = mgflxsnw(:ncol,top_lev:pverp)+gflx(:ncol,top_lev:pverp) - end if - - mgmrprc(:ncol,top_lev:pver) = qrout(:ncol,top_lev:pver) + qsout(:ncol,top_lev:pver) - mgmrsnw(:ncol,top_lev:pver) = qsout(:ncol,top_lev:pver) - - !! calculate effective radius of convective liquid and ice using dcon and deicon (not used by code, not useful for COSP) - !! hard-coded as average of hard-coded values used for deep/shallow convective detrainment (near line 1502/1505) - cvreffliq(:ncol,top_lev:pver) = 9.0_r8 - cvreffice(:ncol,top_lev:pver) = 37.0_r8 - - ! Reassign rate1 if modal aerosols - if (rate1_cw2pr_st_idx > 0) then - rate1ord_cw2pr_st(:ncol,top_lev:pver) = rate1cld(:ncol,top_lev:pver) - end if - - ! Sedimentation velocity for liquid stratus cloud droplet - wsedl(:ncol,top_lev:pver) = proc_rates%vtrmc(:ncol,1:nlev) - - ! Microphysical tendencies for use in the macrophysics at the next time step - CC_T(:ncol,top_lev:pver) = tlat(:ncol,top_lev:pver)/cpair - CC_qv(:ncol,top_lev:pver) = qvlat(:ncol,top_lev:pver) - CC_ql(:ncol,top_lev:pver) = qcten(:ncol,top_lev:pver) - CC_qi(:ncol,top_lev:pver) = qiten(:ncol,top_lev:pver) - CC_nl(:ncol,top_lev:pver) = ncten(:ncol,top_lev:pver) - CC_ni(:ncol,top_lev:pver) = niten(:ncol,top_lev:pver) - CC_qlst(:ncol,top_lev:pver) = qcten(:ncol,top_lev:pver)/max(0.01_r8,alst_mic(:ncol,top_lev:pver)) - - ! Net micro_pumas_cam condensation rate - qme(:ncol,:top_lev-1) = 0._r8 - qme(:ncol,top_lev:pver) = cmeliq(:ncol,top_lev:pver) + proc_rates%cmeitot(:ncol,1:nlev) - - ! For precip, accumulate only total precip in prec_pcw and snow_pcw variables. - ! Other precip output variables are set to 0 - ! Do not subscript by ncol here, because in physpkg we divide the whole - ! array and need to avoid an FPE due to uninitialized data. - prec_pcw = prect - snow_pcw = preci - prec_sed = 0._r8 - snow_sed = 0._r8 - prec_str = prec_pcw + prec_sed - snow_str = snow_pcw + snow_sed - - icecldf(:ncol,top_lev:pver) = ast(:ncol,top_lev:pver) - liqcldf(:ncol,top_lev:pver) = ast(:ncol,top_lev:pver) - - ! ------------------------------------------------------------ ! - ! Compute in cloud ice and liquid mixing ratios ! - ! Note that 'iclwp, iciwp' are used for radiation computation. ! - ! ------------------------------------------------------------ ! - - icinc = 0._r8 - icwnc = 0._r8 - iciwpst = 0._r8 - iclwpst = 0._r8 - icswp = 0._r8 - cldfsnow = 0._r8 - if (micro_mg_version > 2) then - icgrauwp = 0._r8 - cldfgrau = 0._r8 - end if - - do k = top_lev, pver - do i = 1, ncol - ! Limits for in-cloud mixing ratios consistent with MG microphysics - ! in-cloud mixing ratio maximum limit of 0.005 kg/kg - icimrst(i,k) = min( state_loc%q(i,k,ixcldice) / max(mincld,icecldf(i,k)),0.005_r8 ) - icwmrst(i,k) = min( state_loc%q(i,k,ixcldliq) / max(mincld,liqcldf(i,k)),0.005_r8 ) - icinc(i,k) = state_loc%q(i,k,ixnumice) / max(mincld,icecldf(i,k)) * & - state_loc%pmid(i,k) / (287.15_r8*state_loc%t(i,k)) - icwnc(i,k) = state_loc%q(i,k,ixnumliq) / max(mincld,liqcldf(i,k)) * & - state_loc%pmid(i,k) / (287.15_r8*state_loc%t(i,k)) - ! Calculate micro_pumas_cam cloud water paths in each layer - ! Note: uses stratiform cloud fraction! - iciwpst(i,k) = min(state_loc%q(i,k,ixcldice)/max(mincld,ast(i,k)),0.005_r8) * state_loc%pdel(i,k) / gravit - iclwpst(i,k) = min(state_loc%q(i,k,ixcldliq)/max(mincld,ast(i,k)),0.005_r8) * state_loc%pdel(i,k) / gravit - - ! ------------------------------ ! - ! Adjust cloud fraction for snow ! - ! ------------------------------ ! - cldfsnow(i,k) = cld(i,k) - ! If cloud and only ice ( no convective cloud or ice ), then set to 0. - if( ( cldfsnow(i,k) .gt. 1.e-4_r8 ) .and. & - ( concld(i,k) .lt. 1.e-4_r8 ) .and. & - ( state_loc%q(i,k,ixcldliq) .lt. 1.e-10_r8 ) ) then - cldfsnow(i,k) = 0._r8 - end if - ! If no cloud and snow, then set to 0.25 - if( ( cldfsnow(i,k) .le. 1.e-4_r8 ) .and. ( qsout(i,k) .gt. 1.e-6_r8 ) ) then - cldfsnow(i,k) = 0.25_r8 - end if - ! Calculate in-cloud snow water path - icswp(i,k) = qsout(i,k) / max( mincld, cldfsnow(i,k) ) * state_loc%pdel(i,k) / gravit - - ! --------------------------------- ! - ! Adjust cloud fraction for graupel ! - ! --------------------------------- ! - if (micro_mg_version > 2) then - cldfgrau(i,k) = cld(i,k) - ! If cloud and only ice ( no convective cloud or ice ), then set to 0. - if( ( cldfgrau(i,k) .gt. 1.e-4_r8 ) .and. & - ( concld(i,k) .lt. 1.e-4_r8 ) .and. & - ( state_loc%q(i,k,ixcldliq) .lt. 1.e-10_r8 ) ) then - cldfgrau(i,k) = 0._r8 - end if - ! If no cloud and graupel, then set to 0.25 - if( ( cldfgrau(i,k) .le. 1.e-4_r8 ) .and. ( qgout(i,k) .gt. 1.e-9_r8 ) ) then - cldfgrau(i,k) = 0.25_r8 - end if - - ! Calculate in-cloud snow water path - icgrauwp(i,k) = qgout(i,k) / max( 1.e-2_r8, cldfgrau(i,k) ) * state_loc%pdel(i,k) / gravit - end if - - end do - end do - - ! Calculate cloud fraction for prognostic precip sizes. - ! Cloud fraction for purposes of precipitation is maximum cloud - ! fraction out of all the layers that the precipitation may be - ! falling down from. - cldmax(:ncol,top_lev:) = max(mincld, ast(:ncol,top_lev:)) - do k = top_lev+1, pver - where (state_loc%q(:ncol,k-1,ixrain) >= qsmall .or. & - state_loc%q(:ncol,k-1,ixsnow) >= qsmall) - cldmax(:ncol,k) = max(cldmax(:ncol,k-1), cldmax(:ncol,k)) - end where - end do - - !Copy pbuf field from proc_rates back to pbuf pointer - bergstot(:ncol,top_lev:) = proc_rates%bergstot(:ncol,1:nlev) - bergstot(:ncol,1:top_lev-1) = 0._r8 - - ! ------------------------------------------------------ ! - ! ------------------------------------------------------ ! - ! All code from here to the end is on grid columns only ! - ! ------------------------------------------------------ ! - ! ------------------------------------------------------ ! - - ! Average the fields which are needed later in this paramterization to be on the grid - if (use_subcol_microp) then - call subcol_field_avg(prec_str, ngrdcol, lchnk, prec_str_grid) - call subcol_field_avg(iclwpst, ngrdcol, lchnk, iclwpst_grid) - call subcol_field_avg(cvreffliq, ngrdcol, lchnk, cvreffliq_grid) - call subcol_field_avg(cvreffice, ngrdcol, lchnk, cvreffice_grid) - call subcol_field_avg(mgflxprc, ngrdcol, lchnk, mgflxprc_grid) - call subcol_field_avg(mgflxsnw, ngrdcol, lchnk, mgflxsnw_grid) - call subcol_field_avg(qme, ngrdcol, lchnk, qme_grid) - call subcol_field_avg(nevapr, ngrdcol, lchnk, nevapr_grid) - call subcol_field_avg(prain, ngrdcol, lchnk, prain_grid) - call subcol_field_avg(proc_rates%evapsnow, ngrdcol, lchnk, evpsnow_st_grid(:,top_lev:)) - call subcol_field_avg(proc_rates%bergstot, ngrdcol, lchnk, bergso_grid(:,top_lev:)) - - call subcol_field_avg(am_evp_st, ngrdcol, lchnk, am_evp_st_grid) - - ! Average fields which are not in pbuf - call subcol_field_avg(qrout, ngrdcol, lchnk, qrout_grid) - call subcol_field_avg(qsout, ngrdcol, lchnk, qsout_grid) - call subcol_field_avg(nsout, ngrdcol, lchnk, nsout_grid) - call subcol_field_avg(nrout, ngrdcol, lchnk, nrout_grid) - call subcol_field_avg(cld, ngrdcol, lchnk, cld_grid) - call subcol_field_avg(proc_rates%qcrestot, ngrdcol, lchnk, qcreso_grid(:,top_lev:)) - call subcol_field_avg(proc_rates%melttot, ngrdcol, lchnk, melto_grid(:,top_lev:)) - call subcol_field_avg(proc_rates%mnuccctot, ngrdcol, lchnk, mnuccco_grid(:,top_lev:)) - call subcol_field_avg(proc_rates%mnuccttot, ngrdcol, lchnk, mnuccto_grid(:,top_lev:)) - call subcol_field_avg(proc_rates%bergtot, ngrdcol, lchnk, bergo_grid(:,top_lev:)) - call subcol_field_avg(proc_rates%homotot, ngrdcol, lchnk, homoo_grid(:,top_lev:)) - call subcol_field_avg(proc_rates%msacwitot, ngrdcol, lchnk, msacwio_grid(:,top_lev:)) - call subcol_field_avg(proc_rates%psacwstot, ngrdcol, lchnk, psacwso_grid(:,top_lev:)) - call subcol_field_avg(proc_rates%cmeitot, ngrdcol, lchnk, cmeiout_grid(:,top_lev:)) - call subcol_field_avg(proc_rates%qirestot, ngrdcol, lchnk, qireso_grid(:,top_lev:)) - call subcol_field_avg(proc_rates%prcitot, ngrdcol, lchnk, prcio_grid(:,top_lev:)) - call subcol_field_avg(proc_rates%praitot, ngrdcol, lchnk, praio_grid(:,top_lev:)) - call subcol_field_avg(icwmrst, ngrdcol, lchnk, icwmrst_grid) - call subcol_field_avg(icimrst, ngrdcol, lchnk, icimrst_grid) - call subcol_field_avg(liqcldf, ngrdcol, lchnk, liqcldf_grid) - call subcol_field_avg(icecldf, ngrdcol, lchnk, icecldf_grid) - call subcol_field_avg(icwnc, ngrdcol, lchnk, icwnc_grid) - call subcol_field_avg(icinc, ngrdcol, lchnk, icinc_grid) - call subcol_field_avg(state_loc%pdel, ngrdcol, lchnk, pdel_grid) - call subcol_field_avg(proc_rates%pratot, ngrdcol, lchnk, prao_grid(:,top_lev:)) - call subcol_field_avg(proc_rates%prctot, ngrdcol, lchnk, prco_grid(:,top_lev:)) - - call subcol_field_avg(state_loc%q(:,:,ixnumliq), ngrdcol, lchnk, nc_grid(:,top_lev:)) - call subcol_field_avg(state_loc%q(:,:,ixnumice), ngrdcol, lchnk, ni_grid(:,top_lev:)) - - call subcol_field_avg(proc_rates%qcsedten, ngrdcol, lchnk, qcsedtenout_grid(:,top_lev:)) - call subcol_field_avg(proc_rates%qisedten, ngrdcol, lchnk, qisedtenout_grid(:,top_lev:)) - call subcol_field_avg(proc_rates%vtrmc, ngrdcol, lchnk, vtrmcout_grid(:,top_lev:)) - call subcol_field_avg(proc_rates%vtrmi, ngrdcol, lchnk, vtrmiout_grid(:,top_lev:)) - call subcol_field_avg(proc_rates%qcsevap, ngrdcol, lchnk, qcsevapout_grid(:,top_lev:)) - call subcol_field_avg(proc_rates%qisevap, ngrdcol, lchnk, qisevapout_grid(:,top_lev:)) - - call subcol_field_avg(cldmax, ngrdcol, lchnk, cldmax_grid) - - call subcol_field_avg(state_loc%q(:,:,ixrain), ngrdcol, lchnk, qr_grid) - call subcol_field_avg(state_loc%q(:,:,ixnumrain), ngrdcol, lchnk, nr_grid) - call subcol_field_avg(state_loc%q(:,:,ixsnow), ngrdcol, lchnk, qs_grid) - call subcol_field_avg(state_loc%q(:,:,ixnumsnow), ngrdcol, lchnk, ns_grid) - call subcol_field_avg(proc_rates%qrsedten, ngrdcol, lchnk, qrsedtenout_grid(:,top_lev:)) - call subcol_field_avg(proc_rates%qssedten, ngrdcol, lchnk, qssedtenout_grid(:,top_lev:)) - call subcol_field_avg(proc_rates%umr, ngrdcol, lchnk, umrout_grid(:,top_lev:)) - call subcol_field_avg(proc_rates%ums, ngrdcol, lchnk, umsout_grid(:,top_lev:)) - - if (micro_mg_version > 2) then - call subcol_field_avg(state_loc%q(:,:,ixgraupel), ngrdcol, lchnk, qg_grid) - call subcol_field_avg(state_loc%q(:,:,ixnumgraupel), ngrdcol, lchnk, ng_grid) - call subcol_field_avg(proc_rates%psacrtot, ngrdcol, lchnk, psacro_grid(:,top_lev:)) - call subcol_field_avg(proc_rates%pracgtot, ngrdcol, lchnk, pracgo_grid(:,top_lev:)) - call subcol_field_avg(proc_rates%psacwgtot, ngrdcol, lchnk, psacwgo_grid(:,top_lev:)) - call subcol_field_avg(proc_rates%pgsacwtot, ngrdcol, lchnk, pgsacwo_grid(:,top_lev:)) - call subcol_field_avg(proc_rates%pgracstot, ngrdcol, lchnk, pgracso_grid(:,top_lev:)) - call subcol_field_avg(proc_rates%prdgtot, ngrdcol, lchnk, prdgo_grid(:,top_lev:)) - call subcol_field_avg(proc_rates%qmultgtot, ngrdcol, lchnk, qmultgo_grid(:,top_lev:)) - call subcol_field_avg(proc_rates%qmultrgtot, ngrdcol, lchnk, qmultrgo_grid(:,top_lev:)) - call subcol_field_avg(proc_rates%npracgtot, ngrdcol, lchnk, npracgo_grid(:,top_lev:)) - call subcol_field_avg(proc_rates%nscngtot, ngrdcol, lchnk, nscngo_grid(:,top_lev:)) - call subcol_field_avg(proc_rates%ngracstot, ngrdcol, lchnk, ngracso_grid(:,top_lev:)) - call subcol_field_avg(proc_rates%nmultgtot, ngrdcol, lchnk, nmultgo_grid(:,top_lev:)) - call subcol_field_avg(proc_rates%nmultrgtot, ngrdcol, lchnk, nmultrgo_grid(:,top_lev:)) - call subcol_field_avg(proc_rates%npsacwgtot, ngrdcol, lchnk, npsacwgo_grid(:,top_lev:)) - end if - - else - qcreso_grid(:ncol,:top_lev-1) = 0._r8 - melto_grid(:ncol,:top_lev-1) = 0._r8 - mnuccco_grid(:ncol,:top_lev-1) = 0._r8 - mnuccto_grid(:ncol,:top_lev-1) = 0._r8 - bergo_grid(:ncol,:top_lev-1) = 0._r8 - homoo_grid(:ncol,:top_lev-1) = 0._r8 - msacwio_grid(:ncol,:top_lev-1) = 0._r8 - psacwso_grid(:ncol,:top_lev-1) = 0._r8 - cmeiout_grid(:ncol,:top_lev-1) = 0._r8 - qireso_grid(:ncol,:top_lev-1) = 0._r8 - prcio_grid(:ncol,:top_lev-1) = 0._r8 - praio_grid(:ncol,:top_lev-1) = 0._r8 - prao_grid(:ncol,:top_lev-1) = 0._r8 - prco_grid(:ncol,:top_lev-1) = 0._r8 - qcsedtenout_grid(:ncol,:top_lev-1) = 0._r8 - qisedtenout_grid(:ncol,:top_lev-1) = 0._r8 - vtrmcout_grid(:ncol,:top_lev-1) = 0._r8 - vtrmiout_grid(:ncol,:top_lev-1) = 0._r8 - qcsevapout_grid(:ncol,:top_lev-1) = 0._r8 - qisevapout_grid(:ncol,:top_lev-1) = 0._r8 - qrsedtenout_grid(:ncol,:top_lev-1) = 0._r8 - qssedtenout_grid(:ncol,:top_lev-1) = 0._r8 - umrout_grid(:ncol,:top_lev-1) = 0._r8 - umsout_grid(:ncol,:top_lev-1) = 0._r8 - psacro_grid(:ncol,:top_lev-1) = 0._r8 - pracgo_grid(:ncol,:top_lev-1) = 0._r8 - psacwgo_grid(:ncol,:top_lev-1) = 0._r8 - pgsacwo_grid(:ncol,:top_lev-1) = 0._r8 - pgracso_grid(:ncol,:top_lev-1) = 0._r8 - prdgo_grid(:ncol,:top_lev-1) = 0._r8 - qmultgo_grid(:ncol,:top_lev-1) = 0._r8 - qmultrgo_grid(:ncol,:top_lev-1) = 0._r8 - npracgo_grid(:ncol,:top_lev-1) = 0._r8 - nscngo_grid(:ncol,:top_lev-1) = 0._r8 - ngracso_grid(:ncol,:top_lev-1) = 0._r8 - nmultgo_grid(:ncol,:top_lev-1) = 0._r8 - nmultrgo_grid(:ncol,:top_lev-1) = 0._r8 - npsacwgo_grid(:ncol,:top_lev-1) = 0._r8 - bergso_grid(:ncol,:top_lev-1) = 0._r8 - - ! These pbuf fields need to be assigned. There is no corresponding subcol_field_avg - ! as they are reset before being used, so it would be a needless calculation - lambdac_grid => lambdac - mu_grid => mu - rel_grid => rel - rei_grid => rei - sadice_grid => sadice - sadsnow_grid => sadsnow - dei_grid => dei - des_grid => des - degrau_grid => degrau - - ! fields already on grids, so just assign - prec_str_grid => prec_str - iclwpst_grid => iclwpst - cvreffliq_grid => cvreffliq - cvreffice_grid => cvreffice - mgflxprc_grid => mgflxprc - mgflxsnw_grid => mgflxsnw - qme_grid => qme - nevapr_grid => nevapr - prain_grid => prain - - bergso_grid(:ncol,top_lev:) = proc_rates%bergstot - am_evp_st_grid = am_evp_st - - evpsnow_st_grid(:ncol,top_lev:) = proc_rates%evapsnow - qrout_grid = qrout - qsout_grid = qsout - nsout_grid = nsout - nrout_grid = nrout - cld_grid = cld - qcreso_grid(:ncol,top_lev:) = proc_rates%qcrestot - melto_grid(:ncol,top_lev:) = proc_rates%melttot - mnuccco_grid(:ncol,top_lev:) = proc_rates%mnuccctot - mnuccto_grid(:ncol,top_lev:) = proc_rates%mnuccttot - bergo_grid(:ncol,top_lev:) = proc_rates%bergtot - homoo_grid(:ncol,top_lev:) = proc_rates%homotot - msacwio_grid(:ncol,top_lev:) = proc_rates%msacwitot - psacwso_grid(:ncol,top_lev:) = proc_rates%psacwstot - cmeiout_grid(:ncol,top_lev:) = proc_rates%cmeitot - qireso_grid(:ncol,top_lev:) = proc_rates%qirestot - prcio_grid(:ncol,top_lev:) = proc_rates%prcitot - praio_grid(:ncol,top_lev:) = proc_rates%praitot - icwmrst_grid = icwmrst - icimrst_grid = icimrst - liqcldf_grid = liqcldf - icecldf_grid = icecldf - icwnc_grid = icwnc - icinc_grid = icinc - pdel_grid = state_loc%pdel - prao_grid(:ncol,top_lev:) = proc_rates%pratot - prco_grid(:ncol,top_lev:) = proc_rates%prctot - - nc_grid = state_loc%q(:,:,ixnumliq) - ni_grid = state_loc%q(:,:,ixnumice) - - qcsedtenout_grid(:ncol,top_lev:) = proc_rates%qcsedten - qisedtenout_grid(:ncol,top_lev:) = proc_rates%qisedten - vtrmcout_grid(:ncol,top_lev:) = proc_rates%vtrmc - vtrmiout_grid(:ncol,top_lev:) = proc_rates%vtrmi - qcsevapout_grid(:ncol,top_lev:) = proc_rates%qcsevap - qisevapout_grid(:ncol,top_lev:) = proc_rates%qisevap - - cldmax_grid = cldmax - - qr_grid = state_loc%q(:,:,ixrain) - nr_grid = state_loc%q(:,:,ixnumrain) - qs_grid = state_loc%q(:,:,ixsnow) - ns_grid = state_loc%q(:,:,ixnumsnow) - qrsedtenout_grid(:ncol,top_lev:) = proc_rates%qrsedten - qssedtenout_grid(:ncol,top_lev:) = proc_rates%qssedten - umrout_grid(:ncol,top_lev:) = proc_rates%umr - umsout_grid(:ncol,top_lev:) = proc_rates%ums - -! Zero out terms for budgets if not mg3.... - psacwgo_grid = 0._r8 - pgsacwo_grid = 0._r8 - qmultgo_grid = 0._r8 - - if (micro_mg_version > 2) then - qg_grid = state_loc%q(:,:,ixgraupel) - ng_grid = state_loc%q(:,:,ixnumgraupel) - psacro_grid(:ncol,top_lev:) = proc_rates%psacrtot - pracgo_grid(:ncol,top_lev:) = proc_rates%pracgtot - psacwgo_grid(:ncol,top_lev:) = proc_rates%psacwgtot - pgsacwo_grid(:ncol,top_lev:) = proc_rates%pgsacwtot - pgracso_grid(:ncol,top_lev:) = proc_rates%pgracstot - prdgo_grid(:ncol,top_lev:) = proc_rates%prdgtot - qmultgo_grid(:ncol,top_lev:) = proc_rates%qmultgtot - qmultrgo_grid(:ncol,top_lev:) = proc_rates%qmultrgtot - npracgo_grid(:ncol,top_lev:) = proc_rates%npracgtot - nscngo_grid(:ncol,top_lev:) = proc_rates%nscngtot - ngracso_grid(:ncol,top_lev:) = proc_rates%ngracstot - nmultgo_grid(:ncol,top_lev:) = proc_rates%nmultgtot - nmultrgo_grid(:ncol,top_lev:) = proc_rates%nmultrgtot - npsacwgo_grid(:ncol,top_lev:) = proc_rates%npsacwgtot - end if - - - end if - - ! If on subcolumns, average the rest of the pbuf fields which were modified on subcolumns but are not used further in - ! this parameterization (no need to assign in the non-subcolumn case -- the else step) - if (use_subcol_microp) then - call subcol_field_avg(snow_str, ngrdcol, lchnk, snow_str_grid) - call subcol_field_avg(prec_pcw, ngrdcol, lchnk, prec_pcw_grid) - call subcol_field_avg(snow_pcw, ngrdcol, lchnk, snow_pcw_grid) - call subcol_field_avg(prec_sed, ngrdcol, lchnk, prec_sed_grid) - call subcol_field_avg(snow_sed, ngrdcol, lchnk, snow_sed_grid) - call subcol_field_avg(cldo, ngrdcol, lchnk, cldo_grid) - call subcol_field_avg(mgmrprc, ngrdcol, lchnk, mgmrprc_grid) - call subcol_field_avg(mgmrsnw, ngrdcol, lchnk, mgmrsnw_grid) - call subcol_field_avg(wsedl, ngrdcol, lchnk, wsedl_grid) - call subcol_field_avg(cc_t, ngrdcol, lchnk, cc_t_grid) - call subcol_field_avg(cc_qv, ngrdcol, lchnk, cc_qv_grid) - call subcol_field_avg(cc_ql, ngrdcol, lchnk, cc_ql_grid) - call subcol_field_avg(cc_qi, ngrdcol, lchnk, cc_qi_grid) - call subcol_field_avg(cc_nl, ngrdcol, lchnk, cc_nl_grid) - call subcol_field_avg(cc_ni, ngrdcol, lchnk, cc_ni_grid) - call subcol_field_avg(cc_qlst, ngrdcol, lchnk, cc_qlst_grid) - call subcol_field_avg(iciwpst, ngrdcol, lchnk, iciwpst_grid) - call subcol_field_avg(icswp, ngrdcol, lchnk, icswp_grid) - call subcol_field_avg(cldfsnow, ngrdcol, lchnk, cldfsnow_grid) - - if (micro_mg_version > 2) then - call subcol_field_avg(icgrauwp, ngrdcol, lchnk, icgrauwp_grid) - call subcol_field_avg(cldfgrau, ngrdcol, lchnk, cldfsnow_grid) - end if - - if (rate1_cw2pr_st_idx > 0) then - call subcol_field_avg(rate1ord_cw2pr_st, ngrdcol, lchnk, rate1ord_cw2pr_st_grid) - end if - - end if - - ! ------------------------------------- ! - ! Size distribution calculation ! - ! ------------------------------------- ! - - ! Calculate rho (on subcolumns if turned on) for size distribution - ! parameter calculations and average it if needed - ! - ! State instead of state_loc to preserve answers for MG1 (and in any - ! case, it is unlikely to make much difference). - rho(:ncol,top_lev:) = state%pmid(:ncol,top_lev:) / & - (rair*state%t(:ncol,top_lev:)) - if (use_subcol_microp) then - call subcol_field_avg(rho, ngrdcol, lchnk, rho_grid) - else - rho_grid = rho - end if - - ! Effective radius for cloud liquid, fixed number. - mu_grid = 0._r8 - lambdac_grid = 0._r8 - rel_fn_grid = 10._r8 - - ncic_grid = 1.e8_r8 - - do k = top_lev, pver - !$acc data copyin (mg_liq_props,icwmrst_grid(:ngrdcol,k),rho_grid(:ngrdcol,k)) & - !$acc copy (ncic_grid(:ngrdcol,k)) & - !$acc copyout (mu_grid(:ngrdcol,k),lambdac_grid(:ngrdcol,k)) - call size_dist_param_liq(mg_liq_props, icwmrst_grid(:ngrdcol,k), & - ncic_grid(:ngrdcol,k), rho_grid(:ngrdcol,k), & - mu_grid(:ngrdcol,k), lambdac_grid(:ngrdcol,k), ngrdcol) - !$acc end data - end do - - where (icwmrst_grid(:ngrdcol,top_lev:) > qsmall) - rel_fn_grid(:ngrdcol,top_lev:) = & - (mu_grid(:ngrdcol,top_lev:) + 3._r8)/ & - lambdac_grid(:ngrdcol,top_lev:)/2._r8 * 1.e6_r8 - end where - - ! Effective radius for cloud liquid, and size parameters - ! mu_grid and lambdac_grid. - mu_grid = 0._r8 - lambdac_grid = 0._r8 - rel_grid = 10._r8 - - ! Calculate ncic on the grid - ncic_grid(:ngrdcol,top_lev:) = nc_grid(:ngrdcol,top_lev:) / & - max(mincld,liqcldf_grid(:ngrdcol,top_lev:)) - - do k = top_lev, pver - !$acc data copyin (mg_liq_props,icwmrst_grid(:ngrdcol,k), rho_grid(:ngrdcol,k)) & - !$acc copy (ncic_grid(:ngrdcol,k)) & - !$acc copyout (mu_grid(:ngrdcol,k),lambdac_grid(:ngrdcol,k)) - call size_dist_param_liq(mg_liq_props, icwmrst_grid(:ngrdcol,k), & - ncic_grid(:ngrdcol,k), rho_grid(:ngrdcol,k), & - mu_grid(:ngrdcol,k), lambdac_grid(:ngrdcol,k), ngrdcol) - !$acc end data - end do - - where (icwmrst_grid(:ngrdcol,top_lev:) >= qsmall) - rel_grid(:ngrdcol,top_lev:) = & - (mu_grid(:ngrdcol,top_lev:) + 3._r8) / & - lambdac_grid(:ngrdcol,top_lev:)/2._r8 * 1.e6_r8 - elsewhere - ! Deal with the fact that size_dist_param_liq sets mu_grid to -100 - ! wherever there is no cloud. - mu_grid(:ngrdcol,top_lev:) = 0._r8 - end where - - ! Rain/snow effective diameter. - drout2_grid = 0._r8 - reff_rain_grid = 0._r8 - des_grid = 0._r8 - dsout2_grid = 0._r8 - reff_snow_grid = 0._r8 - reff_grau_grid = 0._r8 - - ! Prognostic precipitation - - where (qr_grid(:ngrdcol,top_lev:) >= 1.e-7_r8) - drout2_grid(:ngrdcol,top_lev:) = avg_diameter( & - qr_grid(:ngrdcol,top_lev:), & - nr_grid(:ngrdcol,top_lev:) * rho_grid(:ngrdcol,top_lev:), & - rho_grid(:ngrdcol,top_lev:), rhow) - - reff_rain_grid(:ngrdcol,top_lev:) = drout2_grid(:ngrdcol,top_lev:) * & - shapeparam * micron2meter - end where - - where (qs_grid(:ngrdcol,top_lev:) >= 1.e-7_r8) - dsout2_grid(:ngrdcol,top_lev:) = avg_diameter( & - qs_grid(:ngrdcol,top_lev:), & - ns_grid(:ngrdcol,top_lev:) * rho_grid(:ngrdcol,top_lev:), & - rho_grid(:ngrdcol,top_lev:), rhosn) - - des_grid(:ngrdcol,top_lev:) = dsout2_grid(:ngrdcol,top_lev:) *& - 3._r8 * rhosn/rhows - - reff_snow_grid(:ngrdcol,top_lev:) = dsout2_grid(:ngrdcol,top_lev:) * & - shapeparam * micron2meter - end where - - -! Graupel/Hail size distribution Placeholder - if (micro_mg_version > 2) then - degrau_grid = 0._r8 - where (qg_grid(:ngrdcol,top_lev:) >= 1.e-7_r8) - dgout2_grid(:ngrdcol,top_lev:) = avg_diameter( & - qg_grid(:ngrdcol,top_lev:), & - ng_grid(:ngrdcol,top_lev:) * rho_grid(:ngrdcol,top_lev:), & - rho_grid(:ngrdcol,top_lev:), rhog) - - reff_grau_grid(:ngrdcol,top_lev:) = dgout2_grid(:ngrdcol,top_lev:) * & - 1.5_r8 * 1.e6_r8 - degrau_grid(:ngrdcol,top_lev:) = dgout2_grid(:ngrdcol,top_lev:) *& - 3._r8 * rhog/rhows - end where - end if - - ! Effective radius and diameter for cloud ice. - rei_grid = 25._r8 - - niic_grid(:ngrdcol,top_lev:) = ni_grid(:ngrdcol,top_lev:) / & - max(mincld,icecldf_grid(:ngrdcol,top_lev:)) - - do k = top_lev, pver - !$acc data copyin (mg_ice_props, icimrst_grid(:ngrdcol,k)) & - !$acc copy (niic_grid(:ngrdcol,k)) & - !$acc copyout (rei_grid(:ngrdcol,k)) - call size_dist_param_basic(mg_ice_props,icimrst_grid(:ngrdcol,k), & - niic_grid(:ngrdcol,k),rei_grid(:ngrdcol,k),ngrdcol) - !$acc end data - end do - - where (icimrst_grid(:ngrdcol,top_lev:) >= qsmall) - rei_grid(:ngrdcol,top_lev:) = 1.5_r8/rei_grid(:ngrdcol,top_lev:) & - * 1.e6_r8 - elsewhere - rei_grid(:ngrdcol,top_lev:) = 25._r8 - end where - - dei_grid = rei_grid * rhoi/rhows * 2._r8 - - ! Limiters for low cloud fraction. - do k = top_lev, pver - do i = 1, ngrdcol - ! Convert snow effective diameter to microns - des_grid(i,k) = des_grid(i,k) * 1.e6_r8 - if ( ast_grid(i,k) < 1.e-4_r8 ) then - mu_grid(i,k) = mucon - lambdac_grid(i,k) = (mucon + 1._r8)/dcon - dei_grid(i,k) = deicon - end if - end do - end do - - mgreffrain_grid(:ngrdcol,top_lev:pver) = reff_rain_grid(:ngrdcol,top_lev:pver) - mgreffsnow_grid(:ngrdcol,top_lev:pver) = reff_snow_grid(:ngrdcol,top_lev:pver) - - ! ------------------------------------- ! - ! Precipitation efficiency Calculation ! - ! ------------------------------------- ! - - !----------------------------------------------------------------------- - ! Liquid water path - - ! Compute liquid water paths, and column condensation - tgliqwp_grid(:ngrdcol) = 0._r8 - tgcmeliq_grid(:ngrdcol) = 0._r8 - do k = top_lev, pver - do i = 1, ngrdcol - tgliqwp_grid(i) = tgliqwp_grid(i) + iclwpst_grid(i,k)*cld_grid(i,k) - - if (cmeliq_grid(i,k) > 1.e-12_r8) then - !convert cmeliq to right units: kgh2o/kgair/s * kgair/m2 / kgh2o/m3 = m/s - tgcmeliq_grid(i) = tgcmeliq_grid(i) + cmeliq_grid(i,k) * & - (pdel_grid(i,k) / gravit) / rhoh2o - end if - end do - end do - - ! note: 1e-6 kgho2/kgair/s * 1000. pa / (9.81 m/s2) / 1000 kgh2o/m3 = 1e-7 m/s - ! this is 1ppmv of h2o in 10hpa - ! alternatively: 0.1 mm/day * 1.e-4 m/mm * 1/86400 day/s = 1.e-9 - - !----------------------------------------------------------------------- - ! precipitation efficiency calculation (accumulate cme and precip) - - minlwp = 0.01_r8 !minimum lwp threshold (kg/m3) - - ! zero out precip efficiency and total averaged precip - pe_grid(:ngrdcol) = 0._r8 - tpr_grid(:ngrdcol) = 0._r8 - pefrac_grid(:ngrdcol) = 0._r8 - - ! accumulate precip and condensation - do i = 1, ngrdcol - - acgcme_grid(i) = acgcme_grid(i) + tgcmeliq_grid(i) - acprecl_grid(i) = acprecl_grid(i) + prec_str_grid(i) - acnum_grid(i) = acnum_grid(i) + 1 - - ! if LWP is zero, then 'end of cloud': calculate precip efficiency - if (tgliqwp_grid(i) < minlwp) then - if (acprecl_grid(i) > 5.e-8_r8) then - tpr_grid(i) = max(acprecl_grid(i)/acnum_grid(i), 1.e-15_r8) - if (acgcme_grid(i) > 1.e-10_r8) then - pe_grid(i) = min(max(acprecl_grid(i)/acgcme_grid(i), 1.e-15_r8), 1.e5_r8) - pefrac_grid(i) = 1._r8 - end if - end if - - ! reset counters -! if (pe_grid(i) /= 0._r8 .and. (pe_grid(i) < 1.e-8_r8 .or. pe_grid(i) > 1.e3_r8)) then -! write (iulog,*) 'PE_grid:ANOMALY pe_grid, acprecl_grid, acgcme_grid, tpr_grid, acnum_grid ', & -! pe_grid(i),acprecl_grid(i), acgcme_grid(i), tpr_grid(i), acnum_grid(i) -! endif - - acprecl_grid(i) = 0._r8 - acgcme_grid(i) = 0._r8 - acnum_grid(i) = 0 - end if ! end LWP zero conditional - - ! if never find any rain....(after 10^3 timesteps...) - if (acnum_grid(i) > 1000) then - acnum_grid(i) = 0 - acprecl_grid(i) = 0._r8 - acgcme_grid(i) = 0._r8 - end if - - end do - - !----------------------------------------------------------------------- - ! vertical average of non-zero accretion, autoconversion and ratio. - ! vars: vprco_grid(i),vprao_grid(i),racau_grid(i),cnt_grid - - vprao_grid = 0._r8 - cnt_grid = 0 - do k = top_lev, pver - vprao_grid(:ngrdcol) = vprao_grid(:ngrdcol) + prao_grid(:ngrdcol,k) - where (prao_grid(:ngrdcol,k) /= 0._r8) cnt_grid(:ngrdcol) = cnt_grid(:ngrdcol) + 1 - end do - - where (cnt_grid > 0) vprao_grid = vprao_grid/cnt_grid - - vprco_grid = 0._r8 - cnt_grid = 0 - do k = top_lev, pver - vprco_grid(:ngrdcol) = vprco_grid(:ngrdcol) + prco_grid(:ngrdcol,k) - where (prco_grid(:ngrdcol,k) /= 0._r8) cnt_grid(:ngrdcol) = cnt_grid(:ngrdcol) + 1 - end do - - where (cnt_grid > 0) - vprco_grid = vprco_grid/cnt_grid - racau_grid = vprao_grid/vprco_grid - elsewhere - racau_grid = 0._r8 - end where - - racau_grid = min(racau_grid, 1.e10_r8) - -!----------------------------------------------------------------------- -! Diagnostic Rainbow Calculation. Seriously. -!----------------------------------------------------------------------- - - do i = 1, ngrdcol - - top_idx = pver - convmx = 0._r8 - frlow = 0._r8 - cldmx = 0._r8 - cldtot = maxval(ast(i,top_lev:)) - -! Find levels in surface layer - do k = top_lev, pver - if (state%pmid(i,k) > rb_pmin) then - top_idx = min(k,top_idx) - end if - end do - -!For all fractional precip calculated below, use maximum in surface layer. -!For convective precip, base on convective cloud area - convmx = maxval(concld(i,top_idx:)) -!For stratiform precip, base on precip fraction - cldmx= maxval(freqr(i,top_idx:)) -! Combine and use maximum of strat or conv fraction - frlow= max(cldmx,convmx) - -!max precip - rmax=maxval(qrout_grid(i,top_idx:)) - -! Stratiform precip mixing ratio OR some convective precip -! (rval = true if any sig precip) - - rval = ((precc(i) > rb_rcmin) .or. (rmax > rb_rmin)) - -!Now can find conditions for a rainbow: -! Maximum cloud cover (CLDTOT) < 0.5 -! 48 < SZA < 90 -! freqr (below rb_pmin) > 0.25 -! Some rain (liquid > 1.e-6 kg/kg, convective precip > 1.e-7 m/s - - if ((cldtot < 0.5_r8) .and. (sza(i) > 48._r8) .and. (sza(i) < 90._r8) .and. rval) then - -!Rainbow 'probability' (area) derived from solid angle theory -!as the fraction of the hemisphere for a spherical cap with angle phi=sza-48. -! This is only valid between 48 < sza < 90 (controlled for above). - - rbfrac(i) = max(0._r8,(1._r8-COS((sza(i)-48._r8)*deg2rad))/2._r8) * frlow - rbfreq(i) = 1.0_r8 - end if - - end do ! end column loop for rainbows - - call history_out_field('RBFRAC', rbfrac) ! subcols - call history_out_field('RBFREQ', rbfreq) ! subcols - - - ! --------------------- ! - ! History Output Fields ! - ! --------------------- ! - - ! Column droplet concentration - cdnumc_grid(:ngrdcol) = sum(nc_grid(:ngrdcol,top_lev:pver) * & - pdel_grid(:ngrdcol,top_lev:pver)/gravit, dim=2) - - ! Averaging for new output fields - efcout_grid = 0._r8 - efiout_grid = 0._r8 - ncout_grid = 0._r8 - niout_grid = 0._r8 - freql_grid = 0._r8 - freqi_grid = 0._r8 - icwmrst_grid_out = 0._r8 - icimrst_grid_out = 0._r8 - freqm_grid = 0._r8 - freqsl_grid = 0._r8 - freqslm_grid = 0._r8 - - do k = top_lev, pver - do i = 1, ngrdcol - if ( liqcldf_grid(i,k) > 0.01_r8 .and. icwmrst_grid(i,k) > 5.e-5_r8 ) then - efcout_grid(i,k) = rel_grid(i,k) * liqcldf_grid(i,k) - ncout_grid(i,k) = icwnc_grid(i,k) * liqcldf_grid(i,k) - freql_grid(i,k) = liqcldf_grid(i,k) - icwmrst_grid_out(i,k) = icwmrst_grid(i,k) - end if - if ( icecldf_grid(i,k) > 0.01_r8 .and. icimrst_grid(i,k) > 1.e-6_r8 ) then - efiout_grid(i,k) = rei_grid(i,k) * icecldf_grid(i,k) - niout_grid(i,k) = icinc_grid(i,k) * icecldf_grid(i,k) - freqi_grid(i,k) = icecldf_grid(i,k) - icimrst_grid_out(i,k) = icimrst_grid(i,k) - end if - - ! Supercooled liquid - if (freql_grid(i,k) > 0.01_r8 .and. freqi_grid(i,k) > 0.01_r8 ) then - freqm_grid(i,k)=min(liqcldf_grid(i,k),icecldf_grid(i,k)) - end if - if (freql_grid(i,k) > 0.01_r8 .and. freqi_grid(i,k) < 0.01_r8 .and. state_loc%t(i,k) < tmelt ) then - freqsl_grid(i,k)=liqcldf_grid(i,k) - end if - if (freql_grid(i,k) > 0.01_r8 .and. freqi_grid(i,k) > 0.01_r8 .and. state_loc%t(i,k) < tmelt ) then - freqslm_grid(i,k)=liqcldf_grid(i,k) - end if - - end do - end do - - ! Cloud top effective radius and number. - fcti_grid = 0._r8 - fctl_grid = 0._r8 - ctrel_grid = 0._r8 - ctrei_grid = 0._r8 - ctnl_grid = 0._r8 - ctni_grid = 0._r8 - fctm_grid = 0._r8 - fctsl_grid = 0._r8 - fctslm_grid= 0._r8 - - do i = 1, ngrdcol - do k = top_lev, pver - if ( liqcldf_grid(i,k) > 0.01_r8 .and. icwmrst_grid(i,k) > 1.e-7_r8 ) then - ctrel_grid(i) = rel_grid(i,k) * liqcldf_grid(i,k) - ctnl_grid(i) = icwnc_grid(i,k) * liqcldf_grid(i,k) - fctl_grid(i) = liqcldf_grid(i,k) - - ! Cloud Top Mixed phase, supercooled liquid only and supercooled liquid mixed - if (freqi_grid(i,k) > 0.01_r8) then - fctm_grid(i)=min(liqcldf_grid(i,k),icecldf_grid(i,k)) - end if - if (freqi_grid(i,k) < 0.01_r8 .and. state_loc%t(i,k) < tmelt ) then - fctsl_grid(i)=liqcldf_grid(i,k) - end if - if (freqi_grid(i,k) > 0.01_r8 .and. state_loc%t(i,k) < tmelt ) then - fctslm_grid(i)=liqcldf_grid(i,k) - end if - - exit - end if - - if ( icecldf_grid(i,k) > 0.01_r8 .and. icimrst_grid(i,k) > 1.e-7_r8 ) then - ctrei_grid(i) = rei_grid(i,k) * icecldf_grid(i,k) - ctni_grid(i) = icinc_grid(i,k) * icecldf_grid(i,k) - fcti_grid(i) = icecldf_grid(i,k) - exit - end if - end do - end do - - ! Evaporation of stratiform precipitation fields for UNICON - evprain_st_grid(:ngrdcol,:pver) = nevapr_grid(:ngrdcol,:pver) - evpsnow_st_grid(:ngrdcol,:pver) - do k = top_lev, pver - do i = 1, ngrdcol - evprain_st_grid(i,k) = max(evprain_st_grid(i,k), 0._r8) - evpsnow_st_grid(i,k) = max(evpsnow_st_grid(i,k), 0._r8) - end do - end do - - ! Assign the values to the pbuf pointers if they exist in pbuf - if (qrain_idx > 0) qrout_grid_ptr = qrout_grid - if (qsnow_idx > 0) qsout_grid_ptr = qsout_grid - if (nrain_idx > 0) nrout_grid_ptr = nrout_grid - if (nsnow_idx > 0) nsout_grid_ptr = nsout_grid - if (qcsedten_idx > 0) qcsedtenout_grid_ptr = qcsedtenout_grid - if (qrsedten_idx > 0) qrsedtenout_grid_ptr = qrsedtenout_grid - if (qisedten_idx > 0) qisedtenout_grid_ptr = qisedtenout_grid - if (qssedten_idx > 0) qssedtenout_grid_ptr = qssedtenout_grid - if (vtrmc_idx > 0) vtrmcout_grid_ptr = vtrmcout_grid - if (umr_idx > 0) umrout_grid_ptr = umrout_grid - if (vtrmi_idx > 0) vtrmiout_grid_ptr = vtrmiout_grid - if (ums_idx > 0) umsout_grid_ptr = umsout_grid - if (qcsevap_idx > 0 ) qcsevapout_grid_ptr = qcsevapout_grid - if (qisevap_idx > 0 ) qisevapout_grid_ptr = qisevapout_grid - - ! --------------------------------------------- ! - ! General outfield calls for microphysics ! - ! --------------------------------------------- ! - - ! Output a handle of variables which are calculated on the fly - - ftem_grid = 0._r8 - - ftem_grid(:ngrdcol,top_lev:pver) = qcreso_grid(:ngrdcol,top_lev:pver) - call history_out_field( 'MPDW2V', ftem_grid) - - ftem_grid(:ngrdcol,top_lev:pver) = melto_grid(:ngrdcol,top_lev:pver) - mnuccco_grid(:ngrdcol,top_lev:pver)& - - mnuccto_grid(:ngrdcol,top_lev:pver) - bergo_grid(:ngrdcol,top_lev:pver) - homoo_grid(:ngrdcol,top_lev:pver)& - - msacwio_grid(:ngrdcol,top_lev:pver) - call history_out_field( 'MPDW2I', ftem_grid) - - if (micro_mg_version > 2) then - ftem_grid(:ngrdcol,top_lev:pver) = -prao_grid(:ngrdcol,top_lev:pver) - prco_grid(:ngrdcol,top_lev:pver)& - - psacwso_grid(:ngrdcol,top_lev:pver) - bergso_grid(:ngrdcol,top_lev:pver)& - - psacwgo_grid(:ngrdcol,top_lev:pver) - pgsacwo_grid(:ngrdcol,top_lev:pver) - else - ftem_grid(:ngrdcol,top_lev:pver) = -prao_grid(:ngrdcol,top_lev:pver) - prco_grid(:ngrdcol,top_lev:pver)& - - psacwso_grid(:ngrdcol,top_lev:pver) - bergso_grid(:ngrdcol,top_lev:pver) - endif - - call history_out_field( 'MPDW2P', ftem_grid) - - ftem_grid(:ngrdcol,top_lev:pver) = cmeiout_grid(:ngrdcol,top_lev:pver) + qireso_grid(:ngrdcol,top_lev:pver) - call history_out_field( 'MPDI2V', ftem_grid) - - if (micro_mg_version > 2) then - ftem_grid(:ngrdcol,top_lev:pver) = -melto_grid(:ngrdcol,top_lev:pver) + mnuccco_grid(:ngrdcol,top_lev:pver) & - + mnuccto_grid(:ngrdcol,top_lev:pver) + bergo_grid(:ngrdcol,top_lev:pver) + homoo_grid(:ngrdcol,top_lev:pver)& - + msacwio_grid(:ngrdcol,top_lev:pver)& - - qmultgo_grid(:ngrdcol,top_lev:pver) - else - ftem_grid(:ngrdcol,top_lev:pver) = -melto_grid(:ngrdcol,top_lev:pver) + mnuccco_grid(:ngrdcol,top_lev:pver) & - + mnuccto_grid(:ngrdcol,top_lev:pver) + bergo_grid(:ngrdcol,top_lev:pver) + homoo_grid(:ngrdcol,top_lev:pver)& - + msacwio_grid(:ngrdcol,top_lev:pver) - endif - - call history_out_field( 'MPDI2W', ftem_grid) - - ftem_grid(:ngrdcol,top_lev:pver) = -prcio_grid(:ngrdcol,top_lev:pver) - praio_grid(:ngrdcol,top_lev:pver) - call history_out_field( 'MPDI2P', ftem_grid) - - ! Output fields which have not been averaged already, averaging if use_subcol_microp is true - if (trim(micro_mg_warm_rain) == 'tau' .or. trim(micro_mg_warm_rain) == 'emulated') then - call history_out_field('scale_qc', proc_rates%scale_qc) ! subcols - call history_out_field('scale_nc', proc_rates%scale_nc) ! subcols - call history_out_field('scale_qr', proc_rates%scale_qr) ! subcols - call history_out_field('scale_nr', proc_rates%scale_nr) ! subcols - call history_out_field('amk_c', proc_rates%amk_c) ! subcols - call history_out_field('ank_c', proc_rates%ank_c) ! subcols - call history_out_field('amk_r', proc_rates%amk_r) ! subcols - call history_out_field('ank_r', proc_rates%ank_r) ! subcols - call history_out_field('amk', proc_rates%amk) ! subcols - call history_out_field('ank', proc_rates%ank) ! subcols - call history_out_field('amk_out', proc_rates%amk_out) ! subcols - call history_out_field('ank_out', proc_rates%ank_out) ! subcols - call history_out_field('QC_TAU_out', proc_rates%qc_out_TAU) ! subcols - call history_out_field('NC_TAU_out', proc_rates%nc_out_TAU) ! subcols - call history_out_field('QR_TAU_out', proc_rates%qr_out_TAU) ! subcols - call history_out_field('NR_TAU_out', proc_rates%nr_out_TAU) ! subcols - call history_out_field('qctend_TAU', proc_rates%qctend_TAU) ! subcols - call history_out_field('nctend_TAU', proc_rates%nctend_TAU) ! subcols - call history_out_field('qrtend_TAU', proc_rates%qrtend_TAU) ! subcols - call history_out_field('nrtend_TAU', proc_rates%nrtend_TAU) ! subcols - call history_out_field('gmnnn_lmnnn_TAU', proc_rates%gmnnn_lmnnn_TAU) ! subcols - call history_out_field('ML_fixer', proc_rates%ML_fixer) ! subcols - call history_out_field('qc_fixer', proc_rates%qc_fixer) ! subcols - call history_out_field('nc_fixer', proc_rates%nc_fixer) ! subcols - call history_out_field('qr_fixer', proc_rates%qr_fixer) ! subcols - call history_out_field('nr_fixer', proc_rates%nr_fixer) ! subcols - call history_out_field('QC_TAU_in', proc_rates%qc_in_TAU) ! subcols - call history_out_field('NC_TAU_in', proc_rates%nc_in_TAU) ! subcols - call history_out_field('QR_TAU_in', proc_rates%qr_in_TAU) ! subcols - call history_out_field('NR_TAU_in', proc_rates%nr_in_TAU) ! subcols - end if - - if (trim(micro_mg_warm_rain) == 'sb2001') then - call history_out_field('qctend_SB2001', proc_rates%qctend_SB2001) ! subcols - call history_out_field('nctend_SB2001', proc_rates%nctend_SB2001) ! subcols - call history_out_field('qrtend_SB2001', proc_rates%qrtend_SB2001) ! subcols - call history_out_field('nrtend_SB2001', proc_rates%nrtend_SB2001) ! subcols - end if - if (trim(micro_mg_warm_rain) == 'kk2000') then - call history_out_field('qctend_KK2000', proc_rates%qctend_KK2000) ! subcols - call history_out_field('nctend_KK2000', proc_rates%nctend_KK2000) ! subcols - call history_out_field('qrtend_KK2000', proc_rates%qrtend_KK2000) ! subcols - call history_out_field('nrtend_KK2000', proc_rates%nrtend_KK2000) ! subcols - end if - call history_out_field('LAMC', proc_rates%lamc_out) ! subcols - call history_out_field('LAMR', proc_rates%lamr_out) ! subcols - call history_out_field('PGAM', proc_rates%pgam_out) ! subcols - call history_out_field('N0R', proc_rates%n0r_out) ! subcols - - call history_out_field('MPICLWPI', iclwpi) ! subcols - call history_out_field('MPICIWPI', iciwpi) ! subcols - call history_out_field('REFL', refl) ! subcols - call history_out_field('AREFL', arefl) ! subcols - call history_out_field('AREFLZ', areflz) ! subcols - call history_out_field('FREFL', frefl) ! subcols - call history_out_field('CSRFL', csrfl) ! subcols - call history_out_field('ACSRFL', acsrfl) ! subcols - call history_out_field('FCSRFL', fcsrfl) ! subcols - call history_out_field('REFL10CM', refl10cm) ! subcols - call history_out_field('REFLZ10CM', reflz10cm) ! subcols - call history_out_field('RERCLD', rercld) ! subcols - call history_out_field('NCAL', ncal) ! subcols - call history_out_field('NCAI', ncai) ! subcols - call history_out_field('AQRAIN', qrout2) ! subcols - call history_out_field('AQSNOW', qsout2) ! subcols - call history_out_field('ANRAIN', nrout2) ! subcols - call history_out_field('ANSNOW', nsout2) ! subcols - call history_out_field('FREQR', freqr) ! subcols - call history_out_field('FREQS', freqs) ! subcols - call history_out_field('MPDT', tlat) ! subcols - call history_out_field('MPDQ', qvlat) ! subcols - call history_out_field('MPDLIQ', qcten) ! subcols - call history_out_field('MPDICE', qiten) ! subcols - call history_out_field('MPDNLIQ', ncten) ! subcols - call history_out_field('MPDNICE', niten) ! subcols - call history_out_field('EVAPSNOW', proc_rates%evapsnow) ! subcols - call history_out_field('QCSEVAP', proc_rates%qcsevap) ! subcols - call history_out_field('QISEVAP', proc_rates%qisevap) ! subcols - call history_out_field('QVRES', proc_rates%qvres) ! subcols - call history_out_field('VTRMC', proc_rates%vtrmc) ! subcols - call history_out_field('VTRMI', proc_rates%vtrmi) ! subcols - call history_out_field('QCSEDTEN', proc_rates%qcsedten) ! subcols - call history_out_field('QISEDTEN', proc_rates%qisedten) ! subcols - call history_out_field('QRSEDTEN', proc_rates%qrsedten) ! subcols - call history_out_field('QSSEDTEN', proc_rates%qssedten) ! subcols - call history_out_field('MNUCCRIO', proc_rates%mnuccritot) ! subcols - call history_out_field('MNUDEPO', proc_rates%mnudeptot) ! subcols - call history_out_field('MELTSTOT', proc_rates%meltstot) ! subcols - call history_out_field('MNUCCDO', proc_rates%mnuccdtot) ! subcols - call history_out_field('MNUCCDOhet', mnuccdohet) ! subcols - call history_out_field('MNUCCRO', proc_rates%mnuccrtot) ! subcols - call history_out_field('PRACSO', proc_rates%pracstot ) ! subcols - call history_out_field('VAPDEPSO', proc_rates%vapdepstot) ! subcols - call history_out_field('MELTSDT', proc_rates%meltsdttot) ! subcols - call history_out_field('FRZRDT', proc_rates%frzrdttot ) ! subcols - call history_out_field('FICE', nfice) ! subcols - call history_out_field('CLDFSNOW', cldfsnow) ! subcols - call history_out_field ('NNUCCCO', proc_rates%nnuccctot ) ! subcols - call history_out_field ('NNUCCTO', proc_rates%nnuccttot ) ! subcols - call history_out_field ('NNUCCDO', proc_rates%nnuccdtot ) ! subcols - call history_out_field ('NNUDEPO', proc_rates%nnudeptot ) ! subcols - call history_out_field ('NHOMO', proc_rates%nhomotot ) ! subcols - call history_out_field ('NNUCCRO', proc_rates%nnuccrtot ) ! subcols - call history_out_field ('NNUCCRIO', proc_rates%nnuccritot ) ! subcols - call history_out_field ('NSACWIO', proc_rates%nsacwitot ) ! subcols - call history_out_field ('NPRAO', proc_rates%npratot ) ! subcols - call history_out_field ('NPSACWSO', proc_rates%npsacwstot ) ! subcols - call history_out_field ('NPRAIO', proc_rates%npraitot ) ! subcols - call history_out_field ('NPRACSO', proc_rates%npracstot ) ! subcols - call history_out_field ('NPRCO', proc_rates%nprctot ) ! subcols - call history_out_field ('NPRCIO', proc_rates%nprcitot ) ! subcols - call history_out_field ('NCSEDTEN', proc_rates%ncsedten ) ! subcols - call history_out_field ('NISEDTEN', proc_rates%nisedten ) ! subcols - call history_out_field ('NRSEDTEN', proc_rates%nrsedten ) ! subcols - call history_out_field ('NSSEDTEN', proc_rates%nssedten ) ! subcols - call history_out_field ('NMELTO', proc_rates%nmelttot ) ! subcols - call history_out_field ('NMELTS', proc_rates%nmeltstot ) ! subcols - - call history_out_field('UMR', proc_rates%umr) ! subcols - call history_out_field('UMS', proc_rates%ums) ! subcols - - call history_out_field('QCRAT', qcrat) ! subcols - - if (micro_mg_version > 2) then - call history_out_field('UMG', proc_rates%umg) ! subcols - call history_out_field('QGSEDTEN', proc_rates%qgsedten) ! subcols - call history_out_field('FREQG', freqg) ! subcols - call history_out_field('AQGRAU', qgout2) ! subcols - call history_out_field('ANGRAU', ngout2) ! subcols - call history_out_field('CLDFGRAU', cldfgrau) ! subcols - call history_out_field('MELTGTOT', proc_rates%meltgtot) ! subcols - call history_out_field('NMELTG', proc_rates%nmeltgtot) ! subcols - call history_out_field('NGSEDTEN', proc_rates%ngsedten ) ! subcols - - end if - - ! Example subcolumn history_out_field call - if (use_subcol_microp) then - call history_out_field('FICE_SCOL', nfice) ! subcols - call history_out_field('MPDLIQ_SCOL', ptend%q(:,:,ixcldliq)) ! subcols - call history_out_field('MPDICE_SCOL', qiten) ! subcols - end if - - ! Output fields which are already on the grid - call history_out_field('QRAIN', qrout_grid) - call history_out_field('QSNOW', qsout_grid) - call history_out_field('NRAIN', nrout_grid) - call history_out_field('NSNOW', nsout_grid) - call history_out_field('CV_REFFLIQ', cvreffliq_grid) - call history_out_field('CV_REFFICE', cvreffice_grid) - call history_out_field('LS_FLXPRC', mgflxprc_grid) - call history_out_field('LS_FLXSNW', mgflxsnw_grid) - call history_out_field('CME', qme_grid) - call history_out_field('PRODPREC', prain_grid) - call history_out_field('EVAPPREC', nevapr_grid) - call history_out_field('QCRESO', qcreso_grid) - call history_out_field('LS_REFFRAIN', mgreffrain_grid) - call history_out_field('LS_REFFSNOW', mgreffsnow_grid) - call history_out_field('DSNOW', des_grid) - call history_out_field('ADRAIN', drout2_grid) - call history_out_field('ADSNOW', dsout2_grid) - call history_out_field('PE', pe_grid) - call history_out_field('PEFRAC', pefrac_grid) - call history_out_field('APRL', tpr_grid) - call history_out_field('VPRAO', vprao_grid) - call history_out_field('VPRCO', vprco_grid) - call history_out_field('RACAU', racau_grid) - call history_out_field('AREL', efcout_grid) - call history_out_field('AREI', efiout_grid) - call history_out_field('AWNC' , ncout_grid) - call history_out_field('AWNI' , niout_grid) - call history_out_field('FREQL', freql_grid) - call history_out_field('FREQI', freqi_grid) - call history_out_field('ACTREL', ctrel_grid) - call history_out_field('ACTREI', ctrei_grid) - call history_out_field('ACTNL', ctnl_grid) - call history_out_field('ACTNI', ctni_grid) - call history_out_field('FCTL', fctl_grid) - call history_out_field('FCTI', fcti_grid) - call history_out_field('ICINC', icinc_grid) - call history_out_field('ICWNC', icwnc_grid) - call history_out_field('EFFLIQ_IND', rel_fn_grid) - call history_out_field('CDNUMC', cdnumc_grid) - call history_out_field('REL', rel_grid) - call history_out_field('REI', rei_grid) - call history_out_field('MG_SADICE', sadice_grid) - call history_out_field('MG_SADSNOW', sadsnow_grid) - call history_out_field('ICIMRST', icimrst_grid_out) - call history_out_field('ICWMRST', icwmrst_grid_out) - call history_out_field('CMEIOUT', cmeiout_grid) - call history_out_field('PRAO', prao_grid) - call history_out_field('PRCO', prco_grid) - call history_out_field('MNUCCCO', mnuccco_grid) - call history_out_field('MNUCCTO', mnuccto_grid) - call history_out_field('MSACWIO', msacwio_grid) - call history_out_field('PSACWSO', psacwso_grid) - call history_out_field('BERGSO', bergso_grid) - call history_out_field('BERGO', bergo_grid) - call history_out_field('MELTO', melto_grid) - call history_out_field('HOMOO', homoo_grid) - call history_out_field('PRCIO', prcio_grid) - call history_out_field('PRAIO', praio_grid) - call history_out_field('QIRESO', qireso_grid) - call history_out_field('FREQM', freqm_grid) - call history_out_field('FREQSL', freqsl_grid) - call history_out_field('FREQSLM', freqslm_grid) - call history_out_field('FCTM', fctm_grid) - call history_out_field('FCTSL', fctsl_grid) - call history_out_field('FCTSLM', fctslm_grid) - - if (micro_mg_version > 2) then - call history_out_field('PRACGO', pracgo_grid) - call history_out_field('PSACRO', psacro_grid) - call history_out_field('PSACWGO', psacwgo_grid) - call history_out_field('PGSACWO', pgsacwo_grid) - call history_out_field('PGRACSO', pgracso_grid) - call history_out_field('PRDGO', prdgo_grid) - call history_out_field('QMULTGO', qmultgo_grid) - call history_out_field('QMULTRGO', qmultrgo_grid) - call history_out_field('LS_REFFGRAU', reff_grau_grid) - call history_out_field ('NPRACGO', npracgo_grid) - call history_out_field ('NSCNGO', nscngo_grid) - call history_out_field ('NGRACSO', ngracso_grid) - call history_out_field ('NMULTGO', nmultgo_grid) - call history_out_field ('NMULTRGO', nmultrgo_grid) - call history_out_field ('NPSACWGO', npsacwgo_grid) - end if - - if (micro_mg_adjust_cpt) then - cp_rh(:ncol, :pver) = 0._r8 - - do i = 1, ncol - - ! Calculate the RH including any T change that we make. - do k = top_lev, pver - call qsat(state_loc%t(i,k), state_loc%pmid(i,k), es, qs) - cp_rh(i,k) = state_loc%q(i, k, ixq) / qs * 100._r8 - end do - end do - - call history_out_field("TROPF_RHADJ", cp_rh) - end if - - ! deallocate the temporary pbuf grid variable which was allocated if subcolumns are not used - if (.not. use_subcol_microp) then - deallocate(bergso_grid) - end if - - ! deallocate the proc_rates DDT - call proc_rates%deallocate(micro_mg_warm_rain) - - ! ptend_loc is deallocated in physics_update above - call physics_state_dealloc(state_loc) - - if (qsatfac_idx <= 0) then - deallocate(qsatfac) - end if - -end subroutine pumas_diagnostics_run end module pumas_diagnostics diff --git a/schemes/sima_diagnostics/pumas_diagnostics.F90-keep_for_run b/schemes/sima_diagnostics/pumas_diagnostics.F90-keep_for_run new file mode 100644 index 00000000..92a661a3 --- /dev/null +++ b/schemes/sima_diagnostics/pumas_diagnostics.F90-keep_for_run @@ -0,0 +1,2150 @@ +REVIEWERS - This is a work in progress. Please save reviews until a future PR + +!CACNOTE - All outfld calls to history_out_field are converted + - All history_add_field calls are done + - Except the constituent history_add_field needs to be changed - see CACNOTE + - Need to replace "#" in units? + - need to line up calls +!!!---------------------------------------------- + +module pumas_diagnostics + + use ccpp_kinds, only: kind_phys + + implicit none + private + save + + public :: pumas_diagnostics_init ! init routine +! public :: pumas_diagnostics_run ! main routine + +CONTAINS + +!> \section arg_table_pumas_diagnostics_init Argument Table +!! \htmlinclude pumas_diagnostics_init.html +subroutine pumas_diagnostics_init(errmsg, errflg) + + use cam_history, only: history_add_field + use cam_history_support, only: horiz_only + + character(len=512), intent(out) :: errmsg + integer, intent(out) :: errflg + + ! Local variables: + + errmsg = '' + errflg = 0 + + ! NOTE -subcyc comments below mean that the original CAM code had "sampled_on_subcycle=.true." in the old outfld call + ! Will use this for guidance during future developmen + +!CACNOTE - come back to this - did not convert get the constituent info yet + +! do m = 1, ncnst +! call cnst_get_ind(cnst_names(m), mm) +! if ( any(mm == (/ ixcldliq, ixcldice, ixrain, ixsnow, ixgraupel /)) ) then +! mass mixing ratios +! call history_add_field(cnst_name(mm), cnst_longname(mm), 'lev', 'avg', 'kg kg-1') !subcyc +! call history_add_field(sflxnam(mm), trim(cnst_name(mm))//' surface flux', horiz_only, 'avg', 'kg m-2 s-1') !subcyc +! else if ( any(mm == (/ ixnumliq, ixnumice, ixnumrain, ixnumsnow, ixnumgraupel /)) ) then +! ! number concentrations +! call history_add_field(cnst_name(mm), cnst_longname(mm), 'lev', 'avg', 'kg-1') !subcyc +! call history_add_field(sflxnam(mm), trim(cnst_name(mm))//' surface flux', horiz_only, 'avg', '1 m-2 s-1') !subcyc +! else +! call endrun( "micro_pumas_cam_init: & +! &Could not call history_add_field for constituent with unknown units.") +! endif +! end do + + call history_add_field(apcnst(ixcldliq), trim(cnst_name(ixcldliq))//' after physics', 'lev', 'avg', 'kg kg-1') !subcyc + call history_add_field(apcnst(ixcldice), trim(cnst_name(ixcldice))//' after physics', 'lev', 'avg', 'kg kg-1') !subcyc + call history_add_field(bpcnst(ixcldliq), trim(cnst_name(ixcldliq))//' before physics','lev', 'avg', 'kg kg-1') !subcyc + call history_add_field(bpcnst(ixcldice), trim(cnst_name(ixcldice))//' before physics','lev', 'avg', 'kg kg-1') !subcyc + + call history_add_field(apcnst(ixrain), trim(cnst_name(ixrain))//' after physics', 'lev', 'avg', 'kg kg-1') !subcyc + call history_add_field(apcnst(ixsnow), trim(cnst_name(ixsnow))//' after physics', 'lev', 'avg', 'kg kg-1') !subcyc + call history_add_field(bpcnst(ixrain), trim(cnst_name(ixrain))//' before physics','lev', 'avg', 'kg kg-1') !subcyc + call history_add_field(bpcnst(ixsnow), trim(cnst_name(ixsnow))//' before physics','lev', 'avg', 'kg kg-1') !subcyc + + if (micro_mg_version > 2) then + call history_add_field(apcnst(ixgraupel), trim(cnst_name(ixgraupel))//' after physics', 'lev', 'avg', 'kg kg-1') !subcyc + call history_add_field(bpcnst(ixgraupel), trim(cnst_name(ixgraupel))//' before physics','lev', 'avg', 'kg kg-1') !subcyc + end if + + call history_add_field ('CME', 'Rate of cond-evap within the cloud', 'lev', 'avg', 'kg kg-1 s-1') !subcyc + call history_add_field ('PRODPREC', 'Rate of conversion of condensate to precip','lev', 'avg', 'kg kg-1 s-1') !subcyc + call history_add_field ('EVAPPREC', 'Rate of evaporation of falling precip', 'lev', 'avg', 'kg kg-1 s-1') !subcyc + call history_add_field ('EVAPSNOW', 'Rate of evaporation of falling snow', 'trop_cld_lev','avg', 'kg kg-1 s-1') !subcyc + call history_add_field ('HPROGCLD', 'Heating from prognostic clouds', 'lev', 'avg', 'W kg-1' ) !subcyc + call history_add_field ('FICE', 'Fractional ice content within cloud', 'lev', 'avg', 'fraction') !subcyc + call history_add_field ('CLDFSNOW', 'Cloud fraction adjusted for snow', 'lev', 'avg', '1' ) !subcyc + call history_add_field ('ICWMRST', 'Prognostic in-stratus water mixing ratio', 'lev', 'avg', 'kg kg-1') !subcyc + call history_add_field ('ICIMRST', 'Prognostic in-stratus ice mixing ratio', 'lev', 'avg', 'kg kg-1') !subcyc + + ! MG microphysics diagnostics + call history_add_field ('QCSEVAP', 'Rate of evaporation of falling cloud water', 'trop_cld_lev', 'avg', 'kg kg-1 s-1') !subcyc + call history_add_field ('QISEVAP', 'Rate of sublimation of falling cloud ice', 'trop_cld_lev', 'avg', 'kg kg-1 s-1') !subcyc + call history_add_field ('QVRES', 'Rate of residual condensation term', 'trop_cld_lev', 'avg', 'kg kg-1 s-1') !subcyc + call history_add_field ('CMEIOUT', 'Rate of deposition/sublimation of cloud ice', 'trop_cld_lev', 'avg', 'kg kg-1/s') !subcyc + call history_add_field ('VTRMC', 'Mass-weighted cloud water fallspeed', 'trop_cld_lev', 'avg', 'm s-1') !subcyc + call history_add_field ('VTRMI', 'Mass-weighted cloud ice fallspeed', 'trop_cld_lev', 'avg', 'm s-1') !subcyc + + call history_add_field ('QCSEDTEN','Cloud water mixing ratio tendency from sedimentation', 'trop_cld_lev', 'avg', & + 'kg kg-1 s-1') !subcyc + call history_add_field ('QISEDTEN','Cloud ice mixing ratio tendency from sedimentation', 'trop_cld_lev', 'avg', & + 'kg kg-1 s-1') !subcyc + + call history_add_field ('PRAO', 'Accretion of cloud water by rain', 'lev', 'avg', 'kg kg-1 s-1') !subcyc + call history_add_field ('PRCO', 'Autoconversion of cloud water', 'lev', 'avg', 'kg kg-1 s-1') !subcyc + call history_add_field ('MNUCCCO', 'Immersion freezing of cloud water', 'lev', 'avg', 'kg kg-1 s-1') !subcyc + call history_add_field ('MNUCCTO', 'Contact freezing of cloud water', 'lev', 'avg', 'kg kg-1 s-1') !subcyc + + call history_add_field ('MNUCCDO', 'Homogeneous and heterogeneous nucleation from vapor', 'trop_cld_lev', 'avg', & + 'kg kg-1 s-1') !subcyc + + call history_add_field ('MNUCCDOhet', 'Heterogeneous nucleation from vapor', 'lev', 'avg', 'kg kg-1 s-1') !subcyc + call history_add_field ('MSACWIO', 'Conversion of cloud water from rime-splintering', 'lev', 'avg', 'kg kg-1 s-1') !subcyc + call history_add_field ('PSACWSO', 'Accretion of cloud water by snow', 'lev', 'avg', 'kg kg-1 s-1') !subcyc + call history_add_field ('BERGSO', 'Conversion of cloud water to snow from bergeron', 'lev', 'avg', 'kg kg-1 s-1') !subcyc + call history_add_field ('BERGO', 'Conversion of cloud water to cloud ice from bergeron','lev', 'avg', 'kg kg-1 s-1') !subcyc + + call history_add_field ('MELTO', 'Melting of cloud ice', 'lev', 'avg', 'kg kg-1 s-1') !subcyc + call history_add_field ('MELTSTOT', 'Melting of snow', 'trop_cld_lev', 'avg', 'kg kg-1 s-1') !subcyc + call history_add_field ('MNUDEPO', 'Deposition Nucleation', 'trop_cld_lev', 'avg', 'kg kg-1 s-1') !subcyc + call history_add_field ('HOMOO', 'Homogeneous freezing of cloud water', 'lev', 'avg', 'kg kg-1 s-1') !subcyc + call history_add_field ('QCRESO', 'Residual condensation term for cloud water', 'lev', 'avg', 'kg kg-1 s-1') !subcyc + call history_add_field ('PRCIO', 'Autoconversion of cloud ice to snow', 'lev', 'avg', 'kg kg-1 s-1') !subcyc + call history_add_field ('PRAIO', 'Accretion of cloud ice to snow', 'lev', 'avg', 'kg kg-1 s-1') !subcyc + call history_add_field ('QIRESO', 'Residual deposition term for cloud ice', 'lev', 'avg', 'kg kg-1 s-1') !subcyc + call history_add_field ('MNUCCRO', 'Heterogeneous freezing of rain to snow', 'trop_cld_lev', 'avg', 'kg kg-1 s-1') !subcyc + call history_add_field ('MNUCCRIO', 'Heterogeneous freezing of rain to ice', 'trop_cld_lev', 'avg', 'kg kg-1 s-1') !subcyc + call history_add_field ('PRACSO', 'Accretion of rain by snow', 'trop_cld_lev', 'avg', 'kg kg-1 s-1') !subcyc + call history_add_field ('VAPDEPSO', 'Vapor deposition onto snow', 'trop_cld_lev', 'avg', 'kg kg-1 s-1') !subcyc + call history_add_field ('MELTSDT', 'Latent heating rate due to melting of snow', 'trop_cld_lev', 'avg', 'W kg-1') !subcyc + + call history_add_field ('FRZRDT', 'Latent heating rate due to homogeneous freezing of rain', 'trop_cld_lev', 'avg', & + 'W kg-1') !subcyc + call history_add_field ('QRSEDTEN', 'Rain mixing ratio tendency from sedimentation', 'trop_cld_lev', 'avg', & + 'kg kg-1 s-1') !subcyc + call history_add_field ('QSSEDTEN', 'Snow mixing ratio tendency from sedimentation', 'trop_cld_lev', 'avg', & + 'kg kg-1 s-1'' !subcyc + call history_add_field ('NNUCCCO', 'Number Tendency due to Immersion freezing of cloud water', 'trop_cld_lev', 'avg', & + '# kg-1 s-1') !subcyc + call history_add_field ('NNUCCTO', 'Number Tendency due to Contact freezing of cloud water', 'trop_cld_lev', 'avg', & + '# kg-1 s-1') !subcyc + call history_add_field ('NNUCCDO', 'Number Tendency due to Ice nucleation', 'trop_cld_lev', 'avg', & + '# kg-1 s-1'') !subcyc + call history_add_field ('NNUDEPO', 'Number Tendency due to Deposition Nucleation', 'trop_cld_lev', 'avg', & + '# kg-1 s-1') !subcyc + call history_add_field ('NHOMO', 'Number Tendency due to Homogeneous freezing of cloud water', 'trop_cld_lev', 'avg', & + '# kg-1 s-1') !subcyc + call history_add_field ('NNUCCRO', 'Number Tendency due to heterogeneous freezing of rain to snow', 'trop_cld_lev', 'avg', & + '# kg-1 s-1') !subcyc + call history_add_field ('NNUCCRIO', 'Number Tendency due to Heterogeneous freezing of rain to ice', 'trop_cld_lev', 'avg', & + '# kg-1 s-1') !subcyc + call history_add_field ('NSACWIO', 'Number Tendency due to Ice Multiplication- Rime-splintering', 'trop_cld_lev', 'avg', & + '# kg-1 s-1') !subcyc + call history_add_field ('NPRAO', 'Number Tendency due to Accretion of cloud water by rain', 'trop_cld_lev', 'avg', & + '# kg-1 s-1') !subcyc + call history_add_field ('NPSACWSO', 'Number Tendency due to Accretion of cloud water by snow', 'trop_cld_lev', 'avg', & + '# kg-1 s-1') !subcyc + call history_add_field ('NPRAIO', 'Number Tendency due to Accretion of cloud ice to snow', 'trop_cld_lev', 'avg', & + '# kg-1 s-1') !subcyc + call history_add_field ('NPRACSO', 'Number Tendency due to Accretion of rain by snow', 'trop_cld_lev', 'avg', & + '# kg-1 s-1') !subcyc + call history_add_field ('NPRCO', 'Number Tendency due to Autoconversion of cloud water [to rain]','trop_cld_lev', 'avg', & + '# kg-1 s-1') !subcyc + call history_add_field ('NPRCIO', 'Number Tendency due to Autoconversion of cloud ice to snow', 'trop_cld_lev', 'avg', & + '# kg-1 s-1') !subcyc + call history_add_field ('NCSEDTEN', 'Number Tendency due to cloud liquid sedimentation', 'trop_cld_lev', 'avg', & + '# kg-1 s-1') !subcyc + call history_add_field ('NISEDTEN', 'Number Tendency due to cloud ice sedimentation', 'trop_cld_lev', 'avg', & + '# kg-1 s-1') !subcyc + + call history_add_field ('NRSEDTEN', 'Number Tendency due to rain sedimentation', 'trop_cld_lev', 'avg', '# kg-1 s-1') !subcyc + call history_add_field ('NSSEDTEN', 'Number Tendency due to snow sedimentation', 'trop_cld_lev', 'avg', '# kg-1 s-1') !subcyc + call history_add_field ('NMELTO', 'Number Tendency due to Melting of cloud ice', 'trop_cld_lev', 'avg', '# kg-1 s-1') !subcyc + call history_add_field ('NMELTS', 'Number Tendency due to Melting of snow', 'trop_cld_lev', 'avg', '# kg-1 s-1') !subcyc + + if (trim(micro_mg_warm_rain) == 'kk2000') then + call history_add_field ('qctend_KK2000', 'cloud liquid mass tendency due to autoconversion accretion from KK2000', & + 'trop_cld_lev', 'avg', 'kg kg-1 s-1') !subcyc + call history_add_field ('nctend_KK2000', 'cloud number mass tendency due to autoconversion accretion from KK2000', & + 'trop_cld_lev', 'avg', '# kg-1 s-1') !subcyc + call history_add_field ('qrtend_KK2000', 'rain mass tendency due to autoconversion accretion from KK2000', & + 'trop_cld_lev', 'avg', 'kg kg-1 s-1') !subcyc + call history_add_field ('nrtend_KK2000', 'rain number tendency due to autoconversion accretion from KK2000', & + 'trop_cld_lev', 'avg', '# kg-1 s-1') !subcyc + end if + + if (trim(micro_mg_warm_rain) == 'sb2001') then + call history_add_field ('qctend_SB2001', 'cloud liquid mass tendency due to autoconversion accretion from SB2001', & + 'trop_cld_lev', 'avg', 'kg kg-1 s-1') !subcyc + call history_add_field ('nctend_SB2001', 'cloud liquid number tendency due to autoconversion accretion from SB2001', & + 'trop_cld_lev', 'avg', '# kg-1 s-1') !subcyc + call history_add_field ('qrtend_SB2001', 'rain mass tendency due to autoconversion accretion from SB2001'), & + 'trop_cld_lev', 'avg', 'kg kg-1 s-1') !subcyc + call history_add_field ('nrtend_SB2001', 'rain number tendency due to autoconversion accretion from SB2001', & + 'trop_cld_lev', 'avg', '# kg-1 s-1') !subcyc + end if + + call history_add_field ('LAMC', 'Size distribution parameter lambda for liquid', 'trop_cld_lev', 'avg', 'unitless') !subcyc + call history_add_field ('LAMR', 'Size distribution parameter lambda for rain', 'trop_cld_lev', 'avg', 'unitless') !subcyc + call history_add_field ('PGAM', 'Size distribution parameter mu (pgam) for liquid', 'trop_cld_lev', 'avg', 'unitless') !subcyc + call history_add_field ('N0R', 'Size distribution parameter n0 for rain', 'trop_cld_lev', 'avg', 'unitless') !subcyc + + if (micro_mg_version > 2) then + call history_add_field ('NMELTG', 'Number Tendency due to Melting of graupel', 'trop_cld_lev', 'avg', & + '# kg-1 s-1') !subcyc + call history_add_field ('NGSEDTEN', 'Number Tendency due to graupel sedimentation', 'trop_cld_lev', 'avg', & + '# kg-1 s-1') !subcyc + call history_add_field ('PSACRO', 'Collisions between rain & snow (Graupel collecting snow)', 'lev', 'avg', & + 'kg kg-1 s-1') !subcyc + call history_add_field ('PRACGO', 'Change in q collection rain by graupel', 'lev', 'avg', & + 'kg kg-1 s-1') !subcyc + call history_add_field ('PSACWGO', 'Change in q collection droplets by graupel', 'lev', 'avg', & + 'kg kg-1 s-1') !subcyc + call history_add_field ('PGSACWO', 'Q conversion to graupel due to collection droplets by snow','lev', 'avg', & + 'kg kg-1 s-1') !subcyc + call history_add_field ('PGRACSO', 'Q conversion to graupel due to collection rain by snow', 'lev', 'avg', & + 'kg kg-1 s-1') !subcyc + + call history_add_field ('PRDGO', 'Deposition of graupel', 'lev', & + 'avg', 'kg kg-1 s-1') !subcyc + call history_add_field ('QMULTGO', 'Q change due to ice mult droplets/graupel', 'lev', & + 'avg', 'kg kg-1 s-1') !subcyc + call history_add_field ('QMULTRGO', 'Q change due to ice mult rain/graupel', 'lev', & + 'avg', 'kg kg-1 s-1') !subcyc + call history_add_field ('QGSEDTEN', 'Graupel/Hail mixing ratio tendency from sedimentation', 'trop_cld_lev', & + 'avg', 'kg kg-1 s-1') !subcyc + call history_add_field ('NPRACGO', 'Change N collection rain by graupel', 'lev', & + 'avg', '# kg-1 s-1') !subcyc + call history_add_field ('NSCNGO', 'Change N conversion to graupel due to collection droplets by snow','lev', & + 'avg', '# kg-1 s-1' ) !subcyc + call history_add_field ('NGRACSO', 'Change N conversion to graupel due to collection rain by snow', 'lev', & + 'avg', '# kg-1 s-1') !subcyc + call history_add_field ('NMULTGO', 'Ice mult due to acc droplets by graupel', 'lev', & + 'avg', '# kg-1 s-1') !subcyc + call history_add_field ('NMULTRGO', 'Ice mult due to acc rain by graupel', 'lev', & + 'avg', '# kg-1 s-1') !subcyc + call history_add_field ('NPSACWGO', 'Change N collection droplets by graupel', 'lev', & + 'avg', '# kg-1 s-1') !subcyc + call history_add_field ('CLDFGRAU', 'Cloud fraction adjusted for graupel', 'lev', & + 'avg', '1') !subcyc + call history_add_field ('MELTGTOT', 'Melting of graupel', 'trop_cld_lev', & + 'avg', 'kg kg-1 s-1') !subcyc + end if + + + call history_add_field ('RBFRAC', 'Fraction of sky covered by a potential rainbow', horiz_only, 'avg', 'Fraction') !subcyc + call history_add_field ('RBFREQ', 'Potential rainbow frequency', horiz_only, 'avg', 'Frequency') !subcyc + call history_add_field( 'rbSZA', 'solar zenith angle', horiz_only, 'inst', 'degrees') !subcyc + + ! History variables for CAM5 microphysics + call history_add_field ('MPDT', 'Heating tendency - Morrison microphysics', 'lev', 'avg', 'W kg-1') !subcyc + call history_add_field ('MPDQ', 'Q tendency - Morrison microphysics', 'lev', 'avg', 'kg kg-1 s-1') !subcyc + call history_add_field ('MPDLIQ', 'CLDLIQ tendency - Morrison microphysics', 'lev', 'avg', 'kg kg-1 s-1') !subcyc + call history_add_field ('MPDICE', 'CLDICE tendency - Morrison microphysics', 'lev', 'avg', 'kg kg-1 s-1') !subcyc + call history_add_field ('MPDNLIQ', 'NUMLIQ tendency - Morrison microphysics', 'lev', 'avg', 'kg-1 s-1') !subcyc + call history_add_field ('MPDNICE', 'NUMICE tendency - Morrison microphysics'), 'lev', 'avg', 'kg-1 s-1') !subcyc + call history_add_field ('MPDW2V', 'Water <--> Vapor tendency - Morrison microphysics', 'lev', 'avg', 'kg kg-1 s-1') !subcyc + call history_add_field ('MPDW2I', 'Water <--> Ice tendency - Morrison microphysics', 'lev', 'avg', 'kg kg-1 s-1') !subcyc + call history_add_field ('MPDW2P', 'Water <--> Precip tendency - Morrison microphysics', 'lev', 'avg', 'kg kg-1 s-1') !subcyc + call history_add_field ('MPDI2V', 'Ice <--> Vapor tendency - Morrison microphysics', 'lev', 'avg', 'kg kg-1 s-1') !subcyc + call history_add_field ('MPDI2W', 'Ice <--> Water tendency - Morrison microphysics', 'lev', 'avg', 'kg kg-1 s-1') !subcyc + call history_add_field ('MPDI2P', 'Ice <--> Precip tendency - Morrison microphysics', 'lev', 'avg', 'kg kg-1 s-1') !subcyc + call history_add_field ('ICWNC', 'Prognostic in-cloud water number conc', 'lev', 'avg', 'm-3') !subcyc + call history_add_field ('ICINC', 'Prognostic in-cloud ice number conc', 'lev', 'avg', 'm-3') !subcyc + call history_add_field ('EFFLIQ_IND','Prognostic droplet effective radius (indirect effect)','lev', 'avg','Micron') !subcyc + + call history_add_field ('CDNUMC', 'Vertically-integrated droplet concentration', horiz_only, 'avg', & + '1 m-2') !subcyc + call history_add_field ('MPICLWPI', 'Vertically-integrated in-cloud Initial Liquid WP (Before Micro)', horiz_only, 'avg', & + 'kg m-2') !subcyc + call history_add_field ('MPICIWPI', 'Vertically-integrated in-cloud Initial Ice WP (Before Micro)', horiz_only, 'avg', & + 'kg m-2') !subcyc + + + ! This is only if the coldpoint temperatures are being adjusted. + ! NOTE: Some fields related to these and output later are added in tropopause.F90. + if (micro_mg_adjust_cpt) then + call history_add_field ('TROPF_TADJ', 'Temperatures after cold point adjustment', 'lev', 'avg', 'K') !subcyc + call history_add_field ('TROPF_RHADJ','Relative Hunidity after cold point adjustment', 'lev', 'avg', 'K') !subcyc + call history_add_field ('TROPF_CDT', 'Cold point temperature adjustment', horiz_only, 'avg', 'K') !subcyc + call history_add_field ('TROPF_CDZ', 'Distance of coldpoint from coldest model level', horiz_only, 'avg', 'm') !subcyc + end if + + + ! Averaging for cloud particle number and size + call history_add_field ('AWNC', 'Average cloud water number conc', 'lev', 'avg', 'm-3') !subcyc + call history_add_field ('AWNI', 'Average cloud ice number conc', 'lev', 'avg', 'm-3') !subcyc + call history_add_field ('AREL', 'Average droplet effective radius', 'lev', 'avg', 'Micron') !subcyc + call history_add_field ('AREI', 'Average ice effective radius', 'lev', 'avg', 'Micron') !subcyc + ! Frequency arrays for above + call history_add_field ('FREQL', 'Fractional occurrence of liquid', 'lev', 'avg', 'fraction') !subcyc + call history_add_field ('FREQI', 'Fractional occurrence of ice', 'lev', 'avg', 'fraction') !subcyc + + + ! Average cloud top particle size and number (liq, ice) and frequency + call history_add_field ('ACTREL', 'Average Cloud Top droplet effective radius', horiz_only, 'avg', 'Micron') !subcyc + call history_add_field ('ACTREI', 'Average Cloud Top ice effective radius', horiz_only, 'avg', 'Micron') !subcyc + call history_add_field ('ACTNL', 'Average Cloud Top droplet number', horiz_only, 'avg', 'm-3') !subcyc + call history_add_field ('ACTNI', 'Average Cloud Top ice number', horiz_only, 'avg', 'm-3') !subcyc + + call history_add_field ('FCTL', 'Fractional occurrence of cloud top liquid', horiz_only, 'avg', 'fraction') !subcyc + call history_add_field ('FCTI', 'Fractional occurrence of cloud top ice', horiz_only, 'avg', 'fraction') !subcyc + + ! New frequency arrays for mixed phase and supercooled liquid (only and mixed) for (a) Cloud Top and (b) everywhere.. + call history_add_field ('FREQM', 'Fractional occurrence of mixed phase', 'lev', 'avg', 'fraction') !subcyc + call history_add_field ('FREQSL', 'Fractional occurrence of only supercooled liquid', 'lev', 'avg', 'fraction') !subcyc + call history_add_field ('FREQSLM', 'Fractional occurrence of super cooled liquid with ice','lev', 'avg', 'fraction') !subcyc + + call history_add_field ('FCTM', 'Fractional occurrence of cloud top mixed phase', horiz_only, 'avg', & + 'fraction') !subcyc + call history_add_field ('FCTSL', 'Fractional occurrence of cloud top only supercooled liquid', horiz_only, 'avg', & + 'fraction') !subcyc + call history_add_field ('FCTSLM', 'Fractional occurrence of cloud top super cooled liquid with ice',horiz_only, 'avg', & + 'fraction') !subcyc + + call history_add_field ('LS_FLXPRC', 'ls stratiform gbm interface rain+snow flux', 'ilev', 'avg', 'kg m-2 s-1') !subcyc + call history_add_field ('LS_FLXSNW', 'ls stratiform gbm interface snow flux', 'ilev', 'avg', 'kg m-2 s-1') !subcyc + + call history_add_field ('REL', 'MG REL stratiform cloud effective radius liquid', 'lev', 'avg', 'micron') !subcyc + call history_add_field ('REI', 'MG REI stratiform cloud effective radius ice', 'lev', 'avg', 'micron') !subcyc + call history_add_field ('LS_REFFRAIN', 'ls stratiform rain effective radius', 'lev', 'avg', 'micron') !subcyc + call history_add_field ('LS_REFFSNOW','ls stratiform snow effective radius', 'lev', 'avg', 'micron') !subcyc + call history_add_field ('CV_REFFLIQ', 'convective cloud liq effective radius', 'lev', 'avg', 'micron') !subcyc + call history_add_field ('CV_REFFICE', 'convective cloud ice effective radius, , 'lev' 'avg', 'micron') !subcyc + call history_add_field ('MG_SADICE', 'MG surface area density ice', 'lev', 'avg', 'cm2 cm-3') !subcyc + call history_add_field ('MG_SADSNOW', 'MG surface area density snow', 'lev', 'avg', 'cm2 cm-3') !subcyc + + ! diagnostic precip + call history_add_field ('QRAIN', 'Diagnostic grid-mean rain mixing ratio', 'lev', 'avg', 'kg kg-1') !subcyc + call history_add_field ('QSNOW', 'Diagnostic grid-mean snow mixing ratio', 'lev', 'avg', 'kg kg-1') !subcyc + call history_add_field ('NRAIN', 'Diagnostic grid-mean rain number conc', 'lev', 'avg', 'm-3') !subcyc + call history_add_field ('NSNOW', 'Diagnostic grid-mean snow number conc', 'lev', 'avg', 'm-3') !subcyc + + ! size of precip + call history_add_field ('RERCLD', 'Diagnostic effective radius of Liquid Cloud and Rain', 'lev', 'avg', 'm') !subcyc + call history_add_field ('DSNOW', 'Diagnostic grid-mean snow diameter', 'lev', 'avg', 'm') !subcyc + + ! diagnostic radar reflectivity, cloud-averaged + call history_add_field ('REFL', '94 GHz radar reflectivity', 'lev', 'avg', 'DBz') !subcyc + call history_add_field ('AREFL', 'Average 94 GHz radar reflectivity', 'lev', 'avg', 'DBz') !subcyc + call history_add_field ('FREFL', 'Fractional occurrence of radar reflectivity', 'lev', 'avg', 'fraction') !subcyc + + call history_add_field ('CSRFL', '94 GHz radar reflectivity (CloudSat thresholds)', 'lev', 'avg', 'DBz') !subcyc + call history_add_field ('ACSRFL', 'Average 94 GHz radar reflectivity (CloudSat thresholds)', 'lev', 'avg', 'DBz') !subcyc + + call history_add_field ('FCSRFL', 'Fractional occurrence of radar reflectivity (CloudSat thresholds)', 'lev', 'avg', & + 'fraction') !subcyc + + call history_add_field ('AREFLZ', 'Average 94 GHz radar reflectivity', 'lev', 'avg', 'mm6 m-3') !subcyc + + ! 10cm (rain) radar reflectivity + call history_add_field ('REFL10CM', '10cm (Rain) radar reflectivity (Dbz)', 'lev', 'avg', 'DBz') !subcyc + call history_add_field ('REFLZ10CM', '10cm (Rain) radar reflectivity (Z units)', 'lev', 'avg', 'mm6 m-3') !subcyc + + ! Aerosol information + call history_add_field ('NCAL', 'Number Concentation Activated for Liquid', 'lev', 'avg', 'm-3') !subcyc + call history_add_field ('NCAI', 'Number Concentation Activated for Ice', 'lev', 'avg', 'm-3') !subcyc + + ! Average rain and snow mixing ratio (Q), number (N) and diameter (D), with frequency + call history_add_field ('AQRAIN', 'Average rain mixing ratio', 'lev', 'avg', 'kg kg-1') !subcyc + call history_add_field ('AQSNOW', 'Average snow mixing ratio', 'lev', 'avg', 'kg kg-1') !subcyc + call history_add_field ('ANRAIN', 'Average rain number conc', 'lev', 'avg', 'm-3') !subcyc + call history_add_field ('ANSNOW', 'Average snow number conc', 'lev', 'avg', 'm-3') !subcyc + call history_add_field ('ADRAIN', 'Average rain effective Diameter', 'lev', 'avg', 'm') !subcyc + call history_add_field ('ADSNOW', 'Average snow effective Diameter', 'lev', 'avg', 'm') !subcyc + call history_add_field ('FREQR', 'Fractional occurrence of rain', 'lev', 'avg', 'fraction') !subcyc + call history_add_field ('FREQS', 'Fractional occurrence of snow', 'lev', 'avg', 'fraction') !subcyc + + ! precipitation efficiency & other diagnostic fields + call history_add_field('PE' , 'Stratiform Precipitation Efficiency (precip/cmeliq)', horiz_only, 'avg', & + '1') !subcyc + call history_add_field('APRL' , 'Average Stratiform Precip Rate over efficiency calculation', horiz_only, 'avg', & + 'm s-1') !subcyc + + call history_add_field('PEFRAC', 'Fraction of timesteps precip efficiency reported', horiz_only, 'avg', '1') !subcyc + call history_add_field('VPRCO' , 'Vertical average of autoconversion rate', horiz_only, 'avg', 'kg kg-1 s-1') !subcyc + call history_add_field('VPRAO' , 'Vertical average of accretion rate', horiz_only, 'avg', 'kg kg-1 s-1') !subcyc + call history_add_field('RACAU' , 'Accretion/autoconversion ratio from vertical average',horiz_only, 'avg', 'kg kg-1 s-1') !subcyc + + call history_add_field('UMR','Mass-weighted rain fallspeed', 'trop_cld_lev', 'avg', 'm s-1') !subcyc + + if (micro_mg_version > 2) then + call history_add_field('UMG', 'Mass-weighted graupel/hail fallspeed', 'trop_cld_lev', 'avg', 'm s-1') !subcyc + call history_add_field('FREQG', 'Fractional occurrence of Graupel', 'lev', 'avg', 'fraction') !subcyc + call history_add_field('LS_REFFGRAU','ls stratiform graupel/hail effective radius', 'lev', 'avg', 'micron') !subcyc + call history_add_field('AQGRAU', 'Average graupel/hail mixing ratio', 'lev', 'avg', 'kg kg-1') !subcyc + call history_add_field('ANGRAU', 'Average graupel/hail number conc', 'lev', 'avg', 'm-3') !subcyc + end if + + + ! qc limiter (only output in versions 1.5 and later) + call history_add_field('QCRAT', 'Qc Limiter: Fraction of qc tendency applied', 'lev', 'avg', 'fraction') !subcyc + +end subroutine pumas_diagnostics_init + +#if 1 +!=============================================================================== + +subroutine pumas_diagnostics_run(state, ptend, dtime, pbuf) + + +!> \section arg_table_pumas_diagnostics_run Argument Table +!! \htmlinclude pumas_diagnostics_run.html +subroutine pumas_diagnostics_run(proc_rates, qcsinksum_rate1ord, naai, npccn, rndst, nacon, tlat, qvlat, qctend, qitend, & + nctend, nitend, qrtend, qstend, nrtend, nstend, qgtend, ngtend, effc, effc_fn, effi, sadice, sadsnow, & + prect, preci, nevapr, am_evp_st, prain, cmeout, deffi, pgamrad, lamcrad, qsout, dsout, qgout, ngout, & + dgout, lflx, iflx, gflx, rflx, sflx, qrout, reff_rain, reff_snow, reff_grau, nrout, nsout, refl, & + arefl, areflz, frefl, csrfl, acsrfl, fcsrfl, refl10cm, reflz10cm, rercld, ncai, ncal, qrout2, qsout2, & + nrout2, nsout2, drout2, dsout2, qgout2, ngout2, dgout2, freqg, freqs, freqr, nfice, qcrat, proc_rates, & + errstring, tnd_qsnow, tnd_nsnow, re_ice, prer_evap, frzimm, frzcnt, frzdep, errmsg, errflg) + + use cam_history, only: history_in_field + + type (proc_rates_type), intent(inout) :: proc_rates + + real(kind_phys), intent(in) :: qcsinksum_rate1ord(:,:) ! 1st order rate for direct cw to precip conversion + real(kind_phys), intent(in) :: tlat(:,:) ! latent heating rate (W/kg) + real(kind_phys), intent(in) :: qvlat(:,:) ! microphysical tendency qv (1/s) + real(kind_phys), intent(in) :: qctend(:,:) ! microphysical tendency qc (1/s) + real(kind_phys), intent(in) :: qitend(:,:) ! microphysical tendency qi (1/s) + real(kind_phys), intent(in) :: nctend(:,:) ! microphysical tendency nc (1/(kg*s)) + real(kind_phys), intent(in) :: nitend(:,:) ! microphysical tendency ni (1/(kg*s)) + + real(kind_phys), intent(in) :: qrtend(:,:) ! microphysical tendency qr (1/s) + real(kind_phys), intent(in) :: qstend(:,:) ! microphysical tendency qs (1/s) + real(kind_phys), intent(in) :: nrtend(:,:) ! microphysical tendency nr (1/(kg*s)) + real(kind_phys), intent(in) :: nstend(:,:) ! microphysical tendency ns (1/(kg*s)) + real(kind_phys), intent(in) :: qgtend(:,:) ! microphysical tendency qg (1/s) + real(kind_phys), intent(in) :: ngtend(:,:) ! microphysical tendency ng (1/(kg*s)) + + real(kind_phys), intent(in) :: effc(:,:) ! droplet effective radius (micron) + real(kind_phys), intent(in) :: effc_fn(:,:) ! droplet effective radius, assuming nc = 1.e8 kg-1 + real(kind_phys), intent(in) :: effi(:,:) ! cloud ice effective radius (micron) + real(kind_phys), intent(in) :: sadice(:,:) ! cloud ice surface area density (cm2/cm3) + real(kind_phys), intent(in) :: sadsnow(:,:) ! cloud snow surface area density (cm2/cm3) + real(kind_phys), intent(in) :: prect(:) ! surface precip rate (m/s) + real(kind_phys), intent(in) :: preci(:) ! surface ice/snow precip rate (m/s) + real(kind_phys), intent(in) :: nevapr(:,:) ! evaporation rate of rain + snow (kg/kg/s) + real(kind_phys), intent(in) :: am_evp_st(:,:) ! stratiform evaporation area (frac) + real(kind_phys), intent(in) :: prain(:,:) ! production of rain + snow (kg/kg/s) + real(kind_phys), intent(in) :: cmeout(:,:) ! Rate of cond-evap of ice (kg/kg/s) + real(kind_phys), intent(in) :: deffi(:,:) ! ice effective diameter for optics (radiation) (micron) + real(kind_phys), intent(in) :: pgamrad(:,:) ! ice gamma parameter for optics (radiation) (no units) + real(kind_phys), intent(in) :: lamcrad(:,:) ! slope of droplet distribution for optics (radiation) (1/m) + real(kind_phys), intent(in) :: qsout(:,:) ! snow mixing ratio (kg/kg) + real(kind_phys), intent(in) :: dsout(:,:) ! snow diameter (m) + real(kind_phys), intent(in) :: lflx(:,:) ! grid-box average liquid condensate flux (kg m^-2 s^-1) + real(kind_phys), intent(in) :: iflx(:,:) ! grid-box average ice condensate flux (kg m^-2 s^-1) + real(kind_phys), intent(in) :: rflx(:,:) ! grid-box average rain flux (kg m^-2 s^-1) + real(kind_phys), intent(in) :: sflx(:,:) ! grid-box average snow flux (kg m^-2 s^-1) + real(kind_phys), intent(in) :: gflx(:,:) ! grid-box average graupel/hail flux (kg m^-2 s^-1) + + real(kind_phys), intent(in) :: qrout(:,:) ! grid-box average rain mixing ratio (kg/kg) + real(kind_phys), intent(in) :: reff_rain(:,:) ! rain effective radius (micron) + real(kind_phys), intent(in) :: reff_snow(:,:) ! snow effective radius (micron) + real(kind_phys), intent(in) :: reff_grau(:,:) ! graupel effective radius (micron) + + real(kind_phys), intent(in) :: nrout(:,:) ! rain number concentration (1/m3) + real(kind_phys), intent(in) :: nsout(:,:) ! snow number concentration (1/m3) + real(kind_phys), intent(in) :: refl(:,:) ! analytic radar reflectivity (94GHZ, cloud radar) (dBZ) + real(kind_phys), intent(in) :: arefl(:,:) ! average reflectivity will zero points inside valid range (dBZ) + real(kind_phys), intent(in) :: areflz(:,:) ! average reflectivity in z. (mm6 m-3) + real(kind_phys), intent(in) :: frefl(:,:) ! fractional occurrence of radar reflectivity + real(kind_phys), intent(in) :: csrfl(:,:) ! cloudsat reflectivity (dBZ) + real(kind_phys), intent(in) :: acsrfl(:,:) ! cloudsat average (dBZ) + real(kind_phys), intent(in) :: fcsrfl(:,:) ! cloudsat fractional occurrence of radar reflectivity + real(kind_phys), intent(in) :: refl10cm(:,:) ! 10cm (rain) analytic radar reflectivity (dBZ) + real(kind_phys), intent(in) :: reflz10cm(:,:) ! 10cm (rain) analytic radar reflectivity (mm6 m-3) + real(kind_phys), intent(in) :: rercld(:,:) ! effective radius calculation for rain + cloud + real(kind_phys), intent(in) :: ncai(:,:) ! input number conc of ice nuclei available (1/m3) + real(kind_phys), intent(in) :: ncal(:,:) ! input number conc of CCN (1/m3) + real(kind_phys), intent(in) :: qrout2(:,:) ! copy of qrin as used to compute drin2 + real(kind_phys), intent(in) :: qsout2(:,:) ! copy of qsin as used to compute dsin2 + real(kind_phys), intent(in) :: nrout2(:,:) ! copy of nrin as used to compute drin2 + real(kind_phys), intent(in) :: nsout2(:,:) ! copy of nsin as used to compute dsin2 + real(kind_phys), intent(in) :: drout2(:,:) ! mean rain particle diameter (m) + real(kind_phys), intent(in) :: dsout2(:,:) ! mean snow particle diameter (m) + real(kind_phys), intent(in) :: freqs(:,:) ! fractional occurrence of snow + real(kind_phys), intent(in) :: freqr(:,:) ! fractional occurrence of rain + real(kind_phys), intent(in) :: nfice(:,:) ! fraction of frozen water to total condensed water + real(kind_phys), intent(in) :: qcrat(:,:) ! limiter for qc process rates (1=no limit --> 0. no qc) + real(kind_phys), intent(in) :: qgout(:,:) ! graupel/hail mixing ratio (kg/kg) + real(kind_phys), intent(in) :: dgout(:,:) ! graupel/hail diameter (m) + real(kind_phys), intent(in) :: ngout(:,:) ! graupel/hail number concentration (1/m3) + real(kind_phys), intent(in) :: qgout2(:,:) ! copy of qgin as used to compute dgin2 + real(kind_phys), intent(in) :: ngout2(:,:) ! copy of ngin as used to compute dgin2 + real(kind_phys), intent(in) :: dgout2(:,:) ! mean graupel/hail particle diameter (m) + real(kind_phys), intent(in) :: freqg(:,:) ! fractional occurrence of graupel + real(kind_phys), intent(in) :: prer_evap(:,:) ! evaporation rate of rain (kg/kg/s) + + ! CCPP error handling variables + character(len=512), intent(in) :: errmsg + integer, intent(in) :: errflg + + errmsg = '' + errflg = 0 + + +! KATES HACKATHON NOTES +!! The calls for history_out_field are in the pumas_diagnostcis.F90 file, but also with all of the other pumas code. +!! Those calls need to be hooked up to the parameters in the call list here. +!! There is an issue with subcolumn/grid scale I'm not sure how to address the grid averaging that is done after the +!! pumas_tend function call. + + + !------------------------------------------------------------------------------- + + lchnk = state%lchnk + ncol = state%ncol + psetcols = state%psetcols + ngrdcol = state%ngrdcol + itim_old = pbuf_old_tim_idx() + nlev = pver - top_lev + 1 + + nan_array = nan + + ! Allocate the proc_rates DDT + ! IMPORTANT NOTE -- elements in proc_rates are dimensioned to the nlev dimension while + ! all the other arrays in this routine are dimensioned pver. This is required because + ! PUMAS only gets the top_lev:pver array subsection, and the proc_rates arrays + ! need to be the same levels. + call proc_rates%allocate(ncol, nlev, ncd, micro_mg_warm_rain, errstring) + + call handle_errmsg(errstring, subname="micro_pumas_cam_tend") + + + call phys_getopts(use_subcol_microp_out=use_subcol_microp) + + ! Set the col_type flag to grid or subcolumn dependent on the value of use_subcol_microp + call pbuf_col_type_index(use_subcol_microp, col_type=col_type) + + !----------------------- + ! These physics buffer fields are read only and not set in this parameterization + ! If these fields do not have subcolumn data, copy the grid to the subcolumn if subcolumns is turned on + ! If subcolumns is not turned on, then these fields will be grid data + + call pbuf_get_field(pbuf, naai_hom_idx, naai_hom, col_type=col_type, copy_if_needed=use_subcol_microp) + call pbuf_get_field(pbuf, relvar_idx, relvar, col_type=col_type, copy_if_needed=use_subcol_microp) + call pbuf_get_field(pbuf, accre_enhan_idx, accre_enhan, col_type=col_type, copy_if_needed=use_subcol_microp) + call pbuf_get_field(pbuf, cmeliq_idx, cmeliq, col_type=col_type, copy_if_needed=use_subcol_microp) + + call pbuf_get_field(pbuf, cld_idx, cld, start=(/1,1,itim_old/), kount=(/psetcols,pver,1/), & + col_type=col_type, copy_if_needed=use_subcol_microp) + call pbuf_get_field(pbuf, concld_idx, concld, start=(/1,1,itim_old/), kount=(/psetcols,pver,1/), & + col_type=col_type, copy_if_needed=use_subcol_microp) + call pbuf_get_field(pbuf, ast_idx, ast, start=(/1,1,itim_old/), kount=(/psetcols,pver,1/), & + col_type=col_type, copy_if_needed=use_subcol_microp) + + ! Get convective precip for rainbows + if (prec_dp_idx > 0) then + call pbuf_get_field(pbuf, prec_dp_idx, prec_dp, col_type=col_type, copy_if_needed=use_subcol_microp) + else + nullify(prec_dp) + end if + if (prec_sh_idx > 0) then + call pbuf_get_field(pbuf, prec_sh_idx, prec_sh, col_type=col_type, copy_if_needed=use_subcol_microp) + else + nullify(prec_sh) + end if + +! Merge Precipitation rates (multi-process) + if (associated(prec_dp) .and. associated(prec_sh)) then + precc(:ncol) = prec_dp(:ncol) + prec_sh(:ncol) + else if (associated(prec_dp)) then + precc(:ncol) = prec_dp(:ncol) + else if (associated(prec_sh)) then + precc(:ncol) = prec_sh(:ncol) + else + precc(:ncol) = 0._r8 + end if + + if (do_cldice) then + ! If we ARE prognosing tendencies, then just point to an array of NaN fields to have + ! something for PUMAS to use in call + tnd_qsnow => nan_array + tnd_nsnow => nan_array + re_ice => nan_array + end if + + if (.not. use_hetfrz_classnuc) then + ! Needed to satisfy gnu compiler with optional argument - set to an array of Nan fields + frzimm => nan_array + frzcnt => nan_array + frzdep => nan_array + end if + + if (qsatfac_idx > 0) then + call pbuf_get_field(pbuf, qsatfac_idx, qsatfac, col_type=col_type, copy_if_needed=use_subcol_microp) + else + allocate(qsatfac(ncol,pver),stat=ierr) + call handle_allocate_error(ierr, 'micro_pumas_cam_tend', 'qsatfac') + qsatfac = 1._r8 + end if + + ! initialize tendency variables + preci = 0._r8 + prect = 0._r8 + + + !----------------------- + ! These physics buffer fields are calculated and set in this parameterization + ! If subcolumns is turned on, then these fields will be calculated on a subcolumn grid, otherwise they will be a normal grid + + call pbuf_get_field(pbuf, prec_str_idx, prec_str, col_type=col_type) + call pbuf_get_field(pbuf, snow_str_idx, snow_str, col_type=col_type) + call pbuf_get_field(pbuf, prec_pcw_idx, prec_pcw, col_type=col_type) + call pbuf_get_field(pbuf, snow_pcw_idx, snow_pcw, col_type=col_type) + call pbuf_get_field(pbuf, prec_sed_idx, prec_sed, col_type=col_type) + call pbuf_get_field(pbuf, snow_sed_idx, snow_sed, col_type=col_type) + call pbuf_get_field(pbuf, dei_idx, dei, col_type=col_type) + call pbuf_get_field(pbuf, mu_idx, mu, col_type=col_type) + call pbuf_get_field(pbuf, lambdac_idx, lambdac, col_type=col_type) + call pbuf_get_field(pbuf, des_idx, des, col_type=col_type) + call pbuf_get_field(pbuf, ls_flxprc_idx, mgflxprc, col_type=col_type) + call pbuf_get_field(pbuf, ls_flxsnw_idx, mgflxsnw, col_type=col_type) + call pbuf_get_field(pbuf, ls_mrprc_idx, mgmrprc, col_type=col_type) + call pbuf_get_field(pbuf, ls_mrsnw_idx, mgmrsnw, col_type=col_type) + call pbuf_get_field(pbuf, cv_reffliq_idx, cvreffliq, col_type=col_type) + call pbuf_get_field(pbuf, cv_reffice_idx, cvreffice, col_type=col_type) + call pbuf_get_field(pbuf, iciwpst_idx, iciwpst, col_type=col_type) + call pbuf_get_field(pbuf, iclwpst_idx, iclwpst, col_type=col_type) + call pbuf_get_field(pbuf, icswp_idx, icswp, col_type=col_type) + call pbuf_get_field(pbuf, rel_idx, rel, col_type=col_type) + call pbuf_get_field(pbuf, rei_idx, rei, col_type=col_type) + call pbuf_get_field(pbuf, wsedl_idx, wsedl, col_type=col_type) + call pbuf_get_field(pbuf, qme_idx, qme, col_type=col_type) + call pbuf_get_field(pbuf, bergso_idx, bergstot, col_type=col_type) + + ! Assign the pointer values to the non-pointer proc_rates element + proc_rates%bergstot(:ncol,1:nlev) = bergstot(:ncol,top_lev:pver) + + if (degrau_idx > 0) call pbuf_get_field(pbuf, degrau_idx, degrau, col_type=col_type) + if (icgrauwp_idx > 0) call pbuf_get_field(pbuf, icgrauwp_idx, icgrauwp, col_type=col_type) + if (cldfgrau_idx > 0) call pbuf_get_field(pbuf, cldfgrau_idx, cldfgrau, col_type=col_type) + + call pbuf_get_field(pbuf, cldo_idx, cldo, start=(/1,1,itim_old/), kount=(/psetcols,pver,1/), col_type=col_type) + call pbuf_get_field(pbuf, cldfsnow_idx, cldfsnow, start=(/1,1,itim_old/), kount=(/psetcols,pver,1/), col_type=col_type) + call pbuf_get_field(pbuf, cc_t_idx, CC_t, start=(/1,1,itim_old/), kount=(/psetcols,pver,1/), col_type=col_type) + call pbuf_get_field(pbuf, cc_qv_idx, CC_qv, start=(/1,1,itim_old/), kount=(/psetcols,pver,1/), col_type=col_type) + call pbuf_get_field(pbuf, cc_ql_idx, CC_ql, start=(/1,1,itim_old/), kount=(/psetcols,pver,1/), col_type=col_type) + call pbuf_get_field(pbuf, cc_qi_idx, CC_qi, start=(/1,1,itim_old/), kount=(/psetcols,pver,1/), col_type=col_type) + call pbuf_get_field(pbuf, cc_nl_idx, CC_nl, start=(/1,1,itim_old/), kount=(/psetcols,pver,1/), col_type=col_type) + call pbuf_get_field(pbuf, cc_ni_idx, CC_ni, start=(/1,1,itim_old/), kount=(/psetcols,pver,1/), col_type=col_type) + call pbuf_get_field(pbuf, cc_qlst_idx, CC_qlst, start=(/1,1,itim_old/), kount=(/psetcols,pver,1/), col_type=col_type) + + if (rate1_cw2pr_st_idx > 0) then + call pbuf_get_field(pbuf, rate1_cw2pr_st_idx, rate1ord_cw2pr_st, col_type=col_type) + end if + + !----------------------- + ! These are only on the grid regardless of whether subcolumns are turned on or not + call pbuf_get_field(pbuf, ls_reffrain_idx, mgreffrain_grid) + call pbuf_get_field(pbuf, ls_reffsnow_idx, mgreffsnow_grid) + call pbuf_get_field(pbuf, acpr_idx, acprecl_grid) + call pbuf_get_field(pbuf, acgcme_idx, acgcme_grid) + call pbuf_get_field(pbuf, acnum_idx, acnum_grid) + call pbuf_get_field(pbuf, cmeliq_idx, cmeliq_grid) + call pbuf_get_field(pbuf, ast_idx, ast_grid, start=(/1,1,itim_old/), kount=(/pcols,pver,1/)) + + call pbuf_get_field(pbuf, evprain_st_idx, evprain_st_grid) + call pbuf_get_field(pbuf, evpsnow_st_idx, evpsnow_st_grid) +!!!!! CACNOTE? call pbuf_get_field(pbuf, am_evp_st_idx, am_evp_st_grid) + + !----------------------------------------------------------------------- + ! ... Calculate cosine of zenith angle + ! then cast back to angle (radians) + !----------------------------------------------------------------------- + + zen_angle(:) = 0.0_r8 + rlats(:) = 0.0_r8 + rlons(:) = 0.0_r8 + calday = get_curr_calday() + call get_rlat_all_p( lchnk, ncol, rlats ) + call get_rlon_all_p( lchnk, ncol, rlons ) + call zenith( calday, rlats, rlons, zen_angle, ncol ) + where (zen_angle(:) <= 1.0_r8 .and. zen_angle(:) >= -1.0_r8) + zen_angle(:) = acos( zen_angle(:) ) + elsewhere + zen_angle(:) = 0.0_r8 + end where + + sza(:) = zen_angle(:) * rad2deg + call history_out_field( 'rbSZA', sza) + + !------------------------------------------------------------------------------------- + ! Microphysics assumes 'liquid stratus frac = ice stratus frac + ! = max( liquid stratus frac, ice stratus frac )'. + alst_mic => ast + aist_mic => ast + + ! Output initial in-cloud LWP (before microphysics) + + iclwpi = 0._r8 + iciwpi = 0._r8 + + do i = 1, ncol + do k = top_lev, pver + iclwpi(i) = iclwpi(i) + & + min(state%q(i,k,ixcldliq) / max(mincld,ast(i,k)),0.005_r8) & + * state%pdel(i,k) / gravit + iciwpi(i) = iciwpi(i) + & + min(state%q(i,k,ixcldice) / max(mincld,ast(i,k)),0.005_r8) & + * state%pdel(i,k) / gravit + end do + end do + + cldo(:ncol,top_lev:pver)=ast(:ncol,top_lev:pver) + + ! Initialize local state from input. + call physics_state_copy(state, state_loc) + + ! Because of the of limited vertical resolution, there can be a signifcant + ! warm bias at the cold point tropopause, which can create a wet bias in the + ! stratosphere. For the microphysics only, update the cold point temperature, with + ! an estimate of the coldest point between the model layers. + if (micro_mg_adjust_cpt) then + cp_rh(:ncol, :pver) = 0._r8 + cp_dt(:ncol) = 0._r8 + cp_dz(:ncol) = 0._r8 + + !REMOVECAM - no longer need this when CAM is retired and pcols no longer exists + troplev(:) = 0 + cp_z(:) = 0._r8 + cp_t(:) = 0._r8 + !REMOVECAM_END + call tropopause_find_cam(state_loc, troplev, primary=TROP_ALG_CPP, backup=TROP_ALG_NONE, & + tropZ=cp_z, tropT=cp_t) + + do i = 1, ncol + + ! Update statistics and output results. + if (troplev(i) .ne. NOTFOUND) then + cp_dt(i) = cp_t(i) - state_loc%t(i,troplev(i)) + cp_dz(i) = cp_z(i) - state_loc%zm(i,troplev(i)) + + ! NOTE: This change in temperature is just for the microphysics + ! and should not be added to any tendencies or used to update + ! any states + state_loc%t(i,troplev(i)) = state_loc%t(i,troplev(i)) + cp_dt(i) + end if + end do + + ! Output all of the statistics related to the cold point + ! tropopause adjustment. Th cold point information itself is + ! output in tropopause.F90. + call history_out_field("TROPF_TADJ", state_loc%t) + call history_out_field("TROPF_CDT", cp_dt) + call history_out_field("TROPF_CDZ", cp_dz) + end if + + ! Initialize ptend for output. + lq = .false. + lq(ixq) = .true. + lq(ixcldliq) = .true. + lq(ixcldice) = .true. + lq(ixnumliq) = .true. + lq(ixnumice) = .true. + lq(ixrain) = .true. + lq(ixsnow) = .true. + lq(ixnumrain) = .true. + lq(ixnumsnow) = .true. + if (micro_mg_version > 2) then + lq(ixgraupel) = .true. + lq(ixnumgraupel) = .true. + end if + + ! the name 'cldwat' triggers special tests on cldliq + ! and cldice in physics_update + call physics_ptend_init(ptend, psetcols, "cldwat", ls=.true., lq=lq) + + if (micro_mg_version > 2) then + state_loc_graup(:ncol,:) = state_loc%q(:ncol,:,ixgraupel) + state_loc_numgraup(:ncol,:) = state_loc%q(:ncol,:,ixnumgraupel) + else + state_loc_graup(:ncol,:) = 0._r8 + state_loc_numgraup(:ncol,:) = 0._r8 + end if + + ! Zero out diagnostic rainbow arrays + rbfreq = 0._r8 + rbfrac = 0._r8 + + ! Zero out values above top_lev before passing into _tend for some pbuf variables that are inputs + naai(:ncol,:top_lev-1) = 0._r8 + npccn(:ncol,:top_lev-1) = 0._r8 + + ! The null value for qsatfac is 1, not zero + qsatfac(:ncol,:top_lev-1) = 1._r8 + + ! Zero out values above top_lev for all output variables + ! Note that elements in proc_rates do not have the extra levels as they are dimensioned to be nlev instead of pver + tlat(:ncol,:top_lev-1)=0._r8 + qvlat(:ncol,:top_lev-1)=0._r8 + qcten(:ncol,:top_lev-1)=0._r8 + qiten(:ncol,:top_lev-1)=0._r8 + ncten(:ncol,:top_lev-1)=0._r8 + niten(:ncol,:top_lev-1)=0._r8 + qrten(:ncol,:top_lev-1)=0._r8 + qsten(:ncol,:top_lev-1)=0._r8 + nrten(:ncol,:top_lev-1)=0._r8 + nsten(:ncol,:top_lev-1)=0._r8 + qgten(:ncol,:top_lev-1)=0._r8 + ngten(:ncol,:top_lev-1)=0._r8 + rel(:ncol,:top_lev-1)=0._r8 + rel_fn_dum(:ncol,:top_lev-1)=0._r8 + rei(:ncol,:top_lev-1)=0._r8 + sadice(:ncol,:top_lev-1)=0._r8 + sadsnow(:ncol,:top_lev-1)=0._r8 + prect(:ncol)=0._r8 + preci(:ncol)=0._r8 + nevapr(:ncol,:top_lev-1)=0._r8 + am_evp_st(:ncol,:top_lev-1)=0._r8 + prain(:ncol,:top_lev-1)=0._r8 + cmeice(:ncol,:top_lev-1)=0._r8 + dei(:ncol,:top_lev-1)=0._r8 + mu(:ncol,:top_lev-1)=0._r8 + lambdac(:ncol,:top_lev-1)=0._r8 + qsout(:ncol,:top_lev-1)=0._r8 + des(:ncol,:top_lev-1)=0._r8 + qgout(:ncol,:top_lev-1)=0._r8 + ngout(:ncol,:top_lev-1)=0._r8 + dgout(:ncol,:top_lev-1)=0._r8 + cflx(:ncol,:top_lev-1)=0._r8 + iflx(:ncol,:top_lev-1)=0._r8 + gflx(:ncol,:top_lev-1)=0._r8 + rflx(:ncol,:top_lev-1)=0._r8 + sflx(:ncol,:top_lev-1)=0._r8 + qrout(:ncol,:top_lev-1)=0._r8 + reff_rain_dum(:ncol,:top_lev-1)=0._r8 + reff_snow_dum(:ncol,:top_lev-1)=0._r8 + reff_grau_dum(:ncol,:top_lev-1)=0._r8 + nrout(:ncol,:top_lev-1)=0._r8 + nsout(:ncol,:top_lev-1)=0._r8 + refl(:ncol,:top_lev-1)=0._r8 + arefl(:ncol,:top_lev-1)=0._r8 + areflz(:ncol,:top_lev-1)=0._r8 + frefl(:ncol,:top_lev-1)=0._r8 + csrfl(:ncol,:top_lev-1)=0._r8 + acsrfl(:ncol,:top_lev-1)=0._r8 + fcsrfl(:ncol,:top_lev-1)=0._r8 + refl10cm(:ncol,:top_lev-1)=-9999._r8 + reflz10cm(:ncol,:top_lev-1)=0._r8 + rercld(:ncol,:top_lev-1)=0._r8 + ncai(:ncol,:top_lev-1)=0._r8 + ncal(:ncol,:top_lev-1)=0._r8 + qrout2(:ncol,:top_lev-1)=0._r8 + qsout2(:ncol,:top_lev-1)=0._r8 + nrout2(:ncol,:top_lev-1)=0._r8 + nsout2(:ncol,:top_lev-1)=0._r8 + qgout2(:ncol,:top_lev-1)=0._r8 + ngout2(:ncol,:top_lev-1)=0._r8 + dgout2(:ncol,:top_lev-1)=0._r8 + freqg(:ncol,:top_lev-1)=0._r8 + freqs(:ncol,:top_lev-1)=0._r8 + freqr(:ncol,:top_lev-1)=0._r8 + nfice(:ncol,:top_lev-1)=0._r8 + qcrat(:ncol,:top_lev-1)=0._r8 + tnd_qsnow(:ncol,:top_lev-1)=0._r8 + tnd_nsnow(:ncol,:top_lev-1)=0._r8 + re_ice(:ncol,:top_lev-1)=0._r8 + prer_evap(:ncol,:top_lev-1)=0._r8 + frzimm(:ncol,:top_lev-1)=0._r8 + frzcnt(:ncol,:top_lev-1)=0._r8 + frzdep(:ncol,:top_lev-1)=0._r8 + + do it = 1, num_steps + + call micro_pumas_tend( & + ncol, nlev, dtime/num_steps,& + state_loc%t(:ncol,top_lev:), state_loc%q(:ncol,top_lev:,ixq), & + state_loc%q(:ncol,top_lev:,ixcldliq), state_loc%q(:ncol,top_lev:,ixcldice), & + state_loc%q(:ncol,top_lev:,ixnumliq), state_loc%q(:ncol,top_lev:,ixnumice), & + state_loc%q(:ncol,top_lev:,ixrain), state_loc%q(:ncol,top_lev:,ixsnow), & + state_loc%q(:ncol,top_lev:,ixnumrain), state_loc%q(:ncol,top_lev:,ixnumsnow), & + state_loc_graup(:ncol,top_lev:), state_loc_numgraup(:ncol,top_lev:), & + relvar(:ncol,top_lev:), accre_enhan(:ncol,top_lev:), & + state_loc%pmid(:ncol,top_lev:), state_loc%pdel(:ncol,top_lev:), state_loc%pint(:ncol,top_lev:), & + ast(:ncol,top_lev:), alst_mic(:ncol,top_lev:), aist_mic(:ncol,top_lev:), qsatfac(:ncol,top_lev:), & + rate1cld(:ncol,top_lev:), & + naai(:ncol,top_lev:), npccn(:ncol,top_lev:), & + rndst(:ncol,top_lev:,:), nacon(:ncol,top_lev:,:), & + tlat(:ncol,top_lev:), qvlat(:ncol,top_lev:), & + qcten(:ncol,top_lev:), qiten(:ncol,top_lev:), & + ncten(:ncol,top_lev:), niten(:ncol,top_lev:), & + qrten(:ncol,top_lev:), qsten(:ncol,top_lev:), & + nrten(:ncol,top_lev:), nsten(:ncol,top_lev:), & + qgten(:ncol,top_lev:), ngten(:ncol,top_lev:), & + rel(:ncol,top_lev:), rel_fn_dum(:ncol,top_lev:), rei(:ncol,top_lev:), & + sadice(:ncol,top_lev:), sadsnow(:ncol,top_lev:), & + prect(:ncol), preci(:ncol), & + nevapr(:ncol,top_lev:), am_evp_st(:ncol,top_lev:), & + prain(:ncol,top_lev:), & + cmeice(:ncol,top_lev:), dei(:ncol,top_lev:), & + mu(:ncol,top_lev:), lambdac(:ncol,top_lev:), & + qsout(:ncol,top_lev:), des(:ncol,top_lev:), & + qgout(:ncol,top_lev:), ngout(:ncol,top_lev:), dgout(:ncol,top_lev:), & + cflx(:ncol,top_lev:), iflx(:ncol,top_lev:), & + gflx(:ncol,top_lev:), & + rflx(:ncol,top_lev:), sflx(:ncol,top_lev:), qrout(:ncol,top_lev:), & + reff_rain_dum(:ncol,top_lev:), reff_snow_dum(:ncol,top_lev:), reff_grau_dum(:ncol,top_lev:), & + nrout(:ncol,top_lev:), nsout(:ncol,top_lev:), & + refl(:ncol,top_lev:), arefl(:ncol,top_lev:), areflz(:ncol,top_lev:), & + frefl(:ncol,top_lev:), csrfl(:ncol,top_lev:), acsrfl(:ncol,top_lev:), & + fcsrfl(:ncol,top_lev:), & + refl10cm(:ncol,top_lev:), reflz10cm(:ncol,top_lev:), rercld(:ncol,top_lev:), & + ncai(:ncol,top_lev:), ncal(:ncol,top_lev:), & + qrout2(:ncol,top_lev:), qsout2(:ncol,top_lev:), & + nrout2(:ncol,top_lev:), nsout2(:ncol,top_lev:), & + drout_dum(:ncol,top_lev:), dsout2_dum(:ncol,top_lev:), & + qgout2(:ncol,top_lev:), ngout2(:ncol,top_lev:), dgout2(:ncol,top_lev:), freqg(:ncol,top_lev:), & + freqs(:ncol,top_lev:), freqr(:ncol,top_lev:), & + nfice(:ncol,top_lev:), qcrat(:ncol,top_lev:), & + proc_rates, & + errstring, & + tnd_qsnow(:ncol,top_lev:),tnd_nsnow(:ncol,top_lev:),re_ice(:ncol,top_lev:),& + prer_evap(:ncol,top_lev:), & + frzimm(:ncol,top_lev:), frzcnt(:ncol,top_lev:), frzdep(:ncol,top_lev:) ) + + call handle_errmsg(errstring, subname="micro_pumas_cam_tend") + + call physics_ptend_init(ptend_loc, psetcols, "micro_pumas", & + ls=.true., lq=lq) + + ! Set local tendency. + ptend_loc%s(:ncol,top_lev:) = tlat(:ncol,top_lev:) + ptend_loc%q(:ncol,top_lev:,ixq) = qvlat(:ncol,top_lev:) + ptend_loc%q(:ncol,top_lev:,ixcldliq) = qcten(:ncol,top_lev:) + ptend_loc%q(:ncol,top_lev:,ixcldice) = qiten(:ncol,top_lev:) + ptend_loc%q(:ncol,top_lev:,ixnumliq) = ncten(:ncol,top_lev:) + + if (do_cldice) then + ptend_loc%q(:ncol,top_lev:,ixnumice) = niten(:ncol,top_lev:) + else + ! In this case, the tendency should be all 0. + if (any(niten(:ncol,:) /= 0._r8)) then + call endrun("micro_pumas_cam:ERROR - MG microphysics is configured not to prognose cloud ice,"// & + " but micro_pumas_tend has ice number tendencies.") + end if + ptend_loc%q(:ncol,:,ixnumice) = 0._r8 + end if + + ptend_loc%q(:ncol,top_lev:,ixrain) = qrten(:ncol,top_lev:) + ptend_loc%q(:ncol,top_lev:,ixsnow) = qsten(:ncol,top_lev:) + ptend_loc%q(:ncol,top_lev:,ixnumrain) = nrten(:ncol,top_lev:) + ptend_loc%q(:ncol,top_lev:,ixnumsnow) = nsten(:ncol,top_lev:) + + if (micro_mg_version > 2) then + ptend_loc%q(:ncol,top_lev:,ixgraupel) = qgten(:ncol,top_lev:) + ptend_loc%q(:ncol,top_lev:,ixnumgraupel) = ngten(:ncol,top_lev:) + end if + + ! Sum into overall ptend + call physics_ptend_sum(ptend_loc, ptend, ncol) + + ! Update local state + call physics_update(state_loc, ptend_loc, dtime/num_steps) + + if (trim(micro_mg_warm_rain) == 'tau') then + proc_rates%amk_c(:ncol,:,:) = proc_rates%amk_c(:ncol,:,:)/num_steps + proc_rates%ank_c(:ncol,:,:) = proc_rates%ank_c(:ncol,:,:)/num_steps + proc_rates%amk_r(:ncol,:,:) = proc_rates%amk_r(:ncol,:,:)/num_steps + proc_rates%ank_r(:ncol,:,:) = proc_rates%ank_r(:ncol,:,:)/num_steps + proc_rates%amk(:ncol,:,:) = proc_rates%amk(:ncol,:,:)/num_steps + proc_rates%ank(:ncol,:,:) = proc_rates%ank(:ncol,:,:)/num_steps + proc_rates%amk_out(:ncol,:,:) = proc_rates%amk_out(:ncol,:,:)/num_steps + end if + + end do + + ! Divide ptend by substeps. + call physics_ptend_scale(ptend, 1._r8/num_steps, ncol) + + ! Check to make sure that the microphysics code is respecting the flags that control + ! whether MG should be prognosing cloud ice and cloud liquid or not. + if (.not. do_cldice) then + if (any(ptend%q(:ncol,top_lev:pver,ixcldice) /= 0.0_r8)) & + call endrun("micro_pumas_cam:ERROR - MG microphysics is configured not to prognose cloud ice,"// & + " but micro_pumas_tend has ice mass tendencies.") + if (any(ptend%q(:ncol,top_lev:pver,ixnumice) /= 0.0_r8)) & + call endrun("micro_pumas_cam:ERROR - MG microphysics is configured not to prognose cloud ice,"// & + " but micro_pumas_tend has ice number tendencies.") + end if + if (.not. do_cldliq) then + if (any(ptend%q(:ncol,top_lev:pver,ixcldliq) /= 0.0_r8)) & + call endrun("micro_pumas_cam:ERROR - MG microphysics is configured not to prognose cloud liquid,"// & + " but micro_pumas_tend has liquid mass tendencies.") + if (any(ptend%q(:ncol,top_lev:pver,ixnumliq) /= 0.0_r8)) & + call endrun("micro_pumas_cam:ERROR - MG microphysics is configured not to prognose cloud liquid,"// & + " but micro_pumas_tend has liquid number tendencies.") + end if + + mnuccdohet = 0._r8 + do k=top_lev,pver + do i=1,ncol + if (naai(i,k) > 0._r8) then + mnuccdohet(i,k) = proc_rates%mnuccdtot(i,k-top_lev+1) - (naai_hom(i,k)/naai(i,k))*proc_rates%mnuccdtot(i,k-top_lev+1) + end if + end do + end do + + mgflxprc(:ncol,top_lev:pverp) = rflx(:ncol,top_lev:pverp) + sflx(:ncol,top_lev:pverp) + mgflxsnw(:ncol,top_lev:pverp) = sflx(:ncol,top_lev:pverp) + + !add condensate fluxes for MG2 (ice and snow already added for MG1) + if (micro_mg_version >= 2) then + mgflxprc(:ncol,top_lev:pverp) = mgflxprc(:ncol,top_lev:pverp)+ iflx(:ncol,top_lev:pverp) + cflx(:ncol,top_lev:pverp) + mgflxsnw(:ncol,top_lev:pverp) = mgflxsnw(:ncol,top_lev:pverp) + iflx(:ncol,top_lev:pverp) + end if + + !add graupel fluxes for MG3 to snow flux + if (micro_mg_version >= 3) then + mgflxprc(:ncol,top_lev:pverp) = mgflxprc(:ncol,top_lev:pverp)+gflx(:ncol,top_lev:pverp) + mgflxsnw(:ncol,top_lev:pverp) = mgflxsnw(:ncol,top_lev:pverp)+gflx(:ncol,top_lev:pverp) + end if + + mgmrprc(:ncol,top_lev:pver) = qrout(:ncol,top_lev:pver) + qsout(:ncol,top_lev:pver) + mgmrsnw(:ncol,top_lev:pver) = qsout(:ncol,top_lev:pver) + + !! calculate effective radius of convective liquid and ice using dcon and deicon (not used by code, not useful for COSP) + !! hard-coded as average of hard-coded values used for deep/shallow convective detrainment (near line 1502/1505) + cvreffliq(:ncol,top_lev:pver) = 9.0_r8 + cvreffice(:ncol,top_lev:pver) = 37.0_r8 + + ! Reassign rate1 if modal aerosols + if (rate1_cw2pr_st_idx > 0) then + rate1ord_cw2pr_st(:ncol,top_lev:pver) = rate1cld(:ncol,top_lev:pver) + end if + + ! Sedimentation velocity for liquid stratus cloud droplet + wsedl(:ncol,top_lev:pver) = proc_rates%vtrmc(:ncol,1:nlev) + + ! Microphysical tendencies for use in the macrophysics at the next time step + CC_T(:ncol,top_lev:pver) = tlat(:ncol,top_lev:pver)/cpair + CC_qv(:ncol,top_lev:pver) = qvlat(:ncol,top_lev:pver) + CC_ql(:ncol,top_lev:pver) = qcten(:ncol,top_lev:pver) + CC_qi(:ncol,top_lev:pver) = qiten(:ncol,top_lev:pver) + CC_nl(:ncol,top_lev:pver) = ncten(:ncol,top_lev:pver) + CC_ni(:ncol,top_lev:pver) = niten(:ncol,top_lev:pver) + CC_qlst(:ncol,top_lev:pver) = qcten(:ncol,top_lev:pver)/max(0.01_r8,alst_mic(:ncol,top_lev:pver)) + + ! Net micro_pumas_cam condensation rate + qme(:ncol,:top_lev-1) = 0._r8 + qme(:ncol,top_lev:pver) = cmeliq(:ncol,top_lev:pver) + proc_rates%cmeitot(:ncol,1:nlev) + + ! For precip, accumulate only total precip in prec_pcw and snow_pcw variables. + ! Other precip output variables are set to 0 + ! Do not subscript by ncol here, because in physpkg we divide the whole + ! array and need to avoid an FPE due to uninitialized data. + prec_pcw = prect + snow_pcw = preci + prec_sed = 0._r8 + snow_sed = 0._r8 + prec_str = prec_pcw + prec_sed + snow_str = snow_pcw + snow_sed + + icecldf(:ncol,top_lev:pver) = ast(:ncol,top_lev:pver) + liqcldf(:ncol,top_lev:pver) = ast(:ncol,top_lev:pver) + + ! ------------------------------------------------------------ ! + ! Compute in cloud ice and liquid mixing ratios ! + ! Note that 'iclwp, iciwp' are used for radiation computation. ! + ! ------------------------------------------------------------ ! + + icinc = 0._r8 + icwnc = 0._r8 + iciwpst = 0._r8 + iclwpst = 0._r8 + icswp = 0._r8 + cldfsnow = 0._r8 + if (micro_mg_version > 2) then + icgrauwp = 0._r8 + cldfgrau = 0._r8 + end if + + do k = top_lev, pver + do i = 1, ncol + ! Limits for in-cloud mixing ratios consistent with MG microphysics + ! in-cloud mixing ratio maximum limit of 0.005 kg/kg + icimrst(i,k) = min( state_loc%q(i,k,ixcldice) / max(mincld,icecldf(i,k)),0.005_r8 ) + icwmrst(i,k) = min( state_loc%q(i,k,ixcldliq) / max(mincld,liqcldf(i,k)),0.005_r8 ) + icinc(i,k) = state_loc%q(i,k,ixnumice) / max(mincld,icecldf(i,k)) * & + state_loc%pmid(i,k) / (287.15_r8*state_loc%t(i,k)) + icwnc(i,k) = state_loc%q(i,k,ixnumliq) / max(mincld,liqcldf(i,k)) * & + state_loc%pmid(i,k) / (287.15_r8*state_loc%t(i,k)) + ! Calculate micro_pumas_cam cloud water paths in each layer + ! Note: uses stratiform cloud fraction! + iciwpst(i,k) = min(state_loc%q(i,k,ixcldice)/max(mincld,ast(i,k)),0.005_r8) * state_loc%pdel(i,k) / gravit + iclwpst(i,k) = min(state_loc%q(i,k,ixcldliq)/max(mincld,ast(i,k)),0.005_r8) * state_loc%pdel(i,k) / gravit + + ! ------------------------------ ! + ! Adjust cloud fraction for snow ! + ! ------------------------------ ! + cldfsnow(i,k) = cld(i,k) + ! If cloud and only ice ( no convective cloud or ice ), then set to 0. + if( ( cldfsnow(i,k) .gt. 1.e-4_r8 ) .and. & + ( concld(i,k) .lt. 1.e-4_r8 ) .and. & + ( state_loc%q(i,k,ixcldliq) .lt. 1.e-10_r8 ) ) then + cldfsnow(i,k) = 0._r8 + end if + ! If no cloud and snow, then set to 0.25 + if( ( cldfsnow(i,k) .le. 1.e-4_r8 ) .and. ( qsout(i,k) .gt. 1.e-6_r8 ) ) then + cldfsnow(i,k) = 0.25_r8 + end if + ! Calculate in-cloud snow water path + icswp(i,k) = qsout(i,k) / max( mincld, cldfsnow(i,k) ) * state_loc%pdel(i,k) / gravit + + ! --------------------------------- ! + ! Adjust cloud fraction for graupel ! + ! --------------------------------- ! + if (micro_mg_version > 2) then + cldfgrau(i,k) = cld(i,k) + ! If cloud and only ice ( no convective cloud or ice ), then set to 0. + if( ( cldfgrau(i,k) .gt. 1.e-4_r8 ) .and. & + ( concld(i,k) .lt. 1.e-4_r8 ) .and. & + ( state_loc%q(i,k,ixcldliq) .lt. 1.e-10_r8 ) ) then + cldfgrau(i,k) = 0._r8 + end if + ! If no cloud and graupel, then set to 0.25 + if( ( cldfgrau(i,k) .le. 1.e-4_r8 ) .and. ( qgout(i,k) .gt. 1.e-9_r8 ) ) then + cldfgrau(i,k) = 0.25_r8 + end if + + ! Calculate in-cloud snow water path + icgrauwp(i,k) = qgout(i,k) / max( 1.e-2_r8, cldfgrau(i,k) ) * state_loc%pdel(i,k) / gravit + end if + + end do + end do + + ! Calculate cloud fraction for prognostic precip sizes. + ! Cloud fraction for purposes of precipitation is maximum cloud + ! fraction out of all the layers that the precipitation may be + ! falling down from. + cldmax(:ncol,top_lev:) = max(mincld, ast(:ncol,top_lev:)) + do k = top_lev+1, pver + where (state_loc%q(:ncol,k-1,ixrain) >= qsmall .or. & + state_loc%q(:ncol,k-1,ixsnow) >= qsmall) + cldmax(:ncol,k) = max(cldmax(:ncol,k-1), cldmax(:ncol,k)) + end where + end do + + !Copy pbuf field from proc_rates back to pbuf pointer + bergstot(:ncol,top_lev:) = proc_rates%bergstot(:ncol,1:nlev) + bergstot(:ncol,1:top_lev-1) = 0._r8 + + ! ------------------------------------------------------ ! + ! ------------------------------------------------------ ! + ! All code from here to the end is on grid columns only ! + ! ------------------------------------------------------ ! + ! ------------------------------------------------------ ! + + ! Average the fields which are needed later in this paramterization to be on the grid + if (use_subcol_microp) then + call subcol_field_avg(prec_str, ngrdcol, lchnk, prec_str_grid) + call subcol_field_avg(iclwpst, ngrdcol, lchnk, iclwpst_grid) + call subcol_field_avg(cvreffliq, ngrdcol, lchnk, cvreffliq_grid) + call subcol_field_avg(cvreffice, ngrdcol, lchnk, cvreffice_grid) + call subcol_field_avg(mgflxprc, ngrdcol, lchnk, mgflxprc_grid) + call subcol_field_avg(mgflxsnw, ngrdcol, lchnk, mgflxsnw_grid) + call subcol_field_avg(qme, ngrdcol, lchnk, qme_grid) + call subcol_field_avg(nevapr, ngrdcol, lchnk, nevapr_grid) + call subcol_field_avg(prain, ngrdcol, lchnk, prain_grid) + call subcol_field_avg(proc_rates%evapsnow, ngrdcol, lchnk, evpsnow_st_grid(:,top_lev:)) + call subcol_field_avg(proc_rates%bergstot, ngrdcol, lchnk, bergso_grid(:,top_lev:)) + + call subcol_field_avg(am_evp_st, ngrdcol, lchnk, am_evp_st_grid) + + ! Average fields which are not in pbuf + call subcol_field_avg(qrout, ngrdcol, lchnk, qrout_grid) + call subcol_field_avg(qsout, ngrdcol, lchnk, qsout_grid) + call subcol_field_avg(nsout, ngrdcol, lchnk, nsout_grid) + call subcol_field_avg(nrout, ngrdcol, lchnk, nrout_grid) + call subcol_field_avg(cld, ngrdcol, lchnk, cld_grid) + call subcol_field_avg(proc_rates%qcrestot, ngrdcol, lchnk, qcreso_grid(:,top_lev:)) + call subcol_field_avg(proc_rates%melttot, ngrdcol, lchnk, melto_grid(:,top_lev:)) + call subcol_field_avg(proc_rates%mnuccctot, ngrdcol, lchnk, mnuccco_grid(:,top_lev:)) + call subcol_field_avg(proc_rates%mnuccttot, ngrdcol, lchnk, mnuccto_grid(:,top_lev:)) + call subcol_field_avg(proc_rates%bergtot, ngrdcol, lchnk, bergo_grid(:,top_lev:)) + call subcol_field_avg(proc_rates%homotot, ngrdcol, lchnk, homoo_grid(:,top_lev:)) + call subcol_field_avg(proc_rates%msacwitot, ngrdcol, lchnk, msacwio_grid(:,top_lev:)) + call subcol_field_avg(proc_rates%psacwstot, ngrdcol, lchnk, psacwso_grid(:,top_lev:)) + call subcol_field_avg(proc_rates%cmeitot, ngrdcol, lchnk, cmeiout_grid(:,top_lev:)) + call subcol_field_avg(proc_rates%qirestot, ngrdcol, lchnk, qireso_grid(:,top_lev:)) + call subcol_field_avg(proc_rates%prcitot, ngrdcol, lchnk, prcio_grid(:,top_lev:)) + call subcol_field_avg(proc_rates%praitot, ngrdcol, lchnk, praio_grid(:,top_lev:)) + call subcol_field_avg(icwmrst, ngrdcol, lchnk, icwmrst_grid) + call subcol_field_avg(icimrst, ngrdcol, lchnk, icimrst_grid) + call subcol_field_avg(liqcldf, ngrdcol, lchnk, liqcldf_grid) + call subcol_field_avg(icecldf, ngrdcol, lchnk, icecldf_grid) + call subcol_field_avg(icwnc, ngrdcol, lchnk, icwnc_grid) + call subcol_field_avg(icinc, ngrdcol, lchnk, icinc_grid) + call subcol_field_avg(state_loc%pdel, ngrdcol, lchnk, pdel_grid) + call subcol_field_avg(proc_rates%pratot, ngrdcol, lchnk, prao_grid(:,top_lev:)) + call subcol_field_avg(proc_rates%prctot, ngrdcol, lchnk, prco_grid(:,top_lev:)) + + call subcol_field_avg(state_loc%q(:,:,ixnumliq), ngrdcol, lchnk, nc_grid(:,top_lev:)) + call subcol_field_avg(state_loc%q(:,:,ixnumice), ngrdcol, lchnk, ni_grid(:,top_lev:)) + + call subcol_field_avg(proc_rates%qcsedten, ngrdcol, lchnk, qcsedtenout_grid(:,top_lev:)) + call subcol_field_avg(proc_rates%qisedten, ngrdcol, lchnk, qisedtenout_grid(:,top_lev:)) + call subcol_field_avg(proc_rates%vtrmc, ngrdcol, lchnk, vtrmcout_grid(:,top_lev:)) + call subcol_field_avg(proc_rates%vtrmi, ngrdcol, lchnk, vtrmiout_grid(:,top_lev:)) + call subcol_field_avg(proc_rates%qcsevap, ngrdcol, lchnk, qcsevapout_grid(:,top_lev:)) + call subcol_field_avg(proc_rates%qisevap, ngrdcol, lchnk, qisevapout_grid(:,top_lev:)) + + call subcol_field_avg(cldmax, ngrdcol, lchnk, cldmax_grid) + + call subcol_field_avg(state_loc%q(:,:,ixrain), ngrdcol, lchnk, qr_grid) + call subcol_field_avg(state_loc%q(:,:,ixnumrain), ngrdcol, lchnk, nr_grid) + call subcol_field_avg(state_loc%q(:,:,ixsnow), ngrdcol, lchnk, qs_grid) + call subcol_field_avg(state_loc%q(:,:,ixnumsnow), ngrdcol, lchnk, ns_grid) + call subcol_field_avg(proc_rates%qrsedten, ngrdcol, lchnk, qrsedtenout_grid(:,top_lev:)) + call subcol_field_avg(proc_rates%qssedten, ngrdcol, lchnk, qssedtenout_grid(:,top_lev:)) + call subcol_field_avg(proc_rates%umr, ngrdcol, lchnk, umrout_grid(:,top_lev:)) + call subcol_field_avg(proc_rates%ums, ngrdcol, lchnk, umsout_grid(:,top_lev:)) + + if (micro_mg_version > 2) then + call subcol_field_avg(state_loc%q(:,:,ixgraupel), ngrdcol, lchnk, qg_grid) + call subcol_field_avg(state_loc%q(:,:,ixnumgraupel), ngrdcol, lchnk, ng_grid) + call subcol_field_avg(proc_rates%psacrtot, ngrdcol, lchnk, psacro_grid(:,top_lev:)) + call subcol_field_avg(proc_rates%pracgtot, ngrdcol, lchnk, pracgo_grid(:,top_lev:)) + call subcol_field_avg(proc_rates%psacwgtot, ngrdcol, lchnk, psacwgo_grid(:,top_lev:)) + call subcol_field_avg(proc_rates%pgsacwtot, ngrdcol, lchnk, pgsacwo_grid(:,top_lev:)) + call subcol_field_avg(proc_rates%pgracstot, ngrdcol, lchnk, pgracso_grid(:,top_lev:)) + call subcol_field_avg(proc_rates%prdgtot, ngrdcol, lchnk, prdgo_grid(:,top_lev:)) + call subcol_field_avg(proc_rates%qmultgtot, ngrdcol, lchnk, qmultgo_grid(:,top_lev:)) + call subcol_field_avg(proc_rates%qmultrgtot, ngrdcol, lchnk, qmultrgo_grid(:,top_lev:)) + call subcol_field_avg(proc_rates%npracgtot, ngrdcol, lchnk, npracgo_grid(:,top_lev:)) + call subcol_field_avg(proc_rates%nscngtot, ngrdcol, lchnk, nscngo_grid(:,top_lev:)) + call subcol_field_avg(proc_rates%ngracstot, ngrdcol, lchnk, ngracso_grid(:,top_lev:)) + call subcol_field_avg(proc_rates%nmultgtot, ngrdcol, lchnk, nmultgo_grid(:,top_lev:)) + call subcol_field_avg(proc_rates%nmultrgtot, ngrdcol, lchnk, nmultrgo_grid(:,top_lev:)) + call subcol_field_avg(proc_rates%npsacwgtot, ngrdcol, lchnk, npsacwgo_grid(:,top_lev:)) + end if + + else + qcreso_grid(:ncol,:top_lev-1) = 0._r8 + melto_grid(:ncol,:top_lev-1) = 0._r8 + mnuccco_grid(:ncol,:top_lev-1) = 0._r8 + mnuccto_grid(:ncol,:top_lev-1) = 0._r8 + bergo_grid(:ncol,:top_lev-1) = 0._r8 + homoo_grid(:ncol,:top_lev-1) = 0._r8 + msacwio_grid(:ncol,:top_lev-1) = 0._r8 + psacwso_grid(:ncol,:top_lev-1) = 0._r8 + cmeiout_grid(:ncol,:top_lev-1) = 0._r8 + qireso_grid(:ncol,:top_lev-1) = 0._r8 + prcio_grid(:ncol,:top_lev-1) = 0._r8 + praio_grid(:ncol,:top_lev-1) = 0._r8 + prao_grid(:ncol,:top_lev-1) = 0._r8 + prco_grid(:ncol,:top_lev-1) = 0._r8 + qcsedtenout_grid(:ncol,:top_lev-1) = 0._r8 + qisedtenout_grid(:ncol,:top_lev-1) = 0._r8 + vtrmcout_grid(:ncol,:top_lev-1) = 0._r8 + vtrmiout_grid(:ncol,:top_lev-1) = 0._r8 + qcsevapout_grid(:ncol,:top_lev-1) = 0._r8 + qisevapout_grid(:ncol,:top_lev-1) = 0._r8 + qrsedtenout_grid(:ncol,:top_lev-1) = 0._r8 + qssedtenout_grid(:ncol,:top_lev-1) = 0._r8 + umrout_grid(:ncol,:top_lev-1) = 0._r8 + umsout_grid(:ncol,:top_lev-1) = 0._r8 + psacro_grid(:ncol,:top_lev-1) = 0._r8 + pracgo_grid(:ncol,:top_lev-1) = 0._r8 + psacwgo_grid(:ncol,:top_lev-1) = 0._r8 + pgsacwo_grid(:ncol,:top_lev-1) = 0._r8 + pgracso_grid(:ncol,:top_lev-1) = 0._r8 + prdgo_grid(:ncol,:top_lev-1) = 0._r8 + qmultgo_grid(:ncol,:top_lev-1) = 0._r8 + qmultrgo_grid(:ncol,:top_lev-1) = 0._r8 + npracgo_grid(:ncol,:top_lev-1) = 0._r8 + nscngo_grid(:ncol,:top_lev-1) = 0._r8 + ngracso_grid(:ncol,:top_lev-1) = 0._r8 + nmultgo_grid(:ncol,:top_lev-1) = 0._r8 + nmultrgo_grid(:ncol,:top_lev-1) = 0._r8 + npsacwgo_grid(:ncol,:top_lev-1) = 0._r8 + bergso_grid(:ncol,:top_lev-1) = 0._r8 + + ! These pbuf fields need to be assigned. There is no corresponding subcol_field_avg + ! as they are reset before being used, so it would be a needless calculation + lambdac_grid => lambdac + mu_grid => mu + rel_grid => rel + rei_grid => rei + sadice_grid => sadice + sadsnow_grid => sadsnow + dei_grid => dei + des_grid => des + degrau_grid => degrau + + ! fields already on grids, so just assign + prec_str_grid => prec_str + iclwpst_grid => iclwpst + cvreffliq_grid => cvreffliq + cvreffice_grid => cvreffice + mgflxprc_grid => mgflxprc + mgflxsnw_grid => mgflxsnw + qme_grid => qme + nevapr_grid => nevapr + prain_grid => prain + + bergso_grid(:ncol,top_lev:) = proc_rates%bergstot + am_evp_st_grid = am_evp_st + + evpsnow_st_grid(:ncol,top_lev:) = proc_rates%evapsnow + qrout_grid = qrout + qsout_grid = qsout + nsout_grid = nsout + nrout_grid = nrout + cld_grid = cld + qcreso_grid(:ncol,top_lev:) = proc_rates%qcrestot + melto_grid(:ncol,top_lev:) = proc_rates%melttot + mnuccco_grid(:ncol,top_lev:) = proc_rates%mnuccctot + mnuccto_grid(:ncol,top_lev:) = proc_rates%mnuccttot + bergo_grid(:ncol,top_lev:) = proc_rates%bergtot + homoo_grid(:ncol,top_lev:) = proc_rates%homotot + msacwio_grid(:ncol,top_lev:) = proc_rates%msacwitot + psacwso_grid(:ncol,top_lev:) = proc_rates%psacwstot + cmeiout_grid(:ncol,top_lev:) = proc_rates%cmeitot + qireso_grid(:ncol,top_lev:) = proc_rates%qirestot + prcio_grid(:ncol,top_lev:) = proc_rates%prcitot + praio_grid(:ncol,top_lev:) = proc_rates%praitot + icwmrst_grid = icwmrst + icimrst_grid = icimrst + liqcldf_grid = liqcldf + icecldf_grid = icecldf + icwnc_grid = icwnc + icinc_grid = icinc + pdel_grid = state_loc%pdel + prao_grid(:ncol,top_lev:) = proc_rates%pratot + prco_grid(:ncol,top_lev:) = proc_rates%prctot + + nc_grid = state_loc%q(:,:,ixnumliq) + ni_grid = state_loc%q(:,:,ixnumice) + + qcsedtenout_grid(:ncol,top_lev:) = proc_rates%qcsedten + qisedtenout_grid(:ncol,top_lev:) = proc_rates%qisedten + vtrmcout_grid(:ncol,top_lev:) = proc_rates%vtrmc + vtrmiout_grid(:ncol,top_lev:) = proc_rates%vtrmi + qcsevapout_grid(:ncol,top_lev:) = proc_rates%qcsevap + qisevapout_grid(:ncol,top_lev:) = proc_rates%qisevap + + cldmax_grid = cldmax + + qr_grid = state_loc%q(:,:,ixrain) + nr_grid = state_loc%q(:,:,ixnumrain) + qs_grid = state_loc%q(:,:,ixsnow) + ns_grid = state_loc%q(:,:,ixnumsnow) + qrsedtenout_grid(:ncol,top_lev:) = proc_rates%qrsedten + qssedtenout_grid(:ncol,top_lev:) = proc_rates%qssedten + umrout_grid(:ncol,top_lev:) = proc_rates%umr + umsout_grid(:ncol,top_lev:) = proc_rates%ums + +! Zero out terms for budgets if not mg3.... + psacwgo_grid = 0._r8 + pgsacwo_grid = 0._r8 + qmultgo_grid = 0._r8 + + if (micro_mg_version > 2) then + qg_grid = state_loc%q(:,:,ixgraupel) + ng_grid = state_loc%q(:,:,ixnumgraupel) + psacro_grid(:ncol,top_lev:) = proc_rates%psacrtot + pracgo_grid(:ncol,top_lev:) = proc_rates%pracgtot + psacwgo_grid(:ncol,top_lev:) = proc_rates%psacwgtot + pgsacwo_grid(:ncol,top_lev:) = proc_rates%pgsacwtot + pgracso_grid(:ncol,top_lev:) = proc_rates%pgracstot + prdgo_grid(:ncol,top_lev:) = proc_rates%prdgtot + qmultgo_grid(:ncol,top_lev:) = proc_rates%qmultgtot + qmultrgo_grid(:ncol,top_lev:) = proc_rates%qmultrgtot + npracgo_grid(:ncol,top_lev:) = proc_rates%npracgtot + nscngo_grid(:ncol,top_lev:) = proc_rates%nscngtot + ngracso_grid(:ncol,top_lev:) = proc_rates%ngracstot + nmultgo_grid(:ncol,top_lev:) = proc_rates%nmultgtot + nmultrgo_grid(:ncol,top_lev:) = proc_rates%nmultrgtot + npsacwgo_grid(:ncol,top_lev:) = proc_rates%npsacwgtot + end if + + + end if + + ! If on subcolumns, average the rest of the pbuf fields which were modified on subcolumns but are not used further in + ! this parameterization (no need to assign in the non-subcolumn case -- the else step) + if (use_subcol_microp) then + call subcol_field_avg(snow_str, ngrdcol, lchnk, snow_str_grid) + call subcol_field_avg(prec_pcw, ngrdcol, lchnk, prec_pcw_grid) + call subcol_field_avg(snow_pcw, ngrdcol, lchnk, snow_pcw_grid) + call subcol_field_avg(prec_sed, ngrdcol, lchnk, prec_sed_grid) + call subcol_field_avg(snow_sed, ngrdcol, lchnk, snow_sed_grid) + call subcol_field_avg(cldo, ngrdcol, lchnk, cldo_grid) + call subcol_field_avg(mgmrprc, ngrdcol, lchnk, mgmrprc_grid) + call subcol_field_avg(mgmrsnw, ngrdcol, lchnk, mgmrsnw_grid) + call subcol_field_avg(wsedl, ngrdcol, lchnk, wsedl_grid) + call subcol_field_avg(cc_t, ngrdcol, lchnk, cc_t_grid) + call subcol_field_avg(cc_qv, ngrdcol, lchnk, cc_qv_grid) + call subcol_field_avg(cc_ql, ngrdcol, lchnk, cc_ql_grid) + call subcol_field_avg(cc_qi, ngrdcol, lchnk, cc_qi_grid) + call subcol_field_avg(cc_nl, ngrdcol, lchnk, cc_nl_grid) + call subcol_field_avg(cc_ni, ngrdcol, lchnk, cc_ni_grid) + call subcol_field_avg(cc_qlst, ngrdcol, lchnk, cc_qlst_grid) + call subcol_field_avg(iciwpst, ngrdcol, lchnk, iciwpst_grid) + call subcol_field_avg(icswp, ngrdcol, lchnk, icswp_grid) + call subcol_field_avg(cldfsnow, ngrdcol, lchnk, cldfsnow_grid) + + if (micro_mg_version > 2) then + call subcol_field_avg(icgrauwp, ngrdcol, lchnk, icgrauwp_grid) + call subcol_field_avg(cldfgrau, ngrdcol, lchnk, cldfsnow_grid) + end if + + if (rate1_cw2pr_st_idx > 0) then + call subcol_field_avg(rate1ord_cw2pr_st, ngrdcol, lchnk, rate1ord_cw2pr_st_grid) + end if + + end if + + ! ------------------------------------- ! + ! Size distribution calculation ! + ! ------------------------------------- ! + + ! Calculate rho (on subcolumns if turned on) for size distribution + ! parameter calculations and average it if needed + ! + ! State instead of state_loc to preserve answers for MG1 (and in any + ! case, it is unlikely to make much difference). + rho(:ncol,top_lev:) = state%pmid(:ncol,top_lev:) / & + (rair*state%t(:ncol,top_lev:)) + if (use_subcol_microp) then + call subcol_field_avg(rho, ngrdcol, lchnk, rho_grid) + else + rho_grid = rho + end if + + ! Effective radius for cloud liquid, fixed number. + mu_grid = 0._r8 + lambdac_grid = 0._r8 + rel_fn_grid = 10._r8 + + ncic_grid = 1.e8_r8 + + do k = top_lev, pver + !$acc data copyin (mg_liq_props,icwmrst_grid(:ngrdcol,k),rho_grid(:ngrdcol,k)) & + !$acc copy (ncic_grid(:ngrdcol,k)) & + !$acc copyout (mu_grid(:ngrdcol,k),lambdac_grid(:ngrdcol,k)) + call size_dist_param_liq(mg_liq_props, icwmrst_grid(:ngrdcol,k), & + ncic_grid(:ngrdcol,k), rho_grid(:ngrdcol,k), & + mu_grid(:ngrdcol,k), lambdac_grid(:ngrdcol,k), ngrdcol) + !$acc end data + end do + + where (icwmrst_grid(:ngrdcol,top_lev:) > qsmall) + rel_fn_grid(:ngrdcol,top_lev:) = & + (mu_grid(:ngrdcol,top_lev:) + 3._r8)/ & + lambdac_grid(:ngrdcol,top_lev:)/2._r8 * 1.e6_r8 + end where + + ! Effective radius for cloud liquid, and size parameters + ! mu_grid and lambdac_grid. + mu_grid = 0._r8 + lambdac_grid = 0._r8 + rel_grid = 10._r8 + + ! Calculate ncic on the grid + ncic_grid(:ngrdcol,top_lev:) = nc_grid(:ngrdcol,top_lev:) / & + max(mincld,liqcldf_grid(:ngrdcol,top_lev:)) + + do k = top_lev, pver + !$acc data copyin (mg_liq_props,icwmrst_grid(:ngrdcol,k), rho_grid(:ngrdcol,k)) & + !$acc copy (ncic_grid(:ngrdcol,k)) & + !$acc copyout (mu_grid(:ngrdcol,k),lambdac_grid(:ngrdcol,k)) + call size_dist_param_liq(mg_liq_props, icwmrst_grid(:ngrdcol,k), & + ncic_grid(:ngrdcol,k), rho_grid(:ngrdcol,k), & + mu_grid(:ngrdcol,k), lambdac_grid(:ngrdcol,k), ngrdcol) + !$acc end data + end do + + where (icwmrst_grid(:ngrdcol,top_lev:) >= qsmall) + rel_grid(:ngrdcol,top_lev:) = & + (mu_grid(:ngrdcol,top_lev:) + 3._r8) / & + lambdac_grid(:ngrdcol,top_lev:)/2._r8 * 1.e6_r8 + elsewhere + ! Deal with the fact that size_dist_param_liq sets mu_grid to -100 + ! wherever there is no cloud. + mu_grid(:ngrdcol,top_lev:) = 0._r8 + end where + + ! Rain/snow effective diameter. + drout2_grid = 0._r8 + reff_rain_grid = 0._r8 + des_grid = 0._r8 + dsout2_grid = 0._r8 + reff_snow_grid = 0._r8 + reff_grau_grid = 0._r8 + + ! Prognostic precipitation + + where (qr_grid(:ngrdcol,top_lev:) >= 1.e-7_r8) + drout2_grid(:ngrdcol,top_lev:) = avg_diameter( & + qr_grid(:ngrdcol,top_lev:), & + nr_grid(:ngrdcol,top_lev:) * rho_grid(:ngrdcol,top_lev:), & + rho_grid(:ngrdcol,top_lev:), rhow) + + reff_rain_grid(:ngrdcol,top_lev:) = drout2_grid(:ngrdcol,top_lev:) * & + shapeparam * micron2meter + end where + + where (qs_grid(:ngrdcol,top_lev:) >= 1.e-7_r8) + dsout2_grid(:ngrdcol,top_lev:) = avg_diameter( & + qs_grid(:ngrdcol,top_lev:), & + ns_grid(:ngrdcol,top_lev:) * rho_grid(:ngrdcol,top_lev:), & + rho_grid(:ngrdcol,top_lev:), rhosn) + + des_grid(:ngrdcol,top_lev:) = dsout2_grid(:ngrdcol,top_lev:) *& + 3._r8 * rhosn/rhows + + reff_snow_grid(:ngrdcol,top_lev:) = dsout2_grid(:ngrdcol,top_lev:) * & + shapeparam * micron2meter + end where + + +! Graupel/Hail size distribution Placeholder + if (micro_mg_version > 2) then + degrau_grid = 0._r8 + where (qg_grid(:ngrdcol,top_lev:) >= 1.e-7_r8) + dgout2_grid(:ngrdcol,top_lev:) = avg_diameter( & + qg_grid(:ngrdcol,top_lev:), & + ng_grid(:ngrdcol,top_lev:) * rho_grid(:ngrdcol,top_lev:), & + rho_grid(:ngrdcol,top_lev:), rhog) + + reff_grau_grid(:ngrdcol,top_lev:) = dgout2_grid(:ngrdcol,top_lev:) * & + 1.5_r8 * 1.e6_r8 + degrau_grid(:ngrdcol,top_lev:) = dgout2_grid(:ngrdcol,top_lev:) *& + 3._r8 * rhog/rhows + end where + end if + + ! Effective radius and diameter for cloud ice. + rei_grid = 25._r8 + + niic_grid(:ngrdcol,top_lev:) = ni_grid(:ngrdcol,top_lev:) / & + max(mincld,icecldf_grid(:ngrdcol,top_lev:)) + + do k = top_lev, pver + !$acc data copyin (mg_ice_props, icimrst_grid(:ngrdcol,k)) & + !$acc copy (niic_grid(:ngrdcol,k)) & + !$acc copyout (rei_grid(:ngrdcol,k)) + call size_dist_param_basic(mg_ice_props,icimrst_grid(:ngrdcol,k), & + niic_grid(:ngrdcol,k),rei_grid(:ngrdcol,k),ngrdcol) + !$acc end data + end do + + where (icimrst_grid(:ngrdcol,top_lev:) >= qsmall) + rei_grid(:ngrdcol,top_lev:) = 1.5_r8/rei_grid(:ngrdcol,top_lev:) & + * 1.e6_r8 + elsewhere + rei_grid(:ngrdcol,top_lev:) = 25._r8 + end where + + dei_grid = rei_grid * rhoi/rhows * 2._r8 + + ! Limiters for low cloud fraction. + do k = top_lev, pver + do i = 1, ngrdcol + ! Convert snow effective diameter to microns + des_grid(i,k) = des_grid(i,k) * 1.e6_r8 + if ( ast_grid(i,k) < 1.e-4_r8 ) then + mu_grid(i,k) = mucon + lambdac_grid(i,k) = (mucon + 1._r8)/dcon + dei_grid(i,k) = deicon + end if + end do + end do + + mgreffrain_grid(:ngrdcol,top_lev:pver) = reff_rain_grid(:ngrdcol,top_lev:pver) + mgreffsnow_grid(:ngrdcol,top_lev:pver) = reff_snow_grid(:ngrdcol,top_lev:pver) + + ! ------------------------------------- ! + ! Precipitation efficiency Calculation ! + ! ------------------------------------- ! + + !----------------------------------------------------------------------- + ! Liquid water path + + ! Compute liquid water paths, and column condensation + tgliqwp_grid(:ngrdcol) = 0._r8 + tgcmeliq_grid(:ngrdcol) = 0._r8 + do k = top_lev, pver + do i = 1, ngrdcol + tgliqwp_grid(i) = tgliqwp_grid(i) + iclwpst_grid(i,k)*cld_grid(i,k) + + if (cmeliq_grid(i,k) > 1.e-12_r8) then + !convert cmeliq to right units: kgh2o/kgair/s * kgair/m2 / kgh2o/m3 = m/s + tgcmeliq_grid(i) = tgcmeliq_grid(i) + cmeliq_grid(i,k) * & + (pdel_grid(i,k) / gravit) / rhoh2o + end if + end do + end do + + ! note: 1e-6 kgho2/kgair/s * 1000. pa / (9.81 m/s2) / 1000 kgh2o/m3 = 1e-7 m/s + ! this is 1ppmv of h2o in 10hpa + ! alternatively: 0.1 mm/day * 1.e-4 m/mm * 1/86400 day/s = 1.e-9 + + !----------------------------------------------------------------------- + ! precipitation efficiency calculation (accumulate cme and precip) + + minlwp = 0.01_r8 !minimum lwp threshold (kg/m3) + + ! zero out precip efficiency and total averaged precip + pe_grid(:ngrdcol) = 0._r8 + tpr_grid(:ngrdcol) = 0._r8 + pefrac_grid(:ngrdcol) = 0._r8 + + ! accumulate precip and condensation + do i = 1, ngrdcol + + acgcme_grid(i) = acgcme_grid(i) + tgcmeliq_grid(i) + acprecl_grid(i) = acprecl_grid(i) + prec_str_grid(i) + acnum_grid(i) = acnum_grid(i) + 1 + + ! if LWP is zero, then 'end of cloud': calculate precip efficiency + if (tgliqwp_grid(i) < minlwp) then + if (acprecl_grid(i) > 5.e-8_r8) then + tpr_grid(i) = max(acprecl_grid(i)/acnum_grid(i), 1.e-15_r8) + if (acgcme_grid(i) > 1.e-10_r8) then + pe_grid(i) = min(max(acprecl_grid(i)/acgcme_grid(i), 1.e-15_r8), 1.e5_r8) + pefrac_grid(i) = 1._r8 + end if + end if + + ! reset counters +! if (pe_grid(i) /= 0._r8 .and. (pe_grid(i) < 1.e-8_r8 .or. pe_grid(i) > 1.e3_r8)) then +! write (iulog,*) 'PE_grid:ANOMALY pe_grid, acprecl_grid, acgcme_grid, tpr_grid, acnum_grid ', & +! pe_grid(i),acprecl_grid(i), acgcme_grid(i), tpr_grid(i), acnum_grid(i) +! endif + + acprecl_grid(i) = 0._r8 + acgcme_grid(i) = 0._r8 + acnum_grid(i) = 0 + end if ! end LWP zero conditional + + ! if never find any rain....(after 10^3 timesteps...) + if (acnum_grid(i) > 1000) then + acnum_grid(i) = 0 + acprecl_grid(i) = 0._r8 + acgcme_grid(i) = 0._r8 + end if + + end do + + !----------------------------------------------------------------------- + ! vertical average of non-zero accretion, autoconversion and ratio. + ! vars: vprco_grid(i),vprao_grid(i),racau_grid(i),cnt_grid + + vprao_grid = 0._r8 + cnt_grid = 0 + do k = top_lev, pver + vprao_grid(:ngrdcol) = vprao_grid(:ngrdcol) + prao_grid(:ngrdcol,k) + where (prao_grid(:ngrdcol,k) /= 0._r8) cnt_grid(:ngrdcol) = cnt_grid(:ngrdcol) + 1 + end do + + where (cnt_grid > 0) vprao_grid = vprao_grid/cnt_grid + + vprco_grid = 0._r8 + cnt_grid = 0 + do k = top_lev, pver + vprco_grid(:ngrdcol) = vprco_grid(:ngrdcol) + prco_grid(:ngrdcol,k) + where (prco_grid(:ngrdcol,k) /= 0._r8) cnt_grid(:ngrdcol) = cnt_grid(:ngrdcol) + 1 + end do + + where (cnt_grid > 0) + vprco_grid = vprco_grid/cnt_grid + racau_grid = vprao_grid/vprco_grid + elsewhere + racau_grid = 0._r8 + end where + + racau_grid = min(racau_grid, 1.e10_r8) + +!----------------------------------------------------------------------- +! Diagnostic Rainbow Calculation. Seriously. +!----------------------------------------------------------------------- + + do i = 1, ngrdcol + + top_idx = pver + convmx = 0._r8 + frlow = 0._r8 + cldmx = 0._r8 + cldtot = maxval(ast(i,top_lev:)) + +! Find levels in surface layer + do k = top_lev, pver + if (state%pmid(i,k) > rb_pmin) then + top_idx = min(k,top_idx) + end if + end do + +!For all fractional precip calculated below, use maximum in surface layer. +!For convective precip, base on convective cloud area + convmx = maxval(concld(i,top_idx:)) +!For stratiform precip, base on precip fraction + cldmx= maxval(freqr(i,top_idx:)) +! Combine and use maximum of strat or conv fraction + frlow= max(cldmx,convmx) + +!max precip + rmax=maxval(qrout_grid(i,top_idx:)) + +! Stratiform precip mixing ratio OR some convective precip +! (rval = true if any sig precip) + + rval = ((precc(i) > rb_rcmin) .or. (rmax > rb_rmin)) + +!Now can find conditions for a rainbow: +! Maximum cloud cover (CLDTOT) < 0.5 +! 48 < SZA < 90 +! freqr (below rb_pmin) > 0.25 +! Some rain (liquid > 1.e-6 kg/kg, convective precip > 1.e-7 m/s + + if ((cldtot < 0.5_r8) .and. (sza(i) > 48._r8) .and. (sza(i) < 90._r8) .and. rval) then + +!Rainbow 'probability' (area) derived from solid angle theory +!as the fraction of the hemisphere for a spherical cap with angle phi=sza-48. +! This is only valid between 48 < sza < 90 (controlled for above). + + rbfrac(i) = max(0._r8,(1._r8-COS((sza(i)-48._r8)*deg2rad))/2._r8) * frlow + rbfreq(i) = 1.0_r8 + end if + + end do ! end column loop for rainbows + + call history_out_field('RBFRAC', rbfrac) ! subcols + call history_out_field('RBFREQ', rbfreq) ! subcols + + + ! --------------------- ! + ! History Output Fields ! + ! --------------------- ! + + ! Column droplet concentration + cdnumc_grid(:ngrdcol) = sum(nc_grid(:ngrdcol,top_lev:pver) * & + pdel_grid(:ngrdcol,top_lev:pver)/gravit, dim=2) + + ! Averaging for new output fields + efcout_grid = 0._r8 + efiout_grid = 0._r8 + ncout_grid = 0._r8 + niout_grid = 0._r8 + freql_grid = 0._r8 + freqi_grid = 0._r8 + icwmrst_grid_out = 0._r8 + icimrst_grid_out = 0._r8 + freqm_grid = 0._r8 + freqsl_grid = 0._r8 + freqslm_grid = 0._r8 + + do k = top_lev, pver + do i = 1, ngrdcol + if ( liqcldf_grid(i,k) > 0.01_r8 .and. icwmrst_grid(i,k) > 5.e-5_r8 ) then + efcout_grid(i,k) = rel_grid(i,k) * liqcldf_grid(i,k) + ncout_grid(i,k) = icwnc_grid(i,k) * liqcldf_grid(i,k) + freql_grid(i,k) = liqcldf_grid(i,k) + icwmrst_grid_out(i,k) = icwmrst_grid(i,k) + end if + if ( icecldf_grid(i,k) > 0.01_r8 .and. icimrst_grid(i,k) > 1.e-6_r8 ) then + efiout_grid(i,k) = rei_grid(i,k) * icecldf_grid(i,k) + niout_grid(i,k) = icinc_grid(i,k) * icecldf_grid(i,k) + freqi_grid(i,k) = icecldf_grid(i,k) + icimrst_grid_out(i,k) = icimrst_grid(i,k) + end if + + ! Supercooled liquid + if (freql_grid(i,k) > 0.01_r8 .and. freqi_grid(i,k) > 0.01_r8 ) then + freqm_grid(i,k)=min(liqcldf_grid(i,k),icecldf_grid(i,k)) + end if + if (freql_grid(i,k) > 0.01_r8 .and. freqi_grid(i,k) < 0.01_r8 .and. state_loc%t(i,k) < tmelt ) then + freqsl_grid(i,k)=liqcldf_grid(i,k) + end if + if (freql_grid(i,k) > 0.01_r8 .and. freqi_grid(i,k) > 0.01_r8 .and. state_loc%t(i,k) < tmelt ) then + freqslm_grid(i,k)=liqcldf_grid(i,k) + end if + + end do + end do + + ! Cloud top effective radius and number. + fcti_grid = 0._r8 + fctl_grid = 0._r8 + ctrel_grid = 0._r8 + ctrei_grid = 0._r8 + ctnl_grid = 0._r8 + ctni_grid = 0._r8 + fctm_grid = 0._r8 + fctsl_grid = 0._r8 + fctslm_grid= 0._r8 + + do i = 1, ngrdcol + do k = top_lev, pver + if ( liqcldf_grid(i,k) > 0.01_r8 .and. icwmrst_grid(i,k) > 1.e-7_r8 ) then + ctrel_grid(i) = rel_grid(i,k) * liqcldf_grid(i,k) + ctnl_grid(i) = icwnc_grid(i,k) * liqcldf_grid(i,k) + fctl_grid(i) = liqcldf_grid(i,k) + + ! Cloud Top Mixed phase, supercooled liquid only and supercooled liquid mixed + if (freqi_grid(i,k) > 0.01_r8) then + fctm_grid(i)=min(liqcldf_grid(i,k),icecldf_grid(i,k)) + end if + if (freqi_grid(i,k) < 0.01_r8 .and. state_loc%t(i,k) < tmelt ) then + fctsl_grid(i)=liqcldf_grid(i,k) + end if + if (freqi_grid(i,k) > 0.01_r8 .and. state_loc%t(i,k) < tmelt ) then + fctslm_grid(i)=liqcldf_grid(i,k) + end if + + exit + end if + + if ( icecldf_grid(i,k) > 0.01_r8 .and. icimrst_grid(i,k) > 1.e-7_r8 ) then + ctrei_grid(i) = rei_grid(i,k) * icecldf_grid(i,k) + ctni_grid(i) = icinc_grid(i,k) * icecldf_grid(i,k) + fcti_grid(i) = icecldf_grid(i,k) + exit + end if + end do + end do + + ! Evaporation of stratiform precipitation fields for UNICON + evprain_st_grid(:ngrdcol,:pver) = nevapr_grid(:ngrdcol,:pver) - evpsnow_st_grid(:ngrdcol,:pver) + do k = top_lev, pver + do i = 1, ngrdcol + evprain_st_grid(i,k) = max(evprain_st_grid(i,k), 0._r8) + evpsnow_st_grid(i,k) = max(evpsnow_st_grid(i,k), 0._r8) + end do + end do + + ! Assign the values to the pbuf pointers if they exist in pbuf + if (qrain_idx > 0) qrout_grid_ptr = qrout_grid + if (qsnow_idx > 0) qsout_grid_ptr = qsout_grid + if (nrain_idx > 0) nrout_grid_ptr = nrout_grid + if (nsnow_idx > 0) nsout_grid_ptr = nsout_grid + if (qcsedten_idx > 0) qcsedtenout_grid_ptr = qcsedtenout_grid + if (qrsedten_idx > 0) qrsedtenout_grid_ptr = qrsedtenout_grid + if (qisedten_idx > 0) qisedtenout_grid_ptr = qisedtenout_grid + if (qssedten_idx > 0) qssedtenout_grid_ptr = qssedtenout_grid + if (vtrmc_idx > 0) vtrmcout_grid_ptr = vtrmcout_grid + if (umr_idx > 0) umrout_grid_ptr = umrout_grid + if (vtrmi_idx > 0) vtrmiout_grid_ptr = vtrmiout_grid + if (ums_idx > 0) umsout_grid_ptr = umsout_grid + if (qcsevap_idx > 0 ) qcsevapout_grid_ptr = qcsevapout_grid + if (qisevap_idx > 0 ) qisevapout_grid_ptr = qisevapout_grid + + ! --------------------------------------------- ! + ! General outfield calls for microphysics ! + ! --------------------------------------------- ! + + ! Output a handle of variables which are calculated on the fly + + ftem_grid = 0._r8 + + ftem_grid(:ngrdcol,top_lev:pver) = qcreso_grid(:ngrdcol,top_lev:pver) + call history_out_field( 'MPDW2V', ftem_grid) + + ftem_grid(:ngrdcol,top_lev:pver) = melto_grid(:ngrdcol,top_lev:pver) - mnuccco_grid(:ngrdcol,top_lev:pver)& + - mnuccto_grid(:ngrdcol,top_lev:pver) - bergo_grid(:ngrdcol,top_lev:pver) - homoo_grid(:ngrdcol,top_lev:pver)& + - msacwio_grid(:ngrdcol,top_lev:pver) + call history_out_field( 'MPDW2I', ftem_grid) + + if (micro_mg_version > 2) then + ftem_grid(:ngrdcol,top_lev:pver) = -prao_grid(:ngrdcol,top_lev:pver) - prco_grid(:ngrdcol,top_lev:pver)& + - psacwso_grid(:ngrdcol,top_lev:pver) - bergso_grid(:ngrdcol,top_lev:pver)& + - psacwgo_grid(:ngrdcol,top_lev:pver) - pgsacwo_grid(:ngrdcol,top_lev:pver) + else + ftem_grid(:ngrdcol,top_lev:pver) = -prao_grid(:ngrdcol,top_lev:pver) - prco_grid(:ngrdcol,top_lev:pver)& + - psacwso_grid(:ngrdcol,top_lev:pver) - bergso_grid(:ngrdcol,top_lev:pver) + endif + + call history_out_field( 'MPDW2P', ftem_grid) + + ftem_grid(:ngrdcol,top_lev:pver) = cmeiout_grid(:ngrdcol,top_lev:pver) + qireso_grid(:ngrdcol,top_lev:pver) + call history_out_field( 'MPDI2V', ftem_grid) + + if (micro_mg_version > 2) then + ftem_grid(:ngrdcol,top_lev:pver) = -melto_grid(:ngrdcol,top_lev:pver) + mnuccco_grid(:ngrdcol,top_lev:pver) & + + mnuccto_grid(:ngrdcol,top_lev:pver) + bergo_grid(:ngrdcol,top_lev:pver) + homoo_grid(:ngrdcol,top_lev:pver)& + + msacwio_grid(:ngrdcol,top_lev:pver)& + - qmultgo_grid(:ngrdcol,top_lev:pver) + else + ftem_grid(:ngrdcol,top_lev:pver) = -melto_grid(:ngrdcol,top_lev:pver) + mnuccco_grid(:ngrdcol,top_lev:pver) & + + mnuccto_grid(:ngrdcol,top_lev:pver) + bergo_grid(:ngrdcol,top_lev:pver) + homoo_grid(:ngrdcol,top_lev:pver)& + + msacwio_grid(:ngrdcol,top_lev:pver) + endif + + call history_out_field( 'MPDI2W', ftem_grid) + + ftem_grid(:ngrdcol,top_lev:pver) = -prcio_grid(:ngrdcol,top_lev:pver) - praio_grid(:ngrdcol,top_lev:pver) + call history_out_field( 'MPDI2P', ftem_grid) + + ! Output fields which have not been averaged already, averaging if use_subcol_microp is true + if (trim(micro_mg_warm_rain) == 'tau' .or. trim(micro_mg_warm_rain) == 'emulated') then + call history_out_field('scale_qc', proc_rates%scale_qc) ! subcols + call history_out_field('scale_nc', proc_rates%scale_nc) ! subcols + call history_out_field('scale_qr', proc_rates%scale_qr) ! subcols + call history_out_field('scale_nr', proc_rates%scale_nr) ! subcols + call history_out_field('amk_c', proc_rates%amk_c) ! subcols + call history_out_field('ank_c', proc_rates%ank_c) ! subcols + call history_out_field('amk_r', proc_rates%amk_r) ! subcols + call history_out_field('ank_r', proc_rates%ank_r) ! subcols + call history_out_field('amk', proc_rates%amk) ! subcols + call history_out_field('ank', proc_rates%ank) ! subcols + call history_out_field('amk_out', proc_rates%amk_out) ! subcols + call history_out_field('ank_out', proc_rates%ank_out) ! subcols + call history_out_field('QC_TAU_out', proc_rates%qc_out_TAU) ! subcols + call history_out_field('NC_TAU_out', proc_rates%nc_out_TAU) ! subcols + call history_out_field('QR_TAU_out', proc_rates%qr_out_TAU) ! subcols + call history_out_field('NR_TAU_out', proc_rates%nr_out_TAU) ! subcols + call history_out_field('qctend_TAU', proc_rates%qctend_TAU) ! subcols + call history_out_field('nctend_TAU', proc_rates%nctend_TAU) ! subcols + call history_out_field('qrtend_TAU', proc_rates%qrtend_TAU) ! subcols + call history_out_field('nrtend_TAU', proc_rates%nrtend_TAU) ! subcols + call history_out_field('gmnnn_lmnnn_TAU', proc_rates%gmnnn_lmnnn_TAU) ! subcols + call history_out_field('ML_fixer', proc_rates%ML_fixer) ! subcols + call history_out_field('qc_fixer', proc_rates%qc_fixer) ! subcols + call history_out_field('nc_fixer', proc_rates%nc_fixer) ! subcols + call history_out_field('qr_fixer', proc_rates%qr_fixer) ! subcols + call history_out_field('nr_fixer', proc_rates%nr_fixer) ! subcols + call history_out_field('QC_TAU_in', proc_rates%qc_in_TAU) ! subcols + call history_out_field('NC_TAU_in', proc_rates%nc_in_TAU) ! subcols + call history_out_field('QR_TAU_in', proc_rates%qr_in_TAU) ! subcols + call history_out_field('NR_TAU_in', proc_rates%nr_in_TAU) ! subcols + end if + + if (trim(micro_mg_warm_rain) == 'sb2001') then + call history_out_field('qctend_SB2001', proc_rates%qctend_SB2001) ! subcols + call history_out_field('nctend_SB2001', proc_rates%nctend_SB2001) ! subcols + call history_out_field('qrtend_SB2001', proc_rates%qrtend_SB2001) ! subcols + call history_out_field('nrtend_SB2001', proc_rates%nrtend_SB2001) ! subcols + end if + if (trim(micro_mg_warm_rain) == 'kk2000') then + call history_out_field('qctend_KK2000', proc_rates%qctend_KK2000) ! subcols + call history_out_field('nctend_KK2000', proc_rates%nctend_KK2000) ! subcols + call history_out_field('qrtend_KK2000', proc_rates%qrtend_KK2000) ! subcols + call history_out_field('nrtend_KK2000', proc_rates%nrtend_KK2000) ! subcols + end if + call history_out_field('LAMC', proc_rates%lamc_out) ! subcols + call history_out_field('LAMR', proc_rates%lamr_out) ! subcols + call history_out_field('PGAM', proc_rates%pgam_out) ! subcols + call history_out_field('N0R', proc_rates%n0r_out) ! subcols + + call history_out_field('MPICLWPI', iclwpi) ! subcols + call history_out_field('MPICIWPI', iciwpi) ! subcols + call history_out_field('REFL', refl) ! subcols + call history_out_field('AREFL', arefl) ! subcols + call history_out_field('AREFLZ', areflz) ! subcols + call history_out_field('FREFL', frefl) ! subcols + call history_out_field('CSRFL', csrfl) ! subcols + call history_out_field('ACSRFL', acsrfl) ! subcols + call history_out_field('FCSRFL', fcsrfl) ! subcols + call history_out_field('REFL10CM', refl10cm) ! subcols + call history_out_field('REFLZ10CM', reflz10cm) ! subcols + call history_out_field('RERCLD', rercld) ! subcols + call history_out_field('NCAL', ncal) ! subcols + call history_out_field('NCAI', ncai) ! subcols + call history_out_field('AQRAIN', qrout2) ! subcols + call history_out_field('AQSNOW', qsout2) ! subcols + call history_out_field('ANRAIN', nrout2) ! subcols + call history_out_field('ANSNOW', nsout2) ! subcols + call history_out_field('FREQR', freqr) ! subcols + call history_out_field('FREQS', freqs) ! subcols + call history_out_field('MPDT', tlat) ! subcols + call history_out_field('MPDQ', qvlat) ! subcols + call history_out_field('MPDLIQ', qcten) ! subcols + call history_out_field('MPDICE', qiten) ! subcols + call history_out_field('MPDNLIQ', ncten) ! subcols + call history_out_field('MPDNICE', niten) ! subcols + call history_out_field('EVAPSNOW', proc_rates%evapsnow) ! subcols + call history_out_field('QCSEVAP', proc_rates%qcsevap) ! subcols + call history_out_field('QISEVAP', proc_rates%qisevap) ! subcols + call history_out_field('QVRES', proc_rates%qvres) ! subcols + call history_out_field('VTRMC', proc_rates%vtrmc) ! subcols + call history_out_field('VTRMI', proc_rates%vtrmi) ! subcols + call history_out_field('QCSEDTEN', proc_rates%qcsedten) ! subcols + call history_out_field('QISEDTEN', proc_rates%qisedten) ! subcols + call history_out_field('QRSEDTEN', proc_rates%qrsedten) ! subcols + call history_out_field('QSSEDTEN', proc_rates%qssedten) ! subcols + call history_out_field('MNUCCRIO', proc_rates%mnuccritot) ! subcols + call history_out_field('MNUDEPO', proc_rates%mnudeptot) ! subcols + call history_out_field('MELTSTOT', proc_rates%meltstot) ! subcols + call history_out_field('MNUCCDO', proc_rates%mnuccdtot) ! subcols + call history_out_field('MNUCCDOhet', mnuccdohet) ! subcols + call history_out_field('MNUCCRO', proc_rates%mnuccrtot) ! subcols + call history_out_field('PRACSO', proc_rates%pracstot ) ! subcols + call history_out_field('VAPDEPSO', proc_rates%vapdepstot) ! subcols + call history_out_field('MELTSDT', proc_rates%meltsdttot) ! subcols + call history_out_field('FRZRDT', proc_rates%frzrdttot ) ! subcols + call history_out_field('FICE', nfice) ! subcols + call history_out_field('CLDFSNOW', cldfsnow) ! subcols + call history_out_field ('NNUCCCO', proc_rates%nnuccctot ) ! subcols + call history_out_field ('NNUCCTO', proc_rates%nnuccttot ) ! subcols + call history_out_field ('NNUCCDO', proc_rates%nnuccdtot ) ! subcols + call history_out_field ('NNUDEPO', proc_rates%nnudeptot ) ! subcols + call history_out_field ('NHOMO', proc_rates%nhomotot ) ! subcols + call history_out_field ('NNUCCRO', proc_rates%nnuccrtot ) ! subcols + call history_out_field ('NNUCCRIO', proc_rates%nnuccritot ) ! subcols + call history_out_field ('NSACWIO', proc_rates%nsacwitot ) ! subcols + call history_out_field ('NPRAO', proc_rates%npratot ) ! subcols + call history_out_field ('NPSACWSO', proc_rates%npsacwstot ) ! subcols + call history_out_field ('NPRAIO', proc_rates%npraitot ) ! subcols + call history_out_field ('NPRACSO', proc_rates%npracstot ) ! subcols + call history_out_field ('NPRCO', proc_rates%nprctot ) ! subcols + call history_out_field ('NPRCIO', proc_rates%nprcitot ) ! subcols + call history_out_field ('NCSEDTEN', proc_rates%ncsedten ) ! subcols + call history_out_field ('NISEDTEN', proc_rates%nisedten ) ! subcols + call history_out_field ('NRSEDTEN', proc_rates%nrsedten ) ! subcols + call history_out_field ('NSSEDTEN', proc_rates%nssedten ) ! subcols + call history_out_field ('NMELTO', proc_rates%nmelttot ) ! subcols + call history_out_field ('NMELTS', proc_rates%nmeltstot ) ! subcols + + call history_out_field('UMR', proc_rates%umr) ! subcols + call history_out_field('UMS', proc_rates%ums) ! subcols + + call history_out_field('QCRAT', qcrat) ! subcols + + if (micro_mg_version > 2) then + call history_out_field('UMG', proc_rates%umg) ! subcols + call history_out_field('QGSEDTEN', proc_rates%qgsedten) ! subcols + call history_out_field('FREQG', freqg) ! subcols + call history_out_field('AQGRAU', qgout2) ! subcols + call history_out_field('ANGRAU', ngout2) ! subcols + call history_out_field('CLDFGRAU', cldfgrau) ! subcols + call history_out_field('MELTGTOT', proc_rates%meltgtot) ! subcols + call history_out_field('NMELTG', proc_rates%nmeltgtot) ! subcols + call history_out_field('NGSEDTEN', proc_rates%ngsedten ) ! subcols + + end if + + ! Example subcolumn history_out_field call + if (use_subcol_microp) then + call history_out_field('FICE_SCOL', nfice) ! subcols + call history_out_field('MPDLIQ_SCOL', ptend%q(:,:,ixcldliq)) ! subcols + call history_out_field('MPDICE_SCOL', qiten) ! subcols + end if + + ! Output fields which are already on the grid + call history_out_field('QRAIN', qrout_grid) + call history_out_field('QSNOW', qsout_grid) + call history_out_field('NRAIN', nrout_grid) + call history_out_field('NSNOW', nsout_grid) + call history_out_field('CV_REFFLIQ', cvreffliq_grid) + call history_out_field('CV_REFFICE', cvreffice_grid) + call history_out_field('LS_FLXPRC', mgflxprc_grid) + call history_out_field('LS_FLXSNW', mgflxsnw_grid) + call history_out_field('CME', qme_grid) + call history_out_field('PRODPREC', prain_grid) + call history_out_field('EVAPPREC', nevapr_grid) + call history_out_field('QCRESO', qcreso_grid) + call history_out_field('LS_REFFRAIN', mgreffrain_grid) + call history_out_field('LS_REFFSNOW', mgreffsnow_grid) + call history_out_field('DSNOW', des_grid) + call history_out_field('ADRAIN', drout2_grid) + call history_out_field('ADSNOW', dsout2_grid) + call history_out_field('PE', pe_grid) + call history_out_field('PEFRAC', pefrac_grid) + call history_out_field('APRL', tpr_grid) + call history_out_field('VPRAO', vprao_grid) + call history_out_field('VPRCO', vprco_grid) + call history_out_field('RACAU', racau_grid) + call history_out_field('AREL', efcout_grid) + call history_out_field('AREI', efiout_grid) + call history_out_field('AWNC' , ncout_grid) + call history_out_field('AWNI' , niout_grid) + call history_out_field('FREQL', freql_grid) + call history_out_field('FREQI', freqi_grid) + call history_out_field('ACTREL', ctrel_grid) + call history_out_field('ACTREI', ctrei_grid) + call history_out_field('ACTNL', ctnl_grid) + call history_out_field('ACTNI', ctni_grid) + call history_out_field('FCTL', fctl_grid) + call history_out_field('FCTI', fcti_grid) + call history_out_field('ICINC', icinc_grid) + call history_out_field('ICWNC', icwnc_grid) + call history_out_field('EFFLIQ_IND', rel_fn_grid) + call history_out_field('CDNUMC', cdnumc_grid) + call history_out_field('REL', rel_grid) + call history_out_field('REI', rei_grid) + call history_out_field('MG_SADICE', sadice_grid) + call history_out_field('MG_SADSNOW', sadsnow_grid) + call history_out_field('ICIMRST', icimrst_grid_out) + call history_out_field('ICWMRST', icwmrst_grid_out) + call history_out_field('CMEIOUT', cmeiout_grid) + call history_out_field('PRAO', prao_grid) + call history_out_field('PRCO', prco_grid) + call history_out_field('MNUCCCO', mnuccco_grid) + call history_out_field('MNUCCTO', mnuccto_grid) + call history_out_field('MSACWIO', msacwio_grid) + call history_out_field('PSACWSO', psacwso_grid) + call history_out_field('BERGSO', bergso_grid) + call history_out_field('BERGO', bergo_grid) + call history_out_field('MELTO', melto_grid) + call history_out_field('HOMOO', homoo_grid) + call history_out_field('PRCIO', prcio_grid) + call history_out_field('PRAIO', praio_grid) + call history_out_field('QIRESO', qireso_grid) + call history_out_field('FREQM', freqm_grid) + call history_out_field('FREQSL', freqsl_grid) + call history_out_field('FREQSLM', freqslm_grid) + call history_out_field('FCTM', fctm_grid) + call history_out_field('FCTSL', fctsl_grid) + call history_out_field('FCTSLM', fctslm_grid) + + if (micro_mg_version > 2) then + call history_out_field('PRACGO', pracgo_grid) + call history_out_field('PSACRO', psacro_grid) + call history_out_field('PSACWGO', psacwgo_grid) + call history_out_field('PGSACWO', pgsacwo_grid) + call history_out_field('PGRACSO', pgracso_grid) + call history_out_field('PRDGO', prdgo_grid) + call history_out_field('QMULTGO', qmultgo_grid) + call history_out_field('QMULTRGO', qmultrgo_grid) + call history_out_field('LS_REFFGRAU', reff_grau_grid) + call history_out_field ('NPRACGO', npracgo_grid) + call history_out_field ('NSCNGO', nscngo_grid) + call history_out_field ('NGRACSO', ngracso_grid) + call history_out_field ('NMULTGO', nmultgo_grid) + call history_out_field ('NMULTRGO', nmultrgo_grid) + call history_out_field ('NPSACWGO', npsacwgo_grid) + end if + + if (micro_mg_adjust_cpt) then + cp_rh(:ncol, :pver) = 0._r8 + + do i = 1, ncol + + ! Calculate the RH including any T change that we make. + do k = top_lev, pver + call qsat(state_loc%t(i,k), state_loc%pmid(i,k), es, qs) + cp_rh(i,k) = state_loc%q(i, k, ixq) / qs * 100._r8 + end do + end do + + call history_out_field("TROPF_RHADJ", cp_rh) + end if + + ! deallocate the temporary pbuf grid variable which was allocated if subcolumns are not used + if (.not. use_subcol_microp) then + deallocate(bergso_grid) + end if + + ! deallocate the proc_rates DDT + call proc_rates%deallocate(micro_mg_warm_rain) + + ! ptend_loc is deallocated in physics_update above + call physics_state_dealloc(state_loc) + + if (qsatfac_idx <= 0) then + deallocate(qsatfac) + end if + +end subroutine pumas_diagnostics_run +#end if + +end module pumas_diagnostics