#include "BoundingBox.hxx"
+#include <cstdint>
+
namespace INTERP_KERNEL
{
ConnType getIndex() const { return _index; }
- unsigned char getNumberOfNodes() const { return _number; }
+ std::uint16_t getNumberOfNodes() const { return _number; }
const BoundingBox* getBoundingBox() const { return _box; }
/// global number of the element
const ConnType _index;
- const unsigned char _number;
+ const std::uint16_t _number;
/// bounding box of the element - does not change after having been initialised
BoundingBox* _box;
template<class ConnType>
template<class MyMeshType>
MeshElement<ConnType>::MeshElement(const ConnType index, const MyMeshType& mesh)
- : _index(index), _number((unsigned char)mesh.getNumberOfNodesOfElement(OTT<typename MyMeshType::MyConnType,MyMeshType::My_numPol>::indFC(index))), _box(0)
+ : _index(index), _number( static_cast<std::uint16_t>(mesh.getNumberOfNodesOfElement(OTT<typename MyMeshType::MyConnType,MyMeshType::My_numPol>::indFC(index))) ), _box(nullptr)
{
const double**vertices = new const double*[_number];
- for(unsigned char i = 0 ; i < _number ; ++i)
+ for(std::uint16_t i = 0 ; i < _number ; ++i)
vertices[i] = getCoordsOfNode(i , OTT<typename MyMeshType::MyConnType,MyMeshType::My_numPol>::indFC(index), mesh);
// create bounding box
f.setArray(DataArrayDouble(18*[0.]))
self.assertTrue(f.getLocalizationOfDiscr().isEqual(coo[conn],1e-10))
+ def testBugWithPolyhedInterpWithMoreThan255Nodes(self):
+ """
+ [EDF25207] : Check interpolation containing polyhedron with more than 255 nodes is OK at bbox computation stage
+ """
+ n = 8
+ arr = DataArrayDouble(n) ; arr.iota()
+ m = MEDCouplingCMesh()
+ m.setCoords(arr,arr,arr)
+ m = m.buildUnstructured()
+ skin = m.computeSkin()
+ skin.zipCoords()
+ # check that skin contains more than 2**8-1 node to reveal bug
+ self.assertTrue(skin.getNumberOfNodes()>255)
+ # Build a single polyhedron cell from skin
+ skin1 = MEDCoupling1SGTUMesh(skin)
+ conn = skin1.getNodalConnectivity()
+ conn.rearrange( MEDCouplingUMesh.GetNumberOfNodesOfGeometricType(skin1.getCellModelEnum()) )
+ connPolyhed = conn.changeNbOfComponents(MEDCouplingUMesh.GetNumberOfNodesOfGeometricType(skin1.getCellModelEnum())+1,-1)
+ connPolyhed.rearrange(1)
+ connPolyhed.popBackSilent()
+ meshSinglePolyhed = MEDCouplingUMesh("",3)
+ meshSinglePolyhed.allocateCells()
+ meshSinglePolyhed.insertNextCell(NORM_POLYHED,connPolyhed.getValues())
+ meshSinglePolyhed.setCoords( skin1.getCoords() )
+
+ rem = MEDCouplingRemapper()
+ rem.prepare(meshSinglePolyhed,m,"P0P0")
+ res = rem.getCrudeMatrix()
+ self.assertTrue( all([len(elt)==1 for elt in res]) )
+ self.assertTrue( all([elt[0]>0.99 and elt[0]<1.01 for elt in res]) )
+
+
pass
if __name__ == '__main__':