Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Improve surface nurbs sets #65

Merged
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 0 additions & 3 deletions meshpy/container.py
Original file line number Diff line number Diff line change
Expand Up @@ -49,9 +49,6 @@ class GeometryName(OrderedDict):
functions. The sets can be accessed by a unique name. There is no
distinction between different types of geometry, every name can only be
used once -> use meaningful names.
OrderedDict is used as base class so that the test cases can compare the
output string without special implementation (this should not cost much
performance).
"""

def __setitem__(self, key, value):
Expand Down
9 changes: 6 additions & 3 deletions meshpy/mesh.py
Original file line number Diff line number Diff line change
Expand Up @@ -174,9 +174,12 @@ def add_geometry_set(self, geometry_set):
self.geometry_sets.append(geometry_set.geometry_type, geometry_set)

def add_geometry_name(self, geometry_name):
"""Add a set of geometry sets to this mesh."""
for _key, value in geometry_name.items():
self.add(value)
"""Add a set of geometry sets to this mesh. Sort by the keys here to create
a deterministic ordering, especially for testing purposes"""
keys = list(geometry_name.keys())
keys.sort()
for key in keys:
self.add(geometry_name[key])

def replace_node(self, old_node, new_node):
"""Replace the first node with the second node."""
Expand Down
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
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,8 @@
-----------------------------------------------------------------------MATERIALS
MAT 1 MAT_BeamReissnerElastHyper YOUNG -1.0 POISSONRATIO 0.0 DENS 0.0 CROSSAREA 3.141592653589793 SHEARCORR 1 MOMINPOL 1.5707963267948966 MOMIN2 0.7853981633974483 MOMIN3 0.7853981633974483
-------------------------------------------------------------DNODE-NODE TOPOLOGY
NODE 1 DNODE 1
NODE 17 DNODE 2
NODE 17 DNODE 1
NODE 1 DNODE 2
-------------------------------------------------------------DLINE-NODE TOPOLOGY
NODE 1 DLINE 1
NODE 2 DLINE 1
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,8 @@
-----------------------------------------------------------------------MATERIALS
MAT 1 MAT_BeamReissnerElastHyper YOUNG -1.0 POISSONRATIO 0.0 DENS 0.0 CROSSAREA 3.141592653589793 SHEARCORR 1 MOMINPOL 1.5707963267948966 MOMIN2 0.7853981633974483 MOMIN3 0.7853981633974483
-------------------------------------------------------------DNODE-NODE TOPOLOGY
NODE 1 DNODE 1
NODE 9 DNODE 2
NODE 9 DNODE 1
NODE 1 DNODE 2
-------------------------------------------------------------DLINE-NODE TOPOLOGY
NODE 1 DLINE 1
NODE 2 DLINE 1
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,8 @@
-----------------------------------------------------------------------MATERIALS
MAT 1 MAT_BeamReissnerElastHyper YOUNG -1.0 POISSONRATIO 0.0 DENS 0.0 CROSSAREA 3.141592653589793 SHEARCORR 1 MOMINPOL 1.5707963267948966 MOMIN2 0.7853981633974483 MOMIN3 0.7853981633974483
-------------------------------------------------------------DNODE-NODE TOPOLOGY
NODE 1 DNODE 1
NODE 11 DNODE 2
NODE 11 DNODE 1
NODE 1 DNODE 2
-------------------------------------------------------------DLINE-NODE TOPOLOGY
NODE 1 DLINE 1
NODE 2 DLINE 1
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,10 +9,10 @@
-----------------------------------------------------------------------MATERIALS
MAT 1 MAT_BeamReissnerElastHyper YOUNG 207.0 POISSONRATIO 0.0 DENS 0.0 CROSSAREA 0.031415926535897934 SHEARCORR 1.1 MOMINPOL 0.00015707963267948968 MOMIN2 7.853981633974484e-05 MOMIN3 7.853981633974484e-05
-------------------------------------------------------------DNODE-NODE TOPOLOGY
NODE 1 DNODE 1
NODE 7 DNODE 2
NODE 8 DNODE 3
NODE 14 DNODE 4
NODE 7 DNODE 1
NODE 1 DNODE 2
NODE 14 DNODE 3
NODE 8 DNODE 4
-------------------------------------------------------------DLINE-NODE TOPOLOGY
NODE 1 DLINE 1
NODE 2 DLINE 1
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,13 +9,13 @@
-----------------------------------------------------------------------MATERIALS
MAT 1 MAT_BeamKirchhoffTorsionFreeElastHyper YOUNG -1.0 DENS 0.0 CROSSAREA 3.141592653589793 MOMIN 0.7853981633974483
-------------------------------------------------------------DNODE-NODE TOPOLOGY
NODE 5 DNODE 1
NODE 10 DNODE 1
NODE 18 DNODE 1
NODE 23 DNODE 1
NODE 28 DNODE 1
NODE 31 DNODE 1
NODE 13 DNODE 2
NODE 13 DNODE 1
NODE 5 DNODE 2
NODE 10 DNODE 2
NODE 18 DNODE 2
NODE 23 DNODE 2
NODE 28 DNODE 2
NODE 31 DNODE 2
NODE 1 DNODE 3
NODE 6 DNODE 3
NODE 11 DNODE 3
Expand Down Expand Up @@ -113,4 +113,4 @@ NODE 31 COORD 0.590811690796 1 0
23 BEAM3EB LINE2 29 30 MAT 1
24 BEAM3EB LINE2 30 31 MAT 1
------------------------------------------------------------------FLUID ELEMENTS
-----------------------------------------------------------------------------END
-----------------------------------------------------------------------------END
154 changes: 77 additions & 77 deletions tests/reference-files/test_mesh_creation_functions_wire_reference.dat
Original file line number Diff line number Diff line change
Expand Up @@ -9,82 +9,82 @@
-----------------------------------------------------------------------MATERIALS
MAT 1 MAT_BeamKirchhoffTorsionFreeElastHyper YOUNG -1.0 DENS 0.0 CROSSAREA 0.007853981633974483 MOMIN 4.9087385212340526e-06
-------------------------------------------------------------DNODE-NODE TOPOLOGY
NODE 1 DNODE 1
NODE 4 DNODE 1
NODE 7 DNODE 1
NODE 10 DNODE 1
NODE 13 DNODE 1
NODE 16 DNODE 1
NODE 19 DNODE 1
NODE 22 DNODE 1
NODE 25 DNODE 1
NODE 28 DNODE 1
NODE 31 DNODE 1
NODE 34 DNODE 1
NODE 37 DNODE 1
NODE 40 DNODE 1
NODE 43 DNODE 1
NODE 46 DNODE 1
NODE 49 DNODE 1
NODE 52 DNODE 1
NODE 55 DNODE 1
NODE 3 DNODE 2
NODE 6 DNODE 2
NODE 9 DNODE 2
NODE 12 DNODE 2
NODE 15 DNODE 2
NODE 18 DNODE 2
NODE 21 DNODE 2
NODE 24 DNODE 2
NODE 27 DNODE 2
NODE 30 DNODE 2
NODE 33 DNODE 2
NODE 36 DNODE 2
NODE 39 DNODE 2
NODE 42 DNODE 2
NODE 45 DNODE 2
NODE 48 DNODE 2
NODE 51 DNODE 2
NODE 54 DNODE 2
NODE 57 DNODE 2
NODE 58 DNODE 3
NODE 61 DNODE 3
NODE 64 DNODE 3
NODE 67 DNODE 3
NODE 70 DNODE 3
NODE 73 DNODE 3
NODE 76 DNODE 3
NODE 79 DNODE 3
NODE 82 DNODE 3
NODE 85 DNODE 3
NODE 88 DNODE 3
NODE 91 DNODE 3
NODE 94 DNODE 3
NODE 97 DNODE 3
NODE 100 DNODE 3
NODE 103 DNODE 3
NODE 106 DNODE 3
NODE 109 DNODE 3
NODE 112 DNODE 3
NODE 60 DNODE 4
NODE 63 DNODE 4
NODE 66 DNODE 4
NODE 69 DNODE 4
NODE 72 DNODE 4
NODE 75 DNODE 4
NODE 78 DNODE 4
NODE 81 DNODE 4
NODE 84 DNODE 4
NODE 87 DNODE 4
NODE 90 DNODE 4
NODE 93 DNODE 4
NODE 96 DNODE 4
NODE 99 DNODE 4
NODE 102 DNODE 4
NODE 105 DNODE 4
NODE 108 DNODE 4
NODE 111 DNODE 4
NODE 114 DNODE 4
NODE 3 DNODE 1
NODE 6 DNODE 1
NODE 9 DNODE 1
NODE 12 DNODE 1
NODE 15 DNODE 1
NODE 18 DNODE 1
NODE 21 DNODE 1
NODE 24 DNODE 1
NODE 27 DNODE 1
NODE 30 DNODE 1
NODE 33 DNODE 1
NODE 36 DNODE 1
NODE 39 DNODE 1
NODE 42 DNODE 1
NODE 45 DNODE 1
NODE 48 DNODE 1
NODE 51 DNODE 1
NODE 54 DNODE 1
NODE 57 DNODE 1
NODE 1 DNODE 2
NODE 4 DNODE 2
NODE 7 DNODE 2
NODE 10 DNODE 2
NODE 13 DNODE 2
NODE 16 DNODE 2
NODE 19 DNODE 2
NODE 22 DNODE 2
NODE 25 DNODE 2
NODE 28 DNODE 2
NODE 31 DNODE 2
NODE 34 DNODE 2
NODE 37 DNODE 2
NODE 40 DNODE 2
NODE 43 DNODE 2
NODE 46 DNODE 2
NODE 49 DNODE 2
NODE 52 DNODE 2
NODE 55 DNODE 2
NODE 60 DNODE 3
NODE 63 DNODE 3
NODE 66 DNODE 3
NODE 69 DNODE 3
NODE 72 DNODE 3
NODE 75 DNODE 3
NODE 78 DNODE 3
NODE 81 DNODE 3
NODE 84 DNODE 3
NODE 87 DNODE 3
NODE 90 DNODE 3
NODE 93 DNODE 3
NODE 96 DNODE 3
NODE 99 DNODE 3
NODE 102 DNODE 3
NODE 105 DNODE 3
NODE 108 DNODE 3
NODE 111 DNODE 3
NODE 114 DNODE 3
NODE 58 DNODE 4
NODE 61 DNODE 4
NODE 64 DNODE 4
NODE 67 DNODE 4
NODE 70 DNODE 4
NODE 73 DNODE 4
NODE 76 DNODE 4
NODE 79 DNODE 4
NODE 82 DNODE 4
NODE 85 DNODE 4
NODE 88 DNODE 4
NODE 91 DNODE 4
NODE 94 DNODE 4
NODE 97 DNODE 4
NODE 100 DNODE 4
NODE 103 DNODE 4
NODE 106 DNODE 4
NODE 109 DNODE 4
NODE 112 DNODE 4
-------------------------------------------------------------DLINE-NODE TOPOLOGY
NODE 1 DLINE 1
NODE 2 DLINE 1
Expand Down Expand Up @@ -393,4 +393,4 @@ NODE 114 COORD 3 1.8 -0.173205080757
75 BEAM3EB LINE2 112 113 MAT 1
76 BEAM3EB LINE2 113 114 MAT 1
------------------------------------------------------------------FLUID ELEMENTS
-----------------------------------------------------------------------------END
-----------------------------------------------------------------------------END
4 changes: 2 additions & 2 deletions tests/reference-files/test_meshpy_vtk_beam_reference.vtu
Original file line number Diff line number Diff line change
Expand Up @@ -75,7 +75,7 @@
1 1 1 1 1 1
1 1 1 1 1 1
</DataArray>
<DataArray type="Int32" Name="geometry_point_set_02" format="ascii" RangeMin="-1" RangeMax="1">
<DataArray type="Int32" Name="geometry_point_set_01" format="ascii" RangeMin="-1" RangeMax="1">
-1 -1 -1 -1 -1 1
1 -1 -1 -1 -1 -1
-1 -1 -1 -1 -1 -1
Expand Down Expand Up @@ -411,7 +411,7 @@
1 -1 -1 -1 -1 -1
-1 -1 -1 -1 -1 -1
</DataArray>
<DataArray type="Int32" Name="geometry_point_set_01" format="ascii" RangeMin="-1" RangeMax="1">
<DataArray type="Int32" Name="geometry_point_set_02" format="ascii" RangeMin="-1" RangeMax="1">
-1 -1 -1 -1 -1 -1
-1 -1 -1 -1 -1 -1
-1 -1 -1 -1 -1 -1
Expand Down
Loading
Loading