Commit 4e04364c authored by Thomas Witkowski's avatar Thomas Witkowski
Browse files

Fixed bug for parallel reading macro files with periodic boundary conditions.

parent c71c0da0
...@@ -51,32 +51,32 @@ build_old_libs=yes ...@@ -51,32 +51,32 @@ build_old_libs=yes
pic_mode=default pic_mode=default
# Whether or not to optimize for fast installation. # Whether or not to optimize for fast installation.
fast_install=yes fast_install=needless
# The host system. # The host system.
host_alias= host_alias=
host=i686-redhat-linux-gnu host=x86_64-unknown-linux-gnu
host_os=linux-gnu host_os=linux-gnu
# The build system. # The build system.
build_alias= build_alias=
build=i686-redhat-linux-gnu build=x86_64-unknown-linux-gnu
build_os=linux-gnu build_os=linux-gnu
# A sed program that does not truncate output. # 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. # Sed that helps us avoid accidentally triggering echo(1) options like -n.
Xsed="$SED -e 1s/^X//" Xsed="$SED -e 1s/^X//"
# A grep program that handles long lines. # A grep program that handles long lines.
GREP="/bin/grep" GREP="/usr/bin/grep"
# An ERE matcher. # An ERE matcher.
EGREP="/bin/grep -E" EGREP="/usr/bin/grep -E"
# A literal string matcher. # A literal string matcher.
FGREP="/bin/grep -F" FGREP="/usr/bin/grep -F"
# A BSD- or MS-compatible name lister. # A BSD- or MS-compatible name lister.
NM="/usr/bin/nm -B" NM="/usr/bin/nm -B"
...@@ -128,7 +128,7 @@ old_postinstall_cmds="chmod 644 \$oldlib~\$RANLIB \$oldlib" ...@@ -128,7 +128,7 @@ old_postinstall_cmds="chmod 644 \$oldlib~\$RANLIB \$oldlib"
old_postuninstall_cmds="" old_postuninstall_cmds=""
# A C compiler. # A C compiler.
LTCC="gcc" LTCC="/licsoft/libraries/openmpi/1.2.6/64bit/bin/mpicc"
# LTCC compiler flags. # LTCC compiler flags.
LTCFLAGS="-g -O2" LTCFLAGS="-g -O2"
...@@ -204,7 +204,7 @@ runpath_var=LD_RUN_PATH ...@@ -204,7 +204,7 @@ runpath_var=LD_RUN_PATH
shlibpath_var=LD_LIBRARY_PATH shlibpath_var=LD_LIBRARY_PATH
# Is shlibpath searched before the hard-coded library search path? # Is shlibpath searched before the hard-coded library search path?
shlibpath_overrides_runpath=no shlibpath_overrides_runpath=yes
# Format of library name prefix. # Format of library name prefix.
libname_spec="lib\$name" libname_spec="lib\$name"
...@@ -233,10 +233,10 @@ finish_eval="" ...@@ -233,10 +233,10 @@ finish_eval=""
hardcode_into_libs=yes hardcode_into_libs=yes
# Compile-time system search path for libraries. # Compile-time system search path for libraries.
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" 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. # Run-time system search path for libraries.
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 " 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. # Whether dlopen is supported.
dlopen_support=unknown dlopen_support=unknown
...@@ -253,13 +253,13 @@ striplib="strip --strip-unneeded" ...@@ -253,13 +253,13 @@ striplib="strip --strip-unneeded"
# The linker used to build libraries. # The linker used to build libraries.
LD="/usr/bin/ld" LD="/usr/x86_64-suse-linux/bin/ld -m elf_x86_64"
# Commands used to build an old-style archive. # Commands used to build an old-style archive.
old_archive_cmds="\$AR \$AR_FLAGS \$oldlib\$oldobjs~\$RANLIB \$oldlib" old_archive_cmds="\$AR \$AR_FLAGS \$oldlib\$oldobjs~\$RANLIB \$oldlib"
# A language specific compiler. # A language specific compiler.
CC="gcc" CC="/licsoft/libraries/openmpi/1.2.6/64bit/bin/mpicc"
# Is the compiler the GNU compiler? # Is the compiler the GNU compiler?
with_gcc=yes with_gcc=yes
...@@ -274,7 +274,7 @@ wl="-Wl," ...@@ -274,7 +274,7 @@ wl="-Wl,"
pic_flag=" -fPIC -DPIC" pic_flag=" -fPIC -DPIC"
# Compiler flag to prevent dynamic linking. # Compiler flag to prevent dynamic linking.
link_static_flag="-static" link_static_flag=""
# Does compiler simultaneously support -c and -o options? # Does compiler simultaneously support -c and -o options?
compiler_c_o="yes" compiler_c_o="yes"
...@@ -8908,13 +8908,13 @@ build_old_libs=`case $build_libtool_libs in yes) echo no;; *) echo yes;; esac` ...@@ -8908,13 +8908,13 @@ build_old_libs=`case $build_libtool_libs in yes) echo no;; *) echo yes;; esac`
# ### BEGIN LIBTOOL TAG CONFIG: CXX # ### BEGIN LIBTOOL TAG CONFIG: CXX
# The linker used to build libraries. # The linker used to build libraries.
LD="/usr/bin/ld" LD="/usr/x86_64-suse-linux/bin/ld -m elf_x86_64"
# Commands used to build an old-style archive. # Commands used to build an old-style archive.
old_archive_cmds="\$AR \$AR_FLAGS \$oldlib\$oldobjs~\$RANLIB \$oldlib" old_archive_cmds="\$AR \$AR_FLAGS \$oldlib\$oldobjs~\$RANLIB \$oldlib"
# A language specific compiler. # A language specific compiler.
CC="g++" CC="/licsoft/libraries/openmpi/1.2.6/64bit/bin/mpicxx"
# Is the compiler the GNU compiler? # Is the compiler the GNU compiler?
with_gcc=yes with_gcc=yes
...@@ -8929,7 +8929,7 @@ wl="-Wl," ...@@ -8929,7 +8929,7 @@ wl="-Wl,"
pic_flag=" -fPIC -DPIC" pic_flag=" -fPIC -DPIC"
# Compiler flag to prevent dynamic linking. # Compiler flag to prevent dynamic linking.
link_static_flag="-static" link_static_flag=""
# Does compiler simultaneously support -c and -o options? # Does compiler simultaneously support -c and -o options?
compiler_c_o="yes" compiler_c_o="yes"
...@@ -9039,17 +9039,17 @@ file_list_spec="" ...@@ -9039,17 +9039,17 @@ file_list_spec=""
hardcode_action=immediate hardcode_action=immediate
# The directories searched by this compiler when creating a shared library. # The directories searched by this compiler when creating a shared library.
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/../../.." 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 # Dependencies to place before and after the objects being linked to
# create a shared library. # 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"
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"
predeps="" predeps=""
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 # The library search path used internally by the compiler when linking
# a shared library. # a shared library.
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/../../.." 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 # ### END LIBTOOL TAG CONFIG: CXX
...@@ -162,11 +162,14 @@ namespace AMDiS { ...@@ -162,11 +162,14 @@ namespace AMDiS {
void ElInfo3d::fillMacroInfo(const MacroElement * mel) void ElInfo3d::fillMacroInfo(const MacroElement * mel)
{ {
FUNCNAME("ElInfo3d::fillMacroInfo()"); FUNCNAME("ElInfo3d::fillMacroInfo()");
TEST_EXIT_DBG(mel)("No macro element given!\n");
Element *nb; Element *nb;
MacroElement *mnb; MacroElement *mnb;
Flag fill_opp_coords; Flag fill_opp_coords;
macroElement = const_cast<MacroElement*>( mel); macroElement = const_cast<MacroElement*>(mel);
element = const_cast<Element*>(mel->getElement()); element = const_cast<Element*>(mel->getElement());
parent = NULL; parent = NULL;
level = 0; level = 0;
...@@ -176,10 +179,9 @@ namespace AMDiS { ...@@ -176,10 +179,9 @@ namespace AMDiS {
if (fillFlag.isSet(Mesh::FILL_COORDS) || if (fillFlag.isSet(Mesh::FILL_COORDS) ||
fillFlag.isSet(Mesh::FILL_DET) || fillFlag.isSet(Mesh::FILL_DET) ||
fillFlag.isSet(Mesh::FILL_GRD_LAMBDA)) { fillFlag.isSet(Mesh::FILL_GRD_LAMBDA))
for (int i = 0; i < vertices; i++) for (int i = 0; i < vertices; i++)
coord[i] = mel->coord[i]; coord[i] = mel->coord[i];
}
int neighbours = mesh->getGeo(NEIGH); int neighbours = mesh->getGeo(NEIGH);
...@@ -188,19 +190,19 @@ namespace AMDiS { ...@@ -188,19 +190,19 @@ namespace AMDiS {
fill_opp_coords.setFlags(fillFlag & Mesh::FILL_OPP_COORDS); fill_opp_coords.setFlags(fillFlag & Mesh::FILL_OPP_COORDS);
for (int i = 0; i < neighbours; i++) { for (int i = 0; i < neighbours; i++) {
if ((mnb = const_cast<MacroElement*>( mel->getNeighbour(i)))) { if ((mnb = const_cast<MacroElement*>(mel->getNeighbour(i)))) {
neighbour[i] = const_cast<Element*>( mel->getNeighbour(i)->getElement()); neighbour[i] = const_cast<Element*>(mel->getNeighbour(i)->getElement());
nb = const_cast<Element*>( neighbour[i]); nb = const_cast<Element*>(neighbour[i]);
int k; int k;
k = oppVertex[i] = mel->getOppVertex(i); k = oppVertex[i] = mel->getOppVertex(i);
if (nb->getChild(0) && (k < 2)) { /*make nb nearest element.*/ if (nb->getChild(0) && (k < 2)) { /*make nb nearest element.*/
if (k == 1) { if (k == 1) {
neighbour[i] = const_cast<Element*>( nb->getChild(0)); neighbour[i] = const_cast<Element*>(nb->getChild(0));
nb = const_cast<Element*>( neighbour[i]); nb = const_cast<Element*>(neighbour[i]);
} else { } else {
neighbour[i] = const_cast<Element*>( nb->getChild(1)); neighbour[i] = const_cast<Element*>(nb->getChild(1));
nb = const_cast<Element*>( neighbour[i]); nb = const_cast<Element*>(neighbour[i]);
} }
k = oppVertex[i] = 3; k = oppVertex[i] = 3;
if (fill_opp_coords.isAnySet()) { if (fill_opp_coords.isAnySet()) {
...@@ -495,7 +497,7 @@ namespace AMDiS { ...@@ -495,7 +497,7 @@ namespace AMDiS {
TEST_EXIT_DBG(el_old->getChild(0))("missing child?\n"); TEST_EXIT_DBG(el_old->getChild(0))("missing child?\n");
element = const_cast<Element*>( el_old->getChild(ichild)); element = const_cast<Element*>(el_old->getChild(ichild));
macroElement = elInfoOld->macroElement; macroElement = elInfoOld->macroElement;
fillFlag = fillFlag_local; fillFlag = fillFlag_local;
parent = el_old; parent = el_old;
...@@ -546,7 +548,7 @@ namespace AMDiS { ...@@ -546,7 +548,7 @@ namespace AMDiS {
/* if (nb = el_old->child[ochild]) old version */ /* if (nb = el_old->child[ochild]) old version */
if (el_old->getChild(0) && if (el_old->getChild(0) &&
(nb = const_cast<Element*>( el_old->getChild(ochild)))) { (nb = const_cast<Element*>(el_old->getChild(ochild)))) {
if (nb->getChild(0)) { /* go down one level for direct neighbour */ if (nb->getChild(0)) { /* go down one level for direct neighbour */
if (fill_opp_coords.isAnySet()) { if (fill_opp_coords.isAnySet()) {
...@@ -558,7 +560,7 @@ namespace AMDiS { ...@@ -558,7 +560,7 @@ namespace AMDiS {
oppCoord[0][j] = (elInfoOld->coord[ochild][j] + elInfoOld->coord[k][j]) / 2; oppCoord[0][j] = (elInfoOld->coord[ochild][j] + elInfoOld->coord[k][j]) / 2;
} }
} }
(*neigh_local)[0] = const_cast<Element*>( nb->getChild(1)); (*neigh_local)[0] = const_cast<Element*>(nb->getChild(1));
oppVertex[0] = 3; oppVertex[0] = 3;
} else { } else {
if (fill_opp_coords.isAnySet()) if (fill_opp_coords.isAnySet())
...@@ -577,12 +579,12 @@ namespace AMDiS { ...@@ -577,12 +579,12 @@ namespace AMDiS {
/*----- nb[1],nb[2] are childs of old neighbours nb_old[cv[i]] ----------*/ /*----- nb[1],nb[2] are childs of old neighbours nb_old[cv[i]] ----------*/
for (int i = 1; i < 3; i++) { for (int i = 1; i < 3; i++) {
if ((nb = const_cast<Element*>( (*neigh_old)[cv[i]]))) { if ((nb = const_cast<Element*>((*neigh_old)[cv[i]]))) {
TEST_EXIT_DBG(nb->getChild(0))("nonconforming triangulation\n"); TEST_EXIT_DBG(nb->getChild(0))("nonconforming triangulation\n");
int k; int k;
for (k = 0; k < 2; k++) { /* look at both childs of old neighbour */ for (k = 0; k < 2; k++) { /* look at both childs of old neighbour */
nbk = const_cast<Element*>( nb->getChild(k)); nbk = const_cast<Element*>(nb->getChild(k));
if (nbk->getDOF(0) == el_old->getDOF(ichild)) { if (nbk->getDOF(0) == el_old->getDOF(ichild)) {
/* opp. vertex */ /* opp. vertex */
dof = const_cast<int*>(nb->getDOF(elInfoOld->oppVertex[cv[i]])); dof = const_cast<int*>(nb->getDOF(elInfoOld->oppVertex[cv[i]]));
...@@ -625,7 +627,7 @@ namespace AMDiS { ...@@ -625,7 +627,7 @@ namespace AMDiS {
// periodic ? // periodic ?
if (k == 2 || ov == -1) { if (k == 2 || ov == -1) {
for (k = 0; k < 2; k++) { /* look at both childs of old neighbour */ for (k = 0; k < 2; k++) { /* look at both childs of old neighbour */
nbk = const_cast<Element*>( nb->getChild(k)); nbk = const_cast<Element*>(nb->getChild(k));
if (nbk->getDOF(0) == el_old->getDOF(ichild) || if (nbk->getDOF(0) == el_old->getDOF(ichild) ||
mesh->associated(nbk->getDOF(0, 0), el_old->getDOF(ichild, 0))) { mesh->associated(nbk->getDOF(0, 0), el_old->getDOF(ichild, 0))) {
/* opp. vertex */ /* opp. vertex */
......
...@@ -24,7 +24,7 @@ namespace AMDiS { ...@@ -24,7 +24,7 @@ namespace AMDiS {
std::string periodicFile, std::string periodicFile,
int check) int check)
{ {
FUNCNAME("Mesh::readMacro()"); FUNCNAME("MacroReader::readMacro()");
TEST_EXIT(filename != "")("no file specified; filename NULL pointer\n"); TEST_EXIT(filename != "")("no file specified; filename NULL pointer\n");
...@@ -124,6 +124,14 @@ namespace AMDiS { ...@@ -124,6 +124,14 @@ namespace AMDiS {
ElementData *ld1 = element1->getElementData(); ElementData *ld1 = element1->getElementData();
ElementData *ld2 = element2->getElementData(); ElementData *ld2 = element2->getElementData();
TEST_EXIT_DBG(ld1)
("Should not happen: no element data pointer in macro element %d!\n",
element1->getIndex());
TEST_EXIT_DBG(ld2)
("Should not happen: no element data pointer in macro element %d!\n",
element2->getIndex());
LeafDataPeriodic *ldp1 = LeafDataPeriodic *ldp1 =
dynamic_cast<LeafDataPeriodic*>(ld1->getElementData(PERIODIC)); dynamic_cast<LeafDataPeriodic*>(ld1->getElementData(PERIODIC));
LeafDataPeriodic *ldp2 = LeafDataPeriodic *ldp2 =
...@@ -1172,7 +1180,7 @@ namespace AMDiS { ...@@ -1172,7 +1180,7 @@ namespace AMDiS {
Flag fill_flag; Flag fill_flag;
int error_detected = 0; int error_detected = 0;
MSG("checking mesh\n"); MSG("Checking mesh ...\n");
fill_flag = Mesh::CALL_EVERY_EL_PREORDER | Mesh::FILL_NEIGH | Mesh::FILL_BOUND; fill_flag = Mesh::CALL_EVERY_EL_PREORDER | Mesh::FILL_NEIGH | Mesh::FILL_BOUND;
......
...@@ -81,7 +81,9 @@ namespace AMDiS { ...@@ -81,7 +81,9 @@ namespace AMDiS {
/// Assignement operator /// Assignement operator
inline const Vector<T>& operator=(const Vector<T>& rhs) inline const Vector<T>& operator=(const Vector<T>& rhs)
{ {
TEST_EXIT_DBG(rhs.size == size)("invalid size\n"); TEST_EXIT_DBG(rhs.size == size)
("Invalid sizes %d != %d!\n", rhs.size, size);
T *rhsIt, *thisIt; T *rhsIt, *thisIt;
for (rhsIt = rhs.begin(), thisIt = this->begin(); for (rhsIt = rhs.begin(), thisIt = this->begin();
rhsIt != rhs.end(); rhsIt != rhs.end();
......
...@@ -747,7 +747,7 @@ namespace AMDiS { ...@@ -747,7 +747,7 @@ namespace AMDiS {
*(g_sp) = s; *(g_sp) = s;
if (dim == 3) if (dim == 3)
MSG("outside finest level on el %d: s=%.3e\n", el->getIndex(), s); MSG("Outside finest level on el %d: s = %.3e\n", el->getIndex(), s);
return false; /* ??? */ return false; /* ??? */
} else { } else {
...@@ -1193,6 +1193,7 @@ namespace AMDiS { ...@@ -1193,6 +1193,7 @@ namespace AMDiS {
// === Create a temporary mesh and load the macro file to it. === // === Create a temporary mesh and load the macro file to it. ===
Mesh testMesh(name, dim); Mesh testMesh(name, dim);
testMesh.setElementDataPrototype(new LeafDataEstimatableVec(new LeafDataCoarsenableVec));
DOFAdmin *localAdmin = new DOFAdmin(&testMesh, admin[0]->getName()); DOFAdmin *localAdmin = new DOFAdmin(&testMesh, admin[0]->getName());
localAdmin->setNumberOfDOFs(admin[0]->getNumberOfDOFs()); localAdmin->setNumberOfDOFs(admin[0]->getNumberOfDOFs());
testMesh.addDOFAdmin(localAdmin); testMesh.addDOFAdmin(localAdmin);
......
...@@ -240,6 +240,11 @@ namespace AMDiS { ...@@ -240,6 +240,11 @@ namespace AMDiS {
return macroElements[i]; return macroElements[i];
} }
std::deque<MacroElement*>& getMacroElements()
{
return macroElements;
}
/// Returns an iterator to the end of \ref macroElements /// Returns an iterator to the end of \ref macroElements
inline std::deque<MacroElement*>::iterator endOfMacroElements() inline std::deque<MacroElement*>::iterator endOfMacroElements()
{ {
......
...@@ -26,6 +26,9 @@ namespace AMDiS { ...@@ -26,6 +26,9 @@ namespace AMDiS {
traverse_level = level; traverse_level = level;
traverse_fill_flag = fill_flag; traverse_fill_flag = fill_flag;
TEST_EXIT_DBG(mesh)("No mesh!\n");
TEST_EXIT_DBG(traverse_mesh->getMacroElements().size() > 0)("Mesh is empty!\n");
if (stack_size < 1) if (stack_size < 1)
enlargeTraverseStack(); enlargeTraverseStack();
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment