Seismo-VLAB  1.3
An Open-Source Finite Element Software for Meso-Scale Simulations
UnxBoucWen2DLink Class Reference

Class for creating an uniaxial 2D two-node link element using Bouc-Wen formulation. More...

#include <UnxBoucWen2DLink.hpp>

Inheritance diagram for UnxBoucWen2DLink:
Collaboration diagram for UnxBoucWen2DLink:

Public Member Functions

 UnxBoucWen2DLink (const std::vector< unsigned int > nodes, std::vector< double > parameters, std::vector< double > variables, const unsigned int dim, const unsigned int dir, double tol=1E-06, unsigned int nmax=50)
 Creates a UnxBoucWen2DLink in a finite element Mesh. More...
 
 ~UnxBoucWen2DLink ()
 Destroys this UnxBoucWen2DLink object. More...
 
void CommitState ()
 Save the material states in the element. More...
 
void ReverseState ()
 Reverse the material/section states to previous converged state in this element. More...
 
void InitialState ()
 Brings the material/section state to its initial state in this element. More...
 
void UpdateState ()
 Update the material states in the element. More...
 
void SetDomain (std::map< unsigned int, std::shared_ptr< Node > > &nodes)
 Sets the finite element dependance among objects. More...
 
void SetDamping (const std::shared_ptr< Damping > &damping)
 Sets the damping model. More...
 
std::vector< unsigned int > GetTotalDegreeOfFreedom () const
 Gets the list of total-degree of freedom of this Element. More...
 
Eigen::MatrixXd GetStrain () const
 Gets the material/section (generalised) strain. More...
 
Eigen::MatrixXd GetStress () const
 Gets the material/section (generalised) stress. More...
 
Eigen::MatrixXd GetStrainRate () const
 Gets the material/section (generalised) strain-rate. More...
 
Eigen::MatrixXd GetStrainAt (double x3, double x2) const
 Gets the material strain in section at coordinate (x3,x2). More...
 
Eigen::MatrixXd GetStressAt (double x3, double x2) const
 Gets the material stress in section at coordinate (x3,x2). More...
 
Eigen::VectorXd GetVTKResponse (std::string response) const
 Gets the element internal response in VTK format for Paraview display. More...
 
double ComputeEnergy ()
 Computes the element energy for a given deformation. More...
 
Eigen::MatrixXd ComputeMassMatrix ()
 Compute the lumped/consistent mass matrix of the element. More...
 
Eigen::MatrixXd ComputeStiffnessMatrix ()
 Compute the stiffness matrix of the element using gauss-integration. More...
 
Eigen::MatrixXd ComputeDampingMatrix ()
 Compute the damping matrix of the element using gauss-integration. More...
 
Eigen::MatrixXd ComputePMLMatrix ()
 Compute the PML history matrix using gauss-integration. More...
 
Eigen::VectorXd ComputeInternalForces ()
 Compute the internal (elastic) forces acting on the element. More...
 
Eigen::VectorXd ComputeInternalDynamicForces ()
 Compute the elastic, inertial, and viscous forces acting on the element. More...
 
Eigen::VectorXd ComputeSurfaceForces (const std::shared_ptr< Load > &surface, unsigned int face)
 Compute the surface forces acting on the element. More...
 
Eigen::VectorXd ComputeBodyForces (const std::shared_ptr< Load > &body, unsigned int k=0)
 Compute the body forces acting on the element. More...
 
Eigen::VectorXd ComputeDomainReductionForces (const std::shared_ptr< Load > &drm, unsigned int k)
 Compute the domain reduction forces acting on the element. More...
 
- Public Member Functions inherited from Element
 Element (std::string name, const std::vector< unsigned int > nodes, unsigned int ndofs, unsigned int VTKcell, unsigned int SVLcell)
 Creates an Element in a finite element Mesh. More...
 
virtual ~Element ()=0
 Destroys this Element object. More...
 
std::string GetName () const
 Gets the Element Name. More...
 
unsigned int GetVTKCellType () const
 Gets the Element VTK cell type. More...
 
unsigned int GetVTKGroupType () const
 Gets the Element VTK group type. More...
 
unsigned int GetNumberOfNodes () const
 Returns the number of nodes in element. More...
 
unsigned int GetNumberOfDegreeOfFreedom () const
 Returns total number of degree of freedom in the element. More...
 
const std::vector< unsigned int > & GetNodes () const
 Returns the Node Connectivity Indexes. More...
 
bool HasFixedNode (const std::vector< std::shared_ptr< Node > > &nodes) const
 Returns if the element has fixed nodes. More...
 

Private Member Functions

double sign (double x) const
 Sign function. More...
 
Eigen::VectorXd ComputeRelativeDeformation () const
 Update strain in the element: More...
 
