Public Member Functions | Public Attributes | List of all members
QuadrilateralElement Class Referenceabstract

Class for implementation of quadrilateral elements. More...

#include <QuadrilateralElement.h>

Inheritance diagram for QuadrilateralElement:
Element Q4Element Q9Element

Public Member Functions

virtual MatrixXd getNMatrix (double zeta1, double zeta2)=0
 
virtual MatrixXd getN_etaMatrix (double xi, double eta)=0
 
virtual MatrixXd getN_xiMatrix (double xi, double eta)=0
 
virtual MatrixXd getJacobi (double xi, double eta)=0
 
virtual MatrixXd getBMatrix (MatrixXd jacobi, double xi, double eta)=0
 
void setExtrapolationMatrix ()
 Creates the matrix used for extrapolating results. More...
 
void resetElementLoad ()
 resets element load to zero
 
void calculateElementLoadTorsion ()
 Calculates the initial load vector for torsion \(\boldsymbol{S}^0\). Load vector is negative for torsion loading to match global load vector. More...
 
void calculateElementLoadShearX ()
 Calculates the initial load vector \(\boldsymbol{S}_x^0\) for applied shear along x-axis. More...
 
void calculateElementLoadShearY ()
 Calculates the initial load vector \(\boldsymbol{S}_y^0\) for applied shear along y-axis. More...
 
void checkBMatrix ()
 Method verifies \( \boldsymbol{B} \). More...
 
void checkNMatrix ()
 Method verifies \(\boldsymbol{N}\). More...
 
void computeTauTorsion (double rateOfTwist)
 Calculates shear stresses from torsion load at nodes using initialStrain and elementsDisplacement. For quadrilateral elements the stresses are calculated at the integration points (using xiCoord and etaCoord). The stress values are then extrapolated to the nodes using setExtrapolationMatrix(). More...
 
void computeTauShear (double Cx, double Cy)
 Calculates shear stresses from shear loading at nodes using elementsDisplacement. For quadrilateral elements the stresses are calculated at the integration points (using xiCoord and etaCoord). The stress values are then extrapolated to the nodes using setExtrapolationMatrix(). More...
 
double xOfZeta (double xi, double eta)
 Calculates and returns the the distance in the x-direction between the integration point in the element and the element area centre. More...
 
double yOfZeta (double xi, double eta)
 Calculates and returns the the distance in the y-direction between the integration point in the element and the element area centre. More...
 
void calculateArea ()
 Calculates the area of the element. More...
 
void calculateAreaCentre ()
 Calculates the area centre of the element. More...
 
double getBendingStiffnessX (double Ay)
 Calculates the second moment of area about the x-axis for the element. More...
 
double getBendingStiffnessY (double Ax)
 Calculates the second moment of area about the y-axis for the element. More...
 
double getBendingStiffnessProduct (double Ax, double Ay)
 Calculating the product of moment of inertia. More...
 
double calculateDeltaGIt ()
 Calculates delta GIt for the element, used to find gloal GIt for torsional analysis. More...
 
void calculateTorsionShearCenter ()
 Calculates the shear center for the element, based on torsional analysis. More...
 
MatrixXd getN1Matrix (double xi, double eta)
 Gets the \( \textbf{N}_1 matrix\). More...
 
double getShearFactorContributionX ()
 Gets the shear deformation factor contribution from the element, in x-direction. More...
 
double getShearFactorContributionY ()
 Gets the shear deformation factor contribution from the element, in y-direction. More...
 
void calculateElementLoadComposite (double C_x, double C_y, double rateOfTwist)
 Calculates the element load for composite analysis. More...
 
void computeTauComposite (double C_x, double C_y, double rateOfTwist)
 Calculates the element stresses at the integration points for composite analysis. More...
 
- Public Member Functions inherited from Element
 Element ()
 Constructor.
 
virtual void calculateStiffnessMatrix ()=0
 
void calculateConstants (int type)
 Initiates XoverY, xCoordinates, and yCoordinates for all massive element types. More...
 
void setElementValue (MatrixXd &system, MatrixXd &local)
 Uses getIEG() to assign system values to corresponding local parameters.
 
MatrixXd getZeroVector ()
 Initate a vector with numer of columns equal to number of nodes.
 

Public Attributes

