PySDM 2.35__tar.gz → 2.40__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 (762) hide show
  1. {PySDM-2.35 → PySDM-2.40}/.binder/postBuild +1 -1
  2. {PySDM-2.35 → PySDM-2.40}/.github/workflows/tests+artifacts+pypi.yml +7 -3
  3. {PySDM-2.35 → PySDM-2.40}/PKG-INFO +19 -9
  4. {PySDM-2.35 → PySDM-2.40}/PySDM/initialisation/aerosol_composition/dry_aerosol.py +9 -10
  5. {PySDM-2.35 → PySDM-2.40}/PySDM/physics/constants_defaults.py +42 -36
  6. {PySDM-2.35 → PySDM-2.40}/PySDM/physics/isotope_equilibrium_fractionation_factors/__init__.py +1 -0
  7. PySDM-2.40/PySDM/physics/isotope_equilibrium_fractionation_factors/graf_phd_2017.py +20 -0
  8. PySDM-2.40/PySDM/physics/isotope_equilibrium_fractionation_factors/majoube_1970.py +18 -0
  9. PySDM-2.40/PySDM/physics/isotope_equilibrium_fractionation_factors/majoube_1971.py +25 -0
  10. PySDM-2.40/PySDM/physics/isotope_equilibrium_fractionation_factors/merlivat_and_nief_1967.py +26 -0
  11. {PySDM-2.35 → PySDM-2.40}/PySDM/physics/isotope_equilibrium_fractionation_factors/van_hook_1968.py +32 -32
  12. {PySDM-2.35 → PySDM-2.40}/PySDM.egg-info/PKG-INFO +19 -9
  13. {PySDM-2.35 → PySDM-2.40}/PySDM.egg-info/SOURCES.txt +25 -2
  14. {PySDM-2.35 → PySDM-2.40}/README.md +18 -8
  15. {PySDM-2.35 → PySDM-2.40}/examples/PySDM_examples/Abdul_Razzak_Ghan_2000/aerosol.py +19 -6
  16. PySDM-2.40/examples/PySDM_examples/Abdul_Razzak_Ghan_2000/fig_4_kinetic_limitations.ipynb +8594 -0
  17. PySDM-2.40/examples/PySDM_examples/Abdul_Razzak_Ghan_2000/figs1-5.ipynb +484 -0
  18. {PySDM-2.35 → PySDM-2.40}/examples/PySDM_examples/Abdul_Razzak_Ghan_2000/run_ARG_parcel.py +4 -4
  19. PySDM-2.40/examples/PySDM_examples/Bolot_et_al_2013/fig_1.ipynb +2363 -0
  20. PySDM-2.40/examples/PySDM_examples/Graf_et_al_2019/Table_1.ipynb +289 -0
  21. PySDM-2.40/examples/PySDM_examples/Graf_et_al_2019/__init__.py +5 -0
  22. PySDM-2.40/examples/PySDM_examples/Graf_et_al_2019/figure_4.ipynb +398 -0
  23. {PySDM-2.35 → PySDM-2.40}/examples/PySDM_examples/Lowe_et_al_2019/aerosol.py +21 -9
  24. {PySDM-2.35 → PySDM-2.40}/examples/PySDM_examples/Lowe_et_al_2019/aerosol_code.py +27 -9
  25. {PySDM-2.35 → PySDM-2.40}/examples/PySDM_examples/Lowe_et_al_2019/fig_1.ipynb +41 -27
  26. PySDM-2.40/examples/PySDM_examples/Lowe_et_al_2019/fig_2.ipynb +231 -0
  27. {PySDM-2.35 → PySDM-2.40}/examples/PySDM_examples/Lowe_et_al_2019/fig_3.ipynb +20 -12
  28. PySDM-2.40/examples/PySDM_examples/Merlivat_and_Nief_1967/fig_2.ipynb +1427 -0
  29. PySDM-2.40/examples/PySDM_examples/Pyrcel/profile_plotter.py +67 -0
  30. PySDM-2.40/examples/PySDM_examples/Pyrcel/tutorial_settings.py +68 -0
  31. PySDM-2.40/examples/PySDM_examples/Pyrcel/tutorial_simulation.py +90 -0
  32. PySDM-2.40/examples/PySDM_examples/Shima_et_al_2009/tutorial_example.py +42 -0
  33. PySDM-2.40/examples/PySDM_examples/Shima_et_al_2009/tutorial_plotter.py +129 -0
  34. PySDM-2.40/examples/PySDM_examples/Shima_et_al_2009/tutorial_settings.py +35 -0
  35. {PySDM-2.35 → PySDM-2.40}/examples/PySDM_examples/Singer_Ward/MWE_joss_paper.ipynb +11 -3
  36. {PySDM-2.35 → PySDM-2.40}/examples/PySDM_examples/Singer_Ward/aerosol.py +16 -8
  37. {PySDM-2.35 → PySDM-2.40}/examples/PySDM_examples/Singer_Ward/kohler.ipynb +6 -4
  38. PySDM-2.40/examples/PySDM_examples/Van_Hook_1968/fig_1.ipynb +2025 -0
  39. {PySDM-2.35 → PySDM-2.40}/examples/PySDM_examples/utils/__init__.py +1 -0
  40. PySDM-2.35/tests/smoke_tests/no_env/pierchala_et_al_2022/utils.py → PySDM-2.40/examples/PySDM_examples/utils/notebook_vars.py +10 -7
  41. {PySDM-2.35 → PySDM-2.40}/examples/README.md +15 -10
  42. {PySDM-2.35 → PySDM-2.40}/tests/examples_tests/conftest.py +1 -0
  43. {PySDM-2.35 → PySDM-2.40}/tests/smoke_tests/no_env/pierchala_et_al_2022/test_fig_3.py +2 -1
  44. {PySDM-2.35 → PySDM-2.40}/tests/smoke_tests/no_env/pierchala_et_al_2022/test_fig_4.py +2 -1
  45. PySDM-2.40/tests/smoke_tests/parcel/abdul_razzak_ghan_2000/test_ARG_example.py +80 -0
  46. PySDM-2.40/tests/smoke_tests/parcel/graf_et_al_2019/test_fig_4.py +31 -0
  47. PySDM-2.40/tests/smoke_tests/parcel/graf_et_al_2019/test_table_1.py +54 -0
  48. PySDM-2.40/tests/smoke_tests/parcel/lowe_et_al_2019/test_dz_sensitivity.py +81 -0
  49. {PySDM-2.35 → PySDM-2.40}/tests/smoke_tests/parcel/lowe_et_al_2019/test_fig_1.py +39 -10
  50. {PySDM-2.35 → PySDM-2.40}/tests/smoke_tests/parcel/lowe_et_al_2019/test_fig_2.py +27 -7
  51. {PySDM-2.35 → PySDM-2.40}/tests/smoke_tests/parcel/lowe_et_al_2019/test_surface_tension_models.py +4 -2
  52. {PySDM-2.35 → PySDM-2.40}/tests/smoke_tests/parcel/lowe_et_al_2019/test_zero_forg.py +24 -4
  53. PySDM-2.40/tests/tutorials_tests/conftest.py +17 -0
  54. PySDM-2.40/tests/tutorials_tests/test_run_notebooks.py +6 -0
  55. {PySDM-2.35 → PySDM-2.40}/tests/unit_tests/initialisation/test_aerosol_init.py +3 -1
  56. PySDM-2.40/tests/unit_tests/physics/__init__.py +0 -0
  57. {PySDM-2.35 → PySDM-2.40}/tests/unit_tests/physics/test_isotope_equilibrium_fractionation_factors.py +4 -4
  58. PySDM-2.40/tests/unit_tests/products/__init__.py +0 -0
  59. PySDM-2.40/tutorials/README.md +15 -0
  60. PySDM-2.40/tutorials/collisions/collection_droplet.svg +169 -0
  61. PySDM-2.40/tutorials/collisions/collisions_playground.ipynb +241 -0
  62. PySDM-2.40/tutorials/condensation/condensation_playground.ipynb +333 -0
  63. PySDM-2.40/tutorials/condensation/kohler_curve.svg +242 -0
  64. PySDM-2.35/PySDM/physics/isotope_equilibrium_fractionation_factors/majoube_1970.py +0 -17
  65. PySDM-2.35/PySDM/physics/isotope_equilibrium_fractionation_factors/majoube_1971.py +0 -17
  66. PySDM-2.35/PySDM/physics/isotope_equilibrium_fractionation_factors/merlivat_and_nief_1967.py +0 -26
  67. PySDM-2.35/examples/PySDM_examples/Abdul_Razzak_Ghan_2000/fig_4_kinetic_limitations.ipynb +0 -175
  68. PySDM-2.35/examples/PySDM_examples/Abdul_Razzak_Ghan_2000/figs1-5.ipynb +0 -433
  69. PySDM-2.35/examples/PySDM_examples/Bolot_et_al_2013/fig_1.ipynb +0 -175
  70. PySDM-2.35/examples/PySDM_examples/Lowe_et_al_2019/fig_2.ipynb +0 -263
  71. PySDM-2.35/examples/PySDM_examples/Merlivat_and_Nief_1967/fig_2.ipynb +0 -183
  72. PySDM-2.35/examples/PySDM_examples/Van_Hook_1968/fig_1.ipynb +0 -183
  73. {PySDM-2.35 → PySDM-2.40}/.binder/requirements.txt +0 -0
  74. {PySDM-2.35 → PySDM-2.40}/.github/dependabot.yml +0 -0
  75. {PySDM-2.35 → PySDM-2.40}/.github/workflows/cancel.yml +0 -0
  76. {PySDM-2.35 → PySDM-2.40}/.github/workflows/joss.yml +0 -0
  77. {PySDM-2.35 → PySDM-2.40}/.github/workflows/joss_paper.yml +0 -0
  78. {PySDM-2.35 → PySDM-2.40}/.github/workflows/pdoc_index_workaround.py +0 -0
  79. {PySDM-2.35 → PySDM-2.40}/.github/workflows/readme_snippets.yml +0 -0
  80. {PySDM-2.35 → PySDM-2.40}/.github/workflows/stale.yml +0 -0
  81. {PySDM-2.35 → PySDM-2.40}/.gitignore +0 -0
  82. {PySDM-2.35 → PySDM-2.40}/.gitmodules +0 -0
  83. {PySDM-2.35 → PySDM-2.40}/.pre-commit-config.yaml +0 -0
  84. {PySDM-2.35 → PySDM-2.40}/.zenodo.json +0 -0
  85. {PySDM-2.35 → PySDM-2.40}/LICENSE +0 -0
  86. {PySDM-2.35 → PySDM-2.40}/PySDM/__init__.py +0 -0
  87. {PySDM-2.35 → PySDM-2.40}/PySDM/attributes/__init__.py +0 -0
  88. {PySDM-2.35 → PySDM-2.40}/PySDM/attributes/chemistry/__init__.py +0 -0
  89. {PySDM-2.35 → PySDM-2.40}/PySDM/attributes/chemistry/acidity.py +0 -0
  90. {PySDM-2.35 → PySDM-2.40}/PySDM/attributes/chemistry/concentration.py +0 -0
  91. {PySDM-2.35 → PySDM-2.40}/PySDM/attributes/chemistry/hydrogen_ion_concentration.py +0 -0
  92. {PySDM-2.35 → PySDM-2.40}/PySDM/attributes/ice/__init__.py +0 -0
  93. {PySDM-2.35 → PySDM-2.40}/PySDM/attributes/ice/cooling_rate.py +0 -0
  94. {PySDM-2.35 → PySDM-2.40}/PySDM/attributes/ice/freezing_temperature.py +0 -0
  95. {PySDM-2.35 → PySDM-2.40}/PySDM/attributes/ice/immersed_surface_area.py +0 -0
  96. {PySDM-2.35 → PySDM-2.40}/PySDM/attributes/impl/__init__.py +0 -0
  97. {PySDM-2.35 → PySDM-2.40}/PySDM/attributes/impl/attribute.py +0 -0
  98. {PySDM-2.35 → PySDM-2.40}/PySDM/attributes/impl/base_attribute.py +0 -0
  99. {PySDM-2.35 → PySDM-2.40}/PySDM/attributes/impl/cell_attribute.py +0 -0
  100. {PySDM-2.35 → PySDM-2.40}/PySDM/attributes/impl/derived_attribute.py +0 -0
  101. {PySDM-2.35 → PySDM-2.40}/PySDM/attributes/impl/dummy_attribute.py +0 -0
  102. {PySDM-2.35 → PySDM-2.40}/PySDM/attributes/impl/extensive_attribute.py +0 -0
  103. {PySDM-2.35 → PySDM-2.40}/PySDM/attributes/impl/intensive_attribute.py +0 -0
  104. {PySDM-2.35 → PySDM-2.40}/PySDM/attributes/impl/mapper.py +0 -0
  105. {PySDM-2.35 → PySDM-2.40}/PySDM/attributes/impl/maximum_attribute.py +0 -0
  106. {PySDM-2.35 → PySDM-2.40}/PySDM/attributes/impl/mole_amount.py +0 -0
  107. {PySDM-2.35 → PySDM-2.40}/PySDM/attributes/isotopes/__init__.py +0 -0
  108. {PySDM-2.35 → PySDM-2.40}/PySDM/attributes/isotopes/delta.py +0 -0
  109. {PySDM-2.35 → PySDM-2.40}/PySDM/attributes/isotopes/moles_light_isotopes.py +0 -0
  110. {PySDM-2.35 → PySDM-2.40}/PySDM/attributes/numerics/__init__.py +0 -0
  111. {PySDM-2.35 → PySDM-2.40}/PySDM/attributes/numerics/cell_id.py +0 -0
  112. {PySDM-2.35 → PySDM-2.40}/PySDM/attributes/numerics/cell_origin.py +0 -0
  113. {PySDM-2.35 → PySDM-2.40}/PySDM/attributes/numerics/position_in_cell.py +0 -0
  114. {PySDM-2.35 → PySDM-2.40}/PySDM/attributes/physics/__init__.py +0 -0
  115. {PySDM-2.35 → PySDM-2.40}/PySDM/attributes/physics/area.py +0 -0
  116. {PySDM-2.35 → PySDM-2.40}/PySDM/attributes/physics/critical_supersaturation.py +0 -0
  117. {PySDM-2.35 → PySDM-2.40}/PySDM/attributes/physics/critical_volume.py +0 -0
  118. {PySDM-2.35 → PySDM-2.40}/PySDM/attributes/physics/dry_radius.py +0 -0
  119. {PySDM-2.35 → PySDM-2.40}/PySDM/attributes/physics/dry_volume.py +0 -0
  120. {PySDM-2.35 → PySDM-2.40}/PySDM/attributes/physics/equilibrium_supersaturation.py +0 -0
  121. {PySDM-2.35 → PySDM-2.40}/PySDM/attributes/physics/heat.py +0 -0
  122. {PySDM-2.35 → PySDM-2.40}/PySDM/attributes/physics/hygroscopicity.py +0 -0
  123. {PySDM-2.35 → PySDM-2.40}/PySDM/attributes/physics/mass.py +0 -0
  124. {PySDM-2.35 → PySDM-2.40}/PySDM/attributes/physics/multiplicities.py +0 -0
  125. {PySDM-2.35 → PySDM-2.40}/PySDM/attributes/physics/radius.py +0 -0
  126. {PySDM-2.35 → PySDM-2.40}/PySDM/attributes/physics/relative_fall_velocity.py +0 -0
  127. {PySDM-2.35 → PySDM-2.40}/PySDM/attributes/physics/temperature.py +0 -0
  128. {PySDM-2.35 → PySDM-2.40}/PySDM/attributes/physics/terminal_velocity.py +0 -0
  129. {PySDM-2.35 → PySDM-2.40}/PySDM/attributes/physics/volume.py +0 -0
  130. {PySDM-2.35 → PySDM-2.40}/PySDM/backends/__init__.py +0 -0
  131. {PySDM-2.35 → PySDM-2.40}/PySDM/backends/impl_common/__init__.py +0 -0
  132. {PySDM-2.35 → PySDM-2.40}/PySDM/backends/impl_common/backend_methods.py +0 -0
  133. {PySDM-2.35 → PySDM-2.40}/PySDM/backends/impl_common/freezing_attributes.py +0 -0
  134. {PySDM-2.35 → PySDM-2.40}/PySDM/backends/impl_common/index.py +0 -0
  135. {PySDM-2.35 → PySDM-2.40}/PySDM/backends/impl_common/indexed_storage.py +0 -0
  136. {PySDM-2.35 → PySDM-2.40}/PySDM/backends/impl_common/pair_indicator.py +0 -0
  137. {PySDM-2.35 → PySDM-2.40}/PySDM/backends/impl_common/pairwise_storage.py +0 -0
  138. {PySDM-2.35 → PySDM-2.40}/PySDM/backends/impl_common/random_common.py +0 -0
  139. {PySDM-2.35 → PySDM-2.40}/PySDM/backends/impl_common/storage_utils.py +0 -0
  140. {PySDM-2.35 → PySDM-2.40}/PySDM/backends/impl_numba/__init__.py +0 -0
  141. {PySDM-2.35 → PySDM-2.40}/PySDM/backends/impl_numba/atomic_operations.py +0 -0
  142. {PySDM-2.35 → PySDM-2.40}/PySDM/backends/impl_numba/conf.py +0 -0
  143. {PySDM-2.35 → PySDM-2.40}/PySDM/backends/impl_numba/methods/__init__.py +0 -0
  144. {PySDM-2.35 → PySDM-2.40}/PySDM/backends/impl_numba/methods/chemistry_methods.py +0 -0
  145. {PySDM-2.35 → PySDM-2.40}/PySDM/backends/impl_numba/methods/collisions_methods.py +0 -0
  146. {PySDM-2.35 → PySDM-2.40}/PySDM/backends/impl_numba/methods/condensation_methods.py +0 -0
  147. {PySDM-2.35 → PySDM-2.40}/PySDM/backends/impl_numba/methods/displacement_methods.py +0 -0
  148. {PySDM-2.35 → PySDM-2.40}/PySDM/backends/impl_numba/methods/freezing_methods.py +0 -0
  149. {PySDM-2.35 → PySDM-2.40}/PySDM/backends/impl_numba/methods/index_methods.py +0 -0
  150. {PySDM-2.35 → PySDM-2.40}/PySDM/backends/impl_numba/methods/isotope_methods.py +0 -0
  151. {PySDM-2.35 → PySDM-2.40}/PySDM/backends/impl_numba/methods/moments_methods.py +0 -0
  152. {PySDM-2.35 → PySDM-2.40}/PySDM/backends/impl_numba/methods/pair_methods.py +0 -0
  153. {PySDM-2.35 → PySDM-2.40}/PySDM/backends/impl_numba/methods/physics_methods.py +0 -0
  154. {PySDM-2.35 → PySDM-2.40}/PySDM/backends/impl_numba/methods/terminal_velocity_methods.py +0 -0
  155. {PySDM-2.35 → PySDM-2.40}/PySDM/backends/impl_numba/random.py +0 -0
  156. {PySDM-2.35 → PySDM-2.40}/PySDM/backends/impl_numba/storage.py +0 -0
  157. {PySDM-2.35 → PySDM-2.40}/PySDM/backends/impl_numba/storage_impl.py +0 -0
  158. {PySDM-2.35 → PySDM-2.40}/PySDM/backends/impl_numba/test_helpers/__init__.py +0 -0
  159. {PySDM-2.35 → PySDM-2.40}/PySDM/backends/impl_numba/test_helpers/scipy_ode_condensation_solver.py +0 -0
  160. {PySDM-2.35 → PySDM-2.40}/PySDM/backends/impl_numba/toms748.py +0 -0
  161. {PySDM-2.35 → PySDM-2.40}/PySDM/backends/impl_numba/warnings.py +0 -0
  162. {PySDM-2.35 → PySDM-2.40}/PySDM/backends/impl_thrust_rtc/__init__.py +0 -0
  163. {PySDM-2.35 → PySDM-2.40}/PySDM/backends/impl_thrust_rtc/bisection.py +0 -0
  164. {PySDM-2.35 → PySDM-2.40}/PySDM/backends/impl_thrust_rtc/conf.py +0 -0
  165. {PySDM-2.35 → PySDM-2.40}/PySDM/backends/impl_thrust_rtc/methods/__init__.py +0 -0
  166. {PySDM-2.35 → PySDM-2.40}/PySDM/backends/impl_thrust_rtc/methods/collisions_methods.py +0 -0
  167. {PySDM-2.35 → PySDM-2.40}/PySDM/backends/impl_thrust_rtc/methods/condensation_methods.py +0 -0
  168. {PySDM-2.35 → PySDM-2.40}/PySDM/backends/impl_thrust_rtc/methods/displacement_methods.py +0 -0
  169. {PySDM-2.35 → PySDM-2.40}/PySDM/backends/impl_thrust_rtc/methods/freezing_methods.py +0 -0
  170. {PySDM-2.35 → PySDM-2.40}/PySDM/backends/impl_thrust_rtc/methods/index_methods.py +0 -0
  171. {PySDM-2.35 → PySDM-2.40}/PySDM/backends/impl_thrust_rtc/methods/isotope_methods.py +0 -0
  172. {PySDM-2.35 → PySDM-2.40}/PySDM/backends/impl_thrust_rtc/methods/moments_methods.py +0 -0
  173. {PySDM-2.35 → PySDM-2.40}/PySDM/backends/impl_thrust_rtc/methods/pair_methods.py +0 -0
  174. {PySDM-2.35 → PySDM-2.40}/PySDM/backends/impl_thrust_rtc/methods/physics_methods.py +0 -0
  175. {PySDM-2.35 → PySDM-2.40}/PySDM/backends/impl_thrust_rtc/methods/terminal_velocity_methods.py +0 -0
  176. {PySDM-2.35 → PySDM-2.40}/PySDM/backends/impl_thrust_rtc/methods/thrust_rtc_backend_methods.py +0 -0
  177. {PySDM-2.35 → PySDM-2.40}/PySDM/backends/impl_thrust_rtc/nice_thrust.py +0 -0
  178. {PySDM-2.35 → PySDM-2.40}/PySDM/backends/impl_thrust_rtc/random.py +0 -0
  179. {PySDM-2.35 → PySDM-2.40}/PySDM/backends/impl_thrust_rtc/storage.py +0 -0
  180. {PySDM-2.35 → PySDM-2.40}/PySDM/backends/impl_thrust_rtc/test_helpers/__init__.py +0 -0
  181. {PySDM-2.35 → PySDM-2.40}/PySDM/backends/impl_thrust_rtc/test_helpers/cpp2python.py +0 -0
  182. {PySDM-2.35 → PySDM-2.40}/PySDM/backends/impl_thrust_rtc/test_helpers/fake_thrust_rtc.py +0 -0
  183. {PySDM-2.35 → PySDM-2.40}/PySDM/backends/impl_thrust_rtc/test_helpers/flag.py +0 -0
  184. {PySDM-2.35 → PySDM-2.40}/PySDM/backends/numba.py +0 -0
  185. {PySDM-2.35 → PySDM-2.40}/PySDM/backends/thrust_rtc.py +0 -0
  186. {PySDM-2.35 → PySDM-2.40}/PySDM/builder.py +0 -0
  187. {PySDM-2.35 → PySDM-2.40}/PySDM/dynamics/__init__.py +0 -0
  188. {PySDM-2.35 → PySDM-2.40}/PySDM/dynamics/ambient_thermodynamics.py +0 -0
  189. {PySDM-2.35 → PySDM-2.40}/PySDM/dynamics/aqueous_chemistry.py +0 -0
  190. {PySDM-2.35 → PySDM-2.40}/PySDM/dynamics/collisions/__init__.py +0 -0
  191. {PySDM-2.35 → PySDM-2.40}/PySDM/dynamics/collisions/breakup_efficiencies/__init__.py +0 -0
  192. {PySDM-2.35 → PySDM-2.40}/PySDM/dynamics/collisions/breakup_efficiencies/constEb.py +0 -0
  193. {PySDM-2.35 → PySDM-2.40}/PySDM/dynamics/collisions/breakup_fragmentations/__init__.py +0 -0
  194. {PySDM-2.35 → PySDM-2.40}/PySDM/dynamics/collisions/breakup_fragmentations/always_n.py +0 -0
  195. {PySDM-2.35 → PySDM-2.40}/PySDM/dynamics/collisions/breakup_fragmentations/constant_mass.py +0 -0
  196. {PySDM-2.35 → PySDM-2.40}/PySDM/dynamics/collisions/breakup_fragmentations/expon_frag.py +0 -0
  197. {PySDM-2.35 → PySDM-2.40}/PySDM/dynamics/collisions/breakup_fragmentations/exponential.py +0 -0
  198. {PySDM-2.35 → PySDM-2.40}/PySDM/dynamics/collisions/breakup_fragmentations/feingold1988.py +0 -0
  199. {PySDM-2.35 → PySDM-2.40}/PySDM/dynamics/collisions/breakup_fragmentations/gaussian.py +0 -0
  200. {PySDM-2.35 → PySDM-2.40}/PySDM/dynamics/collisions/breakup_fragmentations/impl/__init__.py +0 -0
  201. {PySDM-2.35 → PySDM-2.40}/PySDM/dynamics/collisions/breakup_fragmentations/impl/volume_based.py +0 -0
  202. {PySDM-2.35 → PySDM-2.40}/PySDM/dynamics/collisions/breakup_fragmentations/lowlist82.py +0 -0
  203. {PySDM-2.35 → PySDM-2.40}/PySDM/dynamics/collisions/breakup_fragmentations/slams.py +0 -0
  204. {PySDM-2.35 → PySDM-2.40}/PySDM/dynamics/collisions/breakup_fragmentations/straub2010.py +0 -0
  205. {PySDM-2.35 → PySDM-2.40}/PySDM/dynamics/collisions/coalescence_efficiencies/__init__.py +0 -0
  206. {PySDM-2.35 → PySDM-2.40}/PySDM/dynamics/collisions/coalescence_efficiencies/_gravitational.py +0 -0
  207. {PySDM-2.35 → PySDM-2.40}/PySDM/dynamics/collisions/coalescence_efficiencies/_parameterized.py +0 -0
  208. {PySDM-2.35 → PySDM-2.40}/PySDM/dynamics/collisions/coalescence_efficiencies/berry1967.py +0 -0
  209. {PySDM-2.35 → PySDM-2.40}/PySDM/dynamics/collisions/coalescence_efficiencies/constEc.py +0 -0
  210. {PySDM-2.35 → PySDM-2.40}/PySDM/dynamics/collisions/coalescence_efficiencies/lowlist1982.py +0 -0
  211. {PySDM-2.35 → PySDM-2.40}/PySDM/dynamics/collisions/coalescence_efficiencies/specified_eff.py +0 -0
  212. {PySDM-2.35 → PySDM-2.40}/PySDM/dynamics/collisions/coalescence_efficiencies/straub2010.py +0 -0
  213. {PySDM-2.35 → PySDM-2.40}/PySDM/dynamics/collisions/collision.py +0 -0
  214. {PySDM-2.35 → PySDM-2.40}/PySDM/dynamics/collisions/collision_kernels/__init__.py +0 -0
  215. {PySDM-2.35 → PySDM-2.40}/PySDM/dynamics/collisions/collision_kernels/constantK.py +0 -0
  216. {PySDM-2.35 → PySDM-2.40}/PySDM/dynamics/collisions/collision_kernels/electric.py +0 -0
  217. {PySDM-2.35 → PySDM-2.40}/PySDM/dynamics/collisions/collision_kernels/geometric.py +0 -0
  218. {PySDM-2.35 → PySDM-2.40}/PySDM/dynamics/collisions/collision_kernels/golovin.py +0 -0
  219. {PySDM-2.35 → PySDM-2.40}/PySDM/dynamics/collisions/collision_kernels/hydrodynamic.py +0 -0
  220. {PySDM-2.35 → PySDM-2.40}/PySDM/dynamics/collisions/collision_kernels/impl/__init__.py +0 -0
  221. {PySDM-2.35 → PySDM-2.40}/PySDM/dynamics/collisions/collision_kernels/impl/gravitational.py +0 -0
  222. {PySDM-2.35 → PySDM-2.40}/PySDM/dynamics/collisions/collision_kernels/impl/parameterized.py +0 -0
  223. {PySDM-2.35 → PySDM-2.40}/PySDM/dynamics/collisions/collision_kernels/linear.py +0 -0
  224. {PySDM-2.35 → PySDM-2.40}/PySDM/dynamics/collisions/collision_kernels/simple_geometric.py +0 -0
  225. {PySDM-2.35 → PySDM-2.40}/PySDM/dynamics/condensation.py +0 -0
  226. {PySDM-2.35 → PySDM-2.40}/PySDM/dynamics/displacement.py +0 -0
  227. {PySDM-2.35 → PySDM-2.40}/PySDM/dynamics/eulerian_advection.py +0 -0
  228. {PySDM-2.35 → PySDM-2.40}/PySDM/dynamics/freezing.py +0 -0
  229. {PySDM-2.35 → PySDM-2.40}/PySDM/dynamics/impl/__init__.py +0 -0
  230. {PySDM-2.35 → PySDM-2.40}/PySDM/dynamics/impl/chemistry_utils.py +0 -0
  231. {PySDM-2.35 → PySDM-2.40}/PySDM/dynamics/impl/random_generator_optimizer.py +0 -0
  232. {PySDM-2.35 → PySDM-2.40}/PySDM/dynamics/impl/random_generator_optimizer_nopair.py +0 -0
  233. {PySDM-2.35 → PySDM-2.40}/PySDM/dynamics/isotopic_fractionation.py +0 -0
  234. {PySDM-2.35 → PySDM-2.40}/PySDM/dynamics/relaxed_velocity.py +0 -0
  235. {PySDM-2.35 → PySDM-2.40}/PySDM/dynamics/terminal_velocity/__init__.py +0 -0
  236. {PySDM-2.35 → PySDM-2.40}/PySDM/dynamics/terminal_velocity/gunn_and_kinzer.py +0 -0
  237. {PySDM-2.35 → PySDM-2.40}/PySDM/dynamics/terminal_velocity/rogers_and_yau.py +0 -0
  238. {PySDM-2.35 → PySDM-2.40}/PySDM/environments/__init__.py +0 -0
  239. {PySDM-2.35 → PySDM-2.40}/PySDM/environments/box.py +0 -0
  240. {PySDM-2.35 → PySDM-2.40}/PySDM/environments/impl/__init__.py +0 -0
  241. {PySDM-2.35 → PySDM-2.40}/PySDM/environments/impl/moist.py +0 -0
  242. {PySDM-2.35 → PySDM-2.40}/PySDM/environments/kinematic_1d.py +0 -0
  243. {PySDM-2.35 → PySDM-2.40}/PySDM/environments/kinematic_2d.py +0 -0
  244. {PySDM-2.35 → PySDM-2.40}/PySDM/environments/parcel.py +0 -0
  245. {PySDM-2.35 → PySDM-2.40}/PySDM/exporters/__init__.py +0 -0
  246. {PySDM-2.35 → PySDM-2.40}/PySDM/exporters/netcdf_exporter.py +0 -0
  247. {PySDM-2.35 → PySDM-2.40}/PySDM/exporters/netcdf_exporter_1d.py +0 -0
  248. {PySDM-2.35 → PySDM-2.40}/PySDM/exporters/vtk_exporter.py +0 -0
  249. {PySDM-2.35 → PySDM-2.40}/PySDM/exporters/vtk_exporter_1d.py +0 -0
  250. {PySDM-2.35 → PySDM-2.40}/PySDM/formulae.py +0 -0
  251. {PySDM-2.35 → PySDM-2.40}/PySDM/impl/__init__.py +0 -0
  252. {PySDM-2.35 → PySDM-2.40}/PySDM/impl/arakawa_c.py +0 -0
  253. {PySDM-2.35 → PySDM-2.40}/PySDM/impl/mesh.py +0 -0
  254. {PySDM-2.35 → PySDM-2.40}/PySDM/impl/particle_attributes.py +0 -0
  255. {PySDM-2.35 → PySDM-2.40}/PySDM/impl/particle_attributes_factory.py +0 -0
  256. {PySDM-2.35 → PySDM-2.40}/PySDM/impl/wall_timer.py +0 -0
  257. {PySDM-2.35 → PySDM-2.40}/PySDM/initialisation/__init__.py +0 -0
  258. {PySDM-2.35 → PySDM-2.40}/PySDM/initialisation/aerosol_composition/__init__.py +0 -0
  259. {PySDM-2.35 → PySDM-2.40}/PySDM/initialisation/discretise_multiplicities.py +0 -0
  260. {PySDM-2.35 → PySDM-2.40}/PySDM/initialisation/equilibrate_wet_radii.py +0 -0
  261. {PySDM-2.35 → PySDM-2.40}/PySDM/initialisation/impl/__init__.py +0 -0
  262. {PySDM-2.35 → PySDM-2.40}/PySDM/initialisation/impl/spectrum.py +0 -0
  263. {PySDM-2.35 → PySDM-2.40}/PySDM/initialisation/init_fall_momenta.py +0 -0
  264. {PySDM-2.35 → PySDM-2.40}/PySDM/initialisation/sampling/__init__.py +0 -0
  265. {PySDM-2.35 → PySDM-2.40}/PySDM/initialisation/sampling/spatial_sampling.py +0 -0
  266. {PySDM-2.35 → PySDM-2.40}/PySDM/initialisation/sampling/spectral_sampling.py +0 -0
  267. {PySDM-2.35 → PySDM-2.40}/PySDM/initialisation/sampling/spectro_glacial_sampling.py +0 -0
  268. {PySDM-2.35 → PySDM-2.40}/PySDM/initialisation/spectra/__init__.py +0 -0
  269. {PySDM-2.35 → PySDM-2.40}/PySDM/initialisation/spectra/exponential.py +0 -0
  270. {PySDM-2.35 → PySDM-2.40}/PySDM/initialisation/spectra/gamma.py +0 -0
  271. {PySDM-2.35 → PySDM-2.40}/PySDM/initialisation/spectra/gaussian.py +0 -0
  272. {PySDM-2.35 → PySDM-2.40}/PySDM/initialisation/spectra/lognormal.py +0 -0
  273. {PySDM-2.35 → PySDM-2.40}/PySDM/initialisation/spectra/sum.py +0 -0
  274. {PySDM-2.35 → PySDM-2.40}/PySDM/initialisation/spectra/top_hat.py +0 -0
  275. {PySDM-2.35 → PySDM-2.40}/PySDM/particulator.py +0 -0
  276. {PySDM-2.35 → PySDM-2.40}/PySDM/physics/__init__.py +0 -0
  277. {PySDM-2.35 → PySDM-2.40}/PySDM/physics/condensation_coordinate/__init__.py +0 -0
  278. {PySDM-2.35 → PySDM-2.40}/PySDM/physics/condensation_coordinate/volume.py +0 -0
  279. {PySDM-2.35 → PySDM-2.40}/PySDM/physics/condensation_coordinate/volume_logarithm.py +0 -0
  280. {PySDM-2.35 → PySDM-2.40}/PySDM/physics/constants.py +0 -0
  281. {PySDM-2.35 → PySDM-2.40}/PySDM/physics/diffusion_kinetics/__init__.py +0 -0
  282. {PySDM-2.35 → PySDM-2.40}/PySDM/physics/diffusion_kinetics/fuchs_sutugin.py +0 -0
  283. {PySDM-2.35 → PySDM-2.40}/PySDM/physics/diffusion_kinetics/lowe_et_al_2019.py +0 -0
  284. {PySDM-2.35 → PySDM-2.40}/PySDM/physics/diffusion_kinetics/neglect.py +0 -0
  285. {PySDM-2.35 → PySDM-2.40}/PySDM/physics/diffusion_kinetics/pruppacher_and_klett_2005.py +0 -0
  286. {PySDM-2.35 → PySDM-2.40}/PySDM/physics/diffusion_thermics/__init__.py +0 -0
  287. {PySDM-2.35 → PySDM-2.40}/PySDM/physics/diffusion_thermics/lowe_et_al_2019.py +0 -0
  288. {PySDM-2.35 → PySDM-2.40}/PySDM/physics/diffusion_thermics/neglect.py +0 -0
  289. {PySDM-2.35 → PySDM-2.40}/PySDM/physics/diffusion_thermics/seinfeld_and_pandis_2010.py +0 -0
  290. {PySDM-2.35 → PySDM-2.40}/PySDM/physics/diffusion_thermics/tracy_welch_porter.py +0 -0
  291. {PySDM-2.35 → PySDM-2.40}/PySDM/physics/dimensional_analysis.py +0 -0
  292. {PySDM-2.35 → PySDM-2.40}/PySDM/physics/drop_growth/__init__.py +0 -0
  293. {PySDM-2.35 → PySDM-2.40}/PySDM/physics/drop_growth/maxwell_mason.py +0 -0
  294. {PySDM-2.35 → PySDM-2.40}/PySDM/physics/fragmentation_function/__init__.py +0 -0
  295. {PySDM-2.35 → PySDM-2.40}/PySDM/physics/fragmentation_function/always_n.py +0 -0
  296. {PySDM-2.35 → PySDM-2.40}/PySDM/physics/fragmentation_function/constant_mass.py +0 -0
  297. {PySDM-2.35 → PySDM-2.40}/PySDM/physics/fragmentation_function/expon_frag.py +0 -0
  298. {PySDM-2.35 → PySDM-2.40}/PySDM/physics/fragmentation_function/exponential.py +0 -0
  299. {PySDM-2.35 → PySDM-2.40}/PySDM/physics/fragmentation_function/feingold1988.py +0 -0
  300. {PySDM-2.35 → PySDM-2.40}/PySDM/physics/fragmentation_function/gaussian.py +0 -0
  301. {PySDM-2.35 → PySDM-2.40}/PySDM/physics/fragmentation_function/lowlist82.py +0 -0
  302. {PySDM-2.35 → PySDM-2.40}/PySDM/physics/fragmentation_function/slams.py +0 -0
  303. {PySDM-2.35 → PySDM-2.40}/PySDM/physics/fragmentation_function/straub2010nf.py +0 -0
  304. {PySDM-2.35 → PySDM-2.40}/PySDM/physics/freezing_temperature_spectrum/__init__.py +0 -0
  305. {PySDM-2.35 → PySDM-2.40}/PySDM/physics/freezing_temperature_spectrum/bigg_1953.py +0 -0
  306. {PySDM-2.35 → PySDM-2.40}/PySDM/physics/freezing_temperature_spectrum/niemand_et_al_2012.py +0 -0
  307. {PySDM-2.35 → PySDM-2.40}/PySDM/physics/freezing_temperature_spectrum/null.py +0 -0
  308. {PySDM-2.35 → PySDM-2.40}/PySDM/physics/heterogeneous_ice_nucleation_rate/__init__.py +0 -0
  309. {PySDM-2.35 → PySDM-2.40}/PySDM/physics/heterogeneous_ice_nucleation_rate/abifm.py +0 -0
  310. {PySDM-2.35 → PySDM-2.40}/PySDM/physics/heterogeneous_ice_nucleation_rate/constant.py +0 -0
  311. {PySDM-2.35 → PySDM-2.40}/PySDM/physics/heterogeneous_ice_nucleation_rate/null.py +0 -0
  312. {PySDM-2.35 → PySDM-2.40}/PySDM/physics/hydrostatics/__init__.py +0 -0
  313. {PySDM-2.35 → PySDM-2.40}/PySDM/physics/hydrostatics/default.py +0 -0
  314. {PySDM-2.35 → PySDM-2.40}/PySDM/physics/hygroscopicity/__init__.py +0 -0
  315. {PySDM-2.35 → PySDM-2.40}/PySDM/physics/hygroscopicity/kappa_koehler.py +0 -0
  316. {PySDM-2.35 → PySDM-2.40}/PySDM/physics/hygroscopicity/kappa_koehler_leading_terms.py +0 -0
  317. {PySDM-2.35 → PySDM-2.40}/PySDM/physics/impl/__init__.py +0 -0
  318. {PySDM-2.35 → PySDM-2.40}/PySDM/physics/impl/fake_unit_registry.py +0 -0
  319. {PySDM-2.35 → PySDM-2.40}/PySDM/physics/impl/flag.py +0 -0
  320. {PySDM-2.35 → PySDM-2.40}/PySDM/physics/isotope_equilibrium_fractionation_factors/barkan_and_luz_2005.py +0 -0
  321. {PySDM-2.35 → PySDM-2.40}/PySDM/physics/isotope_equilibrium_fractionation_factors/bolot_et_al_2013.py +0 -0
  322. {PySDM-2.35 → PySDM-2.40}/PySDM/physics/isotope_equilibrium_fractionation_factors/horita_and_wesolowski_1994.py +0 -0
  323. {PySDM-2.35 → PySDM-2.40}/PySDM/physics/isotope_equilibrium_fractionation_factors/null.py +0 -0
  324. {PySDM-2.35 → PySDM-2.40}/PySDM/physics/isotope_equilibrium_fractionation_factors/pierchala_et_al_2022.py +0 -0
  325. {PySDM-2.35 → PySDM-2.40}/PySDM/physics/isotope_meteoric_water_line_excess/__init__.py +0 -0
  326. {PySDM-2.35 → PySDM-2.40}/PySDM/physics/isotope_meteoric_water_line_excess/barkan_and_luz_2007.py +0 -0
  327. {PySDM-2.35 → PySDM-2.40}/PySDM/physics/isotope_meteoric_water_line_excess/dansgaard_1964.py +0 -0
  328. {PySDM-2.35 → PySDM-2.40}/PySDM/physics/isotope_meteoric_water_line_excess/null.py +0 -0
  329. {PySDM-2.35 → PySDM-2.40}/PySDM/physics/isotope_meteoric_water_line_excess/pierchala_et_al_2022.py +0 -0
  330. {PySDM-2.35 → PySDM-2.40}/PySDM/physics/isotope_ratio_evolution/__init__.py +0 -0
  331. {PySDM-2.35 → PySDM-2.40}/PySDM/physics/isotope_ratio_evolution/merlivat_and_jouzel_1979.py +0 -0
  332. {PySDM-2.35 → PySDM-2.40}/PySDM/physics/isotope_ratio_evolution/null.py +0 -0
  333. {PySDM-2.35 → PySDM-2.40}/PySDM/physics/isotope_ratio_evolution/rayleigh_distillation.py +0 -0
  334. {PySDM-2.35 → PySDM-2.40}/PySDM/physics/latent_heat/__init__.py +0 -0
  335. {PySDM-2.35 → PySDM-2.40}/PySDM/physics/latent_heat/constant.py +0 -0
  336. {PySDM-2.35 → PySDM-2.40}/PySDM/physics/latent_heat/kirchhoff.py +0 -0
  337. {PySDM-2.35 → PySDM-2.40}/PySDM/physics/latent_heat/lowe2019.py +0 -0
  338. {PySDM-2.35 → PySDM-2.40}/PySDM/physics/latent_heat/seinfeld_and_pandis_2010.py +0 -0
  339. {PySDM-2.35 → PySDM-2.40}/PySDM/physics/particle_advection/__init__.py +0 -0
  340. {PySDM-2.35 → PySDM-2.40}/PySDM/physics/particle_advection/explicit_in_space.py +0 -0
  341. {PySDM-2.35 → PySDM-2.40}/PySDM/physics/particle_advection/implicit_in_space.py +0 -0
  342. {PySDM-2.35 → PySDM-2.40}/PySDM/physics/particle_shape_and_density/__init__.py +0 -0
  343. {PySDM-2.35 → PySDM-2.40}/PySDM/physics/particle_shape_and_density/liquid_spheres.py +0 -0
  344. {PySDM-2.35 → PySDM-2.40}/PySDM/physics/particle_shape_and_density/mixed_phase_spheres.py +0 -0
  345. {PySDM-2.35 → PySDM-2.40}/PySDM/physics/particle_shape_and_density/porous_spheroids.py +0 -0
  346. {PySDM-2.35 → PySDM-2.40}/PySDM/physics/saturation_vapour_pressure/__init__.py +0 -0
  347. {PySDM-2.35 → PySDM-2.40}/PySDM/physics/saturation_vapour_pressure/august_roche_magnus.py +0 -0
  348. {PySDM-2.35 → PySDM-2.40}/PySDM/physics/saturation_vapour_pressure/flatau_walko_cotton.py +0 -0
  349. {PySDM-2.35 → PySDM-2.40}/PySDM/physics/saturation_vapour_pressure/lowe1977.py +0 -0
  350. {PySDM-2.35 → PySDM-2.40}/PySDM/physics/saturation_vapour_pressure/murphy_koop_2005.py +0 -0
  351. {PySDM-2.35 → PySDM-2.40}/PySDM/physics/state_variable_triplet/__init__.py +0 -0
  352. {PySDM-2.35 → PySDM-2.40}/PySDM/physics/state_variable_triplet/libcloudphplusplus.py +0 -0
  353. {PySDM-2.35 → PySDM-2.40}/PySDM/physics/surface_tension/__init__.py +0 -0
  354. {PySDM-2.35 → PySDM-2.40}/PySDM/physics/surface_tension/compressed_film_ovadnevaite.py +0 -0
  355. {PySDM-2.35 → PySDM-2.40}/PySDM/physics/surface_tension/compressed_film_ruehl.py +0 -0
  356. {PySDM-2.35 → PySDM-2.40}/PySDM/physics/surface_tension/constant.py +0 -0
  357. {PySDM-2.35 → PySDM-2.40}/PySDM/physics/surface_tension/szyszkowski_langmuir.py +0 -0
  358. {PySDM-2.35 → PySDM-2.40}/PySDM/physics/trivia.py +0 -0
  359. {PySDM-2.35 → PySDM-2.40}/PySDM/physics/ventilation/__init__.py +0 -0
  360. {PySDM-2.35 → PySDM-2.40}/PySDM/physics/ventilation/neglect.py +0 -0
  361. {PySDM-2.35 → PySDM-2.40}/PySDM/products/__init__.py +0 -0
  362. {PySDM-2.35 → PySDM-2.40}/PySDM/products/ambient_thermodynamics/__init__.py +0 -0
  363. {PySDM-2.35 → PySDM-2.40}/PySDM/products/ambient_thermodynamics/ambient_dry_air_density.py +0 -0
  364. {PySDM-2.35 → PySDM-2.40}/PySDM/products/ambient_thermodynamics/ambient_dry_air_potential_temperature.py +0 -0
  365. {PySDM-2.35 → PySDM-2.40}/PySDM/products/ambient_thermodynamics/ambient_pressure.py +0 -0
  366. {PySDM-2.35 → PySDM-2.40}/PySDM/products/ambient_thermodynamics/ambient_relative_humidity.py +0 -0
  367. {PySDM-2.35 → PySDM-2.40}/PySDM/products/ambient_thermodynamics/ambient_temperature.py +0 -0
  368. {PySDM-2.35 → PySDM-2.40}/PySDM/products/ambient_thermodynamics/ambient_water_vapour_mixing_ratio.py +0 -0
  369. {PySDM-2.35 → PySDM-2.40}/PySDM/products/aqueous_chemistry/__init__.py +0 -0
  370. {PySDM-2.35 → PySDM-2.40}/PySDM/products/aqueous_chemistry/acidity.py +0 -0
  371. {PySDM-2.35 → PySDM-2.40}/PySDM/products/aqueous_chemistry/aqueous_mass_spectrum.py +0 -0
  372. {PySDM-2.35 → PySDM-2.40}/PySDM/products/aqueous_chemistry/aqueous_mole_fraction.py +0 -0
  373. {PySDM-2.35 → PySDM-2.40}/PySDM/products/aqueous_chemistry/gaseous_mole_fraction.py +0 -0
  374. {PySDM-2.35 → PySDM-2.40}/PySDM/products/aqueous_chemistry/total_dry_mass_mixing_ratio.py +0 -0
  375. {PySDM-2.35 → PySDM-2.40}/PySDM/products/collision/__init__.py +0 -0
  376. {PySDM-2.35 → PySDM-2.40}/PySDM/products/collision/collision_rates.py +0 -0
  377. {PySDM-2.35 → PySDM-2.40}/PySDM/products/collision/collision_timestep_mean.py +0 -0
  378. {PySDM-2.35 → PySDM-2.40}/PySDM/products/collision/collision_timestep_min.py +0 -0
  379. {PySDM-2.35 → PySDM-2.40}/PySDM/products/condensation/__init__.py +0 -0
  380. {PySDM-2.35 → PySDM-2.40}/PySDM/products/condensation/activable_fraction.py +0 -0
  381. {PySDM-2.35 → PySDM-2.40}/PySDM/products/condensation/condensation_timestep.py +0 -0
  382. {PySDM-2.35 → PySDM-2.40}/PySDM/products/condensation/event_rates.py +0 -0
  383. {PySDM-2.35 → PySDM-2.40}/PySDM/products/condensation/peak_supersaturation.py +0 -0
  384. {PySDM-2.35 → PySDM-2.40}/PySDM/products/displacement/__init__.py +0 -0
  385. {PySDM-2.35 → PySDM-2.40}/PySDM/products/displacement/averaged_terminal_velocity.py +0 -0
  386. {PySDM-2.35 → PySDM-2.40}/PySDM/products/displacement/flow_velocity_component.py +0 -0
  387. {PySDM-2.35 → PySDM-2.40}/PySDM/products/displacement/max_courant_number.py +0 -0
  388. {PySDM-2.35 → PySDM-2.40}/PySDM/products/displacement/surface_precipitation.py +0 -0
  389. {PySDM-2.35 → PySDM-2.40}/PySDM/products/freezing/__init__.py +0 -0
  390. {PySDM-2.35 → PySDM-2.40}/PySDM/products/freezing/cooling_rate.py +0 -0
  391. {PySDM-2.35 → PySDM-2.40}/PySDM/products/freezing/freezable_specific_concentration.py +0 -0
  392. {PySDM-2.35 → PySDM-2.40}/PySDM/products/freezing/frozen_particle_concentration.py +0 -0
  393. {PySDM-2.35 → PySDM-2.40}/PySDM/products/freezing/ice_nuclei_concentration.py +0 -0
  394. {PySDM-2.35 → PySDM-2.40}/PySDM/products/freezing/ice_water_content.py +0 -0
  395. {PySDM-2.35 → PySDM-2.40}/PySDM/products/freezing/total_unfrozen_immersed_surface_area.py +0 -0
  396. {PySDM-2.35 → PySDM-2.40}/PySDM/products/housekeeping/__init__.py +0 -0
  397. {PySDM-2.35 → PySDM-2.40}/PySDM/products/housekeeping/dynamic_wall_time.py +0 -0
  398. {PySDM-2.35 → PySDM-2.40}/PySDM/products/housekeeping/parcel_displacement.py +0 -0
  399. {PySDM-2.35 → PySDM-2.40}/PySDM/products/housekeeping/super_droplet_count_per_gridbox.py +0 -0
  400. {PySDM-2.35 → PySDM-2.40}/PySDM/products/housekeeping/time.py +0 -0
  401. {PySDM-2.35 → PySDM-2.40}/PySDM/products/housekeeping/timers.py +0 -0
  402. {PySDM-2.35 → PySDM-2.40}/PySDM/products/impl/__init__.py +0 -0
  403. {PySDM-2.35 → PySDM-2.40}/PySDM/products/impl/activation_filtered_product.py +0 -0
  404. {PySDM-2.35 → PySDM-2.40}/PySDM/products/impl/concentration_product.py +0 -0
  405. {PySDM-2.35 → PySDM-2.40}/PySDM/products/impl/moist_environment_product.py +0 -0
  406. {PySDM-2.35 → PySDM-2.40}/PySDM/products/impl/moment_product.py +0 -0
  407. {PySDM-2.35 → PySDM-2.40}/PySDM/products/impl/product.py +0 -0
  408. {PySDM-2.35 → PySDM-2.40}/PySDM/products/impl/rate_product.py +0 -0
  409. {PySDM-2.35 → PySDM-2.40}/PySDM/products/impl/spectrum_moment_product.py +0 -0
  410. {PySDM-2.35 → PySDM-2.40}/PySDM/products/size_spectral/__init__.py +0 -0
  411. {PySDM-2.35 → PySDM-2.40}/PySDM/products/size_spectral/arbitrary_moment.py +0 -0
  412. {PySDM-2.35 → PySDM-2.40}/PySDM/products/size_spectral/effective_radius.py +0 -0
  413. {PySDM-2.35 → PySDM-2.40}/PySDM/products/size_spectral/mean_radius.py +0 -0
  414. {PySDM-2.35 → PySDM-2.40}/PySDM/products/size_spectral/mean_radius_activated.py +0 -0
  415. {PySDM-2.35 → PySDM-2.40}/PySDM/products/size_spectral/mean_volume_radius.py +0 -0
  416. {PySDM-2.35 → PySDM-2.40}/PySDM/products/size_spectral/number_size_spectrum.py +0 -0
  417. {PySDM-2.35 → PySDM-2.40}/PySDM/products/size_spectral/particle_concentration.py +0 -0
  418. {PySDM-2.35 → PySDM-2.40}/PySDM/products/size_spectral/particle_concentration_activated.py +0 -0
  419. {PySDM-2.35 → PySDM-2.40}/PySDM/products/size_spectral/particle_size_spectrum.py +0 -0
  420. {PySDM-2.35 → PySDM-2.40}/PySDM/products/size_spectral/particle_volume_versus_radius_logarithm_spectrum.py +0 -0
  421. {PySDM-2.35 → PySDM-2.40}/PySDM/products/size_spectral/radius_binned_number_averaged_terminal_velocity.py +0 -0
  422. {PySDM-2.35 → PySDM-2.40}/PySDM/products/size_spectral/size_standard_deviation.py +0 -0
  423. {PySDM-2.35 → PySDM-2.40}/PySDM/products/size_spectral/total_particle_concentration.py +0 -0
  424. {PySDM-2.35 → PySDM-2.40}/PySDM/products/size_spectral/total_particle_specific_concentration.py +0 -0
  425. {PySDM-2.35 → PySDM-2.40}/PySDM/products/size_spectral/water_mixing_ratio.py +0 -0
  426. {PySDM-2.35 → PySDM-2.40}/PySDM.egg-info/dependency_links.txt +0 -0
  427. {PySDM-2.35 → PySDM-2.40}/PySDM.egg-info/requires.txt +0 -0
  428. {PySDM-2.35 → PySDM-2.40}/PySDM.egg-info/top_level.txt +0 -0
  429. {PySDM-2.35 → PySDM-2.40}/appveyor.yml +0 -0
  430. {PySDM-2.35 → PySDM-2.40}/examples/MANIFEST.in +0 -0
  431. {PySDM-2.35 → PySDM-2.40}/examples/PySDM_examples/Abdul_Razzak_Ghan_2000/__init__.py +0 -0
  432. {PySDM-2.35 → PySDM-2.40}/examples/PySDM_examples/Abdul_Razzak_Ghan_2000/data_from_ARG2000_paper.py +0 -0
  433. {PySDM-2.35 → PySDM-2.40}/examples/PySDM_examples/Abdul_Razzak_Ghan_2000/data_from_CloudMicrophysics_ARG.py +0 -0
  434. {PySDM-2.35 → PySDM-2.40}/examples/PySDM_examples/Alpert_and_Knopf_2016/__init__.py +0 -0
  435. {PySDM-2.35 → PySDM-2.40}/examples/PySDM_examples/Alpert_and_Knopf_2016/fig_1.ipynb +0 -0
  436. {PySDM-2.35 → PySDM-2.40}/examples/PySDM_examples/Alpert_and_Knopf_2016/fig_2.ipynb +0 -0
  437. {PySDM-2.35 → PySDM-2.40}/examples/PySDM_examples/Alpert_and_Knopf_2016/fig_3.ipynb +0 -0
  438. {PySDM-2.35 → PySDM-2.40}/examples/PySDM_examples/Alpert_and_Knopf_2016/fig_4.ipynb +0 -0
  439. {PySDM-2.35 → PySDM-2.40}/examples/PySDM_examples/Alpert_and_Knopf_2016/fig_5.ipynb +0 -0
  440. {PySDM-2.35 → PySDM-2.40}/examples/PySDM_examples/Alpert_and_Knopf_2016/simulation.py +0 -0
  441. {PySDM-2.35 → PySDM-2.40}/examples/PySDM_examples/Alpert_and_Knopf_2016/table.py +0 -0
  442. {PySDM-2.35 → PySDM-2.40}/examples/PySDM_examples/Alpert_and_Knopf_2016/table_1.py +0 -0
  443. {PySDM-2.35 → PySDM-2.40}/examples/PySDM_examples/Alpert_and_Knopf_2016/table_2.py +0 -0
  444. {PySDM-2.35 → PySDM-2.40}/examples/PySDM_examples/Arabas_and_Shima_2017/__init__.py +0 -0
  445. {PySDM-2.35 → PySDM-2.40}/examples/PySDM_examples/Arabas_and_Shima_2017/example.py +0 -0
  446. {PySDM-2.35 → PySDM-2.40}/examples/PySDM_examples/Arabas_and_Shima_2017/fig_5.ipynb +0 -0
  447. {PySDM-2.35 → PySDM-2.40}/examples/PySDM_examples/Arabas_and_Shima_2017/settings.py +0 -0
  448. {PySDM-2.35 → PySDM-2.40}/examples/PySDM_examples/Arabas_and_Shima_2017/simulation.py +0 -0
  449. {PySDM-2.35 → PySDM-2.40}/examples/PySDM_examples/Arabas_et_al_2015/__init__.py +0 -0
  450. {PySDM-2.35 → PySDM-2.40}/examples/PySDM_examples/Arabas_et_al_2015/example.py +0 -0
  451. {PySDM-2.35 → PySDM-2.40}/examples/PySDM_examples/Arabas_et_al_2015/example_benchmark.py +0 -0
  452. {PySDM-2.35 → PySDM-2.40}/examples/PySDM_examples/Arabas_et_al_2015/gui.ipynb +0 -0
  453. {PySDM-2.35 → PySDM-2.40}/examples/PySDM_examples/Arabas_et_al_2015/paraview_hello_world.ipynb +0 -0
  454. {PySDM-2.35 → PySDM-2.40}/examples/PySDM_examples/Arabas_et_al_2015/settings.py +0 -0
  455. {PySDM-2.35 → PySDM-2.40}/examples/PySDM_examples/Arabas_et_al_2015/spin_up.py +0 -0
  456. {PySDM-2.35 → PySDM-2.40}/examples/PySDM_examples/Arabas_et_al_2023/__init__.py +0 -0
  457. {PySDM-2.35 → PySDM-2.40}/examples/PySDM_examples/Arabas_et_al_2023/aida.ipynb +0 -0
  458. {PySDM-2.35 → PySDM-2.40}/examples/PySDM_examples/Arabas_et_al_2023/commons.py +0 -0
  459. {PySDM-2.35 → PySDM-2.40}/examples/PySDM_examples/Arabas_et_al_2023/copula_hello.ipynb +0 -0
  460. {PySDM-2.35 → PySDM-2.40}/examples/PySDM_examples/Arabas_et_al_2023/curved_text.py +0 -0
  461. {PySDM-2.35 → PySDM-2.40}/examples/PySDM_examples/Arabas_et_al_2023/fig_11.ipynb +0 -0
  462. {PySDM-2.35 → PySDM-2.40}/examples/PySDM_examples/Arabas_et_al_2023/fig_2.ipynb +0 -0
  463. {PySDM-2.35 → PySDM-2.40}/examples/PySDM_examples/Arabas_et_al_2023/fig_convergence.ipynb +0 -0
  464. {PySDM-2.35 → PySDM-2.40}/examples/PySDM_examples/Arabas_et_al_2023/figs_3_and_7_and_8.ipynb +0 -0
  465. {PySDM-2.35 → PySDM-2.40}/examples/PySDM_examples/Arabas_et_al_2023/figs_5_and_6.ipynb +0 -0
  466. {PySDM-2.35 → PySDM-2.40}/examples/PySDM_examples/Arabas_et_al_2023/frozen_fraction.py +0 -0
  467. {PySDM-2.35 → PySDM-2.40}/examples/PySDM_examples/Arabas_et_al_2023/make_particulator.py +0 -0
  468. {PySDM-2.35 → PySDM-2.40}/examples/PySDM_examples/Arabas_et_al_2023/plots.py +0 -0
  469. {PySDM-2.35 → PySDM-2.40}/examples/PySDM_examples/Arabas_et_al_2023/run_simulation.py +0 -0
  470. {PySDM-2.35 → PySDM-2.40}/examples/PySDM_examples/Bartman_2020_MasterThesis/__init__.py +0 -0
  471. {PySDM-2.35 → PySDM-2.40}/examples/PySDM_examples/Bartman_2020_MasterThesis/fig_4_adaptive_sdm.py +0 -0
  472. {PySDM-2.35 → PySDM-2.40}/examples/PySDM_examples/Bartman_2020_MasterThesis/fig_5_SCIPY_VS_ADAPTIVE.py +0 -0
  473. {PySDM-2.35 → PySDM-2.40}/examples/PySDM_examples/Bartman_et_al_2021/__init__.py +0 -0
  474. {PySDM-2.35 → PySDM-2.40}/examples/PySDM_examples/Bartman_et_al_2021/demo.ipynb +0 -0
  475. {PySDM-2.35 → PySDM-2.40}/examples/PySDM_examples/Bartman_et_al_2021/demo_fig2.ipynb +0 -0
  476. {PySDM-2.35 → PySDM-2.40}/examples/PySDM_examples/Bartman_et_al_2021/demo_fig3.ipynb +0 -0
  477. {PySDM-2.35 → PySDM-2.40}/examples/PySDM_examples/Bartman_et_al_2021/label.py +0 -0
  478. {PySDM-2.35 → PySDM-2.40}/examples/PySDM_examples/Berry_1967/__init__.py +0 -0
  479. {PySDM-2.35 → PySDM-2.40}/examples/PySDM_examples/Berry_1967/example.py +0 -0
  480. {PySDM-2.35 → PySDM-2.40}/examples/PySDM_examples/Berry_1967/example_fig_6.py +0 -0
  481. {PySDM-2.35 → PySDM-2.40}/examples/PySDM_examples/Berry_1967/figs_5_8_10.ipynb +0 -0
  482. {PySDM-2.35 → PySDM-2.40}/examples/PySDM_examples/Berry_1967/settings.py +0 -0
  483. {PySDM-2.35 → PySDM-2.40}/examples/PySDM_examples/Berry_1967/spectrum_plotter.py +0 -0
  484. {PySDM-2.35 → PySDM-2.40}/examples/PySDM_examples/Bieli_et_al_2022/__init__.py +0 -0
  485. {PySDM-2.35 → PySDM-2.40}/examples/PySDM_examples/Bieli_et_al_2022/make_fig_3.ipynb +0 -0
  486. {PySDM-2.35 → PySDM-2.40}/examples/PySDM_examples/Bieli_et_al_2022/settings.py +0 -0
  487. {PySDM-2.35 → PySDM-2.40}/examples/PySDM_examples/Bieli_et_al_2022/simulation.py +0 -0
  488. {PySDM-2.35 → PySDM-2.40}/examples/PySDM_examples/Bolot_et_al_2013/__init__.py +0 -0
  489. {PySDM-2.35 → PySDM-2.40}/examples/PySDM_examples/Bulenok_2023_MasterThesis/__init__.py +0 -0
  490. {PySDM-2.35 → PySDM-2.40}/examples/PySDM_examples/Bulenok_2023_MasterThesis/performance_comparison_Srivastava_Setup.ipynb +0 -0
  491. {PySDM-2.35 → PySDM-2.40}/examples/PySDM_examples/Bulenok_2023_MasterThesis/setups.py +0 -0
  492. {PySDM-2.35 → PySDM-2.40}/examples/PySDM_examples/Bulenok_2023_MasterThesis/utils.py +0 -0
  493. {PySDM-2.35 → PySDM-2.40}/examples/PySDM_examples/Ervens_and_Feingold_2012/__init__.py +0 -0
  494. {PySDM-2.35 → PySDM-2.40}/examples/PySDM_examples/Ervens_and_Feingold_2012/settings.py +0 -0
  495. {PySDM-2.35 → PySDM-2.40}/examples/PySDM_examples/Grabowski_and_Pawlowska_2023/__init__.py +0 -0
  496. {PySDM-2.35 → PySDM-2.40}/examples/PySDM_examples/Grabowski_and_Pawlowska_2023/figure_1.ipynb +0 -0
  497. {PySDM-2.35 → PySDM-2.40}/examples/PySDM_examples/Grabowski_and_Pawlowska_2023/figure_2.ipynb +0 -0
  498. {PySDM-2.35 → PySDM-2.40}/examples/PySDM_examples/Grabowski_and_Pawlowska_2023/figure_3.ipynb +0 -0
  499. {PySDM-2.35 → PySDM-2.40}/examples/PySDM_examples/Grabowski_and_Pawlowska_2023/figure_4.ipynb +0 -0
  500. {PySDM-2.35 → PySDM-2.40}/examples/PySDM_examples/Grabowski_and_Pawlowska_2023/figure_ripening_rate.ipynb +0 -0
  501. {PySDM-2.35 → PySDM-2.40}/examples/PySDM_examples/Grabowski_and_Pawlowska_2023/settings.py +0 -0
  502. {PySDM-2.35 → PySDM-2.40}/examples/PySDM_examples/Grabowski_and_Pawlowska_2023/simulation.py +0 -0
  503. {PySDM-2.35 → PySDM-2.40}/examples/PySDM_examples/Jaruga_and_Pawlowska_2018/__init__.py +0 -0
  504. {PySDM-2.35 → PySDM-2.40}/examples/PySDM_examples/Jaruga_and_Pawlowska_2018/fig_2.ipynb +0 -0
  505. {PySDM-2.35 → PySDM-2.40}/examples/PySDM_examples/Jaruga_and_Pawlowska_2018/fig_3.ipynb +0 -0
  506. {PySDM-2.35 → PySDM-2.40}/examples/PySDM_examples/Kreidenweis_et_al_2003/__init__.py +0 -0
  507. {PySDM-2.35 → PySDM-2.40}/examples/PySDM_examples/Kreidenweis_et_al_2003/fig_1.ipynb +0 -0
  508. {PySDM-2.35 → PySDM-2.40}/examples/PySDM_examples/Kreidenweis_et_al_2003/settings.py +0 -0
  509. {PySDM-2.35 → PySDM-2.40}/examples/PySDM_examples/Kreidenweis_et_al_2003/simulation.py +0 -0
  510. {PySDM-2.35 → PySDM-2.40}/examples/PySDM_examples/Lowe_et_al_2019/__init__.py +0 -0
  511. {PySDM-2.35 → PySDM-2.40}/examples/PySDM_examples/Lowe_et_al_2019/plot_helper.py +0 -0
  512. {PySDM-2.35 → PySDM-2.40}/examples/PySDM_examples/Lowe_et_al_2019/settings.py +0 -0
  513. {PySDM-2.35 → PySDM-2.40}/examples/PySDM_examples/Lowe_et_al_2019/simulation.py +0 -0
  514. {PySDM-2.35 → PySDM-2.40}/examples/PySDM_examples/Merlivat_and_Nief_1967/__init__.py +0 -0
  515. {PySDM-2.35 → PySDM-2.40}/examples/PySDM_examples/Morrison_and_Grabowski_2007/__init__.py +0 -0
  516. {PySDM-2.35 → PySDM-2.40}/examples/PySDM_examples/Morrison_and_Grabowski_2007/common.py +0 -0
  517. {PySDM-2.35 → PySDM-2.40}/examples/PySDM_examples/Morrison_and_Grabowski_2007/cumulus.py +0 -0
  518. {PySDM-2.35 → PySDM-2.40}/examples/PySDM_examples/Morrison_and_Grabowski_2007/fig_2.ipynb +0 -0
  519. {PySDM-2.35 → PySDM-2.40}/examples/PySDM_examples/Morrison_and_Grabowski_2007/fig_3.ipynb +0 -0
  520. {PySDM-2.35 → PySDM-2.40}/examples/PySDM_examples/Morrison_and_Grabowski_2007/strato_cumulus.py +0 -0
  521. {PySDM-2.35 → PySDM-2.40}/examples/PySDM_examples/Niedermeier_et_al_2014/__init__.py +0 -0
  522. {PySDM-2.35 → PySDM-2.40}/examples/PySDM_examples/Niedermeier_et_al_2014/fig_2.ipynb +0 -0
  523. {PySDM-2.35 → PySDM-2.40}/examples/PySDM_examples/Niedermeier_et_al_2014/settings.py +0 -0
  524. {PySDM-2.35 → PySDM-2.40}/examples/PySDM_examples/Niedermeier_et_al_2014/simulation.py +0 -0
  525. {PySDM-2.35 → PySDM-2.40}/examples/PySDM_examples/Pierchala_et_al_2022/__init__.py +0 -0
  526. {PySDM-2.35 → PySDM-2.40}/examples/PySDM_examples/Pierchala_et_al_2022/commons.py +0 -0
  527. {PySDM-2.35 → PySDM-2.40}/examples/PySDM_examples/Pierchala_et_al_2022/fig_3.ipynb +0 -0
  528. {PySDM-2.35 → PySDM-2.40}/examples/PySDM_examples/Pierchala_et_al_2022/fig_4.ipynb +0 -0
  529. {PySDM-2.35 → PySDM-2.40}/examples/PySDM_examples/Pyrcel/__init__.py +0 -0
  530. {PySDM-2.35 → PySDM-2.40}/examples/PySDM_examples/Pyrcel/example_basic_run.ipynb +0 -0
  531. {PySDM-2.35 → PySDM-2.40}/examples/PySDM_examples/Pyrcel/settings.py +0 -0
  532. {PySDM-2.35 → PySDM-2.40}/examples/PySDM_examples/Pyrcel/simulation.py +0 -0
  533. {PySDM-2.35 → PySDM-2.40}/examples/PySDM_examples/Shima_et_al_2009/__init__.py +0 -0
  534. {PySDM-2.35 → PySDM-2.40}/examples/PySDM_examples/Shima_et_al_2009/error_measure.py +0 -0
  535. {PySDM-2.35 → PySDM-2.40}/examples/PySDM_examples/Shima_et_al_2009/example.py +0 -0
  536. {PySDM-2.35 → PySDM-2.40}/examples/PySDM_examples/Shima_et_al_2009/example_timing.py +0 -0
  537. {PySDM-2.35 → PySDM-2.40}/examples/PySDM_examples/Shima_et_al_2009/fig_2.ipynb +0 -0
  538. {PySDM-2.35 → PySDM-2.40}/examples/PySDM_examples/Shima_et_al_2009/settings.py +0 -0
  539. {PySDM-2.35 → PySDM-2.40}/examples/PySDM_examples/Shima_et_al_2009/spectrum_plotter.py +0 -0
  540. {PySDM-2.35 → PySDM-2.40}/examples/PySDM_examples/Shipway_and_Hill_2012/__init__.py +0 -0
  541. {PySDM-2.35 → PySDM-2.40}/examples/PySDM_examples/Shipway_and_Hill_2012/fig_1.ipynb +0 -0
  542. {PySDM-2.35 → PySDM-2.40}/examples/PySDM_examples/Shipway_and_Hill_2012/mpdata_1d.py +0 -0
  543. {PySDM-2.35 → PySDM-2.40}/examples/PySDM_examples/Shipway_and_Hill_2012/plot.py +0 -0
  544. {PySDM-2.35 → PySDM-2.40}/examples/PySDM_examples/Shipway_and_Hill_2012/settings.py +0 -0
  545. {PySDM-2.35 → PySDM-2.40}/examples/PySDM_examples/Shipway_and_Hill_2012/simulation.py +0 -0
  546. {PySDM-2.35 → PySDM-2.40}/examples/PySDM_examples/Singer_Ward/__init__.py +0 -0
  547. {PySDM-2.35 → PySDM-2.40}/examples/PySDM_examples/Srivastava_1982/__init__.py +0 -0
  548. {PySDM-2.35 → PySDM-2.40}/examples/PySDM_examples/Srivastava_1982/equations.py +0 -0
  549. {PySDM-2.35 → PySDM-2.40}/examples/PySDM_examples/Srivastava_1982/example.py +0 -0
  550. {PySDM-2.35 → PySDM-2.40}/examples/PySDM_examples/Srivastava_1982/figures.ipynb +0 -0
  551. {PySDM-2.35 → PySDM-2.40}/examples/PySDM_examples/Srivastava_1982/settings.py +0 -0
  552. {PySDM-2.35 → PySDM-2.40}/examples/PySDM_examples/Srivastava_1982/simulation.py +0 -0
  553. {PySDM-2.35 → PySDM-2.40}/examples/PySDM_examples/Szumowski_et_al_1998/__init__.py +0 -0
  554. {PySDM-2.35 → PySDM-2.40}/examples/PySDM_examples/Szumowski_et_al_1998/fields.py +0 -0
  555. {PySDM-2.35 → PySDM-2.40}/examples/PySDM_examples/Szumowski_et_al_1998/gui.py +0 -0
  556. {PySDM-2.35 → PySDM-2.40}/examples/PySDM_examples/Szumowski_et_al_1998/gui_controller.py +0 -0
  557. {PySDM-2.35 → PySDM-2.40}/examples/PySDM_examples/Szumowski_et_al_1998/gui_settings.py +0 -0
  558. {PySDM-2.35 → PySDM-2.40}/examples/PySDM_examples/Szumowski_et_al_1998/gui_viewer.py +0 -0
  559. {PySDM-2.35 → PySDM-2.40}/examples/PySDM_examples/Szumowski_et_al_1998/make_default_product_collection.py +0 -0
  560. {PySDM-2.35 → PySDM-2.40}/examples/PySDM_examples/Szumowski_et_al_1998/mpdata_2d.py +0 -0
  561. {PySDM-2.35 → PySDM-2.40}/examples/PySDM_examples/Szumowski_et_al_1998/plots.py +0 -0
  562. {PySDM-2.35 → PySDM-2.40}/examples/PySDM_examples/Szumowski_et_al_1998/simulation.py +0 -0
  563. {PySDM-2.35 → PySDM-2.40}/examples/PySDM_examples/Szumowski_et_al_1998/sounding.py +0 -0
  564. {PySDM-2.35 → PySDM-2.40}/examples/PySDM_examples/Szumowski_et_al_1998/storage.py +0 -0
  565. {PySDM-2.35 → PySDM-2.40}/examples/PySDM_examples/Van_Hook_1968/__init__.py +0 -0
  566. {PySDM-2.35 → PySDM-2.40}/examples/PySDM_examples/Yang_et_al_2018/__init__.py +0 -0
  567. {PySDM-2.35 → PySDM-2.40}/examples/PySDM_examples/Yang_et_al_2018/fig_2.ipynb +0 -0
  568. {PySDM-2.35 → PySDM-2.40}/examples/PySDM_examples/Yang_et_al_2018/settings.py +0 -0
  569. {PySDM-2.35 → PySDM-2.40}/examples/PySDM_examples/Yang_et_al_2018/simulation.py +0 -0
  570. {PySDM-2.35 → PySDM-2.40}/examples/PySDM_examples/__init__.py +0 -0
  571. {PySDM-2.35 → PySDM-2.40}/examples/PySDM_examples/deJong_Mackay_et_al_2023/__init__.py +0 -0
  572. {PySDM-2.35 → PySDM-2.40}/examples/PySDM_examples/deJong_Mackay_et_al_2023/data/straub_fig10.csv +0 -0
  573. {PySDM-2.35 → PySDM-2.40}/examples/PySDM_examples/deJong_Mackay_et_al_2023/fig_9.ipynb +0 -0
  574. {PySDM-2.35 → PySDM-2.40}/examples/PySDM_examples/deJong_Mackay_et_al_2023/figs_10_11_12_13.ipynb +0 -0
  575. {PySDM-2.35 → PySDM-2.40}/examples/PySDM_examples/deJong_Mackay_et_al_2023/figs_3_4_5.ipynb +0 -0
  576. {PySDM-2.35 → PySDM-2.40}/examples/PySDM_examples/deJong_Mackay_et_al_2023/figs_6_7_8.ipynb +0 -0
  577. {PySDM-2.35 → PySDM-2.40}/examples/PySDM_examples/deJong_Mackay_et_al_2023/plot_rates.py +0 -0
  578. {PySDM-2.35 → PySDM-2.40}/examples/PySDM_examples/deJong_Mackay_et_al_2023/settings1D.py +0 -0
  579. {PySDM-2.35 → PySDM-2.40}/examples/PySDM_examples/deJong_Mackay_et_al_2023/settings_0D.py +0 -0
  580. {PySDM-2.35 → PySDM-2.40}/examples/PySDM_examples/deJong_Mackay_et_al_2023/simulation1D.py +0 -0
  581. {PySDM-2.35 → PySDM-2.40}/examples/PySDM_examples/deJong_Mackay_et_al_2023/simulation_0D.py +0 -0
  582. {PySDM-2.35 → PySDM-2.40}/examples/PySDM_examples/deJong_Mackay_et_al_2023/simulation_ss.py +0 -0
  583. {PySDM-2.35 → PySDM-2.40}/examples/PySDM_examples/utils/basic_simulation.py +0 -0
  584. {PySDM-2.35 → PySDM-2.40}/examples/PySDM_examples/utils/dummy_controller.py +0 -0
  585. {PySDM-2.35 → PySDM-2.40}/examples/PySDM_examples/utils/progbar_controller.py +0 -0
  586. {PySDM-2.35 → PySDM-2.40}/examples/PySDM_examples/utils/read_vtk_1d.py +0 -0
  587. {PySDM-2.35 → PySDM-2.40}/examples/PySDM_examples/utils/widgets/__init__.py +0 -0
  588. {PySDM-2.35 → PySDM-2.40}/examples/PySDM_examples/utils/widgets/freezer.py +0 -0
  589. {PySDM-2.35 → PySDM-2.40}/examples/PySDM_examples/utils/widgets/progbar_updater.py +0 -0
  590. {PySDM-2.35 → PySDM-2.40}/examples/pyproject.toml +0 -0
  591. {PySDM-2.35 → PySDM-2.40}/examples/setup.py +0 -0
  592. {PySDM-2.35 → PySDM-2.40}/paper/joss-ARG-fig_1.pdf +0 -0
  593. {PySDM-2.35 → PySDM-2.40}/paper/paper.bib +0 -0
  594. {PySDM-2.35 → PySDM-2.40}/paper/paper.md +0 -0
  595. {PySDM-2.35 → PySDM-2.40}/paper/paperv1.md +0 -0
  596. {PySDM-2.35 → PySDM-2.40}/paper/readme.pdf +0 -0
  597. {PySDM-2.35 → PySDM-2.40}/paper/test.pdf +0 -0
  598. {PySDM-2.35 → PySDM-2.40}/pyproject.toml +0 -0
  599. {PySDM-2.35 → PySDM-2.40}/setup.cfg +0 -0
  600. {PySDM-2.35 → PySDM-2.40}/setup.py +0 -0
  601. {PySDM-2.35 → PySDM-2.40}/tests/__init__.py +0 -0
  602. {PySDM-2.35 → PySDM-2.40}/tests/examples_tests/__init__.py +0 -0
  603. {PySDM-2.35 → PySDM-2.40}/tests/examples_tests/test_run_examples.py +0 -0
  604. {PySDM-2.35 → PySDM-2.40}/tests/examples_tests/test_run_notebooks.py +0 -0
  605. {PySDM-2.35 → PySDM-2.40}/tests/examples_tests/test_tests_completeness.py +0 -0
  606. {PySDM-2.35 → PySDM-2.40}/tests/smoke_tests/__init__.py +0 -0
  607. {PySDM-2.35 → PySDM-2.40}/tests/smoke_tests/box/alpert_and_knopf_2016/__init__.py +0 -0
  608. {PySDM-2.35 → PySDM-2.40}/tests/smoke_tests/box/alpert_and_knopf_2016/test_ak16_fig_1.py +0 -0
  609. {PySDM-2.35 → PySDM-2.40}/tests/smoke_tests/box/alpert_and_knopf_2016/test_frozen_fraction.py +0 -0
  610. {PySDM-2.35 → PySDM-2.40}/tests/smoke_tests/box/berry_1967/__init__.py +0 -0
  611. {PySDM-2.35 → PySDM-2.40}/tests/smoke_tests/box/berry_1967/test_coalescence.py +0 -0
  612. {PySDM-2.35 → PySDM-2.40}/tests/smoke_tests/box/bieli_et_al_2022/__init__.py +0 -0
  613. {PySDM-2.35 → PySDM-2.40}/tests/smoke_tests/box/bieli_et_al_2022/test_moments.py +0 -0
  614. {PySDM-2.35 → PySDM-2.40}/tests/smoke_tests/box/dejong_and_mackay_et_al_2023/__init__.py +0 -0
  615. {PySDM-2.35 → PySDM-2.40}/tests/smoke_tests/box/dejong_and_mackay_et_al_2023/test_collision.py +0 -0
  616. {PySDM-2.35 → PySDM-2.40}/tests/smoke_tests/box/dejong_and_mackay_et_al_2023/test_fig_6.py +0 -0
  617. {PySDM-2.35 → PySDM-2.40}/tests/smoke_tests/box/dejong_and_mackay_et_al_2023/test_fig_7.py +0 -0
  618. {PySDM-2.35 → PySDM-2.40}/tests/smoke_tests/box/dejong_and_mackay_et_al_2023/test_fig_8.py +0 -0
  619. {PySDM-2.35 → PySDM-2.40}/tests/smoke_tests/box/partmc/__init__.py +0 -0
  620. {PySDM-2.35 → PySDM-2.40}/tests/smoke_tests/box/partmc/test_dry_wet_equilibration.py +0 -0
  621. {PySDM-2.35 → PySDM-2.40}/tests/smoke_tests/box/shima_et_al_2009/__init__.py +0 -0
  622. {PySDM-2.35 → PySDM-2.40}/tests/smoke_tests/box/shima_et_al_2009/test_lwc_constant.py +0 -0
  623. {PySDM-2.35 → PySDM-2.40}/tests/smoke_tests/box/srivastava_1982/__init__.py +0 -0
  624. {PySDM-2.35 → PySDM-2.40}/tests/smoke_tests/box/srivastava_1982/test_eq_10.py +0 -0
  625. {PySDM-2.35 → PySDM-2.40}/tests/smoke_tests/box/srivastava_1982/test_eq_13.py +0 -0
  626. {PySDM-2.35 → PySDM-2.40}/tests/smoke_tests/box/srivastava_1982/test_equations.py +0 -0
  627. {PySDM-2.35 → PySDM-2.40}/tests/smoke_tests/conftest.py +0 -0
  628. {PySDM-2.35 → PySDM-2.40}/tests/smoke_tests/kinematic_1d/shipway_and_hill_2012/__init__.py +0 -0
  629. {PySDM-2.35 → PySDM-2.40}/tests/smoke_tests/kinematic_1d/shipway_and_hill_2012/test_1d_exporters.py +0 -0
  630. {PySDM-2.35 → PySDM-2.40}/tests/smoke_tests/kinematic_1d/shipway_and_hill_2012/test_few_steps.py +0 -0
  631. {PySDM-2.35 → PySDM-2.40}/tests/smoke_tests/kinematic_1d/shipway_and_hill_2012/test_initial_condition.py +0 -0
  632. {PySDM-2.35 → PySDM-2.40}/tests/smoke_tests/kinematic_1d/shipway_and_hill_2012/test_settings.py +0 -0
  633. {PySDM-2.35 → PySDM-2.40}/tests/smoke_tests/kinematic_2d/arabas_et_al_2015/__init__.py +0 -0
  634. {PySDM-2.35 → PySDM-2.40}/tests/smoke_tests/kinematic_2d/arabas_et_al_2015/dummy_storage.py +0 -0
  635. {PySDM-2.35 → PySDM-2.40}/tests/smoke_tests/kinematic_2d/arabas_et_al_2015/test_adaptive_displacement.py +0 -0
  636. {PySDM-2.35 → PySDM-2.40}/tests/smoke_tests/kinematic_2d/arabas_et_al_2015/test_environment.py +0 -0
  637. {PySDM-2.35 → PySDM-2.40}/tests/smoke_tests/kinematic_2d/arabas_et_al_2015/test_export.py +0 -0
  638. {PySDM-2.35 → PySDM-2.40}/tests/smoke_tests/kinematic_2d/arabas_et_al_2015/test_freezing.py +0 -0
  639. {PySDM-2.35 → PySDM-2.40}/tests/smoke_tests/kinematic_2d/arabas_et_al_2015/test_gui_settings.py +0 -0
  640. {PySDM-2.35 → PySDM-2.40}/tests/smoke_tests/kinematic_2d/arabas_et_al_2015/test_initialisation.py +0 -0
  641. {PySDM-2.35 → PySDM-2.40}/tests/smoke_tests/kinematic_2d/arabas_et_al_2015/test_spin_up.py +0 -0
  642. {PySDM-2.35 → PySDM-2.40}/tests/smoke_tests/no_env/__init__.py +0 -0
  643. {PySDM-2.35 → PySDM-2.40}/tests/smoke_tests/no_env/pierchala_et_al_2022/__init__.py +0 -0
  644. {PySDM-2.35 → PySDM-2.40}/tests/smoke_tests/no_env/pierchala_et_al_2022/test_supplement.py +0 -0
  645. {PySDM-2.35 → PySDM-2.40}/tests/smoke_tests/parcel/abdul_razzak_ghan_2000/__init__.py +0 -0
  646. {PySDM-2.35 → PySDM-2.40}/tests/smoke_tests/parcel/abdul_razzak_ghan_2000/test_just_do_it.py +0 -0
  647. {PySDM-2.35 → PySDM-2.40}/tests/smoke_tests/parcel/abdul_razzak_ghan_2000/test_single_supersaturation_peak.py +0 -0
  648. {PySDM-2.35 → PySDM-2.40}/tests/smoke_tests/parcel/arabas_and_shima_2017/__init__.py +0 -0
  649. {PySDM-2.35 → PySDM-2.40}/tests/smoke_tests/parcel/arabas_and_shima_2017/test_conservation.py +0 -0
  650. {PySDM-2.35 → PySDM-2.40}/tests/smoke_tests/parcel/arabas_and_shima_2017/test_displacement.py +0 -0
  651. {PySDM-2.35 → PySDM-2.40}/tests/smoke_tests/parcel/arabas_and_shima_2017/test_event_rates.py +0 -0
  652. {PySDM-2.35 → PySDM-2.40}/tests/smoke_tests/parcel/arabas_and_shima_2017/test_initialisation.py +0 -0
  653. {PySDM-2.35 → PySDM-2.40}/tests/smoke_tests/parcel/arabas_and_shima_2017/test_vs_scipy.py +0 -0
  654. {PySDM-2.35 → PySDM-2.40}/tests/smoke_tests/parcel/grabowski_and_pawlowska_2023/__init__.py +0 -0
  655. {PySDM-2.35 → PySDM-2.40}/tests/smoke_tests/parcel/grabowski_and_pawlowska_2023/test_condensation_tolerance.py +0 -0
  656. {PySDM-2.35 → PySDM-2.40}/tests/smoke_tests/parcel/grabowski_and_pawlowska_2023/test_figure_1_and_2.py +0 -0
  657. {PySDM-2.35 → PySDM-2.40}/tests/smoke_tests/parcel/grabowski_and_pawlowska_2023/test_figure_3.py +0 -0
  658. {PySDM-2.35 → PySDM-2.40}/tests/smoke_tests/parcel/grabowski_and_pawlowska_2023/test_figure_4.py +0 -0
  659. {PySDM-2.35 → PySDM-2.40}/tests/smoke_tests/parcel/grabowski_and_pawlowska_2023/test_ripening_rate.py +0 -0
  660. {PySDM-2.35/tests/smoke_tests/parcel/kreidenweis_et_al_2003 → PySDM-2.40/tests/smoke_tests/parcel/graf_et_al_2019}/__init__.py +0 -0
  661. {PySDM-2.35/tests/smoke_tests/parcel/lowe_et_al_2019 → PySDM-2.40/tests/smoke_tests/parcel/kreidenweis_et_al_2003}/__init__.py +0 -0
  662. {PySDM-2.35 → PySDM-2.40}/tests/smoke_tests/parcel/kreidenweis_et_al_2003/test_fig_1.py +0 -0
  663. {PySDM-2.35 → PySDM-2.40}/tests/smoke_tests/parcel/kreidenweis_et_al_2003/test_ionic_strength.py +0 -0
  664. {PySDM-2.35 → PySDM-2.40}/tests/smoke_tests/parcel/kreidenweis_et_al_2003/test_spectrum_at_t_0.py +0 -0
  665. {PySDM-2.35 → PySDM-2.40}/tests/smoke_tests/parcel/kreidenweis_et_al_2003/test_table_3.py +0 -0
  666. {PySDM-2.35/tests/smoke_tests/parcel/niedermeier_et_al_2013 → PySDM-2.40/tests/smoke_tests/parcel/lowe_et_al_2019}/__init__.py +0 -0
  667. {PySDM-2.35 → PySDM-2.40}/tests/smoke_tests/parcel/lowe_et_al_2019/conftest.py +0 -0
  668. {PySDM-2.35/tests/smoke_tests/parcel/pyrcel → PySDM-2.40/tests/smoke_tests/parcel/niedermeier_et_al_2013}/__init__.py +0 -0
  669. {PySDM-2.35 → PySDM-2.40}/tests/smoke_tests/parcel/niedermeier_et_al_2013/test_temperature_profile.py +0 -0
  670. {PySDM-2.35/tests/smoke_tests/parcel/yang_et_al_2018 → PySDM-2.40/tests/smoke_tests/parcel/pyrcel}/__init__.py +0 -0
  671. {PySDM-2.35 → PySDM-2.40}/tests/smoke_tests/parcel/pyrcel/test_parcel_example.py +0 -0
  672. {PySDM-2.35/tests/unit_tests → PySDM-2.40/tests/smoke_tests/parcel/yang_et_al_2018}/__init__.py +0 -0
  673. {PySDM-2.35 → PySDM-2.40}/tests/smoke_tests/parcel/yang_et_al_2018/test_displacement.py +0 -0
  674. {PySDM-2.35 → PySDM-2.40}/tests/smoke_tests/parcel/yang_et_al_2018/test_initialisation.py +0 -0
  675. {PySDM-2.35 → PySDM-2.40}/tests/smoke_tests/parcel/yang_et_al_2018/test_just_do_it.py +0 -0
  676. {PySDM-2.35/tests/unit_tests/attributes → PySDM-2.40/tests/tutorials_tests}/__init__.py +0 -0
  677. {PySDM-2.35/tests/unit_tests/backends → PySDM-2.40/tests/unit_tests}/__init__.py +0 -0
  678. {PySDM-2.35/tests/unit_tests/backends/storage → PySDM-2.40/tests/unit_tests/attributes}/__init__.py +0 -0
  679. {PySDM-2.35 → PySDM-2.40}/tests/unit_tests/attributes/test_acidity.py +0 -0
  680. {PySDM-2.35 → PySDM-2.40}/tests/unit_tests/attributes/test_area_radius.py +0 -0
  681. {PySDM-2.35 → PySDM-2.40}/tests/unit_tests/attributes/test_critical_supersaturation.py +0 -0
  682. {PySDM-2.35 → PySDM-2.40}/tests/unit_tests/attributes/test_fall_velocity.py +0 -0
  683. {PySDM-2.35 → PySDM-2.40}/tests/unit_tests/attributes/test_isotopes.py +0 -0
  684. {PySDM-2.35 → PySDM-2.40}/tests/unit_tests/attributes/test_multiplicities.py +0 -0
  685. {PySDM-2.35/tests/unit_tests/dynamics → PySDM-2.40/tests/unit_tests/backends}/__init__.py +0 -0
  686. {PySDM-2.35/tests/unit_tests/dynamics/collisions → PySDM-2.40/tests/unit_tests/backends/storage}/__init__.py +0 -0
  687. {PySDM-2.35 → PySDM-2.40}/tests/unit_tests/backends/storage/test_basic_ops.py +0 -0
  688. {PySDM-2.35 → PySDM-2.40}/tests/unit_tests/backends/storage/test_index.py +0 -0
  689. {PySDM-2.35 → PySDM-2.40}/tests/unit_tests/backends/storage/test_setitem.py +0 -0
  690. {PySDM-2.35 → PySDM-2.40}/tests/unit_tests/backends/test_collisions_methods.py +0 -0
  691. {PySDM-2.35 → PySDM-2.40}/tests/unit_tests/backends/test_ctor_defaults.py +0 -0
  692. {PySDM-2.35 → PySDM-2.40}/tests/unit_tests/backends/test_fake_thrust.py +0 -0
  693. {PySDM-2.35 → PySDM-2.40}/tests/unit_tests/backends/test_freezing_methods.py +0 -0
  694. {PySDM-2.35 → PySDM-2.40}/tests/unit_tests/backends/test_isotope_methods.py +0 -0
  695. {PySDM-2.35 → PySDM-2.40}/tests/unit_tests/backends/test_moments_methods.py +0 -0
  696. {PySDM-2.35 → PySDM-2.40}/tests/unit_tests/backends/test_oxidation.py +0 -0
  697. {PySDM-2.35 → PySDM-2.40}/tests/unit_tests/backends/test_pair_methods.py +0 -0
  698. {PySDM-2.35 → PySDM-2.40}/tests/unit_tests/backends/test_physics_methods.py +0 -0
  699. {PySDM-2.35 → PySDM-2.40}/tests/unit_tests/backends/test_toms748.py +0 -0
  700. {PySDM-2.35 → PySDM-2.40}/tests/unit_tests/conftest.py +0 -0
  701. {PySDM-2.35 → PySDM-2.40}/tests/unit_tests/dummy_environment.py +0 -0
  702. {PySDM-2.35 → PySDM-2.40}/tests/unit_tests/dummy_particulator.py +0 -0
  703. {PySDM-2.35/tests/unit_tests/dynamics/displacement → PySDM-2.40/tests/unit_tests/dynamics}/__init__.py +0 -0
  704. {PySDM-2.35/tests/unit_tests/impl → PySDM-2.40/tests/unit_tests/dynamics/collisions}/__init__.py +0 -0
  705. {PySDM-2.35 → PySDM-2.40}/tests/unit_tests/dynamics/collisions/conftest.py +0 -0
  706. {PySDM-2.35 → PySDM-2.40}/tests/unit_tests/dynamics/collisions/test_croupiers.py +0 -0
  707. {PySDM-2.35 → PySDM-2.40}/tests/unit_tests/dynamics/collisions/test_defaults.py +0 -0
  708. {PySDM-2.35 → PySDM-2.40}/tests/unit_tests/dynamics/collisions/test_efficiencies.py +0 -0
  709. {PySDM-2.35 → PySDM-2.40}/tests/unit_tests/dynamics/collisions/test_fragmentations.py +0 -0
  710. {PySDM-2.35 → PySDM-2.40}/tests/unit_tests/dynamics/collisions/test_kernels.py +0 -0
  711. {PySDM-2.35 → PySDM-2.40}/tests/unit_tests/dynamics/collisions/test_sdm_breakup.py +0 -0
  712. {PySDM-2.35 → PySDM-2.40}/tests/unit_tests/dynamics/collisions/test_sdm_multi_cell.py +0 -0
  713. {PySDM-2.35 → PySDM-2.40}/tests/unit_tests/dynamics/collisions/test_sdm_single_cell.py +0 -0
  714. {PySDM-2.35 → PySDM-2.40}/tests/unit_tests/dynamics/condensation/test_diagnostics.py +0 -0
  715. {PySDM-2.35 → PySDM-2.40}/tests/unit_tests/dynamics/condensation/test_parcel_sanity_checks.py +0 -0
  716. {PySDM-2.35/tests/unit_tests/initialisation → PySDM-2.40/tests/unit_tests/dynamics/displacement}/__init__.py +0 -0
  717. {PySDM-2.35 → PySDM-2.40}/tests/unit_tests/dynamics/displacement/displacement_settings.py +0 -0
  718. {PySDM-2.35 → PySDM-2.40}/tests/unit_tests/dynamics/displacement/test_advection.py +0 -0
  719. {PySDM-2.35 → PySDM-2.40}/tests/unit_tests/dynamics/displacement/test_courant_product.py +0 -0
  720. {PySDM-2.35 → PySDM-2.40}/tests/unit_tests/dynamics/displacement/test_sedimentation.py +0 -0
  721. {PySDM-2.35 → PySDM-2.40}/tests/unit_tests/dynamics/test_eulerian_advection.py +0 -0
  722. {PySDM-2.35 → PySDM-2.40}/tests/unit_tests/dynamics/test_isotopic_fractionation.py +0 -0
  723. {PySDM-2.35 → PySDM-2.40}/tests/unit_tests/dynamics/test_relaxed_velocity.py +0 -0
  724. {PySDM-2.35 → PySDM-2.40}/tests/unit_tests/dynamics/test_terminal_velocity.py +0 -0
  725. {PySDM-2.35/tests/unit_tests/physics → PySDM-2.40/tests/unit_tests/impl}/__init__.py +0 -0
  726. {PySDM-2.35 → PySDM-2.40}/tests/unit_tests/impl/test_mesh.py +0 -0
  727. {PySDM-2.35 → PySDM-2.40}/tests/unit_tests/impl/test_moments.py +0 -0
  728. {PySDM-2.35 → PySDM-2.40}/tests/unit_tests/impl/test_particle_attributes.py +0 -0
  729. {PySDM-2.35/tests/unit_tests/products → PySDM-2.40/tests/unit_tests/initialisation}/__init__.py +0 -0
  730. {PySDM-2.35 → PySDM-2.40}/tests/unit_tests/initialisation/test_equilibrate_wet_radii.py +0 -0
  731. {PySDM-2.35 → PySDM-2.40}/tests/unit_tests/initialisation/test_init_fall_momenta.py +0 -0
  732. {PySDM-2.35 → PySDM-2.40}/tests/unit_tests/initialisation/test_spatial_discretisation.py +0 -0
  733. {PySDM-2.35 → PySDM-2.40}/tests/unit_tests/initialisation/test_spectral_discretisation.py +0 -0
  734. {PySDM-2.35 → PySDM-2.40}/tests/unit_tests/initialisation/test_spectro_glacial_discretisation.py +0 -0
  735. {PySDM-2.35 → PySDM-2.40}/tests/unit_tests/physics/test_accommodation_coefficients.py +0 -0
  736. {PySDM-2.35 → PySDM-2.40}/tests/unit_tests/physics/test_constants.py +0 -0
  737. {PySDM-2.35 → PySDM-2.40}/tests/unit_tests/physics/test_dimensional_analysis.py +0 -0
  738. {PySDM-2.35 → PySDM-2.40}/tests/unit_tests/physics/test_formulae.py +0 -0
  739. {PySDM-2.35 → PySDM-2.40}/tests/unit_tests/physics/test_fragmentation_functions.py +0 -0
  740. {PySDM-2.35 → PySDM-2.40}/tests/unit_tests/physics/test_freezing_temperature_spectra.py +0 -0
  741. {PySDM-2.35 → PySDM-2.40}/tests/unit_tests/physics/test_hygroscopicity_fierce_diagrams.py +0 -0
  742. {PySDM-2.35 → PySDM-2.40}/tests/unit_tests/physics/test_isotope_meteoric_water_line_excess.py +0 -0
  743. {PySDM-2.35 → PySDM-2.40}/tests/unit_tests/physics/test_isotope_ratio_evolution.py +0 -0
  744. {PySDM-2.35 → PySDM-2.40}/tests/unit_tests/physics/test_latent_heat.py +0 -0
  745. {PySDM-2.35 → PySDM-2.40}/tests/unit_tests/physics/test_particle_shape_and_density.py +0 -0
  746. {PySDM-2.35 → PySDM-2.40}/tests/unit_tests/physics/test_saturation_vapour_pressure.py +0 -0
  747. {PySDM-2.35 → PySDM-2.40}/tests/unit_tests/physics/test_spectra.py +0 -0
  748. {PySDM-2.35 → PySDM-2.40}/tests/unit_tests/physics/test_spectra_top_hat.py +0 -0
  749. {PySDM-2.35 → PySDM-2.40}/tests/unit_tests/physics/test_surface_tension.py +0 -0
  750. {PySDM-2.35 → PySDM-2.40}/tests/unit_tests/physics/test_thermal_conductivity.py +0 -0
  751. {PySDM-2.35 → PySDM-2.40}/tests/unit_tests/physics/test_trivia.py +0 -0
  752. {PySDM-2.35 → PySDM-2.40}/tests/unit_tests/products/test_ambient_relative_humidity.py +0 -0
  753. {PySDM-2.35 → PySDM-2.40}/tests/unit_tests/products/test_averaged_terminal_velocity.py +0 -0
  754. {PySDM-2.35 → PySDM-2.40}/tests/unit_tests/products/test_collision_rates.py +0 -0
  755. {PySDM-2.35 → PySDM-2.40}/tests/unit_tests/products/test_concentration_product.py +0 -0
  756. {PySDM-2.35 → PySDM-2.40}/tests/unit_tests/products/test_cooling_rate.py +0 -0
  757. {PySDM-2.35 → PySDM-2.40}/tests/unit_tests/products/test_impl.py +0 -0
  758. {PySDM-2.35 → PySDM-2.40}/tests/unit_tests/products/test_particle_size_product.py +0 -0
  759. {PySDM-2.35 → PySDM-2.40}/tests/unit_tests/test_builder.py +0 -0
  760. {PySDM-2.35 → PySDM-2.40}/tests/unit_tests/test_formulae.py +0 -0
  761. {PySDM-2.35 → PySDM-2.40}/tests/unit_tests/test_imports.py +0 -0
  762. {PySDM-2.35 → PySDM-2.40}/tests/unit_tests/test_particulator.py +0 -0
