From 13cfe10b61d3e6c2501c2627a6cfcc2d955690ca Mon Sep 17 00:00:00 2001 From: Guido Kanschat Date: Fri, 12 Sep 2014 17:33:42 +0200 Subject: [PATCH] add documentation on the effect of ConstraintMatrix::distribute_local_to_global() on eigenvalues --- include/deal.II/lac/constraint_matrix.h | 36 +++++++++++++++++++++++-- 1 file changed, 34 insertions(+), 2 deletions(-) diff --git a/include/deal.II/lac/constraint_matrix.h b/include/deal.II/lac/constraint_matrix.h index 09edea34f7..0424bfdcb8 100644 --- a/include/deal.II/lac/constraint_matrix.h +++ b/include/deal.II/lac/constraint_matrix.h @@ -886,7 +886,13 @@ public: * non-zero, positive, and of the same order of magnitude as the other * entries of the matrix. * - * Thus, by using this function to distribute local contributions to the + * @note While not changing the condition number, the procedure + * described above adds an unforeseeable number of artificial + * eigenvalues to the spectrum of the matrix. Therefore, it is + * recommended to use the equivalent function with two local index + * vectors in such a case. + * + * By using this function to distribute local contributions to the * global object, one saves the call to the condense function after the * vectors and matrices are fully assembled. * @@ -905,7 +911,33 @@ public: MatrixType &global_matrix) const; /** - * Does the same as the function above but can treat non quadratic matrices. + * Does almost the same as the function above but can treat non + * quadratic matrices. The main difference to achieve this is that + * the diagonal entries in constrained rows are left untouched + * instead of being filled with arbitrary values. + * + * Since the diagonal entries corresponding to eliminated degrees of + * freedom are not set, the result may have a zero eigenvalue, if + * applied to a quadratic matrix. This has to be considered when + * solving the resulting problems. For solving a source problem, it + * is possible to set the diagonal entry after building the matrix + * by a piece of code of the form + * + * @code + * for (unsigned int i=0;i void -- 2.39.5