From fc5e6ac898c2d772c4fdfa1daf0e95ff049d422e Mon Sep 17 00:00:00 2001
From: Thomas Witkowski <thomas.witkowski@gmx.de>
Date: Fri, 18 Jun 2010 12:13:44 +0000
Subject: [PATCH] Adapted ES marker for parallel computations.

---
 AMDiS/src/Marker.cc                      | 34 +++++++++++++++---------
 AMDiS/src/parallel/GlobalMatrixSolver.cc |  2 --
 2 files changed, 21 insertions(+), 15 deletions(-)

diff --git a/AMDiS/src/Marker.cc b/AMDiS/src/Marker.cc
index f07b87e8..51d791dc 100644
--- a/AMDiS/src/Marker.cc
+++ b/AMDiS/src/Marker.cc
@@ -1,5 +1,9 @@
 #include "Marker.h"
 
+#ifdef HAVE_PARALLEL_DOMAIN_AMDIS
+#include "parallel/MpiHelper.h"
+#endif
+
 namespace AMDiS {
 
   Marker *Marker::createMarker(std::string name, int row) 
@@ -113,14 +117,18 @@ namespace AMDiS {
    
     double ESThetaP = pow(ESTheta, p);
     double ESThetaCP = pow(ESThetaC, p);
-    
     double epsP = pow(adaptInfo->getSpaceTolerance(row == -1 ? 0 : row), p);
+
+    int nLeaves = mesh->getNumberOfLeaves();
+#ifdef HAVE_PARALLEL_DOMAIN_AMDIS
+    mpi::globalAdd(nLeaves);
+#endif
     
-    markRLimit = ESThetaP * epsP / mesh->getNumberOfLeaves();
-    markCLimit = ESThetaCP * epsP / mesh->getNumberOfLeaves();
+    markRLimit = ESThetaP * epsP / nLeaves;
+    markCLimit = ESThetaCP * epsP / nLeaves;
     
-    INFO(info, 2)("start mark_limits: %.3le %.3le nt=%d\n",
-		  markRLimit, markCLimit, mesh->getNumberOfLeaves());
+    INFO(info, 2)("start mark_limits: %.3le %.3le   nt = %d\n", 
+		  markRLimit, markCLimit, nLeaves);
   }
 
 
@@ -137,14 +145,12 @@ namespace AMDiS {
     GERSSum = 0.0;
 
     double LTheta = pow(1.0 - GERSThetaStar, p);
-    double improv, redfac, wanted, epsP, GERSGamma;
-    
-    epsP = pow(adaptInfo->getSpaceTolerance(row == -1 ? 0 : row), p);
+    double epsP = pow(adaptInfo->getSpaceTolerance(row == -1 ? 0 : row), p);
 
     if (estSum < oldErrSum) {
-      improv = estSum / oldErrSum;
-      wanted = 0.8 * epsP / estSum;
-      redfac = std::min((1.0 - wanted) / (1.0 - improv), 1.0);
+      double improv = estSum / oldErrSum;
+      double wanted = 0.8 * epsP / estSum;
+      double redfac = std::min((1.0 - wanted) / (1.0 - improv), 1.0);
       redfac = std::max(redfac, 0.0);
       
       if (redfac < 1.0) {
@@ -155,7 +161,7 @@ namespace AMDiS {
     }
 
     oldErrSum = estSum;
-    GERSGamma = 1.0;
+    double GERSGamma = 1.0;
 
     if (adaptInfo->isRefinementAllowed(row == -1 ? 0 : row)) {
       if (LTheta > 0) {
@@ -195,7 +201,7 @@ namespace AMDiS {
 	  elInfo = stack.traverseNext(elInfo);
 	}
 
-	INFO(info, 6)("coarse loop: gamma=%.3e, sum=%.3e, limit=%.3e\n",
+	INFO(info, 6)("coarse loop: gamma = %.3e, sum = %.3e, limit = %.3e\n",
 		      GERSGamma, GERSSum, LTheta);
       } while(GERSSum > LTheta);
       
@@ -213,6 +219,7 @@ namespace AMDiS {
     return(markFlag); 
   }
 
+
   void GERSMarker::markElementForRefinement(AdaptInfo *adaptInfo, ElInfo *elInfo) 
   {
     Element *el = elInfo->getElement();
@@ -224,6 +231,7 @@ namespace AMDiS {
     }
   }
 
+
   void GERSMarker::markElementForCoarsening(AdaptInfo *adaptInfo, ElInfo *elInfo) 
   {
     Element *el = elInfo->getElement();
diff --git a/AMDiS/src/parallel/GlobalMatrixSolver.cc b/AMDiS/src/parallel/GlobalMatrixSolver.cc
index b66e6639..b8f69760 100644
--- a/AMDiS/src/parallel/GlobalMatrixSolver.cc
+++ b/AMDiS/src/parallel/GlobalMatrixSolver.cc
@@ -385,8 +385,6 @@ namespace AMDiS {
   {
     FUNCNAME("GlobalMatrixSolver::fillPetscMatrix()");
 
-    MSG("START FILL PETSC MATRIX!\n");
-
     clock_t first = clock();
     int nRankRows = meshDistributor->getNumberRankDofs() * nComponents;
     int nOverallRows = meshDistributor->getNumberOverallDofs() * nComponents;
-- 
GitLab