Skip to content

2. Nodes

Craig edited this page Feb 19, 2022 · 7 revisions

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)

Adding Supports to a Model

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)

Nodal Loads

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')

Adding Node Displacements (e.g. Support Settlements)

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)

Getting Node Results

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'])