PySDM-examples 2.129__tar.gz → 2.131__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.
Files changed (179) hide show
  1. {pysdm_examples-2.129 → pysdm_examples-2.131}/PKG-INFO +4 -1
  2. {pysdm_examples-2.129 → pysdm_examples-2.131}/PySDM_examples/Lowe_et_al_2019/settings.py +22 -10
  3. {pysdm_examples-2.129 → pysdm_examples-2.131}/PySDM_examples/Lowe_et_al_2019/simulation.py +1 -4
  4. {pysdm_examples-2.129 → pysdm_examples-2.131}/PySDM_examples/Shima_et_al_2009/example.py +12 -1
  5. pysdm_examples-2.131/PySDM_examples/Spichtinger_et_al_2023/__init__.py +7 -0
  6. pysdm_examples-2.131/PySDM_examples/Spichtinger_et_al_2023/data/reference_bulk.py +47 -0
  7. pysdm_examples-2.131/PySDM_examples/Spichtinger_et_al_2023/data/simulation_data.py +22 -0
  8. pysdm_examples-2.131/PySDM_examples/Spichtinger_et_al_2023/settings.py +66 -0
  9. pysdm_examples-2.131/PySDM_examples/Spichtinger_et_al_2023/simulation.py +121 -0
  10. pysdm_examples-2.131/PySDM_examples/Zaba_et_al/__init__.py +7 -0
  11. {pysdm_examples-2.129 → pysdm_examples-2.131}/docs/pysdm_examples_landing.md +2 -0
  12. {pysdm_examples-2.129 → pysdm_examples-2.131}/pysdm_examples.egg-info/PKG-INFO +4 -1
  13. {pysdm_examples-2.129 → pysdm_examples-2.131}/pysdm_examples.egg-info/SOURCES.txt +7 -1
  14. {pysdm_examples-2.129 → pysdm_examples-2.131}/pysdm_examples.egg-info/requires.txt +1 -0
  15. {pysdm_examples-2.129 → pysdm_examples-2.131}/setup.py +4 -0
  16. {pysdm_examples-2.129 → pysdm_examples-2.131}/MANIFEST.in +0 -0
  17. {pysdm_examples-2.129 → pysdm_examples-2.131}/PySDM_examples/Abade_and_Albuquerque_2024/__init__.py +0 -0
  18. {pysdm_examples-2.129 → pysdm_examples-2.131}/PySDM_examples/Abade_and_Albuquerque_2024/settings.py +0 -0
  19. {pysdm_examples-2.129 → pysdm_examples-2.131}/PySDM_examples/Abade_and_Albuquerque_2024/simulation.py +0 -0
  20. {pysdm_examples-2.129 → pysdm_examples-2.131}/PySDM_examples/Abdul_Razzak_Ghan_2000/__init__.py +0 -0
  21. {pysdm_examples-2.129 → pysdm_examples-2.131}/PySDM_examples/Abdul_Razzak_Ghan_2000/aerosol.py +0 -0
  22. {pysdm_examples-2.129 → pysdm_examples-2.131}/PySDM_examples/Abdul_Razzak_Ghan_2000/data_from_ARG2000_paper.py +0 -0
  23. {pysdm_examples-2.129 → pysdm_examples-2.131}/PySDM_examples/Abdul_Razzak_Ghan_2000/data_from_CloudMicrophysics_ARG.py +0 -0
  24. {pysdm_examples-2.129 → pysdm_examples-2.131}/PySDM_examples/Abdul_Razzak_Ghan_2000/run_ARG_parcel.py +0 -0
  25. {pysdm_examples-2.129 → pysdm_examples-2.131}/PySDM_examples/Alpert_and_Knopf_2016/__init__.py +0 -0
  26. {pysdm_examples-2.129 → pysdm_examples-2.131}/PySDM_examples/Alpert_and_Knopf_2016/simulation.py +0 -0
  27. {pysdm_examples-2.129 → pysdm_examples-2.131}/PySDM_examples/Alpert_and_Knopf_2016/table.py +0 -0
  28. {pysdm_examples-2.129 → pysdm_examples-2.131}/PySDM_examples/Alpert_and_Knopf_2016/table_1.py +0 -0
  29. {pysdm_examples-2.129 → pysdm_examples-2.131}/PySDM_examples/Alpert_and_Knopf_2016/table_2.py +0 -0
  30. {pysdm_examples-2.129 → pysdm_examples-2.131}/PySDM_examples/Arabas_and_Shima_2017/__init__.py +0 -0
  31. {pysdm_examples-2.129 → pysdm_examples-2.131}/PySDM_examples/Arabas_and_Shima_2017/example.py +0 -0
  32. {pysdm_examples-2.129 → pysdm_examples-2.131}/PySDM_examples/Arabas_and_Shima_2017/settings.py +0 -0
  33. {pysdm_examples-2.129 → pysdm_examples-2.131}/PySDM_examples/Arabas_and_Shima_2017/simulation.py +0 -0
  34. {pysdm_examples-2.129 → pysdm_examples-2.131}/PySDM_examples/Arabas_et_al_2015/__init__.py +0 -0
  35. {pysdm_examples-2.129 → pysdm_examples-2.131}/PySDM_examples/Arabas_et_al_2015/example.py +0 -0
  36. {pysdm_examples-2.129 → pysdm_examples-2.131}/PySDM_examples/Arabas_et_al_2015/example_benchmark.py +0 -0
  37. {pysdm_examples-2.129 → pysdm_examples-2.131}/PySDM_examples/Arabas_et_al_2015/settings.py +0 -0
  38. {pysdm_examples-2.129 → pysdm_examples-2.131}/PySDM_examples/Arabas_et_al_2015/spin_up.py +0 -0
  39. {pysdm_examples-2.129 → pysdm_examples-2.131}/PySDM_examples/Arabas_et_al_2025/__init__.py +0 -0
  40. {pysdm_examples-2.129 → pysdm_examples-2.131}/PySDM_examples/Arabas_et_al_2025/commons.py +0 -0
  41. {pysdm_examples-2.129 → pysdm_examples-2.131}/PySDM_examples/Arabas_et_al_2025/curved_text.py +0 -0
  42. {pysdm_examples-2.129 → pysdm_examples-2.131}/PySDM_examples/Arabas_et_al_2025/frozen_fraction.py +0 -0
  43. {pysdm_examples-2.129 → pysdm_examples-2.131}/PySDM_examples/Arabas_et_al_2025/make_particulator.py +0 -0
  44. {pysdm_examples-2.129 → pysdm_examples-2.131}/PySDM_examples/Arabas_et_al_2025/plots.py +0 -0
  45. {pysdm_examples-2.129 → pysdm_examples-2.131}/PySDM_examples/Arabas_et_al_2025/run_simulation.py +0 -0
  46. {pysdm_examples-2.129 → pysdm_examples-2.131}/PySDM_examples/Bartman_2020_MasterThesis/__init__.py +0 -0
  47. {pysdm_examples-2.129 → pysdm_examples-2.131}/PySDM_examples/Bartman_2020_MasterThesis/fig_4_adaptive_sdm.py +0 -0
  48. {pysdm_examples-2.129 → pysdm_examples-2.131}/PySDM_examples/Bartman_2020_MasterThesis/fig_5_SCIPY_VS_ADAPTIVE.py +0 -0
  49. {pysdm_examples-2.129 → pysdm_examples-2.131}/PySDM_examples/Bartman_et_al_2021/__init__.py +0 -0
  50. {pysdm_examples-2.129 → pysdm_examples-2.131}/PySDM_examples/Bartman_et_al_2021/label.py +0 -0
  51. {pysdm_examples-2.129 → pysdm_examples-2.131}/PySDM_examples/Berry_1967/__init__.py +0 -0
  52. {pysdm_examples-2.129 → pysdm_examples-2.131}/PySDM_examples/Berry_1967/example.py +0 -0
  53. {pysdm_examples-2.129 → pysdm_examples-2.131}/PySDM_examples/Berry_1967/example_fig_6.py +0 -0
  54. {pysdm_examples-2.129 → pysdm_examples-2.131}/PySDM_examples/Berry_1967/settings.py +0 -0
  55. {pysdm_examples-2.129 → pysdm_examples-2.131}/PySDM_examples/Berry_1967/spectrum_plotter.py +0 -0
  56. {pysdm_examples-2.129 → pysdm_examples-2.131}/PySDM_examples/Bieli_et_al_2022/__init__.py +0 -0
  57. {pysdm_examples-2.129 → pysdm_examples-2.131}/PySDM_examples/Bieli_et_al_2022/settings.py +0 -0
  58. {pysdm_examples-2.129 → pysdm_examples-2.131}/PySDM_examples/Bieli_et_al_2022/simulation.py +0 -0
  59. {pysdm_examples-2.129 → pysdm_examples-2.131}/PySDM_examples/Bolin_1958/__init__.py +0 -0
  60. {pysdm_examples-2.129 → pysdm_examples-2.131}/PySDM_examples/Bolot_et_al_2013/__init__.py +0 -0
  61. {pysdm_examples-2.129 → pysdm_examples-2.131}/PySDM_examples/Bulenok_2023_MasterThesis/__init__.py +0 -0
  62. {pysdm_examples-2.129 → pysdm_examples-2.131}/PySDM_examples/Bulenok_2023_MasterThesis/performance_comparison_Srivastava_Setup.py +0 -0
  63. {pysdm_examples-2.129 → pysdm_examples-2.131}/PySDM_examples/Bulenok_2023_MasterThesis/setups.py +0 -0
  64. {pysdm_examples-2.129 → pysdm_examples-2.131}/PySDM_examples/Bulenok_2023_MasterThesis/utils.py +0 -0
  65. {pysdm_examples-2.129 → pysdm_examples-2.131}/PySDM_examples/Ervens_and_Feingold_2012/__init__.py +0 -0
  66. {pysdm_examples-2.129 → pysdm_examples-2.131}/PySDM_examples/Ervens_and_Feingold_2012/settings.py +0 -0
  67. {pysdm_examples-2.129 → pysdm_examples-2.131}/PySDM_examples/Fisher_1991/__init__.py +0 -0
  68. {pysdm_examples-2.129 → pysdm_examples-2.131}/PySDM_examples/Gedzelman_and_Arnold_1994/__init__.py +0 -0
  69. {pysdm_examples-2.129 → pysdm_examples-2.131}/PySDM_examples/Gonfiantini_1986/__init__.py +0 -0
  70. {pysdm_examples-2.129 → pysdm_examples-2.131}/PySDM_examples/Grabowski_and_Pawlowska_2023/__init__.py +0 -0
  71. {pysdm_examples-2.129 → pysdm_examples-2.131}/PySDM_examples/Grabowski_and_Pawlowska_2023/settings.py +0 -0
  72. {pysdm_examples-2.129 → pysdm_examples-2.131}/PySDM_examples/Grabowski_and_Pawlowska_2023/simulation.py +0 -0
  73. {pysdm_examples-2.129 → pysdm_examples-2.131}/PySDM_examples/Graf_et_al_2019/__init__.py +0 -0
  74. {pysdm_examples-2.129 → pysdm_examples-2.131}/PySDM_examples/Jaruga_and_Pawlowska_2018/__init__.py +0 -0
  75. {pysdm_examples-2.129 → pysdm_examples-2.131}/PySDM_examples/Jensen_and_Nugent_2017/__init__.py +0 -0
  76. {pysdm_examples-2.129 → pysdm_examples-2.131}/PySDM_examples/Jensen_and_Nugent_2017/plotting.py +0 -0
  77. {pysdm_examples-2.129 → pysdm_examples-2.131}/PySDM_examples/Jensen_and_Nugent_2017/settings.py +0 -0
  78. {pysdm_examples-2.129 → pysdm_examples-2.131}/PySDM_examples/Jensen_and_Nugent_2017/simulation.py +0 -0
  79. {pysdm_examples-2.129 → pysdm_examples-2.131}/PySDM_examples/Jensen_and_Nugent_2017/table_3.py +0 -0
  80. {pysdm_examples-2.129 → pysdm_examples-2.131}/PySDM_examples/Jouzel_and_Merlivat_1984/__init__.py +0 -0
  81. {pysdm_examples-2.129 → pysdm_examples-2.131}/PySDM_examples/Jouzel_and_Merlivat_1984/thermodynamic_profiles.py +0 -0
  82. {pysdm_examples-2.129 → pysdm_examples-2.131}/PySDM_examples/Kinzer_And_Gunn_1951/__init__.py +0 -0
  83. {pysdm_examples-2.129 → pysdm_examples-2.131}/PySDM_examples/Kinzer_And_Gunn_1951/table_1_and_2.py +0 -0
  84. {pysdm_examples-2.129 → pysdm_examples-2.131}/PySDM_examples/Kreidenweis_et_al_2003/__init__.py +0 -0
  85. {pysdm_examples-2.129 → pysdm_examples-2.131}/PySDM_examples/Kreidenweis_et_al_2003/settings.py +0 -0
  86. {pysdm_examples-2.129 → pysdm_examples-2.131}/PySDM_examples/Kreidenweis_et_al_2003/simulation.py +0 -0
  87. {pysdm_examples-2.129 → pysdm_examples-2.131}/PySDM_examples/Lamb_et_al_2017/__init__.py +0 -0
  88. {pysdm_examples-2.129 → pysdm_examples-2.131}/PySDM_examples/Lowe_et_al_2019/__init__.py +0 -0
  89. {pysdm_examples-2.129 → pysdm_examples-2.131}/PySDM_examples/Lowe_et_al_2019/aerosol.py +0 -0
  90. {pysdm_examples-2.129 → pysdm_examples-2.131}/PySDM_examples/Lowe_et_al_2019/aerosol_code.py +0 -0
  91. {pysdm_examples-2.129 → pysdm_examples-2.131}/PySDM_examples/Lowe_et_al_2019/constants_def.py +0 -0
  92. {pysdm_examples-2.129 → pysdm_examples-2.131}/PySDM_examples/Lowe_et_al_2019/plot_helper.py +0 -0
  93. {pysdm_examples-2.129 → pysdm_examples-2.131}/PySDM_examples/Merlivat_and_Nief_1967/__init__.py +0 -0
  94. {pysdm_examples-2.129 → pysdm_examples-2.131}/PySDM_examples/Miyake_et_al_1968/__init__.py +0 -0
  95. {pysdm_examples-2.129 → pysdm_examples-2.131}/PySDM_examples/Morrison_and_Grabowski_2007/__init__.py +0 -0
  96. {pysdm_examples-2.129 → pysdm_examples-2.131}/PySDM_examples/Morrison_and_Grabowski_2007/common.py +0 -0
  97. {pysdm_examples-2.129 → pysdm_examples-2.131}/PySDM_examples/Morrison_and_Grabowski_2007/strato_cumulus.py +0 -0
  98. {pysdm_examples-2.129 → pysdm_examples-2.131}/PySDM_examples/Niedermeier_et_al_2014/__init__.py +0 -0
  99. {pysdm_examples-2.129 → pysdm_examples-2.131}/PySDM_examples/Niedermeier_et_al_2014/settings.py +0 -0
  100. {pysdm_examples-2.129 → pysdm_examples-2.131}/PySDM_examples/Niedermeier_et_al_2014/simulation.py +0 -0
  101. {pysdm_examples-2.129 → pysdm_examples-2.131}/PySDM_examples/Pierchala_et_al_2022/__init__.py +0 -0
  102. {pysdm_examples-2.129 → pysdm_examples-2.131}/PySDM_examples/Pierchala_et_al_2022/commons.py +0 -0
  103. {pysdm_examples-2.129 → pysdm_examples-2.131}/PySDM_examples/Pruppacher_and_Rasmussen_1979/__init__.py +0 -0
  104. {pysdm_examples-2.129 → pysdm_examples-2.131}/PySDM_examples/Pyrcel/__init__.py +0 -0
  105. {pysdm_examples-2.129 → pysdm_examples-2.131}/PySDM_examples/Pyrcel/profile_plotter.py +0 -0
  106. {pysdm_examples-2.129 → pysdm_examples-2.131}/PySDM_examples/Pyrcel/settings.py +0 -0
  107. {pysdm_examples-2.129 → pysdm_examples-2.131}/PySDM_examples/Pyrcel/simulation.py +0 -0
  108. {pysdm_examples-2.129 → pysdm_examples-2.131}/PySDM_examples/Rogers_1975/__init__.py +0 -0
  109. {pysdm_examples-2.129 → pysdm_examples-2.131}/PySDM_examples/Rozanski_and_Sonntag_1982/__init__.py +0 -0
  110. {pysdm_examples-2.129 → pysdm_examples-2.131}/PySDM_examples/Rozanski_and_Sonntag_1982/multibox.py +0 -0
  111. {pysdm_examples-2.129 → pysdm_examples-2.131}/PySDM_examples/Shima_et_al_2009/__init__.py +0 -0
  112. {pysdm_examples-2.129 → pysdm_examples-2.131}/PySDM_examples/Shima_et_al_2009/error_measure.py +0 -0
  113. {pysdm_examples-2.129 → pysdm_examples-2.131}/PySDM_examples/Shima_et_al_2009/example_timing.py +0 -0
  114. {pysdm_examples-2.129 → pysdm_examples-2.131}/PySDM_examples/Shima_et_al_2009/settings.py +0 -0
  115. {pysdm_examples-2.129 → pysdm_examples-2.131}/PySDM_examples/Shima_et_al_2009/spectrum_plotter.py +0 -0
  116. {pysdm_examples-2.129 → pysdm_examples-2.131}/PySDM_examples/Shima_et_al_2009/tutorial_example.py +0 -0
  117. {pysdm_examples-2.129 → pysdm_examples-2.131}/PySDM_examples/Shima_et_al_2009/tutorial_plotter.py +0 -0
  118. {pysdm_examples-2.129 → pysdm_examples-2.131}/PySDM_examples/Shima_et_al_2009/tutorial_settings.py +0 -0
  119. {pysdm_examples-2.129 → pysdm_examples-2.131}/PySDM_examples/Shipway_and_Hill_2012/__init__.py +0 -0
  120. {pysdm_examples-2.129 → pysdm_examples-2.131}/PySDM_examples/Shipway_and_Hill_2012/mpdata_1d.py +0 -0
  121. {pysdm_examples-2.129 → pysdm_examples-2.131}/PySDM_examples/Shipway_and_Hill_2012/plot.py +0 -0
  122. {pysdm_examples-2.129 → pysdm_examples-2.131}/PySDM_examples/Shipway_and_Hill_2012/settings.py +0 -0
  123. {pysdm_examples-2.129 → pysdm_examples-2.131}/PySDM_examples/Shipway_and_Hill_2012/simulation.py +0 -0
  124. {pysdm_examples-2.129 → pysdm_examples-2.131}/PySDM_examples/Singer_Ward/__init__.py +0 -0
  125. {pysdm_examples-2.129 → pysdm_examples-2.131}/PySDM_examples/Singer_Ward/aerosol.py +0 -0
  126. {pysdm_examples-2.129/PySDM_examples/Toon_et_al_1980 → pysdm_examples-2.131/PySDM_examples/Spichtinger_et_al_2023/data}/__init__.py +0 -0
  127. {pysdm_examples-2.129 → pysdm_examples-2.131}/PySDM_examples/Srivastava_1982/__init__.py +0 -0
  128. {pysdm_examples-2.129 → pysdm_examples-2.131}/PySDM_examples/Srivastava_1982/equations.py +0 -0
  129. {pysdm_examples-2.129 → pysdm_examples-2.131}/PySDM_examples/Srivastava_1982/example.py +0 -0
  130. {pysdm_examples-2.129 → pysdm_examples-2.131}/PySDM_examples/Srivastava_1982/settings.py +0 -0
  131. {pysdm_examples-2.129 → pysdm_examples-2.131}/PySDM_examples/Srivastava_1982/simulation.py +0 -0
  132. {pysdm_examples-2.129 → pysdm_examples-2.131}/PySDM_examples/Stewart_1975/__init__.py +0 -0
  133. {pysdm_examples-2.129/PySDM_examples/Zaba_et_al_2025 → pysdm_examples-2.131/PySDM_examples/Toon_et_al_1980}/__init__.py +0 -0
  134. {pysdm_examples-2.129 → pysdm_examples-2.131}/PySDM_examples/Van_Hook_1968/__init__.py +0 -0
  135. {pysdm_examples-2.129 → pysdm_examples-2.131}/PySDM_examples/Yang_et_al_2018/__init__.py +0 -0
  136. {pysdm_examples-2.129 → pysdm_examples-2.131}/PySDM_examples/Yang_et_al_2018/settings.py +0 -0
  137. {pysdm_examples-2.129 → pysdm_examples-2.131}/PySDM_examples/Yang_et_al_2018/simulation.py +0 -0
  138. {pysdm_examples-2.129 → pysdm_examples-2.131}/PySDM_examples/_HOWTOs/__init__.py +0 -0
  139. {pysdm_examples-2.129 → pysdm_examples-2.131}/PySDM_examples/__init__.py +0 -0
  140. {pysdm_examples-2.129 → pysdm_examples-2.131}/PySDM_examples/deJong_Azimi/__init__.py +0 -0
  141. {pysdm_examples-2.129 → pysdm_examples-2.131}/PySDM_examples/deJong_Azimi/cloudy_data.py +0 -0
  142. {pysdm_examples-2.129 → pysdm_examples-2.131}/PySDM_examples/deJong_Azimi/cloudy_data_0d.py +0 -0
  143. {pysdm_examples-2.129 → pysdm_examples-2.131}/PySDM_examples/deJong_Azimi/settings1D.py +0 -0
  144. {pysdm_examples-2.129 → pysdm_examples-2.131}/PySDM_examples/deJong_Azimi/simulation_0D.py +0 -0
  145. {pysdm_examples-2.129 → pysdm_examples-2.131}/PySDM_examples/deJong_Mackay_et_al_2023/__init__.py +0 -0
  146. {pysdm_examples-2.129 → pysdm_examples-2.131}/PySDM_examples/deJong_Mackay_et_al_2023/plot_rates.py +0 -0
  147. {pysdm_examples-2.129 → pysdm_examples-2.131}/PySDM_examples/deJong_Mackay_et_al_2023/settings1D.py +0 -0
  148. {pysdm_examples-2.129 → pysdm_examples-2.131}/PySDM_examples/deJong_Mackay_et_al_2023/settings_0D.py +0 -0
  149. {pysdm_examples-2.129 → pysdm_examples-2.131}/PySDM_examples/deJong_Mackay_et_al_2023/simulation1D.py +0 -0
  150. {pysdm_examples-2.129 → pysdm_examples-2.131}/PySDM_examples/deJong_Mackay_et_al_2023/simulation_0D.py +0 -0
  151. {pysdm_examples-2.129 → pysdm_examples-2.131}/PySDM_examples/deJong_Mackay_et_al_2023/simulation_ss.py +0 -0
  152. {pysdm_examples-2.129 → pysdm_examples-2.131}/PySDM_examples/seeding/__init__.py +0 -0
  153. {pysdm_examples-2.129 → pysdm_examples-2.131}/PySDM_examples/seeding/settings.py +0 -0
  154. {pysdm_examples-2.129 → pysdm_examples-2.131}/PySDM_examples/seeding/simulation.py +0 -0
  155. {pysdm_examples-2.129 → pysdm_examples-2.131}/PySDM_examples/utils/__init__.py +0 -0
  156. {pysdm_examples-2.129 → pysdm_examples-2.131}/PySDM_examples/utils/basic_simulation.py +0 -0
  157. {pysdm_examples-2.129 → pysdm_examples-2.131}/PySDM_examples/utils/dummy_controller.py +0 -0
  158. {pysdm_examples-2.129 → pysdm_examples-2.131}/PySDM_examples/utils/kinematic_2d/__init__.py +0 -0
  159. {pysdm_examples-2.129 → pysdm_examples-2.131}/PySDM_examples/utils/kinematic_2d/fields.py +0 -0
  160. {pysdm_examples-2.129 → pysdm_examples-2.131}/PySDM_examples/utils/kinematic_2d/gui.py +0 -0
  161. {pysdm_examples-2.129 → pysdm_examples-2.131}/PySDM_examples/utils/kinematic_2d/gui_controller.py +0 -0
  162. {pysdm_examples-2.129 → pysdm_examples-2.131}/PySDM_examples/utils/kinematic_2d/gui_settings.py +0 -0
  163. {pysdm_examples-2.129 → pysdm_examples-2.131}/PySDM_examples/utils/kinematic_2d/gui_viewer.py +0 -0
  164. {pysdm_examples-2.129 → pysdm_examples-2.131}/PySDM_examples/utils/kinematic_2d/make_default_product_collection.py +0 -0
  165. {pysdm_examples-2.129 → pysdm_examples-2.131}/PySDM_examples/utils/kinematic_2d/mpdata_2d.py +0 -0
  166. {pysdm_examples-2.129 → pysdm_examples-2.131}/PySDM_examples/utils/kinematic_2d/plots.py +0 -0
  167. {pysdm_examples-2.129 → pysdm_examples-2.131}/PySDM_examples/utils/kinematic_2d/simulation.py +0 -0
  168. {pysdm_examples-2.129 → pysdm_examples-2.131}/PySDM_examples/utils/kinematic_2d/storage.py +0 -0
  169. {pysdm_examples-2.129 → pysdm_examples-2.131}/PySDM_examples/utils/progbar_controller.py +0 -0
  170. {pysdm_examples-2.129 → pysdm_examples-2.131}/PySDM_examples/utils/pvanim.py +0 -0
  171. {pysdm_examples-2.129 → pysdm_examples-2.131}/PySDM_examples/utils/read_vtk_1d.py +0 -0
  172. {pysdm_examples-2.129 → pysdm_examples-2.131}/PySDM_examples/utils/widgets/__init__.py +0 -0
  173. {pysdm_examples-2.129 → pysdm_examples-2.131}/PySDM_examples/utils/widgets/freezer.py +0 -0
  174. {pysdm_examples-2.129 → pysdm_examples-2.131}/PySDM_examples/utils/widgets/progbar_updater.py +0 -0
  175. {pysdm_examples-2.129 → pysdm_examples-2.131}/README.md +0 -0
  176. {pysdm_examples-2.129 → pysdm_examples-2.131}/pyproject.toml +0 -0
  177. {pysdm_examples-2.129 → pysdm_examples-2.131}/pysdm_examples.egg-info/dependency_links.txt +0 -0
  178. {pysdm_examples-2.129 → pysdm_examples-2.131}/pysdm_examples.egg-info/top_level.txt +0 -0
  179. {pysdm_examples-2.129 → pysdm_examples-2.131}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: pysdm-examples
3
- Version: 2.129
3
+ Version: 2.131
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,6 +15,7 @@ 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
18
19
  Requires-Dist: joblib
19
20
  Requires-Dist: ipywidgets
20
21
  Requires-Dist: seaborn
@@ -128,6 +129,8 @@ Example notebooks include:
128
129
  - condensation and aqueous-chemistry
129
130
  - <a href="https://open-atmos.github.io/PySDM/PySDM_examples/Kreidenweis_et_al_2003.html">Kreidenweis_et_al_2003</a>: <mark>Hoppel gap</mark> simulation setup (i.e. depiction of evolution of aerosol mass spectrum from a monomodal to bimodal due to aqueous‐phase SO2 oxidation)
130
131
  - <a href="https://open-atmos.github.io/PySDM/PySDM_examples/Jaruga_and_Pawlowska_2018.html">Jaruga_and_Pawlowska_2018</a>: exploration of numerical convergence using the above Hoppel-gap simulation setup
132
+ - freezing
133
+ - <a href="https://open-atmos.github.io/PySDM/PySDM_examples/Spichtinger_et_al_2023.html">Spichtinger_et_al_2023</a>: <mark>homogeneous freezing</mark> and ice growth (<mark>Wegener-Bergeron-Findeisen process</mark>)
131
134
 
