1 // Copyright (C) 2007-2016 CEA/DEN, EDF R&D
3 // This library is free software; you can redistribute it and/or
4 // modify it under the terms of the GNU Lesser General Public
5 // License as published by the Free Software Foundation; either
6 // version 2.1 of the License, or (at your option) any later version.
8 // This library is distributed in the hope that it will be useful,
9 // but WITHOUT ANY WARRANTY; without even the implied warranty of
10 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
11 // Lesser General Public License for more details.
13 // You should have received a copy of the GNU Lesser General Public
14 // License along with this library; if not, write to the Free Software
15 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
17 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
20 #ifndef __INTERPKERNELGAUSSCOORDS_HXX__
21 #define __INTERPKERNELGAUSSCOORDS_HXX__
23 #include "INTERPKERNELDefines.hxx"
24 #include "NormalizedUnstructuredMesh.hxx"
25 #include "InterpKernelException.hxx"
29 namespace INTERP_KERNEL
31 typedef std::vector<double> DataVector;
32 typedef std::vector<int> IndexVector;
34 //Class to store Gauss Points information
38 INTERPKERNEL_EXPORT GaussInfo( NormalizedCellType theGeometry,
39 const DataVector& theGaussCoord,
41 const DataVector& theReferenceCoord,
44 INTERPKERNEL_EXPORT ~GaussInfo();
46 INTERPKERNEL_EXPORT NormalizedCellType getCellType() const;
48 INTERPKERNEL_EXPORT int getGaussCoordDim() const;
49 INTERPKERNEL_EXPORT int getReferenceCoordDim() const;
50 INTERPKERNEL_EXPORT DataVector getGaussCoords() const { return _my_gauss_coord; }
51 INTERPKERNEL_EXPORT DataVector getRefCoords() const { return _my_reference_coord; }
52 INTERPKERNEL_EXPORT NormalizedCellType getGeoType() const { return _my_geometry; }
54 INTERPKERNEL_EXPORT int getNbGauss() const;
55 INTERPKERNEL_EXPORT int getNbRef() const;
57 INTERPKERNEL_EXPORT GaussInfo convertToLinear() const;
59 INTERPKERNEL_EXPORT const double* getFunctionValues( const int theGaussId ) const;
61 INTERPKERNEL_EXPORT void initLocalInfo();
63 INTERPKERNEL_EXPORT static std::vector<double> NormalizeCoordinatesIfNecessary(NormalizedCellType ct, int inputDim, const std::vector<double>& inputArray);
66 static const double TETRA4A_REF[12];
67 static const double TETRA4B_REF[12];
68 static const double TETRA10A_REF[30];
69 static const double TETRA10B_REF[30];
72 static bool IsSatisfy(const std::vector<double>& ref1, const std::vector<double>& ref2);
89 static void Quad4aInit(GaussInfo& obj) { obj.quad4aInit(); }
91 static void Quad4bInit(GaussInfo& obj) { obj.quad4bInit(); }
93 static void Quad4cInit(GaussInfo& obj) { obj.quad4cInit(); }
94 void quad4DegSeg2Init();
95 static void Quad4DegSeg2Init(GaussInfo& obj) { obj.quad4DegSeg2Init(); }
112 static void Penta6aInit(GaussInfo& obj) { obj.penta6aInit(); }
114 static void Penta6bInit(GaussInfo& obj) { obj.penta6bInit(); }
115 void penta6DegTria3aInit();
116 static void Penta6DegTria3aInit(GaussInfo& obj) { obj.penta6DegTria3aInit(); }
117 void penta6DegTria3bInit();
118 static void Penta6DegTria3bInit(GaussInfo& obj) { obj.penta6DegTria3bInit(); }
121 static void Penta15aInit(GaussInfo& obj) { obj.penta15aInit(); }
123 static void Penta15bInit(GaussInfo& obj) { obj.penta15bInit(); }
126 static void Hexa8aInit(GaussInfo& obj) { obj.hexa8aInit(); }
128 static void Hexa8bInit(GaussInfo& obj) { obj.hexa8bInit(); }
129 void hexa8DegQuad4aInit();
130 static void Hexa8DegQuad4aInit(GaussInfo& obj) { obj.hexa8DegQuad4aInit(); }
131 void hexa8DegQuad4bInit();
132 static void Hexa8DegQuad4bInit(GaussInfo& obj) { obj.hexa8DegQuad4bInit(); }
133 void hexa8DegQuad4cInit();
134 static void Hexa8DegQuad4cInit(GaussInfo& obj) { obj.hexa8DegQuad4cInit(); }
140 //INFORMATION from MEDMEM
141 NormalizedCellType _my_geometry; //Cell type
143 int _my_nb_gauss; //Nb of the gauss points for element
144 DataVector _my_gauss_coord; //Gauss coordinates
146 int _my_nb_ref; //Nb of the nodes for element:
152 DataVector _my_reference_coord; //Reference coordinates
155 DataVector _my_local_reference_coord; //Vector to store reference coordinates
156 int _my_local_ref_dim; //Dimension of the local reference coordinates:
159 // (x, y, z) - 3D case
160 int _my_local_nb_ref; //Nb of the local reference coordinates
162 DataVector _my_function_value; //Shape Function values
166 //Class for calculation of the coordinates of the gauss points
171 INTERPKERNEL_EXPORT GaussCoords();
172 INTERPKERNEL_EXPORT ~GaussCoords();
174 INTERPKERNEL_EXPORT void addGaussInfo( NormalizedCellType theGeometry,
176 const double* theGaussCoord,
178 const double* theReferenceCoord,
181 INTERPKERNEL_EXPORT double* calculateCoords( NormalizedCellType theGeometry,
182 const double* theNodeCoords,
183 const int theSpaceDim,
184 const int* theIndex);
186 INTERPKERNEL_EXPORT void calculateCoords( NormalizedCellType theGeometry,
187 const double* theNodeCoords,
188 const int theSpaceDim,
192 const GaussInfo *getInfoGivenCellType(NormalizedCellType cellType);
193 void calculateCoordsAlg(const GaussInfo *info, const double* theNodeCoords, const int theSpaceDim, const int *theIndex,
196 typedef std::vector<GaussInfo*> GaussInfoVector;
197 GaussInfoVector _my_gauss_info;
200 #endif //INTERPKERNELGAUSSCOORDS