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
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043
00044
00045 #ifndef BeamWithHinges2d_h
00046 #define BeamWithHinges2d_h
00047
00048 #include <Element.h>
00049 #include <Matrix.h>
00050 #include <Vector.h>
00051 #include <ID.h>
00052
00053 #include <Node.h>
00054 #include <Channel.h>
00055 #include <FEM_ObjectBroker.h>
00056
00057 #include <SectionForceDeformation.h>
00058
00059 #include <CrdTransf2d.h>
00060 #include <Response.h>
00061 #include <Renderer.h>
00062
00064 class BeamWithHinges2d: public Element
00065 {
00066 public:
00068 BeamWithHinges2d ();
00069
00071 BeamWithHinges2d (int tag, int nodeI, int nodeJ,
00072 double E, double I, double A,
00073 double G, double alpha,
00074 SectionForceDeformation §ionRefI, double hingeIlen,
00075 SectionForceDeformation §ionRefJ, double hingeJlen,
00076 CrdTransf2d &coordTrans, double shearL = 1.0,
00077 double massDensPerUnitLength = 0.0, int max = 1, double tol = 1.0e-10);
00078
00080 BeamWithHinges2d (int tag, int nodeI, int nodeJ,
00081 double E, double I, double A,
00082 double G, double alpha,
00083 SectionForceDeformation §ionRefI, double hingeIlen,
00084 SectionForceDeformation §ionRefJ, double hingeJlen,
00085 CrdTransf2d &coordTrans, const Vector &distLoad,
00086 double shearL = 1.0, double massDensPerUnitLength = 0.0,
00087 int max = 1, double tol = 1.0e-10);
00088
00090 ~BeamWithHinges2d();
00091
00093 int getNumExternalNodes (void) const;
00095 const ID &getExternalNodes (void);
00097 int getNumDOF (void);
00099 void setDomain (Domain *theDomain);
00100
00102 int commitState (void);
00104 int revertToLastCommit (void);
00106 int revertToStart (void);
00107
00109 const Matrix &getTangentStiff (void);
00111 const Matrix &getSecantStiff (void);
00113 const Matrix &getDamp (void);
00115 const Matrix &getMass (void);
00116
00118 void zeroLoad (void);
00120 int addLoad (const Vector &moreLoad);
00122 int addInertiaLoadToUnbalance(const Vector &accel);
00124 const Vector &getResistingForce (void);
00126 const Vector &getResistingForceIncInertia (void);
00127
00129 int sendSelf (int commitTag, Channel &theChannel);
00131 int recvSelf (int commitTag, Channel &theChannel,
00132 FEM_ObjectBroker &theBroker);
00133
00135 Response *setResponse (char **argv, int argc, Information &info);
00137 int getResponse (int responseID, Information &info);
00138
00140 int setParameter (char **argv, int argc, Information &info);
00142 int updateParameter (int parameterID, Information &info);
00143
00145 void Print (ostream &s, int flag = 0);
00147 int displaySelf(Renderer &theViewer, int displayMode, float fact);
00148
00149 protected:
00150
00151 private:
00152
00154 void setNodePtrs (Domain *theDomain);
00156 void getGlobalDispls (Vector &dg);
00158 void getGlobalAccels (Vector &ag);
00160 void setStiffMatrix (void);
00162 void setMass (void);
00163
00165 CrdTransf2d *theCoordTransf;
00166
00168 void getForceInterpMatrix (Matrix &b, double x, const ID &c, int &shearKey);
00170 void getDistrLoadInterpMatrix (Matrix &bp, double x, const ID &c);
00171
00173 void setHinges (void);
00175 void setElasticFlex (void);
00176
00179
00180 double E, I, A, G, alpha, L;
00182 double massDens;
00184 double hingeIlen, hingeJlen;
00185
00187 ID connectedExternalNodes;
00189 Node *node1Ptr, *node2Ptr;
00191 SectionForceDeformation *sectionI, *sectionJ;
00193 Matrix K;
00195 Matrix m;
00197 Matrix d;
00198
00200 Matrix fElastic;
00202 Matrix vElastic;
00203
00205 Matrix b1, bp1;
00207 Matrix b3, bp3;
00208
00210 Matrix fs1, fs3;
00211
00213 Vector sr1, sr3;
00214
00216 Vector e1, e3;
00217
00219 Vector UePrev;
00221 Vector P;
00223 Vector Pinert;
00225 Matrix kb;
00227 Vector q;
00229 Vector load;
00231 Vector prevDistrLoad;
00232
00234 Vector distrLoadCommit;
00236 Vector UeCommit;
00238 Matrix kbCommit;
00240 Vector qCommit;
00241
00243 bool initialFlag;
00244
00246 double shearLength;
00248 int shearIkey, shearJkey;
00249
00251 int maxIter;
00253 double tolerance;
00254 };
00255
00256 #endif
00257 ÿ