diff --git a/GEOSagcm_GridComp/GEOSphysics_GridComp/GEOSmoist_GridComp/pyMoist/pyMoist/UW/compute_uwshcu.py b/GEOSagcm_GridComp/GEOSphysics_GridComp/GEOSmoist_GridComp/pyMoist/pyMoist/UW/compute_uwshcu.py index 314c09499..486b38642 100644 --- a/GEOSagcm_GridComp/GEOSphysics_GridComp/GEOSmoist_GridComp/pyMoist/pyMoist/UW/compute_uwshcu.py +++ b/GEOSagcm_GridComp/GEOSphysics_GridComp/GEOSmoist_GridComp/pyMoist/pyMoist/UW/compute_uwshcu.py @@ -1,5 +1,3 @@ -import copy - import dace from gt4py.cartesian.gtscript import ( BACKWARD, @@ -20,9 +18,9 @@ ) import pyMoist.constants as constants -from ndsl import QuantityFactory, StencilFactory, orchestrate +from ndsl import NDSLRuntime, QuantityFactory, StencilFactory from ndsl.constants import X_DIM, Y_DIM, Z_DIM, Z_INTERFACE_DIM -from ndsl.dsl.typing import BoolFieldIJ, Float, FloatField, FloatFieldIJ, Int, IntField, IntFieldIJ +from ndsl.dsl.typing import Bool, BoolFieldIJ, Float, FloatField, FloatFieldIJ, Int, IntField, IntFieldIJ from pyMoist.field_types import FloatField_NTracers, FloatFieldIJ_NTracers from pyMoist.saturation_tables import ( GlobalTable_saturation_tables, @@ -31,7 +29,7 @@ saturation_specific_humidity, ) from pyMoist.UW.config import UWConfiguration -from pyMoist.UW.temporaries import Temporaries +from pyMoist.UW.locals import UWLocals from pyMoist.UW.uwshcu_functions import ( compute_alpha, compute_mumin2, @@ -184,6 +182,10 @@ def compute_uwshcu_invert_before( if isnan(cnvtrmax): cnvtrmax = 0.0 + with computation(FORWARD), interval(...): + temp = tke_in[0, 0, 1] + tke_in = temp + def compute_thermodynamic_variables( pmid0_in: FloatField, @@ -334,7 +336,7 @@ def compute_thermodynamic_variables( with computation(FORWARD), interval(...): # Initialize output variables defined for all grid points - umf_out[0, 0, 1] = 0.0 + # umf_out[0, 0, 1] = 0.0 dcm_out = 0.0 cufrc_out = 0.0 fer_out = constants.MAPL_UNDEF @@ -345,10 +347,10 @@ def compute_thermodynamic_variables( qisub_out = 0.0 ndrop_out = 0.0 nice_out = 0.0 - qtflx_out[0, 0, 1] = 0.0 - slflx_out[0, 0, 1] = 0.0 - uflx_out[0, 0, 1] = 0.0 - vflx_out[0, 0, 1] = 0.0 + # qtflx_out[0, 0, 1] = 0.0 + # slflx_out[0, 0, 1] = 0.0 + # uflx_out[0, 0, 1] = 0.0 + # vflx_out[0, 0, 1] = 0.0 tpert_out = 0.0 qpert_out = 0.0 @@ -395,7 +397,7 @@ def compute_thermodynamic_variables( sstr0[0, 0, 0][n] = slope_bot(tr0_temp, pmid0) n += 1 - with computation(PARALLEL), interval(1, -1): + with computation(FORWARD), interval(1, -1): # Compute slopes of environmental variables at mid layers ssthl0 = slope_mid(k_end, thl0, pmid0) ssqt0 = slope_mid(k_end, qt0, pmid0) @@ -1022,50 +1024,50 @@ def find_pbl_height( if not condensation: if kinv <= int64(1): condensation = True - umf_out[0, 0, 1] = 0.0 - dcm_out = 0.0 - qvten_out = 0.0 - qlten_out = 0.0 - qiten_out = 0.0 - sten_out = 0.0 - uten_out = 0.0 - vten_out = 0.0 - qrten_out = 0.0 - qsten_out = 0.0 - cufrc_out = 0.0 - cush_inout = -1.0 - qldet_out = 0.0 - qidet_out = 0.0 - qtflx_out[0, 0, 1] = 0.0 - slflx_out[0, 0, 1] = 0.0 - uflx_out[0, 0, 1] = 0.0 - # vflx_out[0, 0, 1] = 0.0 - fer_out = constants.MAPL_UNDEF - fdr_out = constants.MAPL_UNDEF + # umf_out[0, 0, 1] = 0.0 + # dcm_out = 0.0 + # qvten_out = 0.0 + # qlten_out = 0.0 + # qiten_out = 0.0 + # sten_out = 0.0 + # uten_out = 0.0 + # vten_out = 0.0 + # qrten_out = 0.0 + # qsten_out = 0.0 + # cufrc_out = 0.0 + # cush_inout = -1.0 + # qldet_out = 0.0 + # qidet_out = 0.0 + # qtflx_out[0, 0, 1] = 0.0 + # slflx_out[0, 0, 1] = 0.0 + # uflx_out[0, 0, 1] = 0.0 + # # vflx_out[0, 0, 1] = 0.0 + # fer_out = constants.MAPL_UNDEF + # fdr_out = constants.MAPL_UNDEF if not condensation: if kinv >= int64(k0 / 4): condensation = True - umf_out[0, 0, 1] = 0.0 - dcm_out = 0.0 - qvten_out = 0.0 - qlten_out = 0.0 - qiten_out = 0.0 - sten_out = 0.0 - uten_out = 0.0 - vten_out = 0.0 - qrten_out = 0.0 - qsten_out = 0.0 - cufrc_out = 0.0 - cush_inout = -1.0 - qldet_out = 0.0 - qidet_out = 0.0 - qtflx_out[0, 0, 1] = 0.0 - slflx_out[0, 0, 1] = 0.0 - uflx_out[0, 0, 1] = 0.0 - # vflx_out[0, 0, 1] = 0.0 - fer_out = constants.MAPL_UNDEF - fdr_out = constants.MAPL_UNDEF + # umf_out[0, 0, 1] = 0.0 + # dcm_out = 0.0 + # qvten_out = 0.0 + # qlten_out = 0.0 + # qiten_out = 0.0 + # sten_out = 0.0 + # uten_out = 0.0 + # vten_out = 0.0 + # qrten_out = 0.0 + # qsten_out = 0.0 + # cufrc_out = 0.0 + # cush_inout = -1.0 + # qldet_out = 0.0 + # qidet_out = 0.0 + # qtflx_out[0, 0, 1] = 0.0 + # slflx_out[0, 0, 1] = 0.0 + # uflx_out[0, 0, 1] = 0.0 + # # vflx_out[0, 0, 1] = 0.0 + # fer_out = constants.MAPL_UNDEF + # fdr_out = constants.MAPL_UNDEF def find_pbl_averages( @@ -1141,6 +1143,10 @@ def find_pbl_averages( thvlmin[0, 0, -1], min(thvl0bot, thvl0top), ) + with computation(FORWARD), interval(...): + if not condensation: + temp = thvlmin.at(K=kinv - 2) + thvlmin = temp with computation(FORWARD), interval(...): if not condensation: @@ -1155,7 +1161,7 @@ def find_pbl_averages( kabove = lev + 1 dpi = pifc0.at(K=lev) - pifc0.at(K=kabove) dpsum = dpsum + dpi - tkeavg = tkeavg + dpi * tke_in.at(K=kabove) + tkeavg = tkeavg + dpi * tke_in.at(K=lev) uavg = uavg + dpi * u0.at(K=lev) vavg = vavg + dpi * v0.at(K=lev) thvlavg = thvlavg + dpi * thvl0.at(K=lev) @@ -1905,8 +1911,6 @@ def compute_cin_cinlcl( def compute_del_CIN( condensation: BoolFieldIJ, - thvlmin_o: FloatField, - thvlmin_IJ: FloatFieldIJ, cin_IJ: FloatFieldIJ, cinlcl_IJ: FloatFieldIJ, cin_i: FloatFieldIJ, @@ -1914,10 +1918,6 @@ def compute_del_CIN( use_CINcin: int32, del_CIN: FloatFieldIJ, ): - with computation(FORWARD), interval(1, None): - if not condensation: - if thvlmin_o == 0.0 and thvlmin_o[0, 0, -1] != 0.0: - thvlmin_IJ = thvlmin_o[0, 0, -1] with computation(FORWARD), interval(...): if not condensation: @@ -1953,7 +1953,7 @@ def avg_initial_and_final_cin1( tkeavg: FloatField, tkeavg_o: FloatField, thvlmin: FloatField, - thvlmin_IJ: FloatFieldIJ, + thvlmin_o: FloatField, qtsrc: FloatField, qtsrc_o: FloatField, thvlsrc: FloatField, @@ -2056,7 +2056,7 @@ def avg_initial_and_final_cin1( plcl = plcl_o plfc = plfc_o tkeavg = tkeavg_o - thvlmin = thvlmin_IJ + thvlmin = thvlmin_o qtsrc = qtsrc_o thvlsrc = thvlsrc_o thlsrc = thlsrc_o @@ -2176,8 +2176,6 @@ def avg_initial_and_final_cin2( fdr = 0.0 xco = 0.0 qc = 0.0 - # qldet = 0.0 - # qidet = 0.0 qlten_sub = 0.0 qiten_sub = 0.0 qc_l = 0.0 @@ -2262,14 +2260,11 @@ def avg_initial_and_final_cin3( with computation(FORWARD), interval(...): if not condensation: if del_CIN <= 0.0: # When 'del_CIN < 0', use explicit CIN instead of implicit CIN. - # Identifier showing whether explicit or implicit CIN is used - ind_delcin = 1.0 # Restore original output values of "iter_cin = 1" and exit - umf_out[0, 0, 1] = umf_s[0, 0, 1] - if K >= 0 and K <= (kinv - 1): - umf_out = umf_s.at(K=kinv - 1) * zifc0 / zifc0.at(K=kinv - 1) + if K <= (kinv - 1): + umf_out[0, 0, 1] = umf_s.at(K=kinv) * zifc0[0, 0, 1] / zifc0.at(K=kinv) dcm_out = dcm_s qvten_out = qvten_s @@ -2291,10 +2286,6 @@ def avg_initial_and_final_cin3( uflx_out[0, 0, 1] = uflx_s[0, 0, 1] vflx_out[0, 0, 1] = vflx_s[0, 0, 1] - # Below are diagnostic output variables for detailed analysis of cumulus - # scheme. - # The order of vertical index is reversed for this internal diagnostic - # output. fer_out = fer_s fdr_out = fdr_s @@ -2697,32 +2688,42 @@ def define_updraft_properties( ufrclcl = cbmf / wlcl / rho0inv wrel = wlcl - if ufrclcl <= 0.0001: - condensation = True - umf_out[0, 0, 1] = 0.0 - dcm_out = 0.0 - qvten_out = 0.0 - qlten_out = 0.0 - qiten_out = 0.0 - sten_out = 0.0 - uten_out = 0.0 - vten_out = 0.0 - qrten_out = 0.0 - qsten_out = 0.0 - cufrc_out = 0.0 - cush_inout = -1.0 - qldet_out = 0.0 - qidet_out = 0.0 - qtflx_out[0, 0, 1] = 0.0 - slflx_out[0, 0, 1] = 0.0 - uflx_out[0, 0, 1] = 0.0 - # vflx_out[0, 0, 1] = 0.0 - fer_out = constants.MAPL_UNDEF - fdr_out = constants.MAPL_UNDEF + with computation(FORWARD), interval(0, 1): + if not condensation: + temp: FloatFieldIJ = ufrclcl.at(K=0) - if not condensation: - if K == (krel - 1): - ufrc[0, 0, 1] = ufrclcl + with computation(PARALLEL), interval(...): + if not condensation: + ufrclcl = temp + + with computation(FORWARD), interval(...): + if not condensation: + if ufrclcl <= 0.0001: + condensation = True + umf_out[0, 0, 1] = 0.0 + dcm_out = 0.0 + qvten_out = 0.0 + qlten_out = 0.0 + qiten_out = 0.0 + sten_out = 0.0 + uten_out = 0.0 + vten_out = 0.0 + qrten_out = 0.0 + qsten_out = 0.0 + cufrc_out = 0.0 + cush_inout = -1.0 + qldet_out = 0.0 + qidet_out = 0.0 + qtflx_out[0, 0, 1] = 0.0 + slflx_out[0, 0, 1] = 0.0 + uflx_out[0, 0, 1] = 0.0 + # vflx_out[0, 0, 1] = 0.0 + fer_out = constants.MAPL_UNDEF + fdr_out = constants.MAPL_UNDEF + + if not condensation: + if K == (krel - 1): + ufrc[0, 0, 1] = ufrclcl with computation(FORWARD), interval(...): if not condensation: @@ -2744,15 +2745,15 @@ def define_updraft_properties( # vertically redistributes environmental horizontal momentum. if K >= (kinv - 2) and K <= (krel - 1): - umf_zint = cbmf - wu = winv + umf_zint[0, 0, 1] = cbmf + wu[0, 0, 1] = winv if K == (krel - 1): - emf = 0.0 - umf_zint = cbmf - wu = wrel - thlu = thlsrc - qtu = qtsrc + emf[0, 0, 1] = 0.0 + umf_zint[0, 0, 1] = cbmf + wu[0, 0, 1] = wrel + thlu[0, 0, 1] = thlsrc + qtu[0, 0, 1] = qtsrc thj, qvj, qlj, qij, qse, id_check = conden(prel, thlsrc, qtsrc, ese, esx) @@ -2781,7 +2782,7 @@ def define_updraft_properties( if not condensation: if K == (krel - 1): - thvu = thj * (1.0 + zvir * qvj - qlj - qij) + thvu[0, 0, 1] = thj * (1.0 + zvir * qvj - qlj - qij) def define_env_properties( @@ -2903,14 +2904,14 @@ def define_env_properties( with computation(FORWARD), interval(...): if not condensation: if K == (krel - 1): - uu = usrc + uplus - vu = vsrc + vplus + uu[0, 0, 1] = usrc + uplus + vu[0, 0, 1] = vsrc + vplus if dotransport == 1: n = 0 while n < ncnst: if K == krel - 1: - tru[0, 0, 0][n] = trsrc[0, 0][n] + tru[0, 0, 1][n] = trsrc[0, 0][n] n += 1 pe = 0.5 * (prel + pifc0.at(K=krel + 1)) @@ -3104,7 +3105,7 @@ def buoyancy_sorting( # do loop. Similarily, I need initializations of environmental # properties at 'krel' layer as below. - wtw = wlcl * wlcl + wtw: FloatFieldIJ = wlcl * wlcl pe = 0.5 * (prel + pifc0.at(K=krel + 1)) dpe = prel - pifc0.at(K=krel + 1) exne = exnerfn(pe) @@ -3143,16 +3144,16 @@ def buoyancy_sorting( stop_buoyancy_sort = False # Indicates that buoyancy sorting processes are done # (e.g., Fortran go to 45) - with computation(FORWARD), interval(1, -2): + with computation(FORWARD), interval(1, -1): if K >= krel and K < k0 - 1 and not stop_buoyancy_sort and not condensation: - thlue = thlu[0, 0, -1] - qtue = qtu[0, 0, -1] - wue = wu[0, 0, -1] + thlue = thlu + qtue = qtu + wue = wu wtwb = wtw iter_xc = 1 while iter_xc <= niter_xc and not condensation: - wtw = wu[0, 0, -1] * wu[0, 0, -1] + wtw = wu * wu # Calculate environmental and cumulus saturation 'excess' at 'pe'. # Note that in order to calculate saturation excess, we should use @@ -3291,7 +3292,6 @@ def buoyancy_sorting( else: cridis = rle * (zifc0[0, 0, 1] - zifc0) - # New code # Buoyancy Sorting @@ -3319,6 +3319,7 @@ def buoyancy_sorting( cquad = 0.0 if excessu > 0.0: xsat = 1.0 + else: xsat = 0.0 @@ -3366,9 +3367,9 @@ def buoyancy_sorting( thv_x1 = (1.0 - 1.0 / xsat) * thvj + (1.0 / xsat) * thvxsat else: thv_x1 = thv0j - thv_x0 = ((xsat / (xsat - 1.0)) * thv0j) + ( - (1.0 / (1.0 - xsat)) * thvxsat - ) + thv_x0 = (xsat / (xsat - 1.0)) * thv0j + ( + 1.0 / (1.0 - xsat) + ) * thvxsat aquad = wue ** 2 bquad = ( @@ -3389,6 +3390,7 @@ def buoyancy_sorting( / thv0j + wue ** 2 ) + if kk == 1: if (bquad ** 2 - 4.0 * aquad * cquad) >= 0.0: xs1, xs2, status = roots(aquad, bquad, cquad) @@ -3399,6 +3401,7 @@ def buoyancy_sorting( min(xsat, min(xs1, xs2)), ), ) + else: x_cu = xsat @@ -3412,6 +3415,7 @@ def buoyancy_sorting( max(xsat, min(xs1, xs2)), ), ) + else: x_en = 1.0 @@ -3461,7 +3465,7 @@ def buoyancy_sorting( rei = min( rei, 0.9 - * log(dp0 / constants.MAPL_GRAV / dt / umf_zint[0, 0, -1] + 1.0) + * log(dp0 / constants.MAPL_GRAV / dt / umf_zint + 1.0) / dpe / (2.0 * xc - 1.0), ) @@ -3478,13 +3482,13 @@ def buoyancy_sorting( # layer to the base interface of 'kpen' layer as will # be shown later. - umf_zint = umf_zint[0, 0, -1] * exp(dpe * (fer - fdr)) + umf_zint[0, 0, 1] = umf_zint * exp(dpe * (fer - fdr)) - emf = 0.0 + emf[0, 0, 1] = 0.0 dcm = ( 0.5 - * (umf_zint + umf_zint[0, 0, -1]) + * (umf_zint[0, 0, 1] + umf_zint) * rei * dpe * min(1.0, max(0.0, xsat - xc)) @@ -3495,33 +3499,24 @@ def buoyancy_sorting( # treat limiting case if fer * dpe < 1.0e-4: - thlu = ( - thlu[0, 0, -1] - + (thle + ssthl0 * dpe / 2.0 - thlu[0, 0, -1]) * fer * dpe + thlu[0, 0, 1] = thlu + (thle + ssthl0 * dpe / 2.0 - thlu) * fer * dpe + qtu[0, 0, 1] = qtu + (qte + ssqt0 * dpe / 2.0 - qtu) * fer * dpe + uu[0, 0, 1] = ( + uu + (ue + ssu0 * dpe / 2.0 - uu) * fer * dpe - PGFc * ssu0 * dpe ) - qtu = ( - qtu[0, 0, -1] + (qte + ssqt0 * dpe / 2.0 - qtu[0, 0, -1]) * fer * dpe - ) - uu = ( - uu[0, 0, -1] - + (ue + ssu0 * dpe / 2.0 - uu[0, 0, -1]) * fer * dpe - - PGFc * ssu0 * dpe - ) - vu = ( - vu[0, 0, -1] - + (ve + ssv0 * dpe / 2.0 - vu[0, 0, -1]) * fer * dpe - - PGFc * ssv0 * dpe + vu[0, 0, 1] = ( + vu + (ve + ssv0 * dpe / 2.0 - vu) * fer * dpe - PGFc * ssv0 * dpe ) if dotransport == 1: n = 0 while n < ncnst: - tru[0, 0, 0][n] = ( - tru[0, 0, -1][n] + tru[0, 0, 1][n] = ( + tru[0, 0, 0][n] + ( tre[0, 0][n] - + sstr0[0, 0, -1][n] * dpe / 2.0 - - tru[0, 0, -1][n] + + sstr0[0, 0, 0][n] * dpe / 2.0 + - tru[0, 0, 0][n] ) * fer * dpe @@ -3529,32 +3524,32 @@ def buoyancy_sorting( n += 1 else: - thlu = (thle + ssthl0 / fer - ssthl0 * dpe / 2.0) - ( - thle + ssthl0 * dpe / 2.0 - thlu[0, 0, -1] + ssthl0 / fer + thlu[0, 0, 1] = (thle + ssthl0 / fer - ssthl0 * dpe / 2.0) - ( + thle + ssthl0 * dpe / 2.0 - thlu + ssthl0 / fer ) * exp(-fer * dpe) - qtu = (qte + ssqt0 / fer - ssqt0 * dpe / 2.0) - ( - qte + ssqt0 * dpe / 2.0 - qtu[0, 0, -1] + ssqt0 / fer + qtu[0, 0, 1] = (qte + ssqt0 / fer - ssqt0 * dpe / 2.0) - ( + qte + ssqt0 * dpe / 2.0 - qtu + ssqt0 / fer ) * exp(-fer * dpe) - uu = (ue + (1.0 - PGFc) * ssu0 / fer - ssu0 * dpe / 2.0) - ( - ue + ssu0 * dpe / 2.0 - uu[0, 0, -1] + (1.0 - PGFc) * ssu0 / fer + uu[0, 0, 1] = (ue + (1.0 - PGFc) * ssu0 / fer - ssu0 * dpe / 2.0) - ( + ue + ssu0 * dpe / 2.0 - uu + (1.0 - PGFc) * ssu0 / fer ) * exp(-fer * dpe) - vu = (ve + (1.0 - PGFc) * ssv0 / fer - ssv0 * dpe / 2.0) - ( - ve + ssv0 * dpe / 2.0 - vu[0, 0, -1] + (1.0 - PGFc) * ssv0 / fer + vu[0, 0, 1] = (ve + (1.0 - PGFc) * ssv0 / fer - ssv0 * dpe / 2.0) - ( + ve + ssv0 * dpe / 2.0 - vu + (1.0 - PGFc) * ssv0 / fer ) * exp(-fer * dpe) if dotransport == 1: n = 0 while n < ncnst: - tru[0, 0, 0][n] = ( + tru[0, 0, 1][n] = ( tre[0, 0][n] + sstr0[0, 0, 0][n] / fer - sstr0[0, 0, 0][n] * dpe / 2.0 ) - ( tre[0, 0][n] + sstr0[0, 0, 0][n] * dpe / 2.0 - - tru[0, 0, -1][n] + - tru[0, 0, 0][n] + sstr0[0, 0, 0][n] / fer ) * exp( -fer * dpe @@ -3592,8 +3587,8 @@ def buoyancy_sorting( thj, qvj, qlj, qij, qse, id_check = conden( pifc0[0, 0, 1], - thlu, - qtu, + thlu[0, 0, 1], + qtu[0, 0, 1], ese, esx, ) @@ -3635,9 +3630,9 @@ def buoyancy_sorting( # of environmentasl qt), not a regular # convective'detrainment'. - qtu = qtu - exql - exqi - thlu = ( - thlu + qtu[0, 0, 1] = qtu[0, 0, 1] - exql - exqi + thlu[0, 0, 1] = ( + thlu[0, 0, 1] + ( constants.MAPL_LATENT_HEAT_VAPORIZATION / exnifc0[0, 0, 1] @@ -3675,8 +3670,8 @@ def buoyancy_sorting( # from cumulus updraft. thj, qvj, qlj, qij, qse, id_check = conden( pifc0[0, 0, 1], - thlu, - qtu, + thlu[0, 0, 1], + qtu[0, 0, 1], ese, esx, ) @@ -3705,7 +3700,7 @@ def buoyancy_sorting( fdr_out = constants.MAPL_UNDEF if not condensation: - thvu = thj * (1.0 + zvir * qvj - qlj - qij) + thvu[0, 0, 1] = thj * (1.0 + zvir * qvj - qlj - qij) # Calculate updraft vertical velocity at the # upper interface. In order to calculate @@ -3715,10 +3710,10 @@ def buoyancy_sorting( # rises. bogbot = rbuoy * ( - thvu[0, 0, -1] / thvebot - 1.0 + thvu / thvebot - 1.0 ) # Cloud buoyancy at base interface bogtop = rbuoy * ( - thvu / thv0top - 1.0 + thvu[0, 0, 1] / thv0top - 1.0 ) # Cloud buoyancy at top interface delbog = bogtop - bogbot @@ -3745,8 +3740,8 @@ def buoyancy_sorting( # even when wtw < 0 at the 'kpen' interface. if wtw > 0.0: - thlue = 0.5 * (thlu[0, 0, -1] + thlu) - qtue = 0.5 * (qtu[0, 0, -1] + qtu) + thlue = 0.5 * (thlu + thlu[0, 0, 1]) + qtue = 0.5 * (qtu + qtu[0, 0, 1]) wue = 0.5 * sqrt(max(wtwb + wtw, 0.0)) else: @@ -3779,10 +3774,11 @@ def buoyancy_sorting( 0.5 * constants.MAPL_GRAV * (bogbot + bogtop) / (max(wtw, 0.0) + 1.0e-4), 0.0, ) + umf_zint[0, 0, 1] = umf_zint[0, 0, 1] * exp( + 0.637 * (dpe / rhomid0j / constants.MAPL_GRAV) * autodet + ) - umf_zint = umf_zint * exp(0.637 * (dpe / rhomid0j / constants.MAPL_GRAV) * autodet) - - if umf_zint == 0.0: + if umf_zint[0, 0, 1] == 0.0: wtw = -1.0 # 'kbup' is the upper most layer in which cloud buoyancy is positive @@ -3803,9 +3799,9 @@ def buoyancy_sorting( stop_buoyancy_sort = True # Done calculating updraft properties, break out of loop if not stop_buoyancy_sort: - wu = sqrt(wtw) + wu[0, 0, 1] = sqrt(wtw) - if wu > 100.0: + if wu[0, 0, 1] > 100.0: condensation = True umf_out[0, 0, 1] = 0.0 dcm_out = 0.0 @@ -3852,12 +3848,12 @@ def buoyancy_sorting( constants.MAPL_RDRY * 0.5 * (thv0bot[0, 0, 1] + thv0top) * exnifc0[0, 0, 1] ) - ufrc[0, 0, 1] = umf_zint / (rhoifc0j * wu) + ufrc[0, 0, 1] = umf_zint[0, 0, 1] / (rhoifc0j * wu[0, 0, 1]) if ufrc[0, 0, 1] > rmaxfrac: ufrc[0, 0, 1] = rmaxfrac - umf_zint = rmaxfrac * rhoifc0j * wu - fdr = fer - log(umf_zint / umf_zint[0, 0, -1]) / dpe + umf_zint[0, 0, 1] = rmaxfrac * rhoifc0j * wu[0, 0, 1] + fdr = fer - log(umf_zint[0, 0, 1] / umf_zint) / dpe # Update environmental properties for at the mid-point of next # upper layer for use in buoyancy sorting. @@ -3955,7 +3951,7 @@ def calc_ppen( if drage == 0.0: aquad = (bogtop - bogbot) / (pifc0.at(K=kpen + 1) - pifc0.at(K=kpen)) bquad = 2.0 * bogbot - cquad = -1 * wu.at(K=kpen - 1) ** 2 * rhomid0j + cquad = -1 * wu.at(K=kpen) ** 2 * rhomid0j xc1, xc2, status = roots(aquad, bquad, cquad) if status == 0: if xc1 <= 0.0 and xc2 <= 0.0: @@ -4079,11 +4075,11 @@ def recalc_condensate( with computation(FORWARD), interval(...): if not condensation: if fer.at(K=kpen) * (-ppen) < 1.0e-4: - thlu_top = thlu.at(K=kpen - 1) + ( - thl0.at(K=kpen) + ssthl0.at(K=kpen) * (-ppen) / 2.0 - thlu.at(K=kpen - 1) + thlu_top = thlu.at(K=kpen) + ( + thl0.at(K=kpen) + ssthl0.at(K=kpen) * (-ppen) / 2.0 - thlu.at(K=kpen) ) * fer.at(K=kpen) * (-ppen) - qtu_top = qtu.at(K=kpen - 1) + ( - qt0.at(K=kpen) + ssqt0.at(K=kpen) * (-ppen) / 2.0 - qtu.at(K=kpen - 1) + qtu_top = qtu.at(K=kpen) + ( + qt0.at(K=kpen) + ssqt0.at(K=kpen) * (-ppen) / 2.0 - qtu.at(K=kpen) ) * fer.at(K=kpen) * (-ppen) else: thlu_top = ( @@ -4091,7 +4087,7 @@ def recalc_condensate( ) - ( thl0.at(K=kpen) + ssthl0.at(K=kpen) * (-ppen) / 2.0 - - thlu.at(K=kpen - 1) + - thlu.at(K=kpen) + ssthl0.at(K=kpen) / fer.at(K=kpen) ) * exp( -fer.at(K=kpen) * (-ppen) @@ -4101,7 +4097,7 @@ def recalc_condensate( ) - ( qt0.at(K=kpen) + ssqt0.at(K=kpen) * (-ppen) / 2.0 - - qtu.at(K=kpen - 1) + - qtu.at(K=kpen) + ssqt0.at(K=kpen) / fer.at(K=kpen) ) * exp( -fer.at(K=kpen) * (-ppen) @@ -4153,6 +4149,7 @@ def recalc_condensate( * diten.at(K=kpen) ) ) + else: if K == kpen: dwten = 0.0 @@ -4232,11 +4229,11 @@ def recalc_condensate( # umf(kpen)=emf(kpen)=ufrc(kpen)=0, in consistent with wtw < 0 # at the top interface of 'kpen' layer. However, we still have # non-zero expelled cloud condensate in the 'kpen' layer. - if K >= kpen - 1 and K <= k0: - umf_zint[0, 0, 1] = 0.0 - emf[0, 0, 1] = 0.0 + if K >= kpen and K <= k0: ufrc[0, 0, 1] = 0.0 + umf_zint[0, 0, 1] = 0.0 + emf[0, 0, 1] = 0.0 if K >= kpen + 1 and K < k0: dwten = 0.0 diten = 0.0 @@ -4244,11 +4241,6 @@ def recalc_condensate( fdr = 0.0 xco = 0.0 - # Update output variables as needed - dwten_temp = dwten - diten_temp = diten - umf_temp[0, 0, 1] = umf_zint - def calc_entrainment_mass_flux( condensation: BoolFieldIJ, @@ -4372,17 +4364,29 @@ def calc_entrainment_mass_flux( with computation(FORWARD), interval(...): if not condensation: - thlu_emf[0, 0, 1] = thlu - qtu_emf[0, 0, 1] = qtu - uu_emf[0, 0, 1] = uu - vu_emf[0, 0, 1] = vu + thlu_emf = thlu + qtu_emf = qtu + uu_emf = uu + vu_emf = vu if dotransport == 1: n = 0 while n < ncnst: - tru_emf[0, 0, 1][n] = tru[0, 0, 0][n] + tru_emf[0, 0, 0][n] = tru[0, 0, 0][n] n += 1 - with computation(BACKWARD), interval(...): + with computation(FORWARD), interval(...): + if not condensation: + thlu_emf[0, 0, 1] = thlu[0, 0, 1] + qtu_emf[0, 0, 1] = qtu[0, 0, 1] + uu_emf[0, 0, 1] = uu[0, 0, 1] + vu_emf[0, 0, 1] = vu[0, 0, 1] + if dotransport == 1: + n = 0 + while n < ncnst: + tru_emf[0, 0, 1][n] = tru[0, 0, 1][n] + n += 1 + + with computation(BACKWARD), interval(0, -2): if not condensation: if K <= kpen - 1 and K >= kbup: # Here, 'k' is an interface index at which rhoifc0j = pifc0[0, 0, 1] / ( @@ -4413,22 +4417,24 @@ def calc_entrainment_mass_flux( # at the interface by the amount of masses within the layer just # above the penetratively entraining interface. - emf = max( + emf[0, 0, 1] = max( max( - umf_zint * ppen * rei.at(K=kpen) * rpen, + umf_zint[0, 0, 1] * ppen * rei.at(K=kpen) * rpen, -0.1 * rhoifc0j, ), -0.9 * dp0.at(K=kpen) / constants.MAPL_GRAV / dt, ) - thlu_emf = thl0.at(K=kpen) + ssthl0.at(K=kpen) * (pifc0[0, 0, 1] - pmid0.at(K=kpen)) - qtu_emf = qt0.at(K=kpen) + ssqt0.at(K=kpen) * (pifc0[0, 0, 1] - pmid0.at(K=kpen)) - uu_emf = u0.at(K=kpen) + ssu0.at(K=kpen) * (pifc0[0, 0, 1] - pmid0.at(K=kpen)) - vu_emf = v0.at(K=kpen) + ssv0.at(K=kpen) * (pifc0[0, 0, 1] - pmid0.at(K=kpen)) + thlu_emf[0, 0, 1] = thl0.at(K=kpen) + ssthl0.at(K=kpen) * ( + pifc0[0, 0, 1] - pmid0.at(K=kpen) + ) + qtu_emf[0, 0, 1] = qt0.at(K=kpen) + ssqt0.at(K=kpen) * (pifc0[0, 0, 1] - pmid0.at(K=kpen)) + uu_emf[0, 0, 1] = u0.at(K=kpen) + ssu0.at(K=kpen) * (pifc0[0, 0, 1] - pmid0.at(K=kpen)) + vu_emf[0, 0, 1] = v0.at(K=kpen) + ssv0.at(K=kpen) * (pifc0[0, 0, 1] - pmid0.at(K=kpen)) if dotransport == 1: n = 0 while n < ncnst: - tru_emf[0, 0, 0][n] = tr0.at(K=kpen, ddim=[n]) + sstr0.at(K=kpen, ddim=[n]) * ( + tru_emf[0, 0, 1][n] = tr0.at(K=kpen, ddim=[n]) + sstr0.at(K=kpen, ddim=[n]) * ( pifc0[0, 0, 1] - pmid0.at(K=kpen) ) n += 1 @@ -4441,62 +4447,63 @@ def calc_entrainment_mass_flux( # emf(k). if use_cumpenent == 1: # Original Cumulative Penetrative Entrainment - emf = max( + emf[0, 0, 1] = max( max( - emf[0, 0, 1] - umf_zint * dp0[0, 0, 1] * rei[0, 0, 1] * rpen, + emf[0, 0, 2] - umf_zint[0, 0, 1] * dp0[0, 0, 1] * rei[0, 0, 1] * rpen, -0.1 * rhoifc0j, ), -0.9 * dp0[0, 0, 1] / constants.MAPL_GRAV / dt, ) - if abs(emf) > abs(emf[0, 0, 1]): - thlu_emf = ( - thlu_emf[0, 0, 1] * emf[0, 0, 1] + thl0[0, 0, 1] * (emf - emf[0, 0, 1]) - ) / emf - qtu_emf = ( - qtu_emf[0, 0, 1] * emf[0, 0, 1] + qt0[0, 0, 1] * (emf - emf[0, 0, 1]) - ) / emf - uu_emf = ( - uu_emf[0, 0, 1] * emf[0, 0, 1] + u0[0, 0, 1] * (emf - emf[0, 0, 1]) - ) / emf - vu_emf = ( - vu_emf[0, 0, 1] * emf[0, 0, 1] + v0[0, 0, 1] * (emf - emf[0, 0, 1]) - ) / emf + if abs(emf[0, 0, 1]) > abs(emf[0, 0, 2]): + thlu_emf[0, 0, 1] = ( + thlu_emf[0, 0, 2] * emf[0, 0, 2] + + thl0[0, 0, 1] * (emf[0, 0, 1] - emf[0, 0, 2]) + ) / emf[0, 0, 1] + qtu_emf[0, 0, 1] = ( + qtu_emf[0, 0, 2] * emf[0, 0, 2] + qt0[0, 0, 1] * (emf[0, 0, 1] - emf[0, 0, 2]) + ) / emf[0, 0, 1] + uu_emf[0, 0, 1] = ( + uu_emf[0, 0, 2] * emf[0, 0, 2] + u0[0, 0, 1] * (emf[0, 0, 1] - emf[0, 0, 2]) + ) / emf[0, 0, 1] + vu_emf[0, 0, 1] = ( + vu_emf[0, 0, 2] * emf[0, 0, 2] + v0[0, 0, 1] * (emf[0, 0, 1] - emf[0, 0, 2]) + ) / emf[0, 0, 1] if dotransport == 1: n = 0 while n < ncnst: - tru_emf[0, 0, 0][n] = ( - tru_emf[0, 0, 1][n] * emf[0, 0, 1] - + tr0[0, 0, 1][n] * (emf - emf[0, 0, 1]) - ) / emf + tru_emf[0, 0, 1][n] = ( + tru_emf[0, 0, 2][n] * emf[0, 0, 2] + + tr0[0, 0, 1][n] * (emf[0, 0, 1] - emf[0, 0, 2]) + ) / emf[0, 0, 1] n += 1 else: - thlu_emf = thl0[0, 0, 1] - qtu_emf = qt0[0, 0, 1] - uu_emf = u0[0, 0, 1] - vu_emf = v0[0, 0, 1] + thlu_emf[0, 0, 1] = thl0[0, 0, 1] + qtu_emf[0, 0, 1] = qt0[0, 0, 1] + uu_emf[0, 0, 1] = u0[0, 0, 1] + vu_emf[0, 0, 1] = v0[0, 0, 1] if dotransport == 1: n = 0 while n < ncnst: - tru_emf[0, 0, 0][n] = tr0[0, 0, 1][n] + tru_emf[0, 0, 1][n] = tr0[0, 0, 1][n] n += 1 else: # Alternative Non-Cumulative Penetrative Entrainment - emf = max( + emf[0, 0, 1] = max( max( - -umf_zint * dp0[0, 0, 1] * rei[0, 0, 1] * rpen, + -umf_zint[0, 0, 1] * dp0[0, 0, 1] * rei[0, 0, 1] * rpen, -0.1 * rhoifc0j, ), -0.9 * dp0[0, 0, 1] / constants.MAPL_GRAV / dt, ) - thlu_emf = thl0[0, 0, 1] - qtu_emf = qt0[0, 0, 1] - uu_emf = u0[0, 0, 1] - vu_emf = v0[0, 0, 1] + thlu_emf[0, 0, 1] = thl0[0, 0, 1] + qtu_emf[0, 0, 1] = qt0[0, 0, 1] + uu_emf[0, 0, 1] = u0[0, 0, 1] + vu_emf[0, 0, 1] = v0[0, 0, 1] if dotransport == 1: n = 0 while n < ncnst: - tru_emf[0, 0, 0][n] = tr0[0, 0, 1][n] + tru_emf[0, 0, 1][n] = tr0[0, 0, 1][n] n += 1 @@ -5044,24 +5051,24 @@ def buoyancy_sorting_fluxes( slflx[0, 0, 1] = ( constants.MAPL_CP * exnifc0[0, 0, 1] - * umf_zint - * (thlu - (thl0[0, 0, 1] + ssthl0[0, 0, 1] * (pifc0[0, 0, 1] - pmid0[0, 0, 1]))) + * umf_zint[0, 0, 1] + * (thlu[0, 0, 1] - (thl0[0, 0, 1] + ssthl0[0, 0, 1] * (pifc0[0, 0, 1] - pmid0[0, 0, 1]))) ) - qtflx[0, 0, 1] = umf_zint * ( - qtu - (qt0[0, 0, 1] + ssqt0[0, 0, 1] * (pifc0[0, 0, 1] - pmid0[0, 0, 1])) + qtflx[0, 0, 1] = umf_zint[0, 0, 1] * ( + qtu[0, 0, 1] - (qt0[0, 0, 1] + ssqt0[0, 0, 1] * (pifc0[0, 0, 1] - pmid0[0, 0, 1])) ) - uflx[0, 0, 1] = umf_zint * ( - uu - (u0[0, 0, 1] + ssu0[0, 0, 1] * (pifc0[0, 0, 1] - pmid0[0, 0, 1])) + uflx[0, 0, 1] = umf_zint[0, 0, 1] * ( + uu[0, 0, 1] - (u0[0, 0, 1] + ssu0[0, 0, 1] * (pifc0[0, 0, 1] - pmid0[0, 0, 1])) ) - vflx[0, 0, 1] = umf_zint * ( - vu - (v0[0, 0, 1] + ssv0[0, 0, 1] * (pifc0[0, 0, 1] - pmid0[0, 0, 1])) + vflx[0, 0, 1] = umf_zint[0, 0, 1] * ( + vu[0, 0, 1] - (v0[0, 0, 1] + ssv0[0, 0, 1] * (pifc0[0, 0, 1] - pmid0[0, 0, 1])) ) if dotransport == 1: n = 0 while n < ncnst: - trflx[0, 0, 1][n] = umf_zint * ( - tru[0, 0, 0][n] + trflx[0, 0, 1][n] = umf_zint[0, 0, 1] * ( + tru[0, 0, 1][n] - (tr0[0, 0, 1][n] + sstr0[0, 0, 1][n] * (pifc0[0, 0, 1] - pmid0[0, 0, 1])) ) n += 1 @@ -5207,19 +5214,19 @@ def penetrative_entrainment_fluxes( slflx[0, 0, 1] = ( constants.MAPL_CP * exnifc0[0, 0, 1] - * emf - * (thlu_emf - (thl0 + ssthl0 * (pifc0[0, 0, 1] - pmid0))) + * emf[0, 0, 1] + * (thlu_emf[0, 0, 1] - (thl0 + ssthl0 * (pifc0[0, 0, 1] - pmid0))) ) - qtflx[0, 0, 1] = emf * (qtu_emf - (qt0 + ssqt0 * (pifc0[0, 0, 1] - pmid0))) - uflx[0, 0, 1] = emf * (uu_emf - (u0 + ssu0 * (pifc0[0, 0, 1] - pmid0))) - vflx[0, 0, 1] = emf * (vu_emf - (v0 + ssv0 * (pifc0[0, 0, 1] - pmid0))) + qtflx[0, 0, 1] = emf[0, 0, 1] * (qtu_emf[0, 0, 1] - (qt0 + ssqt0 * (pifc0[0, 0, 1] - pmid0))) + uflx[0, 0, 1] = emf[0, 0, 1] * (uu_emf[0, 0, 1] - (u0 + ssu0 * (pifc0[0, 0, 1] - pmid0))) + vflx[0, 0, 1] = emf[0, 0, 1] * (vu_emf[0, 0, 1] - (v0 + ssv0 * (pifc0[0, 0, 1] - pmid0))) if dotransport == 1: n = 0 while n < ncnst: - trflx[0, 0, 1][n] = emf * ( - tru_emf[0, 0, 0][n] + trflx[0, 0, 1][n] = emf[0, 0, 1] * ( + tru_emf[0, 0, 1][n] - (tr0[0, 0, 0][n] + sstr0[0, 0, 0][n] * (pifc0[0, 0, 1] - pmid0)) ) n += 1 @@ -5240,9 +5247,9 @@ def penetrative_entrainment_fluxes( if K >= (kinv - 1) and K <= (krel - 1): uemf[0, 0, 1] = cbmf if K >= krel and K <= (kbup - 1): - uemf[0, 0, 1] = umf_zint + uemf[0, 0, 1] = umf_zint[0, 0, 1] if K >= kbup and K <= (kpen - 1): - uemf[0, 0, 1] = emf # Only use penetrative entrainment flux consistently. + uemf[0, 0, 1] = emf[0, 0, 1] # Only use penetrative entrainment flux consistently. comsub = 0.0 @@ -5309,7 +5316,7 @@ def penetrative_entrainment_fluxes( if id_check == 1: condensation = True - umf_out[0, 0, 1] = 0.0 + # umf_out[0, 0, 1] = 0.0 dcm_out = 0.0 qvten_out = 0.0 qlten_out = 0.0 @@ -5400,8 +5407,6 @@ def calc_thermodynamic_tendencies( vf: FloatField, dwten: FloatField, diten: FloatField, - dwten_temp: FloatField, - diten_temp: FloatField, umf_temp: FloatField, krel: IntField, prel: FloatField, @@ -5495,8 +5500,6 @@ def calc_thermodynamic_tendencies( umf_zint [FloatField]: Updraft mass flux at the interfaces [kg/m2/s] dwten [FloatField]: Detrained [?] diten [FloatField]: Detrained [?] - dwten_temp [FloatField]: Detrained [?] - diten_temp [FloatField]: Detrained [?] umf_out [FloatField]: Updraft mass flux at the interfaces [kg/m2/s] qtflx_out [FloatField]: Mixing ratio flux [?] slflx_out [FloatField]: Sensible heat flux [?] @@ -5520,7 +5523,7 @@ def calc_thermodynamic_tendencies( """ with computation(FORWARD), interval(...): if not condensation: - umf_zint[0, 0, 1] = umf_temp[0, 0, 1] # Update umf + # umf_zint[0, 0, 1] = umf_temp[0, 0, 1] # Update umf if iteration != int32(0): # Reset some vars to zero after first iteration qlten = 0.0 @@ -5564,11 +5567,11 @@ def calc_thermodynamic_tendencies( # umf(kpen)=0. dwten = ( - dwten_temp * 0.5 * (umf_zint + umf_zint[0, 0, 1]) * constants.MAPL_GRAV / dp0 + dwten * 0.5 * (umf_zint + umf_zint[0, 0, 1]) * constants.MAPL_GRAV / dp0 ) # [ kg/kg/s ] diten = ( - diten_temp * 0.5 * (umf_zint + umf_zint[0, 0, 1]) * constants.MAPL_GRAV / dp0 + diten * 0.5 * (umf_zint + umf_zint[0, 0, 1]) * constants.MAPL_GRAV / dp0 ) # [ kg/kg/s ] # 'qrten(k)','qsten(k)' : Production rate of rain and snow within the @@ -5631,9 +5634,7 @@ def calc_thermodynamic_tendencies( qlj_2D = 0.0 qij_2D = 0.0 elif K == krel: - thj, qvj, qlj_2D, qij_2D, qse, id_check = conden( - prel, thlu.at(K=K - 1), qtu.at(K=K - 1), ese, esx - ) + thj, qvj, qlj_2D, qij_2D, qse, id_check = conden(prel, thlu, qtu, ese, esx) if id_check == 1: condensation = True @@ -5660,7 +5661,9 @@ def calc_thermodynamic_tendencies( if not condensation: qlubelow = qlj_2D qiubelow = qij_2D - thj, qvj, qlj_2D, qij_2D, qse, id_check = conden(pifc0[0, 0, 1], thlu, qtu, ese, esx) + thj, qvj, qlj_2D, qij_2D, qse, id_check = conden( + pifc0[0, 0, 1], thlu[0, 0, 1], qtu[0, 0, 1], ese, esx + ) if id_check == 1: condensation = True @@ -5730,7 +5733,9 @@ def calc_thermodynamic_tendencies( else: if not condensation: - thj, qvj, qlj_2D, qij_2D, qse, id_check = conden(pifc0[0, 0, 1], thlu, qtu, ese, esx) + thj, qvj, qlj_2D, qij_2D, qse, id_check = conden( + pifc0[0, 0, 1], thlu[0, 0, 1], qtu[0, 0, 1], ese, esx + ) if id_check == 1: condensation = True @@ -5805,8 +5810,8 @@ def calc_thermodynamic_tendencies( if K == kbup: thj, qvj, ql_emf_kbup, qi_emf_kbup, qse, id_check = conden( pmid0, - thlu_emf, - qtu_emf, + thlu_emf[0, 0, 1], + qtu_emf[0, 0, 1], ese, esx, ) @@ -5841,10 +5846,10 @@ def calc_thermodynamic_tendencies( if qi_emf_kbup < 0.0: ni_emf_kbup = 0.0 - qc_lm = qc_lm - constants.MAPL_GRAV * emf * (ql_emf_kbup - ql0) / ( + qc_lm = qc_lm - constants.MAPL_GRAV * emf[0, 0, 1] * (ql_emf_kbup - ql0) / ( pifc0 - pifc0[0, 0, 1] ) # [ kg/kg/s ] - qc_im = qc_im - constants.MAPL_GRAV * emf * (qi_emf_kbup - qi0) / ( + qc_im = qc_im - constants.MAPL_GRAV * emf[0, 0, 1] * (qi_emf_kbup - qi0) / ( pifc0 - pifc0[0, 0, 1] ) # [ kg/kg/s ] @@ -6055,7 +6060,7 @@ def calc_tracer_tendencies( trflx_u[0, 0, 0][n] = 0.0 n += 1 - with computation(FORWARD), interval(1, -1): + with computation(FORWARD), interval(0, -1): if not condensation: if dotransport == 1: n = 0 @@ -6065,12 +6070,12 @@ def calc_tracer_tendencies( (tr0[0, 0, 0][n] - trmin[0, 0][n]) * pdelx / constants.MAPL_GRAV / dt + trflx[0, 0, 0][n] - trflx[0, 0, 1][n] - + trflx_d[0, 0, -1][n] + + trflx_d[0, 0, 0][n] ) - trflx_d[0, 0, 0][n] = min(0.0, dum) + trflx_d[0, 0, 1][n] = min(0.0, dum) n += 1 - with computation(BACKWARD), interval(2, None): + with computation(BACKWARD), interval(1, None): if not condensation: if dotransport == 1: n = 0 @@ -6080,14 +6085,14 @@ def calc_tracer_tendencies( (tr0[0, 0, 0][n] - trmin[0, 0][n]) * pdelx / constants.MAPL_GRAV / dt + trflx[0, 0, 0][n] - trflx[0, 0, 1][n] - + trflx_d[0, 0, -1][n] - - trflx_d[0, 0, 0][n] - - trflx_u[0, 0, 0][n] + + trflx_d[0, 0, 0][n] + - trflx_d[0, 0, 1][n] + - trflx_u[0, 0, 1][n] ) - trflx_u[0, 0, -1][n] = max(0.0, -dum) + trflx_u[0, 0, 0][n] = max(0.0, -dum) n += 1 - with computation(FORWARD), interval(0, None): + with computation(FORWARD), interval(...): if not condensation: if dotransport == 1: n = 0 @@ -6098,9 +6103,9 @@ def calc_tracer_tendencies( trflx[0, 0, 0][n] - trflx[0, 0, 1][n] + trflx_d[0, 0, 0][n] - - trflx_d[0, 0, 0][n] + - trflx_d[0, 0, 1][n] + trflx_u[0, 0, 0][n] - - trflx_u[0, 0, 0][n] + - trflx_u[0, 0, 1][n] ) * constants.MAPL_GRAV / pdelx @@ -6197,9 +6202,7 @@ def compute_diagnostic_outputs( """ with computation(FORWARD), interval(...): if not condensation: - thj, qvj, qlj, qij, qse, id_check = conden( - prel, thlu.at(K=krel - 1), qtu.at(K=krel - 1), ese, esx - ) + thj, qvj, qlj, qij, qse, id_check = conden(prel, thlu.at(K=krel), qtu.at(K=krel), ese, esx) if id_check == 1: condensation = True @@ -6317,7 +6320,9 @@ def calc_cumulus_condensate_at_interface( if K == kpen: thj, qvj, qlj, qij, qse, id_check = conden(pifc0 + ppen, thlu_top, qtu_top, ese, esx) else: - thj, qvj, qlj, qij, qse, id_check = conden(pifc0[0, 0, 1], thlu, qtu, ese, esx) + thj, qvj, qlj, qij, qse, id_check = conden( + pifc0[0, 0, 1], thlu[0, 0, 1], qtu[0, 0, 1], ese, esx + ) if id_check == 1: condensation = True @@ -6388,7 +6393,7 @@ def calc_cumulus_condensate_at_interface( # iter_cin = 1. -def adjust_implicit_CIN_inputs( +def adjust_implicit_CIN_inputs1( condensation: BoolFieldIJ, qv0: FloatField, qvten: FloatField, @@ -6408,63 +6413,22 @@ def adjust_implicit_CIN_inputs( tr0_s: FloatField_NTracers, tr0: FloatField_NTracers, trten: FloatField_NTracers, - umf_s: FloatField, - umf_zint: FloatField, - dcm: FloatField, - qrten: FloatField, - qsten: FloatField, - cush: FloatFieldIJ, - cufrc: FloatField, - slflx_s: FloatField, - slflx: FloatField, - qtflx_s: FloatField, - qtflx: FloatField, - uflx_s: FloatField, - uflx: FloatField, - vflx_s: FloatField, - vflx: FloatField, - qcu: FloatField, - qlu: FloatField, - qiu: FloatField, - fer: FloatField, - fdr: FloatField, - xco: FloatField, - cin_IJ: FloatFieldIJ, - cinlcl_IJ: FloatFieldIJ, - cbmf: FloatField, - qc: FloatField, - qlten_det: FloatField, - qiten_det: FloatField, - qlten_sink: FloatField, - qiten_sink: FloatField, - ufrc_s: FloatField, - ufrc: FloatField, qv0_s: FloatField, ql0_s: FloatField, qi0_s: FloatField, s0_s: FloatField, t0_s: FloatField, - dcm_s: FloatField, + u0_s: FloatField, + v0_s: FloatField, qvten_s: FloatField, qlten_s: FloatField, qiten_s: FloatField, sten_s: FloatField, uten_s: FloatField, vten_s: FloatField, - qrten_s: FloatField, - qsten_s: FloatField, - qldet_s: FloatField, - qidet_s: FloatField, - qlsub_s: FloatField, - qisub_s: FloatField, - cush_s: FloatField, - cufrc_s: FloatField, - fer_s: FloatField, - fdr_s: FloatField, - iteration: int32, ): """ - Stencil to adjust the original input profiles for implicit CIN + Stencils to adjust the original input profiles for implicit CIN calculation. Save the output from "iter_cin = 0". These output will be writed-out if "iter_cin = 0" was not performed @@ -6568,14 +6532,65 @@ def adjust_implicit_CIN_inputs( tr0_s[0, 0, 0][n] = tr0[0, 0, 0][n] + trten[0, 0, 0][n] * dt n += 1 - umf_s[0, 0, 1] = umf_zint[0, 0, 1] - dcm_s = dcm qvten_s = qvten qlten_s = qlten qiten_s = qiten sten_s = sten uten_s = uten vten_s = vten + + +def adjust_implicit_CIN_inputs2( + condensation: BoolFieldIJ, + umf_s: FloatField, + umf_zint: FloatField, + dcm: FloatField, + qrten: FloatField, + qsten: FloatField, + cush: FloatFieldIJ, + cufrc: FloatField, + slflx_s: FloatField, + slflx: FloatField, + qtflx_s: FloatField, + qtflx: FloatField, + uflx_s: FloatField, + uflx: FloatField, + vflx_s: FloatField, + vflx: FloatField, + qcu: FloatField, + qlu: FloatField, + qiu: FloatField, + fer: FloatField, + fdr: FloatField, + xco: FloatField, + cin_IJ: FloatFieldIJ, + cinlcl_IJ: FloatFieldIJ, + cbmf: FloatField, + qc: FloatField, + qlten_det: FloatField, + qiten_det: FloatField, + qlten_sink: FloatField, + qiten_sink: FloatField, + ufrc_s: FloatField, + ufrc: FloatField, + dcm_s: FloatField, + qrten_s: FloatField, + qsten_s: FloatField, + qldet_s: FloatField, + qidet_s: FloatField, + qlsub_s: FloatField, + qisub_s: FloatField, + cush_s: FloatField, + cufrc_s: FloatField, + fer_s: FloatField, + fdr_s: FloatField, + iteration: int32, +): + + with computation(FORWARD), interval(...): + if not condensation: + umf_s[0, 0, 1] = umf_zint[0, 0, 1] + dcm_s = dcm qrten_s = qrten qsten_s = qsten cush_s = cush @@ -6803,7 +6818,7 @@ def recalc_environmental_variables( if id_check == 1: condensation = True - umf_out[0, 0, 1] = 0.0 + # umf_out[0, 0, 1] = 0.0 dcm_out = 0.0 qvten_out = 0.0 qlten_out = 0.0 @@ -6817,9 +6832,9 @@ def recalc_environmental_variables( cush_inout = -1.0 qldet_out = 0.0 qidet_out = 0.0 - qtflx_out[0, 0, 1] = 0.0 - slflx_out[0, 0, 1] = 0.0 - uflx_out[0, 0, 1] = 0.0 + # qtflx_out[0, 0, 1] = 0.0 + # slflx_out[0, 0, 1] = 0.0 + # uflx_out[0, 0, 1] = 0.0 # vflx_out[0, 0, 1] = 0.0 fer_out = constants.MAPL_UNDEF fdr_out = constants.MAPL_UNDEF @@ -6831,11 +6846,20 @@ def recalc_environmental_variables( # End of iter loop -def update_output_variables( +def _reset_mask( + field: BoolFieldIJ, + value: Bool, +): + with computation(FORWARD), interval(0, 1): + field = value + + +def update_output_variables1( + condensation: BoolFieldIJ, del_CIN: FloatFieldIJ, umf_zint: FloatField, - zifc0: FloatField, kinv: IntField, + zifc0: FloatField, dcm: FloatField, qvten: FloatField, qlten: FloatField, @@ -6847,70 +6871,99 @@ def update_output_variables( qsten: FloatField, cufrc: FloatField, cush: FloatFieldIJ, - qlten_det: FloatField, - qiten_det: FloatField, - qlten_sink: FloatField, - qiten_sink: FloatField, - rdrop: Float, - qtflx: FloatField, - slflx: FloatField, - uflx: FloatField, - vflx: FloatField, - dotransport: Int, - trten: FloatField_NTracers, - dt: Float, - fer: FloatField, - fdr: FloatField, - kpen: IntField, umf_out: FloatField, dcm_out: FloatField, + dcm_outvar: FloatField, qvten_out: FloatField, + qvten_outvar: FloatField, qlten_out: FloatField, + qlten_outvar: FloatField, qiten_out: FloatField, + qiten_outvar: FloatField, sten_out: FloatField, + sten_outvar: FloatField, uten_out: FloatField, + uten_outvar: FloatField, vten_out: FloatField, + vten_outvar: FloatField, qrten_out: FloatField, + qrten_outvar: FloatField, qsten_out: FloatField, + qsten_outvar: FloatField, cufrc_out: FloatField, - cush_inout: FloatFieldIJ, + cufrc_outvar: FloatField, + cush_inout: FloatField, + cush_inoutvar: FloatField, + umf_outvar: FloatField, +): + with computation(FORWARD), interval(...): + if condensation: + dcm = 0.0 + cush = -1.0 + + if del_CIN <= 0.0: + umf_outvar = umf_out + cufrc_outvar = cufrc_out + dcm_outvar = dcm_out + qvten_outvar = qvten_out + qlten_outvar = qlten_out + qiten_outvar = qiten_out + sten_outvar = sten_out + uten_outvar = uten_out + vten_outvar = vten_out + qrten_outvar = qrten_out + qsten_outvar = qsten_out + # cush_inoutvar = cush_inout + + if del_CIN > 0.0: + umf_outvar = umf_zint + + if K <= kinv - 1: + umf_outvar = umf_zint.at(K=kinv) * zifc0 / zifc0.at(K=kinv) + + cufrc_outvar = cufrc + dcm_outvar = dcm + qvten_outvar = qvten + qlten_outvar = qlten + qiten_outvar = qiten + sten_outvar = sten + uten_outvar = uten + vten_outvar = vten + qrten_outvar = qrten + qsten_outvar = qsten + # cush_inoutvar = cush + + +def update_output_variables2( + condensation: BoolFieldIJ, + dotransport: Int, + kpen: IntField, qldet_out: FloatField, qidet_out: FloatField, qlsub_out: FloatField, qisub_out: FloatField, + ndrop_out: FloatField, + nice_out: FloatField, qtflx_out: FloatField, slflx_out: FloatField, uflx_out: FloatField, vflx_out: FloatField, - tr0_inout: FloatField_NTracers, + fer: FloatField, + fdr: FloatField, fer_out: FloatField, fdr_out: FloatField, - umf_outvar: FloatField, - dcm_outvar: FloatField, - qvten_outvar: FloatField, - qlten_outvar: FloatField, - qiten_outvar: FloatField, - sten_outvar: FloatField, - uten_outvar: FloatField, - vten_outvar: FloatField, - qrten_outvar: FloatField, - qsten_outvar: FloatField, - cufrc_outvar: FloatField, - cush_inoutvar: FloatFieldIJ, - qldet_outvar: FloatField, - qidet_outvar: FloatField, - qlsub_outvar: FloatField, - qisub_outvar: FloatField, - qtflx_outvar: FloatField, - slflx_outvar: FloatField, - uflx_outvar: FloatField, - vflx_outvar: FloatField, - fer_outvar: FloatField, - fdr_outvar: FloatField, - ndrop_out: FloatField, - nice_out: FloatField, - tr0_inoutvar: FloatField_NTracers, - condensation: BoolFieldIJ, + dt: Float, + rdrop: Float, + qlten_det: FloatField, + qiten_det: FloatField, + qlten_sink: FloatField, + qiten_sink: FloatField, + qtflx: FloatField, + slflx: FloatField, + uflx: FloatField, + vflx: FloatField, + tr0_inout: FloatField_NTracers, + trten: FloatField_NTracers, ): """ Stencil to update ComputeUwshcu output variables. @@ -6976,131 +7029,89 @@ def update_output_variables( fdr_out [FloatField]: Fractional lateral detrainment rate [1/Pa] Outputs: - umf_outvar [FloatField]: Updraft mass flux at the interfaces [kg/m2/s] - dcm_outvar [FloatField]: Detrained cloudy air mass - qvten_outvar [FloatField]: Tendency of water vapor specific humidity [kg/kg/s] - qlten_outvar [FloatField]: Tendency of liquid water specific humidity [kg/kg/s] - qiten_outvar [FloatField]: Tendency of ice specific humidity [kg/kg/s] - sten_outvar [FloatField]: Tendency of dry static energy [J/kg/s] - uten_outvar [FloatField]: Tendency of zonal wind [m/s2] - vten_outvar [FloatField]: Tendency of meridional wind [m/s2] - qrten_outvar [FloatField]: Tendency of rain water specific humidity [kg/kg/s] - qsten_outvar [FloatField]: Tendency of snow specific humidity [kg/kg/s] - cufrc_outvar [FloatField]: Shallow cumulus cloud fraction at the layer mid-point [fraction] - cush_inoutvar [FloatFieldIJ]: Convective scale height [m] - qldet_outvar [FloatField]: [?] - qidet_outvar [FloatField]: [?] - qlsub_outvar [FloatField]: [?] - qisub_outvar [FloatField]: [?] - qtflx_outvar [FloatField]: [?] - slflx_outvar [FloatField]: [?] - uflx_outvar [FloatField]: [?] - vflx_outvar [FloatField]: [?] - fer_outvar [FloatField]: Fractional lateral entrainment rate [1/Pa] - fdr_outvar [FloatField]: Fractional lateral detrainment rate [1/Pa] + umf_out [FloatField]: Updraft mass flux at the interfaces [kg/m2/s] + dcm_out [FloatField]: Detrained cloudy air mass + qvten_out [FloatField]: Tendency of water vapor specific humidity [kg/kg/s] + qlten_out [FloatField]: Tendency of liquid water specific humidity [kg/kg/s] + qiten_out [FloatField]: Tendency of ice specific humidity [kg/kg/s] + sten_out [FloatField]: Tendency of dry static energy [J/kg/s] + uten_out [FloatField]: Tendency of zonal wind [m/s2] + vten_out [FloatField]: Tendency of meridional wind [m/s2] + qrten_out [FloatField]: Tendency of rain water specific humidity [kg/kg/s] + qsten_out [FloatField]: Tendency of snow specific humidity [kg/kg/s] + cufrc_out [FloatField]: Shallow cumulus cloud fraction at the layer mid-point [fraction] + cush_inout [FloatFieldIJ]: Convective scale height [m] + qldet_out [FloatField]: [?] + qidet_out [FloatField]: [?] + qlsub_out [FloatField]: [?] + qisub_out [FloatField]: [?] + qtflx_out [FloatField]: [?] + slflx_out [FloatField]: [?] + uflx_out [FloatField]: [?] + vflx_out [FloatField]: [?] + fer_out [FloatField]: Fractional lateral entrainment rate [1/Pa] + fdr_out [FloatField]: Fractional lateral detrainment rate [1/Pa] ndrop_out [FloatField]: [?] nice_out [FloatField]: [?] - tr0_inoutvar [FloatField_NTracers]: Environmental tracers [#, kg/kg] + tr0_inout [FloatField_NTracers]: Environmental tracers [#, kg/kg] """ from __externals__ import ncnst with computation(FORWARD), interval(...): - if condensation: - qlten_det = 0.0 - fdr = constants.MAPL_UNDEF - fer = constants.MAPL_UNDEF - sten = 0.0 - qlten_sink = 0.0 - qiten_det = 0.0 - dcm = 0.0 - qiten = 0.0 - qiten_sink = 0.0 - qlten = 0.0 - umf_zint[0, 0, 1] = 0.0 - zifc0 = 0.0 - cush = -1.0 - - if del_CIN <= 0.0: - umf_outvar = umf_out - dcm_outvar = dcm_out - qvten_outvar = qvten_out - qlten_outvar = qlten_out - qiten_outvar = qiten_out - sten_outvar = sten_out - uten_outvar = uten_out - vten_outvar = vten_out - qrten_outvar = qrten_out - qsten_outvar = qsten_out - cufrc_outvar = cufrc_out - cush_inoutvar = cush_inout - qldet_outvar = qldet_out - qidet_outvar = qidet_out - qlsub_outvar = qlsub_out - qisub_outvar = qisub_out - qtflx_outvar = qtflx_out - slflx_outvar = slflx_out - uflx_outvar = uflx_out - vflx_outvar = vflx_out - fer_outvar = fer_out - fdr_outvar = fdr_out - if dotransport == 1: - n = 0 - while n < ncnst: - tr0_inoutvar[0, 0, 0][n] = tr0_inout[0, 0, 0][n] - n += 1 - - if del_CIN > 0.0: - umf_outvar = umf_zint - - if K <= kinv - 1: - umf_outvar = umf_zint.at(K=kinv) * zifc0 / zifc0.at(K=kinv) - - dcm_outvar = dcm - qvten_outvar = qvten - qlten_outvar = qlten - qiten_outvar = qiten - sten_outvar = sten - uten_outvar = uten - vten_outvar = vten - qrten_outvar = qrten - qsten_outvar = qsten - cufrc_outvar = cufrc - cush_inoutvar = cush - qldet_outvar = qlten_det - qidet_outvar = qiten_det - qlsub_outvar = qlten_sink - qisub_outvar = qiten_sink + if not condensation: + qldet_out = qlten_det + qidet_out = qiten_det + qlsub_out = qlten_sink + qisub_out = qiten_sink ndrop_out = qlten_det / (4188.787 * rdrop ** 3) nice_out = qiten_det / (3.0e-10) - qtflx_outvar = qtflx - slflx_outvar = slflx - uflx_outvar = uflx - vflx_outvar = vflx + qtflx_out = qtflx + slflx_out = slflx + uflx_out = uflx + vflx_out = vflx if dotransport == 1: n = 0 while n < ncnst: - tr0_inoutvar[0, 0, 0][n] = tr0_inout[0, 0, 0][n] + trten[0, 0, 0][n] * dt + tr0_inout[0, 0, 0][n] = tr0_inout[0, 0, 0][n] + trten[0, 0, 0][n] * dt n += 1 - # # Below are specific diagnostic output for detailed - # # analysis of cumulus scheme - fer_outvar = constants.MAPL_UNDEF - fdr_outvar = constants.MAPL_UNDEF + fer_out = constants.MAPL_UNDEF + fdr_out = constants.MAPL_UNDEF if K <= kpen: - fer_outvar = fer - fdr_outvar = fdr + fer_out = fer + fdr_out = fdr def compute_uwshcu_invert_after( # Inputs k0: Int, - umf_outvar: FloatField, - qtflx_outvar: FloatField, - slflx_outvar: FloatField, - uflx_outvar: FloatField, - vflx_outvar: FloatField, + umf_out: FloatField, + qtflx_out: FloatField, + slflx_out: FloatField, + uflx_out: FloatField, + vflx_out: FloatField, dcm_outvar: FloatField, + qvten_out: FloatField, + qlten_out: FloatField, + qiten_out: FloatField, + sten_out: FloatField, + uten_out: FloatField, + vten_out: FloatField, + qrten_out: FloatField, + qsten_out: FloatField, + cufrc_outvar: FloatField, + qldet_out: FloatField, + qidet_out: FloatField, + qlsub_out: FloatField, + qisub_out: FloatField, + fer_out: FloatField, + fdr_out: FloatField, + ndrop_out: FloatField, + nice_out: FloatField, + tr0: FloatField_NTracers, + tr0_inout: FloatField_NTracers, + cush_inout: FloatFieldIJ, qvten_outvar: FloatField, qlten_outvar: FloatField, qiten_outvar: FloatField, @@ -7109,18 +7120,8 @@ def compute_uwshcu_invert_after( vten_outvar: FloatField, qrten_outvar: FloatField, qsten_outvar: FloatField, - cufrc_outvar: FloatField, - qldet_outvar: FloatField, - qidet_outvar: FloatField, - qlsub_outvar: FloatField, - qisub_outvar: FloatField, - fer_outvar: FloatField, - fdr_outvar: FloatField, - ndrop_out: FloatField, - nice_out: FloatField, - tr0: FloatField_NTracers, - tr0_inoutvar: FloatField_NTracers, - cush_inoutvar: FloatFieldIJ, + cush_inoutvar: FloatField, + umf_outvar: FloatField, # Outputs umf_inv: FloatField, dcm_inv: FloatField, @@ -7154,31 +7155,31 @@ def compute_uwshcu_invert_after( Inputs: k0 [Int]: Number of levels - umf_outvar [FloatField]: Updraft mass flux at the interfaces [kg/m2/s] - qtflx_outvar [FloatField]: [?] - slflx_outvar [FloatField]: [?] - uflx_outvar [FloatField]: [?] - vflx_outvar [FloatField]: [?] - dcm_outvar [FloatField]: Detrained cloudy air mass - qvten_outvar [FloatField]: Tendency of water vapor specific humidity [kg/kg/s] - qlten_outvar [FloatField]: Tendency of liquid water specific humidity [kg/kg/s] - qiten_outvar [FloatField]: Tendency of ice specific humidity [kg/kg/s] - sten_outvar [FloatField]: Tendency of dry static energy [J/kg/s] - uten_outvar [FloatField]: Tendency of zonal wind [m/s2] - vten_outvar [FloatField]: Tendency of meridional wind [m/s2] - qrten_outvar [FloatField]: Tendency of rain water specific humidity [kg/kg/s] - qsten_outvar [FloatField]: Tendency of snow specific humidity [kg/kg/s] - cufrc_outvar [FloatField]: Shallow cumulus cloud fraction at the layer mid-point [fraction] - qldet_outvar [FloatField]: [?] - qidet_outvar [FloatField]: [?] - qlsub_outvar [FloatField]: [?] - qisub_outvar [FloatField]: [?] - fer_outvar [FloatField]: Fractional lateral entrainment rate [1/Pa] - fdr_outvar [FloatField]: Fractional lateral detrainment rate [1/Pa] + umf_out [FloatField]: Updraft mass flux at the interfaces [kg/m2/s] + qtflx_out [FloatField]: [?] + slflx_out [FloatField]: [?] + uflx_out [FloatField]: [?] + vflx_out [FloatField]: [?] + dcm_out [FloatField]: Detrained cloudy air mass + qvten_out [FloatField]: Tendency of water vapor specific humidity [kg/kg/s] + qlten_out [FloatField]: Tendency of liquid water specific humidity [kg/kg/s] + qiten_out [FloatField]: Tendency of ice specific humidity [kg/kg/s] + sten_out [FloatField]: Tendency of dry static energy [J/kg/s] + uten_out [FloatField]: Tendency of zonal wind [m/s2] + vten_out [FloatField]: Tendency of meridional wind [m/s2] + qrten_out [FloatField]: Tendency of rain water specific humidity [kg/kg/s] + qsten_out [FloatField]: Tendency of snow specific humidity [kg/kg/s] + cufrc_out [FloatField]: Shallow cumulus cloud fraction at the layer mid-point [fraction] + qldet_out [FloatField]: [?] + qidet_out [FloatField]: [?] + qlsub_out [FloatField]: [?] + qisub_out [FloatField]: [?] + fer_out [FloatField]: Fractional lateral entrainment rate [1/Pa] + fdr_out [FloatField]: Fractional lateral detrainment rate [1/Pa] ndrop_out [FloatField]: [?] nice_out [FloatField]: [?] tr0 [FloatField_NTracers]: Environmental tracers [#, kg/kg] - tr0_inoutvar [FloatField_NTracers]: Environmental tracers [#, kg/kg] + tr0_inout [FloatField_NTracers]: Environmental tracers [#, kg/kg] Outputs: umf_inv [FloatField]: Updraft mass flux at interfaces [kg/m2/s] @@ -7211,22 +7212,22 @@ def compute_uwshcu_invert_after( from __externals__ import k_end, ncnst with computation(FORWARD), interval(...): - cush = cush_inoutvar + # cush = cush_inoutvar # Revert interface variables k_inv = k_end + 1 - K umf_inv = umf_outvar.at(K=k_inv) - qtflx_inv = qtflx_outvar.at(K=k_inv) - slflx_inv = slflx_outvar.at(K=k_inv) - uflx_inv = uflx_outvar.at(K=k_inv) - vflx_inv = vflx_outvar.at(K=k_inv) + qtflx_inv = qtflx_out.at(K=k_inv) + slflx_inv = slflx_out.at(K=k_inv) + uflx_inv = uflx_out.at(K=k_inv) + vflx_inv = vflx_out.at(K=k_inv) with computation(FORWARD), interval(-1, None): # Revert interface variables umf_inv[0, 0, 1] = umf_outvar.at(K=0) - qtflx_inv[0, 0, 1] = qtflx_outvar.at(K=0) - slflx_inv[0, 0, 1] = slflx_outvar.at(K=0) - uflx_inv[0, 0, 1] = uflx_outvar.at(K=0) - vflx_inv[0, 0, 1] = vflx_outvar.at(K=0) + qtflx_inv[0, 0, 1] = qtflx_out.at(K=0) + slflx_inv[0, 0, 1] = slflx_out.at(K=0) + uflx_inv[0, 0, 1] = uflx_out.at(K=0) + vflx_inv[0, 0, 1] = vflx_out.at(K=0) with computation(FORWARD), interval(...): # Revert mid-level variables @@ -7241,12 +7242,12 @@ def compute_uwshcu_invert_after( qrten_inv = qrten_outvar.at(K=k_inv) qsten_inv = qsten_outvar.at(K=k_inv) cufrc_inv = cufrc_outvar.at(K=k_inv) - fer_inv = fer_outvar.at(K=k_inv) - fdr_inv = fdr_outvar.at(K=k_inv) - qldet_inv = qldet_outvar.at(K=k_inv) - qidet_inv = qidet_outvar.at(K=k_inv) - qlsub_inv = qlsub_outvar.at(K=k_inv) - qisub_inv = qisub_outvar.at(K=k_inv) + fer_inv = fer_out.at(K=k_inv) + fdr_inv = fdr_out.at(K=k_inv) + qldet_inv = qldet_out.at(K=k_inv) + qidet_inv = qidet_out.at(K=k_inv) + qlsub_inv = qlsub_out.at(K=k_inv) + qisub_inv = qisub_out.at(K=k_inv) ndrop_inv = ndrop_out.at(K=k_inv) nice_inv = nice_out.at(K=k_inv) @@ -7254,7 +7255,7 @@ def compute_uwshcu_invert_after( if dotransport == 1: n = 0 while n < ncnst: - tr0[0, 0, 0][n] = max(mintracer, tr0_inoutvar[0, 0, 0][n]) + tr0[0, 0, 0][n] = max(mintracer, tr0_inout[0, 0, 0][n]) CNV_Tracers[0, 0, 0][n] = tr0.at(K=k_inv, ddim=[n]) n += 1 @@ -7273,7 +7274,7 @@ def compute_uwshcu_invert_after( qisub_inv = tmp2d * qisub_inv -class ComputeUwshcuInv: +class ComputeUwshcuInv(NDSLRuntime): def __init__( self, stencil_factory: StencilFactory, @@ -7281,11 +7282,6 @@ def __init__( UW_config: UWConfiguration, formulation: SaturationFormulation = SaturationFormulation.Staars, ) -> None: - orchestrate( - obj=self, - config=stencil_factory.config.dace_config, - ) - # Initialize the ComputeUwshcu class # Parameters: @@ -7295,8 +7291,10 @@ def __init__( # constants. # formulation: Saturation Formulation used for QSat. + super().__init__(stencil_factory.config.dace_config) + self.UW_config = UW_config - self.temporaries = Temporaries.make(quantity_factory) + self.locals = UWLocals.make(self, quantity_factory) self.stencil_factory = stencil_factory self.quantity_factory = quantity_factory @@ -7482,20 +7480,30 @@ def __init__( compute_dims=[X_DIM, Y_DIM, Z_DIM], ) - self._adjust_implicit_CIN_inputs = self.stencil_factory.from_dims_halo( - func=adjust_implicit_CIN_inputs, + self._adjust_implicit_CIN_inputs1 = self.stencil_factory.from_dims_halo( + func=adjust_implicit_CIN_inputs1, compute_dims=[X_DIM, Y_DIM, Z_DIM], externals={"ncnst": UW_config.NCNST}, ) + self._adjust_implicit_CIN_inputs2 = self.stencil_factory.from_dims_halo( + func=adjust_implicit_CIN_inputs2, + compute_dims=[X_DIM, Y_DIM, Z_DIM], + ) + self._recalc_environmental_variables = self.stencil_factory.from_dims_halo( func=recalc_environmental_variables, compute_dims=[X_DIM, Y_DIM, Z_DIM], externals={"ncnst": UW_config.NCNST}, ) - self._update_output_variables = self.stencil_factory.from_dims_halo( - func=update_output_variables, + self._update_output_variables1 = self.stencil_factory.from_dims_halo( + func=update_output_variables1, + compute_dims=[X_DIM, Y_DIM, Z_DIM], + ) + + self._update_output_variables2 = self.stencil_factory.from_dims_halo( + func=update_output_variables2, compute_dims=[X_DIM, Y_DIM, Z_DIM], externals={"ncnst": UW_config.NCNST}, ) @@ -7506,53 +7514,45 @@ def __init__( externals={"ncnst": UW_config.NCNST}, ) + self._reset_mask = self.stencil_factory.from_dims_halo( + func=_reset_mask, + compute_dims=[X_DIM, Y_DIM, Z_DIM], + ) + # Create masks # Mask that indicates if condensation has occurred (e.g., Fortran goto 333) - self.condensation = self.quantity_factory.zeros([X_DIM, Y_DIM], "n/a", dtype=bool) - self.stop_cin = self.quantity_factory.zeros([X_DIM, Y_DIM], "n/a", dtype=bool) - self.stop_buoyancy_sort = self.quantity_factory.zeros([X_DIM, Y_DIM], "n/a", dtype=bool) + self.condensation = self.make_local(quantity_factory, [X_DIM, Y_DIM], dtype=bool) + self.stop_cin = self.make_local(quantity_factory, [X_DIM, Y_DIM], dtype=bool) + self.stop_buoyancy_sort = self.make_local(quantity_factory, [X_DIM, Y_DIM], dtype=bool) + # Create tracer fields self.quantity_factory.add_data_dimensions( { "ntracers": constants.NCNST, } ) - - # Create tracer fields - self.trsrc = self.quantity_factory.zeros([X_DIM, Y_DIM, "ntracers"], "n/a") - self.trsrc_o = self.quantity_factory.zeros([X_DIM, Y_DIM, "ntracers"], "n/a") - self.tre = self.quantity_factory.zeros([X_DIM, Y_DIM, "ntracers"], "n/a") - self.trmin = self.quantity_factory.zeros([X_DIM, Y_DIM, "ntracers"], "n/a") - self.sstr0 = self.quantity_factory.zeros([X_DIM, Y_DIM, Z_DIM, "ntracers"], "n/a") - self.tr0 = self.quantity_factory.zeros([X_DIM, Y_DIM, Z_DIM, "ntracers"], "n/a") - self.tr0_o = self.quantity_factory.zeros([X_DIM, Y_DIM, Z_DIM, "ntracers"], "n/a") - self.sstr0_o = self.quantity_factory.zeros([X_DIM, Y_DIM, Z_DIM, "ntracers"], "n/a") - self.trten = self.quantity_factory.zeros([X_DIM, Y_DIM, Z_DIM, "ntracers"], "n/a") - self.tr0_s = self.quantity_factory.zeros([X_DIM, Y_DIM, Z_DIM, "ntracers"], "n/a") - self.tr0_inoutvar = self.quantity_factory.zeros([X_DIM, Y_DIM, Z_DIM, "ntracers"], "n/a") - self.tr0_inout = self.quantity_factory.zeros([X_DIM, Y_DIM, Z_DIM, "ntracers"], "n/a") - self.trflx = self.quantity_factory.zeros([X_DIM, Y_DIM, Z_INTERFACE_DIM, "ntracers"], "n/a") - self.tru = self.quantity_factory.zeros([X_DIM, Y_DIM, Z_INTERFACE_DIM, "ntracers"], "n/a") - self.tru_emf = self.quantity_factory.zeros([X_DIM, Y_DIM, Z_INTERFACE_DIM, "ntracers"], "n/a") - self.xflx_ndim = self.quantity_factory.zeros([X_DIM, Y_DIM, Z_INTERFACE_DIM, "ntracers"], "n/a") - self.trflx_d = self.quantity_factory.zeros([X_DIM, Y_DIM, Z_INTERFACE_DIM, "ntracers"], "n/a") - self.trflx_u = self.quantity_factory.zeros([X_DIM, Y_DIM, Z_INTERFACE_DIM, "ntracers"], "n/a") - - self.saturation_vapor_pressure_table = get_saturation_vapor_pressure_table( - self.stencil_factory.backend - ) - - @staticmethod - def make_ntracers_quantity_factory( - ijk_quantity_factory: QuantityFactory, - ): - ntracers_quantity_factory = copy.deepcopy(ijk_quantity_factory) - ntracers_quantity_factory.set_extra_dim_lengths( - **{ - "ntracers": constants.NCNST, - } - ) - return ntracers_quantity_factory + self.trsrc = self.make_local(quantity_factory, [X_DIM, Y_DIM, "ntracers"]) + self.trsrc_o = self.make_local(quantity_factory, [X_DIM, Y_DIM, "ntracers"]) + self.tre = self.make_local(quantity_factory, [X_DIM, Y_DIM, "ntracers"]) + self.trmin = self.make_local(quantity_factory, [X_DIM, Y_DIM, "ntracers"]) + self.sstr0 = self.make_local(quantity_factory, [X_DIM, Y_DIM, Z_DIM, "ntracers"]) + self.tr0 = self.make_local(quantity_factory, [X_DIM, Y_DIM, Z_DIM, "ntracers"]) + self.tr0_o = self.make_local(quantity_factory, [X_DIM, Y_DIM, Z_DIM, "ntracers"]) + self.sstr0_o = self.make_local(quantity_factory, [X_DIM, Y_DIM, Z_DIM, "ntracers"]) + self.trten = self.make_local(quantity_factory, [X_DIM, Y_DIM, Z_DIM, "ntracers"]) + self.tr0_s = self.make_local(quantity_factory, [X_DIM, Y_DIM, Z_DIM, "ntracers"]) + self.tr0_inout = self.make_local(quantity_factory, [X_DIM, Y_DIM, Z_DIM, "ntracers"]) + self.tr0_inout = self.make_local(quantity_factory, [X_DIM, Y_DIM, Z_DIM, "ntracers"]) + self.trflx = self.make_local(quantity_factory, [X_DIM, Y_DIM, Z_INTERFACE_DIM, "ntracers"]) + self.tru = self.make_local(quantity_factory, [X_DIM, Y_DIM, Z_INTERFACE_DIM, "ntracers"]) + self.tru_emf = self.make_local(quantity_factory, [X_DIM, Y_DIM, Z_INTERFACE_DIM, "ntracers"]) + self.xflx_ndim = self.make_local(quantity_factory, [X_DIM, Y_DIM, Z_INTERFACE_DIM, "ntracers"]) + self.trflx_d = self.make_local(quantity_factory, [X_DIM, Y_DIM, Z_INTERFACE_DIM, "ntracers"]) + self.trflx_u = self.make_local(quantity_factory, [X_DIM, Y_DIM, Z_INTERFACE_DIM, "ntracers"]) + + saturation_vapor_pressure_table = get_saturation_vapor_pressure_table(self.stencil_factory.backend) + self.ese = saturation_vapor_pressure_table.ese + self.esx = saturation_vapor_pressure_table.esx def __call__( self, @@ -7734,9 +7734,9 @@ def __call__( """ # Initialize masks, default for all masks is False. - self.condensation.field[:] = False - self.stop_cin.field[:] = False - self.stop_buoyancy_sort.field[:] = False + self._reset_mask(self.condensation, False) + self._reset_mask(self.stop_cin, False) + self._reset_mask(self.stop_buoyancy_sort, False) self._compute_uwshcu_invert_before( # Inputs @@ -7761,93 +7761,93 @@ def __call__( CNV_Tracers=CNV_Tracers, tr0_inout=self.tr0_inout, # Outputs - pmid0_in=self.temporaries.pmid0_in, - u0_in=self.temporaries.u0_in, - v0_in=self.temporaries.v0_in, - zmid0_in=self.temporaries.zmid0_in, - exnmid0_in=self.temporaries.exnmid0_in, - dp0_in=self.temporaries.dp0_in, - qv0_in=self.temporaries.qv0_in, - ql0_in=self.temporaries.ql0_in, - qi0_in=self.temporaries.qi0_in, - th0_in=self.temporaries.th0_in, - tke_in=self.temporaries.tke_in, - pifc0_in=self.temporaries.pifc0_in, - zifc0_in=self.temporaries.zifc0_in, - exnifc0_in=self.temporaries.exnifc0_in, - kpbl_in=self.temporaries.kpbl_in, - cnvtrmax=self.temporaries.cnvtrmax, + pmid0_in=self.locals.pmid0_in, + u0_in=self.locals.u0_in, + v0_in=self.locals.v0_in, + zmid0_in=self.locals.zmid0_in, + exnmid0_in=self.locals.exnmid0_in, + dp0_in=self.locals.dp0_in, + qv0_in=self.locals.qv0_in, + ql0_in=self.locals.ql0_in, + qi0_in=self.locals.qi0_in, + th0_in=self.locals.th0_in, + tke_in=self.locals.tke_in, + pifc0_in=self.locals.pifc0_in, + zifc0_in=self.locals.zifc0_in, + exnifc0_in=self.locals.exnifc0_in, + kpbl_in=self.locals.kpbl_in, + cnvtrmax=self.locals.cnvtrmax, ) self._compute_thermodynamic_variables( - pmid0_in=self.temporaries.pmid0_in, - zmid0_in=self.temporaries.zmid0_in, - exnmid0_in=self.temporaries.exnmid0_in, - dp0_in=self.temporaries.dp0_in, - u0_in=self.temporaries.u0_in, - v0_in=self.temporaries.v0_in, - u0=self.temporaries.u0, - v0=self.temporaries.v0, - qv0_in=self.temporaries.qv0_in, - ql0_in=self.temporaries.ql0_in, - qi0_in=self.temporaries.qi0_in, - th0_in=self.temporaries.th0_in, + pmid0_in=self.locals.pmid0_in, + zmid0_in=self.locals.zmid0_in, + exnmid0_in=self.locals.exnmid0_in, + dp0_in=self.locals.dp0_in, + u0_in=self.locals.u0_in, + v0_in=self.locals.v0_in, + u0=self.locals.u0, + v0=self.locals.v0, + qv0_in=self.locals.qv0_in, + ql0_in=self.locals.ql0_in, + qi0_in=self.locals.qi0_in, + th0_in=self.locals.th0_in, tr0_inout=self.tr0_inout, cush_inout=cush, cush=cush, - umf_out=self.temporaries.umf_out, + umf_out=self.locals.umf_out, shfx=shfx, evap=evap, - qtflx_out=self.temporaries.qtflx_out, - slflx_out=self.temporaries.slflx_out, - uflx_out=self.temporaries.uflx_out, - vflx_out=self.temporaries.vflx_out, - qt0=self.temporaries.qt0, - t0=self.temporaries.t0, - qv0=self.temporaries.qv0, - qi0=self.temporaries.qi0, - pmid0=self.temporaries.pmid0, + qtflx_out=self.locals.qtflx_out, + slflx_out=self.locals.slflx_out, + uflx_out=self.locals.uflx_out, + vflx_out=self.locals.vflx_out, + qt0=self.locals.qt0, + t0=self.locals.t0, + qv0=self.locals.qv0, + qi0=self.locals.qi0, + pmid0=self.locals.pmid0, tr0=self.tr0, - tr0_temp=self.temporaries.tr0_temp, + tr0_temp=self.locals.tr0_temp, sstr0=self.sstr0, - thl0=self.temporaries.thl0, - ssthl0=self.temporaries.ssthl0, - ssqt0=self.temporaries.ssqt0, - ssu0=self.temporaries.ssu0, - ssv0=self.temporaries.ssv0, - tscaleh=self.temporaries.tscaleh, + thl0=self.locals.thl0, + ssthl0=self.locals.ssthl0, + ssqt0=self.locals.ssqt0, + ssu0=self.locals.ssu0, + ssv0=self.locals.ssv0, + tscaleh=self.locals.tscaleh, dotransport=dotransport, - fer_out=self.temporaries.fer_out, - fdr_out=self.temporaries.fdr_out, + fer_out=self.locals.fer_out, + fdr_out=self.locals.fdr_out, tpert_out=tpert_out, qpert_out=qpert_out, ) self._compute_thv0_thvl0( - pmid0_in=self.temporaries.pmid0_in, - exnmid0_in=self.temporaries.exnmid0_in, - qv0_in=self.temporaries.qv0_in, - ql0_in=self.temporaries.ql0_in, - qi0_in=self.temporaries.qi0_in, - th0_in=self.temporaries.th0_in, - zmid0=self.temporaries.zmid0_in, - pifc0_in=self.temporaries.pifc0_in, - ssthl0=self.temporaries.ssthl0, - ssqt0=self.temporaries.ssqt0, - ese=self.saturation_vapor_pressure_table.ese, - esx=self.saturation_vapor_pressure_table.esx, - umf_out=self.temporaries.umf_out, - qtflx_out=self.temporaries.qtflx_out, - slflx_out=self.temporaries.slflx_out, - uflx_out=self.temporaries.uflx_out, - vflx_out=self.temporaries.vflx_out, - u0_in=self.temporaries.u0_in, - v0_in=self.temporaries.v0_in, + pmid0_in=self.locals.pmid0_in, + exnmid0_in=self.locals.exnmid0_in, + qv0_in=self.locals.qv0_in, + ql0_in=self.locals.ql0_in, + qi0_in=self.locals.qi0_in, + th0_in=self.locals.th0_in, + zmid0=self.locals.zmid0_in, + pifc0_in=self.locals.pifc0_in, + ssthl0=self.locals.ssthl0, + ssqt0=self.locals.ssqt0, + ese=self.ese, + esx=self.esx, + umf_out=self.locals.umf_out, + qtflx_out=self.locals.qtflx_out, + slflx_out=self.locals.slflx_out, + uflx_out=self.locals.uflx_out, + vflx_out=self.locals.vflx_out, + u0_in=self.locals.u0_in, + v0_in=self.locals.v0_in, k0=k0, condensation=self.condensation, dotransport=dotransport, - ssu0=self.temporaries.ssu0, - ssv0=self.temporaries.ssv0, + ssu0=self.locals.ssu0, + ssv0=self.locals.ssv0, tr0=self.tr0, sstr0=self.sstr0, tr0_o=self.tr0_o, @@ -7856,68 +7856,68 @@ def __call__( trten=self.trten, tru=self.tru, tru_emf=self.tru_emf, - umf_zint=self.temporaries.umf_zint, - emf=self.temporaries.emf, - slflx=self.temporaries.slflx, - qtflx=self.temporaries.qtflx, - uflx=self.temporaries.uflx, - vflx=self.temporaries.vflx, - thlu=self.temporaries.thlu, - qtu=self.temporaries.qtu, - uu=self.temporaries.uu, - vu=self.temporaries.vu, - wu=self.temporaries.wu, - thvu=self.temporaries.thvu, - thlu_emf=self.temporaries.thlu_emf, - qtu_emf=self.temporaries.qtu_emf, - uu_emf=self.temporaries.uu_emf, - vu_emf=self.temporaries.vu_emf, - uemf=self.temporaries.uemf, - thvl0bot=self.temporaries.thvl0bot, - thvl0top=self.temporaries.thvl0top, - thvl0=self.temporaries.thvl0, - qt0=self.temporaries.qt0, - t0=self.temporaries.t0, - qv0=self.temporaries.qv0, - ql0=self.temporaries.ql0, - qi0=self.temporaries.qi0, - thl0=self.temporaries.thl0, - thv0bot=self.temporaries.thv0bot, - thv0top=self.temporaries.thv0top, - uten=self.temporaries.uten, - vten=self.temporaries.vten, - s0=self.temporaries.s0, - qcu=self.temporaries.qcu, - qlu=self.temporaries.qlu, - qiu=self.temporaries.qiu, - cufrc=self.temporaries.cufrc, - ufrc=self.temporaries.ufrc, - qlten_det=self.temporaries.qlten_det, - qiten_det=self.temporaries.qiten_det, - qlten_sink=self.temporaries.qlten_sink, - qiten_sink=self.temporaries.qiten_sink, - sten=self.temporaries.sten, - slten=self.temporaries.slten, - qiten=self.temporaries.qiten, - qv0_o=self.temporaries.qv0_o, - ql0_o=self.temporaries.ql0_o, - qi0_o=self.temporaries.qi0_o, - t0_o=self.temporaries.t0_o, - s0_o=self.temporaries.s0_o, - u0_o=self.temporaries.u0_o, - v0_o=self.temporaries.v0_o, - qt0_o=self.temporaries.qt0_o, - thl0_o=self.temporaries.thl0_o, - thvl0_o=self.temporaries.thvl0_o, - ssthl0_o=self.temporaries.ssthl0_o, - ssqt0_o=self.temporaries.ssqt0_o, - thv0bot_o=self.temporaries.thv0bot_o, - thv0top_o=self.temporaries.thv0top_o, - thvl0bot_o=self.temporaries.thvl0bot_o, - thvl0top_o=self.temporaries.thvl0top_o, - ssu0_o=self.temporaries.ssu0_o, - ssv0_o=self.temporaries.ssv0_o, - cush_inout=self.temporaries.cush_inout, + umf_zint=self.locals.umf_zint, + emf=self.locals.emf, + slflx=self.locals.slflx, + qtflx=self.locals.qtflx, + uflx=self.locals.uflx, + vflx=self.locals.vflx, + thlu=self.locals.thlu, + qtu=self.locals.qtu, + uu=self.locals.uu, + vu=self.locals.vu, + wu=self.locals.wu, + thvu=self.locals.thvu, + thlu_emf=self.locals.thlu_emf, + qtu_emf=self.locals.qtu_emf, + uu_emf=self.locals.uu_emf, + vu_emf=self.locals.vu_emf, + uemf=self.locals.uemf, + thvl0bot=self.locals.thvl0bot, + thvl0top=self.locals.thvl0top, + thvl0=self.locals.thvl0, + qt0=self.locals.qt0, + t0=self.locals.t0, + qv0=self.locals.qv0, + ql0=self.locals.ql0, + qi0=self.locals.qi0, + thl0=self.locals.thl0, + thv0bot=self.locals.thv0bot, + thv0top=self.locals.thv0top, + uten=self.locals.uten, + vten=self.locals.vten, + s0=self.locals.s0, + qcu=self.locals.qcu, + qlu=self.locals.qlu, + qiu=self.locals.qiu, + cufrc=self.locals.cufrc, + ufrc=self.locals.ufrc, + qlten_det=self.locals.qlten_det, + qiten_det=self.locals.qiten_det, + qlten_sink=self.locals.qlten_sink, + qiten_sink=self.locals.qiten_sink, + sten=self.locals.sten, + slten=self.locals.slten, + qiten=self.locals.qiten, + qv0_o=self.locals.qv0_o, + ql0_o=self.locals.ql0_o, + qi0_o=self.locals.qi0_o, + t0_o=self.locals.t0_o, + s0_o=self.locals.s0_o, + u0_o=self.locals.u0_o, + v0_o=self.locals.v0_o, + qt0_o=self.locals.qt0_o, + thl0_o=self.locals.thl0_o, + thvl0_o=self.locals.thvl0_o, + ssthl0_o=self.locals.ssthl0_o, + ssqt0_o=self.locals.ssqt0_o, + thv0bot_o=self.locals.thv0bot_o, + thv0top_o=self.locals.thv0top_o, + thvl0bot_o=self.locals.thvl0bot_o, + thvl0top_o=self.locals.thvl0top_o, + ssu0_o=self.locals.ssu0_o, + ssv0_o=self.locals.ssv0_o, + cush_inout=self.locals.cush_inout, ) # This 'iteration' loop is for implicit CIN closure @@ -7927,76 +7927,76 @@ def __call__( # iterative cin calculation, because cumulus convection induces non-zero fluxes # even at interfaces below PBL top height through 'fluxbelowinv' calculation. - for it_cin in dace.nounroll(range(iter_cin)): + for it_cin in dace.nounroll(range(iter_cin)): # Dont forget to change itercin back iteration = int32(it_cin) self._find_pbl_height( iteration=iteration, - kpbl_in=self.temporaries.kpbl_in, + kpbl_in=self.locals.kpbl_in, k0=k0, condensation=self.condensation, - umf_out=self.temporaries.umf_out, - qtflx_out=self.temporaries.qtflx_out, - slflx_out=self.temporaries.slflx_out, - uflx_out=self.temporaries.uflx, - vflx_out=self.temporaries.vflx, - kinv=self.temporaries.kinv, + umf_out=self.locals.umf_out, + qtflx_out=self.locals.qtflx_out, + slflx_out=self.locals.slflx_out, + uflx_out=self.locals.uflx_out, + vflx_out=self.locals.vflx_out, + kinv=self.locals.kinv, cush=cush, - tscaleh=self.temporaries.tscaleh, - cush_inout=self.temporaries.cush_inout, + tscaleh=self.locals.tscaleh, + cush_inout=self.locals.cush_inout, ) self._find_pbl_averages( condensation=self.condensation, - thvl0bot=self.temporaries.thvl0bot, - thvl0top=self.temporaries.thvl0top, - kinv=self.temporaries.kinv, - pifc0=self.temporaries.pifc0_in, - tke_in=self.temporaries.tke_in, - u0=self.temporaries.u0_in, - v0=self.temporaries.v0_in, - thvl0=self.temporaries.thvl0, - zmid0=self.temporaries.zmid0_in, + thvl0bot=self.locals.thvl0bot, + thvl0top=self.locals.thvl0top, + kinv=self.locals.kinv, + pifc0=self.locals.pifc0_in, + tke_in=self.locals.tke_in, + u0=self.locals.u0_in, + v0=self.locals.v0_in, + thvl0=self.locals.thvl0, + zmid0=self.locals.zmid0_in, qtsrchgt=qtsrchgt, - qt0=self.temporaries.qt0, - thvlmin=self.temporaries.thvlmin, - tkeavg=self.temporaries.tkeavg, - uavg=self.temporaries.uavg, - vavg=self.temporaries.vavg, - thvlavg=self.temporaries.thvlavg, - qtavg=self.temporaries.qtavg, + qt0=self.locals.qt0, + thvlmin=self.locals.thvlmin, + tkeavg=self.locals.tkeavg, + uavg=self.locals.uavg, + vavg=self.locals.vavg, + thvlavg=self.locals.thvlavg, + qtavg=self.locals.qtavg, iteration=iteration, ) self._find_cumulus_characteristics( condensation=self.condensation, windsrcavg=windsrcavg, - pifc0=self.temporaries.pifc0_in, - t0=self.temporaries.t0, - qv0=self.temporaries.qv0, + pifc0=self.locals.pifc0_in, + t0=self.locals.t0, + qv0=self.locals.qv0, shfx=shfx, evap=evap, thlsrc_fac=thlsrc_fac, qtsrc_fac=qtsrc_fac, - qt0=self.temporaries.qt0, - qtavg=self.temporaries.qtavg, - thvlmin=self.temporaries.thvlmin, - uavg=self.temporaries.uavg, - vavg=self.temporaries.vavg, - kinv=self.temporaries.kinv, - u0=self.temporaries.u0_in, - v0=self.temporaries.v0_in, - ssu0=self.temporaries.ssu0, - ssv0=self.temporaries.ssv0, - pmid0=self.temporaries.pmid0_in, + qt0=self.locals.qt0, + qtavg=self.locals.qtavg, + thvlmin=self.locals.thvlmin, + uavg=self.locals.uavg, + vavg=self.locals.vavg, + kinv=self.locals.kinv, + u0=self.locals.u0_in, + v0=self.locals.v0_in, + ssu0=self.locals.ssu0, + ssv0=self.locals.ssv0, + pmid0=self.locals.pmid0_in, dotransport=dotransport, tr0=self.tr0, trsrc=self.trsrc, - qtsrc=self.temporaries.qtsrc, - thvlsrc=self.temporaries.thvlsrc, - thlsrc=self.temporaries.thlsrc, - usrc=self.temporaries.usrc, - vsrc=self.temporaries.vsrc, + qtsrc=self.locals.qtsrc, + thvlsrc=self.locals.thvlsrc, + thlsrc=self.locals.thlsrc, + usrc=self.locals.usrc, + vsrc=self.locals.vsrc, tpert_out=tpert_out, qpert_out=qpert_out, iteration=iteration, @@ -8004,138 +8004,140 @@ def __call__( self._find_klcl( condensation=self.condensation, - pifc0=self.temporaries.pifc0_in, - umf_out=self.temporaries.umf_out, - qtflx_out=self.temporaries.qtflx_out, - slflx_out=self.temporaries.slflx_out, - uflx_out=self.temporaries.uflx_out, - vflx_out=self.temporaries.vflx_out, - qtsrc=self.temporaries.qtsrc, - thlsrc=self.temporaries.thlsrc, - ese=self.saturation_vapor_pressure_table.ese, - esx=self.saturation_vapor_pressure_table.esx, + pifc0=self.locals.pifc0_in, + umf_out=self.locals.umf_out, + qtflx_out=self.locals.qtflx_out, + slflx_out=self.locals.slflx_out, + uflx_out=self.locals.uflx_out, + vflx_out=self.locals.vflx_out, + qtsrc=self.locals.qtsrc, + thlsrc=self.locals.thlsrc, + ese=self.ese, + esx=self.esx, k0=k0, - thl0=self.temporaries.thl0, - ssthl0=self.temporaries.ssthl0, - pmid0=self.temporaries.pmid0_in, - qt0=self.temporaries.qt0, - ssqt0=self.temporaries.ssqt0, - plcl=self.temporaries.plcl, - klcl=self.temporaries.klcl, - thl0lcl=self.temporaries.thl0lcl, - qt0lcl=self.temporaries.qt0lcl, - thv0lcl=self.temporaries.thv0lcl, - cush_inout=self.temporaries.cush_inout, + thl0=self.locals.thl0, + ssthl0=self.locals.ssthl0, + pmid0=self.locals.pmid0_in, + qt0=self.locals.qt0, + ssqt0=self.locals.ssqt0, + plcl=self.locals.plcl, + klcl=self.locals.klcl, + thl0lcl=self.locals.thl0lcl, + qt0lcl=self.locals.qt0lcl, + thv0lcl=self.locals.thv0lcl, + cush_inout=self.locals.cush_inout, iteration=iteration, ) self._compute_cin_cinlcl( condensation=self.condensation, stop_cin=self.stop_cin, - klcl=self.temporaries.klcl, - kinv=self.temporaries.kinv, - thvlsrc=self.temporaries.thvlsrc, - pifc0=self.temporaries.pifc0_in, - thv0bot=self.temporaries.thv0bot, - thv0top=self.temporaries.thv0top, - plcl=self.temporaries.plcl, - thv0lcl=self.temporaries.thv0lcl, - thlsrc=self.temporaries.thlsrc, - qtsrc=self.temporaries.qtsrc, - ese=self.saturation_vapor_pressure_table.ese, - esx=self.saturation_vapor_pressure_table.esx, - umf_out=self.temporaries.umf_out, - qtflx_out=self.temporaries.qtflx_out, - slflx_out=self.temporaries.slflx_out, - uflx_out=self.temporaries.uflx_out, - vflx_out=self.temporaries.vflx_out, - cin_IJ=self.temporaries.cin_IJ, - cinlcl_IJ=self.temporaries.cinlcl_IJ, - plfc_IJ=self.temporaries.plfc_IJ, - klfc_IJ=self.temporaries.klfc_IJ, - plfc=self.temporaries.plfc, - klfc=self.temporaries.klfc, - cin=self.temporaries.cin, - thvubot=self.temporaries.thvubot, - thvutop=self.temporaries.thvutop, + klcl=self.locals.klcl, + kinv=self.locals.kinv, + thvlsrc=self.locals.thvlsrc, + pifc0=self.locals.pifc0_in, + thv0bot=self.locals.thv0bot, + thv0top=self.locals.thv0top, + plcl=self.locals.plcl, + thv0lcl=self.locals.thv0lcl, + thlsrc=self.locals.thlsrc, + qtsrc=self.locals.qtsrc, + ese=self.ese, + esx=self.esx, + umf_out=self.locals.umf_out, + qtflx_out=self.locals.qtflx_out, + slflx_out=self.locals.slflx_out, + uflx_out=self.locals.uflx_out, + vflx_out=self.locals.vflx_out, + cin_IJ=self.locals.cin_IJ, + cinlcl_IJ=self.locals.cinlcl_IJ, + plfc_IJ=self.locals.plfc_IJ, + klfc_IJ=self.locals.klfc_IJ, + plfc=self.locals.plfc, + klfc=self.locals.klfc, + cin=self.locals.cin, + thvubot=self.locals.thvubot, + thvutop=self.locals.thvutop, k0=k0, iteration=iteration, rbuoy=rbuoy, rkfre=rkfre, - tkeavg=self.temporaries.tkeavg, + tkeavg=self.locals.tkeavg, epsvarw=epsvarw, - thvlmin=self.temporaries.thvlmin, - usrc=self.temporaries.usrc, - vsrc=self.temporaries.vsrc, + thvlmin=self.locals.thvlmin, + usrc=self.locals.usrc, + vsrc=self.locals.vsrc, dotransport=dotransport, trsrc=self.trsrc, trsrc_o=self.trsrc_o, - cin_i=self.temporaries.cin_i, - cinlcl_i=self.temporaries.cinlcl_i, - ke=self.temporaries.ke, - kinv_o=self.temporaries.kinv_o, - klcl_o=self.temporaries.klcl_o, - klfc_o=self.temporaries.klfc_o, - plcl_o=self.temporaries.plcl_o, - plfc_o=self.temporaries.plfc_o, - tkeavg_o=self.temporaries.tkeavg_o, - thvlmin_o=self.temporaries.thvlmin_o, - qtsrc_o=self.temporaries.qtsrc_o, - thvlsrc_o=self.temporaries.thvlsrc_o, - thlsrc_o=self.temporaries.thlsrc_o, - usrc_o=self.temporaries.usrc_o, - vsrc_o=self.temporaries.vsrc_o, - thv0lcl_o=self.temporaries.thv0lcl_o, - cinlcl=self.temporaries.cinlcl, - cush_inout=self.temporaries.cush_inout, + cin_i=self.locals.cin_i, + cinlcl_i=self.locals.cinlcl_i, + ke=self.locals.ke, + kinv_o=self.locals.kinv_o, + klcl_o=self.locals.klcl_o, + klfc_o=self.locals.klfc_o, + plcl_o=self.locals.plcl_o, + plfc_o=self.locals.plfc_o, + tkeavg_o=self.locals.tkeavg_o, + thvlmin_o=self.locals.thvlmin_o, + qtsrc_o=self.locals.qtsrc_o, + thvlsrc_o=self.locals.thvlsrc_o, + thlsrc_o=self.locals.thlsrc_o, + usrc_o=self.locals.usrc_o, + vsrc_o=self.locals.vsrc_o, + thv0lcl_o=self.locals.thv0lcl_o, + cinlcl=self.locals.cinlcl, + cush_inout=self.locals.cush_inout, ) + if iteration != 0: self._compute_del_CIN( condensation=self.condensation, - thvlmin_o=self.temporaries.thvlmin_o, - thvlmin_IJ=self.temporaries.thvlmin_IJ, - cin_IJ=self.temporaries.cin_IJ, - cinlcl_IJ=self.temporaries.cinlcl_IJ, - cin_i=self.temporaries.cin_i, - cinlcl_i=self.temporaries.cinlcl_i, + cin_IJ=self.locals.cin_IJ, + cinlcl_IJ=self.locals.cinlcl_IJ, + cin_i=self.locals.cin_i, + cinlcl_i=self.locals.cinlcl_i, use_CINcin=use_CINcin, - del_CIN=self.temporaries.del_CIN, + del_CIN=self.locals.del_CIN, ) + + # Dev note: The below stencil was broken in 3 because NVCC + # dies on compile with the amount of template-nest in GridTools self._avg_initial_and_final_cin1( condensation=self.condensation, - del_CIN=self.temporaries.del_CIN, - ke=self.temporaries.ke, - cin_i=self.temporaries.cin_i, + del_CIN=self.locals.del_CIN, + ke=self.locals.ke, + cin_i=self.locals.cin_i, use_CINcin=use_CINcin, - cin_IJ=self.temporaries.cin_IJ, - cinlcl_IJ=self.temporaries.cinlcl_IJ, - cinlcl_i=self.temporaries.cinlcl_i, - kinv=self.temporaries.kinv, - kinv_o=self.temporaries.kinv_o, - klcl=self.temporaries.klcl, - klcl_o=self.temporaries.klcl_o, - klfc=self.temporaries.klfc, - klfc_o=self.temporaries.klfc_o, - plcl=self.temporaries.plcl, - plcl_o=self.temporaries.plcl_o, - plfc=self.temporaries.plfc, - plfc_o=self.temporaries.plfc_o, - tkeavg=self.temporaries.tkeavg, - tkeavg_o=self.temporaries.tkeavg_o, - thvlmin=self.temporaries.thvlmin, - thvlmin_IJ=self.temporaries.thvlmin_IJ, - qtsrc=self.temporaries.qtsrc, - qtsrc_o=self.temporaries.qtsrc_o, - thvlsrc=self.temporaries.thvlsrc, - thvlsrc_o=self.temporaries.thvlsrc_o, - thlsrc=self.temporaries.thlsrc, - thlsrc_o=self.temporaries.thlsrc_o, - usrc=self.temporaries.usrc, - usrc_o=self.temporaries.usrc_o, - vsrc=self.temporaries.vsrc, - vsrc_o=self.temporaries.vsrc_o, - thv0lcl=self.temporaries.thv0lcl, - thv0lcl_o=self.temporaries.thv0lcl_o, + cin_IJ=self.locals.cin_IJ, + cinlcl_IJ=self.locals.cinlcl_IJ, + cinlcl_i=self.locals.cinlcl_i, + kinv=self.locals.kinv, + kinv_o=self.locals.kinv_o, + klcl=self.locals.klcl, + klcl_o=self.locals.klcl_o, + klfc=self.locals.klfc, + klfc_o=self.locals.klfc_o, + plcl=self.locals.plcl, + plcl_o=self.locals.plcl_o, + plfc=self.locals.plfc, + plfc_o=self.locals.plfc_o, + tkeavg=self.locals.tkeavg, + tkeavg_o=self.locals.tkeavg_o, + thvlmin=self.locals.thvlmin, + thvlmin_o=self.locals.thvlmin_o, + qtsrc=self.locals.qtsrc, + qtsrc_o=self.locals.qtsrc_o, + thvlsrc=self.locals.thvlsrc, + thvlsrc_o=self.locals.thvlsrc_o, + thlsrc=self.locals.thlsrc, + thlsrc_o=self.locals.thlsrc_o, + usrc=self.locals.usrc, + usrc_o=self.locals.usrc_o, + vsrc=self.locals.vsrc, + vsrc_o=self.locals.vsrc_o, + thv0lcl=self.locals.thv0lcl, + thv0lcl_o=self.locals.thv0lcl_o, dotransport=dotransport, trsrc=self.trsrc, trsrc_o=self.trsrc_o, @@ -8143,701 +8145,701 @@ def __call__( tr0_o=self.tr0_o, sstr0=self.sstr0, sstr0_o=self.sstr0_o, - qv0=self.temporaries.qv0, - qv0_o=self.temporaries.qv0_o, - ql0=self.temporaries.ql0, - ql0_o=self.temporaries.ql0_o, - qi0=self.temporaries.qi0, - qi0_o=self.temporaries.qi0_o, - t0=self.temporaries.t0, - t0_o=self.temporaries.t0_o, - s0=self.temporaries.s0, - s0_o=self.temporaries.s0_o, - u0=self.temporaries.u0, - u0_o=self.temporaries.u0_o, - v0=self.temporaries.v0, - v0_o=self.temporaries.v0_o, - qt0=self.temporaries.qt0, - qt0_o=self.temporaries.qt0_o, - thl0=self.temporaries.thl0, - thl0_o=self.temporaries.thl0_o, - thvl0=self.temporaries.thvl0, - thvl0_o=self.temporaries.thvl0_o, - ssthl0=self.temporaries.ssthl0, - ssthl0_o=self.temporaries.ssthl0_o, - ssqt0=self.temporaries.ssqt0, - ssqt0_o=self.temporaries.ssqt0_o, - thv0bot=self.temporaries.thv0bot, - thv0bot_o=self.temporaries.thv0bot_o, - thv0top=self.temporaries.thv0top, - thv0top_o=self.temporaries.thv0top_o, - thvl0bot=self.temporaries.thvl0bot, - thvl0bot_o=self.temporaries.thvl0bot_o, - thvl0top=self.temporaries.thvl0top, - thvl0top_o=self.temporaries.thvl0top_o, - ssu0=self.temporaries.ssu0, - ssu0_o=self.temporaries.ssu0_o, - ssv0=self.temporaries.ssv0, - ssv0_o=self.temporaries.ssv0_o, + qv0=self.locals.qv0, + qv0_o=self.locals.qv0_o, + ql0=self.locals.ql0, + ql0_o=self.locals.ql0_o, + qi0=self.locals.qi0, + qi0_o=self.locals.qi0_o, + t0=self.locals.t0, + t0_o=self.locals.t0_o, + s0=self.locals.s0, + s0_o=self.locals.s0_o, + u0=self.locals.u0, + u0_o=self.locals.u0_o, + v0=self.locals.v0, + v0_o=self.locals.v0_o, + qt0=self.locals.qt0, + qt0_o=self.locals.qt0_o, + thl0=self.locals.thl0, + thl0_o=self.locals.thl0_o, + thvl0=self.locals.thvl0, + thvl0_o=self.locals.thvl0_o, + ssthl0=self.locals.ssthl0, + ssthl0_o=self.locals.ssthl0_o, + ssqt0=self.locals.ssqt0, + ssqt0_o=self.locals.ssqt0_o, + thv0bot=self.locals.thv0bot, + thv0bot_o=self.locals.thv0bot_o, + thv0top=self.locals.thv0top, + thv0top_o=self.locals.thv0top_o, + thvl0bot=self.locals.thvl0bot, + thvl0bot_o=self.locals.thvl0bot_o, + thvl0top=self.locals.thvl0top, + thvl0top_o=self.locals.thvl0top_o, + ssu0=self.locals.ssu0, + ssu0_o=self.locals.ssu0_o, + ssv0=self.locals.ssv0, + ssv0_o=self.locals.ssv0_o, ) + self._avg_initial_and_final_cin2( condensation=self.condensation, - del_CIN=self.temporaries.del_CIN, - umf_zint=self.temporaries.umf_zint, - dcm=self.temporaries.dcm, - emf=self.temporaries.emf, - slflx=self.temporaries.slflx, - qtflx=self.temporaries.qtflx, - uflx=self.temporaries.uflx, - vflx=self.temporaries.vflx, - qvten=self.temporaries.qvten, - qlten=self.temporaries.qlten, - qiten=self.temporaries.qiten, - sten=self.temporaries.sten, - uten=self.temporaries.uten, - vten=self.temporaries.vten, - qrten=self.temporaries.qrten, - qsten=self.temporaries.qsten, - dwten=self.temporaries.dwten, - diten=self.temporaries.diten, - cufrc=self.temporaries.cufrc, - qcu=self.temporaries.qcu, - qlu=self.temporaries.qlu, - qiu=self.temporaries.qiu, - fer=self.temporaries.fer, - fdr=self.temporaries.fdr, - xco=self.temporaries.xco, - qc=self.temporaries.qc, - slten=self.temporaries.slten, - ufrc=self.temporaries.ufrc, - thlu=self.temporaries.thlu, - qtu=self.temporaries.qtu, - uu=self.temporaries.uu, - vu=self.temporaries.vu, - wu=self.temporaries.wu, - thvu=self.temporaries.thvu, - thlu_emf=self.temporaries.thlu_emf, - qtu_emf=self.temporaries.qtu_emf, - uu_emf=self.temporaries.uu_emf, - vu_emf=self.temporaries.vu_emf, + del_CIN=self.locals.del_CIN, + umf_zint=self.locals.umf_zint, + dcm=self.locals.dcm, + emf=self.locals.emf, + slflx=self.locals.slflx, + qtflx=self.locals.qtflx, + uflx=self.locals.uflx, + vflx=self.locals.vflx, + qvten=self.locals.qvten, + qlten=self.locals.qlten, + qiten=self.locals.qiten, + sten=self.locals.sten, + uten=self.locals.uten, + vten=self.locals.vten, + qrten=self.locals.qrten, + qsten=self.locals.qsten, + dwten=self.locals.dwten, + diten=self.locals.diten, + cufrc=self.locals.cufrc, + qcu=self.locals.qcu, + qlu=self.locals.qlu, + qiu=self.locals.qiu, + fer=self.locals.fer, + fdr=self.locals.fdr, + xco=self.locals.xco, + qc=self.locals.qc, + slten=self.locals.slten, + ufrc=self.locals.ufrc, + thlu=self.locals.thlu, + qtu=self.locals.qtu, + uu=self.locals.uu, + vu=self.locals.vu, + wu=self.locals.wu, + thvu=self.locals.thvu, + thlu_emf=self.locals.thlu_emf, + qtu_emf=self.locals.qtu_emf, + uu_emf=self.locals.uu_emf, + vu_emf=self.locals.vu_emf, dotransport=dotransport, trflx=self.trflx, trten=self.trten, tru=self.tru, tru_emf=self.tru_emf, ) + self._avg_initial_and_final_cin3( condensation=self.condensation, - del_CIN=self.temporaries.del_CIN, - umf_out=self.temporaries.umf_out, - umf_s=self.temporaries.umf_s, - kinv=self.temporaries.kinv, - zifc0=self.temporaries.zifc0_in, - dcm_out=self.temporaries.dcm_out, - dcm_s=self.temporaries.dcm_s, - qvten_out=self.temporaries.qvten_out, - qvten_s=self.temporaries.qvten_s, - qlten_out=self.temporaries.qlten_out, - qlten_s=self.temporaries.qlten_s, - sten_out=self.temporaries.sten_out, - sten_s=self.temporaries.sten_s, - uten_out=self.temporaries.uten_out, - uten_s=self.temporaries.uten_s, - vten_out=self.temporaries.vten_out, - vten_s=self.temporaries.vten_s, - qiten_out=self.temporaries.qiten_out, - qiten_s=self.temporaries.qiten_s, - qrten_out=self.temporaries.qrten_out, - qrten_s=self.temporaries.qrten_s, - qsten_out=self.temporaries.qsten_out, - qsten_s=self.temporaries.qsten_s, - qldet_out=self.temporaries.qldet_out, - qldet_s=self.temporaries.qldet_s, - qidet_out=self.temporaries.qidet_out, - qidet_s=self.temporaries.qidet_s, - qlsub_out=self.temporaries.qlsub_out, - qlsub_s=self.temporaries.qlsub_s, - qisub_out=self.temporaries.qisub_out, - qisub_s=self.temporaries.qisub_s, - cush_inout=self.temporaries.cush_inout, - cush_s=self.temporaries.cush_s, - cufrc_out=self.temporaries.cufrc_out, - cufrc_s=self.temporaries.cufrc_s, - qtflx_out=self.temporaries.qtflx_out, - qtflx_s=self.temporaries.qtflx_s, - slflx_out=self.temporaries.slflx_out, - slflx_s=self.temporaries.slflx_s, - uflx_out=self.temporaries.uflx_out, - uflx_s=self.temporaries.uflx_s, - vflx_out=self.temporaries.vflx_out, - vflx_s=self.temporaries.vflx_s, - fer_out=self.temporaries.fer_out, - fer_s=self.temporaries.fer_s, - fdr_out=self.temporaries.fdr_out, - fdr_s=self.temporaries.fdr_s, + del_CIN=self.locals.del_CIN, + umf_out=self.locals.umf_out, + umf_s=self.locals.umf_s, + kinv=self.locals.kinv, + zifc0=self.locals.zifc0_in, + dcm_out=self.locals.dcm_out, + dcm_s=self.locals.dcm_s, + qvten_out=self.locals.qvten_out, + qvten_s=self.locals.qvten_s, + qlten_out=self.locals.qlten_out, + qlten_s=self.locals.qlten_s, + sten_out=self.locals.sten_out, + sten_s=self.locals.sten_s, + uten_out=self.locals.uten_out, + uten_s=self.locals.uten_s, + vten_out=self.locals.vten_out, + vten_s=self.locals.vten_s, + qiten_out=self.locals.qiten_out, + qiten_s=self.locals.qiten_s, + qrten_out=self.locals.qrten_out, + qrten_s=self.locals.qrten_s, + qsten_out=self.locals.qsten_out, + qsten_s=self.locals.qsten_s, + qldet_out=self.locals.qldet_out, + qldet_s=self.locals.qldet_s, + qidet_out=self.locals.qidet_out, + qidet_s=self.locals.qidet_s, + qlsub_out=self.locals.qlsub_out, + qlsub_s=self.locals.qlsub_s, + qisub_out=self.locals.qisub_out, + qisub_s=self.locals.qisub_s, + cush_inout=self.locals.cush_inout, + cush_s=self.locals.cush_s, + cufrc_out=self.locals.cufrc_out, + cufrc_s=self.locals.cufrc_s, + qtflx_out=self.locals.qtflx_out, + qtflx_s=self.locals.qtflx_s, + slflx_out=self.locals.slflx_out, + slflx_s=self.locals.slflx_s, + uflx_out=self.locals.uflx_out, + uflx_s=self.locals.uflx_s, + vflx_out=self.locals.vflx_out, + vflx_s=self.locals.vflx_s, + fer_out=self.locals.fer_out, + fer_s=self.locals.fer_s, + fdr_out=self.locals.fdr_out, + fdr_s=self.locals.fdr_s, ) self._define_prel_krel( condensation=self.condensation, iteration=iteration, - klcl=self.temporaries.klcl, - kinv=self.temporaries.kinv, - pifc0=self.temporaries.pifc0_in, - thv0bot=self.temporaries.thv0bot, - plcl=self.temporaries.plcl, - thv0lcl=self.temporaries.thv0lcl, - krel=self.temporaries.krel, - prel=self.temporaries.prel, - thv0rel=self.temporaries.thv0rel, + klcl=self.locals.klcl, + kinv=self.locals.kinv, + pifc0=self.locals.pifc0_in, + thv0bot=self.locals.thv0bot, + plcl=self.locals.plcl, + thv0lcl=self.locals.thv0lcl, + krel=self.locals.krel, + prel=self.locals.prel, + thv0rel=self.locals.thv0rel, ) self._calc_cumulus_base_mass_flux( condensation=self.condensation, iteration=iteration, use_CINcin=use_CINcin, - cin_IJ=self.temporaries.cin_IJ, + cin_IJ=self.locals.cin_IJ, rbuoy=rbuoy, - cinlcl_IJ=self.temporaries.cinlcl_IJ, + cinlcl_IJ=self.locals.cinlcl_IJ, rkfre=rkfre, - tkeavg=self.temporaries.tkeavg, + tkeavg=self.locals.tkeavg, epsvarw=epsvarw, - umf_out=self.temporaries.umf_out, - qtflx_out=self.temporaries.qtflx_out, - slflx_out=self.temporaries.slflx_out, - uflx_out=self.temporaries.uflx_out, - vflx_out=self.temporaries.vflx_out, - kinv=self.temporaries.kinv, - pifc0=self.temporaries.pifc0_in, - thv0top=self.temporaries.thv0top, - exnifc0=self.temporaries.exnifc0_in, - dp0=self.temporaries.dp0_in, + umf_out=self.locals.umf_out, + qtflx_out=self.locals.qtflx_out, + slflx_out=self.locals.slflx_out, + uflx_out=self.locals.uflx_out, + vflx_out=self.locals.vflx_out, + kinv=self.locals.kinv, + pifc0=self.locals.pifc0_in, + thv0top=self.locals.thv0top, + exnifc0=self.locals.exnifc0_in, + dp0=self.locals.dp0_in, dt=dt, mumin1=mumin1, rmaxfrac=rmaxfrac, - winv=self.temporaries.winv, - cbmf=self.temporaries.cbmf, - rho0inv=self.temporaries.rho0inv, - ufrcinv=self.temporaries.ufrcinv, - wcrit=self.temporaries.wcrit, - cush_inout=self.temporaries.cush_inout, + winv=self.locals.winv, + cbmf=self.locals.cbmf, + rho0inv=self.locals.rho0inv, + ufrcinv=self.locals.ufrcinv, + wcrit=self.locals.wcrit, + cush_inout=self.locals.cush_inout, ) self._define_updraft_properties( condensation=self.condensation, iteration=iteration, - winv=self.temporaries.winv, - cinlcl_IJ=self.temporaries.cinlcl_IJ, + winv=self.locals.winv, + cinlcl_IJ=self.locals.cinlcl_IJ, rbuoy=rbuoy, - umf_out=self.temporaries.umf_out, - qtflx_out=self.temporaries.qtflx_out, - slflx_out=self.temporaries.slflx_out, - uflx_out=self.temporaries.uflx_out, - vflx_out=self.temporaries.vflx_out, - cbmf=self.temporaries.cbmf, - rho0inv=self.temporaries.rho0inv, - krel=self.temporaries.krel, - ufrc=self.temporaries.ufrc, - ufrcinv=self.temporaries.ufrcinv, - kinv=self.temporaries.kinv, - umf_zint=self.temporaries.umf_zint, - wu=self.temporaries.wu, - emf=self.temporaries.emf, - thlu=self.temporaries.thlu, - qtu=self.temporaries.qtu, - thlsrc=self.temporaries.thlsrc, - qtsrc=self.temporaries.qtsrc, - prel=self.temporaries.prel, - ese=self.saturation_vapor_pressure_table.ese, - esx=self.saturation_vapor_pressure_table.esx, - thvu=self.temporaries.thvu, - wlcl=self.temporaries.wlcl, - ufrclcl=self.temporaries.ufrclcl, - cush_inout=self.temporaries.cush_inout, + umf_out=self.locals.umf_out, + qtflx_out=self.locals.qtflx_out, + slflx_out=self.locals.slflx_out, + uflx_out=self.locals.uflx_out, + vflx_out=self.locals.vflx_out, + cbmf=self.locals.cbmf, + rho0inv=self.locals.rho0inv, + krel=self.locals.krel, + ufrc=self.locals.ufrc, + ufrcinv=self.locals.ufrcinv, + kinv=self.locals.kinv, + umf_zint=self.locals.umf_zint, + wu=self.locals.wu, + emf=self.locals.emf, + thlu=self.locals.thlu, + qtu=self.locals.qtu, + thlsrc=self.locals.thlsrc, + qtsrc=self.locals.qtsrc, + prel=self.locals.prel, + ese=self.ese, + esx=self.esx, + thvu=self.locals.thvu, + wlcl=self.locals.wlcl, + ufrclcl=self.locals.ufrclcl, + cush_inout=self.locals.cush_inout, ) self._define_env_properties( condensation=self.condensation, iteration=iteration, - krel=self.temporaries.krel, - kinv=self.temporaries.kinv, + krel=self.locals.krel, + kinv=self.locals.kinv, PGFc=PGFc, - ssu0=self.temporaries.ssu0, - ssv0=self.temporaries.ssv0, - prel=self.temporaries.prel, - pifc0=self.temporaries.pifc0_in, - uu=self.temporaries.uu, - vu=self.temporaries.vu, - usrc=self.temporaries.usrc, - vsrc=self.temporaries.vsrc, + ssu0=self.locals.ssu0, + ssv0=self.locals.ssv0, + prel=self.locals.prel, + pifc0=self.locals.pifc0_in, + uu=self.locals.uu, + vu=self.locals.vu, + usrc=self.locals.usrc, + vsrc=self.locals.vsrc, dotransport=dotransport, tru=self.tru, trsrc=self.trsrc, - thv0rel=self.temporaries.thv0rel, - thl0=self.temporaries.thl0, - ssthl0=self.temporaries.ssthl0, - pmid0=self.temporaries.pmid0_in, - qt0=self.temporaries.qt0, - ssqt0=self.temporaries.ssqt0, - u0=self.temporaries.u0_in, - v0=self.temporaries.v0_in, + thv0rel=self.locals.thv0rel, + thl0=self.locals.thl0, + ssthl0=self.locals.ssthl0, + pmid0=self.locals.pmid0_in, + qt0=self.locals.qt0, + ssqt0=self.locals.ssqt0, + u0=self.locals.u0_in, + v0=self.locals.v0_in, tre=self.tre, tr0=self.tr0, sstr0=self.sstr0, - uplus=self.temporaries.uplus, - vplus=self.temporaries.vplus, - uplus_3D=self.temporaries.uplus_3D, - vplus_3D=self.temporaries.vplus_3D, - qsat_pe=self.temporaries.qsat_pe, - pe=self.temporaries.pe, - thle=self.temporaries.thle, - qte=self.temporaries.qte, - dpe=self.temporaries.dpe, - exne=self.temporaries.exne, - thvebot=self.temporaries.thvebot, - ue=self.temporaries.ue, - ve=self.temporaries.ve, + uplus=self.locals.uplus, + vplus=self.locals.vplus, + uplus_3D=self.locals.uplus_3D, + vplus_3D=self.locals.vplus_3D, + qsat_pe=self.locals.qsat_pe, + pe=self.locals.pe, + thle=self.locals.thle, + qte=self.locals.qte, + dpe=self.locals.dpe, + exne=self.locals.exne, + thvebot=self.locals.thvebot, + ue=self.locals.ue, + ve=self.locals.ve, ) self._buoyancy_sorting( condensation=self.condensation, - tscaleh=self.temporaries.tscaleh, - krel=self.temporaries.krel, - wlcl=self.temporaries.wlcl, - prel=self.temporaries.prel, - pifc0=self.temporaries.pifc0_in, - thv0rel=self.temporaries.thv0rel, - thl0=self.temporaries.thl0, - ssthl0=self.temporaries.ssthl0, - pmid0=self.temporaries.pmid0_in, - qt0=self.temporaries.qt0, - ssqt0=self.temporaries.ssqt0, - u0=self.temporaries.u0_in, - v0=self.temporaries.v0_in, - ssu0=self.temporaries.ssu0, - ssv0=self.temporaries.ssv0, + tscaleh=self.locals.tscaleh, + krel=self.locals.krel, + wlcl=self.locals.wlcl, + prel=self.locals.prel, + pifc0=self.locals.pifc0_in, + thv0rel=self.locals.thv0rel, + thl0=self.locals.thl0, + ssthl0=self.locals.ssthl0, + pmid0=self.locals.pmid0_in, + qt0=self.locals.qt0, + ssqt0=self.locals.ssqt0, + u0=self.locals.u0_in, + v0=self.locals.v0_in, + ssu0=self.locals.ssu0, + ssv0=self.locals.ssv0, dotransport=dotransport, tre=self.tre, tr0=self.tr0, sstr0=self.sstr0, k0=k0, - thlu=self.temporaries.thlu, - qtu=self.temporaries.qtu, - wu=self.temporaries.wu, + thlu=self.locals.thlu, + qtu=self.locals.qtu, + wu=self.locals.wu, niter_xc=niter_xc, - ese=self.saturation_vapor_pressure_table.ese, - esx=self.saturation_vapor_pressure_table.esx, - umf_out=self.temporaries.umf_out, - qtflx_out=self.temporaries.qtflx_out, - slflx_out=self.temporaries.slflx_out, - uflx_out=self.temporaries.uflx_out, - vflx_out=self.temporaries.vflx_out, - qsat_pe=self.temporaries.qsat_pe, + ese=self.ese, + esx=self.esx, + umf_out=self.locals.umf_out, + qtflx_out=self.locals.qtflx_out, + slflx_out=self.locals.slflx_out, + uflx_out=self.locals.uflx_out, + vflx_out=self.locals.vflx_out, + qsat_pe=self.locals.qsat_pe, criqc=criqc, cridist_opt=cridist_opt, rle=rle, - zifc0=self.temporaries.zifc0_in, + zifc0=self.locals.zifc0_in, rbuoy=rbuoy, mixscale=mixscale, rkm=rkm, - zmid0=self.temporaries.zmid0_in, + zmid0=self.locals.zmid0_in, detrhgt=detrhgt, - thlue=self.temporaries.thlue, - qtue=self.temporaries.qtue, - wue=self.temporaries.wue, - wtwb=self.temporaries.wtwb, - dp0=self.temporaries.dp0_in, + thlue=self.locals.thlue, + qtue=self.locals.qtue, + wue=self.locals.wue, + wtwb=self.locals.wtwb, + dp0=self.locals.dp0_in, dt=dt, - thv0bot=self.temporaries.thv0bot, - exnmid0=self.temporaries.exnmid0_in, + thv0bot=self.locals.thv0bot, + exnmid0=self.locals.exnmid0_in, rmaxfrac=rmaxfrac, - thv0top=self.temporaries.thv0top, - exnifc0=self.temporaries.exnifc0_in, + thv0top=self.locals.thv0top, + exnifc0=self.locals.exnifc0_in, use_self_detrain=use_self_detrain, rdrag=rdrag, PGFc=PGFc, tru=self.tru, - umf_zint=self.temporaries.umf_zint, - emf=self.temporaries.emf, - thvu=self.temporaries.thvu, - rei=self.temporaries.rei, - uu=self.temporaries.uu, - vu=self.temporaries.vu, - ufrc=self.temporaries.ufrc, - pe=self.temporaries.pe, - thle=self.temporaries.thle, - qte=self.temporaries.qte, - dpe=self.temporaries.dpe, - exne=self.temporaries.exne, - thvebot=self.temporaries.thvebot, - ue=self.temporaries.ue, - ve=self.temporaries.ve, - drage=self.temporaries.drage, - bogbot=self.temporaries.bogbot, - bogtop=self.temporaries.bogtop, - kpen_IJ=self.temporaries.kpen_IJ, - rhomid0j=self.temporaries.rhomid0j, - kbup_IJ=self.temporaries.kbup_IJ, - fer=self.temporaries.fer, - fdr=self.temporaries.fdr, - dwten=self.temporaries.dwten, - diten=self.temporaries.diten, - dcm=self.temporaries.dcm, - xco=self.temporaries.xco, - cush_inout=self.temporaries.cush_inout, + umf_zint=self.locals.umf_zint, + emf=self.locals.emf, + thvu=self.locals.thvu, + rei=self.locals.rei, + uu=self.locals.uu, + vu=self.locals.vu, + ufrc=self.locals.ufrc, + pe=self.locals.pe, + thle=self.locals.thle, + qte=self.locals.qte, + dpe=self.locals.dpe, + exne=self.locals.exne, + thvebot=self.locals.thvebot, + ue=self.locals.ue, + ve=self.locals.ve, + drage=self.locals.drage, + bogbot=self.locals.bogbot, + bogtop=self.locals.bogtop, + kpen_IJ=self.locals.kpen_IJ, + rhomid0j=self.locals.rhomid0j, + kbup_IJ=self.locals.kbup_IJ, + fer=self.locals.fer, + fdr=self.locals.fdr, + dwten=self.locals.dwten, + diten=self.locals.diten, + dcm=self.locals.dcm, + xco=self.locals.xco, + cush_inout=self.locals.cush_inout, stop_buoyancy_sort=self.stop_buoyancy_sort, iteration=iteration, ) self._calc_ppen( condensation=self.condensation, - drage=self.temporaries.drage, - bogbot=self.temporaries.bogbot, - bogtop=self.temporaries.bogtop, - pifc0=self.temporaries.pifc0_in, - kpen_IJ=self.temporaries.kpen_IJ, - kpen=self.temporaries.kpen, - wu=self.temporaries.wu, - rhomid0j=self.temporaries.rhomid0j, - dp0=self.temporaries.dp0_in, - wtwb=self.temporaries.wtwb, - ppen=self.temporaries.ppen, + drage=self.locals.drage, + bogbot=self.locals.bogbot, + bogtop=self.locals.bogtop, + pifc0=self.locals.pifc0_in, + kpen_IJ=self.locals.kpen_IJ, + kpen=self.locals.kpen, + wu=self.locals.wu, + rhomid0j=self.locals.rhomid0j, + dp0=self.locals.dp0_in, + wtwb=self.locals.wtwb, + ppen=self.locals.ppen, iteration=iteration, ) self._recalc_condensate( condensation=self.condensation, - fer=self.temporaries.fer, - kpen=self.temporaries.kpen, - ppen=self.temporaries.ppen, - thlu=self.temporaries.thlu, - thl0=self.temporaries.thl0, - ssthl0=self.temporaries.ssthl0, - qtu=self.temporaries.qtu, - qt0=self.temporaries.qt0, - ssqt0=self.temporaries.ssqt0, - pifc0=self.temporaries.pifc0_in, - ese=self.saturation_vapor_pressure_table.ese, - esx=self.saturation_vapor_pressure_table.esx, - umf_out=self.temporaries.umf_out, - qtflx_out=self.temporaries.qtflx_out, - slflx_out=self.temporaries.slflx_out, - uflx_out=self.temporaries.uflx_out, - vflx_out=self.temporaries.vflx_out, + fer=self.locals.fer, + kpen=self.locals.kpen, + ppen=self.locals.ppen, + thlu=self.locals.thlu, + thl0=self.locals.thl0, + ssthl0=self.locals.ssthl0, + qtu=self.locals.qtu, + qt0=self.locals.qt0, + ssqt0=self.locals.ssqt0, + pifc0=self.locals.pifc0_in, + ese=self.ese, + esx=self.esx, + umf_out=self.locals.umf_out, + qtflx_out=self.locals.qtflx_out, + slflx_out=self.locals.slflx_out, + uflx_out=self.locals.uflx_out, + vflx_out=self.locals.vflx_out, criqc=criqc, - thv0bot=self.temporaries.thv0bot, - thv0top=self.temporaries.thv0top, - exnifc0=self.temporaries.exnifc0_in, - zifc0=self.temporaries.zifc0_in, - kbup_IJ=self.temporaries.kbup_IJ, - kbup=self.temporaries.kbup, - krel=self.temporaries.krel, + thv0bot=self.locals.thv0bot, + thv0top=self.locals.thv0top, + exnifc0=self.locals.exnifc0_in, + zifc0=self.locals.zifc0_in, + kbup_IJ=self.locals.kbup_IJ, + kbup=self.locals.kbup, + krel=self.locals.krel, k0=k0, - umf_zint=self.temporaries.umf_zint, - emf=self.temporaries.emf, - ufrc=self.temporaries.ufrc, - dwten=self.temporaries.dwten, - diten=self.temporaries.diten, - dwten_temp=self.temporaries.dwten_temp, - diten_temp=self.temporaries.diten_temp, - thlu_top=self.temporaries.thlu_top, - qtu_top=self.temporaries.qtu_top, - cldhgt=self.temporaries.cldhgt, - fdr=self.temporaries.fdr, - umf_temp=self.temporaries.umf_temp, - xco=self.temporaries.xco, + umf_zint=self.locals.umf_zint, + emf=self.locals.emf, + ufrc=self.locals.ufrc, + dwten=self.locals.dwten, + diten=self.locals.diten, + dwten_temp=self.locals.dwten_temp, + diten_temp=self.locals.diten_temp, + thlu_top=self.locals.thlu_top, + qtu_top=self.locals.qtu_top, + cldhgt=self.locals.cldhgt, + fdr=self.locals.fdr, + umf_temp=self.locals.umf_temp, + xco=self.locals.xco, cush=cush, - cush_inout=self.temporaries.cush_inout, + cush_inout=self.locals.cush_inout, iteration=iteration, ) self._calc_entrainment_mass_flux( condensation=self.condensation, k0=k0, - thlu=self.temporaries.thlu, - qtu=self.temporaries.qtu, - uu=self.temporaries.uu, - vu=self.temporaries.vu, + thlu=self.locals.thlu, + qtu=self.locals.qtu, + uu=self.locals.uu, + vu=self.locals.vu, tru=self.tru, dotransport=dotransport, tru_emf=self.tru_emf, - kpen=self.temporaries.kpen, - kbup=self.temporaries.kbup, - pifc0=self.temporaries.pifc0_in, - thv0bot=self.temporaries.thv0bot, - thv0top=self.temporaries.thv0top, - exnifc0=self.temporaries.exnifc0_in, - umf_zint=self.temporaries.umf_zint, - ppen=self.temporaries.ppen, - rei=self.temporaries.rei, + kpen=self.locals.kpen, + kbup=self.locals.kbup, + pifc0=self.locals.pifc0_in, + thv0bot=self.locals.thv0bot, + thv0top=self.locals.thv0top, + exnifc0=self.locals.exnifc0_in, + umf_zint=self.locals.umf_zint, + ppen=self.locals.ppen, + rei=self.locals.rei, rpen=rpen, - dp0=self.temporaries.dp0_in, + dp0=self.locals.dp0_in, dt=dt, - thl0=self.temporaries.thl0, - ssthl0=self.temporaries.ssthl0, - pmid0=self.temporaries.pmid0_in, - qt0=self.temporaries.qt0, - ssqt0=self.temporaries.ssqt0, - u0=self.temporaries.u0_in, - ssu0=self.temporaries.ssu0, - v0=self.temporaries.v0_in, - ssv0=self.temporaries.ssv0, + thl0=self.locals.thl0, + ssthl0=self.locals.ssthl0, + pmid0=self.locals.pmid0_in, + qt0=self.locals.qt0, + ssqt0=self.locals.ssqt0, + u0=self.locals.u0_in, + ssu0=self.locals.ssu0, + v0=self.locals.v0_in, + ssv0=self.locals.ssv0, tr0=self.tr0, sstr0=self.sstr0, use_cumpenent=use_cumpenent, - thlu_emf=self.temporaries.thlu_emf, - qtu_emf=self.temporaries.qtu_emf, - uu_emf=self.temporaries.uu_emf, - vu_emf=self.temporaries.vu_emf, - emf=self.temporaries.emf, + thlu_emf=self.locals.thlu_emf, + qtu_emf=self.locals.qtu_emf, + uu_emf=self.locals.uu_emf, + vu_emf=self.locals.vu_emf, + emf=self.locals.emf, iteration=iteration, ) self._calc_pbl_fluxes( condensation=self.condensation, - qtsrc=self.temporaries.qtsrc, - qt0=self.temporaries.qt0, - ssqt0=self.temporaries.ssqt0, - pifc0=self.temporaries.pifc0_in, - pmid0=self.temporaries.pmid0_in, - kinv=self.temporaries.kinv, - cbmf=self.temporaries.cbmf, + qtsrc=self.locals.qtsrc, + qt0=self.locals.qt0, + ssqt0=self.locals.ssqt0, + pifc0=self.locals.pifc0_in, + pmid0=self.locals.pmid0_in, + kinv=self.locals.kinv, + cbmf=self.locals.cbmf, dt=dt, - xflx=self.temporaries.xflx, - qtflx=self.temporaries.qtflx, - thlsrc=self.temporaries.thlsrc, - thl0=self.temporaries.thl0, - ssthl0=self.temporaries.ssthl0, - exnifc0=self.temporaries.exnifc0_in, - usrc=self.temporaries.usrc, - u0=self.temporaries.u0_in, - ssu0=self.temporaries.ssu0, - vsrc=self.temporaries.vsrc, - v0=self.temporaries.v0_in, - ssv0=self.temporaries.ssv0, + xflx=self.locals.xflx, + qtflx=self.locals.qtflx, + thlsrc=self.locals.thlsrc, + thl0=self.locals.thl0, + ssthl0=self.locals.ssthl0, + exnifc0=self.locals.exnifc0_in, + usrc=self.locals.usrc, + u0=self.locals.u0_in, + ssu0=self.locals.ssu0, + vsrc=self.locals.vsrc, + v0=self.locals.v0_in, + ssv0=self.locals.ssv0, dotransport=dotransport, trsrc=self.trsrc, tr0=self.tr0, sstr0=self.sstr0, trflx=self.trflx, - uflx=self.temporaries.uflx, - vflx=self.temporaries.vflx, - slflx=self.temporaries.slflx, + uflx=self.locals.uflx, + vflx=self.locals.vflx, + slflx=self.locals.slflx, iteration=iteration, xflx_ndim=self.xflx_ndim, ) self._non_buoyancy_sorting_fluxes( condensation=self.condensation, - kinv=self.temporaries.kinv, - krel=self.temporaries.krel, - cbmf=self.temporaries.cbmf, - qtsrc=self.temporaries.qtsrc, - qt0=self.temporaries.qt0, - ssqt0=self.temporaries.ssqt0, - pifc0=self.temporaries.pifc0_in, - pmid0=self.temporaries.pmid0_in, - thlsrc=self.temporaries.thlsrc, - thl0=self.temporaries.thl0, - ssthl0=self.temporaries.ssthl0, + kinv=self.locals.kinv, + krel=self.locals.krel, + cbmf=self.locals.cbmf, + qtsrc=self.locals.qtsrc, + qt0=self.locals.qt0, + ssqt0=self.locals.ssqt0, + pifc0=self.locals.pifc0_in, + pmid0=self.locals.pmid0_in, + thlsrc=self.locals.thlsrc, + thl0=self.locals.thl0, + ssthl0=self.locals.ssthl0, PGFc=PGFc, - exnifc0=self.temporaries.exnifc0_in, - ssu0=self.temporaries.ssu0, - ssv0=self.temporaries.ssv0, - u0=self.temporaries.u0_in, - v0=self.temporaries.v0_in, - usrc=self.temporaries.usrc, - vsrc=self.temporaries.vsrc, + exnifc0=self.locals.exnifc0_in, + ssu0=self.locals.ssu0, + ssv0=self.locals.ssv0, + u0=self.locals.u0_in, + v0=self.locals.v0_in, + usrc=self.locals.usrc, + vsrc=self.locals.vsrc, dotransport=dotransport, trflx=self.trflx, trsrc=self.trsrc, tr0=self.tr0, sstr0=self.sstr0, - uflx=self.temporaries.uflx, - vflx=self.temporaries.vflx, - slflx=self.temporaries.slflx, - qtflx=self.temporaries.qtflx, - uplus=self.temporaries.uplus, - vplus=self.temporaries.vplus, + uflx=self.locals.uflx, + vflx=self.locals.vflx, + slflx=self.locals.slflx, + qtflx=self.locals.qtflx, + uplus=self.locals.uplus, + vplus=self.locals.vplus, iteration=iteration, ) self._buoyancy_sorting_fluxes( condensation=self.condensation, - kbup=self.temporaries.kbup, - krel=self.temporaries.krel, - exnifc0=self.temporaries.exnifc0_in, - umf_zint=self.temporaries.umf_zint, - thlu=self.temporaries.thlu, - thl0=self.temporaries.thl0, - ssthl0=self.temporaries.ssthl0, - pifc0=self.temporaries.pifc0_in, - pmid0=self.temporaries.pmid0_in, - qtu=self.temporaries.qtu, - qt0=self.temporaries.qt0, - ssqt0=self.temporaries.ssqt0, - uu=self.temporaries.uu, - u0=self.temporaries.u0_in, - v0=self.temporaries.v0_in, - vu=self.temporaries.vu, - ssu0=self.temporaries.ssu0, - ssv0=self.temporaries.ssv0, + kbup=self.locals.kbup, + krel=self.locals.krel, + exnifc0=self.locals.exnifc0_in, + umf_zint=self.locals.umf_zint, + thlu=self.locals.thlu, + thl0=self.locals.thl0, + ssthl0=self.locals.ssthl0, + pifc0=self.locals.pifc0_in, + pmid0=self.locals.pmid0_in, + qtu=self.locals.qtu, + qt0=self.locals.qt0, + ssqt0=self.locals.ssqt0, + uu=self.locals.uu, + u0=self.locals.u0_in, + v0=self.locals.v0_in, + vu=self.locals.vu, + ssu0=self.locals.ssu0, + ssv0=self.locals.ssv0, dotransport=dotransport, trflx=self.trflx, tru=self.tru, tr0=self.tr0, sstr0=self.sstr0, - qtflx=self.temporaries.qtflx, - vflx=self.temporaries.vflx, - uflx=self.temporaries.uflx, - slflx=self.temporaries.slflx, + qtflx=self.locals.qtflx, + vflx=self.locals.vflx, + uflx=self.locals.uflx, + slflx=self.locals.slflx, iteration=iteration, ) self._penetrative_entrainment_fluxes( condensation=self.condensation, - kbup=self.temporaries.kbup, - kpen=self.temporaries.kpen, - exnifc0=self.temporaries.exnifc0_in, - emf=self.temporaries.emf, - thlu_emf=self.temporaries.thlu_emf, - thl0=self.temporaries.thl0, - ssthl0=self.temporaries.ssthl0, - pifc0=self.temporaries.pifc0_in, - pmid0=self.temporaries.pmid0_in, - qtu_emf=self.temporaries.qtu_emf, - qt0=self.temporaries.qt0, - ssqt0=self.temporaries.ssqt0, - uu_emf=self.temporaries.uu_emf, - vu_emf=self.temporaries.vu_emf, - u0=self.temporaries.u0_in, - v0=self.temporaries.v0_in, - ssu0=self.temporaries.ssu0, - ssv0=self.temporaries.ssv0, + kbup=self.locals.kbup, + kpen=self.locals.kpen, + exnifc0=self.locals.exnifc0_in, + emf=self.locals.emf, + thlu_emf=self.locals.thlu_emf, + thl0=self.locals.thl0, + ssthl0=self.locals.ssthl0, + pifc0=self.locals.pifc0_in, + pmid0=self.locals.pmid0_in, + qtu_emf=self.locals.qtu_emf, + qt0=self.locals.qt0, + ssqt0=self.locals.ssqt0, + uu_emf=self.locals.uu_emf, + vu_emf=self.locals.vu_emf, + u0=self.locals.u0_in, + v0=self.locals.v0_in, + ssu0=self.locals.ssu0, + ssv0=self.locals.ssv0, dotransport=dotransport, trflx=self.trflx, tru_emf=self.tru_emf, tr0=self.tr0, sstr0=self.sstr0, use_momenflx=use_momenflx, - cbmf=self.temporaries.cbmf, - uflx=self.temporaries.uflx, - vflx=self.temporaries.vflx, - qtflx=self.temporaries.qtflx, - slflx=self.temporaries.slflx, - uemf=self.temporaries.uemf, - kinv=self.temporaries.kinv, - krel=self.temporaries.krel, - umf_zint=self.temporaries.umf_zint, + cbmf=self.locals.cbmf, + uflx=self.locals.uflx, + vflx=self.locals.vflx, + qtflx=self.locals.qtflx, + slflx=self.locals.slflx, + uemf=self.locals.uemf, + kinv=self.locals.kinv, + krel=self.locals.krel, + umf_zint=self.locals.umf_zint, k0=k0, - ql0=self.temporaries.ql0, - qi0=self.temporaries.qi0, + ql0=self.locals.ql0, + qi0=self.locals.qi0, dt=dt, - ese=self.saturation_vapor_pressure_table.ese, - esx=self.saturation_vapor_pressure_table.esx, - umf_out=self.temporaries.umf_out, - qtflx_out=self.temporaries.qtflx_out, - slflx_out=self.temporaries.slflx_out, - uflx_out=self.temporaries.uflx_out, - vflx_out=self.temporaries.vflx_out, - qlten_sink=self.temporaries.qlten_sink, - qiten_sink=self.temporaries.qiten_sink, - cush_inout=self.temporaries.cush_inout, + ese=self.ese, + esx=self.esx, + umf_out=self.locals.umf_out, + qtflx_out=self.locals.qtflx_out, + slflx_out=self.locals.slflx_out, + uflx_out=self.locals.uflx_out, + vflx_out=self.locals.vflx_out, + qlten_sink=self.locals.qlten_sink, + qiten_sink=self.locals.qiten_sink, + cush_inout=self.locals.cush_inout, iteration=iteration, ) self._calc_momentum_tendency( condensation=self.condensation, - kpen=self.temporaries.kpen, - uflx=self.temporaries.uflx, - vflx=self.temporaries.vflx, - dp0=self.temporaries.dp0_in, - u0=self.temporaries.u0_in, - v0=self.temporaries.v0_in, + kpen=self.locals.kpen, + uflx=self.locals.uflx, + vflx=self.locals.vflx, + dp0=self.locals.dp0_in, + u0=self.locals.u0_in, + v0=self.locals.v0_in, dt=dt, - uten=self.temporaries.uten, - vten=self.temporaries.vten, - uf=self.temporaries.uf, - vf=self.temporaries.vf, + uten=self.locals.uten, + vten=self.locals.vten, + uf=self.locals.uf, + vf=self.locals.vf, iteration=iteration, ) self._calc_thermodynamic_tendencies( condensation=self.condensation, - kpen=self.temporaries.kpen, - umf_zint=self.temporaries.umf_zint, - dp0=self.temporaries.dp0_in, + kpen=self.locals.kpen, + umf_zint=self.locals.umf_zint, + dp0=self.locals.dp0_in, frc_rasn=frc_rasn, - slflx=self.temporaries.slflx, - uflx=self.temporaries.uflx, - vflx=self.temporaries.vflx, - u0=self.temporaries.u0_in, - v0=self.temporaries.v0_in, - uf=self.temporaries.uf, - vf=self.temporaries.vf, - dwten=self.temporaries.dwten, - diten=self.temporaries.diten, - dwten_temp=self.temporaries.dwten_temp, - diten_temp=self.temporaries.diten_temp, - umf_temp=self.temporaries.umf_temp, - qtflx=self.temporaries.qtflx, - krel=self.temporaries.krel, - prel=self.temporaries.prel, - thlu=self.temporaries.thlu, - qtu=self.temporaries.qtu, - ese=self.saturation_vapor_pressure_table.ese, - esx=self.saturation_vapor_pressure_table.esx, - umf_out=self.temporaries.umf_out, - qtflx_out=self.temporaries.qtflx_out, - slflx_out=self.temporaries.slflx_out, - uflx_out=self.temporaries.uflx_out, - vflx_out=self.temporaries.vflx_out, - pifc0=self.temporaries.pifc0_in, - ppen=self.temporaries.ppen, - thlu_top=self.temporaries.thlu_top, - qtu_top=self.temporaries.qtu_top, - qlubelow=self.temporaries.qlubelow, - qiubelow=self.temporaries.qiubelow, - qlj_2D=self.temporaries.qlj_2D, - qij_2D=self.temporaries.qij_2D, - fdr=self.temporaries.fdr, - ql0=self.temporaries.ql0, - qi0=self.temporaries.qi0, - kbup=self.temporaries.kbup, - pmid0=self.temporaries.pmid0_in, - thlu_emf=self.temporaries.thlu_emf, - qtu_emf=self.temporaries.qtu_emf, - emf=self.temporaries.emf, - qlten_sink=self.temporaries.qlten_sink, - qiten_sink=self.temporaries.qiten_sink, + slflx=self.locals.slflx, + uflx=self.locals.uflx, + vflx=self.locals.vflx, + u0=self.locals.u0_in, + v0=self.locals.v0_in, + uf=self.locals.uf, + vf=self.locals.vf, + dwten=self.locals.dwten, + diten=self.locals.diten, + umf_temp=self.locals.umf_temp, + qtflx=self.locals.qtflx, + krel=self.locals.krel, + prel=self.locals.prel, + thlu=self.locals.thlu, + qtu=self.locals.qtu, + ese=self.ese, + esx=self.esx, + umf_out=self.locals.umf_out, + qtflx_out=self.locals.qtflx_out, + slflx_out=self.locals.slflx_out, + uflx_out=self.locals.uflx_out, + vflx_out=self.locals.vflx_out, + pifc0=self.locals.pifc0_in, + ppen=self.locals.ppen, + thlu_top=self.locals.thlu_top, + qtu_top=self.locals.qtu_top, + qlubelow=self.locals.qlubelow, + qiubelow=self.locals.qiubelow, + qlj_2D=self.locals.qlj_2D, + qij_2D=self.locals.qij_2D, + fdr=self.locals.fdr, + ql0=self.locals.ql0, + qi0=self.locals.qi0, + kbup=self.locals.kbup, + pmid0=self.locals.pmid0_in, + thlu_emf=self.locals.thlu_emf, + qtu_emf=self.locals.qtu_emf, + emf=self.locals.emf, + qlten_sink=self.locals.qlten_sink, + qiten_sink=self.locals.qiten_sink, dt=dt, - qrten=self.temporaries.qrten, - qsten=self.temporaries.qsten, - qvten=self.temporaries.qvten, - qlten=self.temporaries.qlten, - sten=self.temporaries.sten, - qiten=self.temporaries.qiten, - qc=self.temporaries.qc, - slten=self.temporaries.slten, - qlten_det=self.temporaries.qlten_det, - qiten_det=self.temporaries.qiten_det, - cush_inout=self.temporaries.cush_inout, + qrten=self.locals.qrten, + qsten=self.locals.qsten, + qvten=self.locals.qvten, + qlten=self.locals.qlten, + sten=self.locals.sten, + qiten=self.locals.qiten, + qc=self.locals.qc, + slten=self.locals.slten, + qlten_det=self.locals.qlten_det, + qiten_det=self.locals.qiten_det, + cush_inout=self.locals.cush_inout, iteration=iteration, ) self._prevent_negative_condensate( condensation=self.condensation, - qv0=self.temporaries.qv0, + qv0=self.locals.qv0, dt=dt, - qvten=self.temporaries.qvten, - ql0=self.temporaries.ql0, - qlten=self.temporaries.qlten, - qi0=self.temporaries.qi0, - s0=self.temporaries.s0, - sten=self.temporaries.sten, - dp0=self.temporaries.dp0_in, - qiten=self.temporaries.qiten, + qvten=self.locals.qvten, + ql0=self.locals.ql0, + qlten=self.locals.qlten, + qi0=self.locals.qi0, + s0=self.locals.s0, + sten=self.locals.sten, + dp0=self.locals.dp0_in, + qiten=self.locals.qiten, k0=k0, - qmin=self.temporaries.qmin, + qmin=self.locals.qmin, iteration=iteration, ) @@ -8846,7 +8848,7 @@ def __call__( dotransport=dotransport, k0=k0, dt=dt, - dp0=self.temporaries.dp0_in, + dp0=self.locals.dp0_in, trflx_d=self.trflx_d, trflx_u=self.trflx_u, trmin=self.trmin, @@ -8858,293 +8860,302 @@ def __call__( self._compute_diagnostic_outputs( condensation=self.condensation, - prel=self.temporaries.prel, - thlu=self.temporaries.thlu, - qtu=self.temporaries.qtu, - krel=self.temporaries.krel, - ese=self.saturation_vapor_pressure_table.ese, - esx=self.saturation_vapor_pressure_table.esx, - umf_out=self.temporaries.umf_out, - qtflx_out=self.temporaries.qtflx_out, - slflx_out=self.temporaries.slflx_out, - uflx_out=self.temporaries.uflx_out, - vflx_out=self.temporaries.vflx_out, - qcubelow=self.temporaries.qcubelow, - qlubelow=self.temporaries.qlubelow, - qiubelow=self.temporaries.qiubelow, - rcwp=self.temporaries.rcwp, - rlwp=self.temporaries.rlwp, - riwp=self.temporaries.riwp, - cush_inout=self.temporaries.cush_inout, + prel=self.locals.prel, + thlu=self.locals.thlu, + qtu=self.locals.qtu, + krel=self.locals.krel, + ese=self.ese, + esx=self.esx, + umf_out=self.locals.umf_out, + qtflx_out=self.locals.qtflx_out, + slflx_out=self.locals.slflx_out, + uflx_out=self.locals.uflx_out, + vflx_out=self.locals.vflx_out, + qcubelow=self.locals.qcubelow, + qlubelow=self.locals.qlubelow, + qiubelow=self.locals.qiubelow, + rcwp=self.locals.rcwp, + rlwp=self.locals.rlwp, + riwp=self.locals.riwp, + cush_inout=self.locals.cush_inout, ) self._calc_cumulus_condensate_at_interfaces( condensation=self.condensation, - krel=self.temporaries.krel, - kpen=self.temporaries.kpen, - pifc0=self.temporaries.pifc0_in, - ppen=self.temporaries.ppen, - thlu_top=self.temporaries.thlu_top, - qtu_top=self.temporaries.qtu_top, - thlu=self.temporaries.thlu, - qtu=self.temporaries.qtu, - ese=self.saturation_vapor_pressure_table.ese, - esx=self.saturation_vapor_pressure_table.esx, - umf_out=self.temporaries.umf_out, - qtflx_out=self.temporaries.qtflx_out, - slflx_out=self.temporaries.slflx_out, - uflx_out=self.temporaries.uflx_out, - vflx_out=self.temporaries.vflx_out, - ufrc=self.temporaries.ufrc, - ufrclcl=self.temporaries.ufrclcl, - prel=self.temporaries.prel, + krel=self.locals.krel, + kpen=self.locals.kpen, + pifc0=self.locals.pifc0_in, + ppen=self.locals.ppen, + thlu_top=self.locals.thlu_top, + qtu_top=self.locals.qtu_top, + thlu=self.locals.thlu, + qtu=self.locals.qtu, + ese=self.ese, + esx=self.esx, + umf_out=self.locals.umf_out, + qtflx_out=self.locals.qtflx_out, + slflx_out=self.locals.slflx_out, + uflx_out=self.locals.uflx_out, + vflx_out=self.locals.vflx_out, + ufrc=self.locals.ufrc, + ufrclcl=self.locals.ufrclcl, + prel=self.locals.prel, criqc=criqc, - qcubelow=self.temporaries.qcubelow, - qlubelow=self.temporaries.qlubelow, - qiubelow=self.temporaries.qiubelow, - qcu=self.temporaries.qcu, - qlu=self.temporaries.qlu, - qiu=self.temporaries.qiu, - rcwp=self.temporaries.rcwp, - rlwp=self.temporaries.rlwp, - riwp=self.temporaries.riwp, - cufrc=self.temporaries.cufrc, - cush_inout=self.temporaries.cush_inout, + qcubelow=self.locals.qcubelow, + qlubelow=self.locals.qlubelow, + qiubelow=self.locals.qiubelow, + qcu=self.locals.qcu, + qlu=self.locals.qlu, + qiu=self.locals.qiu, + rcwp=self.locals.rcwp, + rlwp=self.locals.rlwp, + riwp=self.locals.riwp, + cufrc=self.locals.cufrc, + cush_inout=self.locals.cush_inout, iteration=iteration, ) - if iteration != iter_cin: - self._adjust_implicit_CIN_inputs( + if iteration == 0: + self._adjust_implicit_CIN_inputs1( condensation=self.condensation, - qv0=self.temporaries.qv0, - qvten=self.temporaries.qvten, + qv0=self.locals.qv0, + qvten=self.locals.qvten, dt=dt, - ql0=self.temporaries.ql0, - qlten=self.temporaries.qlten, - qi0=self.temporaries.qi0, - qiten=self.temporaries.qiten, - s0=self.temporaries.s0, - sten=self.temporaries.sten, - u0=self.temporaries.u0_in, - uten=self.temporaries.uten, - v0=self.temporaries.v0_in, - vten=self.temporaries.vten, - t0=self.temporaries.t0, + ql0=self.locals.ql0, + qlten=self.locals.qlten, + qi0=self.locals.qi0, + qiten=self.locals.qiten, + s0=self.locals.s0, + sten=self.locals.sten, + u0=self.locals.u0_in, + uten=self.locals.uten, + v0=self.locals.v0_in, + vten=self.locals.vten, + t0=self.locals.t0, dotransport=dotransport, tr0_s=self.tr0_s, tr0=self.tr0, trten=self.trten, - umf_s=self.temporaries.umf_s, - umf_zint=self.temporaries.umf_zint, - dcm=self.temporaries.dcm, - qrten=self.temporaries.qrten, - qsten=self.temporaries.qsten, + qv0_s=self.locals.qv0_s, + ql0_s=self.locals.ql0_s, + qi0_s=self.locals.qi0_s, + s0_s=self.locals.s0_s, + t0_s=self.locals.t0_s, + u0_s=self.locals.u0_s, + v0_s=self.locals.v0_s, + qvten_s=self.locals.qvten_s, + qlten_s=self.locals.qlten_s, + qiten_s=self.locals.qiten_s, + sten_s=self.locals.sten_s, + uten_s=self.locals.uten_s, + vten_s=self.locals.vten_s, + ) + + self._adjust_implicit_CIN_inputs2( + condensation=self.condensation, + umf_s=self.locals.umf_s, + umf_zint=self.locals.umf_zint, + dcm=self.locals.dcm, + qrten=self.locals.qrten, + qsten=self.locals.qsten, cush=cush, - cufrc=self.temporaries.cufrc, - slflx_s=self.temporaries.slflx_s, - slflx=self.temporaries.slflx, - qtflx_s=self.temporaries.qtflx_s, - qtflx=self.temporaries.qtflx, - uflx_s=self.temporaries.uflx_s, - uflx=self.temporaries.uflx, - vflx_s=self.temporaries.vflx_s, - vflx=self.temporaries.vflx, - qcu=self.temporaries.qcu, - qlu=self.temporaries.qlu, - qiu=self.temporaries.qiu, - fer=self.temporaries.fer, - fdr=self.temporaries.fdr, - xco=self.temporaries.xco, - cin_IJ=self.temporaries.cin_IJ, - cinlcl_IJ=self.temporaries.cinlcl_IJ, - cbmf=self.temporaries.cbmf, - qc=self.temporaries.qc, - qlten_det=self.temporaries.qlten_det, - qiten_det=self.temporaries.qiten_det, - qlten_sink=self.temporaries.qlten_sink, - qiten_sink=self.temporaries.qiten_sink, - ufrc_s=self.temporaries.ufrc_s, - ufrc=self.temporaries.ufrc, - qv0_s=self.temporaries.qv0_s, - ql0_s=self.temporaries.ql0_s, - qi0_s=self.temporaries.qi0_s, - s0_s=self.temporaries.s0_s, - t0_s=self.temporaries.t0_s, - dcm_s=self.temporaries.dcm_s, - qvten_s=self.temporaries.qvten_s, - qlten_s=self.temporaries.qlten_s, - qiten_s=self.temporaries.qiten_s, - sten_s=self.temporaries.sten_s, - uten_s=self.temporaries.uten_s, - vten_s=self.temporaries.vten_s, - qrten_s=self.temporaries.qrten_s, - qsten_s=self.temporaries.qsten_s, - qldet_s=self.temporaries.qldet_s, - qidet_s=self.temporaries.qidet_s, - qlsub_s=self.temporaries.qlsub_s, - qisub_s=self.temporaries.qisub_s, - cush_s=self.temporaries.cush_s, - cufrc_s=self.temporaries.cufrc_s, - fer_s=self.temporaries.fer_s, - fdr_s=self.temporaries.fdr_s, + cufrc=self.locals.cufrc, + slflx_s=self.locals.slflx_s, + slflx=self.locals.slflx, + qtflx_s=self.locals.qtflx_s, + qtflx=self.locals.qtflx, + uflx_s=self.locals.uflx_s, + uflx=self.locals.uflx, + vflx_s=self.locals.vflx_s, + vflx=self.locals.vflx, + qcu=self.locals.qcu, + qlu=self.locals.qlu, + qiu=self.locals.qiu, + fer=self.locals.fer, + fdr=self.locals.fdr, + xco=self.locals.xco, + cin_IJ=self.locals.cin_IJ, + cinlcl_IJ=self.locals.cinlcl_IJ, + cbmf=self.locals.cbmf, + qc=self.locals.qc, + qlten_det=self.locals.qlten_det, + qiten_det=self.locals.qiten_det, + qlten_sink=self.locals.qlten_sink, + qiten_sink=self.locals.qiten_sink, + ufrc_s=self.locals.ufrc_s, + ufrc=self.locals.ufrc, + dcm_s=self.locals.dcm_s, + qrten_s=self.locals.qrten_s, + qsten_s=self.locals.qsten_s, + qldet_s=self.locals.qldet_s, + qidet_s=self.locals.qidet_s, + qlsub_s=self.locals.qlsub_s, + qisub_s=self.locals.qisub_s, + cush_s=self.locals.cush_s, + cufrc_s=self.locals.cufrc_s, + fer_s=self.locals.fer_s, + fdr_s=self.locals.fdr_s, iteration=iteration, ) self._recalc_environmental_variables( condensation=self.condensation, - qv0_s=self.temporaries.qv0_s, - ql0_s=self.temporaries.ql0_s, - qi0_s=self.temporaries.qi0_s, - s0_s=self.temporaries.s0_s, - t0_s=self.temporaries.t0_s, - exnmid0=self.temporaries.exnmid0_in, - pmid0=self.temporaries.pmid0_in, + qv0_s=self.locals.qv0_s, + ql0_s=self.locals.ql0_s, + qi0_s=self.locals.qi0_s, + s0_s=self.locals.s0_s, + t0_s=self.locals.t0_s, + exnmid0=self.locals.exnmid0_in, + pmid0=self.locals.pmid0_in, dotransport=dotransport, sstr0=self.sstr0, tr0=self.tr0, - u0=self.temporaries.u0_in, - v0=self.temporaries.v0_in, - pifc0=self.temporaries.pifc0_in, - ese=self.saturation_vapor_pressure_table.ese, - esx=self.saturation_vapor_pressure_table.esx, - umf_out=self.temporaries.umf_out, - slflx_out=self.temporaries.slflx_out, - qtflx_out=self.temporaries.qtflx_out, - uflx_out=self.temporaries.uflx_out, - vflx_out=self.temporaries.vflx_out, - thvl0bot=self.temporaries.thvl0bot, - thv0bot=self.temporaries.thv0bot, - thvl0top=self.temporaries.thvl0top, - thv0top=self.temporaries.thv0top, - thl0=self.temporaries.thl0, - qt0=self.temporaries.qt0, - thvl0=self.temporaries.thvl0, - ssthl0=self.temporaries.ssthl0, - ssu0=self.temporaries.ssu0, - ssv0=self.temporaries.ssv0, - ssqt0=self.temporaries.ssqt0, - qv0=self.temporaries.qv0, - ql0=self.temporaries.ql0, - qi0=self.temporaries.qi0, - s0=self.temporaries.s0, - t0=self.temporaries.t0, - tr0_temp=self.temporaries.tr0_temp, - cush_inout=self.temporaries.cush_inout, + u0=self.locals.u0_in, + v0=self.locals.v0_in, + pifc0=self.locals.pifc0_in, + ese=self.ese, + esx=self.esx, + umf_out=self.locals.umf_out, + slflx_out=self.locals.slflx_out, + qtflx_out=self.locals.qtflx_out, + uflx_out=self.locals.uflx_out, + vflx_out=self.locals.vflx_out, + thvl0bot=self.locals.thvl0bot, + thv0bot=self.locals.thv0bot, + thvl0top=self.locals.thvl0top, + thv0top=self.locals.thv0top, + thl0=self.locals.thl0, + qt0=self.locals.qt0, + thvl0=self.locals.thvl0, + ssthl0=self.locals.ssthl0, + ssu0=self.locals.ssu0, + ssv0=self.locals.ssv0, + ssqt0=self.locals.ssqt0, + qv0=self.locals.qv0, + ql0=self.locals.ql0, + qi0=self.locals.qi0, + s0=self.locals.s0, + t0=self.locals.t0, + tr0_temp=self.locals.tr0_temp, + cush_inout=self.locals.cush_inout, iteration=iteration, ) - self._update_output_variables( - del_CIN=self.temporaries.del_CIN, - umf_zint=self.temporaries.umf_zint, - zifc0=self.temporaries.zifc0_in, - kinv=self.temporaries.kinv, - dcm=self.temporaries.dcm, - qvten=self.temporaries.qvten, - qlten=self.temporaries.qlten, - qiten=self.temporaries.qiten, - sten=self.temporaries.sten, - uten=self.temporaries.uten, - vten=self.temporaries.vten, - qrten=self.temporaries.qrten, - qsten=self.temporaries.qsten, - cufrc=self.temporaries.cufrc, - qlten_det=self.temporaries.qlten_det, - qiten_det=self.temporaries.qiten_det, - qlten_sink=self.temporaries.qlten_sink, - qiten_sink=self.temporaries.qiten_sink, - rdrop=rdrop, + self._update_output_variables1( + condensation=self.condensation, + del_CIN=self.locals.del_CIN, + umf_zint=self.locals.umf_zint, + kinv=self.locals.kinv, + zifc0=self.locals.zifc0_in, + dcm=self.locals.dcm, + qvten=self.locals.qvten, + qlten=self.locals.qlten, + qiten=self.locals.qiten, + sten=self.locals.sten, + uten=self.locals.uten, + vten=self.locals.vten, + qrten=self.locals.qrten, + qsten=self.locals.qsten, + cufrc=self.locals.cufrc, cush=cush, - qtflx=self.temporaries.qtflx, - slflx=self.temporaries.slflx, - uflx=self.temporaries.uflx, - vflx=self.temporaries.vflx, + umf_out=self.locals.umf_out, + dcm_out=self.locals.dcm_out, + dcm_outvar=self.locals.dcm_outvar, + qvten_out=self.locals.qvten_out, + qlten_out=self.locals.qlten_out, + qiten_out=self.locals.qiten_out, + sten_out=self.locals.sten_out, + uten_out=self.locals.uten_out, + vten_out=self.locals.vten_out, + qrten_out=self.locals.qrten_out, + qsten_out=self.locals.qsten_out, + cufrc_out=self.locals.cufrc_out, + cufrc_outvar=self.locals.cufrc_outvar, + umf_outvar=self.locals.umf_outvar, + cush_inout=self.locals.cush_inout, + qvten_outvar=self.locals.qvten_outvar, + qlten_outvar=self.locals.qlten_outvar, + qiten_outvar=self.locals.qiten_outvar, + sten_outvar=self.locals.sten_outvar, + uten_outvar=self.locals.uten_outvar, + vten_outvar=self.locals.vten_outvar, + qrten_outvar=self.locals.qrten_outvar, + qsten_outvar=self.locals.qsten_outvar, + cush_inoutvar=self.locals.cush_inoutvar, + ) + + self._update_output_variables2( + condensation=self.condensation, dotransport=dotransport, - trten=self.trten, + kpen=self.locals.kpen, + qldet_out=self.locals.qldet_out, + qidet_out=self.locals.qidet_out, + qlsub_out=self.locals.qlsub_out, + qisub_out=self.locals.qisub_out, + ndrop_out=self.locals.ndrop_out, + nice_out=self.locals.nice_out, + qtflx_out=self.locals.qtflx_out, + slflx_out=self.locals.slflx_out, + uflx_out=self.locals.uflx_out, + vflx_out=self.locals.vflx_out, + fer=self.locals.fer, + fdr=self.locals.fdr, + fer_out=self.locals.fer_out, + fdr_out=self.locals.fdr_out, dt=dt, - fer=self.temporaries.fer, - fdr=self.temporaries.fdr, - kpen=self.temporaries.kpen, - umf_out=self.temporaries.umf_out, - dcm_out=self.temporaries.dcm_out, - qvten_out=self.temporaries.qvten_out, - qlten_out=self.temporaries.qlten_out, - qiten_out=self.temporaries.qiten_out, - sten_out=self.temporaries.sten_out, - uten_out=self.temporaries.uten_out, - vten_out=self.temporaries.vten_out, - qrten_out=self.temporaries.qrten_out, - qsten_out=self.temporaries.qsten_out, - cufrc_out=self.temporaries.cufrc_out, - cush_inout=self.temporaries.cush_inout, - qldet_out=self.temporaries.qldet_out, - qidet_out=self.temporaries.qidet_out, - qlsub_out=self.temporaries.qlsub_out, - qisub_out=self.temporaries.qisub_out, - ndrop_out=self.temporaries.ndrop_out, - nice_out=self.temporaries.nice_out, - qtflx_out=self.temporaries.qtflx_out, - slflx_out=self.temporaries.slflx_out, - uflx_out=self.temporaries.uflx_out, - vflx_out=self.temporaries.vflx_out, + rdrop=rdrop, + qlten_det=self.locals.qlten_det, + qiten_det=self.locals.qiten_det, + qlten_sink=self.locals.qlten_sink, + qiten_sink=self.locals.qiten_sink, + qtflx=self.locals.qtflx, + slflx=self.locals.slflx, + uflx=self.locals.uflx, + vflx=self.locals.vflx, tr0_inout=self.tr0_inout, - fer_out=self.temporaries.fer_out, - umf_outvar=self.temporaries.umf_outvar, - dcm_outvar=self.temporaries.dcm_outvar, - qvten_outvar=self.temporaries.qvten_outvar, - qlten_outvar=self.temporaries.qlten_outvar, - qiten_outvar=self.temporaries.qiten_outvar, - sten_outvar=self.temporaries.sten_outvar, - uten_outvar=self.temporaries.uten_outvar, - vten_outvar=self.temporaries.vten_outvar, - qrten_outvar=self.temporaries.qrten_outvar, - qsten_outvar=self.temporaries.qsten_outvar, - cufrc_outvar=self.temporaries.cufrc_outvar, - cush_inoutvar=self.temporaries.cush_inoutvar, - qldet_outvar=self.temporaries.qldet_outvar, - qidet_outvar=self.temporaries.qidet_outvar, - qlsub_outvar=self.temporaries.qlsub_outvar, - qisub_outvar=self.temporaries.qisub_outvar, - qtflx_outvar=self.temporaries.qtflx_outvar, - slflx_outvar=self.temporaries.slflx_outvar, - uflx_outvar=self.temporaries.uflx_outvar, - vflx_outvar=self.temporaries.vflx_outvar, - fdr_out=self.temporaries.fdr_out, - fer_outvar=self.temporaries.fer_outvar, - fdr_outvar=self.temporaries.fdr_outvar, - tr0_inoutvar=self.tr0_inoutvar, - condensation=self.condensation, + trten=self.trten, ) self._compute_uwshcu_invert_after( # Inputs k0=k0, - umf_outvar=self.temporaries.umf_outvar, - qtflx_outvar=self.temporaries.qtflx_outvar, - slflx_outvar=self.temporaries.slflx_outvar, - uflx_outvar=self.temporaries.uflx_outvar, - vflx_outvar=self.temporaries.vflx_outvar, - dcm_outvar=self.temporaries.dcm_outvar, - qvten_outvar=self.temporaries.qvten_outvar, - qlten_outvar=self.temporaries.qlten_outvar, - qiten_outvar=self.temporaries.qiten_outvar, - sten_outvar=self.temporaries.sten_outvar, - uten_outvar=self.temporaries.uten_outvar, - vten_outvar=self.temporaries.vten_outvar, - qrten_outvar=self.temporaries.qrten_outvar, - qsten_outvar=self.temporaries.qsten_outvar, - cufrc_outvar=self.temporaries.cufrc_outvar, - qldet_outvar=self.temporaries.qldet_outvar, - qidet_outvar=self.temporaries.qidet_outvar, - qlsub_outvar=self.temporaries.qlsub_outvar, - qisub_outvar=self.temporaries.qisub_outvar, - fer_outvar=self.temporaries.fer_outvar, - fdr_outvar=self.temporaries.fdr_outvar, - ndrop_out=self.temporaries.ndrop_out, - nice_out=self.temporaries.nice_out, + umf_out=self.locals.umf_out, + qtflx_out=self.locals.qtflx_out, + slflx_out=self.locals.slflx_out, + uflx_out=self.locals.uflx_out, + vflx_out=self.locals.vflx_out, + dcm_outvar=self.locals.dcm_outvar, + qvten_out=self.locals.qvten_out, + qlten_out=self.locals.qlten_out, + qiten_out=self.locals.qiten_out, + sten_out=self.locals.sten_out, + uten_out=self.locals.uten_out, + vten_out=self.locals.vten_out, + qrten_out=self.locals.qrten_out, + qsten_out=self.locals.qsten_out, + cufrc_outvar=self.locals.cufrc_outvar, + qldet_out=self.locals.qldet_out, + qidet_out=self.locals.qidet_out, + qlsub_out=self.locals.qlsub_out, + qisub_out=self.locals.qisub_out, + fer_out=self.locals.fer_out, + fdr_out=self.locals.fdr_out, + ndrop_out=self.locals.ndrop_out, + nice_out=self.locals.nice_out, tr0=self.tr0, - tr0_inoutvar=self.tr0_inoutvar, + tr0_inout=self.tr0_inout, CNV_Tracers=CNV_Tracers, - cush_inoutvar=self.temporaries.cush_inoutvar, + cush_inout=self.locals.cush_inout, + qvten_outvar=self.locals.qvten_outvar, + qlten_outvar=self.locals.qlten_outvar, + qiten_outvar=self.locals.qiten_outvar, + sten_outvar=self.locals.sten_outvar, + uten_outvar=self.locals.uten_outvar, + vten_outvar=self.locals.vten_outvar, + qrten_outvar=self.locals.qrten_outvar, + qsten_outvar=self.locals.qsten_outvar, + cush_inoutvar=self.locals.cush_inoutvar, + umf_outvar=self.locals.umf_outvar, # Outputs umf_inv=umf_inv, dcm_inv=dcm_inv, diff --git a/GEOSagcm_GridComp/GEOSphysics_GridComp/GEOSmoist_GridComp/pyMoist/pyMoist/UW/locals.py b/GEOSagcm_GridComp/GEOSphysics_GridComp/GEOSmoist_GridComp/pyMoist/pyMoist/UW/locals.py new file mode 100644 index 000000000..7315d73f4 --- /dev/null +++ b/GEOSagcm_GridComp/GEOSphysics_GridComp/GEOSmoist_GridComp/pyMoist/pyMoist/UW/locals.py @@ -0,0 +1,871 @@ +from dataclasses import dataclass + +from ndsl import Local, NDSLRuntime, QuantityFactory +from ndsl.constants import X_DIM, Y_DIM, Z_DIM, Z_INTERFACE_DIM +from ndsl.dsl.typing import Int + + +@dataclass +class UWLocals: + ssthl0: Local + ssqt0: Local + ssu0: Local + ssv0: Local + thj: Local + qlj: Local + qvj: Local + qse: Local + qij: Local + thv0top: Local + thv0bot: Local + thvl0top: Local + dcm_out: Local + qvten_out: Local + qlten_out: Local + qiten_out: Local + sten_out: Local + uten_out: Local + vten_out: Local + qrten_out: Local + qsten_out: Local + cufrc_out: Local + fer_out: Local + fdr_out: Local + thvlavg: Local + tkeavg: Local + uavg: Local + vavg: Local + thvlmin: Local + qtavg: Local + zmid0: Local + qt0: Local + thvl0: Local + thvl0bot: Local + t0: Local + qv0: Local + pmid0: Local + thl0: Local + thlsrc: Local + usrc: Local + vsrc: Local + plcl: Local + thl0lcl: Local + qt0lcl: Local + thv0lcl: Local + plfc: Local + fer_outvar: Local + fdr_outvar: Local + cin: Local + thvubot: Local + thvutop: Local + thvlsrc: Local + thl0top: Local + qt0top: Local + qldet_outvar: Local + qidet_outvar: Local + qlsub_outvar: Local + qisub_outvar: Local + dcm_outvar: Local + qvten_outvar: Local + qlten_outvar: Local + qiten_outvar: Local + sten_outvar: Local + uten_outvar: Local + vten_outvar: Local + qrten_outvar: Local + qsten_outvar: Local + cufrc_outvar: Local + usrc_o: Local + vsrc_o: Local + thv0lcl_o: Local + ql0_o: Local + qi0_o: Local + t0_o: Local + s0_o: Local + u0_o: Local + v0_o: Local + qt0_o: Local + thl0_o: Local + thvl0_o: Local + ssthl0_o: Local + ssqt0_o: Local + thv0bot_o: Local + thv0top_o: Local + thvl0bot_o: Local + thvl0top_o: Local + ssu0_o: Local + ssv0_o: Local + dcm_s: Local + qvten_s: Local + qlten_s: Local + qiten_s: Local + sten_s: Local + uten_s: Local + vten_s: Local + qrten_s: Local + qsten_s: Local + qldet_s: Local + qidet_s: Local + qlsub_s: Local + qisub_s: Local + cush_s: Local + cufrc_s: Local + fer_s: Local + fdr_s: Local + qtsrc_o: Local + thvlsrc_o: Local + thlsrc_o: Local + qldet_out: Local + qidet_out: Local + qlsub_out: Local + qisub_out: Local + ndrop_out: Local + nice_out: Local + dcm: Local + xco: Local + qc: Local + qlten_det: Local + qiten_det: Local + qv0_s: Local + ql0_s: Local + qi0_s: Local + s0_s: Local + t0_s: Local + u0_s: Local + v0_s: Local + slten: Local + qv0_o: Local + plcl_o: Local + plfc_o: Local + tkeavg_o: Local + thvlmin_o: Local + ufrclcl: Local + qcu: Local + qlu: Local + qiu: Local + cufrc: Local + qtsrc: Local + uplus_3D: Local + vplus_3D: Local + prel: Local + thv0rel: Local + winv: Local + cbmf: Local + rho0inv: Local + ufrcinv: Local + wlcl: Local + qsat_pe: Local + thlue: Local + qtue: Local + wue: Local + rei: Local + fer: Local + dwten: Local + diten: Local + ql0: Local + qi0: Local + uten: Local + vten: Local + uf: Local + vf: Local + dwten_temp: Local + diten_temp: Local + fdr: Local + qlten_sink: Local + qiten_sink: Local + qrten: Local + qsten: Local + s0: Local + qvten: Local + qlten: Local + sten: Local + qiten: Local + qmin: Local + pmid0_in: Local + u0_in: Local + v0_in: Local + zmid0_in: Local + exnmid0_in: Local + dp0_in: Local + qv0_in: Local + ql0_in: Local + qi0_in: Local + th0_in: Local + cush_inout: Local + dpi: Local + thvlmin_IJ: Local + wcrit: Local + alpha: Local + del_CIN: Local + cin_IJ: Local + plfc_IJ: Local + cinlcl_IJ: Local + pe: Local + thle: Local + qte: Local + dpe: Local + exne: Local + thvebot: Local + ue: Local + ve: Local + drage: Local + bogbot: Local + bogtop: Local + rhomid0j: Local + cush_inoutvar: Local + uplus: Local + vplus: Local + cin_i: Local + cinlcl_i: Local + ke: Local + thlu_top: Local + qtu_top: Local + cldhgt: Local + qlubelow: Local + qiubelow: Local + qlj_2D: Local + qij_2D: Local + qcubelow: Local + rcwp: Local + rlwp: Local + riwp: Local + ppen: Local + tscaleh: Local + wtwb: Local + cnvtrmax: Local + qtu_emf: Local + umf_out: Local + qtflx_out: Local + slflx_out: Local + slflx: Local + thlu_emf: Local + uu_emf: Local + vu_emf: Local + uemf: Local + uflx_out: Local + vflx_out: Local + ufrc: Local + wu: Local + emf: Local + thlu: Local + qtu: Local + thvu: Local + uu: Local + vu: Local + umf_zint: Local + umf_outvar: Local + qtflx_outvar: Local + slflx_outvar: Local + uflx_outvar: Local + vflx_outvar: Local + slflx_s: Local + qtflx_s: Local + uflx_s: Local + vflx_s: Local + qtflx: Local + uflx: Local + ufrc_s: Local + xflx: Local + vflx: Local + umf_temp: Local + umf_s: Local + tke_in: Local + pifc0_in: Local + zifc0_in: Local + exnifc0_in: Local + kinv: Local + klcl: Local + klfc: Local + kinv_o: Local + klcl_o: Local + klfc_o: Local + kbup: Local + krel: Local + kpen: Local + kbup_IJ: Local + klfc_IJ: Local + kpen_IJ: Local + kpbl_in: Local + tr0_temp: Local + u0: Local + v0: Local + cinlcl: Local + + @classmethod + def make(cls, runtime: NDSLRuntime, quantity_factory: QuantityFactory): + # FloatFields + + ssthl0 = runtime.make_local(quantity_factory, [X_DIM, Y_DIM, Z_DIM]) + ssqt0 = runtime.make_local(quantity_factory, [X_DIM, Y_DIM, Z_DIM]) + ssu0 = runtime.make_local(quantity_factory, [X_DIM, Y_DIM, Z_DIM]) + ssv0 = runtime.make_local(quantity_factory, [X_DIM, Y_DIM, Z_DIM]) + thj = runtime.make_local(quantity_factory, [X_DIM, Y_DIM, Z_DIM]) + qlj = runtime.make_local(quantity_factory, [X_DIM, Y_DIM, Z_DIM]) + qvj = runtime.make_local(quantity_factory, [X_DIM, Y_DIM, Z_DIM]) + qse = runtime.make_local(quantity_factory, [X_DIM, Y_DIM, Z_DIM]) + qij = runtime.make_local(quantity_factory, [X_DIM, Y_DIM, Z_DIM]) + tr0_temp = runtime.make_local(quantity_factory, [X_DIM, Y_DIM, Z_DIM]) + thv0top = runtime.make_local(quantity_factory, [X_DIM, Y_DIM, Z_DIM]) + thv0bot = runtime.make_local(quantity_factory, [X_DIM, Y_DIM, Z_DIM]) + thvl0top = runtime.make_local(quantity_factory, [X_DIM, Y_DIM, Z_DIM]) + dcm_out = runtime.make_local(quantity_factory, [X_DIM, Y_DIM, Z_DIM]) + qvten_out = runtime.make_local(quantity_factory, [X_DIM, Y_DIM, Z_DIM]) + qlten_out = runtime.make_local(quantity_factory, [X_DIM, Y_DIM, Z_DIM]) + qiten_out = runtime.make_local(quantity_factory, [X_DIM, Y_DIM, Z_DIM]) + sten_out = runtime.make_local(quantity_factory, [X_DIM, Y_DIM, Z_DIM]) + uten_out = runtime.make_local(quantity_factory, [X_DIM, Y_DIM, Z_DIM]) + vten_out = runtime.make_local(quantity_factory, [X_DIM, Y_DIM, Z_DIM]) + qrten_out = runtime.make_local(quantity_factory, [X_DIM, Y_DIM, Z_DIM]) + qsten_out = runtime.make_local(quantity_factory, [X_DIM, Y_DIM, Z_DIM]) + cufrc_out = runtime.make_local(quantity_factory, [X_DIM, Y_DIM, Z_DIM]) + fer_out = runtime.make_local(quantity_factory, [X_DIM, Y_DIM, Z_DIM]) + fdr_out = runtime.make_local(quantity_factory, [X_DIM, Y_DIM, Z_DIM]) + thvlavg = runtime.make_local(quantity_factory, [X_DIM, Y_DIM, Z_DIM]) + tkeavg = runtime.make_local(quantity_factory, [X_DIM, Y_DIM, Z_DIM]) + uavg = runtime.make_local(quantity_factory, [X_DIM, Y_DIM, Z_DIM]) + vavg = runtime.make_local(quantity_factory, [X_DIM, Y_DIM, Z_DIM]) + thvlmin = runtime.make_local(quantity_factory, [X_DIM, Y_DIM, Z_DIM]) + qtavg = runtime.make_local(quantity_factory, [X_DIM, Y_DIM, Z_DIM]) + zmid0 = runtime.make_local(quantity_factory, [X_DIM, Y_DIM, Z_DIM]) + qt0 = runtime.make_local(quantity_factory, [X_DIM, Y_DIM, Z_DIM]) + thvl0 = runtime.make_local(quantity_factory, [X_DIM, Y_DIM, Z_DIM]) + thvl0bot = runtime.make_local(quantity_factory, [X_DIM, Y_DIM, Z_DIM]) + t0 = runtime.make_local(quantity_factory, [X_DIM, Y_DIM, Z_DIM]) + qv0 = runtime.make_local(quantity_factory, [X_DIM, Y_DIM, Z_DIM]) + pmid0 = runtime.make_local(quantity_factory, [X_DIM, Y_DIM, Z_DIM]) + thl0 = runtime.make_local(quantity_factory, [X_DIM, Y_DIM, Z_DIM]) + thlsrc = runtime.make_local(quantity_factory, [X_DIM, Y_DIM, Z_DIM]) + usrc = runtime.make_local(quantity_factory, [X_DIM, Y_DIM, Z_DIM]) + vsrc = runtime.make_local(quantity_factory, [X_DIM, Y_DIM, Z_DIM]) + plcl = runtime.make_local(quantity_factory, [X_DIM, Y_DIM, Z_DIM]) + thl0lcl = runtime.make_local(quantity_factory, [X_DIM, Y_DIM, Z_DIM]) + qt0lcl = runtime.make_local(quantity_factory, [X_DIM, Y_DIM, Z_DIM]) + thv0lcl = runtime.make_local(quantity_factory, [X_DIM, Y_DIM, Z_DIM]) + plfc = runtime.make_local(quantity_factory, [X_DIM, Y_DIM, Z_DIM]) + fer_outvar = runtime.make_local(quantity_factory, [X_DIM, Y_DIM, Z_DIM]) + fdr_outvar = runtime.make_local(quantity_factory, [X_DIM, Y_DIM, Z_DIM]) + cin = runtime.make_local(quantity_factory, [X_DIM, Y_DIM, Z_DIM]) + thvubot = runtime.make_local(quantity_factory, [X_DIM, Y_DIM, Z_DIM]) + thvutop = runtime.make_local(quantity_factory, [X_DIM, Y_DIM, Z_DIM]) + thvlsrc = runtime.make_local(quantity_factory, [X_DIM, Y_DIM, Z_DIM]) + thl0top = runtime.make_local(quantity_factory, [X_DIM, Y_DIM, Z_DIM]) + qt0top = runtime.make_local(quantity_factory, [X_DIM, Y_DIM, Z_DIM]) + qldet_outvar = runtime.make_local(quantity_factory, [X_DIM, Y_DIM, Z_DIM]) + qidet_outvar = runtime.make_local(quantity_factory, [X_DIM, Y_DIM, Z_DIM]) + qlsub_outvar = runtime.make_local(quantity_factory, [X_DIM, Y_DIM, Z_DIM]) + qisub_outvar = runtime.make_local(quantity_factory, [X_DIM, Y_DIM, Z_DIM]) + dcm_outvar = runtime.make_local(quantity_factory, [X_DIM, Y_DIM, Z_DIM]) + qvten_outvar = runtime.make_local(quantity_factory, [X_DIM, Y_DIM, Z_DIM]) + qlten_outvar = runtime.make_local(quantity_factory, [X_DIM, Y_DIM, Z_DIM]) + qiten_outvar = runtime.make_local(quantity_factory, [X_DIM, Y_DIM, Z_DIM]) + sten_outvar = runtime.make_local(quantity_factory, [X_DIM, Y_DIM, Z_DIM]) + uten_outvar = runtime.make_local(quantity_factory, [X_DIM, Y_DIM, Z_DIM]) + vten_outvar = runtime.make_local(quantity_factory, [X_DIM, Y_DIM, Z_DIM]) + qrten_outvar = runtime.make_local(quantity_factory, [X_DIM, Y_DIM, Z_DIM]) + qsten_outvar = runtime.make_local(quantity_factory, [X_DIM, Y_DIM, Z_DIM]) + cufrc_outvar = runtime.make_local(quantity_factory, [X_DIM, Y_DIM, Z_DIM]) + usrc_o = runtime.make_local(quantity_factory, [X_DIM, Y_DIM, Z_DIM]) + vsrc_o = runtime.make_local(quantity_factory, [X_DIM, Y_DIM, Z_DIM]) + thv0lcl_o = runtime.make_local(quantity_factory, [X_DIM, Y_DIM, Z_DIM]) + ql0_o = runtime.make_local(quantity_factory, [X_DIM, Y_DIM, Z_DIM]) + qi0_o = runtime.make_local(quantity_factory, [X_DIM, Y_DIM, Z_DIM]) + t0_o = runtime.make_local(quantity_factory, [X_DIM, Y_DIM, Z_DIM]) + s0_o = runtime.make_local(quantity_factory, [X_DIM, Y_DIM, Z_DIM]) + u0_o = runtime.make_local(quantity_factory, [X_DIM, Y_DIM, Z_DIM]) + v0_o = runtime.make_local(quantity_factory, [X_DIM, Y_DIM, Z_DIM]) + qt0_o = runtime.make_local(quantity_factory, [X_DIM, Y_DIM, Z_DIM]) + thl0_o = runtime.make_local(quantity_factory, [X_DIM, Y_DIM, Z_DIM]) + thvl0_o = runtime.make_local(quantity_factory, [X_DIM, Y_DIM, Z_DIM]) + ssthl0_o = runtime.make_local(quantity_factory, [X_DIM, Y_DIM, Z_DIM]) + ssqt0_o = runtime.make_local(quantity_factory, [X_DIM, Y_DIM, Z_DIM]) + thv0bot_o = runtime.make_local(quantity_factory, [X_DIM, Y_DIM, Z_DIM]) + thv0top_o = runtime.make_local(quantity_factory, [X_DIM, Y_DIM, Z_DIM]) + thvl0bot_o = runtime.make_local(quantity_factory, [X_DIM, Y_DIM, Z_DIM]) + thvl0top_o = runtime.make_local(quantity_factory, [X_DIM, Y_DIM, Z_DIM]) + ssu0_o = runtime.make_local(quantity_factory, [X_DIM, Y_DIM, Z_DIM]) + ssv0_o = runtime.make_local(quantity_factory, [X_DIM, Y_DIM, Z_DIM]) + dcm_s = runtime.make_local(quantity_factory, [X_DIM, Y_DIM, Z_DIM]) + qvten_s = runtime.make_local(quantity_factory, [X_DIM, Y_DIM, Z_DIM]) + qlten_s = runtime.make_local(quantity_factory, [X_DIM, Y_DIM, Z_DIM]) + qiten_s = runtime.make_local(quantity_factory, [X_DIM, Y_DIM, Z_DIM]) + sten_s = runtime.make_local(quantity_factory, [X_DIM, Y_DIM, Z_DIM]) + uten_s = runtime.make_local(quantity_factory, [X_DIM, Y_DIM, Z_DIM]) + vten_s = runtime.make_local(quantity_factory, [X_DIM, Y_DIM, Z_DIM]) + qrten_s = runtime.make_local(quantity_factory, [X_DIM, Y_DIM, Z_DIM]) + qsten_s = runtime.make_local(quantity_factory, [X_DIM, Y_DIM, Z_DIM]) + qldet_s = runtime.make_local(quantity_factory, [X_DIM, Y_DIM, Z_DIM]) + qidet_s = runtime.make_local(quantity_factory, [X_DIM, Y_DIM, Z_DIM]) + qlsub_s = runtime.make_local(quantity_factory, [X_DIM, Y_DIM, Z_DIM]) + qisub_s = runtime.make_local(quantity_factory, [X_DIM, Y_DIM, Z_DIM]) + cush_s = runtime.make_local(quantity_factory, [X_DIM, Y_DIM, Z_DIM]) + cufrc_s = runtime.make_local(quantity_factory, [X_DIM, Y_DIM, Z_DIM]) + fer_s = runtime.make_local(quantity_factory, [X_DIM, Y_DIM, Z_DIM]) + fdr_s = runtime.make_local(quantity_factory, [X_DIM, Y_DIM, Z_DIM]) + qtsrc_o = runtime.make_local(quantity_factory, [X_DIM, Y_DIM, Z_DIM]) + thvlsrc_o = runtime.make_local(quantity_factory, [X_DIM, Y_DIM, Z_DIM]) + thlsrc_o = runtime.make_local(quantity_factory, [X_DIM, Y_DIM, Z_DIM]) + qldet_out = runtime.make_local(quantity_factory, [X_DIM, Y_DIM, Z_DIM]) + qidet_out = runtime.make_local(quantity_factory, [X_DIM, Y_DIM, Z_DIM]) + qlsub_out = runtime.make_local(quantity_factory, [X_DIM, Y_DIM, Z_DIM]) + qisub_out = runtime.make_local(quantity_factory, [X_DIM, Y_DIM, Z_DIM]) + ndrop_out = runtime.make_local(quantity_factory, [X_DIM, Y_DIM, Z_DIM]) + nice_out = runtime.make_local(quantity_factory, [X_DIM, Y_DIM, Z_DIM]) + dcm = runtime.make_local(quantity_factory, [X_DIM, Y_DIM, Z_DIM]) + xco = runtime.make_local(quantity_factory, [X_DIM, Y_DIM, Z_DIM]) + qc = runtime.make_local(quantity_factory, [X_DIM, Y_DIM, Z_DIM]) + qlten_det = runtime.make_local(quantity_factory, [X_DIM, Y_DIM, Z_DIM]) + qiten_det = runtime.make_local(quantity_factory, [X_DIM, Y_DIM, Z_DIM]) + qv0_s = runtime.make_local(quantity_factory, [X_DIM, Y_DIM, Z_DIM]) + ql0_s = runtime.make_local(quantity_factory, [X_DIM, Y_DIM, Z_DIM]) + qi0_s = runtime.make_local(quantity_factory, [X_DIM, Y_DIM, Z_DIM]) + s0_s = runtime.make_local(quantity_factory, [X_DIM, Y_DIM, Z_DIM]) + t0_s = runtime.make_local(quantity_factory, [X_DIM, Y_DIM, Z_DIM]) + u0_s = runtime.make_local(quantity_factory, [X_DIM, Y_DIM, Z_DIM]) + v0_s = runtime.make_local(quantity_factory, [X_DIM, Y_DIM, Z_DIM]) + slten = runtime.make_local(quantity_factory, [X_DIM, Y_DIM, Z_DIM]) + qv0_o = runtime.make_local(quantity_factory, [X_DIM, Y_DIM, Z_DIM]) + plcl_o = runtime.make_local(quantity_factory, [X_DIM, Y_DIM, Z_DIM]) + plfc_o = runtime.make_local(quantity_factory, [X_DIM, Y_DIM, Z_DIM]) + tkeavg_o = runtime.make_local(quantity_factory, [X_DIM, Y_DIM, Z_DIM]) + thvlmin_o = runtime.make_local(quantity_factory, [X_DIM, Y_DIM, Z_DIM]) + ufrclcl = runtime.make_local(quantity_factory, [X_DIM, Y_DIM, Z_DIM]) + qcu = runtime.make_local(quantity_factory, [X_DIM, Y_DIM, Z_DIM]) + qlu = runtime.make_local(quantity_factory, [X_DIM, Y_DIM, Z_DIM]) + qiu = runtime.make_local(quantity_factory, [X_DIM, Y_DIM, Z_DIM]) + cufrc = runtime.make_local(quantity_factory, [X_DIM, Y_DIM, Z_DIM]) + qtsrc = runtime.make_local(quantity_factory, [X_DIM, Y_DIM, Z_DIM]) + uplus_3D = runtime.make_local(quantity_factory, [X_DIM, Y_DIM, Z_DIM]) + vplus_3D = runtime.make_local(quantity_factory, [X_DIM, Y_DIM, Z_DIM]) + prel = runtime.make_local(quantity_factory, [X_DIM, Y_DIM, Z_DIM]) + thv0rel = runtime.make_local(quantity_factory, [X_DIM, Y_DIM, Z_DIM]) + winv = runtime.make_local(quantity_factory, [X_DIM, Y_DIM, Z_DIM]) + cbmf = runtime.make_local(quantity_factory, [X_DIM, Y_DIM, Z_DIM]) + rho0inv = runtime.make_local(quantity_factory, [X_DIM, Y_DIM, Z_DIM]) + ufrcinv = runtime.make_local(quantity_factory, [X_DIM, Y_DIM, Z_DIM]) + wlcl = runtime.make_local(quantity_factory, [X_DIM, Y_DIM, Z_DIM]) + qsat_pe = runtime.make_local(quantity_factory, [X_DIM, Y_DIM, Z_DIM]) + thlue = runtime.make_local(quantity_factory, [X_DIM, Y_DIM, Z_DIM]) + qtue = runtime.make_local(quantity_factory, [X_DIM, Y_DIM, Z_DIM]) + wue = runtime.make_local(quantity_factory, [X_DIM, Y_DIM, Z_DIM]) + rei = runtime.make_local(quantity_factory, [X_DIM, Y_DIM, Z_DIM]) + fer = runtime.make_local(quantity_factory, [X_DIM, Y_DIM, Z_DIM]) + dwten = runtime.make_local(quantity_factory, [X_DIM, Y_DIM, Z_DIM]) + diten = runtime.make_local(quantity_factory, [X_DIM, Y_DIM, Z_DIM]) + ql0 = runtime.make_local(quantity_factory, [X_DIM, Y_DIM, Z_DIM]) + qi0 = runtime.make_local(quantity_factory, [X_DIM, Y_DIM, Z_DIM]) + uten = runtime.make_local(quantity_factory, [X_DIM, Y_DIM, Z_DIM]) + vten = runtime.make_local(quantity_factory, [X_DIM, Y_DIM, Z_DIM]) + uf = runtime.make_local(quantity_factory, [X_DIM, Y_DIM, Z_DIM]) + vf = runtime.make_local(quantity_factory, [X_DIM, Y_DIM, Z_DIM]) + dwten_temp = runtime.make_local(quantity_factory, [X_DIM, Y_DIM, Z_DIM]) + diten_temp = runtime.make_local(quantity_factory, [X_DIM, Y_DIM, Z_DIM]) + fdr = runtime.make_local(quantity_factory, [X_DIM, Y_DIM, Z_DIM]) + qlten_sink = runtime.make_local(quantity_factory, [X_DIM, Y_DIM, Z_DIM]) + qiten_sink = runtime.make_local(quantity_factory, [X_DIM, Y_DIM, Z_DIM]) + qrten = runtime.make_local(quantity_factory, [X_DIM, Y_DIM, Z_DIM]) + qsten = runtime.make_local(quantity_factory, [X_DIM, Y_DIM, Z_DIM]) + s0 = runtime.make_local(quantity_factory, [X_DIM, Y_DIM, Z_DIM]) + qvten = runtime.make_local(quantity_factory, [X_DIM, Y_DIM, Z_DIM]) + qlten = runtime.make_local(quantity_factory, [X_DIM, Y_DIM, Z_DIM]) + sten = runtime.make_local(quantity_factory, [X_DIM, Y_DIM, Z_DIM]) + qiten = runtime.make_local(quantity_factory, [X_DIM, Y_DIM, Z_DIM]) + qmin = runtime.make_local(quantity_factory, [X_DIM, Y_DIM, Z_DIM]) + pmid0_in = runtime.make_local(quantity_factory, [X_DIM, Y_DIM, Z_DIM]) + u0_in = runtime.make_local(quantity_factory, [X_DIM, Y_DIM, Z_DIM]) + v0_in = runtime.make_local(quantity_factory, [X_DIM, Y_DIM, Z_DIM]) + u0 = runtime.make_local(quantity_factory, [X_DIM, Y_DIM, Z_DIM]) + v0 = runtime.make_local(quantity_factory, [X_DIM, Y_DIM, Z_DIM]) + zmid0_in = runtime.make_local(quantity_factory, [X_DIM, Y_DIM, Z_DIM]) + exnmid0_in = runtime.make_local(quantity_factory, [X_DIM, Y_DIM, Z_DIM]) + dp0_in = runtime.make_local(quantity_factory, [X_DIM, Y_DIM, Z_DIM]) + qv0_in = runtime.make_local(quantity_factory, [X_DIM, Y_DIM, Z_DIM]) + ql0_in = runtime.make_local(quantity_factory, [X_DIM, Y_DIM, Z_DIM]) + qi0_in = runtime.make_local(quantity_factory, [X_DIM, Y_DIM, Z_DIM]) + th0_in = runtime.make_local(quantity_factory, [X_DIM, Y_DIM, Z_DIM]) + cinlcl = runtime.make_local(quantity_factory, [X_DIM, Y_DIM, Z_DIM]) + # FloatFieldIJs + cush_inout = runtime.make_local(quantity_factory, [X_DIM, Y_DIM]) + dpi = runtime.make_local(quantity_factory, [X_DIM, Y_DIM]) + thvlmin_IJ = runtime.make_local(quantity_factory, [X_DIM, Y_DIM]) + wcrit = runtime.make_local(quantity_factory, [X_DIM, Y_DIM]) + alpha = runtime.make_local(quantity_factory, [X_DIM, Y_DIM]) + del_CIN = runtime.make_local(quantity_factory, [X_DIM, Y_DIM]) + cin_IJ = runtime.make_local(quantity_factory, [X_DIM, Y_DIM]) + plfc_IJ = runtime.make_local(quantity_factory, [X_DIM, Y_DIM]) + cinlcl_IJ = runtime.make_local(quantity_factory, [X_DIM, Y_DIM]) + pe = runtime.make_local(quantity_factory, [X_DIM, Y_DIM]) + thle = runtime.make_local(quantity_factory, [X_DIM, Y_DIM]) + qte = runtime.make_local(quantity_factory, [X_DIM, Y_DIM]) + dpe = runtime.make_local(quantity_factory, [X_DIM, Y_DIM]) + exne = runtime.make_local(quantity_factory, [X_DIM, Y_DIM]) + thvebot = runtime.make_local(quantity_factory, [X_DIM, Y_DIM]) + ue = runtime.make_local(quantity_factory, [X_DIM, Y_DIM]) + ve = runtime.make_local(quantity_factory, [X_DIM, Y_DIM]) + drage = runtime.make_local(quantity_factory, [X_DIM, Y_DIM]) + bogbot = runtime.make_local(quantity_factory, [X_DIM, Y_DIM]) + bogtop = runtime.make_local(quantity_factory, [X_DIM, Y_DIM]) + rhomid0j = runtime.make_local(quantity_factory, [X_DIM, Y_DIM]) + cush_inoutvar = runtime.make_local(quantity_factory, [X_DIM, Y_DIM]) + uplus = runtime.make_local(quantity_factory, [X_DIM, Y_DIM]) + vplus = runtime.make_local(quantity_factory, [X_DIM, Y_DIM]) + cin_i = runtime.make_local(quantity_factory, [X_DIM, Y_DIM]) + cinlcl_i = runtime.make_local(quantity_factory, [X_DIM, Y_DIM]) + ke = runtime.make_local(quantity_factory, [X_DIM, Y_DIM]) + thlu_top = runtime.make_local(quantity_factory, [X_DIM, Y_DIM]) + qtu_top = runtime.make_local(quantity_factory, [X_DIM, Y_DIM]) + cldhgt = runtime.make_local(quantity_factory, [X_DIM, Y_DIM]) + qlubelow = runtime.make_local(quantity_factory, [X_DIM, Y_DIM]) + qiubelow = runtime.make_local(quantity_factory, [X_DIM, Y_DIM]) + qlj_2D = runtime.make_local(quantity_factory, [X_DIM, Y_DIM]) + qij_2D = runtime.make_local(quantity_factory, [X_DIM, Y_DIM]) + qcubelow = runtime.make_local(quantity_factory, [X_DIM, Y_DIM]) + rcwp = runtime.make_local(quantity_factory, [X_DIM, Y_DIM]) + rlwp = runtime.make_local(quantity_factory, [X_DIM, Y_DIM]) + riwp = runtime.make_local(quantity_factory, [X_DIM, Y_DIM]) + ppen = runtime.make_local(quantity_factory, [X_DIM, Y_DIM]) + tscaleh = runtime.make_local(quantity_factory, [X_DIM, Y_DIM]) + wtwb = runtime.make_local(quantity_factory, [X_DIM, Y_DIM]) + cnvtrmax = runtime.make_local(quantity_factory, [X_DIM, Y_DIM]) + # Interface FloatFields + qtu_emf = runtime.make_local(quantity_factory, [X_DIM, Y_DIM, Z_INTERFACE_DIM]) + umf_out = runtime.make_local(quantity_factory, [X_DIM, Y_DIM, Z_INTERFACE_DIM]) + qtflx_out = runtime.make_local(quantity_factory, [X_DIM, Y_DIM, Z_INTERFACE_DIM]) + slflx_out = runtime.make_local(quantity_factory, [X_DIM, Y_DIM, Z_INTERFACE_DIM]) + slflx = runtime.make_local(quantity_factory, [X_DIM, Y_DIM, Z_INTERFACE_DIM]) + thlu_emf = runtime.make_local(quantity_factory, [X_DIM, Y_DIM, Z_INTERFACE_DIM]) + uu_emf = runtime.make_local(quantity_factory, [X_DIM, Y_DIM, Z_INTERFACE_DIM]) + vu_emf = runtime.make_local(quantity_factory, [X_DIM, Y_DIM, Z_INTERFACE_DIM]) + uemf = runtime.make_local(quantity_factory, [X_DIM, Y_DIM, Z_INTERFACE_DIM]) + uflx_out = runtime.make_local(quantity_factory, [X_DIM, Y_DIM, Z_INTERFACE_DIM]) + vflx_out = runtime.make_local(quantity_factory, [X_DIM, Y_DIM, Z_INTERFACE_DIM]) + ufrc = runtime.make_local(quantity_factory, [X_DIM, Y_DIM, Z_INTERFACE_DIM]) + wu = runtime.make_local(quantity_factory, [X_DIM, Y_DIM, Z_INTERFACE_DIM]) + emf = runtime.make_local(quantity_factory, [X_DIM, Y_DIM, Z_INTERFACE_DIM]) + thlu = runtime.make_local(quantity_factory, [X_DIM, Y_DIM, Z_INTERFACE_DIM]) + qtu = runtime.make_local(quantity_factory, [X_DIM, Y_DIM, Z_INTERFACE_DIM]) + uu = runtime.make_local(quantity_factory, [X_DIM, Y_DIM, Z_INTERFACE_DIM]) + vu = runtime.make_local(quantity_factory, [X_DIM, Y_DIM, Z_INTERFACE_DIM]) + umf_zint = runtime.make_local(quantity_factory, [X_DIM, Y_DIM, Z_INTERFACE_DIM]) + thvu = runtime.make_local(quantity_factory, [X_DIM, Y_DIM, Z_INTERFACE_DIM]) + umf_outvar = runtime.make_local(quantity_factory, [X_DIM, Y_DIM, Z_INTERFACE_DIM]) + qtflx_outvar = runtime.make_local(quantity_factory, [X_DIM, Y_DIM, Z_INTERFACE_DIM]) + slflx_outvar = runtime.make_local(quantity_factory, [X_DIM, Y_DIM, Z_INTERFACE_DIM]) + uflx_outvar = runtime.make_local(quantity_factory, [X_DIM, Y_DIM, Z_INTERFACE_DIM]) + vflx_outvar = runtime.make_local(quantity_factory, [X_DIM, Y_DIM, Z_INTERFACE_DIM]) + slflx_s = runtime.make_local(quantity_factory, [X_DIM, Y_DIM, Z_INTERFACE_DIM]) + qtflx_s = runtime.make_local(quantity_factory, [X_DIM, Y_DIM, Z_INTERFACE_DIM]) + uflx_s = runtime.make_local(quantity_factory, [X_DIM, Y_DIM, Z_INTERFACE_DIM]) + vflx_s = runtime.make_local(quantity_factory, [X_DIM, Y_DIM, Z_INTERFACE_DIM]) + qtflx = runtime.make_local(quantity_factory, [X_DIM, Y_DIM, Z_INTERFACE_DIM]) + uflx = runtime.make_local(quantity_factory, [X_DIM, Y_DIM, Z_INTERFACE_DIM]) + ufrc_s = runtime.make_local(quantity_factory, [X_DIM, Y_DIM, Z_INTERFACE_DIM]) + xflx = runtime.make_local(quantity_factory, [X_DIM, Y_DIM, Z_INTERFACE_DIM]) + vflx = runtime.make_local(quantity_factory, [X_DIM, Y_DIM, Z_INTERFACE_DIM]) + umf_temp = runtime.make_local(quantity_factory, [X_DIM, Y_DIM, Z_INTERFACE_DIM]) + umf_s = runtime.make_local(quantity_factory, [X_DIM, Y_DIM, Z_INTERFACE_DIM]) + tke_in = runtime.make_local(quantity_factory, [X_DIM, Y_DIM, Z_INTERFACE_DIM]) + pifc0_in = runtime.make_local(quantity_factory, [X_DIM, Y_DIM, Z_INTERFACE_DIM]) + zifc0_in = runtime.make_local(quantity_factory, [X_DIM, Y_DIM, Z_INTERFACE_DIM]) + exnifc0_in = runtime.make_local(quantity_factory, [X_DIM, Y_DIM, Z_INTERFACE_DIM]) + # IntFields + kinv = runtime.make_local(quantity_factory, [X_DIM, Y_DIM, Z_DIM], dtype=Int) + klcl = runtime.make_local(quantity_factory, [X_DIM, Y_DIM, Z_DIM], dtype=Int) + klfc = runtime.make_local(quantity_factory, [X_DIM, Y_DIM, Z_DIM], dtype=Int) + kinv_o = runtime.make_local(quantity_factory, [X_DIM, Y_DIM, Z_DIM], dtype=Int) + klcl_o = runtime.make_local(quantity_factory, [X_DIM, Y_DIM, Z_DIM], dtype=Int) + klfc_o = runtime.make_local(quantity_factory, [X_DIM, Y_DIM, Z_DIM], dtype=Int) + kbup = runtime.make_local(quantity_factory, [X_DIM, Y_DIM, Z_DIM], dtype=Int) + krel = runtime.make_local(quantity_factory, [X_DIM, Y_DIM, Z_DIM], dtype=Int) + kpen = runtime.make_local(quantity_factory, [X_DIM, Y_DIM, Z_DIM], dtype=Int) + + # IntFieldIJs + kbup_IJ = runtime.make_local(quantity_factory, [X_DIM, Y_DIM], dtype=Int) + klfc_IJ = runtime.make_local(quantity_factory, [X_DIM, Y_DIM], dtype=Int) + kpen_IJ = runtime.make_local(quantity_factory, [X_DIM, Y_DIM], dtype=Int) + kpbl_in = runtime.make_local(quantity_factory, [X_DIM, Y_DIM], dtype=Int) + + return cls( + ssthl0, + ssqt0, + ssu0, + ssv0, + thj, + qlj, + qvj, + qse, + qij, + thv0top, + thv0bot, + thvl0top, + dcm_out, + qvten_out, + qlten_out, + qiten_out, + sten_out, + uten_out, + vten_out, + qrten_out, + qsten_out, + cufrc_out, + fer_out, + fdr_out, + thvlavg, + tkeavg, + uavg, + vavg, + thvlmin, + qtavg, + zmid0, + qt0, + thvl0, + thvl0bot, + t0, + qv0, + pmid0, + thl0, + thlsrc, + usrc, + vsrc, + plcl, + thl0lcl, + qt0lcl, + thv0lcl, + plfc, + fer_outvar, + fdr_outvar, + cin, + thvubot, + thvutop, + thvlsrc, + thl0top, + qt0top, + qldet_outvar, + qidet_outvar, + qlsub_outvar, + qisub_outvar, + dcm_outvar, + qvten_outvar, + qlten_outvar, + qiten_outvar, + sten_outvar, + uten_outvar, + vten_outvar, + qrten_outvar, + qsten_outvar, + cufrc_outvar, + usrc_o, + vsrc_o, + thv0lcl_o, + ql0_o, + qi0_o, + t0_o, + s0_o, + u0_o, + v0_o, + qt0_o, + thl0_o, + thvl0_o, + ssthl0_o, + ssqt0_o, + thv0bot_o, + thv0top_o, + thvl0bot_o, + thvl0top_o, + ssu0_o, + ssv0_o, + dcm_s, + qvten_s, + qlten_s, + qiten_s, + sten_s, + uten_s, + vten_s, + qrten_s, + qsten_s, + qldet_s, + qidet_s, + qlsub_s, + qisub_s, + cush_s, + cufrc_s, + fer_s, + fdr_s, + qtsrc_o, + thvlsrc_o, + thlsrc_o, + qldet_out, + qidet_out, + qlsub_out, + qisub_out, + ndrop_out, + nice_out, + dcm, + xco, + qc, + qlten_det, + qiten_det, + qv0_s, + ql0_s, + qi0_s, + s0_s, + t0_s, + u0_s, + v0_s, + slten, + qv0_o, + plcl_o, + plfc_o, + tkeavg_o, + thvlmin_o, + ufrclcl, + qcu, + qlu, + qiu, + cufrc, + qtsrc, + uplus_3D, + vplus_3D, + prel, + thv0rel, + winv, + cbmf, + rho0inv, + ufrcinv, + wlcl, + qsat_pe, + thlue, + qtue, + wue, + rei, + fer, + dwten, + diten, + ql0, + qi0, + uten, + vten, + uf, + vf, + dwten_temp, + diten_temp, + fdr, + qlten_sink, + qiten_sink, + qrten, + qsten, + s0, + qvten, + qlten, + sten, + qiten, + qmin, + pmid0_in, + u0_in, + v0_in, + zmid0_in, + exnmid0_in, + dp0_in, + qv0_in, + ql0_in, + qi0_in, + th0_in, + cush_inout, + dpi, + thvlmin_IJ, + wcrit, + alpha, + del_CIN, + cin_IJ, + plfc_IJ, + cinlcl_IJ, + pe, + thle, + qte, + dpe, + exne, + thvebot, + ue, + ve, + drage, + bogbot, + bogtop, + rhomid0j, + cush_inoutvar, + uplus, + vplus, + cin_i, + cinlcl_i, + ke, + thlu_top, + qtu_top, + cldhgt, + qlubelow, + qiubelow, + qlj_2D, + qij_2D, + qcubelow, + rcwp, + rlwp, + riwp, + ppen, + tscaleh, + wtwb, + cnvtrmax, + qtu_emf, + umf_out, + qtflx_out, + slflx_out, + slflx, + thlu_emf, + uu_emf, + vu_emf, + uemf, + uflx_out, + vflx_out, + ufrc, + wu, + emf, + thlu, + qtu, + thvu, + uu, + vu, + umf_zint, + umf_outvar, + qtflx_outvar, + slflx_outvar, + uflx_outvar, + vflx_outvar, + slflx_s, + qtflx_s, + uflx_s, + vflx_s, + qtflx, + uflx, + ufrc_s, + xflx, + vflx, + umf_temp, + umf_s, + tke_in, + pifc0_in, + zifc0_in, + exnifc0_in, + kinv, + klcl, + klfc, + kinv_o, + klcl_o, + klfc_o, + kbup, + krel, + kpen, + kbup_IJ, + klfc_IJ, + kpen_IJ, + kpbl_in, + tr0_temp, + u0, + v0, + cinlcl, + ) diff --git a/GEOSagcm_GridComp/GEOSphysics_GridComp/GEOSmoist_GridComp/pyMoist/pyMoist/UW/temporaries.py b/GEOSagcm_GridComp/GEOSphysics_GridComp/GEOSmoist_GridComp/pyMoist/pyMoist/UW/temporaries.py deleted file mode 100644 index 75859cf06..000000000 --- a/GEOSagcm_GridComp/GEOSphysics_GridComp/GEOSmoist_GridComp/pyMoist/pyMoist/UW/temporaries.py +++ /dev/null @@ -1,864 +0,0 @@ -from dataclasses import dataclass - -from ndsl import Quantity, QuantityFactory -from ndsl.constants import X_DIM, Y_DIM, Z_DIM, Z_INTERFACE_DIM -from ndsl.dsl.typing import Int - - -@dataclass -class Temporaries: - ssthl0: Quantity - ssqt0: Quantity - ssu0: Quantity - ssv0: Quantity - thj: Quantity - qlj: Quantity - qvj: Quantity - qse: Quantity - qij: Quantity - thv0top: Quantity - thv0bot: Quantity - thvl0top: Quantity - dcm_out: Quantity - qvten_out: Quantity - qlten_out: Quantity - qiten_out: Quantity - sten_out: Quantity - uten_out: Quantity - vten_out: Quantity - qrten_out: Quantity - qsten_out: Quantity - cufrc_out: Quantity - fer_out: Quantity - fdr_out: Quantity - thvlavg: Quantity - tkeavg: Quantity - uavg: Quantity - vavg: Quantity - thvlmin: Quantity - qtavg: Quantity - zmid0: Quantity - qt0: Quantity - thvl0: Quantity - thvl0bot: Quantity - t0: Quantity - qv0: Quantity - pmid0: Quantity - thl0: Quantity - thlsrc: Quantity - usrc: Quantity - vsrc: Quantity - plcl: Quantity - thl0lcl: Quantity - qt0lcl: Quantity - thv0lcl: Quantity - plfc: Quantity - fer_outvar: Quantity - fdr_outvar: Quantity - cin: Quantity - thvubot: Quantity - thvutop: Quantity - thvlsrc: Quantity - thl0top: Quantity - qt0top: Quantity - qldet_outvar: Quantity - qidet_outvar: Quantity - qlsub_outvar: Quantity - qisub_outvar: Quantity - dcm_outvar: Quantity - qvten_outvar: Quantity - qlten_outvar: Quantity - qiten_outvar: Quantity - sten_outvar: Quantity - uten_outvar: Quantity - vten_outvar: Quantity - qrten_outvar: Quantity - qsten_outvar: Quantity - cufrc_outvar: Quantity - usrc_o: Quantity - vsrc_o: Quantity - thv0lcl_o: Quantity - ql0_o: Quantity - qi0_o: Quantity - t0_o: Quantity - s0_o: Quantity - u0_o: Quantity - v0_o: Quantity - qt0_o: Quantity - thl0_o: Quantity - thvl0_o: Quantity - ssthl0_o: Quantity - ssqt0_o: Quantity - thv0bot_o: Quantity - thv0top_o: Quantity - thvl0bot_o: Quantity - thvl0top_o: Quantity - ssu0_o: Quantity - ssv0_o: Quantity - dcm_s: Quantity - qvten_s: Quantity - qlten_s: Quantity - qiten_s: Quantity - sten_s: Quantity - uten_s: Quantity - vten_s: Quantity - qrten_s: Quantity - qsten_s: Quantity - qldet_s: Quantity - qidet_s: Quantity - qlsub_s: Quantity - qisub_s: Quantity - cush_s: Quantity - cufrc_s: Quantity - fer_s: Quantity - fdr_s: Quantity - qtsrc_o: Quantity - thvlsrc_o: Quantity - thlsrc_o: Quantity - qldet_out: Quantity - qidet_out: Quantity - qlsub_out: Quantity - qisub_out: Quantity - ndrop_out: Quantity - nice_out: Quantity - dcm: Quantity - xco: Quantity - qc: Quantity - qlten_det: Quantity - qiten_det: Quantity - qv0_s: Quantity - ql0_s: Quantity - qi0_s: Quantity - s0_s: Quantity - t0_s: Quantity - slten: Quantity - qv0_o: Quantity - plcl_o: Quantity - plfc_o: Quantity - tkeavg_o: Quantity - thvlmin_o: Quantity - ufrclcl: Quantity - qcu: Quantity - qlu: Quantity - qiu: Quantity - cufrc: Quantity - qtsrc: Quantity - uplus_3D: Quantity - vplus_3D: Quantity - prel: Quantity - thv0rel: Quantity - winv: Quantity - cbmf: Quantity - rho0inv: Quantity - ufrcinv: Quantity - wlcl: Quantity - qsat_pe: Quantity - thlue: Quantity - qtue: Quantity - wue: Quantity - rei: Quantity - fer: Quantity - dwten: Quantity - diten: Quantity - ql0: Quantity - qi0: Quantity - uten: Quantity - vten: Quantity - uf: Quantity - vf: Quantity - dwten_temp: Quantity - diten_temp: Quantity - fdr: Quantity - qlten_sink: Quantity - qiten_sink: Quantity - qrten: Quantity - qsten: Quantity - s0: Quantity - qvten: Quantity - qlten: Quantity - sten: Quantity - qiten: Quantity - qmin: Quantity - pmid0_in: Quantity - u0_in: Quantity - v0_in: Quantity - zmid0_in: Quantity - exnmid0_in: Quantity - dp0_in: Quantity - qv0_in: Quantity - ql0_in: Quantity - qi0_in: Quantity - th0_in: Quantity - cush_inout: Quantity - dpi: Quantity - thvlmin_IJ: Quantity - wcrit: Quantity - alpha: Quantity - del_CIN: Quantity - cin_IJ: Quantity - plfc_IJ: Quantity - cinlcl_IJ: Quantity - pe: Quantity - thle: Quantity - qte: Quantity - dpe: Quantity - exne: Quantity - thvebot: Quantity - ue: Quantity - ve: Quantity - drage: Quantity - bogbot: Quantity - bogtop: Quantity - rhomid0j: Quantity - cush_inoutvar: Quantity - uplus: Quantity - vplus: Quantity - cin_i: Quantity - cinlcl_i: Quantity - ke: Quantity - thlu_top: Quantity - qtu_top: Quantity - cldhgt: Quantity - qlubelow: Quantity - qiubelow: Quantity - qlj_2D: Quantity - qij_2D: Quantity - qcubelow: Quantity - rcwp: Quantity - rlwp: Quantity - riwp: Quantity - ppen: Quantity - tscaleh: Quantity - wtwb: Quantity - cnvtrmax: Quantity - qtu_emf: Quantity - umf_out: Quantity - qtflx_out: Quantity - slflx_out: Quantity - slflx: Quantity - thlu_emf: Quantity - uu_emf: Quantity - vu_emf: Quantity - uemf: Quantity - uflx_out: Quantity - vflx_out: Quantity - ufrc: Quantity - wu: Quantity - emf: Quantity - thlu: Quantity - qtu: Quantity - thvu: Quantity - uu: Quantity - vu: Quantity - umf_zint: Quantity - umf_outvar: Quantity - qtflx_outvar: Quantity - slflx_outvar: Quantity - uflx_outvar: Quantity - vflx_outvar: Quantity - slflx_s: Quantity - qtflx_s: Quantity - uflx_s: Quantity - vflx_s: Quantity - qtflx: Quantity - uflx: Quantity - ufrc_s: Quantity - xflx: Quantity - vflx: Quantity - umf_temp: Quantity - umf_s: Quantity - tke_in: Quantity - pifc0_in: Quantity - zifc0_in: Quantity - exnifc0_in: Quantity - kinv: Quantity - klcl: Quantity - klfc: Quantity - kinv_o: Quantity - klcl_o: Quantity - klfc_o: Quantity - kbup: Quantity - krel: Quantity - kpen: Quantity - kbup_IJ: Quantity - klfc_IJ: Quantity - kpen_IJ: Quantity - kpbl_in: Quantity - tr0_temp: Quantity - u0: Quantity - v0: Quantity - cinlcl: Quantity - - @classmethod - def make(cls, quantity_factory: QuantityFactory): - # FloatFields - ssthl0 = quantity_factory.zeros([X_DIM, Y_DIM, Z_DIM], "n/a") - ssqt0 = quantity_factory.zeros([X_DIM, Y_DIM, Z_DIM], "n/a") - ssu0 = quantity_factory.zeros([X_DIM, Y_DIM, Z_DIM], "n/a") - ssv0 = quantity_factory.zeros([X_DIM, Y_DIM, Z_DIM], "n/a") - thj = quantity_factory.zeros([X_DIM, Y_DIM, Z_DIM], "n/a") - qlj = quantity_factory.zeros([X_DIM, Y_DIM, Z_DIM], "n/a") - qvj = quantity_factory.zeros([X_DIM, Y_DIM, Z_DIM], "n/a") - qse = quantity_factory.zeros([X_DIM, Y_DIM, Z_DIM], "n/a") - qij = quantity_factory.zeros([X_DIM, Y_DIM, Z_DIM], "n/a") - tr0_temp = quantity_factory.zeros([X_DIM, Y_DIM, Z_DIM], "n/a") - thv0top = quantity_factory.zeros([X_DIM, Y_DIM, Z_DIM], "n/a") - thv0bot = quantity_factory.zeros([X_DIM, Y_DIM, Z_DIM], "n/a") - thvl0top = quantity_factory.zeros([X_DIM, Y_DIM, Z_DIM], "n/a") - dcm_out = quantity_factory.zeros([X_DIM, Y_DIM, Z_DIM], "n/a") - qvten_out = quantity_factory.zeros([X_DIM, Y_DIM, Z_DIM], "n/a") - qlten_out = quantity_factory.zeros([X_DIM, Y_DIM, Z_DIM], "n/a") - qiten_out = quantity_factory.zeros([X_DIM, Y_DIM, Z_DIM], "n/a") - sten_out = quantity_factory.zeros([X_DIM, Y_DIM, Z_DIM], "n/a") - uten_out = quantity_factory.zeros([X_DIM, Y_DIM, Z_DIM], "n/a") - vten_out = quantity_factory.zeros([X_DIM, Y_DIM, Z_DIM], "n/a") - qrten_out = quantity_factory.zeros([X_DIM, Y_DIM, Z_DIM], "n/a") - qsten_out = quantity_factory.zeros([X_DIM, Y_DIM, Z_DIM], "n/a") - cufrc_out = quantity_factory.zeros([X_DIM, Y_DIM, Z_DIM], "n/a") - fer_out = quantity_factory.zeros([X_DIM, Y_DIM, Z_DIM], "n/a") - fdr_out = quantity_factory.zeros([X_DIM, Y_DIM, Z_DIM], "n/a") - thvlavg = quantity_factory.zeros([X_DIM, Y_DIM, Z_DIM], "n/a") - tkeavg = quantity_factory.zeros([X_DIM, Y_DIM, Z_DIM], "n/a") - uavg = quantity_factory.zeros([X_DIM, Y_DIM, Z_DIM], "n/a") - vavg = quantity_factory.zeros([X_DIM, Y_DIM, Z_DIM], "n/a") - thvlmin = quantity_factory.zeros([X_DIM, Y_DIM, Z_DIM], "n/a") - qtavg = quantity_factory.zeros([X_DIM, Y_DIM, Z_DIM], "n/a") - zmid0 = quantity_factory.zeros([X_DIM, Y_DIM, Z_DIM], "n/a") - qt0 = quantity_factory.zeros([X_DIM, Y_DIM, Z_DIM], "n/a") - thvl0 = quantity_factory.zeros([X_DIM, Y_DIM, Z_DIM], "n/a") - thvl0bot = quantity_factory.zeros([X_DIM, Y_DIM, Z_DIM], "n/a") - t0 = quantity_factory.zeros([X_DIM, Y_DIM, Z_DIM], "n/a") - qv0 = quantity_factory.zeros([X_DIM, Y_DIM, Z_DIM], "n/a") - pmid0 = quantity_factory.zeros([X_DIM, Y_DIM, Z_DIM], "n/a") - thl0 = quantity_factory.zeros([X_DIM, Y_DIM, Z_DIM], "n/a") - thlsrc = quantity_factory.zeros([X_DIM, Y_DIM, Z_DIM], "n/a") - usrc = quantity_factory.zeros([X_DIM, Y_DIM, Z_DIM], "n/a") - vsrc = quantity_factory.zeros([X_DIM, Y_DIM, Z_DIM], "n/a") - plcl = quantity_factory.zeros([X_DIM, Y_DIM, Z_DIM], "n/a") - thl0lcl = quantity_factory.zeros([X_DIM, Y_DIM, Z_DIM], "n/a") - qt0lcl = quantity_factory.zeros([X_DIM, Y_DIM, Z_DIM], "n/a") - thv0lcl = quantity_factory.zeros([X_DIM, Y_DIM, Z_DIM], "n/a") - plfc = quantity_factory.zeros([X_DIM, Y_DIM, Z_DIM], "n/a") - fer_outvar = quantity_factory.zeros([X_DIM, Y_DIM, Z_DIM], "n/a") - fdr_outvar = quantity_factory.zeros([X_DIM, Y_DIM, Z_DIM], "n/a") - cin = quantity_factory.zeros([X_DIM, Y_DIM, Z_DIM], "n/a") - thvubot = quantity_factory.zeros([X_DIM, Y_DIM, Z_DIM], "n/a") - thvutop = quantity_factory.zeros([X_DIM, Y_DIM, Z_DIM], "n/a") - thvlsrc = quantity_factory.zeros([X_DIM, Y_DIM, Z_DIM], "n/a") - thl0top = quantity_factory.zeros([X_DIM, Y_DIM, Z_DIM], "n/a") - qt0top = quantity_factory.zeros([X_DIM, Y_DIM, Z_DIM], "n/a") - qldet_outvar = quantity_factory.zeros([X_DIM, Y_DIM, Z_DIM], "n/a") - qidet_outvar = quantity_factory.zeros([X_DIM, Y_DIM, Z_DIM], "n/a") - qlsub_outvar = quantity_factory.zeros([X_DIM, Y_DIM, Z_DIM], "n/a") - qisub_outvar = quantity_factory.zeros([X_DIM, Y_DIM, Z_DIM], "n/a") - dcm_outvar = quantity_factory.zeros([X_DIM, Y_DIM, Z_DIM], "n/a") - qvten_outvar = quantity_factory.zeros([X_DIM, Y_DIM, Z_DIM], "n/a") - qlten_outvar = quantity_factory.zeros([X_DIM, Y_DIM, Z_DIM], "n/a") - qiten_outvar = quantity_factory.zeros([X_DIM, Y_DIM, Z_DIM], "n/a") - sten_outvar = quantity_factory.zeros([X_DIM, Y_DIM, Z_DIM], "n/a") - uten_outvar = quantity_factory.zeros([X_DIM, Y_DIM, Z_DIM], "n/a") - vten_outvar = quantity_factory.zeros([X_DIM, Y_DIM, Z_DIM], "n/a") - qrten_outvar = quantity_factory.zeros([X_DIM, Y_DIM, Z_DIM], "n/a") - qsten_outvar = quantity_factory.zeros([X_DIM, Y_DIM, Z_DIM], "n/a") - cufrc_outvar = quantity_factory.zeros([X_DIM, Y_DIM, Z_DIM], "n/a") - usrc_o = quantity_factory.zeros([X_DIM, Y_DIM, Z_DIM], "n/a") - vsrc_o = quantity_factory.zeros([X_DIM, Y_DIM, Z_DIM], "n/a") - thv0lcl_o = quantity_factory.zeros([X_DIM, Y_DIM, Z_DIM], "n/a") - ql0_o = quantity_factory.zeros([X_DIM, Y_DIM, Z_DIM], "n/a") - qi0_o = quantity_factory.zeros([X_DIM, Y_DIM, Z_DIM], "n/a") - t0_o = quantity_factory.zeros([X_DIM, Y_DIM, Z_DIM], "n/a") - s0_o = quantity_factory.zeros([X_DIM, Y_DIM, Z_DIM], "n/a") - u0_o = quantity_factory.zeros([X_DIM, Y_DIM, Z_DIM], "n/a") - v0_o = quantity_factory.zeros([X_DIM, Y_DIM, Z_DIM], "n/a") - qt0_o = quantity_factory.zeros([X_DIM, Y_DIM, Z_DIM], "n/a") - thl0_o = quantity_factory.zeros([X_DIM, Y_DIM, Z_DIM], "n/a") - thvl0_o = quantity_factory.zeros([X_DIM, Y_DIM, Z_DIM], "n/a") - ssthl0_o = quantity_factory.zeros([X_DIM, Y_DIM, Z_DIM], "n/a") - ssqt0_o = quantity_factory.zeros([X_DIM, Y_DIM, Z_DIM], "n/a") - thv0bot_o = quantity_factory.zeros([X_DIM, Y_DIM, Z_DIM], "n/a") - thv0top_o = quantity_factory.zeros([X_DIM, Y_DIM, Z_DIM], "n/a") - thvl0bot_o = quantity_factory.zeros([X_DIM, Y_DIM, Z_DIM], "n/a") - thvl0top_o = quantity_factory.zeros([X_DIM, Y_DIM, Z_DIM], "n/a") - ssu0_o = quantity_factory.zeros([X_DIM, Y_DIM, Z_DIM], "n/a") - ssv0_o = quantity_factory.zeros([X_DIM, Y_DIM, Z_DIM], "n/a") - dcm_s = quantity_factory.zeros([X_DIM, Y_DIM, Z_DIM], "n/a") - qvten_s = quantity_factory.zeros([X_DIM, Y_DIM, Z_DIM], "n/a") - qlten_s = quantity_factory.zeros([X_DIM, Y_DIM, Z_DIM], "n/a") - qiten_s = quantity_factory.zeros([X_DIM, Y_DIM, Z_DIM], "n/a") - sten_s = quantity_factory.zeros([X_DIM, Y_DIM, Z_DIM], "n/a") - uten_s = quantity_factory.zeros([X_DIM, Y_DIM, Z_DIM], "n/a") - vten_s = quantity_factory.zeros([X_DIM, Y_DIM, Z_DIM], "n/a") - qrten_s = quantity_factory.zeros([X_DIM, Y_DIM, Z_DIM], "n/a") - qsten_s = quantity_factory.zeros([X_DIM, Y_DIM, Z_DIM], "n/a") - qldet_s = quantity_factory.zeros([X_DIM, Y_DIM, Z_DIM], "n/a") - qidet_s = quantity_factory.zeros([X_DIM, Y_DIM, Z_DIM], "n/a") - qlsub_s = quantity_factory.zeros([X_DIM, Y_DIM, Z_DIM], "n/a") - qisub_s = quantity_factory.zeros([X_DIM, Y_DIM, Z_DIM], "n/a") - cush_s = quantity_factory.zeros([X_DIM, Y_DIM, Z_DIM], "n/a") - cufrc_s = quantity_factory.zeros([X_DIM, Y_DIM, Z_DIM], "n/a") - fer_s = quantity_factory.zeros([X_DIM, Y_DIM, Z_DIM], "n/a") - fdr_s = quantity_factory.zeros([X_DIM, Y_DIM, Z_DIM], "n/a") - qtsrc_o = quantity_factory.zeros([X_DIM, Y_DIM, Z_DIM], "n/a") - thvlsrc_o = quantity_factory.zeros([X_DIM, Y_DIM, Z_DIM], "n/a") - thlsrc_o = quantity_factory.zeros([X_DIM, Y_DIM, Z_DIM], "n/a") - qldet_out = quantity_factory.zeros([X_DIM, Y_DIM, Z_DIM], "n/a") - qidet_out = quantity_factory.zeros([X_DIM, Y_DIM, Z_DIM], "n/a") - qlsub_out = quantity_factory.zeros([X_DIM, Y_DIM, Z_DIM], "n/a") - qisub_out = quantity_factory.zeros([X_DIM, Y_DIM, Z_DIM], "n/a") - ndrop_out = quantity_factory.zeros([X_DIM, Y_DIM, Z_DIM], "n/a") - nice_out = quantity_factory.zeros([X_DIM, Y_DIM, Z_DIM], "n/a") - dcm = quantity_factory.zeros([X_DIM, Y_DIM, Z_DIM], "n/a") - xco = quantity_factory.zeros([X_DIM, Y_DIM, Z_DIM], "n/a") - qc = quantity_factory.zeros([X_DIM, Y_DIM, Z_DIM], "n/a") - qlten_det = quantity_factory.zeros([X_DIM, Y_DIM, Z_DIM], "n/a") - qiten_det = quantity_factory.zeros([X_DIM, Y_DIM, Z_DIM], "n/a") - qv0_s = quantity_factory.zeros([X_DIM, Y_DIM, Z_DIM], "n/a") - ql0_s = quantity_factory.zeros([X_DIM, Y_DIM, Z_DIM], "n/a") - qi0_s = quantity_factory.zeros([X_DIM, Y_DIM, Z_DIM], "n/a") - s0_s = quantity_factory.zeros([X_DIM, Y_DIM, Z_DIM], "n/a") - t0_s = quantity_factory.zeros([X_DIM, Y_DIM, Z_DIM], "n/a") - slten = quantity_factory.zeros([X_DIM, Y_DIM, Z_DIM], "n/a") - qv0_o = quantity_factory.zeros([X_DIM, Y_DIM, Z_DIM], "n/a") - plcl_o = quantity_factory.zeros([X_DIM, Y_DIM, Z_DIM], "n/a") - plfc_o = quantity_factory.zeros([X_DIM, Y_DIM, Z_DIM], "n/a") - tkeavg_o = quantity_factory.zeros([X_DIM, Y_DIM, Z_DIM], "n/a") - thvlmin_o = quantity_factory.zeros([X_DIM, Y_DIM, Z_DIM], "n/a") - ufrclcl = quantity_factory.zeros([X_DIM, Y_DIM, Z_DIM], "n/a") - qcu = quantity_factory.zeros([X_DIM, Y_DIM, Z_DIM], "n/a") - qlu = quantity_factory.zeros([X_DIM, Y_DIM, Z_DIM], "n/a") - qiu = quantity_factory.zeros([X_DIM, Y_DIM, Z_DIM], "n/a") - cufrc = quantity_factory.zeros([X_DIM, Y_DIM, Z_DIM], "n/a") - qtsrc = quantity_factory.zeros([X_DIM, Y_DIM, Z_DIM], "n/a") - uplus_3D = quantity_factory.zeros([X_DIM, Y_DIM, Z_DIM], "n/a") - vplus_3D = quantity_factory.zeros([X_DIM, Y_DIM, Z_DIM], "n/a") - prel = quantity_factory.zeros([X_DIM, Y_DIM, Z_DIM], "n/a") - thv0rel = quantity_factory.zeros([X_DIM, Y_DIM, Z_DIM], "n/a") - winv = quantity_factory.zeros([X_DIM, Y_DIM, Z_DIM], "n/a") - cbmf = quantity_factory.zeros([X_DIM, Y_DIM, Z_DIM], "n/a") - rho0inv = quantity_factory.zeros([X_DIM, Y_DIM, Z_DIM], "n/a") - ufrcinv = quantity_factory.zeros([X_DIM, Y_DIM, Z_DIM], "n/a") - wlcl = quantity_factory.zeros([X_DIM, Y_DIM, Z_DIM], "n/a") - qsat_pe = quantity_factory.zeros([X_DIM, Y_DIM, Z_DIM], "n/a") - thlue = quantity_factory.zeros([X_DIM, Y_DIM, Z_DIM], "n/a") - qtue = quantity_factory.zeros([X_DIM, Y_DIM, Z_DIM], "n/a") - wue = quantity_factory.zeros([X_DIM, Y_DIM, Z_DIM], "n/a") - rei = quantity_factory.zeros([X_DIM, Y_DIM, Z_DIM], "n/a") - fer = quantity_factory.zeros([X_DIM, Y_DIM, Z_DIM], "n/a") - dwten = quantity_factory.zeros([X_DIM, Y_DIM, Z_DIM], "n/a") - diten = quantity_factory.zeros([X_DIM, Y_DIM, Z_DIM], "n/a") - ql0 = quantity_factory.zeros([X_DIM, Y_DIM, Z_DIM], "n/a") - qi0 = quantity_factory.zeros([X_DIM, Y_DIM, Z_DIM], "n/a") - uten = quantity_factory.zeros([X_DIM, Y_DIM, Z_DIM], "n/a") - vten = quantity_factory.zeros([X_DIM, Y_DIM, Z_DIM], "n/a") - uf = quantity_factory.zeros([X_DIM, Y_DIM, Z_DIM], "n/a") - vf = quantity_factory.zeros([X_DIM, Y_DIM, Z_DIM], "n/a") - dwten_temp = quantity_factory.zeros([X_DIM, Y_DIM, Z_DIM], "n/a") - diten_temp = quantity_factory.zeros([X_DIM, Y_DIM, Z_DIM], "n/a") - fdr = quantity_factory.zeros([X_DIM, Y_DIM, Z_DIM], "n/a") - qlten_sink = quantity_factory.zeros([X_DIM, Y_DIM, Z_DIM], "n/a") - qiten_sink = quantity_factory.zeros([X_DIM, Y_DIM, Z_DIM], "n/a") - qrten = quantity_factory.zeros([X_DIM, Y_DIM, Z_DIM], "n/a") - qsten = quantity_factory.zeros([X_DIM, Y_DIM, Z_DIM], "n/a") - s0 = quantity_factory.zeros([X_DIM, Y_DIM, Z_DIM], "n/a") - qvten = quantity_factory.zeros([X_DIM, Y_DIM, Z_DIM], "n/a") - qlten = quantity_factory.zeros([X_DIM, Y_DIM, Z_DIM], "n/a") - sten = quantity_factory.zeros([X_DIM, Y_DIM, Z_DIM], "n/a") - qiten = quantity_factory.zeros([X_DIM, Y_DIM, Z_DIM], "n/a") - qmin = quantity_factory.zeros([X_DIM, Y_DIM, Z_DIM], "n/a") - pmid0_in = quantity_factory.zeros([X_DIM, Y_DIM, Z_DIM], "n/a") - u0_in = quantity_factory.zeros([X_DIM, Y_DIM, Z_DIM], "n/a") - v0_in = quantity_factory.zeros([X_DIM, Y_DIM, Z_DIM], "n/a") - u0 = quantity_factory.zeros([X_DIM, Y_DIM, Z_DIM], "n/a") - v0 = quantity_factory.zeros([X_DIM, Y_DIM, Z_DIM], "n/a") - zmid0_in = quantity_factory.zeros([X_DIM, Y_DIM, Z_DIM], "n/a") - exnmid0_in = quantity_factory.zeros([X_DIM, Y_DIM, Z_DIM], "n/a") - dp0_in = quantity_factory.zeros([X_DIM, Y_DIM, Z_DIM], "n/a") - qv0_in = quantity_factory.zeros([X_DIM, Y_DIM, Z_DIM], "n/a") - ql0_in = quantity_factory.zeros([X_DIM, Y_DIM, Z_DIM], "n/a") - qi0_in = quantity_factory.zeros([X_DIM, Y_DIM, Z_DIM], "n/a") - th0_in = quantity_factory.zeros([X_DIM, Y_DIM, Z_DIM], "n/a") - cinlcl = quantity_factory.zeros([X_DIM, Y_DIM, Z_DIM], "n/a") - # FloatFieldIJs - cush_inout = quantity_factory.zeros([X_DIM, Y_DIM], units="n/a") - dpi = quantity_factory.zeros([X_DIM, Y_DIM], units="n/a") - thvlmin_IJ = quantity_factory.zeros([X_DIM, Y_DIM], units="n/a") - wcrit = quantity_factory.zeros([X_DIM, Y_DIM], units="n/a") - alpha = quantity_factory.zeros([X_DIM, Y_DIM], units="n/a") - del_CIN = quantity_factory.zeros([X_DIM, Y_DIM], units="n/a") - cin_IJ = quantity_factory.zeros([X_DIM, Y_DIM], units="n/a") - plfc_IJ = quantity_factory.zeros([X_DIM, Y_DIM], units="n/a") - cinlcl_IJ = quantity_factory.zeros([X_DIM, Y_DIM], units="n/a") - pe = quantity_factory.zeros([X_DIM, Y_DIM], units="n/a") - thle = quantity_factory.zeros([X_DIM, Y_DIM], units="n/a") - qte = quantity_factory.zeros([X_DIM, Y_DIM], units="n/a") - dpe = quantity_factory.zeros([X_DIM, Y_DIM], units="n/a") - exne = quantity_factory.zeros([X_DIM, Y_DIM], units="n/a") - thvebot = quantity_factory.zeros([X_DIM, Y_DIM], units="n/a") - ue = quantity_factory.zeros([X_DIM, Y_DIM], units="n/a") - ve = quantity_factory.zeros([X_DIM, Y_DIM], units="n/a") - drage = quantity_factory.zeros([X_DIM, Y_DIM], units="n/a") - bogbot = quantity_factory.zeros([X_DIM, Y_DIM], units="n/a") - bogtop = quantity_factory.zeros([X_DIM, Y_DIM], units="n/a") - rhomid0j = quantity_factory.zeros([X_DIM, Y_DIM], units="n/a") - cush_inoutvar = quantity_factory.zeros([X_DIM, Y_DIM], units="n/a") - uplus = quantity_factory.zeros([X_DIM, Y_DIM], units="n/a") - vplus = quantity_factory.zeros([X_DIM, Y_DIM], units="n/a") - cin_i = quantity_factory.zeros([X_DIM, Y_DIM], units="n/a") - cinlcl_i = quantity_factory.zeros([X_DIM, Y_DIM], units="n/a") - ke = quantity_factory.zeros([X_DIM, Y_DIM], units="n/a") - thlu_top = quantity_factory.zeros([X_DIM, Y_DIM], units="n/a") - qtu_top = quantity_factory.zeros([X_DIM, Y_DIM], units="n/a") - cldhgt = quantity_factory.zeros([X_DIM, Y_DIM], units="n/a") - qlubelow = quantity_factory.zeros([X_DIM, Y_DIM], units="n/a") - qiubelow = quantity_factory.zeros([X_DIM, Y_DIM], units="n/a") - qlj_2D = quantity_factory.zeros([X_DIM, Y_DIM], units="n/a") - qij_2D = quantity_factory.zeros([X_DIM, Y_DIM], units="n/a") - qcubelow = quantity_factory.zeros([X_DIM, Y_DIM], units="n/a") - rcwp = quantity_factory.zeros([X_DIM, Y_DIM], units="n/a") - rlwp = quantity_factory.zeros([X_DIM, Y_DIM], units="n/a") - riwp = quantity_factory.zeros([X_DIM, Y_DIM], units="n/a") - ppen = quantity_factory.zeros([X_DIM, Y_DIM], units="n/a") - tscaleh = quantity_factory.zeros([X_DIM, Y_DIM], units="n/a") - wtwb = quantity_factory.zeros([X_DIM, Y_DIM], units="n/a") - cnvtrmax = quantity_factory.zeros([X_DIM, Y_DIM], units="n/a") - # Interface FloatFields - qtu_emf = quantity_factory.zeros([X_DIM, Y_DIM, Z_INTERFACE_DIM], units="n/a") - umf_out = quantity_factory.zeros([X_DIM, Y_DIM, Z_INTERFACE_DIM], units="n/a") - qtflx_out = quantity_factory.zeros([X_DIM, Y_DIM, Z_INTERFACE_DIM], units="n/a") - slflx_out = quantity_factory.zeros([X_DIM, Y_DIM, Z_INTERFACE_DIM], units="n/a") - slflx = quantity_factory.zeros([X_DIM, Y_DIM, Z_INTERFACE_DIM], units="n/a") - thlu_emf = quantity_factory.zeros([X_DIM, Y_DIM, Z_INTERFACE_DIM], units="n/a") - uu_emf = quantity_factory.zeros([X_DIM, Y_DIM, Z_INTERFACE_DIM], units="n/a") - vu_emf = quantity_factory.zeros([X_DIM, Y_DIM, Z_INTERFACE_DIM], units="n/a") - uemf = quantity_factory.zeros([X_DIM, Y_DIM, Z_INTERFACE_DIM], units="n/a") - uflx_out = quantity_factory.zeros([X_DIM, Y_DIM, Z_INTERFACE_DIM], units="n/a") - vflx_out = quantity_factory.zeros([X_DIM, Y_DIM, Z_INTERFACE_DIM], units="n/a") - ufrc = quantity_factory.zeros([X_DIM, Y_DIM, Z_INTERFACE_DIM], units="n/a") - wu = quantity_factory.zeros([X_DIM, Y_DIM, Z_INTERFACE_DIM], units="n/a") - emf = quantity_factory.zeros([X_DIM, Y_DIM, Z_INTERFACE_DIM], units="n/a") - thlu = quantity_factory.zeros([X_DIM, Y_DIM, Z_INTERFACE_DIM], units="n/a") - qtu = quantity_factory.zeros([X_DIM, Y_DIM, Z_INTERFACE_DIM], units="n/a") - uu = quantity_factory.zeros([X_DIM, Y_DIM, Z_INTERFACE_DIM], units="n/a") - vu = quantity_factory.zeros([X_DIM, Y_DIM, Z_INTERFACE_DIM], units="n/a") - umf_zint = quantity_factory.zeros([X_DIM, Y_DIM, Z_INTERFACE_DIM], units="n/a") - thvu = quantity_factory.zeros([X_DIM, Y_DIM, Z_INTERFACE_DIM], units="n/a") - umf_outvar = quantity_factory.zeros([X_DIM, Y_DIM, Z_INTERFACE_DIM], units="n/a") - qtflx_outvar = quantity_factory.zeros([X_DIM, Y_DIM, Z_INTERFACE_DIM], units="n/a") - slflx_outvar = quantity_factory.zeros([X_DIM, Y_DIM, Z_INTERFACE_DIM], units="n/a") - uflx_outvar = quantity_factory.zeros([X_DIM, Y_DIM, Z_INTERFACE_DIM], units="n/a") - vflx_outvar = quantity_factory.zeros([X_DIM, Y_DIM, Z_INTERFACE_DIM], units="n/a") - slflx_s = quantity_factory.zeros([X_DIM, Y_DIM, Z_INTERFACE_DIM], units="n/a") - qtflx_s = quantity_factory.zeros([X_DIM, Y_DIM, Z_INTERFACE_DIM], units="n/a") - uflx_s = quantity_factory.zeros([X_DIM, Y_DIM, Z_INTERFACE_DIM], units="n/a") - vflx_s = quantity_factory.zeros([X_DIM, Y_DIM, Z_INTERFACE_DIM], units="n/a") - qtflx = quantity_factory.zeros([X_DIM, Y_DIM, Z_INTERFACE_DIM], units="n/a") - uflx = quantity_factory.zeros([X_DIM, Y_DIM, Z_INTERFACE_DIM], units="n/a") - ufrc_s = quantity_factory.zeros([X_DIM, Y_DIM, Z_INTERFACE_DIM], units="n/a") - xflx = quantity_factory.zeros([X_DIM, Y_DIM, Z_INTERFACE_DIM], units="n/a") - vflx = quantity_factory.zeros([X_DIM, Y_DIM, Z_INTERFACE_DIM], units="n/a") - umf_temp = quantity_factory.zeros([X_DIM, Y_DIM, Z_INTERFACE_DIM], units="n/a") - umf_s = quantity_factory.zeros([X_DIM, Y_DIM, Z_INTERFACE_DIM], units="n/a") - tke_in = quantity_factory.zeros([X_DIM, Y_DIM, Z_INTERFACE_DIM], units="n/a") - pifc0_in = quantity_factory.zeros([X_DIM, Y_DIM, Z_INTERFACE_DIM], units="n/a") - zifc0_in = quantity_factory.zeros([X_DIM, Y_DIM, Z_INTERFACE_DIM], units="n/a") - exnifc0_in = quantity_factory.zeros([X_DIM, Y_DIM, Z_INTERFACE_DIM], units="n/a") - # IntFields - kinv = quantity_factory.zeros([X_DIM, Y_DIM, Z_DIM], units="n/a", dtype=Int) - klcl = quantity_factory.zeros([X_DIM, Y_DIM, Z_DIM], units="n/a", dtype=Int) - klfc = quantity_factory.zeros([X_DIM, Y_DIM, Z_DIM], units="n/a", dtype=Int) - kinv_o = quantity_factory.zeros([X_DIM, Y_DIM, Z_DIM], units="n/a", dtype=Int) - klcl_o = quantity_factory.zeros([X_DIM, Y_DIM, Z_DIM], units="n/a", dtype=Int) - klfc_o = quantity_factory.zeros([X_DIM, Y_DIM, Z_DIM], units="n/a", dtype=Int) - kbup = quantity_factory.zeros([X_DIM, Y_DIM, Z_DIM], units="n/a", dtype=Int) - krel = quantity_factory.zeros([X_DIM, Y_DIM, Z_DIM], units="n/a", dtype=Int) - kpen = quantity_factory.zeros([X_DIM, Y_DIM, Z_DIM], units="n/a", dtype=Int) - - # IntFieldIJs - kbup_IJ = quantity_factory.zeros([X_DIM, Y_DIM], units="n/a", dtype=Int) - klfc_IJ = quantity_factory.zeros([X_DIM, Y_DIM], units="n/a", dtype=Int) - kpen_IJ = quantity_factory.zeros([X_DIM, Y_DIM], units="n/a", dtype=Int) - kpbl_in = quantity_factory.zeros([X_DIM, Y_DIM], units="n/a", dtype=Int) - - return cls( - ssthl0, - ssqt0, - ssu0, - ssv0, - thj, - qlj, - qvj, - qse, - qij, - thv0top, - thv0bot, - thvl0top, - dcm_out, - qvten_out, - qlten_out, - qiten_out, - sten_out, - uten_out, - vten_out, - qrten_out, - qsten_out, - cufrc_out, - fer_out, - fdr_out, - thvlavg, - tkeavg, - uavg, - vavg, - thvlmin, - qtavg, - zmid0, - qt0, - thvl0, - thvl0bot, - t0, - qv0, - pmid0, - thl0, - thlsrc, - usrc, - vsrc, - plcl, - thl0lcl, - qt0lcl, - thv0lcl, - plfc, - fer_outvar, - fdr_outvar, - cin, - thvubot, - thvutop, - thvlsrc, - thl0top, - qt0top, - qldet_outvar, - qidet_outvar, - qlsub_outvar, - qisub_outvar, - dcm_outvar, - qvten_outvar, - qlten_outvar, - qiten_outvar, - sten_outvar, - uten_outvar, - vten_outvar, - qrten_outvar, - qsten_outvar, - cufrc_outvar, - usrc_o, - vsrc_o, - thv0lcl_o, - ql0_o, - qi0_o, - t0_o, - s0_o, - u0_o, - v0_o, - qt0_o, - thl0_o, - thvl0_o, - ssthl0_o, - ssqt0_o, - thv0bot_o, - thv0top_o, - thvl0bot_o, - thvl0top_o, - ssu0_o, - ssv0_o, - dcm_s, - qvten_s, - qlten_s, - qiten_s, - sten_s, - uten_s, - vten_s, - qrten_s, - qsten_s, - qldet_s, - qidet_s, - qlsub_s, - qisub_s, - cush_s, - cufrc_s, - fer_s, - fdr_s, - qtsrc_o, - thvlsrc_o, - thlsrc_o, - qldet_out, - qidet_out, - qlsub_out, - qisub_out, - ndrop_out, - nice_out, - dcm, - xco, - qc, - qlten_det, - qiten_det, - qv0_s, - ql0_s, - qi0_s, - s0_s, - t0_s, - slten, - qv0_o, - plcl_o, - plfc_o, - tkeavg_o, - thvlmin_o, - ufrclcl, - qcu, - qlu, - qiu, - cufrc, - qtsrc, - uplus_3D, - vplus_3D, - prel, - thv0rel, - winv, - cbmf, - rho0inv, - ufrcinv, - wlcl, - qsat_pe, - thlue, - qtue, - wue, - rei, - fer, - dwten, - diten, - ql0, - qi0, - uten, - vten, - uf, - vf, - dwten_temp, - diten_temp, - fdr, - qlten_sink, - qiten_sink, - qrten, - qsten, - s0, - qvten, - qlten, - sten, - qiten, - qmin, - pmid0_in, - u0_in, - v0_in, - zmid0_in, - exnmid0_in, - dp0_in, - qv0_in, - ql0_in, - qi0_in, - th0_in, - cush_inout, - dpi, - thvlmin_IJ, - wcrit, - alpha, - del_CIN, - cin_IJ, - plfc_IJ, - cinlcl_IJ, - pe, - thle, - qte, - dpe, - exne, - thvebot, - ue, - ve, - drage, - bogbot, - bogtop, - rhomid0j, - cush_inoutvar, - uplus, - vplus, - cin_i, - cinlcl_i, - ke, - thlu_top, - qtu_top, - cldhgt, - qlubelow, - qiubelow, - qlj_2D, - qij_2D, - qcubelow, - rcwp, - rlwp, - riwp, - ppen, - tscaleh, - wtwb, - cnvtrmax, - qtu_emf, - umf_out, - qtflx_out, - slflx_out, - slflx, - thlu_emf, - uu_emf, - vu_emf, - uemf, - uflx_out, - vflx_out, - ufrc, - wu, - emf, - thlu, - qtu, - thvu, - uu, - vu, - umf_zint, - umf_outvar, - qtflx_outvar, - slflx_outvar, - uflx_outvar, - vflx_outvar, - slflx_s, - qtflx_s, - uflx_s, - vflx_s, - qtflx, - uflx, - ufrc_s, - xflx, - vflx, - umf_temp, - umf_s, - tke_in, - pifc0_in, - zifc0_in, - exnifc0_in, - kinv, - klcl, - klfc, - kinv_o, - klcl_o, - klfc_o, - kbup, - krel, - kpen, - kbup_IJ, - klfc_IJ, - kpen_IJ, - kpbl_in, - tr0_temp, - u0, - v0, - cinlcl, - ) diff --git a/GEOSagcm_GridComp/GEOSphysics_GridComp/GEOSmoist_GridComp/pyMoist/pyMoist/UW/uwshcu_functions.py b/GEOSagcm_GridComp/GEOSphysics_GridComp/GEOSmoist_GridComp/pyMoist/pyMoist/UW/uwshcu_functions.py index 94e416988..148f73392 100644 --- a/GEOSagcm_GridComp/GEOSphysics_GridComp/GEOSmoist_GridComp/pyMoist/pyMoist/UW/uwshcu_functions.py +++ b/GEOSagcm_GridComp/GEOSphysics_GridComp/GEOSmoist_GridComp/pyMoist/pyMoist/UW/uwshcu_functions.py @@ -72,7 +72,6 @@ def slope_mid( Returns: slope [Float]: Slope of the field of interest [n/a] """ - if K > 0 and K < max_k: above_value = (field[0, 0, 1] - field) / (p0[0, 0, 1] - p0) below_value = (field - field[0, 0, -1]) / (p0 - p0[0, 0, -1]) @@ -84,35 +83,6 @@ def slope_mid( return slope -# @gtscript.function -# def slope_top( -# max_k: Int, -# field: FloatField, -# p0: FloatField, -# ): -# """ -# Function that calculates slope at mid layers of a field. - -# Inputs: -# max_k [Int]: Max k level (e.g., 71) -# field [FloatField]: Field of interest [n/a] -# p0 [FloatField]: Pressure [Pa] - -# Returns: -# slope [Float]: Slope of the field of interest [n/a] -# """ - -# if K == max_k: -# above_value = (field[0, 0, -1] - field) / (p0[0, 0, -1] - p0) -# below_value = (field - field[0, 0, -2]) / (p0 - p0[0, 0, -2]) -# if above_value > 0.0: -# slope = max(0.0, min(above_value, below_value)) -# else: -# slope = min(0.0, max(above_value, below_value)) - -# return slope - - @gtscript.function def ice_fraction( temp: Float, diff --git a/GEOSagcm_GridComp/GEOSphysics_GridComp/GEOSmoist_GridComp/pyMoist/tests/savepoint/UW_translate_tests/translate_adjust_implicit_CIN_inputs1.py b/GEOSagcm_GridComp/GEOSphysics_GridComp/GEOSmoist_GridComp/pyMoist/tests/savepoint/UW_translate_tests/translate_adjust_implicit_CIN_inputs1.py new file mode 100644 index 000000000..27045e5ac --- /dev/null +++ b/GEOSagcm_GridComp/GEOSphysics_GridComp/GEOSmoist_GridComp/pyMoist/tests/savepoint/UW_translate_tests/translate_adjust_implicit_CIN_inputs1.py @@ -0,0 +1,257 @@ +from f90nml import Namelist +from gt4py.cartesian.gtscript import int32 + +import pyMoist.constants as constants +from ndsl import StencilFactory +from ndsl.constants import X_DIM, Y_DIM, Z_DIM +from ndsl.dsl.typing import Float, Int +from ndsl.stencils.testing.grid import Grid +from ndsl.stencils.testing.translate import TranslateFortranData2Py +from ndsl.utils import safe_assign_array +from pyMoist.UW.compute_uwshcu import adjust_implicit_CIN_inputs1 +from pyMoist.UW.config import UWConfiguration + + +class TranslateAdjustImplicitCINInputs1(TranslateFortranData2Py): + def __init__( + self, + grid: Grid, + namelist: Namelist, + stencil_factory: StencilFactory, + # UW_config: UWConfiguration, + ): + super().__init__(grid, stencil_factory) + self.stencil_factory = stencil_factory + self.quantity_factory = grid.quantity_factory + # self.UW_config = UW_config + + self._adjust_implicit_CIN_inputs1 = self.stencil_factory.from_dims_halo( + func=adjust_implicit_CIN_inputs1, + compute_dims=[X_DIM, Y_DIM, Z_DIM], + externals={"ncnst": 23}, + ) + + # FloatField Inputs + self.in_vars["data_vars"] = { + "condensation": {}, + "qi0": {}, + "qiten": {}, + "ql0": {}, + "qlten": {}, + "qv0": {}, + "qvten": {}, + "s0": {}, + "sten": {}, + "t0": {}, + "tr0_AdjustCIN": {}, + "trten": {}, + "u0": {}, + "uten": {}, + "v0": {}, + "vten": {}, + } + + # Float/Int Inputs + self.in_vars["parameters"] = [ + "dotransport", + "ncnst", + "k0", + "tr0", + "windsrcavg", + "qtsrchgt", + "qtsrc_fac", + "thlsrc_fac", + "frc_rasn", + "rbuoy", + "epsvarw", + "use_CINcin", + "mumin1", + "rmaxfrac", + "PGFc", + "niter_xc", + "criqc", + "rle", + "cridist_opt", + "mixscale", + "rkm", + "dt", + "detrhgt", + "rdrag", + "use_self_detrain", + "detrhgt", + "use_cumpenent", + "rpen", + "use_momenflx", + "rdrop", + "iter_cin", + ] + + # FloatField Outputs + self.out_vars = { + "qi0_s": self.grid.compute_dict(), + "qiten_s": self.grid.compute_dict(), + "ql0_s": self.grid.compute_dict(), + "qlten_s": self.grid.compute_dict(), + "qv0_s": self.grid.compute_dict(), + "qvten_s": self.grid.compute_dict(), + "s0_s": self.grid.compute_dict(), + "sten_s": self.grid.compute_dict(), + "t0_s": self.grid.compute_dict(), + "tr0_s": self.grid.compute_dict(), + "u0_s": self.grid.compute_dict(), + "uten_s": self.grid.compute_dict(), + "v0_s": self.grid.compute_dict(), + "vten_s": self.grid.compute_dict(), + } + + def compute(self, inputs): + self.UW_config = UWConfiguration(Int(inputs["ncnst"]), Int(inputs["k0"]), Int(inputs["windsrcavg"])) + + self.quantity_factory.add_data_dimensions( + { + "ntracers": constants.NCNST, + } + ) + + # Float/Int Inputs + dotransport = Int(inputs["dotransport"]) + k0 = Int(inputs["k0"]) + windsrcavg = Int(inputs["windsrcavg"]) + qtsrchgt = Float(inputs["qtsrchgt"]) + qtsrc_fac = Float(inputs["qtsrc_fac"]) + thlsrc_fac = Float(inputs["thlsrc_fac"]) + frc_rasn = Float(inputs["frc_rasn"]) + rbuoy = Float(inputs["rbuoy"]) + epsvarw = Float(inputs["epsvarw"]) + use_CINcin = Int(inputs["use_CINcin"]) + mumin1 = Float(inputs["mumin1"]) + rmaxfrac = Float(inputs["rmaxfrac"]) + PGFc = Float(inputs["PGFc"]) + dt = Float(inputs["dt"]) + niter_xc = Int(inputs["niter_xc"]) + criqc = Float(inputs["criqc"]) + rle = Float(inputs["rle"]) + cridist_opt = Int(inputs["cridist_opt"]) + mixscale = Float(inputs["mixscale"]) + rdrag = Float(inputs["rdrag"]) + rkm = Float(inputs["rkm"]) + use_self_detrain = Int(inputs["use_self_detrain"]) + detrhgt = Float(inputs["detrhgt"]) + use_cumpenent = Int(inputs["use_cumpenent"]) + rpen = Float(inputs["rpen"]) + use_momenflx = Int(inputs["use_momenflx"]) + rdrop = Float(inputs["rdrop"]) + iter_cin = Int(inputs["iter_cin"]) + + # Inputs + condensation = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM], units="n/a", dtype=bool) + + for i in range(0, 24): + for j in range(0, 24): + if inputs["condensation"][i, j] == 1: + condensation.view[i, j] = False + else: + condensation.view[i, j] = True + + qi0 = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + safe_assign_array(qi0.view[:], inputs["qi0"]) + qiten = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + safe_assign_array(qiten.view[:], inputs["qiten"]) + ql0 = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + safe_assign_array(ql0.view[:], inputs["ql0"]) + qlten = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + safe_assign_array(qlten.view[:], inputs["qlten"]) + qv0 = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + safe_assign_array(qv0.view[:], inputs["qv0"]) + qvten = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + safe_assign_array(qvten.view[:], inputs["qvten"]) + s0 = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + safe_assign_array(s0.view[:], inputs["s0"]) + sten = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + safe_assign_array(sten.view[:], inputs["sten"]) + t0 = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + safe_assign_array(t0.view[:], inputs["t0"]) + tr0 = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM, "ntracers"], units="n/a") + safe_assign_array(tr0.view[:], inputs["tr0_AdjustCIN"]) + trten = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM, "ntracers"], units="n/a") + safe_assign_array(trten.view[:], inputs["trten"]) + u0 = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + safe_assign_array(u0.view[:], inputs["u0"]) + uten = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + safe_assign_array(uten.view[:], inputs["uten"]) + v0 = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + safe_assign_array(v0.view[:], inputs["v0"]) + vten = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + safe_assign_array(vten.view[:], inputs["vten"]) + + # Outputs + qi0_s = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + qiten_s = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + ql0_s = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + qlten_s = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + qv0_s = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + qvten_s = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + s0_s = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + sten_s = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + t0_s = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + tr0_s = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM, "ntracers"], units="n/a") + u0_s = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + uten_s = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + v0_s = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + vten_s = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + + # The iteration you want to test + iter_test = int32(0) + + # # Call stencils + self._adjust_implicit_CIN_inputs1( + condensation=condensation, + qv0=qv0, + qvten=qvten, + dt=dt, + ql0=ql0, + qlten=qlten, + qi0=qi0, + qiten=qiten, + s0=s0, + sten=sten, + u0=u0, + uten=uten, + v0=v0, + vten=vten, + t0=t0, + dotransport=dotransport, + tr0_s=tr0_s, + tr0=tr0, + trten=trten, + qv0_s=qv0_s, + ql0_s=ql0_s, + qi0_s=qi0_s, + s0_s=s0_s, + t0_s=t0_s, + u0_s=u0_s, + v0_s=v0_s, + qvten_s=qvten_s, + qlten_s=qlten_s, + qiten_s=qiten_s, + sten_s=sten_s, + uten_s=uten_s, + vten_s=vten_s, + ) + + return { + "qi0_s": qi0_s.view[:], + "qiten_s": qiten_s.view[:], + "ql0_s": ql0_s.view[:], + "qlten_s": qlten_s.view[:], + "qv0_s": qv0_s.view[:], + "qvten_s": qvten_s.view[:], + "s0_s": s0_s.view[:], + "sten_s": sten_s.view[:], + "t0_s": t0_s.view[:], + "tr0_s": tr0_s.view[:], + "u0_s": u0_s.view[:], + "uten_s": uten_s.view[:], + "v0_s": v0_s.view[:], + "vten_s": vten_s.view[:], + } diff --git a/GEOSagcm_GridComp/GEOSphysics_GridComp/GEOSmoist_GridComp/pyMoist/tests/savepoint/UW_translate_tests/translate_adjust_implicit_CIN_inputs2.py b/GEOSagcm_GridComp/GEOSphysics_GridComp/GEOSmoist_GridComp/pyMoist/tests/savepoint/UW_translate_tests/translate_adjust_implicit_CIN_inputs2.py new file mode 100644 index 000000000..60632f5f7 --- /dev/null +++ b/GEOSagcm_GridComp/GEOSphysics_GridComp/GEOSmoist_GridComp/pyMoist/tests/savepoint/UW_translate_tests/translate_adjust_implicit_CIN_inputs2.py @@ -0,0 +1,250 @@ +from f90nml import Namelist +from gt4py.cartesian.gtscript import int32 + +import pyMoist.constants as constants +from ndsl import StencilFactory +from ndsl.constants import X_DIM, Y_DIM, Z_DIM, Z_INTERFACE_DIM +from ndsl.dsl.typing import Float, Int +from ndsl.stencils.testing.grid import Grid +from ndsl.stencils.testing.translate import TranslateFortranData2Py +from ndsl.utils import safe_assign_array +from pyMoist.UW.compute_uwshcu import adjust_implicit_CIN_inputs2 +from pyMoist.UW.config import UWConfiguration + + +class TranslateAdjustImplicitCINInputs2(TranslateFortranData2Py): + def __init__( + self, + grid: Grid, + namelist: Namelist, + stencil_factory: StencilFactory, + # UW_config: UWConfiguration, + ): + super().__init__(grid, stencil_factory) + self.stencil_factory = stencil_factory + self.quantity_factory = grid.quantity_factory + # self.UW_config = UW_config + + self._adjust_implicit_CIN_inputs2 = self.stencil_factory.from_dims_halo( + func=adjust_implicit_CIN_inputs2, + compute_dims=[X_DIM, Y_DIM, Z_DIM], + externals={"ncnst": 23}, + ) + + # FloatField Inputs + self.in_vars["data_vars"] = { + "condensation": {}, + "qtflx": {}, + "slflx": {}, + "uflx": {}, + "ufrc": {}, + "umf": {}, + "vflx": {}, + } + + # Float/Int Inputs + self.in_vars["parameters"] = [ + "dotransport", + "ncnst", + "k0", + "tr0", + "windsrcavg", + "qtsrchgt", + "qtsrc_fac", + "thlsrc_fac", + "frc_rasn", + "rbuoy", + "epsvarw", + "use_CINcin", + "mumin1", + "rmaxfrac", + "PGFc", + "niter_xc", + "criqc", + "rle", + "cridist_opt", + "mixscale", + "rkm", + "dt", + "detrhgt", + "rdrag", + "use_self_detrain", + "detrhgt", + "use_cumpenent", + "rpen", + "use_momenflx", + "rdrop", + "iter_cin", + ] + + # FloatField Outputs + self.out_vars = { + "qtflx_s": self.grid.compute_dict(), + "slflx_s": self.grid.compute_dict(), + "uflx_s": self.grid.compute_dict(), + "ufrc_s": self.grid.compute_dict(), + "umf_s": self.grid.compute_dict(), + "vflx_s": self.grid.compute_dict(), + } + + def compute(self, inputs): + self.UW_config = UWConfiguration(Int(inputs["ncnst"]), Int(inputs["k0"]), Int(inputs["windsrcavg"])) + + self.quantity_factory.add_data_dimensions( + { + "ntracers": constants.NCNST, + } + ) + + # Float/Int Inputs + dotransport = Int(inputs["dotransport"]) + k0 = Int(inputs["k0"]) + windsrcavg = Int(inputs["windsrcavg"]) + qtsrchgt = Float(inputs["qtsrchgt"]) + qtsrc_fac = Float(inputs["qtsrc_fac"]) + thlsrc_fac = Float(inputs["thlsrc_fac"]) + frc_rasn = Float(inputs["frc_rasn"]) + rbuoy = Float(inputs["rbuoy"]) + epsvarw = Float(inputs["epsvarw"]) + use_CINcin = Int(inputs["use_CINcin"]) + mumin1 = Float(inputs["mumin1"]) + rmaxfrac = Float(inputs["rmaxfrac"]) + PGFc = Float(inputs["PGFc"]) + dt = Float(inputs["dt"]) + niter_xc = Int(inputs["niter_xc"]) + criqc = Float(inputs["criqc"]) + rle = Float(inputs["rle"]) + cridist_opt = Int(inputs["cridist_opt"]) + mixscale = Float(inputs["mixscale"]) + rdrag = Float(inputs["rdrag"]) + rkm = Float(inputs["rkm"]) + use_self_detrain = Int(inputs["use_self_detrain"]) + detrhgt = Float(inputs["detrhgt"]) + use_cumpenent = Int(inputs["use_cumpenent"]) + rpen = Float(inputs["rpen"]) + use_momenflx = Int(inputs["use_momenflx"]) + rdrop = Float(inputs["rdrop"]) + iter_cin = Int(inputs["iter_cin"]) + + # Inputs + condensation = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM], units="n/a", dtype=bool) + + for i in range(0, 24): + for j in range(0, 24): + if inputs["condensation"][i, j] == 1: + condensation.view[i, j] = False + else: + condensation.view[i, j] = True + + qtflx = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_INTERFACE_DIM], units="n/a") + safe_assign_array(qtflx.view[:], inputs["qtflx"]) + slflx = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_INTERFACE_DIM], units="n/a") + safe_assign_array(slflx.view[:], inputs["slflx"]) + uflx = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_INTERFACE_DIM], units="n/a") + safe_assign_array(uflx.view[:], inputs["uflx"]) + ufrc = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_INTERFACE_DIM], units="n/a") + safe_assign_array(ufrc.view[:], inputs["ufrc"]) + umf = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_INTERFACE_DIM], units="n/a") + safe_assign_array(umf.view[:], inputs["umf"]) + vflx = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_INTERFACE_DIM], units="n/a") + safe_assign_array(vflx.view[:], inputs["vflx"]) + + dcm = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + qrten = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + qsten = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + cush = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM], units="n/a") + cufrc = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + qcu = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + qlu = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + qiu = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + fer = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + fdr = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + xco = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + cin = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM], units="n/a") + cinlcl = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM], units="n/a") + cbmf = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + qc = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + qlten_det = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + qiten_det = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + qlten_sink = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + qiten_sink = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + + # Outputs + qtflx_s = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_INTERFACE_DIM], units="n/a") + slflx_s = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_INTERFACE_DIM], units="n/a") + uflx_s = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_INTERFACE_DIM], units="n/a") + ufrc_s = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_INTERFACE_DIM], units="n/a") + umf_s = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_INTERFACE_DIM], units="n/a") + vflx_s = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_INTERFACE_DIM], units="n/a") + + dcm_s = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + qrten_s = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + qsten_s = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + qldet_s = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + qidet_s = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + qlsub_s = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + qisub_s = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + cush_s = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + cufrc_s = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + fer_s = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + fdr_s = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + + # The iteration you want to test + iter_test = int32(0) + + # # Call stencils + self._adjust_implicit_CIN_inputs2( + condensation=condensation, + umf_s=umf_s, + umf_zint=umf, + dcm=dcm, + qrten=qrten, + qsten=qsten, + cush=cush, + cufrc=cufrc, + slflx_s=slflx_s, + slflx=slflx, + qtflx_s=qtflx_s, + qtflx=qtflx, + uflx_s=uflx_s, + uflx=uflx, + vflx_s=vflx_s, + vflx=vflx, + qcu=qcu, + qlu=qlu, + qiu=qiu, + fer=fer, + fdr=fdr, + xco=xco, + cin_IJ=cin, + cinlcl_IJ=cinlcl, + cbmf=cbmf, + qc=qc, + qlten_det=qlten_det, + qiten_det=qiten_det, + qlten_sink=qlten_sink, + qiten_sink=qiten_sink, + ufrc_s=ufrc_s, + ufrc=ufrc, + dcm_s=dcm_s, + qrten_s=qrten_s, + qsten_s=qsten_s, + qldet_s=qldet_s, + qidet_s=qidet_s, + qlsub_s=qlsub_s, + qisub_s=qisub_s, + cush_s=cush_s, + cufrc_s=cufrc_s, + fer_s=fer_s, + fdr_s=fdr_s, + iteration=iter_test, + ) + + return { + "qtflx_s": qtflx_s.view[:], + "slflx_s": slflx_s.view[:], + "uflx_s": uflx_s.view[:], + "ufrc_s": ufrc_s.view[:], + "umf_s": umf_s.view[:], + "vflx_s": vflx_s.view[:], + } diff --git a/GEOSagcm_GridComp/GEOSphysics_GridComp/GEOSmoist_GridComp/pyMoist/tests/savepoint/UW_translate_tests/translate_average_initial_and_final_CIN1.py b/GEOSagcm_GridComp/GEOSphysics_GridComp/GEOSmoist_GridComp/pyMoist/tests/savepoint/UW_translate_tests/translate_average_initial_and_final_CIN1.py new file mode 100644 index 000000000..eba1edff9 --- /dev/null +++ b/GEOSagcm_GridComp/GEOSphysics_GridComp/GEOSmoist_GridComp/pyMoist/tests/savepoint/UW_translate_tests/translate_average_initial_and_final_CIN1.py @@ -0,0 +1,303 @@ +from f90nml import Namelist +from gt4py.cartesian.gtscript import int32 + +import pyMoist.constants as constants +from ndsl import StencilFactory +from ndsl.constants import X_DIM, Y_DIM, Z_DIM +from ndsl.dsl.typing import Float, Int +from ndsl.stencils.testing.grid import Grid +from ndsl.stencils.testing.translate import TranslateFortranData2Py +from ndsl.utils import safe_assign_array +from pyMoist.UW.compute_uwshcu import avg_initial_and_final_cin1 +from pyMoist.UW.config import UWConfiguration + + +class TranslateAverageInitialFinalCIN1(TranslateFortranData2Py): + def __init__( + self, + grid: Grid, + namelist: Namelist, + stencil_factory: StencilFactory, + # UW_config: UWConfiguration, + ): + super().__init__(grid, stencil_factory) + self.stencil_factory = stencil_factory + self.quantity_factory = grid.quantity_factory + # self.UW_config = UW_config + + self._avg_cin1 = self.stencil_factory.from_dims_halo( + func=avg_initial_and_final_cin1, + compute_dims=[X_DIM, Y_DIM, Z_DIM], + externals={"ncnst": 23}, + ) + + # FloatField Inputs + self.in_vars["data_vars"] = { + "condensation": {}, + "cin_i": {}, + "cinlcl_i": {}, + "cin": {}, + "cinlcl": {}, + "del_CIN": {}, + "ke": {}, + } + + # Float/Int Inputs + self.in_vars["parameters"] = [ + "dotransport", + "ncnst", + "k0", + "tr0", + "windsrcavg", + "qtsrchgt", + "qtsrc_fac", + "thlsrc_fac", + "frc_rasn", + "rbuoy", + "epsvarw", + "use_CINcin", + "mumin1", + "rmaxfrac", + "PGFc", + "niter_xc", + "criqc", + "rle", + "cridist_opt", + "mixscale", + "rkm", + "dt", + "detrhgt", + "rdrag", + "use_self_detrain", + "detrhgt", + "use_cumpenent", + "rpen", + "use_momenflx", + "rdrop", + "iter_cin", + ] + + # FloatField Outputs + self.out_vars = { + "cin": self.grid.compute_dict(), + "cinlcl": self.grid.compute_dict(), + } + + def compute(self, inputs): + self.UW_config = UWConfiguration(Int(inputs["ncnst"]), Int(inputs["k0"]), Int(inputs["windsrcavg"])) + + self.quantity_factory.add_data_dimensions( + { + "ntracers": constants.NCNST, + } + ) + + # Float/Int Inputs + dotransport = Int(inputs["dotransport"]) + k0 = Int(inputs["k0"]) + windsrcavg = Int(inputs["windsrcavg"]) + qtsrchgt = Float(inputs["qtsrchgt"]) + qtsrc_fac = Float(inputs["qtsrc_fac"]) + thlsrc_fac = Float(inputs["thlsrc_fac"]) + frc_rasn = Float(inputs["frc_rasn"]) + rbuoy = Float(inputs["rbuoy"]) + epsvarw = Float(inputs["epsvarw"]) + use_CINcin = Int(inputs["use_CINcin"]) + mumin1 = Float(inputs["mumin1"]) + rmaxfrac = Float(inputs["rmaxfrac"]) + PGFc = Float(inputs["PGFc"]) + dt = Float(inputs["dt"]) + niter_xc = Int(inputs["niter_xc"]) + criqc = Float(inputs["criqc"]) + rle = Float(inputs["rle"]) + cridist_opt = Int(inputs["cridist_opt"]) + mixscale = Float(inputs["mixscale"]) + rdrag = Float(inputs["rdrag"]) + rkm = Float(inputs["rkm"]) + use_self_detrain = Int(inputs["use_self_detrain"]) + detrhgt = Float(inputs["detrhgt"]) + use_cumpenent = Int(inputs["use_cumpenent"]) + rpen = Float(inputs["rpen"]) + use_momenflx = Int(inputs["use_momenflx"]) + rdrop = Float(inputs["rdrop"]) + iter_cin = Int(inputs["iter_cin"]) + + # Inputs + condensation = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM], units="n/a", dtype=bool) + + for i in range(0, 24): + for j in range(0, 24): + if inputs["condensation"][i, j] == 1: + condensation.view[i, j] = False + else: + condensation.view[i, j] = True + + cin = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM], units="n/a") + cinlcl = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM], units="n/a") + cin_i = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM], units="n/a") + safe_assign_array(cin_i.view[:], inputs["cin_i"]) + cinlcl_i = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM], units="n/a") + safe_assign_array(cinlcl_i.view[:], inputs["cinlcl_i"]) + del_CIN = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM], units="n/a") + safe_assign_array(del_CIN.view[:], inputs["del_CIN"]) + ke = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM], units="n/a") + safe_assign_array(ke.view[:], inputs["ke"]) + + # Outputs + kinv = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a", dtype=Int) + kinv_o = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a", dtype=Int) + klcl = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a", dtype=Int) + klcl_o = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a", dtype=Int) + klfc = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a", dtype=Int) + klfc_o = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a", dtype=Int) + plcl = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + plcl_o = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + plfc = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + plfc_o = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + tkeavg = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + tkeavg_o = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + thvlmin = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + thvlmin_o = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + qtsrc = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + qtsrc_o = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + thvlsrc = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + thvlsrc_o = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + thlsrc = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + thlsrc_o = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + usrc = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + usrc_o = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + vsrc = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + vsrc_o = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + thv0lcl = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + thv0lcl_o = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + trsrc = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, "ntracers"], units="n/a") + trsrc_o = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, "ntracers"], units="n/a") + tr0 = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM, "ntracers"], units="n/a") + tr0_o = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM, "ntracers"], units="n/a") + sstr0 = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM, "ntracers"], units="n/a") + sstr0_o = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM, "ntracers"], units="n/a") + qv0 = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + qv0_o = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + ql0 = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + ql0_o = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + qi0 = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + qi0_o = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + t0 = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + t0_o = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + s0 = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + s0_o = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + u0 = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + u0_o = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + v0 = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + v0_o = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + qt0 = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + qt0_o = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + thl0 = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + thl0_o = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + thvl0 = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + thvl0_o = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + ssthl0 = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + ssthl0_o = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + ssqt0 = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + ssqt0_o = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + thv0bot = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + thv0bot_o = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + thv0top = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + thv0top_o = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + thvl0bot = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + thvl0bot_o = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + thvl0top = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + thvl0top_o = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + ssu0 = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + ssu0_o = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + ssv0 = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + ssv0_o = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + + # The iteration you want to test + iter_test = int32(1) + + # # Call stencils + self._avg_cin1( + condensation=condensation, + del_CIN=del_CIN, + ke=ke, + cin_i=cin_i, + use_CINcin=use_CINcin, + cin_IJ=cin, + cinlcl_IJ=cinlcl, + cinlcl_i=cinlcl_i, + kinv=kinv, + kinv_o=kinv_o, + klcl=klcl, + klcl_o=klcl_o, + klfc=klfc, + klfc_o=klfc_o, + plcl=plcl, + plcl_o=plcl_o, + plfc=plfc, + plfc_o=plfc_o, + tkeavg=tkeavg, + tkeavg_o=tkeavg_o, + thvlmin=thvlmin, + thvlmin_o=thvlmin_o, + qtsrc=qtsrc, + qtsrc_o=qtsrc_o, + thvlsrc=thvlsrc, + thvlsrc_o=thvlsrc_o, + thlsrc=thlsrc, + thlsrc_o=thlsrc_o, + usrc=usrc, + usrc_o=usrc_o, + vsrc=vsrc, + vsrc_o=vsrc_o, + thv0lcl=thv0lcl, + thv0lcl_o=thv0lcl_o, + dotransport=dotransport, + trsrc=trsrc, + trsrc_o=trsrc_o, + tr0=tr0, + tr0_o=tr0_o, + sstr0=sstr0, + sstr0_o=sstr0_o, + qv0=qv0, + qv0_o=qv0_o, + ql0=ql0, + ql0_o=ql0_o, + qi0=qi0, + qi0_o=qi0_o, + t0=t0, + t0_o=t0_o, + s0=s0, + s0_o=s0_o, + u0=u0, + u0_o=u0_o, + v0=v0, + v0_o=v0_o, + qt0=qt0, + qt0_o=qt0_o, + thl0=thl0, + thl0_o=thl0_o, + thvl0=thvl0, + thvl0_o=thvl0_o, + ssthl0=ssthl0, + ssthl0_o=ssthl0, + ssqt0=ssqt0, + ssqt0_o=ssqt0_o, + thv0bot=thv0bot, + thv0bot_o=thv0bot, + thv0top=thv0bot, + thv0top_o=thv0top_o, + thvl0bot=thvl0bot, + thvl0bot_o=thvl0bot_o, + thvl0top=thvl0top, + thvl0top_o=thvl0top_o, + ssu0=ssu0, + ssu0_o=ssu0_o, + ssv0=ssv0, + ssv0_o=ssv0_o, + ) + + return { + "cin": cin.view[:], + "cinlcl": cinlcl.view[:], + } diff --git a/GEOSagcm_GridComp/GEOSphysics_GridComp/GEOSmoist_GridComp/pyMoist/tests/savepoint/UW_translate_tests/translate_average_initial_and_final_CIN3.py b/GEOSagcm_GridComp/GEOSphysics_GridComp/GEOSmoist_GridComp/pyMoist/tests/savepoint/UW_translate_tests/translate_average_initial_and_final_CIN3.py new file mode 100644 index 000000000..4d1d6438a --- /dev/null +++ b/GEOSagcm_GridComp/GEOSphysics_GridComp/GEOSmoist_GridComp/pyMoist/tests/savepoint/UW_translate_tests/translate_average_initial_and_final_CIN3.py @@ -0,0 +1,259 @@ +from f90nml import Namelist +from gt4py.cartesian.gtscript import int32 + +import pyMoist.constants as constants +from ndsl import StencilFactory +from ndsl.constants import X_DIM, Y_DIM, Z_DIM, Z_INTERFACE_DIM +from ndsl.dsl.typing import Float, Int +from ndsl.stencils.testing.grid import Grid +from ndsl.stencils.testing.translate import TranslateFortranData2Py +from ndsl.utils import safe_assign_array +from pyMoist.UW.compute_uwshcu import avg_initial_and_final_cin3 +from pyMoist.UW.config import UWConfiguration + + +class TranslateAverageInitialFinalCIN3(TranslateFortranData2Py): + def __init__( + self, + grid: Grid, + namelist: Namelist, + stencil_factory: StencilFactory, + # UW_config: UWConfiguration, + ): + super().__init__(grid, stencil_factory) + self.stencil_factory = stencil_factory + self.quantity_factory = grid.quantity_factory + # self.UW_config = UW_config + + self._avg_cin3 = self.stencil_factory.from_dims_halo( + func=avg_initial_and_final_cin3, + compute_dims=[X_DIM, Y_DIM, Z_DIM], + externals={"ncnst": 23}, + ) + + # FloatField Inputs + self.in_vars["data_vars"] = { + "condensation": {}, + "qtflx_s": {}, + "slflx_s": {}, + "uflx_s": {}, + "vflx_s": {}, + "umf_s": {}, + "zifc0": {}, + "del_CIN": {}, + "kinv": {}, + } + + # Float/Int Inputs + self.in_vars["parameters"] = [ + "dotransport", + "ncnst", + "k0", + "tr0", + "windsrcavg", + "qtsrchgt", + "qtsrc_fac", + "thlsrc_fac", + "frc_rasn", + "rbuoy", + "epsvarw", + "use_CINcin", + "mumin1", + "rmaxfrac", + "PGFc", + "niter_xc", + "criqc", + "rle", + "cridist_opt", + "mixscale", + "rkm", + "dt", + "detrhgt", + "rdrag", + "use_self_detrain", + "detrhgt", + "use_cumpenent", + "rpen", + "use_momenflx", + "rdrop", + "iter_cin", + ] + + # FloatField Outputs + self.out_vars = { + "qtflx_out": self.grid.compute_dict(), + "slflx_out": self.grid.compute_dict(), + "uflx_out": self.grid.compute_dict(), + "vflx_out": self.grid.compute_dict(), + "umf_out": self.grid.compute_dict(), + } + + def compute(self, inputs): + self.UW_config = UWConfiguration(Int(inputs["ncnst"]), Int(inputs["k0"]), Int(inputs["windsrcavg"])) + + self.quantity_factory.add_data_dimensions( + { + "ntracers": constants.NCNST, + } + ) + + # Float/Int Inputs + dotransport = Int(inputs["dotransport"]) + k0 = Int(inputs["k0"]) + windsrcavg = Int(inputs["windsrcavg"]) + qtsrchgt = Float(inputs["qtsrchgt"]) + qtsrc_fac = Float(inputs["qtsrc_fac"]) + thlsrc_fac = Float(inputs["thlsrc_fac"]) + frc_rasn = Float(inputs["frc_rasn"]) + rbuoy = Float(inputs["rbuoy"]) + epsvarw = Float(inputs["epsvarw"]) + use_CINcin = Int(inputs["use_CINcin"]) + mumin1 = Float(inputs["mumin1"]) + rmaxfrac = Float(inputs["rmaxfrac"]) + PGFc = Float(inputs["PGFc"]) + dt = Float(inputs["dt"]) + niter_xc = Int(inputs["niter_xc"]) + criqc = Float(inputs["criqc"]) + rle = Float(inputs["rle"]) + cridist_opt = Int(inputs["cridist_opt"]) + mixscale = Float(inputs["mixscale"]) + rdrag = Float(inputs["rdrag"]) + rkm = Float(inputs["rkm"]) + use_self_detrain = Int(inputs["use_self_detrain"]) + detrhgt = Float(inputs["detrhgt"]) + use_cumpenent = Int(inputs["use_cumpenent"]) + rpen = Float(inputs["rpen"]) + use_momenflx = Int(inputs["use_momenflx"]) + rdrop = Float(inputs["rdrop"]) + iter_cin = Int(inputs["iter_cin"]) + + # Inputs + condensation = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM], units="n/a", dtype=bool) + + for i in range(0, 24): + for j in range(0, 24): + if inputs["condensation"][i, j] == 1: + condensation.view[i, j] = False + else: + condensation.view[i, j] = True + + qtflx_s = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_INTERFACE_DIM], units="n/a") + safe_assign_array(qtflx_s.view[:], inputs["qtflx_s"]) + slflx_s = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_INTERFACE_DIM], units="n/a") + safe_assign_array(slflx_s.view[:], inputs["slflx_s"]) + uflx_s = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_INTERFACE_DIM], units="n/a") + safe_assign_array(uflx_s.view[:], inputs["uflx_s"]) + vflx_s = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_INTERFACE_DIM], units="n/a") + safe_assign_array(vflx_s.view[:], inputs["vflx_s"]) + umf_s = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_INTERFACE_DIM], units="n/a") + safe_assign_array(umf_s.view[:], inputs["umf_s"]) + zifc0 = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_INTERFACE_DIM], units="n/a") + safe_assign_array(zifc0.view[:], inputs["zifc0"]) + del_CIN = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM], units="n/a") + safe_assign_array(del_CIN.view[:], inputs["del_CIN"]) + + # Outputs + kinv = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a", dtype=Int) + safe_assign_array(kinv.view[:], inputs["kinv"] - 1) + umf_out = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_INTERFACE_DIM], units="n/a") + dcm_out = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + dcm_s = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + qvten_out = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + qvten_s = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + qlten_out = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + qlten_s = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + sten_out = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + sten_s = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + uten_out = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + uten_s = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + vten_out = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + vten_s = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + qiten_out = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + qiten_s = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + qrten_out = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + qrten_s = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + qsten_out = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + qsten_s = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + qldet_out = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + qldet_s = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + qidet_out = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + qidet_s = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + qlsub_out = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + qlsub_s = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + qisub_out = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + qisub_s = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + cush_inout = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM], units="n/a") + cush_s = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + cufrc_out = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + cufrc_s = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + qtflx_out = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_INTERFACE_DIM], units="n/a") + slflx_out = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_INTERFACE_DIM], units="n/a") + uflx_out = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_INTERFACE_DIM], units="n/a") + vflx_out = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_INTERFACE_DIM], units="n/a") + fer_out = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + fdr_out = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + fer_s = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + fdr_s = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + + # The iteration you want to test + iter_test = int32(1) + + # # Call stencils + self._avg_cin3( + condensation=condensation, + del_CIN=del_CIN, + umf_out=umf_out, + umf_s=umf_s, + kinv=kinv, + zifc0=zifc0, + dcm_out=dcm_out, + dcm_s=dcm_s, + qvten_out=qvten_out, + qvten_s=qvten_s, + qlten_out=qlten_out, + qlten_s=qlten_s, + sten_out=sten_out, + sten_s=sten_s, + uten_out=uten_out, + uten_s=uten_s, + vten_out=vten_out, + vten_s=vten_s, + qiten_out=qiten_out, + qiten_s=qiten_s, + qrten_out=qrten_out, + qrten_s=qrten_s, + qsten_out=qsten_out, + qsten_s=qsten_s, + qldet_out=qldet_out, + qldet_s=qldet_s, + qidet_out=qidet_out, + qidet_s=qidet_s, + qlsub_out=qlsub_out, + qlsub_s=qlsub_s, + qisub_out=qisub_out, + qisub_s=qisub_s, + cush_inout=cush_inout, + cush_s=cush_s, + cufrc_out=cufrc_out, + cufrc_s=cufrc_s, + qtflx_out=qtflx_out, + qtflx_s=qtflx_s, + slflx_out=slflx_out, + slflx_s=slflx_s, + uflx_out=uflx_out, + uflx_s=uflx_s, + vflx_out=vflx_out, + vflx_s=vflx_s, + fer_out=fer_out, + fer_s=fer_s, + fdr_out=fdr_out, + fdr_s=fdr_s, + ) + + return { + "qtflx_out": qtflx_out.view[:], + "slflx_out": slflx_out.view[:], + "uflx_out": uflx_out.view[:], + "vflx_out": vflx_out.view[:], + "umf_out": umf_out.view[:], + } diff --git a/GEOSagcm_GridComp/GEOSphysics_GridComp/GEOSmoist_GridComp/pyMoist/tests/savepoint/UW_translate_tests/translate_buoyancy_sorting.py b/GEOSagcm_GridComp/GEOSphysics_GridComp/GEOSmoist_GridComp/pyMoist/tests/savepoint/UW_translate_tests/translate_buoyancy_sorting.py new file mode 100644 index 000000000..989d21f51 --- /dev/null +++ b/GEOSagcm_GridComp/GEOSphysics_GridComp/GEOSmoist_GridComp/pyMoist/tests/savepoint/UW_translate_tests/translate_buoyancy_sorting.py @@ -0,0 +1,394 @@ +from f90nml import Namelist +from gt4py.cartesian.gtscript import int32 + +import pyMoist.constants as constants +from ndsl import StencilFactory +from ndsl.constants import X_DIM, Y_DIM, Z_DIM, Z_INTERFACE_DIM +from ndsl.dsl.typing import Float, Int +from ndsl.stencils.testing.grid import Grid +from ndsl.stencils.testing.translate import TranslateFortranData2Py +from ndsl.utils import safe_assign_array +from pyMoist.saturation_tables import get_saturation_vapor_pressure_table +from pyMoist.UW.compute_uwshcu import buoyancy_sorting +from pyMoist.UW.config import UWConfiguration + + +# Dev NOTE: The data for this translate test comes from combining two files in +# a single nc file using the following NCO tool: +# `ncks -A ComputeUwshcu-In.nc DefineEnvProperties-In.nc` + + +class TranslateBuoyancySorting(TranslateFortranData2Py): + def __init__( + self, + grid: Grid, + namelist: Namelist, + stencil_factory: StencilFactory, + # UW_config: UWConfiguration, + ): + super().__init__(grid, stencil_factory) + self.stencil_factory = stencil_factory + self.quantity_factory = grid.quantity_factory + # self.UW_config = UW_config + + self._buoyancy_sorting = self.stencil_factory.from_dims_halo( + func=buoyancy_sorting, + compute_dims=[X_DIM, Y_DIM, Z_DIM], + externals={"ncnst": 23}, + ) + + # FloatField Inputs + self.in_vars["data_vars"] = { + "condensation": {}, + "dp0": {}, + "exnifc0": {}, + "exnmid0": {}, + "krel": {}, + "pifc0": {}, + "pmid0": {}, + "qt0": {}, + "qtu": {}, + "ssqt0": {}, + "ssthl0": {}, + "sstr0": {}, + "ssu0": {}, + "ssv0": {}, + "thl0": {}, + "thlu": {}, + "thv0bot": {}, + "thv0rel": {}, + "thv0top": {}, + "tscaleh": {}, + "u0": {}, + "v0": {}, + "umf": {}, + "uu": {}, + "vu": {}, + "wlcl": {}, + "wu": {}, + "zifc0": {}, + "tr0_BuoySort": {}, + "prel": {}, + "zmid0": {}, + "qsat_pe": {}, + "thvu": {}, + } + + # Float/Int Inputs + self.in_vars["parameters"] = [ + "dotransport", + "ncnst", + "k0", + "tr0", + "windsrcavg", + "qtsrchgt", + "qtsrc_fac", + "thlsrc_fac", + "frc_rasn", + "rbuoy", + "epsvarw", + "use_CINcin", + "mumin1", + "rmaxfrac", + "PGFc", + "niter_xc", + "criqc", + "rle", + "cridist_opt", + "mixscale", + "rkm", + "dt", + "detrhgt", + "rdrag", + "use_self_detrain", + "detrhgt", + "use_cumpenent", + "rpen", + "use_momenflx", + "rdrop", + "iter_cin", + ] + + # FloatField Outputs + self.out_vars = { + "testvar3D_1": self.grid.compute_dict(), + "testvar3D_2": self.grid.compute_dict(), + "testvar3D_3": self.grid.compute_dict(), + "testvar3D_4": self.grid.compute_dict(), + "testvar3D_5": self.grid.compute_dict(), + } + + def compute(self, inputs): + self.UW_config = UWConfiguration(Int(inputs["ncnst"]), Int(inputs["k0"]), Int(inputs["windsrcavg"])) + + self.quantity_factory.add_data_dimensions( + { + "ntracers": constants.NCNST, + } + ) + + # Float/Int Inputs + dotransport = Int(inputs["dotransport"]) + k0 = Int(inputs["k0"]) + windsrcavg = Int(inputs["windsrcavg"]) + qtsrchgt = Float(inputs["qtsrchgt"]) + qtsrc_fac = Float(inputs["qtsrc_fac"]) + thlsrc_fac = Float(inputs["thlsrc_fac"]) + frc_rasn = Float(inputs["frc_rasn"]) + rbuoy = Float(inputs["rbuoy"]) + epsvarw = Float(inputs["epsvarw"]) + use_CINcin = Int(inputs["use_CINcin"]) + mumin1 = Float(inputs["mumin1"]) + rmaxfrac = Float(inputs["rmaxfrac"]) + PGFc = Float(inputs["PGFc"]) + dt = Float(inputs["dt"]) + niter_xc = Int(inputs["niter_xc"]) + criqc = Float(inputs["criqc"]) + rle = Float(inputs["rle"]) + cridist_opt = Int(inputs["cridist_opt"]) + mixscale = Float(inputs["mixscale"]) + rdrag = Float(inputs["rdrag"]) + rkm = Float(inputs["rkm"]) + use_self_detrain = Int(inputs["use_self_detrain"]) + detrhgt = Float(inputs["detrhgt"]) + use_cumpenent = Int(inputs["use_cumpenent"]) + rpen = Float(inputs["rpen"]) + use_momenflx = Int(inputs["use_momenflx"]) + rdrop = Float(inputs["rdrop"]) + iter_cin = Int(inputs["iter_cin"]) + + # Field inputs + condensation = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM], units="n/a", dtype=bool) + + for i in range(0, 24): + for j in range(0, 24): + if inputs["condensation"][i, j] == 1: + condensation.view[i, j] = False + else: + condensation.view[i, j] = True + + # Outputs + dp0 = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + safe_assign_array(dp0.view[:], inputs["dp0"]) + exnifc0 = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_INTERFACE_DIM], units="n/a") + safe_assign_array(exnifc0.view[:], inputs["exnifc0"]) + exnmid0 = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + safe_assign_array(exnmid0.view[:], inputs["exnmid0"]) + krel = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a", dtype=Int) + safe_assign_array(krel.view[:], inputs["krel"] - 1) + pifc0 = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_INTERFACE_DIM], units="n/a") + safe_assign_array(pifc0.view[:], inputs["pifc0"]) + pmid0 = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + safe_assign_array(pmid0.view[:], inputs["pmid0"]) + qt0 = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + safe_assign_array(qt0.view[:], inputs["qt0"]) + qtu = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_INTERFACE_DIM], units="n/a") + safe_assign_array(qtu.view[:], inputs["qtu"]) + ssqt0 = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + safe_assign_array(ssqt0.view[:], inputs["ssqt0"]) + ssthl0 = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + safe_assign_array(ssthl0.view[:], inputs["ssthl0"]) + sstr0 = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM, "ntracers"], units="n/a") + safe_assign_array(sstr0.view[:], inputs["sstr0"]) + ssu0 = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + safe_assign_array(ssu0.view[:], inputs["ssu0"]) + ssv0 = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + safe_assign_array(ssv0.view[:], inputs["ssv0"]) + thl0 = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + safe_assign_array(thl0.view[:], inputs["thl0"]) + thlu = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_INTERFACE_DIM], units="n/a") + safe_assign_array(thlu.view[:], inputs["thlu"]) + thv0bot = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + safe_assign_array(thv0bot.view[:], inputs["thv0bot"]) + thv0rel = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + safe_assign_array(thv0rel.view[:], inputs["thv0rel"]) + thv0top = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + safe_assign_array(thv0top.view[:], inputs["thv0top"]) + tscaleh = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM], units="n/a") + safe_assign_array(tscaleh.view[:], inputs["tscaleh"]) + u0 = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + safe_assign_array(u0.view[:], inputs["u0"]) + v0 = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + safe_assign_array(v0.view[:], inputs["v0"]) + umf = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_INTERFACE_DIM], units="n/a") + safe_assign_array(umf.view[:], inputs["umf"]) + uu = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_INTERFACE_DIM], units="n/a") + safe_assign_array(uu.view[:], inputs["uu"]) + vu = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_INTERFACE_DIM], units="n/a") + safe_assign_array(vu.view[:], inputs["vu"]) + wlcl = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + safe_assign_array(wlcl.view[:], inputs["wlcl"]) + wu = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_INTERFACE_DIM], units="n/a") + safe_assign_array(wu.view[:], inputs["wu"]) + zifc0 = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_INTERFACE_DIM], units="n/a") + safe_assign_array(zifc0.view[:], inputs["zifc0"]) + tr0 = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM, "ntracers"], units="n/a") + safe_assign_array(tr0.view[:], inputs["tr0_BuoySort"]) + prel = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + safe_assign_array(prel.view[:], inputs["prel"]) + qsat_pe = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + safe_assign_array(qsat_pe.view[:], inputs["qsat_pe"]) + zmid0 = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + safe_assign_array(zmid0.view[:], inputs["zmid0"]) + thvu = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_INTERFACE_DIM], units="n/a") + safe_assign_array(thvu.view[:], inputs["thvu"]) + + dpe = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM], units="n/a") + exne = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM], units="n/a") + pe = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM], units="n/a") + qte = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM], units="n/a") + thle = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM], units="n/a") + thvebot = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM], units="n/a") + tre = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, "ntracers"], units="n/a") + ue = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM], units="n/a") + ve = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM], units="n/a") + + tru = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM, "ntracers"], units="n/a") + emf = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + thlue = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + qtue = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + wue = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + wtwb = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM], units="n/a") + rei = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + ufrc = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_INTERFACE_DIM], units="n/a") + drage = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM], units="n/a") + bogbot = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM], units="n/a") + bogtop = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM], units="n/a") + kpen_IJ = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM], units="n/a", dtype=Int) + kbup_IJ = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM], units="n/a", dtype=Int) + rhomid0j = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM], units="n/a") + fer = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + dwten = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + diten = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + fdr = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + dcm = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + xco = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + stop_buoyancy_sort = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM], units="n/a", dtype=bool) + + saturation_vapor_pressure_table = get_saturation_vapor_pressure_table(self.stencil_factory.backend) + self.ese = saturation_vapor_pressure_table.ese + self.esx = saturation_vapor_pressure_table.esx + + umf_out = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_INTERFACE_DIM], units="n/a") + qtflx_out = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_INTERFACE_DIM], units="n/a") + slflx_out = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_INTERFACE_DIM], units="n/a") + uflx_out = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_INTERFACE_DIM], units="n/a") + vflx_out = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_INTERFACE_DIM], units="n/a") + cush_inout = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM], units="n/a") + + testvar3D_1 = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + testvar3D_2 = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + testvar3D_3 = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + testvar3D_4 = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + testvar3D_5 = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + testvar_zinterface1 = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_INTERFACE_DIM], units="n/a") + testvar2D_1 = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM], units="n/a") + testvar2D_2 = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM], units="n/a") + + # The iteration you want to test + iter_test = int32(0) + + # # Call stencils + self._buoyancy_sorting( + condensation=condensation, + tscaleh=tscaleh, + krel=krel, + wlcl=wlcl, + prel=prel, + pifc0=pifc0, + thv0rel=thv0rel, + thl0=thl0, + ssthl0=ssthl0, + pmid0=pmid0, + qt0=qt0, + ssqt0=ssqt0, + u0=u0, + v0=v0, + ssu0=ssu0, + ssv0=ssv0, + dotransport=dotransport, + tre=tre, + tr0=tr0, + sstr0=sstr0, + k0=k0, + thlu=thlu, + qtu=qtu, + wu=wu, + niter_xc=niter_xc, + ese=self.ese, + esx=self.esx, + umf_out=umf_out, + qtflx_out=qtflx_out, + slflx_out=slflx_out, + uflx_out=uflx_out, + vflx_out=vflx_out, + qsat_pe=qsat_pe, + criqc=criqc, + cridist_opt=cridist_opt, + rle=rle, + zifc0=zifc0, + rbuoy=rbuoy, + mixscale=mixscale, + rkm=rkm, + zmid0=zmid0, + detrhgt=detrhgt, + thlue=thlue, + qtue=qtue, + wue=wue, + wtwb=wtwb, + dp0=dp0, + dt=dt, + thv0bot=thv0bot, + exnmid0=exnmid0, + rmaxfrac=rmaxfrac, + thv0top=thv0top, + exnifc0=exnifc0, + use_self_detrain=use_self_detrain, + rdrag=rdrag, + PGFc=PGFc, + tru=tru, + emf=emf, + thvu=thvu, + umf_zint=umf, + rei=rei, + uu=uu, + vu=vu, + ufrc=ufrc, + pe=pe, + thle=thle, + qte=qte, + dpe=dpe, + exne=exne, + thvebot=thvebot, + ue=ue, + ve=ve, + drage=drage, + bogbot=bogbot, + bogtop=bogtop, + kpen_IJ=kpen_IJ, + kbup_IJ=kbup_IJ, + rhomid0j=rhomid0j, + fer=fer, + dwten=dwten, + diten=diten, + fdr=fdr, + dcm=dcm, + xco=xco, + stop_buoyancy_sort=stop_buoyancy_sort, + iteration=iter_test, + cush_inout=cush_inout, + testvar_zinterface1=testvar_zinterface1, + testvar3D_1=testvar3D_1, + testvar3D_2=testvar3D_2, + testvar3D_3=testvar3D_3, + testvar3D_4=testvar3D_4, + testvar3D_5=testvar3D_5, + ) + + return { + "testvar3D_1": testvar3D_1.view[:], + "testvar3D_2": testvar3D_2.view[:], + "testvar3D_3": testvar3D_3.view[:], + "testvar3D_4": testvar3D_4.view[:], + "testvar3D_5": testvar3D_5.view[:], + } diff --git a/GEOSagcm_GridComp/GEOSphysics_GridComp/GEOSmoist_GridComp/pyMoist/tests/savepoint/UW_translate_tests/translate_buoyancy_sorting_fluxes.py b/GEOSagcm_GridComp/GEOSphysics_GridComp/GEOSmoist_GridComp/pyMoist/tests/savepoint/UW_translate_tests/translate_buoyancy_sorting_fluxes.py new file mode 100644 index 000000000..80572bfc1 --- /dev/null +++ b/GEOSagcm_GridComp/GEOSphysics_GridComp/GEOSmoist_GridComp/pyMoist/tests/savepoint/UW_translate_tests/translate_buoyancy_sorting_fluxes.py @@ -0,0 +1,260 @@ +from f90nml import Namelist +from gt4py.cartesian.gtscript import int32 + +import pyMoist.constants as constants +from ndsl import StencilFactory +from ndsl.constants import X_DIM, Y_DIM, Z_DIM, Z_INTERFACE_DIM +from ndsl.dsl.typing import Float, Int +from ndsl.stencils.testing.grid import Grid +from ndsl.stencils.testing.translate import TranslateFortranData2Py +from ndsl.utils import safe_assign_array +from pyMoist.saturation_tables import get_saturation_vapor_pressure_table +from pyMoist.UW.compute_uwshcu import buoyancy_sorting_fluxes +from pyMoist.UW.config import UWConfiguration + + +class TranslateBuoyancySortingFluxes(TranslateFortranData2Py): + def __init__( + self, + grid: Grid, + namelist: Namelist, + stencil_factory: StencilFactory, + # UW_config: UWConfiguration, + ): + super().__init__(grid, stencil_factory) + self.stencil_factory = stencil_factory + self.quantity_factory = grid.quantity_factory + # self.UW_config = UW_config + + self._buoyancy_sorting_fluxes = self.stencil_factory.from_dims_halo( + func=buoyancy_sorting_fluxes, + compute_dims=[X_DIM, Y_DIM, Z_DIM], + externals={"ncnst": 23}, + ) + + # FloatField Inputs + self.in_vars["data_vars"] = { + "condensation": {}, + "exnifc0": {}, + "kbup": {}, + "krel": {}, + "pifc0": {}, + "pmid0": {}, + "qt0": {}, + "qtflx": {}, + "qtu": {}, + "slflx": {}, + "ssqt0": {}, + "ssthl0": {}, + "sstr0": {}, + "ssu0": {}, + "ssv0": {}, + "thl0": {}, + "thlu": {}, + "tr0_BuoySortFlux": {}, + "trflx": {}, + "tru": {}, + "u0": {}, + "v0": {}, + "vflx": {}, + "vu": {}, + "uflx": {}, + "umf": {}, + "uu": {}, + } + + # Float/Int Inputs + self.in_vars["parameters"] = [ + "dotransport", + "ncnst", + "k0", + "tr0", + "windsrcavg", + "qtsrchgt", + "qtsrc_fac", + "thlsrc_fac", + "frc_rasn", + "rbuoy", + "epsvarw", + "use_CINcin", + "mumin1", + "rmaxfrac", + "PGFc", + "niter_xc", + "criqc", + "rle", + "cridist_opt", + "mixscale", + "rkm", + "dt", + "detrhgt", + "rdrag", + "use_self_detrain", + "detrhgt", + "use_cumpenent", + "rpen", + "use_momenflx", + "rdrop", + "iter_cin", + ] + + # FloatField Outputs + self.out_vars = { + "qtflx": self.grid.compute_dict(), + "slflx": self.grid.compute_dict(), + "trflx": self.grid.compute_dict(), + "uflx": self.grid.compute_dict(), + "vflx": self.grid.compute_dict(), + } + + def compute(self, inputs): + self.UW_config = UWConfiguration(Int(inputs["ncnst"]), Int(inputs["k0"]), Int(inputs["windsrcavg"])) + + self.quantity_factory.add_data_dimensions( + { + "ntracers": constants.NCNST, + } + ) + + # Float/Int Inputs + dotransport = Int(inputs["dotransport"]) + k0 = Int(inputs["k0"]) + windsrcavg = Int(inputs["windsrcavg"]) + qtsrchgt = Float(inputs["qtsrchgt"]) + qtsrc_fac = Float(inputs["qtsrc_fac"]) + thlsrc_fac = Float(inputs["thlsrc_fac"]) + frc_rasn = Float(inputs["frc_rasn"]) + rbuoy = Float(inputs["rbuoy"]) + epsvarw = Float(inputs["epsvarw"]) + use_CINcin = Int(inputs["use_CINcin"]) + mumin1 = Float(inputs["mumin1"]) + rmaxfrac = Float(inputs["rmaxfrac"]) + PGFc = Float(inputs["PGFc"]) + dt = Float(inputs["dt"]) + niter_xc = Int(inputs["niter_xc"]) + criqc = Float(inputs["criqc"]) + rle = Float(inputs["rle"]) + cridist_opt = Int(inputs["cridist_opt"]) + mixscale = Float(inputs["mixscale"]) + rdrag = Float(inputs["rdrag"]) + rkm = Float(inputs["rkm"]) + use_self_detrain = Int(inputs["use_self_detrain"]) + detrhgt = Float(inputs["detrhgt"]) + use_cumpenent = Int(inputs["use_cumpenent"]) + rpen = Float(inputs["rpen"]) + use_momenflx = Int(inputs["use_momenflx"]) + rdrop = Float(inputs["rdrop"]) + iter_cin = Int(inputs["iter_cin"]) + + # Inputs + condensation = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM], units="n/a", dtype=bool) + + for i in range(0, 24): + for j in range(0, 24): + if inputs["condensation"][i, j] == 1: + condensation.view[i, j] = False + else: + condensation.view[i, j] = True + + kbup = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a", dtype=Int) + safe_assign_array(kbup.view[:], inputs["kbup"] - 1) + krel = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a", dtype=Int) + safe_assign_array(krel.view[:], inputs["krel"] - 1) + pifc0 = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_INTERFACE_DIM], units="n/a") + safe_assign_array(pifc0.view[:], inputs["pifc0"]) + pmid0 = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + safe_assign_array(pmid0.view[:], inputs["pmid0"]) + qt0 = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + safe_assign_array(qt0.view[:], inputs["qt0"]) + ssqt0 = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + safe_assign_array(ssqt0.view[:], inputs["ssqt0"]) + ssthl0 = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + safe_assign_array(ssthl0.view[:], inputs["ssthl0"]) + sstr0 = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM, "ntracers"], units="n/a") + safe_assign_array(sstr0.view[:], inputs["sstr0"]) + ssu0 = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + safe_assign_array(ssu0.view[:], inputs["ssu0"]) + ssv0 = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + safe_assign_array(ssv0.view[:], inputs["ssv0"]) + thl0 = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + safe_assign_array(thl0.view[:], inputs["thl0"]) + tr0 = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM, "ntracers"], units="n/a") + safe_assign_array(tr0.view[:], inputs["tr0_BuoySortFlux"]) + u0 = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + safe_assign_array(u0.view[:], inputs["u0"]) + v0 = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + safe_assign_array(v0.view[:], inputs["v0"]) + exnifc0 = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_INTERFACE_DIM], units="n/a") + safe_assign_array(exnifc0.view[:], inputs["exnifc0"]) + umf = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_INTERFACE_DIM], units="n/a") + safe_assign_array(umf.view[:], inputs["umf"]) + thlu = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_INTERFACE_DIM], units="n/a") + safe_assign_array(thlu.view[:], inputs["thlu"]) + qtu = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_INTERFACE_DIM], units="n/a") + safe_assign_array(qtu.view[:], inputs["qtu"]) + uu = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_INTERFACE_DIM], units="n/a") + safe_assign_array(uu.view[:], inputs["uu"]) + vu = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_INTERFACE_DIM], units="n/a") + safe_assign_array(vu.view[:], inputs["vu"]) + tru = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_INTERFACE_DIM, "ntracers"], units="n/a") + safe_assign_array(tru.view[:], inputs["tru"]) + + # Outputs + qtflx = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_INTERFACE_DIM], units="n/a") + safe_assign_array(qtflx.view[:], inputs["qtflx"]) + slflx = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_INTERFACE_DIM], units="n/a") + safe_assign_array(slflx.view[:], inputs["slflx"]) + trflx = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_INTERFACE_DIM, "ntracers"], units="n/a") + safe_assign_array(trflx.view[:], inputs["trflx"]) + uflx = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_INTERFACE_DIM], units="n/a") + safe_assign_array(uflx.view[:], inputs["uflx"]) + vflx = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_INTERFACE_DIM], units="n/a") + safe_assign_array(vflx.view[:], inputs["vflx"]) + + saturation_vapor_pressure_table = get_saturation_vapor_pressure_table(self.stencil_factory.backend) + self.ese = saturation_vapor_pressure_table.ese + self.esx = saturation_vapor_pressure_table.esx + + # The iteration you want to test + iter_test = int32(0) + + # # Call stencils + self._buoyancy_sorting_fluxes( + condensation=condensation, + kbup=kbup, + krel=krel, + exnifc0=exnifc0, + umf_zint=umf, + thlu=thlu, + thl0=thl0, + ssthl0=ssthl0, + pifc0=pifc0, + pmid0=pmid0, + qtu=qtu, + qt0=qt0, + ssqt0=ssqt0, + uu=uu, + u0=u0, + v0=v0, + vu=vu, + ssu0=ssu0, + ssv0=ssv0, + dotransport=dotransport, + trflx=trflx, + tru=tru, + tr0=tr0, + sstr0=sstr0, + qtflx=qtflx, + uflx=uflx, + vflx=vflx, + slflx=slflx, + iteration=iter_test, + ) + + return { + "qtflx": qtflx.view[:], + "slflx": slflx.view[:], + "trflx": trflx.view[:], + "uflx": uflx.view[:], + "vflx": vflx.view[:], + } diff --git a/GEOSagcm_GridComp/GEOSphysics_GridComp/GEOSmoist_GridComp/pyMoist/tests/savepoint/UW_translate_tests/translate_calc_cumulus_condensate_at_interface.py b/GEOSagcm_GridComp/GEOSphysics_GridComp/GEOSmoist_GridComp/pyMoist/tests/savepoint/UW_translate_tests/translate_calc_cumulus_condensate_at_interface.py new file mode 100644 index 000000000..c7b390a77 --- /dev/null +++ b/GEOSagcm_GridComp/GEOSphysics_GridComp/GEOSmoist_GridComp/pyMoist/tests/savepoint/UW_translate_tests/translate_calc_cumulus_condensate_at_interface.py @@ -0,0 +1,249 @@ +from f90nml import Namelist +from gt4py.cartesian.gtscript import int32 + +import pyMoist.constants as constants +from ndsl import StencilFactory +from ndsl.constants import X_DIM, Y_DIM, Z_DIM, Z_INTERFACE_DIM +from ndsl.dsl.typing import Float, Int +from ndsl.stencils.testing.grid import Grid +from ndsl.stencils.testing.translate import TranslateFortranData2Py +from ndsl.utils import safe_assign_array +from pyMoist.saturation_tables import get_saturation_vapor_pressure_table +from pyMoist.UW.compute_uwshcu import calc_cumulus_condensate_at_interface +from pyMoist.UW.config import UWConfiguration + + +class TranslateCalcCumulusCondensate(TranslateFortranData2Py): + def __init__( + self, + grid: Grid, + namelist: Namelist, + stencil_factory: StencilFactory, + # UW_config: UWConfiguration, + ): + super().__init__(grid, stencil_factory) + self.stencil_factory = stencil_factory + self.quantity_factory = grid.quantity_factory + # self.UW_config = UW_config + + self._calc_cumulus_condensate = self.stencil_factory.from_dims_halo( + func=calc_cumulus_condensate_at_interface, + compute_dims=[X_DIM, Y_DIM, Z_DIM], + externals={"ncnst": 23}, + ) + + # FloatField Inputs + self.in_vars["data_vars"] = { + "condensation": {}, + "kpen": {}, + "krel": {}, + "pifc0": {}, + "ppen": {}, + "qcubelow": {}, + "qiubelow": {}, + "qlubelow": {}, + "qtu": {}, + "prel": {}, + "qtu_top": {}, + "rcwp": {}, + "riwp": {}, + "rlwp": {}, + "thlu": {}, + "thlu_top": {}, + "ufrc": {}, + "ufrclcl": {}, + } + + # Float/Int Inputs + self.in_vars["parameters"] = [ + "dotransport", + "ncnst", + "k0", + "tr0", + "windsrcavg", + "qtsrchgt", + "qtsrc_fac", + "thlsrc_fac", + "frc_rasn", + "rbuoy", + "epsvarw", + "use_CINcin", + "mumin1", + "rmaxfrac", + "PGFc", + "niter_xc", + "criqc", + "rle", + "cridist_opt", + "mixscale", + "rkm", + "dt", + "detrhgt", + "rdrag", + "use_self_detrain", + "detrhgt", + "use_cumpenent", + "rpen", + "use_momenflx", + "rdrop", + "iter_cin", + ] + + # FloatField Outputs + self.out_vars = { + "qcubelow": self.grid.compute_dict(), + "qiubelow": self.grid.compute_dict(), + "qlubelow": self.grid.compute_dict(), + "rcwp": self.grid.compute_dict(), + "riwp": self.grid.compute_dict(), + "rlwp": self.grid.compute_dict(), + } + + def compute(self, inputs): + self.UW_config = UWConfiguration(Int(inputs["ncnst"]), Int(inputs["k0"]), Int(inputs["windsrcavg"])) + + self.quantity_factory.add_data_dimensions( + { + "ntracers": constants.NCNST, + } + ) + + # Float/Int Inputs + dotransport = Int(inputs["dotransport"]) + k0 = Int(inputs["k0"]) + windsrcavg = Int(inputs["windsrcavg"]) + qtsrchgt = Float(inputs["qtsrchgt"]) + qtsrc_fac = Float(inputs["qtsrc_fac"]) + thlsrc_fac = Float(inputs["thlsrc_fac"]) + frc_rasn = Float(inputs["frc_rasn"]) + rbuoy = Float(inputs["rbuoy"]) + epsvarw = Float(inputs["epsvarw"]) + use_CINcin = Int(inputs["use_CINcin"]) + mumin1 = Float(inputs["mumin1"]) + rmaxfrac = Float(inputs["rmaxfrac"]) + PGFc = Float(inputs["PGFc"]) + dt = Float(inputs["dt"]) + niter_xc = Int(inputs["niter_xc"]) + criqc = Float(inputs["criqc"]) + rle = Float(inputs["rle"]) + cridist_opt = Int(inputs["cridist_opt"]) + mixscale = Float(inputs["mixscale"]) + rdrag = Float(inputs["rdrag"]) + rkm = Float(inputs["rkm"]) + use_self_detrain = Int(inputs["use_self_detrain"]) + detrhgt = Float(inputs["detrhgt"]) + use_cumpenent = Int(inputs["use_cumpenent"]) + rpen = Float(inputs["rpen"]) + use_momenflx = Int(inputs["use_momenflx"]) + rdrop = Float(inputs["rdrop"]) + iter_cin = Int(inputs["iter_cin"]) + + # Inputs + condensation = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM], units="n/a", dtype=bool) + + for i in range(0, 24): + for j in range(0, 24): + if inputs["condensation"][i, j] == 1: + condensation.view[i, j] = False + else: + condensation.view[i, j] = True + + prel = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + safe_assign_array(prel.view[:], inputs["prel"]) + qtu = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_INTERFACE_DIM], units="n/a") + safe_assign_array(qtu.view[:], inputs["qtu"]) + thlu = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_INTERFACE_DIM], units="n/a") + safe_assign_array(thlu.view[:], inputs["thlu"]) + krel = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a", dtype=Int) + safe_assign_array(krel.view[:], inputs["krel"] - 1) + kpen = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a", dtype=Int) + safe_assign_array(kpen.view[:], inputs["kpen"] - 1) + pifc0 = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_INTERFACE_DIM], units="n/a") + safe_assign_array(pifc0.view[:], inputs["pifc0"]) + ppen = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM], units="n/a") + safe_assign_array(ppen.view[:], inputs["ppen"]) + qtu_top = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM], units="n/a") + safe_assign_array(qtu_top.view[:], inputs["qtu_top"]) + thlu_top = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM], units="n/a") + safe_assign_array(thlu_top.view[:], inputs["thlu_top"]) + ufrc = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_INTERFACE_DIM], units="n/a") + safe_assign_array(ufrc.view[:], inputs["ufrc"]) + ufrclcl = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + safe_assign_array(ufrclcl.view[:], inputs["ufrclcl"]) + + # Outputs + qcubelow = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM], units="n/a") + safe_assign_array(qcubelow.view[:], inputs["qcubelow"]) + qiubelow = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM], units="n/a") + safe_assign_array(qiubelow.view[:], inputs["qiubelow"]) + qlubelow = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM], units="n/a") + safe_assign_array(qlubelow.view[:], inputs["qlubelow"]) + rcwp = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM], units="n/a") + safe_assign_array(rcwp.view[:], inputs["rcwp"]) + riwp = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM], units="n/a") + safe_assign_array(riwp.view[:], inputs["riwp"]) + rlwp = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM], units="n/a") + safe_assign_array(rlwp.view[:], inputs["rlwp"]) + + saturation_vapor_pressure_table = get_saturation_vapor_pressure_table(self.stencil_factory.backend) + self.ese = saturation_vapor_pressure_table.ese + self.esx = saturation_vapor_pressure_table.esx + + umf_out = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_INTERFACE_DIM], units="n/a") + qtflx_out = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_INTERFACE_DIM], units="n/a") + slflx_out = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_INTERFACE_DIM], units="n/a") + uflx_out = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_INTERFACE_DIM], units="n/a") + vflx_out = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_INTERFACE_DIM], units="n/a") + cush_inout = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM], units="n/a") + qcu = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + qlu = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + qiu = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + cufrc = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + + # The iteration you want to test + iter_test = int32(0) + + # # Call stencils + self._calc_cumulus_condensate( + condensation=condensation, + krel=krel, + kpen=kpen, + pifc0=pifc0, + ppen=ppen, + thlu_top=thlu_top, + qtu_top=qtu_top, + thlu=thlu, + qtu=qtu, + ese=self.ese, + esx=self.esx, + umf_out=umf_out, + qtflx_out=qtflx_out, + slflx_out=slflx_out, + uflx_out=uflx_out, + vflx_out=vflx_out, + ufrc=ufrc, + ufrclcl=ufrclcl, + prel=prel, + criqc=criqc, + qcu=qcu, + qlu=qlu, + qiu=qiu, + qcubelow=qcubelow, + qlubelow=qlubelow, + qiubelow=qiubelow, + rcwp=rcwp, + rlwp=rlwp, + riwp=riwp, + cufrc=cufrc, + cush_inout=cush_inout, + iteration=iter_test, + ) + + return { + "qcubelow": qcubelow.view[:], + "qiubelow": qiubelow.view[:], + "qlubelow": qlubelow.view[:], + "rcwp": rcwp.view[:], + "riwp": riwp.view[:], + "rlwp": rlwp.view[:], + } diff --git a/GEOSagcm_GridComp/GEOSphysics_GridComp/GEOSmoist_GridComp/pyMoist/tests/savepoint/UW_translate_tests/translate_calc_entrainment_mass_flux.py b/GEOSagcm_GridComp/GEOSphysics_GridComp/GEOSmoist_GridComp/pyMoist/tests/savepoint/UW_translate_tests/translate_calc_entrainment_mass_flux.py new file mode 100644 index 000000000..248d3e098 --- /dev/null +++ b/GEOSagcm_GridComp/GEOSphysics_GridComp/GEOSmoist_GridComp/pyMoist/tests/savepoint/UW_translate_tests/translate_calc_entrainment_mass_flux.py @@ -0,0 +1,285 @@ +from f90nml import Namelist +from gt4py.cartesian.gtscript import int32 + +import pyMoist.constants as constants +from ndsl import StencilFactory +from ndsl.constants import X_DIM, Y_DIM, Z_DIM, Z_INTERFACE_DIM +from ndsl.dsl.typing import Float, Int +from ndsl.stencils.testing.grid import Grid +from ndsl.stencils.testing.translate import TranslateFortranData2Py +from ndsl.utils import safe_assign_array +from pyMoist.saturation_tables import get_saturation_vapor_pressure_table +from pyMoist.UW.compute_uwshcu import calc_entrainment_mass_flux +from pyMoist.UW.config import UWConfiguration + + +class TranslateCalcEntrainmentMassFlux(TranslateFortranData2Py): + def __init__( + self, + grid: Grid, + namelist: Namelist, + stencil_factory: StencilFactory, + # UW_config: UWConfiguration, + ): + super().__init__(grid, stencil_factory) + self.stencil_factory = stencil_factory + self.quantity_factory = grid.quantity_factory + # self.UW_config = UW_config + + self._calc_entrainment_mass_flux = self.stencil_factory.from_dims_halo( + func=calc_entrainment_mass_flux, + compute_dims=[X_DIM, Y_DIM, Z_DIM], + externals={"ncnst": 23}, + ) + + # FloatField Inputs + self.in_vars["data_vars"] = { + "condensation": {}, + "dp0": {}, + "exnifc0": {}, + "kbup": {}, + "pifc0": {}, + "pmid0": {}, + "ppen": {}, + "qt0": {}, + "qtu": {}, + "rei": {}, + "ssqt0": {}, + "ssthl0": {}, + "sstr0": {}, + "ssu0": {}, + "ssv0": {}, + "thl0": {}, + "thlu": {}, + "thv0bot": {}, + "thv0top": {}, + "tru": {}, + "u0": {}, + "v0": {}, + "uu": {}, + "vu": {}, + "umf": {}, + "kpen": {}, + "tr0_CalcEntrain": {}, + } + + # Float/Int Inputs + self.in_vars["parameters"] = [ + "dotransport", + "ncnst", + "k0", + "tr0", + "windsrcavg", + "qtsrchgt", + "qtsrc_fac", + "thlsrc_fac", + "frc_rasn", + "rbuoy", + "epsvarw", + "use_CINcin", + "mumin1", + "rmaxfrac", + "PGFc", + "niter_xc", + "criqc", + "rle", + "cridist_opt", + "mixscale", + "rkm", + "dt", + "detrhgt", + "rdrag", + "use_self_detrain", + "detrhgt", + "use_cumpenent", + "rpen", + "use_momenflx", + "rdrop", + "iter_cin", + ] + + # FloatField Outputs + self.out_vars = { + "qtu_emf": self.grid.compute_dict(), + "thlu_emf": self.grid.compute_dict(), + "tru_emf": self.grid.compute_dict(), + "uu_emf": self.grid.compute_dict(), + "vu_emf": self.grid.compute_dict(), + "emf": self.grid.compute_dict(), + } + + def compute(self, inputs): + self.UW_config = UWConfiguration(Int(inputs["ncnst"]), Int(inputs["k0"]), Int(inputs["windsrcavg"])) + + self.quantity_factory.add_data_dimensions( + { + "ntracers": constants.NCNST, + } + ) + + # Float/Int Inputs + dotransport = Int(inputs["dotransport"]) + k0 = Int(inputs["k0"]) + windsrcavg = Int(inputs["windsrcavg"]) + qtsrchgt = Float(inputs["qtsrchgt"]) + qtsrc_fac = Float(inputs["qtsrc_fac"]) + thlsrc_fac = Float(inputs["thlsrc_fac"]) + frc_rasn = Float(inputs["frc_rasn"]) + rbuoy = Float(inputs["rbuoy"]) + epsvarw = Float(inputs["epsvarw"]) + use_CINcin = Int(inputs["use_CINcin"]) + mumin1 = Float(inputs["mumin1"]) + rmaxfrac = Float(inputs["rmaxfrac"]) + PGFc = Float(inputs["PGFc"]) + dt = Float(inputs["dt"]) + niter_xc = Int(inputs["niter_xc"]) + criqc = Float(inputs["criqc"]) + rle = Float(inputs["rle"]) + cridist_opt = Int(inputs["cridist_opt"]) + mixscale = Float(inputs["mixscale"]) + rdrag = Float(inputs["rdrag"]) + rkm = Float(inputs["rkm"]) + use_self_detrain = Int(inputs["use_self_detrain"]) + detrhgt = Float(inputs["detrhgt"]) + use_cumpenent = Int(inputs["use_cumpenent"]) + rpen = Float(inputs["rpen"]) + use_momenflx = Int(inputs["use_momenflx"]) + rdrop = Float(inputs["rdrop"]) + iter_cin = Int(inputs["iter_cin"]) + + # Inputs + condensation = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM], units="n/a", dtype=bool) + + for i in range(0, 24): + for j in range(0, 24): + if inputs["condensation"][i, j] == 1: + condensation.view[i, j] = False + else: + condensation.view[i, j] = True + + exnifc0 = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_INTERFACE_DIM], units="n/a") + safe_assign_array(exnifc0.view[:], inputs["exnifc0"]) + kpen = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a", dtype=Int) + safe_assign_array(kpen.view[:], inputs["kpen"] - 1) + pifc0 = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_INTERFACE_DIM], units="n/a") + safe_assign_array(pifc0.view[:], inputs["pifc0"]) + ppen = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM], units="n/a") + safe_assign_array(ppen.view[:], inputs["ppen"]) + qt0 = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + safe_assign_array(qt0.view[:], inputs["qt0"]) + qtu = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_INTERFACE_DIM], units="n/a") + safe_assign_array(qtu.view[:], inputs["qtu"]) + ssqt0 = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + safe_assign_array(ssqt0.view[:], inputs["ssqt0"]) + ssthl0 = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + safe_assign_array(ssthl0.view[:], inputs["ssthl0"]) + thl0 = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + safe_assign_array(thl0.view[:], inputs["thl0"]) + thlu = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_INTERFACE_DIM], units="n/a") + safe_assign_array(thlu.view[:], inputs["thlu"]) + thv0bot = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + safe_assign_array(thv0bot.view[:], inputs["thv0bot"]) + thv0top = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + safe_assign_array(thv0top.view[:], inputs["thv0top"]) + uu = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_INTERFACE_DIM], units="n/a") + safe_assign_array(uu.view[:], inputs["uu"]) + vu = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_INTERFACE_DIM], units="n/a") + safe_assign_array(vu.view[:], inputs["vu"]) + tru = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_INTERFACE_DIM, "ntracers"], units="n/a") + safe_assign_array(tru.view[:], inputs["tru"]) + kbup = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a", dtype=Int) + safe_assign_array(kbup.view[:], inputs["kbup"] - 1) + umf = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_INTERFACE_DIM], units="n/a") + safe_assign_array(umf.view[:], inputs["umf"]) + rei = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + safe_assign_array(rei.view[:], inputs["rei"]) + dp0 = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + safe_assign_array(dp0.view[:], inputs["dp0"]) + pmid0 = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + safe_assign_array(pmid0.view[:], inputs["pmid0"]) + u0 = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + safe_assign_array(u0.view[:], inputs["u0"]) + v0 = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + safe_assign_array(v0.view[:], inputs["v0"]) + ssu0 = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + safe_assign_array(ssu0.view[:], inputs["ssu0"]) + ssv0 = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + safe_assign_array(ssv0.view[:], inputs["ssv0"]) + tr0 = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM, "ntracers"], units="n/a") + safe_assign_array(tr0.view[:], inputs["tr0_CalcEntrain"]) + sstr0 = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM, "ntracers"], units="n/a") + safe_assign_array(sstr0.view[:], inputs["sstr0"]) + + # Outputs + qtu_emf = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_INTERFACE_DIM], units="n/a") + thlu_emf = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_INTERFACE_DIM], units="n/a") + tru_emf = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_INTERFACE_DIM, "ntracers"], units="n/a") + uu_emf = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_INTERFACE_DIM], units="n/a") + vu_emf = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_INTERFACE_DIM], units="n/a") + emf = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_INTERFACE_DIM], units="n/a") + + saturation_vapor_pressure_table = get_saturation_vapor_pressure_table(self.stencil_factory.backend) + self.ese = saturation_vapor_pressure_table.ese + self.esx = saturation_vapor_pressure_table.esx + + umf_out = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_INTERFACE_DIM], units="n/a") + qtflx_out = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_INTERFACE_DIM], units="n/a") + slflx_out = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_INTERFACE_DIM], units="n/a") + uflx_out = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_INTERFACE_DIM], units="n/a") + vflx_out = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_INTERFACE_DIM], units="n/a") + cush_inout = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM], units="n/a") + + # The iteration you want to test + iter_test = int32(0) + + # # Call stencils + self._calc_entrainment_mass_flux( + condensation=condensation, + k0=k0, + thlu=thlu, + qtu=qtu, + uu=uu, + vu=vu, + tru=tru, + dotransport=dotransport, + tru_emf=tru_emf, + kpen=kpen, + kbup=kbup, + pifc0=pifc0, + thv0bot=thv0bot, + thv0top=thv0top, + exnifc0=exnifc0, + umf_zint=umf, + ppen=ppen, + rei=rei, + rpen=rpen, + dp0=dp0, + dt=dt, + thl0=thl0, + ssthl0=ssthl0, + pmid0=pmid0, + qt0=qt0, + ssqt0=ssqt0, + u0=u0, + ssu0=ssu0, + v0=v0, + ssv0=ssv0, + tr0=tr0, + sstr0=sstr0, + use_cumpenent=use_cumpenent, + thlu_emf=thlu_emf, + qtu_emf=qtu_emf, + uu_emf=uu_emf, + vu_emf=vu_emf, + emf=emf, + iteration=iter_test, + ) + + return { + "qtu_emf": qtu_emf.view[:], + "thlu_emf": thlu_emf.view[:], + "tru_emf": tru_emf.view[:], + "uu_emf": uu_emf.view[:], + "vu_emf": vu_emf.view[:], + "emf": emf.view[:], + } diff --git a/GEOSagcm_GridComp/GEOSphysics_GridComp/GEOSmoist_GridComp/pyMoist/tests/savepoint/UW_translate_tests/translate_calc_momentum_tendency.py b/GEOSagcm_GridComp/GEOSphysics_GridComp/GEOSmoist_GridComp/pyMoist/tests/savepoint/UW_translate_tests/translate_calc_momentum_tendency.py new file mode 100644 index 000000000..d28fce5f1 --- /dev/null +++ b/GEOSagcm_GridComp/GEOSphysics_GridComp/GEOSmoist_GridComp/pyMoist/tests/savepoint/UW_translate_tests/translate_calc_momentum_tendency.py @@ -0,0 +1,185 @@ +from f90nml import Namelist +from gt4py.cartesian.gtscript import int32 + +import pyMoist.constants as constants +from ndsl import StencilFactory +from ndsl.constants import X_DIM, Y_DIM, Z_DIM, Z_INTERFACE_DIM +from ndsl.dsl.typing import Float, Int +from ndsl.stencils.testing.grid import Grid +from ndsl.stencils.testing.translate import TranslateFortranData2Py +from ndsl.utils import safe_assign_array +from pyMoist.UW.compute_uwshcu import calc_momentum_tendency +from pyMoist.UW.config import UWConfiguration + + +class TranslateMomentumTendency(TranslateFortranData2Py): + def __init__( + self, + grid: Grid, + namelist: Namelist, + stencil_factory: StencilFactory, + # UW_config: UWConfiguration, + ): + super().__init__(grid, stencil_factory) + self.stencil_factory = stencil_factory + self.quantity_factory = grid.quantity_factory + # self.UW_config = UW_config + + self._calc_momentum_tendency = self.stencil_factory.from_dims_halo( + func=calc_momentum_tendency, + compute_dims=[X_DIM, Y_DIM, Z_DIM], + externals={"ncnst": 23}, + ) + + # FloatField Inputs + self.in_vars["data_vars"] = { + "dp0": {}, + "condensation": {}, + "kpen": {}, + "uflx": {}, + "vflx": {}, + "u0": {}, + "v0": {}, + "uf": {}, + "vf": {}, + } + + # Float/Int Inputs + self.in_vars["parameters"] = [ + "dotransport", + "ncnst", + "k0", + "tr0", + "windsrcavg", + "qtsrchgt", + "qtsrc_fac", + "thlsrc_fac", + "frc_rasn", + "rbuoy", + "epsvarw", + "use_CINcin", + "mumin1", + "rmaxfrac", + "PGFc", + "niter_xc", + "criqc", + "rle", + "cridist_opt", + "mixscale", + "rkm", + "dt", + "detrhgt", + "rdrag", + "use_self_detrain", + "detrhgt", + "use_cumpenent", + "rpen", + "use_momenflx", + "rdrop", + "iter_cin", + ] + + # FloatField Outputs + self.out_vars = { + "uf": self.grid.compute_dict(), + "vf": self.grid.compute_dict(), + "uten": self.grid.compute_dict(), + "vten": self.grid.compute_dict(), + } + + def compute(self, inputs): + self.UW_config = UWConfiguration(Int(inputs["ncnst"]), Int(inputs["k0"]), Int(inputs["windsrcavg"])) + + self.quantity_factory.add_data_dimensions( + { + "ntracers": constants.NCNST, + } + ) + + # Float/Int Inputs + dotransport = Int(inputs["dotransport"]) + k0 = Int(inputs["k0"]) + windsrcavg = Int(inputs["windsrcavg"]) + qtsrchgt = Float(inputs["qtsrchgt"]) + qtsrc_fac = Float(inputs["qtsrc_fac"]) + thlsrc_fac = Float(inputs["thlsrc_fac"]) + frc_rasn = Float(inputs["frc_rasn"]) + rbuoy = Float(inputs["rbuoy"]) + epsvarw = Float(inputs["epsvarw"]) + use_CINcin = Int(inputs["use_CINcin"]) + mumin1 = Float(inputs["mumin1"]) + rmaxfrac = Float(inputs["rmaxfrac"]) + PGFc = Float(inputs["PGFc"]) + dt = Float(inputs["dt"]) + niter_xc = Int(inputs["niter_xc"]) + criqc = Float(inputs["criqc"]) + rle = Float(inputs["rle"]) + cridist_opt = Int(inputs["cridist_opt"]) + mixscale = Float(inputs["mixscale"]) + rdrag = Float(inputs["rdrag"]) + rkm = Float(inputs["rkm"]) + use_self_detrain = Int(inputs["use_self_detrain"]) + detrhgt = Float(inputs["detrhgt"]) + use_cumpenent = Int(inputs["use_cumpenent"]) + rpen = Float(inputs["rpen"]) + use_momenflx = Int(inputs["use_momenflx"]) + rdrop = Float(inputs["rdrop"]) + iter_cin = Int(inputs["iter_cin"]) + + # Inputs + condensation = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM], units="n/a", dtype=bool) + + for i in range(0, 24): + for j in range(0, 24): + if inputs["condensation"][i, j] == 1: + condensation.view[i, j] = False + else: + condensation.view[i, j] = True + + kpen = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a", dtype=Int) + safe_assign_array(kpen.view[:], inputs["kpen"] - 1) + u0 = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + safe_assign_array(u0.view[:], inputs["u0"]) + v0 = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + safe_assign_array(v0.view[:], inputs["v0"]) + dp0 = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + safe_assign_array(dp0.view[:], inputs["dp0"]) + + # Outputs + uflx = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_INTERFACE_DIM], units="n/a") + safe_assign_array(uflx.view[:], inputs["uflx"]) + vflx = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_INTERFACE_DIM], units="n/a") + safe_assign_array(vflx.view[:], inputs["vflx"]) + uf = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + safe_assign_array(uf.view[:], inputs["uf"]) + vf = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + safe_assign_array(vf.view[:], inputs["vf"]) + uten = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + vten = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + + # The iteration you want to test + iter_test = int32(0) + + # # Call stencils + self._calc_momentum_tendency( + condensation=condensation, + kpen=kpen, + uflx=uflx, + vflx=vflx, + dp0=dp0, + u0=u0, + v0=v0, + dt=dt, + uf=uf, + vf=vf, + uten=uten, + vten=vten, + iteration=iter_test, + ) + + return { + "uf": uf.view[:], + "vf": vf.view[:], + "uten": uten.view[:], + "vten": vten.view[:], + } diff --git a/GEOSagcm_GridComp/GEOSphysics_GridComp/GEOSmoist_GridComp/pyMoist/tests/savepoint/UW_translate_tests/translate_calc_pbl_fluxes.py b/GEOSagcm_GridComp/GEOSphysics_GridComp/GEOSmoist_GridComp/pyMoist/tests/savepoint/UW_translate_tests/translate_calc_pbl_fluxes.py new file mode 100644 index 000000000..ceada2ce5 --- /dev/null +++ b/GEOSagcm_GridComp/GEOSphysics_GridComp/GEOSmoist_GridComp/pyMoist/tests/savepoint/UW_translate_tests/translate_calc_pbl_fluxes.py @@ -0,0 +1,260 @@ +from f90nml import Namelist +from gt4py.cartesian.gtscript import int32 + +import pyMoist.constants as constants +from ndsl import StencilFactory +from ndsl.constants import X_DIM, Y_DIM, Z_DIM, Z_INTERFACE_DIM +from ndsl.dsl.typing import Float, Int +from ndsl.stencils.testing.grid import Grid +from ndsl.stencils.testing.translate import TranslateFortranData2Py +from ndsl.utils import safe_assign_array +from pyMoist.saturation_tables import get_saturation_vapor_pressure_table +from pyMoist.UW.compute_uwshcu import calc_pbl_fluxes +from pyMoist.UW.config import UWConfiguration + + +class TranslateCalcPblFluxes(TranslateFortranData2Py): + def __init__( + self, + grid: Grid, + namelist: Namelist, + stencil_factory: StencilFactory, + # UW_config: UWConfiguration, + ): + super().__init__(grid, stencil_factory) + self.stencil_factory = stencil_factory + self.quantity_factory = grid.quantity_factory + # self.UW_config = UW_config + + self._calc_pbl_fluxes = self.stencil_factory.from_dims_halo( + func=calc_pbl_fluxes, + compute_dims=[X_DIM, Y_DIM, Z_DIM], + externals={"ncnst": 23}, + ) + + # FloatField Inputs + self.in_vars["data_vars"] = { + "cbmf": {}, + "condensation": {}, + "kinv": {}, + "pifc0": {}, + "pmid0": {}, + "qt0": {}, + "qtsrc": {}, + "ssqt0": {}, + "ssthl0": {}, + "sstr0": {}, + "ssu0": {}, + "ssv0": {}, + "thl0": {}, + "thlsrc": {}, + "tr0_PblFlux": {}, + "trsrc": {}, + "u0": {}, + "v0": {}, + "vsrc": {}, + "usrc": {}, + "exnifc0": {}, + } + + # Float/Int Inputs + self.in_vars["parameters"] = [ + "dotransport", + "ncnst", + "k0", + "tr0", + "windsrcavg", + "qtsrchgt", + "qtsrc_fac", + "thlsrc_fac", + "frc_rasn", + "rbuoy", + "epsvarw", + "use_CINcin", + "mumin1", + "rmaxfrac", + "PGFc", + "niter_xc", + "criqc", + "rle", + "cridist_opt", + "mixscale", + "rkm", + "dt", + "detrhgt", + "rdrag", + "use_self_detrain", + "detrhgt", + "use_cumpenent", + "rpen", + "use_momenflx", + "rdrop", + "iter_cin", + ] + + # FloatField Outputs + self.out_vars = { + "qtflx": self.grid.compute_dict(), + "slflx": self.grid.compute_dict(), + "trflx": self.grid.compute_dict(), + "uflx": self.grid.compute_dict(), + "vflx": self.grid.compute_dict(), + "xflx": self.grid.compute_dict(), + } + + def compute(self, inputs): + self.UW_config = UWConfiguration(Int(inputs["ncnst"]), Int(inputs["k0"]), Int(inputs["windsrcavg"])) + + self.quantity_factory.add_data_dimensions( + { + "ntracers": constants.NCNST, + } + ) + + # Float/Int Inputs + dotransport = Int(inputs["dotransport"]) + k0 = Int(inputs["k0"]) + windsrcavg = Int(inputs["windsrcavg"]) + qtsrchgt = Float(inputs["qtsrchgt"]) + qtsrc_fac = Float(inputs["qtsrc_fac"]) + thlsrc_fac = Float(inputs["thlsrc_fac"]) + frc_rasn = Float(inputs["frc_rasn"]) + rbuoy = Float(inputs["rbuoy"]) + epsvarw = Float(inputs["epsvarw"]) + use_CINcin = Int(inputs["use_CINcin"]) + mumin1 = Float(inputs["mumin1"]) + rmaxfrac = Float(inputs["rmaxfrac"]) + PGFc = Float(inputs["PGFc"]) + dt = Float(inputs["dt"]) + niter_xc = Int(inputs["niter_xc"]) + criqc = Float(inputs["criqc"]) + rle = Float(inputs["rle"]) + cridist_opt = Int(inputs["cridist_opt"]) + mixscale = Float(inputs["mixscale"]) + rdrag = Float(inputs["rdrag"]) + rkm = Float(inputs["rkm"]) + use_self_detrain = Int(inputs["use_self_detrain"]) + detrhgt = Float(inputs["detrhgt"]) + use_cumpenent = Int(inputs["use_cumpenent"]) + rpen = Float(inputs["rpen"]) + use_momenflx = Int(inputs["use_momenflx"]) + rdrop = Float(inputs["rdrop"]) + iter_cin = Int(inputs["iter_cin"]) + + # Inputs + condensation = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM], units="n/a", dtype=bool) + + for i in range(0, 24): + for j in range(0, 24): + if inputs["condensation"][i, j] == 1: + condensation.view[i, j] = False + else: + condensation.view[i, j] = True + + cbmf = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + safe_assign_array(cbmf.view[:], inputs["cbmf"]) + kinv = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a", dtype=Int) + safe_assign_array(kinv.view[:], inputs["kinv"]) + pifc0 = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_INTERFACE_DIM], units="n/a") + safe_assign_array(pifc0.view[:], inputs["pifc0"]) + pmid0 = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + safe_assign_array(pmid0.view[:], inputs["pmid0"]) + qt0 = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + safe_assign_array(qt0.view[:], inputs["qt0"]) + qtsrc = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + safe_assign_array(qtsrc.view[:], inputs["qtsrc"]) + ssqt0 = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + safe_assign_array(ssqt0.view[:], inputs["ssqt0"]) + ssthl0 = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + safe_assign_array(ssthl0.view[:], inputs["ssthl0"]) + sstr0 = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM, "ntracers"], units="n/a") + safe_assign_array(sstr0.view[:], inputs["sstr0"]) + ssu0 = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + safe_assign_array(ssu0.view[:], inputs["ssu0"]) + ssv0 = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + safe_assign_array(ssv0.view[:], inputs["ssv0"]) + thl0 = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + safe_assign_array(thl0.view[:], inputs["thl0"]) + thlsrc = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + safe_assign_array(thlsrc.view[:], inputs["thlsrc"]) + tr0 = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM, "ntracers"], units="n/a") + safe_assign_array(tr0.view[:], inputs["tr0_PblFlux"]) + trsrc = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, "ntracers"], units="n/a") + safe_assign_array(trsrc.view[:], inputs["trsrc"]) + u0 = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + safe_assign_array(u0.view[:], inputs["u0"]) + v0 = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + safe_assign_array(v0.view[:], inputs["v0"]) + vsrc = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + safe_assign_array(vsrc.view[:], inputs["vsrc"]) + usrc = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + safe_assign_array(usrc.view[:], inputs["usrc"]) + exnifc0 = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_INTERFACE_DIM], units="n/a") + safe_assign_array(exnifc0.view[:], inputs["exnifc0"]) + + # Outputs + qtflx = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_INTERFACE_DIM], units="n/a") + slflx = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_INTERFACE_DIM], units="n/a") + trflx = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_INTERFACE_DIM, "ntracers"], units="n/a") + uflx = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_INTERFACE_DIM], units="n/a") + vflx = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_INTERFACE_DIM], units="n/a") + xflx = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_INTERFACE_DIM], units="n/a") + xflx_ndim = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM, "ntracers"], units="n/a") + + saturation_vapor_pressure_table = get_saturation_vapor_pressure_table(self.stencil_factory.backend) + self.ese = saturation_vapor_pressure_table.ese + self.esx = saturation_vapor_pressure_table.esx + + umf_out = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_INTERFACE_DIM], units="n/a") + qtflx_out = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_INTERFACE_DIM], units="n/a") + slflx_out = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_INTERFACE_DIM], units="n/a") + uflx_out = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_INTERFACE_DIM], units="n/a") + vflx_out = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_INTERFACE_DIM], units="n/a") + cush_inout = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM], units="n/a") + + # The iteration you want to test + iter_test = int32(0) + + # # Call stencils + self._calc_pbl_fluxes( + condensation=condensation, + qtsrc=qtsrc, + qt0=qt0, + ssqt0=ssqt0, + pifc0=pifc0, + pmid0=pmid0, + kinv=kinv, + cbmf=cbmf, + dt=dt, + xflx=xflx, + qtflx=qtflx, + uflx=uflx, + vflx=vflx, + slflx=slflx, + thlsrc=thlsrc, + thl0=thl0, + ssthl0=ssthl0, + exnifc0=exnifc0, + usrc=usrc, + u0=u0, + ssu0=ssu0, + vsrc=vsrc, + v0=v0, + ssv0=ssv0, + dotransport=dotransport, + trsrc=trsrc, + tr0=tr0, + sstr0=sstr0, + trflx=trflx, + xflx_ndim=xflx_ndim, + iteration=iter_test, + ) + + return { + "qtflx": qtflx.view[:], + "slflx": slflx.view[:], + "trflx": trflx.view[:], + "uflx": uflx.view[:], + "vflx": vflx.view[:], + "xflx": xflx.view[:], + } diff --git a/GEOSagcm_GridComp/GEOSphysics_GridComp/GEOSmoist_GridComp/pyMoist/tests/savepoint/UW_translate_tests/translate_calc_ppen.py b/GEOSagcm_GridComp/GEOSphysics_GridComp/GEOSmoist_GridComp/pyMoist/tests/savepoint/UW_translate_tests/translate_calc_ppen.py new file mode 100644 index 000000000..3d91419b3 --- /dev/null +++ b/GEOSagcm_GridComp/GEOSphysics_GridComp/GEOSmoist_GridComp/pyMoist/tests/savepoint/UW_translate_tests/translate_calc_ppen.py @@ -0,0 +1,187 @@ +from f90nml import Namelist +from gt4py.cartesian.gtscript import int32 + +import pyMoist.constants as constants +from ndsl import StencilFactory +from ndsl.constants import X_DIM, Y_DIM, Z_DIM, Z_INTERFACE_DIM +from ndsl.dsl.typing import Float, Int +from ndsl.stencils.testing.grid import Grid +from ndsl.stencils.testing.translate import TranslateFortranData2Py +from ndsl.utils import safe_assign_array +from pyMoist.UW.compute_uwshcu import calc_ppen +from pyMoist.UW.config import UWConfiguration + + +# Dev NOTE: The data for this translate test comes from combining two files in +# a single nc file using the following NCO tool: +# `ncks -A ComputeUwshcu-In.nc CalcPpen-In.nc` + + +class TranslateCalcPpen(TranslateFortranData2Py): + def __init__( + self, + grid: Grid, + namelist: Namelist, + stencil_factory: StencilFactory, + # UW_config: UWConfiguration, + ): + super().__init__(grid, stencil_factory) + self.stencil_factory = stencil_factory + self.quantity_factory = grid.quantity_factory + # self.UW_config = UW_config + + self._calc_ppen = self.stencil_factory.from_dims_halo( + func=calc_ppen, + compute_dims=[X_DIM, Y_DIM, Z_DIM], + externals={"ncnst": 23}, + ) + + # FloatField Inputs + self.in_vars["data_vars"] = { + "bogbot": {}, + "bogtop": {}, + "condensation": {}, + "dp0": {}, + "drage": {}, + "kpen": {}, + "pifc0": {}, + "rhomid0j": {}, + "wtwb": {}, + "wu": {}, + } + + # Float/Int Inputs + self.in_vars["parameters"] = [ + "dotransport", + "ncnst", + "k0", + "tr0", + "windsrcavg", + "qtsrchgt", + "qtsrc_fac", + "thlsrc_fac", + "frc_rasn", + "rbuoy", + "epsvarw", + "use_CINcin", + "mumin1", + "rmaxfrac", + "PGFc", + "niter_xc", + "criqc", + "rle", + "cridist_opt", + "mixscale", + "rkm", + "dt", + "detrhgt", + "rdrag", + "use_self_detrain", + "detrhgt", + "use_cumpenent", + "rpen", + "use_momenflx", + "rdrop", + "iter_cin", + ] + + # FloatField Outputs + self.out_vars = { + "ppen": self.grid.compute_dict(), + } + + def compute(self, inputs): + self.UW_config = UWConfiguration(Int(inputs["ncnst"]), Int(inputs["k0"]), Int(inputs["windsrcavg"])) + + self.quantity_factory.add_data_dimensions( + { + "ntracers": constants.NCNST, + } + ) + + # Float/Int Inputs + dotransport = Int(inputs["dotransport"]) + k0 = Int(inputs["k0"]) + windsrcavg = Int(inputs["windsrcavg"]) + qtsrchgt = Float(inputs["qtsrchgt"]) + qtsrc_fac = Float(inputs["qtsrc_fac"]) + thlsrc_fac = Float(inputs["thlsrc_fac"]) + frc_rasn = Float(inputs["frc_rasn"]) + rbuoy = Float(inputs["rbuoy"]) + epsvarw = Float(inputs["epsvarw"]) + use_CINcin = Int(inputs["use_CINcin"]) + mumin1 = Float(inputs["mumin1"]) + rmaxfrac = Float(inputs["rmaxfrac"]) + PGFc = Float(inputs["PGFc"]) + dt = Float(inputs["dt"]) + niter_xc = Int(inputs["niter_xc"]) + criqc = Float(inputs["criqc"]) + rle = Float(inputs["rle"]) + cridist_opt = Int(inputs["cridist_opt"]) + mixscale = Float(inputs["mixscale"]) + rdrag = Float(inputs["rdrag"]) + rkm = Float(inputs["rkm"]) + use_self_detrain = Int(inputs["use_self_detrain"]) + detrhgt = Float(inputs["detrhgt"]) + use_cumpenent = Int(inputs["use_cumpenent"]) + rpen = Float(inputs["rpen"]) + use_momenflx = Int(inputs["use_momenflx"]) + rdrop = Float(inputs["rdrop"]) + iter_cin = Int(inputs["iter_cin"]) + + # Field inputs + condensation = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM], units="n/a", dtype=bool) + + for i in range(0, 24): + for j in range(0, 24): + if inputs["condensation"][i, j] == 1: + condensation.view[i, j] = False + else: + condensation.view[i, j] = True + + kpen_IJ = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM], units="n/a", dtype=Int) + safe_assign_array(kpen_IJ.view[:], inputs["kpen"] - 1) + bogbot = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM], units="n/a") + safe_assign_array(bogbot.view[:], inputs["bogbot"]) + bogtop = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM], units="n/a") + safe_assign_array(bogtop.view[:], inputs["bogtop"]) + dp0 = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + safe_assign_array(dp0.view[:], inputs["dp0"]) + drage = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM], units="n/a") + safe_assign_array(drage.view[:], inputs["drage"]) + pifc0 = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_INTERFACE_DIM], units="n/a") + safe_assign_array(pifc0.view[:], inputs["pifc0"]) + rhomid0j = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM], units="n/a") + safe_assign_array(rhomid0j.view[:], inputs["rhomid0j"]) + wtwb = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM], units="n/a") + safe_assign_array(wtwb.view[:], inputs["wtwb"]) + wu = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_INTERFACE_DIM], units="n/a") + safe_assign_array(wu.view[:], inputs["wu"]) + + # Outputs + ppen = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM], units="n/a") + kpen = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a", dtype=Int) + + # The iteration you want to test + iter_test = int32(0) + + # # Call stencils + self._calc_ppen( + condensation=condensation, + drage=drage, + bogbot=bogbot, + bogtop=bogtop, + pifc0=pifc0, + kpen_IJ=kpen_IJ, + kpen=kpen, + wu=wu, + rhomid0j=rhomid0j, + dp0=dp0, + wtwb=wtwb, + ppen=ppen, + iteration=iter_test, + ) + + return { + "ppen": ppen.view[:], + } diff --git a/GEOSagcm_GridComp/GEOSphysics_GridComp/GEOSmoist_GridComp/pyMoist/tests/savepoint/UW_translate_tests/translate_calc_thermodynamic_tendencies.py b/GEOSagcm_GridComp/GEOSphysics_GridComp/GEOSmoist_GridComp/pyMoist/tests/savepoint/UW_translate_tests/translate_calc_thermodynamic_tendencies.py new file mode 100644 index 000000000..878eba4d2 --- /dev/null +++ b/GEOSagcm_GridComp/GEOSphysics_GridComp/GEOSmoist_GridComp/pyMoist/tests/savepoint/UW_translate_tests/translate_calc_thermodynamic_tendencies.py @@ -0,0 +1,328 @@ +from f90nml import Namelist +from gt4py.cartesian.gtscript import int32 + +import pyMoist.constants as constants +from ndsl import StencilFactory +from ndsl.constants import X_DIM, Y_DIM, Z_DIM, Z_INTERFACE_DIM +from ndsl.dsl.typing import Float, Int +from ndsl.stencils.testing.grid import Grid +from ndsl.stencils.testing.translate import TranslateFortranData2Py +from ndsl.utils import safe_assign_array +from pyMoist.saturation_tables import get_saturation_vapor_pressure_table +from pyMoist.UW.compute_uwshcu import calc_thermodynamic_tendencies +from pyMoist.UW.config import UWConfiguration + + +class TranslateThermodynamicTendencies(TranslateFortranData2Py): + def __init__( + self, + grid: Grid, + namelist: Namelist, + stencil_factory: StencilFactory, + # UW_config: UWConfiguration, + ): + super().__init__(grid, stencil_factory) + self.stencil_factory = stencil_factory + self.quantity_factory = grid.quantity_factory + # self.UW_config = UW_config + + self._calc_thermodynamic_tendencies = self.stencil_factory.from_dims_halo( + func=calc_thermodynamic_tendencies, + compute_dims=[X_DIM, Y_DIM, Z_DIM], + externals={"ncnst": 23}, + ) + + # FloatField Inputs + self.in_vars["data_vars"] = { + "condensation": {}, + "diten": {}, + "dwten": {}, + "dp0": {}, + "kpen": {}, + "qtflx": {}, + "slflx": {}, + "u0": {}, + "v0": {}, + "uf": {}, + "vf": {}, + "uflx": {}, + "vflx": {}, + "umf": {}, + "pifc0": {}, + "ppen": {}, + "prel": {}, + "qtu": {}, + "thlu": {}, + "thlu_top": {}, + "qtu_top": {}, + "emf": {}, + "ql0": {}, + "qi0": {}, + "pmid0": {}, + "kbup": {}, + "krel": {}, + "thlu_emf": {}, + "qtu_emf": {}, + "qlten_sink": {}, + "qiten_sink": {}, + "fdr": {}, + } + + # Float/Int Inputs + self.in_vars["parameters"] = [ + "dotransport", + "ncnst", + "k0", + "tr0", + "windsrcavg", + "qtsrchgt", + "qtsrc_fac", + "thlsrc_fac", + "frc_rasn", + "rbuoy", + "epsvarw", + "use_CINcin", + "mumin1", + "rmaxfrac", + "PGFc", + "niter_xc", + "criqc", + "rle", + "cridist_opt", + "mixscale", + "rkm", + "dt", + "detrhgt", + "rdrag", + "use_self_detrain", + "detrhgt", + "use_cumpenent", + "rpen", + "use_momenflx", + "rdrop", + "iter_cin", + ] + + # FloatField Outputs + self.out_vars = { + "slten": self.grid.compute_dict(), + "qc": self.grid.compute_dict(), + "sten": self.grid.compute_dict(), + "qiten": self.grid.compute_dict(), + "qlten": self.grid.compute_dict(), + "qvten": self.grid.compute_dict(), + } + + def compute(self, inputs): + self.UW_config = UWConfiguration(Int(inputs["ncnst"]), Int(inputs["k0"]), Int(inputs["windsrcavg"])) + + self.quantity_factory.add_data_dimensions( + { + "ntracers": constants.NCNST, + } + ) + + # Float/Int Inputs + dotransport = Int(inputs["dotransport"]) + k0 = Int(inputs["k0"]) + windsrcavg = Int(inputs["windsrcavg"]) + qtsrchgt = Float(inputs["qtsrchgt"]) + qtsrc_fac = Float(inputs["qtsrc_fac"]) + thlsrc_fac = Float(inputs["thlsrc_fac"]) + frc_rasn = Float(inputs["frc_rasn"]) + rbuoy = Float(inputs["rbuoy"]) + epsvarw = Float(inputs["epsvarw"]) + use_CINcin = Int(inputs["use_CINcin"]) + mumin1 = Float(inputs["mumin1"]) + rmaxfrac = Float(inputs["rmaxfrac"]) + PGFc = Float(inputs["PGFc"]) + dt = Float(inputs["dt"]) + niter_xc = Int(inputs["niter_xc"]) + criqc = Float(inputs["criqc"]) + rle = Float(inputs["rle"]) + cridist_opt = Int(inputs["cridist_opt"]) + mixscale = Float(inputs["mixscale"]) + rdrag = Float(inputs["rdrag"]) + rkm = Float(inputs["rkm"]) + use_self_detrain = Int(inputs["use_self_detrain"]) + detrhgt = Float(inputs["detrhgt"]) + use_cumpenent = Int(inputs["use_cumpenent"]) + rpen = Float(inputs["rpen"]) + use_momenflx = Int(inputs["use_momenflx"]) + rdrop = Float(inputs["rdrop"]) + iter_cin = Int(inputs["iter_cin"]) + + # Inputs + condensation = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM], units="n/a", dtype=bool) + + for i in range(0, 24): + for j in range(0, 24): + if inputs["condensation"][i, j] == 1: + condensation.view[i, j] = False + else: + condensation.view[i, j] = True + + diten = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + safe_assign_array(diten.view[:], inputs["diten"]) + dwten = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + safe_assign_array(dwten.view[:], inputs["dwten"]) + dp0 = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + safe_assign_array(dp0.view[:], inputs["dp0"]) + kpen = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a", dtype=Int) + safe_assign_array(kpen.view[:], inputs["kpen"] - 1) + qtflx = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_INTERFACE_DIM], units="n/a") + safe_assign_array(qtflx.view[:], inputs["qtflx"]) + slflx = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_INTERFACE_DIM], units="n/a") + safe_assign_array(slflx.view[:], inputs["slflx"]) + u0 = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + safe_assign_array(u0.view[:], inputs["u0"]) + v0 = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + safe_assign_array(v0.view[:], inputs["v0"]) + uf = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + safe_assign_array(uf.view[:], inputs["uf"]) + vf = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + safe_assign_array(vf.view[:], inputs["vf"]) + uflx = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_INTERFACE_DIM], units="n/a") + safe_assign_array(uflx.view[:], inputs["uflx"]) + vflx = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_INTERFACE_DIM], units="n/a") + safe_assign_array(vflx.view[:], inputs["vflx"]) + umf = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_INTERFACE_DIM], units="n/a") + safe_assign_array(umf.view[:], inputs["umf"]) + emf = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_INTERFACE_DIM], units="n/a") + safe_assign_array(emf.view[:], inputs["emf"]) + qi0 = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + safe_assign_array(qi0.view[:], inputs["qi0"]) + ql0 = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + safe_assign_array(ql0.view[:], inputs["ql0"]) + + # Outputs + qrten = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + qsten = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + slten = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + + saturation_vapor_pressure_table = get_saturation_vapor_pressure_table(self.stencil_factory.backend) + self.ese = saturation_vapor_pressure_table.ese + self.esx = saturation_vapor_pressure_table.esx + + umf_out = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_INTERFACE_DIM], units="n/a") + qtflx_out = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_INTERFACE_DIM], units="n/a") + slflx_out = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_INTERFACE_DIM], units="n/a") + uflx_out = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_INTERFACE_DIM], units="n/a") + vflx_out = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_INTERFACE_DIM], units="n/a") + cush_inout = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM], units="n/a") + + krel = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a", dtype=Int) + safe_assign_array(krel.view[:], inputs["krel"] - 1) + prel = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + safe_assign_array(prel.view[:], inputs["prel"]) + thlu = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_INTERFACE_DIM], units="n/a") + safe_assign_array(thlu.view[:], inputs["thlu"]) + qtu = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_INTERFACE_DIM], units="n/a") + safe_assign_array(qtu.view[:], inputs["qtu"]) + pifc0 = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_INTERFACE_DIM], units="n/a") + safe_assign_array(pifc0.view[:], inputs["pifc0"]) + ppen = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM], units="n/a") + safe_assign_array(ppen.view[:], inputs["ppen"]) + thlu_top = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM], units="n/a") + safe_assign_array(thlu_top.view[:], inputs["thlu_top"]) + qtu_top = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM], units="n/a") + safe_assign_array(qtu_top.view[:], inputs["qtu_top"]) + qlubelow = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM], units="n/a") + qiubelow = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM], units="n/a") + qlj_2D = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM], units="n/a") + qij_2D = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM], units="n/a") + kbup = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a", dtype=Int) + safe_assign_array(kbup.view[:], inputs["kbup"] - 1) + fdr = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + safe_assign_array(fdr.view[:], inputs["fdr"]) + pmid0 = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + safe_assign_array(pmid0.view[:], inputs["pmid0"]) + thlu_emf = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_INTERFACE_DIM], units="n/a") + safe_assign_array(thlu_emf.view[:], inputs["thlu_emf"]) + qtu_emf = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_INTERFACE_DIM], units="n/a") + safe_assign_array(qtu_emf.view[:], inputs["qtu_emf"]) + qlten_sink = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + safe_assign_array(qlten_sink.view[:], inputs["qlten_sink"]) + qiten_sink = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + safe_assign_array(qiten_sink.view[:], inputs["qiten_sink"]) + qvten = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + qiten = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + qlten = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + sten = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + qc = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + qlten_det = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + qiten_det = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + + # The iteration you want to test + iter_test = int32(0) + + # # Call stencils + self._calc_thermodynamic_tendencies( + condensation=condensation, + kpen=kpen, + umf_zint=umf, + dp0=dp0, + frc_rasn=frc_rasn, + slflx=slflx, + uflx=uflx, + vflx=vflx, + qtflx=qtflx, + u0=u0, + v0=v0, + uf=uf, + vf=vf, + dwten=dwten, + diten=diten, + umf_temp=umf, + krel=krel, + prel=prel, + thlu=thlu, + qtu=qtu, + ese=self.ese, + esx=self.esx, + umf_out=umf_out, + qtflx_out=qtflx_out, + slflx_out=slflx_out, + uflx_out=uflx_out, + vflx_out=vflx_out, + pifc0=pifc0, + ppen=ppen, + thlu_top=thlu_top, + qtu_top=qtu_top, + qlubelow=qlubelow, + qiubelow=qiubelow, + qlj_2D=qlj_2D, + qij_2D=qij_2D, + kbup=kbup, + fdr=fdr, + ql0=ql0, + qi0=qi0, + pmid0=pmid0, + thlu_emf=thlu_emf, + qtu_emf=qtu_emf, + emf=emf, + dt=dt, + qlten_sink=qlten_sink, + qiten_sink=qiten_sink, + qrten=qrten, + qsten=qsten, + qvten=qvten, + qlten=qlten, + sten=sten, + qiten=qiten, + qc=qc, + qlten_det=qlten_det, + qiten_det=qiten_det, + slten=slten, + cush_inout=cush_inout, + iteration=iter_test, + ) + + return { + "slten": slten.view[:], + "qc": qc.view[:], + "sten": sten.view[:], + "qiten": qiten.view[:], + "qlten": qlten.view[:], + "qvten": qvten.view[:], + } diff --git a/GEOSagcm_GridComp/GEOSphysics_GridComp/GEOSmoist_GridComp/pyMoist/tests/savepoint/UW_translate_tests/translate_compute_cin_cinlcl.py b/GEOSagcm_GridComp/GEOSphysics_GridComp/GEOSmoist_GridComp/pyMoist/tests/savepoint/UW_translate_tests/translate_compute_cin_cinlcl.py new file mode 100644 index 000000000..0c0c6dcd0 --- /dev/null +++ b/GEOSagcm_GridComp/GEOSphysics_GridComp/GEOSmoist_GridComp/pyMoist/tests/savepoint/UW_translate_tests/translate_compute_cin_cinlcl.py @@ -0,0 +1,320 @@ +from f90nml import Namelist +from gt4py.cartesian.gtscript import int32 + +import pyMoist.constants as constants +from ndsl import StencilFactory +from ndsl.constants import X_DIM, Y_DIM, Z_DIM, Z_INTERFACE_DIM +from ndsl.dsl.typing import Float, Int +from ndsl.stencils.testing.grid import Grid +from ndsl.stencils.testing.translate import TranslateFortranData2Py +from ndsl.utils import safe_assign_array +from pyMoist.saturation_tables import get_saturation_vapor_pressure_table +from pyMoist.UW.compute_uwshcu import compute_cin_cinlcl +from pyMoist.UW.config import UWConfiguration + + +# Dev NOTE: The data for this translate test comes from combining two files in +# a single nc file using the following NCO tool: +# `ncks -A ComputeUwshcu-In.nc ComputeCinCinlcl-In.nc` + + +class TranslateComputeCinCinlcl(TranslateFortranData2Py): + def __init__( + self, + grid: Grid, + namelist: Namelist, + stencil_factory: StencilFactory, + # UW_config: UWConfiguration, + ): + super().__init__(grid, stencil_factory) + self.stencil_factory = stencil_factory + self.quantity_factory = grid.quantity_factory + # self.UW_config = UW_config + + self._compute_cin_cinlcl = self.stencil_factory.from_dims_halo( + func=compute_cin_cinlcl, + compute_dims=[X_DIM, Y_DIM, Z_DIM], + externals={"ncnst": 23}, + ) + + # FloatField Inputs + self.in_vars["data_vars"] = { + "condensation": {}, + "kinv": {}, + "klcl": {}, + "pifc0": {}, + "plcl": {}, + "qtsrc": {}, + "thlsrc": {}, + "thv0lcl": {}, + "thv0top": {}, + "thv0bot": {}, + "thvlmin": {}, + "thvlsrc": {}, + "tkeavg": {}, + "trsrc": {}, + "usrc": {}, + "vsrc": {}, + "rkfre": {}, + } + + # Float/Int Inputs + self.in_vars["parameters"] = [ + "dotransport", + "ncnst", + "k0", + "tr0", + "windsrcavg", + "qtsrchgt", + "qtsrc_fac", + "thlsrc_fac", + "frc_rasn", + "rbuoy", + "epsvarw", + "use_CINcin", + "mumin1", + "rmaxfrac", + "PGFc", + "niter_xc", + "criqc", + "rle", + "cridist_opt", + "mixscale", + "rkm", + "dt", + "detrhgt", + "rdrag", + "use_self_detrain", + "detrhgt", + "use_cumpenent", + "rpen", + "use_momenflx", + "rdrop", + "iter_cin", + ] + + # FloatField Outputs + self.out_vars = { + "cin_i": self.grid.compute_dict(), + "cinlcl_i": self.grid.compute_dict(), + "ke": self.grid.compute_dict(), + "kinv_o": self.grid.compute_dict(), + "klfc_o": self.grid.compute_dict(), + "plcl_o": self.grid.compute_dict(), + "plfc_o": self.grid.compute_dict(), + "qtsrc_o": self.grid.compute_dict(), + "thlsrc_o": self.grid.compute_dict(), + "thvlmin_o": self.grid.compute_dict(), + "thv0lcl_o": self.grid.compute_dict(), + "tkeavg_o": self.grid.compute_dict(), + "trsrc_o": self.grid.compute_dict(), + "usrc_o": self.grid.compute_dict(), + "vsrc_o": self.grid.compute_dict(), + } + + def compute(self, inputs): + self.UW_config = UWConfiguration(Int(inputs["ncnst"]), Int(inputs["k0"]), Int(inputs["windsrcavg"])) + + self.quantity_factory.add_data_dimensions( + { + "ntracers": constants.NCNST, + } + ) + + # Float/Int Inputs + dotransport = Int(inputs["dotransport"]) + k0 = Int(inputs["k0"]) + windsrcavg = Int(inputs["windsrcavg"]) + qtsrchgt = Float(inputs["qtsrchgt"]) + qtsrc_fac = Float(inputs["qtsrc_fac"]) + thlsrc_fac = Float(inputs["thlsrc_fac"]) + frc_rasn = Float(inputs["frc_rasn"]) + rbuoy = Float(inputs["rbuoy"]) + epsvarw = Float(inputs["epsvarw"]) + use_CINcin = Int(inputs["use_CINcin"]) + mumin1 = Float(inputs["mumin1"]) + rmaxfrac = Float(inputs["rmaxfrac"]) + PGFc = Float(inputs["PGFc"]) + dt = Float(inputs["dt"]) + niter_xc = Int(inputs["niter_xc"]) + criqc = Float(inputs["criqc"]) + rle = Float(inputs["rle"]) + cridist_opt = Int(inputs["cridist_opt"]) + mixscale = Float(inputs["mixscale"]) + rdrag = Float(inputs["rdrag"]) + rkm = Float(inputs["rkm"]) + use_self_detrain = Int(inputs["use_self_detrain"]) + detrhgt = Float(inputs["detrhgt"]) + use_cumpenent = Int(inputs["use_cumpenent"]) + rpen = Float(inputs["rpen"]) + use_momenflx = Int(inputs["use_momenflx"]) + rdrop = Float(inputs["rdrop"]) + iter_cin = Int(inputs["iter_cin"]) + + # Field inputs + condensation = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM], units="n/a", dtype=bool) + + for i in range(0, 24): + for j in range(0, 24): + if inputs["condensation"][i, j] == 1: + condensation.view[i, j] = False + else: + condensation.view[i, j] = True + + kinv = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a", dtype=Int) + safe_assign_array(kinv.view[:], inputs["kinv"]) + klcl = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a", dtype=Int) + safe_assign_array(klcl.view[:], inputs["klcl"] - 1) + pifc0 = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_INTERFACE_DIM], units="n/a") + safe_assign_array(pifc0.view[:], inputs["pifc0"]) + plcl = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + safe_assign_array(plcl.view[:], inputs["plcl"]) + qtsrc = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + safe_assign_array(qtsrc.view[:], inputs["qtsrc"]) + thlsrc = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + safe_assign_array(thlsrc.view[:], inputs["thlsrc"]) + thv0bot = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + safe_assign_array(thv0bot.view[:], inputs["thv0bot"]) + thv0lcl = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + safe_assign_array(thv0lcl.view[:], inputs["thv0lcl"]) + thv0top = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + safe_assign_array(thv0top.view[:], inputs["thv0top"]) + thvlmin = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + safe_assign_array(thvlmin.view[:], inputs["thvlmin"]) + thvlsrc = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + safe_assign_array(thvlsrc.view[:], inputs["thvlsrc"]) + tkeavg = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + safe_assign_array(tkeavg.view[:], inputs["tkeavg"]) + trsrc = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, "ntracers"], units="n/a") + safe_assign_array(trsrc.view[:], inputs["trsrc"]) + usrc = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + safe_assign_array(usrc.view[:], inputs["usrc"]) + vsrc = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + safe_assign_array(vsrc.view[:], inputs["vsrc"]) + rkfre = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM], units="n/a") + safe_assign_array(rkfre.view[:], inputs["rkfre"]) + + # Outputs + cin_i = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM], units="n/a") + cinlcl_i = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM], units="n/a") + ke = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM], units="n/a") + kinv_o = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a", dtype=Int) + klfc_o = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a", dtype=Int) + plcl_o = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + plfc_o = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + qtsrc_o = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + thlsrc_o = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + thvlmin_o = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + thv0lcl_o = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + tkeavg_o = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + trsrc_o = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, "ntracers"], units="n/a") + usrc_o = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + vsrc_o = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + cin_IJ = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM], units="n/a") + cinlcl_IJ = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM], units="n/a") + plfc_IJ = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM], units="n/a") + klfc_IJ = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM], units="n/a", dtype=Int) + plfc = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + klfc = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a", dtype=Int) + cin = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + cinlcl = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + thvubot = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + thvutop = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + klcl_o = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a", dtype=Int) + thvlsrc_o = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + + umf_out = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_INTERFACE_DIM], units="n/a") + qtflx_out = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_INTERFACE_DIM], units="n/a") + slflx_out = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_INTERFACE_DIM], units="n/a") + uflx_out = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_INTERFACE_DIM], units="n/a") + vflx_out = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_INTERFACE_DIM], units="n/a") + cush_inout = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM], units="n/a") + + saturation_vapor_pressure_table = get_saturation_vapor_pressure_table(self.stencil_factory.backend) + self.ese = saturation_vapor_pressure_table.ese + self.esx = saturation_vapor_pressure_table.esx + + stop_cin = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM], units="n/a", dtype=bool) + + # The iteration you want to test + iter_test = int32(0) + + # # Call stencils + self._compute_cin_cinlcl( + condensation=condensation, + stop_cin=stop_cin, + klcl=klcl, + kinv=kinv, + thvlsrc=thvlsrc, + pifc0=pifc0, + thv0bot=thv0bot, + thv0top=thv0top, + plcl=plcl, + thv0lcl=thv0lcl, + thlsrc=thlsrc, + qtsrc=qtsrc, + ese=self.ese, + esx=self.esx, + umf_out=umf_out, + qtflx_out=qtflx_out, + slflx_out=slflx_out, + uflx_out=uflx_out, + vflx_out=vflx_out, + cin_IJ=cin_IJ, + cinlcl_IJ=cinlcl_IJ, + plfc_IJ=plfc_IJ, + klfc_IJ=klfc_IJ, + plfc=plfc, + klfc=klfc, + cin=cin, + thvubot=thvubot, + thvutop=thvutop, + k0=k0, + iteration=iter_test, + rbuoy=rbuoy, + rkfre=rkfre, + tkeavg=tkeavg, + epsvarw=epsvarw, + thvlmin=thvlmin, + usrc=usrc, + vsrc=vsrc, + dotransport=dotransport, + trsrc=trsrc, + trsrc_o=trsrc_o, + cin_i=cin_i, + cinlcl_i=cinlcl_i, + ke=ke, + kinv_o=kinv_o, + klcl_o=klcl_o, + klfc_o=klfc_o, + plcl_o=plcl_o, + plfc_o=plfc_o, + tkeavg_o=tkeavg_o, + thvlmin_o=thvlmin_o, + qtsrc_o=qtsrc_o, + thvlsrc_o=thvlsrc_o, + thlsrc_o=thlsrc_o, + usrc_o=usrc_o, + vsrc_o=vsrc_o, + thv0lcl_o=thv0lcl_o, + cinlcl=cinlcl, + cush_inout=cush_inout, + ) + + return { + "cin_i": cin_i.view[:], + "cinlcl_i": cinlcl_i.view[:], + "ke": ke.view[:], + "kinv_o": kinv_o.view[:], # kinv_o will fail by 1 + "klfc_o": klfc_o.view[:], # klfc_o will fail by 1 + "plcl_o": plcl_o.view[:], + "plfc_o": plfc_o.view[:], + "qtsrc_o": qtsrc_o.view[:], + "thlsrc_o": thlsrc_o.view[:], + "thvlmin_o": thvlmin_o.view[:], + "thv0lcl_o": thv0lcl_o.view[:], + "tkeavg_o": tkeavg_o.view[:], + "trsrc_o": trsrc_o.view[:], + "usrc_o": usrc_o.view[:], + "vsrc_o": vsrc_o.view[:], + } diff --git a/GEOSagcm_GridComp/GEOSphysics_GridComp/GEOSmoist_GridComp/pyMoist/tests/savepoint/UW_translate_tests/translate_compute_del_CIN.py b/GEOSagcm_GridComp/GEOSphysics_GridComp/GEOSmoist_GridComp/pyMoist/tests/savepoint/UW_translate_tests/translate_compute_del_CIN.py new file mode 100644 index 000000000..78251d009 --- /dev/null +++ b/GEOSagcm_GridComp/GEOSphysics_GridComp/GEOSmoist_GridComp/pyMoist/tests/savepoint/UW_translate_tests/translate_compute_del_CIN.py @@ -0,0 +1,160 @@ +from f90nml import Namelist +from gt4py.cartesian.gtscript import int32 + +import pyMoist.constants as constants +from ndsl import StencilFactory +from ndsl.constants import X_DIM, Y_DIM, Z_DIM +from ndsl.dsl.typing import Float, Int +from ndsl.stencils.testing.grid import Grid +from ndsl.stencils.testing.translate import TranslateFortranData2Py +from ndsl.utils import safe_assign_array +from pyMoist.UW.compute_uwshcu import compute_del_CIN +from pyMoist.UW.config import UWConfiguration + + +class TranslateComputeDelCIN(TranslateFortranData2Py): + def __init__( + self, + grid: Grid, + namelist: Namelist, + stencil_factory: StencilFactory, + # UW_config: UWConfiguration, + ): + super().__init__(grid, stencil_factory) + self.stencil_factory = stencil_factory + self.quantity_factory = grid.quantity_factory + # self.UW_config = UW_config + + self._compute_delCIN = self.stencil_factory.from_dims_halo( + func=compute_del_CIN, + compute_dims=[X_DIM, Y_DIM, Z_DIM], + externals={"ncnst": 23}, + ) + + # FloatField Inputs + self.in_vars["data_vars"] = { + "condensation": {}, + "cin_i": {}, + "cinlcl_i": {}, + "cin": {}, + "cinlcl": {}, + } + + # Float/Int Inputs + self.in_vars["parameters"] = [ + "dotransport", + "ncnst", + "k0", + "tr0", + "windsrcavg", + "qtsrchgt", + "qtsrc_fac", + "thlsrc_fac", + "frc_rasn", + "rbuoy", + "epsvarw", + "use_CINcin", + "mumin1", + "rmaxfrac", + "PGFc", + "niter_xc", + "criqc", + "rle", + "cridist_opt", + "mixscale", + "rkm", + "dt", + "detrhgt", + "rdrag", + "use_self_detrain", + "detrhgt", + "use_cumpenent", + "rpen", + "use_momenflx", + "rdrop", + "iter_cin", + ] + + # FloatField Outputs + self.out_vars = { + "del_CIN": self.grid.compute_dict(), + } + + def compute(self, inputs): + self.UW_config = UWConfiguration(Int(inputs["ncnst"]), Int(inputs["k0"]), Int(inputs["windsrcavg"])) + + self.quantity_factory.add_data_dimensions( + { + "ntracers": constants.NCNST, + } + ) + + # Float/Int Inputs + dotransport = Int(inputs["dotransport"]) + k0 = Int(inputs["k0"]) + windsrcavg = Int(inputs["windsrcavg"]) + qtsrchgt = Float(inputs["qtsrchgt"]) + qtsrc_fac = Float(inputs["qtsrc_fac"]) + thlsrc_fac = Float(inputs["thlsrc_fac"]) + frc_rasn = Float(inputs["frc_rasn"]) + rbuoy = Float(inputs["rbuoy"]) + epsvarw = Float(inputs["epsvarw"]) + use_CINcin = Int(inputs["use_CINcin"]) + mumin1 = Float(inputs["mumin1"]) + rmaxfrac = Float(inputs["rmaxfrac"]) + PGFc = Float(inputs["PGFc"]) + dt = Float(inputs["dt"]) + niter_xc = Int(inputs["niter_xc"]) + criqc = Float(inputs["criqc"]) + rle = Float(inputs["rle"]) + cridist_opt = Int(inputs["cridist_opt"]) + mixscale = Float(inputs["mixscale"]) + rdrag = Float(inputs["rdrag"]) + rkm = Float(inputs["rkm"]) + use_self_detrain = Int(inputs["use_self_detrain"]) + detrhgt = Float(inputs["detrhgt"]) + use_cumpenent = Int(inputs["use_cumpenent"]) + rpen = Float(inputs["rpen"]) + use_momenflx = Int(inputs["use_momenflx"]) + rdrop = Float(inputs["rdrop"]) + iter_cin = Int(inputs["iter_cin"]) + + # Inputs + condensation = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM], units="n/a", dtype=bool) + + for i in range(0, 24): + for j in range(0, 24): + if inputs["condensation"][i, j] == 1: + condensation.view[i, j] = False + else: + condensation.view[i, j] = True + + cin = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM], units="n/a") + safe_assign_array(cin.view[:], inputs["cin"]) + cinlcl = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM], units="n/a") + safe_assign_array(cinlcl.view[:], inputs["cinlcl"]) + cin_i = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM], units="n/a") + safe_assign_array(cin_i.view[:], inputs["cin_i"]) + cinlcl_i = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM], units="n/a") + safe_assign_array(cinlcl_i.view[:], inputs["cinlcl_i"]) + + # Outputs + del_CIN = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM], units="n/a") + + # The iteration you want to test + iter_test = int32(1) + + # # Call stencils + self._compute_delCIN( + condensation=condensation, + cin_IJ=cin, + cinlcl_IJ=cinlcl, + cin_i=cin_i, + cinlcl_i=cinlcl_i, + use_CINcin=use_CINcin, + del_CIN=del_CIN, + ) + + return { + "del_CIN": del_CIN.view[:], + } diff --git a/GEOSagcm_GridComp/GEOSphysics_GridComp/GEOSmoist_GridComp/pyMoist/tests/savepoint/UW_translate_tests/translate_compute_diagnostic_outputs.py b/GEOSagcm_GridComp/GEOSphysics_GridComp/GEOSmoist_GridComp/pyMoist/tests/savepoint/UW_translate_tests/translate_compute_diagnostic_outputs.py new file mode 100644 index 000000000..bdeebd846 --- /dev/null +++ b/GEOSagcm_GridComp/GEOSphysics_GridComp/GEOSmoist_GridComp/pyMoist/tests/savepoint/UW_translate_tests/translate_compute_diagnostic_outputs.py @@ -0,0 +1,199 @@ +from f90nml import Namelist +from gt4py.cartesian.gtscript import int32 + +import pyMoist.constants as constants +from ndsl import StencilFactory +from ndsl.constants import X_DIM, Y_DIM, Z_DIM, Z_INTERFACE_DIM +from ndsl.dsl.typing import Float, Int +from ndsl.stencils.testing.grid import Grid +from ndsl.stencils.testing.translate import TranslateFortranData2Py +from ndsl.utils import safe_assign_array +from pyMoist.saturation_tables import get_saturation_vapor_pressure_table +from pyMoist.UW.compute_uwshcu import compute_diagnostic_outputs +from pyMoist.UW.config import UWConfiguration + + +class TranslateComputeDiagnosticOutputs(TranslateFortranData2Py): + def __init__( + self, + grid: Grid, + namelist: Namelist, + stencil_factory: StencilFactory, + # UW_config: UWConfiguration, + ): + super().__init__(grid, stencil_factory) + self.stencil_factory = stencil_factory + self.quantity_factory = grid.quantity_factory + # self.UW_config = UW_config + + self._compute_diagnostic_outputs = self.stencil_factory.from_dims_halo( + func=compute_diagnostic_outputs, + compute_dims=[X_DIM, Y_DIM, Z_DIM], + externals={"ncnst": 23}, + ) + + # FloatField Inputs + self.in_vars["data_vars"] = { + "condensation": {}, + "prel": {}, + "qtu": {}, + "thlu": {}, + "krel": {}, + } + + # Float/Int Inputs + self.in_vars["parameters"] = [ + "dotransport", + "ncnst", + "k0", + "tr0", + "windsrcavg", + "qtsrchgt", + "qtsrc_fac", + "thlsrc_fac", + "frc_rasn", + "rbuoy", + "epsvarw", + "use_CINcin", + "mumin1", + "rmaxfrac", + "PGFc", + "niter_xc", + "criqc", + "rle", + "cridist_opt", + "mixscale", + "rkm", + "dt", + "detrhgt", + "rdrag", + "use_self_detrain", + "detrhgt", + "use_cumpenent", + "rpen", + "use_momenflx", + "rdrop", + "iter_cin", + ] + + # FloatField Outputs + self.out_vars = { + "qcubelow": self.grid.compute_dict(), + "qiubelow": self.grid.compute_dict(), + "qlubelow": self.grid.compute_dict(), + "rcwp": self.grid.compute_dict(), + "riwp": self.grid.compute_dict(), + "rlwp": self.grid.compute_dict(), + } + + def compute(self, inputs): + self.UW_config = UWConfiguration(Int(inputs["ncnst"]), Int(inputs["k0"]), Int(inputs["windsrcavg"])) + + self.quantity_factory.add_data_dimensions( + { + "ntracers": constants.NCNST, + } + ) + + # Float/Int Inputs + dotransport = Int(inputs["dotransport"]) + k0 = Int(inputs["k0"]) + windsrcavg = Int(inputs["windsrcavg"]) + qtsrchgt = Float(inputs["qtsrchgt"]) + qtsrc_fac = Float(inputs["qtsrc_fac"]) + thlsrc_fac = Float(inputs["thlsrc_fac"]) + frc_rasn = Float(inputs["frc_rasn"]) + rbuoy = Float(inputs["rbuoy"]) + epsvarw = Float(inputs["epsvarw"]) + use_CINcin = Int(inputs["use_CINcin"]) + mumin1 = Float(inputs["mumin1"]) + rmaxfrac = Float(inputs["rmaxfrac"]) + PGFc = Float(inputs["PGFc"]) + dt = Float(inputs["dt"]) + niter_xc = Int(inputs["niter_xc"]) + criqc = Float(inputs["criqc"]) + rle = Float(inputs["rle"]) + cridist_opt = Int(inputs["cridist_opt"]) + mixscale = Float(inputs["mixscale"]) + rdrag = Float(inputs["rdrag"]) + rkm = Float(inputs["rkm"]) + use_self_detrain = Int(inputs["use_self_detrain"]) + detrhgt = Float(inputs["detrhgt"]) + use_cumpenent = Int(inputs["use_cumpenent"]) + rpen = Float(inputs["rpen"]) + use_momenflx = Int(inputs["use_momenflx"]) + rdrop = Float(inputs["rdrop"]) + iter_cin = Int(inputs["iter_cin"]) + + # Inputs + condensation = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM], units="n/a", dtype=bool) + + for i in range(0, 24): + for j in range(0, 24): + if inputs["condensation"][i, j] == 1: + condensation.view[i, j] = False + else: + condensation.view[i, j] = True + + prel = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + safe_assign_array(prel.view[:], inputs["prel"]) + qtu = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_INTERFACE_DIM], units="n/a") + safe_assign_array(qtu.view[:], inputs["qtu"]) + thlu = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_INTERFACE_DIM], units="n/a") + safe_assign_array(thlu.view[:], inputs["thlu"]) + krel = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a", dtype=Int) + safe_assign_array(krel.view[:], inputs["krel"] - 1) + + # Outputs + qcubelow = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM], units="n/a") + qiubelow = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM], units="n/a") + qlubelow = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM], units="n/a") + rcwp = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM], units="n/a") + riwp = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM], units="n/a") + rlwp = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM], units="n/a") + + saturation_vapor_pressure_table = get_saturation_vapor_pressure_table(self.stencil_factory.backend) + self.ese = saturation_vapor_pressure_table.ese + self.esx = saturation_vapor_pressure_table.esx + + umf_out = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_INTERFACE_DIM], units="n/a") + qtflx_out = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_INTERFACE_DIM], units="n/a") + slflx_out = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_INTERFACE_DIM], units="n/a") + uflx_out = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_INTERFACE_DIM], units="n/a") + vflx_out = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_INTERFACE_DIM], units="n/a") + cush_inout = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM], units="n/a") + + # The iteration you want to test + iter_test = int32(0) + + # # Call stencils + self._compute_diagnostic_outputs( + condensation=condensation, + prel=prel, + thlu=thlu, + qtu=qtu, + krel=krel, + ese=self.ese, + esx=self.esx, + umf_out=umf_out, + qtflx_out=qtflx_out, + slflx_out=slflx_out, + uflx_out=uflx_out, + vflx_out=vflx_out, + qcubelow=qcubelow, + qlubelow=qlubelow, + qiubelow=qiubelow, + rcwp=rcwp, + rlwp=rlwp, + riwp=riwp, + cush_inout=cush_inout, + ) + + return { + "qcubelow": qcubelow.view[:], + "qiubelow": qiubelow.view[:], + "qlubelow": qlubelow.view[:], + "rcwp": rcwp.view[:], + "riwp": riwp.view[:], + "rlwp": rlwp.view[:], + } diff --git a/GEOSagcm_GridComp/GEOSphysics_GridComp/GEOSmoist_GridComp/pyMoist/tests/savepoint/UW_translate_tests/translate_compute_uwshcu_invert_after.py b/GEOSagcm_GridComp/GEOSphysics_GridComp/GEOSmoist_GridComp/pyMoist/tests/savepoint/UW_translate_tests/translate_compute_uwshcu_invert_after.py new file mode 100644 index 000000000..3b51a4a90 --- /dev/null +++ b/GEOSagcm_GridComp/GEOSphysics_GridComp/GEOSmoist_GridComp/pyMoist/tests/savepoint/UW_translate_tests/translate_compute_uwshcu_invert_after.py @@ -0,0 +1,337 @@ +from f90nml import Namelist +from gt4py.cartesian.gtscript import int32 + +import pyMoist.constants as constants +from ndsl import StencilFactory +from ndsl.constants import X_DIM, Y_DIM, Z_DIM, Z_INTERFACE_DIM +from ndsl.dsl.typing import Float, Int +from ndsl.stencils.testing.grid import Grid +from ndsl.stencils.testing.translate import TranslateFortranData2Py +from ndsl.utils import safe_assign_array +from pyMoist.UW.compute_uwshcu import compute_uwshcu_invert_after +from pyMoist.UW.config import UWConfiguration + + +class TranslateComputeUwshcuInvertAfter(TranslateFortranData2Py): + def __init__( + self, + grid: Grid, + namelist: Namelist, + stencil_factory: StencilFactory, + # UW_config: UWConfiguration, + ): + super().__init__(grid, stencil_factory) + self.stencil_factory = stencil_factory + self.quantity_factory = grid.quantity_factory + # self.UW_config = UW_config + + self._invert_after = self.stencil_factory.from_dims_halo( + func=compute_uwshcu_invert_after, + compute_dims=[X_DIM, Y_DIM, Z_DIM], + externals={"ncnst": 23}, + ) + + # FloatField Inputs + self.in_vars["data_vars"] = { + "cnvtr": {}, + "cufrc_out": {}, + "cush_inout": {}, + "dcm_out": {}, + "evap": {}, + "fdr_out": {}, + "fer_out": {}, + "ndrop_out": {}, + "nice_out": {}, + "qidet_out": {}, + "qisub_out": {}, + "qiten_out": {}, + "qlten_out": {}, + "qldet_out": {}, + "qlsub_out": {}, + "qtflx_out": {}, + "slflx_out": {}, + "tr0_inout": {}, + "uflx_out": {}, + "vflx_out": {}, + "qpert_out": {}, + "qrten_out": {}, + "qsten_out": {}, + "qvten_out": {}, + "shfx": {}, + "sten_out": {}, + "tpert_out": {}, + "uten_out": {}, + "vten_out": {}, + "umf_out": {}, + } + + # Float/Int Inputs + self.in_vars["parameters"] = [ + "dotransport", + "ncnst", + "k0", + "tr0", + "windsrcavg", + "qtsrchgt", + "qtsrc_fac", + "thlsrc_fac", + "frc_rasn", + "rbuoy", + "epsvarw", + "use_CINcin", + "mumin1", + "rmaxfrac", + "PGFc", + "niter_xc", + "criqc", + "rle", + "cridist_opt", + "mixscale", + "rkm", + "dt", + "detrhgt", + "rdrag", + "use_self_detrain", + "detrhgt", + "use_cumpenent", + "rpen", + "use_momenflx", + "rdrop", + "iter_cin", + ] + + # FloatField Outputs + self.out_vars = { + "cufrc_inv": self.grid.compute_dict(), + "cush": self.grid.compute_dict(), + "dcm_inv": self.grid.compute_dict(), + "dotransport": self.grid.compute_dict(), + "fdr_inv": self.grid.compute_dict(), + "fer_inv": self.grid.compute_dict(), + "qidet_inv": self.grid.compute_dict(), + "qisub_inv": self.grid.compute_dict(), + "qiten_inv": self.grid.compute_dict(), + "qldet_inv": self.grid.compute_dict(), + "qlsub_inv": self.grid.compute_dict(), + "qlten_inv": self.grid.compute_dict(), + "qrten_inv": self.grid.compute_dict(), + "qsten_inv": self.grid.compute_dict(), + "qtflx_inv": self.grid.compute_dict(), + "slflx_inv": self.grid.compute_dict(), + "tten_inv": self.grid.compute_dict(), + "qvten_inv": self.grid.compute_dict(), + "uflx_inv": self.grid.compute_dict(), + "vflx_inv": self.grid.compute_dict(), + "ndrop_inv": self.grid.compute_dict(), + "nice_inv": self.grid.compute_dict(), + "umf_inv": self.grid.compute_dict(), + "uten_inv": self.grid.compute_dict(), + "vten_inv": self.grid.compute_dict(), + } + + def compute(self, inputs): + self.UW_config = UWConfiguration(Int(inputs["ncnst"]), Int(inputs["k0"]), Int(inputs["windsrcavg"])) + + self.quantity_factory.add_data_dimensions( + { + "ntracers": constants.NCNST, + } + ) + + # Float/Int Inputs + dotransport = Int(inputs["dotransport"]) + k0 = Int(inputs["k0"]) + windsrcavg = Int(inputs["windsrcavg"]) + qtsrchgt = Float(inputs["qtsrchgt"]) + qtsrc_fac = Float(inputs["qtsrc_fac"]) + thlsrc_fac = Float(inputs["thlsrc_fac"]) + frc_rasn = Float(inputs["frc_rasn"]) + rbuoy = Float(inputs["rbuoy"]) + epsvarw = Float(inputs["epsvarw"]) + use_CINcin = Int(inputs["use_CINcin"]) + mumin1 = Float(inputs["mumin1"]) + rmaxfrac = Float(inputs["rmaxfrac"]) + PGFc = Float(inputs["PGFc"]) + dt = Float(inputs["dt"]) + niter_xc = Int(inputs["niter_xc"]) + criqc = Float(inputs["criqc"]) + rle = Float(inputs["rle"]) + cridist_opt = Int(inputs["cridist_opt"]) + mixscale = Float(inputs["mixscale"]) + rdrag = Float(inputs["rdrag"]) + rkm = Float(inputs["rkm"]) + use_self_detrain = Int(inputs["use_self_detrain"]) + detrhgt = Float(inputs["detrhgt"]) + use_cumpenent = Int(inputs["use_cumpenent"]) + rpen = Float(inputs["rpen"]) + use_momenflx = Int(inputs["use_momenflx"]) + rdrop = Float(inputs["rdrop"]) + iter_cin = Int(inputs["iter_cin"]) + + # Inputs + fdr_out = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + safe_assign_array(fdr_out.view[:], inputs["fdr_out"]) + fer_out = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + safe_assign_array(fer_out.view[:], inputs["fer_out"]) + qiten_out = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + safe_assign_array(qiten_out.view[:], inputs["qiten_out"]) + qlten_out = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + safe_assign_array(qlten_out.view[:], inputs["qlten_out"]) + qtflx_out = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_INTERFACE_DIM], units="n/a") + safe_assign_array(qtflx_out.view[:], inputs["qtflx_out"]) + slflx_out = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_INTERFACE_DIM], units="n/a") + safe_assign_array(slflx_out.view[:], inputs["slflx_out"]) + tr0_inout = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM, "ntracers"], units="n/a") + safe_assign_array(tr0_inout.view[:], inputs["tr0_inout"]) + uflx_out = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_INTERFACE_DIM], units="n/a") + safe_assign_array(uflx_out.view[:], inputs["uflx_out"]) + vflx_out = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_INTERFACE_DIM], units="n/a") + safe_assign_array(vflx_out.view[:], inputs["vflx_out"]) + cush_inout = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM], units="n/a") + safe_assign_array(cush_inout.view[:], inputs["cush_inout"]) + ndrop_out = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + safe_assign_array(ndrop_out.view[:], inputs["ndrop_out"]) + nice_out = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + safe_assign_array(nice_out.view[:], inputs["nice_out"]) + umf_out = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_INTERFACE_DIM], units="n/a") + safe_assign_array(umf_out.view[:], inputs["umf_out"]) + dcm_out = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + safe_assign_array(dcm_out.view[:], inputs["dcm_out"]) + qvten_out = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + safe_assign_array(qvten_out.view[:], inputs["qvten_out"]) + sten_out = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + safe_assign_array(sten_out.view[:], inputs["sten_out"]) + uten_out = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + safe_assign_array(uten_out.view[:], inputs["uten_out"]) + vten_out = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + safe_assign_array(vten_out.view[:], inputs["vten_out"]) + qrten_out = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + safe_assign_array(qrten_out.view[:], inputs["qrten_out"]) + qsten_out = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + safe_assign_array(qsten_out.view[:], inputs["qsten_out"]) + cufrc_out = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + safe_assign_array(cufrc_out.view[:], inputs["cufrc_out"]) + qldet_out = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + safe_assign_array(qldet_out.view[:], inputs["qldet_out"]) + qidet_out = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + safe_assign_array(qidet_out.view[:], inputs["qidet_out"]) + qlsub_out = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + safe_assign_array(qlsub_out.view[:], inputs["qlsub_out"]) + qisub_out = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + safe_assign_array(qisub_out.view[:], inputs["qisub_out"]) + + # Outputs + fdr_inv = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + fer_inv = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + qidet_inv = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + qisub_inv = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + qldet_inv = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + qlsub_inv = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + qtflx_inv = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_INTERFACE_DIM], units="n/a") + slflx_inv = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_INTERFACE_DIM], units="n/a") + tr0 = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM, "ntracers"], units="n/a") + uflx_inv = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_INTERFACE_DIM], units="n/a") + vflx_inv = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_INTERFACE_DIM], units="n/a") + ndrop_inv = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + nice_inv = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + umf_inv = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_INTERFACE_DIM], units="n/a") + dcm_inv = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + qvten_inv = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + qlten_inv = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + qiten_inv = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + tten_inv = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + uten_inv = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + vten_inv = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + qrten_inv = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + qsten_inv = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + cufrc_inv = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + cnvtr = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM, "ntracers"], units="n/a") + cush = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM], units="n/a") + # The iteration you want to test + iter_test = int32(0) + + # # Call stencils + self._invert_after( + k0=k0, + umf_outvar=umf_out, + qtflx_outvar=qtflx_out, + slflx_outvar=slflx_out, + uflx_outvar=uflx_out, + vflx_outvar=vflx_out, + dcm_outvar=dcm_out, + qvten_outvar=qvten_out, + qlten_outvar=qlten_out, + qiten_outvar=qiten_out, + sten_outvar=sten_out, + uten_outvar=uten_out, + vten_outvar=vten_out, + qrten_outvar=qrten_out, + qsten_outvar=qsten_out, + cufrc_outvar=cufrc_out, + qldet_outvar=qldet_out, + qidet_outvar=qidet_out, + qlsub_outvar=qlsub_out, + qisub_outvar=qisub_out, + fer_outvar=fer_out, + fdr_outvar=fdr_out, + ndrop_out=ndrop_out, + nice_out=nice_out, + tr0=tr0, + tr0_inoutvar=tr0_inout, + cush_inoutvar=cush_inout, + # Outputs + umf_inv=umf_inv, + dcm_inv=dcm_inv, + qtflx_inv=qtflx_inv, + slflx_inv=slflx_inv, + uflx_inv=uflx_inv, + vflx_inv=vflx_inv, + qvten_inv=qvten_inv, + qlten_inv=qlten_inv, + qiten_inv=qiten_inv, + tten_inv=tten_inv, + uten_inv=uten_inv, + vten_inv=vten_inv, + qrten_inv=qrten_inv, + qsten_inv=qsten_inv, + cufrc_inv=cufrc_inv, + fer_inv=fer_inv, + fdr_inv=fdr_inv, + ndrop_inv=ndrop_inv, + nice_inv=nice_inv, + qldet_inv=qldet_inv, + qlsub_inv=qlsub_inv, + qidet_inv=qidet_inv, + qisub_inv=qisub_inv, + CNV_Tracers=cnvtr, + dotransport=dotransport, + cush=cush, + ) + + return { + "cufrc_inv": cufrc_inv.view[:], + "cush": cush.view[:], + "dcm_inv": dcm_inv.view[:], + "dotransport": dotransport, + "fdr_inv": fdr_inv.view[:], + "fer_inv": fer_inv.view[:], + "qidet_inv": qidet_inv.view[:], + "qisub_inv": qisub_inv.view[:], + "qiten_inv": qiten_inv.view[:], + "qldet_inv": qldet_inv.view[:], + "qlsub_inv": qlsub_inv.view[:], + "qlten_inv": qlten_inv.view[:], + "qrten_inv": qrten_inv.view[:], + "qsten_inv": qsten_inv.view[:], + "qtflx_inv": qtflx_inv.view[:], + "slflx_inv": slflx_inv.view[:], + "tten_inv": tten_inv.view[:], + "qvten_inv": qvten_inv.view[:], + "uflx_inv": uflx_inv.view[:], + "vflx_inv": vflx_inv.view[:], + "ndrop_inv": ndrop_inv.view[:], + "nice_inv": nice_inv.view[:], + "umf_inv": umf_inv.view[:], + "uten_inv": uten_inv.view[:], + "vten_inv": vten_inv.view[:], + } diff --git a/GEOSagcm_GridComp/GEOSphysics_GridComp/GEOSmoist_GridComp/pyMoist/tests/savepoint/UW_translate_tests/translate_define_env_properties.py b/GEOSagcm_GridComp/GEOSphysics_GridComp/GEOSmoist_GridComp/pyMoist/tests/savepoint/UW_translate_tests/translate_define_env_properties.py new file mode 100644 index 000000000..5a5ecb447 --- /dev/null +++ b/GEOSagcm_GridComp/GEOSphysics_GridComp/GEOSmoist_GridComp/pyMoist/tests/savepoint/UW_translate_tests/translate_define_env_properties.py @@ -0,0 +1,303 @@ +from f90nml import Namelist +from gt4py.cartesian.gtscript import int32 + +import pyMoist.constants as constants +from ndsl import StencilFactory +from ndsl.constants import X_DIM, Y_DIM, Z_DIM, Z_INTERFACE_DIM +from ndsl.dsl.typing import Float, Int +from ndsl.stencils.testing.grid import Grid +from ndsl.stencils.testing.translate import TranslateFortranData2Py +from ndsl.utils import safe_assign_array +from pyMoist.saturation_tables import get_saturation_vapor_pressure_table +from pyMoist.UW.compute_uwshcu import define_env_properties +from pyMoist.UW.config import UWConfiguration + + +# Dev NOTE: The data for this translate test comes from combining two files in +# a single nc file using the following NCO tool: +# `ncks -A ComputeUwshcu-In.nc DefineEnvProperties-In.nc` + + +class TranslateDefineEnvProperties(TranslateFortranData2Py): + def __init__( + self, + grid: Grid, + namelist: Namelist, + stencil_factory: StencilFactory, + # UW_config: UWConfiguration, + ): + super().__init__(grid, stencil_factory) + self.stencil_factory = stencil_factory + self.quantity_factory = grid.quantity_factory + # self.UW_config = UW_config + + self._define_env_properties = self.stencil_factory.from_dims_halo( + func=define_env_properties, + compute_dims=[X_DIM, Y_DIM, Z_DIM], + externals={"ncnst": 23}, + ) + + # FloatField Inputs + self.in_vars["data_vars"] = { + "condensation": {}, + "kinv": {}, + "krel": {}, + "pifc0": {}, + "pmid0": {}, + "prel": {}, + "qt0": {}, + "ssqt0": {}, + "ssthl0": {}, + "sstr0": {}, + "ssu0": {}, + "ssv0": {}, + "thl0": {}, + "trsrc": {}, + "u0": {}, + "v0": {}, + "usrc": {}, + "vsrc": {}, + "thv0rel": {}, + "tr0_DefineEnvProperties": {}, + "uu": {}, + "vu": {}, + } + + # Float/Int Inputs + self.in_vars["parameters"] = [ + "dotransport", + "ncnst", + "k0", + "tr0", + "windsrcavg", + "qtsrchgt", + "qtsrc_fac", + "thlsrc_fac", + "frc_rasn", + "rbuoy", + "epsvarw", + "use_CINcin", + "mumin1", + "rmaxfrac", + "PGFc", + "niter_xc", + "criqc", + "rle", + "cridist_opt", + "mixscale", + "rkm", + "dt", + "detrhgt", + "rdrag", + "use_self_detrain", + "detrhgt", + "use_cumpenent", + "rpen", + "use_momenflx", + "rdrop", + "iter_cin", + ] + + # FloatField Outputs + self.out_vars = { + "dpe": self.grid.compute_dict(), + "exne": self.grid.compute_dict(), + "pe": self.grid.compute_dict(), + "qsat_pe": self.grid.compute_dict(), + "qte": self.grid.compute_dict(), + "thle": self.grid.compute_dict(), + "thvebot": self.grid.compute_dict(), + "tre": self.grid.compute_dict(), + "tru": self.grid.compute_dict(), + "ue": self.grid.compute_dict(), + "uplus": self.grid.compute_dict(), + "uu": self.grid.compute_dict(), + "ve": self.grid.compute_dict(), + "vplus": self.grid.compute_dict(), + "vu": self.grid.compute_dict(), + } + + def compute(self, inputs): + self.UW_config = UWConfiguration(Int(inputs["ncnst"]), Int(inputs["k0"]), Int(inputs["windsrcavg"])) + + self.quantity_factory.add_data_dimensions( + { + "ntracers": constants.NCNST, + } + ) + + # Float/Int Inputs + dotransport = Int(inputs["dotransport"]) + k0 = Int(inputs["k0"]) + windsrcavg = Int(inputs["windsrcavg"]) + qtsrchgt = Float(inputs["qtsrchgt"]) + qtsrc_fac = Float(inputs["qtsrc_fac"]) + thlsrc_fac = Float(inputs["thlsrc_fac"]) + frc_rasn = Float(inputs["frc_rasn"]) + rbuoy = Float(inputs["rbuoy"]) + epsvarw = Float(inputs["epsvarw"]) + use_CINcin = Int(inputs["use_CINcin"]) + mumin1 = Float(inputs["mumin1"]) + rmaxfrac = Float(inputs["rmaxfrac"]) + PGFc = Float(inputs["PGFc"]) + dt = Float(inputs["dt"]) + niter_xc = Int(inputs["niter_xc"]) + criqc = Float(inputs["criqc"]) + rle = Float(inputs["rle"]) + cridist_opt = Int(inputs["cridist_opt"]) + mixscale = Float(inputs["mixscale"]) + rdrag = Float(inputs["rdrag"]) + rkm = Float(inputs["rkm"]) + use_self_detrain = Int(inputs["use_self_detrain"]) + detrhgt = Float(inputs["detrhgt"]) + use_cumpenent = Int(inputs["use_cumpenent"]) + rpen = Float(inputs["rpen"]) + use_momenflx = Int(inputs["use_momenflx"]) + rdrop = Float(inputs["rdrop"]) + iter_cin = Int(inputs["iter_cin"]) + + # Field inputs + condensation = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM], units="n/a", dtype=bool) + + for i in range(0, 24): + for j in range(0, 24): + if inputs["condensation"][i, j] == 1: + condensation.view[i, j] = False + else: + condensation.view[i, j] = True + + kinv = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a", dtype=Int) + safe_assign_array(kinv.view[:], inputs["kinv"]) + krel = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a", dtype=Int) + safe_assign_array(krel.view[:], inputs["krel"] - 1) + pifc0 = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_INTERFACE_DIM], units="n/a") + safe_assign_array(pifc0.view[:], inputs["pifc0"]) + pmid0 = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + safe_assign_array(pmid0.view[:], inputs["pmid0"]) + prel = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + safe_assign_array(prel.view[:], inputs["prel"]) + qt0 = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + safe_assign_array(qt0.view[:], inputs["qt0"]) + ssqt0 = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + safe_assign_array(ssqt0.view[:], inputs["ssqt0"]) + ssthl0 = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + safe_assign_array(ssthl0.view[:], inputs["ssthl0"]) + sstr0 = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM, "ntracers"], units="n/a") + safe_assign_array(sstr0.view[:], inputs["sstr0"]) + ssu0 = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + safe_assign_array(ssu0.view[:], inputs["ssu0"]) + ssv0 = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + safe_assign_array(ssv0.view[:], inputs["ssv0"]) + thl0 = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + safe_assign_array(thl0.view[:], inputs["thl0"]) + trsrc = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, "ntracers"], units="n/a") + safe_assign_array(trsrc.view[:], inputs["trsrc"]) + u0 = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + safe_assign_array(u0.view[:], inputs["u0"]) + v0 = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + safe_assign_array(v0.view[:], inputs["v0"]) + usrc = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + safe_assign_array(usrc.view[:], inputs["usrc"]) + vsrc = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + safe_assign_array(vsrc.view[:], inputs["vsrc"]) + thv0rel = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + safe_assign_array(thv0rel.view[:], inputs["thv0rel"]) + tr0 = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM, "ntracers"], units="n/a") + safe_assign_array(tr0.view[:], inputs["tr0_DefineEnvProperties"]) + uu = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_INTERFACE_DIM], units="n/a") + safe_assign_array(uu.view[:], inputs["uu"]) + vu = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_INTERFACE_DIM], units="n/a") + safe_assign_array(vu.view[:], inputs["vu"]) + # Outputs + dpe = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM], units="n/a") + exne = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM], units="n/a") + pe = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM], units="n/a") + qsat_pe = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + qte = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM], units="n/a") + thle = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM], units="n/a") + thvebot = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM], units="n/a") + tre = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, "ntracers"], units="n/a") + tru = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_INTERFACE_DIM, "ntracers"], units="n/a") + ue = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM], units="n/a") + uplus = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM], units="n/a") + + ve = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM], units="n/a") + vplus = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM], units="n/a") + uplus_3D = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + vplus_3D = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + + saturation_vapor_pressure_table = get_saturation_vapor_pressure_table(self.stencil_factory.backend) + self.ese = saturation_vapor_pressure_table.ese + self.esx = saturation_vapor_pressure_table.esx + + umf_out = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_INTERFACE_DIM], units="n/a") + qtflx_out = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_INTERFACE_DIM], units="n/a") + slflx_out = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_INTERFACE_DIM], units="n/a") + uflx_out = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_INTERFACE_DIM], units="n/a") + vflx_out = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_INTERFACE_DIM], units="n/a") + cush_inout = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM], units="n/a") + + # The iteration you want to test + iter_test = int32(0) + + # # Call stencils + self._define_env_properties( + condensation=condensation, + iteration=iter_test, + krel=krel, + kinv=kinv, + PGFc=PGFc, + ssu0=ssu0, + ssv0=ssv0, + prel=prel, + pifc0=pifc0, + uu=uu, + vu=vu, + usrc=usrc, + vsrc=vsrc, + dotransport=dotransport, + tru=tru, + trsrc=trsrc, + thv0rel=thv0rel, + thl0=thl0, + ssthl0=ssthl0, + pmid0=pmid0, + qt0=qt0, + ssqt0=ssqt0, + u0=u0, + v0=v0, + tre=tre, + tr0=tr0, + sstr0=sstr0, + uplus=uplus, + vplus=vplus, + uplus_3D=uplus_3D, + vplus_3D=vplus_3D, + qsat_pe=qsat_pe, + pe=pe, + thle=thle, + qte=qte, + dpe=dpe, + exne=exne, + thvebot=thvebot, + ue=ue, + ve=ve, + ) + + return { + "dpe": dpe.view[:], + "exne": exne.view[:], + "pe": pe.view[:], + "qsat_pe": qsat_pe.view[:], + "qte": qte.view[:], + "thle": thle.view[:], + "thvebot": thvebot.view[:], + "tre": tre.view[:], + "tru": tru.view[:], + "ue": ue.view[:], + "uplus": uplus.view[:], + "uu": uu.view[:], + "ve": ve.view[:], + "vplus": vplus.view[:], + "vu": vu.view[:], + } diff --git a/GEOSagcm_GridComp/GEOSphysics_GridComp/GEOSmoist_GridComp/pyMoist/tests/savepoint/UW_translate_tests/translate_define_prel_cbmf.py b/GEOSagcm_GridComp/GEOSphysics_GridComp/GEOSmoist_GridComp/pyMoist/tests/savepoint/UW_translate_tests/translate_define_prel_cbmf.py new file mode 100644 index 000000000..c31b75354 --- /dev/null +++ b/GEOSagcm_GridComp/GEOSphysics_GridComp/GEOSmoist_GridComp/pyMoist/tests/savepoint/UW_translate_tests/translate_define_prel_cbmf.py @@ -0,0 +1,265 @@ +from f90nml import Namelist +from gt4py.cartesian.gtscript import int32 + +import pyMoist.constants as constants +from ndsl import StencilFactory +from ndsl.constants import X_DIM, Y_DIM, Z_DIM, Z_INTERFACE_DIM +from ndsl.dsl.typing import Float, Int +from ndsl.stencils.testing.grid import Grid +from ndsl.stencils.testing.translate import TranslateFortranData2Py +from ndsl.utils import safe_assign_array +from pyMoist.saturation_tables import get_saturation_vapor_pressure_table +from pyMoist.UW.compute_uwshcu import calc_cumulus_base_mass_flux, define_prel_krel +from pyMoist.UW.config import UWConfiguration + + +# Dev NOTE: The data for this translate test comes from combining two files in +# a single nc file using the following NCO tool: +# `ncks -A ComputeUwshcu-In.nc DefinePrelCbmf-In.nc` + + +class TranslateDefinePrelCbmf(TranslateFortranData2Py): + def __init__( + self, + grid: Grid, + namelist: Namelist, + stencil_factory: StencilFactory, + # UW_config: UWConfiguration, + ): + super().__init__(grid, stencil_factory) + self.stencil_factory = stencil_factory + self.quantity_factory = grid.quantity_factory + # self.UW_config = UW_config + + self._define_prel_krel = self.stencil_factory.from_dims_halo( + func=define_prel_krel, + compute_dims=[X_DIM, Y_DIM, Z_DIM], + externals={"ncnst": 23}, + ) + + self._calc_cbmf = self.stencil_factory.from_dims_halo( + func=calc_cumulus_base_mass_flux, + compute_dims=[X_DIM, Y_DIM, Z_DIM], + externals={"ncnst": 23}, + ) + + # FloatField Inputs + self.in_vars["data_vars"] = { + "condensation": {}, + "cin": {}, + "cinlcl": {}, + "dp0": {}, + "exnifc0": {}, + "kinv": {}, + "klcl": {}, + "pifc0": {}, + "plcl": {}, + "thv0bot": {}, + "thv0lcl": {}, + "thv0top": {}, + "tkeavg": {}, + "rkfre": {}, + } + + # Float/Int Inputs + self.in_vars["parameters"] = [ + "dotransport", + "ncnst", + "k0", + "tr0", + "windsrcavg", + "qtsrchgt", + "qtsrc_fac", + "thlsrc_fac", + "frc_rasn", + "rbuoy", + "epsvarw", + "use_CINcin", + "mumin1", + "rmaxfrac", + "PGFc", + "niter_xc", + "criqc", + "rle", + "cridist_opt", + "mixscale", + "rkm", + "dt", + "detrhgt", + "rdrag", + "use_self_detrain", + "detrhgt", + "use_cumpenent", + "rpen", + "use_momenflx", + "rdrop", + "iter_cin", + ] + + # FloatField Outputs + self.out_vars = { + "cbmf": self.grid.compute_dict(), + "krel": self.grid.compute_dict(), + "prel": self.grid.compute_dict(), + "thv0rel": self.grid.compute_dict(), + "ufrcinv": self.grid.compute_dict(), + "wcrit": self.grid.compute_dict(), + "winv": self.grid.compute_dict(), + } + + def compute(self, inputs): + self.UW_config = UWConfiguration(Int(inputs["ncnst"]), Int(inputs["k0"]), Int(inputs["windsrcavg"])) + + self.quantity_factory.add_data_dimensions( + { + "ntracers": constants.NCNST, + } + ) + + # Float/Int Inputs + dotransport = Int(inputs["dotransport"]) + k0 = Int(inputs["k0"]) + windsrcavg = Int(inputs["windsrcavg"]) + qtsrchgt = Float(inputs["qtsrchgt"]) + qtsrc_fac = Float(inputs["qtsrc_fac"]) + thlsrc_fac = Float(inputs["thlsrc_fac"]) + frc_rasn = Float(inputs["frc_rasn"]) + rbuoy = Float(inputs["rbuoy"]) + epsvarw = Float(inputs["epsvarw"]) + use_CINcin = Int(inputs["use_CINcin"]) + mumin1 = Float(inputs["mumin1"]) + rmaxfrac = Float(inputs["rmaxfrac"]) + PGFc = Float(inputs["PGFc"]) + dt = Float(inputs["dt"]) + niter_xc = Int(inputs["niter_xc"]) + criqc = Float(inputs["criqc"]) + rle = Float(inputs["rle"]) + cridist_opt = Int(inputs["cridist_opt"]) + mixscale = Float(inputs["mixscale"]) + rdrag = Float(inputs["rdrag"]) + rkm = Float(inputs["rkm"]) + use_self_detrain = Int(inputs["use_self_detrain"]) + detrhgt = Float(inputs["detrhgt"]) + use_cumpenent = Int(inputs["use_cumpenent"]) + rpen = Float(inputs["rpen"]) + use_momenflx = Int(inputs["use_momenflx"]) + rdrop = Float(inputs["rdrop"]) + iter_cin = Int(inputs["iter_cin"]) + + # Field inputs + condensation = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM], units="n/a", dtype=bool) + + for i in range(0, 24): + for j in range(0, 24): + if inputs["condensation"][i, j] == 1: + condensation.view[i, j] = False + else: + condensation.view[i, j] = True + + kinv = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a", dtype=Int) + safe_assign_array(kinv.view[:], inputs["kinv"]) + klcl = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a", dtype=Int) + safe_assign_array(klcl.view[:], inputs["klcl"] - 1) + cin = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM], units="n/a") + safe_assign_array(cin.view[:], inputs["cin"]) + cinlcl = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM], units="n/a") + safe_assign_array(cinlcl.view[:], inputs["cinlcl"]) + dp0 = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + safe_assign_array(dp0.view[:], inputs["dp0"]) + exnifc0 = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_INTERFACE_DIM], units="n/a") + safe_assign_array(exnifc0.view[:], inputs["exnifc0"]) + pifc0 = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_INTERFACE_DIM], units="n/a") + safe_assign_array(pifc0.view[:], inputs["pifc0"]) + plcl = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + safe_assign_array(plcl.view[:], inputs["plcl"]) + thv0bot = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + safe_assign_array(thv0bot.view[:], inputs["thv0bot"]) + thv0lcl = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + safe_assign_array(thv0lcl.view[:], inputs["thv0lcl"]) + thv0top = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + safe_assign_array(thv0top.view[:], inputs["thv0top"]) + tkeavg = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + safe_assign_array(tkeavg.view[:], inputs["tkeavg"]) + rkfre = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM], units="n/a") + safe_assign_array(rkfre.view[:], inputs["rkfre"]) + + # Outputs + cbmf = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + krel = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a", dtype=Int) + prel = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + thv0rel = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + ufrcinv = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + wcrit = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM], units="n/a") + winv = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + rho0inv = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + umf_out = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_INTERFACE_DIM], units="n/a") + qtflx_out = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_INTERFACE_DIM], units="n/a") + slflx_out = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_INTERFACE_DIM], units="n/a") + uflx_out = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_INTERFACE_DIM], units="n/a") + vflx_out = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_INTERFACE_DIM], units="n/a") + cush_inout = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM], units="n/a") + + saturation_vapor_pressure_table = get_saturation_vapor_pressure_table(self.stencil_factory.backend) + self.ese = saturation_vapor_pressure_table.ese + self.esx = saturation_vapor_pressure_table.esx + + stop_cin = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM], units="n/a", dtype=bool) + + # The iteration you want to test + iter_test = int32(0) + + # # Call stencils + self._define_prel_krel( + condensation=condensation, + iteration=iter_test, + klcl=klcl, + kinv=kinv, + pifc0=pifc0, + thv0bot=thv0bot, + plcl=plcl, + thv0lcl=thv0lcl, + krel=krel, + prel=prel, + thv0rel=thv0rel, + ) + + self._calc_cbmf( + condensation=condensation, + iteration=iter_test, + use_CINcin=use_CINcin, + cin_IJ=cin, + rbuoy=rbuoy, + cinlcl_IJ=cinlcl, + rkfre=rkfre, + tkeavg=tkeavg, + epsvarw=epsvarw, + umf_out=umf_out, + qtflx_out=qtflx_out, + slflx_out=slflx_out, + uflx_out=uflx_out, + vflx_out=vflx_out, + kinv=kinv, + pifc0=pifc0, + thv0top=thv0top, + exnifc0=exnifc0, + dp0=dp0, + dt=dt, + mumin1=mumin1, + rmaxfrac=rmaxfrac, + winv=winv, + cbmf=cbmf, + rho0inv=rho0inv, + ufrcinv=ufrcinv, + wcrit=wcrit, + cush_inout=cush_inout, + ) + + return { + "cbmf": cbmf.view[:], + "krel": krel.view[:], # krel will fail by 1 + "prel": prel.view[:], + "thv0rel": thv0rel.view[:], + "ufrcinv": ufrcinv.view[:], + "wcrit": wcrit.view[:], + "winv": winv.view[:], + } diff --git a/GEOSagcm_GridComp/GEOSphysics_GridComp/GEOSmoist_GridComp/pyMoist/tests/savepoint/UW_translate_tests/translate_define_updraft_properties.py b/GEOSagcm_GridComp/GEOSphysics_GridComp/GEOSmoist_GridComp/pyMoist/tests/savepoint/UW_translate_tests/translate_define_updraft_properties.py new file mode 100644 index 000000000..834f0c218 --- /dev/null +++ b/GEOSagcm_GridComp/GEOSphysics_GridComp/GEOSmoist_GridComp/pyMoist/tests/savepoint/UW_translate_tests/translate_define_updraft_properties.py @@ -0,0 +1,234 @@ +from f90nml import Namelist +from gt4py.cartesian.gtscript import int32 + +import pyMoist.constants as constants +from ndsl import StencilFactory +from ndsl.constants import X_DIM, Y_DIM, Z_DIM, Z_INTERFACE_DIM +from ndsl.dsl.typing import Float, Int +from ndsl.stencils.testing.grid import Grid +from ndsl.stencils.testing.translate import TranslateFortranData2Py +from ndsl.utils import safe_assign_array +from pyMoist.saturation_tables import get_saturation_vapor_pressure_table +from pyMoist.UW.compute_uwshcu import define_updraft_properties +from pyMoist.UW.config import UWConfiguration + + +# Dev NOTE: The data for this translate test comes from combining two files in +# a single nc file using the following NCO tool: +# `ncks -A ComputeUwshcu-In.nc DefineUpdraftProperties-In.nc` + + +class TranslateDefineUpdraftProperties(TranslateFortranData2Py): + def __init__( + self, + grid: Grid, + namelist: Namelist, + stencil_factory: StencilFactory, + # UW_config: UWConfiguration, + ): + super().__init__(grid, stencil_factory) + self.stencil_factory = stencil_factory + self.quantity_factory = grid.quantity_factory + # self.UW_config = UW_config + + self._define_updraft_properties = self.stencil_factory.from_dims_halo( + func=define_updraft_properties, + compute_dims=[X_DIM, Y_DIM, Z_DIM], + externals={"ncnst": 23}, + ) + + # FloatField Inputs + self.in_vars["data_vars"] = { + "cbmf": {}, + "cinlcl": {}, + "condensation": {}, + "kinv": {}, + "krel": {}, + "prel": {}, + "qtsrc": {}, + "rho0inv": {}, + "thlsrc": {}, + "winv": {}, + "thvu": {}, + } + + # Float/Int Inputs + self.in_vars["parameters"] = [ + "dotransport", + "ncnst", + "k0", + "tr0", + "windsrcavg", + "qtsrchgt", + "qtsrc_fac", + "thlsrc_fac", + "frc_rasn", + "rbuoy", + "epsvarw", + "use_CINcin", + "mumin1", + "rmaxfrac", + "PGFc", + "niter_xc", + "criqc", + "rle", + "cridist_opt", + "mixscale", + "rkm", + "dt", + "detrhgt", + "rdrag", + "use_self_detrain", + "detrhgt", + "use_cumpenent", + "rpen", + "use_momenflx", + "rdrop", + "iter_cin", + ] + + # FloatField Outputs + self.out_vars = { + "thvu_out": self.grid.compute_dict(), + "ufrc": self.grid.compute_dict(), + "ufrclcl": self.grid.compute_dict(), + } + + def compute(self, inputs): + self.UW_config = UWConfiguration(Int(inputs["ncnst"]), Int(inputs["k0"]), Int(inputs["windsrcavg"])) + + self.quantity_factory.add_data_dimensions( + { + "ntracers": constants.NCNST, + } + ) + + # Float/Int Inputs + dotransport = Int(inputs["dotransport"]) + k0 = Int(inputs["k0"]) + windsrcavg = Int(inputs["windsrcavg"]) + qtsrchgt = Float(inputs["qtsrchgt"]) + qtsrc_fac = Float(inputs["qtsrc_fac"]) + thlsrc_fac = Float(inputs["thlsrc_fac"]) + frc_rasn = Float(inputs["frc_rasn"]) + rbuoy = Float(inputs["rbuoy"]) + epsvarw = Float(inputs["epsvarw"]) + use_CINcin = Int(inputs["use_CINcin"]) + mumin1 = Float(inputs["mumin1"]) + rmaxfrac = Float(inputs["rmaxfrac"]) + PGFc = Float(inputs["PGFc"]) + dt = Float(inputs["dt"]) + niter_xc = Int(inputs["niter_xc"]) + criqc = Float(inputs["criqc"]) + rle = Float(inputs["rle"]) + cridist_opt = Int(inputs["cridist_opt"]) + mixscale = Float(inputs["mixscale"]) + rdrag = Float(inputs["rdrag"]) + rkm = Float(inputs["rkm"]) + use_self_detrain = Int(inputs["use_self_detrain"]) + detrhgt = Float(inputs["detrhgt"]) + use_cumpenent = Int(inputs["use_cumpenent"]) + rpen = Float(inputs["rpen"]) + use_momenflx = Int(inputs["use_momenflx"]) + rdrop = Float(inputs["rdrop"]) + iter_cin = Int(inputs["iter_cin"]) + + # Field inputs + condensation = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM], units="n/a", dtype=bool) + + for i in range(0, 24): + for j in range(0, 24): + if inputs["condensation"][i, j] == 1: + condensation.view[i, j] = False + else: + condensation.view[i, j] = True + + cbmf = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + safe_assign_array(cbmf.view[:], inputs["cbmf"]) + cinlcl = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM], units="n/a") + safe_assign_array(cinlcl.view[:], inputs["cinlcl"]) + kinv = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a", dtype=Int) + safe_assign_array(kinv.view[:], inputs["kinv"]) + krel = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a", dtype=Int) + safe_assign_array(krel.view[:], inputs["krel"] - 1) + prel = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + safe_assign_array(prel.view[:], inputs["prel"]) + qtsrc = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + safe_assign_array(qtsrc.view[:], inputs["qtsrc"]) + rho0inv = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + safe_assign_array(rho0inv.view[:], inputs["rho0inv"]) + thlsrc = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + safe_assign_array(thlsrc.view[:], inputs["thlsrc"]) + winv = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + safe_assign_array(winv.view[:], inputs["winv"]) + thvu = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_INTERFACE_DIM], units="n/a") + safe_assign_array(thvu.view[:], inputs["thvu"]) + + # Outputs + ufrc = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_INTERFACE_DIM], units="n/a") + ufrclcl = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + + saturation_vapor_pressure_table = get_saturation_vapor_pressure_table(self.stencil_factory.backend) + self.ese = saturation_vapor_pressure_table.ese + self.esx = saturation_vapor_pressure_table.esx + + stop_cin = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM], units="n/a", dtype=bool) + + umf_out = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_INTERFACE_DIM], units="n/a") + qtflx_out = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_INTERFACE_DIM], units="n/a") + slflx_out = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_INTERFACE_DIM], units="n/a") + uflx_out = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_INTERFACE_DIM], units="n/a") + vflx_out = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_INTERFACE_DIM], units="n/a") + cush_inout = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM], units="n/a") + ufrcinv = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + umf_zint = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_INTERFACE_DIM], units="n/a") + wu = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_INTERFACE_DIM], units="n/a") + emf = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_INTERFACE_DIM], units="n/a") + thlu = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_INTERFACE_DIM], units="n/a") + qtu = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_INTERFACE_DIM], units="n/a") + wlcl = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + + # The iteration you want to test + iter_test = int32(0) + + # # Call stencils + self._define_updraft_properties( + condensation=condensation, + iteration=iter_test, + winv=winv, + cinlcl_IJ=cinlcl, + rbuoy=rbuoy, + umf_out=umf_out, + qtflx_out=qtflx_out, + slflx_out=slflx_out, + uflx_out=uflx_out, + vflx_out=vflx_out, + cbmf=cbmf, + rho0inv=rho0inv, + krel=krel, + ufrc=ufrc, + ufrcinv=ufrcinv, + kinv=kinv, + umf_zint=umf_zint, + wu=wu, + emf=emf, + thlu=thlu, + qtu=qtu, + thlsrc=thlsrc, + qtsrc=qtsrc, + prel=prel, + ese=self.ese, + esx=self.esx, + thvu=thvu, + wlcl=wlcl, + ufrclcl=ufrclcl, + cush_inout=cush_inout, + ) + + # NOTE 1 variable is failing - I am ignoring this for now. + + return { + "thvu_out": thvu.view[:], # thvu_out fails + "ufrc": ufrc.view[:], + "ufrclcl": ufrclcl.view[:], + } diff --git a/GEOSagcm_GridComp/GEOSphysics_GridComp/GEOSmoist_GridComp/pyMoist/tests/savepoint/UW_translate_tests/translate_find_klcl.py b/GEOSagcm_GridComp/GEOSphysics_GridComp/GEOSmoist_GridComp/pyMoist/tests/savepoint/UW_translate_tests/translate_find_klcl.py new file mode 100644 index 000000000..24e57e750 --- /dev/null +++ b/GEOSagcm_GridComp/GEOSphysics_GridComp/GEOSmoist_GridComp/pyMoist/tests/savepoint/UW_translate_tests/translate_find_klcl.py @@ -0,0 +1,308 @@ +from f90nml import Namelist +from gt4py.cartesian.gtscript import int32 + +import pyMoist.constants as constants +from ndsl import StencilFactory +from ndsl.constants import X_DIM, Y_DIM, Z_DIM, Z_INTERFACE_DIM +from ndsl.dsl.typing import Float, Int +from ndsl.stencils.testing.grid import Grid +from ndsl.stencils.testing.translate import TranslateFortranData2Py +from ndsl.utils import safe_assign_array +from pyMoist.saturation_tables import get_saturation_vapor_pressure_table +from pyMoist.UW.compute_uwshcu import find_cumulus_characteristics, find_klcl +from pyMoist.UW.config import UWConfiguration + + +# Dev NOTE: The data for this translate test comes from combining two files in +# a single nc file using the following NCO tool: +# `ncks -A ComputeUwshcu-In.nc FindKlcl-In.nc` + + +class TranslateFindKlcl(TranslateFortranData2Py): + def __init__( + self, + grid: Grid, + namelist: Namelist, + stencil_factory: StencilFactory, + # UW_config: UWConfiguration, + ): + super().__init__(grid, stencil_factory) + self.stencil_factory = stencil_factory + self.quantity_factory = grid.quantity_factory + # self.UW_config = UW_config + + self._find_cumulus_characteristics = self.stencil_factory.from_dims_halo( + func=find_cumulus_characteristics, + compute_dims=[X_DIM, Y_DIM, Z_DIM], + externals={"ncnst": 23}, + ) + self._find_klcl = self.stencil_factory.from_dims_halo( + func=find_klcl, + compute_dims=[X_DIM, Y_DIM, Z_DIM], + externals={"ncnst": 23}, + ) + + # FloatField Inputs + self.in_vars["data_vars"] = { + "condensation": {}, + "pifc0": {}, + "pmid0": {}, + "qt0": {}, + "ssu0": {}, + "ssv0": {}, + "thvlmin": {}, + "u0": {}, + "v0": {}, + "t0": {}, + "qv0": {}, + "qtavg": {}, + "uavg": {}, + "vavg": {}, + "kinv": {}, + "thl0": {}, + "ssthl0": {}, + "ssqt0": {}, + "tr0_FindKlcl": {}, + } + + # Float/Int Inputs + self.in_vars["parameters"] = [ + "dotransport", + "ncnst", + "k0", + "tr0", + "windsrcavg", + "qtsrchgt", + "qtsrc_fac", + "thlsrc_fac", + "frc_rasn", + "rbuoy", + "epsvarw", + "use_CINcin", + "mumin1", + "rmaxfrac", + "PGFc", + "niter_xc", + "criqc", + "rle", + "cridist_opt", + "mixscale", + "rkm", + "dt", + "detrhgt", + "rdrag", + "use_self_detrain", + "detrhgt", + "use_cumpenent", + "rpen", + "use_momenflx", + "rdrop", + "iter_cin", + ] + + # FloatField Outputs + self.out_vars = { + "qtsrc": self.grid.compute_dict(), + "thlsrc": self.grid.compute_dict(), + "thvlsrc": self.grid.compute_dict(), + "usrc": self.grid.compute_dict(), + "vsrc": self.grid.compute_dict(), + "trsrc": self.grid.compute_dict(), + "klcl": self.grid.compute_dict(), + "plcl": self.grid.compute_dict(), + "qt0lcl": self.grid.compute_dict(), + "thl0lcl": self.grid.compute_dict(), + "thv0lcl": self.grid.compute_dict(), + } + + def compute(self, inputs): + self.UW_config = UWConfiguration(Int(inputs["ncnst"]), Int(inputs["k0"]), Int(inputs["windsrcavg"])) + + self.quantity_factory.add_data_dimensions( + { + "ntracers": constants.NCNST, + } + ) + + # Float/Int Inputs + dotransport = Int(inputs["dotransport"]) + k0 = Int(inputs["k0"]) + windsrcavg = Int(inputs["windsrcavg"]) + qtsrchgt = Float(inputs["qtsrchgt"]) + qtsrc_fac = Float(inputs["qtsrc_fac"]) + thlsrc_fac = Float(inputs["thlsrc_fac"]) + frc_rasn = Float(inputs["frc_rasn"]) + rbuoy = Float(inputs["rbuoy"]) + epsvarw = Float(inputs["epsvarw"]) + use_CINcin = Int(inputs["use_CINcin"]) + mumin1 = Float(inputs["mumin1"]) + rmaxfrac = Float(inputs["rmaxfrac"]) + PGFc = Float(inputs["PGFc"]) + dt = Float(inputs["dt"]) + niter_xc = Int(inputs["niter_xc"]) + criqc = Float(inputs["criqc"]) + rle = Float(inputs["rle"]) + cridist_opt = Int(inputs["cridist_opt"]) + mixscale = Float(inputs["mixscale"]) + rdrag = Float(inputs["rdrag"]) + rkm = Float(inputs["rkm"]) + use_self_detrain = Int(inputs["use_self_detrain"]) + detrhgt = Float(inputs["detrhgt"]) + use_cumpenent = Int(inputs["use_cumpenent"]) + rpen = Float(inputs["rpen"]) + use_momenflx = Int(inputs["use_momenflx"]) + rdrop = Float(inputs["rdrop"]) + iter_cin = Int(inputs["iter_cin"]) + + # Field inputs + condensation = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM], units="n/a", dtype=bool) + + for i in range(0, 24): + for j in range(0, 24): + if inputs["condensation"][i, j] == 1: + condensation.view[i, j] = False + else: + condensation.view[i, j] = True + + pifc0 = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_INTERFACE_DIM], units="n/a") + safe_assign_array(pifc0.view[:], inputs["pifc0"]) + pmid0 = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + safe_assign_array(pmid0.view[:], inputs["pmid0"]) + qt0 = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + safe_assign_array(qt0.view[:], inputs["qt0"]) + ssu0 = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + safe_assign_array(ssu0.view[:], inputs["ssu0"]) + ssv0 = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + safe_assign_array(ssv0.view[:], inputs["ssv0"]) + thvlmin = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + safe_assign_array(thvlmin.view[:], inputs["thvlmin"]) + u0 = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + safe_assign_array(u0.view[:], inputs["u0"]) + v0 = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + safe_assign_array(v0.view[:], inputs["v0"]) + t0 = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + safe_assign_array(t0.view[:], inputs["t0"]) + qv0 = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + safe_assign_array(qv0.view[:], inputs["qv0"]) + qtavg = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + safe_assign_array(qtavg.view[:], inputs["qtavg"]) + uavg = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + safe_assign_array(uavg.view[:], inputs["uavg"]) + vavg = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + safe_assign_array(vavg.view[:], inputs["vavg"]) + kinv = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a", dtype=Int) + safe_assign_array(kinv.view[:], inputs["kinv"]) + thl0 = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + safe_assign_array(thl0.view[:], inputs["thl0"]) + ssthl0 = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + safe_assign_array(ssthl0.view[:], inputs["ssthl0"]) + ssqt0 = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + safe_assign_array(ssqt0.view[:], inputs["ssqt0"]) + tr0 = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM, "ntracers"], units="n/a") + safe_assign_array(tr0.view[:], inputs["tr0_FindKlcl"]) + + # Outputs + klcl = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a", dtype=Int) + plcl = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + qt0lcl = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + qtsrc = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + thl0lcl = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + thlsrc = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + thv0lcl = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + thvlsrc = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + trsrc = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, "ntracers"], units="n/a") + usrc = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + vsrc = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + tpert_out = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM], units="n/a") + qpert_out = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM], units="n/a") + shfx = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM], units="n/a") + evap = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM], units="n/a") + # The iteration you want to test + iter_test = int32(0) + + # # Call stencils + self._find_cumulus_characteristics( + condensation=condensation, + windsrcavg=windsrcavg, + pifc0=pifc0, + t0=t0, + qv0=qv0, + shfx=shfx, + evap=evap, + thlsrc_fac=thlsrc_fac, + qtsrc_fac=qtsrc_fac, + qt0=qt0, + qtavg=qtavg, + thvlmin=thvlmin, + uavg=uavg, + vavg=vavg, + kinv=kinv, + u0=u0, + v0=v0, + ssu0=ssu0, + ssv0=ssv0, + pmid0=pmid0, + dotransport=dotransport, + tr0=tr0, + trsrc=trsrc, + qtsrc=qtsrc, + thvlsrc=thvlsrc, + thlsrc=thlsrc, + usrc=usrc, + vsrc=vsrc, + tpert_out=tpert_out, + qpert_out=qpert_out, + iteration=iter_test, + ) + + saturation_vapor_pressure_table = get_saturation_vapor_pressure_table(self.stencil_factory.backend) + self.ese = saturation_vapor_pressure_table.ese + self.esx = saturation_vapor_pressure_table.esx + + umf_out = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_INTERFACE_DIM], units="n/a") + qtflx_out = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_INTERFACE_DIM], units="n/a") + slflx_out = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_INTERFACE_DIM], units="n/a") + uflx_out = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_INTERFACE_DIM], units="n/a") + vflx_out = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_INTERFACE_DIM], units="n/a") + cush_inout = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM], units="n/a") + + self._find_klcl( + condensation=condensation, + iteration=iter_test, + pifc0=pifc0, + umf_out=umf_out, + qtflx_out=qtflx_out, + slflx_out=slflx_out, + uflx_out=uflx_out, + vflx_out=vflx_out, + qtsrc=qtsrc, + thlsrc=thlsrc, + ese=self.ese, + esx=self.esx, + k0=k0, + thl0=thl0, + ssthl0=ssthl0, + pmid0=pmid0, + qt0=qt0, + ssqt0=ssqt0, + plcl=plcl, + klcl=klcl, + thl0lcl=thl0lcl, + qt0lcl=qt0lcl, + thv0lcl=thv0lcl, + cush_inout=cush_inout, + ) + + return { + "qtsrc": qtsrc.view[:], + "thlsrc": thlsrc.view[:], + "thvlsrc": thvlsrc.view[:], + "usrc": usrc.view[:], + "vsrc": vsrc.view[:], + "trsrc": trsrc.view[:], + "klcl": klcl.view[:], # klcl should fail by 1 + "plcl": plcl.view[:], + "qt0lcl": qt0lcl.view[:], + "thl0lcl": thl0lcl.view[:], + "thv0lcl": thv0lcl.view[:], + } diff --git a/GEOSagcm_GridComp/GEOSphysics_GridComp/GEOSmoist_GridComp/pyMoist/tests/savepoint/UW_translate_tests/translate_find_pbl.py b/GEOSagcm_GridComp/GEOSphysics_GridComp/GEOSmoist_GridComp/pyMoist/tests/savepoint/UW_translate_tests/translate_find_pbl.py new file mode 100644 index 000000000..82f779e16 --- /dev/null +++ b/GEOSagcm_GridComp/GEOSphysics_GridComp/GEOSmoist_GridComp/pyMoist/tests/savepoint/UW_translate_tests/translate_find_pbl.py @@ -0,0 +1,247 @@ +from f90nml import Namelist +from gt4py.cartesian.gtscript import int32 + +import pyMoist.constants as constants +from ndsl import StencilFactory +from ndsl.constants import X_DIM, Y_DIM, Z_DIM, Z_INTERFACE_DIM +from ndsl.dsl.typing import Float, Int +from ndsl.stencils.testing.grid import Grid +from ndsl.stencils.testing.translate import TranslateFortranData2Py +from ndsl.utils import safe_assign_array +from pyMoist.UW.compute_uwshcu import find_pbl_averages, find_pbl_height +from pyMoist.UW.config import UWConfiguration + + +# Dev NOTE: The data for this translate test comes from combining two files in +# a single nc file using the following NCO tool: +# `ncks -A ComputeUwshcu-In.nc FindPbl-In.nc` + + +class TranslateFindPbl(TranslateFortranData2Py): + def __init__( + self, + grid: Grid, + namelist: Namelist, + stencil_factory: StencilFactory, + # UW_config: UWConfiguration, + ): + super().__init__(grid, stencil_factory) + self.stencil_factory = stencil_factory + self.quantity_factory = grid.quantity_factory + # self.UW_config = UW_config + + self._find_pbl_height = self.stencil_factory.from_dims_halo( + func=find_pbl_height, + compute_dims=[X_DIM, Y_DIM, Z_DIM], + externals={"ncnst": 23}, + ) + self._find_pbl_averages = self.stencil_factory.from_dims_halo( + func=find_pbl_averages, + compute_dims=[X_DIM, Y_DIM, Z_DIM], + externals={"ncnst": 23}, + ) + + # FloatField Inputs + self.in_vars["data_vars"] = { + "condensation": {}, + "cush": {}, + "kpbl_in": {}, + "pifc0": {}, + "qt0": {}, + "thvl0": {}, + "thvl0bot": {}, + "thvl0top": {}, + "tke": {}, + "u0": {}, + "v0": {}, + "zmid0": {}, + } + + # Float/Int Inputs + self.in_vars["parameters"] = [ + "dotransport", + "ncnst", + "k0", + "tr0", + "windsrcavg", + "qtsrchgt", + "qtsrc_fac", + "thlsrc_fac", + "frc_rasn", + "rbuoy", + "epsvarw", + "use_CINcin", + "mumin1", + "rmaxfrac", + "PGFc", + "niter_xc", + "criqc", + "rle", + "cridist_opt", + "mixscale", + "rkm", + "dt", + "detrhgt", + "rdrag", + "use_self_detrain", + "detrhgt", + "use_cumpenent", + "rpen", + "use_momenflx", + "rdrop", + "iter_cin", + ] + + # FloatField Outputs + self.out_vars = { + "kinv": self.grid.compute_dict(), + "qtavg": self.grid.compute_dict(), + "thvlavg": self.grid.compute_dict(), + "thvlmin": self.grid.compute_dict(), + "tkeavg": self.grid.compute_dict(), + "uavg": self.grid.compute_dict(), + "vavg": self.grid.compute_dict(), + "tscaleh": self.grid.compute_dict(), + } + + def compute(self, inputs): + self.UW_config = UWConfiguration(Int(inputs["ncnst"]), Int(inputs["k0"]), Int(inputs["windsrcavg"])) + + self.quantity_factory.add_data_dimensions( + { + "ntracers": constants.NCNST, + } + ) + + # Float/Int Inputs + dotransport = Int(inputs["dotransport"]) + k0 = Int(inputs["k0"]) + windsrcavg = Int(inputs["windsrcavg"]) + qtsrchgt = Float(inputs["qtsrchgt"]) + qtsrc_fac = Float(inputs["qtsrc_fac"]) + thlsrc_fac = Float(inputs["thlsrc_fac"]) + frc_rasn = Float(inputs["frc_rasn"]) + rbuoy = Float(inputs["rbuoy"]) + epsvarw = Float(inputs["epsvarw"]) + use_CINcin = Int(inputs["use_CINcin"]) + mumin1 = Float(inputs["mumin1"]) + rmaxfrac = Float(inputs["rmaxfrac"]) + PGFc = Float(inputs["PGFc"]) + dt = Float(inputs["dt"]) + niter_xc = Int(inputs["niter_xc"]) + criqc = Float(inputs["criqc"]) + rle = Float(inputs["rle"]) + cridist_opt = Int(inputs["cridist_opt"]) + mixscale = Float(inputs["mixscale"]) + rdrag = Float(inputs["rdrag"]) + rkm = Float(inputs["rkm"]) + use_self_detrain = Int(inputs["use_self_detrain"]) + detrhgt = Float(inputs["detrhgt"]) + use_cumpenent = Int(inputs["use_cumpenent"]) + rpen = Float(inputs["rpen"]) + use_momenflx = Int(inputs["use_momenflx"]) + rdrop = Float(inputs["rdrop"]) + iter_cin = Int(inputs["iter_cin"]) + + # Field inputs + condensation = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM], units="n/a", dtype=bool) + + for i in range(0, 24): + for j in range(0, 24): + if inputs["condensation"][i, j] == 1: + condensation.view[i, j] = False + else: + condensation.view[i, j] = True + + cush = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM], units="n/a") + safe_assign_array(cush.view[:, :], inputs["cush"]) + kpbl_in = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM], units="n/a", dtype=Int) + safe_assign_array(kpbl_in.view[:, :], inputs["kpbl_in"]) + pifc0 = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_INTERFACE_DIM], units="n/a") + safe_assign_array(pifc0.view[:, :, :], inputs["pifc0"]) + qt0 = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + safe_assign_array(qt0.view[:, :, :], inputs["qt0"]) + thvl0 = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + safe_assign_array(thvl0.view[:, :, :], inputs["thvl0"]) + thvl0bot = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + safe_assign_array(thvl0bot.view[:, :, :], inputs["thvl0bot"]) + thvl0top = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + safe_assign_array(thvl0top.view[:, :, :], inputs["thvl0top"]) + tke = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + safe_assign_array(tke.view[:, :, :], inputs["tke"]) + u0 = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + safe_assign_array(u0.view[:, :, :], inputs["u0"]) + v0 = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + safe_assign_array(v0.view[:, :, :], inputs["v0"]) + zmid0 = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + safe_assign_array(zmid0.view[:, :, :], inputs["zmid0"]) + + # Outputs + kinv = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a", dtype=Int) + qtavg = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + thvlavg = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + thvlmin = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + tkeavg = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + uavg = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + vavg = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + tscaleh = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM], units="n/a") + + umf_out = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_INTERFACE_DIM], units="n/a") + qtflx_out = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_INTERFACE_DIM], units="n/a") + slflx_out = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_INTERFACE_DIM], units="n/a") + uflx_out = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_INTERFACE_DIM], units="n/a") + vflx_out = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_INTERFACE_DIM], units="n/a") + cush_inout = umf_out = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM], units="n/a") + + # The iteration you want to test + iter_test = int32(0) + + # # Call stencils + self._find_pbl_height( + iteration=iter_test, + kpbl_in=kpbl_in, + k0=k0, + condensation=condensation, + umf_out=umf_out, + qtflx_out=qtflx_out, + slflx_out=slflx_out, + uflx_out=uflx_out, + vflx_out=vflx_out, + kinv=kinv, + cush=cush, + cush_inout=cush_inout, + tscaleh=tscaleh, + ) + + self._find_pbl_averages( + condensation=condensation, + thvl0bot=thvl0bot, + thvl0top=thvl0top, + kinv=kinv, + pifc0=pifc0, + tke_in=tke, + u0=u0, + v0=v0, + thvl0=thvl0, + zmid0=zmid0, + qtsrchgt=qtsrchgt, + qt0=qt0, + thvlmin=thvlmin, + tkeavg=tkeavg, + uavg=uavg, + vavg=vavg, + thvlavg=thvlavg, + qtavg=qtavg, + iteration=iter_test, + ) + + return { + "kinv": kinv.view[:], + "qtavg": qtavg.view[:], + "thvlavg": thvlavg.view[:], + "thvlmin": thvlmin.view[:], + "tkeavg": tkeavg.view[:], + "uavg": uavg.view[:], + "vavg": vavg.view[:], + "tscaleh": tscaleh.view[:], # Its okay if tscaleh fails here, its not used until iteration = 2 + } diff --git a/GEOSagcm_GridComp/GEOSphysics_GridComp/GEOSmoist_GridComp/pyMoist/tests/savepoint/UW_translate_tests/translate_penetrative_entrainment_fluxes.py b/GEOSagcm_GridComp/GEOSphysics_GridComp/GEOSmoist_GridComp/pyMoist/tests/savepoint/UW_translate_tests/translate_penetrative_entrainment_fluxes.py new file mode 100644 index 000000000..7797336b9 --- /dev/null +++ b/GEOSagcm_GridComp/GEOSphysics_GridComp/GEOSmoist_GridComp/pyMoist/tests/savepoint/UW_translate_tests/translate_penetrative_entrainment_fluxes.py @@ -0,0 +1,314 @@ +from f90nml import Namelist +from gt4py.cartesian.gtscript import int32 + +import pyMoist.constants as constants +from ndsl import StencilFactory +from ndsl.constants import X_DIM, Y_DIM, Z_DIM, Z_INTERFACE_DIM +from ndsl.dsl.typing import Float, Int +from ndsl.stencils.testing.grid import Grid +from ndsl.stencils.testing.translate import TranslateFortranData2Py +from ndsl.utils import safe_assign_array +from pyMoist.saturation_tables import get_saturation_vapor_pressure_table +from pyMoist.UW.compute_uwshcu import penetrative_entrainment_fluxes +from pyMoist.UW.config import UWConfiguration + + +class TranslatePenetrativeEntrainmentFluxes(TranslateFortranData2Py): + def __init__( + self, + grid: Grid, + namelist: Namelist, + stencil_factory: StencilFactory, + # UW_config: UWConfiguration, + ): + super().__init__(grid, stencil_factory) + self.stencil_factory = stencil_factory + self.quantity_factory = grid.quantity_factory + # self.UW_config = UW_config + + self._penetrative_entrainment_fluxes = self.stencil_factory.from_dims_halo( + func=penetrative_entrainment_fluxes, + compute_dims=[X_DIM, Y_DIM, Z_DIM], + externals={"ncnst": 23}, + ) + + # FloatField Inputs + self.in_vars["data_vars"] = { + "condensation": {}, + "emf": {}, + "kbup": {}, + "kpen": {}, + "pifc0": {}, + "pmid0": {}, + "qt0": {}, + "qtflx": {}, + "qtu_emf": {}, + "slflx": {}, + "ssqt0": {}, + "ssthl0": {}, + "sstr0": {}, + "ssu0": {}, + "ssv0": {}, + "thl0": {}, + "thlu_emf": {}, + "tr0_PenEntrainFlux": {}, + "trflx": {}, + "tru_emf": {}, + "u0": {}, + "v0": {}, + "vflx": {}, + "vu_emf": {}, + "uu_emf": {}, + "uflx": {}, + "umf": {}, + "kinv": {}, + "cbmf": {}, + "ql0": {}, + "qi0": {}, + "exnifc0": {}, + "krel": {}, + } + + # Float/Int Inputs + self.in_vars["parameters"] = [ + "dotransport", + "ncnst", + "k0", + "tr0", + "windsrcavg", + "qtsrchgt", + "qtsrc_fac", + "thlsrc_fac", + "frc_rasn", + "rbuoy", + "epsvarw", + "use_CINcin", + "mumin1", + "rmaxfrac", + "PGFc", + "niter_xc", + "criqc", + "rle", + "cridist_opt", + "mixscale", + "rkm", + "dt", + "detrhgt", + "rdrag", + "use_self_detrain", + "detrhgt", + "use_cumpenent", + "rpen", + "use_momenflx", + "rdrop", + "iter_cin", + ] + + # FloatField Outputs + self.out_vars = { + "qtflx": self.grid.compute_dict(), + "slflx": self.grid.compute_dict(), + "trflx": self.grid.compute_dict(), + "uflx": self.grid.compute_dict(), + "vflx": self.grid.compute_dict(), + "qlten_sink": self.grid.compute_dict(), + "qiten_sink": self.grid.compute_dict(), + "uemf": self.grid.compute_dict(), + } + + def compute(self, inputs): + self.UW_config = UWConfiguration(Int(inputs["ncnst"]), Int(inputs["k0"]), Int(inputs["windsrcavg"])) + + self.quantity_factory.add_data_dimensions( + { + "ntracers": constants.NCNST, + } + ) + + # Float/Int Inputs + dotransport = Int(inputs["dotransport"]) + k0 = Int(inputs["k0"]) + windsrcavg = Int(inputs["windsrcavg"]) + qtsrchgt = Float(inputs["qtsrchgt"]) + qtsrc_fac = Float(inputs["qtsrc_fac"]) + thlsrc_fac = Float(inputs["thlsrc_fac"]) + frc_rasn = Float(inputs["frc_rasn"]) + rbuoy = Float(inputs["rbuoy"]) + epsvarw = Float(inputs["epsvarw"]) + use_CINcin = Int(inputs["use_CINcin"]) + mumin1 = Float(inputs["mumin1"]) + rmaxfrac = Float(inputs["rmaxfrac"]) + PGFc = Float(inputs["PGFc"]) + dt = Float(inputs["dt"]) + niter_xc = Int(inputs["niter_xc"]) + criqc = Float(inputs["criqc"]) + rle = Float(inputs["rle"]) + cridist_opt = Int(inputs["cridist_opt"]) + mixscale = Float(inputs["mixscale"]) + rdrag = Float(inputs["rdrag"]) + rkm = Float(inputs["rkm"]) + use_self_detrain = Int(inputs["use_self_detrain"]) + detrhgt = Float(inputs["detrhgt"]) + use_cumpenent = Int(inputs["use_cumpenent"]) + rpen = Float(inputs["rpen"]) + use_momenflx = Int(inputs["use_momenflx"]) + rdrop = Float(inputs["rdrop"]) + iter_cin = Int(inputs["iter_cin"]) + + # Inputs + condensation = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM], units="n/a", dtype=bool) + + for i in range(0, 24): + for j in range(0, 24): + if inputs["condensation"][i, j] == 1: + condensation.view[i, j] = False + else: + condensation.view[i, j] = True + + kbup = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a", dtype=Int) + safe_assign_array(kbup.view[:], inputs["kbup"] - 1) + kpen = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a", dtype=Int) + safe_assign_array(kpen.view[:], inputs["kpen"] - 1) + pifc0 = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_INTERFACE_DIM], units="n/a") + safe_assign_array(pifc0.view[:], inputs["pifc0"]) + pmid0 = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + safe_assign_array(pmid0.view[:], inputs["pmid0"]) + qt0 = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + safe_assign_array(qt0.view[:], inputs["qt0"]) + ssqt0 = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + safe_assign_array(ssqt0.view[:], inputs["ssqt0"]) + ssthl0 = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + safe_assign_array(ssthl0.view[:], inputs["ssthl0"]) + sstr0 = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM, "ntracers"], units="n/a") + safe_assign_array(sstr0.view[:], inputs["sstr0"]) + ssu0 = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + safe_assign_array(ssu0.view[:], inputs["ssu0"]) + ssv0 = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + safe_assign_array(ssv0.view[:], inputs["ssv0"]) + thl0 = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + safe_assign_array(thl0.view[:], inputs["thl0"]) + tr0 = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM, "ntracers"], units="n/a") + safe_assign_array(tr0.view[:], inputs["tr0_PenEntrainFlux"]) + u0 = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + safe_assign_array(u0.view[:], inputs["u0"]) + v0 = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + safe_assign_array(v0.view[:], inputs["v0"]) + exnifc0 = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_INTERFACE_DIM], units="n/a") + safe_assign_array(exnifc0.view[:], inputs["exnifc0"]) + umf = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_INTERFACE_DIM], units="n/a") + safe_assign_array(umf.view[:], inputs["umf"]) + thlu_emf = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_INTERFACE_DIM], units="n/a") + safe_assign_array(thlu_emf.view[:], inputs["thlu_emf"]) + qtu_emf = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_INTERFACE_DIM], units="n/a") + safe_assign_array(qtu_emf.view[:], inputs["qtu_emf"]) + uu_emf = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_INTERFACE_DIM], units="n/a") + safe_assign_array(uu_emf.view[:], inputs["uu_emf"]) + vu_emf = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_INTERFACE_DIM], units="n/a") + safe_assign_array(vu_emf.view[:], inputs["vu_emf"]) + tru_emf = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_INTERFACE_DIM, "ntracers"], units="n/a") + safe_assign_array(tru_emf.view[:], inputs["tru_emf"]) + emf = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_INTERFACE_DIM], units="n/a") + safe_assign_array(emf.view[:], inputs["emf"]) + cbmf = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + safe_assign_array(cbmf.view[:], inputs["cbmf"]) + kinv = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a", dtype=Int) + safe_assign_array(kinv.view[:], inputs["kinv"] - 1) + krel = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a", dtype=Int) + safe_assign_array(krel.view[:], inputs["krel"] - 1) + qi0 = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + safe_assign_array(qi0.view[:], inputs["qi0"]) + ql0 = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + safe_assign_array(ql0.view[:], inputs["ql0"]) + + # Outputs + qtflx = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_INTERFACE_DIM], units="n/a") + safe_assign_array(qtflx.view[:], inputs["qtflx"]) + slflx = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_INTERFACE_DIM], units="n/a") + safe_assign_array(slflx.view[:], inputs["slflx"]) + trflx = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_INTERFACE_DIM, "ntracers"], units="n/a") + safe_assign_array(trflx.view[:], inputs["trflx"]) + uflx = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_INTERFACE_DIM], units="n/a") + safe_assign_array(uflx.view[:], inputs["uflx"]) + vflx = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_INTERFACE_DIM], units="n/a") + safe_assign_array(vflx.view[:], inputs["vflx"]) + + saturation_vapor_pressure_table = get_saturation_vapor_pressure_table(self.stencil_factory.backend) + self.ese = saturation_vapor_pressure_table.ese + self.esx = saturation_vapor_pressure_table.esx + + umf_out = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_INTERFACE_DIM], units="n/a") + qtflx_out = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_INTERFACE_DIM], units="n/a") + slflx_out = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_INTERFACE_DIM], units="n/a") + uflx_out = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_INTERFACE_DIM], units="n/a") + vflx_out = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_INTERFACE_DIM], units="n/a") + cush_inout = umf_out = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM], units="n/a") + + uemf = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_INTERFACE_DIM], units="n/a") + qlten_sink = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + qiten_sink = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + # The iteration you want to test + iter_test = int32(0) + + # # Call stencils + self._penetrative_entrainment_fluxes( + condensation=condensation, + kbup=kbup, + kpen=kpen, + exnifc0=exnifc0, + emf=emf, + thlu_emf=thlu_emf, + thl0=thl0, + ssthl0=ssthl0, + pifc0=pifc0, + pmid0=pmid0, + qtu_emf=qtu_emf, + qt0=qt0, + ssqt0=ssqt0, + uu_emf=uu_emf, + vu_emf=vu_emf, + u0=u0, + v0=v0, + ssu0=ssu0, + ssv0=ssv0, + dotransport=dotransport, + trflx=trflx, + tru_emf=tru_emf, + tr0=tr0, + sstr0=sstr0, + use_momenflx=use_momenflx, + kinv=kinv, + cbmf=cbmf, + uflx=uflx, + vflx=vflx, + slflx=slflx, + qtflx=qtflx, + uemf=uemf, + krel=krel, + umf_zint=umf, + k0=k0, + ql0=ql0, + qi0=qi0, + dt=dt, + ese=self.ese, + esx=self.esx, + umf_out=umf_out, + qtflx_out=qtflx_out, + slflx_out=slflx_out, + uflx_out=uflx_out, + vflx_out=vflx_out, + qlten_sink=qlten_sink, + qiten_sink=qiten_sink, + cush_inout=cush_inout, + iteration=iter_test, + ) + + return { + "qtflx": qtflx.view[:], + "slflx": slflx.view[:], + "trflx": trflx.view[:], + "uflx": uflx.view[:], + "vflx": vflx.view[:], + "qlten_sink": qlten_sink.view[:], + "qiten_sink": qiten_sink.view[:], + "uemf": uemf.view[:], + } diff --git a/GEOSagcm_GridComp/GEOSphysics_GridComp/GEOSmoist_GridComp/pyMoist/tests/savepoint/UW_translate_tests/translate_prepare_inputs.py b/GEOSagcm_GridComp/GEOSphysics_GridComp/GEOSmoist_GridComp/pyMoist/tests/savepoint/UW_translate_tests/translate_prepare_inputs.py new file mode 100644 index 000000000..77dd76f5a --- /dev/null +++ b/GEOSagcm_GridComp/GEOSphysics_GridComp/GEOSmoist_GridComp/pyMoist/tests/savepoint/UW_translate_tests/translate_prepare_inputs.py @@ -0,0 +1,578 @@ +from f90nml import Namelist + +import pyMoist.constants as constants +from ndsl import Quantity, StencilFactory +from ndsl.constants import X_DIM, Y_DIM, Z_DIM, Z_INTERFACE_DIM +from ndsl.dsl.typing import Float, FloatField, Int +from ndsl.stencils.testing.grid import Grid +from ndsl.stencils.testing.translate import TranslateFortranData2Py +from ndsl.utils import safe_assign_array +from pyMoist.saturation_tables import get_saturation_vapor_pressure_table +from pyMoist.UW.compute_uwshcu import ( + _reset_mask, + compute_thermodynamic_variables, + compute_thv0_thvl0, + compute_uwshcu_invert_before, +) +from pyMoist.UW.config import UWConfiguration + + +# Dev NOTE: The data for this translate test comes from combining two files in +# a single nc file using the following NCO tool: +# `ncks -A ComputeUwshcu-In.nc PrepareInputs-In.nc` + + +class TranslatePrepareInputs(TranslateFortranData2Py): + def __init__( + self, + grid: Grid, + namelist: Namelist, + stencil_factory: StencilFactory, + # UW_config: UWConfiguration, + ): + super().__init__(grid, stencil_factory) + self.stencil_factory = stencil_factory + self.quantity_factory = grid.quantity_factory + # self.UW_config = UW_config + + self._compute_uwshcu_invert_before = self.stencil_factory.from_dims_halo( + func=compute_uwshcu_invert_before, + compute_dims=[X_DIM, Y_DIM, Z_DIM], + externals={"ncnst": 23}, + ) + self._compute_thermodynamic_variables = self.stencil_factory.from_dims_halo( + func=compute_thermodynamic_variables, + compute_dims=[X_DIM, Y_DIM, Z_DIM], + externals={"ncnst": 23}, + ) + + self._compute_thv0_thvl0 = self.stencil_factory.from_dims_halo( + func=compute_thv0_thvl0, + compute_dims=[X_DIM, Y_DIM, Z_DIM], + externals={"ncnst": 23}, + ) + + # FloatField Inputs + self.in_vars["data_vars"] = { + "pifc0_inv": {}, + "zifc0_inv": {}, + "pmid0_inv": {}, + "zmid0_inv": {}, + "kpbl_inv": {}, + "exnmid0_inv": {}, + "exnifc0_inv": {}, + "dp0_inv": {}, + "u0_inv": {}, + "v0_inv": {}, + "qv0_inv": {}, + "ql0_inv": {}, + "qi0_inv": {}, + "t0_inv": {}, + "tr0": {}, + "frland": {}, + "tke_inv": {}, + "rkfre": {}, + "cush": {}, + "shfx": {}, + "evap": {}, + "cnvtr": {}, + "CNV_Tracers": {}, + } + + # Float/Int Inputs + self.in_vars["parameters"] = [ + "dotransport", + "ncnst", + "k0", + "windsrcavg", + "qtsrchgt", + "qtsrc_fac", + "thlsrc_fac", + "frc_rasn", + "rbuoy", + "epsvarw", + "use_CINcin", + "mumin1", + "rmaxfrac", + "PGFc", + "dt", + "niter_xc", + "criqc", + "rle", + "cridist_opt", + "mixscale", + "rkm", + "detrhgt", + "rdrag", + "use_self_detrain", + "detrhgt", + "use_cumpenent", + "rpen", + "use_momenflx", + "rdrop", + "iter_cin", + ] + + # FloatField Outputs + self.out_vars = { + "qt0": self.grid.compute_dict(), + "s0": self.grid.compute_dict(), + "ssqt0": self.grid.compute_dict(), + "ssthl0": self.grid.compute_dict(), + "sstr0": self.grid.compute_dict(), + "sstr0_o": self.grid.compute_dict(), + "ssu0": self.grid.compute_dict(), + "ssv0": self.grid.compute_dict(), + "t0": self.grid.compute_dict(), + "thl0": self.grid.compute_dict(), + "thv0bot": self.grid.compute_dict(), + "thv0top": self.grid.compute_dict(), + "thvl0": self.grid.compute_dict(), + "thvl0bot": self.grid.compute_dict(), + "thvl0top": self.grid.compute_dict(), + "tr0_o": self.grid.compute_dict(), + "trflx": self.grid.compute_dict(), + "trten": self.grid.compute_dict(), + "tru": self.grid.compute_dict(), + "tru_emf": self.grid.compute_dict(), + "tke": self.grid.compute_dict(), + } + + def make_ntracers_ijk_field(self, data) -> Quantity: + qty = self.quantity_factory.empty( + [X_DIM, Y_DIM, Z_DIM, "ntracers"], + "n/a", + ) + qty.view[:, :, :, :] = qty.np.asarray(data[:, :, :, :]) + return qty + + def make_ijk_field(self, data, dtype=FloatField) -> Quantity: + qty = self.quantity_factory.empty([X_DIM, Y_DIM, Z_DIM], "n/a", dtype=dtype) + qty.view[:, :, :] = qty.np.asarray(data[:, :, :]) + return qty + + def make_ij_field(self, data, dtype=FloatField) -> Quantity: + qty = self.quantity_factory.empty([X_DIM, Y_DIM], "n/a", dtype=dtype) + qty.view[:, :] = qty.np.asarray(data[:, :]) + return qty + + def compute(self, inputs): + self.UW_config = UWConfiguration(Int(inputs["ncnst"]), Int(inputs["k0"]), Int(inputs["windsrcavg"])) + + self.quantity_factory.add_data_dimensions( + { + "ntracers": constants.NCNST, + } + ) + + # Float/Int Inputs + dotransport = Int(inputs["dotransport"]) + k0 = Int(inputs["k0"]) + windsrcavg = Int(inputs["windsrcavg"]) + qtsrchgt = Float(inputs["qtsrchgt"]) + qtsrc_fac = Float(inputs["qtsrc_fac"]) + thlsrc_fac = Float(inputs["thlsrc_fac"]) + frc_rasn = Float(inputs["frc_rasn"]) + rbuoy = Float(inputs["rbuoy"]) + epsvarw = Float(inputs["epsvarw"]) + use_CINcin = Int(inputs["use_CINcin"]) + mumin1 = Float(inputs["mumin1"]) + rmaxfrac = Float(inputs["rmaxfrac"]) + PGFc = Float(inputs["PGFc"]) + dt = Float(inputs["dt"]) + niter_xc = Int(inputs["niter_xc"]) + criqc = Float(inputs["criqc"]) + rle = Float(inputs["rle"]) + cridist_opt = Int(inputs["cridist_opt"]) + mixscale = Float(inputs["mixscale"]) + rdrag = Float(inputs["rdrag"]) + rkm = Float(inputs["rkm"]) + use_self_detrain = Int(inputs["use_self_detrain"]) + detrhgt = Float(inputs["detrhgt"]) + use_cumpenent = Int(inputs["use_cumpenent"]) + rpen = Float(inputs["rpen"]) + use_momenflx = Int(inputs["use_momenflx"]) + rdrop = Float(inputs["rdrop"]) + iter_cin = Int(inputs["iter_cin"]) + + # Field inputs + pifc0_inv = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_INTERFACE_DIM], units="n/a") + safe_assign_array(pifc0_inv.view[:, :, :], inputs["pifc0_inv"]) + zifc0_inv = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_INTERFACE_DIM], units="n/a") + safe_assign_array(zifc0_inv.view[:, :, :], inputs["zifc0_inv"]) + pmid0_inv = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + safe_assign_array(pmid0_inv.view[:, :, :], inputs["pmid0_inv"]) + zmid0_inv = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + safe_assign_array(zmid0_inv.view[:, :, :], inputs["zmid0_inv"]) + kpbl_inv = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM], units="n/a") + safe_assign_array(kpbl_inv.view[:, :], inputs["kpbl_inv"]) + exnmid0_inv = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + safe_assign_array(exnmid0_inv.view[:, :, :], inputs["exnmid0_inv"]) + exnifc0_inv = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_INTERFACE_DIM], units="n/a") + safe_assign_array(exnifc0_inv.view[:, :, :], inputs["exnifc0_inv"]) + dp0_inv = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + safe_assign_array(dp0_inv.view[:, :, :], inputs["dp0_inv"]) + u0_inv = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + safe_assign_array(u0_inv.view[:, :, :], inputs["u0_inv"]) + v0_inv = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + safe_assign_array(v0_inv.view[:, :, :], inputs["v0_inv"]) + qv0_inv = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + safe_assign_array(qv0_inv.view[:, :, :], inputs["qv0_inv"]) + ql0_inv = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + safe_assign_array(ql0_inv.view[:, :, :], inputs["ql0_inv"]) + qi0_inv = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + safe_assign_array(qi0_inv.view[:, :, :], inputs["qi0_inv"]) + t0_inv = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + safe_assign_array(t0_inv.view[:, :, :], inputs["t0_inv"]) + frland = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM], units="n/a") + safe_assign_array(frland.view[:, :], inputs["frland"]) + tke_inv = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_INTERFACE_DIM], units="n/a") + safe_assign_array(tke_inv.view[:, :, :], inputs["tke_inv"]) + rkfre = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM], units="n/a") + safe_assign_array(rkfre.view[:, :], inputs["rkfre"]) + cush = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM], units="n/a") + safe_assign_array(cush.view[:, :], inputs["cush"]) + shfx = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM], units="n/a") + safe_assign_array(shfx.view[:, :], inputs["shfx"]) + evap = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM], units="n/a") + safe_assign_array(evap.view[:, :], inputs["evap"]) + + cnvtr = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM], units="n/a") + safe_assign_array(cnvtr.view[:, :], inputs["cnvtr"]) + + CNV_Tracers = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM, "ntracers"], units="n/a") + safe_assign_array(CNV_Tracers.view[:, :, :, :], inputs["CNV_Tracers"]) + tr0_inout = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM, "ntracers"], units="n/a") + + # FloatFieldNTracers + sstr0 = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM, "ntracers"], units="n/a") + sstr0_o = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM, "ntracers"], units="n/a") + tr0_o = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM, "ntracers"], units="n/a") + trten = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM, "ntracers"], units="n/a") + + # FloatFields + qt0 = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + s0 = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + ssqt0 = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + ssthl0 = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + ssu0 = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + ssv0 = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + t0 = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + thl0 = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + thv0bot = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + thv0top = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + thvl0 = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + thvl0top = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + thvl0bot = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + + # _compute_uwshcu_invert_before locals + pmid0_in = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + u0_in = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + v0_in = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + zmid0_in = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + exnmid0_in = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + dp0_in = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + qv0_in = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + ql0_in = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + qi0_in = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + th0_in = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + tke_in = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + pifc0_in = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_INTERFACE_DIM], units="n/a") + zifc0_in = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_INTERFACE_DIM], units="n/a") + exnifc0_in = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_INTERFACE_DIM], units="n/a") + kpbl_in = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM], dtype=Int, units="n/a") + cnvtrmax = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM], units="n/a") + + # # Call stencils + self._compute_uwshcu_invert_before( + # Inputs + k0=k0, + pmid0_inv=pmid0_inv, + u0_inv=u0_inv, + v0_inv=v0_inv, + zmid0_inv=zmid0_inv, + exnmid0_inv=exnmid0_inv, + dp0_inv=dp0_inv, + qv0_inv=qv0_inv, + ql0_inv=ql0_inv, + qi0_inv=qi0_inv, + t0_inv=t0_inv, + tke_inv=tke_inv, + pifc0_inv=pifc0_inv, + zifc0_inv=zifc0_inv, + exnifc0_inv=exnifc0_inv, + kpbl_inv=kpbl_inv, + cnvtr=cnvtr, + frland=frland, + CNV_Tracers=CNV_Tracers, + tr0_inout=tr0_inout, + # Outputs + pmid0_in=pmid0_in, + u0_in=u0_in, + v0_in=v0_in, + zmid0_in=zmid0_in, + exnmid0_in=exnmid0_in, + dp0_in=dp0_in, + qv0_in=qv0_in, + ql0_in=ql0_in, + qi0_in=qi0_in, + th0_in=th0_in, + tke_in=tke_in, + pifc0_in=pifc0_in, + zifc0_in=zifc0_in, + exnifc0_in=exnifc0_in, + kpbl_in=kpbl_in, + cnvtrmax=cnvtrmax, + ) + + # _compute_thermodynamics_variables locals + u0 = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + v0 = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + tr0 = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM, "ntracers"], units="n/a") + umf_out = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_INTERFACE_DIM], units="n/a") + qtflx_out = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_INTERFACE_DIM], units="n/a") + slflx_out = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_INTERFACE_DIM], units="n/a") + uflx_out = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_INTERFACE_DIM], units="n/a") + vflx_out = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_INTERFACE_DIM], units="n/a") + qv0 = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + qi0 = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + pmid0 = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + tr0_temp = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + tscaleh = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM], units="n/a") + fer_out = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + fdr_out = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + tpert_out = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM], units="n/a") + qpert_out = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM], units="n/a") + + self._compute_thermodynamic_variables( + pmid0_in=pmid0_in, + zmid0_in=zmid0_in, + exnmid0_in=exnmid0_in, + dp0_in=dp0_in, + u0_in=u0_in, + v0_in=v0_in, + u0=u0, + v0=v0, + qv0_in=qv0_in, + ql0_in=ql0_in, + qi0_in=qi0_in, + th0_in=th0_in, + tr0_inout=tr0_inout, + cush_inout=cush, + cush=cush, + umf_out=umf_out, + shfx=shfx, + evap=evap, + qtflx_out=qtflx_out, + slflx_out=slflx_out, + uflx_out=uflx_out, + vflx_out=vflx_out, + qt0=qt0, + t0=t0, + qv0=qv0, + qi0=qi0, + pmid0=pmid0, + tr0=tr0, + tr0_temp=tr0_temp, + sstr0=sstr0, + thl0=thl0, + ssthl0=ssthl0, + ssqt0=ssqt0, + ssu0=ssu0, + ssv0=ssv0, + tscaleh=tscaleh, + dotransport=dotransport, + fer_out=fer_out, + fdr_out=fdr_out, + tpert_out=tpert_out, + qpert_out=qpert_out, + ) + + saturation_vapor_pressure_table = get_saturation_vapor_pressure_table(self.stencil_factory.backend) + self.ese = saturation_vapor_pressure_table.ese + self.esx = saturation_vapor_pressure_table.esx + + self._reset_mask = self.stencil_factory.from_dims_halo( + func=_reset_mask, + compute_dims=[X_DIM, Y_DIM, Z_DIM], + ) + self.condensation = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM], dtype=bool, units="n/a") + self._reset_mask(self.condensation, False) + + # _compute_thv0_thvl0 locals + trflx = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_INTERFACE_DIM, "ntracers"], units="n/a") + tru = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_INTERFACE_DIM, "ntracers"], units="n/a") + tru_emf = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_INTERFACE_DIM, "ntracers"], units="n/a") + umf_zint = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_INTERFACE_DIM], units="n/a") + emf = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_INTERFACE_DIM], units="n/a") + slflx = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_INTERFACE_DIM], units="n/a") + qtflx = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_INTERFACE_DIM], units="n/a") + uflx = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_INTERFACE_DIM], units="n/a") + vflx = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_INTERFACE_DIM], units="n/a") + thlu = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_INTERFACE_DIM], units="n/a") + qtu = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_INTERFACE_DIM], units="n/a") + uu = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_INTERFACE_DIM], units="n/a") + vu = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_INTERFACE_DIM], units="n/a") + wu = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_INTERFACE_DIM], units="n/a") + thvu = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_INTERFACE_DIM], units="n/a") + thlu_emf = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_INTERFACE_DIM], units="n/a") + qtu_emf = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_INTERFACE_DIM], units="n/a") + uu_emf = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_INTERFACE_DIM], units="n/a") + vu_emf = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_INTERFACE_DIM], units="n/a") + uemf = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_INTERFACE_DIM], units="n/a") + ql0 = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + + uten = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + vten = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + qcu = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + qlu = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + qiu = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + cufrc = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + ufrc = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_INTERFACE_DIM], units="n/a") + qlten_det = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + qiten_det = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + qlten_sink = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + qiten_sink = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + sten = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + slten = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + qiten = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + qv0_o = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + ql0_o = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + qi0_o = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + t0_o = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + s0_o = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + u0_o = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + v0_o = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + qt0_o = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + thl0_o = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + thvl0_o = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + ssthl0_o = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + ssqt0_o = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + thv0bot_o = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + thv0top_o = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + thvl0bot_o = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + thvl0top_o = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + ssu0_o = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + ssv0_o = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + cush_inout = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM], units="n/a") + + self._compute_thv0_thvl0( + pmid0_in=pmid0_in, + exnmid0_in=exnmid0_in, + qv0_in=qv0_in, + ql0_in=ql0_in, + qi0_in=qi0_in, + th0_in=th0_in, + zmid0=zmid0_in, + pifc0_in=pifc0_in, + ssthl0=ssthl0, + ssqt0=ssqt0, + ese=self.ese, + esx=self.esx, + umf_out=umf_out, + qtflx_out=qtflx_out, + slflx_out=slflx_out, + uflx_out=uflx_out, + vflx_out=vflx_out, + u0_in=u0_in, + v0_in=v0_in, + k0=k0, + condensation=self.condensation, + dotransport=dotransport, + ssu0=ssu0, + ssv0=ssv0, + tr0=tr0, + sstr0=sstr0, + tr0_o=tr0_o, + sstr0_o=sstr0_o, + trflx=trflx, + trten=trten, + tru=tru, + tru_emf=tru_emf, + umf_zint=umf_zint, + emf=emf, + slflx=slflx, + qtflx=qtflx, + uflx=uflx, + vflx=vflx, + thlu=thlu, + qtu=qtu, + uu=uu, + vu=vu, + wu=wu, + thvu=thvu, + thlu_emf=thlu_emf, + qtu_emf=qtu_emf, + uu_emf=uu_emf, + vu_emf=vu_emf, + uemf=uemf, + thvl0bot=thvl0bot, + thvl0top=thvl0top, + thvl0=thvl0, + qt0=qt0, + t0=t0, + qv0=qv0, + ql0=ql0, + qi0=qi0, + thl0=thl0, + thv0bot=thv0bot, + thv0top=thv0top, + uten=uten, + vten=vten, + s0=s0, + qcu=qcu, + qlu=qlu, + qiu=qiu, + cufrc=cufrc, + ufrc=ufrc, + qlten_det=qlten_det, + qiten_det=qiten_det, + qlten_sink=qlten_sink, + qiten_sink=qiten_sink, + sten=sten, + slten=slten, + qiten=qiten, + qv0_o=qv0_o, + ql0_o=ql0_o, + qi0_o=qi0_o, + t0_o=t0_o, + s0_o=s0_o, + u0_o=u0_o, + v0_o=v0_o, + qt0_o=qt0_o, + thl0_o=thl0_o, + thvl0_o=thvl0_o, + ssthl0_o=ssthl0_o, + ssqt0_o=ssqt0_o, + thv0bot_o=thv0bot_o, + thv0top_o=thv0top_o, + thvl0bot_o=thvl0bot_o, + thvl0top_o=thvl0top_o, + ssu0_o=ssu0_o, + ssv0_o=ssv0_o, + cush_inout=cush_inout, + ) + + return { + "qt0": qt0.view[:], + "s0": s0.view[:], + "ssqt0": ssqt0.view[:], + "ssthl0": ssthl0.view[:], + "sstr0": sstr0.view[:], + "sstr0_o": sstr0_o.view[:], + "ssu0": ssu0.view[:], + "ssv0": ssv0.view[:], + "t0": t0.view[:], + "thl0": thl0.view[:], + "thv0bot": thv0bot.view[:], + "thv0top": thv0top.view[:], + "thvl0": thvl0.view[:], + "thvl0bot": thvl0bot.view[:], + "thvl0top": thvl0top.view[:], + "tr0_o": tr0_o.view[:], + "trten": trten.view[:], + "trflx": trflx.view[:], + "tru": tru.view[:], + "tru_emf": tru_emf.view[:], + "tke": tke_in.view[:], + } diff --git a/GEOSagcm_GridComp/GEOSphysics_GridComp/GEOSmoist_GridComp/pyMoist/tests/savepoint/UW_translate_tests/translate_prevent_negative_condensate.py b/GEOSagcm_GridComp/GEOSphysics_GridComp/GEOSmoist_GridComp/pyMoist/tests/savepoint/UW_translate_tests/translate_prevent_negative_condensate.py new file mode 100644 index 000000000..3c5a43722 --- /dev/null +++ b/GEOSagcm_GridComp/GEOSphysics_GridComp/GEOSmoist_GridComp/pyMoist/tests/savepoint/UW_translate_tests/translate_prevent_negative_condensate.py @@ -0,0 +1,191 @@ +from f90nml import Namelist +from gt4py.cartesian.gtscript import int32 + +import pyMoist.constants as constants +from ndsl import StencilFactory +from ndsl.constants import X_DIM, Y_DIM, Z_DIM +from ndsl.dsl.typing import Float, Int +from ndsl.stencils.testing.grid import Grid +from ndsl.stencils.testing.translate import TranslateFortranData2Py +from ndsl.utils import safe_assign_array +from pyMoist.UW.compute_uwshcu import prevent_negative_condensate +from pyMoist.UW.config import UWConfiguration + + +class TranslatePreventNegativeCondensate(TranslateFortranData2Py): + def __init__( + self, + grid: Grid, + namelist: Namelist, + stencil_factory: StencilFactory, + # UW_config: UWConfiguration, + ): + super().__init__(grid, stencil_factory) + self.stencil_factory = stencil_factory + self.quantity_factory = grid.quantity_factory + # self.UW_config = UW_config + + self._prevent_negative_condensate = self.stencil_factory.from_dims_halo( + func=prevent_negative_condensate, + compute_dims=[X_DIM, Y_DIM, Z_DIM], + externals={"ncnst": 23}, + ) + + # FloatField Inputs + self.in_vars["data_vars"] = { + "condensation": {}, + "dp0": {}, + "qi0": {}, + "qiten": {}, + "ql0": {}, + "qlten": {}, + "qtten": {}, + "qv0": {}, + "qvten": {}, + "s0": {}, + "slten": {}, + "sten": {}, + } + + # Float/Int Inputs + self.in_vars["parameters"] = [ + "dotransport", + "ncnst", + "k0", + "tr0", + "windsrcavg", + "qtsrchgt", + "qtsrc_fac", + "thlsrc_fac", + "frc_rasn", + "rbuoy", + "epsvarw", + "use_CINcin", + "mumin1", + "rmaxfrac", + "PGFc", + "niter_xc", + "criqc", + "rle", + "cridist_opt", + "mixscale", + "rkm", + "dt", + "detrhgt", + "rdrag", + "use_self_detrain", + "detrhgt", + "use_cumpenent", + "rpen", + "use_momenflx", + "rdrop", + "iter_cin", + ] + + # FloatField Outputs + self.out_vars = { + "qiten": self.grid.compute_dict(), + "qlten": self.grid.compute_dict(), + "qvten": self.grid.compute_dict(), + } + + def compute(self, inputs): + self.UW_config = UWConfiguration(Int(inputs["ncnst"]), Int(inputs["k0"]), Int(inputs["windsrcavg"])) + + self.quantity_factory.add_data_dimensions( + { + "ntracers": constants.NCNST, + } + ) + + # Float/Int Inputs + dotransport = Int(inputs["dotransport"]) + k0 = Int(inputs["k0"]) + windsrcavg = Int(inputs["windsrcavg"]) + qtsrchgt = Float(inputs["qtsrchgt"]) + qtsrc_fac = Float(inputs["qtsrc_fac"]) + thlsrc_fac = Float(inputs["thlsrc_fac"]) + frc_rasn = Float(inputs["frc_rasn"]) + rbuoy = Float(inputs["rbuoy"]) + epsvarw = Float(inputs["epsvarw"]) + use_CINcin = Int(inputs["use_CINcin"]) + mumin1 = Float(inputs["mumin1"]) + rmaxfrac = Float(inputs["rmaxfrac"]) + PGFc = Float(inputs["PGFc"]) + dt = Float(inputs["dt"]) + niter_xc = Int(inputs["niter_xc"]) + criqc = Float(inputs["criqc"]) + rle = Float(inputs["rle"]) + cridist_opt = Int(inputs["cridist_opt"]) + mixscale = Float(inputs["mixscale"]) + rdrag = Float(inputs["rdrag"]) + rkm = Float(inputs["rkm"]) + use_self_detrain = Int(inputs["use_self_detrain"]) + detrhgt = Float(inputs["detrhgt"]) + use_cumpenent = Int(inputs["use_cumpenent"]) + rpen = Float(inputs["rpen"]) + use_momenflx = Int(inputs["use_momenflx"]) + rdrop = Float(inputs["rdrop"]) + iter_cin = Int(inputs["iter_cin"]) + + # Inputs + condensation = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM], units="n/a", dtype=bool) + + for i in range(0, 24): + for j in range(0, 24): + if inputs["condensation"][i, j] == 1: + condensation.view[i, j] = False + else: + condensation.view[i, j] = True + + dp0 = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + safe_assign_array(dp0.view[:], inputs["dp0"]) + qi0 = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + safe_assign_array(qi0.view[:], inputs["qi0"]) + qiten = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + safe_assign_array(qiten.view[:], inputs["qiten"]) + ql0 = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + safe_assign_array(ql0.view[:], inputs["ql0"]) + qlten = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + safe_assign_array(qlten.view[:], inputs["qlten"]) + qtten = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + safe_assign_array(qtten.view[:], inputs["qtten"]) + qv0 = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + safe_assign_array(qv0.view[:], inputs["qv0"]) + qvten = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + safe_assign_array(qvten.view[:], inputs["qvten"]) + s0 = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + safe_assign_array(s0.view[:], inputs["s0"]) + slten = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + safe_assign_array(slten.view[:], inputs["slten"]) + sten = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + safe_assign_array(sten.view[:], inputs["sten"]) + + # Outputs + qmin = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + # The iteration you want to test + iter_test = int32(0) + + # # Call stencils + self._prevent_negative_condensate( + condensation=condensation, + qv0=qv0, + dt=dt, + qvten=qvten, + ql0=ql0, + qlten=qlten, + qi0=qi0, + s0=s0, + sten=sten, + dp0=dp0, + qiten=qiten, + k0=k0, + qmin=qmin, + iteration=iter_test, + ) + + return { + "qvten": qvten.view[:], + "qiten": qiten.view[:], + "qlten": qlten.view[:], + } diff --git a/GEOSagcm_GridComp/GEOSphysics_GridComp/GEOSmoist_GridComp/pyMoist/tests/savepoint/UW_translate_tests/translate_recalc_condensate.py b/GEOSagcm_GridComp/GEOSphysics_GridComp/GEOSmoist_GridComp/pyMoist/tests/savepoint/UW_translate_tests/translate_recalc_condensate.py new file mode 100644 index 000000000..1d9e7a989 --- /dev/null +++ b/GEOSagcm_GridComp/GEOSphysics_GridComp/GEOSmoist_GridComp/pyMoist/tests/savepoint/UW_translate_tests/translate_recalc_condensate.py @@ -0,0 +1,282 @@ +from f90nml import Namelist +from gt4py.cartesian.gtscript import int32 + +import pyMoist.constants as constants +from ndsl import StencilFactory +from ndsl.constants import X_DIM, Y_DIM, Z_DIM, Z_INTERFACE_DIM +from ndsl.dsl.typing import Float, Int +from ndsl.stencils.testing.grid import Grid +from ndsl.stencils.testing.translate import TranslateFortranData2Py +from ndsl.utils import safe_assign_array +from pyMoist.saturation_tables import get_saturation_vapor_pressure_table +from pyMoist.UW.compute_uwshcu import recalc_condensate +from pyMoist.UW.config import UWConfiguration + + +# Dev NOTE: The data for this translate test comes from combining two files in +# a single nc file using the following NCO tool: +# `ncks -A ComputeUwshcu-In.nc RecalcCondensate-In.nc` + + +class TranslateRecalcCondensate(TranslateFortranData2Py): + def __init__( + self, + grid: Grid, + namelist: Namelist, + stencil_factory: StencilFactory, + # UW_config: UWConfiguration, + ): + super().__init__(grid, stencil_factory) + self.stencil_factory = stencil_factory + self.quantity_factory = grid.quantity_factory + # self.UW_config = UW_config + + self._recalc_condensate = self.stencil_factory.from_dims_halo( + func=recalc_condensate, + compute_dims=[X_DIM, Y_DIM, Z_DIM], + externals={"ncnst": 23}, + ) + + # FloatField Inputs + self.in_vars["data_vars"] = { + "condensation": {}, + "exnifc0": {}, + "fer": {}, + "kbup": {}, + "kpen": {}, + "pifc0": {}, + "ppen": {}, + "qt0": {}, + "qtu": {}, + "ssqt0": {}, + "ssthl0": {}, + "thl0": {}, + "thlu": {}, + "thv0bot": {}, + "thv0top": {}, + "zifc0": {}, + "krel": {}, + } + + # Float/Int Inputs + self.in_vars["parameters"] = [ + "dotransport", + "ncnst", + "k0", + "tr0", + "windsrcavg", + "qtsrchgt", + "qtsrc_fac", + "thlsrc_fac", + "frc_rasn", + "rbuoy", + "epsvarw", + "use_CINcin", + "mumin1", + "rmaxfrac", + "PGFc", + "niter_xc", + "criqc", + "rle", + "cridist_opt", + "mixscale", + "rkm", + "dt", + "detrhgt", + "rdrag", + "use_self_detrain", + "detrhgt", + "use_cumpenent", + "rpen", + "use_momenflx", + "rdrop", + "iter_cin", + ] + + # FloatField Outputs + self.out_vars = { + "cldhgt": self.grid.compute_dict(), + "diten": self.grid.compute_dict(), + "dwten": self.grid.compute_dict(), + "emf": self.grid.compute_dict(), + "fdr": self.grid.compute_dict(), + "qtu_top": self.grid.compute_dict(), + "thlu_top": self.grid.compute_dict(), + "ufrc": self.grid.compute_dict(), + "umf": self.grid.compute_dict(), + "xco": self.grid.compute_dict(), + } + + def compute(self, inputs): + self.UW_config = UWConfiguration(Int(inputs["ncnst"]), Int(inputs["k0"]), Int(inputs["windsrcavg"])) + + self.quantity_factory.add_data_dimensions( + { + "ntracers": constants.NCNST, + } + ) + + # Float/Int Inputs + dotransport = Int(inputs["dotransport"]) + k0 = Int(inputs["k0"]) + windsrcavg = Int(inputs["windsrcavg"]) + qtsrchgt = Float(inputs["qtsrchgt"]) + qtsrc_fac = Float(inputs["qtsrc_fac"]) + thlsrc_fac = Float(inputs["thlsrc_fac"]) + frc_rasn = Float(inputs["frc_rasn"]) + rbuoy = Float(inputs["rbuoy"]) + epsvarw = Float(inputs["epsvarw"]) + use_CINcin = Int(inputs["use_CINcin"]) + mumin1 = Float(inputs["mumin1"]) + rmaxfrac = Float(inputs["rmaxfrac"]) + PGFc = Float(inputs["PGFc"]) + dt = Float(inputs["dt"]) + niter_xc = Int(inputs["niter_xc"]) + criqc = Float(inputs["criqc"]) + rle = Float(inputs["rle"]) + cridist_opt = Int(inputs["cridist_opt"]) + mixscale = Float(inputs["mixscale"]) + rdrag = Float(inputs["rdrag"]) + rkm = Float(inputs["rkm"]) + use_self_detrain = Int(inputs["use_self_detrain"]) + detrhgt = Float(inputs["detrhgt"]) + use_cumpenent = Int(inputs["use_cumpenent"]) + rpen = Float(inputs["rpen"]) + use_momenflx = Int(inputs["use_momenflx"]) + rdrop = Float(inputs["rdrop"]) + iter_cin = Int(inputs["iter_cin"]) + + # Inputs + condensation = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM], units="n/a", dtype=bool) + + for i in range(0, 24): + for j in range(0, 24): + if inputs["condensation"][i, j] == 1: + condensation.view[i, j] = False + else: + condensation.view[i, j] = True + + exnifc0 = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_INTERFACE_DIM], units="n/a") + safe_assign_array(exnifc0.view[:], inputs["exnifc0"]) + fer = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + safe_assign_array(fer.view[:], inputs["fer"]) + kbup_IJ = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM], units="n/a", dtype=Int) + safe_assign_array(kbup_IJ.view[:], inputs["kbup"] - 1) + kpen = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a", dtype=Int) + safe_assign_array(kpen.view[:], inputs["kpen"] - 1) + pifc0 = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_INTERFACE_DIM], units="n/a") + safe_assign_array(pifc0.view[:], inputs["pifc0"]) + ppen = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM], units="n/a") + safe_assign_array(ppen.view[:], inputs["ppen"]) + qt0 = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + safe_assign_array(qt0.view[:], inputs["qt0"]) + qtu = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_INTERFACE_DIM], units="n/a") + safe_assign_array(qtu.view[:], inputs["qtu"]) + ssqt0 = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + safe_assign_array(ssqt0.view[:], inputs["ssqt0"]) + ssthl0 = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + safe_assign_array(ssthl0.view[:], inputs["ssthl0"]) + thl0 = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + safe_assign_array(thl0.view[:], inputs["thl0"]) + thlu = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_INTERFACE_DIM], units="n/a") + safe_assign_array(thlu.view[:], inputs["thlu"]) + thv0bot = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + safe_assign_array(thv0bot.view[:], inputs["thv0bot"]) + thv0top = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + safe_assign_array(thv0top.view[:], inputs["thv0top"]) + zifc0 = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_INTERFACE_DIM], units="n/a") + safe_assign_array(zifc0.view[:], inputs["zifc0"]) + krel = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a", dtype=Int) + safe_assign_array(krel.view[:], inputs["krel"] - 1) + + # Outputs + + cldhgt = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM], units="n/a") + diten = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + dwten = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + emf = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_INTERFACE_DIM], units="n/a") + fdr = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + qtu_top = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM], units="n/a") + thlu_top = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM], units="n/a") + ufrc = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_INTERFACE_DIM], units="n/a") + umf = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_INTERFACE_DIM], units="n/a") + xco = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + kbup = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a", dtype=Int) + dwten_temp = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + diten_temp = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + umf_temp = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + cush = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM], units="n/a") + + saturation_vapor_pressure_table = get_saturation_vapor_pressure_table(self.stencil_factory.backend) + self.ese = saturation_vapor_pressure_table.ese + self.esx = saturation_vapor_pressure_table.esx + + umf_out = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_INTERFACE_DIM], units="n/a") + qtflx_out = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_INTERFACE_DIM], units="n/a") + slflx_out = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_INTERFACE_DIM], units="n/a") + uflx_out = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_INTERFACE_DIM], units="n/a") + vflx_out = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_INTERFACE_DIM], units="n/a") + cush_inout = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM], units="n/a") + + # The iteration you want to test + iter_test = int32(0) + + # # Call stencils + self._recalc_condensate( + condensation=condensation, + fer=fer, + kpen=kpen, + ppen=ppen, + thlu=thlu, + thl0=thl0, + ssthl0=ssthl0, + qtu=qtu, + qt0=qt0, + ssqt0=ssqt0, + pifc0=pifc0, + ese=self.ese, + esx=self.esx, + umf_out=umf_out, + qtflx_out=qtflx_out, + slflx_out=slflx_out, + uflx_out=uflx_out, + vflx_out=vflx_out, + criqc=criqc, + thv0bot=thv0bot, + thv0top=thv0top, + exnifc0=exnifc0, + zifc0=zifc0, + kbup_IJ=kbup_IJ, + kbup=kbup, + krel=krel, + k0=k0, + umf_zint=umf, + emf=emf, + ufrc=ufrc, + dwten=dwten, + diten=diten, + dwten_temp=dwten_temp, + diten_temp=diten_temp, + thlu_top=thlu_top, + qtu_top=qtu_top, + cldhgt=cldhgt, + umf_temp=umf_temp, + fdr=fdr, + xco=xco, + cush=cush, + cush_inout=cush_inout, + iteration=iter_test, + ) + + return { + "cldhgt": cldhgt.view[:], + "diten": diten.view[:], + "dwten": dwten.view[:], + "emf": emf.view[:], + "fdr": fdr.view[:], + "qtu_top": qtu_top.view[:], + "thlu_top": thlu_top.view[:], + "ufrc": ufrc.view[:], + "umf": umf.view[:], + "xco": xco.view[:], + } diff --git a/GEOSagcm_GridComp/GEOSphysics_GridComp/GEOSmoist_GridComp/pyMoist/tests/savepoint/UW_translate_tests/translate_recalc_environmental_variables.py b/GEOSagcm_GridComp/GEOSphysics_GridComp/GEOSmoist_GridComp/pyMoist/tests/savepoint/UW_translate_tests/translate_recalc_environmental_variables.py new file mode 100644 index 000000000..9bc569384 --- /dev/null +++ b/GEOSagcm_GridComp/GEOSphysics_GridComp/GEOSmoist_GridComp/pyMoist/tests/savepoint/UW_translate_tests/translate_recalc_environmental_variables.py @@ -0,0 +1,273 @@ +from f90nml import Namelist +from gt4py.cartesian.gtscript import int32 + +import pyMoist.constants as constants +from ndsl import StencilFactory +from ndsl.constants import X_DIM, Y_DIM, Z_DIM, Z_INTERFACE_DIM +from ndsl.dsl.typing import Float, Int +from ndsl.stencils.testing.grid import Grid +from ndsl.stencils.testing.translate import TranslateFortranData2Py +from ndsl.utils import safe_assign_array +from pyMoist.saturation_tables import get_saturation_vapor_pressure_table +from pyMoist.UW.compute_uwshcu import recalc_environmental_variables +from pyMoist.UW.config import UWConfiguration + + +class TranslateRecalcEnvVariables(TranslateFortranData2Py): + def __init__( + self, + grid: Grid, + namelist: Namelist, + stencil_factory: StencilFactory, + # UW_config: UWConfiguration, + ): + super().__init__(grid, stencil_factory) + self.stencil_factory = stencil_factory + self.quantity_factory = grid.quantity_factory + # self.UW_config = UW_config + + self._recalc_env_vars = self.stencil_factory.from_dims_halo( + func=recalc_environmental_variables, + compute_dims=[X_DIM, Y_DIM, Z_DIM], + externals={"ncnst": 23}, + ) + + # FloatField Inputs + self.in_vars["data_vars"] = { + "condensation": {}, + "pifc0": {}, + "pmid0": {}, + "exnmid0": {}, + "qi0_s": {}, + "ql0_s": {}, + "qv0_s": {}, + "s0_s": {}, + "t0_s": {}, + "tr0_RecalcEnv": {}, + "u0": {}, + "v0": {}, + } + + # Float/Int Inputs + self.in_vars["parameters"] = [ + "dotransport", + "ncnst", + "k0", + "tr0", + "windsrcavg", + "qtsrchgt", + "qtsrc_fac", + "thlsrc_fac", + "frc_rasn", + "rbuoy", + "epsvarw", + "use_CINcin", + "mumin1", + "rmaxfrac", + "PGFc", + "niter_xc", + "criqc", + "rle", + "cridist_opt", + "mixscale", + "rkm", + "dt", + "detrhgt", + "rdrag", + "use_self_detrain", + "detrhgt", + "use_cumpenent", + "rpen", + "use_momenflx", + "rdrop", + "iter_cin", + ] + + # FloatField Outputs + self.out_vars = { + "qi0": self.grid.compute_dict(), + "ql0": self.grid.compute_dict(), + "qt0": self.grid.compute_dict(), + "qv0": self.grid.compute_dict(), + "s0": self.grid.compute_dict(), + "ssqt0": self.grid.compute_dict(), + "ssthl0": self.grid.compute_dict(), + "sstr0": self.grid.compute_dict(), + "ssu0": self.grid.compute_dict(), + "ssv0": self.grid.compute_dict(), + "t0": self.grid.compute_dict(), + "thl0": self.grid.compute_dict(), + "thv0bot": self.grid.compute_dict(), + "thv0top": self.grid.compute_dict(), + "thvl0top": self.grid.compute_dict(), + "thvl0bot": self.grid.compute_dict(), + } + + def compute(self, inputs): + self.UW_config = UWConfiguration(Int(inputs["ncnst"]), Int(inputs["k0"]), Int(inputs["windsrcavg"])) + + self.quantity_factory.add_data_dimensions( + { + "ntracers": constants.NCNST, + } + ) + + # Float/Int Inputs + dotransport = Int(inputs["dotransport"]) + k0 = Int(inputs["k0"]) + windsrcavg = Int(inputs["windsrcavg"]) + qtsrchgt = Float(inputs["qtsrchgt"]) + qtsrc_fac = Float(inputs["qtsrc_fac"]) + thlsrc_fac = Float(inputs["thlsrc_fac"]) + frc_rasn = Float(inputs["frc_rasn"]) + rbuoy = Float(inputs["rbuoy"]) + epsvarw = Float(inputs["epsvarw"]) + use_CINcin = Int(inputs["use_CINcin"]) + mumin1 = Float(inputs["mumin1"]) + rmaxfrac = Float(inputs["rmaxfrac"]) + PGFc = Float(inputs["PGFc"]) + dt = Float(inputs["dt"]) + niter_xc = Int(inputs["niter_xc"]) + criqc = Float(inputs["criqc"]) + rle = Float(inputs["rle"]) + cridist_opt = Int(inputs["cridist_opt"]) + mixscale = Float(inputs["mixscale"]) + rdrag = Float(inputs["rdrag"]) + rkm = Float(inputs["rkm"]) + use_self_detrain = Int(inputs["use_self_detrain"]) + detrhgt = Float(inputs["detrhgt"]) + use_cumpenent = Int(inputs["use_cumpenent"]) + rpen = Float(inputs["rpen"]) + use_momenflx = Int(inputs["use_momenflx"]) + rdrop = Float(inputs["rdrop"]) + iter_cin = Int(inputs["iter_cin"]) + + # Inputs + condensation = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM], units="n/a", dtype=bool) + + for i in range(0, 24): + for j in range(0, 24): + if inputs["condensation"][i, j] == 1: + condensation.view[i, j] = False + else: + condensation.view[i, j] = True + + pifc0 = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_INTERFACE_DIM], units="n/a") + safe_assign_array(pifc0.view[:], inputs["pifc0"]) + pmid0 = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + safe_assign_array(pmid0.view[:], inputs["pmid0"]) + exnmid0 = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + safe_assign_array(exnmid0.view[:], inputs["exnmid0"]) + qi0_s = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + safe_assign_array(qi0_s.view[:], inputs["qi0_s"]) + ql0_s = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + safe_assign_array(ql0_s.view[:], inputs["ql0_s"]) + qv0_s = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + safe_assign_array(qv0_s.view[:], inputs["qv0_s"]) + s0_s = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + safe_assign_array(s0_s.view[:], inputs["s0_s"]) + t0_s = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + safe_assign_array(t0_s.view[:], inputs["t0_s"]) + tr0 = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM, "ntracers"], units="n/a") + safe_assign_array(tr0.view[:], inputs["tr0_RecalcEnv"]) + u0 = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + safe_assign_array(u0.view[:], inputs["u0"]) + v0 = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + safe_assign_array(v0.view[:], inputs["v0"]) + + # Outputs + qi0 = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + ql0 = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + qt0 = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + qv0 = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + s0 = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + ssqt0 = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + ssthl0 = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + sstr0 = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM, "ntracers"], units="n/a") + ssu0 = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + ssv0 = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + t0 = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + thl0 = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + thvl0 = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + thv0bot = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + thv0top = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + thvl0top = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + thvl0bot = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + tr0_temp = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + + saturation_vapor_pressure_table = get_saturation_vapor_pressure_table(self.stencil_factory.backend) + self.ese = saturation_vapor_pressure_table.ese + self.esx = saturation_vapor_pressure_table.esx + + umf_out = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_INTERFACE_DIM], units="n/a") + qtflx_out = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_INTERFACE_DIM], units="n/a") + slflx_out = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_INTERFACE_DIM], units="n/a") + uflx_out = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_INTERFACE_DIM], units="n/a") + vflx_out = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_INTERFACE_DIM], units="n/a") + cush_inout = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM], units="n/a") + + # The iteration you want to test + iter_test = int32(0) + + # # Call stencils + self._recalc_env_vars( + condensation=condensation, + qv0_s=qv0_s, + ql0_s=ql0_s, + qi0_s=qi0_s, + s0_s=s0_s, + t0_s=t0_s, + exnmid0=exnmid0, + pmid0=pmid0, + dotransport=dotransport, + sstr0=sstr0, + tr0=tr0, + u0=u0, + v0=v0, + pifc0=pifc0, + ese=self.ese, + esx=self.esx, + umf_out=umf_out, + qtflx_out=qtflx_out, + slflx_out=slflx_out, + uflx_out=uflx_out, + vflx_out=vflx_out, + thvl0bot=thvl0bot, + thv0bot=thv0bot, + thvl0top=thvl0top, + thv0top=thv0top, + thl0=thl0, + qt0=qt0, + thvl0=thvl0, + ssthl0=ssthl0, + ssu0=ssu0, + ssv0=ssv0, + ssqt0=ssqt0, + qv0=qv0, + ql0=ql0, + qi0=qi0, + s0=s0, + t0=t0, + tr0_temp=tr0_temp, + cush_inout=cush_inout, + iteration=iter_test, + ) + + return { + "qi0": qi0.view[:], + "ql0": ql0.view[:], + "qt0": qt0.view[:], + "qv0": qv0.view[:], + "s0": s0.view[:], + "ssqt0": ssqt0.view[:], + "ssthl0": ssthl0.view[:], + "sstr0": sstr0.view[:], + "ssu0": ssu0.view[:], + "ssv0": ssv0.view[:], + "t0": t0.view[:], + "thl0": thl0.view[:], + "thv0bot": thv0bot.view[:], + "thv0top": thv0top.view[:], + "thvl0top": thvl0top.view[:], + "thvl0bot": thvl0bot.view[:], + } diff --git a/GEOSagcm_GridComp/GEOSphysics_GridComp/GEOSmoist_GridComp/pyMoist/tests/savepoint/UW_translate_tests/translate_tracer_tendencies.py b/GEOSagcm_GridComp/GEOSphysics_GridComp/GEOSmoist_GridComp/pyMoist/tests/savepoint/UW_translate_tests/translate_tracer_tendencies.py new file mode 100644 index 000000000..c2c665e7b --- /dev/null +++ b/GEOSagcm_GridComp/GEOSphysics_GridComp/GEOSmoist_GridComp/pyMoist/tests/savepoint/UW_translate_tests/translate_tracer_tendencies.py @@ -0,0 +1,165 @@ +from f90nml import Namelist +from gt4py.cartesian.gtscript import int32 + +import pyMoist.constants as constants +from ndsl import StencilFactory +from ndsl.constants import X_DIM, Y_DIM, Z_DIM, Z_INTERFACE_DIM +from ndsl.dsl.typing import Float, Int +from ndsl.stencils.testing.grid import Grid +from ndsl.stencils.testing.translate import TranslateFortranData2Py +from ndsl.utils import safe_assign_array +from pyMoist.UW.compute_uwshcu import calc_tracer_tendencies +from pyMoist.UW.config import UWConfiguration + + +class TranslateTracerTendencies(TranslateFortranData2Py): + def __init__( + self, + grid: Grid, + namelist: Namelist, + stencil_factory: StencilFactory, + # UW_config: UWConfiguration, + ): + super().__init__(grid, stencil_factory) + self.stencil_factory = stencil_factory + self.quantity_factory = grid.quantity_factory + # self.UW_config = UW_config + + self._calc_tracer_tendencies = self.stencil_factory.from_dims_halo( + func=calc_tracer_tendencies, + compute_dims=[X_DIM, Y_DIM, Z_DIM], + externals={"ncnst": 23}, + ) + + # FloatField Inputs + self.in_vars["data_vars"] = { + "condensation": {}, + "dp0": {}, + "tr0_TracerTendencies": {}, + "trflx": {}, + } + + # Float/Int Inputs + self.in_vars["parameters"] = [ + "dotransport", + "ncnst", + "k0", + "tr0", + "windsrcavg", + "qtsrchgt", + "qtsrc_fac", + "thlsrc_fac", + "frc_rasn", + "rbuoy", + "epsvarw", + "use_CINcin", + "mumin1", + "rmaxfrac", + "PGFc", + "niter_xc", + "criqc", + "rle", + "cridist_opt", + "mixscale", + "rkm", + "dt", + "detrhgt", + "rdrag", + "use_self_detrain", + "detrhgt", + "use_cumpenent", + "rpen", + "use_momenflx", + "rdrop", + "iter_cin", + ] + + # FloatField Outputs + self.out_vars = { + "trten": self.grid.compute_dict(), + } + + def compute(self, inputs): + self.UW_config = UWConfiguration(Int(inputs["ncnst"]), Int(inputs["k0"]), Int(inputs["windsrcavg"])) + + self.quantity_factory.add_data_dimensions( + { + "ntracers": constants.NCNST, + } + ) + + # Float/Int Inputs + dotransport = Int(inputs["dotransport"]) + k0 = Int(inputs["k0"]) + windsrcavg = Int(inputs["windsrcavg"]) + qtsrchgt = Float(inputs["qtsrchgt"]) + qtsrc_fac = Float(inputs["qtsrc_fac"]) + thlsrc_fac = Float(inputs["thlsrc_fac"]) + frc_rasn = Float(inputs["frc_rasn"]) + rbuoy = Float(inputs["rbuoy"]) + epsvarw = Float(inputs["epsvarw"]) + use_CINcin = Int(inputs["use_CINcin"]) + mumin1 = Float(inputs["mumin1"]) + rmaxfrac = Float(inputs["rmaxfrac"]) + PGFc = Float(inputs["PGFc"]) + dt = Float(inputs["dt"]) + niter_xc = Int(inputs["niter_xc"]) + criqc = Float(inputs["criqc"]) + rle = Float(inputs["rle"]) + cridist_opt = Int(inputs["cridist_opt"]) + mixscale = Float(inputs["mixscale"]) + rdrag = Float(inputs["rdrag"]) + rkm = Float(inputs["rkm"]) + use_self_detrain = Int(inputs["use_self_detrain"]) + detrhgt = Float(inputs["detrhgt"]) + use_cumpenent = Int(inputs["use_cumpenent"]) + rpen = Float(inputs["rpen"]) + use_momenflx = Int(inputs["use_momenflx"]) + rdrop = Float(inputs["rdrop"]) + iter_cin = Int(inputs["iter_cin"]) + + # Inputs + condensation = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM], units="n/a", dtype=bool) + + for i in range(0, 24): + for j in range(0, 24): + if inputs["condensation"][i, j] == 1: + condensation.view[i, j] = False + else: + condensation.view[i, j] = True + + dp0 = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + safe_assign_array(dp0.view[:], inputs["dp0"]) + tr0 = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM, "ntracers"], units="n/a") + safe_assign_array(tr0.view[:], inputs["tr0_TracerTendencies"]) + trflx = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_INTERFACE_DIM, "ntracers"], units="n/a") + safe_assign_array(trflx.view[:], inputs["trflx"]) + + # Outputs + trten = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM, "ntracers"], units="n/a") + trflx_d = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_INTERFACE_DIM, "ntracers"], units="n/a") + trflx_u = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_INTERFACE_DIM, "ntracers"], units="n/a") + trmin = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, "ntracers"], units="n/a") + + # The iteration you want to test + iter_test = int32(0) + + # # Call stencils + self._calc_tracer_tendencies( + condensation=condensation, + dotransport=dotransport, + k0=k0, + dt=dt, + dp0=dp0, + trflx_d=trflx_d, + trflx_u=trflx_u, + trmin=trmin, + tr0=tr0, + trflx=trflx, + trten=trten, + iteration=iter_test, + ) + + return { + "trten": trten.view[:], + } diff --git a/GEOSagcm_GridComp/GEOSphysics_GridComp/GEOSmoist_GridComp/pyMoist/tests/savepoint/UW_translate_tests/translate_update_output_variables1.py b/GEOSagcm_GridComp/GEOSphysics_GridComp/GEOSmoist_GridComp/pyMoist/tests/savepoint/UW_translate_tests/translate_update_output_variables1.py new file mode 100644 index 000000000..4ac0f676c --- /dev/null +++ b/GEOSagcm_GridComp/GEOSphysics_GridComp/GEOSmoist_GridComp/pyMoist/tests/savepoint/UW_translate_tests/translate_update_output_variables1.py @@ -0,0 +1,243 @@ +from f90nml import Namelist +from gt4py.cartesian.gtscript import int32 + +import pyMoist.constants as constants +from ndsl import StencilFactory +from ndsl.constants import X_DIM, Y_DIM, Z_DIM, Z_INTERFACE_DIM +from ndsl.dsl.typing import Float, Int +from ndsl.stencils.testing.grid import Grid +from ndsl.stencils.testing.translate import TranslateFortranData2Py +from ndsl.utils import safe_assign_array +from pyMoist.UW.compute_uwshcu import update_output_variables1 +from pyMoist.UW.config import UWConfiguration + + +class TranslateUpdateOutputVars1(TranslateFortranData2Py): + def __init__( + self, + grid: Grid, + namelist: Namelist, + stencil_factory: StencilFactory, + # UW_config: UWConfiguration, + ): + super().__init__(grid, stencil_factory) + self.stencil_factory = stencil_factory + self.quantity_factory = grid.quantity_factory + # self.UW_config = UW_config + + self._update_output_vars1 = self.stencil_factory.from_dims_halo( + func=update_output_variables1, + compute_dims=[X_DIM, Y_DIM, Z_DIM], + externals={"ncnst": 23}, + ) + + # FloatField Inputs + self.in_vars["data_vars"] = { + "condensation": {}, + "cufrc": {}, + "cush": {}, + "dcm": {}, + "kinv": {}, + "qiten": {}, + "qlten": {}, + "qrten": {}, + "qsten": {}, + "qvten": {}, + "sten": {}, + "umf": {}, + "uten": {}, + "vten": {}, + "zifc0": {}, + } + + # Float/Int Inputs + self.in_vars["parameters"] = [ + "dotransport", + "ncnst", + "k0", + "tr0", + "windsrcavg", + "qtsrchgt", + "qtsrc_fac", + "thlsrc_fac", + "frc_rasn", + "rbuoy", + "epsvarw", + "use_CINcin", + "mumin1", + "rmaxfrac", + "PGFc", + "niter_xc", + "criqc", + "rle", + "cridist_opt", + "mixscale", + "rkm", + "dt", + "detrhgt", + "rdrag", + "use_self_detrain", + "detrhgt", + "use_cumpenent", + "rpen", + "use_momenflx", + "rdrop", + "iter_cin", + ] + + # FloatField Outputs + self.out_vars = { + "cufrc_out": self.grid.compute_dict(), + "cush_inout": self.grid.compute_dict(), + "dcm_out": self.grid.compute_dict(), + "qiten_out": self.grid.compute_dict(), + "qlten_out": self.grid.compute_dict(), + "qrten_out": self.grid.compute_dict(), + "qsten_out": self.grid.compute_dict(), + "qvten_out": self.grid.compute_dict(), + "sten_out": self.grid.compute_dict(), + "umf_out": self.grid.compute_dict(), + "uten_out": self.grid.compute_dict(), + "vten_out": self.grid.compute_dict(), + } + + def compute(self, inputs): + self.UW_config = UWConfiguration(Int(inputs["ncnst"]), Int(inputs["k0"]), Int(inputs["windsrcavg"])) + + self.quantity_factory.add_data_dimensions( + { + "ntracers": constants.NCNST, + } + ) + + # Float/Int Inputs + dotransport = Int(inputs["dotransport"]) + k0 = Int(inputs["k0"]) + windsrcavg = Int(inputs["windsrcavg"]) + qtsrchgt = Float(inputs["qtsrchgt"]) + qtsrc_fac = Float(inputs["qtsrc_fac"]) + thlsrc_fac = Float(inputs["thlsrc_fac"]) + frc_rasn = Float(inputs["frc_rasn"]) + rbuoy = Float(inputs["rbuoy"]) + epsvarw = Float(inputs["epsvarw"]) + use_CINcin = Int(inputs["use_CINcin"]) + mumin1 = Float(inputs["mumin1"]) + rmaxfrac = Float(inputs["rmaxfrac"]) + PGFc = Float(inputs["PGFc"]) + dt = Float(inputs["dt"]) + niter_xc = Int(inputs["niter_xc"]) + criqc = Float(inputs["criqc"]) + rle = Float(inputs["rle"]) + cridist_opt = Int(inputs["cridist_opt"]) + mixscale = Float(inputs["mixscale"]) + rdrag = Float(inputs["rdrag"]) + rkm = Float(inputs["rkm"]) + use_self_detrain = Int(inputs["use_self_detrain"]) + detrhgt = Float(inputs["detrhgt"]) + use_cumpenent = Int(inputs["use_cumpenent"]) + rpen = Float(inputs["rpen"]) + use_momenflx = Int(inputs["use_momenflx"]) + rdrop = Float(inputs["rdrop"]) + iter_cin = Int(inputs["iter_cin"]) + + # Inputs + condensation = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM], units="n/a", dtype=bool) + + for i in range(0, 24): + for j in range(0, 24): + if inputs["condensation"][i, j] == 1: + condensation.view[i, j] = False + else: + condensation.view[i, j] = True + + cufrc = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + safe_assign_array(cufrc.view[:], inputs["cufrc"]) + cush = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM], units="n/a") + safe_assign_array(cush.view[:], inputs["cush"]) + dcm = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + safe_assign_array(dcm.view[:], inputs["dcm"]) + kinv = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a", dtype=Int) + safe_assign_array(kinv.view[:], inputs["kinv"]) + qiten = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + safe_assign_array(qiten.view[:], inputs["qiten"]) + qlten = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + safe_assign_array(qlten.view[:], inputs["qlten"]) + qrten = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + safe_assign_array(qrten.view[:], inputs["qrten"]) + qsten = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + safe_assign_array(qsten.view[:], inputs["qsten"]) + qvten = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + safe_assign_array(qvten.view[:], inputs["qvten"]) + sten = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + safe_assign_array(sten.view[:], inputs["sten"]) + umf = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_INTERFACE_DIM], units="n/a") + safe_assign_array(umf.view[:], inputs["umf"]) + uten = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + safe_assign_array(uten.view[:], inputs["uten"]) + vten = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + safe_assign_array(vten.view[:], inputs["vten"]) + zifc0 = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_INTERFACE_DIM], units="n/a") + safe_assign_array(zifc0.view[:], inputs["zifc0"]) + + # Outputs + cufrc_out = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + cush_inout = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + dcm_out = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + qiten_out = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + qlten_out = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + qrten_out = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + qsten_out = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + qvten_out = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + sten_out = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + umf_out = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_INTERFACE_DIM], units="n/a") + uten_out = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + vten_out = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + + # The iteration you want to test + iter_test = int32(0) + + # # Call stencils + self._update_output_vars1( + condensation=condensation, + umf_zint=umf, + kinv=kinv, + zifc0=zifc0, + dcm=dcm, + qvten=qvten, + qlten=qlten, + qiten=qiten, + sten=sten, + uten=uten, + vten=vten, + qrten=qrten, + qsten=qsten, + cufrc=cufrc, + cush=cush, + umf_out=umf_out, + dcm_out=dcm_out, + qvten_out=qvten_out, + qlten_out=qlten_out, + qiten_out=qiten_out, + sten_out=sten_out, + uten_out=uten_out, + vten_out=vten_out, + qrten_out=qrten_out, + qsten_out=qsten_out, + cufrc_out=cufrc_out, + cush_inout=cush_inout, + ) + + return { + "cufrc_out": cufrc_out.view[:], + "cush_inout": cush_inout.view[:], + "dcm_out": dcm_out.view[:], + "qiten_out": qiten_out.view[:], + "qlten_out": qlten_out.view[:], + "qrten_out": qrten_out.view[:], + "qsten_out": qsten_out.view[:], + "qvten_out": qvten_out.view[:], + "sten_out": sten_out.view[:], + "umf_out": umf_out.view[:], + "uten_out": uten_out.view[:], + "vten_out": vten_out.view[:], + } diff --git a/GEOSagcm_GridComp/GEOSphysics_GridComp/GEOSmoist_GridComp/pyMoist/tests/savepoint/UW_translate_tests/translate_update_output_variables2.py b/GEOSagcm_GridComp/GEOSphysics_GridComp/GEOSmoist_GridComp/pyMoist/tests/savepoint/UW_translate_tests/translate_update_output_variables2.py new file mode 100644 index 000000000..a547e1bee --- /dev/null +++ b/GEOSagcm_GridComp/GEOSphysics_GridComp/GEOSmoist_GridComp/pyMoist/tests/savepoint/UW_translate_tests/translate_update_output_variables2.py @@ -0,0 +1,245 @@ +from f90nml import Namelist +from gt4py.cartesian.gtscript import int32 + +import pyMoist.constants as constants +from ndsl import StencilFactory +from ndsl.constants import X_DIM, Y_DIM, Z_DIM, Z_INTERFACE_DIM +from ndsl.dsl.typing import Float, Int +from ndsl.stencils.testing.grid import Grid +from ndsl.stencils.testing.translate import TranslateFortranData2Py +from ndsl.utils import safe_assign_array +from pyMoist.UW.compute_uwshcu import update_output_variables2 +from pyMoist.UW.config import UWConfiguration + + +class TranslateUpdateOutputVars2(TranslateFortranData2Py): + def __init__( + self, + grid: Grid, + namelist: Namelist, + stencil_factory: StencilFactory, + # UW_config: UWConfiguration, + ): + super().__init__(grid, stencil_factory) + self.stencil_factory = stencil_factory + self.quantity_factory = grid.quantity_factory + # self.UW_config = UW_config + + self._update_output_vars2 = self.stencil_factory.from_dims_halo( + func=update_output_variables2, + compute_dims=[X_DIM, Y_DIM, Z_DIM], + externals={"ncnst": 23}, + ) + + # FloatField Inputs + self.in_vars["data_vars"] = { + "condensation": {}, + "fdr": {}, + "fer": {}, + "qiten_det": {}, + "qiten_sink": {}, + "qlten_det": {}, + "qlten_sink": {}, + "qtflx": {}, + "slflx": {}, + "tr0_inout": {}, + "trten": {}, + "uflx": {}, + "vflx": {}, + "kpen": {}, + } + + # Float/Int Inputs + self.in_vars["parameters"] = [ + "dotransport", + "ncnst", + "k0", + "tr0", + "windsrcavg", + "qtsrchgt", + "qtsrc_fac", + "thlsrc_fac", + "frc_rasn", + "rbuoy", + "epsvarw", + "use_CINcin", + "mumin1", + "rmaxfrac", + "PGFc", + "niter_xc", + "criqc", + "rle", + "cridist_opt", + "mixscale", + "rkm", + "dt", + "detrhgt", + "rdrag", + "use_self_detrain", + "detrhgt", + "use_cumpenent", + "rpen", + "use_momenflx", + "rdrop", + "iter_cin", + ] + + # FloatField Outputs + self.out_vars = { + "fdr_out": self.grid.compute_dict(), + "fer_out": self.grid.compute_dict(), + "qidet_out": self.grid.compute_dict(), + "qisub_out": self.grid.compute_dict(), + "qldet_out": self.grid.compute_dict(), + "qlsub_out": self.grid.compute_dict(), + "qtflx_out": self.grid.compute_dict(), + "slflx_out": self.grid.compute_dict(), + "tr0_inout": self.grid.compute_dict(), + "uflx_out": self.grid.compute_dict(), + "vflx_out": self.grid.compute_dict(), + "ndrop_out": self.grid.compute_dict(), + "nice_out": self.grid.compute_dict(), + } + + def compute(self, inputs): + self.UW_config = UWConfiguration(Int(inputs["ncnst"]), Int(inputs["k0"]), Int(inputs["windsrcavg"])) + + self.quantity_factory.add_data_dimensions( + { + "ntracers": constants.NCNST, + } + ) + + # Float/Int Inputs + dotransport = Int(inputs["dotransport"]) + k0 = Int(inputs["k0"]) + windsrcavg = Int(inputs["windsrcavg"]) + qtsrchgt = Float(inputs["qtsrchgt"]) + qtsrc_fac = Float(inputs["qtsrc_fac"]) + thlsrc_fac = Float(inputs["thlsrc_fac"]) + frc_rasn = Float(inputs["frc_rasn"]) + rbuoy = Float(inputs["rbuoy"]) + epsvarw = Float(inputs["epsvarw"]) + use_CINcin = Int(inputs["use_CINcin"]) + mumin1 = Float(inputs["mumin1"]) + rmaxfrac = Float(inputs["rmaxfrac"]) + PGFc = Float(inputs["PGFc"]) + dt = Float(inputs["dt"]) + niter_xc = Int(inputs["niter_xc"]) + criqc = Float(inputs["criqc"]) + rle = Float(inputs["rle"]) + cridist_opt = Int(inputs["cridist_opt"]) + mixscale = Float(inputs["mixscale"]) + rdrag = Float(inputs["rdrag"]) + rkm = Float(inputs["rkm"]) + use_self_detrain = Int(inputs["use_self_detrain"]) + detrhgt = Float(inputs["detrhgt"]) + use_cumpenent = Int(inputs["use_cumpenent"]) + rpen = Float(inputs["rpen"]) + use_momenflx = Int(inputs["use_momenflx"]) + rdrop = Float(inputs["rdrop"]) + iter_cin = Int(inputs["iter_cin"]) + + # Inputs + condensation = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM], units="n/a", dtype=bool) + + for i in range(0, 24): + for j in range(0, 24): + if inputs["condensation"][i, j] == 1: + condensation.view[i, j] = False + else: + condensation.view[i, j] = True + + fdr = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + safe_assign_array(fdr.view[:], inputs["fdr"]) + fer = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + safe_assign_array(fer.view[:], inputs["fer"]) + kpen = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a", dtype=Int) + safe_assign_array(kpen.view[:], inputs["kpen"] - 1) + qiten_det = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + safe_assign_array(qiten_det.view[:], inputs["qiten_det"]) + qiten_sink = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + safe_assign_array(qiten_sink.view[:], inputs["qiten_sink"]) + qlten_det = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + safe_assign_array(qlten_det.view[:], inputs["qlten_det"]) + qlten_sink = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + safe_assign_array(qlten_sink.view[:], inputs["qlten_sink"]) + qtflx = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_INTERFACE_DIM], units="n/a") + safe_assign_array(qtflx.view[:], inputs["qtflx"]) + slflx = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_INTERFACE_DIM], units="n/a") + safe_assign_array(slflx.view[:], inputs["slflx"]) + tr0_inout = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM, "ntracers"], units="n/a") + safe_assign_array(tr0_inout.view[:], inputs["tr0_inout"]) + trten = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM, "ntracers"], units="n/a") + safe_assign_array(trten.view[:], inputs["trten"]) + uflx = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_INTERFACE_DIM], units="n/a") + safe_assign_array(uflx.view[:], inputs["uflx"]) + vflx = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_INTERFACE_DIM], units="n/a") + safe_assign_array(vflx.view[:], inputs["vflx"]) + + # Outputs + fdr_out = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + fer_out = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + qidet_out = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + qisub_out = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + qldet_out = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + qlsub_out = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + qtflx_out = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_INTERFACE_DIM], units="n/a") + slflx_out = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_INTERFACE_DIM], units="n/a") + tr0_inout = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM, "ntracers"], units="n/a") + uflx_out = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_INTERFACE_DIM], units="n/a") + vflx_out = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_INTERFACE_DIM], units="n/a") + ndrop_out = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + nice_out = self.quantity_factory.zeros(dims=[X_DIM, Y_DIM, Z_DIM], units="n/a") + + # The iteration you want to test + iter_test = int32(0) + + # # Call stencils + self._update_output_vars2( + condensation=condensation, + dotransport=dotransport, + qldet_out=qldet_out, + qidet_out=qidet_out, + qlsub_out=qlsub_out, + qisub_out=qisub_out, + ndrop_out=ndrop_out, + nice_out=nice_out, + qtflx_out=qtflx_out, + slflx_out=slflx_out, + uflx_out=uflx_out, + vflx_out=vflx_out, + fer=fer, + fdr=fdr, + kpen=kpen, + fer_out=fer_out, + fdr_out=fdr_out, + dt=dt, + rdrop=rdrop, + qlten_det=qlten_det, + qiten_det=qiten_det, + qlten_sink=qlten_sink, + qiten_sink=qiten_sink, + qtflx=qtflx, + slflx=slflx, + uflx=uflx, + vflx=vflx, + tr0_inout=tr0_inout, + trten=trten, + ) + + return { + "fdr_out": fdr_out.view[:], + "fer_out": fer_out.view[:], + "qidet_out": qidet_out.view[:], + "qisub_out": qisub_out.view[:], + "qldet_out": qldet_out.view[:], + "qlsub_out": qlsub_out.view[:], + "qtflx_out": qtflx_out.view[:], + "slflx_out": slflx_out.view[:], + "tr0_inout": tr0_inout.view[:], + "uflx_out": uflx_out.view[:], + "vflx_out": vflx_out.view[:], + "ndrop_out": ndrop_out.view[:], + "nice_out": nice_out.view[:], + } diff --git a/GEOSagcm_GridComp/GEOSphysics_GridComp/GEOSmoist_GridComp/pyMoist/tests/savepoint/__init__.py b/GEOSagcm_GridComp/GEOSphysics_GridComp/GEOSmoist_GridComp/pyMoist/tests/savepoint/__init__.py index 6bbb13da3..e196066f4 100644 --- a/GEOSagcm_GridComp/GEOSphysics_GridComp/GEOSmoist_GridComp/pyMoist/tests/savepoint/__init__.py +++ b/GEOSagcm_GridComp/GEOSphysics_GridComp/GEOSmoist_GridComp/pyMoist/tests/savepoint/__init__.py @@ -20,6 +20,34 @@ from .saturation_tables.translate_saturation_tables import Translatesaturation_tables from .translate_aer_activation import TranslateAerActivation from .translate_compute_uwshcu import TranslateComputeUwshcuInv +from .UW_translate_tests.translate_adjust_implicit_CIN_inputs1 import TranslateAdjustImplicitCINInputs1 +from .UW_translate_tests.translate_adjust_implicit_CIN_inputs2 import TranslateAdjustImplicitCINInputs2 +from .UW_translate_tests.translate_average_initial_and_final_CIN1 import TranslateAverageInitialFinalCIN1 +from .UW_translate_tests.translate_average_initial_and_final_CIN3 import TranslateAverageInitialFinalCIN3 +from .UW_translate_tests.translate_buoyancy_sorting import TranslateBuoyancySorting +from .UW_translate_tests.translate_buoyancy_sorting_fluxes import TranslateBuoyancySortingFluxes +from .UW_translate_tests.translate_calc_cumulus_condensate_at_interface import TranslateCalcCumulusCondensate +from .UW_translate_tests.translate_calc_entrainment_mass_flux import TranslateCalcEntrainmentMassFlux +from .UW_translate_tests.translate_calc_momentum_tendency import TranslateMomentumTendency +from .UW_translate_tests.translate_calc_pbl_fluxes import TranslateCalcPblFluxes +from .UW_translate_tests.translate_calc_ppen import TranslateCalcPpen +from .UW_translate_tests.translate_calc_thermodynamic_tendencies import TranslateThermodynamicTendencies +from .UW_translate_tests.translate_compute_cin_cinlcl import TranslateComputeCinCinlcl +from .UW_translate_tests.translate_compute_del_CIN import TranslateComputeDelCIN +from .UW_translate_tests.translate_compute_diagnostic_outputs import TranslateComputeDiagnosticOutputs +from .UW_translate_tests.translate_compute_uwshcu_invert_after import TranslateComputeUwshcuInvertAfter +from .UW_translate_tests.translate_define_env_properties import TranslateDefineEnvProperties +from .UW_translate_tests.translate_define_prel_cbmf import TranslateDefinePrelCbmf +from .UW_translate_tests.translate_find_klcl import TranslateFindKlcl +from .UW_translate_tests.translate_find_pbl import TranslateFindPbl +from .UW_translate_tests.translate_penetrative_entrainment_fluxes import TranslatePenetrativeEntrainmentFluxes +from .UW_translate_tests.translate_prepare_inputs import TranslatePrepareInputs +from .UW_translate_tests.translate_prevent_negative_condensate import TranslatePreventNegativeCondensate +from .UW_translate_tests.translate_recalc_condensate import TranslateRecalcCondensate +from .UW_translate_tests.translate_recalc_environmental_variables import TranslateRecalcEnvVariables +from .UW_translate_tests.translate_tracer_tendencies import TranslateTracerTendencies +from .UW_translate_tests.translate_update_output_variables1 import TranslateUpdateOutputVars1 +from .UW_translate_tests.translate_update_output_variables2 import TranslateUpdateOutputVars2 __all__ = [ diff --git a/GEOSagcm_GridComp/GEOSphysics_GridComp/GEOSmoist_GridComp/pyMoist/tests/savepoint/translate_compute_uwshcu.py b/GEOSagcm_GridComp/GEOSphysics_GridComp/GEOSmoist_GridComp/pyMoist/tests/savepoint/translate_compute_uwshcu.py index 6e363cb29..56b1da929 100644 --- a/GEOSagcm_GridComp/GEOSphysics_GridComp/GEOSmoist_GridComp/pyMoist/tests/savepoint/translate_compute_uwshcu.py +++ b/GEOSagcm_GridComp/GEOSphysics_GridComp/GEOSmoist_GridComp/pyMoist/tests/savepoint/translate_compute_uwshcu.py @@ -25,10 +25,6 @@ def __init__( self.stencil_factory = stencil_factory self.quantity_factory = grid.quantity_factory - self.ntracers_quantity_factory = ComputeUwshcuInv.make_ntracers_quantity_factory( - self.quantity_factory, - ) - # FloatField Inputs self.in_vars["data_vars"] = { "pifc0_inv": {}, @@ -121,7 +117,7 @@ def __init__( } def make_ntracers_ijk_field(self, data) -> Quantity: - qty = self.ntracers_quantity_factory.empty( + qty = self.quantity_factory.empty( [X_DIM, Y_DIM, Z_DIM, "ntracers"], "n/a", ) @@ -143,7 +139,7 @@ def compute(self, inputs): compute_uwshcu = ComputeUwshcuInv( self.stencil_factory, - self.grid.quantity_factory, + self.quantity_factory, self.UW_config, ) diff --git a/GEOSagcm_GridComp/GEOSphysics_GridComp/GEOSmoist_GridComp/pyMoist/tests/scripts/overrides.yml b/GEOSagcm_GridComp/GEOSphysics_GridComp/GEOSmoist_GridComp/pyMoist/tests/scripts/overrides.yml index 546efea71..df0fbdcfa 100644 --- a/GEOSagcm_GridComp/GEOSphysics_GridComp/GEOSmoist_GridComp/pyMoist/tests/scripts/overrides.yml +++ b/GEOSagcm_GridComp/GEOSphysics_GridComp/GEOSmoist_GridComp/pyMoist/tests/scripts/overrides.yml @@ -4,6 +4,11 @@ ComputeUwshcuInv: absolute_epsilon: 1.00e-08 relative_fraction: 1.00e-04 ulp_threshold: 1700.0 + - backend: dace:cpu_kfirst + multimodal: + absolute_epsilon: 1.00e-08 + ulp_threshold: 1000 + GFDL_1M_sublimate: - backend: dace:cpu_kfirst