modulo-vki 2.1.0__py3-none-any.whl → 2.1.1__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.
- {modulo_vki-2.1.0.dist-info → modulo_vki-2.1.1.dist-info}/METADATA +64 -135
- {modulo_vki-2.1.0.dist-info → modulo_vki-2.1.1.dist-info}/RECORD +5 -5
- {modulo_vki-2.1.0.dist-info → modulo_vki-2.1.1.dist-info}/WHEEL +0 -0
- {modulo_vki-2.1.0.dist-info → modulo_vki-2.1.1.dist-info}/licenses/LICENSE +0 -0
- {modulo_vki-2.1.0.dist-info → modulo_vki-2.1.1.dist-info}/top_level.txt +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: modulo_vki
|
|
3
|
-
Version: 2.1.
|
|
3
|
+
Version: 2.1.1
|
|
4
4
|
Summary: MODULO (MODal mULtiscale pOd) is a software developed at the von Karman Institute to perform Multiscale Modal Analysis of numerical and experimental data.
|
|
5
5
|
Home-page: https://github.com/mendezVKI/MODULO/tree/master/modulo_python_package/
|
|
6
6
|
Author: ['R. Poletti', 'L. Schena', 'D. Ninni', 'M. A. Mendez']
|
|
@@ -36,7 +36,7 @@ Dynamic: summary
|
|
|
36
36
|
|
|
37
37
|
|
|
38
38
|
MODULO: a python toolbox for data-driven modal decomposition
|
|
39
|
-
|
|
39
|
+
------------------------------------------------------------
|
|
40
40
|
|
|
41
41
|
.. image:: https://readthedocs.org/projects/modulo/badge/?version=latest
|
|
42
42
|
:target: https://modulo.readthedocs.io/en/latest/?badge=latest
|
|
@@ -49,12 +49,11 @@ MODULO: a python toolbox for data-driven modal decomposition
|
|
|
49
49
|
|
|
50
50
|
.. |PyPI| image:: https://img.shields.io/pypi/v/modulo_vki
|
|
51
51
|
:target: https://pypi.org/project/modulo_vki/
|
|
52
|
-
|
|
53
|
-
..
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
</div>
|
|
52
|
+
|
|
53
|
+
.. image:: https://modulo.readthedocs.io/en/latest/_images/modulo_logo.png
|
|
54
|
+
:alt: MODULO logo
|
|
55
|
+
:width: 500px
|
|
56
|
+
:align: center
|
|
58
57
|
|
|
59
58
|
|
|
60
59
|
**MODULO** is a modal decomposition package developed at the von Karman Institute for Fluid Dynamics (VKI). It offers a wide range of decomposition techniques, allowing users to choose the most appropriate method for their specific problem. MODULO can efficiently handle large datasets natively, thanks to a memory-saving feature that partitions the data and processes the decomposition in chunks (ninni2020modulo). Moreover, it supports non-uniform meshes through a weighted inner product formulation. Currently, MODULO heavily relies on NumPy routines and does not offer additional parallel computing capabilities beyond those naturally provided by NumPy.
|
|
@@ -70,65 +69,47 @@ These are available at the `MODULO YouTube channel <https://www.youtube.com/@mod
|
|
|
70
69
|
Modal decompositions
|
|
71
70
|
--------------------
|
|
72
71
|
Modal decompositions aim to describe the data as a linear combination of *modes*, obtained by projecting the data
|
|
73
|
-
onto a suitable set of basis.
|
|
74
|
-
coordinates, respectively, the modal decomposition can be written as:
|
|
75
|
-
|
|
76
|
-
$D(x_i, t_k) = \\phi(x_i) \\Sigma \\psi(t_k)^T$
|
|
77
|
-
|
|
78
|
-
where $\\phi(x_i)$ is the spatial basis, $\\psi(t_k)$ is the temporal basis, and $\\Sigma$ is the modal coefficients.
|
|
79
|
-
Different decompositions employ different bases, such as prescribed Fourier basis ($\\psi_\\mathcal{F}$) for
|
|
72
|
+
onto a suitable set of basis. Different decompositions employ different bases, such as prescribed Fourier basis for
|
|
80
73
|
the Discrete Fourier Transform (DFT), or data-driven basis, i.e. tailored on the dataset at hand,
|
|
81
|
-
for the Proper Orthogonal Decomposition (POD).
|
|
82
|
-
|
|
83
|
-
We refer to (mendez2022statistical, mendez2022generalizedmultiscalemodalanalysis, Mendez_2023) for an introduction to the topic.
|
|
84
|
-
|
|
74
|
+
for the Proper Orthogonal Decomposition (POD). We refer to `Mendez (2022) <https://doi.org/10.48550/arXiv.2201.03847>`_, `Mendez (2023) <https://doi.org/10.1017/9781108896214.013>`_, and `Mendez et al. (2023) <https://arxiv.org/abs/2208.07746>`_, for an introduction to the topic.
|
|
85
75
|
MODULO currently features the following decompositions:
|
|
86
76
|
|
|
87
|
-
- Discrete Fourier Transform (DFT) (
|
|
88
|
-
- Proper Orthogonal Decomposition (POD) (
|
|
89
|
-
- Multi-Scale Proper Orthogonal Decomposition (mPOD) (
|
|
90
|
-
- Dynamic Mode Decomposition (DMD) (
|
|
91
|
-
- Spectral Proper Orthogonal Decomposition (SPOD) (
|
|
77
|
+
- Discrete Fourier Transform (DFT) (`Briggs et al. (1997) <https://epubs.siam.org/doi/book/10.1137/1.9781611971514>`_)
|
|
78
|
+
- Proper Orthogonal Decomposition (POD) (`Sirovich et al. (1987) <https://www.ams.org/journals/qam/1987-45-03/S0033-569X-1987-0910464-1/S0033-569X-1987-0910464-1.pdf>`_ , `Berkooz et al. (1993) <https://doi.org/10.1146/annurev.fl.25.010193.002543>`_)
|
|
79
|
+
- Multi-Scale Proper Orthogonal Decomposition (mPOD) (`Mendez et al. (2019) <https://arxiv.org/abs/1804.09646>`_)
|
|
80
|
+
- Dynamic Mode Decomposition (DMD) (`Schmid (2010) <https://doi.org/10.1017/S0022112010001217>`_)
|
|
81
|
+
- Spectral Proper Orthogonal Decomposition (SPOD) (`Sieber et al. (2016) <https://doi.org/10.48550/arXiv.1508.04642>`_, `Towne et al. (2018) <https://doi.org/10.48550/arXiv.1708.04393>`_),
|
|
92
82
|
note that the two are different formulations, and both are available in MODULO.
|
|
93
|
-
- Kernel Proper Orthogonal Decomposition (KPOD) (
|
|
83
|
+
- Kernel Proper Orthogonal Decomposition (KPOD) (`Mika et al. (1998) <https://proceedings.neurips.cc/paper_files/paper/1998/file/226d1f15ecd35f784d2a20c3ecf56d7f-Paper.pdf>`_)
|
|
94
84
|
|
|
95
85
|
We remind the curious reader to the respective references for a detailed description of each decomposition, and to the
|
|
96
86
|
documentation for a practical guide on how to use them in MODULO.
|
|
97
87
|
|
|
98
|
-
|
|
99
88
|
Release Notes
|
|
100
89
|
-------------
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
1. **Faster EIG/SVD algorithms**, using powerful randomized svd solvers from scikit_learn
|
|
104
|
-
(see `here <https://scikit-learn.org/stable/modules/generated/sklearn.decomposition.TruncatedSVD.html>`_
|
|
105
|
-
and `here <https://scikit-learn.org/stable/modules/generated/sklearn.utils.extmath.randomized_svd.html>`_.)
|
|
106
|
-
It is now possible to select various options as "eig_solver" and "svd_solver",
|
|
107
|
-
offering different trade-offs in terms of accuracy vs computational time.
|
|
108
|
-
|
|
109
|
-
2. **Computation the POD directly via SVD**, using any of the four "svd_solver" options.
|
|
110
|
-
This is generally faster but requires more memory.
|
|
111
|
-
|
|
112
|
-
3. **Faster subscale estimators for the mPOD:** the previous version used the rank of the correlation matrix in each scale to define the number of modes to be computed in each portion of the splitting vector before assembling the full basis. This is computationally very demanding. This estimation has been replaced by a
|
|
113
|
-
frequency-based threshold (i.e. based on the frequency bins within each portion) since one can show that the
|
|
114
|
-
frequency-based estimator is always more "conservative" than the rank-based estimator.
|
|
90
|
+
This version of MODULO includes the following updates:
|
|
115
91
|
|
|
116
|
-
|
|
117
|
-
Then, if the memory saving option was active, the matrix was partitioned and stored locally to free the RAM before computing the
|
|
118
|
-
correlation matrix (see `this tutorial by D. Ninni <https://www.youtube.com/watch?v=LclxO1WTuao>`_).
|
|
119
|
-
In the new version, it is possible to initialize a modulo object *without* the matrix D (see exercise 5 in the examples).
|
|
120
|
-
Instead, one can create the partitions without loading the matrix D.
|
|
92
|
+
1. **mPOD bug fix:** the previous version of mPOD was skipping the last scale of the frequency splitting vector. Fixed in this version.
|
|
121
93
|
|
|
122
|
-
|
|
94
|
+
2. **SPOD parallelisation:** CSD - SPOD can now be parallelized, leveraging `joblib`. The user needs just to pass the argument `n_processes` for the computation to be
|
|
95
|
+
split between different workers.
|
|
96
|
+
|
|
97
|
+
3. **Simplified decomposition interface:** the interface of the decomposition methods has been simplified to improve user experience.
|
|
123
98
|
|
|
124
|
-
|
|
125
|
-
|
|
99
|
+
4. **Enhanced POD selection:** the POD function has been redesigned, allowing users to easily choose between different POD methods.
|
|
100
|
+
|
|
101
|
+
5. **Improved computational efficiency:** the code of the decomposition functions has been optimised, resulting in reduced computation time. mPOD now includes two additional optional arguments to enable faster filtering and to avoid recomputing the Sigmas after QR polishing.
|
|
102
|
+
|
|
103
|
+
6. **Extended documentation:** the documentation has been significantly enriched, now including theoretical foundations for all the supported modal decomposition techniques.
|
|
126
104
|
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
It can be used both with and without the memory-saving option.
|
|
105
|
+
|
|
106
|
+
Documentation
|
|
107
|
+
-------------
|
|
131
108
|
|
|
109
|
+
The documentation of MODULO is available `here <https://lorenzoschena.github.io/MODULO/intro.html>`_. It
|
|
110
|
+
contains a comprehensive guide on how to install and use the package, as well as a detailed description of the
|
|
111
|
+
decompositions required inputs and outputs. A `list of YouTube videos <https://www.youtube.com/@modulompod5682>`_
|
|
112
|
+
is also available to guide the introduce the user to modal decomposition and MODULO.
|
|
132
113
|
|
|
133
114
|
Installation
|
|
134
115
|
-------------
|
|
@@ -162,14 +143,6 @@ or, if you have pip installed in your environment,
|
|
|
162
143
|
$ pip install .
|
|
163
144
|
|
|
164
145
|
|
|
165
|
-
Documentation
|
|
166
|
-
-------------
|
|
167
|
-
|
|
168
|
-
The documentation of MODULO is available `here <https://modulo.readthedocs.io/en/latest/intro.html>`_. It
|
|
169
|
-
contains a comprehensive guide on how to install and use the package, as well as a detailed description of the
|
|
170
|
-
decompositions required inputs and outputs. A `list of YouTube videos <https://www.youtube.com/@modulompod5682>`_
|
|
171
|
-
is also available to guide the introduce the user to modal decomposition and MODULO.
|
|
172
|
-
|
|
173
146
|
Example
|
|
174
147
|
-------------
|
|
175
148
|
|
|
@@ -242,60 +215,7 @@ you can use the weighted inner product formulation (refer to `examples/ex_05_non
|
|
|
242
215
|
|
|
243
216
|
# Compute the POD decomposition
|
|
244
217
|
phi_POD, Sigma_POD, psi_POD = m.POD()
|
|
245
|
-
|
|
246
|
-
Computational Cost Estimates
|
|
247
|
-
----------------------------
|
|
248
|
-
We here provide a rough estimate of the amoung of RAM required to decompose a test case with and without the memory saving option.
|
|
249
|
-
This option reduces the memory usage at the cost of increasing the computational time (see https://www.youtube.com/watch?v=LclxO1WTuao)
|
|
250
|
-
|
|
251
|
-
Given a dataset $D \\in \\mathbb{R}^{n_s \\times n_t}$, we consider the computation of $n_r$ modes. When using the memory saving option, we refer to
|
|
252
|
-
$n_t' = n_t / n_p$ as the number of time steps in each partition, and to $n_s' = n_s / n_p$ as the number of spatial points in each partition.
|
|
253
|
-
|
|
254
|
-
.. list-table::
|
|
255
|
-
:header-rows: 1
|
|
256
|
-
|
|
257
|
-
* -
|
|
258
|
-
- Phase 1: $D$
|
|
259
|
-
- Phase 2: $K$
|
|
260
|
-
- Phase 3: $\\Psi$
|
|
261
|
-
- Phase 4: $\\Phi$
|
|
262
|
-
* - No Memory Saving
|
|
263
|
-
- $n_s \\times n_t$
|
|
264
|
-
- $n_t^2$
|
|
265
|
-
- $n_t^2 + n_t \\times n_r$
|
|
266
|
-
- $n_s \\times n_t + n_t \\times n_r + n_s \\times n_r$
|
|
267
|
-
* - Memory Saving
|
|
268
|
-
- /
|
|
269
|
-
- $n_s \\times n_t' + n_t' \\times n_t'$
|
|
270
|
-
- $n_t^2 + n_t \\times n_r$
|
|
271
|
-
- $n_s \\times n_t' + n_s' \\times n_t + n_s \\times n_r$
|
|
272
|
-
|
|
273
|
-
If the memory saving option is active, the memory requirements are mostly linked to the storage of the correlation matrix $K$ in Phase 2.
|
|
274
|
-
This table can be used to estimate if a dataset is too large for the available RAM, recalling that data in single precision requires 4 bytes (or 32 bits).
|
|
275
|
-
|
|
276
|
-
For example, for a dataset with n_s=1 000 000 and n_t = 5000 the following table estimates the RAM required in the two cases, considering n_b=10 partitions in the case of memory saving:
|
|
277
|
-
|
|
278
|
-
.. list-table::
|
|
279
|
-
:header-rows: 1
|
|
280
|
-
|
|
281
|
-
* -
|
|
282
|
-
- Phase 1: $D$
|
|
283
|
-
- Phase 2: $K$
|
|
284
|
-
- Phase 3: $\\Psi$
|
|
285
|
-
- Phase 4: $\\Phi$
|
|
286
|
-
* - No Memory Saving
|
|
287
|
-
- 18.6 GB
|
|
288
|
-
- 0.093 GB
|
|
289
|
-
- ≈0.112 GB
|
|
290
|
-
- ≈22.39 GB
|
|
291
|
-
* - Memory Saving
|
|
292
|
-
- /
|
|
293
|
-
- ≈1.86 GB
|
|
294
|
-
- ≈ 0.0026 GB
|
|
295
|
-
- ≈ 4.20 GB
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
218
|
+
|
|
299
219
|
Community guidelines
|
|
300
220
|
---------------------
|
|
301
221
|
|
|
@@ -326,31 +246,36 @@ Ask for help
|
|
|
326
246
|
If you have troubles using MODULO, or you need help with a specific decomposition, please open an issue on the MODULO GitHub repository.
|
|
327
247
|
|
|
328
248
|
Citation
|
|
329
|
-
|
|
330
|
-
If you use MODULO in your research, please cite it as follows:
|
|
331
|
-
|
|
332
|
-
``Poletti, R., Schena, L., Ninni, D. Mendez, M. A. (2024). MODULO: A Python toolbox for data-driven modal decomposition. Journal of Open Source Software, 9(102), 6753, https://doi.org/10.21105/joss.06753
|
|
333
|
-
|
|
249
|
+
--------
|
|
334
250
|
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
@article{Poletti2024,
|
|
338
|
-
doi = {10.21105/joss.06753},
|
|
339
|
-
url = {https://doi.org/10.21105/joss.06753},
|
|
340
|
-
year = {2024},
|
|
341
|
-
publisher = {The Open Journal},
|
|
342
|
-
volume = {9},
|
|
343
|
-
number = {102},
|
|
344
|
-
pages = {6753},
|
|
345
|
-
author = {R. Poletti and L. Schena and D. Ninni and M. A. Mendez},
|
|
346
|
-
title = {MODULO: A Python toolbox for data-driven modal decomposition},
|
|
347
|
-
journal = {Journal of Open Source Software} }
|
|
251
|
+
If you use MODULO in your research, please cite it as follows:
|
|
348
252
|
|
|
253
|
+
Poletti, R., Schena, L., Ninni, D., Mendez, M. A. (2024).
|
|
254
|
+
*MODULO: A Python toolbox for data-driven modal decomposition*.
|
|
255
|
+
Journal of Open Source Software, 9(102), 6753. https://doi.org/10.21105/joss.06753
|
|
256
|
+
|
|
257
|
+
.. code-block:: text
|
|
258
|
+
|
|
259
|
+
@article{Poletti2024,
|
|
260
|
+
doi = {10.21105/joss.06753},
|
|
261
|
+
url = {https://doi.org/10.21105/joss.06753},
|
|
262
|
+
year = {2024},
|
|
263
|
+
publisher = {The Open Journal},
|
|
264
|
+
volume = {9},
|
|
265
|
+
number = {102},
|
|
266
|
+
pages = {6753},
|
|
267
|
+
author = {R. Poletti and L. Schena and D. Ninni and M. A. Mendez},
|
|
268
|
+
title = {MODULO: A Python toolbox for data-driven modal decomposition},
|
|
269
|
+
journal = {Journal of Open Source Software}
|
|
270
|
+
}
|
|
271
|
+
|
|
349
272
|
and
|
|
350
273
|
|
|
351
|
-
|
|
274
|
+
Ninni, D., & Mendez, M. A. (2020).
|
|
275
|
+
*MODULO: A software for Multiscale Proper Orthogonal Decomposition of data*.
|
|
276
|
+
SoftwareX, 12, 100622. https://doi.org/10.1016/j.softx.2020.100622
|
|
352
277
|
|
|
353
|
-
.. code-block:: text
|
|
278
|
+
.. code-block:: text
|
|
354
279
|
|
|
355
280
|
@article{ninni2020modulo,
|
|
356
281
|
title={MODULO: A software for Multiscale Proper Orthogonal Decomposition of data},
|
|
@@ -363,7 +288,6 @@ and
|
|
|
363
288
|
}
|
|
364
289
|
|
|
365
290
|
|
|
366
|
-
|
|
367
291
|
References
|
|
368
292
|
----------
|
|
369
293
|
|
|
@@ -395,3 +319,8 @@ There are also decomposition-specific projects, some of which are listed below:
|
|
|
395
319
|
- Ichinaga, Andreuzzi, Demo, Tezzele, Lapo, Rozza, Brunton, Kutz. PyDMD: A Python package for robust dynamic mode decomposition. arXiv preprint, 2024.
|
|
396
320
|
- Rogowski, Marcin, et al. "Unlocking massively parallel spectral proper orthogonal decompositions in the PySPOD package." Computer Physics Communications 302 (2024): 109246.
|
|
397
321
|
|
|
322
|
+
|
|
323
|
+
|
|
324
|
+
|
|
325
|
+
|
|
326
|
+
|
|
@@ -19,8 +19,8 @@ modulo_vki/utils/_plots.py,sha256=m43t08cVq-TY0BW0YPqT71hN-54hBphIYKZEn8Kw16E,14
|
|
|
19
19
|
modulo_vki/utils/_utils.py,sha256=WFD7nwjSzVHpevVwTEvMdjAmcbeqwoXT9M48tIIniJw,14355
|
|
20
20
|
modulo_vki/utils/others.py,sha256=26ES5EmsLhwkvcXTwNhDMkblGrxoWepX5c9TXeLTRWg,17336
|
|
21
21
|
modulo_vki/utils/read_db.py,sha256=lJFauxJxS0_mYoxrbn-43UqZjOkr-qb9f6RTUq4IxZU,15149
|
|
22
|
-
modulo_vki-2.1.
|
|
23
|
-
modulo_vki-2.1.
|
|
24
|
-
modulo_vki-2.1.
|
|
25
|
-
modulo_vki-2.1.
|
|
26
|
-
modulo_vki-2.1.
|
|
22
|
+
modulo_vki-2.1.1.dist-info/licenses/LICENSE,sha256=5TivriXFErrYrJgBq3M72kHNHqtSiCft3xESM1zHc0k,1091
|
|
23
|
+
modulo_vki-2.1.1.dist-info/METADATA,sha256=MGJRX_sOUGm4_18AnPXzz3lT8PKi7KxPhbHZ9yiQEVQ,14933
|
|
24
|
+
modulo_vki-2.1.1.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
25
|
+
modulo_vki-2.1.1.dist-info/top_level.txt,sha256=4PA4AmafKU6M7us7gvt_Q976Khx3qjNUEThRRM5zxeA,11
|
|
26
|
+
modulo_vki-2.1.1.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|