Skip to content

Commit 24fe09e

Browse files
authored
Merge pull request #316 from Dlubal-Software/heet-surfaceRelease
Heet surface release
2 parents 8e2d320 + 4cabd4a commit 24fe09e

File tree

5 files changed

+314
-0
lines changed

5 files changed

+314
-0
lines changed

RFEM/SpecialObjects/surfaceRelease.py

Lines changed: 93 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,93 @@
1+
from RFEM.initModel import Model, clearAttributes, deleteEmptyAttributes, ConvertToDlString
2+
from RFEM.enums import SurfaceReleaseReleaseLocation
3+
4+
class SurfaceRelease():
5+
6+
def __init__(self,
7+
no: int = 1,
8+
surfaces: str = '',
9+
surface_release_type: int = 1,
10+
release_location = SurfaceReleaseReleaseLocation.RELEASE_LOCATION_ORIGIN,
11+
released_members: str = None,
12+
released_surfaces: str = None,
13+
released_solids: str = None,
14+
use_nodes_as_definition_nodes: str = None,
15+
use_lines_as_definition_lines: str = None,
16+
deactivated: bool = False,
17+
name: str = None,
18+
comment: str = '',
19+
params: dict = None,
20+
model = Model):
21+
22+
'''
23+
Args:
24+
no (int): Surface Release Tag
25+
surfaces (str): Assigned Surfaces
26+
surface_release_type (int): Surface Release Type Number
27+
release_location (enum): Surface Release Release Location Enumeration
28+
released_members (str): Assigned Released Members
29+
released_surfaces (str): Assigned Released Surfaces
30+
released_solids (str): Assigned Released Solids
31+
use_nodes_as_definition_nodes (str): Assigned Definition Nodes
32+
use_lines_as_definition_lines (str): Assigned Definition Lines
33+
deactivated (bool): Activate/Deactivate Surface Release
34+
name (str, optional): User Defined Surface Release Name
35+
comment (str, optional): Comment
36+
params (dict, optional): Any WS Parameter relevant to the object and its value in form of a dictionary
37+
model (RFEM Class, optional): Model to be edited
38+
'''
39+
40+
# Client model | Surface Release
41+
clientObject = model.clientModel.factory.create('ns0:surface_release')
42+
43+
# Clears object atributes | Sets all atributes to None
44+
clearAttributes(clientObject)
45+
46+
# Surface Release No.
47+
clientObject.no = no
48+
49+
# Assign Surface
50+
clientObject.surfaces = ConvertToDlString(surfaces)
51+
52+
# Assign Surface Release Type
53+
clientObject.surface_release_type = surface_release_type
54+
55+
# Surface Release Location
56+
clientObject.release_location = release_location.name
57+
58+
# Released Members
59+
clientObject.released_members = ConvertToDlString(released_members)
60+
61+
# Released Surfaces
62+
clientObject.released_surfaces = ConvertToDlString(released_surfaces)
63+
64+
# Released Solid
65+
clientObject.released_solids = ConvertToDlString(released_solids)
66+
67+
# Assign Nodes as Definition Nodes
68+
clientObject.use_nodes_as_definition_nodes = ConvertToDlString(use_nodes_as_definition_nodes)
69+
70+
# Assign Nodes as Definition Nodes
71+
clientObject.use_lines_as_definition_lines = ConvertToDlString(use_lines_as_definition_lines)
72+
73+
# Activate/Deactivate Surface Release
74+
clientObject.deactivated = deactivated
75+
76+
# Surface Release User defined name
77+
if name:
78+
clientObject.user_defined_name_enabled = True
79+
clientObject.name = name
80+
81+
# Comment
82+
clientObject.comment = comment
83+
84+
# Adding optional parameters via dictionary
85+
if params:
86+
for key in params:
87+
clientObject[key] = params[key]
88+
89+
# Delete None attributes for improved performance
90+
deleteEmptyAttributes(clientObject)
91+
92+
# Add Surface Release Type to Client Model
93+
model.clientModel.service.set_surface_release(clientObject)
Lines changed: 81 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,81 @@
1+
from RFEM.initModel import Model, clearAttributes, deleteEmptyAttributes, ConvertToDlString
2+
from RFEM.dataTypes import inf
3+
from RFEM.enums import SurfaceTranslationalReleaseNonlinearity, SurfaceReleaseTypeLocalAxisSystemType
4+
5+
class SurfaceReleaseType():
6+
7+
def __init__(self,
8+
no: int = 1,
9+
spring_constant: list = [inf, inf, inf],
10+
translational_release_ux_nonlinearity = SurfaceTranslationalReleaseNonlinearity.NONLINEARITY_TYPE_NONE,
11+
translational_release_uy_nonlinearity = SurfaceTranslationalReleaseNonlinearity.NONLINEARITY_TYPE_NONE,
12+
translational_release_uz_nonlinearity = SurfaceTranslationalReleaseNonlinearity.NONLINEARITY_TYPE_NONE,
13+
local_axis_system_type = SurfaceReleaseTypeLocalAxisSystemType.LOCAL_AXIS_SYSTEM_TYPE_REVERSED_TO_ORIGINAL_SURFACE,
14+
surface_releases: str = None,
15+
name: str = None,
16+
comment: str = '',
17+
params: dict = None,
18+
model = Model):
19+
20+
'''
21+
Surface Release Type
22+
23+
Args:
24+
no (int): Surface Release Type Tag
25+
spring_constant (list): Spring Constant List
26+
spring_constant = [translational_release_u_x, translational_release_u_y, translational_release_u_z]
27+
translational_release_ux_nonlinearity (enum): Surface Translation Release along X Direction Nonliniearity Enumeration
28+
translational_release_uy_nonlinearity (enum): Surface Translation Release along Y Direction Nonliniearity Enumeration
29+
translational_release_uz_nonlinearity (enum): Surface Translation Release along Z Direction Nonliniearity Enumeration
30+
local_axis_system_type (enum): Surface Release Local Axis System Enumeration
31+
surface_releases (str, optional): Assign Surface Release
32+
name (str, optional): User Defined Surface Release Type Name
33+
comment (str, optional): Comment
34+
params (dict, optional): Any WS Parameter relevant to the object and its value in form of a dictionary
35+
model (RFEM Class, optional): Model to be edited
36+
'''
37+
38+
# Client model | Surface Release Type
39+
clientObject = model.clientModel.factory.create('ns0:surface_release_type')
40+
41+
# Clears object atributes | Sets all atributes to None
42+
clearAttributes(clientObject)
43+
44+
# Surface Release Type No.
45+
clientObject.no = no
46+
47+
# Surface Release Type Condition
48+
clientObject.translational_release_u_x = spring_constant[0]
49+
clientObject.translational_release_u_y = spring_constant[1]
50+
clientObject.translational_release_u_z = spring_constant[2]
51+
52+
# Surface Release Nonlinearity Type
53+
clientObject.translational_release_u_x_nonlinearity = translational_release_ux_nonlinearity.name
54+
clientObject.translational_release_u_y_nonlinearity = translational_release_uy_nonlinearity.name
55+
clientObject.translational_release_u_z_nonlinearity = translational_release_uz_nonlinearity.name
56+
57+
# Surface Release Local Axis System
58+
clientObject.local_axis_system_type = local_axis_system_type.name
59+
60+
# Assign Surface Releases
61+
if surface_releases:
62+
clientObject.surface_releases = ConvertToDlString(surface_releases)
63+
64+
# Surface Release Type User defined name
65+
if name:
66+
clientObject.user_defined_name_enabled = True
67+
clientObject.name = name
68+
69+
# Comment
70+
clientObject.comment = comment
71+
72+
# Adding optional parameters via dictionary
73+
if params:
74+
for key in params:
75+
clientObject[key] = params[key]
76+
77+
# Delete None attributes for improved performance
78+
deleteEmptyAttributes(clientObject)
79+
80+
# Add Surface Release Type to Client Model
81+
model.clientModel.service.set_surface_release_type(clientObject)