132
135
  The parcel environment is also featured in the <a href="https://open-atmos.github.io/PySDM/PySDM.html#tutorials">PySDM tutorials</a>.
133
136
 
@@ -1,13 +1,33 @@
1
+ from functools import lru_cache
2
+
1
3
  import numpy as np
2
4
  from PySDM_examples.Lowe_et_al_2019.constants_def import LOWE_CONSTS
3
5
  from pystrict import strict
4
6
 
5
7
  from PySDM import Formulae
8
+ from PySDM.backends import CPU
6
9
  from PySDM.initialisation.aerosol_composition import DryAerosolMixture
7
10
  from PySDM.initialisation.sampling import spectral_sampling as spec_sampling
8
11
  from PySDM.physics import si
9
12
 
10
13
 
14
+ @lru_cache
15
+ def backend(model):
16
+ return CPU(
17
+ formulae=Formulae(
18
+ surface_tension=model,
19
+ constants=LOWE_CONSTS,
20
+ diffusion_kinetics="LoweEtAl2019",
21
+ diffusion_thermics="LoweEtAl2019",
22
+ latent_heat_vapourisation="Lowe2019",
23
+ saturation_vapour_pressure="Lowe1977",
24
+ optical_albedo="Bohren1987",
25
+ optical_depth="Stephens1978",
26
+ ),
27
+ override_jit_flags={"parallel": False},
28
+ )
29
+
30
+
11
31
  @strict
