ESYS13  Revision_
Quadrature.h
Go to the documentation of this file.
00001 
00002 /*******************************************************
00003 *
00004 * Copyright (c) 2003-2012 by University of Queensland
00005 * Earth Systems Science Computational Center (ESSCC)
00006 * http://www.uq.edu.au/esscc
00007 *
00008 * Primary Business: Queensland, Australia
00009 * Licensed under the Open Software License version 3.0
00010 * http://www.opensource.org/licenses/osl-3.0.php
00011 *
00012 *******************************************************/
00013 
00014 
00015 /**************************************************************/
00016 
00017 /*   Finley: integration schemes for element shapes Tri, Quad, Hex, Tet, Line, Point */
00018 
00019 /**************************************************************/
00020 
00021 #ifndef INC_FINLEY_QUADRATURE
00022 #define INC_FINLEY_QUADRATURE
00023 
00024 /**************************************************************/
00025 
00026 #include "Finley.h"
00027 
00028 /**************************************************************/
00029 
00030 #define MAX_numQuadNodesLine 10
00031 
00032 typedef enum {
00033   PointQuad,
00034   LineQuad,
00035   TriQuad,
00036   RecQuad,
00037   TetQuad,
00038   HexQuad,
00039   NoQuad   /* marks end of list */
00040 } Finley_QuadTypeId;
00041 
00042 typedef void (Finley_Quad_getNodes) (dim_t,double*,double*);
00043 typedef dim_t (Finley_Quad_getNumNodes) (dim_t);
00044 typedef dim_t(Finley_Quad_getMacro)(dim_t numSubElements, int numQuadNodes, double* quadNodes, double* quadWeights, 
00045                                         dim_t numF, double* dFdv, 
00046                     dim_t new_len, double* new_quadNodes, double* new_quadWeights,
00047                                         double* new_dFfv );
00048 
00049 typedef struct Finley_QuadInfo {
00050   Finley_QuadTypeId TypeId;                  /* the id */
00051   char* Name;                                /* the name in text form e.g. Line,Rec,... */
00052   dim_t numDim;                              /* spatial dimension */
00053   dim_t numVertices;                         /* number of vertices of the element */
00054   Finley_Quad_getNodes* getQuadNodes;        /* function to set the quadrature points for a given order */
00055   Finley_Quad_getNumNodes* getNumQuadNodes;  /* function selects the number of quadrature nodes for a given accuracy order */
00056   Finley_Quad_getMacro *getMacro;                /* transfers a given quadrature scheme to a macro element structure */
00057 }  Finley_QuadInfo;
00058 
00059 /**************************************************************/
00060 
00061 /*     Interfaces: */
00062 
00063 
00064 Finley_Quad_getMacro Finley_Quad_MacroPoint;
00065 Finley_Quad_getMacro Finley_Quad_MacroLine;
00066 Finley_Quad_getMacro Finley_Quad_MacroTri;
00067 Finley_Quad_getMacro Finley_Quad_MacroRec;
00068 Finley_Quad_getMacro Finley_Quad_MacroTet;
00069 Finley_Quad_getMacro Finley_Quad_MacroHex;
00070 
00071 
00072 Finley_Quad_getNodes Finley_Quad_getNodesTri;
00073 Finley_Quad_getNodes Finley_Quad_getNodesTet;
00074 Finley_Quad_getNodes Finley_Quad_getNodesRec;
00075 Finley_Quad_getNodes Finley_Quad_getNodesHex;
00076 Finley_Quad_getNodes Finley_Quad_getNodesLine;
00077 Finley_Quad_getNodes Finley_Quad_getNodesPoint;
00078 Finley_Quad_getNodes Finley_Quad_getNodesTriOnFace;
00079 Finley_Quad_getNodes Finley_Quad_getNodesRecOnFace;
00080 Finley_Quad_getNodes Finley_Quad_getNodesLineOnFace;
00081 Finley_Quad_getNodes Finley_Quad_getNodesPointOnFace;
00082 Finley_Quad_getNodes Finley_Quad_getNodesTriMacro;
00083 Finley_Quad_getNodes Finley_Quad_getNodesTetMacro;
00084 Finley_Quad_getNodes Finley_Quad_getNodesRecMacro;
00085 Finley_Quad_getNodes Finley_Quad_getNodesHexMacro;
00086 Finley_Quad_getNodes Finley_Quad_getNodesLineMacro;
00087 
00088 
00089 
00090 Finley_Quad_getNumNodes Finley_Quad_getNumNodesPoint;
00091 Finley_Quad_getNumNodes Finley_Quad_getNumNodesLine;
00092 Finley_Quad_getNumNodes Finley_Quad_getNumNodesTri;
00093 Finley_Quad_getNumNodes Finley_Quad_getNumNodesRec;
00094 Finley_Quad_getNumNodes Finley_Quad_getNumNodesTet;
00095 Finley_Quad_getNumNodes Finley_Quad_getNumNodesHex;
00096 
00097 void Finley_Quad_makeNodesOnFace(dim_t, dim_t,double*,double*, Finley_Quad_getNodes);
00098 Finley_QuadInfo* Finley_QuadInfo_getInfo(Finley_QuadTypeId id);
00099 
00100 #endif /* #ifndef INC_FINLEY_QUADRATURE */
00101