zoomy-core 0.1.0__py3-none-any.whl → 0.1.2__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.

Potentially problematic release.


This version of zoomy-core might be problematic. Click here for more details.

Files changed (57) hide show
  1. zoomy_core/decorators/decorators.py +25 -0
  2. zoomy_core/fvm/flux.py +97 -0
  3. zoomy_core/fvm/nonconservative_flux.py +97 -0
  4. zoomy_core/fvm/ode.py +55 -0
  5. zoomy_core/fvm/solver_numpy.py +305 -0
  6. zoomy_core/fvm/timestepping.py +13 -0
  7. zoomy_core/mesh/gmsh_loader.py +301 -0
  8. zoomy_core/mesh/mesh.py +1192 -0
  9. zoomy_core/mesh/mesh_extrude.py +168 -0
  10. zoomy_core/mesh/mesh_util.py +487 -0
  11. zoomy_core/misc/custom_types.py +6 -0
  12. zoomy_core/misc/gui.py +61 -0
  13. zoomy_core/misc/interpolation.py +140 -0
  14. zoomy_core/misc/io.py +401 -0
  15. zoomy_core/misc/logger_config.py +18 -0
  16. zoomy_core/misc/misc.py +216 -0
  17. zoomy_core/misc/static_class.py +94 -0
  18. zoomy_core/model/analysis.py +147 -0
  19. zoomy_core/model/basefunction.py +113 -0
  20. zoomy_core/model/basemodel.py +512 -0
  21. zoomy_core/model/boundary_conditions.py +193 -0
  22. zoomy_core/model/initial_conditions.py +171 -0
  23. zoomy_core/model/model.py +63 -0
  24. zoomy_core/model/models/GN.py +70 -0
  25. zoomy_core/model/models/advection.py +53 -0
  26. zoomy_core/model/models/basisfunctions.py +181 -0
  27. zoomy_core/model/models/basismatrices.py +377 -0
  28. zoomy_core/model/models/core.py +564 -0
  29. zoomy_core/model/models/coupled_constrained.py +60 -0
  30. zoomy_core/model/models/old_smm copy.py +867 -0
  31. zoomy_core/model/models/poisson.py +41 -0
  32. zoomy_core/model/models/shallow_moments.py +757 -0
  33. zoomy_core/model/models/shallow_moments_sediment.py +378 -0
  34. zoomy_core/model/models/shallow_moments_topo.py +423 -0
  35. zoomy_core/model/models/shallow_moments_variants.py +1509 -0
  36. zoomy_core/model/models/shallow_water.py +266 -0
  37. zoomy_core/model/models/shallow_water_topo.py +111 -0
  38. zoomy_core/model/models/shear_shallow_flow.py +594 -0
  39. zoomy_core/model/models/sme_turbulent.py +613 -0
  40. zoomy_core/model/models/swe_old.py +1018 -0
  41. zoomy_core/model/models/vam.py +455 -0
  42. zoomy_core/postprocessing/postprocessing.py +72 -0
  43. zoomy_core/preprocessing/openfoam_moments.py +452 -0
  44. zoomy_core/transformation/helpers.py +25 -0
  45. zoomy_core/transformation/to_amrex.py +238 -0
  46. zoomy_core/transformation/to_c.py +181 -0
  47. zoomy_core/transformation/to_jax.py +14 -0
  48. zoomy_core/transformation/to_numpy.py +115 -0
  49. zoomy_core/transformation/to_openfoam.py +254 -0
  50. zoomy_core/transformation/to_ufl.py +67 -0
  51. {zoomy_core-0.1.0.dist-info → zoomy_core-0.1.2.dist-info}/METADATA +1 -1
  52. zoomy_core-0.1.2.dist-info/RECORD +55 -0
  53. zoomy_core-0.1.2.dist-info/top_level.txt +1 -0
  54. zoomy_core-0.1.0.dist-info/RECORD +0 -5
  55. zoomy_core-0.1.0.dist-info/top_level.txt +0 -1
  56. {zoomy_core-0.1.0.dist-info → zoomy_core-0.1.2.dist-info}/WHEEL +0 -0
  57. {zoomy_core-0.1.0.dist-info → zoomy_core-0.1.2.dist-info}/licenses/LICENSE +0 -0
@@ -0,0 +1,254 @@
1
+ import os
2
+ import re
3
+ import textwrap
4
+ import sympy as sp
5
+ from sympy.printing.cxx import CXX11CodePrinter
6
+
7
+ class FoamPrinter(CXX11CodePrinter):
8
+ """
9
+ Convert SymPy expressions to OpenFOAM 12 compatible C++ code.
10
+ - Q, Qaux: Foam::List<Foam::scalar>
11
+ - Matrices: Foam::List<Foam::List<Foam::scalar>>
12
+ - Vectors: Foam::vector (.x(), .y(), .z())
13
+ """
14
+
15
+ def __init__(self, model, *args, **kwargs):
16
+ super().__init__(*args, **kwargs)
17
+
18
+ self.n_dof_q = model.n_variables
19
+ self.n_dof_qaux = model.n_aux_variables
20
+
21
+ # Map variable names to Q[i], Qaux[i]
22
+ self.map_Q = {k: f"Q[{i}]" for i, k in enumerate(model.variables.values())}
23
+ self.map_Qaux = {k: f"Qaux[{i}]" for i, k in enumerate(model.aux_variables.values())}
24
+ self.map_param = {k: str(float(model.parameter_values[i])) for i, k in enumerate(model.parameters.values())}
25
+
26
+ # Map normal/position to n.x(), n.y(), n.z()
27
+ self.map_normal = {k: ["n.x()", "n.y()", "n.z()"][i] for i, k in enumerate(model.normal.values())}
28
+ self.map_position = {k: ["X.x()", "X.y()", "X.z()"][i] for i, k in enumerate(model.position.values())}
29
+
30
+ self._std_regex = re.compile(r'std::([A-Za-z_]\w*)')
31
+
32
+ self._argument_table = {"Q": "const Foam::List<Foam::scalar>& Q",
33
+ "Qaux": "const Foam::List<Foam::scalar>& Qaux",
34
+ "n": "const Foam::vector& n",
35
+ "X": "const Foam::vector& X",
36
+ "time": "const Foam::scalar& time",
37
+ "dX": "const Foam::scalar& dX",
38
+ "z": "const Foam::scalar& z"
39
+ }
40
+
41
+ def create_lambertw(self):
42
+ return textwrap.dedent("""\
43
+ inline Foam::scalar lambertw(const Foam::scalar x)
44
+ {
45
+ // valid for x > -exp(-1)
46
+ Foam::scalar w = (x < 1.0 ? x : log(1.0 + x)); // good initial guess
47
+ for (int i = 0; i < 5; ++i)
48
+ {
49
+ Foam::scalar ew = exp(w);
50
+ Foam::scalar wew = w * ew;
51
+ Foam::scalar diff = wew - x;
52
+ w -= diff / (ew * (w + 1.0) - (w + 2.0) * diff / (2.0 * w + 2.0));
53
+ }
54
+ return w;
55
+ }
56
+ """)
57
+
58
+ def get_function_arguments(self, arguments):
59
+ out = ",\n".join([self._argument_table[arg] for arg in arguments])
60
+ return out
61
+
62
+ # --- Symbol printing --------------------------------------------------
63
+ def _print_Symbol(self, s):
64
+ for m in [self.map_Q, self.map_Qaux, self.map_param, self.map_normal, self.map_position]:
65
+ if s in m:
66
+ return m[s]
67
+ return super()._print_Symbol(s)
68
+
69
+ # --- Pow printing -----------------------------------------------------
70
+ def _print_Pow(self, expr):
71
+ base, exp = expr.as_base_exp()
72
+ if exp.is_Integer:
73
+ n = int(exp)
74
+ if n == 0:
75
+ return "1.0"
76
+ if n == 1:
77
+ return self._print(base)
78
+ if n < 0:
79
+ return f"(1.0 / Foam::pow({self._print(base)}, {abs(n)}))"
80
+ return f"Foam::pow({self._print(base)}, {n})"
81
+ return f"Foam::pow({self._print(base)}, {self._print(exp)})"
82
+
83
+ # Print as a plain C function call "lambertw(...)"
84
+ def _print_LambertW(self, expr):
85
+ return f"lambertw({self._print(expr.args[0])})"
86
+
87
+ # --- Expression conversion --------------------------------------------
88
+ def convert_expression_body(self, expr, target='res'):
89
+ tmp_sym = sp.numbered_symbols('t')
90
+ temps, simplified = sp.cse(expr, symbols=tmp_sym)
91
+ lines = []
92
+ for lhs, rhs in temps:
93
+ lines.append(f"Foam::scalar {self.doprint(lhs)} = {self.doprint(rhs)};")
94
+ for i in range(expr.rows):
95
+ for j in range(expr.cols):
96
+ lines.append(f"{target}[{i}][{j}] = {self.doprint(simplified[0][i, j])};")
97
+ return "\n ".join(lines)
98
+
99
+ # --- Matrix factory ---------------------------------------------------
100
+ def createMatrix(self, rows, cols):
101
+ return f"Foam::List<Foam::List<Foam::scalar>>({rows}, Foam::List<Foam::scalar>({cols}, 0.0))"
102
+
103
+ # --- Header / Footer --------------------------------------------------
104
+ def create_file_header(self, n_dof_q, n_dof_qaux, dim, list_sorted_function_names):
105
+ return textwrap.dedent(f"""\
106
+ #pragma once
107
+ #include "List.H"
108
+ #include "vector.H"
109
+ #include "scalar.H"
110
+
111
+ namespace Model
112
+ {{
113
+ constexpr int n_dof_q = {n_dof_q};
114
+ constexpr int n_dof_qaux = {n_dof_qaux};
115
+ constexpr int dimension = {dim};
116
+ const Foam::List<Foam::word> map_boundary_tag_to_function_index{{ {", ".join(f'"{item}"' for item in list_sorted_function_names)} }};
117
+ """)
118
+
119
+ def create_file_footer(self):
120
+ return "\n} // namespace Model\n"
121
+
122
+ def create_generic_function(self, name, expr, arguments, n_dof_q, n_dof_qaux, target='res'):
123
+ if isinstance(expr, list):
124
+ dim = len(expr)
125
+ return [self.create_function(f"{name}_{d}", expr[i], n_dof_q, n_dof_qaux)
126
+ for i, d in enumerate(['x', 'y', 'z'][:dim])]
127
+
128
+ rows, cols = expr.shape
129
+ body = self.convert_expression_body(expr, target)
130
+ return f"""
131
+ inline Foam::List<Foam::List<Foam::scalar>> {name}(
132
+ {self.get_function_arguments(arguments)})
133
+ {{
134
+ auto {target} = {self.createMatrix(rows, cols)};
135
+ {body}
136
+ return {target};
137
+ }}
138
+ """
139
+
140
+ # --- Function generators ---------------------------------------------
141
+ def create_function(self, name, expr, n_dof_q, n_dof_qaux, target='res'):
142
+ if isinstance(expr, list):
143
+ dim = len(expr)
144
+ return [self.create_function(f"{name}_{d}", expr[i], n_dof_q, n_dof_qaux)
145
+ for i, d in enumerate(['x', 'y', 'z'][:dim])]
146
+
147
+ rows, cols = expr.shape
148
+ body = self.convert_expression_body(expr, target)
149
+ return f"""
150
+ inline Foam::List<Foam::List<Foam::scalar>> {name}(
151
+ const Foam::List<Foam::scalar>& Q,
152
+ const Foam::List<Foam::scalar>& Qaux)
153
+ {{
154
+ auto {target} = {self.createMatrix(rows, cols)};
155
+ {body}
156
+ return {target};
157
+ }}
158
+ """
159
+
160
+ def create_function_normal(self, name, expr, n_dof_q, n_dof_qaux, dim, target='res'):
161
+ if isinstance(expr, list):
162
+ return [self.create_function_normal(f"{name}_{d}", expr[i], n_dof_q, n_dof_qaux, dim)
163
+ for i, d in enumerate(['x', 'y', 'z'][:dim])]
164
+
165
+ rows, cols = expr.shape
166
+ body = self.convert_expression_body(expr, target)
167
+ return f"""
168
+ inline Foam::List<Foam::List<Foam::scalar>> {name}(
169
+ const Foam::List<Foam::scalar>& Q,
170
+ const Foam::List<Foam::scalar>& Qaux,
171
+ const Foam::vector& n)
172
+ {{
173
+ auto {target} = {self.createMatrix(rows, cols)};
174
+ {body}
175
+ return {target};
176
+ }}
177
+ """
178
+
179
+ def create_function_interpolate(self, name, expr, n_dof_q, n_dof_qaux, target='res'):
180
+ rows, cols = expr.shape
181
+ body = self.convert_expression_body(expr, target)
182
+ return f"""
183
+ inline Foam::List<Foam::List<Foam::scalar>> {name}(
184
+ const Foam::List<Foam::scalar>& Q,
185
+ const Foam::List<Foam::scalar>& Qaux,
186
+ const Foam::vector& X)
187
+ {{
188
+ auto {target} = {self.createMatrix(rows, cols)};
189
+ {body}
190
+ return {target};
191
+ }}
192
+ """
193
+
194
+ def create_function_boundary(self, name, expr, n_dof_q, n_dof_qaux, dim, target='res'):
195
+ rows, cols = expr.shape
196
+ body = self.convert_expression_body(expr, target)
197
+ return f"""
198
+ inline Foam::List<Foam::List<Foam::scalar>> {name}(
199
+ const Foam::List<Foam::scalar>& Q,
200
+ const Foam::List<Foam::scalar>& Qaux,
201
+ const Foam::vector& n,
202
+ const Foam::vector& X,
203
+ const Foam::scalar& time,
204
+ const Foam::scalar& dX)
205
+ {{
206
+ auto {target} = {self.createMatrix(rows, cols)};
207
+ {body}
208
+ return {target};
209
+ }}
210
+ """
211
+
212
+ # --- Full model generation ------------------------------------------
213
+ def create_model(self, model, additional_writes=None):
214
+ n_dof = model.n_variables
215
+ n_dof_qaux = model.n_aux_variables
216
+ dim = model.dimension
217
+ funcs = []
218
+ funcs.append(self.create_lambertw())
219
+ funcs += self.create_function('flux', model.flux(), n_dof, n_dof_qaux)
220
+ funcs += self.create_function('flux_jacobian', model.flux_jacobian(), n_dof, n_dof_qaux)
221
+ funcs += self.create_function('dflux', model.dflux(), n_dof, n_dof_qaux)
222
+ funcs += self.create_function('dflux_jacobian', model.dflux_jacobian(), n_dof, n_dof_qaux)
223
+ funcs += self.create_function('nonconservative_matrix', model.nonconservative_matrix(), n_dof, n_dof_qaux)
224
+ funcs += self.create_function('quasilinear_matrix', model.quasilinear_matrix(), n_dof, n_dof_qaux)
225
+ funcs.append(self.create_function_normal('eigenvalues', model.eigenvalues(), n_dof, n_dof_qaux, dim))
226
+ funcs.append(self.create_function('left_eigenvectors', model.left_eigenvectors(), n_dof, n_dof_qaux))
227
+ funcs.append(self.create_function('right_eigenvectors', model.right_eigenvectors(), n_dof, n_dof_qaux))
228
+ funcs.append(self.create_function('source', model.source(), n_dof, n_dof_qaux))
229
+ funcs.append(self.create_function('residual', model.residual(), n_dof, n_dof_qaux))
230
+ funcs.append(self.create_function('source_implicit', model.source_implicit(), n_dof, n_dof_qaux))
231
+ funcs.append(self.create_function_interpolate('interpolate', model.project_2d_to_3d(), n_dof, n_dof_qaux))
232
+ funcs.append(self.create_function_boundary(
233
+ 'boundary_conditions',
234
+ model.boundary_conditions.get_boundary_condition_function(
235
+ model.time, model.position, model.distance,
236
+ model.variables, model.aux_variables, model.parameters, model.normal),
237
+ n_dof, n_dof_qaux, dim))
238
+ if additional_writes is not None:
239
+ for a in additional_writes:
240
+ funcs.append(self.create_generic_function(
241
+ a['name'], a['expression'], a['arguments'], n_dof, n_dof_qaux))
242
+
243
+ 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()
244
+
245
+
246
+ def write_code(model, settings, additional_writes=None):
247
+ printer = FoamPrinter(model)
248
+ code = printer.create_model(model, additional_writes=additional_writes)
249
+ main_dir = os.getenv("ZOOMY_DIR")
250
+ path = os.path.join(main_dir, settings.output.directory, ".foam_interface")
251
+ os.makedirs(path, exist_ok=True)
252
+ file_path = os.path.join(path, "Model.H")
253
+ with open(file_path, "w+") as f:
254
+ f.write(code)
@@ -0,0 +1,67 @@
1
+ from attrs import define
2
+ import ufl
3
+ from library.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
+ }
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: zoomy_core
3
- Version: 0.1.0
3
+ Version: 0.1.2
4
4
  Summary: A simulation software for dimensionally-reduced free surface flows.
