From 8f4f2d4df4663445710511051131eb572993fc66 Mon Sep 17 00:00:00 2001
From: Thomas Witkowski <thomas.witkowski@gmx.de>
Date: Fri, 15 Aug 2008 09:39:40 +0000
Subject: [PATCH] * ParaReal files added to Makefile.am

---
 AMDiS/bin/Makefile.am               |  4 +++-
 AMDiS/bin/Makefile.in               | 18 ++++++++++++++---
 AMDiS/src/SystemVector.h            | 31 ++++++++++++++++-------------
 AMDiS/src/parareal/AdaptParaReal.cc | 10 +++++++---
 4 files changed, 42 insertions(+), 21 deletions(-)

diff --git a/AMDiS/bin/Makefile.am b/AMDiS/bin/Makefile.am
index 65a86c99..0decc669 100644
--- a/AMDiS/bin/Makefile.am
+++ b/AMDiS/bin/Makefile.am
@@ -220,7 +220,9 @@ $(SOURCE_DIR)/DataCollector.h $(SOURCE_DIR)/DataCollector.cc \
 $(SOURCE_DIR)/ElementInfo.h \
 $(SOURCE_DIR)/VertexInfo.h \
 $(SOURCE_DIR)/PeriodicInfo.h \
-$(SOURCE_DIR)/OpenMP.h
+$(SOURCE_DIR)/OpenMP.h \
+$(SOURCE_DIR)/parareal/ProblemBase.h \
+$(SOURCE_DIR)/parareal/AdaptParaReal.h $(SOURCE_DIR)/parareal/AdaptParaReal.cc
 
 
 COMPOSITE_SOURCE_DIR = ../compositeFEM/src
diff --git a/AMDiS/bin/Makefile.in b/AMDiS/bin/Makefile.in
index f970c4cb..91d1f3a2 100644
--- a/AMDiS/bin/Makefile.in
+++ b/AMDiS/bin/Makefile.in
@@ -237,7 +237,9 @@ am__libamdis_la_SOURCES_DIST = $(PARALLEL_DIR)/ConditionalEstimator.h \
 	$(SOURCE_DIR)/VtkWriter.cc $(SOURCE_DIR)/DataCollector.h \
 	$(SOURCE_DIR)/DataCollector.cc $(SOURCE_DIR)/ElementInfo.h \
 	$(SOURCE_DIR)/VertexInfo.h $(SOURCE_DIR)/PeriodicInfo.h \
-	$(SOURCE_DIR)/OpenMP.h
+	$(SOURCE_DIR)/OpenMP.h $(SOURCE_DIR)/parareal/ProblemBase.h \
+	$(SOURCE_DIR)/parareal/AdaptParaReal.h \
+	$(SOURCE_DIR)/parareal/AdaptParaReal.cc
 @USE_PARALLEL_AMDIS_TRUE@am__objects_1 =  \
 @USE_PARALLEL_AMDIS_TRUE@	libamdis_la-ConditionalEstimator.lo \
 @USE_PARALLEL_AMDIS_TRUE@	libamdis_la-MeshStructure.lo \
@@ -301,7 +303,7 @@ am_libamdis_la_OBJECTS = $(am__objects_1) \
 	libamdis_la-Triangle.lo libamdis_la-TecPlotWriter.lo \
 	libamdis_la-ValueWriter.lo libamdis_la-MemoryPool.lo \
 	libamdis_la-MemoryManager.lo libamdis_la-VtkWriter.lo \
-	libamdis_la-DataCollector.lo
+	libamdis_la-DataCollector.lo libamdis_la-AdaptParaReal.lo
 libamdis_la_OBJECTS = $(am_libamdis_la_OBJECTS)
 libcompositeFEM_la_LIBADD =
 am_libcompositeFEM_la_OBJECTS = libcompositeFEM_la-CFE_Integration.lo \
@@ -649,7 +651,9 @@ $(SOURCE_DIR)/DataCollector.h $(SOURCE_DIR)/DataCollector.cc \
 $(SOURCE_DIR)/ElementInfo.h \
 $(SOURCE_DIR)/VertexInfo.h \
 $(SOURCE_DIR)/PeriodicInfo.h \
-$(SOURCE_DIR)/OpenMP.h
+$(SOURCE_DIR)/OpenMP.h \
+$(SOURCE_DIR)/parareal/ProblemBase.h \
+$(SOURCE_DIR)/parareal/AdaptParaReal.h $(SOURCE_DIR)/parareal/AdaptParaReal.cc
 
 COMPOSITE_SOURCE_DIR = ../compositeFEM/src
 libcompositeFEM_la_CXXFLAGS = $(libamdis_la_CXXFLAGS)
