Skip to content

Commit

Permalink
Add first and second to last line in NURBS surface sets
Browse files Browse the repository at this point in the history
This eases the application of boundary conditions for shells
  • Loading branch information
isteinbrecher committed Apr 24, 2024
1 parent de4dd59 commit 9c497e3
Show file tree
Hide file tree
Showing 9 changed files with 442 additions and 216 deletions.
70 changes: 32 additions & 38 deletions meshpy/mesh_creation_functions/nurbs_generic.py
Original file line number Diff line number Diff line change
Expand Up @@ -296,48 +296,42 @@ def get_patch_vertices(return_set, num_cps_uvw, nurbs_dimension, element):
def get_patch_lines(return_set, num_cps_uvw, nurbs_dimension, element):
"""Get the control points positioned over the lines of a patch"""

control_points_line_1 = []
control_points_line_2 = []
control_points_line_3 = []
control_points_line_4 = []

if nurbs_dimension == 2:
# Fill line 1 and line 3 with their control points
for i in range(num_cps_uvw[0]):
# Line 1 has the control points on u = [0,1], v = 0
cpgid_l1 = num_cps_uvw[0] * 0 + i
control_points_line_1.append(element.nodes[cpgid_l1])

# Line 3 has the control points on u = [0,1], v = 1
cpgid_l3 = num_cps_uvw[0] * (num_cps_uvw[1] - 1) + i
control_points_line_3.append(element.nodes[cpgid_l3])

# Fill line 2 and line 4 with their control points
for j in range(num_cps_uvw[1]):
# Line 2 has the control points on u = 1, v = [0,1]
cpgid_l2 = num_cps_uvw[0] * j + (num_cps_uvw[0] - 1)
control_points_line_2.append(element.nodes[cpgid_l2])

# Line 4 has the control points on u = 0, v = [0,1]
cpgid_l4 = num_cps_uvw[0] * j + 0
control_points_line_4.append(element.nodes[cpgid_l4])

# Create geometric sets for lines
return_set["line_v_min"] = GeometrySetNodes(
mpy.geo.line, nodes=control_points_line_1
)
return_set["line_u_max"] = GeometrySetNodes(
mpy.geo.line, nodes=control_points_line_2
)
return_set["line_v_max"] = GeometrySetNodes(
mpy.geo.line, nodes=control_points_line_3
)
return_set["line_u_min"] = GeometrySetNodes(
mpy.geo.line, nodes=control_points_line_4
)
name_dir = ["v", "u"]
name_other_dir = ["min", "min_next", "max_next", "max"]

for i_dir, i_other_dir in ((0, 1), (1, 0)):
n_cp_dir = num_cps_uvw[i_dir]
n_cp_other_dir = num_cps_uvw[i_other_dir]
factor_dir = 1 if i_dir == 0 else n_cp_other_dir
factor_other_dir = n_cp_dir if i_dir == 0 else 1

for index, i_along_other_dir in enumerate(
(
0,
1,
n_cp_other_dir - 2,
n_cp_other_dir - 1,
)
):
cp_indices = []
for i_along_dir in range(n_cp_dir):
cp_indices.append(
i_along_other_dir * factor_other_dir
+ i_along_dir * factor_dir
)
set_name = f"line_{name_dir[i_dir]}_{name_other_dir[index]}"
return_set[set_name] = GeometrySetNodes(
mpy.geo.line,
nodes=[element.nodes[i_node] for i_node in cp_indices],
)