@@ -4,4 +4,4 @@
4
4
 
5
5
  set -e
6
6
  shopt -s extglob
7
- rm -rfv !("examples")
7
+ rm -rfv !("examples"|"tutorials")
@@ -102,7 +102,7 @@ jobs:
102
102
  pip install -e .[tests]
103
103
  - run: |
104
104
  # TODO #682
105
- pylint --unsafe-load-any-extension=y --disable=fixme,invalid-name,missing-function-docstring,missing-class-docstring,protected-access,duplicate-code $(git ls-files '*.py' | grep -v ^examples)
105
+ pylint --unsafe-load-any-extension=y --disable=fixme,invalid-name,missing-function-docstring,missing-class-docstring,protected-access,duplicate-code $(git ls-files '*.py' | grep -v -e ^examples -e ^tutorials)
106
106
  - run: |
107
107
  # TODO #682
108
108
  pylint --max-module-lines=550 --unsafe-load-any-extension=y --disable=fixme,too-many-function-args,unsubscriptable-object,consider-using-with,protected-access,too-many-statements,too-many-public-methods,too-many-branches,duplicate-code,invalid-name,missing-function-docstring,missing-module-docstring,missing-class-docstring,too-many-locals,too-many-instance-attributes,too-few-public-methods,too-many-arguments,c-extension-no-member $(git ls-files '*.py' | grep ^examples)
