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 fElement_h
00027 #define fElement_h
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040 #include <Element.h>
00041 #include <Matrix.h>
00042
00043 class Node;
00044 class Channel;
00045 class UniaxialMaterial;
00046
00047 class fElement : public Element
00048 {
00049 public:
00050
00051 fElement(int tag,
00052 int classTag,
00053 int eleType,
00054 int sizeD, int nen,
00055 int ndm, int ndf,
00056 int nh1, int nh3);
00057
00058 fElement(int tag,
00059 int classTag,
00060 int eleType,
00061 int sizeD, int nen,
00062 int ndm, int ndf, int iow);
00063
00064 fElement(int classTag);
00065
00066
00067 virtual ~fElement();
00068
00069
00070 virtual int getNumExternalNodes(void) const;
00071 virtual const ID &getExternalNodes(void);
00072 Node **getNodePtrs(void);
00073
00074 virtual int getNumDOF(void);
00075 virtual void setDomain(Domain *theDomain);
00076
00077 virtual int commitState(void);
00078 virtual int revertToLastCommit(void);
00079 virtual int revertToStart(void);
00080 virtual int update(void);
00081
00082 virtual const Matrix &getTangentStiff(void);
00083 const Matrix &getInitialStiff(void);
00084 virtual const Matrix &getDamp(void);
00085 virtual const Matrix &getMass(void);
00086
00087 virtual void zeroLoad(void);
00088 virtual int addLoad(ElementalLoad *theLoad, double loadFactor);
00089 virtual int addInertiaLoadToUnbalance(const Vector &accel);
00090
00091 virtual const Vector &getResistingForce(void);
00092 virtual const Vector &getResistingForceIncInertia(void);
00093
00094
00095 virtual int sendSelf(int commitTag, Channel &theChannel);
00096 virtual int recvSelf(int commitTag, Channel &theChannel,
00097 FEM_ObjectBroker &theBroker);
00098 virtual int displaySelf(Renderer &theViewer, int displayMode, float fact);
00099 virtual void Print(OPS_Stream &s, int flag =0);
00100
00101 protected:
00102
00103 virtual int invokefRoutine(int ior, int iow, double *ctan, int isw);
00104 virtual int readyfRoutine(bool incInertia);
00105 virtual int invokefInit(int isw, int iow);
00106
00107
00108 Vector *data;
00109 ID *connectedNodes;
00110
00111 private:
00112
00113 double *h;
00114 Node **theNodes;
00115 double *u;
00116 double *d;
00117 int eleType;
00118 int ndf;
00119 int nen;
00120 int ndm;
00121 int nh1, nh3;
00122 int nrCount;
00123
00124 Vector *theLoad;
00125 Matrix *Ki;
00126
00127
00128 static Matrix **fElementM;
00129 static Vector **fElementV;
00130 static double *s;
00131 static double *r;
00132 static double *ul;
00133 static double *xl;
00134 static double *tl;
00135 static int *ix;
00136 static int numfElements;
00137 };
00138
00139 #endif
00140
00141
00142
00143