InelasticYS2DGNL.h

Go to the documentation of this file.
00001 #ifndef INELASTICYS2DGNL_H
00002 #define INELASTICYS2DGNL_H
00003 
00004 #include <UpdatedLagrangianBeam2D.h>
00005 #include <YieldSurface_BC.h>
00006 #include <Vector.h>
00007 
00008 #define DISPLAY_YS 2745
00009 
00015 class InelasticYS2DGNL : public UpdatedLagrangianBeam2D
00016 {
00017  public:
00018   InelasticYS2DGNL(int tag, 
00019                    int Nd1, int Nd2,
00020                    YieldSurface_BC *ysEnd1, YieldSurface_BC *ysEnd2,
00021                    int rf_algo = -1, // updated
00022                    bool islinear = false, double rho = 0.0);
00023   
00024   ~InelasticYS2DGNL();
00025   
00026   virtual const         Vector &getResistingForce(void);
00027   virtual const Matrix &getTangentStiff(void);
00028   virtual int           commitState(void);
00029   virtual int           update(void);
00030   virtual int displaySelf(Renderer &theViewer, int displayMode, float fact);
00031   void Print(OPS_Stream &s, int flag =0);
00032   int sendSelf(int commitTag, Channel &theChannel);
00033   int recvSelf(int commitTag, Channel &theChannel, FEM_ObjectBroker &theBroker);
00034   //    void createView(char *title, WindowManager *theWM, char displaytype);
00035 
00036   void createView(char *title, double scale, int x, int y, int cx, int cy, char displaytype = 'l');
00037 
00038         virtual Response *setResponse(const char **argv, int argc,
00039                                                                         Information &eleInformation);
00040         virtual int getResponse(int responseID, Information &eleInformation);
00041 
00042  protected:
00043   virtual void getLocalStiff(Matrix &K) = 0;
00044   virtual void getLocalMass(Matrix &M);
00045   
00046 protected:
00047   int  computeTrueEleForce(Vector &trial_force);
00048   void checkSpecialCases(void);
00049  
00050 private: 
00051   void forceBalance(Vector &force, int algo);
00052   void plastifyOneEnd(int end, YieldSurface_BC *ys,  Vector &trial_force,
00053                       Vector &incrDisp, Matrix &K, Vector &total_force, int algo);
00054   
00055   void splitStep(int end_shoot, YieldSurface_BC *ys_shoots, YieldSurface_BC *ys_drifts,
00056                  Vector &trial_force, Matrix &K, Vector &total_force);
00057   
00058   void driftOneEnd(YieldSurface_BC *ys, Vector &trial_force, Vector &surface_force,
00059                    Matrix &K, Vector &total_force);
00060   
00061   void driftBothEnds(Vector &trial_force, Vector &surface_force,
00062                      Matrix &K, Vector &total_force);
00063   
00064   void plastifyBothEnds(Vector &trial_force, Vector &incrDisp,
00065                         Matrix &K, Vector &total_force);
00066   void checkEndStatus(bool &end1drifts, bool &end2drifts, Vector &trialForce);
00067   int  plasticPredictor(Vector &trialForce);
00068   int  elasticCorrector(Vector &trialForce, int algo);
00069   
00070  protected:
00071   static Vector elasticForce;
00072   static Vector F1, F2, Fs;
00073   
00074 
00075   YieldSurface_BC *ys1, *ys2;
00076   char displayType;
00077   Renderer *pView;
00078   ColorMap *theMap;
00079 
00080   bool end1Plastify, end2Plastify;
00081   bool end1Plastify_hist, end2Plastify_hist;
00082 
00083   Matrix end1G, end2G;
00084   Matrix Stiff;
00085   int  forceRecoveryAlgo, forceRecoveryAlgo_orig;
00086   bool end1Damage, end2Damage;
00087   bool split_step;
00088 
00089   int debug, fdebug, pdebug, ydebug, statusDebug;
00090   bool init;
00091   bool updateKt;
00092 
00093 
00094   
00095   const static int INSIDE, OUTSIDE, WITHIN;
00096   
00097   static double storage;
00098 };
00099 
00100 #endif

Generated on Mon Oct 23 15:05:11 2006 for OpenSees by doxygen 1.5.0