PySDM-examples 2.74__tar.gz → 2.77__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 (161) hide show
  1. {PySDM-examples-2.74 → PySDM-examples-2.77}/PKG-INFO +1 -1
  2. {PySDM-examples-2.74 → PySDM-examples-2.77}/PySDM_examples/Abdul_Razzak_Ghan_2000/run_ARG_parcel.py +1 -1
  3. {PySDM-examples-2.74 → PySDM-examples-2.77}/PySDM_examples/Alpert_and_Knopf_2016/simulation.py +2 -5
  4. {PySDM-examples-2.74 → PySDM-examples-2.77}/PySDM_examples/Arabas_and_Shima_2017/settings.py +1 -1
  5. {PySDM-examples-2.74 → PySDM-examples-2.77}/PySDM_examples/Arabas_et_al_2023/run_simulation.py +1 -2
  6. {PySDM-examples-2.74 → PySDM-examples-2.77}/PySDM_examples/Grabowski_and_Pawlowska_2023/settings.py +1 -3
  7. {PySDM-examples-2.74 → PySDM-examples-2.77}/PySDM_examples/Jensen_and_Nugent_2017/simulation.py +2 -2
  8. {PySDM-examples-2.74 → PySDM-examples-2.77}/PySDM_examples/Kreidenweis_et_al_2003/settings.py +2 -2
  9. {PySDM-examples-2.74 → PySDM-examples-2.77}/PySDM_examples/Lowe_et_al_2019/settings.py +1 -3
  10. {PySDM-examples-2.74 → PySDM-examples-2.77}/PySDM_examples/Niedermeier_et_al_2014/settings.py +1 -2
  11. {PySDM-examples-2.74 → PySDM-examples-2.77}/PySDM_examples/Pyrcel/settings.py +2 -5
  12. {PySDM-examples-2.74 → PySDM-examples-2.77}/PySDM_examples/Pyrcel/tutorial_settings.py +2 -5
  13. {PySDM-examples-2.74 → PySDM-examples-2.77}/PySDM_examples/Yang_et_al_2018/simulation.py +1 -3
  14. PySDM-examples-2.77/PySDM_examples/seeding/__init__.py +2 -0
  15. PySDM-examples-2.77/PySDM_examples/seeding/settings.py +65 -0
  16. PySDM-examples-2.77/PySDM_examples/seeding/simulation.py +97 -0
  17. {PySDM-examples-2.74 → PySDM-examples-2.77}/PySDM_examples.egg-info/PKG-INFO +1 -1
  18. {PySDM-examples-2.74 → PySDM-examples-2.77}/PySDM_examples.egg-info/SOURCES.txt +3 -0
  19. {PySDM-examples-2.74 → PySDM-examples-2.77}/MANIFEST.in +0 -0
  20. {PySDM-examples-2.74 → PySDM-examples-2.77}/PySDM_examples/Abade_and_Albuquerque_2024/__init__.py +0 -0
  21. {PySDM-examples-2.74 → PySDM-examples-2.77}/PySDM_examples/Abade_and_Albuquerque_2024/settings.py +0 -0
  22. {PySDM-examples-2.74 → PySDM-examples-2.77}/PySDM_examples/Abade_and_Albuquerque_2024/simulation.py +0 -0
  23. {PySDM-examples-2.74 → PySDM-examples-2.77}/PySDM_examples/Abdul_Razzak_Ghan_2000/__init__.py +0 -0
  24. {PySDM-examples-2.74 → PySDM-examples-2.77}/PySDM_examples/Abdul_Razzak_Ghan_2000/aerosol.py +0 -0
  25. {PySDM-examples-2.74 → PySDM-examples-2.77}/PySDM_examples/Abdul_Razzak_Ghan_2000/data_from_ARG2000_paper.py +0 -0
  26. {PySDM-examples-2.74 → PySDM-examples-2.77}/PySDM_examples/Abdul_Razzak_Ghan_2000/data_from_CloudMicrophysics_ARG.py +0 -0
  27. {PySDM-examples-2.74 → PySDM-examples-2.77}/PySDM_examples/Alpert_and_Knopf_2016/__init__.py +0 -0
  28. {PySDM-examples-2.74 → PySDM-examples-2.77}/PySDM_examples/Alpert_and_Knopf_2016/table.py +0 -0
  29. {PySDM-examples-2.74 → PySDM-examples-2.77}/PySDM_examples/Alpert_and_Knopf_2016/table_1.py +0 -0
  30. {PySDM-examples-2.74 → PySDM-examples-2.77}/PySDM_examples/Alpert_and_Knopf_2016/table_2.py +0 -0
  31. {PySDM-examples-2.74 → PySDM-examples-2.77}/PySDM_examples/Arabas_and_Shima_2017/__init__.py +0 -0
  32. {PySDM-examples-2.74 → PySDM-examples-2.77}/PySDM_examples/Arabas_and_Shima_2017/example.py +0 -0
  33. {PySDM-examples-2.74 → PySDM-examples-2.77}/PySDM_examples/Arabas_and_Shima_2017/simulation.py +0 -0
  34. {PySDM-examples-2.74 → PySDM-examples-2.77}/PySDM_examples/Arabas_et_al_2015/__init__.py +0 -0
  35. {PySDM-examples-2.74 → PySDM-examples-2.77}/PySDM_examples/Arabas_et_al_2015/example.py +0 -0
  36. {PySDM-examples-2.74 → PySDM-examples-2.77}/PySDM_examples/Arabas_et_al_2015/example_benchmark.py +0 -0
  37. {PySDM-examples-2.74 → PySDM-examples-2.77}/PySDM_examples/Arabas_et_al_2015/settings.py +0 -0
  38. {PySDM-examples-2.74 → PySDM-examples-2.77}/PySDM_examples/Arabas_et_al_2015/spin_up.py +0 -0
  39. {PySDM-examples-2.74 → PySDM-examples-2.77}/PySDM_examples/Arabas_et_al_2023/__init__.py +0 -0
  40. {PySDM-examples-2.74 → PySDM-examples-2.77}/PySDM_examples/Arabas_et_al_2023/commons.py +0 -0
  41. {PySDM-examples-2.74 → PySDM-examples-2.77}/PySDM_examples/Arabas_et_al_2023/curved_text.py +0 -0
  42. {PySDM-examples-2.74 → PySDM-examples-2.77}/PySDM_examples/Arabas_et_al_2023/frozen_fraction.py +0 -0
  43. {PySDM-examples-2.74 → PySDM-examples-2.77}/PySDM_examples/Arabas_et_al_2023/make_particulator.py +0 -0
  44. {PySDM-examples-2.74 → PySDM-examples-2.77}/PySDM_examples/Arabas_et_al_2023/plots.py +0 -0
  45. {PySDM-examples-2.74 → PySDM-examples-2.77}/PySDM_examples/Bartman_2020_MasterThesis/__init__.py +0 -0
  46. {PySDM-examples-2.74 → PySDM-examples-2.77}/PySDM_examples/Bartman_2020_MasterThesis/fig_4_adaptive_sdm.py +0 -0
  47. {PySDM-examples-2.74 → PySDM-examples-2.77}/PySDM_examples/Bartman_2020_MasterThesis/fig_5_SCIPY_VS_ADAPTIVE.py +0 -0
  48. {PySDM-examples-2.74 → PySDM-examples-2.77}/PySDM_examples/Bartman_et_al_2021/__init__.py +0 -0
  49. {PySDM-examples-2.74 → PySDM-examples-2.77}/PySDM_examples/Bartman_et_al_2021/label.py +0 -0
  50. {PySDM-examples-2.74 → PySDM-examples-2.77}/PySDM_examples/Berry_1967/__init__.py +0 -0
  51. {PySDM-examples-2.74 → PySDM-examples-2.77}/PySDM_examples/Berry_1967/example.py +0 -0
  52. {PySDM-examples-2.74 → PySDM-examples-2.77}/PySDM_examples/Berry_1967/example_fig_6.py +0 -0
  53. {PySDM-examples-2.74 → PySDM-examples-2.77}/PySDM_examples/Berry_1967/settings.py +0 -0
  54. {PySDM-examples-2.74 → PySDM-examples-2.77}/PySDM_examples/Berry_1967/spectrum_plotter.py +0 -0
  55. {PySDM-examples-2.74 → PySDM-examples-2.77}/PySDM_examples/Bieli_et_al_2022/__init__.py +0 -0
  56. {PySDM-examples-2.74 → PySDM-examples-2.77}/PySDM_examples/Bieli_et_al_2022/settings.py +0 -0
  57. {PySDM-examples-2.74 → PySDM-examples-2.77}/PySDM_examples/Bieli_et_al_2022/simulation.py +0 -0
  58. {PySDM-examples-2.74 → PySDM-examples-2.77}/PySDM_examples/Bolot_et_al_2013/__init__.py +0 -0
  59. {PySDM-examples-2.74 → PySDM-examples-2.77}/PySDM_examples/Bulenok_2023_MasterThesis/__init__.py +0 -0
  60. {PySDM-examples-2.74 → PySDM-examples-2.77}/PySDM_examples/Bulenok_2023_MasterThesis/setups.py +0 -0
  61. {PySDM-examples-2.74 → PySDM-examples-2.77}/PySDM_examples/Bulenok_2023_MasterThesis/utils.py +0 -0
  62. {PySDM-examples-2.74 → PySDM-examples-2.77}/PySDM_examples/Ervens_and_Feingold_2012/__init__.py +0 -0
  63. {PySDM-examples-2.74 → PySDM-examples-2.77}/PySDM_examples/Ervens_and_Feingold_2012/settings.py +0 -0
  64. {PySDM-examples-2.74 → PySDM-examples-2.77}/PySDM_examples/Gedzelman_and_Arnold_1994/__init__.py +0 -0
  65. {PySDM-examples-2.74 → PySDM-examples-2.77}/PySDM_examples/Grabowski_and_Pawlowska_2023/__init__.py +0 -0
  66. {PySDM-examples-2.74 → PySDM-examples-2.77}/PySDM_examples/Grabowski_and_Pawlowska_2023/simulation.py +0 -0
  67. {PySDM-examples-2.74 → PySDM-examples-2.77}/PySDM_examples/Graf_et_al_2019/__init__.py +0 -0
  68. {PySDM-examples-2.74 → PySDM-examples-2.77}/PySDM_examples/Jaruga_and_Pawlowska_2018/__init__.py +0 -0
  69. {PySDM-examples-2.74 → PySDM-examples-2.77}/PySDM_examples/Jensen_and_Nugent_2017/__init__.py +0 -0
  70. {PySDM-examples-2.74 → PySDM-examples-2.77}/PySDM_examples/Jensen_and_Nugent_2017/plotting.py +0 -0
  71. {PySDM-examples-2.74 → PySDM-examples-2.77}/PySDM_examples/Jensen_and_Nugent_2017/settings.py +0 -0
  72. {PySDM-examples-2.74 → PySDM-examples-2.77}/PySDM_examples/Jensen_and_Nugent_2017/table_3.py +0 -0
  73. {PySDM-examples-2.74 → PySDM-examples-2.77}/PySDM_examples/Kreidenweis_et_al_2003/__init__.py +0 -0
  74. {PySDM-examples-2.74 → PySDM-examples-2.77}/PySDM_examples/Kreidenweis_et_al_2003/simulation.py +0 -0
  75. {PySDM-examples-2.74 → PySDM-examples-2.77}/PySDM_examples/Lamb_et_al_2017/__init__.py +0 -0
  76. {PySDM-examples-2.74 → PySDM-examples-2.77}/PySDM_examples/Lowe_et_al_2019/__init__.py +0 -0
  77. {PySDM-examples-2.74 → PySDM-examples-2.77}/PySDM_examples/Lowe_et_al_2019/aerosol.py +0 -0
  78. {PySDM-examples-2.74 → PySDM-examples-2.77}/PySDM_examples/Lowe_et_al_2019/aerosol_code.py +0 -0
  79. {PySDM-examples-2.74 → PySDM-examples-2.77}/PySDM_examples/Lowe_et_al_2019/constants_def.py +0 -0
  80. {PySDM-examples-2.74 → PySDM-examples-2.77}/PySDM_examples/Lowe_et_al_2019/plot_helper.py +0 -0
  81. {PySDM-examples-2.74 → PySDM-examples-2.77}/PySDM_examples/Lowe_et_al_2019/simulation.py +0 -0
  82. {PySDM-examples-2.74 → PySDM-examples-2.77}/PySDM_examples/Merlivat_and_Nief_1967/__init__.py +0 -0
  83. {PySDM-examples-2.74 → PySDM-examples-2.77}/PySDM_examples/Miyake_et_al_1968/__init__.py +0 -0
  84. {PySDM-examples-2.74 → PySDM-examples-2.77}/PySDM_examples/Morrison_and_Grabowski_2007/__init__.py +0 -0
  85. {PySDM-examples-2.74 → PySDM-examples-2.77}/PySDM_examples/Morrison_and_Grabowski_2007/common.py +0 -0
  86. {PySDM-examples-2.74 → PySDM-examples-2.77}/PySDM_examples/Morrison_and_Grabowski_2007/cumulus.py +0 -0
  87. {PySDM-examples-2.74 → PySDM-examples-2.77}/PySDM_examples/Morrison_and_Grabowski_2007/strato_cumulus.py +0 -0
  88. {PySDM-examples-2.74 → PySDM-examples-2.77}/PySDM_examples/Niedermeier_et_al_2014/__init__.py +0 -0
  89. {PySDM-examples-2.74 → PySDM-examples-2.77}/PySDM_examples/Niedermeier_et_al_2014/simulation.py +0 -0
  90. {PySDM-examples-2.74 → PySDM-examples-2.77}/PySDM_examples/Pierchala_et_al_2022/__init__.py +0 -0
  91. {PySDM-examples-2.74 → PySDM-examples-2.77}/PySDM_examples/Pierchala_et_al_2022/commons.py +0 -0
  92. {PySDM-examples-2.74 → PySDM-examples-2.77}/PySDM_examples/Pyrcel/__init__.py +0 -0
  93. {PySDM-examples-2.74 → PySDM-examples-2.77}/PySDM_examples/Pyrcel/profile_plotter.py +0 -0
  94. {PySDM-examples-2.74 → PySDM-examples-2.77}/PySDM_examples/Pyrcel/simulation.py +0 -0
  95. {PySDM-examples-2.74 → PySDM-examples-2.77}/PySDM_examples/Pyrcel/tutorial_simulation.py +0 -0
  96. {PySDM-examples-2.74 → PySDM-examples-2.77}/PySDM_examples/Rozanski_and_Sonntag_1982/__init__.py +0 -0
  97. {PySDM-examples-2.74 → PySDM-examples-2.77}/PySDM_examples/Shima_et_al_2009/__init__.py +0 -0
  98. {PySDM-examples-2.74 → PySDM-examples-2.77}/PySDM_examples/Shima_et_al_2009/error_measure.py +0 -0
  99. {PySDM-examples-2.74 → PySDM-examples-2.77}/PySDM_examples/Shima_et_al_2009/example.py +0 -0
  100. {PySDM-examples-2.74 → PySDM-examples-2.77}/PySDM_examples/Shima_et_al_2009/example_timing.py +0 -0
  101. {PySDM-examples-2.74 → PySDM-examples-2.77}/PySDM_examples/Shima_et_al_2009/settings.py +0 -0
  102. {PySDM-examples-2.74 → PySDM-examples-2.77}/PySDM_examples/Shima_et_al_2009/spectrum_plotter.py +0 -0
  103. {PySDM-examples-2.74 → PySDM-examples-2.77}/PySDM_examples/Shima_et_al_2009/tutorial_example.py +0 -0
  104. {PySDM-examples-2.74 → PySDM-examples-2.77}/PySDM_examples/Shima_et_al_2009/tutorial_plotter.py +0 -0
  105. {PySDM-examples-2.74 → PySDM-examples-2.77}/PySDM_examples/Shima_et_al_2009/tutorial_settings.py +0 -0
  106. {PySDM-examples-2.74 → PySDM-examples-2.77}/PySDM_examples/Shipway_and_Hill_2012/__init__.py +0 -0
  107. {PySDM-examples-2.74 → PySDM-examples-2.77}/PySDM_examples/Shipway_and_Hill_2012/mpdata_1d.py +0 -0
  108. {PySDM-examples-2.74 → PySDM-examples-2.77}/PySDM_examples/Shipway_and_Hill_2012/plot.py +0 -0
  109. {PySDM-examples-2.74 → PySDM-examples-2.77}/PySDM_examples/Shipway_and_Hill_2012/settings.py +0 -0
  110. {PySDM-examples-2.74 → PySDM-examples-2.77}/PySDM_examples/Shipway_and_Hill_2012/simulation.py +0 -0
  111. {PySDM-examples-2.74 → PySDM-examples-2.77}/PySDM_examples/Singer_Ward/__init__.py +0 -0
  112. {PySDM-examples-2.74 → PySDM-examples-2.77}/PySDM_examples/Singer_Ward/aerosol.py +0 -0
  113. {PySDM-examples-2.74 → PySDM-examples-2.77}/PySDM_examples/Srivastava_1982/__init__.py +0 -0
  114. {PySDM-examples-2.74 → PySDM-examples-2.77}/PySDM_examples/Srivastava_1982/equations.py +0 -0
  115. {PySDM-examples-2.74 → PySDM-examples-2.77}/PySDM_examples/Srivastava_1982/example.py +0 -0
  116. {PySDM-examples-2.74 → PySDM-examples-2.77}/PySDM_examples/Srivastava_1982/settings.py +0 -0
  117. {PySDM-examples-2.74 → PySDM-examples-2.77}/PySDM_examples/Srivastava_1982/simulation.py +0 -0
  118. {PySDM-examples-2.74 → PySDM-examples-2.77}/PySDM_examples/Szumowski_et_al_1998/__init__.py +0 -0
  119. {PySDM-examples-2.74 → PySDM-examples-2.77}/PySDM_examples/Szumowski_et_al_1998/fields.py +0 -0
  120. {PySDM-examples-2.74 → PySDM-examples-2.77}/PySDM_examples/Szumowski_et_al_1998/gui.py +0 -0
  121. {PySDM-examples-2.74 → PySDM-examples-2.77}/PySDM_examples/Szumowski_et_al_1998/gui_controller.py +0 -0
  122. {PySDM-examples-2.74 → PySDM-examples-2.77}/PySDM_examples/Szumowski_et_al_1998/gui_settings.py +0 -0
  123. {PySDM-examples-2.74 → PySDM-examples-2.77}/PySDM_examples/Szumowski_et_al_1998/gui_viewer.py +0 -0
  124. {PySDM-examples-2.74 → PySDM-examples-2.77}/PySDM_examples/Szumowski_et_al_1998/make_default_product_collection.py +0 -0
  125. {PySDM-examples-2.74 → PySDM-examples-2.77}/PySDM_examples/Szumowski_et_al_1998/mpdata_2d.py +0 -0
  126. {PySDM-examples-2.74 → PySDM-examples-2.77}/PySDM_examples/Szumowski_et_al_1998/plots.py +0 -0
  127. {PySDM-examples-2.74 → PySDM-examples-2.77}/PySDM_examples/Szumowski_et_al_1998/simulation.py +0 -0
  128. {PySDM-examples-2.74 → PySDM-examples-2.77}/PySDM_examples/Szumowski_et_al_1998/sounding.py +0 -0
  129. {PySDM-examples-2.74 → PySDM-examples-2.77}/PySDM_examples/Szumowski_et_al_1998/storage.py +0 -0
  130. {PySDM-examples-2.74 → PySDM-examples-2.77}/PySDM_examples/Van_Hook_1968/__init__.py +0 -0
  131. {PySDM-examples-2.74 → PySDM-examples-2.77}/PySDM_examples/Yang_et_al_2018/__init__.py +0 -0
  132. {PySDM-examples-2.74 → PySDM-examples-2.77}/PySDM_examples/Yang_et_al_2018/settings.py +0 -0
  133. {PySDM-examples-2.74 → PySDM-examples-2.77}/PySDM_examples/__init__.py +0 -0
  134. {PySDM-examples-2.74 → PySDM-examples-2.77}/PySDM_examples/deJong_Azimi/__init__.py +0 -0
  135. {PySDM-examples-2.74 → PySDM-examples-2.77}/PySDM_examples/deJong_Azimi/cloudy_data.py +0 -0
  136. {PySDM-examples-2.74 → PySDM-examples-2.77}/PySDM_examples/deJong_Azimi/cloudy_data_0d.py +0 -0
  137. {PySDM-examples-2.74 → PySDM-examples-2.77}/PySDM_examples/deJong_Azimi/settings1D.py +0 -0
  138. {PySDM-examples-2.74 → PySDM-examples-2.77}/PySDM_examples/deJong_Azimi/simulation_0D.py +0 -0
  139. {PySDM-examples-2.74 → PySDM-examples-2.77}/PySDM_examples/deJong_Mackay_et_al_2023/__init__.py +0 -0
  140. {PySDM-examples-2.74 → PySDM-examples-2.77}/PySDM_examples/deJong_Mackay_et_al_2023/plot_rates.py +0 -0
  141. {PySDM-examples-2.74 → PySDM-examples-2.77}/PySDM_examples/deJong_Mackay_et_al_2023/settings1D.py +0 -0
  142. {PySDM-examples-2.74 → PySDM-examples-2.77}/PySDM_examples/deJong_Mackay_et_al_2023/settings_0D.py +0 -0
  143. {PySDM-examples-2.74 → PySDM-examples-2.77}/PySDM_examples/deJong_Mackay_et_al_2023/simulation1D.py +0 -0
  144. {PySDM-examples-2.74 → PySDM-examples-2.77}/PySDM_examples/deJong_Mackay_et_al_2023/simulation_0D.py +0 -0
  145. {PySDM-examples-2.74 → PySDM-examples-2.77}/PySDM_examples/deJong_Mackay_et_al_2023/simulation_ss.py +0 -0
  146. {PySDM-examples-2.74 → PySDM-examples-2.77}/PySDM_examples/utils/__init__.py +0 -0
  147. {PySDM-examples-2.74 → PySDM-examples-2.77}/PySDM_examples/utils/basic_simulation.py +0 -0
  148. {PySDM-examples-2.74 → PySDM-examples-2.77}/PySDM_examples/utils/dummy_controller.py +0 -0
  149. {PySDM-examples-2.74 → PySDM-examples-2.77}/PySDM_examples/utils/notebook_vars.py +0 -0
  150. {PySDM-examples-2.74 → PySDM-examples-2.77}/PySDM_examples/utils/progbar_controller.py +0 -0
  151. {PySDM-examples-2.74 → PySDM-examples-2.77}/PySDM_examples/utils/read_vtk_1d.py +0 -0
  152. {PySDM-examples-2.74 → PySDM-examples-2.77}/PySDM_examples/utils/widgets/__init__.py +0 -0
  153. {PySDM-examples-2.74 → PySDM-examples-2.77}/PySDM_examples/utils/widgets/freezer.py +0 -0
  154. {PySDM-examples-2.74 → PySDM-examples-2.77}/PySDM_examples/utils/widgets/progbar_updater.py +0 -0
  155. {PySDM-examples-2.74 → PySDM-examples-2.77}/PySDM_examples.egg-info/dependency_links.txt +0 -0
  156. {PySDM-examples-2.74 → PySDM-examples-2.77}/PySDM_examples.egg-info/requires.txt +0 -0
  157. {PySDM-examples-2.74 → PySDM-examples-2.77}/PySDM_examples.egg-info/top_level.txt +0 -0
  158. {PySDM-examples-2.74 → PySDM-examples-2.77}/README.md +0 -0
  159. {PySDM-examples-2.74 → PySDM-examples-2.77}/pyproject.toml +0 -0
  160. {PySDM-examples-2.74 → PySDM-examples-2.77}/setup.cfg +0 -0
  161. {PySDM-examples-2.74 → PySDM-examples-2.77}/setup.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: PySDM-examples
