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 Node_h
00027 #define Node_h
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041 #include <DomainComponent.h>
00042 class Element;
00043 class Vector;
00044 class Matrix;
00045 class Channel;
00046 class Renderer;
00047
00048 class DOF_Group;
00049
00050 class Node : public DomainComponent
00051 {
00052 public:
00053
00054 Node(int classTag);
00055 Node(int tag, int classTag);
00056 Node(int tag, int ndof, double Crd1);
00057 Node(int tag, int ndof, double Crd1, double Crd2);
00058 Node(int tag, int ndof, double Crd1, double Crd2, double Crd3);
00059 Node(const Node &theCopy, bool copyMass = true);
00060
00061
00062 virtual ~Node();
00063
00064
00065 virtual int getNumberDOF(void) const;
00066 virtual void setDOF_GroupPtr(DOF_Group *theDOF_Grp);
00067 virtual DOF_Group *getDOF_GroupPtr(void);
00068
00069
00070 virtual const Vector &getCrds(void) const;
00071
00072
00073
00074 virtual const Vector &getDisp(void);
00075 virtual const Vector &getVel(void);
00076 virtual const Vector &getAccel(void);
00077 virtual const Vector &getIncrDisp(void);
00078 virtual const Vector &getIncrDeltaDisp(void);
00079
00080 virtual const Vector &getTrialDisp(void);
00081 virtual const Vector &getTrialVel(void);
00082 virtual const Vector &getTrialAccel(void);
00083
00084
00085 virtual int setTrialDisp(double value, int dof);
00086 virtual int setTrialDisp(const Vector &);
00087 virtual int setTrialVel(const Vector &);
00088 virtual int setTrialAccel(const Vector &);
00089
00090 virtual int incrTrialDisp(const Vector &);
00091 virtual int incrTrialVel(const Vector &);
00092 virtual int incrTrialAccel(const Vector &);
00093
00094
00095 virtual void zeroUnbalancedLoad(void);
00096 virtual int addUnbalancedLoad(const Vector &load, double fact = 1.0);
00097 virtual int addInertiaLoadToUnbalance(const Vector &accel, double fact = 1.0);
00098 virtual const Vector &getUnbalancedLoad(void);
00099 virtual const Vector &getUnbalancedLoadIncInertia(void);
00100
00101
00102 virtual int commitState();
00103 virtual int revertToLastCommit();
00104 virtual int revertToStart();
00105
00106
00107 virtual const Matrix &getMass(void);
00108 virtual int setMass(const Matrix &theMass);
00109 virtual int setNumColR(int numCol);
00110 virtual int setR(int row, int col, double Value);
00111 virtual const Vector &getRV(const Vector &V);
00112
00113 virtual int setRayleighDampingFactor(double alphaM);
00114 virtual const Matrix &getDamp(void);
00115
00116
00117 virtual int setNumEigenvectors(int numVectorsToStore);
00118 virtual int setEigenvector(int mode, const Vector &eigenVector);
00119 virtual const Matrix &getEigenvectors(void);
00120
00121
00122 virtual int sendSelf(int commitTag, Channel &theChannel);
00123 virtual int recvSelf(int commitTag, Channel &theChannel,
00124 FEM_ObjectBroker &theBroker);
00125 virtual void Print(OPS_Stream &s, int flag = 0);
00126 virtual int displaySelf(Renderer &theRenderer, int displayMode, float fact);
00127
00128
00129 int addInertiaLoadSensitivityToUnbalance(const Vector &accel,
00130 double fact = 1.0,
00131 bool tag=false);
00132 Matrix getMassSensitivity(void);
00133 virtual const Matrix &getDampSensitivity(void);
00134 int getCrdsSensitivity(void);
00135 int saveSensitivity(Vector *v, Vector *vdot, Vector *vdotdot, int gradNum, int numGrads);
00136 double getDispSensitivity(int dof, int gradNum);
00137 double getVelSensitivity(int dof, int gradNum);
00138 double getAccSensitivity(int dof, int gradNum);
00139 int setParameter(const char **argv, int argc, Parameter ¶m);
00140 int updateParameter(int parameterID, Information &info);
00141 int activateParameter(int parameterID);
00142
00143 virtual const Vector &getReaction();
00144 virtual int addReactionForce(const Vector &, double factor);
00145 virtual int resetReactionForce(bool inclInertia);
00146
00147
00148 private:
00149
00150
00151 int createDisp(void);
00152 int createVel(void);
00153 int createAccel(void);
00154
00155
00156 int numberDOF;
00157 DOF_Group *theDOF_GroupPtr;
00158 Vector *Crd;
00159 Vector *commitDisp, *commitVel, *commitAccel;
00160 Vector *trialDisp, *trialVel, *trialAccel;
00161 Vector *unbalLoad;
00162 Vector *incrDisp;
00163 Vector *incrDeltaDisp;
00164
00165 double *disp, *vel, *accel;
00166
00167
00168 int dbTag1, dbTag2, dbTag3, dbTag4;
00169 Matrix *R;
00170 Matrix *mass;
00171 Vector *unbalLoadWithInertia;
00172 double alphaM;
00173
00174 Matrix *theEigenvectors;
00175
00176
00177 Matrix *dispSensitivity;
00178 Matrix *velSensitivity;
00179 Matrix *accSensitivity;
00180 int parameterID;
00181
00182
00183 static Matrix **theMatrices;
00184 static int numMatrices;
00185 int index;
00186
00187 Vector *reaction;
00188 };
00189
00190 #endif
00191