double xiCoord [2][2] = { { -sqrt(1 / 3.0), sqrt(1 / 3.0) } ,{ sqrt(1 / 3.0), -sqrt(1 / 3.0) } }
 
double etaCoord [2][2] = { { -sqrt(1 / 3.0), -sqrt(1 / 3.0) } ,{ sqrt(1 / 3.0), sqrt(1 / 3.0) } }
 
double weights [2][2] = { { 1, 1 } ,{ 1, 1 } }
 
double xiExtrapolation [2][2] = { { -sqrt(3), sqrt(3) },{ sqrt(3), -sqrt(3) } }
 
double etaExtrapolation [2][2] = { { -sqrt(3), -sqrt(3) } ,{ sqrt(3), sqrt(3) } }
 
double xiCoord3x3 [3][3] = { { -sqrt(0.6), sqrt(0.6) , sqrt(0.6) },{ -sqrt(0.6), 0, sqrt(0.6) },{ 0, -sqrt(0.6), 0 } }
 
double etaCoord3x3 [3][3] = { { -sqrt(0.6), -sqrt(0.6), sqrt(0.6) },{ sqrt(0.6), -sqrt(0.6), 0 },{ sqrt(0.6), 0, 0 } }
 
double weights3x3 [3][3] = { { 25.0 / 81 , 25.0 / 81 , 25.0 / 81 },{ 25.0 / 81 , 40.0 / 81, 40.0 / 81 },{ 40.0 / 81, 40.0 / 81, 64.0 / 81 } }
 
std::vector< std::vector< MatrixXd > > N
 Vector used for storing values of the N matrix.
 
std::vector< std::vector< MatrixXd > > N1
 Vector used for storing values of the N1 matrix.
 
std::vector< std::vector< MatrixXd > > J
 Vector used for storing values of the Jacobian Matrix.
 
std::vector< std::vector< MatrixXd > > B
 Vector used for storing values of the B matrix.
 
std::vector< std::vector< double > > xIntegration
 Vector used for storing x-coordinate values.
 
std::vector< std::vector< double > > yIntegration
 Vector used for storing y-coordinate values.
 
- Public Attributes inherited from Element
std::vector< Nodenodes
 Vector containing nodes of the element.
 
double area
 Elements total area.
 
Material material
 Elements material with Youngs modulus, poisson's ratio and shear modulus.
 
int elementType
 Defines what type of element this element is (value '2' for T3,'9' for T6, '3' for Q4 and '10' for Q9)
 
int numberOfCorners
 Number of corner nodes for the element. 3 for triangular and 4 for quadrilateral.
 
double Iex
 Elements second area moment about x-axis.
 
double Iey
 Elements second area moment about y-axis.
 
double Iexy
 Elements second area moment product.
 
double ecx
 Elements area centre in x-direction.
 
double ecy
 Elements area centre in y-direction.
 
double dx
 Distance in x-direction between mesh- and node area centre.
 
double dy
 Distance in y-direction between mesh- and node area centre.
 
double deltaGIt
 Contribution to St.Venant stiffness of the cross-section ( \( GI_t\)) from this element.
 
double torsion_xs
 Shear center in x-direction derived from torsional analysis.
 
double torsion_ys
 Shear center in y-direction derived from torsional analysis.
 
MatrixXd B
 Matrix containing differentials of shapefunction with respect to x and y respectively. 2 rows , number of columns equals number of nodes.
 
MatrixXd G
 Matrix with shear module used to determine initial element loads in torsional analysis. 2x2 matrix.
 
MatrixXd XoverY
 Matrix with all x-coordinates followed by all y-coordinates for the nodes in order. Number of rows equal number of nodes times two.
 
MatrixXd xCoordinates
 Matrix with x-coordinates for the nodes in order. Number of rows equal number of nodes.
 
MatrixXd yCoordinates
 Matrix with y-coordinates for the nodes in order. Number of rows equal number of nodes.
 
MatrixXd cornerCoordinatesX
 x-position of corner nodes
 
MatrixXd cornerCoordinatesY
 y-position of corner nodes
 
MatrixXd elementStiffness
 Matrix used to temporarily hold element stiffnes coefficients, \(\boldsymbol{K}_e\).
 
MatrixXd elementLoad
 Matrix used to temporarily hold element load coefficients, \(\boldsymbol{S}^0\).
 
MatrixXd elementDisplacement
 Matrix used to temporarily hold element displacement values, \( \boldsymbol{v} \).
 
