#include <OverlapElementLocator.hxx>

Public Member Functions | |
| OverlapElementLocator (const ParaFIELD *sourceField, const ParaFIELD *targetField, const ProcessorGroup &group) | |
| virtual | ~OverlapElementLocator () |
| const MPI_Comm * | getCommunicator () const |
| void | exchangeMeshes (OverlapInterpolationMatrix &matrix) |
| std::vector< std::pair< int, int > > | getToDoList () const |
| std::vector< std::vector< int > > | getProcsInInteraction () const |
| std::string | getSourceMethod () const |
| std::string | getTargetMethod () const |
| const MEDCouplingPointSet * | getSourceMesh (int procId) const |
| const DataArrayInt * | getSourceIds (int procId) const |
| const MEDCouplingPointSet * | getTargetMesh (int procId) const |
| const DataArrayInt * | getTargetIds (int procId) const |
Private Member Functions | |
| void | computeBoundingBoxes () |
| bool | intersectsBoundingBox (int i, int j) const |
| void | sendLocalMeshTo (int procId, bool sourceOrTarget, OverlapInterpolationMatrix &matrix) const |
| void | receiveRemoteMesh (int procId, bool sourceOrTarget) |
| void | sendMesh (int procId, const MEDCouplingPointSet *mesh, const DataArrayInt *idsToSend) const |
| void | receiveMesh (int procId, MEDCouplingPointSet *&mesh, DataArrayInt *&ids) const |
Private Attributes | |
| const ParaFIELD * | _local_source_field |
| const ParaFIELD * | _local_target_field |
| int | _local_space_dim |
| MEDCouplingPointSet * | _local_source_mesh |
| MEDCouplingPointSet * | _local_target_mesh |
| std::vector < MEDCouplingPointSet * > | _distant_cell_meshes |
| std::vector < MEDCouplingPointSet * > | _distant_face_meshes |
| std::vector< std::vector< int > > | _proc_pairs |
| of size _group.size(). Contains for each source proc i, the ids of proc j the targets interact with. This vector is common for all procs in _group. | |
| std::vector< std::pair< int, int > > | _to_do_list |
| list of interpolations couple to be done | |
| std::vector< std::pair< int, bool > > | _procs_to_send |
| std::map< std::pair< int, bool > , MEDCouplingAutoRefCountObjectPtr < MEDCouplingPointSet > > | _remote_meshes |
| std::map< std::pair< int, bool > , MEDCouplingAutoRefCountObjectPtr < DataArrayInt > > | _remote_elems |
| double * | _domain_bounding_boxes |
| const ProcessorGroup & | _group |
| std::vector< int > | _distant_proc_ids |
| const MPI_Comm * | _comm |
| ParaMEDMEM.OverlapElementLocator::OverlapElementLocator | ( | const ParaFIELD * | sourceField, |
| const ParaFIELD * | targetField, | ||
| const ProcessorGroup & | group | ||
| ) |
References ParaMEDMEM.OverlapElementLocator._comm, ParaMEDMEM.OverlapElementLocator._local_source_field, ParaMEDMEM.OverlapElementLocator._local_source_mesh, ParaMEDMEM.OverlapElementLocator._local_target_field, ParaMEDMEM.OverlapElementLocator._local_target_mesh, ParaMEDMEM.OverlapElementLocator.computeBoundingBoxes(), ParaMEDMEM.ParaMESH.getCellMesh(), ParaMEDMEM.OverlapElementLocator.getCommunicator(), and ParaMEDMEM.ParaFIELD.getSupport().
| ParaMEDMEM.OverlapElementLocator::~OverlapElementLocator | ( | ) | [virtual] |
| const MPI_Comm * ParaMEDMEM.OverlapElementLocator::getCommunicator | ( | ) | const |
| void ParaMEDMEM.OverlapElementLocator::exchangeMeshes | ( | OverlapInterpolationMatrix & | matrix | ) |
The aim of this method is to perform the communication to get data corresponding to '_to_do_list' attribute. The principle is the following : if proc n1 and n2 need to perform a cross sending with n1<n2, then n1 will send first and receive then.
References ParaMEDMEM.OverlapElementLocator._group, ParaMEDMEM.OverlapElementLocator._procs_to_send, ParaMEDMEM.OverlapElementLocator._to_do_list, Med_Gen_test.it, ParaMEDMEM.ProcessorGroup.myRank(), ParaMEDMEM.OverlapElementLocator.receiveRemoteMesh(), and ParaMEDMEM.OverlapElementLocator.sendLocalMeshTo().
References ParaMEDMEM.OverlapElementLocator._to_do_list.
| std::vector< std::vector< int > > ParaMEDMEM.OverlapElementLocator.getProcsInInteraction | ( | ) | const |
References ParaMEDMEM.OverlapElementLocator._proc_pairs.
| std::string ParaMEDMEM.OverlapElementLocator::getSourceMethod | ( | ) | const |
| std::string ParaMEDMEM.OverlapElementLocator::getTargetMethod | ( | ) | const |
| const MEDCouplingPointSet * ParaMEDMEM.OverlapElementLocator::getSourceMesh | ( | int | procId | ) | const |
| const DataArrayInt * ParaMEDMEM.OverlapElementLocator::getSourceIds | ( | int | procId | ) | const |
| const MEDCouplingPointSet * ParaMEDMEM.OverlapElementLocator::getTargetMesh | ( | int | procId | ) | const |
| const DataArrayInt * ParaMEDMEM.OverlapElementLocator::getTargetIds | ( | int | procId | ) | const |
| void ParaMEDMEM.OverlapElementLocator::computeBoundingBoxes | ( | ) | [private] |
References ParaMEDMEM.OverlapElementLocator._domain_bounding_boxes, ParaMEDMEM.OverlapElementLocator._group, ParaMEDMEM.OverlapElementLocator._local_source_mesh, ParaMEDMEM.OverlapElementLocator._local_space_dim, ParaMEDMEM.OverlapElementLocator._local_target_mesh, ParaMEDMEM.OverlapElementLocator._proc_pairs, ParaMEDMEM.OverlapElementLocator._procs_to_send, ParaMEDMEM.OverlapElementLocator._to_do_list, ParaMEDMEM.CommInterface.allGather(), ParaMEDMEM.MEDCouplingPointSet.getBoundingBox(), ParaMEDMEM.MPIProcessorGroup.getComm(), ParaMEDMEM.ProcessorGroup.getCommInterface(), ParaMEDMEM.MEDCouplingPointSet.getSpaceDimension(), med_test1.group, ParaMEDMEM.OverlapElementLocator.intersectsBoundingBox(), Med_Gen_test.it, ParaMEDMEM.ProcessorGroup.myRank(), test_NonCoincidentDEC.size, and ParaMEDMEM.ProcessorGroup.size().
| void ParaMEDMEM.OverlapElementLocator::sendLocalMeshTo | ( | int | procId, |
| bool | sourceOrTarget, | ||
| OverlapInterpolationMatrix & | matrix | ||
| ) | const [private] |
This methods sends local source if 'sourceOrTarget'==True to proc 'procId'. This methods sends local target if 'sourceOrTarget'==False to proc 'procId'.
This method prepares the matrix too, for matrix assembling and future matrix-vector computation.
References ParaMEDMEM.OverlapElementLocator._domain_bounding_boxes, ParaMEDMEM.OverlapElementLocator._local_source_field, ParaMEDMEM.OverlapElementLocator._local_source_mesh, ParaMEDMEM.OverlapElementLocator._local_space_dim, ParaMEDMEM.OverlapElementLocator._local_target_field, ParaMEDMEM.OverlapElementLocator._local_target_mesh, ParaMEDMEM.MEDCouplingField.buildSubMeshData(), ParaMEDMEM.RefCountObject.decrRef(), MED_test2.field, INTERP_KERNEL.InterpolationOptions.getBoundingBoxAdjustment(), ParaMEDMEM.MEDCouplingPointSet.getCellsInBoundingBox(), ParaMEDMEM.ParaFIELD.getField(), ParaMEDMEM.OverlapInterpolationMatrix.keepTracksOfSourceIds(), ParaMEDMEM.OverlapInterpolationMatrix.keepTracksOfTargetIds(), and ParaMEDMEM.OverlapElementLocator.sendMesh().
| void ParaMEDMEM.OverlapElementLocator::receiveRemoteMesh | ( | int | procId, |
| bool | sourceOrTarget | ||
| ) | [private] |
This method recieves source remote mesh on proc 'procId' if sourceOrTarget==True This method recieves target remote mesh on proc 'procId' if sourceOrTarget==False
References ParaMEDMEM.OverlapElementLocator._remote_elems, ParaMEDMEM.OverlapElementLocator._remote_meshes, TestMedCorba2.m, and ParaMEDMEM.OverlapElementLocator.receiveMesh().
| void ParaMEDMEM.OverlapElementLocator::sendMesh | ( | int | procId, |
| const MEDCouplingPointSet * | mesh, | ||
| const DataArrayInt * | idsToSend | ||
| ) | const [private] |
References ParaMEDMEM.OverlapElementLocator._comm, ParaMEDMEM.OverlapElementLocator._group, ParaMEDMEM.RefCountObject.decrRef(), ParaMEDMEM.ProcessorGroup.getCommInterface(), ParaMEDMEM.OverlapElementLocator.getCommunicator(), ParaMEDMEM.DataArrayInt.getConstPointer(), ParaMEDMEM.DataArray.getNbOfElems(), ParaMEDMEM.DataArrayDouble.getPointer(), ParaMEDMEM.DataArrayInt.getPointer(), ParaMEDMEM.MEDCouplingPointSet.getTinySerializationInformation(), ParaMEDMEM.CommInterface.send(), and ParaMEDMEM.MEDCouplingPointSet.serialize().
| void ParaMEDMEM.OverlapElementLocator::receiveMesh | ( | int | procId, |
| MEDCouplingPointSet *& | mesh, | ||
| DataArrayInt *& | ids | ||
| ) | const [private] |
References ParaMEDMEM.OverlapElementLocator._comm, ParaMEDMEM.OverlapElementLocator._group, ParaMEDMEM.DataArrayInt.alloc(), ParaMEDMEM.MEDCouplingPointSet.BuildInstanceFromMeshType(), ParaMEDMEM.RefCountObject.decrRef(), ParaMEDMEM.ProcessorGroup.getCommInterface(), ParaMEDMEM.OverlapElementLocator.getCommunicator(), ParaMEDMEM.DataArray.getNbOfElems(), ParaMEDMEM.DataArrayDouble.getPointer(), ParaMEDMEM.DataArrayInt.getPointer(), ParaMEDMEM.DataArrayDouble.New(), ParaMEDMEM.DataArrayInt.New(), ParaMEDMEM.CommInterface.recv(), ParaMEDMEM.MEDCouplingPointSet.resizeForUnserialization(), testMedMemCxxTests.status, and ParaMEDMEM.MEDCouplingPointSet.unserialization().
const ParaFIELD* ParaMEDMEM.OverlapElementLocator._local_source_field [private] |
const ParaFIELD* ParaMEDMEM.OverlapElementLocator._local_target_field [private] |
std::vector<MEDCouplingPointSet*> ParaMEDMEM.OverlapElementLocator._distant_cell_meshes [private] |
std::vector<MEDCouplingPointSet*> ParaMEDMEM.OverlapElementLocator._distant_face_meshes [private] |
std::vector< std::vector< int > > ParaMEDMEM.OverlapElementLocator._proc_pairs [private] |
of size _group.size(). Contains for each source proc i, the ids of proc j the targets interact with. This vector is common for all procs in _group.
std::vector< std::pair<int,int> > ParaMEDMEM.OverlapElementLocator._to_do_list [private] |
list of interpolations couple to be done
std::vector< std::pair<int,bool> > ParaMEDMEM.OverlapElementLocator._procs_to_send [private] |
std::map<std::pair<int,bool>, MEDCouplingAutoRefCountObjectPtr< MEDCouplingPointSet > > ParaMEDMEM.OverlapElementLocator._remote_meshes [private] |
std::map<std::pair<int,bool>, MEDCouplingAutoRefCountObjectPtr< DataArrayInt > > ParaMEDMEM.OverlapElementLocator._remote_elems [private] |
const ProcessorGroup& ParaMEDMEM.OverlapElementLocator._group [private] |
std::vector<int> ParaMEDMEM.OverlapElementLocator._distant_proc_ids [private] |
const MPI_Comm* ParaMEDMEM.OverlapElementLocator._comm [private] |