elif nurbs_dimension == 3:
# Define the rest of the lines to define a volume
control_points_line_1 = []
control_points_line_2 = []
control_points_line_3 = []
control_points_line_4 = []
control_points_line_5 = []
control_points_line_6 = []
control_points_line_7 = []
Expand Down
94 changes: 65 additions & 29 deletions tests/reference-files/test_nurbs_couple_nurbs_meshes_reference.dat
Original file line number Diff line number Diff line change
Expand Up @@ -73,38 +73,74 @@ NODE 5 DLINE 1
NODE 10 DLINE 1
NODE 15 DLINE 1
NODE 20 DLINE 1
NODE 1 DLINE 2
NODE 6 DLINE 2
NODE 11 DLINE 2
NODE 16 DLINE 2
NODE 4 DLINE 2
NODE 9 DLINE 2
NODE 14 DLINE 2
NODE 19 DLINE 2
NODE 1 DLINE 3
NODE 6 DLINE 3
NODE 11 DLINE 3
NODE 16 DLINE 3
NODE 17 DLINE 3
NODE 18 DLINE 3
NODE 19 DLINE 3
NODE 20 DLINE 3
NODE 1 DLINE 4
NODE 2 DLINE 4
NODE 3 DLINE 4
NODE 4 DLINE 4
NODE 5 DLINE 4
NODE 1 DLINE 5
NODE 6 DLINE 5
NODE 11 DLINE 5
NODE 7 DLINE 4
NODE 12 DLINE 4
NODE 17 DLINE 4
NODE 16 DLINE 5
NODE 21 DLINE 6
NODE 25 DLINE 6
NODE 29 DLINE 6
NODE 33 DLINE 6
NODE 16 DLINE 7
NODE 33 DLINE 7
NODE 34 DLINE 7
NODE 35 DLINE 7
NODE 36 DLINE 7
NODE 1 DLINE 8
NODE 21 DLINE 8
NODE 22 DLINE 8
NODE 23 DLINE 8
NODE 24 DLINE 8
NODE 17 DLINE 5
NODE 18 DLINE 5
NODE 19 DLINE 5
NODE 20 DLINE 5
NODE 11 DLINE 6
NODE 12 DLINE 6
NODE 13 DLINE 6
NODE 14 DLINE 6
NODE 15 DLINE 6
NODE 1 DLINE 7
NODE 2 DLINE 7
NODE 3 DLINE 7
NODE 4 DLINE 7
NODE 5 DLINE 7
NODE 6 DLINE 8
NODE 7 DLINE 8
NODE 8 DLINE 8
NODE 9 DLINE 8
NODE 10 DLINE 8
NODE 1 DLINE 9
NODE 6 DLINE 9
NODE 11 DLINE 9
NODE 16 DLINE 9
NODE 24 DLINE 10
NODE 28 DLINE 10
NODE 32 DLINE 10
NODE 36 DLINE 10
NODE 21 DLINE 11
NODE 25 DLINE 11
NODE 29 DLINE 11
NODE 33 DLINE 11
NODE 22 DLINE 12
NODE 26 DLINE 12
NODE 30 DLINE 12
NODE 34 DLINE 12
NODE 16 DLINE 13
NODE 33 DLINE 13
NODE 34 DLINE 13
NODE 35 DLINE 13
NODE 36 DLINE 13
NODE 11 DLINE 14
NODE 29 DLINE 14
NODE 30 DLINE 14
NODE 31 DLINE 14
NODE 32 DLINE 14
NODE 1 DLINE 15
NODE 21 DLINE 15
NODE 22 DLINE 15
NODE 23 DLINE 15
NODE 24 DLINE 15
NODE 6 DLINE 16
NODE 25 DLINE 16
NODE 26 DLINE 16
NODE 27 DLINE 16
NODE 28 DLINE 16
-------------------------------------------------------------DSURF-NODE TOPOLOGY
NODE 1 DSURFACE 1
NODE 2 DSURFACE 1
Expand Down
48 changes: 35 additions & 13 deletions tests/reference-files/test_nurbs_flat_plate_2d_reference.dat
Original file line number Diff line number Diff line change
Expand Up @@ -49,21 +49,43 @@ NODE 16 DLINE 1
NODE 20 DLINE 1
NODE 24 DLINE 1
NODE 28 DLINE 1
NODE 1 DLINE 2
NODE 5 DLINE 2
NODE 9 DLINE 2
NODE 13 DLINE 2
NODE 17 DLINE 2
NODE 21 DLINE 2
NODE 25 DLINE 2
NODE 3 DLINE 2
NODE 7 DLINE 2
NODE 11 DLINE 2
NODE 15 DLINE 2
NODE 19 DLINE 2
NODE 23 DLINE 2
NODE 27 DLINE 2
NODE 1 DLINE 3
NODE 5 DLINE 3
NODE 9 DLINE 3
NODE 13 DLINE 3
NODE 17 DLINE 3
NODE 21 DLINE 3
NODE 25 DLINE 3
NODE 26 DLINE 3
NODE 27 DLINE 3
NODE 28 DLINE 3
NODE 1 DLINE 4
NODE 2 DLINE 4
NODE 3 DLINE 4
NODE 4 DLINE 4
NODE 6 DLINE 4
NODE 10 DLINE 4
NODE 14 DLINE 4
NODE 18 DLINE 4
NODE 22 DLINE 4
NODE 26 DLINE 4
NODE 25 DLINE 5
NODE 26 DLINE 5
NODE 27 DLINE 5
NODE 28 DLINE 5
NODE 21 DLINE 6
NODE 22 DLINE 6
NODE 23 DLINE 6
NODE 24 DLINE 6
NODE 1 DLINE 7
NODE 2 DLINE 7
NODE 3 DLINE 7
NODE 4 DLINE 7
NODE 5 DLINE 8
NODE 6 DLINE 8
NODE 7 DLINE 8
NODE 8 DLINE 8
-------------------------------------------------------------DSURF-NODE TOPOLOGY
NODE 1 DSURFACE 1
NODE 2 DSURFACE 1
Expand Down
Loading

0 comments on commit 9c497e3

Please sign in to comment.