]> SALOME platform Git repositories - tools/medcoupling.git/commitdiff
Salome HOME
Bug correction of DataArrayDouble::computeTupleIdsNearTuples and MEDCouplingPointSet...
authorageay <ageay>
Fri, 12 Apr 2013 10:09:43 +0000 (10:09 +0000)
committerageay <ageay>
Fri, 12 Apr 2013 10:09:43 +0000 (10:09 +0000)
src/INTERP_KERNEL/BBTreePts.txx
src/MEDCoupling/MEDCouplingMemArray.cxx
src/MEDCoupling/MEDCouplingMemArray.hxx
src/MEDCoupling/MEDCouplingPointSet.cxx
src/MEDCoupling_Swig/MEDCouplingExamplesTest.py

index e6eb029f1de27627b00cf9f4480f69f0d9ba39e1..fdb1e2ae67edebf0ffa6f0b6aa7ceb850b296fc5 100644 (file)
@@ -188,8 +188,7 @@ public:
             const double* const bb_ptr=_pts+_elems[i]*dim;
             bool intersects = true;
             for(int idim=0;idim<dim;idim++)
-              if(std::abs(bb_ptr[idim]-xx[idim])>_epsilon)
-                intersects=false;
+              intersects=intersects && (std::abs(bb_ptr[idim]-xx[idim])<=_epsilon);
             if(intersects)
               elems.push_back(_elems[i]);
           }
index 9ad55aaefb3655fa1742396278adfe0ec00d6575..48f5750b1321a64a67536c094c07e9aad0b73d5d 100644 (file)
@@ -69,7 +69,7 @@ void DataArrayDouble::findCommonTuplesAlg(const double *bbox, int nbNodes, int l
 }
 
 template<int SPACEDIM>
