From 21470979525284a64463b3022c2691dbaf3a852f Mon Sep 17 00:00:00 2001 From: Thomas Witkowski <thomas.witkowski@gmx.de> Date: Thu, 15 Apr 2010 12:58:09 +0000 Subject: [PATCH] New time strategy. --- AMDiS/libtool | 48 ++++----- AMDiS/src/AdaptBase.cc | 2 +- AMDiS/src/AdaptBase.h | 30 +++--- AMDiS/src/AdaptInstationary.cc | 173 ++++++++++++++++++++------------- AMDiS/src/AdaptInstationary.h | 23 +++-- AMDiS/src/AdaptStationary.cc | 17 ++-- 6 files changed, 171 insertions(+), 122 deletions(-) diff --git a/AMDiS/libtool b/AMDiS/libtool index b0379c47..aab8ab33 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="/usr/bin/sed" +SED="/bin/sed" # Sed that helps us avoid accidentally triggering echo(1) options like -n. -Xsed="/usr/bin/sed -e 1s/^X//" +Xsed="/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 deimos104: +# Libtool was configured on host NWRW15: # Shell to use when invoking shell scripts. SHELL="/bin/sh" @@ -66,12 +66,12 @@ fast_install=yes # The host system. host_alias= -host=x86_64-unknown-linux-gnu +host=i686-pc-linux-gnu host_os=linux-gnu # The build system. build_alias= -build=x86_64-unknown-linux-gnu +build=i686-pc-linux-gnu build_os=linux-gnu # An echo program that does not interpret backslashes. @@ -97,7 +97,7 @@ with_gcc=yes EGREP="grep -E" # The linker used to build libraries. -LD="/usr/x86_64-suse-linux/bin/ld -m elf_x86_64" +LD="/usr/bin/ld" # Whether we need hard or soft links. LN_S="ln -s" @@ -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/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/" +sys_lib_search_path_spec=" /u/witkowski/local/lib/i386-redhat-linux/4.1.2/ /u/witkowski/local/lib/ /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/" # 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/octave-2.9.9 /usr/lib/qt-3.3/lib /usr/lib/qt4/lib " # 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 deimos104: +# Libtool was configured on host NWRW15: # Shell to use when invoking shell scripts. SHELL="/bin/sh" @@ -6782,12 +6782,12 @@ fast_install=yes # The host system. host_alias= -host=x86_64-unknown-linux-gnu +host=i686-pc-linux-gnu host_os=linux-gnu # The build system. build_alias= -build=x86_64-unknown-linux-gnu +build=i686-pc-linux-gnu build_os=linux-gnu # An echo program that does not interpret backslashes. @@ -6813,7 +6813,7 @@ with_gcc=yes EGREP="grep -E" # The linker used to build libraries. -LD="/usr/x86_64-suse-linux/bin/ld -m elf_x86_64" +LD="/usr/bin/ld" # Whether we need hard or soft links. LN_S="ln -s" @@ -6942,11 +6942,11 @@ striplib="strip --strip-unneeded" # Dependencies to place before 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" +predep_objects="/usr/lib/gcc/i386-redhat-linux/4.1.2/../../../crti.o /usr/lib/gcc/i386-redhat-linux/4.1.2/crtbeginS.o" # Dependencies to place after the objects being linked to create a # shared library. -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" +postdep_objects="/usr/lib/gcc/i386-redhat-linux/4.1.2/crtendS.o /usr/lib/gcc/i386-redhat-linux/4.1.2/../../../crtn.o" # Dependencies to place before the objects being linked to create a # shared library. @@ -6958,7 +6958,7 @@ 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/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/../../.." +compiler_lib_search_path="-L/u/witkowski/local/lib -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/../../.." # 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/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/" +sys_lib_search_path_spec=" /u/witkowski/local/lib/i386-redhat-linux/4.1.2/ /u/witkowski/local/lib/ /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/" # 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/octave-2.9.9 /usr/lib/qt-3.3/lib /usr/lib/qt4/lib " # 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 deimos104: +# Libtool was configured on host NWRW15: # Shell to use when invoking shell scripts. SHELL="/bin/sh" @@ -7087,12 +7087,12 @@ fast_install=yes # The host system. host_alias= -host=x86_64-unknown-linux-gnu +host=i686-pc-linux-gnu host_os=linux-gnu # The build system. build_alias= -build=x86_64-unknown-linux-gnu +build=i686-pc-linux-gnu build_os=linux-gnu # An echo program that does not interpret backslashes. @@ -7112,13 +7112,13 @@ LTCFLAGS="-g -O2" CC="g77" # Is the compiler the GNU C compiler? -with_gcc= +with_gcc=yes # An ERE matcher. EGREP="grep -E" # The linker used to build libraries. -LD="/usr/x86_64-suse-linux/bin/ld -m elf_x86_64" +LD="/usr/bin/ld" # 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/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/" +sys_lib_search_path_spec=" /u/witkowski/local/lib/i386-redhat-linux/3.4.6/ /u/witkowski/local/lib/ /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/" # 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/octave-2.9.9 /usr/lib/qt-3.3/lib /usr/lib/qt4/lib " # Fix the shell variable $srcfile for the compiler. fix_srcfile_path="" diff --git a/AMDiS/src/AdaptBase.cc b/AMDiS/src/AdaptBase.cc index 98a4ac8d..3a32618a 100644 --- a/AMDiS/src/AdaptBase.cc +++ b/AMDiS/src/AdaptBase.cc @@ -2,6 +2,6 @@ namespace AMDiS { - int AdaptBase::info_ = 10; + int AdaptBase::info = 10; } diff --git a/AMDiS/src/AdaptBase.h b/AMDiS/src/AdaptBase.h index 8776c9f1..410363a5 100644 --- a/AMDiS/src/AdaptBase.h +++ b/AMDiS/src/AdaptBase.h @@ -33,15 +33,15 @@ namespace AMDiS { public: /// Constructor AdaptBase(std::string sname, - ProblemIterationInterface *problemIteration, + ProblemIterationInterface *problemIteration_, AdaptInfo *adapt, - ProblemTimeInterface *problemTime = NULL, - AdaptInfo *initialAdaptInfo = NULL) + ProblemTimeInterface *problemTime_ = NULL, + AdaptInfo *initialAdaptInfo_ = NULL) : name(sname), - problemIteration_(problemIteration), + problemIteration(problemIteration_), adaptInfo(adapt), - problemTime_(problemTime), - initialAdaptInfo_(initialAdaptInfo) + problemTime(problemTime_), + initialAdaptInfo(initialAdaptInfo_) {} /// Destructor @@ -62,13 +62,13 @@ namespace AMDiS { /// Returns \ref problemIteration_ inline ProblemIterationInterface *getProblemIteration() { - return problemIteration_; + return problemIteration; } /// inline void setProblemIteration(ProblemIterationInterface *pii) { - problemIteration_ = pii; + problemIteration = pii; } /// Returns \ref adaptInfo @@ -80,19 +80,19 @@ namespace AMDiS { /// Returns \ref problemTime_ inline ProblemTimeInterface *getProblemTime() { - return problemTime_; + return problemTime; } /// inline void setProblemTime(ProblemTimeInterface *pti) { - problemTime_ = pti; + problemTime = pti; } /// Returns \ref initialAdaptInfo_ inline AdaptInfo *getInitialAdaptInfo() { - return initialAdaptInfo_; + return initialAdaptInfo; } protected: @@ -100,22 +100,22 @@ namespace AMDiS { std::string name; /// Problem iteration interface - ProblemIterationInterface *problemIteration_; + ProblemIterationInterface *problemIteration; /// Main adapt info AdaptInfo *adaptInfo; /// problem time interface - ProblemTimeInterface *problemTime_; + ProblemTimeInterface *problemTime; /** \brief * Adapt info for initial adapt. Will be given to * problemTime_->solveInitialProblem(). */ - AdaptInfo *initialAdaptInfo_; + AdaptInfo *initialAdaptInfo; /// Info level - static int info_; + static int info; }; } diff --git a/AMDiS/src/AdaptInstationary.cc b/AMDiS/src/AdaptInstationary.cc index 2d9144fd..766b1878 100644 --- a/AMDiS/src/AdaptInstationary.cc +++ b/AMDiS/src/AdaptInstationary.cc @@ -26,6 +26,7 @@ namespace AMDiS { initConstructor(problemStat, info, initialInfo, initialTimestamp); } + AdaptInstationary::AdaptInstationary(std::string name, ProblemIterationInterface &problemStat, AdaptInfo &info, @@ -41,6 +42,7 @@ namespace AMDiS { initConstructor(&problemStat, &info, &initialInfo, initialTimestamp); } + void AdaptInstationary::initConstructor(ProblemIterationInterface *problemStat, AdaptInfo *info, AdaptInfo *initialInfo, @@ -48,12 +50,12 @@ namespace AMDiS { { initialize(name); - fixedTimestep_ = (info->getMinTimestep() == info->getMaxTimestep()); + fixedTimestep = (info->getMinTimestep() == info->getMaxTimestep()); if (initialTimestamp == 0) - initialTimestamp_ = time(NULL); + initialTimestamp = time(NULL); else - initialTimestamp_ = initialTimestamp; + initialTimestamp = initialTimestamp; // Check if the problem should be deserialized because of the -rs parameter. std::string serializationFilename = ""; @@ -62,9 +64,9 @@ namespace AMDiS { if (serializationFilename.compare("")) { // The value of the -rs argument is ignored, because we want to use the // serialization file mentioned in the used init file. - MSG("Deserialization from file: %s\n", queueSerializationFilename_.c_str()); + MSG("Deserialization from file: %s\n", queueSerializationFilename.c_str()); - std::ifstream in(queueSerializationFilename_.c_str()); + std::ifstream in(queueSerializationFilename.c_str()); deserialize(in); in.close(); @@ -94,58 +96,61 @@ namespace AMDiS { } } + AdaptInstationary::~AdaptInstationary() { } + void AdaptInstationary::explicitTimeStrategy() { FUNCNAME("AdaptInstationary::explicitTimeStrategy()"); // estimate before first adaption if (adaptInfo->getTime() <= adaptInfo->getStartTime()) - problemIteration_->oneIteration(adaptInfo, ESTIMATE); + problemIteration->oneIteration(adaptInfo, ESTIMATE); // increment time adaptInfo->setTime(adaptInfo->getTime() + adaptInfo->getTimestep()); - problemTime_->setTime(adaptInfo); + problemTime->setTime(adaptInfo); - INFO(info_,6)("time = %e, timestep = %e\n", + INFO(info,6)("time = %e, timestep = %e\n", adaptInfo->getTime(), adaptInfo->getTimestep()); adaptInfo->setSpaceIteration(0); // do the iteration - problemIteration_->beginIteration(adaptInfo); - problemIteration_->oneIteration(adaptInfo, FULL_ITERATION); - problemIteration_->endIteration(adaptInfo); + problemIteration->beginIteration(adaptInfo); + problemIteration->oneIteration(adaptInfo, FULL_ITERATION); + problemIteration->endIteration(adaptInfo); adaptInfo->setLastProcessedTimestep(adaptInfo->getTimestep()); } + void AdaptInstationary::implicitTimeStrategy() { FUNCNAME("AdaptInstationary::implicitTimeStrategy()"); do { adaptInfo->setTime(adaptInfo->getTime() + adaptInfo->getTimestep()); - problemTime_->setTime(adaptInfo); + problemTime->setTime(adaptInfo); - INFO(info_,6)("time = %e, try timestep = %e\n", - adaptInfo->getTime(), adaptInfo->getTimestep()); + INFO(info,6)("time = %e, try timestep = %e\n", + adaptInfo->getTime(), adaptInfo->getTimestep()); - problemIteration_->oneIteration(adaptInfo, NO_ADAPTION); + problemIteration->oneIteration(adaptInfo, NO_ADAPTION); adaptInfo->incTimestepIteration(); - if (!fixedTimestep_ && + if (!fixedTimestep && !adaptInfo->timeToleranceReached() && adaptInfo->getTimestepIteration() <= adaptInfo->getMaxTimestepIteration() && !(adaptInfo->getTimestep() <= adaptInfo->getMinTimestep())) { adaptInfo->setTime(adaptInfo->getTime() - adaptInfo->getTimestep()); - adaptInfo->setTimestep(adaptInfo->getTimestep() * time_delta_1); + adaptInfo->setTimestep(adaptInfo->getTimestep() * timeDelta1); continue; } @@ -159,28 +164,28 @@ namespace AMDiS { /* === Space iterations === */ do { - problemIteration_->beginIteration(adaptInfo); + problemIteration->beginIteration(adaptInfo); - if (problemIteration_->oneIteration(adaptInfo, FULL_ITERATION)) { - if (!fixedTimestep_ && + if (problemIteration->oneIteration(adaptInfo, FULL_ITERATION)) { + if (!fixedTimestep && !adaptInfo->timeToleranceReached() && !(adaptInfo->getTimestep() <= adaptInfo->getMinTimestep())) { adaptInfo->setTime(adaptInfo->getTime() - adaptInfo->getTimestep()); - adaptInfo->setTimestep(adaptInfo->getTimestep() * time_delta_1); - problemIteration_->endIteration(adaptInfo); + adaptInfo->setTimestep(adaptInfo->getTimestep() * timeDelta2); + problemIteration->endIteration(adaptInfo); adaptInfo->incSpaceIteration(); break; } } adaptInfo->incSpaceIteration(); - problemIteration_->endIteration(adaptInfo); + problemIteration->endIteration(adaptInfo); } while (!adaptInfo->spaceToleranceReached() && adaptInfo->getSpaceIteration() <= adaptInfo->getMaxSpaceIteration()); } else { - problemIteration_->endIteration(adaptInfo); + problemIteration->endIteration(adaptInfo); } @@ -193,8 +198,8 @@ namespace AMDiS { // After successful iteration/timestep the timestep will be changed according // adaption rules for next timestep. // First, check for increase of timestep - if (!fixedTimestep_ && adaptInfo->timeErrorLow()) { - adaptInfo->setTimestep(adaptInfo->getTimestep() * time_delta_2); + if (!fixedTimestep && adaptInfo->timeErrorLow()) { + adaptInfo->setTimestep(adaptInfo->getTimestep() * timeDelta2); if (dbgMode) { // print information about timestep increase } @@ -202,20 +207,51 @@ namespace AMDiS { if (dbgMode) { std::cout << "=== ADAPT INFO DEBUG MODE ===\n"; std::cout << " Do not increase timestep: \n"; - if (fixedTimestep_) + if (fixedTimestep) std::cout << " fixedTimestep = true\n"; if (!adaptInfo->timeErrorLow()) adaptInfo->printTimeErrorLowInfo(); } } + // Second, check for decrease of timestep - if (!fixedTimestep_ && + if (!fixedTimestep && !adaptInfo->timeToleranceReached() && - !(adaptInfo->getTimestep() <= adaptInfo->getMinTimestep())) { - adaptInfo->setTimestep(adaptInfo->getTimestep() * time_delta_1); - } + !(adaptInfo->getTimestep() <= adaptInfo->getMinTimestep())) + adaptInfo->setTimestep(adaptInfo->getTimestep() * timeDelta1); } + + void AdaptInstationary::simpleAdaptiveTimeStrategy() + { + FUNCNAME("AdaptInstationary::explicitTimeStrategy()"); + + // estimate before first adaption + if (adaptInfo->getTime() <= adaptInfo->getStartTime()) + problemIteration->oneIteration(adaptInfo, ESTIMATE); + + adaptInfo->setTime(adaptInfo->getTime() + adaptInfo->getTimestep()); + problemTime->setTime(adaptInfo); + + INFO(info,6)("time = %e, timestep = %e\n", + adaptInfo->getTime(), adaptInfo->getTimestep()); + + problemIteration->oneIteration(adaptInfo, FULL_ITERATION); + + adaptInfo->setLastProcessedTimestep(adaptInfo->getTimestep()); + + // First, check for increase of timestep + if (!fixedTimestep && adaptInfo->timeErrorLow()) + adaptInfo->setTimestep(adaptInfo->getTimestep() * timeDelta2); + + // Second, check for decrease of timestep + if (!fixedTimestep && + !adaptInfo->timeToleranceReached() && + !(adaptInfo->getTimestep() <= adaptInfo->getMinTimestep())) + adaptInfo->setTimestep(adaptInfo->getTimestep() * timeDelta1); + } + + void AdaptInstationary::oneTimestep() { FUNCNAME("AdaptInstationary::oneTimestep()"); @@ -229,14 +265,17 @@ namespace AMDiS { case 1: implicitTimeStrategy(); break; + case 2: + simpleAdaptiveTimeStrategy(); + break; default: - MSG("unknown strategy = %d; use explicit strategy\n", strategy); - explicitTimeStrategy(); + ERROR_EXIT("Unknown strategy = %d!\n", strategy); } adaptInfo->incTimestepNumber(); } + int AdaptInstationary::adapt() { FUNCNAME("AdaptInstationary::adapt()"); @@ -252,22 +291,22 @@ namespace AMDiS { if (adaptInfo->getTimestepNumber() == 0) { adaptInfo->setTime(adaptInfo->getStartTime()); - initialAdaptInfo_->setStartTime(adaptInfo->getStartTime()); - initialAdaptInfo_->setTime(adaptInfo->getStartTime()); + initialAdaptInfo->setStartTime(adaptInfo->getStartTime()); + initialAdaptInfo->setTime(adaptInfo->getStartTime()); - problemTime_->setTime(adaptInfo); + problemTime->setTime(adaptInfo); // initial adaption - problemTime_->solveInitialProblem(initialAdaptInfo_); - problemTime_->transferInitialSolution(adaptInfo); + problemTime->solveInitialProblem(initialAdaptInfo); + problemTime->transferInitialSolution(adaptInfo); } while (!adaptInfo->reachedEndTime()) { - iterationTimestamp_ = time(NULL); + iterationTimestamp = time(NULL); - problemTime_->initTimestep(adaptInfo); + problemTime->initTimestep(adaptInfo); oneTimestep(); - problemTime_->closeTimestep(adaptInfo); + problemTime->closeTimestep(adaptInfo); if (breakWhenStable && (adaptInfo->getSolverIterations() == 0)) { break; @@ -285,53 +324,54 @@ namespace AMDiS { return errorCode; } + void AdaptInstationary::initialize(std::string aName) { FUNCNAME("AdaptInstationary::initialize()"); strategy = 0; - time_delta_1 = 0.7071; - time_delta_2 = 1.4142; - queueRuntime_ = -1; - queueSerializationFilename_ = "__serialized_problem.ser"; + timeDelta1 = 0.7071; + timeDelta2 = 1.4142; + queueRuntime = -1; + queueSerializationFilename = "__serialized_problem.ser"; GET_PARAMETER(0, aName + "->strategy", "%d", &strategy); - GET_PARAMETER(0, aName + "->time delta 1", "%f", &time_delta_1); - GET_PARAMETER(0, aName + "->time delta 2", "%f", &time_delta_2); - GET_PARAMETER(0, aName + "->info", "%d", &info_); + GET_PARAMETER(0, aName + "->time delta 1", "%f", &timeDelta1); + GET_PARAMETER(0, aName + "->time delta 2", "%f", &timeDelta2); + GET_PARAMETER(0, aName + "->info", "%d", &info); GET_PARAMETER(0, aName + "->break when stable", "%d", &breakWhenStable); - GET_PARAMETER(0, aName + "->queue->runtime", "%d", &queueRuntime_); + GET_PARAMETER(0, aName + "->queue->runtime", "%d", &queueRuntime); GET_PARAMETER(0, aName + "->queue->serialization filename", - &queueSerializationFilename_); + &queueSerializationFilename); } + void AdaptInstationary::serialize(std::ostream &out) { FUNCNAME("AdaptInstationary::serialize()"); - problemIteration_->serialize(out); + problemIteration->serialize(out); adaptInfo->serialize(out); - if (problemTime_) { - problemTime_->serialize(out); - } + if (problemTime) + problemTime->serialize(out); } + void AdaptInstationary::deserialize(std::istream &in) { FUNCNAME("AdaptInstationary::deserialize()"); - problemIteration_->deserialize(in); + problemIteration->deserialize(in); adaptInfo->deserialize(in); - if (problemTime_) { - problemTime_->deserialize(in); - } + if (problemTime) + problemTime->deserialize(in); } bool AdaptInstationary::checkQueueRuntime() { // If there is no time limited runtime queue, there is also nothing to check. - if (queueRuntime_ == -1) { + if (queueRuntime == -1) { return false; } @@ -339,24 +379,23 @@ namespace AMDiS { time_t currentTimestamp = time(NULL); // Update list with the last iteration runtimes. - lastIterationsDuration_.push(currentTimestamp - iterationTimestamp_); + lastIterationsDuration.push(currentTimestamp - iterationTimestamp); // The list should not contain more than 5 elements. If so, delete the oldest one. - if (lastIterationsDuration_.size() > 5) { - lastIterationsDuration_.pop(); - } + if (lastIterationsDuration.size() > 5) + lastIterationsDuration.pop(); // Calculate the avarage of the last iterations. - std::queue<int> tmpQueue = lastIterationsDuration_; + std::queue<int> tmpQueue = lastIterationsDuration; int avrgLastIterations = 0; while (!tmpQueue.empty()) { avrgLastIterations += tmpQueue.front(); tmpQueue.pop(); } - avrgLastIterations /= lastIterationsDuration_.size(); + avrgLastIterations /= lastIterationsDuration.size(); // Check if there is enough time for a further iteration. - if (initialTimestamp_ + queueRuntime_ - currentTimestamp < avrgLastIterations * 2) { - std::ofstream out(queueSerializationFilename_.c_str()); + if (initialTimestamp + queueRuntime - currentTimestamp < avrgLastIterations * 2) { + std::ofstream out(queueSerializationFilename.c_str()); serialize(out); out.close(); diff --git a/AMDiS/src/AdaptInstationary.h b/AMDiS/src/AdaptInstationary.h index 56faf49b..5ccf406d 100644 --- a/AMDiS/src/AdaptInstationary.h +++ b/AMDiS/src/AdaptInstationary.h @@ -120,6 +120,13 @@ namespace AMDiS { /// Implements the implicit time strategy. Used by \ref oneTimestep(). virtual void implicitTimeStrategy(); + /** \brief + * This iteration strategy allows the timestep and the mesh to be adapted + * after each timestep solution. There are no inner loops for mesh adaption and + * no refused timesteps. + */ + void simpleAdaptiveTimeStrategy(); + /** \brief * Checks whether the runtime of the queue (of the servers batch system) requires * to stop the calculation and to reschedule the problem to the batch system. @@ -135,10 +142,10 @@ namespace AMDiS { int strategy; /// Parameter \f$ \delta_1 \f$ used in time step reduction - double time_delta_1; + double timeDelta1; /// Parameter \f$ \delta_2 \f$ used in time step enlargement - double time_delta_2; + double timeDelta2; /** \brief * If this parameter is 1 and the instationary problem is stable, hence the number @@ -147,31 +154,31 @@ namespace AMDiS { int breakWhenStable; /// - bool fixedTimestep_; + bool fixedTimestep; /** \brief * Runtime of the queue (of the servers batch system) in seconds. If the problem * runs on a computer/server without a time limited queue, the value is -1. */ - int queueRuntime_; + int queueRuntime; /// Name of the file used to automatically serialize the problem. - std::string queueSerializationFilename_; + std::string queueSerializationFilename; /** \brief * Timestamp at the beginning of all calculations. It is used to calculate the * overall runtime of the problem. */ - time_t initialTimestamp_; + time_t initialTimestamp; /** \brief * Timestamp at the beginning of the last timestep iteration. Is is used to * calculate the runtime of the last timestep. */ - time_t iterationTimestamp_; + time_t iterationTimestamp; /// Stores the runtime (in seconds) of some last timestep iterations. - std::queue<int> lastIterationsDuration_; + std::queue<int> lastIterationsDuration; /** \brief * In debug mode, the adapt loop will print information about timestep decreasing diff --git a/AMDiS/src/AdaptStationary.cc b/AMDiS/src/AdaptStationary.cc index cb291601..1071a5e2 100644 --- a/AMDiS/src/AdaptStationary.cc +++ b/AMDiS/src/AdaptStationary.cc @@ -20,6 +20,7 @@ namespace AMDiS { initialize(); } + AdaptStationary::AdaptStationary(std::string name, ProblemIterationInterface& prob, AdaptInfo& info) @@ -28,15 +29,16 @@ namespace AMDiS { initialize(); } + int AdaptStationary::adapt() { FUNCNAME("AdaptStationary::adapt()"); // initial iteration if (adaptInfo->getSpaceIteration() == -1) { - problemIteration_->beginIteration(adaptInfo); - problemIteration_->oneIteration(adaptInfo, NO_ADAPTION); - problemIteration_->endIteration(adaptInfo); + problemIteration->beginIteration(adaptInfo); + problemIteration->oneIteration(adaptInfo, NO_ADAPTION); + problemIteration->endIteration(adaptInfo); adaptInfo->incSpaceIteration(); } @@ -45,9 +47,9 @@ namespace AMDiS { (adaptInfo->getSpaceIteration() < adaptInfo->getMaxSpaceIteration() || adaptInfo->getMaxSpaceIteration() < 0) ) { - problemIteration_->beginIteration(adaptInfo); - Flag adapted = problemIteration_->oneIteration(adaptInfo, FULL_ITERATION); - problemIteration_->endIteration(adaptInfo); + problemIteration->beginIteration(adaptInfo); + Flag adapted = problemIteration->oneIteration(adaptInfo, FULL_ITERATION); + problemIteration->endIteration(adaptInfo); if (!adapted) break; @@ -58,11 +60,12 @@ namespace AMDiS { return 0; } + void AdaptStationary::initialize() { FUNCNAME("AdaptStationary::initialize()"); - GET_PARAMETER(0, name + "->info", "%d", &info_); + GET_PARAMETER(0, name + "->info", "%d", &info); } } -- GitLab