-// Copyright (C) 2007-2013 CEA/DEN, EDF R&D
+// Copyright (C) 2007-2016 CEA/DEN, EDF R&D
//
// This library is free software; you can redistribute it and/or
// modify it under the terms of the GNU Lesser General Public
// License as published by the Free Software Foundation; either
-// version 2.1 of the License.
+// version 2.1 of the License, or (at your option) any later version.
//
// This library is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
#include "ProcessorGroup.hxx"
#include "MPIProcessorGroup.hxx"
#include "MEDCouplingFieldDouble.hxx"
-#include "MEDCouplingAutoRefCountObjectPtr.hxx"
+#include "MCAuto.hxx"
#include "DirectedBoundingBox.hxx"
#include <map>
//#define USE_DIRECTED_BB
-namespace ParaMEDMEM
+namespace MEDCoupling
{
ElementLocator::ElementLocator(const ParaFIELD& sourceField,
const ProcessorGroup& distant_group,
return _local_para_field.getField()->getNature();
}
- // ==========================================================================
- // Procedure for exchanging mesh between a distant proc and a local processor
- // param idistantrank proc id on distant group
- // param distant_mesh on return , points to a local reconstruction of
- // the distant mesh
- // param distant_ids on return, contains a vector defining a correspondence
- // between the distant ids and the ids of the local reconstruction
- // ==========================================================================
+
+ /*! Procedure for exchanging a mesh between a distant proc and a local processor
+ \param idistantrank proc id on distant group
+ \param distant_mesh on return , points to a local reconstruction of
+ the distant mesh
+ \param distant_ids on return, contains a vector defining a correspondence
+ between the distant ids and the ids of the local reconstruction
+ */
void ElementLocator::exchangeMesh(int idistantrank,
MEDCouplingPointSet*& distant_mesh,
int*& distant_ids)
if (find(_distant_proc_ids.begin(), _distant_proc_ids.end(),rank)==_distant_proc_ids.end())
return;
- MEDCouplingAutoRefCountObjectPtr<DataArrayInt> elems;
+ MCAuto<DataArrayInt> elems;
#ifdef USE_DIRECTED_BB
INTERP_KERNEL::DirectedBoundingBox dbb;
double* distant_bb = _domain_bounding_boxes+rank*dbb.dataSize(_local_cell_mesh_space_dim);
}
- // ======================
- // Compute bounding boxes
- // ======================
+ /*!
+ Compute bounding boxes
+ */
void ElementLocator::_computeBoundingBoxes()
{
CommInterface comm_interface =_union_group->getCommInterface();
}
- // =============================================
- // Intersect Bounding Box (with a given "irank")
- // =============================================
+
+ /*!
+ * Intersect local bounding box with a given distant bounding box on "irank"
+ */
bool ElementLocator::_intersectsBoundingBox(int irank)
{
#ifdef USE_DIRECTED_BB
double* local_bb = _domain_bounding_boxes+_union_group->myRank()*2*_local_cell_mesh_space_dim;
double* distant_bb = _domain_bounding_boxes+irank*2*_local_cell_mesh_space_dim;
+ const double eps = 1e-12;
for (int idim=0; idim < _local_cell_mesh_space_dim; idim++)
{
- const double eps = 1e-12;
bool intersects = (distant_bb[idim*2]<local_bb[idim*2+1]+eps)
&& (local_bb[idim*2]<distant_bb[idim*2+1]+eps);
if (!intersects) return false;
#endif
}
- // ======================
- // Exchanging meshes data
- // ======================
+
+ /*!
+ * Exchange mesh data
+ */
void ElementLocator::_exchangeMesh( MEDCouplingPointSet* local_mesh,
MEDCouplingPointSet*& distant_mesh,
int iproc_distant,
distant_mesh->unserialization(tinyInfoDistantD,tinyInfoDistant,v1Distant,v2Distant,unusedTinyDistantSts);
//
distant_ids_recv=new int[tinyInfoDistant.back()];
- comm_interface.sendRecv((void *)distant_ids_send->getConstPointer(),tinyInfoLocal.back(), MPI_INT,
+ comm_interface.sendRecv(const_cast<void *>(reinterpret_cast<const void *>(distant_ids_send->getConstPointer())),tinyInfoLocal.back(), MPI_INT,
iprocdistant_in_union, 1113,
distant_ids_recv,tinyInfoDistant.back(), MPI_INT,
iprocdistant_in_union,1113,
const vector<double>& valued=partialSumRelToDistantIds[procId];
int lgth=eltIds.size();
comm.send(&lgth,1,MPI_INT,*iter,1114,*_comm);
- comm.send((void *)&eltIds[0],lgth,MPI_INT,*iter,1115,*_comm);
- comm.send((void *)&valued[0],lgth,MPI_DOUBLE,*iter,1116,*_comm);
+ comm.send(const_cast<void *>(reinterpret_cast<const void *>(&eltIds[0])),lgth,MPI_INT,*iter,1115,*_comm);
+ comm.send(const_cast<void *>(reinterpret_cast<const void *>(&valued[0])),lgth,MPI_DOUBLE,*iter,1116,*_comm);
}
}
const vector<int>& eltIds=distantLocEltIds[procId];
int lgth=eltIds.size();
comm.send(&lgth,1,MPI_INT,*iter,1121,*_comm);
- comm.send((void *)&eltIds[0],lgth,MPI_INT,*iter,1122,*_comm);
+ comm.send(const_cast<void *>(reinterpret_cast<const void *>(&eltIds[0])),lgth,MPI_INT,*iter,1122,*_comm);
}
}
for(vector<int>::const_iterator iter=_distant_proc_ids.begin();iter!=_distant_proc_ids.end();iter++,procId++)
{
comm.send(&lgth,1,MPI_INT,*iter,1124,*_comm);
- comm.send((void*)&distantGlobIds[0],lgth,MPI_INT,*iter,1125,*_comm);
- comm.send((void*)&sum[0],lgth,MPI_DOUBLE,*iter,1126,*_comm);
+ comm.send(const_cast<void *>(reinterpret_cast<const void *>(&distantGlobIds[0])),lgth,MPI_INT,*iter,1125,*_comm);
+ comm.send(const_cast<void *>(reinterpret_cast<const void *>(&sum[0])),lgth,MPI_DOUBLE,*iter,1126,*_comm);
}
}
int lgth=distantGlobIds.size();
for(vector<int>::const_iterator iter=_distant_proc_ids.begin();iter!=_distant_proc_ids.end();iter++,procId++)
{
- comm.send(&lgth,1,MPI_INT,*iter,1128,*_comm);
- comm.send((void*)&distantGlobIds[0],lgth,MPI_INT,*iter,1129,*_comm);
+ comm.send(const_cast<void *>(reinterpret_cast<const void *>(&lgth)),1,MPI_INT,*iter,1128,*_comm);
+ comm.send(const_cast<void *>(reinterpret_cast<const void *>(&distantGlobIds[0])),lgth,MPI_INT,*iter,1129,*_comm);
}
}
{
const std::vector<int>& vals=_ids_per_working_proc3[procId];
int size=vals.size();
- comm.send((void *)&size,1,MPI_INT,*iter,1130,*_comm);
- comm.send((void *)&vals[0],size,MPI_INT,*iter,1131,*_comm);
+ comm.send(const_cast<void *>(reinterpret_cast<const void *>(&size)),1,MPI_INT,*iter,1130,*_comm);
+ comm.send(const_cast<void *>(reinterpret_cast<const void *>(&vals[0])),size,MPI_INT,*iter,1131,*_comm);
}
}
CommInterface comm;
DataArrayInt *globalIds=_local_para_field.returnGlobalNumbering();
const int *globalIdsC=globalIds->getConstPointer();
- MEDCouplingAutoRefCountObjectPtr<DataArrayInt> candidates=_local_para_field.getSupport()->getCellMesh()->findBoundaryNodes();
+ MCAuto<DataArrayInt> candidates=_local_para_field.getSupport()->getCellMesh()->findBoundaryNodes();
for(int *iter1=candidates->getPointer();iter1!=candidates->getPointer()+candidates->getNumberOfTuples();iter1++)
(*iter1)=globalIdsC[*iter1];
std::set<int> candidatesS(candidates->begin(),candidates->end());