Seismo-VLAB  1.3
An Open-Source Finite Element Software for Meso-Scale Simulations
Lin3DCircular.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 _LIN3DCIRCULAR_HPP_
33 #define _LIN3DCIRCULAR_HPP_
34 
35 #include <string>
36 #include <memory>
37 #include <Eigen/Dense>
38 
39 #include "Section.hpp"
40 #include "Material.hpp"
41 
49 class Lin3DCircular : public Section{
50 
51  public:
59  Lin3DCircular(double r, std::unique_ptr<Material> &material, double theta=0.0, unsigned int ip=10);
60 
63 
67  std::unique_ptr<Section> CopySection();
68 
71  Eigen::VectorXd GetStrain();
72 
75  Eigen::VectorXd GetStress();
76 
79  Eigen::MatrixXd GetDensity();
80 
83  Eigen::MatrixXd GetTangentStiffness();
84 
88  Eigen::MatrixXd GetInitialTangentStiffness();
89 
94  Eigen::VectorXd GetStrainAt(double x3=0, double x2=0);
95 
100  Eigen::VectorXd GetStressAt(double x3=0, double x2=0);
101 
104  void CommitState();
105 
108  void ReverseState();
109 
112  void InitialState();
113 
118  void UpdateState(const Eigen::VectorXd strain, const unsigned int cond);
119 
120  protected:
124  double GetArea();
125 
129  double GetShearArea2();
130 
134  double GetShearArea3();
135 
136  //Computes the Angle torsional inertia.
139  double GetInertiaAxis1();
140 
144  double GetInertiaAxis2();
145 
149  double GetInertiaAxis3();
150 
155  void ComputeSectionCenter(double &zcm, double &ycm);
156 
157  private:
159  double r;
160 
162  double Theta;
163 
165  unsigned int InsertPoint;
166 
168  Eigen::VectorXd Strain;
169 
171  std::unique_ptr<Material> theMaterial;
172 };
173 
174 #endif
void UpdateState(const Eigen::VectorXd strain, const unsigned int cond)
Update the section state for this iteration.
Eigen::VectorXd GetStrain()
Returns the resultant (generalised) strain vector over the section.
std::unique_ptr< Section > CopySection()
Clone the &#39;Lin3DCircular&#39; section.
Eigen::MatrixXd GetInitialTangentStiffness()
Returns the section initial stiffness matrix.
double GetArea()
Computes the Angle area.
void ComputeSectionCenter(double &zcm, double &ycm)
Gets the section centroid.
Virtual class for creating a section object.
Definition: Section.hpp:45
double Theta
Rotation angle.
Definition: Lin3DCircular.hpp:162
This file contains the abstract "Material object" declarations, which computes the strain...
This file contains the abstract "Section object" declarations, which computes the strain...
void ReverseState()
Reverse the section states to previous converged state.
double GetInertiaAxis3()
Computes the Angle flexural inertia.
Eigen::VectorXd Strain
Generalized Strain vector.
Definition: Lin3DCircular.hpp:168
double GetInertiaAxis1()
Lin3DCircular(double r, std::unique_ptr< Material > &material, double theta=0.0, unsigned int ip=10)
Creates a Section to be specified at a Gauss-point in an Element.
double GetShearArea2()
Computes the Angle shear area.
Class for creating a solid circular section for 3D analysis with linear elastic material for a frame ...
Definition: Lin3DCircular.hpp:49
void InitialState()
Brings the section states to its initial state.
Eigen::MatrixXd GetDensity()
Access the section density matrix.
double r
Circle Radius.
Definition: Lin3DCircular.hpp:159
~Lin3DCircular()
Destroys this Lin3DCircular object.
unsigned int InsertPoint
Local axis coordinate.
Definition: Lin3DCircular.hpp:165
Eigen::VectorXd GetStress()
Returns the resultant (generalised) stress vector over the section.
Eigen::VectorXd GetStressAt(double x3=0, double x2=0)
Returns the section stress at given position.
void CommitState()
Perform converged section state update.
Eigen::MatrixXd GetTangentStiffness()
Returns the section stiffness matrix.
Eigen::VectorXd GetStrainAt(double x3=0, double x2=0)
Returns the section strain at given position.
std::unique_ptr< Material > theMaterial
The section&#39;s material.
Definition: Lin3DCircular.hpp:171
double GetInertiaAxis2()
Computes the Angle flexural inertia.
double GetShearArea3()
Computes the Angle shear area.