PySDM-examples 2.121__tar.gz → 2.122__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 (175) hide show
  1. {pysdm_examples-2.121 → pysdm_examples-2.122}/PKG-INFO +7 -7
  2. {pysdm_examples-2.121 → pysdm_examples-2.122}/PySDM_examples/Arabas_et_al_2015/example.py +1 -1
  3. {pysdm_examples-2.121 → pysdm_examples-2.122}/PySDM_examples/Arabas_et_al_2015/example_benchmark.py +1 -1
  4. {pysdm_examples-2.121 → pysdm_examples-2.122}/PySDM_examples/Morrison_and_Grabowski_2007/__init__.py +2 -6
  5. pysdm_examples-2.122/PySDM_examples/utils/kinematic_2d/__init__.py +19 -0
  6. {pysdm_examples-2.121/PySDM_examples/Szumowski_et_al_1998 → pysdm_examples-2.122/PySDM_examples/utils/kinematic_2d}/gui.py +4 -2
  7. {pysdm_examples-2.121/PySDM_examples/Szumowski_et_al_1998 → pysdm_examples-2.122/PySDM_examples/utils/kinematic_2d}/gui_viewer.py +1 -1
  8. {pysdm_examples-2.121/PySDM_examples/Szumowski_et_al_1998 → pysdm_examples-2.122/PySDM_examples/utils/kinematic_2d}/mpdata_2d.py +1 -1
  9. {pysdm_examples-2.121/PySDM_examples/Szumowski_et_al_1998 → pysdm_examples-2.122/PySDM_examples/utils/kinematic_2d}/simulation.py +2 -2
  10. {pysdm_examples-2.121 → pysdm_examples-2.122}/docs/pysdm_examples_landing.md +6 -6
  11. {pysdm_examples-2.121 → pysdm_examples-2.122}/pyproject.toml +1 -1
  12. {pysdm_examples-2.121 → pysdm_examples-2.122}/pysdm_examples.egg-info/PKG-INFO +7 -7
  13. {pysdm_examples-2.121 → pysdm_examples-2.122}/pysdm_examples.egg-info/SOURCES.txt +11 -13
  14. pysdm_examples-2.121/PySDM_examples/Morrison_and_Grabowski_2007/cumulus.py +0 -136
  15. pysdm_examples-2.121/PySDM_examples/Szumowski_et_al_1998/__init__.py +0 -9
  16. pysdm_examples-2.121/PySDM_examples/Szumowski_et_al_1998/sounding.py +0 -93
  17. {pysdm_examples-2.121 → pysdm_examples-2.122}/MANIFEST.in +0 -0
  18. {pysdm_examples-2.121 → pysdm_examples-2.122}/PySDM_examples/Abade_and_Albuquerque_2024/__init__.py +0 -0
  19. {pysdm_examples-2.121 → pysdm_examples-2.122}/PySDM_examples/Abade_and_Albuquerque_2024/settings.py +0 -0
  20. {pysdm_examples-2.121 → pysdm_examples-2.122}/PySDM_examples/Abade_and_Albuquerque_2024/simulation.py +0 -0
  21. {pysdm_examples-2.121 → pysdm_examples-2.122}/PySDM_examples/Abdul_Razzak_Ghan_2000/__init__.py +0 -0
  22. {pysdm_examples-2.121 → pysdm_examples-2.122}/PySDM_examples/Abdul_Razzak_Ghan_2000/aerosol.py +0 -0
  23. {pysdm_examples-2.121 → pysdm_examples-2.122}/PySDM_examples/Abdul_Razzak_Ghan_2000/data_from_ARG2000_paper.py +0 -0
  24. {pysdm_examples-2.121 → pysdm_examples-2.122}/PySDM_examples/Abdul_Razzak_Ghan_2000/data_from_CloudMicrophysics_ARG.py +0 -0
  25. {pysdm_examples-2.121 → pysdm_examples-2.122}/PySDM_examples/Abdul_Razzak_Ghan_2000/run_ARG_parcel.py +0 -0
  26. {pysdm_examples-2.121 → pysdm_examples-2.122}/PySDM_examples/Alpert_and_Knopf_2016/__init__.py +0 -0
  27. {pysdm_examples-2.121 → pysdm_examples-2.122}/PySDM_examples/Alpert_and_Knopf_2016/simulation.py +0 -0
  28. {pysdm_examples-2.121 → pysdm_examples-2.122}/PySDM_examples/Alpert_and_Knopf_2016/table.py +0 -0
  29. {pysdm_examples-2.121 → pysdm_examples-2.122}/PySDM_examples/Alpert_and_Knopf_2016/table_1.py +0 -0
  30. {pysdm_examples-2.121 → pysdm_examples-2.122}/PySDM_examples/Alpert_and_Knopf_2016/table_2.py +0 -0
  31. {pysdm_examples-2.121 → pysdm_examples-2.122}/PySDM_examples/Arabas_and_Shima_2017/__init__.py +0 -0
  32. {pysdm_examples-2.121 → pysdm_examples-2.122}/PySDM_examples/Arabas_and_Shima_2017/example.py +0 -0
  33. {pysdm_examples-2.121 → pysdm_examples-2.122}/PySDM_examples/Arabas_and_Shima_2017/settings.py +0 -0
  34. {pysdm_examples-2.121 → pysdm_examples-2.122}/PySDM_examples/Arabas_and_Shima_2017/simulation.py +0 -0
  35. {pysdm_examples-2.121 → pysdm_examples-2.122}/PySDM_examples/Arabas_et_al_2015/__init__.py +0 -0
  36. {pysdm_examples-2.121 → pysdm_examples-2.122}/PySDM_examples/Arabas_et_al_2015/settings.py +0 -0
  37. {pysdm_examples-2.121 → pysdm_examples-2.122}/PySDM_examples/Arabas_et_al_2015/spin_up.py +0 -0
  38. {pysdm_examples-2.121 → pysdm_examples-2.122}/PySDM_examples/Arabas_et_al_2025/__init__.py +0 -0
  39. {pysdm_examples-2.121 → pysdm_examples-2.122}/PySDM_examples/Arabas_et_al_2025/commons.py +0 -0
  40. {pysdm_examples-2.121 → pysdm_examples-2.122}/PySDM_examples/Arabas_et_al_2025/curved_text.py +0 -0
  41. {pysdm_examples-2.121 → pysdm_examples-2.122}/PySDM_examples/Arabas_et_al_2025/frozen_fraction.py +0 -0
  42. {pysdm_examples-2.121 → pysdm_examples-2.122}/PySDM_examples/Arabas_et_al_2025/make_particulator.py +0 -0
  43. {pysdm_examples-2.121 → pysdm_examples-2.122}/PySDM_examples/Arabas_et_al_2025/plots.py +0 -0
  44. {pysdm_examples-2.121 → pysdm_examples-2.122}/PySDM_examples/Arabas_et_al_2025/run_simulation.py +0 -0
  45. {pysdm_examples-2.121 → pysdm_examples-2.122}/PySDM_examples/Bartman_2020_MasterThesis/__init__.py +0 -0
  46. {pysdm_examples-2.121 → pysdm_examples-2.122}/PySDM_examples/Bartman_2020_MasterThesis/fig_4_adaptive_sdm.py +0 -0
  47. {pysdm_examples-2.121 → pysdm_examples-2.122}/PySDM_examples/Bartman_2020_MasterThesis/fig_5_SCIPY_VS_ADAPTIVE.py +0 -0
  48. {pysdm_examples-2.121 → pysdm_examples-2.122}/PySDM_examples/Bartman_et_al_2021/__init__.py +0 -0
  49. {pysdm_examples-2.121 → pysdm_examples-2.122}/PySDM_examples/Bartman_et_al_2021/label.py +0 -0
  50. {pysdm_examples-2.121 → pysdm_examples-2.122}/PySDM_examples/Berry_1967/__init__.py +0 -0
  51. {pysdm_examples-2.121 → pysdm_examples-2.122}/PySDM_examples/Berry_1967/example.py +0 -0
  52. {pysdm_examples-2.121 → pysdm_examples-2.122}/PySDM_examples/Berry_1967/example_fig_6.py +0 -0
  53. {pysdm_examples-2.121 → pysdm_examples-2.122}/PySDM_examples/Berry_1967/settings.py +0 -0
  54. {pysdm_examples-2.121 → pysdm_examples-2.122}/PySDM_examples/Berry_1967/spectrum_plotter.py +0 -0
  55. {pysdm_examples-2.121 → pysdm_examples-2.122}/PySDM_examples/Bieli_et_al_2022/__init__.py +0 -0
  56. {pysdm_examples-2.121 → pysdm_examples-2.122}/PySDM_examples/Bieli_et_al_2022/settings.py +0 -0
  57. {pysdm_examples-2.121 → pysdm_examples-2.122}/PySDM_examples/Bieli_et_al_2022/simulation.py +0 -0
  58. {pysdm_examples-2.121 → pysdm_examples-2.122}/PySDM_examples/Bolin_1958/__init__.py +0 -0
  59. {pysdm_examples-2.121 → pysdm_examples-2.122}/PySDM_examples/Bolot_et_al_2013/__init__.py +0 -0
  60. {pysdm_examples-2.121 → pysdm_examples-2.122}/PySDM_examples/Bulenok_2023_MasterThesis/__init__.py +0 -0
  61. {pysdm_examples-2.121 → pysdm_examples-2.122}/PySDM_examples/Bulenok_2023_MasterThesis/performance_comparison_Srivastava_Setup.py +0 -0
  62. {pysdm_examples-2.121 → pysdm_examples-2.122}/PySDM_examples/Bulenok_2023_MasterThesis/setups.py +0 -0
  63. {pysdm_examples-2.121 → pysdm_examples-2.122}/PySDM_examples/Bulenok_2023_MasterThesis/utils.py +0 -0
  64. {pysdm_examples-2.121 → pysdm_examples-2.122}/PySDM_examples/Ervens_and_Feingold_2012/__init__.py +0 -0
  65. {pysdm_examples-2.121 → pysdm_examples-2.122}/PySDM_examples/Ervens_and_Feingold_2012/settings.py +0 -0
  66. {pysdm_examples-2.121 → pysdm_examples-2.122}/PySDM_examples/Fisher_1991/__init__.py +0 -0
  67. {pysdm_examples-2.121 → pysdm_examples-2.122}/PySDM_examples/Gedzelman_and_Arnold_1994/__init__.py +0 -0
  68. {pysdm_examples-2.121 → pysdm_examples-2.122}/PySDM_examples/Gonfiantini_1986/__init__.py +0 -0
  69. {pysdm_examples-2.121 → pysdm_examples-2.122}/PySDM_examples/Grabowski_and_Pawlowska_2023/__init__.py +0 -0
  70. {pysdm_examples-2.121 → pysdm_examples-2.122}/PySDM_examples/Grabowski_and_Pawlowska_2023/settings.py +0 -0
  71. {pysdm_examples-2.121 → pysdm_examples-2.122}/PySDM_examples/Grabowski_and_Pawlowska_2023/simulation.py +0 -0
  72. {pysdm_examples-2.121 → pysdm_examples-2.122}/PySDM_examples/Graf_et_al_2019/__init__.py +0 -0
  73. {pysdm_examples-2.121 → pysdm_examples-2.122}/PySDM_examples/Jaruga_and_Pawlowska_2018/__init__.py +0 -0
  74. {pysdm_examples-2.121 → pysdm_examples-2.122}/PySDM_examples/Jensen_and_Nugent_2017/__init__.py +0 -0
  75. {pysdm_examples-2.121 → pysdm_examples-2.122}/PySDM_examples/Jensen_and_Nugent_2017/plotting.py +0 -0
  76. {pysdm_examples-2.121 → pysdm_examples-2.122}/PySDM_examples/Jensen_and_Nugent_2017/settings.py +0 -0
  77. {pysdm_examples-2.121 → pysdm_examples-2.122}/PySDM_examples/Jensen_and_Nugent_2017/simulation.py +0 -0
  78. {pysdm_examples-2.121 → pysdm_examples-2.122}/PySDM_examples/Jensen_and_Nugent_2017/table_3.py +0 -0
  79. {pysdm_examples-2.121 → pysdm_examples-2.122}/PySDM_examples/Jouzel_and_Merlivat_1984/__init__.py +0 -0
  80. {pysdm_examples-2.121 → pysdm_examples-2.122}/PySDM_examples/Jouzel_and_Merlivat_1984/thermodynamic_profiles.py +0 -0
  81. {pysdm_examples-2.121 → pysdm_examples-2.122}/PySDM_examples/Kinzer_And_Gunn_1951/__init__.py +0 -0
  82. {pysdm_examples-2.121 → pysdm_examples-2.122}/PySDM_examples/Kinzer_And_Gunn_1951/table_1_and_2.py +0 -0
  83. {pysdm_examples-2.121 → pysdm_examples-2.122}/PySDM_examples/Kreidenweis_et_al_2003/__init__.py +0 -0
  84. {pysdm_examples-2.121 → pysdm_examples-2.122}/PySDM_examples/Kreidenweis_et_al_2003/settings.py +0 -0
  85. {pysdm_examples-2.121 → pysdm_examples-2.122}/PySDM_examples/Kreidenweis_et_al_2003/simulation.py +0 -0
  86. {pysdm_examples-2.121 → pysdm_examples-2.122}/PySDM_examples/Lamb_et_al_2017/__init__.py +0 -0
  87. {pysdm_examples-2.121 → pysdm_examples-2.122}/PySDM_examples/Lowe_et_al_2019/__init__.py +0 -0
  88. {pysdm_examples-2.121 → pysdm_examples-2.122}/PySDM_examples/Lowe_et_al_2019/aerosol.py +0 -0
  89. {pysdm_examples-2.121 → pysdm_examples-2.122}/PySDM_examples/Lowe_et_al_2019/aerosol_code.py +0 -0
  90. {pysdm_examples-2.121 → pysdm_examples-2.122}/PySDM_examples/Lowe_et_al_2019/constants_def.py +0 -0
  91. {pysdm_examples-2.121 → pysdm_examples-2.122}/PySDM_examples/Lowe_et_al_2019/plot_helper.py +0 -0
  92. {pysdm_examples-2.121 → pysdm_examples-2.122}/PySDM_examples/Lowe_et_al_2019/settings.py +0 -0
  93. {pysdm_examples-2.121 → pysdm_examples-2.122}/PySDM_examples/Lowe_et_al_2019/simulation.py +0 -0
  94. {pysdm_examples-2.121 → pysdm_examples-2.122}/PySDM_examples/Merlivat_and_Nief_1967/__init__.py +0 -0
  95. {pysdm_examples-2.121 → pysdm_examples-2.122}/PySDM_examples/Miyake_et_al_1968/__init__.py +0 -0
  96. {pysdm_examples-2.121 → pysdm_examples-2.122}/PySDM_examples/Morrison_and_Grabowski_2007/common.py +0 -0
  97. {pysdm_examples-2.121 → pysdm_examples-2.122}/PySDM_examples/Morrison_and_Grabowski_2007/strato_cumulus.py +0 -0
  98. {pysdm_examples-2.121 → pysdm_examples-2.122}/PySDM_examples/Niedermeier_et_al_2014/__init__.py +0 -0
  99. {pysdm_examples-2.121 → pysdm_examples-2.122}/PySDM_examples/Niedermeier_et_al_2014/settings.py +0 -0
  100. {pysdm_examples-2.121 → pysdm_examples-2.122}/PySDM_examples/Niedermeier_et_al_2014/simulation.py +0 -0
  101. {pysdm_examples-2.121 → pysdm_examples-2.122}/PySDM_examples/Pierchala_et_al_2022/__init__.py +0 -0
  102. {pysdm_examples-2.121 → pysdm_examples-2.122}/PySDM_examples/Pierchala_et_al_2022/commons.py +0 -0
  103. {pysdm_examples-2.121 → pysdm_examples-2.122}/PySDM_examples/Pruppacher_and_Rasmussen_1979/__init__.py +0 -0
  104. {pysdm_examples-2.121 → pysdm_examples-2.122}/PySDM_examples/Pyrcel/__init__.py +0 -0
  105. {pysdm_examples-2.121 → pysdm_examples-2.122}/PySDM_examples/Pyrcel/profile_plotter.py +0 -0
  106. {pysdm_examples-2.121 → pysdm_examples-2.122}/PySDM_examples/Pyrcel/settings.py +0 -0
  107. {pysdm_examples-2.121 → pysdm_examples-2.122}/PySDM_examples/Pyrcel/simulation.py +0 -0
  108. {pysdm_examples-2.121 → pysdm_examples-2.122}/PySDM_examples/Rozanski_and_Sonntag_1982/__init__.py +0 -0
  109. {pysdm_examples-2.121 → pysdm_examples-2.122}/PySDM_examples/Rozanski_and_Sonntag_1982/multibox.py +0 -0
  110. {pysdm_examples-2.121 → pysdm_examples-2.122}/PySDM_examples/Shima_et_al_2009/__init__.py +0 -0
  111. {pysdm_examples-2.121 → pysdm_examples-2.122}/PySDM_examples/Shima_et_al_2009/error_measure.py +0 -0
  112. {pysdm_examples-2.121 → pysdm_examples-2.122}/PySDM_examples/Shima_et_al_2009/example.py +0 -0
  113. {pysdm_examples-2.121 → pysdm_examples-2.122}/PySDM_examples/Shima_et_al_2009/example_timing.py +0 -0
  114. {pysdm_examples-2.121 → pysdm_examples-2.122}/PySDM_examples/Shima_et_al_2009/settings.py +0 -0
  115. {pysdm_examples-2.121 → pysdm_examples-2.122}/PySDM_examples/Shima_et_al_2009/spectrum_plotter.py +0 -0
  116. {pysdm_examples-2.121 → pysdm_examples-2.122}/PySDM_examples/Shima_et_al_2009/tutorial_example.py +0 -0
  117. {pysdm_examples-2.121 → pysdm_examples-2.122}/PySDM_examples/Shima_et_al_2009/tutorial_plotter.py +0 -0
  118. {pysdm_examples-2.121 → pysdm_examples-2.122}/PySDM_examples/Shima_et_al_2009/tutorial_settings.py +0 -0
  119. {pysdm_examples-2.121 → pysdm_examples-2.122}/PySDM_examples/Shipway_and_Hill_2012/__init__.py +0 -0
  120. {pysdm_examples-2.121 → pysdm_examples-2.122}/PySDM_examples/Shipway_and_Hill_2012/mpdata_1d.py +0 -0
  121. {pysdm_examples-2.121 → pysdm_examples-2.122}/PySDM_examples/Shipway_and_Hill_2012/plot.py +0 -0
  122. {pysdm_examples-2.121 → pysdm_examples-2.122}/PySDM_examples/Shipway_and_Hill_2012/settings.py +0 -0
  123. {pysdm_examples-2.121 → pysdm_examples-2.122}/PySDM_examples/Shipway_and_Hill_2012/simulation.py +0 -0
  124. {pysdm_examples-2.121 → pysdm_examples-2.122}/PySDM_examples/Singer_Ward/__init__.py +0 -0
  125. {pysdm_examples-2.121 → pysdm_examples-2.122}/PySDM_examples/Singer_Ward/aerosol.py +0 -0
  126. {pysdm_examples-2.121 → pysdm_examples-2.122}/PySDM_examples/Srivastava_1982/__init__.py +0 -0
  127. {pysdm_examples-2.121 → pysdm_examples-2.122}/PySDM_examples/Srivastava_1982/equations.py +0 -0
  128. {pysdm_examples-2.121 → pysdm_examples-2.122}/PySDM_examples/Srivastava_1982/example.py +0 -0
  129. {pysdm_examples-2.121 → pysdm_examples-2.122}/PySDM_examples/Srivastava_1982/settings.py +0 -0
  130. {pysdm_examples-2.121 → pysdm_examples-2.122}/PySDM_examples/Srivastava_1982/simulation.py +0 -0
  131. {pysdm_examples-2.121 → pysdm_examples-2.122}/PySDM_examples/Stewart_1975/__init__.py +0 -0
  132. {pysdm_examples-2.121 → pysdm_examples-2.122}/PySDM_examples/Toon_et_al_1980/__init__.py +0 -0
  133. {pysdm_examples-2.121 → pysdm_examples-2.122}/PySDM_examples/Van_Hook_1968/__init__.py +0 -0
  134. {pysdm_examples-2.121 → pysdm_examples-2.122}/PySDM_examples/Yang_et_al_2018/__init__.py +0 -0
  135. {pysdm_examples-2.121 → pysdm_examples-2.122}/PySDM_examples/Yang_et_al_2018/settings.py +0 -0
  136. {pysdm_examples-2.121 → pysdm_examples-2.122}/PySDM_examples/Yang_et_al_2018/simulation.py +0 -0
  137. {pysdm_examples-2.121 → pysdm_examples-2.122}/PySDM_examples/Zaba_et_al_2025/__init__.py +0 -0
  138. {pysdm_examples-2.121 → pysdm_examples-2.122}/PySDM_examples/_HOWTOs/__init__.py +0 -0
  139. {pysdm_examples-2.121 → pysdm_examples-2.122}/PySDM_examples/__init__.py +0 -0
  140. {pysdm_examples-2.121 → pysdm_examples-2.122}/PySDM_examples/deJong_Azimi/__init__.py +0 -0
  141. {pysdm_examples-2.121 → pysdm_examples-2.122}/PySDM_examples/deJong_Azimi/cloudy_data.py +0 -0
  142. {pysdm_examples-2.121 → pysdm_examples-2.122}/PySDM_examples/deJong_Azimi/cloudy_data_0d.py +0 -0
  143. {pysdm_examples-2.121 → pysdm_examples-2.122}/PySDM_examples/deJong_Azimi/settings1D.py +0 -0
  144. {pysdm_examples-2.121 → pysdm_examples-2.122}/PySDM_examples/deJong_Azimi/simulation_0D.py +0 -0
  145. {pysdm_examples-2.121 → pysdm_examples-2.122}/PySDM_examples/deJong_Mackay_et_al_2023/__init__.py +0 -0
  146. {pysdm_examples-2.121 → pysdm_examples-2.122}/PySDM_examples/deJong_Mackay_et_al_2023/plot_rates.py +0 -0
  147. {pysdm_examples-2.121 → pysdm_examples-2.122}/PySDM_examples/deJong_Mackay_et_al_2023/settings1D.py +0 -0
  148. {pysdm_examples-2.121 → pysdm_examples-2.122}/PySDM_examples/deJong_Mackay_et_al_2023/settings_0D.py +0 -0
  149. {pysdm_examples-2.121 → pysdm_examples-2.122}/PySDM_examples/deJong_Mackay_et_al_2023/simulation1D.py +0 -0
  150. {pysdm_examples-2.121 → pysdm_examples-2.122}/PySDM_examples/deJong_Mackay_et_al_2023/simulation_0D.py +0 -0
  151. {pysdm_examples-2.121 → pysdm_examples-2.122}/PySDM_examples/deJong_Mackay_et_al_2023/simulation_ss.py +0 -0
  152. {pysdm_examples-2.121 → pysdm_examples-2.122}/PySDM_examples/seeding/__init__.py +0 -0
  153. {pysdm_examples-2.121 → pysdm_examples-2.122}/PySDM_examples/seeding/settings.py +0 -0
  154. {pysdm_examples-2.121 → pysdm_examples-2.122}/PySDM_examples/seeding/simulation.py +0 -0
  155. {pysdm_examples-2.121 → pysdm_examples-2.122}/PySDM_examples/utils/__init__.py +0 -0
  156. {pysdm_examples-2.121 → pysdm_examples-2.122}/PySDM_examples/utils/basic_simulation.py +0 -0
  157. {pysdm_examples-2.121 → pysdm_examples-2.122}/PySDM_examples/utils/dummy_controller.py +0 -0
  158. {pysdm_examples-2.121/PySDM_examples/Szumowski_et_al_1998 → pysdm_examples-2.122/PySDM_examples/utils/kinematic_2d}/fields.py +0 -0
  159. {pysdm_examples-2.121/PySDM_examples/Szumowski_et_al_1998 → pysdm_examples-2.122/PySDM_examples/utils/kinematic_2d}/gui_controller.py +0 -0
  160. {pysdm_examples-2.121/PySDM_examples/Szumowski_et_al_1998 → pysdm_examples-2.122/PySDM_examples/utils/kinematic_2d}/gui_settings.py +0 -0
  161. {pysdm_examples-2.121/PySDM_examples/Szumowski_et_al_1998 → pysdm_examples-2.122/PySDM_examples/utils/kinematic_2d}/make_default_product_collection.py +0 -0
  162. {pysdm_examples-2.121/PySDM_examples/Szumowski_et_al_1998 → pysdm_examples-2.122/PySDM_examples/utils/kinematic_2d}/plots.py +0 -0
  163. {pysdm_examples-2.121/PySDM_examples/Szumowski_et_al_1998 → pysdm_examples-2.122/PySDM_examples/utils/kinematic_2d}/storage.py +0 -0
  164. {pysdm_examples-2.121 → pysdm_examples-2.122}/PySDM_examples/utils/progbar_controller.py +0 -0
  165. {pysdm_examples-2.121 → pysdm_examples-2.122}/PySDM_examples/utils/pvanim.py +0 -0
  166. {pysdm_examples-2.121 → pysdm_examples-2.122}/PySDM_examples/utils/read_vtk_1d.py +0 -0
  167. {pysdm_examples-2.121 → pysdm_examples-2.122}/PySDM_examples/utils/widgets/__init__.py +0 -0
  168. {pysdm_examples-2.121 → pysdm_examples-2.122}/PySDM_examples/utils/widgets/freezer.py +0 -0
  169. {pysdm_examples-2.121 → pysdm_examples-2.122}/PySDM_examples/utils/widgets/progbar_updater.py +0 -0
  170. {pysdm_examples-2.121 → pysdm_examples-2.122}/README.md +0 -0
  171. {pysdm_examples-2.121 → pysdm_examples-2.122}/pysdm_examples.egg-info/dependency_links.txt +0 -0
  172. {pysdm_examples-2.121 → pysdm_examples-2.122}/pysdm_examples.egg-info/requires.txt +0 -0
  173. {pysdm_examples-2.121 → pysdm_examples-2.122}/pysdm_examples.egg-info/top_level.txt +0 -0
  174. {pysdm_examples-2.121 → pysdm_examples-2.122}/setup.cfg +0 -0
  175. {pysdm_examples-2.121 → pysdm_examples-2.122}/setup.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: pysdm-examples
