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 #ifndef CorotCrdTransf3d_h
00037 #define CorotCrdTransf3d_h
00038
00039 #include <CrdTransf3d.h>
00040 #include <Vector.h>
00041 #include <Matrix.h>
00042
00043 class CorotCrdTransf3d: public CrdTransf3d
00044 {
00045 public:
00046 CorotCrdTransf3d(int tag, const Vector &vecInLocXZPlane,
00047 const Vector &rigJntOffsetI, const Vector &rigJntOffsetJ);
00048
00049 CorotCrdTransf3d();
00050 ~CorotCrdTransf3d();
00051
00052 int initialize(Node *nodeIPointer, Node *nodeJPointer);
00053 int update(void);
00054 double getInitialLength(void);
00055 double getDeformedLength(void);
00056
00057 int commitState(void);
00058 int revertToLastCommit(void);
00059 int revertToStart(void);
00060
00061 const Vector &getBasicTrialDisp(void);
00062 const Vector &getBasicIncrDisp(void);
00063 const Vector &getBasicIncrDeltaDisp(void);
00064 const Vector &getBasicTrialVel(void);
00065 const Vector &getBasicTrialAccel(void);
00066
00067 const Vector &getGlobalResistingForce(const Vector &basicForce, const Vector &uniformLoad);
00068 const Matrix &getGlobalStiffMatrix(const Matrix &basicStiff, const Vector &basicForce);
00069 const Matrix &getInitialGlobalStiffMatrix(const Matrix &basicStiff);
00070
00071 CrdTransf3d *getCopy(void);
00072
00073 int sendSelf(int cTag, Channel &theChannel);
00074 int recvSelf(int cTag, Channel &theChannel, FEM_ObjectBroker &theBroker);
00075
00076 void Print(OPS_Stream &s, int flag = 0);
00077
00078
00079 const Vector &getPointGlobalCoordFromLocal(const Vector &localCoords);
00080 const Vector &getPointGlobalDisplFromBasic(double xi, const Vector &basicDisps);
00081
00082 int getLocalAxes(Vector &xAxis, Vector &yAxis, Vector &zAxis);
00083
00084 private:
00085 void compTransfMatrixBasicGlobal(void);
00086 void compTransfMatrixBasicGlobalNew(void);
00087 const Vector &getQuaternionFromRotMatrix(const Matrix &RotMatrix) const;
00088 const Vector &getQuaternionFromPseudoRotVector(const Vector &theta) const;
00089 const Vector &getTangScaledPseudoVectorFromQuaternion(const Vector &theta) const;
00090 const Vector &quaternionProduct(const Vector &q1, const Vector &q2) const;
00091 const Matrix &getRotationMatrixFromQuaternion(const Vector &q) const;
00092 const Matrix &getRotMatrixFromTangScaledPseudoVector(const Vector &w) const;
00093 const Matrix &getSkewSymMatrix(const Vector &theta) const;
00094 const Matrix &getLMatrix(const Vector &ri) const;
00095 const Matrix &getKs2Matrix(const Vector &ri, const Vector &z) const;
00096
00097
00098 Node *nodeIPtr, *nodeJPtr;
00099
00100 Vector vAxis;
00101 Vector nodeIOffset, nodeJOffset;
00102
00103 Vector xAxis;
00104 double L;
00105 double Ln;
00106
00107 Matrix R0;
00108
00109 Vector alphaIq;
00110 Vector alphaJq;
00111
00112 Vector alphaIqcommit;
00113 Vector alphaJqcommit;
00114 Vector alphaI;
00115 Vector alphaJ;
00116
00117 Vector ul;
00118 Vector ulcommit;
00119 Vector ulpr;
00120
00121 static Matrix RI;
00122 static Matrix RJ;
00123 static Matrix Rbar;
00124 static Matrix e;
00125 static Matrix Tp;
00126 static Matrix T;
00127 static Matrix Lr2, Lr3, A;
00128
00129 double *nodeIInitialDisp, *nodeJInitialDisp;
00130 bool initialDispChecked;
00131 };
00132 #endif