Seismo-VLAB  1.3
An Open-Source Finite Element Software for Meso-Scale Simulations
UnxBoucWen3DLink.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] Bouc, R. (1971). "Mathematical model for hysteresis." Report to the Centre
25 // de Recherches Physiques, pp16-25, Marseille, France.
26 // [2] Wen, Y.-K. (1976). \Method for random vibration of hysteretic systems."
27 // Journal of Engineering Mechanics Division, 102(EM2), 249-263.
28 //
29 // Description:
32 //------------------------------------------------------------------------------
33 
34 #ifndef _UNXBOUCWEN3DLINK_HPP_
35 #define _UNXBOUCWEN3DLINK_HPP_
36 
37 #include <map>
38 #include <memory>
39 #include <string>
40 #include <Eigen/Dense>
41 
42 #include "Node.hpp"
43 #include "Load.hpp"
44 #include "Material.hpp"
45 #include "Element.hpp"
46 #include "Damping.hpp"
47 
55 class UnxBoucWen3DLink : public Element{
56 
57  public:
68  UnxBoucWen3DLink(const std::vector<unsigned int> nodes, std::vector<double> parameters, std::vector<double> variables, const unsigned int dim, const unsigned int dir, double tol=1E-06, unsigned int nmax=50);
69 
72 
75  void CommitState();
76 
79  void ReverseState();
80 
83  void InitialState();
84 
87  void UpdateState();
88 
93  void SetDomain(std::map<unsigned int, std::shared_ptr<Node> > &nodes);
94 
98  void SetDamping(const std::shared_ptr<Damping> &damping);
99 
102  std::vector<unsigned int> GetTotalDegreeOfFreedom() const;
103 
107  Eigen::MatrixXd GetStrain() const;
108 
112  Eigen::MatrixXd GetStress() const;
113 
117  Eigen::MatrixXd GetStrainRate() const;
118 
124  Eigen::MatrixXd GetStrainAt(double x3, double x2) const;
125 
131  Eigen::MatrixXd GetStressAt(double x3, double x2) const;
132 
137  Eigen::VectorXd GetVTKResponse(std::string response) const;
138 
141  double ComputeEnergy();
142 
147  Eigen::MatrixXd ComputeMassMatrix();
148 
153  Eigen::MatrixXd ComputeStiffnessMatrix();
154 
159  Eigen::MatrixXd ComputeDampingMatrix();
160 
165  Eigen::MatrixXd ComputePMLMatrix();
166 
171  Eigen::VectorXd ComputeInternalForces();
172 
177  Eigen::VectorXd ComputeInternalDynamicForces();
178 
185  Eigen::VectorXd ComputeSurfaceForces(const std::shared_ptr<Load> &surface, unsigned int face);
186 
193  Eigen::VectorXd ComputeBodyForces(const std::shared_ptr<Load> &body, unsigned int k=0);
194 
201  Eigen::VectorXd ComputeDomainReductionForces(const std::shared_ptr<Load> &drm, unsigned int k);
202 
203  private:
205  double Ko;
206 
208  double Fy;
209 
211  double alpha;
212 
214  double eta;
215 
217  double beta;
218 
220  double gamma;
221 
223  double Tol;
224 
226  double z;
227 
229  double zn;
230 
232  double U;
233 
235  double Un;
236 
238  double qbw;
239 
241  double qbc;
242 
244  double kbw;
245 
247  double kbc;
248 
250  unsigned int nMax;
251 
253  unsigned int Dimension;
254 
256  unsigned int Direction;
257 
259  std::vector<std::shared_ptr<Node> > theNodes;
260 
262  double sign(double x) const;
263 
266  Eigen::VectorXd ComputeRelativeDeformation() const;
267 
271  Eigen::MatrixXd ComputeLocalAxes() const;
272 
276  Eigen::MatrixXd ComputeRotationMatrix() const;
277 };
278 
279 #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...