-
-
Notifications
You must be signed in to change notification settings - Fork 96
2. Nodes
Each node has 6 degrees of freedom (3 translations and 3 rotations). Each of these degrees of freedom needs to be restrained for the model to be stable. For example, applying full end releases to all the members framing into a node will allow the node to "spin". The node would either have to be attached to at least one of the members rotationally, or supported rotationally by a support.
Nodes can be added to an existing model using the FEModel3D.add_node
method:
Syntax:
FEModel3D.add_node(name, X, Y, Z)
"""
Name : string = A unique node name
X : number = The node's global X-coordinate
Y : number = The node's global Y-coordinate
Z : number = The node's global Z-coordinate
"""
Example:
# Add nodes to the model
myModel.add_node('N1',100,0,0)
myModel.add_node('N2',0,0,0)
myModel.add_node('N3',100,0,-100)
myModel.add_node('N4',100,-100,0)
Use the def_support
method to define supports.
Syntax:
def_support(Node, SupportX=False, SupportY=False, SupportZ=False, SupportRX=False, SupportRY=False, SupportRZ=False)
"""
Node : string = Name of the node to apply supports to
SupportX : boolean = Indicates whether the node is supported against translation in the global X direction (default = False)
SupportY : boolean = Indicates whether the node is supported against translation in the global Y direction (default = False)
SupportZ : boolean = Indicates whether the node is supported against translation in the global Z direction (default = False)
SupportRX : boolean = Indicates whether the node is supported against rotation about the global X axis (default = False)
SupportRY : boolean = Indicates whether the node is supported against rotation about the global Y axis (default = False)
SupportRZ : boolean = Indicates whether the node is supported against rotation about the global Z axis (default = False)
"""
Example:
# Add supports to the model
myModel.DefineSupport('N2', True, True, True, True, True, True)
myModel.DefineSupport('N3', True, True, True, True, True, True)
myModel.DefineSupport('N4', True, True, True, True, True, True)
Use the AddNodeLoad
method to add nodal loads to a model.
Syntax:
AddNodeLoad(Node, Direction, Load, case='Case 1')
Node : string = The name of the node where the load is being applied.
Direction : string = The direction the load is being applied in. Must be one of the following values:
'FX' = Force in the global X-direction.
'FY' = Force in the global Y-direction.
'FZ' = Force in the global Z-direction.
'MX' = Moment about the global X-axis.
'MY' = Moment about the global Y-axis.
'MZ' = Moment about the global Z-axis.
Load : number = The magnitude (value) of the load.
case : string = The name of the load case to add the load to.
Example:
# Add nodal loads to the model for the snow and wind load cases
myModel.AddNodeLoad('N1', 'FY', -50, 'S')
myModel.AddNodeLoad('N1','MX',-1000, 'W')
Use the AddNodeDisplacement
method to model a known nodal displacement, such as a support settlement.
Syntax:
AddNodeDisplacement (self, Node, Direction, Magnitude):
Node : string
The name of the node where the nodal displacement is being applied.
Direction : string
'DX' = Displacement in the global X-direction
'DY' = Displacement in the global Y-direction
'DZ' = Displacement in the global Z-direction
'RX' = Rotation about the global X-axis
'RY' = Rotation about the global Y-axis
'RZ' = Rotation about the global Z-axis
Magnitude : number
The magnitude of the displacement.
Example:
# Add a nodal displacement of -1.5 at node N4 in the global Y-direction
myModel.AddNodeDisplacement('N4', 'DY', -1.5)
The FEModel3D
class stores nodes in a Python dictionary. Nodes can be accessed using the sytax FEModel3D.Nodes['node_name']
.
Once you've retrieved a node you can access its reactions and displacements as node class attributes. Reactions and displacements are also stored in dictionary format, with the keys being the load combination names.
Examples:
# Printing the Y-reaction and the reaction moment about the Z-axis at nodes "N2" and "N3" respectively
print(myModel.Nodes['N2'].RxnFY['1.2D+1.0W'])
print(myModel.Nodes['N3'].RxnMZ['1.2D+1.0W'])