@@ -125,13 +125,13 @@ jobs:
125
125
  matrix:
126
126
  platform: [ubuntu-latest, macos-12, windows-latest]
127
127
  python-version: ["3.8", "3.10"]
128
- test-suite: ["unit_tests", "smoke_tests/no_env", "smoke_tests/box", "smoke_tests/parcel", "smoke_tests/kinematic_1d", "smoke_tests/kinematic_2d"]
128
+ test-suite: ["unit_tests", "smoke_tests/no_env", "smoke_tests/box", "smoke_tests/parcel", "smoke_tests/kinematic_1d", "smoke_tests/kinematic_2d", "tutorials_tests"]
129
129
  exclude:
130
130
  - test-suite: "devops_tests"
131
131
  python-version: "3.8"
132
132
  fail-fast: false
133
133
  runs-on: ${{ matrix.platform }}
134
- timeout-minutes: 60
134
+ timeout-minutes: 75
135
135
  steps:
136
136
  - uses: actions/checkout@v2
137
137
  with:
@@ -160,6 +160,10 @@ jobs:
160
160
  - if: startsWith(matrix.platform, 'ubuntu-')
161
161
  run: echo NUMBA_THREADING_LAYER=omp >> $GITHUB_ENV
162
162
 
163
+ # install devops_tests for tutorials_tests
164
+ - if: matrix.test-suite == 'tutorials_tests'
165
+ run: pip install -r tests/devops_tests/requirements.txt
166
+
163
167
  - env:
