PySDM-examples 3.0.0rc39__tar.gz → 3.0.0rc41__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 (199) hide show
  1. {pysdm_examples-3.0.0rc39/pysdm_examples.egg-info → pysdm_examples-3.0.0rc41}/PKG-INFO +5 -5
  2. {pysdm_examples-3.0.0rc39 → pysdm_examples-3.0.0rc41}/PySDM_examples/Abade_and_Albuquerque_2024/simulation.py +25 -23
  3. {pysdm_examples-3.0.0rc39 → pysdm_examples-3.0.0rc41}/PySDM_examples/Abdul_Razzak_Ghan_2000/run_ARG_parcel.py +16 -16
  4. {pysdm_examples-3.0.0rc39 → pysdm_examples-3.0.0rc41}/PySDM_examples/Alpert_and_Knopf_2016/simulation.py +13 -12
  5. {pysdm_examples-3.0.0rc39 → pysdm_examples-3.0.0rc41}/PySDM_examples/Arabas_and_Pawlowska_2011/simulation.py +11 -17
  6. {pysdm_examples-3.0.0rc39 → pysdm_examples-3.0.0rc41}/PySDM_examples/Arabas_and_Shima_2017/simulation.py +27 -27
  7. {pysdm_examples-3.0.0rc39 → pysdm_examples-3.0.0rc41}/PySDM_examples/Arabas_et_al_2025/make_particulator.py +7 -12
  8. {pysdm_examples-3.0.0rc39 → pysdm_examples-3.0.0rc41}/PySDM_examples/Arabas_et_al_2025/run_simulation.py +7 -6
  9. {pysdm_examples-3.0.0rc39 → pysdm_examples-3.0.0rc41}/PySDM_examples/Bieli_et_al_2022/simulation.py +13 -7
  10. {pysdm_examples-3.0.0rc39 → pysdm_examples-3.0.0rc41}/PySDM_examples/Grabowski_and_Pawlowska_2023/simulation.py +27 -27
  11. {pysdm_examples-3.0.0rc39 → pysdm_examples-3.0.0rc41}/PySDM_examples/Jensen_and_Nugent_2017/simulation.py +31 -33
  12. {pysdm_examples-3.0.0rc39 → pysdm_examples-3.0.0rc41}/PySDM_examples/Kreidenweis_et_al_2003/simulation.py +26 -25
  13. {pysdm_examples-3.0.0rc39 → pysdm_examples-3.0.0rc41}/PySDM_examples/Long_1974/simulation.py +16 -15
  14. {pysdm_examples-3.0.0rc39 → pysdm_examples-3.0.0rc41}/PySDM_examples/Lowe_et_al_2019/simulation.py +16 -14
  15. {pysdm_examples-3.0.0rc39 → pysdm_examples-3.0.0rc41}/PySDM_examples/Luettmer_et_al_2026/simulation.py +33 -31
  16. {pysdm_examples-3.0.0rc39 → pysdm_examples-3.0.0rc41}/PySDM_examples/Murray_et_al_2010/simulation.py +13 -13
  17. {pysdm_examples-3.0.0rc39 → pysdm_examples-3.0.0rc41}/PySDM_examples/Niedermeier_et_al_2014/simulation.py +15 -12
  18. {pysdm_examples-3.0.0rc39 → pysdm_examples-3.0.0rc41}/PySDM_examples/Pyrcel/simulation.py +27 -28
  19. {pysdm_examples-3.0.0rc39 → pysdm_examples-3.0.0rc41}/PySDM_examples/Shima_et_al_2009/example.py +13 -9
  20. {pysdm_examples-3.0.0rc39 → pysdm_examples-3.0.0rc41}/PySDM_examples/Shima_et_al_2009/example_timing.py +9 -9
  21. {pysdm_examples-3.0.0rc39 → pysdm_examples-3.0.0rc41}/PySDM_examples/Shima_et_al_2009/tutorial_example.py +13 -8
  22. {pysdm_examples-3.0.0rc39 → pysdm_examples-3.0.0rc41}/PySDM_examples/Shipway_and_Hill_2012/simulation.py +21 -22
  23. {pysdm_examples-3.0.0rc39 → pysdm_examples-3.0.0rc41}/PySDM_examples/Spichtinger_et_al_2023/simulation.py +18 -16
  24. {pysdm_examples-3.0.0rc39 → pysdm_examples-3.0.0rc41}/PySDM_examples/Srivastava_1982/simulation.py +7 -6
  25. {pysdm_examples-3.0.0rc39 → pysdm_examples-3.0.0rc41}/PySDM_examples/Ware_et_al_2025/example.py +12 -11
  26. {pysdm_examples-3.0.0rc39 → pysdm_examples-3.0.0rc41}/PySDM_examples/Yang_et_al_2018/simulation.py +15 -17
  27. {pysdm_examples-3.0.0rc39 → pysdm_examples-3.0.0rc41}/PySDM_examples/deJong_Azimi/simulation_0D.py +19 -13
  28. {pysdm_examples-3.0.0rc39 → pysdm_examples-3.0.0rc41}/PySDM_examples/deJong_Mackay_et_al_2023/simulation_0D.py +36 -30
  29. {pysdm_examples-3.0.0rc39 → pysdm_examples-3.0.0rc41}/PySDM_examples/seeding/simulation.py +18 -22
  30. {pysdm_examples-3.0.0rc39 → pysdm_examples-3.0.0rc41}/PySDM_examples/utils/kinematic_2d/simulation.py +40 -39
  31. {pysdm_examples-3.0.0rc39 → pysdm_examples-3.0.0rc41}/pyproject.toml +5 -5
  32. {pysdm_examples-3.0.0rc39 → pysdm_examples-3.0.0rc41/pysdm_examples.egg-info}/PKG-INFO +5 -5
  33. {pysdm_examples-3.0.0rc39 → pysdm_examples-3.0.0rc41}/pysdm_examples.egg-info/requires.txt +4 -4
  34. pysdm_examples-3.0.0rc41/pysdm_examples.egg-info/scm_version.json +8 -0
  35. pysdm_examples-3.0.0rc39/pysdm_examples.egg-info/scm_version.json +0 -8
  36. {pysdm_examples-3.0.0rc39 → pysdm_examples-3.0.0rc41}/MANIFEST.in +0 -0
  37. {pysdm_examples-3.0.0rc39 → pysdm_examples-3.0.0rc41}/PySDM_examples/Abade_and_Albuquerque_2024/__init__.py +0 -0
  38. {pysdm_examples-3.0.0rc39 → pysdm_examples-3.0.0rc41}/PySDM_examples/Abade_and_Albuquerque_2024/settings.py +0 -0
  39. {pysdm_examples-3.0.0rc39 → pysdm_examples-3.0.0rc41}/PySDM_examples/Abdul_Razzak_Ghan_2000/__init__.py +0 -0
  40. {pysdm_examples-3.0.0rc39 → pysdm_examples-3.0.0rc41}/PySDM_examples/Abdul_Razzak_Ghan_2000/aerosol.py +0 -0
  41. {pysdm_examples-3.0.0rc39 → pysdm_examples-3.0.0rc41}/PySDM_examples/Abdul_Razzak_Ghan_2000/data_from_ARG2000_paper.py +0 -0
  42. {pysdm_examples-3.0.0rc39 → pysdm_examples-3.0.0rc41}/PySDM_examples/Abdul_Razzak_Ghan_2000/data_from_CloudMicrophysics_ARG.py +0 -0
  43. {pysdm_examples-3.0.0rc39 → pysdm_examples-3.0.0rc41}/PySDM_examples/Alpert_and_Knopf_2016/__init__.py +0 -0
  44. {pysdm_examples-3.0.0rc39 → pysdm_examples-3.0.0rc41}/PySDM_examples/Alpert_and_Knopf_2016/table.py +0 -0
  45. {pysdm_examples-3.0.0rc39 → pysdm_examples-3.0.0rc41}/PySDM_examples/Alpert_and_Knopf_2016/table_1.py +0 -0
  46. {pysdm_examples-3.0.0rc39 → pysdm_examples-3.0.0rc41}/PySDM_examples/Alpert_and_Knopf_2016/table_2.py +0 -0
  47. {pysdm_examples-3.0.0rc39 → pysdm_examples-3.0.0rc41}/PySDM_examples/Arabas_and_Pawlowska_2011/__init__.py +0 -0
  48. {pysdm_examples-3.0.0rc39 → pysdm_examples-3.0.0rc41}/PySDM_examples/Arabas_and_Pawlowska_2011/settings.py +0 -0
  49. {pysdm_examples-3.0.0rc39 → pysdm_examples-3.0.0rc41}/PySDM_examples/Arabas_and_Shima_2017/__init__.py +0 -0
  50. {pysdm_examples-3.0.0rc39 → pysdm_examples-3.0.0rc41}/PySDM_examples/Arabas_and_Shima_2017/example.py +0 -0
  51. {pysdm_examples-3.0.0rc39 → pysdm_examples-3.0.0rc41}/PySDM_examples/Arabas_and_Shima_2017/settings.py +0 -0
  52. {pysdm_examples-3.0.0rc39 → pysdm_examples-3.0.0rc41}/PySDM_examples/Arabas_et_al_2015/__init__.py +0 -0
  53. {pysdm_examples-3.0.0rc39 → pysdm_examples-3.0.0rc41}/PySDM_examples/Arabas_et_al_2015/example.py +0 -0
  54. {pysdm_examples-3.0.0rc39 → pysdm_examples-3.0.0rc41}/PySDM_examples/Arabas_et_al_2015/example_benchmark.py +0 -0
  55. {pysdm_examples-3.0.0rc39 → pysdm_examples-3.0.0rc41}/PySDM_examples/Arabas_et_al_2015/settings.py +0 -0
  56. {pysdm_examples-3.0.0rc39 → pysdm_examples-3.0.0rc41}/PySDM_examples/Arabas_et_al_2015/spin_up.py +0 -0
  57. {pysdm_examples-3.0.0rc39 → pysdm_examples-3.0.0rc41}/PySDM_examples/Arabas_et_al_2025/__init__.py +0 -0
  58. {pysdm_examples-3.0.0rc39 → pysdm_examples-3.0.0rc41}/PySDM_examples/Arabas_et_al_2025/commons.py +0 -0
  59. {pysdm_examples-3.0.0rc39 → pysdm_examples-3.0.0rc41}/PySDM_examples/Arabas_et_al_2025/curved_text.py +0 -0
  60. {pysdm_examples-3.0.0rc39 → pysdm_examples-3.0.0rc41}/PySDM_examples/Arabas_et_al_2025/frozen_fraction.py +0 -0
  61. {pysdm_examples-3.0.0rc39 → pysdm_examples-3.0.0rc41}/PySDM_examples/Arabas_et_al_2025/plots.py +0 -0
  62. {pysdm_examples-3.0.0rc39 → pysdm_examples-3.0.0rc41}/PySDM_examples/Bartman_2020_MasterThesis/__init__.py +0 -0
  63. {pysdm_examples-3.0.0rc39 → pysdm_examples-3.0.0rc41}/PySDM_examples/Bartman_2020_MasterThesis/fig_4_adaptive_sdm.py +0 -0
  64. {pysdm_examples-3.0.0rc39 → pysdm_examples-3.0.0rc41}/PySDM_examples/Bartman_2020_MasterThesis/fig_5_SCIPY_VS_ADAPTIVE.py +0 -0
  65. {pysdm_examples-3.0.0rc39 → pysdm_examples-3.0.0rc41}/PySDM_examples/Bartman_et_al_2021/__init__.py +0 -0
  66. {pysdm_examples-3.0.0rc39 → pysdm_examples-3.0.0rc41}/PySDM_examples/Bartman_et_al_2021/label.py +0 -0
  67. {pysdm_examples-3.0.0rc39 → pysdm_examples-3.0.0rc41}/PySDM_examples/Berry_1967/__init__.py +0 -0
  68. {pysdm_examples-3.0.0rc39 → pysdm_examples-3.0.0rc41}/PySDM_examples/Berry_1967/example.py +0 -0
  69. {pysdm_examples-3.0.0rc39 → pysdm_examples-3.0.0rc41}/PySDM_examples/Berry_1967/example_fig_6.py +0 -0
  70. {pysdm_examples-3.0.0rc39 → pysdm_examples-3.0.0rc41}/PySDM_examples/Berry_1967/settings.py +0 -0
  71. {pysdm_examples-3.0.0rc39 → pysdm_examples-3.0.0rc41}/PySDM_examples/Berry_1967/spectrum_plotter.py +0 -0
  72. {pysdm_examples-3.0.0rc39 → pysdm_examples-3.0.0rc41}/PySDM_examples/Bieli_et_al_2022/__init__.py +0 -0
  73. {pysdm_examples-3.0.0rc39 → pysdm_examples-3.0.0rc41}/PySDM_examples/Bieli_et_al_2022/settings.py +0 -0
  74. {pysdm_examples-3.0.0rc39 → pysdm_examples-3.0.0rc41}/PySDM_examples/Bolin_1958/__init__.py +0 -0
  75. {pysdm_examples-3.0.0rc39 → pysdm_examples-3.0.0rc41}/PySDM_examples/Bolot_et_al_2013/__init__.py +0 -0
  76. {pysdm_examples-3.0.0rc39 → pysdm_examples-3.0.0rc41}/PySDM_examples/Bulenok_2023_MasterThesis/__init__.py +0 -0
  77. {pysdm_examples-3.0.0rc39 → pysdm_examples-3.0.0rc41}/PySDM_examples/Bulenok_2023_MasterThesis/performance_comparison_Srivastava_Setup.py +0 -0
  78. {pysdm_examples-3.0.0rc39 → pysdm_examples-3.0.0rc41}/PySDM_examples/Bulenok_2023_MasterThesis/setups.py +0 -0
  79. {pysdm_examples-3.0.0rc39 → pysdm_examples-3.0.0rc41}/PySDM_examples/Bulenok_2023_MasterThesis/utils.py +0 -0
  80. {pysdm_examples-3.0.0rc39 → pysdm_examples-3.0.0rc41}/PySDM_examples/Ervens_and_Feingold_2012/__init__.py +0 -0
  81. {pysdm_examples-3.0.0rc39 → pysdm_examples-3.0.0rc41}/PySDM_examples/Ervens_and_Feingold_2012/settings.py +0 -0
  82. {pysdm_examples-3.0.0rc39 → pysdm_examples-3.0.0rc41}/PySDM_examples/Fisher_1991/__init__.py +0 -0
  83. {pysdm_examples-3.0.0rc39 → pysdm_examples-3.0.0rc41}/PySDM_examples/Gedzelman_and_Arnold_1994/__init__.py +0 -0
  84. {pysdm_examples-3.0.0rc39 → pysdm_examples-3.0.0rc41}/PySDM_examples/Gonfiantini_1986/__init__.py +0 -0
  85. {pysdm_examples-3.0.0rc39 → pysdm_examples-3.0.0rc41}/PySDM_examples/Grabowski_and_Pawlowska_2023/__init__.py +0 -0
  86. {pysdm_examples-3.0.0rc39 → pysdm_examples-3.0.0rc41}/PySDM_examples/Grabowski_and_Pawlowska_2023/settings.py +0 -0
  87. {pysdm_examples-3.0.0rc39 → pysdm_examples-3.0.0rc41}/PySDM_examples/Graf_et_al_2019/__init__.py +0 -0
  88. {pysdm_examples-3.0.0rc39 → pysdm_examples-3.0.0rc41}/PySDM_examples/Jaruga_and_Pawlowska_2018/__init__.py +0 -0
  89. {pysdm_examples-3.0.0rc39 → pysdm_examples-3.0.0rc41}/PySDM_examples/Jensen_and_Nugent_2017/__init__.py +0 -0
  90. {pysdm_examples-3.0.0rc39 → pysdm_examples-3.0.0rc41}/PySDM_examples/Jensen_and_Nugent_2017/plotting.py +0 -0
  91. {pysdm_examples-3.0.0rc39 → pysdm_examples-3.0.0rc41}/PySDM_examples/Jensen_and_Nugent_2017/settings.py +0 -0
  92. {pysdm_examples-3.0.0rc39 → pysdm_examples-3.0.0rc41}/PySDM_examples/Jensen_and_Nugent_2017/table_3.py +0 -0
  93. {pysdm_examples-3.0.0rc39 → pysdm_examples-3.0.0rc41}/PySDM_examples/Jouzel_and_Merlivat_1984/__init__.py +0 -0
  94. {pysdm_examples-3.0.0rc39 → pysdm_examples-3.0.0rc41}/PySDM_examples/Jouzel_and_Merlivat_1984/thermodynamic_profiles.py +0 -0
  95. {pysdm_examples-3.0.0rc39 → pysdm_examples-3.0.0rc41}/PySDM_examples/Kinzer_And_Gunn_1951/__init__.py +0 -0
  96. {pysdm_examples-3.0.0rc39 → pysdm_examples-3.0.0rc41}/PySDM_examples/Kinzer_And_Gunn_1951/table_1_and_2.py +0 -0
  97. {pysdm_examples-3.0.0rc39 → pysdm_examples-3.0.0rc41}/PySDM_examples/Kreidenweis_et_al_2003/__init__.py +0 -0
  98. {pysdm_examples-3.0.0rc39 → pysdm_examples-3.0.0rc41}/PySDM_examples/Kreidenweis_et_al_2003/settings.py +0 -0
  99. {pysdm_examples-3.0.0rc39 → pysdm_examples-3.0.0rc41}/PySDM_examples/Lamb_et_al_2017/__init__.py +0 -0
  100. {pysdm_examples-3.0.0rc39 → pysdm_examples-3.0.0rc41}/PySDM_examples/Long_1974/__init__.py +0 -0
  101. {pysdm_examples-3.0.0rc39 → pysdm_examples-3.0.0rc41}/PySDM_examples/Long_1974/settings.py +0 -0
  102. {pysdm_examples-3.0.0rc39 → pysdm_examples-3.0.0rc41}/PySDM_examples/Lowe_et_al_2019/__init__.py +0 -0
  103. {pysdm_examples-3.0.0rc39 → pysdm_examples-3.0.0rc41}/PySDM_examples/Lowe_et_al_2019/aerosol.py +0 -0
  104. {pysdm_examples-3.0.0rc39 → pysdm_examples-3.0.0rc41}/PySDM_examples/Lowe_et_al_2019/aerosol_code.py +0 -0
  105. {pysdm_examples-3.0.0rc39 → pysdm_examples-3.0.0rc41}/PySDM_examples/Lowe_et_al_2019/constants_def.py +0 -0
  106. {pysdm_examples-3.0.0rc39 → pysdm_examples-3.0.0rc41}/PySDM_examples/Lowe_et_al_2019/plot_helper.py +0 -0
  107. {pysdm_examples-3.0.0rc39 → pysdm_examples-3.0.0rc41}/PySDM_examples/Lowe_et_al_2019/settings.py +0 -0
  108. {pysdm_examples-3.0.0rc39 → pysdm_examples-3.0.0rc41}/PySDM_examples/Luettmer_et_al_2026/__init__.py +0 -0
  109. {pysdm_examples-3.0.0rc39 → pysdm_examples-3.0.0rc41}/PySDM_examples/Luettmer_et_al_2026/commons.py +0 -0
  110. {pysdm_examples-3.0.0rc39 → pysdm_examples-3.0.0rc41}/PySDM_examples/Luettmer_et_al_2026/plot.py +0 -0
  111. {pysdm_examples-3.0.0rc39 → pysdm_examples-3.0.0rc41}/PySDM_examples/Luettmer_et_al_2026/settings.py +0 -0
  112. {pysdm_examples-3.0.0rc39 → pysdm_examples-3.0.0rc41}/PySDM_examples/Matsushima_et_al_2023/__init__.py +0 -0
  113. {pysdm_examples-3.0.0rc39 → pysdm_examples-3.0.0rc41}/PySDM_examples/Merlivat_and_Nief_1967/__init__.py +0 -0
  114. {pysdm_examples-3.0.0rc39 → pysdm_examples-3.0.0rc41}/PySDM_examples/Miyake_et_al_1968/__init__.py +0 -0
  115. {pysdm_examples-3.0.0rc39 → pysdm_examples-3.0.0rc41}/PySDM_examples/Morrison_and_Grabowski_2007/__init__.py +0 -0
  116. {pysdm_examples-3.0.0rc39 → pysdm_examples-3.0.0rc41}/PySDM_examples/Morrison_and_Grabowski_2007/common.py +0 -0
  117. {pysdm_examples-3.0.0rc39 → pysdm_examples-3.0.0rc41}/PySDM_examples/Morrison_and_Grabowski_2007/strato_cumulus.py +0 -0
  118. {pysdm_examples-3.0.0rc39 → pysdm_examples-3.0.0rc41}/PySDM_examples/Murray_et_al_2010/__init__.py +0 -0
  119. {pysdm_examples-3.0.0rc39 → pysdm_examples-3.0.0rc41}/PySDM_examples/Niedermeier_et_al_2014/__init__.py +0 -0
  120. {pysdm_examples-3.0.0rc39 → pysdm_examples-3.0.0rc41}/PySDM_examples/Niedermeier_et_al_2014/settings.py +0 -0
  121. {pysdm_examples-3.0.0rc39 → pysdm_examples-3.0.0rc41}/PySDM_examples/Pierchala_et_al_2022/__init__.py +0 -0
  122. {pysdm_examples-3.0.0rc39 → pysdm_examples-3.0.0rc41}/PySDM_examples/Pierchala_et_al_2022/commons.py +0 -0
  123. {pysdm_examples-3.0.0rc39 → pysdm_examples-3.0.0rc41}/PySDM_examples/Pruppacher_and_Rasmussen_1979/__init__.py +0 -0
  124. {pysdm_examples-3.0.0rc39 → pysdm_examples-3.0.0rc41}/PySDM_examples/Pyrcel/__init__.py +0 -0
  125. {pysdm_examples-3.0.0rc39 → pysdm_examples-3.0.0rc41}/PySDM_examples/Pyrcel/profile_plotter.py +0 -0
  126. {pysdm_examples-3.0.0rc39 → pysdm_examples-3.0.0rc41}/PySDM_examples/Pyrcel/settings.py +0 -0
  127. {pysdm_examples-3.0.0rc39 → pysdm_examples-3.0.0rc41}/PySDM_examples/Rogers_1975/__init__.py +0 -0
  128. {pysdm_examples-3.0.0rc39 → pysdm_examples-3.0.0rc41}/PySDM_examples/Rozanski_and_Sonntag_1982/__init__.py +0 -0
  129. {pysdm_examples-3.0.0rc39 → pysdm_examples-3.0.0rc41}/PySDM_examples/Rozanski_and_Sonntag_1982/multibox.py +0 -0
  130. {pysdm_examples-3.0.0rc39 → pysdm_examples-3.0.0rc41}/PySDM_examples/Shima_et_al_2009/__init__.py +0 -0
  131. {pysdm_examples-3.0.0rc39 → pysdm_examples-3.0.0rc41}/PySDM_examples/Shima_et_al_2009/error_measure.py +0 -0
  132. {pysdm_examples-3.0.0rc39 → pysdm_examples-3.0.0rc41}/PySDM_examples/Shima_et_al_2009/settings.py +0 -0
  133. {pysdm_examples-3.0.0rc39 → pysdm_examples-3.0.0rc41}/PySDM_examples/Shima_et_al_2009/spectrum_plotter.py +0 -0
  134. {pysdm_examples-3.0.0rc39 → pysdm_examples-3.0.0rc41}/PySDM_examples/Shima_et_al_2009/tutorial_plotter.py +0 -0
  135. {pysdm_examples-3.0.0rc39 → pysdm_examples-3.0.0rc41}/PySDM_examples/Shima_et_al_2009/tutorial_settings.py +0 -0
  136. {pysdm_examples-3.0.0rc39 → pysdm_examples-3.0.0rc41}/PySDM_examples/Shipway_and_Hill_2012/__init__.py +0 -0
  137. {pysdm_examples-3.0.0rc39 → pysdm_examples-3.0.0rc41}/PySDM_examples/Shipway_and_Hill_2012/mpdata_1d.py +0 -0
  138. {pysdm_examples-3.0.0rc39 → pysdm_examples-3.0.0rc41}/PySDM_examples/Shipway_and_Hill_2012/plot.py +0 -0
  139. {pysdm_examples-3.0.0rc39 → pysdm_examples-3.0.0rc41}/PySDM_examples/Shipway_and_Hill_2012/settings.py +0 -0
  140. {pysdm_examples-3.0.0rc39 → pysdm_examples-3.0.0rc41}/PySDM_examples/Singer_Ward/__init__.py +0 -0
  141. {pysdm_examples-3.0.0rc39 → pysdm_examples-3.0.0rc41}/PySDM_examples/Singer_Ward/aerosol.py +0 -0
  142. {pysdm_examples-3.0.0rc39 → pysdm_examples-3.0.0rc41}/PySDM_examples/Spichtinger_et_al_2023/__init__.py +0 -0
  143. {pysdm_examples-3.0.0rc39 → pysdm_examples-3.0.0rc41}/PySDM_examples/Spichtinger_et_al_2023/data/__init__.py +0 -0
  144. {pysdm_examples-3.0.0rc39 → pysdm_examples-3.0.0rc41}/PySDM_examples/Spichtinger_et_al_2023/data/reference_bulk.py +0 -0
  145. {pysdm_examples-3.0.0rc39 → pysdm_examples-3.0.0rc41}/PySDM_examples/Spichtinger_et_al_2023/data/simulation_data.py +0 -0
  146. {pysdm_examples-3.0.0rc39 → pysdm_examples-3.0.0rc41}/PySDM_examples/Spichtinger_et_al_2023/settings.py +0 -0
  147. {pysdm_examples-3.0.0rc39 → pysdm_examples-3.0.0rc41}/PySDM_examples/Srivastava_1982/__init__.py +0 -0
  148. {pysdm_examples-3.0.0rc39 → pysdm_examples-3.0.0rc41}/PySDM_examples/Srivastava_1982/equations.py +0 -0
  149. {pysdm_examples-3.0.0rc39 → pysdm_examples-3.0.0rc41}/PySDM_examples/Srivastava_1982/example.py +0 -0
  150. {pysdm_examples-3.0.0rc39 → pysdm_examples-3.0.0rc41}/PySDM_examples/Srivastava_1982/settings.py +0 -0
  151. {pysdm_examples-3.0.0rc39 → pysdm_examples-3.0.0rc41}/PySDM_examples/Stewart_1975/__init__.py +0 -0
  152. {pysdm_examples-3.0.0rc39 → pysdm_examples-3.0.0rc41}/PySDM_examples/Strzabala_2025_BEng/__init__.py +0 -0
  153. {pysdm_examples-3.0.0rc39 → pysdm_examples-3.0.0rc41}/PySDM_examples/Toon_et_al_1980/__init__.py +0 -0
  154. {pysdm_examples-3.0.0rc39 → pysdm_examples-3.0.0rc41}/PySDM_examples/Van_Hook_1968/__init__.py +0 -0
  155. {pysdm_examples-3.0.0rc39 → pysdm_examples-3.0.0rc41}/PySDM_examples/Ware_et_al_2025/__init__.py +0 -0
  156. {pysdm_examples-3.0.0rc39 → pysdm_examples-3.0.0rc41}/PySDM_examples/Yang_et_al_2018/__init__.py +0 -0
  157. {pysdm_examples-3.0.0rc39 → pysdm_examples-3.0.0rc41}/PySDM_examples/Yang_et_al_2018/settings.py +0 -0
  158. {pysdm_examples-3.0.0rc39 → pysdm_examples-3.0.0rc41}/PySDM_examples/Zaba_et_al/__init__.py +0 -0
  159. {pysdm_examples-3.0.0rc39 → pysdm_examples-3.0.0rc41}/PySDM_examples/_HOWTOs/__init__.py +0 -0
  160. {pysdm_examples-3.0.0rc39 → pysdm_examples-3.0.0rc41}/PySDM_examples/__init__.py +0 -0
  161. {pysdm_examples-3.0.0rc39 → pysdm_examples-3.0.0rc41}/PySDM_examples/deJong_Azimi/__init__.py +0 -0
  162. {pysdm_examples-3.0.0rc39 → pysdm_examples-3.0.0rc41}/PySDM_examples/deJong_Azimi/cloudy_data.py +0 -0
  163. {pysdm_examples-3.0.0rc39 → pysdm_examples-3.0.0rc41}/PySDM_examples/deJong_Azimi/cloudy_data_0d.py +0 -0
  164. {pysdm_examples-3.0.0rc39 → pysdm_examples-3.0.0rc41}/PySDM_examples/deJong_Azimi/settings1D.py +0 -0
  165. {pysdm_examples-3.0.0rc39 → pysdm_examples-3.0.0rc41}/PySDM_examples/deJong_Mackay_et_al_2023/__init__.py +0 -0
  166. {pysdm_examples-3.0.0rc39 → pysdm_examples-3.0.0rc41}/PySDM_examples/deJong_Mackay_et_al_2023/plot_rates.py +0 -0
  167. {pysdm_examples-3.0.0rc39 → pysdm_examples-3.0.0rc41}/PySDM_examples/deJong_Mackay_et_al_2023/settings1D.py +0 -0
  168. {pysdm_examples-3.0.0rc39 → pysdm_examples-3.0.0rc41}/PySDM_examples/deJong_Mackay_et_al_2023/settings_0D.py +0 -0
  169. {pysdm_examples-3.0.0rc39 → pysdm_examples-3.0.0rc41}/PySDM_examples/deJong_Mackay_et_al_2023/simulation1D.py +0 -0
  170. {pysdm_examples-3.0.0rc39 → pysdm_examples-3.0.0rc41}/PySDM_examples/deJong_Mackay_et_al_2023/simulation_ss.py +0 -0
  171. {pysdm_examples-3.0.0rc39 → pysdm_examples-3.0.0rc41}/PySDM_examples/seeding/__init__.py +0 -0
  172. {pysdm_examples-3.0.0rc39 → pysdm_examples-3.0.0rc41}/PySDM_examples/seeding/settings.py +0 -0
  173. {pysdm_examples-3.0.0rc39 → pysdm_examples-3.0.0rc41}/PySDM_examples/utils/__init__.py +0 -0
  174. {pysdm_examples-3.0.0rc39 → pysdm_examples-3.0.0rc41}/PySDM_examples/utils/basic_simulation.py +0 -0
  175. {pysdm_examples-3.0.0rc39 → pysdm_examples-3.0.0rc41}/PySDM_examples/utils/dummy_controller.py +0 -0
  176. {pysdm_examples-3.0.0rc39 → pysdm_examples-3.0.0rc41}/PySDM_examples/utils/kinematic_2d/__init__.py +0 -0
  177. {pysdm_examples-3.0.0rc39 → pysdm_examples-3.0.0rc41}/PySDM_examples/utils/kinematic_2d/fields.py +0 -0
  178. {pysdm_examples-3.0.0rc39 → pysdm_examples-3.0.0rc41}/PySDM_examples/utils/kinematic_2d/gui.py +0 -0
  179. {pysdm_examples-3.0.0rc39 → pysdm_examples-3.0.0rc41}/PySDM_examples/utils/kinematic_2d/gui_controller.py +0 -0
  180. {pysdm_examples-3.0.0rc39 → pysdm_examples-3.0.0rc41}/PySDM_examples/utils/kinematic_2d/gui_settings.py +0 -0
  181. {pysdm_examples-3.0.0rc39 → pysdm_examples-3.0.0rc41}/PySDM_examples/utils/kinematic_2d/gui_viewer.py +0 -0
  182. {pysdm_examples-3.0.0rc39 → pysdm_examples-3.0.0rc41}/PySDM_examples/utils/kinematic_2d/make_default_product_collection.py +0 -0
  183. {pysdm_examples-3.0.0rc39 → pysdm_examples-3.0.0rc41}/PySDM_examples/utils/kinematic_2d/mpdata_2d.py +0 -0
  184. {pysdm_examples-3.0.0rc39 → pysdm_examples-3.0.0rc41}/PySDM_examples/utils/kinematic_2d/plots.py +0 -0
  185. {pysdm_examples-3.0.0rc39 → pysdm_examples-3.0.0rc41}/PySDM_examples/utils/kinematic_2d/storage.py +0 -0
  186. {pysdm_examples-3.0.0rc39 → pysdm_examples-3.0.0rc41}/PySDM_examples/utils/progbar_controller.py +0 -0
  187. {pysdm_examples-3.0.0rc39 → pysdm_examples-3.0.0rc41}/PySDM_examples/utils/pvanim.py +0 -0
  188. {pysdm_examples-3.0.0rc39 → pysdm_examples-3.0.0rc41}/PySDM_examples/utils/read_vtk_1d.py +0 -0
  189. {pysdm_examples-3.0.0rc39 → pysdm_examples-3.0.0rc41}/PySDM_examples/utils/widgets/__init__.py +0 -0
  190. {pysdm_examples-3.0.0rc39 → pysdm_examples-3.0.0rc41}/PySDM_examples/utils/widgets/freezer.py +0 -0
  191. {pysdm_examples-3.0.0rc39 → pysdm_examples-3.0.0rc41}/PySDM_examples/utils/widgets/progbar_updater.py +0 -0
  192. {pysdm_examples-3.0.0rc39 → pysdm_examples-3.0.0rc41}/README.md +0 -0
  193. {pysdm_examples-3.0.0rc39 → pysdm_examples-3.0.0rc41}/docs/pysdm_examples_landing.md +0 -0
  194. {pysdm_examples-3.0.0rc39 → pysdm_examples-3.0.0rc41}/pysdm_examples.egg-info/SOURCES.txt +0 -0
  195. {pysdm_examples-3.0.0rc39 → pysdm_examples-3.0.0rc41}/pysdm_examples.egg-info/dependency_links.txt +0 -0
  196. {pysdm_examples-3.0.0rc39 → pysdm_examples-3.0.0rc41}/pysdm_examples.egg-info/scm_file_list.json +0 -0
  197. {pysdm_examples-3.0.0rc39 → pysdm_examples-3.0.0rc41}/pysdm_examples.egg-info/top_level.txt +0 -0
  198. {pysdm_examples-3.0.0rc39 → pysdm_examples-3.0.0rc41}/setup.cfg +0 -0
  199. {pysdm_examples-3.0.0rc39 → pysdm_examples-3.0.0rc41}/setup.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: pysdm-examples
