Seismo-VLAB  1.3
An Open-Source Finite Element Software for Meso-Scale Simulations
Lin3DRectangularTube.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 _LIN3DRECTANGULARTUBE_HPP_
33 #define _LIN3DRECTANGULARTUBE_HPP_
34 
35 #include <string>
36 #include <memory>
37 #include <Eigen/Dense>
38 
39 #include "Section.hpp"
40 #include "Material.hpp"
41 
50 
51  public:
62  Lin3DRectangularTube(double h, double b, double tw, double tf, std::unique_ptr<Material> &material, double theta=0.0, unsigned int ip=10);
63 
66 
70  std::unique_ptr<Section> CopySection();
71 
74  Eigen::VectorXd GetStrain();
75 
78  Eigen::VectorXd GetStress();
79 
82  Eigen::MatrixXd GetDensity();
83 
86  Eigen::MatrixXd GetTangentStiffness();
87 
91  Eigen::MatrixXd GetInitialTangentStiffness();
92 
97  Eigen::VectorXd GetStrainAt(double x3=0, double x2=0);
98 
103  Eigen::VectorXd GetStressAt(double x3=0, double x2=0);
104 
107  void CommitState();
108 
111  void ReverseState();
112 
115  void InitialState();
116 
121  void UpdateState(const Eigen::VectorXd strain, const unsigned int cond);
122 
123  protected:
127  double GetArea();
128 
132  double GetShearArea2();
133 
137  double GetShearArea3();
138 
139  //Computes the Angle torsional inertia.
142  double GetInertiaAxis1();
143 
147  double GetInertiaAxis2();
148 
152  double GetInertiaAxis3();
153 
158  void ComputeSectionCenter(double &zcm, double &ycm);
159 
160  private:
162  double h;
163 
165  double b;
166 
168  double tw;
169 
171  double tf;
172 
174  double Theta;
175 
177  unsigned int InsertPoint;
178 
180  Eigen::VectorXd Strain;
181 
183  std::unique_ptr<Material> theMaterial;
184 };
185 
186 #endif
double GetShearArea2()
Computes the Angle shear area.
Eigen::MatrixXd GetTangentStiffness()
Returns the section stiffness matrix.
void CommitState()
Perform converged section state update.
void ComputeSectionCenter(double &zcm, double &ycm)
Gets the section centroid.
Virtual class for creating a section object.
Definition: Section.hpp:45
double GetInertiaAxis3()
Computes the Angle flexural inertia.
double GetShearArea3()
Computes the Angle shear area.
This file contains the abstract "Material object" declarations, which computes the strain...
double GetInertiaAxis2()
Computes the Angle flexural inertia.
This file contains the abstract "Section object" declarations, which computes the strain...
double tf
Flange thickness.
Definition: Lin3DRectangularTube.hpp:171
double tw
Web thickness.
Definition: Lin3DRectangularTube.hpp:168
unsigned int InsertPoint
Local axis coordinate.
Definition: Lin3DRectangularTube.hpp:177
Eigen::MatrixXd GetDensity()
Access the section density matrix.
double GetArea()
Computes the Angle area.
Lin3DRectangularTube(double h, double b, double tw, double tf, 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.
std::unique_ptr< Material > theMaterial
The section&#39;s material.
Definition: Lin3DRectangularTube.hpp:183
Eigen::VectorXd GetStress()
Returns the resultant (generalised) stress vector over the section.
std::unique_ptr< Section > CopySection()
Clone the &#39;Lin3DRectangularTube&#39; section.
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.
Class for creating a rectangular tube section for 3D analysis with linear elastic material for a fram...
Definition: Lin3DRectangularTube.hpp:49
Eigen::VectorXd Strain
Generalized Strain vector.
Definition: Lin3DRectangularTube.hpp:180
Eigen::VectorXd GetStrainAt(double x3=0, double x2=0)
Returns the section strain at given position.
void ReverseState()
Reverse the section states to previous converged state.
double b
Total width.
Definition: Lin3DRectangularTube.hpp:165
void InitialState()
Brings the section states to its initial state.
~Lin3DRectangularTube()
Destroys this Lin3DRectangularTube object.
Eigen::VectorXd GetStrain()
Returns the resultant (generalised) strain vector over the section.
double h
Total height.
Definition: Lin3DRectangularTube.hpp:162
Eigen::MatrixXd GetInitialTangentStiffness()
Returns the section initial stiffness matrix.
double Theta
Rotation angle.
Definition: Lin3DRectangularTube.hpp:174