00001 // ------------------------------------------------------------------------- 00002 // IntPt.h - This header file contains the definition of the Integration 00003 // Point class. 00004 // ------------------------------------------------------------------------- 00005 // Remarks: 00006 // ------------------------------------------------------------------------- 00007 // 00008 // In femoop, the integration procedure is performed using this general 00009 // class "intpt" (from INTegration PoinT). The general purpose of the class 00010 // class is to provide the natural coordinates and integration weights of 00011 // the integration points for numerical integration of element vectors and 00012 // matrices. 00013 // 00014 // The following numerical integration techniques have been implemented: 00015 // 00016 // Gauss 00017 // Gauss over a unidimensional domain 00018 // Gauss over a triangular domain 00019 // Gauss over a quadrilateral domain 00020 // Gauss over a wedge-type domain 00021 // Gauss over a tetrahedral domain 00022 // Gauss over a three-dimensional domain 00023 // 00024 // Lobatto 00025 // Gauss-Lobatto over a unidimensional domain 00026 // Gauss-Lobatto over a quadrilateral domain 00027 // Gauss-Lobatto over a three-dimensional domain 00028 // 00029 // Newton-Cotes 00030 // Newton-Cotes over a unidimensional domain 00031 // Newton-Cotes over a quadrilateral domain 00032 // Newton-Cotes over a three-dimensional domain 00033 // 00034 // Mixed (for beams, plates and shells) 00035 // Gauss in unidimensional and Lobatto through-thickness 00036 // Gauss in triangle and Lobatto through-thickness 00037 // Gauss in quadrilateral and Lobatto through-thickness 00038 // 00039 // In Gauss quadrature, "order" means the number of integration points 00040 // on each direction. In Newton-Cotes and Lobatto rules, the number of 00041 // points is the order number plus one; e.g., the 1x1 integration using 00042 // Newton-Cotes and Gauss-Lobatto schemes uses a total number of 4 points. 00043 // 00044 // ------------------------------------------------------------------------- 00045 // Main public methods: 00046 // ------------------------------------------------------------------------- 00047 // 00048 // void SetNatCoord ( void ) 00049 // 00050 // This method evaluates for each integration point its natural coordinates 00051 // and its integration weight. 00052 // 00053 // ------------------------------------------------------------------------- 00054 // 00055 // cIntPt *MakeLst ( eIntType int_type, eDomainType dom_type, sOrder *order, 00056 // cElement *pcElm, int iMatLabel ) 00057 // 00058 // This static method builds a doubly-linked list of integration points. 00059 // It returns the head of the list. 00060 // 00061 // ------------------------------------------------------------------------- 00062 // 00063 // void DestroyLst ( cIntPt* &Head ) 00064 // 00065 // This static method kills the doubly-linked list of integration points 00066 // given its Head. 00067 // 00068 // ------------------------------------------------------------------------- 00069 // Methods associated with Material/Constitutive Model: 00070 // ------------------------------------------------------------------------- 00071 // 00072 // There are several methods of this class whose function is only to call 00073 // the associated method of the Material class or of the Constitutive Model 00074 // class. These methods are listed below: 00075 // 00076 // int NumMatElastParam( void ) 00077 // void MatElastParam ( double *parameters ) 00078 // 00079 // void InitConstModel ( void ) 00080 // void UpdateConstModel( void ) 00081 // void ModifyCMatrix ( double **c_matrix ) 00082 // int GetNumPrintScls ( void ) 00083 // void GetPrintSclLabs ( char **labels ) 00084 // void GetPrintSclVals ( double *str, double *prnval ) 00085 // 00086 // For details see the files: "material.h" and "cmodel.h". 00087 // ------------------------------------------------------------------------- 00088 // 00089 // $Author: evandro $ 00090 // $Revision: 1.2 $ 00091 // $Date: 1999/04/12 14:53:48 $ 00092 // $State: Exp $ 00093 // 00094 // ------------------------------------------------------------------------- 00095 00096 #ifndef _INTPT_H 00097 #define _INTPT_H 00098 00099 #include "gbldefs.h" 00100 #include "quadrat.h" 00101 00102 // ------------------------------------------------------------------------- 00103 // Forward declarations: 00104 // 00105 class cElement; 00106 class cConstModel; 00107 00108 // ------------------------------------------------------------------------- 00109 // Domain types: 00110 // 00111 typedef enum _eDomainType 00112 { 00113 LINE_QUADRATURE, // quadrature over a line domain 00114 TRIA_QUADRATURE, // quadrature over a triangular domain 00115 QUAD_QUADRATURE, // quadrature over a quadrilateral domain 00116 QUADS_QUADRATURE, // idem, for QuadS elements (Petrobras order) 00117 TETR_QUADRATURE, // quadrature over a tetrahedral domain 00118 CUBE_QUADRATURE, // quadrature over a hexahedral domain 00119 WEDGE_QUADRATURE, // quadrature over a wedge domain 00120 SHELL_QUADRATURE, // quadrature over a degenerated shell domain 00121 } eDomainType; 00122 00123 // ------------------------------------------------------------------------- 00124 // Integration point class: 00125 // 00126 class cIntPt 00127 { 00128 private: 00129 static int _iNumIntPts; // Mesh number of integration points 00130 cIntPt *_pcHead; // Head of this point's intgpnt list 00131 cIntPt *next; // Next point 00132 cIntPt *prev; // Previous point 00133 00134 protected: 00135 eIntType _eiType; // Type of quadrature 00136 eDomainType _edType; // Type of domain 00137 sOrder _sOrder; // Integration order 00138 int _iNumPts; // Number of integration points. 00139 int _iLabel; // Integration point label 00140 sNatCoord _sCoord; // Integration point natural coordinates 00141 double _dWeight; // Integration weight 00142 cConstModel *_pcMod; // Integration point constitutive model 00143 cElement *_pcElm; // Integration point element 00144 00145 public: 00146 static cIntPt *MakeLst ( eIntType, eDomainType, sOrder *, 00147 cElement * ); 00148 static cIntPt *MakeLst ( int, eDomainType, cElement * ); 00149 static void DestroyLst ( cIntPt *& ); 00150 static int GetNumMeshIntPt ( void ) { return _iNumIntPts; } 00151 cIntPt ( cIntPt *&, cElement *, int ); 00152 virtual ~cIntPt ( void ); 00153 virtual void SetNatCoord ( void ) = 0; 00154 cIntPt *GetNext ( void ) { return next; } 00155 int GetNumPts ( void ) { return _iNumPts; } 00156 int GetLabel ( void ) { return _iLabel; } 00157 cElement *GetElementAddr ( void ) { return _pcElm; } 00158 sNatCoord GetCoord ( void ) { return _sCoord;} 00159 double GetWeight ( void ) { return _dWeight; } 00160 sOrder GetOrder ( void ) { return _sOrder; } 00161 00162 void InitConstModel ( void ); 00163 void UpdateConstModel( void ); 00164 int NumMatElastParam( void ); 00165 void MatElastParam ( double * ); 00166 void ModifyCMatrix ( double ** ); 00167 int GetNumPrintScls ( void ); 00168 void GetPrintSclLabs ( char ** ); 00169 void GetPrintSclVals ( double *, double * ); 00170 int Stress ( double *, double * ); 00171 int Stress ( double *, sTensor * ); 00172 virtual int CheckTRMatrix ( int, double ** )=0; 00173 }; 00174 00175 #endif