Commit b2a88ee2 authored by Thomas Witkowski's avatar Thomas Witkowski

n

parent 9cd22562
......@@ -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 p2d072:
# 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,25 +82,25 @@ 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
gcc_dir=`gcc -print-file-name=. | /bin/sed 's,/\.$,,'`
gcc_dir=`gcc -print-file-name=. | /usr/bin/sed 's,/\.$,,'`
gcc_ver=`gcc -dumpversion`
# 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"
......@@ -174,7 +174,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"
......@@ -328,10 +328,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=`echo " /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/" | $SED -e "s@${gcc_dir}@\${gcc_dir}@g;s@${gcc_ver}@\${gcc_ver}@g"`
sys_lib_search_path_spec=`echo "/lib64 /usr/lib64 /usr/local/lib64" | $SED -e "s@${gcc_dir}@\${gcc_dir}@g;s@${gcc_ver}@\${gcc_ver}@g"`
# 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="/lib64 /usr/lib64 /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=""
......@@ -6763,7 +6763,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 p2d072:
# Shell to use when invoking shell scripts.
SHELL="/bin/sh"
......@@ -6785,12 +6785,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.
......@@ -6801,25 +6801,25 @@ 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
gcc_dir=`gcc -print-file-name=. | /bin/sed 's,/\.$,,'`
gcc_dir=`gcc -print-file-name=. | /usr/bin/sed 's,/\.$,,'`
gcc_ver=`gcc -dumpversion`
# 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"
......@@ -6893,7 +6893,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"
......@@ -6948,11 +6948,11 @@ striplib="strip --strip-unneeded"
# Dependencies to place before the objects being linked to create a
# shared library.
predep_objects=`echo "/usr/lib/gcc/i386-redhat-linux/4.1.2/../../../crti.o /usr/lib/gcc/i386-redhat-linux/4.1.2/crtbeginS.o" | $SED -e "s@${gcc_dir}@\${gcc_dir}@g;s@${gcc_ver}@\${gcc_ver}@g"`
predep_objects=`echo "/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" | $SED -e "s@${gcc_dir}@\${gcc_dir}@g;s@${gcc_ver}@\${gcc_ver}@g"`
# Dependencies to place after the objects being linked to create a
# shared library.
postdep_objects=`echo "/usr/lib/gcc/i386-redhat-linux/4.1.2/crtendS.o /usr/lib/gcc/i386-redhat-linux/4.1.2/../../../crtn.o" | $SED -e "s@${gcc_dir}@\${gcc_dir}@g;s@${gcc_ver}@\${gcc_ver}@g"`
postdep_objects=`echo "/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" | $SED -e "s@${gcc_dir}@\${gcc_dir}@g;s@${gcc_ver}@\${gcc_ver}@g"`
# Dependencies to place before the objects being linked to create a
# shared library.
......@@ -6960,11 +6960,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=`echo "-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/../../.." | $SED -e "s@${gcc_dir}@\${gcc_dir}@g;s@${gcc_ver}@\${gcc_ver}@g"`
compiler_lib_search_path=`echo "-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/../../.." | $SED -e "s@${gcc_dir}@\${gcc_dir}@g;s@${gcc_ver}@\${gcc_ver}@g"`
# Method to check whether dependent libraries are shared objects.
deplibs_check_method="pass_all"
......@@ -7044,10 +7044,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=`echo " /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/" | $SED -e "s@${gcc_dir}@\${gcc_dir}@g;s@${gcc_ver}@\${gcc_ver}@g"`
sys_lib_search_path_spec=`echo "/lib64 /usr/lib64 /usr/local/lib64" | $SED -e "s@${gcc_dir}@\${gcc_dir}@g;s@${gcc_ver}@\${gcc_ver}@g"`
# 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="/lib64 /usr/lib64 /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=""
......@@ -7071,7 +7071,7 @@ include_expsyms=""
# ### BEGIN LIBTOOL TAG CONFIG: F77
# Libtool was configured on host NWRW15:
# Libtool was configured on host p2d072:
# Shell to use when invoking shell scripts.
SHELL="/bin/sh"
......@@ -7093,12 +7093,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.
......@@ -7109,7 +7109,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"
......@@ -7118,16 +7118,16 @@ LTCFLAGS="-g -O2"
CC="g77"
# Is the compiler the GNU C compiler?
with_gcc=yes
with_gcc=
gcc_dir=`gcc -print-file-name=. | /bin/sed 's,/\.$,,'`
gcc_dir=`gcc -print-file-name=. | /usr/bin/sed 's,/\.$,,'`
gcc_ver=`gcc -dumpversion`
# 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"
......@@ -7355,10 +7355,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=`echo " /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/" | $SED -e "s@${gcc_dir}@\${gcc_dir}@g;s@${gcc_ver}@\${gcc_ver}@g"`
sys_lib_search_path_spec=`echo "/lib64 /usr/lib64 /usr/local/lib64" | $SED -e "s@${gcc_dir}@\${gcc_dir}@g;s@${gcc_ver}@\${gcc_ver}@g"`
# 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="/lib64 /usr/lib64 /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=""
......
......@@ -36,7 +36,8 @@ namespace AMDiS {
mesh(fe->getMesh()),
refinementManager(refineManager),
initialPartitionMesh(true),
nRankDOFs(0)
nRankDOFs(0),
rstart(0)
{
FUNCNAME("ParallelDomainBase::ParalleDomainBase()");
......@@ -84,22 +85,19 @@ namespace AMDiS {
createLocalGlobalNumbering(rankDOFs, boundaryDOFs, nRankDOFs, nOverallDOFs);
// === Create interior boundary information ===
createInteriorBoundaryInfo(rankDOFs, boundaryDOFs);
// === Remove all macro elements that are not part of the rank partition. ===
removeMacroElements();
#if (DEBUG != 0)
DbgTestElementMap(elMap);
DbgTestInteriorBoundary();
#endif
exit(0);
// === Remove all macro elements that are not part of the rank partition. ===
removeMacroElements();
// === Reset all DOFAdmins of the mesh. ===
int nAdmins = mesh->getNumberOfDOFAdmin();
......@@ -132,8 +130,6 @@ namespace AMDiS {
DbgTestCommonDofs();
#endif
exit(0);
// === Create petsc matrix. ===
int ierr;
......@@ -238,11 +234,14 @@ namespace AMDiS {
DOFVector<double>::Iterator dofIt(vec, USED_DOFS);
int counter = 0;
for (dofIt.reset(); !dofIt.end(); ++dofIt)
*dofIt = vecPointer[counter++];
for (dofIt.reset(); !dofIt.end(); ++dofIt) {
*dofIt = vecPointer[mapGlobalLocalDOFs[rstart + counter]];
counter++;
}
VecRestoreArray(petscSolVec, &vecPointer);
#if 0
std::vector<double*> sendBuffers(sendDofs.size());
std::vector<double*> recvBuffers(recvDofs.size());
......@@ -291,6 +290,7 @@ namespace AMDiS {
for (int i = 0; i < static_cast<int>(sendBuffers.size()); i++)
delete [] sendBuffers[i];
#endif
}
......@@ -517,20 +517,50 @@ namespace AMDiS {
// Stores to each DOF pointer the set of ranks the DOF is part of.
std::map<const DegreeOfFreedom*, std::set<int> > partitionDOFs;
DofContainer rankAllDofs;
createDOFMemberInfo(partitionDOFs, rankDOFs, boundaryDOFs);
createDOFMemberInfo(partitionDOFs, rankDOFs, rankAllDofs, boundaryDOFs);
nRankDOFs = rankDOFs.size();
nOverallDOFs = partitionDOFs.size();
// === Get starting position for global rank dof ordering. ====
int rstart = 0;
// int rstart = 0;
mpiComm.Scan(&nRankDOFs, &rstart, 1, MPI_INT, MPI_SUM);
rstart -= nRankDOFs;
typedef std::map<const DegreeOfFreedom*, DegreeOfFreedom> DofIndexMap;
DofIndexMap rankDofsNewLocalIndex, rankDofsNewGlobalIndex;
int i = 0;
for (DofContainer::iterator dofIt = rankAllDofs.begin();
dofIt != rankAllDofs.end(); ++dofIt) {
rankDofsNewLocalIndex[*dofIt] = i++;
isRankDof[i] = true;
}
i = 0;
for (DofContainer::iterator dofIt = rankDOFs.begin();
dofIt != rankDOFs.end(); ++dofIt) {
rankDofsNewGlobalIndex[*dofIt] = i + rstart;
i++;
}
if (mpiRank == 0) {
for (DofContainer::iterator dofIt = rankAllDofs.begin();
dofIt != rankAllDofs.end(); ++dofIt) {
std::cout << "OLD DOF = " << **dofIt << " NEW L DOF = " << rankDofsNewLocalIndex[*dofIt];
if (rankDofsNewGlobalIndex.find(*dofIt) != rankDofsNewGlobalIndex.end())
std::cout << " NEW G DOF = " << rankDofsNewGlobalIndex[*dofIt];
std::cout << std::endl;
}
}
exit(0);
// === Create information which dof indices must be send and which must ===
// === be received. ===
......@@ -549,21 +579,16 @@ namespace AMDiS {
if (it->second == mpiRank) {
// If the boundary dof is a rank dof, it must be send to other ranks.
// search for new dof index in ranks partition for this boundary dof
DegreeOfFreedom newDofIndex = 0;
for (int i = 0; i < nRankDOFs; i++) {
if (rankDOFs[i] == it->first) {
newDofIndex = rstart + i;
break;
}
}
// Search for all ranks that have this dof too.
for (std::set<int>::iterator itRanks = partitionDOFs[it->first].begin();
itRanks != partitionDOFs[it->first].end();
++itRanks) {
if (*itRanks != mpiRank)
sendNewDofs[*itRanks][it->first] = newDofIndex;
if (*itRanks != mpiRank) {
TEST_EXIT_DBG(rankDofsNewGlobalIndex.count(it->first) == 1)
("DOF Key not found!\n");
sendNewDofs[*itRanks][it->first] = rankDofsNewGlobalIndex[it->first];
}
}
} else {
// If the boundary dof is not a rank dof, its new dof index, and later
......@@ -575,6 +600,7 @@ namespace AMDiS {
}
}
// === Send and receive the dof indices at boundary. ===
std::vector<int*> sendBuffers(sendNewDofs.size()), recvBuffers(recvNewDofs.size());
......@@ -585,7 +611,7 @@ namespace AMDiS {
MPI::Request request[sendNewDofs.size() + recvNewDofs.size()];
int requestCounter = 0;
int i = 0;
i = 0;
for (std::map<int, std::map<const DegreeOfFreedom*, DegreeOfFreedom> >::iterator
sendIt = sendNewDofs.begin();
sendIt != sendNewDofs.end();
......@@ -637,15 +663,8 @@ namespace AMDiS {
mapLocalGlobalDOFs.clear();
mapGlobalLocalDOFs.clear();
isRankDOF.clear();
isRankDof.clear();
for (int i = 0; i < nRankDOFs; i++) {
*const_cast<DegreeOfFreedom*>(rankDOFs[i]) = i;
mapLocalGlobalDOFs[i] = rstart + i;
mapGlobalLocalDOFs[rstart + i] = i;
isRankDOF[i] = true;
}
#if 0
// === Change dof indices at boundary from other ranks. ===
// Within this small data structure we track which dof index was already changed.
......@@ -669,7 +688,6 @@ namespace AMDiS {
DegreeOfFreedom oldDof = recvBuffers[i][j * 2];
DegreeOfFreedom newGlobalDof = recvBuffers[i][j * 2 + 1];
DegreeOfFreedom newLocalDof = mapLocalGlobalDOFs.size();
bool found = false;
......@@ -682,11 +700,9 @@ namespace AMDiS {
dofChanged[dofIt->first] = true;
recvDofs[recvIt->first].push_back(dofIt->first);
*(const_cast<DegreeOfFreedom*>(dofIt->first)) = newLocalDof;
rankDofsNewGlobalIndex[dofIt->first] = newGlobalDof;
isRankDof[rankDofsNewLocalIndex[dofIt->first]] = false;
mapLocalGlobalDOFs[newLocalDof] = newGlobalDof;
mapGlobalLocalDOFs[newGlobalDof] = newLocalDof;
isRankDOF[newLocalDof] = false;
found = true;
break;
}
......@@ -697,7 +713,16 @@ namespace AMDiS {
delete [] recvBuffers[i];
}
#endif
for (DofIndexMap::iterator dofIt = rankDofsNewLocalIndex.begin();
dofIt != rankDofsNewLocalIndex.end(); ++dofIt) {
DegreeOfFreedom localDof = dofIt->second;
DegreeOfFreedom globalDof = rankDofsNewGlobalIndex[dofIt->first];
*const_cast<DegreeOfFreedom*>(dofIt->first) = localDof;
mapLocalGlobalDOFs[localDof] = globalDof;
mapGlobalLocalDOFs[globalDof] = localDof;
}
}
......@@ -867,7 +892,7 @@ namespace AMDiS {
mapLocalGlobalDOFs.clear();
mapGlobalLocalDOFs.clear();
isRankDOF.clear();
isRankDof.clear();
int i = 0;
for (std::set<const DegreeOfFreedom*>::iterator dofIt = rankDOFs.begin();
......@@ -875,7 +900,7 @@ namespace AMDiS {
*(const_cast<DegreeOfFreedom*>(*dofIt)) = i;
mapLocalGlobalDOFs[i] = rstart + i;
mapGlobalLocalDOFs[rstart + i] = i;
isRankDOF[i] = true;
isRankDof[i] = true;
}
// === Send new DOF indices. ===
......@@ -927,7 +952,7 @@ namespace AMDiS {
(*const_cast<DegreeOfFreedom*>(*dofIt)) = newDofIndex;
mapLocalGlobalDOFs[newDofIndex] = recvBuffers[i][j];
mapGlobalLocalDOFs[recvBuffers[i][j]] = newDofIndex;
isRankDOF[newDofIndex] = false;
isRankDof[newDofIndex] = false;
newDofIndex++;
j++;
}
......@@ -1026,10 +1051,16 @@ namespace AMDiS {
}
void ParallelDomainBase::createDOFMemberInfo(DofToPartitions& partitionDOFs,
DofContainer& rankDOFs,
DofToRank& boundaryDOFs)
void ParallelDomainBase::createDOFMemberInfo(DofToPartitions& partitionDofs,
DofContainer& rankOwnedDofs,
DofContainer& rankAllDofs,
DofToRank& boundaryDofs)
{
partitionDofs.clear();
rankOwnedDofs.clear();
rankAllDofs.clear();
boundaryDofs.clear();
// === Determine to each dof the set of partitions the dof belongs to. ===
ElementDofIterator elDofIt(feSpace);
......@@ -1041,7 +1072,7 @@ namespace AMDiS {
elDofIt.reset(element);
do {
// Determine to each dof the partition(s) it corresponds to.
partitionDOFs[elDofIt.getDofPtr()].insert(partitionVec[element->getIndex()]);
partitionDofs[elDofIt.getDofPtr()].insert(partitionVec[element->getIndex()]);
} while(elDofIt.next());
elInfo = stack.traverseNext(elInfo);
......@@ -1051,18 +1082,18 @@ namespace AMDiS {
// === Determine the set of ranks dofs and the dofs ownership at the boundary. ===
// iterate over all DOFs
for (DofToPartitions::iterator it = partitionDOFs.begin();
it != partitionDOFs.end();
++it) {
for (DofToPartitions::iterator it = partitionDofs.begin();
it != partitionDofs.end(); ++it) {
// iterate over all partition the current DOF is part of.
for (std::set<int>::iterator itpart1 = it->second.begin();
itpart1 != it->second.end();
++itpart1) {
itpart1 != it->second.end(); ++itpart1) {
if (*itpart1 == mpiRank) {
rankAllDofs.push_back(it->first);
if (it->second.size() == 1) {
rankDOFs.push_back(it->first);
rankOwnedDofs.push_back(it->first);
} else {
// This dof is at the ranks boundary. It is owned by the rank only if
// the rank number is the highest of all ranks containing this dof.
......@@ -1070,8 +1101,7 @@ namespace AMDiS {
bool insert = true;
int highestRank = mpiRank;
for (std::set<int>::iterator itpart2 = it->second.begin();
itpart2 != it->second.end();
++itpart2) {
itpart2 != it->second.end(); ++itpart2) {
if (*itpart2 > mpiRank)
insert = false;
......@@ -1080,9 +1110,9 @@ namespace AMDiS {
}
if (insert)
rankDOFs.push_back(it->first);
rankOwnedDofs.push_back(it->first);
boundaryDOFs[it->first] = highestRank;
boundaryDofs[it->first] = highestRank;
}
break;
......@@ -1091,7 +1121,8 @@ namespace AMDiS {
}
}
sort(rankDOFs.begin(), rankDOFs.end(), cmpDofsByValue);
sort(rankAllDofs.begin(), rankAllDofs.end(), cmpDofsByValue);
sort(rankOwnedDofs.begin(), rankOwnedDofs.end(), cmpDofsByValue);
}
......@@ -1107,7 +1138,6 @@ namespace AMDiS {
ElInfo *elInfo = stack.traverseFirst(mesh, -1, Mesh::CALL_LEAF_EL);
while (elInfo) {
Element *el = elInfo->getElement();
if (mpiRank == 0) std::cout << "EL = " << el->getIndex() << std::endl;
orderDOFs(el->getDOF(0), el->getDOF(1), el->getDOF(2), elMap[el->getIndex()]);
elInfo = stack.traverseNext(elInfo);
}
......@@ -1124,7 +1154,6 @@ namespace AMDiS {
ElInfo *elInfo = stack.traverseFirst(mesh, -1, Mesh::CALL_LEAF_EL);
while (elInfo) {
Element *el = elInfo->getElement();
if (mpiRank == 0) std::cout << "EL = " << el->getIndex() << std::endl;
orderDOFs(el->getDOF(0), el->getDOF(1), el->getDOF(2), vec);
for (int i = 0; i < 3; i++) {
if (elMap[el->getIndex()][i] != vec[i]) {
......@@ -1359,7 +1388,7 @@ namespace AMDiS {
TEST_EXIT(m)("No DOF Matrix!\n");
m->setIsRankDOF(isRankDOF);
m->setIsRankDOF(isRankDof);
}
void ParallelDomainScal::solve()
......
......@@ -200,9 +200,10 @@ namespace AMDiS {
* \param[out] boundaryDOFs Stores all DOFs in ranks partition that are on an
* interior boundary but correspond to another rank.
*/
void createDOFMemberInfo(DofToPartitions& partitionDOFs,
DofContainer& rankDOFs,
DofToRank& boundaryDOFs);
void createDOFMemberInfo(DofToPartitions& partitionDofs,
DofContainer& rankOwnedDofs,
DofContainer& rankAllDofs,
DofToRank& boundaryDofs);
void DbgCreateElementMap(ElementIdxToDofs &elMap);
......@@ -225,13 +226,6 @@ namespace AMDiS {
{
vec.resize(3);
if (mpiRank == 0)
std::cout << "DOFS are: "
<< dof1 << " = " << *dof1 << " "
<< dof2 << " = " << *dof2 << " "
<< dof3 << " = " << *dof3 << " "
<< std::endl;
if (*dof1 < *dof2 && *dof1 < *dof3)
vec[0] = dof1;
else if (*dof2 < *dof1 && *dof2 < *dof3)
......@@ -364,7 +358,9 @@ namespace AMDiS {