]> SALOME platform Git repositories - tools/medcoupling.git/commitdiff
Salome HOME
WIP
authorAnthony Geay <anthony.geay@edf.fr>
Sat, 18 Apr 2020 07:23:40 +0000 (09:23 +0200)
committerAnthony Geay <anthony.geay@edf.fr>
Sat, 18 Apr 2020 07:23:40 +0000 (09:23 +0200)
src/MEDCoupling/MCAuto.hxx
src/ParaMEDMEM/CommInterface.cxx
src/ParaMEDMEM/ParaSkyLineArray.cxx

index 1d47b7f67a28a11fe766560b5e9ead8c7acf9003..6ef2fab78f1a9b99c6987b0901451b92f4f8c7b3 100644 (file)
@@ -24,6 +24,7 @@
 #include "InterpKernelException.hxx"
 
 #include <vector>
+#include <algorithm>
 
 namespace MEDCoupling
 {
@@ -60,6 +61,16 @@ namespace MEDCoupling
     T *_ptr;
   };
 
+  template<class T>
+  std::vector<const T*> FromVecAutoToVecOfConst(const std::vector<MCAuto<T>>& inputVec)
+  {
+    std::size_t size(inputVec.size());
+    std::vector< const T *> ret(size);
+    typename std::vector< const T *>::iterator itArrays(ret.begin());
+    std::for_each(inputVec.begin(),inputVec.end(),[&itArrays](MCAuto<T> elt) { *itArrays++=elt; });
+    return ret;
+  }
+
   template<class T, class U>
   typename MEDCoupling::MCAuto<U> DynamicCast(typename MEDCoupling::MCAuto<T>& autoSubPtr) throw()
   {
index 96c85fd9e2542d3928fe76cf5a5efcd4147ee6dc..eaab8af024cdca0ab99f9c0a96d1190972745018 100644 (file)
@@ -86,11 +86,8 @@ namespace MEDCoupling
     this->commSize(comm,&size);
     if( arrays.size() != ToSizeT(size) )
       throw INTERP_KERNEL::Exception("AllToAllArrays : internal error ! Invalid size of input array.");
-    std::vector< const DataArrayIdType *> arraysBis(size);
-    {
-      std::vector< const DataArrayIdType *>::iterator itArraysBis(arraysBis.begin());
-      std::for_each(arrays.begin(),arrays.end(),[&itArraysBis](MCAuto<DataArrayIdType> elt) { *itArraysBis++=elt; });
-    }
+      
+    std::vector< const DataArrayIdType *> arraysBis(FromVecAutoToVecOfConst<DataArrayIdType>(arrays));
     std::unique_ptr<mcIdType[]> nbOfElems2(new mcIdType[size]),nbOfElems3(new mcIdType[size]);
     for(int curRk = 0 ; curRk < size ; ++curRk)
     {
index fc88c3807124243fc92f8f4c7cb9b58167f9d770..a7f0d22b9d9e6e099aeb11a351fb9a4ad9ebf784 100644 (file)
@@ -77,15 +77,22 @@ MCAuto<ParaSkyLineArray> ParaSkyLineArray::equiRedistribute(mcIdType nbOfEntitie
     }
   }
   // communication : 3 arrays are going to be all2allized : ids, SkyLine index and SyLine values
-  std::vector< MCAuto<DataArrayIdType> > myRkIdsCaptured, myRkSkIndex, myRkSkValues;
-  ci.allToAllArrays(comm,idsCaptured,myRkIdsCaptured);
+  MCAuto<DataArrayIdType> aggregatedIds,indices,values;
   {
+    std::vector< MCAuto<DataArrayIdType> > myRkIdsCaptured;
+    ci.allToAllArrays(comm,idsCaptured,myRkIdsCaptured);
+    aggregatedIds = DataArrayIdType::Aggregate(FromVecAutoToVecOfConst<DataArrayIdType>(myRkIdsCaptured));
+  }
+  {
+    std::vector< MCAuto<DataArrayIdType> > myRkSkIndex;
     std::vector< MCAuto<DataArrayIdType> > indexToBeSent(MEDCouplingSkyLineArray::RetrieveVecIndex(skToBeSent));
     ci.allToAllArrays(comm,indexToBeSent,myRkSkIndex);
+    indices = DataArrayIdType::AggregateIndexes(FromVecAutoToVecOfConst<DataArrayIdType>(myRkSkIndex));
   }
   {
+    std::vector< MCAuto<DataArrayIdType> > myRkSkValues;
     std::vector< MCAuto<DataArrayIdType> > valuesToBeSent(MEDCouplingSkyLineArray::RetrieveVecValues(skToBeSent));
     ci.allToAllArrays(comm,valuesToBeSent,myRkSkValues);
+    values = DataArrayIdType::Aggregate(FromVecAutoToVecOfConst<DataArrayIdType>(myRkSkValues));
   }
-  // assemble the 3 arrays myRkIdsCaptured, myRkSkIndex, myRkSkValues
 }
\ No newline at end of file