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
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037 #ifndef Element_h
00038 #define Element_h
00039
00040 #ifndef _bool_h
00041 #include "bool.h"
00042 #endif
00043
00044 #include <ID.h>
00045
00046 #include <DomainComponent.h>
00047
00048 class Matrix;
00049 class Vector;
00050 class Renderer;
00051 class Info;
00052 class Information;
00053 class Response;
00054 class ElementalLoad;
00055 class Node;
00056
00057 class Element : public DomainComponent
00058 {
00059 public:
00060 Element(int tag, int classTag);
00061 virtual ~Element();
00062
00063
00064 virtual int getNumExternalNodes(void) const =0;
00065 virtual const ID &getExternalNodes(void) =0;
00066 virtual Node **getNodePtrs(void) =0;
00067 virtual int getNumDOF(void) =0;
00068
00069
00070 virtual int commitState(void);
00071 virtual int revertToLastCommit(void) = 0;
00072 virtual int revertToStart(void);
00073 virtual int update(void);
00074 virtual bool isSubdomain(void);
00075
00076
00077
00078 virtual const Matrix &getTangentStiff(void) =0;
00079 virtual const Matrix &getInitialStiff(void) =0;
00080 virtual const Matrix &getDamp(void);
00081 virtual const Matrix &getMass(void);
00082
00083
00084 virtual void zeroLoad(void) =0;
00085 virtual int addLoad(ElementalLoad *theLoad, double loadFactor) =0;
00086 virtual int addInertiaLoadToUnbalance(const Vector &accel) =0;
00087 virtual int setRayleighDampingFactors(double alphaM, double betaK, double betaK0, double betaKc);
00088
00089
00090 virtual const Vector &getResistingForce(void) =0;
00091 virtual const Vector &getResistingForceIncInertia(void);
00092
00093
00094 virtual Response *setResponse(const char **argv, int argc,
00095 Information &eleInformation,
00096 OPS_Stream &theHandler);
00097 virtual int getResponse(int responseID, Information &eleInformation);
00098 virtual int getResponseSensitivity(int responseID, int gradNumber,
00099 Information &eleInformation);
00100
00101
00102 virtual int addInertiaLoadSensitivityToUnbalance(const Vector &accel, bool tag);
00103 virtual const Vector & getResistingForceSensitivity(int gradNumber);
00104 virtual const Matrix & getInitialStiffSensitivity(int gradNumber);
00105 virtual const Matrix & getDampSensitivity(int gradNumber);
00106 virtual const Matrix & getMassSensitivity(int gradNumber);
00107 virtual int commitSensitivity(int gradNumber, int numGrads);
00108
00109
00110 virtual int addResistingForceToNodalReaction(bool inclInertia);
00111
00112 protected:
00113 const Vector &getRayleighDampingForces(void);
00114
00115 double alphaM, betaK, betaK0, betaKc;
00116 Matrix *Kc;
00117
00118 private:
00119 int index, nodeIndex;
00120
00121 static Matrix ** theMatrices;
00122 static Vector ** theVectors1;
00123 static Vector ** theVectors2;
00124 static int numMatrices;
00125 };
00126
00127
00128 #endif
00129