3
- Version: 3.0.0rc39
3
+ Version: 3.0.0rc41
4
4
  Summary: PySDM usage examples reproducing results from literature and depicting how to use PySDM from Python Jupyter notebooks
5
5
  Author-email: "https://github.com/open-atmos/PySDM/graphs/contributors" <sylwester.arabas@agh.edu.pl>
6
6
  License-Expression: GPL-3.0-only
@@ -30,13 +30,13 @@ Requires-Dist: PyMPDATA==1.7.3; extra == "ci-version-pins"
30
30
  Requires-Dist: open-atmos-jupyter-utils==1.5.0; extra == "ci-version-pins"
31
31
  Requires-Dist: pystrict==1.3; extra == "ci-version-pins"
32
32
  Requires-Dist: matplotlib!=3.9.1; extra == "ci-version-pins"
33
- Requires-Dist: joblib==1.5.3; extra == "ci-version-pins"
34
- Requires-Dist: ipywidgets==8.1.7; extra == "ci-version-pins"
33
+ Requires-Dist: joblib==1.6.0; extra == "ci-version-pins"
34
+ Requires-Dist: ipywidgets==8.1; extra == "ci-version-pins"
35
35
  Requires-Dist: seaborn==0.13.2; extra == "ci-version-pins"
36
- Requires-Dist: numdifftools==0.9.42; extra == "ci-version-pins"
36
+ Requires-Dist: numdifftools==0.11.1; extra == "ci-version-pins"
37
37
  Requires-Dist: vtk==9.6.2; extra == "ci-version-pins"
