Skip to content

Commit

Permalink
Merge pull request #315 from CliMA/ne/params
Browse files Browse the repository at this point in the history
Refactor parameters to use ClimaParameters API
  • Loading branch information
nefrathenrici authored Feb 9, 2024
2 parents 362d26f + 06aac2d commit d2bc21f
Show file tree
Hide file tree
Showing 22 changed files with 763 additions and 660 deletions.
4 changes: 2 additions & 2 deletions Project.toml
Original file line number Diff line number Diff line change
Expand Up @@ -12,10 +12,10 @@ SpecialFunctions = "276daf66-3868-5448-9aa4-cd146d93841b"
Thermodynamics = "b60c26fb-14c3-4610-9d3e-2d17fe7ff00c"

[compat]
CLIMAParameters = "0.8"
CLIMAParameters = "0.8.6"
DocStringExtensions = "0.8, 0.9"
ForwardDiff = "0.10"
RootSolvers = "0.3, 0.4"
SpecialFunctions = "1, 2"
Thermodynamics = "0.9, 0.10, 0.11"
Thermodynamics = "0.11"
julia = "1.6"
4 changes: 2 additions & 2 deletions docs/src/guides/Parameters.jl
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ open(override_file, "w") do io
end
toml_dict = CP.create_toml_dict(FT; override_file)
isfile(override_file) && rm(override_file; force = true)
const overwrite = CMP.Rain(FT, toml_dict)
const overwrite = CMP.Rain(toml_dict)

nothing #hide

Expand All @@ -51,7 +51,7 @@ override_file = Dict(
Dict("value" => 13, "type" => "float"),
)
toml_dict2 = CP.create_toml_dict(FT; override_file)
const overwrite2 = CMP.Rain(FT, toml_dict2)
const overwrite2 = CMP.Rain(toml_dict2)

nothing #hide

Expand Down
8 changes: 4 additions & 4 deletions docs/src/plots/Thersholds_transitions.jl
Original file line number Diff line number Diff line change
Expand Up @@ -27,10 +27,10 @@ for i in 1:3
toml_dict = CP.create_toml_dict(FT; override_file)
isfile(override_file) && rm(override_file; force = true)

push!(rain, CMP.Rain(FT, toml_dict))
push!(B1994, CMP.B1994(FT, toml_dict))
push!(TC1980, CMP.TC1980(FT, toml_dict))
push!(LD2004, CMP.LD2004(FT, toml_dict))
push!(rain, CMP.Rain(toml_dict))
push!(B1994, CMP.B1994(toml_dict))
push!(TC1980, CMP.TC1980(toml_dict))
push!(LD2004, CMP.LD2004(toml_dict))
end

# example values
Expand Down
24 changes: 13 additions & 11 deletions src/parameters/AerosolATD.jl
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ Mohler et al, 2006. DOI: 10.5194/acp-6-3007-2006
# Fields
$(DocStringExtensions.FIELDS)
"""
struct ArizonaTestDust{FT} <: AerosolType{FT}
Base.@kwdef struct ArizonaTestDust{FT} <: AerosolType{FT}
"S₀ for T > T_thr [-]"
S₀_warm::FT
"S₀ for T < T_thr [-]"
Expand All @@ -20,15 +20,17 @@ struct ArizonaTestDust{FT} <: AerosolType{FT}
a_cold::FT
end

function ArizonaTestDust(
::Type{FT},
toml_dict::CP.AbstractTOMLDict = CP.create_toml_dict(FT),
) where {FT}
(; data) = toml_dict
return ArizonaTestDust(
FT(data["Mohler2006_S0_warm_ArizonaTestDust"]["value"]),
FT(data["Mohler2006_S0_cold_ArizonaTestDust"]["value"]),
FT(data["Mohler2006_a_warm_ArizonaTestDust"]["value"]),
FT(data["Mohler2006_a_cold_ArizonaTestDust"]["value"]),
ArizonaTestDust(::Type{FT}) where {FT <: AbstractFloat} =
ArizonaTestDust(CP.create_toml_dict(FT))

function ArizonaTestDust(td::CP.AbstractTOMLDict)
name_map = (;
:Mohler2006_S0_warm_ArizonaTestDust => :S₀_warm,
:Mohler2006_S0_cold_ArizonaTestDust => :S₀_cold,
:Mohler2006_a_warm_ArizonaTestDust => :a_warm,
:Mohler2006_a_cold_ArizonaTestDust => :a_cold,
)
parameters = CP.get_parameter_values(td, name_map, "CloudMicrophysics")
FT = CP.float_type(td)
return ArizonaTestDust{FT}(; parameters...)
end
26 changes: 14 additions & 12 deletions src/parameters/AerosolActivation.jl
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ DOI: 10.1029/1999JD901161
# Fields
$(DocStringExtensions.FIELDS)
"""
struct AerosolActivationParameters{FT} <: ParametersType{FT}
Base.@kwdef struct AerosolActivationParameters{FT} <: ParametersType{FT}
"molar mass of water [kg/mol]"
M_w::FT
"gas constant [J/mol/K]"
Expand All @@ -22,16 +22,18 @@ struct AerosolActivationParameters{FT} <: ParametersType{FT}
g::FT
end

