From: guido Date: Tue, 24 Sep 2002 22:31:24 +0000 (+0000) Subject: new templates in FETools X-Git-Url: https://gitweb.dealii.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=d5780d2e55b99cdb5c29538834feecc2313a7359;p=dealii-svn.git new templates in FETools git-svn-id: https://svn.dealii.org/trunk@6503 0785d39b-7218-0410-832d-ea1e28bc413d --- diff --git a/deal.II/deal.II/include/fe/fe_tools.h b/deal.II/deal.II/include/fe/fe_tools.h index 5058cb084e..e9763d0b27 100644 --- a/deal.II/deal.II/include/fe/fe_tools.h +++ b/deal.II/deal.II/include/fe/fe_tools.h @@ -164,11 +164,11 @@ class FETools * your hanging node constraints * object. */ - template - static void interpolate (const DoFHandler &dof1, - const Vector &u1, - const DoFHandler &dof2, - Vector &u2); + template + static void interpolate (const DoFHandler& dof1, + const InVector& u1, + const DoFHandler& dof2, + OutVector& u2); /** * Gives the interpolation of a @@ -203,12 +203,12 @@ class FETools * at the DoF values on the * discontinuities. */ - template - static void interpolate (const DoFHandler &dof1, - const Vector &u1, - const DoFHandler &dof2, - const ConstraintMatrix &constraints, - Vector &u2); + template + static void interpolate (const DoFHandler& dof1, + const InVector& u1, + const DoFHandler& dof2, + const ConstraintMatrix& constraints, + OutVector& u2); /** @@ -237,11 +237,11 @@ class FETools * function is simply an identity * mapping. */ - template - static void back_interpolate (const DoFHandler &dof1, - const Vector &u1, - const FiniteElement &fe2, - Vector &u1_interpolated); + template + static void back_interpolate (const DoFHandler& dof1, + const InVector& u1, + const FiniteElement& fe2, + OutVector& u1_interpolated); /** * Gives the interpolation of the @@ -270,13 +270,13 @@ class FETools * function is simply an identity * mapping. */ - template - static void back_interpolate (const DoFHandler &dof1, - const ConstraintMatrix &constraints1, - const Vector &u1, - const DoFHandler &dof2, - const ConstraintMatrix &constraints2, - Vector &u1_interpolated); + template + static void back_interpolate (const DoFHandler& dof1, + const ConstraintMatrix& constraints1, + const InVector& u1, + const DoFHandler& dof2, + const ConstraintMatrix& constraints2, + OutVector& u1_interpolated); /** * Gives $(Id-I_h)z1$ for a given @@ -294,11 +294,11 @@ class FETools * additional * @p{ConstraintMatrix} object. */ - template + template static void interpolation_difference(const DoFHandler &dof1, - const Vector &z1, + const InVector &z1, const FiniteElement &fe2, - Vector &z1_difference); + OutVector &z1_difference); /** * Gives $(Id-I_h)z1$ for a given @@ -317,13 +317,13 @@ class FETools * nodes (locally refined grids) * are involved. */ - template - static void interpolation_difference(const DoFHandler &dof1, - const ConstraintMatrix &constraints1, - const Vector &z1, - const DoFHandler &dof2, - const ConstraintMatrix &constraints2, - Vector &z1_difference); + template + static void interpolation_difference(const DoFHandler& dof1, + const ConstraintMatrix& constraints1, + const InVector& z1, + const DoFHandler& dof2, + const ConstraintMatrix& constraints2, + OutVector& z1_difference); /** * Gives the patchwise @@ -352,11 +352,11 @@ class FETools * @p{ConstraintMatrix} argument, * see below. */ - template - static void extrapolate(const DoFHandler &dof1, - const Vector &z1, - const DoFHandler &dof2, - Vector &z2); + template + static void extrapolate(const DoFHandler& dof1, + const InVector& z1, + const DoFHandler& dof2, + OutVector& z2); /** * Gives the patchwise @@ -380,12 +380,12 @@ class FETools * solution to a piecewise * quadratic solution. */ - template - static void extrapolate(const DoFHandler &dof1, - const Vector &z1, - const DoFHandler &dof2, - const ConstraintMatrix &constraints, - Vector &z2); + template + static void extrapolate(const DoFHandler& dof1, + const InVector& z1, + const DoFHandler& dof2, + const ConstraintMatrix& constraints, + OutVector& z2); /** * The numbering of the degrees diff --git a/deal.II/deal.II/source/fe/fe_dgp_nonparametric.cc b/deal.II/deal.II/source/fe/fe_dgp_nonparametric.cc index c4d79a5087..12f9e3de83 100644 --- a/deal.II/deal.II/source/fe/fe_dgp_nonparametric.cc +++ b/deal.II/deal.II/source/fe/fe_dgp_nonparametric.cc @@ -207,9 +207,10 @@ FE_DGPNonparametric::update_each (const UpdateFlags flags) const template typename Mapping::InternalDataBase * -FE_DGPNonparametric::get_data (const UpdateFlags update_flags, - const Mapping &mapping, - const Quadrature &quadrature) const +FE_DGPNonparametric::get_data ( + const UpdateFlags update_flags, + const Mapping& mapping, + const Quadrature& quadrature) const { // generate a new data object InternalData* data = new InternalData; diff --git a/deal.II/deal.II/source/fe/fe_tools.cc b/deal.II/deal.II/source/fe/fe_tools.cc index 6c876ce3ec..c378ab571d 100644 --- a/deal.II/deal.II/source/fe/fe_tools.cc +++ b/deal.II/deal.II/source/fe/fe_tools.cc @@ -15,6 +15,7 @@ #include #include #include +#include #include #include #include @@ -123,11 +124,11 @@ void FETools::get_interpolation_difference_matrix(const FiniteElement &fe1, } -template +template void FETools::interpolate(const DoFHandler &dof1, - const Vector &u1, + const InVector &u1, const DoFHandler &dof2, - Vector &u2) + OutVector &u2) { ConstraintMatrix dummy; dummy.close(); @@ -135,12 +136,12 @@ void FETools::interpolate(const DoFHandler &dof1, } -template +template void FETools::interpolate(const DoFHandler &dof1, - const Vector &u1, + const InVector &u1, const DoFHandler &dof2, const ConstraintMatrix &constraints, - Vector &u2) + OutVector &u2) { Assert(&dof1.get_tria()==&dof2.get_tria(), ExcTriangulationMismatch()); Assert(dof1.get_fe().n_components() == dof2.get_fe().n_components(), @@ -161,10 +162,10 @@ void FETools::interpolate(const DoFHandler &dof1, const unsigned int dofs_per_cell1=dof1.get_fe().dofs_per_cell; const unsigned int dofs_per_cell2=dof2.get_fe().dofs_per_cell; - Vector u1_local(dofs_per_cell1); - Vector u2_local(dofs_per_cell2); + Vector u1_local(dofs_per_cell1); + Vector u2_local(dofs_per_cell2); - FullMatrix interpolation_matrix(dofs_per_cell2, + FullMatrix interpolation_matrix(dofs_per_cell2, dofs_per_cell1); FETools::get_interpolation_matrix(dof1.get_fe(), dof2.get_fe(), interpolation_matrix); @@ -210,11 +211,11 @@ void FETools::interpolate(const DoFHandler &dof1, } -template +template void FETools::back_interpolate(const DoFHandler &dof1, - const Vector &u1, + const InVector &u1, const FiniteElement &fe2, - Vector &u1_interpolated) + OutVector &u1_interpolated) { Assert(dof1.get_fe().n_components() == fe2.n_components(), ExcDimensionMismatch(dof1.get_fe().n_components(), fe2.n_components())); @@ -234,13 +235,13 @@ void FETools::back_interpolate(const DoFHandler &dof1, const unsigned int dofs_per_cell1=dof1.get_fe().dofs_per_cell; - Vector u1_local(dofs_per_cell1); - Vector u1_int_local(dofs_per_cell1); + Vector u1_local(dofs_per_cell1); + Vector u1_int_local(dofs_per_cell1); typename DoFHandler::active_cell_iterator cell = dof1.begin_active(), endc = dof1.end(); - FullMatrix interpolation_matrix(dofs_per_cell1, dofs_per_cell1); + FullMatrix interpolation_matrix(dofs_per_cell1, dofs_per_cell1); FETools::get_back_interpolation_matrix(dof1.get_fe(), fe2, interpolation_matrix); for (; cell!=endc; ++cell) @@ -259,13 +260,13 @@ void FETools::back_interpolate(const DoFHandler &dof1, -template +template void FETools::back_interpolate(const DoFHandler &dof1, const ConstraintMatrix &constraints1, - const Vector &u1, + const InVector &u1, const DoFHandler &dof2, const ConstraintMatrix &constraints2, - Vector &u1_interpolated) + OutVector &u1_interpolated) { // For discontinuous elements // without constraints take the @@ -297,11 +298,11 @@ void FETools::back_interpolate(const DoFHandler &dof1, -template +template void FETools::interpolation_difference(const DoFHandler &dof1, - const Vector &u1, + const InVector &u1, const FiniteElement &fe2, - Vector &u1_difference) + OutVector &u1_difference) { Assert(dof1.get_fe().n_components() == fe2.n_components(), ExcDimensionMismatch(dof1.get_fe().n_components(), fe2.n_components())); @@ -321,10 +322,10 @@ void FETools::interpolation_difference(const DoFHandler &dof1, const unsigned int dofs_per_cell=dof1.get_fe().dofs_per_cell; - Vector u1_local(dofs_per_cell); - Vector u1_diff_local(dofs_per_cell); + Vector u1_local(dofs_per_cell); + Vector u1_diff_local(dofs_per_cell); - FullMatrix difference_matrix(dofs_per_cell, dofs_per_cell); + FullMatrix difference_matrix(dofs_per_cell, dofs_per_cell); FETools::get_interpolation_difference_matrix(dof1.get_fe(), fe2, difference_matrix); @@ -347,13 +348,13 @@ void FETools::interpolation_difference(const DoFHandler &dof1, -template +template void FETools::interpolation_difference(const DoFHandler &dof1, const ConstraintMatrix &constraints1, - const Vector &u1, + const InVector &u1, const DoFHandler &dof2, const ConstraintMatrix &constraints2, - Vector &u1_difference) + OutVector &u1_difference) { // For discontinuous elements // without constraints take the @@ -370,11 +371,11 @@ void FETools::interpolation_difference(const DoFHandler &dof1, } -template +template void FETools::extrapolate(const DoFHandler &dof1, - const Vector &u1, + const InVector &u1, const DoFHandler &dof2, - Vector &u2) + OutVector &u2) { ConstraintMatrix dummy; dummy.close(); @@ -383,12 +384,12 @@ void FETools::extrapolate(const DoFHandler &dof1, -template +template void FETools::extrapolate(const DoFHandler &dof1, - const Vector &u1, + const InVector &u1, const DoFHandler &dof2, const ConstraintMatrix &constraints, - Vector &u2) + OutVector &u2) { Assert(dof1.get_fe().n_components() == dof2.get_fe().n_components(), ExcDimensionMismatch(dof1.get_fe().n_components(), dof2.get_fe().n_components())); @@ -396,12 +397,13 @@ void FETools::extrapolate(const DoFHandler &dof1, Assert(u1.size()==dof1.n_dofs(), ExcDimensionMismatch(u1.size(), dof1.n_dofs())); Assert(u2.size()==dof2.n_dofs(), ExcDimensionMismatch(u2.size(), dof2.n_dofs())); - Vector u3(dof2.n_dofs()); + OutVector u3; + u3.reinit(u2); interpolate(dof1, u1, dof2, constraints, u3); const unsigned int dofs_per_cell = dof2.get_fe().dofs_per_cell; const Triangulation &tria=dof1.get_tria(); - Vector dof_values(dofs_per_cell); + Vector dof_values(dofs_per_cell); for (unsigned int level=0; level &fe, /*-------------- Explicit Instantiations -------------------------------*/ +//TODO:[RH] Why do the instantiations for float and double differ? + template void FETools::get_interpolation_matrix (const FiniteElement &, @@ -869,94 +873,129 @@ void FETools::get_interpolation_difference_matrix (const FiniteElement &, const FiniteElement &, FullMatrix &); +template +void FETools::get_interpolation_matrix +(const FiniteElement &, + const FiniteElement &, + FullMatrix &); +template +void FETools::get_back_interpolation_matrix +(const FiniteElement &, + const FiniteElement &, + FullMatrix &); +template +void FETools::get_interpolation_difference_matrix +(const FiniteElement &, + const FiniteElement &, + FullMatrix &); + + template void FETools::interpolate -(const DoFHandler &, - const Vector &, - const DoFHandler &, - Vector &); +(const DoFHandler &, const Vector &, + const DoFHandler &, Vector &); template void FETools::interpolate -(const DoFHandler &, - const Vector &, - const DoFHandler &, - const ConstraintMatrix &, +(const DoFHandler &, const Vector &, + const DoFHandler &, const ConstraintMatrix &, Vector &); template void FETools::back_interpolate -(const DoFHandler &, - const Vector &, - const FiniteElement &, - Vector &); +(const DoFHandler &, const Vector &, + const FiniteElement &, Vector &); template void FETools::back_interpolate -(const DoFHandler &, - const ConstraintMatrix &, +(const DoFHandler &, const ConstraintMatrix &, const Vector &, - const DoFHandler &, - const ConstraintMatrix &, + const DoFHandler &, const ConstraintMatrix &, Vector &); template void FETools::interpolation_difference -(const DoFHandler &, - const Vector &, - const FiniteElement &, - Vector &); +(const DoFHandler &, const Vector &, + const FiniteElement &, Vector &); template void FETools::interpolation_difference -(const DoFHandler &, - const ConstraintMatrix &, +(const DoFHandler &, const ConstraintMatrix &, const Vector &, - const DoFHandler &, - const ConstraintMatrix &, + const DoFHandler &, const ConstraintMatrix &, Vector &); template void FETools::extrapolate -(const DoFHandler &, - const Vector &, - const DoFHandler &, - Vector &); +(const DoFHandler &, const Vector &, + const DoFHandler &, Vector &); template -void FETools::get_interpolation_matrix -(const FiniteElement &, - const FiniteElement &, - FullMatrix &); +void FETools::interpolate +(const DoFHandler &, const Vector &, + const DoFHandler &, Vector &); template -void FETools::get_back_interpolation_matrix -(const FiniteElement &, - const FiniteElement &, - FullMatrix &); +void FETools::back_interpolate +(const DoFHandler &, const Vector &, + const FiniteElement &, Vector &); template -void FETools::get_interpolation_difference_matrix -(const FiniteElement &, - const FiniteElement &, - FullMatrix &); +void FETools::interpolation_difference +(const DoFHandler &, const Vector &, + const FiniteElement &, Vector &); +template +void FETools::extrapolate +(const DoFHandler &, const Vector &, + const DoFHandler &, Vector &); + + +template +void FETools::interpolate +(const DoFHandler &, const BlockVector &, + const DoFHandler &, BlockVector &); template void FETools::interpolate -(const DoFHandler &, - const Vector &, - const DoFHandler &, - Vector &); +(const DoFHandler &, const BlockVector &, + const DoFHandler &, const ConstraintMatrix &, + BlockVector &); template void FETools::back_interpolate -(const DoFHandler &, - const Vector &, - const FiniteElement &, - Vector &); +(const DoFHandler &, const BlockVector &, + const FiniteElement &, BlockVector &); +template +void FETools::back_interpolate +(const DoFHandler &, const ConstraintMatrix &, + const BlockVector &, + const DoFHandler &, const ConstraintMatrix &, + BlockVector &); template void FETools::interpolation_difference -(const DoFHandler &, - const Vector &, - const FiniteElement &, - Vector &); +(const DoFHandler &, const BlockVector &, + const FiniteElement &, BlockVector &); +template +void FETools::interpolation_difference +(const DoFHandler &, const ConstraintMatrix &, + const BlockVector &, + const DoFHandler &, const ConstraintMatrix &, + BlockVector &); template void FETools::extrapolate -(const DoFHandler &, - const Vector &, - const DoFHandler &, - Vector &); +(const DoFHandler &, const BlockVector &, + const DoFHandler &, BlockVector &); + + +template +void FETools::interpolate +(const DoFHandler &, const BlockVector &, + const DoFHandler &, BlockVector &); +template +void FETools::back_interpolate +(const DoFHandler &, const BlockVector &, + const FiniteElement &, BlockVector &); +template +void FETools::interpolation_difference +(const DoFHandler &, const BlockVector &, + const FiniteElement &, BlockVector &); +template +void FETools::extrapolate +(const DoFHandler &, const BlockVector &, + const DoFHandler &, BlockVector &); + + template void FETools::hierarchic_to_lexicographic_numbering diff --git a/deal.II/doc/news/2002/c-3-4.html b/deal.II/doc/news/2002/c-3-4.html index 0ca6b512d0..3b3afed5c5 100644 --- a/deal.II/doc/news/2002/c-3-4.html +++ b/deal.II/doc/news/2002/c-3-4.html @@ -311,6 +311,12 @@ contributor's names are abbreviated by WB (Wolfgang Bangerth), GK

deal.II

    +
  1. Improved: The different transfer functions in FETools operate on template vector arguments. +
    + (GK 2002/09/24) +

    +
  2. New: the class FE_DGPNonparametric implements finite elements where shape functions are polynomials of order k on the @@ -318,7 +324,7 @@ contributor's names are abbreviated by WB (Wolfgang Bangerth), GK the mapped quadrature points. No grid transfer matrices are available for this class.
    - (GK 09/19/2002) + (GK 2002/09/19)