3
- Version: 2.74
3
+ Version: 2.77
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
@@ -35,7 +35,7 @@ def run_parcel(
35
35
 
36
36
  formulae = Formulae(constants=CONSTANTS_ARG)
37
37
  const = formulae.constants
38
- pv0 = RH0 * formulae.saturation_vapour_pressure.pvs_Celsius(T0 - const.T0)
38
+ pv0 = RH0 * formulae.saturation_vapour_pressure.pvs_water(T0)
39
39
 
40
40
  env = Parcel(
41
41
  dt=dt,
@@ -11,7 +11,6 @@ from PySDM.dynamics import Freezing
11
11
  from PySDM.environments import Box
12
12
  from PySDM.initialisation import discretise_multiplicities
13
13
  from PySDM.initialisation.sampling import spectral_sampling
14
- from PySDM.physics import constants as const
15
14
  from PySDM.physics import si
16
15
  from PySDM.products import IceWaterContent, TotalUnfrozenImmersedSurfaceArea
17
16
 
@@ -143,7 +142,7 @@ class Simulation:
143
142
  svp = formulae.saturation_vapour_pressure
144
143
  plot_x = np.linspace(*self.temperature_range) * si.K
145
144
  plot_y = formulae.heterogeneous_ice_nucleation_rate.j_het(
146
- svp.ice_Celsius(plot_x - const.T0) / svp.pvs_Celsius(plot_x - const.T0)
145
+ svp.pvs_ice(plot_x) / svp.pvs_water(plot_x)
147
146
  )
148
147
  pyplot.grid()
149
148
  pyplot.plot(plot_x, plot_y / yunit, color="red", label="ABIFM $J_{het}$")
@@ -252,9 +251,7 @@ def simulation(
252
251
  for i in range(int(total_time / time_step) + 1):
253
252
  if cooling_rate != 0:
254
253
  env["T"] -= np.full((1,), cooling_rate * time_step / 2)
255
- env["a_w_ice"] = svp.ice_Celsius(env["T"][0] - const.T0) / svp.pvs_Celsius(
256
- env["T"][0] - const.T0
257
- )
254
+ env["a_w_ice"] = svp.pvs_ice(env["T"][0]) / svp.pvs_water(env["T"][0])
258
255
  particulator.run(0 if i == 0 else 1)
259
256
  if cooling_rate != 0:
260
257
  env["T"] -= np.full((1,), cooling_rate * time_step / 2)
@@ -27,7 +27,7 @@ class Settings:
27
27
  self.T0 = 300 * si.kelvin
28
28
  self.z_half = 150 * si.metres
29
29
 
30
- pvs = self.formulae.saturation_vapour_pressure.pvs_Celsius(self.T0 - const.T0)
30
+ pvs = self.formulae.saturation_vapour_pressure.pvs_water(self.T0)
31
31
  self.initial_water_vapour_mixing_ratio = const.eps / (
32
32
  self.p0 / self.RH0 / pvs - 1
33
33
  )
@@ -4,10 +4,9 @@ import numpy as np
4
4
  def update_thermo(particulator, T):
5
5
  env = particulator.environment
6
6
  svp = particulator.formulae.saturation_vapour_pressure
7
- const = particulator.formulae.constants
8
7
 
9
8
  env["T"] = T
10
- env["a_w_ice"] = svp.ice_Celsius(T - const.T0) / svp.pvs_Celsius(T - const.T0)
9
+ env["a_w_ice"] = svp.pvs_ice(T) / svp.pvs_water(T)
11
10
 
12
11
 
13
12
  def run_simulation(particulator, temperature_profile, n_steps):
@@ -61,9 +61,7 @@ class Settings:
61
61
  self.initial_temperature = initial_temperature
62
62
  pv0 = (
63
63
  initial_relative_humidity
64
- * self.formulae.saturation_vapour_pressure.pvs_Celsius(
65
- initial_temperature - const.T0
66
- )
64
+ * self.formulae.saturation_vapour_pressure.pvs_water(initial_temperature)
67
65
  )
68
66
  self.initial_vapour_mixing_ratio = const.eps * pv0 / (initial_pressure - pv0)
69
67
  self.t_max = displacement / vertical_velocity
@@ -29,9 +29,9 @@ class Simulation(BasicSimulation):
29
29
  gravitational_coalsecence: bool = False,
30
30
  ):
31
31
  const = settings.formulae.constants
32
- pvs_Celsius = settings.formulae.saturation_vapour_pressure.pvs_Celsius
32
+ pvs_water = settings.formulae.saturation_vapour_pressure.pvs_water
33
33
  initial_water_vapour_mixing_ratio = const.eps / (
34
- settings.p0 / settings.RH0 / pvs_Celsius(settings.T0 - const.T0) - 1
34
+ settings.p0 / settings.RH0 / pvs_water(settings.T0) - 1
35
35
  )
36
36
 
37
37
  n_gccn = np.count_nonzero(table_3.NA) if gccn else 0
@@ -7,7 +7,7 @@ from PySDM.dynamics.impl.chemistry_utils import AQUEOUS_COMPOUNDS
7
7
  from PySDM.initialisation import spectra
8
8
  from PySDM.initialisation.sampling import spectral_sampling as spec_sampling
9
9
  from PySDM.physics import si
10
- from PySDM.physics.constants import PPB, PPM, T0
10
+ from PySDM.physics.constants import PPB, PPM
11
11
 
12
12
 
13
13
  @strict
@@ -40,7 +40,7 @@ class Settings:
40
40
 
41
41
  self.p0 = 950 * si.mbar
42
42
  self.T0 = 285.2 * si.K
43
- pv0 = 0.95 * self.formulae.saturation_vapour_pressure.pvs_Celsius(self.T0 - T0)
43
+ pv0 = 0.95 * self.formulae.saturation_vapour_pressure.pvs_water(self.T0)
44
44
  self.initial_water_vapour_mixing_ratio = const.eps * pv0 / (self.p0 - pv0)
45
45
  self.kappa = 0.61
46
46
 
@@ -44,9 +44,7 @@ class Settings:
44
44
 
45
45
  self.p0 = 980 * si.mbar
46
46
  self.T0 = 280 * si.K
47
- pv0 = 0.999 * self.formulae.saturation_vapour_pressure.pvs_Celsius(
48
- self.T0 - const.T0
49
- )
47
+ pv0 = 0.999 * self.formulae.saturation_vapour_pressure.pvs_water(self.T0)
50
48
  self.initial_water_vapour_mixing_ratio = const.eps * pv0 / (self.p0 - pv0)
51
49
 
52
50
  self.cloud_radius_range = (0.5 * si.micrometre, np.inf)
@@ -3,7 +3,6 @@ from typing import Optional
3
3
  from pystrict import strict
4
4
 
5
5
  from PySDM import Formulae
6
- from PySDM.physics import constants as const
7
6
  from PySDM.physics import si
8
7
 
9
8
 
@@ -40,7 +39,7 @@ class Settings:
40
39
 
41
40
  @property
42
41
  def pv0(self):
43
- pvs = self.formulae.saturation_vapour_pressure.pvs_Celsius(self.T0 - const.T0)
42
+ pvs = self.formulae.saturation_vapour_pressure.pvs_water(self.T0)
44
43
  return self.initial_relative_humidity * pvs
45
44
 
46
45
  @property
@@ -29,11 +29,8 @@ class Settings:
29
29
  self.vertical_velocity = vertical_velocity
30
30
  self.initial_pressure = initial_pressure
31
31
  self.initial_temperature = initial_temperature
32
- pv0 = (
33
- initial_relative_humidity
34
- * formulae.saturation_vapour_pressure.pvs_Celsius(
35
- initial_temperature - const.T0
36
- )
32
+ pv0 = initial_relative_humidity * formulae.saturation_vapour_pressure.pvs_water(
33
+ initial_temperature
37
34
  )
38
35
  self.initial_vapour_mixing_ratio = const.eps * pv0 / (initial_pressure - pv0)
39
36
  self.t_max = displacement / vertical_velocity
@@ -29,11 +29,8 @@ class Settings:
29
29
  self.vertical_velocity = vertical_velocity
30
30
  self.initial_pressure = initial_pressure
31
31
  self.initial_temperature = initial_temperature
32
- pv0 = (
33
- initial_relative_humidity
34
- * formulae.saturation_vapour_pressure.pvs_Celsius(
35
- initial_temperature - const.T0
36
- )
32
+ pv0 = initial_relative_humidity * formulae.saturation_vapour_pressure.pvs_water(
33
+ initial_temperature
37
34
  )
38
35
  self.initial_vapour_mixing_ratio = const.eps * pv0 / (initial_pressure - pv0)
39
36
  self.t_max = displacement / vertical_velocity
@@ -30,9 +30,7 @@ class Simulation:
30
30
  / (
31
31
  settings.p0
32
32
  / settings.RH0
33
- / self.formulae.saturation_vapour_pressure.pvs_Celsius(
34
- settings.T0 - self.formulae.constants.T0
35
- )
33
+ / self.formulae.saturation_vapour_pressure.pvs_water(settings.T0)
36
34
  - 1
37
35
  ),
38
36
  T0=settings.T0,
@@ -0,0 +1,2 @@
1
+ from .settings import Settings
2
+ from .simulation import Simulation
@@ -0,0 +1,65 @@
1
+ import numpy as np
2
+ from pystrict import strict
3
+ from PySDM.initialisation.spectra import Lognormal
4
+ from PySDM.initialisation.sampling.spectral_sampling import ConstantMultiplicity
5
+ from PySDM.physics import si
6
+ from PySDM import Formulae
7
+
8
+
9
+ @strict
10
+ class Settings:
11
+ def __init__(
12
+ self,
13
+ *,
14
+ super_droplet_injection_rate: callable,
15
+ n_sd_initial: int,
16
+ n_sd_seeding: int,
17
+ rain_water_radius_threshold: float,
18
+ formulae: Formulae,
19
+ enable_collisions: bool = True,
20
+ ):
21
+ self.enable_collisions = enable_collisions
22
+ self.formulae = formulae
23
+ self.n_sd_initial = n_sd_initial
24
+ self.n_sd_seeding = n_sd_seeding
25
+ self.rain_water_radius_threshold = rain_water_radius_threshold
26
+
27
+ self.t_max = 25 * si.min
28
+ self.w_max = 3 * si.m / si.s
29
+ self.w_min = 0.025 * si.m / si.s
30
+
31
+ self.timestep = 15 * si.s
32
+ self.mass_of_dry_air = 666 * si.kg
33
+
34
+ self.updraft = (
35
+ lambda t: self.w_min
36
+ + (self.w_max - self.w_min)
37
+ * np.maximum(0, np.sin(t / self.t_max * 2 * np.pi)) ** 2
38
+ )
39
+ self.initial_water_vapour_mixing_ratio = 666 / 30 * si.g / si.kg
40
+ self.initial_total_pressure = 1000 * si.hPa
41
+ self.initial_temperature = 300 * si.K
42
+ self.initial_aerosol_kappa = 0.5
43
+ self.initial_aerosol_dry_radii = Lognormal(
44
+ norm_factor=200 / si.mg * self.mass_of_dry_air,
45
+ m_mode=75 * si.nm,
46
+ s_geom=1.6,
47
+ )
48
+ self.super_droplet_injection_rate = super_droplet_injection_rate
49
+
50
+ r_dry, n_in_dv = ConstantMultiplicity(
51
+ Lognormal(
52
+ norm_factor=10 / si.mg * self.mass_of_dry_air,
53
+ m_mode=1 * si.um,
54
+ s_geom=1.1,
55
+ )
56
+ ).sample(
57
+ n_sd=n_sd_seeding
58
+ ) # TODO #1387: does not to be the same?
59
+ v_dry = self.formulae.trivia.volume(radius=r_dry)
60
+ self.seeded_particle_multiplicity = n_in_dv
61
+ self.seeded_particle_extensive_attributes = {
62
+ "water mass": [0.0001 * si.ng] * n_sd_seeding,
63
+ "dry volume": v_dry,
64
+ "kappa times dry volume": 0.8 * v_dry,
65
+ }
@@ -0,0 +1,97 @@
1
+ import numpy as np
2
+
3
+ from PySDM_examples.seeding.settings import Settings
4
+
5
+ from PySDM import Builder
6
+ from PySDM.backends import CPU
7
+ from PySDM.environments import Parcel
8
+ from PySDM.dynamics import Condensation, AmbientThermodynamics, Coalescence, Seeding
9
+ from PySDM.dynamics.collisions.collision_kernels import Geometric
10
+ from PySDM.initialisation.sampling.spectral_sampling import ConstantMultiplicity
11
+ from PySDM import products
12
+ from PySDM.physics import si
13
+
14
+
15
+ class Simulation:
16
+ def __init__(self, settings: Settings):
17
+ builder = Builder(
18
+ n_sd=settings.n_sd_seeding + settings.n_sd_initial,
19
+ backend=CPU(
20
+ formulae=settings.formulae, override_jit_flags={"parallel": False}
21
+ ),
22
+ environment=Parcel(
23
+ dt=settings.timestep,
24
+ mass_of_dry_air=settings.mass_of_dry_air,
25
+ w=settings.updraft,
26
+ initial_water_vapour_mixing_ratio=settings.initial_water_vapour_mixing_ratio,
27
+ p0=settings.initial_total_pressure,
28
+ T0=settings.initial_temperature,
29
+ ),
30
+ )
31
+ builder.add_dynamic(AmbientThermodynamics())
32
+ builder.add_dynamic(Condensation())
33
+ if settings.enable_collisions:
34
+ builder.add_dynamic(Coalescence(collision_kernel=Geometric()))
35
+ builder.add_dynamic(
36
+ Seeding(
37
+ super_droplet_injection_rate=settings.super_droplet_injection_rate,
38
+ seeded_particle_multiplicity=settings.seeded_particle_multiplicity,
39
+ seeded_particle_extensive_attributes=settings.seeded_particle_extensive_attributes,
40
+ )
41
+ )
42
+
43
+ r_dry, n_in_dv = ConstantMultiplicity(
44
+ settings.initial_aerosol_dry_radii
45
+ ).sample(n_sd=settings.n_sd_initial, backend=builder.particulator.backend)
46
+ attributes = builder.particulator.environment.init_attributes(
47
+ n_in_dv=n_in_dv, kappa=settings.initial_aerosol_kappa, r_dry=r_dry
48
+ )
49
+ self.particulator = builder.build(
50
+ attributes={
51
+ k: np.pad(
52
+ array=v,
53
+ pad_width=(0, settings.n_sd_seeding),
54
+ mode="constant",
55
+ constant_values=np.nan if k == "multiplicity" else 0,
56
+ )
57
+ for k, v in attributes.items()
58
+ },
59
+ products=(
60
+ products.SuperDropletCountPerGridbox(name="sd_count"),
61
+ products.Time(),
62
+ products.WaterMixingRatio(
63
+ radius_range=(settings.rain_water_radius_threshold, np.inf),
64
+ name="rain water mixing ratio",
65
+ ),
66
+ products.EffectiveRadius(
67
+ name="r_eff",
68
+ unit="um",
69
+ radius_range=(0.5 * si.um, 25 * si.um),
70
+ ),
71
+ products.ParticleConcentration(
72
+ name="n_drop",
73
+ unit="cm^-3",
74
+ radius_range=(0.5 * si.um, 25 * si.um),
75
+ ),
76
+ ),
77
+ )
78
+ self.n_steps = int(settings.t_max // settings.timestep)
79
+
80
+ def run(self):
81
+ output = {
82
+ "attributes": {"water mass": []},
83
+ "products": {key: [] for key in self.particulator.products},
84
+ }
85
+ for step in range(self.n_steps + 1):
86
+ if step != 0:
87
+ self.particulator.run(steps=1)
88
+ for key, attr in output["attributes"].items():
89
+ data = self.particulator.attributes[key].to_ndarray(raw=True)
90
+ data[data == 0] = np.nan
91
+ attr.append(data)
92
+ for key, prod in output["products"].items():
93
+ prod.append(float(self.particulator.products[key].get()))
94
+ for out in ("attributes", "products"):
95
+ for key, val in output[out].items():
96
+ output[out][key] = np.array(val)
97
+ return output
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: PySDM-examples
3
- Version: 2.74
3
+ Version: 2.77
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
@@ -145,6 +145,9 @@ PySDM_examples/deJong_Mackay_et_al_2023/settings_0D.py
145
145
  PySDM_examples/deJong_Mackay_et_al_2023/simulation1D.py
146
146
  PySDM_examples/deJong_Mackay_et_al_2023/simulation_0D.py
147
147
  PySDM_examples/deJong_Mackay_et_al_2023/simulation_ss.py
148
+ PySDM_examples/seeding/__init__.py
149
+ PySDM_examples/seeding/settings.py
150
+ PySDM_examples/seeding/simulation.py
148
151
  PySDM_examples/utils/__init__.py
149
152
  PySDM_examples/utils/basic_simulation.py
150
153
  PySDM_examples/utils/dummy_controller.py
File without changes
File without changes
File without changes
File without changes