bluemira.structural.element
Finite element class
Classes
A 3-D beam element (Euler-Bernoulli type) |
Functions
|
3-D stiffness local member stiffness matrix, generalised for cases with |
|
3-D stiffness local member stiffness matrix, including shear deformation |
|
3-D stiffness local member stiffness matrix, including shear deformation |
Module Contents
- bluemira.structural.element._k_array(k11: float, k22: float, k33: float, k44: float, k55: float, k66: float, k35: float, k26: float, k511: float, k612: float) numpy.ndarray
3-D stiffness local member stiffness matrix, generalised for cases with and without shear
- Parameters:
elements (Local stiffness matrix non-zero)
k11 (float)
k22 (float)
k33 (float)
k44 (float)
k55 (float)
k66 (float)
k35 (float)
k26 (float)
k511 (float)
k612 (float)
- Return type:
The local member stiffness matrix
Notes
The matrix is given by
\[\begin{split}\small{ \left[ \begin{array}{cccccccccccc} k11 & 0 & 0 & 0 & 0 & 0 & -k11 & 0 & 0 & 0 & 0 & 0 \\ 0 & k22 & 0 & 0 & 0 & k26 & 0 & -k22 & 0 & 0 & 0 & k26 \\ 0 & 0 & k33 & 0 & k35 & 0 & 0 & 0 & -k33 & 0 & k35 & 0 \\ 0 & 0 & 0 & k44 & 0 & 0 & 0 & 0 & 0 & -k44 & 0 & 0 \\ 0 & 0 & k35 & 0 & k55 & 0 & 0 & 0 & -k35 & 0 & k511 & 0 \\ 0 & k26 & 0 & 0 & 0 & k66 & 0 & -k26 & 0 & 0 & 0 & k612 \\ -k11 & 0 & 0 & 0 & 0 & 0 & k11 & 0 & 0 & 0 & 0 & 0 \\ 0 & -k22 & 0 & 0 & 0 & -k26 & 0 & k22 & 0 & 0 & 0 & -k26 \\ 0 & 0 & -k33 & 0 & -k35 & 0 & 0 & 0 & k33 & 0 & -k35 & 0 \\ 0 & 0 & 0 & -k44 & 0 & 0 & 0 & 0 & 0 & k44 & 0 & 0 \\ 0 & 0 & k35 & 0 & k511 & 0 & 0 & 0 & -k35 & 0 & k55 & 0 \\ 0 & k26 & 0 & 0 & 0 & k612 & 0 & -k26 & 0 & 0 & 0 & k66 \\ \end{array} \right]}\end{split}\]
- bluemira.structural.element.local_k_shear(EA: float, EIyy: float, EIzz: float, ry: float, rz: float, L: float, GJ: float, A: float, A_sy: float, A_sz: float, nu: float = NU) numpy.ndarray
3-D stiffness local member stiffness matrix, including shear deformation
- Parameters:
EA (float) – Youngs modulus x cross-sectional area
EIyy (float) – Youngs modulus x second moment of area about the element y-axis
EIzz (float) – Youngs modulus x second moment of area about the element z-axis
L (float) – The length of the beam
GJ (float) – The rigidity modulus x torsion constant
A_sy (float) – The shear area in the y-plane
A_sz (float) – The shear area in the z-plane
nu (float) – Poisson ratio
ry (float)
rz (float)
A (float)
- Return type:
The local member stiffness matrix
Notes
The shear deformation parameters are calculated by
\[ \begin{align}\begin{aligned}\phi_{y} = 24 (1 + \nu) \left(\frac{A}{A_{sy}}\right)~ \left(\frac{r_{z}}{L}\right)^2\\\phi_{z} = 24 (1 + \nu) \left(\frac{A}{A_{sz}}\right)~ \left(\frac{r_{y}}{L}\right)^2\end{aligned}\end{align} \]The equations for different k-values are
\[\begin{split}k_{11} = \frac{EA}{L} \\\end{split}\]\[\begin{split}k_{22} = \frac{12 EI_{zz}}{L^3 (1 + \phi_{y})} \\\end{split}\]\[\begin{split}k_{33} = \frac{12 EI_{yy}}{L^3 (1 + \phi_{z})} \\\end{split}\]\[\begin{split}k_{44} = \frac{GJ}{L} \\\end{split}\]\[\begin{split}k_{55} = \frac{(4 + \phi_{z}) EI_{yy}}{L (1 + \phi_{z})} \\\end{split}\]\[\begin{split}k_{66} = \frac{(4 + \phi_{y}) EI_{zz}}{L (1 + \phi_{y})} \\\end{split}\]\[\begin{split}k_{35} = \frac{-6 EI_{yy}}{L^2 (1 + \phi_{z})} \\\end{split}\]\[\begin{split}k_{26} = \frac{6 EI_{zz}}{L^2 (1 + \phi_{y})} \\\end{split}\]\[\begin{split}k_{511} = \frac{(2 - \phi_{z}) EI_{yy}}{L (1 + \phi_{z})} \\\end{split}\]\[\begin{split}k_{612} = \frac{(2 - \phi_{y}) EI_{zz}}{L (1 + \phi_{y})} \\\end{split}\]
- bluemira.structural.element.local_k(EA: float, EIyy: float, EIzz: float, L: float, GJ: float) numpy.ndarray
3-D stiffness local member stiffness matrix, including shear deformation
- Parameters:
EA (float) – Youngs modulus x cross-sectional area
EIyy (float) – Youngs modulus x second moment of area about the element y-axis
EIzz (float) – Youngs modulus x second moment of area about the element z-axis
L (float) – The length of the beam
GJ (float) – The rigidity modulus x torsion constant
- Return type:
The local member stiffness matrix
Notes
The equations for different k-values are
\[\begin{split}k_{11} = \frac{EA}{L} \\\end{split}\]\[\begin{split}k_{22} = \frac{12 EI_{zz}}{L^3} \\\end{split}\]\[\begin{split}k_{33} = \frac{12 EI_{yy}}{L^3} \\\end{split}\]\[\begin{split}k_{44} = \frac{GJ}{L} \\\end{split}\]\[\begin{split}k_{55} = \frac{4 EI_{yy}}{L} \\\end{split}\]\[\begin{split}k_{66} = \frac{4 EI_{zz}}{L} \\\end{split}\]\[\begin{split}k_{35} = \frac{-6 EI_{yy}}{L^2} \\\end{split}\]\[\begin{split}k_{26} = \frac{6 EI_{zz}}{L^2} \\\end{split}\]\[\begin{split}k_{511} = \frac{2 EI_{yy}}{L} \\\end{split}\]\[\begin{split}k_{612} = \frac{2 EI_{zz}}{L} \\\end{split}\]
- class bluemira.structural.element.Element(node_1: bluemira.structural.node.Node, node_2: bluemira.structural.node.Node, id_number: int, cross_section: bluemira.structural.crosssection.CrossSection, material: matproplib.material.Material | None = None, op_cond: matproplib.conditions.OperationalConditions | None = None)
A 3-D beam element (Euler-Bernoulli type)
- Parameters:
node_1 (bluemira.structural.node.Node) – The first node
node_2 (bluemira.structural.node.Node) – The second node
id_number (int) – The ID number of this element
cross_section (bluemira.structural.crosssection.CrossSection) – The CrossSection property object of the element
material (matproplib.material.Material | None) – The Material property object of the element
op_cond (matproplib.conditions.OperationalConditions | None)
- HERMITE_POLYS
- __slots__ = ('_cross_section', '_k_matrix', '_k_matrix_glob', '_lambda_matrix', '_length', '_material',...
- node_1
- node_2
- id_number
- loads = []
- shapes = None
- stresses = None
- max_stress = None
- safety_factor = None
- op_cond = None
- _material = None
- _cross_section
- _length = None
- _weight = None
- _k_matrix = None
- _lambda_matrix = None
- _k_matrix_glob = None
- _s_functs = None
- static _process_properties(cross_section, material: matproplib.material.Material | None = None, op_cond: matproplib.conditions.OperationalConditions | None = None)
Handles cross-sectional and material properties, including if a composite material cross-section is specified.
- Parameters:
material (matproplib.material.Material | None)
op_cond (matproplib.conditions.OperationalConditions | None)
- property length: float
Element length
Notes
- The Euclidean distance between Nodes 1 and 2
- \[d = \sqrt {(x_2 - x_1)^2 + (y_2 - y_1)^2 + (z_2 - z_1)^2}\]
- Return type:
float
- property weight: float
Element self-weight force per unit length
\[w = g A \rho\]- where:
g is the gravitational acceleration (m/s²),
A is the cross-sectional area of the element (m²),
rho is the material density (kg/m³).
- Return type:
float
- property mid_point: numpy.ndarray
The mid point of the Element
- Returns:
vector – The [x, y, z] vector of the midpoint
- Return type:
np.array(3)
Notes
The midpoint coordinates are given by:
\[M_x = \frac{x_1 + x_2}{2}, \quad M_y = \frac{y_1 + y_2}{2}, \quad M_z = \frac{z_1 + z_2}{2}\]
- property space_vector
Spatial vector of the Element
- Returns:
vector – The [dx, dy, dz] vector of the Element
- Return type:
np.array(3)
Notes
The vector components are given by:
\[v_x = x_2 - x_1, \quad v_y = y_2 - y_1, \quad v_z = z_2 - z_1\]
- property displacements: numpy.ndarray
Element global displacement vector at nodes
- Return type:
numpy.ndarray
- property max_displacement: float
Maximum element absolute displacement values
- Return type:
The maximum absolute deflection distance of the two Nodes
- property k_matrix: numpy.ndarray
Element stiffness matrix in local coordinates
- Return type:
numpy.ndarray
- property k_matrix_glob: numpy.ndarray
Element stiffness matrix in global coordinates
- Return type:
numpy.ndarray
- property lambda_matrix: numpy.ndarray
Transformation (direction cosine) matrix
- Raises:
StructuralError – Nodes are coincident
- Return type:
numpy.ndarray
Notes
This matrix is cached but involves properties that may be externally modified (e.g. by moving a node). Be careful to reset _lambda_matrix to None if you are doing this, so that it gets recalculated upon call.
- add_load(load: bluemira.structural.loads.Load | dict[str, float | str])
Applies a load to the Element object.
- Parameters:
load (bluemira.structural.loads.Load | dict[str, float | str]) – The dictionary of load values (in local coordinates)
- clear_loads()
Clears all loads applied to the Element
- clear_cache()
Clears all cached properties and matrices for the Element. Use if an Element’s geometry has been modified.
- u_vector() numpy.ndarray
Element local displacement vector
- Return type:
numpy.ndarray
- p_vector() numpy.ndarray
The local force vector of the element
- Return type:
numpy.ndarray
- p_vector_glob() numpy.ndarray
The global force vector of the element
- Return type:
numpy.ndarray
- equivalent_node_forces() numpy.ndarray
Equivalent concentrated forces in global coordinates
- Return type:
numpy.ndarray
- _equivalent_node_forces() numpy.ndarray
Element local nodal force vector
Equivalent concentrated forces in local coordinates
- Return type:
numpy.ndarray
- property _shape_functions
- interpolate(scale: float)
Interpolates the displacement of the beam with Hermite polynomial shape functions to obtain inter-node displacement and stress
- Parameters:
scale (float) – The scale at which to calculate the interpolated displacements
- calculate_stress(u, m_matrix)
Calculates the stresses in the Element, using Hermite polynomials for interpolation between the Nodes
- calculate_shape(u, d, _m, _v, scale)
Calculates the interpolated shape of the Element