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