xc
URDDamping.h
1 /* ****************************************************************** **
2 ** OpenSees - Open System for Earthquake Engineering Simulation **
3 ** Pacific Earthquake Engineering Research Center **
4 ** **
5 ** **
6 ** (C) Copyright 1999, The Regents of the University of California **
7 ** All Rights Reserved. **
8 ** **
9 ** Commercial use of this program without express permission of the **
10 ** University of California, Berkeley, is strictly prohibited. See **
11 ** file 'COPYRIGHT' in main directory for information on usage and **
12 ** redistribution, and for a DISCLAIMER OF ALL WARRANTIES. **
13 ** **
14 ** Developed by: **
15 ** Frank McKenna (fmckenna@ce.berkeley.edu) **
16 ** Gregory L. Fenves (fenves@ce.berkeley.edu) **
17 ** Filip C. Filippou (filippou@ce.berkeley.edu) **
18 ** **
19 ** ****************************************************************** */
20 
21 // $Revision: 1.0 $
22 // $Date: 2021-07-02 14:29:01 $
23 // $Source: /usr/local/cvs/OpenSees/SRC/damping/URDDamping.h,v $
24 
25 // Revised by: Y Tian
26 // Created: 02/2020
27 // Revision: A
28 //
29 // Description: This file contains the definition for the URDDamping class.
30 // URDDamping provides the abstraction of an elemental damping imposition
31 // providing user-defined damping over a frequency range
32 //
33 // Reference:
34 //
35 
36 // What: "@(#) URDDamping.h, revA"
37 
38 #ifndef URDDamping_h
39 #define URDDamping_h
40 
41 #include "UDampingBase.h"
42 #include "utility/matrix/Matrix.h"
43 #include <tuple>
44 
45 namespace XC {
46 
47 class URDDamping: public UDampingBase
48  {
49  private:
50  // internal data
51  int numfreq, prttag, maxiter;
52  double dptol;
53  Vector alpha, omegaetaf;
54  Vector Freqlog, Fredif, Freqk, Freqb;
55  Matrix etaFreq;
56 
57  std::tuple<int, int> compute_count_freq(int numfreq, const double &df, Vector &);
58  bool computeErrorA(const int &, const double &, const double &, const Vector &, const double &, const double &) const;
59  bool computeErrorB(const double &) const;
60  protected:
61  int sendData(Communicator &);
62  int recvData(const Communicator &);
63  public:
64  URDDamping(int tag, int numfreq, const Matrix &etaFreq, double dptol, double ta, double td, TimeSeries *fac, int prttag, int maxiter);
65  URDDamping(int tag, int numfreq, const Matrix &etaFreq, double dptol, double ta, double td, TimeSeries *fac, int nFilter, const Vector &alpha, const Vector &omegac, const Vector &omegaetaf, int prttag, int maxiter);
66 
67  URDDamping();
68 
69  int Initialize(void);
70 
71  int update(const Vector &q);
72 
73  double getStiffnessMultiplier(void) const;
74 
75  Damping *getCopy(void) const;
76 
77  int sendSelf(Communicator &);
78  int recvSelf(const Communicator &);
79 
80  void Print(std::ostream &s, int flag = 0);
81  };
82 } // end of XC namespace
83 
84 #endif
int recvSelf(const Communicator &)
Receives object through the communicator argument.
Definition: URDDamping.cpp:536
Float vector abstraction.
Definition: Vector.h:94
Communication parameters between processes.
Definition: Communicator.h:66
int sendSelf(Communicator &)
Sends object through the communicator argument.
Definition: URDDamping.cpp:520
Definition: URDDamping.h:47
Damping * getCopy(void) const
Virtual constructor.
Definition: URDDamping.cpp:484
Base class for user-defined and uniform damings.
Definition: UDampingBase.h:87
int sendData(Communicator &)
Send object members through the communicator argument.
Definition: URDDamping.cpp:488
int recvData(const Communicator &)
Receives object members through the communicator argument.
Definition: URDDamping.cpp:504
TimeSeries * fac
damping variation in time.
Definition: Damping.h:87
Definition: Damping.h:83
Open source finite element program for structural analysis.
Definition: ContinuaReprComponent.h:35
Time variation of loads.
Definition: TimeSeries.h:85
Matrix of floats.
Definition: Matrix.h:111