diff --git a/dune/elasticity/assemblers/feassembler.hh b/dune/elasticity/assemblers/feassembler.hh index e10bde18314eca3ea1f421ee161fb36533c7463d..7144706f37bf6bdced32d2c5df48185894269632 100644 --- a/dune/elasticity/assemblers/feassembler.hh +++ b/dune/elasticity/assemblers/feassembler.hh @@ -15,7 +15,6 @@ template <class Basis, class VectorType> class FEAssembler { typedef typename Basis::GridView GridView; - typedef typename GridView::template Codim<0>::template Partition<Dune::Interior_Partition>::Iterator ElementIterator; //! Dimension of the grid. enum { gridDim = GridView::dimension }; @@ -72,19 +71,16 @@ getNeighborsPerVertex(Dune::MatrixIndexSet& nb) const nb.resize(n, n); - ElementIterator it = basis_.getGridView().template begin<0,Dune::Interior_Partition>(); - ElementIterator endit = basis_.getGridView().template end<0,Dune::Interior_Partition> (); - - for (; it!=endit; ++it) { - - const typename Basis::LocalFiniteElement& lfe = basis_.getLocalFiniteElement(*it); + for (const auto& element : elements(basis_.getGridView(), Dune::Partitions::interior)) + { + const typename Basis::LocalFiniteElement& lfe = basis_.getLocalFiniteElement(element); for (size_t i=0; i<lfe.localBasis().size(); i++) { for (size_t j=0; j<lfe.localBasis().size(); j++) { - int iIdx = basis_.index(*it,i); - int jIdx = basis_.index(*it,j); + int iIdx = basis_.index(element,i); + int jIdx = basis_.index(element,j); nb.add(iIdx, jIdx); @@ -116,33 +112,30 @@ assembleGradientAndHessian(const VectorType& sol, gradient.resize(sol.size()); gradient = 0; - ElementIterator it = basis_.getGridView().template begin<0,Dune::Interior_Partition>(); - ElementIterator endit = basis_.getGridView().template end<0,Dune::Interior_Partition> (); - - for( ; it != endit; ++it ) { - - const int numOfBaseFct = basis_.getLocalFiniteElement(*it).localBasis().size(); + for (const auto& element : elements(basis_.getGridView(), Dune::Partitions::interior)) + { + const int numOfBaseFct = basis_.getLocalFiniteElement(element).localBasis().size(); // Extract local solution VectorType localSolution(numOfBaseFct); VectorType localPointLoads(numOfBaseFct); for (int i=0; i<numOfBaseFct; i++) - localSolution[i] = sol[basis_.index(*it,i)]; + localSolution[i] = sol[basis_.index(element,i)]; VectorType localGradient(numOfBaseFct); // setup local matrix and gradient - localStiffness_->assembleGradientAndHessian(*it, basis_.getLocalFiniteElement(*it), localSolution, localGradient); + localStiffness_->assembleGradientAndHessian(element, basis_.getLocalFiniteElement(element), localSolution, localGradient); // Add element matrix to global stiffness matrix for(int i=0; i<numOfBaseFct; i++) { - int row = basis_.index(*it,i); + int row = basis_.index(element,i); for (int j=0; j<numOfBaseFct; j++ ) { - int col = basis_.index(*it,j); + int col = basis_.index(element,j); hessian[row][col] += localStiffness_->A_[i][j]; } @@ -150,7 +143,7 @@ assembleGradientAndHessian(const VectorType& sol, // Add local gradient to global gradient for (int i=0; i<numOfBaseFct; i++) - gradient[basis_.index(*it,i)] += localGradient[i]; + gradient[basis_.index(element,i)] += localGradient[i]; } @@ -166,21 +159,18 @@ computeEnergy(const VectorType& sol) const if (sol.size()!=basis_.size()) DUNE_THROW(Dune::Exception, "Solution vector doesn't match the basis!"); - ElementIterator it = basis_.getGridView().template begin<0,Dune::Interior_Partition>(); - ElementIterator endIt = basis_.getGridView().template end<0,Dune::Interior_Partition>(); - // Loop over all elements - for (; it!=endIt; ++it) { - + for (const auto& element : elements(basis_.getGridView(), Dune::Partitions::interior)) + { // Number of degrees of freedom on this element - size_t nDofs = basis_.getLocalFiniteElement(*it).localBasis().size(); + size_t nDofs = basis_.getLocalFiniteElement(element).localBasis().size(); VectorType localSolution(nDofs); for (size_t i=0; i<nDofs; i++) - localSolution[i] = sol[basis_.index(*it,i)]; + localSolution[i] = sol[basis_.index(element,i)]; - energy += localStiffness_->energy(*it, basis_.getLocalFiniteElement(*it), localSolution); + energy += localStiffness_->energy(element, basis_.getLocalFiniteElement(element), localSolution); }