MatrixXd initialStrain
 Matrix used to temporarily hold element initial strain coefficients, \( \boldsymbol{\epsilon}_0 \).
 
MatrixXd tauResult
 Stores the tau values of the element temporarily, before it's written to file.
 
MatrixXd extrapolationMatrix
 Matrix used for extrapolating stress results.
 

Detailed Description

Class for implementation of quadrilateral elements.

Member Function Documentation

void QuadrilateralElement::calculateArea ( )
virtual

Calculates the area of the element.

\( A = |J| \)

Implements Element.

void QuadrilateralElement::calculateAreaCentre ( )
virtual

Calculates the area centre of the element.

\( ecx = \frac{1}{n} \sum_{i=0}^{n} (x_i) \)
\( ecy = \frac{1}{n} \sum_{i=0}^{n} (y_i) \)
where n is number of nodes

Implements Element.

double QuadrilateralElement::calculateDeltaGIt ( )
virtual

Calculates delta GIt for the element, used to find gloal GIt for torsional analysis.

\( \begin{equation} \Delta GI_t \; = \; \int_A \begin{bmatrix} \boldsymbol{x^T} \\ \boldsymbol{y^T} \end{bmatrix} \begin{bmatrix} \boldsymbol{0} & \boldsymbol{N}^T \\ \boldsymbol{N}^T & \boldsymbol{0} \end{bmatrix} \left( \begin{bmatrix} \textbf{-N}_{,x} \\ \textbf{N}_{,y} \end{bmatrix} \textbf{v} + \begin{bmatrix} \textbf{0} & \textbf{N} \\ \textbf{N} & \textbf{0} \end{bmatrix} \begin{bmatrix} \textbf{x} \\ \textbf{y} \end{bmatrix} \right ) \end{equation} \)

Returns
element contribution to \(GI_t\)

Implements Element.

void QuadrilateralElement::calculateElementLoadComposite ( double  C_x,
double  C_y,
double  rateOfTwist 
)
virtual

Calculates the element load for composite analysis.

\( \boldsymbol{S}_e^0 = \int_{A_e} \big(\boldsymbol{d}_e^T \boldsymbol{c} - \boldsymbol{B}_e^T \boldsymbol{C}_e \; \boldsymbol{\overline{\epsilon}}_{0,e} \; \big ) dA \)

with
\( \boldsymbol{c} = \begin{bmatrix} C_x \\ C_y \\ \end{bmatrix} \) , \( \boldsymbol{e} = E \begin{bmatrix} x \\ y \\ \end{bmatrix} \), \( \overline{\boldsymbol{\epsilon}}_{0,e} = \overline{\boldsymbol{\epsilon}}_{0_s} + \overline{\boldsymbol{\epsilon}}_{0_t} = \begin{bmatrix} (C_x x + C_y y)\\ -\nu \left ( \frac{1}{2} C_x (x^2 - y^2) + C_y x y \right ) - \boldsymbol{Ny}\theta \\ -\nu \left ( \frac{1}{2} C_y (y^2 - x^2) + C_x x y \right ) + \boldsymbol{Nx}\theta\\ \end{bmatrix} \)

Parameters
C_xshear load factor in x-direction
C_yshear load factor in y-direction
rateOfTwistprecalculated rate of twist \( \theta \)

Implements Element.

void QuadrilateralElement::calculateElementLoadShearX ( void  )
virtual

Calculates the initial load vector \(\boldsymbol{S}_x^0\) for applied shear along x-axis.

\( \boldsymbol{S}^0_x = \frac{E_eV_x}{EI_y} \left[\int_{A_e} \boldsymbol{N}^TxdA + \frac{\nu_e}{4(1+\nu_e)}\int_{A_e}(\boldsymbol{N}^T_{,x}(x^2 - y^2) + 2\boldsymbol{N}^T_{,y}xy)dA \right] \)

Implements Element.

void QuadrilateralElement::calculateElementLoadShearY ( )
virtual

Calculates the initial load vector \(\boldsymbol{S}_y^0\) for applied shear along y-axis.

\( \boldsymbol{S}^0_y = \frac{E_eV_y}{EI_x} \left[ \int_{A_e} \boldsymbol{N}^TydA + \frac{\nu_e}{4(1+\nu_e)}\int_{A_e}(\boldsymbol{N}^T_{,y}(y^2 - x^2) + 2\boldsymbol{N}^T_{,x}xy)dA \right]\)

