Skip to content

Commit 4350c0e

Browse files
committed
fix: remove element volume scaling.
element volume scaling conflicts with row normalisation. Maybe need to look into this more. There is an issue where the model's ability to solve is dependent on the
1 parent 8d9c424 commit 4350c0e

File tree

4 files changed

+33
-20
lines changed

4 files changed

+33
-20
lines changed

LoopStructural/interpolators/_finite_difference_interpolator.py

Lines changed: 6 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -169,7 +169,7 @@ def add_value_constraints(self, w=1.0):
169169
a,
170170
points[inside, 3],
171171
idc[inside, :],
172-
w=w * points[inside, 4] * self.support.element_size,
172+
w=w * points[inside, 4],
173173
name="value",
174174
)
175175
if np.sum(inside) <= 0:
@@ -315,13 +315,9 @@ def add_gradient_constraints(self, w=1.0):
315315
strike_vector, dip_vector = get_vectors(points[inside, 3:6])
316316
A = np.einsum("ij,ijk->ik", strike_vector.T, T)
317317
B = np.zeros(points[inside, :].shape[0])
318-
self.add_constraints_to_least_squares(
319-
A, B, idc[inside, :], w=w * self.vol, name="gradient"
320-
)
318+
self.add_constraints_to_least_squares(A, B, idc[inside, :], w=w, name="gradient")
321319
A = np.einsum("ij,ijk->ik", dip_vector.T, T)
322-
self.add_constraints_to_least_squares(
323-
A, B, idc[inside, :], w=w * self.vol, name="gradient"
324-
)
320+
self.add_constraints_to_least_squares(A, B, idc[inside, :], w=w, name="gradient")
325321
if np.sum(inside) <= 0:
326322
logger.warning(
327323
f" {np.sum(~inside)} \
@@ -370,21 +366,21 @@ def add_norm_constraints(self, w=1.0):
370366
T[:, 0, :],
371367
points[inside, 3],
372368
idc[inside, :],
373-
w=w * self.vol,
369+
w=w,
374370
name="norm",
375371
)
376372
self.add_constraints_to_least_squares(
377373
T[:, 1, :],
378374
points[inside, 4],
379375
idc[inside, :],
380-
w=w * self.vol,
376+
w=w,
381377
name="norm",
382378
)
383379
self.add_constraints_to_least_squares(
384380
T[:, 2, :],
385381
points[inside, 5],
386382
idc[inside, :],
387-
w=w * self.vol,
383+
w=w,
388384
name="norm",
389385
)
390386
if np.sum(inside) <= 0:

LoopStructural/interpolators/_p1interpolator.py

Lines changed: 13 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -45,9 +45,9 @@ def add_norm_constraints(self, w=1.0):
4545
points = self.get_norm_constraints()
4646
if points.shape[0] > 0:
4747
grad, elements, inside = self.support.evaluate_shape_derivatives(points[:, :3])
48-
size = self.support.element_size[elements[inside]]
48+
size = self.support.element_scale[elements[inside]]
4949
wt = np.ones(size.shape[0])
50-
wt *= w * size
50+
wt *= w # s* size
5151
elements = np.tile(self.support.elements[elements[inside]], (3, 1, 1))
5252

5353
elements = elements.swapaxes(0, 1)
@@ -56,9 +56,10 @@ def add_norm_constraints(self, w=1.0):
5656
# elements = elements.swapaxes(1, 2)
5757

5858
self.add_constraints_to_least_squares(
59-
grad[inside, :, :] * wt[:, None, None],
60-
points[inside, 3:6] * wt[:, None],
59+
grad[inside, :, :],
60+
points[inside, 3:6],
6161
elements,
62+
w=wt,
6263
name="norm",
6364
)
6465
self.up_to_date = False
@@ -68,13 +69,14 @@ def add_value_constraints(self, w=1.0):
6869
points = self.get_value_constraints()
6970
if points.shape[0] > 1:
7071
N, elements, inside = self.support.evaluate_shape(points[:, :3])
71-
size = self.support.element_size[elements[inside]]
72+
size = self.support.element_scale[elements[inside]]
7273
wt = np.ones(size.shape[0])
73-
wt *= w * size
74+
wt *= w # * size
7475
self.add_constraints_to_least_squares(
75-
N[inside, :] * wt[:, None],
76-
points[inside, 3] * wt,
76+
N[inside, :],
77+
points[inside, 3],
7778
self.support.elements[elements[inside], :],
79+
w=wt,
7880
name="value",
7981
)
8082
self.up_to_date = False
@@ -88,7 +90,7 @@ def minimise_edge_jumps(self, w=0.1, vector_func=None, vector=None, name="edge j
8890
bc_t1 = self.support.barycentre[self.support.shared_element_relationships[:, 0]]
8991
bc_t2 = self.support.barycentre[self.support.shared_element_relationships[:, 1]]
9092
norm = self.support.shared_element_norm
91-
shared_element_size = self.support.shared_element_size
93+
shared_element_scale = self.support.shared_element_scale
9294

9395
# evaluate normal if using vector func for cp2
9496
if vector_func:
@@ -116,9 +118,10 @@ def minimise_edge_jumps(self, w=0.1, vector_func=None, vector=None, name="edge j
116118
# tri_cp2 = np.hstack([self.support.elements[cp2_tri1],self.support.elements[tri2]])
117119
# add cp1 and cp2 to the least squares system
118120
self.add_constraints_to_least_squares(
119-
const * shared_element_size[:, None] * w,
121+
const,
120122
np.zeros(const.shape[0]),
121123
tri_cp1,
124+
w=w,
122125
name=name,
123126
)
124127
self.up_to_date = False

LoopStructural/interpolators/supports/_3d_base_structured.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -446,6 +446,11 @@ def global_cell_indices(self, indexes) -> np.ndarray:
446446
def element_size(self):
447447
return np.prod(self.step_vector)
448448

449+
@property
450+
def element_scale(self):
451+
# all elements are the same size
452+
return 1.0
453+
449454
@property
450455
def vtk(self):
451456
try:

LoopStructural/interpolators/supports/_3d_structured_tetra.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -83,8 +83,13 @@ def element_size(self):
8383
self.nodes[self.elements[:, :4], :][:, 1:, :]
8484
- self.nodes[self.elements[:, :4], :][:, 0, None, :]
8585
)
86+
8687
return np.abs(np.linalg.det(vecs)) / 6
8788

89+
@property
90+
def element_scale(self):
91+
return self.element_size / np.mean(self.element_size)
92+
8893
@property
8994
def barycentre(self) -> np.ndarray:
9095
"""
@@ -185,6 +190,10 @@ def shared_element_size(self):
185190
norm = self.shared_element_norm
186191
return 0.5 * np.linalg.norm(norm, axis=1)
187192

193+
@property
194+
def shared_element_scale(self):
195+
return self.shared_element_size / np.mean(self.shared_element_size)
196+
188197
def evaluate_value(self, pos: np.ndarray, property_array: np.ndarray) -> np.ndarray:
189198
"""
190199
Evaluate value of interpolant

0 commit comments

Comments
 (0)