elm.h

Go to the documentation of this file.
00001 /*
00002 %M This module contains the element class and data structure definitions
00003 %a Joao Luiz Elias Campos.
00004 %d September 1st, 1998.
00005 %r $Id: elm.h,v 1.6 2004/06/24 18:32:35 joaoluiz Exp $
00006 %w (C) COPYRIGHT 1995-1996, Eduardo Nobre Lages.
00007    (C) COPYRIGHT 1997-1998, Joao Luiz Elias Campos.
00008    All Rights Reserved
00009    Duplication of this program or any part thereof without the express
00010    written consent of the author is prohibited.
00011 
00012  *   Modified:    01-Sep-05    Alexandre A. Del Savio
00013  *     Adicionado os tipos setconnect e  updateconnect na estrutura sElmClass
00014  *     e seus respectivos defines.
00015  *
00016  *   Modified: 23-Fev-06  Juan Pablo Ibaņez
00017 *      Modificada a definicão de ElmReadInitStress, que passa a retornar  
00018 *      un valor (int). 
00019  * 
00020  */
00021 
00022 #ifndef _ELM_H
00023 #define _ELM_H
00024 
00025 #include "node.h"
00026 #include "load.h"
00027 
00028 /*
00029 %T Rezone definition
00030 */
00031 typedef struct _rezone
00032 {
00033  char  label[13];
00034  int   id;
00035  int   numelm;
00036  int  *elm;
00037 } sRezone;
00038 
00039 /*
00040 %T Generic tensor definition
00041 */
00042 typedef struct _tensor
00043 {
00044  double xx, xy, xz;
00045  double     yy, yz;
00046  double         zz;
00047  double         rf;
00048 } sTensor;
00049 
00050 /*
00051 %T Principal tensor definition
00052 */
00053 typedef struct _ptensor
00054 {
00055  double dir1, cos1x, cos1y, cos1z;
00056  double dir2, cos2x, cos2y, cos2z;
00057  double dir3, cos3x, cos3y, cos3z;
00058 } sPTensor;
00059 
00060 /*
00061 %T Local system derivatives
00062 */
00063 typedef struct _derivrst
00064 {
00065  double r;
00066  double s;
00067  double t;
00068 } sDerivRST;
00069 
00070 /*
00071 %T Integration order definition
00072 */
00073 typedef struct _order
00074 {
00075  int r;
00076  int s;
00077  int t;
00078 } sOrder;
00079 
00080 /*
00081 %T Element type definition
00082 */
00083 typedef enum _elmtype
00084 {
00085  T3,                          /* 3 nodes triangular element             */
00086  Q4,                          /* 4 nodes quadrilateral element          */
00087  BRICK8,                      /* 8 nodes hexedral element               */
00088  TETR4,                       /* 4 nodes tetrahedra element             */
00089  INFINITE,                    /* 4 nodes quadrilateral infinite element */
00090  INTERFACE,                   /* 2 nodes interface element              */
00091  LINE2,                       /* 2 nodes bar element                    */
00092  DKT,                         /* 3 nodes modified discrete Kirchhoff triangle   */
00093  NumElmTypes
00094 } eElmType;
00095 
00096 /*
00097 %T Element data structure definition
00098 */
00099 typedef struct _element
00100 {
00101  eElmType  type;              /* The element type         */
00102  eStatus   rezone;            /* Element rezone status    */
00103  eDisplay  display;           /* Element display flag     */
00104  int       curve;             /* Element display curve id */
00105  int       label;             /* Element label (number)   */
00106  sNode    *nodes;             /* Node vector.             */
00107  void     *data;              /* Element data             */
00108 } sElement;
00109 
00110 /*
00111 %T Element class definition
00112 */
00113 typedef struct _elmclass
00114 {
00115  void (*init)(void);
00116  void (*new)(int, int, int, int, sElement **, sElement **, sNode *);
00117  void (*free)(sElement *);
00118  void (*read)(sElement *);
00119  int  (*readinitstr)(sElement *);
00120  void (*readprofile)(sElement *);
00121  void (*mass)(sElement *, double *);
00122  double (*rigidcoeff)(sElement *);
00123  void (*load)(sElement *, eLoadType, int, int, int, int, int *, double *,
00124               double *, double *, double *, double *, double *, double *, double *, double *, double *, double *, double *);
00125  void (*connect)(sElement *, int *);
00126  void (*setconnect)(sElement *, int *);
00127  void (*updateconnect)(sElement *);
00128  void (*numnodes)(sElement *, int *);
00129  void (*gravity)(sElement *, double *, double *, double *);
00130  void (*assvector)(sElement *, double *, double *);
00131  void (*strstrain)(sElement *, double, double *, double *, sTensor *, sTensor *);
00132  void (*timestep)(sElement *, double *);
00133  void (*intforce)(sElement *, sTensor *, double *);
00134  void (*writestr)(sElement *, FILE *, double *, double *);
00135  void (*writendlresult)(sElement *, FILE *, FILE *);
00136  void (*writegauresult)(sElement *, FILE *, FILE *);
00137  void (*writegauvecresult)(sElement *, int, FILE *, FILE *);
00138  void (*updatestress)(sElement *, double, double *, sTensor *);
00139  void (*percforce)(sElement *, double *);
00140  void (*setpressure)(sElement *, double);
00141  void (*setinitstress)(sElement *, sTensor *);
00142  void (*viscoforce)(sElement *, double, sTensor *, double *);
00143  void (*jacobian)(sElement *, double [3][3], double [3][3]);
00144  void (*volume)(sElement *, double *);
00145  void (*KMatrix)(sElement *, double [24][24]);
00146  void (*GetDof)(sElement *, int [24], int *);
00147  void (*GetInc)(sElement *, int [8], int *);
00148 } sElmClass;
00149 
00150 /* Integration order vector
00151  */
00152 extern sOrder *IntOrder;
00153 
00154 /* Thickness vector
00155  */
00156 extern double *Thickness;
00157 
00158 /* Element class
00159  */
00160 extern sElmClass ElmClass[NumElmTypes];
00161 
00162 /* Element list
00163  */
00164 extern sElement **ElmList;
00165 
00166 /* Number of mesh elements, integration order and thickness
00167  */
00168 extern int NumElements;
00169 extern int NumIntOrder;
00170 extern int NumThickness;
00171 
00172 /* Rezone variables
00173  */
00174 extern int      NumRezones;
00175 extern sRezone *Rezone;
00176 
00177 
00178 /*
00179 ** ------------------------------------------------------------------------
00180 ** Macro definitions:
00181 */
00182 
00183 #define ElmInit(type)                                   \
00184         if(ElmClass[type].init != 0L)                   \
00185          (*ElmClass[type].init)( )
00186 
00187 #define ElmNew(type,label,matid,itord,tckid,elm,list,n) \
00188         if(ElmClass[type].new != 0L)                    \
00189          (*ElmClass[type].new)( label, matid, itord, tckid, elm, list, n )
00190 
00191 #define ElmFree(elm)                                    \
00192         if(ElmClass[elm->type].free != 0L)              \
00193          (*ElmClass[elm->type].free)( elm )
00194 
00195 #define ElmRead(elm)                                    \
00196         if(ElmClass[elm->type].read != 0L )             \
00197          (*ElmClass[elm->type].read)( elm )
00198 
00199 #define ElmReadInitStress(elm)                          \
00200         (( ElmClass[elm->type].readinitstr != 0L ) ?    \
00201          (*ElmClass[elm->type].readinitstr)( elm ) :    \
00202          0 )
00203          
00204 #define ElmReadProfile(elm)                             \
00205         if( ElmClass[elm->type].readprofile != 0L )     \
00206           (*ElmClass[elm->type].readprofile)( elm )     
00207                  
00208 
00209 #define ElmMass(elm,mm)                                 \
00210         if(ElmClass[elm->type].mass != 0L)              \
00211          (*ElmClass[elm->type].mass)( elm, mm )
00212 
00213 #define ElmRigidCoeff(elm)                              \
00214          (*ElmClass[elm->type].rigidcoeff)( elm )
00215 
00216 #define ElmLoad(elm,type,key,noi,noj,nok,nol,q1x,q1y,q1z,q2x,q2y,q2z,q3x,q3y,q3z,q4x,q4y,q4z)   \
00217         if(ElmClass[elm->type].load != 0L )                     \
00218          (*ElmClass[elm->type].load)( elm, type, key, noi, noj, nok, nol,       \
00219                                       q1x, q1y, q1z, q2x, q2y, q2z, q3x, q3y, q3z, q4x, q4y, q4z )
00220 
00221 #define ElmConnect(elm,conn)                            \
00222         if(ElmClass[elm->type].connect != 0L )          \
00223          (*ElmClass[elm->type].connect)( elm, conn )
00224 
00225 #define ElmSetConnect(elm,conn)                         \
00226         if(ElmClass[elm->type].setconnect != 0L )       \
00227          (*ElmClass[elm->type].setconnect)( elm, conn )
00228 
00229 #define ElmUpdateConnect(elm)                           \
00230         if(ElmClass[elm->type].updateconnect != 0L )    \
00231          (*ElmClass[elm->type].updateconnect)( elm )
00232 
00233 #define ElmNumNodes(elm,num)                            \
00234         if(ElmClass[elm->type].numnodes != 0L )         \
00235          (*ElmClass[elm->type].numnodes)( elm, num )
00236 
00237 #define ElmGravity(elm,qx,qy,qz)                        \
00238         if(ElmClass[elm->type].gravity != 0L )          \
00239          (*ElmClass[elm->type].gravity)( elm, qx, qy, qz )
00240 
00241 #define ElmAssVector(elm,gm,em)                         \
00242         if(ElmClass[elm->type].assvector != 0L )        \
00243          (*ElmClass[elm->type].assvector)( elm, gm, em )
00244 
00245 #define ElmStressStrain(elm,dt,u,y,stre,stra)           \
00246         if(ElmClass[elm->type].strstrain != 0L )        \
00247          (*ElmClass[elm->type].strstrain)( elm, dt, u, y, stre, stra )
00248 
00249 #define ElmTimeStep(elm,dt)                             \
00250         if(ElmClass[elm->type].timestep != 0L )         \
00251          (*ElmClass[elm->type].timestep)( elm, dt )
00252 
00253 #define ElmInterForce(elm,gv,ev)                        \
00254         if(ElmClass[elm->type].intforce != 0L )         \
00255          (*ElmClass[elm->type].intforce)( elm, gv, ev )
00256 
00257 #define ElmWriteStress(elm,f,u,v)                               \
00258         if(ElmClass[elm->type].writestr != 0L )         \
00259          (*ElmClass[elm->type].writestr)( elm, f, u, v )
00260 
00261 #define ElmWriteNodalResults(elm,f,t)                           \
00262         if(ElmClass[elm->type].writendlresult != 0L )           \
00263          (*ElmClass[elm->type].writendlresult)( elm, f, t )
00264 
00265 #define ElmWriteGaussResults(elm,f,t)                           \
00266         if(ElmClass[elm->type].writegauresult != 0L )           \
00267          (*ElmClass[elm->type].writegauresult)( elm, f, t )
00268 
00269 #define ElmWriteGaussVectorResults(elm,v,f,t)                   \
00270         if(ElmClass[elm->type].writegauvecresult != 0L )        \
00271          (*ElmClass[elm->type].writegauvecresult)( elm, v, f, t )
00272 
00273 #define ElmUpdateStress(elm,dt,v,str)                           \
00274         if(ElmClass[elm->type].updatestress != 0L )             \
00275          (*ElmClass[elm->type].updatestress)( elm, dt, v, str )
00276 
00277 #define ElmPercForce(elm,pf)                                    \
00278         if(ElmClass[elm->type].percforce != 0L )                \
00279          (*ElmClass[elm->type].percforce)( elm, pf )
00280 
00281 #define ElmSetPressure(elm,pot)                                 \
00282         if(ElmClass[elm->type].setpressure != 0L )              \
00283          (*ElmClass[elm->type].setpressure)( elm, pot )
00284 
00285 #define ElmSetInitStress(elm,str)                               \
00286         if(ElmClass[elm->type].setinitstress != 0L )            \
00287          (*ElmClass[elm->type].setinitstress)( elm, str )
00288 
00289 #define ElmViscoForce(elm,ts,gv,ev)                             \
00290         if(ElmClass[elm->type].viscoforce != 0L )               \
00291          (*ElmClass[elm->type].viscoforce)( elm, ts, gv, ev )
00292 
00293 #define ElmJacobian(elm,j,i)                                    \
00294         if(ElmClass[elm->type].jacobian != 0L)                  \
00295          (*ElmClass[elm->type].jacobian)(elm,j,i)
00296 
00297 #define ElmVolume(elm,v)                                        \
00298         if(ElmClass[elm->type].volume != 0L)                    \
00299          (*ElmClass[elm->type].volume)(elm,v)
00300 
00301 #define ElmKMatrix(elm,k)                                       \
00302         if(ElmClass[elm->type].KMatrix != 0L)                   \
00303          (*ElmClass[elm->type].KMatrix)(elm,k) 
00304          
00305 #define ElmGetDof(elm,u,index)                                  \
00306         if(ElmClass[elm->type].GetDof != 0L)                    \
00307          (*ElmClass[elm->type].GetDof)(elm,u,index)  
00308          
00309 #define ElmGetInc(elm,inc,index)                                \
00310         if(ElmClass[elm->type].GetInc != 0L)                    \
00311          (*ElmClass[elm->type].GetInc)(elm,inc,index)                           
00312 
00313 /* Public functions
00314  */
00315 void ElementInit          ( void );
00316 void ElementFree          ( void );
00317 void ElementBuildAdjacence( void );
00318 void PrincipalTensordInitStress ( sTensor *, sPTensor * );
00319 void PrincipalTensor            ( sTensor *tensor, sPTensor *ptensor );
00320 void ElementOffPlaneStress( double, sTensor * );
00321 void ElementInitTensor    ( sTensor * );
00322 
00323 #endif
00324 

Generated on Tue Oct 23 11:23:29 2007 for Relax by  doxygen 1.5.3