modulo-vki 2.0.7__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/__init__.py +0 -22
- modulo_vki/core/_dft.py +92 -21
- modulo_vki/core/_dmd_s.py +48 -39
- modulo_vki/core/_k_matrix.py +145 -17
- modulo_vki/core/_mpod_time.py +46 -25
- modulo_vki/core/_pod_space.py +3 -2
- modulo_vki/core/_pod_time.py +2 -1
- modulo_vki/core/spatial_structures.py +367 -0
- modulo_vki/core/temporal_structures.py +241 -0
- modulo_vki/core/utils.py +474 -0
- modulo_vki/modulo.py +751 -682
- modulo_vki/modulo_old.py +1368 -0
- modulo_vki/utils/_utils.py +19 -2
- modulo_vki/utils/others.py +18 -9
- {modulo_vki-2.0.7.dist-info → modulo_vki-2.1.1.dist-info}/METADATA +104 -82
- modulo_vki-2.1.1.dist-info/RECORD +26 -0
- {modulo_vki-2.0.7.dist-info → modulo_vki-2.1.1.dist-info}/WHEEL +1 -1
- modulo_vki-2.0.7.dist-info/RECORD +0 -22
- {modulo_vki-2.0.7.dist-info → modulo_vki-2.1.1.dist-info/licenses}/LICENSE +0 -0
- {modulo_vki-2.0.7.dist-info → modulo_vki-2.1.1.dist-info}/top_level.txt +0 -0
modulo_vki/utils/_utils.py
CHANGED
|
@@ -25,11 +25,11 @@ def Bound_EXT(S, Ex, boundaries):
|
|
|
25
25
|
# Ex=int((Nf-1)/2) # Extension on each size
|
|
26
26
|
size_Ext = 2 * Ex + len(S) # Compute the size of the extended signal
|
|
27
27
|
S_extend = np.zeros((int(size_Ext))) # Initialize extended signal
|
|
28
|
-
S_extend[Ex:int((size_Ext - Ex))] = S
|
|
28
|
+
S_extend[Ex:int((size_Ext - Ex))] = S # Assign the Signal on the zeroes
|
|
29
29
|
|
|
30
30
|
if boundaries == "reflect":
|
|
31
31
|
LEFT = np.flip(S[0:Ex]) # Prepare the reflection on the left
|
|
32
|
-
RIGHT = np.flip(S[len(S) - Ex:len(S)]) # Prepare the
|
|
32
|
+
RIGHT = np.flip(S[len(S) - Ex:len(S)]) # Prepare the reflection on the right
|
|
33
33
|
S_extend[0:Ex] = LEFT
|
|
34
34
|
S_extend[len(S_extend) - Ex:len(S_extend)] = RIGHT
|
|
35
35
|
elif boundaries == "nearest":
|
|
@@ -90,6 +90,23 @@ def conv_m(K, h, Ex, boundaries):
|
|
|
90
90
|
# K_F=K_F1+K_F2
|
|
91
91
|
return K_F2
|
|
92
92
|
|
|
93
|
+
def conv_m_2D(K, h, Ex, boundaries):
|
|
94
|
+
|
|
95
|
+
# Extended K
|
|
96
|
+
K_ext = np.pad(K, Ex, mode=boundaries)
|
|
97
|
+
|
|
98
|
+
# Filtering matrix
|
|
99
|
+
h_mat = np.outer(np.atleast_2d(h).T, np.atleast_2d(h))
|
|
100
|
+
|
|
101
|
+
# Filtering
|
|
102
|
+
K_filt = signal.fftconvolve(K_ext, h_mat, mode='valid')
|
|
103
|
+
|
|
104
|
+
# Interior K
|
|
105
|
+
Ex1 = int((len(K_filt) - len(K)) / 2)
|
|
106
|
+
K_F2 = K_filt[Ex1:(len(K_filt) - Ex1), Ex1:(len(K_filt) - Ex1)]
|
|
107
|
+
|
|
108
|
+
return K_F2
|
|
109
|
+
|
|
93
110
|
|
|
94
111
|
def _loop_gemm(a, b, c=None, chunksize=100):
|
|
95
112
|
size_i = a.shape[0]
|
modulo_vki/utils/others.py
CHANGED
|
@@ -201,7 +201,7 @@ def Plot_2D_CFD_Cyl(Xg,Yg,U,V,k=10,CL=16,Name='', verbose=False):
|
|
|
201
201
|
V_g=V[:,k].reshape(n_y,n_x).T
|
|
202
202
|
# Prepare the plot
|
|
203
203
|
fig, ax = plt.subplots(figsize=(6, 3)) # This creates the figure
|
|
204
|
-
plt.contourf(Xg,Yg,np.sqrt(U_g**2+V_g**2),30)
|
|
204
|
+
contour = plt.contourf(Xg,Yg,np.sqrt(U_g**2+V_g**2),30)
|
|
205
205
|
# plt.quiver(Xg,Yg,U_g,V_g,scale=10000)
|
|
206
206
|
ax.set_aspect('equal') # Set equal aspect ratio
|
|
207
207
|
ax.set_xlabel('$x[mm]$',fontsize=13)
|
|
@@ -229,7 +229,7 @@ def Plot_2D_CFD_Cyl(Xg,Yg,U,V,k=10,CL=16,Name='', verbose=False):
|
|
|
229
229
|
return
|
|
230
230
|
|
|
231
231
|
|
|
232
|
-
def Animation_2D_CFD_Cyl(Giff_NAME,D,Xg,Yg,In,Fin,Step):
|
|
232
|
+
def Animation_2D_CFD_Cyl(Giff_NAME,D,Xg,Yg,In,Fin,Step,verbose=False):
|
|
233
233
|
"""
|
|
234
234
|
The gif file is created from the provided data snapshot
|
|
235
235
|
"""
|
|
@@ -243,17 +243,22 @@ def Animation_2D_CFD_Cyl(Giff_NAME,D,Xg,Yg,In,Fin,Step):
|
|
|
243
243
|
Fol_Out = 'Gif_Images_temporary'
|
|
244
244
|
if not os.path.exists(Fol_Out):
|
|
245
245
|
os.mkdir(Fol_Out)
|
|
246
|
-
# Loop to produce the Gifs
|
|
246
|
+
# Loop to produce the Gifs
|
|
247
|
+
if not verbose:
|
|
248
|
+
print('Exporting images...')
|
|
247
249
|
for k in range(1,n_t,Step):
|
|
248
250
|
NameOUT = Fol_Out + os.sep + 'Im%03d' % (k) + '.png'
|
|
249
|
-
Plot_2D_CFD_Cyl(Xg,Yg,U,V,k=k+In,CL=16,Name=NameOUT)
|
|
251
|
+
Plot_2D_CFD_Cyl(Xg,Yg,U,V,k=k+In,CL=16,Name=NameOUT,verbose=verbose)
|
|
250
252
|
|
|
251
253
|
import imageio # This used for the animation
|
|
252
254
|
images = []
|
|
253
255
|
|
|
256
|
+
if not verbose:
|
|
257
|
+
print('Preparing images...')
|
|
254
258
|
for k in range(1,n_t,Step):
|
|
255
|
-
|
|
256
|
-
|
|
259
|
+
if verbose:
|
|
260
|
+
MEX = 'Preparing Im ' + str(k)
|
|
261
|
+
print(MEX)
|
|
257
262
|
NameOUT = Fol_Out + os.sep + 'Im%03d' % (k) + '.png'
|
|
258
263
|
images.append(imageio.imread(NameOUT))
|
|
259
264
|
|
|
@@ -266,7 +271,7 @@ def Animation_2D_CFD_Cyl(Giff_NAME,D,Xg,Yg,In,Fin,Step):
|
|
|
266
271
|
|
|
267
272
|
|
|
268
273
|
|
|
269
|
-
def Plot_Field_TEXT_Cylinder(File,Name_Mesh,Name_FIG):
|
|
274
|
+
def Plot_Field_TEXT_Cylinder(File,Name_Mesh,Name_FIG, show=False):
|
|
270
275
|
"""
|
|
271
276
|
This function plots the vector field from the TR-PIV in Exercise 4.
|
|
272
277
|
|
|
@@ -314,8 +319,12 @@ def Plot_Field_TEXT_Cylinder(File,Name_Mesh,Name_FIG):
|
|
|
314
319
|
circle = plt.Circle((0,0),2.5,fill=True,color='r',edgecolor='k',alpha=0.5)
|
|
315
320
|
plt.gcf().gca().add_artist(circle)
|
|
316
321
|
plt.tight_layout()
|
|
317
|
-
plt.savefig(Name_FIG, dpi=200)
|
|
318
|
-
|
|
322
|
+
plt.savefig(Name_FIG, dpi=200)
|
|
323
|
+
|
|
324
|
+
if show:
|
|
325
|
+
plt.show()
|
|
326
|
+
|
|
327
|
+
plt.close()
|
|
319
328
|
print(Name_FIG+' printed')
|
|
320
329
|
return n_s, Xg, Yg, Vxg, Vyg, X_S, Y_S
|
|
321
330
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
Metadata-Version: 2.
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
2
|
Name: modulo_vki
|
|
3
|
-
Version: 2.
|
|
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']
|
|
@@ -21,27 +21,42 @@ Requires-Dist: ipython
|
|
|
21
21
|
Requires-Dist: ipython-genutils
|
|
22
22
|
Requires-Dist: ipywidgets
|
|
23
23
|
Requires-Dist: matplotlib
|
|
24
|
+
Dynamic: author
|
|
25
|
+
Dynamic: author-email
|
|
26
|
+
Dynamic: classifier
|
|
27
|
+
Dynamic: description
|
|
28
|
+
Dynamic: description-content-type
|
|
29
|
+
Dynamic: home-page
|
|
30
|
+
Dynamic: license
|
|
31
|
+
Dynamic: license-file
|
|
32
|
+
Dynamic: requires-dist
|
|
33
|
+
Dynamic: requires-python
|
|
34
|
+
Dynamic: summary
|
|
24
35
|
|
|
25
36
|
|
|
26
37
|
|
|
27
38
|
MODULO: a python toolbox for data-driven modal decomposition
|
|
28
|
-
|
|
39
|
+
------------------------------------------------------------
|
|
29
40
|
|
|
30
41
|
.. image:: https://readthedocs.org/projects/modulo/badge/?version=latest
|
|
31
42
|
:target: https://modulo.readthedocs.io/en/latest/?badge=latest
|
|
32
43
|
:alt: Documentation Status
|
|
33
44
|
|
|
34
|
-
|
|
45
|
+
|DOI| |PyPI|
|
|
35
46
|
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
</div>
|
|
47
|
+
.. |DOI| image:: https://zenodo.org/badge/DOI/10.5281/zenodo.13939519.svg
|
|
48
|
+
:target: https://doi.org/10.5281/zenodo.13939519
|
|
39
49
|
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
50
|
+
.. |PyPI| image:: https://img.shields.io/pypi/v/modulo_vki
|
|
51
|
+
:target: https://pypi.org/project/modulo_vki/
|
|
52
|
+
|
|
53
|
+
.. image:: https://modulo.readthedocs.io/en/latest/_images/modulo_logo.png
|
|
54
|
+
:alt: MODULO logo
|
|
55
|
+
:width: 500px
|
|
56
|
+
:align: center
|
|
57
|
+
|
|
58
|
+
|
|
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.
|
|
45
60
|
|
|
46
61
|
While the discontinued MATLAB version of MODULO (ninni2020modulo) is accessible in the “Old_Matlab_Implementation” branch,
|
|
47
62
|
it is no longer maintained. The latest decomposition techniques are exclusively available in the current Python version.
|
|
@@ -49,75 +64,52 @@ it is no longer maintained. The latest decomposition techniques are exclusively
|
|
|
49
64
|
As a part of the MODULO project, we provide a series of lectures on data-driven modal decomposition, and its applications.
|
|
50
65
|
These are available at the `MODULO YouTube channel <https://www.youtube.com/@modulompod5682>`_.
|
|
51
66
|
|
|
52
|
-
|
|
53
67
|
.. contents:: Table of contents
|
|
54
68
|
|
|
55
69
|
Modal decompositions
|
|
56
70
|
--------------------
|
|
57
71
|
Modal decompositions aim to describe the data as a linear combination of *modes*, obtained by projecting the data
|
|
58
|
-
onto a suitable set of basis.
|
|
59
|
-
coordinates, respectively, the modal decomposition can be written as:
|
|
60
|
-
|
|
61
|
-
$D(x_i, t_k) = \\phi(x_i) \\Sigma \\psi(t_k)^T$
|
|
62
|
-
|
|
63
|
-
where $\\phi(x_i)$ is the spatial basis, $\\psi(t_k)$ is the temporal basis, and $\\Sigma$ is the modal coefficients.
|
|
64
|
-
Different decompositions employ different basis, 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
|
|
65
73
|
the Discrete Fourier Transform (DFT), or data-driven basis, i.e. tailored on the dataset at hand,
|
|
66
|
-
for the Proper Orthogonal Decomposition (POD).
|
|
67
|
-
|
|
68
|
-
We refer to (mendez2022statistical, mendez2022generalizedmultiscalemodalanalysis, Mendez_2023) for an introduction to the topic.
|
|
69
|
-
|
|
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.
|
|
70
75
|
MODULO currently features the following decompositions:
|
|
71
|
-
|
|
72
|
-
-
|
|
73
|
-
-
|
|
74
|
-
-
|
|
75
|
-
-
|
|
76
|
-
|
|
77
|
-
|
|
76
|
+
|
|
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>`_),
|
|
82
|
+
note that the two are different formulations, and both are available in MODULO.
|
|
83
|
+
- Kernel Proper Orthogonal Decomposition (KPOD) (`Mika et al. (1998) <https://proceedings.neurips.cc/paper_files/paper/1998/file/226d1f15ecd35f784d2a20c3ecf56d7f-Paper.pdf>`_)
|
|
78
84
|
|
|
79
85
|
We remind the curious reader to the respective references for a detailed description of each decomposition, and to the
|
|
80
86
|
documentation for a practical guide on how to use them in MODULO.
|
|
81
87
|
|
|
82
|
-
|
|
83
88
|
Release Notes
|
|
84
89
|
-------------
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
1. **Faster EIG/SVD algorithms**, using powerful randomized svd solvers from scikit_learn
|
|
88
|
-
(see `here<https://scikit-learn.org/stable/modules/generated/sklearn.decomposition.TruncatedSVD.html>`_
|
|
89
|
-
and `here <https://scikit-learn.org/stable/modules/generated/sklearn.utils.extmath.randomized_svd.html>`_.)
|
|
90
|
-
It is now possible to select various options as "eig_solver" and "svd_solver",
|
|
91
|
-
offering different trade-offs in terms of accuracy vs computational time.
|
|
90
|
+
This version of MODULO includes the following updates:
|
|
92
91
|
|
|
93
|
-
|
|
94
|
-
This is generally faster but requires more memory.
|
|
92
|
+
1. **mPOD bug fix:** the previous version of mPOD was skipping the last scale of the frequency splitting vector. Fixed in this version.
|
|
95
93
|
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
frequency-based estimator is always more "conservative" than the rank-based estimator.
|
|
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.
|
|
101
98
|
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
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.
|
|
107
104
|
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
and the one from (Towne et al 2018).
|
|
112
|
-
|
|
113
|
-
3. **Implementation of a kernel version of the POD**, in which the correlation matrix is replaced by a kernel matrix.
|
|
114
|
-
This is described in Lecture 15 of the course `Hands on Machine Learning for Fluid dynamics 2023 <https://www.vki.ac.be/index.php/events-ls/events/eventdetail/552/-/online-on-site-hands-on-machine-learning-for-fluid-dynamics-2023>`_.
|
|
115
|
-
We refer also to: `https://arxiv.org/abs/2208.07746`.
|
|
116
|
-
|
|
117
|
-
1. **Implementation of a formulation for non-uniform meshes**, using a weighted matrix for all the relevant inner products.
|
|
118
|
-
This is currently available only for POD and mPOD but allows for handling data produced from CFD simulation without resampling on a uniform grid (see exercise 4).
|
|
119
|
-
It can be used both with and without the memory-saving option.
|
|
105
|
+
|
|
106
|
+
Documentation
|
|
107
|
+
-------------
|
|
120
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.
|
|
121
113
|
|
|
122
114
|
Installation
|
|
123
115
|
-------------
|
|
@@ -151,14 +143,6 @@ or, if you have pip installed in your environment,
|
|
|
151
143
|
$ pip install .
|
|
152
144
|
|
|
153
145
|
|
|
154
|
-
Documentation
|
|
155
|
-
-------------
|
|
156
|
-
|
|
157
|
-
The documentation of MODULO is available `here <https://modulo.readthedocs.io/en/latest/intro.html>`_. It
|
|
158
|
-
contains a comprehensive guide on how to install and use the package, as well as a detailed description of the
|
|
159
|
-
decompositions required inputs and outputs. A `list of YouTube videos<https://www.youtube.com/@modulompod5682>`_
|
|
160
|
-
is also available to guide the introduce the user to modal decomposition and MODULO.
|
|
161
|
-
|
|
162
146
|
Example
|
|
163
147
|
-------------
|
|
164
148
|
|
|
@@ -179,7 +163,7 @@ The following example illustrates how to decompose a data set (D) using the POD
|
|
|
179
163
|
m = ModuloVKI(D)
|
|
180
164
|
|
|
181
165
|
# Compute the POD decomposition
|
|
182
|
-
phi_POD, Sigma_POD, psi_POD = m.
|
|
166
|
+
phi_POD, Sigma_POD, psi_POD = m.POD()
|
|
183
167
|
|
|
184
168
|
which returns the spatial basis ($\phi$), the temporal basis ($\psi$), and the modal
|
|
185
169
|
amplitudes ($\Sigma$) of the POD decomposition.
|
|
@@ -202,7 +186,7 @@ by the user (refer to `examples/ex_04_Memory_Saving.py`).
|
|
|
202
186
|
m = ModuloVKI(D, N_PARTITIONS=10)
|
|
203
187
|
|
|
204
188
|
# Compute the POD decomposition
|
|
205
|
-
phi_POD, Sigma_POD, psi_POD = m.
|
|
189
|
+
phi_POD, Sigma_POD, psi_POD = m.POD()
|
|
206
190
|
|
|
207
191
|
Example 3: non-uniform grid
|
|
208
192
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
|
@@ -230,16 +214,25 @@ you can use the weighted inner product formulation (refer to `examples/ex_05_non
|
|
|
230
214
|
m = ModuloVKI(D, weights=weights)
|
|
231
215
|
|
|
232
216
|
# Compute the POD decomposition
|
|
233
|
-
phi_POD, Sigma_POD, psi_POD = m.
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
217
|
+
phi_POD, Sigma_POD, psi_POD = m.POD()
|
|
218
|
+
|
|
237
219
|
Community guidelines
|
|
238
220
|
---------------------
|
|
239
221
|
|
|
240
222
|
Contributing to MODULO
|
|
241
223
|
^^^^^^^^^^^^^^^^^^^^^^^
|
|
242
|
-
We welcome contributions to MODULO.
|
|
224
|
+
We welcome contributions to MODULO.
|
|
225
|
+
|
|
226
|
+
It is recommended to perform a shallow clone of the repository to avoid downloading the entire history of the project:
|
|
227
|
+
|
|
228
|
+
.. code-block:: bash
|
|
229
|
+
|
|
230
|
+
$ git clone --depth 1 https://github.com/mendezVKI/MODULO.git
|
|
231
|
+
|
|
232
|
+
This will download only the latest version of the repository, which is sufficient for contributing to the project, and will save
|
|
233
|
+
you time and disk space.
|
|
234
|
+
|
|
235
|
+
To create a new feature, please submit a pull request, specifying the proposed changes and
|
|
243
236
|
providing an example of how to use the new feature (that will be included in the `examples/` folder).
|
|
244
237
|
|
|
245
238
|
The pull request will be reviewed by the MODULO team before being merged into the main branch, and your contribution duly acknowledged.
|
|
@@ -250,14 +243,39 @@ If you find a bug, or you encounter unexpected behaviour, please open an issue o
|
|
|
250
243
|
|
|
251
244
|
Ask for help
|
|
252
245
|
^^^^^^^^^^^^
|
|
246
|
+
If you have troubles using MODULO, or you need help with a specific decomposition, please open an issue on the MODULO GitHub repository.
|
|
253
247
|
|
|
254
248
|
Citation
|
|
255
|
-
|
|
249
|
+
--------
|
|
250
|
+
|
|
256
251
|
If you use MODULO in your research, please cite it as follows:
|
|
257
252
|
|
|
258
|
-
|
|
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
|
+
|
|
272
|
+
and
|
|
273
|
+
|
|
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
|
|
259
277
|
|
|
260
|
-
.. code-block:: text
|
|
278
|
+
.. code-block:: text
|
|
261
279
|
|
|
262
280
|
@article{ninni2020modulo,
|
|
263
281
|
title={MODULO: A software for Multiscale Proper Orthogonal Decomposition of data},
|
|
@@ -269,7 +287,6 @@ If you use MODULO in your research, please cite it as follows:
|
|
|
269
287
|
publisher={Elsevier}
|
|
270
288
|
}
|
|
271
289
|
|
|
272
|
-
We are currently working on a Journal of Open Source article that will be available soon.
|
|
273
290
|
|
|
274
291
|
References
|
|
275
292
|
----------
|
|
@@ -302,3 +319,8 @@ There are also decomposition-specific projects, some of which are listed below:
|
|
|
302
319
|
- Ichinaga, Andreuzzi, Demo, Tezzele, Lapo, Rozza, Brunton, Kutz. PyDMD: A Python package for robust dynamic mode decomposition. arXiv preprint, 2024.
|
|
303
320
|
- Rogowski, Marcin, et al. "Unlocking massively parallel spectral proper orthogonal decompositions in the PySPOD package." Computer Physics Communications 302 (2024): 109246.
|
|
304
321
|
|
|
322
|
+
|
|
323
|
+
|
|
324
|
+
|
|
325
|
+
|
|
326
|
+
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
modulo_vki/__init__.py,sha256=AOjmeFjHj69m45iZzfTHM6-SLUelgKdGeu3VdSg9hIo,39
|
|
2
|
+
modulo_vki/modulo.py,sha256=OYMLteELmAHyhfByCoy2Vqg4h7bUMsgbmIDF7jUXf3A,38261
|
|
3
|
+
modulo_vki/modulo_old.py,sha256=3r_BBYQfbmZWGDyPukyJTVYVVcAVuEE0CmREEJkzsxU,59413
|
|
4
|
+
modulo_vki/core/__init__.py,sha256=y9mIqtmSg3o8TXMqFxoiMCoMSle6mK0LBrvNJCVM1Zg,226
|
|
5
|
+
modulo_vki/core/_dft.py,sha256=W98vC4HR1fivZjYRQXrFKV7RBa-O3RSRwq-nCKoxqjQ,4374
|
|
6
|
+
modulo_vki/core/_dmd_s.py,sha256=f3DKFlWdUS33-MrCFuL93nvI3VDVwD9DrEiDpCrNKwI,2934
|
|
7
|
+
modulo_vki/core/_k_matrix.py,sha256=ECDau3hh80gmSTCvp7-GXtLn0QBThYz5b-A3dgHHZiY,7004
|
|
8
|
+
modulo_vki/core/_mpod_space.py,sha256=0Om-kMQV5n5oI67Ef5ZuXtvBDaRePMVBQYfhJ-_hK0E,7327
|
|
9
|
+
modulo_vki/core/_mpod_time.py,sha256=-QhLyOEAKW-E8JPhPgQETfd153Xzc-TASiJyfH-VdG0,9848
|
|
10
|
+
modulo_vki/core/_pod_space.py,sha256=A3dfv4Nzs9fx3qwOdlJR5HwyyfI-QcVer8P83xqa_C4,6983
|
|
11
|
+
modulo_vki/core/_pod_time.py,sha256=JtiFGYFV-tBKTWHWHW8zynMoLt2q8bD1bd1LP9pyvjo,2169
|
|
12
|
+
modulo_vki/core/_spod_s.py,sha256=rxXSsNdSTLv3sjvlUErw3xjHk0eF8H7IkSJr5nMQ8Vo,4149
|
|
13
|
+
modulo_vki/core/_spod_t.py,sha256=csftCPRSqs-OghQa8l0mRDL7cy5eXXSCnW8O4pnXTCY,3866
|
|
14
|
+
modulo_vki/core/spatial_structures.py,sha256=65xh3zD3ekjRYUeRd2KcOYzPurpua7qDf0AysY-X8hE,14712
|
|
15
|
+
modulo_vki/core/temporal_structures.py,sha256=0DQEdE9ssTnnfIC86VZPsNlym6fsjRAboPHHnv-9CI4,10645
|
|
16
|
+
modulo_vki/core/utils.py,sha256=Ac9Im9knlbZRByP6Qgv-LCDt5zEC8PbyidqXzVdeYtQ,17889
|
|
17
|
+
modulo_vki/utils/__init__.py,sha256=F5yy5R19dONK9oaBEpKzylorVJNcjT2kiJ5Og-ZX1ek,94
|
|
18
|
+
modulo_vki/utils/_plots.py,sha256=m43t08cVq-TY0BW0YPqT71hN-54hBphIYKZEn8Kw16E,1453
|
|
19
|
+
modulo_vki/utils/_utils.py,sha256=WFD7nwjSzVHpevVwTEvMdjAmcbeqwoXT9M48tIIniJw,14355
|
|
20
|
+
modulo_vki/utils/others.py,sha256=26ES5EmsLhwkvcXTwNhDMkblGrxoWepX5c9TXeLTRWg,17336
|
|
21
|
+
modulo_vki/utils/read_db.py,sha256=lJFauxJxS0_mYoxrbn-43UqZjOkr-qb9f6RTUq4IxZU,15149
|
|
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,,
|
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
modulo_vki/__init__.py,sha256=wKu93pAmJcEzH5iKpXZ6rguM43RdI9C-4W4r8frvpc0,594
|
|
2
|
-
modulo_vki/modulo.py,sha256=j6cdcDcHR8omT9i-FSKzRSwh_dT4PbKM1RN35NnVmU0,37654
|
|
3
|
-
modulo_vki/core/__init__.py,sha256=y9mIqtmSg3o8TXMqFxoiMCoMSle6mK0LBrvNJCVM1Zg,226
|
|
4
|
-
modulo_vki/core/_dft.py,sha256=Sq-vH8DlypAjHEGfWBAzBZp7DqKMCQ9G82QwdbYo-vs,2285
|
|
5
|
-
modulo_vki/core/_dmd_s.py,sha256=lD7COE1Zinxyjd4IZl0MxT4XtqKM9JtXLL4U26MbtFc,2678
|
|
6
|
-
modulo_vki/core/_k_matrix.py,sha256=SxS5esKl8ifMtTYWWeX437UWADKB3fW4ozKGryxVHpM,3687
|
|
7
|
-
modulo_vki/core/_mpod_space.py,sha256=0Om-kMQV5n5oI67Ef5ZuXtvBDaRePMVBQYfhJ-_hK0E,7327
|
|
8
|
-
modulo_vki/core/_mpod_time.py,sha256=ItlFTEl-uhj76aIpHpq8U2-vokTnPiE3PL60RKHUYlM,8498
|
|
9
|
-
modulo_vki/core/_pod_space.py,sha256=l-Fbcg0JdnOMb_jyKwFyM8YeanXxWa8EvwEdOs5QV6U,6960
|
|
10
|
-
modulo_vki/core/_pod_time.py,sha256=xWEOX6pO7Cpx1Vm7vF7X4YSORMNuAOpJyfpJiG-foTI,2144
|
|
11
|
-
modulo_vki/core/_spod_s.py,sha256=rxXSsNdSTLv3sjvlUErw3xjHk0eF8H7IkSJr5nMQ8Vo,4149
|
|
12
|
-
modulo_vki/core/_spod_t.py,sha256=csftCPRSqs-OghQa8l0mRDL7cy5eXXSCnW8O4pnXTCY,3866
|
|
13
|
-
modulo_vki/utils/__init__.py,sha256=F5yy5R19dONK9oaBEpKzylorVJNcjT2kiJ5Og-ZX1ek,94
|
|
14
|
-
modulo_vki/utils/_plots.py,sha256=m43t08cVq-TY0BW0YPqT71hN-54hBphIYKZEn8Kw16E,1453
|
|
15
|
-
modulo_vki/utils/_utils.py,sha256=5-keBtdW6Z-QmUvgX2ITWOIddsdn0svHudynUXkc3ag,13935
|
|
16
|
-
modulo_vki/utils/others.py,sha256=4VOfB5Xf-lYYdh2qFDXK3Oy7u4xgvjzTgidNTlg2qg0,17101
|
|
17
|
-
modulo_vki/utils/read_db.py,sha256=lJFauxJxS0_mYoxrbn-43UqZjOkr-qb9f6RTUq4IxZU,15149
|
|
18
|
-
modulo_vki-2.0.7.dist-info/LICENSE,sha256=5TivriXFErrYrJgBq3M72kHNHqtSiCft3xESM1zHc0k,1091
|
|
19
|
-
modulo_vki-2.0.7.dist-info/METADATA,sha256=6CuUQwoompNn5fy8b2dfI7xRN31xtfItgYGo9HbMqQo,14572
|
|
20
|
-
modulo_vki-2.0.7.dist-info/WHEEL,sha256=Z4pYXqR_rTB7OWNDYFOm1qRk0RX6GFP2o8LgvP453Hk,91
|
|
21
|
-
modulo_vki-2.0.7.dist-info/top_level.txt,sha256=4PA4AmafKU6M7us7gvt_Q976Khx3qjNUEThRRM5zxeA,11
|
|
22
|
-
modulo_vki-2.0.7.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|