12
32
  class Settings:
13
33
  def __init__(
@@ -22,16 +42,8 @@ class Settings:
22
42
  assert model in ("Constant", "CompressedFilmOvadnevaite")
23
43
  self.model = model
24
44
  self.n_sd_per_mode = n_sd_per_mode
25
- self.formulae = Formulae(
26
- surface_tension=model,
27
- constants=LOWE_CONSTS,
28
- diffusion_kinetics="LoweEtAl2019",
29
- diffusion_thermics="LoweEtAl2019",
30
- latent_heat_vapourisation="Lowe2019",
31
- saturation_vapour_pressure="Lowe1977",
32
- optical_albedo="Bohren1987",
33
- optical_depth="Stephens1978",
34
- )
45
+ self.backend = backend(model)
46
+ self.formulae = self.backend.formulae
35
47
  const = self.formulae.constants
36
48
  self.aerosol = aerosol
37
49
  self.spectral_sampling = spectral_sampling
@@ -3,7 +3,6 @@ from PySDM_examples.utils import BasicSimulation
3
3
 
4
4
  import PySDM.products as PySDM_products
5
5
  from PySDM import Builder
6
- from PySDM.backends import CPU
7
6
  from PySDM.dynamics import AmbientThermodynamics, Condensation
8
7
  from PySDM.environments import Parcel
9
8
  from PySDM.initialisation import equilibrate_wet_radii
@@ -15,9 +14,7 @@ class Simulation(BasicSimulation):
15
14
  n_sd = settings.n_sd_per_mode * len(settings.aerosol.modes)
16
15
  builder = Builder(
17
16
  n_sd=n_sd,
18
- backend=CPU(
19
- formulae=settings.formulae, override_jit_flags={"parallel": False}
20
- ),
17
+ backend=settings.backend,
21
18
  environment=Parcel(
22
19
  dt=settings.dt,
23
20
  mass_of_dry_air=settings.mass_of_dry_air,
@@ -12,11 +12,22 @@ from PySDM.environments import Box
12
12
  from PySDM.initialisation.sampling.spectral_sampling import ConstantMultiplicity
13
13
  from PySDM.products import ParticleVolumeVersusRadiusLogarithmSpectrum, WallTime
14
14
 
15
+ _BACKEND_CACHE = {}
16
+
17
+
18
+ def backend_factory(backend_class, formulae):
19
+ key = backend_class.__name__ + ":" + str(formulae)
20
+ if key not in _BACKEND_CACHE:
21
+ _BACKEND_CACHE[key] = backend_class(formulae=formulae)
22
+ return _BACKEND_CACHE[key]
23
+
15
24
 
16
25
  def run(settings, backend=CPU, observers=()):
17
26
  env = Box(dv=settings.dv, dt=settings.dt)
18
27
  builder = Builder(
19
- n_sd=settings.n_sd, backend=backend(formulae=settings.formulae), environment=env
28
+ n_sd=settings.n_sd,
29
+ backend=backend_factory(backend, formulae=settings.formulae),
30
+ environment=env,
20
31
  )
21
32
  attributes = {}
22
33
  sampling = ConstantMultiplicity(settings.spectrum)
@@ -0,0 +1,7 @@
1
+ # pylint: disable=invalid-name
2
+ """
3
+ homogeneous nucleation event example based on Fig. B1. in
4
+ [Spichtinger et al. 2023](https://doi.org/10.5194/acp-23-2035-2023)
5
+ """
6
+ from .simulation import Simulation
7
+ from .settings import Settings
@@ -0,0 +1,47 @@
1
+ """
2
+ reference results for bulk scheme in Fig B1. in
3
+ [Spichtinger et al. 2023](https://doi.org/10.5194/acp-23-2035-2023)
4
+ """
5
+
6
+ import numpy as np
7
+
8
+
9
+ def bulk_model_reference_array():
10
+
11
+ initial_temperatures = np.array([196.0, 216.0, 236.0])
12
+ updrafts = np.array([0.05, 0.1, 0.3, 0.5, 1.0, 3.0, 5.0, 10.0])
13
+
14
+ dim_size = (np.shape(initial_temperatures)[0], np.shape(updrafts)[0])
15
+ ni_bulk_ref = np.zeros(dim_size)
16
+
17
+ # T = 196
18
+ ni_bulk_ref[0, 0] = 643686.1316903427
19
+ ni_bulk_ref[0, 1] = 2368481.0609527444
20
+ ni_bulk_ref[0, 2] = 20160966.984670535
21
+ ni_bulk_ref[0, 3] = 49475281.81718969
22
+ ni_bulk_ref[0, 4] = 131080662.23620115
23
+ ni_bulk_ref[0, 5] = 401046528.70428866
24
+ ni_bulk_ref[0, 6] = 627442148.3402529
25
+ ni_bulk_ref[0, 7] = 1151707310.2210448
26
+
27
+ # T = 216
28
+ ni_bulk_ref[1, 0] = 60955.84292640147
29
+ ni_bulk_ref[1, 1] = 189002.0792186534
30
+ ni_bulk_ref[1, 2] = 1200751.6897658105
31
+ ni_bulk_ref[1, 3] = 2942110.815055958
32
+ ni_bulk_ref[1, 4] = 10475282.894692907
33
+ ni_bulk_ref[1, 5] = 90871045.40856971
34
+ ni_bulk_ref[1, 6] = 252175505.460412
35
+ ni_bulk_ref[1, 7] = 860335156.4717773
36
+
37
+ # T = 236
38
+ ni_bulk_ref[2, 0] = 13049.108886452004
39
+ ni_bulk_ref[2, 1] = 40422.244759544985
40
+ ni_bulk_ref[2, 2] = 237862.49854786208
41
+ ni_bulk_ref[2, 3] = 545315.7805748513
42
+ ni_bulk_ref[2, 4] = 1707801.469906006
43
+ ni_bulk_ref[2, 5] = 11128055.66932415
44
+ ni_bulk_ref[2, 6] = 27739585.111447476
45
+ ni_bulk_ref[2, 7] = 101799566.47225031
46
+
47
+ return initial_temperatures, updrafts, ni_bulk_ref
@@ -0,0 +1,22 @@
1
+ import numpy as np
2
+
3
+
4
+ def saved_simulation_ensemble_mean():
5
+
6
+ ni_ens_mean = np.array(
7
+ [
8
+ [0.00000000e00, 0.00000000e00, 0.00000000e00],
9
+ [0.00000000e00, 0.00000000e00, 0.00000000e00],
10
+ [1.62069821e03, 0.00000000e00, 0.00000000e00],
11
+ [5.25377025e06, 9.75512904e05, 4.51431097e05],
12
+ [3.67137290e07, 5.45240337e06, 1.53884530e06],
13
+ [7.96514420e07, 1.13878118e07, 3.26386880e06],
14
+ [2.19385480e08, 3.62240242e07, 9.00657591e06],
15
+ [1.00631095e09, 2.34443408e08, 4.90577208e07],
16
+ [1.73457062e09, 5.20774276e08, 1.16040316e08],
17
+ ]
18
+ )
19
+ T = np.array([196.0, 216.0, 236.0])
20
+ w = np.array([0.01, 0.03, 0.05, 0.1, 0.3, 0.5, 1.0, 3.0, 5.0])
21
+
22
+ return T, w, ni_ens_mean
@@ -0,0 +1,66 @@
1
+ from pystrict import strict
2
+
3
+ from PySDM import Formulae
4
+ from PySDM.physics.constants import si
5
+ from PySDM.initialisation.spectra import Lognormal
6
+ from PySDM.initialisation.sampling import spectral_sampling
7
+
8
+
9
+ @strict
10
+ class Settings:
11
+ def __init__(
12
+ self,
13
+ *,
14
+ n_sd: int,
15
+ w_updraft: float,
16
+ T0: float,
17
+ seed: int,
18
+ dt: float,
19
+ ):
20
+
21
+ self.n_sd = n_sd
22
+ self.w_updraft = w_updraft
23
+
24
+ self.N_dv_solution_droplet = 2500 / si.centimetre**3
25
+ self.r_mean_solution_droplet = 0.055 * si.micrometre
26
+ self.sigma_solution_droplet = 1.6
27
+
28
+ self.mass_of_dry_air = 1000 * si.kilogram
29
+ self.initial_pressure = 200 * si.hectopascals
30
+ self.initial_ice_supersaturation = 1.0
31
+ self.kappa = 0.64
32
+ self.initial_temperature = T0
33
+
34
+ self.formulae = Formulae(
35
+ particle_shape_and_density="MixedPhaseSpheres",
36
+ homogeneous_ice_nucleation_rate="Koop_Correction",
37
+ seed=seed,
38
+ )
39
+ const = self.formulae.constants
40
+ pvs_i = self.formulae.saturation_vapour_pressure.pvs_ice(
41
+ self.initial_temperature
42
+ )
43
+ self.initial_water_vapour_mixing_ratio = const.eps / (
44
+ self.initial_pressure / self.initial_ice_supersaturation / pvs_i - 1
45
+ )
46
+ dry_air_density = (
47
+ self.formulae.trivia.p_d(
48
+ self.initial_pressure, self.initial_water_vapour_mixing_ratio
49
+ )
50
+ / self.initial_temperature
51
+ / const.Rd
52
+ )
53
+
54
+ spectrum = Lognormal(
55
+ norm_factor=self.N_dv_solution_droplet / dry_air_density,
56
+ m_mode=self.r_mean_solution_droplet,
57
+ s_geom=self.sigma_solution_droplet,
58
+ )
59
+
60
+ self.r_dry, self.specific_concentration = spectral_sampling.Linear(
61
+ spectrum
62
+ ).sample(n_sd)
63
+
64
+ self.t_duration = 7200
65
+ self.dt = dt
66
+ self.n_output = int(self.t_duration / 100)
@@ -0,0 +1,121 @@
1
+ import numpy as np
2
+
3
+ from PySDM_examples.utils import BasicSimulation
4
+
5
+ import PySDM.products as PySDM_products
6
+ from PySDM.backends import CPU
7
+ from PySDM.builder import Builder
8
+ from PySDM.dynamics import (
9
+ AmbientThermodynamics,
10
+ Condensation,
11
+ Freezing,
12
+ VapourDepositionOnIce,
13
+ )
14
+ from PySDM.environments import Parcel
15
+ from PySDM.initialisation import discretise_multiplicities, equilibrate_wet_radii
16
+
17
+
18
+ class Simulation(BasicSimulation):
19
+ def __init__(self, settings, backend=CPU):
20
+
21
+ dt = settings.dt
22
+
23
+ formulae = settings.formulae
24
+
25
+ env = Parcel(
26
+ mixed_phase=True,
27
+ dt=dt,
28
+ mass_of_dry_air=settings.mass_of_dry_air,
29
+ p0=settings.initial_pressure,
30
+ initial_water_vapour_mixing_ratio=settings.initial_water_vapour_mixing_ratio,
31
+ T0=settings.initial_temperature,
32
+ w=settings.w_updraft,
33
+ )
34
+
35
+ builder = Builder(
36
+ backend=backend(
37
+ formulae=settings.formulae,
38
+ **(
39
+ {"override_jit_flags": {"parallel": False}}
40
+ if backend == CPU
41
+ else {}
42
+ ),
43
+ ),
44
+ n_sd=settings.n_sd,
45
+ environment=env,
46
+ )
47
+
48
+ builder.add_dynamic(AmbientThermodynamics())
49
+ builder.add_dynamic(Condensation())
50
+ builder.add_dynamic(VapourDepositionOnIce())
51
+ builder.add_dynamic(
52
+ Freezing(
53
+ singular=False, homogeneous_freezing=True, immersion_freezing=False
54
+ )
55
+ )
56
+
57
+ self.n_sd = settings.n_sd
58
+ self.multiplicities = discretise_multiplicities(
59
+ settings.specific_concentration * env.mass_of_dry_air
60
+ )
61
+ self.r_dry = settings.r_dry
62
+ v_dry = settings.formulae.trivia.volume(radius=self.r_dry)
63
+ kappa = settings.kappa
64
+
65
+ self.r_wet = equilibrate_wet_radii(
66
+ r_dry=self.r_dry,
67
+ environment=builder.particulator.environment,
68
+ kappa_times_dry_volume=kappa * v_dry,
69
+ )
70
+
71
+ attributes = {
72
+ "multiplicity": self.multiplicities,
73
+ "dry volume": v_dry,
74
+ "kappa times dry volume": kappa * v_dry,
75
+ "signed water mass": formulae.particle_shape_and_density.radius_to_mass(
76
+ self.r_wet
77
+ ),
78
+ }
79
+
80
+ products = [
81
+ PySDM_products.Time(name="t"),
82
+ PySDM_products.AmbientRelativeHumidity(name="RH_ice", unit="%"),
83
+ PySDM_products.ParticleConcentration(
84
+ name="n_i", unit="1/m**3", radius_range=(-np.inf, 0)
85
+ ),
86
+ ]
87
+
88
+ self.n_output = settings.n_output
89
+ self.n_substeps = int(settings.t_duration / dt / self.n_output)
90
+ super().__init__(builder.build(attributes, products))
91
+
92
+ def save(self, output):
93
+ cell_id = 0
94
+ output["t"].append(self.particulator.products["t"].get())
95
+ output["ni"].append(self.particulator.products["n_i"].get()[cell_id])
96
+ output["RHi"].append(self.particulator.products["RH_ice"].get()[cell_id])
97
+
98
+ def run(self):
99
+ output = {
100
+ "t": [],
101
+ "ni": [],
102
+ "RHi": [],
103
+ }
104
+
105
+ self.save(output)
106
+
107
+ RHi_old = self.particulator.products["RH_ice"].get()[0].copy()
108
+ for _ in range(self.n_output):
109
+
110
+ self.particulator.run(self.n_substeps)
111
+
112
+ self.save(output)
113
+
114
+ RHi = self.particulator.products["RH_ice"].get()[0].copy()
115
+ dRHi = (RHi_old - RHi) / RHi_old
116
+ if dRHi > 0.0 and RHi < 130.0:
117
+ print("break")
118
+ break
119
+ RHi_old = RHi
120
+
121
+ return output["ni"][-1]
@@ -0,0 +1,7 @@
1
+ """
2
+ global_meteoric_water_line.ipynb:
3
+ .. include:: ./global_meteoric_water_line.ipynb.badges.md
4
+
5
+ timescales_comparison.ipynb:
6
+ .. include:: ./timescales_comparison.ipynb.badges.md
7
+ """
@@ -92,6 +92,8 @@ Example notebooks include:
92
92
  - condensation and aqueous-chemistry
93
93
  - `PySDM_examples.Kreidenweis_et_al_2003`: <mark>Hoppel gap</mark> simulation setup (i.e. depiction of evolution of aerosol mass spectrum from a monomodal to bimodal due to aqueous‐phase SO2 oxidation)
94
94
  - `PySDM_examples.Jaruga_and_Pawlowska_2018`: exploration of numerical convergence using the above Hoppel-gap simulation setup
95
+ - freezing
96
+ - `PySDM_examples.Spichtinger_et_al_2023`: <mark>homogeneous freezing</mark> and ice growth (<mark>Wegener-Bergeron-Findeisen process</mark>)
95
97
 
96
98
  The parcel environment is also featured in the <a href="https://open-atmos.github.io/PySDM/PySDM.html#tutorials">PySDM tutorials</a>.
97
99
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: pysdm-examples
3
- Version: 2.129
3
+ Version: 2.131
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,6 +15,7 @@ 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
18
19
  Requires-Dist: joblib
19
20
  Requires-Dist: ipywidgets
20
21
  Requires-Dist: seaborn
@@ -128,6 +129,8 @@ Example notebooks include:
128
129
  - condensation and aqueous-chemistry
129
130
  - <a href="https://open-atmos.github.io/PySDM/PySDM_examples/Kreidenweis_et_al_2003.html">Kreidenweis_et_al_2003</a>: <mark>Hoppel gap</mark> simulation setup (i.e. depiction of evolution of aerosol mass spectrum from a monomodal to bimodal due to aqueous‐phase SO2 oxidation)
130
131
  - <a href="https://open-atmos.github.io/PySDM/PySDM_examples/Jaruga_and_Pawlowska_2018.html">Jaruga_and_Pawlowska_2018</a>: exploration of numerical convergence using the above Hoppel-gap simulation setup
132
+ - freezing
133
+ - <a href="https://open-atmos.github.io/PySDM/PySDM_examples/Spichtinger_et_al_2023.html">Spichtinger_et_al_2023</a>: <mark>homogeneous freezing</mark> and ice growth (<mark>Wegener-Bergeron-Findeisen process</mark>)
131
134
 
132
135
  The parcel environment is also featured in the <a href="https://open-atmos.github.io/PySDM/PySDM.html#tutorials">PySDM tutorials</a>.
133
136
 
@@ -115,6 +115,12 @@ PySDM_examples/Shipway_and_Hill_2012/settings.py
115
115
  PySDM_examples/Shipway_and_Hill_2012/simulation.py
116
116
  PySDM_examples/Singer_Ward/__init__.py
117
117
  PySDM_examples/Singer_Ward/aerosol.py
118
+ PySDM_examples/Spichtinger_et_al_2023/__init__.py
119
+ PySDM_examples/Spichtinger_et_al_2023/settings.py
120
+ PySDM_examples/Spichtinger_et_al_2023/simulation.py
121
+ PySDM_examples/Spichtinger_et_al_2023/data/__init__.py
122
+ PySDM_examples/Spichtinger_et_al_2023/data/reference_bulk.py
123
+ PySDM_examples/Spichtinger_et_al_2023/data/simulation_data.py
118
124
  PySDM_examples/Srivastava_1982/__init__.py
119
125
  PySDM_examples/Srivastava_1982/equations.py
120
126
  PySDM_examples/Srivastava_1982/example.py
@@ -126,7 +132,7 @@ PySDM_examples/Van_Hook_1968/__init__.py
126
132
  PySDM_examples/Yang_et_al_2018/__init__.py
127
133
  PySDM_examples/Yang_et_al_2018/settings.py
128
134
  PySDM_examples/Yang_et_al_2018/simulation.py
129
- PySDM_examples/Zaba_et_al_2025/__init__.py
135
+ PySDM_examples/Zaba_et_al/__init__.py
130
136
  PySDM_examples/_HOWTOs/__init__.py
131
137
  PySDM_examples/deJong_Azimi/__init__.py
132
138
  PySDM_examples/deJong_Azimi/cloudy_data.py
@@ -3,6 +3,7 @@ PyMPDATA
3
3
  open-atmos-jupyter-utils
4
4
  pystrict
5
5
  matplotlib
6
+ Pillow
6
7
  joblib
7
8
  ipywidgets
8
9
  seaborn
@@ -30,6 +30,10 @@ setup(
30
30
  "pystrict",
31
31
  # https://github.com/matplotlib/matplotlib/issues/28551
32
32
  "matplotlib" + ("!=3.9.1" if CI else ""),
33
+ "Pillow"
34
+ + (
35
+ "<11.3.0" if CI else ""
36
+ ), # matplotlib triggers deprecation warnings in 11.3.0
33
37
  "joblib",
34
38
  "ipywidgets",
35
39
  "seaborn",
File without changes
File without changes