PySDM 2.64__tar.gz → 2.66__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 (857) hide show
  1. {PySDM-2.64 → PySDM-2.66}/.github/workflows/tests+artifacts+pypi.yml +1 -1
  2. {PySDM-2.64 → PySDM-2.66}/PKG-INFO +1 -1
  3. {PySDM-2.64 → PySDM-2.66}/PySDM/__init__.py +3 -0
  4. PySDM-2.66/PySDM/attributes/__init__.py +9 -0
  5. {PySDM-2.64 → PySDM-2.66}/PySDM/attributes/chemistry/acidity.py +2 -1
  6. PySDM-2.66/PySDM/attributes/chemistry/concentration.py +25 -0
  7. {PySDM-2.64 → PySDM-2.66}/PySDM/attributes/chemistry/hydrogen_ion_concentration.py +2 -1
  8. {PySDM-2.64 → PySDM-2.66}/PySDM/attributes/ice/cooling_rate.py +2 -2
  9. {PySDM-2.64 → PySDM-2.66}/PySDM/attributes/ice/freezing_temperature.py +2 -1
  10. {PySDM-2.64 → PySDM-2.66}/PySDM/attributes/ice/immersed_surface_area.py +2 -1
  11. {PySDM-2.64 → PySDM-2.66}/PySDM/attributes/impl/__init__.py +2 -0
  12. PySDM-2.66/PySDM/attributes/impl/attribute_registry.py +62 -0
  13. {PySDM-2.64 → PySDM-2.66}/PySDM/attributes/impl/dummy_attribute.py +0 -14
  14. PySDM-2.66/PySDM/attributes/isotopes/__init__.py +6 -0
  15. {PySDM-2.64 → PySDM-2.66}/PySDM/attributes/isotopes/delta.py +6 -1
  16. PySDM-2.64/PySDM/attributes/isotopes/moles_light_isotopes.py → PySDM-2.66/PySDM/attributes/isotopes/moles.py +10 -1
  17. {PySDM-2.64 → PySDM-2.66}/PySDM/attributes/numerics/__init__.py +1 -1
  18. {PySDM-2.64 → PySDM-2.66}/PySDM/attributes/numerics/cell_id.py +3 -2
  19. {PySDM-2.64 → PySDM-2.66}/PySDM/attributes/numerics/cell_origin.py +2 -1
  20. {PySDM-2.64 → PySDM-2.66}/PySDM/attributes/numerics/position_in_cell.py +2 -1
  21. {PySDM-2.64 → PySDM-2.66}/PySDM/attributes/physics/__init__.py +3 -2
  22. {PySDM-2.64 → PySDM-2.66}/PySDM/attributes/physics/area.py +2 -1
  23. {PySDM-2.64 → PySDM-2.66}/PySDM/attributes/physics/critical_supersaturation.py +2 -1
  24. {PySDM-2.64 → PySDM-2.66}/PySDM/attributes/physics/critical_volume.py +3 -1
  25. {PySDM-2.64 → PySDM-2.66}/PySDM/attributes/physics/dry_radius.py +2 -1
  26. {PySDM-2.64 → PySDM-2.66}/PySDM/attributes/physics/dry_volume.py +21 -2
  27. {PySDM-2.64 → PySDM-2.66}/PySDM/attributes/physics/equilibrium_supersaturation.py +2 -1
  28. {PySDM-2.64 → PySDM-2.66}/PySDM/attributes/physics/heat.py +2 -1
  29. {PySDM-2.64 → PySDM-2.66}/PySDM/attributes/physics/hygroscopicity.py +3 -2
  30. PySDM-2.64/PySDM/attributes/physics/multiplicities.py → PySDM-2.66/PySDM/attributes/physics/multiplicity.py +4 -4
  31. {PySDM-2.64 → PySDM-2.66}/PySDM/attributes/physics/radius.py +3 -1
  32. {PySDM-2.64 → PySDM-2.66}/PySDM/attributes/physics/relative_fall_velocity.py +17 -2
  33. {PySDM-2.64 → PySDM-2.66}/PySDM/attributes/physics/reynolds_number.py +6 -1
  34. {PySDM-2.64 → PySDM-2.66}/PySDM/attributes/physics/temperature.py +2 -1
  35. {PySDM-2.64 → PySDM-2.66}/PySDM/attributes/physics/terminal_velocity.py +6 -1
  36. {PySDM-2.64 → PySDM-2.66}/PySDM/attributes/physics/volume.py +2 -1
  37. PySDM-2.64/PySDM/attributes/physics/mass.py → PySDM-2.66/PySDM/attributes/physics/water_mass.py +2 -1
  38. {PySDM-2.64 → PySDM-2.66}/PySDM/builder.py +5 -8
  39. {PySDM-2.64 → PySDM-2.66}/PySDM/dynamics/collisions/collision.py +2 -2
  40. PySDM-2.66/PySDM/impl/camel_case.py +13 -0
  41. {PySDM-2.64 → PySDM-2.66}/PySDM/impl/particle_attributes_factory.py +7 -2
  42. {PySDM-2.64 → PySDM-2.66}/PySDM/initialisation/init_fall_momenta.py +9 -8
  43. {PySDM-2.64 → PySDM-2.66}/PySDM/products/impl/product.py +2 -9
  44. {PySDM-2.64 → PySDM-2.66}/PySDM.egg-info/PKG-INFO +1 -1
  45. {PySDM-2.64 → PySDM-2.66}/PySDM.egg-info/SOURCES.txt +7 -4
  46. {PySDM-2.64 → PySDM-2.66}/PySDM.egg-info/requires.txt +1 -1
  47. PySDM-2.66/examples/PySDM_examples/Grabowski_and_Pawlowska_2023/figure_1.ipynb +11756 -0
  48. PySDM-2.66/examples/PySDM_examples/Grabowski_and_Pawlowska_2023/figure_2.ipynb +10767 -0
  49. PySDM-2.66/examples/PySDM_examples/Grabowski_and_Pawlowska_2023/figure_3.ipynb +4916 -0
  50. PySDM-2.66/examples/PySDM_examples/Grabowski_and_Pawlowska_2023/figure_4.ipynb +2280 -0
  51. PySDM-2.66/examples/PySDM_examples/Grabowski_and_Pawlowska_2023/figure_ripening_rate.ipynb +13826 -0
  52. {PySDM-2.64 → PySDM-2.66}/examples/PySDM_examples/Grabowski_and_Pawlowska_2023/simulation.py +5 -1
  53. {PySDM-2.64 → PySDM-2.66}/examples/PySDM_examples/Rozanski_and_Sonntag_1982/figs_4_5_6.ipynb +3291 -3277
  54. {PySDM-2.64 → PySDM-2.66}/examples/README.md +3 -3
  55. {PySDM-2.64 → PySDM-2.66}/setup.py +1 -1
  56. {PySDM-2.64 → PySDM-2.66}/tests/smoke_tests/box/berry_1967/test_coalescence.py +4 -4
  57. PySDM-2.66/tests/unit_tests/attributes/test_impl_attribute_registry.py +46 -0
  58. {PySDM-2.64 → PySDM-2.66}/tests/unit_tests/attributes/test_multiplicities.py +4 -4
  59. {PySDM-2.64 → PySDM-2.66}/tests/unit_tests/backends/test_freezing_methods.py +9 -9
  60. {PySDM-2.64 → PySDM-2.66}/tests/unit_tests/dummy_particulator.py +5 -4
  61. {PySDM-2.64 → PySDM-2.66}/tests/unit_tests/dynamics/collisions/test_croupiers.py +1 -1
  62. {PySDM-2.64 → PySDM-2.66}/tests/unit_tests/dynamics/collisions/test_sdm_multi_cell.py +1 -2
  63. PySDM-2.66/tests/unit_tests/impl/test_camel_case.py +21 -0
  64. {PySDM-2.64 → PySDM-2.66}/tests/unit_tests/impl/test_particle_attributes.py +5 -5
  65. PySDM-2.66/tests/unit_tests/initialisation/test_init_fall_momenta.py +71 -0
  66. {PySDM-2.64 → PySDM-2.66}/tests/unit_tests/products/test_impl.py +0 -15
  67. PySDM-2.64/PySDM/attributes/__init__.py +0 -3
  68. PySDM-2.64/PySDM/attributes/chemistry/concentration.py +0 -17
  69. PySDM-2.64/PySDM/attributes/impl/mapper.py +0 -134
  70. PySDM-2.64/PySDM/attributes/isotopes/__init__.py +0 -5
  71. PySDM-2.64/examples/PySDM_examples/Grabowski_and_Pawlowska_2023/figure_1.ipynb +0 -233
  72. PySDM-2.64/examples/PySDM_examples/Grabowski_and_Pawlowska_2023/figure_2.ipynb +0 -232
  73. PySDM-2.64/examples/PySDM_examples/Grabowski_and_Pawlowska_2023/figure_3.ipynb +0 -198
  74. PySDM-2.64/examples/PySDM_examples/Grabowski_and_Pawlowska_2023/figure_4.ipynb +0 -180
  75. PySDM-2.64/examples/PySDM_examples/Grabowski_and_Pawlowska_2023/figure_ripening_rate.ipynb +0 -204
  76. PySDM-2.64/tests/unit_tests/initialisation/test_init_fall_momenta.py +0 -71
  77. {PySDM-2.64 → PySDM-2.66}/.appveyor.yml +0 -0
  78. {PySDM-2.64 → PySDM-2.66}/.binder/apt.txt +0 -0
  79. {PySDM-2.64 → PySDM-2.66}/.binder/postBuild +0 -0
  80. {PySDM-2.64 → PySDM-2.66}/.binder/requirements.txt +0 -0
  81. {PySDM-2.64 → PySDM-2.66}/.codecov.yml +0 -0
  82. {PySDM-2.64 → PySDM-2.66}/.github/dependabot.yml +0 -0
  83. {PySDM-2.64 → PySDM-2.66}/.github/workflows/cancel.yml +0 -0
  84. {PySDM-2.64 → PySDM-2.66}/.github/workflows/joss.yml +0 -0
  85. {PySDM-2.64 → PySDM-2.66}/.github/workflows/joss_paper.yml +0 -0
  86. {PySDM-2.64 → PySDM-2.66}/.github/workflows/pdoc_index_workaround.py +0 -0
  87. {PySDM-2.64 → PySDM-2.66}/.github/workflows/readme_snippets.yml +0 -0
  88. {PySDM-2.64 → PySDM-2.66}/.github/workflows/stale.yml +0 -0
  89. {PySDM-2.64 → PySDM-2.66}/.gitignore +0 -0
  90. {PySDM-2.64 → PySDM-2.66}/.gitmodules +0 -0
  91. {PySDM-2.64 → PySDM-2.66}/.pre-commit-config.yaml +0 -0
  92. {PySDM-2.64 → PySDM-2.66}/.zenodo.json +0 -0
  93. {PySDM-2.64 → PySDM-2.66}/LICENSE +0 -0
  94. {PySDM-2.64 → PySDM-2.66}/PySDM/attributes/chemistry/__init__.py +0 -0
  95. {PySDM-2.64 → PySDM-2.66}/PySDM/attributes/ice/__init__.py +0 -0
  96. {PySDM-2.64 → PySDM-2.66}/PySDM/attributes/impl/attribute.py +0 -0
  97. {PySDM-2.64 → PySDM-2.66}/PySDM/attributes/impl/base_attribute.py +0 -0
  98. {PySDM-2.64 → PySDM-2.66}/PySDM/attributes/impl/cell_attribute.py +0 -0
  99. {PySDM-2.64 → PySDM-2.66}/PySDM/attributes/impl/derived_attribute.py +0 -0
  100. {PySDM-2.64 → PySDM-2.66}/PySDM/attributes/impl/extensive_attribute.py +0 -0
  101. {PySDM-2.64 → PySDM-2.66}/PySDM/attributes/impl/intensive_attribute.py +0 -0
  102. {PySDM-2.64 → PySDM-2.66}/PySDM/attributes/impl/maximum_attribute.py +0 -0
  103. {PySDM-2.64 → PySDM-2.66}/PySDM/attributes/impl/mole_amount.py +0 -0
  104. {PySDM-2.64 → PySDM-2.66}/PySDM/backends/__init__.py +0 -0
  105. {PySDM-2.64 → PySDM-2.66}/PySDM/backends/impl_common/__init__.py +0 -0
  106. {PySDM-2.64 → PySDM-2.66}/PySDM/backends/impl_common/backend_methods.py +0 -0
  107. {PySDM-2.64 → PySDM-2.66}/PySDM/backends/impl_common/freezing_attributes.py +0 -0
  108. {PySDM-2.64 → PySDM-2.66}/PySDM/backends/impl_common/index.py +0 -0
  109. {PySDM-2.64 → PySDM-2.66}/PySDM/backends/impl_common/indexed_storage.py +0 -0
  110. {PySDM-2.64 → PySDM-2.66}/PySDM/backends/impl_common/pair_indicator.py +0 -0
  111. {PySDM-2.64 → PySDM-2.66}/PySDM/backends/impl_common/pairwise_storage.py +0 -0
  112. {PySDM-2.64 → PySDM-2.66}/PySDM/backends/impl_common/random_common.py +0 -0
  113. {PySDM-2.64 → PySDM-2.66}/PySDM/backends/impl_common/storage_utils.py +0 -0
  114. {PySDM-2.64 → PySDM-2.66}/PySDM/backends/impl_numba/__init__.py +0 -0
  115. {PySDM-2.64 → PySDM-2.66}/PySDM/backends/impl_numba/atomic_operations.py +0 -0
  116. {PySDM-2.64 → PySDM-2.66}/PySDM/backends/impl_numba/conf.py +0 -0
  117. {PySDM-2.64 → PySDM-2.66}/PySDM/backends/impl_numba/methods/__init__.py +0 -0
  118. {PySDM-2.64 → PySDM-2.66}/PySDM/backends/impl_numba/methods/chemistry_methods.py +0 -0
  119. {PySDM-2.64 → PySDM-2.66}/PySDM/backends/impl_numba/methods/collisions_methods.py +0 -0
  120. {PySDM-2.64 → PySDM-2.66}/PySDM/backends/impl_numba/methods/condensation_methods.py +0 -0
  121. {PySDM-2.64 → PySDM-2.66}/PySDM/backends/impl_numba/methods/displacement_methods.py +0 -0
  122. {PySDM-2.64 → PySDM-2.66}/PySDM/backends/impl_numba/methods/fragmentation_methods.py +0 -0
  123. {PySDM-2.64 → PySDM-2.66}/PySDM/backends/impl_numba/methods/freezing_methods.py +0 -0
  124. {PySDM-2.64 → PySDM-2.66}/PySDM/backends/impl_numba/methods/index_methods.py +0 -0
  125. {PySDM-2.64 → PySDM-2.66}/PySDM/backends/impl_numba/methods/isotope_methods.py +0 -0
  126. {PySDM-2.64 → PySDM-2.66}/PySDM/backends/impl_numba/methods/moments_methods.py +0 -0
  127. {PySDM-2.64 → PySDM-2.66}/PySDM/backends/impl_numba/methods/pair_methods.py +0 -0
  128. {PySDM-2.64 → PySDM-2.66}/PySDM/backends/impl_numba/methods/physics_methods.py +0 -0
  129. {PySDM-2.64 → PySDM-2.66}/PySDM/backends/impl_numba/methods/terminal_velocity_methods.py +0 -0
  130. {PySDM-2.64 → PySDM-2.66}/PySDM/backends/impl_numba/random.py +0 -0
  131. {PySDM-2.64 → PySDM-2.66}/PySDM/backends/impl_numba/storage.py +0 -0
  132. {PySDM-2.64 → PySDM-2.66}/PySDM/backends/impl_numba/storage_impl.py +0 -0
  133. {PySDM-2.64 → PySDM-2.66}/PySDM/backends/impl_numba/test_helpers/__init__.py +0 -0
  134. {PySDM-2.64 → PySDM-2.66}/PySDM/backends/impl_numba/test_helpers/scipy_ode_condensation_solver.py +0 -0
  135. {PySDM-2.64 → PySDM-2.66}/PySDM/backends/impl_numba/toms748.py +0 -0
  136. {PySDM-2.64 → PySDM-2.66}/PySDM/backends/impl_numba/warnings.py +0 -0
  137. {PySDM-2.64 → PySDM-2.66}/PySDM/backends/impl_thrust_rtc/__init__.py +0 -0
  138. {PySDM-2.64 → PySDM-2.66}/PySDM/backends/impl_thrust_rtc/bisection.py +0 -0
  139. {PySDM-2.64 → PySDM-2.66}/PySDM/backends/impl_thrust_rtc/conf.py +0 -0
  140. {PySDM-2.64 → PySDM-2.66}/PySDM/backends/impl_thrust_rtc/methods/__init__.py +0 -0
  141. {PySDM-2.64 → PySDM-2.66}/PySDM/backends/impl_thrust_rtc/methods/collisions_methods.py +0 -0
  142. {PySDM-2.64 → PySDM-2.66}/PySDM/backends/impl_thrust_rtc/methods/condensation_methods.py +0 -0
  143. {PySDM-2.64 → PySDM-2.66}/PySDM/backends/impl_thrust_rtc/methods/displacement_methods.py +0 -0
  144. {PySDM-2.64 → PySDM-2.66}/PySDM/backends/impl_thrust_rtc/methods/freezing_methods.py +0 -0
  145. {PySDM-2.64 → PySDM-2.66}/PySDM/backends/impl_thrust_rtc/methods/index_methods.py +0 -0
  146. {PySDM-2.64 → PySDM-2.66}/PySDM/backends/impl_thrust_rtc/methods/isotope_methods.py +0 -0
  147. {PySDM-2.64 → PySDM-2.66}/PySDM/backends/impl_thrust_rtc/methods/moments_methods.py +0 -0
  148. {PySDM-2.64 → PySDM-2.66}/PySDM/backends/impl_thrust_rtc/methods/pair_methods.py +0 -0
  149. {PySDM-2.64 → PySDM-2.66}/PySDM/backends/impl_thrust_rtc/methods/physics_methods.py +0 -0
  150. {PySDM-2.64 → PySDM-2.66}/PySDM/backends/impl_thrust_rtc/methods/terminal_velocity_methods.py +0 -0
  151. {PySDM-2.64 → PySDM-2.66}/PySDM/backends/impl_thrust_rtc/methods/thrust_rtc_backend_methods.py +0 -0
  152. {PySDM-2.64 → PySDM-2.66}/PySDM/backends/impl_thrust_rtc/nice_thrust.py +0 -0
  153. {PySDM-2.64 → PySDM-2.66}/PySDM/backends/impl_thrust_rtc/random.py +0 -0
  154. {PySDM-2.64 → PySDM-2.66}/PySDM/backends/impl_thrust_rtc/storage.py +0 -0
  155. {PySDM-2.64 → PySDM-2.66}/PySDM/backends/impl_thrust_rtc/test_helpers/__init__.py +0 -0
  156. {PySDM-2.64 → PySDM-2.66}/PySDM/backends/impl_thrust_rtc/test_helpers/cpp2python.py +0 -0
  157. {PySDM-2.64 → PySDM-2.66}/PySDM/backends/impl_thrust_rtc/test_helpers/fake_thrust_rtc.py +0 -0
  158. {PySDM-2.64 → PySDM-2.66}/PySDM/backends/impl_thrust_rtc/test_helpers/flag.py +0 -0
  159. {PySDM-2.64 → PySDM-2.66}/PySDM/backends/numba.py +0 -0
  160. {PySDM-2.64 → PySDM-2.66}/PySDM/backends/thrust_rtc.py +0 -0
  161. {PySDM-2.64 → PySDM-2.66}/PySDM/dynamics/__init__.py +0 -0
  162. {PySDM-2.64 → PySDM-2.66}/PySDM/dynamics/ambient_thermodynamics.py +0 -0
  163. {PySDM-2.64 → PySDM-2.66}/PySDM/dynamics/aqueous_chemistry.py +0 -0
  164. {PySDM-2.64 → PySDM-2.66}/PySDM/dynamics/collisions/__init__.py +0 -0
  165. {PySDM-2.64 → PySDM-2.66}/PySDM/dynamics/collisions/breakup_efficiencies/__init__.py +0 -0
  166. {PySDM-2.64 → PySDM-2.66}/PySDM/dynamics/collisions/breakup_efficiencies/constEb.py +0 -0
  167. {PySDM-2.64 → PySDM-2.66}/PySDM/dynamics/collisions/breakup_fragmentations/__init__.py +0 -0
  168. {PySDM-2.64 → PySDM-2.66}/PySDM/dynamics/collisions/breakup_fragmentations/always_n.py +0 -0
  169. {PySDM-2.64 → PySDM-2.66}/PySDM/dynamics/collisions/breakup_fragmentations/constant_mass.py +0 -0
  170. {PySDM-2.64 → PySDM-2.66}/PySDM/dynamics/collisions/breakup_fragmentations/expon_frag.py +0 -0
  171. {PySDM-2.64 → PySDM-2.66}/PySDM/dynamics/collisions/breakup_fragmentations/exponential.py +0 -0
  172. {PySDM-2.64 → PySDM-2.66}/PySDM/dynamics/collisions/breakup_fragmentations/feingold1988.py +0 -0
  173. {PySDM-2.64 → PySDM-2.66}/PySDM/dynamics/collisions/breakup_fragmentations/gaussian.py +0 -0
  174. {PySDM-2.64 → PySDM-2.66}/PySDM/dynamics/collisions/breakup_fragmentations/impl/__init__.py +0 -0
  175. {PySDM-2.64 → PySDM-2.66}/PySDM/dynamics/collisions/breakup_fragmentations/impl/volume_based.py +0 -0
  176. {PySDM-2.64 → PySDM-2.66}/PySDM/dynamics/collisions/breakup_fragmentations/lowlist82.py +0 -0
  177. {PySDM-2.64 → PySDM-2.66}/PySDM/dynamics/collisions/breakup_fragmentations/slams.py +0 -0
  178. {PySDM-2.64 → PySDM-2.66}/PySDM/dynamics/collisions/breakup_fragmentations/straub2010.py +0 -0
  179. {PySDM-2.64 → PySDM-2.66}/PySDM/dynamics/collisions/coalescence_efficiencies/__init__.py +0 -0
  180. {PySDM-2.64 → PySDM-2.66}/PySDM/dynamics/collisions/coalescence_efficiencies/_gravitational.py +0 -0
  181. {PySDM-2.64 → PySDM-2.66}/PySDM/dynamics/collisions/coalescence_efficiencies/_parameterized.py +0 -0
  182. {PySDM-2.64 → PySDM-2.66}/PySDM/dynamics/collisions/coalescence_efficiencies/berry1967.py +0 -0
  183. {PySDM-2.64 → PySDM-2.66}/PySDM/dynamics/collisions/coalescence_efficiencies/constEc.py +0 -0
  184. {PySDM-2.64 → PySDM-2.66}/PySDM/dynamics/collisions/coalescence_efficiencies/lowlist1982.py +0 -0
  185. {PySDM-2.64 → PySDM-2.66}/PySDM/dynamics/collisions/coalescence_efficiencies/specified_eff.py +0 -0
  186. {PySDM-2.64 → PySDM-2.66}/PySDM/dynamics/collisions/coalescence_efficiencies/straub2010.py +0 -0
  187. {PySDM-2.64 → PySDM-2.66}/PySDM/dynamics/collisions/collision_kernels/__init__.py +0 -0
  188. {PySDM-2.64 → PySDM-2.66}/PySDM/dynamics/collisions/collision_kernels/constantK.py +0 -0
  189. {PySDM-2.64 → PySDM-2.66}/PySDM/dynamics/collisions/collision_kernels/electric.py +0 -0
  190. {PySDM-2.64 → PySDM-2.66}/PySDM/dynamics/collisions/collision_kernels/geometric.py +0 -0
  191. {PySDM-2.64 → PySDM-2.66}/PySDM/dynamics/collisions/collision_kernels/golovin.py +0 -0
  192. {PySDM-2.64 → PySDM-2.66}/PySDM/dynamics/collisions/collision_kernels/hydrodynamic.py +0 -0
  193. {PySDM-2.64 → PySDM-2.66}/PySDM/dynamics/collisions/collision_kernels/impl/__init__.py +0 -0
  194. {PySDM-2.64 → PySDM-2.66}/PySDM/dynamics/collisions/collision_kernels/impl/gravitational.py +0 -0
  195. {PySDM-2.64 → PySDM-2.66}/PySDM/dynamics/collisions/collision_kernels/impl/parameterized.py +0 -0
  196. {PySDM-2.64 → PySDM-2.66}/PySDM/dynamics/collisions/collision_kernels/linear.py +0 -0
  197. {PySDM-2.64 → PySDM-2.66}/PySDM/dynamics/collisions/collision_kernels/simple_geometric.py +0 -0
  198. {PySDM-2.64 → PySDM-2.66}/PySDM/dynamics/condensation.py +0 -0
  199. {PySDM-2.64 → PySDM-2.66}/PySDM/dynamics/displacement.py +0 -0
  200. {PySDM-2.64 → PySDM-2.66}/PySDM/dynamics/eulerian_advection.py +0 -0
  201. {PySDM-2.64 → PySDM-2.66}/PySDM/dynamics/freezing.py +0 -0
  202. {PySDM-2.64 → PySDM-2.66}/PySDM/dynamics/impl/__init__.py +0 -0
  203. {PySDM-2.64 → PySDM-2.66}/PySDM/dynamics/impl/chemistry_utils.py +0 -0
  204. {PySDM-2.64 → PySDM-2.66}/PySDM/dynamics/impl/random_generator_optimizer.py +0 -0
  205. {PySDM-2.64 → PySDM-2.66}/PySDM/dynamics/impl/random_generator_optimizer_nopair.py +0 -0
  206. {PySDM-2.64 → PySDM-2.66}/PySDM/dynamics/isotopic_fractionation.py +0 -0
  207. {PySDM-2.64 → PySDM-2.66}/PySDM/dynamics/relaxed_velocity.py +0 -0
  208. {PySDM-2.64 → PySDM-2.66}/PySDM/dynamics/terminal_velocity/__init__.py +0 -0
  209. {PySDM-2.64 → PySDM-2.66}/PySDM/dynamics/terminal_velocity/gunn_and_kinzer.py +0 -0
  210. {PySDM-2.64 → PySDM-2.66}/PySDM/dynamics/terminal_velocity/power_series.py +0 -0
  211. {PySDM-2.64 → PySDM-2.66}/PySDM/dynamics/terminal_velocity/rogers_and_yau.py +0 -0
  212. {PySDM-2.64 → PySDM-2.66}/PySDM/environments/__init__.py +0 -0
  213. {PySDM-2.64 → PySDM-2.66}/PySDM/environments/box.py +0 -0
  214. {PySDM-2.64 → PySDM-2.66}/PySDM/environments/impl/__init__.py +0 -0
  215. {PySDM-2.64 → PySDM-2.66}/PySDM/environments/impl/moist.py +0 -0
  216. {PySDM-2.64 → PySDM-2.66}/PySDM/environments/kinematic_1d.py +0 -0
  217. {PySDM-2.64 → PySDM-2.66}/PySDM/environments/kinematic_2d.py +0 -0
  218. {PySDM-2.64 → PySDM-2.66}/PySDM/environments/parcel.py +0 -0
  219. {PySDM-2.64 → PySDM-2.66}/PySDM/exporters/__init__.py +0 -0
  220. {PySDM-2.64 → PySDM-2.66}/PySDM/exporters/netcdf_exporter.py +0 -0
  221. {PySDM-2.64 → PySDM-2.66}/PySDM/exporters/netcdf_exporter_1d.py +0 -0
  222. {PySDM-2.64 → PySDM-2.66}/PySDM/exporters/vtk_exporter.py +0 -0
  223. {PySDM-2.64 → PySDM-2.66}/PySDM/exporters/vtk_exporter_1d.py +0 -0
  224. {PySDM-2.64 → PySDM-2.66}/PySDM/formulae.py +0 -0
  225. {PySDM-2.64 → PySDM-2.66}/PySDM/impl/__init__.py +0 -0
  226. {PySDM-2.64 → PySDM-2.66}/PySDM/impl/arakawa_c.py +0 -0
  227. {PySDM-2.64 → PySDM-2.66}/PySDM/impl/mesh.py +0 -0
  228. {PySDM-2.64 → PySDM-2.66}/PySDM/impl/null_physics_class.py +0 -0
  229. {PySDM-2.64 → PySDM-2.66}/PySDM/impl/particle_attributes.py +0 -0
  230. {PySDM-2.64 → PySDM-2.66}/PySDM/impl/wall_timer.py +0 -0
  231. {PySDM-2.64 → PySDM-2.66}/PySDM/initialisation/__init__.py +0 -0
  232. {PySDM-2.64 → PySDM-2.66}/PySDM/initialisation/aerosol_composition/__init__.py +0 -0
  233. {PySDM-2.64 → PySDM-2.66}/PySDM/initialisation/aerosol_composition/dry_aerosol.py +0 -0
  234. {PySDM-2.64 → PySDM-2.66}/PySDM/initialisation/discretise_multiplicities.py +0 -0
  235. {PySDM-2.64 → PySDM-2.66}/PySDM/initialisation/equilibrate_wet_radii.py +0 -0
  236. {PySDM-2.64 → PySDM-2.66}/PySDM/initialisation/impl/__init__.py +0 -0
  237. {PySDM-2.64 → PySDM-2.66}/PySDM/initialisation/impl/spectrum.py +0 -0
  238. {PySDM-2.64 → PySDM-2.66}/PySDM/initialisation/sampling/__init__.py +0 -0
  239. {PySDM-2.64 → PySDM-2.66}/PySDM/initialisation/sampling/spatial_sampling.py +0 -0
  240. {PySDM-2.64 → PySDM-2.66}/PySDM/initialisation/sampling/spectral_sampling.py +0 -0
  241. {PySDM-2.64 → PySDM-2.66}/PySDM/initialisation/sampling/spectro_glacial_sampling.py +0 -0
  242. {PySDM-2.64 → PySDM-2.66}/PySDM/initialisation/spectra/__init__.py +0 -0
  243. {PySDM-2.64 → PySDM-2.66}/PySDM/initialisation/spectra/exponential.py +0 -0
  244. {PySDM-2.64 → PySDM-2.66}/PySDM/initialisation/spectra/gamma.py +0 -0
  245. {PySDM-2.64 → PySDM-2.66}/PySDM/initialisation/spectra/gaussian.py +0 -0
  246. {PySDM-2.64 → PySDM-2.66}/PySDM/initialisation/spectra/lognormal.py +0 -0
  247. {PySDM-2.64 → PySDM-2.66}/PySDM/initialisation/spectra/sum.py +0 -0
  248. {PySDM-2.64 → PySDM-2.66}/PySDM/initialisation/spectra/top_hat.py +0 -0
  249. {PySDM-2.64 → PySDM-2.66}/PySDM/particulator.py +0 -0
  250. {PySDM-2.64 → PySDM-2.66}/PySDM/physics/__init__.py +0 -0
  251. {PySDM-2.64 → PySDM-2.66}/PySDM/physics/air_dynamic_viscosity/__init__.py +0 -0
  252. {PySDM-2.64 → PySDM-2.66}/PySDM/physics/air_dynamic_viscosity/zografos_et_al_1987.py +0 -0
  253. {PySDM-2.64 → PySDM-2.66}/PySDM/physics/condensation_coordinate/__init__.py +0 -0
  254. {PySDM-2.64 → PySDM-2.66}/PySDM/physics/condensation_coordinate/volume.py +0 -0
  255. {PySDM-2.64 → PySDM-2.66}/PySDM/physics/condensation_coordinate/volume_logarithm.py +0 -0
  256. {PySDM-2.64 → PySDM-2.66}/PySDM/physics/constants.py +0 -0
  257. {PySDM-2.64 → PySDM-2.66}/PySDM/physics/constants_defaults.py +0 -0
  258. {PySDM-2.64 → PySDM-2.66}/PySDM/physics/diffusion_kinetics/__init__.py +0 -0
  259. {PySDM-2.64 → PySDM-2.66}/PySDM/physics/diffusion_kinetics/fuchs_sutugin.py +0 -0
  260. {PySDM-2.64 → PySDM-2.66}/PySDM/physics/diffusion_kinetics/grabowski_et_al_2011.py +0 -0
  261. {PySDM-2.64 → PySDM-2.66}/PySDM/physics/diffusion_kinetics/lowe_et_al_2019.py +0 -0
  262. {PySDM-2.64 → PySDM-2.66}/PySDM/physics/diffusion_kinetics/neglect.py +0 -0
  263. {PySDM-2.64 → PySDM-2.66}/PySDM/physics/diffusion_kinetics/pruppacher_and_klett_2005.py +0 -0
  264. {PySDM-2.64 → PySDM-2.66}/PySDM/physics/diffusion_thermics/__init__.py +0 -0
  265. {PySDM-2.64 → PySDM-2.66}/PySDM/physics/diffusion_thermics/grabowski_et_al_2011.py +0 -0
  266. {PySDM-2.64 → PySDM-2.66}/PySDM/physics/diffusion_thermics/lowe_et_al_2019.py +0 -0
  267. {PySDM-2.64 → PySDM-2.66}/PySDM/physics/diffusion_thermics/neglect.py +0 -0
  268. {PySDM-2.64 → PySDM-2.66}/PySDM/physics/diffusion_thermics/seinfeld_and_pandis_2010.py +0 -0
  269. {PySDM-2.64 → PySDM-2.66}/PySDM/physics/diffusion_thermics/tracy_welch_porter.py +0 -0
  270. {PySDM-2.64 → PySDM-2.66}/PySDM/physics/dimensional_analysis.py +0 -0
  271. {PySDM-2.64 → PySDM-2.66}/PySDM/physics/drop_growth/__init__.py +0 -0
  272. {PySDM-2.64 → PySDM-2.66}/PySDM/physics/drop_growth/mason_1951.py +0 -0
  273. {PySDM-2.64 → PySDM-2.66}/PySDM/physics/drop_growth/mason_1971.py +0 -0
  274. {PySDM-2.64 → PySDM-2.66}/PySDM/physics/fragmentation_function/__init__.py +0 -0
  275. {PySDM-2.64 → PySDM-2.66}/PySDM/physics/fragmentation_function/always_n.py +0 -0
  276. {PySDM-2.64 → PySDM-2.66}/PySDM/physics/fragmentation_function/constant_mass.py +0 -0
  277. {PySDM-2.64 → PySDM-2.66}/PySDM/physics/fragmentation_function/expon_frag.py +0 -0
  278. {PySDM-2.64 → PySDM-2.66}/PySDM/physics/fragmentation_function/exponential.py +0 -0
  279. {PySDM-2.64 → PySDM-2.66}/PySDM/physics/fragmentation_function/feingold1988.py +0 -0
  280. {PySDM-2.64 → PySDM-2.66}/PySDM/physics/fragmentation_function/gaussian.py +0 -0
  281. {PySDM-2.64 → PySDM-2.66}/PySDM/physics/fragmentation_function/lowlist82.py +0 -0
  282. {PySDM-2.64 → PySDM-2.66}/PySDM/physics/fragmentation_function/slams.py +0 -0
  283. {PySDM-2.64 → PySDM-2.66}/PySDM/physics/fragmentation_function/straub2010nf.py +0 -0
  284. {PySDM-2.64 → PySDM-2.66}/PySDM/physics/freezing_temperature_spectrum/__init__.py +0 -0
  285. {PySDM-2.64 → PySDM-2.66}/PySDM/physics/freezing_temperature_spectrum/bigg_1953.py +0 -0
  286. {PySDM-2.64 → PySDM-2.66}/PySDM/physics/freezing_temperature_spectrum/niemand_et_al_2012.py +0 -0
  287. {PySDM-2.64 → PySDM-2.66}/PySDM/physics/freezing_temperature_spectrum/null.py +0 -0
  288. {PySDM-2.64 → PySDM-2.66}/PySDM/physics/heterogeneous_ice_nucleation_rate/__init__.py +0 -0
  289. {PySDM-2.64 → PySDM-2.66}/PySDM/physics/heterogeneous_ice_nucleation_rate/abifm.py +0 -0
  290. {PySDM-2.64 → PySDM-2.66}/PySDM/physics/heterogeneous_ice_nucleation_rate/constant.py +0 -0
  291. {PySDM-2.64 → PySDM-2.66}/PySDM/physics/heterogeneous_ice_nucleation_rate/null.py +0 -0
  292. {PySDM-2.64 → PySDM-2.66}/PySDM/physics/hydrostatics/__init__.py +0 -0
  293. {PySDM-2.64 → PySDM-2.66}/PySDM/physics/hydrostatics/default.py +0 -0
  294. {PySDM-2.64 → PySDM-2.66}/PySDM/physics/hygroscopicity/__init__.py +0 -0
  295. {PySDM-2.64 → PySDM-2.66}/PySDM/physics/hygroscopicity/kappa_koehler.py +0 -0
  296. {PySDM-2.64 → PySDM-2.66}/PySDM/physics/hygroscopicity/kappa_koehler_leading_terms.py +0 -0
  297. {PySDM-2.64 → PySDM-2.66}/PySDM/physics/impl/__init__.py +0 -0
  298. {PySDM-2.64 → PySDM-2.66}/PySDM/physics/impl/fake_unit_registry.py +0 -0
  299. {PySDM-2.64 → PySDM-2.66}/PySDM/physics/impl/flag.py +0 -0
  300. {PySDM-2.64 → PySDM-2.66}/PySDM/physics/isotope_diffusivity_ratios/__init__.py +0 -0
  301. {PySDM-2.64 → PySDM-2.66}/PySDM/physics/isotope_diffusivity_ratios/grahams_law.py +0 -0
  302. {PySDM-2.64 → PySDM-2.66}/PySDM/physics/isotope_diffusivity_ratios/hellmann_and_harvey_2020.py +0 -0
  303. {PySDM-2.64 → PySDM-2.66}/PySDM/physics/isotope_diffusivity_ratios/stewart_1975.py +0 -0
  304. {PySDM-2.64 → PySDM-2.66}/PySDM/physics/isotope_equilibrium_fractionation_factors/__init__.py +0 -0
  305. {PySDM-2.64 → PySDM-2.66}/PySDM/physics/isotope_equilibrium_fractionation_factors/barkan_and_luz_2005.py +0 -0
  306. {PySDM-2.64 → PySDM-2.66}/PySDM/physics/isotope_equilibrium_fractionation_factors/ellehoj_et_al_2013.py +0 -0
  307. {PySDM-2.64 → PySDM-2.66}/PySDM/physics/isotope_equilibrium_fractionation_factors/horita_and_wesolowski_1994.py +0 -0
  308. {PySDM-2.64 → PySDM-2.66}/PySDM/physics/isotope_equilibrium_fractionation_factors/lamb_et_al_2017.py +0 -0
  309. {PySDM-2.64 → PySDM-2.66}/PySDM/physics/isotope_equilibrium_fractionation_factors/majoube_1970.py +0 -0
  310. {PySDM-2.64 → PySDM-2.66}/PySDM/physics/isotope_equilibrium_fractionation_factors/majoube_1971.py +0 -0
  311. {PySDM-2.64 → PySDM-2.66}/PySDM/physics/isotope_equilibrium_fractionation_factors/merlivat_and_nief_1967.py +0 -0
  312. {PySDM-2.64 → PySDM-2.66}/PySDM/physics/isotope_equilibrium_fractionation_factors/van_hook_1968.py +0 -0
  313. {PySDM-2.64 → PySDM-2.66}/PySDM/physics/isotope_meteoric_water_line_excess/__init__.py +0 -0
  314. {PySDM-2.64 → PySDM-2.66}/PySDM/physics/isotope_meteoric_water_line_excess/barkan_and_luz_2007.py +0 -0
  315. {PySDM-2.64 → PySDM-2.66}/PySDM/physics/isotope_meteoric_water_line_excess/dansgaard_1964.py +0 -0
  316. {PySDM-2.64 → PySDM-2.66}/PySDM/physics/isotope_ratio_evolution/__init__.py +0 -0
  317. {PySDM-2.64 → PySDM-2.66}/PySDM/physics/isotope_ratio_evolution/gedzelman_and_arnold_1994.py +0 -0
  318. {PySDM-2.64 → PySDM-2.66}/PySDM/physics/isotope_ratio_evolution/merlivat_and_jouzel_1979.py +0 -0
  319. {PySDM-2.64 → PySDM-2.66}/PySDM/physics/isotope_ratio_evolution/rayleigh_distillation.py +0 -0
  320. {PySDM-2.64 → PySDM-2.66}/PySDM/physics/isotope_relaxation_timescale/__init__.py +0 -0
  321. {PySDM-2.64 → PySDM-2.66}/PySDM/physics/isotope_relaxation_timescale/miyake_et_al_1968.py +0 -0
  322. {PySDM-2.64 → PySDM-2.66}/PySDM/physics/latent_heat/__init__.py +0 -0
  323. {PySDM-2.64 → PySDM-2.66}/PySDM/physics/latent_heat/constant.py +0 -0
  324. {PySDM-2.64 → PySDM-2.66}/PySDM/physics/latent_heat/kirchhoff.py +0 -0
  325. {PySDM-2.64 → PySDM-2.66}/PySDM/physics/latent_heat/lowe2019.py +0 -0
  326. {PySDM-2.64 → PySDM-2.66}/PySDM/physics/latent_heat/seinfeld_and_pandis_2010.py +0 -0
  327. {PySDM-2.64 → PySDM-2.66}/PySDM/physics/optical_albedo/__init__.py +0 -0
  328. {PySDM-2.64 → PySDM-2.66}/PySDM/physics/optical_albedo/bohren1987.py +0 -0
  329. {PySDM-2.64 → PySDM-2.66}/PySDM/physics/optical_depth/__init__.py +0 -0
  330. {PySDM-2.64 → PySDM-2.66}/PySDM/physics/optical_depth/stephens_1978.py +0 -0
  331. {PySDM-2.64 → PySDM-2.66}/PySDM/physics/particle_advection/__init__.py +0 -0
  332. {PySDM-2.64 → PySDM-2.66}/PySDM/physics/particle_advection/explicit_in_space.py +0 -0
  333. {PySDM-2.64 → PySDM-2.66}/PySDM/physics/particle_advection/implicit_in_space.py +0 -0
  334. {PySDM-2.64 → PySDM-2.66}/PySDM/physics/particle_shape_and_density/__init__.py +0 -0
  335. {PySDM-2.64 → PySDM-2.66}/PySDM/physics/particle_shape_and_density/liquid_spheres.py +0 -0
  336. {PySDM-2.64 → PySDM-2.66}/PySDM/physics/particle_shape_and_density/mixed_phase_spheres.py +0 -0
  337. {PySDM-2.64 → PySDM-2.66}/PySDM/physics/particle_shape_and_density/porous_spheroids.py +0 -0
  338. {PySDM-2.64 → PySDM-2.66}/PySDM/physics/saturation_vapour_pressure/__init__.py +0 -0
  339. {PySDM-2.64 → PySDM-2.66}/PySDM/physics/saturation_vapour_pressure/august_roche_magnus.py +0 -0
  340. {PySDM-2.64 → PySDM-2.66}/PySDM/physics/saturation_vapour_pressure/bolton_1980.py +0 -0
  341. {PySDM-2.64 → PySDM-2.66}/PySDM/physics/saturation_vapour_pressure/flatau_walko_cotton.py +0 -0
  342. {PySDM-2.64 → PySDM-2.66}/PySDM/physics/saturation_vapour_pressure/lowe1977.py +0 -0
  343. {PySDM-2.64 → PySDM-2.66}/PySDM/physics/saturation_vapour_pressure/murphy_koop_2005.py +0 -0
  344. {PySDM-2.64 → PySDM-2.66}/PySDM/physics/saturation_vapour_pressure/wexler_1976.py +0 -0
  345. {PySDM-2.64 → PySDM-2.66}/PySDM/physics/state_variable_triplet/__init__.py +0 -0
  346. {PySDM-2.64 → PySDM-2.66}/PySDM/physics/state_variable_triplet/libcloudphplusplus.py +0 -0
  347. {PySDM-2.64 → PySDM-2.66}/PySDM/physics/surface_tension/__init__.py +0 -0
  348. {PySDM-2.64 → PySDM-2.66}/PySDM/physics/surface_tension/compressed_film_ovadnevaite.py +0 -0
  349. {PySDM-2.64 → PySDM-2.66}/PySDM/physics/surface_tension/compressed_film_ruehl.py +0 -0
  350. {PySDM-2.64 → PySDM-2.66}/PySDM/physics/surface_tension/constant.py +0 -0
  351. {PySDM-2.64 → PySDM-2.66}/PySDM/physics/surface_tension/szyszkowski_langmuir.py +0 -0
  352. {PySDM-2.64 → PySDM-2.66}/PySDM/physics/terminal_velocity/__init__.py +0 -0
  353. {PySDM-2.64 → PySDM-2.66}/PySDM/physics/terminal_velocity/gunn_kinzer_1949.py +0 -0
  354. {PySDM-2.64 → PySDM-2.66}/PySDM/physics/terminal_velocity/power_series.py +0 -0
  355. {PySDM-2.64 → PySDM-2.66}/PySDM/physics/terminal_velocity/rogers_yau.py +0 -0
  356. {PySDM-2.64 → PySDM-2.66}/PySDM/physics/trivia.py +0 -0
  357. {PySDM-2.64 → PySDM-2.66}/PySDM/physics/ventilation/__init__.py +0 -0
  358. {PySDM-2.64 → PySDM-2.66}/PySDM/physics/ventilation/froessling_1938.py +0 -0
  359. {PySDM-2.64 → PySDM-2.66}/PySDM/physics/ventilation/neglect.py +0 -0
  360. {PySDM-2.64 → PySDM-2.66}/PySDM/physics/ventilation/pruppacher_rasmussen_1979.py +0 -0
  361. {PySDM-2.64 → PySDM-2.66}/PySDM/products/__init__.py +0 -0
  362. {PySDM-2.64 → PySDM-2.66}/PySDM/products/ambient_thermodynamics/__init__.py +0 -0
  363. {PySDM-2.64 → PySDM-2.66}/PySDM/products/ambient_thermodynamics/ambient_dry_air_density.py +0 -0
  364. {PySDM-2.64 → PySDM-2.66}/PySDM/products/ambient_thermodynamics/ambient_dry_air_potential_temperature.py +0 -0
  365. {PySDM-2.64 → PySDM-2.66}/PySDM/products/ambient_thermodynamics/ambient_pressure.py +0 -0
  366. {PySDM-2.64 → PySDM-2.66}/PySDM/products/ambient_thermodynamics/ambient_relative_humidity.py +0 -0
  367. {PySDM-2.64 → PySDM-2.66}/PySDM/products/ambient_thermodynamics/ambient_temperature.py +0 -0
  368. {PySDM-2.64 → PySDM-2.66}/PySDM/products/ambient_thermodynamics/ambient_water_vapour_mixing_ratio.py +0 -0
  369. {PySDM-2.64 → PySDM-2.66}/PySDM/products/aqueous_chemistry/__init__.py +0 -0
  370. {PySDM-2.64 → PySDM-2.66}/PySDM/products/aqueous_chemistry/acidity.py +0 -0
  371. {PySDM-2.64 → PySDM-2.66}/PySDM/products/aqueous_chemistry/aqueous_mass_spectrum.py +0 -0
  372. {PySDM-2.64 → PySDM-2.66}/PySDM/products/aqueous_chemistry/aqueous_mole_fraction.py +0 -0
  373. {PySDM-2.64 → PySDM-2.66}/PySDM/products/aqueous_chemistry/gaseous_mole_fraction.py +0 -0
  374. {PySDM-2.64 → PySDM-2.66}/PySDM/products/aqueous_chemistry/total_dry_mass_mixing_ratio.py +0 -0
  375. {PySDM-2.64 → PySDM-2.66}/PySDM/products/collision/__init__.py +0 -0
  376. {PySDM-2.64 → PySDM-2.66}/PySDM/products/collision/collision_rates.py +0 -0
  377. {PySDM-2.64 → PySDM-2.66}/PySDM/products/collision/collision_timestep_mean.py +0 -0
  378. {PySDM-2.64 → PySDM-2.66}/PySDM/products/collision/collision_timestep_min.py +0 -0
  379. {PySDM-2.64 → PySDM-2.66}/PySDM/products/condensation/__init__.py +0 -0
  380. {PySDM-2.64 → PySDM-2.66}/PySDM/products/condensation/activable_fraction.py +0 -0
  381. {PySDM-2.64 → PySDM-2.66}/PySDM/products/condensation/condensation_timestep.py +0 -0
  382. {PySDM-2.64 → PySDM-2.66}/PySDM/products/condensation/event_rates.py +0 -0
  383. {PySDM-2.64 → PySDM-2.66}/PySDM/products/condensation/peak_supersaturation.py +0 -0
  384. {PySDM-2.64 → PySDM-2.66}/PySDM/products/displacement/__init__.py +0 -0
  385. {PySDM-2.64 → PySDM-2.66}/PySDM/products/displacement/averaged_terminal_velocity.py +0 -0
  386. {PySDM-2.64 → PySDM-2.66}/PySDM/products/displacement/flow_velocity_component.py +0 -0
  387. {PySDM-2.64 → PySDM-2.66}/PySDM/products/displacement/max_courant_number.py +0 -0
  388. {PySDM-2.64 → PySDM-2.66}/PySDM/products/displacement/surface_precipitation.py +0 -0
  389. {PySDM-2.64 → PySDM-2.66}/PySDM/products/freezing/__init__.py +0 -0
  390. {PySDM-2.64 → PySDM-2.66}/PySDM/products/freezing/cooling_rate.py +0 -0
  391. {PySDM-2.64 → PySDM-2.66}/PySDM/products/freezing/freezable_specific_concentration.py +0 -0
  392. {PySDM-2.64 → PySDM-2.66}/PySDM/products/freezing/frozen_particle_concentration.py +0 -0
  393. {PySDM-2.64 → PySDM-2.66}/PySDM/products/freezing/ice_nuclei_concentration.py +0 -0
  394. {PySDM-2.64 → PySDM-2.66}/PySDM/products/freezing/total_unfrozen_immersed_surface_area.py +0 -0
  395. {PySDM-2.64 → PySDM-2.66}/PySDM/products/housekeeping/__init__.py +0 -0
  396. {PySDM-2.64 → PySDM-2.66}/PySDM/products/housekeeping/dynamic_wall_time.py +0 -0
  397. {PySDM-2.64 → PySDM-2.66}/PySDM/products/housekeeping/super_droplet_count_per_gridbox.py +0 -0
  398. {PySDM-2.64 → PySDM-2.66}/PySDM/products/housekeeping/time.py +0 -0
  399. {PySDM-2.64 → PySDM-2.66}/PySDM/products/housekeeping/timers.py +0 -0
  400. {PySDM-2.64 → PySDM-2.66}/PySDM/products/impl/__init__.py +0 -0
  401. {PySDM-2.64 → PySDM-2.66}/PySDM/products/impl/activation_filtered_product.py +0 -0
  402. {PySDM-2.64 → PySDM-2.66}/PySDM/products/impl/concentration_product.py +0 -0
  403. {PySDM-2.64 → PySDM-2.66}/PySDM/products/impl/moist_environment_product.py +0 -0
  404. {PySDM-2.64 → PySDM-2.66}/PySDM/products/impl/moment_product.py +0 -0
  405. {PySDM-2.64 → PySDM-2.66}/PySDM/products/impl/rate_product.py +0 -0
  406. {PySDM-2.64 → PySDM-2.66}/PySDM/products/impl/spectrum_moment_product.py +0 -0
  407. {PySDM-2.64 → PySDM-2.66}/PySDM/products/optical/__init__.py +0 -0
  408. {PySDM-2.64 → PySDM-2.66}/PySDM/products/optical/cloud_albedo.py +0 -0
  409. {PySDM-2.64 → PySDM-2.66}/PySDM/products/optical/cloud_optical_depth.py +0 -0
  410. {PySDM-2.64 → PySDM-2.66}/PySDM/products/parcel/__init__.py +0 -0
  411. {PySDM-2.64 → PySDM-2.66}/PySDM/products/parcel/cloud_water_path.py +0 -0
  412. {PySDM-2.64 → PySDM-2.66}/PySDM/products/parcel/parcel_displacement.py +0 -0
  413. {PySDM-2.64 → PySDM-2.66}/PySDM/products/size_spectral/__init__.py +0 -0
  414. {PySDM-2.64 → PySDM-2.66}/PySDM/products/size_spectral/arbitrary_moment.py +0 -0
  415. {PySDM-2.64 → PySDM-2.66}/PySDM/products/size_spectral/cloud_water_content.py +0 -0
  416. {PySDM-2.64 → PySDM-2.66}/PySDM/products/size_spectral/effective_radius.py +0 -0
  417. {PySDM-2.64 → PySDM-2.66}/PySDM/products/size_spectral/effective_radius_activated.py +0 -0
  418. {PySDM-2.64 → PySDM-2.66}/PySDM/products/size_spectral/mean_radius.py +0 -0
  419. {PySDM-2.64 → PySDM-2.66}/PySDM/products/size_spectral/mean_radius_activated.py +0 -0
  420. {PySDM-2.64 → PySDM-2.66}/PySDM/products/size_spectral/mean_volume_radius.py +0 -0
  421. {PySDM-2.64 → PySDM-2.66}/PySDM/products/size_spectral/number_size_spectrum.py +0 -0
  422. {PySDM-2.64 → PySDM-2.66}/PySDM/products/size_spectral/particle_concentration.py +0 -0
  423. {PySDM-2.64 → PySDM-2.66}/PySDM/products/size_spectral/particle_concentration_activated.py +0 -0
  424. {PySDM-2.64 → PySDM-2.66}/PySDM/products/size_spectral/particle_size_spectrum.py +0 -0
  425. {PySDM-2.64 → PySDM-2.66}/PySDM/products/size_spectral/particle_volume_versus_radius_logarithm_spectrum.py +0 -0
  426. {PySDM-2.64 → PySDM-2.66}/PySDM/products/size_spectral/radius_binned_number_averaged_terminal_velocity.py +0 -0
  427. {PySDM-2.64 → PySDM-2.66}/PySDM/products/size_spectral/size_standard_deviation.py +0 -0
  428. {PySDM-2.64 → PySDM-2.66}/PySDM/products/size_spectral/total_particle_concentration.py +0 -0
  429. {PySDM-2.64 → PySDM-2.66}/PySDM/products/size_spectral/total_particle_specific_concentration.py +0 -0
  430. {PySDM-2.64 → PySDM-2.66}/PySDM/products/size_spectral/water_mixing_ratio.py +0 -0
  431. {PySDM-2.64 → PySDM-2.66}/PySDM.egg-info/dependency_links.txt +0 -0
  432. {PySDM-2.64 → PySDM-2.66}/PySDM.egg-info/top_level.txt +0 -0
  433. {PySDM-2.64 → PySDM-2.66}/README.md +0 -0
  434. {PySDM-2.64 → PySDM-2.66}/examples/MANIFEST.in +0 -0
  435. {PySDM-2.64 → PySDM-2.66}/examples/PySDM_examples/Abdul_Razzak_Ghan_2000/__init__.py +0 -0
  436. {PySDM-2.64 → PySDM-2.66}/examples/PySDM_examples/Abdul_Razzak_Ghan_2000/aerosol.py +0 -0
  437. {PySDM-2.64 → PySDM-2.66}/examples/PySDM_examples/Abdul_Razzak_Ghan_2000/data_from_ARG2000_paper.py +0 -0
  438. {PySDM-2.64 → PySDM-2.66}/examples/PySDM_examples/Abdul_Razzak_Ghan_2000/data_from_CloudMicrophysics_ARG.py +0 -0
  439. {PySDM-2.64 → PySDM-2.66}/examples/PySDM_examples/Abdul_Razzak_Ghan_2000/fig_4_kinetic_limitations.ipynb +0 -0
  440. {PySDM-2.64 → PySDM-2.66}/examples/PySDM_examples/Abdul_Razzak_Ghan_2000/figs1-5.ipynb +0 -0
  441. {PySDM-2.64 → PySDM-2.66}/examples/PySDM_examples/Abdul_Razzak_Ghan_2000/run_ARG_parcel.py +0 -0
  442. {PySDM-2.64 → PySDM-2.66}/examples/PySDM_examples/Alpert_and_Knopf_2016/__init__.py +0 -0
  443. {PySDM-2.64 → PySDM-2.66}/examples/PySDM_examples/Alpert_and_Knopf_2016/fig_1.ipynb +0 -0
  444. {PySDM-2.64 → PySDM-2.66}/examples/PySDM_examples/Alpert_and_Knopf_2016/fig_2.ipynb +0 -0
  445. {PySDM-2.64 → PySDM-2.66}/examples/PySDM_examples/Alpert_and_Knopf_2016/fig_3.ipynb +0 -0
  446. {PySDM-2.64 → PySDM-2.66}/examples/PySDM_examples/Alpert_and_Knopf_2016/fig_4.ipynb +0 -0
  447. {PySDM-2.64 → PySDM-2.66}/examples/PySDM_examples/Alpert_and_Knopf_2016/fig_5.ipynb +0 -0
  448. {PySDM-2.64 → PySDM-2.66}/examples/PySDM_examples/Alpert_and_Knopf_2016/simulation.py +0 -0
  449. {PySDM-2.64 → PySDM-2.66}/examples/PySDM_examples/Alpert_and_Knopf_2016/table.py +0 -0
  450. {PySDM-2.64 → PySDM-2.66}/examples/PySDM_examples/Alpert_and_Knopf_2016/table_1.py +0 -0
  451. {PySDM-2.64 → PySDM-2.66}/examples/PySDM_examples/Alpert_and_Knopf_2016/table_2.py +0 -0
  452. {PySDM-2.64 → PySDM-2.66}/examples/PySDM_examples/Arabas_and_Shima_2017/__init__.py +0 -0
  453. {PySDM-2.64 → PySDM-2.66}/examples/PySDM_examples/Arabas_and_Shima_2017/example.py +0 -0
  454. {PySDM-2.64 → PySDM-2.66}/examples/PySDM_examples/Arabas_and_Shima_2017/fig_5.ipynb +0 -0
  455. {PySDM-2.64 → PySDM-2.66}/examples/PySDM_examples/Arabas_and_Shima_2017/settings.py +0 -0
  456. {PySDM-2.64 → PySDM-2.66}/examples/PySDM_examples/Arabas_and_Shima_2017/simulation.py +0 -0
  457. {PySDM-2.64 → PySDM-2.66}/examples/PySDM_examples/Arabas_et_al_2015/__init__.py +0 -0
  458. {PySDM-2.64 → PySDM-2.66}/examples/PySDM_examples/Arabas_et_al_2015/example.py +0 -0
  459. {PySDM-2.64 → PySDM-2.66}/examples/PySDM_examples/Arabas_et_al_2015/example_benchmark.py +0 -0
  460. {PySDM-2.64 → PySDM-2.66}/examples/PySDM_examples/Arabas_et_al_2015/gui.ipynb +0 -0
  461. {PySDM-2.64 → PySDM-2.66}/examples/PySDM_examples/Arabas_et_al_2015/paraview_hello_world.ipynb +0 -0
  462. {PySDM-2.64 → PySDM-2.66}/examples/PySDM_examples/Arabas_et_al_2015/settings.py +0 -0
  463. {PySDM-2.64 → PySDM-2.66}/examples/PySDM_examples/Arabas_et_al_2015/spin_up.py +0 -0
  464. {PySDM-2.64 → PySDM-2.66}/examples/PySDM_examples/Arabas_et_al_2023/__init__.py +0 -0
  465. {PySDM-2.64 → PySDM-2.66}/examples/PySDM_examples/Arabas_et_al_2023/aida.ipynb +0 -0
  466. {PySDM-2.64 → PySDM-2.66}/examples/PySDM_examples/Arabas_et_al_2023/commons.py +0 -0
  467. {PySDM-2.64 → PySDM-2.66}/examples/PySDM_examples/Arabas_et_al_2023/copula_hello.ipynb +0 -0
  468. {PySDM-2.64 → PySDM-2.66}/examples/PySDM_examples/Arabas_et_al_2023/curved_text.py +0 -0
  469. {PySDM-2.64 → PySDM-2.66}/examples/PySDM_examples/Arabas_et_al_2023/fig_11.ipynb +0 -0
  470. {PySDM-2.64 → PySDM-2.66}/examples/PySDM_examples/Arabas_et_al_2023/fig_2.ipynb +0 -0
  471. {PySDM-2.64 → PySDM-2.66}/examples/PySDM_examples/Arabas_et_al_2023/fig_A2.ipynb +0 -0
  472. {PySDM-2.64 → PySDM-2.66}/examples/PySDM_examples/Arabas_et_al_2023/figs_3_and_7_and_8.ipynb +0 -0
  473. {PySDM-2.64 → PySDM-2.66}/examples/PySDM_examples/Arabas_et_al_2023/figs_5_and_6.ipynb +0 -0
  474. {PySDM-2.64 → PySDM-2.66}/examples/PySDM_examples/Arabas_et_al_2023/frozen_fraction.py +0 -0
  475. {PySDM-2.64 → PySDM-2.66}/examples/PySDM_examples/Arabas_et_al_2023/make_particulator.py +0 -0
  476. {PySDM-2.64 → PySDM-2.66}/examples/PySDM_examples/Arabas_et_al_2023/plots.py +0 -0
  477. {PySDM-2.64 → PySDM-2.66}/examples/PySDM_examples/Arabas_et_al_2023/run_simulation.py +0 -0
  478. {PySDM-2.64 → PySDM-2.66}/examples/PySDM_examples/Bartman_2020_MasterThesis/__init__.py +0 -0
  479. {PySDM-2.64 → PySDM-2.66}/examples/PySDM_examples/Bartman_2020_MasterThesis/fig_4_adaptive_sdm.py +0 -0
  480. {PySDM-2.64 → PySDM-2.66}/examples/PySDM_examples/Bartman_2020_MasterThesis/fig_5_SCIPY_VS_ADAPTIVE.py +0 -0
  481. {PySDM-2.64 → PySDM-2.66}/examples/PySDM_examples/Bartman_et_al_2021/__init__.py +0 -0
  482. {PySDM-2.64 → PySDM-2.66}/examples/PySDM_examples/Bartman_et_al_2021/demo.ipynb +0 -0
  483. {PySDM-2.64 → PySDM-2.66}/examples/PySDM_examples/Bartman_et_al_2021/demo_fig2.ipynb +0 -0
  484. {PySDM-2.64 → PySDM-2.66}/examples/PySDM_examples/Bartman_et_al_2021/demo_fig3.ipynb +0 -0
  485. {PySDM-2.64 → PySDM-2.66}/examples/PySDM_examples/Bartman_et_al_2021/label.py +0 -0
  486. {PySDM-2.64 → PySDM-2.66}/examples/PySDM_examples/Berry_1967/__init__.py +0 -0
  487. {PySDM-2.64 → PySDM-2.66}/examples/PySDM_examples/Berry_1967/example.py +0 -0
  488. {PySDM-2.64 → PySDM-2.66}/examples/PySDM_examples/Berry_1967/example_fig_6.py +0 -0
  489. {PySDM-2.64 → PySDM-2.66}/examples/PySDM_examples/Berry_1967/figs_5_8_10.ipynb +0 -0
  490. {PySDM-2.64 → PySDM-2.66}/examples/PySDM_examples/Berry_1967/settings.py +0 -0
  491. {PySDM-2.64 → PySDM-2.66}/examples/PySDM_examples/Berry_1967/spectrum_plotter.py +0 -0
  492. {PySDM-2.64 → PySDM-2.66}/examples/PySDM_examples/Bieli_et_al_2022/__init__.py +0 -0
  493. {PySDM-2.64 → PySDM-2.66}/examples/PySDM_examples/Bieli_et_al_2022/make_fig_3.ipynb +0 -0
  494. {PySDM-2.64 → PySDM-2.66}/examples/PySDM_examples/Bieli_et_al_2022/settings.py +0 -0
  495. {PySDM-2.64 → PySDM-2.66}/examples/PySDM_examples/Bieli_et_al_2022/simulation.py +0 -0
  496. {PySDM-2.64 → PySDM-2.66}/examples/PySDM_examples/Bolot_et_al_2013/__init__.py +0 -0
  497. {PySDM-2.64 → PySDM-2.66}/examples/PySDM_examples/Bolot_et_al_2013/fig_1.ipynb +0 -0
  498. {PySDM-2.64 → PySDM-2.66}/examples/PySDM_examples/Bulenok_2023_MasterThesis/__init__.py +0 -0
  499. {PySDM-2.64 → PySDM-2.66}/examples/PySDM_examples/Bulenok_2023_MasterThesis/performance_comparison_Srivastava_Setup.ipynb +0 -0
  500. {PySDM-2.64 → PySDM-2.66}/examples/PySDM_examples/Bulenok_2023_MasterThesis/setups.py +0 -0
  501. {PySDM-2.64 → PySDM-2.66}/examples/PySDM_examples/Bulenok_2023_MasterThesis/utils.py +0 -0
  502. {PySDM-2.64 → PySDM-2.66}/examples/PySDM_examples/Ervens_and_Feingold_2012/__init__.py +0 -0
  503. {PySDM-2.64 → PySDM-2.66}/examples/PySDM_examples/Ervens_and_Feingold_2012/settings.py +0 -0
  504. {PySDM-2.64 → PySDM-2.66}/examples/PySDM_examples/Gedzelman_and_Arnold_1994/__init__.py +0 -0
  505. {PySDM-2.64 → PySDM-2.66}/examples/PySDM_examples/Gedzelman_and_Arnold_1994/fig_2.ipynb +0 -0
  506. {PySDM-2.64 → PySDM-2.66}/examples/PySDM_examples/Grabowski_and_Pawlowska_2023/__init__.py +0 -0
  507. {PySDM-2.64 → PySDM-2.66}/examples/PySDM_examples/Grabowski_and_Pawlowska_2023/settings.py +0 -0
  508. {PySDM-2.64 → PySDM-2.66}/examples/PySDM_examples/Graf_et_al_2019/Table_1.ipynb +0 -0
  509. {PySDM-2.64 → PySDM-2.66}/examples/PySDM_examples/Graf_et_al_2019/__init__.py +0 -0
  510. {PySDM-2.64 → PySDM-2.66}/examples/PySDM_examples/Graf_et_al_2019/figure_4.ipynb +0 -0
  511. {PySDM-2.64 → PySDM-2.66}/examples/PySDM_examples/Jaruga_and_Pawlowska_2018/__init__.py +0 -0
  512. {PySDM-2.64 → PySDM-2.66}/examples/PySDM_examples/Jaruga_and_Pawlowska_2018/fig_2.ipynb +0 -0
  513. {PySDM-2.64 → PySDM-2.66}/examples/PySDM_examples/Jaruga_and_Pawlowska_2018/fig_3.ipynb +0 -0
  514. {PySDM-2.64 → PySDM-2.66}/examples/PySDM_examples/Jensen_and_Nugent_2017/Fig_1.ipynb +0 -0
  515. {PySDM-2.64 → PySDM-2.66}/examples/PySDM_examples/Jensen_and_Nugent_2017/Fig_3_and_Tab_4_upper_rows.ipynb +0 -0
  516. {PySDM-2.64 → PySDM-2.66}/examples/PySDM_examples/Jensen_and_Nugent_2017/Fig_4_and_7_and_Tab_4_bottom_rows.ipynb +0 -0
  517. {PySDM-2.64 → PySDM-2.66}/examples/PySDM_examples/Jensen_and_Nugent_2017/Fig_5.ipynb +0 -0
  518. {PySDM-2.64 → PySDM-2.66}/examples/PySDM_examples/Jensen_and_Nugent_2017/Fig_6.ipynb +0 -0
  519. {PySDM-2.64 → PySDM-2.66}/examples/PySDM_examples/Jensen_and_Nugent_2017/Fig_8.ipynb +0 -0
  520. {PySDM-2.64 → PySDM-2.66}/examples/PySDM_examples/Jensen_and_Nugent_2017/__init__.py +0 -0
  521. {PySDM-2.64 → PySDM-2.66}/examples/PySDM_examples/Jensen_and_Nugent_2017/plotting.py +0 -0
  522. {PySDM-2.64 → PySDM-2.66}/examples/PySDM_examples/Jensen_and_Nugent_2017/settings.py +0 -0
  523. {PySDM-2.64 → PySDM-2.66}/examples/PySDM_examples/Jensen_and_Nugent_2017/simulation.py +0 -0
  524. {PySDM-2.64 → PySDM-2.66}/examples/PySDM_examples/Jensen_and_Nugent_2017/table_3.py +0 -0
  525. {PySDM-2.64 → PySDM-2.66}/examples/PySDM_examples/Kreidenweis_et_al_2003/__init__.py +0 -0
  526. {PySDM-2.64 → PySDM-2.66}/examples/PySDM_examples/Kreidenweis_et_al_2003/fig_1.ipynb +0 -0
  527. {PySDM-2.64 → PySDM-2.66}/examples/PySDM_examples/Kreidenweis_et_al_2003/settings.py +0 -0
  528. {PySDM-2.64 → PySDM-2.66}/examples/PySDM_examples/Kreidenweis_et_al_2003/simulation.py +0 -0
  529. {PySDM-2.64 → PySDM-2.66}/examples/PySDM_examples/Lamb_et_al_2017/__init__.py +0 -0
  530. {PySDM-2.64 → PySDM-2.66}/examples/PySDM_examples/Lamb_et_al_2017/fig_4.ipynb +0 -0
  531. {PySDM-2.64 → PySDM-2.66}/examples/PySDM_examples/Lowe_et_al_2019/__init__.py +0 -0
  532. {PySDM-2.64 → PySDM-2.66}/examples/PySDM_examples/Lowe_et_al_2019/aerosol.py +0 -0
  533. {PySDM-2.64 → PySDM-2.66}/examples/PySDM_examples/Lowe_et_al_2019/aerosol_code.py +0 -0
  534. {PySDM-2.64 → PySDM-2.66}/examples/PySDM_examples/Lowe_et_al_2019/constants_def.py +0 -0
  535. {PySDM-2.64 → PySDM-2.66}/examples/PySDM_examples/Lowe_et_al_2019/fig_1.ipynb +0 -0
  536. {PySDM-2.64 → PySDM-2.66}/examples/PySDM_examples/Lowe_et_al_2019/fig_2.ipynb +0 -0
  537. {PySDM-2.64 → PySDM-2.66}/examples/PySDM_examples/Lowe_et_al_2019/fig_3.ipynb +0 -0
  538. {PySDM-2.64 → PySDM-2.66}/examples/PySDM_examples/Lowe_et_al_2019/fig_s2.ipynb +0 -0
  539. {PySDM-2.64 → PySDM-2.66}/examples/PySDM_examples/Lowe_et_al_2019/plot_helper.py +0 -0
  540. {PySDM-2.64 → PySDM-2.66}/examples/PySDM_examples/Lowe_et_al_2019/settings.py +0 -0
  541. {PySDM-2.64 → PySDM-2.66}/examples/PySDM_examples/Lowe_et_al_2019/simulation.py +0 -0
  542. {PySDM-2.64 → PySDM-2.66}/examples/PySDM_examples/Merlivat_and_Nief_1967/__init__.py +0 -0
  543. {PySDM-2.64 → PySDM-2.66}/examples/PySDM_examples/Merlivat_and_Nief_1967/fig_2.ipynb +0 -0
  544. {PySDM-2.64 → PySDM-2.66}/examples/PySDM_examples/Miyake_et_al_1968/__init__.py +0 -0
  545. {PySDM-2.64 → PySDM-2.66}/examples/PySDM_examples/Miyake_et_al_1968/fig_19.ipynb +0 -0
  546. {PySDM-2.64 → PySDM-2.66}/examples/PySDM_examples/Morrison_and_Grabowski_2007/__init__.py +0 -0
  547. {PySDM-2.64 → PySDM-2.66}/examples/PySDM_examples/Morrison_and_Grabowski_2007/common.py +0 -0
  548. {PySDM-2.64 → PySDM-2.66}/examples/PySDM_examples/Morrison_and_Grabowski_2007/cumulus.py +0 -0
  549. {PySDM-2.64 → PySDM-2.66}/examples/PySDM_examples/Morrison_and_Grabowski_2007/fig_2.ipynb +0 -0
  550. {PySDM-2.64 → PySDM-2.66}/examples/PySDM_examples/Morrison_and_Grabowski_2007/fig_3.ipynb +0 -0
  551. {PySDM-2.64 → PySDM-2.66}/examples/PySDM_examples/Morrison_and_Grabowski_2007/strato_cumulus.py +0 -0
  552. {PySDM-2.64 → PySDM-2.66}/examples/PySDM_examples/Niedermeier_et_al_2014/__init__.py +0 -0
  553. {PySDM-2.64 → PySDM-2.66}/examples/PySDM_examples/Niedermeier_et_al_2014/fig_2.ipynb +0 -0
  554. {PySDM-2.64 → PySDM-2.66}/examples/PySDM_examples/Niedermeier_et_al_2014/settings.py +0 -0
  555. {PySDM-2.64 → PySDM-2.66}/examples/PySDM_examples/Niedermeier_et_al_2014/simulation.py +0 -0
  556. {PySDM-2.64 → PySDM-2.66}/examples/PySDM_examples/Pierchala_et_al_2022/__init__.py +0 -0
  557. {PySDM-2.64 → PySDM-2.66}/examples/PySDM_examples/Pierchala_et_al_2022/commons.py +0 -0
  558. {PySDM-2.64 → PySDM-2.66}/examples/PySDM_examples/Pierchala_et_al_2022/fig_3.ipynb +0 -0
  559. {PySDM-2.64 → PySDM-2.66}/examples/PySDM_examples/Pierchala_et_al_2022/fig_4.ipynb +0 -0
  560. {PySDM-2.64 → PySDM-2.66}/examples/PySDM_examples/Pyrcel/__init__.py +0 -0
  561. {PySDM-2.64 → PySDM-2.66}/examples/PySDM_examples/Pyrcel/example_basic_run.ipynb +0 -0
  562. {PySDM-2.64 → PySDM-2.66}/examples/PySDM_examples/Pyrcel/profile_plotter.py +0 -0
  563. {PySDM-2.64 → PySDM-2.66}/examples/PySDM_examples/Pyrcel/settings.py +0 -0
  564. {PySDM-2.64 → PySDM-2.66}/examples/PySDM_examples/Pyrcel/simulation.py +0 -0
  565. {PySDM-2.64 → PySDM-2.66}/examples/PySDM_examples/Pyrcel/tutorial_settings.py +0 -0
  566. {PySDM-2.64 → PySDM-2.66}/examples/PySDM_examples/Pyrcel/tutorial_simulation.py +0 -0
  567. {PySDM-2.64 → PySDM-2.66}/examples/PySDM_examples/Rozanski_and_Sonntag_1982/__init__.py +0 -0
  568. {PySDM-2.64 → PySDM-2.66}/examples/PySDM_examples/Shima_et_al_2009/__init__.py +0 -0
  569. {PySDM-2.64 → PySDM-2.66}/examples/PySDM_examples/Shima_et_al_2009/error_measure.py +0 -0
  570. {PySDM-2.64 → PySDM-2.66}/examples/PySDM_examples/Shima_et_al_2009/example.py +0 -0
  571. {PySDM-2.64 → PySDM-2.66}/examples/PySDM_examples/Shima_et_al_2009/example_timing.py +0 -0
  572. {PySDM-2.64 → PySDM-2.66}/examples/PySDM_examples/Shima_et_al_2009/fig_2.ipynb +0 -0
  573. {PySDM-2.64 → PySDM-2.66}/examples/PySDM_examples/Shima_et_al_2009/settings.py +0 -0
  574. {PySDM-2.64 → PySDM-2.66}/examples/PySDM_examples/Shima_et_al_2009/spectrum_plotter.py +0 -0
  575. {PySDM-2.64 → PySDM-2.66}/examples/PySDM_examples/Shima_et_al_2009/tutorial_example.py +0 -0
  576. {PySDM-2.64 → PySDM-2.66}/examples/PySDM_examples/Shima_et_al_2009/tutorial_plotter.py +0 -0
  577. {PySDM-2.64 → PySDM-2.66}/examples/PySDM_examples/Shima_et_al_2009/tutorial_settings.py +0 -0
  578. {PySDM-2.64 → PySDM-2.66}/examples/PySDM_examples/Shipway_and_Hill_2012/__init__.py +0 -0
  579. {PySDM-2.64 → PySDM-2.66}/examples/PySDM_examples/Shipway_and_Hill_2012/fig_1.ipynb +0 -0
  580. {PySDM-2.64 → PySDM-2.66}/examples/PySDM_examples/Shipway_and_Hill_2012/mpdata_1d.py +0 -0
  581. {PySDM-2.64 → PySDM-2.66}/examples/PySDM_examples/Shipway_and_Hill_2012/plot.py +0 -0
  582. {PySDM-2.64 → PySDM-2.66}/examples/PySDM_examples/Shipway_and_Hill_2012/settings.py +0 -0
  583. {PySDM-2.64 → PySDM-2.66}/examples/PySDM_examples/Shipway_and_Hill_2012/simulation.py +0 -0
  584. {PySDM-2.64 → PySDM-2.66}/examples/PySDM_examples/Singer_Ward/MWE_joss_paper.ipynb +0 -0
  585. {PySDM-2.64 → PySDM-2.66}/examples/PySDM_examples/Singer_Ward/__init__.py +0 -0
  586. {PySDM-2.64 → PySDM-2.66}/examples/PySDM_examples/Singer_Ward/aerosol.py +0 -0
  587. {PySDM-2.64 → PySDM-2.66}/examples/PySDM_examples/Singer_Ward/kohler.ipynb +0 -0
  588. {PySDM-2.64 → PySDM-2.66}/examples/PySDM_examples/Srivastava_1982/__init__.py +0 -0
  589. {PySDM-2.64 → PySDM-2.66}/examples/PySDM_examples/Srivastava_1982/equations.py +0 -0
  590. {PySDM-2.64 → PySDM-2.66}/examples/PySDM_examples/Srivastava_1982/example.py +0 -0
  591. {PySDM-2.64 → PySDM-2.66}/examples/PySDM_examples/Srivastava_1982/figures.ipynb +0 -0
  592. {PySDM-2.64 → PySDM-2.66}/examples/PySDM_examples/Srivastava_1982/settings.py +0 -0
  593. {PySDM-2.64 → PySDM-2.66}/examples/PySDM_examples/Srivastava_1982/simulation.py +0 -0
  594. {PySDM-2.64 → PySDM-2.66}/examples/PySDM_examples/Szumowski_et_al_1998/__init__.py +0 -0
  595. {PySDM-2.64 → PySDM-2.66}/examples/PySDM_examples/Szumowski_et_al_1998/fields.py +0 -0
  596. {PySDM-2.64 → PySDM-2.66}/examples/PySDM_examples/Szumowski_et_al_1998/gui.py +0 -0
  597. {PySDM-2.64 → PySDM-2.66}/examples/PySDM_examples/Szumowski_et_al_1998/gui_controller.py +0 -0
  598. {PySDM-2.64 → PySDM-2.66}/examples/PySDM_examples/Szumowski_et_al_1998/gui_settings.py +0 -0
  599. {PySDM-2.64 → PySDM-2.66}/examples/PySDM_examples/Szumowski_et_al_1998/gui_viewer.py +0 -0
  600. {PySDM-2.64 → PySDM-2.66}/examples/PySDM_examples/Szumowski_et_al_1998/make_default_product_collection.py +0 -0
  601. {PySDM-2.64 → PySDM-2.66}/examples/PySDM_examples/Szumowski_et_al_1998/mpdata_2d.py +0 -0
  602. {PySDM-2.64 → PySDM-2.66}/examples/PySDM_examples/Szumowski_et_al_1998/plots.py +0 -0
  603. {PySDM-2.64 → PySDM-2.66}/examples/PySDM_examples/Szumowski_et_al_1998/simulation.py +0 -0
  604. {PySDM-2.64 → PySDM-2.66}/examples/PySDM_examples/Szumowski_et_al_1998/sounding.py +0 -0
  605. {PySDM-2.64 → PySDM-2.66}/examples/PySDM_examples/Szumowski_et_al_1998/storage.py +0 -0
  606. {PySDM-2.64 → PySDM-2.66}/examples/PySDM_examples/Van_Hook_1968/__init__.py +0 -0
  607. {PySDM-2.64 → PySDM-2.66}/examples/PySDM_examples/Van_Hook_1968/fig_1.ipynb +0 -0
  608. {PySDM-2.64 → PySDM-2.66}/examples/PySDM_examples/Yang_et_al_2018/__init__.py +0 -0
  609. {PySDM-2.64 → PySDM-2.66}/examples/PySDM_examples/Yang_et_al_2018/fig_2.ipynb +0 -0
  610. {PySDM-2.64 → PySDM-2.66}/examples/PySDM_examples/Yang_et_al_2018/settings.py +0 -0
  611. {PySDM-2.64 → PySDM-2.66}/examples/PySDM_examples/Yang_et_al_2018/simulation.py +0 -0
  612. {PySDM-2.64 → PySDM-2.66}/examples/PySDM_examples/__init__.py +0 -0
  613. {PySDM-2.64 → PySDM-2.66}/examples/PySDM_examples/deJong_Azimi/__init__.py +0 -0
  614. {PySDM-2.64 → PySDM-2.66}/examples/PySDM_examples/deJong_Azimi/box.ipynb +0 -0
  615. {PySDM-2.64 → PySDM-2.66}/examples/PySDM_examples/deJong_Azimi/cloudy_data.py +0 -0
  616. {PySDM-2.64 → PySDM-2.66}/examples/PySDM_examples/deJong_Azimi/cloudy_data_0d.py +0 -0
  617. {PySDM-2.64 → PySDM-2.66}/examples/PySDM_examples/deJong_Azimi/rainshaft.ipynb +0 -0
  618. {PySDM-2.64 → PySDM-2.66}/examples/PySDM_examples/deJong_Azimi/settings1D.py +0 -0
  619. {PySDM-2.64 → PySDM-2.66}/examples/PySDM_examples/deJong_Azimi/simulation_0D.py +0 -0
  620. {PySDM-2.64 → PySDM-2.66}/examples/PySDM_examples/deJong_Mackay_et_al_2023/__init__.py +0 -0
  621. {PySDM-2.64 → PySDM-2.66}/examples/PySDM_examples/deJong_Mackay_et_al_2023/data/straub_fig10.csv +0 -0
  622. {PySDM-2.64 → PySDM-2.66}/examples/PySDM_examples/deJong_Mackay_et_al_2023/fig_9.ipynb +0 -0
  623. {PySDM-2.64 → PySDM-2.66}/examples/PySDM_examples/deJong_Mackay_et_al_2023/figs_10_11_12_13.ipynb +0 -0
  624. {PySDM-2.64 → PySDM-2.66}/examples/PySDM_examples/deJong_Mackay_et_al_2023/figs_3_4_5.ipynb +0 -0
  625. {PySDM-2.64 → PySDM-2.66}/examples/PySDM_examples/deJong_Mackay_et_al_2023/figs_6_7_8.ipynb +0 -0
  626. {PySDM-2.64 → PySDM-2.66}/examples/PySDM_examples/deJong_Mackay_et_al_2023/plot_rates.py +0 -0
  627. {PySDM-2.64 → PySDM-2.66}/examples/PySDM_examples/deJong_Mackay_et_al_2023/settings1D.py +0 -0
  628. {PySDM-2.64 → PySDM-2.66}/examples/PySDM_examples/deJong_Mackay_et_al_2023/settings_0D.py +0 -0
  629. {PySDM-2.64 → PySDM-2.66}/examples/PySDM_examples/deJong_Mackay_et_al_2023/simulation1D.py +0 -0
  630. {PySDM-2.64 → PySDM-2.66}/examples/PySDM_examples/deJong_Mackay_et_al_2023/simulation_0D.py +0 -0
  631. {PySDM-2.64 → PySDM-2.66}/examples/PySDM_examples/deJong_Mackay_et_al_2023/simulation_ss.py +0 -0
  632. {PySDM-2.64 → PySDM-2.66}/examples/PySDM_examples/utils/__init__.py +0 -0
  633. {PySDM-2.64 → PySDM-2.66}/examples/PySDM_examples/utils/basic_simulation.py +0 -0
  634. {PySDM-2.64 → PySDM-2.66}/examples/PySDM_examples/utils/dummy_controller.py +0 -0
  635. {PySDM-2.64 → PySDM-2.66}/examples/PySDM_examples/utils/notebook_vars.py +0 -0
  636. {PySDM-2.64 → PySDM-2.66}/examples/PySDM_examples/utils/progbar_controller.py +0 -0
  637. {PySDM-2.64 → PySDM-2.66}/examples/PySDM_examples/utils/read_vtk_1d.py +0 -0
  638. {PySDM-2.64 → PySDM-2.66}/examples/PySDM_examples/utils/widgets/__init__.py +0 -0
  639. {PySDM-2.64 → PySDM-2.66}/examples/PySDM_examples/utils/widgets/freezer.py +0 -0
  640. {PySDM-2.64 → PySDM-2.66}/examples/PySDM_examples/utils/widgets/progbar_updater.py +0 -0
  641. {PySDM-2.64 → PySDM-2.66}/examples/pyproject.toml +0 -0
  642. {PySDM-2.64 → PySDM-2.66}/examples/setup.py +0 -0
  643. {PySDM-2.64 → PySDM-2.66}/paper/joss-ARG-fig_1.pdf +0 -0
  644. {PySDM-2.64 → PySDM-2.66}/paper/paper.bib +0 -0
  645. {PySDM-2.64 → PySDM-2.66}/paper/paper.md +0 -0
  646. {PySDM-2.64 → PySDM-2.66}/paper/paperv1.md +0 -0
  647. {PySDM-2.64 → PySDM-2.66}/paper/readme.pdf +0 -0
  648. {PySDM-2.64 → PySDM-2.66}/paper/test.pdf +0 -0
  649. {PySDM-2.64 → PySDM-2.66}/pyproject.toml +0 -0
  650. {PySDM-2.64 → PySDM-2.66}/setup.cfg +0 -0
  651. {PySDM-2.64 → PySDM-2.66}/tests/__init__.py +0 -0
  652. {PySDM-2.64 → PySDM-2.66}/tests/examples_tests/__init__.py +0 -0
  653. {PySDM-2.64 → PySDM-2.66}/tests/examples_tests/conftest.py +0 -0
  654. {PySDM-2.64 → PySDM-2.66}/tests/examples_tests/test_run_examples.py +0 -0
  655. {PySDM-2.64 → PySDM-2.66}/tests/examples_tests/test_run_notebooks.py +0 -0
  656. {PySDM-2.64 → PySDM-2.66}/tests/examples_tests/test_tests_completeness.py +0 -0
  657. {PySDM-2.64 → PySDM-2.66}/tests/smoke_tests/__init__.py +0 -0
  658. {PySDM-2.64 → PySDM-2.66}/tests/smoke_tests/box/alpert_and_knopf_2016/__init__.py +0 -0
  659. {PySDM-2.64 → PySDM-2.66}/tests/smoke_tests/box/alpert_and_knopf_2016/test_ak16_fig_1.py +0 -0
  660. {PySDM-2.64 → PySDM-2.66}/tests/smoke_tests/box/alpert_and_knopf_2016/test_frozen_fraction.py +0 -0
  661. {PySDM-2.64 → PySDM-2.66}/tests/smoke_tests/box/berry_1967/__init__.py +0 -0
  662. {PySDM-2.64 → PySDM-2.66}/tests/smoke_tests/box/bieli_et_al_2022/__init__.py +0 -0
  663. {PySDM-2.64 → PySDM-2.66}/tests/smoke_tests/box/bieli_et_al_2022/test_moments.py +0 -0
  664. {PySDM-2.64 → PySDM-2.66}/tests/smoke_tests/box/dejong_and_mackay_et_al_2023/__init__.py +0 -0
  665. {PySDM-2.64 → PySDM-2.66}/tests/smoke_tests/box/dejong_and_mackay_et_al_2023/test_collision.py +0 -0
  666. {PySDM-2.64 → PySDM-2.66}/tests/smoke_tests/box/dejong_and_mackay_et_al_2023/test_fig_6.py +0 -0
  667. {PySDM-2.64 → PySDM-2.66}/tests/smoke_tests/box/dejong_and_mackay_et_al_2023/test_fig_7.py +0 -0
  668. {PySDM-2.64 → PySDM-2.66}/tests/smoke_tests/box/dejong_and_mackay_et_al_2023/test_fig_8.py +0 -0
  669. {PySDM-2.64 → PySDM-2.66}/tests/smoke_tests/box/dejong_azimi/test_box.py +0 -0
  670. {PySDM-2.64 → PySDM-2.66}/tests/smoke_tests/box/partmc/__init__.py +0 -0
  671. {PySDM-2.64 → PySDM-2.66}/tests/smoke_tests/box/partmc/test_dry_wet_equilibration.py +0 -0
  672. {PySDM-2.64 → PySDM-2.66}/tests/smoke_tests/box/shima_et_al_2009/__init__.py +0 -0
  673. {PySDM-2.64 → PySDM-2.66}/tests/smoke_tests/box/shima_et_al_2009/test_lwc_constant.py +0 -0
  674. {PySDM-2.64 → PySDM-2.66}/tests/smoke_tests/box/srivastava_1982/__init__.py +0 -0
  675. {PySDM-2.64 → PySDM-2.66}/tests/smoke_tests/box/srivastava_1982/test_eq_10.py +0 -0
  676. {PySDM-2.64 → PySDM-2.66}/tests/smoke_tests/box/srivastava_1982/test_eq_13.py +0 -0
  677. {PySDM-2.64 → PySDM-2.66}/tests/smoke_tests/box/srivastava_1982/test_equations.py +0 -0
  678. {PySDM-2.64 → PySDM-2.66}/tests/smoke_tests/conftest.py +0 -0
  679. {PySDM-2.64 → PySDM-2.66}/tests/smoke_tests/kinematic_1d/deJong_Azimi/__init__.py +0 -0
  680. {PySDM-2.64 → PySDM-2.66}/tests/smoke_tests/kinematic_1d/deJong_Azimi/test_few_steps.py +0 -0
  681. {PySDM-2.64 → PySDM-2.66}/tests/smoke_tests/kinematic_1d/deJong_Azimi/test_initial_condition.py +0 -0
  682. {PySDM-2.64 → PySDM-2.66}/tests/smoke_tests/kinematic_1d/shipway_and_hill_2012/__init__.py +0 -0
  683. {PySDM-2.64 → PySDM-2.66}/tests/smoke_tests/kinematic_1d/shipway_and_hill_2012/test_1d_exporters.py +0 -0
  684. {PySDM-2.64 → PySDM-2.66}/tests/smoke_tests/kinematic_1d/shipway_and_hill_2012/test_few_steps.py +0 -0
  685. {PySDM-2.64 → PySDM-2.66}/tests/smoke_tests/kinematic_1d/shipway_and_hill_2012/test_initial_condition.py +0 -0
  686. {PySDM-2.64 → PySDM-2.66}/tests/smoke_tests/kinematic_1d/shipway_and_hill_2012/test_settings.py +0 -0
  687. {PySDM-2.64 → PySDM-2.66}/tests/smoke_tests/kinematic_2d/arabas_et_al_2015/__init__.py +0 -0
  688. {PySDM-2.64 → PySDM-2.66}/tests/smoke_tests/kinematic_2d/arabas_et_al_2015/dummy_storage.py +0 -0
  689. {PySDM-2.64 → PySDM-2.66}/tests/smoke_tests/kinematic_2d/arabas_et_al_2015/test_adaptive_displacement.py +0 -0
  690. {PySDM-2.64 → PySDM-2.66}/tests/smoke_tests/kinematic_2d/arabas_et_al_2015/test_environment.py +0 -0
  691. {PySDM-2.64 → PySDM-2.66}/tests/smoke_tests/kinematic_2d/arabas_et_al_2015/test_export.py +0 -0
  692. {PySDM-2.64 → PySDM-2.66}/tests/smoke_tests/kinematic_2d/arabas_et_al_2015/test_freezing.py +0 -0
  693. {PySDM-2.64 → PySDM-2.66}/tests/smoke_tests/kinematic_2d/arabas_et_al_2015/test_gui_settings.py +0 -0
  694. {PySDM-2.64 → PySDM-2.66}/tests/smoke_tests/kinematic_2d/arabas_et_al_2015/test_initialisation.py +0 -0
  695. {PySDM-2.64 → PySDM-2.66}/tests/smoke_tests/kinematic_2d/arabas_et_al_2015/test_spin_up.py +0 -0
  696. {PySDM-2.64 → PySDM-2.66}/tests/smoke_tests/no_env/gedzelman_and_arnold_1994/__init__.py +0 -0
  697. {PySDM-2.64 → PySDM-2.66}/tests/smoke_tests/no_env/gedzelman_and_arnold_1994/test_fig_2.py +0 -0
  698. {PySDM-2.64 → PySDM-2.66}/tests/smoke_tests/no_env/lamb_et_al_2017/__init__.py +0 -0
  699. {PySDM-2.64 → PySDM-2.66}/tests/smoke_tests/no_env/lamb_et_al_2017/test_fig_4.py +0 -0
  700. {PySDM-2.64 → PySDM-2.66}/tests/smoke_tests/no_env/miyake_et_al_1968/__init__.py +0 -0
  701. {PySDM-2.64 → PySDM-2.66}/tests/smoke_tests/no_env/miyake_et_al_1968/test_fig_19.py +0 -0
  702. {PySDM-2.64 → PySDM-2.66}/tests/smoke_tests/no_env/pierchala_et_al_2022/__init__.py +0 -0
  703. {PySDM-2.64 → PySDM-2.66}/tests/smoke_tests/no_env/pierchala_et_al_2022/test_fig_3.py +0 -0
  704. {PySDM-2.64 → PySDM-2.66}/tests/smoke_tests/no_env/pierchala_et_al_2022/test_fig_4.py +0 -0
  705. {PySDM-2.64 → PySDM-2.66}/tests/smoke_tests/no_env/pierchala_et_al_2022/test_supplement.py +0 -0
  706. {PySDM-2.64 → PySDM-2.66}/tests/smoke_tests/parcel_a/lowe_et_al_2019/__init__.py +0 -0
  707. {PySDM-2.64 → PySDM-2.66}/tests/smoke_tests/parcel_a/lowe_et_al_2019/conftest.py +0 -0
  708. {PySDM-2.64 → PySDM-2.66}/tests/smoke_tests/parcel_a/lowe_et_al_2019/test_dz_sensitivity.py +0 -0
  709. {PySDM-2.64 → PySDM-2.66}/tests/smoke_tests/parcel_a/lowe_et_al_2019/test_fig_1.py +0 -0
  710. {PySDM-2.64 → PySDM-2.66}/tests/smoke_tests/parcel_a/lowe_et_al_2019/test_fig_2.py +0 -0
  711. {PySDM-2.64 → PySDM-2.66}/tests/smoke_tests/parcel_a/lowe_et_al_2019/test_fig_s2.py +0 -0
  712. {PySDM-2.64 → PySDM-2.66}/tests/smoke_tests/parcel_a/lowe_et_al_2019/test_surface_tension_models.py +0 -0
  713. {PySDM-2.64 → PySDM-2.66}/tests/smoke_tests/parcel_a/lowe_et_al_2019/test_zero_forg.py +0 -0
  714. {PySDM-2.64 → PySDM-2.66}/tests/smoke_tests/parcel_a/pyrcel/__init__.py +0 -0
  715. {PySDM-2.64 → PySDM-2.66}/tests/smoke_tests/parcel_a/pyrcel/test_parcel_example.py +0 -0
  716. {PySDM-2.64 → PySDM-2.66}/tests/smoke_tests/parcel_a/rozanski_and_sonntag_1982/__init__.py +0 -0
  717. {PySDM-2.64 → PySDM-2.66}/tests/smoke_tests/parcel_a/rozanski_and_sonntag_1982/test_figs_4_5_6.py +0 -0
  718. {PySDM-2.64 → PySDM-2.66}/tests/smoke_tests/parcel_b/arabas_and_shima_2017/__init__.py +0 -0
  719. {PySDM-2.64 → PySDM-2.66}/tests/smoke_tests/parcel_b/arabas_and_shima_2017/test_conservation.py +0 -0
  720. {PySDM-2.64 → PySDM-2.66}/tests/smoke_tests/parcel_b/arabas_and_shima_2017/test_displacement.py +0 -0
  721. {PySDM-2.64 → PySDM-2.66}/tests/smoke_tests/parcel_b/arabas_and_shima_2017/test_event_rates.py +0 -0
  722. {PySDM-2.64 → PySDM-2.66}/tests/smoke_tests/parcel_b/arabas_and_shima_2017/test_initialisation.py +0 -0
  723. {PySDM-2.64 → PySDM-2.66}/tests/smoke_tests/parcel_b/arabas_and_shima_2017/test_vs_scipy.py +0 -0
  724. {PySDM-2.64 → PySDM-2.66}/tests/smoke_tests/parcel_b/yang_et_al_2018/__init__.py +0 -0
  725. {PySDM-2.64 → PySDM-2.66}/tests/smoke_tests/parcel_b/yang_et_al_2018/test_displacement.py +0 -0
  726. {PySDM-2.64 → PySDM-2.66}/tests/smoke_tests/parcel_b/yang_et_al_2018/test_initialisation.py +0 -0
  727. {PySDM-2.64 → PySDM-2.66}/tests/smoke_tests/parcel_b/yang_et_al_2018/test_just_do_it.py +0 -0
  728. {PySDM-2.64 → PySDM-2.66}/tests/smoke_tests/parcel_c/abdul_razzak_ghan_2000/__init__.py +0 -0
  729. {PySDM-2.64 → PySDM-2.66}/tests/smoke_tests/parcel_c/abdul_razzak_ghan_2000/test_ARG_example.py +0 -0
  730. {PySDM-2.64 → PySDM-2.66}/tests/smoke_tests/parcel_c/abdul_razzak_ghan_2000/test_just_do_it.py +0 -0
  731. {PySDM-2.64 → PySDM-2.66}/tests/smoke_tests/parcel_c/abdul_razzak_ghan_2000/test_single_supersaturation_peak.py +0 -0
  732. {PySDM-2.64 → PySDM-2.66}/tests/smoke_tests/parcel_c/grabowski_and_pawlowska_2023/__init__.py +0 -0
  733. {PySDM-2.64 → PySDM-2.66}/tests/smoke_tests/parcel_c/grabowski_and_pawlowska_2023/test_condensation_tolerance.py +0 -0
  734. {PySDM-2.64 → PySDM-2.66}/tests/smoke_tests/parcel_c/grabowski_and_pawlowska_2023/test_figure_1_and_2.py +0 -0
  735. {PySDM-2.64 → PySDM-2.66}/tests/smoke_tests/parcel_c/grabowski_and_pawlowska_2023/test_figure_3.py +0 -0
  736. {PySDM-2.64 → PySDM-2.66}/tests/smoke_tests/parcel_c/grabowski_and_pawlowska_2023/test_figure_4.py +0 -0
  737. {PySDM-2.64 → PySDM-2.66}/tests/smoke_tests/parcel_c/grabowski_and_pawlowska_2023/test_ripening_rate.py +0 -0
  738. {PySDM-2.64 → PySDM-2.66}/tests/smoke_tests/parcel_c/graf_et_al_2019/__init__.py +0 -0
  739. {PySDM-2.64 → PySDM-2.66}/tests/smoke_tests/parcel_c/graf_et_al_2019/test_fig_4.py +0 -0
  740. {PySDM-2.64 → PySDM-2.66}/tests/smoke_tests/parcel_c/graf_et_al_2019/test_table_1.py +0 -0
  741. {PySDM-2.64 → PySDM-2.66}/tests/smoke_tests/parcel_c/jensen_and_nugent_2017/__init__.py +0 -0
  742. {PySDM-2.64 → PySDM-2.66}/tests/smoke_tests/parcel_c/jensen_and_nugent_2017/test_fig_1.py +0 -0
  743. {PySDM-2.64 → PySDM-2.66}/tests/smoke_tests/parcel_c/jensen_and_nugent_2017/test_fig_3_and_tab_4_upper_rows.py +0 -0
  744. {PySDM-2.64 → PySDM-2.66}/tests/smoke_tests/parcel_c/jensen_and_nugent_2017/test_fig_4_and_7_and_tab_4_bottom_rows.py +0 -0
  745. {PySDM-2.64 → PySDM-2.66}/tests/smoke_tests/parcel_c/jensen_and_nugent_2017/test_fig_5.py +0 -0
  746. {PySDM-2.64 → PySDM-2.66}/tests/smoke_tests/parcel_c/jensen_and_nugent_2017/test_fig_6.py +0 -0
  747. {PySDM-2.64 → PySDM-2.66}/tests/smoke_tests/parcel_c/jensen_and_nugent_2017/test_table_3.py +0 -0
  748. {PySDM-2.64 → PySDM-2.66}/tests/smoke_tests/parcel_c/kreidenweis_et_al_2003/__init__.py +0 -0
  749. {PySDM-2.64 → PySDM-2.66}/tests/smoke_tests/parcel_c/kreidenweis_et_al_2003/test_fig_1.py +0 -0
  750. {PySDM-2.64 → PySDM-2.66}/tests/smoke_tests/parcel_c/kreidenweis_et_al_2003/test_ionic_strength.py +0 -0
  751. {PySDM-2.64 → PySDM-2.66}/tests/smoke_tests/parcel_c/kreidenweis_et_al_2003/test_spectrum_at_t_0.py +0 -0
  752. {PySDM-2.64 → PySDM-2.66}/tests/smoke_tests/parcel_c/kreidenweis_et_al_2003/test_table_3.py +0 -0
  753. {PySDM-2.64 → PySDM-2.66}/tests/smoke_tests/parcel_c/niedermeier_et_al_2013/__init__.py +0 -0
  754. {PySDM-2.64 → PySDM-2.66}/tests/smoke_tests/parcel_c/niedermeier_et_al_2013/test_temperature_profile.py +0 -0
  755. {PySDM-2.64 → PySDM-2.66}/tests/tutorials_tests/__init__.py +0 -0
  756. {PySDM-2.64 → PySDM-2.66}/tests/tutorials_tests/conftest.py +0 -0
  757. {PySDM-2.64 → PySDM-2.66}/tests/tutorials_tests/test_run_notebooks.py +0 -0
  758. {PySDM-2.64 → PySDM-2.66}/tests/unit_tests/__init__.py +0 -0
  759. {PySDM-2.64 → PySDM-2.66}/tests/unit_tests/attributes/__init__.py +0 -0
  760. {PySDM-2.64 → PySDM-2.66}/tests/unit_tests/attributes/test_acidity.py +0 -0
  761. {PySDM-2.64 → PySDM-2.66}/tests/unit_tests/attributes/test_area_radius.py +0 -0
  762. {PySDM-2.64 → PySDM-2.66}/tests/unit_tests/attributes/test_critical_supersaturation.py +0 -0
  763. {PySDM-2.64 → PySDM-2.66}/tests/unit_tests/attributes/test_fall_velocity.py +0 -0
  764. {PySDM-2.64 → PySDM-2.66}/tests/unit_tests/attributes/test_isotopes.py +0 -0
  765. {PySDM-2.64 → PySDM-2.66}/tests/unit_tests/attributes/test_reynolds_number.py +0 -0
  766. {PySDM-2.64 → PySDM-2.66}/tests/unit_tests/backends/__init__.py +0 -0
  767. {PySDM-2.64 → PySDM-2.66}/tests/unit_tests/backends/storage/__init__.py +0 -0
  768. {PySDM-2.64 → PySDM-2.66}/tests/unit_tests/backends/storage/test_basic_ops.py +0 -0
  769. {PySDM-2.64 → PySDM-2.66}/tests/unit_tests/backends/storage/test_index.py +0 -0
  770. {PySDM-2.64 → PySDM-2.66}/tests/unit_tests/backends/storage/test_setitem.py +0 -0
  771. {PySDM-2.64 → PySDM-2.66}/tests/unit_tests/backends/test_collisions_methods.py +0 -0
  772. {PySDM-2.64 → PySDM-2.66}/tests/unit_tests/backends/test_ctor_defaults.py +0 -0
  773. {PySDM-2.64 → PySDM-2.66}/tests/unit_tests/backends/test_fake_thrust.py +0 -0
  774. {PySDM-2.64 → PySDM-2.66}/tests/unit_tests/backends/test_isotope_methods.py +0 -0
  775. {PySDM-2.64 → PySDM-2.66}/tests/unit_tests/backends/test_moments_methods.py +0 -0
  776. {PySDM-2.64 → PySDM-2.66}/tests/unit_tests/backends/test_oxidation.py +0 -0
  777. {PySDM-2.64 → PySDM-2.66}/tests/unit_tests/backends/test_pair_methods.py +0 -0
  778. {PySDM-2.64 → PySDM-2.66}/tests/unit_tests/backends/test_physics_methods.py +0 -0
  779. {PySDM-2.64 → PySDM-2.66}/tests/unit_tests/backends/test_toms748.py +0 -0
  780. {PySDM-2.64 → PySDM-2.66}/tests/unit_tests/conftest.py +0 -0
  781. {PySDM-2.64 → PySDM-2.66}/tests/unit_tests/dummy_environment.py +0 -0
  782. {PySDM-2.64 → PySDM-2.66}/tests/unit_tests/dynamics/__init__.py +0 -0
  783. {PySDM-2.64 → PySDM-2.66}/tests/unit_tests/dynamics/collisions/__init__.py +0 -0
  784. {PySDM-2.64 → PySDM-2.66}/tests/unit_tests/dynamics/collisions/conftest.py +0 -0
  785. {PySDM-2.64 → PySDM-2.66}/tests/unit_tests/dynamics/collisions/test_defaults.py +0 -0
  786. {PySDM-2.64 → PySDM-2.66}/tests/unit_tests/dynamics/collisions/test_efficiencies.py +0 -0
  787. {PySDM-2.64 → PySDM-2.66}/tests/unit_tests/dynamics/collisions/test_fragmentations.py +0 -0
  788. {PySDM-2.64 → PySDM-2.66}/tests/unit_tests/dynamics/collisions/test_kernels.py +0 -0
  789. {PySDM-2.64 → PySDM-2.66}/tests/unit_tests/dynamics/collisions/test_sdm_breakup.py +0 -0
  790. {PySDM-2.64 → PySDM-2.66}/tests/unit_tests/dynamics/collisions/test_sdm_single_cell.py +0 -0
  791. {PySDM-2.64 → PySDM-2.66}/tests/unit_tests/dynamics/condensation/test_diagnostics.py +0 -0
  792. {PySDM-2.64 → PySDM-2.66}/tests/unit_tests/dynamics/condensation/test_parcel_sanity_checks.py +0 -0
  793. {PySDM-2.64 → PySDM-2.66}/tests/unit_tests/dynamics/condensation/test_ventilation.py +0 -0
  794. {PySDM-2.64 → PySDM-2.66}/tests/unit_tests/dynamics/displacement/__init__.py +0 -0
  795. {PySDM-2.64 → PySDM-2.66}/tests/unit_tests/dynamics/displacement/displacement_settings.py +0 -0
  796. {PySDM-2.64 → PySDM-2.66}/tests/unit_tests/dynamics/displacement/test_advection.py +0 -0
  797. {PySDM-2.64 → PySDM-2.66}/tests/unit_tests/dynamics/displacement/test_courant_product.py +0 -0
  798. {PySDM-2.64 → PySDM-2.66}/tests/unit_tests/dynamics/displacement/test_sedimentation.py +0 -0
  799. {PySDM-2.64 → PySDM-2.66}/tests/unit_tests/dynamics/test_eulerian_advection.py +0 -0
  800. {PySDM-2.64 → PySDM-2.66}/tests/unit_tests/dynamics/test_isotopic_fractionation.py +0 -0
  801. {PySDM-2.64 → PySDM-2.66}/tests/unit_tests/dynamics/test_relaxed_velocity.py +0 -0
  802. {PySDM-2.64 → PySDM-2.66}/tests/unit_tests/dynamics/test_terminal_velocity.py +0 -0
  803. {PySDM-2.64 → PySDM-2.66}/tests/unit_tests/impl/__init__.py +0 -0
  804. {PySDM-2.64 → PySDM-2.66}/tests/unit_tests/impl/test_mesh.py +0 -0
  805. {PySDM-2.64 → PySDM-2.66}/tests/unit_tests/impl/test_moments.py +0 -0
  806. {PySDM-2.64 → PySDM-2.66}/tests/unit_tests/initialisation/__init__.py +0 -0
  807. {PySDM-2.64 → PySDM-2.66}/tests/unit_tests/initialisation/test_aerosol_init.py +0 -0
  808. {PySDM-2.64 → PySDM-2.66}/tests/unit_tests/initialisation/test_equilibrate_wet_radii.py +0 -0
  809. {PySDM-2.64 → PySDM-2.66}/tests/unit_tests/initialisation/test_spatial_discretisation.py +0 -0
  810. {PySDM-2.64 → PySDM-2.66}/tests/unit_tests/initialisation/test_spectra_lognormal.py +0 -0
  811. {PySDM-2.64 → PySDM-2.66}/tests/unit_tests/initialisation/test_spectral_discretisation.py +0 -0
  812. {PySDM-2.64 → PySDM-2.66}/tests/unit_tests/initialisation/test_spectro_glacial_discretisation.py +0 -0
  813. {PySDM-2.64 → PySDM-2.66}/tests/unit_tests/physics/__init__.py +0 -0
  814. {PySDM-2.64 → PySDM-2.66}/tests/unit_tests/physics/test_accommodation_coefficients.py +0 -0
  815. {PySDM-2.64 → PySDM-2.66}/tests/unit_tests/physics/test_air_dynamic_viscosity.py +0 -0
  816. {PySDM-2.64 → PySDM-2.66}/tests/unit_tests/physics/test_constants.py +0 -0
  817. {PySDM-2.64 → PySDM-2.66}/tests/unit_tests/physics/test_dimensional_analysis.py +0 -0
  818. {PySDM-2.64 → PySDM-2.66}/tests/unit_tests/physics/test_drop_growth.py +0 -0
  819. {PySDM-2.64 → PySDM-2.66}/tests/unit_tests/physics/test_formulae.py +0 -0
  820. {PySDM-2.64 → PySDM-2.66}/tests/unit_tests/physics/test_fragmentation_functions.py +0 -0
  821. {PySDM-2.64 → PySDM-2.66}/tests/unit_tests/physics/test_freezing_temperature_spectra.py +0 -0
  822. {PySDM-2.64 → PySDM-2.66}/tests/unit_tests/physics/test_hygroscopicity_fierce_diagrams.py +0 -0
  823. {PySDM-2.64 → PySDM-2.66}/tests/unit_tests/physics/test_isotope_diffusivity_ratios.py +0 -0
  824. {PySDM-2.64 → PySDM-2.66}/tests/unit_tests/physics/test_isotope_equilibrium_fractionation_factors.py +0 -0
  825. {PySDM-2.64 → PySDM-2.66}/tests/unit_tests/physics/test_isotope_meteoric_water_line_excess.py +0 -0
  826. {PySDM-2.64 → PySDM-2.66}/tests/unit_tests/physics/test_isotope_ratio_evolution.py +0 -0
  827. {PySDM-2.64 → PySDM-2.66}/tests/unit_tests/physics/test_isotope_relaxation_timescale.py +0 -0
  828. {PySDM-2.64 → PySDM-2.66}/tests/unit_tests/physics/test_latent_heat.py +0 -0
  829. {PySDM-2.64 → PySDM-2.66}/tests/unit_tests/physics/test_optical.py +0 -0
  830. {PySDM-2.64 → PySDM-2.66}/tests/unit_tests/physics/test_particle_shape_and_density.py +0 -0
  831. {PySDM-2.64 → PySDM-2.66}/tests/unit_tests/physics/test_saturation_vapour_pressure.py +0 -0
  832. {PySDM-2.64 → PySDM-2.66}/tests/unit_tests/physics/test_spectra.py +0 -0
  833. {PySDM-2.64 → PySDM-2.66}/tests/unit_tests/physics/test_spectra_top_hat.py +0 -0
  834. {PySDM-2.64 → PySDM-2.66}/tests/unit_tests/physics/test_surface_tension.py +0 -0
  835. {PySDM-2.64 → PySDM-2.66}/tests/unit_tests/physics/test_thermal_conductivity.py +0 -0
  836. {PySDM-2.64 → PySDM-2.66}/tests/unit_tests/physics/test_trivia.py +0 -0
  837. {PySDM-2.64 → PySDM-2.66}/tests/unit_tests/physics/test_ventilation_coefficient.py +0 -0
  838. {PySDM-2.64 → PySDM-2.66}/tests/unit_tests/products/__init__.py +0 -0
  839. {PySDM-2.64 → PySDM-2.66}/tests/unit_tests/products/test_ambient_relative_humidity.py +0 -0
  840. {PySDM-2.64 → PySDM-2.66}/tests/unit_tests/products/test_arbitrary_moment.py +0 -0
  841. {PySDM-2.64 → PySDM-2.66}/tests/unit_tests/products/test_averaged_terminal_velocity.py +0 -0
  842. {PySDM-2.64 → PySDM-2.66}/tests/unit_tests/products/test_collision_rates.py +0 -0
  843. {PySDM-2.64 → PySDM-2.66}/tests/unit_tests/products/test_concentration_product.py +0 -0
  844. {PySDM-2.64 → PySDM-2.66}/tests/unit_tests/products/test_cooling_rate.py +0 -0
  845. {PySDM-2.64 → PySDM-2.66}/tests/unit_tests/products/test_effective_radii.py +0 -0
  846. {PySDM-2.64 → PySDM-2.66}/tests/unit_tests/products/test_parcel_liquid_water_path.py +0 -0
  847. {PySDM-2.64 → PySDM-2.66}/tests/unit_tests/products/test_particle_size_product.py +0 -0
  848. {PySDM-2.64 → PySDM-2.66}/tests/unit_tests/products/test_particle_size_spectrum.py +0 -0
  849. {PySDM-2.64 → PySDM-2.66}/tests/unit_tests/test_builder.py +0 -0
  850. {PySDM-2.64 → PySDM-2.66}/tests/unit_tests/test_formulae.py +0 -0
  851. {PySDM-2.64 → PySDM-2.66}/tests/unit_tests/test_imports.py +0 -0
  852. {PySDM-2.64 → PySDM-2.66}/tests/unit_tests/test_particulator.py +0 -0
  853. {PySDM-2.64 → PySDM-2.66}/tutorials/README.md +0 -0
  854. {PySDM-2.64 → PySDM-2.66}/tutorials/collisions/collection_droplet.svg +0 -0
  855. {PySDM-2.64 → PySDM-2.66}/tutorials/collisions/collisions_playground.ipynb +0 -0
  856. {PySDM-2.64 → PySDM-2.66}/tutorials/condensation/condensation_playground.ipynb +0 -0
  857. {PySDM-2.64 → PySDM-2.66}/tutorials/condensation/kohler_curve.svg +0 -0
