PySDM-examples 2.90__py3-none-any.whl → 2.92__py3-none-any.whl

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.
@@ -7,7 +7,7 @@ from PySDM_examples.Shima_et_al_2009.spectrum_plotter import SpectrumPlotter
7
7
 
8
8
 
9
9
  def main(plot: bool = True, save: str = None):
10
- n_sds = [13, 15, 17]
10
+ n_sds = [13, 15, 17] if "CI" not in os.environ else [13, 15]
11
11
  dts = [10, 5, 1, "adaptive"]
12
12
  iters = 10
13
13
  base_time = None
@@ -109,7 +109,7 @@ def main(save=None, show_plot=True):
109
109
  rtols = [1e-7, 1e-11]
110
110
  schemes = ["CPU", "SciPy"]
111
111
  setups_num = len(setups)
112
- input_data = data(80, rtols, schemes, setups_num)
112
+ input_data = data(80 if "CI" not in os.environ else 20, rtols, schemes, setups_num)
113
113
  plot(input_data, rtols, schemes, setups_num, show_plot, save)
114
114
 
115
115
 
@@ -15,7 +15,7 @@ def full_params(params):
15
15
 
16
16
  def print_collection_efficiency_portrait(params):
17
17
  size = 2 * 5.236
18
- plt.figure(num=1, figsize=(size / 2, size))
18
+ plt.figure(figsize=(size / 2, size))
19
19
  points = 200
20
20
  Y_c = np.zeros(points)
21
21
  x_values = np.linspace(0, 1, points)
