00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026 #ifndef Newmark_h
00027 #define Newmark_h
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041 #include <TransientIntegrator.h>
00042
00043 #include <DOF_Group.h>
00044 #include <FE_Element.h>
00045 #include <Vector.h>
00046
00118 class Newmark : public TransientIntegrator
00119 {
00120 public:
00128 Newmark();
00129
00136 Newmark(double gamma, double beta, bool disp = true);
00137
00147 Newmark(double gamma, double beta, double alphaM, double betaKcurrent,
00148
00149 double betaKinit, double betaKlastCommit, bool disp = true);
00153 ~Newmark();
00154
00155
00157 virtual int formEleResidual(FE_Element *theEle);
00159 virtual int formNodUnbalance(DOF_Group *theDof);
00160
00161
00162
00164
00166
00167
00169 int domainChanged(void);
00171 int initialize(void);
00173 int newStep(double deltaT);
00175 int revertToLastStep(void);
00177 int update(const Vector &deltaU);
00178
00180 virtual int sendSelf(int commitTag, Channel &theChannel);
00182 virtual int recvSelf(int commitTag, Channel &theChannel,
00183 FEM_ObjectBroker &theBroker);
00184
00186 void Print(ostream &s, int flag =0);
00187
00188 protected:
00189
00190 private:
00192 bool displ;
00193 double gamma;
00195 double beta;
00197 bool rayleighDamping;
00198
00200 double alphaM, betaK, betaKi, betaKc;
00201
00202 double c1, c2, c3;
00203 Vector *Ut, *Utdot, *Utdotdot;
00204 Vector *U, *Udot, *Udotdot;
00205 bool determiningMass;
00206 };
00207
00208 #endif
00209
00210
00211