Ion–particle coagulation¶
The problem here: positive particles (1 to 9 charges) of radius 3 nm colliding with a negative ion of radius 0.45 nm.
Several coagulation approximations:
- hard shpere
- gh2012: https://journals.aps.org/pre/abstract/10.1103/PhysRevE.85.026410
- gk2008: https://journals.aps.org/pre/abstract/10.1103/PhysRevE.78.046402
- dy2007: https://aip.scitation.org/doi/10.1063/1.2713719
- cg2019: https://www.tandfonline.com/doi/suppl/10.1080/02786826.2019.1614522
- lf2013: https://www.tandfonline.com/doi/full/10.1080/02786826.2013.783684
In [1]:
Copied!
try:
import particula, matplotlib
except ImportError:
print("Setting up computational environment...")
%pip install -U particula -qqq
%pip install matplotlib -qqq
import numpy as np
from matplotlib import pyplot as plt
from particula import particle, u
from particula.util.lf2013_coagulation import lf2013_coag_full
try:
import particula, matplotlib
except ImportError:
print("Setting up computational environment...")
%pip install -U particula -qqq
%pip install matplotlib -qqq
import numpy as np
from matplotlib import pyplot as plt
from particula import particle, u
from particula.util.lf2013_coagulation import lf2013_coag_full
In [2]:
Copied!
approx = ["hardsphere", "gk2008", "gh2012", "dy2007", "cg2019"]
for i in range(len(approx)):
shared_dict = {
"temperature": 278,
"coagulation_approximation": approx[i]
}
positive_particles = [
particle.Particle(
**shared_dict,
particle_radius=3e-9,
particle_charge=i,
particle_density=1700,
) for i in range(1, 10)
]
negative_ion = particle.Particle(
**shared_dict,
particle_radius=0.45e-9,
particle_charge=-1,
particle_density=1860,
)
coags = [
negative_ion.coagulation(particle)
for particle in positive_particles
]
coags_ccps_mags = [
coags[index].to("cc/s").m
for index in range(0, 9)
]
plt.semilogy(range(1,10), np.array(coags_ccps_mags).squeeze(), label=approx[i]);
ret = np.nan_to_num(lf2013_coag_full(
ion_type="air",
particle_type="conductive",
temperature_val=298.15,
pressure_val=101325,
charge_vals=np.arange(1, 10),
radius_vals=3e-9,)[0], 0) # [0] returns negative, [1] returns positive ions
plt.semilogy(range(1,10), np.array(ret*1e6).squeeze(), label="lf2013");
plt.ylim([1e-7, 1e-4]); plt.ylabel("Attachment coefficient, cc/s"); plt.legend(); plt.xlabel("# charges");
approx = ["hardsphere", "gk2008", "gh2012", "dy2007", "cg2019"]
for i in range(len(approx)):
shared_dict = {
"temperature": 278,
"coagulation_approximation": approx[i]
}
positive_particles = [
particle.Particle(
**shared_dict,
particle_radius=3e-9,
particle_charge=i,
particle_density=1700,
) for i in range(1, 10)
]
negative_ion = particle.Particle(
**shared_dict,
particle_radius=0.45e-9,
particle_charge=-1,
particle_density=1860,
)
coags = [
negative_ion.coagulation(particle)
for particle in positive_particles
]
coags_ccps_mags = [
coags[index].to("cc/s").m
for index in range(0, 9)
]
plt.semilogy(range(1,10), np.array(coags_ccps_mags).squeeze(), label=approx[i]);
ret = np.nan_to_num(lf2013_coag_full(
ion_type="air",
particle_type="conductive",
temperature_val=298.15,
pressure_val=101325,
charge_vals=np.arange(1, 10),
radius_vals=3e-9,)[0], 0) # [0] returns negative, [1] returns positive ions
plt.semilogy(range(1,10), np.array(ret*1e6).squeeze(), label="lf2013");
plt.ylim([1e-7, 1e-4]); plt.ylabel("Attachment coefficient, cc/s"); plt.legend(); plt.xlabel("# charges");