Eigen::MatrixXd ComputeLocalAxes () const
 Compute local axes. More...
 
Eigen::MatrixXd ComputeRotationMatrix () const
 Compute rotation matrix. More...
 

Private Attributes

double Ko
 Initial stiffness of hysteretic component. More...
 
double Fy
 Yield force. More...
 
double alpha
 Yielding exponent (sharpness of hysteresis loop corners) More...
 
double eta
 Yielding exponent (sharpness of hysteresis loop corners) More...
 
double beta
 First hysteretic shape parameter. More...
 
double gamma
 second hysteretic shape parameter More...
 
double Tol
 Newton-Raphson Tolerance. More...
 
double z
 Trial Hysteretic evolution parameters. More...
 
double zn
 Hysteretic evolution parameters. More...
 
double U
 Trial displacements in local coordinates. More...
 
double Un
 Displacements in local coordinates. More...
 
double qbw
 Non-linear Bouc-Wen internal force. More...
 
double qbc
 Non-linear commited Bouc-Wen internal force. More...
 
double kbw
 Consistent Bouc-Wen stiffness. More...
 
double kbc
 Consistent commited Bouc-Wen stiffness. More...
 
unsigned int nMax
 Newton-Raphson maximum number of iterations. More...
 
unsigned int Dimension
 The element dimension in global coordinates. More...
 
unsigned int Direction
 The element direction in global coordinates. More...
 
std::vector< std::shared_ptr< Node > > theNodes
 The Element's Nodes. More...
 

Detailed Description

Class for creating an uniaxial 2D two-node link element using Bouc-Wen formulation.

See also
Element.hpp Mesh.hpp

Constructor & Destructor Documentation

◆ UnxBoucWen2DLink()

UnxBoucWen2DLink::UnxBoucWen2DLink ( const std::vector< unsigned int >  nodes,
std::vector< double >  parameters,
std::vector< double >  variables,
const unsigned int  dim,
const unsigned int  dir,
double  tol = 1E-06,
unsigned int  nmax = 50 
)

Creates a UnxBoucWen2DLink in a finite element Mesh.

Parameters
nodesThe Node connectivity array of this Element.
parametersVector that contains the Bouc-Wen model parameters.
variablesVector that contains auxiliary model parameters.
dimThe model dimension.
dirThe local direction where this Element is acting.
tolTolerance to stop Newton-Raphson iterations.
nmaxMaximum number of iteration for Newton-Raphson.
Note
More details can be found at UnxBoucWen2DLink.
See also
UnxBoucWen2DLink::theNodes, UnxBoucWen2DLink::theDirection, UnxBoucWen2DLink::theDimension.

◆ ~UnxBoucWen2DLink()

UnxBoucWen2DLink::~UnxBoucWen2DLink ( )

Destroys this UnxBoucWen2DLink object.

Member Function Documentation

◆ CommitState()

void UnxBoucWen2DLink::CommitState ( )
virtual

Save the material states in the element.

Note
This function sets the trial states as converged ones in Material.

Implements Element.

◆ ComputeBodyForces()

Eigen::VectorXd UnxBoucWen2DLink::ComputeBodyForces ( const std::shared_ptr< Load > &  body,
unsigned int  k = 0 
)
virtual

Compute the body forces acting on the element.

Parameters
bodyPointer to the Load object that contains this information.
kThe time step at which the body load is evaluated.
Returns
Vector with the Element surface force.
Note
The body force vector can be revisited in UnxBoucWen2DLink.
See also
Assembler::ComputeExternalForceVector(), Integrator::ComputeEffectiveForce().

Implements Element.

◆ ComputeDampingMatrix()

Eigen::MatrixXd UnxBoucWen2DLink::ComputeDampingMatrix ( )
virtual

Compute the damping matrix of the element using gauss-integration.

Returns
Matrix with the Element damping matrix.
Note
The damping matrix can be revisited in UnxBoucWen2DLink.
See also
Assembler::ComputeDampingMatrix(), Integrator::ComputeEffectiveStiffness().

Implements Element.

◆ ComputeDomainReductionForces()

Eigen::VectorXd UnxBoucWen2DLink::ComputeDomainReductionForces ( const std::shared_ptr< Load > &  drm,
unsigned int  k 
)
virtual

Compute the domain reduction forces acting on the element.

Parameters
drmPointer to the DRM Load object that contains this information.
kThe time step at which the body load is evaluated.
Returns
Vector with the Element domain reduction forces.
Note
The DRM force vector can be revisited in UnxBoucWen2DLink.
See also
Assembler::ComputeExternalForceVector(), Integrator::ComputeEffectiveForce().

Implements Element.

◆ ComputeEnergy()

double UnxBoucWen2DLink::ComputeEnergy ( )
virtual

