void NodeBasedCellPopulation<DIM>::NonBlockingSendCellsToNeighbourProcesses() { #if BOOST_VERSION < 103700 EXCEPTION("Parallel cell-based Chaste requires Boost >= 1.37"); #else // BOOST_VERSION >= 103700 if (!PetscTools::AmTopMost()) { boost::shared_ptr<std::vector<std::pair<CellPtr, Node<DIM>* > > > p_cells_right(&mCellsToSendRight, null_deleter()); int tag = SmallPow(2u, 1+ PetscTools::GetMyRank() ) * SmallPow (3u, 1 + PetscTools::GetMyRank() + 1); mRightCommunicator.ISendObject(p_cells_right, PetscTools::GetMyRank() + 1, tag); } if (!PetscTools::AmMaster()) { int tag = SmallPow (2u, 1 + PetscTools::GetMyRank() ) * SmallPow (3u, 1 + PetscTools::GetMyRank() - 1); boost::shared_ptr<std::vector<std::pair<CellPtr, Node<DIM>* > > > p_cells_left(&mCellsToSendLeft, null_deleter()); mLeftCommunicator.ISendObject(p_cells_left, PetscTools::GetMyRank() - 1, tag); } // Now post receives to start receiving data before returning. if (!PetscTools::AmTopMost()) { int tag = SmallPow (3u, 1 + PetscTools::GetMyRank() ) * SmallPow (2u, 1+ PetscTools::GetMyRank() + 1); mRightCommunicator.IRecvObject(PetscTools::GetMyRank() + 1, tag); } if (!PetscTools::AmMaster()) { int tag = SmallPow (3u, 1 + PetscTools::GetMyRank() ) * SmallPow (2u, 1+ PetscTools::GetMyRank() - 1); mLeftCommunicator.IRecvObject(PetscTools::GetMyRank() - 1, tag); } #endif }
void NodeBasedCellPopulation<DIM>::NonBlockingSendCellsToNeighbourProcesses() { if (!PetscTools::AmTopMost()) { boost::shared_ptr<std::vector<std::pair<CellPtr, Node<DIM>* > > > p_cells_right(&mCellsToSendRight, null_deleter()); int tag = SmallPow(2u, 1+ PetscTools::GetMyRank() ) * SmallPow (3u, 1 + PetscTools::GetMyRank() + 1); mRightCommunicator.ISendObject(p_cells_right, PetscTools::GetMyRank() + 1, tag); } if (!PetscTools::AmMaster()) { int tag = SmallPow (2u, 1 + PetscTools::GetMyRank() ) * SmallPow (3u, 1 + PetscTools::GetMyRank() - 1); boost::shared_ptr<std::vector<std::pair<CellPtr, Node<DIM>* > > > p_cells_left(&mCellsToSendLeft, null_deleter()); mLeftCommunicator.ISendObject(p_cells_left, PetscTools::GetMyRank() - 1, tag); } // Now post receives to start receiving data before returning. if (!PetscTools::AmTopMost()) { int tag = SmallPow (3u, 1 + PetscTools::GetMyRank() ) * SmallPow (2u, 1+ PetscTools::GetMyRank() + 1); mRightCommunicator.IRecvObject(PetscTools::GetMyRank() + 1, tag); } if (!PetscTools::AmMaster()) { int tag = SmallPow (3u, 1 + PetscTools::GetMyRank() ) * SmallPow (2u, 1+ PetscTools::GetMyRank() - 1); mLeftCommunicator.IRecvObject(PetscTools::GetMyRank() - 1, tag); } }
void NodeBasedCellPopulation<DIM>::SendCellsToNeighbourProcesses() { MPI_Status status; if (!PetscTools::AmTopMost()) { boost::shared_ptr<std::vector<std::pair<CellPtr, Node<DIM>* > > > p_cells_right(&mCellsToSendRight, null_deleter()); mpCellsRecvRight = mRightCommunicator.SendRecvObject(p_cells_right, PetscTools::GetMyRank() + 1, mCellCommunicationTag, PetscTools::GetMyRank() + 1, mCellCommunicationTag, status); } if (!PetscTools::AmMaster()) { boost::shared_ptr<std::vector<std::pair<CellPtr, Node<DIM>* > > > p_cells_left(&mCellsToSendLeft, null_deleter()); mpCellsRecvLeft = mLeftCommunicator.SendRecvObject(p_cells_left, PetscTools::GetMyRank() - 1, mCellCommunicationTag, PetscTools::GetMyRank() - 1, mCellCommunicationTag, status); } }
void NodeBasedCellPopulation<DIM>::SendCellsToNeighbourProcesses() { #if BOOST_VERSION < 103700 EXCEPTION("Parallel cell-based Chaste requires Boost >= 1.37"); #else // BOOST_VERSION >= 103700 MPI_Status status; if (!PetscTools::AmTopMost()) { boost::shared_ptr<std::vector<std::pair<CellPtr, Node<DIM>* > > > p_cells_right(&mCellsToSendRight, null_deleter()); mpCellsRecvRight = mRightCommunicator.SendRecvObject(p_cells_right, PetscTools::GetMyRank() + 1, mCellCommunicationTag, PetscTools::GetMyRank() + 1, mCellCommunicationTag, status); } if (!PetscTools::AmMaster()) { boost::shared_ptr<std::vector<std::pair<CellPtr, Node<DIM>* > > > p_cells_left(&mCellsToSendLeft, null_deleter()); mpCellsRecvLeft = mLeftCommunicator.SendRecvObject(p_cells_left, PetscTools::GetMyRank() - 1, mCellCommunicationTag, PetscTools::GetMyRank() - 1, mCellCommunicationTag, status); } #endif }