@@ -749,6 +753,7 @@ distclean-compile:
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libamdis_la-AdaptBase.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libamdis_la-AdaptInfo.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libamdis_la-AdaptInstationary.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libamdis_la-AdaptParaReal.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libamdis_la-AdaptStationary.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libamdis_la-Assembler.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libamdis_la-BFGS_Precond.Plo@am__quote@
@@ -1603,6 +1608,13 @@ libamdis_la-DataCollector.lo: $(SOURCE_DIR)/DataCollector.cc
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCXX_FALSE@	$(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libamdis_la_CXXFLAGS) $(CXXFLAGS) -c -o libamdis_la-DataCollector.lo `test -f '$(SOURCE_DIR)/DataCollector.cc' || echo '$(srcdir)/'`$(SOURCE_DIR)/DataCollector.cc
 
+libamdis_la-AdaptParaReal.lo: $(SOURCE_DIR)/parareal/AdaptParaReal.cc
+@am__fastdepCXX_TRUE@	if $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libamdis_la_CXXFLAGS) $(CXXFLAGS) -MT libamdis_la-AdaptParaReal.lo -MD -MP -MF "$(DEPDIR)/libamdis_la-AdaptParaReal.Tpo" -c -o libamdis_la-AdaptParaReal.lo `test -f '$(SOURCE_DIR)/parareal/AdaptParaReal.cc' || echo '$(srcdir)/'`$(SOURCE_DIR)/parareal/AdaptParaReal.cc; \
+@am__fastdepCXX_TRUE@	then mv -f "$(DEPDIR)/libamdis_la-AdaptParaReal.Tpo" "$(DEPDIR)/libamdis_la-AdaptParaReal.Plo"; else rm -f "$(DEPDIR)/libamdis_la-AdaptParaReal.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='$(SOURCE_DIR)/parareal/AdaptParaReal.cc' object='libamdis_la-AdaptParaReal.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@	$(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libamdis_la_CXXFLAGS) $(CXXFLAGS) -c -o libamdis_la-AdaptParaReal.lo `test -f '$(SOURCE_DIR)/parareal/AdaptParaReal.cc' || echo '$(srcdir)/'`$(SOURCE_DIR)/parareal/AdaptParaReal.cc
+
 libcompositeFEM_la-CFE_Integration.lo: $(COMPOSITE_SOURCE_DIR)/CFE_Integration.cc
 @am__fastdepCXX_TRUE@	if $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcompositeFEM_la_CXXFLAGS) $(CXXFLAGS) -MT libcompositeFEM_la-CFE_Integration.lo -MD -MP -MF "$(DEPDIR)/libcompositeFEM_la-CFE_Integration.Tpo" -c -o libcompositeFEM_la-CFE_Integration.lo `test -f '$(COMPOSITE_SOURCE_DIR)/CFE_Integration.cc' || echo '$(srcdir)/'`$(COMPOSITE_SOURCE_DIR)/CFE_Integration.cc; \
 @am__fastdepCXX_TRUE@	then mv -f "$(DEPDIR)/libcompositeFEM_la-CFE_Integration.Tpo" "$(DEPDIR)/libcompositeFEM_la-CFE_Integration.Plo"; else rm -f "$(DEPDIR)/libcompositeFEM_la-CFE_Integration.Tpo"; exit 1; fi
