1 // Copyright (C) 2007-2019 CEA/DEN, EDF R&D
3 // This library is free software; you can redistribute it and/or
4 // modify it under the terms of the GNU Lesser General Public
5 // License as published by the Free Software Foundation; either
6 // version 2.1 of the License, or (at your option) any later version.
8 // This library is distributed in the hope that it will be useful,
9 // but WITHOUT ANY WARRANTY; without even the implied warranty of
10 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
11 // Lesser General Public License for more details.
13 // You should have received a copy of the GNU Lesser General Public
14 // License along with this library; if not, write to the Free Software
15 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
17 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
21 #include "InterpKernelGaussCoords.hxx"
22 #include "CellModel.hxx"
29 using namespace INTERP_KERNEL;
31 const double GaussInfo::SEG2A_REF[2]={-1.0, 1.0};
33 const double GaussInfo::SEG2B_REF[2]={0., 1.0};
35 const double GaussInfo::SEG3_REF[3]={-1.0, 1.0, 0.0};
37 const double GaussInfo::TRIA3A_REF[6]={-1.0, 1.0, -1.0, -1.0, 1.0, -1.0};
39 const double GaussInfo::TRIA3B_REF[6]={0.0, 0.0, 1.0, 0.0, 0.0, 1.0};
41 const double GaussInfo::TRIA6A_REF[12]={-1.0, 1.0, -1.0, -1.0, 1.0, -1.0, -1.0, 1.0, 0.0, -1.0, 0.0, 0.0};
43 const double GaussInfo::TRIA6B_REF[12]={0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 0.5, 0.0, 0.5, 0.5, 0.0, 0.5};
45 const double GaussInfo::TRIA7A_REF[14]={0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 0.5, 0.0, 0.5, 0.5, 0.0, 0.5, 0.3333333333333333, 0.3333333333333333};
47 const double GaussInfo::QUAD4A_REF[8]={-1.0, 1.0, -1.0, -1.0, 1.0, -1.0, 1.0, 1.0};
49 const double GaussInfo::QUAD4B_REF[8]={-1.0, -1.0, 1.0, -1.0, 1.0, 1.0, -1.0, 1.0};
51 const double GaussInfo::QUAD8A_REF[16]={-1.0, 1.0, -1.0, -1.0, 1.0, -1.0, 1.0, 1.0, -1.0, 0.0, 0.0, -1.0, 1.0, 0.0, 0.0, 1.0};
53 const double GaussInfo::QUAD8B_REF[16]={-1.0, -1.0, 1.0, -1.0, 1.0, 1.0, -1.0, 1.0, 0.0, -1.0, 1.0, 0.0, 0.0, 1.0, -1.0, 0.0};
55 const double GaussInfo::QUAD9A_REF[18]={-1.0, -1.0, 1.0, -1.0, 1.0, 1.0, -1.0, 1.0, 0.0, -1.0, 1.0, 0.0, 0.0, 1.0, -1.0, 0.0, 0.0, 0.0};
57 const double GaussInfo::TETRA4A_REF[12]={0.0, 1.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0};
59 const double GaussInfo::TETRA4B_REF[12]={0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0, 1.0, 0.0, 0.0};
61 const double GaussInfo::TETRA10A_REF[30]={0.0, 1.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.5, 0.5, 0.0, 0.0, 0.5, 0.0, 0.5, 0.0, 0.5, 0.5, 0.0, 0.5, 0.0, 0.5, 0.5, 0.0, 0.0};
63 const double GaussInfo::TETRA10B_REF[30]={0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0, 1.0, 0.0, 0.0, 0.0, 0.5, 0.0, 0.0, 0.0, 0.5, 0.0, 0.5, 0.5, 0.5, 0.5, 0.0, 0.5, 0.0, 0.0, 0.5, 0.0, 0.5};
65 const double GaussInfo::PYRA5A_REF[15]={1.0, 0.0, 0.0, 0.0, 1.0, 0.0, -1.0, 0.0, 0.0, 0.0, -1.0, 0.0, 0.0, 0.0, 1.0};
67 const double GaussInfo::PYRA5B_REF[15]={1.0, 0.0, 0.0, 0.0, -1.0, 0.0, -1.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 1.0};
69 const double GaussInfo::PYRA13A_REF[39]={1.0, 0.0, 0.0, 0.0, 1.0, 0.0, -1.0, 0.0, 0.0, 0.0, -1.0, 0.0, 0.0, 0.0, 1.0, 0.5, 0.5, 0.0, -0.5, 0.5, 0.0, -0.5, -0.5, 0.0, 0.5, -0.5, 0.0, 0.5, 0.0, 0.5, 0.0, 0.5, 0.5, -0.5, 0.0, 0.5, 0.0, -0.5, 0.5};
71 const double GaussInfo::PYRA13B_REF[39]={1.0, 0.0, 0.0, 0.0, -1.0, 0.0, -1.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 1.0, 0.5, -0.5, 0.0, -0.5, -0.5, 0.0, -0.5, 0.5, 0.0, 0.5, 0.5, 0.0, 0.5, 0.0, 0.5, 0.0, -0.5, 0.5, -0.5, 0.0, 0.5, 0.0, 0.5, 0.5};
73 const double GaussInfo::PENTA6A_REF[18]={-1.0, 1.0, 0.0, -1.0, -0.0, 1.0, -1.0, 0.0, 0.0, 1.0, 1.0, 0.0, 1.0, 0.0, 1.0, 1.0, 0.0, 0.0};
75 const double GaussInfo::PENTA6B_REF[18]={-1.0, 1.0, 0.0, -1.0, 0.0, 0.0, -1.0, -0.0, 1.0, 1.0, 1.0, 0.0, 1.0, 0.0, 0.0, 1.0, 0.0, 1.0};
77 const double GaussInfo::PENTA15A_REF[45]={-1.0, 1.0, 0.0, -1.0, -0.0, 1.0, -1.0, 0.0, 0.0, 1.0, 1.0, 0.0, 1.0, 0.0, 1.0, 1.0, 0.0, 0.0, -1.0, 0.5, 0.5, -1.0, 0.0, 0.5, -1.0, 0.5, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 1.0, 0.5, 0.5, 1.0, 0.0, 0.5, 1.0, 0.5, 0.0};
79 const double GaussInfo::PENTA15B_REF[45]={-1.0, 1.0, 0.0, -1.0, 0.0, 0.0, -1.0, -0.0, 1.0, 1.0, 1.0, 0.0, 1.0, 0.0, 0.0, 1.0, 0.0, 1.0, -1.0, 0.5, 0.0, -1.0, 0.0, 0.5, -1.0, 0.5, 0.5, 1.0, 0.5, 0.0, 1.0, 0.0, 0.5, 1.0, 0.5, 0.5, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0};
81 const double GaussInfo::PENTA18A_REF[54]={-1.0, 1.0, 0.0, -1.0, -0.0, 1.0, -1.0, 0.0, 0.0, 1.0, 1.0, 0.0, 1.0, 0.0, 1.0, 1.0, 0.0, 0.0, -1.0, 0.5, 0.5, -1.0, 0.0, 0.5, -1.0, 0.5, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 1.0, 0.5, 0.5, 1.0, 0.0, 0.5, 1.0, 0.5, 0.0, 0.0, 0.5, 0.5, 0.0, 0.0, 0.5, 0.0, 0.5, 0.0};
83 const double GaussInfo::PENTA18B_REF[54]={-1.0, 1.0, 0.0, -1.0, 0.0, 0.0, -1.0, -0.0, 1.0, 1.0, 1.0, 0.0, 1.0, 0.0, 0.0, 1.0, 0.0, 1.0, -1.0, 0.5, 0.0, -1.0, 0.0, 0.5, -1.0, 0.5, 0.5, 1.0, 0.5, 0.0, 1.0, 0.0, 0.5, 1.0, 0.5, 0.5, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.5, 0.0, 0.0, 0.0, 0.5, 0.0, 0.5, 0.5};
85 const double GaussInfo::HEXA8A_REF[24]={-1.0, -1.0, -1.0, 1.0, -1.0, -1.0, 1.0, 1.0, -1.0, -1.0, 1.0, -1.0, -1.0, -1.0, 1.0, 1.0, -1.0, 1.0, 1.0, 1.0, 1.0, -1.0, 1.0, 1.0};
87 const double GaussInfo::HEXA8B_REF[24]={-1.0, -1.0, -1.0, -1.0, 1.0, -1.0, 1.0, 1.0, -1.0, 1.0, -1.0, -1.0, -1.0, -1.0, 1.0, -1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, -1.0, 1.0};
89 const double GaussInfo::HEXA20A_REF[60]={-1.0, -1.0, -1.0, 1.0, -1.0, -1.0, 1.0, 1.0, -1.0, -1.0, 1.0, -1.0, -1.0, -1.0, 1.0, 1.0, -1.0, 1.0, 1.0, 1.0, 1.0, -1.0, 1.0, 1.0, 0.0, -1.0, -1.0, 1.0, 0.0, -1.0, 0.0, 1.0, -1.0, -1.0, 0.0, -1.0, -1.0, -1.0, 0.0, 1.0, -1.0, 0.0, 1.0, 1.0, 0.0, -1.0, 1.0, 0.0, 0.0, -1.0, 1.0, 1.0, 0.0, 1.0, 0.0, 1.0, 1.0, -1.0, 0.0, 1.0};
91 const double GaussInfo::HEXA20B_REF[60]={-1.0, -1.0, -1.0, -1.0, 1.0, -1.0, 1.0, 1.0, -1.0, 1.0, -1.0, -1.0, -1.0, -1.0, 1.0, -1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, -1.0, 1.0, -1.0, 0.0, -1.0, 0.0, 1.0, -1.0, 1.0, 0.0, -1.0, 0.0, -1.0, -1.0, -1.0, 0.0, 1.0, 0.0, 1.0, 1.0, 1.0, 0.0, 1.0, 0.0, -1.0, 1.0, -1.0, -1.0, 0.0, -1.0, 1.0, 0.0, 1.0, 1.0, 0.0, 1.0, -1.0, 0.0};
93 const double GaussInfo::HEXA27A_REF[81]={-1.0, -1.0, -1.0, -1.0, 1.0, -1.0, 1.0, 1.0, -1.0, 1.0, -1.0, -1.0, -1.0, -1.0, 1.0, -1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, -1.0, 1.0, -1.0, 0.0, -1.0, 0.0, 1.0, -1.0, 1.0, 0.0, -1.0, 0.0, -1.0, -1.0, -1.0, 0.0, 1.0, 0.0, 1.0, 1.0, 1.0, 0.0, 1.0, 0.0, -1.0, 1.0, -1.0, -1.0, 0.0, -1.0, 1.0, 0.0, 1.0, 1.0, 0.0, 1.0, -1.0, 0.0, 0.0, 0.0, -1.0, -1.0, 0.0, 0.0, 0.0, 1.0, 0.0, 1.0, 0.0, 0.0, 0.0, -1.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0};
95 //Define common part of the code in the MACRO
96 //---------------------------------------------------------------
97 #define LOCAL_COORD_MACRO_BEGIN \
98 _my_local_reference_coord.resize( _my_local_ref_dim*_my_local_nb_ref ); \
99 for( int refId = 0; refId < _my_local_nb_ref; refId++ ) \
101 double* coords = &_my_local_reference_coord[ refId*_my_local_ref_dim ]; \
105 //---------------------------------------------------------------
106 #define LOCAL_COORD_MACRO_END \
110 //---------------------------------------------------------------
111 #define SHAPE_FUN_MACRO_BEGIN \
112 for( int gaussId = 0 ; gaussId < _my_nb_gauss ; gaussId++ ) \
114 double* funValue = &_my_function_value[ gaussId * _my_nb_ref ]; \
115 const double* gc = &_my_gauss_coord[ gaussId * getGaussCoordDim() ];
117 //---------------------------------------------------------------
118 #define SHAPE_FUN_MACRO_END \
121 #define CHECK_MACRO \
124 std::ostringstream stream; \
125 stream << "Error in the gauss localization for the cell with type "; \
126 stream << cellModel.getRepr(); \
128 throw INTERP_KERNEL::Exception(stream.str().c_str()); \
132 //---------------------------------------------------------------
133 static bool IsEqual(double theLeft, double theRight)
135 static double EPS = 1.0E-3;
136 if(fabs(theLeft) + fabs(theRight) > EPS)
137 return fabs(theLeft-theRight)/(fabs(theLeft)+fabs(theRight)) < EPS;
142 ////////////////////////////////////////////////////////////////////////////////////////////////
143 // GAUSS INFO CLASS //
144 ////////////////////////////////////////////////////////////////////////////////////////////////
147 * Constructor of the GaussInfo
149 GaussInfo::GaussInfo( NormalizedCellType theGeometry,
150 const DataVector& theGaussCoord,
152 const DataVector& theReferenceCoord,
154 _my_geometry(theGeometry),
155 _my_nb_gauss(theNbGauss),
156 _my_gauss_coord(theGaussCoord),
157 _my_nb_ref(theNbRef),
158 _my_reference_coord(theReferenceCoord)
161 //Allocate shape function values
162 _my_function_value.resize( _my_nb_gauss * _my_nb_ref );
168 GaussInfo::~GaussInfo()
173 * Return dimension of the gauss coordinates
175 int GaussInfo::getGaussCoordDim() const
179 return (int)_my_gauss_coord.size()/_my_nb_gauss;
188 * Return dimension of the reference coordinates
190 int GaussInfo::getReferenceCoordDim() const
194 return (int)(_my_reference_coord.size()/_my_nb_ref);
203 * Return type of the cell.
205 NormalizedCellType GaussInfo::getCellType() const
211 * Return Nb of the gauss points.
213 int GaussInfo::getNbGauss() const
219 * Return Nb of the reference coordinates.
221 int GaussInfo::getNbRef() const
226 GaussInfo GaussInfo::convertToLinear() const
232 std::vector<double> a(SEG3_REF,SEG3_REF+3);
233 if(IsSatisfy(a,_my_reference_coord))
235 std::vector<double> c(SEG2A_REF,SEG2A_REF+2);
236 return GaussInfo(NORM_SEG2,_my_gauss_coord,getNbGauss(),c,2);
238 throw INTERP_KERNEL::Exception("GaussInfo::convertToLinear : not recognized pattern for SEG3 !");
242 std::vector<double> a(TRIA6A_REF,TRIA6A_REF+12),b(TRIA6B_REF,TRIA6B_REF+12);
243 if(IsSatisfy(a,_my_reference_coord))
245 std::vector<double> c(TRIA3A_REF,TRIA3A_REF+6);
246 return GaussInfo(NORM_TRI3,_my_gauss_coord,getNbGauss(),c,3);
248 if(IsSatisfy(b,_my_reference_coord))
250 std::vector<double> c(TRIA3B_REF,TRIA3B_REF+6);
251 return GaussInfo(NORM_TRI3,_my_gauss_coord,getNbGauss(),c,3);
253 throw INTERP_KERNEL::Exception("GaussInfo::convertToLinear : not recognized pattern for TRI6 !");
257 std::vector<double> a(TRIA7A_REF,TRIA7A_REF+14);
258 if(IsSatisfy(a,_my_reference_coord))
260 std::vector<double> c(TRIA3B_REF,TRIA3B_REF+6);
261 return GaussInfo(NORM_TRI3,_my_gauss_coord,getNbGauss(),c,3);
263 throw INTERP_KERNEL::Exception("GaussInfo::convertToLinear : not recognized pattern for TRI7 !");
267 std::vector<double> a(QUAD8A_REF,QUAD8A_REF+16),b(QUAD8B_REF,QUAD8B_REF+16);
268 if(IsSatisfy(a,_my_reference_coord))
270 std::vector<double> c(QUAD4A_REF,QUAD4A_REF+8);
271 return GaussInfo(NORM_QUAD4,_my_gauss_coord,getNbGauss(),c,4);
273 if(IsSatisfy(b,_my_reference_coord))
275 std::vector<double> c(QUAD4B_REF,QUAD4B_REF+8);
276 return GaussInfo(NORM_QUAD4,_my_gauss_coord,getNbGauss(),c,4);
278 throw INTERP_KERNEL::Exception("GaussInfo::convertToLinear : not recognized pattern for QUAD8 !");
282 std::vector<double> a(QUAD9A_REF,QUAD9A_REF+18);
283 if(IsSatisfy(a,_my_reference_coord))
285 std::vector<double> c(QUAD4B_REF,QUAD4B_REF+8);
286 return GaussInfo(NORM_QUAD4,_my_gauss_coord,getNbGauss(),c,4);
288 throw INTERP_KERNEL::Exception("GaussInfo::convertToLinear : not recognized pattern for QUAD9 !");
292 std::vector<double> a(TETRA10A_REF,TETRA10A_REF+30),b(TETRA10B_REF,TETRA10B_REF+30);
293 if(IsSatisfy(a,_my_reference_coord))
295 std::vector<double> c(TETRA4A_REF,TETRA4A_REF+12);
296 return GaussInfo(NORM_TETRA4,_my_gauss_coord,getNbGauss(),c,4);
298 if(IsSatisfy(b,_my_reference_coord))
300 std::vector<double> c(TETRA4B_REF,TETRA4B_REF+12);
301 return GaussInfo(NORM_TETRA4,_my_gauss_coord,getNbGauss(),c,4);
303 throw INTERP_KERNEL::Exception("GaussInfo::convertToLinear : not recognized pattern for TETRA10 !");
307 std::vector<double> a(PYRA13A_REF,PYRA13A_REF+39),b(PYRA13B_REF,PYRA13B_REF+39);
308 if(IsSatisfy(a,_my_reference_coord))
310 std::vector<double> c(PYRA5A_REF,PYRA5A_REF+15);
311 return GaussInfo(NORM_PYRA5,_my_gauss_coord,getNbGauss(),c,5);
313 if(IsSatisfy(b,_my_reference_coord))
315 std::vector<double> c(PYRA5B_REF,PYRA5B_REF+15);
316 return GaussInfo(NORM_PYRA5,_my_gauss_coord,getNbGauss(),c,5);
318 throw INTERP_KERNEL::Exception("GaussInfo::convertToLinear : not recognized pattern for PYRA13 !");
322 std::vector<double> a(PENTA15A_REF,PENTA15A_REF+45),b(PENTA15B_REF,PENTA15B_REF+45);
323 if(IsSatisfy(a,_my_reference_coord))
325 std::vector<double> c(PENTA6A_REF,PENTA6A_REF+18);
326 return GaussInfo(NORM_PENTA6,_my_gauss_coord,getNbGauss(),c,6);
328 if(IsSatisfy(b,_my_reference_coord))
330 std::vector<double> c(PENTA6B_REF,PENTA6B_REF+18);
331 return GaussInfo(NORM_PENTA6,_my_gauss_coord,getNbGauss(),c,6);
333 throw INTERP_KERNEL::Exception("GaussInfo::convertToLinear : not recognized pattern for PENTA15 !");
337 std::vector<double> a(PENTA18A_REF,PENTA18A_REF+54),b(PENTA18B_REF,PENTA18B_REF+54);
338 if(IsSatisfy(a,_my_reference_coord))
340 std::vector<double> c(PENTA6A_REF,PENTA6A_REF+18);
341 return GaussInfo(NORM_PENTA6,_my_gauss_coord,getNbGauss(),c,6);
343 if(IsSatisfy(b,_my_reference_coord))
345 std::vector<double> c(PENTA6B_REF,PENTA6B_REF+18);
346 return GaussInfo(NORM_PENTA6,_my_gauss_coord,getNbGauss(),c,6);
348 throw INTERP_KERNEL::Exception("GaussInfo::convertToLinear : not recognized pattern for PENTA18 !");
352 std::vector<double> a(HEXA20A_REF,HEXA20A_REF+60),b(HEXA20B_REF,HEXA20B_REF+60);
353 if(IsSatisfy(a,_my_reference_coord))
355 std::vector<double> c(HEXA8A_REF,HEXA8A_REF+24);
356 return GaussInfo(NORM_HEXA8,_my_gauss_coord,getNbGauss(),c,8);
358 if(IsSatisfy(b,_my_reference_coord))
360 std::vector<double> c(HEXA8B_REF,HEXA8B_REF+24);
361 return GaussInfo(NORM_HEXA8,_my_gauss_coord,getNbGauss(),c,8);
363 throw INTERP_KERNEL::Exception("GaussInfo::convertToLinear : not recognized pattern for HEXA20 !");
367 std::vector<double> a(HEXA27A_REF,HEXA27A_REF+81);
368 if(IsSatisfy(a,_my_reference_coord))
370 std::vector<double> c(HEXA8B_REF,HEXA8B_REF+24);
371 return GaussInfo(NORM_HEXA8,_my_gauss_coord,getNbGauss(),c,8);
373 throw INTERP_KERNEL::Exception("GaussInfo::convertToLinear : not recognized pattern for HEXA27 !");
376 throw INTERP_KERNEL::Exception("GaussInfo::convertToLinear : not implemented yet for other types than TETRA10, HEXA20, HEXA27, TRI3, QUAD8, QUAD8, PYRA13, PENTA15 !");
381 bool GaussInfo::IsSatisfy(const std::vector<double>& ref1, const std::vector<double>& ref2)
383 std::size_t sz(ref1.size());
386 for(std::size_t i=0;i<sz;i++)
387 if(!IsEqual(ref1[i],ref2[i]))
395 bool GaussInfo::isSatisfy()
398 bool anIsSatisfy = ((_my_local_nb_ref == _my_nb_ref) && (_my_local_ref_dim == getReferenceCoordDim()));
402 for( int refId = 0; refId < _my_local_nb_ref; refId++ )
404 double* refCoord = &_my_reference_coord[ refId*_my_local_ref_dim ];
405 double* localRefCoord = &_my_local_reference_coord[ refId*_my_local_ref_dim ];
406 bool anIsEqual = false;
407 for( int dimId = 0; dimId < _my_local_ref_dim; dimId++ )
409 anIsEqual = IsEqual( localRefCoord[dimId], refCoord[dimId]);
420 std::vector<double> GaussInfo::NormalizeCoordinatesIfNecessary(NormalizedCellType ct, int inputDim, const std::vector<double>& inputArray)
422 std::size_t sz(inputArray.size()),dim((std::size_t)inputDim);
424 throw INTERP_KERNEL::Exception("GaussInfo::NormalizeCoordinatesIfNecessary : invalid dimension ! Must be !=0 !");
426 throw INTERP_KERNEL::Exception("GaussInfo::NormalizeCoordinatesIfNecessary : invalid input array ! Inconsistent with the given dimension !");
427 const CellModel& cm(CellModel::GetCellModel(ct));
428 std::size_t baseDim((std::size_t)cm.getDimension());
431 std::size_t nbOfItems(sz/dim);
432 std::vector<double> ret(nbOfItems*baseDim);
435 for(std::size_t i=0;i<nbOfItems;i++)
439 ret[i*baseDim+j]=inputArray[i*dim+j];
446 for(std::size_t i=0;i<nbOfItems;i++)
450 ret[i*baseDim+j]=inputArray[i*dim+j];
456 typedef void (*MapToShapeFunction)(GaussInfo& obj);
459 * Initialize the internal vectors
461 void GaussInfo::initLocalInfo()
463 bool aSatify = false;
464 const CellModel& cellModel(CellModel::GetCellModel(_my_geometry));
465 switch( _my_geometry )
468 _my_local_ref_dim = 0;
469 _my_local_nb_ref = 1;
471 aSatify = isSatisfy();
476 _my_local_ref_dim = 1;
477 _my_local_nb_ref = 2;
479 aSatify = isSatisfy();
483 aSatify = isSatisfy();
489 _my_local_ref_dim = 1;
490 _my_local_nb_ref = 3;
492 aSatify = isSatisfy();
497 _my_local_ref_dim = 2;
498 _my_local_nb_ref = 3;
500 aSatify = isSatisfy();
505 aSatify = isSatisfy();
511 _my_local_ref_dim = 2;
512 _my_local_nb_ref = 6;
514 aSatify = isSatisfy();
518 aSatify = isSatisfy();
524 _my_local_ref_dim = 2;
525 _my_local_nb_ref = 7;
527 aSatify = isSatisfy();
533 _my_local_ref_dim = 2;
534 _my_local_nb_ref = 4;
535 MapToShapeFunction QUAD4PTR[]={Quad4aInit,Quad4bInit,Quad4cInit,Quad4DegSeg2Init};
536 std::size_t NB_OF_QUAD4PTR(sizeof(QUAD4PTR)/sizeof(MapToShapeFunction));
537 for(std::size_t i=0;i<NB_OF_QUAD4PTR && !aSatify;i++)
539 (QUAD4PTR[i])(*this);
540 aSatify = isSatisfy();
548 _my_local_ref_dim = 2;
549 _my_local_nb_ref = 8;
551 aSatify = isSatisfy();
556 aSatify = isSatisfy();
562 _my_local_ref_dim = 2;
563 _my_local_nb_ref = 9;
565 aSatify = isSatisfy();
570 _my_local_ref_dim = 3;
571 _my_local_nb_ref = 4;
573 aSatify = isSatisfy();
578 aSatify = isSatisfy();
584 _my_local_ref_dim = 3;
585 _my_local_nb_ref = 10;
587 aSatify = isSatisfy();
592 aSatify = isSatisfy();
598 _my_local_ref_dim = 3;
599 _my_local_nb_ref = 5;
601 aSatify = isSatisfy();
606 aSatify = isSatisfy();
612 _my_local_ref_dim = 3;
613 _my_local_nb_ref = 13;
615 aSatify = isSatisfy();
620 aSatify = isSatisfy();
627 _my_local_ref_dim = 3;
628 _my_local_nb_ref = 6;
629 MapToShapeFunction PENTA6PTR[]={Penta6aInit,Penta6bInit,Penta6DegTria3aInit,Penta6DegTria3bInit};
630 std::size_t NB_OF_PENTA6PTR(sizeof(PENTA6PTR)/sizeof(MapToShapeFunction));
631 for(std::size_t i=0;i<NB_OF_PENTA6PTR && !aSatify;i++)
633 (PENTA6PTR[i])(*this);
634 aSatify = isSatisfy();
641 _my_local_ref_dim = 3;
642 _my_local_nb_ref = 6;
644 aSatify = isSatisfy();
649 aSatify = isSatisfy();
656 _my_local_ref_dim = 3;
657 _my_local_nb_ref = 15;
658 MapToShapeFunction PENTA15PTR[]={Penta15aInit,Penta15bInit};
659 std::size_t NB_OF_PENTA15PTR(sizeof(PENTA15PTR)/sizeof(MapToShapeFunction));
660 for(std::size_t i=0;i<NB_OF_PENTA15PTR && !aSatify;i++)
662 (PENTA15PTR[i])(*this);
663 aSatify = isSatisfy();
671 _my_local_ref_dim = 3;
672 _my_local_nb_ref = 18;
673 MapToShapeFunction PENTA18PTR[]={Penta18aInit,Penta18bInit};
674 std::size_t NB_OF_PENTA18PTR(sizeof(PENTA18PTR)/sizeof(MapToShapeFunction));
675 for(std::size_t i=0;i<NB_OF_PENTA18PTR && !aSatify;i++)
677 (PENTA18PTR[i])(*this);
678 aSatify = isSatisfy();
686 _my_local_ref_dim = 3;
687 _my_local_nb_ref = 8;
688 MapToShapeFunction HEXA8PTR[]={Hexa8aInit,Hexa8bInit,Hexa8DegQuad4aInit,Hexa8DegQuad4bInit,Hexa8DegQuad4cInit};
689 std::size_t NB_OF_HEXA8PTR(sizeof(HEXA8PTR)/sizeof(MapToShapeFunction));
690 for(std::size_t i=0;i<NB_OF_HEXA8PTR && !aSatify;i++)
692 (HEXA8PTR[i])(*this);
693 aSatify = isSatisfy();
700 _my_local_ref_dim = 3;
701 _my_local_nb_ref = 20;
703 aSatify = isSatisfy();
708 aSatify = isSatisfy();
714 _my_local_ref_dim = 3;
715 _my_local_nb_ref = 27;
717 aSatify = isSatisfy();
722 throw INTERP_KERNEL::Exception("Not managed cell type !");
728 * Return shape function value by node id
730 const double* GaussInfo::getFunctionValues( const int theGaussId ) const
732 return &_my_function_value[ _my_nb_ref*theGaussId ];
735 void GaussInfo::point1Init()
737 double *funValue(&_my_function_value[0]);
742 * Init Segment 2 Reference coordinates ans Shape function.
744 void GaussInfo::seg2aInit()
746 LOCAL_COORD_MACRO_BEGIN;
748 coords[0] = SEG2A_REF[0];
751 coords[0] = SEG2A_REF[1];
753 LOCAL_COORD_MACRO_END;
755 SHAPE_FUN_MACRO_BEGIN;
756 funValue[0] = 0.5*(1.0 - gc[0]);
757 funValue[1] = 0.5*(1.0 + gc[0]);
761 void GaussInfo::seg2bInit()
763 LOCAL_COORD_MACRO_BEGIN;
765 coords[0] = SEG2B_REF[0];
768 coords[0] = SEG2B_REF[1];
770 LOCAL_COORD_MACRO_END;
772 SHAPE_FUN_MACRO_BEGIN;
773 funValue[0] = 1.0 - gc[0];
779 * Init Segment 3 Reference coordinates ans Shape function.
781 void GaussInfo::seg3Init()
783 LOCAL_COORD_MACRO_BEGIN;
785 coords[0] = SEG3_REF[0];
788 coords[0] = SEG3_REF[1];
791 coords[0] = SEG3_REF[2];
792 LOCAL_COORD_MACRO_END;
794 SHAPE_FUN_MACRO_BEGIN;
795 funValue[0] = -0.5*(1.0 - gc[0])*gc[0];
796 funValue[1] = 0.5*(1.0 + gc[0])*gc[0];
797 funValue[2] = (1.0 + gc[0])*(1.0 - gc[0]);
802 * Init Triangle Reference coordinates ans Shape function.
805 void GaussInfo::tria3aInit()
807 LOCAL_COORD_MACRO_BEGIN;
809 coords[0] = TRIA3A_REF[0];
810 coords[1] = TRIA3A_REF[1];
813 coords[0] = TRIA3A_REF[2];
814 coords[1] = TRIA3A_REF[3];
817 coords[0] = TRIA3A_REF[4];
818 coords[1] = TRIA3A_REF[5];
820 LOCAL_COORD_MACRO_END;
822 SHAPE_FUN_MACRO_BEGIN;
823 funValue[0] = 0.5*(1.0 + gc[1]);
824 funValue[1] = -0.5*(gc[0] + gc[1]);
825 funValue[2] = 0.5*(1.0 + gc[0]);
830 * Init Triangle Reference coordinates ans Shape function.
833 void GaussInfo::tria3bInit()
835 LOCAL_COORD_MACRO_BEGIN;
837 coords[0] = TRIA3B_REF[0];
838 coords[1] = TRIA3B_REF[1];
841 coords[0] = TRIA3B_REF[2];
842 coords[1] = TRIA3B_REF[3];
845 coords[0] = TRIA3B_REF[4];
846 coords[1] = TRIA3B_REF[5];
848 LOCAL_COORD_MACRO_END;
850 SHAPE_FUN_MACRO_BEGIN;
851 funValue[0] = 1.0 - gc[0] - gc[1];
858 * Init Quadratic Triangle Reference coordinates ans Shape function.
861 void GaussInfo::tria6aInit()
863 LOCAL_COORD_MACRO_BEGIN;
865 coords[0] = TRIA6A_REF[0];
866 coords[1] = TRIA6A_REF[1];
869 coords[0] = TRIA6A_REF[2];
870 coords[1] = TRIA6A_REF[3];
873 coords[0] = TRIA6A_REF[4];
874 coords[1] = TRIA6A_REF[5];
877 coords[0] = TRIA6A_REF[6];
878 coords[1] = TRIA6A_REF[7];
881 coords[0] = TRIA6A_REF[8];
882 coords[1] = TRIA6A_REF[9];
885 coords[0] = TRIA6A_REF[10];
886 coords[1] = TRIA6A_REF[11];
888 LOCAL_COORD_MACRO_END;
890 SHAPE_FUN_MACRO_BEGIN;
891 funValue[0] = 0.5*(1.0 + gc[1])*gc[1];
892 funValue[1] = 0.5*(gc[0] + gc[1])*(gc[0] + gc[1] + 1);
893 funValue[2] = 0.5*(1.0 + gc[0])*gc[0];
894 funValue[3] = -1.0*(1.0 + gc[1])*(gc[0] + gc[1]);
895 funValue[4] = -1.0*(1.0 + gc[0])*(gc[0] + gc[1]);
896 funValue[5] = (1.0 + gc[1])*(1.0 + gc[1]);
901 * Init Quadratic Triangle Reference coordinates ans Shape function.
904 void GaussInfo::tria6bInit()
906 LOCAL_COORD_MACRO_BEGIN;
908 coords[0] = TRIA6B_REF[0];
909 coords[1] = TRIA6B_REF[1];
912 coords[0] = TRIA6B_REF[2];
913 coords[1] = TRIA6B_REF[3];
916 coords[0] = TRIA6B_REF[4];
917 coords[1] = TRIA6B_REF[5];
920 coords[0] = TRIA6B_REF[6];
921 coords[1] = TRIA6B_REF[7];
924 coords[0] = TRIA6B_REF[8];
925 coords[1] = TRIA6B_REF[9];
928 coords[0] = TRIA6B_REF[10];
929 coords[1] = TRIA6B_REF[11];
931 LOCAL_COORD_MACRO_END;
933 SHAPE_FUN_MACRO_BEGIN;
934 funValue[0] = (1.0 - gc[0] - gc[1])*(1.0 - 2.0*gc[0] - 2.0*gc[1]);
935 funValue[1] = gc[0]*(2.0*gc[0] - 1.0);
936 funValue[2] = gc[1]*(2.0*gc[1] - 1.0);
937 funValue[3] = 4.0*gc[0]*(1.0 - gc[0] - gc[1]);
938 funValue[4] = 4.0*gc[0]*gc[1];
939 funValue[5] = 4.0*gc[1]*(1.0 - gc[0] - gc[1]);
943 void GaussInfo::tria7aInit()
945 LOCAL_COORD_MACRO_BEGIN;
947 coords[0] = TRIA7A_REF[0];
948 coords[1] = TRIA7A_REF[1];
951 coords[0] = TRIA7A_REF[2];
952 coords[1] = TRIA7A_REF[3];
955 coords[0] = TRIA7A_REF[4];
956 coords[1] = TRIA7A_REF[5];
959 coords[0] = TRIA7A_REF[6];
960 coords[1] = TRIA7A_REF[7];
963 coords[0] = TRIA7A_REF[8];
964 coords[1] = TRIA7A_REF[9];
967 coords[0] = TRIA7A_REF[10];
968 coords[1] = TRIA7A_REF[11];
971 coords[0] = TRIA7A_REF[12];
972 coords[1] = TRIA7A_REF[13];
974 LOCAL_COORD_MACRO_END;
976 SHAPE_FUN_MACRO_BEGIN;
977 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]);
978 funValue[1]=gc[0]*(-1+2*gc[0]+3*gc[1]-3*gc[1]*(gc[0]+gc[1]));
979 funValue[2]=gc[1]*(-1.+3.*gc[0]+2.*gc[1]-3.*gc[0]*(gc[0]+gc[1]));
980 funValue[3]=4*gc[0]*(1-gc[0]-4*gc[1]+3*gc[1]*(gc[0]+gc[1]));
981 funValue[4]=4*gc[0]*gc[1]*(-2+3*(gc[0]+gc[1]));
982 funValue[5]=4*gc[1]*(1-4*gc[0]-gc[1]+3*gc[0]*(gc[0]+gc[1]));
983 funValue[6]=27*gc[0]*gc[1]*(1-gc[0]-gc[1]);
988 * Init Quadrangle Reference coordinates ans Shape function.
991 void GaussInfo::quad4aInit()
993 LOCAL_COORD_MACRO_BEGIN;
995 coords[0] = QUAD4A_REF[0];
996 coords[1] = QUAD4A_REF[1];
999 coords[0] = QUAD4A_REF[2];
1000 coords[1] = QUAD4A_REF[3];
1003 coords[0] = QUAD4A_REF[4];
1004 coords[1] = QUAD4A_REF[5];
1007 coords[0] = QUAD4A_REF[6];
1008 coords[1] = QUAD4A_REF[7];
1010 LOCAL_COORD_MACRO_END;
1012 SHAPE_FUN_MACRO_BEGIN;
1013 funValue[0] = 0.25*(1.0 + gc[1])*(1.0 - gc[0]);
1014 funValue[1] = 0.25*(1.0 - gc[1])*(1.0 - gc[0]);
1015 funValue[2] = 0.25*(1.0 - gc[1])*(1.0 + gc[0]);
1016 funValue[3] = 0.25*(1.0 + gc[0])*(1.0 + gc[1]);
1017 SHAPE_FUN_MACRO_END;
1021 * Init Quadrangle Reference coordinates ans Shape function.
1024 void GaussInfo::quad4bInit()
1026 LOCAL_COORD_MACRO_BEGIN;
1028 coords[0] = QUAD4B_REF[0];
1029 coords[1] = QUAD4B_REF[1];
1032 coords[0] = QUAD4B_REF[2];
1033 coords[1] = QUAD4B_REF[3];
1036 coords[0] = QUAD4B_REF[4];
1037 coords[1] = QUAD4B_REF[5];
1040 coords[0] = QUAD4B_REF[6];
1041 coords[1] = QUAD4B_REF[7];
1043 LOCAL_COORD_MACRO_END;
1045 SHAPE_FUN_MACRO_BEGIN;
1046 funValue[0] = 0.25*(1.0 - gc[0])*(1.0 - gc[1]);
1047 funValue[1] = 0.25*(1.0 + gc[0])*(1.0 - gc[1]);
1048 funValue[2] = 0.25*(1.0 + gc[0])*(1.0 + gc[1]);
1049 funValue[3] = 0.25*(1.0 - gc[0])*(1.0 + gc[1]);
1050 SHAPE_FUN_MACRO_END;
1053 void GaussInfo::quad4cInit()
1055 LOCAL_COORD_MACRO_BEGIN;
1073 LOCAL_COORD_MACRO_END;
1075 SHAPE_FUN_MACRO_BEGIN;
1076 funValue[0] = 0.25*(1.0 - gc[0])*(1.0 - gc[1]);
1077 funValue[1] = 0.25*(1.0 - gc[0])*(1.0 + gc[1]);
1078 funValue[2] = 0.25*(1.0 + gc[0])*(1.0 + gc[1]);
1079 funValue[3] = 0.25*(1.0 + gc[0])*(1.0 - gc[1]);
1080 SHAPE_FUN_MACRO_END;
1084 * This shapefunc map is same as degenerated seg2aInit
1086 void GaussInfo::quad4DegSeg2Init()
1088 LOCAL_COORD_MACRO_BEGIN;
1105 LOCAL_COORD_MACRO_END;
1107 SHAPE_FUN_MACRO_BEGIN;
1108 funValue[0] = 0.5*(1.0 - gc[0]);
1109 funValue[1] = 0.5*(1.0 + gc[0]);
1112 SHAPE_FUN_MACRO_END;
1116 * Init Quadratic Quadrangle Reference coordinates ans Shape function.
1119 void GaussInfo::quad8aInit()
1121 LOCAL_COORD_MACRO_BEGIN;
1123 coords[0] = QUAD8A_REF[0];
1124 coords[1] = QUAD8A_REF[1];
1127 coords[0] = QUAD8A_REF[2];
1128 coords[1] = QUAD8A_REF[3];
1131 coords[0] = QUAD8A_REF[4];
1132 coords[1] = QUAD8A_REF[5];
1135 coords[0] = QUAD8A_REF[6];
1136 coords[1] = QUAD8A_REF[7];
1139 coords[0] = QUAD8A_REF[8];
1140 coords[1] = QUAD8A_REF[9];
1143 coords[0] = QUAD8A_REF[10];
1144 coords[1] = QUAD8A_REF[11];
1147 coords[0] = QUAD8A_REF[12];
1148 coords[1] = QUAD8A_REF[13];
1151 coords[0] = QUAD8A_REF[14];
1152 coords[1] = QUAD8A_REF[15];
1154 LOCAL_COORD_MACRO_END;
1156 SHAPE_FUN_MACRO_BEGIN;
1157 funValue[0] = 0.25*(1.0 + gc[1])*(1.0 - gc[0])*(gc[1] - gc[0] - 1.0);
1158 funValue[1] = 0.25*(1.0 - gc[1])*(1.0 - gc[0])*(-gc[1] - gc[0] - 1.0);
1159 funValue[2] = 0.25*(1.0 - gc[1])*(1.0 + gc[0])*(-gc[1] + gc[0] - 1.0);
1160 funValue[3] = 0.25*(1.0 + gc[1])*(1.0 + gc[0])*(gc[1] + gc[0] - 1.0);
1161 funValue[4] = 0.5*(1.0 - gc[0])*(1.0 - gc[1])*(1.0 + gc[1]);
1162 funValue[5] = 0.5*(1.0 - gc[1])*(1.0 - gc[0])*(1.0 + gc[0]);
1163 funValue[6] = 0.5*(1.0 + gc[0])*(1.0 - gc[1])*(1.0 + gc[1]);
1164 funValue[7] = 0.5*(1.0 + gc[1])*(1.0 - gc[0])*(1.0 + gc[0]);
1165 SHAPE_FUN_MACRO_END;
1169 * Init Quadratic Quadrangle Reference coordinates ans Shape function.
1172 void GaussInfo::quad8bInit()
1174 LOCAL_COORD_MACRO_BEGIN;
1176 coords[0] = QUAD8B_REF[0];
1177 coords[1] = QUAD8B_REF[1];
1180 coords[0] = QUAD8B_REF[2];
1181 coords[1] = QUAD8B_REF[3];
1184 coords[0] = QUAD8B_REF[4];
1185 coords[1] = QUAD8B_REF[5];
1188 coords[0] = QUAD8B_REF[6];
1189 coords[1] = QUAD8B_REF[7];
1192 coords[0] = QUAD8B_REF[8];
1193 coords[1] = QUAD8B_REF[9];
1196 coords[0] = QUAD8B_REF[10];
1197 coords[1] = QUAD8B_REF[11];
1200 coords[0] = QUAD8B_REF[12];
1201 coords[1] = QUAD8B_REF[13];
1204 coords[0] = QUAD8B_REF[14];
1205 coords[1] = QUAD8B_REF[15];
1207 LOCAL_COORD_MACRO_END;
1209 SHAPE_FUN_MACRO_BEGIN;
1210 funValue[0] = 0.25*(1.0 - gc[0])*(1.0 - gc[1])*(-1.0 - gc[0] - gc[1]);
1211 funValue[1] = 0.25*(1.0 + gc[0])*(1.0 - gc[1])*(-1.0 + gc[0] - gc[1]);
1212 funValue[2] = 0.25*(1.0 + gc[0])*(1.0 + gc[1])*(-1.0 + gc[0] + gc[1]);
1213 funValue[3] = 0.25*(1.0 - gc[0])*(1.0 + gc[1])*(-1.0 - gc[0] + gc[1]);
1214 funValue[4] = 0.5*(1.0 - gc[0]*gc[0])*(1.0 - gc[1]);
1215 funValue[5] = 0.5*(1.0 - gc[1]*gc[1])*(1.0 + gc[0]);
1216 funValue[6] = 0.5*(1.0 - gc[0]*gc[0])*(1.0 + gc[1]);
1217 funValue[7] = 0.5*(1.0 - gc[1]*gc[1])*(1.0 - gc[0]);
1218 SHAPE_FUN_MACRO_END;
1221 void GaussInfo::quad9aInit()
1223 LOCAL_COORD_MACRO_BEGIN;
1225 coords[0] = QUAD9A_REF[0];
1226 coords[1] = QUAD9A_REF[1];
1229 coords[0] = QUAD9A_REF[2];
1230 coords[1] = QUAD9A_REF[3];
1233 coords[0] = QUAD9A_REF[4];
1234 coords[1] = QUAD9A_REF[5];
1237 coords[0] = QUAD9A_REF[6];
1238 coords[1] = QUAD9A_REF[7];
1241 coords[0] = QUAD9A_REF[8];
1242 coords[1] = QUAD9A_REF[9];
1245 coords[0] = QUAD9A_REF[10];
1246 coords[1] = QUAD9A_REF[11];
1249 coords[0] = QUAD9A_REF[12];
1250 coords[1] = QUAD9A_REF[13];
1253 coords[0] = QUAD9A_REF[14];
1254 coords[1] = QUAD9A_REF[15];
1257 coords[0] = QUAD9A_REF[16];
1258 coords[1] = QUAD9A_REF[17];
1260 LOCAL_COORD_MACRO_END;
1262 SHAPE_FUN_MACRO_BEGIN;
1263 funValue[0] = 0.25*gc[0]*gc[1]*(gc[0]-1.)*(gc[1]-1.);
1264 funValue[1] = 0.25*gc[0]*gc[1]*(gc[0]+1.)*(gc[1]-1.);
1265 funValue[2] = 0.25*gc[0]*gc[1]*(gc[0]+1.)*(gc[1]+1.);
1266 funValue[3] = 0.25*gc[0]*gc[1]*(gc[0]-1.)*(gc[1]+1.);
1267 funValue[4] = 0.5*(1.-gc[0]*gc[0])*gc[1]*(gc[1]-1.);
1268 funValue[5] = 0.5*gc[0]*(gc[0]+1.)*(1.-gc[1]*gc[1]);
1269 funValue[6] = 0.5*(1.-gc[0]*gc[0])*gc[1]*(gc[1]+1.);
1270 funValue[7] = 0.5*gc[0]*(gc[0]-1.)*(1.-gc[1]*gc[1]);
1271 funValue[8] = (1.-gc[0]*gc[0])*(1.-gc[1]*gc[1]);
1272 SHAPE_FUN_MACRO_END;
1276 * Init Tetrahedron Reference coordinates ans Shape function.
1279 void GaussInfo::tetra4aInit()
1281 LOCAL_COORD_MACRO_BEGIN;
1283 coords[0] = TETRA4A_REF[0];
1284 coords[1] = TETRA4A_REF[1];
1285 coords[2] = TETRA4A_REF[2];
1288 coords[0] = TETRA4A_REF[3];
1289 coords[1] = TETRA4A_REF[4];
1290 coords[2] = TETRA4A_REF[5];
1293 coords[0] = TETRA4A_REF[6];
1294 coords[1] = TETRA4A_REF[7];
1295 coords[2] = TETRA4A_REF[8];
1298 coords[0] = TETRA4A_REF[9];
1299 coords[1] = TETRA4A_REF[10];
1300 coords[2] = TETRA4A_REF[11];
1302 LOCAL_COORD_MACRO_END;
1304 SHAPE_FUN_MACRO_BEGIN;
1305 funValue[0] = gc[1];
1306 funValue[1] = gc[2];
1307 funValue[2] = 1.0 - gc[0] - gc[1] - gc[2];
1308 funValue[3] = gc[0];
1309 SHAPE_FUN_MACRO_END;
1313 * Init Tetrahedron Reference coordinates ans Shape function.
1316 void GaussInfo::tetra4bInit()
1318 LOCAL_COORD_MACRO_BEGIN;
1320 coords[0] = TETRA4B_REF[0];
1321 coords[1] = TETRA4B_REF[1];
1322 coords[2] = TETRA4B_REF[2];
1325 coords[0] = TETRA4B_REF[3];
1326 coords[1] = TETRA4B_REF[4];
1327 coords[2] = TETRA4B_REF[5];
1330 coords[0] = TETRA4B_REF[6];
1331 coords[1] = TETRA4B_REF[7];
1332 coords[2] = TETRA4B_REF[8];
1335 coords[0] = TETRA4B_REF[9];
1336 coords[1] = TETRA4B_REF[10];
1337 coords[2] = TETRA4B_REF[11];
1339 LOCAL_COORD_MACRO_END;
1341 SHAPE_FUN_MACRO_BEGIN;
1342 funValue[0] = gc[1];
1343 funValue[2] = gc[2];
1344 funValue[1] = 1.0 - gc[0] - gc[1] - gc[2];
1345 funValue[3] = gc[0];
1346 SHAPE_FUN_MACRO_END;
1350 * Init Quadratic Tetrahedron Reference coordinates ans Shape function.
1353 void GaussInfo::tetra10aInit()
1355 LOCAL_COORD_MACRO_BEGIN;
1357 coords[0] = TETRA10A_REF[0];
1358 coords[1] = TETRA10A_REF[1];
1359 coords[2] = TETRA10A_REF[2];
1362 coords[0] = TETRA10A_REF[3];
1363 coords[1] = TETRA10A_REF[4];
1364 coords[2] = TETRA10A_REF[5];
1367 coords[0] = TETRA10A_REF[6];
1368 coords[1] = TETRA10A_REF[7];
1369 coords[2] = TETRA10A_REF[8];
1372 coords[0] = TETRA10A_REF[9];
1373 coords[1] = TETRA10A_REF[10];
1374 coords[2] = TETRA10A_REF[11];
1377 coords[0] = TETRA10A_REF[12];
1378 coords[1] = TETRA10A_REF[13];
1379 coords[2] = TETRA10A_REF[14];
1382 coords[0] = TETRA10A_REF[15];
1383 coords[1] = TETRA10A_REF[16];
1384 coords[2] = TETRA10A_REF[17];
1387 coords[0] = TETRA10A_REF[18];
1388 coords[1] = TETRA10A_REF[19];
1389 coords[2] = TETRA10A_REF[20];
1392 coords[0] = TETRA10A_REF[21];
1393 coords[1] = TETRA10A_REF[22];
1394 coords[2] = TETRA10A_REF[23];
1397 coords[0] = TETRA10A_REF[24];
1398 coords[1] = TETRA10A_REF[25];
1399 coords[2] = TETRA10A_REF[26];
1402 coords[0] = TETRA10A_REF[27];
1403 coords[1] = TETRA10A_REF[28];
1404 coords[2] = TETRA10A_REF[29];
1406 LOCAL_COORD_MACRO_END;
1408 SHAPE_FUN_MACRO_BEGIN;
1409 funValue[0] = gc[1]*(2.0*gc[1] - 1.0);
1410 funValue[1] = gc[2]*(2.0*gc[2] - 1.0);
1411 funValue[2] = (1.0 - gc[0] - gc[1] - gc[2])*(1.0 - 2.0*gc[0] - 2.0*gc[1] - 2.0*gc[2]);
1412 funValue[3] = gc[0]*(2.0*gc[0] - 1.0);
1413 funValue[4] = 4.0*gc[1]*gc[2];
1414 funValue[5] = 4.0*gc[2]*(1.0 - gc[0] - gc[1] - gc[2]);
1415 funValue[6] = 4.0*gc[1]*(1.0 - gc[0] - gc[1] - gc[2]);
1416 funValue[7] = 4.0*gc[0]*gc[1];
1417 funValue[8] = 4.0*gc[0]*gc[2];
1418 funValue[9] = 4.0*gc[0]*(1.0 - gc[0] - gc[1] - gc[2]);
1419 SHAPE_FUN_MACRO_END;
1423 * Init Quadratic Tetrahedron Reference coordinates ans Shape function.
1426 void GaussInfo::tetra10bInit()
1428 LOCAL_COORD_MACRO_BEGIN;
1430 coords[0] = TETRA10B_REF[0];
1431 coords[1] = TETRA10B_REF[1];
1432 coords[2] = TETRA10B_REF[2];
1435 coords[0] = TETRA10B_REF[3];
1436 coords[1] = TETRA10B_REF[4];
1437 coords[2] = TETRA10B_REF[5];
1440 coords[0] = TETRA10B_REF[6];
1441 coords[1] = TETRA10B_REF[7];
1442 coords[2] = TETRA10B_REF[8];
1445 coords[0] = TETRA10B_REF[9];
1446 coords[1] = TETRA10B_REF[10];
1447 coords[2] = TETRA10B_REF[11];
1450 coords[0] = TETRA10B_REF[12];
1451 coords[1] = TETRA10B_REF[13];
1452 coords[2] = TETRA10B_REF[14];
1455 coords[0] = TETRA10B_REF[15];
1456 coords[1] = TETRA10B_REF[16];
1457 coords[2] = TETRA10B_REF[17];
1460 coords[0] = TETRA10B_REF[18];
1461 coords[1] = TETRA10B_REF[19];
1462 coords[2] = TETRA10B_REF[20];
1465 coords[0] = TETRA10B_REF[21];
1466 coords[1] = TETRA10B_REF[22];
1467 coords[2] = TETRA10B_REF[23];
1470 coords[0] = TETRA10B_REF[24];
1471 coords[1] = TETRA10B_REF[25];
1472 coords[2] = TETRA10B_REF[26];
1475 coords[0] = TETRA10B_REF[27];
1476 coords[1] = TETRA10B_REF[28];
1477 coords[2] = TETRA10B_REF[29];
1479 LOCAL_COORD_MACRO_END;
1480 SHAPE_FUN_MACRO_BEGIN;
1481 funValue[0] = gc[1]*(2.0*gc[1] - 1.0);
1482 funValue[2] = gc[2]*(2.0*gc[2] - 1.0);
1483 funValue[1] = (1.0 - gc[0] - gc[1] - gc[2])*(1.0 - 2.0*gc[0] - 2.0*gc[1] - 2.0*gc[2]);
1484 funValue[3] = gc[0]*(2.0*gc[0] - 1.0);
1485 funValue[6] = 4.0*gc[1]*gc[2];
1486 funValue[5] = 4.0*gc[2]*(1.0 - gc[0] - gc[1] - gc[2]);
1487 funValue[4] = 4.0*gc[1]*(1.0 - gc[0] - gc[1] - gc[2]);
1488 funValue[7] = 4.0*gc[0]*gc[1];
1489 funValue[9] = 4.0*gc[0]*gc[2];
1490 funValue[8] = 4.0*gc[0]*(1.0 - gc[0] - gc[1] - gc[2]);
1491 SHAPE_FUN_MACRO_END;
1495 * Init Pyramid Reference coordinates ans Shape function.
1498 void GaussInfo::pyra5aInit()
1500 LOCAL_COORD_MACRO_BEGIN;
1502 coords[0] = PYRA5A_REF[0];
1503 coords[1] = PYRA5A_REF[1];
1504 coords[2] = PYRA5A_REF[2];
1507 coords[0] = PYRA5A_REF[3];
1508 coords[1] = PYRA5A_REF[4];
1509 coords[2] = PYRA5A_REF[5];
1512 coords[0] = PYRA5A_REF[6];
1513 coords[1] = PYRA5A_REF[7];
1514 coords[2] = PYRA5A_REF[8];
1517 coords[0] = PYRA5A_REF[9];
1518 coords[1] = PYRA5A_REF[10];
1519 coords[2] = PYRA5A_REF[11];
1522 coords[0] = PYRA5A_REF[12];
1523 coords[1] = PYRA5A_REF[13];
1524 coords[2] = PYRA5A_REF[14];
1526 LOCAL_COORD_MACRO_END;
1528 SHAPE_FUN_MACRO_BEGIN;
1529 funValue[0] = 0.25*(-gc[0] + gc[1] - 1.0)*(-gc[0] - gc[1] - 1.0)*(1.0 - gc[2]);
1530 funValue[1] = 0.25*(-gc[0] - gc[1] - 1.0)*(+gc[0] - gc[1] - 1.0)*(1.0 - gc[2]);
1531 funValue[2] = 0.25*(+gc[0] + gc[1] - 1.0)*(+gc[0] - gc[1] - 1.0)*(1.0 - gc[2]);
1532 funValue[3] = 0.25*(+gc[0] + gc[1] - 1.0)*(-gc[0] + gc[1] - 1.0)*(1.0 - gc[2]);
1533 funValue[4] = gc[2];
1534 SHAPE_FUN_MACRO_END;
1537 * Init Pyramid Reference coordinates ans Shape function.
1540 void GaussInfo::pyra5bInit()
1542 LOCAL_COORD_MACRO_BEGIN;
1544 coords[0] = PYRA5B_REF[0];
1545 coords[1] = PYRA5B_REF[1];
1546 coords[2] = PYRA5B_REF[2];
1549 coords[0] = PYRA5B_REF[3];
1550 coords[1] = PYRA5B_REF[4];
1551 coords[2] = PYRA5B_REF[5];
1554 coords[0] = PYRA5B_REF[6];
1555 coords[1] = PYRA5B_REF[7];
1556 coords[2] = PYRA5B_REF[8];
1559 coords[0] = PYRA5B_REF[9];
1560 coords[1] = PYRA5B_REF[10];
1561 coords[2] = PYRA5B_REF[11];
1564 coords[0] = PYRA5B_REF[12];
1565 coords[1] = PYRA5B_REF[13];
1566 coords[2] = PYRA5B_REF[14];
1568 LOCAL_COORD_MACRO_END;
1570 SHAPE_FUN_MACRO_BEGIN;
1571 funValue[0] = 0.25*(-gc[0] + gc[1] - 1.0)*(-gc[0] - gc[1] - 1.0)*(1.0 - gc[2]);
1572 funValue[3] = 0.25*(-gc[0] - gc[1] - 1.0)*(+gc[0] - gc[1] - 1.0)*(1.0 - gc[2]);
1573 funValue[2] = 0.25*(+gc[0] + gc[1] - 1.0)*(+gc[0] - gc[1] - 1.0)*(1.0 - gc[2]);
1574 funValue[1] = 0.25*(+gc[0] + gc[1] - 1.0)*(-gc[0] + gc[1] - 1.0)*(1.0 - gc[2]);
1575 funValue[4] = gc[2];
1576 SHAPE_FUN_MACRO_END;
1580 * Init Quadratic Pyramid Reference coordinates ans Shape function.
1583 void GaussInfo::pyra13aInit()
1585 LOCAL_COORD_MACRO_BEGIN;
1587 coords[0] = PYRA13A_REF[0];
1588 coords[1] = PYRA13A_REF[1];
1589 coords[2] = PYRA13A_REF[2];
1592 coords[0] = PYRA13A_REF[3];
1593 coords[1] = PYRA13A_REF[4];
1594 coords[2] = PYRA13A_REF[5];
1597 coords[0] = PYRA13A_REF[6];
1598 coords[1] = PYRA13A_REF[7];
1599 coords[2] = PYRA13A_REF[8];
1602 coords[0] = PYRA13A_REF[9];
1603 coords[1] = PYRA13A_REF[10];
1604 coords[2] = PYRA13A_REF[11];
1607 coords[0] = PYRA13A_REF[12];
1608 coords[1] = PYRA13A_REF[13];
1609 coords[2] = PYRA13A_REF[14];
1612 coords[0] = PYRA13A_REF[15];
1613 coords[1] = PYRA13A_REF[16];
1614 coords[2] = PYRA13A_REF[17];
1617 coords[0] = PYRA13A_REF[18];
1618 coords[1] = PYRA13A_REF[19];
1619 coords[2] = PYRA13A_REF[20];
1622 coords[0] = PYRA13A_REF[21];
1623 coords[1] = PYRA13A_REF[22];
1624 coords[2] = PYRA13A_REF[23];
1627 coords[0] = PYRA13A_REF[24];
1628 coords[1] = PYRA13A_REF[25];
1629 coords[2] = PYRA13A_REF[26];
1632 coords[0] = PYRA13A_REF[27];
1633 coords[1] = PYRA13A_REF[28];
1634 coords[2] = PYRA13A_REF[29];
1637 coords[0] = PYRA13A_REF[30];
1638 coords[1] = PYRA13A_REF[31];
1639 coords[2] = PYRA13A_REF[32];
1642 coords[0] = PYRA13A_REF[33];
1643 coords[1] = PYRA13A_REF[34];
1644 coords[2] = PYRA13A_REF[35];
1647 coords[0] = PYRA13A_REF[36];
1648 coords[1] = PYRA13A_REF[37];
1649 coords[2] = PYRA13A_REF[38];
1651 LOCAL_COORD_MACRO_END;
1653 SHAPE_FUN_MACRO_BEGIN;
1654 funValue[0] = 0.5*(-gc[0] + gc[1] + gc[2] - 1.0)*(-gc[0] - gc[1] + gc[2] - 1.0)*
1655 (gc[0] - 0.5)/(1.0 - gc[2]);
1656 funValue[1] = 0.5*(-gc[0] - gc[1] + gc[2] - 1.0)*(+gc[0] - gc[1] + gc[2] - 1.0)*
1657 (gc[1] - 0.5)/(1.0 - gc[2]);
1658 funValue[2] = 0.5*(+gc[0] - gc[1] + gc[2] - 1.0)*(+gc[0] + gc[1] + gc[2] - 1.0)*
1659 (-gc[0] - 0.5)/(1.0 - gc[2]);
1660 funValue[3] = 0.5*(+gc[0] + gc[1] + gc[2] - 1.0)*(-gc[0] + gc[1] + gc[2] - 1.0)*
1661 (-gc[1] - 0.5)/(1.0 - gc[2]);
1663 funValue[4] = 2.0*gc[2]*(gc[2] - 0.5);
1665 funValue[5] = 0.5*(-gc[0] + gc[1] + gc[2] - 1.0)*(-gc[0] - gc[1] + gc[2] - 1.0)*
1666 (gc[0] - gc[1] + gc[2] - 1.0)/(1.0 - gc[2]);
1667 funValue[6] = 0.5*(-gc[0] - gc[1] + gc[2] - 1.0)*(gc[0] - gc[1] + gc[2] - 1.0)*
1668 (gc[0] + gc[1] + gc[2] - 1.0)/(1.0 - gc[2]);
1669 funValue[7] = 0.5*(gc[0] - gc[1] + gc[2] - 1.0)*(gc[0] + gc[1] + gc[2] - 1.0)*
1670 (-gc[0] + gc[1] + gc[2] - 1.0)/(1.0 - gc[2]);
1671 funValue[8] = 0.5*(gc[0] + gc[1] + gc[2] - 1.0)*(-gc[0] + gc[1] + gc[2] - 1.0)*
1672 (-gc[0] - gc[1] + gc[2] - 1.0)/(1.0 - gc[2]);
1674 funValue[9] = 0.5*gc[2]*(-gc[0] + gc[1] + gc[2] - 1.0)*(-gc[0] - gc[1] + gc[2] - 1.0)/
1676 funValue[10] = 0.5*gc[2]*(-gc[0] - gc[1] + gc[2] - 1.0)*(gc[0] - gc[1] + gc[2] - 1.0)/
1678 funValue[11] = 0.5*gc[2]*(gc[0] - gc[1] + gc[2] - 1.0)*(gc[0] + gc[1] + gc[2] - 1.0)/
1680 funValue[12] = 0.5*gc[2]*(gc[0] + gc[1] + gc[2] - 1.0)*(-gc[0] + gc[1] + gc[2] - 1.0)/
1682 SHAPE_FUN_MACRO_END;
1686 * Init Quadratic Pyramid Reference coordinates ans Shape function.
1689 void GaussInfo::pyra13bInit()
1691 LOCAL_COORD_MACRO_BEGIN;
1693 coords[0] = PYRA13B_REF[0];
1694 coords[1] = PYRA13B_REF[1];
1695 coords[2] = PYRA13B_REF[2];
1698 coords[0] = PYRA13B_REF[3];
1699 coords[1] = PYRA13B_REF[4];
1700 coords[2] = PYRA13B_REF[5];
1703 coords[0] = PYRA13B_REF[6];
1704 coords[1] = PYRA13B_REF[7];
1705 coords[2] = PYRA13B_REF[8];
1708 coords[0] = PYRA13B_REF[9];
1709 coords[1] = PYRA13B_REF[10];
1710 coords[2] = PYRA13B_REF[11];
1713 coords[0] = PYRA13B_REF[12];
1714 coords[1] = PYRA13B_REF[13];
1715 coords[2] = PYRA13B_REF[14];
1718 coords[0] = PYRA13B_REF[15];
1719 coords[1] = PYRA13B_REF[16];
1720 coords[2] = PYRA13B_REF[17];
1723 coords[0] = PYRA13B_REF[18];
1724 coords[1] = PYRA13B_REF[19];
1725 coords[2] = PYRA13B_REF[20];
1728 coords[0] = PYRA13B_REF[21];
1729 coords[1] = PYRA13B_REF[22];
1730 coords[2] = PYRA13B_REF[23];
1733 coords[0] = PYRA13B_REF[24];
1734 coords[1] = PYRA13B_REF[25];
1735 coords[2] = PYRA13B_REF[26];
1738 coords[0] = PYRA13B_REF[27];
1739 coords[1] = PYRA13B_REF[28];
1740 coords[2] = PYRA13B_REF[29];
1743 coords[0] = PYRA13B_REF[30];
1744 coords[1] = PYRA13B_REF[31];
1745 coords[2] = PYRA13B_REF[32];
1748 coords[0] = PYRA13B_REF[33];
1749 coords[1] = PYRA13B_REF[34];
1750 coords[2] = PYRA13B_REF[35];
1753 coords[0] = PYRA13B_REF[36];
1754 coords[1] = PYRA13B_REF[37];
1755 coords[2] = PYRA13B_REF[38];
1757 LOCAL_COORD_MACRO_END;
1759 SHAPE_FUN_MACRO_BEGIN;
1760 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]);
1761 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]);
1762 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]);
1763 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]);
1765 funValue[4] =2.*gc[2]*(gc[2]-0.5);
1767 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]);
1768 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]);
1769 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]);
1770 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]);
1772 funValue[9] =gc[2]*(-gc[0]+gc[1]+gc[2]-1.0)*(-gc[0]-gc[1]+gc[2]-1.0)/(1.0-gc[2]);
1773 funValue[10]=gc[2]*(gc[0]+gc[1]+gc[2]-1.0)*(-gc[0]+gc[1]+gc[2]-1.0)/(1.0-gc[2]);
1774 funValue[11]=gc[2]*(gc[0]-gc[1]+gc[2]-1.0)*(gc[0]+gc[1]+gc[2]-1.0)/(1.0-gc[2]);
1775 funValue[12]=gc[2]*(-gc[0]-gc[1]+gc[2]-1.0)*(gc[0]-gc[1]+gc[2]-1.0)/(1.0-gc[2]);
1777 SHAPE_FUN_MACRO_END;
1782 * Init Pentahedron Reference coordinates and Shape function.
1785 void GaussInfo::penta6aInit()
1787 LOCAL_COORD_MACRO_BEGIN;
1789 coords[0] = PENTA6A_REF[0];
1790 coords[1] = PENTA6A_REF[1];
1791 coords[2] = PENTA6A_REF[2];
1794 coords[0] = PENTA6A_REF[3];
1795 coords[1] = PENTA6A_REF[4];
1796 coords[2] = PENTA6A_REF[5];
1799 coords[0] = PENTA6A_REF[6];
1800 coords[1] = PENTA6A_REF[7];
1801 coords[2] = PENTA6A_REF[8];
1804 coords[0] = PENTA6A_REF[9];
1805 coords[1] = PENTA6A_REF[10];
1806 coords[2] = PENTA6A_REF[11];
1809 coords[0] = PENTA6A_REF[12];
1810 coords[1] = PENTA6A_REF[13];
1811 coords[2] = PENTA6A_REF[14];
1814 coords[0] = PENTA6A_REF[15];
1815 coords[1] = PENTA6A_REF[16];
1816 coords[2] = PENTA6A_REF[17];
1818 LOCAL_COORD_MACRO_END;
1820 SHAPE_FUN_MACRO_BEGIN;
1821 funValue[0] = 0.5*gc[1]*(1.0 - gc[0]);
1822 funValue[1] = 0.5*gc[2]*(1.0 - gc[0]);
1823 funValue[2] = 0.5*(1.0 - gc[1] - gc[2])*(1.0 - gc[0]);
1825 funValue[3] = 0.5*gc[1]*(gc[0] + 1.0);
1826 funValue[4] = 0.5*gc[2]*(gc[0] + 1.0);
1827 funValue[5] = 0.5*(1.0 - gc[1] - gc[2])*(1.0 + gc[0]);
1828 SHAPE_FUN_MACRO_END;
1832 * Init Pentahedron Reference coordinates and Shape function.
1835 void GaussInfo::penta6bInit()
1837 LOCAL_COORD_MACRO_BEGIN;
1839 coords[0] = PENTA6B_REF[0];
1840 coords[1] = PENTA6B_REF[1];
1841 coords[2] = PENTA6B_REF[2];
1844 coords[0] = PENTA6B_REF[3];
1845 coords[1] = PENTA6B_REF[4];
1846 coords[2] = PENTA6B_REF[5];
1849 coords[0] = PENTA6B_REF[6];
1850 coords[1] = PENTA6B_REF[7];
1851 coords[2] = PENTA6B_REF[8];
1854 coords[0] = PENTA6B_REF[9];
1855 coords[1] = PENTA6B_REF[10];
1856 coords[2] = PENTA6B_REF[11];
1859 coords[0] = PENTA6B_REF[12];
1860 coords[1] = PENTA6B_REF[13];
1861 coords[2] = PENTA6B_REF[14];
1864 coords[0] = PENTA6B_REF[15];
1865 coords[1] = PENTA6B_REF[16];
1866 coords[2] = PENTA6B_REF[17];
1868 LOCAL_COORD_MACRO_END;
1870 SHAPE_FUN_MACRO_BEGIN;
1871 funValue[0] = 0.5*gc[1]*(1.0 - gc[0]);
1872 funValue[2] = 0.5*gc[2]*(1.0 - gc[0]);
1873 funValue[1] = 0.5*(1.0 - gc[1] - gc[2])*(1.0 - gc[0]);
1874 funValue[3] = 0.5*gc[1]*(gc[0] + 1.0);
1875 funValue[5] = 0.5*gc[2]*(gc[0] + 1.0);
1876 funValue[4] = 0.5*(1.0 - gc[1] - gc[2])*(1.0 + gc[0]);
1877 SHAPE_FUN_MACRO_END;
1881 * This shapefunc map is same as degenerated tria3aInit
1883 void GaussInfo::penta6DegTria3aInit()
1885 LOCAL_COORD_MACRO_BEGIN;
1916 LOCAL_COORD_MACRO_END;
1918 SHAPE_FUN_MACRO_BEGIN;
1919 funValue[0] = 0.5*(1.0 + gc[1]);
1920 funValue[1] = -0.5*(gc[0] + gc[1]);
1921 funValue[2] = 0.5*(1.0 + gc[0]);
1925 SHAPE_FUN_MACRO_END;
1929 * This shapefunc map is same as degenerated tria3bInit
1931 void GaussInfo::penta6DegTria3bInit()
1933 LOCAL_COORD_MACRO_BEGIN;
1964 LOCAL_COORD_MACRO_END;
1966 SHAPE_FUN_MACRO_BEGIN;
1967 funValue[0] = 1.0 - gc[0] - gc[1];
1968 funValue[1] = gc[0];
1969 funValue[2] = gc[1];
1973 SHAPE_FUN_MACRO_END;
1977 * Init Pentahedron Reference coordinates and Shape function.
1980 void GaussInfo::penta15aInit()
1982 LOCAL_COORD_MACRO_BEGIN;
1984 coords[0] = PENTA15A_REF[0];
1985 coords[1] = PENTA15A_REF[1];
1986 coords[2] = PENTA15A_REF[2];
1989 coords[0] = PENTA15A_REF[3];
1990 coords[1] = PENTA15A_REF[4];
1991 coords[2] = PENTA15A_REF[5];
1994 coords[0] = PENTA15A_REF[6];
1995 coords[1] = PENTA15A_REF[7];
1996 coords[2] = PENTA15A_REF[8];
1999 coords[0] = PENTA15A_REF[9];
2000 coords[1] = PENTA15A_REF[10];
2001 coords[2] = PENTA15A_REF[11];
2004 coords[0] = PENTA15A_REF[12];
2005 coords[1] = PENTA15A_REF[13];
2006 coords[2] = PENTA15A_REF[14];
2009 coords[0] = PENTA15A_REF[15];
2010 coords[1] = PENTA15A_REF[16];
2011 coords[2] = PENTA15A_REF[17];
2014 coords[0] = PENTA15A_REF[18];
2015 coords[1] = PENTA15A_REF[19];
2016 coords[2] = PENTA15A_REF[20];
2019 coords[0] = PENTA15A_REF[21];
2020 coords[1] = PENTA15A_REF[22];
2021 coords[2] = PENTA15A_REF[23];
2024 coords[0] = PENTA15A_REF[24];
2025 coords[1] = PENTA15A_REF[25];
2026 coords[2] = PENTA15A_REF[26];
2029 coords[0] = PENTA15A_REF[27];
2030 coords[1] = PENTA15A_REF[28];
2031 coords[2] = PENTA15A_REF[29];
2034 coords[0] = PENTA15A_REF[30];
2035 coords[1] = PENTA15A_REF[31];
2036 coords[2] = PENTA15A_REF[32];
2039 coords[0] = PENTA15A_REF[33];
2040 coords[1] = PENTA15A_REF[34];
2041 coords[2] = PENTA15A_REF[35];
2044 coords[0] = PENTA15A_REF[36];
2045 coords[1] = PENTA15A_REF[37];
2046 coords[2] = PENTA15A_REF[38];
2049 coords[0] = PENTA15A_REF[39];
2050 coords[1] = PENTA15A_REF[40];
2051 coords[2] = PENTA15A_REF[41];
2054 coords[0] = PENTA15A_REF[42];
2055 coords[1] = PENTA15A_REF[43];
2056 coords[2] = PENTA15A_REF[44];
2058 LOCAL_COORD_MACRO_END;
2060 SHAPE_FUN_MACRO_BEGIN;
2061 funValue[0] = 0.5*gc[1]*(1.0 - gc[0])*(2.0*gc[1] - 2.0 - gc[0]);
2062 funValue[1] = 0.5*gc[2]*(1.0 - gc[0])*(2.0*gc[2] - 2.0 - gc[0]);
2063 funValue[2] = 0.5*(gc[0] - 1.0)*(1.0 - gc[1] - gc[2])*(gc[0] + 2.0*gc[1] + 2.0*gc[2]);
2065 funValue[3] = 0.5*gc[1]*(1.0 + gc[0])*(2.0*gc[1] - 2.0 + gc[0]);
2066 funValue[4] = 0.5*gc[2]*(1.0 + gc[0])*(2.0*gc[2] - 2.0 + gc[0]);
2067 funValue[5] = 0.5*(-gc[0] - 1.0)*(1.0 - gc[1] - gc[2])*(-gc[0] + 2.0*gc[1] + 2.0*gc[2]);
2069 funValue[6] = 2.0*gc[1]*gc[2]*(1.0 - gc[0]);
2070 funValue[7] = 2.0*gc[2]*(1.0 - gc[1] - gc[2])*(1.0 - gc[0]);
2071 funValue[8] = 2.0*gc[1]*(1.0 - gc[1] - gc[2])*(1.0 - gc[0]);
2073 funValue[9] = gc[1]*(1.0 - gc[0]*gc[0]);
2074 funValue[10] = gc[2]*(1.0 - gc[0]*gc[0]);
2075 funValue[11] = (1.0 - gc[1] - gc[2])*(1.0 - gc[0]*gc[0]);
2077 funValue[12] = 2.0*gc[1]*gc[2]*(1.0 + gc[0]);
2078 funValue[13] = 2.0*gc[2]*(1.0 - gc[1] - gc[2])*(1.0 + gc[0]);
2079 funValue[14] = 2.0*gc[1]*(1.0 - gc[1] - gc[2])*(1.0 + gc[0]);
2080 SHAPE_FUN_MACRO_END;
2084 * Init Qaudratic Pentahedron Reference coordinates and Shape function.
2087 void GaussInfo::penta15bInit()
2089 LOCAL_COORD_MACRO_BEGIN;
2091 coords[0] = PENTA15B_REF[0];
2092 coords[1] = PENTA15B_REF[1];
2093 coords[2] = PENTA15B_REF[2];
2096 coords[0] = PENTA15B_REF[3];
2097 coords[1] = PENTA15B_REF[4];
2098 coords[2] = PENTA15B_REF[5];
2101 coords[0] = PENTA15B_REF[6];
2102 coords[1] = PENTA15B_REF[7];
2103 coords[2] = PENTA15B_REF[8];
2106 coords[0] = PENTA15B_REF[9];
2107 coords[1] = PENTA15B_REF[10];
2108 coords[2] = PENTA15B_REF[11];
2111 coords[0] = PENTA15B_REF[12];
2112 coords[1] = PENTA15B_REF[13];
2113 coords[2] = PENTA15B_REF[14];
2116 coords[0] = PENTA15B_REF[15];
2117 coords[1] = PENTA15B_REF[16];
2118 coords[2] = PENTA15B_REF[17];
2121 coords[0] = PENTA15B_REF[18];
2122 coords[1] = PENTA15B_REF[19];
2123 coords[2] = PENTA15B_REF[20];
2126 coords[0] = PENTA15B_REF[21];
2127 coords[1] = PENTA15B_REF[22];
2128 coords[2] = PENTA15B_REF[23];
2131 coords[0] = PENTA15B_REF[24];
2132 coords[1] = PENTA15B_REF[25];
2133 coords[2] = PENTA15B_REF[26];
2136 coords[0] = PENTA15B_REF[27];
2137 coords[1] = PENTA15B_REF[28];
2138 coords[2] = PENTA15B_REF[29];
2141 coords[0] = PENTA15B_REF[30];
2142 coords[1] = PENTA15B_REF[31];
2143 coords[2] = PENTA15B_REF[32];
2146 coords[0] = PENTA15B_REF[33];
2147 coords[1] = PENTA15B_REF[34];
2148 coords[2] = PENTA15B_REF[35];
2151 coords[0] = PENTA15B_REF[36];
2152 coords[1] = PENTA15B_REF[37];
2153 coords[2] = PENTA15B_REF[38];
2156 coords[0] = PENTA15B_REF[39];
2157 coords[1] = PENTA15B_REF[40];
2158 coords[2] = PENTA15B_REF[41];
2161 coords[0] = PENTA15B_REF[42];
2162 coords[1] = PENTA15B_REF[43];
2163 coords[2] = PENTA15B_REF[44];
2165 LOCAL_COORD_MACRO_END;
2167 SHAPE_FUN_MACRO_BEGIN;
2168 funValue[0] = 0.5*gc[1]*(1.0 - gc[0])*(2.0*gc[1] - 2.0 - gc[0]);
2169 funValue[2] = 0.5*gc[2]*(1.0 - gc[0])*(2.0*gc[2] - 2.0 - gc[0]);
2170 funValue[1] = 0.5*(gc[0] - 1.0)*(1.0 - gc[1] - gc[2])*(gc[0] + 2.0*gc[1] + 2.0*gc[2]);
2172 funValue[3] = 0.5*gc[1]*(1.0 + gc[0])*(2.0*gc[1] - 2.0 + gc[0]);
2173 funValue[5] = 0.5*gc[2]*(1.0 + gc[0])*(2.0*gc[2] - 2.0 + gc[0]);
2174 funValue[4] = 0.5*(-gc[0] - 1.0)*(1.0 - gc[1] - gc[2])*(-gc[0] + 2.0*gc[1] + 2.0*gc[2]);
2176 funValue[8] = 2.0*gc[1]*gc[2]*(1.0 - gc[0]);
2177 funValue[7] = 2.0*gc[2]*(1.0 - gc[1] - gc[2])*(1.0 - gc[0]);
2178 funValue[6] = 2.0*gc[1]*(1.0 - gc[1] - gc[2])*(1.0 - gc[0]);
2180 funValue[12] = gc[1]*(1.0 - gc[0]*gc[0]);
2181 funValue[14] = gc[2]*(1.0 - gc[0]*gc[0]);
2182 funValue[13] = (1.0 - gc[1] - gc[2])*(1.0 - gc[0]*gc[0]);
2184 funValue[11] = 2.0*gc[1]*gc[2]*(1.0 + gc[0]);
2185 funValue[10] = 2.0*gc[2]*(1.0 - gc[1] - gc[2])*(1.0 + gc[0]);
2186 funValue[9] = 2.0*gc[1]*(1.0 - gc[1] - gc[2])*(1.0 + gc[0]);
2187 SHAPE_FUN_MACRO_END;
2190 void GaussInfo::penta18aInit()
2192 LOCAL_COORD_MACRO_BEGIN;
2194 coords[0] = PENTA18A_REF[0];
2195 coords[1] = PENTA18A_REF[1];
2196 coords[2] = PENTA18A_REF[2];
2199 coords[0] = PENTA18A_REF[3];
2200 coords[1] = PENTA18A_REF[4];
2201 coords[2] = PENTA18A_REF[5];
2204 coords[0] = PENTA18A_REF[6];
2205 coords[1] = PENTA18A_REF[7];
2206 coords[2] = PENTA18A_REF[8];
2209 coords[0] = PENTA18A_REF[9];
2210 coords[1] = PENTA18A_REF[10];
2211 coords[2] = PENTA18A_REF[11];
2214 coords[0] = PENTA18A_REF[12];
2215 coords[1] = PENTA18A_REF[13];
2216 coords[2] = PENTA18A_REF[14];
2219 coords[0] = PENTA18A_REF[15];
2220 coords[1] = PENTA18A_REF[16];
2221 coords[2] = PENTA18A_REF[17];
2224 coords[0] = PENTA18A_REF[18];
2225 coords[1] = PENTA18A_REF[19];
2226 coords[2] = PENTA18A_REF[20];
2229 coords[0] = PENTA18A_REF[21];
2230 coords[1] = PENTA18A_REF[22];
2231 coords[2] = PENTA18A_REF[23];
2234 coords[0] = PENTA18A_REF[24];
2235 coords[1] = PENTA18A_REF[25];
2236 coords[2] = PENTA18A_REF[26];
2239 coords[0] = PENTA18A_REF[27];
2240 coords[1] = PENTA18A_REF[28];
2241 coords[2] = PENTA18A_REF[29];
2244 coords[0] = PENTA18A_REF[30];
2245 coords[1] = PENTA18A_REF[31];
2246 coords[2] = PENTA18A_REF[32];
2249 coords[0] = PENTA18A_REF[33];
2250 coords[1] = PENTA18A_REF[34];
2251 coords[2] = PENTA18A_REF[35];
2254 coords[0] = PENTA18A_REF[36];
2255 coords[1] = PENTA18A_REF[37];
2256 coords[2] = PENTA18A_REF[38];
2259 coords[0] = PENTA18A_REF[39];
2260 coords[1] = PENTA18A_REF[40];
2261 coords[2] = PENTA18A_REF[41];
2264 coords[0] = PENTA18A_REF[42];
2265 coords[1] = PENTA18A_REF[43];
2266 coords[2] = PENTA18A_REF[44];
2269 coords[0] = PENTA18A_REF[45];
2270 coords[1] = PENTA18A_REF[46];
2271 coords[2] = PENTA18A_REF[47];
2274 coords[0] = PENTA18A_REF[48];
2275 coords[1] = PENTA18A_REF[49];
2276 coords[2] = PENTA18A_REF[50];
2279 coords[0] = PENTA18A_REF[51];
2280 coords[1] = PENTA18A_REF[52];
2281 coords[2] = PENTA18A_REF[53];
2283 LOCAL_COORD_MACRO_END;
2285 SHAPE_FUN_MACRO_BEGIN;
2286 funValue[0] = 0.5*gc[1]*(1.0 - gc[0])*(2.0*gc[1] - 2.0 - gc[0]);
2287 funValue[1] = 0.5*gc[2]*(1.0 - gc[0])*(2.0*gc[2] - 2.0 - gc[0]);
2288 funValue[2] = 0.5*(gc[0] - 1.0)*(1.0 - gc[1] - gc[2])*(gc[0] + 2.0*gc[1] + 2.0*gc[2]);
2290 funValue[3] = 0.5*gc[1]*(1.0 + gc[0])*(2.0*gc[1] - 2.0 + gc[0]);
2291 funValue[4] = 0.5*gc[2]*(1.0 + gc[0])*(2.0*gc[2] - 2.0 + gc[0]);
2292 funValue[5] = 0.5*(-gc[0] - 1.0)*(1.0 - gc[1] - gc[2])*(-gc[0] + 2.0*gc[1] + 2.0*gc[2]);
2294 funValue[6] = 2.0*gc[1]*gc[2]*(1.0 - gc[0]);
2295 funValue[7] = 2.0*gc[2]*(1.0 - gc[1] - gc[2])*(1.0 - gc[0]);
2296 funValue[8] = 2.0*gc[1]*(1.0 - gc[1] - gc[2])*(1.0 - gc[0]);
2298 funValue[9] = gc[1]*(1.0 - gc[0]*gc[0]);
2299 funValue[10] = gc[2]*(1.0 - gc[0]*gc[0]);
2300 funValue[11] = (1.0 - gc[1] - gc[2])*(1.0 - gc[0]*gc[0]);
2302 funValue[12] = 2.0*gc[1]*gc[2]*(1.0 + gc[0]);
2303 funValue[13] = 2.0*gc[2]*(1.0 - gc[1] - gc[2])*(1.0 + gc[0]);
2304 funValue[14] = 2.0*gc[1]*(1.0 - gc[1] - gc[2])*(1.0 + gc[0]);
2306 funValue[15] = 4.0*gc[1]*gc[2]*(1.0 - gc[0] * gc[0]);
2307 funValue[16] = 4.0*gc[2]*(gc[0] * gc[0] - 1) * ( gc[2] + gc[1] - 1);
2308 funValue[17] = 4.0*gc[1]*(gc[0] * gc[0] - 1) * ( gc[2] + gc[1] - 1);
2309 SHAPE_FUN_MACRO_END;
2312 void GaussInfo::penta18bInit()
2314 LOCAL_COORD_MACRO_BEGIN;
2316 coords[0] = PENTA18B_REF[0];
2317 coords[1] = PENTA18B_REF[1];
2318 coords[2] = PENTA18B_REF[2];
2321 coords[0] = PENTA18B_REF[3];
2322 coords[1] = PENTA18B_REF[4];
2323 coords[2] = PENTA18B_REF[5];
2326 coords[0] = PENTA18B_REF[6];
2327 coords[1] = PENTA18B_REF[7];
2328 coords[2] = PENTA18B_REF[8];
2331 coords[0] = PENTA18B_REF[9];
2332 coords[1] = PENTA18B_REF[10];
2333 coords[2] = PENTA18B_REF[11];
2336 coords[0] = PENTA18B_REF[12];
2337 coords[1] = PENTA18B_REF[13];
2338 coords[2] = PENTA18B_REF[14];
2341 coords[0] = PENTA18B_REF[15];
2342 coords[1] = PENTA18B_REF[16];
2343 coords[2] = PENTA18B_REF[17];
2346 coords[0] = PENTA18B_REF[18];
2347 coords[1] = PENTA18B_REF[19];
2348 coords[2] = PENTA18B_REF[20];
2351 coords[0] = PENTA18B_REF[21];
2352 coords[1] = PENTA18B_REF[22];
2353 coords[2] = PENTA18B_REF[23];
2356 coords[0] = PENTA18B_REF[24];
2357 coords[1] = PENTA18B_REF[25];
2358 coords[2] = PENTA18B_REF[26];
2361 coords[0] = PENTA18B_REF[27];
2362 coords[1] = PENTA18B_REF[28];
2363 coords[2] = PENTA18B_REF[29];
2366 coords[0] = PENTA18B_REF[30];
2367 coords[1] = PENTA18B_REF[31];
2368 coords[2] = PENTA18B_REF[32];
2371 coords[0] = PENTA18B_REF[33];
2372 coords[1] = PENTA18B_REF[34];
2373 coords[2] = PENTA18B_REF[35];
2376 coords[0] = PENTA18B_REF[36];
2377 coords[1] = PENTA18B_REF[37];
2378 coords[2] = PENTA18B_REF[38];
2381 coords[0] = PENTA18B_REF[39];
2382 coords[1] = PENTA18B_REF[40];
2383 coords[2] = PENTA18B_REF[41];
2386 coords[0] = PENTA18B_REF[42];
2387 coords[1] = PENTA18B_REF[43];
2388 coords[2] = PENTA18B_REF[44];
2391 coords[0] = PENTA18B_REF[45];
2392 coords[1] = PENTA18B_REF[46];
2393 coords[2] = PENTA18B_REF[47];
2396 coords[0] = PENTA18B_REF[48];
2397 coords[1] = PENTA18B_REF[49];
2398 coords[2] = PENTA18B_REF[50];
2401 coords[0] = PENTA18B_REF[51];
2402 coords[1] = PENTA18B_REF[52];
2403 coords[2] = PENTA18B_REF[53];
2405 LOCAL_COORD_MACRO_END;
2407 SHAPE_FUN_MACRO_BEGIN;
2408 funValue[0] = 0.5*gc[1]*(1.0 - gc[0])*(2.0*gc[1] - 2.0 - gc[0]);
2409 funValue[2] = 0.5*gc[2]*(1.0 - gc[0])*(2.0*gc[2] - 2.0 - gc[0]);
2410 funValue[1] = 0.5*(gc[0] - 1.0)*(1.0 - gc[1] - gc[2])*(gc[0] + 2.0*gc[1] + 2.0*gc[2]);
2412 funValue[3] = 0.5*gc[1]*(1.0 + gc[0])*(2.0*gc[1] - 2.0 + gc[0]);
2413 funValue[5] = 0.5*gc[2]*(1.0 + gc[0])*(2.0*gc[2] - 2.0 + gc[0]);
2414 funValue[4] = 0.5*(-gc[0] - 1.0)*(1.0 - gc[1] - gc[2])*(-gc[0] + 2.0*gc[1] + 2.0*gc[2]);
2416 funValue[8] = 2.0*gc[1]*gc[2]*(1.0 - gc[0]);
2417 funValue[7] = 2.0*gc[2]*(1.0 - gc[1] - gc[2])*(1.0 - gc[0]);
2418 funValue[6] = 2.0*gc[1]*(1.0 - gc[1] - gc[2])*(1.0 - gc[0]);
2420 funValue[12] = gc[1]*(1.0 - gc[0]*gc[0]);
2421 funValue[14] = gc[2]*(1.0 - gc[0]*gc[0]);
2422 funValue[13] = (1.0 - gc[1] - gc[2])*(1.0 - gc[0]*gc[0]);
2424 funValue[11] = 2.0*gc[1]*gc[2]*(1.0 + gc[0]);
2425 funValue[10] = 2.0*gc[2]*(1.0 - gc[1] - gc[2])*(1.0 + gc[0]);
2426 funValue[9] = 2.0*gc[1]*(1.0 - gc[1] - gc[2])*(1.0 + gc[0]);
2428 funValue[17] = 4.0*gc[1]*gc[2]*(1.0 - gc[0] * gc[0]);
2429 funValue[16] = 4.0*gc[2]*(gc[0] * gc[0] - 1) * ( gc[2] + gc[1] - 1);
2430 funValue[15] = 4.0*gc[1]*(gc[0] * gc[0] - 1) * ( gc[2] + gc[1] - 1);
2431 SHAPE_FUN_MACRO_END;
2435 * Init Hehahedron Reference coordinates and Shape function.
2438 void GaussInfo::hexa8aInit()
2440 LOCAL_COORD_MACRO_BEGIN;
2442 coords[0] = HEXA8A_REF[0];
2443 coords[1] = HEXA8A_REF[1];
2444 coords[2] = HEXA8A_REF[2];
2447 coords[0] = HEXA8A_REF[3];
2448 coords[1] = HEXA8A_REF[4];
2449 coords[2] = HEXA8A_REF[5];
2452 coords[0] = HEXA8A_REF[6];
2453 coords[1] = HEXA8A_REF[7];
2454 coords[2] = HEXA8A_REF[8];
2457 coords[0] = HEXA8A_REF[9];
2458 coords[1] = HEXA8A_REF[10];
2459 coords[2] = HEXA8A_REF[11];
2462 coords[0] = HEXA8A_REF[12];
2463 coords[1] = HEXA8A_REF[13];
2464 coords[2] = HEXA8A_REF[14];
2467 coords[0] = HEXA8A_REF[15];
2468 coords[1] = HEXA8A_REF[16];
2469 coords[2] = HEXA8A_REF[17];
2472 coords[0] = HEXA8A_REF[18];
2473 coords[1] = HEXA8A_REF[19];
2474 coords[2] = HEXA8A_REF[20];
2477 coords[0] = HEXA8A_REF[21];
2478 coords[1] = HEXA8A_REF[22];
2479 coords[2] = HEXA8A_REF[23];
2481 LOCAL_COORD_MACRO_END;
2483 SHAPE_FUN_MACRO_BEGIN;
2484 funValue[0] = 0.125*(1.0 - gc[0])*(1.0 - gc[1])*(1.0 - gc[2]);
2485 funValue[1] = 0.125*(1.0 + gc[0])*(1.0 - gc[1])*(1.0 - gc[2]);
2486 funValue[2] = 0.125*(1.0 + gc[0])*(1.0 + gc[1])*(1.0 - gc[2]);
2487 funValue[3] = 0.125*(1.0 - gc[0])*(1.0 + gc[1])*(1.0 - gc[2]);
2489 funValue[4] = 0.125*(1.0 - gc[0])*(1.0 - gc[1])*(1.0 + gc[2]);
2490 funValue[5] = 0.125*(1.0 + gc[0])*(1.0 - gc[1])*(1.0 + gc[2]);
2491 funValue[6] = 0.125*(1.0 + gc[0])*(1.0 + gc[1])*(1.0 + gc[2]);
2492 funValue[7] = 0.125*(1.0 - gc[0])*(1.0 + gc[1])*(1.0 + gc[2]);
2493 SHAPE_FUN_MACRO_END;
2497 * Init Hehahedron Reference coordinates and Shape function.
2500 void GaussInfo::hexa8bInit()
2502 LOCAL_COORD_MACRO_BEGIN;
2504 coords[0] = HEXA8B_REF[0];
2505 coords[1] = HEXA8B_REF[1];
2506 coords[2] = HEXA8B_REF[2];
2509 coords[0] = HEXA8B_REF[3];
2510 coords[1] = HEXA8B_REF[4];
2511 coords[2] = HEXA8B_REF[5];
2514 coords[0] = HEXA8B_REF[6];
2515 coords[1] = HEXA8B_REF[7];
2516 coords[2] = HEXA8B_REF[8];
2519 coords[0] = HEXA8B_REF[9];
2520 coords[1] = HEXA8B_REF[10];
2521 coords[2] = HEXA8B_REF[11];
2524 coords[0] = HEXA8B_REF[12];
2525 coords[1] = HEXA8B_REF[13];
2526 coords[2] = HEXA8B_REF[14];
2529 coords[0] = HEXA8B_REF[15];
2530 coords[1] = HEXA8B_REF[16];
2531 coords[2] = HEXA8B_REF[17];
2534 coords[0] = HEXA8B_REF[18];
2535 coords[1] = HEXA8B_REF[19];
2536 coords[2] = HEXA8B_REF[20];
2539 coords[0] = HEXA8B_REF[21];
2540 coords[1] = HEXA8B_REF[22];
2541 coords[2] = HEXA8B_REF[23];
2543 LOCAL_COORD_MACRO_END;
2545 SHAPE_FUN_MACRO_BEGIN;
2546 funValue[0] = 0.125*(1.0 - gc[0])*(1.0 - gc[1])*(1.0 - gc[2]);
2547 funValue[3] = 0.125*(1.0 + gc[0])*(1.0 - gc[1])*(1.0 - gc[2]);
2548 funValue[2] = 0.125*(1.0 + gc[0])*(1.0 + gc[1])*(1.0 - gc[2]);
2549 funValue[1] = 0.125*(1.0 - gc[0])*(1.0 + gc[1])*(1.0 - gc[2]);
2551 funValue[4] = 0.125*(1.0 - gc[0])*(1.0 - gc[1])*(1.0 + gc[2]);
2552 funValue[7] = 0.125*(1.0 + gc[0])*(1.0 - gc[1])*(1.0 + gc[2]);
2553 funValue[6] = 0.125*(1.0 + gc[0])*(1.0 + gc[1])*(1.0 + gc[2]);
2554 funValue[5] = 0.125*(1.0 - gc[0])*(1.0 + gc[1])*(1.0 + gc[2]);
2555 SHAPE_FUN_MACRO_END;
2559 * This shapefunc map is same as degenerated quad4bInit
2561 void GaussInfo::hexa8DegQuad4aInit()
2563 LOCAL_COORD_MACRO_BEGIN;
2604 LOCAL_COORD_MACRO_END;
2606 SHAPE_FUN_MACRO_BEGIN;
2607 funValue[0] = 0.25*(1.0 + gc[1])*(1.0 - gc[0]);
2608 funValue[1] = 0.25*(1.0 - gc[1])*(1.0 - gc[0]);
2609 funValue[2] = 0.25*(1.0 - gc[1])*(1.0 + gc[0]);
2610 funValue[3] = 0.25*(1.0 + gc[0])*(1.0 + gc[1]);
2615 SHAPE_FUN_MACRO_END;
2619 * This shapefunc map is same as degenerated quad4bInit
2621 void GaussInfo::hexa8DegQuad4bInit()
2623 LOCAL_COORD_MACRO_BEGIN;
2664 LOCAL_COORD_MACRO_END;
2666 SHAPE_FUN_MACRO_BEGIN;
2667 funValue[0] = 0.25*(1.0 - gc[0])*(1.0 - gc[1]);
2668 funValue[1] = 0.25*(1.0 + gc[0])*(1.0 - gc[1]);
2669 funValue[2] = 0.25*(1.0 + gc[0])*(1.0 + gc[1]);
2670 funValue[3] = 0.25*(1.0 - gc[0])*(1.0 + gc[1]);
2675 SHAPE_FUN_MACRO_END;
2679 * This shapefunc map is same as degenerated quad4cInit
2681 void GaussInfo::hexa8DegQuad4cInit()
2683 LOCAL_COORD_MACRO_BEGIN;
2725 LOCAL_COORD_MACRO_END;
2727 SHAPE_FUN_MACRO_BEGIN;
2728 funValue[0] = 0.25*(1.0 - gc[0])*(1.0 - gc[1]);
2729 funValue[1] = 0.25*(1.0 - gc[0])*(1.0 + gc[1]);
2730 funValue[2] = 0.25*(1.0 + gc[0])*(1.0 + gc[1]);
2731 funValue[3] = 0.25*(1.0 + gc[0])*(1.0 - gc[1]);
2736 SHAPE_FUN_MACRO_END;
2740 * Init Qaudratic Hehahedron Reference coordinates and Shape function.
2743 void GaussInfo::hexa20aInit()
2745 LOCAL_COORD_MACRO_BEGIN;
2747 coords[0] = HEXA20A_REF[0];
2748 coords[1] = HEXA20A_REF[1];
2749 coords[2] = HEXA20A_REF[2];
2752 coords[0] = HEXA20A_REF[3];
2753 coords[1] = HEXA20A_REF[4];
2754 coords[2] = HEXA20A_REF[5];
2757 coords[0] = HEXA20A_REF[6];
2758 coords[1] = HEXA20A_REF[7];
2759 coords[2] = HEXA20A_REF[8];
2762 coords[0] = HEXA20A_REF[9];
2763 coords[1] = HEXA20A_REF[10];
2764 coords[2] = HEXA20A_REF[11];
2767 coords[0] = HEXA20A_REF[12];
2768 coords[1] = HEXA20A_REF[13];
2769 coords[2] = HEXA20A_REF[14];
2772 coords[0] = HEXA20A_REF[15];
2773 coords[1] = HEXA20A_REF[16];
2774 coords[2] = HEXA20A_REF[17];
2777 coords[0] = HEXA20A_REF[18];
2778 coords[1] = HEXA20A_REF[19];
2779 coords[2] = HEXA20A_REF[20];
2782 coords[0] = HEXA20A_REF[21];
2783 coords[1] = HEXA20A_REF[22];
2784 coords[2] = HEXA20A_REF[23];
2787 coords[0] = HEXA20A_REF[24];
2788 coords[1] = HEXA20A_REF[25];
2789 coords[2] = HEXA20A_REF[26];
2792 coords[0] = HEXA20A_REF[27];
2793 coords[1] = HEXA20A_REF[28];
2794 coords[2] = HEXA20A_REF[29];
2797 coords[0] = HEXA20A_REF[30];
2798 coords[1] = HEXA20A_REF[31];
2799 coords[2] = HEXA20A_REF[32];
2802 coords[0] = HEXA20A_REF[33];
2803 coords[1] = HEXA20A_REF[34];
2804 coords[2] = HEXA20A_REF[35];
2807 coords[0] = HEXA20A_REF[36];
2808 coords[1] = HEXA20A_REF[37];
2809 coords[2] = HEXA20A_REF[38];
2812 coords[0] = HEXA20A_REF[39];
2813 coords[1] = HEXA20A_REF[40];
2814 coords[2] = HEXA20A_REF[41];
2817 coords[0] = HEXA20A_REF[42];
2818 coords[1] = HEXA20A_REF[43];
2819 coords[2] = HEXA20A_REF[44];
2822 coords[0] = HEXA20A_REF[45];
2823 coords[1] = HEXA20A_REF[46];
2824 coords[2] = HEXA20A_REF[47];
2827 coords[0] = HEXA20A_REF[48];
2828 coords[1] = HEXA20A_REF[49];
2829 coords[2] = HEXA20A_REF[50];
2832 coords[0] = HEXA20A_REF[51];
2833 coords[1] = HEXA20A_REF[52];
2834 coords[2] = HEXA20A_REF[53];
2837 coords[0] = HEXA20A_REF[54];
2838 coords[1] = HEXA20A_REF[55];
2839 coords[2] = HEXA20A_REF[56];
2842 coords[0] = HEXA20A_REF[57];
2843 coords[1] = HEXA20A_REF[58];
2844 coords[2] = HEXA20A_REF[59];
2846 LOCAL_COORD_MACRO_END;
2848 SHAPE_FUN_MACRO_BEGIN;
2849 funValue[0] = 0.125*(1.0 - gc[0])*(1.0 - gc[1])*(1.0 - gc[2])*
2850 (-2.0 - gc[0] - gc[1] - gc[2]);
2851 funValue[1] = 0.125*(1.0 + gc[0])*(1.0 - gc[1])*(1.0 - gc[2])*
2852 (-2.0 + gc[0] - gc[1] - gc[2]);
2853 funValue[2] = 0.125*(1.0 + gc[0])*(1.0 + gc[1])*(1.0 - gc[2])*
2854 (-2.0 + gc[0] + gc[1] - gc[2]);
2855 funValue[3] = 0.125*(1.0 - gc[0])*(1.0 + gc[1])*(1.0 - gc[2])*
2856 (-2.0 - gc[0] + gc[1] - gc[2]);
2857 funValue[4] = 0.125*(1.0 - gc[0])*(1.0 - gc[1])*(1.0 + gc[2])*
2858 (-2.0 - gc[0] - gc[1] + gc[2]);
2859 funValue[5] = 0.125*(1.0 + gc[0])*(1.0 - gc[1])*(1.0 + gc[2])*
2860 (-2.0 + gc[0] - gc[1] + gc[2]);
2861 funValue[6] = 0.125*(1.0 + gc[0])*(1.0 + gc[1])*(1.0 + gc[2])*
2862 (-2.0 + gc[0] + gc[1] + gc[2]);
2863 funValue[7] = 0.125*(1.0 - gc[0])*(1.0 + gc[1])*(1.0 + gc[2])*
2864 (-2.0 - gc[0] + gc[1] + gc[2]);
2866 funValue[8] = 0.25*(1.0 - gc[0]*gc[0])*(1.0 - gc[1])*(1.0 - gc[2]);
2867 funValue[9] = 0.25*(1.0 - gc[1]*gc[1])*(1.0 + gc[0])*(1.0 - gc[2]);
2868 funValue[10] = 0.25*(1.0 - gc[0]*gc[0])*(1.0 + gc[1])*(1.0 - gc[2]);
2869 funValue[11] = 0.25*(1.0 - gc[1]*gc[1])*(1.0 - gc[0])*(1.0 - gc[2]);
2870 funValue[12] = 0.25*(1.0 - gc[2]*gc[2])*(1.0 - gc[0])*(1.0 - gc[1]);
2871 funValue[13] = 0.25*(1.0 - gc[2]*gc[2])*(1.0 + gc[0])*(1.0 - gc[1]);
2872 funValue[14] = 0.25*(1.0 - gc[2]*gc[2])*(1.0 + gc[0])*(1.0 + gc[1]);
2873 funValue[15] = 0.25*(1.0 - gc[2]*gc[2])*(1.0 - gc[0])*(1.0 + gc[1]);
2874 funValue[16] = 0.25*(1.0 - gc[0]*gc[0])*(1.0 - gc[1])*(1.0 + gc[2]);
2875 funValue[17] = 0.25*(1.0 - gc[1]*gc[1])*(1.0 + gc[0])*(1.0 + gc[2]);
2876 funValue[18] = 0.25*(1.0 - gc[0]*gc[0])*(1.0 + gc[1])*(1.0 + gc[2]);
2877 funValue[19] = 0.25*(1.0 - gc[1]*gc[1])*(1.0 - gc[0])*(1.0 + gc[2]);
2878 SHAPE_FUN_MACRO_END;
2882 * Init Qaudratic Hehahedron Reference coordinates and Shape function.
2885 void GaussInfo::hexa20bInit()
2887 LOCAL_COORD_MACRO_BEGIN;
2889 coords[0] = HEXA20B_REF[0];
2890 coords[1] = HEXA20B_REF[1];
2891 coords[2] = HEXA20B_REF[2];
2894 coords[0] = HEXA20B_REF[3];
2895 coords[1] = HEXA20B_REF[4];
2896 coords[2] = HEXA20B_REF[5];
2899 coords[0] = HEXA20B_REF[6];
2900 coords[1] = HEXA20B_REF[7];
2901 coords[2] = HEXA20B_REF[8];
2904 coords[0] = HEXA20B_REF[9];
2905 coords[1] = HEXA20B_REF[10];
2906 coords[2] = HEXA20B_REF[11];
2909 coords[0] = HEXA20B_REF[12];
2910 coords[1] = HEXA20B_REF[13];
2911 coords[2] = HEXA20B_REF[14];
2914 coords[0] = HEXA20B_REF[15];
2915 coords[1] = HEXA20B_REF[16];
2916 coords[2] = HEXA20B_REF[17];
2919 coords[0] = HEXA20B_REF[18];
2920 coords[1] = HEXA20B_REF[19];
2921 coords[2] = HEXA20B_REF[20];
2924 coords[0] = HEXA20B_REF[21];
2925 coords[1] = HEXA20B_REF[22];
2926 coords[2] = HEXA20B_REF[23];
2929 coords[0] = HEXA20B_REF[24];
2930 coords[1] = HEXA20B_REF[25];
2931 coords[2] = HEXA20B_REF[26];
2934 coords[0] = HEXA20B_REF[27];
2935 coords[1] = HEXA20B_REF[28];
2936 coords[2] = HEXA20B_REF[29];
2939 coords[0] = HEXA20B_REF[30];
2940 coords[1] = HEXA20B_REF[31];
2941 coords[2] = HEXA20B_REF[32];
2944 coords[0] = HEXA20B_REF[33];
2945 coords[1] = HEXA20B_REF[34];
2946 coords[2] = HEXA20B_REF[35];
2949 coords[0] = HEXA20B_REF[36];
2950 coords[1] = HEXA20B_REF[37];
2951 coords[2] = HEXA20B_REF[38];
2954 coords[0] = HEXA20B_REF[39];
2955 coords[1] = HEXA20B_REF[40];
2956 coords[2] = HEXA20B_REF[41];
2959 coords[0] = HEXA20B_REF[42];
2960 coords[1] = HEXA20B_REF[43];
2961 coords[2] = HEXA20B_REF[44];
2964 coords[0] = HEXA20B_REF[45];
2965 coords[1] = HEXA20B_REF[46];
2966 coords[2] = HEXA20B_REF[47];
2969 coords[0] = HEXA20B_REF[48];
2970 coords[1] = HEXA20B_REF[49];
2971 coords[2] = HEXA20B_REF[50];
2974 coords[0] = HEXA20B_REF[51];
2975 coords[1] = HEXA20B_REF[52];
2976 coords[2] = HEXA20B_REF[53];
2979 coords[0] = HEXA20B_REF[54];
2980 coords[1] = HEXA20B_REF[55];
2981 coords[2] = HEXA20B_REF[56];
2984 coords[0] = HEXA20B_REF[57];
2985 coords[1] = HEXA20B_REF[58];
2986 coords[2] = HEXA20B_REF[59];
2988 LOCAL_COORD_MACRO_END;
2990 SHAPE_FUN_MACRO_BEGIN;
2992 funValue[0] = 0.125*(1.0 - gc[0])*(1.0 - gc[1])*(1.0 - gc[2])*
2993 (-2.0 - gc[0] - gc[1] - gc[2]);
2994 funValue[3] = 0.125*(1.0 + gc[0])*(1.0 - gc[1])*(1.0 - gc[2])*
2995 (-2.0 + gc[0] - gc[1] - gc[2]);
2996 funValue[2] = 0.125*(1.0 + gc[0])*(1.0 + gc[1])*(1.0 - gc[2])*
2997 (-2.0 + gc[0] + gc[1] - gc[2]);
2998 funValue[1] = 0.125*(1.0 - gc[0])*(1.0 + gc[1])*(1.0 - gc[2])*
2999 (-2.0 - gc[0] + gc[1] - gc[2]);
3000 funValue[4] = 0.125*(1.0 - gc[0])*(1.0 - gc[1])*(1.0 + gc[2])*
3001 (-2.0 - gc[0] - gc[1] + gc[2]);
3002 funValue[7] = 0.125*(1.0 + gc[0])*(1.0 - gc[1])*(1.0 + gc[2])*
3003 (-2.0 + gc[0] - gc[1] + gc[2]);
3004 funValue[6] = 0.125*(1.0 + gc[0])*(1.0 + gc[1])*(1.0 + gc[2])*
3005 (-2.0 + gc[0] + gc[1] + gc[2]);
3006 funValue[5] = 0.125*(1.0 - gc[0])*(1.0 + gc[1])*(1.0 + gc[2])*
3007 (-2.0 - gc[0] + gc[1] + gc[2]);
3009 funValue[11] = 0.25*(1.0 - gc[0]*gc[0])*(1.0 - gc[1])*(1.0 - gc[2]);
3010 funValue[10] = 0.25*(1.0 - gc[1]*gc[1])*(1.0 + gc[0])*(1.0 - gc[2]);
3011 funValue[9] = 0.25*(1.0 - gc[0]*gc[0])*(1.0 + gc[1])*(1.0 - gc[2]);
3012 funValue[8] = 0.25*(1.0 - gc[1]*gc[1])*(1.0 - gc[0])*(1.0 - gc[2]);
3013 funValue[16] = 0.25*(1.0 - gc[2]*gc[2])*(1.0 - gc[0])*(1.0 - gc[1]);
3014 funValue[19] = 0.25*(1.0 - gc[2]*gc[2])*(1.0 + gc[0])*(1.0 - gc[1]);
3015 funValue[18] = 0.25*(1.0 - gc[2]*gc[2])*(1.0 + gc[0])*(1.0 + gc[1]);
3016 funValue[17] = 0.25*(1.0 - gc[2]*gc[2])*(1.0 - gc[0])*(1.0 + gc[1]);
3017 funValue[15] = 0.25*(1.0 - gc[0]*gc[0])*(1.0 - gc[1])*(1.0 + gc[2]);
3018 funValue[14] = 0.25*(1.0 - gc[1]*gc[1])*(1.0 + gc[0])*(1.0 + gc[2]);
3019 funValue[13] = 0.25*(1.0 - gc[0]*gc[0])*(1.0 + gc[1])*(1.0 + gc[2]);
3020 funValue[12] = 0.25*(1.0 - gc[1]*gc[1])*(1.0 - gc[0])*(1.0 + gc[2]);
3021 SHAPE_FUN_MACRO_END;
3024 void GaussInfo::hexa27aInit()
3026 LOCAL_COORD_MACRO_BEGIN;
3028 coords[0] = HEXA27A_REF[0];
3029 coords[1] = HEXA27A_REF[1];
3030 coords[2] = HEXA27A_REF[2];
3033 coords[0] = HEXA27A_REF[3];
3034 coords[1] = HEXA27A_REF[4];
3035 coords[2] = HEXA27A_REF[5];
3038 coords[0] = HEXA27A_REF[6];
3039 coords[1] = HEXA27A_REF[7];
3040 coords[2] = HEXA27A_REF[8];
3043 coords[0] = HEXA27A_REF[9];
3044 coords[1] = HEXA27A_REF[10];
3045 coords[2] = HEXA27A_REF[11];
3048 coords[0] = HEXA27A_REF[12];
3049 coords[1] = HEXA27A_REF[13];
3050 coords[2] = HEXA27A_REF[14];
3053 coords[0] = HEXA27A_REF[15];
3054 coords[1] = HEXA27A_REF[16];
3055 coords[2] = HEXA27A_REF[17];
3058 coords[0] = HEXA27A_REF[18];
3059 coords[1] = HEXA27A_REF[19];
3060 coords[2] = HEXA27A_REF[20];
3063 coords[0] = HEXA27A_REF[21];
3064 coords[1] = HEXA27A_REF[22];
3065 coords[2] = HEXA27A_REF[23];
3068 coords[0] = HEXA27A_REF[24];
3069 coords[1] = HEXA27A_REF[25];
3070 coords[2] = HEXA27A_REF[26];
3073 coords[0] = HEXA27A_REF[27];
3074 coords[1] = HEXA27A_REF[28];
3075 coords[2] = HEXA27A_REF[29];
3078 coords[0] = HEXA27A_REF[30];
3079 coords[1] = HEXA27A_REF[31];
3080 coords[2] = HEXA27A_REF[32];
3083 coords[0] = HEXA27A_REF[33];
3084 coords[1] = HEXA27A_REF[34];
3085 coords[2] = HEXA27A_REF[35];
3088 coords[0] = HEXA27A_REF[36];
3089 coords[1] = HEXA27A_REF[37];
3090 coords[2] = HEXA27A_REF[38];
3093 coords[0] = HEXA27A_REF[39];
3094 coords[1] = HEXA27A_REF[40];
3095 coords[2] = HEXA27A_REF[41];
3098 coords[0] = HEXA27A_REF[42];
3099 coords[1] = HEXA27A_REF[43];
3100 coords[2] = HEXA27A_REF[44];
3103 coords[0] = HEXA27A_REF[45];
3104 coords[1] = HEXA27A_REF[46];
3105 coords[2] = HEXA27A_REF[47];
3108 coords[0] = HEXA27A_REF[48];
3109 coords[1] = HEXA27A_REF[49];
3110 coords[2] = HEXA27A_REF[50];
3113 coords[0] = HEXA27A_REF[51];
3114 coords[1] = HEXA27A_REF[52];
3115 coords[2] = HEXA27A_REF[53];
3118 coords[0] = HEXA27A_REF[54];
3119 coords[1] = HEXA27A_REF[55];
3120 coords[2] = HEXA27A_REF[56];
3123 coords[0] = HEXA27A_REF[57];
3124 coords[1] = HEXA27A_REF[58];
3125 coords[2] = HEXA27A_REF[59];
3128 coords[0] = HEXA27A_REF[60];
3129 coords[1] = HEXA27A_REF[61];
3130 coords[2] = HEXA27A_REF[62];
3133 coords[0] = HEXA27A_REF[63];
3134 coords[1] = HEXA27A_REF[64];
3135 coords[2] = HEXA27A_REF[65];
3138 coords[0] = HEXA27A_REF[66];
3139 coords[1] = HEXA27A_REF[67];
3140 coords[2] = HEXA27A_REF[68];
3143 coords[0] = HEXA27A_REF[69];
3144 coords[1] = HEXA27A_REF[70];
3145 coords[2] = HEXA27A_REF[71];
3148 coords[0] = HEXA27A_REF[72];
3149 coords[1] = HEXA27A_REF[73];
3150 coords[2] = HEXA27A_REF[74];
3153 coords[0] = HEXA27A_REF[75];
3154 coords[1] = HEXA27A_REF[76];
3155 coords[2] = HEXA27A_REF[77];
3158 coords[0] = HEXA27A_REF[78];
3159 coords[1] = HEXA27A_REF[79];
3160 coords[2] = HEXA27A_REF[80];
3162 LOCAL_COORD_MACRO_END;
3164 SHAPE_FUN_MACRO_BEGIN;
3166 funValue[0] =0.125*gc[0]*(gc[0]-1.)*gc[1]*(gc[1]-1.)*gc[2]*(gc[2]-1.);
3167 funValue[1] =0.125*gc[0]*(gc[0]-1.)*gc[1]*(gc[1]+1.)*gc[2]*(gc[2]-1.);
3168 funValue[2] =0.125*gc[0]*(gc[0]+1.)*gc[1]*(gc[1]+1.)*gc[2]*(gc[2]-1.);
3169 funValue[3] =0.125*gc[0]*(gc[0]+1.)*gc[1]*(gc[1]-1.)*gc[2]*(gc[2]-1.);
3170 funValue[4] =0.125*gc[0]*(gc[0]-1.)*gc[1]*(gc[1]-1.)*gc[2]*(gc[2]+1.);
3171 funValue[5] =0.125*gc[0]*(gc[0]-1.)*gc[1]*(gc[1]+1.)*gc[2]*(gc[2]+1.);
3172 funValue[6] =0.125*gc[0]*(gc[0]+1.)*gc[1]*(gc[1]+1.)*gc[2]*(gc[2]+1.);
3173 funValue[7] =0.125*gc[0]*(gc[0]+1.)*gc[1]*(gc[1]-1.)*gc[2]*(gc[2]+1.);
3174 funValue[8] =0.25*gc[0]*(gc[0]-1.)*(1.-gc[1]*gc[1])*gc[2]*(gc[2]-1.);
3175 funValue[9] =0.25*(1.-gc[0]*gc[0])*gc[1]*(gc[1]+1.)*gc[2]*(gc[2]-1.);
3176 funValue[10]=0.25*gc[0]*(gc[0]+1.)*(1.-gc[1]*gc[1])*gc[2]*(gc[2]-1.);
3177 funValue[11]=0.25*(1.-gc[0]*gc[0])*gc[1]*(gc[1]-1.)*gc[2]*(gc[2]-1.);
3178 funValue[12]=0.25*gc[0]*(gc[0]-1.)*(1.-gc[1]*gc[1])*gc[2]*(gc[2]+1.);
3179 funValue[13]=0.25*(1.-gc[0]*gc[0])*gc[1]*(gc[1]+1.)*gc[2]*(gc[2]+1.);
3180 funValue[14]=0.25*gc[0]*(gc[0]+1.)*(1.-gc[1]*gc[1])*gc[2]*(gc[2]+1.);
3181 funValue[15]=0.25*(1.-gc[0]*gc[0])*gc[1]*(gc[1]-1.)*gc[2]*(gc[2]+1.);
3182 funValue[16]=0.25*gc[0]*(gc[0]-1.)*gc[1]*(gc[1]-1.)*(1.-gc[2]*gc[2]);
3183 funValue[17]=0.25*gc[0]*(gc[0]-1.)*gc[1]*(gc[1]+1.)*(1.-gc[2]*gc[2]);
3184 funValue[18]=0.25*gc[0]*(gc[0]+1.)*gc[1]*(gc[1]+1.)*(1.-gc[2]*gc[2]);
3185 funValue[19]=0.25*gc[0]*(gc[0]+1.)*gc[1]*(gc[1]-1.)*(1.-gc[2]*gc[2]);
3186 funValue[20]=0.5*(1.-gc[0]*gc[0])*(1.-gc[1]*gc[1])*gc[2]*(gc[2]-1.);
3187 funValue[21]=0.5*gc[0]*(gc[0]-1.)*(1.-gc[1]*gc[1])*(1.-gc[2]*gc[2]);
3188 funValue[22]=0.5*(1.-gc[0]*gc[0])*gc[1]*(gc[1]+1.)*(1.-gc[2]*gc[2]);
3189 funValue[23]=0.5*gc[0]*(gc[0]+1.)*(1.-gc[1]*gc[1])*(1.-gc[2]*gc[2]);
3190 funValue[24]=0.5*(1.-gc[0]*gc[0])*gc[1]*(gc[1]-1.)*(1.-gc[2]*gc[2]);
3191 funValue[25]=0.5*(1.-gc[0]*gc[0])*(1.-gc[1]*gc[1])*gc[2]*(gc[2]+1.);
3192 funValue[26]=(1.-gc[0]*gc[0])*(1.-gc[1]*gc[1])*(1.-gc[2]*gc[2]);
3194 SHAPE_FUN_MACRO_END;
3197 ////////////////////////////////////////////////////////////////////////////////////////////////
3198 // GAUSS COORD CLASS //
3199 ////////////////////////////////////////////////////////////////////////////////////////////////
3203 GaussCoords::GaussCoords()
3210 GaussCoords::~GaussCoords()
3212 GaussInfoVector::iterator it = _my_gauss_info.begin();
3213 for( ; it != _my_gauss_info.end(); it++ )
3221 * Add Gauss localization info
3223 void GaussCoords::addGaussInfo( NormalizedCellType theGeometry,
3225 const double* theGaussCoord,
3226 mcIdType theNbGauss,
3227 const double* theReferenceCoord,
3230 GaussInfoVector::iterator it = _my_gauss_info.begin();
3231 for( ; it != _my_gauss_info.end(); it++ )
3233 if( (*it)->getCellType() == theGeometry )
3239 DataVector aGaussCoord;
3240 for(int i = 0 ; i < theNbGauss*coordDim; i++ )
3241 aGaussCoord.push_back(theGaussCoord[i]);
3243 DataVector aReferenceCoord;
3244 for(int i = 0 ; i < theNbRef*coordDim; i++ )
3245 aReferenceCoord.push_back(theReferenceCoord[i]);
3248 GaussInfo* info = new GaussInfo( theGeometry, aGaussCoord, FromIdType<int>(theNbGauss), aReferenceCoord, FromIdType<int>(theNbRef));
3249 info->initLocalInfo();
3251 //If info with cell type doesn't exist add it
3252 if( it == _my_gauss_info.end() )
3254 _my_gauss_info.push_back(info);
3256 // If information exists, update it
3260 std::size_t index = std::distance(_my_gauss_info.begin(),it);
3262 _my_gauss_info[index] = info;
3268 * Calculate gauss points coordinates
3270 double* GaussCoords::calculateCoords( NormalizedCellType theGeometry,
3271 const double *theNodeCoords,
3272 const int theSpaceDim,
3273 const mcIdType *theIndex)
3275 const GaussInfo *info = getInfoGivenCellType(theGeometry);
3276 int nbCoords = theSpaceDim * info->getNbGauss();
3277 double *aCoords = new double[nbCoords];
3278 calculateCoordsAlg(info,theNodeCoords,theSpaceDim,theIndex,aCoords);
3283 void GaussCoords::calculateCoords( NormalizedCellType theGeometry, const double *theNodeCoords, const int theSpaceDim, const mcIdType *theIndex, double *result)
3285 const GaussInfo *info = getInfoGivenCellType(theGeometry);
3286 calculateCoordsAlg(info,theNodeCoords,theSpaceDim,theIndex,result);
3289 void GaussCoords::calculateCoordsAlg(const GaussInfo *info, const double* theNodeCoords, const int theSpaceDim, const mcIdType *theIndex, double *result)
3291 int aConn = info->getNbRef();
3293 int nbCoords = theSpaceDim * info->getNbGauss();
3294 std::fill(result,result+nbCoords,0.);
3296 for( int gaussId = 0; gaussId < info->getNbGauss(); gaussId++ )
3298 double *coord=result+gaussId*theSpaceDim;
3299 const double *function=info->getFunctionValues(gaussId);
3300 for ( int connId = 0; connId < aConn ; connId++ )
3302 const double* nodeCoord = theNodeCoords + (theIndex[connId]*theSpaceDim);
3303 for( int dimId = 0; dimId < theSpaceDim; dimId++ )
3304 coord[dimId] += nodeCoord[dimId]*function[connId];
3309 const GaussInfo *GaussCoords::getInfoGivenCellType(NormalizedCellType cellType)
3311 GaussInfoVector::const_iterator it = _my_gauss_info.begin();
3312 //Try to find gauss localization info
3313 for( ; it != _my_gauss_info.end() ; it++ )
3314 if( (*it)->getCellType()==cellType)
3316 throw INTERP_KERNEL::Exception("Can't find gauss localization information !");