From 1500f6ae1b947993cdcf7270acca1750331c174d Mon Sep 17 00:00:00 2001
From: Thomas Witkowski <thomas.witkowski@gmx.de>
Date: Tue, 29 Apr 2008 09:37:05 +0000
Subject: [PATCH] * Dies und jenes * OpenMP-Versuche aus Vorkonditionierern und
 Loesern geloescht

---
 AMDiS/libtool              |  6 +--
 AMDiS/src/Assembler.cc     | 32 +++++++++++-----
 AMDiS/src/BasisFunction.h  |  9 +++++
 AMDiS/src/DOFMatrix.cc     | 12 +++---
 AMDiS/src/DOFVector.hh     | 76 +++++++++++---------------------------
 AMDiS/src/Estimator.cc     |  8 +---
 AMDiS/src/Lagrange.cc      | 17 +++++++--
 AMDiS/src/Lagrange.h       |  5 +++
 AMDiS/src/Preconditioner.h | 18 ++-------
 AMDiS/src/ProblemVec.cc    | 43 +++++++--------------
 AMDiS/src/SystemVector.h   | 28 +++++---------
 11 files changed, 110 insertions(+), 144 deletions(-)

diff --git a/AMDiS/libtool b/AMDiS/libtool
index 315f21f9..db01bc59 100755
--- a/AMDiS/libtool
+++ b/AMDiS/libtool
@@ -331,7 +331,7 @@ link_all_deplibs=unknown
 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"`
 
 # Run-time system search path for libraries
-sys_lib_dlsearch_path_spec="/lib /usr/lib /usr/lib/qt-3.3/lib "
+sys_lib_dlsearch_path_spec="/lib /usr/lib /usr/lib/octave-2.9.9 /usr/lib/qt-3.3/lib "
 
 # Fix the shell variable $srcfile for the compiler.
 fix_srcfile_path=""
@@ -7550,7 +7550,7 @@ link_all_deplibs=unknown
 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"`
 
 # Run-time system search path for libraries
-sys_lib_dlsearch_path_spec="/lib /usr/lib /usr/lib/qt-3.3/lib "
+sys_lib_dlsearch_path_spec="/lib /usr/lib /usr/lib/octave-2.9.9 /usr/lib/qt-3.3/lib "
 
 # Fix the shell variable $srcfile for the compiler.
 fix_srcfile_path=""
@@ -7861,7 +7861,7 @@ link_all_deplibs=unknown
 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"`
 
 # Run-time system search path for libraries
-sys_lib_dlsearch_path_spec="/lib /usr/lib /usr/lib/qt-3.3/lib "
+sys_lib_dlsearch_path_spec="/lib /usr/lib /usr/lib/octave-2.9.9 /usr/lib/qt-3.3/lib "
 
 # Fix the shell variable $srcfile for the compiler.
 fix_srcfile_path=""
diff --git a/AMDiS/src/Assembler.cc b/AMDiS/src/Assembler.cc
index 74dbfa1f..373fa100 100644
--- a/AMDiS/src/Assembler.cc
+++ b/AMDiS/src/Assembler.cc
@@ -497,6 +497,7 @@ namespace AMDiS {
     int numPoints = quadrature->getNumPoints();
 
     double *c = GET_MEMORY(double, numPoints);
+
     for (int iq = 0; iq < numPoints; iq++) {
       c[iq] = 0.0;
     }
@@ -525,7 +526,7 @@ namespace AMDiS {
 	  }
 	}
       }
-    } else {      /*  non symmetric assembling   */
+    } else {      //  non symmetric assembling 
       for (int iq = 0; iq < numPoints; iq++) {
 	c[iq] *= elInfo->getDet();
 
@@ -542,6 +543,7 @@ namespace AMDiS {
 	}
       }
     }
+
     FREE_MEMORY(c, double, numPoints);
     FREE_MEMORY(phival, double, nCol);
   }
@@ -1394,10 +1396,11 @@ namespace AMDiS {
 
     Element *el = elInfo->getElement();
 
+    
     checkForNewTraverse();
 
     checkQuadratures();
-
+    
     if ((el != lastMatEl && el != lastVecEl) || !operat->isOptimized()) {
       initElement(elInfo);
     }
@@ -1410,8 +1413,6 @@ namespace AMDiS {
     } else {
       if (rememberElMat) {
 	axpy(factor, *elementMatrix, *userMat);
-	//*userMat += *elementMatrix * factor;
-	//operat->addElementMatrix(elementMatrix, userMat, factor);
 	return;
       }
     }
@@ -1427,11 +1428,9 @@ namespace AMDiS {
     if (zeroOrderAssembler)
       zeroOrderAssembler->calculateElementMatrix(elInfo, mat);
 
-    if(rememberElMat && userMat) {
+    if (rememberElMat && userMat) {
       axpy(factor, *elementMatrix, *userMat);
-      //*userMat += *elementMatrix * factor;
-      //operat->addElementMatrix(elementMatrix, userMat, factor);
-    }
+    }    
   }
 
   void Assembler::calculateElementVector(const ElInfo *elInfo, 
@@ -1597,27 +1596,40 @@ namespace AMDiS {
   ElementMatrix *Assembler::initElementMatrix(ElementMatrix *elMat, 
 					      const ElInfo *elInfo)
   {
-    if(!elMat) {
+    if (!elMat) {
       elMat = NEW ElementMatrix(nRow, nCol);
     }
 
     elMat->set(0.0);
-  
+     
     DOFAdmin *rowAdmin = rowFESpace->getAdmin();
     DOFAdmin *colAdmin = colFESpace->getAdmin();
 
+    
     Element *element = elInfo->getElement();
 
+    /*
     elMat->rowIndices = 
       rowFESpace->getBasisFcts()->getLocalIndices(element,
 						  rowAdmin,
 						  NULL);
+    */
 
+    /*
     elMat->colIndices = 
       colFESpace->getBasisFcts()->getLocalIndices(element,
 						  colAdmin,
 						  NULL);
+    */
+
+
+    rowFESpace->getBasisFcts()->getLocalIndicesVec(element,
+						   rowAdmin,
+						   &(elMat->rowIndices));
 
+    colFESpace->getBasisFcts()->getLocalIndicesVec(element,
+						   colAdmin,
+						   &(elMat->colIndices));
     return elMat;
   }
 
diff --git a/AMDiS/src/BasisFunction.h b/AMDiS/src/BasisFunction.h
index b9393a11..a1bf5929 100644
--- a/AMDiS/src/BasisFunction.h
+++ b/AMDiS/src/BasisFunction.h
@@ -29,6 +29,7 @@
 #include <string>
 #include "Global.h"
 #include "Boundary.h"
+#include "MatrixVector.h"
 
 namespace AMDiS {
 
@@ -318,6 +319,14 @@ namespace AMDiS {
       return NULL;
     };
 
+    /** \brief
+     * Returns local dof indices of the element for the given fe space.
+     */
+    virtual void getLocalIndicesVec(const Element*,
+				    const DOFAdmin*,
+				    Vector<DegreeOfFreedom>*) const
+    {};
+
 
     /** \brief
      * Evaluates elements value at barycentric coordinates lambda with local 
diff --git a/AMDiS/src/DOFMatrix.cc b/AMDiS/src/DOFMatrix.cc
index 9a8beef2..099fecc2 100644
--- a/AMDiS/src/DOFMatrix.cc
+++ b/AMDiS/src/DOFMatrix.cc
@@ -450,15 +450,14 @@ namespace AMDiS {
     FUNCNAME("DOFMatrix::assemble()");
 
     if (!op && operators.size() == 0) {
-      //WARNING("no operator\n");
       return NULL;
     }
-
+    
     Operator *operat = op ? op : operators[0];
-
+    
     elementMatrix = 
       operat->getAssembler()->initElementMatrix(elementMatrix, elInfo);
-  
+    
     if (op) {
       op->getElementMatrix(elInfo, elementMatrix);
     } else {
@@ -472,10 +471,11 @@ namespace AMDiS {
 				  elementMatrix, 
 				  *factorIt ? **factorIt : 1.0);
 	}
+      
     }
-
+    
     addElementMatrix(factor, *elementMatrix, bound);
-
+    
     return elementMatrix;
   }
 
diff --git a/AMDiS/src/DOFVector.hh b/AMDiS/src/DOFVector.hh
index 4cc8e241..78624c2b 100644
--- a/AMDiS/src/DOFVector.hh
+++ b/AMDiS/src/DOFVector.hh
@@ -1207,61 +1207,29 @@ namespace AMDiS {
 	("a.size = %d too small: admin->sizeUsed = %d\n",
 	 a.getSize(), rowAdmin->getUsedSize());
 
-      // This is the old implementation of the mv-multiplication. It have been changed
-      // because of the OpenMP-parallelization:
-      //       typename DOFVector<T>::Iterator vecIterator(dynamic_cast<DOFIndexed<T>*>(&result), USED_DOFS); 
-      //       DOFMatrix::Iterator rowIterator(const_cast<DOFMatrix*>(&a), USED_DOFS);
-      //       for(vecIterator.reset(), rowIterator.reset();
-      // 	  !rowIterator.end();
-      // 	  ++rowIterator, ++vecIterator) { 
-      // 	sum = 0;
-      // 	if(!add) *vecIterator = 0.0;
-      // 	for(::std::vector<MatEntry>::iterator colIterator = rowIterator->begin();
-      // 	    colIterator != rowIterator->end();
-      // 	    colIterator++) {
-      // 	  jcol = colIterator->col;
-      // 	  if (jcol >= 0) { // entry used? 
-      // 	    sum += (static_cast<double>(colIterator->entry)) * x[jcol];
-      // 	  } else {
-      // 	    if (jcol == DOFMatrix::NO_MORE_ENTRIES)
-      // 	      break;
-      // 	  }
-      // 	}
-      // 	*vecIterator += sum;
-      //       }
 
-      int i;
-      int maxI = result.getSize();
-
-#ifdef _OPENMP
-#pragma omp parallel for schedule(dynamic, 25000) default(shared) private(i)
-#endif
-      for (i = 0; i < maxI; i++) {
-	if (rowAdmin->isDOFFree(i)) {
-	  continue;
-	}
-
-  	T sum = 0;
-
- 	const ::std::vector<MatEntry> *v = &a[i];
-
-  	for (int j = 0; j < static_cast<int>(v->size()); j++) {
-	  const MatEntry *m = &((*v)[j]);
-	  int jcol = m->col;
-
-  	  if (jcol >= 0) { // entry used? 
-  	    sum += (static_cast<double>(m->entry)) * x[jcol];
-  	  } else {
-  	    if (jcol == DOFMatrix::NO_MORE_ENTRIES)
-  	      break;
-  	  }
-  	}
-
-  	if (add) {
-  	  result[i] += sum;
-  	} else {
-  	  result[i] = sum;
-  	}
+      typename DOFVector<T>::Iterator vecIterator(dynamic_cast<DOFIndexed<T>*>(&result), USED_DOFS); 
+      DOFMatrix::Iterator rowIterator(const_cast<DOFMatrix*>(&a), USED_DOFS);
+      for(vecIterator.reset(), rowIterator.reset();
+      	  !rowIterator.end();
+      	  ++rowIterator, ++vecIterator) { 
+      	
+	double sum = 0;
+      	if (!add) 
+	  *vecIterator = 0.0;
+      	for(::std::vector<MatEntry>::iterator colIterator = rowIterator->begin();
+      	    colIterator != rowIterator->end();
+      	    colIterator++) {
+      	  
+	  int jcol = colIterator->col;
+      	  if (jcol >= 0) { // entry used? 
+      	    sum += (static_cast<double>(colIterator->entry)) * x[jcol];
+      	  } else {
+      	    if (jcol == DOFMatrix::NO_MORE_ENTRIES)
+      	      break;
+      	  }
+      	}
+      	*vecIterator += sum;
       }
 
     } else if (transpose == Transpose) {
diff --git a/AMDiS/src/Estimator.cc b/AMDiS/src/Estimator.cc
index b1ce2082..3b70fe17 100755
--- a/AMDiS/src/Estimator.cc
+++ b/AMDiS/src/Estimator.cc
@@ -235,10 +235,6 @@ namespace AMDiS {
 
     el = elInfo->getElement();
 
-    //    if (el->getIndex() == 66065) {
-    //      ::std::cout << "UNSER ELEMENT!" << ::std::endl;
-    //    }
-
     double det = elInfo->getDet();
     const DimVec<WorldVector<double> > &Lambda = elInfo->getGrdLambda();
 
@@ -246,11 +242,11 @@ namespace AMDiS {
 
     double h2 = h2_from_det(det, dim);
 
-    for(iq = 0; iq < numPoints; iq++) {
+    for (iq = 0; iq < numPoints; iq++) {
       riq[iq] = 0.0;
     }
 
-    for(system = 0; system < numSystems; system++) {
+    for (system = 0; system < numSystems; system++) {
 
       if(matrix[system] == NULL) continue;
 
diff --git a/AMDiS/src/Lagrange.cc b/AMDiS/src/Lagrange.cc
index 886d615e..3df2274b 100644
--- a/AMDiS/src/Lagrange.cc
+++ b/AMDiS/src/Lagrange.cc
@@ -1004,7 +1004,7 @@ namespace AMDiS {
     GeoIndex posIndex;
 
     DegreeOfFreedom* result;
-
+    
     if (indices) {
       result = indices;
     } else {
@@ -1014,7 +1014,7 @@ namespace AMDiS {
       localVecSize = nBasFcts;
       result = localVec;
     }
-
+    
     for (pos = 0, j = 0; pos <= dim; pos++) {
       posIndex = INDEX_OF_DIM(pos, dim);
       n0 = admin->getNumberOfPreDOFs(posIndex);
@@ -1031,10 +1031,21 @@ namespace AMDiS {
 	}
       }
     }
-
+    
     return result;
   }
 
+  void Lagrange::getLocalIndicesVec(const Element* el,
+				    const DOFAdmin *admin,
+				    Vector<DegreeOfFreedom> *indices) const
+  {
+    if (indices->getSize() < nBasFcts) {
+      indices->resize(nBasFcts);
+    }
+
+    getLocalIndices(el, admin, &((*indices)[0]));
+  }
+
   void Lagrange::l2ScpFctBas(Quadrature *q,
 			     AbstractFunction<WorldVector<double>, WorldVector<double> >* f,
 			     DOFVector<WorldVector<double> >* fh)
diff --git a/AMDiS/src/Lagrange.h b/AMDiS/src/Lagrange.h
index 51a38f00..78cb7f28 100644
--- a/AMDiS/src/Lagrange.h
+++ b/AMDiS/src/Lagrange.h
@@ -152,6 +152,11 @@ namespace AMDiS {
 					   const DOFAdmin*,
 					   DegreeOfFreedom*) const;
 
+
+    void getLocalIndicesVec(const Element*,
+			    const DOFAdmin*,
+			    Vector<DegreeOfFreedom>*) const;
+
     /** \brief
      * Implements BasisFunction::l2ScpFctBas
      */
diff --git a/AMDiS/src/Preconditioner.h b/AMDiS/src/Preconditioner.h
index 5ddec677..eb3c0f96 100644
--- a/AMDiS/src/Preconditioner.h
+++ b/AMDiS/src/Preconditioner.h
@@ -237,11 +237,7 @@ namespace AMDiS {
      * Initialisation of the preconditioner
      */
     virtual void init() {
-      int i;
-#ifdef _OPENMP
-#pragma omp parallel for schedule(static, 1) default(shared) private(i)
-#endif
-      for (i = 0; i < scalPrecons.getSize(); i++) {
+      for (int i = 0; i < scalPrecons.getSize(); i++) {
 	scalPrecons[i]->init();
       }
     };
@@ -250,11 +246,7 @@ namespace AMDiS {
      * Preconditioning method
      */
     virtual void precon(SystemVector *x) {
-      int i;
-#ifdef _OPENMP
-#pragma omp parallel for schedule(static, 1) default(shared) private(i)
-#endif
-      for (i = 0; i < scalPrecons.getSize(); i++) {
+      for (int i = 0; i < scalPrecons.getSize(); i++) {
 	scalPrecons[i]->precon(x->getDOFVector(i));
       }
     };
@@ -263,11 +255,7 @@ namespace AMDiS {
      * Frees needed memory.
      */
     virtual void  exit() {
-      int i;
-#ifdef _OPENMP
-#pragma omp parallel for schedule(static, 1) default(shared) private(i)
-#endif
-      for (i = 0; i < scalPrecons.getSize(); i++) {
+      for (int i = 0; i < scalPrecons.getSize(); i++) {
 	scalPrecons[i]->exit();
       }
     };
diff --git a/AMDiS/src/ProblemVec.cc b/AMDiS/src/ProblemVec.cc
index b965e1c9..bbd98a4f 100644
--- a/AMDiS/src/ProblemVec.cc
+++ b/AMDiS/src/ProblemVec.cc
@@ -679,10 +679,6 @@ namespace AMDiS {
       }
     }
 
-    TraverseStack stack;
-    DualTraverse dualStack;
-    ElInfo *elInfo; 
-
     for (int i = 0; i < numComponents_; i++) {
       for (int j = 0; j < numComponents_; j++) {
 	// Only if this variable is true, the current matrix will be assembled.	
@@ -708,19 +704,22 @@ namespace AMDiS {
 	  continue;
 	}
 
-
+	
 	if (componentMeshes_[i] != componentMeshes_[j]) {
 	  ERROR_EXIT("not yet\n");
 	} else {
 	  if (assembleMatrix && matrix->getBoundaryManager())
 	    matrix->getBoundaryManager()->initMatrix(matrix);
 
-	  elInfo = stack.traverseFirst(componentMeshes_[i], -1, assembleFlag);
+	  TraverseStack stack;
+	  ElInfo *elInfo = stack.traverseFirst(componentMeshes_[i], -1, assembleFlag);
+	  
 	  while (elInfo) {
 	    const BoundaryType *bound = 
 	      useGetBound_ ?
 	      componentSpaces_[i]->getBasisFcts()->getBound(elInfo, NULL) :
 	      NULL;
+	    
 	    if (assembleMatrix) {
 	      matrix->assemble(1.0, elInfo, bound);
 	      if (matrix->getBoundaryManager()) {
@@ -732,12 +731,14 @@ namespace AMDiS {
 	    if (i == j) {
 	      rhs_->getDOFVector(i)->assemble(1.0, elInfo, bound);
 	    }
+	    
 	    elInfo = stack.traverseNext(elInfo);
 	  }
-
+	  
 	  if (assembleMatrix && matrix->getBoundaryManager())
-	    matrix->getBoundaryManager()->exitMatrix(matrix);
+	    matrix->getBoundaryManager()->exitMatrix(matrix);	  
 	}
+	
 
 	assembledMatrix_[i][j] = true;
       }
@@ -748,7 +749,8 @@ namespace AMDiS {
       if (solution_->getDOFVector(i)->getBoundaryManager())
 	solution_->getDOFVector(i)->getBoundaryManager()->initVector(solution_->getDOFVector(i));
 
-      elInfo = stack.traverseFirst(componentMeshes_[i], -1, assembleFlag);
+      TraverseStack stack;
+      ElInfo *elInfo = stack.traverseFirst(componentMeshes_[i], -1, assembleFlag);
       while (elInfo) {
 	if(rhs_->getDOFVector(i)->getBoundaryManager())
 	  rhs_->getDOFVector(i)->getBoundaryManager()->
@@ -761,28 +763,11 @@ namespace AMDiS {
       if (rhs_->getDOFVector(i)->getBoundaryManager())
 	rhs_->getDOFVector(i)->getBoundaryManager()->exitVector(rhs_->getDOFVector(i));
       if (solution_->getDOFVector(i)->getBoundaryManager())
-	solution_->getDOFVector(i)->getBoundaryManager()->exitVector(solution_->getDOFVector(i));
+	solution_->getDOFVector(i)->getBoundaryManager()->exitVector(solution_->getDOFVector(i));      
     }
-
-    for (int i = 0; i < numComponents_; i++) {
-      //      ::std::cout << "Vector: " << i << ::std::endl;
-      //      rhs_->getDOFVector(i)->print();
-    }
-   
+  
     INFO(info_, 8)("buildAfterCoarsen needed %.5f seconds\n",
-		   TIME_USED(first,clock()));
-
-
-//     int memsize = 0;
-//     for (int i = 0; i < numComponents_; i++) {
-//       for (int j = 0; j < numComponents_; j++) {
-// 	DOFMatrix *matrix = (*systemMatrix_)[i][j];
-// 	memsize += (*matrix).memsize();
-//       }
-//     }
-
-//     ::std::cout << "SIZE: " << memsize << ::std::endl;
-
+		   TIME_USED(first, clock()));
   }
 
   void ProblemVec::writeFiles(AdaptInfo *adaptInfo, bool force) 
diff --git a/AMDiS/src/SystemVector.h b/AMDiS/src/SystemVector.h
index acca3e7b..8c532cb3 100644
--- a/AMDiS/src/SystemVector.h
+++ b/AMDiS/src/SystemVector.h
@@ -474,14 +474,11 @@ namespace AMDiS {
     TEST_EXIT(size == matrix.getNumRows())("incompatible sizes\n");
     TEST_EXIT(size == matrix.getNumCols())("incompatible sizes\n");
     
-    int i, j;
-
-#ifdef _OPENMP
-#pragma omp parallel for schedule(static, 1) default(shared) private(i,j)
-#endif
-    for (i = 0; i < size; i++) {
-      if (!add) result.getDOFVector(i)->set(0.0);
-      for (j = 0; j < size; j++) {
+    for (int i = 0; i < size; i++) {
+      if (!add) 
+	result.getDOFVector(i)->set(0.0);
+
+      for (int j = 0; j < size; j++) {
 	if (matrix[i][j]) {
 	  mv<double>(NoTranspose, 
 		     *(matrix[i][j]), 
@@ -500,12 +497,10 @@ namespace AMDiS {
   {
     TEST_EXIT(x.getNumVectors() == y.getNumVectors())
       ("invalid size\n");
-    int i, size = x.getNumVectors();
 
-#ifdef _OPENMP
-#pragma omp parallel for schedule(static, 1) default(shared) private(i)
-#endif
-    for (i = 0; i < size; i++) {
+    int size = x.getNumVectors();
+
+    for (int i = 0; i < size; i++) {
       axpy(a, *(x.getDOFVector(i)), *(y.getDOFVector(i)));
     }
   };
@@ -517,12 +512,9 @@ namespace AMDiS {
   {
     TEST_EXIT(x.getNumVectors() == y.getNumVectors())
       ("invalid size\n");
-    int i, size = x.getNumVectors();
+    int size = x.getNumVectors();
 
-#ifdef _OPENMP
-#pragma omp parallel for schedule(static, 1) default(shared) private(i)
-#endif
-    for (i = 0; i < size; i++) {
+    for (int i = 0; i < size; i++) {
       xpay(a, *(x.getDOFVector(i)), *(y.getDOFVector(i)));
     }
   }
-- 
GitLab