00001 #ifndef CyclicModel_H
00002 #define CyclicModel_H
00003
00004 #include <TaggedObject.h>
00005 #include <MovableObject.h>
00006 #include <OPS_Globals.h>
00007
00008 class CyclicModel : public TaggedObject, public MovableObject
00009 {
00010 public:
00011 CyclicModel(int tag, int classTag);
00012 ~CyclicModel();
00013
00014 int commitState(double newResidual);
00015 void update(double f, double d, bool yield);
00016 virtual CyclicModel *getCopy()=0;
00017
00018 virtual double getFactor();
00019
00020 virtual int sendSelf(int commitTag, Channel &theChannel){return -1;}
00021 virtual int recvSelf(int commitTag, Channel &theChannel,
00022 FEM_ObjectBroker &theBroker){return -1;}
00023 virtual void Print (OPS_Stream &s, int flag=0);
00024
00025 protected:
00026
00027 virtual int createFullCycleTask();
00028 virtual int createHalfCycleTask();
00029 virtual double getTaskFactor()=0;
00030
00031
00032 int setCurrent(double f, double d);
00033 int dir(double x);
00034
00035 int taskStatus(void);
00036 double rationalize(double x1, double y1, double x2, double y2);
00037 bool contains(double x1, double x2, double x);
00038
00039 private:
00040 int initNewTask();
00041
00042 protected:
00043 double resFactor;
00044 double cycFactor, cycFactor_hist;
00045 double f_hist, d_hist;
00046 double f_curr, d_curr;
00047 double delT_curr, delT_hist;
00048 double f_bgn, d_bgn;
00049 double f_end, d_end;
00050
00051 bool initYieldPos, initYieldNeg;
00052 bool initCyc;
00053 bool yielding, yielding_hist;
00054 double initFpos,initDpos;
00055 double initFneg,initDneg;
00056 double initFMag,initDMag;
00057 double k_init;
00058 double k_hist, k_curr;
00059 double fpeakPos, fpeakNeg;
00060 double dpeakPos, dpeakNeg;
00061 int state_hist, state_curr;
00062
00063 const static int Loading,Unloading, Crossover;
00064 const static double Tol, delK;
00065 };
00066
00067 #endif
00068