5
5
  Author-email: Ingo Steldermann <steldermann@mbd.rwth-aachen.de>
6
6
  License: GNU
@@ -0,0 +1,55 @@
1
+ zoomy_core/decorators/decorators.py,sha256=4fmdDDkHKoRFRbxMpTdM3KqDMV-dOL02DH2Ig29cpR0,853
2
+ zoomy_core/fvm/flux.py,sha256=hO5SYSSuPLJDiNs58ZrQHWZ5uhki94UPYxgNPlmw2yU,2696
3
+ zoomy_core/fvm/nonconservative_flux.py,sha256=l7jga6rNnchzrpW9Q0bTvyuxmdI0u8mprYubZJss9Qc,3412
4
+ zoomy_core/fvm/ode.py,sha256=Cx7DgLoWm7aqIjPtWUhoD9FnScZyPjKSuI4--uaiuU0,1453
5
+ zoomy_core/fvm/solver_numpy.py,sha256=CvcjKFRnZBCPbcPf-bUF_jVzr--_Tpa58fU3rgul1Ck,11523
6
+ zoomy_core/fvm/timestepping.py,sha256=SqYjV0YAj4v5Ug2y7sEdZgF3DRH1lHPDa5BFsXzrm14,405
7
+ zoomy_core/mesh/gmsh_loader.py,sha256=weW62smAmlr6wcIiqzDSiNkKppCVRQ9zDS-rpaOHYkY,9610
8
+ zoomy_core/mesh/mesh.py,sha256=vtxcgi5EkOxtAQwWlmx6TGUNEaw4Z48aAuLEGD7bW80,49134
9
+ zoomy_core/mesh/mesh_extrude.py,sha256=ln9bD5l_BEELUgx--j1I70Wv3tGgdqVcrxcDXKBMVyE,5992
10
+ zoomy_core/mesh/mesh_util.py,sha256=IOe5FZ2vhiCTGRsRxUHEoek1o6N2QQAceuLUhuioG_k,16174
11
+ zoomy_core/misc/custom_types.py,sha256=l1kfQJWPzT0PEvW-8bh4MD4BaIspWmtfQ4Y8Oq2qcT4,141
12
+ zoomy_core/misc/gui.py,sha256=xpmluxsMsFVtyUhs412JrWk1-YA_CHbL0kPcopQep_o,2024
13
+ zoomy_core/misc/interpolation.py,sha256=pWtKT9KCOIA8zikJdWnPRDFNVMK_5ko2rjx9ZQA1dnY,5111
14
+ zoomy_core/misc/io.py,sha256=KiY85umLarqFyMSTjYxE0sB19-3oD1UFBmkb_eZgDcg,14072
15
+ zoomy_core/misc/logger_config.py,sha256=506zLc8d9hn7b-r55ZWHWWx7GY0NjayVGMLNcNJQr5E,478
16
+ zoomy_core/misc/misc.py,sha256=3STgN-YrnFkhZfHUEzFVyRqPD4G1rBbsc9nbpUpNZLg,7526
17
+ zoomy_core/misc/static_class.py,sha256=SkvMefakhKENEQMzigGYAPDZjhGl1AvNo22tcHXxKSM,2658
18
+ zoomy_core/model/analysis.py,sha256=qt7cs3s5ijen5I11ntS3Y5pVPI8ufijjCJj-7Is9YMo,5332
19
+ zoomy_core/model/basefunction.py,sha256=uNl5jU0FtOCbYbBU_70L8RrdPFKsNYcnJKHwl6aBKtE,3550
20
+ zoomy_core/model/basemodel.py,sha256=R97gmFKUCVtzBZ-2nqbpEQXx_PxtCTTTyyyCGDzsIuE,16923
21
+ zoomy_core/model/boundary_conditions.py,sha256=YSHu5XG3hRKwXNsOZmCnBcjvgK0eZrd8VoIhZ588kM4,6635
22
+ zoomy_core/model/initial_conditions.py,sha256=etU0wbq_ZaAsenVNddBroUo8ga6_xLJmKNZQ12Z0IiY,5467
23
+ zoomy_core/model/model.py,sha256=GUYUW-UnzJdZLOG8DAFaUdtTeKg40tiCvGMcFy3rxXw,1976
24
+ zoomy_core/model/models/GN.py,sha256=Qaki-68uZZlW4ApmVNskTl03QLnNFpir0grhkV76DpU,1945
25
+ zoomy_core/model/models/advection.py,sha256=nYzWL1djx0aleZ1acM0-nS2T14l4vkuPZEb7kkzizCA,2151
26
+ zoomy_core/model/models/basisfunctions.py,sha256=ZHeQYXwgpB8YAZ-8l3NYYvi8CSuvFzJ0xiyaai4WsCA,5410
27
+ zoomy_core/model/models/basismatrices.py,sha256=gimOx2XXqHGy6tFsVj6fXh2QxEO6lcW-o7VqP-PmSLk,13032
28
+ zoomy_core/model/models/core.py,sha256=Tjc2kX0DfwgK_KtYnb60Y0YlTWpHm1hylzArk3lbieo,19350
29
+ zoomy_core/model/models/coupled_constrained.py,sha256=wF9yHsRCKg0rLtrlwxYr0yYDE1nON1JlalHL3ZD4U7c,1765
30
+ zoomy_core/model/models/old_smm copy.py,sha256=XmFVcjq7ytdQNOEnl6ARNW5NBIRuz_7nG2rIpTP3WUk,31465
31
+ zoomy_core/model/models/poisson.py,sha256=-EoZDfHI15ZIJSxKiE6DeNkAAaS91nQdwKa4olFObL0,1107
32
+ zoomy_core/model/models/shallow_moments.py,sha256=H9pmnzwInBf8OvFblHxoYPKBUMgByAfXKFe1QtBE0n8,27138
33
+ zoomy_core/model/models/shallow_moments_sediment.py,sha256=jfDrC8Lk-KQr-tW9pcoX38WTRZCEBRDaH0Lw1AU8qxA,14300
34
+ zoomy_core/model/models/shallow_moments_topo.py,sha256=32cxlYt3cib-Ex8dNtau-IVCLqFfxDeOYQkUeXzNH6U,17434
35
+ zoomy_core/model/models/shallow_moments_variants.py,sha256=yqOywfZj1yh5yneEBjbh06zHouiPEA7d-iR5zPap-1Q,52091
36
+ zoomy_core/model/models/shallow_water.py,sha256=j3WwmAxVvF1YzyLBg5sUdERxk2yk4j0pywfkViJyO2o,8452
37
+ zoomy_core/model/models/shallow_water_topo.py,sha256=vQKRBJwLBuYuFWtZXPfQwAeas0qhH1FMBnin6KVmTFg,3495
38
+ zoomy_core/model/models/shear_shallow_flow.py,sha256=kB-EjPLwPxx265cDDA4fobFZwKBfGPlScBTGTfZH_T4,17266
39
+ zoomy_core/model/models/sme_turbulent.py,sha256=GavPnWjfCsqmwA5T814hskQHfe0FI4_ha2cxw2fPYh8,24080
40
+ zoomy_core/model/models/swe_old.py,sha256=xrMIi3HTe0SUMr54ENwxlQg7UuTMVeS1Q2ebEWdsD08,31773
41
+ zoomy_core/model/models/vam.py,sha256=4b-79jy6k-oPePjf6SE6ddJPd5NHTiPKtQfn6Z-qERo,15138
42
+ zoomy_core/postprocessing/postprocessing.py,sha256=AratOPHlinDZEx2atCMO_sOsVdzDX9X8lVc-3sR9Vks,2846
43
+ zoomy_core/preprocessing/openfoam_moments.py,sha256=IuqZNyB7uXFnfateFV8au6kUT1tymS3GL6aoBQLyU7k,14708
44
+ zoomy_core/transformation/helpers.py,sha256=wsuAC7FX5aX0q9eYkAvl_3LOvkTn7csZMfqzHNbmztI,923
45
+ zoomy_core/transformation/to_amrex.py,sha256=lLy0vWJCFWpVeoRxCF2KlQIIGt1HYifKIAgpthhcCIU,9617
46
+ zoomy_core/transformation/to_c.py,sha256=a_22vacgMvSZTCsrr1XAZqD0SqVYgKbp25HnoBBZxjE,7198
47
+ zoomy_core/transformation/to_jax.py,sha256=XlGqqpJpIyt9UMZhfNJPndjOTQviS2a-goAD6wifdTk,403
48
+ zoomy_core/transformation/to_numpy.py,sha256=SqT1QKujMB0L_BtV0aaGVyEFxsg-oRW9q8qVQ6SrBkM,4738
49
+ zoomy_core/transformation/to_openfoam.py,sha256=KykbKVsr6ktPSjG2C1YYr9K1g1Adugd1GVOLymBsf9g,10676
50
+ zoomy_core/transformation/to_ufl.py,sha256=U7NMMo25WK6XF5_9EVocDzQYohzAvSSgxaMOfrkNX9c,1999
51
+ zoomy_core-0.1.2.dist-info/licenses/LICENSE,sha256=OXLcl0T2SZ8Pmy2_dmlvKuetivmyPd5m1q-Gyd-zaYY,35149
52
+ zoomy_core-0.1.2.dist-info/METADATA,sha256=YXxI-Q8zW_jNnVPqdYPFC7En6gEPjHzQQAfoSUozj5M,5519
53
+ zoomy_core-0.1.2.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
54
+ zoomy_core-0.1.2.dist-info/top_level.txt,sha256=NCamZmp9nka6uLXNdAbb47vtoiLmvm3uBKvaBuUdfdQ,11
55
+ zoomy_core-0.1.2.dist-info/RECORD,,
@@ -0,0 +1 @@
1
+ zoomy_core
@@ -1,5 +0,0 @@
1
- zoomy_core-0.1.0.dist-info/licenses/LICENSE,sha256=OXLcl0T2SZ8Pmy2_dmlvKuetivmyPd5m1q-Gyd-zaYY,35149
2
- zoomy_core-0.1.0.dist-info/METADATA,sha256=PttAX5FbKRiBycnZDdkXuDOYyadoSBeXe743B4A6_gE,5519
3
- zoomy_core-0.1.0.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
4
- zoomy_core-0.1.0.dist-info/top_level.txt,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1
5
- zoomy_core-0.1.0.dist-info/RECORD,,
@@ -1 +0,0 @@
1
-