38
38
  Requires-Dist: pyrcel==2.0.0; extra == "ci-version-pins"
39
- Requires-Dist: pyvinecopulib==0.7.6; extra == "ci-version-pins"
39
+ Requires-Dist: pyvinecopulib==1.0.0; extra == "ci-version-pins"
40
40
  Requires-Dist: cmcrameri==1.10; extra == "ci-version-pins"
41
41
  Requires-Dist: cmap==0.7.2; extra == "ci-version-pins"
42
42
  Dynamic: description
@@ -2,7 +2,7 @@ import numpy as np
2
2
 
3
3
  from PySDM_examples.utils import BasicSimulation
4
4
 
5
- from PySDM import Builder
5
+ from PySDM.particulator import Particulator
6
6
  from PySDM.dynamics import (
7
7
  Condensation,
8
8
  AmbientThermodynamics,
@@ -40,39 +40,36 @@ class Simulation(BasicSimulation):
40
40
  if settings.enable_vapour_deposition_on_ice:
41
41
  dynamics.append(VapourDepositionOnIce(adaptive=True))
42
42
 
43
- builder = Builder(
43
+ environment = Parcel(
44
+ dt=settings.timestep,
45
+ mass_of_dry_air=settings.mass_of_dry_air,
46
+ p0=settings.initial_total_pressure,
47
+ initial_water_vapour_mixing_ratio=settings.initial_water_vapour_mixing_ratio,
48
+ T0=settings.initial_temperature,
49
+ w=settings.updraft,
50
+ mixed_phase=True,
44
51
  backend=settings.backend,
45
- n_sd=settings.n_sd,
46
- environment=Parcel(
47
- dt=settings.timestep,
48
- mass_of_dry_air=settings.mass_of_dry_air,
49
- p0=settings.initial_total_pressure,
50
- initial_water_vapour_mixing_ratio=settings.initial_water_vapour_mixing_ratio,
51
- T0=settings.initial_temperature,
52
- w=settings.updraft,
53
- mixed_phase=True,
54
- ),
55
- dynamics=dynamics,
56
52
  )
57
-
58
53
  r_dry, n_in_dv = ConstantMultiplicity(
59
54
  settings.soluble_aerosol
60
55
  ).sample_deterministic(n_sd=settings.n_sd)
61
- attributes = builder.particulator.environment.init_attributes(
62
- n_in_dv=n_in_dv, kappa=settings.kappa, r_dry=r_dry
56
+ attributes = environment.init_attributes(
57
+ n_in_dv=n_in_dv,
58
+ kappa=settings.kappa,
59
+ r_dry=r_dry,
63
60
  )
64
61
  attributes["signed water mass"] = (
65
- builder.particulator.formulae.particle_shape_and_density.volume_to_mass(
62
+ settings.backend.formulae.particle_shape_and_density.volume_to_mass(
66
63
  attributes["volume"]
67
64
  )
68
65
  )
69
66
  del attributes["volume"]
70
67
 
71
68
  if settings.enable_immersion_freezing:
72
- trivia = builder.particulator.formulae.trivia
69
+ trivia = settings.backend.formulae.trivia
73
70
  n_inp = int(settings.n_sd * settings.freezing_inp_frac)
74
71
 
75
- rng = np.random.default_rng(seed=builder.particulator.formulae.seed)
72
+ rng = np.random.default_rng(seed=settings.backend.formulae.seed)
76
73
  insoluble_surface_area = trivia.sphere_surface(
77
74
  diameter=2 * settings.freezing_inp_dry_radius
78
75
  )
@@ -81,7 +78,7 @@ class Simulation(BasicSimulation):
81
78
  ] = rng.permutation(
82
79
  np.pad(
83
80
  (
84
- builder.particulator.formulae.freezing_temperature_spectrum.invcdf(
81
+ settings.backend.formulae.freezing_temperature_spectrum.invcdf(
85
82
  cdf=rng.uniform(low=0, high=1, size=n_inp),
86
83
  A_insol=insoluble_surface_area,
87
84
  )
@@ -91,7 +88,7 @@ class Simulation(BasicSimulation):
91
88
  (0, settings.n_sd - n_inp),
92
89
  mode="constant",
93
90
  constant_values=(
94
- builder.particulator.formulae.constants.HOMOGENEOUS_FREEZING_THRESHOLD
91
+ settings.backend.formulae.constants.HOMOGENEOUS_FREEZING_THRESHOLD
95
92
  if settings.singular
96
93
  else 0
97
94
  ),
@@ -107,9 +104,14 @@ class Simulation(BasicSimulation):
107
104
  name="vapour", var="water_vapour_mixing_ratio"
108
105
  ),
109
106
  )
110
- super().__init__(
111
- particulator=builder.build(attributes=attributes, products=self.products)
107
+ particulator = Particulator(
108
+ n_sd=settings.n_sd,
109
+ environment=environment,
110
+ dynamics=dynamics,
111
+ attributes=attributes,
112
+ products=self.products,
112
113
  )
114
+ super().__init__(particulator=particulator)
113
115
 
114
116
  def run(self, *, nt, steps_per_output_interval):
115
117
  return self._run(nt=nt, steps_per_output_interval=steps_per_output_interval)
@@ -3,7 +3,7 @@ from collections import namedtuple
3
3
  import numpy as np
4
4
  from PySDM_examples.Abdul_Razzak_Ghan_2000.aerosol import CONSTANTS_ARG, AerosolARG
5
5
 
6
- from PySDM import Builder, Formulae
6
+ from PySDM import Particulator, Formulae
7
7
  from PySDM import products as PySDM_products
8
8
  from PySDM.backends import CPU
9
9
  from PySDM.dynamics import AmbientThermodynamics, Condensation
@@ -45,6 +45,7 @@ def run_parcel(
45
45
  initial_water_vapour_mixing_ratio=const.eps * pv0 / (p0 - pv0),
46
46
  w=w,
47
47
  T0=T0,
48
+ backend=CPU(formulae),
48
49
  )
49
50
 
50
51
  aerosol = AerosolARG(
@@ -52,14 +53,6 @@ def run_parcel(
52
53
  )
53
54
  n_sd = n_sd_per_mode * len(aerosol.modes)
54
55
 
55
- builder = Builder(
56
- backend=CPU(formulae),
57
- n_sd=n_sd,
58
- environment=env,
59
- dynamics=[AmbientThermodynamics(), Condensation()],
60
- )
61
- builder.request_attribute("critical saturation")
62
-
63
56
  attributes = {
64
57
  k: np.empty(0) for k in ("dry volume", "kappa times dry volume", "multiplicity")
65
58
  }
@@ -68,11 +61,11 @@ def run_parcel(
68
61
  r_dry, concentration = ConstantMultiplicity(spectrum).sample_deterministic(
69
62
  n_sd_per_mode
70
63
  )
71
- v_dry = builder.formulae.trivia.volume(radius=r_dry)
72
- specific_concentration = concentration / builder.formulae.constants.rho_STP
64
+ v_dry = formulae.trivia.volume(radius=r_dry)
65
+ specific_concentration = concentration / env.backend.formulae.constants.rho_STP
73
66
  attributes["multiplicity"] = np.append(
74
67
  attributes["multiplicity"],
75
- specific_concentration * builder.particulator.environment.mass_of_dry_air,
68
+ specific_concentration * env.mass_of_dry_air,
76
69
  )
77
70
  attributes["dry volume"] = np.append(attributes["dry volume"], v_dry)
78
71
  attributes["kappa times dry volume"] = np.append(
@@ -80,13 +73,20 @@ def run_parcel(
80
73
  )
81
74
 
82
75
  r_wet = equilibrate_wet_radii(
83
- r_dry=builder.formulae.trivia.radius(volume=attributes["dry volume"]),
84
- environment=builder.particulator.environment,
76
+ r_dry=formulae.trivia.radius(volume=attributes["dry volume"]),
77
+ environment=env,
85
78
  kappa_times_dry_volume=attributes["kappa times dry volume"],
86
79
  )
87
- attributes["volume"] = builder.formulae.trivia.volume(radius=r_wet)
80
+ attributes["volume"] = env.backend.formulae.trivia.volume(radius=r_wet)
88
81
 
89
- particulator = builder.build(attributes, products=products)
82
+ particulator = Particulator(
83
+ n_sd=n_sd,
84
+ environment=env,
85
+ dynamics=[AmbientThermodynamics(), Condensation()],
86
+ requested_attributes=("critical saturation",),
87
+ attributes=attributes,
88
+ products=products,
89
+ )
90
90
 
91
91
  output = {product.name: [] for product in particulator.products.values()}
92
92
  output_attributes = {
@@ -5,7 +5,7 @@ import numpy as np
5
5
  from matplotlib import pyplot
6
6
  from packaging import version
7
7
 
8
- from PySDM import Builder, Formulae
8
+ from PySDM import Particulator, Formulae
9
9
  from PySDM.backends import CPU
10
10
  from PySDM.dynamics import Freezing
11
11
  from PySDM.environments import Box
@@ -52,7 +52,7 @@ class Simulation:
52
52
  else:
53
53
  total_time = (
54
54
  np.diff(np.asarray(self.temperature_range)) / case["cooling_rate"]
55
- )
55
+ ).item()
56
56
 
57
57
  constants = None
58
58
  if "J_het" not in case:
@@ -214,13 +214,6 @@ def simulation(
214
214
  constants=constants,
215
215
  particle_shape_and_density="MixedPhaseSpheres",
216
216
  )
217
- builder = Builder(
218
- n_sd=n_sd,
219
- backend=CPU(formulae=formulae),
220
- environment=Box(dt=time_step, dv=volume),
221
- dynamics=[Freezing(immersion_freezing="time-dependent")],
222
- )
223
- builder.request_attribute("volume")
224
217
 
225
218
  if hasattr(spectrum, "s_geom") and spectrum.s_geom == 1:
226
219
  _isa, _conc = np.full(n_sd, spectrum.m_mode), np.full(
@@ -240,12 +233,20 @@ def simulation(
240
233
  IceWaterContent(name="qi"),
241
234
  TotalUnfrozenImmersedSurfaceArea(name="A_tot"),
242
235
  )
243
- particulator = builder.build(attributes=attributes, products=products)
244
- env = particulator.environment
245
-
236
+ env = Box(dt=time_step, dv=volume, backend=CPU(formulae=formulae))
246
237
  env["T"] = initial_temperature
247
238
  env["a_w_ice"] = np.nan
248
239
  env["RH"] = 1 + np.finfo(float).eps
240
+
241
+ particulator = Particulator(
242
+ n_sd=n_sd,
243
+ environment=env,
244
+ attributes=attributes,
245
+ products=products,
246
+ dynamics=[Freezing(immersion_freezing="time-dependent")],
247
+ requested_attributes=("volume",),
248
+ )
249
+
249
250
  svp = particulator.formulae.saturation_vapour_pressure
250
251
 
251
252
  cell_id = 0
@@ -2,7 +2,7 @@ import numpy as np
2
2
 
3
3
  from PySDM_examples.utils.basic_simulation import BasicSimulation
4
4
 
5
- from PySDM import Builder, products
5
+ from PySDM import products, Particulator
6
6
  from PySDM.backends import CPU
7
7
  from PySDM.dynamics import AmbientThermodynamics, Condensation
8
8
  from PySDM.environments import Parcel
@@ -19,29 +19,16 @@ class Simulation(BasicSimulation):
19
19
  ):
20
20
  self.settings = settings
21
21
 
22
- environment = Parcel(
22
+ self.environment = Parcel(
23
23
  dt=settings.dt,
24
24
  mass_of_dry_air=settings.mass_of_dry_air,
25
25
  p0=settings.p0,
26
26
  initial_relative_humidity=settings.RH0,
27
27
  T0=settings.T0,
28
28
  w=settings.w,
29
- )
30
-
31
- builder = Builder(
32
29
  backend=CPU(settings.formulae),
33
- n_sd=settings.n_sd,
34
- environment=environment,
35
- dynamics=(
36
- AmbientThermodynamics(),
37
- Condensation(),
38
- ),
39
30
  )
40
31
 
41
- builder.request_attribute("radius")
42
-
43
- self.builder = builder
44
-
45
32
  attributes, self.mode_id = self._make_attributes()
46
33
 
47
34
  if product_list is None:
@@ -51,9 +38,16 @@ class Simulation(BasicSimulation):
51
38
  products.AmbientTemperature(name="T"),
52
39
  )
53
40
 
54
- particulator = builder.build(
41
+ particulator = Particulator(
42
+ n_sd=settings.n_sd,
43
+ environment=self.environment,
44
+ dynamics=(
45
+ AmbientThermodynamics(),
46
+ Condensation(),
47
+ ),
55
48
  attributes=attributes,
56
49
  products=product_list,
50
+ requested_attributes=("radius",),
57
51
  )
58
52
 
59
53
  super().__init__(
@@ -64,7 +58,7 @@ class Simulation(BasicSimulation):
64
58
  def _make_attributes(self):
65
59
  settings = self.settings
66
60
  formulae = settings.formulae
67
- environment = self.builder.particulator.environment
61
+ environment = self.environment
68
62
 
69
63
  parcel_volume = environment.mass_of_dry_air / settings.initial_air_density
70
64
 
@@ -1,8 +1,8 @@
1
1
  import numpy as np
2
2
 
3
3
  import PySDM.products as PySDM_products
4
+ from PySDM import Particulator
4
5
  from PySDM.backends import Numba
5
- from PySDM.builder import Builder
6
6
  from PySDM.dynamics import AmbientThermodynamics, Condensation
7
7
  from PySDM.environments import Parcel
8
8
  from PySDM.initialisation.hygroscopic_equilibrium import equilibrate_wet_radii
@@ -18,7 +18,18 @@ class Simulation:
18
18
  while dt_output / self.n_substeps >= settings.dt_max: # TODO #334 dt_max
19
19
  self.n_substeps += 1
20
20
 
21
- builder = Builder(
21
+ attributes = {}
22
+ r_dry = np.array([settings.r_dry])
23
+ attributes["dry volume"] = settings.formulae.trivia.volume(radius=r_dry)
24
+ attributes["kappa times dry volume"] = attributes["dry volume"] * settings.kappa
25
+ attributes["multiplicity"] = np.array([settings.n_in_dv], dtype=np.int64)
26
+ environment = Parcel(
27
+ dt=dt_output / self.n_substeps,
28
+ mass_of_dry_air=settings.mass_of_dry_air,
29
+ p0=settings.p0,
30
+ initial_water_vapour_mixing_ratio=settings.initial_water_vapour_mixing_ratio,
31
+ T0=settings.T0,
32
+ w=settings.w,
22
33
  backend=backend(
23
34
  formulae=settings.formulae,
24
35
  **(
@@ -27,31 +38,7 @@ class Simulation:
27
38
  else {}
28
39
  ),
29
40
  ),
30
- n_sd=1,
31
- environment=Parcel(
32
- dt=dt_output / self.n_substeps,
33
- mass_of_dry_air=settings.mass_of_dry_air,
34
- p0=settings.p0,
35
- initial_water_vapour_mixing_ratio=settings.initial_water_vapour_mixing_ratio,
36
- T0=settings.T0,
37
- w=settings.w,
38
- ),
39
- dynamics=[
40
- AmbientThermodynamics(),
41
- Condensation(
42
- rtol_x=settings.rtol_x,
43
- rtol_thd=settings.rtol_thd,
44
- dt_cond_range=settings.dt_cond_range,
45
- ),
46
- ],
47
41
  )
48
-
49
- attributes = {}
50
- r_dry = np.array([settings.r_dry])
51
- attributes["dry volume"] = settings.formulae.trivia.volume(radius=r_dry)
52
- attributes["kappa times dry volume"] = attributes["dry volume"] * settings.kappa
53
- attributes["multiplicity"] = np.array([settings.n_in_dv], dtype=np.int64)
54
- environment = builder.particulator.environment
55
42
  r_wet = equilibrate_wet_radii(
56
43
  r_dry=r_dry,
57
44
  environment=environment,
@@ -72,7 +59,20 @@ class Simulation:
72
59
  PySDM_products.RipeningRate(unit="s^-1 mg^-1", name="ripening_rate"),
73
60
  ]
74
61
 
75
- self.particulator = builder.build(attributes, products)
62
+ self.particulator = Particulator(
63
+ n_sd=1,
64
+ dynamics=[
65
+ AmbientThermodynamics(),
66
+ Condensation(
67
+ rtol_x=settings.rtol_x,
68
+ rtol_thd=settings.rtol_thd,
69
+ dt_cond_range=settings.dt_cond_range,
70
+ ),
71
+ ],
72
+ attributes=attributes,
73
+ products=products,
74
+ environment=environment,
75
+ )
76
76
 
77
77
  self.n_output = settings.n_output
78
78
 
@@ -1,6 +1,6 @@
1
1
  import numpy as np
2
2
 
3
- from PySDM import Builder, Formulae
3
+ from PySDM import Particulator, Formulae
4
4
  from PySDM import products as PySDM_products
5
5
  from PySDM.backends import CPU
6
6
  from PySDM.dynamics import Freezing
@@ -65,22 +65,17 @@ def make_particulator(
65
65
  thaw_flag = None
66
66
  attributes["multiplicity"] *= total_particle_number
67
67
 
68
- builder = Builder(
69
- n_sd=n_sd,
70
- backend=backend,
71
- environment=Box(dt, volume),
72
- dynamics=[Freezing(immersion_freezing=immersion_freezing_flag, thaw=thaw_flag)],
73
- )
74
-
75
- env = builder.particulator.environment
68
+ env = Box(dt, volume, backend=backend)
76
69
  env["T"] = initial_temperature
77
70
  env["RH"] = A_VALUE_LARGER_THAN_ONE
78
71
  env["rhod"] = 1.0
79
72
 
80
- builder.request_attribute("volume")
81
-
82
- return builder.build(
73
+ return Particulator(
74
+ n_sd=n_sd,
75
+ environment=env,
76
+ dynamics=[Freezing(immersion_freezing=immersion_freezing_flag, thaw=thaw_flag)],
83
77
  attributes=attributes,
78
+ requested_attributes=("volume",),
84
79
  products=(
85
80
  PySDM_products.Time(name="t"),
86
81
  PySDM_products.AmbientTemperature(name="T"),
@@ -1,10 +1,8 @@
1
1
  import numpy as np
2
2
 
3
3
 
4
- def update_thermo(particulator, T):
5
- env = particulator.environment
6
- svp = particulator.formulae.saturation_vapour_pressure
7
-
4
+ def update_thermo(env, T):
5
+ svp = env.backend.formulae.saturation_vapour_pressure
8
6
  env["T"] = T
9
7
  env["a_w_ice"] = svp.pvs_ice(T) / svp.pvs_water(T)
10
8
 
@@ -17,10 +15,13 @@ def run_simulation(particulator, temperature_profile, n_steps):
17
15
  for step in range(n_steps + 1):
18
16
  if step != 0:
19
17
  update_thermo(
20
- particulator, T=temperature_profile((step - 0.5) * particulator.dt)
18
+ particulator.environment,
19
+ T=temperature_profile((step - 0.5) * particulator.dt),
21
20
  )
22
21
  particulator.run(step - particulator.n_steps)
23
- update_thermo(particulator, T=temperature_profile(step * particulator.dt))
22
+ update_thermo(
23
+ particulator.environment, T=temperature_profile(step * particulator.dt)
24
+ )
24
25
  output["frozen"].append(particulator.attributes["volume"].to_ndarray() < 0)
25
26
  else:
26
27
  output["spectrum"] = {}
@@ -1,6 +1,6 @@
1
1
  import PySDM.products.size_spectral.arbitrary_moment as am
2
2
  from PySDM.backends import CPU
3
- from PySDM.builder import Builder
3
+ from PySDM.particulator import Particulator
4
4
  from PySDM.dynamics import Collision
5
5
  from PySDM.environments import Box
6
6
  from PySDM.initialisation.sampling.spectral_sampling import ConstantMultiplicity
@@ -15,13 +15,13 @@ def make_core(settings, coal_eff):
15
15
  fragmentation_function=settings.fragmentation,
16
16
  adaptive=settings.adaptive,
17
17
  )
18
- builder = Builder(
19
- n_sd=settings.n_sd,
18
+ environment = Box(
19
+ dv=settings.dv,
20
+ dt=settings.dt,
20
21
  backend=backend(settings.formulae),
21
- environment=Box(dv=settings.dv, dt=settings.dt),
22
- dynamics=[collision],
23
22
  )
24
- builder.particulator.environment["rhod"] = 1.0
23
+
24
+ environment["rhod"] = 1.0
25
25
  attributes = {}
26
26
  attributes["volume"], attributes["multiplicity"] = ConstantMultiplicity(
27
27
  settings.spectrum
@@ -36,4 +36,10 @@ def make_core(settings, coal_eff):
36
36
  am.make_arbitrary_moment_product(rank=rank, **common_args)(name=f"M{rank}")
37
37
  for rank in range(3)
38
38
  )
39
- return builder.build(attributes, products)
39
+ return Particulator(
40
+ n_sd=settings.n_sd,
41
+ environment=environment,
42
+ dynamics=[collision],
43
+ attributes=attributes,
44
+ products=products,
45
+ )
@@ -1,7 +1,7 @@
1
1
  import numpy as np
2
2
  from PySDM_examples.utils import BasicSimulation
3
3
 
4
- from PySDM import Builder
4
+ from PySDM import Particulator
5
5
  from PySDM.backends import CPU
6
6
  from PySDM.backends.impl_numba.test_helpers import scipy_ode_condensation_solver
7
7
  from PySDM.dynamics import AmbientThermodynamics, Condensation
@@ -18,33 +18,19 @@ class Simulation(BasicSimulation):
18
18
  products=None,
19
19
  scipy_solver=False,
20
20
  ):
21
- builder = Builder(
22
- n_sd=settings.n_sd,
21
+
22
+ environment = Parcel(
23
+ dt=settings.timestep,
24
+ p0=settings.initial_pressure,
25
+ initial_relative_humidity=settings.initial_relative_humidity,
26
+ T0=settings.initial_temperature,
27
+ w=settings.vertical_velocity,
28
+ mass_of_dry_air=44 * si.kg,
23
29
  backend=CPU(
24
30
  formulae=settings.formulae, override_jit_flags={"parallel": False}
25
31
  ),
26
- environment=Parcel(
27
- dt=settings.timestep,
28
- p0=settings.initial_pressure,
29
- initial_relative_humidity=settings.initial_relative_humidity,
30
- T0=settings.initial_temperature,
31
- w=settings.vertical_velocity,
32
- mass_of_dry_air=44 * si.kg,
33
- ),
34
- dynamics=(
35
- AmbientThermodynamics(),
36
- Condensation(rtol_thd=settings.rtol_thd, rtol_x=settings.rtol_x),
37
- ),
38
32
  )
39
- for attribute in (
40
- "critical saturation",
41
- "equilibrium saturation",
42
- "critical volume",
43
- ):
44
- builder.request_attribute(attribute)
45
-
46
- env = builder.particulator.environment
47
- volume = env.mass_of_dry_air / settings.initial_air_density
33
+ volume = environment.mass_of_dry_air / settings.initial_air_density
48
34
  attributes = {
49
35
  k: np.empty(0)
50
36
  for k in ("dry volume", "kappa times dry volume", "multiplicity")
@@ -67,14 +53,28 @@ class Simulation(BasicSimulation):
67
53
  )
68
54
  r_wet = equilibrate_wet_radii(
69
55
  r_dry=settings.formulae.trivia.radius(volume=attributes["dry volume"]),
70
- environment=env,
56
+ environment=environment,
71
57
  kappa_times_dry_volume=attributes["kappa times dry volume"],
72
58
  )
73
59
  attributes["volume"] = settings.formulae.trivia.volume(radius=r_wet)
74
60
 
75
- super().__init__(
76
- particulator=builder.build(attributes=attributes, products=products)
61
+ particulator = Particulator(
62
+ n_sd=settings.n_sd,
63
+ environment=environment,
64
+ dynamics=(
65
+ AmbientThermodynamics(),
66
+ Condensation(rtol_thd=settings.rtol_thd, rtol_x=settings.rtol_x),
67
+ ),
68
+ attributes=attributes,
69
+ products=products,
70
+ requested_attributes=(
71
+ "critical saturation",
72
+ "equilibrium saturation",
73
+ "critical volume",
74
+ ),
77
75
  )
76
+
77
+ super().__init__(particulator=particulator)
78
78
  if scipy_solver:
79
79
  scipy_ode_condensation_solver.patch_particulator(self.particulator)
80
80