PySDM-examples 2.91__py3-none-any.whl → 2.93__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.
@@ -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.91
3
+ Version: 2.93
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
@@ -43,9 +43,10 @@ PySDM_examples/Bieli_et_al_2022/settings.py,sha256=qJxoGChzqta-c_O2yv4E3wEM4yoEC
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.91.dist-info/METADATA,sha256=Q9ecoMOzinWG88eiZNVqhG6xdSEftvDGTvbZ5noExFM,12075
153
- PySDM_examples-2.91.dist-info/WHEEL,sha256=PZUExdf71Ui_so67QXpySuHtCi3-J3wvF4ORK6k_S8U,91
154
- PySDM_examples-2.91.dist-info/top_level.txt,sha256=axw2inuuYKPWkQhzBYtkZJTPDlo5LrpGLOA0iSAf9v0,15
155
- PySDM_examples-2.91.dist-info/RECORD,,
153
+ PySDM_examples-2.93.dist-info/METADATA,sha256=BPeWDgz87uj448RWN9hN1j0M6JyAx0nRe_UmZ8t5g6E,12075
154
+ PySDM_examples-2.93.dist-info/WHEEL,sha256=PZUExdf71Ui_so67QXpySuHtCi3-J3wvF4ORK6k_S8U,91
155
+ PySDM_examples-2.93.dist-info/top_level.txt,sha256=axw2inuuYKPWkQhzBYtkZJTPDlo5LrpGLOA0iSAf9v0,15
156
+ PySDM_examples-2.93.dist-info/RECORD,,