From e066b2c7acde80ea4063c317bc4e1509fc164a16 Mon Sep 17 00:00:00 2001 From: Denis Davydov Date: Thu, 3 Nov 2016 14:01:40 +0100 Subject: [PATCH] add n_q_points_1d template argument to MatrixFreeOperators::MassOperator the rationale is support different usage cases. Say, when projecting a function one would use fe_degree+2. However when projecting the MatrixFree quadrature data given by Table<>, most often this data corresponds to fe_degree+1. So while being given a MatrixFree data object, we use it even though the mass matrix could be slightly under-integrated. --- include/deal.II/matrix_free/operators.h | 20 +++++++++---------- .../deal.II/numerics/vector_tools.templates.h | 6 +++--- tests/matrix_free/mass_operator_01.cc | 2 +- tests/matrix_free/mass_operator_02.cc | 2 +- 4 files changed, 15 insertions(+), 15 deletions(-) diff --git a/include/deal.II/matrix_free/operators.h b/include/deal.II/matrix_free/operators.h index 3b17805338..4000fb3467 100644 --- a/include/deal.II/matrix_free/operators.h +++ b/include/deal.II/matrix_free/operators.h @@ -301,7 +301,7 @@ namespace MatrixFreeOperators * * @author Daniel Arndt, 2016 */ - template + template class MassOperator : public Base { public: @@ -901,8 +901,8 @@ namespace MatrixFreeOperators //-----------------------------MassOperator---------------------------------- - template - MassOperator:: + template + MassOperator:: MassOperator () : Base() @@ -910,9 +910,9 @@ namespace MatrixFreeOperators - template + template void - MassOperator:: + MassOperator:: compute_diagonal() { Assert((Base::data != NULL), ExcNotInitialized()); @@ -938,9 +938,9 @@ namespace MatrixFreeOperators - template + template void - MassOperator:: + MassOperator:: apply_add (LinearAlgebra::distributed::Vector &dst, const LinearAlgebra::distributed::Vector &src) const { @@ -950,15 +950,15 @@ namespace MatrixFreeOperators - template + template void - MassOperator:: + MassOperator:: local_apply_cell (const MatrixFree &data, LinearAlgebra::distributed::Vector &dst, const LinearAlgebra::distributed::Vector &src, const std::pair &cell_range) const { - FEEvaluation phi(data); + FEEvaluation phi(data); for (unsigned int cell=cell_range.first; cell matrix_free; matrix_free.reinit (mapping, dof, constraints, - QGauss<1>(fe_degree+1), additional_data); - typedef MatrixFreeOperators::MassOperator MatrixType; + QGauss<1>(fe_degree+2), additional_data); + typedef MatrixFreeOperators::MassOperator MatrixType; MatrixType mass_matrix; mass_matrix.initialize(matrix_free); mass_matrix.compute_diagonal(); @@ -1004,7 +1004,7 @@ namespace VectorTools Assert (dof.get_fe().degree == fe_degree, ExcDimensionMismatch(fe_degree, dof.get_fe().degree)); - typedef MatrixFreeOperators::MassOperator MatrixType; + typedef MatrixFreeOperators::MassOperator MatrixType; MatrixType mass_matrix; mass_matrix.initialize(matrix_free); mass_matrix.compute_diagonal(); diff --git a/tests/matrix_free/mass_operator_01.cc b/tests/matrix_free/mass_operator_01.cc index 575b0bc596..2e95bd51a9 100644 --- a/tests/matrix_free/mass_operator_01.cc +++ b/tests/matrix_free/mass_operator_01.cc @@ -116,7 +116,7 @@ void test () mf_data.reinit (dof, constraints, quad, data); } - MatrixFreeOperators::MassOperator mf; + MatrixFreeOperators::MassOperator mf; mf.initialize(mf_data); mf.compute_diagonal(); LinearAlgebra::distributed::Vector in, out, ref; diff --git a/tests/matrix_free/mass_operator_02.cc b/tests/matrix_free/mass_operator_02.cc index 4bcc628f4e..b7db2771e1 100644 --- a/tests/matrix_free/mass_operator_02.cc +++ b/tests/matrix_free/mass_operator_02.cc @@ -80,7 +80,7 @@ void test () mf_data.reinit (dof, constraints, quad, data); } - MatrixFreeOperators::MassOperator mf; + MatrixFreeOperators::MassOperator mf; mf.initialize(mf_data); mf.compute_diagonal(); const LinearAlgebra::distributed::Vector &diagonal -- 2.39.5