@@ -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 :
0 commit comments