From 227c209745edea316b20e28892040b4f193ab73b Mon Sep 17 00:00:00 2001 From: wolf Date: Mon, 22 Feb 1999 12:14:52 +0000 Subject: [PATCH] Remove redundant parameters to many functions in the Matrix- and VectorTools library. They all were FiniteElement references, but these can now better be gotten by asking the DoFHandler class; at the time I wrote these functions, the DoFHandler didn't have the finite element at hand, so it was not possible to ask it for that. git-svn-id: https://svn.dealii.org/trunk@869 0785d39b-7218-0410-832d-ea1e28bc413d --- .../Attic/examples/convergence/convergence.cc | 22 ++++----- .../error-estimation/error-estimation.cc | 6 +-- .../Attic/examples/multigrid/multigrid.cc | 25 +++++----- deal.II/deal.II/include/numerics/matrices.h | 26 +++++------ deal.II/deal.II/include/numerics/vectors.h | 46 +++++++++---------- deal.II/deal.II/source/numerics/base.cc | 2 +- deal.II/deal.II/source/numerics/matrices.cc | 19 +++++--- deal.II/deal.II/source/numerics/vectors.cc | 46 ++++++++++--------- tests/big-tests/convergence/convergence.cc | 22 ++++----- .../error-estimation/error-estimation.cc | 6 +-- tests/big-tests/multigrid/multigrid.cc | 25 +++++----- 11 files changed, 122 insertions(+), 123 deletions(-) diff --git a/deal.II/deal.II/Attic/examples/convergence/convergence.cc b/deal.II/deal.II/Attic/examples/convergence/convergence.cc index 80aa35ae60..b3a3373277 100644 --- a/deal.II/deal.II/Attic/examples/convergence/convergence.cc +++ b/deal.II/deal.II/Attic/examples/convergence/convergence.cc @@ -39,13 +39,13 @@ class PoissonEquation : public Equation { virtual void assemble (dFMatrix &cell_matrix, dVector &rhs, const FEValues &fe_values, - const Triangulation::cell_iterator &cell) const; + const DoFHandler::cell_iterator &cell) const; virtual void assemble (dFMatrix &cell_matrix, const FEValues &fe_values, - const Triangulation::cell_iterator &cell) const; + const DoFHandler::cell_iterator &cell) const; virtual void assemble (dVector &rhs, const FEValues &fe_values, - const Triangulation::cell_iterator &cell) const; + const DoFHandler::cell_iterator &cell) const; protected: const Function &right_hand_side; }; @@ -152,7 +152,7 @@ template <> void PoissonEquation<2>::assemble (dFMatrix &cell_matrix, dVector &rhs, const FEValues<2> &fe_values, - const Triangulation<2>::cell_iterator &) const { + const DoFHandler<2>::cell_iterator &) const { for (unsigned int point=0; point::assemble (dFMatrix &cell_matrix, template void PoissonEquation::assemble (dFMatrix &, const FEValues &, - const Triangulation::cell_iterator &) const { + const DoFHandler::cell_iterator &) const { Assert (false, ExcPureVirtualFunctionCalled()); }; @@ -180,7 +180,7 @@ void PoissonEquation::assemble (dFMatrix &, template void PoissonEquation::assemble (dVector &, const FEValues &, - const Triangulation::cell_iterator &) const { + const DoFHandler::cell_iterator &) const { Assert (false, ExcPureVirtualFunctionCalled()); }; @@ -337,7 +337,7 @@ int PoissonProblem::run (const unsigned int level) { VectorTools::integrate_difference (*dof_handler, solution, sol, l1_error_per_cell, - *quadrature, *fe, L1_norm); + *quadrature, L1_norm); cout << l1_error_per_cell.l1_norm() << endl; l1_error.push_back (l1_error_per_cell.l1_norm()); @@ -345,7 +345,7 @@ int PoissonProblem::run (const unsigned int level) { VectorTools::integrate_difference (*dof_handler, solution, sol, l2_error_per_cell, - *quadrature, *fe, L2_norm); + *quadrature, L2_norm); cout << l2_error_per_cell.l2_norm() << endl; l2_error.push_back (l2_error_per_cell.l2_norm()); @@ -353,7 +353,7 @@ int PoissonProblem::run (const unsigned int level) { VectorTools::integrate_difference (*dof_handler, solution, sol, linfty_error_per_cell, - *quadrature, *fe, Linfty_norm); + *quadrature, Linfty_norm); cout << linfty_error_per_cell.linfty_norm() << endl; linfty_error.push_back (linfty_error_per_cell.linfty_norm()); @@ -361,7 +361,7 @@ int PoissonProblem::run (const unsigned int level) { VectorTools::integrate_difference (*dof_handler, solution, sol, h1_seminorm_error_per_cell, - *quadrature, *fe, H1_seminorm); + *quadrature, H1_seminorm); cout << h1_seminorm_error_per_cell.l2_norm() << endl; h1_seminorm_error.push_back (h1_seminorm_error_per_cell.l2_norm()); @@ -369,7 +369,7 @@ int PoissonProblem::run (const unsigned int level) { VectorTools::integrate_difference (*dof_handler, solution, sol, h1_error_per_cell, - *quadrature, *fe, H1_norm); + *quadrature, H1_norm); cout << h1_error_per_cell.l2_norm() << endl; h1_error.push_back (h1_error_per_cell.l2_norm()); diff --git a/deal.II/deal.II/Attic/examples/error-estimation/error-estimation.cc b/deal.II/deal.II/Attic/examples/error-estimation/error-estimation.cc index ea856cbbe1..54e1c13f2d 100644 --- a/deal.II/deal.II/Attic/examples/error-estimation/error-estimation.cc +++ b/deal.II/deal.II/Attic/examples/error-estimation/error-estimation.cc @@ -472,7 +472,7 @@ void PoissonProblem::run (ParameterHandler &prm) { cout << " Calculating L2 error... "; VectorTools::integrate_difference (*dof_handler, solution, *solution_function, - l2_error_per_cell, q, fe, + l2_error_per_cell, q, L2_norm); cout << l2_error_per_cell.l2_norm() << endl; l2_error.push_back (l2_error_per_cell.l2_norm()); @@ -480,7 +480,7 @@ void PoissonProblem::run (ParameterHandler &prm) { cout << " Calculating L-infinity error... "; VectorTools::integrate_difference (*dof_handler, solution, *solution_function, - linfty_error_per_cell, q, fe, + linfty_error_per_cell, q, Linfty_norm); cout << linfty_error_per_cell.linfty_norm() << endl; linfty_error.push_back (linfty_error_per_cell.linfty_norm()); @@ -488,7 +488,7 @@ void PoissonProblem::run (ParameterHandler &prm) { cout << " Calculating H1 error... "; VectorTools::integrate_difference (*dof_handler, solution, *solution_function, - h1_error_per_cell, q, fe, + h1_error_per_cell, q, H1_norm); cout << h1_error_per_cell.l2_norm() << endl; h1_error.push_back (h1_error_per_cell.l2_norm()); diff --git a/deal.II/deal.II/Attic/examples/multigrid/multigrid.cc b/deal.II/deal.II/Attic/examples/multigrid/multigrid.cc index 9061524b50..b3d4c57e96 100644 --- a/deal.II/deal.II/Attic/examples/multigrid/multigrid.cc +++ b/deal.II/deal.II/Attic/examples/multigrid/multigrid.cc @@ -44,13 +44,13 @@ class PoissonEquation : public Equation { virtual void assemble (dFMatrix &cell_matrix, dVector &rhs, const FEValues &fe_values, - const Triangulation::cell_iterator &cell) const; + const DoFHandler::cell_iterator &cell) const; virtual void assemble (dFMatrix &cell_matrix, const FEValues &fe_values, - const Triangulation::cell_iterator &cell) const; + const DoFHandler::cell_iterator &cell) const; virtual void assemble (dVector &rhs, const FEValues &fe_values, - const Triangulation::cell_iterator &cell) const; + const DoFHandler::cell_iterator &cell) const; protected: const Function &right_hand_side; }; @@ -231,7 +231,7 @@ template <> void PoissonEquation<2>::assemble (dFMatrix &cell_matrix, dVector &rhs, const FEValues<2> &fe_values, - const Triangulation<2>::cell_iterator &) const { + const DoFHandler<2>::cell_iterator &) const { for (unsigned int point=0; point::assemble (dFMatrix &cell_matrix, template void PoissonEquation::assemble (dFMatrix &, const FEValues &, - const Triangulation::cell_iterator &) const { + const DoFHandler::cell_iterator &) const { Assert (false, ExcPureVirtualFunctionCalled()); }; @@ -259,7 +259,7 @@ void PoissonEquation::assemble (dFMatrix &, template void PoissonEquation::assemble (dVector &, const FEValues &, - const Triangulation::cell_iterator &) const { + const DoFHandler::cell_iterator &) const { Assert (false, ExcPureVirtualFunctionCalled()); }; @@ -379,8 +379,7 @@ void PoissonProblem::assemble (const Equation &equation, // apply Dirichlet bc as described // in the docs map boundary_value_list; - VectorTools::interpolate_boundary_values (*dof, - dirichlet_bc, fe, boundary, + VectorTools::interpolate_boundary_values (*dof, dirichlet_bc, boundary, boundary_value_list); MatrixTools::apply_boundary_values (boundary_value_list, system_matrix, solution, @@ -494,7 +493,7 @@ int PoissonProblem::run (const unsigned int level) { VectorTools::integrate_difference (*dof, solution, sol, l1_error_per_cell, - *quadrature, *fe, L1_norm); + *quadrature, L1_norm); cout << l1_error_per_cell.l1_norm() << endl; l1_error.push_back (l1_error_per_cell.l1_norm()); @@ -502,7 +501,7 @@ int PoissonProblem::run (const unsigned int level) { VectorTools::integrate_difference (*dof, solution, sol, l2_error_per_cell, - *quadrature, *fe, L2_norm); + *quadrature, L2_norm); cout << l2_error_per_cell.l2_norm() << endl; l2_error.push_back (l2_error_per_cell.l2_norm()); @@ -510,7 +509,7 @@ int PoissonProblem::run (const unsigned int level) { VectorTools::integrate_difference (*dof, solution, sol, linfty_error_per_cell, - *quadrature, *fe, Linfty_norm); + *quadrature, Linfty_norm); cout << linfty_error_per_cell.linfty_norm() << endl; linfty_error.push_back (linfty_error_per_cell.linfty_norm()); @@ -518,7 +517,7 @@ int PoissonProblem::run (const unsigned int level) { VectorTools::integrate_difference (*dof, solution, sol, h1_seminorm_error_per_cell, - *quadrature, *fe, H1_seminorm); + *quadrature, H1_seminorm); cout << h1_seminorm_error_per_cell.l2_norm() << endl; h1_seminorm_error.push_back (h1_seminorm_error_per_cell.l2_norm()); @@ -526,7 +525,7 @@ int PoissonProblem::run (const unsigned int level) { VectorTools::integrate_difference (*dof, solution, sol, h1_error_per_cell, - *quadrature, *fe, H1_norm); + *quadrature, H1_norm); cout << h1_error_per_cell.l2_norm() << endl; h1_error.push_back (h1_error_per_cell.l2_norm()); diff --git a/deal.II/deal.II/include/numerics/matrices.h b/deal.II/deal.II/include/numerics/matrices.h index 89f4df8269..d5e9b088fc 100644 --- a/deal.II/deal.II/include/numerics/matrices.h +++ b/deal.II/deal.II/include/numerics/matrices.h @@ -154,6 +154,10 @@ class dSMatrix; * useful if you want to create many right hand side vectors. * * + * All functions in this collection use the finite elemen given to the + * #DoFHandler# object the last time that the degrees of freedom were + * distributed on the triangulation. + * * @author Wolfgang Bangerth, 1998 */ template @@ -190,7 +194,6 @@ class MatrixCreator { * for more information. */ static void create_mass_matrix (const DoFHandler &dof, - const FiniteElement &fe, const Quadrature &q, const Boundary &boundary, dSMatrix &matrix, @@ -214,7 +217,6 @@ class MatrixCreator { * for more information. */ static void create_mass_matrix (const DoFHandler &dof, - const FiniteElement &fe, const Quadrature &q, const Boundary &boundary, dSMatrix &matrix, @@ -242,7 +244,6 @@ class MatrixCreator { * for more information. */ static void create_mass_matrix (const DoFHandler &dof, - const FiniteElement &fe, const Boundary &boundary, dSMatrix &matrix); @@ -262,7 +263,6 @@ class MatrixCreator { * for more information. */ static void create_boundary_mass_matrix (const DoFHandler &dof, - const FiniteElement &fe, const Quadrature &q, const Boundary &boundary, dSMatrix &matrix, @@ -280,7 +280,6 @@ class MatrixCreator { * for more information. */ static void create_laplace_matrix (const DoFHandler &dof, - const FiniteElement &fe, const Quadrature &q, const Boundary &boundary, dSMatrix &matrix, @@ -296,7 +295,6 @@ class MatrixCreator { * for more information. */ static void create_laplace_matrix (const DoFHandler &dof, - const FiniteElement &fe, const Quadrature &q, const Boundary &boundary, dSMatrix &matrix, @@ -304,14 +302,14 @@ class MatrixCreator { dVector &rhs_vector, const Function *a = 0); - /** - * Build Lagrange interpolation - matrix of different finite - elements. - */ - static void create_interpolation_matrix(const FiniteElement &high, - const FiniteElement &low, - dFMatrix& result); + /** + * Build Lagrange interpolation + * matrix of different finite + * elements. + */ + static void create_interpolation_matrix(const FiniteElement &high, + const FiniteElement &low, + dFMatrix& result); /** diff --git a/deal.II/deal.II/include/numerics/vectors.h b/deal.II/deal.II/include/numerics/vectors.h index 1db1ff93db..8a32f053c3 100644 --- a/deal.II/deal.II/include/numerics/vectors.h +++ b/deal.II/deal.II/include/numerics/vectors.h @@ -245,6 +245,8 @@ enum NormType { * $L_2$ norm: compute the $l_2$ norm of the cell error vector. * \end{itemize} * + * All functions use the finite element given to the #DoFHandler# object the last + * time that the degrees of freedom were distributed over the triangulation. * * @author Wolfgang Bangerth, 1998 */ @@ -274,28 +276,27 @@ class VectorTools { * class for further information. */ static void interpolate (const DoFHandler &dof, - const FiniteElement &fe, const Boundary &boundary, const Function &function, dVector &vec); - /** - * Interpolate different finite element - * spaces. The interpolation is - * executed from the higher order - * space represented by #high# to - the lower order space - #low#. The interpolation on each - cell is represented by the matrix - #transfer#. Curved boundaries are - neglected so far. - */ - static void interpolate(const DoFHandler &high_dof, - const DoFHandler &low_dof, - const dFMatrix& transfer, - const dVector& high, - dVector& low); - + /** + * Interpolate different finite + * element spaces. The + * interpolation is executed from + * the higher order space + * represented by #high# to the + * lower order space #low#. The + * interpolation on each cell is + * represented by the matrix + * #transfer#. Curved boundaries + * are neglected so far. + */ + static void interpolate(const DoFHandler &high_dof, + const DoFHandler &low_dof, + const dFMatrix &transfer, + const dVector &high, + dVector &low); /** * Compute the projection of @@ -315,7 +316,6 @@ class VectorTools { */ static void project (const DoFHandler &dof, const ConstraintMatrix &constraints, - const FiniteElement &fe, const Boundary &boundary, const Quadrature &q, const Function &function, @@ -331,7 +331,6 @@ class VectorTools { * class for further information. */ static void create_right_hand_side (const DoFHandler &dof, - const FiniteElement &fe, const Quadrature &q, const Boundary &boundary, const Function &rhs, @@ -354,9 +353,8 @@ class VectorTools { */ static void interpolate_boundary_values (const DoFHandler &dof, const FunctionMap &dirichlet_bc, - const FiniteElement &fe, - const Boundary &boundary, - map &boundary_values); + const Boundary &boundary, + map &boundary_values); /** * Project #function# to the boundary @@ -373,7 +371,6 @@ class VectorTools { */ static void project_boundary_values (const DoFHandler &dof, const FunctionMap &boundary_functions, - const FiniteElement &fe, const Quadrature &q, const Boundary &boundary, map &boundary_values); @@ -393,7 +390,6 @@ class VectorTools { const Function &exact_solution, dVector &difference, const Quadrature &q, - const FiniteElement &fe, const NormType &norm, const Boundary &boundary=StraightBoundary()); diff --git a/deal.II/deal.II/source/numerics/base.cc b/deal.II/deal.II/source/numerics/base.cc index 6b6adfceda..edbbb09f57 100644 --- a/deal.II/deal.II/source/numerics/base.cc +++ b/deal.II/deal.II/source/numerics/base.cc @@ -126,7 +126,7 @@ void ProblemBase::assemble (const Equation &equation, // in the docs map boundary_value_list; VectorTools::interpolate_boundary_values (*dof_handler, - dirichlet_bc, fe, boundary, + dirichlet_bc, boundary, boundary_value_list); MatrixTools::apply_boundary_values (boundary_value_list, system_matrix, solution, diff --git a/deal.II/deal.II/source/numerics/matrices.cc b/deal.II/deal.II/source/numerics/matrices.cc index 61ff2185f7..45cddee698 100644 --- a/deal.II/deal.II/source/numerics/matrices.cc +++ b/deal.II/deal.II/source/numerics/matrices.cc @@ -21,11 +21,12 @@ template void MatrixCreator::create_mass_matrix (const DoFHandler &dof, - const FiniteElement &fe, const Quadrature &q, const Boundary &boundary, dSMatrix &matrix, const Function * const a) { + const FiniteElement &fe = dof.get_fe(); + dVector dummy; // no entries, should give an error if accessed UpdateFlags update_flags = update_JxW_values; if (a != 0) @@ -52,13 +53,14 @@ void MatrixCreator::create_mass_matrix (const DoFHandler &dof, template void MatrixCreator::create_mass_matrix (const DoFHandler &dof, - const FiniteElement &fe, const Quadrature &q, const Boundary &boundary, dSMatrix &matrix, const Function &rhs, dVector &rhs_vector, const Function * const a) { + const FiniteElement &fe = dof.get_fe(); + UpdateFlags update_flags = UpdateFlags(update_q_points | update_JxW_values); const AssemblerData data (dof, @@ -82,9 +84,10 @@ void MatrixCreator::create_mass_matrix (const DoFHandler &dof, template void MatrixCreator::create_mass_matrix (const DoFHandler &dof, - const FiniteElement &fe, const Boundary &boundary, dSMatrix &matrix) { + const FiniteElement &fe = dof.get_fe(); + const unsigned int total_dofs = fe.total_dofs; dFMatrix local_mass_matrix (total_dofs, total_dofs); @@ -110,7 +113,6 @@ void MatrixCreator::create_mass_matrix (const DoFHandler &dof, template <> void MatrixCreator<1>::create_boundary_mass_matrix (const DoFHandler<1> &, - const FiniteElement<1> &, const Quadrature<0> &, const Boundary<1> &, dSMatrix &, @@ -127,7 +129,6 @@ void MatrixCreator<1>::create_boundary_mass_matrix (const DoFHandler<1> &, template void MatrixCreator::create_boundary_mass_matrix (const DoFHandler &dof, - const FiniteElement &fe, const Quadrature &q, const Boundary &boundary, dSMatrix &matrix, @@ -135,6 +136,8 @@ void MatrixCreator::create_boundary_mass_matrix (const DoFHandler & dVector &rhs_vector, vector &dof_to_boundary_mapping, const Function *a) { + const FiniteElement &fe = dof.get_fe(); + Assert (matrix.n() == dof.n_boundary_dofs(rhs), ExcInternalError()); Assert (matrix.n() == matrix.m(), ExcInternalError()); Assert (matrix.n() == rhs_vector.size(), ExcInternalError()); @@ -321,11 +324,12 @@ void MatrixCreator::create_boundary_mass_matrix (const DoFHandler & template void MatrixCreator::create_laplace_matrix (const DoFHandler &dof, - const FiniteElement &fe, const Quadrature &q, const Boundary &boundary, dSMatrix &matrix, const Function * const a) { + const FiniteElement &fe = dof.get_fe(); + dVector dummy; // no entries, should give an error if accessed UpdateFlags update_flags = UpdateFlags(update_gradients | update_JxW_values); @@ -352,13 +356,14 @@ void MatrixCreator::create_laplace_matrix (const DoFHandler &dof, template void MatrixCreator::create_laplace_matrix (const DoFHandler &dof, - const FiniteElement &fe, const Quadrature &q, const Boundary &boundary, dSMatrix &matrix, const Function &rhs, dVector &rhs_vector, const Function * const a) { + const FiniteElement &fe = dof.get_fe(); + UpdateFlags update_flags = UpdateFlags(update_q_points | update_gradients | update_JxW_values); diff --git a/deal.II/deal.II/source/numerics/vectors.cc b/deal.II/deal.II/source/numerics/vectors.cc index d21341c5ec..9d8213c380 100644 --- a/deal.II/deal.II/source/numerics/vectors.cc +++ b/deal.II/deal.II/source/numerics/vectors.cc @@ -43,10 +43,12 @@ inline double sqr_point (const Tensor<1,dim> &p) { template void VectorTools::interpolate (const DoFHandler &dof, - const FiniteElement &fe, - const Boundary &boundary, - const Function &function, - dVector &vec) { + const Boundary &boundary, + const Function &function, + dVector &vec) +{ + const FiniteElement &fe = dof.get_fe(); + DoFHandler::active_cell_iterator cell = dof.begin_active(), endc = dof.end(); vector dofs_on_cell (fe.total_dofs); @@ -72,10 +74,10 @@ void VectorTools::interpolate (const DoFHandler &dof, template void VectorTools::interpolate(const DoFHandler &high_dof, - const DoFHandler &low_dof, - const dFMatrix &transfer, - const dVector &high, - dVector &low) + const DoFHandler &low_dof, + const dFMatrix &transfer, + const dVector &high, + dVector &low) { dVector cell_high(high_dof.get_fe().total_dofs); dVector cell_low(low_dof.get_fe().total_dofs); @@ -97,7 +99,6 @@ VectorTools::interpolate(const DoFHandler &high_dof, template <> void VectorTools<1>::project (const DoFHandler<1> &, const ConstraintMatrix &, - const FiniteElement<1> &, const Boundary<1> &, const Quadrature<1> &, const Function<1> &, @@ -122,7 +123,6 @@ void VectorTools<1>::project (const DoFHandler<1> &, template void VectorTools::project (const DoFHandler &dof, const ConstraintMatrix &constraints, - const FiniteElement &fe, const Boundary &boundary, const Quadrature &q, const Function &function, @@ -130,7 +130,9 @@ void VectorTools::project (const DoFHandler &dof, const bool enforce_zero_boundary, const Quadrature &q_boundary, const bool project_to_boundary_first) { - // make up boundary values + const FiniteElement &fe = dof.get_fe(); + + // make up boundary values map boundary_values; if (enforce_zero_boundary == true) @@ -163,7 +165,7 @@ void VectorTools::project (const DoFHandler &dof, FunctionMap boundary_functions; for (unsigned char c=0; c<255; ++c) boundary_functions[c] = &function; - project_boundary_values (dof, boundary_functions, fe, q_boundary, + project_boundary_values (dof, boundary_functions, q_boundary, boundary, boundary_values); }; @@ -179,8 +181,8 @@ void VectorTools::project (const DoFHandler &dof, dSMatrix mass_matrix (sparsity); dVector tmp (mass_matrix.n()); - MatrixCreator::create_mass_matrix (dof, fe, boundary, mass_matrix); - VectorTools::create_right_hand_side (dof, fe, q, boundary, + MatrixCreator::create_mass_matrix (dof, boundary, mass_matrix); + VectorTools::create_right_hand_side (dof, q, boundary, function, tmp); constraints.condense (mass_matrix); @@ -203,11 +205,12 @@ 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) { + const FiniteElement &fe = dof.get_fe(); + UpdateFlags update_flags = UpdateFlags(update_q_points | update_JxW_values); dSMatrix dummy; @@ -236,7 +239,6 @@ template <> void VectorTools<1>::interpolate_boundary_values (const DoFHandler<1> &, const FunctionMap &, - const FiniteElement<1> &, const Boundary<1> &, map &) { Assert (false, ExcNotImplemented()); @@ -250,11 +252,13 @@ template void VectorTools::interpolate_boundary_values (const DoFHandler &dof, const FunctionMap &dirichlet_bc, - const FiniteElement &fe, const Boundary &boundary, map &boundary_values) { Assert (dirichlet_bc.find(255) == dirichlet_bc.end(), ExcInvalidBoundaryIndicator()); + + const FiniteElement &fe = dof.get_fe(); + // use two face iterators, since we need // a DoF-iterator for the dof indices, but // a Tria-iterator for the fe object @@ -293,7 +297,6 @@ template void VectorTools::project_boundary_values (const DoFHandler &dof, const FunctionMap &boundary_functions, - const FiniteElement &fe, const Quadrature &q, const Boundary &boundary, map &boundary_values) { @@ -331,7 +334,7 @@ VectorTools::project_boundary_values (const DoFHandler &dof, dVector rhs(sparsity.n_rows()); - MatrixTools::create_boundary_mass_matrix (dof, fe, q, boundary, + MatrixTools::create_boundary_mass_matrix (dof, q, boundary, mass_matrix, boundary_functions, rhs, dof_to_boundary_mapping); @@ -371,11 +374,10 @@ void VectorTools::integrate_difference (const DoFHandler &dof, const Function &exact_solution, dVector &difference, const Quadrature &q, - const FiniteElement &fe, const NormType &norm, const Boundary &boundary) { - Assert (fe == dof.get_fe(), ExcInvalidFE()); - + const FiniteElement &fe = dof.get_fe(); + difference.reinit (dof.get_tria().n_active_cells()); UpdateFlags update_flags = UpdateFlags (update_q_points | diff --git a/tests/big-tests/convergence/convergence.cc b/tests/big-tests/convergence/convergence.cc index 80aa35ae60..b3a3373277 100644 --- a/tests/big-tests/convergence/convergence.cc +++ b/tests/big-tests/convergence/convergence.cc @@ -39,13 +39,13 @@ class PoissonEquation : public Equation { virtual void assemble (dFMatrix &cell_matrix, dVector &rhs, const FEValues &fe_values, - const Triangulation::cell_iterator &cell) const; + const DoFHandler::cell_iterator &cell) const; virtual void assemble (dFMatrix &cell_matrix, const FEValues &fe_values, - const Triangulation::cell_iterator &cell) const; + const DoFHandler::cell_iterator &cell) const; virtual void assemble (dVector &rhs, const FEValues &fe_values, - const Triangulation::cell_iterator &cell) const; + const DoFHandler::cell_iterator &cell) const; protected: const Function &right_hand_side; }; @@ -152,7 +152,7 @@ template <> void PoissonEquation<2>::assemble (dFMatrix &cell_matrix, dVector &rhs, const FEValues<2> &fe_values, - const Triangulation<2>::cell_iterator &) const { + const DoFHandler<2>::cell_iterator &) const { for (unsigned int point=0; point::assemble (dFMatrix &cell_matrix, template void PoissonEquation::assemble (dFMatrix &, const FEValues &, - const Triangulation::cell_iterator &) const { + const DoFHandler::cell_iterator &) const { Assert (false, ExcPureVirtualFunctionCalled()); }; @@ -180,7 +180,7 @@ void PoissonEquation::assemble (dFMatrix &, template void PoissonEquation::assemble (dVector &, const FEValues &, - const Triangulation::cell_iterator &) const { + const DoFHandler::cell_iterator &) const { Assert (false, ExcPureVirtualFunctionCalled()); }; @@ -337,7 +337,7 @@ int PoissonProblem::run (const unsigned int level) { VectorTools::integrate_difference (*dof_handler, solution, sol, l1_error_per_cell, - *quadrature, *fe, L1_norm); + *quadrature, L1_norm); cout << l1_error_per_cell.l1_norm() << endl; l1_error.push_back (l1_error_per_cell.l1_norm()); @@ -345,7 +345,7 @@ int PoissonProblem::run (const unsigned int level) { VectorTools::integrate_difference (*dof_handler, solution, sol, l2_error_per_cell, - *quadrature, *fe, L2_norm); + *quadrature, L2_norm); cout << l2_error_per_cell.l2_norm() << endl; l2_error.push_back (l2_error_per_cell.l2_norm()); @@ -353,7 +353,7 @@ int PoissonProblem::run (const unsigned int level) { VectorTools::integrate_difference (*dof_handler, solution, sol, linfty_error_per_cell, - *quadrature, *fe, Linfty_norm); + *quadrature, Linfty_norm); cout << linfty_error_per_cell.linfty_norm() << endl; linfty_error.push_back (linfty_error_per_cell.linfty_norm()); @@ -361,7 +361,7 @@ int PoissonProblem::run (const unsigned int level) { VectorTools::integrate_difference (*dof_handler, solution, sol, h1_seminorm_error_per_cell, - *quadrature, *fe, H1_seminorm); + *quadrature, H1_seminorm); cout << h1_seminorm_error_per_cell.l2_norm() << endl; h1_seminorm_error.push_back (h1_seminorm_error_per_cell.l2_norm()); @@ -369,7 +369,7 @@ int PoissonProblem::run (const unsigned int level) { VectorTools::integrate_difference (*dof_handler, solution, sol, h1_error_per_cell, - *quadrature, *fe, H1_norm); + *quadrature, H1_norm); cout << h1_error_per_cell.l2_norm() << endl; h1_error.push_back (h1_error_per_cell.l2_norm()); diff --git a/tests/big-tests/error-estimation/error-estimation.cc b/tests/big-tests/error-estimation/error-estimation.cc index ea856cbbe1..54e1c13f2d 100644 --- a/tests/big-tests/error-estimation/error-estimation.cc +++ b/tests/big-tests/error-estimation/error-estimation.cc @@ -472,7 +472,7 @@ void PoissonProblem::run (ParameterHandler &prm) { cout << " Calculating L2 error... "; VectorTools::integrate_difference (*dof_handler, solution, *solution_function, - l2_error_per_cell, q, fe, + l2_error_per_cell, q, L2_norm); cout << l2_error_per_cell.l2_norm() << endl; l2_error.push_back (l2_error_per_cell.l2_norm()); @@ -480,7 +480,7 @@ void PoissonProblem::run (ParameterHandler &prm) { cout << " Calculating L-infinity error... "; VectorTools::integrate_difference (*dof_handler, solution, *solution_function, - linfty_error_per_cell, q, fe, + linfty_error_per_cell, q, Linfty_norm); cout << linfty_error_per_cell.linfty_norm() << endl; linfty_error.push_back (linfty_error_per_cell.linfty_norm()); @@ -488,7 +488,7 @@ void PoissonProblem::run (ParameterHandler &prm) { cout << " Calculating H1 error... "; VectorTools::integrate_difference (*dof_handler, solution, *solution_function, - h1_error_per_cell, q, fe, + h1_error_per_cell, q, H1_norm); cout << h1_error_per_cell.l2_norm() << endl; h1_error.push_back (h1_error_per_cell.l2_norm()); diff --git a/tests/big-tests/multigrid/multigrid.cc b/tests/big-tests/multigrid/multigrid.cc index 9061524b50..b3d4c57e96 100644 --- a/tests/big-tests/multigrid/multigrid.cc +++ b/tests/big-tests/multigrid/multigrid.cc @@ -44,13 +44,13 @@ class PoissonEquation : public Equation { virtual void assemble (dFMatrix &cell_matrix, dVector &rhs, const FEValues &fe_values, - const Triangulation::cell_iterator &cell) const; + const DoFHandler::cell_iterator &cell) const; virtual void assemble (dFMatrix &cell_matrix, const FEValues &fe_values, - const Triangulation::cell_iterator &cell) const; + const DoFHandler::cell_iterator &cell) const; virtual void assemble (dVector &rhs, const FEValues &fe_values, - const Triangulation::cell_iterator &cell) const; + const DoFHandler::cell_iterator &cell) const; protected: const Function &right_hand_side; }; @@ -231,7 +231,7 @@ template <> void PoissonEquation<2>::assemble (dFMatrix &cell_matrix, dVector &rhs, const FEValues<2> &fe_values, - const Triangulation<2>::cell_iterator &) const { + const DoFHandler<2>::cell_iterator &) const { for (unsigned int point=0; point::assemble (dFMatrix &cell_matrix, template void PoissonEquation::assemble (dFMatrix &, const FEValues &, - const Triangulation::cell_iterator &) const { + const DoFHandler::cell_iterator &) const { Assert (false, ExcPureVirtualFunctionCalled()); }; @@ -259,7 +259,7 @@ void PoissonEquation::assemble (dFMatrix &, template void PoissonEquation::assemble (dVector &, const FEValues &, - const Triangulation::cell_iterator &) const { + const DoFHandler::cell_iterator &) const { Assert (false, ExcPureVirtualFunctionCalled()); }; @@ -379,8 +379,7 @@ void PoissonProblem::assemble (const Equation &equation, // apply Dirichlet bc as described // in the docs map boundary_value_list; - VectorTools::interpolate_boundary_values (*dof, - dirichlet_bc, fe, boundary, + VectorTools::interpolate_boundary_values (*dof, dirichlet_bc, boundary, boundary_value_list); MatrixTools::apply_boundary_values (boundary_value_list, system_matrix, solution, @@ -494,7 +493,7 @@ int PoissonProblem::run (const unsigned int level) { VectorTools::integrate_difference (*dof, solution, sol, l1_error_per_cell, - *quadrature, *fe, L1_norm); + *quadrature, L1_norm); cout << l1_error_per_cell.l1_norm() << endl; l1_error.push_back (l1_error_per_cell.l1_norm()); @@ -502,7 +501,7 @@ int PoissonProblem::run (const unsigned int level) { VectorTools::integrate_difference (*dof, solution, sol, l2_error_per_cell, - *quadrature, *fe, L2_norm); + *quadrature, L2_norm); cout << l2_error_per_cell.l2_norm() << endl; l2_error.push_back (l2_error_per_cell.l2_norm()); @@ -510,7 +509,7 @@ int PoissonProblem::run (const unsigned int level) { VectorTools::integrate_difference (*dof, solution, sol, linfty_error_per_cell, - *quadrature, *fe, Linfty_norm); + *quadrature, Linfty_norm); cout << linfty_error_per_cell.linfty_norm() << endl; linfty_error.push_back (linfty_error_per_cell.linfty_norm()); @@ -518,7 +517,7 @@ int PoissonProblem::run (const unsigned int level) { VectorTools::integrate_difference (*dof, solution, sol, h1_seminorm_error_per_cell, - *quadrature, *fe, H1_seminorm); + *quadrature, H1_seminorm); cout << h1_seminorm_error_per_cell.l2_norm() << endl; h1_seminorm_error.push_back (h1_seminorm_error_per_cell.l2_norm()); @@ -526,7 +525,7 @@ int PoissonProblem::run (const unsigned int level) { VectorTools::integrate_difference (*dof, solution, sol, h1_error_per_cell, - *quadrature, *fe, H1_norm); + *quadrature, H1_norm); cout << h1_error_per_cell.l2_norm() << endl; h1_error.push_back (h1_error_per_cell.l2_norm()); -- 2.39.5