@@ -8,7 +8,7 @@ from PySDM_examples.Shima_et_al_2009.spectrum_plotter import (
8
8
  class SpectrumPlotter(SuperSpectrumPlotter):
9
9
  def __init__(self, settings, title=None, grid=True, legend=False):
10
10
  size = 2 * 5.236
11
- pyplot.figure(num=1, figsize=(size, size * 0.54))
11
+ pyplot.figure(figsize=(size, size * 0.54))
12
12
  pyplot.xlabel("particle radius [µm]")
13
13
  pyplot.ylabel("dm/dlnr [g/m^3/(unit dr/r)]")
14
14
  super().__init__(settings, title=title, grid=grid, legend=legend, log_base=2)
@@ -2,7 +2,4 @@
2
2
  """
3
3
  Box-model coalescence-breakup performance benchmark from
4
4
  [Bulenok 2023 MSc thesis](https://www.ap.uj.edu.pl/diplomas/166879)
5
-
6
- performance_comparison_Srivastava_Setup.ipynb:
7
- .. include:: ./performance_comparison_Srivastava_Setup.ipynb.badges.md
8
5
  """
@@ -0,0 +1,225 @@
1
+ import subprocess
2
+ import os
3
+
4
+ from datetime import datetime
5
+ import numba # pylint: disable=unused-import
6
+
7
+ from PySDM_examples.Bulenok_2023_MasterThesis.utils import (
8
+ go_benchmark,
9
+ process_results,
10
+ plot_processed_results,
11
+ write_to_file,
12
+ )
13
+ from PySDM_examples.Bulenok_2023_MasterThesis.setups import (
14
+ setup_coalescence_only_sim,
15
+ setup_breakup_only_sim,
16
+ setup_coalescence_breakup_sim,
17
+ )
18
+
19
+ from PySDM.backends import GPU, CPU
20
+ from PySDM.physics import si
21
+
22
+
23
+ def main(plot: bool = True, save: str = None):
24
+
25
+ TIMESTAMP = str(datetime.now().strftime("%Y-%d-%m_%Hh-%Mm-%Ss"))
26
+
27
+ SIM_RUN_FNAME = "env_name_" + TIMESTAMP
28
+
29
+ assert not os.path.isfile(SIM_RUN_FNAME)
30
+
31
+ cmd = [
32
+ "bash",
33
+ "-c",
34
+ # pylint: disable=no-member
35
+ f"echo NUMBA_DEFAULT_NUM_THREADS: {numba.config.NUMBA_DEFAULT_NUM_THREADS}"
36
+ + f">> {SIM_RUN_FNAME}",
37
+ ]
38
+ subprocess.run(cmd, check=False)
39
+ subprocess.run(
40
+ [ # pylint: disable=no-member
41
+ "bash",
42
+ "-c",
43
+ f"echo NUMBA_NUM_THREADS: {numba.config.NUMBA_NUM_THREADS} >> {SIM_RUN_FNAME}",
44
+ ],
45
+ check=False,
46
+ )
47
+ subprocess.run(["bash", "-c", f"lscpu >> {SIM_RUN_FNAME}"], check=False)
48
+ subprocess.run(["bash", "-c", f"nvidia-smi >> {SIM_RUN_FNAME}"], check=False)
49
+ subprocess.run(["bash", "-c", f"nvidia-smi -L >> {SIM_RUN_FNAME}"], check=False)
50
+ subprocess.run(["bash", "-c", f"cat /proc/cpuinfo >> {SIM_RUN_FNAME}"], check=False)
51
+
52
+ CI = "CI" in os.environ
53
+
54
+ exponents = [3, 5, 8, 10, 12, 14, 16, 18, 20, 22, 24] if not CI else [3, 5]
55
+ n_sds = [2**i for i in exponents]
56
+
57
+ numba_n_threads = [1, 2, 4, 5, 6, 8, 10] if not CI else [1, 2]
58
+
59
+ n_realisations = 3 if not CI else 2
60
+ seeds = list(range(n_realisations))
61
+
62
+ n_steps_short = 100 if not CI else 3
63
+ n_steps_full = 2048 if not CI else 3
64
+
65
+ # # Benchmark regular setup (without scaling)
66
+
67
+ # ### Coalescence-only
68
+
69
+ res_coalescence_only = go_benchmark(
70
+ setup_coalescence_only_sim,
71
+ n_sds,
72
+ n_steps_short,
73
+ seeds,
74
+ numba_n_threads=numba_n_threads,
75
+ double_precision=True,
76
+ sim_run_filename=SIM_RUN_FNAME + "-coalescence",
77
+ backends=[CPU, GPU],
78
+ )
79
+ coalescence_only_processed = process_results(res_coalescence_only)
80
+ filename = f"{SIM_RUN_FNAME}-results-coalescence-double-n_steps{n_steps_short}"
81
+ if plot:
82
+ plot_processed_results(
83
+ coalescence_only_processed,
84
+ plot_title=f"coalescence-only (n_steps: {n_steps_short})",
85
+ plot_filename=filename + ".svg",
86
+ )
87
+ if save is not None:
88
+ write_to_file(filename=filename + ".txt", d=coalescence_only_processed)
89
+
90
+ # ### Breakup-only
91
+
92
+ res_breakup_only = go_benchmark(
93
+ setup_breakup_only_sim,
94
+ n_sds,
95
+ n_steps_short,
96
+ seeds,
97
+ numba_n_threads=numba_n_threads,
98
+ double_precision=True,
99
+ sim_run_filename=SIM_RUN_FNAME + "-breakup",
100
+ backends=[CPU, GPU],
101
+ )
102
+ breakup_only_processed = process_results(res_breakup_only)
103
+ filename = f"{SIM_RUN_FNAME}-results-breakup-double-n_steps{n_steps_short}"
104
+ if plot:
105
+ plot_processed_results(
106
+ breakup_only_processed,
107
+ plot_title=f"breakup-only (n_steps: {n_steps_short})",
108
+ plot_filename=filename + ".svg",
109
+ )
110
+ if save is not None:
111
+ write_to_file(filename=filename + ".txt", d=breakup_only_processed)
112
+
113
+ # ### Coalescence and Breakup
114
+
115
+ res_coal_breakup = go_benchmark(
116
+ setup_coalescence_breakup_sim,
117
+ n_sds,
118
+ n_steps_full,
119
+ seeds,
120
+ numba_n_threads=numba_n_threads,
121
+ double_precision=True,
122
+ sim_run_filename=SIM_RUN_FNAME + "-coal-break",
123
+ backends=[CPU, GPU],
124
+ )
125
+ coal_breakup_processed = process_results(res_coal_breakup)
126
+ filename = f"{SIM_RUN_FNAME}-results-coal_with_breakup-double-n_steps{n_steps_full}"
127
+ if plot:
128
+ plot_processed_results(
129
+ coal_breakup_processed,
130
+ plot_title=f"coalescence+breakup (n_steps: {n_steps_full})",
131
+ plot_filename=filename + ".svg",
132
+ )
133
+ if save is not None:
134
+ write_to_file(filename=filename + ".txt", d=coal_breakup_processed)
135
+
136
+ # # Benchmark setup with scaling
137
+
138
+ def total_number_from_n_sd(n_sd):
139
+ return n_sd * 1e8
140
+
141
+ def dv_from_n_sd(n_sd):
142
+ return n_sd * (0.125 * si.m**3)
143
+
144
+ # ### Coalescence-only
145
+
146
+ res_coalescence_only_scaled = go_benchmark(
147
+ setup_coalescence_only_sim,
148
+ n_sds,
149
+ n_steps_short,
150
+ seeds,
151
+ numba_n_threads=numba_n_threads,
152
+ double_precision=True,
153
+ sim_run_filename=SIM_RUN_FNAME + "-coalescence-scaled",
154
+ total_number=total_number_from_n_sd,
155
+ dv=dv_from_n_sd,
156
+ backends=[CPU, GPU],
157
+ )
158
+ coalescence_only_processed_scaled = process_results(res_coalescence_only_scaled)
159
+ filename = (
160
+ f"{SIM_RUN_FNAME}-results-scaled-coalescence-double-n_steps{n_steps_short}"
161
+ )
162
+ if plot:
163
+ plot_processed_results(
164
+ coalescence_only_processed_scaled,
165
+ plot_title=f"coalescence-only with scaling (n_steps: {n_steps_short})",
166
+ plot_filename=filename + ".svg",
167
+ )
168
+ if save is not None:
169
+ write_to_file(filename=filename + ".txt", d=coalescence_only_processed_scaled)
170
+
171
+ # ### Breakup-only
172
+
173
+ res_breakup_only_scaled = go_benchmark(
174
+ setup_breakup_only_sim,
175
+ n_sds,
176
+ n_steps_short,
177
+ seeds,
178
+ numba_n_threads=numba_n_threads,
179
+ double_precision=True,
180
+ sim_run_filename=SIM_RUN_FNAME + "-breakup-scaled",
181
+ total_number=total_number_from_n_sd,
182
+ dv=dv_from_n_sd,
183
+ backends=[CPU, GPU],
184
+ )
185
+ breakup_only_processed_scaled = process_results(res_breakup_only_scaled)
186
+ filename = f"{SIM_RUN_FNAME}-results-scaled-breakup-double-n_steps{n_steps_short}"
187
+ if plot:
188
+ plot_processed_results(
189
+ breakup_only_processed_scaled,
190
+ plot_title=f"breakup-only with scaling (n_steps: {n_steps_short})",
191
+ plot_filename=filename + ".svg",
192
+ )
193
+ if save is not None:
194
+ write_to_file(filename=filename + ".txt", d=breakup_only_processed_scaled)
195
+
196
+ # ### Coalescence and Breakup
197
+
198
+ res_coal_breakup_scaled = go_benchmark(
199
+ setup_coalescence_breakup_sim,
200
+ n_sds,
201
+ n_steps_full,
202
+ seeds,
203
+ numba_n_threads=numba_n_threads,
204
+ double_precision=True,
205
+ sim_run_filename=SIM_RUN_FNAME + "-coal-break-scaled",
206
+ total_number=total_number_from_n_sd,
207
+ dv=dv_from_n_sd,
208
+ backends=[CPU, GPU],
209
+ )
210
+ coal_breakup_processed_scaled = process_results(res_coal_breakup_scaled)
211
+ filename = (
212
+ f"{SIM_RUN_FNAME}-results-scaled-coal_with_breakup-double-n_steps{n_steps_full}"
213
+ )
214
+ if plot:
215
+ plot_processed_results(
216
+ coal_breakup_processed_scaled,
217
+ plot_title=f"coalescence+breakup with scaling (n_steps: {n_steps_full})",
218
+ plot_filename=filename + ".svg",
219
+ )
220
+ if save is not None:
221
+ write_to_file(filename=filename + ".txt", d=coal_breakup_processed_scaled)
222
+
223
+
224
+ if __name__ == "__main__":
225
+ main(plot="CI" not in os.environ, save=".")
@@ -6,7 +6,6 @@ import time
6
6
  import numba
7
7
  import numpy as np
8
8
  from matplotlib import pyplot
9
- from open_atmos_jupyter_utils import show_plot
10
9
 
11
10
  from PySDM.backends import CPU, GPU
12
11
 
@@ -208,11 +207,11 @@ class PlottingHelpers:
208
207
 
209
208
  def plot_processed_results(
210
209
  processed_d,
211
- show=True,
210
+ *,
212
211
  plot_label="",
213
212
  plot_title=None,
214
213
  metric="min",
215
- plot_filename=None,
214
+ plot_filename,
216
215
  markers=None,
217
216
  colors=None,
218
217
  ):
@@ -257,33 +256,27 @@ def plot_processed_results(
257
256
  if plot_title:
258
257
  pyplot.title(plot_title)
259
258
 
260
- if show:
261
- if plot_filename:
262
- show_plot(filename=plot_filename)
263
- else:
264
- pyplot.show()
259
+ pyplot.savefig(plot_filename)
265
260
 
266
261
 
267
262
  def plot_processed_on_same_plot(coal_d, break_d, coal_break_d):
268
- plot_processed_results(coal_d, plot_label="-c", show=False)
269
- plot_processed_results(break_d, plot_label="-b", show=False)
270
- plot_processed_results(coal_break_d, plot_label="-cb", show=False)
271
-
272
- show_plot()
263
+ filename = "same_plot.svg"
264
+ plot_processed_results(coal_d, plot_label="-c", plot_filename=filename)
265
+ plot_processed_results(break_d, plot_label="-b", plot_filename=filename)
266
+ plot_processed_results(coal_break_d, plot_label="-cb", plot_filename=filename)
273
267
 
274
268
 
275
269
  def plot_time_per_step(
276
270
  processed_d,
277
271
  n_sd,
278
- show=True,
272
+ *,
279
273
  plot_label="",
280
274
  plot_title=None,
281
275
  metric="mean",
282
- plot_filename=None,
276
+ plot_filename,
283
277
  step_from_to=None,
284
278
  ):
285
279
  backends = PlottingHelpers.get_sorted_backend_list(processed_d)
286
-
287
280
  markers = PlottingHelpers.get_backend_markers(backends)
288
281
 
289
282
  for backend in backends:
@@ -305,8 +298,4 @@ def plot_time_per_step(
305
298
  if plot_title:
306
299
  pyplot.title(plot_title + f"(n_sd: {n_sd})")
307
300
 
308
- if show:
309
- if plot_filename:
310
- show_plot(filename=plot_filename)
311
- else:
312
- pyplot.show()
301
+ pyplot.savefig(plot_filename)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: PySDM-examples
3
- Version: 2.90
3
+ Version: 2.92
4
4
  Summary: PySDM usage examples reproducing results from literature and depicting how to use PySDM from Python Jupyter notebooks
5
5
  Home-page: https://github.com/open-atmos/PySDM
6
6
  Author: https://github.com/open-atmos/PySDM/graphs/contributors
@@ -29,23 +29,24 @@ PySDM_examples/Arabas_et_al_2023/make_particulator.py,sha256=e_rg8PbIHHW5N_meton
29
29
  PySDM_examples/Arabas_et_al_2023/plots.py,sha256=YaF3LTOPX2k6d5ZG_FKPOgZPcSjM7oVMdnSFzK6-DQM,5035
30
30
  PySDM_examples/Arabas_et_al_2023/run_simulation.py,sha256=Yq4EjdvOr1nYrvK8b1LZtqtbvf0bg6Mm2CWg5zsDqi4,1281
31
31
  PySDM_examples/Bartman_2020_MasterThesis/__init__.py,sha256=la2o79L6WLPueZ3EI5ThGtNRuSkXvKQwJJmvrNhhHa8,136
32
- PySDM_examples/Bartman_2020_MasterThesis/fig_4_adaptive_sdm.py,sha256=bbXDRKH7ekiwEd8dgNRcavlWzoQGfZvXKL_qOT6TtWU,2337
33
- PySDM_examples/Bartman_2020_MasterThesis/fig_5_SCIPY_VS_ADAPTIVE.py,sha256=CJ4oXcQe8LGxBoD352dyYQICTWkxPvfUVAhBVf5Uxls,4192
32
+ PySDM_examples/Bartman_2020_MasterThesis/fig_4_adaptive_sdm.py,sha256=I66ufyfKnLRz50UDfbwf6wiWm2q8QX1FdaghKGFvo1E,2377
33
+ PySDM_examples/Bartman_2020_MasterThesis/fig_5_SCIPY_VS_ADAPTIVE.py,sha256=EXbNToSiE6tHgl1IQj39eTlgeTxahBOMEYS8W3_mEX8,4226
34
34
  PySDM_examples/Bartman_et_al_2021/__init__.py,sha256=lcmJiQq7vkdwnVLGYjITgw6zv9A61KZW750OqJxVQTw,255
35
35
  PySDM_examples/Bartman_et_al_2021/label.py,sha256=sHaZcODS8lrKxWha9Zd-VALHHqFTr_PsUrMPRunTxzA,523
36
36
  PySDM_examples/Berry_1967/__init__.py,sha256=V_JEnFtNsts2m6K7MYiXiq1nnCfRVp74-IxDP8NPJ1g,248
37
37
  PySDM_examples/Berry_1967/example.py,sha256=r0WlZ0R4Y4RiDIsLlq3RG_R9YSvCSrizWGjg3mh0WgQ,2506
38
- PySDM_examples/Berry_1967/example_fig_6.py,sha256=GlxzRg0GM2rCJDUPwIFVb47MkkkL2n3OH1RbZQFdE9Q,3108
38
+ PySDM_examples/Berry_1967/example_fig_6.py,sha256=z9CzfCIlsB-OFfsS2fPZ5eE3C_Clx0CCRwD11c42JC8,3101
39
39
  PySDM_examples/Berry_1967/settings.py,sha256=9VmVS4zBTGQff-xBdxb9AjUB9iNNm-qMznURH0ESfwE,1617
40
- PySDM_examples/Berry_1967/spectrum_plotter.py,sha256=WEEaryYBDydStKyx6H915LVTxeFFKj0pmpdVotktjI4,1023
40
+ PySDM_examples/Berry_1967/spectrum_plotter.py,sha256=uwSZJQ2G3zuxml3on9IMCiWIldv7gIzWOqNw75hLFmI,1016
41
41
  PySDM_examples/Bieli_et_al_2022/__init__.py,sha256=23wE81iNNkeNmr3PRTs0WC29gEfTDAZCNv7x0BuI2IU,205
42
42
  PySDM_examples/Bieli_et_al_2022/settings.py,sha256=qJxoGChzqta-c_O2yv4E3wEM4yoECa2dyhKmE8AGrtI,1679
43
43
  PySDM_examples/Bieli_et_al_2022/simulation.py,sha256=4L0AxnpGjfWqIUgVdZdH1PgXzrx4yXEeJ8_WaWsksy8,1324
44
44
  PySDM_examples/Bolin_1958/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
45
45
  PySDM_examples/Bolot_et_al_2013/__init__.py,sha256=wFQIlJaBVXaB5ji97EYjoFIv8fQFBXcPQYp2UDW0uEA,187
46
- PySDM_examples/Bulenok_2023_MasterThesis/__init__.py,sha256=gwWrz77ShGpXh0P1IKYin-U6vndeJtFkmYrRgdNLa0k,283
46
+ PySDM_examples/Bulenok_2023_MasterThesis/__init__.py,sha256=GPHWvxMGulWIaSH7CQlESd2jNTRJeMcXRqjzzJ-AAf8,164
47
+ PySDM_examples/Bulenok_2023_MasterThesis/performance_comparison_Srivastava_Setup.py,sha256=uPWdzK-9gYIr3LxMj-AIFB7PP4-zru3VnfJX2iSA4uo,7272
47
48
  PySDM_examples/Bulenok_2023_MasterThesis/setups.py,sha256=UVTp0oBMblcR46J29aylfZ6g6-8jlhXCb90ODdcfaSE,3424
48
- PySDM_examples/Bulenok_2023_MasterThesis/utils.py,sha256=Y0OXKd8D2vJ0vAstl_f68St39MRY89sMqaK1ASo-h1w,8019
49
+ PySDM_examples/Bulenok_2023_MasterThesis/utils.py,sha256=T4UfPCPAaSal8paE4i1PTB4YSMEccqHMq-Z6ky9mABI,7813
49
50
  PySDM_examples/Ervens_and_Feingold_2012/__init__.py,sha256=F9Q-77npT6TyIK1vdNS4RPeBb8g4mFBUYz5qg4pj2wo,159
50
51
  PySDM_examples/Ervens_and_Feingold_2012/settings.py,sha256=DtkcDqkcO2WAkH63P1RQ19cejn0oAamdsZefN3y0Gy8,442
51
52
  PySDM_examples/Gedzelman_and_Arnold_1994/__init__.py,sha256=P721EPYBc_zDk2Jb2pPGvTaT76uGzvX6vbpG93hReMw,303
@@ -149,7 +150,7 @@ PySDM_examples/utils/read_vtk_1d.py,sha256=7_3sagEbX_FxqFuGkFWdwQapd1-9echFghU8T
149
150
  PySDM_examples/utils/widgets/__init__.py,sha256=U67WZ2YDcXSocMraI7pzcMxCfcxzXNqehDzoG6ogsh4,519
150
151
  PySDM_examples/utils/widgets/freezer.py,sha256=tFlZWShXUzA2X0cxgeE44N1g9kD33q3KQWZBqkgBP0A,407
151
152
  PySDM_examples/utils/widgets/progbar_updater.py,sha256=3uhG32QkAiSM3dTV7DoROJl7fAUNA6ZsJEIKSg3tdmk,267
152
- PySDM_examples-2.90.dist-info/METADATA,sha256=A0Y6pxN69T3nAJl9dEdK3TzW8wZ9KH_qP_vBhfVULQ0,12075
153
- PySDM_examples-2.90.dist-info/WHEEL,sha256=PZUExdf71Ui_so67QXpySuHtCi3-J3wvF4ORK6k_S8U,91
154
- PySDM_examples-2.90.dist-info/top_level.txt,sha256=axw2inuuYKPWkQhzBYtkZJTPDlo5LrpGLOA0iSAf9v0,15
155
- PySDM_examples-2.90.dist-info/RECORD,,
153
+ PySDM_examples-2.92.dist-info/METADATA,sha256=qHFFSBlrAgblRwA2Y1blgh3FwvTI8ndBguvLbC80LMc,12075
154
+ PySDM_examples-2.92.dist-info/WHEEL,sha256=PZUExdf71Ui_so67QXpySuHtCi3-J3wvF4ORK6k_S8U,91
155
+ PySDM_examples-2.92.dist-info/top_level.txt,sha256=axw2inuuYKPWkQhzBYtkZJTPDlo5LrpGLOA0iSAf9v0,15
156
+ PySDM_examples-2.92.dist-info/RECORD,,