]> SALOME platform Git repositories - tools/medcoupling.git/commitdiff
Salome HOME
[EDF25207] integrate the commit ee33c67ce54b04a in V9_6_BR origin/V9_6_BR_patch_ee33c67ce54b04a
authorDUC ANH HOANG <duc-anh-externe.hoang@edf.fr>
Wed, 20 Apr 2022 08:13:12 +0000 (10:13 +0200)
committerDUC ANH HOANG <duc-anh-externe.hoang@edf.fr>
Wed, 20 Apr 2022 08:13:12 +0000 (10:13 +0200)
src/INTERP_KERNEL/MeshElement.hxx
src/INTERP_KERNEL/MeshElement.txx
src/MEDCoupling_Swig/MEDCouplingBasicsTest7.py

index 9c2ca842a077ca6e14141437bc1587de59cb0803..990f9b9ef4efb455f830fce1fad0161ce8a104d8 100644 (file)
@@ -22,6 +22,8 @@
 
 #include "BoundingBox.hxx"
 
+#include <cstdint>
+
 namespace INTERP_KERNEL
 {
 
@@ -42,7 +44,7 @@ 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; }
 
@@ -56,7 +58,7 @@ namespace INTERP_KERNEL
     /// 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;
index d6ed35ac44473cb064df2efb150e2b966560f89d..0a350c11d88fce8a593faca80f21779d9021c5f7 100755 (executable)
@@ -39,11 +39,11 @@ namespace INTERP_KERNEL
   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
index 3e480e24b80036868bde0a1332f034d5976b3aed..bd15a86452097a3ccb651b15e3658e5a1c766d3d 100644 (file)
@@ -897,6 +897,38 @@ class MEDCouplingBasicsTest7(unittest.TestCase):
         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__':