Implements Element.

void QuadrilateralElement::calculateElementLoadTorsion ( )
virtual

Calculates the initial load vector for torsion \(\boldsymbol{S}^0\). Load vector is negative for torsion loading to match global load vector.

\( \boldsymbol{S}^0 = - \int_A \boldsymbol{B}^T \boldsymbol{G} \boldsymbol{\epsilon}_0 dA \)

Implements Element.

void QuadrilateralElement::calculateTorsionShearCenter ( )
virtual

Calculates the shear center for the element, based on torsional analysis.

\( x_s = -\sum E \textbf{y}^T \int_{A_e} \textbf{N}^T \textbf{N} dA \textbf{v} \)

\( y_s = \sum E \textbf{x}^T \int_{A_e} \textbf{N}^T \textbf{N} dA \textbf{v} \)

Implements Element.

void QuadrilateralElement::checkBMatrix ( )

Method verifies \( \boldsymbol{B} \).

Used in debugging of the program. Calculates \(\boldsymbol{\epsilon}\) for each node. First component should be 1, second should be zero. If not, B is wrong. User must verify values (non-automatic). \( \boldsymbol{\epsilon} = \boldsymbol{B}\boldsymbol{x}\)

void QuadrilateralElement::checkNMatrix ( )

Method verifies \(\boldsymbol{N}\).

Used in debugging of the program. Checks if \( x = \textbf{N} \textbf{x} \) and \( y = \boldsymbol{N} \boldsymbol{y} \) for all integration points. User must verify (non-automatic).

void QuadrilateralElement::computeTauComposite ( double  C_x,
double  C_y,
double  rateOfTwist 
)
virtual

Calculates the element stresses at the integration points for composite analysis.

\( \boldsymbol{\tau}_e = \boldsymbol{C}_e \big ( \boldsymbol{B}_e \boldsymbol{v}_e + \boldsymbol{\epsilon}_{0,e} \big) \)

with
\( \boldsymbol{\epsilon}_{0} = \boldsymbol{\epsilon}_{0_s} + \boldsymbol{\epsilon}_{0_t} = \begin{bmatrix} (C_x x + C_y y)\\ -\nu \left ( \frac{1}{2} C_x (x^2 - y^2) + C_y x y \right ) - \boldsymbol{Ny}\theta \\ -\nu \left ( \frac{1}{2} C_y (y^2 - x^2) + C_x x y \right ) + \boldsymbol{Nx}\theta\\ \end{bmatrix} \), \( \boldsymbol{C}_e = \begin{bmatrix} E_e & 0 & 0 \\ 0 & G_e & 0 \\ 0 & 0 & G_e \\ \end{bmatrix} \)

Parameters
C_xshear load factor in x-direction
C_yshear load factor in y-direction
rateOfTwistprecalculated rate of twist \( \theta \)

Implements Element.

void QuadrilateralElement::computeTauShear ( double  Cx,
double  Cy 
)
virtual

Calculates shear stresses from shear loading at nodes using elementsDisplacement. For quadrilateral elements the stresses are calculated at the integration points (using xiCoord and etaCoord). The stress values are then extrapolated to the nodes using setExtrapolationMatrix().

\( \boldsymbol{\tau} = \boldsymbol{G}(\boldsymbol{Bv} + \boldsymbol{A})\)
where \( A = \begin{bmatrix} -\nu(\frac{1}{2}C_x(x^2-y^2) + C_y xy) \\ -\nu(C_x xy + \frac{1}{2}C_y (y^2 - z^2)) \end{bmatrix} \)
with \( C_x = \frac{V_x}{EIyp} \)
and \( C_y = \frac{V_y}{EIxp} \)

Implements Element.

void QuadrilateralElement::computeTauTorsion ( double  rateOfTwist)
virtual

Calculates shear stresses from torsion load at nodes using initialStrain and elementsDisplacement. For quadrilateral elements the stresses are calculated at the integration points (using xiCoord and etaCoord). The stress values are then extrapolated to the nodes using setExtrapolationMatrix().

\( \tau = \boldsymbol{B}\boldsymbol{v} + \epsilon_0 \)

Implements Element.

double QuadrilateralElement::getBendingStiffnessProduct ( double  Ax,
double  Ay 
)
virtual

