1 // Copyright (C) 2007-2021 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
21 #include "InterpKernelGaussCoords.hxx"
22 #include "CellModel.hxx"
29 using namespace INTERP_KERNEL;
31 const double GaussInfo::SEG2A_REF[2]={-1.0, 1.0};
33 const double GaussInfo::SEG2B_REF[2]={0., 1.0};
35 const double GaussInfo::SEG3_REF[3]={-1.0, 1.0, 0.0};
37 const double GaussInfo::TRIA3A_REF[6]={-1.0, 1.0, -1.0, -1.0, 1.0, -1.0};
39 const double GaussInfo::TRIA3B_REF[6]={0.0, 0.0, 1.0, 0.0, 0.0, 1.0};
41 const double GaussInfo::TRIA6A_REF[12]={-1.0, 1.0, -1.0, -1.0, 1.0, -1.0, -1.0, 1.0, 0.0, -1.0, 0.0, 0.0};
43 const double GaussInfo::TRIA6B_REF[12]={0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 0.5, 0.0, 0.5, 0.5, 0.0, 0.5};
45 const double GaussInfo::TRIA7A_REF[14]={0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 0.5, 0.0, 0.5, 0.5, 0.0, 0.5, 0.3333333333333333, 0.3333333333333333};
47 const double GaussInfo::QUAD4A_REF[8]={-1.0, 1.0, -1.0, -1.0, 1.0, -1.0, 1.0, 1.0};
49 const double GaussInfo::QUAD4B_REF[8]={-1.0, -1.0, 1.0, -1.0, 1.0, 1.0, -1.0, 1.0};
51 const double GaussInfo::QUAD8A_REF[16]={-1.0, 1.0, -1.0, -1.0, 1.0, -1.0, 1.0, 1.0, -1.0, 0.0, 0.0, -1.0, 1.0, 0.0, 0.0, 1.0};
53 const double GaussInfo::QUAD8B_REF[16]={-1.0, -1.0, 1.0, -1.0, 1.0, 1.0, -1.0, 1.0, 0.0, -1.0, 1.0, 0.0, 0.0, 1.0, -1.0, 0.0};
55 const double GaussInfo::QUAD9A_REF[18]={-1.0, -1.0, 1.0, -1.0, 1.0, 1.0, -1.0, 1.0, 0.0, -1.0, 1.0, 0.0, 0.0, 1.0, -1.0, 0.0, 0.0, 0.0};
57 const double GaussInfo::TETRA4A_REF[12]={0.0, 1.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0};
59 const double GaussInfo::TETRA4B_REF[12]={0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0, 1.0, 0.0, 0.0};
61 const double GaussInfo::TETRA10A_REF[30]={0.0, 1.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.5, 0.5, 0.0, 0.0, 0.5, 0.0, 0.5, 0.0, 0.5, 0.5, 0.0, 0.5, 0.0, 0.5, 0.5, 0.0, 0.0};
63 const double GaussInfo::TETRA10B_REF[30]={0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0, 1.0, 0.0, 0.0, 0.0, 0.5, 0.0, 0.0, 0.0, 0.5, 0.0, 0.5, 0.5, 0.5, 0.5, 0.0, 0.5, 0.0, 0.0, 0.5, 0.0, 0.5};
65 const double GaussInfo::PYRA5A_REF[15]={1.0, 0.0, 0.0, 0.0, 1.0, 0.0, -1.0, 0.0, 0.0, 0.0, -1.0, 0.0, 0.0, 0.0, 1.0};
67 const double GaussInfo::PYRA5B_REF[15]={1.0, 0.0, 0.0, 0.0, -1.0, 0.0, -1.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 1.0};
69 const double GaussInfo::PYRA13A_REF[39]={1.0, 0.0, 0.0, 0.0, 1.0, 0.0, -1.0, 0.0, 0.0, 0.0, -1.0, 0.0, 0.0, 0.0, 1.0, 0.5, 0.5, 0.0, -0.5, 0.5, 0.0, -0.5, -0.5, 0.0, 0.5, -0.5, 0.0, 0.5, 0.0, 0.5, 0.0, 0.5, 0.5, -0.5, 0.0, 0.5, 0.0, -0.5, 0.5};
71 const double GaussInfo::PYRA13B_REF[39]={1.0, 0.0, 0.0, 0.0, -1.0, 0.0, -1.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 1.0, 0.5, -0.5, 0.0, -0.5, -0.5, 0.0, -0.5, 0.5, 0.0, 0.5, 0.5, 0.0, 0.5, 0.0, 0.5, 0.0, -0.5, 0.5, -0.5, 0.0, 0.5, 0.0, 0.5, 0.5};
73 const double GaussInfo::PENTA6A_REF[18]={-1.0, 1.0, 0.0, -1.0, -0.0, 1.0, -1.0, 0.0, 0.0, 1.0, 1.0, 0.0, 1.0, 0.0, 1.0, 1.0, 0.0, 0.0};
75 const double GaussInfo::PENTA6B_REF[18]={-1.0, 1.0, 0.0, -1.0, 0.0, 0.0, -1.0, -0.0, 1.0, 1.0, 1.0, 0.0, 1.0, 0.0, 0.0, 1.0, 0.0, 1.0};
77 const double GaussInfo::PENTA15A_REF[45]={-1.0, 1.0, 0.0, -1.0, -0.0, 1.0, -1.0, 0.0, 0.0, 1.0, 1.0, 0.0, 1.0, 0.0, 1.0, 1.0, 0.0, 0.0, -1.0, 0.5, 0.5, -1.0, 0.0, 0.5, -1.0, 0.5, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 1.0, 0.5, 0.5, 1.0, 0.0, 0.5, 1.0, 0.5, 0.0};
79 const double GaussInfo::PENTA15B_REF[45]={-1.0, 1.0, 0.0, -1.0, 0.0, 0.0, -1.0, -0.0, 1.0, 1.0, 1.0, 0.0, 1.0, 0.0, 0.0, 1.0, 0.0, 1.0, -1.0, 0.5, 0.0, -1.0, 0.0, 0.5, -1.0, 0.5, 0.5, 1.0, 0.5, 0.0, 1.0, 0.0, 0.5, 1.0, 0.5, 0.5, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0};
81 const double GaussInfo::PENTA18A_REF[54]={-1.0, 1.0, 0.0, -1.0, -0.0, 1.0, -1.0, 0.0, 0.0, 1.0, 1.0, 0.0, 1.0, 0.0, 1.0, 1.0, 0.0, 0.0, -1.0, 0.5, 0.5, -1.0, 0.0, 0.5, -1.0, 0.5, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 1.0, 0.5, 0.5, 1.0, 0.0, 0.5, 1.0, 0.5, 0.0, 0.0, 0.5, 0.5, 0.0, 0.0, 0.5, 0.0, 0.5, 0.0};
83 const double GaussInfo::PENTA18B_REF[54]={-1.0, 1.0, 0.0, -1.0, 0.0, 0.0, -1.0, -0.0, 1.0, 1.0, 1.0, 0.0, 1.0, 0.0, 0.0, 1.0, 0.0, 1.0, -1.0, 0.5, 0.0, -1.0, 0.0, 0.5, -1.0, 0.5, 0.5, 1.0, 0.5, 0.0, 1.0, 0.0, 0.5, 1.0, 0.5, 0.5, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.5, 0.0, 0.0, 0.0, 0.5, 0.0, 0.5, 0.5};
85 const double GaussInfo::HEXA8A_REF[24]={-1.0, -1.0, -1.0, 1.0, -1.0, -1.0, 1.0, 1.0, -1.0, -1.0, 1.0, -1.0, -1.0, -1.0, 1.0, 1.0, -1.0, 1.0, 1.0, 1.0, 1.0, -1.0, 1.0, 1.0};
87 const double GaussInfo::HEXA8B_REF[24]={-1.0, -1.0, -1.0, -1.0, 1.0, -1.0, 1.0, 1.0, -1.0, 1.0, -1.0, -1.0, -1.0, -1.0, 1.0, -1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, -1.0, 1.0};
89 const double GaussInfo::HEXA20A_REF[60]={-1.0, -1.0, -1.0, 1.0, -1.0, -1.0, 1.0, 1.0, -1.0, -1.0, 1.0, -1.0, -1.0, -1.0, 1.0, 1.0, -1.0, 1.0, 1.0, 1.0, 1.0, -1.0, 1.0, 1.0, 0.0, -1.0, -1.0, 1.0, 0.0, -1.0, 0.0, 1.0, -1.0, -1.0, 0.0, -1.0, -1.0, -1.0, 0.0, 1.0, -1.0, 0.0, 1.0, 1.0, 0.0, -1.0, 1.0, 0.0, 0.0, -1.0, 1.0, 1.0, 0.0, 1.0, 0.0, 1.0, 1.0, -1.0, 0.0, 1.0};
91 const double GaussInfo::HEXA20B_REF[60]={-1.0, -1.0, -1.0, -1.0, 1.0, -1.0, 1.0, 1.0, -1.0, 1.0, -1.0, -1.0, -1.0, -1.0, 1.0, -1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, -1.0, 1.0, -1.0, 0.0, -1.0, 0.0, 1.0, -1.0, 1.0, 0.0, -1.0, 0.0, -1.0, -1.0, -1.0, 0.0, 1.0, 0.0, 1.0, 1.0, 1.0, 0.0, 1.0, 0.0, -1.0, 1.0, -1.0, -1.0, 0.0, -1.0, 1.0, 0.0, 1.0, 1.0, 0.0, 1.0, -1.0, 0.0};
93 const double GaussInfo::HEXA27A_REF[81]={-1.0, -1.0, -1.0, -1.0, 1.0, -1.0, 1.0, 1.0, -1.0, 1.0, -1.0, -1.0, -1.0, -1.0, 1.0, -1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, -1.0, 1.0, -1.0, 0.0, -1.0, 0.0, 1.0, -1.0, 1.0, 0.0, -1.0, 0.0, -1.0, -1.0, -1.0, 0.0, 1.0, 0.0, 1.0, 1.0, 1.0, 0.0, 1.0, 0.0, -1.0, 1.0, -1.0, -1.0, 0.0, -1.0, 1.0, 0.0, 1.0, 1.0, 0.0, 1.0, -1.0, 0.0, 0.0, 0.0, -1.0, -1.0, 0.0, 0.0, 0.0, 1.0, 0.0, 1.0, 0.0, 0.0, 0.0, -1.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0};
95 //Define common part of the code in the MACRO
96 //---------------------------------------------------------------
97 #define LOCAL_COORD_MACRO_BEGIN \
98 _my_local_reference_coord.resize( _my_local_ref_dim*_my_local_nb_ref ); \
99 for( int refId = 0; refId < _my_local_nb_ref; refId++ ) \
101 double* coords = &_my_local_reference_coord[ refId*_my_local_ref_dim ]; \
105 //---------------------------------------------------------------
106 #define LOCAL_COORD_MACRO_END \
110 //---------------------------------------------------------------
111 #define SHAPE_FUN_MACRO_BEGIN \
112 for( int gaussId = 0 ; gaussId < _my_nb_gauss ; gaussId++ ) \
114 double* funValue = &_my_function_value[ gaussId * _my_nb_ref ]; \
115 const double* gc = &_my_gauss_coord[ gaussId * getGaussCoordDim() ];
117 //---------------------------------------------------------------
118 #define SHAPE_FUN_MACRO_END \
121 #define CHECK_MACRO \
124 std::ostringstream stream; \
125 stream << "Error in the gauss localization for the cell with type "; \
126 stream << cellModel.getRepr(); \
128 throw INTERP_KERNEL::Exception(stream.str().c_str()); \
132 //---------------------------------------------------------------
133 static bool IsEqual(double theLeft, double theRight)
135 static double EPS = 1.0E-3;
136 if(fabs(theLeft) + fabs(theRight) > EPS)
137 return fabs(theLeft-theRight)/(fabs(theLeft)+fabs(theRight)) < EPS;
142 ////////////////////////////////////////////////////////////////////////////////////////////////
143 // GAUSS INFO CLASS //
144 ////////////////////////////////////////////////////////////////////////////////////////////////
147 * Constructor of the GaussInfo
149 GaussInfo::GaussInfo( NormalizedCellType theGeometry,
150 const DataVector& theGaussCoord,
152 const DataVector& theReferenceCoord,
154 _my_geometry(theGeometry),
155 _my_nb_gauss(theNbGauss),
156 _my_gauss_coord(theGaussCoord),
157 _my_nb_ref(theNbRef),
158 _my_reference_coord(theReferenceCoord)
161 //Allocate shape function values
162 _my_function_value.resize( _my_nb_gauss * _my_nb_ref );
168 GaussInfo::~GaussInfo()
173 * Return dimension of the gauss coordinates
175 int GaussInfo::getGaussCoordDim() const
179 return (int)_my_gauss_coord.size()/_my_nb_gauss;
188 * Return dimension of the reference coordinates
190 int GaussInfo::getReferenceCoordDim() const
194 return (int)(_my_reference_coord.size()/_my_nb_ref);
203 * Return type of the cell.
205 NormalizedCellType GaussInfo::getCellType() const
211 * Return Nb of the gauss points.
213 int GaussInfo::getNbGauss() const
219 * Return Nb of the reference coordinates.
221 int GaussInfo::getNbRef() const
226 GaussInfo GaussInfo::convertToLinear() const
232 std::vector<double> a(SEG3_REF,SEG3_REF+3);
233 if(IsSatisfy(a,_my_reference_coord))
235 std::vector<double> c(SEG2A_REF,SEG2A_REF+2);
236 return GaussInfo(NORM_SEG2,_my_gauss_coord,getNbGauss(),c,2);
238 throw INTERP_KERNEL::Exception("GaussInfo::convertToLinear : not recognized pattern for SEG3 !");
242 std::vector<double> a(TRIA6A_REF,TRIA6A_REF+12),b(TRIA6B_REF,TRIA6B_REF+12);
243 if(IsSatisfy(a,_my_reference_coord))
245 std::vector<double> c(TRIA3A_REF,TRIA3A_REF+6);
246 return GaussInfo(NORM_TRI3,_my_gauss_coord,getNbGauss(),c,3);
248 if(IsSatisfy(b,_my_reference_coord))
250 std::vector<double> c(TRIA3B_REF,TRIA3B_REF+6);
251 return GaussInfo(NORM_TRI3,_my_gauss_coord,getNbGauss(),c,3);
253 throw INTERP_KERNEL::Exception("GaussInfo::convertToLinear : not recognized pattern for TRI6 !");
257 std::vector<double> a(TRIA7A_REF,TRIA7A_REF+14);
258 if(IsSatisfy(a,_my_reference_coord))
260 std::vector<double> c(TRIA3B_REF,TRIA3B_REF+6);
261 return GaussInfo(NORM_TRI3,_my_gauss_coord,getNbGauss(),c,3);
263 throw INTERP_KERNEL::Exception("GaussInfo::convertToLinear : not recognized pattern for TRI7 !");
267 std::vector<double> a(QUAD8A_REF,QUAD8A_REF+16),b(QUAD8B_REF,QUAD8B_REF+16);
268 if(IsSatisfy(a,_my_reference_coord))
270 std::vector<double> c(QUAD4A_REF,QUAD4A_REF+8);
271 return GaussInfo(NORM_QUAD4,_my_gauss_coord,getNbGauss(),c,4);
273 if(IsSatisfy(b,_my_reference_coord))
275 std::vector<double> c(QUAD4B_REF,QUAD4B_REF+8);
276 return GaussInfo(NORM_QUAD4,_my_gauss_coord,getNbGauss(),c,4);
278 throw INTERP_KERNEL::Exception("GaussInfo::convertToLinear : not recognized pattern for QUAD8 !");
282 std::vector<double> a(QUAD9A_REF,QUAD9A_REF+18);
283 if(IsSatisfy(a,_my_reference_coord))
285 std::vector<double> c(QUAD4B_REF,QUAD4B_REF+8);
286 return GaussInfo(NORM_QUAD4,_my_gauss_coord,getNbGauss(),c,4);
288 throw INTERP_KERNEL::Exception("GaussInfo::convertToLinear : not recognized pattern for QUAD9 !");
292 std::vector<double> a(TETRA10A_REF,TETRA10A_REF+30),b(TETRA10B_REF,TETRA10B_REF+30);
293 if(IsSatisfy(a,_my_reference_coord))
295 std::vector<double> c(TETRA4A_REF,TETRA4A_REF+12);
296 return GaussInfo(NORM_TETRA4,_my_gauss_coord,getNbGauss(),c,4);
298 if(IsSatisfy(b,_my_reference_coord))
300 std::vector<double> c(TETRA4B_REF,TETRA4B_REF+12);
301 return GaussInfo(NORM_TETRA4,_my_gauss_coord,getNbGauss(),c,4);
303 throw INTERP_KERNEL::Exception("GaussInfo::convertToLinear : not recognized pattern for TETRA10 !");
307 std::vector<double> a(PYRA13A_REF,PYRA13A_REF+39),b(PYRA13B_REF,PYRA13B_REF+39);
308 if(IsSatisfy(a,_my_reference_coord))
310 std::vector<double> c(PYRA5A_REF,PYRA5A_REF+15);
311 return GaussInfo(NORM_PYRA5,_my_gauss_coord,getNbGauss(),c,5);
313 if(IsSatisfy(b,_my_reference_coord))
315 std::vector<double> c(PYRA5B_REF,PYRA5B_REF+15);
316 return GaussInfo(NORM_PYRA5,_my_gauss_coord,getNbGauss(),c,5);
318 throw INTERP_KERNEL::Exception("GaussInfo::convertToLinear : not recognized pattern for PYRA13 !");
322 std::vector<double> a(PENTA15A_REF,PENTA15A_REF+45),b(PENTA15B_REF,PENTA15B_REF+45);
323 if(IsSatisfy(a,_my_reference_coord))
325 std::vector<double> c(PENTA6A_REF,PENTA6A_REF+18);
326 return GaussInfo(NORM_PENTA6,_my_gauss_coord,getNbGauss(),c,6);
328 if(IsSatisfy(b,_my_reference_coord))
330 std::vector<double> c(PENTA6B_REF,PENTA6B_REF+18);
331 return GaussInfo(NORM_PENTA6,_my_gauss_coord,getNbGauss(),c,6);
333 throw INTERP_KERNEL::Exception("GaussInfo::convertToLinear : not recognized pattern for PENTA15 !");
337 std::vector<double> a(PENTA18A_REF,PENTA18A_REF+54),b(PENTA18B_REF,PENTA18B_REF+54);
338 if(IsSatisfy(a,_my_reference_coord))
340 std::vector<double> c(PENTA6A_REF,PENTA6A_REF+18);
341 return GaussInfo(NORM_PENTA6,_my_gauss_coord,getNbGauss(),c,6);
343 if(IsSatisfy(b,_my_reference_coord))
345 std::vector<double> c(PENTA6B_REF,PENTA6B_REF+18);
346 return GaussInfo(NORM_PENTA6,_my_gauss_coord,getNbGauss(),c,6);
348 throw INTERP_KERNEL::Exception("GaussInfo::convertToLinear : not recognized pattern for PENTA18 !");
352 std::vector<double> a(HEXA20A_REF,HEXA20A_REF+60),b(HEXA20B_REF,HEXA20B_REF+60);
353 if(IsSatisfy(a,_my_reference_coord))
355 std::vector<double> c(HEXA8A_REF,HEXA8A_REF+24);
356 return GaussInfo(NORM_HEXA8,_my_gauss_coord,getNbGauss(),c,8);
358 if(IsSatisfy(b,_my_reference_coord))
360 std::vector<double> c(HEXA8B_REF,HEXA8B_REF+24);
361 return GaussInfo(NORM_HEXA8,_my_gauss_coord,getNbGauss(),c,8);
363 throw INTERP_KERNEL::Exception("GaussInfo::convertToLinear : not recognized pattern for HEXA20 !");
367 std::vector<double> a(HEXA27A_REF,HEXA27A_REF+81);
368 if(IsSatisfy(a,_my_reference_coord))
370 std::vector<double> c(HEXA8B_REF,HEXA8B_REF+24);
371 return GaussInfo(NORM_HEXA8,_my_gauss_coord,getNbGauss(),c,8);
373 throw INTERP_KERNEL::Exception("GaussInfo::convertToLinear : not recognized pattern for HEXA27 !");
376 throw INTERP_KERNEL::Exception("GaussInfo::convertToLinear : not implemented yet for other types than TETRA10, HEXA20, HEXA27, TRI3, QUAD8, QUAD8, PYRA13, PENTA15 !");
381 bool GaussInfo::IsSatisfy(const std::vector<double>& ref1, const std::vector<double>& ref2)
383 std::size_t sz(ref1.size());
386 for(std::size_t i=0;i<sz;i++)
387 if(!IsEqual(ref1[i],ref2[i]))
395 bool GaussInfo::isSatisfy()
398 bool anIsSatisfy = ((_my_local_nb_ref == _my_nb_ref) && (_my_local_ref_dim == getReferenceCoordDim()));
402 for( int refId = 0; refId < _my_local_nb_ref; refId++ )
404 double* refCoord = &_my_reference_coord[ refId*_my_local_ref_dim ];
405 double* localRefCoord = &_my_local_reference_coord[ refId*_my_local_ref_dim ];
406 bool anIsEqual = false;
407 for( int dimId = 0; dimId < _my_local_ref_dim; dimId++ )
409 anIsEqual = IsEqual( localRefCoord[dimId], refCoord[dimId]);
420 std::vector<double> GaussInfo::NormalizeCoordinatesIfNecessary(NormalizedCellType ct, int inputDim, const std::vector<double>& inputArray)
422 std::size_t sz(inputArray.size()),dim((std::size_t)inputDim);
424 throw INTERP_KERNEL::Exception("GaussInfo::NormalizeCoordinatesIfNecessary : invalid dimension ! Must be !=0 !");
426 throw INTERP_KERNEL::Exception("GaussInfo::NormalizeCoordinatesIfNecessary : invalid input array ! Inconsistent with the given dimension !");
427 const CellModel& cm(CellModel::GetCellModel(ct));
428 std::size_t baseDim((std::size_t)cm.getDimension());
431 std::size_t nbOfItems(sz/dim);
432 std::vector<double> ret(nbOfItems*baseDim);
435 for(std::size_t i=0;i<nbOfItems;i++)
439 ret[i*baseDim+j]=inputArray[i*dim+j];
446 for(std::size_t i=0;i<nbOfItems;i++)
450 ret[i*baseDim+j]=inputArray[i*dim+j];
456 typedef void (*MapToShapeFunction)(GaussInfo& obj);
459 * Initialize the internal vectors
461 void GaussInfo::initLocalInfo()
463 bool aSatify = false;
464 const CellModel& cellModel(CellModel::GetCellModel(_my_geometry));
465 switch( _my_geometry )
468 _my_local_ref_dim = 0;
469 _my_local_nb_ref = 1;
471 aSatify = isSatisfy();
476 _my_local_ref_dim = 1;
477 _my_local_nb_ref = 2;
479 aSatify = isSatisfy();
483 aSatify = isSatisfy();
489 _my_local_ref_dim = 1;
490 _my_local_nb_ref = 3;
492 aSatify = isSatisfy();
497 _my_local_ref_dim = 2;
498 _my_local_nb_ref = 3;
500 aSatify = isSatisfy();
505 aSatify = isSatisfy();
511 _my_local_ref_dim = 2;
512 _my_local_nb_ref = 6;
514 aSatify = isSatisfy();
518 aSatify = isSatisfy();
524 _my_local_ref_dim = 2;
525 _my_local_nb_ref = 7;
527 aSatify = isSatisfy();
533 _my_local_ref_dim = 2;
534 _my_local_nb_ref = 4;
535 MapToShapeFunction QUAD4PTR[]={Quad4aInit,Quad4bInit,Quad4cInit,Quad4DegSeg2Init};
536 std::size_t NB_OF_QUAD4PTR(sizeof(QUAD4PTR)/sizeof(MapToShapeFunction));
537 for(std::size_t i=0;i<NB_OF_QUAD4PTR && !aSatify;i++)
539 (QUAD4PTR[i])(*this);
540 aSatify = isSatisfy();
548 _my_local_ref_dim = 2;
549 _my_local_nb_ref = 8;
551 aSatify = isSatisfy();
556 aSatify = isSatisfy();
562 _my_local_ref_dim = 2;
563 _my_local_nb_ref = 9;
565 aSatify = isSatisfy();
570 _my_local_ref_dim = 3;
571 _my_local_nb_ref = 4;
573 aSatify = isSatisfy();
578 aSatify = isSatisfy();
584 _my_local_ref_dim = 3;
585 _my_local_nb_ref = 10;
587 aSatify = isSatisfy();
592 aSatify = isSatisfy();
598 _my_local_ref_dim = 3;
599 _my_local_nb_ref = 5;
601 aSatify = isSatisfy();
606 aSatify = isSatisfy();
612 _my_local_ref_dim = 3;
613 _my_local_nb_ref = 13;
615 aSatify = isSatisfy();
620 aSatify = isSatisfy();
627 _my_local_ref_dim = 3;
628 _my_local_nb_ref = 6;
629 MapToShapeFunction PENTA6PTR[]={Penta6aInit,Penta6bInit,Penta6DegTria3aInit,Penta6DegTria3bInit};
630 std::size_t NB_OF_PENTA6PTR(sizeof(PENTA6PTR)/sizeof(MapToShapeFunction));
631 for(std::size_t i=0;i<NB_OF_PENTA6PTR && !aSatify;i++)
633 (PENTA6PTR[i])(*this);
634 aSatify = isSatisfy();
640 /* _my_local_ref_dim = 3;
641 _my_local_nb_ref = 6;
643 aSatify = isSatisfy();
648 aSatify = isSatisfy();
655 _my_local_ref_dim = 3;
656 _my_local_nb_ref = 15;
657 MapToShapeFunction PENTA15PTR[]={Penta15aInit,Penta15bInit};
658 std::size_t NB_OF_PENTA15PTR(sizeof(PENTA15PTR)/sizeof(MapToShapeFunction));
659 for(std::size_t i=0;i<NB_OF_PENTA15PTR && !aSatify;i++)
661 (PENTA15PTR[i])(*this);
662 aSatify = isSatisfy();
670 _my_local_ref_dim = 3;
671 _my_local_nb_ref = 18;
672 MapToShapeFunction PENTA18PTR[]={Penta18aInit,Penta18bInit};
673 std::size_t NB_OF_PENTA18PTR(sizeof(PENTA18PTR)/sizeof(MapToShapeFunction));
674 for(std::size_t i=0;i<NB_OF_PENTA18PTR && !aSatify;i++)
676 (PENTA18PTR[i])(*this);
677 aSatify = isSatisfy();
685 _my_local_ref_dim = 3;
686 _my_local_nb_ref = 8;
687 MapToShapeFunction HEXA8PTR[]={Hexa8aInit,Hexa8bInit,Hexa8DegQuad4aInit,Hexa8DegQuad4bInit,Hexa8DegQuad4cInit};
688 std::size_t NB_OF_HEXA8PTR(sizeof(HEXA8PTR)/sizeof(MapToShapeFunction));
689 for(std::size_t i=0;i<NB_OF_HEXA8PTR && !aSatify;i++)
691 (HEXA8PTR[i])(*this);
692 aSatify = isSatisfy();
699 _my_local_ref_dim = 3;
700 _my_local_nb_ref = 20;
702 aSatify = isSatisfy();
707 aSatify = isSatisfy();
713 _my_local_ref_dim = 3;
714 _my_local_nb_ref = 27;
716 aSatify = isSatisfy();
721 throw INTERP_KERNEL::Exception("Not managed cell type !");
727 * Return shape function value by node id
729 const double* GaussInfo::getFunctionValues( const int theGaussId ) const
731 return &_my_function_value[ _my_nb_ref*theGaussId ];
734 void GaussInfo::point1Init()
736 double *funValue(&_my_function_value[0]);
741 * Init Segment 2 Reference coordinates ans Shape function.
743 void GaussInfo::seg2aInit()
745 LOCAL_COORD_MACRO_BEGIN;
747 coords[0] = SEG2A_REF[0];
750 coords[0] = SEG2A_REF[1];
752 LOCAL_COORD_MACRO_END;
754 SHAPE_FUN_MACRO_BEGIN;
755 funValue[0] = 0.5*(1.0 - gc[0]);
756 funValue[1] = 0.5*(1.0 + gc[0]);
760 void GaussInfo::seg2bInit()
762 LOCAL_COORD_MACRO_BEGIN;
764 coords[0] = SEG2B_REF[0];
767 coords[0] = SEG2B_REF[1];
769 LOCAL_COORD_MACRO_END;
771 SHAPE_FUN_MACRO_BEGIN;
772 funValue[0] = 1.0 - gc[0];
778 * Init Segment 3 Reference coordinates ans Shape function.
780 void GaussInfo::seg3Init()
782 LOCAL_COORD_MACRO_BEGIN;
784 coords[0] = SEG3_REF[0];
787 coords[0] = SEG3_REF[1];
790 coords[0] = SEG3_REF[2];
791 LOCAL_COORD_MACRO_END;
793 SHAPE_FUN_MACRO_BEGIN;
794 funValue[0] = -0.5*(1.0 - gc[0])*gc[0];
795 funValue[1] = 0.5*(1.0 + gc[0])*gc[0];
796 funValue[2] = (1.0 + gc[0])*(1.0 - gc[0]);
801 * Init Triangle Reference coordinates ans Shape function.
804 void GaussInfo::tria3aInit()
806 LOCAL_COORD_MACRO_BEGIN;
808 coords[0] = TRIA3A_REF[0];
809 coords[1] = TRIA3A_REF[1];
812 coords[0] = TRIA3A_REF[2];
813 coords[1] = TRIA3A_REF[3];
816 coords[0] = TRIA3A_REF[4];
817 coords[1] = TRIA3A_REF[5];
819 LOCAL_COORD_MACRO_END;
821 SHAPE_FUN_MACRO_BEGIN;
822 funValue[0] = 0.5*(1.0 + gc[1]);
823 funValue[1] = -0.5*(gc[0] + gc[1]);
824 funValue[2] = 0.5*(1.0 + gc[0]);
829 * Init Triangle Reference coordinates ans Shape function.
832 void GaussInfo::tria3bInit()
834 LOCAL_COORD_MACRO_BEGIN;
836 coords[0] = TRIA3B_REF[0];
837 coords[1] = TRIA3B_REF[1];
840 coords[0] = TRIA3B_REF[2];
841 coords[1] = TRIA3B_REF[3];
844 coords[0] = TRIA3B_REF[4];
845 coords[1] = TRIA3B_REF[5];
847 LOCAL_COORD_MACRO_END;
849 SHAPE_FUN_MACRO_BEGIN;
850 funValue[0] = 1.0 - gc[0] - gc[1];
857 * Init Quadratic Triangle Reference coordinates ans Shape function.
860 void GaussInfo::tria6aInit()
862 LOCAL_COORD_MACRO_BEGIN;
864 coords[0] = TRIA6A_REF[0];
865 coords[1] = TRIA6A_REF[1];
868 coords[0] = TRIA6A_REF[2];
869 coords[1] = TRIA6A_REF[3];
872 coords[0] = TRIA6A_REF[4];
873 coords[1] = TRIA6A_REF[5];
876 coords[0] = TRIA6A_REF[6];
877 coords[1] = TRIA6A_REF[7];
880 coords[0] = TRIA6A_REF[8];
881 coords[1] = TRIA6A_REF[9];
884 coords[0] = TRIA6A_REF[10];
885 coords[1] = TRIA6A_REF[11];
887 LOCAL_COORD_MACRO_END;
889 SHAPE_FUN_MACRO_BEGIN;
890 funValue[0] = 0.5*(1.0 + gc[1])*gc[1];
891 funValue[1] = 0.5*(gc[0] + gc[1])*(gc[0] + gc[1] + 1);
892 funValue[2] = 0.5*(1.0 + gc[0])*gc[0];
893 funValue[3] = -1.0*(1.0 + gc[1])*(gc[0] + gc[1]);
894 funValue[4] = -1.0*(1.0 + gc[0])*(gc[0] + gc[1]);
895 funValue[5] = (1.0 + gc[1])*(1.0 + gc[1]);
900 * Init Quadratic Triangle Reference coordinates ans Shape function.
903 void GaussInfo::tria6bInit()
905 LOCAL_COORD_MACRO_BEGIN;
907 coords[0] = TRIA6B_REF[0];
908 coords[1] = TRIA6B_REF[1];
911 coords[0] = TRIA6B_REF[2];
912 coords[1] = TRIA6B_REF[3];
915 coords[0] = TRIA6B_REF[4];
916 coords[1] = TRIA6B_REF[5];
919 coords[0] = TRIA6B_REF[6];
920 coords[1] = TRIA6B_REF[7];
923 coords[0] = TRIA6B_REF[8];
924 coords[1] = TRIA6B_REF[9];
927 coords[0] = TRIA6B_REF[10];
928 coords[1] = TRIA6B_REF[11];
930 LOCAL_COORD_MACRO_END;
932 SHAPE_FUN_MACRO_BEGIN;
933 funValue[0] = (1.0 - gc[0] - gc[1])*(1.0 - 2.0*gc[0] - 2.0*gc[1]);
934 funValue[1] = gc[0]*(2.0*gc[0] - 1.0);
935 funValue[2] = gc[1]*(2.0*gc[1] - 1.0);
936 funValue[3] = 4.0*gc[0]*(1.0 - gc[0] - gc[1]);
937 funValue[4] = 4.0*gc[0]*gc[1];
938 funValue[5] = 4.0*gc[1]*(1.0 - gc[0] - gc[1]);
942 void GaussInfo::tria7aInit()
944 LOCAL_COORD_MACRO_BEGIN;
946 coords[0] = TRIA7A_REF[0];
947 coords[1] = TRIA7A_REF[1];
950 coords[0] = TRIA7A_REF[2];
951 coords[1] = TRIA7A_REF[3];
954 coords[0] = TRIA7A_REF[4];
955 coords[1] = TRIA7A_REF[5];
958 coords[0] = TRIA7A_REF[6];
959 coords[1] = TRIA7A_REF[7];
962 coords[0] = TRIA7A_REF[8];
963 coords[1] = TRIA7A_REF[9];
966 coords[0] = TRIA7A_REF[10];
967 coords[1] = TRIA7A_REF[11];
970 coords[0] = TRIA7A_REF[12];
971 coords[1] = TRIA7A_REF[13];
973 LOCAL_COORD_MACRO_END;
975 SHAPE_FUN_MACRO_BEGIN;
976 funValue[0]=1-3*(gc[0]+gc[1])+2*(gc[0]*gc[0]+gc[1]*gc[1])+7*gc[0]*gc[1]-3*gc[0]*gc[1]*(gc[0]+gc[1]);
977 funValue[1]=gc[0]*(-1+2*gc[0]+3*gc[1]-3*gc[1]*(gc[0]+gc[1]));
978 funValue[2]=gc[1]*(-1.+3.*gc[0]+2.*gc[1]-3.*gc[0]*(gc[0]+gc[1]));
979 funValue[3]=4*gc[0]*(1-gc[0]-4*gc[1]+3*gc[1]*(gc[0]+gc[1]));
980 funValue[4]=4*gc[0]*gc[1]*(-2+3*(gc[0]+gc[1]));
981 funValue[5]=4*gc[1]*(1-4*gc[0]-gc[1]+3*gc[0]*(gc[0]+gc[1]));
982 funValue[6]=27*gc[0]*gc[1]*(1-gc[0]-gc[1]);
987 * Init Quadrangle Reference coordinates ans Shape function.
990 void GaussInfo::quad4aInit()
992 LOCAL_COORD_MACRO_BEGIN;
994 coords[0] = QUAD4A_REF[0];
995 coords[1] = QUAD4A_REF[1];
998 coords[0] = QUAD4A_REF[2];
999 coords[1] = QUAD4A_REF[3];
1002 coords[0] = QUAD4A_REF[4];
1003 coords[1] = QUAD4A_REF[5];
1006 coords[0] = QUAD4A_REF[6];
1007 coords[1] = QUAD4A_REF[7];
1009 LOCAL_COORD_MACRO_END;
1011 SHAPE_FUN_MACRO_BEGIN;
1012 funValue[0] = 0.25*(1.0 + gc[1])*(1.0 - gc[0]);
1013 funValue[1] = 0.25*(1.0 - gc[1])*(1.0 - gc[0]);
1014 funValue[2] = 0.25*(1.0 - gc[1])*(1.0 + gc[0]);
1015 funValue[3] = 0.25*(1.0 + gc[0])*(1.0 + gc[1]);
1016 SHAPE_FUN_MACRO_END;
1020 * Init Quadrangle Reference coordinates ans Shape function.
1023 void GaussInfo::quad4bInit()
1025 LOCAL_COORD_MACRO_BEGIN;
1027 coords[0] = QUAD4B_REF[0];
1028 coords[1] = QUAD4B_REF[1];
1031 coords[0] = QUAD4B_REF[2];
1032 coords[1] = QUAD4B_REF[3];
1035 coords[0] = QUAD4B_REF[4];
1036 coords[1] = QUAD4B_REF[5];
1039 coords[0] = QUAD4B_REF[6];
1040 coords[1] = QUAD4B_REF[7];
1042 LOCAL_COORD_MACRO_END;
1044 SHAPE_FUN_MACRO_BEGIN;
1045 funValue[0] = 0.25*(1.0 - gc[0])*(1.0 - gc[1]);
1046 funValue[1] = 0.25*(1.0 + gc[0])*(1.0 - gc[1]);
1047 funValue[2] = 0.25*(1.0 + gc[0])*(1.0 + gc[1]);
1048 funValue[3] = 0.25*(1.0 - gc[0])*(1.0 + gc[1]);
1049 SHAPE_FUN_MACRO_END;
1052 void GaussInfo::quad4cInit()
1054 LOCAL_COORD_MACRO_BEGIN;
1072 LOCAL_COORD_MACRO_END;
1074 SHAPE_FUN_MACRO_BEGIN;
1075 funValue[0] = 0.25*(1.0 - gc[0])*(1.0 - gc[1]);
1076 funValue[1] = 0.25*(1.0 - gc[0])*(1.0 + gc[1]);
1077 funValue[2] = 0.25*(1.0 + gc[0])*(1.0 + gc[1]);
1078 funValue[3] = 0.25*(1.0 + gc[0])*(1.0 - gc[1]);
1079 SHAPE_FUN_MACRO_END;
1083 * This shapefunc map is same as degenerated seg2aInit
1085 void GaussInfo::quad4DegSeg2Init()
1087 LOCAL_COORD_MACRO_BEGIN;
1104 LOCAL_COORD_MACRO_END;
1106 SHAPE_FUN_MACRO_BEGIN;
1107 funValue[0] = 0.5*(1.0 - gc[0]);
1108 funValue[1] = 0.5*(1.0 + gc[0]);
1111 SHAPE_FUN_MACRO_END;
1115 * Init Quadratic Quadrangle Reference coordinates ans Shape function.
1118 void GaussInfo::quad8aInit()
1120 LOCAL_COORD_MACRO_BEGIN;
1122 coords[0] = QUAD8A_REF[0];
1123 coords[1] = QUAD8A_REF[1];
1126 coords[0] = QUAD8A_REF[2];
1127 coords[1] = QUAD8A_REF[3];
1130 coords[0] = QUAD8A_REF[4];
1131 coords[1] = QUAD8A_REF[5];
1134 coords[0] = QUAD8A_REF[6];
1135 coords[1] = QUAD8A_REF[7];
1138 coords[0] = QUAD8A_REF[8];
1139 coords[1] = QUAD8A_REF[9];
1142 coords[0] = QUAD8A_REF[10];
1143 coords[1] = QUAD8A_REF[11];
1146 coords[0] = QUAD8A_REF[12];
1147 coords[1] = QUAD8A_REF[13];
1150 coords[0] = QUAD8A_REF[14];
1151 coords[1] = QUAD8A_REF[15];
1153 LOCAL_COORD_MACRO_END;
1155 SHAPE_FUN_MACRO_BEGIN;
1156 funValue[0] = 0.25*(1.0 + gc[1])*(1.0 - gc[0])*(gc[1] - gc[0] - 1.0);
1157 funValue[1] = 0.25*(1.0 - gc[1])*(1.0 - gc[0])*(-gc[1] - gc[0] - 1.0);
1158 funValue[2] = 0.25*(1.0 - gc[1])*(1.0 + gc[0])*(-gc[1] + gc[0] - 1.0);
1159 funValue[3] = 0.25*(1.0 + gc[1])*(1.0 + gc[0])*(gc[1] + gc[0] - 1.0);
1160 funValue[4] = 0.5*(1.0 - gc[0])*(1.0 - gc[1])*(1.0 + gc[1]);
1161 funValue[5] = 0.5*(1.0 - gc[1])*(1.0 - gc[0])*(1.0 + gc[0]);
1162 funValue[6] = 0.5*(1.0 + gc[0])*(1.0 - gc[1])*(1.0 + gc[1]);
1163 funValue[7] = 0.5*(1.0 + gc[1])*(1.0 - gc[0])*(1.0 + gc[0]);
1164 SHAPE_FUN_MACRO_END;
1168 * Init Quadratic Quadrangle Reference coordinates ans Shape function.
1171 void GaussInfo::quad8bInit()
1173 LOCAL_COORD_MACRO_BEGIN;
1175 coords[0] = QUAD8B_REF[0];
1176 coords[1] = QUAD8B_REF[1];
1179 coords[0] = QUAD8B_REF[2];
1180 coords[1] = QUAD8B_REF[3];
1183 coords[0] = QUAD8B_REF[4];
1184 coords[1] = QUAD8B_REF[5];
1187 coords[0] = QUAD8B_REF[6];
1188 coords[1] = QUAD8B_REF[7];
1191 coords[0] = QUAD8B_REF[8];
1192 coords[1] = QUAD8B_REF[9];
1195 coords[0] = QUAD8B_REF[10];
1196 coords[1] = QUAD8B_REF[11];
1199 coords[0] = QUAD8B_REF[12];
1200 coords[1] = QUAD8B_REF[13];
1203 coords[0] = QUAD8B_REF[14];
1204 coords[1] = QUAD8B_REF[15];
1206 LOCAL_COORD_MACRO_END;
1208 SHAPE_FUN_MACRO_BEGIN;
1209 funValue[0] = 0.25*(1.0 - gc[0])*(1.0 - gc[1])*(-1.0 - gc[0] - gc[1]);
1210 funValue[1] = 0.25*(1.0 + gc[0])*(1.0 - gc[1])*(-1.0 + gc[0] - gc[1]);
1211 funValue[2] = 0.25*(1.0 + gc[0])*(1.0 + gc[1])*(-1.0 + gc[0] + gc[1]);
1212 funValue[3] = 0.25*(1.0 - gc[0])*(1.0 + gc[1])*(-1.0 - gc[0] + gc[1]);
1213 funValue[4] = 0.5*(1.0 - gc[0]*gc[0])*(1.0 - gc[1]);
1214 funValue[5] = 0.5*(1.0 - gc[1]*gc[1])*(1.0 + gc[0]);
1215 funValue[6] = 0.5*(1.0 - gc[0]*gc[0])*(1.0 + gc[1]);
1216 funValue[7] = 0.5*(1.0 - gc[1]*gc[1])*(1.0 - gc[0]);
1217 SHAPE_FUN_MACRO_END;
1220 void GaussInfo::quad9aInit()
1222 LOCAL_COORD_MACRO_BEGIN;
1224 coords[0] = QUAD9A_REF[0];
1225 coords[1] = QUAD9A_REF[1];
1228 coords[0] = QUAD9A_REF[2];
1229 coords[1] = QUAD9A_REF[3];
1232 coords[0] = QUAD9A_REF[4];
1233 coords[1] = QUAD9A_REF[5];
1236 coords[0] = QUAD9A_REF[6];
1237 coords[1] = QUAD9A_REF[7];
1240 coords[0] = QUAD9A_REF[8];
1241 coords[1] = QUAD9A_REF[9];
1244 coords[0] = QUAD9A_REF[10];
1245 coords[1] = QUAD9A_REF[11];
1248 coords[0] = QUAD9A_REF[12];
1249 coords[1] = QUAD9A_REF[13];
1252 coords[0] = QUAD9A_REF[14];
1253 coords[1] = QUAD9A_REF[15];
1256 coords[0] = QUAD9A_REF[16];
1257 coords[1] = QUAD9A_REF[17];
1259 LOCAL_COORD_MACRO_END;
1261 SHAPE_FUN_MACRO_BEGIN;
1262 funValue[0] = 0.25*gc[0]*gc[1]*(gc[0]-1.)*(gc[1]-1.);
1263 funValue[1] = 0.25*gc[0]*gc[1]*(gc[0]+1.)*(gc[1]-1.);
1264 funValue[2] = 0.25*gc[0]*gc[1]*(gc[0]+1.)*(gc[1]+1.);
1265 funValue[3] = 0.25*gc[0]*gc[1]*(gc[0]-1.)*(gc[1]+1.);
1266 funValue[4] = 0.5*(1.-gc[0]*gc[0])*gc[1]*(gc[1]-1.);
1267 funValue[5] = 0.5*gc[0]*(gc[0]+1.)*(1.-gc[1]*gc[1]);
1268 funValue[6] = 0.5*(1.-gc[0]*gc[0])*gc[1]*(gc[1]+1.);
1269 funValue[7] = 0.5*gc[0]*(gc[0]-1.)*(1.-gc[1]*gc[1]);
1270 funValue[8] = (1.-gc[0]*gc[0])*(1.-gc[1]*gc[1]);
1271 SHAPE_FUN_MACRO_END;
1275 * Init Tetrahedron Reference coordinates ans Shape function.
1278 void GaussInfo::tetra4aInit()
1280 LOCAL_COORD_MACRO_BEGIN;
1282 coords[0] = TETRA4A_REF[0];
1283 coords[1] = TETRA4A_REF[1];
1284 coords[2] = TETRA4A_REF[2];
1287 coords[0] = TETRA4A_REF[3];
1288 coords[1] = TETRA4A_REF[4];
1289 coords[2] = TETRA4A_REF[5];
1292 coords[0] = TETRA4A_REF[6];
1293 coords[1] = TETRA4A_REF[7];
1294 coords[2] = TETRA4A_REF[8];
1297 coords[0] = TETRA4A_REF[9];
1298 coords[1] = TETRA4A_REF[10];
1299 coords[2] = TETRA4A_REF[11];
1301 LOCAL_COORD_MACRO_END;
1303 SHAPE_FUN_MACRO_BEGIN;
1304 funValue[0] = gc[1];
1305 funValue[1] = gc[2];
1306 funValue[2] = 1.0 - gc[0] - gc[1] - gc[2];
1307 funValue[3] = gc[0];
1308 SHAPE_FUN_MACRO_END;
1312 * Init Tetrahedron Reference coordinates ans Shape function.
1315 void GaussInfo::tetra4bInit()
1317 LOCAL_COORD_MACRO_BEGIN;
1319 coords[0] = TETRA4B_REF[0];
1320 coords[1] = TETRA4B_REF[1];
1321 coords[2] = TETRA4B_REF[2];
1324 coords[0] = TETRA4B_REF[3];
1325 coords[1] = TETRA4B_REF[4];
1326 coords[2] = TETRA4B_REF[5];
1329 coords[0] = TETRA4B_REF[6];
1330 coords[1] = TETRA4B_REF[7];
1331 coords[2] = TETRA4B_REF[8];
1334 coords[0] = TETRA4B_REF[9];
1335 coords[1] = TETRA4B_REF[10];
1336 coords[2] = TETRA4B_REF[11];
1338 LOCAL_COORD_MACRO_END;
1340 SHAPE_FUN_MACRO_BEGIN;
1341 funValue[0] = gc[1];
1342 funValue[2] = gc[2];
1343 funValue[1] = 1.0 - gc[0] - gc[1] - gc[2];
1344 funValue[3] = gc[0];
1345 SHAPE_FUN_MACRO_END;
1349 * Init Quadratic Tetrahedron Reference coordinates ans Shape function.
1352 void GaussInfo::tetra10aInit()
1354 LOCAL_COORD_MACRO_BEGIN;
1356 coords[0] = TETRA10A_REF[0];
1357 coords[1] = TETRA10A_REF[1];
1358 coords[2] = TETRA10A_REF[2];
1361 coords[0] = TETRA10A_REF[3];
1362 coords[1] = TETRA10A_REF[4];
1363 coords[2] = TETRA10A_REF[5];
1366 coords[0] = TETRA10A_REF[6];
1367 coords[1] = TETRA10A_REF[7];
1368 coords[2] = TETRA10A_REF[8];
1371 coords[0] = TETRA10A_REF[9];
1372 coords[1] = TETRA10A_REF[10];
1373 coords[2] = TETRA10A_REF[11];
1376 coords[0] = TETRA10A_REF[12];
1377 coords[1] = TETRA10A_REF[13];
1378 coords[2] = TETRA10A_REF[14];
1381 coords[0] = TETRA10A_REF[15];
1382 coords[1] = TETRA10A_REF[16];
1383 coords[2] = TETRA10A_REF[17];
1386 coords[0] = TETRA10A_REF[18];
1387 coords[1] = TETRA10A_REF[19];
1388 coords[2] = TETRA10A_REF[20];
1391 coords[0] = TETRA10A_REF[21];
1392 coords[1] = TETRA10A_REF[22];
1393 coords[2] = TETRA10A_REF[23];
1396 coords[0] = TETRA10A_REF[24];
1397 coords[1] = TETRA10A_REF[25];
1398 coords[2] = TETRA10A_REF[26];
1401 coords[0] = TETRA10A_REF[27];
1402 coords[1] = TETRA10A_REF[28];
1403 coords[2] = TETRA10A_REF[29];
1405 LOCAL_COORD_MACRO_END;
1407 SHAPE_FUN_MACRO_BEGIN;
1408 funValue[0] = gc[1]*(2.0*gc[1] - 1.0);
1409 funValue[1] = gc[2]*(2.0*gc[2] - 1.0);
1410 funValue[2] = (1.0 - gc[0] - gc[1] - gc[2])*(1.0 - 2.0*gc[0] - 2.0*gc[1] - 2.0*gc[2]);
1411 funValue[3] = gc[0]*(2.0*gc[0] - 1.0);
1412 funValue[4] = 4.0*gc[1]*gc[2];
1413 funValue[5] = 4.0*gc[2]*(1.0 - gc[0] - gc[1] - gc[2]);
1414 funValue[6] = 4.0*gc[1]*(1.0 - gc[0] - gc[1] - gc[2]);
1415 funValue[7] = 4.0*gc[0]*gc[1];
1416 funValue[8] = 4.0*gc[0]*gc[2];
1417 funValue[9] = 4.0*gc[0]*(1.0 - gc[0] - gc[1] - gc[2]);
1418 SHAPE_FUN_MACRO_END;
1422 * Init Quadratic Tetrahedron Reference coordinates ans Shape function.
1425 void GaussInfo::tetra10bInit()
1427 LOCAL_COORD_MACRO_BEGIN;
1429 coords[0] = TETRA10B_REF[0];
1430 coords[1] = TETRA10B_REF[1];
1431 coords[2] = TETRA10B_REF[2];
1434 coords[0] = TETRA10B_REF[3];
1435 coords[1] = TETRA10B_REF[4];
1436 coords[2] = TETRA10B_REF[5];
1439 coords[0] = TETRA10B_REF[6];
1440 coords[1] = TETRA10B_REF[7];
1441 coords[2] = TETRA10B_REF[8];
1444 coords[0] = TETRA10B_REF[9];
1445 coords[1] = TETRA10B_REF[10];
1446 coords[2] = TETRA10B_REF[11];
1449 coords[0] = TETRA10B_REF[12];
1450 coords[1] = TETRA10B_REF[13];
1451 coords[2] = TETRA10B_REF[14];
1454 coords[0] = TETRA10B_REF[15];
1455 coords[1] = TETRA10B_REF[16];
1456 coords[2] = TETRA10B_REF[17];
1459 coords[0] = TETRA10B_REF[18];
1460 coords[1] = TETRA10B_REF[19];
1461 coords[2] = TETRA10B_REF[20];
1464 coords[0] = TETRA10B_REF[21];
1465 coords[1] = TETRA10B_REF[22];
1466 coords[2] = TETRA10B_REF[23];
1469 coords[0] = TETRA10B_REF[24];
1470 coords[1] = TETRA10B_REF[25];
1471 coords[2] = TETRA10B_REF[26];
1474 coords[0] = TETRA10B_REF[27];
1475 coords[1] = TETRA10B_REF[28];
1476 coords[2] = TETRA10B_REF[29];
1478 LOCAL_COORD_MACRO_END;
1479 SHAPE_FUN_MACRO_BEGIN;
1480 funValue[0] = gc[1]*(2.0*gc[1] - 1.0);
1481 funValue[2] = gc[2]*(2.0*gc[2] - 1.0);
1482 funValue[1] = (1.0 - gc[0] - gc[1] - gc[2])*(1.0 - 2.0*gc[0] - 2.0*gc[1] - 2.0*gc[2]);
1483 funValue[3] = gc[0]*(2.0*gc[0] - 1.0);
1484 funValue[6] = 4.0*gc[1]*gc[2];
1485 funValue[5] = 4.0*gc[2]*(1.0 - gc[0] - gc[1] - gc[2]);
1486 funValue[4] = 4.0*gc[1]*(1.0 - gc[0] - gc[1] - gc[2]);
1487 funValue[7] = 4.0*gc[0]*gc[1];
1488 funValue[9] = 4.0*gc[0]*gc[2];
1489 funValue[8] = 4.0*gc[0]*(1.0 - gc[0] - gc[1] - gc[2]);
1490 SHAPE_FUN_MACRO_END;
1494 * Init Pyramid Reference coordinates ans Shape function.
1497 void GaussInfo::pyra5aInit()
1499 LOCAL_COORD_MACRO_BEGIN;
1501 coords[0] = PYRA5A_REF[0];
1502 coords[1] = PYRA5A_REF[1];
1503 coords[2] = PYRA5A_REF[2];
1506 coords[0] = PYRA5A_REF[3];
1507 coords[1] = PYRA5A_REF[4];
1508 coords[2] = PYRA5A_REF[5];
1511 coords[0] = PYRA5A_REF[6];
1512 coords[1] = PYRA5A_REF[7];
1513 coords[2] = PYRA5A_REF[8];
1516 coords[0] = PYRA5A_REF[9];
1517 coords[1] = PYRA5A_REF[10];
1518 coords[2] = PYRA5A_REF[11];
1521 coords[0] = PYRA5A_REF[12];
1522 coords[1] = PYRA5A_REF[13];
1523 coords[2] = PYRA5A_REF[14];
1525 LOCAL_COORD_MACRO_END;
1527 SHAPE_FUN_MACRO_BEGIN;
1528 funValue[0] = 0.25*(-gc[0] + gc[1] - 1.0)*(-gc[0] - gc[1] - 1.0)*(1.0 - gc[2]);
1529 funValue[1] = 0.25*(-gc[0] - gc[1] - 1.0)*(+gc[0] - gc[1] - 1.0)*(1.0 - gc[2]);
1530 funValue[2] = 0.25*(+gc[0] + gc[1] - 1.0)*(+gc[0] - gc[1] - 1.0)*(1.0 - gc[2]);
1531 funValue[3] = 0.25*(+gc[0] + gc[1] - 1.0)*(-gc[0] + gc[1] - 1.0)*(1.0 - gc[2]);
1532 funValue[4] = gc[2];
1533 SHAPE_FUN_MACRO_END;
1536 * Init Pyramid Reference coordinates ans Shape function.
1539 void GaussInfo::pyra5bInit()
1541 LOCAL_COORD_MACRO_BEGIN;
1543 coords[0] = PYRA5B_REF[0];
1544 coords[1] = PYRA5B_REF[1];
1545 coords[2] = PYRA5B_REF[2];
1548 coords[0] = PYRA5B_REF[3];
1549 coords[1] = PYRA5B_REF[4];
1550 coords[2] = PYRA5B_REF[5];
1553 coords[0] = PYRA5B_REF[6];
1554 coords[1] = PYRA5B_REF[7];
1555 coords[2] = PYRA5B_REF[8];
1558 coords[0] = PYRA5B_REF[9];
1559 coords[1] = PYRA5B_REF[10];
1560 coords[2] = PYRA5B_REF[11];
1563 coords[0] = PYRA5B_REF[12];
1564 coords[1] = PYRA5B_REF[13];
1565 coords[2] = PYRA5B_REF[14];
1567 LOCAL_COORD_MACRO_END;
1569 SHAPE_FUN_MACRO_BEGIN;
1570 funValue[0] = 0.25*(-gc[0] + gc[1] - 1.0)*(-gc[0] - gc[1] - 1.0)*(1.0 - gc[2]);
1571 funValue[3] = 0.25*(-gc[0] - gc[1] - 1.0)*(+gc[0] - gc[1] - 1.0)*(1.0 - gc[2]);
1572 funValue[2] = 0.25*(+gc[0] + gc[1] - 1.0)*(+gc[0] - gc[1] - 1.0)*(1.0 - gc[2]);
1573 funValue[1] = 0.25*(+gc[0] + gc[1] - 1.0)*(-gc[0] + gc[1] - 1.0)*(1.0 - gc[2]);
1574 funValue[4] = gc[2];
1575 SHAPE_FUN_MACRO_END;
1579 * Init Quadratic Pyramid Reference coordinates ans Shape function.
1582 void GaussInfo::pyra13aInit()
1584 LOCAL_COORD_MACRO_BEGIN;
1586 coords[0] = PYRA13A_REF[0];
1587 coords[1] = PYRA13A_REF[1];
1588 coords[2] = PYRA13A_REF[2];
1591 coords[0] = PYRA13A_REF[3];
1592 coords[1] = PYRA13A_REF[4];
1593 coords[2] = PYRA13A_REF[5];
1596 coords[0] = PYRA13A_REF[6];
1597 coords[1] = PYRA13A_REF[7];
1598 coords[2] = PYRA13A_REF[8];
1601 coords[0] = PYRA13A_REF[9];
1602 coords[1] = PYRA13A_REF[10];
1603 coords[2] = PYRA13A_REF[11];
1606 coords[0] = PYRA13A_REF[12];
1607 coords[1] = PYRA13A_REF[13];
1608 coords[2] = PYRA13A_REF[14];
1611 coords[0] = PYRA13A_REF[15];
1612 coords[1] = PYRA13A_REF[16];
1613 coords[2] = PYRA13A_REF[17];
1616 coords[0] = PYRA13A_REF[18];
1617 coords[1] = PYRA13A_REF[19];
1618 coords[2] = PYRA13A_REF[20];
1621 coords[0] = PYRA13A_REF[21];
1622 coords[1] = PYRA13A_REF[22];
1623 coords[2] = PYRA13A_REF[23];
1626 coords[0] = PYRA13A_REF[24];
1627 coords[1] = PYRA13A_REF[25];
1628 coords[2] = PYRA13A_REF[26];
1631 coords[0] = PYRA13A_REF[27];
1632 coords[1] = PYRA13A_REF[28];
1633 coords[2] = PYRA13A_REF[29];
1636 coords[0] = PYRA13A_REF[30];
1637 coords[1] = PYRA13A_REF[31];
1638 coords[2] = PYRA13A_REF[32];
1641 coords[0] = PYRA13A_REF[33];
1642 coords[1] = PYRA13A_REF[34];
1643 coords[2] = PYRA13A_REF[35];
1646 coords[0] = PYRA13A_REF[36];
1647 coords[1] = PYRA13A_REF[37];
1648 coords[2] = PYRA13A_REF[38];
1650 LOCAL_COORD_MACRO_END;
1652 SHAPE_FUN_MACRO_BEGIN;
1653 funValue[0] = 0.5*(-gc[0] + gc[1] + gc[2] - 1.0)*(-gc[0] - gc[1] + gc[2] - 1.0)*
1654 (gc[0] - 0.5)/(1.0 - gc[2]);
1655 funValue[1] = 0.5*(-gc[0] - gc[1] + gc[2] - 1.0)*(+gc[0] - gc[1] + gc[2] - 1.0)*
1656 (gc[1] - 0.5)/(1.0 - gc[2]);
1657 funValue[2] = 0.5*(+gc[0] - gc[1] + gc[2] - 1.0)*(+gc[0] + gc[1] + gc[2] - 1.0)*
1658 (-gc[0] - 0.5)/(1.0 - gc[2]);
1659 funValue[3] = 0.5*(+gc[0] + gc[1] + gc[2] - 1.0)*(-gc[0] + gc[1] + gc[2] - 1.0)*
1660 (-gc[1] - 0.5)/(1.0 - gc[2]);
1662 funValue[4] = 2.0*gc[2]*(gc[2] - 0.5);
1664 funValue[5] = 0.5*(-gc[0] + gc[1] + gc[2] - 1.0)*(-gc[0] - gc[1] + gc[2] - 1.0)*
1665 (gc[0] - gc[1] + gc[2] - 1.0)/(1.0 - gc[2]);
1666 funValue[6] = 0.5*(-gc[0] - gc[1] + gc[2] - 1.0)*(gc[0] - gc[1] + gc[2] - 1.0)*
1667 (gc[0] + gc[1] + gc[2] - 1.0)/(1.0 - gc[2]);
1668 funValue[7] = 0.5*(gc[0] - gc[1] + gc[2] - 1.0)*(gc[0] + gc[1] + gc[2] - 1.0)*
1669 (-gc[0] + gc[1] + gc[2] - 1.0)/(1.0 - gc[2]);
1670 funValue[8] = 0.5*(gc[0] + gc[1] + gc[2] - 1.0)*(-gc[0] + gc[1] + gc[2] - 1.0)*
1671 (-gc[0] - gc[1] + gc[2] - 1.0)/(1.0 - gc[2]);
1673 funValue[9] = 0.5*gc[2]*(-gc[0] + gc[1] + gc[2] - 1.0)*(-gc[0] - gc[1] + gc[2] - 1.0)/
1675 funValue[10] = 0.5*gc[2]*(-gc[0] - gc[1] + gc[2] - 1.0)*(gc[0] - gc[1] + gc[2] - 1.0)/
1677 funValue[11] = 0.5*gc[2]*(gc[0] - gc[1] + gc[2] - 1.0)*(gc[0] + gc[1] + gc[2] - 1.0)/
1679 funValue[12] = 0.5*gc[2]*(gc[0] + gc[1] + gc[2] - 1.0)*(-gc[0] + gc[1] + gc[2] - 1.0)/
1681 SHAPE_FUN_MACRO_END;
1685 * Init Quadratic Pyramid Reference coordinates ans Shape function.
1688 void GaussInfo::pyra13bInit()
1690 LOCAL_COORD_MACRO_BEGIN;
1692 coords[0] = PYRA13B_REF[0];
1693 coords[1] = PYRA13B_REF[1];
1694 coords[2] = PYRA13B_REF[2];
1697 coords[0] = PYRA13B_REF[3];
1698 coords[1] = PYRA13B_REF[4];
1699 coords[2] = PYRA13B_REF[5];
1702 coords[0] = PYRA13B_REF[6];
1703 coords[1] = PYRA13B_REF[7];
1704 coords[2] = PYRA13B_REF[8];
1707 coords[0] = PYRA13B_REF[9];
1708 coords[1] = PYRA13B_REF[10];
1709 coords[2] = PYRA13B_REF[11];
1712 coords[0] = PYRA13B_REF[12];
1713 coords[1] = PYRA13B_REF[13];
1714 coords[2] = PYRA13B_REF[14];
1717 coords[0] = PYRA13B_REF[15];
1718 coords[1] = PYRA13B_REF[16];
1719 coords[2] = PYRA13B_REF[17];
1722 coords[0] = PYRA13B_REF[18];
1723 coords[1] = PYRA13B_REF[19];
1724 coords[2] = PYRA13B_REF[20];
1727 coords[0] = PYRA13B_REF[21];
1728 coords[1] = PYRA13B_REF[22];
1729 coords[2] = PYRA13B_REF[23];
1732 coords[0] = PYRA13B_REF[24];
1733 coords[1] = PYRA13B_REF[25];
1734 coords[2] = PYRA13B_REF[26];
1737 coords[0] = PYRA13B_REF[27];
1738 coords[1] = PYRA13B_REF[28];
1739 coords[2] = PYRA13B_REF[29];
1742 coords[0] = PYRA13B_REF[30];
1743 coords[1] = PYRA13B_REF[31];
1744 coords[2] = PYRA13B_REF[32];
1747 coords[0] = PYRA13B_REF[33];
1748 coords[1] = PYRA13B_REF[34];
1749 coords[2] = PYRA13B_REF[35];
1752 coords[0] = PYRA13B_REF[36];
1753 coords[1] = PYRA13B_REF[37];
1754 coords[2] = PYRA13B_REF[38];
1756 LOCAL_COORD_MACRO_END;
1758 SHAPE_FUN_MACRO_BEGIN;
1759 funValue[0] =0.5*(-gc[0]+gc[1]+gc[2]-1.0)*(-gc[0]-gc[1]+gc[2]-1.0)*(gc[0]-0.5)/(1.0-gc[2]);
1760 funValue[1] =0.5*(+gc[0]+gc[1]+gc[2]-1.0)*(-gc[0]+gc[1]+gc[2]-1.0)*(-gc[1]-0.5)/(1.0-gc[2]);
1761 funValue[2] =0.5*(+gc[0]-gc[1]+gc[2]-1.0)*(+gc[0]+gc[1]+gc[2]-1.0)*(-gc[0]-0.5)/(1.0-gc[2]);
1762 funValue[3] =0.5*(-gc[0]-gc[1]+gc[2]-1.0)*(+gc[0]-gc[1]+gc[2]-1.0)*(gc[1]-0.5)/(1.0-gc[2]);
1764 funValue[4] =2.*gc[2]*(gc[2]-0.5);
1766 funValue[5] =-0.5*(gc[0]+gc[1]+gc[2]-1.0)*(-gc[0]+gc[1]+gc[2]-1.0)*(-gc[0]-gc[1]+gc[2]-1.0)/(1.0-gc[2]);
1767 funValue[6] =-0.5*(gc[0]-gc[1]+gc[2]-1.0)*(gc[0]+gc[1]+gc[2]-1.0)*(-gc[0]+gc[1]+gc[2]-1.0)/(1.0-gc[2]);
1768 funValue[7] =-0.5*(-gc[0]-gc[1]+gc[2]-1.0)*(gc[0]-gc[1]+gc[2]-1.0)*(gc[0]+gc[1]+gc[2]-1.0)/(1.0-gc[2]);
1769 funValue[8] =-0.5*(-gc[0]+gc[1]+gc[2]-1.0)*(-gc[0]-gc[1]+gc[2]-1.0)*(gc[0]-gc[1]+gc[2]-1.0)/(1.0-gc[2]);
1771 funValue[9] =gc[2]*(-gc[0]+gc[1]+gc[2]-1.0)*(-gc[0]-gc[1]+gc[2]-1.0)/(1.0-gc[2]);
1772 funValue[10]=gc[2]*(gc[0]+gc[1]+gc[2]-1.0)*(-gc[0]+gc[1]+gc[2]-1.0)/(1.0-gc[2]);
1773 funValue[11]=gc[2]*(gc[0]-gc[1]+gc[2]-1.0)*(gc[0]+gc[1]+gc[2]-1.0)/(1.0-gc[2]);
1774 funValue[12]=gc[2]*(-gc[0]-gc[1]+gc[2]-1.0)*(gc[0]-gc[1]+gc[2]-1.0)/(1.0-gc[2]);
1776 SHAPE_FUN_MACRO_END;
1781 * Init Pentahedron Reference coordinates and Shape function.
1784 void GaussInfo::penta6aInit()
1786 LOCAL_COORD_MACRO_BEGIN;
1788 coords[0] = PENTA6A_REF[0];
1789 coords[1] = PENTA6A_REF[1];
1790 coords[2] = PENTA6A_REF[2];
1793 coords[0] = PENTA6A_REF[3];
1794 coords[1] = PENTA6A_REF[4];
1795 coords[2] = PENTA6A_REF[5];
1798 coords[0] = PENTA6A_REF[6];
1799 coords[1] = PENTA6A_REF[7];
1800 coords[2] = PENTA6A_REF[8];
1803 coords[0] = PENTA6A_REF[9];
1804 coords[1] = PENTA6A_REF[10];
1805 coords[2] = PENTA6A_REF[11];
1808 coords[0] = PENTA6A_REF[12];
1809 coords[1] = PENTA6A_REF[13];
1810 coords[2] = PENTA6A_REF[14];
1813 coords[0] = PENTA6A_REF[15];
1814 coords[1] = PENTA6A_REF[16];
1815 coords[2] = PENTA6A_REF[17];
1817 LOCAL_COORD_MACRO_END;
1819 SHAPE_FUN_MACRO_BEGIN;
1820 funValue[0] = 0.5*gc[1]*(1.0 - gc[0]);
1821 funValue[1] = 0.5*gc[2]*(1.0 - gc[0]);
1822 funValue[2] = 0.5*(1.0 - gc[1] - gc[2])*(1.0 - gc[0]);
1824 funValue[3] = 0.5*gc[1]*(gc[0] + 1.0);
1825 funValue[4] = 0.5*gc[2]*(gc[0] + 1.0);
1826 funValue[5] = 0.5*(1.0 - gc[1] - gc[2])*(1.0 + gc[0]);
1827 SHAPE_FUN_MACRO_END;
1831 * Init Pentahedron Reference coordinates and Shape function.
1834 void GaussInfo::penta6bInit()
1836 LOCAL_COORD_MACRO_BEGIN;
1838 coords[0] = PENTA6B_REF[0];
1839 coords[1] = PENTA6B_REF[1];
1840 coords[2] = PENTA6B_REF[2];
1843 coords[0] = PENTA6B_REF[3];
1844 coords[1] = PENTA6B_REF[4];
1845 coords[2] = PENTA6B_REF[5];
1848 coords[0] = PENTA6B_REF[6];
1849 coords[1] = PENTA6B_REF[7];
1850 coords[2] = PENTA6B_REF[8];
1853 coords[0] = PENTA6B_REF[9];
1854 coords[1] = PENTA6B_REF[10];
1855 coords[2] = PENTA6B_REF[11];
1858 coords[0] = PENTA6B_REF[12];
1859 coords[1] = PENTA6B_REF[13];
1860 coords[2] = PENTA6B_REF[14];
1863 coords[0] = PENTA6B_REF[15];
1864 coords[1] = PENTA6B_REF[16];
1865 coords[2] = PENTA6B_REF[17];
1867 LOCAL_COORD_MACRO_END;
1869 SHAPE_FUN_MACRO_BEGIN;
1870 funValue[0] = 0.5*gc[1]*(1.0 - gc[0]);
1871 funValue[2] = 0.5*gc[2]*(1.0 - gc[0]);
1872 funValue[1] = 0.5*(1.0 - gc[1] - gc[2])*(1.0 - gc[0]);
1873 funValue[3] = 0.5*gc[1]*(gc[0] + 1.0);
1874 funValue[5] = 0.5*gc[2]*(gc[0] + 1.0);
1875 funValue[4] = 0.5*(1.0 - gc[1] - gc[2])*(1.0 + gc[0]);
1876 SHAPE_FUN_MACRO_END;
1880 * This shapefunc map is same as degenerated tria3aInit
1882 void GaussInfo::penta6DegTria3aInit()
1884 LOCAL_COORD_MACRO_BEGIN;
1915 LOCAL_COORD_MACRO_END;
1917 SHAPE_FUN_MACRO_BEGIN;
1918 funValue[0] = 0.5*(1.0 + gc[1]);
1919 funValue[1] = -0.5*(gc[0] + gc[1]);
1920 funValue[2] = 0.5*(1.0 + gc[0]);
1924 SHAPE_FUN_MACRO_END;
1928 * This shapefunc map is same as degenerated tria3bInit
1930 void GaussInfo::penta6DegTria3bInit()
1932 LOCAL_COORD_MACRO_BEGIN;
1963 LOCAL_COORD_MACRO_END;
1965 SHAPE_FUN_MACRO_BEGIN;
1966 funValue[0] = 1.0 - gc[0] - gc[1];
1967 funValue[1] = gc[0];
1968 funValue[2] = gc[1];
1972 SHAPE_FUN_MACRO_END;
1976 * Init Pentahedron Reference coordinates and Shape function.
1979 void GaussInfo::penta15aInit()
1981 LOCAL_COORD_MACRO_BEGIN;
1983 coords[0] = PENTA15A_REF[0];
1984 coords[1] = PENTA15A_REF[1];
1985 coords[2] = PENTA15A_REF[2];
1988 coords[0] = PENTA15A_REF[3];
1989 coords[1] = PENTA15A_REF[4];
1990 coords[2] = PENTA15A_REF[5];
1993 coords[0] = PENTA15A_REF[6];
1994 coords[1] = PENTA15A_REF[7];
1995 coords[2] = PENTA15A_REF[8];
1998 coords[0] = PENTA15A_REF[9];
1999 coords[1] = PENTA15A_REF[10];
2000 coords[2] = PENTA15A_REF[11];
2003 coords[0] = PENTA15A_REF[12];
2004 coords[1] = PENTA15A_REF[13];
2005 coords[2] = PENTA15A_REF[14];
2008 coords[0] = PENTA15A_REF[15];
2009 coords[1] = PENTA15A_REF[16];
2010 coords[2] = PENTA15A_REF[17];
2013 coords[0] = PENTA15A_REF[18];
2014 coords[1] = PENTA15A_REF[19];
2015 coords[2] = PENTA15A_REF[20];
2018 coords[0] = PENTA15A_REF[21];
2019 coords[1] = PENTA15A_REF[22];
2020 coords[2] = PENTA15A_REF[23];
2023 coords[0] = PENTA15A_REF[24];
2024 coords[1] = PENTA15A_REF[25];
2025 coords[2] = PENTA15A_REF[26];
2028 coords[0] = PENTA15A_REF[27];
2029 coords[1] = PENTA15A_REF[28];
2030 coords[2] = PENTA15A_REF[29];
2033 coords[0] = PENTA15A_REF[30];
2034 coords[1] = PENTA15A_REF[31];
2035 coords[2] = PENTA15A_REF[32];
2038 coords[0] = PENTA15A_REF[33];
2039 coords[1] = PENTA15A_REF[34];
2040 coords[2] = PENTA15A_REF[35];
2043 coords[0] = PENTA15A_REF[36];
2044 coords[1] = PENTA15A_REF[37];
2045 coords[2] = PENTA15A_REF[38];
2048 coords[0] = PENTA15A_REF[39];
2049 coords[1] = PENTA15A_REF[40];
2050 coords[2] = PENTA15A_REF[41];
2053 coords[0] = PENTA15A_REF[42];
2054 coords[1] = PENTA15A_REF[43];
2055 coords[2] = PENTA15A_REF[44];
2057 LOCAL_COORD_MACRO_END;
2059 SHAPE_FUN_MACRO_BEGIN;
2060 funValue[0] = 0.5*gc[1]*(1.0 - gc[0])*(2.0*gc[1] - 2.0 - gc[0]);
2061 funValue[1] = 0.5*gc[2]*(1.0 - gc[0])*(2.0*gc[2] - 2.0 - gc[0]);
2062 funValue[2] = 0.5*(gc[0] - 1.0)*(1.0 - gc[1] - gc[2])*(gc[0] + 2.0*gc[1] + 2.0*gc[2]);
2064 funValue[3] = 0.5*gc[1]*(1.0 + gc[0])*(2.0*gc[1] - 2.0 + gc[0]);
2065 funValue[4] = 0.5*gc[2]*(1.0 + gc[0])*(2.0*gc[2] - 2.0 + gc[0]);
2066 funValue[5] = 0.5*(-gc[0] - 1.0)*(1.0 - gc[1] - gc[2])*(-gc[0] + 2.0*gc[1] + 2.0*gc[2]);
2068 funValue[6] = 2.0*gc[1]*gc[2]*(1.0 - gc[0]);
2069 funValue[7] = 2.0*gc[2]*(1.0 - gc[1] - gc[2])*(1.0 - gc[0]);
2070 funValue[8] = 2.0*gc[1]*(1.0 - gc[1] - gc[2])*(1.0 - gc[0]);
2072 funValue[9] = gc[1]*(1.0 - gc[0]*gc[0]);
2073 funValue[10] = gc[2]*(1.0 - gc[0]*gc[0]);
2074 funValue[11] = (1.0 - gc[1] - gc[2])*(1.0 - gc[0]*gc[0]);
2076 funValue[12] = 2.0*gc[1]*gc[2]*(1.0 + gc[0]);
2077 funValue[13] = 2.0*gc[2]*(1.0 - gc[1] - gc[2])*(1.0 + gc[0]);
2078 funValue[14] = 2.0*gc[1]*(1.0 - gc[1] - gc[2])*(1.0 + gc[0]);
2079 SHAPE_FUN_MACRO_END;
2083 * Init Qaudratic Pentahedron Reference coordinates and Shape function.
2086 void GaussInfo::penta15bInit()
2088 LOCAL_COORD_MACRO_BEGIN;
2090 coords[0] = PENTA15B_REF[0];
2091 coords[1] = PENTA15B_REF[1];
2092 coords[2] = PENTA15B_REF[2];
2095 coords[0] = PENTA15B_REF[3];
2096 coords[1] = PENTA15B_REF[4];
2097 coords[2] = PENTA15B_REF[5];
2100 coords[0] = PENTA15B_REF[6];
2101 coords[1] = PENTA15B_REF[7];
2102 coords[2] = PENTA15B_REF[8];
2105 coords[0] = PENTA15B_REF[9];
2106 coords[1] = PENTA15B_REF[10];
2107 coords[2] = PENTA15B_REF[11];
2110 coords[0] = PENTA15B_REF[12];
2111 coords[1] = PENTA15B_REF[13];
2112 coords[2] = PENTA15B_REF[14];
2115 coords[0] = PENTA15B_REF[15];
2116 coords[1] = PENTA15B_REF[16];
2117 coords[2] = PENTA15B_REF[17];
2120 coords[0] = PENTA15B_REF[18];
2121 coords[1] = PENTA15B_REF[19];
2122 coords[2] = PENTA15B_REF[20];
2125 coords[0] = PENTA15B_REF[21];
2126 coords[1] = PENTA15B_REF[22];
2127 coords[2] = PENTA15B_REF[23];
2130 coords[0] = PENTA15B_REF[24];
2131 coords[1] = PENTA15B_REF[25];
2132 coords[2] = PENTA15B_REF[26];
2135 coords[0] = PENTA15B_REF[27];
2136 coords[1] = PENTA15B_REF[28];
2137 coords[2] = PENTA15B_REF[29];
2140 coords[0] = PENTA15B_REF[30];
2141 coords[1] = PENTA15B_REF[31];
2142 coords[2] = PENTA15B_REF[32];
2145 coords[0] = PENTA15B_REF[33];
2146 coords[1] = PENTA15B_REF[34];
2147 coords[2] = PENTA15B_REF[35];
2150 coords[0] = PENTA15B_REF[36];
2151 coords[1] = PENTA15B_REF[37];
2152 coords[2] = PENTA15B_REF[38];
2155 coords[0] = PENTA15B_REF[39];
2156 coords[1] = PENTA15B_REF[40];
2157 coords[2] = PENTA15B_REF[41];
2160 coords[0] = PENTA15B_REF[42];
2161 coords[1] = PENTA15B_REF[43];
2162 coords[2] = PENTA15B_REF[44];
2164 LOCAL_COORD_MACRO_END;
2166 SHAPE_FUN_MACRO_BEGIN;
2167 funValue[0] = 0.5*gc[1]*(1.0 - gc[0])*(2.0*gc[1] - 2.0 - gc[0]);
2168 funValue[2] = 0.5*gc[2]*(1.0 - gc[0])*(2.0*gc[2] - 2.0 - gc[0]);
2169 funValue[1] = 0.5*(gc[0] - 1.0)*(1.0 - gc[1] - gc[2])*(gc[0] + 2.0*gc[1] + 2.0*gc[2]);
2171 funValue[3] = 0.5*gc[1]*(1.0 + gc[0])*(2.0*gc[1] - 2.0 + gc[0]);
2172 funValue[5] = 0.5*gc[2]*(1.0 + gc[0])*(2.0*gc[2] - 2.0 + gc[0]);
2173 funValue[4] = 0.5*(-gc[0] - 1.0)*(1.0 - gc[1] - gc[2])*(-gc[0] + 2.0*gc[1] + 2.0*gc[2]);
2175 funValue[8] = 2.0*gc[1]*gc[2]*(1.0 - gc[0]);
2176 funValue[7] = 2.0*gc[2]*(1.0 - gc[1] - gc[2])*(1.0 - gc[0]);
2177 funValue[6] = 2.0*gc[1]*(1.0 - gc[1] - gc[2])*(1.0 - gc[0]);
2179 funValue[12] = gc[1]*(1.0 - gc[0]*gc[0]);
2180 funValue[14] = gc[2]*(1.0 - gc[0]*gc[0]);
2181 funValue[13] = (1.0 - gc[1] - gc[2])*(1.0 - gc[0]*gc[0]);
2183 funValue[11] = 2.0*gc[1]*gc[2]*(1.0 + gc[0]);
2184 funValue[10] = 2.0*gc[2]*(1.0 - gc[1] - gc[2])*(1.0 + gc[0]);
2185 funValue[9] = 2.0*gc[1]*(1.0 - gc[1] - gc[2])*(1.0 + gc[0]);
2186 SHAPE_FUN_MACRO_END;
2189 void GaussInfo::penta18aInit()
2191 LOCAL_COORD_MACRO_BEGIN;
2193 coords[0] = PENTA18A_REF[0];
2194 coords[1] = PENTA18A_REF[1];
2195 coords[2] = PENTA18A_REF[2];
2198 coords[0] = PENTA18A_REF[3];
2199 coords[1] = PENTA18A_REF[4];
2200 coords[2] = PENTA18A_REF[5];
2203 coords[0] = PENTA18A_REF[6];
2204 coords[1] = PENTA18A_REF[7];
2205 coords[2] = PENTA18A_REF[8];
2208 coords[0] = PENTA18A_REF[9];
2209 coords[1] = PENTA18A_REF[10];
2210 coords[2] = PENTA18A_REF[11];
2213 coords[0] = PENTA18A_REF[12];
2214 coords[1] = PENTA18A_REF[13];
2215 coords[2] = PENTA18A_REF[14];
2218 coords[0] = PENTA18A_REF[15];
2219 coords[1] = PENTA18A_REF[16];
2220 coords[2] = PENTA18A_REF[17];
2223 coords[0] = PENTA18A_REF[18];
2224 coords[1] = PENTA18A_REF[19];
2225 coords[2] = PENTA18A_REF[20];
2228 coords[0] = PENTA18A_REF[21];
2229 coords[1] = PENTA18A_REF[22];
2230 coords[2] = PENTA18A_REF[23];
2233 coords[0] = PENTA18A_REF[24];
2234 coords[1] = PENTA18A_REF[25];
2235 coords[2] = PENTA18A_REF[26];
2238 coords[0] = PENTA18A_REF[27];
2239 coords[1] = PENTA18A_REF[28];
2240 coords[2] = PENTA18A_REF[29];
2243 coords[0] = PENTA18A_REF[30];
2244 coords[1] = PENTA18A_REF[31];
2245 coords[2] = PENTA18A_REF[32];
2248 coords[0] = PENTA18A_REF[33];
2249 coords[1] = PENTA18A_REF[34];
2250 coords[2] = PENTA18A_REF[35];
2253 coords[0] = PENTA18A_REF[36];
2254 coords[1] = PENTA18A_REF[37];
2255 coords[2] = PENTA18A_REF[38];
2258 coords[0] = PENTA18A_REF[39];
2259 coords[1] = PENTA18A_REF[40];
2260 coords[2] = PENTA18A_REF[41];
2263 coords[0] = PENTA18A_REF[42];
2264 coords[1] = PENTA18A_REF[43];
2265 coords[2] = PENTA18A_REF[44];
2268 coords[0] = PENTA18A_REF[45];
2269 coords[1] = PENTA18A_REF[46];
2270 coords[2] = PENTA18A_REF[47];
2273 coords[0] = PENTA18A_REF[48];
2274 coords[1] = PENTA18A_REF[49];
2275 coords[2] = PENTA18A_REF[50];
2278 coords[0] = PENTA18A_REF[51];
2279 coords[1] = PENTA18A_REF[52];
2280 coords[2] = PENTA18A_REF[53];
2282 LOCAL_COORD_MACRO_END;
2284 SHAPE_FUN_MACRO_BEGIN;
2285 funValue[0] = 0.5*gc[1]*(1.0 - gc[0])*(2.0*gc[1] - 2.0 - gc[0]);
2286 funValue[1] = 0.5*gc[2]*(1.0 - gc[0])*(2.0*gc[2] - 2.0 - gc[0]);
2287 funValue[2] = 0.5*(gc[0] - 1.0)*(1.0 - gc[1] - gc[2])*(gc[0] + 2.0*gc[1] + 2.0*gc[2]);
2289 funValue[3] = 0.5*gc[1]*(1.0 + gc[0])*(2.0*gc[1] - 2.0 + gc[0]);
2290 funValue[4] = 0.5*gc[2]*(1.0 + gc[0])*(2.0*gc[2] - 2.0 + gc[0]);
2291 funValue[5] = 0.5*(-gc[0] - 1.0)*(1.0 - gc[1] - gc[2])*(-gc[0] + 2.0*gc[1] + 2.0*gc[2]);
2293 funValue[6] = 2.0*gc[1]*gc[2]*(1.0 - gc[0]);
2294 funValue[7] = 2.0*gc[2]*(1.0 - gc[1] - gc[2])*(1.0 - gc[0]);
2295 funValue[8] = 2.0*gc[1]*(1.0 - gc[1] - gc[2])*(1.0 - gc[0]);
2297 funValue[9] = gc[1]*(1.0 - gc[0]*gc[0]);
2298 funValue[10] = gc[2]*(1.0 - gc[0]*gc[0]);
2299 funValue[11] = (1.0 - gc[1] - gc[2])*(1.0 - gc[0]*gc[0]);
2301 funValue[12] = 2.0*gc[1]*gc[2]*(1.0 + gc[0]);
2302 funValue[13] = 2.0*gc[2]*(1.0 - gc[1] - gc[2])*(1.0 + gc[0]);
2303 funValue[14] = 2.0*gc[1]*(1.0 - gc[1] - gc[2])*(1.0 + gc[0]);
2305 funValue[15] = 4.0*gc[1]*gc[2]*(1.0 - gc[0] * gc[0]);
2306 funValue[16] = 4.0*gc[2]*(gc[0] * gc[0] - 1) * ( gc[2] + gc[1] - 1);
2307 funValue[17] = 4.0*gc[1]*(gc[0] * gc[0] - 1) * ( gc[2] + gc[1] - 1);
2308 SHAPE_FUN_MACRO_END;
2311 void GaussInfo::penta18bInit()
2313 LOCAL_COORD_MACRO_BEGIN;
2315 coords[0] = PENTA18B_REF[0];
2316 coords[1] = PENTA18B_REF[1];
2317 coords[2] = PENTA18B_REF[2];
2320 coords[0] = PENTA18B_REF[3];
2321 coords[1] = PENTA18B_REF[4];
2322 coords[2] = PENTA18B_REF[5];
2325 coords[0] = PENTA18B_REF[6];
2326 coords[1] = PENTA18B_REF[7];
2327 coords[2] = PENTA18B_REF[8];
2330 coords[0] = PENTA18B_REF[9];
2331 coords[1] = PENTA18B_REF[10];
2332 coords[2] = PENTA18B_REF[11];
2335 coords[0] = PENTA18B_REF[12];
2336 coords[1] = PENTA18B_REF[13];
2337 coords[2] = PENTA18B_REF[14];
2340 coords[0] = PENTA18B_REF[15];
2341 coords[1] = PENTA18B_REF[16];
2342 coords[2] = PENTA18B_REF[17];
2345 coords[0] = PENTA18B_REF[18];
2346 coords[1] = PENTA18B_REF[19];
2347 coords[2] = PENTA18B_REF[20];
2350 coords[0] = PENTA18B_REF[21];
2351 coords[1] = PENTA18B_REF[22];
2352 coords[2] = PENTA18B_REF[23];
2355 coords[0] = PENTA18B_REF[24];
2356 coords[1] = PENTA18B_REF[25];
2357 coords[2] = PENTA18B_REF[26];
2360 coords[0] = PENTA18B_REF[27];
2361 coords[1] = PENTA18B_REF[28];
2362 coords[2] = PENTA18B_REF[29];
2365 coords[0] = PENTA18B_REF[30];
2366 coords[1] = PENTA18B_REF[31];
2367 coords[2] = PENTA18B_REF[32];
2370 coords[0] = PENTA18B_REF[33];
2371 coords[1] = PENTA18B_REF[34];
2372 coords[2] = PENTA18B_REF[35];
2375 coords[0] = PENTA18B_REF[36];
2376 coords[1] = PENTA18B_REF[37];
2377 coords[2] = PENTA18B_REF[38];
2380 coords[0] = PENTA18B_REF[39];
2381 coords[1] = PENTA18B_REF[40];
2382 coords[2] = PENTA18B_REF[41];
2385 coords[0] = PENTA18B_REF[42];
2386 coords[1] = PENTA18B_REF[43];
2387 coords[2] = PENTA18B_REF[44];
2390 coords[0] = PENTA18B_REF[45];
2391 coords[1] = PENTA18B_REF[46];
2392 coords[2] = PENTA18B_REF[47];
2395 coords[0] = PENTA18B_REF[48];
2396 coords[1] = PENTA18B_REF[49];
2397 coords[2] = PENTA18B_REF[50];
2400 coords[0] = PENTA18B_REF[51];
2401 coords[1] = PENTA18B_REF[52];
2402 coords[2] = PENTA18B_REF[53];
2404 LOCAL_COORD_MACRO_END;
2406 SHAPE_FUN_MACRO_BEGIN;
2407 funValue[0] = 0.5*gc[1]*(1.0 - gc[0])*(2.0*gc[1] - 2.0 - gc[0]);
2408 funValue[2] = 0.5*gc[2]*(1.0 - gc[0])*(2.0*gc[2] - 2.0 - gc[0]);
2409 funValue[1] = 0.5*(gc[0] - 1.0)*(1.0 - gc[1] - gc[2])*(gc[0] + 2.0*gc[1] + 2.0*gc[2]);
2411 funValue[3] = 0.5*gc[1]*(1.0 + gc[0])*(2.0*gc[1] - 2.0 + gc[0]);
2412 funValue[5] = 0.5*gc[2]*(1.0 + gc[0])*(2.0*gc[2] - 2.0 + gc[0]);
2413 funValue[4] = 0.5*(-gc[0] - 1.0)*(1.0 - gc[1] - gc[2])*(-gc[0] + 2.0*gc[1] + 2.0*gc[2]);
2415 funValue[8] = 2.0*gc[1]*gc[2]*(1.0 - gc[0]);
2416 funValue[7] = 2.0*gc[2]*(1.0 - gc[1] - gc[2])*(1.0 - gc[0]);
2417 funValue[6] = 2.0*gc[1]*(1.0 - gc[1] - gc[2])*(1.0 - gc[0]);
2419 funValue[12] = gc[1]*(1.0 - gc[0]*gc[0]);
2420 funValue[14] = gc[2]*(1.0 - gc[0]*gc[0]);
2421 funValue[13] = (1.0 - gc[1] - gc[2])*(1.0 - gc[0]*gc[0]);
2423 funValue[11] = 2.0*gc[1]*gc[2]*(1.0 + gc[0]);
2424 funValue[10] = 2.0*gc[2]*(1.0 - gc[1] - gc[2])*(1.0 + gc[0]);
2425 funValue[9] = 2.0*gc[1]*(1.0 - gc[1] - gc[2])*(1.0 + gc[0]);
2427 funValue[17] = 4.0*gc[1]*gc[2]*(1.0 - gc[0] * gc[0]);
2428 funValue[16] = 4.0*gc[2]*(gc[0] * gc[0] - 1) * ( gc[2] + gc[1] - 1);
2429 funValue[15] = 4.0*gc[1]*(gc[0] * gc[0] - 1) * ( gc[2] + gc[1] - 1);
2430 SHAPE_FUN_MACRO_END;
2434 * Init Hehahedron Reference coordinates and Shape function.
2437 void GaussInfo::hexa8aInit()
2439 LOCAL_COORD_MACRO_BEGIN;
2441 coords[0] = HEXA8A_REF[0];
2442 coords[1] = HEXA8A_REF[1];
2443 coords[2] = HEXA8A_REF[2];
2446 coords[0] = HEXA8A_REF[3];
2447 coords[1] = HEXA8A_REF[4];
2448 coords[2] = HEXA8A_REF[5];
2451 coords[0] = HEXA8A_REF[6];
2452 coords[1] = HEXA8A_REF[7];
2453 coords[2] = HEXA8A_REF[8];
2456 coords[0] = HEXA8A_REF[9];
2457 coords[1] = HEXA8A_REF[10];
2458 coords[2] = HEXA8A_REF[11];
2461 coords[0] = HEXA8A_REF[12];
2462 coords[1] = HEXA8A_REF[13];
2463 coords[2] = HEXA8A_REF[14];
2466 coords[0] = HEXA8A_REF[15];
2467 coords[1] = HEXA8A_REF[16];
2468 coords[2] = HEXA8A_REF[17];
2471 coords[0] = HEXA8A_REF[18];
2472 coords[1] = HEXA8A_REF[19];
2473 coords[2] = HEXA8A_REF[20];
2476 coords[0] = HEXA8A_REF[21];
2477 coords[1] = HEXA8A_REF[22];
2478 coords[2] = HEXA8A_REF[23];
2480 LOCAL_COORD_MACRO_END;
2482 SHAPE_FUN_MACRO_BEGIN;
2483 funValue[0] = 0.125*(1.0 - gc[0])*(1.0 - gc[1])*(1.0 - gc[2]);
2484 funValue[1] = 0.125*(1.0 + gc[0])*(1.0 - gc[1])*(1.0 - gc[2]);
2485 funValue[2] = 0.125*(1.0 + gc[0])*(1.0 + gc[1])*(1.0 - gc[2]);
2486 funValue[3] = 0.125*(1.0 - gc[0])*(1.0 + gc[1])*(1.0 - gc[2]);
2488 funValue[4] = 0.125*(1.0 - gc[0])*(1.0 - gc[1])*(1.0 + gc[2]);
2489 funValue[5] = 0.125*(1.0 + gc[0])*(1.0 - gc[1])*(1.0 + gc[2]);
2490 funValue[6] = 0.125*(1.0 + gc[0])*(1.0 + gc[1])*(1.0 + gc[2]);
2491 funValue[7] = 0.125*(1.0 - gc[0])*(1.0 + gc[1])*(1.0 + gc[2]);
2492 SHAPE_FUN_MACRO_END;
2496 * Init Hehahedron Reference coordinates and Shape function.
2499 void GaussInfo::hexa8bInit()
2501 LOCAL_COORD_MACRO_BEGIN;
2503 coords[0] = HEXA8B_REF[0];
2504 coords[1] = HEXA8B_REF[1];
2505 coords[2] = HEXA8B_REF[2];
2508 coords[0] = HEXA8B_REF[3];
2509 coords[1] = HEXA8B_REF[4];
2510 coords[2] = HEXA8B_REF[5];
2513 coords[0] = HEXA8B_REF[6];
2514 coords[1] = HEXA8B_REF[7];
2515 coords[2] = HEXA8B_REF[8];
2518 coords[0] = HEXA8B_REF[9];
2519 coords[1] = HEXA8B_REF[10];
2520 coords[2] = HEXA8B_REF[11];
2523 coords[0] = HEXA8B_REF[12];
2524 coords[1] = HEXA8B_REF[13];
2525 coords[2] = HEXA8B_REF[14];
2528 coords[0] = HEXA8B_REF[15];
2529 coords[1] = HEXA8B_REF[16];
2530 coords[2] = HEXA8B_REF[17];
2533 coords[0] = HEXA8B_REF[18];
2534 coords[1] = HEXA8B_REF[19];
2535 coords[2] = HEXA8B_REF[20];
2538 coords[0] = HEXA8B_REF[21];
2539 coords[1] = HEXA8B_REF[22];
2540 coords[2] = HEXA8B_REF[23];
2542 LOCAL_COORD_MACRO_END;
2544 SHAPE_FUN_MACRO_BEGIN;
2545 funValue[0] = 0.125*(1.0 - gc[0])*(1.0 - gc[1])*(1.0 - gc[2]);
2546 funValue[3] = 0.125*(1.0 + gc[0])*(1.0 - gc[1])*(1.0 - gc[2]);
2547 funValue[2] = 0.125*(1.0 + gc[0])*(1.0 + gc[1])*(1.0 - gc[2]);
2548 funValue[1] = 0.125*(1.0 - gc[0])*(1.0 + gc[1])*(1.0 - gc[2]);
2550 funValue[4] = 0.125*(1.0 - gc[0])*(1.0 - gc[1])*(1.0 + gc[2]);
2551 funValue[7] = 0.125*(1.0 + gc[0])*(1.0 - gc[1])*(1.0 + gc[2]);
2552 funValue[6] = 0.125*(1.0 + gc[0])*(1.0 + gc[1])*(1.0 + gc[2]);
2553 funValue[5] = 0.125*(1.0 - gc[0])*(1.0 + gc[1])*(1.0 + gc[2]);
2554 SHAPE_FUN_MACRO_END;
2558 * This shapefunc map is same as degenerated quad4bInit
2560 void GaussInfo::hexa8DegQuad4aInit()
2562 LOCAL_COORD_MACRO_BEGIN;
2603 LOCAL_COORD_MACRO_END;
2605 SHAPE_FUN_MACRO_BEGIN;
2606 funValue[0] = 0.25*(1.0 + gc[1])*(1.0 - gc[0]);
2607 funValue[1] = 0.25*(1.0 - gc[1])*(1.0 - gc[0]);
2608 funValue[2] = 0.25*(1.0 - gc[1])*(1.0 + gc[0]);
2609 funValue[3] = 0.25*(1.0 + gc[0])*(1.0 + gc[1]);
2614 SHAPE_FUN_MACRO_END;
2618 * This shapefunc map is same as degenerated quad4bInit
2620 void GaussInfo::hexa8DegQuad4bInit()
2622 LOCAL_COORD_MACRO_BEGIN;
2663 LOCAL_COORD_MACRO_END;
2665 SHAPE_FUN_MACRO_BEGIN;
2666 funValue[0] = 0.25*(1.0 - gc[0])*(1.0 - gc[1]);
2667 funValue[1] = 0.25*(1.0 + gc[0])*(1.0 - gc[1]);
2668 funValue[2] = 0.25*(1.0 + gc[0])*(1.0 + gc[1]);
2669 funValue[3] = 0.25*(1.0 - gc[0])*(1.0 + gc[1]);
2674 SHAPE_FUN_MACRO_END;
2678 * This shapefunc map is same as degenerated quad4cInit
2680 void GaussInfo::hexa8DegQuad4cInit()
2682 LOCAL_COORD_MACRO_BEGIN;
2724 LOCAL_COORD_MACRO_END;
2726 SHAPE_FUN_MACRO_BEGIN;
2727 funValue[0] = 0.25*(1.0 - gc[0])*(1.0 - gc[1]);
2728 funValue[1] = 0.25*(1.0 - gc[0])*(1.0 + gc[1]);
2729 funValue[2] = 0.25*(1.0 + gc[0])*(1.0 + gc[1]);
2730 funValue[3] = 0.25*(1.0 + gc[0])*(1.0 - gc[1]);
2735 SHAPE_FUN_MACRO_END;
2739 * Init Qaudratic Hehahedron Reference coordinates and Shape function.
2742 void GaussInfo::hexa20aInit()
2744 LOCAL_COORD_MACRO_BEGIN;
2746 coords[0] = HEXA20A_REF[0];
2747 coords[1] = HEXA20A_REF[1];
2748 coords[2] = HEXA20A_REF[2];
2751 coords[0] = HEXA20A_REF[3];
2752 coords[1] = HEXA20A_REF[4];
2753 coords[2] = HEXA20A_REF[5];
2756 coords[0] = HEXA20A_REF[6];
2757 coords[1] = HEXA20A_REF[7];
2758 coords[2] = HEXA20A_REF[8];
2761 coords[0] = HEXA20A_REF[9];
2762 coords[1] = HEXA20A_REF[10];
2763 coords[2] = HEXA20A_REF[11];
2766 coords[0] = HEXA20A_REF[12];
2767 coords[1] = HEXA20A_REF[13];
2768 coords[2] = HEXA20A_REF[14];
2771 coords[0] = HEXA20A_REF[15];
2772 coords[1] = HEXA20A_REF[16];
2773 coords[2] = HEXA20A_REF[17];
2776 coords[0] = HEXA20A_REF[18];
2777 coords[1] = HEXA20A_REF[19];
2778 coords[2] = HEXA20A_REF[20];
2781 coords[0] = HEXA20A_REF[21];
2782 coords[1] = HEXA20A_REF[22];
2783 coords[2] = HEXA20A_REF[23];
2786 coords[0] = HEXA20A_REF[24];
2787 coords[1] = HEXA20A_REF[25];
2788 coords[2] = HEXA20A_REF[26];
2791 coords[0] = HEXA20A_REF[27];
2792 coords[1] = HEXA20A_REF[28];
2793 coords[2] = HEXA20A_REF[29];
2796 coords[0] = HEXA20A_REF[30];
2797 coords[1] = HEXA20A_REF[31];
2798 coords[2] = HEXA20A_REF[32];
2801 coords[0] = HEXA20A_REF[33];
2802 coords[1] = HEXA20A_REF[34];
2803 coords[2] = HEXA20A_REF[35];
2806 coords[0] = HEXA20A_REF[36];
2807 coords[1] = HEXA20A_REF[37];
2808 coords[2] = HEXA20A_REF[38];
2811 coords[0] = HEXA20A_REF[39];
2812 coords[1] = HEXA20A_REF[40];
2813 coords[2] = HEXA20A_REF[41];
2816 coords[0] = HEXA20A_REF[42];
2817 coords[1] = HEXA20A_REF[43];
2818 coords[2] = HEXA20A_REF[44];
2821 coords[0] = HEXA20A_REF[45];
2822 coords[1] = HEXA20A_REF[46];
2823 coords[2] = HEXA20A_REF[47];
2826 coords[0] = HEXA20A_REF[48];
2827 coords[1] = HEXA20A_REF[49];
2828 coords[2] = HEXA20A_REF[50];
2831 coords[0] = HEXA20A_REF[51];
2832 coords[1] = HEXA20A_REF[52];
2833 coords[2] = HEXA20A_REF[53];
2836 coords[0] = HEXA20A_REF[54];
2837 coords[1] = HEXA20A_REF[55];
2838 coords[2] = HEXA20A_REF[56];
2841 coords[0] = HEXA20A_REF[57];
2842 coords[1] = HEXA20A_REF[58];
2843 coords[2] = HEXA20A_REF[59];
2845 LOCAL_COORD_MACRO_END;
2847 SHAPE_FUN_MACRO_BEGIN;
2848 funValue[0] = 0.125*(1.0 - gc[0])*(1.0 - gc[1])*(1.0 - gc[2])*
2849 (-2.0 - gc[0] - gc[1] - gc[2]);
2850 funValue[1] = 0.125*(1.0 + gc[0])*(1.0 - gc[1])*(1.0 - gc[2])*
2851 (-2.0 + gc[0] - gc[1] - gc[2]);
2852 funValue[2] = 0.125*(1.0 + gc[0])*(1.0 + gc[1])*(1.0 - gc[2])*
2853 (-2.0 + gc[0] + gc[1] - gc[2]);
2854 funValue[3] = 0.125*(1.0 - gc[0])*(1.0 + gc[1])*(1.0 - gc[2])*
2855 (-2.0 - gc[0] + gc[1] - gc[2]);
2856 funValue[4] = 0.125*(1.0 - gc[0])*(1.0 - gc[1])*(1.0 + gc[2])*
2857 (-2.0 - gc[0] - gc[1] + gc[2]);
2858 funValue[5] = 0.125*(1.0 + gc[0])*(1.0 - gc[1])*(1.0 + gc[2])*
2859 (-2.0 + gc[0] - gc[1] + gc[2]);
2860 funValue[6] = 0.125*(1.0 + gc[0])*(1.0 + gc[1])*(1.0 + gc[2])*
2861 (-2.0 + gc[0] + gc[1] + gc[2]);
2862 funValue[7] = 0.125*(1.0 - gc[0])*(1.0 + gc[1])*(1.0 + gc[2])*
2863 (-2.0 - gc[0] + gc[1] + gc[2]);
2865 funValue[8] = 0.25*(1.0 - gc[0]*gc[0])*(1.0 - gc[1])*(1.0 - gc[2]);
2866 funValue[9] = 0.25*(1.0 - gc[1]*gc[1])*(1.0 + gc[0])*(1.0 - gc[2]);
2867 funValue[10] = 0.25*(1.0 - gc[0]*gc[0])*(1.0 + gc[1])*(1.0 - gc[2]);
2868 funValue[11] = 0.25*(1.0 - gc[1]*gc[1])*(1.0 - gc[0])*(1.0 - gc[2]);
2869 funValue[12] = 0.25*(1.0 - gc[2]*gc[2])*(1.0 - gc[0])*(1.0 - gc[1]);
2870 funValue[13] = 0.25*(1.0 - gc[2]*gc[2])*(1.0 + gc[0])*(1.0 - gc[1]);
2871 funValue[14] = 0.25*(1.0 - gc[2]*gc[2])*(1.0 + gc[0])*(1.0 + gc[1]);
2872 funValue[15] = 0.25*(1.0 - gc[2]*gc[2])*(1.0 - gc[0])*(1.0 + gc[1]);
2873 funValue[16] = 0.25*(1.0 - gc[0]*gc[0])*(1.0 - gc[1])*(1.0 + gc[2]);
2874 funValue[17] = 0.25*(1.0 - gc[1]*gc[1])*(1.0 + gc[0])*(1.0 + gc[2]);
2875 funValue[18] = 0.25*(1.0 - gc[0]*gc[0])*(1.0 + gc[1])*(1.0 + gc[2]);
2876 funValue[19] = 0.25*(1.0 - gc[1]*gc[1])*(1.0 - gc[0])*(1.0 + gc[2]);
2877 SHAPE_FUN_MACRO_END;
2881 * Init Qaudratic Hehahedron Reference coordinates and Shape function.
2884 void GaussInfo::hexa20bInit()
2886 LOCAL_COORD_MACRO_BEGIN;
2888 coords[0] = HEXA20B_REF[0];
2889 coords[1] = HEXA20B_REF[1];
2890 coords[2] = HEXA20B_REF[2];
2893 coords[0] = HEXA20B_REF[3];
2894 coords[1] = HEXA20B_REF[4];
2895 coords[2] = HEXA20B_REF[5];
2898 coords[0] = HEXA20B_REF[6];
2899 coords[1] = HEXA20B_REF[7];
2900 coords[2] = HEXA20B_REF[8];
2903 coords[0] = HEXA20B_REF[9];
2904 coords[1] = HEXA20B_REF[10];
2905 coords[2] = HEXA20B_REF[11];
2908 coords[0] = HEXA20B_REF[12];
2909 coords[1] = HEXA20B_REF[13];
2910 coords[2] = HEXA20B_REF[14];
2913 coords[0] = HEXA20B_REF[15];
2914 coords[1] = HEXA20B_REF[16];
2915 coords[2] = HEXA20B_REF[17];
2918 coords[0] = HEXA20B_REF[18];
2919 coords[1] = HEXA20B_REF[19];
2920 coords[2] = HEXA20B_REF[20];
2923 coords[0] = HEXA20B_REF[21];
2924 coords[1] = HEXA20B_REF[22];
2925 coords[2] = HEXA20B_REF[23];
2928 coords[0] = HEXA20B_REF[24];
2929 coords[1] = HEXA20B_REF[25];
2930 coords[2] = HEXA20B_REF[26];
2933 coords[0] = HEXA20B_REF[27];
2934 coords[1] = HEXA20B_REF[28];
2935 coords[2] = HEXA20B_REF[29];
2938 coords[0] = HEXA20B_REF[30];
2939 coords[1] = HEXA20B_REF[31];
2940 coords[2] = HEXA20B_REF[32];
2943 coords[0] = HEXA20B_REF[33];
2944 coords[1] = HEXA20B_REF[34];
2945 coords[2] = HEXA20B_REF[35];
2948 coords[0] = HEXA20B_REF[36];
2949 coords[1] = HEXA20B_REF[37];
2950 coords[2] = HEXA20B_REF[38];
2953 coords[0] = HEXA20B_REF[39];
2954 coords[1] = HEXA20B_REF[40];
2955 coords[2] = HEXA20B_REF[41];
2958 coords[0] = HEXA20B_REF[42];
2959 coords[1] = HEXA20B_REF[43];
2960 coords[2] = HEXA20B_REF[44];
2963 coords[0] = HEXA20B_REF[45];
2964 coords[1] = HEXA20B_REF[46];
2965 coords[2] = HEXA20B_REF[47];
2968 coords[0] = HEXA20B_REF[48];
2969 coords[1] = HEXA20B_REF[49];
2970 coords[2] = HEXA20B_REF[50];
2973 coords[0] = HEXA20B_REF[51];
2974 coords[1] = HEXA20B_REF[52];
2975 coords[2] = HEXA20B_REF[53];
2978 coords[0] = HEXA20B_REF[54];
2979 coords[1] = HEXA20B_REF[55];
2980 coords[2] = HEXA20B_REF[56];
2983 coords[0] = HEXA20B_REF[57];
2984 coords[1] = HEXA20B_REF[58];
2985 coords[2] = HEXA20B_REF[59];
2987 LOCAL_COORD_MACRO_END;
2989 SHAPE_FUN_MACRO_BEGIN;
2991 funValue[0] = 0.125*(1.0 - gc[0])*(1.0 - gc[1])*(1.0 - gc[2])*
2992 (-2.0 - gc[0] - gc[1] - gc[2]);
2993 funValue[3] = 0.125*(1.0 + gc[0])*(1.0 - gc[1])*(1.0 - gc[2])*
2994 (-2.0 + gc[0] - gc[1] - gc[2]);
2995 funValue[2] = 0.125*(1.0 + gc[0])*(1.0 + gc[1])*(1.0 - gc[2])*
2996 (-2.0 + gc[0] + gc[1] - gc[2]);
2997 funValue[1] = 0.125*(1.0 - gc[0])*(1.0 + gc[1])*(1.0 - gc[2])*
2998 (-2.0 - gc[0] + gc[1] - gc[2]);
2999 funValue[4] = 0.125*(1.0 - gc[0])*(1.0 - gc[1])*(1.0 + gc[2])*
3000 (-2.0 - gc[0] - gc[1] + gc[2]);
3001 funValue[7] = 0.125*(1.0 + gc[0])*(1.0 - gc[1])*(1.0 + gc[2])*
3002 (-2.0 + gc[0] - gc[1] + gc[2]);
3003 funValue[6] = 0.125*(1.0 + gc[0])*(1.0 + gc[1])*(1.0 + gc[2])*
3004 (-2.0 + gc[0] + gc[1] + gc[2]);
3005 funValue[5] = 0.125*(1.0 - gc[0])*(1.0 + gc[1])*(1.0 + gc[2])*
3006 (-2.0 - gc[0] + gc[1] + gc[2]);
3008 funValue[11] = 0.25*(1.0 - gc[0]*gc[0])*(1.0 - gc[1])*(1.0 - gc[2]);
3009 funValue[10] = 0.25*(1.0 - gc[1]*gc[1])*(1.0 + gc[0])*(1.0 - gc[2]);
3010 funValue[9] = 0.25*(1.0 - gc[0]*gc[0])*(1.0 + gc[1])*(1.0 - gc[2]);
3011 funValue[8] = 0.25*(1.0 - gc[1]*gc[1])*(1.0 - gc[0])*(1.0 - gc[2]);
3012 funValue[16] = 0.25*(1.0 - gc[2]*gc[2])*(1.0 - gc[0])*(1.0 - gc[1]);
3013 funValue[19] = 0.25*(1.0 - gc[2]*gc[2])*(1.0 + gc[0])*(1.0 - gc[1]);
3014 funValue[18] = 0.25*(1.0 - gc[2]*gc[2])*(1.0 + gc[0])*(1.0 + gc[1]);
3015 funValue[17] = 0.25*(1.0 - gc[2]*gc[2])*(1.0 - gc[0])*(1.0 + gc[1]);
3016 funValue[15] = 0.25*(1.0 - gc[0]*gc[0])*(1.0 - gc[1])*(1.0 + gc[2]);
3017 funValue[14] = 0.25*(1.0 - gc[1]*gc[1])*(1.0 + gc[0])*(1.0 + gc[2]);
3018 funValue[13] = 0.25*(1.0 - gc[0]*gc[0])*(1.0 + gc[1])*(1.0 + gc[2]);
3019 funValue[12] = 0.25*(1.0 - gc[1]*gc[1])*(1.0 - gc[0])*(1.0 + gc[2]);
3020 SHAPE_FUN_MACRO_END;
3023 void GaussInfo::hexa27aInit()
3025 LOCAL_COORD_MACRO_BEGIN;
3027 coords[0] = HEXA27A_REF[0];
3028 coords[1] = HEXA27A_REF[1];
3029 coords[2] = HEXA27A_REF[2];
3032 coords[0] = HEXA27A_REF[3];
3033 coords[1] = HEXA27A_REF[4];
3034 coords[2] = HEXA27A_REF[5];
3037 coords[0] = HEXA27A_REF[6];
3038 coords[1] = HEXA27A_REF[7];
3039 coords[2] = HEXA27A_REF[8];
3042 coords[0] = HEXA27A_REF[9];
3043 coords[1] = HEXA27A_REF[10];
3044 coords[2] = HEXA27A_REF[11];
3047 coords[0] = HEXA27A_REF[12];
3048 coords[1] = HEXA27A_REF[13];
3049 coords[2] = HEXA27A_REF[14];
3052 coords[0] = HEXA27A_REF[15];
3053 coords[1] = HEXA27A_REF[16];
3054 coords[2] = HEXA27A_REF[17];
3057 coords[0] = HEXA27A_REF[18];
3058 coords[1] = HEXA27A_REF[19];
3059 coords[2] = HEXA27A_REF[20];
3062 coords[0] = HEXA27A_REF[21];
3063 coords[1] = HEXA27A_REF[22];
3064 coords[2] = HEXA27A_REF[23];
3067 coords[0] = HEXA27A_REF[24];
3068 coords[1] = HEXA27A_REF[25];
3069 coords[2] = HEXA27A_REF[26];
3072 coords[0] = HEXA27A_REF[27];
3073 coords[1] = HEXA27A_REF[28];
3074 coords[2] = HEXA27A_REF[29];
3077 coords[0] = HEXA27A_REF[30];
3078 coords[1] = HEXA27A_REF[31];
3079 coords[2] = HEXA27A_REF[32];
3082 coords[0] = HEXA27A_REF[33];
3083 coords[1] = HEXA27A_REF[34];
3084 coords[2] = HEXA27A_REF[35];
3087 coords[0] = HEXA27A_REF[36];
3088 coords[1] = HEXA27A_REF[37];
3089 coords[2] = HEXA27A_REF[38];
3092 coords[0] = HEXA27A_REF[39];
3093 coords[1] = HEXA27A_REF[40];
3094 coords[2] = HEXA27A_REF[41];
3097 coords[0] = HEXA27A_REF[42];
3098 coords[1] = HEXA27A_REF[43];
3099 coords[2] = HEXA27A_REF[44];
3102 coords[0] = HEXA27A_REF[45];
3103 coords[1] = HEXA27A_REF[46];
3104 coords[2] = HEXA27A_REF[47];
3107 coords[0] = HEXA27A_REF[48];
3108 coords[1] = HEXA27A_REF[49];
3109 coords[2] = HEXA27A_REF[50];
3112 coords[0] = HEXA27A_REF[51];
3113 coords[1] = HEXA27A_REF[52];
3114 coords[2] = HEXA27A_REF[53];
3117 coords[0] = HEXA27A_REF[54];
3118 coords[1] = HEXA27A_REF[55];
3119 coords[2] = HEXA27A_REF[56];
3122 coords[0] = HEXA27A_REF[57];
3123 coords[1] = HEXA27A_REF[58];
3124 coords[2] = HEXA27A_REF[59];
3127 coords[0] = HEXA27A_REF[60];
3128 coords[1] = HEXA27A_REF[61];
3129 coords[2] = HEXA27A_REF[62];
3132 coords[0] = HEXA27A_REF[63];
3133 coords[1] = HEXA27A_REF[64];
3134 coords[2] = HEXA27A_REF[65];
3137 coords[0] = HEXA27A_REF[66];
3138 coords[1] = HEXA27A_REF[67];
3139 coords[2] = HEXA27A_REF[68];
3142 coords[0] = HEXA27A_REF[69];
3143 coords[1] = HEXA27A_REF[70];
3144 coords[2] = HEXA27A_REF[71];
3147 coords[0] = HEXA27A_REF[72];
3148 coords[1] = HEXA27A_REF[73];
3149 coords[2] = HEXA27A_REF[74];
3152 coords[0] = HEXA27A_REF[75];
3153 coords[1] = HEXA27A_REF[76];
3154 coords[2] = HEXA27A_REF[77];
3157 coords[0] = HEXA27A_REF[78];
3158 coords[1] = HEXA27A_REF[79];
3159 coords[2] = HEXA27A_REF[80];
3161 LOCAL_COORD_MACRO_END;
3163 SHAPE_FUN_MACRO_BEGIN;
3165 funValue[0] =0.125*gc[0]*(gc[0]-1.)*gc[1]*(gc[1]-1.)*gc[2]*(gc[2]-1.);
3166 funValue[1] =0.125*gc[0]*(gc[0]-1.)*gc[1]*(gc[1]+1.)*gc[2]*(gc[2]-1.);
3167 funValue[2] =0.125*gc[0]*(gc[0]+1.)*gc[1]*(gc[1]+1.)*gc[2]*(gc[2]-1.);
3168 funValue[3] =0.125*gc[0]*(gc[0]+1.)*gc[1]*(gc[1]-1.)*gc[2]*(gc[2]-1.);
3169 funValue[4] =0.125*gc[0]*(gc[0]-1.)*gc[1]*(gc[1]-1.)*gc[2]*(gc[2]+1.);
3170 funValue[5] =0.125*gc[0]*(gc[0]-1.)*gc[1]*(gc[1]+1.)*gc[2]*(gc[2]+1.);
3171 funValue[6] =0.125*gc[0]*(gc[0]+1.)*gc[1]*(gc[1]+1.)*gc[2]*(gc[2]+1.);
3172 funValue[7] =0.125*gc[0]*(gc[0]+1.)*gc[1]*(gc[1]-1.)*gc[2]*(gc[2]+1.);
3173 funValue[8] =0.25*gc[0]*(gc[0]-1.)*(1.-gc[1]*gc[1])*gc[2]*(gc[2]-1.);
3174 funValue[9] =0.25*(1.-gc[0]*gc[0])*gc[1]*(gc[1]+1.)*gc[2]*(gc[2]-1.);
3175 funValue[10]=0.25*gc[0]*(gc[0]+1.)*(1.-gc[1]*gc[1])*gc[2]*(gc[2]-1.);
3176 funValue[11]=0.25*(1.-gc[0]*gc[0])*gc[1]*(gc[1]-1.)*gc[2]*(gc[2]-1.);
3177 funValue[12]=0.25*gc[0]*(gc[0]-1.)*(1.-gc[1]*gc[1])*gc[2]*(gc[2]+1.);
3178 funValue[13]=0.25*(1.-gc[0]*gc[0])*gc[1]*(gc[1]+1.)*gc[2]*(gc[2]+1.);
3179 funValue[14]=0.25*gc[0]*(gc[0]+1.)*(1.-gc[1]*gc[1])*gc[2]*(gc[2]+1.);
3180 funValue[15]=0.25*(1.-gc[0]*gc[0])*gc[1]*(gc[1]-1.)*gc[2]*(gc[2]+1.);
3181 funValue[16]=0.25*gc[0]*(gc[0]-1.)*gc[1]*(gc[1]-1.)*(1.-gc[2]*gc[2]);
3182 funValue[17]=0.25*gc[0]*(gc[0]-1.)*gc[1]*(gc[1]+1.)*(1.-gc[2]*gc[2]);
3183 funValue[18]=0.25*gc[0]*(gc[0]+1.)*gc[1]*(gc[1]+1.)*(1.-gc[2]*gc[2]);
3184 funValue[19]=0.25*gc[0]*(gc[0]+1.)*gc[1]*(gc[1]-1.)*(1.-gc[2]*gc[2]);
3185 funValue[20]=0.5*(1.-gc[0]*gc[0])*(1.-gc[1]*gc[1])*gc[2]*(gc[2]-1.);
3186 funValue[21]=0.5*gc[0]*(gc[0]-1.)*(1.-gc[1]*gc[1])*(1.-gc[2]*gc[2]);
3187 funValue[22]=0.5*(1.-gc[0]*gc[0])*gc[1]*(gc[1]+1.)*(1.-gc[2]*gc[2]);
3188 funValue[23]=0.5*gc[0]*(gc[0]+1.)*(1.-gc[1]*gc[1])*(1.-gc[2]*gc[2]);
3189 funValue[24]=0.5*(1.-gc[0]*gc[0])*gc[1]*(gc[1]-1.)*(1.-gc[2]*gc[2]);
3190 funValue[25]=0.5*(1.-gc[0]*gc[0])*(1.-gc[1]*gc[1])*gc[2]*(gc[2]+1.);
3191 funValue[26]=(1.-gc[0]*gc[0])*(1.-gc[1]*gc[1])*(1.-gc[2]*gc[2]);
3193 SHAPE_FUN_MACRO_END;
3196 ////////////////////////////////////////////////////////////////////////////////////////////////
3197 // GAUSS COORD CLASS //
3198 ////////////////////////////////////////////////////////////////////////////////////////////////
3202 GaussCoords::GaussCoords()
3209 GaussCoords::~GaussCoords()
3211 GaussInfoVector::iterator it = _my_gauss_info.begin();
3212 for( ; it != _my_gauss_info.end(); it++ )
3220 * Add Gauss localization info
3222 void GaussCoords::addGaussInfo( NormalizedCellType theGeometry,
3224 const double* theGaussCoord,
3225 mcIdType theNbGauss,
3226 const double* theReferenceCoord,
3229 GaussInfoVector::iterator it = _my_gauss_info.begin();
3230 for( ; it != _my_gauss_info.end(); it++ )
3232 if( (*it)->getCellType() == theGeometry )
3238 DataVector aGaussCoord;
3239 for(int i = 0 ; i < theNbGauss*coordDim; i++ )
3240 aGaussCoord.push_back(theGaussCoord[i]);
3242 DataVector aReferenceCoord;
3243 for(int i = 0 ; i < theNbRef*coordDim; i++ )
3244 aReferenceCoord.push_back(theReferenceCoord[i]);
3247 GaussInfo* info = new GaussInfo( theGeometry, aGaussCoord, FromIdType<int>(theNbGauss), aReferenceCoord, FromIdType<int>(theNbRef));
3248 info->initLocalInfo();
3250 //If info with cell type doesn't exist add it
3251 if( it == _my_gauss_info.end() )
3253 _my_gauss_info.push_back(info);
3255 // If information exists, update it
3259 std::size_t index = std::distance(_my_gauss_info.begin(),it);
3261 _my_gauss_info[index] = info;
3267 * Calculate gauss points coordinates
3269 double* GaussCoords::calculateCoords( NormalizedCellType theGeometry,
3270 const double *theNodeCoords,
3271 const int theSpaceDim,
3272 const mcIdType *theIndex)
3274 const GaussInfo *info = getInfoGivenCellType(theGeometry);
3275 int nbCoords = theSpaceDim * info->getNbGauss();
3276 double *aCoords = new double[nbCoords];
3277 calculateCoordsAlg(info,theNodeCoords,theSpaceDim,theIndex,aCoords);
3282 void GaussCoords::calculateCoords( NormalizedCellType theGeometry, const double *theNodeCoords, const int theSpaceDim, const mcIdType *theIndex, double *result)
3284 const GaussInfo *info = getInfoGivenCellType(theGeometry);
3285 calculateCoordsAlg(info,theNodeCoords,theSpaceDim,theIndex,result);
3288 void GaussCoords::calculateCoordsAlg(const GaussInfo *info, const double* theNodeCoords, const int theSpaceDim, const mcIdType *theIndex, double *result)
3290 int aConn = info->getNbRef();
3292 int nbCoords = theSpaceDim * info->getNbGauss();
3293 std::fill(result,result+nbCoords,0.);
3295 for( int gaussId = 0; gaussId < info->getNbGauss(); gaussId++ )
3297 double *coord=result+gaussId*theSpaceDim;
3298 const double *function=info->getFunctionValues(gaussId);
3299 for ( int connId = 0; connId < aConn ; connId++ )
3301 const double* nodeCoord = theNodeCoords + (theIndex[connId]*theSpaceDim);
3302 for( int dimId = 0; dimId < theSpaceDim; dimId++ )
3303 coord[dimId] += nodeCoord[dimId]*function[connId];
3308 const GaussInfo *GaussCoords::getInfoGivenCellType(NormalizedCellType cellType)
3310 GaussInfoVector::const_iterator it = _my_gauss_info.begin();
3311 //Try to find gauss localization info
3312 for( ; it != _my_gauss_info.end() ; it++ )
3313 if( (*it)->getCellType()==cellType)
3315 throw INTERP_KERNEL::Exception("Can't find gauss localization information !");