Computes the element energy for a given deformation.

Returns
Scalar with the element deformation energy.

Implements Element.

◆ ComputeInternalDynamicForces()

Eigen::VectorXd UnxBoucWen2DLink::ComputeInternalDynamicForces ( )
virtual

Compute the elastic, inertial, and viscous forces acting on the element.

Returns
Vector with the Element dynamic internal force.
Note
The internal force vector can be revisited in Element.
See also
Assembler::ComputeDynamicInternalForceVector().

Implements Element.

◆ ComputeInternalForces()

Eigen::VectorXd UnxBoucWen2DLink::ComputeInternalForces ( )
virtual

Compute the internal (elastic) forces acting on the element.

Returns
Vector with the Element internal force.
Note
The internal force vector can be revisited in UnxBoucWen2DLink.
See also
Assembler::ComputeInternalForceVector(), Integrator::ComputeEffectiveForce().

Implements Element.

◆ ComputeLocalAxes()

Eigen::MatrixXd UnxBoucWen2DLink::ComputeLocalAxes ( ) const
private

Compute local axes.

Returns
Matrix with the local axis transformation.
Note
Axes transformation are according to UnxBoucWen2DLink.

◆ ComputeMassMatrix()

Eigen::MatrixXd UnxBoucWen2DLink::ComputeMassMatrix ( )
virtual

Compute the lumped/consistent mass matrix of the element.

Returns
Matrix with the Element mass matrix.
Note
The mass matrix can be revisited in UnxBoucWen2DLink.
See also
Assembler::ComputeMassMatrix(), Integrator::ComputeEffectiveStiffness().

Implements Element.

◆ ComputePMLMatrix()

Eigen::MatrixXd UnxBoucWen2DLink::ComputePMLMatrix ( )
virtual

Compute the PML history matrix using gauss-integration.

Returns
Matrix with the PML Element matrix.
Note
The PML matrix is none existent for this element.
See also
Assembler::ComputePMLHistoryMatrix(), Integrator::ComputeEffectiveStiffness().

Implements Element.

◆ ComputeRelativeDeformation()

Eigen::VectorXd UnxBoucWen2DLink::ComputeRelativeDeformation ( ) const
private

Update strain in the element:

Returns
Vector with the total relative deformation.

◆ ComputeRotationMatrix()

Eigen::MatrixXd UnxBoucWen2DLink::ComputeRotationMatrix ( ) const
private

Compute rotation matrix.

Returns
Matrix with the rotation.
Note
Axes transformation are according to UnxBoucWen2DLink.

◆ ComputeStiffnessMatrix()

Eigen::MatrixXd UnxBoucWen2DLink::ComputeStiffnessMatrix ( )
virtual

Compute the stiffness matrix of the element using gauss-integration.

Returns
Matrix with the Element stiffness matrix.
Note
The stiffness matrix can be revisited in UnxBoucWen2DLink.
See also
Assembler::ComputeStiffnessMatrix(), Integrator::ComputeEffectiveStiffness().

Implements Element.

◆ ComputeSurfaceForces()

Eigen::VectorXd UnxBoucWen2DLink::ComputeSurfaceForces ( const std::shared_ptr< Load > &  surface,
unsigned int  face 
)
virtual

Compute the surface forces acting on the element.

Parameters
surfacePointer to the Load object that contains this information.
kThe time step at which the surface load is evaluated.
Returns
Vector with the Element surface force.
Note
The surface force vector can be revisited in UnxBoucWen2DLink.
See also
Assembler::ComputeExternalForceVector(), Integrator::ComputeEffectiveForce().

Implements Element.

◆ GetStrain()

Eigen::MatrixXd UnxBoucWen2DLink::GetStrain ( ) const
virtual

Gets the material/section (generalised) strain.

Returns
Matrix with the strain at each integration point.
Note
The index (i,j) are the strain and Gauss-point respectively.

Implements Element.

◆ GetStrainAt()

Eigen::MatrixXd UnxBoucWen2DLink::GetStrainAt ( double  x3,
double  x2 
) const
virtual

Gets the material strain in section at coordinate (x3,x2).

Parameters
x3Local coordinate along the x3-axis.
x2Local coordinate along the x2-axis.
Returns
Matrix with the strain at coordinate (x3,x2).
Note
The strains are interpolated at this coordinate.

Implements Element.

◆ GetStrainRate()

Eigen::MatrixXd UnxBoucWen2DLink::GetStrainRate ( ) const
virtual

Gets the material/section (generalised) strain-rate.

Returns
Matrix with the strain-rate at each integration point.
Note
The index (i,j) are the strain-rate and Gauss-point respectively.

Implements Element.

◆ GetStress()

Eigen::MatrixXd UnxBoucWen2DLink::GetStress ( ) const
virtual

