fluxfem 0.1.3__py3-none-any.whl → 0.2.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.
- fluxfem/__init__.py +136 -161
- fluxfem/core/__init__.py +172 -41
- fluxfem/core/assembly.py +676 -91
- fluxfem/core/basis.py +73 -52
- fluxfem/core/context_types.py +36 -0
- fluxfem/core/dtypes.py +9 -1
- fluxfem/core/forms.py +15 -1
- fluxfem/core/mixed_assembly.py +263 -0
- fluxfem/core/mixed_space.py +348 -0
- fluxfem/core/mixed_weakform.py +97 -0
- fluxfem/core/solver.py +2 -0
- fluxfem/core/space.py +262 -17
- fluxfem/core/weakform.py +1503 -312
- fluxfem/helpers_wf.py +53 -0
- fluxfem/mesh/__init__.py +54 -2
- fluxfem/mesh/base.py +322 -8
- fluxfem/mesh/contact.py +825 -0
- fluxfem/mesh/dtypes.py +12 -0
- fluxfem/mesh/hex.py +18 -16
- fluxfem/mesh/io.py +8 -4
- fluxfem/mesh/mortar.py +3907 -0
- fluxfem/mesh/supermesh.py +316 -0
- fluxfem/mesh/surface.py +22 -4
- fluxfem/mesh/tet.py +10 -4
- fluxfem/physics/diffusion.py +3 -0
- fluxfem/physics/elasticity/hyperelastic.py +3 -0
- fluxfem/physics/elasticity/linear.py +9 -2
- fluxfem/solver/__init__.py +42 -2
- fluxfem/solver/bc.py +38 -2
- fluxfem/solver/block_matrix.py +132 -0
- fluxfem/solver/block_system.py +454 -0
- fluxfem/solver/cg.py +115 -33
- fluxfem/solver/dirichlet.py +334 -4
- fluxfem/solver/newton.py +237 -60
- fluxfem/solver/petsc.py +439 -0
- fluxfem/solver/preconditioner.py +106 -0
- fluxfem/solver/result.py +18 -0
- fluxfem/solver/solve_runner.py +168 -1
- fluxfem/solver/solver.py +12 -1
- fluxfem/solver/sparse.py +124 -9
- fluxfem-0.2.0.dist-info/METADATA +303 -0
- fluxfem-0.2.0.dist-info/RECORD +59 -0
- fluxfem-0.1.3.dist-info/METADATA +0 -125
- fluxfem-0.1.3.dist-info/RECORD +0 -47
- {fluxfem-0.1.3.dist-info → fluxfem-0.2.0.dist-info}/LICENSE +0 -0
- {fluxfem-0.1.3.dist-info → fluxfem-0.2.0.dist-info}/WHEEL +0 -0
fluxfem/core/__init__.py
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
from .forms import FormContext, MixedFormContext, FieldPair, ElementVector, vector_load_form
|
|
2
|
+
from .context_types import VolumeContext, SurfaceContext
|
|
2
3
|
from .space import (
|
|
3
4
|
FESpaceBase,
|
|
4
5
|
FESpace,
|
|
@@ -16,6 +17,7 @@ from .space import (
|
|
|
16
17
|
make_hex27_space,
|
|
17
18
|
make_hex27_space_pytree,
|
|
18
19
|
)
|
|
20
|
+
from .mixed_space import MixedFESpace, MixedProblem, MixedDirichletBC, MixedBlockSystem
|
|
19
21
|
from .data import MeshData, BasisData, SpaceData
|
|
20
22
|
from .basis import (
|
|
21
23
|
make_hex_basis,
|
|
@@ -37,20 +39,24 @@ from .assembly import (
|
|
|
37
39
|
assemble_jacobian,
|
|
38
40
|
assemble_residual_scatter,
|
|
39
41
|
assemble_jacobian_scatter,
|
|
40
|
-
|
|
41
|
-
|
|
42
|
+
assemble_residual_elementwise,
|
|
43
|
+
assemble_jacobian_elementwise,
|
|
42
44
|
make_element_residual_kernel,
|
|
45
|
+
make_element_bilinear_kernel,
|
|
46
|
+
make_element_linear_kernel,
|
|
43
47
|
make_element_jacobian_kernel,
|
|
48
|
+
make_element_kernel,
|
|
44
49
|
element_residual,
|
|
45
50
|
element_jacobian,
|
|
46
51
|
make_sparsity_pattern,
|
|
52
|
+
chunk_pad_stats,
|
|
53
|
+
BatchedAssembler,
|
|
47
54
|
assemble_jacobian_values,
|
|
48
55
|
assemble_mass_matrix,
|
|
49
56
|
scalar_body_force_form,
|
|
50
57
|
make_scalar_body_force_form,
|
|
51
58
|
constant_body_force_form,
|
|
52
59
|
)
|
|
53
|
-
from ..physics.elasticity.linear import vector_body_force_form, constant_body_force_vector_form
|
|
54
60
|
from .interp import eval_shape_functions_hex8, interpolate_field_at_element_points
|
|
55
61
|
from .weakform import (
|
|
56
62
|
Expr,
|
|
@@ -59,18 +65,24 @@ from .weakform import (
|
|
|
59
65
|
trial_ref,
|
|
60
66
|
test_ref,
|
|
61
67
|
unknown_ref,
|
|
68
|
+
zero_ref,
|
|
62
69
|
Params,
|
|
63
70
|
LinearForm,
|
|
64
71
|
BilinearForm,
|
|
65
72
|
ResidualForm,
|
|
73
|
+
kernel,
|
|
66
74
|
compile_surface_linear,
|
|
75
|
+
compile_surface_bilinear,
|
|
76
|
+
compile_mixed_surface_residual,
|
|
67
77
|
MixedWeakForm,
|
|
78
|
+
make_mixed_residuals,
|
|
68
79
|
compile_bilinear,
|
|
69
80
|
compile_linear,
|
|
70
81
|
compile_residual,
|
|
71
82
|
compile_mixed_residual,
|
|
72
83
|
grad,
|
|
73
84
|
sym_grad,
|
|
85
|
+
outer,
|
|
74
86
|
dot,
|
|
75
87
|
sdot,
|
|
76
88
|
ddot,
|
|
@@ -87,10 +99,12 @@ from .weakform import (
|
|
|
87
99
|
log,
|
|
88
100
|
transpose_last2,
|
|
89
101
|
matmul,
|
|
102
|
+
matmul_std,
|
|
90
103
|
einsum,
|
|
91
104
|
)
|
|
92
105
|
from ..mesh import (
|
|
93
106
|
BaseMeshPytree,
|
|
107
|
+
SurfaceWithFacetMap,
|
|
94
108
|
bbox_predicate,
|
|
95
109
|
plane_predicate,
|
|
96
110
|
axis_plane_predicate,
|
|
@@ -100,6 +114,10 @@ from ..mesh import (
|
|
|
100
114
|
StructuredHexBox,
|
|
101
115
|
SurfaceMesh,
|
|
102
116
|
SurfaceMeshPytree,
|
|
117
|
+
SurfaceWithElemConn,
|
|
118
|
+
surface_with_elem_conn,
|
|
119
|
+
SurfaceSupermesh,
|
|
120
|
+
build_surface_supermesh,
|
|
103
121
|
tag_axis_minmax_facets,
|
|
104
122
|
TetMesh,
|
|
105
123
|
TetMeshPytree,
|
|
@@ -109,6 +127,29 @@ from ..mesh import (
|
|
|
109
127
|
load_gmsh_hex_mesh,
|
|
110
128
|
load_gmsh_tet_mesh,
|
|
111
129
|
make_surface_from_facets,
|
|
130
|
+
SurfaceSupermesh,
|
|
131
|
+
build_surface_supermesh,
|
|
132
|
+
MortarMatrix,
|
|
133
|
+
assemble_mortar_matrices,
|
|
134
|
+
assemble_contact_onesided_floor,
|
|
135
|
+
assemble_mixed_surface_residual,
|
|
136
|
+
assemble_mixed_surface_jacobian,
|
|
137
|
+
map_surface_facets_to_tet_elements,
|
|
138
|
+
map_surface_facets_to_hex_elements,
|
|
139
|
+
tri_area,
|
|
140
|
+
tri_quadrature,
|
|
141
|
+
facet_triangles,
|
|
142
|
+
facet_shape_values,
|
|
143
|
+
volume_shape_values_at_points,
|
|
144
|
+
quad_shape_and_local,
|
|
145
|
+
quad9_shape_values,
|
|
146
|
+
hex27_gradN,
|
|
147
|
+
ContactSurfaceSpace,
|
|
148
|
+
ContactSide,
|
|
149
|
+
OneSidedContact,
|
|
150
|
+
OneSidedContactSurfaceSpace,
|
|
151
|
+
facet_gap_values,
|
|
152
|
+
active_contact_facets,
|
|
112
153
|
)
|
|
113
154
|
from .basis import (
|
|
114
155
|
HexTriLinearBasis,
|
|
@@ -122,46 +163,95 @@ from .basis import (
|
|
|
122
163
|
TetQuadraticBasis10,
|
|
123
164
|
TetQuadraticBasis10Pytree,
|
|
124
165
|
)
|
|
125
|
-
|
|
166
|
+
import importlib
|
|
167
|
+
|
|
126
168
|
from .solver import spdirect_solve_cpu, spdirect_solve_gpu, spdirect_solve_jax, coo_to_csr
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
169
|
+
|
|
170
|
+
_SOLVER_EXPORTS = {
|
|
171
|
+
"SparsityPattern",
|
|
172
|
+
"FluxSparseMatrix",
|
|
173
|
+
"coalesce_coo",
|
|
174
|
+
"concat_flux",
|
|
175
|
+
"block_diag_flux",
|
|
176
|
+
"build_block_system",
|
|
177
|
+
"split_block_matrix",
|
|
178
|
+
"BlockSystem",
|
|
179
|
+
"DirichletBC",
|
|
180
|
+
"LinearSolver",
|
|
181
|
+
"NonlinearSolver",
|
|
182
|
+
"petsc_solve",
|
|
183
|
+
"petsc_shell_solve",
|
|
184
|
+
"petsc_is_available",
|
|
185
|
+
"enforce_dirichlet_dense",
|
|
186
|
+
"enforce_dirichlet_dense_jax",
|
|
187
|
+
"enforce_dirichlet_fluxsparse",
|
|
188
|
+
"enforce_dirichlet_sparse",
|
|
189
|
+
"enforce_dirichlet_system",
|
|
190
|
+
"split_dirichlet_matrix",
|
|
191
|
+
"free_dofs",
|
|
192
|
+
"restrict_flux_to_free",
|
|
193
|
+
"condense_dirichlet_system",
|
|
194
|
+
"condense_dirichlet_fluxsparse",
|
|
195
|
+
"condense_dirichlet_fluxsparse_coo",
|
|
196
|
+
"condense_dirichlet_dense",
|
|
197
|
+
"expand_dirichlet_solution",
|
|
198
|
+
"cg_solve",
|
|
199
|
+
"cg_solve_jax",
|
|
200
|
+
"build_cg_operator",
|
|
201
|
+
"CGOperator",
|
|
202
|
+
"make_block_jacobi_preconditioner",
|
|
203
|
+
"NonlinearAnalysis",
|
|
204
|
+
"NewtonLoopConfig",
|
|
205
|
+
"LoadStepResult",
|
|
206
|
+
"NewtonSolveRunner",
|
|
207
|
+
"solve_nonlinear",
|
|
208
|
+
"LinearAnalysis",
|
|
209
|
+
"LinearSolveConfig",
|
|
210
|
+
"LinearStepResult",
|
|
211
|
+
"LinearSolveRunner",
|
|
212
|
+
"newton_solve",
|
|
213
|
+
"petsc_solve",
|
|
214
|
+
"petsc_shell_solve",
|
|
215
|
+
"petsc_is_available",
|
|
216
|
+
}
|
|
217
|
+
|
|
218
|
+
_SOLVER_BC_EXPORTS = {
|
|
219
|
+
"SurfaceFormField",
|
|
220
|
+
"SurfaceFormContext",
|
|
221
|
+
"SurfaceBilinearContext",
|
|
222
|
+
"vector_surface_load_form",
|
|
223
|
+
"make_vector_surface_load_form",
|
|
224
|
+
"assemble_surface_linear_form",
|
|
225
|
+
"assemble_surface_bilinear_form",
|
|
226
|
+
}
|
|
227
|
+
|
|
228
|
+
|
|
229
|
+
def __getattr__(name: str):
|
|
230
|
+
if name in _SOLVER_EXPORTS:
|
|
231
|
+
module = importlib.import_module("..solver", __name__)
|
|
232
|
+
elif name in _SOLVER_BC_EXPORTS:
|
|
233
|
+
module = importlib.import_module("..solver.bc", __name__)
|
|
234
|
+
else:
|
|
235
|
+
raise AttributeError(f"module {__name__!r} has no attribute {name!r}")
|
|
236
|
+
|
|
237
|
+
value = getattr(module, name)
|
|
238
|
+
globals()[name] = value
|
|
239
|
+
return value
|
|
158
240
|
|
|
159
241
|
__all__ = [
|
|
160
242
|
"FESpace",
|
|
161
243
|
"FESpaceBase",
|
|
162
244
|
"FESpacePytree",
|
|
245
|
+
"MixedFESpace",
|
|
246
|
+
"MixedProblem",
|
|
247
|
+
"MixedDirichletBC",
|
|
248
|
+
"MixedBlockSystem",
|
|
163
249
|
"FormContext",
|
|
164
250
|
"MixedFormContext",
|
|
251
|
+
"VolumeContext",
|
|
252
|
+
"SurfaceContext",
|
|
253
|
+
"VolumeContext",
|
|
254
|
+
"SurfaceContext",
|
|
165
255
|
"FieldPair",
|
|
166
256
|
"ElementVector",
|
|
167
257
|
"vector_load_form",
|
|
@@ -194,9 +284,9 @@ __all__ = [
|
|
|
194
284
|
"assemble_jacobian",
|
|
195
285
|
"assemble_residual_scatter",
|
|
196
286
|
"assemble_jacobian_scatter",
|
|
197
|
-
"assemble_residual_elementwise_xla",
|
|
198
|
-
"assemble_jacobian_elementwise_xla",
|
|
199
287
|
"make_element_residual_kernel",
|
|
288
|
+
"make_element_bilinear_kernel",
|
|
289
|
+
"make_element_linear_kernel",
|
|
200
290
|
"make_element_jacobian_kernel",
|
|
201
291
|
"element_residual",
|
|
202
292
|
"element_jacobian",
|
|
@@ -208,8 +298,6 @@ __all__ = [
|
|
|
208
298
|
"scalar_body_force_form",
|
|
209
299
|
"make_scalar_body_force_form",
|
|
210
300
|
"constant_body_force_form",
|
|
211
|
-
"vector_body_force_form",
|
|
212
|
-
"constant_body_force_vector_form",
|
|
213
301
|
"eval_shape_functions_hex8",
|
|
214
302
|
"interpolate_field_at_element_points",
|
|
215
303
|
"Expr",
|
|
@@ -218,18 +306,24 @@ __all__ = [
|
|
|
218
306
|
"trial_ref",
|
|
219
307
|
"test_ref",
|
|
220
308
|
"unknown_ref",
|
|
309
|
+
"zero_ref",
|
|
221
310
|
"Params",
|
|
222
311
|
"LinearForm",
|
|
223
312
|
"BilinearForm",
|
|
224
313
|
"ResidualForm",
|
|
225
314
|
"MixedWeakForm",
|
|
315
|
+
"make_mixed_residuals",
|
|
316
|
+
"kernel",
|
|
226
317
|
"compile_bilinear",
|
|
227
318
|
"compile_linear",
|
|
228
319
|
"compile_residual",
|
|
229
320
|
"compile_surface_linear",
|
|
321
|
+
"compile_surface_bilinear",
|
|
322
|
+
"compile_mixed_surface_residual",
|
|
230
323
|
"compile_mixed_residual",
|
|
231
324
|
"grad",
|
|
232
325
|
"sym_grad",
|
|
326
|
+
"outer",
|
|
233
327
|
"dot",
|
|
234
328
|
"sdot",
|
|
235
329
|
"ddot",
|
|
@@ -246,27 +340,56 @@ __all__ = [
|
|
|
246
340
|
"log",
|
|
247
341
|
"transpose_last2",
|
|
248
342
|
"matmul",
|
|
343
|
+
"matmul_std",
|
|
249
344
|
"einsum",
|
|
250
345
|
"HexMesh",
|
|
251
346
|
"HexMeshPytree",
|
|
252
347
|
"StructuredHexBox",
|
|
253
348
|
"SurfaceMesh",
|
|
254
349
|
"SurfaceMeshPytree",
|
|
350
|
+
"SurfaceWithElemConn",
|
|
351
|
+
"surface_with_elem_conn",
|
|
255
352
|
"SurfaceFormField",
|
|
256
353
|
"SurfaceFormContext",
|
|
354
|
+
"SurfaceBilinearContext",
|
|
257
355
|
"vector_surface_load_form",
|
|
258
356
|
"make_vector_surface_load_form",
|
|
259
357
|
"assemble_surface_linear_form",
|
|
358
|
+
"assemble_surface_bilinear_form",
|
|
260
359
|
"load_gmsh_mesh",
|
|
261
360
|
"load_gmsh_hex_mesh",
|
|
262
361
|
"load_gmsh_tet_mesh",
|
|
263
362
|
"make_surface_from_facets",
|
|
363
|
+
"SurfaceSupermesh",
|
|
364
|
+
"build_surface_supermesh",
|
|
365
|
+
"MortarMatrix",
|
|
366
|
+
"assemble_mortar_matrices",
|
|
367
|
+
"assemble_contact_onesided_floor",
|
|
368
|
+
"assemble_mixed_surface_residual",
|
|
369
|
+
"assemble_mixed_surface_jacobian",
|
|
370
|
+
"map_surface_facets_to_tet_elements",
|
|
371
|
+
"map_surface_facets_to_hex_elements",
|
|
372
|
+
"tri_area",
|
|
373
|
+
"tri_quadrature",
|
|
374
|
+
"facet_triangles",
|
|
375
|
+
"facet_shape_values",
|
|
376
|
+
"volume_shape_values_at_points",
|
|
377
|
+
"quad_shape_and_local",
|
|
378
|
+
"quad9_shape_values",
|
|
379
|
+
"hex27_gradN",
|
|
380
|
+
"ContactSurfaceSpace",
|
|
381
|
+
"ContactSide",
|
|
382
|
+
"OneSidedContact",
|
|
383
|
+
"OneSidedContactSurfaceSpace",
|
|
384
|
+
"facet_gap_values",
|
|
385
|
+
"active_contact_facets",
|
|
264
386
|
"TetMesh",
|
|
265
387
|
"TetMeshPytree",
|
|
266
388
|
"StructuredTetBox",
|
|
267
389
|
"StructuredTetTensorBox",
|
|
268
390
|
"tag_axis_minmax_facets",
|
|
269
391
|
"BaseMeshPytree",
|
|
392
|
+
"SurfaceWithFacetMap",
|
|
270
393
|
"bbox_predicate",
|
|
271
394
|
"plane_predicate",
|
|
272
395
|
"axis_plane_predicate",
|
|
@@ -281,20 +404,28 @@ __all__ = [
|
|
|
281
404
|
"TetLinearBasisPytree",
|
|
282
405
|
"TetQuadraticBasis10",
|
|
283
406
|
"TetQuadraticBasis10Pytree",
|
|
284
|
-
"lame_parameters",
|
|
285
|
-
"isotropic_3d_D",
|
|
286
407
|
"spdirect_solve_cpu",
|
|
287
408
|
"spdirect_solve_gpu",
|
|
288
409
|
"spdirect_solve_jax",
|
|
289
410
|
"coo_to_csr",
|
|
290
411
|
"SparsityPattern",
|
|
291
412
|
"FluxSparseMatrix",
|
|
413
|
+
"coalesce_coo",
|
|
414
|
+
"concat_flux",
|
|
415
|
+
"block_diag_flux",
|
|
292
416
|
"LinearSolver",
|
|
293
417
|
"NonlinearSolver",
|
|
294
418
|
"enforce_dirichlet_dense",
|
|
419
|
+
"enforce_dirichlet_dense_jax",
|
|
420
|
+
"enforce_dirichlet_fluxsparse",
|
|
295
421
|
"enforce_dirichlet_sparse",
|
|
422
|
+
"enforce_dirichlet_system",
|
|
423
|
+
"split_dirichlet_matrix",
|
|
296
424
|
"free_dofs",
|
|
425
|
+
"restrict_flux_to_free",
|
|
426
|
+
"condense_dirichlet_system",
|
|
297
427
|
"condense_dirichlet_fluxsparse",
|
|
428
|
+
"condense_dirichlet_fluxsparse_coo",
|
|
298
429
|
"condense_dirichlet_dense",
|
|
299
430
|
"expand_dirichlet_solution",
|
|
300
431
|
"cg_solve",
|