Seismo-VLAB  1.3
An Open-Source Finite Element Software for Meso-Scale Simulations
Lin3DCircularTube.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 _LIN3DCIRCULARTUBE_HPP_
33 #define _LIN3DCIRCULARTUBE_HPP_
34 
35 #include <string>
36 #include <memory>
37 #include <Eigen/Dense>
38 
39 #include "Section.hpp"
40 #include "Material.hpp"
41 
49 class Lin3DCircularTube : public Section{
50 
51  public:
60  Lin3DCircularTube(double re, double ri, std::unique_ptr<Material> &material, double theta=0.0, unsigned int ip=10);
61 
64 
68  std::unique_ptr<Section> CopySection();
69 
72  Eigen::VectorXd GetStrain();
73 
76  Eigen::VectorXd GetStress();
77 
80  Eigen::MatrixXd GetDensity();
81 
84  Eigen::MatrixXd GetTangentStiffness();
85 
89  Eigen::MatrixXd GetInitialTangentStiffness();
90 
95  Eigen::VectorXd GetStrainAt(double x3=0, double x2=0);
96 
101  Eigen::VectorXd GetStressAt(double x3=0, double x2=0);
102 
105  void CommitState();
106 
109  void ReverseState();
110 
113  void InitialState();
114 
119  void UpdateState(const Eigen::VectorXd strain, const unsigned int cond);
120 
121  protected:
125  double GetArea();
126 
130  double GetShearArea2();
131 
135  double GetShearArea3();
136 
137  //Computes the Angle torsional inertia.
140  double GetInertiaAxis1();
141 
145  double GetInertiaAxis2();
146 
150  double GetInertiaAxis3();
151 
156  void ComputeSectionCenter(double &zcm, double &ycm);
157 
158  private:
160  double re;
161 
163  double ri;
164 
166  double Theta;
167 
169  unsigned int InsertPoint;
170 
172  Eigen::VectorXd Strain;
173 
175  std::unique_ptr<Material> theMaterial;
176 };
177 
178 #endif
void ReverseState()
Reverse the section states to previous converged state.
Eigen::VectorXd GetStrain()
Returns the resultant (generalised) strain vector over the section.
~Lin3DCircularTube()
Destroys this Lin3DCircularTube object.
Eigen::MatrixXd GetDensity()
Access the section density matrix.
Virtual class for creating a section object.
Definition: Section.hpp:45
double re
External radius.
Definition: Lin3DCircularTube.hpp:160
Eigen::VectorXd GetStressAt(double x3=0, double x2=0)
Returns the section stress at given position.
void UpdateState(const Eigen::VectorXd strain, const unsigned int cond)
Update the section state for this iteration.
double GetArea()
Computes the Angle area.
double GetShearArea3()
Computes the Angle shear area.
This file contains the abstract "Material object" declarations, which computes the strain...
This file contains the abstract "Section object" declarations, which computes the strain...
Class for creating a solid circular tube section for 3D analysis with linear elastic material for a f...
Definition: Lin3DCircularTube.hpp:49
double GetShearArea2()
Computes the Angle shear area.
unsigned int InsertPoint
Local axis coordinate.
Definition: Lin3DCircularTube.hpp:169
Eigen::MatrixXd GetTangentStiffness()
Returns the section stiffness matrix.
void CommitState()
Perform converged section state update.
Lin3DCircularTube(double re, double ri, 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 ri
Internal radius.
Definition: Lin3DCircularTube.hpp:163
double Theta
Rotation angle.
Definition: Lin3DCircularTube.hpp:166
double GetInertiaAxis1()
std::unique_ptr< Section > CopySection()
Clone the &#39;Lin3DCircularTube&#39; section.
Eigen::VectorXd Strain
Generalized Strain vector.
Definition: Lin3DCircularTube.hpp:172
double GetInertiaAxis2()
Computes the Angle flexural inertia.
void ComputeSectionCenter(double &zcm, double &ycm)
Gets the section centroid.
double GetInertiaAxis3()
Computes the Angle flexural inertia.
void InitialState()
Brings the section states to its initial state.
Eigen::VectorXd GetStress()
Returns the resultant (generalised) stress vector over the section.
Eigen::MatrixXd GetInitialTangentStiffness()
Returns the section initial 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: Lin3DCircularTube.hpp:175