modulo-vki 2.0.6__tar.gz → 2.1.4__tar.gz
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.0.6 → modulo_vki-2.1.4}/LICENSE +21 -21
- modulo_vki-2.1.4/MANIFEST.in +1 -0
- modulo_vki-2.1.4/PKG-INFO +356 -0
- modulo_vki-2.0.6/PKG-INFO → modulo_vki-2.1.4/README.rst +420 -304
- modulo_vki-2.1.4/README_pypi.rst +321 -0
- modulo_vki-2.1.4/modulo_vki/__init__.py +1 -0
- {modulo_vki-2.0.6 → modulo_vki-2.1.4}/modulo_vki/core/__init__.py +9 -9
- modulo_vki-2.1.4/modulo_vki/core/_dft.py +132 -0
- modulo_vki-2.1.4/modulo_vki/core/_dmd_s.py +81 -0
- modulo_vki-2.1.4/modulo_vki/core/_k_matrix.py +209 -0
- {modulo_vki-2.0.6 → modulo_vki-2.1.4}/modulo_vki/core/_mpod_space.py +180 -180
- {modulo_vki-2.0.6 → modulo_vki-2.1.4}/modulo_vki/core/_mpod_time.py +175 -154
- {modulo_vki-2.0.6 → modulo_vki-2.1.4}/modulo_vki/core/_pod_space.py +185 -184
- {modulo_vki-2.0.6 → modulo_vki-2.1.4}/modulo_vki/core/_pod_time.py +49 -48
- {modulo_vki-2.0.6 → modulo_vki-2.1.4}/modulo_vki/core/_spod_s.py +101 -101
- {modulo_vki-2.0.6 → modulo_vki-2.1.4}/modulo_vki/core/_spod_t.py +104 -104
- modulo_vki-2.1.4/modulo_vki/core/spatial_structures.py +367 -0
- modulo_vki-2.1.4/modulo_vki/core/temporal_structures.py +241 -0
- modulo_vki-2.1.4/modulo_vki/core/utils.py +474 -0
- modulo_vki-2.1.4/modulo_vki/modulo.py +900 -0
- modulo_vki-2.0.6/modulo_vki/modulo.py → modulo_vki-2.1.4/modulo_vki/modulo_old.py +1368 -828
- {modulo_vki-2.0.6 → modulo_vki-2.1.4}/modulo_vki/utils/__init__.py +4 -4
- {modulo_vki-2.0.6 → modulo_vki-2.1.4}/modulo_vki/utils/_plots.py +51 -51
- {modulo_vki-2.0.6 → modulo_vki-2.1.4}/modulo_vki/utils/_utils.py +358 -341
- {modulo_vki-2.0.6 → modulo_vki-2.1.4}/modulo_vki/utils/others.py +461 -452
- {modulo_vki-2.0.6 → modulo_vki-2.1.4}/modulo_vki/utils/read_db.py +339 -339
- modulo_vki-2.1.4/modulo_vki.egg-info/PKG-INFO +356 -0
- {modulo_vki-2.0.6 → modulo_vki-2.1.4}/modulo_vki.egg-info/SOURCES.txt +10 -1
- modulo_vki-2.1.4/modulo_vki.egg-info/top_level.txt +2 -0
- modulo_vki-2.1.4/modulo_vki_2/__init__.py +0 -0
- modulo_vki-2.1.4/modulo_vki_2/modulo.py +187 -0
- modulo_vki-2.1.4/modulo_vki_2/utils.py +22 -0
- {modulo_vki-2.0.6 → modulo_vki-2.1.4}/setup.py +77 -82
- modulo_vki-2.0.6/README.rst +0 -280
- modulo_vki-2.0.6/modulo_vki/__init__.py +0 -23
- modulo_vki-2.0.6/modulo_vki/core/_dft.py +0 -61
- modulo_vki-2.0.6/modulo_vki/core/_dmd_s.py +0 -72
- modulo_vki-2.0.6/modulo_vki/core/_k_matrix.py +0 -81
- modulo_vki-2.0.6/modulo_vki.egg-info/PKG-INFO +0 -304
- modulo_vki-2.0.6/modulo_vki.egg-info/top_level.txt +0 -1
- {modulo_vki-2.0.6 → modulo_vki-2.1.4}/modulo_vki.egg-info/dependency_links.txt +0 -0
- {modulo_vki-2.0.6 → modulo_vki-2.1.4}/modulo_vki.egg-info/requires.txt +0 -0
- {modulo_vki-2.0.6 → modulo_vki-2.1.4}/setup.cfg +0 -0
|
@@ -1,21 +1,21 @@
|
|
|
1
|
-
MIT License
|
|
2
|
-
|
|
3
|
-
Copyright (c) 2022 lorenzoschena
|
|
4
|
-
|
|
5
|
-
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
-
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
-
in the Software without restriction, including without limitation the rights
|
|
8
|
-
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
-
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
-
furnished to do so, subject to the following conditions:
|
|
11
|
-
|
|
12
|
-
The above copyright notice and this permission notice shall be included in all
|
|
13
|
-
copies or substantial portions of the Software.
|
|
14
|
-
|
|
15
|
-
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
-
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
-
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
-
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
-
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
-
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
-
SOFTWARE.
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2022 lorenzoschena
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
include README_pypi.rst
|
|
@@ -0,0 +1,356 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: modulo_vki
|
|
3
|
+
Version: 2.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
|
+
Home-page: https://github.com/mendezVKI/MODULO/tree/master/modulo_python_package/
|
|
6
|
+
Author: ['R. Poletti', 'L. Schena', 'D. Ninni', 'M. A. Mendez']
|
|
7
|
+
Author-email: mendez@vki.ac.be
|
|
8
|
+
License: BSD (3-clause)
|
|
9
|
+
Classifier: Development Status :: 4 - Beta
|
|
10
|
+
Classifier: Natural Language :: English
|
|
11
|
+
Classifier: Programming Language :: Python :: 3
|
|
12
|
+
Requires-Python: >=3.6
|
|
13
|
+
Description-Content-Type: text/x-rst
|
|
14
|
+
License-File: LICENSE
|
|
15
|
+
Requires-Dist: tqdm
|
|
16
|
+
Requires-Dist: numpy
|
|
17
|
+
Requires-Dist: scipy
|
|
18
|
+
Requires-Dist: scikit-learn
|
|
19
|
+
Requires-Dist: ipykernel
|
|
20
|
+
Requires-Dist: ipython
|
|
21
|
+
Requires-Dist: ipython-genutils
|
|
22
|
+
Requires-Dist: ipywidgets
|
|
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
|
|
35
|
+
|
|
36
|
+
MODULO: a python toolbox for data-driven modal decomposition
|
|
37
|
+
-------------------------------------------------------------
|
|
38
|
+
|
|
39
|
+
.. image:: https://modulo.readthedocs.io/en/latest/_images/modulo_logo.png
|
|
40
|
+
:alt: MODULO logo
|
|
41
|
+
:width: 500px
|
|
42
|
+
:align: center
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
**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 (`Nini et al. (2022) <https://www.sciencedirect.com/science/article/pii/S2352711020303356>`_). 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.
|
|
46
|
+
|
|
47
|
+
While the discontinued MATLAB version of MODULO is accessible in the “Old_Matlab_Implementation” branch,
|
|
48
|
+
it is no longer maintained. The latest decomposition techniques are exclusively available in the current Python version (`Poletti et al. (2024) <https://joss.theoj.org/papers/10.21105/joss.06753>`_).
|
|
49
|
+
|
|
50
|
+
As a part of the MODULO project, we provide a series of lectures on data-driven modal decomposition, and its applications.
|
|
51
|
+
These are available at the `MODULO YouTube channel <https://www.youtube.com/@modulompod5682>`_.
|
|
52
|
+
|
|
53
|
+
.. contents:: Table of contents
|
|
54
|
+
|
|
55
|
+
Modal decompositions
|
|
56
|
+
--------------------
|
|
57
|
+
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. Different decompositions employ different bases, such as prescribed Fourier basis for
|
|
59
|
+
the Discrete Fourier Transform (DFT), or data-driven basis, i.e. tailored on the dataset at hand,
|
|
60
|
+
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.
|
|
61
|
+
MODULO currently features the following decompositions:
|
|
62
|
+
|
|
63
|
+
- Discrete Fourier Transform (DFT) (`Briggs et al. (1997) <https://epubs.siam.org/doi/book/10.1137/1.9781611971514>`_)
|
|
64
|
+
- 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>`_)
|
|
65
|
+
- Multi-Scale Proper Orthogonal Decomposition (mPOD) (`Mendez et al. (2019) <https://arxiv.org/abs/1804.09646>`_)
|
|
66
|
+
- Dynamic Mode Decomposition (DMD) (`Schmid (2010) <https://doi.org/10.1017/S0022112010001217>`_)
|
|
67
|
+
- 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>`_),
|
|
68
|
+
note that the two are different formulations, and both are available in MODULO.
|
|
69
|
+
- Kernel Proper Orthogonal Decomposition (KPOD) (`Mika et al. (1998) <https://proceedings.neurips.cc/paper_files/paper/1998/file/226d1f15ecd35f784d2a20c3ecf56d7f-Paper.pdf>`_)
|
|
70
|
+
|
|
71
|
+
We remind the curious reader to the respective references for a detailed description of each decomposition, and to the
|
|
72
|
+
documentation for a practical guide on how to use them in MODULO.
|
|
73
|
+
|
|
74
|
+
Release Notes
|
|
75
|
+
-------------
|
|
76
|
+
This version of MODULO includes the following updates:
|
|
77
|
+
|
|
78
|
+
1. **mPOD bug fix:** the previous version of mPOD was skipping the last scale of the frequency splitting vector. Fixed in this version.
|
|
79
|
+
|
|
80
|
+
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
|
|
81
|
+
split between different workers.
|
|
82
|
+
|
|
83
|
+
3. **Simplified decomposition interface:** the interface of the decomposition methods has been simplified to improve user experience.
|
|
84
|
+
|
|
85
|
+
4. **Enhanced POD selection:** the POD function has been redesigned, allowing users to easily choose between different POD methods.
|
|
86
|
+
|
|
87
|
+
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.
|
|
88
|
+
|
|
89
|
+
6. **Extended documentation:** the documentation has been significantly enriched, now including theoretical foundations for all the supported modal decomposition techniques.
|
|
90
|
+
|
|
91
|
+
|
|
92
|
+
Documentation
|
|
93
|
+
-------------
|
|
94
|
+
|
|
95
|
+
The documentation of MODULO is available `here <https://lorenzoschena.github.io/MODULO/intro.html>`_. It
|
|
96
|
+
contains a comprehensive guide on how to install and use the package, as well as a detailed description of the
|
|
97
|
+
decompositions required inputs and outputs. A `list of YouTube videos <https://www.youtube.com/@modulompod5682>`_
|
|
98
|
+
is also available to guide the introduce the user to modal decomposition and MODULO.
|
|
99
|
+
|
|
100
|
+
Installation
|
|
101
|
+
-------------
|
|
102
|
+
|
|
103
|
+
Installation via pip
|
|
104
|
+
^^^^^^^^^^^^^^^^^^^^
|
|
105
|
+
|
|
106
|
+
You can access the latest update of the modulo python package on PyPI using the command line:
|
|
107
|
+
|
|
108
|
+
.. code-block:: bash
|
|
109
|
+
|
|
110
|
+
$ pip install modulo_vki
|
|
111
|
+
|
|
112
|
+
Installation from source
|
|
113
|
+
^^^^^^^^^^^^^^^^^^^^^^^^
|
|
114
|
+
|
|
115
|
+
Alternatively, you can clone the repository and install the package locally:
|
|
116
|
+
|
|
117
|
+
.. code-block:: bash
|
|
118
|
+
|
|
119
|
+
$ git clone https://github.com/mendezVKI/MODULO.git
|
|
120
|
+
|
|
121
|
+
$ cd MODULO
|
|
122
|
+
|
|
123
|
+
$ python setup.py install
|
|
124
|
+
|
|
125
|
+
or, if you have pip installed in your environment,
|
|
126
|
+
|
|
127
|
+
.. code-block:: bash
|
|
128
|
+
|
|
129
|
+
$ pip install .
|
|
130
|
+
|
|
131
|
+
|
|
132
|
+
Example
|
|
133
|
+
-------------
|
|
134
|
+
|
|
135
|
+
Example 1: POD decomposition
|
|
136
|
+
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
|
137
|
+
|
|
138
|
+
The following example illustrates how to decompose a data set (D) using the POD decomposition.
|
|
139
|
+
|
|
140
|
+
.. code-block:: python
|
|
141
|
+
|
|
142
|
+
from modulo_vki import ModuloVKI
|
|
143
|
+
import numpy as np
|
|
144
|
+
|
|
145
|
+
# Create a random dataset
|
|
146
|
+
D = np.random.rand(100, 1000)
|
|
147
|
+
|
|
148
|
+
# Initialize the ModuloVKI object
|
|
149
|
+
m = ModuloVKI(D)
|
|
150
|
+
|
|
151
|
+
# Compute the POD decomposition
|
|
152
|
+
phi_POD, Sigma_POD, psi_POD = m.POD()
|
|
153
|
+
|
|
154
|
+
which returns the spatial basis ($\phi$), the temporal basis ($\psi$), and the modal
|
|
155
|
+
amplitudes ($\Sigma$) of the POD decomposition.
|
|
156
|
+
|
|
157
|
+
Example 2: Memory Saving option
|
|
158
|
+
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
|
159
|
+
|
|
160
|
+
For the Memory Saving option, MODULO decomposes $D$ in `N_partitions`, defined
|
|
161
|
+
by the user (refer to `examples/ex_04_Memory_Saving.py`).
|
|
162
|
+
|
|
163
|
+
.. code-block:: python
|
|
164
|
+
|
|
165
|
+
import os
|
|
166
|
+
import numpy as np
|
|
167
|
+
from modulo_vki import ModuloVKI
|
|
168
|
+
from modulo_vki.utils.read_db import ReadData
|
|
169
|
+
|
|
170
|
+
# --- 1. User-defined settings ---
|
|
171
|
+
# Define the path to your data and the file naming convention.
|
|
172
|
+
FOLDER = 'path/to/your/snapshot_data'
|
|
173
|
+
FILE_ROOT_NAME = 'Res' # The base name, e.g., 'Res' for 'Res00001.dat'
|
|
174
|
+
n_t = 100 # The total number of snapshots (time steps) to process.
|
|
175
|
+
|
|
176
|
+
# --- 2. Data format parameters ---
|
|
177
|
+
# Specify how to read your text-based snapshot files.
|
|
178
|
+
H = 1 # H: Number of header lines to skip
|
|
179
|
+
F = 0 # F: Number of footer lines to skip
|
|
180
|
+
C = 0 # C: Number of initial columns to skip
|
|
181
|
+
|
|
182
|
+
# --- 3. Determine data dimensions from a sample file ---
|
|
183
|
+
# To understand the structure, we load the first snapshot.
|
|
184
|
+
first_snapshot_file = os.path.join(FOLDER, f"{FILE_ROOT_NAME}00001.dat")
|
|
185
|
+
Dat = np.genfromtxt(first_snapshot_file, skip_header=H, skip_footer=F)
|
|
186
|
+
|
|
187
|
+
# N: Number of components per point (e.g., 2 for 2D velocity u,v)
|
|
188
|
+
N = Dat.shape[1]
|
|
189
|
+
# nxny: Number of spatial points in the mesh
|
|
190
|
+
nxny = Dat.shape[0]
|
|
191
|
+
# N_T: Total number of snapshots (aliased from n_t for clarity)
|
|
192
|
+
N_T = n_t
|
|
193
|
+
|
|
194
|
+
# --- 4. Process the dataset into partitions on disk ---
|
|
195
|
+
# The ReadData utility reads all snapshots and chunks the snapshot matrix.
|
|
196
|
+
|
|
197
|
+
D = ReadData._data_processing(
|
|
198
|
+
D=None, # We start with no data in memory
|
|
199
|
+
FOLDER_IN=FOLDER,
|
|
200
|
+
filename=f'{FILE_ROOT_NAME}%05d', # File pattern for snapshot files
|
|
201
|
+
N=N, # Number of components per point
|
|
202
|
+
N_S=N * nxny, # Total size of a single snapshot vector
|
|
203
|
+
N_T=N_T, # Total number of snapshots
|
|
204
|
+
h=H, f=F, c=C, # Header, footer, and column skip parameters
|
|
205
|
+
N_PARTITIONS=10, # The dataset will be split into 10 chunks
|
|
206
|
+
MR=False, # Mean-removal flag
|
|
207
|
+
FOLDER_OUT=os.path.join('.', 'MODULO_tmp') # Where to save temp files
|
|
208
|
+
)
|
|
209
|
+
|
|
210
|
+
# --- 5. Initialize ModuloVKI and compute the POD ---
|
|
211
|
+
# Initialize the object, passing the number of partitions. D must be set to None
|
|
212
|
+
# MODULO will look for the partitions in FOLDER_OUT/MODULO_tmp
|
|
213
|
+
m = ModuloVKI(None, N_PARTITIONS=10, FOLDER_OUT=FOLDER_OUT)
|
|
214
|
+
|
|
215
|
+
# The POD method will now automatically read the data from the partitioned files.
|
|
216
|
+
phi_POD, Sigma_POD, psi_POD = m.POD()
|
|
217
|
+
|
|
218
|
+
print("POD computation complete.")
|
|
219
|
+
|
|
220
|
+
Example 3: non-uniform grid
|
|
221
|
+
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
|
222
|
+
|
|
223
|
+
If you are dealing with non-uniform grid (e.g. output of a Computational Fluid Dynamic (CFD) simulation),
|
|
224
|
+
you can use the weighted inner product formulation (refer to `examples/ex_05_nonUniform_POD.py`).
|
|
225
|
+
|
|
226
|
+
.. code-block:: python
|
|
227
|
+
|
|
228
|
+
from modulo_vki import ModuloVKI
|
|
229
|
+
import numpy as np
|
|
230
|
+
|
|
231
|
+
# Create a random dataset
|
|
232
|
+
D = np.random.rand(100, 1000)
|
|
233
|
+
|
|
234
|
+
# Get the area of the grid
|
|
235
|
+
a_dataSet = gridData.compute_cell_sizes()
|
|
236
|
+
area = a_dataSet['Area']
|
|
237
|
+
|
|
238
|
+
# Compute weights
|
|
239
|
+
areaTot = np.sum(area)
|
|
240
|
+
weights = area/areaTot # sum should be equal to 1
|
|
241
|
+
|
|
242
|
+
# Initialize the ModuloVKI object
|
|
243
|
+
m = ModuloVKI(D, weights=weights)
|
|
244
|
+
|
|
245
|
+
# Compute the POD decomposition
|
|
246
|
+
phi_POD, Sigma_POD, psi_POD = m.POD()
|
|
247
|
+
|
|
248
|
+
Community guidelines
|
|
249
|
+
---------------------
|
|
250
|
+
|
|
251
|
+
Contributing to MODULO
|
|
252
|
+
^^^^^^^^^^^^^^^^^^^^^^^
|
|
253
|
+
We welcome contributions to MODULO.
|
|
254
|
+
|
|
255
|
+
It is recommended to perform a shallow clone of the repository to avoid downloading the entire history of the project:
|
|
256
|
+
|
|
257
|
+
.. code-block:: bash
|
|
258
|
+
|
|
259
|
+
$ git clone --depth 1 https://github.com/mendezVKI/MODULO.git
|
|
260
|
+
|
|
261
|
+
This will download only the latest version of the repository, which is sufficient for contributing to the project, and will save
|
|
262
|
+
you time and disk space.
|
|
263
|
+
|
|
264
|
+
To create a new feature, please submit a pull request, specifying the proposed changes and
|
|
265
|
+
providing an example of how to use the new feature (that will be included in the `examples/` folder).
|
|
266
|
+
|
|
267
|
+
The pull request will be reviewed by the MODULO team before being merged into the main branch, and your contribution duly acknowledged.
|
|
268
|
+
|
|
269
|
+
Report bugs
|
|
270
|
+
^^^^^^^^^^^^
|
|
271
|
+
If you find a bug, or you encounter unexpected behaviour, please open an issue on the MODULO GitHub repository.
|
|
272
|
+
|
|
273
|
+
Ask for help
|
|
274
|
+
^^^^^^^^^^^^
|
|
275
|
+
If you have troubles using MODULO, or you need help with a specific decomposition, please open an issue on the MODULO GitHub repository.
|
|
276
|
+
|
|
277
|
+
Citation
|
|
278
|
+
--------
|
|
279
|
+
|
|
280
|
+
If you use MODULO in your research, please cite it as follows:
|
|
281
|
+
|
|
282
|
+
Poletti, R., Schena, L., Ninni, D., Mendez, M. A. (2024).
|
|
283
|
+
*MODULO: A Python toolbox for data-driven modal decomposition*.
|
|
284
|
+
Journal of Open Source Software, 9(102), 6753. https://doi.org/10.21105/joss.06753
|
|
285
|
+
|
|
286
|
+
.. code-block:: text
|
|
287
|
+
|
|
288
|
+
@article{Poletti2024,
|
|
289
|
+
doi = {10.21105/joss.06753},
|
|
290
|
+
url = {https://doi.org/10.21105/joss.06753},
|
|
291
|
+
year = {2024},
|
|
292
|
+
publisher = {The Open Journal},
|
|
293
|
+
volume = {9},
|
|
294
|
+
number = {102},
|
|
295
|
+
pages = {6753},
|
|
296
|
+
author = {R. Poletti and L. Schena and D. Ninni and M. A. Mendez},
|
|
297
|
+
title = {MODULO: A Python toolbox for data-driven modal decomposition},
|
|
298
|
+
journal = {Journal of Open Source Software}
|
|
299
|
+
}
|
|
300
|
+
|
|
301
|
+
and
|
|
302
|
+
|
|
303
|
+
Ninni, D., & Mendez, M. A. (2020).
|
|
304
|
+
*MODULO: A software for Multiscale Proper Orthogonal Decomposition of data*.
|
|
305
|
+
SoftwareX, 12, 100622. https://doi.org/10.1016/j.softx.2020.100622
|
|
306
|
+
|
|
307
|
+
.. code-block:: text
|
|
308
|
+
|
|
309
|
+
@article{ninni2020modulo,
|
|
310
|
+
title={MODULO: A software for Multiscale Proper Orthogonal Decomposition of data},
|
|
311
|
+
author={Ninni, Davide and Mendez, Miguel A},
|
|
312
|
+
journal={SoftwareX},
|
|
313
|
+
volume={12},
|
|
314
|
+
pages={100622},
|
|
315
|
+
year={2020},
|
|
316
|
+
publisher={Elsevier}
|
|
317
|
+
}
|
|
318
|
+
|
|
319
|
+
|
|
320
|
+
References
|
|
321
|
+
----------
|
|
322
|
+
|
|
323
|
+
- Mendez, Miguel Alfonso. "Statistical Treatment, Fourier and Modal Decomposition." arXiv preprint arXiv:2201.03847 (2022).
|
|
324
|
+
- Mendez, M. A. (2023) "Generalized and Multiscale Modal Analysis". In : Mendez M.A., Ianiro, A., Noack, B.R., Brunton, S. L. (Eds),
|
|
325
|
+
"Data-Driven Fluid Mechanics: Combining First Principles and Machine Learning". Cambridge University Press, 2023:153-181.
|
|
326
|
+
https://doi.org/10.1017/9781108896214.013. The pre-print is available at https://arxiv.org/abs/2208.12630.
|
|
327
|
+
- Ninni, Davide, and Miguel A. Mendez. "MODULO: A software for Multiscale Proper Orthogonal Decomposition of data." SoftwareX 12 (2020): 100622.
|
|
328
|
+
- Poletti, Romain, Schena, Lorenzo, Ninni, David, and Mendez, Miguel A. "Modulo: A python toolbox for data-driven modal decomposition". Journal of Open Source Software (2024), 9(102), 6753.
|
|
329
|
+
- Mendez, Miguel A. "Linear and nonlinear dimensionality reduction from fluid mechanics to machine learning." Measurement Science and Technology 34.4 (2023): 042001.
|
|
330
|
+
- Briggs, William L., and Van Emden Henson. The DFT: an owner's manual for the discrete Fourier transform. Society for Industrial and Applied Mathematics, 1995.
|
|
331
|
+
- Berkooz, Gal, Philip Holmes, and John L. Lumley. "The proper orthogonal decomposition in the analysis of turbulent flows." Annual review of fluid mechanics 25.1 (1993): 539-575.
|
|
332
|
+
- Sirovich, Lawrence. "Turbulence and the dynamics of coherent structures. III. Dynamics and scaling." Quarterly of Applied mathematics 45.3 (1987): 583-590.
|
|
333
|
+
- Mendez, M. A., M. Balabane, and J-M. Buchlin. "Multi-scale proper orthogonal decomposition of complex fluid flows." Journal of Fluid Mechanics 870 (2019): 988-1036.
|
|
334
|
+
- Schmid, Peter J. "Dynamic mode decomposition of numerical and experimental data." Journal of fluid mechanics 656 (2010): 5-28.
|
|
335
|
+
- Sieber, Moritz, C. Oliver Paschereit, and Kilian Oberleithner. "Spectral proper orthogonal decomposition." Journal of Fluid Mechanics 792 (2016): 798-828.
|
|
336
|
+
- Towne, Aaron, Oliver T. Schmidt, and Tim Colonius. "Spectral proper orthogonal decomposition and its relationship to dynamic mode decomposition and resolvent analysis." Journal of Fluid Mechanics 847 (2018): 821-867.
|
|
337
|
+
- Mika, Sebastian, et al. "Kernel PCA and de-noising in feature spaces." Advances in neural information processing systems 11 (1998).
|
|
338
|
+
|
|
339
|
+
Related projects
|
|
340
|
+
----------------
|
|
341
|
+
MODULO encapsulates a wide range of decomposition techniques, but not all of them. We refer to the project below for an additional set of decomposition techniques:
|
|
342
|
+
|
|
343
|
+
- ModRed, https://github.com/belson17/modred
|
|
344
|
+
|
|
345
|
+
There are also decomposition-specific projects, some of which are listed below:
|
|
346
|
+
|
|
347
|
+
- Rogowski, Marcin, Brandon CY Yeung, Oliver T. Schmidt, Romit Maulik, Lisandro Dalcin, Matteo Parsani, and Gianmarco Mengaldo. "Unlocking massively parallel spectral proper orthogonal decompositions in the PySPOD package." Computer Physics Communications 302 (2024): 109246.
|
|
348
|
+
- Lario, A., Maulik, R., Schmidt, O.T., Rozza, G. and Mengaldo, G., 2022. Neural-network learning of SPOD latent dynamics. Journal of Computational Physics, 468, p.111475.
|
|
349
|
+
- Ichinaga, Andreuzzi, Demo, Tezzele, Lapo, Rozza, Brunton, Kutz. PyDMD: A Python package for robust dynamic mode decomposition. arXiv preprint, 2024.
|
|
350
|
+
- Rogowski, Marcin, et al. "Unlocking massively parallel spectral proper orthogonal decompositions in the PySPOD package." Computer Physics Communications 302 (2024): 109246.
|
|
351
|
+
|
|
352
|
+
|
|
353
|
+
|
|
354
|
+
|
|
355
|
+
|
|
356
|
+
|