diff --git a/AMDiS/src/parallel/MeshDistributor.cc b/AMDiS/src/parallel/MeshDistributor.cc index cb6ef6463b9476c16abfcafeb01bfbe30de1920d..e894e2a5f7b418b454f602c692555c6f3981484a 100644 --- a/AMDiS/src/parallel/MeshDistributor.cc +++ b/AMDiS/src/parallel/MeshDistributor.cc @@ -352,11 +352,11 @@ namespace AMDiS { if (feSpace != NULL) { vector<FiniteElemSpace*> feSpaces = probStat->getFeSpaces(); for (unsigned int i = 0; i < feSpaces.size(); i++) { - MSG("MESH %p <-> %p BF %p <-> %p\n", - feSpace->getMesh(), - feSpaces[i]->getMesh(), - feSpace->getBasisFcts(), - feSpaces[i]->getBasisFcts()); +// MSG("MESH %p <-> %p BF %p <-> %p\n", +// feSpace->getMesh(), +// feSpaces[i]->getMesh(), +// feSpace->getBasisFcts(), +// feSpaces[i]->getBasisFcts()); TEST_EXIT(feSpace == feSpaces[i]) ("Parallelizaton is not supported for multiple FE spaces!\n"); } @@ -906,6 +906,7 @@ namespace AMDiS { stdMpi.send(sendCodes); for (RankToBoundMap::iterator it = allBound.begin(); it != allBound.end(); ++it) stdMpi.recv(it->first); + stdMpi.startCommunication(); // === Compare received mesh structure codes. === @@ -1779,6 +1780,29 @@ namespace AMDiS { it->rankObj.el->getAllDofs(feSpace, it->rankObj, recvDofs[it.getRank()]); } + + + // === Delete all empty DOF send and recv positions === + + { + RankToDofContainer::iterator it = sendDofs.begin(); + while (it != sendDofs.end()) { + if (it->second.size() == 0) + sendDofs.erase(it++); + else + ++it; + } + } + + { + RankToDofContainer::iterator it = recvDofs.begin(); + while (it != recvDofs.end()) { + if (it->second.size() == 0) + recvDofs.erase(it++); + else + ++it; + } + } } @@ -1855,12 +1879,14 @@ namespace AMDiS { StdMpi<vector<DegreeOfFreedom> > stdMpi(mpiComm, false); for (RankToDofContainer::iterator sendIt = sendDofs.begin(); sendIt != sendDofs.end(); ++sendIt) { + stdMpi.getSendData(sendIt->first).resize(0); stdMpi.getSendData(sendIt->first).reserve(sendIt->second.size()); for (DofContainer::iterator dofIt = sendIt->second.begin(); dofIt != sendIt->second.end(); ++dofIt) stdMpi.getSendData(sendIt->first).push_back(rankDofsNewGlobalIndex[*dofIt]); } + stdMpi.updateSendDataSize(); stdMpi.recv(recvDofs); stdMpi.startCommunication(); diff --git a/AMDiS/src/parallel/ParallelDebug.cc b/AMDiS/src/parallel/ParallelDebug.cc index 2973cf97ce3eb6ab55703b818221fc9b75c435d1..6967bf6eac905e5a2b1f9c5d597b2c9fed3dc53e 100644 --- a/AMDiS/src/parallel/ParallelDebug.cc +++ b/AMDiS/src/parallel/ParallelDebug.cc @@ -728,7 +728,7 @@ namespace AMDiS { int tmp = 0; Parameters::get("parallel->debug->print boundary info", tmp); - if (tmp <= 1) + if (tmp <= 0) return; for (InteriorBoundary::iterator it(pdb.myIntBoundary); !it.end(); ++it) { diff --git a/AMDiS/src/parallel/StdMpi.h b/AMDiS/src/parallel/StdMpi.h index 3c5eda1c49cbc592007833c3140b9d93b2f6ab7c..de677c86409731c97120b6a26532c1cafe07a4cf 100644 --- a/AMDiS/src/parallel/StdMpi.h +++ b/AMDiS/src/parallel/StdMpi.h @@ -318,7 +318,7 @@ namespace AMDiS { { for (typename map<int, SendT>::iterator it = sendData.begin(); it != sendData.end(); ++it) - sendDataSize[it->first] = StdMpiHelper<SendT>::getBufferSize(it->second); + sendDataSize[it->first] = StdMpiHelper<SendT>::getBufferSize(it->second); }