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
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::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};
83 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};
85 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};
87 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};
89 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};
91 //Define common part of the code in the MACRO
92 //---------------------------------------------------------------
93 #define LOCAL_COORD_MACRO_BEGIN \
94 _my_local_reference_coord.resize( _my_local_ref_dim*_my_local_nb_ref ); \
95 for( int refId = 0; refId < _my_local_nb_ref; refId++ ) \
97 double* coords = &_my_local_reference_coord[ refId*_my_local_ref_dim ]; \
101 //---------------------------------------------------------------
102 #define LOCAL_COORD_MACRO_END \
106 //---------------------------------------------------------------
107 #define SHAPE_FUN_MACRO_BEGIN \
108 for( int gaussId = 0 ; gaussId < _my_nb_gauss ; gaussId++ ) \
110 double* funValue = &_my_function_value[ gaussId * _my_nb_ref ]; \
111 const double* gc = &_my_gauss_coord[ gaussId * getGaussCoordDim() ];
113 //---------------------------------------------------------------
114 #define SHAPE_FUN_MACRO_END \
117 #define CHECK_MACRO \
120 std::ostringstream stream; \
121 stream << "Error in the gauss localization for the cell with type "; \
122 stream << cellModel.getRepr(); \
124 throw INTERP_KERNEL::Exception(stream.str().c_str()); \
128 //---------------------------------------------------------------
129 static bool IsEqual(double theLeft, double theRight)
131 static double EPS = 1.0E-3;
132 if(fabs(theLeft) + fabs(theRight) > EPS)
133 return fabs(theLeft-theRight)/(fabs(theLeft)+fabs(theRight)) < EPS;
138 ////////////////////////////////////////////////////////////////////////////////////////////////
139 // GAUSS INFO CLASS //
140 ////////////////////////////////////////////////////////////////////////////////////////////////
143 * Constructor of the GaussInfo
145 GaussInfo::GaussInfo( NormalizedCellType theGeometry,
146 const DataVector& theGaussCoord,
148 const DataVector& theReferenceCoord,
150 _my_geometry(theGeometry),
151 _my_nb_gauss(theNbGauss),
152 _my_gauss_coord(theGaussCoord),
153 _my_nb_ref(theNbRef),
154 _my_reference_coord(theReferenceCoord)
157 //Allocate shape function values
158 _my_function_value.resize( _my_nb_gauss * _my_nb_ref );
164 GaussInfo::~GaussInfo()
169 * Return dimension of the gauss coordinates
171 int GaussInfo::getGaussCoordDim() const
175 return _my_gauss_coord.size()/_my_nb_gauss;
184 * Return dimension of the reference coordinates
186 int GaussInfo::getReferenceCoordDim() const
190 return _my_reference_coord.size()/_my_nb_ref;
199 * Return type of the cell.
201 NormalizedCellType GaussInfo::getCellType() const
207 * Return Nb of the gauss points.
209 int GaussInfo::getNbGauss() const
215 * Return Nb of the reference coordinates.
217 int GaussInfo::getNbRef() const
222 GaussInfo GaussInfo::convertToLinear() const
228 std::vector<double> a(SEG3_REF,SEG3_REF+3);
229 if(IsSatisfy(a,_my_reference_coord))
231 std::vector<double> c(SEG2A_REF,SEG2A_REF+2);
232 return GaussInfo(NORM_SEG2,_my_gauss_coord,getNbGauss(),c,2);
234 throw INTERP_KERNEL::Exception("GaussInfo::convertToLinear : not recognized pattern for SEG3 !");
238 std::vector<double> a(TRIA6A_REF,TRIA6A_REF+12),b(TRIA6B_REF,TRIA6B_REF+12);
239 if(IsSatisfy(a,_my_reference_coord))
241 std::vector<double> c(TRIA3A_REF,TRIA3A_REF+6);
242 return GaussInfo(NORM_TRI3,_my_gauss_coord,getNbGauss(),c,3);
244 if(IsSatisfy(b,_my_reference_coord))
246 std::vector<double> c(TRIA3B_REF,TRIA3B_REF+6);
247 return GaussInfo(NORM_TRI3,_my_gauss_coord,getNbGauss(),c,3);
249 throw INTERP_KERNEL::Exception("GaussInfo::convertToLinear : not recognized pattern for TRI6 !");
253 std::vector<double> a(TRIA7A_REF,TRIA7A_REF+14);
254 if(IsSatisfy(a,_my_reference_coord))
256 std::vector<double> c(TRIA3B_REF,TRIA3B_REF+6);
257 return GaussInfo(NORM_TRI3,_my_gauss_coord,getNbGauss(),c,3);
259 throw INTERP_KERNEL::Exception("GaussInfo::convertToLinear : not recognized pattern for TRI7 !");
263 std::vector<double> a(QUAD8A_REF,QUAD8A_REF+16),b(QUAD8B_REF,QUAD8B_REF+16);
264 if(IsSatisfy(a,_my_reference_coord))
266 std::vector<double> c(QUAD4A_REF,QUAD4A_REF+8);
267 return GaussInfo(NORM_QUAD4,_my_gauss_coord,getNbGauss(),c,4);
269 if(IsSatisfy(b,_my_reference_coord))
271 std::vector<double> c(QUAD4B_REF,QUAD4B_REF+8);
272 return GaussInfo(NORM_QUAD4,_my_gauss_coord,getNbGauss(),c,4);
274 throw INTERP_KERNEL::Exception("GaussInfo::convertToLinear : not recognized pattern for QUAD8 !");
278 std::vector<double> a(QUAD9A_REF,QUAD9A_REF+18);
279 if(IsSatisfy(a,_my_reference_coord))
281 std::vector<double> c(QUAD4B_REF,QUAD4B_REF+8);
282 return GaussInfo(NORM_QUAD4,_my_gauss_coord,getNbGauss(),c,4);
284 throw INTERP_KERNEL::Exception("GaussInfo::convertToLinear : not recognized pattern for QUAD9 !");
288 std::vector<double> a(TETRA10A_REF,TETRA10A_REF+30),b(TETRA10B_REF,TETRA10B_REF+30);
289 if(IsSatisfy(a,_my_reference_coord))
291 std::vector<double> c(TETRA4A_REF,TETRA4A_REF+12);
292 return GaussInfo(NORM_TETRA4,_my_gauss_coord,getNbGauss(),c,4);
294 if(IsSatisfy(b,_my_reference_coord))
296 std::vector<double> c(TETRA4B_REF,TETRA4B_REF+12);
297 return GaussInfo(NORM_TETRA4,_my_gauss_coord,getNbGauss(),c,4);
299 throw INTERP_KERNEL::Exception("GaussInfo::convertToLinear : not recognized pattern for TETRA10 !");
303 std::vector<double> a(PYRA13A_REF,PYRA13A_REF+39),b(PYRA13B_REF,PYRA13B_REF+39);
304 if(IsSatisfy(a,_my_reference_coord))
306 std::vector<double> c(PYRA5A_REF,PYRA5A_REF+15);
307 return GaussInfo(NORM_PYRA5,_my_gauss_coord,getNbGauss(),c,5);
309 if(IsSatisfy(b,_my_reference_coord))
311 std::vector<double> c(PYRA5B_REF,PYRA5B_REF+15);
312 return GaussInfo(NORM_PYRA5,_my_gauss_coord,getNbGauss(),c,5);
314 throw INTERP_KERNEL::Exception("GaussInfo::convertToLinear : not recognized pattern for PYRA13 !");
318 std::vector<double> a(PENTA15A_REF,PENTA15A_REF+45),b(PENTA15B_REF,PENTA15B_REF+45);
319 if(IsSatisfy(a,_my_reference_coord))
321 std::vector<double> c(PENTA6A_REF,PENTA6A_REF+18);
322 return GaussInfo(NORM_PENTA6,_my_gauss_coord,getNbGauss(),c,6);
324 if(IsSatisfy(b,_my_reference_coord))
326 std::vector<double> c(PENTA6B_REF,PENTA6B_REF+18);
327 return GaussInfo(NORM_PENTA6,_my_gauss_coord,getNbGauss(),c,6);
329 throw INTERP_KERNEL::Exception("GaussInfo::convertToLinear : not recognized pattern for PENTA15 !");
333 std::vector<double> a(HEXA20A_REF,HEXA20A_REF+60),b(HEXA20B_REF,HEXA20B_REF+60);
334 if(IsSatisfy(a,_my_reference_coord))
336 std::vector<double> c(HEXA8A_REF,HEXA8A_REF+24);
337 return GaussInfo(NORM_HEXA8,_my_gauss_coord,getNbGauss(),c,8);
339 if(IsSatisfy(b,_my_reference_coord))
341 std::vector<double> c(HEXA8B_REF,HEXA8B_REF+24);
342 return GaussInfo(NORM_HEXA8,_my_gauss_coord,getNbGauss(),c,8);
344 throw INTERP_KERNEL::Exception("GaussInfo::convertToLinear : not recognized pattern for HEXA20 !");
348 std::vector<double> a(HEXA27A_REF,HEXA27A_REF+81);
349 if(IsSatisfy(a,_my_reference_coord))
351 std::vector<double> c(HEXA8B_REF,HEXA8B_REF+24);
352 return GaussInfo(NORM_HEXA8,_my_gauss_coord,getNbGauss(),c,8);
354 throw INTERP_KERNEL::Exception("GaussInfo::convertToLinear : not recognized pattern for HEXA27 !");
357 throw INTERP_KERNEL::Exception("GaussInfo::convertToLinear : not implemented yet for other types than TETRA10, HEXA20, HEXA27, TRI3, QUAD8, QUAD8, PYRA13, PENTA15 !");
362 bool GaussInfo::IsSatisfy(const std::vector<double>& ref1, const std::vector<double>& ref2)
364 std::size_t sz(ref1.size());
367 for(std::size_t i=0;i<sz;i++)
368 if(!IsEqual(ref1[i],ref2[i]))
376 bool GaussInfo::isSatisfy()
379 bool anIsSatisfy = ((_my_local_nb_ref == _my_nb_ref) && (_my_local_ref_dim == getReferenceCoordDim()));
383 for( int refId = 0; refId < _my_local_nb_ref; refId++ )
385 double* refCoord = &_my_reference_coord[ refId*_my_local_ref_dim ];
386 double* localRefCoord = &_my_local_reference_coord[ refId*_my_local_ref_dim ];
387 bool anIsEqual = false;
388 for( int dimId = 0; dimId < _my_local_ref_dim; dimId++ )
390 anIsEqual = IsEqual( localRefCoord[dimId], refCoord[dimId]);
401 std::vector<double> GaussInfo::NormalizeCoordinatesIfNecessary(NormalizedCellType ct, int inputDim, const std::vector<double>& inputArray)
403 std::size_t sz(inputArray.size()),dim((std::size_t)inputDim);
405 throw INTERP_KERNEL::Exception("GaussInfo::NormalizeCoordinatesIfNecessary : invalid dimension ! Must be !=0 !");
407 throw INTERP_KERNEL::Exception("GaussInfo::NormalizeCoordinatesIfNecessary : invalid input array ! Inconsistent with the given dimension !");
408 const CellModel& cm(CellModel::GetCellModel(ct));
409 std::size_t baseDim((std::size_t)cm.getDimension());
412 std::size_t nbOfItems(sz/dim);
413 std::vector<double> ret(nbOfItems*baseDim);
416 for(std::size_t i=0;i<nbOfItems;i++)
420 ret[i*baseDim+j]=inputArray[i*dim+j];
427 for(std::size_t i=0;i<nbOfItems;i++)
431 ret[i*baseDim+j]=inputArray[i*dim+j];
437 typedef void (*MapToShapeFunction)(GaussInfo& obj);
440 * Initialize the internal vectors
442 void GaussInfo::initLocalInfo()
444 bool aSatify = false;
445 const CellModel& cellModel(CellModel::GetCellModel(_my_geometry));
446 switch( _my_geometry )
449 _my_local_ref_dim = 0;
450 _my_local_nb_ref = 1;
452 aSatify = isSatisfy();
457 _my_local_ref_dim = 1;
458 _my_local_nb_ref = 2;
460 aSatify = isSatisfy();
464 aSatify = isSatisfy();
470 _my_local_ref_dim = 1;
471 _my_local_nb_ref = 3;
473 aSatify = isSatisfy();
478 _my_local_ref_dim = 2;
479 _my_local_nb_ref = 3;
481 aSatify = isSatisfy();
486 aSatify = isSatisfy();
492 _my_local_ref_dim = 2;
493 _my_local_nb_ref = 6;
495 aSatify = isSatisfy();
499 aSatify = isSatisfy();
505 _my_local_ref_dim = 2;
506 _my_local_nb_ref = 7;
508 aSatify = isSatisfy();
514 _my_local_ref_dim = 2;
515 _my_local_nb_ref = 4;
516 MapToShapeFunction QUAD4PTR[]={Quad4aInit,Quad4bInit,Quad4cInit,Quad4DegSeg2Init};
517 std::size_t NB_OF_QUAD4PTR(sizeof(QUAD4PTR)/sizeof(MapToShapeFunction));
518 for(std::size_t i=0;i<NB_OF_QUAD4PTR && !aSatify;i++)
520 (QUAD4PTR[i])(*this);
521 aSatify = isSatisfy();
529 _my_local_ref_dim = 2;
530 _my_local_nb_ref = 8;
532 aSatify = isSatisfy();
537 aSatify = isSatisfy();
543 _my_local_ref_dim = 2;
544 _my_local_nb_ref = 9;
546 aSatify = isSatisfy();
551 _my_local_ref_dim = 3;
552 _my_local_nb_ref = 4;
554 aSatify = isSatisfy();
559 aSatify = isSatisfy();
565 _my_local_ref_dim = 3;
566 _my_local_nb_ref = 10;
568 aSatify = isSatisfy();
573 aSatify = isSatisfy();
579 _my_local_ref_dim = 3;
580 _my_local_nb_ref = 5;
582 aSatify = isSatisfy();
587 aSatify = isSatisfy();
593 _my_local_ref_dim = 3;
594 _my_local_nb_ref = 13;
596 aSatify = isSatisfy();
601 aSatify = isSatisfy();
608 _my_local_ref_dim = 3;
609 _my_local_nb_ref = 6;
610 MapToShapeFunction PENTA6PTR[]={Penta6aInit,Penta6bInit,Penta6DegTria3aInit,Penta6DegTria3bInit};
611 std::size_t NB_OF_PENTA6PTR(sizeof(PENTA6PTR)/sizeof(MapToShapeFunction));
612 for(std::size_t i=0;i<NB_OF_PENTA6PTR && !aSatify;i++)
614 (PENTA6PTR[i])(*this);
615 aSatify = isSatisfy();
622 _my_local_ref_dim = 3;
623 _my_local_nb_ref = 6;
625 aSatify = isSatisfy();
630 aSatify = isSatisfy();
637 _my_local_ref_dim = 3;
638 _my_local_nb_ref = 15;
639 MapToShapeFunction PENTA15PTR[]={Penta15aInit,Penta15bInit};
640 std::size_t NB_OF_PENTA15PTR(sizeof(PENTA15PTR)/sizeof(MapToShapeFunction));
641 for(std::size_t i=0;i<NB_OF_PENTA15PTR && !aSatify;i++)
643 (PENTA15PTR[i])(*this);
644 aSatify = isSatisfy();
652 _my_local_ref_dim = 3;
653 _my_local_nb_ref = 8;
654 MapToShapeFunction HEXA8PTR[]={Hexa8aInit,Hexa8bInit,Hexa8DegQuad4aInit,Hexa8DegQuad4bInit,Hexa8DegQuad4cInit};
655 std::size_t NB_OF_HEXA8PTR(sizeof(HEXA8PTR)/sizeof(MapToShapeFunction));
656 for(std::size_t i=0;i<NB_OF_HEXA8PTR && !aSatify;i++)
658 (HEXA8PTR[i])(*this);
659 aSatify = isSatisfy();
666 _my_local_ref_dim = 3;
667 _my_local_nb_ref = 20;
669 aSatify = isSatisfy();
674 aSatify = isSatisfy();
680 _my_local_ref_dim = 3;
681 _my_local_nb_ref = 27;
683 aSatify = isSatisfy();
688 throw INTERP_KERNEL::Exception("Not managed cell type !");
694 * Return shape function value by node id
696 const double* GaussInfo::getFunctionValues( const int theGaussId ) const
698 return &_my_function_value[ _my_nb_ref*theGaussId ];
701 void GaussInfo::point1Init()
703 double *funValue(&_my_function_value[0]);
708 * Init Segment 2 Reference coordinates ans Shape function.
710 void GaussInfo::seg2aInit()
712 LOCAL_COORD_MACRO_BEGIN;
714 coords[0] = SEG2A_REF[0];
717 coords[0] = SEG2A_REF[1];
719 LOCAL_COORD_MACRO_END;
721 SHAPE_FUN_MACRO_BEGIN;
722 funValue[0] = 0.5*(1.0 - gc[0]);
723 funValue[1] = 0.5*(1.0 + gc[0]);
727 void GaussInfo::seg2bInit()
729 LOCAL_COORD_MACRO_BEGIN;
731 coords[0] = SEG2B_REF[0];
734 coords[0] = SEG2B_REF[1];
736 LOCAL_COORD_MACRO_END;
738 SHAPE_FUN_MACRO_BEGIN;
739 funValue[0] = 1.0 - gc[0];
745 * Init Segment 3 Reference coordinates ans Shape function.
747 void GaussInfo::seg3Init()
749 LOCAL_COORD_MACRO_BEGIN;
751 coords[0] = SEG3_REF[0];
754 coords[0] = SEG3_REF[1];
757 coords[0] = SEG3_REF[2];
758 LOCAL_COORD_MACRO_END;
760 SHAPE_FUN_MACRO_BEGIN;
761 funValue[0] = -0.5*(1.0 - gc[0])*gc[0];
762 funValue[1] = 0.5*(1.0 + gc[0])*gc[0];
763 funValue[2] = (1.0 + gc[0])*(1.0 - gc[0]);
768 * Init Triangle Reference coordinates ans Shape function.
771 void GaussInfo::tria3aInit()
773 LOCAL_COORD_MACRO_BEGIN;
775 coords[0] = TRIA3A_REF[0];
776 coords[1] = TRIA3A_REF[1];
779 coords[0] = TRIA3A_REF[2];
780 coords[1] = TRIA3A_REF[3];
783 coords[0] = TRIA3A_REF[4];
784 coords[1] = TRIA3A_REF[5];
786 LOCAL_COORD_MACRO_END;
788 SHAPE_FUN_MACRO_BEGIN;
789 funValue[0] = 0.5*(1.0 + gc[1]);
790 funValue[1] = -0.5*(gc[0] + gc[1]);
791 funValue[2] = 0.5*(1.0 + gc[0]);
796 * Init Triangle Reference coordinates ans Shape function.
799 void GaussInfo::tria3bInit()
801 LOCAL_COORD_MACRO_BEGIN;
803 coords[0] = TRIA3B_REF[0];
804 coords[1] = TRIA3B_REF[1];
807 coords[0] = TRIA3B_REF[2];
808 coords[1] = TRIA3B_REF[3];
811 coords[0] = TRIA3B_REF[4];
812 coords[1] = TRIA3B_REF[5];
814 LOCAL_COORD_MACRO_END;
816 SHAPE_FUN_MACRO_BEGIN;
817 funValue[0] = 1.0 - gc[0] - gc[1];
824 * Init Quadratic Triangle Reference coordinates ans Shape function.
827 void GaussInfo::tria6aInit()
829 LOCAL_COORD_MACRO_BEGIN;
831 coords[0] = TRIA6A_REF[0];
832 coords[1] = TRIA6A_REF[1];
835 coords[0] = TRIA6A_REF[2];
836 coords[1] = TRIA6A_REF[3];
839 coords[0] = TRIA6A_REF[4];
840 coords[1] = TRIA6A_REF[5];
843 coords[0] = TRIA6A_REF[6];
844 coords[1] = TRIA6A_REF[7];
847 coords[0] = TRIA6A_REF[8];
848 coords[1] = TRIA6A_REF[9];
851 coords[0] = TRIA6A_REF[10];
852 coords[1] = TRIA6A_REF[11];
854 LOCAL_COORD_MACRO_END;
856 SHAPE_FUN_MACRO_BEGIN;
857 funValue[0] = 0.5*(1.0 + gc[1])*gc[1];
858 funValue[1] = 0.5*(gc[0] + gc[1])*(gc[0] + gc[1] + 1);
859 funValue[2] = 0.5*(1.0 + gc[0])*gc[0];
860 funValue[3] = -1.0*(1.0 + gc[1])*(gc[0] + gc[1]);
861 funValue[4] = -1.0*(1.0 + gc[0])*(gc[0] + gc[1]);
862 funValue[5] = (1.0 + gc[1])*(1.0 + gc[1]);
867 * Init Quadratic Triangle Reference coordinates ans Shape function.
870 void GaussInfo::tria6bInit()
872 LOCAL_COORD_MACRO_BEGIN;
874 coords[0] = TRIA6B_REF[0];
875 coords[1] = TRIA6B_REF[1];
878 coords[0] = TRIA6B_REF[2];
879 coords[1] = TRIA6B_REF[3];
882 coords[0] = TRIA6B_REF[4];
883 coords[1] = TRIA6B_REF[5];
886 coords[0] = TRIA6B_REF[6];
887 coords[1] = TRIA6B_REF[7];
890 coords[0] = TRIA6B_REF[8];
891 coords[1] = TRIA6B_REF[9];
894 coords[0] = TRIA6B_REF[10];
895 coords[1] = TRIA6B_REF[11];
897 LOCAL_COORD_MACRO_END;
899 SHAPE_FUN_MACRO_BEGIN;
900 funValue[0] = (1.0 - gc[0] - gc[1])*(1.0 - 2.0*gc[0] - 2.0*gc[1]);
901 funValue[1] = gc[0]*(2.0*gc[0] - 1.0);
902 funValue[2] = gc[1]*(2.0*gc[1] - 1.0);
903 funValue[3] = 4.0*gc[0]*(1.0 - gc[0] - gc[1]);
904 funValue[4] = 4.0*gc[0]*gc[1];
905 funValue[5] = 4.0*gc[1]*(1.0 - gc[0] - gc[1]);
909 void GaussInfo::tria7aInit()
911 LOCAL_COORD_MACRO_BEGIN;
913 coords[0] = TRIA7A_REF[0];
914 coords[1] = TRIA7A_REF[1];
917 coords[0] = TRIA7A_REF[2];
918 coords[1] = TRIA7A_REF[3];
921 coords[0] = TRIA7A_REF[4];
922 coords[1] = TRIA7A_REF[5];
925 coords[0] = TRIA7A_REF[6];
926 coords[1] = TRIA7A_REF[7];
929 coords[0] = TRIA7A_REF[8];
930 coords[1] = TRIA7A_REF[9];
933 coords[0] = TRIA7A_REF[10];
934 coords[1] = TRIA7A_REF[11];
937 coords[0] = TRIA7A_REF[12];
938 coords[1] = TRIA7A_REF[13];
940 LOCAL_COORD_MACRO_END;
942 SHAPE_FUN_MACRO_BEGIN;
943 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]);
944 funValue[1]=gc[0]*(-1+2*gc[0]+3*gc[1]-3*gc[1]*(gc[0]+gc[1]));
945 funValue[2]=gc[1]*(-1.+3.*gc[0]+2.*gc[1]-3.*gc[0]*(gc[0]+gc[1]));
946 funValue[3]=4*gc[0]*(1-gc[0]-4*gc[1]+3*gc[1]*(gc[0]+gc[1]));
947 funValue[4]=4*gc[0]*gc[1]*(-2+3*(gc[0]+gc[1]));
948 funValue[5]=4*gc[1]*(1-4*gc[0]-gc[1]+3*gc[0]*(gc[0]+gc[1]));
949 funValue[6]=27*gc[0]*gc[1]*(1-gc[0]-gc[1]);
954 * Init Quadrangle Reference coordinates ans Shape function.
957 void GaussInfo::quad4aInit()
959 LOCAL_COORD_MACRO_BEGIN;
961 coords[0] = QUAD4A_REF[0];
962 coords[1] = QUAD4A_REF[1];
965 coords[0] = QUAD4A_REF[2];
966 coords[1] = QUAD4A_REF[3];
969 coords[0] = QUAD4A_REF[4];
970 coords[1] = QUAD4A_REF[5];
973 coords[0] = QUAD4A_REF[6];
974 coords[1] = QUAD4A_REF[7];
976 LOCAL_COORD_MACRO_END;
978 SHAPE_FUN_MACRO_BEGIN;
979 funValue[0] = 0.25*(1.0 + gc[1])*(1.0 - gc[0]);
980 funValue[1] = 0.25*(1.0 - gc[1])*(1.0 - gc[0]);
981 funValue[2] = 0.25*(1.0 - gc[1])*(1.0 + gc[0]);
982 funValue[3] = 0.25*(1.0 + gc[0])*(1.0 + gc[1]);
987 * Init Quadrangle Reference coordinates ans Shape function.
990 void GaussInfo::quad4bInit()
992 LOCAL_COORD_MACRO_BEGIN;
994 coords[0] = QUAD4B_REF[0];
995 coords[1] = QUAD4B_REF[1];
998 coords[0] = QUAD4B_REF[2];
999 coords[1] = QUAD4B_REF[3];
1002 coords[0] = QUAD4B_REF[4];
1003 coords[1] = QUAD4B_REF[5];
1006 coords[0] = QUAD4B_REF[6];
1007 coords[1] = QUAD4B_REF[7];
1009 LOCAL_COORD_MACRO_END;
1011 SHAPE_FUN_MACRO_BEGIN;
1012 funValue[0] = 0.25*(1.0 - gc[0])*(1.0 - gc[1]);
1013 funValue[1] = 0.25*(1.0 + gc[0])*(1.0 - gc[1]);
1014 funValue[2] = 0.25*(1.0 + gc[0])*(1.0 + gc[1]);
1015 funValue[3] = 0.25*(1.0 - gc[0])*(1.0 + gc[1]);
1016 SHAPE_FUN_MACRO_END;
1019 void GaussInfo::quad4cInit()
1021 LOCAL_COORD_MACRO_BEGIN;
1039 LOCAL_COORD_MACRO_END;
1041 SHAPE_FUN_MACRO_BEGIN;
1042 funValue[0] = 0.25*(1.0 - gc[0])*(1.0 - gc[1]);
1043 funValue[1] = 0.25*(1.0 - gc[0])*(1.0 + gc[1]);
1044 funValue[2] = 0.25*(1.0 + gc[0])*(1.0 + gc[1]);
1045 funValue[3] = 0.25*(1.0 + gc[0])*(1.0 - gc[1]);
1046 SHAPE_FUN_MACRO_END;
1050 * This shapefunc map is same as degenerated seg2aInit
1052 void GaussInfo::quad4DegSeg2Init()
1054 LOCAL_COORD_MACRO_BEGIN;
1071 LOCAL_COORD_MACRO_END;
1073 SHAPE_FUN_MACRO_BEGIN;
1074 funValue[0] = 0.5*(1.0 - gc[0]);
1075 funValue[1] = 0.5*(1.0 + gc[0]);
1078 SHAPE_FUN_MACRO_END;
1082 * Init Quadratic Quadrangle Reference coordinates ans Shape function.
1085 void GaussInfo::quad8aInit()
1087 LOCAL_COORD_MACRO_BEGIN;
1089 coords[0] = QUAD8A_REF[0];
1090 coords[1] = QUAD8A_REF[1];
1093 coords[0] = QUAD8A_REF[2];
1094 coords[1] = QUAD8A_REF[3];
1097 coords[0] = QUAD8A_REF[4];
1098 coords[1] = QUAD8A_REF[5];
1101 coords[0] = QUAD8A_REF[6];
1102 coords[1] = QUAD8A_REF[7];
1105 coords[0] = QUAD8A_REF[8];
1106 coords[1] = QUAD8A_REF[9];
1109 coords[0] = QUAD8A_REF[10];
1110 coords[1] = QUAD8A_REF[11];
1113 coords[0] = QUAD8A_REF[12];
1114 coords[1] = QUAD8A_REF[13];
1117 coords[0] = QUAD8A_REF[14];
1118 coords[1] = QUAD8A_REF[15];
1120 LOCAL_COORD_MACRO_END;
1122 SHAPE_FUN_MACRO_BEGIN;
1123 funValue[0] = 0.25*(1.0 + gc[1])*(1.0 - gc[0])*(gc[1] - gc[0] - 1.0);
1124 funValue[1] = 0.25*(1.0 - gc[1])*(1.0 - gc[0])*(-gc[1] - gc[0] - 1.0);
1125 funValue[2] = 0.25*(1.0 - gc[1])*(1.0 + gc[0])*(-gc[1] + gc[0] - 1.0);
1126 funValue[3] = 0.25*(1.0 + gc[1])*(1.0 + gc[0])*(gc[1] + gc[0] - 1.0);
1127 funValue[4] = 0.5*(1.0 - gc[0])*(1.0 - gc[1])*(1.0 + gc[1]);
1128 funValue[5] = 0.5*(1.0 - gc[1])*(1.0 - gc[0])*(1.0 + gc[0]);
1129 funValue[6] = 0.5*(1.0 + gc[0])*(1.0 - gc[1])*(1.0 + gc[1]);
1130 funValue[7] = 0.5*(1.0 + gc[1])*(1.0 - gc[0])*(1.0 + gc[0]);
1131 SHAPE_FUN_MACRO_END;
1135 * Init Quadratic Quadrangle Reference coordinates ans Shape function.
1138 void GaussInfo::quad8bInit()
1140 LOCAL_COORD_MACRO_BEGIN;
1142 coords[0] = QUAD8B_REF[0];
1143 coords[1] = QUAD8B_REF[1];
1146 coords[0] = QUAD8B_REF[2];
1147 coords[1] = QUAD8B_REF[3];
1150 coords[0] = QUAD8B_REF[4];
1151 coords[1] = QUAD8B_REF[5];
1154 coords[0] = QUAD8B_REF[6];
1155 coords[1] = QUAD8B_REF[7];
1158 coords[0] = QUAD8B_REF[8];
1159 coords[1] = QUAD8B_REF[9];
1162 coords[0] = QUAD8B_REF[10];
1163 coords[1] = QUAD8B_REF[11];
1166 coords[0] = QUAD8B_REF[12];
1167 coords[1] = QUAD8B_REF[13];
1170 coords[0] = QUAD8B_REF[14];
1171 coords[1] = QUAD8B_REF[15];
1173 LOCAL_COORD_MACRO_END;
1175 SHAPE_FUN_MACRO_BEGIN;
1176 funValue[0] = 0.25*(1.0 - gc[0])*(1.0 - gc[1])*(-1.0 - gc[0] - gc[1]);
1177 funValue[1] = 0.25*(1.0 + gc[0])*(1.0 - gc[1])*(-1.0 + gc[0] - gc[1]);
1178 funValue[2] = 0.25*(1.0 + gc[0])*(1.0 + gc[1])*(-1.0 + gc[0] + gc[1]);
1179 funValue[3] = 0.25*(1.0 - gc[0])*(1.0 + gc[1])*(-1.0 - gc[0] + gc[1]);
1180 funValue[4] = 0.5*(1.0 - gc[0]*gc[0])*(1.0 - gc[1]);
1181 funValue[5] = 0.5*(1.0 - gc[1]*gc[1])*(1.0 + gc[0]);
1182 funValue[6] = 0.5*(1.0 - gc[0]*gc[0])*(1.0 + gc[1]);
1183 funValue[7] = 0.5*(1.0 - gc[1]*gc[1])*(1.0 - gc[0]);
1184 SHAPE_FUN_MACRO_END;
1187 void GaussInfo::quad9aInit()
1189 LOCAL_COORD_MACRO_BEGIN;
1191 coords[0] = QUAD9A_REF[0];
1192 coords[1] = QUAD9A_REF[1];
1195 coords[0] = QUAD9A_REF[2];
1196 coords[1] = QUAD9A_REF[3];
1199 coords[0] = QUAD9A_REF[4];
1200 coords[1] = QUAD9A_REF[5];
1203 coords[0] = QUAD9A_REF[6];
1204 coords[1] = QUAD9A_REF[7];
1207 coords[0] = QUAD9A_REF[8];
1208 coords[1] = QUAD9A_REF[9];
1211 coords[0] = QUAD9A_REF[10];
1212 coords[1] = QUAD9A_REF[11];
1215 coords[0] = QUAD9A_REF[12];
1216 coords[1] = QUAD9A_REF[13];
1219 coords[0] = QUAD9A_REF[14];
1220 coords[1] = QUAD9A_REF[15];
1223 coords[0] = QUAD9A_REF[16];
1224 coords[1] = QUAD9A_REF[17];
1226 LOCAL_COORD_MACRO_END;
1228 SHAPE_FUN_MACRO_BEGIN;
1229 funValue[0] = 0.25*gc[0]*gc[1]*(gc[0]-1.)*(gc[1]-1.);
1230 funValue[1] = 0.25*gc[0]*gc[1]*(gc[0]+1.)*(gc[1]-1.);
1231 funValue[2] = 0.25*gc[0]*gc[1]*(gc[0]+1.)*(gc[1]+1.);
1232 funValue[3] = 0.25*gc[0]*gc[1]*(gc[0]-1.)*(gc[1]+1.);
1233 funValue[4] = 0.5*(1.-gc[0]*gc[0])*gc[1]*(gc[1]-1.);
1234 funValue[5] = 0.5*gc[0]*(gc[0]+1.)*(1.-gc[1]*gc[1]);
1235 funValue[6] = 0.5*(1.-gc[0]*gc[0])*gc[1]*(gc[1]+1.);
1236 funValue[7] = 0.5*gc[0]*(gc[0]-1.)*(1.-gc[1]*gc[1]);
1237 funValue[8] = (1.-gc[0]*gc[0])*(1.-gc[1]*gc[1]);
1238 SHAPE_FUN_MACRO_END;
1242 * Init Tetrahedron Reference coordinates ans Shape function.
1245 void GaussInfo::tetra4aInit()
1247 LOCAL_COORD_MACRO_BEGIN;
1249 coords[0] = TETRA4A_REF[0];
1250 coords[1] = TETRA4A_REF[1];
1251 coords[2] = TETRA4A_REF[2];
1254 coords[0] = TETRA4A_REF[3];
1255 coords[1] = TETRA4A_REF[4];
1256 coords[2] = TETRA4A_REF[5];
1259 coords[0] = TETRA4A_REF[6];
1260 coords[1] = TETRA4A_REF[7];
1261 coords[2] = TETRA4A_REF[8];
1264 coords[0] = TETRA4A_REF[9];
1265 coords[1] = TETRA4A_REF[10];
1266 coords[2] = TETRA4A_REF[11];
1268 LOCAL_COORD_MACRO_END;
1270 SHAPE_FUN_MACRO_BEGIN;
1271 funValue[0] = gc[1];
1272 funValue[1] = gc[2];
1273 funValue[2] = 1.0 - gc[0] - gc[1] - gc[2];
1274 funValue[3] = gc[0];
1275 SHAPE_FUN_MACRO_END;
1279 * Init Tetrahedron Reference coordinates ans Shape function.
1282 void GaussInfo::tetra4bInit()
1284 LOCAL_COORD_MACRO_BEGIN;
1286 coords[0] = TETRA4B_REF[0];
1287 coords[1] = TETRA4B_REF[1];
1288 coords[2] = TETRA4B_REF[2];
1291 coords[0] = TETRA4B_REF[3];
1292 coords[1] = TETRA4B_REF[4];
1293 coords[2] = TETRA4B_REF[5];
1296 coords[0] = TETRA4B_REF[6];
1297 coords[1] = TETRA4B_REF[7];
1298 coords[2] = TETRA4B_REF[8];
1301 coords[0] = TETRA4B_REF[9];
1302 coords[1] = TETRA4B_REF[10];
1303 coords[2] = TETRA4B_REF[11];
1305 LOCAL_COORD_MACRO_END;
1307 SHAPE_FUN_MACRO_BEGIN;
1308 funValue[0] = gc[1];
1309 funValue[2] = gc[2];
1310 funValue[1] = 1.0 - gc[0] - gc[1] - gc[2];
1311 funValue[3] = gc[0];
1312 SHAPE_FUN_MACRO_END;
1316 * Init Quadratic Tetrahedron Reference coordinates ans Shape function.
1319 void GaussInfo::tetra10aInit()
1321 LOCAL_COORD_MACRO_BEGIN;
1323 coords[0] = TETRA10A_REF[0];
1324 coords[1] = TETRA10A_REF[1];
1325 coords[2] = TETRA10A_REF[2];
1328 coords[0] = TETRA10A_REF[3];
1329 coords[1] = TETRA10A_REF[4];
1330 coords[2] = TETRA10A_REF[5];
1333 coords[0] = TETRA10A_REF[6];
1334 coords[1] = TETRA10A_REF[7];
1335 coords[2] = TETRA10A_REF[8];
1338 coords[0] = TETRA10A_REF[9];
1339 coords[1] = TETRA10A_REF[10];
1340 coords[2] = TETRA10A_REF[11];
1343 coords[0] = TETRA10A_REF[12];
1344 coords[1] = TETRA10A_REF[13];
1345 coords[2] = TETRA10A_REF[14];
1348 coords[0] = TETRA10A_REF[15];
1349 coords[1] = TETRA10A_REF[16];
1350 coords[2] = TETRA10A_REF[17];
1353 coords[0] = TETRA10A_REF[18];
1354 coords[1] = TETRA10A_REF[19];
1355 coords[2] = TETRA10A_REF[20];
1358 coords[0] = TETRA10A_REF[21];
1359 coords[1] = TETRA10A_REF[22];
1360 coords[2] = TETRA10A_REF[23];
1363 coords[0] = TETRA10A_REF[24];
1364 coords[1] = TETRA10A_REF[25];
1365 coords[2] = TETRA10A_REF[26];
1368 coords[0] = TETRA10A_REF[27];
1369 coords[1] = TETRA10A_REF[28];
1370 coords[2] = TETRA10A_REF[29];
1372 LOCAL_COORD_MACRO_END;
1374 SHAPE_FUN_MACRO_BEGIN;
1375 funValue[0] = gc[1]*(2.0*gc[1] - 1.0);
1376 funValue[1] = gc[2]*(2.0*gc[2] - 1.0);
1377 funValue[2] = (1.0 - gc[0] - gc[1] - gc[2])*(1.0 - 2.0*gc[0] - 2.0*gc[1] - 2.0*gc[2]);
1378 funValue[3] = gc[0]*(2.0*gc[0] - 1.0);
1379 funValue[4] = 4.0*gc[1]*gc[2];
1380 funValue[5] = 4.0*gc[2]*(1.0 - gc[0] - gc[1] - gc[2]);
1381 funValue[6] = 4.0*gc[1]*(1.0 - gc[0] - gc[1] - gc[2]);
1382 funValue[7] = 4.0*gc[0]*gc[1];
1383 funValue[8] = 4.0*gc[0]*gc[2];
1384 funValue[9] = 4.0*gc[0]*(1.0 - gc[0] - gc[1] - gc[2]);
1385 SHAPE_FUN_MACRO_END;
1389 * Init Quadratic Tetrahedron Reference coordinates ans Shape function.
1392 void GaussInfo::tetra10bInit()
1394 LOCAL_COORD_MACRO_BEGIN;
1396 coords[0] = TETRA10B_REF[0];
1397 coords[1] = TETRA10B_REF[1];
1398 coords[2] = TETRA10B_REF[2];
1401 coords[0] = TETRA10B_REF[3];
1402 coords[1] = TETRA10B_REF[4];
1403 coords[2] = TETRA10B_REF[5];
1406 coords[0] = TETRA10B_REF[6];
1407 coords[1] = TETRA10B_REF[7];
1408 coords[2] = TETRA10B_REF[8];
1411 coords[0] = TETRA10B_REF[9];
1412 coords[1] = TETRA10B_REF[10];
1413 coords[2] = TETRA10B_REF[11];
1416 coords[0] = TETRA10B_REF[12];
1417 coords[1] = TETRA10B_REF[13];
1418 coords[2] = TETRA10B_REF[14];
1421 coords[0] = TETRA10B_REF[15];
1422 coords[1] = TETRA10B_REF[16];
1423 coords[2] = TETRA10B_REF[17];
1426 coords[0] = TETRA10B_REF[18];
1427 coords[1] = TETRA10B_REF[19];
1428 coords[2] = TETRA10B_REF[20];
1431 coords[0] = TETRA10B_REF[21];
1432 coords[1] = TETRA10B_REF[22];
1433 coords[2] = TETRA10B_REF[23];
1436 coords[0] = TETRA10B_REF[24];
1437 coords[1] = TETRA10B_REF[25];
1438 coords[2] = TETRA10B_REF[26];
1441 coords[0] = TETRA10B_REF[27];
1442 coords[1] = TETRA10B_REF[28];
1443 coords[2] = TETRA10B_REF[29];
1445 LOCAL_COORD_MACRO_END;
1446 SHAPE_FUN_MACRO_BEGIN;
1447 funValue[0] = gc[1]*(2.0*gc[1] - 1.0);
1448 funValue[2] = gc[2]*(2.0*gc[2] - 1.0);
1449 funValue[1] = (1.0 - gc[0] - gc[1] - gc[2])*(1.0 - 2.0*gc[0] - 2.0*gc[1] - 2.0*gc[2]);
1450 funValue[3] = gc[0]*(2.0*gc[0] - 1.0);
1451 funValue[6] = 4.0*gc[1]*gc[2];
1452 funValue[5] = 4.0*gc[2]*(1.0 - gc[0] - gc[1] - gc[2]);
1453 funValue[4] = 4.0*gc[1]*(1.0 - gc[0] - gc[1] - gc[2]);
1454 funValue[7] = 4.0*gc[0]*gc[1];
1455 funValue[9] = 4.0*gc[0]*gc[2];
1456 funValue[8] = 4.0*gc[0]*(1.0 - gc[0] - gc[1] - gc[2]);
1457 SHAPE_FUN_MACRO_END;
1461 * Init Pyramid Reference coordinates ans Shape function.
1464 void GaussInfo::pyra5aInit()
1466 LOCAL_COORD_MACRO_BEGIN;
1468 coords[0] = PYRA5A_REF[0];
1469 coords[1] = PYRA5A_REF[1];
1470 coords[2] = PYRA5A_REF[2];
1473 coords[0] = PYRA5A_REF[3];
1474 coords[1] = PYRA5A_REF[4];
1475 coords[2] = PYRA5A_REF[5];
1478 coords[0] = PYRA5A_REF[6];
1479 coords[1] = PYRA5A_REF[7];
1480 coords[2] = PYRA5A_REF[8];
1483 coords[0] = PYRA5A_REF[9];
1484 coords[1] = PYRA5A_REF[10];
1485 coords[2] = PYRA5A_REF[11];
1488 coords[0] = PYRA5A_REF[12];
1489 coords[1] = PYRA5A_REF[13];
1490 coords[2] = PYRA5A_REF[14];
1492 LOCAL_COORD_MACRO_END;
1494 SHAPE_FUN_MACRO_BEGIN;
1495 funValue[0] = 0.25*(-gc[0] + gc[1] - 1.0)*(-gc[0] - gc[1] - 1.0)*(1.0 - gc[2]);
1496 funValue[1] = 0.25*(-gc[0] - gc[1] - 1.0)*(+gc[0] - gc[1] - 1.0)*(1.0 - gc[2]);
1497 funValue[2] = 0.25*(+gc[0] + gc[1] - 1.0)*(+gc[0] - gc[1] - 1.0)*(1.0 - gc[2]);
1498 funValue[3] = 0.25*(+gc[0] + gc[1] - 1.0)*(-gc[0] + gc[1] - 1.0)*(1.0 - gc[2]);
1499 funValue[4] = gc[2];
1500 SHAPE_FUN_MACRO_END;
1503 * Init Pyramid Reference coordinates ans Shape function.
1506 void GaussInfo::pyra5bInit()
1508 LOCAL_COORD_MACRO_BEGIN;
1510 coords[0] = PYRA5B_REF[0];
1511 coords[1] = PYRA5B_REF[1];
1512 coords[2] = PYRA5B_REF[2];
1515 coords[0] = PYRA5B_REF[3];
1516 coords[1] = PYRA5B_REF[4];
1517 coords[2] = PYRA5B_REF[5];
1520 coords[0] = PYRA5B_REF[6];
1521 coords[1] = PYRA5B_REF[7];
1522 coords[2] = PYRA5B_REF[8];
1525 coords[0] = PYRA5B_REF[9];
1526 coords[1] = PYRA5B_REF[10];
1527 coords[2] = PYRA5B_REF[11];
1530 coords[0] = PYRA5B_REF[12];
1531 coords[1] = PYRA5B_REF[13];
1532 coords[2] = PYRA5B_REF[14];
1534 LOCAL_COORD_MACRO_END;
1536 SHAPE_FUN_MACRO_BEGIN;
1537 funValue[0] = 0.25*(-gc[0] + gc[1] - 1.0)*(-gc[0] - gc[1] - 1.0)*(1.0 - gc[2]);
1538 funValue[3] = 0.25*(-gc[0] - gc[1] - 1.0)*(+gc[0] - gc[1] - 1.0)*(1.0 - gc[2]);
1539 funValue[2] = 0.25*(+gc[0] + gc[1] - 1.0)*(+gc[0] - gc[1] - 1.0)*(1.0 - gc[2]);
1540 funValue[1] = 0.25*(+gc[0] + gc[1] - 1.0)*(-gc[0] + gc[1] - 1.0)*(1.0 - gc[2]);
1541 funValue[4] = gc[2];
1542 SHAPE_FUN_MACRO_END;
1546 * Init Quadratic Pyramid Reference coordinates ans Shape function.
1549 void GaussInfo::pyra13aInit()
1551 LOCAL_COORD_MACRO_BEGIN;
1553 coords[0] = PYRA13A_REF[0];
1554 coords[1] = PYRA13A_REF[1];
1555 coords[2] = PYRA13A_REF[2];
1558 coords[0] = PYRA13A_REF[3];
1559 coords[1] = PYRA13A_REF[4];
1560 coords[2] = PYRA13A_REF[5];
1563 coords[0] = PYRA13A_REF[6];
1564 coords[1] = PYRA13A_REF[7];
1565 coords[2] = PYRA13A_REF[8];
1568 coords[0] = PYRA13A_REF[9];
1569 coords[1] = PYRA13A_REF[10];
1570 coords[2] = PYRA13A_REF[11];
1573 coords[0] = PYRA13A_REF[12];
1574 coords[1] = PYRA13A_REF[13];
1575 coords[2] = PYRA13A_REF[14];
1578 coords[0] = PYRA13A_REF[15];
1579 coords[1] = PYRA13A_REF[16];
1580 coords[2] = PYRA13A_REF[17];
1583 coords[0] = PYRA13A_REF[18];
1584 coords[1] = PYRA13A_REF[19];
1585 coords[2] = PYRA13A_REF[20];
1588 coords[0] = PYRA13A_REF[21];
1589 coords[1] = PYRA13A_REF[22];
1590 coords[2] = PYRA13A_REF[23];
1593 coords[0] = PYRA13A_REF[24];
1594 coords[1] = PYRA13A_REF[25];
1595 coords[2] = PYRA13A_REF[26];
1598 coords[0] = PYRA13A_REF[27];
1599 coords[1] = PYRA13A_REF[28];
1600 coords[2] = PYRA13A_REF[29];
1603 coords[0] = PYRA13A_REF[30];
1604 coords[1] = PYRA13A_REF[31];
1605 coords[2] = PYRA13A_REF[32];
1608 coords[0] = PYRA13A_REF[33];
1609 coords[1] = PYRA13A_REF[34];
1610 coords[2] = PYRA13A_REF[35];
1613 coords[0] = PYRA13A_REF[36];
1614 coords[1] = PYRA13A_REF[37];
1615 coords[2] = PYRA13A_REF[38];
1617 LOCAL_COORD_MACRO_END;
1619 SHAPE_FUN_MACRO_BEGIN;
1620 funValue[0] = 0.5*(-gc[0] + gc[1] + gc[2] - 1.0)*(-gc[0] - gc[1] + gc[2] - 1.0)*
1621 (gc[0] - 0.5)/(1.0 - gc[2]);
1622 funValue[1] = 0.5*(-gc[0] - gc[1] + gc[2] - 1.0)*(+gc[0] - gc[1] + gc[2] - 1.0)*
1623 (gc[1] - 0.5)/(1.0 - gc[2]);
1624 funValue[2] = 0.5*(+gc[0] - gc[1] + gc[2] - 1.0)*(+gc[0] + gc[1] + gc[2] - 1.0)*
1625 (-gc[0] - 0.5)/(1.0 - gc[2]);
1626 funValue[3] = 0.5*(+gc[0] + gc[1] + gc[2] - 1.0)*(-gc[0] + gc[1] + gc[2] - 1.0)*
1627 (-gc[1] - 0.5)/(1.0 - gc[2]);
1629 funValue[4] = 2.0*gc[2]*(gc[2] - 0.5);
1631 funValue[5] = 0.5*(-gc[0] + gc[1] + gc[2] - 1.0)*(-gc[0] - gc[1] + gc[2] - 1.0)*
1632 (gc[0] - gc[1] + gc[2] - 1.0)/(1.0 - gc[2]);
1633 funValue[6] = 0.5*(-gc[0] - gc[1] + gc[2] - 1.0)*(gc[0] - gc[1] + gc[2] - 1.0)*
1634 (gc[0] + gc[1] + gc[2] - 1.0)/(1.0 - gc[2]);
1635 funValue[7] = 0.5*(gc[0] - gc[1] + gc[2] - 1.0)*(gc[0] + gc[1] + gc[2] - 1.0)*
1636 (-gc[0] + gc[1] + gc[2] - 1.0)/(1.0 - gc[2]);
1637 funValue[8] = 0.5*(gc[0] + gc[1] + gc[2] - 1.0)*(-gc[0] + gc[1] + gc[2] - 1.0)*
1638 (-gc[0] - gc[1] + gc[2] - 1.0)/(1.0 - gc[2]);
1640 funValue[9] = 0.5*gc[2]*(-gc[0] + gc[1] + gc[2] - 1.0)*(-gc[0] - gc[1] + gc[2] - 1.0)/
1642 funValue[10] = 0.5*gc[2]*(-gc[0] - gc[1] + gc[2] - 1.0)*(gc[0] - gc[1] + gc[2] - 1.0)/
1644 funValue[11] = 0.5*gc[2]*(gc[0] - gc[1] + gc[2] - 1.0)*(gc[0] + gc[1] + gc[2] - 1.0)/
1646 funValue[12] = 0.5*gc[2]*(gc[0] + gc[1] + gc[2] - 1.0)*(-gc[0] + gc[1] + gc[2] - 1.0)/
1648 SHAPE_FUN_MACRO_END;
1652 * Init Quadratic Pyramid Reference coordinates ans Shape function.
1655 void GaussInfo::pyra13bInit()
1657 LOCAL_COORD_MACRO_BEGIN;
1659 coords[0] = PYRA13B_REF[0];
1660 coords[1] = PYRA13B_REF[1];
1661 coords[2] = PYRA13B_REF[2];
1664 coords[0] = PYRA13B_REF[3];
1665 coords[1] = PYRA13B_REF[4];
1666 coords[2] = PYRA13B_REF[5];
1669 coords[0] = PYRA13B_REF[6];
1670 coords[1] = PYRA13B_REF[7];
1671 coords[2] = PYRA13B_REF[8];
1674 coords[0] = PYRA13B_REF[9];
1675 coords[1] = PYRA13B_REF[10];
1676 coords[2] = PYRA13B_REF[11];
1679 coords[0] = PYRA13B_REF[12];
1680 coords[1] = PYRA13B_REF[13];
1681 coords[2] = PYRA13B_REF[14];
1684 coords[0] = PYRA13B_REF[15];
1685 coords[1] = PYRA13B_REF[16];
1686 coords[2] = PYRA13B_REF[17];
1689 coords[0] = PYRA13B_REF[18];
1690 coords[1] = PYRA13B_REF[19];
1691 coords[2] = PYRA13B_REF[20];
1694 coords[0] = PYRA13B_REF[21];
1695 coords[1] = PYRA13B_REF[22];
1696 coords[2] = PYRA13B_REF[23];
1699 coords[0] = PYRA13B_REF[24];
1700 coords[1] = PYRA13B_REF[25];
1701 coords[2] = PYRA13B_REF[26];
1704 coords[0] = PYRA13B_REF[27];
1705 coords[1] = PYRA13B_REF[28];
1706 coords[2] = PYRA13B_REF[29];
1709 coords[0] = PYRA13B_REF[30];
1710 coords[1] = PYRA13B_REF[31];
1711 coords[2] = PYRA13B_REF[32];
1714 coords[0] = PYRA13B_REF[33];
1715 coords[1] = PYRA13B_REF[34];
1716 coords[2] = PYRA13B_REF[35];
1719 coords[0] = PYRA13B_REF[36];
1720 coords[1] = PYRA13B_REF[37];
1721 coords[2] = PYRA13B_REF[38];
1723 LOCAL_COORD_MACRO_END;
1725 SHAPE_FUN_MACRO_BEGIN;
1726 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]);
1727 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]);
1728 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]);
1729 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]);
1731 funValue[4] =2.*gc[2]*(gc[2]-0.5);
1733 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]);
1734 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]);
1735 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]);
1736 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]);
1738 funValue[9] =gc[2]*(-gc[0]+gc[1]+gc[2]-1.0)*(-gc[0]-gc[1]+gc[2]-1.0)/(1.0-gc[2]);
1739 funValue[10]=gc[2]*(gc[0]+gc[1]+gc[2]-1.0)*(-gc[0]+gc[1]+gc[2]-1.0)/(1.0-gc[2]);
1740 funValue[11]=gc[2]*(gc[0]-gc[1]+gc[2]-1.0)*(gc[0]+gc[1]+gc[2]-1.0)/(1.0-gc[2]);
1741 funValue[12]=gc[2]*(-gc[0]-gc[1]+gc[2]-1.0)*(gc[0]-gc[1]+gc[2]-1.0)/(1.0-gc[2]);
1743 SHAPE_FUN_MACRO_END;
1748 * Init Pentahedron Reference coordinates and Shape function.
1751 void GaussInfo::penta6aInit()
1753 LOCAL_COORD_MACRO_BEGIN;
1755 coords[0] = PENTA6A_REF[0];
1756 coords[1] = PENTA6A_REF[1];
1757 coords[2] = PENTA6A_REF[2];
1760 coords[0] = PENTA6A_REF[3];
1761 coords[1] = PENTA6A_REF[4];
1762 coords[2] = PENTA6A_REF[5];
1765 coords[0] = PENTA6A_REF[6];
1766 coords[1] = PENTA6A_REF[7];
1767 coords[2] = PENTA6A_REF[8];
1770 coords[0] = PENTA6A_REF[9];
1771 coords[1] = PENTA6A_REF[10];
1772 coords[2] = PENTA6A_REF[11];
1775 coords[0] = PENTA6A_REF[12];
1776 coords[1] = PENTA6A_REF[13];
1777 coords[2] = PENTA6A_REF[14];
1780 coords[0] = PENTA6A_REF[15];
1781 coords[1] = PENTA6A_REF[16];
1782 coords[2] = PENTA6A_REF[17];
1784 LOCAL_COORD_MACRO_END;
1786 SHAPE_FUN_MACRO_BEGIN;
1787 funValue[0] = 0.5*gc[1]*(1.0 - gc[0]);
1788 funValue[1] = 0.5*gc[2]*(1.0 - gc[0]);
1789 funValue[2] = 0.5*(1.0 - gc[1] - gc[2])*(1.0 - gc[0]);
1791 funValue[3] = 0.5*gc[1]*(gc[0] + 1.0);
1792 funValue[4] = 0.5*gc[2]*(gc[0] + 1.0);
1793 funValue[5] = 0.5*(1.0 - gc[1] - gc[2])*(1.0 + gc[0]);
1794 SHAPE_FUN_MACRO_END;
1798 * Init Pentahedron Reference coordinates and Shape function.
1801 void GaussInfo::penta6bInit()
1803 LOCAL_COORD_MACRO_BEGIN;
1805 coords[0] = PENTA6B_REF[0];
1806 coords[1] = PENTA6B_REF[1];
1807 coords[2] = PENTA6B_REF[2];
1810 coords[0] = PENTA6B_REF[3];
1811 coords[1] = PENTA6B_REF[4];
1812 coords[2] = PENTA6B_REF[5];
1815 coords[0] = PENTA6B_REF[6];
1816 coords[1] = PENTA6B_REF[7];
1817 coords[2] = PENTA6B_REF[8];
1820 coords[0] = PENTA6B_REF[9];
1821 coords[1] = PENTA6B_REF[10];
1822 coords[2] = PENTA6B_REF[11];
1825 coords[0] = PENTA6B_REF[12];
1826 coords[1] = PENTA6B_REF[13];
1827 coords[2] = PENTA6B_REF[14];
1830 coords[0] = PENTA6B_REF[15];
1831 coords[1] = PENTA6B_REF[16];
1832 coords[2] = PENTA6B_REF[17];
1834 LOCAL_COORD_MACRO_END;
1836 SHAPE_FUN_MACRO_BEGIN;
1837 funValue[0] = 0.5*gc[1]*(1.0 - gc[0]);
1838 funValue[2] = 0.5*gc[2]*(1.0 - gc[0]);
1839 funValue[1] = 0.5*(1.0 - gc[1] - gc[2])*(1.0 - gc[0]);
1840 funValue[3] = 0.5*gc[1]*(gc[0] + 1.0);
1841 funValue[5] = 0.5*gc[2]*(gc[0] + 1.0);
1842 funValue[4] = 0.5*(1.0 - gc[1] - gc[2])*(1.0 + gc[0]);
1843 SHAPE_FUN_MACRO_END;
1847 * This shapefunc map is same as degenerated tria3aInit
1849 void GaussInfo::penta6DegTria3aInit()
1851 LOCAL_COORD_MACRO_BEGIN;
1882 LOCAL_COORD_MACRO_END;
1884 SHAPE_FUN_MACRO_BEGIN;
1885 funValue[0] = 0.5*(1.0 + gc[1]);
1886 funValue[1] = -0.5*(gc[0] + gc[1]);
1887 funValue[2] = 0.5*(1.0 + gc[0]);
1891 SHAPE_FUN_MACRO_END;
1895 * This shapefunc map is same as degenerated tria3bInit
1897 void GaussInfo::penta6DegTria3bInit()
1899 LOCAL_COORD_MACRO_BEGIN;
1930 LOCAL_COORD_MACRO_END;
1932 SHAPE_FUN_MACRO_BEGIN;
1933 funValue[0] = 1.0 - gc[0] - gc[1];
1934 funValue[1] = gc[0];
1935 funValue[2] = gc[1];
1939 SHAPE_FUN_MACRO_END;
1943 * Init Pentahedron Reference coordinates and Shape function.
1946 void GaussInfo::penta15aInit()
1948 LOCAL_COORD_MACRO_BEGIN;
1950 coords[0] = PENTA15A_REF[0];
1951 coords[1] = PENTA15A_REF[1];
1952 coords[2] = PENTA15A_REF[2];
1955 coords[0] = PENTA15A_REF[3];
1956 coords[1] = PENTA15A_REF[4];
1957 coords[2] = PENTA15A_REF[5];
1960 coords[0] = PENTA15A_REF[6];
1961 coords[1] = PENTA15A_REF[7];
1962 coords[2] = PENTA15A_REF[8];
1965 coords[0] = PENTA15A_REF[9];
1966 coords[1] = PENTA15A_REF[10];
1967 coords[2] = PENTA15A_REF[11];
1970 coords[0] = PENTA15A_REF[12];
1971 coords[1] = PENTA15A_REF[13];
1972 coords[2] = PENTA15A_REF[14];
1975 coords[0] = PENTA15A_REF[15];
1976 coords[1] = PENTA15A_REF[16];
1977 coords[2] = PENTA15A_REF[17];
1980 coords[0] = PENTA15A_REF[18];
1981 coords[1] = PENTA15A_REF[19];
1982 coords[2] = PENTA15A_REF[20];
1985 coords[0] = PENTA15A_REF[21];
1986 coords[1] = PENTA15A_REF[22];
1987 coords[2] = PENTA15A_REF[23];
1990 coords[0] = PENTA15A_REF[24];
1991 coords[1] = PENTA15A_REF[25];
1992 coords[2] = PENTA15A_REF[26];
1995 coords[0] = PENTA15A_REF[27];
1996 coords[1] = PENTA15A_REF[28];
1997 coords[2] = PENTA15A_REF[29];
2000 coords[0] = PENTA15A_REF[30];
2001 coords[1] = PENTA15A_REF[31];
2002 coords[2] = PENTA15A_REF[32];
2005 coords[0] = PENTA15A_REF[33];
2006 coords[1] = PENTA15A_REF[34];
2007 coords[2] = PENTA15A_REF[35];
2010 coords[0] = PENTA15A_REF[36];
2011 coords[1] = PENTA15A_REF[37];
2012 coords[2] = PENTA15A_REF[38];
2015 coords[0] = PENTA15A_REF[39];
2016 coords[1] = PENTA15A_REF[40];
2017 coords[2] = PENTA15A_REF[41];
2020 coords[0] = PENTA15A_REF[42];
2021 coords[1] = PENTA15A_REF[43];
2022 coords[2] = PENTA15A_REF[44];
2024 LOCAL_COORD_MACRO_END;
2026 SHAPE_FUN_MACRO_BEGIN;
2027 funValue[0] = 0.5*gc[1]*(1.0 - gc[0])*(2.0*gc[1] - 2.0 - gc[0]);
2028 funValue[1] = 0.5*gc[2]*(1.0 - gc[0])*(2.0*gc[2] - 2.0 - gc[0]);
2029 funValue[2] = 0.5*(gc[0] - 1.0)*(1.0 - gc[1] - gc[2])*(gc[0] + 2.0*gc[1] + 2.0*gc[2]);
2031 funValue[3] = 0.5*gc[1]*(1.0 + gc[0])*(2.0*gc[1] - 2.0 + gc[0]);
2032 funValue[4] = 0.5*gc[2]*(1.0 + gc[0])*(2.0*gc[2] - 2.0 + gc[0]);
2033 funValue[5] = 0.5*(-gc[0] - 1.0)*(1.0 - gc[1] - gc[2])*(-gc[0] + 2.0*gc[1] + 2.0*gc[2]);
2035 funValue[6] = 2.0*gc[1]*gc[2]*(1.0 - gc[0]);
2036 funValue[7] = 2.0*gc[2]*(1.0 - gc[1] - gc[2])*(1.0 - gc[0]);
2037 funValue[8] = 2.0*gc[1]*(1.0 - gc[1] - gc[2])*(1.0 - gc[0]);
2039 funValue[9] = gc[1]*(1.0 - gc[0]*gc[0]);
2040 funValue[10] = gc[2]*(1.0 - gc[0]*gc[0]);
2041 funValue[11] = (1.0 - gc[1] - gc[2])*(1.0 - gc[0]*gc[0]);
2043 funValue[12] = 2.0*gc[1]*gc[2]*(1.0 + gc[0]);
2044 funValue[13] = 2.0*gc[2]*(1.0 - gc[1] - gc[2])*(1.0 + gc[0]);
2045 funValue[14] = 2.0*gc[1]*(1.0 - gc[1] - gc[2])*(1.0 + gc[0]);
2046 SHAPE_FUN_MACRO_END;
2050 * Init Qaudratic Pentahedron Reference coordinates and Shape function.
2053 void GaussInfo::penta15bInit()
2055 LOCAL_COORD_MACRO_BEGIN;
2057 coords[0] = PENTA15B_REF[0];
2058 coords[1] = PENTA15B_REF[1];
2059 coords[2] = PENTA15B_REF[2];
2062 coords[0] = PENTA15B_REF[3];
2063 coords[1] = PENTA15B_REF[4];
2064 coords[2] = PENTA15B_REF[5];
2067 coords[0] = PENTA15B_REF[6];
2068 coords[1] = PENTA15B_REF[7];
2069 coords[2] = PENTA15B_REF[8];
2072 coords[0] = PENTA15B_REF[9];
2073 coords[1] = PENTA15B_REF[10];
2074 coords[2] = PENTA15B_REF[11];
2077 coords[0] = PENTA15B_REF[12];
2078 coords[1] = PENTA15B_REF[13];
2079 coords[2] = PENTA15B_REF[14];
2082 coords[0] = PENTA15B_REF[15];
2083 coords[1] = PENTA15B_REF[16];
2084 coords[2] = PENTA15B_REF[17];
2087 coords[0] = PENTA15B_REF[18];
2088 coords[1] = PENTA15B_REF[19];
2089 coords[2] = PENTA15B_REF[20];
2092 coords[0] = PENTA15B_REF[21];
2093 coords[1] = PENTA15B_REF[22];
2094 coords[2] = PENTA15B_REF[23];
2097 coords[0] = PENTA15B_REF[24];
2098 coords[1] = PENTA15B_REF[25];
2099 coords[2] = PENTA15B_REF[26];
2102 coords[0] = PENTA15B_REF[27];
2103 coords[1] = PENTA15B_REF[28];
2104 coords[2] = PENTA15B_REF[29];
2107 coords[0] = PENTA15B_REF[30];
2108 coords[1] = PENTA15B_REF[31];
2109 coords[2] = PENTA15B_REF[32];
2112 coords[0] = PENTA15B_REF[33];
2113 coords[1] = PENTA15B_REF[34];
2114 coords[2] = PENTA15B_REF[35];
2117 coords[0] = PENTA15B_REF[36];
2118 coords[1] = PENTA15B_REF[37];
2119 coords[2] = PENTA15B_REF[38];
2122 coords[0] = PENTA15B_REF[39];
2123 coords[1] = PENTA15B_REF[40];
2124 coords[2] = PENTA15B_REF[41];
2127 coords[0] = PENTA15B_REF[42];
2128 coords[1] = PENTA15B_REF[43];
2129 coords[2] = PENTA15B_REF[44];
2131 LOCAL_COORD_MACRO_END;
2133 SHAPE_FUN_MACRO_BEGIN;
2134 funValue[0] = 0.5*gc[1]*(1.0 - gc[0])*(2.0*gc[1] - 2.0 - gc[0]);
2135 funValue[2] = 0.5*gc[2]*(1.0 - gc[0])*(2.0*gc[2] - 2.0 - gc[0]);
2136 funValue[1] = 0.5*(gc[0] - 1.0)*(1.0 - gc[1] - gc[2])*(gc[0] + 2.0*gc[1] + 2.0*gc[2]);
2138 funValue[3] = 0.5*gc[1]*(1.0 + gc[0])*(2.0*gc[1] - 2.0 + gc[0]);
2139 funValue[5] = 0.5*gc[2]*(1.0 + gc[0])*(2.0*gc[2] - 2.0 + gc[0]);
2140 funValue[4] = 0.5*(-gc[0] - 1.0)*(1.0 - gc[1] - gc[2])*(-gc[0] + 2.0*gc[1] + 2.0*gc[2]);
2142 funValue[8] = 2.0*gc[1]*gc[2]*(1.0 - gc[0]);
2143 funValue[7] = 2.0*gc[2]*(1.0 - gc[1] - gc[2])*(1.0 - gc[0]);
2144 funValue[6] = 2.0*gc[1]*(1.0 - gc[1] - gc[2])*(1.0 - gc[0]);
2146 funValue[12] = gc[1]*(1.0 - gc[0]*gc[0]);
2147 funValue[14] = gc[2]*(1.0 - gc[0]*gc[0]);
2148 funValue[13] = (1.0 - gc[1] - gc[2])*(1.0 - gc[0]*gc[0]);
2150 funValue[11] = 2.0*gc[1]*gc[2]*(1.0 + gc[0]);
2151 funValue[10] = 2.0*gc[2]*(1.0 - gc[1] - gc[2])*(1.0 + gc[0]);
2152 funValue[9] = 2.0*gc[1]*(1.0 - gc[1] - gc[2])*(1.0 + gc[0]);
2153 SHAPE_FUN_MACRO_END;
2157 * Init Hehahedron Reference coordinates and Shape function.
2160 void GaussInfo::hexa8aInit()
2162 LOCAL_COORD_MACRO_BEGIN;
2164 coords[0] = HEXA8A_REF[0];
2165 coords[1] = HEXA8A_REF[1];
2166 coords[2] = HEXA8A_REF[2];
2169 coords[0] = HEXA8A_REF[3];
2170 coords[1] = HEXA8A_REF[4];
2171 coords[2] = HEXA8A_REF[5];
2174 coords[0] = HEXA8A_REF[6];
2175 coords[1] = HEXA8A_REF[7];
2176 coords[2] = HEXA8A_REF[8];
2179 coords[0] = HEXA8A_REF[9];
2180 coords[1] = HEXA8A_REF[10];
2181 coords[2] = HEXA8A_REF[11];
2184 coords[0] = HEXA8A_REF[12];
2185 coords[1] = HEXA8A_REF[13];
2186 coords[2] = HEXA8A_REF[14];
2189 coords[0] = HEXA8A_REF[15];
2190 coords[1] = HEXA8A_REF[16];
2191 coords[2] = HEXA8A_REF[17];
2194 coords[0] = HEXA8A_REF[18];
2195 coords[1] = HEXA8A_REF[19];
2196 coords[2] = HEXA8A_REF[20];
2199 coords[0] = HEXA8A_REF[21];
2200 coords[1] = HEXA8A_REF[22];
2201 coords[2] = HEXA8A_REF[23];
2203 LOCAL_COORD_MACRO_END;
2205 SHAPE_FUN_MACRO_BEGIN;
2206 funValue[0] = 0.125*(1.0 - gc[0])*(1.0 - gc[1])*(1.0 - gc[2]);
2207 funValue[1] = 0.125*(1.0 + gc[0])*(1.0 - gc[1])*(1.0 - gc[2]);
2208 funValue[2] = 0.125*(1.0 + gc[0])*(1.0 + gc[1])*(1.0 - gc[2]);
2209 funValue[3] = 0.125*(1.0 - gc[0])*(1.0 + gc[1])*(1.0 - gc[2]);
2211 funValue[4] = 0.125*(1.0 - gc[0])*(1.0 - gc[1])*(1.0 + gc[2]);
2212 funValue[5] = 0.125*(1.0 + gc[0])*(1.0 - gc[1])*(1.0 + gc[2]);
2213 funValue[6] = 0.125*(1.0 + gc[0])*(1.0 + gc[1])*(1.0 + gc[2]);
2214 funValue[7] = 0.125*(1.0 - gc[0])*(1.0 + gc[1])*(1.0 + gc[2]);
2215 SHAPE_FUN_MACRO_END;
2219 * Init Hehahedron Reference coordinates and Shape function.
2222 void GaussInfo::hexa8bInit()
2224 LOCAL_COORD_MACRO_BEGIN;
2226 coords[0] = HEXA8B_REF[0];
2227 coords[1] = HEXA8B_REF[1];
2228 coords[2] = HEXA8B_REF[2];
2231 coords[0] = HEXA8B_REF[3];
2232 coords[1] = HEXA8B_REF[4];
2233 coords[2] = HEXA8B_REF[5];
2236 coords[0] = HEXA8B_REF[6];
2237 coords[1] = HEXA8B_REF[7];
2238 coords[2] = HEXA8B_REF[8];
2241 coords[0] = HEXA8B_REF[9];
2242 coords[1] = HEXA8B_REF[10];
2243 coords[2] = HEXA8B_REF[11];
2246 coords[0] = HEXA8B_REF[12];
2247 coords[1] = HEXA8B_REF[13];
2248 coords[2] = HEXA8B_REF[14];
2251 coords[0] = HEXA8B_REF[15];
2252 coords[1] = HEXA8B_REF[16];
2253 coords[2] = HEXA8B_REF[17];
2256 coords[0] = HEXA8B_REF[18];
2257 coords[1] = HEXA8B_REF[19];
2258 coords[2] = HEXA8B_REF[20];
2261 coords[0] = HEXA8B_REF[21];
2262 coords[1] = HEXA8B_REF[22];
2263 coords[2] = HEXA8B_REF[23];
2265 LOCAL_COORD_MACRO_END;
2267 SHAPE_FUN_MACRO_BEGIN;
2268 funValue[0] = 0.125*(1.0 - gc[0])*(1.0 - gc[1])*(1.0 - gc[2]);
2269 funValue[3] = 0.125*(1.0 + gc[0])*(1.0 - gc[1])*(1.0 - gc[2]);
2270 funValue[2] = 0.125*(1.0 + gc[0])*(1.0 + gc[1])*(1.0 - gc[2]);
2271 funValue[1] = 0.125*(1.0 - gc[0])*(1.0 + gc[1])*(1.0 - gc[2]);
2273 funValue[4] = 0.125*(1.0 - gc[0])*(1.0 - gc[1])*(1.0 + gc[2]);
2274 funValue[7] = 0.125*(1.0 + gc[0])*(1.0 - gc[1])*(1.0 + gc[2]);
2275 funValue[6] = 0.125*(1.0 + gc[0])*(1.0 + gc[1])*(1.0 + gc[2]);
2276 funValue[5] = 0.125*(1.0 - gc[0])*(1.0 + gc[1])*(1.0 + gc[2]);
2277 SHAPE_FUN_MACRO_END;
2281 * This shapefunc map is same as degenerated quad4bInit
2283 void GaussInfo::hexa8DegQuad4aInit()
2285 LOCAL_COORD_MACRO_BEGIN;
2326 LOCAL_COORD_MACRO_END;
2328 SHAPE_FUN_MACRO_BEGIN;
2329 funValue[0] = 0.25*(1.0 + gc[1])*(1.0 - gc[0]);
2330 funValue[1] = 0.25*(1.0 - gc[1])*(1.0 - gc[0]);
2331 funValue[2] = 0.25*(1.0 - gc[1])*(1.0 + gc[0]);
2332 funValue[3] = 0.25*(1.0 + gc[0])*(1.0 + gc[1]);
2337 SHAPE_FUN_MACRO_END;
2341 * This shapefunc map is same as degenerated quad4bInit
2343 void GaussInfo::hexa8DegQuad4bInit()
2345 LOCAL_COORD_MACRO_BEGIN;
2386 LOCAL_COORD_MACRO_END;
2388 SHAPE_FUN_MACRO_BEGIN;
2389 funValue[0] = 0.25*(1.0 - gc[0])*(1.0 - gc[1]);
2390 funValue[1] = 0.25*(1.0 + gc[0])*(1.0 - gc[1]);
2391 funValue[2] = 0.25*(1.0 + gc[0])*(1.0 + gc[1]);
2392 funValue[3] = 0.25*(1.0 - gc[0])*(1.0 + gc[1]);
2397 SHAPE_FUN_MACRO_END;
2401 * This shapefunc map is same as degenerated quad4cInit
2403 void GaussInfo::hexa8DegQuad4cInit()
2405 LOCAL_COORD_MACRO_BEGIN;
2447 LOCAL_COORD_MACRO_END;
2449 SHAPE_FUN_MACRO_BEGIN;
2450 funValue[0] = 0.25*(1.0 - gc[0])*(1.0 - gc[1]);
2451 funValue[1] = 0.25*(1.0 - gc[0])*(1.0 + gc[1]);
2452 funValue[2] = 0.25*(1.0 + gc[0])*(1.0 + gc[1]);
2453 funValue[3] = 0.25*(1.0 + gc[0])*(1.0 - gc[1]);
2458 SHAPE_FUN_MACRO_END;
2462 * Init Qaudratic Hehahedron Reference coordinates and Shape function.
2465 void GaussInfo::hexa20aInit()
2467 LOCAL_COORD_MACRO_BEGIN;
2469 coords[0] = HEXA20A_REF[0];
2470 coords[1] = HEXA20A_REF[1];
2471 coords[2] = HEXA20A_REF[2];
2474 coords[0] = HEXA20A_REF[3];
2475 coords[1] = HEXA20A_REF[4];
2476 coords[2] = HEXA20A_REF[5];
2479 coords[0] = HEXA20A_REF[6];
2480 coords[1] = HEXA20A_REF[7];
2481 coords[2] = HEXA20A_REF[8];
2484 coords[0] = HEXA20A_REF[9];
2485 coords[1] = HEXA20A_REF[10];
2486 coords[2] = HEXA20A_REF[11];
2489 coords[0] = HEXA20A_REF[12];
2490 coords[1] = HEXA20A_REF[13];
2491 coords[2] = HEXA20A_REF[14];
2494 coords[0] = HEXA20A_REF[15];
2495 coords[1] = HEXA20A_REF[16];
2496 coords[2] = HEXA20A_REF[17];
2499 coords[0] = HEXA20A_REF[18];
2500 coords[1] = HEXA20A_REF[19];
2501 coords[2] = HEXA20A_REF[20];
2504 coords[0] = HEXA20A_REF[21];
2505 coords[1] = HEXA20A_REF[22];
2506 coords[2] = HEXA20A_REF[23];
2509 coords[0] = HEXA20A_REF[24];
2510 coords[1] = HEXA20A_REF[25];
2511 coords[2] = HEXA20A_REF[26];
2514 coords[0] = HEXA20A_REF[27];
2515 coords[1] = HEXA20A_REF[28];
2516 coords[2] = HEXA20A_REF[29];
2519 coords[0] = HEXA20A_REF[30];
2520 coords[1] = HEXA20A_REF[31];
2521 coords[2] = HEXA20A_REF[32];
2524 coords[0] = HEXA20A_REF[33];
2525 coords[1] = HEXA20A_REF[34];
2526 coords[2] = HEXA20A_REF[35];
2529 coords[0] = HEXA20A_REF[36];
2530 coords[1] = HEXA20A_REF[37];
2531 coords[2] = HEXA20A_REF[38];
2534 coords[0] = HEXA20A_REF[39];
2535 coords[1] = HEXA20A_REF[40];
2536 coords[2] = HEXA20A_REF[41];
2539 coords[0] = HEXA20A_REF[42];
2540 coords[1] = HEXA20A_REF[43];
2541 coords[2] = HEXA20A_REF[44];
2544 coords[0] = HEXA20A_REF[45];
2545 coords[1] = HEXA20A_REF[46];
2546 coords[2] = HEXA20A_REF[47];
2549 coords[0] = HEXA20A_REF[48];
2550 coords[1] = HEXA20A_REF[49];
2551 coords[2] = HEXA20A_REF[50];
2554 coords[0] = HEXA20A_REF[51];
2555 coords[1] = HEXA20A_REF[52];
2556 coords[2] = HEXA20A_REF[53];
2559 coords[0] = HEXA20A_REF[54];
2560 coords[1] = HEXA20A_REF[55];
2561 coords[2] = HEXA20A_REF[56];
2564 coords[0] = HEXA20A_REF[57];
2565 coords[1] = HEXA20A_REF[58];
2566 coords[2] = HEXA20A_REF[59];
2568 LOCAL_COORD_MACRO_END;
2570 SHAPE_FUN_MACRO_BEGIN;
2571 funValue[0] = 0.125*(1.0 - gc[0])*(1.0 - gc[1])*(1.0 - gc[2])*
2572 (-2.0 - gc[0] - gc[1] - gc[2]);
2573 funValue[1] = 0.125*(1.0 + gc[0])*(1.0 - gc[1])*(1.0 - gc[2])*
2574 (-2.0 + gc[0] - gc[1] - gc[2]);
2575 funValue[2] = 0.125*(1.0 + gc[0])*(1.0 + gc[1])*(1.0 - gc[2])*
2576 (-2.0 + gc[0] + gc[1] - gc[2]);
2577 funValue[3] = 0.125*(1.0 - gc[0])*(1.0 + gc[1])*(1.0 - gc[2])*
2578 (-2.0 - gc[0] + gc[1] - gc[2]);
2579 funValue[4] = 0.125*(1.0 - gc[0])*(1.0 - gc[1])*(1.0 + gc[2])*
2580 (-2.0 - gc[0] - gc[1] + gc[2]);
2581 funValue[5] = 0.125*(1.0 + gc[0])*(1.0 - gc[1])*(1.0 + gc[2])*
2582 (-2.0 + gc[0] - gc[1] + gc[2]);
2583 funValue[6] = 0.125*(1.0 + gc[0])*(1.0 + gc[1])*(1.0 + gc[2])*
2584 (-2.0 + gc[0] + gc[1] + gc[2]);
2585 funValue[7] = 0.125*(1.0 - gc[0])*(1.0 + gc[1])*(1.0 + gc[2])*
2586 (-2.0 - gc[0] + gc[1] + gc[2]);
2588 funValue[8] = 0.25*(1.0 - gc[0]*gc[0])*(1.0 - gc[1])*(1.0 - gc[2]);
2589 funValue[9] = 0.25*(1.0 - gc[1]*gc[1])*(1.0 + gc[0])*(1.0 - gc[2]);
2590 funValue[10] = 0.25*(1.0 - gc[0]*gc[0])*(1.0 + gc[1])*(1.0 - gc[2]);
2591 funValue[11] = 0.25*(1.0 - gc[1]*gc[1])*(1.0 - gc[0])*(1.0 - gc[2]);
2592 funValue[12] = 0.25*(1.0 - gc[2]*gc[2])*(1.0 - gc[0])*(1.0 - gc[1]);
2593 funValue[13] = 0.25*(1.0 - gc[2]*gc[2])*(1.0 + gc[0])*(1.0 - gc[1]);
2594 funValue[14] = 0.25*(1.0 - gc[2]*gc[2])*(1.0 + gc[0])*(1.0 + gc[1]);
2595 funValue[15] = 0.25*(1.0 - gc[2]*gc[2])*(1.0 - gc[0])*(1.0 + gc[1]);
2596 funValue[16] = 0.25*(1.0 - gc[0]*gc[0])*(1.0 - gc[1])*(1.0 + gc[2]);
2597 funValue[17] = 0.25*(1.0 - gc[1]*gc[1])*(1.0 + gc[0])*(1.0 + gc[2]);
2598 funValue[18] = 0.25*(1.0 - gc[0]*gc[0])*(1.0 + gc[1])*(1.0 + gc[2]);
2599 funValue[19] = 0.25*(1.0 - gc[1]*gc[1])*(1.0 - gc[0])*(1.0 + gc[2]);
2600 SHAPE_FUN_MACRO_END;
2604 * Init Qaudratic Hehahedron Reference coordinates and Shape function.
2607 void GaussInfo::hexa20bInit()
2609 LOCAL_COORD_MACRO_BEGIN;
2611 coords[0] = HEXA20B_REF[0];
2612 coords[1] = HEXA20B_REF[1];
2613 coords[2] = HEXA20B_REF[2];
2616 coords[0] = HEXA20B_REF[3];
2617 coords[1] = HEXA20B_REF[4];
2618 coords[2] = HEXA20B_REF[5];
2621 coords[0] = HEXA20B_REF[6];
2622 coords[1] = HEXA20B_REF[7];
2623 coords[2] = HEXA20B_REF[8];
2626 coords[0] = HEXA20B_REF[9];
2627 coords[1] = HEXA20B_REF[10];
2628 coords[2] = HEXA20B_REF[11];
2631 coords[0] = HEXA20B_REF[12];
2632 coords[1] = HEXA20B_REF[13];
2633 coords[2] = HEXA20B_REF[14];
2636 coords[0] = HEXA20B_REF[15];
2637 coords[1] = HEXA20B_REF[16];
2638 coords[2] = HEXA20B_REF[17];
2641 coords[0] = HEXA20B_REF[18];
2642 coords[1] = HEXA20B_REF[19];
2643 coords[2] = HEXA20B_REF[20];
2646 coords[0] = HEXA20B_REF[21];
2647 coords[1] = HEXA20B_REF[22];
2648 coords[2] = HEXA20B_REF[23];
2651 coords[0] = HEXA20B_REF[24];
2652 coords[1] = HEXA20B_REF[25];
2653 coords[2] = HEXA20B_REF[26];
2656 coords[0] = HEXA20B_REF[27];
2657 coords[1] = HEXA20B_REF[28];
2658 coords[2] = HEXA20B_REF[29];
2661 coords[0] = HEXA20B_REF[30];
2662 coords[1] = HEXA20B_REF[31];
2663 coords[2] = HEXA20B_REF[32];
2666 coords[0] = HEXA20B_REF[33];
2667 coords[1] = HEXA20B_REF[34];
2668 coords[2] = HEXA20B_REF[35];
2671 coords[0] = HEXA20B_REF[36];
2672 coords[1] = HEXA20B_REF[37];
2673 coords[2] = HEXA20B_REF[38];
2676 coords[0] = HEXA20B_REF[39];
2677 coords[1] = HEXA20B_REF[40];
2678 coords[2] = HEXA20B_REF[41];
2681 coords[0] = HEXA20B_REF[42];
2682 coords[1] = HEXA20B_REF[43];
2683 coords[2] = HEXA20B_REF[44];
2686 coords[0] = HEXA20B_REF[45];
2687 coords[1] = HEXA20B_REF[46];
2688 coords[2] = HEXA20B_REF[47];
2691 coords[0] = HEXA20B_REF[48];
2692 coords[1] = HEXA20B_REF[49];
2693 coords[2] = HEXA20B_REF[50];
2696 coords[0] = HEXA20B_REF[51];
2697 coords[1] = HEXA20B_REF[52];
2698 coords[2] = HEXA20B_REF[53];
2701 coords[0] = HEXA20B_REF[54];
2702 coords[1] = HEXA20B_REF[55];
2703 coords[2] = HEXA20B_REF[56];
2706 coords[0] = HEXA20B_REF[57];
2707 coords[1] = HEXA20B_REF[58];
2708 coords[2] = HEXA20B_REF[59];
2710 LOCAL_COORD_MACRO_END;
2712 SHAPE_FUN_MACRO_BEGIN;
2714 funValue[0] = 0.125*(1.0 - gc[0])*(1.0 - gc[1])*(1.0 - gc[2])*
2715 (-2.0 - gc[0] - gc[1] - gc[2]);
2716 funValue[3] = 0.125*(1.0 + gc[0])*(1.0 - gc[1])*(1.0 - gc[2])*
2717 (-2.0 + gc[0] - gc[1] - gc[2]);
2718 funValue[2] = 0.125*(1.0 + gc[0])*(1.0 + gc[1])*(1.0 - gc[2])*
2719 (-2.0 + gc[0] + gc[1] - gc[2]);
2720 funValue[1] = 0.125*(1.0 - gc[0])*(1.0 + gc[1])*(1.0 - gc[2])*
2721 (-2.0 - gc[0] + gc[1] - gc[2]);
2722 funValue[4] = 0.125*(1.0 - gc[0])*(1.0 - gc[1])*(1.0 + gc[2])*
2723 (-2.0 - gc[0] - gc[1] + gc[2]);
2724 funValue[7] = 0.125*(1.0 + gc[0])*(1.0 - gc[1])*(1.0 + gc[2])*
2725 (-2.0 + gc[0] - gc[1] + gc[2]);
2726 funValue[6] = 0.125*(1.0 + gc[0])*(1.0 + gc[1])*(1.0 + gc[2])*
2727 (-2.0 + gc[0] + gc[1] + gc[2]);
2728 funValue[5] = 0.125*(1.0 - gc[0])*(1.0 + gc[1])*(1.0 + gc[2])*
2729 (-2.0 - gc[0] + gc[1] + gc[2]);
2731 funValue[11] = 0.25*(1.0 - gc[0]*gc[0])*(1.0 - gc[1])*(1.0 - gc[2]);
2732 funValue[10] = 0.25*(1.0 - gc[1]*gc[1])*(1.0 + gc[0])*(1.0 - gc[2]);
2733 funValue[9] = 0.25*(1.0 - gc[0]*gc[0])*(1.0 + gc[1])*(1.0 - gc[2]);
2734 funValue[8] = 0.25*(1.0 - gc[1]*gc[1])*(1.0 - gc[0])*(1.0 - gc[2]);
2735 funValue[16] = 0.25*(1.0 - gc[2]*gc[2])*(1.0 - gc[0])*(1.0 - gc[1]);
2736 funValue[19] = 0.25*(1.0 - gc[2]*gc[2])*(1.0 + gc[0])*(1.0 - gc[1]);
2737 funValue[18] = 0.25*(1.0 - gc[2]*gc[2])*(1.0 + gc[0])*(1.0 + gc[1]);
2738 funValue[17] = 0.25*(1.0 - gc[2]*gc[2])*(1.0 - gc[0])*(1.0 + gc[1]);
2739 funValue[15] = 0.25*(1.0 - gc[0]*gc[0])*(1.0 - gc[1])*(1.0 + gc[2]);
2740 funValue[14] = 0.25*(1.0 - gc[1]*gc[1])*(1.0 + gc[0])*(1.0 + gc[2]);
2741 funValue[13] = 0.25*(1.0 - gc[0]*gc[0])*(1.0 + gc[1])*(1.0 + gc[2]);
2742 funValue[12] = 0.25*(1.0 - gc[1]*gc[1])*(1.0 - gc[0])*(1.0 + gc[2]);
2743 SHAPE_FUN_MACRO_END;
2746 void GaussInfo::hexa27aInit()
2748 LOCAL_COORD_MACRO_BEGIN;
2750 coords[0] = HEXA27A_REF[0];
2751 coords[1] = HEXA27A_REF[1];
2752 coords[2] = HEXA27A_REF[2];
2755 coords[0] = HEXA27A_REF[3];
2756 coords[1] = HEXA27A_REF[4];
2757 coords[2] = HEXA27A_REF[5];
2760 coords[0] = HEXA27A_REF[6];
2761 coords[1] = HEXA27A_REF[7];
2762 coords[2] = HEXA27A_REF[8];
2765 coords[0] = HEXA27A_REF[9];
2766 coords[1] = HEXA27A_REF[10];
2767 coords[2] = HEXA27A_REF[11];
2770 coords[0] = HEXA27A_REF[12];
2771 coords[1] = HEXA27A_REF[13];
2772 coords[2] = HEXA27A_REF[14];
2775 coords[0] = HEXA27A_REF[15];
2776 coords[1] = HEXA27A_REF[16];
2777 coords[2] = HEXA27A_REF[17];
2780 coords[0] = HEXA27A_REF[18];
2781 coords[1] = HEXA27A_REF[19];
2782 coords[2] = HEXA27A_REF[20];
2785 coords[0] = HEXA27A_REF[21];
2786 coords[1] = HEXA27A_REF[22];
2787 coords[2] = HEXA27A_REF[23];
2790 coords[0] = HEXA27A_REF[24];
2791 coords[1] = HEXA27A_REF[25];
2792 coords[2] = HEXA27A_REF[26];
2795 coords[0] = HEXA27A_REF[27];
2796 coords[1] = HEXA27A_REF[28];
2797 coords[2] = HEXA27A_REF[29];
2800 coords[0] = HEXA27A_REF[30];
2801 coords[1] = HEXA27A_REF[31];
2802 coords[2] = HEXA27A_REF[32];
2805 coords[0] = HEXA27A_REF[33];
2806 coords[1] = HEXA27A_REF[34];
2807 coords[2] = HEXA27A_REF[35];
2810 coords[0] = HEXA27A_REF[36];
2811 coords[1] = HEXA27A_REF[37];
2812 coords[2] = HEXA27A_REF[38];
2815 coords[0] = HEXA27A_REF[39];
2816 coords[1] = HEXA27A_REF[40];
2817 coords[2] = HEXA27A_REF[41];
2820 coords[0] = HEXA27A_REF[42];
2821 coords[1] = HEXA27A_REF[43];
2822 coords[2] = HEXA27A_REF[44];
2825 coords[0] = HEXA27A_REF[45];
2826 coords[1] = HEXA27A_REF[46];
2827 coords[2] = HEXA27A_REF[47];
2830 coords[0] = HEXA27A_REF[48];
2831 coords[1] = HEXA27A_REF[49];
2832 coords[2] = HEXA27A_REF[50];
2835 coords[0] = HEXA27A_REF[51];
2836 coords[1] = HEXA27A_REF[52];
2837 coords[2] = HEXA27A_REF[53];
2840 coords[0] = HEXA27A_REF[54];
2841 coords[1] = HEXA27A_REF[55];
2842 coords[2] = HEXA27A_REF[56];
2845 coords[0] = HEXA27A_REF[57];
2846 coords[1] = HEXA27A_REF[58];
2847 coords[2] = HEXA27A_REF[59];
2850 coords[0] = HEXA27A_REF[60];
2851 coords[1] = HEXA27A_REF[61];
2852 coords[2] = HEXA27A_REF[62];
2855 coords[0] = HEXA27A_REF[63];
2856 coords[1] = HEXA27A_REF[64];
2857 coords[2] = HEXA27A_REF[65];
2860 coords[0] = HEXA27A_REF[66];
2861 coords[1] = HEXA27A_REF[67];
2862 coords[2] = HEXA27A_REF[68];
2865 coords[0] = HEXA27A_REF[69];
2866 coords[1] = HEXA27A_REF[70];
2867 coords[2] = HEXA27A_REF[71];
2870 coords[0] = HEXA27A_REF[72];
2871 coords[1] = HEXA27A_REF[73];
2872 coords[2] = HEXA27A_REF[74];
2875 coords[0] = HEXA27A_REF[75];
2876 coords[1] = HEXA27A_REF[76];
2877 coords[2] = HEXA27A_REF[77];
2880 coords[0] = HEXA27A_REF[78];
2881 coords[1] = HEXA27A_REF[79];
2882 coords[2] = HEXA27A_REF[80];
2884 LOCAL_COORD_MACRO_END;
2886 SHAPE_FUN_MACRO_BEGIN;
2888 funValue[0] =0.125*gc[0]*(gc[0]-1.)*gc[1]*(gc[1]-1.)*gc[2]*(gc[2]-1.);
2889 funValue[1] =0.125*gc[0]*(gc[0]-1.)*gc[1]*(gc[1]+1.)*gc[2]*(gc[2]-1.);
2890 funValue[2] =0.125*gc[0]*(gc[0]+1.)*gc[1]*(gc[1]+1.)*gc[2]*(gc[2]-1.);
2891 funValue[3] =0.125*gc[0]*(gc[0]+1.)*gc[1]*(gc[1]-1.)*gc[2]*(gc[2]-1.);
2892 funValue[4] =0.125*gc[0]*(gc[0]-1.)*gc[1]*(gc[1]-1.)*gc[2]*(gc[2]+1.);
2893 funValue[5] =0.125*gc[0]*(gc[0]-1.)*gc[1]*(gc[1]+1.)*gc[2]*(gc[2]+1.);
2894 funValue[6] =0.125*gc[0]*(gc[0]+1.)*gc[1]*(gc[1]+1.)*gc[2]*(gc[2]+1.);
2895 funValue[7] =0.125*gc[0]*(gc[0]+1.)*gc[1]*(gc[1]-1.)*gc[2]*(gc[2]+1.);
2896 funValue[8] =0.25*gc[0]*(gc[0]-1.)*(1.-gc[1]*gc[1])*gc[2]*(gc[2]-1.);
2897 funValue[9] =0.25*(1.-gc[0]*gc[0])*gc[1]*(gc[1]+1.)*gc[2]*(gc[2]-1.);
2898 funValue[10]=0.25*gc[0]*(gc[0]+1.)*(1.-gc[1]*gc[1])*gc[2]*(gc[2]-1.);
2899 funValue[11]=0.25*(1.-gc[0]*gc[0])*gc[1]*(gc[1]-1.)*gc[2]*(gc[2]-1.);
2900 funValue[12]=0.25*gc[0]*(gc[0]-1.)*(1.-gc[1]*gc[1])*gc[2]*(gc[2]+1.);
2901 funValue[13]=0.25*(1.-gc[0]*gc[0])*gc[1]*(gc[1]+1.)*gc[2]*(gc[2]+1.);
2902 funValue[14]=0.25*gc[0]*(gc[0]+1.)*(1.-gc[1]*gc[1])*gc[2]*(gc[2]+1.);
2903 funValue[15]=0.25*(1.-gc[0]*gc[0])*gc[1]*(gc[1]-1.)*gc[2]*(gc[2]+1.);
2904 funValue[16]=0.25*gc[0]*(gc[0]-1.)*gc[1]*(gc[1]-1.)*(1.-gc[2]*gc[2]);
2905 funValue[17]=0.25*gc[0]*(gc[0]-1.)*gc[1]*(gc[1]+1.)*(1.-gc[2]*gc[2]);
2906 funValue[18]=0.25*gc[0]*(gc[0]+1.)*gc[1]*(gc[1]+1.)*(1.-gc[2]*gc[2]);
2907 funValue[19]=0.25*gc[0]*(gc[0]+1.)*gc[1]*(gc[1]-1.)*(1.-gc[2]*gc[2]);
2908 funValue[20]=0.5*(1.-gc[0]*gc[0])*(1.-gc[1]*gc[1])*gc[2]*(gc[2]-1.);
2909 funValue[21]=0.5*gc[0]*(gc[0]-1.)*(1.-gc[1]*gc[1])*(1.-gc[2]*gc[2]);
2910 funValue[22]=0.5*(1.-gc[0]*gc[0])*gc[1]*(gc[1]+1.)*(1.-gc[2]*gc[2]);
2911 funValue[23]=0.5*gc[0]*(gc[0]+1.)*(1.-gc[1]*gc[1])*(1.-gc[2]*gc[2]);
2912 funValue[24]=0.5*(1.-gc[0]*gc[0])*gc[1]*(gc[1]-1.)*(1.-gc[2]*gc[2]);
2913 funValue[25]=0.5*(1.-gc[0]*gc[0])*(1.-gc[1]*gc[1])*gc[2]*(gc[2]+1.);
2914 funValue[26]=(1.-gc[0]*gc[0])*(1.-gc[1]*gc[1])*(1.-gc[2]*gc[2]);
2916 SHAPE_FUN_MACRO_END;
2919 ////////////////////////////////////////////////////////////////////////////////////////////////
2920 // GAUSS COORD CLASS //
2921 ////////////////////////////////////////////////////////////////////////////////////////////////
2925 GaussCoords::GaussCoords()
2932 GaussCoords::~GaussCoords()
2934 GaussInfoVector::iterator it = _my_gauss_info.begin();
2935 for( ; it != _my_gauss_info.end(); it++ )
2943 * Add Gauss localization info
2945 void GaussCoords::addGaussInfo( NormalizedCellType theGeometry,
2947 const double* theGaussCoord,
2949 const double* theReferenceCoord,
2952 GaussInfoVector::iterator it = _my_gauss_info.begin();
2953 for( ; it != _my_gauss_info.end(); it++ )
2955 if( (*it)->getCellType() == theGeometry )
2961 DataVector aGaussCoord;
2962 for(int i = 0 ; i < theNbGauss*coordDim; i++ )
2963 aGaussCoord.push_back(theGaussCoord[i]);
2965 DataVector aReferenceCoord;
2966 for(int i = 0 ; i < theNbRef*coordDim; i++ )
2967 aReferenceCoord.push_back(theReferenceCoord[i]);
2970 GaussInfo* info = new GaussInfo( theGeometry, aGaussCoord, theNbGauss, aReferenceCoord, theNbRef);
2971 info->initLocalInfo();
2973 //If info with cell type doesn't exist add it
2974 if( it == _my_gauss_info.end() )
2976 _my_gauss_info.push_back(info);
2978 // If information exists, update it
2982 int index = std::distance(_my_gauss_info.begin(),it);
2984 _my_gauss_info[index] = info;
2990 * Calculate gauss points coordinates
2992 double* GaussCoords::calculateCoords( NormalizedCellType theGeometry,
2993 const double *theNodeCoords,
2994 const int theSpaceDim,
2995 const int *theIndex)
2997 const GaussInfo *info = getInfoGivenCellType(theGeometry);
2998 int nbCoords = theSpaceDim * info->getNbGauss();
2999 double *aCoords = new double[nbCoords];
3000 calculateCoordsAlg(info,theNodeCoords,theSpaceDim,theIndex,aCoords);
3005 void GaussCoords::calculateCoords( NormalizedCellType theGeometry, const double *theNodeCoords, const int theSpaceDim, const int *theIndex, double *result)
3007 const GaussInfo *info = getInfoGivenCellType(theGeometry);
3008 calculateCoordsAlg(info,theNodeCoords,theSpaceDim,theIndex,result);
3011 void GaussCoords::calculateCoordsAlg(const GaussInfo *info, const double* theNodeCoords, const int theSpaceDim, const int *theIndex, double *result)
3013 int aConn = info->getNbRef();
3015 int nbCoords = theSpaceDim * info->getNbGauss();
3016 std::fill(result,result+nbCoords,0.);
3018 for( int gaussId = 0; gaussId < info->getNbGauss(); gaussId++ )
3020 double *coord=result+gaussId*theSpaceDim;
3021 const double *function=info->getFunctionValues(gaussId);
3022 for ( int connId = 0; connId < aConn ; connId++ )
3024 const double* nodeCoord = theNodeCoords + (theIndex[connId]*theSpaceDim);
3025 for( int dimId = 0; dimId < theSpaceDim; dimId++ )
3026 coord[dimId] += nodeCoord[dimId]*function[connId];
3031 const GaussInfo *GaussCoords::getInfoGivenCellType(NormalizedCellType cellType)
3033 GaussInfoVector::const_iterator it = _my_gauss_info.begin();
3034 //Try to find gauss localization info
3035 for( ; it != _my_gauss_info.end() ; it++ )
3036 if( (*it)->getCellType()==cellType)
3038 throw INTERP_KERNEL::Exception("Can't find gauss localization information !");