From 1c47fab38dd6083682cc1146d153311def935f65 Mon Sep 17 00:00:00 2001 From: Wolfgang Bangerth Date: Mon, 25 May 1998 14:41:45 +0000 Subject: [PATCH] Changes for the exact evaluation of the mass matrix and add function to set up a right hand side vector. git-svn-id: https://svn.dealii.org/trunk@355 0785d39b-7218-0410-832d-ea1e28bc413d --- deal.II/deal.II/source/numerics/vectors.cc | 38 +++++++++++++++++++--- 1 file changed, 34 insertions(+), 4 deletions(-) diff --git a/deal.II/deal.II/source/numerics/vectors.cc b/deal.II/deal.II/source/numerics/vectors.cc index 88adaf115c..2699f2451a 100644 --- a/deal.II/deal.II/source/numerics/vectors.cc +++ b/deal.II/deal.II/source/numerics/vectors.cc @@ -9,6 +9,7 @@ #include #include #include +#include #include #include #include @@ -75,8 +76,8 @@ template <> void VectorTools<1>::project (const DoFHandler<1> &, const ConstraintMatrix &, const FiniteElement<1> &, - const Quadrature<1> &, const Boundary<1> &, + const Quadrature<1> &, const Function<1> &, dVector &, const bool , @@ -98,8 +99,8 @@ template void VectorTools::project (const DoFHandler &dof, const ConstraintMatrix &constraints, const FiniteElement &fe, - const Quadrature &q, const Boundary &boundary, + const Quadrature &q, const Function &function, dVector &vec, const bool enforce_zero_boundary, @@ -153,8 +154,8 @@ void VectorTools::project (const DoFHandler &dof, dSMatrix mass_matrix (sparsity); dVector tmp (mass_matrix.n()); - MatrixCreator::create_mass_matrix (dof, fe, q, boundary, - mass_matrix, function, tmp); + MatrixCreator::create_mass_matrix (dof, fe, boundary, mass_matrix); + VectorTools::create_right_hand_side (dof, fe, q, boundary, function, tmp); constraints.condense (mass_matrix); MatrixTools::apply_boundary_values (boundary_values, @@ -174,6 +175,35 @@ void VectorTools::project (const DoFHandler &dof, +template +void VectorTools::create_right_hand_side (const DoFHandler &dof, + const FiniteElement &fe, + const Quadrature &q, + const Boundary &boundary, + const Function &rhs, + dVector &rhs_vector) { + UpdateFlags update_flags = UpdateFlags(update_q_points | + update_JxW_values); + dSMatrix dummy; + const AssemblerData data (dof, + false, true, + dummy, rhs_vector, + q, fe, update_flags, boundary); + TriaActiveIterator > + assembler (const_cast*>(&dof.get_tria()), + dof.get_tria().begin_active()->level(), + dof.get_tria().begin_active()->index(), + &data); + MassMatrix equation(&rhs,0); + do + { + assembler->assemble (equation); + } + while ((++assembler).state() == valid); +}; + + + template <> void VectorTools<1>::interpolate_boundary_values (const DoFHandler<1> &, -- 2.39.5