Skip to content

Commit f7177bc

Browse files
committed
parameter.json update
1 parent 2eba581 commit f7177bc

4 files changed

Lines changed: 28 additions & 61 deletions

File tree

examples/linear-elastic-plate-with-hole/fenics/run_simulation.py

Lines changed: 16 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -46,14 +46,14 @@ def run_fenics_simulation(
4646

4747
E = (
4848
ureg.Quantity(
49-
parameters["young_modulus[Pa]"], "Pa"
49+
parameters["youngs_modulus[Pa]"], "Pa"
5050
)
5151
.to_base_units()
5252
.magnitude
5353
)
5454
nu = (
5555
ureg.Quantity(
56-
parameters["poisson_ratio"], ""
56+
parameters["poissons_ratio"], ""
5757
)
5858
.to_base_units()
5959
.magnitude
@@ -69,24 +69,7 @@ def run_fenics_simulation(
6969
.magnitude
7070
)
7171
load = (
72-
ureg.Quantity(parameters["load[MPa]"], "MPa")
73-
.to_base_units()
74-
.magnitude
75-
)
76-
displacement_evaluation_point = parameters["displacement_evaluation_point[m]"]
77-
displacement_evaluation_x = (
78-
ureg.Quantity(
79-
displacement_evaluation_point[0],
80-
"m",
81-
)
82-
.to_base_units()
83-
.magnitude
84-
)
85-
displacement_evaluation_y = (
86-
ureg.Quantity(
87-
displacement_evaluation_point[1],
88-
"m",
89-
)
72+
ureg.Quantity(parameters["load[Pa]"], "Pa")
9073
.to_base_units()
9174
.magnitude
9275
)
@@ -198,7 +181,7 @@ def analytical_displacement_expr(x: np.ndarray) -> np.ndarray:
198181

199182
# Evaluate displacement at the specified evaluation point
200183
displacement_eval_point = np.array(
201-
[[displacement_evaluation_x, displacement_evaluation_y, 0.0]],
184+
[[1.0, 1.0, 0.0]],
202185
dtype=np.float64,
203186
)
204187
tree = df.geometry.bb_tree(mesh, mesh.topology.dim)
@@ -208,12 +191,13 @@ def analytical_displacement_expr(x: np.ndarray) -> np.ndarray:
208191
colliding_cells = df.geometry.compute_colliding_cells(
209192
mesh, cell_candidates, displacement_eval_point
210193
)
211-
local_displacement_x = None
194+
local_displacement = None
212195
if len(colliding_cells.links(0)) > 0:
213196
cell = colliding_cells.links(0)[0]
214-
local_displacement_x = u.eval(
197+
# u.eval returns a 2D array: shape (num_points, value_size)
198+
local_displacement = u.eval(
215199
displacement_eval_point, np.array([cell], dtype=np.int32)
216-
)[0]
200+
)[0].tolist() # [ux, uy]
217201

218202

219203
def project(
@@ -307,22 +291,22 @@ def mises_stress(u):
307291
np.max(mises_qp.x.array), op=MPI.MAX
308292
)
309293

310-
displacement_x_at_evaluation_point = None
294+
displacement_at_evaluation_point = None
311295
if MPI.COMM_WORLD.rank == 0:
312-
displacement_x_candidates = (
313-
MPI.COMM_WORLD.gather(local_displacement_x, root=0) or []
296+
displacement_candidates = (
297+
MPI.COMM_WORLD.gather(local_displacement, root=0) or []
314298
)
315-
for value in displacement_x_candidates:
299+
for value in displacement_candidates:
316300
if value is not None:
317-
displacement_x_at_evaluation_point = value
301+
displacement_at_evaluation_point = value
318302
break
319303

320-
if displacement_x_at_evaluation_point is None:
304+
if displacement_at_evaluation_point is None:
321305
raise ValueError(
322306
"Could not evaluate displacement at the configured evaluation point."
323307
)
324308
else:
325-
MPI.COMM_WORLD.gather(local_displacement_x, root=0)
309+
MPI.COMM_WORLD.gather(local_displacement, root=0)
326310

327311
# Save metrics
328312
metrics = {
@@ -332,7 +316,7 @@ def mises_stress(u):
332316
"max_displacement_error[m]": max_displacement_error_nodes,
333317
"reaction_force_left_boundary_x[N]": reaction_left_x,
334318
"reaction_force_left_boundary_y[N]": reaction_left_y,
335-
f"displacement_x_at_evaluation_point (x={displacement_evaluation_x}, y={displacement_evaluation_y})[m]": displacement_x_at_evaluation_point,
319+
"displacement_top_right_corner[m]": displacement_at_evaluation_point, # [ux, uy]
336320
}
337321

338322
if MPI.COMM_WORLD.rank == 0:

examples/linear-elastic-plate-with-hole/kratos/create_kratos_input.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -37,14 +37,14 @@ def create_kratos_input(
3737

3838
E = (
3939
ureg.Quantity(
40-
parameters["young_modulus[Pa]"], "Pa"
40+
parameters["youngs_modulus[Pa]"], "Pa"
4141
)
4242
.to_base_units()
4343
.magnitude
4444
)
4545
nu = (
4646
ureg.Quantity(
47-
parameters["poisson_ratio"], ""
47+
parameters["poissons_ratio"], ""
4848
)
4949
.to_base_units()
5050
.magnitude
@@ -60,7 +60,7 @@ def create_kratos_input(
6060
.magnitude
6161
)
6262
load = (
63-
ureg.Quantity(parameters["load[MPa]"], "MPa")
63+
ureg.Quantity(parameters["load[Pa]"], "Pa")
6464
.to_base_units()
6565
.magnitude
6666
)

examples/linear-elastic-plate-with-hole/kratos/postprocess_results.py

Lines changed: 9 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -24,14 +24,14 @@ def postprocess_results(input_parameter_file, input_result_vtk, output_metrics_f
2424

2525
E = (
2626
ureg.Quantity(
27-
parameters["young_modulus[Pa]"], "Pa"
27+
parameters["youngs_modulus[Pa]"], "Pa"
2828
)
2929
.to_base_units()
3030
.magnitude
3131
)
3232
nu = (
3333
ureg.Quantity(
34-
parameters["poisson_ratio"], ""
34+
parameters["poissons_ratio"], ""
3535
)
3636
.to_base_units()
3737
.magnitude
@@ -47,25 +47,7 @@ def postprocess_results(input_parameter_file, input_result_vtk, output_metrics_f
4747
.magnitude
4848
)
4949
load = (
50-
ureg.Quantity(parameters["load[MPa]"], "MPa")
51-
.to_base_units()
52-
.magnitude
53-
)
54-
55-
displacement_evaluation_point = parameters["displacement_evaluation_point[m]"]
56-
displacement_evaluation_x = (
57-
ureg.Quantity(
58-
displacement_evaluation_point[0],
59-
"m",
60-
)
61-
.to_base_units()
62-
.magnitude
63-
)
64-
displacement_evaluation_y = (
65-
ureg.Quantity(
66-
displacement_evaluation_point[1],
67-
"m",
68-
)
50+
ureg.Quantity(parameters["load[Pa]"], "Pa")
6951
.to_base_units()
7052
.magnitude
7153
)
@@ -110,16 +92,17 @@ def postprocess_results(input_parameter_file, input_result_vtk, output_metrics_f
11092
reaction_force_left_boundary_x = float(np.sum(reaction[left_boundary_mask, 0]))
11193
reaction_force_left_boundary_y = float(np.sum(reaction[left_boundary_mask, 1]))
11294

95+
# Compute displacement at the top-right corner
11396
probe_points = pyvista.PolyData(
114-
np.array([[displacement_evaluation_x, displacement_evaluation_y, 0.0]], dtype=float)
97+
np.array([[1.0, 1.0, 0.0]], dtype=float)
11598
)
11699
sampled = probe_points.sample(mesh)
117100
displacement_sampled = sampled.point_data.get("DISPLACEMENT")
118101
if displacement_sampled is None:
119-
closest_id = mesh.find_closest_point([displacement_evaluation_x, displacement_evaluation_y, 0.0])
120-
displacement_x_at_evaluation_point = float(displacement[closest_id, 0])
102+
closest_id = mesh.find_closest_point([1.0, 1.0, 0.0])
103+
displacement_at_evaluation_point = [float(displacement[closest_id, 0]), float(displacement[closest_id, 1])]
121104
else:
122-
displacement_x_at_evaluation_point = float(displacement_sampled[0, 0])
105+
displacement_at_evaluation_point = [float(displacement_sampled[0, 0]), float(displacement_sampled[0, 1])]
123106

124107
# Compute nodal displacement error (Euclidean norm of error vector at each node)
125108
nodal_displacement_error = np.linalg.norm(displacement - u_ref, axis=1)
@@ -135,7 +118,7 @@ def postprocess_results(input_parameter_file, input_result_vtk, output_metrics_f
135118
"max_displacement_error[m]": max_displacement_error_nodes,
136119
"reaction_force_left_boundary_x[N]": reaction_force_left_boundary_x,
137120
"reaction_force_left_boundary_y[N]": reaction_force_left_boundary_y,
138-
f"displacement_x_at_evaluation_point (x={displacement_evaluation_x}, y={displacement_evaluation_y})[m]": displacement_x_at_evaluation_point,
121+
"displacement_top_right_corner[m]": displacement_at_evaluation_point, # [ux, uy]
139122
}
140123
with open(output_metrics_file, "w") as f:
141124
json.dump(metrics, f, indent=4)
Binary file not shown.

0 commit comments

Comments
 (0)