From bc904228bbf2bf8dbb485c1beee55eb25c7dd215 Mon Sep 17 00:00:00 2001
From: Martin Kronbichler <kronbichler@lnm.mw.tum.de>
Date: Tue, 18 Aug 2009 11:46:07 +0000
Subject: [PATCH] Add one more check for inhomogeneous constraints. Correct one
 mistake in distribute_local_to_global function.

git-svn-id: https://svn.dealii.org/trunk@19298 0785d39b-7218-0410-832d-ea1e28bc413d
---
 deal.II/lac/include/lac/constraint_matrix.h   | 28 +++++++++++++++++++
 .../include/lac/constraint_matrix.templates.h |  2 +-
 2 files changed, 29 insertions(+), 1 deletion(-)

diff --git a/deal.II/lac/include/lac/constraint_matrix.h b/deal.II/lac/include/lac/constraint_matrix.h
index 0a9dfa40a5..b1e6df9e78 100644
--- a/deal.II/lac/include/lac/constraint_matrix.h
+++ b/deal.II/lac/include/lac/constraint_matrix.h
@@ -609,6 +609,14 @@ class ConstraintMatrix : public Subscriptor
 				      */
     unsigned int max_constraint_indirections () const;
 
+				     /**
+				      * Returns <tt>true</tt> in case the
+				      * dof is constrained and there is a
+				      * non-trivial inhomogeneous valeus set
+				      * to the dof.
+				      */
+    bool is_inhomogeneously_constrained (const unsigned int index) const;
+
 				     /**
 				      * Returns <tt>false</tt> if all
 				      * constraints in the ConstraintMatrix
@@ -1694,6 +1702,26 @@ ConstraintMatrix::is_constrained (const unsigned int index) const
           (constraint_line_exists[index] == true));
 }
 
+
+
+inline
+bool
+ConstraintMatrix::is_inhomogeneously_constrained (const unsigned int index) const 
+{
+  if (is_constrained(index) == false)
+    return false;
+
+  ConstraintLine index_comparison;
+  index_comparison.line = index;
+
+  const std::vector<ConstraintLine>::const_iterator
+    position = std::lower_bound (lines.begin(),
+				 lines.end(),
+				 index_comparison);
+  Assert (position != lines.end(), ExcInternalError());
+  return position->inhomogeneity != 0;
+}
+
 DEAL_II_NAMESPACE_CLOSE
 
 #endif
diff --git a/deal.II/lac/include/lac/constraint_matrix.templates.h b/deal.II/lac/include/lac/constraint_matrix.templates.h
index b0ac3ed4f8..2a94f08a07 100644
--- a/deal.II/lac/include/lac/constraint_matrix.templates.h
+++ b/deal.II/lac/include/lac/constraint_matrix.templates.h
@@ -797,7 +797,7 @@ distribute_local_to_global (const Vector<double>            &local_vector,
 		    {
 		      Assert (is_constrained(position_j->entries[q].first) == false,
 			      ExcMessage ("Tried to distribute to a fixed dof."));
-		      global_vector(position_j->entries[j].first)
+		      global_vector(position_j->entries[q].first)
 			-= val * position_j->entries[q].second * matrix_entry;
 		    }
 		}
-- 
2.39.5