Calculating the product of moment of inertia.

\( dx_e = Ac_x - Ac_{ex} \)
\( dy_e = Ac_y - Ac_{ey} \)
\( I_{xy} = \sum{E(I_{xy_e} + dx_e*dy_e*A_e)} \)

Parameters
AxArea centre x-direction of the mesh
AyArea centre y-direction of the mesh
Returns
element contribution to bending stiffness product \(EI_{xy}\)

Implements Element.

double QuadrilateralElement::getBendingStiffnessX ( double  Ay)
virtual

Calculates the second moment of area about the x-axis for the element.

\( dy_e = A_y - Ac_{ey} \)
\( I_x = \sum{( E(I_{x_e} + dy_e^2*A_e)) } \)

Parameters
AyArea centre of the mesh
Returns
element contribution to bending stiffness product \(EI_{xy}\)

Implements Element.

double QuadrilateralElement::getBendingStiffnessY ( double  Ax)
virtual

Calculates the second moment of area about the y-axis for the element.

\( dx_e = A_x - Ac_{ex} \)
\( I_y = \sum{(E(I_{y_e} + dx_e^2*A_e))} \)

Parameters
AxArea centre of the mesh
Returns
element contribution to bending stiffness \(EI_{y}\)

Implements Element.

MatrixXd QuadrilateralElement::getN1Matrix ( double  xi,
double  eta 
)

Gets the \( \textbf{N}_1 matrix\).

\( \textbf{N}_1 = \begin{bmatrix} (1 - \xi)(1 - \eta) & (1 + \xi)(1 - \eta) & (1 + \xi)(1 + \eta) & (1 - \xi)(1 + \eta) \end{bmatrix} \)

Parameters
xinatural coordinate \(\xi\)
etanatural coordinate \(\eta\)
Returns
matrix N1
double QuadrilateralElement::getShearFactorContributionX ( )
virtual

Gets the shear deformation factor contribution from the element, in x-direction.

\( xContribution = E_e \textbf{x}^T \int_{A_e} \textbf{N}^T \textbf{N} dA \textbf{v}_x \)

Returns
shear deformation factor contribution in x-direction from element

Implements Element.

double QuadrilateralElement::getShearFactorContributionY ( )
virtual

Gets the shear deformation factor contribution from the element, in y-direction.

\( yContribution = E_e \textbf{y}^T \int_{A_e} \textbf{N}^T \textbf{N} dA \textbf{v}_y \)

Returns
shear deformation factor contribution in y-direction from element

Implements Element.

void QuadrilateralElement::setExtrapolationMatrix ( )

Creates the matrix used for extrapolating results.

\( \begin{bmatrix} 1 + \frac{1}{2} \sqrt3 & -\frac{1}{2} & 1 - \frac{1}{2} \sqrt3 & -\frac{1}{2}\\ -\frac{1}{2} & 1 + \frac{1}{2} \sqrt3 & -\frac{1}{2} & 1- \frac{1}{2} \sqrt3\\ 1 - \frac{1}{2} \sqrt3 & -\frac{1}{2} & 1 + \frac{1}{2} \sqrt3 & -\frac{1}{2}\\ -\frac{1}{2} & 1 - \frac{1}{2} \sqrt3 & -\frac{1}{2} & 1 + \frac{1}{2} \sqrt3 \end{bmatrix} \)

double QuadrilateralElement::xOfZeta ( double  xi,
double  eta 
)
virtual

Calculates and returns the the distance in the x-direction between the integration point in the element and the element area centre.

\( x = | \boldsymbol{N} \boldsymbol{x}^T - ecx |\)

Parameters
xiarea coordinate with value between -1 and 1
etaarea coordinate with value between -1 and 1
Returns
distance in x-direction for integration point defiend by \(\zeta_1\) and \(\zeta_2\)

Implements Element.

double QuadrilateralElement::yOfZeta ( double  xi,
double  eta 
)
virtual

Calculates and returns the the distance in the y-direction between the integration point in the element and the element area centre.

\( y = | \boldsymbol{N} \boldsymbol{y}^T - ecy |\)

Parameters
xiarea coordinate with value between -1 and 1
etaarea coordinate with value between -1 and 1
Returns
distance in y-direction for integration point defiend by \(\zeta_1\) and \(\zeta_2\)

Implements Element.


The documentation for this class was generated from the following files: