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
00038
00039
00040
00041
00042
00043 #ifndef NLBeamColumn3d_h
00044 #define NLBeamColumn3d_h
00045
00046 #include <Element.h>
00047 #include <Node.h>
00048 #include <Matrix.h>
00049 #include <Vector.h>
00050 #include <Channel.h>
00051 #include <SectionForceDeformation.h>
00052 #include <CrdTransf3d.h>
00053 #include <GaussLobattoQuadRule1d01.h>
00054
00055 class Response;
00056
00057 class NLBeamColumn3d: public Element
00058 {
00059 public:
00060 NLBeamColumn3d ();
00061 NLBeamColumn3d (int tag, int nodeI, int nodeJ,
00062 int numSections, SectionForceDeformation *sectionPtrs[],
00063 CrdTransf3d &coordTransf, double massDensPerUnitLength = 0.0,
00064 int maxNumIters = 10, double tolerance = 1e-12);
00065
00066 ~NLBeamColumn3d();
00067
00068 int getNumExternalNodes(void) const;
00069 const ID &getExternalNodes(void);
00070 Node **getNodePtrs(void);
00071
00072 int getNumDOF(void);
00073 void setDomain(Domain *theDomain);
00074
00075 int commitState(void);
00076 int revertToLastCommit(void);
00077 int revertToStart(void);
00078 int update(void);
00079
00080 const Matrix &getTangentStiff(void);
00081 const Matrix &getInitialStiff(void);
00082 const Matrix &getMass(void);
00083
00084 void zeroLoad(void);
00085 int addLoad(ElementalLoad *theLoad, double loadFactor);
00086 int addInertiaLoadToUnbalance(const Vector &accel);
00087
00088 const Vector &getResistingForce(void);
00089 const Vector &getResistingForceIncInertia(void);
00090
00091 int sendSelf(int cTag, Channel &theChannel);
00092 int recvSelf(int cTag, Channel &theChannel, FEM_ObjectBroker &theBroker);
00093 int displaySelf(Renderer &theViewer, int displayMode, float fact);
00094
00095
00096 friend OPS_Stream &operator<<(OPS_Stream &s, NLBeamColumn3d &E);
00097 void Print(OPS_Stream &s, int flag =0);
00098
00099 Response *setResponse(const char **argv, int argc, Information &eleInformation);
00100 int getResponse(int responseID, Information &eleInformation);
00101
00102 int setParameter(const char **argv, int argc, Information &info);
00103 int updateParameter(int parameterID, Information &info);
00104
00105 private:
00106 void getGlobalDispls(Vector &dg) const;
00107 void getGlobalAccels(Vector &ag) const;
00108 void getForceInterpolatMatrix(double xi, Matrix &b, const ID &code);
00109 void getDistrLoadInterpolatMatrix(double xi, Matrix &bp, const ID &code);
00110 void compSectionDisplacements(Vector sectionCoords[], Vector sectionDispls[]) const;
00111 void initializeSectionHistoryVariables (void);
00112
00113
00114
00115
00116 ID connectedExternalNodes;
00117 int nSections;
00118
00119 SectionForceDeformation **sections;
00120 CrdTransf3d *crdTransf;
00121
00122 Node *theNodes[2];
00123
00124 double rho;
00125 int maxIters;
00126 double tol;
00127
00128 int initialFlag;
00129 bool isTorsion;
00130
00131 Vector load;
00132
00133 Matrix kv;
00134 Vector Se;
00135
00136 Matrix kvcommit;
00137 Vector Secommit;
00138
00139 Matrix *fs;
00140 Vector *vs;
00141 Vector *Ssr;
00142
00143 Vector *vscommit;
00144
00145 Matrix *sp;
00146 double p0[5];
00147 Matrix *Ki;
00148
00149 static Matrix theMatrix;
00150 static Vector theVector;
00151 static GaussLobattoQuadRule1d01 quadRule;
00152 static double workArea[];
00153 };
00154
00155 #endif
00156