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::SEG2_REF[2]={-1.0, 1.0};
33 const double GaussInfo::SEG3_REF[3]={-1.0, 1.0, 0.0};
35 const double GaussInfo::TRIA3A_REF[6]={-1.0, 1.0, -1.0, -1.0, 1.0, -1.0};
37 const double GaussInfo::TRIA3B_REF[6]={0.0, 0.0, 1.0, 0.0, 0.0, 1.0};
39 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};
41 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};
43 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};
45 const double GaussInfo::QUAD4A_REF[8]={-1.0, 1.0, -1.0, -1.0, 1.0, -1.0, 1.0, 1.0};
47 const double GaussInfo::QUAD4B_REF[8]={-1.0, -1.0, 1.0, -1.0, 1.0, 1.0, -1.0, 1.0};
49 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};
51 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};
53 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};
55 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};
57 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};
59 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};
61 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};
63 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};
65 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};
67 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};
69 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};
71 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};
73 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};
75 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};
77 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};
79 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};
81 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};
83 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};
85 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};
87 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};
89 //Define common part of the code in the MACRO
90 //---------------------------------------------------------------
91 #define LOCAL_COORD_MACRO_BEGIN \
92 _my_local_reference_coord.resize( _my_local_ref_dim*_my_local_nb_ref ); \
93 for( int refId = 0; refId < _my_local_nb_ref; refId++ ) \
95 double* coords = &_my_local_reference_coord[ refId*_my_local_ref_dim ]; \
99 //---------------------------------------------------------------
100 #define LOCAL_COORD_MACRO_END \
104 //---------------------------------------------------------------
105 #define SHAPE_FUN_MACRO_BEGIN \
106 for( int gaussId = 0 ; gaussId < _my_nb_gauss ; gaussId++ ) \
108 double* funValue = &_my_function_value[ gaussId * _my_nb_ref ]; \
109 const double* gc = &_my_gauss_coord[ gaussId * getGaussCoordDim() ];
111 //---------------------------------------------------------------
112 #define SHAPE_FUN_MACRO_END \
115 #define CHECK_MACRO \
118 std::ostringstream stream; \
119 stream << "Error in the gauss localization for the cell with type "; \
120 stream << cellModel.getRepr(); \
122 throw INTERP_KERNEL::Exception(stream.str().c_str()); \
126 //---------------------------------------------------------------
127 static bool IsEqual(double theLeft, double theRight)
129 static double EPS = 1.0E-3;
130 if(fabs(theLeft) + fabs(theRight) > EPS)
131 return fabs(theLeft-theRight)/(fabs(theLeft)+fabs(theRight)) < EPS;
136 ////////////////////////////////////////////////////////////////////////////////////////////////
137 // GAUSS INFO CLASS //
138 ////////////////////////////////////////////////////////////////////////////////////////////////
141 * Constructor of the GaussInfo
143 GaussInfo::GaussInfo( NormalizedCellType theGeometry,
144 const DataVector& theGaussCoord,
146 const DataVector& theReferenceCoord,
148 _my_geometry(theGeometry),
149 _my_nb_gauss(theNbGauss),
150 _my_gauss_coord(theGaussCoord),
151 _my_nb_ref(theNbRef),
152 _my_reference_coord(theReferenceCoord)
155 //Allocate shape function values
156 _my_function_value.resize( _my_nb_gauss * _my_nb_ref );
162 GaussInfo::~GaussInfo()
167 * Return dimension of the gauss coordinates
169 int GaussInfo::getGaussCoordDim() const
173 return _my_gauss_coord.size()/_my_nb_gauss;
182 * Return dimension of the reference coordinates
184 int GaussInfo::getReferenceCoordDim() const
188 return _my_reference_coord.size()/_my_nb_ref;
197 * Return type of the cell.
199 NormalizedCellType GaussInfo::getCellType() const
205 * Return Nb of the gauss points.
207 int GaussInfo::getNbGauss() const
213 * Return Nb of the reference coordinates.
215 int GaussInfo::getNbRef() const
220 GaussInfo GaussInfo::convertToLinear() const
226 std::vector<double> a(SEG3_REF,SEG3_REF+3);
227 if(IsSatisfy(a,_my_reference_coord))
229 std::vector<double> c(SEG2_REF,SEG2_REF+2);
230 return GaussInfo(NORM_SEG2,_my_gauss_coord,getNbGauss(),c,2);
232 throw INTERP_KERNEL::Exception("GaussInfo::convertToLinear : not recognized pattern for SEG3 !");
236 std::vector<double> a(TRIA6A_REF,TRIA6A_REF+12),b(TRIA6B_REF,TRIA6B_REF+12);
237 if(IsSatisfy(a,_my_reference_coord))
239 std::vector<double> c(TRIA3A_REF,TRIA3A_REF+6);
240 return GaussInfo(NORM_TRI3,_my_gauss_coord,getNbGauss(),c,3);
242 if(IsSatisfy(b,_my_reference_coord))
244 std::vector<double> c(TRIA3B_REF,TRIA3B_REF+6);
245 return GaussInfo(NORM_TRI3,_my_gauss_coord,getNbGauss(),c,3);
247 throw INTERP_KERNEL::Exception("GaussInfo::convertToLinear : not recognized pattern for TRI6 !");
251 std::vector<double> a(TRIA7A_REF,TRIA7A_REF+14);
252 if(IsSatisfy(a,_my_reference_coord))
254 std::vector<double> c(TRIA3B_REF,TRIA3B_REF+6);
255 return GaussInfo(NORM_TRI3,_my_gauss_coord,getNbGauss(),c,3);
257 throw INTERP_KERNEL::Exception("GaussInfo::convertToLinear : not recognized pattern for TRI7 !");
261 std::vector<double> a(QUAD8A_REF,QUAD8A_REF+16),b(QUAD8B_REF,QUAD8B_REF+16);
262 if(IsSatisfy(a,_my_reference_coord))
264 std::vector<double> c(QUAD4A_REF,QUAD4A_REF+8);
265 return GaussInfo(NORM_QUAD4,_my_gauss_coord,getNbGauss(),c,4);
267 if(IsSatisfy(b,_my_reference_coord))
269 std::vector<double> c(QUAD4B_REF,QUAD4B_REF+8);
270 return GaussInfo(NORM_QUAD4,_my_gauss_coord,getNbGauss(),c,4);
272 throw INTERP_KERNEL::Exception("GaussInfo::convertToLinear : not recognized pattern for QUAD8 !");
276 std::vector<double> a(QUAD9A_REF,QUAD9A_REF+18);
277 if(IsSatisfy(a,_my_reference_coord))
279 std::vector<double> c(QUAD4B_REF,QUAD4B_REF+8);
280 return GaussInfo(NORM_QUAD4,_my_gauss_coord,getNbGauss(),c,4);
282 throw INTERP_KERNEL::Exception("GaussInfo::convertToLinear : not recognized pattern for QUAD9 !");
286 std::vector<double> a(TETRA10A_REF,TETRA10A_REF+30),b(TETRA10B_REF,TETRA10B_REF+30);
287 if(IsSatisfy(a,_my_reference_coord))
289 std::vector<double> c(TETRA4A_REF,TETRA4A_REF+12);
290 return GaussInfo(NORM_TETRA4,_my_gauss_coord,getNbGauss(),c,4);
292 if(IsSatisfy(b,_my_reference_coord))
294 std::vector<double> c(TETRA4B_REF,TETRA4B_REF+12);
295 return GaussInfo(NORM_TETRA4,_my_gauss_coord,getNbGauss(),c,4);
297 throw INTERP_KERNEL::Exception("GaussInfo::convertToLinear : not recognized pattern for TETRA10 !");
301 std::vector<double> a(PYRA13A_REF,PYRA13A_REF+39),b(PYRA13B_REF,PYRA13B_REF+39);
302 if(IsSatisfy(a,_my_reference_coord))
304 std::vector<double> c(PYRA5A_REF,PYRA5A_REF+15);
305 return GaussInfo(NORM_PYRA5,_my_gauss_coord,getNbGauss(),c,5);
307 if(IsSatisfy(b,_my_reference_coord))
309 std::vector<double> c(PYRA5B_REF,PYRA5B_REF+15);
310 return GaussInfo(NORM_PYRA5,_my_gauss_coord,getNbGauss(),c,5);
312 throw INTERP_KERNEL::Exception("GaussInfo::convertToLinear : not recognized pattern for PYRA13 !");
316 std::vector<double> a(PENTA15A_REF,PENTA15A_REF+45),b(PENTA15B_REF,PENTA15B_REF+45);
317 if(IsSatisfy(a,_my_reference_coord))
319 std::vector<double> c(PENTA6A_REF,PENTA6A_REF+18);
320 return GaussInfo(NORM_PENTA6,_my_gauss_coord,getNbGauss(),c,6);
322 if(IsSatisfy(b,_my_reference_coord))
324 std::vector<double> c(PENTA6B_REF,PENTA6B_REF+18);
325 return GaussInfo(NORM_PENTA6,_my_gauss_coord,getNbGauss(),c,6);
327 throw INTERP_KERNEL::Exception("GaussInfo::convertToLinear : not recognized pattern for PENTA15 !");
331 std::vector<double> a(HEXA20A_REF,HEXA20A_REF+60),b(HEXA20B_REF,HEXA20B_REF+60);
332 if(IsSatisfy(a,_my_reference_coord))
334 std::vector<double> c(HEXA8A_REF,HEXA8A_REF+24);
335 return GaussInfo(NORM_HEXA8,_my_gauss_coord,getNbGauss(),c,8);
337 if(IsSatisfy(b,_my_reference_coord))
339 std::vector<double> c(HEXA8B_REF,HEXA8B_REF+24);
340 return GaussInfo(NORM_HEXA8,_my_gauss_coord,getNbGauss(),c,8);
342 throw INTERP_KERNEL::Exception("GaussInfo::convertToLinear : not recognized pattern for HEXA20 !");
346 std::vector<double> a(HEXA27A_REF,HEXA27A_REF+81);
347 if(IsSatisfy(a,_my_reference_coord))
349 std::vector<double> c(HEXA8B_REF,HEXA8B_REF+24);
350 return GaussInfo(NORM_HEXA8,_my_gauss_coord,getNbGauss(),c,8);
352 throw INTERP_KERNEL::Exception("GaussInfo::convertToLinear : not recognized pattern for HEXA27 !");
355 throw INTERP_KERNEL::Exception("GaussInfo::convertToLinear : not implemented yet for other types than TETRA10, HEXA20, HEXA27, TRI3, QUAD8, QUAD8, PYRA13, PENTA15 !");
360 bool GaussInfo::IsSatisfy(const std::vector<double>& ref1, const std::vector<double>& ref2)
362 std::size_t sz(ref1.size());
365 for(std::size_t i=0;i<sz;i++)
366 if(!IsEqual(ref1[i],ref2[i]))
374 bool GaussInfo::isSatisfy()
377 bool anIsSatisfy = ((_my_local_nb_ref == _my_nb_ref) && (_my_local_ref_dim == getReferenceCoordDim()));
381 for( int refId = 0; refId < _my_local_nb_ref; refId++ )
383 double* refCoord = &_my_reference_coord[ refId*_my_local_ref_dim ];
384 double* localRefCoord = &_my_local_reference_coord[ refId*_my_local_ref_dim ];
385 bool anIsEqual = false;
386 for( int dimId = 0; dimId < _my_local_ref_dim; dimId++ )
388 anIsEqual = IsEqual( localRefCoord[dimId], refCoord[dimId]);
399 std::vector<double> GaussInfo::NormalizeCoordinatesIfNecessary(NormalizedCellType ct, int inputDim, const std::vector<double>& inputArray)
401 std::size_t sz(inputArray.size()),dim((std::size_t)inputDim);
403 throw INTERP_KERNEL::Exception("GaussInfo::NormalizeCoordinatesIfNecessary : invalid dimension ! Must be !=0 !");
405 throw INTERP_KERNEL::Exception("GaussInfo::NormalizeCoordinatesIfNecessary : invalid input array ! Inconsistent with the given dimension !");
406 const CellModel& cm(CellModel::GetCellModel(ct));
407 std::size_t baseDim((std::size_t)cm.getDimension());
410 std::size_t nbOfItems(sz/dim);
411 std::vector<double> ret(nbOfItems*baseDim);
414 for(std::size_t i=0;i<nbOfItems;i++)
418 ret[i*baseDim+j]=inputArray[i*dim+j];
425 for(std::size_t i=0;i<nbOfItems;i++)
429 ret[i*baseDim+j]=inputArray[i*dim+j];
435 typedef void (*MapToShapeFunction)(GaussInfo& obj);
438 * Initialize the internal vectors
440 void GaussInfo::initLocalInfo()
442 bool aSatify = false;
443 const CellModel& cellModel(CellModel::GetCellModel(_my_geometry));
444 switch( _my_geometry )
447 _my_local_ref_dim = 0;
448 _my_local_nb_ref = 1;
450 aSatify = isSatisfy();
455 _my_local_ref_dim = 1;
456 _my_local_nb_ref = 2;
458 aSatify = isSatisfy();
463 _my_local_ref_dim = 1;
464 _my_local_nb_ref = 3;
466 aSatify = isSatisfy();
471 _my_local_ref_dim = 2;
472 _my_local_nb_ref = 3;
474 aSatify = isSatisfy();
479 aSatify = isSatisfy();
485 _my_local_ref_dim = 2;
486 _my_local_nb_ref = 6;
488 aSatify = isSatisfy();
492 aSatify = isSatisfy();
498 _my_local_ref_dim = 2;
499 _my_local_nb_ref = 7;
501 aSatify = isSatisfy();
507 _my_local_ref_dim = 2;
508 _my_local_nb_ref = 4;
509 MapToShapeFunction QUAD4PTR[]={Quad4aInit,Quad4bInit,Quad4cInit,Quad4DegSeg2Init};
510 std::size_t NB_OF_QUAD4PTR(sizeof(QUAD4PTR)/sizeof(MapToShapeFunction));
511 for(std::size_t i=0;i<NB_OF_QUAD4PTR && !aSatify;i++)
513 (QUAD4PTR[i])(*this);
514 aSatify = isSatisfy();
522 _my_local_ref_dim = 2;
523 _my_local_nb_ref = 8;
525 aSatify = isSatisfy();
530 aSatify = isSatisfy();
536 _my_local_ref_dim = 2;
537 _my_local_nb_ref = 9;
539 aSatify = isSatisfy();
544 _my_local_ref_dim = 3;
545 _my_local_nb_ref = 4;
547 aSatify = isSatisfy();
552 aSatify = isSatisfy();
558 _my_local_ref_dim = 3;
559 _my_local_nb_ref = 10;
561 aSatify = isSatisfy();
566 aSatify = isSatisfy();
572 _my_local_ref_dim = 3;
573 _my_local_nb_ref = 5;
575 aSatify = isSatisfy();
580 aSatify = isSatisfy();
586 _my_local_ref_dim = 3;
587 _my_local_nb_ref = 13;
589 aSatify = isSatisfy();
594 aSatify = isSatisfy();
601 _my_local_ref_dim = 3;
602 _my_local_nb_ref = 6;
603 MapToShapeFunction PENTA6PTR[]={Penta6aInit,Penta6bInit,Penta6DegTria3aInit,Penta6DegTria3bInit};
604 std::size_t NB_OF_PENTA6PTR(sizeof(PENTA6PTR)/sizeof(MapToShapeFunction));
605 for(std::size_t i=0;i<NB_OF_PENTA6PTR && !aSatify;i++)
607 (PENTA6PTR[i])(*this);
608 aSatify = isSatisfy();
615 _my_local_ref_dim = 3;
616 _my_local_nb_ref = 6;
618 aSatify = isSatisfy();
623 aSatify = isSatisfy();
630 _my_local_ref_dim = 3;
631 _my_local_nb_ref = 15;
632 MapToShapeFunction PENTA15PTR[]={Penta15aInit,Penta15bInit};
633 std::size_t NB_OF_PENTA15PTR(sizeof(PENTA15PTR)/sizeof(MapToShapeFunction));
634 for(std::size_t i=0;i<NB_OF_PENTA15PTR && !aSatify;i++)
636 (PENTA15PTR[i])(*this);
637 aSatify = isSatisfy();
645 _my_local_ref_dim = 3;
646 _my_local_nb_ref = 8;
647 MapToShapeFunction HEXA8PTR[]={Hexa8aInit,Hexa8bInit,Hexa8DegQuad4aInit,Hexa8DegQuad4bInit,Hexa8DegQuad4cInit};
648 std::size_t NB_OF_HEXA8PTR(sizeof(HEXA8PTR)/sizeof(MapToShapeFunction));
649 for(std::size_t i=0;i<NB_OF_HEXA8PTR && !aSatify;i++)
651 (HEXA8PTR[i])(*this);
652 aSatify = isSatisfy();
659 _my_local_ref_dim = 3;
660 _my_local_nb_ref = 20;
662 aSatify = isSatisfy();
667 aSatify = isSatisfy();
673 _my_local_ref_dim = 3;
674 _my_local_nb_ref = 27;
676 aSatify = isSatisfy();
681 throw INTERP_KERNEL::Exception("Not managed cell type !");
687 * Return shape function value by node id
689 const double* GaussInfo::getFunctionValues( const int theGaussId ) const
691 return &_my_function_value[ _my_nb_ref*theGaussId ];
694 void GaussInfo::point1Init()
696 double *funValue(&_my_function_value[0]);
701 * Init Segment 2 Reference coordinates ans Shape function.
703 void GaussInfo::seg2Init()
705 LOCAL_COORD_MACRO_BEGIN;
707 coords[0] = SEG2_REF[0];
710 coords[0] = SEG2_REF[1];
712 LOCAL_COORD_MACRO_END;
714 SHAPE_FUN_MACRO_BEGIN;
715 funValue[0] = 0.5*(1.0 - gc[0]);
716 funValue[1] = 0.5*(1.0 + gc[0]);
721 * Init Segment 3 Reference coordinates ans Shape function.
723 void GaussInfo::seg3Init()
725 LOCAL_COORD_MACRO_BEGIN;
727 coords[0] = SEG3_REF[0];
730 coords[0] = SEG3_REF[1];
733 coords[0] = SEG3_REF[2];
734 LOCAL_COORD_MACRO_END;
736 SHAPE_FUN_MACRO_BEGIN;
737 funValue[0] = -0.5*(1.0 - gc[0])*gc[0];
738 funValue[1] = 0.5*(1.0 + gc[0])*gc[0];
739 funValue[2] = (1.0 + gc[0])*(1.0 - gc[0]);
744 * Init Triangle Reference coordinates ans Shape function.
747 void GaussInfo::tria3aInit()
749 LOCAL_COORD_MACRO_BEGIN;
751 coords[0] = TRIA3A_REF[0];
752 coords[1] = TRIA3A_REF[1];
755 coords[0] = TRIA3A_REF[2];
756 coords[1] = TRIA3A_REF[3];
759 coords[0] = TRIA3A_REF[4];
760 coords[1] = TRIA3A_REF[5];
762 LOCAL_COORD_MACRO_END;
764 SHAPE_FUN_MACRO_BEGIN;
765 funValue[0] = 0.5*(1.0 + gc[1]);
766 funValue[1] = -0.5*(gc[0] + gc[1]);
767 funValue[2] = 0.5*(1.0 + gc[0]);
772 * Init Triangle Reference coordinates ans Shape function.
775 void GaussInfo::tria3bInit()
777 LOCAL_COORD_MACRO_BEGIN;
779 coords[0] = TRIA3B_REF[0];
780 coords[1] = TRIA3B_REF[1];
783 coords[0] = TRIA3B_REF[2];
784 coords[1] = TRIA3B_REF[3];
787 coords[0] = TRIA3B_REF[4];
788 coords[1] = TRIA3B_REF[5];
790 LOCAL_COORD_MACRO_END;
792 SHAPE_FUN_MACRO_BEGIN;
793 funValue[0] = 1.0 - gc[0] - gc[1];
800 * Init Quadratic Triangle Reference coordinates ans Shape function.
803 void GaussInfo::tria6aInit()
805 LOCAL_COORD_MACRO_BEGIN;
807 coords[0] = TRIA6A_REF[0];
808 coords[1] = TRIA6A_REF[1];
811 coords[0] = TRIA6A_REF[2];
812 coords[1] = TRIA6A_REF[3];
815 coords[0] = TRIA6A_REF[4];
816 coords[1] = TRIA6A_REF[5];
819 coords[0] = TRIA6A_REF[6];
820 coords[1] = TRIA6A_REF[7];
823 coords[0] = TRIA6A_REF[8];
824 coords[1] = TRIA6A_REF[9];
827 coords[0] = TRIA6A_REF[10];
828 coords[1] = TRIA6A_REF[11];
830 LOCAL_COORD_MACRO_END;
832 SHAPE_FUN_MACRO_BEGIN;
833 funValue[0] = 0.5*(1.0 + gc[1])*gc[1];
834 funValue[1] = 0.5*(gc[0] + gc[1])*(gc[0] + gc[1] + 1);
835 funValue[2] = 0.5*(1.0 + gc[0])*gc[0];
836 funValue[3] = -1.0*(1.0 + gc[1])*(gc[0] + gc[1]);
837 funValue[4] = -1.0*(1.0 + gc[0])*(gc[0] + gc[1]);
838 funValue[5] = (1.0 + gc[1])*(1.0 + gc[1]);
843 * Init Quadratic Triangle Reference coordinates ans Shape function.
846 void GaussInfo::tria6bInit()
848 LOCAL_COORD_MACRO_BEGIN;
850 coords[0] = TRIA6B_REF[0];
851 coords[1] = TRIA6B_REF[1];
854 coords[0] = TRIA6B_REF[2];
855 coords[1] = TRIA6B_REF[3];
858 coords[0] = TRIA6B_REF[4];
859 coords[1] = TRIA6B_REF[5];
862 coords[0] = TRIA6B_REF[6];
863 coords[1] = TRIA6B_REF[7];
866 coords[0] = TRIA6B_REF[8];
867 coords[1] = TRIA6B_REF[9];
870 coords[0] = TRIA6B_REF[10];
871 coords[1] = TRIA6B_REF[11];
873 LOCAL_COORD_MACRO_END;
875 SHAPE_FUN_MACRO_BEGIN;
876 funValue[0] = (1.0 - gc[0] - gc[1])*(1.0 - 2.0*gc[0] - 2.0*gc[1]);
877 funValue[1] = gc[0]*(2.0*gc[0] - 1.0);
878 funValue[2] = gc[1]*(2.0*gc[1] - 1.0);
879 funValue[3] = 4.0*gc[0]*(1.0 - gc[0] - gc[1]);
880 funValue[4] = 4.0*gc[0]*gc[1];
881 funValue[5] = 4.0*gc[1]*(1.0 - gc[0] - gc[1]);
885 void GaussInfo::tria7aInit()
887 LOCAL_COORD_MACRO_BEGIN;
889 coords[0] = TRIA7A_REF[0];
890 coords[1] = TRIA7A_REF[1];
893 coords[0] = TRIA7A_REF[2];
894 coords[1] = TRIA7A_REF[3];
897 coords[0] = TRIA7A_REF[4];
898 coords[1] = TRIA7A_REF[5];
901 coords[0] = TRIA7A_REF[6];
902 coords[1] = TRIA7A_REF[7];
905 coords[0] = TRIA7A_REF[8];
906 coords[1] = TRIA7A_REF[9];
909 coords[0] = TRIA7A_REF[10];
910 coords[1] = TRIA7A_REF[11];
913 coords[0] = TRIA7A_REF[12];
914 coords[1] = TRIA7A_REF[13];
916 LOCAL_COORD_MACRO_END;
918 SHAPE_FUN_MACRO_BEGIN;
919 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]);
920 funValue[1]=gc[0]*(-1+2*gc[0]+3*gc[1]-3*gc[1]*(gc[0]+gc[1]));
921 funValue[2]=gc[1]*(-1.+3.*gc[0]+2.*gc[1]-3.*gc[0]*(gc[0]+gc[1]));
922 funValue[3]=4*gc[0]*(1-gc[0]-4*gc[1]+3*gc[1]*(gc[0]+gc[1]));
923 funValue[4]=4*gc[0]*gc[1]*(-2+3*(gc[0]+gc[1]));
924 funValue[5]=4*gc[1]*(1-4*gc[0]-gc[1]+3*gc[0]*(gc[0]+gc[1]));
925 funValue[6]=27*gc[0]*gc[1]*(1-gc[0]-gc[1]);
930 * Init Quadrangle Reference coordinates ans Shape function.
933 void GaussInfo::quad4aInit()
935 LOCAL_COORD_MACRO_BEGIN;
937 coords[0] = QUAD4A_REF[0];
938 coords[1] = QUAD4A_REF[1];
941 coords[0] = QUAD4A_REF[2];
942 coords[1] = QUAD4A_REF[3];
945 coords[0] = QUAD4A_REF[4];
946 coords[1] = QUAD4A_REF[5];
949 coords[0] = QUAD4A_REF[6];
950 coords[1] = QUAD4A_REF[7];
952 LOCAL_COORD_MACRO_END;
954 SHAPE_FUN_MACRO_BEGIN;
955 funValue[0] = 0.25*(1.0 + gc[1])*(1.0 - gc[0]);
956 funValue[1] = 0.25*(1.0 - gc[1])*(1.0 - gc[0]);
957 funValue[2] = 0.25*(1.0 - gc[1])*(1.0 + gc[0]);
958 funValue[3] = 0.25*(1.0 + gc[0])*(1.0 + gc[1]);
963 * Init Quadrangle Reference coordinates ans Shape function.
966 void GaussInfo::quad4bInit()
968 LOCAL_COORD_MACRO_BEGIN;
970 coords[0] = QUAD4B_REF[0];
971 coords[1] = QUAD4B_REF[1];
974 coords[0] = QUAD4B_REF[2];
975 coords[1] = QUAD4B_REF[3];
978 coords[0] = QUAD4B_REF[4];
979 coords[1] = QUAD4B_REF[5];
982 coords[0] = QUAD4B_REF[6];
983 coords[1] = QUAD4B_REF[7];
985 LOCAL_COORD_MACRO_END;
987 SHAPE_FUN_MACRO_BEGIN;
988 funValue[0] = 0.25*(1.0 - gc[0])*(1.0 - gc[1]);
989 funValue[1] = 0.25*(1.0 + gc[0])*(1.0 - gc[1]);
990 funValue[2] = 0.25*(1.0 + gc[0])*(1.0 + gc[1]);
991 funValue[3] = 0.25*(1.0 - gc[0])*(1.0 + gc[1]);
995 void GaussInfo::quad4cInit()
997 LOCAL_COORD_MACRO_BEGIN;
1015 LOCAL_COORD_MACRO_END;
1017 SHAPE_FUN_MACRO_BEGIN;
1018 funValue[0] = 0.25*(1.0 - gc[0])*(1.0 - gc[1]);
1019 funValue[1] = 0.25*(1.0 - gc[0])*(1.0 + gc[1]);
1020 funValue[2] = 0.25*(1.0 + gc[0])*(1.0 + gc[1]);
1021 funValue[3] = 0.25*(1.0 + gc[0])*(1.0 - gc[1]);
1022 SHAPE_FUN_MACRO_END;
1026 * This shapefunc map is same as degenerated seg2Init
1028 void GaussInfo::quad4DegSeg2Init()
1030 LOCAL_COORD_MACRO_BEGIN;
1047 LOCAL_COORD_MACRO_END;
1049 SHAPE_FUN_MACRO_BEGIN;
1050 funValue[0] = 0.5*(1.0 - gc[0]);
1051 funValue[1] = 0.5*(1.0 + gc[0]);
1054 SHAPE_FUN_MACRO_END;
1058 * Init Quadratic Quadrangle Reference coordinates ans Shape function.
1061 void GaussInfo::quad8aInit()
1063 LOCAL_COORD_MACRO_BEGIN;
1065 coords[0] = QUAD8A_REF[0];
1066 coords[1] = QUAD8A_REF[1];
1069 coords[0] = QUAD8A_REF[2];
1070 coords[1] = QUAD8A_REF[3];
1073 coords[0] = QUAD8A_REF[4];
1074 coords[1] = QUAD8A_REF[5];
1077 coords[0] = QUAD8A_REF[6];
1078 coords[1] = QUAD8A_REF[7];
1081 coords[0] = QUAD8A_REF[8];
1082 coords[1] = QUAD8A_REF[9];
1085 coords[0] = QUAD8A_REF[10];
1086 coords[1] = QUAD8A_REF[11];
1089 coords[0] = QUAD8A_REF[12];
1090 coords[1] = QUAD8A_REF[13];
1093 coords[0] = QUAD8A_REF[14];
1094 coords[1] = QUAD8A_REF[15];
1096 LOCAL_COORD_MACRO_END;
1098 SHAPE_FUN_MACRO_BEGIN;
1099 funValue[0] = 0.25*(1.0 + gc[1])*(1.0 - gc[0])*(gc[1] - gc[0] - 1.0);
1100 funValue[1] = 0.25*(1.0 - gc[1])*(1.0 - gc[0])*(-gc[1] - gc[0] - 1.0);
1101 funValue[2] = 0.25*(1.0 - gc[1])*(1.0 + gc[0])*(-gc[1] + gc[0] - 1.0);
1102 funValue[3] = 0.25*(1.0 + gc[1])*(1.0 + gc[0])*(gc[1] + gc[0] - 1.0);
1103 funValue[4] = 0.5*(1.0 - gc[0])*(1.0 - gc[1])*(1.0 + gc[1]);
1104 funValue[5] = 0.5*(1.0 - gc[1])*(1.0 - gc[0])*(1.0 + gc[0]);
1105 funValue[6] = 0.5*(1.0 + gc[0])*(1.0 - gc[1])*(1.0 + gc[1]);
1106 funValue[7] = 0.5*(1.0 + gc[1])*(1.0 - gc[0])*(1.0 + gc[0]);
1107 SHAPE_FUN_MACRO_END;
1111 * Init Quadratic Quadrangle Reference coordinates ans Shape function.
1114 void GaussInfo::quad8bInit()
1116 LOCAL_COORD_MACRO_BEGIN;
1118 coords[0] = QUAD8B_REF[0];
1119 coords[1] = QUAD8B_REF[1];
1122 coords[0] = QUAD8B_REF[2];
1123 coords[1] = QUAD8B_REF[3];
1126 coords[0] = QUAD8B_REF[4];
1127 coords[1] = QUAD8B_REF[5];
1130 coords[0] = QUAD8B_REF[6];
1131 coords[1] = QUAD8B_REF[7];
1134 coords[0] = QUAD8B_REF[8];
1135 coords[1] = QUAD8B_REF[9];
1138 coords[0] = QUAD8B_REF[10];
1139 coords[1] = QUAD8B_REF[11];
1142 coords[0] = QUAD8B_REF[12];
1143 coords[1] = QUAD8B_REF[13];
1146 coords[0] = QUAD8B_REF[14];
1147 coords[1] = QUAD8B_REF[15];
1149 LOCAL_COORD_MACRO_END;
1151 SHAPE_FUN_MACRO_BEGIN;
1152 funValue[0] = 0.25*(1.0 - gc[0])*(1.0 - gc[1])*(-1.0 - gc[0] - gc[1]);
1153 funValue[1] = 0.25*(1.0 + gc[0])*(1.0 - gc[1])*(-1.0 + gc[0] - gc[1]);
1154 funValue[2] = 0.25*(1.0 + gc[0])*(1.0 + gc[1])*(-1.0 + gc[0] + gc[1]);
1155 funValue[3] = 0.25*(1.0 - gc[0])*(1.0 + gc[1])*(-1.0 - gc[0] + gc[1]);
1156 funValue[4] = 0.5*(1.0 - gc[0]*gc[0])*(1.0 - gc[1]);
1157 funValue[5] = 0.5*(1.0 - gc[1]*gc[1])*(1.0 + gc[0]);
1158 funValue[6] = 0.5*(1.0 - gc[0]*gc[0])*(1.0 + gc[1]);
1159 funValue[7] = 0.5*(1.0 - gc[1]*gc[1])*(1.0 - gc[0]);
1160 SHAPE_FUN_MACRO_END;
1163 void GaussInfo::quad9aInit()
1165 LOCAL_COORD_MACRO_BEGIN;
1167 coords[0] = QUAD9A_REF[0];
1168 coords[1] = QUAD9A_REF[1];
1171 coords[0] = QUAD9A_REF[2];
1172 coords[1] = QUAD9A_REF[3];
1175 coords[0] = QUAD9A_REF[4];
1176 coords[1] = QUAD9A_REF[5];
1179 coords[0] = QUAD9A_REF[6];
1180 coords[1] = QUAD9A_REF[7];
1183 coords[0] = QUAD9A_REF[8];
1184 coords[1] = QUAD9A_REF[9];
1187 coords[0] = QUAD9A_REF[10];
1188 coords[1] = QUAD9A_REF[11];
1191 coords[0] = QUAD9A_REF[12];
1192 coords[1] = QUAD9A_REF[13];
1195 coords[0] = QUAD9A_REF[14];
1196 coords[1] = QUAD9A_REF[15];
1199 coords[0] = QUAD9A_REF[16];
1200 coords[1] = QUAD9A_REF[17];
1202 LOCAL_COORD_MACRO_END;
1204 SHAPE_FUN_MACRO_BEGIN;
1205 funValue[0] = 0.25*gc[0]*gc[1]*(gc[0]-1.)*(gc[1]-1.);
1206 funValue[1] = 0.25*gc[0]*gc[1]*(gc[0]+1.)*(gc[1]-1.);
1207 funValue[2] = 0.25*gc[0]*gc[1]*(gc[0]+1.)*(gc[1]+1.);
1208 funValue[3] = 0.25*gc[0]*gc[1]*(gc[0]-1.)*(gc[1]+1.);
1209 funValue[4] = 0.5*(1.-gc[0]*gc[0])*gc[1]*(gc[1]-1.);
1210 funValue[5] = 0.5*gc[0]*(gc[0]+1.)*(1.-gc[1]*gc[1]);
1211 funValue[6] = 0.5*(1.-gc[0]*gc[0])*gc[1]*(gc[1]+1.);
1212 funValue[7] = 0.5*gc[0]*(gc[0]-1.)*(1.-gc[1]*gc[1]);
1213 funValue[8] = (1.-gc[0]*gc[0])*(1.-gc[1]*gc[1]);
1214 SHAPE_FUN_MACRO_END;
1218 * Init Tetrahedron Reference coordinates ans Shape function.
1221 void GaussInfo::tetra4aInit()
1223 LOCAL_COORD_MACRO_BEGIN;
1225 coords[0] = TETRA4A_REF[0];
1226 coords[1] = TETRA4A_REF[1];
1227 coords[2] = TETRA4A_REF[2];
1230 coords[0] = TETRA4A_REF[3];
1231 coords[1] = TETRA4A_REF[4];
1232 coords[2] = TETRA4A_REF[5];
1235 coords[0] = TETRA4A_REF[6];
1236 coords[1] = TETRA4A_REF[7];
1237 coords[2] = TETRA4A_REF[8];
1240 coords[0] = TETRA4A_REF[9];
1241 coords[1] = TETRA4A_REF[10];
1242 coords[2] = TETRA4A_REF[11];
1244 LOCAL_COORD_MACRO_END;
1246 SHAPE_FUN_MACRO_BEGIN;
1247 funValue[0] = gc[1];
1248 funValue[1] = gc[2];
1249 funValue[2] = 1.0 - gc[0] - gc[1] - gc[2];
1250 funValue[3] = gc[0];
1251 SHAPE_FUN_MACRO_END;
1255 * Init Tetrahedron Reference coordinates ans Shape function.
1258 void GaussInfo::tetra4bInit()
1260 LOCAL_COORD_MACRO_BEGIN;
1262 coords[0] = TETRA4B_REF[0];
1263 coords[1] = TETRA4B_REF[1];
1264 coords[2] = TETRA4B_REF[2];
1267 coords[0] = TETRA4B_REF[3];
1268 coords[1] = TETRA4B_REF[4];
1269 coords[2] = TETRA4B_REF[5];
1272 coords[0] = TETRA4B_REF[6];
1273 coords[1] = TETRA4B_REF[7];
1274 coords[2] = TETRA4B_REF[8];
1277 coords[0] = TETRA4B_REF[9];
1278 coords[1] = TETRA4B_REF[10];
1279 coords[2] = TETRA4B_REF[11];
1281 LOCAL_COORD_MACRO_END;
1283 SHAPE_FUN_MACRO_BEGIN;
1284 funValue[0] = gc[1];
1285 funValue[2] = gc[2];
1286 funValue[1] = 1.0 - gc[0] - gc[1] - gc[2];
1287 funValue[3] = gc[0];
1288 SHAPE_FUN_MACRO_END;
1292 * Init Quadratic Tetrahedron Reference coordinates ans Shape function.
1295 void GaussInfo::tetra10aInit()
1297 LOCAL_COORD_MACRO_BEGIN;
1299 coords[0] = TETRA10A_REF[0];
1300 coords[1] = TETRA10A_REF[1];
1301 coords[2] = TETRA10A_REF[2];
1304 coords[0] = TETRA10A_REF[3];
1305 coords[1] = TETRA10A_REF[4];
1306 coords[2] = TETRA10A_REF[5];
1309 coords[0] = TETRA10A_REF[6];
1310 coords[1] = TETRA10A_REF[7];
1311 coords[2] = TETRA10A_REF[8];
1314 coords[0] = TETRA10A_REF[9];
1315 coords[1] = TETRA10A_REF[10];
1316 coords[2] = TETRA10A_REF[11];
1319 coords[0] = TETRA10A_REF[12];
1320 coords[1] = TETRA10A_REF[13];
1321 coords[2] = TETRA10A_REF[14];
1324 coords[0] = TETRA10A_REF[15];
1325 coords[1] = TETRA10A_REF[16];
1326 coords[2] = TETRA10A_REF[17];
1329 coords[0] = TETRA10A_REF[18];
1330 coords[1] = TETRA10A_REF[19];
1331 coords[2] = TETRA10A_REF[20];
1334 coords[0] = TETRA10A_REF[21];
1335 coords[1] = TETRA10A_REF[22];
1336 coords[2] = TETRA10A_REF[23];
1339 coords[0] = TETRA10A_REF[24];
1340 coords[1] = TETRA10A_REF[25];
1341 coords[2] = TETRA10A_REF[26];
1344 coords[0] = TETRA10A_REF[27];
1345 coords[1] = TETRA10A_REF[28];
1346 coords[2] = TETRA10A_REF[29];
1348 LOCAL_COORD_MACRO_END;
1350 SHAPE_FUN_MACRO_BEGIN;
1351 funValue[0] = gc[1]*(2.0*gc[1] - 1.0);
1352 funValue[1] = gc[2]*(2.0*gc[2] - 1.0);
1353 funValue[2] = (1.0 - gc[0] - gc[1] - gc[2])*(1.0 - 2.0*gc[0] - 2.0*gc[1] - 2.0*gc[2]);
1354 funValue[3] = gc[0]*(2.0*gc[0] - 1.0);
1355 funValue[4] = 4.0*gc[1]*gc[2];
1356 funValue[5] = 4.0*gc[2]*(1.0 - gc[0] - gc[1] - gc[2]);
1357 funValue[6] = 4.0*gc[1]*(1.0 - gc[0] - gc[1] - gc[2]);
1358 funValue[7] = 4.0*gc[0]*gc[1];
1359 funValue[8] = 4.0*gc[0]*gc[2];
1360 funValue[9] = 4.0*gc[0]*(1.0 - gc[0] - gc[1] - gc[2]);
1361 SHAPE_FUN_MACRO_END;
1365 * Init Quadratic Tetrahedron Reference coordinates ans Shape function.
1368 void GaussInfo::tetra10bInit()
1370 LOCAL_COORD_MACRO_BEGIN;
1372 coords[0] = TETRA10B_REF[0];
1373 coords[1] = TETRA10B_REF[1];
1374 coords[2] = TETRA10B_REF[2];
1377 coords[0] = TETRA10B_REF[3];
1378 coords[1] = TETRA10B_REF[4];
1379 coords[2] = TETRA10B_REF[5];
1382 coords[0] = TETRA10B_REF[6];
1383 coords[1] = TETRA10B_REF[7];
1384 coords[2] = TETRA10B_REF[8];
1387 coords[0] = TETRA10B_REF[9];
1388 coords[1] = TETRA10B_REF[10];
1389 coords[2] = TETRA10B_REF[11];
1392 coords[0] = TETRA10B_REF[12];
1393 coords[1] = TETRA10B_REF[13];
1394 coords[2] = TETRA10B_REF[14];
1397 coords[0] = TETRA10B_REF[15];
1398 coords[1] = TETRA10B_REF[16];
1399 coords[2] = TETRA10B_REF[17];
1402 coords[0] = TETRA10B_REF[18];
1403 coords[1] = TETRA10B_REF[19];
1404 coords[2] = TETRA10B_REF[20];
1407 coords[0] = TETRA10B_REF[21];
1408 coords[1] = TETRA10B_REF[22];
1409 coords[2] = TETRA10B_REF[23];
1412 coords[0] = TETRA10B_REF[24];
1413 coords[1] = TETRA10B_REF[25];
1414 coords[2] = TETRA10B_REF[26];
1417 coords[0] = TETRA10B_REF[27];
1418 coords[1] = TETRA10B_REF[28];
1419 coords[2] = TETRA10B_REF[29];
1421 LOCAL_COORD_MACRO_END;
1422 SHAPE_FUN_MACRO_BEGIN;
1423 funValue[0] = gc[1]*(2.0*gc[1] - 1.0);
1424 funValue[2] = gc[2]*(2.0*gc[2] - 1.0);
1425 funValue[1] = (1.0 - gc[0] - gc[1] - gc[2])*(1.0 - 2.0*gc[0] - 2.0*gc[1] - 2.0*gc[2]);
1426 funValue[3] = gc[0]*(2.0*gc[0] - 1.0);
1427 funValue[6] = 4.0*gc[1]*gc[2];
1428 funValue[5] = 4.0*gc[2]*(1.0 - gc[0] - gc[1] - gc[2]);
1429 funValue[4] = 4.0*gc[1]*(1.0 - gc[0] - gc[1] - gc[2]);
1430 funValue[7] = 4.0*gc[0]*gc[1];
1431 funValue[9] = 4.0*gc[0]*gc[2];
1432 funValue[8] = 4.0*gc[0]*(1.0 - gc[0] - gc[1] - gc[2]);
1433 SHAPE_FUN_MACRO_END;
1437 * Init Pyramid Reference coordinates ans Shape function.
1440 void GaussInfo::pyra5aInit()
1442 LOCAL_COORD_MACRO_BEGIN;
1444 coords[0] = PYRA5A_REF[0];
1445 coords[1] = PYRA5A_REF[1];
1446 coords[2] = PYRA5A_REF[2];
1449 coords[0] = PYRA5A_REF[3];
1450 coords[1] = PYRA5A_REF[4];
1451 coords[2] = PYRA5A_REF[5];
1454 coords[0] = PYRA5A_REF[6];
1455 coords[1] = PYRA5A_REF[7];
1456 coords[2] = PYRA5A_REF[8];
1459 coords[0] = PYRA5A_REF[9];
1460 coords[1] = PYRA5A_REF[10];
1461 coords[2] = PYRA5A_REF[11];
1464 coords[0] = PYRA5A_REF[12];
1465 coords[1] = PYRA5A_REF[13];
1466 coords[2] = PYRA5A_REF[14];
1468 LOCAL_COORD_MACRO_END;
1470 SHAPE_FUN_MACRO_BEGIN;
1471 funValue[0] = 0.25*(-gc[0] + gc[1] - 1.0)*(-gc[0] - gc[1] - 1.0)*(1.0 - gc[2]);
1472 funValue[1] = 0.25*(-gc[0] - gc[1] - 1.0)*(+gc[0] - gc[1] - 1.0)*(1.0 - gc[2]);
1473 funValue[2] = 0.25*(+gc[0] + gc[1] - 1.0)*(+gc[0] - gc[1] - 1.0)*(1.0 - gc[2]);
1474 funValue[3] = 0.25*(+gc[0] + gc[1] - 1.0)*(-gc[0] + gc[1] - 1.0)*(1.0 - gc[2]);
1475 funValue[4] = gc[2];
1476 SHAPE_FUN_MACRO_END;
1479 * Init Pyramid Reference coordinates ans Shape function.
1482 void GaussInfo::pyra5bInit()
1484 LOCAL_COORD_MACRO_BEGIN;
1486 coords[0] = PYRA5B_REF[0];
1487 coords[1] = PYRA5B_REF[1];
1488 coords[2] = PYRA5B_REF[2];
1491 coords[0] = PYRA5B_REF[3];
1492 coords[1] = PYRA5B_REF[4];
1493 coords[2] = PYRA5B_REF[5];
1496 coords[0] = PYRA5B_REF[6];
1497 coords[1] = PYRA5B_REF[7];
1498 coords[2] = PYRA5B_REF[8];
1501 coords[0] = PYRA5B_REF[9];
1502 coords[1] = PYRA5B_REF[10];
1503 coords[2] = PYRA5B_REF[11];
1506 coords[0] = PYRA5B_REF[12];
1507 coords[1] = PYRA5B_REF[13];
1508 coords[2] = PYRA5B_REF[14];
1510 LOCAL_COORD_MACRO_END;
1512 SHAPE_FUN_MACRO_BEGIN;
1513 funValue[0] = 0.25*(-gc[0] + gc[1] - 1.0)*(-gc[0] - gc[1] - 1.0)*(1.0 - gc[2]);
1514 funValue[3] = 0.25*(-gc[0] - gc[1] - 1.0)*(+gc[0] - gc[1] - 1.0)*(1.0 - gc[2]);
1515 funValue[2] = 0.25*(+gc[0] + gc[1] - 1.0)*(+gc[0] - gc[1] - 1.0)*(1.0 - gc[2]);
1516 funValue[1] = 0.25*(+gc[0] + gc[1] - 1.0)*(-gc[0] + gc[1] - 1.0)*(1.0 - gc[2]);
1517 funValue[4] = gc[2];
1518 SHAPE_FUN_MACRO_END;
1522 * Init Quadratic Pyramid Reference coordinates ans Shape function.
1525 void GaussInfo::pyra13aInit()
1527 LOCAL_COORD_MACRO_BEGIN;
1529 coords[0] = PYRA13A_REF[0];
1530 coords[1] = PYRA13A_REF[1];
1531 coords[2] = PYRA13A_REF[2];
1534 coords[0] = PYRA13A_REF[3];
1535 coords[1] = PYRA13A_REF[4];
1536 coords[2] = PYRA13A_REF[5];
1539 coords[0] = PYRA13A_REF[6];
1540 coords[1] = PYRA13A_REF[7];
1541 coords[2] = PYRA13A_REF[8];
1544 coords[0] = PYRA13A_REF[9];
1545 coords[1] = PYRA13A_REF[10];
1546 coords[2] = PYRA13A_REF[11];
1549 coords[0] = PYRA13A_REF[12];
1550 coords[1] = PYRA13A_REF[13];
1551 coords[2] = PYRA13A_REF[14];
1554 coords[0] = PYRA13A_REF[15];
1555 coords[1] = PYRA13A_REF[16];
1556 coords[2] = PYRA13A_REF[17];
1559 coords[0] = PYRA13A_REF[18];
1560 coords[1] = PYRA13A_REF[19];
1561 coords[2] = PYRA13A_REF[20];
1564 coords[0] = PYRA13A_REF[21];
1565 coords[1] = PYRA13A_REF[22];
1566 coords[2] = PYRA13A_REF[23];
1569 coords[0] = PYRA13A_REF[24];
1570 coords[1] = PYRA13A_REF[25];
1571 coords[2] = PYRA13A_REF[26];
1574 coords[0] = PYRA13A_REF[27];
1575 coords[1] = PYRA13A_REF[28];
1576 coords[2] = PYRA13A_REF[29];
1579 coords[0] = PYRA13A_REF[30];
1580 coords[1] = PYRA13A_REF[31];
1581 coords[2] = PYRA13A_REF[32];
1584 coords[0] = PYRA13A_REF[33];
1585 coords[1] = PYRA13A_REF[34];
1586 coords[2] = PYRA13A_REF[35];
1589 coords[0] = PYRA13A_REF[36];
1590 coords[1] = PYRA13A_REF[37];
1591 coords[2] = PYRA13A_REF[38];
1593 LOCAL_COORD_MACRO_END;
1595 SHAPE_FUN_MACRO_BEGIN;
1596 funValue[0] = 0.5*(-gc[0] + gc[1] + gc[2] - 1.0)*(-gc[0] - gc[1] + gc[2] - 1.0)*
1597 (gc[0] - 0.5)/(1.0 - gc[2]);
1598 funValue[1] = 0.5*(-gc[0] - gc[1] + gc[2] - 1.0)*(+gc[0] - gc[1] + gc[2] - 1.0)*
1599 (gc[1] - 0.5)/(1.0 - gc[2]);
1600 funValue[2] = 0.5*(+gc[0] - gc[1] + gc[2] - 1.0)*(+gc[0] + gc[1] + gc[2] - 1.0)*
1601 (-gc[0] - 0.5)/(1.0 - gc[2]);
1602 funValue[3] = 0.5*(+gc[0] + gc[1] + gc[2] - 1.0)*(-gc[0] + gc[1] + gc[2] - 1.0)*
1603 (-gc[1] - 0.5)/(1.0 - gc[2]);
1605 funValue[4] = 2.0*gc[2]*(gc[2] - 0.5);
1607 funValue[5] = 0.5*(-gc[0] + gc[1] + gc[2] - 1.0)*(-gc[0] - gc[1] + gc[2] - 1.0)*
1608 (gc[0] - gc[1] + gc[2] - 1.0)/(1.0 - gc[2]);
1609 funValue[6] = 0.5*(-gc[0] - gc[1] + gc[2] - 1.0)*(gc[0] - gc[1] + gc[2] - 1.0)*
1610 (gc[0] + gc[1] + gc[2] - 1.0)/(1.0 - gc[2]);
1611 funValue[7] = 0.5*(gc[0] - gc[1] + gc[2] - 1.0)*(gc[0] + gc[1] + gc[2] - 1.0)*
1612 (-gc[0] + gc[1] + gc[2] - 1.0)/(1.0 - gc[2]);
1613 funValue[8] = 0.5*(gc[0] + gc[1] + gc[2] - 1.0)*(-gc[0] + gc[1] + gc[2] - 1.0)*
1614 (-gc[0] - gc[1] + gc[2] - 1.0)/(1.0 - gc[2]);
1616 funValue[9] = 0.5*gc[2]*(-gc[0] + gc[1] + gc[2] - 1.0)*(-gc[0] - gc[1] + gc[2] - 1.0)/
1618 funValue[10] = 0.5*gc[2]*(-gc[0] - gc[1] + gc[2] - 1.0)*(gc[0] - gc[1] + gc[2] - 1.0)/
1620 funValue[11] = 0.5*gc[2]*(gc[0] - gc[1] + gc[2] - 1.0)*(gc[0] + gc[1] + gc[2] - 1.0)/
1622 funValue[12] = 0.5*gc[2]*(gc[0] + gc[1] + gc[2] - 1.0)*(-gc[0] + gc[1] + gc[2] - 1.0)/
1624 SHAPE_FUN_MACRO_END;
1628 * Init Quadratic Pyramid Reference coordinates ans Shape function.
1631 void GaussInfo::pyra13bInit()
1633 LOCAL_COORD_MACRO_BEGIN;
1635 coords[0] = PYRA13B_REF[0];
1636 coords[1] = PYRA13B_REF[1];
1637 coords[2] = PYRA13B_REF[2];
1640 coords[0] = PYRA13B_REF[3];
1641 coords[1] = PYRA13B_REF[4];
1642 coords[2] = PYRA13B_REF[5];
1645 coords[0] = PYRA13B_REF[6];
1646 coords[1] = PYRA13B_REF[7];
1647 coords[2] = PYRA13B_REF[8];
1650 coords[0] = PYRA13B_REF[9];
1651 coords[1] = PYRA13B_REF[10];
1652 coords[2] = PYRA13B_REF[11];
1655 coords[0] = PYRA13B_REF[12];
1656 coords[1] = PYRA13B_REF[13];
1657 coords[2] = PYRA13B_REF[14];
1660 coords[0] = PYRA13B_REF[15];
1661 coords[1] = PYRA13B_REF[16];
1662 coords[2] = PYRA13B_REF[17];
1665 coords[0] = PYRA13B_REF[18];
1666 coords[1] = PYRA13B_REF[19];
1667 coords[2] = PYRA13B_REF[20];
1670 coords[0] = PYRA13B_REF[21];
1671 coords[1] = PYRA13B_REF[22];
1672 coords[2] = PYRA13B_REF[23];
1675 coords[0] = PYRA13B_REF[24];
1676 coords[1] = PYRA13B_REF[25];
1677 coords[2] = PYRA13B_REF[26];
1680 coords[0] = PYRA13B_REF[27];
1681 coords[1] = PYRA13B_REF[28];
1682 coords[2] = PYRA13B_REF[29];
1685 coords[0] = PYRA13B_REF[30];
1686 coords[1] = PYRA13B_REF[31];
1687 coords[2] = PYRA13B_REF[32];
1690 coords[0] = PYRA13B_REF[33];
1691 coords[1] = PYRA13B_REF[34];
1692 coords[2] = PYRA13B_REF[35];
1695 coords[0] = PYRA13B_REF[36];
1696 coords[1] = PYRA13B_REF[37];
1697 coords[2] = PYRA13B_REF[38];
1699 LOCAL_COORD_MACRO_END;
1701 SHAPE_FUN_MACRO_BEGIN;
1702 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]);
1703 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]);
1704 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]);
1705 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]);
1707 funValue[4] =2.*gc[2]*(gc[2]-0.5);
1709 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]);
1710 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]);
1711 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]);
1712 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]);
1714 funValue[9] =gc[2]*(-gc[0]+gc[1]+gc[2]-1.0)*(-gc[0]-gc[1]+gc[2]-1.0)/(1.0-gc[2]);
1715 funValue[10]=gc[2]*(gc[0]+gc[1]+gc[2]-1.0)*(-gc[0]+gc[1]+gc[2]-1.0)/(1.0-gc[2]);
1716 funValue[11]=gc[2]*(gc[0]-gc[1]+gc[2]-1.0)*(gc[0]+gc[1]+gc[2]-1.0)/(1.0-gc[2]);
1717 funValue[12]=gc[2]*(-gc[0]-gc[1]+gc[2]-1.0)*(gc[0]-gc[1]+gc[2]-1.0)/(1.0-gc[2]);
1719 SHAPE_FUN_MACRO_END;
1724 * Init Pentahedron Reference coordinates and Shape function.
1727 void GaussInfo::penta6aInit()
1729 LOCAL_COORD_MACRO_BEGIN;
1731 coords[0] = PENTA6A_REF[0];
1732 coords[1] = PENTA6A_REF[1];
1733 coords[2] = PENTA6A_REF[2];
1736 coords[0] = PENTA6A_REF[3];
1737 coords[1] = PENTA6A_REF[4];
1738 coords[2] = PENTA6A_REF[5];
1741 coords[0] = PENTA6A_REF[6];
1742 coords[1] = PENTA6A_REF[7];
1743 coords[2] = PENTA6A_REF[8];
1746 coords[0] = PENTA6A_REF[9];
1747 coords[1] = PENTA6A_REF[10];
1748 coords[2] = PENTA6A_REF[11];
1751 coords[0] = PENTA6A_REF[12];
1752 coords[1] = PENTA6A_REF[13];
1753 coords[2] = PENTA6A_REF[14];
1756 coords[0] = PENTA6A_REF[15];
1757 coords[1] = PENTA6A_REF[16];
1758 coords[2] = PENTA6A_REF[17];
1760 LOCAL_COORD_MACRO_END;
1762 SHAPE_FUN_MACRO_BEGIN;
1763 funValue[0] = 0.5*gc[1]*(1.0 - gc[0]);
1764 funValue[1] = 0.5*gc[2]*(1.0 - gc[0]);
1765 funValue[2] = 0.5*(1.0 - gc[1] - gc[2])*(1.0 - gc[0]);
1767 funValue[3] = 0.5*gc[1]*(gc[0] + 1.0);
1768 funValue[4] = 0.5*gc[2]*(gc[0] + 1.0);
1769 funValue[5] = 0.5*(1.0 - gc[1] - gc[2])*(1.0 + gc[0]);
1770 SHAPE_FUN_MACRO_END;
1774 * Init Pentahedron Reference coordinates and Shape function.
1777 void GaussInfo::penta6bInit()
1779 LOCAL_COORD_MACRO_BEGIN;
1781 coords[0] = PENTA6B_REF[0];
1782 coords[1] = PENTA6B_REF[1];
1783 coords[2] = PENTA6B_REF[2];
1786 coords[0] = PENTA6B_REF[3];
1787 coords[1] = PENTA6B_REF[4];
1788 coords[2] = PENTA6B_REF[5];
1791 coords[0] = PENTA6B_REF[6];
1792 coords[1] = PENTA6B_REF[7];
1793 coords[2] = PENTA6B_REF[8];
1796 coords[0] = PENTA6B_REF[9];
1797 coords[1] = PENTA6B_REF[10];
1798 coords[2] = PENTA6B_REF[11];
1801 coords[0] = PENTA6B_REF[12];
1802 coords[1] = PENTA6B_REF[13];
1803 coords[2] = PENTA6B_REF[14];
1806 coords[0] = PENTA6B_REF[15];
1807 coords[1] = PENTA6B_REF[16];
1808 coords[2] = PENTA6B_REF[17];
1810 LOCAL_COORD_MACRO_END;
1812 SHAPE_FUN_MACRO_BEGIN;
1813 funValue[0] = 0.5*gc[1]*(1.0 - gc[0]);
1814 funValue[2] = 0.5*gc[2]*(1.0 - gc[0]);
1815 funValue[1] = 0.5*(1.0 - gc[1] - gc[2])*(1.0 - gc[0]);
1816 funValue[3] = 0.5*gc[1]*(gc[0] + 1.0);
1817 funValue[5] = 0.5*gc[2]*(gc[0] + 1.0);
1818 funValue[4] = 0.5*(1.0 - gc[1] - gc[2])*(1.0 + gc[0]);
1819 SHAPE_FUN_MACRO_END;
1823 * This shapefunc map is same as degenerated tria3aInit
1825 void GaussInfo::penta6DegTria3aInit()
1827 LOCAL_COORD_MACRO_BEGIN;
1858 LOCAL_COORD_MACRO_END;
1860 SHAPE_FUN_MACRO_BEGIN;
1861 funValue[0] = 0.5*(1.0 + gc[1]);
1862 funValue[1] = -0.5*(gc[0] + gc[1]);
1863 funValue[2] = 0.5*(1.0 + gc[0]);
1867 SHAPE_FUN_MACRO_END;
1871 * This shapefunc map is same as degenerated tria3bInit
1873 void GaussInfo::penta6DegTria3bInit()
1875 LOCAL_COORD_MACRO_BEGIN;
1906 LOCAL_COORD_MACRO_END;
1908 SHAPE_FUN_MACRO_BEGIN;
1909 funValue[0] = 1.0 - gc[0] - gc[1];
1910 funValue[1] = gc[0];
1911 funValue[2] = gc[1];
1915 SHAPE_FUN_MACRO_END;
1919 * Init Pentahedron Reference coordinates and Shape function.
1922 void GaussInfo::penta15aInit()
1924 LOCAL_COORD_MACRO_BEGIN;
1926 coords[0] = PENTA15A_REF[0];
1927 coords[1] = PENTA15A_REF[1];
1928 coords[2] = PENTA15A_REF[2];
1931 coords[0] = PENTA15A_REF[3];
1932 coords[1] = PENTA15A_REF[4];
1933 coords[2] = PENTA15A_REF[5];
1936 coords[0] = PENTA15A_REF[6];
1937 coords[1] = PENTA15A_REF[7];
1938 coords[2] = PENTA15A_REF[8];
1941 coords[0] = PENTA15A_REF[9];
1942 coords[1] = PENTA15A_REF[10];
1943 coords[2] = PENTA15A_REF[11];
1946 coords[0] = PENTA15A_REF[12];
1947 coords[1] = PENTA15A_REF[13];
1948 coords[2] = PENTA15A_REF[14];
1951 coords[0] = PENTA15A_REF[15];
1952 coords[1] = PENTA15A_REF[16];
1953 coords[2] = PENTA15A_REF[17];
1956 coords[0] = PENTA15A_REF[18];
1957 coords[1] = PENTA15A_REF[19];
1958 coords[2] = PENTA15A_REF[20];
1961 coords[0] = PENTA15A_REF[21];
1962 coords[1] = PENTA15A_REF[22];
1963 coords[2] = PENTA15A_REF[23];
1966 coords[0] = PENTA15A_REF[24];
1967 coords[1] = PENTA15A_REF[25];
1968 coords[2] = PENTA15A_REF[26];
1971 coords[0] = PENTA15A_REF[27];
1972 coords[1] = PENTA15A_REF[28];
1973 coords[2] = PENTA15A_REF[29];
1976 coords[0] = PENTA15A_REF[30];
1977 coords[1] = PENTA15A_REF[31];
1978 coords[2] = PENTA15A_REF[32];
1981 coords[0] = PENTA15A_REF[33];
1982 coords[1] = PENTA15A_REF[34];
1983 coords[2] = PENTA15A_REF[35];
1986 coords[0] = PENTA15A_REF[36];
1987 coords[1] = PENTA15A_REF[37];
1988 coords[2] = PENTA15A_REF[38];
1991 coords[0] = PENTA15A_REF[39];
1992 coords[1] = PENTA15A_REF[40];
1993 coords[2] = PENTA15A_REF[41];
1996 coords[0] = PENTA15A_REF[42];
1997 coords[1] = PENTA15A_REF[43];
1998 coords[2] = PENTA15A_REF[44];
2000 LOCAL_COORD_MACRO_END;
2002 SHAPE_FUN_MACRO_BEGIN;
2003 funValue[0] = 0.5*gc[1]*(1.0 - gc[0])*(2.0*gc[1] - 2.0 - gc[0]);
2004 funValue[1] = 0.5*gc[2]*(1.0 - gc[0])*(2.0*gc[2] - 2.0 - gc[0]);
2005 funValue[2] = 0.5*(gc[0] - 1.0)*(1.0 - gc[1] - gc[2])*(gc[0] + 2.0*gc[1] + 2.0*gc[2]);
2007 funValue[3] = 0.5*gc[1]*(1.0 + gc[0])*(2.0*gc[1] - 2.0 + gc[0]);
2008 funValue[4] = 0.5*gc[2]*(1.0 + gc[0])*(2.0*gc[2] - 2.0 + gc[0]);
2009 funValue[5] = 0.5*(-gc[0] - 1.0)*(1.0 - gc[1] - gc[2])*(-gc[0] + 2.0*gc[1] + 2.0*gc[2]);
2011 funValue[6] = 2.0*gc[1]*gc[2]*(1.0 - gc[0]);
2012 funValue[7] = 2.0*gc[2]*(1.0 - gc[1] - gc[2])*(1.0 - gc[0]);
2013 funValue[8] = 2.0*gc[1]*(1.0 - gc[1] - gc[2])*(1.0 - gc[0]);
2015 funValue[9] = gc[1]*(1.0 - gc[0]*gc[0]);
2016 funValue[10] = gc[2]*(1.0 - gc[0]*gc[0]);
2017 funValue[11] = (1.0 - gc[1] - gc[2])*(1.0 - gc[0]*gc[0]);
2019 funValue[12] = 2.0*gc[1]*gc[2]*(1.0 + gc[0]);
2020 funValue[13] = 2.0*gc[2]*(1.0 - gc[1] - gc[2])*(1.0 + gc[0]);
2021 funValue[14] = 2.0*gc[1]*(1.0 - gc[1] - gc[2])*(1.0 + gc[0]);
2022 SHAPE_FUN_MACRO_END;
2026 * Init Qaudratic Pentahedron Reference coordinates and Shape function.
2029 void GaussInfo::penta15bInit()
2031 LOCAL_COORD_MACRO_BEGIN;
2033 coords[0] = PENTA15B_REF[0];
2034 coords[1] = PENTA15B_REF[1];
2035 coords[2] = PENTA15B_REF[2];
2038 coords[0] = PENTA15B_REF[3];
2039 coords[1] = PENTA15B_REF[4];
2040 coords[2] = PENTA15B_REF[5];
2043 coords[0] = PENTA15B_REF[6];
2044 coords[1] = PENTA15B_REF[7];
2045 coords[2] = PENTA15B_REF[8];
2048 coords[0] = PENTA15B_REF[9];
2049 coords[1] = PENTA15B_REF[10];
2050 coords[2] = PENTA15B_REF[11];
2053 coords[0] = PENTA15B_REF[12];
2054 coords[1] = PENTA15B_REF[13];
2055 coords[2] = PENTA15B_REF[14];
2058 coords[0] = PENTA15B_REF[15];
2059 coords[1] = PENTA15B_REF[16];
2060 coords[2] = PENTA15B_REF[17];
2063 coords[0] = PENTA15B_REF[18];
2064 coords[1] = PENTA15B_REF[19];
2065 coords[2] = PENTA15B_REF[20];
2068 coords[0] = PENTA15B_REF[21];
2069 coords[1] = PENTA15B_REF[22];
2070 coords[2] = PENTA15B_REF[23];
2073 coords[0] = PENTA15B_REF[24];
2074 coords[1] = PENTA15B_REF[25];
2075 coords[2] = PENTA15B_REF[26];
2078 coords[0] = PENTA15B_REF[27];
2079 coords[1] = PENTA15B_REF[28];
2080 coords[2] = PENTA15B_REF[29];
2083 coords[0] = PENTA15B_REF[30];
2084 coords[1] = PENTA15B_REF[31];
2085 coords[2] = PENTA15B_REF[32];
2088 coords[0] = PENTA15B_REF[33];
2089 coords[1] = PENTA15B_REF[34];
2090 coords[2] = PENTA15B_REF[35];
2093 coords[0] = PENTA15B_REF[36];
2094 coords[1] = PENTA15B_REF[37];
2095 coords[2] = PENTA15B_REF[38];
2098 coords[0] = PENTA15B_REF[39];
2099 coords[1] = PENTA15B_REF[40];
2100 coords[2] = PENTA15B_REF[41];
2103 coords[0] = PENTA15B_REF[42];
2104 coords[1] = PENTA15B_REF[43];
2105 coords[2] = PENTA15B_REF[44];
2107 LOCAL_COORD_MACRO_END;
2109 SHAPE_FUN_MACRO_BEGIN;
2110 funValue[0] = 0.5*gc[1]*(1.0 - gc[0])*(2.0*gc[1] - 2.0 - gc[0]);
2111 funValue[2] = 0.5*gc[2]*(1.0 - gc[0])*(2.0*gc[2] - 2.0 - gc[0]);
2112 funValue[1] = 0.5*(gc[0] - 1.0)*(1.0 - gc[1] - gc[2])*(gc[0] + 2.0*gc[1] + 2.0*gc[2]);
2114 funValue[3] = 0.5*gc[1]*(1.0 + gc[0])*(2.0*gc[1] - 2.0 + gc[0]);
2115 funValue[5] = 0.5*gc[2]*(1.0 + gc[0])*(2.0*gc[2] - 2.0 + gc[0]);
2116 funValue[4] = 0.5*(-gc[0] - 1.0)*(1.0 - gc[1] - gc[2])*(-gc[0] + 2.0*gc[1] + 2.0*gc[2]);
2118 funValue[8] = 2.0*gc[1]*gc[2]*(1.0 - gc[0]);
2119 funValue[7] = 2.0*gc[2]*(1.0 - gc[1] - gc[2])*(1.0 - gc[0]);
2120 funValue[6] = 2.0*gc[1]*(1.0 - gc[1] - gc[2])*(1.0 - gc[0]);
2122 funValue[12] = gc[1]*(1.0 - gc[0]*gc[0]);
2123 funValue[14] = gc[2]*(1.0 - gc[0]*gc[0]);
2124 funValue[13] = (1.0 - gc[1] - gc[2])*(1.0 - gc[0]*gc[0]);
2126 funValue[11] = 2.0*gc[1]*gc[2]*(1.0 + gc[0]);
2127 funValue[10] = 2.0*gc[2]*(1.0 - gc[1] - gc[2])*(1.0 + gc[0]);
2128 funValue[9] = 2.0*gc[1]*(1.0 - gc[1] - gc[2])*(1.0 + gc[0]);
2129 SHAPE_FUN_MACRO_END;
2133 * Init Hehahedron Reference coordinates and Shape function.
2136 void GaussInfo::hexa8aInit()
2138 LOCAL_COORD_MACRO_BEGIN;
2140 coords[0] = HEXA8A_REF[0];
2141 coords[1] = HEXA8A_REF[1];
2142 coords[2] = HEXA8A_REF[2];
2145 coords[0] = HEXA8A_REF[3];
2146 coords[1] = HEXA8A_REF[4];
2147 coords[2] = HEXA8A_REF[5];
2150 coords[0] = HEXA8A_REF[6];
2151 coords[1] = HEXA8A_REF[7];
2152 coords[2] = HEXA8A_REF[8];
2155 coords[0] = HEXA8A_REF[9];
2156 coords[1] = HEXA8A_REF[10];
2157 coords[2] = HEXA8A_REF[11];
2160 coords[0] = HEXA8A_REF[12];
2161 coords[1] = HEXA8A_REF[13];
2162 coords[2] = HEXA8A_REF[14];
2165 coords[0] = HEXA8A_REF[15];
2166 coords[1] = HEXA8A_REF[16];
2167 coords[2] = HEXA8A_REF[17];
2170 coords[0] = HEXA8A_REF[18];
2171 coords[1] = HEXA8A_REF[19];
2172 coords[2] = HEXA8A_REF[20];
2175 coords[0] = HEXA8A_REF[21];
2176 coords[1] = HEXA8A_REF[22];
2177 coords[2] = HEXA8A_REF[23];
2179 LOCAL_COORD_MACRO_END;
2181 SHAPE_FUN_MACRO_BEGIN;
2182 funValue[0] = 0.125*(1.0 - gc[0])*(1.0 - gc[1])*(1.0 - gc[2]);
2183 funValue[1] = 0.125*(1.0 + gc[0])*(1.0 - gc[1])*(1.0 - gc[2]);
2184 funValue[2] = 0.125*(1.0 + gc[0])*(1.0 + gc[1])*(1.0 - gc[2]);
2185 funValue[3] = 0.125*(1.0 - gc[0])*(1.0 + gc[1])*(1.0 - gc[2]);
2187 funValue[4] = 0.125*(1.0 - gc[0])*(1.0 - gc[1])*(1.0 + gc[2]);
2188 funValue[5] = 0.125*(1.0 + gc[0])*(1.0 - gc[1])*(1.0 + gc[2]);
2189 funValue[6] = 0.125*(1.0 + gc[0])*(1.0 + gc[1])*(1.0 + gc[2]);
2190 funValue[7] = 0.125*(1.0 - gc[0])*(1.0 + gc[1])*(1.0 + gc[2]);
2191 SHAPE_FUN_MACRO_END;
2195 * Init Hehahedron Reference coordinates and Shape function.
2198 void GaussInfo::hexa8bInit()
2200 LOCAL_COORD_MACRO_BEGIN;
2202 coords[0] = HEXA8B_REF[0];
2203 coords[1] = HEXA8B_REF[1];
2204 coords[2] = HEXA8B_REF[2];
2207 coords[0] = HEXA8B_REF[3];
2208 coords[1] = HEXA8B_REF[4];
2209 coords[2] = HEXA8B_REF[5];
2212 coords[0] = HEXA8B_REF[6];
2213 coords[1] = HEXA8B_REF[7];
2214 coords[2] = HEXA8B_REF[8];
2217 coords[0] = HEXA8B_REF[9];
2218 coords[1] = HEXA8B_REF[10];
2219 coords[2] = HEXA8B_REF[11];
2222 coords[0] = HEXA8B_REF[12];
2223 coords[1] = HEXA8B_REF[13];
2224 coords[2] = HEXA8B_REF[14];
2227 coords[0] = HEXA8B_REF[15];
2228 coords[1] = HEXA8B_REF[16];
2229 coords[2] = HEXA8B_REF[17];
2232 coords[0] = HEXA8B_REF[18];
2233 coords[1] = HEXA8B_REF[19];
2234 coords[2] = HEXA8B_REF[20];
2237 coords[0] = HEXA8B_REF[21];
2238 coords[1] = HEXA8B_REF[22];
2239 coords[2] = HEXA8B_REF[23];
2241 LOCAL_COORD_MACRO_END;
2243 SHAPE_FUN_MACRO_BEGIN;
2244 funValue[0] = 0.125*(1.0 - gc[0])*(1.0 - gc[1])*(1.0 - gc[2]);
2245 funValue[3] = 0.125*(1.0 + gc[0])*(1.0 - gc[1])*(1.0 - gc[2]);
2246 funValue[2] = 0.125*(1.0 + gc[0])*(1.0 + gc[1])*(1.0 - gc[2]);
2247 funValue[1] = 0.125*(1.0 - gc[0])*(1.0 + gc[1])*(1.0 - gc[2]);
2249 funValue[4] = 0.125*(1.0 - gc[0])*(1.0 - gc[1])*(1.0 + gc[2]);
2250 funValue[7] = 0.125*(1.0 + gc[0])*(1.0 - gc[1])*(1.0 + gc[2]);
2251 funValue[6] = 0.125*(1.0 + gc[0])*(1.0 + gc[1])*(1.0 + gc[2]);
2252 funValue[5] = 0.125*(1.0 - gc[0])*(1.0 + gc[1])*(1.0 + gc[2]);
2253 SHAPE_FUN_MACRO_END;
2257 * This shapefunc map is same as degenerated quad4bInit
2259 void GaussInfo::hexa8DegQuad4aInit()
2261 LOCAL_COORD_MACRO_BEGIN;
2302 LOCAL_COORD_MACRO_END;
2304 SHAPE_FUN_MACRO_BEGIN;
2305 funValue[0] = 0.25*(1.0 + gc[1])*(1.0 - gc[0]);
2306 funValue[1] = 0.25*(1.0 - gc[1])*(1.0 - gc[0]);
2307 funValue[2] = 0.25*(1.0 - gc[1])*(1.0 + gc[0]);
2308 funValue[3] = 0.25*(1.0 + gc[0])*(1.0 + gc[1]);
2313 SHAPE_FUN_MACRO_END;
2317 * This shapefunc map is same as degenerated quad4bInit
2319 void GaussInfo::hexa8DegQuad4bInit()
2321 LOCAL_COORD_MACRO_BEGIN;
2362 LOCAL_COORD_MACRO_END;
2364 SHAPE_FUN_MACRO_BEGIN;
2365 funValue[0] = 0.25*(1.0 - gc[0])*(1.0 - gc[1]);
2366 funValue[1] = 0.25*(1.0 + gc[0])*(1.0 - gc[1]);
2367 funValue[2] = 0.25*(1.0 + gc[0])*(1.0 + gc[1]);
2368 funValue[3] = 0.25*(1.0 - gc[0])*(1.0 + gc[1]);
2373 SHAPE_FUN_MACRO_END;
2377 * This shapefunc map is same as degenerated quad4cInit
2379 void GaussInfo::hexa8DegQuad4cInit()
2381 LOCAL_COORD_MACRO_BEGIN;
2423 LOCAL_COORD_MACRO_END;
2425 SHAPE_FUN_MACRO_BEGIN;
2426 funValue[0] = 0.25*(1.0 - gc[0])*(1.0 - gc[1]);
2427 funValue[1] = 0.25*(1.0 - gc[0])*(1.0 + gc[1]);
2428 funValue[2] = 0.25*(1.0 + gc[0])*(1.0 + gc[1]);
2429 funValue[3] = 0.25*(1.0 + gc[0])*(1.0 - gc[1]);
2434 SHAPE_FUN_MACRO_END;
2438 * Init Qaudratic Hehahedron Reference coordinates and Shape function.
2441 void GaussInfo::hexa20aInit()
2443 LOCAL_COORD_MACRO_BEGIN;
2445 coords[0] = HEXA20A_REF[0];
2446 coords[1] = HEXA20A_REF[1];
2447 coords[2] = HEXA20A_REF[2];
2450 coords[0] = HEXA20A_REF[3];
2451 coords[1] = HEXA20A_REF[4];
2452 coords[2] = HEXA20A_REF[5];
2455 coords[0] = HEXA20A_REF[6];
2456 coords[1] = HEXA20A_REF[7];
2457 coords[2] = HEXA20A_REF[8];
2460 coords[0] = HEXA20A_REF[9];
2461 coords[1] = HEXA20A_REF[10];
2462 coords[2] = HEXA20A_REF[11];
2465 coords[0] = HEXA20A_REF[12];
2466 coords[1] = HEXA20A_REF[13];
2467 coords[2] = HEXA20A_REF[14];
2470 coords[0] = HEXA20A_REF[15];
2471 coords[1] = HEXA20A_REF[16];
2472 coords[2] = HEXA20A_REF[17];
2475 coords[0] = HEXA20A_REF[18];
2476 coords[1] = HEXA20A_REF[19];
2477 coords[2] = HEXA20A_REF[20];
2480 coords[0] = HEXA20A_REF[21];
2481 coords[1] = HEXA20A_REF[22];
2482 coords[2] = HEXA20A_REF[23];
2485 coords[0] = HEXA20A_REF[24];
2486 coords[1] = HEXA20A_REF[25];
2487 coords[2] = HEXA20A_REF[26];
2490 coords[0] = HEXA20A_REF[27];
2491 coords[1] = HEXA20A_REF[28];
2492 coords[2] = HEXA20A_REF[29];
2495 coords[0] = HEXA20A_REF[30];
2496 coords[1] = HEXA20A_REF[31];
2497 coords[2] = HEXA20A_REF[32];
2500 coords[0] = HEXA20A_REF[33];
2501 coords[1] = HEXA20A_REF[34];
2502 coords[2] = HEXA20A_REF[35];
2505 coords[0] = HEXA20A_REF[36];
2506 coords[1] = HEXA20A_REF[37];
2507 coords[2] = HEXA20A_REF[38];
2510 coords[0] = HEXA20A_REF[39];
2511 coords[1] = HEXA20A_REF[40];
2512 coords[2] = HEXA20A_REF[41];
2515 coords[0] = HEXA20A_REF[42];
2516 coords[1] = HEXA20A_REF[43];
2517 coords[2] = HEXA20A_REF[44];
2520 coords[0] = HEXA20A_REF[45];
2521 coords[1] = HEXA20A_REF[46];
2522 coords[2] = HEXA20A_REF[47];
2525 coords[0] = HEXA20A_REF[48];
2526 coords[1] = HEXA20A_REF[49];
2527 coords[2] = HEXA20A_REF[50];
2530 coords[0] = HEXA20A_REF[51];
2531 coords[1] = HEXA20A_REF[52];
2532 coords[2] = HEXA20A_REF[53];
2535 coords[0] = HEXA20A_REF[54];
2536 coords[1] = HEXA20A_REF[55];
2537 coords[2] = HEXA20A_REF[56];
2540 coords[0] = HEXA20A_REF[57];
2541 coords[1] = HEXA20A_REF[58];
2542 coords[2] = HEXA20A_REF[59];
2544 LOCAL_COORD_MACRO_END;
2546 SHAPE_FUN_MACRO_BEGIN;
2547 funValue[0] = 0.125*(1.0 - gc[0])*(1.0 - gc[1])*(1.0 - gc[2])*
2548 (-2.0 - gc[0] - gc[1] - gc[2]);
2549 funValue[1] = 0.125*(1.0 + gc[0])*(1.0 - gc[1])*(1.0 - gc[2])*
2550 (-2.0 + gc[0] - gc[1] - gc[2]);
2551 funValue[2] = 0.125*(1.0 + gc[0])*(1.0 + gc[1])*(1.0 - gc[2])*
2552 (-2.0 + gc[0] + gc[1] - gc[2]);
2553 funValue[3] = 0.125*(1.0 - gc[0])*(1.0 + gc[1])*(1.0 - gc[2])*
2554 (-2.0 - gc[0] + gc[1] - gc[2]);
2555 funValue[4] = 0.125*(1.0 - gc[0])*(1.0 - gc[1])*(1.0 + gc[2])*
2556 (-2.0 - gc[0] - gc[1] + gc[2]);
2557 funValue[5] = 0.125*(1.0 + gc[0])*(1.0 - gc[1])*(1.0 + gc[2])*
2558 (-2.0 + gc[0] - gc[1] + gc[2]);
2559 funValue[6] = 0.125*(1.0 + gc[0])*(1.0 + gc[1])*(1.0 + gc[2])*
2560 (-2.0 + gc[0] + gc[1] + gc[2]);
2561 funValue[7] = 0.125*(1.0 - gc[0])*(1.0 + gc[1])*(1.0 + gc[2])*
2562 (-2.0 - gc[0] + gc[1] + gc[2]);
2564 funValue[8] = 0.25*(1.0 - gc[0]*gc[0])*(1.0 - gc[1])*(1.0 - gc[2]);
2565 funValue[9] = 0.25*(1.0 - gc[1]*gc[1])*(1.0 + gc[0])*(1.0 - gc[2]);
2566 funValue[10] = 0.25*(1.0 - gc[0]*gc[0])*(1.0 + gc[1])*(1.0 - gc[2]);
2567 funValue[11] = 0.25*(1.0 - gc[1]*gc[1])*(1.0 - gc[0])*(1.0 - gc[2]);
2568 funValue[12] = 0.25*(1.0 - gc[2]*gc[2])*(1.0 - gc[0])*(1.0 - gc[1]);
2569 funValue[13] = 0.25*(1.0 - gc[2]*gc[2])*(1.0 + gc[0])*(1.0 - gc[1]);
2570 funValue[14] = 0.25*(1.0 - gc[2]*gc[2])*(1.0 + gc[0])*(1.0 + gc[1]);
2571 funValue[15] = 0.25*(1.0 - gc[2]*gc[2])*(1.0 - gc[0])*(1.0 + gc[1]);
2572 funValue[16] = 0.25*(1.0 - gc[0]*gc[0])*(1.0 - gc[1])*(1.0 + gc[2]);
2573 funValue[17] = 0.25*(1.0 - gc[1]*gc[1])*(1.0 + gc[0])*(1.0 + gc[2]);
2574 funValue[18] = 0.25*(1.0 - gc[0]*gc[0])*(1.0 + gc[1])*(1.0 + gc[2]);
2575 funValue[19] = 0.25*(1.0 - gc[1]*gc[1])*(1.0 - gc[0])*(1.0 + gc[2]);
2576 SHAPE_FUN_MACRO_END;
2580 * Init Qaudratic Hehahedron Reference coordinates and Shape function.
2583 void GaussInfo::hexa20bInit()
2585 LOCAL_COORD_MACRO_BEGIN;
2587 coords[0] = HEXA20B_REF[0];
2588 coords[1] = HEXA20B_REF[1];
2589 coords[2] = HEXA20B_REF[2];
2592 coords[0] = HEXA20B_REF[3];
2593 coords[1] = HEXA20B_REF[4];
2594 coords[2] = HEXA20B_REF[5];
2597 coords[0] = HEXA20B_REF[6];
2598 coords[1] = HEXA20B_REF[7];
2599 coords[2] = HEXA20B_REF[8];
2602 coords[0] = HEXA20B_REF[9];
2603 coords[1] = HEXA20B_REF[10];
2604 coords[2] = HEXA20B_REF[11];
2607 coords[0] = HEXA20B_REF[12];
2608 coords[1] = HEXA20B_REF[13];
2609 coords[2] = HEXA20B_REF[14];
2612 coords[0] = HEXA20B_REF[15];
2613 coords[1] = HEXA20B_REF[16];
2614 coords[2] = HEXA20B_REF[17];
2617 coords[0] = HEXA20B_REF[18];
2618 coords[1] = HEXA20B_REF[19];
2619 coords[2] = HEXA20B_REF[20];
2622 coords[0] = HEXA20B_REF[21];
2623 coords[1] = HEXA20B_REF[22];
2624 coords[2] = HEXA20B_REF[23];
2627 coords[0] = HEXA20B_REF[24];
2628 coords[1] = HEXA20B_REF[25];
2629 coords[2] = HEXA20B_REF[26];
2632 coords[0] = HEXA20B_REF[27];
2633 coords[1] = HEXA20B_REF[28];
2634 coords[2] = HEXA20B_REF[29];
2637 coords[0] = HEXA20B_REF[30];
2638 coords[1] = HEXA20B_REF[31];
2639 coords[2] = HEXA20B_REF[32];
2642 coords[0] = HEXA20B_REF[33];
2643 coords[1] = HEXA20B_REF[34];
2644 coords[2] = HEXA20B_REF[35];
2647 coords[0] = HEXA20B_REF[36];
2648 coords[1] = HEXA20B_REF[37];
2649 coords[2] = HEXA20B_REF[38];
2652 coords[0] = HEXA20B_REF[39];
2653 coords[1] = HEXA20B_REF[40];
2654 coords[2] = HEXA20B_REF[41];
2657 coords[0] = HEXA20B_REF[42];
2658 coords[1] = HEXA20B_REF[43];
2659 coords[2] = HEXA20B_REF[44];
2662 coords[0] = HEXA20B_REF[45];
2663 coords[1] = HEXA20B_REF[46];
2664 coords[2] = HEXA20B_REF[47];
2667 coords[0] = HEXA20B_REF[48];
2668 coords[1] = HEXA20B_REF[49];
2669 coords[2] = HEXA20B_REF[50];
2672 coords[0] = HEXA20B_REF[51];
2673 coords[1] = HEXA20B_REF[52];
2674 coords[2] = HEXA20B_REF[53];
2677 coords[0] = HEXA20B_REF[54];
2678 coords[1] = HEXA20B_REF[55];
2679 coords[2] = HEXA20B_REF[56];
2682 coords[0] = HEXA20B_REF[57];
2683 coords[1] = HEXA20B_REF[58];
2684 coords[2] = HEXA20B_REF[59];
2686 LOCAL_COORD_MACRO_END;
2688 SHAPE_FUN_MACRO_BEGIN;
2690 funValue[0] = 0.125*(1.0 - gc[0])*(1.0 - gc[1])*(1.0 - gc[2])*
2691 (-2.0 - gc[0] - gc[1] - gc[2]);
2692 funValue[3] = 0.125*(1.0 + gc[0])*(1.0 - gc[1])*(1.0 - gc[2])*
2693 (-2.0 + gc[0] - gc[1] - gc[2]);
2694 funValue[2] = 0.125*(1.0 + gc[0])*(1.0 + gc[1])*(1.0 - gc[2])*
2695 (-2.0 + gc[0] + gc[1] - gc[2]);
2696 funValue[1] = 0.125*(1.0 - gc[0])*(1.0 + gc[1])*(1.0 - gc[2])*
2697 (-2.0 - gc[0] + gc[1] - gc[2]);
2698 funValue[4] = 0.125*(1.0 - gc[0])*(1.0 - gc[1])*(1.0 + gc[2])*
2699 (-2.0 - gc[0] - gc[1] + gc[2]);
2700 funValue[7] = 0.125*(1.0 + gc[0])*(1.0 - gc[1])*(1.0 + gc[2])*
2701 (-2.0 + gc[0] - gc[1] + gc[2]);
2702 funValue[6] = 0.125*(1.0 + gc[0])*(1.0 + gc[1])*(1.0 + gc[2])*
2703 (-2.0 + gc[0] + gc[1] + gc[2]);
2704 funValue[5] = 0.125*(1.0 - gc[0])*(1.0 + gc[1])*(1.0 + gc[2])*
2705 (-2.0 - gc[0] + gc[1] + gc[2]);
2707 funValue[11] = 0.25*(1.0 - gc[0]*gc[0])*(1.0 - gc[1])*(1.0 - gc[2]);
2708 funValue[10] = 0.25*(1.0 - gc[1]*gc[1])*(1.0 + gc[0])*(1.0 - gc[2]);
2709 funValue[9] = 0.25*(1.0 - gc[0]*gc[0])*(1.0 + gc[1])*(1.0 - gc[2]);
2710 funValue[8] = 0.25*(1.0 - gc[1]*gc[1])*(1.0 - gc[0])*(1.0 - gc[2]);
2711 funValue[16] = 0.25*(1.0 - gc[2]*gc[2])*(1.0 - gc[0])*(1.0 - gc[1]);
2712 funValue[19] = 0.25*(1.0 - gc[2]*gc[2])*(1.0 + gc[0])*(1.0 - gc[1]);
2713 funValue[18] = 0.25*(1.0 - gc[2]*gc[2])*(1.0 + gc[0])*(1.0 + gc[1]);
2714 funValue[17] = 0.25*(1.0 - gc[2]*gc[2])*(1.0 - gc[0])*(1.0 + gc[1]);
2715 funValue[15] = 0.25*(1.0 - gc[0]*gc[0])*(1.0 - gc[1])*(1.0 + gc[2]);
2716 funValue[14] = 0.25*(1.0 - gc[1]*gc[1])*(1.0 + gc[0])*(1.0 + gc[2]);
2717 funValue[13] = 0.25*(1.0 - gc[0]*gc[0])*(1.0 + gc[1])*(1.0 + gc[2]);
2718 funValue[12] = 0.25*(1.0 - gc[1]*gc[1])*(1.0 - gc[0])*(1.0 + gc[2]);
2719 SHAPE_FUN_MACRO_END;
2722 void GaussInfo::hexa27aInit()
2724 LOCAL_COORD_MACRO_BEGIN;
2726 coords[0] = HEXA27A_REF[0];
2727 coords[1] = HEXA27A_REF[1];
2728 coords[2] = HEXA27A_REF[2];
2731 coords[0] = HEXA27A_REF[3];
2732 coords[1] = HEXA27A_REF[4];
2733 coords[2] = HEXA27A_REF[5];
2736 coords[0] = HEXA27A_REF[6];
2737 coords[1] = HEXA27A_REF[7];
2738 coords[2] = HEXA27A_REF[8];
2741 coords[0] = HEXA27A_REF[9];
2742 coords[1] = HEXA27A_REF[10];
2743 coords[2] = HEXA27A_REF[11];
2746 coords[0] = HEXA27A_REF[12];
2747 coords[1] = HEXA27A_REF[13];
2748 coords[2] = HEXA27A_REF[14];
2751 coords[0] = HEXA27A_REF[15];
2752 coords[1] = HEXA27A_REF[16];
2753 coords[2] = HEXA27A_REF[17];
2756 coords[0] = HEXA27A_REF[18];
2757 coords[1] = HEXA27A_REF[19];
2758 coords[2] = HEXA27A_REF[20];
2761 coords[0] = HEXA27A_REF[21];
2762 coords[1] = HEXA27A_REF[22];
2763 coords[2] = HEXA27A_REF[23];
2766 coords[0] = HEXA27A_REF[24];
2767 coords[1] = HEXA27A_REF[25];
2768 coords[2] = HEXA27A_REF[26];
2771 coords[0] = HEXA27A_REF[27];
2772 coords[1] = HEXA27A_REF[28];
2773 coords[2] = HEXA27A_REF[29];
2776 coords[0] = HEXA27A_REF[30];
2777 coords[1] = HEXA27A_REF[31];
2778 coords[2] = HEXA27A_REF[32];
2781 coords[0] = HEXA27A_REF[33];
2782 coords[1] = HEXA27A_REF[34];
2783 coords[2] = HEXA27A_REF[35];
2786 coords[0] = HEXA27A_REF[36];
2787 coords[1] = HEXA27A_REF[37];
2788 coords[2] = HEXA27A_REF[38];
2791 coords[0] = HEXA27A_REF[39];
2792 coords[1] = HEXA27A_REF[40];
2793 coords[2] = HEXA27A_REF[41];
2796 coords[0] = HEXA27A_REF[42];
2797 coords[1] = HEXA27A_REF[43];
2798 coords[2] = HEXA27A_REF[44];
2801 coords[0] = HEXA27A_REF[45];
2802 coords[1] = HEXA27A_REF[46];
2803 coords[2] = HEXA27A_REF[47];
2806 coords[0] = HEXA27A_REF[48];
2807 coords[1] = HEXA27A_REF[49];
2808 coords[2] = HEXA27A_REF[50];
2811 coords[0] = HEXA27A_REF[51];
2812 coords[1] = HEXA27A_REF[52];
2813 coords[2] = HEXA27A_REF[53];
2816 coords[0] = HEXA27A_REF[54];
2817 coords[1] = HEXA27A_REF[55];
2818 coords[2] = HEXA27A_REF[56];
2821 coords[0] = HEXA27A_REF[57];
2822 coords[1] = HEXA27A_REF[58];
2823 coords[2] = HEXA27A_REF[59];
2826 coords[0] = HEXA27A_REF[60];
2827 coords[1] = HEXA27A_REF[61];
2828 coords[2] = HEXA27A_REF[62];
2831 coords[0] = HEXA27A_REF[63];
2832 coords[1] = HEXA27A_REF[64];
2833 coords[2] = HEXA27A_REF[65];
2836 coords[0] = HEXA27A_REF[66];
2837 coords[1] = HEXA27A_REF[67];
2838 coords[2] = HEXA27A_REF[68];
2841 coords[0] = HEXA27A_REF[69];
2842 coords[1] = HEXA27A_REF[70];
2843 coords[2] = HEXA27A_REF[71];
2846 coords[0] = HEXA27A_REF[72];
2847 coords[1] = HEXA27A_REF[73];
2848 coords[2] = HEXA27A_REF[74];
2851 coords[0] = HEXA27A_REF[75];
2852 coords[1] = HEXA27A_REF[76];
2853 coords[2] = HEXA27A_REF[77];
2856 coords[0] = HEXA27A_REF[78];
2857 coords[1] = HEXA27A_REF[79];
2858 coords[2] = HEXA27A_REF[80];
2860 LOCAL_COORD_MACRO_END;
2862 SHAPE_FUN_MACRO_BEGIN;
2864 funValue[0] =0.125*gc[0]*(gc[0]-1.)*gc[1]*(gc[1]-1.)*gc[2]*(gc[2]-1.);
2865 funValue[1] =0.125*gc[0]*(gc[0]-1.)*gc[1]*(gc[1]+1.)*gc[2]*(gc[2]-1.);
2866 funValue[2] =0.125*gc[0]*(gc[0]+1.)*gc[1]*(gc[1]+1.)*gc[2]*(gc[2]-1.);
2867 funValue[3] =0.125*gc[0]*(gc[0]+1.)*gc[1]*(gc[1]-1.)*gc[2]*(gc[2]-1.);
2868 funValue[4] =0.125*gc[0]*(gc[0]-1.)*gc[1]*(gc[1]-1.)*gc[2]*(gc[2]+1.);
2869 funValue[5] =0.125*gc[0]*(gc[0]-1.)*gc[1]*(gc[1]+1.)*gc[2]*(gc[2]+1.);
2870 funValue[6] =0.125*gc[0]*(gc[0]+1.)*gc[1]*(gc[1]+1.)*gc[2]*(gc[2]+1.);
2871 funValue[7] =0.125*gc[0]*(gc[0]+1.)*gc[1]*(gc[1]-1.)*gc[2]*(gc[2]+1.);
2872 funValue[8] =0.25*gc[0]*(gc[0]-1.)*(1.-gc[1]*gc[1])*gc[2]*(gc[2]-1.);
2873 funValue[9] =0.25*(1.-gc[0]*gc[0])*gc[1]*(gc[1]+1.)*gc[2]*(gc[2]-1.);
2874 funValue[10]=0.25*gc[0]*(gc[0]+1.)*(1.-gc[1]*gc[1])*gc[2]*(gc[2]-1.);
2875 funValue[11]=0.25*(1.-gc[0]*gc[0])*gc[1]*(gc[1]-1.)*gc[2]*(gc[2]-1.);
2876 funValue[12]=0.25*gc[0]*(gc[0]-1.)*(1.-gc[1]*gc[1])*gc[2]*(gc[2]+1.);
2877 funValue[13]=0.25*(1.-gc[0]*gc[0])*gc[1]*(gc[1]+1.)*gc[2]*(gc[2]+1.);
2878 funValue[14]=0.25*gc[0]*(gc[0]+1.)*(1.-gc[1]*gc[1])*gc[2]*(gc[2]+1.);
2879 funValue[15]=0.25*(1.-gc[0]*gc[0])*gc[1]*(gc[1]-1.)*gc[2]*(gc[2]+1.);
2880 funValue[16]=0.25*gc[0]*(gc[0]-1.)*gc[1]*(gc[1]-1.)*(1.-gc[2]*gc[2]);
2881 funValue[17]=0.25*gc[0]*(gc[0]-1.)*gc[1]*(gc[1]+1.)*(1.-gc[2]*gc[2]);
2882 funValue[18]=0.25*gc[0]*(gc[0]+1.)*gc[1]*(gc[1]+1.)*(1.-gc[2]*gc[2]);
2883 funValue[19]=0.25*gc[0]*(gc[0]+1.)*gc[1]*(gc[1]-1.)*(1.-gc[2]*gc[2]);
2884 funValue[20]=0.5*(1.-gc[0]*gc[0])*(1.-gc[1]*gc[1])*gc[2]*(gc[2]-1.);
2885 funValue[21]=0.5*gc[0]*(gc[0]-1.)*(1.-gc[1]*gc[1])*(1.-gc[2]*gc[2]);
2886 funValue[22]=0.5*(1.-gc[0]*gc[0])*gc[1]*(gc[1]+1.)*(1.-gc[2]*gc[2]);
2887 funValue[23]=0.5*gc[0]*(gc[0]+1.)*(1.-gc[1]*gc[1])*(1.-gc[2]*gc[2]);
2888 funValue[24]=0.5*(1.-gc[0]*gc[0])*gc[1]*(gc[1]-1.)*(1.-gc[2]*gc[2]);
2889 funValue[25]=0.5*(1.-gc[0]*gc[0])*(1.-gc[1]*gc[1])*gc[2]*(gc[2]+1.);
2890 funValue[26]=(1.-gc[0]*gc[0])*(1.-gc[1]*gc[1])*(1.-gc[2]*gc[2]);
2892 SHAPE_FUN_MACRO_END;
2895 ////////////////////////////////////////////////////////////////////////////////////////////////
2896 // GAUSS COORD CLASS //
2897 ////////////////////////////////////////////////////////////////////////////////////////////////
2901 GaussCoords::GaussCoords()
2908 GaussCoords::~GaussCoords()
2910 GaussInfoVector::iterator it = _my_gauss_info.begin();
2911 for( ; it != _my_gauss_info.end(); it++ )
2919 * Add Gauss localization info
2921 void GaussCoords::addGaussInfo( NormalizedCellType theGeometry,
2923 const double* theGaussCoord,
2925 const double* theReferenceCoord,
2928 GaussInfoVector::iterator it = _my_gauss_info.begin();
2929 for( ; it != _my_gauss_info.end(); it++ )
2931 if( (*it)->getCellType() == theGeometry )
2937 DataVector aGaussCoord;
2938 for(int i = 0 ; i < theNbGauss*coordDim; i++ )
2939 aGaussCoord.push_back(theGaussCoord[i]);
2941 DataVector aReferenceCoord;
2942 for(int i = 0 ; i < theNbRef*coordDim; i++ )
2943 aReferenceCoord.push_back(theReferenceCoord[i]);
2946 GaussInfo* info = new GaussInfo( theGeometry, aGaussCoord, theNbGauss, aReferenceCoord, theNbRef);
2947 info->initLocalInfo();
2949 //If info with cell type doesn't exist add it
2950 if( it == _my_gauss_info.end() )
2952 _my_gauss_info.push_back(info);
2954 // If information exists, update it
2958 int index = std::distance(_my_gauss_info.begin(),it);
2960 _my_gauss_info[index] = info;
2966 * Calculate gauss points coordinates
2968 double* GaussCoords::calculateCoords( NormalizedCellType theGeometry,
2969 const double *theNodeCoords,
2970 const int theSpaceDim,
2971 const int *theIndex)
2973 const GaussInfo *info = getInfoGivenCellType(theGeometry);
2974 int nbCoords = theSpaceDim * info->getNbGauss();
2975 double *aCoords = new double[nbCoords];
2976 calculateCoordsAlg(info,theNodeCoords,theSpaceDim,theIndex,aCoords);
2981 void GaussCoords::calculateCoords( NormalizedCellType theGeometry, const double *theNodeCoords, const int theSpaceDim, const int *theIndex, double *result)
2983 const GaussInfo *info = getInfoGivenCellType(theGeometry);
2984 calculateCoordsAlg(info,theNodeCoords,theSpaceDim,theIndex,result);
2987 void GaussCoords::calculateCoordsAlg(const GaussInfo *info, const double* theNodeCoords, const int theSpaceDim, const int *theIndex, double *result)
2989 int aConn = info->getNbRef();
2991 int nbCoords = theSpaceDim * info->getNbGauss();
2992 std::fill(result,result+nbCoords,0.);
2994 for( int gaussId = 0; gaussId < info->getNbGauss(); gaussId++ )
2996 double *coord=result+gaussId*theSpaceDim;
2997 const double *function=info->getFunctionValues(gaussId);
2998 for ( int connId = 0; connId < aConn ; connId++ )
3000 const double* nodeCoord = theNodeCoords + (theIndex[connId]*theSpaceDim);
3001 for( int dimId = 0; dimId < theSpaceDim; dimId++ )
3002 coord[dimId] += nodeCoord[dimId]*function[connId];
3007 const GaussInfo *GaussCoords::getInfoGivenCellType(NormalizedCellType cellType)
3009 GaussInfoVector::const_iterator it = _my_gauss_info.begin();
3010 //Try to find gauss localization info
3011 for( ; it != _my_gauss_info.end() ; it++ )
3012 if( (*it)->getCellType()==cellType)
3014 throw INTERP_KERNEL::Exception("Can't find gauss localization information !");