Seismo-VLAB  1.3
An Open-Source Finite Element Software for Meso-Scale Simulations
HDRBYamamoto2DLink.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] Yamamoto, Minewaki, Yoneda, and Higashino (2012), Nonlinear behavior of
25 // high-damping rubber bearings under horizontal bidirectional loading:
26 // full-scale tests and analytical modeling. Earthquake Engng Struct. Dyn
27 //
28 // Description:
31 //------------------------------------------------------------------------------
32 
33 #ifndef _HDRBYAMAMOTO2DLINK_HPP_
34 #define _HDRBYAMAMOTO2DLINK_HPP_
35 
36 #include <map>
37 #include <memory>
38 #include <string>
39 #include <Eigen/Dense>
40 
41 #include "Node.hpp"
42 #include "Load.hpp"
43 #include "Material.hpp"
44 #include "Element.hpp"
45 #include "Damping.hpp"
46 
54 class HDRBYamamoto2DLink : public Element{
55 
56  public:
65  HDRBYamamoto2DLink(const std::vector<unsigned int> nodes, double de, double di, double hr, unsigned int dim);
66 
69 
72  void CommitState();
73 
76  void ReverseState();
77 
80  void InitialState();
81 
84  void UpdateState();
85 
90  void SetDomain(std::map<unsigned int, std::shared_ptr<Node> > &nodes);
91 
95  void SetDamping(const std::shared_ptr<Damping> &damping);
96 
99  std::vector<unsigned int> GetTotalDegreeOfFreedom() const;
100 
104  Eigen::MatrixXd GetStrain() const;
105 
109  Eigen::MatrixXd GetStress() const;
110 
114  Eigen::MatrixXd GetStrainRate() const;
115 
121  Eigen::MatrixXd GetStrainAt(double x3, double x2) const;
122 
128  Eigen::MatrixXd GetStressAt(double x3, double x2) const;
129 
134  Eigen::VectorXd GetVTKResponse(std::string response) const;
135 
138  double ComputeEnergy();
139 
144  Eigen::MatrixXd ComputeMassMatrix();
145 
150  Eigen::MatrixXd ComputeStiffnessMatrix();
151 
156  Eigen::MatrixXd ComputeDampingMatrix();
157 
162  Eigen::MatrixXd ComputePMLMatrix();
163 
168  Eigen::VectorXd ComputeInternalForces();
169 
174  Eigen::VectorXd ComputeInternalDynamicForces();
175 
182  Eigen::VectorXd ComputeSurfaceForces(const std::shared_ptr<Load> &surface, unsigned int face);
183 
190  Eigen::VectorXd ComputeBodyForces(const std::shared_ptr<Load> &body, unsigned int k=0);
191 
198  Eigen::VectorXd ComputeDomainReductionForces(const std::shared_ptr<Load> &drm, unsigned int k);
199 
200  private:
202  double n;
203 
205  double alpha;
206 
208  double Ar;
209 
211  double Hr;
212 
214  double Krb;
215 
217  double cr;
218 
220  double cs;
221 
223  unsigned int Dimension;
224 
226  unsigned int nMax;
227 
229  Eigen::VectorXd Pn;
230 
232  Eigen::VectorXd Qn;
233 
235  Eigen::VectorXd Fn;
236 
238  Eigen::VectorXd Fc;
239 
241  Eigen::VectorXd Paux;
242 
244  Eigen::VectorXd Qaux;
245 
247  std::vector<std::shared_ptr<Node> > theNodes;
248 
251  Eigen::VectorXd ComputeRelativeDeformation() const;
252 
256  Eigen::MatrixXd ComputeLocalAxes() const;
257 
261  Eigen::MatrixXd ComputeRotationMatrix() const;
262 };
263 
264 #endif
This file contains the "Load" class declarations, which defines a load that can act in a node or an e...
This file contains the abstract "Material object" declarations, which computes the strain...
Virtual class for creating an element in a mesh.
Definition: Element.hpp:51
This file contains the "Node object" declarations, which is stores the coordinates, state variables, degrees-of-freedom, and total-degree of freedom lists of a node in a finite element mesh.
This file contains the "Damping object" declarations to update damping matrix to account for Caughey-...
This file contains the "Element" object declarations, which defines an element in a finite element me...