@@ -15,7 +15,6 @@ import ClimaCore.Fields as Fields
1515 # Arguments for the first method (most commonly called):
1616 ts::TD.ThermodynamicState,
1717 ::Type{C3}, # Covariant3 vector type, for projecting gradients
18- ∂θv∂z_unsat::AbstractField, # Vertical gradient of virtual potential temperature in unsaturated part
1918 ∂qt∂z_sat::AbstractField, # Vertical gradient of total specific humidity in saturated part
2019 ∂θli∂z_sat::AbstractField, # Vertical gradient of liquid-ice potential temperature in saturated part
2120 local_geometry::Fields.LocalGeometry,
@@ -50,7 +49,6 @@ Arguments:
5049- `moisture_model`: Moisture model (e.g., `EquilMoistModel`, `NonEquilMoistModel`).
5150- `ts`: Center-level thermodynamic state of the environment.
5251- `C3`: The `ClimaCore.Geometry.Covariant3Vector` type, used for projecting input vertical gradients.
53- - `∂θv∂z_unsat`: Field of vertical gradients of virtual potential temperature in the unsaturated part.
5452- `∂qt∂z_sat`: Field of vertical gradients of total specific humidity in the saturated part.
5553- `∂θli∂z_sat`: Field of vertical gradients of liquid-ice potential temperature in the saturated part.
5654- `local_geometry`: Field of local geometry at cell centers, used for gradient projection.
@@ -66,8 +64,8 @@ function buoyancy_gradients(
6664 thermo_params,
6765 moisture_model,
6866 ts,
67+ cf,
6968 :: Type{C3} ,
70- ∂θv∂z_unsat,
7169 ∂qt∂z_sat,
7270 ∂θli∂z_sat,
7371 ᶜlg,
@@ -78,9 +76,9 @@ function buoyancy_gradients(
7876 moisture_model,
7977 EnvBuoyGradVars (
8078 ts,
79+ cf,
8180 projected_vector_buoy_grad_vars (
8281 C3,
83- ∂θv∂z_unsat,
8482 ∂qt∂z_sat,
8583 ∂θli∂z_sat,
8684 ᶜlg,
@@ -99,13 +97,10 @@ function buoyancy_gradients(
9997
10098 g = TDP. grav (thermo_params)
10199 Rv_over_Rd = TDP. Rv_over_Rd (thermo_params)
102- R_d = TDP. R_d (thermo_params)
103100 R_v = TDP. R_v (thermo_params)
104101
105102 ts = bg_model. ts
106- p = TD. air_pressure (thermo_params, ts)
107- Π = TD. exner_given_pressure (thermo_params, p)
108- ∂b∂θv = g * (R_d * TD. air_density (thermo_params, ts) / p) * Π
103+ ∂b∂θv = g / TD. virtual_pottemp (thermo_params, ts)
109104
110105 t_sat = TD. air_temperature (thermo_params, ts)
111106 λ = TD. liquid_fraction (thermo_params, ts)
@@ -115,20 +110,25 @@ function buoyancy_gradients(
115110 cp_m = TD. cp_m (thermo_params, ts)
116111 qv_sat = TD. vapor_specific_humidity (thermo_params, ts)
117112 qt_sat = TD. total_specific_humidity (thermo_params, ts)
113+ θ = TD. dry_pottemp (thermo_params, ts)
114+ ∂b∂θli_unsat = ∂b∂θv * (1 + (Rv_over_Rd - 1 ) * qt_sat)
115+ ∂b∂qt_unsat = ∂b∂θv * (Rv_over_Rd - 1 ) * θ
118116 ∂b∂θli_sat = (
119117 ∂b∂θv *
120118 (1 + Rv_over_Rd * (1 + lh / R_v / t_sat) * qv_sat - qt_sat) /
121- (1 + lh * lh / cp_m / R_v / t_sat / t_sat * qv_sat)
119+ (1 + lh^ 2 / cp_m / R_v / t_sat^ 2 * qv_sat)
122120 )
123121 ∂b∂qt_sat =
124122 (lh / cp_m / t_sat * ∂b∂θli_sat - ∂b∂θv) *
125- TD . dry_pottemp (thermo_params, ts)
123+ θ
126124
127125 ∂b∂z = buoyancy_gradient_chain_rule (
128126 ebgc,
129127 bg_model,
130128 thermo_params,
131129 ∂b∂θv,
130+ ∂b∂θli_unsat,
131+ ∂b∂qt_unsat,
132132 ∂b∂θli_sat,
133133 ∂b∂qt_sat,
134134 )
@@ -177,17 +177,21 @@ function buoyancy_gradient_chain_rule(
177177 bg_model:: EnvBuoyGradVars ,
178178 thermo_params,
179179 ∂b∂θv,
180+ ∂b∂θli_unsat,
181+ ∂b∂qt_unsat,
180182 ∂b∂θli_sat,
181183 ∂b∂qt_sat,
182184)
183- en_cld_frac = ifelse (TD. has_condensate (thermo_params, bg_model. ts), 1 , 0 )
185+ # en_cld_frac = ifelse(TD.has_condensate(thermo_params, bg_model.ts), 1, 0)
184186
187+ ∂b∂z_θli_unsat = ∂b∂θli_unsat * bg_model.∂θli∂z_sat
188+ ∂b∂z_qt_unsat = ∂b∂qt_unsat * bg_model.∂qt∂z_sat
189+ ∂b∂z_unsat = ∂b∂z_θli_unsat + ∂b∂z_qt_unsat
185190 ∂b∂z_θl_sat = ∂b∂θli_sat * bg_model.∂θli∂z_sat
186191 ∂b∂z_qt_sat = ∂b∂qt_sat * bg_model.∂qt∂z_sat
187192 ∂b∂z_sat = ∂b∂z_θl_sat + ∂b∂z_qt_sat
188- ∂b∂z_unsat = ∂b∂θv * bg_model.∂θv∂z_unsat
189193
190- ∂b∂z = (1 - en_cld_frac ) * ∂b∂z_unsat + en_cld_frac * ∂b∂z_sat
194+ ∂b∂z = (1 - bg_model . cf ) * ∂b∂z_unsat + bg_model . cf * ∂b∂z_sat
191195
192196 return ∂b∂z
193197end
0 commit comments