3
- Version: 2.121
3
+ Version: 2.122
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
@@ -75,12 +75,12 @@ The 2D prescribed-flow framework used here can be traced back to the work of
75
75
  and dry-air potential temperature.
76
76
  In PySDM-examples, the Eulerian advection is handled using the <a href="https://doi.org/10.21105/joss.03896">PyMPDATA</a> Numba-based
77
77
  implementation of the <a href="https://doi.org/10.1002/fld.1071">MPDATA numerical scheme of Smolarkiewicz (e.g., 2006)</a>.
78
- An animation depicting PySDM simulation capturing <mark>aerosol collisional processing</mark> by warm rain is shown below:
79
-
80
- <video controls style="width:100%">
81
- <source src="https://github.com/open-atmos/PySDM/releases/download/tip/docs_intro_animation_ubuntu-24.04.mp4" type="video/mp4">
82
- Your browser does not support the video tag.
83
- </video>
78
+ An animation depicting PySDM simulation capturing <mark>aerosol collisional processing</mark> by warm rain is shown below
79
+ (<a href="https://github.com/open-atmos/PySDM/blob/main/examples/PySDM_examples/_HOWTOs/paraview_hello_world.ipynb">see
80
+ the Paraview hello-world HOWTO Jupyter notbook for code generating the simulation and visualisation</a>):
81
+ <center>
82
+ <img src="https://github.com/open-atmos/PySDM/releases/download/tip/docs_intro_animation_ubuntu-24.04.gif" style="width:80%" />
83
+ </center>
84
84
 
