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 NoType
00110 } ElementTypeId;
00111
00112
00113
00114
00115
00116 typedef struct Finley_RefElementInfo {
00117 ElementTypeId TypeId;
00118 char* Name;
00119 dim_t numLocalDim;
00120 dim_t numDim;
00121 dim_t numNodes;
00122 dim_t numShapes;
00123 dim_t numOrder;
00124 dim_t numVertices;
00125 ElementTypeId LinearTypeId;
00126 index_t linearNodes[MAX_numNodes];
00127 Finley_Shape_Function* getValues;
00128 Finley_Quad_getNodes* getQuadNodes;
00129 Finley_Quad_getNumNodes* getNumQuadNodes;
00130 dim_t numGeoNodes;
00131
00132
00133 index_t geoNodes[MAX_numNodes];
00134 dim_t numNodesOnFace;
00135
00136
00137 index_t faceNode[MAX_numNodes];
00138 index_t shiftNodes[MAX_numNodes];
00139 index_t reverseNodes[MAX_numNodes];
00140
00141 } Finley_RefElementInfo;
00142
00143
00144
00145
00146
00147 typedef struct Finley_RefElement {
00148 Finley_RefElementInfo* Type;
00149 int numQuadNodes;
00150 double *QuadNodes;
00151 double *QuadWeights;
00152 double *S;
00153 double *dSdv;
00154 } Finley_RefElement;
00155
00156
00157
00158
00159
00160 Finley_RefElement* Finley_RefElement_alloc(ElementTypeId,int);
00161 void Finley_RefElement_dealloc(Finley_RefElement*);
00162 ElementTypeId Finley_RefElement_getTypeId(char*);
00163
00164 #endif