PySDM-examples 3.0.0rc12__tar.gz → 3.0.0rc16__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_examples-3.0.0rc12 → pysdm_examples-3.0.0rc16}/PKG-INFO +7 -4
- {pysdm_examples-3.0.0rc12 → pysdm_examples-3.0.0rc16}/PySDM_examples/Abade_and_Albuquerque_2024/simulation.py +3 -3
- {pysdm_examples-3.0.0rc12 → pysdm_examples-3.0.0rc16}/PySDM_examples/Abdul_Razzak_Ghan_2000/run_ARG_parcel.py +3 -1
- {pysdm_examples-3.0.0rc12 → pysdm_examples-3.0.0rc16}/PySDM_examples/Alpert_and_Knopf_2016/simulation.py +3 -1
- {pysdm_examples-3.0.0rc12 → pysdm_examples-3.0.0rc16}/PySDM_examples/Bieli_et_al_2022/simulation.py +1 -1
- {pysdm_examples-3.0.0rc12 → pysdm_examples-3.0.0rc16}/PySDM_examples/Ervens_and_Feingold_2012/settings.py +1 -1
- {pysdm_examples-3.0.0rc12 → pysdm_examples-3.0.0rc16}/PySDM_examples/Grabowski_and_Pawlowska_2023/simulation.py +3 -2
- {pysdm_examples-3.0.0rc12 → pysdm_examples-3.0.0rc16}/PySDM_examples/Jensen_and_Nugent_2017/simulation.py +1 -1
- {pysdm_examples-3.0.0rc12 → pysdm_examples-3.0.0rc16}/PySDM_examples/Kreidenweis_et_al_2003/settings.py +12 -8
- {pysdm_examples-3.0.0rc12 → pysdm_examples-3.0.0rc16}/PySDM_examples/Lowe_et_al_2019/settings.py +0 -3
- {pysdm_examples-3.0.0rc12 → pysdm_examples-3.0.0rc16}/PySDM_examples/Lowe_et_al_2019/simulation.py +3 -2
- pysdm_examples-3.0.0rc16/PySDM_examples/Matsushima_et_al_2023/__init__.py +7 -0
- {pysdm_examples-3.0.0rc12 → pysdm_examples-3.0.0rc16}/PySDM_examples/Pyrcel/simulation.py +11 -3
- {pysdm_examples-3.0.0rc12 → pysdm_examples-3.0.0rc16}/PySDM_examples/Shima_et_al_2009/example.py +3 -1
- {pysdm_examples-3.0.0rc12 → pysdm_examples-3.0.0rc16}/PySDM_examples/Shima_et_al_2009/example_timing.py +3 -1
- {pysdm_examples-3.0.0rc12 → pysdm_examples-3.0.0rc16}/PySDM_examples/Shima_et_al_2009/tutorial_example.py +1 -1
- {pysdm_examples-3.0.0rc12 → pysdm_examples-3.0.0rc16}/PySDM_examples/Spichtinger_et_al_2023/settings.py +1 -1
- pysdm_examples-3.0.0rc16/PySDM_examples/Strzabala_2025_BEng/__init__.py +8 -0
- pysdm_examples-3.0.0rc16/PySDM_examples/Strzabala_2025_BEng/paraview_parcel_model.py +244 -0
- {pysdm_examples-3.0.0rc12 → pysdm_examples-3.0.0rc16}/PySDM_examples/Yang_et_al_2018/settings.py +2 -4
- {pysdm_examples-3.0.0rc12 → pysdm_examples-3.0.0rc16}/PySDM_examples/Yang_et_al_2018/simulation.py +4 -2
- {pysdm_examples-3.0.0rc12 → pysdm_examples-3.0.0rc16}/PySDM_examples/__init__.py +1 -1
- {pysdm_examples-3.0.0rc12 → pysdm_examples-3.0.0rc16}/PySDM_examples/deJong_Azimi/simulation_0D.py +1 -1
- {pysdm_examples-3.0.0rc12 → pysdm_examples-3.0.0rc16}/PySDM_examples/deJong_Mackay_et_al_2023/simulation_0D.py +5 -5
- {pysdm_examples-3.0.0rc12 → pysdm_examples-3.0.0rc16}/PySDM_examples/seeding/settings.py +1 -1
- {pysdm_examples-3.0.0rc12 → pysdm_examples-3.0.0rc16}/PySDM_examples/seeding/simulation.py +3 -1
- {pysdm_examples-3.0.0rc12 → pysdm_examples-3.0.0rc16}/docs/pysdm_examples_landing.md +5 -0
- {pysdm_examples-3.0.0rc12 → pysdm_examples-3.0.0rc16}/pysdm_examples.egg-info/PKG-INFO +7 -4
- {pysdm_examples-3.0.0rc12 → pysdm_examples-3.0.0rc16}/pysdm_examples.egg-info/SOURCES.txt +3 -0
- {pysdm_examples-3.0.0rc12 → pysdm_examples-3.0.0rc16}/pysdm_examples.egg-info/requires.txt +1 -3
- {pysdm_examples-3.0.0rc12 → pysdm_examples-3.0.0rc16}/setup.py +1 -3
- {pysdm_examples-3.0.0rc12 → pysdm_examples-3.0.0rc16}/MANIFEST.in +0 -0
- {pysdm_examples-3.0.0rc12 → pysdm_examples-3.0.0rc16}/PySDM_examples/Abade_and_Albuquerque_2024/__init__.py +0 -0
- {pysdm_examples-3.0.0rc12 → pysdm_examples-3.0.0rc16}/PySDM_examples/Abade_and_Albuquerque_2024/settings.py +0 -0
- {pysdm_examples-3.0.0rc12 → pysdm_examples-3.0.0rc16}/PySDM_examples/Abdul_Razzak_Ghan_2000/__init__.py +0 -0
- {pysdm_examples-3.0.0rc12 → pysdm_examples-3.0.0rc16}/PySDM_examples/Abdul_Razzak_Ghan_2000/aerosol.py +0 -0
- {pysdm_examples-3.0.0rc12 → pysdm_examples-3.0.0rc16}/PySDM_examples/Abdul_Razzak_Ghan_2000/data_from_ARG2000_paper.py +0 -0
- {pysdm_examples-3.0.0rc12 → pysdm_examples-3.0.0rc16}/PySDM_examples/Abdul_Razzak_Ghan_2000/data_from_CloudMicrophysics_ARG.py +0 -0
- {pysdm_examples-3.0.0rc12 → pysdm_examples-3.0.0rc16}/PySDM_examples/Alpert_and_Knopf_2016/__init__.py +0 -0
- {pysdm_examples-3.0.0rc12 → pysdm_examples-3.0.0rc16}/PySDM_examples/Alpert_and_Knopf_2016/table.py +0 -0
- {pysdm_examples-3.0.0rc12 → pysdm_examples-3.0.0rc16}/PySDM_examples/Alpert_and_Knopf_2016/table_1.py +0 -0
- {pysdm_examples-3.0.0rc12 → pysdm_examples-3.0.0rc16}/PySDM_examples/Alpert_and_Knopf_2016/table_2.py +0 -0
- {pysdm_examples-3.0.0rc12 → pysdm_examples-3.0.0rc16}/PySDM_examples/Arabas_and_Shima_2017/__init__.py +0 -0
- {pysdm_examples-3.0.0rc12 → pysdm_examples-3.0.0rc16}/PySDM_examples/Arabas_and_Shima_2017/example.py +0 -0
- {pysdm_examples-3.0.0rc12 → pysdm_examples-3.0.0rc16}/PySDM_examples/Arabas_and_Shima_2017/settings.py +0 -0
- {pysdm_examples-3.0.0rc12 → pysdm_examples-3.0.0rc16}/PySDM_examples/Arabas_and_Shima_2017/simulation.py +0 -0
- {pysdm_examples-3.0.0rc12 → pysdm_examples-3.0.0rc16}/PySDM_examples/Arabas_et_al_2015/__init__.py +0 -0
- {pysdm_examples-3.0.0rc12 → pysdm_examples-3.0.0rc16}/PySDM_examples/Arabas_et_al_2015/example.py +0 -0
- {pysdm_examples-3.0.0rc12 → pysdm_examples-3.0.0rc16}/PySDM_examples/Arabas_et_al_2015/example_benchmark.py +0 -0
- {pysdm_examples-3.0.0rc12 → pysdm_examples-3.0.0rc16}/PySDM_examples/Arabas_et_al_2015/settings.py +0 -0
- {pysdm_examples-3.0.0rc12 → pysdm_examples-3.0.0rc16}/PySDM_examples/Arabas_et_al_2015/spin_up.py +0 -0
- {pysdm_examples-3.0.0rc12 → pysdm_examples-3.0.0rc16}/PySDM_examples/Arabas_et_al_2025/__init__.py +0 -0
- {pysdm_examples-3.0.0rc12 → pysdm_examples-3.0.0rc16}/PySDM_examples/Arabas_et_al_2025/commons.py +0 -0
- {pysdm_examples-3.0.0rc12 → pysdm_examples-3.0.0rc16}/PySDM_examples/Arabas_et_al_2025/curved_text.py +0 -0
- {pysdm_examples-3.0.0rc12 → pysdm_examples-3.0.0rc16}/PySDM_examples/Arabas_et_al_2025/frozen_fraction.py +0 -0
- {pysdm_examples-3.0.0rc12 → pysdm_examples-3.0.0rc16}/PySDM_examples/Arabas_et_al_2025/make_particulator.py +0 -0
- {pysdm_examples-3.0.0rc12 → pysdm_examples-3.0.0rc16}/PySDM_examples/Arabas_et_al_2025/plots.py +0 -0
- {pysdm_examples-3.0.0rc12 → pysdm_examples-3.0.0rc16}/PySDM_examples/Arabas_et_al_2025/run_simulation.py +0 -0
- {pysdm_examples-3.0.0rc12 → pysdm_examples-3.0.0rc16}/PySDM_examples/Bartman_2020_MasterThesis/__init__.py +0 -0
- {pysdm_examples-3.0.0rc12 → pysdm_examples-3.0.0rc16}/PySDM_examples/Bartman_2020_MasterThesis/fig_4_adaptive_sdm.py +0 -0
- {pysdm_examples-3.0.0rc12 → pysdm_examples-3.0.0rc16}/PySDM_examples/Bartman_2020_MasterThesis/fig_5_SCIPY_VS_ADAPTIVE.py +0 -0
- {pysdm_examples-3.0.0rc12 → pysdm_examples-3.0.0rc16}/PySDM_examples/Bartman_et_al_2021/__init__.py +0 -0
- {pysdm_examples-3.0.0rc12 → pysdm_examples-3.0.0rc16}/PySDM_examples/Bartman_et_al_2021/label.py +0 -0
- {pysdm_examples-3.0.0rc12 → pysdm_examples-3.0.0rc16}/PySDM_examples/Berry_1967/__init__.py +0 -0
- {pysdm_examples-3.0.0rc12 → pysdm_examples-3.0.0rc16}/PySDM_examples/Berry_1967/example.py +0 -0
- {pysdm_examples-3.0.0rc12 → pysdm_examples-3.0.0rc16}/PySDM_examples/Berry_1967/example_fig_6.py +0 -0
- {pysdm_examples-3.0.0rc12 → pysdm_examples-3.0.0rc16}/PySDM_examples/Berry_1967/settings.py +0 -0
- {pysdm_examples-3.0.0rc12 → pysdm_examples-3.0.0rc16}/PySDM_examples/Berry_1967/spectrum_plotter.py +0 -0
- {pysdm_examples-3.0.0rc12 → pysdm_examples-3.0.0rc16}/PySDM_examples/Bieli_et_al_2022/__init__.py +0 -0
- {pysdm_examples-3.0.0rc12 → pysdm_examples-3.0.0rc16}/PySDM_examples/Bieli_et_al_2022/settings.py +0 -0
- {pysdm_examples-3.0.0rc12 → pysdm_examples-3.0.0rc16}/PySDM_examples/Bolin_1958/__init__.py +0 -0
- {pysdm_examples-3.0.0rc12 → pysdm_examples-3.0.0rc16}/PySDM_examples/Bolot_et_al_2013/__init__.py +0 -0
- {pysdm_examples-3.0.0rc12 → pysdm_examples-3.0.0rc16}/PySDM_examples/Bulenok_2023_MasterThesis/__init__.py +0 -0
- {pysdm_examples-3.0.0rc12 → pysdm_examples-3.0.0rc16}/PySDM_examples/Bulenok_2023_MasterThesis/performance_comparison_Srivastava_Setup.py +0 -0
- {pysdm_examples-3.0.0rc12 → pysdm_examples-3.0.0rc16}/PySDM_examples/Bulenok_2023_MasterThesis/setups.py +0 -0
- {pysdm_examples-3.0.0rc12 → pysdm_examples-3.0.0rc16}/PySDM_examples/Bulenok_2023_MasterThesis/utils.py +0 -0
- {pysdm_examples-3.0.0rc12 → pysdm_examples-3.0.0rc16}/PySDM_examples/Ervens_and_Feingold_2012/__init__.py +0 -0
- {pysdm_examples-3.0.0rc12 → pysdm_examples-3.0.0rc16}/PySDM_examples/Fisher_1991/__init__.py +0 -0
- {pysdm_examples-3.0.0rc12 → pysdm_examples-3.0.0rc16}/PySDM_examples/Gedzelman_and_Arnold_1994/__init__.py +0 -0
- {pysdm_examples-3.0.0rc12 → pysdm_examples-3.0.0rc16}/PySDM_examples/Gonfiantini_1986/__init__.py +0 -0
- {pysdm_examples-3.0.0rc12 → pysdm_examples-3.0.0rc16}/PySDM_examples/Grabowski_and_Pawlowska_2023/__init__.py +0 -0
- {pysdm_examples-3.0.0rc12 → pysdm_examples-3.0.0rc16}/PySDM_examples/Grabowski_and_Pawlowska_2023/settings.py +0 -0
- {pysdm_examples-3.0.0rc12 → pysdm_examples-3.0.0rc16}/PySDM_examples/Graf_et_al_2019/__init__.py +0 -0
- {pysdm_examples-3.0.0rc12 → pysdm_examples-3.0.0rc16}/PySDM_examples/Jaruga_and_Pawlowska_2018/__init__.py +0 -0
- {pysdm_examples-3.0.0rc12 → pysdm_examples-3.0.0rc16}/PySDM_examples/Jensen_and_Nugent_2017/__init__.py +0 -0
- {pysdm_examples-3.0.0rc12 → pysdm_examples-3.0.0rc16}/PySDM_examples/Jensen_and_Nugent_2017/plotting.py +0 -0
- {pysdm_examples-3.0.0rc12 → pysdm_examples-3.0.0rc16}/PySDM_examples/Jensen_and_Nugent_2017/settings.py +0 -0
- {pysdm_examples-3.0.0rc12 → pysdm_examples-3.0.0rc16}/PySDM_examples/Jensen_and_Nugent_2017/table_3.py +0 -0
- {pysdm_examples-3.0.0rc12 → pysdm_examples-3.0.0rc16}/PySDM_examples/Jouzel_and_Merlivat_1984/__init__.py +0 -0
- {pysdm_examples-3.0.0rc12 → pysdm_examples-3.0.0rc16}/PySDM_examples/Jouzel_and_Merlivat_1984/thermodynamic_profiles.py +0 -0
- {pysdm_examples-3.0.0rc12 → pysdm_examples-3.0.0rc16}/PySDM_examples/Kinzer_And_Gunn_1951/__init__.py +0 -0
- {pysdm_examples-3.0.0rc12 → pysdm_examples-3.0.0rc16}/PySDM_examples/Kinzer_And_Gunn_1951/table_1_and_2.py +0 -0
- {pysdm_examples-3.0.0rc12 → pysdm_examples-3.0.0rc16}/PySDM_examples/Kreidenweis_et_al_2003/__init__.py +0 -0
- {pysdm_examples-3.0.0rc12 → pysdm_examples-3.0.0rc16}/PySDM_examples/Kreidenweis_et_al_2003/simulation.py +0 -0
- {pysdm_examples-3.0.0rc12 → pysdm_examples-3.0.0rc16}/PySDM_examples/Lamb_et_al_2017/__init__.py +0 -0
- {pysdm_examples-3.0.0rc12 → pysdm_examples-3.0.0rc16}/PySDM_examples/Lowe_et_al_2019/__init__.py +0 -0
- {pysdm_examples-3.0.0rc12 → pysdm_examples-3.0.0rc16}/PySDM_examples/Lowe_et_al_2019/aerosol.py +0 -0
- {pysdm_examples-3.0.0rc12 → pysdm_examples-3.0.0rc16}/PySDM_examples/Lowe_et_al_2019/aerosol_code.py +0 -0
- {pysdm_examples-3.0.0rc12 → pysdm_examples-3.0.0rc16}/PySDM_examples/Lowe_et_al_2019/constants_def.py +0 -0
- {pysdm_examples-3.0.0rc12 → pysdm_examples-3.0.0rc16}/PySDM_examples/Lowe_et_al_2019/plot_helper.py +0 -0
- {pysdm_examples-3.0.0rc12 → pysdm_examples-3.0.0rc16}/PySDM_examples/Merlivat_and_Nief_1967/__init__.py +0 -0
- {pysdm_examples-3.0.0rc12 → pysdm_examples-3.0.0rc16}/PySDM_examples/Miyake_et_al_1968/__init__.py +0 -0
- {pysdm_examples-3.0.0rc12 → pysdm_examples-3.0.0rc16}/PySDM_examples/Morrison_and_Grabowski_2007/__init__.py +0 -0
- {pysdm_examples-3.0.0rc12 → pysdm_examples-3.0.0rc16}/PySDM_examples/Morrison_and_Grabowski_2007/common.py +0 -0
- {pysdm_examples-3.0.0rc12 → pysdm_examples-3.0.0rc16}/PySDM_examples/Morrison_and_Grabowski_2007/strato_cumulus.py +0 -0
- {pysdm_examples-3.0.0rc12 → pysdm_examples-3.0.0rc16}/PySDM_examples/Niedermeier_et_al_2014/__init__.py +0 -0
- {pysdm_examples-3.0.0rc12 → pysdm_examples-3.0.0rc16}/PySDM_examples/Niedermeier_et_al_2014/settings.py +0 -0
- {pysdm_examples-3.0.0rc12 → pysdm_examples-3.0.0rc16}/PySDM_examples/Niedermeier_et_al_2014/simulation.py +0 -0
- {pysdm_examples-3.0.0rc12 → pysdm_examples-3.0.0rc16}/PySDM_examples/Pierchala_et_al_2022/__init__.py +0 -0
- {pysdm_examples-3.0.0rc12 → pysdm_examples-3.0.0rc16}/PySDM_examples/Pierchala_et_al_2022/commons.py +0 -0
- {pysdm_examples-3.0.0rc12 → pysdm_examples-3.0.0rc16}/PySDM_examples/Pruppacher_and_Rasmussen_1979/__init__.py +0 -0
- {pysdm_examples-3.0.0rc12 → pysdm_examples-3.0.0rc16}/PySDM_examples/Pyrcel/__init__.py +0 -0
- {pysdm_examples-3.0.0rc12 → pysdm_examples-3.0.0rc16}/PySDM_examples/Pyrcel/profile_plotter.py +0 -0
- {pysdm_examples-3.0.0rc12 → pysdm_examples-3.0.0rc16}/PySDM_examples/Pyrcel/settings.py +0 -0
- {pysdm_examples-3.0.0rc12 → pysdm_examples-3.0.0rc16}/PySDM_examples/Rogers_1975/__init__.py +0 -0
- {pysdm_examples-3.0.0rc12 → pysdm_examples-3.0.0rc16}/PySDM_examples/Rozanski_and_Sonntag_1982/__init__.py +0 -0
- {pysdm_examples-3.0.0rc12 → pysdm_examples-3.0.0rc16}/PySDM_examples/Rozanski_and_Sonntag_1982/multibox.py +0 -0
- {pysdm_examples-3.0.0rc12 → pysdm_examples-3.0.0rc16}/PySDM_examples/Shima_et_al_2009/__init__.py +0 -0
- {pysdm_examples-3.0.0rc12 → pysdm_examples-3.0.0rc16}/PySDM_examples/Shima_et_al_2009/error_measure.py +0 -0
- {pysdm_examples-3.0.0rc12 → pysdm_examples-3.0.0rc16}/PySDM_examples/Shima_et_al_2009/settings.py +0 -0
- {pysdm_examples-3.0.0rc12 → pysdm_examples-3.0.0rc16}/PySDM_examples/Shima_et_al_2009/spectrum_plotter.py +0 -0
- {pysdm_examples-3.0.0rc12 → pysdm_examples-3.0.0rc16}/PySDM_examples/Shima_et_al_2009/tutorial_plotter.py +0 -0
- {pysdm_examples-3.0.0rc12 → pysdm_examples-3.0.0rc16}/PySDM_examples/Shima_et_al_2009/tutorial_settings.py +0 -0
- {pysdm_examples-3.0.0rc12 → pysdm_examples-3.0.0rc16}/PySDM_examples/Shipway_and_Hill_2012/__init__.py +0 -0
- {pysdm_examples-3.0.0rc12 → pysdm_examples-3.0.0rc16}/PySDM_examples/Shipway_and_Hill_2012/mpdata_1d.py +0 -0
- {pysdm_examples-3.0.0rc12 → pysdm_examples-3.0.0rc16}/PySDM_examples/Shipway_and_Hill_2012/plot.py +0 -0
- {pysdm_examples-3.0.0rc12 → pysdm_examples-3.0.0rc16}/PySDM_examples/Shipway_and_Hill_2012/settings.py +0 -0
- {pysdm_examples-3.0.0rc12 → pysdm_examples-3.0.0rc16}/PySDM_examples/Shipway_and_Hill_2012/simulation.py +0 -0
- {pysdm_examples-3.0.0rc12 → pysdm_examples-3.0.0rc16}/PySDM_examples/Singer_Ward/__init__.py +0 -0
- {pysdm_examples-3.0.0rc12 → pysdm_examples-3.0.0rc16}/PySDM_examples/Singer_Ward/aerosol.py +0 -0
- {pysdm_examples-3.0.0rc12 → pysdm_examples-3.0.0rc16}/PySDM_examples/Spichtinger_et_al_2023/__init__.py +0 -0
- {pysdm_examples-3.0.0rc12 → pysdm_examples-3.0.0rc16}/PySDM_examples/Spichtinger_et_al_2023/data/__init__.py +0 -0
- {pysdm_examples-3.0.0rc12 → pysdm_examples-3.0.0rc16}/PySDM_examples/Spichtinger_et_al_2023/data/reference_bulk.py +0 -0
- {pysdm_examples-3.0.0rc12 → pysdm_examples-3.0.0rc16}/PySDM_examples/Spichtinger_et_al_2023/data/simulation_data.py +0 -0
- {pysdm_examples-3.0.0rc12 → pysdm_examples-3.0.0rc16}/PySDM_examples/Spichtinger_et_al_2023/simulation.py +0 -0
- {pysdm_examples-3.0.0rc12 → pysdm_examples-3.0.0rc16}/PySDM_examples/Srivastava_1982/__init__.py +0 -0
- {pysdm_examples-3.0.0rc12 → pysdm_examples-3.0.0rc16}/PySDM_examples/Srivastava_1982/equations.py +0 -0
- {pysdm_examples-3.0.0rc12 → pysdm_examples-3.0.0rc16}/PySDM_examples/Srivastava_1982/example.py +0 -0
- {pysdm_examples-3.0.0rc12 → pysdm_examples-3.0.0rc16}/PySDM_examples/Srivastava_1982/settings.py +0 -0
- {pysdm_examples-3.0.0rc12 → pysdm_examples-3.0.0rc16}/PySDM_examples/Srivastava_1982/simulation.py +0 -0
- {pysdm_examples-3.0.0rc12 → pysdm_examples-3.0.0rc16}/PySDM_examples/Stewart_1975/__init__.py +0 -0
- {pysdm_examples-3.0.0rc12 → pysdm_examples-3.0.0rc16}/PySDM_examples/Toon_et_al_1980/__init__.py +0 -0
- {pysdm_examples-3.0.0rc12 → pysdm_examples-3.0.0rc16}/PySDM_examples/Van_Hook_1968/__init__.py +0 -0
- {pysdm_examples-3.0.0rc12 → pysdm_examples-3.0.0rc16}/PySDM_examples/Ware_et_al_2025/__init__.py +0 -0
- {pysdm_examples-3.0.0rc12 → pysdm_examples-3.0.0rc16}/PySDM_examples/Yang_et_al_2018/__init__.py +0 -0
- {pysdm_examples-3.0.0rc12 → pysdm_examples-3.0.0rc16}/PySDM_examples/Zaba_et_al/__init__.py +0 -0
- {pysdm_examples-3.0.0rc12 → pysdm_examples-3.0.0rc16}/PySDM_examples/_HOWTOs/__init__.py +0 -0
- {pysdm_examples-3.0.0rc12 → pysdm_examples-3.0.0rc16}/PySDM_examples/deJong_Azimi/__init__.py +0 -0
- {pysdm_examples-3.0.0rc12 → pysdm_examples-3.0.0rc16}/PySDM_examples/deJong_Azimi/cloudy_data.py +0 -0
- {pysdm_examples-3.0.0rc12 → pysdm_examples-3.0.0rc16}/PySDM_examples/deJong_Azimi/cloudy_data_0d.py +0 -0
- {pysdm_examples-3.0.0rc12 → pysdm_examples-3.0.0rc16}/PySDM_examples/deJong_Azimi/settings1D.py +0 -0
- {pysdm_examples-3.0.0rc12 → pysdm_examples-3.0.0rc16}/PySDM_examples/deJong_Mackay_et_al_2023/__init__.py +0 -0
- {pysdm_examples-3.0.0rc12 → pysdm_examples-3.0.0rc16}/PySDM_examples/deJong_Mackay_et_al_2023/plot_rates.py +0 -0
- {pysdm_examples-3.0.0rc12 → pysdm_examples-3.0.0rc16}/PySDM_examples/deJong_Mackay_et_al_2023/settings1D.py +0 -0
- {pysdm_examples-3.0.0rc12 → pysdm_examples-3.0.0rc16}/PySDM_examples/deJong_Mackay_et_al_2023/settings_0D.py +0 -0
- {pysdm_examples-3.0.0rc12 → pysdm_examples-3.0.0rc16}/PySDM_examples/deJong_Mackay_et_al_2023/simulation1D.py +0 -0
- {pysdm_examples-3.0.0rc12 → pysdm_examples-3.0.0rc16}/PySDM_examples/deJong_Mackay_et_al_2023/simulation_ss.py +0 -0
- {pysdm_examples-3.0.0rc12 → pysdm_examples-3.0.0rc16}/PySDM_examples/seeding/__init__.py +0 -0
- {pysdm_examples-3.0.0rc12 → pysdm_examples-3.0.0rc16}/PySDM_examples/utils/__init__.py +0 -0
- {pysdm_examples-3.0.0rc12 → pysdm_examples-3.0.0rc16}/PySDM_examples/utils/basic_simulation.py +0 -0
- {pysdm_examples-3.0.0rc12 → pysdm_examples-3.0.0rc16}/PySDM_examples/utils/dummy_controller.py +0 -0
- {pysdm_examples-3.0.0rc12 → pysdm_examples-3.0.0rc16}/PySDM_examples/utils/kinematic_2d/__init__.py +0 -0
- {pysdm_examples-3.0.0rc12 → pysdm_examples-3.0.0rc16}/PySDM_examples/utils/kinematic_2d/fields.py +0 -0
- {pysdm_examples-3.0.0rc12 → pysdm_examples-3.0.0rc16}/PySDM_examples/utils/kinematic_2d/gui.py +0 -0
- {pysdm_examples-3.0.0rc12 → pysdm_examples-3.0.0rc16}/PySDM_examples/utils/kinematic_2d/gui_controller.py +0 -0
- {pysdm_examples-3.0.0rc12 → pysdm_examples-3.0.0rc16}/PySDM_examples/utils/kinematic_2d/gui_settings.py +0 -0
- {pysdm_examples-3.0.0rc12 → pysdm_examples-3.0.0rc16}/PySDM_examples/utils/kinematic_2d/gui_viewer.py +0 -0
- {pysdm_examples-3.0.0rc12 → pysdm_examples-3.0.0rc16}/PySDM_examples/utils/kinematic_2d/make_default_product_collection.py +0 -0
- {pysdm_examples-3.0.0rc12 → pysdm_examples-3.0.0rc16}/PySDM_examples/utils/kinematic_2d/mpdata_2d.py +0 -0
- {pysdm_examples-3.0.0rc12 → pysdm_examples-3.0.0rc16}/PySDM_examples/utils/kinematic_2d/plots.py +0 -0
- {pysdm_examples-3.0.0rc12 → pysdm_examples-3.0.0rc16}/PySDM_examples/utils/kinematic_2d/simulation.py +0 -0
- {pysdm_examples-3.0.0rc12 → pysdm_examples-3.0.0rc16}/PySDM_examples/utils/kinematic_2d/storage.py +0 -0
- {pysdm_examples-3.0.0rc12 → pysdm_examples-3.0.0rc16}/PySDM_examples/utils/progbar_controller.py +0 -0
- {pysdm_examples-3.0.0rc12 → pysdm_examples-3.0.0rc16}/PySDM_examples/utils/pvanim.py +0 -0
- {pysdm_examples-3.0.0rc12 → pysdm_examples-3.0.0rc16}/PySDM_examples/utils/read_vtk_1d.py +0 -0
- {pysdm_examples-3.0.0rc12 → pysdm_examples-3.0.0rc16}/PySDM_examples/utils/widgets/__init__.py +0 -0
- {pysdm_examples-3.0.0rc12 → pysdm_examples-3.0.0rc16}/PySDM_examples/utils/widgets/freezer.py +0 -0
- {pysdm_examples-3.0.0rc12 → pysdm_examples-3.0.0rc16}/PySDM_examples/utils/widgets/progbar_updater.py +0 -0
- {pysdm_examples-3.0.0rc12 → pysdm_examples-3.0.0rc16}/README.md +0 -0
- {pysdm_examples-3.0.0rc12 → pysdm_examples-3.0.0rc16}/pyproject.toml +0 -0
- {pysdm_examples-3.0.0rc12 → pysdm_examples-3.0.0rc16}/pysdm_examples.egg-info/dependency_links.txt +0 -0
- {pysdm_examples-3.0.0rc12 → pysdm_examples-3.0.0rc16}/pysdm_examples.egg-info/top_level.txt +0 -0
- {pysdm_examples-3.0.0rc12 → pysdm_examples-3.0.0rc16}/setup.cfg +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: pysdm-examples
|
|
3
|
-
Version: 3.0.
|
|
3
|
+
Version: 3.0.0rc16
|
|
4
4
|
Summary: PySDM usage examples reproducing results from literature and depicting how to use PySDM from Python Jupyter notebooks
|
|
5
5
|
Home-page: https://github.com/open-atmos/PySDM
|
|
6
6
|
Author: https://github.com/open-atmos/PySDM/graphs/contributors
|
|
@@ -15,7 +15,6 @@ Requires-Dist: PyMPDATA
|
|
|
15
15
|
Requires-Dist: open-atmos-jupyter-utils
|
|
16
16
|
Requires-Dist: pystrict
|
|
17
17
|
Requires-Dist: matplotlib
|
|
18
|
-
Requires-Dist: Pillow
|
|
19
18
|
Requires-Dist: joblib
|
|
20
19
|
Requires-Dist: ipywidgets
|
|
21
20
|
Requires-Dist: seaborn
|
|
@@ -26,11 +25,10 @@ Requires-Dist: pyvinecopulib
|
|
|
26
25
|
Requires-Dist: networkx
|
|
27
26
|
Provides-Extra: ci-version-pins
|
|
28
27
|
Requires-Dist: PySDM[CI_version_pins]; extra == "ci-version-pins"
|
|
29
|
-
Requires-Dist: PyMPDATA==1.6.
|
|
28
|
+
Requires-Dist: PyMPDATA==1.6.3; extra == "ci-version-pins"
|
|
30
29
|
Requires-Dist: open-atmos-jupyter-utils==1.3.0; extra == "ci-version-pins"
|
|
31
30
|
Requires-Dist: pystrict==1.3; extra == "ci-version-pins"
|
|
32
31
|
Requires-Dist: matplotlib!=3.9.1; extra == "ci-version-pins"
|
|
33
|
-
Requires-Dist: Pillow<11.3.0; extra == "ci-version-pins"
|
|
34
32
|
Requires-Dist: joblib==1.5.1; extra == "ci-version-pins"
|
|
35
33
|
Requires-Dist: ipywidgets==8.1.7; extra == "ci-version-pins"
|
|
36
34
|
Requires-Dist: seaborn==0.13.2; extra == "ci-version-pins"
|
|
@@ -137,6 +135,7 @@ Example notebooks include:
|
|
|
137
135
|
- <a href="https://open-atmos.github.io/PySDM/PySDM_examples/Yang_et_al_2018.html">Yang_et_al_2018</a>: polydisperse particle spectrum, activation/deactivation cycles
|
|
138
136
|
- <a href="https://open-atmos.github.io/PySDM/PySDM_examples/Abdul_Razzak_Ghan_2000.html">Abdul_Razzak_Ghan_2000</a>: polydisperse activation, comparison against <mark>GCM parameterisation</mark>
|
|
139
137
|
- <a href="https://open-atmos.github.io/PySDM/PySDM_examples/Pyrcel.html">Pyrcel</a>: polydisperse activation, mimicking example test case from <mark>Pyrcel</mark> documentation
|
|
138
|
+
- <a href="https://open-atmos.github.io/PySDM/PySDM_examples/Strzabala_2025_BEng.html">Strzabala_2025_BEng</a>: ParaView visualisation example
|
|
140
139
|
- <a href="https://open-atmos.github.io/PySDM/PySDM_examples/Lowe_et_al_2019.html">Lowe_et_al_2019</a>: externally mixed polydisperse size spectrum with <mark>surface-active organics</mark> case
|
|
141
140
|
- <a href="https://open-atmos.github.io/PySDM/PySDM_examples/Grabowski_and_Pawlowska_2023.html">Grabowski_and_Pawlowska_2023</a>: polydisperse activation, focus on <mark>ripening</mark>
|
|
142
141
|
- <a href="https://open-atmos.github.io/PySDM/PySDM_examples/Jensen_and_Nugent_2017.html">Jensen_and_Nugent_2017</a>: polydisperse activation featuring <mark>giant CCN</mark>
|
|
@@ -148,6 +147,10 @@ Example notebooks include:
|
|
|
148
147
|
|
|
149
148
|
The parcel environment is also featured in the <a href="https://open-atmos.github.io/PySDM/PySDM.html#tutorials">PySDM tutorials</a>.
|
|
150
149
|
|
|
150
|
+
<center>
|
|
151
|
+
<img src="https://github.com/open-atmos/PySDM/releases/download/tip/parcel_animation_ubuntu-24.04.gif" style="width:80%" />
|
|
152
|
+
</center>
|
|
153
|
+
|
|
151
154
|
## 0D box environment
|
|
152
155
|
|
|
153
156
|
The box environment is void of any spatial or thermodynamic context, it constitutes the most basic framework.
|
|
@@ -49,9 +49,9 @@ class Simulation(BasicSimulation):
|
|
|
49
49
|
if settings.enable_vapour_deposition_on_ice:
|
|
50
50
|
builder.add_dynamic(VapourDepositionOnIce(adaptive=True))
|
|
51
51
|
|
|
52
|
-
r_dry, n_in_dv = ConstantMultiplicity(
|
|
53
|
-
|
|
54
|
-
)
|
|
52
|
+
r_dry, n_in_dv = ConstantMultiplicity(
|
|
53
|
+
settings.soluble_aerosol
|
|
54
|
+
).sample_deterministic(n_sd=settings.n_sd)
|
|
55
55
|
attributes = builder.particulator.environment.init_attributes(
|
|
56
56
|
n_in_dv=n_in_dv, kappa=settings.kappa, r_dry=r_dry
|
|
57
57
|
)
|
|
@@ -61,7 +61,9 @@ def run_parcel(
|
|
|
61
61
|
}
|
|
62
62
|
for i, mode in enumerate(aerosol.modes):
|
|
63
63
|
kappa, spectrum = mode["kappa"]["CompressedFilmOvadnevaite"], mode["spectrum"]
|
|
64
|
-
r_dry, concentration = ConstantMultiplicity(spectrum).
|
|
64
|
+
r_dry, concentration = ConstantMultiplicity(spectrum).sample_deterministic(
|
|
65
|
+
n_sd_per_mode
|
|
66
|
+
)
|
|
65
67
|
v_dry = builder.formulae.trivia.volume(radius=r_dry)
|
|
66
68
|
specific_concentration = concentration / builder.formulae.constants.rho_STP
|
|
67
69
|
attributes["multiplicity"] = np.append(
|
|
@@ -227,7 +227,9 @@ def simulation(
|
|
|
227
227
|
n_sd, multiplicity / volume
|
|
228
228
|
)
|
|
229
229
|
else:
|
|
230
|
-
_isa, _conc = spectral_sampling.ConstantMultiplicity(
|
|
230
|
+
_isa, _conc = spectral_sampling.ConstantMultiplicity(
|
|
231
|
+
spectrum
|
|
232
|
+
).sample_deterministic(n_sd)
|
|
231
233
|
attributes = {
|
|
232
234
|
"multiplicity": discretise_multiplicities(_conc * volume),
|
|
233
235
|
"immersed surface area": _isa,
|
{pysdm_examples-3.0.0rc12 → pysdm_examples-3.0.0rc16}/PySDM_examples/Bieli_et_al_2022/simulation.py
RENAMED
|
@@ -18,7 +18,7 @@ def make_core(settings, coal_eff):
|
|
|
18
18
|
attributes = {}
|
|
19
19
|
attributes["volume"], attributes["multiplicity"] = ConstantMultiplicity(
|
|
20
20
|
settings.spectrum
|
|
21
|
-
).
|
|
21
|
+
).sample_deterministic(settings.n_sd)
|
|
22
22
|
collision = Collision(
|
|
23
23
|
collision_kernel=settings.kernel,
|
|
24
24
|
coalescence_efficiency=coal_eff,
|
|
@@ -17,7 +17,6 @@ class Simulation(BasicSimulation):
|
|
|
17
17
|
settings,
|
|
18
18
|
products=None,
|
|
19
19
|
scipy_solver=False,
|
|
20
|
-
sampling_class=ConstantMultiplicity,
|
|
21
20
|
):
|
|
22
21
|
builder = Builder(
|
|
23
22
|
n_sd=settings.n_sd,
|
|
@@ -55,7 +54,9 @@ class Simulation(BasicSimulation):
|
|
|
55
54
|
kappa = tuple(settings.aerosol_modes_by_kappa.keys())[0]
|
|
56
55
|
spectrum = settings.aerosol_modes_by_kappa[kappa]
|
|
57
56
|
|
|
58
|
-
r_dry, n_per_volume =
|
|
57
|
+
r_dry, n_per_volume = ConstantMultiplicity(spectrum).sample_deterministic(
|
|
58
|
+
settings.n_sd
|
|
59
|
+
)
|
|
59
60
|
v_dry = settings.formulae.trivia.volume(radius=r_dry)
|
|
60
61
|
attributes["multiplicity"] = np.append(
|
|
61
62
|
attributes["multiplicity"], n_per_volume * volume
|
|
@@ -65,7 +65,7 @@ class Simulation(BasicSimulation):
|
|
|
65
65
|
|
|
66
66
|
self.r_dry, n_in_unit_volume = Logarithmic(
|
|
67
67
|
spectrum=settings.dry_radii_spectrum,
|
|
68
|
-
).
|
|
68
|
+
).sample_deterministic(builder.particulator.n_sd - n_gccn)
|
|
69
69
|
|
|
70
70
|
if gccn:
|
|
71
71
|
nonzero_concentration_mask = np.nonzero(table_3.NA)
|
|
@@ -17,7 +17,8 @@ class Settings:
|
|
|
17
17
|
dt: float,
|
|
18
18
|
n_sd: int,
|
|
19
19
|
n_substep: int,
|
|
20
|
-
|
|
20
|
+
spectral_sampling_class: spec_sampling.SpectralSampling = spec_sampling.Logarithmic,
|
|
21
|
+
spectral_sampling_method: str = "sample_deterministic",
|
|
21
22
|
):
|
|
22
23
|
self.formulae = Formulae(
|
|
23
24
|
saturation_vapour_pressure="AugustRocheMagnus",
|
|
@@ -51,13 +52,16 @@ class Settings:
|
|
|
51
52
|
# note: rho is not specified in the paper
|
|
52
53
|
rho0 = 1
|
|
53
54
|
|
|
54
|
-
self.r_dry, self.n_in_dv =
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
55
|
+
self.r_dry, self.n_in_dv = getattr(
|
|
56
|
+
spectral_sampling_class(
|
|
57
|
+
spectrum=spectra.Lognormal(
|
|
58
|
+
norm_factor=566 / si.cm**3 / rho0 * self.mass_of_dry_air,
|
|
59
|
+
m_mode=0.08 * si.um / 2,
|
|
60
|
+
s_geom=2,
|
|
61
|
+
)
|
|
62
|
+
),
|
|
63
|
+
spectral_sampling_method,
|
|
64
|
+
)(n_sd)
|
|
61
65
|
|
|
62
66
|
self.ENVIRONMENT_MOLE_FRACTIONS = {
|
|
63
67
|
"SO2": 0.2 * PPB,
|
{pysdm_examples-3.0.0rc12 → pysdm_examples-3.0.0rc16}/PySDM_examples/Lowe_et_al_2019/settings.py
RENAMED
|
@@ -7,7 +7,6 @@ from pystrict import strict
|
|
|
7
7
|
from PySDM import Formulae
|
|
8
8
|
from PySDM.backends import CPU
|
|
9
9
|
from PySDM.initialisation.aerosol_composition import DryAerosolMixture
|
|
10
|
-
from PySDM.initialisation.sampling import spectral_sampling as spec_sampling
|
|
11
10
|
from PySDM.physics import si
|
|
12
11
|
|
|
13
12
|
|
|
@@ -36,7 +35,6 @@ class Settings:
|
|
|
36
35
|
n_sd_per_mode: int,
|
|
37
36
|
aerosol: DryAerosolMixture,
|
|
38
37
|
model: str,
|
|
39
|
-
spectral_sampling: type(spec_sampling.SpectralSampling),
|
|
40
38
|
w: float = 0.32 * si.m / si.s,
|
|
41
39
|
):
|
|
42
40
|
assert model in ("Constant", "CompressedFilmOvadnevaite")
|
|
@@ -46,7 +44,6 @@ class Settings:
|
|
|
46
44
|
self.formulae = self.backend.formulae
|
|
47
45
|
const = self.formulae.constants
|
|
48
46
|
self.aerosol = aerosol
|
|
49
|
-
self.spectral_sampling = spectral_sampling
|
|
50
47
|
|
|
51
48
|
max_altitude = 200 * si.m
|
|
52
49
|
self.w = w
|
{pysdm_examples-3.0.0rc12 → pysdm_examples-3.0.0rc16}/PySDM_examples/Lowe_et_al_2019/simulation.py
RENAMED
|
@@ -7,6 +7,7 @@ from PySDM.dynamics import AmbientThermodynamics, Condensation
|
|
|
7
7
|
from PySDM.environments import Parcel
|
|
8
8
|
from PySDM.initialisation.hygroscopic_equilibrium import equilibrate_wet_radii
|
|
9
9
|
from PySDM.initialisation.spectra import Sum
|
|
10
|
+
from PySDM.initialisation.sampling.spectral_sampling import ConstantMultiplicity
|
|
10
11
|
|
|
11
12
|
|
|
12
13
|
class Simulation(BasicSimulation):
|
|
@@ -33,9 +34,9 @@ class Simulation(BasicSimulation):
|
|
|
33
34
|
}
|
|
34
35
|
initial_volume = settings.mass_of_dry_air / settings.rho0
|
|
35
36
|
for mode in settings.aerosol.modes:
|
|
36
|
-
r_dry, n_in_dv =
|
|
37
|
+
r_dry, n_in_dv = ConstantMultiplicity(
|
|
37
38
|
spectrum=mode["spectrum"]
|
|
38
|
-
).
|
|
39
|
+
).sample_deterministic(settings.n_sd_per_mode)
|
|
39
40
|
v_dry = settings.formulae.trivia.volume(radius=r_dry)
|
|
40
41
|
attributes["multiplicity"] = np.append(
|
|
41
42
|
attributes["multiplicity"], n_in_dv * initial_volume
|
|
@@ -13,7 +13,13 @@ from PySDM.physics import si
|
|
|
13
13
|
|
|
14
14
|
class Simulation(BasicSimulation):
|
|
15
15
|
def __init__(
|
|
16
|
-
self,
|
|
16
|
+
self,
|
|
17
|
+
settings,
|
|
18
|
+
products=None,
|
|
19
|
+
scipy_solver=False,
|
|
20
|
+
rtol_thd=1e-10,
|
|
21
|
+
rtol_x=1e-10,
|
|
22
|
+
mass_of_dry_air=44 * si.kg,
|
|
17
23
|
):
|
|
18
24
|
n_sd = sum(settings.n_sd_per_mode)
|
|
19
25
|
builder = Builder(
|
|
@@ -27,7 +33,7 @@ class Simulation(BasicSimulation):
|
|
|
27
33
|
initial_water_vapour_mixing_ratio=settings.initial_vapour_mixing_ratio,
|
|
28
34
|
T0=settings.initial_temperature,
|
|
29
35
|
w=settings.vertical_velocity,
|
|
30
|
-
mass_of_dry_air=
|
|
36
|
+
mass_of_dry_air=mass_of_dry_air,
|
|
31
37
|
),
|
|
32
38
|
)
|
|
33
39
|
builder.add_dynamic(AmbientThermodynamics())
|
|
@@ -43,7 +49,9 @@ class Simulation(BasicSimulation):
|
|
|
43
49
|
}
|
|
44
50
|
for i, (kappa, spectrum) in enumerate(settings.aerosol_modes_by_kappa.items()):
|
|
45
51
|
sampling = ConstantMultiplicity(spectrum)
|
|
46
|
-
r_dry, n_per_volume = sampling.
|
|
52
|
+
r_dry, n_per_volume = sampling.sample_deterministic(
|
|
53
|
+
settings.n_sd_per_mode[i]
|
|
54
|
+
)
|
|
47
55
|
v_dry = settings.formulae.trivia.volume(radius=r_dry)
|
|
48
56
|
attributes["multiplicity"] = np.append(
|
|
49
57
|
attributes["multiplicity"], n_per_volume * volume
|
{pysdm_examples-3.0.0rc12 → pysdm_examples-3.0.0rc16}/PySDM_examples/Shima_et_al_2009/example.py
RENAMED
|
@@ -22,7 +22,9 @@ def run(settings, backend=CPU, observers=()):
|
|
|
22
22
|
)
|
|
23
23
|
attributes = {}
|
|
24
24
|
sampling = ConstantMultiplicity(settings.spectrum)
|
|
25
|
-
attributes["volume"], attributes["multiplicity"] = sampling.
|
|
25
|
+
attributes["volume"], attributes["multiplicity"] = sampling.sample_deterministic(
|
|
26
|
+
settings.n_sd
|
|
27
|
+
)
|
|
26
28
|
coalescence = Coalescence(
|
|
27
29
|
collision_kernel=settings.kernel, adaptive=settings.adaptive
|
|
28
30
|
)
|
|
@@ -16,7 +16,9 @@ def run(settings, backend):
|
|
|
16
16
|
builder = Builder(n_sd=settings.n_sd, backend=backend, environment=env)
|
|
17
17
|
attributes = {}
|
|
18
18
|
sampling = ConstantMultiplicity(settings.spectrum)
|
|
19
|
-
attributes["volume"], attributes["multiplicity"] = sampling.
|
|
19
|
+
attributes["volume"], attributes["multiplicity"] = sampling.sample_deterministic(
|
|
20
|
+
settings.n_sd
|
|
21
|
+
)
|
|
20
22
|
builder.add_dynamic(Coalescence(collision_kernel=settings.kernel))
|
|
21
23
|
particles = builder.build(attributes, products=(WallTime(),))
|
|
22
24
|
|
|
@@ -11,7 +11,7 @@ def run(settings, observers=()):
|
|
|
11
11
|
builder.set_environment(Box(dv=settings.dv, dt=settings.dt))
|
|
12
12
|
attributes = {}
|
|
13
13
|
sampling = ConstantMultiplicity(settings.spectrum)
|
|
14
|
-
attributes["volume"], attributes["n"] = sampling.
|
|
14
|
+
attributes["volume"], attributes["n"] = sampling.sample_deterministic(settings.n_sd)
|
|
15
15
|
coalescence = Coalescence(
|
|
16
16
|
collision_kernel=settings.kernel, adaptive=settings.adaptive
|
|
17
17
|
)
|
|
@@ -0,0 +1,244 @@
|
|
|
1
|
+
#!/usr/bin/env pvpython
|
|
2
|
+
"""
|
|
3
|
+
ParaView pvpython script for visualizing sd_products and sd_attributes.
|
|
4
|
+
"""
|
|
5
|
+
|
|
6
|
+
import argparse
|
|
7
|
+
from collections import namedtuple
|
|
8
|
+
import pathlib
|
|
9
|
+
from paraview import simple as pvs # pylint: disable=import-error
|
|
10
|
+
|
|
11
|
+
pvs._DisableFirstRenderCameraReset() # pylint: disable=protected-access
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
def cli_using_argparse(argparse_parser):
|
|
15
|
+
"""
|
|
16
|
+
Command line interface using argparse.
|
|
17
|
+
"""
|
|
18
|
+
argparse_parser.add_argument(
|
|
19
|
+
"--sd-products-pvd",
|
|
20
|
+
dest="sd_products_pvd",
|
|
21
|
+
help="Path to sd_products.pvd",
|
|
22
|
+
)
|
|
23
|
+
argparse_parser.add_argument(
|
|
24
|
+
"--sd-attributes-pvd",
|
|
25
|
+
dest="sd_attributes_pvd",
|
|
26
|
+
help="Path to sd_attributes.pvd",
|
|
27
|
+
)
|
|
28
|
+
argparse_parser.add_argument(
|
|
29
|
+
"--output-animation-path",
|
|
30
|
+
help="Output path for the animation file.",
|
|
31
|
+
)
|
|
32
|
+
argparse_parser.add_argument(
|
|
33
|
+
"--output-screenshot-path",
|
|
34
|
+
help="Output path for the screenshot file.",
|
|
35
|
+
)
|
|
36
|
+
|
|
37
|
+
argparse_parser.add_argument(
|
|
38
|
+
"--scalarbar-title-size",
|
|
39
|
+
type=int,
|
|
40
|
+
default=30,
|
|
41
|
+
help="Font size for scalar bar titles.",
|
|
42
|
+
)
|
|
43
|
+
argparse_parser.add_argument(
|
|
44
|
+
"--scalarbar-label-size",
|
|
45
|
+
type=int,
|
|
46
|
+
default=30,
|
|
47
|
+
help="Font size for scalar bar labels.",
|
|
48
|
+
)
|
|
49
|
+
argparse_parser.add_argument(
|
|
50
|
+
"--axes-title-size",
|
|
51
|
+
type=int,
|
|
52
|
+
default=30,
|
|
53
|
+
help="Font size for axes titles.",
|
|
54
|
+
)
|
|
55
|
+
argparse_parser.add_argument(
|
|
56
|
+
"--axes-label-size",
|
|
57
|
+
type=int,
|
|
58
|
+
default=30,
|
|
59
|
+
help="Font size for axes labels.",
|
|
60
|
+
)
|
|
61
|
+
|
|
62
|
+
|
|
63
|
+
parser = argparse.ArgumentParser(
|
|
64
|
+
description="ParaView pvpython script for visualizing sd_products and sd_attributes PVD files."
|
|
65
|
+
)
|
|
66
|
+
cli_using_argparse(parser)
|
|
67
|
+
args = parser.parse_args()
|
|
68
|
+
|
|
69
|
+
sd_productspvd = pvs.PVDReader(
|
|
70
|
+
registrationName="sd_products.pvd", FileName=args.sd_products_pvd
|
|
71
|
+
)
|
|
72
|
+
sd_attributespvd = pvs.PVDReader(
|
|
73
|
+
registrationName="sd_attributes.pvd", FileName=args.sd_attributes_pvd
|
|
74
|
+
)
|
|
75
|
+
|
|
76
|
+
setup = {
|
|
77
|
+
"renderView1": pvs.GetActiveViewOrCreate("RenderView"),
|
|
78
|
+
"sd_productspvdDisplay": pvs.Show(
|
|
79
|
+
sd_productspvd,
|
|
80
|
+
pvs.GetActiveViewOrCreate("RenderView"),
|
|
81
|
+
"UnstructuredGridRepresentation",
|
|
82
|
+
),
|
|
83
|
+
"sd_attributespvdDisplay": pvs.Show(
|
|
84
|
+
sd_attributespvd,
|
|
85
|
+
pvs.GetActiveViewOrCreate("RenderView"),
|
|
86
|
+
"UnstructuredGridRepresentation",
|
|
87
|
+
),
|
|
88
|
+
"rHlookup_table": pvs.GetColorTransferFunction("RH"),
|
|
89
|
+
"volumelookup_table": pvs.GetColorTransferFunction("volume"),
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
animation_setup = namedtuple("setup", setup.keys())(**setup)
|
|
93
|
+
|
|
94
|
+
|
|
95
|
+
def configure_color_bar_and_display(
|
|
96
|
+
display, lookup_table, kind, *, anim_setup=animation_setup
|
|
97
|
+
):
|
|
98
|
+
"""
|
|
99
|
+
Configure color bar and display settings.
|
|
100
|
+
"""
|
|
101
|
+
display.Representation = "Surface"
|
|
102
|
+
display.SetScalarBarVisibility(anim_setup.renderView1, True)
|
|
103
|
+
color_bar = pvs.GetScalarBar(lookup_table, anim_setup.renderView1)
|
|
104
|
+
color_bar.LabelColor = [0.0, 0.0, 0.0]
|
|
105
|
+
color_bar.DrawScalarBarOutline = 1
|
|
106
|
+
color_bar.ScalarBarOutlineColor = [0.0, 0.0, 0.0]
|
|
107
|
+
color_bar.TitleColor = [0.0, 0.0, 0.0]
|
|
108
|
+
|
|
109
|
+
color_bar.TitleFontSize = args.scalarbar_title_size
|
|
110
|
+
color_bar.LabelFontSize = args.scalarbar_label_size
|
|
111
|
+
|
|
112
|
+
if kind == "prod":
|
|
113
|
+
display.Opacity = 0.4
|
|
114
|
+
display.DisableLighting = 1
|
|
115
|
+
display.Diffuse = 0.76
|
|
116
|
+
lookup_table.RescaleTransferFunction(90.0, 101.0)
|
|
117
|
+
lookup_table.ApplyPreset("Black, Blue and White", True)
|
|
118
|
+
lookup_table.NanColor = [0.67, 1.0, 1.0]
|
|
119
|
+
else:
|
|
120
|
+
display.PointSize = 13.0
|
|
121
|
+
display.RenderPointsAsSpheres = 1
|
|
122
|
+
display.Interpolation = "PBR"
|
|
123
|
+
lookup_table.RescaleTransferFunction(1e-18, 1e-13)
|
|
124
|
+
lookup_table.ApplyPreset("Cold and Hot", True)
|
|
125
|
+
lookup_table.MapControlPointsToLogSpace()
|
|
126
|
+
lookup_table.UseLogScale = 1
|
|
127
|
+
lookup_table.NumberOfTableValues = 16
|
|
128
|
+
lookup_table.InvertTransferFunction()
|
|
129
|
+
|
|
130
|
+
|
|
131
|
+
def configure_data_axes_grid(display, kind):
|
|
132
|
+
"""
|
|
133
|
+
Configure data axes grid settings.
|
|
134
|
+
"""
|
|
135
|
+
display.DataAxesGrid.GridAxesVisibility = 1
|
|
136
|
+
display.DataAxesGrid.XTitle = ""
|
|
137
|
+
display.DataAxesGrid.YTitle = ""
|
|
138
|
+
display.DataAxesGrid.XAxisUseCustomLabels = 1
|
|
139
|
+
display.DataAxesGrid.YAxisUseCustomLabels = 1
|
|
140
|
+
|
|
141
|
+
display.DataAxesGrid.XTitleFontSize = args.axes_title_size
|
|
142
|
+
display.DataAxesGrid.XLabelFontSize = args.axes_label_size
|
|
143
|
+
display.DataAxesGrid.YTitleFontSize = args.axes_title_size
|
|
144
|
+
display.DataAxesGrid.YLabelFontSize = args.axes_label_size
|
|
145
|
+
|
|
146
|
+
if kind == "prod":
|
|
147
|
+
display.DataAxesGrid.ZTitle = ""
|
|
148
|
+
display.DataAxesGrid.GridColor = [0.0, 0.0, 0.0]
|
|
149
|
+
display.DataAxesGrid.ShowGrid = 1
|
|
150
|
+
display.DataAxesGrid.LabelUniqueEdgesOnly = 0
|
|
151
|
+
display.DataAxesGrid.ZAxisUseCustomLabels = 1
|
|
152
|
+
display.DataAxesGrid.ZTitleFontSize = args.axes_title_size
|
|
153
|
+
display.DataAxesGrid.ZLabelFontSize = args.axes_label_size
|
|
154
|
+
else:
|
|
155
|
+
display.DataAxesGrid.ZTitle = " Z [m] "
|
|
156
|
+
display.DataAxesGrid.ZLabelColor = [0.0, 0.0, 0.0]
|
|
157
|
+
display.DataAxesGrid.ZTitleColor = [0.0, 0.0, 0.0]
|
|
158
|
+
display.DataAxesGrid.ZTitleFontSize = args.axes_title_size
|
|
159
|
+
display.DataAxesGrid.ZLabelFontSize = args.axes_label_size
|
|
160
|
+
|
|
161
|
+
|
|
162
|
+
def configure_view_appearance(render_view):
|
|
163
|
+
"""
|
|
164
|
+
Configure view appearance settings."""
|
|
165
|
+
render_view.OrientationAxesLabelColor = [0.0, 0.0, 0.0]
|
|
166
|
+
render_view.OrientationAxesOutlineColor = [0.0, 0.0, 0.0]
|
|
167
|
+
render_view.OrientationAxesXVisibility = 0
|
|
168
|
+
render_view.OrientationAxesYVisibility = 0
|
|
169
|
+
render_view.OrientationAxesZColor = [0.0, 0.0, 0.0]
|
|
170
|
+
render_view.UseColorPaletteForBackground = 0
|
|
171
|
+
render_view.Background = [1.0, 1.0, 1.0]
|
|
172
|
+
|
|
173
|
+
|
|
174
|
+
def set_camera_view(render_view):
|
|
175
|
+
"""
|
|
176
|
+
Set camera view settings.
|
|
177
|
+
"""
|
|
178
|
+
layout1 = pvs.GetLayout()
|
|
179
|
+
layout1.SetSize(1592, 1128)
|
|
180
|
+
render_view.CameraPosition = [
|
|
181
|
+
1548.95,
|
|
182
|
+
-1349.49,
|
|
183
|
+
699.27,
|
|
184
|
+
]
|
|
185
|
+
render_view.CameraFocalPoint = [
|
|
186
|
+
-1.37e-13,
|
|
187
|
+
3.18e-13,
|
|
188
|
+
505.00,
|
|
189
|
+
]
|
|
190
|
+
render_view.CameraViewUp = [
|
|
191
|
+
-0.07,
|
|
192
|
+
0.06,
|
|
193
|
+
0.99,
|
|
194
|
+
]
|
|
195
|
+
render_view.CameraParallelScale = 534.08
|
|
196
|
+
|
|
197
|
+
|
|
198
|
+
def save_animation_and_screenshot(render_view, animation_path, screenshot_path):
|
|
199
|
+
"""
|
|
200
|
+
Save animation and screenshot.
|
|
201
|
+
"""
|
|
202
|
+
animation_scene = pvs.GetAnimationScene()
|
|
203
|
+
animation_scene.UpdateAnimationUsingDataTimeSteps()
|
|
204
|
+
|
|
205
|
+
pvs.SaveAnimation(animation_path, render_view, FrameRate=15)
|
|
206
|
+
|
|
207
|
+
if not screenshot_path:
|
|
208
|
+
return
|
|
209
|
+
|
|
210
|
+
time_steps = sd_productspvd.TimestepValues
|
|
211
|
+
if not time_steps:
|
|
212
|
+
return
|
|
213
|
+
|
|
214
|
+
last_time = time_steps[-1]
|
|
215
|
+
render_view.ViewTime = last_time
|
|
216
|
+
|
|
217
|
+
for reader in (sd_productspvd, sd_attributespvd):
|
|
218
|
+
reader.UpdatePipeline(last_time)
|
|
219
|
+
|
|
220
|
+
pvs.ExportView(
|
|
221
|
+
filename=str(pathlib.Path(screenshot_path)),
|
|
222
|
+
view=render_view,
|
|
223
|
+
Rasterize3Dgeometry=False,
|
|
224
|
+
GL2PSdepthsortmethod="BSP sorting (slow, best)",
|
|
225
|
+
)
|
|
226
|
+
|
|
227
|
+
pvs.RenderAllViews()
|
|
228
|
+
|
|
229
|
+
|
|
230
|
+
configure_color_bar_and_display(
|
|
231
|
+
animation_setup.sd_productspvdDisplay, animation_setup.rHlookup_table, kind="prod"
|
|
232
|
+
)
|
|
233
|
+
configure_data_axes_grid(animation_setup.sd_productspvdDisplay, kind="prod")
|
|
234
|
+
configure_view_appearance(animation_setup.renderView1)
|
|
235
|
+
configure_color_bar_and_display(
|
|
236
|
+
animation_setup.sd_attributespvdDisplay,
|
|
237
|
+
animation_setup.volumelookup_table,
|
|
238
|
+
kind="attr",
|
|
239
|
+
)
|
|
240
|
+
configure_data_axes_grid(animation_setup.sd_attributespvdDisplay, kind="attr")
|
|
241
|
+
set_camera_view(animation_setup.renderView1)
|
|
242
|
+
save_animation_and_screenshot(
|
|
243
|
+
animation_setup.renderView1, args.output_animation_path, args.output_screenshot_path
|
|
244
|
+
)
|
{pysdm_examples-3.0.0rc12 → pysdm_examples-3.0.0rc16}/PySDM_examples/Yang_et_al_2018/settings.py
RENAMED
|
@@ -19,9 +19,7 @@ class Settings:
|
|
|
19
19
|
dt_max: float = 1 * si.second,
|
|
20
20
|
):
|
|
21
21
|
self.total_time = 3 * si.hours
|
|
22
|
-
self.mass_of_dry_air =
|
|
23
|
-
1000 * si.kilogram
|
|
24
|
-
) # TODO #335 doubled with jupyter si unit
|
|
22
|
+
self.mass_of_dry_air = 1000 * si.kilogram
|
|
25
23
|
|
|
26
24
|
self.n_steps = int(
|
|
27
25
|
self.total_time / (5 * si.second)
|
|
@@ -34,7 +32,7 @@ class Settings:
|
|
|
34
32
|
s_geom=1.4,
|
|
35
33
|
),
|
|
36
34
|
size_range=(10.633 * si.nanometre, 513.06 * si.nanometre),
|
|
37
|
-
).
|
|
35
|
+
).sample_deterministic(n_sd)
|
|
38
36
|
self.dt_max = dt_max
|
|
39
37
|
|
|
40
38
|
self.dt_output = dt_output
|
{pysdm_examples-3.0.0rc12 → pysdm_examples-3.0.0rc16}/PySDM_examples/Yang_et_al_2018/simulation.py
RENAMED
|
@@ -84,10 +84,10 @@ class Simulation:
|
|
|
84
84
|
_sp = self.particulator
|
|
85
85
|
cell_id = 0
|
|
86
86
|
output["r_bins_values"].append(
|
|
87
|
-
_sp.products["Particles Wet Size Spectrum"].get()
|
|
87
|
+
(_sp.products["Particles Wet Size Spectrum"].get()).T
|
|
88
88
|
)
|
|
89
89
|
volume = _sp.attributes["volume"].to_ndarray()
|
|
90
|
-
output["r"].append(self.formulae.trivia.radius(volume=volume))
|
|
90
|
+
output["r"].append((self.formulae.trivia.radius(volume=volume)).T)
|
|
91
91
|
output["S"].append(_sp.environment["RH"][cell_id] - 1)
|
|
92
92
|
output["t"].append(_sp.products["t"].get())
|
|
93
93
|
for key in ("water_vapour_mixing_ratio", "T", "z"):
|
|
@@ -124,4 +124,6 @@ class Simulation:
|
|
|
124
124
|
for _ in range(self.n_steps):
|
|
125
125
|
self.particulator.run(self.n_substeps)
|
|
126
126
|
self.save(output)
|
|
127
|
+
for k, v in output.items():
|
|
128
|
+
output[k] = np.asarray(v)
|
|
127
129
|
return output
|
{pysdm_examples-3.0.0rc12 → pysdm_examples-3.0.0rc16}/PySDM_examples/deJong_Azimi/simulation_0D.py
RENAMED
|
@@ -25,7 +25,7 @@ def run_box(settings, backend_class=CPU):
|
|
|
25
25
|
attributes = {}
|
|
26
26
|
attributes["volume"], attributes["multiplicity"] = ConstantMultiplicity(
|
|
27
27
|
settings.spectrum
|
|
28
|
-
).
|
|
28
|
+
).sample_deterministic(settings.n_sd)
|
|
29
29
|
builder.add_dynamic(
|
|
30
30
|
Coalescence(
|
|
31
31
|
collision_kernel=settings.kernel,
|
|
@@ -35,15 +35,15 @@ def run_box_breakup(
|
|
|
35
35
|
builder.particulator.environment["rhod"] = 1.0
|
|
36
36
|
attributes = {}
|
|
37
37
|
if sample_in_radius:
|
|
38
|
-
diams, attributes["multiplicity"] = Logarithmic(
|
|
39
|
-
settings.
|
|
40
|
-
)
|
|
38
|
+
diams, attributes["multiplicity"] = Logarithmic(
|
|
39
|
+
settings.spectrum
|
|
40
|
+
).sample_deterministic(settings.n_sd)
|
|
41
41
|
radii = diams / 2
|
|
42
42
|
attributes["volume"] = Formulae().trivia.volume(radius=radii)
|
|
43
43
|
else:
|
|
44
44
|
attributes["volume"], attributes["multiplicity"] = ConstantMultiplicity(
|
|
45
45
|
settings.spectrum
|
|
46
|
-
).
|
|
46
|
+
).sample_deterministic(settings.n_sd)
|
|
47
47
|
breakup = Collision(
|
|
48
48
|
collision_kernel=settings.kernel,
|
|
49
49
|
coalescence_efficiency=settings.coal_eff,
|
|
@@ -100,7 +100,7 @@ def run_box_NObreakup(settings, steps=None, backend_class=CPU):
|
|
|
100
100
|
attributes = {}
|
|
101
101
|
attributes["volume"], attributes["multiplicity"] = ConstantMultiplicity(
|
|
102
102
|
settings.spectrum
|
|
103
|
-
).
|
|
103
|
+
).sample_deterministic(settings.n_sd)
|
|
104
104
|
coal = Coalescence(
|
|
105
105
|
collision_kernel=settings.kernel,
|
|
106
106
|
coalescence_efficiency=settings.coal_eff,
|