diff --git a/AMDiS/src/SystemVector.h b/AMDiS/src/SystemVector.h
index 75f90eaa..4454f973 100644
--- a/AMDiS/src/SystemVector.h
+++ b/AMDiS/src/SystemVector.h
@@ -58,7 +58,9 @@ namespace AMDiS {
       Creator(const ::std::string &name_,
 	      ::std::vector<FiniteElemSpace*> feSpace_, 
 	      int size_) 
-	: name(name_), feSpace(feSpace_), size(size_) 
+	: name(name_), 
+	  feSpace(feSpace_), 
+	  size(size_) 
       {};
 
       /** \brief
@@ -133,7 +135,7 @@ namespace AMDiS {
 	vectors(rhs.vectors.getSize())
       
     {
-      for (int i = 0; i < vectors.getSize();i++) {
+      for (int i = 0; i < vectors.getSize(); i++) {
 	vectors[i] = new DOFVector<double>(*rhs.vectors[i]);
       }
     };
@@ -168,7 +170,8 @@ namespace AMDiS {
      * Returns sum of used vector sizes.
      */
     inline int getUsedSize() const {
-      int totalSize = 0, size = vectors.getSize();
+      int totalSize = 0;
+      int size = vectors.getSize();
       for (int i = 0; i < size; i++) {
 	totalSize += vectors[i]->getUsedSize();
       }
@@ -203,7 +206,7 @@ namespace AMDiS {
       int localIndex = index;
       int vectorIndex = 0;
 
-      while(localIndex >= vectors[vectorIndex]->getUsedSize()) {
+      while (localIndex >= vectors[vectorIndex]->getUsedSize()) {
 	localIndex -= vectors[vectorIndex++]->getUsedSize();
       }
 
@@ -217,7 +220,7 @@ namespace AMDiS {
       int localIndex = index;
       int vectorIndex = 0;
 
-      while(localIndex >= vectors[vectorIndex]->getUsedSize()) {
+      while (localIndex >= vectors[vectorIndex]->getUsedSize()) {
 	localIndex -= vectors[vectorIndex++]->getUsedSize();
       }
 
@@ -258,36 +261,36 @@ namespace AMDiS {
     };
 
     void serialize(::std::ostream &out) {
-      int i, size = vectors.getSize();
+      int size = vectors.getSize();
       out.write(reinterpret_cast<const char*>(&size), sizeof(int));
-      for(i = 0; i < size; i++) {
+      for (int i = 0; i < size; i++) {
 	vectors[i]->serialize(out);
       }
     };
 
     void deserialize(::std::istream &in) {
-      int i, size, oldSize = vectors.getSize();
+      int size, oldSize = vectors.getSize();
       in.read(reinterpret_cast<char*>(&size), sizeof(int));
       vectors.resize(size);
-      for(i = oldSize; i < size; i++) {
+      for (int i = oldSize; i < size; i++) {
 	vectors[i] = NEW DOFVector<double>(feSpace[i], "");
       }
-      for(i = 0; i < size; i++) {
+      for (int i = 0; i < size; i++) {
 	vectors[i]->deserialize(in);
       }  
     };
 
     void copy(const SystemVector& rhs) {
-      int i, size = vectors.getSize();
+      int size = vectors.getSize();
       TEST_EXIT_DBG(size == rhs.getNumVectors())("invalid sizes\n");
-      for(i = 0; i < size; i++) {
+      for (int i = 0; i < size; i++) {
 	vectors[i]->copy(*(const_cast<SystemVector&>(rhs).getDOFVector(i)));
       }
     };
 
     void interpol(::std::vector<AbstractFunction<double, WorldVector<double> >*> *f) {
-      int i, size = vectors.getSize();
-      for(i = 0; i < size; i++) {
+      int size = vectors.getSize();
+      for (int i = 0; i < size; i++) {
 	vectors[i]->interpol((*f)[i]);
       }
     };
diff --git a/AMDiS/src/parareal/AdaptParaReal.cc b/AMDiS/src/parareal/AdaptParaReal.cc
index 8929ebae..f02e5754 100644
--- a/AMDiS/src/parareal/AdaptParaReal.cc
+++ b/AMDiS/src/parareal/AdaptParaReal.cc
@@ -4,15 +4,19 @@
 namespace AMDiS {
   int AdaptParaReal::adapt()
   {    
+    // Compute number of coarse and fine time stages.
     int coarseStages = static_cast<int>(round(adaptInfo_->getEndTime() / coarseTimestep));
     int fineStages = static_cast<int>(round(coarseTimestep / fineTimestep));
 
+    // First, sequentially calculate first approximation on coarse time grid.
     adaptInfo_->setTimestep(coarseTimestep);
     pararealProb->setStoreSolutions(false, true);
     pararealProb->setStoreInitSolution(true);
     AdaptInstationary::adapt();
 
+    // ParaReal iterations
     for (int k = 0; k < pararealIter; k++) {
+      // Compute solutions with fine timestep on the coarse grid slides.
       for (int i = 0; i < coarseStages; i++) {
 	adaptInfo_->resetTimeValues(fineTimestep,
 				    i * coarseTimestep,
@@ -25,13 +29,13 @@ namespace AMDiS {
 	AdaptInstationary::adapt();
       }
       
+      // Copy coarse grid solutions to another vector.
       std::vector<DOFVector<double> *> coarseSolutions =
 	(*pararealProb->getCoarseSolutions());
-      pararealProb->clearCoarseSolutions();
-      
-      
+      pararealProb->clearCoarseSolutions();          
       (*pararealProb->getCoarseSolutions()).push_back(coarseSolutions[0]);
       
+      // Again, compute solutions on coarse grid and calculate the corrected solutions.
       for (int i = 1; i <= coarseStages; i++) {
 	adaptInfo_->resetTimeValues(coarseTimestep,
 				    (i - 1) * coarseTimestep,
-- 
GitLab