escript  Revision_
Quadrature.h
Go to the documentation of this file.
00001 
00002 /*****************************************************************************
00003 *
00004 * Copyright (c) 2003-2014 by University of Queensland
00005 * http://www.uq.edu.au
00006 *
00007 * Primary Business: Queensland, Australia
00008 * Licensed under the Open Software License version 3.0
00009 * http://www.opensource.org/licenses/osl-3.0.php
00010 *
00011 * Development until 2012 by Earth Systems Science Computational Center (ESSCC)
00012 * Development 2012-2013 by School of Earth Sciences
00013 * Development from 2014 by Centre for Geoscience Computing (GeoComp)
00014 *
00015 *****************************************************************************/
00016 
00017 
00018 /****************************************************************************
00019 
00020   Finley: integration schemes for element shapes Tri, Quad, Hex, Tet, Line,
00021           Point
00022 
00023 *****************************************************************************/
00024 
00025 #ifndef __FINLEY_QUADRATURE_H__
00026 #define __FINLEY_QUADRATURE_H__
00027 
00028 #include "Finley.h"
00029 
00030 #define MAX_numQuadNodesLine 10
00031 
00032 namespace finley {
00033 
00034 typedef enum {
00035     PointQuad,
00036     LineQuad,
00037     TriQuad,
00038     RecQuad,
00039     TetQuad,
00040     HexQuad,
00041     NoQuad   // marks end of list
00042 } QuadTypeId;
00043 
00044 typedef void (Quad_getNodes) (int, double*, double*);
00045 typedef int (Quad_getNumNodes) (int);
00046 typedef int (Quad_getMacro) (int numSubElements, int numQuadNodes,
00047                              const double* quadNodes,
00048                              const double* quadWeights,
00049                              int numF, const double* dFdv,
00050                              int new_len, double* new_quadNodes,
00051                              double* new_quadWeights, double* new_dFfv);
00052 
00053 struct QuadInfo {
00055     QuadTypeId TypeId;
00057     const char* Name;
00059     int numDim;
00061     int numVertices;
00063     Quad_getNodes* getQuadNodes;
00066     Quad_getNumNodes* getNumQuadNodes;
00068     Quad_getMacro *getMacro;
00069 };
00070 
00071 
00072 /****** Interfaces ******/
00073 
00074 Quad_getMacro Quad_MacroPoint;
00075 Quad_getMacro Quad_MacroLine;
00076 Quad_getMacro Quad_MacroTri;
00077 Quad_getMacro Quad_MacroRec;
00078 Quad_getMacro Quad_MacroTet;
00079 Quad_getMacro Quad_MacroHex;
00080 
00081 Quad_getNodes Quad_getNodesTri;
00082 Quad_getNodes Quad_getNodesTet;
00083 Quad_getNodes Quad_getNodesRec;
00084 Quad_getNodes Quad_getNodesHex;
00085 Quad_getNodes Quad_getNodesLine;
00086 Quad_getNodes Quad_getNodesPoint;
00087 Quad_getNodes Quad_getNodesTriOnFace;
00088 Quad_getNodes Quad_getNodesRecOnFace;
00089 Quad_getNodes Quad_getNodesLineOnFace;
00090 Quad_getNodes Quad_getNodesPointOnFace;
00091 Quad_getNodes Quad_getNodesTriMacro;
00092 Quad_getNodes Quad_getNodesTetMacro;
00093 Quad_getNodes Quad_getNodesRecMacro;
00094 Quad_getNodes Quad_getNodesHexMacro;
00095 Quad_getNodes Quad_getNodesLineMacro;
00096 
00097 Quad_getNumNodes Quad_getNumNodesPoint;
00098 Quad_getNumNodes Quad_getNumNodesLine;
00099 Quad_getNumNodes Quad_getNumNodesTri;
00100 Quad_getNumNodes Quad_getNumNodesRec;
00101 Quad_getNumNodes Quad_getNumNodesTet;
00102 Quad_getNumNodes Quad_getNumNodesHex;
00103 
00104 void Quad_makeNodesOnFace(int, int, double*, double*, Quad_getNodes);
00105 const QuadInfo* QuadInfo_getInfo(QuadTypeId id);
00106 
00107 } // namespace finley
00108 
00109 #endif // __FINLEY_QUADRATURE_H__
00110