00001 // ------------------------------------------------------------------------- 00002 // ElcPlFrame.h - This header file contains the definition of the plane 00003 // frame element class. 00004 // ------------------------------------------------------------------------- 00005 // Protected methods: 00006 // ------------------------------------------------------------------------- 00007 // 00008 // void DisplToArray( sNodeDispl *displ, double *u ) 00009 // 00010 // displ - nodal displacements (u,v,w) ( in ) 00011 // u - nodal displacements (array) ( out ) 00012 // 00013 // Transforms displacements from structure (u,v,w) form to array form. 00014 // Obs: displ[0]..displ[1] => u[0]..u[5]. 00015 // ------------------------------------------------------------------------- 00016 // 00017 // void CalcConfig( sNodeCoord *coord, double *l, double *a ) 00018 // 00019 // coord - nodal coordinates ( in ) 00020 // l - element straight length ( out ) 00021 // a - element angle in global system ( out ) 00022 // 00023 // Evaluates element straight length and global angle from given end 00024 // coordinates. 00025 // ------------------------------------------------------------------------- 00026 // 00027 // void UpdateGeom( sNodeCoord *coord, sNodeDispl *displ ) 00028 // 00029 // coord - nodal coordinates ( in/out ) 00030 // displ - nodal displacements ( in ) 00031 // 00032 // Updates the coordinates of end nodes. 00033 // ------------------------------------------------------------------------- 00034 // 00035 // void GetTrnVec( double c, double s, double *r, double *z ) 00036 // 00037 // c - element cosine ( in ) 00038 // s - element sine ( in ) 00039 // r - r vector ( out ) 00040 // z - z vector ( out ) 00041 // 00042 // Evaluates the transformation vectors ({r} and {z}). These vectors are 00043 // used in the computation of element geomtric stiffness matrix. 00044 // ------------------------------------------------------------------------- 00045 // 00046 // void GetTrnMat( double l, double c, double s, double **T ) 00047 // 00048 // l - element length ( in ) 00049 // c - element cosine ( in ) 00050 // s - element sine ( in ) 00051 // T - tranformation matrix ( out ) 00052 // 00053 // Evaluates the transformation matrix between local (natural) and global 00054 // systems. In linear analysis, the given data should correspond to initial 00055 // configuration. In nonlinear analysis, these data should correspond to 00056 // new configuration. 00057 // ------------------------------------------------------------------------- 00058 // 00059 // void GetElastMat( double l, double **C ) 00060 // 00061 // l - element length ( in ) 00062 // C - elastic constitutive matrix ( out ) 00063 // 00064 // Evaluates the elstic constitutive matrix of local (natural) system. 00065 // ------------------------------------------------------------------------- 00066 // 00067 // double GetAtan(double y, double x) 00068 // 00069 // y,x - projections ( in ) 00070 // 00071 // Returns the atan of a given angle in the range [0, 2*PI]. 00072 // ------------------------------------------------------------------------- 00073 // 00074 // double GetIncrRot( sNodeCoord *coord, sNodeDispl *displ ) 00075 // 00076 // coord - nodal coordinates ( in ) 00077 // displ - nodal displacements ( in ) 00078 // 00079 // Returns the incremental rigid body rotation from the current to the new 00080 // configuration. The element rigid body rotation is updated in the function 00081 // InternalForce. 00082 // ------------------------------------------------------------------------- 00083 // 00084 // $Author: evandro $ 00085 // $Revision: 1.1 $ 00086 // $Date: 1999/04/12 14:48:47 $ 00087 // $State: Exp $ 00088 // 00089 // ------------------------------------------------------------------------- 00090 00091 #ifndef _ELCPLFRAME_H 00092 #define _ELCPLFRAME_H 00093 00094 #include "gbldefs.h" 00095 #include "elcbar.h" 00096 00097 // ------------------------------------------------------------------------- 00098 // Definition of the Plane Frame Element Class: 00099 // 00100 class cElcPlFrame : public cElcBar 00101 { 00102 protected: 00103 double _dForce[6]; // Frame forces 00104 00105 public: 00106 cElcPlFrame ( void ); 00107 virtual ~cElcPlFrame ( void ); 00108 int ThermalEffects ( void ) { return 1; } 00109 void Stiffness ( double * ); 00110 void GeoStiffness ( double * ); 00111 int InternalForce ( double * ); 00112 void CalcIntPtStress( void ); 00113 void NodeStress ( sTensor * ); 00114 00115 protected: 00116 int GetStrnTemp ( double *, double * ); 00117 void CompRotMat ( void ); 00118 void GetRMat ( double ** ); 00119 void ElmVector ( sNodeCoord *, double *); 00120 void DisplToArray ( sNodeDispl *, double *); 00121 void CalcConfig ( sNodeCoord * , double *, double * ); 00122 void GetTrnMat ( double, double, double, double ** ); 00123 void GetProp ( double *, double * ); 00124 void GetElastMat ( double, double ** ); 00125 }; 00126 00127 // ------------------------------------------------------------------------- 00128 // Definition of the Elastic Foundation (for Plane Frame) Element Class: 00129 // 00130 class cElcPlFrWink : public cElcPlFrame 00131 { 00132 public: 00133 cElcPlFrWink ( void ); 00134 virtual ~cElcPlFrWink ( void ) { } 00135 void Stiffness ( double * ); 00136 int InternalForce ( double * ); 00137 void CalcIntPtStress( void ); 00138 }; 00139 00140 // ------------------------------------------------------------------------- 00141 // Definition of the Corotational Plane Frame Element Class: 00142 // 00143 class cElcCoPlFrame : public cElcPlFrame 00144 { 00145 protected: 00146 double _dRot; // Rigig body rotation 00147 00148 public: 00149 cElcCoPlFrame ( void ); 00150 virtual ~cElcCoPlFrame ( void ) { } 00151 int GeoNonLinear ( void ) { return 1; } 00152 void Stiffness ( double * ); 00153 int InternalForce ( double * ); 00154 void CalcIntPtStress( void ); 00155 void UpdateState ( void ); 00156 00157 protected: 00158 void BMatrix ( double, double, double, double ** ); 00159 void GetTrnVec ( double, double, double *, double * ); 00160 void UpdateGeom ( sNodeCoord *, sNodeDispl * ); 00161 double GetCurrRot ( sNodeCoord *, sNodeDispl * ); 00162 }; 00163 00164 // ------------------------------------------------------------------------- 00165 // Definition of the Enhanced Corotational Plane Frame Element Class: 00166 // 00167 class cElcEnCoPlFrame : public cElcCoPlFrame 00168 { 00169 public: 00170 cElcEnCoPlFrame( void ); 00171 virtual ~cElcEnCoPlFrame( void ) { } 00172 void Stiffness ( double * ); 00173 int InternalForce ( double * ); 00174 void CalcIntPtStress( void ); 00175 00176 protected: 00177 void BMatrix ( double, double, double, double, double, 00178 double, double ** ); 00179 }; 00180 00181 // ------------------------------------------------------------------------- 00182 // Definition of the Constante Curvature Corotational Plane Frame Element 00183 // Class: 00184 // 00185 class cElcCcCoPlFrame : public cElcCoPlFrame 00186 { 00187 public: 00188 cElcCcCoPlFrame( void ); 00189 virtual ~cElcCcCoPlFrame( void ) { } 00190 void Stiffness ( double * ); 00191 int InternalForce ( double * ); 00192 void CalcIntPtStress( void ); 00193 00194 protected: 00195 void BMatrix ( double, double, double, double, double, 00196 double, double ** ); 00197 }; 00198 00199 // ------------------------------------------------------------------------- 00200 // Definition of the Corotational Plane Frame (Timoshenko Theory) Element 00201 // Class: 00202 // 00203 class cElcTCPlFrame : public cElcCoPlFrame 00204 { 00205 public: 00206 cElcTCPlFrame ( void ); 00207 virtual ~cElcTCPlFrame ( void ) { } 00208 void Stiffness ( double * ); 00209 int InternalForce ( double * ); 00210 void CalcIntPtStress( void ); 00211 00212 protected: 00213 void GetProp ( double *, double *, double * ); 00214 void BMatrix ( double, double, double, double, 00215 double ** ); 00216 void CMatrix ( double ** ); 00217 }; 00218 #endif