Skip to content

Commit 30ac165

Browse files
added memberSpring.py
1 parent 31664c7 commit 30ac165

2 files changed

Lines changed: 147 additions & 3 deletions

File tree

Lines changed: 126 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,126 @@
1+
from RFEM.initModel import Model, clearAttributes, deleteEmptyAttributes,ConvertToDlString
2+
from RFEM.enums import MemberSpringType, PartialActivityAlongType, MemberSpringSelfWeightDefinition
3+
4+
class MemberSpring():
5+
6+
def __init__(self,
7+
no: int = 1,
8+
member: str = "",
9+
definition_type = MemberSpringType.PARTIAL_ACTIVITY,
10+
parameters: list = [[PartialActivityAlongType.PARTIAL_ACTIVITY_TYPE_COMPLETE, 0.0], [PartialActivityAlongType.PARTIAL_ACTIVITY_TYPE_COMPLETE, 0.0]],
11+
axial_stiffness: float = 0.0,
12+
self_weight: list = [MemberSpringSelfWeightDefinition.MASS],
13+
name: str = None,
14+
comment: str = '',
15+
params: dict = None,
16+
model = Model):
17+
18+
'''
19+
Args:
20+
'''
21+
22+
# Client model | Member Hinge
23+
clientObject = model.clientModel.factory.create('ns0:member_spring')
24+
25+
# Clears object atributes | Sets all atributes to None
26+
clearAttributes(clientObject)
27+
28+
# Member Spring No.
29+
clientObject.no = no
30+
31+
# Assigned Member
32+
clientObject.assigned_to = ConvertToDlString(member)
33+
34+
# Member Spring Type
35+
clientObject.definition_type = definition_type.name
36+
37+
# Spring Nonlinearity
38+
if definition_type.name == 'PARTIAL_ACTIVITY':
39+
40+
# Negative Zone
41+
clientObject.partial_activity_along_x_negative_type = parameters[0][0].name
42+
43+
if parameters[0][0].name == "PARTIAL_ACTIVITY_TYPE_COMPLETE":
44+
clientObject.partial_activity_along_x_negative_slippage = parameters[0][1]
45+
46+
elif parameters[0][0].name == "PARTIAL_ACTIVITY_TYPE_FIXED":
47+
clientObject.partial_activity_along_x_negative_slippage = parameters[0][1]
48+
clientObject.partial_activity_along_x_negative_displacement = parameters[0][2]
49+
50+
elif parameters[0][0].name == ("PARTIAL_ACTIVITY_TYPE_FAILURE_FROM_FORCE" or "PARTIAL_ACTIVITY_TYPE_YIELDING_FROM_FORCE"):
51+
clientObject.partial_activity_along_x_negative_slippage = parameters[0][1]
52+
clientObject.partial_activity_along_x_negative_force = parameters[0][2]
53+
54+
# Positive Zone
55+
clientObject.partial_activity_along_x_positive_type = parameters[1][0].name
56+
57+
if parameters[1][0].name == "PARTIAL_ACTIVITY_TYPE_COMPLETE":
58+
clientObject.partial_activity_along_x_positive_slippage = parameters[1][1]
59+
60+
elif parameters[1][0].name == "PARTIAL_ACTIVITY_TYPE_FIXED":
61+
clientObject.partial_activity_along_x_positive_slippage = parameters[1][1]
62+
clientObject.partial_activity_along_x_positive_displacement = parameters[1][1]
63+
64+
elif parameters[1][0].name == ("PARTIAL_ACTIVITY_TYPE_FAILURE_FROM_FORCE" or "PARTIAL_ACTIVITY_TYPE_YIELDING_FROM_FORCE"):
65+
clientObject.partial_activity_along_x_positive_slippage = parameters[1][1]
66+
clientObject.partial_activity_along_x_positive_force = parameters[1][2]
67+
68+
elif definition_type.name == 'DIAGRAM':
69+
70+
clientObject.diagram_along_x_symmetric = parameters[0][0]
71+
clientObject.diagram_along_x_is_sorted = True
72+
73+
if parameters[0][0]:
74+
clientObject.diagram_along_x_start = parameters[0][1].name
75+
clientObject.diagram_along_x_end = parameters[0][1].name
76+
77+
else:
78+
clientObject.diagram_along_x_start = parameters[0][1].name
79+
clientObject.diagram_along_x_end = parameters[0][2].name
80+
81+
clientObject.diagram_along_x_table = Model.clientModel.factory.create('ns0:member_spring.diagram_along_x_table')
82+
83+
for i,j in enumerate(parameters[1]):
84+
msdx = Model.clientModel.factory.create('ns0:member_spring_diagram_along_x_table_row')
85+
msdx.no = i+1
86+
msdx.row = Model.clientModel.factory.create('ns0:member_spring_diagram_along_x_table')
87+
clearAttributes(msdx.row)
88+
msdx.row.displacement = parameters[1][i][0]
89+
msdx.row.force = parameters[1][i][1]
90+
91+
clientObject.diagram_along_x_table.member_spring_diagram_along_x_table.append(msdx)
92+
93+
# Axial Stiffness
94+
clientObject.axial_stiffness = axial_stiffness
95+
96+
# Self Weight
97+
clientObject.self_weight_definition = self_weight[0].name
98+
99+
if self_weight[0].name == 'MASS':
100+
clientObject.mass = self_weight[1]
101+
102+
elif self_weight[0].name == 'MASS_PER_LENGTH':
103+
clientObject.mass_per_length = self_weight[1]
104+
105+
elif self_weight[0].name == 'SPECIFIC_WEIGHT':
106+
clientObject.specific_weight = self_weight[1]
107+
clientObject.section_area = self_weight[2]
108+
109+
# User Defined Name
110+
if name:
111+
clientObject.user_defined_name_enabled = True
112+
clientObject.name = name
113+
114+
# Comment
115+
clientObject.comment = comment
116+
117+
# Adding optional parameters via dictionary
118+
if params:
119+
for key in params:
120+
clientObject[key] = params[key]
121+
122+
# Delete None attributes for improved performance
123+
deleteEmptyAttributes(clientObject)
124+
125+
# Add Member Spring to client model
126+
model.clientModel.service.set_member_spring(clientObject)