RFEM/enums.py

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2593,3 +2593,21 @@ class NodalSupportStiffnessDiagramType(Enum):
25932593
Nodal Support Stiffness Diagram Type Enumeration
25942594
'''
25952595
STIFFNESS_DIAGRAM_ENDING_TYPE_CONTINUOUS, STIFFNESS_DIAGRAM_ENDING_TYPE_FAILURE, STIFFNESS_DIAGRAM_ENDING_TYPE_YIELDING = range(3)
2596+
2597+
class SurfaceTranslationalReleaseNonlinearity(Enum):
2598+
'''
2599+
Surface Translational Release Nonlinearity Enumeration
2600+
'''
2601+
NONLINEARITY_TYPE_NONE, NONLINEARITY_TYPE_FAILURE_IF_NEGATIVE, NONLINEARITY_TYPE_FAILURE_IF_POSITIVE = range(3)
2602+
2603+
class SurfaceReleaseTypeLocalAxisSystemType(Enum):
2604+
'''
2605+
Surface Release Type Local Axis System Type
2606+
'''
2607+
LOCAL_AXIS_SYSTEM_TYPE_REVERSED_TO_ORIGINAL_SURFACE, LOCAL_AXIS_SYSTEM_TYPE_SAME_AS_ORIGINAL_SURFACE = range(2)
2608+
2609+
class SurfaceReleaseReleaseLocation(Enum):
2610+
'''
2611+
Surface Release Release Location Enumeration
2612+
'''
2613+
RELEASE_LOCATION_ORIGIN, RELEASE_LOCATION_RELEASED = range(2)

UnitTests/test_SurfaceRelease.py

Lines changed: 91 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,91 @@
1+
import os
2+
import sys
3+
PROJECT_ROOT = os.path.abspath(os.path.join(
4+
os.path.dirname(__file__),
5+
os.pardir)
6+
)
7+
sys.path.append(PROJECT_ROOT)
8+
9+
from RFEM.dataTypes import inf
10+
from RFEM.initModel import Model
11+
from RFEM.enums import *
12+
from RFEM.BasicObjects.material import Material
13+
from RFEM.BasicObjects.section import Section
14+
from RFEM.BasicObjects.thickness import Thickness
15+
from RFEM.BasicObjects.node import Node
16+
from RFEM.BasicObjects.line import Line
17+
from RFEM.BasicObjects.member import Member
18+
from RFEM.BasicObjects.surface import Surface
19+
from RFEM.BasicObjects.solid import Solid
20+
from RFEM.TypesForSpecialObjects.surfaceReleaseType import SurfaceReleaseType
21+
from RFEM.SpecialObjects.surfaceRelease import SurfaceRelease
22+
23+
if Model.clientModel is None:
24+
Model()
25+
26+
def test_LineRelease():
27+
28+
Model.clientModel.service.delete_all()
29+
Model.clientModel.service.begin_modification()
30+
31+
Material(1)
32+
Section(1, 'IPE 120')
33+
Thickness(1, uniform_thickness_d= 0.1)
34+
35+
Node(1,0,0,0)
36+
Node(2,10,0,0)
37+
Node(3,10,10,0)
38+
Node(4,0,10,0)
39+
Node(5,0,0,-10)
40+
Node(6,10,0,-10)
41+
Node(7,10,10,-10)
42+
Node(8,0,10,-10)
43+
44+
Line(1,'1 2')
45+
Line(2,'2 3')
46+
Line(3,'3 4')
47+
Line(4,'4 1')
48+
Line(5,'5 6')
49+
Line(6,'6 7')
50+
Line(7,'7 8')
51+
Line(8,'8 5')
52+
Line(9,'1 5')
53+
Line(10,'2 6')
54+
Line(11,'3 7')
55+
Line(12,'4 8')
56+
57+
Member(1, line=1)
58+
Member(2, line=2)
59+
Member(3, line=3)
60+
Member(4, line=4)
61+
Member(5, line=5)
62+
Member(6, line=6)
63+
Member(7, line=7)
64+
Member(8, line=8)
65+
Member(9, line=9)
66+
Member(10, line=10)
67+
Member(11, line=11)
68+
Member(12, line=12)
69+
70+
Surface(1)
71+
Surface(2, '5 6 7 8')
72+
Surface(3, '1 5 9 10')
73+
Surface(4, '2 6 10 11')
74+
Surface(5, '3 7 11 12')
75+
Surface(6, '4 8 9 12')
76+
77+
Solid(1, '1 2 3 4 5 6')
78+
79+
SurfaceReleaseType(1, [0.1, 0.2, inf])
80+
SurfaceReleaseType(2, [inf, inf, inf])
81+
82+
SurfaceRelease(1, '2', 1, SurfaceReleaseReleaseLocation.RELEASE_LOCATION_ORIGIN, '6', '4 5', '1', '7', '5 8', name='Surface Release')
83+
84+
Model.clientModel.service.finish_modification()
85+
86+
sr1 = Model.clientModel.service.get_surface_release(1)
87+
88+
assert sr1.surface_release_type == 1
89+
assert sr1.name == 'Surface Release'
90+
assert sr1.use_nodes_as_definition_nodes == '7'
91+
assert sr1.released_surfaces == '4 5'

UnitTests/test_SurfaceReleaseType.py

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
import os
2+
import sys
3+
PROJECT_ROOT = os.path.abspath(os.path.join(
4+
os.path.dirname(__file__),
5+
os.pardir)
6+
)
7+
sys.path.append(PROJECT_ROOT)
8+
9+
from RFEM.initModel import Model
10+
from RFEM.enums import *
11+
from RFEM.dataTypes import inf
12+
from RFEM.TypesForSpecialObjects.surfaceReleaseType import SurfaceReleaseType
13+
14+
if Model.clientModel is None:
15+
Model()
16+
17+
def test_SurfaceReleaseType():
18+
19+
Model.clientModel.service.delete_all()
20+
Model.clientModel.service.begin_modification()
21+
22+
SurfaceReleaseType(1, [inf, 1, 0.1], SurfaceTranslationalReleaseNonlinearity.NONLINEARITY_TYPE_NONE, SurfaceTranslationalReleaseNonlinearity.NONLINEARITY_TYPE_FAILURE_IF_POSITIVE,
23+
SurfaceTranslationalReleaseNonlinearity.NONLINEARITY_TYPE_FAILURE_IF_NEGATIVE, SurfaceReleaseTypeLocalAxisSystemType.LOCAL_AXIS_SYSTEM_TYPE_SAME_AS_ORIGINAL_SURFACE,
24+
name = 'Surface Release')
25+
26+
Model.clientModel.service.finish_modification()
27+
28+
sr = Model.clientModel.service.get_surface_release_type(1)
29+
30+
assert sr.translational_release_u_y == 1
31+
assert sr.name == 'Surface Release'

0 commit comments

Comments
 (0)