00001
00002
00004
00005 #if !defined YIELDSURFACE_BC2D_H
00006 #define YIELDSURFACE_BC2D_H
00007
00008 #include "YieldSurface_BC.h"
00009 #include <UniaxialMaterial.h>
00010
00011 class YieldSurface_BC2D : public YieldSurface_BC
00012 {
00013 public:
00014 YieldSurface_BC2D(int tag, int classTag, double xmax, double ymax,
00015 YS_Evolution &model);
00016
00017 virtual ~YieldSurface_BC2D();
00018
00019
00020
00021
00022 virtual void Print(OPS_Stream &s, int flag =0)=0;
00023 virtual int sendSelf(int commitTag, Channel &theChannel){return -1;}
00024 virtual int recvSelf(int commitTag, Channel &theChannel,
00025 FEM_ObjectBroker &theBroker){return -1;}
00026
00027 virtual void setTransformation(int xDof, int yDof, int xFact, int yFact);
00028
00029 virtual void getCommitGradient(Matrix &G);
00030 virtual void getTrialGradient(Matrix &G, Vector &force);
00031
00032
00033
00034 virtual int update(int flag = 0);
00035 virtual int getState(int stateInfo);
00036 virtual double getTrialDrift(Vector &force);
00037 virtual int getTrialForceLocation(Vector &force);
00038 virtual int getCommitForceLocation();
00039
00040
00041
00042
00043
00044
00045
00046 virtual void addPlasticStiffness(Matrix &K);
00047
00048
00049 virtual double setToSurface(Vector &force, int algoType, int colorFlag = 0);
00050 virtual int modifySurface(double magPlasticDefo, Vector &Fsurface, Matrix &G, int flag=0);
00051
00052
00053
00054 virtual int commitState(Vector &force);
00055 virtual int revertToLastCommit(void);
00056
00057 virtual YieldSurface_BC *getCopy(void) = 0;
00058 virtual int displaySelf(Renderer &theViewer, int displayMode, float fact);
00059
00060 int displayCommitForcePoint(Renderer &theViewer, int displayMode, float fact);
00061 int displayForcePoint(bool toDeformed, double f_x, double f_y, int color);
00062 int displayForcePoint(Vector &force, int color = 4);
00063
00064 virtual Vector& translationTo(Vector &f_new, Vector &f_dir);
00065 virtual double getDrift(double x, double y);
00066
00067 virtual void getGradient(double &gx, double &gy, double x, double y)=0;
00068 virtual double getSurfaceDrift(double x, double y)=0;
00069 virtual void setExtent()=0;
00070 virtual const Vector &getExtent(void);
00071
00072 virtual int forceLocation(double drift);
00073 virtual double interpolate(double xi, double yi, double xj, double yj);
00074 virtual void customizeInterpolate(double &xi, double &yi, double &xj, double &yj);
00075
00076 double interpolateClose(double xi, double yi, double xj, double yj);
00077
00078
00079
00080
00081 protected:
00082
00083
00084 double xPos, xNeg, yPos, yNeg;
00085 double a1, b1, a2, b2, a3, b3, a4, b4;
00086 double offset, increment;
00087
00088
00090
00092
00093
00094
00095
00096
00097 int status_hist;
00098 int state;
00099
00100
00101 double fx_hist, fy_hist, gx_hist, gy_hist;
00102 double fx_trial, fy_trial, gx_trial, gy_trial;
00103
00104 static Vector v6;
00105 static double error;
00106 static Vector v2;
00107 static Vector g2;
00108 static Vector v4;
00109 static Vector T2;
00110 static Vector F2;
00111 public:
00112
00113
00114 };
00115
00116 #endif