Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
52 commits
Select commit Hold shift + click to select a range
5573498
bump PartMC submodule version to current main
slayoo Aug 28, 2025
f3aa2f6
add tchem_interface.F90 to CMake file list
slayoo Aug 28, 2025
860d471
point the partmc submodule to Wenhan's for and the freezing branch
slayoo Aug 28, 2025
80104d1
add new source file to CMake logic
slayoo Aug 28, 2025
55681db
add AeroData argument to aero_particle_coagulate
slayoo Aug 28, 2025
a3c593e
add immersion freezing example notebook (empty) + README entry
slayoo Aug 28, 2025
6a75ad6
fix aero_particle_coagulate call
slayoo Aug 28, 2025
7b05eff
add initial case
jcurtis2 Aug 28, 2025
6bd0f14
fix merge conflict
slayoo Aug 28, 2025
5c43de0
Merge branch 'freezing' of github.com:slayoo/PyPartMC into freezing
slayoo Aug 28, 2025
9756f1e
expose frozen fraction. add plot to notebook
jcurtis2 Aug 28, 2025
02cc4d1
fix README code examples that use AeroData
jcurtis2 Aug 28, 2025
c06ddcb
fix aero_data.dat file for fortran example
jcurtis2 Aug 28, 2025
8cde3e6
point the partmc submodule to Wenhan's for and the freezing branch
slayoo Aug 28, 2025
83ff0b6
add new source file to CMake logic
slayoo Aug 28, 2025
d7a462e
add AeroData argument to aero_particle_coagulate
slayoo Aug 28, 2025
87705b1
add immersion freezing example notebook (empty) + README entry
slayoo Aug 28, 2025
db8e86b
fix aero_particle_coagulate call
slayoo Aug 28, 2025
a59836f
add initial case
jcurtis2 Aug 28, 2025
b8c7484
expose frozen fraction. add plot to notebook
jcurtis2 Aug 28, 2025
076a7fd
fix README code examples that use AeroData
jcurtis2 Aug 28, 2025
c6dbdce
fix aero_data.dat file for fortran example
jcurtis2 Aug 28, 2025
4eebc08
adding ABIFM parameters to AeroData ctor calls
slayoo Aug 29, 2025
ae10faa
Merge branch 'freezing' of github.com:slayoo/PyPartMC into freezing
slayoo Aug 29, 2025
ffd99ae
add access to particle frozen status
jcurtis2 Aug 29, 2025
3c14723
add frozen fraction test
jcurtis2 Aug 29, 2025
898dbdf
add code to read freezing scheme
jcurtis2 Aug 29, 2025
bba9b59
formatting
jcurtis2 Aug 29, 2025
4ec1d7a
freezing notebook by Wenhan with added header cells
slayoo Sep 4, 2025
aa256c9
fix process output notebook
jcurtis2 Sep 4, 2025
cf4e2b0
get camp scenario files from the freezing branch
slayoo Sep 4, 2025
b3d35ed
notebook refactors ddressing pylint hints
slayoo Sep 4, 2025
77c353e
Merge branch 'main' into freezing
slayoo Sep 5, 2025
041414b
new version of notebook from Wenhan (populated with output)
slayoo Sep 10, 2025
88025bd
Merge branch 'freezing' of github.com:slayoo/PyPartMC into freezing
slayoo Sep 10, 2025
7cf0b80
Merge remote-tracking branch 'upstream/main' into freezing
slayoo Sep 10, 2025
33cd70b
bump partmc module to fix CAMP issue - thanks Jeff!
slayoo Sep 10, 2025
ed69689
Merge remote-tracking branch 'upstream/main' into freezing
slayoo Sep 10, 2025
ce3fe72
remove pip-install commands from imf notebook
slayoo Sep 10, 2025
81731c4
test commit (just removing a comment)
slayoo Sep 10, 2025
eede9ee
Add functions to reproduce figure 7,9, and 12
tangwhiap Sep 11, 2025
1fcc462
Merge branch 'main' into freezing
slayoo Sep 11, 2025
58cf4c7
modify the immersion_freezing example to pass the nbqa pylint tests
tangwhiap Sep 11, 2025
fe22357
notebook refactors
slayoo Sep 12, 2025
bbdafeb
reroute partmc submodule back to compdyn/PartMC
slayoo Sep 12, 2025
b6a3c6a
point back to compdyn/partmc (but new imf branch)
slayoo Sep 12, 2025
60f49b5
cleanup gitmodules
slayoo Sep 12, 2025
be9a4ab
set do_immersion_freezing=false as default in RunPartOpt
slayoo Sep 12, 2025
c554488
add test coverage for freezing options
jcurtis2 Sep 13, 2025
d7cf829
shorten freezing test simulation length
jcurtis2 Sep 13, 2025
834fc00
remove extra and untestable code
jcurtis2 Sep 13, 2025
4f53e3c
increase freezing rates for test
jcurtis2 Sep 13, 2025
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 CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -197,7 +197,7 @@ set(partmclib_SOURCES condense_solver.c aero_state.F90 integer_varray.F90 intege
gas_state.F90 coagulation.F90 exact_soln.F90 coagulation_dist.F90 coag_kernel.F90 spec_line.F90
rand.F90 aero_particle.F90 aero_particle_array.F90 mpi.F90 netcdf.F90 aero_info.F90
aero_info_array.F90 nucleate.F90 condense.F90 fractal.F90 chamber.F90 camp_interface.F90
photolysis.F90 aero_component.F90 tchem_interface.F90
photolysis.F90 aero_component.F90 tchem_interface.F90 ice_nucleation.F90
)
add_prefix(gitmodules/partmc/src/ partmclib_SOURCES)
list(APPEND partmclib_SOURCES src/spec_file_pypartmc.F90 src/sys.F90)
Expand Down
21 changes: 13 additions & 8 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -91,6 +91,11 @@ pip install PyPartMC[examples]
[![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/open-atmos/PyPartMC/blob/main/examples/cloud_parcel.ipynb)
[![Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/open-atmos/PyPartMC.git/main?urlpath=lab/tree/examples/cloud_parcel.ipynb)
[![ARM JupyterHub](https://img.shields.io/static/v1?label=launch%20in&logo=jupyter&color=lightblue&message=ARM+JupyterHub)](https://jupyterhub.arm.gov/hub/user-redirect/git-pull?repo=https%3A//github.com/open-atmos/PyPartMC&branch=main&urlPath=)
- Immersion freezing example:
[![View notebook](https://img.shields.io/static/v1?label=render%20on&logo=github&color=87ce3e&message=GitHub)](https://github.com/open-atmos/PyPartMC/blob/main/examples/immersion_freezing.ipynb)
[![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/open-atmos/PyPartMC/blob/main/examples/immersion_freezing.ipynb)
[![Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/open-atmos/PyPartMC.git/main?urlpath=lab/tree/examples/immersion_freezing.ipynb)
[![ARM JupyterHub](https://img.shields.io/static/v1?label=launch%20in&logo=jupyter&color=lightblue&message=ARM+JupyterHub)](https://jupyterhub.arm.gov/hub/user-redirect/git-pull?repo=https%3A//github.com/open-atmos/PyPartMC&branch=main&urlPath=)
- Coagulation model intercomparison for additive (Golovin) kernel with: PyPartMC, [PySDM](https://open-atmos.github.io/PySDM), [Droplets.jl](https://github.com/emmacware/droplets.jl) and [dustpy](https://stammler.github.io/dustpy/):
[![View notebook](https://img.shields.io/static/v1?label=render%20on&logo=github&color=87ce3e&message=GitHub)](https://github.com/open-atmos/PyPartMC/blob/main/examples/additive_coag_comparison.ipynb)
[![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/open-atmos/PyPartMC/blob/main/examples/additive_coag_comparison.ipynb)
Expand Down Expand Up @@ -133,9 +138,9 @@ import PyPartMC as ppmc
from PyPartMC import si

aero_data = ppmc.AeroData((
# [density, ions in solution, molecular weight, kappa]
{"OC": [1000 *si.kg/si.m**3, 0, 1e-3 *si.kg/si.mol, 0.001]},
{"BC": [1800 *si.kg/si.m**3, 0, 1e-3 *si.kg/si.mol, 0]},
# [density, ions in solution, molecular weight, kappa, abifm_m, abifm_c]
{"OC": [1000 *si.kg/si.m**3, 0, 1e-3 *si.kg/si.mol, 0.001, 0, 0]},
{"BC": [1800 *si.kg/si.m**3, 0, 1e-3 *si.kg/si.mol, 0, 0 , 0]},
))

aero_dist = ppmc.AeroDist(
Expand Down Expand Up @@ -176,9 +181,9 @@ ppmc = pyimport("PyPartMC")
si = ppmc["si"]

aero_data = ppmc.AeroData((
# (density, ions in solution, molecular weight, kappa)
Dict("OC"=>(1000 * si.kg/si.m^3, 0, 1e-3 * si.kg/si.mol, 0.001)),
Dict("BC"=>(1800 * si.kg/si.m^3, 0, 1e-3 * si.kg/si.mol, 0))
# (density, ions in solution, molecular weight, kappa, abifm_m, abifm_c)
Dict("OC"=>(1000 * si.kg/si.m^3, 0, 1e-3 * si.kg/si.mol, 0.001, 0, 0)),
Dict("BC"=>(1800 * si.kg/si.m^3, 0, 1e-3 * si.kg/si.mol, 0, 0, 0))
))

aero_dist = ppmc.AeroDist(aero_data, (
Expand Down Expand Up @@ -219,8 +224,8 @@ ppmc = py.importlib.import_module('PyPartMC');
si = py.importlib.import_module('PyPartMC').si;

aero_data = ppmc.AeroData(py.tuple({ ...
py.dict(pyargs("OC", py.tuple({1000 * si.kg/si.m^3, 0, 1e-3 * si.kg/si.mol, 0.001}))), ...
py.dict(pyargs("BC", py.tuple({1800 * si.kg/si.m^3, 0, 1e-3 * si.kg/si.mol, 0}))) ...
py.dict(pyargs("OC", py.tuple({1000 * si.kg/si.m^3, 0, 1e-3 * si.kg/si.mol, 0.001, 0, 0}))), ...
py.dict(pyargs("BC", py.tuple({1800 * si.kg/si.m^3, 0, 1e-3 * si.kg/si.mol, 0, 0, 0}))) ...
}));

aero_dist = ppmc.AeroDist(aero_data, py.tuple({ ...
Expand Down
2 changes: 1 addition & 1 deletion examples/additive_coag_comparison.ipynb
Original file line number Diff line number Diff line change
Expand Up @@ -374,7 +374,7 @@
" assert env_state.additive_kernel_coefficient == settings.ADDITIVE_KERNEL_COEFF\n",
"\n",
" aero_data = ppmc.AeroData((\n",
" {\"H2O\": [1000 * ppmc.si.kg / ppmc.si.m**3, 0, 18.0 * ppmc.si.g / ppmc.si.mol, 0.00]},\n",
" {\"H2O\": [1000 * ppmc.si.kg / ppmc.si.m**3, 0, 18.0 * ppmc.si.g / ppmc.si.mol, 0, 0, 0]},\n",
" ))\n",
" self.gas_state = ppmc.GasState(gas_data)\n",
"\n",
Expand Down
43 changes: 21 additions & 22 deletions examples/chamber.ipynb
Original file line number Diff line number Diff line change
Expand Up @@ -210,28 +210,27 @@
"source": [
"aero_data = ppmc.AeroData(\n",
" (\n",
" # density ions in soln (1) molecular weight kappa (1)\n",
" # | | | |\n",
" {\"SO4\": [1760 * si.kg / si.m**3, 1, 96.0 * si.g / si.mol, 0.00]},\n",
" {\"NO3\": [1800 * si.kg / si.m**3, 1, 62.0 * si.g / si.mol, 0.00]},\n",
" {\"Cl\": [2200 * si.kg / si.m**3, 1, 35.5 * si.g / si.mol, 0.00]},\n",
" {\"NH4\": [1760 * si.kg / si.m**3, 1, 18.0 * si.g / si.mol, 0.00]},\n",
" {\"MSA\": [1800 * si.kg / si.m**3, 0, 95.0 * si.g / si.mol, 0.53]},\n",
" {\"ARO1\": [1400 * si.kg / si.m**3, 0, 150.0 * si.g / si.mol, 0.10]},\n",
" {\"ARO2\": [1400 * si.kg / si.m**3, 0, 150.0 * si.g / si.mol, 0.10]},\n",
" {\"ALK1\": [1400 * si.kg / si.m**3, 0, 140.0 * si.g / si.mol, 0.10]},\n",
" {\"OLE1\": [1400 * si.kg / si.m**3, 0, 140.0 * si.g / si.mol, 0.10]},\n",
" {\"API1\": [1400 * si.kg / si.m**3, 0, 184.0 * si.g / si.mol, 0.10]},\n",
" {\"API2\": [1400 * si.kg / si.m**3, 0, 184.0 * si.g / si.mol, 0.10]},\n",
" {\"LIM1\": [1400 * si.kg / si.m**3, 0, 200.0 * si.g / si.mol, 0.10]},\n",
" {\"LIM2\": [1400 * si.kg / si.m**3, 0, 200.0 * si.g / si.mol, 0.10]},\n",
" {\"CO3\": [2600 * si.kg / si.m**3, 1, 60.0 * si.g / si.mol, 0.00]},\n",
" {\"Na\": [2200 * si.kg / si.m**3, 1, 23.0 * si.g / si.mol, 0.00]},\n",
" {\"Ca\": [2600 * si.kg / si.m**3, 1, 40.0 * si.g / si.mol, 0.00]},\n",
" {\"OIN\": [2600 * si.kg / si.m**3, 0, 1.0 * si.g / si.mol, 0.10]},\n",
" {\"OC\": [1566 * si.kg / si.m**3, 0, 1.0 * si.g / si.mol, 0.001]},\n",
" {\"BC\": [1700 * si.kg / si.m**3, 0, 1.0 * si.g / si.mol, 0.00]},\n",
" {\"H2O\": [1000 * si.kg / si.m**3, 0, 18.0 * si.g / si.mol, 0.00]},\n",
" # density, ions in soln (1), molecular weight, kappa (1), ABIFM_m, ABIFM_c\n",
" {\"SO4\": [1760 * si.kg / si.m**3, 1, 96.0 * si.g / si.mol, 0,0,0]},\n",
" {\"NO3\": [1800 * si.kg / si.m**3, 1, 62.0 * si.g / si.mol, 0,0,0]},\n",
" {\"Cl\": [2200 * si.kg / si.m**3, 1, 35.5 * si.g / si.mol, 0,0,0]},\n",
" {\"NH4\": [1760 * si.kg / si.m**3, 1, 18.0 * si.g / si.mol, 0,0,0]},\n",
" {\"MSA\": [1800 * si.kg / si.m**3, 0, 95.0 * si.g / si.mol, 0.53,0,0]},\n",
" {\"ARO1\": [1400 * si.kg / si.m**3, 0, 150.0 * si.g / si.mol, 0.10,0,0]},\n",
" {\"ARO2\": [1400 * si.kg / si.m**3, 0, 150.0 * si.g / si.mol, 0.10,0,0]},\n",
" {\"ALK1\": [1400 * si.kg / si.m**3, 0, 140.0 * si.g / si.mol, 0.10,0,0]},\n",
" {\"OLE1\": [1400 * si.kg / si.m**3, 0, 140.0 * si.g / si.mol, 0.10,0,0]},\n",
" {\"API1\": [1400 * si.kg / si.m**3, 0, 184.0 * si.g / si.mol, 0.10,0,0]},\n",
" {\"API2\": [1400 * si.kg / si.m**3, 0, 184.0 * si.g / si.mol, 0.10,0,0]},\n",
" {\"LIM1\": [1400 * si.kg / si.m**3, 0, 200.0 * si.g / si.mol, 0.10,0,0]},\n",
" {\"LIM2\": [1400 * si.kg / si.m**3, 0, 200.0 * si.g / si.mol, 0.10,0,0]},\n",
" {\"CO3\": [2600 * si.kg / si.m**3, 1, 60.0 * si.g / si.mol, 0,0,0]},\n",
" {\"Na\": [2200 * si.kg / si.m**3, 1, 23.0 * si.g / si.mol, 0,0,0]},\n",
" {\"Ca\": [2600 * si.kg / si.m**3, 1, 40.0 * si.g / si.mol, 0,0,0]},\n",
" {\"OIN\": [2600 * si.kg / si.m**3, 0, 1.0 * si.g / si.mol, 0.10,0,0]},\n",
" {\"OC\": [1566 * si.kg / si.m**3, 0, 1.0 * si.g / si.mol, 0.001,0,0]},\n",
" {\"BC\": [1700 * si.kg / si.m**3, 0, 1.0 * si.g / si.mol, 0,0,0]},\n",
" {\"H2O\": [1000 * si.kg / si.m**3, 0, 18.0 * si.g / si.mol, 0,0,0]},\n",
" )\n",
")\n",
"\n",
Expand Down
41 changes: 20 additions & 21 deletions examples/cloud_parcel.ipynb
Original file line number Diff line number Diff line change
Expand Up @@ -103,28 +103,27 @@
"outputs": [],
"source": [
"aero_data = ppmc.AeroData((\n",
" # density ions in soln (1) molecular weight kappa (1)\n",
" # \\ \\ / |\n",
" {\"SO4\": [1800 * si.kg / si.m**3, 1, 96.0 * si.g / si.mol, 0.00]},\n",
" {\"NO3\": [1800 * si.kg / si.m**3, 1, 62.0 * si.g / si.mol, 0.00]},\n",
" {\"Cl\": [2200 * si.kg / si.m**3, 1, 35.5 * si.g / si.mol, 0.00]},\n",
" {\"NH4\": [1800 * si.kg / si.m**3, 1, 18.0 * si.g / si.mol, 0.00]},\n",
" # density, ions in soln (1), molecular weight, kappa (1), ABIFM_m, ABIFM_c\n",
" {\"SO4\": [1800 * si.kg / si.m**3, 1, 96.0 * si.g / si.mol, 0,0,0]},\n",
" {\"NO3\": [1800 * si.kg / si.m**3, 1, 62.0 * si.g / si.mol, 0,0,0]},\n",
" {\"Cl\": [2200 * si.kg / si.m**3, 1, 35.5 * si.g / si.mol, 0,0,0]},\n",
" {\"NH4\": [1800 * si.kg / si.m**3, 1, 18.0 * si.g / si.mol, 0,0,0]},\n",
" {\"MSA\": [1800 * si.kg / si.m**3, 0, 95.0 * si.g / si.mol, 0.53]},\n",
" {\"ARO1\": [1400 * si.kg / si.m**3, 0, 150.0 * si.g / si.mol, 0.10]},\n",
" {\"ARO2\": [1400 * si.kg / si.m**3, 0, 150.0 * si.g / si.mol, 0.10]},\n",
" {\"ALK1\": [1400 * si.kg / si.m**3, 0, 140.0 * si.g / si.mol, 0.10]},\n",
" {\"OLE1\": [1400 * si.kg / si.m**3, 0, 140.0 * si.g / si.mol, 0.10]},\n",
" {\"API1\": [1400 * si.kg / si.m**3, 0, 184.0 * si.g / si.mol, 0.10]},\n",
" {\"API2\": [1400 * si.kg / si.m**3, 0, 184.0 * si.g / si.mol, 0.10]},\n",
" {\"LIM1\": [1400 * si.kg / si.m**3, 0, 200.0 * si.g / si.mol, 0.10]},\n",
" {\"LIM2\": [1400 * si.kg / si.m**3, 0, 200.0 * si.g / si.mol, 0.10]},\n",
" {\"CO3\": [2600 * si.kg / si.m**3, 1, 60.0 * si.g / si.mol, 0.00]},\n",
" {\"Na\": [2200 * si.kg / si.m**3, 1, 23.0 * si.g / si.mol, 0.00]},\n",
" {\"Ca\": [2600 * si.kg / si.m**3, 1, 40.0 * si.g / si.mol, 0.00]},\n",
" {\"OIN\": [2600 * si.kg / si.m**3, 0, 1.0 * si.g / si.mol, 0.10]},\n",
" {\"OC\": [1400 * si.kg / si.m**3, 0, 1.0 * si.g / si.mol, 0.10]},\n",
" {\"BC\": [1800 * si.kg / si.m**3, 0, 1.0 * si.g / si.mol, 0.00]},\n",
" {\"H2O\": [1000 * si.kg / si.m**3, 0, 18.0 * si.g / si.mol, 0.00]},\n",
" {\"ARO1\": [1400 * si.kg / si.m**3, 0, 150.0 * si.g / si.mol, 0.1,0,0]},\n",
" {\"ARO2\": [1400 * si.kg / si.m**3, 0, 150.0 * si.g / si.mol, 0.1,0,0]},\n",
" {\"ALK1\": [1400 * si.kg / si.m**3, 0, 140.0 * si.g / si.mol, 0.1,0,0]},\n",
" {\"OLE1\": [1400 * si.kg / si.m**3, 0, 140.0 * si.g / si.mol, 0.1,0,0]},\n",
" {\"API1\": [1400 * si.kg / si.m**3, 0, 184.0 * si.g / si.mol, 0.1,0,0]},\n",
" {\"API2\": [1400 * si.kg / si.m**3, 0, 184.0 * si.g / si.mol, 0.1,0,0]},\n",
" {\"LIM1\": [1400 * si.kg / si.m**3, 0, 200.0 * si.g / si.mol, 0.1,0,0]},\n",
" {\"LIM2\": [1400 * si.kg / si.m**3, 0, 200.0 * si.g / si.mol, 0.1,0,0]},\n",
" {\"CO3\": [2600 * si.kg / si.m**3, 1, 60.0 * si.g / si.mol, 0,0,0]},\n",
" {\"Na\": [2200 * si.kg / si.m**3, 1, 23.0 * si.g / si.mol, 0,0,0]},\n",
" {\"Ca\": [2600 * si.kg / si.m**3, 1, 40.0 * si.g / si.mol, 0,0,0]},\n",
" {\"OIN\": [2600 * si.kg / si.m**3, 0, 1.0 * si.g / si.mol, 0.1,0,0]},\n",
" {\"OC\": [1400 * si.kg / si.m**3, 0, 1.0 * si.g / si.mol, 0.1,0,0]},\n",
" {\"BC\": [1800 * si.kg / si.m**3, 0, 1.0 * si.g / si.mol, 0,0,0]},\n",
" {\"H2O\": [1000 * si.kg / si.m**3, 0, 18.0 * si.g / si.mol, 0,0,0]},\n",
"))"
]
},
Expand Down
Loading
Loading