]> SALOME platform Git repositories - tools/medcoupling.git/commitdiff
Salome HOME
WIP
authorAnthony Geay <anthony.geay@edf.fr>
Tue, 10 Mar 2020 21:14:27 +0000 (22:14 +0100)
committerAnthony Geay <anthony.geay@edf.fr>
Tue, 10 Mar 2020 21:14:27 +0000 (22:14 +0100)
src/ParaMEDMEM/CommInterface.hxx

index 32ff28dde61f3155ec240d9cddc01e0063a2f6bc..9d96cde93e15658800dc66a46b8707f9f6164c16 100644 (file)
@@ -20,6 +20,7 @@
 #pragma once
 
 #include "ParaIdType.hxx"
+#include "MEDCouplingMemArray.hxx"
 
 #include <mpi.h>
 
@@ -93,6 +94,25 @@ namespace MEDCoupling
                MPI_Op op, int root, MPI_Comm comm) const { return MPI_Reduce(sendbuf, recvbuf, count, datatype, op, root, comm); }
     int allReduce(void* sendbuf, void* recvbuf, int count, MPI_Datatype datatype, MPI_Op op, MPI_Comm comm) const { return MPI_Allreduce(sendbuf, recvbuf, count, datatype, op, comm); }
   public:
+
+    /*!
+    * \a counts is expected to be an array of array length. This method returns an array of split array.
+    */
+    static std::unique_ptr<mcIdType[]> SplitArrayOfLength(const std::unique_ptr<mcIdType[]>& counts, std::size_t countsSz, int rk, int size)
+    {
+      std::unique_ptr<mcIdType[]> ret(new mcIdType[countsSz]);
+      for(std::size_t i=0;i<countsSz;++i)
+      {
+        mcIdType a,b;
+        DataArray::GetSlice(0,counts[i],1,rk,size,a,b);
+        ret[i] = b-a;
+      }
+      return ret;
+    }
+
+    /*!
+    * Helper of alltoallv and allgatherv
+    */
     template<class T>
     static std::unique_ptr<int []> ToIntArray(const std::unique_ptr<T []>& arr, std::size_t size)
     {
@@ -100,6 +120,10 @@ namespace MEDCoupling
       std::copy(arr.get(),arr.get()+size,ret.get());
       return ret;
     }
+    
+    /*!
+    * Helper of alltoallv and allgatherv
+    */
     static std::unique_ptr<int []> ComputeOffset(const std::unique_ptr<int []>& counts, std::size_t sizeOfCounts)
     {
       std::unique_ptr<int []> ret(new int[sizeOfCounts]);