@@ -48,7 +48,7 @@ jobs:
48
48
  pip install -e ./examples
49
49
  pip install pytest-cov
50
50
  pytest --durations=10 -We tests/unit_tests --cov-report=xml --cov=PySDM
51
- - uses: codecov/codecov-action@v4.1.0
51
+ - uses: codecov/codecov-action@v4.5.0
52
52
  with:
53
53
  fail_ci_if_error: true
54
54
  verbose: true
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: PySDM
3
- Version: 2.64
3
+ Version: 2.66
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
@@ -24,6 +24,9 @@ PySDM test-suite built using [pytest](https://docs.pytest.org/) is located in th
24
24
 
25
25
  from importlib.metadata import PackageNotFoundError, version
26
26
 
27
+ from PySDM.attributes.impl.attribute_registry import register_attribute
28
+
29
+ from . import attributes
27
30
  from . import environments, exporters, products
28
31
  from .builder import Builder
29
32
  from .formulae import Formulae
@@ -0,0 +1,9 @@
1
+ """
2
+ Classes representing super-particle attributes
3
+ """
4
+
5
+ from .physics import *
6
+ from .numerics import *
7
+ from .ice import *
8
+ from .chemistry import *
9
+ from .isotopes import *
@@ -2,11 +2,12 @@
2
2
  pH calculated by finding equilibrium hydrogen ion concentration
3
3
  """
4
4
 
5
- from PySDM.attributes.impl.intensive_attribute import DerivedAttribute
5
+ from PySDM.attributes.impl import DerivedAttribute, register_attribute
6
6
  from PySDM.backends.impl_numba.methods.chemistry_methods import _conc
7
7
  from PySDM.dynamics.impl.chemistry_utils import AQUEOUS_COMPOUNDS
8
8
 
9
9
 
10
+ @register_attribute(name="pH")
10
11
  class Acidity(DerivedAttribute):
11
12
  def __init__(self, builder):
12
13
  self.conc = {}
@@ -0,0 +1,25 @@
1
+ """
2
+ concentrations (intensive, derived attributes)
3
+ """
4
+
5
+ from PySDM.attributes.impl import IntensiveAttribute, register_attribute
6
+ from PySDM.attributes.impl.mole_amount import make_mole_amount_factory
7
+ from PySDM.dynamics.impl.chemistry_utils import AQUEOUS_COMPOUNDS
8
+
9
+
10
+ class ConcentrationImpl(IntensiveAttribute):
11
+ def __init__(self, builder, *, what):
12
+ super().__init__(builder, name="conc_" + what, base="moles_" + what)
13
+
14
+
15
+ def make_concentration_factory(what):
16
+ def _factory(builder):
17
+ return ConcentrationImpl(builder, what=what)
18
+
19
+ return _factory
20
+
21
+
22
+ for compound in AQUEOUS_COMPOUNDS:
23
+ register_attribute(name=f"conc_{compound}")(make_concentration_factory(compound))
24
+
25
+ register_attribute(name=f"moles_{compound}")(make_mole_amount_factory(compound))
@@ -2,9 +2,10 @@
2
2
  hydrogen ion concentration derived from pH
3
3
  """
4
4
 
5
- from PySDM.attributes.impl.derived_attribute import DerivedAttribute
5
+ from PySDM.attributes.impl import DerivedAttribute, register_attribute
6
6
 
7
7
 
8
+ @register_attribute(name="conc_H")
8
9
  class HydrogenIonConcentration(DerivedAttribute):
9
10
  def __init__(self, builder):
10
11
  self.acidity = builder.get_attribute("pH")
@@ -5,10 +5,10 @@ cooling rate estimated as the difference in current and previous grid-cell
5
5
  """
6
6
 
7
7
  import numpy as np
8
-
9
- from PySDM.attributes.impl import DerivedAttribute
8
+ from PySDM.attributes.impl import DerivedAttribute, register_attribute
10
9
 
11
10
 
11
+ @register_attribute()
12
12
  class CoolingRate(DerivedAttribute):
13
13
  def __init__(self, builder):
14
14
  self.cell_id = builder.get_attribute("cell id")
@@ -3,9 +3,10 @@ particle freezing temperature (assigned at initialisation, modified through coll
3
3
  used in singular regime)
4
4
  """
5
5
 
6
- from PySDM.attributes.impl import MaximumAttribute
6
+ from PySDM.attributes.impl import MaximumAttribute, register_attribute
7
7
 
8
8
 
9
+ @register_attribute()
9
10
  class FreezingTemperature(MaximumAttribute):
10
11
  def __init__(self, builder):
11
12
  super().__init__(builder, name="freezing temperature")
@@ -3,9 +3,10 @@ immersed INP surface area (assigned at initialisation, modified through collisio
3
3
  used in time-dependent regime)
4
4
  """
5
5
 
6
- from ..impl import ExtensiveAttribute
6
+ from ..impl import ExtensiveAttribute, register_attribute
7
7
 
8
8
 
9
+ @register_attribute()
9
10
  class ImmersedSurfaceArea(ExtensiveAttribute):
10
11
  def __init__(self, particles_builder):
11
12
  super().__init__(particles_builder, name="immersed surface area")
@@ -9,3 +9,5 @@ from .derived_attribute import DerivedAttribute
9
9
  from .dummy_attribute import DummyAttribute
10
10
  from .extensive_attribute import ExtensiveAttribute
11
11
  from .maximum_attribute import MaximumAttribute
12
+ from .attribute_registry import register_attribute, get_attribute_class
13
+ from .intensive_attribute import IntensiveAttribute
@@ -0,0 +1,62 @@
1
+ """ definition of decorator used to register PySDM attribute classes """
2
+
3
+ import warnings
4
+
5
+ from PySDM.impl.camel_case import camel_case_to_words
6
+
7
+ _ATTRIBUTES_REGISTRY = {}
8
+
9
+
10
+ def _make_dummy_attribute_factory(name):
11
+ # pylint: disable=import-outside-toplevel
12
+ from PySDM.attributes.impl.dummy_attribute import DummyAttribute
13
+
14
+ def _factory(builder):
15
+ return DummyAttribute(builder, name=name)
16
+
17
+ return _factory
18
+
19
+
20
+ def register_attribute(*, name=None, variant=None, dummy_default=False, warn=False):
21
+ if variant is not None:
22
+ assert name is not None
23
+ if dummy_default:
24
+ assert variant is not None
25
+ if warn:
26
+ assert dummy_default
27
+
28
+ def decorator(cls):
29
+ key = name or camel_case_to_words(cls.__name__)
30
+
31
+ if key not in _ATTRIBUTES_REGISTRY:
32
+ _ATTRIBUTES_REGISTRY[key] = {}
33
+ elif cls in _ATTRIBUTES_REGISTRY[key]:
34
+ raise ValueError(f"attribute {key} already exists!")
35
+ _ATTRIBUTES_REGISTRY[key][cls] = variant or (lambda _, __: cls)
36
+ if dummy_default:
37
+ _ATTRIBUTES_REGISTRY[key][_make_dummy_attribute_factory(key)] = (
38
+ lambda _, __: (
39
+ warnings.warn(
40
+ f"dummy implementation used for requested attribute named '{name}'"
41
+ )
42
+ if warn
43
+ else None
44
+ )
45
+ is None
46
+ and not variant(_, __)
47
+ )
48
+ return cls
49
+
50
+ return decorator
51
+
52
+
53
+ def get_attribute_class(name, dynamics=None, formulae=None):
54
+ if name not in _ATTRIBUTES_REGISTRY:
55
+ raise ValueError(
56
+ f"Unknown attribute name: {name};"
57
+ " valid names: {', '.join(sorted(_ATTRIBUTES_REGISTRY))}"
58
+ )
59
+ for cls, func in _ATTRIBUTES_REGISTRY[name].items():
60
+ if func(dynamics, formulae):
61
+ return cls
62
+ assert False
@@ -1,8 +1,6 @@
1
1
  """ logic around `PySDM.attributes.impl.dummy_attribute.DummyAttribute` - parent class
2
2
  for do-nothing attributes """
3
3
 
4
- import warnings
5
-
6
4
  import numpy as np
7
5
 
8
6
  from .attribute import Attribute
@@ -18,15 +16,3 @@ class DummyAttribute(Attribute):
18
16
 
19
17
  def get(self):
20
18
  return self.data
21
-
22
-
23
- def make_dummy_attribute_factory(name, warn=False):
24
- def _factory(builder):
25
- return DummyAttribute(builder, name=name)
26
-
27
- if warn:
28
- warnings.warn(
29
- f"dummy implementation used for requested attribute named '{name}'"
30
- )
31
-
32
- return _factory
@@ -0,0 +1,6 @@
1
+ """
2
+ isotopic fractionation related attributes
3
+ """
4
+
5
+ from .moles import Moles1H, Moles16O, MolesLightWater
6
+ from ..isotopes import delta
@@ -3,7 +3,8 @@ per-droplet isotopic ratio of heavy-to-light isotope number concentrations
3
3
  expressed vs the VSMOW reference in SI units (i.e., not per mille)
4
4
  """
5
5
 
6
- from PySDM.attributes.impl.derived_attribute import DerivedAttribute
6
+ from PySDM.attributes.impl import DerivedAttribute, register_attribute
7
+ from PySDM.dynamics.isotopic_fractionation import HEAVY_ISOTOPES
7
8
 
8
9
 
9
10
  class DeltaImpl(DerivedAttribute):
@@ -43,3 +44,7 @@ def make_delta_factory(what):
43
44
  return DeltaImpl(builder, heavy_isotope=what)
44
45
 
45
46
  return _factory
47
+
48
+
49
+ for isotope in HEAVY_ISOTOPES:
50
+ register_attribute(name=f"delta_{isotope}")(make_delta_factory(isotope))
@@ -21,7 +21,9 @@ derived attributes providing amounts of light isotopes in water (1H and 16O)
21
21
  moles_16O = .5 * (moles_2H + moles_3H) + moles_H2O
22
22
  """
23
23
 
24
- from PySDM.attributes.impl import DerivedAttribute
24
+ from PySDM.attributes.impl import DerivedAttribute, register_attribute
25
+ from PySDM.attributes.impl.mole_amount import make_mole_amount_factory
26
+ from PySDM.dynamics.isotopic_fractionation import HEAVY_ISOTOPES
25
27
 
26
28
 
27
29
  class Helper(DerivedAttribute):
@@ -39,6 +41,7 @@ class Helper(DerivedAttribute):
39
41
  self.data += (mult, "*", attr.data)
40
42
 
41
43
 
44
+ @register_attribute()
42
45
  class MolesLightWater(Helper):
43
46
  def __init__(self, builder):
44
47
  const = builder.formulae.constants
@@ -64,6 +67,7 @@ class MolesLightWater(Helper):
64
67
  )
65
68
 
66
69
 
70
+ @register_attribute(name="moles_1H")
67
71
  class Moles1H(Helper):
68
72
  def __init__(self, builder):
69
73
  super().__init__(
@@ -79,6 +83,7 @@ class Moles1H(Helper):
79
83
  )
80
84
 
81
85
 
86
+ @register_attribute(name="moles_16O")
82
87
  class Moles16O(Helper):
83
88
  def __init__(self, builder):
84
89
  super().__init__(
@@ -90,3 +95,7 @@ class Moles16O(Helper):
90
95
  builder.get_attribute("moles light water"): 1.0,
91
96
  },
92
97
  )
98
+
99
+
100
+ for isotope in HEAVY_ISOTOPES:
101
+ register_attribute(name=f"moles_{isotope}")(make_mole_amount_factory(isotope))
@@ -2,6 +2,6 @@
2
2
  attributes used for tracking cell-particle mapping in multi-dimensional simulations
3
3
  """
4
4
 
5
- from .cell_id import CellID
5
+ from .cell_id import CellId
6
6
  from .cell_origin import CellOrigin
7
7
  from .position_in_cell import PositionInCell
@@ -2,10 +2,11 @@
2
2
  grid cell id attribute
3
3
  """
4
4
 
5
- from PySDM.attributes.impl.cell_attribute import CellAttribute
5
+ from PySDM.attributes.impl import CellAttribute, register_attribute
6
6
 
7
7
 
8
- class CellID(CellAttribute):
8
+ @register_attribute()
9
+ class CellId(CellAttribute):
9
10
  def __init__(self, builder):
10
11
  super().__init__(builder, name="cell id", dtype=int)
11
12
 
@@ -2,9 +2,10 @@
2
2
  grid-cell origin (multi-dimensional)
3
3
  """
4
4
 
5
- from PySDM.attributes.impl.cell_attribute import CellAttribute
5
+ from PySDM.attributes.impl import CellAttribute, register_attribute
6
6
 
7
7
 
8
+ @register_attribute()
8
9
  class CellOrigin(CellAttribute):
9
10
  def __init__(self, builder):
10
11
  super().__init__(
@@ -2,9 +2,10 @@
2
2
  position-within-cell attribute (multi-dimensional, values normalised to one)
3
3
  """
4
4
 
5
- from PySDM.attributes.impl.cell_attribute import CellAttribute
5
+ from PySDM.attributes.impl import CellAttribute, register_attribute
6
6
 
7
7
 
8
+ @register_attribute()
8
9
  class PositionInCell(CellAttribute):
9
10
  def __init__(self, builder):
10
11
  super().__init__(
@@ -9,8 +9,9 @@ from .dry_radius import DryRadius
9
9
  from .dry_volume import DryVolume
10
10
  from .equilibrium_supersaturation import EquilibriumSupersaturation
11
11
  from .heat import Heat
12
- from .mass import WaterMass
13
- from .multiplicities import Multiplicities
12
+ from .hygroscopicity import Kappa, KappaTimesDryVolume
13
+ from .water_mass import WaterMass
14
+ from .multiplicity import Multiplicity
14
15
  from .radius import Radius, SquareRootOfRadius
15
16
  from .relative_fall_velocity import RelativeFallMomentum, RelativeFallVelocity
16
17
  from .temperature import Temperature
@@ -2,9 +2,10 @@
2
2
  particle wet radius (calculated from the volume)
3
3
  """
4
4
 
5
- from PySDM.attributes.impl.derived_attribute import DerivedAttribute
5
+ from PySDM.attributes.impl import DerivedAttribute, register_attribute
6
6
 
7
7
 
8
+ @register_attribute()
8
9
  class Area(DerivedAttribute):
9
10
  def __init__(self, builder):
10
11
  self.volume = builder.get_attribute("volume")
@@ -2,9 +2,10 @@
2
2
  kappa-Koehler critical supersaturation calculated for actual environment temperature
3
3
  """
4
4
 
5
- from PySDM.attributes.impl.derived_attribute import DerivedAttribute
5
+ from PySDM.attributes.impl import DerivedAttribute, register_attribute
6
6
 
7
7
 
8
+ @register_attribute()
8
9
  class CriticalSupersaturation(DerivedAttribute):
9
10
  def __init__(self, builder):
10
11
  self.v_crit = builder.get_attribute("critical volume")
@@ -2,9 +2,10 @@
2
2
  critical wet volume (kappa-Koehler, computed using actual temperature)
3
3
  """
4
4
 
5
- from PySDM.attributes.impl.derived_attribute import DerivedAttribute
5
+ from PySDM.attributes.impl import DerivedAttribute, register_attribute
6
6
 
7
7
 
8
+ @register_attribute()
8
9
  class CriticalVolume(DerivedAttribute):
9
10
  def __init__(self, builder):
10
11
  self.cell_id = builder.get_attribute("cell id")
@@ -29,6 +30,7 @@ class CriticalVolume(DerivedAttribute):
29
30
  )
30
31
 
31
32
 
33
+ @register_attribute()
32
34
  class WetToCriticalVolumeRatio(DerivedAttribute):
33
35
  def __init__(self, builder):
34
36
  self.critical_volume = builder.get_attribute("critical volume")
@@ -2,9 +2,10 @@
2
2
  particle dry radius computed from dry volume
3
3
  """
4
4
 
5
- from PySDM.attributes.impl.derived_attribute import DerivedAttribute
5
+ from PySDM.attributes.impl import DerivedAttribute, register_attribute
6
6
 
7
7
 
8
+ @register_attribute()
8
9
  class DryRadius(DerivedAttribute):
9
10
  def __init__(self, builder):
10
11
  self.volume_dry = builder.get_attribute("dry volume")
@@ -2,10 +2,16 @@
2
2
  particle dry volume (subject to evolution due to collisions or aqueous chemistry)
3
3
  """
4
4
 
5
- from PySDM.attributes.impl.derived_attribute import DerivedAttribute
6
- from PySDM.attributes.impl.extensive_attribute import ExtensiveAttribute
5
+ from PySDM.attributes.impl import (
6
+ DerivedAttribute,
7
+ ExtensiveAttribute,
8
+ register_attribute,
9
+ )
7
10
 
8
11
 
12
+ @register_attribute(
13
+ name="dry volume", variant=lambda dynamics, _: "AqueousChemistry" in dynamics
14
+ )
9
15
  class DryVolumeDynamic(DerivedAttribute):
10
16
  def __init__(self, builder):
11
17
  self.particulator = builder.particulator
@@ -20,16 +26,29 @@ class DryVolumeDynamic(DerivedAttribute):
20
26
  self.data *= dynamic.dry_molar_mass / dynamic.dry_rho
21
27
 
22
28
 
29
+ @register_attribute(
30
+ name="dry volume", variant=lambda dynamics, _: "AqueousChemistry" not in dynamics
31
+ )
23
32
  class DryVolume(ExtensiveAttribute):
24
33
  def __init__(self, builder):
25
34
  super().__init__(builder, name="dry volume")
26
35
 
27
36
 
37
+ @register_attribute(
38
+ name="dry volume organic",
39
+ variant=lambda _, formulae: formulae.surface_tension.__name__ != "Constant",
40
+ dummy_default=True,
41
+ )
28
42
  class DryVolumeOrganic(ExtensiveAttribute):
29
43
  def __init__(self, builder):
30
44
  super().__init__(builder, name="dry volume organic")
31
45
 
32
46
 
47
+ @register_attribute(
48
+ name="dry volume organic fraction",
49
+ variant=lambda _, formulae: formulae.surface_tension.__name__ != "Constant",
50
+ dummy_default=True,
51
+ )
33
52
  class OrganicFraction(DerivedAttribute):
34
53
  def __init__(self, builder):
35
54
  self.volume_dry_org = builder.get_attribute("dry volume organic")
@@ -2,9 +2,10 @@
2
2
  kappa-Koehler equilibrium supersaturation calculated for actual environment temperature
3
3
  """
4
4
 
5
- from PySDM.attributes.impl.derived_attribute import DerivedAttribute
5
+ from PySDM.attributes.impl import DerivedAttribute, register_attribute
6
6
 
7
7
 
8
+ @register_attribute()
8
9
  class EquilibriumSupersaturation(DerivedAttribute):
9
10
  def __init__(self, builder):
10
11
  self.r_wet = builder.get_attribute("radius")
@@ -2,9 +2,10 @@
2
2
  particle heat content (test-use only for now, exemplifying intensive/extensive attribute logic)
3
3
  """
4
4
 
5
- from PySDM.attributes.impl.extensive_attribute import ExtensiveAttribute
5
+ from PySDM.attributes.impl import ExtensiveAttribute, register_attribute
6
6
 
7
7
 
8
+ @register_attribute()
8
9
  class Heat(ExtensiveAttribute):
9
10
  def __init__(self, builder):
10
11
  super().__init__(builder, name="heat")
@@ -4,15 +4,16 @@ kappa-Koehler hygroscopicity representation:
4
4
  and the derived `PySDM.attributes.physics.hygroscopicity.Kappa` attribute
5
5
  """
6
6
 
7
- from ..impl.derived_attribute import DerivedAttribute
8
- from ..impl.extensive_attribute import ExtensiveAttribute
7
+ from ..impl import DerivedAttribute, ExtensiveAttribute, register_attribute
9
8
 
10
9
 
10
+ @register_attribute()
11
11
  class KappaTimesDryVolume(ExtensiveAttribute):
12
12
  def __init__(self, builder):
13
13
  super().__init__(builder, name="kappa times dry volume")
14
14
 
15
15
 
16
+ @register_attribute()
16
17
  class Kappa(DerivedAttribute):
17
18
  def __init__(self, builder):
18
19
  self.kappa_times_dry_volume = builder.get_attribute("kappa times dry volume")
@@ -4,13 +4,13 @@ super-particle multiplicity (aka weighting factor) - the number of real-world pa
4
4
  """
5
5
 
6
6
  import numpy as np
7
+ from PySDM.attributes.impl import BaseAttribute, register_attribute
7
8
 
8
- from PySDM.attributes.impl.base_attribute import BaseAttribute
9
9
 
10
-
11
- class Multiplicities(BaseAttribute):
10
+ @register_attribute()
11
+ class Multiplicity(BaseAttribute):
12
12
  TYPE = np.int64
13
13
  MAX_VALUE = np.iinfo(TYPE).max
14
14
 
15
15
  def __init__(self, builder):
16
- super().__init__(builder, name="multiplicity", dtype=Multiplicities.TYPE)
16
+ super().__init__(builder, name="multiplicity", dtype=Multiplicity.TYPE)
@@ -2,9 +2,10 @@
2
2
  particle wet radius (calculated from the volume)
3
3
  """
4
4
 
5
- from PySDM.attributes.impl.derived_attribute import DerivedAttribute
5
+ from PySDM.attributes.impl import DerivedAttribute, register_attribute
6
6
 
7
7
 
8
+ @register_attribute()
8
9
  class Radius(DerivedAttribute):
9
10
  def __init__(self, builder):
10
11
  self.volume = builder.get_attribute("volume")
@@ -16,6 +17,7 @@ class Radius(DerivedAttribute):
16
17
  self.data **= 1 / 3
17
18
 
18
19
 
20
+ @register_attribute()
19
21
  class SquareRootOfRadius(DerivedAttribute):
20
22
  def __init__(self, builder):
21
23
  self.radius = builder.get_attribute("radius")
@@ -2,15 +2,30 @@
2
2
  Attributes for tracking droplet velocity
3
3
  """
4
4
 
5
- from PySDM.attributes.impl.derived_attribute import DerivedAttribute
6
- from PySDM.attributes.impl.extensive_attribute import ExtensiveAttribute
5
+ from PySDM.attributes.impl import (
6
+ DerivedAttribute,
7
+ ExtensiveAttribute,
8
+ register_attribute,
9
+ )
7
10
 
8
11
 
12
+ @register_attribute(
13
+ name="relative fall momentum",
14
+ variant=lambda dynamics, _: "RelaxedVelocity" in dynamics,
15
+ dummy_default=True,
16
+ warn=True,
17
+ # note: could eventually make an attribute that calculates momentum
18
+ # from terminal velocity instead when no RelaxedVelocity dynamic is present
19
+ )
9
20
  class RelativeFallMomentum(ExtensiveAttribute):
10
21
  def __init__(self, builder):
11
22
  super().__init__(builder, name="relative fall momentum", dtype=float)
12
23
 
13
24
 
25
+ @register_attribute(
26
+ name="relative fall velocity",
27
+ variant=lambda dynamics, _: "RelaxedVelocity" in dynamics,
28
+ )
14
29
  class RelativeFallVelocity(DerivedAttribute):
15
30
  def __init__(self, builder):
16
31
  self.momentum = builder.get_attribute("relative fall momentum")
@@ -2,9 +2,14 @@
2
2
  particle Reynolds number
3
3
  """
4
4
 
5
- from ..impl.derived_attribute import DerivedAttribute
5
+ from ..impl import DerivedAttribute, register_attribute
6
6
 
7
7
 
8
+ @register_attribute(
9
+ name="Reynolds number",
10
+ variant=lambda _, formulae: formulae.ventilation.__name__ != "Neglect",
11
+ dummy_default=True,
12
+ )
8
13
  class ReynoldsNumber(DerivedAttribute):
9
14
  def __init__(self, builder):
10
15
  self.radius = builder.get_attribute("radius")
@@ -2,9 +2,10 @@
2
2
  particle temperature (test-use only for now, exemplifying intensive/extensive attribute logic)
3
3
  """
4
4
 
5
- from PySDM.attributes.impl.intensive_attribute import IntensiveAttribute
5
+ from PySDM.attributes.impl import IntensiveAttribute, register_attribute
6
6
 
7
7
 
8
+ @register_attribute()
8
9
  class Temperature(IntensiveAttribute):
9
10
  def __init__(self, builder):
10
11
  super().__init__(builder, base="heat", name="temperature")
@@ -2,9 +2,14 @@
2
2
  particle terminal velocity (used for collision probability and particle displacement)
3
3
  """
4
4
 
5
- from PySDM.attributes.impl.derived_attribute import DerivedAttribute
5
+ from PySDM.attributes.impl import DerivedAttribute, register_attribute
6
6
 
7
7
 
8
+ @register_attribute(
9
+ name="relative fall velocity",
10
+ variant=lambda dynamics, _: "RelaxedVelocity" not in dynamics,
11
+ )
12
+ @register_attribute()
8
13
  class TerminalVelocity(DerivedAttribute):
9
14
  def __init__(self, builder):
10
15
  self.radius = builder.get_attribute("radius")
@@ -4,9 +4,10 @@ in simulation involving mixed-phase clouds, positive values correspond to
4
4
  liquid water and negative values to ice
5
5
  """
6
6
 
7
- from PySDM.attributes.impl import DerivedAttribute
7
+ from PySDM.attributes.impl import DerivedAttribute, register_attribute
8
8
 
9
9
 
10
+ @register_attribute()
10
11
  class Volume(DerivedAttribute):
11
12
  def __init__(self, builder):
12
13
  self.water_mass = builder.get_attribute("water mass")