Liebe Gitlab-Nutzer, lieber Gitlab-Nutzer, es ist nun möglich sich mittels des ZIH-Logins/LDAP an unserem Dienst anzumelden. Ein Anmelden über dieses erzeugt ein neues Konto. Das alte Konto ist über den Reiter "Standard" erreichbar. Die Administratoren

Dear Gitlab user, it is now possible to log in to our service using the ZIH login/LDAP. Logging in via this will create a new account. The old account can be accessed via the "Standard" tab. The administrators

Commit 715b5139 authored by Thomas Witkowski's avatar Thomas Witkowski
Browse files

* Added ParallelProblem debug possibilities

parent cd501be4
......@@ -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 p2s103:
# Shell to use when invoking shell scripts.
SHELL="/bin/sh"
......@@ -66,12 +66,12 @@ fast_install=yes
# The host system.
host_alias=
host=i686-redhat-linux-gnu
host=x86_64-unknown-linux-gnu
host_os=linux-gnu
# The build system.
build_alias=
build=i686-redhat-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=""
......@@ -7266,7 +7266,7 @@ disable_libs=static
# End:
# ### BEGIN LIBTOOL TAG CONFIG: CXX
# Libtool was configured on host NWRW15:
# Libtool was configured on host p2s103:
# Shell to use when invoking shell scripts.
SHELL="/bin/sh"
......@@ -7288,12 +7288,12 @@ fast_install=yes
# The host system.
host_alias=
host=i686-redhat-linux-gnu
host=x86_64-unknown-linux-gnu
host_os=linux-gnu
# The build system.
build_alias=
build=i686-redhat-linux-gnu
build=x86_64-unknown-linux-gnu
build_os=linux-gnu
# An echo program that does not interpret backslashes.
......@@ -7304,25 +7304,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"
......@@ -7396,7 +7396,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"
......@@ -7451,11 +7451,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.
......@@ -7463,11 +7463,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"
......@@ -7547,10 +7547,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=""
......@@ -7574,7 +7574,7 @@ include_expsyms=""
# ### BEGIN LIBTOOL TAG CONFIG: F77
# Libtool was configured on host NWRW15:
# Libtool was configured on host p2s103:
# Shell to use when invoking shell scripts.
SHELL="/bin/sh"
......@@ -7596,12 +7596,12 @@ fast_install=yes
# The host system.
host_alias=
host=i686-redhat-linux-gnu
host=x86_64-unknown-linux-gnu
host_os=linux-gnu
# The build system.
build_alias=
build=i686-redhat-linux-gnu
build=x86_64-unknown-linux-gnu
build_os=linux-gnu
# An echo program that does not interpret backslashes.
......@@ -7612,7 +7612,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"
......@@ -7621,16 +7621,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"
......@@ -7858,10 +7858,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=""
......
......@@ -14,14 +14,14 @@ namespace AMDiS {
void MeshStructure::insertElement(bool isLeaf) {
// overflow? -> next index
if(pos_ >= unsignedLongSize_) {
if (pos_ >= unsignedLongSize_) {
code_.push_back(currentCode_);
pos_ = 0;
currentCode_ = 0;
}
// insert element in binary code
if(!isLeaf) {
if (!isLeaf) {
unsigned long int one = 1;
currentCode_ += (one << pos_);
}
......@@ -44,7 +44,7 @@ namespace AMDiS {
clear();
TraverseStack stack;
ElInfo *elInfo = stack.traverseFirst(mesh, -1, Mesh::CALL_EVERY_EL_PREORDER);
while(elInfo) {
while (elInfo) {
insertElement(elInfo->getElement()->isLeaf());
elInfo = stack.traverseNext(elInfo);
}
......@@ -84,7 +84,7 @@ namespace AMDiS {
bool MeshStructure::skipBranch(MeshStructure *insert)
{
if(isLeafElement()) {
if (isLeafElement()) {
return nextElement(insert);
} else {
bool cont = nextElement(insert);
......@@ -104,13 +104,13 @@ namespace AMDiS {
structure2->reset();
bool cont = true;
while(cont) {
while (cont) {
bool cont1, cont2;
if(structure1->isLeafElement() == structure2->isLeafElement()) {
if (structure1->isLeafElement() == structure2->isLeafElement()) {
cont1 = structure1->nextElement(result);
cont2 = structure2->nextElement();
} else {
if(structure1->isLeafElement()) {
if (structure1->isLeafElement()) {
cont1 = structure1->nextElement();
cont2 = structure2->skipBranch(result);
} else {
......@@ -127,7 +127,8 @@ namespace AMDiS {
void MeshStructure::fitMeshToStructure(Mesh *mesh,
RefinementManager *manager,
bool checkPartition)
bool checkPartition,
bool debugMode)
{
FUNCNAME("MeshStructure::fitMeshToStructure()");
......@@ -140,32 +141,32 @@ namespace AMDiS {
// decorate leaf data
reset();
elInfo = stack.traverseFirst(mesh, -1, Mesh::CALL_EVERY_EL_PREORDER);
while(elInfo) {
while (elInfo) {
TEST_EXIT_DBG(cont)("unexpected structure code end!\n");
Element *element = elInfo->getElement();
if(isLeafElement()) {
if (isLeafElement()) {
TEST_EXIT_DBG(element->isLeaf())("mesh finer than code\n");
};
if(element->isLeaf() && !isLeafElement()) {
if (element->isLeaf() && !isLeafElement()) {
MeshStructure *structure = NEW MeshStructure();
cont = skipBranch(structure);
structure->commit();
bool decorate = true;
if(checkPartition) {
if (checkPartition) {
PartitionElementData *partitionData = dynamic_cast<PartitionElementData*>
(element->getElementData(PARTITION_ED));
TEST_EXIT_DBG(partitionData)("no partition element data\n");
PartitionStatus status = partitionData->getPartitionStatus();
if(status == OUT || status == UNDEFINED) {
if ((debugMode == false) && (status == OUT || status == UNDEFINED)) {
decorate = false;
}
}
if(decorate) {
if (decorate) {
MeshStructure_ED *elData = NEW MeshStructure_ED(element->getElementData());
elData->setStructure(structure);
element->setElementData(elData);
......@@ -185,9 +186,9 @@ namespace AMDiS {
do {
finished = true;
elInfo = stack.traverseFirst(mesh, -1, Mesh::CALL_LEAF_EL);
while(elInfo) {
while (elInfo) {
Element *element = elInfo->getElement();
if(element->getElementData(MESH_STRUCTURE) != NULL) {
if (element->getElementData(MESH_STRUCTURE) != NULL) {
element->setMark(1);
finished = false;
} else {
......@@ -196,7 +197,7 @@ namespace AMDiS {
elInfo = stack.traverseNext(elInfo);
}
manager->refineMesh(mesh);
} while(!finished);
} while (!finished);
}
}
......@@ -46,11 +46,12 @@ namespace AMDiS {
void clear();
/** \brief
* Creates a mesh structure code from a Mesh object by traversing it in preorder.
*/
void init(Mesh *mesh);
void init(const std::vector<unsigned long int>& code,
int numElements)
{
void init(const std::vector<unsigned long int>& code, int numElements) {
code_ = code;
numElements_ = numElements;
reset();
......@@ -58,10 +59,8 @@ namespace AMDiS {
void reset();
void insertElement(bool isLeaf);
inline void commit() {
if(pos_ > 0) {
if (pos_ > 0) {
code_.push_back(currentCode_);
}
reset();
......@@ -77,25 +76,37 @@ namespace AMDiS {
return (currentCode_ & 1) == 0;
};
/** \brief
* Merges a mesh structure code with its own mesh structure code. The
* result overwrites the own mesh structure code.
*/
void merge(MeshStructure *structure) {
MeshStructure temp(*this);
merge(&temp, structure, this);
};
static void merge(MeshStructure *structure1,
MeshStructure *structure2,
MeshStructure *result);
/** \brief
* Fits a given mesh to the mesh structure code.
*
* \param debugMode In debugMode, the whole mesh is fitted to the mesh
* structure code. Otherwise, the mesh is fitted only on the partition
* of the current process.
*/
void fitMeshToStructure(Mesh *mesh,
RefinementManager *manager,
bool checkPartition = false);
bool checkPartition = false,
bool debugMode = false);
/** \brief
* Prints the mesh structure code.
*/
void print() {
FUNCNAME("MeshStructure::print()");
reset();
bool cont = true;
while(cont) {
if(isLeafElement()) {
while (cont) {
if (isLeafElement()) {
MSG("0");
} else {
MSG("1");
......@@ -105,6 +116,9 @@ namespace AMDiS {
MSG("\n");
};
/** \brief
* Returns the mesh structure code.
*/
inline const std::vector<unsigned long int>& getCode() {
return code_;
};
......@@ -117,6 +131,20 @@ namespace AMDiS {
return currentElement_;
};
protected:
/** \brief
* Insert a new element to the structure code. Is used by the init
* function.
*/
void insertElement(bool isLeaf);
/** \brief
* Merges two mesh structure codes to one structure code.
*/
void merge(MeshStructure *structure1,
MeshStructure *structure2,
MeshStructure *result);
protected:
std::vector<unsigned long int> code_;
......
This diff is collapsed.
......@@ -42,6 +42,7 @@ namespace AMDiS {
class ParallelProblemInterface
{
public:
virtual ~ParallelProblemInterface() {};
virtual void initParallelization(AdaptInfo *adaptInfo) = 0;
virtual void exitParallelization(AdaptInfo *adaptInfo) = 0;
};
......@@ -63,17 +64,41 @@ namespace AMDiS {
virtual ~ParallelProblemBase() {};
/** \brief
* Must return true, if a new partitioning of the domain (due to unbalanced
* calculation times) have to be done.
*/
virtual bool doPartitioning(AdaptInfo *adaptInfo, double localWeightSum) = 0;
virtual bool doBuildGlobalSolution(AdaptInfo *adaptInfo) = 0;
virtual double setElemWeights(AdaptInfo *adaptInfo) = 0;
virtual void partitionMesh(AdaptInfo *adaptInfo) = 0;
virtual void refineOverlap(AdaptInfo *adaptInfo) = 0;
virtual void globalRefineOutOfPartition(AdaptInfo *adaptInfo) = 0;
virtual void createOverlap(AdaptInfo *adaptInfo) = 0;
virtual void exchangeDOFVectors(AdaptInfo *adaptInfo) = 0;
virtual void coarsenOutOfPartition(AdaptInfo *adaptInfo) = 0;
/** \brief
*
*/
virtual void synchronizeMeshes(AdaptInfo *adaptInfo) = 0;
/** \brief
*
*/
virtual void exchangeRankSolutions(AdaptInfo *adaptInfo) = 0;
/** \brief
*
*/
virtual void buildGlobalSolution(AdaptInfo *adaptInfo) = 0;
virtual void exitParallelization(AdaptInfo *adaptInfo)
......@@ -96,11 +121,12 @@ namespace AMDiS {
virtual void closeTimestep(AdaptInfo *adaptInfo)
{
if (mpiSize_ > 1 && doBuildGlobalSolution(adaptInfo)) {
synchronizeMeshes(adaptInfo);
if (mpiSize > 1 && doBuildGlobalSolution(adaptInfo)) {
synchronizeMeshes(adaptInfo);
exchangeRankSolutions(adaptInfo);
buildGlobalSolution(adaptInfo);
}
if (timeIF_)
timeIF_->closeTimestep(adaptInfo);
};
......@@ -127,12 +153,11 @@ namespace AMDiS {
{
Flag flag;
if(mpiSize_ > 1 && toDo.isSet(MARK | ADAPT)) {
if (mpiSize > 1 && toDo.isSet(MARK | ADAPT)) {
flag = iterationIF_->oneIteration(adaptInfo, MARK | ADAPT);
double localWeightSum = setElemWeights(adaptInfo);
if(doPartitioning(adaptInfo, localWeightSum)) {
if (doPartitioning(adaptInfo, localWeightSum)) {
clock_t partitioningStart = clock();
synchronizeMeshes(adaptInfo);
......@@ -155,31 +180,42 @@ namespace AMDiS {
}
// synchronize adaption flag
unsigned long *flagBuffer = GET_MEMORY(unsigned long, mpiSize_);
unsigned long *flagBuffer = GET_MEMORY(unsigned long, mpiSize);
unsigned long localFlag = flag.getFlags();
MPI::COMM_WORLD.Allgather(&localFlag, 1, MPI_UNSIGNED_LONG,
flagBuffer, 1, MPI_UNSIGNED_LONG);
int i;
for(i = 0; i < mpiSize_; i++) {
for (int i = 0; i < mpiSize; i++) {
flag.setFlag(flagBuffer[i]);
}
FREE_MEMORY(flagBuffer, unsigned long, mpiSize_);
FREE_MEMORY(flagBuffer, unsigned long, mpiSize);
return flag;
};
virtual void endIteration(AdaptInfo *adaptInfo)
{
virtual void endIteration(AdaptInfo *adaptInfo) {
iterationIF_->endIteration(adaptInfo);
};
virtual void startDelayedTimestepCalculation() {};
virtual bool existsDelayedCalculation() {
return false;
};
protected:
int mpiRank_;
int mpiSize_;
int mpiRank;
int mpiSize;
ProblemIterationInterface *iterationIF_;
ProblemTimeInterface *timeIF_;
clock_t computationStart;
double partitioningTime;
};
......@@ -220,7 +256,11 @@ namespace AMDiS {
virtual void globalRefinements();
/** \brief
*
*/
void exchangeRankSolutions(AdaptInfo *adaptInfo,
Mesh *workMesh,
std::vector<DOFVector<double>*> rankSolutions);
void exchangeDOFVector(AdaptInfo *adaptInfo,
......@@ -236,51 +276,61 @@ namespace AMDiS {
void fillVertexPartitions(int level, int overlap, bool openOverlap,
std::map<Element*, int> &overlapDistance);
void setRepartitionSteps(int steps) { repartitionSteps_ = steps; };
void setRepartitionSteps(int steps) {
repartitionSteps_ = steps;
};
void puEveryTimestep(bool pu) { puEveryTimestep_ = pu; };
void puEveryTimestep(bool pu) {
puEveryTimestep_ = pu;
};
void addDOFVector(DOFVector<double> *vec)
{
void addDOFVector(DOFVector<double> *vec) {
dofVectors_.push_back(vec);
};
/** \brief
* Every process creates the mesh structure code of its mesh, and all
* processes broadcast their mesh structure codes.
*/
void exchangeMeshStructureCodes(MeshStructure *structures);
static bool writeElement(ElInfo *elInfo);
// static void writeRankMacroAndValues(DOFVector<double> *vec,