Seismo-VLAB  1.3
An Open-Source Finite Element Software for Meso-Scale Simulations
Lin3DThinArea.hpp
Go to the documentation of this file.
1 //==============================================================================
2 //
3 // Seismo Virtual Laboratory
4 // Module for Serial and Parallel Analysis of seismic
5 // wave propagation and soil-structure interaction simulation
6 // Copyright (C) 2018-2021, The California Institute of Technology
7 // All Rights Reserved.
8 //
9 // Commercial use of this program without express permission of the California
10 // Institute of Technology, is strictly prohibited. See file "COPYRIGHT" in
11 // main directory for information on usage and redistribution, and for a
12 // DISCLAIMER OF ALL WARRANTIES.
13 //
14 //==============================================================================
15 //
16 // Written by:
17 // Danilo S. Kusanovic (dkusanov@caltech.edu)
18 // Elnaz E. Seylabi (elnaze@unr.edu)
19 //
20 // Supervised by:
21 // Domniki M. Asimaki (domniki@caltech.edu)
22 //
23 // References :
24 // [1]
25 //
26 // Description:
30 //------------------------------------------------------------------------------
31 
32 #ifndef _LIN3DTHINAREA_HPP_
33 #define _LIN3DTHINAREA_HPP_
34 
35 #include <string>
36 #include <memory>
37 #include <Eigen/Dense>
38 
39 #include "Section.hpp"
40 #include "Material.hpp"
41 
49 class Lin3DThinArea : public Section{
50 
51  public:
57  Lin3DThinArea(double t, std::unique_ptr<Material> &material);
58 
61 
65  std::unique_ptr<Section> CopySection();
66 
69  Eigen::VectorXd GetStrain();
70 
73  Eigen::VectorXd GetStress();
74 
77  Eigen::MatrixXd GetDensity();
78 
81  Eigen::MatrixXd GetTangentStiffness();
82 
86  Eigen::MatrixXd GetInitialTangentStiffness();
87 
92  Eigen::VectorXd GetStrainAt(double x3=0, double x2=0);
93 
98  Eigen::VectorXd GetStressAt(double x3=0, double x2=0);
99 
102  void CommitState();
103 
106  void ReverseState();
107 
110  void InitialState();
111 
116  void UpdateState(const Eigen::VectorXd strain, const unsigned int cond);
117 
118  private:
120  double t;
121 
123  Eigen::VectorXd Strain;
124 
126  std::unique_ptr<Material> theMaterial;
127 };
128 
129 #endif
std::unique_ptr< Section > CopySection()
Clone the &#39;Lin3DThinArea&#39; section.
std::unique_ptr< Material > theMaterial
The section&#39;s material.
Definition: Lin3DThinArea.hpp:126
void ReverseState()
Reverse the section states to previous converged state.
Eigen::MatrixXd GetInitialTangentStiffness()
Returns the section initial stiffness matrix.
Eigen::VectorXd GetStress()
Returns the resultant (generalised) stress vector over the section.
Virtual class for creating a section object.
Definition: Section.hpp:45
void UpdateState(const Eigen::VectorXd strain, const unsigned int cond)
Update the section state for this iteration.
This file contains the abstract "Material object" declarations, which computes the strain...
Eigen::VectorXd GetStrain()
Returns the resultant (generalised) strain vector over the section.
This file contains the abstract "Section object" declarations, which computes the strain...
double t
Thickness.
Definition: Lin3DThinArea.hpp:120
Eigen::MatrixXd GetDensity()
Access the section density matrix.
Eigen::VectorXd Strain
Generalized Strain vector.
Definition: Lin3DThinArea.hpp:123
Class for creating an area section for 3D analysis with linear elastic material for a shell elements...
Definition: Lin3DThinArea.hpp:49
void CommitState()
Perform converged section state update.
Eigen::VectorXd GetStrainAt(double x3=0, double x2=0)
Returns the section strain at given position.
Eigen::MatrixXd GetTangentStiffness()
Returns the section stiffness matrix.
~Lin3DThinArea()
Destroys this Lin3DThinArea object.
Eigen::VectorXd GetStressAt(double x3=0, double x2=0)
Returns the section stress at given position.
Lin3DThinArea(double t, std::unique_ptr< Material > &material)
Creates a Section to be specified at a Gauss-point in an Element.
void InitialState()
Brings the section states to its initial state.