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 #ifndef BeamWithHinges3d_h
00042 #define BeamWithHinges3d_h
00043
00044 #include <Element.h>
00045 #include <Matrix.h>
00046 #include <Vector.h>
00047 #include <ID.h>
00048
00049 #include <Node.h>
00050 #include <Channel.h>
00051 #include <FEM_ObjectBroker.h>
00052
00053 #include <SectionForceDeformation.h>
00054
00055 #include <CrdTransf3d.h>
00056 #include <Response.h>
00057 #include <Renderer.h>
00058
00060 class BeamWithHinges3d: public Element
00061 {
00062 public:
00064 BeamWithHinges3d ();
00065
00067 BeamWithHinges3d (int tag, int nodeI, int nodeJ,
00068 double E, double Iz, double Iy, double A,
00069 double G, double J, double alpha,
00070 SectionForceDeformation §ionRefI, double hingeIlen,
00071 SectionForceDeformation §ionRefJ, double hingeJlen,
00072 CrdTransf3d &coordTrans, double shearL = 1.0,
00073 double massDensPerUnitLength = 0.0, int max = 1, double tol = 1.0e-10);
00074
00076 BeamWithHinges3d (int tag, int nodeI, int nodeJ,
00077 double E, double Iz, double Iy, double A,
00078 double G, double J, double alpha,
00079 SectionForceDeformation §ionRefI, double hingeIlen,
00080 SectionForceDeformation §ionRefJ, double hingeJlen,
00081 CrdTransf3d &coordTrans, const Vector &distLoad,
00082 double shearL = 1.0, double massDensPerUnitLength = 0.0,
00083 int max = 1, double tol = 1.0e-10);
00084
00086 ~BeamWithHinges3d();
00087
00089 int getNumExternalNodes (void) const;
00091 const ID &getExternalNodes (void);
00093 int getNumDOF (void);
00095 void setDomain (Domain *theDomain);
00096
00098 int commitState (void);
00100 int revertToLastCommit (void);
00102 int revertToStart (void);
00103
00105 const Matrix &getTangentStiff (void);
00107 const Matrix &getSecantStiff (void);
00109 const Matrix &getDamp (void);
00111 const Matrix &getMass (void);
00112
00114 void zeroLoad (void);
00116 int addLoad (const Vector &moreLoad);
00118 int addInertiaLoadToUnbalance(const Vector &accel);
00120 const Vector &getResistingForce (void);
00122 const Vector &getResistingForceIncInertia (void);
00123
00125 int sendSelf (int commitTag, Channel &theChannel);
00127 int recvSelf (int commitTag, Channel &theChannel,
00128 FEM_ObjectBroker &theBroker);
00129
00131 Response *setResponse (char **argv, int argc, Information &info);
00133 int getResponse (int responseID, Information &info);
00134
00136 int setParameter (char **argv, int argc, Information &info);
00138 int updateParameter (int parameterID, Information &info);
00139
00141 void Print (ostream &s, int flag = 0);
00143 int displaySelf(Renderer &theViewer, int displayMode, float fact);
00144
00145 protected:
00146
00147 private:
00148
00150 void setNodePtrs (Domain *theDomain);
00152 void getGlobalDispls (Vector &dg);
00154 void getGlobalAccels (Vector &ag);
00156 void setStiffMatrix (void);
00158 void setMass (void);
00159
00161 CrdTransf3d *theCoordTransf;
00162
00164 void getForceInterpMatrix (Matrix &b, double x, const ID &c, int &shearKeyVY, int &shearKeyVZ);
00166 void getDistrLoadInterpMatrix (Matrix &bp, double x, const ID &c);
00167
00169 void setHinges (void);
00171 void setElasticFlex (void);
00172
00175
00176 double E, Iz, Iy, A, G, J, alpha, L;
00178 double massDens;
00180 double hingeIlen, hingeJlen;
00181
00183 ID connectedExternalNodes;
00185 Node *node1Ptr, *node2Ptr;
00187 SectionForceDeformation *sectionI, *sectionJ;
00189 Matrix K;
00191 Matrix m;
00193 Matrix d;
00194
00196 Matrix fElastic;
00198 Matrix vElastic;
00199
00201 Matrix b1, bp1;
00203 Matrix b3, bp3;
00204
00206 Matrix fs1, fs3;
00207
00209 Vector sr1, sr3;
00210
00212 Vector e1, e3;
00213
00215 Vector UePrev;
00217 Vector P;
00219 Vector Pinert;
00221 Matrix kb;
00223 Vector q;
00225 Vector load;
00227 Vector prevDistrLoad;
00228
00230 Vector distrLoadCommit;
00232 Vector UeCommit;
00234 Matrix kbCommit;
00236 Vector qCommit;
00237
00239 bool initialFlag;
00240
00242 double shearLength;
00244 int shearIkeyVY, shearJkeyVY;
00246 int shearIkeyVZ, shearJkeyVZ;
00247
00249 double shearWeightIVY, shearWeightIVZ;
00251 double shearWeightJVY, shearWeightJVZ;
00252
00254 int maxIter;
00256 double tolerance;
00257 };
00258
00259 #endif
00260 ÿ