function AerosolActivationParameters(
::Type{FT},
toml_dict::CP.AbstractTOMLDict = CP.create_toml_dict(FT),
) where {FT}
(; data) = toml_dict
return AerosolActivationParameters(
FT(data["molar_mass_water"]["value"]),
FT(data["gas_constant"]["value"]),
FT(data["density_liquid_water"]["value"]),
FT(data["surface_tension_water"]["value"]),
FT(data["gravitational_acceleration"]["value"]),
AerosolActivationParameters(::Type{FT}) where {FT <: AbstractFloat} =
AerosolActivationParameters(CP.create_toml_dict(FT))

function AerosolActivationParameters(td::CP.AbstractTOMLDict)
name_map = (;
:molar_mass_water => :M_w,
:gas_constant => :R,
:density_liquid_water => :ρ_w,
:surface_tension_water => ,
:gravitational_acceleration => :g,
)
parameters = CP.get_parameter_values(td, name_map, "CloudMicrophysics")
FT = CP.float_type(td)
return AerosolActivationParameters{FT}(; parameters...)
end
28 changes: 15 additions & 13 deletions src/parameters/AerosolDesertDust.jl
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ and from Mohler et al, 2006 DOI: 10.5194/acp-6-3007-2006
# Fields
$(DocStringExtensions.FIELDS)
"""
struct DesertDust{FT} <: AerosolType{FT}
Base.@kwdef struct DesertDust{FT} <: AerosolType{FT}
"S₀ for T > T_thr [-]"
S₀_warm::FT
"S₀ for T < T_thr [-]"
Expand All @@ -25,17 +25,19 @@ struct DesertDust{FT} <: AerosolType{FT}
ABIFM_c::FT
end

function DesertDust(
::Type{FT},
toml_dict::CP.AbstractTOMLDict = CP.create_toml_dict(FT),
) where {FT}
(; data) = toml_dict
return DesertDust(
FT(data["Mohler2006_S0_warm_DesertDust"]["value"]),
FT(data["Mohler2006_S0_cold_DesertDust"]["value"]),
FT(data["Mohler2006_a_warm_DesertDust"]["value"]),
FT(data["Mohler2006_a_cold_DesertDust"]["value"]),
FT(data["AlpertKnopf2016_J_ABIFM_m_DesertDust"]["value"]),
FT(data["AlpertKnopf2016_J_ABIFM_c_DesertDust"]["value"]),
DesertDust(::Type{FT}) where {FT <: AbstractFloat} =
DesertDust(CP.create_toml_dict(FT))

function DesertDust(td::CP.AbstractTOMLDict)
name_map = (;
:Mohler2006_S0_warm_DesertDust => :S₀_warm,
:Mohler2006_S0_cold_DesertDust => :S₀_cold,
:Mohler2006_a_warm_DesertDust => :a_warm,
:Mohler2006_a_cold_DesertDust => :a_cold,
:AlpertKnopf2016_J_ABIFM_m_DesertDust => :ABIFM_m,
:AlpertKnopf2016_J_ABIFM_c_DesertDust => :ABIFM_c,
)
parameters = CP.get_parameter_values(td, name_map, "CloudMicrophysics")
FT = CP.float_type(td)
return DesertDust{FT}(; parameters...)
end
20 changes: 11 additions & 9 deletions src/parameters/AerosolFeldspar.jl
Original file line number Diff line number Diff line change
Expand Up @@ -9,20 +9,22 @@ DOI: 10.1039/D1EA00077B
# Fields
$(DocStringExtensions.FIELDS)
"""
struct Feldspar{FT} <: AerosolType{FT}
Base.@kwdef struct Feldspar{FT} <: AerosolType{FT}
"m coefficient for deposition nucleation J [-]"
deposition_m::FT
"c coefficient for deposition nucleation J [-]"
deposition_c::FT
end

function Feldspar(
::Type{FT},
toml_dict::CP.AbstractTOMLDict = CP.create_toml_dict(FT),
) where {FT}
(; data) = toml_dict
return Feldspar(
FT(data["Alpert2022_J_deposition_m_Feldspar"]["value"]),
FT(data["Alpert2022_J_deposition_c_Feldspar"]["value"]),
Feldspar(::Type{FT}) where {FT <: AbstractFloat} =
Feldspar(CP.create_toml_dict(FT))

function Feldspar(td::CP.AbstractTOMLDict)
name_map = (;
:Alpert2022_J_deposition_m_Feldspar => :deposition_m,
:Alpert2022_J_deposition_c_Feldspar => :deposition_c,
)
parameters = CP.get_parameter_values(td, name_map, "CloudMicrophysics")
FT = CP.float_type(td)
return Feldspar{FT}(; parameters...)
end
20 changes: 11 additions & 9 deletions src/parameters/AerosolFerrihydrite.jl
Original file line number Diff line number Diff line change
Expand Up @@ -9,20 +9,22 @@ DOI: 10.1039/D1EA00077B
# Fields
$(DocStringExtensions.FIELDS)
"""
struct Ferrihydrite{FT} <: AerosolType{FT}
Base.@kwdef struct Ferrihydrite{FT} <: AerosolType{FT}
"m coefficient for deposition nucleation J [-]"
deposition_m::FT
"c coefficient for deposition nucleation J [-]"
deposition_c::FT
end

function Ferrihydrite(
::Type{FT},
toml_dict::CP.AbstractTOMLDict = CP.create_toml_dict(FT),
) where {FT}
(; data) = toml_dict
return Ferrihydrite(
FT(data["Alpert2022_J_deposition_m_Ferrihydrite"]["value"]),
FT(data["Alpert2022_J_deposition_c_Ferrihydrite"]["value"]),
Ferrihydrite(::Type{FT}) where {FT <: AbstractFloat} =
Ferrihydrite(CP.create_toml_dict(FT))

function Ferrihydrite(td::CP.AbstractTOMLDict)
name_map = (;
:Alpert2022_J_deposition_m_Ferrihydrite => :deposition_m,
:Alpert2022_J_deposition_c_Ferrihydrite => :deposition_c,
)
parameters = CP.get_parameter_values(td, name_map, "CloudMicrophysics")
FT = CP.float_type(td)
return Ferrihydrite{FT}(; parameters...)
end
19 changes: 10 additions & 9 deletions src/parameters/AerosolIllite.jl
Original file line number Diff line number Diff line change
Expand Up @@ -9,20 +9,21 @@ DOI: 10.1039/C3FD00035D
# Fields
$(DocStringExtensions.FIELDS)
"""
struct Illite{FT} <: AerosolType{FT}
Base.@kwdef struct Illite{FT} <: AerosolType{FT}
"m coefficient for immersion freezing J [-]"
ABIFM_m::FT
"c coefficient for immersion freezing J [-]"
ABIFM_c::FT
end

function Illite(
::Type{FT},
toml_dict::CP.AbstractTOMLDict = CP.create_toml_dict(FT),
) where {FT}
(; data) = toml_dict
return Illite(
FT(data["KnopfAlpert2013_J_ABIFM_m_Illite"]["value"]),
FT(data["KnopfAlpert2013_J_ABIFM_c_Illite"]["value"]),
Illite(::Type{FT}) where {FT <: AbstractFloat} = Illite(CP.create_toml_dict(FT))

function Illite(td::CP.AbstractTOMLDict)
name_map = (;
:KnopfAlpert2013_J_ABIFM_m_Illite => :ABIFM_m,
:KnopfAlpert2013_J_ABIFM_c_Illite => :ABIFM_c,
)
parameters = CP.get_parameter_values(td, name_map, "CloudMicrophysics")
FT = CP.float_type(td)
return Illite{FT}(; parameters...)
end
24 changes: 13 additions & 11 deletions src/parameters/AerosolKaolinite.jl
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ DOI: 10.1002/2016JD025817
# Fields
$(DocStringExtensions.FIELDS)
"""
struct Kaolinite{FT} <: AerosolType{FT}
Base.@kwdef struct Kaolinite{FT} <: AerosolType{FT}
"m coefficient for deposition nucleation J [-]"
deposition_m::FT
"c coefficient for deposition nucleation J [-]"
Expand All @@ -21,15 +21,17 @@ struct Kaolinite{FT} <: AerosolType{FT}
ABIFM_c::FT
end

function Kaolinite(
::Type{FT},
toml_dict::CP.AbstractTOMLDict = CP.create_toml_dict(FT),
) where {FT}
(; data) = toml_dict
return Kaolinite(
FT(data["China2017_J_deposition_m_Kaolinite"]["value"]),
FT(data["China2017_J_deposition_c_Kaolinite"]["value"]),
FT(data["KnopfAlpert2013_J_ABIFM_m_Kaolinite"]["value"]),
FT(data["KnopfAlpert2013_J_ABIFM_c_Kaolinite"]["value"]),
Kaolinite(::Type{FT}) where {FT <: AbstractFloat} =
Kaolinite(CP.create_toml_dict(FT))

function Kaolinite(td::CP.AbstractTOMLDict)
name_map = (;
:China2017_J_deposition_m_Kaolinite => :deposition_m,
:China2017_J_deposition_c_Kaolinite => :deposition_c,
:KnopfAlpert2013_J_ABIFM_m_Kaolinite => :ABIFM_m,
:KnopfAlpert2013_J_ABIFM_c_Kaolinite => :ABIFM_c,
)
parameters = CP.get_parameter_values(td, name_map, "CloudMicrophysics")
FT = CP.float_type(td)
return Kaolinite{FT}(; parameters...)
end
Loading

0 comments on commit d2bc21f

Please sign in to comment.