85
85
  Example notebooks:
86
86
  - <a href="https://open-atmos.github.io/PySDM/PySDM_examples/Arabas_et_al_2015.html">Arabas_et_al_2015</a>
@@ -1,6 +1,6 @@
1
1
  from open_atmos_jupyter_utils import TemporaryFile
2
2
  from PySDM_examples.Arabas_et_al_2015 import Settings, SpinUp
3
- from PySDM_examples.Szumowski_et_al_1998 import Simulation, Storage
3
+ from PySDM_examples.utils.kinematic_2d import Simulation, Storage
4
4
  from PySDM_examples.utils import DummyController
5
5
 
6
6
  from PySDM import Formulae
@@ -2,7 +2,7 @@ import importlib
2
2
 
3
3
  from matplotlib import pyplot as plt
4
4
  from PySDM_examples.Arabas_et_al_2015 import Settings
5
- from PySDM_examples.Szumowski_et_al_1998 import Simulation, Storage
5
+ from PySDM_examples.utils.kinematic_2d import Simulation, Storage
6
6
 
7
7
  import PySDM.backends.impl_numba.conf
8
8
  from PySDM import Formulae
@@ -3,10 +3,6 @@
3
3
  prescribed-flow simulation settings data from
4
4
  [Morrison & Grabowski 2007 (JAS)](https://doi.org/10.1175/JAS3980)
5
5
 
6
- fig_2.ipynb:
7
- .. include:: ./fig_2.ipynb.badges.md
8
-
9
- fig_3.ipynb:
10
- .. include:: ./fig_3.ipynb.badges.md
6
+ fig_1.ipynb:
7
+ .. include:: ./fig_1.ipynb.badges.md
11
8
  """
12
- from .cumulus import Cumulus
@@ -0,0 +1,19 @@
1
+ # pylint: disable=invalid-name
2
+ """
3
+ The 2D prescribed-flow framework used here can be traced back to the work
4
+ of [Kessler 1969 (section 3C)](https://doi.org/10.1007/978-1-935704-36-2_1), can be found also in
5
+ [Szumowski et al. 1998 (Atmos. Res.)](https://doi.org/10.1016/S0169-8095(97)00082-3).
6
+
7
+ The setup mimics a stratiform cloud deck and features periodic horizontal boundary condition
8
+ and vanishing flow at vertical boundaries.
9
+ It was introduced in [Morrison & Grabowski 2007](https://doi.org/10.1175/JAS3980) and later adopted
10
+ for particle-based simulations in [Arabas et al. 2015](https://doi.org/10.5194/gmd-8-1677-2015)
11
+ It uses a non-devergent single-eddy flow field resulting in an updraft-downdraft pair in the domain.
12
+ The flow field advects two scalar fields in an Eulerian way: water vapour mixing ratio
13
+ and dry-air potential temperature.
14
+ """
15
+
16
+ from .gui_settings import GUISettings
17
+ from .mpdata_2d import MPDATA_2D
18
+ from .simulation import Simulation
19
+ from .storage import Storage
@@ -2,8 +2,10 @@ import os
2
2
  import sys
3
3
 
4
4
  from open_atmos_jupyter_utils import TemporaryFile
5
- from PySDM_examples.Szumowski_et_al_1998.gui_controller import GUIController
6
- from PySDM_examples.Szumowski_et_al_1998.gui_viewer import GUIViewer
5
+ from PySDM_examples.utils.kinematic_2d.gui_controller import (
6
+ GUIController,
7
+ )
8
+ from PySDM_examples.utils.kinematic_2d.gui_viewer import GUIViewer
7
9
  from PySDM_examples.utils.widgets import HTML, Tab, VBox, display
8
10
 
9
11
  from PySDM.exporters import NetCDFExporter
@@ -3,7 +3,7 @@ import warnings
3
3
  import numpy as np
4
4
  from matplotlib import pyplot, rcParams
5
5
  from open_atmos_jupyter_utils import save_and_make_link
6
- from PySDM_examples.Szumowski_et_al_1998.plots import (
6
+ from PySDM_examples.utils.kinematic_2d.plots import (
7
7
  _ImagePlot,
8
8
  _SpectrumPlot,
9
9
  _TemperaturePlot,
@@ -5,7 +5,7 @@ from threading import Thread
5
5
  import numpy as np
6
6
  from PyMPDATA import Options, ScalarField, Solver, Stepper, VectorField
7
7
  from PyMPDATA.boundary_conditions import Periodic
8
- from PySDM_examples.Szumowski_et_al_1998.fields import (
8
+ from PySDM_examples.utils.kinematic_2d.fields import (
9
9
  nondivergent_vector_field_2d,
10
10
  x_vec_coord,
11
11
  z_vec_coord,
@@ -1,8 +1,8 @@
1
1
  import numpy as np
2
- from PySDM_examples.Szumowski_et_al_1998.make_default_product_collection import (
2
+ from PySDM_examples.utils.kinematic_2d.make_default_product_collection import (
3
3
  make_default_product_collection,
4
4
  )
5
- from PySDM_examples.Szumowski_et_al_1998.mpdata_2d import MPDATA_2D
5
+ from PySDM_examples.utils.kinematic_2d.mpdata_2d import MPDATA_2D
6
6
  from PySDM_examples.utils import DummyController
7
7
 
8
8
  from PySDM.backends import CPU
@@ -39,12 +39,12 @@ The 2D prescribed-flow framework used here can be traced back to the work of
39
39
  and dry-air potential temperature.
40
40
  In PySDM-examples, the Eulerian advection is handled using the <a href="https://doi.org/10.21105/joss.03896">PyMPDATA</a> Numba-based
41
41
  implementation of the <a href="https://doi.org/10.1002/fld.1071">MPDATA numerical scheme of Smolarkiewicz (e.g., 2006)</a>.
42
- An animation depicting PySDM simulation capturing <mark>aerosol collisional processing</mark> by warm rain is shown below:
43
-
44
- <video controls style="width:100%">
45
- <source src="https://github.com/open-atmos/PySDM/releases/download/tip/docs_intro_animation_ubuntu-24.04.mp4" type="video/mp4">
46
- Your browser does not support the video tag.
47
- </video>
42
+ An animation depicting PySDM simulation capturing <mark>aerosol collisional processing</mark> by warm rain is shown below
43
+ (<a href="https://github.com/open-atmos/PySDM/blob/main/examples/PySDM_examples/_HOWTOs/paraview_hello_world.ipynb">see
44
+ the Paraview hello-world HOWTO Jupyter notbook for code generating the simulation and visualisation</a>):
45
+ <center>
46
+ <img src="https://github.com/open-atmos/PySDM/releases/download/tip/docs_intro_animation_ubuntu-24.04.gif" style="width:80%" />
47
+ </center>
48
48
 
49
49
  Example notebooks:
50
50
  - `PySDM_examples.Arabas_et_al_2015`
@@ -4,4 +4,4 @@ local_scheme = "no-local-version"
4
4
  version_scheme = "post-release"
5
5
 
6
6
  [build-system]
7
- requires = ['setuptools==80.7.1', 'setuptools-scm==8.3.1']
7
+ requires = ['setuptools==80.8.0', 'setuptools-scm==8.3.1']
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: pysdm-examples
3
- Version: 2.121
3
+ Version: 2.122
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
@@ -75,12 +75,12 @@ The 2D prescribed-flow framework used here can be traced back to the work of
75
75
  and dry-air potential temperature.
76
76
  In PySDM-examples, the Eulerian advection is handled using the <a href="https://doi.org/10.21105/joss.03896">PyMPDATA</a> Numba-based
77
77
  implementation of the <a href="https://doi.org/10.1002/fld.1071">MPDATA numerical scheme of Smolarkiewicz (e.g., 2006)</a>.
78
- An animation depicting PySDM simulation capturing <mark>aerosol collisional processing</mark> by warm rain is shown below:
79
-
80
- <video controls style="width:100%">
81
- <source src="https://github.com/open-atmos/PySDM/releases/download/tip/docs_intro_animation_ubuntu-24.04.mp4" type="video/mp4">
82
- Your browser does not support the video tag.
83
- </video>
78
+ An animation depicting PySDM simulation capturing <mark>aerosol collisional processing</mark> by warm rain is shown below
79
+ (<a href="https://github.com/open-atmos/PySDM/blob/main/examples/PySDM_examples/_HOWTOs/paraview_hello_world.ipynb">see
80
+ the Paraview hello-world HOWTO Jupyter notbook for code generating the simulation and visualisation</a>):
81
+ <center>
82
+ <img src="https://github.com/open-atmos/PySDM/releases/download/tip/docs_intro_animation_ubuntu-24.04.gif" style="width:80%" />
83
+ </center>
84
84
 
85
85
  Example notebooks:
86
86
  - <a href="https://open-atmos.github.io/PySDM/PySDM_examples/Arabas_et_al_2015.html">Arabas_et_al_2015</a>
@@ -85,7 +85,6 @@ PySDM_examples/Merlivat_and_Nief_1967/__init__.py
85
85
  PySDM_examples/Miyake_et_al_1968/__init__.py
86
86
  PySDM_examples/Morrison_and_Grabowski_2007/__init__.py
87
87
  PySDM_examples/Morrison_and_Grabowski_2007/common.py
88
- PySDM_examples/Morrison_and_Grabowski_2007/cumulus.py
89
88
  PySDM_examples/Morrison_and_Grabowski_2007/strato_cumulus.py
90
89
  PySDM_examples/Niedermeier_et_al_2014/__init__.py
91
90
  PySDM_examples/Niedermeier_et_al_2014/settings.py
@@ -121,18 +120,6 @@ PySDM_examples/Srivastava_1982/example.py
121
120
  PySDM_examples/Srivastava_1982/settings.py
122
121
  PySDM_examples/Srivastava_1982/simulation.py
123
122
  PySDM_examples/Stewart_1975/__init__.py
124
- PySDM_examples/Szumowski_et_al_1998/__init__.py
125
- PySDM_examples/Szumowski_et_al_1998/fields.py
126
- PySDM_examples/Szumowski_et_al_1998/gui.py
127
- PySDM_examples/Szumowski_et_al_1998/gui_controller.py
128
- PySDM_examples/Szumowski_et_al_1998/gui_settings.py
129
- PySDM_examples/Szumowski_et_al_1998/gui_viewer.py
130
- PySDM_examples/Szumowski_et_al_1998/make_default_product_collection.py
131
- PySDM_examples/Szumowski_et_al_1998/mpdata_2d.py
132
- PySDM_examples/Szumowski_et_al_1998/plots.py
133
- PySDM_examples/Szumowski_et_al_1998/simulation.py
134
- PySDM_examples/Szumowski_et_al_1998/sounding.py
135
- PySDM_examples/Szumowski_et_al_1998/storage.py
136
123
  PySDM_examples/Toon_et_al_1980/__init__.py
137
124
  PySDM_examples/Van_Hook_1968/__init__.py
138
125
  PySDM_examples/Yang_et_al_2018/__init__.py
@@ -161,6 +148,17 @@ PySDM_examples/utils/dummy_controller.py
161
148
  PySDM_examples/utils/progbar_controller.py
162
149
  PySDM_examples/utils/pvanim.py
163
150
  PySDM_examples/utils/read_vtk_1d.py
151
+ PySDM_examples/utils/kinematic_2d/__init__.py
152
+ PySDM_examples/utils/kinematic_2d/fields.py
153
+ PySDM_examples/utils/kinematic_2d/gui.py
154
+ PySDM_examples/utils/kinematic_2d/gui_controller.py
155
+ PySDM_examples/utils/kinematic_2d/gui_settings.py
156
+ PySDM_examples/utils/kinematic_2d/gui_viewer.py
157
+ PySDM_examples/utils/kinematic_2d/make_default_product_collection.py
158
+ PySDM_examples/utils/kinematic_2d/mpdata_2d.py
159
+ PySDM_examples/utils/kinematic_2d/plots.py
160
+ PySDM_examples/utils/kinematic_2d/simulation.py
161
+ PySDM_examples/utils/kinematic_2d/storage.py
164
162
  PySDM_examples/utils/widgets/__init__.py
165
163
  PySDM_examples/utils/widgets/freezer.py
166
164
  PySDM_examples/utils/widgets/progbar_updater.py
@@ -1,136 +0,0 @@
1
- import numpy as np
2
- from PySDM_examples.Morrison_and_Grabowski_2007.common import Common
3
- from PySDM_examples.Szumowski_et_al_1998 import sounding
4
- from scipy.integrate import solve_ivp
5
- from scipy.interpolate import interp1d
6
-
7
- from PySDM.physics import si
8
-
9
-
10
- class Cumulus(Common):
11
- def __init__(self, formulae):
12
- super().__init__(formulae)
13
- self.size = (9 * si.km, 2.7 * si.km)
14
- self.hx = 1.8 * si.km
15
- self.x0 = 3.6 * si.km
16
- self.xc = self.size[0] / 2
17
- self.dz = 50 * si.m
18
- self.grid = tuple(s / self.dz for s in self.size)
19
- for g in self.grid:
20
- assert int(g) == g
21
- self.grid = tuple(int(g) for g in self.grid)
22
- self.dt = 1 * si.s
23
- self.simulation_time = 60 * si.min
24
-
25
- self.__init_profiles()
26
-
27
- def __init_profiles(self):
28
- z_of_p = self.__z_of_p()
29
- T_of_z = interp1d(z_of_p, sounding.temperature)
30
- p_of_z = interp1d(z_of_p, sounding.pressure)
31
- q_of_z = interp1d(z_of_p, sounding.mixing_ratio)
32
-
33
- z_points_scalar = np.linspace(
34
- self.dz / 2, self.size[-1] - self.dz / 2, num=self.grid[-1], endpoint=True
35
- )
36
- z_points_both = np.linspace(
37
- 0, self.size[-1], num=2 * self.grid[-1] + 1, endpoint=True
38
- )
39
- rhod_of_z = self.__rhod_of_z(T_of_z, p_of_z, q_of_z, z_of_p, z_points_both)
40
- self.rhod = interp1d(z_points_both / self.size[-1], rhod_of_z)
41
- self.initial_water_vapour_mixing_ratio = q_of_z(z_points_scalar)
42
- self.th_std0 = self.formulae.trivia.th_std(
43
- p_of_z(z_points_scalar), T_of_z(z_points_scalar)
44
- )
45
-
46
- def rhod_of_zZ(self, zZ):
47
- return self.rhod(zZ)
48
-
49
- def __rhod_of_z(self, T_of_z, p_of_z, q_of_z, z_of_p, z_points):
50
- def drhod_dz(z, _):
51
- lv = self.formulae.latent_heat_vapourisation.lv(T_of_z(z))
52
- return self.formulae.hydrostatics.drho_dz(
53
- p_of_z(z), T_of_z(z), q_of_z(z), lv
54
- )
55
-
56
- theta_std0 = self.formulae.trivia.th_std(
57
- sounding.pressure[0], sounding.temperature[0]
58
- )
59
- rhod0 = self.formulae.state_variable_triplet.rho_d(
60
- sounding.pressure[0], sounding.mixing_ratio[0], theta_std0
61
- )
62
- rhod_solution = solve_ivp(
63
- fun=drhod_dz,
64
- t_span=(0, np.amax(z_of_p)),
65
- y0=np.asarray((rhod0,)),
66
- t_eval=z_points,
67
- )
68
- assert rhod_solution.success
69
- return rhod_solution.y[0]
70
-
71
- def __z_of_p(self):
72
- T_virt_of_p = interp1d(
73
- sounding.pressure,
74
- sounding.temperature
75
- * (1 + sounding.mixing_ratio / self.formulae.constants.eps)
76
- / (1 + sounding.mixing_ratio),
77
- )
78
-
79
- def dz_dp(p, _):
80
- return (
81
- -self.formulae.constants.Rd
82
- * T_virt_of_p(p)
83
- / self.formulae.constants.g_std
84
- / p
85
- )
86
-
87
- z_of_p = solve_ivp(
88
- fun=dz_dp,
89
- t_span=(max(sounding.pressure), min(sounding.pressure)),
90
- y0=np.asarray((0,)),
91
- t_eval=sounding.pressure,
92
- )
93
- assert z_of_p.success
94
- return z_of_p.y[0]
95
-
96
- @staticmethod
97
- def z0(z):
98
- return np.where(z <= 1.7 * si.km, 0, 0.7 * si.km)
99
-
100
- @staticmethod
101
- def hz(z):
102
- return np.where(z <= 1.7 * si.km, 3.4 * si.km, 2.0 * si.km)
103
-
104
- def alpha(self, x):
105
- return np.where(abs(x - self.xc) <= 0.9 * si.km, 1, 0)
106
-
107
- @staticmethod
108
- def beta(x):
109
- return np.where(x <= 5.4 * si.km, 1, -1)
110
-
111
- @staticmethod
112
- def A1(t):
113
- if t <= 900 * si.s:
114
- return 5.73e2
115
- if t <= 1500 * si.s:
116
- return 5.73e2 + 2.02e3 * (1 + np.cos(np.pi * ((t - 900) / 600 + 1)))
117
- return 1.15e3 + 1.72e3 * (1 + np.cos(np.pi * ((min(t, 2400) - 1500) / 900 + 1)))
118
-
119
- @staticmethod
120
- def A2(t):
121
- if t <= 300 * si.s:
122
- return 0
123
- if t <= 1500 * si.s:
124
- return 6e2 * (1 + np.cos(np.pi * ((t - 300) / 600 - 1)))
125
- return 5e2 * (1 + np.cos(np.pi * ((min(2400, t) - 1500) / 900 - 1)))
126
-
127
- # see Appendix (page 2859)
128
- def stream_function(self, xX, zZ, t):
129
- x = xX * self.size[0]
130
- z = zZ * self.size[-1]
131
- return (
132
- -self.A1(t)
133
- * np.cos(self.alpha(x) * np.pi * (x - self.x0) / self.hx)
134
- * np.sin(self.beta(x) * np.pi * (z - self.z0(z)) / self.hz(z))
135
- + self.A2(t) / 2 * zZ**2
136
- )
@@ -1,9 +0,0 @@
1
- # pylint: disable=invalid-name
2
- """
3
- 2D GUI-equipped prescribed-flow warm-rain case based on
4
- [Szumowski et al. 1998 (Atmos. Res.)](https://doi.org/10.1016/S0169-8095(97)00082-3)
5
- """
6
- from .gui_settings import GUISettings
7
- from .mpdata_2d import MPDATA_2D
8
- from .simulation import Simulation
9
- from .storage import Storage
@@ -1,93 +0,0 @@
1
- import numpy as np
2
-
3
- from PySDM.physics import constants as const
4
- from PySDM.physics import si
5
-
6
- pressure = (
7
- np.array(
8
- (
9
- 1014,
10
- 1010,
11
- 1000,
12
- 990,
13
- 975,
14
- 960,
15
- 950,
16
- 925,
17
- 900,
18
- 875,
19
- 850,
20
- 825,
21
- 800,
22
- 790,
23
- 775,
24
- 765,
25
- 755,
26
- 745,
27
- 730,
28
- 715,
29
- 700,
30
- )
31
- )
32
- * si.hPa
33
- )
34
-
35
- temperature = (
36
- np.array(
37
- (
38
- 25.2,
39
- 24.8,
40
- 23.6,
41
- 22.5,
42
- 21.8,
43
- 20.5,
44
- 19.9,
45
- 18.2,
46
- 16.8,
47
- 14.8,
48
- 13.3,
49
- 11.9,
50
- 11.0,
51
- 11.3,
52
- 10.9,
53
- 11.2,
54
- 10.2,
55
- 11.0,
56
- 11.2,
57
- 10.0,
58
- 8.8,
59
- )
60
- )
61
- * si.kelvin
62
- + const.T0
63
- )
64
-
65
- mixing_ratio = (
66
- np.array(
67
- (
68
- 14.5,
69
- 14.5,
70
- 14.5,
71
- 14.0,
72
- 13.7,
73
- 13.9,
74
- 13.9,
75
- 10.3,
76
- 10.3,
77
- 10.0,
78
- 9.9,
79
- 8.9,
80
- 7.9,
81
- 4.0,
82
- 2.3,
83
- 1.2,
84
- 1.2,
85
- 0.9,
86
- 0.6,
87
- 2.0,
88
- 1.6,
89
- )
90
- )
91
- * si.g
92
- / si.kg
93
- )
File without changes
File without changes
File without changes