From 53be46af86682703ab89c88e5e76f0ee8510d571 Mon Sep 17 00:00:00 2001 From: Thomas Witkowski <thomas.witkowski@gmx.de> Date: Wed, 8 Dec 2010 16:07:09 +0000 Subject: [PATCH] Fixed the multi-mesh bug. --- AMDiS/libtool | 44 ++++++++++++++++----------------- AMDiS/src/ElInfo.cc | 4 +-- AMDiS/src/ElInfo.h | 19 +++----------- AMDiS/src/ElInfo1d.cc | 43 ++++++++++++++++---------------- AMDiS/src/ElInfo2d.cc | 35 +++++++++++++------------- AMDiS/src/ElInfo3d.cc | 22 ++++++++--------- AMDiS/src/ZeroOrderAssembler.cc | 6 ++--- 7 files changed, 80 insertions(+), 93 deletions(-) diff --git a/AMDiS/libtool b/AMDiS/libtool index 5085abd4..d38e55be 100755 --- a/AMDiS/libtool +++ b/AMDiS/libtool @@ -51,32 +51,32 @@ build_old_libs=yes pic_mode=default # Whether or not to optimize for fast installation. -fast_install=needless +fast_install=yes # The host system. host_alias= -host=x86_64-unknown-linux-gnu +host=i686-redhat-linux-gnu host_os=linux-gnu # The build system. build_alias= -build=x86_64-unknown-linux-gnu +build=i686-redhat-linux-gnu build_os=linux-gnu # A sed program that does not truncate output. -SED="/usr/bin/sed" +SED="/bin/sed" # Sed that helps us avoid accidentally triggering echo(1) options like -n. Xsed="$SED -e 1s/^X//" # A grep program that handles long lines. -GREP="/usr/bin/grep" +GREP="/bin/grep" # An ERE matcher. -EGREP="/usr/bin/grep -E" +EGREP="/bin/grep -E" # A literal string matcher. -FGREP="/usr/bin/grep -F" +FGREP="/bin/grep -F" # A BSD- or MS-compatible name lister. NM="/usr/bin/nm -B" @@ -128,7 +128,7 @@ old_postinstall_cmds="chmod 644 \$oldlib~\$RANLIB \$oldlib" old_postuninstall_cmds="" # A C compiler. -LTCC="/licsoft/libraries/openmpi/1.2.6/64bit/bin/mpicc" +LTCC="gcc" # LTCC compiler flags. LTCFLAGS="-g -O2" @@ -204,7 +204,7 @@ runpath_var=LD_RUN_PATH shlibpath_var=LD_LIBRARY_PATH # Is shlibpath searched before the hard-coded library search path? -shlibpath_overrides_runpath=yes +shlibpath_overrides_runpath=no # Format of library name prefix. libname_spec="lib\$name" @@ -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.1.2 /usr/lib64 /lib64 /fastfs/wir/local/lib /usr/x86_64-suse-linux/lib" +sys_lib_search_path_spec="/u/witkowski/local/lib /u/witkowski/local/intel/mkl/10.0.1.014/lib/32 /usr/lib/gcc/i386-redhat-linux/4.1.2 /usr/lib /lib" # Run-time system search path for libraries. -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 " +sys_lib_dlsearch_path_spec="/lib /usr/lib /usr/lib/mysql /usr/lib/octave-2.9.9 /usr/lib/qt-3.3/lib /usr/lib/qt4/lib /usr/lib/xulrunner-1.9.2 " # Whether dlopen is supported. dlopen_support=unknown @@ -253,13 +253,13 @@ striplib="strip --strip-unneeded" # The linker used to build libraries. -LD="/usr/x86_64-suse-linux/bin/ld -m elf_x86_64" +LD="/usr/bin/ld" # Commands used to build an old-style archive. old_archive_cmds="\$AR \$AR_FLAGS \$oldlib\$oldobjs~\$RANLIB \$oldlib" # A language specific compiler. -CC="/licsoft/libraries/openmpi/1.2.6/64bit/bin/mpicc" +CC="gcc" # Is the compiler the GNU compiler? with_gcc=yes @@ -274,7 +274,7 @@ wl="-Wl," pic_flag=" -fPIC -DPIC" # Compiler flag to prevent dynamic linking. -link_static_flag="" +link_static_flag="-static" # Does compiler simultaneously support -c and -o options? compiler_c_o="yes" @@ -8908,13 +8908,13 @@ build_old_libs=`case $build_libtool_libs in yes) echo no;; *) echo yes;; esac` # ### BEGIN LIBTOOL TAG CONFIG: CXX # The linker used to build libraries. -LD="/usr/x86_64-suse-linux/bin/ld -m elf_x86_64" +LD="/usr/bin/ld" # Commands used to build an old-style archive. old_archive_cmds="\$AR \$AR_FLAGS \$oldlib\$oldobjs~\$RANLIB \$oldlib" # A language specific compiler. -CC="/licsoft/libraries/openmpi/1.2.6/64bit/bin/mpicxx" +CC="g++" # Is the compiler the GNU compiler? with_gcc=yes @@ -8929,7 +8929,7 @@ wl="-Wl," pic_flag=" -fPIC -DPIC" # Compiler flag to prevent dynamic linking. -link_static_flag="" +link_static_flag="-static" # Does compiler simultaneously support -c and -o options? compiler_c_o="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 /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/../../.." +compiler_lib_search_dirs="/u/witkowski/local/lib /u/witkowski/local/intel/mkl/10.0.1.014/lib/32 /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/../../.." # 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.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" +predep_objects="/usr/lib/gcc/i386-redhat-linux/4.1.2/../../../crti.o /usr/lib/gcc/i386-redhat-linux/4.1.2/crtbeginS.o" +postdep_objects="/usr/lib/gcc/i386-redhat-linux/4.1.2/crtendS.o /usr/lib/gcc/i386-redhat-linux/4.1.2/../../../crtn.o" predeps="" -postdeps="-lmpi_cxx -lmpi -lopen-rte -lopen-pal -libverbs -lrt -lnuma -ldl -lnsl -lutil -ldl -lstdc++ -lm -lgcc_s -lpthread -lc -lgcc_s" +postdeps="-lstdc++ -lm -lgcc_s -lc -lgcc_s" # The library search path used internally by the compiler when linking # a shared library. -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/../../.." +compiler_lib_search_path="-L/u/witkowski/local/lib -L/u/witkowski/local/intel/mkl/10.0.1.014/lib/32 -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/../../.." # ### END LIBTOOL TAG CONFIG: CXX diff --git a/AMDiS/src/ElInfo.cc b/AMDiS/src/ElInfo.cc index 567f7f74..a979dc81 100644 --- a/AMDiS/src/ElInfo.cc +++ b/AMDiS/src/ElInfo.cc @@ -14,9 +14,9 @@ namespace AMDiS { - std::vector<std::map<unsigned long, mtl::dense2D<double> > > ElInfo::subElemMatrices(5); + std::vector<std::map<std::pair<int, unsigned long>, mtl::dense2D<double> > > ElInfo::subElemMatrices(5); - std::vector<std::map<unsigned long, mtl::dense2D<double> > > ElInfo::subElemGradMatrices(5); + std::vector<std::map<std::pair<int, unsigned long>, mtl::dense2D<double> > > ElInfo::subElemGradMatrices(5); ElInfo::ElInfo(Mesh *aMesh) : mesh(aMesh), diff --git a/AMDiS/src/ElInfo.h b/AMDiS/src/ElInfo.h index e536d155..ad6e1017 100644 --- a/AMDiS/src/ElInfo.h +++ b/AMDiS/src/ElInfo.h @@ -248,12 +248,12 @@ namespace AMDiS { virtual mtl::dense2D<double>& getSubElemCoordsMat(int degree) const { - return subElemMatrices[degree][refinementPath]; + return subElemMatrices[degree][std::make_pair(refinementPathLength, refinementPath)]; } virtual mtl::dense2D<double>& getSubElemGradCoordsMat(int degree) const { - return subElemGradMatrices[degree][refinementPath]; + return subElemGradMatrices[degree][std::make_pair(refinementPathLength, refinementPath)]; } /** \} */ @@ -542,21 +542,10 @@ namespace AMDiS { int refinementPathLength; - /** \brief - * This is a transformation matrix used during dual traverse. It is set, if - * the current element is the smaller element of an element pair in the traverse. - * Then this matrix defines a mapping for points defined in barycentric - * coordinates on the larger element, to the barycentric coordinates of the smaller - * element. - */ - mtl::dense2D<double> subElemCoordsMat; - - mtl::dense2D<double> subElemGradCoordsMat; - public: - static std::vector<std::map<unsigned long, mtl::dense2D<double> > > subElemMatrices; + static std::vector<std::map<std::pair<int, unsigned long>, mtl::dense2D<double> > > subElemMatrices; - static std::vector<std::map<unsigned long, mtl::dense2D<double> > > subElemGradMatrices; + static std::vector<std::map<std::pair<int, unsigned long>, mtl::dense2D<double> > > subElemGradMatrices; /** \brief * child_vertex[el_type][child][i] = father's local vertex index of new diff --git a/AMDiS/src/ElInfo1d.cc b/AMDiS/src/ElInfo1d.cc index 2ddefba0..5581a0a5 100644 --- a/AMDiS/src/ElInfo1d.cc +++ b/AMDiS/src/ElInfo1d.cc @@ -48,8 +48,8 @@ namespace AMDiS { Element *nb; MacroElement *mnb; - macroElement = const_cast<MacroElement*>( mel); - element = const_cast<Element*>( mel->getElement()); + macroElement = const_cast<MacroElement*>(mel); + element = const_cast<Element*>(mel->getElement()); parent = NULL; level = 0; @@ -68,12 +68,12 @@ namespace AMDiS { int neighbours = mesh->getGeo(NEIGH); for (int i = 0; i < neighbours; i++) { nb = NULL; - if ((mnb = const_cast<MacroElement*>( mel->getNeighbour(i)))) { + if ((mnb = const_cast<MacroElement*>(mel->getNeighbour(i)))) { if (fillFlag.isSet(Mesh::FILL_OPP_COORDS)) { oppC = mnb->coord[i]; } - nb = const_cast<Element*>( mnb->getElement()); + nb = const_cast<Element*>(mnb->getElement()); while (!(nb->isLeaf())) { // make nb nearest element if (fillFlag.isSet(Mesh::FILL_OPP_COORDS)) { @@ -83,7 +83,7 @@ namespace AMDiS { oppC = (mel->coord[i] + oppC) * 0.5; } } - nb = const_cast<Element*>( nb->getChild(1-i)); + nb = const_cast<Element*>(nb->getChild(1-i)); } if (fillFlag.isSet(Mesh::FILL_OPP_COORDS)) { @@ -190,7 +190,7 @@ namespace AMDiS { /* return the absulute value of the determinant from the */ /* transformation to the reference element */ /****************************************************************************/ - double ElInfo1d::getElementNormal( WorldVector<double> &elementNormal) const + double ElInfo1d::getElementNormal(WorldVector<double> &elementNormal) const { FUNCNAME("ElInfo::getElementNormal()"); @@ -254,7 +254,7 @@ namespace AMDiS { if (fillFlag.isSet(Mesh::FILL_OPP_COORDS)) oppC = elInfoOld->coord[i]; } else { - nb = const_cast<Element*>( elInfoOld->getNeighbour(i)); + nb = const_cast<Element*>(elInfoOld->getNeighbour(i)); if (nb && fillFlag.isSet(Mesh::FILL_OPP_COORDS)) oppC = elInfoOld->oppCoord[i]; @@ -268,7 +268,7 @@ namespace AMDiS { else oppC = (coord[i] + oppC) * 0.5; } - nb = const_cast<Element*>( nb->getChild(1-i)); + nb = const_cast<Element*>(nb->getChild(1-i)); } if (fillFlag.isSet(Mesh::FILL_OPP_COORDS)) @@ -284,9 +284,8 @@ namespace AMDiS { boundary[1 - ichild] = INTERIOR; if (elInfoOld->getProjection(0) && - elInfoOld->getProjection(0)->getType() == VOLUME_PROJECTION) { - projection[0] = elInfoOld->getProjection(0); - } + elInfoOld->getProjection(0)->getType() == VOLUME_PROJECTION) + projection[0] = elInfoOld->getProjection(0); } } @@ -297,7 +296,7 @@ namespace AMDiS { using namespace mtl; - if (subElemMatrices[degree].count(refinementPath) == 0) { + if (subElemMatrices[degree].count(std::make_pair(refinementPathLength, refinementPath)) == 0) { switch (degree) { case 1: { @@ -306,15 +305,15 @@ namespace AMDiS { for (int i = 0; i < refinementPathLength; i++) { if (refinementPath & (1 << i)) { - tmpMat = mat_d1_right * mat; + tmpMat = mat * mat_d1_right; mat = tmpMat; } else { - tmpMat = mat_d1_left * mat; + tmpMat = mat * mat_d1_left; mat = tmpMat; } } - subElemMatrices[1][refinementPath] = mat; + subElemMatrices[1][std::make_pair(refinementPathLength, refinementPath)] = mat; } break; @@ -325,15 +324,15 @@ namespace AMDiS { for (int i = 0; i < refinementPathLength; i++) { if (refinementPath & (1 << i)) { - tmpMat = mat_d2_right * mat; + tmpMat = mat * mat_d2_right; mat = tmpMat; } else { - tmpMat = mat_d2_left * mat; + tmpMat = mat * mat_d2_left; mat = tmpMat; } } - subElemMatrices[2][refinementPath] = mat; + subElemMatrices[2][std::make_pair(refinementPathLength, refinementPath)] = mat; } break; default: @@ -341,7 +340,7 @@ namespace AMDiS { } } - return subElemMatrices[degree][refinementPath]; + return subElemMatrices[degree][std::make_pair(refinementPathLength, refinementPath)]; } @@ -353,16 +352,16 @@ namespace AMDiS { using namespace mtl; - if (subElemGradMatrices[degree].count(refinementPath) == 0) { + if (subElemGradMatrices[degree].count(std::make_pair(refinementPathLength, refinementPath)) == 0) { dense2D<double> mat(mat_d1); for (int i = 0; i < refinementPathLength; i++) mat *= 0.5; - subElemGradMatrices[1][refinementPath] = mat; + subElemGradMatrices[1][std::make_pair(refinementPathLength, refinementPath)] = mat; } - return subElemGradMatrices[degree][refinementPath]; + return subElemGradMatrices[degree][std::make_pair(refinementPathLength, refinementPath)]; } diff --git a/AMDiS/src/ElInfo2d.cc b/AMDiS/src/ElInfo2d.cc index 1b93c930..45964618 100644 --- a/AMDiS/src/ElInfo2d.cc +++ b/AMDiS/src/ElInfo2d.cc @@ -765,7 +765,7 @@ namespace AMDiS { using namespace mtl; - if (subElemMatrices[degree].count(refinementPath) == 0) { + if (subElemMatrices[degree].count(std::make_pair(refinementPathLength, refinementPath)) == 0) { switch (degree) { case 1: { @@ -774,15 +774,15 @@ namespace AMDiS { for (int i = 0; i < refinementPathLength; i++) { if (refinementPath & (1 << i)) { - tmpMat = mat_d1_right * mat; + tmpMat = mat * mat_d1_right; mat = tmpMat; } else { - tmpMat = mat_d1_left * mat; + tmpMat = mat * mat_d1_left; mat = tmpMat; } } - subElemMatrices[1][refinementPath] = mat; + subElemMatrices[1][std::make_pair(refinementPathLength, refinementPath)] = mat; } break; case 2: @@ -792,15 +792,15 @@ namespace AMDiS { for (int i = 0; i < refinementPathLength; i++) { if (refinementPath & (1 << i)) { - tmpMat = mat_d2_right * mat; + tmpMat = mat * mat_d2_right; mat = tmpMat; } else { - tmpMat = mat_d2_left * mat; + tmpMat = mat * mat_d2_left; mat = tmpMat; } } - subElemMatrices[2][refinementPath] = mat; + subElemMatrices[2][std::make_pair(refinementPathLength, refinementPath)] = mat; } break; case 3: @@ -810,15 +810,15 @@ namespace AMDiS { for (int i = 0; i < refinementPathLength; i++) { if (refinementPath & (1 << i)) { - tmpMat = mat_d3_right * mat; + tmpMat = mat * mat_d3_right; mat = tmpMat; } else { - tmpMat = mat_d3_left * mat; + tmpMat = mat * mat_d3_left; mat = tmpMat; } } - subElemMatrices[3][refinementPath] = mat; + subElemMatrices[3][std::make_pair(refinementPathLength, refinementPath)] = mat; } break; case 4: @@ -828,15 +828,15 @@ namespace AMDiS { for (int i = 0; i < refinementPathLength; i++) { if (refinementPath & (1 << i)) { - tmpMat = mat_d4_right * mat; + tmpMat = mat * mat_d4_right; mat = tmpMat; } else { - tmpMat = mat_d4_left * mat; + tmpMat = mat * mat_d4_left; mat = tmpMat; } } - subElemMatrices[4][refinementPath] = mat; + subElemMatrices[4][std::make_pair(refinementPathLength, refinementPath)] = mat; } break; @@ -845,7 +845,7 @@ namespace AMDiS { } } - return subElemMatrices[degree][refinementPath]; + return subElemMatrices[degree][std::make_pair(refinementPathLength, refinementPath)]; } @@ -857,7 +857,7 @@ namespace AMDiS { using namespace mtl; - if (subElemGradMatrices[degree].count(refinementPath) == 0) { + if (subElemGradMatrices[degree].count(std::make_pair(refinementPathLength, refinementPath)) == 0) { dense2D<double> mat(3, 3), tmpMat(3, 3); mat = 1; @@ -881,10 +881,9 @@ namespace AMDiS { mat = tmpMat; } - subElemGradMatrices[1][refinementPath] = mat; + subElemGradMatrices[1][std::make_pair(refinementPathLength, refinementPath)] = mat; } - return subElemGradMatrices[degree][refinementPath]; - + return subElemGradMatrices[degree][std::make_pair(refinementPathLength, refinementPath)]; } } diff --git a/AMDiS/src/ElInfo3d.cc b/AMDiS/src/ElInfo3d.cc index 792ed4a1..2a3148be 100644 --- a/AMDiS/src/ElInfo3d.cc +++ b/AMDiS/src/ElInfo3d.cc @@ -738,7 +738,7 @@ namespace AMDiS { using namespace mtl; - if (subElemMatrices[degree].count(refinementPath) == 0) { + if (subElemMatrices[degree].count(std::make_pair(refinementPathLength, refinementPath)) == 0) { switch (degree) { case 1: { @@ -748,18 +748,18 @@ namespace AMDiS { for (int i = 0; i < refinementPathLength; i++) { if (refinementPath & (1 << i)) { if ((level + i) % 3 == 0) - tmpMat = mat_d1_l0_right * mat; + tmpMat = mat * mat_d1_l0_right; else - tmpMat = mat_d1_l12_right * mat; + tmpMat = mat * mat_d1_l12_right; mat = tmpMat; } else { - tmpMat = mat_d1_left * mat; + tmpMat = mat * mat_d1_left; mat = tmpMat; } } - subElemMatrices[degree][refinementPath] = mat; + subElemMatrices[degree][std::make_pair(refinementPathLength, refinementPath)] = mat; } break; case 4: @@ -770,18 +770,18 @@ namespace AMDiS { for (int i = 0; i < refinementPathLength; i++) { if (refinementPath & (1 << i)) { if ((level + i) % 3 == 0) - tmpMat = mat_d4_l0_right * mat; + tmpMat = mat * mat_d4_l0_right; else - tmpMat = mat_d4_l12_right * mat; + tmpMat = mat * mat_d4_l12_right; mat = tmpMat; } else { - tmpMat = mat_d4_left * mat; + tmpMat = mat * mat_d4_left; mat = tmpMat; } } - subElemMatrices[degree][refinementPath] = mat; + subElemMatrices[degree][std::make_pair(refinementPathLength, refinementPath)] = mat; } break; default: @@ -789,7 +789,7 @@ namespace AMDiS { } } - return subElemMatrices[degree][refinementPath]; + return subElemMatrices[degree][std::make_pair(refinementPathLength, refinementPath)]; } @@ -799,7 +799,7 @@ namespace AMDiS { ERROR_EXIT("Not yet implemented!\n"); - return subElemGradMatrices[degree][refinementPath]; + return subElemGradMatrices[degree][std::make_pair(refinementPathLength, refinementPath)]; } } diff --git a/AMDiS/src/ZeroOrderAssembler.cc b/AMDiS/src/ZeroOrderAssembler.cc index 24916f89..a771684d 100644 --- a/AMDiS/src/ZeroOrderAssembler.cc +++ b/AMDiS/src/ZeroOrderAssembler.cc @@ -65,12 +65,12 @@ namespace AMDiS { // create new assembler if (!optimized) { - newAssembler = new StandardZOA(op, assembler, quad); + newAssembler = new StandardZOA(op, assembler, quad); } else { if (pwConst) - newAssembler = new PrecalcZOA(op, assembler, quad); + newAssembler = new PrecalcZOA(op, assembler, quad); else - newAssembler = new FastQuadZOA(op, assembler, quad); + newAssembler = new FastQuadZOA(op, assembler, quad); } subAssemblers->push_back(newAssembler); -- GitLab