xc
|
HHT is an algorithmic class for performing a transient analysis using the Hilber-Hughes-Taylor integration scheme. More...
#include <HHT.h>
Public Member Functions | |
int | formEleTangent (FE_Element *theEle) |
This tangent for each FE_Element is defined to be \(K_e = c1\alpha K //! + c2\alpha D + c3 M\), where c1,c2 and c3 were determined in the last invocation of the newStep() method. More... | |
int | formNodTangent (DOF_Group *theDof) |
This performs the following: {tabbing} while \= + while \= while \= if (RayleighDamping == false) + theDof- \(>\)addMtoTang(c3) - else + theDof- \(>\)addMtoTang(c3 + c2 * \(\alpha_M\)) - {tabbing}. | |
int | domainChanged (void) |
If the size of the LinearSOE has changed, the object deletes any old Vectors created and then creates \(8\) new Vector objects of size equal to {theLinearSOE- \(>\)getNumEqn()}. More... | |
int | newStep (double deltaT) |
The following are performed when this method is invoked: {enumerate} First sets the values of the three constants {c1}, {c2} and {c3}, {c1} is set to \(1.0\), {c2} to \( //! \gamma / (\beta * \Delta t)\) and {c3} to \(1/ (\beta * \Delta t^2)\). More... | |
int | revertToLastStep (void) |
int | update (const Vector &deltaU) |
Invoked this first causes the object to increment the DOF_Group response quantities at time \(t + \Delta t\). More... | |
int | commit (void) |
First the response quantities at the DOF_Group objects are updated with the new approximations by invoking setResponse() on the AnalysisModel with displacement, velocity and accelerations at time \(t + //! \Delta t\). More... | |
virtual int | sendSelf (Communicator &) |
Send object through the communicator argument. | |
virtual int | recvSelf (const Communicator &) |
Receives object through the communicator argument. | |
void | Print (std::ostream &s, int flag=0) const |
The object sends to \(s\) its type, the current time, \(\alpha\), \(\gamma\) and \(\beta\). More... | |
![]() | |
void | Print (std::ostream &s, int flag=0) const |
Protected Member Functions | |
int | sendData (Communicator &) |
Send object members through the communicator argument. | |
int | recvData (const Communicator &) |
Receives object members through the communicator argument. | |
HHT (SolutionStrategy *) | |
Constructor. More... | |
HHT (SolutionStrategy *, double alpha) | |
Constructor. More... | |
HHT (SolutionStrategy *, double alpha, const RayleighDampingFactors &rF) | |
Constructor. More... | |
HHT (SolutionStrategy *, double alpha, double beta, double gamma) | |
Constructor. More... | |
HHT (SolutionStrategy *, double alpha, double beta, double gamma, const RayleighDampingFactors &) | |
Constructor. More... | |
Integrator * | getCopy (void) const |
![]() | |
int | sendData (Communicator &) |
Send object members through the communicator argument. | |
int | recvData (const Communicator &) |
Receives object members through the communicator argument. | |
HHTBase (SolutionStrategy *, int classTag) | |
Constructor. More... | |
HHTBase (SolutionStrategy *, int classTag, double alpha) | |
Constructor. More... | |
HHTBase (SolutionStrategy *, int classTag, double alpha, const RayleighDampingFactors &rF) | |
Constructor. More... | |
HHTBase (SolutionStrategy *, int classTag, double alpha, double beta, double gamma) | |
Constructor. More... | |
HHTBase (SolutionStrategy *, int classTag, double alpha, double beta, double gamma, const RayleighDampingFactors &rF) | |
Constructor. More... | |
![]() | |
int | sendData (Communicator &) |
Send object members through the communicator argument. | |
int | recvData (const Communicator &) |
Receives object members through the communicator argument. | |
HHTRayleighBase (SolutionStrategy *, int classTag) | |
Constructor. More... | |
HHTRayleighBase (SolutionStrategy *, int classTag, double alpha) | |
Constructor. More... | |
HHTRayleighBase (SolutionStrategy *, int classTag, double alpha, const RayleighDampingFactors &rF) | |
Constructor. More... | |
HHTRayleighBase (SolutionStrategy *, int classTag, double alpha, double gamma) | |
Constructor. More... | |
HHTRayleighBase (SolutionStrategy *, int classTag, double alpha, double gamma, const RayleighDampingFactors &rF) | |
Constructor. More... | |
![]() | |
int | sendData (Communicator &) |
Send object members through the communicator argument. | |
int | recvData (const Communicator &) |
Receives object members through the communicator argument. | |
RayleighBase (SolutionStrategy *, int classTag) | |
Constructor. More... | |
RayleighBase (SolutionStrategy *, int classTag, const RayleighDampingFactors &) | |
Constructor. More... | |
![]() | |
void | setRayleighDampingFactors (void) |
int | sendData (Communicator &) |
Send object members through the communicator argument. | |
int | recvData (const Communicator &) |
Receives object members through the communicator argument. | |
DampingFactorsIntegrator (SolutionStrategy *, int classTag) | |
Constructor. More... | |
DampingFactorsIntegrator (SolutionStrategy *, int classTag, const RayleighDampingFactors &rF) | |
Constructor. More... | |
Friends | |
class | SolutionStrategy |
class | FEM_ObjectBroker |
Additional Inherited Members | |
![]() | |
double | beta |
double | c1 |
parameter More... | |
![]() | |
double | alpha |
should be between 0.67 and 1.0 (alpha factor corresponds to Newmark method. More... | |
double | gamma |
factor. | |
double | c2 |
double | c3 |
ResponseQuantities | Ut |
response quantities at time t | |
ResponseQuantities | U |
response quantities at time t + delta t | |
ResponseQuantities | Ualpha |
response quantities at time t+alpha delta t | |
![]() | |
double | deltaT |
![]() | |
RayleighDampingFactors | rayFactors |
Rayleigh damping factors. | |
HHT is an algorithmic class for performing a transient analysis using the Hilber-Hughes-Taylor integration scheme.
HHT is a subclass of TransientIntegrator which implements the Hilber-Hughes-Taylor (HHT) method. In the HHT method, to determine the velocities, accelerations and displacements at time \(t + \Delta t\), by solving the following equilibrium equation.
{ Description}
[ R (U_{t + t}) = P(t + t) - F_I(Udd_{t+ t}) - F_R(Ud_{t + t},U_{t + t}) ]
where
[ U_{t + } = ( 1 - ) U_t + U_{t + t} ]
[ Ud_{t + } = ( 1 - ) Ud_t + Ud_{t + t} ]
and the velocities and accelerations at time \(t + \Delta t\) are determined using the Newmark relations. The HHT method results in the following for determining the response at \(t + \Delta t\)
[ [ {1}{ t^2} M + { }{ t} C + K ] U_{t + t}^{(i)} = P(t
|
protected |
Constructor.
owr | analysis aggregation that will own this object. |
|
protected |
Constructor.
owr | analysis aggregation that will own this object. |
|
protected |
Constructor.
Sets \(\alpha\) to alpha
, \(\gamma\) to \((1.5 - \alpha)\) and \(\beta\) to \(0.25*\alpha^2\).
owr | analysis aggregation that will own this object. |
rF | value of the Rayleigh damping factors. |
|
protected |
Constructor.
owr | analysis aggregation that will own this object. |
_alpha | value for the alpha parameter. |
_beta | value for the beta parameter. |
_gamma | value for the gamma parameter. |
|
protected |
Constructor.
owr | analysis aggregation that will own this object. |
_alpha | value for the alpha parameter. |
_beta | value for the beta parameter. |
_gamma | value for the gamma parameter. |
rF | value of the Rayleigh damping factors. |
int XC::HHT::commit | ( | void | ) |
First the response quantities at the DOF_Group objects are updated with the new approximations by invoking setResponse() on the AnalysisModel with displacement, velocity and accelerations at time \(t + //! \Delta t\).
Finally updateDomain()} and {commitDomain() are invoked on the AnalysisModel. Returns \(0\) if successful, a warning message and a negative number if not: \(-1\) if no AnalysisModel associated with the object and \(-2\) if commitDomain() failed.
int XC::HHT::domainChanged | ( | void | ) |
If the size of the LinearSOE has changed, the object deletes any old Vectors created and then creates \(8\) new Vector objects of size equal to {theLinearSOE- \(>\)getNumEqn()}.
There is a Vector object created to store the current displacement, velocity and accelerations at times \(t\) and \(t + \Delta t\), and the displacement and velocity at time \(t + \alpha //! \Delta t\). The response quantities at time \(t + \Delta t\) are then set by iterating over the DOF_Group objects in the model and obtaining their committed values. Returns \(0\) if successful, otherwise a warning message and a negative number is returned: \(-1\) if no memory was available for constructing the Vectors.
NOTE WE CAN't DO TOGETHER BECAUSE DOF_GROUPS USING SINGLE VECTOR ****** for (int i=0; i < id.Size(); i++) { int loc = id(i); if (loc >= 0) { (*U)(loc) = disp(i); (U.getDot())(loc) = vel(i); (U.getDotDot())(loc) = accel(i); } }
int XC::HHT::formEleTangent | ( | FE_Element * | theEle | ) |
This tangent for each FE_Element is defined to be \(K_e = c1\alpha K //! + c2\alpha D + c3 M\), where c1,c2 and c3 were determined in the last invocation of the newStep() method.
Returns \(0\) after performing the following operations: {tabbing} while \= + while \= while \= if (RayleighDamping == false) + theEle- \(>\)zeroTang() theEle- \(>\)addKtoTang(c1) theEle- \(>\)addCtoTang(c2) theEle- \(>\)addMtoTang(c3) - theEle- \(>\)zeroTang() theEle- \(>\)addKtoTang(c1 + c2 * \(\beta_K\)) theEle- \(>\)addMtoTang(c3 + c2 * \(\alpha_M\)) - {tabbing}
int XC::HHT::newStep | ( | double | _deltaT | ) |
The following are performed when this method is invoked: {enumerate} First sets the values of the three constants {c1}, {c2} and {c3}, {c1} is set to \(1.0\), {c2} to \( //! \gamma / (\beta * \Delta t)\) and {c3} to \(1/ (\beta * \Delta t^2)\).
Then the Vectors for response quantities at time \(t\) are set equal to those at time \(t + \Delta t\). {tabbing} while \= while \= while \= while \= >> \( U_t = U_{t + \Delta t}\) >> \( Ud_t = Ud_{t + \Delta t} \) >> \( Udd_t = Udd_{t + \Delta t} \) {tabbing} Then the velocity and accelerations approximations at time \(t + //! \Delta t\) and the displacement and velocity at time \(t + \alpha \Delta t\) are set using the difference approximations. {tabbing} while \= while \= while \= while \= >> \( U_{t + \alpha \Delta t} = U_t\) >> \( \dot U_{t + \Delta t} = //! \left( 1 - \frac{\gamma}{\beta}\right) \dot U_t + \Delta t \left(1 //! - \frac{\gamma}{2 \beta}\right) \ddot U_t \) >> \( Ud_{t + \alpha \Delta t} = (1 - \alpha) Ud_t + \alpha Ud_{t + //! \Delta t}\) >> \( \ddot U_{t + \Delta t} = //! - \frac{1}{\beta \Delta t} \dot U_t + \left( 1 - \frac{1}{2 //! \beta} \right) \ddot U_t \) >> theModel- \(>\)setResponse \((U_{t + \alpha \Delta t}, Ud_{t+\alpha //! \Delta t}, Udd_{t+\Delta t})\) {tabbing} The response quantities at the DOF_Group objects are updated with the new approximations by invoking setResponse() on the AnalysisModel with displacements and velocities at time \(t + \alpha //! \Delta t\) and the accelerations at time \(t + \Delta t\). {tabbing} while \= while \= while \= while \= >> theModel- \(>\)setResponse \((U_{t + \alpha \Delta t}, Ud_{t+\alpha //! \Delta t}, Udd_{t+\Delta t})\) {tabbing} current time is obtained from the AnalysisModel, incremented by \(\Delta t\), and {applyLoad(time, 1.0)} is invoked on the AnalysisModel. Finally updateDomain() is invoked on the AnalysisModel. {enumerate} The method returns \(0\) if successful, otherwise a negative number is returned: \(-1\) if \(\gamma\) or \(\beta\) are \(0\), \(-2\) if dispFlag
was true and \(\Delta t\) is \(0\), and \(-3\) if domainChanged() failed or has not been called.
void XC::HHT::Print | ( | std::ostream & | s, |
int | flag = 0 |
||
) | const |
The object sends to \(s\) its type, the current time, \(\alpha\), \(\gamma\) and \(\beta\).
If Rayleigh damping is specified, the constants \(\alpha_M\) and \(\beta_K\) are also printed.
int XC::HHT::update | ( | const Vector & | deltaU | ) |
Invoked this first causes the object to increment the DOF_Group response quantities at time \(t + \Delta t\).
The displacement Vector is incremented by \( c1 * \Delta U\), the velocity Vector by \( //! c2 * \Delta U\), and the acceleration Vector by \(c3 * \Delta U\). The displacement Vector at time \(t + \alpha \Delta t\) is incremented by \(c1 \alpha \Delta U\) and the velocity Vector by \(c2 \alpha //! \Delta U\). The response quantities at the DOF_Group objects are then updated with the new approximations by invoking setResponse() on the AnalysisModel with displacement and velocity at time \(t + \alpha //! \Delta t\) and the accelerations at time \(t + \Delta t\). Finally updateDomain() is invoked on the AnalysisModel. {tabbing} while \= + while \= while \= >> \( U_{t + \Delta t} += \Delta U\) >> \( \dot U_{t + \Delta t} += \frac{\gamma}{\beta \Delta t} \Delta U \) >> \( \ddot U_{t + \Delta t} += \frac{1}{\beta {\Delta t}^2} \Delta U \) >> \( U_{t + \alpha \Delta t} += \alpha \Delta U \) >> \( Ud_{t + \alpha \Delta t} += \frac{\alpha \gamma}{\beta \Delta t} //! \Delta U \) >> theModel- \(>\)setResponse \((U_{t + \alpha \Delta t}, Ud_{t+\alpha //! \Delta t}, Udd_{t+\Delta t})\) >> theModel- \(>\)updateDomain() {tabbing} Returns \(0\) if successful. A warning message is printed and a negative number returned if an error occurs: \(-1\) if no associated AnalysisModel, \(-2\) if the Vector objects have not been created, \(-3\) if the Vector objects and \(\Delta U\) are of different sizes.