]> SALOME platform Git repositories - tools/medcoupling.git/commitdiff
Salome HOME
0020873: [CEA] Failure with ParaMedMem BR_WIN_INDUS_514 V5_1_4_BR V5_1_4 V5_1_4_patch01 V5_1_4_patch02 V5_1_4_patch03 V5_1_4rc2 V5_1_4rc3
authoreap <eap@opencascade.com>
Thu, 20 May 2010 11:48:16 +0000 (11:48 +0000)
committereap <eap@opencascade.com>
Thu, 20 May 2010 11:48:16 +0000 (11:48 +0000)
   * Correct work of an empty box

src/INTERP_KERNEL/DirectedBoundingBox.cxx
src/ParaMEDMEM/ElementLocator.cxx

index 9c275da707726c3ad4ed2e4594a9311076fbec67..72b5c51016b38f4a15e85c6ca3f941a1d2b3bca9 100644 (file)
@@ -202,7 +202,7 @@ namespace INTERP_KERNEL
    */
   //================================================================================
 
-  DirectedBoundingBox::DirectedBoundingBox():_dim(-1)
+  DirectedBoundingBox::DirectedBoundingBox():_dim(0)
   {
   }
 
@@ -594,6 +594,8 @@ namespace INTERP_KERNEL
 
   bool DirectedBoundingBox::isDisjointWith(const DirectedBoundingBox& box) const
   {
+    if ( _dim < 1 || box._dim < 1 ) return false; // empty box includes all
+
     // boxes are disjoined if their minmaxes in local CS of either of boxes do not intersect
     for ( int isThisCS = 0; isThisCS < 2; ++isThisCS )
       {
@@ -629,6 +631,8 @@ namespace INTERP_KERNEL
 
   bool DirectedBoundingBox::isDisjointWith(const double* box) const
   {
+    if ( _dim < 1 ) return false; // empty box includes all
+
     // boxes are disjoined if their minmaxes in local CS of either of boxes do not intersect
 
     // compare minmaxes in locals CS of this directed box
@@ -673,6 +677,8 @@ namespace INTERP_KERNEL
 
   bool DirectedBoundingBox::isOut(const double* point) const
   {
+    if ( _dim < 1 ) return false; // empty box includes all
+
     double pLoc[3];
     toLocalCS( point, pLoc );
     bool out = isLocalOut( pLoc );
@@ -699,8 +705,11 @@ namespace INTERP_KERNEL
   vector<double> DirectedBoundingBox::getData() const
   {
     vector<double> data(1, _dim);
-    data.insert( data.end(), &_axes[0], &_axes[0] + _axes.size());
-    data.insert( data.end(), &_minmax[0], &_minmax[0] + _minmax.size());
+    if ( _dim > 0 )
+    {
+      data.insert( data.end(), &_axes[0], &_axes[0] + _axes.size());
+      data.insert( data.end(), &_minmax[0], &_minmax[0] + _minmax.size());
+    }
     if ( data.size() < dataSize( _dim ))
       data.resize( dataSize( _dim ), 0 );
     return data;
index 1ae99850cf92378f1af9c1617445cc631e414d36..e694c4e1dde10a72f455e5c44f57f3f3bdf90a72 100644 (file)
@@ -157,6 +157,7 @@ namespace ParaMEDMEM
                                                _local_cell_mesh->getNumberOfNodes(),
                                                _local_cell_mesh_space_dim);
     std::vector<double> dbbData = dbb.getData();
+    if ( dbbData.size() < bbSize ) dbbData.resize(bbSize,0);
     double * minmax= &dbbData[0];
 #else
     int bbSize = 2*_local_cell_mesh_space_dim;
@@ -185,7 +186,10 @@ namespace ParaMEDMEM
             _distant_proc_ids.push_back(rank);
           }
       }
+#ifdef USE_DIRECTED_BB
+#else
     delete [] minmax;
+#endif
   }