-void DataArrayDouble::FindTupleIdsNearTuplesAlg(const BBTree<SPACEDIM,int>& myTree, const double *pos, int nbOfTuples, double eps,
+void DataArrayDouble::FindTupleIdsNearTuplesAlg(const BBTreePts<SPACEDIM,int>& myTree, const double *pos, int nbOfTuples, double eps,
                                                 DataArrayInt *c, DataArrayInt *cI)
 {
   for(int i=0;i<nbOfTuples;i++)
@@ -2766,7 +2766,7 @@ DataArrayDouble *DataArrayDouble::computeBBoxPerTuple(double epsilon)const throw
  * Two tuples are considered equal if the euclidian distance between the two tuples is lower than \a eps.
  * 
  * \param [in] other a DataArrayDouble having same number of components than \a this.
- * \param [in] eps absolute precision representing euclidian distance between 2 tuples behind which 2 tuples are considered equal.
+ * \param [in] eps absolute precision representing distance (using infinite norm) between 2 tuples behind which 2 tuples are considered equal.
  * \param [out] c will contain the set of tuple ids in \a this that are equal to to the tuple ids in \a other contiguously.
  *             \a cI allows to extract information in \a c.
  * \param [out] cI is an indirection array that allows to extract the data contained in \a c.
@@ -2784,7 +2784,6 @@ void DataArrayDouble::computeTupleIdsNearTuples(const DataArrayDouble *other, do
   if(!other)
     throw INTERP_KERNEL::Exception("DataArrayDouble::computeTupleIdsNearTuples : input pointer other is null !");
   checkAllocated();
-  MEDCouplingAutoRefCountObjectPtr<DataArrayDouble> bbox=computeBBoxPerTuple(eps);
   other->checkAllocated();
   int nbOfCompo=getNumberOfComponents();
   int otherNbOfCompo=other->getNumberOfComponents();
@@ -2796,19 +2795,19 @@ void DataArrayDouble::computeTupleIdsNearTuples(const DataArrayDouble *other, do
     {
     case 3:
       {
-        BBTree<3,int> myTree(bbox->getConstPointer(),0,0,getNumberOfTuples(),eps/10);
+        BBTreePts<3,int> myTree(begin(),0,0,getNumberOfTuples(),eps);
         FindTupleIdsNearTuplesAlg<3>(myTree,other->getConstPointer(),nbOfTuplesOther,eps,cArr,cIArr);
         break;
       }
     case 2:
       {
-        BBTree<2,int> myTree(bbox->getConstPointer(),0,0,getNumberOfTuples(),eps/10);
+        BBTreePts<2,int> myTree(begin(),0,0,getNumberOfTuples(),eps);
         FindTupleIdsNearTuplesAlg<2>(myTree,other->getConstPointer(),nbOfTuplesOther,eps,cArr,cIArr);
         break;
       }
     case 1:
       {
-        BBTree<1,int> myTree(bbox->getConstPointer(),0,0,getNumberOfTuples(),eps/10);
+        BBTreePts<1,int> myTree(begin(),0,0,getNumberOfTuples(),eps);
         FindTupleIdsNearTuplesAlg<1>(myTree,other->getConstPointer(),nbOfTuplesOther,eps,cArr,cIArr);
         break;
       }
index 1ad1b6b1dcc5edf71a300c2a044bcd23fd09f709..70999714ee0c6c6eea323337db345b148b2801e2 100644 (file)
@@ -333,7 +333,7 @@ namespace ParaMEDMEM
     template<int SPACEDIM>
     static void FindClosestTupleIdAlg(const BBTreePts<SPACEDIM,int>& myTree, double dist, const double *pos, int nbOfTuples, const double *thisPt, int thisNbOfTuples, int *res);
     template<int SPACEDIM>
-    static void FindTupleIdsNearTuplesAlg(const BBTree<SPACEDIM,int>& myTree, const double *pos, int nbOfTuples, double eps,
+    static void FindTupleIdsNearTuplesAlg(const BBTreePts<SPACEDIM,int>& myTree, const double *pos, int nbOfTuples, double eps,
                                           DataArrayInt *c, DataArrayInt *cI);
   private:
     ~DataArrayDouble() { }
index 7cad8e079a4500e0791546e2e8ed9f006a886044..0e73b71d3bcea1f825c27407ee74075d6b976a8c 100644 (file)
@@ -303,7 +303,7 @@ void MEDCouplingPointSet::findCommonNodes(double prec, int limitNodeId, DataArra
  *  \param [in] pos - pointer to coordinates of the point.  This array is expected to
  *         be of length \a this->getSpaceDimension() at least, else the
  *         behavior is not warranted.
- *  \param [in] eps - the lowest distance between a point and a node at which the node is
+ *  \param [in] eps - the lowest distance between a point and a node (using infinite norm) at which the node is
  *          not returned by this method.
  *  \return DataArrayInt * - a new instance of DataArrayInt holding ids of nodes
  *          close to the point. The caller is to delete this
@@ -328,7 +328,7 @@ DataArrayInt *MEDCouplingPointSet::getNodeIdsNearPoint(const double *pos, double
  *         behavior is not warranted.
  *  \param [in] nbOfPoints - number of points whose coordinates are given by \a pos
  *         parameter. 
- *  \param [in] eps - the lowest distance between a point and a node at which the node is
+ *  \param [in] eps - the lowest distance between (using infinite norm) a point and a node at which the node is
  *         not returned by this method.
  *  \param [out] c - array returning ids of nodes located closer than \a eps to the
  *         given points. The caller
index 37c6f3776c9abb2d87812810444c5c60fbd67f1d..99d74dd6427a6e2129b70b9681df6adfca74fc2f 100644 (file)
@@ -989,7 +989,7 @@ class MEDCouplingBasicsTest(unittest.TestCase):
                 0.2,-0.3,   # 1
                 0.3,-0.302, # 2
                 1.1,0.0,    # 3
-                0.3,-0.303];# 4
+                0.3,-0.30299999999999];# 4
         coordsArr=DataArrayDouble.New();
         coordsArr.setValues(coords,5,2);
         mesh=MEDCouplingUMesh.New();
@@ -1023,7 +1023,7 @@ class MEDCouplingBasicsTest(unittest.TestCase):
                 1.1, 0.002]   # ~ nodes #3, #4 and #5
         ids,idsIndex=mesh.getNodeIdsNearPoints(points,3,0.003);
         assert ids.getValues() == [1, 3, 4, 5]
-        print idsIndex.getValues()
+        assert idsIndex.getValues() == [0, 1, 1, 4]
         #! [PySnippet_MEDCouplingPointSet_getNodeIdsNearPoints_2]
         return
 
@@ -1069,7 +1069,7 @@ class MEDCouplingBasicsTest(unittest.TestCase):
         dv.alloc( 6, 1 )
         dv.iota(7)
         dv.rearrange( 2 )
-        print dv.getTuple( 1 )
+        assert dv.getTuple( 1 ) == [9,10]
 #! [Snippet_DataArrayInt_getTuple_1]
 #! [Snippet_DataArrayInt_getTuple_2]
         for tpl in dv: