Seismo-VLAB  1.3
An Open-Source Finite Element Software for Meso-Scale Simulations
Lin3DAngle.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 _LIN3DANGLE_HPP_
33 #define _LIN3DANGLE_HPP_
34 
35 #include <string>
36 #include <memory>
37 #include <Eigen/Dense>
38 
39 #include "Section.hpp"
40 #include "Material.hpp"
41 
49 class Lin3DAngle : public Section{
50 
51  public:
62  Lin3DAngle(double h, double b, double tw, double tf, std::unique_ptr<Material> &material, double theta=0.0, unsigned int ip=10);
63 
65  ~Lin3DAngle();
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 
157  double GetInertiaAxis23();
158 
163  void ComputeSectionCenter(double &zcm, double &ycm);
164 
165  private:
167  double h;
168 
170  double b;
171 
173  double tw;
174 
176  double tf;
177 
179  double Theta;
180 
182  unsigned int InsertPoint;
183 
185  Eigen::VectorXd Strain;
186 
188  std::unique_ptr<Material> theMaterial;
189 };
190 
191 #endif
double tf
Flange thickness.
Definition: Lin3DAngle.hpp:176
Eigen::VectorXd GetStressAt(double x3=0, double x2=0)
Returns the section stress at given position.
Eigen::MatrixXd GetInitialTangentStiffness()
Returns the section initial stiffness matrix.
double GetInertiaAxis2()
Computes the Angle flexural inertia.
double GetInertiaAxis1()
Virtual class for creating a section object.
Definition: Section.hpp:45
unsigned int InsertPoint
Local axis coordinate.
Definition: Lin3DAngle.hpp:182
std::unique_ptr< Section > CopySection()
Clone the &#39;Lin3DAngle&#39; section.
std::unique_ptr< Material > theMaterial
The section&#39;s material.
Definition: Lin3DAngle.hpp:188
Eigen::VectorXd GetStrainAt(double x3=0, double x2=0)
Returns the section strain at given position.
This file contains the abstract "Material object" declarations, which computes the strain...
double Theta
Rotation angle.
Definition: Lin3DAngle.hpp:179
void ComputeSectionCenter(double &zcm, double &ycm)
Gets the section centroid.
This file contains the abstract "Section object" declarations, which computes the strain...
double GetInertiaAxis3()
Computes the Angle flexural inertia.
~Lin3DAngle()
Destroys this Lin3DAngle object.
double GetInertiaAxis23()
Computes the Angle product of inertia.
Eigen::VectorXd GetStress()
Returns the resultant (generalised) stress vector over the section.
void UpdateState(const Eigen::VectorXd strain, const unsigned int cond)
Update the section state for this iteration.
double b
Total width.
Definition: Lin3DAngle.hpp:170
Eigen::VectorXd GetStrain()
Returns the resultant (generalised) strain vector over the section.
double GetArea()
Computes the Angle area.
void CommitState()
Perform converged section state update.
Eigen::MatrixXd GetTangentStiffness()
Returns the section stiffness matrix.
double GetShearArea2()
Computes the Angle shear area.
Eigen::MatrixXd GetDensity()
Access the section density matrix.
double GetShearArea3()
Computes the Angle shear area.
double h
Total height.
Definition: Lin3DAngle.hpp:167
void InitialState()
Brings the section states to its initial state.
Eigen::VectorXd Strain
Generalized Strain vector.
Definition: Lin3DAngle.hpp:185
Lin3DAngle(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.
double tw
Web thickness.
Definition: Lin3DAngle.hpp:173
void ReverseState()
Reverse the section states to previous converged state.
Class for creating a angle section for 3D analysis with linear elastic material for a frame elements...
Definition: Lin3DAngle.hpp:49