diff --git a/AMDiS/libtool b/AMDiS/libtool index 41ace2e6aa8dc61f34efef5d3ac31a4138c1ba01..486eabd3eefb59bce7cb3fc38a32f6c54ef0e385 100755 --- a/AMDiS/libtool +++ b/AMDiS/libtool @@ -30,10 +30,10 @@ # the same distribution terms that you use for the rest of that program. # A sed program that does not truncate output. -SED="/bin/sed" +SED="/usr/bin/sed" # Sed that helps us avoid accidentally triggering echo(1) options like -n. -Xsed="/bin/sed -e 1s/^X//" +Xsed="/usr/bin/sed -e 1s/^X//" # The HP-UX ksh and POSIX shell print the target directory to stdout # if CDPATH is set. @@ -44,7 +44,7 @@ available_tags=" CXX F77" # ### BEGIN LIBTOOL CONFIG -# Libtool was configured on host NWRW15: +# Libtool was configured on host deimos103: # Shell to use when invoking shell scripts. SHELL="/bin/sh" @@ -66,12 +66,12 @@ fast_install=yes # The host system. host_alias= -host=i686-pc-linux-gnu +host=x86_64-unknown-linux-gnu host_os=linux-gnu # The build system. build_alias= -build=i686-pc-linux-gnu +build=x86_64-unknown-linux-gnu build_os=linux-gnu # An echo program that does not interpret backslashes. @@ -82,13 +82,13 @@ AR="ar" AR_FLAGS="cru" # A C compiler. -LTCC="gcc" +LTCC="/licsoft/libraries/openmpi/1.2.6/64bit/bin/mpicc" # LTCC compiler flags. LTCFLAGS="-g -O2" # A language-specific compiler. -CC="gcc" +CC="/licsoft/libraries/openmpi/1.2.6/64bit/bin/mpicc" # Is the compiler the GNU C compiler? with_gcc=yes @@ -97,7 +97,7 @@ with_gcc=yes EGREP="grep -E" # The linker used to build libraries. -LD="/usr/bin/ld" +LD="/usr/x86_64-suse-linux/bin/ld -m elf_x86_64" # Whether we need hard or soft links. LN_S="ln -s" @@ -171,7 +171,7 @@ dlopen_self=unknown dlopen_self_static=unknown # Compiler flag to prevent dynamic linking. -link_static_flag="-static" +link_static_flag="" # Compiler flag to turn off builtin functions. no_builtin_flag=" -fno-builtin" @@ -325,10 +325,10 @@ variables_saved_for_relink="PATH LD_LIBRARY_PATH LD_RUN_PATH GCC_EXEC_PREFIX COM link_all_deplibs=unknown # Compile-time system search path for libraries -sys_lib_search_path_spec=" /usr/lib/gcc/i386-redhat-linux/4.1.2/ /usr/lib/gcc/i386-redhat-linux/4.1.2/ /usr/lib/gcc/i386-redhat-linux/4.1.2/../../../../i386-redhat-linux/lib/i386-redhat-linux/4.1.2/ /usr/lib/gcc/i386-redhat-linux/4.1.2/../../../../i386-redhat-linux/lib/ /usr/lib/gcc/i386-redhat-linux/4.1.2/../../../i386-redhat-linux/4.1.2/ /usr/lib/gcc/i386-redhat-linux/4.1.2/../../../ /lib/i386-redhat-linux/4.1.2/ /lib/ /usr/lib/i386-redhat-linux/4.1.2/ /usr/lib/" +sys_lib_search_path_spec=" /usr/lib64/gcc/x86_64-suse-linux/4.1.2/ /usr/lib/gcc/x86_64-suse-linux/4.1.2/ /usr/lib64/gcc/x86_64-suse-linux/4.1.2/../../../../x86_64-suse-linux/lib/x86_64-suse-linux/4.1.2/ /usr/lib64/gcc/x86_64-suse-linux/4.1.2/../../../../x86_64-suse-linux/lib/../lib64/ /usr/lib64/gcc/x86_64-suse-linux/4.1.2/../../../x86_64-suse-linux/4.1.2/ /usr/lib64/gcc/x86_64-suse-linux/4.1.2/../../../../lib64/ /lib/x86_64-suse-linux/4.1.2/ /lib/../lib64/ /usr/lib/x86_64-suse-linux/4.1.2/ /usr/lib/../lib64/ /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/../../../ /lib/ /usr/lib/" # Run-time system search path for libraries -sys_lib_dlsearch_path_spec="/lib /usr/lib /usr/lib/octave-2.9.9 /usr/lib/qt-3.3/lib " +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 " # Fix the shell variable $srcfile for the compiler. fix_srcfile_path="" @@ -6760,7 +6760,7 @@ build_old_libs=`case $build_libtool_libs in yes) $echo no;; *) $echo yes;; esac` # End: # ### BEGIN LIBTOOL TAG CONFIG: CXX -# Libtool was configured on host NWRW15: +# Libtool was configured on host deimos103: # Shell to use when invoking shell scripts. SHELL="/bin/sh" @@ -6782,12 +6782,12 @@ fast_install=yes # The host system. host_alias= -host=i686-pc-linux-gnu +host=x86_64-unknown-linux-gnu host_os=linux-gnu # The build system. build_alias= -build=i686-pc-linux-gnu +build=x86_64-unknown-linux-gnu build_os=linux-gnu # An echo program that does not interpret backslashes. @@ -6798,13 +6798,13 @@ AR="ar" AR_FLAGS="cru" # A C compiler. -LTCC="gcc" +LTCC="/licsoft/libraries/openmpi/1.2.6/64bit/bin/mpicc" # LTCC compiler flags. LTCFLAGS="-g -O2" # A language-specific compiler. -CC="g++" +CC="/licsoft/libraries/openmpi/1.2.6/64bit/bin/mpiCC" # Is the compiler the GNU C compiler? with_gcc=yes @@ -6813,7 +6813,7 @@ with_gcc=yes EGREP="grep -E" # The linker used to build libraries. -LD="/usr/bin/ld" +LD="/usr/x86_64-suse-linux/bin/ld -m elf_x86_64" # Whether we need hard or soft links. LN_S="ln -s" @@ -6887,7 +6887,7 @@ dlopen_self=unknown dlopen_self_static=unknown # Compiler flag to prevent dynamic linking. -link_static_flag="-static" +link_static_flag="" # Compiler flag to turn off builtin functions. no_builtin_flag=" -fno-builtin" @@ -6942,11 +6942,11 @@ striplib="strip --strip-unneeded" # Dependencies to place before the objects being linked to create a # shared library. -predep_objects="/usr/lib/gcc/i386-redhat-linux/4.1.2/../../../crti.o /usr/lib/gcc/i386-redhat-linux/4.1.2/crtbeginS.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" # Dependencies to place after the objects being linked to create a # shared library. -postdep_objects="/usr/lib/gcc/i386-redhat-linux/4.1.2/crtendS.o /usr/lib/gcc/i386-redhat-linux/4.1.2/../../../crtn.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" # Dependencies to place before the objects being linked to create a # shared library. @@ -6954,11 +6954,11 @@ predeps="" # Dependencies to place after the objects being linked to create a # shared library. -postdeps="-lstdc++ -lm -lgcc_s -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/lib/gcc/i386-redhat-linux/4.1.2 -L/usr/lib/gcc/i386-redhat-linux/4.1.2 -L/usr/lib/gcc/i386-redhat-linux/4.1.2/../../.." +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/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/../../.." # Method to check whether dependent libraries are shared objects. deplibs_check_method="pass_all" @@ -7038,10 +7038,10 @@ variables_saved_for_relink="PATH LD_LIBRARY_PATH LD_RUN_PATH GCC_EXEC_PREFIX COM link_all_deplibs=unknown # Compile-time system search path for libraries -sys_lib_search_path_spec=" /usr/lib/gcc/i386-redhat-linux/4.1.2/ /usr/lib/gcc/i386-redhat-linux/4.1.2/ /usr/lib/gcc/i386-redhat-linux/4.1.2/../../../../i386-redhat-linux/lib/i386-redhat-linux/4.1.2/ /usr/lib/gcc/i386-redhat-linux/4.1.2/../../../../i386-redhat-linux/lib/ /usr/lib/gcc/i386-redhat-linux/4.1.2/../../../i386-redhat-linux/4.1.2/ /usr/lib/gcc/i386-redhat-linux/4.1.2/../../../ /lib/i386-redhat-linux/4.1.2/ /lib/ /usr/lib/i386-redhat-linux/4.1.2/ /usr/lib/" +sys_lib_search_path_spec=" /usr/lib64/gcc/x86_64-suse-linux/4.1.2/ /usr/lib/gcc/x86_64-suse-linux/4.1.2/ /usr/lib64/gcc/x86_64-suse-linux/4.1.2/../../../../x86_64-suse-linux/lib/x86_64-suse-linux/4.1.2/ /usr/lib64/gcc/x86_64-suse-linux/4.1.2/../../../../x86_64-suse-linux/lib/../lib64/ /usr/lib64/gcc/x86_64-suse-linux/4.1.2/../../../x86_64-suse-linux/4.1.2/ /usr/lib64/gcc/x86_64-suse-linux/4.1.2/../../../../lib64/ /lib/x86_64-suse-linux/4.1.2/ /lib/../lib64/ /usr/lib/x86_64-suse-linux/4.1.2/ /usr/lib/../lib64/ /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/../../../ /lib/ /usr/lib/" # Run-time system search path for libraries -sys_lib_dlsearch_path_spec="/lib /usr/lib /usr/lib/octave-2.9.9 /usr/lib/qt-3.3/lib " +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 " # Fix the shell variable $srcfile for the compiler. fix_srcfile_path="" @@ -7065,7 +7065,7 @@ include_expsyms="" # ### BEGIN LIBTOOL TAG CONFIG: F77 -# Libtool was configured on host NWRW15: +# Libtool was configured on host deimos103: # Shell to use when invoking shell scripts. SHELL="/bin/sh" @@ -7087,12 +7087,12 @@ fast_install=yes # The host system. host_alias= -host=i686-pc-linux-gnu +host=x86_64-unknown-linux-gnu host_os=linux-gnu # The build system. build_alias= -build=i686-pc-linux-gnu +build=x86_64-unknown-linux-gnu build_os=linux-gnu # An echo program that does not interpret backslashes. @@ -7103,7 +7103,7 @@ AR="ar" AR_FLAGS="cru" # A C compiler. -LTCC="gcc" +LTCC="/licsoft/libraries/openmpi/1.2.6/64bit/bin/mpicc" # LTCC compiler flags. LTCFLAGS="-g -O2" @@ -7112,13 +7112,13 @@ LTCFLAGS="-g -O2" CC="g77" # Is the compiler the GNU C compiler? -with_gcc=yes +with_gcc= # An ERE matcher. EGREP="grep -E" # The linker used to build libraries. -LD="/usr/bin/ld" +LD="/usr/x86_64-suse-linux/bin/ld -m elf_x86_64" # Whether we need hard or soft links. LN_S="ln -s" @@ -7346,10 +7346,10 @@ variables_saved_for_relink="PATH LD_LIBRARY_PATH LD_RUN_PATH GCC_EXEC_PREFIX COM link_all_deplibs=unknown # Compile-time system search path for libraries -sys_lib_search_path_spec=" /usr/lib/gcc/i386-redhat-linux/3.4.6/ /usr/lib/gcc/i386-redhat-linux/3.4.6/ /usr/lib/gcc/i386-redhat-linux/3.4.6/../../../../i386-redhat-linux/lib/i386-redhat-linux/3.4.6/ /usr/lib/gcc/i386-redhat-linux/3.4.6/../../../../i386-redhat-linux/lib/ /usr/lib/gcc/i386-redhat-linux/3.4.6/../../../i386-redhat-linux/3.4.6/ /usr/lib/gcc/i386-redhat-linux/3.4.6/../../../ /lib/i386-redhat-linux/3.4.6/ /lib/ /usr/lib/i386-redhat-linux/3.4.6/ /usr/lib/" +sys_lib_search_path_spec=" /usr/lib64/gcc-lib/x86_64-suse-linux/3.3.5/ /usr/lib/gcc/x86_64-suse-linux/3.3.5/ /usr/lib64/gcc-lib/x86_64-suse-linux/3.3.5/../../../../x86_64-suse-linux/lib/x86_64-suse-linux/3.3.5/ /usr/lib64/gcc-lib/x86_64-suse-linux/3.3.5/../../../../x86_64-suse-linux/lib/ /usr/lib64/gcc-lib/x86_64-suse-linux/3.3.5/../../../x86_64-suse-linux/3.3.5/ /usr/lib64/gcc-lib/x86_64-suse-linux/3.3.5/../../../ /lib/x86_64-suse-linux/3.3.5/ /lib/ /usr/lib/x86_64-suse-linux/3.3.5/ /usr/lib/" # Run-time system search path for libraries -sys_lib_dlsearch_path_spec="/lib /usr/lib /usr/lib/octave-2.9.9 /usr/lib/qt-3.3/lib " +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 " # Fix the shell variable $srcfile for the compiler. fix_srcfile_path="" diff --git a/AMDiS/src/ElInfo2d.cc b/AMDiS/src/ElInfo2d.cc index 7df8e6f2cc253d07b99f8f007f6a9b0b033fbd8f..890e42c8c7388e355da6f2a7b87d8e994bdd0421 100644 --- a/AMDiS/src/ElInfo2d.cc +++ b/AMDiS/src/ElInfo2d.cc @@ -34,8 +34,8 @@ namespace AMDiS { FUNCNAME("ElInfo::fillMacroInfo()"); macroElement_ = const_cast<MacroElement*>(mel); - element_ = const_cast<Element*>(mel->getElement()); - parent_ = NULL; + element_ = const_cast<Element*>(mel->getElement()); + parent_ = NULL; level = 0; if (fillFlag_.isSet(Mesh::FILL_COORDS) || diff --git a/AMDiS/src/Element.cc b/AMDiS/src/Element.cc index c8ac2cb33abafa45ed22fe7fef91cd467592bcbd..947d6700d99dd79bb877151e310ebc0b64e4f63e 100644 --- a/AMDiS/src/Element.cc +++ b/AMDiS/src/Element.cc @@ -14,11 +14,11 @@ namespace AMDiS { if (!elementData) return -1; - ElementRegion_ED* red = dynamic_cast<ElementRegion_ED*>(elementData->getElementData(ELEMENT_REGION)); + ElementRegion_ED* red = + dynamic_cast<ElementRegion_ED*>(elementData->getElementData(ELEMENT_REGION)); - if (red) { - return red->getRegion(); - } + if (red) + return red->getRegion(); return -1; } @@ -52,16 +52,14 @@ namespace AMDiS { // call destructor through Mesh::freeElement !!! Element::~Element() { - if (child[0]) { + if (child[0]) DELETE child[0]; - } - if (child[1]) { - DELETE child[1]; - } + + if (child[1]) + DELETE child[1]; - if (newCoord) { - DELETE newCoord; - } + if (newCoord) + DELETE newCoord; if (elementData) { elementData->deleteDecorated(); diff --git a/AMDiS/src/Element.h b/AMDiS/src/Element.h index 8e9700c0677881099d854949d523d23f33439df2..41c4ede07c307fc41789b05ca843f19e876b47f4 100644 --- a/AMDiS/src/Element.h +++ b/AMDiS/src/Element.h @@ -22,10 +22,6 @@ #ifndef AMDIS_ELEMENT_H #define AMDIS_ELEMENT_H -// ============================================================================ -// ===== includes ============================================================= -// ============================================================================ - #include "Global.h" #include "RefinementManager.h" #include "Serializable.h" @@ -34,23 +30,14 @@ namespace AMDiS { - // ============================================================================ - // ===== forward declarations ================================================= - // ============================================================================ - class Mesh; class DOFAdmin; template<typename T> class WorldVector; class CoarseningManager; - template<typename T, GeoIndex d> class FixVec; #define AMDIS_UNDEFINED 5 - // ============================================================================ - // ===== class Element ======================================================== - // ============================================================================ - /** \ingroup Triangulation * \brief * Base class for Line, Triangle, Tetrahedron @@ -103,8 +90,6 @@ namespace AMDiS { */ Element* cloneWithDOFs(); - // ===== getting methods ====================================================== - /** \name getting methods * \{ */ @@ -232,8 +217,6 @@ namespace AMDiS { /** \} */ - // ===== setting methods ====================================================== - /** \name setting methods * \{ */ @@ -454,9 +437,9 @@ namespace AMDiS { /// Deserialize an element from a file. void deserialize(std::istream &in); + /// int calcMemoryUsage(); - // ===== protected methods ==================================================== protected: /// Sets Element's \ref dof pointer. Used by friend class Mesh. void setDOFPtrs(); diff --git a/AMDiS/src/MacroElement.h b/AMDiS/src/MacroElement.h index fbe77f60ea019c90d3cdfc6a6981cb2fcf42384b..43bba36884641f77d65acf997e2b3c9080e51d01 100644 --- a/AMDiS/src/MacroElement.h +++ b/AMDiS/src/MacroElement.h @@ -40,10 +40,6 @@ namespace AMDiS { template<typename T> class WorldVector; template<typename T> class DimVec; - // ============================================================================ - // ===== class MacroElement =================================================== - // ============================================================================ - /** \ingroup Triangulation * \brief * MacroElements form the macro triangulation of a Mesh. In a MacroElement @@ -64,8 +60,6 @@ namespace AMDiS { /// MacroElement& operator=(const MacroElement &el); - // ===== getting methods ====================================================== - /** \name getting methods * \{ */ @@ -117,8 +111,6 @@ namespace AMDiS { /** \} */ - // ===== setting methods ====================================================== - /** \name setting methods * \{ */ diff --git a/AMDiS/src/Mesh.cc b/AMDiS/src/Mesh.cc index d3b380b750f0d57b412e132edf1619819c2c0710..026832e139581cddc9d2873a7a8e9923f81c74f2 100644 --- a/AMDiS/src/Mesh.cc +++ b/AMDiS/src/Mesh.cc @@ -23,7 +23,6 @@ #include "Projection.h" #include "ElInfoStack.h" - namespace AMDiS { #define TIME_USED(f,s) ((double)((s)-(f))/(double)CLOCKS_PER_SEC) @@ -268,45 +267,91 @@ namespace AMDiS { me->setIndex(macroElements.size()); } - void Mesh::removeMacroElement(MacroElement* me) + void Mesh::removeMacroElements(std::vector<MacroElement*>& macros) { FUNCNAME("Mesh::removeMacroElement()"); TEST_EXIT(dim == 2)("Not yet implemented!\n"); - bool found = false; - - // Remove the macro element from mesh's list of all macro elements. - for (std::deque<MacroElement*>::iterator it = macroElements.begin(); - it != macroElements.end(); - ++it) { - if (*it == me) { - macroElements.erase(it, it + 1); - found = true; - break; - } + // Map that stores for each dof pointer (which may have a list of dofs) + // all macro element indices that own the dof. + std::map<const DegreeOfFreedom*, std::set<MacroElement*> > dofsOwner; + + // Determine all dof owner macro elements. + for (std::deque<MacroElement*>::iterator macroIt = macroElements.begin(); + macroIt != macroElements.end(); + ++macroIt) { + Element *el = (*macroIt)->getElement(); + for (int i = 0; i < 3; i++) + dofsOwner[el->getDOF(i)].insert(*macroIt); } + - TEST_EXIT(found)("Cannot find MacroElement that should be removed!\n"); - - // Go through all neighbours of the macro element and remove this macro element - // to be neighbour of some other macro element. - for (int i = 0; i < dim; i++) { - if (me->getNeighbour(i)) { - for (int j = 0; j < dim; j++) { - if (me->getNeighbour(i)->getNeighbour(j) == me) { - me->getNeighbour(i)->setNeighbour(j, NULL); + // Remove all the given macro elements. + for (std::vector<MacroElement*>::iterator macroIt = macros.begin(); + macroIt != macros.end(); + ++macroIt) { + bool found = false; + + // Remove the macro element from mesh's list of all macro elements. + for (std::deque<MacroElement*>::iterator it = macroElements.begin(); + it != macroElements.end(); + ++it) { + if (*it == *macroIt) { + macroElements.erase(it, it + 1); + found = true; + break; + } + } + + TEST_EXIT(found)("Cannot find MacroElement that should be removed!\n"); + + // Go through all neighbours of the macro element and remove this macro element + // to be neighbour of some other macro element. + for (int i = 0; i <= dim; i++) { + if ((*macroIt)->getNeighbour(i)) { + for (int j = 0; j <= dim; j++) { + if ((*macroIt)->getNeighbour(i)->getNeighbour(j) == *macroIt) { + (*macroIt)->getNeighbour(i)->setNeighbour(j, NULL); + } } + } else { + // There is no neighbour at this edge, so we have to decrease the number + // of edges in the mesh. + nEdges--; } + } + + nLeaves--; + nElements--; + + // Remove this macro element from the dof owner list. + for (std::map<const DegreeOfFreedom*, std::set<MacroElement*> >::iterator dofsIt = dofsOwner.begin(); + dofsIt != dofsOwner.end(); + ++dofsIt) { + std::set<MacroElement*>::iterator mIt = dofsIt->second.find(*macroIt); + if (mIt != dofsIt->second.end()) + dofsIt->second.erase(mIt); + } + + // And remove the macro element from memory + delete *macroIt; + } + + int nRemainDofs = 0; + // Check now all the dofs, that have no owner anymore and therefore have to + // be removed. + for (std::map<const DegreeOfFreedom*, std::set<MacroElement*> >::iterator dofsIt = dofsOwner.begin(); + dofsIt != dofsOwner.end(); + ++dofsIt) { + if (dofsIt->second.size() == 0) { + dofsOwner.erase(dofsIt++); } else { - // There is no neighbour at this edge, so we have to decrease the number - // of edges in the mesh. - nEdges--; + nRemainDofs++; } } - nLeaves--; - nElements--; + nVertices = nRemainDofs; } int Mesh::traverse(int level, Flag flag, int (*el_fct)(ElInfo*)) diff --git a/AMDiS/src/Mesh.h b/AMDiS/src/Mesh.h index d9d87abca22f904a2b9ee5f88887310d7afc9d8c..a7acddc47bed822b9dd784b3f05d56430ad4040d 100644 --- a/AMDiS/src/Mesh.h +++ b/AMDiS/src/Mesh.h @@ -415,11 +415,11 @@ namespace AMDiS { void addMacroElement(MacroElement* me); /* \brief - * Removes a macro element from the mesh. This works only for the case, that - * there are no global or local refinements, i.e., all macro elements have no - * children. + * Removes a set of macro elements from the mesh. This works only for the case, + * that there are no global or local refinements, i.e., all macro elements have + * no children. */ - void removeMacroElement(MacroElement* me); + void removeMacroElements(std::vector<MacroElement*>& macros); /// Frees the array of DOF pointers (see \ref createDOFPtrs) void freeDOFPtrs(DegreeOfFreedom **ptrs); diff --git a/AMDiS/src/ParallelDomainProblem.cc b/AMDiS/src/ParallelDomainProblem.cc index ac9b5573d9353f4dd9465edb5896156a9438d413..b793fadde6416f7c6286a5532f5ce603b95e663e 100644 --- a/AMDiS/src/ParallelDomainProblem.cc +++ b/AMDiS/src/ParallelDomainProblem.cc @@ -18,6 +18,7 @@ namespace AMDiS { : iterationIF(iIF), timeIF(tIF), mesh(m), + initialPartitionMesh(true), nRankDOFs(0) { mpiRank = MPI::COMM_WORLD.Get_rank(); @@ -95,23 +96,20 @@ namespace AMDiS { } } - bool removed = false; - do { - removed = false; - for (std::deque<MacroElement*>::iterator it = mesh->firstMacroElement(); - it != mesh->endOfMacroElements(); - ++it) { - PartitionElementData *partitionData = - dynamic_cast<PartitionElementData*> - ((*it)->getElement()->getElementData(PARTITION_ED)); - if (partitionData->getPartitionStatus() != IN) { - mesh->removeMacroElement(*it); - removed = true; - break; - } + std::vector<MacroElement*> macrosToRemove; + for (std::deque<MacroElement*>::iterator it = mesh->firstMacroElement(); + it != mesh->endOfMacroElements(); + ++it) { + PartitionElementData *partitionData = + dynamic_cast<PartitionElementData*> + ((*it)->getElement()->getElementData(PARTITION_ED)); + if (partitionData->getPartitionStatus() != IN) { + macrosToRemove.push_back(*it); } - } while (removed); - + } + + mesh->removeMacroElements(macrosToRemove); + int *gOrder = (int*)(malloc(sizeof(int) * rankDofs.size())); int *lOrder = (int*)(malloc(sizeof(int) * rankDofs.size())); diff --git a/AMDiS/src/RefinementManager.cc b/AMDiS/src/RefinementManager.cc index 1e2abc776cd1ca86e0b3f9277bd65c0e9d0add37..2ad6ea82787ab3dbd6803599437b997a2a5f11ca 100644 --- a/AMDiS/src/RefinementManager.cc +++ b/AMDiS/src/RefinementManager.cc @@ -34,10 +34,8 @@ namespace AMDiS { return static_cast<Flag>(0); globalMark = mark; - aMesh->traverse(-1, - Mesh::CALL_LEAF_EL | - Mesh::FILL_COORDS | - Mesh::FILL_BOUND, + aMesh->traverse(-1, + Mesh::CALL_LEAF_EL | Mesh::FILL_COORDS | Mesh::FILL_BOUND, globalRefineFct); return refineMesh(aMesh); } @@ -51,23 +49,22 @@ namespace AMDiS { mesh = aMesh; int n_elements = mesh->getNumberOfLeaves(); - ElInfo *el_info; - + ElInfo *elInfo; newCoords = false; - stack = NEW TraverseStack; doMoreRecursiveRefine = true; + while (doMoreRecursiveRefine) { doMoreRecursiveRefine = false; - el_info = stack->traverseFirst(mesh, -1, - Mesh::CALL_LEAF_EL | Mesh::FILL_NEIGH| Mesh::FILL_BOUND); - while (el_info) { - if (el_info->getElement()->getMark() > 0) { + elInfo = stack->traverseFirst(mesh, -1, + Mesh::CALL_LEAF_EL | Mesh::FILL_NEIGH | Mesh::FILL_BOUND); + while (elInfo) { + if (elInfo->getElement()->getMark() > 0) { doMoreRecursiveRefine = doMoreRecursiveRefine || - (el_info->getElement()->getMark() > 1); - el_info = refineFunction(el_info); - } - el_info = stack->traverseNext(el_info); + (elInfo->getElement()->getMark() > 1); + elInfo = refineFunction(elInfo); + } + elInfo = stack->traverseNext(elInfo); } }