Skip to content

3. Members

Craig edited this page Mar 21, 2021 · 12 revisions

Element Formulation

All members in PyNite are 3D linear elastic prismatic members. They have six degrees of freedom at each end, 3 translations and 3 rotations. Transverse shear deformations are not yet accounted for.

Member Orientation

PyNite orients members for you unless you specify how you want them oriented using an auxiliary node. The local x-axis for a member is always defined as the vector from the i-node to the j-node. The local coordinate system, as well as the member internal sign convention, are shown in the figure below.

Default Orientation

The default orientation is similar to that used by many commercial programs. By default, the local z-axis is always parallel to the global XZ plane (i.e. always horizontal), and the local y-axis is always perpendicular to the local xz plane. By default, unless the member is vertical, the local y-axis always has an upward component. If the member is vertical the local y-axis defaults to being in the global XY plane. For vertical members, if the i-node is on the bottom, the local y-axis points in the negative global X direction; and if the i-node is on top, the local y-axis points in the positive global X direction.

Using Auxiliary Nodes to Orient Members

For more control over local axis orientation, auxiliary nodes can be used. When an auxiliary node is specified for the member, the local z-axis will be taken to lie in a plane defined by the i-node, the j-node, and the auxiliary node. The local y-axis will be determined by taking the cross product of the local z-axis with the local x-axis (in that order), giving a vector perpendicular to the local xz plane.

The local z-axis will be taken as positive on the side of the member where the auxiliary node lies. For example, looking down the local x-axis of a member, if the auxiliary node is to the right of a member, the local z-axis will be positive to the right of that member, and negative to the left of it.

Auxiliary nodes can be used to orient a member arbitrarily in space.

Adding Members to a Model

Members can be added to a model using the AddMember method.

Syntax:

AddMember(Name, iNode, jNode, E, G, Iy, Iz, J, A)

"""
Name : string = A unique member name
iNode : string = The name of the node at the start of the member
jNode : string = The name of the node at the end of the member
E : number = The modulus of elasticity of the member
G : number = The shear modulus of the member
Iy : number = The y-axis (weak-axis) moment of inertia of the member
Ix : number = The x-axis (strong-axis) moment of inertia of the member
J : number = The polar moment of inertia of the member
A : number = The cross-sectional area of the member
"""

Example:

# Add members to the model
myModel.AddMember('M1','N2','N1',30000,10000,100,100,50,10)
myModel.AddMember('M2','N3','N1',30000,10000,100,100,50,10)
myModel.AddMember('M3','N4','N1',30000,10000,100,100,50,10)

Member End Releases (Hinged Members and Truss Members)

Member end releases can be used to model hinges at the ends of members. This can be useful for modeling simple shear connections and truss members.

Syntax:

DefineReleases(Member, Dxi = False, Dyi = False, Dzi = False, Rxi = False, Ryi = False, Rzi = False, Dxj = False, Dyj = False, Dzj = False, Rxj = False, Ryj = False, Rzj = False)

"""
Member : string = The unique name of the member to apply releases to
Dxi : bool = Indicates whether the displacement in the local x-direction at the i-node is released
Dyi : bool = Indicates whether the displacement in the local y-direction at the i-node is released
Dzi : bool = Indicates whether the displacement in the local z-direction at the i-node is released
Rxi : bool = Indicates whether the rotation about the local x-axis at the i-node is released
Ryi : bool = Indicates whether the rotation about the local y-axis at the i-node is released
Rzi : bool = Indicates whether the rotation about the local z-axis at the i-node is released
Dxj : bool = Indicates whether the displacement in the local x-direction at the j-node is released
Dyj : bool = Indicates whether the displacement in the local y-direction at the j-node is released
Dzj : bool = Indicates whether the displacement in the local z-direction at the j-node is released
Rxj : bool = Indicates whether the rotation about the local x-axis at the j-node is released
Ryj : bool = Indicates whether the rotation about the local y-axis at the j-node is released
Rzj : bool = Indicates whether the rotation about the local z-axis at the j-node is released
"""

Hinge Example:

# Adds a hinge at the start of member 'M1'
myModel.DefineReleases('M2', False, False, False, False, True, True, False, False, False, False, False, False)

Truss Member Example:

# Converts member 'M2' to a truss member by applying end releases about the local y and z axes
myModel.DefineReleases('M2', False, False, False, False, True, True, False, False, False, False, True, True)

Member Loads

PyNite supports two types of member loads: point loads and distributed loads. Use the AddMemberPtLoad and AddMemberDistLoad methods to add member loads to a model. The sign convention for loads and moments is consistent with the member’s local axes and the right hand rule. For example, a load that is applied in the positive y-direction is a positive load, and a moment applied counter-clockwise is positive.

Syntax:

AddMemberPtLoad(Member, Direction, P, x, case='Case 1')

Member : string = The unique name of the member 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 local x-direction.
    'Fy' = Force in the local y-direction.
    'Fz' = Force in the local z-direction.
    'Mx' = Moment about the local x-axis.
    'My' = Moment about the local y-axis.
    'Mz' = Moment about the local z-axis.
P : number = The magnitude (value) of the load.
x : number = The location of the load measured along the local x-axis.
case : string = The name of the load case to add the load to.

AddMemberDistLoad(Member, Direction, w1, w2, x1, x2, case='Case 1')

Member : string = The unique name of the member where the load is being applied
Direction : string = The direction the load is being applied in. Must be one of the following values:
    'Fx' = Distributed force in the local x-direction
    'Fy' = Distributed force in the local y-direction
    'Fz' = Distributed force in the local z-direction
w1 : number = The magnitude (value) of the load at the starting point
w2 : number = The magnitude (value) of the load at the ending point
x1 : number = The starting location of the load measured along the local x-axis. If omitted, the start of the member will be assumed.
x2 : number = The ending location of the load measured along the local x-axis. If omitted, the end of the member will be assumed.
case : string = The name of the load case to add the load to.

Example:

# Adds a linearly varying distributed dead load along member 'M3' from start to end
myModel.AddMemberDistLoad('M3','Fy', w1=2.3, w2=1.9, case='D')

# Adds a concentrated torsional moment live load to member 'M2'
myModel.AddMemberPtLoad('M2','Mx',-500, 5, case='L')

Getting Member Results

The FEModel3D class stores members in a Python dictionary. To access a member you can use the syntax FEModel3D.Members['member_name'].

Once you've retrieved a member you can use the Moment, Shear, Deflection, MaxMoment, MaxShear, PlotMoment, PlotShear, and PlotDeflection methods to obtain individual member results.

Examples:

# Plotting the local z-direction moment diagram for member "M3" for load combination '1.4D'
myModel.Members['M3'].PlotMoment("Mz", '1.4D')

# Getting the local deflection of member "M2" in the local y-direction at 3 units from its starting point
myModel.Members['M2'].Deflection("dy", 3, '1.4D')

Clone this wiki locally