zoomy-core 0.1.14__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.
- decorators/decorators.py +25 -0
- fvm/__init__.py +0 -0
- fvm/flux.py +52 -0
- fvm/nonconservative_flux.py +97 -0
- fvm/ode.py +55 -0
- fvm/solver_numpy.py +297 -0
- fvm/timestepping.py +13 -0
- mesh/__init__.py +0 -0
- mesh/mesh.py +1239 -0
- mesh/mesh_extrude.py +168 -0
- mesh/mesh_util.py +487 -0
- misc/__init__.py +0 -0
- misc/custom_types.py +6 -0
- misc/interpolation.py +140 -0
- misc/io.py +448 -0
- misc/logger_config.py +18 -0
- misc/misc.py +218 -0
- model/__init__.py +0 -0
- model/analysis.py +147 -0
- model/basefunction.py +113 -0
- model/basemodel.py +513 -0
- model/boundary_conditions.py +193 -0
- model/initial_conditions.py +171 -0
- model/model.py +65 -0
- model/models/GN.py +70 -0
- model/models/advection.py +53 -0
- model/models/basisfunctions.py +181 -0
- model/models/basismatrices.py +381 -0
- model/models/coupled_constrained.py +60 -0
- model/models/poisson.py +41 -0
- model/models/shallow_moments.py +757 -0
- model/models/shallow_moments_sediment.py +378 -0
- model/models/shallow_moments_topo.py +423 -0
- model/models/shallow_moments_variants.py +1509 -0
- model/models/shallow_water.py +266 -0
- model/models/shallow_water_topo.py +111 -0
- model/models/shear_shallow_flow.py +594 -0
- model/models/sme_turbulent.py +613 -0
- model/models/vam.py +455 -0
- postprocessing/__init__.py +0 -0
- postprocessing/plotting.py +244 -0
- postprocessing/postprocessing.py +75 -0
- preprocessing/__init__.py +0 -0
- preprocessing/openfoam_moments.py +453 -0
- transformation/__init__.py +0 -0
- transformation/helpers.py +25 -0
- transformation/to_amrex.py +241 -0
- transformation/to_c.py +185 -0
- transformation/to_jax.py +14 -0
- transformation/to_numpy.py +118 -0
- transformation/to_openfoam.py +258 -0
- transformation/to_ufl.py +67 -0
- zoomy_core-0.1.14.dist-info/METADATA +52 -0
- zoomy_core-0.1.14.dist-info/RECORD +57 -0
- zoomy_core-0.1.14.dist-info/WHEEL +5 -0
- zoomy_core-0.1.14.dist-info/licenses/LICENSE +674 -0
- zoomy_core-0.1.14.dist-info/top_level.txt +8 -0
|
@@ -0,0 +1,258 @@
|
|
|
1
|
+
import os
|
|
2
|
+
import re
|
|
3
|
+
import textwrap
|
|
4
|
+
import sympy as sp
|
|
5
|
+
from sympy.printing.cxx import CXX11CodePrinter
|
|
6
|
+
|
|
7
|
+
from zoomy_core.misc import misc as misc
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
class FoamPrinter(CXX11CodePrinter):
|
|
11
|
+
"""
|
|
12
|
+
Convert SymPy expressions to OpenFOAM 12 compatible C++ code.
|
|
13
|
+
- Q, Qaux: Foam::List<Foam::scalar>
|
|
14
|
+
- Matrices: Foam::List<Foam::List<Foam::scalar>>
|
|
15
|
+
- Vectors: Foam::vector (.x(), .y(), .z())
|
|
16
|
+
"""
|
|
17
|
+
|
|
18
|
+
def __init__(self, model, *args, **kwargs):
|
|
19
|
+
super().__init__(*args, **kwargs)
|
|
20
|
+
|
|
21
|
+
self.n_dof_q = model.n_variables
|
|
22
|
+
self.n_dof_qaux = model.n_aux_variables
|
|
23
|
+
|
|
24
|
+
# Map variable names to Q[i], Qaux[i]
|
|
25
|
+
self.map_Q = {k: f"Q[{i}]" for i, k in enumerate(model.variables.values())}
|
|
26
|
+
self.map_Qaux = {k: f"Qaux[{i}]" for i, k in enumerate(model.aux_variables.values())}
|
|
27
|
+
self.map_param = {k: str(float(model.parameter_values[i])) for i, k in enumerate(model.parameters.values())}
|
|
28
|
+
|
|
29
|
+
# Map normal/position to n.x(), n.y(), n.z()
|
|
30
|
+
self.map_normal = {k: ["n.x()", "n.y()", "n.z()"][i] for i, k in enumerate(model.normal.values())}
|
|
31
|
+
self.map_position = {k: ["X.x()", "X.y()", "X.z()"][i] for i, k in enumerate(model.position.values())}
|
|
32
|
+
|
|
33
|
+
self._std_regex = re.compile(r'std::([A-Za-z_]\w*)')
|
|
34
|
+
|
|
35
|
+
self._argument_table = {"Q": "const Foam::List<Foam::scalar>& Q",
|
|
36
|
+
"Qaux": "const Foam::List<Foam::scalar>& Qaux",
|
|
37
|
+
"n": "const Foam::vector& n",
|
|
38
|
+
"X": "const Foam::vector& X",
|
|
39
|
+
"time": "const Foam::scalar& time",
|
|
40
|
+
"dX": "const Foam::scalar& dX",
|
|
41
|
+
"z": "const Foam::scalar& z"
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
def create_lambertw(self):
|
|
45
|
+
return textwrap.dedent("""\
|
|
46
|
+
inline Foam::scalar lambertw(const Foam::scalar x)
|
|
47
|
+
{
|
|
48
|
+
// valid for x > -exp(-1)
|
|
49
|
+
Foam::scalar w = (x < 1.0 ? x : log(1.0 + x)); // good initial guess
|
|
50
|
+
for (int i = 0; i < 5; ++i)
|
|
51
|
+
{
|
|
52
|
+
Foam::scalar ew = exp(w);
|
|
53
|
+
Foam::scalar wew = w * ew;
|
|
54
|
+
Foam::scalar diff = wew - x;
|
|
55
|
+
w -= diff / (ew * (w + 1.0) - (w + 2.0) * diff / (2.0 * w + 2.0));
|
|
56
|
+
}
|
|
57
|
+
return w;
|
|
58
|
+
}
|
|
59
|
+
""")
|
|
60
|
+
|
|
61
|
+
def get_function_arguments(self, arguments):
|
|
62
|
+
out = ",\n".join([self._argument_table[arg] for arg in arguments])
|
|
63
|
+
return out
|
|
64
|
+
|
|
65
|
+
# --- Symbol printing --------------------------------------------------
|
|
66
|
+
def _print_Symbol(self, s):
|
|
67
|
+
for m in [self.map_Q, self.map_Qaux, self.map_param, self.map_normal, self.map_position]:
|
|
68
|
+
if s in m:
|
|
69
|
+
return m[s]
|
|
70
|
+
return super()._print_Symbol(s)
|
|
71
|
+
|
|
72
|
+
# --- Pow printing -----------------------------------------------------
|
|
73
|
+
def _print_Pow(self, expr):
|
|
74
|
+
base, exp = expr.as_base_exp()
|
|
75
|
+
if exp.is_Integer:
|
|
76
|
+
n = int(exp)
|
|
77
|
+
if n == 0:
|
|
78
|
+
return "1.0"
|
|
79
|
+
if n == 1:
|
|
80
|
+
return self._print(base)
|
|
81
|
+
if n < 0:
|
|
82
|
+
return f"(1.0 / Foam::pow({self._print(base)}, {abs(n)}))"
|
|
83
|
+
return f"Foam::pow({self._print(base)}, {n})"
|
|
84
|
+
return f"Foam::pow({self._print(base)}, {self._print(exp)})"
|
|
85
|
+
|
|
86
|
+
# Print as a plain C function call "lambertw(...)"
|
|
87
|
+
def _print_LambertW(self, expr):
|
|
88
|
+
return f"lambertw({self._print(expr.args[0])})"
|
|
89
|
+
|
|
90
|
+
# --- Expression conversion --------------------------------------------
|
|
91
|
+
def convert_expression_body(self, expr, target='res'):
|
|
92
|
+
tmp_sym = sp.numbered_symbols('t')
|
|
93
|
+
temps, simplified = sp.cse(expr, symbols=tmp_sym)
|
|
94
|
+
lines = []
|
|
95
|
+
for lhs, rhs in temps:
|
|
96
|
+
lines.append(f"Foam::scalar {self.doprint(lhs)} = {self.doprint(rhs)};")
|
|
97
|
+
for i in range(expr.rows):
|
|
98
|
+
for j in range(expr.cols):
|
|
99
|
+
lines.append(f"{target}[{i}][{j}] = {self.doprint(simplified[0][i, j])};")
|
|
100
|
+
return "\n ".join(lines)
|
|
101
|
+
|
|
102
|
+
# --- Matrix factory ---------------------------------------------------
|
|
103
|
+
def createMatrix(self, rows, cols):
|
|
104
|
+
return f"Foam::List<Foam::List<Foam::scalar>>({rows}, Foam::List<Foam::scalar>({cols}, 0.0))"
|
|
105
|
+
|
|
106
|
+
# --- Header / Footer --------------------------------------------------
|
|
107
|
+
def create_file_header(self, n_dof_q, n_dof_qaux, dim, list_sorted_function_names):
|
|
108
|
+
return textwrap.dedent(f"""\
|
|
109
|
+
#pragma once
|
|
110
|
+
#include "List.H"
|
|
111
|
+
#include "vector.H"
|
|
112
|
+
#include "scalar.H"
|
|
113
|
+
|
|
114
|
+
namespace Model
|
|
115
|
+
{{
|
|
116
|
+
constexpr int n_dof_q = {n_dof_q};
|
|
117
|
+
constexpr int n_dof_qaux = {n_dof_qaux};
|
|
118
|
+
constexpr int dimension = {dim};
|
|
119
|
+
const Foam::List<Foam::word> map_boundary_tag_to_function_index{{ {", ".join(f'"{item}"' for item in list_sorted_function_names)} }};
|
|
120
|
+
""")
|
|
121
|
+
|
|
122
|
+
def create_file_footer(self):
|
|
123
|
+
return "\n} // namespace Model\n"
|
|
124
|
+
|
|
125
|
+
def create_generic_function(self, name, expr, arguments, n_dof_q, n_dof_qaux, target='res'):
|
|
126
|
+
if isinstance(expr, list):
|
|
127
|
+
dim = len(expr)
|
|
128
|
+
return [self.create_function(f"{name}_{d}", expr[i], n_dof_q, n_dof_qaux)
|
|
129
|
+
for i, d in enumerate(['x', 'y', 'z'][:dim])]
|
|
130
|
+
|
|
131
|
+
rows, cols = expr.shape
|
|
132
|
+
body = self.convert_expression_body(expr, target)
|
|
133
|
+
return f"""
|
|
134
|
+
inline Foam::List<Foam::List<Foam::scalar>> {name}(
|
|
135
|
+
{self.get_function_arguments(arguments)})
|
|
136
|
+
{{
|
|
137
|
+
auto {target} = {self.createMatrix(rows, cols)};
|
|
138
|
+
{body}
|
|
139
|
+
return {target};
|
|
140
|
+
}}
|
|
141
|
+
"""
|
|
142
|
+
|
|
143
|
+
# --- Function generators ---------------------------------------------
|
|
144
|
+
def create_function(self, name, expr, n_dof_q, n_dof_qaux, target='res'):
|
|
145
|
+
if isinstance(expr, list):
|
|
146
|
+
dim = len(expr)
|
|
147
|
+
return [self.create_function(f"{name}_{d}", expr[i], n_dof_q, n_dof_qaux)
|
|
148
|
+
for i, d in enumerate(['x', 'y', 'z'][:dim])]
|
|
149
|
+
|
|
150
|
+
rows, cols = expr.shape
|
|
151
|
+
body = self.convert_expression_body(expr, target)
|
|
152
|
+
return f"""
|
|
153
|
+
inline Foam::List<Foam::List<Foam::scalar>> {name}(
|
|
154
|
+
const Foam::List<Foam::scalar>& Q,
|
|
155
|
+
const Foam::List<Foam::scalar>& Qaux)
|
|
156
|
+
{{
|
|
157
|
+
auto {target} = {self.createMatrix(rows, cols)};
|
|
158
|
+
{body}
|
|
159
|
+
return {target};
|
|
160
|
+
}}
|
|
161
|
+
"""
|
|
162
|
+
|
|
163
|
+
def create_function_normal(self, name, expr, n_dof_q, n_dof_qaux, dim, target='res'):
|
|
164
|
+
if isinstance(expr, list):
|
|
165
|
+
return [self.create_function_normal(f"{name}_{d}", expr[i], n_dof_q, n_dof_qaux, dim)
|
|
166
|
+
for i, d in enumerate(['x', 'y', 'z'][:dim])]
|
|
167
|
+
|
|
168
|
+
rows, cols = expr.shape
|
|
169
|
+
body = self.convert_expression_body(expr, target)
|
|
170
|
+
return f"""
|
|
171
|
+
inline Foam::List<Foam::List<Foam::scalar>> {name}(
|
|
172
|
+
const Foam::List<Foam::scalar>& Q,
|
|
173
|
+
const Foam::List<Foam::scalar>& Qaux,
|
|
174
|
+
const Foam::vector& n)
|
|
175
|
+
{{
|
|
176
|
+
auto {target} = {self.createMatrix(rows, cols)};
|
|
177
|
+
{body}
|
|
178
|
+
return {target};
|
|
179
|
+
}}
|
|
180
|
+
"""
|
|
181
|
+
|
|
182
|
+
def create_function_interpolate(self, name, expr, n_dof_q, n_dof_qaux, target='res'):
|
|
183
|
+
rows, cols = expr.shape
|
|
184
|
+
body = self.convert_expression_body(expr, target)
|
|
185
|
+
return f"""
|
|
186
|
+
inline Foam::List<Foam::List<Foam::scalar>> {name}(
|
|
187
|
+
const Foam::List<Foam::scalar>& Q,
|
|
188
|
+
const Foam::List<Foam::scalar>& Qaux,
|
|
189
|
+
const Foam::vector& X)
|
|
190
|
+
{{
|
|
191
|
+
auto {target} = {self.createMatrix(rows, cols)};
|
|
192
|
+
{body}
|
|
193
|
+
return {target};
|
|
194
|
+
}}
|
|
195
|
+
"""
|
|
196
|
+
|
|
197
|
+
def create_function_boundary(self, name, expr, n_dof_q, n_dof_qaux, dim, target='res'):
|
|
198
|
+
rows, cols = expr.shape
|
|
199
|
+
body = self.convert_expression_body(expr, target)
|
|
200
|
+
return f"""
|
|
201
|
+
inline Foam::List<Foam::List<Foam::scalar>> {name}(
|
|
202
|
+
const Foam::List<Foam::scalar>& Q,
|
|
203
|
+
const Foam::List<Foam::scalar>& Qaux,
|
|
204
|
+
const Foam::vector& n,
|
|
205
|
+
const Foam::vector& X,
|
|
206
|
+
const Foam::scalar& time,
|
|
207
|
+
const Foam::scalar& dX)
|
|
208
|
+
{{
|
|
209
|
+
auto {target} = {self.createMatrix(rows, cols)};
|
|
210
|
+
{body}
|
|
211
|
+
return {target};
|
|
212
|
+
}}
|
|
213
|
+
"""
|
|
214
|
+
|
|
215
|
+
# --- Full model generation ------------------------------------------
|
|
216
|
+
def create_model(self, model, additional_writes=None):
|
|
217
|
+
n_dof = model.n_variables
|
|
218
|
+
n_dof_qaux = model.n_aux_variables
|
|
219
|
+
dim = model.dimension
|
|
220
|
+
funcs = []
|
|
221
|
+
funcs.append(self.create_lambertw())
|
|
222
|
+
funcs += self.create_function('flux', model.flux(), n_dof, n_dof_qaux)
|
|
223
|
+
funcs += self.create_function('flux_jacobian', model.flux_jacobian(), n_dof, n_dof_qaux)
|
|
224
|
+
funcs += self.create_function('dflux', model.dflux(), n_dof, n_dof_qaux)
|
|
225
|
+
funcs += self.create_function('dflux_jacobian', model.dflux_jacobian(), n_dof, n_dof_qaux)
|
|
226
|
+
funcs += self.create_function('nonconservative_matrix', model.nonconservative_matrix(), n_dof, n_dof_qaux)
|
|
227
|
+
funcs += self.create_function('quasilinear_matrix', model.quasilinear_matrix(), n_dof, n_dof_qaux)
|
|
228
|
+
funcs.append(self.create_function_normal('eigenvalues', model.eigenvalues(), n_dof, n_dof_qaux, dim))
|
|
229
|
+
funcs.append(self.create_function('left_eigenvectors', model.left_eigenvectors(), n_dof, n_dof_qaux))
|
|
230
|
+
funcs.append(self.create_function('right_eigenvectors', model.right_eigenvectors(), n_dof, n_dof_qaux))
|
|
231
|
+
funcs.append(self.create_function('source', model.source(), n_dof, n_dof_qaux))
|
|
232
|
+
funcs.append(self.create_function('residual', model.residual(), n_dof, n_dof_qaux))
|
|
233
|
+
funcs.append(self.create_function('source_implicit', model.source_implicit(), n_dof, n_dof_qaux))
|
|
234
|
+
funcs.append(self.create_function_interpolate('interpolate', model.project_2d_to_3d(), n_dof, n_dof_qaux))
|
|
235
|
+
funcs.append(self.create_function_boundary(
|
|
236
|
+
'boundary_conditions',
|
|
237
|
+
model.boundary_conditions.get_boundary_condition_function(
|
|
238
|
+
model.time, model.position, model.distance,
|
|
239
|
+
model.variables, model.aux_variables, model.parameters, model.normal),
|
|
240
|
+
n_dof, n_dof_qaux, dim))
|
|
241
|
+
if additional_writes is not None:
|
|
242
|
+
for a in additional_writes:
|
|
243
|
+
funcs.append(self.create_generic_function(
|
|
244
|
+
a['name'], a['expression'], a['arguments'], n_dof, n_dof_qaux))
|
|
245
|
+
|
|
246
|
+
return self.create_file_header(n_dof, n_dof_qaux, dim, model.boundary_conditions.list_sorted_function_names) + "\n".join(funcs) + self.create_file_footer()
|
|
247
|
+
|
|
248
|
+
|
|
249
|
+
def write_code(model, settings, additional_writes=None):
|
|
250
|
+
printer = FoamPrinter(model)
|
|
251
|
+
code = printer.create_model(model, additional_writes=additional_writes)
|
|
252
|
+
main_dir = misc.get_main_directory()
|
|
253
|
+
|
|
254
|
+
path = os.path.join(main_dir, settings.output.directory, ".foam_interface")
|
|
255
|
+
os.makedirs(path, exist_ok=True)
|
|
256
|
+
file_path = os.path.join(path, "Model.H")
|
|
257
|
+
with open(file_path, "w+") as f:
|
|
258
|
+
f.write(code)
|
transformation/to_ufl.py
ADDED
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
from attrs import define
|
|
2
|
+
import ufl
|
|
3
|
+
from zoomy_core.transformation.to_numpy import NumpyRuntimeModel
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
@define(kw_only=False, slots=True, frozen=True)
|
|
8
|
+
class UFLRuntimeModel(NumpyRuntimeModel):
|
|
9
|
+
printer=None
|
|
10
|
+
|
|
11
|
+
module = {
|
|
12
|
+
'ones_like': lambda x: 0*x + 1,
|
|
13
|
+
'zeros_like': lambda x: 0*x,
|
|
14
|
+
'array': ufl.as_vector,
|
|
15
|
+
'squeeze': lambda x: x,
|
|
16
|
+
|
|
17
|
+
# --- Elementary arithmetic ---
|
|
18
|
+
"Abs": abs,
|
|
19
|
+
"sign": ufl.sign,
|
|
20
|
+
"Min": ufl.min_value,
|
|
21
|
+
"Max": ufl.max_value,
|
|
22
|
+
# --- Powers and roots ---
|
|
23
|
+
"sqrt": ufl.sqrt,
|
|
24
|
+
"exp": ufl.exp,
|
|
25
|
+
"ln": ufl.ln,
|
|
26
|
+
"pow": lambda x, y: x**y,
|
|
27
|
+
# --- Trigonometric functions ---
|
|
28
|
+
"sin": ufl.sin,
|
|
29
|
+
"cos": ufl.cos,
|
|
30
|
+
"tan": ufl.tan,
|
|
31
|
+
"asin": ufl.asin,
|
|
32
|
+
"acos": ufl.acos,
|
|
33
|
+
"atan": ufl.atan,
|
|
34
|
+
"atan2": ufl.atan2,
|
|
35
|
+
# --- Hyperbolic functions ---
|
|
36
|
+
"sinh": ufl.sinh,
|
|
37
|
+
"cosh": ufl.cosh,
|
|
38
|
+
"tanh": ufl.tanh,
|
|
39
|
+
# --- Piecewise / conditional logic ---
|
|
40
|
+
"Heaviside": lambda x: ufl.conditional(x >= 0, 1.0, 0.0),
|
|
41
|
+
"Piecewise": ufl.conditional,
|
|
42
|
+
"signum": ufl.sign,
|
|
43
|
+
# --- Vector & tensor ops ---
|
|
44
|
+
"dot": ufl.dot,
|
|
45
|
+
"inner": ufl.inner,
|
|
46
|
+
"outer": ufl.outer,
|
|
47
|
+
"cross": ufl.cross,
|
|
48
|
+
# --- Differential operators (used in forms) ---
|
|
49
|
+
"grad": ufl.grad,
|
|
50
|
+
"div": ufl.div,
|
|
51
|
+
"curl": ufl.curl,
|
|
52
|
+
# --- Common constants ---
|
|
53
|
+
"pi": ufl.pi,
|
|
54
|
+
"E": ufl.e,
|
|
55
|
+
# --- Matrix and linear algebra ---
|
|
56
|
+
"transpose": ufl.transpose,
|
|
57
|
+
"det": ufl.det,
|
|
58
|
+
"inv": ufl.inv,
|
|
59
|
+
"tr": ufl.tr,
|
|
60
|
+
# --- Python builtins (SymPy may emit these) ---
|
|
61
|
+
"abs": abs,
|
|
62
|
+
"min": ufl.min_value,
|
|
63
|
+
"max": ufl.max_value,
|
|
64
|
+
"sqrt": ufl.sqrt,
|
|
65
|
+
"sum": lambda x: ufl.Constant(sum(x)) if isinstance(x, (list, tuple)) else x,
|
|
66
|
+
"ImmutableDenseMatrix": lambda x: x,
|
|
67
|
+
}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: zoomy_core
|
|
3
|
+
Version: 0.1.14
|
|
4
|
+
Summary: A simulation software for dimensionally-reduced free surface flows.
|
|
5
|
+
Author-email: Ingo Steldermann <steldermann@mbd.rwth-aachen.de>
|
|
6
|
+
License: GNU
|
|
7
|
+
Project-URL: Homepage, https://github.com/mbd-rwth/Zoomy
|
|
8
|
+
Project-URL: Documentation, https://mbd-rwth.github.io/Zoomy
|
|
9
|
+
Project-URL: Source, https://github.com/mbd-rwth/Zoomy
|
|
10
|
+
Project-URL: Issues, https://github.com/mbd-rwth/Zoomy/issues
|
|
11
|
+
Keywords: simulation,shallow flow,free surface flow,shallow moments,shallow water,VAM
|
|
12
|
+
Classifier: Programming Language :: Python :: 3
|
|
13
|
+
Classifier: License :: OSI Approved :: GNU General Public License v3 (GPLv3)
|
|
14
|
+
Classifier: Operating System :: OS Independent
|
|
15
|
+
Classifier: Framework :: Jupyter
|
|
16
|
+
Requires-Python: >=3.9
|
|
17
|
+
Description-Content-Type: text/markdown
|
|
18
|
+
License-File: LICENSE
|
|
19
|
+
Requires-Dist: attrs
|
|
20
|
+
Requires-Dist: sympy>=1.14
|
|
21
|
+
Requires-Dist: numpy
|
|
22
|
+
Requires-Dist: scipy
|
|
23
|
+
Requires-Dist: loguru
|
|
24
|
+
Requires-Dist: h5py
|
|
25
|
+
Requires-Dist: matplotlib
|
|
26
|
+
Requires-Dist: meshio
|
|
27
|
+
Requires-Dist: pytest
|
|
28
|
+
Provides-Extra: gui
|
|
29
|
+
Requires-Dist: pyvista; extra == "gui"
|
|
30
|
+
Requires-Dist: trame; extra == "gui"
|
|
31
|
+
Requires-Dist: trame-vtk; extra == "gui"
|
|
32
|
+
Requires-Dist: trame-vuetify; extra == "gui"
|
|
33
|
+
Requires-Dist: panel; extra == "gui"
|
|
34
|
+
Provides-Extra: coupling
|
|
35
|
+
Requires-Dist: precice; extra == "coupling"
|
|
36
|
+
Provides-Extra: testing
|
|
37
|
+
Requires-Dist: swashes; extra == "testing"
|
|
38
|
+
Requires-Dist: pyswashes; extra == "testing"
|
|
39
|
+
Provides-Extra: mesh
|
|
40
|
+
Requires-Dist: gmsh; extra == "mesh"
|
|
41
|
+
Requires-Dist: python-gmsh; extra == "mesh"
|
|
42
|
+
Requires-Dist: rasterio; extra == "mesh"
|
|
43
|
+
Provides-Extra: dev
|
|
44
|
+
Requires-Dist: watchfiles; extra == "dev"
|
|
45
|
+
Requires-Dist: Cython; extra == "dev"
|
|
46
|
+
Requires-Dist: pytest-html; extra == "dev"
|
|
47
|
+
Dynamic: license-file
|
|
48
|
+
|
|
49
|
+
# zoomy-core
|
|
50
|
+
|
|
51
|
+
This repository is a submodule of the the [Zoomy Lab](https://github.com/ZoomyLab/Zoomy) repository.
|
|
52
|
+
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
decorators/decorators.py,sha256=4fmdDDkHKoRFRbxMpTdM3KqDMV-dOL02DH2Ig29cpR0,853
|
|
2
|
+
fvm/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
3
|
+
fvm/flux.py,sha256=5EKXY_xqnH5T5o4cZTC-_SON14WLoXwygel8OTbPdAk,1888
|
|
4
|
+
fvm/nonconservative_flux.py,sha256=80iRIOZ5xiRJ7yeVgzrlf-kNmLlrqnUzQTEZxsHPZyc,3359
|
|
5
|
+
fvm/ode.py,sha256=Cx7DgLoWm7aqIjPtWUhoD9FnScZyPjKSuI4--uaiuU0,1453
|
|
6
|
+
fvm/solver_numpy.py,sha256=y5szY7jz1FQ8kHQip5NvHy3ww4r68bSaz0jFoGa_Om4,10835
|
|
7
|
+
fvm/timestepping.py,sha256=SqYjV0YAj4v5Ug2y7sEdZgF3DRH1lHPDa5BFsXzrm14,405
|
|
8
|
+
mesh/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
9
|
+
mesh/mesh.py,sha256=TKYHl067O0mBvcIKy63epf9Echono7NyFjBUlOuLTDI,50259
|
|
10
|
+
mesh/mesh_extrude.py,sha256=ln9bD5l_BEELUgx--j1I70Wv3tGgdqVcrxcDXKBMVyE,5992
|
|
11
|
+
mesh/mesh_util.py,sha256=IOe5FZ2vhiCTGRsRxUHEoek1o6N2QQAceuLUhuioG_k,16174
|
|
12
|
+
misc/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
13
|
+
misc/custom_types.py,sha256=l1kfQJWPzT0PEvW-8bh4MD4BaIspWmtfQ4Y8Oq2qcT4,141
|
|
14
|
+
misc/interpolation.py,sha256=Z27uhcGRE_BWPm9voUbxHV5Ptj3cJnWd9vAWNqIfGIM,5095
|
|
15
|
+
misc/io.py,sha256=Vz7mRGIGAOgyDLgLOQvu9vVnFVudufr_lXVx_sNHeOg,14559
|
|
16
|
+
misc/logger_config.py,sha256=506zLc8d9hn7b-r55ZWHWWx7GY0NjayVGMLNcNJQr5E,478
|
|
17
|
+
misc/misc.py,sha256=CP2PAGYEfn8LITTSZ7Xm3qQOngzPPW8RymRYN1GnNWo,7521
|
|
18
|
+
model/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
19
|
+
model/analysis.py,sha256=qt7cs3s5ijen5I11ntS3Y5pVPI8ufijjCJj-7Is9YMo,5332
|
|
20
|
+
model/basefunction.py,sha256=XtlKQCkamWnM_ohW0-3PYXrkK0_poIFHMtz-o52JYSo,3542
|
|
21
|
+
model/basemodel.py,sha256=q1vJtqqBnvtB0soDyGWUcZs2AM9VMopWw-M86t1Whwo,16926
|
|
22
|
+
model/boundary_conditions.py,sha256=_TFYppTc9Q8ANXCjsKxcVvNbLyqHKr-VYjdcLZxV3no,6608
|
|
23
|
+
model/initial_conditions.py,sha256=3ZmJeABD1xHb-qZ2tBlIFnHVvHWJxygTgtIw5t7k1oM,5427
|
|
24
|
+
model/model.py,sha256=RvYQig-8aFmUmY6eyUhQ-DZ9U2mc0ods4Zo-tVeERbI,1973
|
|
25
|
+
model/models/GN.py,sha256=ymOlDpn8I5Xzk2GvXm2gvialSWTzxpPSvxzkP0qOMlc,1913
|
|
26
|
+
model/models/advection.py,sha256=G-oDMNbKAahlW90ocyf-HGM55-JX59cMARV8JaRfe_g,2111
|
|
27
|
+
model/models/basisfunctions.py,sha256=ZHeQYXwgpB8YAZ-8l3NYYvi8CSuvFzJ0xiyaai4WsCA,5410
|
|
28
|
+
model/models/basismatrices.py,sha256=W6hJqNhxawfqN3wAFnXvbaclavJ0QKPgs1jeDcPwpUA,13074
|
|
29
|
+
model/models/coupled_constrained.py,sha256=q2qOh7Vf3ryG0rS9VXD4oUDMaHEZ7g74AtgHQePXEC0,1741
|
|
30
|
+
model/models/poisson.py,sha256=B_8qc_6FnEzB91-fdKzWlHo8Jiq1Kmjxp1xBC6YB-ag,1075
|
|
31
|
+
model/models/shallow_moments.py,sha256=kSNxnAQnCmmFBggcXmOh1yVlF_1_8-QxDGLPvajcELo,27098
|
|
32
|
+
model/models/shallow_moments_sediment.py,sha256=rt1ohClioEpPOYO0w1zB9VHGkjP0RWxM4M18BEA00rI,14292
|
|
33
|
+
model/models/shallow_moments_topo.py,sha256=_5KWvT3iUbPU5zAZN4J904b1r5yJiMTFojmeVD7oxsg,17402
|
|
34
|
+
model/models/shallow_moments_variants.py,sha256=NsRF9kaiYxQtV94oOZsMBDFXwzmm_R-rz6fAUuYQRxc,52059
|
|
35
|
+
model/models/shallow_water.py,sha256=1Sn8mVCUiYZue2SvLfGfRMOsfD0G9hL72x_ENdA9QRU,8412
|
|
36
|
+
model/models/shallow_water_topo.py,sha256=Y-ibbM9Hj7gPreZUmTEBcYlhM0AzIiMYKuEeJYi-Pxc,3455
|
|
37
|
+
model/models/shear_shallow_flow.py,sha256=O2JZaK1E8qUPVJHYaTksMDV3IuxD9nez1hHmdKHRJng,17250
|
|
38
|
+
model/models/sme_turbulent.py,sha256=8PzvbSdEYNEaz-9LCvahL_-Gt_tdGv3PPjBqYRz11V4,24048
|
|
39
|
+
model/models/vam.py,sha256=aHI1LCkNQC8g8uEZujp36NYVuaKxfCapl9W-5fSzLWk,15114
|
|
40
|
+
postprocessing/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
41
|
+
postprocessing/plotting.py,sha256=WJs_CCoeiWhGnVXQx8BBVmKxJkVFJYVnmVVdTDjz0J4,7005
|
|
42
|
+
postprocessing/postprocessing.py,sha256=9-c-CJ1jevY74JatSjDRYWzIenxogS7jO3-7Ty_B9k4,2860
|
|
43
|
+
preprocessing/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
44
|
+
preprocessing/openfoam_moments.py,sha256=22SRInpuk57VhWAFNVEPeNMy9F6ka5rnadBxNQSHBGM,14688
|
|
45
|
+
transformation/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
46
|
+
transformation/helpers.py,sha256=KClsyBc0LZNocKzbfknhhYPshA83cDLkzfAKkPGoy1o,915
|
|
47
|
+
transformation/to_amrex.py,sha256=TZofZ9B-1ljIn3EVuMjZW21XJG2inlitGzSXz8LmE94,9639
|
|
48
|
+
transformation/to_c.py,sha256=balvP-qJOqUIgI_cVVq4ie6cz1vd1tzPoljdVJ_nq28,7245
|
|
49
|
+
transformation/to_jax.py,sha256=XkQHMv8hNm9kMcUm8xHZMhlsQqK9_4IDuUw8phFJviU,395
|
|
50
|
+
transformation/to_numpy.py,sha256=cWs4uwg8w8fBHlNUYdayf03crrBYYWxpckxH-0t7tEU,4548
|
|
51
|
+
transformation/to_openfoam.py,sha256=rbh7-p89zWS9Sk8HTm5PjCOV7bk2xK5x_EyVn79a114,10723
|
|
52
|
+
transformation/to_ufl.py,sha256=U4TQpBStlR44bXP8_ochYYDSYk1kZTlpKl-aZ7WNTqw,1991
|
|
53
|
+
zoomy_core-0.1.14.dist-info/licenses/LICENSE,sha256=OXLcl0T2SZ8Pmy2_dmlvKuetivmyPd5m1q-Gyd-zaYY,35149
|
|
54
|
+
zoomy_core-0.1.14.dist-info/METADATA,sha256=3VTd1UVauKzQKKadwu-LmMMWG5WDZBuVGAlyfwQ_y74,1847
|
|
55
|
+
zoomy_core-0.1.14.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
56
|
+
zoomy_core-0.1.14.dist-info/top_level.txt,sha256=a7udeQrjSnc2Y_GED5JOFjl8Cw6ATndPtiX5o1cvcF0,75
|
|
57
|
+
zoomy_core-0.1.14.dist-info/RECORD,,
|