164
168
  GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
165
169
  run: pytest --durations=10 --timeout=900 --timeout_method=thread -p no:unraisableexception -We tests/${{ matrix.test-suite }}
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: PySDM
3
- Version: 2.35
3
+ Version: 2.40
4
4
  Summary: Pythonic particle-based (super-droplet) warm-rain/aqueous-chemistry cloud microphysics package with box, parcel & 1D/2D prescribed-flow examples in Python, Julia and Matlab
5
5
  Home-page: https://github.com/open-atmos/PySDM
6
6
  Author: https://github.com/open-atmos/PySDM/graphs/contributors
@@ -48,10 +48,17 @@ Description: # PySDM
48
48
 
49
49
  There is a growing set of example Jupyter notebooks exemplifying how to perform
50
50
  various types of calculations and simulations using PySDM.
51
- Most of the example notebooks reproduce resutls and plot from literature, see below for
51
+ Most of the example notebooks reproduce results and plot from literature, see below for
52
52
  a list of examples and links to the notebooks (which can be either executed or viewed
53
53
  "in the cloud").
54
54
 
55
+ There are also a growing set of [tutorials](https://github.com/open-atmos/PySDM/tree/main/tutorials), also in the form of Jupyter notebooks.
56
+ These tutorials are intended for teaching purposes and include short explanations of cloud microphysical
57
+ concepts paired with widgets for running interactive simulations using PySDM.
58
+ Each tutorial also comes with a set of questions at the end that can be used as homework problems.
59
+ Like the examples, these tutorials can be executed or viewed "in the cloud" making it an especially
60
+ easy way for students to get started.
61
+
55
62
  PySDM has two alternative parallel number-crunching backends
56
63
  available: multi-threaded CPU backend based on [Numba](http://numba.pydata.org/)
57
64
  and GPU-resident backend built on top of [ThrustRTC](https://pypi.org/project/ThrustRTC/).
@@ -789,20 +796,23 @@ Description: # PySDM
789
796
  The development and maintenance of PySDM is led by [Sylwester Arabas](https://github.com/slayoo/).
790
797
  [Piotr Bartman](https://github.com/piotrbartman/) had been the architect and main developer
791
798
  of technological solutions in PySDM.
792
- The suite of examples shipped with PySDM includes contributions from researchers
799
+ PySDM includes contributions from researchers
793
800
  from [Jagiellonian University](https://en.uj.edu.pl/en) departments of computer science, physics and chemistry;
794
- and from
795
- [Caltech's Climate Modelling Alliance](https://clima.caltech.edu/).
801
+ from [Caltech's Climate Modelling Alliance](https://clima.caltech.edu/),
802
+ from [University of Warsaw](https://en.uw.edu.pl/) (dept. physics), and
803
+ from [AGH University of Krakow](https://agh.edu.pl/en) (dept. physics \& applied computer science) where release maintenance takes place currently.
796
804
 
797
805
  Development of PySDM had been initially supported by the EU through a grant of the
798
- [Foundation for Polish Science](https://www.fnp.org.pl/)) (POIR.04.04.00-00-5E1C/18)
806
+ [Foundation for Polish Science](https://www.fnp.org.pl/)) (grant no. POIR.04.04.00-00-5E1C/18)
799
807
  realised at the [Jagiellonian University](https://en.uj.edu.pl/en).
800
- The immersion freezing support in PySDM is developed with support from the
808
+ The immersion freezing support in PySDM was developed with support from the
801
809
  US Department of Energy [Atmospheric System Research](https://asr.science.energy.gov/) programme
802
- through a grant realised at the
810
+ through a grant (no. DE-SC0021034) realised at the
803
811
  [University of Illinois at Urbana-Champaign](https://illinois.edu/).
812
+ Development of isotopic fractionation representation and mixed-phase support is carried out with support from
813
+ the [Polish National Science Centre](https://ncn.gov.pl/en) (grant no. 2020/39/D/ST10/01220).
804
814
 
805
- copyright: [Jagiellonian University](https://en.uj.edu.pl/en)
815
+ copyright: [Jagiellonian University](https://en.uj.edu.pl/en) (2019-2023) & [AGH University of Krakow](https://agh.edu.pl/en) (2023-...)
806
816
  licence: [GPL v3](https://www.gnu.org/licenses/gpl-3.0.html)
807
817
 
808
818
  ## Related resources and open-source projects
@@ -16,14 +16,13 @@ from typing import Dict, Tuple
16
16
 
17
17
  from PySDM import formulae
18
18
  from PySDM.physics import surface_tension
19
- from PySDM.physics.constants_defaults import Mv, rho_w
20
19
 
21
20
 
22
21
  class DryAerosolMixture:
23
22
  def __init__(
24
23
  self,
25
24
  *,
26
- compounds: Tuple[str],
25
+ compounds: Tuple[str, ...],
27
26
  densities: Dict[str, float],
28
27
  molar_masses: Dict[str, float],
29
28
  is_soluble: Dict[str, bool],
@@ -44,21 +43,21 @@ class DryAerosolMixture:
44
43
  def modes(self, value: Tuple[Dict]):
45
44
  self._modes = value
46
45
 
47
- # convert mass fractions to volume fractions
48
46
  def volume_fractions(self, mass_fractions: dict):
47
+ """convert mass fractions to volume fractions"""
49
48
  return {
50
49
  k: (mass_fractions[k] / self.densities[k])
51
50
  / sum(mass_fractions[i] / self.densities[i] for i in self.compounds)
52
51
  for k in self.compounds
53
52
  }
54
53
 
55
- # calculate total volume fraction of soluble species
56
54
  def f_soluble_volume(self, mass_fractions: dict):
55
+ """calculate total volume fraction of soluble species"""
57
56
  volfrac = self.volume_fractions(mass_fractions)
58
57
  return sum(self.is_soluble[k] * volfrac[k] for k in self.compounds)
59
58
 
60
- # calculate volume fractions of just soluble or just insoluble species
61
59
  def volfrac_just_soluble(self, volfrac: dict, soluble=True):
60
+ """calculate volume fractions of just soluble or just insoluble species"""
62
61
  if soluble:
63
62
  _masked = {k: (self.is_soluble[k]) * volfrac[k] for k in self.compounds}
64
63
  else:
@@ -71,8 +70,8 @@ class DryAerosolMixture:
71
70
  x = {k: _masked[k] / _denom for k in self.compounds}
72
71
  return x
73
72
 
74
- # calculate hygroscopicities with different assumptions about solubility
75
- def kappa(self, mass_fractions: dict):
73
+ def kappa(self, mass_fractions: dict, water_molar_volume: float):
74
+ """calculate hygroscopicities with different assumptions about solubility"""
76
75
  volfrac = self.volume_fractions(mass_fractions)
77
76
  molar_volumes = {
78
77
  i: self.molar_masses[i] / self.densities[i] for i in self.compounds
@@ -94,19 +93,19 @@ class DryAerosolMixture:
94
93
  result = {}
95
94
  for st in formulae._choices(surface_tension).keys():
96
95
  if st in (surface_tension.Constant.__name__):
97
- result[st] = all_soluble_ns * Mv / rho_w
96
+ result[st] = all_soluble_ns * water_molar_volume
98
97
  elif st in (
99
98
  surface_tension.CompressedFilmOvadnevaite.__name__,
100
99
  surface_tension.CompressedFilmRuehl.__name__,
101
100
  surface_tension.SzyszkowskiLangmuir.__name__,
102
101
  ):
103
- result[st] = part_soluble_ns * Mv / rho_w
102
+ result[st] = part_soluble_ns * water_molar_volume
104
103
  else:
105
104
  raise AssertionError()
106
105
  return result
107
106
 
108
- # calculate molar volume of just organic species
109
107
  def nu_org(self, mass_fractions: dict):
108
+ """calculate molar volume of just organic species"""
110
109
  volfrac = self.volume_fractions(mass_fractions)
111
110
  molar_volumes = {
112
111
  i: self.molar_masses[i] / self.densities[i] for i in self.compounds
@@ -203,56 +203,62 @@ VEDDER_1987_b = 89 / 880
203
203
  VEDDER_1987_A = 993 / 880 / 3 / VEDDER_1987_b
204
204
 
205
205
  """ [eq. 5 in Merlivat and Nief (1967)](https://doi.org/10.3402/tellusa.v19i1.9756) """
206
- MERLIVAT_NIEF_1967_ALPHA_L_HDO_T2 = 15013 * si.K**2
207
- MERLIVAT_NIEF_1967_ALPHA_L_HDO_T1 = 0 * si.K
208
- MERLIVAT_NIEF_1967_ALPHA_L_HDO_T0 = -0.1
206
+ MERLIVAT_NIEF_1967_ALPHA_L_2H_T2 = 15013 * si.K**2
207
+ MERLIVAT_NIEF_1967_ALPHA_L_2H_T1 = 0 * si.K
208
+ MERLIVAT_NIEF_1967_ALPHA_L_2H_T0 = -0.1
209
209
 
210
- MERLIVAT_NIEF_1967_ALPHA_I_HDO_T2 = 16289 * si.K**2
211
- MERLIVAT_NIEF_1967_ALPHA_I_HDO_T1 = 0 * si.K
212
- MERLIVAT_NIEF_1967_ALPHA_I_HDO_T0 = -0.0945
210
+ MERLIVAT_NIEF_1967_ALPHA_I_2H_T2 = 16289 * si.K**2
211
+ MERLIVAT_NIEF_1967_ALPHA_I_2H_T1 = 0 * si.K
212
+ MERLIVAT_NIEF_1967_ALPHA_I_2H_T0 = -0.0945
213
213
 
214
214
  """ [Majoube (1971)](https://doi.org/10.1051/jcp/1971681423) """
215
- MAJOUBE_1971_ALPHA_L_H218O_T2 = 1137 * si.K**2
216
- MAJOUBE_1971_ALPHA_L_H218O_T1 = -0.4156 * si.K
217
- MAJOUBE_1971_ALPHA_L_H218O_T0 = -0.0020667
215
+ # values taken from Jouzel 1986 (eqs. 1)
216
+ MAJOUBE_1971_ALPHA_L_18O_T2 = 1137 * si.K**2
217
+ MAJOUBE_1971_ALPHA_L_18O_T1 = -0.4156 * si.K
218
+ MAJOUBE_1971_ALPHA_L_18O_T0 = -0.0020667
219
+
220
+ # values taken from Jouzel 1986 (eqs. 2)
221
+ MAJOUBE_1971_ALPHA_L_2H_T2 = 24844 * si.K**2
222
+ MAJOUBE_1971_ALPHA_L_2H_T1 = -76.248 * si.K
223
+ MAJOUBE_1971_ALPHA_L_2H_T0 = 0.052612
218
224
 
219
225
  """ [Majoube (1970)](https://doi.org/10.1038/2261242a0) """
220
- MAJOUBE_1970_ALPHA_I_H218O_T2 = 0 * si.K**2
221
- MAJOUBE_1970_ALPHA_I_H218O_T1 = 11.839 * si.K
222
- MAJOUBE_1970_ALPHA_I_H218O_T0 = -0.028224
226
+ MAJOUBE_1970_ALPHA_I_18O_T2 = 0 * si.K**2
227
+ MAJOUBE_1970_ALPHA_I_18O_T1 = 11.839 * si.K
228
+ MAJOUBE_1970_ALPHA_I_18O_T0 = -0.028224
223
229
 
224
230
  """ [Van Hook (1968)](https://doi.org/10.1021/j100850a028) """
225
- VAN_HOOK_1968_ALPHA_I_HDO_A = 11484.5 * si.K**2
226
- VAN_HOOK_1968_ALPHA_I_HDO_B = 35.3315 * si.K
227
- VAN_HOOK_1968_ALPHA_I_HDO_C = -0.159290
231
+ VAN_HOOK_1968_ALPHA_I_2H_A = 11484.5 * si.K**2
232
+ VAN_HOOK_1968_ALPHA_I_2H_B = 35.3315 * si.K
233
+ VAN_HOOK_1968_ALPHA_I_2H_C = -0.159290
228
234
 
229
- VAN_HOOK_1968_ALPHA_L_HDO_A = 26398.8 * si.K**2
230
- VAN_HOOK_1968_ALPHA_L_HDO_B = -89.6065 * si.K
231
- VAN_HOOK_1968_ALPHA_L_HDO_C = 0.075802
235
+ VAN_HOOK_1968_ALPHA_L_2H_A = 26398.8 * si.K**2
236
+ VAN_HOOK_1968_ALPHA_L_2H_B = -89.6065 * si.K
237
+ VAN_HOOK_1968_ALPHA_L_2H_C = 0.075802
232
238
 
233
- VAN_HOOK_1968_ALPHA_I_H218O_A = 1740.59 * si.K**2
234
- VAN_HOOK_1968_ALPHA_I_H218O_B = 2.2965 * si.K
235
- VAN_HOOK_1968_ALPHA_I_H218O_C = -0.005793
239
+ VAN_HOOK_1968_ALPHA_I_18O_A = 1740.59 * si.K**2
240
+ VAN_HOOK_1968_ALPHA_I_18O_B = 2.2965 * si.K
241
+ VAN_HOOK_1968_ALPHA_I_18O_C = -0.005793
236
242
 
237
- VAN_HOOK_1968_ALPHA_L_H218O_A = 1991.1 * si.K**2
238
- VAN_HOOK_1968_ALPHA_L_H218O_B = -4.1887 * si.K
239
- VAN_HOOK_1968_ALPHA_L_H218O_C = 0.001197
243
+ VAN_HOOK_1968_ALPHA_L_18O_A = 1991.1 * si.K**2
244
+ VAN_HOOK_1968_ALPHA_L_18O_B = -4.1887 * si.K
245
+ VAN_HOOK_1968_ALPHA_L_18O_C = 0.001197
240
246
 
241
- VAN_HOOK_1968_ALPHA_I_H217O_A = 933.651 * si.K**2
242
- VAN_HOOK_1968_ALPHA_I_H217O_B = 1.0953 * si.K
243
- VAN_HOOK_1968_ALPHA_I_H217O_C = -0.002805
247
+ VAN_HOOK_1968_ALPHA_I_17O_A = 933.651 * si.K**2
248
+ VAN_HOOK_1968_ALPHA_I_17O_B = 1.0953 * si.K
249
+ VAN_HOOK_1968_ALPHA_I_17O_C = -0.002805
244
250
 
245
- VAN_HOOK_1968_ALPHA_L_H217O_A = 1057.8 * si.K**2
246
- VAN_HOOK_1968_ALPHA_L_H217O_B = -2.24 * si.K
247
- VAN_HOOK_1968_ALPHA_L_H217O_C = 0.000668
251
+ VAN_HOOK_1968_ALPHA_L_17O_A = 1057.8 * si.K**2
252
+ VAN_HOOK_1968_ALPHA_L_17O_B = -2.24 * si.K
253
+ VAN_HOOK_1968_ALPHA_L_17O_C = 0.000668
248
254
 
249
- VAN_HOOK_1968_ALPHA_I_HOT_A = 18464.5 * si.K**2
250
- VAN_HOOK_1968_ALPHA_I_HOT_B = 31.0436 * si.K
251
- VAN_HOOK_1968_ALPHA_I_HOT_C = -0.20752
255
+ VAN_HOOK_1968_ALPHA_I_3H_A = 18464.5 * si.K**2
256
+ VAN_HOOK_1968_ALPHA_I_3H_B = 31.0436 * si.K
257
+ VAN_HOOK_1968_ALPHA_I_3H_C = -0.20752
252
258
 
253
- VAN_HOOK_1968_ALPHA_L_HOT_A = 37813.2 * si.K**2
254
- VAN_HOOK_1968_ALPHA_L_HOT_B = -136.751 * si.K
255
- VAN_HOOK_1968_ALPHA_L_HOT_C = 0.124096
259
+ VAN_HOOK_1968_ALPHA_L_3H_A = 37813.2 * si.K**2
260
+ VAN_HOOK_1968_ALPHA_L_3H_B = -136.751 * si.K
261
+ VAN_HOOK_1968_ALPHA_L_3H_C = 0.124096
256
262
 
257
263
  VAN_HOOK_1968_ALPHA_I_TOT_A = 33453.7 * si.K**2
258
264
  VAN_HOOK_1968_ALPHA_I_TOT_B = 62.4058 * si.K
@@ -2,6 +2,7 @@
2
2
  phase equilibrium, defined as ratios alpha of isotopic ratios R """
3
3
  from .barkan_and_luz_2005 import BarkanAndLuz2005
4
4
  from .bolot_et_al_2013 import BolotEtAl2013
5
+ from .graf_phd_2017 import GrafPhD2017
5
6
  from .horita_and_wesolowski_1994 import HoritaAndWesolowski1994
6
7
  from .majoube_1970 import Majoube1970
7
8
  from .majoube_1971 import Majoube1971
@@ -0,0 +1,20 @@
1
+ """
2
+ Equilibrium fractionation factors used in
3
+ [Graf et al. 2017](https://doi.org/10.3929/ethz-b-000266387)
4
+ """
5
+ from PySDM.physics.isotope_equilibrium_fractionation_factors.majoube_1970 import (
6
+ Majoube1970,
7
+ )
8
+ from PySDM.physics.isotope_equilibrium_fractionation_factors.majoube_1971 import (
9
+ Majoube1971,
10
+ )
11
+ from PySDM.physics.isotope_equilibrium_fractionation_factors.merlivat_and_nief_1967 import (
12
+ MerlivatAndNief1967,
13
+ )
14
+
15
+
16
+ class GrafPhD2017(Majoube1970, Majoube1971, MerlivatAndNief1967):
17
+ def __init__(self, const):
18
+ Majoube1970.__init__(self, const)
19
+ Majoube1971.__init__(self, const)
20
+ MerlivatAndNief1967.__init__(self, const)
@@ -0,0 +1,18 @@
1
+ """
2
+ Equilibrium fractionation factors from [Majoube 1970](https://doi.org/10.1038/2261242a0)
3
+ (also published by the same author in [Majoube 1971](https://doi.org/10.1051/jcp/1971680625))
4
+ """
5
+ import numpy as np
6
+
7
+
8
+ class Majoube1970: # pylint: disable=too-few-public-methods
9
+ def __init__(self, _):
10
+ pass
11
+
12
+ @staticmethod
13
+ def alpha_i_18O(const, T):
14
+ return np.exp(
15
+ const.MAJOUBE_1970_ALPHA_I_18O_T2 / T**2
16
+ + const.MAJOUBE_1970_ALPHA_I_18O_T1 / T
17
+ + const.MAJOUBE_1970_ALPHA_I_18O_T0
18
+ )
@@ -0,0 +1,25 @@
1
+ """
2
+ Equilibrium fractionation factors from [Majoube 1971](https://doi.org/10.1051/jcp/1971681423)
3
+ """
4
+ import numpy as np
5
+
6
+
7
+ class Majoube1971: # pylint: disable=too-few-public-methods
8
+ def __init__(self, _):
9
+ pass
10
+
11
+ @staticmethod
12
+ def alpha_l_18O(const, T):
13
+ return np.exp(
14
+ const.MAJOUBE_1971_ALPHA_L_18O_T2 / T**2
15
+ + const.MAJOUBE_1971_ALPHA_L_18O_T1 / T
16
+ + const.MAJOUBE_1971_ALPHA_L_18O_T0
17
+ )
18
+
19
+ @staticmethod
20
+ def alpha_l_2H(const, T):
21
+ return np.exp(
22
+ const.MAJOUBE_1971_ALPHA_L_2H_T2 / T**2
23
+ + const.MAJOUBE_1971_ALPHA_L_2H_T1 / T
24
+ + const.MAJOUBE_1971_ALPHA_L_2H_T0
25
+ )
@@ -0,0 +1,26 @@
1
+ """
2
+ Equilibrium fractionation factors from
3
+ [Merlivat and Nief 1967](https://doi.org/10.3402/tellusa.v19i1.9756)
4
+ """
5
+ import numpy as np
6
+
7
+
8
+ class MerlivatAndNief1967:
9
+ def __init__(self, _):
10
+ pass
11
+
12
+ @staticmethod
13
+ def alpha_l_2H(const, T):
14
+ return np.exp(
15
+ const.MERLIVAT_NIEF_1967_ALPHA_L_2H_T2 / T**2
16
+ + const.MERLIVAT_NIEF_1967_ALPHA_L_2H_T1 / T
17
+ + const.MERLIVAT_NIEF_1967_ALPHA_L_2H_T0
18
+ )
19
+
20
+ @staticmethod
21
+ def alpha_i_2H(const, T):
22
+ return np.exp(
23
+ const.MERLIVAT_NIEF_1967_ALPHA_I_2H_T2 / T**2
24
+ + const.MERLIVAT_NIEF_1967_ALPHA_I_2H_T1 / T
25
+ + const.MERLIVAT_NIEF_1967_ALPHA_I_2H_T0
26
+ )
@@ -9,67 +9,67 @@ class VanHook1968:
9
9
  pass
10
10
 
11
11
  @staticmethod
12
- def alpha_l_HDO(const, T):
12
+ def alpha_l_2H(const, T):
13
13
  return np.exp(
14
- const.VAN_HOOK_1968_ALPHA_L_HDO_A / T**2
15
- + const.VAN_HOOK_1968_ALPHA_L_HDO_B / T
16
- + const.VAN_HOOK_1968_ALPHA_L_HDO_C
14
+ const.VAN_HOOK_1968_ALPHA_L_2H_A / T**2
15
+ + const.VAN_HOOK_1968_ALPHA_L_2H_B / T
16
+ + const.VAN_HOOK_1968_ALPHA_L_2H_C
17
17
  )
18
18
 
19
19
  @staticmethod
20
- def alpha_i_HDO(const, T):
20
+ def alpha_i_2H(const, T):
21
21
  return np.exp(
22
- const.VAN_HOOK_1968_ALPHA_I_HDO_A / T**2
23
- + const.VAN_HOOK_1968_ALPHA_I_HDO_B / T
24
- + const.VAN_HOOK_1968_ALPHA_I_HDO_C
22
+ const.VAN_HOOK_1968_ALPHA_I_2H_A / T**2
23
+ + const.VAN_HOOK_1968_ALPHA_I_2H_B / T
24
+ + const.VAN_HOOK_1968_ALPHA_I_2H_C
25
25
  )
26
26
 
27
27
  @staticmethod
28
- def alpha_l_H2_18O(const, T):
28
+ def alpha_l_18O(const, T):
29
29
  return np.exp(
30
- const.VAN_HOOK_1968_ALPHA_L_H218O_A / T**2
31
- + const.VAN_HOOK_1968_ALPHA_L_H218O_B / T
32
- + const.VAN_HOOK_1968_ALPHA_L_H218O_C
30
+ const.VAN_HOOK_1968_ALPHA_L_18O_A / T**2
31
+ + const.VAN_HOOK_1968_ALPHA_L_18O_B / T
32
+ + const.VAN_HOOK_1968_ALPHA_L_18O_C
33
33
  )
34
34
 
35
35
  @staticmethod
36
- def alpha_i_H2_18O(const, T):
36
+ def alpha_i_18O(const, T):
37
37
  return np.exp(
38
- const.VAN_HOOK_1968_ALPHA_I_H218O_A / T**2
39
- + const.VAN_HOOK_1968_ALPHA_I_H218O_B / T
40
- + const.VAN_HOOK_1968_ALPHA_I_H218O_C
38
+ const.VAN_HOOK_1968_ALPHA_I_18O_A / T**2
39
+ + const.VAN_HOOK_1968_ALPHA_I_18O_B / T
40
+ + const.VAN_HOOK_1968_ALPHA_I_18O_C
41
41
  )
42
42
 
43
43
  @staticmethod
44
- def alpha_l_H2_17O(const, T):
44
+ def alpha_l_17O(const, T):
45
45
  return np.exp(
46
- const.VAN_HOOK_1968_ALPHA_L_H217O_A / T**2
47
- + const.VAN_HOOK_1968_ALPHA_L_H217O_B / T
48
- + const.VAN_HOOK_1968_ALPHA_L_H217O_C
46
+ const.VAN_HOOK_1968_ALPHA_L_17O_A / T**2
47
+ + const.VAN_HOOK_1968_ALPHA_L_17O_B / T
48
+ + const.VAN_HOOK_1968_ALPHA_L_17O_C
49
49
  )
50
50
 
51
51
  @staticmethod
52
- def alpha_i_H2_17O(const, T):
52
+ def alpha_i_17O(const, T):
53
53
  return np.exp(
54
- const.VAN_HOOK_1968_ALPHA_I_H217O_A / T**2
55
- + const.VAN_HOOK_1968_ALPHA_I_H217O_B / T
56
- + const.VAN_HOOK_1968_ALPHA_I_H217O_C
54
+ const.VAN_HOOK_1968_ALPHA_I_17O_A / T**2
55
+ + const.VAN_HOOK_1968_ALPHA_I_17O_B / T
56
+ + const.VAN_HOOK_1968_ALPHA_I_17O_C
57
57
  )
58
58
 
59
59
  @staticmethod
60
- def alpha_l_HOT(const, T):
60
+ def alpha_l_3H(const, T):
61
61
  return np.exp(
62
- const.VAN_HOOK_1968_ALPHA_L_HOT_A / T**2
63
- + const.VAN_HOOK_1968_ALPHA_L_HOT_B / T
64
- + const.VAN_HOOK_1968_ALPHA_L_HOT_C
62
+ const.VAN_HOOK_1968_ALPHA_L_3H_A / T**2
63
+ + const.VAN_HOOK_1968_ALPHA_L_3H_B / T
64
+ + const.VAN_HOOK_1968_ALPHA_L_3H_C
65
65
  )
66
66
 
67
67
  @staticmethod
68
- def alpha_i_HOT(const, T):
68
+ def alpha_i_3H(const, T):
69
69
  return np.exp(
70
- const.VAN_HOOK_1968_ALPHA_I_HOT_A / T**2
71
- + const.VAN_HOOK_1968_ALPHA_I_HOT_B / T
72
- + const.VAN_HOOK_1968_ALPHA_I_HOT_C
70
+ const.VAN_HOOK_1968_ALPHA_I_3H_A / T**2
71
+ + const.VAN_HOOK_1968_ALPHA_I_3H_B / T
72
+ + const.VAN_HOOK_1968_ALPHA_I_3H_C
73
73
  )
74
74
 
75
75
  @staticmethod
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: PySDM
3
- Version: 2.35
3
+ Version: 2.40
4
4
  Summary: Pythonic particle-based (super-droplet) warm-rain/aqueous-chemistry cloud microphysics package with box, parcel & 1D/2D prescribed-flow examples in Python, Julia and Matlab
5
5
  Home-page: https://github.com/open-atmos/PySDM
6
6
  Author: https://github.com/open-atmos/PySDM/graphs/contributors
@@ -48,10 +48,17 @@ Description: # PySDM
48
48
 
49
49
  There is a growing set of example Jupyter notebooks exemplifying how to perform
50
50
  various types of calculations and simulations using PySDM.
51
- Most of the example notebooks reproduce resutls and plot from literature, see below for
51
+ Most of the example notebooks reproduce results and plot from literature, see below for
52
52
  a list of examples and links to the notebooks (which can be either executed or viewed
53
53
  "in the cloud").
54
54
 
55
+ There are also a growing set of [tutorials](https://github.com/open-atmos/PySDM/tree/main/tutorials), also in the form of Jupyter notebooks.
56
+ These tutorials are intended for teaching purposes and include short explanations of cloud microphysical
57
+ concepts paired with widgets for running interactive simulations using PySDM.
58
+ Each tutorial also comes with a set of questions at the end that can be used as homework problems.
59
+ Like the examples, these tutorials can be executed or viewed "in the cloud" making it an especially
60
+ easy way for students to get started.
61
+
55
62
  PySDM has two alternative parallel number-crunching backends
56
63
  available: multi-threaded CPU backend based on [Numba](http://numba.pydata.org/)
57
64
  and GPU-resident backend built on top of [ThrustRTC](https://pypi.org/project/ThrustRTC/).
@@ -789,20 +796,23 @@ Description: # PySDM
789
796
  The development and maintenance of PySDM is led by [Sylwester Arabas](https://github.com/slayoo/).
790
797
  [Piotr Bartman](https://github.com/piotrbartman/) had been the architect and main developer
791
798
  of technological solutions in PySDM.
792
- The suite of examples shipped with PySDM includes contributions from researchers
799
+ PySDM includes contributions from researchers
793
800
  from [Jagiellonian University](https://en.uj.edu.pl/en) departments of computer science, physics and chemistry;
794
- and from
795
- [Caltech's Climate Modelling Alliance](https://clima.caltech.edu/).
801
+ from [Caltech's Climate Modelling Alliance](https://clima.caltech.edu/),
802
+ from [University of Warsaw](https://en.uw.edu.pl/) (dept. physics), and
803
+ from [AGH University of Krakow](https://agh.edu.pl/en) (dept. physics \& applied computer science) where release maintenance takes place currently.
796
804
 
797
805
  Development of PySDM had been initially supported by the EU through a grant of the
798
- [Foundation for Polish Science](https://www.fnp.org.pl/)) (POIR.04.04.00-00-5E1C/18)
806
+ [Foundation for Polish Science](https://www.fnp.org.pl/)) (grant no. POIR.04.04.00-00-5E1C/18)
799
807
  realised at the [Jagiellonian University](https://en.uj.edu.pl/en).
800
- The immersion freezing support in PySDM is developed with support from the
808
+ The immersion freezing support in PySDM was developed with support from the
801
809
  US Department of Energy [Atmospheric System Research](https://asr.science.energy.gov/) programme
802
- through a grant realised at the
810
+ through a grant (no. DE-SC0021034) realised at the
803
811
  [University of Illinois at Urbana-Champaign](https://illinois.edu/).
812
+ Development of isotopic fractionation representation and mixed-phase support is carried out with support from
813
+ the [Polish National Science Centre](https://ncn.gov.pl/en) (grant no. 2020/39/D/ST10/01220).
804
814
 
805
- copyright: [Jagiellonian University](https://en.uj.edu.pl/en)
815
+ copyright: [Jagiellonian University](https://en.uj.edu.pl/en) (2019-2023) & [AGH University of Krakow](https://agh.edu.pl/en) (2023-...)
806
816
  licence: [GPL v3](https://www.gnu.org/licenses/gpl-3.0.html)
807
817
 
808
818
  ## Related resources and open-source projects
@@ -262,6 +262,7 @@ PySDM/physics/impl/flag.py
262
262
  PySDM/physics/isotope_equilibrium_fractionation_factors/__init__.py
263
263
  PySDM/physics/isotope_equilibrium_fractionation_factors/barkan_and_luz_2005.py
264
264
  PySDM/physics/isotope_equilibrium_fractionation_factors/bolot_et_al_2013.py
265
+ PySDM/physics/isotope_equilibrium_fractionation_factors/graf_phd_2017.py
265
266
  PySDM/physics/isotope_equilibrium_fractionation_factors/horita_and_wesolowski_1994.py
266
267
  PySDM/physics/isotope_equilibrium_fractionation_factors/majoube_1970.py
267
268
  PySDM/physics/isotope_equilibrium_fractionation_factors/majoube_1971.py
@@ -451,6 +452,9 @@ examples/PySDM_examples/Grabowski_and_Pawlowska_2023/figure_4.ipynb
451
452
  examples/PySDM_examples/Grabowski_and_Pawlowska_2023/figure_ripening_rate.ipynb
452
453
  examples/PySDM_examples/Grabowski_and_Pawlowska_2023/settings.py
453
454
  examples/PySDM_examples/Grabowski_and_Pawlowska_2023/simulation.py
455
+ examples/PySDM_examples/Graf_et_al_2019/Table_1.ipynb
456
+ examples/PySDM_examples/Graf_et_al_2019/__init__.py
457
+ examples/PySDM_examples/Graf_et_al_2019/figure_4.ipynb
454
458
  examples/PySDM_examples/Jaruga_and_Pawlowska_2018/__init__.py
455
459
  examples/PySDM_examples/Jaruga_and_Pawlowska_2018/fig_2.ipynb
456
460
  examples/PySDM_examples/Jaruga_and_Pawlowska_2018/fig_3.ipynb
@@ -485,8 +489,11 @@ examples/PySDM_examples/Pierchala_et_al_2022/fig_3.ipynb
485
489
  examples/PySDM_examples/Pierchala_et_al_2022/fig_4.ipynb
486
490
  examples/PySDM_examples/Pyrcel/__init__.py
487
491
  examples/PySDM_examples/Pyrcel/example_basic_run.ipynb
492
+ examples/PySDM_examples/Pyrcel/profile_plotter.py
488
493
  examples/PySDM_examples/Pyrcel/settings.py
489
494
  examples/PySDM_examples/Pyrcel/simulation.py
495
+ examples/PySDM_examples/Pyrcel/tutorial_settings.py
496
+ examples/PySDM_examples/Pyrcel/tutorial_simulation.py
490
497
  examples/PySDM_examples/Shima_et_al_2009/__init__.py
491
498
  examples/PySDM_examples/Shima_et_al_2009/error_measure.py
492
499
  examples/PySDM_examples/Shima_et_al_2009/example.py
@@ -494,6 +501,9 @@ examples/PySDM_examples/Shima_et_al_2009/example_timing.py
494
501
  examples/PySDM_examples/Shima_et_al_2009/fig_2.ipynb
495
502
  examples/PySDM_examples/Shima_et_al_2009/settings.py
496
503
  examples/PySDM_examples/Shima_et_al_2009/spectrum_plotter.py
504
+ examples/PySDM_examples/Shima_et_al_2009/tutorial_example.py
505
+ examples/PySDM_examples/Shima_et_al_2009/tutorial_plotter.py
506
+ examples/PySDM_examples/Shima_et_al_2009/tutorial_settings.py
497
507
  examples/PySDM_examples/Shipway_and_Hill_2012/__init__.py
498
508
  examples/PySDM_examples/Shipway_and_Hill_2012/fig_1.ipynb
499
509
  examples/PySDM_examples/Shipway_and_Hill_2012/mpdata_1d.py
@@ -543,6 +553,7 @@ examples/PySDM_examples/deJong_Mackay_et_al_2023/data/straub_fig10.csv
543
553
  examples/PySDM_examples/utils/__init__.py
544
554
  examples/PySDM_examples/utils/basic_simulation.py
545
555
  examples/PySDM_examples/utils/dummy_controller.py
556
+ examples/PySDM_examples/utils/notebook_vars.py
546
557
  examples/PySDM_examples/utils/progbar_controller.py
547
558
  examples/PySDM_examples/utils/read_vtk_1d.py
548
559
  examples/PySDM_examples/utils/widgets/__init__.py
@@ -601,8 +612,8 @@ tests/smoke_tests/no_env/pierchala_et_al_2022/__init__.py
601
612
  tests/smoke_tests/no_env/pierchala_et_al_2022/test_fig_3.py
602
613
  tests/smoke_tests/no_env/pierchala_et_al_2022/test_fig_4.py
603
614
  tests/smoke_tests/no_env/pierchala_et_al_2022/test_supplement.py
604
- tests/smoke_tests/no_env/pierchala_et_al_2022/utils.py
605
615
  tests/smoke_tests/parcel/abdul_razzak_ghan_2000/__init__.py
616
+ tests/smoke_tests/parcel/abdul_razzak_ghan_2000/test_ARG_example.py
606
617
  tests/smoke_tests/parcel/abdul_razzak_ghan_2000/test_just_do_it.py
607
618
  tests/smoke_tests/parcel/abdul_razzak_ghan_2000/test_single_supersaturation_peak.py
608
619
  tests/smoke_tests/parcel/arabas_and_shima_2017/__init__.py
@@ -617,6 +628,9 @@ tests/smoke_tests/parcel/grabowski_and_pawlowska_2023/test_figure_1_and_2.py
617
628
  tests/smoke_tests/parcel/grabowski_and_pawlowska_2023/test_figure_3.py
618
629
  tests/smoke_tests/parcel/grabowski_and_pawlowska_2023/test_figure_4.py
619
630
  tests/smoke_tests/parcel/grabowski_and_pawlowska_2023/test_ripening_rate.py
631
+ tests/smoke_tests/parcel/graf_et_al_2019/__init__.py
632
+ tests/smoke_tests/parcel/graf_et_al_2019/test_fig_4.py
633
+ tests/smoke_tests/parcel/graf_et_al_2019/test_table_1.py
620
634
  tests/smoke_tests/parcel/kreidenweis_et_al_2003/__init__.py
621
635
  tests/smoke_tests/parcel/kreidenweis_et_al_2003/test_fig_1.py
622
636
  tests/smoke_tests/parcel/kreidenweis_et_al_2003/test_ionic_strength.py
@@ -624,6 +638,7 @@ tests/smoke_tests/parcel/kreidenweis_et_al_2003/test_spectrum_at_t_0.py
624
638
  tests/smoke_tests/parcel/kreidenweis_et_al_2003/test_table_3.py
625
639
  tests/smoke_tests/parcel/lowe_et_al_2019/__init__.py
626
640
  tests/smoke_tests/parcel/lowe_et_al_2019/conftest.py
641
+ tests/smoke_tests/parcel/lowe_et_al_2019/test_dz_sensitivity.py
627
642
  tests/smoke_tests/parcel/lowe_et_al_2019/test_fig_1.py
628
643
  tests/smoke_tests/parcel/lowe_et_al_2019/test_fig_2.py
629
644
  tests/smoke_tests/parcel/lowe_et_al_2019/test_surface_tension_models.py
@@ -636,6 +651,9 @@ tests/smoke_tests/parcel/yang_et_al_2018/__init__.py
636
651
  tests/smoke_tests/parcel/yang_et_al_2018/test_displacement.py
637
652
  tests/smoke_tests/parcel/yang_et_al_2018/test_initialisation.py
638
653
  tests/smoke_tests/parcel/yang_et_al_2018/test_just_do_it.py
654
+ tests/tutorials_tests/__init__.py
655
+ tests/tutorials_tests/conftest.py
656
+ tests/tutorials_tests/test_run_notebooks.py
639
657
  tests/unit_tests/__init__.py
640
658
  tests/unit_tests/conftest.py
641
659
  tests/unit_tests/dummy_environment.py
@@ -725,4 +743,9 @@ tests/unit_tests/products/test_collision_rates.py
725
743
  tests/unit_tests/products/test_concentration_product.py
726
744
  tests/unit_tests/products/test_cooling_rate.py
727
745
  tests/unit_tests/products/test_impl.py
728
- tests/unit_tests/products/test_particle_size_product.py
746
+ tests/unit_tests/products/test_particle_size_product.py
747
+ tutorials/README.md
748
+ tutorials/collisions/collection_droplet.svg
749
+ tutorials/collisions/collisions_playground.ipynb
750
+ tutorials/condensation/condensation_playground.ipynb
751
+ tutorials/condensation/kohler_curve.svg