Seismo-VLAB  1.3
An Open-Source Finite Element Software for Meso-Scale Simulations
Lin3DUserDefined.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 _LIN3DUSERDEFINED_HPP_
33 #define _LIN3DUSERDEFINED_HPP_
34 
35 #include <vector>
36 #include <string>
37 #include <memory>
38 #include <Eigen/Dense>
39 
40 #include "Section.hpp"
41 #include "Material.hpp"
42 
50 class Lin3DUserDefined : public Section{
51 
52  public:
59  Lin3DUserDefined(std::vector<double> properties, std::unique_ptr<Material> &material, double theta=0.0);
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  private:
122  double A;
123 
125  double As2;
126 
128  double As3;
129 
131  double J;
132 
134  double I22;
135 
137  double I33;
138 
140  double I23;
141 
143  double Theta;
144 
146  Eigen::VectorXd Strain;
147 
149  std::unique_ptr<Material> theMaterial;
150 };
151 
152 #endif
double I33
Inertia 3-axis.
Definition: Lin3DUserDefined.hpp:137
void CommitState()
Perform converged section state update.
double A
Area.
Definition: Lin3DUserDefined.hpp:122
double As3
Shear area 3-axis.
Definition: Lin3DUserDefined.hpp:128
void UpdateState(const Eigen::VectorXd strain, const unsigned int cond)
Update the section state for this iteration.
Eigen::MatrixXd GetDensity()
Access the section density matrix.
Class for creating a general solid section for 3D analysis with linear elastic material for a frame e...
Definition: Lin3DUserDefined.hpp:50
Virtual class for creating a section object.
Definition: Section.hpp:45
Eigen::VectorXd Strain
Generalized Strain vector.
Definition: Lin3DUserDefined.hpp:146
void InitialState()
Brings the section states to its initial state.
Eigen::MatrixXd GetTangentStiffness()
Returns the section stiffness matrix.
This file contains the abstract "Material object" declarations, which computes the strain...
double J
Polar Inertia 1-axis.
Definition: Lin3DUserDefined.hpp:131
double As2
Shear area 2-axis.
Definition: Lin3DUserDefined.hpp:125
This file contains the abstract "Section object" declarations, which computes the strain...
~Lin3DUserDefined()
Destroys this Lin3DUserDefined object.
std::unique_ptr< Material > theMaterial
The section&#39;s material.
Definition: Lin3DUserDefined.hpp:149
double I23
Product of Inertia.
Definition: Lin3DUserDefined.hpp:140
Eigen::VectorXd GetStress()
Returns the resultant (generalised) stress vector over the section.
Eigen::MatrixXd GetInitialTangentStiffness()
Returns the section initial stiffness matrix.
std::unique_ptr< Section > CopySection()
Clone the &#39;Lin3DUserDefined&#39; section.
double I22
Inertia 2-axis.
Definition: Lin3DUserDefined.hpp:134
void ReverseState()
Reverse the section states to previous converged state.
Lin3DUserDefined(std::vector< double > properties, std::unique_ptr< Material > &material, double theta=0.0)
Creates a Section to be specified at a Gauss-point in an Element.
double Theta
Rotation angle.
Definition: Lin3DUserDefined.hpp:143
Eigen::VectorXd GetStrainAt(double x3=0, double x2=0)
Returns the section strain at given position.
Eigen::VectorXd GetStrain()
Returns the resultant (generalised) strain vector over the section.
Eigen::VectorXd GetStressAt(double x3=0, double x2=0)
Returns the section stress at given position.