RFEM/enums.py

Lines changed: 21 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2626,18 +2626,36 @@ class MaterialStiffnessModificationType(Enum):
26262626

26272627
class PoissonRatioEditableGroupType(Enum):
26282628
'''
2629-
Poisson Ratio Editable Group Type
2629+
Poisson Ratio Editable Group Type Enumeration
26302630
'''
26312631
POISSON_RATIOS_GROUP_MAJOR_2D, POISSON_RATIOS_GROUP_MAJOR_3D, POISSON_RATIOS_GROUP_MINOR_2D, POISSON_RATIOS_GROUP_MINOR_3D = range(4)
26322632

26332633
class DesignSupportOrientationZType(Enum):
26342634
'''
2635-
Design Support Orientation Z Type
2635+
Design Support Orientation Z Type Enumeration
26362636
'''
26372637
DESIGN_SUPPORT_ORIENTATION_ZAXIS_BOTH, DESIGN_SUPPORT_ORIENTATION_ZAXIS_NEGATIVE, DESIGN_SUPPORT_ORIENTATION_ZAXIS_POSITIVE = range(3)
26382638

26392639
class DesignSupportOrientationYType(Enum):
26402640
'''
2641-
Design Support Orientation Y Type
2641+
Design Support Orientation Y Type Enumeration
26422642
'''
26432643
DESIGN_SUPPORT_ORIENTATION_YAXIS_BOTH, DESIGN_SUPPORT_ORIENTATION_YAXIS_NEGATIVE, DESIGN_SUPPORT_ORIENTATION_YAXIS_POSITIVE = range(3)
2644+
2645+
class MemberSpringType(Enum):
2646+
'''
2647+
Member Spring Type Enumeration
2648+
'''
2649+
PARTIAL_ACTIVITY, DIAGRAM = range(2)
2650+
2651+
class MemberSpringDiagramType(Enum):
2652+
'''
2653+
Member Spring Diagram Type Enumeration
2654+
'''
2655+
DIAGRAM_ENDING_TYPE_CONTINUOUS, DIAGRAM_ENDING_TYPE_STOP, DIAGRAM_ENDING_TYPE_FAILURE, DIAGRAM_ENDING_TYPE_YIELDING = range(4)
2656+
2657+
class MemberSpringSelfWeightDefinition(Enum):
2658+
'''
2659+
Member Spring Self Weight Definition Enumeration
2660+
'''
2661+
MASS, MASS_PER_LENGTH, SPECIFIC_WEIGHT = range(3)

0 commit comments

Comments
 (0)