PySDM 2.71__tar.gz → 2.73__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {PySDM-2.71 → PySDM-2.73}/.github/workflows/tests+artifacts+pypi.yml +2 -3
- {PySDM-2.71 → PySDM-2.73}/PKG-INFO +26 -26
- {PySDM-2.71 → PySDM-2.73}/PySDM/builder.py +1 -2
- {PySDM-2.71 → PySDM-2.73}/PySDM/environments/box.py +2 -0
- PySDM-2.73/PySDM/environments/impl/__init__.py +3 -0
- PySDM-2.73/PySDM/environments/impl/register_environment.py +24 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/environments/kinematic_1d.py +4 -2
- {PySDM-2.71 → PySDM-2.73}/PySDM/environments/kinematic_2d.py +3 -2
- {PySDM-2.71 → PySDM-2.73}/PySDM/environments/parcel.py +2 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM.egg-info/PKG-INFO +26 -26
- {PySDM-2.71 → PySDM-2.73}/PySDM.egg-info/SOURCES.txt +4 -1
- {PySDM-2.71 → PySDM-2.73}/README.md +25 -25
- {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Abade_and_Albuquerque_2024/simulation.py +9 -10
- {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Abdul_Razzak_Ghan_2000/run_ARG_parcel.py +3 -2
- {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Alpert_and_Knopf_2016/simulation.py +6 -2
- PySDM-2.73/examples/PySDM_examples/Arabas_et_al_2023/aida.ipynb +4944 -0
- {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Arabas_et_al_2023/fig_A2.ipynb +4 -5
- {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Arabas_et_al_2023/make_particulator.py +2 -2
- {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Bieli_et_al_2022/simulation.py +4 -3
- {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Grabowski_and_Pawlowska_2023/simulation.py +9 -9
- {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Graf_et_al_2019/figure_4.ipynb +2 -2
- {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Jensen_and_Nugent_2017/simulation.py +13 -13
- {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Kreidenweis_et_al_2003/simulation.py +9 -11
- {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Lowe_et_al_2019/simulation.py +9 -10
- {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Pyrcel/simulation.py +13 -11
- {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Rozanski_and_Sonntag_1982/figs_4_5_6.ipynb +1 -1
- {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Shipway_and_Hill_2012/simulation.py +3 -3
- {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Szumowski_et_al_1998/simulation.py +6 -2
- {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/deJong_Azimi/simulation_0D.py +4 -3
- {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/deJong_Mackay_et_al_2023/simulation_0D.py +8 -6
- PySDM-2.73/pdoc_templates/index.html.jinja2 +23 -0
- {PySDM-2.71 → PySDM-2.73}/tests/smoke_tests/box/partmc/test_dry_wet_equilibration.py +4 -5
- {PySDM-2.71 → PySDM-2.73}/tests/smoke_tests/parcel_c/abdul_razzak_ghan_2000/test_single_supersaturation_peak.py +17 -11
- {PySDM-2.71 → PySDM-2.73}/tests/unit_tests/attributes/test_critical_supersaturation.py +1 -1
- {PySDM-2.71 → PySDM-2.73}/tests/unit_tests/attributes/test_reynolds_number.py +3 -3
- {PySDM-2.71 → PySDM-2.73}/tests/unit_tests/backends/test_freezing_methods.py +8 -8
- {PySDM-2.71 → PySDM-2.73}/tests/unit_tests/dummy_environment.py +7 -5
- {PySDM-2.71 → PySDM-2.73}/tests/unit_tests/dummy_particulator.py +1 -1
- {PySDM-2.71 → PySDM-2.73}/tests/unit_tests/dynamics/collisions/test_sdm_breakup.py +1 -1
- {PySDM-2.71 → PySDM-2.73}/tests/unit_tests/dynamics/condensation/test_diagnostics.py +2 -0
- {PySDM-2.71 → PySDM-2.73}/tests/unit_tests/dynamics/condensation/test_parcel_sanity_checks.py +3 -3
- {PySDM-2.71 → PySDM-2.73}/tests/unit_tests/dynamics/test_eulerian_advection.py +1 -1
- PySDM-2.73/tests/unit_tests/environments/test_impl.py +59 -0
- PySDM-2.73/tests/unit_tests/products/__init__.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/tests/unit_tests/products/test_averaged_terminal_velocity.py +3 -2
- {PySDM-2.71 → PySDM-2.73}/tests/unit_tests/products/test_collision_rates.py +5 -5
- {PySDM-2.71 → PySDM-2.73}/tests/unit_tests/products/test_concentration_product.py +2 -2
- {PySDM-2.71 → PySDM-2.73}/tests/unit_tests/products/test_cooling_rate.py +3 -2
- {PySDM-2.71 → PySDM-2.73}/tests/unit_tests/products/test_effective_radii.py +1 -1
- {PySDM-2.71 → PySDM-2.73}/tests/unit_tests/products/test_parcel_liquid_water_path.py +11 -11
- {PySDM-2.71 → PySDM-2.73}/tests/unit_tests/test_builder.py +1 -1
- PySDM-2.71/.github/workflows/pdoc_index_workaround.py +0 -21
- PySDM-2.71/PySDM/environments/impl/__init__.py +0 -1
- PySDM-2.71/examples/PySDM_examples/Arabas_et_al_2023/aida.ipynb +0 -420
- {PySDM-2.71 → PySDM-2.73}/.appveyor.yml +0 -0
- {PySDM-2.71 → PySDM-2.73}/.binder/apt.txt +0 -0
- {PySDM-2.71 → PySDM-2.73}/.binder/postBuild +0 -0
- {PySDM-2.71 → PySDM-2.73}/.binder/requirements.txt +0 -0
- {PySDM-2.71 → PySDM-2.73}/.codecov.yml +0 -0
- {PySDM-2.71 → PySDM-2.73}/.github/dependabot.yml +0 -0
- {PySDM-2.71 → PySDM-2.73}/.github/workflows/cancel.yml +0 -0
- {PySDM-2.71 → PySDM-2.73}/.github/workflows/joss.yml +0 -0
- {PySDM-2.71 → PySDM-2.73}/.github/workflows/joss_paper.yml +0 -0
- {PySDM-2.71 → PySDM-2.73}/.github/workflows/readme_snippets.yml +0 -0
- {PySDM-2.71 → PySDM-2.73}/.github/workflows/stale.yml +0 -0
- {PySDM-2.71 → PySDM-2.73}/.gitignore +0 -0
- {PySDM-2.71 → PySDM-2.73}/.gitmodules +0 -0
- {PySDM-2.71 → PySDM-2.73}/.pre-commit-config.yaml +0 -0
- {PySDM-2.71 → PySDM-2.73}/.zenodo.json +0 -0
- {PySDM-2.71 → PySDM-2.73}/LICENSE +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/__init__.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/attributes/__init__.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/attributes/chemistry/__init__.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/attributes/chemistry/acidity.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/attributes/chemistry/concentration.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/attributes/chemistry/hydrogen_ion_concentration.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/attributes/ice/__init__.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/attributes/ice/cooling_rate.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/attributes/ice/freezing_temperature.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/attributes/ice/immersed_surface_area.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/attributes/impl/__init__.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/attributes/impl/attribute.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/attributes/impl/attribute_registry.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/attributes/impl/base_attribute.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/attributes/impl/cell_attribute.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/attributes/impl/derived_attribute.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/attributes/impl/dummy_attribute.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/attributes/impl/extensive_attribute.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/attributes/impl/intensive_attribute.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/attributes/impl/maximum_attribute.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/attributes/impl/mole_amount.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/attributes/isotopes/__init__.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/attributes/isotopes/delta.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/attributes/isotopes/moles.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/attributes/numerics/__init__.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/attributes/numerics/cell_id.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/attributes/numerics/cell_origin.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/attributes/numerics/position_in_cell.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/attributes/physics/__init__.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/attributes/physics/area.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/attributes/physics/critical_supersaturation.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/attributes/physics/critical_volume.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/attributes/physics/dry_radius.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/attributes/physics/dry_volume.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/attributes/physics/equilibrium_supersaturation.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/attributes/physics/heat.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/attributes/physics/hygroscopicity.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/attributes/physics/multiplicity.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/attributes/physics/radius.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/attributes/physics/relative_fall_velocity.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/attributes/physics/reynolds_number.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/attributes/physics/temperature.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/attributes/physics/terminal_velocity.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/attributes/physics/volume.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/attributes/physics/water_mass.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/backends/__init__.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/backends/impl_common/__init__.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/backends/impl_common/backend_methods.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/backends/impl_common/freezing_attributes.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/backends/impl_common/index.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/backends/impl_common/indexed_storage.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/backends/impl_common/pair_indicator.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/backends/impl_common/pairwise_storage.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/backends/impl_common/random_common.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/backends/impl_common/storage_utils.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/backends/impl_numba/__init__.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/backends/impl_numba/atomic_operations.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/backends/impl_numba/conf.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/backends/impl_numba/methods/__init__.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/backends/impl_numba/methods/chemistry_methods.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/backends/impl_numba/methods/collisions_methods.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/backends/impl_numba/methods/condensation_methods.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/backends/impl_numba/methods/displacement_methods.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/backends/impl_numba/methods/fragmentation_methods.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/backends/impl_numba/methods/freezing_methods.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/backends/impl_numba/methods/index_methods.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/backends/impl_numba/methods/isotope_methods.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/backends/impl_numba/methods/moments_methods.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/backends/impl_numba/methods/pair_methods.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/backends/impl_numba/methods/physics_methods.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/backends/impl_numba/methods/terminal_velocity_methods.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/backends/impl_numba/random.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/backends/impl_numba/storage.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/backends/impl_numba/storage_impl.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/backends/impl_numba/test_helpers/__init__.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/backends/impl_numba/test_helpers/scipy_ode_condensation_solver.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/backends/impl_numba/toms748.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/backends/impl_numba/warnings.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/backends/impl_thrust_rtc/__init__.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/backends/impl_thrust_rtc/bisection.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/backends/impl_thrust_rtc/conf.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/backends/impl_thrust_rtc/methods/__init__.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/backends/impl_thrust_rtc/methods/collisions_methods.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/backends/impl_thrust_rtc/methods/condensation_methods.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/backends/impl_thrust_rtc/methods/displacement_methods.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/backends/impl_thrust_rtc/methods/freezing_methods.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/backends/impl_thrust_rtc/methods/index_methods.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/backends/impl_thrust_rtc/methods/isotope_methods.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/backends/impl_thrust_rtc/methods/moments_methods.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/backends/impl_thrust_rtc/methods/pair_methods.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/backends/impl_thrust_rtc/methods/physics_methods.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/backends/impl_thrust_rtc/methods/terminal_velocity_methods.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/backends/impl_thrust_rtc/methods/thrust_rtc_backend_methods.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/backends/impl_thrust_rtc/nice_thrust.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/backends/impl_thrust_rtc/random.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/backends/impl_thrust_rtc/storage.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/backends/impl_thrust_rtc/test_helpers/__init__.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/backends/impl_thrust_rtc/test_helpers/cpp2python.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/backends/impl_thrust_rtc/test_helpers/fake_thrust_rtc.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/backends/impl_thrust_rtc/test_helpers/flag.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/backends/numba.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/backends/thrust_rtc.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/dynamics/__init__.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/dynamics/ambient_thermodynamics.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/dynamics/aqueous_chemistry.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/dynamics/collisions/__init__.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/dynamics/collisions/breakup_efficiencies/__init__.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/dynamics/collisions/breakup_efficiencies/constEb.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/dynamics/collisions/breakup_fragmentations/__init__.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/dynamics/collisions/breakup_fragmentations/always_n.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/dynamics/collisions/breakup_fragmentations/constant_mass.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/dynamics/collisions/breakup_fragmentations/expon_frag.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/dynamics/collisions/breakup_fragmentations/exponential.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/dynamics/collisions/breakup_fragmentations/feingold1988.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/dynamics/collisions/breakup_fragmentations/gaussian.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/dynamics/collisions/breakup_fragmentations/impl/__init__.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/dynamics/collisions/breakup_fragmentations/impl/volume_based.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/dynamics/collisions/breakup_fragmentations/lowlist82.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/dynamics/collisions/breakup_fragmentations/slams.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/dynamics/collisions/breakup_fragmentations/straub2010.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/dynamics/collisions/coalescence_efficiencies/__init__.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/dynamics/collisions/coalescence_efficiencies/_gravitational.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/dynamics/collisions/coalescence_efficiencies/_parameterized.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/dynamics/collisions/coalescence_efficiencies/berry1967.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/dynamics/collisions/coalescence_efficiencies/constEc.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/dynamics/collisions/coalescence_efficiencies/lowlist1982.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/dynamics/collisions/coalescence_efficiencies/specified_eff.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/dynamics/collisions/coalescence_efficiencies/straub2010.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/dynamics/collisions/collision.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/dynamics/collisions/collision_kernels/__init__.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/dynamics/collisions/collision_kernels/constantK.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/dynamics/collisions/collision_kernels/electric.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/dynamics/collisions/collision_kernels/geometric.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/dynamics/collisions/collision_kernels/golovin.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/dynamics/collisions/collision_kernels/hydrodynamic.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/dynamics/collisions/collision_kernels/impl/__init__.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/dynamics/collisions/collision_kernels/impl/gravitational.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/dynamics/collisions/collision_kernels/impl/parameterized.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/dynamics/collisions/collision_kernels/linear.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/dynamics/collisions/collision_kernels/simple_geometric.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/dynamics/condensation.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/dynamics/displacement.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/dynamics/eulerian_advection.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/dynamics/freezing.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/dynamics/impl/__init__.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/dynamics/impl/chemistry_utils.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/dynamics/impl/random_generator_optimizer.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/dynamics/impl/random_generator_optimizer_nopair.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/dynamics/impl/register_dynamic.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/dynamics/isotopic_fractionation.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/dynamics/relaxed_velocity.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/dynamics/terminal_velocity/__init__.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/dynamics/terminal_velocity/gunn_and_kinzer.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/dynamics/terminal_velocity/power_series.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/dynamics/terminal_velocity/rogers_and_yau.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/environments/__init__.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/environments/impl/moist.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/exporters/__init__.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/exporters/netcdf_exporter.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/exporters/netcdf_exporter_1d.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/exporters/vtk_exporter.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/exporters/vtk_exporter_1d.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/formulae.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/impl/__init__.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/impl/arakawa_c.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/impl/camel_case.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/impl/mesh.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/impl/null_physics_class.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/impl/particle_attributes.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/impl/particle_attributes_factory.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/impl/wall_timer.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/initialisation/__init__.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/initialisation/aerosol_composition/__init__.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/initialisation/aerosol_composition/dry_aerosol.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/initialisation/discretise_multiplicities.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/initialisation/equilibrate_wet_radii.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/initialisation/impl/__init__.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/initialisation/impl/spectrum.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/initialisation/init_fall_momenta.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/initialisation/sampling/__init__.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/initialisation/sampling/spatial_sampling.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/initialisation/sampling/spectral_sampling.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/initialisation/sampling/spectro_glacial_sampling.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/initialisation/spectra/__init__.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/initialisation/spectra/exponential.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/initialisation/spectra/gamma.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/initialisation/spectra/gaussian.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/initialisation/spectra/lognormal.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/initialisation/spectra/sum.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/initialisation/spectra/top_hat.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/particulator.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/physics/__init__.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/physics/air_dynamic_viscosity/__init__.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/physics/air_dynamic_viscosity/zografos_et_al_1987.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/physics/bulk_phase_partitioning/__init__.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/physics/bulk_phase_partitioning/kaul_et_al_2015.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/physics/condensation_coordinate/__init__.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/physics/condensation_coordinate/volume.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/physics/condensation_coordinate/volume_logarithm.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/physics/constants.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/physics/constants_defaults.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/physics/diffusion_kinetics/__init__.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/physics/diffusion_kinetics/fuchs_sutugin.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/physics/diffusion_kinetics/grabowski_et_al_2011.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/physics/diffusion_kinetics/lowe_et_al_2019.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/physics/diffusion_kinetics/neglect.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/physics/diffusion_kinetics/pruppacher_and_klett_2005.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/physics/diffusion_thermics/__init__.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/physics/diffusion_thermics/grabowski_et_al_2011.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/physics/diffusion_thermics/lowe_et_al_2019.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/physics/diffusion_thermics/neglect.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/physics/diffusion_thermics/seinfeld_and_pandis_2010.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/physics/diffusion_thermics/tracy_welch_porter.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/physics/dimensional_analysis.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/physics/drop_growth/__init__.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/physics/drop_growth/mason_1951.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/physics/drop_growth/mason_1971.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/physics/fragmentation_function/__init__.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/physics/fragmentation_function/always_n.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/physics/fragmentation_function/constant_mass.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/physics/fragmentation_function/expon_frag.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/physics/fragmentation_function/exponential.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/physics/fragmentation_function/feingold1988.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/physics/fragmentation_function/gaussian.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/physics/fragmentation_function/lowlist82.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/physics/fragmentation_function/slams.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/physics/fragmentation_function/straub2010nf.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/physics/freezing_temperature_spectrum/__init__.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/physics/freezing_temperature_spectrum/bigg_1953.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/physics/freezing_temperature_spectrum/niemand_et_al_2012.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/physics/freezing_temperature_spectrum/null.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/physics/heterogeneous_ice_nucleation_rate/__init__.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/physics/heterogeneous_ice_nucleation_rate/abifm.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/physics/heterogeneous_ice_nucleation_rate/constant.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/physics/heterogeneous_ice_nucleation_rate/null.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/physics/hydrostatics/__init__.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/physics/hydrostatics/default.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/physics/hygroscopicity/__init__.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/physics/hygroscopicity/kappa_koehler.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/physics/hygroscopicity/kappa_koehler_leading_terms.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/physics/impl/__init__.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/physics/impl/fake_unit_registry.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/physics/impl/flag.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/physics/isotope_diffusivity_ratios/__init__.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/physics/isotope_diffusivity_ratios/grahams_law.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/physics/isotope_diffusivity_ratios/hellmann_and_harvey_2020.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/physics/isotope_diffusivity_ratios/stewart_1975.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/physics/isotope_equilibrium_fractionation_factors/__init__.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/physics/isotope_equilibrium_fractionation_factors/barkan_and_luz_2005.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/physics/isotope_equilibrium_fractionation_factors/ellehoj_et_al_2013.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/physics/isotope_equilibrium_fractionation_factors/horita_and_wesolowski_1994.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/physics/isotope_equilibrium_fractionation_factors/lamb_et_al_2017.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/physics/isotope_equilibrium_fractionation_factors/majoube_1970.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/physics/isotope_equilibrium_fractionation_factors/majoube_1971.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/physics/isotope_equilibrium_fractionation_factors/merlivat_and_nief_1967.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/physics/isotope_equilibrium_fractionation_factors/van_hook_1968.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/physics/isotope_meteoric_water_line_excess/__init__.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/physics/isotope_meteoric_water_line_excess/barkan_and_luz_2007.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/physics/isotope_meteoric_water_line_excess/dansgaard_1964.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/physics/isotope_ratio_evolution/__init__.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/physics/isotope_ratio_evolution/gedzelman_and_arnold_1994.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/physics/isotope_ratio_evolution/merlivat_and_jouzel_1979.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/physics/isotope_ratio_evolution/rayleigh_distillation.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/physics/isotope_relaxation_timescale/__init__.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/physics/isotope_relaxation_timescale/miyake_et_al_1968.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/physics/latent_heat/__init__.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/physics/latent_heat/constant.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/physics/latent_heat/kirchhoff.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/physics/latent_heat/lowe2019.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/physics/latent_heat/seinfeld_and_pandis_2010.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/physics/optical_albedo/__init__.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/physics/optical_albedo/bohren1987.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/physics/optical_depth/__init__.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/physics/optical_depth/stephens_1978.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/physics/particle_advection/__init__.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/physics/particle_advection/explicit_in_space.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/physics/particle_advection/implicit_in_space.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/physics/particle_shape_and_density/__init__.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/physics/particle_shape_and_density/liquid_spheres.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/physics/particle_shape_and_density/mixed_phase_spheres.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/physics/particle_shape_and_density/porous_spheroids.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/physics/saturation_vapour_pressure/__init__.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/physics/saturation_vapour_pressure/august_roche_magnus.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/physics/saturation_vapour_pressure/bolton_1980.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/physics/saturation_vapour_pressure/flatau_walko_cotton.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/physics/saturation_vapour_pressure/lowe1977.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/physics/saturation_vapour_pressure/murphy_koop_2005.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/physics/saturation_vapour_pressure/wexler_1976.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/physics/state_variable_triplet/__init__.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/physics/state_variable_triplet/libcloudphplusplus.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/physics/surface_tension/__init__.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/physics/surface_tension/compressed_film_ovadnevaite.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/physics/surface_tension/compressed_film_ruehl.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/physics/surface_tension/constant.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/physics/surface_tension/szyszkowski_langmuir.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/physics/terminal_velocity/__init__.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/physics/terminal_velocity/gunn_kinzer_1949.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/physics/terminal_velocity/power_series.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/physics/terminal_velocity/rogers_yau.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/physics/trivia.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/physics/ventilation/__init__.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/physics/ventilation/froessling_1938.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/physics/ventilation/neglect.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/physics/ventilation/pruppacher_rasmussen_1979.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/products/__init__.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/products/ambient_thermodynamics/__init__.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/products/ambient_thermodynamics/ambient_dry_air_density.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/products/ambient_thermodynamics/ambient_dry_air_potential_temperature.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/products/ambient_thermodynamics/ambient_pressure.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/products/ambient_thermodynamics/ambient_relative_humidity.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/products/ambient_thermodynamics/ambient_temperature.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/products/ambient_thermodynamics/ambient_water_vapour_mixing_ratio.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/products/aqueous_chemistry/__init__.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/products/aqueous_chemistry/acidity.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/products/aqueous_chemistry/aqueous_mass_spectrum.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/products/aqueous_chemistry/aqueous_mole_fraction.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/products/aqueous_chemistry/gaseous_mole_fraction.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/products/aqueous_chemistry/total_dry_mass_mixing_ratio.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/products/collision/__init__.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/products/collision/collision_rates.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/products/collision/collision_timestep_mean.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/products/collision/collision_timestep_min.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/products/condensation/__init__.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/products/condensation/activable_fraction.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/products/condensation/condensation_timestep.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/products/condensation/event_rates.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/products/condensation/peak_supersaturation.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/products/displacement/__init__.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/products/displacement/averaged_terminal_velocity.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/products/displacement/flow_velocity_component.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/products/displacement/max_courant_number.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/products/displacement/surface_precipitation.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/products/freezing/__init__.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/products/freezing/cooling_rate.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/products/freezing/freezable_specific_concentration.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/products/freezing/frozen_particle_concentration.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/products/freezing/ice_nuclei_concentration.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/products/freezing/total_unfrozen_immersed_surface_area.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/products/housekeeping/__init__.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/products/housekeeping/dynamic_wall_time.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/products/housekeeping/super_droplet_count_per_gridbox.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/products/housekeeping/time.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/products/housekeeping/timers.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/products/impl/__init__.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/products/impl/activation_filtered_product.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/products/impl/concentration_product.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/products/impl/moist_environment_product.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/products/impl/moment_product.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/products/impl/product.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/products/impl/rate_product.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/products/impl/register_product.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/products/impl/spectrum_moment_product.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/products/optical/__init__.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/products/optical/cloud_albedo.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/products/optical/cloud_optical_depth.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/products/parcel/__init__.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/products/parcel/cloud_water_path.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/products/parcel/parcel_displacement.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/products/size_spectral/__init__.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/products/size_spectral/arbitrary_moment.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/products/size_spectral/cloud_water_content.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/products/size_spectral/effective_radius.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/products/size_spectral/effective_radius_activated.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/products/size_spectral/mean_radius.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/products/size_spectral/mean_radius_activated.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/products/size_spectral/mean_volume_radius.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/products/size_spectral/number_size_spectrum.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/products/size_spectral/particle_concentration.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/products/size_spectral/particle_concentration_activated.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/products/size_spectral/particle_size_spectrum.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/products/size_spectral/particle_volume_versus_radius_logarithm_spectrum.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/products/size_spectral/radius_binned_number_averaged_terminal_velocity.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/products/size_spectral/size_standard_deviation.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/products/size_spectral/total_particle_concentration.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/products/size_spectral/total_particle_specific_concentration.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM/products/size_spectral/water_mixing_ratio.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM.egg-info/dependency_links.txt +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM.egg-info/requires.txt +0 -0
- {PySDM-2.71 → PySDM-2.73}/PySDM.egg-info/top_level.txt +0 -0
- {PySDM-2.71 → PySDM-2.73}/examples/MANIFEST.in +0 -0
- {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Abade_and_Albuquerque_2024/__init__.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Abade_and_Albuquerque_2024/fig_2.ipynb +0 -0
- {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Abade_and_Albuquerque_2024/settings.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Abdul_Razzak_Ghan_2000/__init__.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Abdul_Razzak_Ghan_2000/aerosol.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Abdul_Razzak_Ghan_2000/data_from_ARG2000_paper.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Abdul_Razzak_Ghan_2000/data_from_CloudMicrophysics_ARG.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Abdul_Razzak_Ghan_2000/fig_4_kinetic_limitations.ipynb +0 -0
- {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Abdul_Razzak_Ghan_2000/figs1-5.ipynb +0 -0
- {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Alpert_and_Knopf_2016/__init__.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Alpert_and_Knopf_2016/fig_1.ipynb +0 -0
- {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Alpert_and_Knopf_2016/fig_2.ipynb +0 -0
- {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Alpert_and_Knopf_2016/fig_3.ipynb +0 -0
- {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Alpert_and_Knopf_2016/fig_4.ipynb +0 -0
- {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Alpert_and_Knopf_2016/fig_5.ipynb +0 -0
- {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Alpert_and_Knopf_2016/table.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Alpert_and_Knopf_2016/table_1.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Alpert_and_Knopf_2016/table_2.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Arabas_and_Shima_2017/__init__.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Arabas_and_Shima_2017/example.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Arabas_and_Shima_2017/fig_5.ipynb +0 -0
- {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Arabas_and_Shima_2017/settings.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Arabas_and_Shima_2017/simulation.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Arabas_et_al_2015/__init__.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Arabas_et_al_2015/example.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Arabas_et_al_2015/example_benchmark.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Arabas_et_al_2015/gui.ipynb +0 -0
- {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Arabas_et_al_2015/paraview_hello_world.ipynb +0 -0
- {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Arabas_et_al_2015/settings.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Arabas_et_al_2015/spin_up.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Arabas_et_al_2023/__init__.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Arabas_et_al_2023/commons.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Arabas_et_al_2023/copula_hello.ipynb +0 -0
- {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Arabas_et_al_2023/curved_text.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Arabas_et_al_2023/fig_11.ipynb +0 -0
- {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Arabas_et_al_2023/fig_2.ipynb +0 -0
- {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Arabas_et_al_2023/figs_3_and_7_and_8.ipynb +0 -0
- {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Arabas_et_al_2023/figs_5_and_6.ipynb +0 -0
- {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Arabas_et_al_2023/frozen_fraction.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Arabas_et_al_2023/plots.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Arabas_et_al_2023/run_simulation.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Bartman_2020_MasterThesis/__init__.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Bartman_2020_MasterThesis/fig_4_adaptive_sdm.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Bartman_2020_MasterThesis/fig_5_SCIPY_VS_ADAPTIVE.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Bartman_et_al_2021/__init__.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Bartman_et_al_2021/demo.ipynb +0 -0
- {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Bartman_et_al_2021/demo_fig2.ipynb +0 -0
- {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Bartman_et_al_2021/demo_fig3.ipynb +0 -0
- {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Bartman_et_al_2021/label.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Berry_1967/__init__.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Berry_1967/example.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Berry_1967/example_fig_6.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Berry_1967/figs_5_8_10.ipynb +0 -0
- {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Berry_1967/settings.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Berry_1967/spectrum_plotter.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Bieli_et_al_2022/__init__.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Bieli_et_al_2022/make_fig_3.ipynb +0 -0
- {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Bieli_et_al_2022/settings.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Bolot_et_al_2013/__init__.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Bolot_et_al_2013/fig_1.ipynb +0 -0
- {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Bulenok_2023_MasterThesis/__init__.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Bulenok_2023_MasterThesis/performance_comparison_Srivastava_Setup.ipynb +0 -0
- {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Bulenok_2023_MasterThesis/setups.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Bulenok_2023_MasterThesis/utils.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Ervens_and_Feingold_2012/__init__.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Ervens_and_Feingold_2012/settings.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Gedzelman_and_Arnold_1994/__init__.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Gedzelman_and_Arnold_1994/fig_2.ipynb +0 -0
- {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Grabowski_and_Pawlowska_2023/__init__.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Grabowski_and_Pawlowska_2023/figure_1.ipynb +0 -0
- {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Grabowski_and_Pawlowska_2023/figure_2.ipynb +0 -0
- {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Grabowski_and_Pawlowska_2023/figure_3.ipynb +0 -0
- {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Grabowski_and_Pawlowska_2023/figure_4.ipynb +0 -0
- {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Grabowski_and_Pawlowska_2023/figure_ripening_rate.ipynb +0 -0
- {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Grabowski_and_Pawlowska_2023/settings.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Graf_et_al_2019/Table_1.ipynb +0 -0
- {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Graf_et_al_2019/__init__.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Jaruga_and_Pawlowska_2018/__init__.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Jaruga_and_Pawlowska_2018/fig_2.ipynb +0 -0
- {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Jaruga_and_Pawlowska_2018/fig_3.ipynb +0 -0
- {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Jensen_and_Nugent_2017/Fig_1.ipynb +0 -0
- {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Jensen_and_Nugent_2017/Fig_3_and_Tab_4_upper_rows.ipynb +0 -0
- {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Jensen_and_Nugent_2017/Fig_4_and_7_and_Tab_4_bottom_rows.ipynb +0 -0
- {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Jensen_and_Nugent_2017/Fig_5.ipynb +0 -0
- {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Jensen_and_Nugent_2017/Fig_6.ipynb +0 -0
- {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Jensen_and_Nugent_2017/Fig_8.ipynb +0 -0
- {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Jensen_and_Nugent_2017/__init__.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Jensen_and_Nugent_2017/plotting.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Jensen_and_Nugent_2017/settings.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Jensen_and_Nugent_2017/table_3.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Kreidenweis_et_al_2003/__init__.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Kreidenweis_et_al_2003/fig_1.ipynb +0 -0
- {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Kreidenweis_et_al_2003/settings.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Lamb_et_al_2017/__init__.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Lamb_et_al_2017/fig_4.ipynb +0 -0
- {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Lowe_et_al_2019/__init__.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Lowe_et_al_2019/aerosol.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Lowe_et_al_2019/aerosol_code.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Lowe_et_al_2019/constants_def.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Lowe_et_al_2019/fig_1.ipynb +0 -0
- {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Lowe_et_al_2019/fig_2.ipynb +0 -0
- {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Lowe_et_al_2019/fig_3.ipynb +0 -0
- {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Lowe_et_al_2019/fig_s2.ipynb +0 -0
- {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Lowe_et_al_2019/plot_helper.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Lowe_et_al_2019/settings.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Merlivat_and_Nief_1967/__init__.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Merlivat_and_Nief_1967/fig_2.ipynb +0 -0
- {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Miyake_et_al_1968/__init__.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Miyake_et_al_1968/fig_19.ipynb +0 -0
- {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Morrison_and_Grabowski_2007/__init__.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Morrison_and_Grabowski_2007/common.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Morrison_and_Grabowski_2007/cumulus.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Morrison_and_Grabowski_2007/fig_2.ipynb +0 -0
- {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Morrison_and_Grabowski_2007/fig_3.ipynb +0 -0
- {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Morrison_and_Grabowski_2007/strato_cumulus.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Niedermeier_et_al_2014/__init__.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Niedermeier_et_al_2014/fig_2.ipynb +0 -0
- {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Niedermeier_et_al_2014/settings.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Niedermeier_et_al_2014/simulation.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Pierchala_et_al_2022/__init__.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Pierchala_et_al_2022/commons.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Pierchala_et_al_2022/fig_3.ipynb +0 -0
- {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Pierchala_et_al_2022/fig_4.ipynb +0 -0
- {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Pyrcel/__init__.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Pyrcel/example_basic_run.ipynb +0 -0
- {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Pyrcel/profile_plotter.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Pyrcel/settings.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Pyrcel/tutorial_settings.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Pyrcel/tutorial_simulation.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Rozanski_and_Sonntag_1982/__init__.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Shima_et_al_2009/__init__.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Shima_et_al_2009/error_measure.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Shima_et_al_2009/example.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Shima_et_al_2009/example_timing.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Shima_et_al_2009/fig_2.ipynb +0 -0
- {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Shima_et_al_2009/settings.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Shima_et_al_2009/spectrum_plotter.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Shima_et_al_2009/tutorial_example.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Shima_et_al_2009/tutorial_plotter.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Shima_et_al_2009/tutorial_settings.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Shipway_and_Hill_2012/__init__.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Shipway_and_Hill_2012/fig_1.ipynb +0 -0
- {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Shipway_and_Hill_2012/mpdata_1d.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Shipway_and_Hill_2012/plot.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Shipway_and_Hill_2012/settings.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Singer_Ward/MWE_joss_paper.ipynb +0 -0
- {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Singer_Ward/__init__.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Singer_Ward/aerosol.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Singer_Ward/kohler.ipynb +0 -0
- {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Srivastava_1982/__init__.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Srivastava_1982/equations.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Srivastava_1982/example.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Srivastava_1982/figures.ipynb +0 -0
- {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Srivastava_1982/settings.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Srivastava_1982/simulation.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Szumowski_et_al_1998/__init__.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Szumowski_et_al_1998/fields.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Szumowski_et_al_1998/gui.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Szumowski_et_al_1998/gui_controller.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Szumowski_et_al_1998/gui_settings.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Szumowski_et_al_1998/gui_viewer.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Szumowski_et_al_1998/make_default_product_collection.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Szumowski_et_al_1998/mpdata_2d.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Szumowski_et_al_1998/plots.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Szumowski_et_al_1998/sounding.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Szumowski_et_al_1998/storage.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Van_Hook_1968/__init__.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Van_Hook_1968/fig_1.ipynb +0 -0
- {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Yang_et_al_2018/__init__.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Yang_et_al_2018/fig_2.ipynb +0 -0
- {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Yang_et_al_2018/settings.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Yang_et_al_2018/simulation.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/__init__.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/deJong_Azimi/__init__.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/deJong_Azimi/box.ipynb +0 -0
- {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/deJong_Azimi/cloudy_data.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/deJong_Azimi/cloudy_data_0d.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/deJong_Azimi/rainshaft.ipynb +0 -0
- {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/deJong_Azimi/settings1D.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/deJong_Mackay_et_al_2023/__init__.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/deJong_Mackay_et_al_2023/data/straub_fig10.csv +0 -0
- {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/deJong_Mackay_et_al_2023/fig_9.ipynb +0 -0
- {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/deJong_Mackay_et_al_2023/figs_10_11_12_13.ipynb +0 -0
- {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/deJong_Mackay_et_al_2023/figs_3_4_5.ipynb +0 -0
- {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/deJong_Mackay_et_al_2023/figs_6_7_8.ipynb +0 -0
- {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/deJong_Mackay_et_al_2023/plot_rates.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/deJong_Mackay_et_al_2023/settings1D.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/deJong_Mackay_et_al_2023/settings_0D.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/deJong_Mackay_et_al_2023/simulation1D.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/deJong_Mackay_et_al_2023/simulation_ss.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/utils/__init__.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/utils/basic_simulation.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/utils/dummy_controller.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/utils/notebook_vars.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/utils/progbar_controller.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/utils/read_vtk_1d.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/utils/widgets/__init__.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/utils/widgets/freezer.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/utils/widgets/progbar_updater.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/examples/README.md +0 -0
- {PySDM-2.71 → PySDM-2.73}/examples/pyproject.toml +0 -0
- {PySDM-2.71 → PySDM-2.73}/examples/setup.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/paper/joss-ARG-fig_1.pdf +0 -0
- {PySDM-2.71 → PySDM-2.73}/paper/paper.bib +0 -0
- {PySDM-2.71 → PySDM-2.73}/paper/paper.md +0 -0
- {PySDM-2.71 → PySDM-2.73}/paper/paperv1.md +0 -0
- {PySDM-2.71 → PySDM-2.73}/paper/readme.pdf +0 -0
- {PySDM-2.71 → PySDM-2.73}/paper/test.pdf +0 -0
- {PySDM-2.71 → PySDM-2.73}/pyproject.toml +0 -0
- {PySDM-2.71 → PySDM-2.73}/setup.cfg +0 -0
- {PySDM-2.71 → PySDM-2.73}/setup.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/tests/__init__.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/tests/examples_tests/__init__.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/tests/examples_tests/conftest.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/tests/examples_tests/test_run_examples.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/tests/examples_tests/test_run_notebooks.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/tests/examples_tests/test_tests_completeness.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/tests/smoke_tests/__init__.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/tests/smoke_tests/box/alpert_and_knopf_2016/__init__.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/tests/smoke_tests/box/alpert_and_knopf_2016/test_ak16_fig_1.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/tests/smoke_tests/box/alpert_and_knopf_2016/test_frozen_fraction.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/tests/smoke_tests/box/berry_1967/__init__.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/tests/smoke_tests/box/berry_1967/test_coalescence.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/tests/smoke_tests/box/bieli_et_al_2022/__init__.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/tests/smoke_tests/box/bieli_et_al_2022/test_moments.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/tests/smoke_tests/box/dejong_and_mackay_et_al_2023/__init__.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/tests/smoke_tests/box/dejong_and_mackay_et_al_2023/test_collision.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/tests/smoke_tests/box/dejong_and_mackay_et_al_2023/test_fig_6.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/tests/smoke_tests/box/dejong_and_mackay_et_al_2023/test_fig_7.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/tests/smoke_tests/box/dejong_and_mackay_et_al_2023/test_fig_8.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/tests/smoke_tests/box/dejong_azimi/test_box.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/tests/smoke_tests/box/partmc/__init__.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/tests/smoke_tests/box/shima_et_al_2009/__init__.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/tests/smoke_tests/box/shima_et_al_2009/test_lwc_constant.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/tests/smoke_tests/box/srivastava_1982/__init__.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/tests/smoke_tests/box/srivastava_1982/test_eq_10.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/tests/smoke_tests/box/srivastava_1982/test_eq_13.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/tests/smoke_tests/box/srivastava_1982/test_equations.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/tests/smoke_tests/conftest.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/tests/smoke_tests/kinematic_1d/deJong_Azimi/__init__.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/tests/smoke_tests/kinematic_1d/deJong_Azimi/test_few_steps.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/tests/smoke_tests/kinematic_1d/deJong_Azimi/test_initial_condition.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/tests/smoke_tests/kinematic_1d/shipway_and_hill_2012/__init__.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/tests/smoke_tests/kinematic_1d/shipway_and_hill_2012/test_1d_exporters.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/tests/smoke_tests/kinematic_1d/shipway_and_hill_2012/test_few_steps.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/tests/smoke_tests/kinematic_1d/shipway_and_hill_2012/test_initial_condition.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/tests/smoke_tests/kinematic_1d/shipway_and_hill_2012/test_settings.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/tests/smoke_tests/kinematic_2d/arabas_et_al_2015/__init__.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/tests/smoke_tests/kinematic_2d/arabas_et_al_2015/dummy_storage.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/tests/smoke_tests/kinematic_2d/arabas_et_al_2015/test_adaptive_displacement.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/tests/smoke_tests/kinematic_2d/arabas_et_al_2015/test_environment.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/tests/smoke_tests/kinematic_2d/arabas_et_al_2015/test_export.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/tests/smoke_tests/kinematic_2d/arabas_et_al_2015/test_freezing.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/tests/smoke_tests/kinematic_2d/arabas_et_al_2015/test_gui_settings.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/tests/smoke_tests/kinematic_2d/arabas_et_al_2015/test_initialisation.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/tests/smoke_tests/kinematic_2d/arabas_et_al_2015/test_spin_up.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/tests/smoke_tests/no_env/gedzelman_and_arnold_1994/__init__.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/tests/smoke_tests/no_env/gedzelman_and_arnold_1994/test_fig_2.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/tests/smoke_tests/no_env/lamb_et_al_2017/__init__.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/tests/smoke_tests/no_env/lamb_et_al_2017/test_fig_4.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/tests/smoke_tests/no_env/miyake_et_al_1968/__init__.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/tests/smoke_tests/no_env/miyake_et_al_1968/test_fig_19.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/tests/smoke_tests/no_env/pierchala_et_al_2022/__init__.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/tests/smoke_tests/no_env/pierchala_et_al_2022/test_fig_3.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/tests/smoke_tests/no_env/pierchala_et_al_2022/test_fig_4.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/tests/smoke_tests/no_env/pierchala_et_al_2022/test_supplement.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/tests/smoke_tests/parcel_a/lowe_et_al_2019/__init__.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/tests/smoke_tests/parcel_a/lowe_et_al_2019/conftest.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/tests/smoke_tests/parcel_a/lowe_et_al_2019/test_dz_sensitivity.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/tests/smoke_tests/parcel_a/lowe_et_al_2019/test_fig_1.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/tests/smoke_tests/parcel_a/lowe_et_al_2019/test_fig_2.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/tests/smoke_tests/parcel_a/lowe_et_al_2019/test_fig_s2.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/tests/smoke_tests/parcel_a/lowe_et_al_2019/test_surface_tension_models.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/tests/smoke_tests/parcel_a/lowe_et_al_2019/test_zero_forg.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/tests/smoke_tests/parcel_a/pyrcel/__init__.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/tests/smoke_tests/parcel_a/pyrcel/test_parcel_example.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/tests/smoke_tests/parcel_a/rozanski_and_sonntag_1982/__init__.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/tests/smoke_tests/parcel_a/rozanski_and_sonntag_1982/test_figs_4_5_6.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/tests/smoke_tests/parcel_b/arabas_and_shima_2017/__init__.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/tests/smoke_tests/parcel_b/arabas_and_shima_2017/test_conservation.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/tests/smoke_tests/parcel_b/arabas_and_shima_2017/test_displacement.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/tests/smoke_tests/parcel_b/arabas_and_shima_2017/test_event_rates.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/tests/smoke_tests/parcel_b/arabas_and_shima_2017/test_initialisation.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/tests/smoke_tests/parcel_b/arabas_and_shima_2017/test_vs_scipy.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/tests/smoke_tests/parcel_b/yang_et_al_2018/__init__.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/tests/smoke_tests/parcel_b/yang_et_al_2018/test_displacement.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/tests/smoke_tests/parcel_b/yang_et_al_2018/test_initialisation.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/tests/smoke_tests/parcel_b/yang_et_al_2018/test_just_do_it.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/tests/smoke_tests/parcel_c/abade_and_albuquerque_2024/__init__.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/tests/smoke_tests/parcel_c/abade_and_albuquerque_2024/test_fig_2.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/tests/smoke_tests/parcel_c/abdul_razzak_ghan_2000/__init__.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/tests/smoke_tests/parcel_c/abdul_razzak_ghan_2000/test_ARG_example.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/tests/smoke_tests/parcel_c/abdul_razzak_ghan_2000/test_just_do_it.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/tests/smoke_tests/parcel_c/grabowski_and_pawlowska_2023/__init__.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/tests/smoke_tests/parcel_c/grabowski_and_pawlowska_2023/test_condensation_tolerance.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/tests/smoke_tests/parcel_c/grabowski_and_pawlowska_2023/test_figure_1_and_2.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/tests/smoke_tests/parcel_c/grabowski_and_pawlowska_2023/test_figure_3.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/tests/smoke_tests/parcel_c/grabowski_and_pawlowska_2023/test_figure_4.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/tests/smoke_tests/parcel_c/grabowski_and_pawlowska_2023/test_ripening_rate.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/tests/smoke_tests/parcel_c/graf_et_al_2019/__init__.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/tests/smoke_tests/parcel_c/graf_et_al_2019/test_fig_4.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/tests/smoke_tests/parcel_c/graf_et_al_2019/test_table_1.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/tests/smoke_tests/parcel_c/jensen_and_nugent_2017/__init__.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/tests/smoke_tests/parcel_c/jensen_and_nugent_2017/test_fig_1.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/tests/smoke_tests/parcel_c/jensen_and_nugent_2017/test_fig_3_and_tab_4_upper_rows.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/tests/smoke_tests/parcel_c/jensen_and_nugent_2017/test_fig_4_and_7_and_tab_4_bottom_rows.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/tests/smoke_tests/parcel_c/jensen_and_nugent_2017/test_fig_5.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/tests/smoke_tests/parcel_c/jensen_and_nugent_2017/test_fig_6.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/tests/smoke_tests/parcel_c/jensen_and_nugent_2017/test_table_3.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/tests/smoke_tests/parcel_c/kreidenweis_et_al_2003/__init__.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/tests/smoke_tests/parcel_c/kreidenweis_et_al_2003/test_fig_1.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/tests/smoke_tests/parcel_c/kreidenweis_et_al_2003/test_ionic_strength.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/tests/smoke_tests/parcel_c/kreidenweis_et_al_2003/test_spectrum_at_t_0.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/tests/smoke_tests/parcel_c/kreidenweis_et_al_2003/test_table_3.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/tests/smoke_tests/parcel_c/niedermeier_et_al_2013/__init__.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/tests/smoke_tests/parcel_c/niedermeier_et_al_2013/test_temperature_profile.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/tests/tutorials_tests/__init__.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/tests/tutorials_tests/conftest.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/tests/tutorials_tests/test_run_notebooks.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/tests/unit_tests/__init__.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/tests/unit_tests/attributes/__init__.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/tests/unit_tests/attributes/test_acidity.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/tests/unit_tests/attributes/test_area_radius.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/tests/unit_tests/attributes/test_fall_velocity.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/tests/unit_tests/attributes/test_impl_attribute_registry.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/tests/unit_tests/attributes/test_isotopes.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/tests/unit_tests/attributes/test_multiplicities.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/tests/unit_tests/backends/__init__.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/tests/unit_tests/backends/storage/__init__.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/tests/unit_tests/backends/storage/test_basic_ops.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/tests/unit_tests/backends/storage/test_index.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/tests/unit_tests/backends/storage/test_setitem.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/tests/unit_tests/backends/test_collisions_methods.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/tests/unit_tests/backends/test_ctor_defaults.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/tests/unit_tests/backends/test_fake_thrust.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/tests/unit_tests/backends/test_isotope_methods.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/tests/unit_tests/backends/test_moments_methods.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/tests/unit_tests/backends/test_oxidation.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/tests/unit_tests/backends/test_pair_methods.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/tests/unit_tests/backends/test_physics_methods.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/tests/unit_tests/backends/test_toms748.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/tests/unit_tests/conftest.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/tests/unit_tests/dynamics/__init__.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/tests/unit_tests/dynamics/collisions/__init__.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/tests/unit_tests/dynamics/collisions/conftest.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/tests/unit_tests/dynamics/collisions/test_croupiers.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/tests/unit_tests/dynamics/collisions/test_defaults.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/tests/unit_tests/dynamics/collisions/test_efficiencies.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/tests/unit_tests/dynamics/collisions/test_fragmentations.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/tests/unit_tests/dynamics/collisions/test_kernels.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/tests/unit_tests/dynamics/collisions/test_sdm_multi_cell.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/tests/unit_tests/dynamics/collisions/test_sdm_single_cell.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/tests/unit_tests/dynamics/condensation/test_ventilation.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/tests/unit_tests/dynamics/displacement/__init__.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/tests/unit_tests/dynamics/displacement/displacement_settings.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/tests/unit_tests/dynamics/displacement/test_advection.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/tests/unit_tests/dynamics/displacement/test_courant_product.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/tests/unit_tests/dynamics/displacement/test_sedimentation.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/tests/unit_tests/dynamics/test_impl_register_dynamic.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/tests/unit_tests/dynamics/test_isotopic_fractionation.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/tests/unit_tests/dynamics/test_relaxed_velocity.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/tests/unit_tests/dynamics/test_terminal_velocity.py +0 -0
- {PySDM-2.71/tests/unit_tests/impl → PySDM-2.73/tests/unit_tests/environments}/__init__.py +0 -0
- {PySDM-2.71/tests/unit_tests/initialisation → PySDM-2.73/tests/unit_tests/impl}/__init__.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/tests/unit_tests/impl/test_camel_case.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/tests/unit_tests/impl/test_mesh.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/tests/unit_tests/impl/test_moments.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/tests/unit_tests/impl/test_particle_attributes.py +0 -0
- {PySDM-2.71/tests/unit_tests/physics → PySDM-2.73/tests/unit_tests/initialisation}/__init__.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/tests/unit_tests/initialisation/test_aerosol_init.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/tests/unit_tests/initialisation/test_equilibrate_wet_radii.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/tests/unit_tests/initialisation/test_init_fall_momenta.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/tests/unit_tests/initialisation/test_spatial_discretisation.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/tests/unit_tests/initialisation/test_spectra_lognormal.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/tests/unit_tests/initialisation/test_spectral_discretisation.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/tests/unit_tests/initialisation/test_spectro_glacial_discretisation.py +0 -0
- {PySDM-2.71/tests/unit_tests/products → PySDM-2.73/tests/unit_tests/physics}/__init__.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/tests/unit_tests/physics/test_accommodation_coefficients.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/tests/unit_tests/physics/test_air_dynamic_viscosity.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/tests/unit_tests/physics/test_bulk_phase_partitioning.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/tests/unit_tests/physics/test_constants.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/tests/unit_tests/physics/test_dimensional_analysis.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/tests/unit_tests/physics/test_drop_growth.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/tests/unit_tests/physics/test_formulae.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/tests/unit_tests/physics/test_fragmentation_functions.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/tests/unit_tests/physics/test_freezing_temperature_spectra.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/tests/unit_tests/physics/test_hygroscopicity_fierce_diagrams.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/tests/unit_tests/physics/test_isotope_diffusivity_ratios.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/tests/unit_tests/physics/test_isotope_equilibrium_fractionation_factors.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/tests/unit_tests/physics/test_isotope_meteoric_water_line_excess.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/tests/unit_tests/physics/test_isotope_ratio_evolution.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/tests/unit_tests/physics/test_isotope_relaxation_timescale.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/tests/unit_tests/physics/test_latent_heat.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/tests/unit_tests/physics/test_optical.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/tests/unit_tests/physics/test_particle_shape_and_density.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/tests/unit_tests/physics/test_saturation_vapour_pressure.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/tests/unit_tests/physics/test_spectra.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/tests/unit_tests/physics/test_spectra_top_hat.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/tests/unit_tests/physics/test_surface_tension.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/tests/unit_tests/physics/test_thermal_conductivity.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/tests/unit_tests/physics/test_trivia.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/tests/unit_tests/physics/test_ventilation_coefficient.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/tests/unit_tests/products/test_ambient_relative_humidity.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/tests/unit_tests/products/test_arbitrary_moment.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/tests/unit_tests/products/test_impl.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/tests/unit_tests/products/test_particle_size_product.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/tests/unit_tests/products/test_particle_size_spectrum.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/tests/unit_tests/test_formulae.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/tests/unit_tests/test_imports.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/tests/unit_tests/test_particulator.py +0 -0
- {PySDM-2.71 → PySDM-2.73}/tutorials/README.md +0 -0
- {PySDM-2.71 → PySDM-2.73}/tutorials/collisions/collection_droplet.svg +0 -0
- {PySDM-2.71 → PySDM-2.73}/tutorials/collisions/collisions_playground.ipynb +0 -0
- {PySDM-2.71 → PySDM-2.73}/tutorials/condensation/condensation_playground.ipynb +0 -0
- {PySDM-2.71 → PySDM-2.73}/tutorials/condensation/kohler_curve.svg +0 -0
|
@@ -69,11 +69,10 @@ jobs:
|
|
|
69
69
|
with:
|
|
70
70
|
python-version: 3.9
|
|
71
71
|
- run: |
|
|
72
|
-
pip install
|
|
72
|
+
pip install pdoc
|
|
73
73
|
pip install -e .
|
|
74
74
|
pip install -e examples
|
|
75
|
-
python -We -m pdoc
|
|
76
|
-
python -We .github/workflows/pdoc_index_workaround.py
|
|
75
|
+
PDOC_ALLOW_EXEC=1 python -We -m pdoc -o html PySDM examples/PySDM_examples -t pdoc_templates
|
|
77
76
|
- if: ${{ github.ref == 'refs/heads/main' && matrix.platform == 'ubuntu-latest' }}
|
|
78
77
|
uses: JamesIves/github-pages-deploy-action@4.1.1
|
|
79
78
|
with:
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: PySDM
|
|
3
|
-
Version: 2.
|
|
3
|
+
Version: 2.73
|
|
4
4
|
Summary: Pythonic particle-based (super-droplet) warm-rain/aqueous-chemistry cloud microphysics package with box, parcel & 1D/2D prescribed-flow examples in Python, Julia and Matlab
|
|
5
5
|
Home-page: https://github.com/open-atmos/PySDM
|
|
6
6
|
Author: https://github.com/open-atmos/PySDM/graphs/contributors
|
|
@@ -32,7 +32,7 @@ Description: # PySDM
|
|
|
32
32
|
[](https://ci.appveyor.com/project/slayoo/pysdm/branch/main)
|
|
33
33
|
[](https://app.codecov.io/gh/open-atmos/PySDM)
|
|
34
34
|
[](https://pypi.org/project/PySDM)
|
|
35
|
-
[](https://open-atmos.github.io/PySDM/)
|
|
36
36
|
|
|
37
37
|
PySDM is a package for simulating the dynamics of population of particles.
|
|
38
38
|
It is intended to serve as a building block for simulation systems modelling
|
|
@@ -62,9 +62,9 @@ Description: # PySDM
|
|
|
62
62
|
PySDM has two alternative parallel number-crunching backends
|
|
63
63
|
available: multi-threaded CPU backend based on [Numba](http://numba.pydata.org/)
|
|
64
64
|
and GPU-resident backend built on top of [ThrustRTC](https://pypi.org/project/ThrustRTC/).
|
|
65
|
-
The [`Numba`](https://open-atmos.github.io/PySDM/PySDM/backends/numba
|
|
65
|
+
The [`Numba`](https://open-atmos.github.io/PySDM/PySDM/backends/numba.html) backend (aliased ``CPU``) features multi-threaded parallelism for
|
|
66
66
|
multi-core CPUs, it uses the just-in-time compilation technique based on the LLVM infrastructure.
|
|
67
|
-
The [`ThrustRTC`](https://open-atmos.github.io/PySDM/PySDM/backends/
|
|
67
|
+
The [`ThrustRTC`](https://open-atmos.github.io/PySDM/PySDM/backends/thrust_rtc.html) backend (aliased ``GPU``) offers GPU-resident operation of PySDM
|
|
68
68
|
leveraging the [SIMT](https://en.wikipedia.org/wiki/Single_instruction,_multiple_threads)
|
|
69
69
|
parallelisation model.
|
|
70
70
|
Using the ``GPU`` backend requires nVidia hardware and [CUDA driver](https://developer.nvidia.com/cuda-downloads).
|
|
@@ -76,7 +76,7 @@ Description: # PySDM
|
|
|
76
76
|
PySDM includes an extension of the SDM scheme to represent collisional breakup described in [de Jong, Mackay et al. 2023](10.5194/gmd-16-4193-2023).
|
|
77
77
|
For a list of talks and other materials on PySDM as well as a list of published papers featuring PySDM simulations, see the [project wiki](https://github.com/open-atmos/PySDM/wiki).
|
|
78
78
|
|
|
79
|
-
A [pdoc-generated](https://
|
|
79
|
+
A [pdoc-generated](https://pdoc.dev/) documentation of PySDM public API is maintained at: [https://open-atmos.github.io/PySDM](https://open-atmos.github.io/PySDM)
|
|
80
80
|
|
|
81
81
|
## Example Jupyter notebooks (reproducing results from literature):
|
|
82
82
|
|
|
@@ -186,8 +186,8 @@ Description: # PySDM
|
|
|
186
186
|
listings provide sample code roughly reproducing the
|
|
187
187
|
Figure 2 from [Shima et al. 2009 paper](http://doi.org/10.1002/qj.441)
|
|
188
188
|
using PySDM from Python, Julia and Matlab.
|
|
189
|
-
It is a [`Coalescence`](https://open-atmos.github.io/PySDM/PySDM/dynamics/
|
|
190
|
-
spectrum is [`Exponential`](https://open-atmos.github.io/PySDM/PySDM/initialisation/spectra.html#
|
|
189
|
+
It is a [`Coalescence`](https://open-atmos.github.io/PySDM/PySDM/dynamics/collisions/sollision.html#Coalescence)-only set-up in which the initial particle size
|
|
190
|
+
spectrum is [`Exponential`](https://open-atmos.github.io/PySDM/PySDM/initialisation/spectra/exponential.html#Exponential) and is deterministically sampled to match
|
|
191
191
|
the condition of each super-droplet having equal initial multiplicity:
|
|
192
192
|
<details>
|
|
193
193
|
<summary>Julia (click to expand)</summary>
|
|
@@ -241,9 +241,9 @@ Description: # PySDM
|
|
|
241
241
|
```
|
|
242
242
|
</details>
|
|
243
243
|
|
|
244
|
-
The key element of the PySDM interface is the [``Particulator``](https://open-atmos.github.io/PySDM/PySDM/particulator.html)
|
|
244
|
+
The key element of the PySDM interface is the [``Particulator``](https://open-atmos.github.io/PySDM/PySDM/particulator.html#Particulator)
|
|
245
245
|
class instances of which are used to manage the system state and control the simulation.
|
|
246
|
-
Instantiation of the [``Particulator``](https://open-atmos.github.io/PySDM/PySDM/particulator.html) class is handled by the [``Builder``](https://open-atmos.github.io/PySDM/PySDM/builder.html)
|
|
246
|
+
Instantiation of the [``Particulator``](https://open-atmos.github.io/PySDM/PySDM/particulator.html#Particulator) class is handled by the [``Builder``](https://open-atmos.github.io/PySDM/PySDM/builder.html#Builder)
|
|
247
247
|
as exemplified below:
|
|
248
248
|
<details>
|
|
249
249
|
<summary>Julia (click to expand)</summary>
|
|
@@ -313,18 +313,18 @@ Description: # PySDM
|
|
|
313
313
|
The ``backend`` argument may be set to ``CPU`` or ``GPU``
|
|
314
314
|
what translates to choosing the multi-threaded backend or the
|
|
315
315
|
GPU-resident computation mode, respectively.
|
|
316
|
-
The employed [`Box`](https://open-atmos.github.io/PySDM/PySDM/environments/box.html) environment corresponds to a zero-dimensional framework
|
|
316
|
+
The employed [`Box`](https://open-atmos.github.io/PySDM/PySDM/environments/box.html#Box) environment corresponds to a zero-dimensional framework
|
|
317
317
|
(particle positions are not considered).
|
|
318
318
|
The vectors of particle multiplicities ``n`` and particle volumes ``v`` are
|
|
319
319
|
used to initialise super-droplet attributes.
|
|
320
|
-
The [`Coalescence`](https://open-atmos.github.io/PySDM/PySDM/dynamics/
|
|
320
|
+
The [`Coalescence`](https://open-atmos.github.io/PySDM/PySDM/dynamics/collisions/collision.html#Coalescence)
|
|
321
321
|
Monte-Carlo algorithm (Super Droplet Method) is registered as the only
|
|
322
322
|
dynamic in the system.
|
|
323
|
-
Finally, the [`build()`](https://open-atmos.github.io/PySDM/PySDM/builder.html#
|
|
324
|
-
of [`Particulator`](https://open-atmos.github.io/PySDM/PySDM/particulator.html#
|
|
323
|
+
Finally, the [`build()`](https://open-atmos.github.io/PySDM/PySDM/builder.html#Builder.build) method is used to obtain an instance
|
|
324
|
+
of [`Particulator`](https://open-atmos.github.io/PySDM/PySDM/particulator.html#Particulator) which can then be used to control time-stepping and
|
|
325
325
|
access simulation state.
|
|
326
326
|
|
|
327
|
-
The [`run(nt)`](https://open-atmos.github.io/PySDM/PySDM/particulator.html#
|
|
327
|
+
The [`run(nt)`](https://open-atmos.github.io/PySDM/PySDM/particulator.html#Particulator.run) method advances the simulation by ``nt`` timesteps.
|
|
328
328
|
In the listing below, its usage is interleaved with plotting logic
|
|
329
329
|
which displays a histogram of particle mass distribution
|
|
330
330
|
at selected timesteps:
|
|
@@ -441,16 +441,16 @@ Description: # PySDM
|
|
|
441
441
|
SPECTRUM_INIT["ParticleVolumeVersusRadiusLogarithmSpectrum.__init__()"] -->|instantiates| SPECTRUM
|
|
442
442
|
SPECTRUM[":ParticleVolumeVersusRadiusLogarithmSpectrum"] -->|added as element of| PRODUCTS
|
|
443
443
|
|
|
444
|
-
click COAL "https://open-atmos.github.io/PySDM/PySDM/dynamics/collisions/collision.html"
|
|
444
|
+
click COAL "https://open-atmos.github.io/PySDM/PySDM/dynamics/collisions/collision.html#Coalescence"
|
|
445
445
|
click BUILDER_INSTANCE "https://open-atmos.github.io/PySDM/PySDM/builder.html"
|
|
446
446
|
click BUILDER_INIT "https://open-atmos.github.io/PySDM/PySDM/builder.html"
|
|
447
447
|
click BUILDER_ADD_DYN "https://open-atmos.github.io/PySDM/PySDM/builder.html"
|
|
448
|
-
click ENV_INIT "https://open-atmos.github.io/PySDM/PySDM/environments
|
|
449
|
-
click ENV "https://open-atmos.github.io/PySDM/PySDM/environments
|
|
450
|
-
click KERNEL_INIT "https://open-atmos.github.io/PySDM/PySDM/dynamics/collisions/collision_kernels
|
|
451
|
-
click KERNEL "https://open-atmos.github.io/PySDM/PySDM/dynamics/collisions/collision_kernels
|
|
452
|
-
click EXP_INIT "https://open-atmos.github.io/PySDM/PySDM/initialisation/spectra
|
|
453
|
-
click IS "https://open-atmos.github.io/PySDM/PySDM/initialisation/spectra
|
|
448
|
+
click ENV_INIT "https://open-atmos.github.io/PySDM/PySDM/environments.html"
|
|
449
|
+
click ENV "https://open-atmos.github.io/PySDM/PySDM/environments.html"
|
|
450
|
+
click KERNEL_INIT "https://open-atmos.github.io/PySDM/PySDM/dynamics/collisions/collision_kernels.html"
|
|
451
|
+
click KERNEL "https://open-atmos.github.io/PySDM/PySDM/dynamics/collisions/collision_kernels.html"
|
|
452
|
+
click EXP_INIT "https://open-atmos.github.io/PySDM/PySDM/initialisation/spectra.html"
|
|
453
|
+
click IS "https://open-atmos.github.io/PySDM/PySDM/initialisation/spectra.html"
|
|
454
454
|
click CM_INIT "https://open-atmos.github.io/PySDM/PySDM/initialisation/sampling/spectral_sampling.html"
|
|
455
455
|
click CM_INSTANCE "https://open-atmos.github.io/PySDM/PySDM/initialisation/sampling/spectral_sampling.html"
|
|
456
456
|
click SAMPLE "https://open-atmos.github.io/PySDM/PySDM/initialisation/sampling/spectral_sampling.html"
|
|
@@ -466,7 +466,7 @@ Description: # PySDM
|
|
|
466
466
|
|
|
467
467
|
In the following example, a condensation-only setup is used with the adiabatic
|
|
468
468
|
[`Parcel`](https://open-atmos.github.io/PySDM/PySDM/environments/parcel.html) environment.
|
|
469
|
-
An initial [`Lognormal`](https://open-atmos.github.io/PySDM/PySDM/initialisation/spectra.html#
|
|
469
|
+
An initial [`Lognormal`](https://open-atmos.github.io/PySDM/PySDM/initialisation/spectra/lognormal.html#Lognormal)
|
|
470
470
|
spectrum of dry aerosol particles is first initialised to equilibrium wet size for the given
|
|
471
471
|
initial humidity.
|
|
472
472
|
Subsequent particle growth due to [`Condensation`](https://open-atmos.github.io/PySDM/PySDM/dynamics/condensation.html) of water vapour (coupled with the release of latent heat)
|
|
@@ -476,7 +476,7 @@ Description: # PySDM
|
|
|
476
476
|
and depict the evolution of
|
|
477
477
|
[`PeakSupersaturation`](https://open-atmos.github.io/PySDM/PySDM/products/condensation/peak_supersaturation.html),
|
|
478
478
|
[`EffectiveRadius`](https://open-atmos.github.io/PySDM/PySDM/products/size_spectral/effective_radius.html),
|
|
479
|
-
[`ParticleConcentration`](https://open-atmos.github.io/PySDM/PySDM/products/size_spectral/particle_concentration.html#
|
|
479
|
+
[`ParticleConcentration`](https://open-atmos.github.io/PySDM/PySDM/products/size_spectral/particle_concentration.html#ParticleConcentration)
|
|
480
480
|
and the
|
|
481
481
|
[`WaterMixingRatio `](https://open-atmos.github.io/PySDM/PySDM/products/size_spectral/water_mixing_ratio.html).
|
|
482
482
|
|
|
@@ -521,7 +521,7 @@ Description: # PySDM
|
|
|
521
521
|
|
|
522
522
|
r_dry, specific_concentration = spectral_sampling.Logarithmic(spectrum).sample(n_sd)
|
|
523
523
|
v_dry = formulae.trivia.volume(radius=r_dry)
|
|
524
|
-
r_wet = equilibrate_wet_radii(r_dry=r_dry, environment=
|
|
524
|
+
r_wet = equilibrate_wet_radii(r_dry=r_dry, environment=builder.particulator.environment, kappa_times_dry_volume=kappa * v_dry)
|
|
525
525
|
|
|
526
526
|
attributes = Dict()
|
|
527
527
|
attributes["multiplicity"] = discretise_multiplicities(specific_concentration * env.mass_of_dry_air)
|
|
@@ -606,7 +606,7 @@ Description: # PySDM
|
|
|
606
606
|
specific_concentration = tmp{2};
|
|
607
607
|
r_wet = equilibrate_wet_radii(pyargs(...
|
|
608
608
|
'r_dry', r_dry, ...
|
|
609
|
-
'environment',
|
|
609
|
+
'environment', builder.particulator.environment, ...
|
|
610
610
|
'kappa_times_dry_volume', kappa * v_dry...
|
|
611
611
|
));
|
|
612
612
|
|
|
@@ -702,7 +702,7 @@ Description: # PySDM
|
|
|
702
702
|
|
|
703
703
|
r_dry, specific_concentration = spectral_sampling.Logarithmic(spectrum).sample(n_sd)
|
|
704
704
|
v_dry = formulae.trivia.volume(radius=r_dry)
|
|
705
|
-
r_wet = equilibrate_wet_radii(r_dry=r_dry, environment=
|
|
705
|
+
r_wet = equilibrate_wet_radii(r_dry=r_dry, environment=builder.particulator.environment, kappa_times_dry_volume=kappa * v_dry)
|
|
706
706
|
|
|
707
707
|
attributes = {
|
|
708
708
|
'multiplicity': discretise_multiplicities(specific_concentration * env.mass_of_dry_air),
|
|
@@ -49,8 +49,7 @@ class Builder:
|
|
|
49
49
|
def _set_environment(self, environment):
|
|
50
50
|
if self.particulator.environment is not None:
|
|
51
51
|
raise AssertionError("environment has already been set")
|
|
52
|
-
self.particulator.environment = environment
|
|
53
|
-
self.particulator.environment.register(self)
|
|
52
|
+
self.particulator.environment = environment.instantiate(builder=self)
|
|
54
53
|
|
|
55
54
|
def add_dynamic(self, dynamic):
|
|
56
55
|
assert self.particulator.environment is not None
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
""" decorator for environment classes
|
|
2
|
+
ensuring that their instances can be re-used with multiple builders """
|
|
3
|
+
|
|
4
|
+
from copy import deepcopy
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
def _instantiate(self, *, builder):
|
|
8
|
+
copy = deepcopy(self)
|
|
9
|
+
copy.register(builder=builder)
|
|
10
|
+
return copy
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
def register_environment():
|
|
14
|
+
def decorator(cls):
|
|
15
|
+
if hasattr(cls, "instantiate"):
|
|
16
|
+
if cls.instantiate is not _instantiate:
|
|
17
|
+
raise AttributeError(
|
|
18
|
+
"decorated class has a different instantiate method"
|
|
19
|
+
)
|
|
20
|
+
else:
|
|
21
|
+
setattr(cls, "instantiate", _instantiate)
|
|
22
|
+
return cls
|
|
23
|
+
|
|
24
|
+
return decorator
|
|
@@ -7,10 +7,12 @@ import numpy as np
|
|
|
7
7
|
|
|
8
8
|
from PySDM.environments.impl.moist import Moist
|
|
9
9
|
|
|
10
|
-
from
|
|
11
|
-
from
|
|
10
|
+
from PySDM.impl import arakawa_c
|
|
11
|
+
from PySDM.initialisation.equilibrate_wet_radii import equilibrate_wet_radii
|
|
12
|
+
from PySDM.environments.impl import register_environment
|
|
12
13
|
|
|
13
14
|
|
|
15
|
+
@register_environment()
|
|
14
16
|
class Kinematic1D(Moist):
|
|
15
17
|
def __init__(self, *, dt, mesh, thd_of_z, rhod_of_z, z0=0):
|
|
16
18
|
super().__init__(dt, mesh, [])
|
|
@@ -12,10 +12,11 @@ from PySDM.initialisation.equilibrate_wet_radii import (
|
|
|
12
12
|
equilibrate_wet_radii,
|
|
13
13
|
)
|
|
14
14
|
from PySDM.initialisation.sampling.spectral_sampling import ConstantMultiplicity
|
|
15
|
-
|
|
16
|
-
from
|
|
15
|
+
from PySDM.impl import arakawa_c
|
|
16
|
+
from PySDM.environments.impl import register_environment
|
|
17
17
|
|
|
18
18
|
|
|
19
|
+
@register_environment()
|
|
19
20
|
class Kinematic2D(Moist):
|
|
20
21
|
def __init__(self, *, dt, grid, size, rhod_of, mixed_phase=False):
|
|
21
22
|
super().__init__(dt, Mesh(grid, size), [], mixed_phase=mixed_phase)
|
|
@@ -12,8 +12,10 @@ from PySDM.initialisation.equilibrate_wet_radii import (
|
|
|
12
12
|
default_rtol,
|
|
13
13
|
equilibrate_wet_radii,
|
|
14
14
|
)
|
|
15
|
+
from PySDM.environments.impl import register_environment
|
|
15
16
|
|
|
16
17
|
|
|
18
|
+
@register_environment()
|
|
17
19
|
class Parcel(Moist): # pylint: disable=too-many-instance-attributes
|
|
18
20
|
def __init__(
|
|
19
21
|
self,
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: PySDM
|
|
3
|
-
Version: 2.
|
|
3
|
+
Version: 2.73
|
|
4
4
|
Summary: Pythonic particle-based (super-droplet) warm-rain/aqueous-chemistry cloud microphysics package with box, parcel & 1D/2D prescribed-flow examples in Python, Julia and Matlab
|
|
5
5
|
Home-page: https://github.com/open-atmos/PySDM
|
|
6
6
|
Author: https://github.com/open-atmos/PySDM/graphs/contributors
|
|
@@ -32,7 +32,7 @@ Description: # PySDM
|
|
|
32
32
|
[](https://ci.appveyor.com/project/slayoo/pysdm/branch/main)
|
|
33
33
|
[](https://app.codecov.io/gh/open-atmos/PySDM)
|
|
34
34
|
[](https://pypi.org/project/PySDM)
|
|
35
|
-
[](https://open-atmos.github.io/PySDM/)
|
|
36
36
|
|
|
37
37
|
PySDM is a package for simulating the dynamics of population of particles.
|
|
38
38
|
It is intended to serve as a building block for simulation systems modelling
|
|
@@ -62,9 +62,9 @@ Description: # PySDM
|
|
|
62
62
|
PySDM has two alternative parallel number-crunching backends
|
|
63
63
|
available: multi-threaded CPU backend based on [Numba](http://numba.pydata.org/)
|
|
64
64
|
and GPU-resident backend built on top of [ThrustRTC](https://pypi.org/project/ThrustRTC/).
|
|
65
|
-
The [`Numba`](https://open-atmos.github.io/PySDM/PySDM/backends/numba
|
|
65
|
+
The [`Numba`](https://open-atmos.github.io/PySDM/PySDM/backends/numba.html) backend (aliased ``CPU``) features multi-threaded parallelism for
|
|
66
66
|
multi-core CPUs, it uses the just-in-time compilation technique based on the LLVM infrastructure.
|
|
67
|
-
The [`ThrustRTC`](https://open-atmos.github.io/PySDM/PySDM/backends/
|
|
67
|
+
The [`ThrustRTC`](https://open-atmos.github.io/PySDM/PySDM/backends/thrust_rtc.html) backend (aliased ``GPU``) offers GPU-resident operation of PySDM
|
|
68
68
|
leveraging the [SIMT](https://en.wikipedia.org/wiki/Single_instruction,_multiple_threads)
|
|
69
69
|
parallelisation model.
|
|
70
70
|
Using the ``GPU`` backend requires nVidia hardware and [CUDA driver](https://developer.nvidia.com/cuda-downloads).
|
|
@@ -76,7 +76,7 @@ Description: # PySDM
|
|
|
76
76
|
PySDM includes an extension of the SDM scheme to represent collisional breakup described in [de Jong, Mackay et al. 2023](10.5194/gmd-16-4193-2023).
|
|
77
77
|
For a list of talks and other materials on PySDM as well as a list of published papers featuring PySDM simulations, see the [project wiki](https://github.com/open-atmos/PySDM/wiki).
|
|
78
78
|
|
|
79
|
-
A [pdoc-generated](https://
|
|
79
|
+
A [pdoc-generated](https://pdoc.dev/) documentation of PySDM public API is maintained at: [https://open-atmos.github.io/PySDM](https://open-atmos.github.io/PySDM)
|
|
80
80
|
|
|
81
81
|
## Example Jupyter notebooks (reproducing results from literature):
|
|
82
82
|
|
|
@@ -186,8 +186,8 @@ Description: # PySDM
|
|
|
186
186
|
listings provide sample code roughly reproducing the
|
|
187
187
|
Figure 2 from [Shima et al. 2009 paper](http://doi.org/10.1002/qj.441)
|
|
188
188
|
using PySDM from Python, Julia and Matlab.
|
|
189
|
-
It is a [`Coalescence`](https://open-atmos.github.io/PySDM/PySDM/dynamics/
|
|
190
|
-
spectrum is [`Exponential`](https://open-atmos.github.io/PySDM/PySDM/initialisation/spectra.html#
|
|
189
|
+
It is a [`Coalescence`](https://open-atmos.github.io/PySDM/PySDM/dynamics/collisions/sollision.html#Coalescence)-only set-up in which the initial particle size
|
|
190
|
+
spectrum is [`Exponential`](https://open-atmos.github.io/PySDM/PySDM/initialisation/spectra/exponential.html#Exponential) and is deterministically sampled to match
|
|
191
191
|
the condition of each super-droplet having equal initial multiplicity:
|
|
192
192
|
<details>
|
|
193
193
|
<summary>Julia (click to expand)</summary>
|
|
@@ -241,9 +241,9 @@ Description: # PySDM
|
|
|
241
241
|
```
|
|
242
242
|
</details>
|
|
243
243
|
|
|
244
|
-
The key element of the PySDM interface is the [``Particulator``](https://open-atmos.github.io/PySDM/PySDM/particulator.html)
|
|
244
|
+
The key element of the PySDM interface is the [``Particulator``](https://open-atmos.github.io/PySDM/PySDM/particulator.html#Particulator)
|
|
245
245
|
class instances of which are used to manage the system state and control the simulation.
|
|
246
|
-
Instantiation of the [``Particulator``](https://open-atmos.github.io/PySDM/PySDM/particulator.html) class is handled by the [``Builder``](https://open-atmos.github.io/PySDM/PySDM/builder.html)
|
|
246
|
+
Instantiation of the [``Particulator``](https://open-atmos.github.io/PySDM/PySDM/particulator.html#Particulator) class is handled by the [``Builder``](https://open-atmos.github.io/PySDM/PySDM/builder.html#Builder)
|
|
247
247
|
as exemplified below:
|
|
248
248
|
<details>
|
|
249
249
|
<summary>Julia (click to expand)</summary>
|
|
@@ -313,18 +313,18 @@ Description: # PySDM
|
|
|
313
313
|
The ``backend`` argument may be set to ``CPU`` or ``GPU``
|
|
314
314
|
what translates to choosing the multi-threaded backend or the
|
|
315
315
|
GPU-resident computation mode, respectively.
|
|
316
|
-
The employed [`Box`](https://open-atmos.github.io/PySDM/PySDM/environments/box.html) environment corresponds to a zero-dimensional framework
|
|
316
|
+
The employed [`Box`](https://open-atmos.github.io/PySDM/PySDM/environments/box.html#Box) environment corresponds to a zero-dimensional framework
|
|
317
317
|
(particle positions are not considered).
|
|
318
318
|
The vectors of particle multiplicities ``n`` and particle volumes ``v`` are
|
|
319
319
|
used to initialise super-droplet attributes.
|
|
320
|
-
The [`Coalescence`](https://open-atmos.github.io/PySDM/PySDM/dynamics/
|
|
320
|
+
The [`Coalescence`](https://open-atmos.github.io/PySDM/PySDM/dynamics/collisions/collision.html#Coalescence)
|
|
321
321
|
Monte-Carlo algorithm (Super Droplet Method) is registered as the only
|
|
322
322
|
dynamic in the system.
|
|
323
|
-
Finally, the [`build()`](https://open-atmos.github.io/PySDM/PySDM/builder.html#
|
|
324
|
-
of [`Particulator`](https://open-atmos.github.io/PySDM/PySDM/particulator.html#
|
|
323
|
+
Finally, the [`build()`](https://open-atmos.github.io/PySDM/PySDM/builder.html#Builder.build) method is used to obtain an instance
|
|
324
|
+
of [`Particulator`](https://open-atmos.github.io/PySDM/PySDM/particulator.html#Particulator) which can then be used to control time-stepping and
|
|
325
325
|
access simulation state.
|
|
326
326
|
|
|
327
|
-
The [`run(nt)`](https://open-atmos.github.io/PySDM/PySDM/particulator.html#
|
|
327
|
+
The [`run(nt)`](https://open-atmos.github.io/PySDM/PySDM/particulator.html#Particulator.run) method advances the simulation by ``nt`` timesteps.
|
|
328
328
|
In the listing below, its usage is interleaved with plotting logic
|
|
329
329
|
which displays a histogram of particle mass distribution
|
|
330
330
|
at selected timesteps:
|
|
@@ -441,16 +441,16 @@ Description: # PySDM
|
|
|
441
441
|
SPECTRUM_INIT["ParticleVolumeVersusRadiusLogarithmSpectrum.__init__()"] -->|instantiates| SPECTRUM
|
|
442
442
|
SPECTRUM[":ParticleVolumeVersusRadiusLogarithmSpectrum"] -->|added as element of| PRODUCTS
|
|
443
443
|
|
|
444
|
-
click COAL "https://open-atmos.github.io/PySDM/PySDM/dynamics/collisions/collision.html"
|
|
444
|
+
click COAL "https://open-atmos.github.io/PySDM/PySDM/dynamics/collisions/collision.html#Coalescence"
|
|
445
445
|
click BUILDER_INSTANCE "https://open-atmos.github.io/PySDM/PySDM/builder.html"
|
|
446
446
|
click BUILDER_INIT "https://open-atmos.github.io/PySDM/PySDM/builder.html"
|
|
447
447
|
click BUILDER_ADD_DYN "https://open-atmos.github.io/PySDM/PySDM/builder.html"
|
|
448
|
-
click ENV_INIT "https://open-atmos.github.io/PySDM/PySDM/environments
|
|
449
|
-
click ENV "https://open-atmos.github.io/PySDM/PySDM/environments
|
|
450
|
-
click KERNEL_INIT "https://open-atmos.github.io/PySDM/PySDM/dynamics/collisions/collision_kernels
|
|
451
|
-
click KERNEL "https://open-atmos.github.io/PySDM/PySDM/dynamics/collisions/collision_kernels
|
|
452
|
-
click EXP_INIT "https://open-atmos.github.io/PySDM/PySDM/initialisation/spectra
|
|
453
|
-
click IS "https://open-atmos.github.io/PySDM/PySDM/initialisation/spectra
|
|
448
|
+
click ENV_INIT "https://open-atmos.github.io/PySDM/PySDM/environments.html"
|
|
449
|
+
click ENV "https://open-atmos.github.io/PySDM/PySDM/environments.html"
|
|
450
|
+
click KERNEL_INIT "https://open-atmos.github.io/PySDM/PySDM/dynamics/collisions/collision_kernels.html"
|
|
451
|
+
click KERNEL "https://open-atmos.github.io/PySDM/PySDM/dynamics/collisions/collision_kernels.html"
|
|
452
|
+
click EXP_INIT "https://open-atmos.github.io/PySDM/PySDM/initialisation/spectra.html"
|
|
453
|
+
click IS "https://open-atmos.github.io/PySDM/PySDM/initialisation/spectra.html"
|
|
454
454
|
click CM_INIT "https://open-atmos.github.io/PySDM/PySDM/initialisation/sampling/spectral_sampling.html"
|
|
455
455
|
click CM_INSTANCE "https://open-atmos.github.io/PySDM/PySDM/initialisation/sampling/spectral_sampling.html"
|
|
456
456
|
click SAMPLE "https://open-atmos.github.io/PySDM/PySDM/initialisation/sampling/spectral_sampling.html"
|
|
@@ -466,7 +466,7 @@ Description: # PySDM
|
|
|
466
466
|
|
|
467
467
|
In the following example, a condensation-only setup is used with the adiabatic
|
|
468
468
|
[`Parcel`](https://open-atmos.github.io/PySDM/PySDM/environments/parcel.html) environment.
|
|
469
|
-
An initial [`Lognormal`](https://open-atmos.github.io/PySDM/PySDM/initialisation/spectra.html#
|
|
469
|
+
An initial [`Lognormal`](https://open-atmos.github.io/PySDM/PySDM/initialisation/spectra/lognormal.html#Lognormal)
|
|
470
470
|
spectrum of dry aerosol particles is first initialised to equilibrium wet size for the given
|
|
471
471
|
initial humidity.
|
|
472
472
|
Subsequent particle growth due to [`Condensation`](https://open-atmos.github.io/PySDM/PySDM/dynamics/condensation.html) of water vapour (coupled with the release of latent heat)
|
|
@@ -476,7 +476,7 @@ Description: # PySDM
|
|
|
476
476
|
and depict the evolution of
|
|
477
477
|
[`PeakSupersaturation`](https://open-atmos.github.io/PySDM/PySDM/products/condensation/peak_supersaturation.html),
|
|
478
478
|
[`EffectiveRadius`](https://open-atmos.github.io/PySDM/PySDM/products/size_spectral/effective_radius.html),
|
|
479
|
-
[`ParticleConcentration`](https://open-atmos.github.io/PySDM/PySDM/products/size_spectral/particle_concentration.html#
|
|
479
|
+
[`ParticleConcentration`](https://open-atmos.github.io/PySDM/PySDM/products/size_spectral/particle_concentration.html#ParticleConcentration)
|
|
480
480
|
and the
|
|
481
481
|
[`WaterMixingRatio `](https://open-atmos.github.io/PySDM/PySDM/products/size_spectral/water_mixing_ratio.html).
|
|
482
482
|
|
|
@@ -521,7 +521,7 @@ Description: # PySDM
|
|
|
521
521
|
|
|
522
522
|
r_dry, specific_concentration = spectral_sampling.Logarithmic(spectrum).sample(n_sd)
|
|
523
523
|
v_dry = formulae.trivia.volume(radius=r_dry)
|
|
524
|
-
r_wet = equilibrate_wet_radii(r_dry=r_dry, environment=
|
|
524
|
+
r_wet = equilibrate_wet_radii(r_dry=r_dry, environment=builder.particulator.environment, kappa_times_dry_volume=kappa * v_dry)
|
|
525
525
|
|
|
526
526
|
attributes = Dict()
|
|
527
527
|
attributes["multiplicity"] = discretise_multiplicities(specific_concentration * env.mass_of_dry_air)
|
|
@@ -606,7 +606,7 @@ Description: # PySDM
|
|
|
606
606
|
specific_concentration = tmp{2};
|
|
607
607
|
r_wet = equilibrate_wet_radii(pyargs(...
|
|
608
608
|
'r_dry', r_dry, ...
|
|
609
|
-
'environment',
|
|
609
|
+
'environment', builder.particulator.environment, ...
|
|
610
610
|
'kappa_times_dry_volume', kappa * v_dry...
|
|
611
611
|
));
|
|
612
612
|
|
|
@@ -702,7 +702,7 @@ Description: # PySDM
|
|
|
702
702
|
|
|
703
703
|
r_dry, specific_concentration = spectral_sampling.Logarithmic(spectrum).sample(n_sd)
|
|
704
704
|
v_dry = formulae.trivia.volume(radius=r_dry)
|
|
705
|
-
r_wet = equilibrate_wet_radii(r_dry=r_dry, environment=
|
|
705
|
+
r_wet = equilibrate_wet_radii(r_dry=r_dry, environment=builder.particulator.environment, kappa_times_dry_volume=kappa * v_dry)
|
|
706
706
|
|
|
707
707
|
attributes = {
|
|
708
708
|
'multiplicity': discretise_multiplicities(specific_concentration * env.mass_of_dry_air),
|
|
@@ -15,7 +15,6 @@ setup.py
|
|
|
15
15
|
.github/workflows/cancel.yml
|
|
16
16
|
.github/workflows/joss.yml
|
|
17
17
|
.github/workflows/joss_paper.yml
|
|
18
|
-
.github/workflows/pdoc_index_workaround.py
|
|
19
18
|
.github/workflows/readme_snippets.yml
|
|
20
19
|
.github/workflows/stale.yml
|
|
21
20
|
.github/workflows/tests+artifacts+pypi.yml
|
|
@@ -189,6 +188,7 @@ PySDM/environments/kinematic_2d.py
|
|
|
189
188
|
PySDM/environments/parcel.py
|
|
190
189
|
PySDM/environments/impl/__init__.py
|
|
191
190
|
PySDM/environments/impl/moist.py
|
|
191
|
+
PySDM/environments/impl/register_environment.py
|
|
192
192
|
PySDM/exporters/__init__.py
|
|
193
193
|
PySDM/exporters/netcdf_exporter.py
|
|
194
194
|
PySDM/exporters/netcdf_exporter_1d.py
|
|
@@ -633,6 +633,7 @@ paper/paper.md
|
|
|
633
633
|
paper/paperv1.md
|
|
634
634
|
paper/readme.pdf
|
|
635
635
|
paper/test.pdf
|
|
636
|
+
pdoc_templates/index.html.jinja2
|
|
636
637
|
tests/__init__.py
|
|
637
638
|
tests/examples_tests/__init__.py
|
|
638
639
|
tests/examples_tests/conftest.py
|
|
@@ -799,6 +800,8 @@ tests/unit_tests/dynamics/displacement/displacement_settings.py
|
|
|
799
800
|
tests/unit_tests/dynamics/displacement/test_advection.py
|
|
800
801
|
tests/unit_tests/dynamics/displacement/test_courant_product.py
|
|
801
802
|
tests/unit_tests/dynamics/displacement/test_sedimentation.py
|
|
803
|
+
tests/unit_tests/environments/__init__.py
|
|
804
|
+
tests/unit_tests/environments/test_impl.py
|
|
802
805
|
tests/unit_tests/impl/__init__.py
|
|
803
806
|
tests/unit_tests/impl/test_camel_case.py
|
|
804
807
|
tests/unit_tests/impl/test_mesh.py
|
|
@@ -21,7 +21,7 @@
|
|
|
21
21
|
[](https://ci.appveyor.com/project/slayoo/pysdm/branch/main)
|
|
22
22
|
[](https://app.codecov.io/gh/open-atmos/PySDM)
|
|
23
23
|
[](https://pypi.org/project/PySDM)
|
|
24
|
-
[](https://open-atmos.github.io/PySDM/)
|
|
25
25
|
|
|
26
26
|
PySDM is a package for simulating the dynamics of population of particles.
|
|
27
27
|
It is intended to serve as a building block for simulation systems modelling
|
|
@@ -51,9 +51,9 @@ Like the examples, these tutorials can be executed or viewed "in the cloud" maki
|
|
|
51
51
|
PySDM has two alternative parallel number-crunching backends
|
|
52
52
|
available: multi-threaded CPU backend based on [Numba](http://numba.pydata.org/)
|
|
53
53
|
and GPU-resident backend built on top of [ThrustRTC](https://pypi.org/project/ThrustRTC/).
|
|
54
|
-
The [`Numba`](https://open-atmos.github.io/PySDM/PySDM/backends/numba
|
|
54
|
+
The [`Numba`](https://open-atmos.github.io/PySDM/PySDM/backends/numba.html) backend (aliased ``CPU``) features multi-threaded parallelism for
|
|
55
55
|
multi-core CPUs, it uses the just-in-time compilation technique based on the LLVM infrastructure.
|
|
56
|
-
The [`ThrustRTC`](https://open-atmos.github.io/PySDM/PySDM/backends/
|
|
56
|
+
The [`ThrustRTC`](https://open-atmos.github.io/PySDM/PySDM/backends/thrust_rtc.html) backend (aliased ``GPU``) offers GPU-resident operation of PySDM
|
|
57
57
|
leveraging the [SIMT](https://en.wikipedia.org/wiki/Single_instruction,_multiple_threads)
|
|
58
58
|
parallelisation model.
|
|
59
59
|
Using the ``GPU`` backend requires nVidia hardware and [CUDA driver](https://developer.nvidia.com/cuda-downloads).
|
|
@@ -65,7 +65,7 @@ For an overview of PySDM features (and the preferred way to cite PySDM in papers
|
|
|
65
65
|
PySDM includes an extension of the SDM scheme to represent collisional breakup described in [de Jong, Mackay et al. 2023](10.5194/gmd-16-4193-2023).
|
|
66
66
|
For a list of talks and other materials on PySDM as well as a list of published papers featuring PySDM simulations, see the [project wiki](https://github.com/open-atmos/PySDM/wiki).
|
|
67
67
|
|
|
68
|
-
A [pdoc-generated](https://
|
|
68
|
+
A [pdoc-generated](https://pdoc.dev/) documentation of PySDM public API is maintained at: [https://open-atmos.github.io/PySDM](https://open-atmos.github.io/PySDM)
|
|
69
69
|
|
|
70
70
|
## Example Jupyter notebooks (reproducing results from literature):
|
|
71
71
|
|
|
@@ -175,8 +175,8 @@ In order to depict the PySDM API with a practical example, the following
|
|
|
175
175
|
listings provide sample code roughly reproducing the
|
|
176
176
|
Figure 2 from [Shima et al. 2009 paper](http://doi.org/10.1002/qj.441)
|
|
177
177
|
using PySDM from Python, Julia and Matlab.
|
|
178
|
-
It is a [`Coalescence`](https://open-atmos.github.io/PySDM/PySDM/dynamics/
|
|
179
|
-
spectrum is [`Exponential`](https://open-atmos.github.io/PySDM/PySDM/initialisation/spectra.html#
|
|
178
|
+
It is a [`Coalescence`](https://open-atmos.github.io/PySDM/PySDM/dynamics/collisions/sollision.html#Coalescence)-only set-up in which the initial particle size
|
|
179
|
+
spectrum is [`Exponential`](https://open-atmos.github.io/PySDM/PySDM/initialisation/spectra/exponential.html#Exponential) and is deterministically sampled to match
|
|
180
180
|
the condition of each super-droplet having equal initial multiplicity:
|
|
181
181
|
<details>
|
|
182
182
|
<summary>Julia (click to expand)</summary>
|
|
@@ -230,9 +230,9 @@ attributes['volume'], attributes['multiplicity'] = ConstantMultiplicity(initial_
|
|
|
230
230
|
```
|
|
231
231
|
</details>
|
|
232
232
|
|
|
233
|
-
The key element of the PySDM interface is the [``Particulator``](https://open-atmos.github.io/PySDM/PySDM/particulator.html)
|
|
233
|
+
The key element of the PySDM interface is the [``Particulator``](https://open-atmos.github.io/PySDM/PySDM/particulator.html#Particulator)
|
|
234
234
|
class instances of which are used to manage the system state and control the simulation.
|
|
235
|
-
Instantiation of the [``Particulator``](https://open-atmos.github.io/PySDM/PySDM/particulator.html) class is handled by the [``Builder``](https://open-atmos.github.io/PySDM/PySDM/builder.html)
|
|
235
|
+
Instantiation of the [``Particulator``](https://open-atmos.github.io/PySDM/PySDM/particulator.html#Particulator) class is handled by the [``Builder``](https://open-atmos.github.io/PySDM/PySDM/builder.html#Builder)
|
|
236
236
|
as exemplified below:
|
|
237
237
|
<details>
|
|
238
238
|
<summary>Julia (click to expand)</summary>
|
|
@@ -302,18 +302,18 @@ particulator = builder.build(attributes, products)
|
|
|
302
302
|
The ``backend`` argument may be set to ``CPU`` or ``GPU``
|
|
303
303
|
what translates to choosing the multi-threaded backend or the
|
|
304
304
|
GPU-resident computation mode, respectively.
|
|
305
|
-
The employed [`Box`](https://open-atmos.github.io/PySDM/PySDM/environments/box.html) environment corresponds to a zero-dimensional framework
|
|
305
|
+
The employed [`Box`](https://open-atmos.github.io/PySDM/PySDM/environments/box.html#Box) environment corresponds to a zero-dimensional framework
|
|
306
306
|
(particle positions are not considered).
|
|
307
307
|
The vectors of particle multiplicities ``n`` and particle volumes ``v`` are
|
|
308
308
|
used to initialise super-droplet attributes.
|
|
309
|
-
The [`Coalescence`](https://open-atmos.github.io/PySDM/PySDM/dynamics/
|
|
309
|
+
The [`Coalescence`](https://open-atmos.github.io/PySDM/PySDM/dynamics/collisions/collision.html#Coalescence)
|
|
310
310
|
Monte-Carlo algorithm (Super Droplet Method) is registered as the only
|
|
311
311
|
dynamic in the system.
|
|
312
|
-
Finally, the [`build()`](https://open-atmos.github.io/PySDM/PySDM/builder.html#
|
|
313
|
-
of [`Particulator`](https://open-atmos.github.io/PySDM/PySDM/particulator.html#
|
|
312
|
+
Finally, the [`build()`](https://open-atmos.github.io/PySDM/PySDM/builder.html#Builder.build) method is used to obtain an instance
|
|
313
|
+
of [`Particulator`](https://open-atmos.github.io/PySDM/PySDM/particulator.html#Particulator) which can then be used to control time-stepping and
|
|
314
314
|
access simulation state.
|
|
315
315
|
|
|
316
|
-
The [`run(nt)`](https://open-atmos.github.io/PySDM/PySDM/particulator.html#
|
|
316
|
+
The [`run(nt)`](https://open-atmos.github.io/PySDM/PySDM/particulator.html#Particulator.run) method advances the simulation by ``nt`` timesteps.
|
|
317
317
|
In the listing below, its usage is interleaved with plotting logic
|
|
318
318
|
which displays a histogram of particle mass distribution
|
|
319
319
|
at selected timesteps:
|
|
@@ -430,16 +430,16 @@ The component submodules used to create this simulation are visualized below:
|
|
|
430
430
|
SPECTRUM_INIT["ParticleVolumeVersusRadiusLogarithmSpectrum.__init__()"] -->|instantiates| SPECTRUM
|
|
431
431
|
SPECTRUM[":ParticleVolumeVersusRadiusLogarithmSpectrum"] -->|added as element of| PRODUCTS
|
|
432
432
|
|
|
433
|
-
click COAL "https://open-atmos.github.io/PySDM/PySDM/dynamics/collisions/collision.html"
|
|
433
|
+
click COAL "https://open-atmos.github.io/PySDM/PySDM/dynamics/collisions/collision.html#Coalescence"
|
|
434
434
|
click BUILDER_INSTANCE "https://open-atmos.github.io/PySDM/PySDM/builder.html"
|
|
435
435
|
click BUILDER_INIT "https://open-atmos.github.io/PySDM/PySDM/builder.html"
|
|
436
436
|
click BUILDER_ADD_DYN "https://open-atmos.github.io/PySDM/PySDM/builder.html"
|
|
437
|
-
click ENV_INIT "https://open-atmos.github.io/PySDM/PySDM/environments
|
|
438
|
-
click ENV "https://open-atmos.github.io/PySDM/PySDM/environments
|
|
439
|
-
click KERNEL_INIT "https://open-atmos.github.io/PySDM/PySDM/dynamics/collisions/collision_kernels
|
|
440
|
-
click KERNEL "https://open-atmos.github.io/PySDM/PySDM/dynamics/collisions/collision_kernels
|
|
441
|
-
click EXP_INIT "https://open-atmos.github.io/PySDM/PySDM/initialisation/spectra
|
|
442
|
-
click IS "https://open-atmos.github.io/PySDM/PySDM/initialisation/spectra
|
|
437
|
+
click ENV_INIT "https://open-atmos.github.io/PySDM/PySDM/environments.html"
|
|
438
|
+
click ENV "https://open-atmos.github.io/PySDM/PySDM/environments.html"
|
|
439
|
+
click KERNEL_INIT "https://open-atmos.github.io/PySDM/PySDM/dynamics/collisions/collision_kernels.html"
|
|
440
|
+
click KERNEL "https://open-atmos.github.io/PySDM/PySDM/dynamics/collisions/collision_kernels.html"
|
|
441
|
+
click EXP_INIT "https://open-atmos.github.io/PySDM/PySDM/initialisation/spectra.html"
|
|
442
|
+
click IS "https://open-atmos.github.io/PySDM/PySDM/initialisation/spectra.html"
|
|
443
443
|
click CM_INIT "https://open-atmos.github.io/PySDM/PySDM/initialisation/sampling/spectral_sampling.html"
|
|
444
444
|
click CM_INSTANCE "https://open-atmos.github.io/PySDM/PySDM/initialisation/sampling/spectral_sampling.html"
|
|
445
445
|
click SAMPLE "https://open-atmos.github.io/PySDM/PySDM/initialisation/sampling/spectral_sampling.html"
|
|
@@ -455,7 +455,7 @@ The component submodules used to create this simulation are visualized below:
|
|
|
455
455
|
|
|
456
456
|
In the following example, a condensation-only setup is used with the adiabatic
|
|
457
457
|
[`Parcel`](https://open-atmos.github.io/PySDM/PySDM/environments/parcel.html) environment.
|
|
458
|
-
An initial [`Lognormal`](https://open-atmos.github.io/PySDM/PySDM/initialisation/spectra.html#
|
|
458
|
+
An initial [`Lognormal`](https://open-atmos.github.io/PySDM/PySDM/initialisation/spectra/lognormal.html#Lognormal)
|
|
459
459
|
spectrum of dry aerosol particles is first initialised to equilibrium wet size for the given
|
|
460
460
|
initial humidity.
|
|
461
461
|
Subsequent particle growth due to [`Condensation`](https://open-atmos.github.io/PySDM/PySDM/dynamics/condensation.html) of water vapour (coupled with the release of latent heat)
|
|
@@ -465,7 +465,7 @@ Results of the simulation are plotted against vertical
|
|
|
465
465
|
and depict the evolution of
|
|
466
466
|
[`PeakSupersaturation`](https://open-atmos.github.io/PySDM/PySDM/products/condensation/peak_supersaturation.html),
|
|
467
467
|
[`EffectiveRadius`](https://open-atmos.github.io/PySDM/PySDM/products/size_spectral/effective_radius.html),
|
|
468
|
-
[`ParticleConcentration`](https://open-atmos.github.io/PySDM/PySDM/products/size_spectral/particle_concentration.html#
|
|
468
|
+
[`ParticleConcentration`](https://open-atmos.github.io/PySDM/PySDM/products/size_spectral/particle_concentration.html#ParticleConcentration)
|
|
469
469
|
and the
|
|
470
470
|
[`WaterMixingRatio `](https://open-atmos.github.io/PySDM/PySDM/products/size_spectral/water_mixing_ratio.html).
|
|
471
471
|
|
|
@@ -510,7 +510,7 @@ builder.add_dynamic(Condensation())
|
|
|
510
510
|
|
|
511
511
|
r_dry, specific_concentration = spectral_sampling.Logarithmic(spectrum).sample(n_sd)
|
|
512
512
|
v_dry = formulae.trivia.volume(radius=r_dry)
|
|
513
|
-
r_wet = equilibrate_wet_radii(r_dry=r_dry, environment=
|
|
513
|
+
r_wet = equilibrate_wet_radii(r_dry=r_dry, environment=builder.particulator.environment, kappa_times_dry_volume=kappa * v_dry)
|
|
514
514
|
|
|
515
515
|
attributes = Dict()
|
|
516
516
|
attributes["multiplicity"] = discretise_multiplicities(specific_concentration * env.mass_of_dry_air)
|
|
@@ -595,7 +595,7 @@ v_dry = formulae.trivia.volume(pyargs('radius', r_dry));
|
|
|
595
595
|
specific_concentration = tmp{2};
|
|
596
596
|
r_wet = equilibrate_wet_radii(pyargs(...
|
|
597
597
|
'r_dry', r_dry, ...
|
|
598
|
-
'environment',
|
|
598
|
+
'environment', builder.particulator.environment, ...
|
|
599
599
|
'kappa_times_dry_volume', kappa * v_dry...
|
|
600
600
|
));
|
|
601
601
|
|
|
@@ -691,7 +691,7 @@ builder.add_dynamic(Condensation())
|
|
|
691
691
|
|
|
692
692
|
r_dry, specific_concentration = spectral_sampling.Logarithmic(spectrum).sample(n_sd)
|
|
693
693
|
v_dry = formulae.trivia.volume(radius=r_dry)
|
|
694
|
-
r_wet = equilibrate_wet_radii(r_dry=r_dry, environment=
|
|
694
|
+
r_wet = equilibrate_wet_radii(r_dry=r_dry, environment=builder.particulator.environment, kappa_times_dry_volume=kappa * v_dry)
|
|
695
695
|
|
|
696
696
|
attributes = {
|
|
697
697
|
'multiplicity': discretise_multiplicities(specific_concentration * env.mass_of_dry_air),
|