]> SALOME platform Git repositories - tools/medcoupling.git/commitdiff
Salome HOME
[EDF26706] : Preparation to implementation
authorAnthony Geay <anthony.geay@edf.fr>
Thu, 17 Aug 2023 15:30:11 +0000 (17:30 +0200)
committerAnthony Geay <anthony.geay@edf.fr>
Thu, 17 Aug 2023 15:30:11 +0000 (17:30 +0200)
src/ParaMEDMEM/InterpKernelDEC.cxx
src/ParaMEDMEM/InterpKernelDEC.hxx
src/ParaMEDMEM/InterpolationMatrix.hxx
src/ParaMEDMEM/MPIProcessorGroup.cxx

index 18cf01e7c7bab4cc71791b33edb24097a2b18dbf..d786641ee43d77323725e23e5e0c6e1013a54918 100644 (file)
 #include "MPIProcessorGroup.hxx"
 #include "ParaMESH.hxx"
 #include "DEC.hxx"
-#include "InterpolationMatrix.hxx"
 #include "InterpKernelDEC.hxx"
 #include "ElementLocator.hxx"
 
 namespace MEDCoupling
 {
-  InterpKernelDEC::InterpKernelDEC():
-    DisjointDEC(),
-    _interpolation_matrix(0)
+  InterpKernelDEC::InterpKernelDEC():_interpolation_matrix(nullptr)
   {  
   }
 
@@ -50,8 +47,7 @@ namespace MEDCoupling
 
   */
   InterpKernelDEC::InterpKernelDEC(ProcessorGroup& source_group, ProcessorGroup& target_group):
-    DisjointDEC(source_group, target_group),
-    _interpolation_matrix(0)
+    DisjointDEC(source_group, target_group)
   {
 
   }
@@ -64,8 +60,7 @@ namespace MEDCoupling
    */
   InterpKernelDEC::InterpKernelDEC(const std::set<int>& src_ids, const std::set<int>& trg_ids,
                                    const MPI_Comm& world_comm):
-    DisjointDEC(src_ids,trg_ids,world_comm),
-    _interpolation_matrix(0)
+    DisjointDEC(src_ids,trg_ids,world_comm)
   {
   }
 
@@ -76,9 +71,7 @@ namespace MEDCoupling
 
   void InterpKernelDEC::release()
   {
-    if (_interpolation_matrix != nullptr)
-      delete _interpolation_matrix;
-    _interpolation_matrix = nullptr;
+    _interpolation_matrix.reset(nullptr);
     DisjointDEC::cleanInstance();
   }
 
@@ -100,8 +93,7 @@ namespace MEDCoupling
   {
     if(!isInUnion())
       return ;
-    delete _interpolation_matrix;
-    _interpolation_matrix = new InterpolationMatrix (_local_field, *_source_group,*_target_group,*this,*this); 
+    _interpolation_matrix.reset( new InterpolationMatrix (_local_field, *_source_group,*_target_group,*this,*this) ); 
 
     //setting up the communication DEC on both sides  
     if (_source_group->containsMyRank())
index eaa87526efd6ad5022dcbac80ca587e729d09922..e18169f6b8ac0352c609bf14e038dc52eb8cbae6 100644 (file)
 #include "DisjointDEC.hxx"
 #include "MxN_Mapping.hxx"
 #include "InterpolationOptions.hxx"
+#include "InterpolationMatrix.hxx"
+
+#include <memory>
 
 namespace MEDCoupling
 {
-  class InterpolationMatrix;
-
   /*!
     \anchor InterpKernelDEC-det
     \class InterpKernelDEC
@@ -131,6 +132,8 @@ namespace MEDCoupling
     InterpKernelDEC();
     InterpKernelDEC(ProcessorGroup& source_group, ProcessorGroup& target_group);
     InterpKernelDEC(const std::set<int>& src_ids, const std::set<int>& trg_ids, const MPI_Comm& world_comm=MPI_COMM_WORLD);
+    InterpKernelDEC(InterpKernelDEC&& other) = default;
+    InterpKernelDEC& operator=(InterpKernelDEC&& other) = default;
     virtual ~InterpKernelDEC();
     void release();
 
@@ -147,7 +150,7 @@ namespace MEDCoupling
     MCAuto<DataArrayIdType> retrieveNonFetchedIdsSource() const;
     MCAuto<DataArrayIdType> retrieveNonFetchedIdsTarget() const;
   private:
-    InterpolationMatrix* _interpolation_matrix;
+    std::unique_ptr<InterpolationMatrix> _interpolation_matrix;
   };
 }
 
index a25cbe7c9c4550da1c89cb73bd177b0cdadb7f70..c631727a857c9e755cc80a053c9d29335d09f150 100644 (file)
@@ -28,6 +28,7 @@
 namespace MEDCoupling
 {
   class ElementLocator;
+  class MEDCouplingPointSet;
 
   /*!
    Internal class, not part of the public API.
index 70d14565b29a542e164cee1611b151eec404de54..4c33fb0976683a1a93eed8f7cdfdc5f614556407 100644 (file)
@@ -25,6 +25,7 @@
 #include <iostream>
 #include <set>
 #include <algorithm>
+#include <memory>
 #include "mpi.h"
 
 using namespace std;
@@ -73,7 +74,6 @@ namespace MEDCoupling
     _comm_interface.commSize(_world_comm,&size);
     for (int i=0; i<size; i++)
       _proc_ids.insert(i);
-
   }
 
   /*! Creates a processor group that is based on the processors included in \a proc_ids.
@@ -103,24 +103,22 @@ namespace MEDCoupling
     _comm_interface.commRank(_world_comm,&rank_world);
     _comm_interface.commGroup(_world_comm, &group_world);
 
-    int* ranks=new int[_proc_ids.size()];
+    std::unique_ptr<int[]> ranks( new int[_proc_ids.size()] );
    
     // copying proc_ids in ranks
-    copy<set<int>::const_iterator,int*> (_proc_ids.begin(), _proc_ids.end(), ranks);
+    copy<set<int>::const_iterator,int*> (_proc_ids.begin(), _proc_ids.end(), ranks.get());
     for (int i=0; i< (int)_proc_ids.size();i++)
       if (ranks[i]>size_world-1)
         {
-          delete[] ranks;
           _comm_interface.groupFree(&group_world);  // MPI_Group is a C structure and won't get de-allocated automatically?
           throw INTERP_KERNEL::Exception("invalid rank in set<int> argument of MPIProcessorGroup constructor");
         }
       
-    _comm_interface.groupIncl(group_world, (int)_proc_ids.size(), ranks, &_group);
+    _comm_interface.groupIncl(group_world, (int)_proc_ids.size(), ranks.get(), &_group);
   
     _comm_interface.commCreate(_world_comm, _group, &_comm);
 
     // clean-up
-    delete[] ranks;
     _comm_interface.groupFree(&group_world);  // MPI_Group is a C structure and won't get de-allocated automatically?
   }