Skip to content

Commit

Permalink
Merge branch 'dsl/GFDL_1M' into dsl/GFDL_1M_driver
Browse files Browse the repository at this point in the history
  • Loading branch information
CharlesKrop committed Feb 18, 2025
2 parents 9d0b1a7 + ffb93ec commit 54c8fd6
Show file tree
Hide file tree
Showing 24 changed files with 2,295 additions and 2,646 deletions.

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1,175 @@
import numpy as np
from gt4py.cartesian.gtscript import i32
from ndsl.dsl.typing import Float


class config:
def __init__(
self,
phys_hydrostatic: bool,
hydrostatic: bool,
dt_moist: Float,
mp_time: Float,
t_min: Float,
t_sub: Float,
tau_r2g: Float,
tau_smlt: Float,
tau_g2r: Float,
dw_land: Float,
dw_ocean: Float,
vi_fac: Float,
vr_fac: Float,
vs_fac: Float,
vg_fac: Float,
ql_mlt: Float,
do_qa: bool,
fix_negative: bool,
vi_max: Float,
vs_max: Float,
vg_max: Float,
vr_max: Float,
qs_mlt: Float,
qs0_crt: Float,
qi_gen: Float,
ql0_max: Float,
qi0_max: Float,
qi0_crt: Float,
qr0_crt: Float,
fast_sat_adj: bool,
rh_inc: Float,
rh_ins: Float,
rh_inr: Float,
const_vi: bool,
const_vs: bool,
const_vg: bool,
const_vr: bool,
use_ccn: bool,
rthreshu: Float,
rthreshs: Float,
ccn_l: Float,
ccn_o: Float,
qc_crt: Float,
tau_g2v: Float,
tau_v2g: Float,
tau_s2v: Float,
tau_v2s: Float,
tau_revp: Float,
tau_frz: Float,
do_bigg: bool,
do_evap: bool,
do_subl: bool,
sat_adj0: Float,
c_piacr: Float,
tau_imlt: Float,
tau_v2l: Float,
tau_l2v: Float,
tau_i2v: Float,
tau_i2s: Float,
tau_l2r: Float,
qi_lim: Float,
ql_gen: Float,
c_paut: Float,
c_psaci: Float,
c_pgacs: Float,
c_pgaci: Float,
z_slope_liq: bool,
z_slope_ice: bool,
prog_ccn: bool,
c_cracw: Float,
alin: Float,
clin: Float,
preciprad: bool,
cld_min: Float,
use_ppm: bool,
mono_prof: bool,
do_sedi_heat: bool,
sedi_transport: bool,
do_sedi_w: bool,
de_ice: bool,
icloud_f: Float,
irain_f: Float,
mp_print: bool,
):
self.phys_hydrostatic = phys_hydrostatic
self.hydrostatic = hydrostatic
self.dt_moist = dt_moist
self.mp_time = mp_time
self.t_min = t_min
self.t_sub = t_sub
self.tau_r2g = tau_r2g
self.tau_smlt = tau_smlt
self.tau_g2r = tau_g2r
self.dw_land = dw_land
self.dw_ocean = dw_ocean
self.vi_fac = vi_fac
self.vr_fac = vr_fac
self.vs_fac = vs_fac
self.vg_fac = vg_fac
self.ql_mlt = ql_mlt
self.do_qa = do_qa
self.fix_negative = fix_negative
self.vi_max = vi_max
self.vs_max = vs_max
self.vg_max = vg_max
self.vr_max = vr_max
self.qs_mlt = qs_mlt
self.qs0_crt = qs0_crt
self.qi_gen = qi_gen
self.ql0_max = ql0_max
self.qi0_max = qi0_max
self.qi0_crt = qi0_crt
self.qr0_crt = qr0_crt
self.fast_sat_adj = fast_sat_adj
self.rh_inc = rh_inc
self.rh_ins = rh_ins
self.rh_inr = rh_inr
self.const_vi = const_vi
self.const_vs = const_vs
self.const_vg = const_vg
self.const_vr = const_vr
self.use_ccn = use_ccn
self.rthreshu = rthreshu
self.rthreshs = rthreshs
self.ccn_l = ccn_l
self.ccn_o = ccn_o
self.qc_crt = qc_crt
self.tau_g2v = tau_g2v
self.tau_v2g = tau_v2g
self.tau_s2v = tau_s2v
self.tau_v2s = tau_v2s
self.tau_revp = tau_revp
self.tau_frz = tau_frz
self.do_bigg = do_bigg
self.do_evap = do_evap
self.do_subl = do_subl
self.sat_adj0 = sat_adj0
self.c_piacr = c_piacr
self.tau_imlt = tau_imlt
self.tau_v2l = tau_v2l
self.tau_l2v = tau_l2v
self.tau_i2v = tau_i2v
self.tau_i2s = tau_i2s
self.tau_l2r = tau_l2r
self.qi_lim = qi_lim
self.ql_gen = ql_gen
self.c_paut = c_paut
self.c_psaci = c_psaci
self.c_pgacs = c_pgacs
self.c_pgaci = c_pgaci
self.z_slope_liq = z_slope_liq
self.z_slope_ice = z_slope_ice
self.prog_ccn = prog_ccn
self.c_cracw = c_cracw
self.alin = alin
self.clin = clin
self.preciprad = preciprad
self.cld_min = cld_min
self.use_ppm = use_ppm
self.mono_prof = mono_prof
self.do_sedi_heat = do_sedi_heat
self.sedi_transport = sedi_transport
self.do_sedi_w = do_sedi_w
self.de_ice = de_ice
self.icloud_f = icloud_f
self.irain_f = irain_f
self.mp_print = mp_print
Original file line number Diff line number Diff line change
Expand Up @@ -12,12 +12,12 @@
sqrt,
)

import pyMoist.GFDL_1M.GFDL_1M_driver.GFDL_1M_driver_constants as driver_constants
import pyMoist.GFDL_1M.GFDL_1M_driver.constants as constants
from ndsl.dsl.typing import Float, FloatField, FloatFieldIJ
from pyMoist.shared_generic_math import sigma


GlobalTable_driver_qsat = gtscript.GlobalTable[(Float, (driver_constants.LENGTH))]
GlobalTable_driver_qsat = gtscript.GlobalTable[(Float, (constants.LENGTH))]


def init_temporaries(
Expand Down Expand Up @@ -119,8 +119,8 @@ def init_temporaries(
qa0 = qa
qa1 = qa

den = -dp1 / (driver_constants.GRAV * dz) # density of dry air
p_dry = den * driver_constants.RDGAS * t # dry air pressure
den = -dp1 / (constants.GRAV * dz) # density of dry air
p_dry = den * constants.RDGAS * t # dry air pressure

# -----------------------------------------------------------------------
# for sedi_momentum
Expand All @@ -133,7 +133,7 @@ def init_temporaries(

# ccn needs units #/m^3
ccn = qn
c_praut = cpaut * (ccn * driver_constants.RHOR) ** (-1.0 / 3.0)
c_praut = cpaut * (ccn * constants.RHOR) ** (-1.0 / 3.0)

# Reset precipitation aggregates to zero
m2_rain = 0
Expand Down Expand Up @@ -179,11 +179,11 @@ def fix_negative_core(
cvm = (
c_air
+ qv * c_vap
+ (qr + ql) * driver_constants.C_LIQ
+ (qi + qs + qg) * driver_constants.C_ICE
+ (qr + ql) * constants.C_LIQ
+ (qi + qs + qg) * constants.C_ICE
)
lcpk = (lv00 + d0_vap * t) / cvm
icpk = (driver_constants.LI00 + driver_constants.DC_ICE * t) / cvm
icpk = (constants.LI00 + constants.DC_ICE * t) / cvm

# -----------------------------------------------------------------------
# ice phase:
Expand Down Expand Up @@ -293,19 +293,19 @@ def fall_speed_core(
vs_max,
)

rhof = sqrt(min(10.0, driver_constants.SFCRHO / den))
rhof = sqrt(min(10.0, constants.SFCRHO / den))
if const_vi == True: # noqa
vti = vi_fac
else:
if qi < driver_constants.THI:
vti = driver_constants.VF_MIN
if qi < constants.THI:
vti = constants.VF_MIN
else:
# -----------------------------------------------------------------------
# ice:
# -----------------------------------------------------------------------

vi1 = 0.01 * vi_fac
tc = t - driver_constants.TICE # deg C
tc = t - constants.TICE # deg C
IWC = qi * den * 1.0e3 # Units are g/m3
# -----------------------------------------------------------------------
# use deng and mace (2008, grl)
Expand All @@ -314,27 +314,27 @@ def fall_speed_core(
viLSC = lsc_icefall * 10.0 ** (
log10(IWC)
* (
tc * (driver_constants.AAL * tc + driver_constants.BBL)
+ driver_constants.CCL
tc * (constants.AAL * tc + constants.BBL)
+ constants.CCL
)
+ driver_constants.DDL * tc
+ driver_constants.EEL
+ constants.DDL * tc
+ constants.EEL
)
viCNV = anv_icefall * 10.0 ** (
log10(IWC)
* (
tc * (driver_constants.AAC * tc + driver_constants.BBC)
+ driver_constants.CCC
tc * (constants.AAC * tc + constants.BBC)
+ constants.CCC
)
+ driver_constants.DDC * tc
+ driver_constants.EEC
+ constants.DDC * tc
+ constants.EEC
)
# Combine
vti = viLSC * (1.0 - cnv_frc) + viCNV * (cnv_frc)
# Update units from cm/s to m/s
vti = vi1 * vti
# Limits
vti = min(vi_max, max(driver_constants.VF_MIN, vti))
vti = min(vi_max, max(constants.VF_MIN, vti))

# -----------------------------------------------------------------------
# snow:
Expand All @@ -343,16 +343,16 @@ def fall_speed_core(
if const_vs == True: # noqa
vts = vs_fac # 1. ifs_2016
else:
if qs < driver_constants.THS:
vts = driver_constants.VF_MIN
if qs < constants.THS:
vts = constants.VF_MIN
else:
vts = (
vs_fac
* driver_constants.VCONS
* constants.VCONS
* rhof
* exp(0.0625 * log(qs * den / driver_constants.NORMS))
* exp(0.0625 * log(qs * den / constants.NORMS))
)
vts = min(vs_max, max(driver_constants.VF_MIN, vts))
vts = min(vs_max, max(constants.VF_MIN, vts))

# -----------------------------------------------------------------------
# graupel:
Expand All @@ -361,16 +361,16 @@ def fall_speed_core(
if const_vg == True: # noqa
vtg = vg_fac # 2.
else:
if qg < driver_constants.THG:
vtg = driver_constants.VF_MIN
if qg < constants.THG:
vtg = constants.VF_MIN
else:
vtg = (
vg_fac
* driver_constants.VCONG
* constants.VCONG
* rhof
* sqrt(sqrt(sqrt(qg * den / driver_constants.NORMG)))
* sqrt(sqrt(sqrt(qg * den / constants.NORMG)))
)
vtg = min(vg_max, max(driver_constants.VF_MIN, vtg))
vtg = min(vg_max, max(constants.VF_MIN, vtg))

return vti, vts, vtg

Expand Down Expand Up @@ -408,11 +408,11 @@ def fall_speed(
if p_nonhydro:
dz1 = dz
den1 = den # dry air density remains the same
denfac = sqrt(driver_constants.SFCRHO / den1)
denfac = sqrt(constants.SFCRHO / den1)
else:
dz1 = dz * t1 / t # hydrostatic balance
den1 = den * dz / dz1
denfac = sqrt(driver_constants.SFCRHO / den1)
denfac = sqrt(constants.SFCRHO / den1)

vti, vts, vtg = fall_speed_core(
p_dry, cnv_frc, anv_icefall, lsc_icefall, den1, qs1, qi1, qg1, ql1, t1
Expand Down Expand Up @@ -591,22 +591,22 @@ def update_tendencies(
cvm = (
c_air
+ qv1 * c_vap
+ (qr1 + ql1) * driver_constants.C_LIQ
+ (qi1 + qs1 + qg1) * driver_constants.C_ICE
+ (qr1 + ql1) * constants.C_LIQ
+ (qi1 + qs1 + qg1) * constants.C_ICE
)
t_dt = t_dt + rdt * (t1 - t) * cvm / driver_constants.CP_AIR
t_dt = t_dt + rdt * (t1 - t) * cvm / constants.CP_AIR

# -----------------------------------------------------------------------
# update cloud fraction tendency
# -----------------------------------------------------------------------
if do_qa == False: # noqa
qa_dt = qa_dt + rdt * (
qa0 * sqrt((qi1 + ql1) / max(qi0 + ql0, driver_constants.QCMIN)) - qa0
qa0 * sqrt((qi1 + ql1) / max(qi0 + ql0, constants.QCMIN)) - qa0
) # New Cloud - Old CloudCloud

with computation(FORWARD), interval(0, 1):
# convert to mm / day
conversion_factor = 86400.0 * rdt * driver_constants.RGRAV
conversion_factor = 86400.0 * rdt * constants.RGRAV
rain = rain * conversion_factor
snow = snow * conversion_factor
ice = ice * conversion_factor
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,9 +6,8 @@
"""

import numpy as np
from gt4py.cartesian.gtscript import i32

from ndsl.dsl.typing import Float
from ndsl.dsl.typing import Float, Int


# constants from gfdl_1m_driver module
Expand Down Expand Up @@ -230,4 +229,4 @@

# q table constants

LENGTH = i32(2621)
LENGTH = Int(2621)
Loading

0 comments on commit 54c8fd6

Please sign in to comment.