1 // Copyright (C) 2007-2022 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"
30 using namespace INTERP_KERNEL;
32 const double GaussInfo::SEG2A_REF[2]={-1.0, 1.0};
34 const double GaussInfo::SEG2B_REF[2]={0., 1.0};
36 const double GaussInfo::SEG3_REF[3]={-1.0, 1.0, 0.0};
38 const double GaussInfo::TRIA3A_REF[6]={-1.0, 1.0, -1.0, -1.0, 1.0, -1.0};
40 const double GaussInfo::TRIA3B_REF[6]={0.0, 0.0, 1.0, 0.0, 0.0, 1.0};
42 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};
44 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};
46 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};
48 const double GaussInfo::QUAD4A_REF[8]={-1.0, 1.0, -1.0, -1.0, 1.0, -1.0, 1.0, 1.0};
50 const double GaussInfo::QUAD4B_REF[8]={-1.0, -1.0, 1.0, -1.0, 1.0, 1.0, -1.0, 1.0};
52 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};
54 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};
56 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};
58 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};
60 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};
62 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};
64 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};
66 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};
68 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};
70 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};
72 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};
74 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};
76 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};
78 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};
80 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};
82 const double GaussInfo::PENTA18A_REF[54]={-1.0, 1.0, 0.0, -1.0, -0.0, 1.0, -1.0, 0.0, 0.0, 1.0, 1.0, 0.0, 1.0, 0.0, 1.0, 1.0, 0.0, 0.0, -1.0, 0.5, 0.5, -1.0, 0.0, 0.5, -1.0, 0.5, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 1.0, 0.5, 0.5, 1.0, 0.0, 0.5, 1.0, 0.5, 0.0, 0.0, 0.5, 0.5, 0.0, 0.0, 0.5, 0.0, 0.5, 0.0};
84 const double GaussInfo::PENTA18B_REF[54]={-1.0, 1.0, 0.0, -1.0, 0.0, 0.0, -1.0, -0.0, 1.0, 1.0, 1.0, 0.0, 1.0, 0.0, 0.0, 1.0, 0.0, 1.0, -1.0, 0.5, 0.0, -1.0, 0.0, 0.5, -1.0, 0.5, 0.5, 1.0, 0.5, 0.0, 1.0, 0.0, 0.5, 1.0, 0.5, 0.5, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.5, 0.0, 0.0, 0.0, 0.5, 0.0, 0.5, 0.5};
86 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};
88 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};
90 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};
92 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};
94 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};
96 //Define common part of the code in the MACRO
97 //---------------------------------------------------------------
98 #define LOCAL_COORD_MACRO_BEGIN \
99 _my_local_reference_coord.resize( _my_local_ref_dim*_my_local_nb_ref ); \
100 for( int refId = 0; refId < _my_local_nb_ref; refId++ ) \
102 double* coords = &_my_local_reference_coord[ refId*_my_local_ref_dim ]; \
106 //---------------------------------------------------------------
107 #define LOCAL_COORD_MACRO_END \
111 //---------------------------------------------------------------
112 #define SHAPE_FUN_MACRO_BEGIN \
113 for( int gaussId = 0 ; gaussId < _my_nb_gauss ; gaussId++ ) \
115 double* funValue = &_my_function_value[ gaussId * _my_nb_ref ]; \
116 const double* gc = &_my_gauss_coord[ gaussId * getGaussCoordDim() ];
118 //---------------------------------------------------------------
119 #define SHAPE_FUN_MACRO_END \
122 #define DEV_SHAPE_FUN_MACRO_BEGIN \
123 for( int gaussId = 0 ; gaussId < _my_nb_gauss ; gaussId++ ) \
125 double *devFunValue = _my_derivative_func_value.data() + gaussId * getReferenceCoordDim() * _my_nb_ref; \
126 const double *gc = _my_gauss_coord.data() + gaussId * getGaussCoordDim();
128 #define DEV_SHAPE_FUN_MACRO_END \
131 #define CHECK_MACRO \
134 std::ostringstream stream; \
135 stream << "Error in the gauss localization for the cell with type "; \
136 stream << cellModel.getRepr(); \
138 throw INTERP_KERNEL::Exception(stream.str().c_str()); \
142 //---------------------------------------------------------------
143 static bool IsEqual(double theLeft, double theRight)
145 static double EPS = 1.0E-3;
146 if(fabs(theLeft) + fabs(theRight) > EPS)
147 return fabs(theLeft-theRight)/(fabs(theLeft)+fabs(theRight)) < EPS;
152 ////////////////////////////////////////////////////////////////////////////////////////////////
153 // GAUSS INFO CLASS //
154 ////////////////////////////////////////////////////////////////////////////////////////////////
157 * Constructor of the GaussInfo
159 GaussInfo::GaussInfo( NormalizedCellType theGeometry,
160 const DataVector& theGaussCoord,
162 const DataVector& theReferenceCoord,
164 _my_geometry(theGeometry),
165 _my_nb_gauss(theNbGauss),
166 _my_gauss_coord(theGaussCoord),
167 _my_nb_ref(theNbRef),
168 _my_reference_coord(theReferenceCoord)
170 //Allocate shape function values
171 _my_function_value.resize( _my_nb_gauss * _my_nb_ref );
172 _my_derivative_func_value.resize( _my_nb_gauss * _my_nb_ref * getReferenceCoordDim() );
178 GaussInfo::~GaussInfo()
183 * Return dimension of the gauss coordinates
185 int GaussInfo::getGaussCoordDim() const
189 return (int)_my_gauss_coord.size()/_my_nb_gauss;
198 * Return dimension of the reference coordinates
200 int GaussInfo::getReferenceCoordDim() const
204 return (int)(_my_reference_coord.size()/_my_nb_ref);
213 * Return type of the cell.
215 NormalizedCellType GaussInfo::getCellType() const
221 * Return Nb of the gauss points.
223 int GaussInfo::getNbGauss() const
229 * Return Nb of the reference coordinates.
231 int GaussInfo::getNbRef() const
236 GaussInfo GaussInfo::convertToLinear() const
242 std::vector<double> a(SEG3_REF,SEG3_REF+3);
243 if(IsSatisfy(a,_my_reference_coord))
245 std::vector<double> c(SEG2A_REF,SEG2A_REF+2);
246 return GaussInfo(NORM_SEG2,_my_gauss_coord,getNbGauss(),c,2);
248 throw INTERP_KERNEL::Exception("GaussInfo::convertToLinear : not recognized pattern for SEG3 !");
252 std::vector<double> a(TRIA6A_REF,TRIA6A_REF+12),b(TRIA6B_REF,TRIA6B_REF+12);
253 if(IsSatisfy(a,_my_reference_coord))
255 std::vector<double> c(TRIA3A_REF,TRIA3A_REF+6);
256 return GaussInfo(NORM_TRI3,_my_gauss_coord,getNbGauss(),c,3);
258 if(IsSatisfy(b,_my_reference_coord))
260 std::vector<double> c(TRIA3B_REF,TRIA3B_REF+6);
261 return GaussInfo(NORM_TRI3,_my_gauss_coord,getNbGauss(),c,3);
263 throw INTERP_KERNEL::Exception("GaussInfo::convertToLinear : not recognized pattern for TRI6 !");
267 std::vector<double> a(TRIA7A_REF,TRIA7A_REF+14);
268 if(IsSatisfy(a,_my_reference_coord))
270 std::vector<double> c(TRIA3B_REF,TRIA3B_REF+6);
271 return GaussInfo(NORM_TRI3,_my_gauss_coord,getNbGauss(),c,3);
273 throw INTERP_KERNEL::Exception("GaussInfo::convertToLinear : not recognized pattern for TRI7 !");
277 std::vector<double> a(QUAD8A_REF,QUAD8A_REF+16),b(QUAD8B_REF,QUAD8B_REF+16);
278 if(IsSatisfy(a,_my_reference_coord))
280 std::vector<double> c(QUAD4A_REF,QUAD4A_REF+8);
281 return GaussInfo(NORM_QUAD4,_my_gauss_coord,getNbGauss(),c,4);
283 if(IsSatisfy(b,_my_reference_coord))
285 std::vector<double> c(QUAD4B_REF,QUAD4B_REF+8);
286 return GaussInfo(NORM_QUAD4,_my_gauss_coord,getNbGauss(),c,4);
288 throw INTERP_KERNEL::Exception("GaussInfo::convertToLinear : not recognized pattern for QUAD8 !");
292 std::vector<double> a(QUAD9A_REF,QUAD9A_REF+18);
293 if(IsSatisfy(a,_my_reference_coord))
295 std::vector<double> c(QUAD4B_REF,QUAD4B_REF+8);
296 return GaussInfo(NORM_QUAD4,_my_gauss_coord,getNbGauss(),c,4);
298 throw INTERP_KERNEL::Exception("GaussInfo::convertToLinear : not recognized pattern for QUAD9 !");
302 std::vector<double> a(TETRA10A_REF,TETRA10A_REF+30),b(TETRA10B_REF,TETRA10B_REF+30);
303 if(IsSatisfy(a,_my_reference_coord))
305 std::vector<double> c(TETRA4A_REF,TETRA4A_REF+12);
306 return GaussInfo(NORM_TETRA4,_my_gauss_coord,getNbGauss(),c,4);
308 if(IsSatisfy(b,_my_reference_coord))
310 std::vector<double> c(TETRA4B_REF,TETRA4B_REF+12);
311 return GaussInfo(NORM_TETRA4,_my_gauss_coord,getNbGauss(),c,4);
313 throw INTERP_KERNEL::Exception("GaussInfo::convertToLinear : not recognized pattern for TETRA10 !");
317 std::vector<double> a(PYRA13A_REF,PYRA13A_REF+39),b(PYRA13B_REF,PYRA13B_REF+39);
318 if(IsSatisfy(a,_my_reference_coord))
320 std::vector<double> c(PYRA5A_REF,PYRA5A_REF+15);
321 return GaussInfo(NORM_PYRA5,_my_gauss_coord,getNbGauss(),c,5);
323 if(IsSatisfy(b,_my_reference_coord))
325 std::vector<double> c(PYRA5B_REF,PYRA5B_REF+15);
326 return GaussInfo(NORM_PYRA5,_my_gauss_coord,getNbGauss(),c,5);
328 throw INTERP_KERNEL::Exception("GaussInfo::convertToLinear : not recognized pattern for PYRA13 !");
332 std::vector<double> a(PENTA15A_REF,PENTA15A_REF+45),b(PENTA15B_REF,PENTA15B_REF+45);
333 if(IsSatisfy(a,_my_reference_coord))
335 std::vector<double> c(PENTA6A_REF,PENTA6A_REF+18);
336 return GaussInfo(NORM_PENTA6,_my_gauss_coord,getNbGauss(),c,6);
338 if(IsSatisfy(b,_my_reference_coord))
340 std::vector<double> c(PENTA6B_REF,PENTA6B_REF+18);
341 return GaussInfo(NORM_PENTA6,_my_gauss_coord,getNbGauss(),c,6);
343 throw INTERP_KERNEL::Exception("GaussInfo::convertToLinear : not recognized pattern for PENTA15 !");
347 std::vector<double> a(PENTA18A_REF,PENTA18A_REF+54),b(PENTA18B_REF,PENTA18B_REF+54);
348 if(IsSatisfy(a,_my_reference_coord))
350 std::vector<double> c(PENTA6A_REF,PENTA6A_REF+18);
351 return GaussInfo(NORM_PENTA6,_my_gauss_coord,getNbGauss(),c,6);
353 if(IsSatisfy(b,_my_reference_coord))
355 std::vector<double> c(PENTA6B_REF,PENTA6B_REF+18);
356 return GaussInfo(NORM_PENTA6,_my_gauss_coord,getNbGauss(),c,6);
358 throw INTERP_KERNEL::Exception("GaussInfo::convertToLinear : not recognized pattern for PENTA18 !");
362 std::vector<double> a(HEXA20A_REF,HEXA20A_REF+60),b(HEXA20B_REF,HEXA20B_REF+60);
363 if(IsSatisfy(a,_my_reference_coord))
365 std::vector<double> c(HEXA8A_REF,HEXA8A_REF+24);
366 return GaussInfo(NORM_HEXA8,_my_gauss_coord,getNbGauss(),c,8);
368 if(IsSatisfy(b,_my_reference_coord))
370 std::vector<double> c(HEXA8B_REF,HEXA8B_REF+24);
371 return GaussInfo(NORM_HEXA8,_my_gauss_coord,getNbGauss(),c,8);
373 throw INTERP_KERNEL::Exception("GaussInfo::convertToLinear : not recognized pattern for HEXA20 !");
377 std::vector<double> a(HEXA27A_REF,HEXA27A_REF+81);
378 if(IsSatisfy(a,_my_reference_coord))
380 std::vector<double> c(HEXA8B_REF,HEXA8B_REF+24);
381 return GaussInfo(NORM_HEXA8,_my_gauss_coord,getNbGauss(),c,8);
383 throw INTERP_KERNEL::Exception("GaussInfo::convertToLinear : not recognized pattern for HEXA27 !");
386 throw INTERP_KERNEL::Exception("GaussInfo::convertToLinear : not implemented yet for other types than TETRA10, HEXA20, HEXA27, TRI3, QUAD8, QUAD8, PYRA13, PENTA15 !");
391 bool GaussInfo::IsSatisfy(const std::vector<double>& ref1, const std::vector<double>& ref2)
393 std::size_t sz(ref1.size());
396 for(std::size_t i=0;i<sz;i++)
397 if(!IsEqual(ref1[i],ref2[i]))
405 bool GaussInfo::isSatisfy()
408 bool anIsSatisfy = ((_my_local_nb_ref == _my_nb_ref) && (_my_local_ref_dim == getReferenceCoordDim()));
412 for( int refId = 0; refId < _my_local_nb_ref; refId++ )
414 double* refCoord = &_my_reference_coord[ refId*_my_local_ref_dim ];
415 double* localRefCoord = &_my_local_reference_coord[ refId*_my_local_ref_dim ];
416 bool anIsEqual = false;
417 for( int dimId = 0; dimId < _my_local_ref_dim; dimId++ )
419 anIsEqual = IsEqual( localRefCoord[dimId], refCoord[dimId]);
430 std::vector<double> GaussInfo::NormalizeCoordinatesIfNecessary(NormalizedCellType ct, int inputDim, const std::vector<double>& inputArray)
432 std::size_t sz(inputArray.size()),dim((std::size_t)inputDim);
434 throw INTERP_KERNEL::Exception("GaussInfo::NormalizeCoordinatesIfNecessary : invalid dimension ! Must be !=0 !");
436 throw INTERP_KERNEL::Exception("GaussInfo::NormalizeCoordinatesIfNecessary : invalid input array ! Inconsistent with the given dimension !");
437 const CellModel& cm(CellModel::GetCellModel(ct));
438 std::size_t baseDim((std::size_t)cm.getDimension());
441 std::size_t nbOfItems(sz/dim);
442 std::vector<double> ret(nbOfItems*baseDim);
445 for(std::size_t i=0;i<nbOfItems;i++)
449 ret[i*baseDim+j]=inputArray[i*dim+j];
456 for(std::size_t i=0;i<nbOfItems;i++)
460 ret[i*baseDim+j]=inputArray[i*dim+j];
466 std::vector<double> GaussInfo::GetDefaultReferenceCoordinatesOf(NormalizedCellType ct)
470 case INTERP_KERNEL::NORM_SEG2:
471 return std::vector<double>(SEG2A_REF,SEG2A_REF+sizeof(SEG2A_REF)/sizeof(double));
472 case INTERP_KERNEL::NORM_SEG3:
473 return std::vector<double>(SEG3_REF,SEG3_REF+sizeof(SEG3_REF)/sizeof(double));
474 case INTERP_KERNEL::NORM_TRI3:
475 return std::vector<double>(TRIA3A_REF,TRIA3A_REF+sizeof(TRIA3A_REF)/sizeof(double));
476 case INTERP_KERNEL::NORM_TRI6:
477 return std::vector<double>(TRIA6A_REF,TRIA6A_REF+sizeof(TRIA6A_REF)/sizeof(double));
478 case INTERP_KERNEL::NORM_TRI7:
479 return std::vector<double>(TRIA7A_REF,TRIA7A_REF+sizeof(TRIA7A_REF)/sizeof(double));
480 case INTERP_KERNEL::NORM_QUAD4:
481 return std::vector<double>(QUAD4A_REF,QUAD4A_REF+sizeof(QUAD4A_REF)/sizeof(double));
482 case INTERP_KERNEL::NORM_QUAD8:
483 return std::vector<double>(QUAD8A_REF,QUAD8A_REF+sizeof(QUAD8A_REF)/sizeof(double));
484 case INTERP_KERNEL::NORM_QUAD9:
485 return std::vector<double>(QUAD9A_REF,QUAD9A_REF+sizeof(QUAD9A_REF)/sizeof(double));
486 case INTERP_KERNEL::NORM_TETRA4:
487 return std::vector<double>(TETRA4A_REF,TETRA4A_REF+sizeof(TETRA4A_REF)/sizeof(double));
488 case INTERP_KERNEL::NORM_TETRA10:
489 return std::vector<double>(TETRA10A_REF,TETRA10A_REF+sizeof(TETRA10A_REF)/sizeof(double));
490 case INTERP_KERNEL::NORM_PYRA5:
491 return std::vector<double>(PYRA5A_REF,PYRA5A_REF+sizeof(PYRA5A_REF)/sizeof(double));
492 case INTERP_KERNEL::NORM_PYRA13:
493 return std::vector<double>(PYRA13A_REF,PYRA13A_REF+sizeof(PYRA13A_REF)/sizeof(double));
494 case INTERP_KERNEL::NORM_PENTA6:
495 return std::vector<double>(PENTA6A_REF,PENTA6A_REF+sizeof(PENTA6A_REF)/sizeof(double));
496 case INTERP_KERNEL::NORM_PENTA15:
497 return std::vector<double>(PENTA15A_REF,PENTA15A_REF+sizeof(PENTA15A_REF)/sizeof(double));
498 case INTERP_KERNEL::NORM_PENTA18:
499 return std::vector<double>(PENTA18A_REF,PENTA18A_REF+sizeof(PENTA18A_REF)/sizeof(double));
500 case INTERP_KERNEL::NORM_HEXA8:
501 return std::vector<double>(HEXA8A_REF,HEXA8A_REF+sizeof(HEXA8A_REF)/sizeof(double));
502 case INTERP_KERNEL::NORM_HEXA20:
503 return std::vector<double>(HEXA20A_REF,HEXA20A_REF+sizeof(HEXA20A_REF)/sizeof(double));
504 case INTERP_KERNEL::NORM_HEXA27:
505 return std::vector<double>(HEXA27A_REF,HEXA27A_REF+sizeof(HEXA27A_REF)/sizeof(double));
507 THROW_IK_EXCEPTION("Input type " << ct << "is not managed by GetDefaultReferenceCoordinatesOf")
512 * Returns true if \a ptInRefCoo is in reference cell of type \a ct (regarding GetDefaultReferenceCoordinatesOf)
513 * \sa GetDefaultReferenceCoordinatesOf
515 bool GaussInfo::IsInOrOutForReference(NormalizedCellType ct, const double *ptInRefCoo, double eps)
519 case INTERP_KERNEL::NORM_SEG2:
520 case INTERP_KERNEL::NORM_SEG3:
522 return std::fabs(ptInRefCoo[0]) < 1.0+eps;
524 case INTERP_KERNEL::NORM_QUAD4:
525 case INTERP_KERNEL::NORM_QUAD8:
526 case INTERP_KERNEL::NORM_QUAD9:
528 return std::find_if(ptInRefCoo,ptInRefCoo+2,[eps](double v){ return std::fabs(v) > 1.0+eps; }) == ptInRefCoo+2;
530 case INTERP_KERNEL::NORM_HEXA8:
531 case INTERP_KERNEL::NORM_HEXA20:
532 case INTERP_KERNEL::NORM_HEXA27:
534 return std::find_if(ptInRefCoo,ptInRefCoo+3,[eps](double v){ return std::fabs(v) > 1.0+eps; }) == ptInRefCoo+3;
537 THROW_IK_EXCEPTION("IsInOrOutForReference : not implemented for this geo type !");
541 typedef void (*MapToShapeFunction)(GaussInfo& obj);
544 * Initialize the internal vectors
546 void GaussInfo::initLocalInfo()
548 bool aSatify = false;
549 const CellModel& cellModel(CellModel::GetCellModel(_my_geometry));
550 switch( _my_geometry )
553 _my_local_ref_dim = 0;
554 _my_local_nb_ref = 1;
556 aSatify = isSatisfy();
561 _my_local_ref_dim = 1;
562 _my_local_nb_ref = 2;
564 aSatify = isSatisfy();
568 aSatify = isSatisfy();
574 _my_local_ref_dim = 1;
575 _my_local_nb_ref = 3;
577 aSatify = isSatisfy();
582 _my_local_ref_dim = 2;
583 _my_local_nb_ref = 3;
585 aSatify = isSatisfy();
590 aSatify = isSatisfy();
596 _my_local_ref_dim = 2;
597 _my_local_nb_ref = 6;
599 aSatify = isSatisfy();
603 aSatify = isSatisfy();
609 _my_local_ref_dim = 2;
610 _my_local_nb_ref = 7;
612 aSatify = isSatisfy();
618 _my_local_ref_dim = 2;
619 _my_local_nb_ref = 4;
620 MapToShapeFunction QUAD4PTR[]={Quad4aInit,Quad4bInit,Quad4cInit,Quad4DegSeg2Init};
621 std::size_t NB_OF_QUAD4PTR(sizeof(QUAD4PTR)/sizeof(MapToShapeFunction));
622 for(std::size_t i=0;i<NB_OF_QUAD4PTR && !aSatify;i++)
624 (QUAD4PTR[i])(*this);
625 aSatify = isSatisfy();
633 _my_local_ref_dim = 2;
634 _my_local_nb_ref = 8;
636 aSatify = isSatisfy();
641 aSatify = isSatisfy();
647 _my_local_ref_dim = 2;
648 _my_local_nb_ref = 9;
650 aSatify = isSatisfy();
655 _my_local_ref_dim = 3;
656 _my_local_nb_ref = 4;
658 aSatify = isSatisfy();
663 aSatify = isSatisfy();
669 _my_local_ref_dim = 3;
670 _my_local_nb_ref = 10;
672 aSatify = isSatisfy();
677 aSatify = isSatisfy();
683 _my_local_ref_dim = 3;
684 _my_local_nb_ref = 5;
686 aSatify = isSatisfy();
691 aSatify = isSatisfy();
697 _my_local_ref_dim = 3;
698 _my_local_nb_ref = 13;
700 aSatify = isSatisfy();
705 aSatify = isSatisfy();
712 _my_local_ref_dim = 3;
713 _my_local_nb_ref = 6;
714 MapToShapeFunction PENTA6PTR[]={Penta6aInit,Penta6bInit,Penta6DegTria3aInit,Penta6DegTria3bInit};
715 std::size_t NB_OF_PENTA6PTR(sizeof(PENTA6PTR)/sizeof(MapToShapeFunction));
716 for(std::size_t i=0;i<NB_OF_PENTA6PTR && !aSatify;i++)
718 (PENTA6PTR[i])(*this);
719 aSatify = isSatisfy();
725 /* _my_local_ref_dim = 3;
726 _my_local_nb_ref = 6;
728 aSatify = isSatisfy();
733 aSatify = isSatisfy();
740 _my_local_ref_dim = 3;
741 _my_local_nb_ref = 15;
742 MapToShapeFunction PENTA15PTR[]={Penta15aInit,Penta15bInit};
743 std::size_t NB_OF_PENTA15PTR(sizeof(PENTA15PTR)/sizeof(MapToShapeFunction));
744 for(std::size_t i=0;i<NB_OF_PENTA15PTR && !aSatify;i++)
746 (PENTA15PTR[i])(*this);
747 aSatify = isSatisfy();
755 _my_local_ref_dim = 3;
756 _my_local_nb_ref = 18;
757 MapToShapeFunction PENTA18PTR[]={Penta18aInit,Penta18bInit};
758 std::size_t NB_OF_PENTA18PTR(sizeof(PENTA18PTR)/sizeof(MapToShapeFunction));
759 for(std::size_t i=0;i<NB_OF_PENTA18PTR && !aSatify;i++)
761 (PENTA18PTR[i])(*this);
762 aSatify = isSatisfy();
770 _my_local_ref_dim = 3;
771 _my_local_nb_ref = 8;
772 MapToShapeFunction HEXA8PTR[]={Hexa8aInit,Hexa8bInit,Hexa8DegQuad4aInit,Hexa8DegQuad4bInit,Hexa8DegQuad4cInit};
773 std::size_t NB_OF_HEXA8PTR(sizeof(HEXA8PTR)/sizeof(MapToShapeFunction));
774 for(std::size_t i=0;i<NB_OF_HEXA8PTR && !aSatify;i++)
776 (HEXA8PTR[i])(*this);
777 aSatify = isSatisfy();
784 _my_local_ref_dim = 3;
785 _my_local_nb_ref = 20;
787 aSatify = isSatisfy();
792 aSatify = isSatisfy();
798 _my_local_ref_dim = 3;
799 _my_local_nb_ref = 27;
801 aSatify = isSatisfy();
806 throw INTERP_KERNEL::Exception("Not managed cell type !");
812 * Return shape function value by node id
814 const double *GaussInfo::getFunctionValues( const int theGaussId ) const
816 return _my_function_value.data() + _my_nb_ref*theGaussId ;
820 * Return the derivative of shape function value by node id
822 const double *GaussInfo::getDerivativeOfShapeFunctionAt( const int theGaussId ) const
824 return _my_derivative_func_value.data() + _my_nb_ref*getReferenceCoordDim()*theGaussId;
827 void GaussInfo::point1Init()
829 double *funValue(&_my_function_value[0]);
834 * Init Segment 2 Reference coordinates ans Shape function.
836 void GaussInfo::seg2aInit()
838 LOCAL_COORD_MACRO_BEGIN;
840 coords[0] = SEG2A_REF[0];
843 coords[0] = SEG2A_REF[1];
845 LOCAL_COORD_MACRO_END;
847 SHAPE_FUN_MACRO_BEGIN;
848 funValue[0] = 0.5*(1.0 - gc[0]);
849 funValue[1] = 0.5*(1.0 + gc[0]);
853 void GaussInfo::seg2bInit()
855 LOCAL_COORD_MACRO_BEGIN;
857 coords[0] = SEG2B_REF[0];
860 coords[0] = SEG2B_REF[1];
862 LOCAL_COORD_MACRO_END;
864 SHAPE_FUN_MACRO_BEGIN;
865 funValue[0] = 1.0 - gc[0];
871 * Init Segment 3 Reference coordinates ans Shape function.
873 void GaussInfo::seg3Init()
875 LOCAL_COORD_MACRO_BEGIN;
877 coords[0] = SEG3_REF[0];
880 coords[0] = SEG3_REF[1];
883 coords[0] = SEG3_REF[2];
884 LOCAL_COORD_MACRO_END;
886 SHAPE_FUN_MACRO_BEGIN;
887 funValue[0] = -0.5*(1.0 - gc[0])*gc[0];
888 funValue[1] = 0.5*(1.0 + gc[0])*gc[0];
889 funValue[2] = (1.0 + gc[0])*(1.0 - gc[0]);
894 * Init Triangle Reference coordinates ans Shape function.
897 void GaussInfo::tria3aInit()
899 LOCAL_COORD_MACRO_BEGIN;
901 coords[0] = TRIA3A_REF[0];
902 coords[1] = TRIA3A_REF[1];
905 coords[0] = TRIA3A_REF[2];
906 coords[1] = TRIA3A_REF[3];
909 coords[0] = TRIA3A_REF[4];
910 coords[1] = TRIA3A_REF[5];
912 LOCAL_COORD_MACRO_END;
914 SHAPE_FUN_MACRO_BEGIN;
915 funValue[0] = 0.5*(1.0 + gc[1]);
916 funValue[1] = -0.5*(gc[0] + gc[1]);
917 funValue[2] = 0.5*(1.0 + gc[0]);
922 * Init Triangle Reference coordinates ans Shape function.
925 void GaussInfo::tria3bInit()
927 LOCAL_COORD_MACRO_BEGIN;
929 coords[0] = TRIA3B_REF[0];
930 coords[1] = TRIA3B_REF[1];
933 coords[0] = TRIA3B_REF[2];
934 coords[1] = TRIA3B_REF[3];
937 coords[0] = TRIA3B_REF[4];
938 coords[1] = TRIA3B_REF[5];
940 LOCAL_COORD_MACRO_END;
942 SHAPE_FUN_MACRO_BEGIN;
943 funValue[0] = 1.0 - gc[0] - gc[1];
950 * Init Quadratic Triangle Reference coordinates ans Shape function.
953 void GaussInfo::tria6aInit()
955 LOCAL_COORD_MACRO_BEGIN;
957 coords[0] = TRIA6A_REF[0];
958 coords[1] = TRIA6A_REF[1];
961 coords[0] = TRIA6A_REF[2];
962 coords[1] = TRIA6A_REF[3];
965 coords[0] = TRIA6A_REF[4];
966 coords[1] = TRIA6A_REF[5];
969 coords[0] = TRIA6A_REF[6];
970 coords[1] = TRIA6A_REF[7];
973 coords[0] = TRIA6A_REF[8];
974 coords[1] = TRIA6A_REF[9];
977 coords[0] = TRIA6A_REF[10];
978 coords[1] = TRIA6A_REF[11];
980 LOCAL_COORD_MACRO_END;
982 SHAPE_FUN_MACRO_BEGIN;
983 funValue[0] = 0.5*(1.0 + gc[1])*gc[1];
984 funValue[1] = 0.5*(gc[0] + gc[1])*(gc[0] + gc[1] + 1);
985 funValue[2] = 0.5*(1.0 + gc[0])*gc[0];
986 funValue[3] = -1.0*(1.0 + gc[1])*(gc[0] + gc[1]);
987 funValue[4] = -1.0*(1.0 + gc[0])*(gc[0] + gc[1]);
988 funValue[5] = (1.0 + gc[1])*(1.0 + gc[1]);
993 * Init Quadratic Triangle Reference coordinates ans Shape function.
996 void GaussInfo::tria6bInit()
998 LOCAL_COORD_MACRO_BEGIN;
1000 coords[0] = TRIA6B_REF[0];
1001 coords[1] = TRIA6B_REF[1];
1004 coords[0] = TRIA6B_REF[2];
1005 coords[1] = TRIA6B_REF[3];
1008 coords[0] = TRIA6B_REF[4];
1009 coords[1] = TRIA6B_REF[5];
1012 coords[0] = TRIA6B_REF[6];
1013 coords[1] = TRIA6B_REF[7];
1016 coords[0] = TRIA6B_REF[8];
1017 coords[1] = TRIA6B_REF[9];
1020 coords[0] = TRIA6B_REF[10];
1021 coords[1] = TRIA6B_REF[11];
1023 LOCAL_COORD_MACRO_END;
1025 SHAPE_FUN_MACRO_BEGIN;
1026 funValue[0] = (1.0 - gc[0] - gc[1])*(1.0 - 2.0*gc[0] - 2.0*gc[1]);
1027 funValue[1] = gc[0]*(2.0*gc[0] - 1.0);
1028 funValue[2] = gc[1]*(2.0*gc[1] - 1.0);
1029 funValue[3] = 4.0*gc[0]*(1.0 - gc[0] - gc[1]);
1030 funValue[4] = 4.0*gc[0]*gc[1];
1031 funValue[5] = 4.0*gc[1]*(1.0 - gc[0] - gc[1]);
1032 SHAPE_FUN_MACRO_END;
1035 void GaussInfo::tria7aInit()
1037 LOCAL_COORD_MACRO_BEGIN;
1039 coords[0] = TRIA7A_REF[0];
1040 coords[1] = TRIA7A_REF[1];
1043 coords[0] = TRIA7A_REF[2];
1044 coords[1] = TRIA7A_REF[3];
1047 coords[0] = TRIA7A_REF[4];
1048 coords[1] = TRIA7A_REF[5];
1051 coords[0] = TRIA7A_REF[6];
1052 coords[1] = TRIA7A_REF[7];
1055 coords[0] = TRIA7A_REF[8];
1056 coords[1] = TRIA7A_REF[9];
1059 coords[0] = TRIA7A_REF[10];
1060 coords[1] = TRIA7A_REF[11];
1063 coords[0] = TRIA7A_REF[12];
1064 coords[1] = TRIA7A_REF[13];
1066 LOCAL_COORD_MACRO_END;
1068 SHAPE_FUN_MACRO_BEGIN;
1069 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]);
1070 funValue[1]=gc[0]*(-1+2*gc[0]+3*gc[1]-3*gc[1]*(gc[0]+gc[1]));
1071 funValue[2]=gc[1]*(-1.+3.*gc[0]+2.*gc[1]-3.*gc[0]*(gc[0]+gc[1]));
1072 funValue[3]=4*gc[0]*(1-gc[0]-4*gc[1]+3*gc[1]*(gc[0]+gc[1]));
1073 funValue[4]=4*gc[0]*gc[1]*(-2+3*(gc[0]+gc[1]));
1074 funValue[5]=4*gc[1]*(1-4*gc[0]-gc[1]+3*gc[0]*(gc[0]+gc[1]));
1075 funValue[6]=27*gc[0]*gc[1]*(1-gc[0]-gc[1]);
1076 SHAPE_FUN_MACRO_END;
1080 * Init Quadrangle Reference coordinates ans Shape function.
1083 void GaussInfo::quad4aInit()
1085 LOCAL_COORD_MACRO_BEGIN;
1087 coords[0] = QUAD4A_REF[0];
1088 coords[1] = QUAD4A_REF[1];
1091 coords[0] = QUAD4A_REF[2];
1092 coords[1] = QUAD4A_REF[3];
1095 coords[0] = QUAD4A_REF[4];
1096 coords[1] = QUAD4A_REF[5];
1099 coords[0] = QUAD4A_REF[6];
1100 coords[1] = QUAD4A_REF[7];
1102 LOCAL_COORD_MACRO_END;
1104 SHAPE_FUN_MACRO_BEGIN;
1105 funValue[0] = 0.25*(1.0 + gc[1])*(1.0 - gc[0]);
1106 funValue[1] = 0.25*(1.0 - gc[1])*(1.0 - gc[0]);
1107 funValue[2] = 0.25*(1.0 - gc[1])*(1.0 + gc[0]);
1108 funValue[3] = 0.25*(1.0 + gc[0])*(1.0 + gc[1]);
1109 SHAPE_FUN_MACRO_END;
1113 * Init Quadrangle Reference coordinates ans Shape function.
1116 void GaussInfo::quad4bInit()
1118 LOCAL_COORD_MACRO_BEGIN;
1120 coords[0] = QUAD4B_REF[0];
1121 coords[1] = QUAD4B_REF[1];
1124 coords[0] = QUAD4B_REF[2];
1125 coords[1] = QUAD4B_REF[3];
1128 coords[0] = QUAD4B_REF[4];
1129 coords[1] = QUAD4B_REF[5];
1132 coords[0] = QUAD4B_REF[6];
1133 coords[1] = QUAD4B_REF[7];
1135 LOCAL_COORD_MACRO_END;
1137 SHAPE_FUN_MACRO_BEGIN;
1138 funValue[0] = 0.25*(1.0 - gc[0])*(1.0 - gc[1]);
1139 funValue[1] = 0.25*(1.0 + gc[0])*(1.0 - gc[1]);
1140 funValue[2] = 0.25*(1.0 + gc[0])*(1.0 + gc[1]);
1141 funValue[3] = 0.25*(1.0 - gc[0])*(1.0 + gc[1]);
1142 SHAPE_FUN_MACRO_END;
1145 void GaussInfo::quad4cInit()
1147 LOCAL_COORD_MACRO_BEGIN;
1165 LOCAL_COORD_MACRO_END;
1167 SHAPE_FUN_MACRO_BEGIN;
1168 funValue[0] = 0.25*(1.0 - gc[0])*(1.0 - gc[1]);
1169 funValue[1] = 0.25*(1.0 - gc[0])*(1.0 + gc[1]);
1170 funValue[2] = 0.25*(1.0 + gc[0])*(1.0 + gc[1]);
1171 funValue[3] = 0.25*(1.0 + gc[0])*(1.0 - gc[1]);
1172 SHAPE_FUN_MACRO_END;
1176 * This shapefunc map is same as degenerated seg2aInit
1178 void GaussInfo::quad4DegSeg2Init()
1180 LOCAL_COORD_MACRO_BEGIN;
1197 LOCAL_COORD_MACRO_END;
1199 SHAPE_FUN_MACRO_BEGIN;
1200 funValue[0] = 0.5*(1.0 - gc[0]);
1201 funValue[1] = 0.5*(1.0 + gc[0]);
1204 SHAPE_FUN_MACRO_END;
1208 * Init Quadratic Quadrangle Reference coordinates ans Shape function.
1211 void GaussInfo::quad8aInit()
1213 LOCAL_COORD_MACRO_BEGIN;
1215 coords[0] = QUAD8A_REF[0];
1216 coords[1] = QUAD8A_REF[1];
1219 coords[0] = QUAD8A_REF[2];
1220 coords[1] = QUAD8A_REF[3];
1223 coords[0] = QUAD8A_REF[4];
1224 coords[1] = QUAD8A_REF[5];
1227 coords[0] = QUAD8A_REF[6];
1228 coords[1] = QUAD8A_REF[7];
1231 coords[0] = QUAD8A_REF[8];
1232 coords[1] = QUAD8A_REF[9];
1235 coords[0] = QUAD8A_REF[10];
1236 coords[1] = QUAD8A_REF[11];
1239 coords[0] = QUAD8A_REF[12];
1240 coords[1] = QUAD8A_REF[13];
1243 coords[0] = QUAD8A_REF[14];
1244 coords[1] = QUAD8A_REF[15];
1246 LOCAL_COORD_MACRO_END;
1248 SHAPE_FUN_MACRO_BEGIN;
1249 funValue[0] = 0.25*(1.0 + gc[1])*(1.0 - gc[0])*(gc[1] - gc[0] - 1.0);
1250 funValue[1] = 0.25*(1.0 - gc[1])*(1.0 - gc[0])*(-gc[1] - gc[0] - 1.0);
1251 funValue[2] = 0.25*(1.0 - gc[1])*(1.0 + gc[0])*(-gc[1] + gc[0] - 1.0);
1252 funValue[3] = 0.25*(1.0 + gc[1])*(1.0 + gc[0])*(gc[1] + gc[0] - 1.0);
1253 funValue[4] = 0.5*(1.0 - gc[0])*(1.0 - gc[1])*(1.0 + gc[1]);
1254 funValue[5] = 0.5*(1.0 - gc[1])*(1.0 - gc[0])*(1.0 + gc[0]);
1255 funValue[6] = 0.5*(1.0 + gc[0])*(1.0 - gc[1])*(1.0 + gc[1]);
1256 funValue[7] = 0.5*(1.0 + gc[1])*(1.0 - gc[0])*(1.0 + gc[0]);
1257 SHAPE_FUN_MACRO_END;
1261 * Init Quadratic Quadrangle Reference coordinates ans Shape function.
1264 void GaussInfo::quad8bInit()
1266 LOCAL_COORD_MACRO_BEGIN;
1268 coords[0] = QUAD8B_REF[0];
1269 coords[1] = QUAD8B_REF[1];
1272 coords[0] = QUAD8B_REF[2];
1273 coords[1] = QUAD8B_REF[3];
1276 coords[0] = QUAD8B_REF[4];
1277 coords[1] = QUAD8B_REF[5];
1280 coords[0] = QUAD8B_REF[6];
1281 coords[1] = QUAD8B_REF[7];
1284 coords[0] = QUAD8B_REF[8];
1285 coords[1] = QUAD8B_REF[9];
1288 coords[0] = QUAD8B_REF[10];
1289 coords[1] = QUAD8B_REF[11];
1292 coords[0] = QUAD8B_REF[12];
1293 coords[1] = QUAD8B_REF[13];
1296 coords[0] = QUAD8B_REF[14];
1297 coords[1] = QUAD8B_REF[15];
1299 LOCAL_COORD_MACRO_END;
1301 SHAPE_FUN_MACRO_BEGIN;
1302 funValue[0] = 0.25*(1.0 - gc[0])*(1.0 - gc[1])*(-1.0 - gc[0] - gc[1]);
1303 funValue[1] = 0.25*(1.0 + gc[0])*(1.0 - gc[1])*(-1.0 + gc[0] - gc[1]);
1304 funValue[2] = 0.25*(1.0 + gc[0])*(1.0 + gc[1])*(-1.0 + gc[0] + gc[1]);
1305 funValue[3] = 0.25*(1.0 - gc[0])*(1.0 + gc[1])*(-1.0 - gc[0] + gc[1]);
1306 funValue[4] = 0.5*(1.0 - gc[0]*gc[0])*(1.0 - gc[1]);
1307 funValue[5] = 0.5*(1.0 - gc[1]*gc[1])*(1.0 + gc[0]);
1308 funValue[6] = 0.5*(1.0 - gc[0]*gc[0])*(1.0 + gc[1]);
1309 funValue[7] = 0.5*(1.0 - gc[1]*gc[1])*(1.0 - gc[0]);
1310 SHAPE_FUN_MACRO_END;
1313 void GaussInfo::quad9aInit()
1315 LOCAL_COORD_MACRO_BEGIN;
1317 coords[0] = QUAD9A_REF[0];
1318 coords[1] = QUAD9A_REF[1];
1321 coords[0] = QUAD9A_REF[2];
1322 coords[1] = QUAD9A_REF[3];
1325 coords[0] = QUAD9A_REF[4];
1326 coords[1] = QUAD9A_REF[5];
1329 coords[0] = QUAD9A_REF[6];
1330 coords[1] = QUAD9A_REF[7];
1333 coords[0] = QUAD9A_REF[8];
1334 coords[1] = QUAD9A_REF[9];
1337 coords[0] = QUAD9A_REF[10];
1338 coords[1] = QUAD9A_REF[11];
1341 coords[0] = QUAD9A_REF[12];
1342 coords[1] = QUAD9A_REF[13];
1345 coords[0] = QUAD9A_REF[14];
1346 coords[1] = QUAD9A_REF[15];
1349 coords[0] = QUAD9A_REF[16];
1350 coords[1] = QUAD9A_REF[17];
1352 LOCAL_COORD_MACRO_END;
1354 SHAPE_FUN_MACRO_BEGIN;
1355 funValue[0] = 0.25*gc[0]*gc[1]*(gc[0]-1.)*(gc[1]-1.);
1356 funValue[1] = 0.25*gc[0]*gc[1]*(gc[0]+1.)*(gc[1]-1.);
1357 funValue[2] = 0.25*gc[0]*gc[1]*(gc[0]+1.)*(gc[1]+1.);
1358 funValue[3] = 0.25*gc[0]*gc[1]*(gc[0]-1.)*(gc[1]+1.);
1359 funValue[4] = 0.5*(1.-gc[0]*gc[0])*gc[1]*(gc[1]-1.);
1360 funValue[5] = 0.5*gc[0]*(gc[0]+1.)*(1.-gc[1]*gc[1]);
1361 funValue[6] = 0.5*(1.-gc[0]*gc[0])*gc[1]*(gc[1]+1.);
1362 funValue[7] = 0.5*gc[0]*(gc[0]-1.)*(1.-gc[1]*gc[1]);
1363 funValue[8] = (1.-gc[0]*gc[0])*(1.-gc[1]*gc[1]);
1364 SHAPE_FUN_MACRO_END;
1368 * Init Tetrahedron Reference coordinates ans Shape function.
1371 void GaussInfo::tetra4aInit()
1373 LOCAL_COORD_MACRO_BEGIN;
1375 coords[0] = TETRA4A_REF[0];
1376 coords[1] = TETRA4A_REF[1];
1377 coords[2] = TETRA4A_REF[2];
1380 coords[0] = TETRA4A_REF[3];
1381 coords[1] = TETRA4A_REF[4];
1382 coords[2] = TETRA4A_REF[5];
1385 coords[0] = TETRA4A_REF[6];
1386 coords[1] = TETRA4A_REF[7];
1387 coords[2] = TETRA4A_REF[8];
1390 coords[0] = TETRA4A_REF[9];
1391 coords[1] = TETRA4A_REF[10];
1392 coords[2] = TETRA4A_REF[11];
1394 LOCAL_COORD_MACRO_END;
1396 SHAPE_FUN_MACRO_BEGIN;
1397 funValue[0] = gc[1];
1398 funValue[1] = gc[2];
1399 funValue[2] = 1.0 - gc[0] - gc[1] - gc[2];
1400 funValue[3] = gc[0];
1401 SHAPE_FUN_MACRO_END;
1405 * Init Tetrahedron Reference coordinates ans Shape function.
1408 void GaussInfo::tetra4bInit()
1410 LOCAL_COORD_MACRO_BEGIN;
1412 coords[0] = TETRA4B_REF[0];
1413 coords[1] = TETRA4B_REF[1];
1414 coords[2] = TETRA4B_REF[2];
1417 coords[0] = TETRA4B_REF[3];
1418 coords[1] = TETRA4B_REF[4];
1419 coords[2] = TETRA4B_REF[5];
1422 coords[0] = TETRA4B_REF[6];
1423 coords[1] = TETRA4B_REF[7];
1424 coords[2] = TETRA4B_REF[8];
1427 coords[0] = TETRA4B_REF[9];
1428 coords[1] = TETRA4B_REF[10];
1429 coords[2] = TETRA4B_REF[11];
1431 LOCAL_COORD_MACRO_END;
1433 SHAPE_FUN_MACRO_BEGIN;
1434 funValue[0] = gc[1];
1435 funValue[2] = gc[2];
1436 funValue[1] = 1.0 - gc[0] - gc[1] - gc[2];
1437 funValue[3] = gc[0];
1438 SHAPE_FUN_MACRO_END;
1442 * Init Quadratic Tetrahedron Reference coordinates ans Shape function.
1445 void GaussInfo::tetra10aInit()
1447 LOCAL_COORD_MACRO_BEGIN;
1449 coords[0] = TETRA10A_REF[0];
1450 coords[1] = TETRA10A_REF[1];
1451 coords[2] = TETRA10A_REF[2];
1454 coords[0] = TETRA10A_REF[3];
1455 coords[1] = TETRA10A_REF[4];
1456 coords[2] = TETRA10A_REF[5];
1459 coords[0] = TETRA10A_REF[6];
1460 coords[1] = TETRA10A_REF[7];
1461 coords[2] = TETRA10A_REF[8];
1464 coords[0] = TETRA10A_REF[9];
1465 coords[1] = TETRA10A_REF[10];
1466 coords[2] = TETRA10A_REF[11];
1469 coords[0] = TETRA10A_REF[12];
1470 coords[1] = TETRA10A_REF[13];
1471 coords[2] = TETRA10A_REF[14];
1474 coords[0] = TETRA10A_REF[15];
1475 coords[1] = TETRA10A_REF[16];
1476 coords[2] = TETRA10A_REF[17];
1479 coords[0] = TETRA10A_REF[18];
1480 coords[1] = TETRA10A_REF[19];
1481 coords[2] = TETRA10A_REF[20];
1484 coords[0] = TETRA10A_REF[21];
1485 coords[1] = TETRA10A_REF[22];
1486 coords[2] = TETRA10A_REF[23];
1489 coords[0] = TETRA10A_REF[24];
1490 coords[1] = TETRA10A_REF[25];
1491 coords[2] = TETRA10A_REF[26];
1494 coords[0] = TETRA10A_REF[27];
1495 coords[1] = TETRA10A_REF[28];
1496 coords[2] = TETRA10A_REF[29];
1498 LOCAL_COORD_MACRO_END;
1500 SHAPE_FUN_MACRO_BEGIN;
1501 funValue[0] = gc[1]*(2.0*gc[1] - 1.0);
1502 funValue[1] = gc[2]*(2.0*gc[2] - 1.0);
1503 funValue[2] = (1.0 - gc[0] - gc[1] - gc[2])*(1.0 - 2.0*gc[0] - 2.0*gc[1] - 2.0*gc[2]);
1504 funValue[3] = gc[0]*(2.0*gc[0] - 1.0);
1505 funValue[4] = 4.0*gc[1]*gc[2];
1506 funValue[5] = 4.0*gc[2]*(1.0 - gc[0] - gc[1] - gc[2]);
1507 funValue[6] = 4.0*gc[1]*(1.0 - gc[0] - gc[1] - gc[2]);
1508 funValue[7] = 4.0*gc[0]*gc[1];
1509 funValue[8] = 4.0*gc[0]*gc[2];
1510 funValue[9] = 4.0*gc[0]*(1.0 - gc[0] - gc[1] - gc[2]);
1511 SHAPE_FUN_MACRO_END;
1515 * Init Quadratic Tetrahedron Reference coordinates ans Shape function.
1518 void GaussInfo::tetra10bInit()
1520 LOCAL_COORD_MACRO_BEGIN;
1522 coords[0] = TETRA10B_REF[0];
1523 coords[1] = TETRA10B_REF[1];
1524 coords[2] = TETRA10B_REF[2];
1527 coords[0] = TETRA10B_REF[3];
1528 coords[1] = TETRA10B_REF[4];
1529 coords[2] = TETRA10B_REF[5];
1532 coords[0] = TETRA10B_REF[6];
1533 coords[1] = TETRA10B_REF[7];
1534 coords[2] = TETRA10B_REF[8];
1537 coords[0] = TETRA10B_REF[9];
1538 coords[1] = TETRA10B_REF[10];
1539 coords[2] = TETRA10B_REF[11];
1542 coords[0] = TETRA10B_REF[12];
1543 coords[1] = TETRA10B_REF[13];
1544 coords[2] = TETRA10B_REF[14];
1547 coords[0] = TETRA10B_REF[15];
1548 coords[1] = TETRA10B_REF[16];
1549 coords[2] = TETRA10B_REF[17];
1552 coords[0] = TETRA10B_REF[18];
1553 coords[1] = TETRA10B_REF[19];
1554 coords[2] = TETRA10B_REF[20];
1557 coords[0] = TETRA10B_REF[21];
1558 coords[1] = TETRA10B_REF[22];
1559 coords[2] = TETRA10B_REF[23];
1562 coords[0] = TETRA10B_REF[24];
1563 coords[1] = TETRA10B_REF[25];
1564 coords[2] = TETRA10B_REF[26];
1567 coords[0] = TETRA10B_REF[27];
1568 coords[1] = TETRA10B_REF[28];
1569 coords[2] = TETRA10B_REF[29];
1571 LOCAL_COORD_MACRO_END;
1572 SHAPE_FUN_MACRO_BEGIN;
1573 funValue[0] = gc[1]*(2.0*gc[1] - 1.0);
1574 funValue[2] = gc[2]*(2.0*gc[2] - 1.0);
1575 funValue[1] = (1.0 - gc[0] - gc[1] - gc[2])*(1.0 - 2.0*gc[0] - 2.0*gc[1] - 2.0*gc[2]);
1576 funValue[3] = gc[0]*(2.0*gc[0] - 1.0);
1577 funValue[6] = 4.0*gc[1]*gc[2];
1578 funValue[5] = 4.0*gc[2]*(1.0 - gc[0] - gc[1] - gc[2]);
1579 funValue[4] = 4.0*gc[1]*(1.0 - gc[0] - gc[1] - gc[2]);
1580 funValue[7] = 4.0*gc[0]*gc[1];
1581 funValue[9] = 4.0*gc[0]*gc[2];
1582 funValue[8] = 4.0*gc[0]*(1.0 - gc[0] - gc[1] - gc[2]);
1583 SHAPE_FUN_MACRO_END;
1587 * Init Pyramid Reference coordinates ans Shape function.
1590 void GaussInfo::pyra5aInit()
1592 LOCAL_COORD_MACRO_BEGIN;
1594 coords[0] = PYRA5A_REF[0];
1595 coords[1] = PYRA5A_REF[1];
1596 coords[2] = PYRA5A_REF[2];
1599 coords[0] = PYRA5A_REF[3];
1600 coords[1] = PYRA5A_REF[4];
1601 coords[2] = PYRA5A_REF[5];
1604 coords[0] = PYRA5A_REF[6];
1605 coords[1] = PYRA5A_REF[7];
1606 coords[2] = PYRA5A_REF[8];
1609 coords[0] = PYRA5A_REF[9];
1610 coords[1] = PYRA5A_REF[10];
1611 coords[2] = PYRA5A_REF[11];
1614 coords[0] = PYRA5A_REF[12];
1615 coords[1] = PYRA5A_REF[13];
1616 coords[2] = PYRA5A_REF[14];
1618 LOCAL_COORD_MACRO_END;
1620 SHAPE_FUN_MACRO_BEGIN;
1621 funValue[0] = 0.25*(-gc[0] + gc[1] - 1.0)*(-gc[0] - gc[1] - 1.0)*(1.0 - gc[2]);
1622 funValue[1] = 0.25*(-gc[0] - gc[1] - 1.0)*(+gc[0] - gc[1] - 1.0)*(1.0 - gc[2]);
1623 funValue[2] = 0.25*(+gc[0] + gc[1] - 1.0)*(+gc[0] - gc[1] - 1.0)*(1.0 - gc[2]);
1624 funValue[3] = 0.25*(+gc[0] + gc[1] - 1.0)*(-gc[0] + gc[1] - 1.0)*(1.0 - gc[2]);
1625 funValue[4] = gc[2];
1626 SHAPE_FUN_MACRO_END;
1628 DEV_SHAPE_FUN_MACRO_BEGIN;
1630 devFunValue[0] = 0.5*(gc[0]+1)*(1.0 - gc[2]);
1631 devFunValue[1] = -0.5*gc[1]*(1.0 - gc[2]);
1632 devFunValue[2] = -0.25*(-gc[0] + gc[1] - 1.0)*(-gc[0] - gc[1] - 1.0);
1634 devFunValue[3] = -0.5*gc[0]*(1.0 - gc[2]);
1635 devFunValue[4] = 0.5*(gc[1]+1)*(1.0 - gc[2]);
1636 devFunValue[5] = -0.25*(-gc[0] - gc[1] - 1.0)*(+gc[0] - gc[1] - 1.0);
1638 devFunValue[6] = 0.5*(gc[0]-1)*(1.0 - gc[2]);
1639 devFunValue[7] = -0.5*gc[1]*(1.0 - gc[2]);
1640 devFunValue[8] = -0.25*(+gc[0] + gc[1] - 1.0)*(+gc[0] - gc[1] - 1.0);
1642 devFunValue[9] = -0.5*gc[0]*(1.0 - gc[2]);
1643 devFunValue[10] = 0.5*(1*gc[1]-1)*(1.0 - gc[2]);
1644 devFunValue[11] = -0.25*(+gc[0] + gc[1] - 1.0)*(-gc[0] + gc[1] - 1.0);
1646 devFunValue[12] = 0.0;
1647 devFunValue[13] = 0.0;
1648 devFunValue[14] = 1.0;
1650 DEV_SHAPE_FUN_MACRO_END;
1653 * Init Pyramid Reference coordinates ans Shape function.
1656 void GaussInfo::pyra5bInit()
1658 LOCAL_COORD_MACRO_BEGIN;
1660 coords[0] = PYRA5B_REF[0];
1661 coords[1] = PYRA5B_REF[1];
1662 coords[2] = PYRA5B_REF[2];
1665 coords[0] = PYRA5B_REF[3];
1666 coords[1] = PYRA5B_REF[4];
1667 coords[2] = PYRA5B_REF[5];
1670 coords[0] = PYRA5B_REF[6];
1671 coords[1] = PYRA5B_REF[7];
1672 coords[2] = PYRA5B_REF[8];
1675 coords[0] = PYRA5B_REF[9];
1676 coords[1] = PYRA5B_REF[10];
1677 coords[2] = PYRA5B_REF[11];
1680 coords[0] = PYRA5B_REF[12];
1681 coords[1] = PYRA5B_REF[13];
1682 coords[2] = PYRA5B_REF[14];
1684 LOCAL_COORD_MACRO_END;
1686 SHAPE_FUN_MACRO_BEGIN;
1687 funValue[0] = 0.25*(-gc[0] + gc[1] - 1.0)*(-gc[0] - gc[1] - 1.0)*(1.0 - gc[2]);
1688 funValue[3] = 0.25*(-gc[0] - gc[1] - 1.0)*(+gc[0] - gc[1] - 1.0)*(1.0 - gc[2]);
1689 funValue[2] = 0.25*(+gc[0] + gc[1] - 1.0)*(+gc[0] - gc[1] - 1.0)*(1.0 - gc[2]);
1690 funValue[1] = 0.25*(+gc[0] + gc[1] - 1.0)*(-gc[0] + gc[1] - 1.0)*(1.0 - gc[2]);
1691 funValue[4] = gc[2];
1692 SHAPE_FUN_MACRO_END;
1696 * Init Quadratic Pyramid Reference coordinates ans Shape function.
1699 void GaussInfo::pyra13aInit()
1701 LOCAL_COORD_MACRO_BEGIN;
1703 coords[0] = PYRA13A_REF[0];
1704 coords[1] = PYRA13A_REF[1];
1705 coords[2] = PYRA13A_REF[2];
1708 coords[0] = PYRA13A_REF[3];
1709 coords[1] = PYRA13A_REF[4];
1710 coords[2] = PYRA13A_REF[5];
1713 coords[0] = PYRA13A_REF[6];
1714 coords[1] = PYRA13A_REF[7];
1715 coords[2] = PYRA13A_REF[8];
1718 coords[0] = PYRA13A_REF[9];
1719 coords[1] = PYRA13A_REF[10];
1720 coords[2] = PYRA13A_REF[11];
1723 coords[0] = PYRA13A_REF[12];
1724 coords[1] = PYRA13A_REF[13];
1725 coords[2] = PYRA13A_REF[14];
1728 coords[0] = PYRA13A_REF[15];
1729 coords[1] = PYRA13A_REF[16];
1730 coords[2] = PYRA13A_REF[17];
1733 coords[0] = PYRA13A_REF[18];
1734 coords[1] = PYRA13A_REF[19];
1735 coords[2] = PYRA13A_REF[20];
1738 coords[0] = PYRA13A_REF[21];
1739 coords[1] = PYRA13A_REF[22];
1740 coords[2] = PYRA13A_REF[23];
1743 coords[0] = PYRA13A_REF[24];
1744 coords[1] = PYRA13A_REF[25];
1745 coords[2] = PYRA13A_REF[26];
1748 coords[0] = PYRA13A_REF[27];
1749 coords[1] = PYRA13A_REF[28];
1750 coords[2] = PYRA13A_REF[29];
1753 coords[0] = PYRA13A_REF[30];
1754 coords[1] = PYRA13A_REF[31];
1755 coords[2] = PYRA13A_REF[32];
1758 coords[0] = PYRA13A_REF[33];
1759 coords[1] = PYRA13A_REF[34];
1760 coords[2] = PYRA13A_REF[35];
1763 coords[0] = PYRA13A_REF[36];
1764 coords[1] = PYRA13A_REF[37];
1765 coords[2] = PYRA13A_REF[38];
1767 LOCAL_COORD_MACRO_END;
1769 SHAPE_FUN_MACRO_BEGIN;
1770 funValue[0] = 0.5*(-gc[0] + gc[1] + gc[2] - 1.0)*(-gc[0] - gc[1] + gc[2] - 1.0)*
1771 (gc[0] - 0.5)/(1.0 - gc[2]);
1772 funValue[1] = 0.5*(-gc[0] - gc[1] + gc[2] - 1.0)*(+gc[0] - gc[1] + gc[2] - 1.0)*
1773 (gc[1] - 0.5)/(1.0 - gc[2]);
1774 funValue[2] = 0.5*(+gc[0] - gc[1] + gc[2] - 1.0)*(+gc[0] + gc[1] + gc[2] - 1.0)*
1775 (-gc[0] - 0.5)/(1.0 - gc[2]);
1776 funValue[3] = 0.5*(+gc[0] + gc[1] + gc[2] - 1.0)*(-gc[0] + gc[1] + gc[2] - 1.0)*
1777 (-gc[1] - 0.5)/(1.0 - gc[2]);
1779 funValue[4] = 2.0*gc[2]*(gc[2] - 0.5);
1781 funValue[5] = 0.5*(-gc[0] + gc[1] + gc[2] - 1.0)*(-gc[0] - gc[1] + gc[2] - 1.0)*
1782 (gc[0] - gc[1] + gc[2] - 1.0)/(1.0 - gc[2]);
1783 funValue[6] = 0.5*(-gc[0] - gc[1] + gc[2] - 1.0)*(gc[0] - gc[1] + gc[2] - 1.0)*
1784 (gc[0] + gc[1] + gc[2] - 1.0)/(1.0 - gc[2]);
1785 funValue[7] = 0.5*(gc[0] - gc[1] + gc[2] - 1.0)*(gc[0] + gc[1] + gc[2] - 1.0)*
1786 (-gc[0] + gc[1] + gc[2] - 1.0)/(1.0 - gc[2]);
1787 funValue[8] = 0.5*(gc[0] + gc[1] + gc[2] - 1.0)*(-gc[0] + gc[1] + gc[2] - 1.0)*
1788 (-gc[0] - gc[1] + gc[2] - 1.0)/(1.0 - gc[2]);
1790 funValue[9] = 0.5*gc[2]*(-gc[0] + gc[1] + gc[2] - 1.0)*(-gc[0] - gc[1] + gc[2] - 1.0)/
1792 funValue[10] = 0.5*gc[2]*(-gc[0] - gc[1] + gc[2] - 1.0)*(gc[0] - gc[1] + gc[2] - 1.0)/
1794 funValue[11] = 0.5*gc[2]*(gc[0] - gc[1] + gc[2] - 1.0)*(gc[0] + gc[1] + gc[2] - 1.0)/
1796 funValue[12] = 0.5*gc[2]*(gc[0] + gc[1] + gc[2] - 1.0)*(-gc[0] + gc[1] + gc[2] - 1.0)/
1798 SHAPE_FUN_MACRO_END;
1802 * Init Quadratic Pyramid Reference coordinates ans Shape function.
1805 void GaussInfo::pyra13bInit()
1807 LOCAL_COORD_MACRO_BEGIN;
1809 coords[0] = PYRA13B_REF[0];
1810 coords[1] = PYRA13B_REF[1];
1811 coords[2] = PYRA13B_REF[2];
1814 coords[0] = PYRA13B_REF[3];
1815 coords[1] = PYRA13B_REF[4];
1816 coords[2] = PYRA13B_REF[5];
1819 coords[0] = PYRA13B_REF[6];
1820 coords[1] = PYRA13B_REF[7];
1821 coords[2] = PYRA13B_REF[8];
1824 coords[0] = PYRA13B_REF[9];
1825 coords[1] = PYRA13B_REF[10];
1826 coords[2] = PYRA13B_REF[11];
1829 coords[0] = PYRA13B_REF[12];
1830 coords[1] = PYRA13B_REF[13];
1831 coords[2] = PYRA13B_REF[14];
1834 coords[0] = PYRA13B_REF[15];
1835 coords[1] = PYRA13B_REF[16];
1836 coords[2] = PYRA13B_REF[17];
1839 coords[0] = PYRA13B_REF[18];
1840 coords[1] = PYRA13B_REF[19];
1841 coords[2] = PYRA13B_REF[20];
1844 coords[0] = PYRA13B_REF[21];
1845 coords[1] = PYRA13B_REF[22];
1846 coords[2] = PYRA13B_REF[23];
1849 coords[0] = PYRA13B_REF[24];
1850 coords[1] = PYRA13B_REF[25];
1851 coords[2] = PYRA13B_REF[26];
1854 coords[0] = PYRA13B_REF[27];
1855 coords[1] = PYRA13B_REF[28];
1856 coords[2] = PYRA13B_REF[29];
1859 coords[0] = PYRA13B_REF[30];
1860 coords[1] = PYRA13B_REF[31];
1861 coords[2] = PYRA13B_REF[32];
1864 coords[0] = PYRA13B_REF[33];
1865 coords[1] = PYRA13B_REF[34];
1866 coords[2] = PYRA13B_REF[35];
1869 coords[0] = PYRA13B_REF[36];
1870 coords[1] = PYRA13B_REF[37];
1871 coords[2] = PYRA13B_REF[38];
1873 LOCAL_COORD_MACRO_END;
1875 SHAPE_FUN_MACRO_BEGIN;
1876 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]);
1877 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]);
1878 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]);
1879 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]);
1881 funValue[4] =2.*gc[2]*(gc[2]-0.5);
1883 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]);
1884 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]);
1885 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]);
1886 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]);
1888 funValue[9] =gc[2]*(-gc[0]+gc[1]+gc[2]-1.0)*(-gc[0]-gc[1]+gc[2]-1.0)/(1.0-gc[2]);
1889 funValue[10]=gc[2]*(gc[0]+gc[1]+gc[2]-1.0)*(-gc[0]+gc[1]+gc[2]-1.0)/(1.0-gc[2]);
1890 funValue[11]=gc[2]*(gc[0]-gc[1]+gc[2]-1.0)*(gc[0]+gc[1]+gc[2]-1.0)/(1.0-gc[2]);
1891 funValue[12]=gc[2]*(-gc[0]-gc[1]+gc[2]-1.0)*(gc[0]-gc[1]+gc[2]-1.0)/(1.0-gc[2]);
1893 SHAPE_FUN_MACRO_END;
1898 * Init Pentahedron Reference coordinates and Shape function.
1901 void GaussInfo::penta6aInit()
1903 LOCAL_COORD_MACRO_BEGIN;
1905 coords[0] = PENTA6A_REF[0];
1906 coords[1] = PENTA6A_REF[1];
1907 coords[2] = PENTA6A_REF[2];
1910 coords[0] = PENTA6A_REF[3];
1911 coords[1] = PENTA6A_REF[4];
1912 coords[2] = PENTA6A_REF[5];
1915 coords[0] = PENTA6A_REF[6];
1916 coords[1] = PENTA6A_REF[7];
1917 coords[2] = PENTA6A_REF[8];
1920 coords[0] = PENTA6A_REF[9];
1921 coords[1] = PENTA6A_REF[10];
1922 coords[2] = PENTA6A_REF[11];
1925 coords[0] = PENTA6A_REF[12];
1926 coords[1] = PENTA6A_REF[13];
1927 coords[2] = PENTA6A_REF[14];
1930 coords[0] = PENTA6A_REF[15];
1931 coords[1] = PENTA6A_REF[16];
1932 coords[2] = PENTA6A_REF[17];
1934 LOCAL_COORD_MACRO_END;
1936 SHAPE_FUN_MACRO_BEGIN;
1937 funValue[0] = 0.5*gc[1]*(1.0 - gc[0]);
1938 funValue[1] = 0.5*gc[2]*(1.0 - gc[0]);
1939 funValue[2] = 0.5*(1.0 - gc[1] - gc[2])*(1.0 - gc[0]);
1941 funValue[3] = 0.5*gc[1]*(gc[0] + 1.0);
1942 funValue[4] = 0.5*gc[2]*(gc[0] + 1.0);
1943 funValue[5] = 0.5*(1.0 - gc[1] - gc[2])*(1.0 + gc[0]);
1944 SHAPE_FUN_MACRO_END;
1946 DEV_SHAPE_FUN_MACRO_BEGIN;
1948 devFunValue[0] = 0.5*gc[1]*(-1.0);
1949 devFunValue[1] = 0.5*(1.0 - gc[0]);
1950 devFunValue[2] = 0.0;
1952 devFunValue[3] = 0.5*gc[2]*(-1.0);
1953 devFunValue[4] = 0.0;
1954 devFunValue[5] = 0.5*(1.0 - gc[0]);
1956 devFunValue[6] = 0.5*(1.0 - gc[1] - gc[2])*(-1.0);
1957 devFunValue[7] = 0.5*(-1.0)*(1.0 - gc[0]);
1958 devFunValue[8] = 0.5*(-1.0)*(1.0 - gc[0]);
1960 devFunValue[9] = 0.5*gc[1];
1961 devFunValue[10] = 0.5*(gc[0] + 1.0);
1962 devFunValue[11] = 0.0;
1964 devFunValue[12] = 0.5*gc[2];
1965 devFunValue[13] = 0.0;
1966 devFunValue[14] = 0.5*(gc[0] + 1.0);
1968 devFunValue[15] = 0.5*(1.0 - gc[1] - gc[2]);
1969 devFunValue[16] = 0.5*(-1.0)*(1.0 + gc[0]);
1970 devFunValue[17] = 0.5*(-1.0)*(1.0 + gc[0]);
1972 DEV_SHAPE_FUN_MACRO_END;
1976 * Init Pentahedron Reference coordinates and Shape function.
1979 void GaussInfo::penta6bInit()
1981 LOCAL_COORD_MACRO_BEGIN;
1983 coords[0] = PENTA6B_REF[0];
1984 coords[1] = PENTA6B_REF[1];
1985 coords[2] = PENTA6B_REF[2];
1988 coords[0] = PENTA6B_REF[3];
1989 coords[1] = PENTA6B_REF[4];
1990 coords[2] = PENTA6B_REF[5];
1993 coords[0] = PENTA6B_REF[6];
1994 coords[1] = PENTA6B_REF[7];
1995 coords[2] = PENTA6B_REF[8];
1998 coords[0] = PENTA6B_REF[9];
1999 coords[1] = PENTA6B_REF[10];
2000 coords[2] = PENTA6B_REF[11];
2003 coords[0] = PENTA6B_REF[12];
2004 coords[1] = PENTA6B_REF[13];
2005 coords[2] = PENTA6B_REF[14];
2008 coords[0] = PENTA6B_REF[15];
2009 coords[1] = PENTA6B_REF[16];
2010 coords[2] = PENTA6B_REF[17];
2012 LOCAL_COORD_MACRO_END;
2014 SHAPE_FUN_MACRO_BEGIN;
2015 funValue[0] = 0.5*gc[1]*(1.0 - gc[0]);
2016 funValue[2] = 0.5*gc[2]*(1.0 - gc[0]);
2017 funValue[1] = 0.5*(1.0 - gc[1] - gc[2])*(1.0 - gc[0]);
2018 funValue[3] = 0.5*gc[1]*(gc[0] + 1.0);
2019 funValue[5] = 0.5*gc[2]*(gc[0] + 1.0);
2020 funValue[4] = 0.5*(1.0 - gc[1] - gc[2])*(1.0 + gc[0]);
2021 SHAPE_FUN_MACRO_END;
2025 * This shapefunc map is same as degenerated tria3aInit
2027 void GaussInfo::penta6DegTria3aInit()
2029 LOCAL_COORD_MACRO_BEGIN;
2060 LOCAL_COORD_MACRO_END;
2062 SHAPE_FUN_MACRO_BEGIN;
2063 funValue[0] = 0.5*(1.0 + gc[1]);
2064 funValue[1] = -0.5*(gc[0] + gc[1]);
2065 funValue[2] = 0.5*(1.0 + gc[0]);
2069 SHAPE_FUN_MACRO_END;
2073 * This shapefunc map is same as degenerated tria3bInit
2075 void GaussInfo::penta6DegTria3bInit()
2077 LOCAL_COORD_MACRO_BEGIN;
2108 LOCAL_COORD_MACRO_END;
2110 SHAPE_FUN_MACRO_BEGIN;
2111 funValue[0] = 1.0 - gc[0] - gc[1];
2112 funValue[1] = gc[0];
2113 funValue[2] = gc[1];
2117 SHAPE_FUN_MACRO_END;
2121 * Init Pentahedron Reference coordinates and Shape function.
2124 void GaussInfo::penta15aInit()
2126 LOCAL_COORD_MACRO_BEGIN;
2128 coords[0] = PENTA15A_REF[0];
2129 coords[1] = PENTA15A_REF[1];
2130 coords[2] = PENTA15A_REF[2];
2133 coords[0] = PENTA15A_REF[3];
2134 coords[1] = PENTA15A_REF[4];
2135 coords[2] = PENTA15A_REF[5];
2138 coords[0] = PENTA15A_REF[6];
2139 coords[1] = PENTA15A_REF[7];
2140 coords[2] = PENTA15A_REF[8];
2143 coords[0] = PENTA15A_REF[9];
2144 coords[1] = PENTA15A_REF[10];
2145 coords[2] = PENTA15A_REF[11];
2148 coords[0] = PENTA15A_REF[12];
2149 coords[1] = PENTA15A_REF[13];
2150 coords[2] = PENTA15A_REF[14];
2153 coords[0] = PENTA15A_REF[15];
2154 coords[1] = PENTA15A_REF[16];
2155 coords[2] = PENTA15A_REF[17];
2158 coords[0] = PENTA15A_REF[18];
2159 coords[1] = PENTA15A_REF[19];
2160 coords[2] = PENTA15A_REF[20];
2163 coords[0] = PENTA15A_REF[21];
2164 coords[1] = PENTA15A_REF[22];
2165 coords[2] = PENTA15A_REF[23];
2168 coords[0] = PENTA15A_REF[24];
2169 coords[1] = PENTA15A_REF[25];
2170 coords[2] = PENTA15A_REF[26];
2173 coords[0] = PENTA15A_REF[27];
2174 coords[1] = PENTA15A_REF[28];
2175 coords[2] = PENTA15A_REF[29];
2178 coords[0] = PENTA15A_REF[30];
2179 coords[1] = PENTA15A_REF[31];
2180 coords[2] = PENTA15A_REF[32];
2183 coords[0] = PENTA15A_REF[33];
2184 coords[1] = PENTA15A_REF[34];
2185 coords[2] = PENTA15A_REF[35];
2188 coords[0] = PENTA15A_REF[36];
2189 coords[1] = PENTA15A_REF[37];
2190 coords[2] = PENTA15A_REF[38];
2193 coords[0] = PENTA15A_REF[39];
2194 coords[1] = PENTA15A_REF[40];
2195 coords[2] = PENTA15A_REF[41];
2198 coords[0] = PENTA15A_REF[42];
2199 coords[1] = PENTA15A_REF[43];
2200 coords[2] = PENTA15A_REF[44];
2202 LOCAL_COORD_MACRO_END;
2204 SHAPE_FUN_MACRO_BEGIN;
2205 funValue[0] = 0.5*gc[1]*(1.0 - gc[0])*(2.0*gc[1] - 2.0 - gc[0]);
2206 funValue[1] = 0.5*gc[2]*(1.0 - gc[0])*(2.0*gc[2] - 2.0 - gc[0]);
2207 funValue[2] = 0.5*(gc[0] - 1.0)*(1.0 - gc[1] - gc[2])*(gc[0] + 2.0*gc[1] + 2.0*gc[2]);
2209 funValue[3] = 0.5*gc[1]*(1.0 + gc[0])*(2.0*gc[1] - 2.0 + gc[0]);
2210 funValue[4] = 0.5*gc[2]*(1.0 + gc[0])*(2.0*gc[2] - 2.0 + gc[0]);
2211 funValue[5] = 0.5*(-gc[0] - 1.0)*(1.0 - gc[1] - gc[2])*(-gc[0] + 2.0*gc[1] + 2.0*gc[2]);
2213 funValue[6] = 2.0*gc[1]*gc[2]*(1.0 - gc[0]);
2214 funValue[7] = 2.0*gc[2]*(1.0 - gc[1] - gc[2])*(1.0 - gc[0]);
2215 funValue[8] = 2.0*gc[1]*(1.0 - gc[1] - gc[2])*(1.0 - gc[0]);
2217 funValue[9] = gc[1]*(1.0 - gc[0]*gc[0]);
2218 funValue[10] = gc[2]*(1.0 - gc[0]*gc[0]);
2219 funValue[11] = (1.0 - gc[1] - gc[2])*(1.0 - gc[0]*gc[0]);
2221 funValue[12] = 2.0*gc[1]*gc[2]*(1.0 + gc[0]);
2222 funValue[13] = 2.0*gc[2]*(1.0 - gc[1] - gc[2])*(1.0 + gc[0]);
2223 funValue[14] = 2.0*gc[1]*(1.0 - gc[1] - gc[2])*(1.0 + gc[0]);
2224 SHAPE_FUN_MACRO_END;
2226 DEV_SHAPE_FUN_MACRO_BEGIN;
2228 devFunValue[0] = 0.5*gc[1]*(2 * gc[0] - 2 * gc[1] + 1.0 );
2229 devFunValue[1] = (1.0 - gc[0])*(2.0*gc[1] -1 - 0.5*gc[0]);
2230 devFunValue[2] = 0.0;
2232 devFunValue[3] = 0.5*gc[2]*(2 * gc[0] - 2 * gc[2] + 1.0 );
2233 devFunValue[4] = 0.0;
2234 devFunValue[5] = (1.0 - gc[0])*(2.0*gc[2] -1 - 0.5*gc[0]);
2236 devFunValue[6] = 0.5*(1.0 - gc[1] - gc[2])*(2*gc[0] -1.0 + 2*gc[1] + 2*gc[2]);
2237 devFunValue[7] = 0.5*(gc[0] - 1.0)* ( -4*gc[1] -gc[0] -4*gc[2] + 2.0);
2238 devFunValue[8] = 0.5*(gc[0] - 1.0)* ( -4*gc[2] -4*gc[1] -gc[0] + 2.0);
2240 devFunValue[9] = 0.5*gc[1]*( 2*gc[0] + 2*gc[1] -1.0 );
2241 devFunValue[10] = (1.0 + gc[0])*(2.0*gc[1] - 1.0 + 0.5*gc[0]);
2242 devFunValue[11] = 0.0;
2244 devFunValue[12] = 0.5*gc[2]*( 2*gc[0] + 2*gc[2] -1.0 );
2245 devFunValue[13] = 0.0;
2246 devFunValue[14] = (1.0 + gc[0])*(2.0*gc[2] - 1.0 + 0.5*gc[0]);
2248 devFunValue[15] = 0.5*(1.0 - gc[1] - gc[2])*(2 * gc[0] - 2.0 * gc[1] - 2.0 * gc[2] + 1.0 );
2249 devFunValue[16] = 0.5*(-gc[0] - 1.0) * (-4.0*gc[1] + gc[0] - 4.0 * gc[2] + 2.0) ;
2250 devFunValue[17] = 0.5*(-gc[0] - 1.0) * (-4.0*gc[2] - 4*gc[1] + gc[0] + 2.0 );
2252 devFunValue[18] = - 2.0*gc[1]*gc[2];
2253 devFunValue[19] = 2.0*gc[2]*(1.0 - gc[0]);
2254 devFunValue[20] = 2.0*gc[1]*(1.0 - gc[0]);
2256 devFunValue[21] = -2.0*gc[2]*(1.0 - gc[1] - gc[2]);
2257 devFunValue[22] = -2.0*gc[2]*(1.0 - gc[0]);
2258 devFunValue[23] = (-4*gc[2]-2*gc[1]+2.0)*(1.0 - gc[0]);
2260 devFunValue[24] = -2.0*gc[1]*(1.0 - gc[1] - gc[2]);
2261 devFunValue[25] = (-4*gc[1]-2*gc[2]+2)*(1.0 - gc[0]);
2262 devFunValue[26] = -2.0*gc[1]*(1.0 - gc[0]);
2264 devFunValue[27] = gc[1]*(- 2.0 * gc[0]);
2265 devFunValue[28] = (1.0 - gc[0]*gc[0]);
2266 devFunValue[29] = 0.0;
2268 devFunValue[30] = -2.0 * gc[2] *gc[0];
2269 devFunValue[31] = 0.0;
2270 devFunValue[32] = (1.0 - gc[0]*gc[0]);
2272 devFunValue[33] = -2.0 * (1.0 - gc[1] - gc[2]) * gc[0];
2273 devFunValue[34] = -1.0*(1.0 - gc[0]*gc[0]);
2274 devFunValue[35] = -1.0*(1.0 - gc[0]*gc[0]);
2276 devFunValue[36] = 2.0*gc[1]*gc[2];
2277 devFunValue[37] = 2.0*gc[2]*(1.0 + gc[0]);
2278 devFunValue[38] = 2.0*gc[1]*(1.0 + gc[0]);
2280 devFunValue[39] = 2.0*gc[2]*(1.0 - gc[1] - gc[2]);
2281 devFunValue[40] = -2.0*gc[2]*(1.0 + gc[0]);
2282 devFunValue[41] = (2.0 - 2.0 * gc[1] - 4.0 * gc[2])*(1.0 + gc[0]);
2284 devFunValue[42] = 2.0*gc[1]*(1.0 - gc[1] - gc[2]);
2285 devFunValue[43] = (2.0 - 4*gc[1] - 2*gc[2])*(1.0 + gc[0]);
2286 devFunValue[44] = -2.0*gc[1]*(1.0 + gc[0]);
2288 DEV_SHAPE_FUN_MACRO_END;
2292 * Init Qaudratic Pentahedron Reference coordinates and Shape function.
2295 void GaussInfo::penta15bInit()
2297 LOCAL_COORD_MACRO_BEGIN;
2299 coords[0] = PENTA15B_REF[0];
2300 coords[1] = PENTA15B_REF[1];
2301 coords[2] = PENTA15B_REF[2];
2304 coords[0] = PENTA15B_REF[3];
2305 coords[1] = PENTA15B_REF[4];
2306 coords[2] = PENTA15B_REF[5];
2309 coords[0] = PENTA15B_REF[6];
2310 coords[1] = PENTA15B_REF[7];
2311 coords[2] = PENTA15B_REF[8];
2314 coords[0] = PENTA15B_REF[9];
2315 coords[1] = PENTA15B_REF[10];
2316 coords[2] = PENTA15B_REF[11];
2319 coords[0] = PENTA15B_REF[12];
2320 coords[1] = PENTA15B_REF[13];
2321 coords[2] = PENTA15B_REF[14];
2324 coords[0] = PENTA15B_REF[15];
2325 coords[1] = PENTA15B_REF[16];
2326 coords[2] = PENTA15B_REF[17];
2329 coords[0] = PENTA15B_REF[18];
2330 coords[1] = PENTA15B_REF[19];
2331 coords[2] = PENTA15B_REF[20];
2334 coords[0] = PENTA15B_REF[21];
2335 coords[1] = PENTA15B_REF[22];
2336 coords[2] = PENTA15B_REF[23];
2339 coords[0] = PENTA15B_REF[24];
2340 coords[1] = PENTA15B_REF[25];
2341 coords[2] = PENTA15B_REF[26];
2344 coords[0] = PENTA15B_REF[27];
2345 coords[1] = PENTA15B_REF[28];
2346 coords[2] = PENTA15B_REF[29];
2349 coords[0] = PENTA15B_REF[30];
2350 coords[1] = PENTA15B_REF[31];
2351 coords[2] = PENTA15B_REF[32];
2354 coords[0] = PENTA15B_REF[33];
2355 coords[1] = PENTA15B_REF[34];
2356 coords[2] = PENTA15B_REF[35];
2359 coords[0] = PENTA15B_REF[36];
2360 coords[1] = PENTA15B_REF[37];
2361 coords[2] = PENTA15B_REF[38];
2364 coords[0] = PENTA15B_REF[39];
2365 coords[1] = PENTA15B_REF[40];
2366 coords[2] = PENTA15B_REF[41];
2369 coords[0] = PENTA15B_REF[42];
2370 coords[1] = PENTA15B_REF[43];
2371 coords[2] = PENTA15B_REF[44];
2373 LOCAL_COORD_MACRO_END;
2375 SHAPE_FUN_MACRO_BEGIN;
2376 funValue[0] = 0.5*gc[1]*(1.0 - gc[0])*(2.0*gc[1] - 2.0 - gc[0]);
2377 funValue[2] = 0.5*gc[2]*(1.0 - gc[0])*(2.0*gc[2] - 2.0 - gc[0]);
2378 funValue[1] = 0.5*(gc[0] - 1.0)*(1.0 - gc[1] - gc[2])*(gc[0] + 2.0*gc[1] + 2.0*gc[2]);
2380 funValue[3] = 0.5*gc[1]*(1.0 + gc[0])*(2.0*gc[1] - 2.0 + gc[0]);
2381 funValue[5] = 0.5*gc[2]*(1.0 + gc[0])*(2.0*gc[2] - 2.0 + gc[0]);
2382 funValue[4] = 0.5*(-gc[0] - 1.0)*(1.0 - gc[1] - gc[2])*(-gc[0] + 2.0*gc[1] + 2.0*gc[2]);
2384 funValue[8] = 2.0*gc[1]*gc[2]*(1.0 - gc[0]);
2385 funValue[7] = 2.0*gc[2]*(1.0 - gc[1] - gc[2])*(1.0 - gc[0]);
2386 funValue[6] = 2.0*gc[1]*(1.0 - gc[1] - gc[2])*(1.0 - gc[0]);
2388 funValue[12] = gc[1]*(1.0 - gc[0]*gc[0]);
2389 funValue[14] = gc[2]*(1.0 - gc[0]*gc[0]);
2390 funValue[13] = (1.0 - gc[1] - gc[2])*(1.0 - gc[0]*gc[0]);
2392 funValue[11] = 2.0*gc[1]*gc[2]*(1.0 + gc[0]);
2393 funValue[10] = 2.0*gc[2]*(1.0 - gc[1] - gc[2])*(1.0 + gc[0]);
2394 funValue[9] = 2.0*gc[1]*(1.0 - gc[1] - gc[2])*(1.0 + gc[0]);
2395 SHAPE_FUN_MACRO_END;
2398 void GaussInfo::penta18aInit()
2400 LOCAL_COORD_MACRO_BEGIN;
2402 coords[0] = PENTA18A_REF[0];
2403 coords[1] = PENTA18A_REF[1];
2404 coords[2] = PENTA18A_REF[2];
2407 coords[0] = PENTA18A_REF[3];
2408 coords[1] = PENTA18A_REF[4];
2409 coords[2] = PENTA18A_REF[5];
2412 coords[0] = PENTA18A_REF[6];
2413 coords[1] = PENTA18A_REF[7];
2414 coords[2] = PENTA18A_REF[8];
2417 coords[0] = PENTA18A_REF[9];
2418 coords[1] = PENTA18A_REF[10];
2419 coords[2] = PENTA18A_REF[11];
2422 coords[0] = PENTA18A_REF[12];
2423 coords[1] = PENTA18A_REF[13];
2424 coords[2] = PENTA18A_REF[14];
2427 coords[0] = PENTA18A_REF[15];
2428 coords[1] = PENTA18A_REF[16];
2429 coords[2] = PENTA18A_REF[17];
2432 coords[0] = PENTA18A_REF[18];
2433 coords[1] = PENTA18A_REF[19];
2434 coords[2] = PENTA18A_REF[20];
2437 coords[0] = PENTA18A_REF[21];
2438 coords[1] = PENTA18A_REF[22];
2439 coords[2] = PENTA18A_REF[23];
2442 coords[0] = PENTA18A_REF[24];
2443 coords[1] = PENTA18A_REF[25];
2444 coords[2] = PENTA18A_REF[26];
2447 coords[0] = PENTA18A_REF[27];
2448 coords[1] = PENTA18A_REF[28];
2449 coords[2] = PENTA18A_REF[29];
2452 coords[0] = PENTA18A_REF[30];
2453 coords[1] = PENTA18A_REF[31];
2454 coords[2] = PENTA18A_REF[32];
2457 coords[0] = PENTA18A_REF[33];
2458 coords[1] = PENTA18A_REF[34];
2459 coords[2] = PENTA18A_REF[35];
2462 coords[0] = PENTA18A_REF[36];
2463 coords[1] = PENTA18A_REF[37];
2464 coords[2] = PENTA18A_REF[38];
2467 coords[0] = PENTA18A_REF[39];
2468 coords[1] = PENTA18A_REF[40];
2469 coords[2] = PENTA18A_REF[41];
2472 coords[0] = PENTA18A_REF[42];
2473 coords[1] = PENTA18A_REF[43];
2474 coords[2] = PENTA18A_REF[44];
2477 coords[0] = PENTA18A_REF[45];
2478 coords[1] = PENTA18A_REF[46];
2479 coords[2] = PENTA18A_REF[47];
2482 coords[0] = PENTA18A_REF[48];
2483 coords[1] = PENTA18A_REF[49];
2484 coords[2] = PENTA18A_REF[50];
2487 coords[0] = PENTA18A_REF[51];
2488 coords[1] = PENTA18A_REF[52];
2489 coords[2] = PENTA18A_REF[53];
2491 LOCAL_COORD_MACRO_END;
2493 SHAPE_FUN_MACRO_BEGIN;
2494 funValue[0] = 0.5*gc[1]*(1.0 - gc[0])*(2.0*gc[1] - 2.0 - gc[0]);
2495 funValue[1] = 0.5*gc[2]*(1.0 - gc[0])*(2.0*gc[2] - 2.0 - gc[0]);
2496 funValue[2] = 0.5*(gc[0] - 1.0)*(1.0 - gc[1] - gc[2])*(gc[0] + 2.0*gc[1] + 2.0*gc[2]);
2498 funValue[3] = 0.5*gc[1]*(1.0 + gc[0])*(2.0*gc[1] - 2.0 + gc[0]);
2499 funValue[4] = 0.5*gc[2]*(1.0 + gc[0])*(2.0*gc[2] - 2.0 + gc[0]);
2500 funValue[5] = 0.5*(-gc[0] - 1.0)*(1.0 - gc[1] - gc[2])*(-gc[0] + 2.0*gc[1] + 2.0*gc[2]);
2502 funValue[6] = 2.0*gc[1]*gc[2]*(1.0 - gc[0]);
2503 funValue[7] = 2.0*gc[2]*(1.0 - gc[1] - gc[2])*(1.0 - gc[0]);
2504 funValue[8] = 2.0*gc[1]*(1.0 - gc[1] - gc[2])*(1.0 - gc[0]);
2506 funValue[9] = gc[1]*(1.0 - gc[0]*gc[0]);
2507 funValue[10] = gc[2]*(1.0 - gc[0]*gc[0]);
2508 funValue[11] = (1.0 - gc[1] - gc[2])*(1.0 - gc[0]*gc[0]);
2510 funValue[12] = 2.0*gc[1]*gc[2]*(1.0 + gc[0]);
2511 funValue[13] = 2.0*gc[2]*(1.0 - gc[1] - gc[2])*(1.0 + gc[0]);
2512 funValue[14] = 2.0*gc[1]*(1.0 - gc[1] - gc[2])*(1.0 + gc[0]);
2514 funValue[15] = 4.0*gc[1]*gc[2]*(1.0 - gc[0] * gc[0]);
2515 funValue[16] = 4.0*gc[2]*(gc[0] * gc[0] - 1) * ( gc[2] + gc[1] - 1);
2516 funValue[17] = 4.0*gc[1]*(gc[0] * gc[0] - 1) * ( gc[2] + gc[1] - 1);
2517 SHAPE_FUN_MACRO_END;
2520 void GaussInfo::penta18bInit()
2522 LOCAL_COORD_MACRO_BEGIN;
2524 coords[0] = PENTA18B_REF[0];
2525 coords[1] = PENTA18B_REF[1];
2526 coords[2] = PENTA18B_REF[2];
2529 coords[0] = PENTA18B_REF[3];
2530 coords[1] = PENTA18B_REF[4];
2531 coords[2] = PENTA18B_REF[5];
2534 coords[0] = PENTA18B_REF[6];
2535 coords[1] = PENTA18B_REF[7];
2536 coords[2] = PENTA18B_REF[8];
2539 coords[0] = PENTA18B_REF[9];
2540 coords[1] = PENTA18B_REF[10];
2541 coords[2] = PENTA18B_REF[11];
2544 coords[0] = PENTA18B_REF[12];
2545 coords[1] = PENTA18B_REF[13];
2546 coords[2] = PENTA18B_REF[14];
2549 coords[0] = PENTA18B_REF[15];
2550 coords[1] = PENTA18B_REF[16];
2551 coords[2] = PENTA18B_REF[17];
2554 coords[0] = PENTA18B_REF[18];
2555 coords[1] = PENTA18B_REF[19];
2556 coords[2] = PENTA18B_REF[20];
2559 coords[0] = PENTA18B_REF[21];
2560 coords[1] = PENTA18B_REF[22];
2561 coords[2] = PENTA18B_REF[23];
2564 coords[0] = PENTA18B_REF[24];
2565 coords[1] = PENTA18B_REF[25];
2566 coords[2] = PENTA18B_REF[26];
2569 coords[0] = PENTA18B_REF[27];
2570 coords[1] = PENTA18B_REF[28];
2571 coords[2] = PENTA18B_REF[29];
2574 coords[0] = PENTA18B_REF[30];
2575 coords[1] = PENTA18B_REF[31];
2576 coords[2] = PENTA18B_REF[32];
2579 coords[0] = PENTA18B_REF[33];
2580 coords[1] = PENTA18B_REF[34];
2581 coords[2] = PENTA18B_REF[35];
2584 coords[0] = PENTA18B_REF[36];
2585 coords[1] = PENTA18B_REF[37];
2586 coords[2] = PENTA18B_REF[38];
2589 coords[0] = PENTA18B_REF[39];
2590 coords[1] = PENTA18B_REF[40];
2591 coords[2] = PENTA18B_REF[41];
2594 coords[0] = PENTA18B_REF[42];
2595 coords[1] = PENTA18B_REF[43];
2596 coords[2] = PENTA18B_REF[44];
2599 coords[0] = PENTA18B_REF[45];
2600 coords[1] = PENTA18B_REF[46];
2601 coords[2] = PENTA18B_REF[47];
2604 coords[0] = PENTA18B_REF[48];
2605 coords[1] = PENTA18B_REF[49];
2606 coords[2] = PENTA18B_REF[50];
2609 coords[0] = PENTA18B_REF[51];
2610 coords[1] = PENTA18B_REF[52];
2611 coords[2] = PENTA18B_REF[53];
2613 LOCAL_COORD_MACRO_END;
2615 SHAPE_FUN_MACRO_BEGIN;
2616 funValue[0] = 0.5*gc[1]*(1.0 - gc[0])*(2.0*gc[1] - 2.0 - gc[0]);
2617 funValue[2] = 0.5*gc[2]*(1.0 - gc[0])*(2.0*gc[2] - 2.0 - gc[0]);
2618 funValue[1] = 0.5*(gc[0] - 1.0)*(1.0 - gc[1] - gc[2])*(gc[0] + 2.0*gc[1] + 2.0*gc[2]);
2620 funValue[3] = 0.5*gc[1]*(1.0 + gc[0])*(2.0*gc[1] - 2.0 + gc[0]);
2621 funValue[5] = 0.5*gc[2]*(1.0 + gc[0])*(2.0*gc[2] - 2.0 + gc[0]);
2622 funValue[4] = 0.5*(-gc[0] - 1.0)*(1.0 - gc[1] - gc[2])*(-gc[0] + 2.0*gc[1] + 2.0*gc[2]);
2624 funValue[8] = 2.0*gc[1]*gc[2]*(1.0 - gc[0]);
2625 funValue[7] = 2.0*gc[2]*(1.0 - gc[1] - gc[2])*(1.0 - gc[0]);
2626 funValue[6] = 2.0*gc[1]*(1.0 - gc[1] - gc[2])*(1.0 - gc[0]);
2628 funValue[12] = gc[1]*(1.0 - gc[0]*gc[0]);
2629 funValue[14] = gc[2]*(1.0 - gc[0]*gc[0]);
2630 funValue[13] = (1.0 - gc[1] - gc[2])*(1.0 - gc[0]*gc[0]);
2632 funValue[11] = 2.0*gc[1]*gc[2]*(1.0 + gc[0]);
2633 funValue[10] = 2.0*gc[2]*(1.0 - gc[1] - gc[2])*(1.0 + gc[0]);
2634 funValue[9] = 2.0*gc[1]*(1.0 - gc[1] - gc[2])*(1.0 + gc[0]);
2636 funValue[17] = 4.0*gc[1]*gc[2]*(1.0 - gc[0] * gc[0]);
2637 funValue[16] = 4.0*gc[2]*(gc[0] * gc[0] - 1) * ( gc[2] + gc[1] - 1);
2638 funValue[15] = 4.0*gc[1]*(gc[0] * gc[0] - 1) * ( gc[2] + gc[1] - 1);
2639 SHAPE_FUN_MACRO_END;
2643 * Init Hehahedron Reference coordinates and Shape function.
2646 void GaussInfo::hexa8aInit()
2648 LOCAL_COORD_MACRO_BEGIN;
2650 coords[0] = HEXA8A_REF[0];
2651 coords[1] = HEXA8A_REF[1];
2652 coords[2] = HEXA8A_REF[2];
2655 coords[0] = HEXA8A_REF[3];
2656 coords[1] = HEXA8A_REF[4];
2657 coords[2] = HEXA8A_REF[5];
2660 coords[0] = HEXA8A_REF[6];
2661 coords[1] = HEXA8A_REF[7];
2662 coords[2] = HEXA8A_REF[8];
2665 coords[0] = HEXA8A_REF[9];
2666 coords[1] = HEXA8A_REF[10];
2667 coords[2] = HEXA8A_REF[11];
2670 coords[0] = HEXA8A_REF[12];
2671 coords[1] = HEXA8A_REF[13];
2672 coords[2] = HEXA8A_REF[14];
2675 coords[0] = HEXA8A_REF[15];
2676 coords[1] = HEXA8A_REF[16];
2677 coords[2] = HEXA8A_REF[17];
2680 coords[0] = HEXA8A_REF[18];
2681 coords[1] = HEXA8A_REF[19];
2682 coords[2] = HEXA8A_REF[20];
2685 coords[0] = HEXA8A_REF[21];
2686 coords[1] = HEXA8A_REF[22];
2687 coords[2] = HEXA8A_REF[23];
2689 LOCAL_COORD_MACRO_END;
2691 SHAPE_FUN_MACRO_BEGIN;
2692 funValue[0] = 0.125*(1.0 - gc[0])*(1.0 - gc[1])*(1.0 - gc[2]);
2693 funValue[1] = 0.125*(1.0 + gc[0])*(1.0 - gc[1])*(1.0 - gc[2]);
2694 funValue[2] = 0.125*(1.0 + gc[0])*(1.0 + gc[1])*(1.0 - gc[2]);
2695 funValue[3] = 0.125*(1.0 - gc[0])*(1.0 + gc[1])*(1.0 - gc[2]);
2697 funValue[4] = 0.125*(1.0 - gc[0])*(1.0 - gc[1])*(1.0 + gc[2]);
2698 funValue[5] = 0.125*(1.0 + gc[0])*(1.0 - gc[1])*(1.0 + gc[2]);
2699 funValue[6] = 0.125*(1.0 + gc[0])*(1.0 + gc[1])*(1.0 + gc[2]);
2700 funValue[7] = 0.125*(1.0 - gc[0])*(1.0 + gc[1])*(1.0 + gc[2]);
2701 SHAPE_FUN_MACRO_END;
2703 DEV_SHAPE_FUN_MACRO_BEGIN;
2705 devFunValue[0] = 0.125 * (-1.0) * (1.0 - gc[1])*(1.0 - gc[2]);
2706 devFunValue[1] = 0.125 * (1.0 - gc[0]) * (-1.0) * (1.0 - gc[2]);
2707 devFunValue[2] = 0.125 * (1.0 - gc[0]) * (1.0 - gc[1]) *(-1.0);
2709 devFunValue[3] = 0.125*(1.0 - gc[1])*(1.0 - gc[2]);
2710 devFunValue[4] = 0.125*(1.0 + gc[0])*(-1.0)*(1.0 - gc[2]);
2711 devFunValue[5] = 0.125*(1.0 + gc[0])*(1.0 - gc[1])*(-1.0);
2713 devFunValue[6] = 0.125*(1.0 + gc[1])*(1.0 - gc[2]);
2714 devFunValue[7] = 0.125*(1.0 + gc[0])*(1.0 - gc[2]);
2715 devFunValue[8] = 0.125*(1.0 + gc[0])*(1.0 + gc[1])*(-1.0);
2717 devFunValue[9 ] = 0.125*(-1.0)*(1.0 + gc[1])*(1.0 - gc[2]);
2718 devFunValue[10] = 0.125*(1.0 - gc[0])*(1.0 - gc[2]);
2719 devFunValue[11] = 0.125*(1.0 - gc[0])*(1.0 + gc[1])*(-1.0);
2721 devFunValue[12] = 0.125*(-1.0)*(1.0 - gc[1])*(1.0 + gc[2]);
2722 devFunValue[13] = 0.125*(1.0 - gc[0])*(-1.0)*(1.0 + gc[2]);
2723 devFunValue[14] = 0.125*(1.0 - gc[0])*(1.0 - gc[1]);
2725 devFunValue[15] = 0.125*(1.0 - gc[1])*(1.0 + gc[2]);
2726 devFunValue[16] = 0.125*(1.0 + gc[0])*(-1.0)*(1.0 + gc[2]);
2727 devFunValue[17] = 0.125*(1.0 + gc[0])*(1.0 - gc[1]);
2729 devFunValue[18] = 0.125*(1.0 + gc[1])*(1.0 + gc[2]);
2730 devFunValue[19] = 0.125*(1.0 + gc[0])*(1.0 + gc[2]);
2731 devFunValue[20] = 0.125*(1.0 + gc[0])*(1.0 + gc[1]);
2733 devFunValue[21] = 0.125*(-1.0)*(1.0 + gc[1])*(1.0 + gc[2]);
2734 devFunValue[22] = 0.125*(1.0 - gc[0])*(1.0 + gc[2]);
2735 devFunValue[23] = 0.125*(1.0 - gc[0])*(1.0 + gc[1]);
2737 DEV_SHAPE_FUN_MACRO_END;
2741 * Init Hehahedron Reference coordinates and Shape function.
2744 void GaussInfo::hexa8bInit()
2746 LOCAL_COORD_MACRO_BEGIN;
2748 coords[0] = HEXA8B_REF[0];
2749 coords[1] = HEXA8B_REF[1];
2750 coords[2] = HEXA8B_REF[2];
2753 coords[0] = HEXA8B_REF[3];
2754 coords[1] = HEXA8B_REF[4];
2755 coords[2] = HEXA8B_REF[5];
2758 coords[0] = HEXA8B_REF[6];
2759 coords[1] = HEXA8B_REF[7];
2760 coords[2] = HEXA8B_REF[8];
2763 coords[0] = HEXA8B_REF[9];
2764 coords[1] = HEXA8B_REF[10];
2765 coords[2] = HEXA8B_REF[11];
2768 coords[0] = HEXA8B_REF[12];
2769 coords[1] = HEXA8B_REF[13];
2770 coords[2] = HEXA8B_REF[14];
2773 coords[0] = HEXA8B_REF[15];
2774 coords[1] = HEXA8B_REF[16];
2775 coords[2] = HEXA8B_REF[17];
2778 coords[0] = HEXA8B_REF[18];
2779 coords[1] = HEXA8B_REF[19];
2780 coords[2] = HEXA8B_REF[20];
2783 coords[0] = HEXA8B_REF[21];
2784 coords[1] = HEXA8B_REF[22];
2785 coords[2] = HEXA8B_REF[23];
2787 LOCAL_COORD_MACRO_END;
2789 SHAPE_FUN_MACRO_BEGIN;
2790 funValue[0] = 0.125*(1.0 - gc[0])*(1.0 - gc[1])*(1.0 - gc[2]);
2791 funValue[3] = 0.125*(1.0 + gc[0])*(1.0 - gc[1])*(1.0 - gc[2]);
2792 funValue[2] = 0.125*(1.0 + gc[0])*(1.0 + gc[1])*(1.0 - gc[2]);
2793 funValue[1] = 0.125*(1.0 - gc[0])*(1.0 + gc[1])*(1.0 - gc[2]);
2795 funValue[4] = 0.125*(1.0 - gc[0])*(1.0 - gc[1])*(1.0 + gc[2]);
2796 funValue[7] = 0.125*(1.0 + gc[0])*(1.0 - gc[1])*(1.0 + gc[2]);
2797 funValue[6] = 0.125*(1.0 + gc[0])*(1.0 + gc[1])*(1.0 + gc[2]);
2798 funValue[5] = 0.125*(1.0 - gc[0])*(1.0 + gc[1])*(1.0 + gc[2]);
2799 SHAPE_FUN_MACRO_END;
2803 * This shapefunc map is same as degenerated quad4bInit
2805 void GaussInfo::hexa8DegQuad4aInit()
2807 LOCAL_COORD_MACRO_BEGIN;
2848 LOCAL_COORD_MACRO_END;
2850 SHAPE_FUN_MACRO_BEGIN;
2851 funValue[0] = 0.25*(1.0 + gc[1])*(1.0 - gc[0]);
2852 funValue[1] = 0.25*(1.0 - gc[1])*(1.0 - gc[0]);
2853 funValue[2] = 0.25*(1.0 - gc[1])*(1.0 + gc[0]);
2854 funValue[3] = 0.25*(1.0 + gc[0])*(1.0 + gc[1]);
2859 SHAPE_FUN_MACRO_END;
2863 * This shapefunc map is same as degenerated quad4bInit
2865 void GaussInfo::hexa8DegQuad4bInit()
2867 LOCAL_COORD_MACRO_BEGIN;
2908 LOCAL_COORD_MACRO_END;
2910 SHAPE_FUN_MACRO_BEGIN;
2911 funValue[0] = 0.25*(1.0 - gc[0])*(1.0 - gc[1]);
2912 funValue[1] = 0.25*(1.0 + gc[0])*(1.0 - gc[1]);
2913 funValue[2] = 0.25*(1.0 + gc[0])*(1.0 + gc[1]);
2914 funValue[3] = 0.25*(1.0 - gc[0])*(1.0 + gc[1]);
2919 SHAPE_FUN_MACRO_END;
2923 * This shapefunc map is same as degenerated quad4cInit
2925 void GaussInfo::hexa8DegQuad4cInit()
2927 LOCAL_COORD_MACRO_BEGIN;
2969 LOCAL_COORD_MACRO_END;
2971 SHAPE_FUN_MACRO_BEGIN;
2972 funValue[0] = 0.25*(1.0 - gc[0])*(1.0 - gc[1]);
2973 funValue[1] = 0.25*(1.0 - gc[0])*(1.0 + gc[1]);
2974 funValue[2] = 0.25*(1.0 + gc[0])*(1.0 + gc[1]);
2975 funValue[3] = 0.25*(1.0 + gc[0])*(1.0 - gc[1]);
2980 SHAPE_FUN_MACRO_END;
2984 * Init Qaudratic Hehahedron Reference coordinates and Shape function.
2987 void GaussInfo::hexa20aInit()
2989 LOCAL_COORD_MACRO_BEGIN;
2991 coords[0] = HEXA20A_REF[0];
2992 coords[1] = HEXA20A_REF[1];
2993 coords[2] = HEXA20A_REF[2];
2996 coords[0] = HEXA20A_REF[3];
2997 coords[1] = HEXA20A_REF[4];
2998 coords[2] = HEXA20A_REF[5];
3001 coords[0] = HEXA20A_REF[6];
3002 coords[1] = HEXA20A_REF[7];
3003 coords[2] = HEXA20A_REF[8];
3006 coords[0] = HEXA20A_REF[9];
3007 coords[1] = HEXA20A_REF[10];
3008 coords[2] = HEXA20A_REF[11];
3011 coords[0] = HEXA20A_REF[12];
3012 coords[1] = HEXA20A_REF[13];
3013 coords[2] = HEXA20A_REF[14];
3016 coords[0] = HEXA20A_REF[15];
3017 coords[1] = HEXA20A_REF[16];
3018 coords[2] = HEXA20A_REF[17];
3021 coords[0] = HEXA20A_REF[18];
3022 coords[1] = HEXA20A_REF[19];
3023 coords[2] = HEXA20A_REF[20];
3026 coords[0] = HEXA20A_REF[21];
3027 coords[1] = HEXA20A_REF[22];
3028 coords[2] = HEXA20A_REF[23];
3031 coords[0] = HEXA20A_REF[24];
3032 coords[1] = HEXA20A_REF[25];
3033 coords[2] = HEXA20A_REF[26];
3036 coords[0] = HEXA20A_REF[27];
3037 coords[1] = HEXA20A_REF[28];
3038 coords[2] = HEXA20A_REF[29];
3041 coords[0] = HEXA20A_REF[30];
3042 coords[1] = HEXA20A_REF[31];
3043 coords[2] = HEXA20A_REF[32];
3046 coords[0] = HEXA20A_REF[33];
3047 coords[1] = HEXA20A_REF[34];
3048 coords[2] = HEXA20A_REF[35];
3051 coords[0] = HEXA20A_REF[36];
3052 coords[1] = HEXA20A_REF[37];
3053 coords[2] = HEXA20A_REF[38];
3056 coords[0] = HEXA20A_REF[39];
3057 coords[1] = HEXA20A_REF[40];
3058 coords[2] = HEXA20A_REF[41];
3061 coords[0] = HEXA20A_REF[42];
3062 coords[1] = HEXA20A_REF[43];
3063 coords[2] = HEXA20A_REF[44];
3066 coords[0] = HEXA20A_REF[45];
3067 coords[1] = HEXA20A_REF[46];
3068 coords[2] = HEXA20A_REF[47];
3071 coords[0] = HEXA20A_REF[48];
3072 coords[1] = HEXA20A_REF[49];
3073 coords[2] = HEXA20A_REF[50];
3076 coords[0] = HEXA20A_REF[51];
3077 coords[1] = HEXA20A_REF[52];
3078 coords[2] = HEXA20A_REF[53];
3081 coords[0] = HEXA20A_REF[54];
3082 coords[1] = HEXA20A_REF[55];
3083 coords[2] = HEXA20A_REF[56];
3086 coords[0] = HEXA20A_REF[57];
3087 coords[1] = HEXA20A_REF[58];
3088 coords[2] = HEXA20A_REF[59];
3090 LOCAL_COORD_MACRO_END;
3092 SHAPE_FUN_MACRO_BEGIN;
3093 funValue[0] = 0.125*(1.0 - gc[0])*(1.0 - gc[1])*(1.0 - gc[2])*
3094 (-2.0 - gc[0] - gc[1] - gc[2]);
3095 funValue[1] = 0.125*(1.0 + gc[0])*(1.0 - gc[1])*(1.0 - gc[2])*
3096 (-2.0 + gc[0] - gc[1] - gc[2]);
3097 funValue[2] = 0.125*(1.0 + gc[0])*(1.0 + gc[1])*(1.0 - gc[2])*
3098 (-2.0 + gc[0] + gc[1] - gc[2]);
3099 funValue[3] = 0.125*(1.0 - gc[0])*(1.0 + gc[1])*(1.0 - gc[2])*
3100 (-2.0 - gc[0] + gc[1] - gc[2]);
3101 funValue[4] = 0.125*(1.0 - gc[0])*(1.0 - gc[1])*(1.0 + gc[2])*
3102 (-2.0 - gc[0] - gc[1] + gc[2]);
3103 funValue[5] = 0.125*(1.0 + gc[0])*(1.0 - gc[1])*(1.0 + gc[2])*
3104 (-2.0 + gc[0] - gc[1] + gc[2]);
3105 funValue[6] = 0.125*(1.0 + gc[0])*(1.0 + gc[1])*(1.0 + gc[2])*
3106 (-2.0 + gc[0] + gc[1] + gc[2]);
3107 funValue[7] = 0.125*(1.0 - gc[0])*(1.0 + gc[1])*(1.0 + gc[2])*
3108 (-2.0 - gc[0] + gc[1] + gc[2]);
3110 funValue[8] = 0.25*(1.0 - gc[0]*gc[0])*(1.0 - gc[1])*(1.0 - gc[2]);
3111 funValue[9] = 0.25*(1.0 - gc[1]*gc[1])*(1.0 + gc[0])*(1.0 - gc[2]);
3112 funValue[10] = 0.25*(1.0 - gc[0]*gc[0])*(1.0 + gc[1])*(1.0 - gc[2]);
3113 funValue[11] = 0.25*(1.0 - gc[1]*gc[1])*(1.0 - gc[0])*(1.0 - gc[2]);
3114 funValue[12] = 0.25*(1.0 - gc[2]*gc[2])*(1.0 - gc[0])*(1.0 - gc[1]);
3115 funValue[13] = 0.25*(1.0 - gc[2]*gc[2])*(1.0 + gc[0])*(1.0 - gc[1]);
3116 funValue[14] = 0.25*(1.0 - gc[2]*gc[2])*(1.0 + gc[0])*(1.0 + gc[1]);
3117 funValue[15] = 0.25*(1.0 - gc[2]*gc[2])*(1.0 - gc[0])*(1.0 + gc[1]);
3118 funValue[16] = 0.25*(1.0 - gc[0]*gc[0])*(1.0 - gc[1])*(1.0 + gc[2]);
3119 funValue[17] = 0.25*(1.0 - gc[1]*gc[1])*(1.0 + gc[0])*(1.0 + gc[2]);
3120 funValue[18] = 0.25*(1.0 - gc[0]*gc[0])*(1.0 + gc[1])*(1.0 + gc[2]);
3121 funValue[19] = 0.25*(1.0 - gc[1]*gc[1])*(1.0 - gc[0])*(1.0 + gc[2]);
3122 SHAPE_FUN_MACRO_END;
3124 DEV_SHAPE_FUN_MACRO_BEGIN;
3126 devFunValue[0] = 0.125*(1. + gc[1] + gc[2] + 2* gc[0]) * (1.0 - gc[1])*(1.0 - gc[2]);
3127 devFunValue[1] = 0.125*(1.0 - gc[0])*(1. + gc[0] + gc[2] + 2 * gc[1])*(1.0 - gc[2]);
3128 devFunValue[2] = 0.125*(1.0 - gc[0])*(1.0 - gc[1])*(1.0 + gc[0] + gc[1] + 2 *gc[2]);
3130 devFunValue[3] = 0.125*(-1.0 - gc[1] - gc[2] + 2*gc[0])*(1.0 - gc[1])*(1.0 - gc[2]);
3131 devFunValue[4] = 0.125*(1.0 + gc[0])* (1 - gc[0] + gc[2] + 2*gc[1]) *(1.0 - gc[2]);
3132 devFunValue[5] = 0.125*(1.0 + gc[0])*(1.0 - gc[1])* (1 - gc[0] + gc[1] + 2*gc[2]);
3134 devFunValue[6] = 0.125*(-1.0 + gc[1] - gc[2] + 2*gc[0])*(1.0 + gc[1])*(1.0 - gc[2]);
3135 devFunValue[7] = 0.125*(1.0 + gc[0])* (-1 + gc[0] - gc[2] + 2*gc[1]) *(1.0 - gc[2]);
3136 devFunValue[8] = 0.125*(1.0 + gc[0])*(1.0 + gc[1])*(1.0 - gc[0] - gc[1] + 2*gc[2]);
3138 devFunValue[9] = 0.125*(1.0 - gc[1] + gc[2] + 2*gc[0])*(1.0 + gc[1])*(1.0 - gc[2]);
3139 devFunValue[10] = 0.125*(1.0 - gc[0])*(-1 - gc[0] - gc[2] + 2*gc[1])*(1.0 - gc[2]);
3140 devFunValue[11] = 0.125*(1.0 - gc[0])*(1.0 + gc[1])*(1.0 + gc[0] - gc[1] + 2*gc[2]);
3142 devFunValue[12] = 0.125*(1.0 + gc[1] - gc[2] + 2*gc[0])*(1.0 - gc[1])*(1.0 + gc[2]);
3143 devFunValue[13] = 0.125*(1.0 - gc[0])*(1 + gc[0] - gc[2] + 2*gc[1])*(1.0 + gc[2]);
3144 devFunValue[14] = 0.125*(1.0 - gc[0])*(1.0 - gc[1])*(-1.0 - gc[0] - gc[1] + 2*gc[2]);
3146 devFunValue[15] = 0.125*(-1.0 - gc[1] + gc[2] + 2*gc[0])*(1.0 - gc[1])*(1.0 + gc[2]);
3147 devFunValue[16] = 0.125*(1.0 + gc[0])*(1 - gc[0] - gc[2] + 2*gc[1])*(1.0 + gc[2]);
3148 devFunValue[17] = 0.125*(1.0 + gc[0])*(1.0 - gc[1])*(-1.0 + gc[0] - gc[1] + 2*gc[2]);
3150 devFunValue[18] = 0.125*(-1.0 + gc[1] + gc[2] + 2*gc[0])*(1.0 + gc[1])*(1.0 + gc[2]);
3151 devFunValue[19] = 0.125*(1.0 + gc[0])*(-1 + gc[0] + gc[2] + 2*gc[1])*(1.0 + gc[2]);
3152 devFunValue[20] = 0.125*(1.0 + gc[0])*(1.0 + gc[1])*(-1.0 + gc[0] + gc[1] + 2*gc[2]);
3154 devFunValue[21] = 0.125*(1.0 - gc[1] - gc[2] + 2*gc[0])*(1.0 + gc[1])*(1.0 + gc[2]);
3155 devFunValue[22] = 0.125*(1.0 - gc[0])*(-1 - gc[0] + gc[2] + 2*gc[1])*(1.0 + gc[2]);
3156 devFunValue[23] = 0.125*(1.0 - gc[0])*(1.0 + gc[1])*(-1.0 - gc[0] + gc[1] + 2*gc[2]);
3158 devFunValue[24] = 0.25*(-2.0*gc[0])*(1.0 - gc[1])*(1.0 - gc[2]);
3159 devFunValue[25] = 0.25*(1.0 - gc[0]*gc[0])*(-1)*(1.0 - gc[2]);
3160 devFunValue[26] = 0.25*(1.0 - gc[0]*gc[0])*(1.0 - gc[1])*(-1.0);
3162 devFunValue[27] = 0.25*(1.0 - gc[1]*gc[1])*(1.0 - gc[2]);
3163 devFunValue[28] = 0.25*(-2.0*gc[1])*(1.0 + gc[0])*(1.0 - gc[2]);
3164 devFunValue[29] = 0.25*(1.0 - gc[1]*gc[1])*(1.0 + gc[0])*(-1.0);
3166 devFunValue[30] = 0.25*(-2.0*gc[0])*(1.0 + gc[1])*(1.0 - gc[2]);
3167 devFunValue[31] = 0.25*(1.0 - gc[0]*gc[0])*(1.0)*(1.0 - gc[2]);
3168 devFunValue[32] = 0.25*(1.0 - gc[0]*gc[0])*(1.0 + gc[1])*(-1.0);
3170 devFunValue[33] = 0.25*(1.0 - gc[1]*gc[1])*(-1.0)*(1.0 - gc[2]);
3171 devFunValue[34] = 0.25*(-2.0*gc[1])*(1.0 - gc[0])*(1.0 - gc[2]);
3172 devFunValue[35] = 0.25*(1.0 - gc[1]*gc[1])*(1.0 - gc[0])*(-1.0);
3174 devFunValue[36] = 0.25*(1.0 - gc[2]*gc[2])*(-1.0)*(1.0 - gc[1]);
3175 devFunValue[37] = 0.25*(1.0 - gc[2]*gc[2])*(1.0 - gc[0])*(-1.0);
3176 devFunValue[38] = 0.25*(-2.0*gc[2])*(1.0 - gc[0])*(1.0 - gc[1]);
3178 devFunValue[39] = 0.25*(1.0 - gc[2]*gc[2])*(1.0 - gc[1]);
3179 devFunValue[40] = 0.25*(1.0 - gc[2]*gc[2])*(1.0 + gc[0])*(-1.0);
3180 devFunValue[41] = 0.25*(-2.0*gc[2])*(1.0 + gc[0])*(1.0 - gc[1]);
3182 devFunValue[42] = 0.25*(1.0 - gc[2]*gc[2])*(1.0 + gc[1]);
3183 devFunValue[43] = 0.25*(1.0 - gc[2]*gc[2])*(1.0 + gc[0]);
3184 devFunValue[44] = 0.25*(-2.0*gc[2])*(1.0 + gc[0])*(1.0 + gc[1]);
3186 devFunValue[45] = 0.25*(1.0 - gc[2]*gc[2])*(-1.0)*(1.0 + gc[1]);
3187 devFunValue[46] = 0.25*(1.0 - gc[2]*gc[2])*(1.0 - gc[0]);
3188 devFunValue[47] = 0.25*(-2.0*gc[2])*(1.0 - gc[0])*(1.0 + gc[1]);
3190 devFunValue[48] = 0.25*(-2.0*gc[0])*(1.0 - gc[1])*(1.0 + gc[2]);
3191 devFunValue[49] = 0.25*(1.0 - gc[0]*gc[0])*(-1.0)*(1.0 + gc[2]);
3192 devFunValue[50] = 0.25*(1.0 - gc[0]*gc[0])*(1.0 - gc[1]);
3194 devFunValue[51] = 0.25*(1.0 - gc[1]*gc[1])*(1.0 + gc[2]);
3195 devFunValue[52] = 0.25*(-2.0*gc[1])*(1.0 + gc[0])*(1.0 + gc[2]);
3196 devFunValue[53] = 0.25*(1.0 - gc[1]*gc[1])*(1.0 + gc[0]);
3198 devFunValue[54] = 0.25*(-2.0*gc[0])*(1.0 + gc[1])*(1.0 + gc[2]);
3199 devFunValue[55] = 0.25*(1.0 - gc[0]*gc[0])*(1.0 + gc[2]);
3200 devFunValue[56] = 0.25*(1.0 - gc[0]*gc[0])*(1.0 + gc[1]);
3202 devFunValue[57] = 0.25*(1.0 - gc[1]*gc[1])*(-1.0)*(1.0 + gc[2]);
3203 devFunValue[58] = 0.25*(-2.0*gc[1])*(1.0 - gc[0])*(1.0 + gc[2]);
3204 devFunValue[59] = 0.25*(1.0 - gc[1]*gc[1])*(1.0 - gc[0]);
3206 SHAPE_FUN_MACRO_END;
3210 * Init Qaudratic Hehahedron Reference coordinates and Shape function.
3213 void GaussInfo::hexa20bInit()
3215 LOCAL_COORD_MACRO_BEGIN;
3217 coords[0] = HEXA20B_REF[0];
3218 coords[1] = HEXA20B_REF[1];
3219 coords[2] = HEXA20B_REF[2];
3222 coords[0] = HEXA20B_REF[3];
3223 coords[1] = HEXA20B_REF[4];
3224 coords[2] = HEXA20B_REF[5];
3227 coords[0] = HEXA20B_REF[6];
3228 coords[1] = HEXA20B_REF[7];
3229 coords[2] = HEXA20B_REF[8];
3232 coords[0] = HEXA20B_REF[9];
3233 coords[1] = HEXA20B_REF[10];
3234 coords[2] = HEXA20B_REF[11];
3237 coords[0] = HEXA20B_REF[12];
3238 coords[1] = HEXA20B_REF[13];
3239 coords[2] = HEXA20B_REF[14];
3242 coords[0] = HEXA20B_REF[15];
3243 coords[1] = HEXA20B_REF[16];
3244 coords[2] = HEXA20B_REF[17];
3247 coords[0] = HEXA20B_REF[18];
3248 coords[1] = HEXA20B_REF[19];
3249 coords[2] = HEXA20B_REF[20];
3252 coords[0] = HEXA20B_REF[21];
3253 coords[1] = HEXA20B_REF[22];
3254 coords[2] = HEXA20B_REF[23];
3257 coords[0] = HEXA20B_REF[24];
3258 coords[1] = HEXA20B_REF[25];
3259 coords[2] = HEXA20B_REF[26];
3262 coords[0] = HEXA20B_REF[27];
3263 coords[1] = HEXA20B_REF[28];
3264 coords[2] = HEXA20B_REF[29];
3267 coords[0] = HEXA20B_REF[30];
3268 coords[1] = HEXA20B_REF[31];
3269 coords[2] = HEXA20B_REF[32];
3272 coords[0] = HEXA20B_REF[33];
3273 coords[1] = HEXA20B_REF[34];
3274 coords[2] = HEXA20B_REF[35];
3277 coords[0] = HEXA20B_REF[36];
3278 coords[1] = HEXA20B_REF[37];
3279 coords[2] = HEXA20B_REF[38];
3282 coords[0] = HEXA20B_REF[39];
3283 coords[1] = HEXA20B_REF[40];
3284 coords[2] = HEXA20B_REF[41];
3287 coords[0] = HEXA20B_REF[42];
3288 coords[1] = HEXA20B_REF[43];
3289 coords[2] = HEXA20B_REF[44];
3292 coords[0] = HEXA20B_REF[45];
3293 coords[1] = HEXA20B_REF[46];
3294 coords[2] = HEXA20B_REF[47];
3297 coords[0] = HEXA20B_REF[48];
3298 coords[1] = HEXA20B_REF[49];
3299 coords[2] = HEXA20B_REF[50];
3302 coords[0] = HEXA20B_REF[51];
3303 coords[1] = HEXA20B_REF[52];
3304 coords[2] = HEXA20B_REF[53];
3307 coords[0] = HEXA20B_REF[54];
3308 coords[1] = HEXA20B_REF[55];
3309 coords[2] = HEXA20B_REF[56];
3312 coords[0] = HEXA20B_REF[57];
3313 coords[1] = HEXA20B_REF[58];
3314 coords[2] = HEXA20B_REF[59];
3316 LOCAL_COORD_MACRO_END;
3318 SHAPE_FUN_MACRO_BEGIN;
3320 funValue[0] = 0.125*(1.0 - gc[0])*(1.0 - gc[1])*(1.0 - gc[2])*
3321 (-2.0 - gc[0] - gc[1] - gc[2]);
3322 funValue[3] = 0.125*(1.0 + gc[0])*(1.0 - gc[1])*(1.0 - gc[2])*
3323 (-2.0 + gc[0] - gc[1] - gc[2]);
3324 funValue[2] = 0.125*(1.0 + gc[0])*(1.0 + gc[1])*(1.0 - gc[2])*
3325 (-2.0 + gc[0] + gc[1] - gc[2]);
3326 funValue[1] = 0.125*(1.0 - gc[0])*(1.0 + gc[1])*(1.0 - gc[2])*
3327 (-2.0 - gc[0] + gc[1] - gc[2]);
3328 funValue[4] = 0.125*(1.0 - gc[0])*(1.0 - gc[1])*(1.0 + gc[2])*
3329 (-2.0 - gc[0] - gc[1] + gc[2]);
3330 funValue[7] = 0.125*(1.0 + gc[0])*(1.0 - gc[1])*(1.0 + gc[2])*
3331 (-2.0 + gc[0] - gc[1] + gc[2]);
3332 funValue[6] = 0.125*(1.0 + gc[0])*(1.0 + gc[1])*(1.0 + gc[2])*
3333 (-2.0 + gc[0] + gc[1] + gc[2]);
3334 funValue[5] = 0.125*(1.0 - gc[0])*(1.0 + gc[1])*(1.0 + gc[2])*
3335 (-2.0 - gc[0] + gc[1] + gc[2]);
3337 funValue[11] = 0.25*(1.0 - gc[0]*gc[0])*(1.0 - gc[1])*(1.0 - gc[2]);
3338 funValue[10] = 0.25*(1.0 - gc[1]*gc[1])*(1.0 + gc[0])*(1.0 - gc[2]);
3339 funValue[9] = 0.25*(1.0 - gc[0]*gc[0])*(1.0 + gc[1])*(1.0 - gc[2]);
3340 funValue[8] = 0.25*(1.0 - gc[1]*gc[1])*(1.0 - gc[0])*(1.0 - gc[2]);
3341 funValue[16] = 0.25*(1.0 - gc[2]*gc[2])*(1.0 - gc[0])*(1.0 - gc[1]);
3342 funValue[19] = 0.25*(1.0 - gc[2]*gc[2])*(1.0 + gc[0])*(1.0 - gc[1]);
3343 funValue[18] = 0.25*(1.0 - gc[2]*gc[2])*(1.0 + gc[0])*(1.0 + gc[1]);
3344 funValue[17] = 0.25*(1.0 - gc[2]*gc[2])*(1.0 - gc[0])*(1.0 + gc[1]);
3345 funValue[15] = 0.25*(1.0 - gc[0]*gc[0])*(1.0 - gc[1])*(1.0 + gc[2]);
3346 funValue[14] = 0.25*(1.0 - gc[1]*gc[1])*(1.0 + gc[0])*(1.0 + gc[2]);
3347 funValue[13] = 0.25*(1.0 - gc[0]*gc[0])*(1.0 + gc[1])*(1.0 + gc[2]);
3348 funValue[12] = 0.25*(1.0 - gc[1]*gc[1])*(1.0 - gc[0])*(1.0 + gc[2]);
3349 SHAPE_FUN_MACRO_END;
3352 void GaussInfo::hexa27aInit()
3354 LOCAL_COORD_MACRO_BEGIN;
3356 coords[0] = HEXA27A_REF[0];
3357 coords[1] = HEXA27A_REF[1];
3358 coords[2] = HEXA27A_REF[2];
3361 coords[0] = HEXA27A_REF[3];
3362 coords[1] = HEXA27A_REF[4];
3363 coords[2] = HEXA27A_REF[5];
3366 coords[0] = HEXA27A_REF[6];
3367 coords[1] = HEXA27A_REF[7];
3368 coords[2] = HEXA27A_REF[8];
3371 coords[0] = HEXA27A_REF[9];
3372 coords[1] = HEXA27A_REF[10];
3373 coords[2] = HEXA27A_REF[11];
3376 coords[0] = HEXA27A_REF[12];
3377 coords[1] = HEXA27A_REF[13];
3378 coords[2] = HEXA27A_REF[14];
3381 coords[0] = HEXA27A_REF[15];
3382 coords[1] = HEXA27A_REF[16];
3383 coords[2] = HEXA27A_REF[17];
3386 coords[0] = HEXA27A_REF[18];
3387 coords[1] = HEXA27A_REF[19];
3388 coords[2] = HEXA27A_REF[20];
3391 coords[0] = HEXA27A_REF[21];
3392 coords[1] = HEXA27A_REF[22];
3393 coords[2] = HEXA27A_REF[23];
3396 coords[0] = HEXA27A_REF[24];
3397 coords[1] = HEXA27A_REF[25];
3398 coords[2] = HEXA27A_REF[26];
3401 coords[0] = HEXA27A_REF[27];
3402 coords[1] = HEXA27A_REF[28];
3403 coords[2] = HEXA27A_REF[29];
3406 coords[0] = HEXA27A_REF[30];
3407 coords[1] = HEXA27A_REF[31];
3408 coords[2] = HEXA27A_REF[32];
3411 coords[0] = HEXA27A_REF[33];
3412 coords[1] = HEXA27A_REF[34];
3413 coords[2] = HEXA27A_REF[35];
3416 coords[0] = HEXA27A_REF[36];
3417 coords[1] = HEXA27A_REF[37];
3418 coords[2] = HEXA27A_REF[38];
3421 coords[0] = HEXA27A_REF[39];
3422 coords[1] = HEXA27A_REF[40];
3423 coords[2] = HEXA27A_REF[41];
3426 coords[0] = HEXA27A_REF[42];
3427 coords[1] = HEXA27A_REF[43];
3428 coords[2] = HEXA27A_REF[44];
3431 coords[0] = HEXA27A_REF[45];
3432 coords[1] = HEXA27A_REF[46];
3433 coords[2] = HEXA27A_REF[47];
3436 coords[0] = HEXA27A_REF[48];
3437 coords[1] = HEXA27A_REF[49];
3438 coords[2] = HEXA27A_REF[50];
3441 coords[0] = HEXA27A_REF[51];
3442 coords[1] = HEXA27A_REF[52];
3443 coords[2] = HEXA27A_REF[53];
3446 coords[0] = HEXA27A_REF[54];
3447 coords[1] = HEXA27A_REF[55];
3448 coords[2] = HEXA27A_REF[56];
3451 coords[0] = HEXA27A_REF[57];
3452 coords[1] = HEXA27A_REF[58];
3453 coords[2] = HEXA27A_REF[59];
3456 coords[0] = HEXA27A_REF[60];
3457 coords[1] = HEXA27A_REF[61];
3458 coords[2] = HEXA27A_REF[62];
3461 coords[0] = HEXA27A_REF[63];
3462 coords[1] = HEXA27A_REF[64];
3463 coords[2] = HEXA27A_REF[65];
3466 coords[0] = HEXA27A_REF[66];
3467 coords[1] = HEXA27A_REF[67];
3468 coords[2] = HEXA27A_REF[68];
3471 coords[0] = HEXA27A_REF[69];
3472 coords[1] = HEXA27A_REF[70];
3473 coords[2] = HEXA27A_REF[71];
3476 coords[0] = HEXA27A_REF[72];
3477 coords[1] = HEXA27A_REF[73];
3478 coords[2] = HEXA27A_REF[74];
3481 coords[0] = HEXA27A_REF[75];
3482 coords[1] = HEXA27A_REF[76];
3483 coords[2] = HEXA27A_REF[77];
3486 coords[0] = HEXA27A_REF[78];
3487 coords[1] = HEXA27A_REF[79];
3488 coords[2] = HEXA27A_REF[80];
3490 LOCAL_COORD_MACRO_END;
3492 SHAPE_FUN_MACRO_BEGIN;
3494 funValue[0] =0.125*gc[0]*(gc[0]-1.)*gc[1]*(gc[1]-1.)*gc[2]*(gc[2]-1.);
3495 funValue[1] =0.125*gc[0]*(gc[0]-1.)*gc[1]*(gc[1]+1.)*gc[2]*(gc[2]-1.);
3496 funValue[2] =0.125*gc[0]*(gc[0]+1.)*gc[1]*(gc[1]+1.)*gc[2]*(gc[2]-1.);
3497 funValue[3] =0.125*gc[0]*(gc[0]+1.)*gc[1]*(gc[1]-1.)*gc[2]*(gc[2]-1.);
3498 funValue[4] =0.125*gc[0]*(gc[0]-1.)*gc[1]*(gc[1]-1.)*gc[2]*(gc[2]+1.);
3499 funValue[5] =0.125*gc[0]*(gc[0]-1.)*gc[1]*(gc[1]+1.)*gc[2]*(gc[2]+1.);
3500 funValue[6] =0.125*gc[0]*(gc[0]+1.)*gc[1]*(gc[1]+1.)*gc[2]*(gc[2]+1.);
3501 funValue[7] =0.125*gc[0]*(gc[0]+1.)*gc[1]*(gc[1]-1.)*gc[2]*(gc[2]+1.);
3502 funValue[8] =0.25*gc[0]*(gc[0]-1.)*(1.-gc[1]*gc[1])*gc[2]*(gc[2]-1.);
3503 funValue[9] =0.25*(1.-gc[0]*gc[0])*gc[1]*(gc[1]+1.)*gc[2]*(gc[2]-1.);
3504 funValue[10]=0.25*gc[0]*(gc[0]+1.)*(1.-gc[1]*gc[1])*gc[2]*(gc[2]-1.);
3505 funValue[11]=0.25*(1.-gc[0]*gc[0])*gc[1]*(gc[1]-1.)*gc[2]*(gc[2]-1.);
3506 funValue[12]=0.25*gc[0]*(gc[0]-1.)*(1.-gc[1]*gc[1])*gc[2]*(gc[2]+1.);
3507 funValue[13]=0.25*(1.-gc[0]*gc[0])*gc[1]*(gc[1]+1.)*gc[2]*(gc[2]+1.);
3508 funValue[14]=0.25*gc[0]*(gc[0]+1.)*(1.-gc[1]*gc[1])*gc[2]*(gc[2]+1.);
3509 funValue[15]=0.25*(1.-gc[0]*gc[0])*gc[1]*(gc[1]-1.)*gc[2]*(gc[2]+1.);
3510 funValue[16]=0.25*gc[0]*(gc[0]-1.)*gc[1]*(gc[1]-1.)*(1.-gc[2]*gc[2]);
3511 funValue[17]=0.25*gc[0]*(gc[0]-1.)*gc[1]*(gc[1]+1.)*(1.-gc[2]*gc[2]);
3512 funValue[18]=0.25*gc[0]*(gc[0]+1.)*gc[1]*(gc[1]+1.)*(1.-gc[2]*gc[2]);
3513 funValue[19]=0.25*gc[0]*(gc[0]+1.)*gc[1]*(gc[1]-1.)*(1.-gc[2]*gc[2]);
3514 funValue[20]=0.5*(1.-gc[0]*gc[0])*(1.-gc[1]*gc[1])*gc[2]*(gc[2]-1.);
3515 funValue[21]=0.5*gc[0]*(gc[0]-1.)*(1.-gc[1]*gc[1])*(1.-gc[2]*gc[2]);
3516 funValue[22]=0.5*(1.-gc[0]*gc[0])*gc[1]*(gc[1]+1.)*(1.-gc[2]*gc[2]);
3517 funValue[23]=0.5*gc[0]*(gc[0]+1.)*(1.-gc[1]*gc[1])*(1.-gc[2]*gc[2]);
3518 funValue[24]=0.5*(1.-gc[0]*gc[0])*gc[1]*(gc[1]-1.)*(1.-gc[2]*gc[2]);
3519 funValue[25]=0.5*(1.-gc[0]*gc[0])*(1.-gc[1]*gc[1])*gc[2]*(gc[2]+1.);
3520 funValue[26]=(1.-gc[0]*gc[0])*(1.-gc[1]*gc[1])*(1.-gc[2]*gc[2]);
3522 SHAPE_FUN_MACRO_END;
3524 DEV_SHAPE_FUN_MACRO_BEGIN;
3526 devFunValue[0] = 0.125*(2*gc[0]-1.)*gc[1]*(gc[1]-1.)*gc[2]*(gc[2]-1.);
3527 devFunValue[1] = 0.125*gc[0]*(gc[0]-1.)*(2*gc[1]-1.)*gc[2]*(gc[2]-1.);
3528 devFunValue[2] = 0.125*gc[0]*(gc[0]-1.)*gc[1]*(gc[1]-1.)*(2*gc[2]-1.);
3530 devFunValue[3] = 0.125*(2*gc[0]-1.)*gc[1]*(gc[1]+1.)*gc[2]*(gc[2]-1.);
3531 devFunValue[4] = 0.125*gc[0]*(gc[0]-1.)*(2*gc[1]+1.)*gc[2]*(gc[2]-1.);
3532 devFunValue[5] = 0.125*gc[0]*(gc[0]-1.)*gc[1]*(gc[1]+1.)*(2*gc[2]-1.);
3534 devFunValue[6] = 0.125*(2*gc[0]+1.)*gc[1]*(gc[1]+1.)*gc[2]*(gc[2]-1.);
3535 devFunValue[7] = 0.125*gc[0]*(gc[0]+1.)*(2*gc[1]+1.)*gc[2]*(gc[2]-1.);
3536 devFunValue[8] = 0.125*gc[0]*(gc[0]+1.)*gc[1]*(gc[1]+1.)*(2*gc[2]-1.);
3538 devFunValue[9] = 0.125*(2*gc[0]+1.)*gc[1]*(gc[1]-1.)*gc[2]*(gc[2]-1.);
3539 devFunValue[10] = 0.125*gc[0]*(gc[0]+1.)*(2*gc[1]-1.)*gc[2]*(gc[2]-1.);
3540 devFunValue[11] = 0.125*gc[0]*(gc[0]+1.)*gc[1]*(gc[1]-1.)*(2*gc[2]-1.);
3542 devFunValue[12] = 0.125*(2*gc[0]-1.)*gc[1]*(gc[1]-1.)*gc[2]*(gc[2]+1.);
3543 devFunValue[13] = 0.125*gc[0]*(gc[0]-1.)*(2*gc[1]-1.)*gc[2]*(gc[2]+1.);
3544 devFunValue[14] = 0.125*gc[0]*(gc[0]-1.)*gc[1]*(gc[1]-1.)*(2*gc[2]+1.);
3546 devFunValue[15] = 0.125*(2*gc[0]-1.)*gc[1]*(gc[1]+1.)*gc[2]*(gc[2]+1.);
3547 devFunValue[16] = 0.125*gc[0]*(gc[0]-1.)*(2*gc[1]+1.)*gc[2]*(gc[2]+1.);
3548 devFunValue[17] = 0.125*gc[0]*(gc[0]-1.)*gc[1]*(gc[1]+1.)*(2*gc[2]+1.);
3550 devFunValue[18] = 0.125*(2*gc[0]+1.)*gc[1]*(gc[1]+1.)*gc[2]*(gc[2]+1.);
3551 devFunValue[19] = 0.125*gc[0]*(gc[0]+1.)*(2*gc[1]+1.)*gc[2]*(gc[2]+1.);
3552 devFunValue[20] = 0.125*gc[0]*(gc[0]+1.)*gc[1]*(gc[1]+1.)*(2*gc[2]+1.);
3554 devFunValue[21] = 0.125*(2*gc[0]+1.)*gc[1]*(gc[1]-1.)*gc[2]*(gc[2]+1.);
3555 devFunValue[22] = 0.125*gc[0]*(gc[0]+1.)*(2*gc[1]-1.)*gc[2]*(gc[2]+1.);
3556 devFunValue[23] = 0.125*gc[0]*(gc[0]+1.)*gc[1]*(gc[1]-1.)*(2*gc[2]+1.);
3558 devFunValue[24] = 0.25*(2*gc[0]-1.)*(1.-gc[1]*gc[1])*gc[2]*(gc[2]-1.);
3559 devFunValue[25] = 0.25*gc[0]*(gc[0]-1.)*(-2*gc[1])*gc[2]*(gc[2]-1.);
3560 devFunValue[26] = 0.25*gc[0]*(gc[0]-1.)*(1.-gc[1]*gc[1])*(2*gc[2]-1.);
3562 devFunValue[27] = 0.25*(-2*gc[0])*gc[1]*(gc[1]+1.)*gc[2]*(gc[2]-1.);
3563 devFunValue[28] = 0.25*(1.-gc[0]*gc[0])*(2*gc[1]+1.)*gc[2]*(gc[2]-1.);
3564 devFunValue[29] = 0.25*(1.-gc[0]*gc[0])*gc[1]*(gc[1]+1.)*(2*gc[2]-1.);
3566 devFunValue[30] = 0.25*(2*gc[0]+1.)*(1.-gc[1]*gc[1])*gc[2]*(gc[2]-1.);
3567 devFunValue[31] = 0.25*gc[0]*(gc[0]+1.)*(-2*gc[1])*gc[2]*(gc[2]-1.);
3568 devFunValue[32] = 0.25*gc[0]*(gc[0]+1.)*(1.-gc[1]*gc[1])*(2*gc[2]-1.);
3570 devFunValue[33] = 0.25*(-2*gc[0])*gc[1]*(gc[1]-1.)*gc[2]*(gc[2]-1.);
3571 devFunValue[34] = 0.25*(1.-gc[0]*gc[0])*(2*gc[1]-1.)*gc[2]*(gc[2]-1.);
3572 devFunValue[35] = 0.25*(1.-gc[0]*gc[0])*gc[1]*(gc[1]-1.)*(2*gc[2]-1.);
3574 devFunValue[36] = 0.25*(2*gc[0]-1.)*(1.-gc[1]*gc[1])*gc[2]*(gc[2]+1.);
3575 devFunValue[37] = 0.25*gc[0]*(gc[0]-1.)*(-2*gc[1])*gc[2]*(gc[2]+1.);
3576 devFunValue[38] = 0.25*gc[0]*(gc[0]-1.)*(1.-gc[1]*gc[1])*(2*gc[2]+1.);
3578 devFunValue[39] = 0.25*(-2*gc[0])*gc[1]*(gc[1]+1.)*gc[2]*(gc[2]+1.);
3579 devFunValue[40] = 0.25*(1.-gc[0]*gc[0])*(2*gc[1]+1.)*gc[2]*(gc[2]+1.);
3580 devFunValue[41] = 0.25*(1.-gc[0]*gc[0])*gc[1]*(gc[1]+1.)*(2*gc[2]+1.);
3582 devFunValue[42] = 0.25*(2*gc[0]+1.)*(1.-gc[1]*gc[1])*gc[2]*(gc[2]+1.);
3583 devFunValue[43] = 0.25*gc[0]*(gc[0]+1.)*(-2*gc[1])*gc[2]*(gc[2]+1.);
3584 devFunValue[44] = 0.25*gc[0]*(gc[0]+1.)*(1.-gc[1]*gc[1])*(2*gc[2]+1.);
3586 devFunValue[45] = 0.25*(-2*gc[0])*gc[1]*(gc[1]-1.)*gc[2]*(gc[2]+1.);
3587 devFunValue[46] = 0.25*(1.-gc[0]*gc[0])*(2*gc[1]-1.)*gc[2]*(gc[2]+1.);
3588 devFunValue[47] = 0.25*(1.-gc[0]*gc[0])*gc[1]*(gc[1]-1.)*(2*gc[2]+1.);
3590 devFunValue[48] = 0.25*(2*gc[0]-1.)*gc[1]*(gc[1]-1.)*(1.-gc[2]*gc[2]);
3591 devFunValue[49] = 0.25*gc[0]*(gc[0]-1.)*(2*gc[1]-1.)*(1.-gc[2]*gc[2]);
3592 devFunValue[50] = 0.25*gc[0]*(gc[0]-1.)*gc[1]*(gc[1]-1.)*(-2*gc[2]);
3594 devFunValue[51] = 0.25*(2*gc[0]-1.)*gc[1]*(gc[1]+1.)*(1.-gc[2]*gc[2]);
3595 devFunValue[52] = 0.25*gc[0]*(gc[0]-1.)*(2*gc[1]+1.)*(1.-gc[2]*gc[2]);
3596 devFunValue[53] = 0.25*gc[0]*(gc[0]-1.)*gc[1]*(gc[1]+1.)*(-2*gc[2]);
3598 devFunValue[54] = 0.25*(2*gc[0]+1.)*gc[1]*(gc[1]+1.)*(1.-gc[2]*gc[2]);
3599 devFunValue[55] = 0.25*gc[0]*(gc[0]+1.)*(2*gc[1]+1.)*(1.-gc[2]*gc[2]);
3600 devFunValue[56] = 0.25*gc[0]*(gc[0]+1.)*gc[1]*(gc[1]+1.)*(-2*gc[2]);
3602 devFunValue[57] = 0.25*(2*gc[0]+1.)*gc[1]*(gc[1]-1.)*(1.-gc[2]*gc[2]);
3603 devFunValue[58] = 0.25*gc[0]*(gc[0]+1.)*(2*gc[1]-1.)*(1.-gc[2]*gc[2]);
3604 devFunValue[59] = 0.25*gc[0]*(gc[0]+1.)*gc[1]*(gc[1]-1.)*(-2*gc[2]);
3606 devFunValue[60] = 0.5*(-2*gc[0])*(1.-gc[1]*gc[1])*gc[2]*(gc[2]-1.);
3607 devFunValue[61] = 0.5*(1.-gc[0]*gc[0])*(-2*gc[1])*gc[2]*(gc[2]-1.);
3608 devFunValue[62] = 0.5*(1.-gc[0]*gc[0])*(1.-gc[1]*gc[1])*(2*gc[2]-1.);
3610 devFunValue[63] = 0.5*(2*gc[0]-1.)*(1.-gc[1]*gc[1])*(1.-gc[2]*gc[2]);
3611 devFunValue[64] = 0.5*gc[0]*(gc[0]-1.)*(-2*gc[1])*(1.-gc[2]*gc[2]);
3612 devFunValue[65] = 0.5*gc[0]*(gc[0]-1.)*(1.-gc[1]*gc[1])*(-2*gc[2]);
3614 devFunValue[66] = 0.5*(-2*gc[0])*gc[1]*(gc[1]+1.)*(1.-gc[2]*gc[2]);
3615 devFunValue[67] = 0.5*(1.-gc[0]*gc[0])*(2*gc[1]+1.)*(1.-gc[2]*gc[2]);
3616 devFunValue[68] = 0.5*(1.-gc[0]*gc[0])*gc[1]*(gc[1]+1.)*(-2*gc[2]);
3618 devFunValue[69] = 0.5*(2*gc[0]+1.)*(1.-gc[1]*gc[1])*(1.-gc[2]*gc[2]);
3619 devFunValue[70] = 0.5*gc[0]*(gc[0]+1.)*(-2*gc[1])*(1.-gc[2]*gc[2]);
3620 devFunValue[71] = 0.5*gc[0]*(gc[0]+1.)*(1.-gc[1]*gc[1])*(-2*gc[2]);
3622 devFunValue[72] = 0.5*(-2*gc[0])*gc[1]*(gc[1]-1.)*(1.-gc[2]*gc[2]);
3623 devFunValue[73] = 0.5*(1.-gc[0]*gc[0])*(2*gc[1]-1.)*(1.-gc[2]*gc[2]);
3624 devFunValue[74] = 0.5*(1.-gc[0]*gc[0])*gc[1]*(gc[1]-1.)*(-2*gc[2]);
3626 devFunValue[75] = 0.5*(-2*gc[0])*(1.-gc[1]*gc[1])*gc[2]*(gc[2]+1.);
3627 devFunValue[76] = 0.5*(1.-gc[0]*gc[0])*(-2*gc[1])*gc[2]*(gc[2]+1.);
3628 devFunValue[77] = 0.5*(1.-gc[0]*gc[0])*(1.-gc[1]*gc[1])*(2*gc[2]+1.);
3630 devFunValue[78] = (-2*gc[0])*(1.-gc[1]*gc[1])*(1.-gc[2]*gc[2]);
3631 devFunValue[79] = (1.-gc[0]*gc[0])*(-2*gc[1])*(1.-gc[2]*gc[2]);
3632 devFunValue[80] = (1.-gc[0]*gc[0])*(1.-gc[1]*gc[1])*(-2*gc[2]);
3634 DEV_SHAPE_FUN_MACRO_END;
3637 ////////////////////////////////////////////////////////////////////////////////////////////////
3638 // GAUSS COORD CLASS //
3639 ////////////////////////////////////////////////////////////////////////////////////////////////
3643 GaussCoords::GaussCoords()
3650 GaussCoords::~GaussCoords()
3652 GaussInfoVector::iterator it = _my_gauss_info.begin();
3653 for( ; it != _my_gauss_info.end(); it++ )
3661 * Add Gauss localization info
3663 void GaussCoords::addGaussInfo( NormalizedCellType theGeometry,
3665 const double* theGaussCoord,
3666 mcIdType theNbGauss,
3667 const double* theReferenceCoord,
3670 GaussInfoVector::iterator it = _my_gauss_info.begin();
3671 for( ; it != _my_gauss_info.end(); it++ )
3673 if( (*it)->getCellType() == theGeometry )
3679 DataVector aGaussCoord;
3680 for(int i = 0 ; i < theNbGauss*coordDim; i++ )
3681 aGaussCoord.push_back(theGaussCoord[i]);
3683 DataVector aReferenceCoord;
3684 for(int i = 0 ; i < theNbRef*coordDim; i++ )
3685 aReferenceCoord.push_back(theReferenceCoord[i]);
3688 GaussInfo* info = new GaussInfo( theGeometry, aGaussCoord, FromIdType<int>(theNbGauss), aReferenceCoord, FromIdType<int>(theNbRef));
3689 info->initLocalInfo();
3691 //If info with cell type doesn't exist add it
3692 if( it == _my_gauss_info.end() )
3694 _my_gauss_info.push_back(info);
3696 // If information exists, update it
3700 std::size_t index = std::distance(_my_gauss_info.begin(),it);
3702 _my_gauss_info[index] = info;
3708 * Calculate gauss points coordinates
3710 double* GaussCoords::calculateCoords( NormalizedCellType theGeometry,
3711 const double *theNodeCoords,
3712 const int theSpaceDim,
3713 const mcIdType *theIndex)
3715 const GaussInfo *info = getInfoGivenCellType(theGeometry);
3716 int nbCoords = theSpaceDim * info->getNbGauss();
3717 double *aCoords = new double[nbCoords];
3718 calculateCoordsAlg(info,theNodeCoords,theSpaceDim,theIndex,aCoords);
3723 void GaussCoords::calculateCoords( NormalizedCellType theGeometry, const double *theNodeCoords, const int theSpaceDim, const mcIdType *theIndex, double *result)
3725 const GaussInfo *info = getInfoGivenCellType(theGeometry);
3726 calculateCoordsAlg(info,theNodeCoords,theSpaceDim,theIndex,result);
3729 void GaussCoords::calculateCoordsAlg(const GaussInfo *info, const double* theNodeCoords, const int theSpaceDim, const mcIdType *theIndex, double *result)
3731 int aConn = info->getNbRef();
3733 int nbCoords = theSpaceDim * info->getNbGauss();
3734 std::fill(result,result+nbCoords,0.);
3736 for( int gaussId = 0; gaussId < info->getNbGauss(); gaussId++ )
3738 double *coord=result+gaussId*theSpaceDim;
3739 const double *function=info->getFunctionValues(gaussId);
3740 for ( int connId = 0; connId < aConn ; connId++ )
3742 const double* nodeCoord = theNodeCoords + (theIndex[connId]*theSpaceDim);
3743 for( int dimId = 0; dimId < theSpaceDim; dimId++ )
3744 coord[dimId] += nodeCoord[dimId]*function[connId];
3749 const GaussInfo *GaussCoords::getInfoGivenCellType(NormalizedCellType cellType)
3751 GaussInfoVector::const_iterator it = _my_gauss_info.begin();
3752 //Try to find gauss localization info
3753 for( ; it != _my_gauss_info.end() ; it++ )
3754 if( (*it)->getCellType()==cellType)
3756 throw INTERP_KERNEL::Exception("Can't find gauss localization information !");