-
-
Notifications
You must be signed in to change notification settings - Fork 97
4. Plate Elements
PyNite offers 2 types of plate elements: rectangular plate elements and quadrilaterals.
Rectangular plate elements are elastic, and assume a bilinear displacement function. The stiffness matrices used were derived using the method given in "A First Course in the Finite Element Method", by Daryl L. Logan. This simple element is the same one proposed in "Finite Element Fundamentals" by Richard H. Gallagher. This element must be rectangular. It produces very smooth stress contours, but may not be appropriate for thick plates as it does not account for transverse shear deformations. Using non-rectangular shapes for this element will yield erroneous results.
Quadrilateral elements are based on the MITC4 formulation published in "Finite Element Procedures", 2nd Edition, 4th Printing, by Klaus-Jurgen Bathe. This book is freely available in PDF format from MIT's website. The MITC4 element is an isoparametric element that performs very well for thick and thin plates. It's a well-proven element used in many commercial programs. One caution is that stress results for the MITC4 element can be difficult to interpret. My experience has been that it predicts results at the center of the plate extremely well, but results at the corners need to be interpolated or extrapolated. To work around this issue with the MITC4 element there are 2 approaches that can be taken:
- Interpolate or extrapolate corner results by using center results from two or more plates.
- Use external nodal force results (which are accurate) rather than internal plate stress results.
There is an example showing how to interpret quadrilateral results in the "Examples" folder.
Large numbers of plate and quad elements will slow down the solution speed, however the owner of this project has tested models with as many as 800 plate elements and found that the solution took less than 30 seconds.
Rectangular plates and quads have four nodes that are defined in a counter-clockwise order as follows: i, j, m, and n. The local x-axis is defined by a vector extending from the i-node to the j-node. The local y-axis is then placed in the plane of the element perpendicular to the x-axis, pointing toward the side where the n-node is located. The z-axis is then calculated as being orthogonal to the local xy plane using the right hand rule to determine the positive z-direction.
Rectangular plate and quad elements have 6 degrees of freedom at each node: three translations (x, y, and z) and two rotations (θx and θy). Rectangular plates and quads have a weak spring applied for the drilling degree of freedom (θz). A rectangular plate has a total of 24 degrees of freedom (6 at each of 4 nodes).
Rectangular plates and quadrilaterals can be defined using the FEModel3D.AddPlate()
and FEModel3D.AddQuad()
methods:
Syntax:
FEModel3D.AddPlate(name, iNode, jNode, mNode, nNode, t, E, nu)
"""
name : string = A unique plate name
iNode : string = The name of the i-node (first node in counter-clockwise order)
jNode : string = The name of the j-node (second node in counter-clockwise order)
mNode : string = The name of the m-node (third node in counter-clockwise order)
nNode : string = The name of the n-node (fourth node in counter-clockwise order)
t : number = Plate thickness
E : number = Plate modulus of elasticity
nu : number = Poisson's ratio for the plate
"""
FEModel3D.AddQuad(name, iNode, jNode, mNode, nNode, t, E, nu):
"""
name : string = A unique user-defined name for the quadrilateral. If None or "", a name will be automatically assigned
iNode : string = The name of the i-node (1st node defined in counter-clockwise order).
jNode : string = The name of the j-node (2nd node defined in counter-clockwise order).
mNode : string = The name of the m-node (3rd node defined in counter-clockwise order).
nNode : string = The name of the n-node (4th node defined in counter-clockwise order).
t : number = The thickness of the quadrilateral.
E : number = The modulus of elasticity of the quadrilateral.
nu : number = Posson's ratio for the quadrilateral.
"""
Example:
# Add a plate to the model
myModel.AddPlate('P1', 'N1', 'N2', 'N3', 'N4', 0.5, 29000, 0.3)
# Add a quad to the model
myModel.AddQuad('Q1', 'N1', 'N2', 'N3', 'N4', 0.5, 29000, 0.3)
Out-of-plane plate results are presented as local forces per unit width. The forces available are the local shears per unit width (Qx, and Qy) and the local moments per unit width (Mx, My, and Mxy). Forces in the local x-direction should be thought of as forces for the plate spanning parallel to the local x-axis. Similarly forces in the local y-direction are forces for the plate spanning parallel to the local y-axis. This is a commonly used convention, but it can be confusing. Remember that the moment about the local x-axis is My.
Out-of-plane results can be obtained for any point in the plate's local coordinate system using the Plate3D.Shear(x, y, combo_name)
and Plate3D.Moment(x, y, combo_name)
methods. These methods return plate forces in matrix format as follows: [[Qx], [Qy]]
and [[Mx], [My], [Mxy]]
. The Plate3D.width
and Plate3D.height
attributes can help you navigate the local coordinate system.
In-plane (membrane) results are presented as local forces per unit area. In-plane results can be obtained using the Plate3D.Membrane(x, y, combo_name)
method. This method returns the plate membrane stresses in matrix format as follows: [[Sx], [Sy], [Txy]]
Example:
# Get the plate from the model
myPlate = myModel.Plates['P1']
# Get the shear forces for the plate at the bottom left corner for load combination '0.9D+0.7E'
shearForces = myPlate.Shear(x=0, y=0, combo_name='0.9D+0.7E')
# Get the moments for the plate at the top right corner
moments = myPlate.Moment(x=myPlate.width, y=myPlate.height, combo_name='0.9D+0.7E')
# Get the My moment at the center of the plate
centerMy = myPlate.Moment(x=myPlate.width/2, y=myPlate.height/2, combo_name='0.9D+0.7E')[1, 0]