X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FINTERP_KERNEL%2FGaussPoints%2FInterpKernelGaussCoords.hxx;h=5afdfa7d293c5a041447ca181a86673c6c050b95;hb=358dca4ed1ac7c3bee9d13cbec8d40fc38c4299f;hp=eba4aa21e3e39b8c5926caa82ac1c42e5178704d;hpb=79c404a024c4b00550400f158f89fcc64859e71d;p=tools%2Fmedcoupling.git diff --git a/src/INTERP_KERNEL/GaussPoints/InterpKernelGaussCoords.hxx b/src/INTERP_KERNEL/GaussPoints/InterpKernelGaussCoords.hxx index eba4aa21e..5afdfa7d2 100644 --- a/src/INTERP_KERNEL/GaussPoints/InterpKernelGaussCoords.hxx +++ b/src/INTERP_KERNEL/GaussPoints/InterpKernelGaussCoords.hxx @@ -1,9 +1,9 @@ -// Copyright (C) 2007-2013 CEA/DEN, EDF R&D +// Copyright (C) 2007-2022 CEA/DEN, EDF R&D // // This library is free software; you can redistribute it and/or // modify it under the terms of the GNU Lesser General Public // License as published by the Free Software Foundation; either -// version 2.1 of the License. +// version 2.1 of the License, or (at your option) any later version. // // This library is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of @@ -23,6 +23,7 @@ #include "INTERPKERNELDefines.hxx" #include "NormalizedUnstructuredMesh.hxx" #include "InterpKernelException.hxx" +#include "MCIdType.hxx" #include @@ -47,24 +48,65 @@ namespace INTERP_KERNEL INTERPKERNEL_EXPORT int getGaussCoordDim() const; INTERPKERNEL_EXPORT int getReferenceCoordDim() const; + INTERPKERNEL_EXPORT DataVector getGaussCoords() const { return _my_gauss_coord; } + INTERPKERNEL_EXPORT DataVector getRefCoords() const { return _my_reference_coord; } + INTERPKERNEL_EXPORT NormalizedCellType getGeoType() const { return _my_geometry; } INTERPKERNEL_EXPORT int getNbGauss() const; INTERPKERNEL_EXPORT int getNbRef() const; - INTERPKERNEL_EXPORT const double* getFunctionValues( const int theGaussId ) const; + INTERPKERNEL_EXPORT GaussInfo convertToLinear() const; + + INTERPKERNEL_EXPORT const double *getFunctionValues( const int theGaussId ) const; + INTERPKERNEL_EXPORT const double *getDerivativeOfShapeFunctionAt( const int theGaussId ) const; INTERPKERNEL_EXPORT void initLocalInfo(); INTERPKERNEL_EXPORT static std::vector NormalizeCoordinatesIfNecessary(NormalizedCellType ct, int inputDim, const std::vector& inputArray); - + INTERPKERNEL_EXPORT static std::vector GetDefaultReferenceCoordinatesOf(NormalizedCellType ct); + INTERPKERNEL_EXPORT static bool IsInOrOutForReference(NormalizedCellType ct, const double *ptInRefCoo, double eps); + public: + static const double SEG2A_REF[2]; + static const double SEG2B_REF[2]; + static const double SEG3_REF[3]; + static const double TRIA3A_REF[6]; + static const double TRIA3B_REF[6]; + static const double TRIA6A_REF[12]; + static const double TRIA6B_REF[12]; + static const double TRIA7A_REF[14]; + static const double QUAD4A_REF[8]; + static const double QUAD4B_REF[8]; + static const double QUAD8A_REF[16]; + static const double QUAD8B_REF[16]; + static const double QUAD9A_REF[18]; + static const double TETRA4A_REF[12]; + static const double TETRA4B_REF[12]; + static const double TETRA10A_REF[30]; + static const double TETRA10B_REF[30]; + static const double PYRA5A_REF[15]; + static const double PYRA5B_REF[15]; + static const double PYRA13A_REF[39]; + static const double PYRA13B_REF[39]; + static const double PENTA6A_REF[18]; + static const double PENTA6B_REF[18]; + static const double PENTA15A_REF[45]; + static const double PENTA15B_REF[45]; + static const double PENTA18A_REF[54]; + static const double PENTA18B_REF[54]; + static const double HEXA8A_REF[24]; + static const double HEXA8B_REF[24]; + static const double HEXA20A_REF[60]; + static const double HEXA20B_REF[60]; + static const double HEXA27A_REF[81]; protected: - + static bool IsSatisfy(const std::vector& ref1, const std::vector& ref2); bool isSatisfy(); void point1Init(); //1D - void seg2Init(); + void seg2aInit(); + void seg2bInit(); void seg3Init(); //2D @@ -110,6 +152,10 @@ namespace INTERP_KERNEL static void Penta15aInit(GaussInfo& obj) { obj.penta15aInit(); } void penta15bInit(); static void Penta15bInit(GaussInfo& obj) { obj.penta15bInit(); } + void penta18aInit(); + static void Penta18aInit(GaussInfo& obj) { obj.penta18aInit(); } + void penta18bInit(); + static void Penta18bInit(GaussInfo& obj) { obj.penta18bInit(); } void hexa8aInit(); static void Hexa8aInit(GaussInfo& obj) { obj.hexa8aInit(); } @@ -149,6 +195,7 @@ namespace INTERP_KERNEL int _my_local_nb_ref; //Nb of the local reference coordinates DataVector _my_function_value; //Shape Function values + DataVector _my_derivative_func_value; //Derivative of the shape function }; @@ -163,23 +210,23 @@ namespace INTERP_KERNEL INTERPKERNEL_EXPORT void addGaussInfo( NormalizedCellType theGeometry, int coordDim, const double* theGaussCoord, - int theNbGauss, + mcIdType theNbGauss, const double* theReferenceCoord, - int theNbRef); + mcIdType theNbRef); INTERPKERNEL_EXPORT double* calculateCoords( NormalizedCellType theGeometry, const double* theNodeCoords, const int theSpaceDim, - const int* theIndex); + const mcIdType* theIndex); INTERPKERNEL_EXPORT void calculateCoords( NormalizedCellType theGeometry, const double* theNodeCoords, const int theSpaceDim, - const int* theIndex, + const mcIdType* theIndex, double *result); private: const GaussInfo *getInfoGivenCellType(NormalizedCellType cellType); - void calculateCoordsAlg(const GaussInfo *info, const double* theNodeCoords, const int theSpaceDim, const int *theIndex, + void calculateCoordsAlg(const GaussInfo *info, const double* theNodeCoords, const int theSpaceDim, const mcIdType *theIndex, double *result); private: typedef std::vector GaussInfoVector;