From e584483283c2f50e9c70508ed85df8cbbc401eed Mon Sep 17 00:00:00 2001
From: Thomas Witkowski <thomas.witkowski@gmx.de>
Date: Mon, 23 Nov 2009 17:10:54 +0000
Subject: [PATCH] New OpenMP parallelization mode.

---
 AMDiS/src/ProblemVec.cc      | 3 ++-
 AMDiS/src/TraverseParallel.h | 9 +++++++--
 2 files changed, 9 insertions(+), 3 deletions(-)

diff --git a/AMDiS/src/ProblemVec.cc b/AMDiS/src/ProblemVec.cc
index 56221882..7c1ed6cc 100644
--- a/AMDiS/src/ProblemVec.cc
+++ b/AMDiS/src/ProblemVec.cc
@@ -620,6 +620,7 @@ namespace AMDiS {
   {
     FUNCNAME("ProblemVec::buildAfterCoarsen()");
 
+    //    printOpenmpTraverseInfo(this, true);
     //    buildAfterCoarsen_sebastianMode(adaptInfo, flag);
 
     clock_t first = clock();
@@ -1183,7 +1184,7 @@ namespace AMDiS {
     const BasisFunction *basisFcts = feSpace->getBasisFcts();
 
 #ifdef _OPENMP
-    TraverseParallelStack stack;
+    TraverseParallelStack stack(0, 1);
 #else
     TraverseStack stack;
 #endif   
diff --git a/AMDiS/src/TraverseParallel.h b/AMDiS/src/TraverseParallel.h
index 97844789..c155dfc1 100644
--- a/AMDiS/src/TraverseParallel.h
+++ b/AMDiS/src/TraverseParallel.h
@@ -47,8 +47,13 @@ namespace AMDiS {
       if (parallelMode == 0) {
 	return stacks[omp_get_thread_num()]->traverseNext(elInfoOld);
       } else {
-	
-      }
+	ElInfo *elInfo = stacks[omp_get_thread_num()]->traverseNext(elInfoOld);
+	while (elInfo &&
+	       elInfo->getElement()->getIndex() % nThreads != omp_get_thread_num()) {
+	  elInfo = stacks[omp_get_thread_num()]->traverseNext(elInfo);
+	}
+	return elInfo;
+      }      
     }
 
   private:
-- 
GitLab