The FinEtoolsFlexStructures package is used to solve static and dynamic linear and nonlinear problems involving beams and linear static and dynamic analysis of shells.
The basic functionality is provided by the FinEtools package.
To understand how the package works, we would suggest inspecting the examples. The examples are organized by category: statics, dynamics, etc. There is usually an indication of what the correct answer should be (frequencies, deflections, buckling factors, ...). Many examples correspond to well-known benchmarks.
Settings
This document was generated with Documenter.jl version 0.27.25 on Wednesday 27 September 2023. Using Julia version 1.9.3.
The FinEtoolsFlexStructures package is used to solve static and dynamic linear and nonlinear problems involving beams and linear static and dynamic analysis of shells.
The basic functionality is provided by the FinEtools package.
To understand how the package works, we would suggest inspecting the examples. The examples are organized by category: statics, dynamics, etc. There is usually an indication of what the correct answer should be (frequencies, deflections, buckling factors, ...). Many examples correspond to well-known benchmarks.
Settings
This document was generated with Documenter.jl version 0.27.25 on Wednesday 27 September 2023. Using Julia version 1.9.3.
axes = tuple of signed labels of the axes. For instance, (1, 2, 3) creates a coordinate system identical to the global cartesian coordinate system. (2, 1, -3) creates a coordinate system so that the first material basis vector is along the second global basis vector, the second material basis vector is along the first global basis vector, and the third material basis vector is opposite to the third global basis vector.
laminate_stiffnesses!(cl::CompositeLayup, A, B, C)
Compute the laminate stiffnesses, membrane, extension-bending coupling, and bending.
Aij coefficients represent in-plane stiffness of the laminate, the Cij coefficients represent bending stiffness, the Bij represent bending-extension coupling.
plane_stress_T_matrix!(Tm::Array{T, 2}, angle) where {T}
Compute the transformation matrix of stress vector components FROM the PLY coordinate system TO the LAYOUT coordinate system.
angle = angle (in radians) between the first basis vector of the layup coordinate system and the first basis vector of the ply coordinate system m, n = cosine and sine of the angle
The nomenclature is from Barbero, Finite element analysis of composite materials using Abaqus (2013).
plane_stress_Tbar_matrix!(Tm::Array{T, 2}, angle) where {T}
-plane_stress_Tbar_matrix!(Tm::Array{T, 2}, m, n) where {T}
Compute the transformation matrix of engineering strain components FROM the LAYUP coordinate system TO the PLY coordinate system.
angle = angle (in radians) between the first basis vector of the layup coordinate system and the first basis vector of the ply coordinate system m, n = cosine and sine of the angle
The nomenclature is from Barbero, Finite element analysis of composite materials using Abaqus (2013).
plane_stress_Tinv_matrix!(Tinvm::Array{T, 2}, angle) where {T}
-plane_stress_Tinv_matrix!(Tinvm::Array{T, 2}, m, n) where {T}
Compute the transformation matrix of the stress vector components FROM the LAYOUT coordinate system TO the PLY coordinate system.
angle = angle (in radians) between the first basis vector of the layup coordinate system and the first basis vector of the ply coordinate system m, n = cosine and sine of the angle
The nomenclature is from Barbero, Finite element analysis of composite materials using Abaqus (2013).
transverse_shear_T_matrix!(Tm::Array{T, 2}, angle) where {T}
-transverse_shear_T_matrix!(Tm::Array{T, 2}, m, n) where {T}
Compute the transformation matrix for the transverse shear stresses FROM the LAYOUT coordinate system TO the PLY coordinate system.
angle = angle (in radians) between the first basis vector of the layup coordinate system and the first basis vector of the ply coordinate system m, n = cosine and sine of the angle
distribloads_global(self::FEMMCorotBeam, geom0::NodalField{FFlt}, u1::NodalField{T}, Rfield1::NodalField{T}, dchi::NodalField{T}, fi) where {T<:Number}
Compute the load vector due to distributed loads.
Compute the global load vector corresponding to applied distributed load. Here it means force per unit length of the beam, in the configuration u1, Rfield1. These are only forces, not moments.
Note
The force intensity must be uniform across the entire element. The force intensity is given in the global coordinates.
axes = tuple of signed labels of the axes. For instance, (1, 2, 3) creates a coordinate system identical to the global cartesian coordinate system. (2, 1, -3) creates a coordinate system so that the first material basis vector is along the second global basis vector, the second material basis vector is along the first global basis vector, and the third material basis vector is opposite to the third global basis vector.
laminate_stiffnesses!(cl::CompositeLayup, A, B, C)
Compute the laminate stiffnesses, membrane, extension-bending coupling, and bending.
Aij coefficients represent in-plane stiffness of the laminate, the Cij coefficients represent bending stiffness, the Bij represent bending-extension coupling.
plane_stress_T_matrix!(Tm::Array{T, 2}, angle) where {T}
Compute the transformation matrix of stress vector components FROM the PLY coordinate system TO the LAYOUT coordinate system.
angle = angle (in radians) between the first basis vector of the layup coordinate system and the first basis vector of the ply coordinate system m, n = cosine and sine of the angle
The nomenclature is from Barbero, Finite element analysis of composite materials using Abaqus (2013).
plane_stress_Tbar_matrix!(Tm::Array{T, 2}, angle) where {T}
+plane_stress_Tbar_matrix!(Tm::Array{T, 2}, m, n) where {T}
Compute the transformation matrix of engineering strain components FROM the LAYUP coordinate system TO the PLY coordinate system.
angle = angle (in radians) between the first basis vector of the layup coordinate system and the first basis vector of the ply coordinate system m, n = cosine and sine of the angle
The nomenclature is from Barbero, Finite element analysis of composite materials using Abaqus (2013).
plane_stress_Tinv_matrix!(Tinvm::Array{T, 2}, angle) where {T}
+plane_stress_Tinv_matrix!(Tinvm::Array{T, 2}, m, n) where {T}
Compute the transformation matrix of the stress vector components FROM the LAYOUT coordinate system TO the PLY coordinate system.
angle = angle (in radians) between the first basis vector of the layup coordinate system and the first basis vector of the ply coordinate system m, n = cosine and sine of the angle
The nomenclature is from Barbero, Finite element analysis of composite materials using Abaqus (2013).
transverse_shear_T_matrix!(Tm::Array{T, 2}, angle) where {T}
+transverse_shear_T_matrix!(Tm::Array{T, 2}, m, n) where {T}
Compute the transformation matrix for the transverse shear stresses FROM the LAYOUT coordinate system TO the PLY coordinate system.
angle = angle (in radians) between the first basis vector of the layup coordinate system and the first basis vector of the ply coordinate system m, n = cosine and sine of the angle
distribloads_global(self::FEMMCorotBeam, geom0::NodalField{FFlt}, u1::NodalField{T}, Rfield1::NodalField{T}, dchi::NodalField{T}, fi) where {T<:Number}
Compute the load vector due to distributed loads.
Compute the global load vector corresponding to applied distributed load. Here it means force per unit length of the beam, in the configuration u1, Rfield1. These are only forces, not moments.
Note
The force intensity must be uniform across the entire element. The force intensity is given in the global coordinates.
Compute transformation from local Cartesian displacements to natural deformations of a beam element.
Matrix defined in Eq (4.8) of COMPUTER METHODS IN APPLIED MECHANICS AND ENGINEERING 14 (1978) 401-451 ON LARGE DISPLACEMENT-SMALL STRAIN ANALYSIS OF STRUCTURES WITH ROTATIONAL DEGREES OF FREEDOM. J.H. ARGYRIS, P.C. DUNNE and D.W. SCHARPF
Arguments
L= current length of the element
Outputs
aN= transformation matrix to take Cartesian (local) displacement increments in the element frame and to produce increments of natural deformations; see local_frame_and_def! for the definition of the natural deformations
Compute forces through which the element acts on the nodes in the local coordinate system.
Arguments
PN = column vector of natural forces; L= current length of the element, aN= transformation matrix to take Cartesian (local) displacement increments in the element frame and to produce increments of natural deformations; see local_frame_and_def! for the definition of the natural deformations
Outputs
FL = vector of forces acting on the nodes in the local coordinate system
Compute the current length of the element, the current element frame, and the natural deformations
Arguments
x0= array of node coordinates, one node per row, in initial configuration x1x2_vector= vector that lies in the x1-x2 local element coordinate plane, in initial configuration xt= array of node coordinates, one node per row, in initial configuration RI,RJ=nodal rotation (orthogonal) matrix
Outputs
Lt= current length of the element, Ft= current element frame (orthogonal rotation matrix) whose columns are unit vectors: they are centered halfway between the current locations of the nodes, vector 1 points from node I to node J, vector 3 is orthogonal to the sum of the nodal cross-section frame vectors 2 dN= vector of natural deformations; dN(1)= total change in length between configurations 0 and t; dN(2)= symmetric bending; dN(3)= anti-symmetric bending; dN(4)= symmetric bending dN(5)= anti-symmetric bending; dN(6)=total axial torsion angle.
A= cross-sectional area, I2, I3=central moment of inertia of the cross-section about the x2 and x3 coordinate axis, PN= vector of natural forces; see natural_forces() for definitions L= current length of the element,
Outputs
SM = local geometric stiffness matrix, 12 x 12
This geometric stiffness matrix this consistent with relationship between the natural deformations and the natural forces that assumes there is only a linear constitutive link: no non-constitutive effects (bowing etc.) are included. This form of the geometric matrix was derived by Krenk. @BOOK{Krenk:2009, AUTHOR = {S. Krenk}, TITLE = {Non-linear Modeling and Analysis of Solids and Structures }, PUBLISHER = {Cambridge University Press}, YEAR = {2009}, isbn = {9780521830546} }
A= cross-sectional area, I1=central moment of inertia of the cross-section about the x1 axis, I2, I3=central moment of inertia of the cross-section about the x2 and x3 coordinate axis, rho=mass density, L= initial length of the element,
Outputs
MM = local mass matrix, 12 x 12 In the element frame the mass matrix is constant.
local_stiffness!(SM, E, G, A, I2, I3, J, A2s, A3s, L, aN, DN)
Compute the local elastic stiffness matrix.
Arguments
E, G= Young's and shear modulus, A= cross-sectional area, I2, I3=central moment of inertia of the cross-section about the x2 and x3 coordinate axis, J=St Venant torsion constant, L= current length of the element,
Compute transformation from local Cartesian displacements to natural deformations of a beam element.
Matrix defined in Eq (4.8) of COMPUTER METHODS IN APPLIED MECHANICS AND ENGINEERING 14 (1978) 401-451 ON LARGE DISPLACEMENT-SMALL STRAIN ANALYSIS OF STRUCTURES WITH ROTATIONAL DEGREES OF FREEDOM. J.H. ARGYRIS, P.C. DUNNE and D.W. SCHARPF
Arguments
L= current length of the element
Outputs
aN= transformation matrix to take Cartesian (local) displacement increments in the element frame and to produce increments of natural deformations; see local_frame_and_def! for the definition of the natural deformations
Compute forces through which the element acts on the nodes in the local coordinate system.
Arguments
PN = column vector of natural forces; L= current length of the element, aN= transformation matrix to take Cartesian (local) displacement increments in the element frame and to produce increments of natural deformations; see local_frame_and_def! for the definition of the natural deformations
Outputs
FL = vector of forces acting on the nodes in the local coordinate system
Compute the current length of the element, the current element frame, and the natural deformations
Arguments
x0= array of node coordinates, one node per row, in initial configuration x1x2_vector= vector that lies in the x1-x2 local element coordinate plane, in initial configuration xt= array of node coordinates, one node per row, in initial configuration RI,RJ=nodal rotation (orthogonal) matrix
Outputs
Lt= current length of the element, Ft= current element frame (orthogonal rotation matrix) whose columns are unit vectors: they are centered halfway between the current locations of the nodes, vector 1 points from node I to node J, vector 3 is orthogonal to the sum of the nodal cross-section frame vectors 2 dN= vector of natural deformations; dN(1)= total change in length between configurations 0 and t; dN(2)= symmetric bending; dN(3)= anti-symmetric bending; dN(4)= symmetric bending dN(5)= anti-symmetric bending; dN(6)=total axial torsion angle.
A= cross-sectional area, I2, I3=central moment of inertia of the cross-section about the x2 and x3 coordinate axis, PN= vector of natural forces; see natural_forces() for definitions L= current length of the element,
Outputs
SM = local geometric stiffness matrix, 12 x 12
This geometric stiffness matrix this consistent with relationship between the natural deformations and the natural forces that assumes there is only a linear constitutive link: no non-constitutive effects (bowing etc.) are included. This form of the geometric matrix was derived by Krenk. @BOOK{Krenk:2009, AUTHOR = {S. Krenk}, TITLE = {Non-linear Modeling and Analysis of Solids and Structures }, PUBLISHER = {Cambridge University Press}, YEAR = {2009}, isbn = {9780521830546} }
A= cross-sectional area, I1=central moment of inertia of the cross-section about the x1 axis, I2, I3=central moment of inertia of the cross-section about the x2 and x3 coordinate axis, rho=mass density, L= initial length of the element,
Outputs
MM = local mass matrix, 12 x 12 In the element frame the mass matrix is constant.
local_stiffness!(SM, E, G, A, I2, I3, J, A2s, A3s, L, aN, DN)
Compute the local elastic stiffness matrix.
Arguments
E, G= Young's and shear modulus, A= cross-sectional area, I2, I3=central moment of inertia of the cross-section about the x2 and x3 coordinate axis, J=St Venant torsion constant, L= current length of the element,
natural_forces!(PN, E, G, A, I2, I3, J, A2s, A3s, L, dN, DN)
Compute the natural forces from the natural deformations.
Argument
E, G= Young's and shear modulus, A= cross-sectional area, I2, I3=central moment of inertia of the cross-section about the x2 and x3 coordinate axis, J=St Venant torsion constant, L= current length of the element, dN= column vector of natural deformations; see local_frames()
Outputs
PN = column vector of natural forces; PN[1]= axial force; PN[2]= symmetric bending moment in the plane x1-x2; PN[3]= anti-symmetric bending bending moment in the plane x1-x2; PN[4]= symmetric bending bending moment in the plane x1-x3; PN[5]= anti-symmetric bending bending moment in the plane x1-x3; PN[6]= axial torque.
natural_forces!(PN, E, G, A, I2, I3, J, A2s, A3s, L, dN, DN)
Compute the natural forces from the natural deformations.
Argument
E, G= Young's and shear modulus, A= cross-sectional area, I2, I3=central moment of inertia of the cross-section about the x2 and x3 coordinate axis, J=St Venant torsion constant, L= current length of the element, dN= column vector of natural deformations; see local_frames()
Outputs
PN = column vector of natural forces; PN[1]= axial force; PN[2]= symmetric bending moment in the plane x1-x2; PN[3]= anti-symmetric bending bending moment in the plane x1-x2; PN[4]= symmetric bending bending moment in the plane x1-x3; PN[5]= anti-symmetric bending bending moment in the plane x1-x3; PN[6]= axial torque.
felist - indexes of the finite elements that are to be inspected: The fes to be included are: fes[felist].
context - structure: see the update!() method of the material.
inspector - function with the signature idat = inspector(idat, j, conn, x, out, loc); where idat - a structure or an array that the inspector may use to maintain some state, for instance minimum or maximum of stress, j is the element number, conn is the element connectivity, out is the output of the update!() method, loc is the location of the integration point in the reference configuration.
inspectintegpoints(self::AbstractFEMMDeforLinear,
+ context...) where {TI<:Number, F<:Function}
Inspect integration point quantities.
geom - reference geometry field
u - displacement+rotation field
dT - temperature difference field
felist - indexes of the finite elements that are to be inspected: The fes to be included are: fes[felist].
context - structure: see the update!() method of the material.
inspector - function with the signature idat = inspector(idat, j, conn, x, out, loc); where idat - a structure or an array that the inspector may use to maintain some state, for instance minimum or maximum of stress, j is the element number, conn is the element connectivity, out is the output of the update!() method, loc is the location of the integration point in the reference configuration.
felist - indexes of the finite elements that are to be inspected: The fes to be included are: fes[felist].
context - structure: see the update!() method of the material.
inspector - function with the signature idat = inspector(idat, j, conn, x, out, loc); where idat - a structure or an array that the inspector may use to maintain some state, for instance minimum or maximum of stress, j is the element number, conn is the element connectivity, out is the output of the update!() method, loc is the location of the integration point in the reference configuration.
mass(self::FEMMCorotBeam, assembler::A,
+ context...) where {TI<:Number, F<:Function}
Inspect integration point quantities.
geom - reference geometry field
u - displacement+rotation field
dT - temperature difference field
felist - indexes of the finite elements that are to be inspected: The fes to be included are: fes[felist].
context - structure: see the update!() method of the material.
inspector - function with the signature idat = inspector(idat, j, conn, x, out, loc); where idat - a structure or an array that the inspector may use to maintain some state, for instance minimum or maximum of stress, j is the element number, conn is the element connectivity, out is the output of the update!() method, loc is the location of the integration point in the reference configuration.
Provide the name, the array of plies, and the coordinate system that defines the orientation of the composite layup. The first base spector of this coordinate system is the reference direction for the layup.
Provide name, material of the ply, thickness of the ply, an angle between the first bases vector of the layup coordinate system and the first direction of the ply material coordinate system.
Class for the finite element modeling machine of the T3 triangular Flat-Facet shell with the Discrete Shear Gap technology and a consistent handling of the normals.
With averaging of the transverse strain-displacement matrix or averaging of the transverse shear stiffness matrix to provide isotropic transverse shear response.
Also, the formulation is developed to correctly handle the coupling of twisting moments and transverse shear (such as in the twisted beam or the Raasch hook problems) by incorporating "nodal" normals.
Some of the programming developed consistently with the paper
[1] Cui et al, Analysis of plates and shells using an edge-based smoothed finite element method, Comput Mech (2010) 45:141–156 DOI 10.1007/s00466-009-0429-9
The stabilization factor of the shear term of
[2] Mikko Lyly, Rolf Stenberg and Teemu Vihinen, A stable bilinear element for the Reissner-Mindlin plate model Computer Methods in Applied Mechanics and Engineering 110 (1993) 343-357
is incorporated. Refer to expressions (3.12) and (3.13).
The treatment of the transformation between the element and nodal coordinates is carried out using a clean alternative to the publication
[3] Finite Elements in Analysis and Design 30 (1998) 235—242 The treatment of shell normals in finite element analysis Richard H. MacNeal, Charles T. Wilson, Robert L. Harder, Claus C. Hoff The MacNeal-Schwendler Corporation, 815 Colorado Blvd., Los Angeles, CA 90041, USA
The formula for the element to nodal basis transformation is derived from the expression
by disconnecting the drilling degree of freedom from the bending degrees of freedom in the nodal basis.
The following features are incorporated to deal with nodal normals:
Nodal normals are averages of the normals of elements that meet at a node.
A crease in the surface is taken into account. In that case the normal are not averaged across the crease. At the nodes along the crease every element uses the normal to its surface instead of the nodal normal.
Configuration:
These attributes of the FEMM can be set after it's been created.
transv_shear_formulation: which formulation for the transverse shear stiffness?
Class for the finite element modeling machine of the T3 triangular Flat-Facet shell with the Discrete Shear Gap technology and a consistent handling of the normals. This formulation is suitable for modelling of COMPOSITE (layered) materials.
For details for the homogeneous-shell refer to FEMMShellT3FF.
Provide the name, the array of plies, and the coordinate system that defines the orientation of the composite layup. The first base spector of this coordinate system is the reference direction for the layup.
Provide name, material of the ply, thickness of the ply, an angle between the first bases vector of the layup coordinate system and the first direction of the ply material coordinate system.
Class for the finite element modeling machine of the T3 triangular Flat-Facet shell with the Discrete Shear Gap technology and a consistent handling of the normals.
With averaging of the transverse strain-displacement matrix or averaging of the transverse shear stiffness matrix to provide isotropic transverse shear response.
Also, the formulation is developed to correctly handle the coupling of twisting moments and transverse shear (such as in the twisted beam or the Raasch hook problems) by incorporating "nodal" normals.
Some of the programming developed consistently with the paper
[1] Cui et al, Analysis of plates and shells using an edge-based smoothed finite element method, Comput Mech (2010) 45:141–156 DOI 10.1007/s00466-009-0429-9
The stabilization factor of the shear term of
[2] Mikko Lyly, Rolf Stenberg and Teemu Vihinen, A stable bilinear element for the Reissner-Mindlin plate model Computer Methods in Applied Mechanics and Engineering 110 (1993) 343-357
is incorporated. Refer to expressions (3.12) and (3.13).
The treatment of the transformation between the element and nodal coordinates is carried out using a clean alternative to the publication
[3] Finite Elements in Analysis and Design 30 (1998) 235—242 The treatment of shell normals in finite element analysis Richard H. MacNeal, Charles T. Wilson, Robert L. Harder, Claus C. Hoff The MacNeal-Schwendler Corporation, 815 Colorado Blvd., Los Angeles, CA 90041, USA
The formula for the element to nodal basis transformation is derived from the expression
by disconnecting the drilling degree of freedom from the bending degrees of freedom in the nodal basis.
The following features are incorporated to deal with nodal normals:
Nodal normals are averages of the normals of elements that meet at a node.
A crease in the surface is taken into account. In that case the normal are not averaged across the crease. At the nodes along the crease every element uses the normal to its surface instead of the nodal normal.
Configuration:
These attributes of the FEMM can be set after it's been created.
transv_shear_formulation: which formulation for the transverse shear stiffness?
Class for the finite element modeling machine of the T3 triangular Flat-Facet shell with the Discrete Shear Gap technology and a consistent handling of the normals. This formulation is suitable for modelling of COMPOSITE (layered) materials.
For details for the homogeneous-shell refer to FEMMShellT3FF.