Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion Project.toml
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ MLJ = "add582a8-e3ab-11e8-2d5e-e98b27df1bc7"
EmulatorModelsExt = ["DataFrames", "MLJ"]

[compat]
ClimaParams = "1"
ClimaParams = "1.0.18"
DataFrames = "1.6"
DocStringExtensions = "0.8, 0.9"
FastGaussQuadrature = "1"
Expand Down
7 changes: 3 additions & 4 deletions src/IceNucleation.jl
Original file line number Diff line number Diff line change
Expand Up @@ -172,8 +172,8 @@ Compute number of ice crystals formed from heterogeneous condensation freezing

# Arguments
- `ip`: The [`CMP.MorrisonMilbrandt2014`](@ref) paramterization, where:
+ `het_a`: empirical parameter [C⁻¹]
+ `het_B`: water-type dependent parameter [cm⁻³ s⁻¹]
+ `het_a`: empirical parameter [K⁻¹]
+ `het_B`: water-type dependent parameter [m⁻³ s⁻¹]
+ `T₀`: freezing temperature [K]
- `T`: air temperature [K],
- `Nₗ`: number of droplets [m⁻³],
Expand All @@ -200,9 +200,8 @@ Nᵤ(t) = N₀ exp(-B Vₗ [exp(aTₛ)] t)
```
"""
function P3_het_N_i((; het_a, het_B, T₀)::CMP.MorrisonMilbrandt2014, T, Nₗ, Vₗ, Δt)
Vₗ_cm³ = Vₗ * 1_000_000 # converted from m^3 to cm^3
Tₛ = T₀ - T
return Nₗ * (1 - exp(-het_B * Vₗ_cm³ * Δt * exp(het_a * Tₛ)))
return Nₗ * (1 - exp(-het_B * Vₗ * Δt * exp(het_a * Tₛ)))
end

"""
Expand Down
18 changes: 8 additions & 10 deletions src/parameters/IceNucleation.jl
Original file line number Diff line number Diff line change
Expand Up @@ -87,9 +87,9 @@ $(DocStringExtensions.FIELDS)
c₂::FT
"T₀"
T₀::FT
"heterogeneous freezing parameter a [°C^-1]"
"heterogeneous freezing parameter a [K⁻¹]"
het_a::FT
"heterogeneous freezing parameter B [cm^-3 s^-1]"
"heterogeneous freezing parameter B [m⁻³ s⁻¹]"
het_B::FT
end

Expand Down Expand Up @@ -121,30 +121,28 @@ $(DocStringExtensions.FIELDS)

# Callable interface

(rf::RainFreezing)(T, T₀) → het_B * 10⁶ * exp(het_a * (T₀ - T))
(rf::RainFreezing)(T, T₀) → het_B * exp(het_a * (T₀ - T))

Returns the volumetric freezing rate in SI units [m⁻³ s⁻¹].
The stored `het_B` is in [cm⁻³ s⁻¹]; the factor 10⁶ converts cm³ → m³.
Compute the volumetric freezing rate [m⁻³ s⁻¹]
"""
@kwdef struct RainFreezing{FT} <: ParametersType
"empirical parameter [°K⁻¹]"
"empirical parameter [K⁻¹]"
het_a::FT
"water-type dependent parameter [cm⁻³ s⁻¹]"
"water-type dependent parameter [m⁻³ s⁻¹]"
het_B::FT
end

function RainFreezing(td::CP.ParamDict)
name_map = (;
:BarklieGokhale1959_a_parameter => :het_a,
:BarklieGokhale1959_B_parameter => :het_B, # TODO: Fix units in CP, then here
:BarklieGokhale1959_B_parameter => :het_B,
)
parameters = CP.get_parameter_values(td, name_map, "CloudMicrophysics")
return RainFreezing(; parameters...)
end

# Callable: returns the Bigg (1953) volumetric freezing rate [m⁻³(water) s⁻¹]
# het_B is stored in [cm⁻³ s⁻¹]; multiply by 10⁶ to convert to [m⁻³(water) s⁻¹].
(rf::RainFreezing)(T, T₀) = rf.het_B * 1_000_000 * exp(rf.het_a * (T₀ - T))
(rf::RainFreezing)(T, T₀) = rf.het_B * exp(rf.het_a * (T₀ - T))

"""
IceNucleationParameters{FT, DEP, HOM, P3_type}
Expand Down
2 changes: 1 addition & 1 deletion test/gpu_tests.jl
Original file line number Diff line number Diff line change
Expand Up @@ -1003,7 +1003,7 @@ function test_gpu(FT)
FT(0.0002736160475969029)
else
# loss of precision due to
# `exp(-B * V_l_converted * Δt * exp(a * Tₛ))` -> 0.9999999 (Float32)
# `exp(-het_B * V_l * Δt * exp(het_a * Tₛ))` -> 0.9999999 (Float32)
# instead of 0.9999998631919762 (Float64).
FT(0.00023841858f0)
end
Expand Down
Loading