33 FieldArrayD<T,DESCRIPTOR,Platform::CPU_SISD,typename FUNCTOR::result_field>& resultD)
50 : _sLattice(sLattice),
51 _sampleD(sLattice.getLoadBalancer()),
54 names::Points{}, _sampleD),
55 _extractionPointD(points.size()),
56 _extractionResultD(points.size())
58 const auto& geometry = _sLattice.getCuboidDecomposition();
59 LoadBalancer<T>& load = _sLattice.getLoadBalancer();
61 for (
int iC=0; iC < geometry.size(); ++iC) {
62 _rankLocalPointsSize[iC] = 0;
65 for (std::size_t iG=0; iG < points.size(); ++iG) {
66 const auto& physR = points[iG];
67 _extractionPointD.setField(iG, physR);
68 if (
auto iC = geometry.getC(physR)) {
69 if (load.isLocal(*iC)) {
70 _rankLocalPoints.emplace_back(*iC, iG, physR);
71 _rankLocalPointsSize[*iC]++;
76 std::map<int,int> rankLocalPointsIndex;
77 for (
auto [iC, size] : _rankLocalPointsSize) {
78 if (load.isLocal(iC)) {
79 auto& block = _sampleD.getBlock(load.loc(iC));
80 block.resize({size,1,1});
81 rankLocalPointsIndex[iC] = 0;
85 for (
auto& [iC, iG, physR] : _rankLocalPoints) {
86 auto& block = _sampleD.getBlock(load.loc(iC));
87 auto iPoint = rankLocalPointsIndex[iC]++;
88 auto point = block.get(iPoint);
89 point.template setField<fields::PHYS_R>(physR);
101#ifdef PARALLEL_MODE_MPI
103 _extractionResultD.getSize());
105 updateExtractionResultD(localResultD);
107 for (
unsigned iD=0; iD < DESCRIPTOR::template size<typename FUNCTOR::result_field>(); ++iD) {
109 _extractionResultD[iD].data(),
110 _extractionResultD[iD].size(),
114 updateExtractionResultD(_extractionResultD);
void reduce(T &sendVal, T &recvVal, MPI_Op op, int root=0, MPI_Comm=MPI_COMM_WORLD)
Reduction operation toward one processor.