Gets the material/section (generalised) stress.

Returns
Matrix with the stress at each integration point.
Note
The index (i,j) are the stress and Gauss-point respectively.

Implements Element.

◆ GetStressAt()

Eigen::MatrixXd UnxBoucWen2DLink::GetStressAt ( double  x3,
double  x2 
) const
virtual

Gets the material stress in section at coordinate (x3,x2).

Parameters
x3Local coordinate along the x3-axis.
x2Local coordinate along the x2-axis.
Returns
Matrix with the stresses at coordinate (x3,x2).
Note
The stresses are interpolated at this coordinate.

Implements Element.

◆ GetTotalDegreeOfFreedom()

std::vector<unsigned int> UnxBoucWen2DLink::GetTotalDegreeOfFreedom ( ) const
virtual

Gets the list of total-degree of freedom of this Element.

Returns
Vector with the list of degree-of-freedom of this Element.

Implements Element.

◆ GetVTKResponse()

Eigen::VectorXd UnxBoucWen2DLink::GetVTKResponse ( std::string  response) const
virtual

Gets the element internal response in VTK format for Paraview display.

Parameters
responseThe response to be display in Paraview.
Returns
Vector with the response at the Element center.
Note
The current responses are: "Strain", "Stress".

Implements Element.

◆ InitialState()

void UnxBoucWen2DLink::InitialState ( )
virtual

Brings the material/section state to its initial state in this element.

Note
This function returns the meterial states to the beginning.

Implements Element.

◆ ReverseState()

void UnxBoucWen2DLink::ReverseState ( )
virtual

Reverse the material/section states to previous converged state in this element.

Note
This function returns the trial states to previous converged states at the Material level.

Implements Element.

◆ SetDamping()

void UnxBoucWen2DLink::SetDamping ( const std::shared_ptr< Damping > &  damping)
virtual

Sets the damping model.

Parameters
dampingPointer to the damping model.
Note
Several Element objects can share the same damping model.

Implements Element.

◆ SetDomain()

void UnxBoucWen2DLink::SetDomain ( std::map< unsigned int, std::shared_ptr< Node > > &  nodes)
virtual

Sets the finite element dependance among objects.

Parameters
nodesThe Node list of the Mesh object.
Note
This function sets the relation between Node and Element objects.
See also
lin2DQuad4::theNodes.

Implements Element.

◆ sign()

double UnxBoucWen2DLink::sign ( double  x) const
private

Sign function.

◆ UpdateState()

void UnxBoucWen2DLink::UpdateState ( )
virtual

Update the material states in the element.

Note
This function update the trial states at the Material level.

Implements Element.

Member Data Documentation

◆ alpha

double UnxBoucWen2DLink::alpha
private

Yielding exponent (sharpness of hysteresis loop corners)

◆ beta

double UnxBoucWen2DLink::beta
private

First hysteretic shape parameter.

◆ Dimension

unsigned int UnxBoucWen2DLink::Dimension
private

The element dimension in global coordinates.

◆ Direction

unsigned int UnxBoucWen2DLink::Direction
private

The element direction in global coordinates.

◆ eta

double UnxBoucWen2DLink::eta
private

Yielding exponent (sharpness of hysteresis loop corners)

◆ Fy

double UnxBoucWen2DLink::Fy
private

Yield force.

◆ gamma

double UnxBoucWen2DLink::gamma
private

second hysteretic shape parameter

◆ kbc

double UnxBoucWen2DLink::kbc
private

Consistent commited Bouc-Wen stiffness.

◆ kbw

double UnxBoucWen2DLink::kbw
private

Consistent Bouc-Wen stiffness.

◆ Ko

double UnxBoucWen2DLink::Ko
private

Initial stiffness of hysteretic component.

◆ nMax

unsigned int UnxBoucWen2DLink::nMax
private

Newton-Raphson maximum number of iterations.

◆ qbc

double UnxBoucWen2DLink::qbc
private

Non-linear commited Bouc-Wen internal force.

◆ qbw

double UnxBoucWen2DLink::qbw
private

Non-linear Bouc-Wen internal force.

◆ theNodes

std::vector<std::shared_ptr<Node> > UnxBoucWen2DLink::theNodes
private

The Element's Nodes.

◆ Tol

double UnxBoucWen2DLink::Tol
private

Newton-Raphson Tolerance.

◆ U

double UnxBoucWen2DLink::U
private

Trial displacements in local coordinates.

◆ Un

double UnxBoucWen2DLink::Un
private

Displacements in local coordinates.

◆ z

double UnxBoucWen2DLink::z
private

Trial Hysteretic evolution parameters.

◆ zn

double UnxBoucWen2DLink::zn
private

Hysteretic evolution parameters.