00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021 #ifndef INC_FINLEY_REFERENCEELEMENTS
00022 #define INC_FINLEY_REFERENCEELEMENTS
00023
00024
00025
00026
00027 #include "Finley.h"
00028 #include "ShapeFunctions.h"
00029 #include "Quadrature.h"
00030
00031
00032
00033
00034
00035 #define MAX_numNodes 64
00036
00037 typedef enum {
00038 Point1,
00039 Line2,
00040 Line3,
00041 Line4,
00042 Tri3,
00043 Tri6,
00044 Tri9,
00045 Tri10,
00046 Rec4,
00047 Rec8,
00048 Rec9,
00049 Rec12,
00050 Rec16,
00051 Tet4,
00052 Tet10,
00053 Tet16,
00054 Hex8,
00055 Hex20,
00056 Hex27,
00057 Hex32,
00058 Line2Face,
00059 Line3Face,
00060 Line4Face,
00061 Tri3Face,
00062 Tri6Face,
00063 Tri9Face,
00064 Tri10Face,
00065 Rec4Face,
00066 Rec8Face,
00067 Rec9Face,
00068 Rec12Face,
00069 Rec16Face,
00070 Tet4Face,
00071 Tet10Face,
00072 Tet16Face,
00073 Hex8Face,
00074 Hex20Face,
00075 Hex27Face,
00076 Hex32Face,
00077 Point1_Contact,
00078 Line2_Contact,
00079 Line3_Contact,
00080 Line4_Contact,
00081 Tri3_Contact,
00082 Tri6_Contact,
00083 Tri9_Contact,
00084 Tri10_Contact,
00085 Rec4_Contact,
00086 Rec8_Contact,
00087 Rec9_Contact,
00088 Rec12_Contact,
00089 Rec16_Contact,
00090 Line2Face_Contact,
00091 Line3Face_Contact,
00092 Line4Face_Contact,
00093 Tri3Face_Contact,
00094 Tri6Face_Contact,
00095 Tri9Face_Contact,
00096 Tri10Face_Contact,
00097 Rec4Face_Contact,
00098 Rec8Face_Contact,
00099 Rec9Face_Contact,
00100 Rec12Face_Contact,
00101 Rec16Face_Contact,
00102 Tet4Face_Contact,
00103 Tet10Face_Contact,
00104 Tet16Face_Contact,
00105 Hex8Face_Contact,
00106 Hex20Face_Contact,
00107 Hex27Face_Contact,
00108 Hex32Face_Contact,
00109 Line3Macro,
00110 Tri6Macro,
00111 Rec9Macro,
00112 Tet10Macro,
00113 Hex27Macro,
00114
00115 NoType
00116 } ElementTypeId;
00117
00118
00119
00120
00121
00122 typedef struct Finley_ReferenceElementInfo {
00123 ElementTypeId TypeId;
00124 char* Name;
00125 dim_t numLocalDim;
00126 dim_t numDim;
00127 dim_t numNodes;
00128 dim_t numShapes;
00129 dim_t numOrder;
00130 dim_t numVertices;
00131 ElementTypeId LinearTypeId;
00132 index_t linearNodes[MAX_numNodes];
00133 Finley_Shape_Function* getValues;
00134 Finley_Quad_getNodes* getQuadNodes;
00135 Finley_Quad_getNumNodes* getNumQuadNodes;
00136
00137
00138 dim_t numRelevantGeoNodes;
00139
00140
00141 index_t relevantGeoNodes[MAX_numNodes];
00142
00143
00144 dim_t numNodesOnFace;
00145
00146 index_t faceNodes[MAX_numNodes];
00147 index_t shiftNodes[MAX_numNodes];
00148 index_t reverseNodes[MAX_numNodes];
00149
00150 } Finley_ReferenceElementInfo;
00151
00152
00153
00154
00155
00156 typedef struct Finley_ReferenceElement {
00157 Finley_ReferenceElementInfo* Type;
00158 int numQuadNodes;
00159 double *QuadNodes;
00160 double *QuadWeights;
00161 double *S;
00162 double *dSdv;
00163 } Finley_ReferenceElement;
00164
00165
00166
00167
00168
00169 Finley_ReferenceElement* Finley_ReferenceElement_alloc(ElementTypeId,int);
00170 void Finley_ReferenceElement_dealloc(Finley_ReferenceElement*);
00171 ElementTypeId Finley_ReferenceElement_getTypeId(char*);
00172
00173 #endif