modulo-vki 2.0.7__py3-none-any.whl → 2.1.0__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.0.dist-info}/METADATA +123 -30
- modulo_vki-2.1.0.dist-info/RECORD +26 -0
- {modulo_vki-2.0.7.dist-info → modulo_vki-2.1.0.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.0.dist-info/licenses}/LICENSE +0 -0
- {modulo_vki-2.0.7.dist-info → modulo_vki-2.1.0.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.0
|
|
3
|
+
Version: 2.1.0
|
|
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,6 +21,17 @@ 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
|
|
|
@@ -31,17 +42,22 @@ MODULO: a python toolbox for data-driven modal decomposition
|
|
|
31
42
|
:target: https://modulo.readthedocs.io/en/latest/?badge=latest
|
|
32
43
|
:alt: Documentation Status
|
|
33
44
|
|
|
45
|
+
|DOI| |PyPI|
|
|
46
|
+
|
|
47
|
+
.. |DOI| image:: https://zenodo.org/badge/DOI/10.5281/zenodo.13939519.svg
|
|
48
|
+
:target: https://doi.org/10.5281/zenodo.13939519
|
|
49
|
+
|
|
50
|
+
.. |PyPI| image:: https://img.shields.io/pypi/v/modulo_vki
|
|
51
|
+
:target: https://pypi.org/project/modulo_vki/
|
|
52
|
+
|
|
34
53
|
.. raw:: html
|
|
35
54
|
|
|
36
55
|
<div style="text-align: center;">
|
|
37
56
|
<img src="https://modulo.readthedocs.io/en/latest/_images/modulo_logo.png" alt="Modulo Logo" width="500"/>
|
|
38
57
|
</div>
|
|
39
58
|
|
|
40
|
-
|
|
41
|
-
It offers a wide range of decomposition techniques,
|
|
42
|
-
on the specific physics of their problem and their desired outcomes. MODULO can natively handle large
|
|
43
|
-
datasets efficiently, featuring a memory-saving option that partitions the data and computes the decomposition in
|
|
44
|
-
chunks (ninni2020modulo). Additionally, it supports non-uniform meshes through its weighted inner product formulation.
|
|
59
|
+
|
|
60
|
+
**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
61
|
|
|
46
62
|
While the discontinued MATLAB version of MODULO (ninni2020modulo) is accessible in the “Old_Matlab_Implementation” branch,
|
|
47
63
|
it is no longer maintained. The latest decomposition techniques are exclusively available in the current Python version.
|
|
@@ -49,7 +65,6 @@ it is no longer maintained. The latest decomposition techniques are exclusively
|
|
|
49
65
|
As a part of the MODULO project, we provide a series of lectures on data-driven modal decomposition, and its applications.
|
|
50
66
|
These are available at the `MODULO YouTube channel <https://www.youtube.com/@modulompod5682>`_.
|
|
51
67
|
|
|
52
|
-
|
|
53
68
|
.. contents:: Table of contents
|
|
54
69
|
|
|
55
70
|
Modal decompositions
|
|
@@ -61,19 +76,20 @@ coordinates, respectively, the modal decomposition can be written as:
|
|
|
61
76
|
$D(x_i, t_k) = \\phi(x_i) \\Sigma \\psi(t_k)^T$
|
|
62
77
|
|
|
63
78
|
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
|
|
79
|
+
Different decompositions employ different bases, such as prescribed Fourier basis ($\\psi_\\mathcal{F}$) for
|
|
65
80
|
the Discrete Fourier Transform (DFT), or data-driven basis, i.e. tailored on the dataset at hand,
|
|
66
81
|
for the Proper Orthogonal Decomposition (POD).
|
|
67
82
|
|
|
68
83
|
We refer to (mendez2022statistical, mendez2022generalizedmultiscalemodalanalysis, Mendez_2023) for an introduction to the topic.
|
|
69
84
|
|
|
70
85
|
MODULO currently features the following decompositions:
|
|
86
|
+
|
|
71
87
|
- Discrete Fourier Transform (DFT) (briggs1995dft)
|
|
72
88
|
- Proper Orthogonal Decomposition (POD) (sirovich1987turbulence, berkooz1993proper)
|
|
73
89
|
- Multi-Scale Proper Orthogonal Decomposition (mPOD) (mendez2019multi)
|
|
74
90
|
- Dynamic Mode Decomposition (DMD) (schmid2010dynamic)
|
|
75
|
-
- Spectral Proper Orthogonal Decomposition (SPOD) (csieber2016spectral, towne2018spectral),
|
|
76
|
-
different formulations, and both are available in MODULO.
|
|
91
|
+
- Spectral Proper Orthogonal Decomposition (SPOD) (csieber2016spectral, towne2018spectral),
|
|
92
|
+
note that the two are different formulations, and both are available in MODULO.
|
|
77
93
|
- Kernel Proper Orthogonal Decomposition (KPOD) (mika1998kernel)
|
|
78
94
|
|
|
79
95
|
We remind the curious reader to the respective references for a detailed description of each decomposition, and to the
|
|
@@ -85,7 +101,7 @@ Release Notes
|
|
|
85
101
|
The latest version of MODULO (v2.0) includes the following updates:
|
|
86
102
|
|
|
87
103
|
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>`_
|
|
104
|
+
(see `here <https://scikit-learn.org/stable/modules/generated/sklearn.decomposition.TruncatedSVD.html>`_
|
|
89
105
|
and `here <https://scikit-learn.org/stable/modules/generated/sklearn.utils.extmath.randomized_svd.html>`_.)
|
|
90
106
|
It is now possible to select various options as "eig_solver" and "svd_solver",
|
|
91
107
|
offering different trade-offs in terms of accuracy vs computational time.
|
|
@@ -93,29 +109,24 @@ The latest version of MODULO (v2.0) includes the following updates:
|
|
|
93
109
|
2. **Computation the POD directly via SVD**, using any of the four "svd_solver" options.
|
|
94
110
|
This is generally faster but requires more memory.
|
|
95
111
|
|
|
96
|
-
|
|
97
|
-
the number of modes to be computed in each portion of the splitting vector before assembling the full basis.
|
|
98
|
-
This is computationally very demanding. This estimation has been replaced by a
|
|
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
|
|
99
113
|
frequency-based threshold (i.e. based on the frequency bins within each portion) since one can show that the
|
|
100
114
|
frequency-based estimator is always more "conservative" than the rank-based estimator.
|
|
101
115
|
|
|
102
|
-
|
|
116
|
+
4. **Major improvement on the memory saving option** : the previous version of modulo always required in input the matrix D.
|
|
103
117
|
Then, if the memory saving option was active, the matrix was partitioned and stored locally to free the RAM before computing the
|
|
104
|
-
correlation matrix (see
|
|
118
|
+
correlation matrix (see `this tutorial by D. Ninni <https://www.youtube.com/watch?v=LclxO1WTuao>`_).
|
|
105
119
|
In the new version, it is possible to initialize a modulo object *without* the matrix D (see exercise 5 in the examples).
|
|
106
120
|
Instead, one can create the partitions without loading the matrix D.
|
|
107
121
|
|
|
108
|
-
|
|
122
|
+
5. **Implementation of Dynamic Mode Decomposition (DMD)** from (Schmid, P.J 2010)
|
|
109
123
|
|
|
110
|
-
|
|
124
|
+
6. **Implementation of the two Spectral POD formulations**, namely the one from (Sieber et al 2016),
|
|
111
125
|
and the one from (Towne et al 2018).
|
|
112
126
|
|
|
113
|
-
|
|
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`.
|
|
127
|
+
7. **Implementation of a kernel version of the POD**, in which the correlation matrix is replaced by a kernel matrix. 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>`_. We refer also to: `Mendez, 2022 <https://arxiv.org/abs/2208.07746>`_.
|
|
116
128
|
|
|
117
|
-
|
|
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).
|
|
129
|
+
8. **Implementation of a formulation for non-uniform meshes**, using a weighted matrix for all the relevant inner products. 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
130
|
It can be used both with and without the memory-saving option.
|
|
120
131
|
|
|
121
132
|
|
|
@@ -156,7 +167,7 @@ Documentation
|
|
|
156
167
|
|
|
157
168
|
The documentation of MODULO is available `here <https://modulo.readthedocs.io/en/latest/intro.html>`_. It
|
|
158
169
|
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>`_
|
|
170
|
+
decompositions required inputs and outputs. A `list of YouTube videos <https://www.youtube.com/@modulompod5682>`_
|
|
160
171
|
is also available to guide the introduce the user to modal decomposition and MODULO.
|
|
161
172
|
|
|
162
173
|
Example
|
|
@@ -179,7 +190,7 @@ The following example illustrates how to decompose a data set (D) using the POD
|
|
|
179
190
|
m = ModuloVKI(D)
|
|
180
191
|
|
|
181
192
|
# Compute the POD decomposition
|
|
182
|
-
phi_POD, Sigma_POD, psi_POD = m.
|
|
193
|
+
phi_POD, Sigma_POD, psi_POD = m.POD()
|
|
183
194
|
|
|
184
195
|
which returns the spatial basis ($\phi$), the temporal basis ($\psi$), and the modal
|
|
185
196
|
amplitudes ($\Sigma$) of the POD decomposition.
|
|
@@ -202,7 +213,7 @@ by the user (refer to `examples/ex_04_Memory_Saving.py`).
|
|
|
202
213
|
m = ModuloVKI(D, N_PARTITIONS=10)
|
|
203
214
|
|
|
204
215
|
# Compute the POD decomposition
|
|
205
|
-
phi_POD, Sigma_POD, psi_POD = m.
|
|
216
|
+
phi_POD, Sigma_POD, psi_POD = m.POD()
|
|
206
217
|
|
|
207
218
|
Example 3: non-uniform grid
|
|
208
219
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
|
@@ -230,7 +241,58 @@ you can use the weighted inner product formulation (refer to `examples/ex_05_non
|
|
|
230
241
|
m = ModuloVKI(D, weights=weights)
|
|
231
242
|
|
|
232
243
|
# Compute the POD decomposition
|
|
233
|
-
phi_POD, Sigma_POD, psi_POD = m.
|
|
244
|
+
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
|
|
234
296
|
|
|
235
297
|
|
|
236
298
|
|
|
@@ -239,7 +301,18 @@ Community guidelines
|
|
|
239
301
|
|
|
240
302
|
Contributing to MODULO
|
|
241
303
|
^^^^^^^^^^^^^^^^^^^^^^^
|
|
242
|
-
We welcome contributions to MODULO.
|
|
304
|
+
We welcome contributions to MODULO.
|
|
305
|
+
|
|
306
|
+
It is recommended to perform a shallow clone of the repository to avoid downloading the entire history of the project:
|
|
307
|
+
|
|
308
|
+
.. code-block:: bash
|
|
309
|
+
|
|
310
|
+
$ git clone --depth 1 https://github.com/mendezVKI/MODULO.git
|
|
311
|
+
|
|
312
|
+
This will download only the latest version of the repository, which is sufficient for contributing to the project, and will save
|
|
313
|
+
you time and disk space.
|
|
314
|
+
|
|
315
|
+
To create a new feature, please submit a pull request, specifying the proposed changes and
|
|
243
316
|
providing an example of how to use the new feature (that will be included in the `examples/` folder).
|
|
244
317
|
|
|
245
318
|
The pull request will be reviewed by the MODULO team before being merged into the main branch, and your contribution duly acknowledged.
|
|
@@ -250,11 +323,31 @@ If you find a bug, or you encounter unexpected behaviour, please open an issue o
|
|
|
250
323
|
|
|
251
324
|
Ask for help
|
|
252
325
|
^^^^^^^^^^^^
|
|
326
|
+
If you have troubles using MODULO, or you need help with a specific decomposition, please open an issue on the MODULO GitHub repository.
|
|
253
327
|
|
|
254
328
|
Citation
|
|
255
329
|
---------
|
|
256
330
|
If you use MODULO in your research, please cite it as follows:
|
|
257
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
|
+
|
|
334
|
+
|
|
335
|
+
.. code-block:: text
|
|
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} }
|
|
348
|
+
|
|
349
|
+
and
|
|
350
|
+
|
|
258
351
|
``Ninni, D., & Mendez, M. A. (2020). MODULO: A software for Multiscale Proper Orthogonal Decomposition of data. SoftwareX, 12, 100622.``
|
|
259
352
|
|
|
260
353
|
.. code-block:: text
|
|
@@ -269,7 +362,7 @@ If you use MODULO in your research, please cite it as follows:
|
|
|
269
362
|
publisher={Elsevier}
|
|
270
363
|
}
|
|
271
364
|
|
|
272
|
-
|
|
365
|
+
|
|
273
366
|
|
|
274
367
|
References
|
|
275
368
|
----------
|
|
@@ -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.0.dist-info/licenses/LICENSE,sha256=5TivriXFErrYrJgBq3M72kHNHqtSiCft3xESM1zHc0k,1091
|
|
23
|
+
modulo_vki-2.1.0.dist-info/METADATA,sha256=DwFf-uEygrIts5jdauD3tnjELaecgAKLsDr4uPO_haM,18201
|
|
24
|
+
modulo_vki-2.1.0.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
25
|
+
modulo_vki-2.1.0.dist-info/top_level.txt,sha256=4PA4AmafKU6M7us7gvt_Q976Khx3qjNUEThRRM5zxeA,11
|
|
26
|
+
modulo_vki-2.1.0.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
|