ddfem 0.9.0__py3-none-any.whl → 1.0.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 (43) hide show
  1. ddfem/__init__.py +0 -4
  2. ddfem/base_model.py +200 -0
  3. ddfem/boundary.py +3 -12
  4. ddfem/geometry/__init__.py +3 -3
  5. ddfem/geometry/arc.py +8 -10
  6. ddfem/geometry/box.py +8 -7
  7. ddfem/geometry/circle.py +39 -0
  8. ddfem/geometry/domain.py +4 -16
  9. ddfem/geometry/domain_dune.py +0 -16
  10. ddfem/geometry/helpers.py +12 -19
  11. ddfem/geometry/pie.py +7 -7
  12. ddfem/geometry/primitive_base.py +70 -129
  13. ddfem/geometry/vesica.py +6 -7
  14. ddfem/model2ufl.py +4 -10
  15. ddfem/transformers/DDM1.py +68 -10
  16. ddfem/transformers/Fitted.py +12 -22
  17. ddfem/transformers/Mix0.py +64 -10
  18. ddfem/transformers/NNS.py +72 -11
  19. ddfem/transformers/NS.py +79 -14
  20. ddfem/transformers/__init__.py +0 -1
  21. ddfem/transformers/transformer_base.py +15 -102
  22. {ddfem-0.9.0.dist-info → ddfem-1.0.0.dist-info}/METADATA +1 -2
  23. ddfem-1.0.0.dist-info/RECORD +27 -0
  24. ddfem/examples/__init__.py +0 -0
  25. ddfem/examples/advection_diffusion.py +0 -74
  26. ddfem/examples/beam.py +0 -147
  27. ddfem/examples/cahn_hilliard.py +0 -67
  28. ddfem/examples/chemical_reaction.py +0 -88
  29. ddfem/examples/constant.py +0 -46
  30. ddfem/examples/five_circle_flat.py +0 -197
  31. ddfem/examples/forchheimer.py +0 -48
  32. ddfem/examples/hyperelasticity.py +0 -88
  33. ddfem/examples/linear_elasticity.py +0 -45
  34. ddfem/examples/plaplace.py +0 -29
  35. ddfem/examples/single_circle.py +0 -135
  36. ddfem/examples/triple_circle.py +0 -217
  37. ddfem/examples/triple_circle_beam.py +0 -208
  38. ddfem/geometry/ball.py +0 -24
  39. ddfem/geometry/plane.py +0 -20
  40. ddfem-0.9.0.dist-info/RECORD +0 -41
  41. {ddfem-0.9.0.dist-info → ddfem-1.0.0.dist-info}/WHEEL +0 -0
  42. {ddfem-0.9.0.dist-info → ddfem-1.0.0.dist-info}/licenses/LICENSE +0 -0
  43. {ddfem-0.9.0.dist-info → ddfem-1.0.0.dist-info}/top_level.txt +0 -0
@@ -1,135 +0,0 @@
1
- import numpy as np
2
- try:
3
- import pygmsh
4
- except ImportError:
5
- pygmsh = None
6
-
7
- try:
8
- import dune
9
- except ImportError:
10
- print("""
11
- Example code requires dune to run. To install run
12
- pip install dune-fem
13
- """)
14
-
15
- from ddfem import geometry as gm
16
- from ddfem.geometry.domain_dune import DomainDune
17
-
18
- from dune.alugrid import aluConformGrid as leafGridView
19
- from dune.fem.view import adaptiveLeafGridView
20
- from dune.grid import cartesianDomain
21
- from dune.ufl import Constant, Space
22
-
23
- from ufl import SpatialCoordinate, sqrt
24
-
25
- def getDomain(initialRefine, version, inverted, adaptLevels=0, epsFactor=4.5):
26
-
27
- shiftx, shifty = sqrt(2) * 1e-6, sqrt(3) * 1e-6
28
- domain_range = [[-0.5 + shiftx, -0.5 + shifty], [0.5 + shiftx, 0.5 + shifty]]
29
- initial_gridsize = [75 * 2**initialRefine] * 2
30
- h = sqrt(
31
- ((domain_range[1][0] - domain_range[0][0]) / initial_gridsize[0]) ** 2
32
- + ((domain_range[1][1] - domain_range[0][1]) / initial_gridsize[1]) ** 2
33
- )
34
- epsilon = Constant(epsFactor * h * 0.5 ** (adaptLevels / 2), "epsilon")
35
-
36
- print(f"h={h * 0.5 ** (adaptLevels / 2)}, epsilon={epsilon.value}")
37
-
38
- circles = [
39
- [0.3, [0.15, 0.15], "b1"],
40
- [0.3, [-0.15, -0.15], "b2"],
41
- [0.4, [0, 0], "b3"],
42
- ]
43
-
44
- b = [gm.Ball(c[0], c[1], epsilon=epsilon, name=c[2]) for c in circles]
45
- sdfs = [b[0] | b[1], b[2]]
46
- sdfs[0].name = "sides"
47
- sdfs[1].name = "ends"
48
- omega = b[2] # sdfs[0] & sdfs[1]
49
- if inverted:
50
- omega = omega.invert()
51
- omega.name = "full"
52
-
53
- x = SpatialCoordinate(Space(2))
54
- sdf = omega(x)
55
-
56
- def spacing(x, y):
57
- r_min = 2*epsilon.value
58
- r_max = 32 * epsilon.value
59
- dist = np.abs(sdf((x, y)))
60
- if dist <= r_min:
61
- return geom.characteristic_length_min
62
- elif dist >= r_max:
63
- return geom.characteristic_length_max
64
- else:
65
- # Linear
66
- m = (geom.characteristic_length_max - geom.characteristic_length_min) / (
67
- r_max - r_min
68
- )
69
- return m * (dist - r_min) + geom.characteristic_length_min
70
-
71
- if version == "cartesian":
72
- domain = cartesianDomain(*domain_range, initial_gridsize)
73
-
74
- elif version == "fitted":
75
- if pygmsh is None:
76
- raise AttributeError("'fitted' requires install pygmsh")
77
- with pygmsh.occ.Geometry() as geom:
78
- geom.characteristic_length_max = h
79
- geom.characteristic_length_min = h
80
-
81
- disks = geom.add_disk([circles[2][1][0], circles[2][1][1], 0.0], circles[2][0])
82
- # [geom.add_disk([c[1][0], c[1][1], 0.0], c[0]) for c in circles]
83
-
84
- # ds = geom.boolean_union([disks[0], disks[1]])
85
- shape = disks # geom.boolean_intersection([ds, disks[2]])
86
- if inverted:
87
- rectangle = geom.add_rectangle(
88
- [domain_range[0][0], domain_range[0][1], 0.0],
89
- domain_range[1][0] - domain_range[0][0],
90
- domain_range[1][1] - domain_range[0][1],
91
- )
92
- geom.boolean_difference(rectangle, shape)
93
-
94
- geom.set_mesh_size_callback(
95
- lambda dim, tag, x, y, z, lc: spacing(x, y),
96
- ignore_other_mesh_sizes=True,
97
- )
98
- mesh = geom.generate_mesh()
99
- points, cells = mesh.points, mesh.cells_dict
100
- domain = {
101
- "vertices": points[:, :2].astype(float),
102
- "simplices": cells["triangle"].astype(int),
103
- }
104
-
105
- elif version == "adaptive":
106
- if pygmsh is None:
107
- raise AttributeError("'adaptive' requires install pygmsh")
108
- with pygmsh.occ.Geometry() as geom:
109
- geom.characteristic_length_max = h
110
- geom.characteristic_length_min = h
111
-
112
- geom.add_rectangle(
113
- [domain_range[0][0], domain_range[0][1], 0.0],
114
- domain_range[1][0] - domain_range[0][0],
115
- domain_range[1][1] - domain_range[0][1],
116
- )
117
-
118
- geom.set_mesh_size_callback(
119
- lambda dim, tag, x, y, z, lc: spacing(x, y),
120
- ignore_other_mesh_sizes=True,
121
- )
122
- mesh = geom.generate_mesh()
123
- points, cells = mesh.points, mesh.cells_dict
124
- domain = {
125
- "vertices": points[:, :2].astype(float),
126
- "simplices": cells["triangle"].astype(int),
127
- }
128
-
129
- gridView = adaptiveLeafGridView(leafGridView(domain))
130
-
131
- domain = DomainDune(omega, x, gridView)
132
- domain.adapt(level=adaptLevels)
133
- gridView.plot()
134
-
135
- return gridView, domain
@@ -1,217 +0,0 @@
1
- import numpy as np
2
-
3
- try:
4
- import pygmsh
5
- except ImportError:
6
- pygmsh = None
7
-
8
- try:
9
- import dune
10
- except ImportError:
11
- print(
12
- """
13
- Example code requires dune to run. To install run
14
- pip install dune-fem
15
- """
16
- )
17
-
18
- from dune.alugrid import aluConformGrid as leafGridView
19
- from dune.fem import adapt, mark, markNeighbors
20
- from dune.fem.function import gridFunction
21
- from dune.fem.space import lagrange
22
- from dune.fem.view import adaptiveLeafGridView
23
- from dune.grid import cartesianDomain
24
- from dune.ufl import Constant, Space
25
- from ufl import SpatialCoordinate, sqrt
26
-
27
- from ddfem import geometry as gm
28
- from ddfem.geometry.domain_dune import DomainDune
29
-
30
-
31
- def getDomain(
32
- initialRefine, version, inverted, adaptLevels=0, epsFactor=4.5, smoothing=None
33
- ):
34
-
35
- gm.SDF.smoothing = smoothing
36
- shiftx, shifty = sqrt(2) * 1e-6, sqrt(3) * 1e-6
37
- domain_range = [[-0.5 + shiftx, -0.5 + shifty], [0.5 + shiftx, 0.5 + shifty]]
38
- initial_gridsize = [100 * 2**initialRefine] * 2
39
- h = sqrt(
40
- ((domain_range[1][0] - domain_range[0][0]) / initial_gridsize[0]) ** 2
41
- + ((domain_range[1][1] - domain_range[0][1]) / initial_gridsize[1]) ** 2
42
- )
43
-
44
- def get_eps(h):
45
- return Constant(epsFactor * h * 0.5 ** (adaptLevels / 2), "epsilon")
46
-
47
- balls = [
48
- [0.3, [0.15, 0.15], "b1"],
49
- [0.3, [-0.15, -0.15], "b2"],
50
- [0.4, [0, 0], "b3"],
51
- ]
52
-
53
- b = [gm.Ball(c[0], c[1], name=c[2]) for c in balls]
54
- sdfs = [b[0] | b[1], b[2]]
55
- sdfs[0].name = "sides"
56
- sdfs[1].name = "ends"
57
- omega = sdfs[0] & sdfs[1]
58
- if inverted:
59
- omega = omega.invert()
60
- omega.name = "full"
61
-
62
- h_max = h * 3
63
- h_min = h / 2
64
- radius = 5
65
-
66
- x = SpatialCoordinate(Space(2))
67
- sdf = omega(x)
68
-
69
- def spacing(x, y, epsilon):
70
- r_min = epsilon.value
71
- r_max = radius * epsilon.value
72
- dist = np.abs(sdf((x, y)))
73
- if dist <= r_min:
74
- return geom.characteristic_length_min
75
- elif dist >= r_max:
76
- return geom.characteristic_length_max
77
- else:
78
- # Linear
79
- m = (geom.characteristic_length_max - geom.characteristic_length_min) / (
80
- r_max - r_min
81
- )
82
- return m * (dist - r_min) + geom.characteristic_length_min
83
-
84
- if version == "cartesian":
85
- domain = cartesianDomain(*domain_range, initial_gridsize)
86
- epsilon = get_eps(h)
87
-
88
- elif version == "fitted":
89
- if pygmsh is None:
90
- raise AttributeError("'fitted' requires install pygmsh")
91
- with pygmsh.occ.Geometry() as geom:
92
- geom.characteristic_length_max = h_max
93
- geom.characteristic_length_min = h_min
94
- epsilon = get_eps(h_min)
95
-
96
- disks = [geom.add_disk([c[1][0], c[1][1], 0.0], c[0]) for c in balls]
97
-
98
- ds = geom.boolean_union([disks[0], disks[1]])
99
- shape = geom.boolean_intersection([ds, disks[2]])
100
- if inverted:
101
- rectangle = geom.add_rectangle(
102
- [domain_range[0][0], domain_range[0][1], 0.0],
103
- domain_range[1][0] - domain_range[0][0],
104
- domain_range[1][1] - domain_range[0][1],
105
- )
106
- geom.boolean_difference(rectangle, shape)
107
-
108
- geom.set_mesh_size_callback(
109
- lambda dim, tag, x, y, z, lc: spacing(x, y, epsilon),
110
- ignore_other_mesh_sizes=True,
111
- )
112
- mesh = geom.generate_mesh()
113
- points, cells = mesh.points, mesh.cells_dict
114
- domain = {
115
- "vertices": points[:, :2].astype(float),
116
- "simplices": cells["triangle"].astype(int),
117
- }
118
-
119
- elif version == "dune_adaptive":
120
- gridsize = [int(j * h / h_max) for j in initial_gridsize]
121
- domain = cartesianDomain(*domain_range, gridsize)
122
-
123
- elif version == "gmsh_adaptive":
124
- if pygmsh is None:
125
- raise AttributeError("'gmsh_adaptive' requires install pygmsh")
126
- with pygmsh.occ.Geometry() as geom:
127
- geom.characteristic_length_max = h_max
128
- geom.characteristic_length_min = h_min
129
- epsilon = get_eps(h_min)
130
-
131
- geom.add_rectangle(
132
- [domain_range[0][0], domain_range[0][1], 0.0],
133
- domain_range[1][0] - domain_range[0][0],
134
- domain_range[1][1] - domain_range[0][1],
135
- )
136
-
137
- geom.set_mesh_size_callback(
138
- lambda dim, tag, x, y, z, lc: spacing(x, y, epsilon),
139
- ignore_other_mesh_sizes=True,
140
- )
141
- mesh = geom.generate_mesh()
142
- points, cells = mesh.points, mesh.cells_dict
143
- domain = {
144
- "vertices": points[:, :2].astype(float),
145
- "simplices": cells["triangle"].astype(int),
146
- }
147
-
148
- elif version == "gmsh_embedded":
149
- if pygmsh is None:
150
- raise AttributeError("'fitted' requires install pygmsh")
151
- with pygmsh.occ.Geometry() as geom:
152
- geom.characteristic_length_max = h_max
153
- geom.characteristic_length_min = h_min
154
- epsilon = get_eps(h_min)
155
-
156
- disks = [geom.add_disk([c[1][0], c[1][1], 0.0], c[0]) for c in balls]
157
-
158
- ds = geom.boolean_union([disks[0], disks[1]])
159
- shape = geom.boolean_intersection([ds, disks[2]])
160
- rectangle = geom.add_rectangle(
161
- [domain_range[0][0], domain_range[0][1], 0.0],
162
- domain_range[1][0] - domain_range[0][0],
163
- domain_range[1][1] - domain_range[0][1],
164
- )
165
-
166
- geom.boolean_fragments(rectangle, shape)
167
-
168
- geom.set_mesh_size_callback(
169
- lambda dim, tag, x, y, z, lc: spacing(x, y, epsilon),
170
- ignore_other_mesh_sizes=True,
171
- )
172
- mesh = geom.generate_mesh()
173
- points, cells = mesh.points, mesh.cells_dict
174
- domain = {
175
- "vertices": points[:, :2].astype(float),
176
- "simplices": cells["triangle"].astype(int),
177
- }
178
-
179
- else:
180
- raise ValueError("invalid mesh type")
181
-
182
- gridView = adaptiveLeafGridView(leafGridView(domain))
183
-
184
- if version == "dune_adaptive":
185
- omega.epsilon = get_eps(h_min)
186
- omega.epsilon.value *= radius
187
- epsilon_value = omega.epsilon.value
188
-
189
- marker = mark
190
-
191
- refinements = int(2 * np.log2(h_max / h_min))
192
-
193
- region = gridFunction(
194
- omega.phi(x) * (1 - omega.phi(x)), gridView=gridView
195
- ) # interface
196
-
197
- for j in range(1, refinements + 1):
198
-
199
- omega.epsilon.value = epsilon_value * j / refinements
200
- marker(region, 0.00247262315663, maxLevel=refinements) # 1 epsilon
201
-
202
- adapt(gridView.hierarchicalGrid)
203
-
204
- h_min = h_max * 0.5 ** (j / 2)
205
- epsilon = get_eps(h_min)
206
-
207
- omega.propagate_epsilon(epsilon)
208
- domain = omega
209
-
210
- domain = DomainDune(omega, x, gridView)
211
- domain.adapt(level=adaptLevels)
212
-
213
- print(
214
- f"h_max={h_max}, h_min={h_min * 0.5 ** (adaptLevels / 2)}, epsilon={epsilon.value}"
215
- )
216
-
217
- return gridView, domain
@@ -1,208 +0,0 @@
1
- import numpy as np
2
-
3
- try:
4
- import pygmsh
5
- except ImportError:
6
- pygmsh = None
7
-
8
- try:
9
- import dune
10
- except ImportError:
11
- print(
12
- """
13
- Example code requires dune to run. To install run
14
- pip install dune-fem
15
- """
16
- )
17
-
18
- from dune.alugrid import aluConformGrid as leafGridView
19
- from dune.fem import adapt, mark, markNeighbors
20
- from dune.fem.function import gridFunction
21
- from dune.fem.space import lagrange
22
- from dune.fem.utility import gridWidth
23
- from dune.fem.view import adaptiveLeafGridView
24
- from dune.grid import cartesianDomain
25
- from dune.ufl import Constant, Space
26
- from ufl import SpatialCoordinate, as_vector, sqrt
27
-
28
- from ddfem import geometry as gm
29
- from ddfem.geometry.domain_dune import DomainDune
30
-
31
-
32
- def getDomain(initialRefine, version, adaptLevels=0, epsFactor=4.5, dirichlet=True):
33
-
34
- # gm.SDF.smoothing = 50
35
-
36
- shiftx, shifty = sqrt(2) * 1e-6, sqrt(3) * 1e-6
37
-
38
- if dirichlet:
39
- domain_range = [
40
- [-0.8 + shiftx, -0.8 + shifty, 0.1], # -0.5
41
- [0.8 + shiftx, 0.8 + shifty, 3.3], # 3.2
42
- ]
43
- initial_gridsize = [60, 60, 60]
44
- else:
45
- domain_range = [
46
- [-0.8 + shiftx, -0.8 + shifty, 0.0 - 0.5],
47
- [0.8 + shiftx, 0.8 + shifty, 3.2 + 0.5],
48
- ]
49
- initial_gridsize = [60, 60, 80]
50
- initial_gridsize = [i * 2**initialRefine for i in initial_gridsize]
51
- h = sqrt(
52
- ((domain_range[1][0] - domain_range[0][0]) / initial_gridsize[0]) ** 2
53
- + ((domain_range[1][1] - domain_range[0][1]) / initial_gridsize[1]) ** 2
54
- + ((domain_range[1][2] - domain_range[0][2]) / initial_gridsize[2]) ** 2
55
- )
56
-
57
- def get_eps(h):
58
- return Constant(epsFactor * h * 0.5 ** (adaptLevels / 3), "epsilon")
59
-
60
- balls = [
61
- [0.3, [0.15, 0.15], "b1"],
62
- [0.3, [-0.15, -0.15], "b2"],
63
- [0.4, [0, 0], "b3"],
64
- ]
65
-
66
- b = [gm.Ball(c[0], c[1], name=c[2]) for c in balls]
67
- sdfs = [b[0] | b[1], b[2]]
68
- face_2d = sdfs[0] & sdfs[1]
69
-
70
- face_2d.name = "beam"
71
-
72
- if dirichlet:
73
- length = 4
74
- else:
75
- length = 3.2
76
- omega = face_2d.extrude(length, True)
77
- omega.name = "full"
78
-
79
- h_max = h * 3
80
- h_min = h / 2
81
- radius = 3
82
-
83
- x = SpatialCoordinate(Space(3))
84
- sdf = omega(x)
85
-
86
- def spacing(x, y, z, epsilon):
87
- r_min = epsilon.value
88
- r_max = radius * epsilon.value
89
- dist = np.abs(sdf((x, y, z)))
90
- if dist <= r_min:
91
- return geom.characteristic_length_min
92
- elif dist >= r_max:
93
- return geom.characteristic_length_max
94
- else:
95
- # Linear
96
- m = (geom.characteristic_length_max - geom.characteristic_length_min) / (
97
- r_max - r_min
98
- )
99
- return m * (dist - r_min) + geom.characteristic_length_min
100
-
101
- if version == "cartesian":
102
- domain = cartesianDomain(*domain_range, initial_gridsize)
103
- epsilon = get_eps(h)
104
-
105
- elif version == "fitted":
106
- if pygmsh is None:
107
- raise AttributeError("'fitted' requires install pygmsh")
108
- with pygmsh.occ.Geometry() as geom:
109
- geom.characteristic_length_max = h_max
110
- geom.characteristic_length_min = h_min
111
- epsilon = get_eps(h_min)
112
-
113
- disks = [geom.add_disk([c[1][0], c[1][1], 0.0], c[0]) for c in balls]
114
-
115
- ds = geom.boolean_union([disks[0], disks[1]])
116
- shape = geom.boolean_intersection([ds, disks[2]])
117
- geom.extrude(shape, [0, 0, length])
118
-
119
- geom.set_mesh_size_callback(
120
- lambda dim, tag, x, y, z, lc: spacing(x, y, z, epsilon),
121
- ignore_other_mesh_sizes=True,
122
- )
123
- mesh = geom.generate_mesh()
124
- points, cells = mesh.points, mesh.cells_dict
125
- domain = {
126
- "vertices": points[:,].astype(float),
127
- "simplices": cells["tetra"].astype(int),
128
- }
129
-
130
- elif version == "dune_adaptive":
131
- gridsize = [int(j * h / h_max) for j in initial_gridsize]
132
- domain = cartesianDomain(*domain_range, gridsize)
133
-
134
- elif version == "gmsh_adaptive":
135
- if pygmsh is None:
136
- raise AttributeError("'gmsh_adaptive' requires install pygmsh")
137
- with pygmsh.occ.Geometry() as geom:
138
- geom.characteristic_length_max = h_max
139
- geom.characteristic_length_min = h_min
140
- epsilon = get_eps(h_min)
141
-
142
- geom.add_box(
143
- [0.0, 0.0, 0.0],
144
- [
145
- domain_range[1][0] - domain_range[0][0],
146
- domain_range[1][1] - domain_range[0][1],
147
- domain_range[1][2] - domain_range[0][2],
148
- ],
149
- )
150
-
151
- geom.set_mesh_size_callback(
152
- lambda dim, tag, x, y, z, lc: spacing(x, y, z, epsilon),
153
- ignore_other_mesh_sizes=True,
154
- )
155
- mesh = geom.generate_mesh()
156
- points, cells = mesh.points, mesh.cells_dict
157
- domain = {
158
- "vertices": points[:,].astype(float),
159
- "simplices": cells["tetra"].astype(int),
160
- }
161
- else:
162
- raise ValueError("invalid mesh type")
163
-
164
- gridView = adaptiveLeafGridView(leafGridView(domain))
165
- # return gridView, None
166
-
167
- if version == "dune_adaptive":
168
- # omega.epsilon = get_eps(h)
169
- omega.epsilon = get_eps(h_min)
170
- omega.epsilon.value *= radius
171
- epsilon_value = omega.epsilon.value
172
-
173
- marker = mark
174
-
175
- refinements = int(3 * np.log2(h_max / h_min))
176
- region = gridFunction(
177
- omega.phi(x) * (1 - omega.phi(x)), gridView=gridView
178
- ) # interface
179
-
180
- for j in range(1, refinements + 1):
181
- print("refining:", j, gridView.size(2), flush=True)
182
- if gridView.size(2) > 5e5:
183
- assert j == refinements
184
- j -= 1
185
- break
186
- omega.epsilon.value = epsilon_value * j / refinements
187
- marker(region, 0.00247262315663, maxLevel=refinements) # epsilon
188
- adapt(gridView.hierarchicalGrid)
189
-
190
- # markNeighbors(region, 0.1, maxLevel=refinements)
191
- # marker(region, 0.2, maxLevel=refinements)
192
- # adapt(gridView.hierarchicalGrid)
193
- # omega.epsilon.value = omega.epsilon.value * 2**(-1/3)
194
-
195
- h_min = h_max * 0.5 ** (j / 3)
196
- epsilon = get_eps(h_min)
197
-
198
- omega.propagate_epsilon(epsilon)
199
- domain = omega
200
-
201
- domain = DomainDune(omega, x, gridView)
202
- # domain.adapt(level=adaptLevels)
203
-
204
- print(
205
- f"h_max={h_max}, h_min={h_min * 0.5 ** (adaptLevels / 3)}, epsilon={epsilon.value}"
206
- )
207
-
208
- return gridView, domain
ddfem/geometry/ball.py DELETED
@@ -1,24 +0,0 @@
1
- from ufl import as_vector
2
-
3
- from .helpers import ufl_length
4
- from .primitive_base import ORIGIN, SDF
5
-
6
-
7
- class Ball(SDF):
8
- def __init__(self, radius, center=ORIGIN, *args, **kwargs):
9
- self.radius = radius
10
-
11
- if isinstance(center, (list, tuple)):
12
- center = as_vector(center)
13
- self.center = center
14
-
15
- super().__init__(*args, **kwargs)
16
-
17
- def __repr__(self):
18
- return f"Ball({self.radius}, {self.center}, {self._repr_core()})"
19
-
20
- def sdf(self, x):
21
- # Note ignore z, if center 2d
22
- xx = as_vector([x[i] for i in range(len(self.center))])
23
- center_x = xx - self.center
24
- return ufl_length(center_x) - self.radius
ddfem/geometry/plane.py DELETED
@@ -1,20 +0,0 @@
1
- from ufl import as_vector, dot
2
-
3
- from .primitive_base import SDF
4
-
5
-
6
- class Plane(SDF):
7
- def __init__(self, normal, offset, *args, **kwargs):
8
- if isinstance(normal, (list, tuple)):
9
- normal = as_vector(normal)
10
- self.normal = normal
11
-
12
- self.offset = offset
13
-
14
- super().__init__(*args, **kwargs)
15
-
16
- def __repr__(self):
17
- return f"Plane({self.normal}, {self.offset}, {self._repr_core()})"
18
-
19
- def sdf(self, x):
20
- return dot(x, self.normal) + self.offset
@@ -1,41 +0,0 @@
1
- ddfem/__init__.py,sha256=N860erjFVjXifNwEQ_ejRF99ub195M6eC9GIOqeIhyU,106
2
- ddfem/boundary.py,sha256=qpvvjRBBUZHZULIRovuz1h8U30KQRtYERIJxN5O251c,7570
3
- ddfem/dune.py,sha256=oU4bKiG4AndEhMVhAi1Nnmo9cEhjceTW3X2ptv6ombU,67
4
- ddfem/model2ufl.py,sha256=lEEmMmZWbcxprHD9pRWwZfIdiLg3ScQkR7V_N48qqAw,4265
5
- ddfem/examples/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
6
- ddfem/examples/advection_diffusion.py,sha256=9UPILICF3Sfh3SA7zJk6iDabXmvIa4GowJd62qaWOd8,2081
7
- ddfem/examples/beam.py,sha256=awZvrgw92ANJgD1MGhhEVZ0eBsSNmhuwegpS8AHiiPk,4687
8
- ddfem/examples/cahn_hilliard.py,sha256=-T6p5-BY98sQ5y9Vcd2YVokamQQ66nA7uUqJDRQjzB0,2308
9
- ddfem/examples/chemical_reaction.py,sha256=9zNgGuCT25Z0Z_ru8pNoK1MOOrYA8r3UkfGvmNRQXpw,2488
10
- ddfem/examples/constant.py,sha256=6wFiKnsbjMKk9hInJwnCa8d7Thp7uPZGJ-1805V243Y,1508
11
- ddfem/examples/five_circle_flat.py,sha256=NbNmmz8jMwfFa7ZfEDUq0g5BF94z_ivvbPA2jVLs6PM,6049
12
- ddfem/examples/forchheimer.py,sha256=3mpdYVzRn9tmtq7kQBP-vlx9L7HmAHdqbVVRABRd2TY,1311
13
- ddfem/examples/hyperelasticity.py,sha256=YyoZhruTMpTfUIL4ioOkwe9FFPf_ffCMHsMsBV4SZ_w,2373
14
- ddfem/examples/linear_elasticity.py,sha256=N3wpzzhD4wRpBqmEYFV39_Nx7RuNgfeEMsTWpdzIdgk,1164
15
- ddfem/examples/plaplace.py,sha256=yiuYdJpDrFHl1oLG7WWtAs26x2s9vjSXlTsijXTPBxc,751
16
- ddfem/examples/single_circle.py,sha256=m3tg7frVTLnP8Cxfx_6fbvoUb2mJ3ltgNnrX5URAwRw,4601
17
- ddfem/examples/triple_circle.py,sha256=bo8ZD1B7biXe1HwVDv97O6B5EVsku5TCft3Oqamay7E,7089
18
- ddfem/examples/triple_circle_beam.py,sha256=J9_U2MuRBGnhUT1w_IimuyfTLzds_XD2CCv9o4nWD_w,6607
19
- ddfem/geometry/__init__.py,sha256=ePmkipwfdhM88qrStE__n0VFKqvl8AKK4VjsAsivt4Y,295
20
- ddfem/geometry/arc.py,sha256=ouK8gxkd2f8RtpAK33p6-zU5RoyMejxEge2IEcCOtR4,1381
21
- ddfem/geometry/ball.py,sha256=Q_ped9ay3KypU8sKutAXPH9XkEFJx5hIK7qTCy1Y26E,679
22
- ddfem/geometry/box.py,sha256=ecXUMI2a17-hZZyUXol08z7wk3IZn1yHE_CV9YIyR18,915
23
- ddfem/geometry/domain.py,sha256=n4Cu1sFy19ONUuQec2EICtoSBYzS-H_sLB2YxU5dads,1363
24
- ddfem/geometry/domain_dune.py,sha256=2ArzeRU42o4-TS21DXajPSCXj_3SlgGdehgN7QJhQzc,2600
25
- ddfem/geometry/helpers.py,sha256=kunsuciuJJwkcZgDn8A7wbKYSqIAYjdvhei_YfjvVtk,1049
26
- ddfem/geometry/pie.py,sha256=WjgYPI6YvkcxPTQB1SjdN22dFQHV0X8kSO6QcXDLBSU,1003
27
- ddfem/geometry/plane.py,sha256=hCRLa06yXfXzfms2JIbAusdPf5qFUy9DrjNDfZ-0TGA,500
28
- ddfem/geometry/primitive_base.py,sha256=gq3s2CIXk1qBnOEGys217yd_zXQr_UXrDXRpagQ3oiY,9419
29
- ddfem/geometry/vesica.py,sha256=g28RxdoDpUiq9QR9sHUJkO05-F3YTDOTOxcNm1tyV4E,1747
30
- ddfem/transformers/DDM1.py,sha256=73TW_mCPjdvRGo65D9uMUiw7ygYZCQuGFPIPvEmz43o,1092
31
- ddfem/transformers/Fitted.py,sha256=GdaA0znMfw_U_QNAngZSYJB3ZJgH_BAnvrL_viZqals,2908
32
- ddfem/transformers/Mix0.py,sha256=ZYeL6jrIIFCvVjCt_evB7sOG0ES3tmm5j-6W8gjK11k,3816
33
- ddfem/transformers/NNS.py,sha256=lGQVCd1x6KrzVyOEAIttaDXBFjP9nLBIj9wnp_fvYtg,3416
34
- ddfem/transformers/NS.py,sha256=fsih358oeayvmovhTAuddjbx7O0K_faF5qTAMQdHH8s,3612
35
- ddfem/transformers/__init__.py,sha256=okno6aFZoIPaJRi_Nw7cM63jpy18rS2yHsSuG7Vb4Og,195
36
- ddfem/transformers/transformer_base.py,sha256=Ey6iGk203lnzJOhLjMxyQNgKbclba_RIPpMW22OT7zQ,6347
37
- ddfem-0.9.0.dist-info/licenses/LICENSE,sha256=7EI8xVBu6h_7_JlVw-yPhhOZlpY9hP8wal7kHtqKT_E,1074
38
- ddfem-0.9.0.dist-info/METADATA,sha256=opemBPw8Y5D8ZSGNGoyYo2t0yosVrtwZqr5_i81_U8E,718
39
- ddfem-0.9.0.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
40
- ddfem-0.9.0.dist-info/top_level.txt,sha256=LF2T9-5A2Bak81PqbCcsAex8d5Xrla2Wq8yrlQi-ZtY,6
41
- ddfem-0.9.0.dist-info/RECORD,,
File without changes