diff --git a/AMDiS/libtool b/AMDiS/libtool index 730f91e3bbf372aaf166baad9d5d517ae0252bc6..5085abd47384de309fc7ed4c62546b5cf86917a0 100755 --- a/AMDiS/libtool +++ b/AMDiS/libtool @@ -85,7 +85,7 @@ NM="/usr/bin/nm -B" LN_S="ln -s" # What is the maximum length of a command? -max_cmd_len=1572864 +max_cmd_len=98304 # Object file suffix (normally "o"). objext=o @@ -128,7 +128,7 @@ old_postinstall_cmds="chmod 644 \$oldlib~\$RANLIB \$oldlib" old_postuninstall_cmds="" # A C compiler. -LTCC="/usr/lib64/mpi/gcc/openmpi//bin/mpicc" +LTCC="/licsoft/libraries/openmpi/1.2.6/64bit/bin/mpicc" # LTCC compiler flags. LTCFLAGS="-g -O2" @@ -233,10 +233,10 @@ finish_eval="" hardcode_into_libs=yes # Compile-time system search path for libraries. -sys_lib_search_path_spec="/usr/lib64/gcc/x86_64-suse-linux/4.5 /usr/lib64 /lib64 /usr/x86_64-suse-linux/lib" +sys_lib_search_path_spec="/usr/lib64/gcc/x86_64-suse-linux/4.1.2 /usr/lib64 /lib64 /fastfs/wir/local/lib /usr/x86_64-suse-linux/lib" # Run-time system search path for libraries. -sys_lib_dlsearch_path_spec="/lib /usr/lib /usr/X11R6/lib64/Xaw3d /usr/X11R6/lib64 /usr/lib64/Xaw3d /usr/X11R6/lib/Xaw3d /usr/X11R6/lib /usr/lib/Xaw3d /usr/x86_64-suse-linux/lib /usr/local/lib /opt/kde3/lib /lib64 /lib /usr/lib64 /usr/lib /usr/local/lib64 /opt/kde3/lib64 /usr/lib64/graphviz /usr/lib64/graphviz/sharp /usr/lib64/graphviz/java /usr/lib64/graphviz/perl /usr/lib64/graphviz/php /usr/lib64/graphviz/ocaml /usr/lib64/graphviz/python /usr/lib64/graphviz/lua /usr/lib64/graphviz/tcl /usr/lib64/graphviz/guile /usr/lib64/graphviz/ruby /usr/lib64/octave-3.2.4 " +sys_lib_dlsearch_path_spec="/lib /usr/lib /usr/X11R6/lib64/Xaw3d /usr/X11R6/lib64 /usr/X11R6/lib/Xaw3d /usr/X11R6/lib /usr/x86_64-suse-linux/lib /usr/local/lib64 /usr/local/lib /opt/kde3/lib64 /opt/kde3/lib /opt/gnome/lib64 /opt/gnome/lib /lib64 /lib /usr/lib64 /usr/lib /opt/cluster/intel/cce/9.1.042/lib /opt/cluster/intel/fce/9.1.036/lib /opt/cluster/Pathscale3.0/lib/2.9.99 /opt/cluster/Pathscale3.0/lib/2.9.99/32 /work/licsoft/compilers/pgi/linux86-64/6.2/lib /work/licsoft/compilers/pgi/linux86-64/6.2/libso " # Whether dlopen is supported. dlopen_support=unknown @@ -259,7 +259,7 @@ LD="/usr/x86_64-suse-linux/bin/ld -m elf_x86_64" old_archive_cmds="\$AR \$AR_FLAGS \$oldlib\$oldobjs~\$RANLIB \$oldlib" # A language specific compiler. -CC="/usr/lib64/mpi/gcc/openmpi//bin/mpicc" +CC="/licsoft/libraries/openmpi/1.2.6/64bit/bin/mpicc" # Is the compiler the GNU compiler? with_gcc=yes @@ -8914,7 +8914,7 @@ LD="/usr/x86_64-suse-linux/bin/ld -m elf_x86_64" old_archive_cmds="\$AR \$AR_FLAGS \$oldlib\$oldobjs~\$RANLIB \$oldlib" # A language specific compiler. -CC="/usr/lib64/mpi/gcc/openmpi//bin/mpicxx" +CC="/licsoft/libraries/openmpi/1.2.6/64bit/bin/mpicxx" # Is the compiler the GNU compiler? with_gcc=yes @@ -9039,17 +9039,17 @@ file_list_spec="" hardcode_action=immediate # The directories searched by this compiler when creating a shared library. -compiler_lib_search_dirs="/usr/lib64/mpi/gcc/openmpi/lib64 /usr/lib64/gcc/x86_64-suse-linux/4.5 /usr/lib64/gcc/x86_64-suse-linux/4.5/../../../../lib64 /lib/../lib64 /usr/lib/../lib64 /usr/lib64/gcc/x86_64-suse-linux/4.5/../../../../x86_64-suse-linux/lib /usr/lib64/gcc/x86_64-suse-linux/4.5/../../.." +compiler_lib_search_dirs="/usr/lib64 /licsoft/libraries/openmpi/1.2.6/64bit/lib /usr/lib64/gcc/x86_64-suse-linux/4.1.2 /usr/lib64/gcc/x86_64-suse-linux/4.1.2/../../../../lib64 /lib/../lib64 /usr/lib/../lib64 /fastfs/wir/local/lib /usr/lib64/gcc/x86_64-suse-linux/4.1.2/../../../../x86_64-suse-linux/lib /usr/lib64/gcc/x86_64-suse-linux/4.1.2/../../.." # Dependencies to place before and after the objects being linked to # create a shared library. -predep_objects="/usr/lib64/gcc/x86_64-suse-linux/4.5/../../../../lib64/crti.o /usr/lib64/gcc/x86_64-suse-linux/4.5/crtbeginS.o" -postdep_objects="/usr/lib64/gcc/x86_64-suse-linux/4.5/crtendS.o /usr/lib64/gcc/x86_64-suse-linux/4.5/../../../../lib64/crtn.o" +predep_objects="/usr/lib64/gcc/x86_64-suse-linux/4.1.2/../../../../lib64/crti.o /usr/lib64/gcc/x86_64-suse-linux/4.1.2/crtbeginS.o" +postdep_objects="/usr/lib64/gcc/x86_64-suse-linux/4.1.2/crtendS.o /usr/lib64/gcc/x86_64-suse-linux/4.1.2/../../../../lib64/crtn.o" predeps="" -postdeps="-lmpi_cxx -lmpi -lopen-rte -lopen-pal -ldl -lnsl -lutil -ldl -lstdc++ -lm -lgcc_s -lpthread -lc -lgcc_s" +postdeps="-lmpi_cxx -lmpi -lopen-rte -lopen-pal -libverbs -lrt -lnuma -ldl -lnsl -lutil -ldl -lstdc++ -lm -lgcc_s -lpthread -lc -lgcc_s" # The library search path used internally by the compiler when linking # a shared library. -compiler_lib_search_path="-L/usr/lib64/mpi/gcc/openmpi/lib64 -L/usr/lib64/gcc/x86_64-suse-linux/4.5 -L/usr/lib64/gcc/x86_64-suse-linux/4.5/../../../../lib64 -L/lib/../lib64 -L/usr/lib/../lib64 -L/usr/lib64/gcc/x86_64-suse-linux/4.5/../../../../x86_64-suse-linux/lib -L/usr/lib64/gcc/x86_64-suse-linux/4.5/../../.." +compiler_lib_search_path="-L/usr/lib64 -L/licsoft/libraries/openmpi/1.2.6/64bit/lib -L/usr/lib64/gcc/x86_64-suse-linux/4.1.2 -L/usr/lib64/gcc/x86_64-suse-linux/4.1.2/../../../../lib64 -L/lib/../lib64 -L/usr/lib/../lib64 -L/fastfs/wir/local/lib -L/usr/lib64/gcc/x86_64-suse-linux/4.1.2/../../../../x86_64-suse-linux/lib -L/usr/lib64/gcc/x86_64-suse-linux/4.1.2/../../.." # ### END LIBTOOL TAG CONFIG: CXX diff --git a/AMDiS/src/Element.h b/AMDiS/src/Element.h index 5d67b8f5a37898cf880e9788605e0469a7df74be..21f185ced2be188e4ffe1d8043dbf738b7f45441 100644 --- a/AMDiS/src/Element.h +++ b/AMDiS/src/Element.h @@ -282,10 +282,12 @@ namespace AMDiS { */ inline void setEstimation(double est, int row) { + FUNCNAME("Element::setEstimation()"); + if (isLeaf()) { - TEST_EXIT_DBG(elementData)("leaf element without leaf data\n"); + TEST_EXIT_DBG(elementData)("Leaf element %d without leaf data!\n", index); ElementData *ld = elementData->getElementData(ESTIMATABLE); - TEST_EXIT_DBG(ld)("leaf data not estimatable\n"); + TEST_EXIT_DBG(ld)("Leaf data %d not estimatable!\n", index); dynamic_cast<LeafDataEstimatableInterface*>(ld)-> setErrorEstimate(row, est); diff --git a/AMDiS/src/Mesh.cc b/AMDiS/src/Mesh.cc index f81a745728a04b4c5f4978a042b7330985367e96..9daeb8ca62c460d6beebbf9a19b94ff3f064538c 100644 --- a/AMDiS/src/Mesh.cc +++ b/AMDiS/src/Mesh.cc @@ -331,6 +331,11 @@ namespace AMDiS { if (!(*macroIt)->getElement()->isLeaf()) { delete (*macroIt)->getElement()->getChild(0); delete (*macroIt)->getElement()->getChild(1); + + (*macroIt)->getElement()->child[0] = NULL; + (*macroIt)->getElement()->child[1] = NULL; + + (*macroIt)->getElement()->setElementData(elementDataPrototype->clone()); } } diff --git a/AMDiS/src/MeshStructure.cc b/AMDiS/src/MeshStructure.cc index e78226eb0325ee5e458602d8fe9bf6c5f9be278a..f9440744f7c9595e33bdb8eaa0d0c9696a3120d5 100644 --- a/AMDiS/src/MeshStructure.cc +++ b/AMDiS/src/MeshStructure.cc @@ -246,7 +246,6 @@ namespace AMDiS { else elInfo = stack.traverseFirstOneMacro(mesh, macroElIndex, -1, Mesh::CALL_EVERY_EL_PREORDER); - MSG("FIT 1\n"); while (elInfo) { Element *element = elInfo->getElement(); @@ -265,6 +264,8 @@ namespace AMDiS { } } + TEST_EXIT_DBG(element)("Should not happen!\n"); + if (element->isLeaf() && !isLeafElement()) { MeshStructure *structure = new MeshStructure(); cont = skipBranch(structure); @@ -283,10 +284,8 @@ namespace AMDiS { // refine mesh bool finished = true; - MSG("FIT 2\n"); - do { - MSG("RUN ON EL %d\n", macroElIndex); + do { finished = true; if (macroElIndex == -1) elInfo = stack.traverseFirst(mesh, -1, Mesh::CALL_LEAF_EL); @@ -308,23 +307,17 @@ namespace AMDiS { int oldMeshIndex = mesh->getChangeIndex(); #endif - MSG("AND REFINE!\n"); - if (macroElIndex == -1) manager->refineMesh(mesh); else manager->refineMacroElement(mesh, macroElIndex); - MSG("AND BACK!\n"); - #if (DEBUG != 0) TEST_EXIT(oldMeshIndex != mesh->getChangeIndex()) ("Mesh has not been changed by refinement procedure!\n"); #endif } } while (!finished); - - MSG("FIT 3\n"); } diff --git a/AMDiS/src/RefinementManager.cc b/AMDiS/src/RefinementManager.cc index 7d12cdedac33b21b115c4a81e0ade22bd02af901..4cf5a6fe36510c019060917c2b686aad453f9ad1 100644 --- a/AMDiS/src/RefinementManager.cc +++ b/AMDiS/src/RefinementManager.cc @@ -91,8 +91,6 @@ namespace AMDiS { while (doMoreRecursiveRefine) { doMoreRecursiveRefine = false; - MSG("HERE 1\n"); - ElInfo *elInfo = stack->traverseFirstOneMacro(mesh, macroElIndex, -1, Mesh::CALL_LEAF_EL | Mesh::FILL_NEIGH | Mesh::FILL_BOUND); @@ -103,28 +101,19 @@ namespace AMDiS { doMoreRecursiveRefine || (elInfo->getElement()->getMark() > 1); elInfo = refineFunction(elInfo); } - MSG("WIRKLICH HERE? 1\n"); elInfo = stack->traverseNext(elInfo); - MSG("WIRKLICH HERE? 2\n"); } - - MSG("HERE 2\n"); } - MSG("HERE 3\n"); - if (newCoords) setNewCoords(macroElIndex); // call of sub-class method - MSG("HERE 4\n"); delete stack; - MSG("HERE 5\n"); + nElements -= mesh->getNumberOfLeaves(); - MSG("HERE 6\n"); if (nElements != 0) aMesh->incChangeIndex(); - MSG("HERE 7\n"); } } diff --git a/AMDiS/src/RefinementManager2d.cc b/AMDiS/src/RefinementManager2d.cc index 9a585034de685f33bf674365d0a63504426a4ab4..02bd80a2f458a5f06a36e5aa1a0136acb34475ce 100644 --- a/AMDiS/src/RefinementManager2d.cc +++ b/AMDiS/src/RefinementManager2d.cc @@ -18,13 +18,11 @@ namespace AMDiS { ElInfo* RefinementManager2d::refineFunction(ElInfo* elInfo) { - FUNCNAME("RefinementManager::refineFunction()"); + FUNCNAME("RefinementManager2d::refineFunction()"); if (elInfo->getElement()->getMark() <= 0) return elInfo; - MSG("RFCT 1\n"); - bool bound = false; DegreeOfFreedom *edge[2]; RCNeighbourList* refineList = new RCNeighbourList(2); @@ -116,8 +114,6 @@ namespace AMDiS { delete refineList; - MSG("RFCT 2\n"); - return elInfo; } @@ -137,15 +133,11 @@ namespace AMDiS { if (el->getFirstChild() && projector && (!el->isNewCoordSet())) { WorldVector<double> *new_coord = new WorldVector<double>; - MSG("NU ABER 1\n"); for (int j = 0; j < dow; j++) (*new_coord)[j] = (elInfo->getCoord(0)[j] + elInfo->getCoord(1)[j]) * 0.5; - MSG("NU ABER 2\n"); projector->project(*new_coord); el->setNewCoord(new_coord); - - MSG("NU ABER 3\n"); } } diff --git a/AMDiS/src/io/MacroInfo.cc b/AMDiS/src/io/MacroInfo.cc index 2bea515b2e590ef06092ed8393961bc0fe6752ad..2b75f4caf7cc1d84f0be5761c5cb0c2dca406775 100644 --- a/AMDiS/src/io/MacroInfo.cc +++ b/AMDiS/src/io/MacroInfo.cc @@ -14,9 +14,7 @@ namespace AMDiS { TEST_EXIT(pmesh)("no mesh\n"); - int dim = pmesh->getDim(); mesh = pmesh; - mesh->setNumberOfElements(nElements); mesh->setNumberOfLeaves(nElements); mesh->setNumberOfVertices(nVertices); @@ -63,11 +61,11 @@ namespace AMDiS { } - /****************************************************************************/ - /* read_indices() reads dim+1 indices from file into id[0-dim], */ - /* returns true if dim+1 inputs arguments could be read successfully by */ - /* fscanf(), else false */ - /****************************************************************************/ + /********************************************************************************/ + /* read_indices() reads dim + 1 indices from file into id[0 - dim], */ + /* returns true if dim + 1 inputs arguments could be read successfully by */ + /* fscanf(), else false */ + /********************************************************************************/ int MacroInfo::read_indices(FILE *file, DimVec<int> &id) { diff --git a/AMDiS/src/parallel/MeshDistributor.cc b/AMDiS/src/parallel/MeshDistributor.cc index 9ad76241aa0300a046f6c60cbcd033e80dee963a..1325fce91052158aacf91cb1a020e8ddce2885f7 100644 --- a/AMDiS/src/parallel/MeshDistributor.cc +++ b/AMDiS/src/parallel/MeshDistributor.cc @@ -57,6 +57,7 @@ namespace AMDiS { writeSerializationFile(false), repartitioningAllowed(false), nTimestepsAfterLastRepartitioning(0), + repartCounter(0), lastMeshChangeIndex(0) { FUNCNAME("MeshDistributor::ParalleDomainBase()"); @@ -970,9 +971,15 @@ namespace AMDiS { if (repartitioning == 0) return; - DOFVector<double> tmpa(feSpace, "tmp"); - tmpa.set(mpiRank); - VtkWriter::writeFile(testVec[0], "before-repartition.vtu"); + if (repartCounter == 0) { + std::stringstream oss; + oss << "partitioning-" << repartCounter << ".vtu"; + DOFVector<double> tmpa(feSpace, "tmp"); + tmpa.set(mpiRank); + VtkWriter::writeFile(&tmpa, oss.str()); + + repartCounter++; + } MSG("USED-SIZE A: %d\n", mesh->getDofAdmin(0).getUsedDofs()); @@ -992,7 +999,6 @@ namespace AMDiS { MacroInfo* minfo = mesh->getMacroFileInfo(); TEST_EXIT_DBG(minfo)("No macro file info!\n"); - MSG("MARK 1\n"); // === Create map that maps macro element indices to pointers to the === // === macro elements. === @@ -1002,7 +1008,7 @@ namespace AMDiS { it != minfo->mel.end(); ++it) elIndexMap[(*it)->getIndex()] = *it; - MSG("MARK 2\n"); + // === Create set of all new macro elements this rank will receive from === // === other ranks. === @@ -1022,7 +1028,6 @@ namespace AMDiS { it != mesh->endOfMacroElements(); ++it) allMacroEl.insert(*it); - MSG("MARK 3\n"); // === Add new macro elements to mesh. === for (std::set<MacroElement*>::iterator it = newMacroEl.begin(); @@ -1037,7 +1042,6 @@ namespace AMDiS { mesh->getMacroElements().push_back(mel); } - MSG("MARK 4\n"); // === Send and receive mesh structure codes. === std::map<int, MeshCodeVec> sendCodes; @@ -1058,17 +1062,16 @@ namespace AMDiS { } } } - MSG("MARK 5\n"); + StdMpi<MeshCodeVec> stdMpi(mpiComm, true); stdMpi.send(sendCodes); stdMpi.recv(partitioner->getRecvElements()); stdMpi.startCommunication<uint64_t>(MPI_UNSIGNED_LONG); - MSG("MARK 6\n"); + StdMpi<std::vector<std::vector<double> > > stdMpi2(mpiComm, true); stdMpi2.send(sendValues); stdMpi2.recv(partitioner->getRecvElements()); stdMpi2.startCommunication<double>(MPI_DOUBLE); - MSG("MARK 7\n"); // === Adapte the new macro elements due to the received mesh structure codes. === @@ -1084,20 +1087,15 @@ namespace AMDiS { for (std::vector<int>::iterator elIt = it->second.begin(); elIt != it->second.end(); ++elIt) { - MSG("START EL ADAPT\n"); recvCodes[i].fitMeshToStructure(mesh, refineManager, false, *elIt); - MSG("END EL ADAPT\n"); - for (unsigned int k = 0; k < testVec.size(); k++) { - MSG("START VAL ADAPT\n"); + for (unsigned int k = 0; k < testVec.size(); k++) recvCodes[i].setMeshStructureValues(mesh, *elIt, testVec[k], recvValues[j++]); - MSG("END VAL ADAPT\n"); - } i++; } } - MSG("MARK 8\n"); + // === Set correct neighbour information on macro elements. === for (std::set<MacroElement*>::iterator it = allMacroEl.begin(); @@ -1112,7 +1110,7 @@ namespace AMDiS { (*it)->setNeighbour(i, elIndexMap[neighIndex]); } } - MSG("MARK 9\n"); + // === Delete macros from mesh. === @@ -1128,22 +1126,25 @@ namespace AMDiS { deleteMacroElements.insert(elIndexMap[*elIt]); } } - MSG("MARK 10\n"); + mesh->removeMacroElements(deleteMacroElements, feSpace); if (mpiRank == 0) debug::writeElementIndexMesh(mesh, "elementIndexxxx.vtu"); + // === Remove double DOFs. === - MSG("MARK 11\n"); MeshManipulation meshManipulation(mesh); meshManipulation.deleteDoubleDofs(newMacroEl); - MSG("MARK 12\n"); + mesh->dofCompress(); - DOFVector<double> tmp(feSpace, "tmp"); - tmp.set(mpiRank); - VtkWriter::writeFile(testVec[0], "after-repartition.vtu"); + std::stringstream oss; + oss << "partitioning-" << repartCounter << ".vtu"; + DOFVector<double> tmpa(feSpace, "tmp"); + tmpa.set(mpiRank); + VtkWriter::writeFile(&tmpa, oss.str()); + repartCounter++; MSG("USED-SIZE B: %d\n", mesh->getDofAdmin(0).getUsedDofs()); diff --git a/AMDiS/src/parallel/MeshDistributor.h b/AMDiS/src/parallel/MeshDistributor.h index 7b68386eb1ee5feb0bda31b1e5e9bffd28b64977..3020cde5595cdafb2456546801b33ff305af4361 100644 --- a/AMDiS/src/parallel/MeshDistributor.h +++ b/AMDiS/src/parallel/MeshDistributor.h @@ -567,6 +567,8 @@ namespace AMDiS { int nTimestepsAfterLastRepartitioning; + int repartCounter; + /** \brief * Stores the mesh change index. This is used to recognize changes in the mesh * structure (e.g. through refinement or coarsening managers).