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"
29 using namespace INTERP_KERNEL;
31 const double GaussInfo::SEG2A_REF[2]={-1.0, 1.0};
33 const double GaussInfo::SEG2B_REF[2]={0., 1.0};
35 const double GaussInfo::SEG3_REF[3]={-1.0, 1.0, 0.0};
37 const double GaussInfo::TRIA3A_REF[6]={-1.0, 1.0, -1.0, -1.0, 1.0, -1.0};
39 const double GaussInfo::TRIA3B_REF[6]={0.0, 0.0, 1.0, 0.0, 0.0, 1.0};
41 const double GaussInfo::TRIA6A_REF[12]={-1.0, 1.0, -1.0, -1.0, 1.0, -1.0, -1.0, 1.0, 0.0, -1.0, 0.0, 0.0};
43 const double GaussInfo::TRIA6B_REF[12]={0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 0.5, 0.0, 0.5, 0.5, 0.0, 0.5};
45 const double GaussInfo::TRIA7A_REF[14]={0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 0.5, 0.0, 0.5, 0.5, 0.0, 0.5, 0.3333333333333333, 0.3333333333333333};
47 const double GaussInfo::QUAD4A_REF[8]={-1.0, 1.0, -1.0, -1.0, 1.0, -1.0, 1.0, 1.0};
49 const double GaussInfo::QUAD4B_REF[8]={-1.0, -1.0, 1.0, -1.0, 1.0, 1.0, -1.0, 1.0};
51 const double GaussInfo::QUAD8A_REF[16]={-1.0, 1.0, -1.0, -1.0, 1.0, -1.0, 1.0, 1.0, -1.0, 0.0, 0.0, -1.0, 1.0, 0.0, 0.0, 1.0};
53 const double GaussInfo::QUAD8B_REF[16]={-1.0, -1.0, 1.0, -1.0, 1.0, 1.0, -1.0, 1.0, 0.0, -1.0, 1.0, 0.0, 0.0, 1.0, -1.0, 0.0};
55 const double GaussInfo::QUAD9A_REF[18]={-1.0, -1.0, 1.0, -1.0, 1.0, 1.0, -1.0, 1.0, 0.0, -1.0, 1.0, 0.0, 0.0, 1.0, -1.0, 0.0, 0.0, 0.0};
57 const double GaussInfo::TETRA4A_REF[12]={0.0, 1.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0};
59 const double GaussInfo::TETRA4B_REF[12]={0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0, 1.0, 0.0, 0.0};
61 const double GaussInfo::TETRA10A_REF[30]={0.0, 1.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.5, 0.5, 0.0, 0.0, 0.5, 0.0, 0.5, 0.0, 0.5, 0.5, 0.0, 0.5, 0.0, 0.5, 0.5, 0.0, 0.0};
63 const double GaussInfo::TETRA10B_REF[30]={0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0, 1.0, 0.0, 0.0, 0.0, 0.5, 0.0, 0.0, 0.0, 0.5, 0.0, 0.5, 0.5, 0.5, 0.5, 0.0, 0.5, 0.0, 0.0, 0.5, 0.0, 0.5};
65 const double GaussInfo::PYRA5A_REF[15]={1.0, 0.0, 0.0, 0.0, 1.0, 0.0, -1.0, 0.0, 0.0, 0.0, -1.0, 0.0, 0.0, 0.0, 1.0};
67 const double GaussInfo::PYRA5B_REF[15]={1.0, 0.0, 0.0, 0.0, -1.0, 0.0, -1.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 1.0};
69 const double GaussInfo::PYRA13A_REF[39]={1.0, 0.0, 0.0, 0.0, 1.0, 0.0, -1.0, 0.0, 0.0, 0.0, -1.0, 0.0, 0.0, 0.0, 1.0, 0.5, 0.5, 0.0, -0.5, 0.5, 0.0, -0.5, -0.5, 0.0, 0.5, -0.5, 0.0, 0.5, 0.0, 0.5, 0.0, 0.5, 0.5, -0.5, 0.0, 0.5, 0.0, -0.5, 0.5};
71 const double GaussInfo::PYRA13B_REF[39]={1.0, 0.0, 0.0, 0.0, -1.0, 0.0, -1.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 1.0, 0.5, -0.5, 0.0, -0.5, -0.5, 0.0, -0.5, 0.5, 0.0, 0.5, 0.5, 0.0, 0.5, 0.0, 0.5, 0.0, -0.5, 0.5, -0.5, 0.0, 0.5, 0.0, 0.5, 0.5};
73 const double GaussInfo::PENTA6A_REF[18]={-1.0, 1.0, 0.0, -1.0, -0.0, 1.0, -1.0, 0.0, 0.0, 1.0, 1.0, 0.0, 1.0, 0.0, 1.0, 1.0, 0.0, 0.0};
75 const double GaussInfo::PENTA6B_REF[18]={-1.0, 1.0, 0.0, -1.0, 0.0, 0.0, -1.0, -0.0, 1.0, 1.0, 1.0, 0.0, 1.0, 0.0, 0.0, 1.0, 0.0, 1.0};
77 const double GaussInfo::PENTA15A_REF[45]={-1.0, 1.0, 0.0, -1.0, -0.0, 1.0, -1.0, 0.0, 0.0, 1.0, 1.0, 0.0, 1.0, 0.0, 1.0, 1.0, 0.0, 0.0, -1.0, 0.5, 0.5, -1.0, 0.0, 0.5, -1.0, 0.5, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 1.0, 0.5, 0.5, 1.0, 0.0, 0.5, 1.0, 0.5, 0.0};
79 const double GaussInfo::PENTA15B_REF[45]={-1.0, 1.0, 0.0, -1.0, 0.0, 0.0, -1.0, -0.0, 1.0, 1.0, 1.0, 0.0, 1.0, 0.0, 0.0, 1.0, 0.0, 1.0, -1.0, 0.5, 0.0, -1.0, 0.0, 0.5, -1.0, 0.5, 0.5, 1.0, 0.5, 0.0, 1.0, 0.0, 0.5, 1.0, 0.5, 0.5, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0};
81 const double GaussInfo::PENTA18A_REF[54]={-1.0, 1.0, 0.0, -1.0, -0.0, 1.0, -1.0, 0.0, 0.0, 1.0, 1.0, 0.0, 1.0, 0.0, 1.0, 1.0, 0.0, 0.0, -1.0, 0.5, 0.5, -1.0, 0.0, 0.5, -1.0, 0.5, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 1.0, 0.5, 0.5, 1.0, 0.0, 0.5, 1.0, 0.5, 0.0, 0.0, 0.5, 0.5, 0.0, 0.0, 0.5, 0.0, 0.5, 0.0};
83 const double GaussInfo::PENTA18B_REF[54]={-1.0, 1.0, 0.0, -1.0, 0.0, 0.0, -1.0, -0.0, 1.0, 1.0, 1.0, 0.0, 1.0, 0.0, 0.0, 1.0, 0.0, 1.0, -1.0, 0.5, 0.0, -1.0, 0.0, 0.5, -1.0, 0.5, 0.5, 1.0, 0.5, 0.0, 1.0, 0.0, 0.5, 1.0, 0.5, 0.5, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.5, 0.0, 0.0, 0.0, 0.5, 0.0, 0.5, 0.5};
85 const double GaussInfo::HEXA8A_REF[24]={-1.0, -1.0, -1.0, 1.0, -1.0, -1.0, 1.0, 1.0, -1.0, -1.0, 1.0, -1.0, -1.0, -1.0, 1.0, 1.0, -1.0, 1.0, 1.0, 1.0, 1.0, -1.0, 1.0, 1.0};
87 const double GaussInfo::HEXA8B_REF[24]={-1.0, -1.0, -1.0, -1.0, 1.0, -1.0, 1.0, 1.0, -1.0, 1.0, -1.0, -1.0, -1.0, -1.0, 1.0, -1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, -1.0, 1.0};
89 const double GaussInfo::HEXA20A_REF[60]={-1.0, -1.0, -1.0, 1.0, -1.0, -1.0, 1.0, 1.0, -1.0, -1.0, 1.0, -1.0, -1.0, -1.0, 1.0, 1.0, -1.0, 1.0, 1.0, 1.0, 1.0, -1.0, 1.0, 1.0, 0.0, -1.0, -1.0, 1.0, 0.0, -1.0, 0.0, 1.0, -1.0, -1.0, 0.0, -1.0, -1.0, -1.0, 0.0, 1.0, -1.0, 0.0, 1.0, 1.0, 0.0, -1.0, 1.0, 0.0, 0.0, -1.0, 1.0, 1.0, 0.0, 1.0, 0.0, 1.0, 1.0, -1.0, 0.0, 1.0};
91 const double GaussInfo::HEXA20B_REF[60]={-1.0, -1.0, -1.0, -1.0, 1.0, -1.0, 1.0, 1.0, -1.0, 1.0, -1.0, -1.0, -1.0, -1.0, 1.0, -1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, -1.0, 1.0, -1.0, 0.0, -1.0, 0.0, 1.0, -1.0, 1.0, 0.0, -1.0, 0.0, -1.0, -1.0, -1.0, 0.0, 1.0, 0.0, 1.0, 1.0, 1.0, 0.0, 1.0, 0.0, -1.0, 1.0, -1.0, -1.0, 0.0, -1.0, 1.0, 0.0, 1.0, 1.0, 0.0, 1.0, -1.0, 0.0};
93 const double GaussInfo::HEXA27A_REF[81]={-1.0, -1.0, -1.0, -1.0, 1.0, -1.0, 1.0, 1.0, -1.0, 1.0, -1.0, -1.0, -1.0, -1.0, 1.0, -1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, -1.0, 1.0, -1.0, 0.0, -1.0, 0.0, 1.0, -1.0, 1.0, 0.0, -1.0, 0.0, -1.0, -1.0, -1.0, 0.0, 1.0, 0.0, 1.0, 1.0, 1.0, 0.0, 1.0, 0.0, -1.0, 1.0, -1.0, -1.0, 0.0, -1.0, 1.0, 0.0, 1.0, 1.0, 0.0, 1.0, -1.0, 0.0, 0.0, 0.0, -1.0, -1.0, 0.0, 0.0, 0.0, 1.0, 0.0, 1.0, 0.0, 0.0, 0.0, -1.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0};
95 //Define common part of the code in the MACRO
96 //---------------------------------------------------------------
97 #define LOCAL_COORD_MACRO_BEGIN \
98 _my_local_reference_coord.resize( _my_local_ref_dim*_my_local_nb_ref ); \
99 for( int refId = 0; refId < _my_local_nb_ref; refId++ ) \
101 double* coords = &_my_local_reference_coord[ refId*_my_local_ref_dim ]; \
105 //---------------------------------------------------------------
106 #define LOCAL_COORD_MACRO_END \
110 //---------------------------------------------------------------
111 #define SHAPE_FUN_MACRO_BEGIN \
112 for( int gaussId = 0 ; gaussId < _my_nb_gauss ; gaussId++ ) \
114 double* funValue = &_my_function_value[ gaussId * _my_nb_ref ]; \
115 const double* gc = &_my_gauss_coord[ gaussId * getGaussCoordDim() ];
117 //---------------------------------------------------------------
118 #define SHAPE_FUN_MACRO_END \
121 #define DEV_SHAPE_FUN_MACRO_BEGIN \
122 for( int gaussId = 0 ; gaussId < _my_nb_gauss ; gaussId++ ) \
124 double *devFunValue = _my_derivative_func_value.data() + gaussId * getReferenceCoordDim() * _my_nb_ref; \
125 const double *gc = _my_gauss_coord.data() + gaussId * getGaussCoordDim();
127 #define DEV_SHAPE_FUN_MACRO_END \
130 #define CHECK_MACRO \
133 std::ostringstream stream; \
134 stream << "Error in the gauss localization for the cell with type "; \
135 stream << cellModel.getRepr(); \
137 throw INTERP_KERNEL::Exception(stream.str().c_str()); \
141 //---------------------------------------------------------------
142 static bool IsEqual(double theLeft, double theRight)
144 static double EPS = 1.0E-3;
145 if(fabs(theLeft) + fabs(theRight) > EPS)
146 return fabs(theLeft-theRight)/(fabs(theLeft)+fabs(theRight)) < EPS;
151 ////////////////////////////////////////////////////////////////////////////////////////////////
152 // GAUSS INFO CLASS //
153 ////////////////////////////////////////////////////////////////////////////////////////////////
156 * Constructor of the GaussInfo
158 GaussInfo::GaussInfo( NormalizedCellType theGeometry,
159 const DataVector& theGaussCoord,
161 const DataVector& theReferenceCoord,
163 _my_geometry(theGeometry),
164 _my_nb_gauss(theNbGauss),
165 _my_gauss_coord(theGaussCoord),
166 _my_nb_ref(theNbRef),
167 _my_reference_coord(theReferenceCoord)
169 //Allocate shape function values
170 _my_function_value.resize( _my_nb_gauss * _my_nb_ref );
171 _my_derivative_func_value.resize( _my_nb_gauss * _my_nb_ref * getReferenceCoordDim() );
177 GaussInfo::~GaussInfo()
182 * Return dimension of the gauss coordinates
184 int GaussInfo::getGaussCoordDim() const
188 return (int)_my_gauss_coord.size()/_my_nb_gauss;
197 * Return dimension of the reference coordinates
199 int GaussInfo::getReferenceCoordDim() const
203 return (int)(_my_reference_coord.size()/_my_nb_ref);
212 * Return type of the cell.
214 NormalizedCellType GaussInfo::getCellType() const
220 * Return Nb of the gauss points.
222 int GaussInfo::getNbGauss() const
228 * Return Nb of the reference coordinates.
230 int GaussInfo::getNbRef() const
235 GaussInfo GaussInfo::convertToLinear() const
241 std::vector<double> a(SEG3_REF,SEG3_REF+3);
242 if(IsSatisfy(a,_my_reference_coord))
244 std::vector<double> c(SEG2A_REF,SEG2A_REF+2);
245 return GaussInfo(NORM_SEG2,_my_gauss_coord,getNbGauss(),c,2);
247 throw INTERP_KERNEL::Exception("GaussInfo::convertToLinear : not recognized pattern for SEG3 !");
251 std::vector<double> a(TRIA6A_REF,TRIA6A_REF+12),b(TRIA6B_REF,TRIA6B_REF+12);
252 if(IsSatisfy(a,_my_reference_coord))
254 std::vector<double> c(TRIA3A_REF,TRIA3A_REF+6);
255 return GaussInfo(NORM_TRI3,_my_gauss_coord,getNbGauss(),c,3);
257 if(IsSatisfy(b,_my_reference_coord))
259 std::vector<double> c(TRIA3B_REF,TRIA3B_REF+6);
260 return GaussInfo(NORM_TRI3,_my_gauss_coord,getNbGauss(),c,3);
262 throw INTERP_KERNEL::Exception("GaussInfo::convertToLinear : not recognized pattern for TRI6 !");
266 std::vector<double> a(TRIA7A_REF,TRIA7A_REF+14);
267 if(IsSatisfy(a,_my_reference_coord))
269 std::vector<double> c(TRIA3B_REF,TRIA3B_REF+6);
270 return GaussInfo(NORM_TRI3,_my_gauss_coord,getNbGauss(),c,3);
272 throw INTERP_KERNEL::Exception("GaussInfo::convertToLinear : not recognized pattern for TRI7 !");
276 std::vector<double> a(QUAD8A_REF,QUAD8A_REF+16),b(QUAD8B_REF,QUAD8B_REF+16);
277 if(IsSatisfy(a,_my_reference_coord))
279 std::vector<double> c(QUAD4A_REF,QUAD4A_REF+8);
280 return GaussInfo(NORM_QUAD4,_my_gauss_coord,getNbGauss(),c,4);
282 if(IsSatisfy(b,_my_reference_coord))
284 std::vector<double> c(QUAD4B_REF,QUAD4B_REF+8);
285 return GaussInfo(NORM_QUAD4,_my_gauss_coord,getNbGauss(),c,4);
287 throw INTERP_KERNEL::Exception("GaussInfo::convertToLinear : not recognized pattern for QUAD8 !");
291 std::vector<double> a(QUAD9A_REF,QUAD9A_REF+18);
292 if(IsSatisfy(a,_my_reference_coord))
294 std::vector<double> c(QUAD4B_REF,QUAD4B_REF+8);
295 return GaussInfo(NORM_QUAD4,_my_gauss_coord,getNbGauss(),c,4);
297 throw INTERP_KERNEL::Exception("GaussInfo::convertToLinear : not recognized pattern for QUAD9 !");
301 std::vector<double> a(TETRA10A_REF,TETRA10A_REF+30),b(TETRA10B_REF,TETRA10B_REF+30);
302 if(IsSatisfy(a,_my_reference_coord))
304 std::vector<double> c(TETRA4A_REF,TETRA4A_REF+12);
305 return GaussInfo(NORM_TETRA4,_my_gauss_coord,getNbGauss(),c,4);
307 if(IsSatisfy(b,_my_reference_coord))
309 std::vector<double> c(TETRA4B_REF,TETRA4B_REF+12);
310 return GaussInfo(NORM_TETRA4,_my_gauss_coord,getNbGauss(),c,4);
312 throw INTERP_KERNEL::Exception("GaussInfo::convertToLinear : not recognized pattern for TETRA10 !");
316 std::vector<double> a(PYRA13A_REF,PYRA13A_REF+39),b(PYRA13B_REF,PYRA13B_REF+39);
317 if(IsSatisfy(a,_my_reference_coord))
319 std::vector<double> c(PYRA5A_REF,PYRA5A_REF+15);
320 return GaussInfo(NORM_PYRA5,_my_gauss_coord,getNbGauss(),c,5);
322 if(IsSatisfy(b,_my_reference_coord))
324 std::vector<double> c(PYRA5B_REF,PYRA5B_REF+15);
325 return GaussInfo(NORM_PYRA5,_my_gauss_coord,getNbGauss(),c,5);
327 throw INTERP_KERNEL::Exception("GaussInfo::convertToLinear : not recognized pattern for PYRA13 !");
331 std::vector<double> a(PENTA15A_REF,PENTA15A_REF+45),b(PENTA15B_REF,PENTA15B_REF+45);
332 if(IsSatisfy(a,_my_reference_coord))
334 std::vector<double> c(PENTA6A_REF,PENTA6A_REF+18);
335 return GaussInfo(NORM_PENTA6,_my_gauss_coord,getNbGauss(),c,6);
337 if(IsSatisfy(b,_my_reference_coord))
339 std::vector<double> c(PENTA6B_REF,PENTA6B_REF+18);
340 return GaussInfo(NORM_PENTA6,_my_gauss_coord,getNbGauss(),c,6);
342 throw INTERP_KERNEL::Exception("GaussInfo::convertToLinear : not recognized pattern for PENTA15 !");
346 std::vector<double> a(PENTA18A_REF,PENTA18A_REF+54),b(PENTA18B_REF,PENTA18B_REF+54);
347 if(IsSatisfy(a,_my_reference_coord))
349 std::vector<double> c(PENTA6A_REF,PENTA6A_REF+18);
350 return GaussInfo(NORM_PENTA6,_my_gauss_coord,getNbGauss(),c,6);
352 if(IsSatisfy(b,_my_reference_coord))
354 std::vector<double> c(PENTA6B_REF,PENTA6B_REF+18);
355 return GaussInfo(NORM_PENTA6,_my_gauss_coord,getNbGauss(),c,6);
357 throw INTERP_KERNEL::Exception("GaussInfo::convertToLinear : not recognized pattern for PENTA18 !");
361 std::vector<double> a(HEXA20A_REF,HEXA20A_REF+60),b(HEXA20B_REF,HEXA20B_REF+60);
362 if(IsSatisfy(a,_my_reference_coord))
364 std::vector<double> c(HEXA8A_REF,HEXA8A_REF+24);
365 return GaussInfo(NORM_HEXA8,_my_gauss_coord,getNbGauss(),c,8);
367 if(IsSatisfy(b,_my_reference_coord))
369 std::vector<double> c(HEXA8B_REF,HEXA8B_REF+24);
370 return GaussInfo(NORM_HEXA8,_my_gauss_coord,getNbGauss(),c,8);
372 throw INTERP_KERNEL::Exception("GaussInfo::convertToLinear : not recognized pattern for HEXA20 !");
376 std::vector<double> a(HEXA27A_REF,HEXA27A_REF+81);
377 if(IsSatisfy(a,_my_reference_coord))
379 std::vector<double> c(HEXA8B_REF,HEXA8B_REF+24);
380 return GaussInfo(NORM_HEXA8,_my_gauss_coord,getNbGauss(),c,8);
382 throw INTERP_KERNEL::Exception("GaussInfo::convertToLinear : not recognized pattern for HEXA27 !");
385 throw INTERP_KERNEL::Exception("GaussInfo::convertToLinear : not implemented yet for other types than TETRA10, HEXA20, HEXA27, TRI3, QUAD8, QUAD8, PYRA13, PENTA15 !");
390 bool GaussInfo::IsSatisfy(const std::vector<double>& ref1, const std::vector<double>& ref2)
392 std::size_t sz(ref1.size());
395 for(std::size_t i=0;i<sz;i++)
396 if(!IsEqual(ref1[i],ref2[i]))
404 bool GaussInfo::isSatisfy()
407 bool anIsSatisfy = ((_my_local_nb_ref == _my_nb_ref) && (_my_local_ref_dim == getReferenceCoordDim()));
411 for( int refId = 0; refId < _my_local_nb_ref; refId++ )
413 double* refCoord = &_my_reference_coord[ refId*_my_local_ref_dim ];
414 double* localRefCoord = &_my_local_reference_coord[ refId*_my_local_ref_dim ];
415 bool anIsEqual = false;
416 for( int dimId = 0; dimId < _my_local_ref_dim; dimId++ )
418 anIsEqual = IsEqual( localRefCoord[dimId], refCoord[dimId]);
429 std::vector<double> GaussInfo::NormalizeCoordinatesIfNecessary(NormalizedCellType ct, int inputDim, const std::vector<double>& inputArray)
431 std::size_t sz(inputArray.size()),dim((std::size_t)inputDim);
433 throw INTERP_KERNEL::Exception("GaussInfo::NormalizeCoordinatesIfNecessary : invalid dimension ! Must be !=0 !");
435 throw INTERP_KERNEL::Exception("GaussInfo::NormalizeCoordinatesIfNecessary : invalid input array ! Inconsistent with the given dimension !");
436 const CellModel& cm(CellModel::GetCellModel(ct));
437 std::size_t baseDim((std::size_t)cm.getDimension());
440 std::size_t nbOfItems(sz/dim);
441 std::vector<double> ret(nbOfItems*baseDim);
444 for(std::size_t i=0;i<nbOfItems;i++)
448 ret[i*baseDim+j]=inputArray[i*dim+j];
455 for(std::size_t i=0;i<nbOfItems;i++)
459 ret[i*baseDim+j]=inputArray[i*dim+j];
465 std::vector<double> GaussInfo::GetDefaultReferenceCoordinatesOf(NormalizedCellType ct)
469 case INTERP_KERNEL::NORM_SEG2:
470 return std::vector<double>(SEG2A_REF,SEG2A_REF+sizeof(SEG2A_REF)/sizeof(double));
471 case INTERP_KERNEL::NORM_SEG3:
472 return std::vector<double>(SEG3_REF,SEG3_REF+sizeof(SEG3_REF)/sizeof(double));
473 case INTERP_KERNEL::NORM_TRI3:
474 return std::vector<double>(TRIA3A_REF,TRIA3A_REF+sizeof(TRIA3A_REF)/sizeof(double));
475 case INTERP_KERNEL::NORM_TRI6:
476 return std::vector<double>(TRIA6A_REF,TRIA6A_REF+sizeof(TRIA6A_REF)/sizeof(double));
477 case INTERP_KERNEL::NORM_TRI7:
478 return std::vector<double>(TRIA7A_REF,TRIA7A_REF+sizeof(TRIA7A_REF)/sizeof(double));
479 case INTERP_KERNEL::NORM_QUAD4:
480 return std::vector<double>(QUAD4A_REF,QUAD4A_REF+sizeof(QUAD4A_REF)/sizeof(double));
481 case INTERP_KERNEL::NORM_QUAD8:
482 return std::vector<double>(QUAD8A_REF,QUAD8A_REF+sizeof(QUAD8A_REF)/sizeof(double));
483 case INTERP_KERNEL::NORM_QUAD9:
484 return std::vector<double>(QUAD9A_REF,QUAD9A_REF+sizeof(QUAD9A_REF)/sizeof(double));
485 case INTERP_KERNEL::NORM_TETRA4:
486 return std::vector<double>(TETRA4A_REF,TETRA4A_REF+sizeof(TETRA4A_REF)/sizeof(double));
487 case INTERP_KERNEL::NORM_TETRA10:
488 return std::vector<double>(TETRA10A_REF,TETRA10A_REF+sizeof(TETRA10A_REF)/sizeof(double));
489 case INTERP_KERNEL::NORM_PYRA5:
490 return std::vector<double>(PYRA5A_REF,PYRA5A_REF+sizeof(PYRA5A_REF)/sizeof(double));
491 case INTERP_KERNEL::NORM_PYRA13:
492 return std::vector<double>(PYRA13A_REF,PYRA13A_REF+sizeof(PYRA13A_REF)/sizeof(double));
493 case INTERP_KERNEL::NORM_PENTA6:
494 return std::vector<double>(PENTA6A_REF,PENTA6A_REF+sizeof(PENTA6A_REF)/sizeof(double));
495 case INTERP_KERNEL::NORM_PENTA15:
496 return std::vector<double>(PENTA15A_REF,PENTA15A_REF+sizeof(PENTA15A_REF)/sizeof(double));
497 case INTERP_KERNEL::NORM_PENTA18:
498 return std::vector<double>(PENTA18A_REF,PENTA18A_REF+sizeof(PENTA18A_REF)/sizeof(double));
499 case INTERP_KERNEL::NORM_HEXA8:
500 return std::vector<double>(HEXA8A_REF,HEXA8A_REF+sizeof(HEXA8A_REF)/sizeof(double));
501 case INTERP_KERNEL::NORM_HEXA20:
502 return std::vector<double>(HEXA20A_REF,HEXA20A_REF+sizeof(HEXA20A_REF)/sizeof(double));
503 case INTERP_KERNEL::NORM_HEXA27:
504 return std::vector<double>(HEXA27A_REF,HEXA27A_REF+sizeof(HEXA27A_REF)/sizeof(double));
506 THROW_IK_EXCEPTION("Input type " << ct << "is not managed by GetDefaultReferenceCoordinatesOf")
510 * Returns true if \a ptInRefCoo is in reference cell of type \a ct (regarding GetDefaultReferenceCoordinatesOf)
511 * \sa GetDefaultReferenceCoordinatesOf
513 bool GaussInfo::IsInOrOutForReference(NormalizedCellType ct, const double *ptInRefCoo, double eps)
517 case INTERP_KERNEL::NORM_SEG2:
518 case INTERP_KERNEL::NORM_SEG3:
520 return std::fabs(ptInRefCoo[0]) < 1.0+eps;
522 case INTERP_KERNEL::NORM_QUAD4:
523 case INTERP_KERNEL::NORM_QUAD8:
524 case INTERP_KERNEL::NORM_QUAD9:
526 return std::find_if(ptInRefCoo,ptInRefCoo+2,[eps](double v){ return std::fabs(v) > 1.0+eps; }) == ptInRefCoo+2;
528 case INTERP_KERNEL::NORM_HEXA8:
529 case INTERP_KERNEL::NORM_HEXA20:
530 case INTERP_KERNEL::NORM_HEXA27:
532 return std::find_if(ptInRefCoo,ptInRefCoo+3,[eps](double v){ return std::fabs(v) > 1.0+eps; }) == ptInRefCoo+3;
535 THROW_IK_EXCEPTION("IsInOrOutForReference : not implemented for this geo type !");
539 typedef void (*MapToShapeFunction)(GaussInfo& obj);
542 * Initialize the internal vectors
544 void GaussInfo::initLocalInfo()
546 bool aSatify = false;
547 const CellModel& cellModel(CellModel::GetCellModel(_my_geometry));
548 switch( _my_geometry )
551 _my_local_ref_dim = 0;
552 _my_local_nb_ref = 1;
554 aSatify = isSatisfy();
559 _my_local_ref_dim = 1;
560 _my_local_nb_ref = 2;
562 aSatify = isSatisfy();
566 aSatify = isSatisfy();
572 _my_local_ref_dim = 1;
573 _my_local_nb_ref = 3;
575 aSatify = isSatisfy();
580 _my_local_ref_dim = 2;
581 _my_local_nb_ref = 3;
583 aSatify = isSatisfy();
588 aSatify = isSatisfy();
594 _my_local_ref_dim = 2;
595 _my_local_nb_ref = 6;
597 aSatify = isSatisfy();
601 aSatify = isSatisfy();
607 _my_local_ref_dim = 2;
608 _my_local_nb_ref = 7;
610 aSatify = isSatisfy();
616 _my_local_ref_dim = 2;
617 _my_local_nb_ref = 4;
618 MapToShapeFunction QUAD4PTR[]={Quad4aInit,Quad4bInit,Quad4cInit,Quad4DegSeg2Init};
619 std::size_t NB_OF_QUAD4PTR(sizeof(QUAD4PTR)/sizeof(MapToShapeFunction));
620 for(std::size_t i=0;i<NB_OF_QUAD4PTR && !aSatify;i++)
622 (QUAD4PTR[i])(*this);
623 aSatify = isSatisfy();
631 _my_local_ref_dim = 2;
632 _my_local_nb_ref = 8;
634 aSatify = isSatisfy();
639 aSatify = isSatisfy();
645 _my_local_ref_dim = 2;
646 _my_local_nb_ref = 9;
648 aSatify = isSatisfy();
653 _my_local_ref_dim = 3;
654 _my_local_nb_ref = 4;
656 aSatify = isSatisfy();
661 aSatify = isSatisfy();
667 _my_local_ref_dim = 3;
668 _my_local_nb_ref = 10;
670 aSatify = isSatisfy();
675 aSatify = isSatisfy();
681 _my_local_ref_dim = 3;
682 _my_local_nb_ref = 5;
684 aSatify = isSatisfy();
689 aSatify = isSatisfy();
695 _my_local_ref_dim = 3;
696 _my_local_nb_ref = 13;
698 aSatify = isSatisfy();
703 aSatify = isSatisfy();
710 _my_local_ref_dim = 3;
711 _my_local_nb_ref = 6;
712 MapToShapeFunction PENTA6PTR[]={Penta6aInit,Penta6bInit,Penta6DegTria3aInit,Penta6DegTria3bInit};
713 std::size_t NB_OF_PENTA6PTR(sizeof(PENTA6PTR)/sizeof(MapToShapeFunction));
714 for(std::size_t i=0;i<NB_OF_PENTA6PTR && !aSatify;i++)
716 (PENTA6PTR[i])(*this);
717 aSatify = isSatisfy();
723 /* _my_local_ref_dim = 3;
724 _my_local_nb_ref = 6;
726 aSatify = isSatisfy();
731 aSatify = isSatisfy();
738 _my_local_ref_dim = 3;
739 _my_local_nb_ref = 15;
740 MapToShapeFunction PENTA15PTR[]={Penta15aInit,Penta15bInit};
741 std::size_t NB_OF_PENTA15PTR(sizeof(PENTA15PTR)/sizeof(MapToShapeFunction));
742 for(std::size_t i=0;i<NB_OF_PENTA15PTR && !aSatify;i++)
744 (PENTA15PTR[i])(*this);
745 aSatify = isSatisfy();
753 _my_local_ref_dim = 3;
754 _my_local_nb_ref = 18;
755 MapToShapeFunction PENTA18PTR[]={Penta18aInit,Penta18bInit};
756 std::size_t NB_OF_PENTA18PTR(sizeof(PENTA18PTR)/sizeof(MapToShapeFunction));
757 for(std::size_t i=0;i<NB_OF_PENTA18PTR && !aSatify;i++)
759 (PENTA18PTR[i])(*this);
760 aSatify = isSatisfy();
768 _my_local_ref_dim = 3;
769 _my_local_nb_ref = 8;
770 MapToShapeFunction HEXA8PTR[]={Hexa8aInit,Hexa8bInit,Hexa8DegQuad4aInit,Hexa8DegQuad4bInit,Hexa8DegQuad4cInit};
771 std::size_t NB_OF_HEXA8PTR(sizeof(HEXA8PTR)/sizeof(MapToShapeFunction));
772 for(std::size_t i=0;i<NB_OF_HEXA8PTR && !aSatify;i++)
774 (HEXA8PTR[i])(*this);
775 aSatify = isSatisfy();
782 _my_local_ref_dim = 3;
783 _my_local_nb_ref = 20;
785 aSatify = isSatisfy();
790 aSatify = isSatisfy();
796 _my_local_ref_dim = 3;
797 _my_local_nb_ref = 27;
799 aSatify = isSatisfy();
804 throw INTERP_KERNEL::Exception("Not managed cell type !");
810 * Return shape function value by node id
812 const double *GaussInfo::getFunctionValues( const int theGaussId ) const
814 return _my_function_value.data() + _my_nb_ref*theGaussId ;
818 * Return the derivative of shape function value by node id
820 const double *GaussInfo::getDerivativeOfShapeFunctionAt( const int theGaussId ) const
822 return _my_derivative_func_value.data() + _my_nb_ref*getReferenceCoordDim()*theGaussId;
825 void GaussInfo::point1Init()
827 double *funValue(&_my_function_value[0]);
832 * Init Segment 2 Reference coordinates ans Shape function.
834 void GaussInfo::seg2aInit()
836 LOCAL_COORD_MACRO_BEGIN;
838 coords[0] = SEG2A_REF[0];
841 coords[0] = SEG2A_REF[1];
843 LOCAL_COORD_MACRO_END;
845 SHAPE_FUN_MACRO_BEGIN;
846 funValue[0] = 0.5*(1.0 - gc[0]);
847 funValue[1] = 0.5*(1.0 + gc[0]);
851 void GaussInfo::seg2bInit()
853 LOCAL_COORD_MACRO_BEGIN;
855 coords[0] = SEG2B_REF[0];
858 coords[0] = SEG2B_REF[1];
860 LOCAL_COORD_MACRO_END;
862 SHAPE_FUN_MACRO_BEGIN;
863 funValue[0] = 1.0 - gc[0];
869 * Init Segment 3 Reference coordinates ans Shape function.
871 void GaussInfo::seg3Init()
873 LOCAL_COORD_MACRO_BEGIN;
875 coords[0] = SEG3_REF[0];
878 coords[0] = SEG3_REF[1];
881 coords[0] = SEG3_REF[2];
882 LOCAL_COORD_MACRO_END;
884 SHAPE_FUN_MACRO_BEGIN;
885 funValue[0] = -0.5*(1.0 - gc[0])*gc[0];
886 funValue[1] = 0.5*(1.0 + gc[0])*gc[0];
887 funValue[2] = (1.0 + gc[0])*(1.0 - gc[0]);
892 * Init Triangle Reference coordinates ans Shape function.
895 void GaussInfo::tria3aInit()
897 LOCAL_COORD_MACRO_BEGIN;
899 coords[0] = TRIA3A_REF[0];
900 coords[1] = TRIA3A_REF[1];
903 coords[0] = TRIA3A_REF[2];
904 coords[1] = TRIA3A_REF[3];
907 coords[0] = TRIA3A_REF[4];
908 coords[1] = TRIA3A_REF[5];
910 LOCAL_COORD_MACRO_END;
912 SHAPE_FUN_MACRO_BEGIN;
913 funValue[0] = 0.5*(1.0 + gc[1]);
914 funValue[1] = -0.5*(gc[0] + gc[1]);
915 funValue[2] = 0.5*(1.0 + gc[0]);
920 * Init Triangle Reference coordinates ans Shape function.
923 void GaussInfo::tria3bInit()
925 LOCAL_COORD_MACRO_BEGIN;
927 coords[0] = TRIA3B_REF[0];
928 coords[1] = TRIA3B_REF[1];
931 coords[0] = TRIA3B_REF[2];
932 coords[1] = TRIA3B_REF[3];
935 coords[0] = TRIA3B_REF[4];
936 coords[1] = TRIA3B_REF[5];
938 LOCAL_COORD_MACRO_END;
940 SHAPE_FUN_MACRO_BEGIN;
941 funValue[0] = 1.0 - gc[0] - gc[1];
948 * Init Quadratic Triangle Reference coordinates ans Shape function.
951 void GaussInfo::tria6aInit()
953 LOCAL_COORD_MACRO_BEGIN;
955 coords[0] = TRIA6A_REF[0];
956 coords[1] = TRIA6A_REF[1];
959 coords[0] = TRIA6A_REF[2];
960 coords[1] = TRIA6A_REF[3];
963 coords[0] = TRIA6A_REF[4];
964 coords[1] = TRIA6A_REF[5];
967 coords[0] = TRIA6A_REF[6];
968 coords[1] = TRIA6A_REF[7];
971 coords[0] = TRIA6A_REF[8];
972 coords[1] = TRIA6A_REF[9];
975 coords[0] = TRIA6A_REF[10];
976 coords[1] = TRIA6A_REF[11];
978 LOCAL_COORD_MACRO_END;
980 SHAPE_FUN_MACRO_BEGIN;
981 funValue[0] = 0.5*(1.0 + gc[1])*gc[1];
982 funValue[1] = 0.5*(gc[0] + gc[1])*(gc[0] + gc[1] + 1);
983 funValue[2] = 0.5*(1.0 + gc[0])*gc[0];
984 funValue[3] = -1.0*(1.0 + gc[1])*(gc[0] + gc[1]);
985 funValue[4] = -1.0*(1.0 + gc[0])*(gc[0] + gc[1]);
986 funValue[5] = (1.0 + gc[1])*(1.0 + gc[1]);
991 * Init Quadratic Triangle Reference coordinates ans Shape function.
994 void GaussInfo::tria6bInit()
996 LOCAL_COORD_MACRO_BEGIN;
998 coords[0] = TRIA6B_REF[0];
999 coords[1] = TRIA6B_REF[1];
1002 coords[0] = TRIA6B_REF[2];
1003 coords[1] = TRIA6B_REF[3];
1006 coords[0] = TRIA6B_REF[4];
1007 coords[1] = TRIA6B_REF[5];
1010 coords[0] = TRIA6B_REF[6];
1011 coords[1] = TRIA6B_REF[7];
1014 coords[0] = TRIA6B_REF[8];
1015 coords[1] = TRIA6B_REF[9];
1018 coords[0] = TRIA6B_REF[10];
1019 coords[1] = TRIA6B_REF[11];
1021 LOCAL_COORD_MACRO_END;
1023 SHAPE_FUN_MACRO_BEGIN;
1024 funValue[0] = (1.0 - gc[0] - gc[1])*(1.0 - 2.0*gc[0] - 2.0*gc[1]);
1025 funValue[1] = gc[0]*(2.0*gc[0] - 1.0);
1026 funValue[2] = gc[1]*(2.0*gc[1] - 1.0);
1027 funValue[3] = 4.0*gc[0]*(1.0 - gc[0] - gc[1]);
1028 funValue[4] = 4.0*gc[0]*gc[1];
1029 funValue[5] = 4.0*gc[1]*(1.0 - gc[0] - gc[1]);
1030 SHAPE_FUN_MACRO_END;
1033 void GaussInfo::tria7aInit()
1035 LOCAL_COORD_MACRO_BEGIN;
1037 coords[0] = TRIA7A_REF[0];
1038 coords[1] = TRIA7A_REF[1];
1041 coords[0] = TRIA7A_REF[2];
1042 coords[1] = TRIA7A_REF[3];
1045 coords[0] = TRIA7A_REF[4];
1046 coords[1] = TRIA7A_REF[5];
1049 coords[0] = TRIA7A_REF[6];
1050 coords[1] = TRIA7A_REF[7];
1053 coords[0] = TRIA7A_REF[8];
1054 coords[1] = TRIA7A_REF[9];
1057 coords[0] = TRIA7A_REF[10];
1058 coords[1] = TRIA7A_REF[11];
1061 coords[0] = TRIA7A_REF[12];
1062 coords[1] = TRIA7A_REF[13];
1064 LOCAL_COORD_MACRO_END;
1066 SHAPE_FUN_MACRO_BEGIN;
1067 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]);
1068 funValue[1]=gc[0]*(-1+2*gc[0]+3*gc[1]-3*gc[1]*(gc[0]+gc[1]));
1069 funValue[2]=gc[1]*(-1.+3.*gc[0]+2.*gc[1]-3.*gc[0]*(gc[0]+gc[1]));
1070 funValue[3]=4*gc[0]*(1-gc[0]-4*gc[1]+3*gc[1]*(gc[0]+gc[1]));
1071 funValue[4]=4*gc[0]*gc[1]*(-2+3*(gc[0]+gc[1]));
1072 funValue[5]=4*gc[1]*(1-4*gc[0]-gc[1]+3*gc[0]*(gc[0]+gc[1]));
1073 funValue[6]=27*gc[0]*gc[1]*(1-gc[0]-gc[1]);
1074 SHAPE_FUN_MACRO_END;
1078 * Init Quadrangle Reference coordinates ans Shape function.
1081 void GaussInfo::quad4aInit()
1083 LOCAL_COORD_MACRO_BEGIN;
1085 coords[0] = QUAD4A_REF[0];
1086 coords[1] = QUAD4A_REF[1];
1089 coords[0] = QUAD4A_REF[2];
1090 coords[1] = QUAD4A_REF[3];
1093 coords[0] = QUAD4A_REF[4];
1094 coords[1] = QUAD4A_REF[5];
1097 coords[0] = QUAD4A_REF[6];
1098 coords[1] = QUAD4A_REF[7];
1100 LOCAL_COORD_MACRO_END;
1102 SHAPE_FUN_MACRO_BEGIN;
1103 funValue[0] = 0.25*(1.0 + gc[1])*(1.0 - gc[0]);
1104 funValue[1] = 0.25*(1.0 - gc[1])*(1.0 - gc[0]);
1105 funValue[2] = 0.25*(1.0 - gc[1])*(1.0 + gc[0]);
1106 funValue[3] = 0.25*(1.0 + gc[0])*(1.0 + gc[1]);
1107 SHAPE_FUN_MACRO_END;
1111 * Init Quadrangle Reference coordinates ans Shape function.
1114 void GaussInfo::quad4bInit()
1116 LOCAL_COORD_MACRO_BEGIN;
1118 coords[0] = QUAD4B_REF[0];
1119 coords[1] = QUAD4B_REF[1];
1122 coords[0] = QUAD4B_REF[2];
1123 coords[1] = QUAD4B_REF[3];
1126 coords[0] = QUAD4B_REF[4];
1127 coords[1] = QUAD4B_REF[5];
1130 coords[0] = QUAD4B_REF[6];
1131 coords[1] = QUAD4B_REF[7];
1133 LOCAL_COORD_MACRO_END;
1135 SHAPE_FUN_MACRO_BEGIN;
1136 funValue[0] = 0.25*(1.0 - gc[0])*(1.0 - gc[1]);
1137 funValue[1] = 0.25*(1.0 + gc[0])*(1.0 - gc[1]);
1138 funValue[2] = 0.25*(1.0 + gc[0])*(1.0 + gc[1]);
1139 funValue[3] = 0.25*(1.0 - gc[0])*(1.0 + gc[1]);
1140 SHAPE_FUN_MACRO_END;
1143 void GaussInfo::quad4cInit()
1145 LOCAL_COORD_MACRO_BEGIN;
1163 LOCAL_COORD_MACRO_END;
1165 SHAPE_FUN_MACRO_BEGIN;
1166 funValue[0] = 0.25*(1.0 - gc[0])*(1.0 - gc[1]);
1167 funValue[1] = 0.25*(1.0 - gc[0])*(1.0 + gc[1]);
1168 funValue[2] = 0.25*(1.0 + gc[0])*(1.0 + gc[1]);
1169 funValue[3] = 0.25*(1.0 + gc[0])*(1.0 - gc[1]);
1170 SHAPE_FUN_MACRO_END;
1174 * This shapefunc map is same as degenerated seg2aInit
1176 void GaussInfo::quad4DegSeg2Init()
1178 LOCAL_COORD_MACRO_BEGIN;
1195 LOCAL_COORD_MACRO_END;
1197 SHAPE_FUN_MACRO_BEGIN;
1198 funValue[0] = 0.5*(1.0 - gc[0]);
1199 funValue[1] = 0.5*(1.0 + gc[0]);
1202 SHAPE_FUN_MACRO_END;
1206 * Init Quadratic Quadrangle Reference coordinates ans Shape function.
1209 void GaussInfo::quad8aInit()
1211 LOCAL_COORD_MACRO_BEGIN;
1213 coords[0] = QUAD8A_REF[0];
1214 coords[1] = QUAD8A_REF[1];
1217 coords[0] = QUAD8A_REF[2];
1218 coords[1] = QUAD8A_REF[3];
1221 coords[0] = QUAD8A_REF[4];
1222 coords[1] = QUAD8A_REF[5];
1225 coords[0] = QUAD8A_REF[6];
1226 coords[1] = QUAD8A_REF[7];
1229 coords[0] = QUAD8A_REF[8];
1230 coords[1] = QUAD8A_REF[9];
1233 coords[0] = QUAD8A_REF[10];
1234 coords[1] = QUAD8A_REF[11];
1237 coords[0] = QUAD8A_REF[12];
1238 coords[1] = QUAD8A_REF[13];
1241 coords[0] = QUAD8A_REF[14];
1242 coords[1] = QUAD8A_REF[15];
1244 LOCAL_COORD_MACRO_END;
1246 SHAPE_FUN_MACRO_BEGIN;
1247 funValue[0] = 0.25*(1.0 + gc[1])*(1.0 - gc[0])*(gc[1] - gc[0] - 1.0);
1248 funValue[1] = 0.25*(1.0 - gc[1])*(1.0 - gc[0])*(-gc[1] - gc[0] - 1.0);
1249 funValue[2] = 0.25*(1.0 - gc[1])*(1.0 + gc[0])*(-gc[1] + gc[0] - 1.0);
1250 funValue[3] = 0.25*(1.0 + gc[1])*(1.0 + gc[0])*(gc[1] + gc[0] - 1.0);
1251 funValue[4] = 0.5*(1.0 - gc[0])*(1.0 - gc[1])*(1.0 + gc[1]);
1252 funValue[5] = 0.5*(1.0 - gc[1])*(1.0 - gc[0])*(1.0 + gc[0]);
1253 funValue[6] = 0.5*(1.0 + gc[0])*(1.0 - gc[1])*(1.0 + gc[1]);
1254 funValue[7] = 0.5*(1.0 + gc[1])*(1.0 - gc[0])*(1.0 + gc[0]);
1255 SHAPE_FUN_MACRO_END;
1259 * Init Quadratic Quadrangle Reference coordinates ans Shape function.
1262 void GaussInfo::quad8bInit()
1264 LOCAL_COORD_MACRO_BEGIN;
1266 coords[0] = QUAD8B_REF[0];
1267 coords[1] = QUAD8B_REF[1];
1270 coords[0] = QUAD8B_REF[2];
1271 coords[1] = QUAD8B_REF[3];
1274 coords[0] = QUAD8B_REF[4];
1275 coords[1] = QUAD8B_REF[5];
1278 coords[0] = QUAD8B_REF[6];
1279 coords[1] = QUAD8B_REF[7];
1282 coords[0] = QUAD8B_REF[8];
1283 coords[1] = QUAD8B_REF[9];
1286 coords[0] = QUAD8B_REF[10];
1287 coords[1] = QUAD8B_REF[11];
1290 coords[0] = QUAD8B_REF[12];
1291 coords[1] = QUAD8B_REF[13];
1294 coords[0] = QUAD8B_REF[14];
1295 coords[1] = QUAD8B_REF[15];
1297 LOCAL_COORD_MACRO_END;
1299 SHAPE_FUN_MACRO_BEGIN;
1300 funValue[0] = 0.25*(1.0 - gc[0])*(1.0 - gc[1])*(-1.0 - gc[0] - gc[1]);
1301 funValue[1] = 0.25*(1.0 + gc[0])*(1.0 - gc[1])*(-1.0 + gc[0] - gc[1]);
1302 funValue[2] = 0.25*(1.0 + gc[0])*(1.0 + gc[1])*(-1.0 + gc[0] + gc[1]);
1303 funValue[3] = 0.25*(1.0 - gc[0])*(1.0 + gc[1])*(-1.0 - gc[0] + gc[1]);
1304 funValue[4] = 0.5*(1.0 - gc[0]*gc[0])*(1.0 - gc[1]);
1305 funValue[5] = 0.5*(1.0 - gc[1]*gc[1])*(1.0 + gc[0]);
1306 funValue[6] = 0.5*(1.0 - gc[0]*gc[0])*(1.0 + gc[1]);
1307 funValue[7] = 0.5*(1.0 - gc[1]*gc[1])*(1.0 - gc[0]);
1308 SHAPE_FUN_MACRO_END;
1311 void GaussInfo::quad9aInit()
1313 LOCAL_COORD_MACRO_BEGIN;
1315 coords[0] = QUAD9A_REF[0];
1316 coords[1] = QUAD9A_REF[1];
1319 coords[0] = QUAD9A_REF[2];
1320 coords[1] = QUAD9A_REF[3];
1323 coords[0] = QUAD9A_REF[4];
1324 coords[1] = QUAD9A_REF[5];
1327 coords[0] = QUAD9A_REF[6];
1328 coords[1] = QUAD9A_REF[7];
1331 coords[0] = QUAD9A_REF[8];
1332 coords[1] = QUAD9A_REF[9];
1335 coords[0] = QUAD9A_REF[10];
1336 coords[1] = QUAD9A_REF[11];
1339 coords[0] = QUAD9A_REF[12];
1340 coords[1] = QUAD9A_REF[13];
1343 coords[0] = QUAD9A_REF[14];
1344 coords[1] = QUAD9A_REF[15];
1347 coords[0] = QUAD9A_REF[16];
1348 coords[1] = QUAD9A_REF[17];
1350 LOCAL_COORD_MACRO_END;
1352 SHAPE_FUN_MACRO_BEGIN;
1353 funValue[0] = 0.25*gc[0]*gc[1]*(gc[0]-1.)*(gc[1]-1.);
1354 funValue[1] = 0.25*gc[0]*gc[1]*(gc[0]+1.)*(gc[1]-1.);
1355 funValue[2] = 0.25*gc[0]*gc[1]*(gc[0]+1.)*(gc[1]+1.);
1356 funValue[3] = 0.25*gc[0]*gc[1]*(gc[0]-1.)*(gc[1]+1.);
1357 funValue[4] = 0.5*(1.-gc[0]*gc[0])*gc[1]*(gc[1]-1.);
1358 funValue[5] = 0.5*gc[0]*(gc[0]+1.)*(1.-gc[1]*gc[1]);
1359 funValue[6] = 0.5*(1.-gc[0]*gc[0])*gc[1]*(gc[1]+1.);
1360 funValue[7] = 0.5*gc[0]*(gc[0]-1.)*(1.-gc[1]*gc[1]);
1361 funValue[8] = (1.-gc[0]*gc[0])*(1.-gc[1]*gc[1]);
1362 SHAPE_FUN_MACRO_END;
1366 * Init Tetrahedron Reference coordinates ans Shape function.
1369 void GaussInfo::tetra4aInit()
1371 LOCAL_COORD_MACRO_BEGIN;
1373 coords[0] = TETRA4A_REF[0];
1374 coords[1] = TETRA4A_REF[1];
1375 coords[2] = TETRA4A_REF[2];
1378 coords[0] = TETRA4A_REF[3];
1379 coords[1] = TETRA4A_REF[4];
1380 coords[2] = TETRA4A_REF[5];
1383 coords[0] = TETRA4A_REF[6];
1384 coords[1] = TETRA4A_REF[7];
1385 coords[2] = TETRA4A_REF[8];
1388 coords[0] = TETRA4A_REF[9];
1389 coords[1] = TETRA4A_REF[10];
1390 coords[2] = TETRA4A_REF[11];
1392 LOCAL_COORD_MACRO_END;
1394 SHAPE_FUN_MACRO_BEGIN;
1395 funValue[0] = gc[1];
1396 funValue[1] = gc[2];
1397 funValue[2] = 1.0 - gc[0] - gc[1] - gc[2];
1398 funValue[3] = gc[0];
1399 SHAPE_FUN_MACRO_END;
1403 * Init Tetrahedron Reference coordinates ans Shape function.
1406 void GaussInfo::tetra4bInit()
1408 LOCAL_COORD_MACRO_BEGIN;
1410 coords[0] = TETRA4B_REF[0];
1411 coords[1] = TETRA4B_REF[1];
1412 coords[2] = TETRA4B_REF[2];
1415 coords[0] = TETRA4B_REF[3];
1416 coords[1] = TETRA4B_REF[4];
1417 coords[2] = TETRA4B_REF[5];
1420 coords[0] = TETRA4B_REF[6];
1421 coords[1] = TETRA4B_REF[7];
1422 coords[2] = TETRA4B_REF[8];
1425 coords[0] = TETRA4B_REF[9];
1426 coords[1] = TETRA4B_REF[10];
1427 coords[2] = TETRA4B_REF[11];
1429 LOCAL_COORD_MACRO_END;
1431 SHAPE_FUN_MACRO_BEGIN;
1432 funValue[0] = gc[1];
1433 funValue[2] = gc[2];
1434 funValue[1] = 1.0 - gc[0] - gc[1] - gc[2];
1435 funValue[3] = gc[0];
1436 SHAPE_FUN_MACRO_END;
1440 * Init Quadratic Tetrahedron Reference coordinates ans Shape function.
1443 void GaussInfo::tetra10aInit()
1445 LOCAL_COORD_MACRO_BEGIN;
1447 coords[0] = TETRA10A_REF[0];
1448 coords[1] = TETRA10A_REF[1];
1449 coords[2] = TETRA10A_REF[2];
1452 coords[0] = TETRA10A_REF[3];
1453 coords[1] = TETRA10A_REF[4];
1454 coords[2] = TETRA10A_REF[5];
1457 coords[0] = TETRA10A_REF[6];
1458 coords[1] = TETRA10A_REF[7];
1459 coords[2] = TETRA10A_REF[8];
1462 coords[0] = TETRA10A_REF[9];
1463 coords[1] = TETRA10A_REF[10];
1464 coords[2] = TETRA10A_REF[11];
1467 coords[0] = TETRA10A_REF[12];
1468 coords[1] = TETRA10A_REF[13];
1469 coords[2] = TETRA10A_REF[14];
1472 coords[0] = TETRA10A_REF[15];
1473 coords[1] = TETRA10A_REF[16];
1474 coords[2] = TETRA10A_REF[17];
1477 coords[0] = TETRA10A_REF[18];
1478 coords[1] = TETRA10A_REF[19];
1479 coords[2] = TETRA10A_REF[20];
1482 coords[0] = TETRA10A_REF[21];
1483 coords[1] = TETRA10A_REF[22];
1484 coords[2] = TETRA10A_REF[23];
1487 coords[0] = TETRA10A_REF[24];
1488 coords[1] = TETRA10A_REF[25];
1489 coords[2] = TETRA10A_REF[26];
1492 coords[0] = TETRA10A_REF[27];
1493 coords[1] = TETRA10A_REF[28];
1494 coords[2] = TETRA10A_REF[29];
1496 LOCAL_COORD_MACRO_END;
1498 SHAPE_FUN_MACRO_BEGIN;
1499 funValue[0] = gc[1]*(2.0*gc[1] - 1.0);
1500 funValue[1] = gc[2]*(2.0*gc[2] - 1.0);
1501 funValue[2] = (1.0 - gc[0] - gc[1] - gc[2])*(1.0 - 2.0*gc[0] - 2.0*gc[1] - 2.0*gc[2]);
1502 funValue[3] = gc[0]*(2.0*gc[0] - 1.0);
1503 funValue[4] = 4.0*gc[1]*gc[2];
1504 funValue[5] = 4.0*gc[2]*(1.0 - gc[0] - gc[1] - gc[2]);
1505 funValue[6] = 4.0*gc[1]*(1.0 - gc[0] - gc[1] - gc[2]);
1506 funValue[7] = 4.0*gc[0]*gc[1];
1507 funValue[8] = 4.0*gc[0]*gc[2];
1508 funValue[9] = 4.0*gc[0]*(1.0 - gc[0] - gc[1] - gc[2]);
1509 SHAPE_FUN_MACRO_END;
1513 * Init Quadratic Tetrahedron Reference coordinates ans Shape function.
1516 void GaussInfo::tetra10bInit()
1518 LOCAL_COORD_MACRO_BEGIN;
1520 coords[0] = TETRA10B_REF[0];
1521 coords[1] = TETRA10B_REF[1];
1522 coords[2] = TETRA10B_REF[2];
1525 coords[0] = TETRA10B_REF[3];
1526 coords[1] = TETRA10B_REF[4];
1527 coords[2] = TETRA10B_REF[5];
1530 coords[0] = TETRA10B_REF[6];
1531 coords[1] = TETRA10B_REF[7];
1532 coords[2] = TETRA10B_REF[8];
1535 coords[0] = TETRA10B_REF[9];
1536 coords[1] = TETRA10B_REF[10];
1537 coords[2] = TETRA10B_REF[11];
1540 coords[0] = TETRA10B_REF[12];
1541 coords[1] = TETRA10B_REF[13];
1542 coords[2] = TETRA10B_REF[14];
1545 coords[0] = TETRA10B_REF[15];
1546 coords[1] = TETRA10B_REF[16];
1547 coords[2] = TETRA10B_REF[17];
1550 coords[0] = TETRA10B_REF[18];
1551 coords[1] = TETRA10B_REF[19];
1552 coords[2] = TETRA10B_REF[20];
1555 coords[0] = TETRA10B_REF[21];
1556 coords[1] = TETRA10B_REF[22];
1557 coords[2] = TETRA10B_REF[23];
1560 coords[0] = TETRA10B_REF[24];
1561 coords[1] = TETRA10B_REF[25];
1562 coords[2] = TETRA10B_REF[26];
1565 coords[0] = TETRA10B_REF[27];
1566 coords[1] = TETRA10B_REF[28];
1567 coords[2] = TETRA10B_REF[29];
1569 LOCAL_COORD_MACRO_END;
1570 SHAPE_FUN_MACRO_BEGIN;
1571 funValue[0] = gc[1]*(2.0*gc[1] - 1.0);
1572 funValue[2] = gc[2]*(2.0*gc[2] - 1.0);
1573 funValue[1] = (1.0 - gc[0] - gc[1] - gc[2])*(1.0 - 2.0*gc[0] - 2.0*gc[1] - 2.0*gc[2]);
1574 funValue[3] = gc[0]*(2.0*gc[0] - 1.0);
1575 funValue[6] = 4.0*gc[1]*gc[2];
1576 funValue[5] = 4.0*gc[2]*(1.0 - gc[0] - gc[1] - gc[2]);
1577 funValue[4] = 4.0*gc[1]*(1.0 - gc[0] - gc[1] - gc[2]);
1578 funValue[7] = 4.0*gc[0]*gc[1];
1579 funValue[9] = 4.0*gc[0]*gc[2];
1580 funValue[8] = 4.0*gc[0]*(1.0 - gc[0] - gc[1] - gc[2]);
1581 SHAPE_FUN_MACRO_END;
1585 * Init Pyramid Reference coordinates ans Shape function.
1588 void GaussInfo::pyra5aInit()
1590 LOCAL_COORD_MACRO_BEGIN;
1592 coords[0] = PYRA5A_REF[0];
1593 coords[1] = PYRA5A_REF[1];
1594 coords[2] = PYRA5A_REF[2];
1597 coords[0] = PYRA5A_REF[3];
1598 coords[1] = PYRA5A_REF[4];
1599 coords[2] = PYRA5A_REF[5];
1602 coords[0] = PYRA5A_REF[6];
1603 coords[1] = PYRA5A_REF[7];
1604 coords[2] = PYRA5A_REF[8];
1607 coords[0] = PYRA5A_REF[9];
1608 coords[1] = PYRA5A_REF[10];
1609 coords[2] = PYRA5A_REF[11];
1612 coords[0] = PYRA5A_REF[12];
1613 coords[1] = PYRA5A_REF[13];
1614 coords[2] = PYRA5A_REF[14];
1616 LOCAL_COORD_MACRO_END;
1618 SHAPE_FUN_MACRO_BEGIN;
1619 funValue[0] = 0.25*(-gc[0] + gc[1] - 1.0)*(-gc[0] - gc[1] - 1.0)*(1.0 - gc[2]);
1620 funValue[1] = 0.25*(-gc[0] - gc[1] - 1.0)*(+gc[0] - gc[1] - 1.0)*(1.0 - gc[2]);
1621 funValue[2] = 0.25*(+gc[0] + gc[1] - 1.0)*(+gc[0] - gc[1] - 1.0)*(1.0 - gc[2]);
1622 funValue[3] = 0.25*(+gc[0] + gc[1] - 1.0)*(-gc[0] + gc[1] - 1.0)*(1.0 - gc[2]);
1623 funValue[4] = gc[2];
1624 SHAPE_FUN_MACRO_END;
1626 DEV_SHAPE_FUN_MACRO_BEGIN;
1628 devFunValue[0] = 0.5*(gc[0]+1)*(1.0 - gc[2]);
1629 devFunValue[1] = -0.5*gc[1]*(1.0 - gc[2]);
1630 devFunValue[2] = -0.25*(-gc[0] + gc[1] - 1.0)*(-gc[0] - gc[1] - 1.0);
1632 devFunValue[3] = -0.5*gc[0]*(1.0 - gc[2]);
1633 devFunValue[4] = 0.5*(gc[1]+1)*(1.0 - gc[2]);
1634 devFunValue[5] = -0.25*(-gc[0] - gc[1] - 1.0)*(+gc[0] - gc[1] - 1.0);
1636 devFunValue[6] = 0.5*(gc[0]-1)*(1.0 - gc[2]);
1637 devFunValue[7] = -0.5*gc[1]*(1.0 - gc[2]);
1638 devFunValue[8] = -0.25*(+gc[0] + gc[1] - 1.0)*(+gc[0] - gc[1] - 1.0);
1640 devFunValue[9] = -0.5*gc[0]*(1.0 - gc[2]);
1641 devFunValue[10] = 0.5*(1*gc[1]-1)*(1.0 - gc[2]);
1642 devFunValue[11] = -0.25*(+gc[0] + gc[1] - 1.0)*(-gc[0] + gc[1] - 1.0);
1644 devFunValue[12] = 0.0;
1645 devFunValue[13] = 0.0;
1646 devFunValue[14] = 1.0;
1648 DEV_SHAPE_FUN_MACRO_END;
1651 * Init Pyramid Reference coordinates ans Shape function.
1654 void GaussInfo::pyra5bInit()
1656 LOCAL_COORD_MACRO_BEGIN;
1658 coords[0] = PYRA5B_REF[0];
1659 coords[1] = PYRA5B_REF[1];
1660 coords[2] = PYRA5B_REF[2];
1663 coords[0] = PYRA5B_REF[3];
1664 coords[1] = PYRA5B_REF[4];
1665 coords[2] = PYRA5B_REF[5];
1668 coords[0] = PYRA5B_REF[6];
1669 coords[1] = PYRA5B_REF[7];
1670 coords[2] = PYRA5B_REF[8];
1673 coords[0] = PYRA5B_REF[9];
1674 coords[1] = PYRA5B_REF[10];
1675 coords[2] = PYRA5B_REF[11];
1678 coords[0] = PYRA5B_REF[12];
1679 coords[1] = PYRA5B_REF[13];
1680 coords[2] = PYRA5B_REF[14];
1682 LOCAL_COORD_MACRO_END;
1684 SHAPE_FUN_MACRO_BEGIN;
1685 funValue[0] = 0.25*(-gc[0] + gc[1] - 1.0)*(-gc[0] - gc[1] - 1.0)*(1.0 - gc[2]);
1686 funValue[3] = 0.25*(-gc[0] - gc[1] - 1.0)*(+gc[0] - gc[1] - 1.0)*(1.0 - gc[2]);
1687 funValue[2] = 0.25*(+gc[0] + gc[1] - 1.0)*(+gc[0] - gc[1] - 1.0)*(1.0 - gc[2]);
1688 funValue[1] = 0.25*(+gc[0] + gc[1] - 1.0)*(-gc[0] + gc[1] - 1.0)*(1.0 - gc[2]);
1689 funValue[4] = gc[2];
1690 SHAPE_FUN_MACRO_END;
1694 * Init Quadratic Pyramid Reference coordinates ans Shape function.
1697 void GaussInfo::pyra13aInit()
1699 LOCAL_COORD_MACRO_BEGIN;
1701 coords[0] = PYRA13A_REF[0];
1702 coords[1] = PYRA13A_REF[1];
1703 coords[2] = PYRA13A_REF[2];
1706 coords[0] = PYRA13A_REF[3];
1707 coords[1] = PYRA13A_REF[4];
1708 coords[2] = PYRA13A_REF[5];
1711 coords[0] = PYRA13A_REF[6];
1712 coords[1] = PYRA13A_REF[7];
1713 coords[2] = PYRA13A_REF[8];
1716 coords[0] = PYRA13A_REF[9];
1717 coords[1] = PYRA13A_REF[10];
1718 coords[2] = PYRA13A_REF[11];
1721 coords[0] = PYRA13A_REF[12];
1722 coords[1] = PYRA13A_REF[13];
1723 coords[2] = PYRA13A_REF[14];
1726 coords[0] = PYRA13A_REF[15];
1727 coords[1] = PYRA13A_REF[16];
1728 coords[2] = PYRA13A_REF[17];
1731 coords[0] = PYRA13A_REF[18];
1732 coords[1] = PYRA13A_REF[19];
1733 coords[2] = PYRA13A_REF[20];
1736 coords[0] = PYRA13A_REF[21];
1737 coords[1] = PYRA13A_REF[22];
1738 coords[2] = PYRA13A_REF[23];
1741 coords[0] = PYRA13A_REF[24];
1742 coords[1] = PYRA13A_REF[25];
1743 coords[2] = PYRA13A_REF[26];
1746 coords[0] = PYRA13A_REF[27];
1747 coords[1] = PYRA13A_REF[28];
1748 coords[2] = PYRA13A_REF[29];
1751 coords[0] = PYRA13A_REF[30];
1752 coords[1] = PYRA13A_REF[31];
1753 coords[2] = PYRA13A_REF[32];
1756 coords[0] = PYRA13A_REF[33];
1757 coords[1] = PYRA13A_REF[34];
1758 coords[2] = PYRA13A_REF[35];
1761 coords[0] = PYRA13A_REF[36];
1762 coords[1] = PYRA13A_REF[37];
1763 coords[2] = PYRA13A_REF[38];
1765 LOCAL_COORD_MACRO_END;
1767 SHAPE_FUN_MACRO_BEGIN;
1768 funValue[0] = 0.5*(-gc[0] + gc[1] + gc[2] - 1.0)*(-gc[0] - gc[1] + gc[2] - 1.0)*
1769 (gc[0] - 0.5)/(1.0 - gc[2]);
1770 funValue[1] = 0.5*(-gc[0] - gc[1] + gc[2] - 1.0)*(+gc[0] - gc[1] + gc[2] - 1.0)*
1771 (gc[1] - 0.5)/(1.0 - gc[2]);
1772 funValue[2] = 0.5*(+gc[0] - gc[1] + gc[2] - 1.0)*(+gc[0] + gc[1] + gc[2] - 1.0)*
1773 (-gc[0] - 0.5)/(1.0 - gc[2]);
1774 funValue[3] = 0.5*(+gc[0] + gc[1] + gc[2] - 1.0)*(-gc[0] + gc[1] + gc[2] - 1.0)*
1775 (-gc[1] - 0.5)/(1.0 - gc[2]);
1777 funValue[4] = 2.0*gc[2]*(gc[2] - 0.5);
1779 funValue[5] = 0.5*(-gc[0] + gc[1] + gc[2] - 1.0)*(-gc[0] - gc[1] + gc[2] - 1.0)*
1780 (gc[0] - gc[1] + gc[2] - 1.0)/(1.0 - gc[2]);
1781 funValue[6] = 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[7] = 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[8] = 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]);
1788 funValue[9] = 0.5*gc[2]*(-gc[0] + gc[1] + gc[2] - 1.0)*(-gc[0] - gc[1] + gc[2] - 1.0)/
1790 funValue[10] = 0.5*gc[2]*(-gc[0] - gc[1] + gc[2] - 1.0)*(gc[0] - gc[1] + gc[2] - 1.0)/
1792 funValue[11] = 0.5*gc[2]*(gc[0] - gc[1] + gc[2] - 1.0)*(gc[0] + gc[1] + gc[2] - 1.0)/
1794 funValue[12] = 0.5*gc[2]*(gc[0] + gc[1] + gc[2] - 1.0)*(-gc[0] + gc[1] + gc[2] - 1.0)/
1796 SHAPE_FUN_MACRO_END;
1800 * Init Quadratic Pyramid Reference coordinates ans Shape function.
1803 void GaussInfo::pyra13bInit()
1805 LOCAL_COORD_MACRO_BEGIN;
1807 coords[0] = PYRA13B_REF[0];
1808 coords[1] = PYRA13B_REF[1];
1809 coords[2] = PYRA13B_REF[2];
1812 coords[0] = PYRA13B_REF[3];
1813 coords[1] = PYRA13B_REF[4];
1814 coords[2] = PYRA13B_REF[5];
1817 coords[0] = PYRA13B_REF[6];
1818 coords[1] = PYRA13B_REF[7];
1819 coords[2] = PYRA13B_REF[8];
1822 coords[0] = PYRA13B_REF[9];
1823 coords[1] = PYRA13B_REF[10];
1824 coords[2] = PYRA13B_REF[11];
1827 coords[0] = PYRA13B_REF[12];
1828 coords[1] = PYRA13B_REF[13];
1829 coords[2] = PYRA13B_REF[14];
1832 coords[0] = PYRA13B_REF[15];
1833 coords[1] = PYRA13B_REF[16];
1834 coords[2] = PYRA13B_REF[17];
1837 coords[0] = PYRA13B_REF[18];
1838 coords[1] = PYRA13B_REF[19];
1839 coords[2] = PYRA13B_REF[20];
1842 coords[0] = PYRA13B_REF[21];
1843 coords[1] = PYRA13B_REF[22];
1844 coords[2] = PYRA13B_REF[23];
1847 coords[0] = PYRA13B_REF[24];
1848 coords[1] = PYRA13B_REF[25];
1849 coords[2] = PYRA13B_REF[26];
1852 coords[0] = PYRA13B_REF[27];
1853 coords[1] = PYRA13B_REF[28];
1854 coords[2] = PYRA13B_REF[29];
1857 coords[0] = PYRA13B_REF[30];
1858 coords[1] = PYRA13B_REF[31];
1859 coords[2] = PYRA13B_REF[32];
1862 coords[0] = PYRA13B_REF[33];
1863 coords[1] = PYRA13B_REF[34];
1864 coords[2] = PYRA13B_REF[35];
1867 coords[0] = PYRA13B_REF[36];
1868 coords[1] = PYRA13B_REF[37];
1869 coords[2] = PYRA13B_REF[38];
1871 LOCAL_COORD_MACRO_END;
1873 SHAPE_FUN_MACRO_BEGIN;
1874 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]);
1875 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]);
1876 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]);
1877 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]);
1879 funValue[4] =2.*gc[2]*(gc[2]-0.5);
1881 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]);
1882 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]);
1883 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]);
1884 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]);
1886 funValue[9] =gc[2]*(-gc[0]+gc[1]+gc[2]-1.0)*(-gc[0]-gc[1]+gc[2]-1.0)/(1.0-gc[2]);
1887 funValue[10]=gc[2]*(gc[0]+gc[1]+gc[2]-1.0)*(-gc[0]+gc[1]+gc[2]-1.0)/(1.0-gc[2]);
1888 funValue[11]=gc[2]*(gc[0]-gc[1]+gc[2]-1.0)*(gc[0]+gc[1]+gc[2]-1.0)/(1.0-gc[2]);
1889 funValue[12]=gc[2]*(-gc[0]-gc[1]+gc[2]-1.0)*(gc[0]-gc[1]+gc[2]-1.0)/(1.0-gc[2]);
1891 SHAPE_FUN_MACRO_END;
1896 * Init Pentahedron Reference coordinates and Shape function.
1899 void GaussInfo::penta6aInit()
1901 LOCAL_COORD_MACRO_BEGIN;
1903 coords[0] = PENTA6A_REF[0];
1904 coords[1] = PENTA6A_REF[1];
1905 coords[2] = PENTA6A_REF[2];
1908 coords[0] = PENTA6A_REF[3];
1909 coords[1] = PENTA6A_REF[4];
1910 coords[2] = PENTA6A_REF[5];
1913 coords[0] = PENTA6A_REF[6];
1914 coords[1] = PENTA6A_REF[7];
1915 coords[2] = PENTA6A_REF[8];
1918 coords[0] = PENTA6A_REF[9];
1919 coords[1] = PENTA6A_REF[10];
1920 coords[2] = PENTA6A_REF[11];
1923 coords[0] = PENTA6A_REF[12];
1924 coords[1] = PENTA6A_REF[13];
1925 coords[2] = PENTA6A_REF[14];
1928 coords[0] = PENTA6A_REF[15];
1929 coords[1] = PENTA6A_REF[16];
1930 coords[2] = PENTA6A_REF[17];
1932 LOCAL_COORD_MACRO_END;
1934 SHAPE_FUN_MACRO_BEGIN;
1935 funValue[0] = 0.5*gc[1]*(1.0 - gc[0]);
1936 funValue[1] = 0.5*gc[2]*(1.0 - gc[0]);
1937 funValue[2] = 0.5*(1.0 - gc[1] - gc[2])*(1.0 - gc[0]);
1939 funValue[3] = 0.5*gc[1]*(gc[0] + 1.0);
1940 funValue[4] = 0.5*gc[2]*(gc[0] + 1.0);
1941 funValue[5] = 0.5*(1.0 - gc[1] - gc[2])*(1.0 + gc[0]);
1942 SHAPE_FUN_MACRO_END;
1944 DEV_SHAPE_FUN_MACRO_BEGIN;
1946 devFunValue[0] = 0.5*gc[1]*(-1.0);
1947 devFunValue[1] = 0.5*(1.0 - gc[0]);
1948 devFunValue[2] = 0.0;
1950 devFunValue[3] = 0.5*gc[2]*(-1.0);
1951 devFunValue[4] = 0.0;
1952 devFunValue[5] = 0.5*(1.0 - gc[0]);
1954 devFunValue[6] = 0.5*(1.0 - gc[1] - gc[2])*(-1.0);
1955 devFunValue[7] = 0.5*(-1.0)*(1.0 - gc[0]);
1956 devFunValue[8] = 0.5*(-1.0)*(1.0 - gc[0]);
1958 devFunValue[9] = 0.5*gc[1];
1959 devFunValue[10] = 0.5*(gc[0] + 1.0);
1960 devFunValue[11] = 0.0;
1962 devFunValue[12] = 0.5*gc[2];
1963 devFunValue[13] = 0.0;
1964 devFunValue[14] = 0.5*(gc[0] + 1.0);
1966 devFunValue[15] = 0.5*(1.0 - gc[1] - gc[2]);
1967 devFunValue[16] = 0.5*(-1.0)*(1.0 + gc[0]);
1968 devFunValue[17] = 0.5*(-1.0)*(1.0 + gc[0]);
1970 DEV_SHAPE_FUN_MACRO_END;
1974 * Init Pentahedron Reference coordinates and Shape function.
1977 void GaussInfo::penta6bInit()
1979 LOCAL_COORD_MACRO_BEGIN;
1981 coords[0] = PENTA6B_REF[0];
1982 coords[1] = PENTA6B_REF[1];
1983 coords[2] = PENTA6B_REF[2];
1986 coords[0] = PENTA6B_REF[3];
1987 coords[1] = PENTA6B_REF[4];
1988 coords[2] = PENTA6B_REF[5];
1991 coords[0] = PENTA6B_REF[6];
1992 coords[1] = PENTA6B_REF[7];
1993 coords[2] = PENTA6B_REF[8];
1996 coords[0] = PENTA6B_REF[9];
1997 coords[1] = PENTA6B_REF[10];
1998 coords[2] = PENTA6B_REF[11];
2001 coords[0] = PENTA6B_REF[12];
2002 coords[1] = PENTA6B_REF[13];
2003 coords[2] = PENTA6B_REF[14];
2006 coords[0] = PENTA6B_REF[15];
2007 coords[1] = PENTA6B_REF[16];
2008 coords[2] = PENTA6B_REF[17];
2010 LOCAL_COORD_MACRO_END;
2012 SHAPE_FUN_MACRO_BEGIN;
2013 funValue[0] = 0.5*gc[1]*(1.0 - gc[0]);
2014 funValue[2] = 0.5*gc[2]*(1.0 - gc[0]);
2015 funValue[1] = 0.5*(1.0 - gc[1] - gc[2])*(1.0 - gc[0]);
2016 funValue[3] = 0.5*gc[1]*(gc[0] + 1.0);
2017 funValue[5] = 0.5*gc[2]*(gc[0] + 1.0);
2018 funValue[4] = 0.5*(1.0 - gc[1] - gc[2])*(1.0 + gc[0]);
2019 SHAPE_FUN_MACRO_END;
2023 * This shapefunc map is same as degenerated tria3aInit
2025 void GaussInfo::penta6DegTria3aInit()
2027 LOCAL_COORD_MACRO_BEGIN;
2058 LOCAL_COORD_MACRO_END;
2060 SHAPE_FUN_MACRO_BEGIN;
2061 funValue[0] = 0.5*(1.0 + gc[1]);
2062 funValue[1] = -0.5*(gc[0] + gc[1]);
2063 funValue[2] = 0.5*(1.0 + gc[0]);
2067 SHAPE_FUN_MACRO_END;
2071 * This shapefunc map is same as degenerated tria3bInit
2073 void GaussInfo::penta6DegTria3bInit()
2075 LOCAL_COORD_MACRO_BEGIN;
2106 LOCAL_COORD_MACRO_END;
2108 SHAPE_FUN_MACRO_BEGIN;
2109 funValue[0] = 1.0 - gc[0] - gc[1];
2110 funValue[1] = gc[0];
2111 funValue[2] = gc[1];
2115 SHAPE_FUN_MACRO_END;
2119 * Init Pentahedron Reference coordinates and Shape function.
2122 void GaussInfo::penta15aInit()
2124 LOCAL_COORD_MACRO_BEGIN;
2126 coords[0] = PENTA15A_REF[0];
2127 coords[1] = PENTA15A_REF[1];
2128 coords[2] = PENTA15A_REF[2];
2131 coords[0] = PENTA15A_REF[3];
2132 coords[1] = PENTA15A_REF[4];
2133 coords[2] = PENTA15A_REF[5];
2136 coords[0] = PENTA15A_REF[6];
2137 coords[1] = PENTA15A_REF[7];
2138 coords[2] = PENTA15A_REF[8];
2141 coords[0] = PENTA15A_REF[9];
2142 coords[1] = PENTA15A_REF[10];
2143 coords[2] = PENTA15A_REF[11];
2146 coords[0] = PENTA15A_REF[12];
2147 coords[1] = PENTA15A_REF[13];
2148 coords[2] = PENTA15A_REF[14];
2151 coords[0] = PENTA15A_REF[15];
2152 coords[1] = PENTA15A_REF[16];
2153 coords[2] = PENTA15A_REF[17];
2156 coords[0] = PENTA15A_REF[18];
2157 coords[1] = PENTA15A_REF[19];
2158 coords[2] = PENTA15A_REF[20];
2161 coords[0] = PENTA15A_REF[21];
2162 coords[1] = PENTA15A_REF[22];
2163 coords[2] = PENTA15A_REF[23];
2166 coords[0] = PENTA15A_REF[24];
2167 coords[1] = PENTA15A_REF[25];
2168 coords[2] = PENTA15A_REF[26];
2171 coords[0] = PENTA15A_REF[27];
2172 coords[1] = PENTA15A_REF[28];
2173 coords[2] = PENTA15A_REF[29];
2176 coords[0] = PENTA15A_REF[30];
2177 coords[1] = PENTA15A_REF[31];
2178 coords[2] = PENTA15A_REF[32];
2181 coords[0] = PENTA15A_REF[33];
2182 coords[1] = PENTA15A_REF[34];
2183 coords[2] = PENTA15A_REF[35];
2186 coords[0] = PENTA15A_REF[36];
2187 coords[1] = PENTA15A_REF[37];
2188 coords[2] = PENTA15A_REF[38];
2191 coords[0] = PENTA15A_REF[39];
2192 coords[1] = PENTA15A_REF[40];
2193 coords[2] = PENTA15A_REF[41];
2196 coords[0] = PENTA15A_REF[42];
2197 coords[1] = PENTA15A_REF[43];
2198 coords[2] = PENTA15A_REF[44];
2200 LOCAL_COORD_MACRO_END;
2202 SHAPE_FUN_MACRO_BEGIN;
2203 funValue[0] = 0.5*gc[1]*(1.0 - gc[0])*(2.0*gc[1] - 2.0 - gc[0]);
2204 funValue[1] = 0.5*gc[2]*(1.0 - gc[0])*(2.0*gc[2] - 2.0 - gc[0]);
2205 funValue[2] = 0.5*(gc[0] - 1.0)*(1.0 - gc[1] - gc[2])*(gc[0] + 2.0*gc[1] + 2.0*gc[2]);
2207 funValue[3] = 0.5*gc[1]*(1.0 + gc[0])*(2.0*gc[1] - 2.0 + gc[0]);
2208 funValue[4] = 0.5*gc[2]*(1.0 + gc[0])*(2.0*gc[2] - 2.0 + gc[0]);
2209 funValue[5] = 0.5*(-gc[0] - 1.0)*(1.0 - gc[1] - gc[2])*(-gc[0] + 2.0*gc[1] + 2.0*gc[2]);
2211 funValue[6] = 2.0*gc[1]*gc[2]*(1.0 - gc[0]);
2212 funValue[7] = 2.0*gc[2]*(1.0 - gc[1] - gc[2])*(1.0 - gc[0]);
2213 funValue[8] = 2.0*gc[1]*(1.0 - gc[1] - gc[2])*(1.0 - gc[0]);
2215 funValue[9] = gc[1]*(1.0 - gc[0]*gc[0]);
2216 funValue[10] = gc[2]*(1.0 - gc[0]*gc[0]);
2217 funValue[11] = (1.0 - gc[1] - gc[2])*(1.0 - gc[0]*gc[0]);
2219 funValue[12] = 2.0*gc[1]*gc[2]*(1.0 + gc[0]);
2220 funValue[13] = 2.0*gc[2]*(1.0 - gc[1] - gc[2])*(1.0 + gc[0]);
2221 funValue[14] = 2.0*gc[1]*(1.0 - gc[1] - gc[2])*(1.0 + gc[0]);
2222 SHAPE_FUN_MACRO_END;
2224 DEV_SHAPE_FUN_MACRO_BEGIN;
2226 devFunValue[0] = 0.5*gc[1]*(2 * gc[0] - 2 * gc[1] + 1.0 );
2227 devFunValue[1] = (1.0 - gc[0])*(2.0*gc[1] -1 - 0.5*gc[0]);
2228 devFunValue[2] = 0.0;
2230 devFunValue[3] = 0.5*gc[2]*(2 * gc[0] - 2 * gc[2] + 1.0 );
2231 devFunValue[4] = 0.0;
2232 devFunValue[5] = (1.0 - gc[0])*(2.0*gc[2] -1 - 0.5*gc[0]);
2234 devFunValue[6] = 0.5*(1.0 - gc[1] - gc[2])*(2*gc[0] -1.0 + 2*gc[1] + 2*gc[2]);
2235 devFunValue[7] = 0.5*(gc[0] - 1.0)* ( -4*gc[1] -gc[0] -4*gc[2] + 2.0);
2236 devFunValue[8] = 0.5*(gc[0] - 1.0)* ( -4*gc[2] -4*gc[1] -gc[0] + 2.0);
2238 devFunValue[9] = 0.5*gc[1]*( 2*gc[0] + 2*gc[1] -1.0 );
2239 devFunValue[10] = (1.0 + gc[0])*(2.0*gc[1] - 1.0 + 0.5*gc[0]);
2240 devFunValue[11] = 0.0;
2242 devFunValue[12] = 0.5*gc[2]*( 2*gc[0] + 2*gc[2] -1.0 );
2243 devFunValue[13] = 0.0;
2244 devFunValue[14] = (1.0 + gc[0])*(2.0*gc[2] - 1.0 + 0.5*gc[0]);
2246 devFunValue[15] = 0.5*(1.0 - gc[1] - gc[2])*(2 * gc[0] - 2.0 * gc[1] - 2.0 * gc[2] + 1.0 );
2247 devFunValue[16] = 0.5*(-gc[0] - 1.0) * (-4.0*gc[1] + gc[0] - 4.0 * gc[2] + 2.0) ;
2248 devFunValue[17] = 0.5*(-gc[0] - 1.0) * (-4.0*gc[2] - 4*gc[1] + gc[0] + 2.0 );
2250 devFunValue[18] = - 2.0*gc[1]*gc[2];
2251 devFunValue[19] = 2.0*gc[2]*(1.0 - gc[0]);
2252 devFunValue[20] = 2.0*gc[1]*(1.0 - gc[0]);
2254 devFunValue[21] = -2.0*gc[2]*(1.0 - gc[1] - gc[2]);
2255 devFunValue[22] = -2.0*gc[2]*(1.0 - gc[0]);
2256 devFunValue[23] = (-4*gc[2]-2*gc[1]+2.0)*(1.0 - gc[0]);
2258 devFunValue[24] = -2.0*gc[1]*(1.0 - gc[1] - gc[2]);
2259 devFunValue[25] = (-4*gc[1]-2*gc[2]+2)*(1.0 - gc[0]);
2260 devFunValue[26] = -2.0*gc[1]*(1.0 - gc[0]);
2262 devFunValue[27] = gc[1]*(- 2.0 * gc[0]);
2263 devFunValue[28] = (1.0 - gc[0]*gc[0]);
2264 devFunValue[29] = 0.0;
2266 devFunValue[30] = -2.0 * gc[2] *gc[0];
2267 devFunValue[31] = 0.0;
2268 devFunValue[32] = (1.0 - gc[0]*gc[0]);
2270 devFunValue[33] = -2.0 * (1.0 - gc[1] - gc[2]) * gc[0];
2271 devFunValue[34] = -1.0*(1.0 - gc[0]*gc[0]);
2272 devFunValue[35] = -1.0*(1.0 - gc[0]*gc[0]);
2274 devFunValue[36] = 2.0*gc[1]*gc[2];
2275 devFunValue[37] = 2.0*gc[2]*(1.0 + gc[0]);
2276 devFunValue[38] = 2.0*gc[1]*(1.0 + gc[0]);
2278 devFunValue[39] = 2.0*gc[2]*(1.0 - gc[1] - gc[2]);
2279 devFunValue[40] = -2.0*gc[2]*(1.0 + gc[0]);
2280 devFunValue[41] = (2.0 - 2.0 * gc[1] - 4.0 * gc[2])*(1.0 + gc[0]);
2282 devFunValue[42] = 2.0*gc[1]*(1.0 - gc[1] - gc[2]);
2283 devFunValue[43] = (2.0 - 4*gc[1] - 2*gc[2])*(1.0 + gc[0]);
2284 devFunValue[44] = -2.0*gc[1]*(1.0 + gc[0]);
2286 DEV_SHAPE_FUN_MACRO_END;
2290 * Init Qaudratic Pentahedron Reference coordinates and Shape function.
2293 void GaussInfo::penta15bInit()
2295 LOCAL_COORD_MACRO_BEGIN;
2297 coords[0] = PENTA15B_REF[0];
2298 coords[1] = PENTA15B_REF[1];
2299 coords[2] = PENTA15B_REF[2];
2302 coords[0] = PENTA15B_REF[3];
2303 coords[1] = PENTA15B_REF[4];
2304 coords[2] = PENTA15B_REF[5];
2307 coords[0] = PENTA15B_REF[6];
2308 coords[1] = PENTA15B_REF[7];
2309 coords[2] = PENTA15B_REF[8];
2312 coords[0] = PENTA15B_REF[9];
2313 coords[1] = PENTA15B_REF[10];
2314 coords[2] = PENTA15B_REF[11];
2317 coords[0] = PENTA15B_REF[12];
2318 coords[1] = PENTA15B_REF[13];
2319 coords[2] = PENTA15B_REF[14];
2322 coords[0] = PENTA15B_REF[15];
2323 coords[1] = PENTA15B_REF[16];
2324 coords[2] = PENTA15B_REF[17];
2327 coords[0] = PENTA15B_REF[18];
2328 coords[1] = PENTA15B_REF[19];
2329 coords[2] = PENTA15B_REF[20];
2332 coords[0] = PENTA15B_REF[21];
2333 coords[1] = PENTA15B_REF[22];
2334 coords[2] = PENTA15B_REF[23];
2337 coords[0] = PENTA15B_REF[24];
2338 coords[1] = PENTA15B_REF[25];
2339 coords[2] = PENTA15B_REF[26];
2342 coords[0] = PENTA15B_REF[27];
2343 coords[1] = PENTA15B_REF[28];
2344 coords[2] = PENTA15B_REF[29];
2347 coords[0] = PENTA15B_REF[30];
2348 coords[1] = PENTA15B_REF[31];
2349 coords[2] = PENTA15B_REF[32];
2352 coords[0] = PENTA15B_REF[33];
2353 coords[1] = PENTA15B_REF[34];
2354 coords[2] = PENTA15B_REF[35];
2357 coords[0] = PENTA15B_REF[36];
2358 coords[1] = PENTA15B_REF[37];
2359 coords[2] = PENTA15B_REF[38];
2362 coords[0] = PENTA15B_REF[39];
2363 coords[1] = PENTA15B_REF[40];
2364 coords[2] = PENTA15B_REF[41];
2367 coords[0] = PENTA15B_REF[42];
2368 coords[1] = PENTA15B_REF[43];
2369 coords[2] = PENTA15B_REF[44];
2371 LOCAL_COORD_MACRO_END;
2373 SHAPE_FUN_MACRO_BEGIN;
2374 funValue[0] = 0.5*gc[1]*(1.0 - gc[0])*(2.0*gc[1] - 2.0 - gc[0]);
2375 funValue[2] = 0.5*gc[2]*(1.0 - gc[0])*(2.0*gc[2] - 2.0 - gc[0]);
2376 funValue[1] = 0.5*(gc[0] - 1.0)*(1.0 - gc[1] - gc[2])*(gc[0] + 2.0*gc[1] + 2.0*gc[2]);
2378 funValue[3] = 0.5*gc[1]*(1.0 + gc[0])*(2.0*gc[1] - 2.0 + gc[0]);
2379 funValue[5] = 0.5*gc[2]*(1.0 + gc[0])*(2.0*gc[2] - 2.0 + gc[0]);
2380 funValue[4] = 0.5*(-gc[0] - 1.0)*(1.0 - gc[1] - gc[2])*(-gc[0] + 2.0*gc[1] + 2.0*gc[2]);
2382 funValue[8] = 2.0*gc[1]*gc[2]*(1.0 - gc[0]);
2383 funValue[7] = 2.0*gc[2]*(1.0 - gc[1] - gc[2])*(1.0 - gc[0]);
2384 funValue[6] = 2.0*gc[1]*(1.0 - gc[1] - gc[2])*(1.0 - gc[0]);
2386 funValue[12] = gc[1]*(1.0 - gc[0]*gc[0]);
2387 funValue[14] = gc[2]*(1.0 - gc[0]*gc[0]);
2388 funValue[13] = (1.0 - gc[1] - gc[2])*(1.0 - gc[0]*gc[0]);
2390 funValue[11] = 2.0*gc[1]*gc[2]*(1.0 + gc[0]);
2391 funValue[10] = 2.0*gc[2]*(1.0 - gc[1] - gc[2])*(1.0 + gc[0]);
2392 funValue[9] = 2.0*gc[1]*(1.0 - gc[1] - gc[2])*(1.0 + gc[0]);
2393 SHAPE_FUN_MACRO_END;
2396 void GaussInfo::penta18aInit()
2398 LOCAL_COORD_MACRO_BEGIN;
2400 coords[0] = PENTA18A_REF[0];
2401 coords[1] = PENTA18A_REF[1];
2402 coords[2] = PENTA18A_REF[2];
2405 coords[0] = PENTA18A_REF[3];
2406 coords[1] = PENTA18A_REF[4];
2407 coords[2] = PENTA18A_REF[5];
2410 coords[0] = PENTA18A_REF[6];
2411 coords[1] = PENTA18A_REF[7];
2412 coords[2] = PENTA18A_REF[8];
2415 coords[0] = PENTA18A_REF[9];
2416 coords[1] = PENTA18A_REF[10];
2417 coords[2] = PENTA18A_REF[11];
2420 coords[0] = PENTA18A_REF[12];
2421 coords[1] = PENTA18A_REF[13];
2422 coords[2] = PENTA18A_REF[14];
2425 coords[0] = PENTA18A_REF[15];
2426 coords[1] = PENTA18A_REF[16];
2427 coords[2] = PENTA18A_REF[17];
2430 coords[0] = PENTA18A_REF[18];
2431 coords[1] = PENTA18A_REF[19];
2432 coords[2] = PENTA18A_REF[20];
2435 coords[0] = PENTA18A_REF[21];
2436 coords[1] = PENTA18A_REF[22];
2437 coords[2] = PENTA18A_REF[23];
2440 coords[0] = PENTA18A_REF[24];
2441 coords[1] = PENTA18A_REF[25];
2442 coords[2] = PENTA18A_REF[26];
2445 coords[0] = PENTA18A_REF[27];
2446 coords[1] = PENTA18A_REF[28];
2447 coords[2] = PENTA18A_REF[29];
2450 coords[0] = PENTA18A_REF[30];
2451 coords[1] = PENTA18A_REF[31];
2452 coords[2] = PENTA18A_REF[32];
2455 coords[0] = PENTA18A_REF[33];
2456 coords[1] = PENTA18A_REF[34];
2457 coords[2] = PENTA18A_REF[35];
2460 coords[0] = PENTA18A_REF[36];
2461 coords[1] = PENTA18A_REF[37];
2462 coords[2] = PENTA18A_REF[38];
2465 coords[0] = PENTA18A_REF[39];
2466 coords[1] = PENTA18A_REF[40];
2467 coords[2] = PENTA18A_REF[41];
2470 coords[0] = PENTA18A_REF[42];
2471 coords[1] = PENTA18A_REF[43];
2472 coords[2] = PENTA18A_REF[44];
2475 coords[0] = PENTA18A_REF[45];
2476 coords[1] = PENTA18A_REF[46];
2477 coords[2] = PENTA18A_REF[47];
2480 coords[0] = PENTA18A_REF[48];
2481 coords[1] = PENTA18A_REF[49];
2482 coords[2] = PENTA18A_REF[50];
2485 coords[0] = PENTA18A_REF[51];
2486 coords[1] = PENTA18A_REF[52];
2487 coords[2] = PENTA18A_REF[53];
2489 LOCAL_COORD_MACRO_END;
2491 SHAPE_FUN_MACRO_BEGIN;
2492 funValue[0] = 0.5*gc[1]*(1.0 - gc[0])*(2.0*gc[1] - 2.0 - gc[0]);
2493 funValue[1] = 0.5*gc[2]*(1.0 - gc[0])*(2.0*gc[2] - 2.0 - gc[0]);
2494 funValue[2] = 0.5*(gc[0] - 1.0)*(1.0 - gc[1] - gc[2])*(gc[0] + 2.0*gc[1] + 2.0*gc[2]);
2496 funValue[3] = 0.5*gc[1]*(1.0 + gc[0])*(2.0*gc[1] - 2.0 + gc[0]);
2497 funValue[4] = 0.5*gc[2]*(1.0 + gc[0])*(2.0*gc[2] - 2.0 + gc[0]);
2498 funValue[5] = 0.5*(-gc[0] - 1.0)*(1.0 - gc[1] - gc[2])*(-gc[0] + 2.0*gc[1] + 2.0*gc[2]);
2500 funValue[6] = 2.0*gc[1]*gc[2]*(1.0 - gc[0]);
2501 funValue[7] = 2.0*gc[2]*(1.0 - gc[1] - gc[2])*(1.0 - gc[0]);
2502 funValue[8] = 2.0*gc[1]*(1.0 - gc[1] - gc[2])*(1.0 - gc[0]);
2504 funValue[9] = gc[1]*(1.0 - gc[0]*gc[0]);
2505 funValue[10] = gc[2]*(1.0 - gc[0]*gc[0]);
2506 funValue[11] = (1.0 - gc[1] - gc[2])*(1.0 - gc[0]*gc[0]);
2508 funValue[12] = 2.0*gc[1]*gc[2]*(1.0 + gc[0]);
2509 funValue[13] = 2.0*gc[2]*(1.0 - gc[1] - gc[2])*(1.0 + gc[0]);
2510 funValue[14] = 2.0*gc[1]*(1.0 - gc[1] - gc[2])*(1.0 + gc[0]);
2512 funValue[15] = 4.0*gc[1]*gc[2]*(1.0 - gc[0] * gc[0]);
2513 funValue[16] = 4.0*gc[2]*(gc[0] * gc[0] - 1) * ( gc[2] + gc[1] - 1);
2514 funValue[17] = 4.0*gc[1]*(gc[0] * gc[0] - 1) * ( gc[2] + gc[1] - 1);
2515 SHAPE_FUN_MACRO_END;
2518 void GaussInfo::penta18bInit()
2520 LOCAL_COORD_MACRO_BEGIN;
2522 coords[0] = PENTA18B_REF[0];
2523 coords[1] = PENTA18B_REF[1];
2524 coords[2] = PENTA18B_REF[2];
2527 coords[0] = PENTA18B_REF[3];
2528 coords[1] = PENTA18B_REF[4];
2529 coords[2] = PENTA18B_REF[5];
2532 coords[0] = PENTA18B_REF[6];
2533 coords[1] = PENTA18B_REF[7];
2534 coords[2] = PENTA18B_REF[8];
2537 coords[0] = PENTA18B_REF[9];
2538 coords[1] = PENTA18B_REF[10];
2539 coords[2] = PENTA18B_REF[11];
2542 coords[0] = PENTA18B_REF[12];
2543 coords[1] = PENTA18B_REF[13];
2544 coords[2] = PENTA18B_REF[14];
2547 coords[0] = PENTA18B_REF[15];
2548 coords[1] = PENTA18B_REF[16];
2549 coords[2] = PENTA18B_REF[17];
2552 coords[0] = PENTA18B_REF[18];
2553 coords[1] = PENTA18B_REF[19];
2554 coords[2] = PENTA18B_REF[20];
2557 coords[0] = PENTA18B_REF[21];
2558 coords[1] = PENTA18B_REF[22];
2559 coords[2] = PENTA18B_REF[23];
2562 coords[0] = PENTA18B_REF[24];
2563 coords[1] = PENTA18B_REF[25];
2564 coords[2] = PENTA18B_REF[26];
2567 coords[0] = PENTA18B_REF[27];
2568 coords[1] = PENTA18B_REF[28];
2569 coords[2] = PENTA18B_REF[29];
2572 coords[0] = PENTA18B_REF[30];
2573 coords[1] = PENTA18B_REF[31];
2574 coords[2] = PENTA18B_REF[32];
2577 coords[0] = PENTA18B_REF[33];
2578 coords[1] = PENTA18B_REF[34];
2579 coords[2] = PENTA18B_REF[35];
2582 coords[0] = PENTA18B_REF[36];
2583 coords[1] = PENTA18B_REF[37];
2584 coords[2] = PENTA18B_REF[38];
2587 coords[0] = PENTA18B_REF[39];
2588 coords[1] = PENTA18B_REF[40];
2589 coords[2] = PENTA18B_REF[41];
2592 coords[0] = PENTA18B_REF[42];
2593 coords[1] = PENTA18B_REF[43];
2594 coords[2] = PENTA18B_REF[44];
2597 coords[0] = PENTA18B_REF[45];
2598 coords[1] = PENTA18B_REF[46];
2599 coords[2] = PENTA18B_REF[47];
2602 coords[0] = PENTA18B_REF[48];
2603 coords[1] = PENTA18B_REF[49];
2604 coords[2] = PENTA18B_REF[50];
2607 coords[0] = PENTA18B_REF[51];
2608 coords[1] = PENTA18B_REF[52];
2609 coords[2] = PENTA18B_REF[53];
2611 LOCAL_COORD_MACRO_END;
2613 SHAPE_FUN_MACRO_BEGIN;
2614 funValue[0] = 0.5*gc[1]*(1.0 - gc[0])*(2.0*gc[1] - 2.0 - gc[0]);
2615 funValue[2] = 0.5*gc[2]*(1.0 - gc[0])*(2.0*gc[2] - 2.0 - gc[0]);
2616 funValue[1] = 0.5*(gc[0] - 1.0)*(1.0 - gc[1] - gc[2])*(gc[0] + 2.0*gc[1] + 2.0*gc[2]);
2618 funValue[3] = 0.5*gc[1]*(1.0 + gc[0])*(2.0*gc[1] - 2.0 + gc[0]);
2619 funValue[5] = 0.5*gc[2]*(1.0 + gc[0])*(2.0*gc[2] - 2.0 + gc[0]);
2620 funValue[4] = 0.5*(-gc[0] - 1.0)*(1.0 - gc[1] - gc[2])*(-gc[0] + 2.0*gc[1] + 2.0*gc[2]);
2622 funValue[8] = 2.0*gc[1]*gc[2]*(1.0 - gc[0]);
2623 funValue[7] = 2.0*gc[2]*(1.0 - gc[1] - gc[2])*(1.0 - gc[0]);
2624 funValue[6] = 2.0*gc[1]*(1.0 - gc[1] - gc[2])*(1.0 - gc[0]);
2626 funValue[12] = gc[1]*(1.0 - gc[0]*gc[0]);
2627 funValue[14] = gc[2]*(1.0 - gc[0]*gc[0]);
2628 funValue[13] = (1.0 - gc[1] - gc[2])*(1.0 - gc[0]*gc[0]);
2630 funValue[11] = 2.0*gc[1]*gc[2]*(1.0 + gc[0]);
2631 funValue[10] = 2.0*gc[2]*(1.0 - gc[1] - gc[2])*(1.0 + gc[0]);
2632 funValue[9] = 2.0*gc[1]*(1.0 - gc[1] - gc[2])*(1.0 + gc[0]);
2634 funValue[17] = 4.0*gc[1]*gc[2]*(1.0 - gc[0] * gc[0]);
2635 funValue[16] = 4.0*gc[2]*(gc[0] * gc[0] - 1) * ( gc[2] + gc[1] - 1);
2636 funValue[15] = 4.0*gc[1]*(gc[0] * gc[0] - 1) * ( gc[2] + gc[1] - 1);
2637 SHAPE_FUN_MACRO_END;
2641 * Init Hehahedron Reference coordinates and Shape function.
2644 void GaussInfo::hexa8aInit()
2646 LOCAL_COORD_MACRO_BEGIN;
2648 coords[0] = HEXA8A_REF[0];
2649 coords[1] = HEXA8A_REF[1];
2650 coords[2] = HEXA8A_REF[2];
2653 coords[0] = HEXA8A_REF[3];
2654 coords[1] = HEXA8A_REF[4];
2655 coords[2] = HEXA8A_REF[5];
2658 coords[0] = HEXA8A_REF[6];
2659 coords[1] = HEXA8A_REF[7];
2660 coords[2] = HEXA8A_REF[8];
2663 coords[0] = HEXA8A_REF[9];
2664 coords[1] = HEXA8A_REF[10];
2665 coords[2] = HEXA8A_REF[11];
2668 coords[0] = HEXA8A_REF[12];
2669 coords[1] = HEXA8A_REF[13];
2670 coords[2] = HEXA8A_REF[14];
2673 coords[0] = HEXA8A_REF[15];
2674 coords[1] = HEXA8A_REF[16];
2675 coords[2] = HEXA8A_REF[17];
2678 coords[0] = HEXA8A_REF[18];
2679 coords[1] = HEXA8A_REF[19];
2680 coords[2] = HEXA8A_REF[20];
2683 coords[0] = HEXA8A_REF[21];
2684 coords[1] = HEXA8A_REF[22];
2685 coords[2] = HEXA8A_REF[23];
2687 LOCAL_COORD_MACRO_END;
2689 SHAPE_FUN_MACRO_BEGIN;
2690 funValue[0] = 0.125*(1.0 - gc[0])*(1.0 - gc[1])*(1.0 - gc[2]);
2691 funValue[1] = 0.125*(1.0 + gc[0])*(1.0 - gc[1])*(1.0 - gc[2]);
2692 funValue[2] = 0.125*(1.0 + gc[0])*(1.0 + gc[1])*(1.0 - gc[2]);
2693 funValue[3] = 0.125*(1.0 - gc[0])*(1.0 + gc[1])*(1.0 - gc[2]);
2695 funValue[4] = 0.125*(1.0 - gc[0])*(1.0 - gc[1])*(1.0 + gc[2]);
2696 funValue[5] = 0.125*(1.0 + gc[0])*(1.0 - gc[1])*(1.0 + gc[2]);
2697 funValue[6] = 0.125*(1.0 + gc[0])*(1.0 + gc[1])*(1.0 + gc[2]);
2698 funValue[7] = 0.125*(1.0 - gc[0])*(1.0 + gc[1])*(1.0 + gc[2]);
2699 SHAPE_FUN_MACRO_END;
2701 DEV_SHAPE_FUN_MACRO_BEGIN;
2703 devFunValue[0] = 0.125 * (-1.0) * (1.0 - gc[1])*(1.0 - gc[2]);
2704 devFunValue[1] = 0.125 * (1.0 - gc[0]) * (-1.0) * (1.0 - gc[2]);
2705 devFunValue[2] = 0.125 * (1.0 - gc[0]) * (1.0 - gc[1]) *(-1.0);
2707 devFunValue[3] = 0.125*(1.0 - gc[1])*(1.0 - gc[2]);
2708 devFunValue[4] = 0.125*(1.0 + gc[0])*(-1.0)*(1.0 - gc[2]);
2709 devFunValue[5] = 0.125*(1.0 + gc[0])*(1.0 - gc[1])*(-1.0);
2711 devFunValue[6] = 0.125*(1.0 + gc[1])*(1.0 - gc[2]);
2712 devFunValue[7] = 0.125*(1.0 + gc[0])*(1.0 - gc[2]);
2713 devFunValue[8] = 0.125*(1.0 + gc[0])*(1.0 + gc[1])*(-1.0);
2715 devFunValue[9 ] = 0.125*(-1.0)*(1.0 + gc[1])*(1.0 - gc[2]);
2716 devFunValue[10] = 0.125*(1.0 - gc[0])*(1.0 - gc[2]);
2717 devFunValue[11] = 0.125*(1.0 - gc[0])*(1.0 + gc[1])*(-1.0);
2719 devFunValue[12] = 0.125*(-1.0)*(1.0 - gc[1])*(1.0 + gc[2]);
2720 devFunValue[13] = 0.125*(1.0 - gc[0])*(-1.0)*(1.0 + gc[2]);
2721 devFunValue[14] = 0.125*(1.0 - gc[0])*(1.0 - gc[1]);
2723 devFunValue[15] = 0.125*(1.0 - gc[1])*(1.0 + gc[2]);
2724 devFunValue[16] = 0.125*(1.0 + gc[0])*(-1.0)*(1.0 + gc[2]);
2725 devFunValue[17] = 0.125*(1.0 + gc[0])*(1.0 - gc[1]);
2727 devFunValue[18] = 0.125*(1.0 + gc[1])*(1.0 + gc[2]);
2728 devFunValue[19] = 0.125*(1.0 + gc[0])*(1.0 + gc[2]);
2729 devFunValue[20] = 0.125*(1.0 + gc[0])*(1.0 + gc[1]);
2731 devFunValue[21] = 0.125*(-1.0)*(1.0 + gc[1])*(1.0 + gc[2]);
2732 devFunValue[22] = 0.125*(1.0 - gc[0])*(1.0 + gc[2]);
2733 devFunValue[23] = 0.125*(1.0 - gc[0])*(1.0 + gc[1]);
2735 DEV_SHAPE_FUN_MACRO_END;
2739 * Init Hehahedron Reference coordinates and Shape function.
2742 void GaussInfo::hexa8bInit()
2744 LOCAL_COORD_MACRO_BEGIN;
2746 coords[0] = HEXA8B_REF[0];
2747 coords[1] = HEXA8B_REF[1];
2748 coords[2] = HEXA8B_REF[2];
2751 coords[0] = HEXA8B_REF[3];
2752 coords[1] = HEXA8B_REF[4];
2753 coords[2] = HEXA8B_REF[5];
2756 coords[0] = HEXA8B_REF[6];
2757 coords[1] = HEXA8B_REF[7];
2758 coords[2] = HEXA8B_REF[8];
2761 coords[0] = HEXA8B_REF[9];
2762 coords[1] = HEXA8B_REF[10];
2763 coords[2] = HEXA8B_REF[11];
2766 coords[0] = HEXA8B_REF[12];
2767 coords[1] = HEXA8B_REF[13];
2768 coords[2] = HEXA8B_REF[14];
2771 coords[0] = HEXA8B_REF[15];
2772 coords[1] = HEXA8B_REF[16];
2773 coords[2] = HEXA8B_REF[17];
2776 coords[0] = HEXA8B_REF[18];
2777 coords[1] = HEXA8B_REF[19];
2778 coords[2] = HEXA8B_REF[20];
2781 coords[0] = HEXA8B_REF[21];
2782 coords[1] = HEXA8B_REF[22];
2783 coords[2] = HEXA8B_REF[23];
2785 LOCAL_COORD_MACRO_END;
2787 SHAPE_FUN_MACRO_BEGIN;
2788 funValue[0] = 0.125*(1.0 - gc[0])*(1.0 - gc[1])*(1.0 - gc[2]);
2789 funValue[3] = 0.125*(1.0 + gc[0])*(1.0 - gc[1])*(1.0 - gc[2]);
2790 funValue[2] = 0.125*(1.0 + gc[0])*(1.0 + gc[1])*(1.0 - gc[2]);
2791 funValue[1] = 0.125*(1.0 - gc[0])*(1.0 + gc[1])*(1.0 - gc[2]);
2793 funValue[4] = 0.125*(1.0 - gc[0])*(1.0 - gc[1])*(1.0 + gc[2]);
2794 funValue[7] = 0.125*(1.0 + gc[0])*(1.0 - gc[1])*(1.0 + gc[2]);
2795 funValue[6] = 0.125*(1.0 + gc[0])*(1.0 + gc[1])*(1.0 + gc[2]);
2796 funValue[5] = 0.125*(1.0 - gc[0])*(1.0 + gc[1])*(1.0 + gc[2]);
2797 SHAPE_FUN_MACRO_END;
2801 * This shapefunc map is same as degenerated quad4bInit
2803 void GaussInfo::hexa8DegQuad4aInit()
2805 LOCAL_COORD_MACRO_BEGIN;
2846 LOCAL_COORD_MACRO_END;
2848 SHAPE_FUN_MACRO_BEGIN;
2849 funValue[0] = 0.25*(1.0 + gc[1])*(1.0 - gc[0]);
2850 funValue[1] = 0.25*(1.0 - gc[1])*(1.0 - gc[0]);
2851 funValue[2] = 0.25*(1.0 - gc[1])*(1.0 + gc[0]);
2852 funValue[3] = 0.25*(1.0 + gc[0])*(1.0 + gc[1]);
2857 SHAPE_FUN_MACRO_END;
2861 * This shapefunc map is same as degenerated quad4bInit
2863 void GaussInfo::hexa8DegQuad4bInit()
2865 LOCAL_COORD_MACRO_BEGIN;
2906 LOCAL_COORD_MACRO_END;
2908 SHAPE_FUN_MACRO_BEGIN;
2909 funValue[0] = 0.25*(1.0 - gc[0])*(1.0 - gc[1]);
2910 funValue[1] = 0.25*(1.0 + gc[0])*(1.0 - gc[1]);
2911 funValue[2] = 0.25*(1.0 + gc[0])*(1.0 + gc[1]);
2912 funValue[3] = 0.25*(1.0 - gc[0])*(1.0 + gc[1]);
2917 SHAPE_FUN_MACRO_END;
2921 * This shapefunc map is same as degenerated quad4cInit
2923 void GaussInfo::hexa8DegQuad4cInit()
2925 LOCAL_COORD_MACRO_BEGIN;
2967 LOCAL_COORD_MACRO_END;
2969 SHAPE_FUN_MACRO_BEGIN;
2970 funValue[0] = 0.25*(1.0 - gc[0])*(1.0 - gc[1]);
2971 funValue[1] = 0.25*(1.0 - gc[0])*(1.0 + gc[1]);
2972 funValue[2] = 0.25*(1.0 + gc[0])*(1.0 + gc[1]);
2973 funValue[3] = 0.25*(1.0 + gc[0])*(1.0 - gc[1]);
2978 SHAPE_FUN_MACRO_END;
2982 * Init Qaudratic Hehahedron Reference coordinates and Shape function.
2985 void GaussInfo::hexa20aInit()
2987 LOCAL_COORD_MACRO_BEGIN;
2989 coords[0] = HEXA20A_REF[0];
2990 coords[1] = HEXA20A_REF[1];
2991 coords[2] = HEXA20A_REF[2];
2994 coords[0] = HEXA20A_REF[3];
2995 coords[1] = HEXA20A_REF[4];
2996 coords[2] = HEXA20A_REF[5];
2999 coords[0] = HEXA20A_REF[6];
3000 coords[1] = HEXA20A_REF[7];
3001 coords[2] = HEXA20A_REF[8];
3004 coords[0] = HEXA20A_REF[9];
3005 coords[1] = HEXA20A_REF[10];
3006 coords[2] = HEXA20A_REF[11];
3009 coords[0] = HEXA20A_REF[12];
3010 coords[1] = HEXA20A_REF[13];
3011 coords[2] = HEXA20A_REF[14];
3014 coords[0] = HEXA20A_REF[15];
3015 coords[1] = HEXA20A_REF[16];
3016 coords[2] = HEXA20A_REF[17];
3019 coords[0] = HEXA20A_REF[18];
3020 coords[1] = HEXA20A_REF[19];
3021 coords[2] = HEXA20A_REF[20];
3024 coords[0] = HEXA20A_REF[21];
3025 coords[1] = HEXA20A_REF[22];
3026 coords[2] = HEXA20A_REF[23];
3029 coords[0] = HEXA20A_REF[24];
3030 coords[1] = HEXA20A_REF[25];
3031 coords[2] = HEXA20A_REF[26];
3034 coords[0] = HEXA20A_REF[27];
3035 coords[1] = HEXA20A_REF[28];
3036 coords[2] = HEXA20A_REF[29];
3039 coords[0] = HEXA20A_REF[30];
3040 coords[1] = HEXA20A_REF[31];
3041 coords[2] = HEXA20A_REF[32];
3044 coords[0] = HEXA20A_REF[33];
3045 coords[1] = HEXA20A_REF[34];
3046 coords[2] = HEXA20A_REF[35];
3049 coords[0] = HEXA20A_REF[36];
3050 coords[1] = HEXA20A_REF[37];
3051 coords[2] = HEXA20A_REF[38];
3054 coords[0] = HEXA20A_REF[39];
3055 coords[1] = HEXA20A_REF[40];
3056 coords[2] = HEXA20A_REF[41];
3059 coords[0] = HEXA20A_REF[42];
3060 coords[1] = HEXA20A_REF[43];
3061 coords[2] = HEXA20A_REF[44];
3064 coords[0] = HEXA20A_REF[45];
3065 coords[1] = HEXA20A_REF[46];
3066 coords[2] = HEXA20A_REF[47];
3069 coords[0] = HEXA20A_REF[48];
3070 coords[1] = HEXA20A_REF[49];
3071 coords[2] = HEXA20A_REF[50];
3074 coords[0] = HEXA20A_REF[51];
3075 coords[1] = HEXA20A_REF[52];
3076 coords[2] = HEXA20A_REF[53];
3079 coords[0] = HEXA20A_REF[54];
3080 coords[1] = HEXA20A_REF[55];
3081 coords[2] = HEXA20A_REF[56];
3084 coords[0] = HEXA20A_REF[57];
3085 coords[1] = HEXA20A_REF[58];
3086 coords[2] = HEXA20A_REF[59];
3088 LOCAL_COORD_MACRO_END;
3090 SHAPE_FUN_MACRO_BEGIN;
3091 funValue[0] = 0.125*(1.0 - gc[0])*(1.0 - gc[1])*(1.0 - gc[2])*
3092 (-2.0 - gc[0] - gc[1] - gc[2]);
3093 funValue[1] = 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[2] = 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[3] = 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[4] = 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[5] = 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[6] = 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[7] = 0.125*(1.0 - gc[0])*(1.0 + gc[1])*(1.0 + gc[2])*
3106 (-2.0 - gc[0] + gc[1] + gc[2]);
3108 funValue[8] = 0.25*(1.0 - gc[0]*gc[0])*(1.0 - gc[1])*(1.0 - gc[2]);
3109 funValue[9] = 0.25*(1.0 - gc[1]*gc[1])*(1.0 + gc[0])*(1.0 - gc[2]);
3110 funValue[10] = 0.25*(1.0 - gc[0]*gc[0])*(1.0 + gc[1])*(1.0 - gc[2]);
3111 funValue[11] = 0.25*(1.0 - gc[1]*gc[1])*(1.0 - gc[0])*(1.0 - gc[2]);
3112 funValue[12] = 0.25*(1.0 - gc[2]*gc[2])*(1.0 - gc[0])*(1.0 - gc[1]);
3113 funValue[13] = 0.25*(1.0 - gc[2]*gc[2])*(1.0 + gc[0])*(1.0 - gc[1]);
3114 funValue[14] = 0.25*(1.0 - gc[2]*gc[2])*(1.0 + gc[0])*(1.0 + gc[1]);
3115 funValue[15] = 0.25*(1.0 - gc[2]*gc[2])*(1.0 - gc[0])*(1.0 + gc[1]);
3116 funValue[16] = 0.25*(1.0 - gc[0]*gc[0])*(1.0 - gc[1])*(1.0 + gc[2]);
3117 funValue[17] = 0.25*(1.0 - gc[1]*gc[1])*(1.0 + gc[0])*(1.0 + gc[2]);
3118 funValue[18] = 0.25*(1.0 - gc[0]*gc[0])*(1.0 + gc[1])*(1.0 + gc[2]);
3119 funValue[19] = 0.25*(1.0 - gc[1]*gc[1])*(1.0 - gc[0])*(1.0 + gc[2]);
3120 SHAPE_FUN_MACRO_END;
3122 DEV_SHAPE_FUN_MACRO_BEGIN;
3124 devFunValue[0] = 0.125*(1. + gc[1] + gc[2] + 2* gc[0]) * (1.0 - gc[1])*(1.0 - gc[2]);
3125 devFunValue[1] = 0.125*(1.0 - gc[0])*(1. + gc[0] + gc[2] + 2 * gc[1])*(1.0 - gc[2]);
3126 devFunValue[2] = 0.125*(1.0 - gc[0])*(1.0 - gc[1])*(1.0 + gc[0] + gc[1] + 2 *gc[2]);
3128 devFunValue[3] = 0.125*(-1.0 - gc[1] - gc[2] + 2*gc[0])*(1.0 - gc[1])*(1.0 - gc[2]);
3129 devFunValue[4] = 0.125*(1.0 + gc[0])* (1 - gc[0] + gc[2] + 2*gc[1]) *(1.0 - gc[2]);
3130 devFunValue[5] = 0.125*(1.0 + gc[0])*(1.0 - gc[1])* (1 - gc[0] + gc[1] + 2*gc[2]);
3132 devFunValue[6] = 0.125*(-1.0 + gc[1] - gc[2] + 2*gc[0])*(1.0 + gc[1])*(1.0 - gc[2]);
3133 devFunValue[7] = 0.125*(1.0 + gc[0])* (-1 + gc[0] - gc[2] + 2*gc[1]) *(1.0 - gc[2]);
3134 devFunValue[8] = 0.125*(1.0 + gc[0])*(1.0 + gc[1])*(1.0 - gc[0] - gc[1] + 2*gc[2]);
3136 devFunValue[9] = 0.125*(1.0 - gc[1] + gc[2] + 2*gc[0])*(1.0 + gc[1])*(1.0 - gc[2]);
3137 devFunValue[10] = 0.125*(1.0 - gc[0])*(-1 - gc[0] - gc[2] + 2*gc[1])*(1.0 - gc[2]);
3138 devFunValue[11] = 0.125*(1.0 - gc[0])*(1.0 + gc[1])*(1.0 + gc[0] - gc[1] + 2*gc[2]);
3140 devFunValue[12] = 0.125*(1.0 + gc[1] - gc[2] + 2*gc[0])*(1.0 - gc[1])*(1.0 + gc[2]);
3141 devFunValue[13] = 0.125*(1.0 - gc[0])*(1 + gc[0] - gc[2] + 2*gc[1])*(1.0 + gc[2]);
3142 devFunValue[14] = 0.125*(1.0 - gc[0])*(1.0 - gc[1])*(-1.0 - gc[0] - gc[1] + 2*gc[2]);
3144 devFunValue[15] = 0.125*(-1.0 - gc[1] + gc[2] + 2*gc[0])*(1.0 - gc[1])*(1.0 + gc[2]);
3145 devFunValue[16] = 0.125*(1.0 + gc[0])*(1 - gc[0] - gc[2] + 2*gc[1])*(1.0 + gc[2]);
3146 devFunValue[17] = 0.125*(1.0 + gc[0])*(1.0 - gc[1])*(-1.0 + gc[0] - gc[1] + 2*gc[2]);
3148 devFunValue[18] = 0.125*(-1.0 + gc[1] + gc[2] + 2*gc[0])*(1.0 + gc[1])*(1.0 + gc[2]);
3149 devFunValue[19] = 0.125*(1.0 + gc[0])*(-1 + gc[0] + gc[2] + 2*gc[1])*(1.0 + gc[2]);
3150 devFunValue[20] = 0.125*(1.0 + gc[0])*(1.0 + gc[1])*(-1.0 + gc[0] + gc[1] + 2*gc[2]);
3152 devFunValue[21] = 0.125*(1.0 - gc[1] - gc[2] + 2*gc[0])*(1.0 + gc[1])*(1.0 + gc[2]);
3153 devFunValue[22] = 0.125*(1.0 - gc[0])*(-1 - gc[0] + gc[2] + 2*gc[1])*(1.0 + gc[2]);
3154 devFunValue[23] = 0.125*(1.0 - gc[0])*(1.0 + gc[1])*(-1.0 - gc[0] + gc[1] + 2*gc[2]);
3156 devFunValue[24] = 0.25*(-2.0*gc[0])*(1.0 - gc[1])*(1.0 - gc[2]);
3157 devFunValue[25] = 0.25*(1.0 - gc[0]*gc[0])*(-1)*(1.0 - gc[2]);
3158 devFunValue[26] = 0.25*(1.0 - gc[0]*gc[0])*(1.0 - gc[1])*(-1.0);
3160 devFunValue[27] = 0.25*(1.0 - gc[1]*gc[1])*(1.0 - gc[2]);
3161 devFunValue[28] = 0.25*(-2.0*gc[1])*(1.0 + gc[0])*(1.0 - gc[2]);
3162 devFunValue[29] = 0.25*(1.0 - gc[1]*gc[1])*(1.0 + gc[0])*(-1.0);
3164 devFunValue[30] = 0.25*(-2.0*gc[0])*(1.0 + gc[1])*(1.0 - gc[2]);
3165 devFunValue[31] = 0.25*(1.0 - gc[0]*gc[0])*(1.0)*(1.0 - gc[2]);
3166 devFunValue[32] = 0.25*(1.0 - gc[0]*gc[0])*(1.0 + gc[1])*(-1.0);
3168 devFunValue[33] = 0.25*(1.0 - gc[1]*gc[1])*(-1.0)*(1.0 - gc[2]);
3169 devFunValue[34] = 0.25*(-2.0*gc[1])*(1.0 - gc[0])*(1.0 - gc[2]);
3170 devFunValue[35] = 0.25*(1.0 - gc[1]*gc[1])*(1.0 - gc[0])*(-1.0);
3172 devFunValue[36] = 0.25*(1.0 - gc[2]*gc[2])*(-1.0)*(1.0 - gc[1]);
3173 devFunValue[37] = 0.25*(1.0 - gc[2]*gc[2])*(1.0 - gc[0])*(-1.0);
3174 devFunValue[38] = 0.25*(-2.0*gc[2])*(1.0 - gc[0])*(1.0 - gc[1]);
3176 devFunValue[39] = 0.25*(1.0 - gc[2]*gc[2])*(1.0 - gc[1]);
3177 devFunValue[40] = 0.25*(1.0 - gc[2]*gc[2])*(1.0 + gc[0])*(-1.0);
3178 devFunValue[41] = 0.25*(-2.0*gc[2])*(1.0 + gc[0])*(1.0 - gc[1]);
3180 devFunValue[42] = 0.25*(1.0 - gc[2]*gc[2])*(1.0 + gc[1]);
3181 devFunValue[43] = 0.25*(1.0 - gc[2]*gc[2])*(1.0 + gc[0]);
3182 devFunValue[44] = 0.25*(-2.0*gc[2])*(1.0 + gc[0])*(1.0 + gc[1]);
3184 devFunValue[45] = 0.25*(1.0 - gc[2]*gc[2])*(-1.0)*(1.0 + gc[1]);
3185 devFunValue[46] = 0.25*(1.0 - gc[2]*gc[2])*(1.0 - gc[0]);
3186 devFunValue[47] = 0.25*(-2.0*gc[2])*(1.0 - gc[0])*(1.0 + gc[1]);
3188 devFunValue[48] = 0.25*(-2.0*gc[0])*(1.0 - gc[1])*(1.0 + gc[2]);
3189 devFunValue[49] = 0.25*(1.0 - gc[0]*gc[0])*(-1.0)*(1.0 + gc[2]);
3190 devFunValue[50] = 0.25*(1.0 - gc[0]*gc[0])*(1.0 - gc[1]);
3192 devFunValue[51] = 0.25*(1.0 - gc[1]*gc[1])*(1.0 + gc[2]);
3193 devFunValue[52] = 0.25*(-2.0*gc[1])*(1.0 + gc[0])*(1.0 + gc[2]);
3194 devFunValue[53] = 0.25*(1.0 - gc[1]*gc[1])*(1.0 + gc[0]);
3196 devFunValue[54] = 0.25*(-2.0*gc[0])*(1.0 + gc[1])*(1.0 + gc[2]);
3197 devFunValue[55] = 0.25*(1.0 - gc[0]*gc[0])*(1.0 + gc[2]);
3198 devFunValue[56] = 0.25*(1.0 - gc[0]*gc[0])*(1.0 + gc[1]);
3200 devFunValue[57] = 0.25*(1.0 - gc[1]*gc[1])*(-1.0)*(1.0 + gc[2]);
3201 devFunValue[58] = 0.25*(-2.0*gc[1])*(1.0 - gc[0])*(1.0 + gc[2]);
3202 devFunValue[59] = 0.25*(1.0 - gc[1]*gc[1])*(1.0 - gc[0]);
3204 SHAPE_FUN_MACRO_END;
3208 * Init Qaudratic Hehahedron Reference coordinates and Shape function.
3211 void GaussInfo::hexa20bInit()
3213 LOCAL_COORD_MACRO_BEGIN;
3215 coords[0] = HEXA20B_REF[0];
3216 coords[1] = HEXA20B_REF[1];
3217 coords[2] = HEXA20B_REF[2];
3220 coords[0] = HEXA20B_REF[3];
3221 coords[1] = HEXA20B_REF[4];
3222 coords[2] = HEXA20B_REF[5];
3225 coords[0] = HEXA20B_REF[6];
3226 coords[1] = HEXA20B_REF[7];
3227 coords[2] = HEXA20B_REF[8];
3230 coords[0] = HEXA20B_REF[9];
3231 coords[1] = HEXA20B_REF[10];
3232 coords[2] = HEXA20B_REF[11];
3235 coords[0] = HEXA20B_REF[12];
3236 coords[1] = HEXA20B_REF[13];
3237 coords[2] = HEXA20B_REF[14];
3240 coords[0] = HEXA20B_REF[15];
3241 coords[1] = HEXA20B_REF[16];
3242 coords[2] = HEXA20B_REF[17];
3245 coords[0] = HEXA20B_REF[18];
3246 coords[1] = HEXA20B_REF[19];
3247 coords[2] = HEXA20B_REF[20];
3250 coords[0] = HEXA20B_REF[21];
3251 coords[1] = HEXA20B_REF[22];
3252 coords[2] = HEXA20B_REF[23];
3255 coords[0] = HEXA20B_REF[24];
3256 coords[1] = HEXA20B_REF[25];
3257 coords[2] = HEXA20B_REF[26];
3260 coords[0] = HEXA20B_REF[27];
3261 coords[1] = HEXA20B_REF[28];
3262 coords[2] = HEXA20B_REF[29];
3265 coords[0] = HEXA20B_REF[30];
3266 coords[1] = HEXA20B_REF[31];
3267 coords[2] = HEXA20B_REF[32];
3270 coords[0] = HEXA20B_REF[33];
3271 coords[1] = HEXA20B_REF[34];
3272 coords[2] = HEXA20B_REF[35];
3275 coords[0] = HEXA20B_REF[36];
3276 coords[1] = HEXA20B_REF[37];
3277 coords[2] = HEXA20B_REF[38];
3280 coords[0] = HEXA20B_REF[39];
3281 coords[1] = HEXA20B_REF[40];
3282 coords[2] = HEXA20B_REF[41];
3285 coords[0] = HEXA20B_REF[42];
3286 coords[1] = HEXA20B_REF[43];
3287 coords[2] = HEXA20B_REF[44];
3290 coords[0] = HEXA20B_REF[45];
3291 coords[1] = HEXA20B_REF[46];
3292 coords[2] = HEXA20B_REF[47];
3295 coords[0] = HEXA20B_REF[48];
3296 coords[1] = HEXA20B_REF[49];
3297 coords[2] = HEXA20B_REF[50];
3300 coords[0] = HEXA20B_REF[51];
3301 coords[1] = HEXA20B_REF[52];
3302 coords[2] = HEXA20B_REF[53];
3305 coords[0] = HEXA20B_REF[54];
3306 coords[1] = HEXA20B_REF[55];
3307 coords[2] = HEXA20B_REF[56];
3310 coords[0] = HEXA20B_REF[57];
3311 coords[1] = HEXA20B_REF[58];
3312 coords[2] = HEXA20B_REF[59];
3314 LOCAL_COORD_MACRO_END;
3316 SHAPE_FUN_MACRO_BEGIN;
3318 funValue[0] = 0.125*(1.0 - gc[0])*(1.0 - gc[1])*(1.0 - gc[2])*
3319 (-2.0 - gc[0] - gc[1] - gc[2]);
3320 funValue[3] = 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[2] = 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[1] = 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[4] = 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[7] = 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[6] = 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[5] = 0.125*(1.0 - gc[0])*(1.0 + gc[1])*(1.0 + gc[2])*
3333 (-2.0 - gc[0] + gc[1] + gc[2]);
3335 funValue[11] = 0.25*(1.0 - gc[0]*gc[0])*(1.0 - gc[1])*(1.0 - gc[2]);
3336 funValue[10] = 0.25*(1.0 - gc[1]*gc[1])*(1.0 + gc[0])*(1.0 - gc[2]);
3337 funValue[9] = 0.25*(1.0 - gc[0]*gc[0])*(1.0 + gc[1])*(1.0 - gc[2]);
3338 funValue[8] = 0.25*(1.0 - gc[1]*gc[1])*(1.0 - gc[0])*(1.0 - gc[2]);
3339 funValue[16] = 0.25*(1.0 - gc[2]*gc[2])*(1.0 - gc[0])*(1.0 - gc[1]);
3340 funValue[19] = 0.25*(1.0 - gc[2]*gc[2])*(1.0 + gc[0])*(1.0 - gc[1]);
3341 funValue[18] = 0.25*(1.0 - gc[2]*gc[2])*(1.0 + gc[0])*(1.0 + gc[1]);
3342 funValue[17] = 0.25*(1.0 - gc[2]*gc[2])*(1.0 - gc[0])*(1.0 + gc[1]);
3343 funValue[15] = 0.25*(1.0 - gc[0]*gc[0])*(1.0 - gc[1])*(1.0 + gc[2]);
3344 funValue[14] = 0.25*(1.0 - gc[1]*gc[1])*(1.0 + gc[0])*(1.0 + gc[2]);
3345 funValue[13] = 0.25*(1.0 - gc[0]*gc[0])*(1.0 + gc[1])*(1.0 + gc[2]);
3346 funValue[12] = 0.25*(1.0 - gc[1]*gc[1])*(1.0 - gc[0])*(1.0 + gc[2]);
3347 SHAPE_FUN_MACRO_END;
3350 void GaussInfo::hexa27aInit()
3352 LOCAL_COORD_MACRO_BEGIN;
3354 coords[0] = HEXA27A_REF[0];
3355 coords[1] = HEXA27A_REF[1];
3356 coords[2] = HEXA27A_REF[2];
3359 coords[0] = HEXA27A_REF[3];
3360 coords[1] = HEXA27A_REF[4];
3361 coords[2] = HEXA27A_REF[5];
3364 coords[0] = HEXA27A_REF[6];
3365 coords[1] = HEXA27A_REF[7];
3366 coords[2] = HEXA27A_REF[8];
3369 coords[0] = HEXA27A_REF[9];
3370 coords[1] = HEXA27A_REF[10];
3371 coords[2] = HEXA27A_REF[11];
3374 coords[0] = HEXA27A_REF[12];
3375 coords[1] = HEXA27A_REF[13];
3376 coords[2] = HEXA27A_REF[14];
3379 coords[0] = HEXA27A_REF[15];
3380 coords[1] = HEXA27A_REF[16];
3381 coords[2] = HEXA27A_REF[17];
3384 coords[0] = HEXA27A_REF[18];
3385 coords[1] = HEXA27A_REF[19];
3386 coords[2] = HEXA27A_REF[20];
3389 coords[0] = HEXA27A_REF[21];
3390 coords[1] = HEXA27A_REF[22];
3391 coords[2] = HEXA27A_REF[23];
3394 coords[0] = HEXA27A_REF[24];
3395 coords[1] = HEXA27A_REF[25];
3396 coords[2] = HEXA27A_REF[26];
3399 coords[0] = HEXA27A_REF[27];
3400 coords[1] = HEXA27A_REF[28];
3401 coords[2] = HEXA27A_REF[29];
3404 coords[0] = HEXA27A_REF[30];
3405 coords[1] = HEXA27A_REF[31];
3406 coords[2] = HEXA27A_REF[32];
3409 coords[0] = HEXA27A_REF[33];
3410 coords[1] = HEXA27A_REF[34];
3411 coords[2] = HEXA27A_REF[35];
3414 coords[0] = HEXA27A_REF[36];
3415 coords[1] = HEXA27A_REF[37];
3416 coords[2] = HEXA27A_REF[38];
3419 coords[0] = HEXA27A_REF[39];
3420 coords[1] = HEXA27A_REF[40];
3421 coords[2] = HEXA27A_REF[41];
3424 coords[0] = HEXA27A_REF[42];
3425 coords[1] = HEXA27A_REF[43];
3426 coords[2] = HEXA27A_REF[44];
3429 coords[0] = HEXA27A_REF[45];
3430 coords[1] = HEXA27A_REF[46];
3431 coords[2] = HEXA27A_REF[47];
3434 coords[0] = HEXA27A_REF[48];
3435 coords[1] = HEXA27A_REF[49];
3436 coords[2] = HEXA27A_REF[50];
3439 coords[0] = HEXA27A_REF[51];
3440 coords[1] = HEXA27A_REF[52];
3441 coords[2] = HEXA27A_REF[53];
3444 coords[0] = HEXA27A_REF[54];
3445 coords[1] = HEXA27A_REF[55];
3446 coords[2] = HEXA27A_REF[56];
3449 coords[0] = HEXA27A_REF[57];
3450 coords[1] = HEXA27A_REF[58];
3451 coords[2] = HEXA27A_REF[59];
3454 coords[0] = HEXA27A_REF[60];
3455 coords[1] = HEXA27A_REF[61];
3456 coords[2] = HEXA27A_REF[62];
3459 coords[0] = HEXA27A_REF[63];
3460 coords[1] = HEXA27A_REF[64];
3461 coords[2] = HEXA27A_REF[65];
3464 coords[0] = HEXA27A_REF[66];
3465 coords[1] = HEXA27A_REF[67];
3466 coords[2] = HEXA27A_REF[68];
3469 coords[0] = HEXA27A_REF[69];
3470 coords[1] = HEXA27A_REF[70];
3471 coords[2] = HEXA27A_REF[71];
3474 coords[0] = HEXA27A_REF[72];
3475 coords[1] = HEXA27A_REF[73];
3476 coords[2] = HEXA27A_REF[74];
3479 coords[0] = HEXA27A_REF[75];
3480 coords[1] = HEXA27A_REF[76];
3481 coords[2] = HEXA27A_REF[77];
3484 coords[0] = HEXA27A_REF[78];
3485 coords[1] = HEXA27A_REF[79];
3486 coords[2] = HEXA27A_REF[80];
3488 LOCAL_COORD_MACRO_END;
3490 SHAPE_FUN_MACRO_BEGIN;
3492 funValue[0] =0.125*gc[0]*(gc[0]-1.)*gc[1]*(gc[1]-1.)*gc[2]*(gc[2]-1.);
3493 funValue[1] =0.125*gc[0]*(gc[0]-1.)*gc[1]*(gc[1]+1.)*gc[2]*(gc[2]-1.);
3494 funValue[2] =0.125*gc[0]*(gc[0]+1.)*gc[1]*(gc[1]+1.)*gc[2]*(gc[2]-1.);
3495 funValue[3] =0.125*gc[0]*(gc[0]+1.)*gc[1]*(gc[1]-1.)*gc[2]*(gc[2]-1.);
3496 funValue[4] =0.125*gc[0]*(gc[0]-1.)*gc[1]*(gc[1]-1.)*gc[2]*(gc[2]+1.);
3497 funValue[5] =0.125*gc[0]*(gc[0]-1.)*gc[1]*(gc[1]+1.)*gc[2]*(gc[2]+1.);
3498 funValue[6] =0.125*gc[0]*(gc[0]+1.)*gc[1]*(gc[1]+1.)*gc[2]*(gc[2]+1.);
3499 funValue[7] =0.125*gc[0]*(gc[0]+1.)*gc[1]*(gc[1]-1.)*gc[2]*(gc[2]+1.);
3500 funValue[8] =0.25*gc[0]*(gc[0]-1.)*(1.-gc[1]*gc[1])*gc[2]*(gc[2]-1.);
3501 funValue[9] =0.25*(1.-gc[0]*gc[0])*gc[1]*(gc[1]+1.)*gc[2]*(gc[2]-1.);
3502 funValue[10]=0.25*gc[0]*(gc[0]+1.)*(1.-gc[1]*gc[1])*gc[2]*(gc[2]-1.);
3503 funValue[11]=0.25*(1.-gc[0]*gc[0])*gc[1]*(gc[1]-1.)*gc[2]*(gc[2]-1.);
3504 funValue[12]=0.25*gc[0]*(gc[0]-1.)*(1.-gc[1]*gc[1])*gc[2]*(gc[2]+1.);
3505 funValue[13]=0.25*(1.-gc[0]*gc[0])*gc[1]*(gc[1]+1.)*gc[2]*(gc[2]+1.);
3506 funValue[14]=0.25*gc[0]*(gc[0]+1.)*(1.-gc[1]*gc[1])*gc[2]*(gc[2]+1.);
3507 funValue[15]=0.25*(1.-gc[0]*gc[0])*gc[1]*(gc[1]-1.)*gc[2]*(gc[2]+1.);
3508 funValue[16]=0.25*gc[0]*(gc[0]-1.)*gc[1]*(gc[1]-1.)*(1.-gc[2]*gc[2]);
3509 funValue[17]=0.25*gc[0]*(gc[0]-1.)*gc[1]*(gc[1]+1.)*(1.-gc[2]*gc[2]);
3510 funValue[18]=0.25*gc[0]*(gc[0]+1.)*gc[1]*(gc[1]+1.)*(1.-gc[2]*gc[2]);
3511 funValue[19]=0.25*gc[0]*(gc[0]+1.)*gc[1]*(gc[1]-1.)*(1.-gc[2]*gc[2]);
3512 funValue[20]=0.5*(1.-gc[0]*gc[0])*(1.-gc[1]*gc[1])*gc[2]*(gc[2]-1.);
3513 funValue[21]=0.5*gc[0]*(gc[0]-1.)*(1.-gc[1]*gc[1])*(1.-gc[2]*gc[2]);
3514 funValue[22]=0.5*(1.-gc[0]*gc[0])*gc[1]*(gc[1]+1.)*(1.-gc[2]*gc[2]);
3515 funValue[23]=0.5*gc[0]*(gc[0]+1.)*(1.-gc[1]*gc[1])*(1.-gc[2]*gc[2]);
3516 funValue[24]=0.5*(1.-gc[0]*gc[0])*gc[1]*(gc[1]-1.)*(1.-gc[2]*gc[2]);
3517 funValue[25]=0.5*(1.-gc[0]*gc[0])*(1.-gc[1]*gc[1])*gc[2]*(gc[2]+1.);
3518 funValue[26]=(1.-gc[0]*gc[0])*(1.-gc[1]*gc[1])*(1.-gc[2]*gc[2]);
3520 SHAPE_FUN_MACRO_END;
3522 DEV_SHAPE_FUN_MACRO_BEGIN;
3524 devFunValue[0] = 0.125*(2*gc[0]-1.)*gc[1]*(gc[1]-1.)*gc[2]*(gc[2]-1.);
3525 devFunValue[1] = 0.125*gc[0]*(gc[0]-1.)*(2*gc[1]-1.)*gc[2]*(gc[2]-1.);
3526 devFunValue[2] = 0.125*gc[0]*(gc[0]-1.)*gc[1]*(gc[1]-1.)*(2*gc[2]-1.);
3528 devFunValue[3] = 0.125*(2*gc[0]-1.)*gc[1]*(gc[1]+1.)*gc[2]*(gc[2]-1.);
3529 devFunValue[4] = 0.125*gc[0]*(gc[0]-1.)*(2*gc[1]+1.)*gc[2]*(gc[2]-1.);
3530 devFunValue[5] = 0.125*gc[0]*(gc[0]-1.)*gc[1]*(gc[1]+1.)*(2*gc[2]-1.);
3532 devFunValue[6] = 0.125*(2*gc[0]+1.)*gc[1]*(gc[1]+1.)*gc[2]*(gc[2]-1.);
3533 devFunValue[7] = 0.125*gc[0]*(gc[0]+1.)*(2*gc[1]+1.)*gc[2]*(gc[2]-1.);
3534 devFunValue[8] = 0.125*gc[0]*(gc[0]+1.)*gc[1]*(gc[1]+1.)*(2*gc[2]-1.);
3536 devFunValue[9] = 0.125*(2*gc[0]+1.)*gc[1]*(gc[1]-1.)*gc[2]*(gc[2]-1.);
3537 devFunValue[10] = 0.125*gc[0]*(gc[0]+1.)*(2*gc[1]-1.)*gc[2]*(gc[2]-1.);
3538 devFunValue[11] = 0.125*gc[0]*(gc[0]+1.)*gc[1]*(gc[1]-1.)*(2*gc[2]-1.);
3540 devFunValue[12] = 0.125*(2*gc[0]-1.)*gc[1]*(gc[1]-1.)*gc[2]*(gc[2]+1.);
3541 devFunValue[13] = 0.125*gc[0]*(gc[0]-1.)*(2*gc[1]-1.)*gc[2]*(gc[2]+1.);
3542 devFunValue[14] = 0.125*gc[0]*(gc[0]-1.)*gc[1]*(gc[1]-1.)*(2*gc[2]+1.);
3544 devFunValue[15] = 0.125*(2*gc[0]-1.)*gc[1]*(gc[1]+1.)*gc[2]*(gc[2]+1.);
3545 devFunValue[16] = 0.125*gc[0]*(gc[0]-1.)*(2*gc[1]+1.)*gc[2]*(gc[2]+1.);
3546 devFunValue[17] = 0.125*gc[0]*(gc[0]-1.)*gc[1]*(gc[1]+1.)*(2*gc[2]+1.);
3548 devFunValue[18] = 0.125*(2*gc[0]+1.)*gc[1]*(gc[1]+1.)*gc[2]*(gc[2]+1.);
3549 devFunValue[19] = 0.125*gc[0]*(gc[0]+1.)*(2*gc[1]+1.)*gc[2]*(gc[2]+1.);
3550 devFunValue[20] = 0.125*gc[0]*(gc[0]+1.)*gc[1]*(gc[1]+1.)*(2*gc[2]+1.);
3552 devFunValue[21] = 0.125*(2*gc[0]+1.)*gc[1]*(gc[1]-1.)*gc[2]*(gc[2]+1.);
3553 devFunValue[22] = 0.125*gc[0]*(gc[0]+1.)*(2*gc[1]-1.)*gc[2]*(gc[2]+1.);
3554 devFunValue[23] = 0.125*gc[0]*(gc[0]+1.)*gc[1]*(gc[1]-1.)*(2*gc[2]+1.);
3556 devFunValue[24] = 0.25*(2*gc[0]-1.)*(1.-gc[1]*gc[1])*gc[2]*(gc[2]-1.);
3557 devFunValue[25] = 0.25*gc[0]*(gc[0]-1.)*(-2*gc[1])*gc[2]*(gc[2]-1.);
3558 devFunValue[26] = 0.25*gc[0]*(gc[0]-1.)*(1.-gc[1]*gc[1])*(2*gc[2]-1.);
3560 devFunValue[27] = 0.25*(-2*gc[0])*gc[1]*(gc[1]+1.)*gc[2]*(gc[2]-1.);
3561 devFunValue[28] = 0.25*(1.-gc[0]*gc[0])*(2*gc[1]+1.)*gc[2]*(gc[2]-1.);
3562 devFunValue[29] = 0.25*(1.-gc[0]*gc[0])*gc[1]*(gc[1]+1.)*(2*gc[2]-1.);
3564 devFunValue[30] = 0.25*(2*gc[0]+1.)*(1.-gc[1]*gc[1])*gc[2]*(gc[2]-1.);
3565 devFunValue[31] = 0.25*gc[0]*(gc[0]+1.)*(-2*gc[1])*gc[2]*(gc[2]-1.);
3566 devFunValue[32] = 0.25*gc[0]*(gc[0]+1.)*(1.-gc[1]*gc[1])*(2*gc[2]-1.);
3568 devFunValue[33] = 0.25*(-2*gc[0])*gc[1]*(gc[1]-1.)*gc[2]*(gc[2]-1.);
3569 devFunValue[34] = 0.25*(1.-gc[0]*gc[0])*(2*gc[1]-1.)*gc[2]*(gc[2]-1.);
3570 devFunValue[35] = 0.25*(1.-gc[0]*gc[0])*gc[1]*(gc[1]-1.)*(2*gc[2]-1.);
3572 devFunValue[36] = 0.25*(2*gc[0]-1.)*(1.-gc[1]*gc[1])*gc[2]*(gc[2]+1.);
3573 devFunValue[37] = 0.25*gc[0]*(gc[0]-1.)*(-2*gc[1])*gc[2]*(gc[2]+1.);
3574 devFunValue[38] = 0.25*gc[0]*(gc[0]-1.)*(1.-gc[1]*gc[1])*(2*gc[2]+1.);
3576 devFunValue[39] = 0.25*(-2*gc[0])*gc[1]*(gc[1]+1.)*gc[2]*(gc[2]+1.);
3577 devFunValue[40] = 0.25*(1.-gc[0]*gc[0])*(2*gc[1]+1.)*gc[2]*(gc[2]+1.);
3578 devFunValue[41] = 0.25*(1.-gc[0]*gc[0])*gc[1]*(gc[1]+1.)*(2*gc[2]+1.);
3580 devFunValue[42] = 0.25*(2*gc[0]+1.)*(1.-gc[1]*gc[1])*gc[2]*(gc[2]+1.);
3581 devFunValue[43] = 0.25*gc[0]*(gc[0]+1.)*(-2*gc[1])*gc[2]*(gc[2]+1.);
3582 devFunValue[44] = 0.25*gc[0]*(gc[0]+1.)*(1.-gc[1]*gc[1])*(2*gc[2]+1.);
3584 devFunValue[45] = 0.25*(-2*gc[0])*gc[1]*(gc[1]-1.)*gc[2]*(gc[2]+1.);
3585 devFunValue[46] = 0.25*(1.-gc[0]*gc[0])*(2*gc[1]-1.)*gc[2]*(gc[2]+1.);
3586 devFunValue[47] = 0.25*(1.-gc[0]*gc[0])*gc[1]*(gc[1]-1.)*(2*gc[2]+1.);
3588 devFunValue[48] = 0.25*(2*gc[0]-1.)*gc[1]*(gc[1]-1.)*(1.-gc[2]*gc[2]);
3589 devFunValue[49] = 0.25*gc[0]*(gc[0]-1.)*(2*gc[1]-1.)*(1.-gc[2]*gc[2]);
3590 devFunValue[50] = 0.25*gc[0]*(gc[0]-1.)*gc[1]*(gc[1]-1.)*(-2*gc[2]);
3592 devFunValue[51] = 0.25*(2*gc[0]-1.)*gc[1]*(gc[1]+1.)*(1.-gc[2]*gc[2]);
3593 devFunValue[52] = 0.25*gc[0]*(gc[0]-1.)*(2*gc[1]+1.)*(1.-gc[2]*gc[2]);
3594 devFunValue[53] = 0.25*gc[0]*(gc[0]-1.)*gc[1]*(gc[1]+1.)*(-2*gc[2]);
3596 devFunValue[54] = 0.25*(2*gc[0]+1.)*gc[1]*(gc[1]+1.)*(1.-gc[2]*gc[2]);
3597 devFunValue[55] = 0.25*gc[0]*(gc[0]+1.)*(2*gc[1]+1.)*(1.-gc[2]*gc[2]);
3598 devFunValue[56] = 0.25*gc[0]*(gc[0]+1.)*gc[1]*(gc[1]+1.)*(-2*gc[2]);
3600 devFunValue[57] = 0.25*(2*gc[0]+1.)*gc[1]*(gc[1]-1.)*(1.-gc[2]*gc[2]);
3601 devFunValue[58] = 0.25*gc[0]*(gc[0]+1.)*(2*gc[1]-1.)*(1.-gc[2]*gc[2]);
3602 devFunValue[59] = 0.25*gc[0]*(gc[0]+1.)*gc[1]*(gc[1]-1.)*(-2*gc[2]);
3604 devFunValue[60] = 0.5*(-2*gc[0])*(1.-gc[1]*gc[1])*gc[2]*(gc[2]-1.);
3605 devFunValue[61] = 0.5*(1.-gc[0]*gc[0])*(-2*gc[1])*gc[2]*(gc[2]-1.);
3606 devFunValue[62] = 0.5*(1.-gc[0]*gc[0])*(1.-gc[1]*gc[1])*(2*gc[2]-1.);
3608 devFunValue[63] = 0.5*(2*gc[0]-1.)*(1.-gc[1]*gc[1])*(1.-gc[2]*gc[2]);
3609 devFunValue[64] = 0.5*gc[0]*(gc[0]-1.)*(-2*gc[1])*(1.-gc[2]*gc[2]);
3610 devFunValue[65] = 0.5*gc[0]*(gc[0]-1.)*(1.-gc[1]*gc[1])*(-2*gc[2]);
3612 devFunValue[66] = 0.5*(-2*gc[0])*gc[1]*(gc[1]+1.)*(1.-gc[2]*gc[2]);
3613 devFunValue[67] = 0.5*(1.-gc[0]*gc[0])*(2*gc[1]+1.)*(1.-gc[2]*gc[2]);
3614 devFunValue[68] = 0.5*(1.-gc[0]*gc[0])*gc[1]*(gc[1]+1.)*(-2*gc[2]);
3616 devFunValue[69] = 0.5*(2*gc[0]+1.)*(1.-gc[1]*gc[1])*(1.-gc[2]*gc[2]);
3617 devFunValue[70] = 0.5*gc[0]*(gc[0]+1.)*(-2*gc[1])*(1.-gc[2]*gc[2]);
3618 devFunValue[71] = 0.5*gc[0]*(gc[0]+1.)*(1.-gc[1]*gc[1])*(-2*gc[2]);
3620 devFunValue[72] = 0.5*(-2*gc[0])*gc[1]*(gc[1]-1.)*(1.-gc[2]*gc[2]);
3621 devFunValue[73] = 0.5*(1.-gc[0]*gc[0])*(2*gc[1]-1.)*(1.-gc[2]*gc[2]);
3622 devFunValue[74] = 0.5*(1.-gc[0]*gc[0])*gc[1]*(gc[1]-1.)*(-2*gc[2]);
3624 devFunValue[75] = 0.5*(-2*gc[0])*(1.-gc[1]*gc[1])*gc[2]*(gc[2]+1.);
3625 devFunValue[76] = 0.5*(1.-gc[0]*gc[0])*(-2*gc[1])*gc[2]*(gc[2]+1.);
3626 devFunValue[77] = 0.5*(1.-gc[0]*gc[0])*(1.-gc[1]*gc[1])*(2*gc[2]+1.);
3628 devFunValue[78] = (-2*gc[0])*(1.-gc[1]*gc[1])*(1.-gc[2]*gc[2]);
3629 devFunValue[79] = (1.-gc[0]*gc[0])*(-2*gc[1])*(1.-gc[2]*gc[2]);
3630 devFunValue[80] = (1.-gc[0]*gc[0])*(1.-gc[1]*gc[1])*(-2*gc[2]);
3632 DEV_SHAPE_FUN_MACRO_END;
3635 ////////////////////////////////////////////////////////////////////////////////////////////////
3636 // GAUSS COORD CLASS //
3637 ////////////////////////////////////////////////////////////////////////////////////////////////
3641 GaussCoords::GaussCoords()
3648 GaussCoords::~GaussCoords()
3650 GaussInfoVector::iterator it = _my_gauss_info.begin();
3651 for( ; it != _my_gauss_info.end(); it++ )
3659 * Add Gauss localization info
3661 void GaussCoords::addGaussInfo( NormalizedCellType theGeometry,
3663 const double* theGaussCoord,
3664 mcIdType theNbGauss,
3665 const double* theReferenceCoord,
3668 GaussInfoVector::iterator it = _my_gauss_info.begin();
3669 for( ; it != _my_gauss_info.end(); it++ )
3671 if( (*it)->getCellType() == theGeometry )
3677 DataVector aGaussCoord;
3678 for(int i = 0 ; i < theNbGauss*coordDim; i++ )
3679 aGaussCoord.push_back(theGaussCoord[i]);
3681 DataVector aReferenceCoord;
3682 for(int i = 0 ; i < theNbRef*coordDim; i++ )
3683 aReferenceCoord.push_back(theReferenceCoord[i]);
3686 GaussInfo* info = new GaussInfo( theGeometry, aGaussCoord, FromIdType<int>(theNbGauss), aReferenceCoord, FromIdType<int>(theNbRef));
3687 info->initLocalInfo();
3689 //If info with cell type doesn't exist add it
3690 if( it == _my_gauss_info.end() )
3692 _my_gauss_info.push_back(info);
3694 // If information exists, update it
3698 std::size_t index = std::distance(_my_gauss_info.begin(),it);
3700 _my_gauss_info[index] = info;
3706 * Calculate gauss points coordinates
3708 double* GaussCoords::calculateCoords( NormalizedCellType theGeometry,
3709 const double *theNodeCoords,
3710 const int theSpaceDim,
3711 const mcIdType *theIndex)
3713 const GaussInfo *info = getInfoGivenCellType(theGeometry);
3714 int nbCoords = theSpaceDim * info->getNbGauss();
3715 double *aCoords = new double[nbCoords];
3716 calculateCoordsAlg(info,theNodeCoords,theSpaceDim,theIndex,aCoords);
3721 void GaussCoords::calculateCoords( NormalizedCellType theGeometry, const double *theNodeCoords, const int theSpaceDim, const mcIdType *theIndex, double *result)
3723 const GaussInfo *info = getInfoGivenCellType(theGeometry);
3724 calculateCoordsAlg(info,theNodeCoords,theSpaceDim,theIndex,result);
3727 void GaussCoords::calculateCoordsAlg(const GaussInfo *info, const double* theNodeCoords, const int theSpaceDim, const mcIdType *theIndex, double *result)
3729 int aConn = info->getNbRef();
3731 int nbCoords = theSpaceDim * info->getNbGauss();
3732 std::fill(result,result+nbCoords,0.);
3734 for( int gaussId = 0; gaussId < info->getNbGauss(); gaussId++ )
3736 double *coord=result+gaussId*theSpaceDim;
3737 const double *function=info->getFunctionValues(gaussId);
3738 for ( int connId = 0; connId < aConn ; connId++ )
3740 const double* nodeCoord = theNodeCoords + (theIndex[connId]*theSpaceDim);
3741 for( int dimId = 0; dimId < theSpaceDim; dimId++ )
3742 coord[dimId] += nodeCoord[dimId]*function[connId];
3747 const GaussInfo *GaussCoords::getInfoGivenCellType(NormalizedCellType cellType)
3749 GaussInfoVector::const_iterator it = _my_gauss_info.begin();
3750 //Try to find gauss localization info
3751 for( ; it != _my_gauss_info.end() ; it++ )
3752 if( (*it)->getCellType()==cellType)
3754 throw INTERP_KERNEL::Exception("Can't find gauss localization information !");