Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

water based deposition nucleation #292

Merged
merged 1 commit into from
Jan 29, 2024
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
34 changes: 28 additions & 6 deletions docs/bibliography.bib
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,18 @@ @article{Alpert2016
year = {2016}
}

@Article{Alpert2022,
author = "Alpert, Peter A. and Boucly, Anthony and Yang, Shuo and Yang, Huanyu and Kilchhofer, Kevin and Luo, Zhaochu and Padeste, Celestino and Finizio, Simone and Ammann, Markus and Watts, Benjamin",
title = "Ice nucleation imaged with X-ray spectro-microscopy",
journal = " Environ. Sci.: Atmos.",
year = "2022",
volume = "2",
issue = "3",
pages = "335-351",
publisher = "RSC",
doi = "10.1039/D1EA00077B",
}

@Article{Baumgartner2022,
author = {Baumgartner, M. and Rolf, C. and Groo{\ss}, J.-U. and Schneider, J. and Schorr, T. and M\"ohler, O. and Spichtinger, P. and Kr\"amer, M.},
title = {New investigations on homogeneous ice nucleation: the effects of water activity and water saturation formulations},
Expand Down Expand Up @@ -74,10 +86,22 @@ @article{Chen2022
journal={Atmospheric Research},
volume={293},
number={106171},
doi = {https://doi.org/10.1016/j.atmosres.2022.106171},
doi = {10.1016/j.atmosres.2022.106171},
year = {2022}
}

@article{China2017,
author = {China, Swarup and Alpert, Peter A. and Zhang, Bo and Schum, Simeon and Dzepina, Katja and Wright, Kendra and Owen, R. Chris and Fialho, Paulo and Mazzoleni, Lynn R. and Mazzoleni, Claudio and Knopf, Daniel A.},
title = {Ice cloud formation potential by free tropospheric particles from long-range transport over the Northern Atlantic Ocean},
journal = {Journal of Geophysical Research: Atmospheres},
volume = {122},
number = {5},
pages = {3065-3079},
keywords = {ice cloud, free troposphere, long-range transport, ice nucleation, atmospheric aging},
doi = {10.1002/2016JD025817},
year = {2017}
}

@article{Desai2019,
title = {Aerosol-Mediated Glaciation of Mixed-Phase Clouds: Steady-State Laboratory Measurements},
author = {Desai, Neel and Chandrakar, KK and Kinney, G and Cantrell, W and Shaw, RA},
Expand Down Expand Up @@ -110,7 +134,7 @@ @article{Glassmeier2016
address = {Boston MA, USA},
volume = {73},
number = {12},
doi = {https://doi.org/10.1175/JAS-D-16-0008.1},
doi = {10.1175/JAS-D-16-0008.1},
pages = {5003 - 5023}
}

Expand Down Expand Up @@ -164,7 +188,7 @@ @article{Karcher2006
journal = {Journal of Geophysical Research: Atmospheres},
volume = {111},
number = {D1},
doi = {https://doi.org/10.1029/2005JD006219},
doi = {10.1029/2005JD006219},
year = {2006}
}

Expand Down Expand Up @@ -335,9 +359,7 @@ @article{Luo1995
volume = {22},
number = {3},
pages = {247-250},
doi = {https://doi.org/10.1029/94GL02988},
url = {https://agupubs.onlinelibrary.wiley.com/doi/abs/10.1029/94GL02988},
eprint = {https://agupubs.onlinelibrary.wiley.com/doi/pdf/10.1029/94GL02988},
doi = {10.1029/94GL02988},
year = {1995}
}

Expand Down
3 changes: 3 additions & 0 deletions docs/src/API.md
Original file line number Diff line number Diff line change
Expand Up @@ -86,6 +86,7 @@ AerosolActivation.total_M_activated
```@docs
HetIceNucleation
HetIceNucleation.dust_activated_number_fraction
HetIceNucleation.deposition_J
HetIceNucleation.ABIFM_J
```

Expand Down Expand Up @@ -127,6 +128,8 @@ Parameters.ArizonaTestDust
Parameters.DesertDust
Parameters.Illite
Parameters.Kaolinite
Parameters.Feldspar
Parameters.Ferrihydrite
Parameters.Seasalt
Parameters.Sulfate
Parameters.AerosolActivationParameters
Expand Down
22 changes: 21 additions & 1 deletion docs/src/IceNucleation.md
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,25 @@ Both parameters are dependent on aerosol properties and temperature.
freezing occurs in a different ice nucleation mode
(either a second deposition or other condensation type mode).

## Water Activity Based Deposition Nucleation
The water activity based deposition nucleation model is analagous to ABIFM
for immersion freezing (see [ABIFM for Sulphuric Acid Containing Droplets](https://clima.github.io/CloudMicrophysics.jl/dev/IceNucleation/#ABIFM-for-Sulphuric-Acid-Containing-Droplets)
section below). It calculates a nucleation rate coefficient, ``J``, which
describes the number of ice nuclei formed per unit area of INP per unit time
dependent on the water activity criterion, ``\Delta a_w``, and aerosol type.
The form of this empirical parameterization is taken from [KnopfAlpert2013](@cite).
Currently, we have parameters for kaolinite, feldspar, and ferrihydrite derived
from [China2017](@cite) and [Alpert2022](@cite).

```math
\begin{equation}
log_{10}J_{deposition} = m \Delta a_w + c
\end{equation}
```
where ``J`` is in units of ``cm^{-2}s^{-1}``. Note that our source code returns
``J`` in SI units. ``m`` and ``c`` are aerosol dependent coefficients. They will
have different values than those for ABIFM.

## ABIFM for Sulphuric Acid Containing Droplets
Water Activity-Based Immersion Freezing Model (ABFIM)
is a method of parameterizing immersion freezing inspired by the time-dependent
Expand All @@ -66,7 +85,8 @@ Using empirical coefficients, ``m`` and ``c``, from [KnopfAlpert2013](@cite),
\end{equation}
```
A parameterization for ``\Delta a_w`` can be found in `Common.jl`. More information on
it can be found in the `Water Activity` section.
it can be found in the `Water Activity` section. ``m`` and ``c`` here are different
from the ``m`` and ``c`` parameters for deposition nucleation.

!!! note

Expand Down
26 changes: 24 additions & 2 deletions src/IceNucleation.jl
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ import ..Parameters as CMP
import Thermodynamics as TD

export dust_activated_number_fraction
export deposition_J
export ABIFM_J

"""
Expand Down Expand Up @@ -41,7 +42,28 @@ function dust_activated_number_fraction(
end

"""
ABIFM_J(dust, ip, Δa_w)
deposition_J(dust, Δa_w)

- `dust` - a struct with dust parameters
- `Δa_w` - change in water activity [unitless].

Returns the deposition nucleation rate coefficient, `J`, in m^-2 s^-1
for different minerals in liquid droplets.
The free parameters `m` and `c` are derived from China et al (2017)
see DOI: 10.1002/2016JD025817
"""
function deposition_J(
dust::Union{CMP.Ferrihydrite, CMP.Feldspar, CMP.Kaolinite},
Δa_w::FT,
) where {FT}

logJ::FT = dust.deposition_m * Δa_w + dust.deposition_c

return max(FT(0), FT(10)^logJ * FT(1e4)) # converts cm^-2 s^-1 to m^-2 s^-1
end

"""
ABIFM_J(dust, Δa_w)

- `dust` - a struct with dust parameters
- `Δa_w` - change in water activity [unitless].
Expand All @@ -56,7 +78,7 @@ function ABIFM_J(
Δa_w::FT,
) where {FT}

logJ::FT = dust.m * Δa_w + dust.c
logJ::FT = dust.ABIFM_m * Δa_w + dust.ABIFM_c

return max(FT(0), FT(10)^logJ * FT(1e4)) # converts cm^-2 s^-1 to m^-2 s^-1
end
Expand Down
4 changes: 2 additions & 2 deletions src/parameters/AerosolDesertDust.jl
Original file line number Diff line number Diff line change
Expand Up @@ -20,9 +20,9 @@ struct DesertDust{FT} <: AerosolType{FT}
"a for T < T_thr [-]"
a_cold::FT
"m coefficient for immersion freezing J [-]"
m::FT
ABIFM_m::FT
"c coefficient for immersion freezing J [-]"
c::FT
ABIFM_c::FT
end

function DesertDust(
Expand Down
28 changes: 28 additions & 0 deletions src/parameters/AerosolFeldspar.jl
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
export Feldspar

"""
Feldspar{FT}

Parameters for Feldspar from Alpert et al 2022
DOI: 10.1039/D1EA00077B

# Fields
$(DocStringExtensions.FIELDS)
"""
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"]),
)
end
28 changes: 28 additions & 0 deletions src/parameters/AerosolFerrihydrite.jl
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
export Ferrihydrite

"""
Ferrihydrite{FT}

Parameters for Ferrihydrite from Alpert et al 2022
DOI: 10.1039/D1EA00077B

# Fields
$(DocStringExtensions.FIELDS)
"""
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"]),
)
end
4 changes: 2 additions & 2 deletions src/parameters/AerosolIllite.jl
Original file line number Diff line number Diff line change
Expand Up @@ -11,9 +11,9 @@ $(DocStringExtensions.FIELDS)
"""
struct Illite{FT} <: AerosolType{FT}
"m coefficient for immersion freezing J [-]"
m::FT
ABIFM_m::FT
"c coefficient for immersion freezing J [-]"
c::FT
ABIFM_c::FT
end

function Illite(
Expand Down
13 changes: 10 additions & 3 deletions src/parameters/AerosolKaolinite.jl
Original file line number Diff line number Diff line change
Expand Up @@ -4,16 +4,21 @@ export Kaolinite
Kaolinite{FT}

Parameters for kaolinite from Knopf and Alpert 2013
DOI: 10.1039/C3FD00035D
DOI: 10.1039/C3FD00035D and China et al 2017
DOI: 10.1002/2016JD025817

# Fields
$(DocStringExtensions.FIELDS)
"""
struct Kaolinite{FT} <: AerosolType{FT}
"m coefficient for deposition nucleation J [-]"
deposition_m::FT
"c coefficient for deposition nucleation J [-]"
deposition_c::FT
"m coefficient for immersion freezing J [-]"
m::FT
ABIFM_m::FT
"c coefficient for immersion freezing J [-]"
c::FT
ABIFM_c::FT
end

function Kaolinite(
Expand All @@ -22,6 +27,8 @@ function Kaolinite(
) 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"]),
)
Expand Down
2 changes: 2 additions & 0 deletions src/parameters/Parameters.jl
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,8 @@ include("AerosolSulfate.jl")
include("AerosolIllite.jl")
include("AerosolKaolinite.jl")
include("AerosolDesertDust.jl")
include("AerosolFeldspar.jl")
include("AerosolFerrihydrite.jl")

# Parameters for aerosol specific parameterizations
include("AerosolActivation.jl")
Expand Down
32 changes: 32 additions & 0 deletions test/gpu_tests.jl
Original file line number Diff line number Diff line change
Expand Up @@ -480,6 +480,23 @@ end
end
end

@kernel function IceNucleation_deposition_J_kernel!(
output::AbstractArray{FT},
kaolinite,
feldspar,
ferrihydrite,
Delta_a_w,
) where {FT}

i = @index(Group, Linear)

@inbounds begin
output[1] = CMI_het.deposition_J(kaolinite, Delta_a_w[1])
output[2] = CMI_het.deposition_J(feldspar, Delta_a_w[2])
output[3] = CMI_het.deposition_J(ferrihydrite, Delta_a_w[3])
end
end

@kernel function IceNucleation_ABIFM_J_kernel!(
output::AbstractArray{FT},
kaolinite,
Expand Down Expand Up @@ -576,6 +593,8 @@ function test_gpu(FT)
H2SO4_prs = CMP.H2SO4SolutionParameters(FT)
illite = CMP.Illite(FT)
kaolinite = CMP.Kaolinite(FT)
feldspar = CMP.Feldspar(FT)
ferrihydrite = CMP.Ferrihydrite(FT)
ip = CMP.IceNucleationParameters(FT)

@testset "Aerosol activation kernels" begin
Expand Down Expand Up @@ -821,6 +840,19 @@ function test_gpu(FT)
end

@testset "Ice Nucleation kernels" begin
dims = (1, 3)
(; output, ndrange) = setup_output(dims, FT)

Delta_a_w = ArrayType([FT(0.16), FT(0.15), FT(0.15)])

kernel! = IceNucleation_deposition_J_kernel!(backend, work_groups)
kernel!(output, kaolinite, feldspar, ferrihydrite, Delta_a_w; ndrange)

# test if deposition_J is callable and returns reasonable values
@test Array(output)[1] ≈ FT(1.5390757663075784e6)
@test Array(output)[2] ≈ FT(5.693312205851678e6)
@test Array(output)[3] ≈ FT(802555.3607426438)

dims = (1, 2)
(; output, ndrange) = setup_output(dims, FT)

Expand Down
35 changes: 35 additions & 0 deletions test/heterogeneous_ice_nucleation_tests.jl
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,8 @@ function test_heterogeneous_ice_nucleation(FT)
desert_dust = CMP.DesertDust(FT)
illite = CMP.Illite(FT)
kaolinite = CMP.Kaolinite(FT)
feldspar = CMP.Feldspar(FT)
ferrihydrite = CMP.Ferrihydrite(FT)

TT.@testset "dust_activation" begin

Expand Down Expand Up @@ -81,6 +83,39 @@ function test_heterogeneous_ice_nucleation(FT)
end
end

TT.@testset "Deposition Nucleation J" begin

T_warm_1 = FT(229.2)
T_cold_1 = FT(228.8)
x_sulph = FT(0.1)

T_warm_2 = FT(285)
T_cold_2 = FT(251)
e_warm = FT(1088)
e_cold = FT(544)

# higher nucleation rate at colder temperatures
for dust in [feldspar, ferrihydrite, kaolinite]
TT.@test CMI_het.deposition_J(
dust,
CO.a_w_xT(H2SO4_prs, tps, x_sulph, T_cold_1) -
CO.a_w_ice(tps, T_cold_1),
) > CMI_het.deposition_J(
dust,
CO.a_w_xT(H2SO4_prs, tps, x_sulph, T_warm_1) -
CO.a_w_ice(tps, T_warm_1),
)

TT.@test CMI_het.deposition_J(
dust,
CO.a_w_eT(tps, e_cold, T_cold_2) - CO.a_w_ice(tps, T_cold_2),
) > CMI_het.deposition_J(
dust,
CO.a_w_eT(tps, e_warm, T_warm_2) - CO.a_w_ice(tps, T_warm_2),
)
end
end

TT.@testset "ABIFM J" begin

T_warm_1 = FT(229.2)
Expand Down
Loading
Loading