From e183dbbef3c13f2ad49d88d83873d66ed4fea1ce Mon Sep 17 00:00:00 2001 From: Guido Kanschat Date: Fri, 4 Sep 1998 13:02:13 +0000 Subject: [PATCH] Store full fe in dofhandler git-svn-id: https://svn.dealii.org/trunk@563 0785d39b-7218-0410-832d-ea1e28bc413d --- deal.II/deal.II/Todo | 8 +- deal.II/deal.II/include/dofs/dof_handler.h | 12 +- deal.II/deal.II/include/fe/fe_update_flags.h | 6 +- deal.II/deal.II/include/numerics/vectors.h | 26 ++++- deal.II/deal.II/source/dofs/dof_accessor.cc | 58 +++++----- deal.II/deal.II/source/dofs/dof_handler.cc | 13 +-- .../deal.II/source/dofs/mg_dof_accessor.cc | 106 +++++++++--------- deal.II/deal.II/source/fe/fe_values.cc | 34 +++--- .../source/multigrid/mg_dof_accessor.cc | 106 +++++++++--------- deal.II/deal.II/source/numerics/assembler.cc | 8 +- deal.II/deal.II/source/numerics/data_io.cc | 4 +- deal.II/deal.II/source/numerics/matrices.cc | 2 +- deal.II/deal.II/source/numerics/vectors.cc | 13 ++- 13 files changed, 210 insertions(+), 186 deletions(-) diff --git a/deal.II/deal.II/Todo b/deal.II/deal.II/Todo index 3317b2cd1b..38ac430e50 100644 --- a/deal.II/deal.II/Todo +++ b/deal.II/deal.II/Todo @@ -162,11 +162,13 @@ Why are there all these unsafe casts from VectorBase to dVector Use unsigned integers for the colnums array in dSMatrixStruct. This would enhance safety since colnum=-1 would no longer point to a - valid address. + valid address. How do you mark non-used columns? (gk) Let dSMatrixStruct::compress free the memory of colnums which is no longer needed. -FeValues: Replace 'ansatz', add flexibility for update flags and put -the element into the constructor +FeValues: add flexibility for update flags +Remove all fe& in vectors.h + +Collection of transfer matrices: how to design? diff --git a/deal.II/deal.II/include/dofs/dof_handler.h b/deal.II/deal.II/include/dofs/dof_handler.h index 63a48234c4..3e10c7e97b 100644 --- a/deal.II/deal.II/include/dofs/dof_handler.h +++ b/deal.II/deal.II/include/dofs/dof_handler.h @@ -8,9 +8,7 @@ #include #include #include - - - +#include template class TriaAccessor; template class LineAccessor; @@ -481,7 +479,7 @@ class DoFHandler : public DoFDimensionInfo { DoFHandler (Triangulation *tria); /** - * Destructor + * Destructor. */ virtual ~DoFHandler (); @@ -1244,7 +1242,7 @@ class DoFHandler : public DoFDimensionInfo { * function is inline, so it should * be reasonably fast. */ - const FiniteElementBase & get_selected_fe () const; + const FiniteElementBase & get_fe () const; /** * Return a constant reference to the @@ -1326,7 +1324,7 @@ class DoFHandler : public DoFDimensionInfo { * dofs per line, but also restriction * and prolongation matrices, etc. */ - const FiniteElementBase *selected_fe; + SmartPointer > selected_fe; private: /** @@ -1425,7 +1423,7 @@ class DoFHandler : public DoFDimensionInfo { template inline -const FiniteElementBase & DoFHandler::get_selected_fe () const { +const FiniteElementBase & DoFHandler::get_fe () const { return *selected_fe; }; diff --git a/deal.II/deal.II/include/fe/fe_update_flags.h b/deal.II/deal.II/include/fe/fe_update_flags.h index e001abbabe..46d729bb59 100644 --- a/deal.II/deal.II/include/fe/fe_update_flags.h +++ b/deal.II/deal.II/include/fe/fe_update_flags.h @@ -45,15 +45,15 @@ enum UpdateFlags { update_JxW_values = 8, /** * Compute the points on the real cell - * on which the ansatz functions are + * on which the trial functions are * located. * * Giving this flag to the * #FESubfaceValues# class will result - * in an error, since ansatz points are + * in an error, since support points are * not useful in that case. */ - update_ansatz_points = 16, + update_support_points = 16, /** * Update the outward normal vectors * to the face relative to this cell. diff --git a/deal.II/deal.II/include/numerics/vectors.h b/deal.II/deal.II/include/numerics/vectors.h index 6b4f390363..1db1ff93db 100644 --- a/deal.II/deal.II/include/numerics/vectors.h +++ b/deal.II/deal.II/include/numerics/vectors.h @@ -60,8 +60,8 @@ enum NormType { * created the value of the function given as argument. This is identical * to saying that the resulting finite element function (which is isomorphic * to the output vector) has exact function values in all off-points of - * ansatz functions. The off-point of an ansatz function is the point where - * it assumes its nominal value, e.g. for linear ansatz functions the + * trial functions. The off-point of an trial function is the point where + * it assumes its nominal value, e.g. for linear trial functions the * off-points are th corners of an element. This function therefore relies * on the assumption that a finite element is used for which the degrees * of freedom are function values (Lagrange elements) rather than gradients, @@ -70,7 +70,7 @@ enum NormType { * * It seems inevitable that some values of the vector to be created are set * twice or even more than that. The reason is that we have to loop over - * all cells and get the function values for each of the ansatz functions + * all cells and get the function values for each of the trial functions * located thereon. This applies also to the functions located on faces and * corners which we thus visit more than once. While setting the value * in the vector is not an expensive operation, the evaluation of the @@ -267,7 +267,7 @@ class VectorTools { /** * Compute the interpolation of - * #function# at the ansatz points to + * #function# at the support points to * the finite element space. * * See the general documentation of this @@ -279,6 +279,24 @@ class VectorTools { 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); + + /** * Compute the projection of * #function# to the finite element space. diff --git a/deal.II/deal.II/source/dofs/dof_accessor.cc b/deal.II/deal.II/source/dofs/dof_accessor.cc index 748a34e767..440af1b02a 100644 --- a/deal.II/deal.II/source/dofs/dof_accessor.cc +++ b/deal.II/deal.II/source/dofs/dof_accessor.cc @@ -99,12 +99,12 @@ void DoFLineAccessor::get_dof_indices (vector &dof_indices) const { Assert (dof_handler != 0, ExcInvalidObject()); Assert (dof_handler->selected_fe != 0, ExcInvalidObject()); - Assert (dof_indices.size() == (2*dof_handler->get_selected_fe().dofs_per_vertex + - dof_handler->get_selected_fe().dofs_per_line), + Assert (dof_indices.size() == (2*dof_handler->get_fe().dofs_per_vertex + + dof_handler->get_fe().dofs_per_line), ExcVectorDoesNotMatch()); - const unsigned int dofs_per_vertex = dof_handler->get_selected_fe().dofs_per_vertex, - dofs_per_line = dof_handler->get_selected_fe().dofs_per_line; + const unsigned int dofs_per_vertex = dof_handler->get_fe().dofs_per_vertex, + dofs_per_line = dof_handler->get_fe().dofs_per_line; vector::iterator next = dof_indices.begin(); for (unsigned int vertex=0; vertex<2; ++vertex) for (unsigned int d=0; dselected_fe != 0, ExcInvalidObject()); - Assert (local_source.size() == (2*dof_handler->get_selected_fe().dofs_per_vertex + - dof_handler->get_selected_fe().dofs_per_line), + Assert (local_source.size() == (2*dof_handler->get_fe().dofs_per_vertex + + dof_handler->get_fe().dofs_per_line), ExcVectorDoesNotMatch()); Assert (dof_handler->n_dofs() == global_destination.size(), ExcVectorDoesNotMatch()); @@ -163,8 +163,8 @@ distribute_local_to_global (const dFMatrix &local_source, dSMatrix &global_destination) const { Assert (dof_handler != 0, ExcInvalidObject()); Assert (dof_handler->selected_fe != 0, ExcInvalidObject()); - Assert (local_source.m() == (2*dof_handler->get_selected_fe().dofs_per_vertex + - dof_handler->get_selected_fe().dofs_per_line), + Assert (local_source.m() == (2*dof_handler->get_fe().dofs_per_vertex + + dof_handler->get_fe().dofs_per_line), ExcVectorDoesNotMatch()); Assert (local_source.m() == local_source.n(), ExcMatrixDoesNotMatch()); @@ -271,14 +271,14 @@ void DoFQuadAccessor::get_dof_indices (vector &dof_indices) const { Assert (dof_handler != 0, ExcInvalidObject()); Assert (dof_handler->selected_fe != 0, ExcInvalidObject()); - Assert (dof_indices.size() == (4*dof_handler->get_selected_fe().dofs_per_vertex + - 4*dof_handler->get_selected_fe().dofs_per_line + - dof_handler->get_selected_fe().dofs_per_quad), + Assert (dof_indices.size() == (4*dof_handler->get_fe().dofs_per_vertex + + 4*dof_handler->get_fe().dofs_per_line + + dof_handler->get_fe().dofs_per_quad), ExcVectorDoesNotMatch()); - const unsigned int dofs_per_vertex = dof_handler->get_selected_fe().dofs_per_vertex, - dofs_per_line = dof_handler->get_selected_fe().dofs_per_line, - dofs_per_quad = dof_handler->get_selected_fe().dofs_per_quad; + const unsigned int dofs_per_vertex = dof_handler->get_fe().dofs_per_vertex, + dofs_per_line = dof_handler->get_fe().dofs_per_line, + dofs_per_quad = dof_handler->get_fe().dofs_per_quad; vector::iterator next = dof_indices.begin(); for (unsigned int vertex=0; vertex<4; ++vertex) for (unsigned int d=0; dselected_fe != 0, ExcInvalidObject()); - Assert (local_source.size() == (4*dof_handler->get_selected_fe().dofs_per_vertex + - 4*dof_handler->get_selected_fe().dofs_per_line + - dof_handler->get_selected_fe().dofs_per_quad), + Assert (local_source.size() == (4*dof_handler->get_fe().dofs_per_vertex + + 4*dof_handler->get_fe().dofs_per_line + + dof_handler->get_fe().dofs_per_quad), ExcVectorDoesNotMatch()); Assert (dof_handler->n_dofs() == global_destination.size(), ExcVectorDoesNotMatch()); @@ -357,9 +357,9 @@ distribute_local_to_global (const dFMatrix &local_source, dSMatrix &global_destination) const { Assert (dof_handler != 0, ExcInvalidObject()); Assert (dof_handler->selected_fe != 0, ExcInvalidObject()); - Assert (local_source.m() == (4*dof_handler->get_selected_fe().dofs_per_vertex + - 4*dof_handler->get_selected_fe().dofs_per_line + - dof_handler->get_selected_fe().dofs_per_quad), + Assert (local_source.m() == (4*dof_handler->get_fe().dofs_per_vertex + + 4*dof_handler->get_fe().dofs_per_line + + dof_handler->get_fe().dofs_per_quad), ExcMatrixDoesNotMatch()); Assert (local_source.m() == local_source.n(), ExcMatrixDoesNotMatch()); @@ -443,14 +443,14 @@ void DoFCellAccessor<1>::get_dof_values (const dVector &values, dVector &dof_values) const { Assert (dof_handler != 0, ExcInvalidObject()); - Assert (&dof_handler->get_selected_fe() != 0, ExcInvalidObject()); - Assert (dof_values.size() == dof_handler->get_selected_fe().total_dofs, + Assert (&dof_handler->get_fe() != 0, ExcInvalidObject()); + Assert (dof_values.size() == dof_handler->get_fe().total_dofs, ExcVectorDoesNotMatch()); Assert (values.size() == dof_handler->n_dofs(), ExcVectorDoesNotMatch()); - const unsigned int dofs_per_vertex = dof_handler->get_selected_fe().dofs_per_vertex, - dofs_per_line = dof_handler->get_selected_fe().dofs_per_line; + const unsigned int dofs_per_vertex = dof_handler->get_fe().dofs_per_vertex, + dofs_per_line = dof_handler->get_fe().dofs_per_line; vector::iterator next_dof_value=dof_values.begin(); for (unsigned int vertex=0; vertex<2; ++vertex) for (unsigned int d=0; d::get_dof_values (const dVector &values, dVector &dof_values) const { Assert (dof_handler != 0, ExcInvalidObject()); - Assert (&dof_handler->get_selected_fe() != 0, ExcInvalidObject()); - Assert (dof_values.size() == dof_handler->get_selected_fe().total_dofs, + Assert (&dof_handler->get_fe() != 0, ExcInvalidObject()); + Assert (dof_values.size() == dof_handler->get_fe().total_dofs, ExcVectorDoesNotMatch()); Assert (values.size() == dof_handler->n_dofs(), ExcVectorDoesNotMatch()); - const unsigned int dofs_per_vertex = dof_handler->get_selected_fe().dofs_per_vertex, - dofs_per_line = dof_handler->get_selected_fe().dofs_per_line, - dofs_per_quad = dof_handler->get_selected_fe().dofs_per_quad; + const unsigned int dofs_per_vertex = dof_handler->get_fe().dofs_per_vertex, + dofs_per_line = dof_handler->get_fe().dofs_per_line, + dofs_per_quad = dof_handler->get_fe().dofs_per_quad; vector::iterator next_dof_value=dof_values.begin(); for (unsigned int vertex=0; vertex<4; ++vertex) for (unsigned int d=0; d DoFHandler::DoFHandler (Triangulation *tria) : tria(tria), - selected_fe (0), used_dofs (0) {}; template -DoFHandler::~DoFHandler () { - if (selected_fe != 0) - delete selected_fe; -}; +DoFHandler::~DoFHandler () +{} @@ -885,11 +882,11 @@ const Triangulation & DoFHandler::get_tria () const { template -void DoFHandler::distribute_dofs (const FiniteElementBase &fe) { +void DoFHandler::distribute_dofs (const FiniteElementBase &ff) { Assert (tria->n_levels() > 0, ExcInvalidTriangulation()); - if (selected_fe != 0) delete selected_fe; - selected_fe = new FiniteElementBase(fe); + selected_fe = &ff; + reserve_space (); // clear user flags because we will diff --git a/deal.II/deal.II/source/dofs/mg_dof_accessor.cc b/deal.II/deal.II/source/dofs/mg_dof_accessor.cc index 1a2ac97879..49b7f9c661 100644 --- a/deal.II/deal.II/source/dofs/mg_dof_accessor.cc +++ b/deal.II/deal.II/source/dofs/mg_dof_accessor.cc @@ -37,12 +37,12 @@ int MGDoFLineAccessor::mg_dof_index (const unsigned int i) const Assert (mg_dof_handler != 0, ExcInvalidObject()); // make sure a FE has been selected // and enough room was reserved - Assert (&dof_handler->get_selected_fe() != 0, ExcInvalidObject()); - Assert (iget_selected_fe().dofs_per_line, - ExcInvalidIndex (i, 0, dof_handler->get_selected_fe().dofs_per_line)); + Assert (&dof_handler->get_fe() != 0, ExcInvalidObject()); + Assert (iget_fe().dofs_per_line, + ExcInvalidIndex (i, 0, dof_handler->get_fe().dofs_per_line)); return mg_dof_handler->mg_levels[present_level] - ->line_dofs[present_index*dof_handler->get_selected_fe().dofs_per_line+i]; + ->line_dofs[present_index*dof_handler->get_fe().dofs_per_line+i]; }; @@ -56,12 +56,12 @@ void MGDoFLineAccessor::set_mg_dof_index (const unsigned int i, Assert (mg_dof_handler != 0, ExcInvalidObject()); // make sure a FE has been selected // and enough room was reserved - Assert (&dof_handler->get_selected_fe() != 0, ExcInvalidObject()); - Assert (iget_selected_fe().dofs_per_line, - ExcInvalidIndex (i, 0, dof_handler->get_selected_fe().dofs_per_line)); + Assert (&dof_handler->get_fe() != 0, ExcInvalidObject()); + Assert (iget_fe().dofs_per_line, + ExcInvalidIndex (i, 0, dof_handler->get_fe().dofs_per_line)); mg_dof_handler->mg_levels[present_level] - ->line_dofs[present_index*dof_handler->get_selected_fe().dofs_per_line+i] = index; + ->line_dofs[present_index*dof_handler->get_fe().dofs_per_line+i] = index; }; @@ -72,13 +72,13 @@ int MGDoFLineAccessor::mg_vertex_dof_index (const unsigned int ve const unsigned int i) const { Assert (dof_handler != 0, ExcInvalidObject()); Assert (mg_dof_handler != 0, ExcInvalidObject()); - Assert (&dof_handler->get_selected_fe() != 0, ExcInvalidObject()); + Assert (&dof_handler->get_fe() != 0, ExcInvalidObject()); Assert (vertex<2, ExcInvalidIndex (i,0,2)); - Assert (iget_selected_fe().dofs_per_vertex, - ExcInvalidIndex (i, 0, dof_handler->get_selected_fe().dofs_per_vertex)); + Assert (iget_fe().dofs_per_vertex, + ExcInvalidIndex (i, 0, dof_handler->get_fe().dofs_per_vertex)); return (mg_dof_handler->mg_vertex_dofs[vertex_index(vertex)] - .get_index (present_level, i, dof_handler->get_selected_fe().dofs_per_vertex)); + .get_index (present_level, i, dof_handler->get_fe().dofs_per_vertex)); }; @@ -89,13 +89,13 @@ void MGDoFLineAccessor::set_mg_vertex_dof_index (const unsigned i const int index) const { Assert (dof_handler != 0, ExcInvalidObject()); Assert (mg_dof_handler != 0, ExcInvalidObject()); - Assert (&dof_handler->get_selected_fe() != 0, ExcInvalidObject()); + Assert (&dof_handler->get_fe() != 0, ExcInvalidObject()); Assert (vertex<2, ExcInvalidIndex (i,0,2)); - Assert (iget_selected_fe().dofs_per_vertex, - ExcInvalidIndex (i, 0, dof_handler->get_selected_fe().dofs_per_vertex)); + Assert (iget_fe().dofs_per_vertex, + ExcInvalidIndex (i, 0, dof_handler->get_fe().dofs_per_vertex)); mg_dof_handler->mg_vertex_dofs[vertex_index(vertex)] - .set_index (present_level, i, dof_handler->get_selected_fe().dofs_per_vertex, index); + .set_index (present_level, i, dof_handler->get_fe().dofs_per_vertex, index); }; @@ -105,13 +105,13 @@ void MGDoFLineAccessor::get_mg_dof_indices (vector &dof_indices) const { Assert (dof_handler != 0, ExcInvalidObject()); Assert (mg_dof_handler != 0, ExcInvalidObject()); - Assert (&dof_handler->get_selected_fe() != 0, ExcInvalidObject()); - Assert (dof_indices.size() == (2*dof_handler->get_selected_fe().dofs_per_vertex + - dof_handler->get_selected_fe().dofs_per_line), + Assert (&dof_handler->get_fe() != 0, ExcInvalidObject()); + Assert (dof_indices.size() == (2*dof_handler->get_fe().dofs_per_vertex + + dof_handler->get_fe().dofs_per_line), ExcVectorDoesNotMatch()); - const unsigned int dofs_per_vertex = dof_handler->get_selected_fe().dofs_per_vertex, - dofs_per_line = dof_handler->get_selected_fe().dofs_per_line; + const unsigned int dofs_per_vertex = dof_handler->get_fe().dofs_per_vertex, + dofs_per_line = dof_handler->get_fe().dofs_per_line; vector::iterator next = dof_indices.begin(); for (unsigned int vertex=0; vertex<2; ++vertex) for (unsigned int d=0; d::mg_dof_index (const unsigned int i) const Assert (mg_dof_handler != 0, ExcInvalidObject()); // make sure a FE has been selected // and enough room was reserved - Assert (&dof_handler->get_selected_fe() != 0, ExcInvalidObject()); - Assert (iget_selected_fe().dofs_per_quad, - ExcInvalidIndex (i, 0, dof_handler->get_selected_fe().dofs_per_quad)); + Assert (&dof_handler->get_fe() != 0, ExcInvalidObject()); + Assert (iget_fe().dofs_per_quad, + ExcInvalidIndex (i, 0, dof_handler->get_fe().dofs_per_quad)); return mg_dof_handler->mg_levels[present_level] - ->quad_dofs[present_index*dof_handler->get_selected_fe().dofs_per_quad+i]; + ->quad_dofs[present_index*dof_handler->get_fe().dofs_per_quad+i]; }; @@ -185,12 +185,12 @@ void MGDoFQuadAccessor::set_mg_dof_index (const unsigned int i, Assert (mg_dof_handler != 0, ExcInvalidObject()); // make sure a FE has been selected // and enough room was reserved - Assert (&dof_handler->get_selected_fe() != 0, ExcInvalidObject()); - Assert (iget_selected_fe().dofs_per_quad, - ExcInvalidIndex (i, 0, dof_handler->get_selected_fe().dofs_per_quad)); + Assert (&dof_handler->get_fe() != 0, ExcInvalidObject()); + Assert (iget_fe().dofs_per_quad, + ExcInvalidIndex (i, 0, dof_handler->get_fe().dofs_per_quad)); mg_dof_handler->mg_levels[present_level] - ->quad_dofs[present_index*dof_handler->get_selected_fe().dofs_per_quad+i] = index; + ->quad_dofs[present_index*dof_handler->get_fe().dofs_per_quad+i] = index; }; @@ -201,13 +201,13 @@ int MGDoFQuadAccessor::mg_vertex_dof_index (const unsigned int ve const unsigned int i) const { Assert (dof_handler != 0, ExcInvalidObject()); Assert (mg_dof_handler != 0, ExcInvalidObject()); - Assert (&dof_handler->get_selected_fe() != 0, ExcInvalidObject()); + Assert (&dof_handler->get_fe() != 0, ExcInvalidObject()); Assert (vertex<4, ExcInvalidIndex (i,0,4)); - Assert (iget_selected_fe().dofs_per_vertex, - ExcInvalidIndex (i, 0, dof_handler->get_selected_fe().dofs_per_vertex)); + Assert (iget_fe().dofs_per_vertex, + ExcInvalidIndex (i, 0, dof_handler->get_fe().dofs_per_vertex)); return (mg_dof_handler->mg_vertex_dofs[vertex_index(vertex)] - .get_index (present_level, i, dof_handler->get_selected_fe().dofs_per_vertex)); + .get_index (present_level, i, dof_handler->get_fe().dofs_per_vertex)); }; @@ -218,13 +218,13 @@ void MGDoFQuadAccessor::set_mg_vertex_dof_index (const unsigned i const int index) const { Assert (dof_handler != 0, ExcInvalidObject()); Assert (mg_dof_handler != 0, ExcInvalidObject()); - Assert (&dof_handler->get_selected_fe() != 0, ExcInvalidObject()); + Assert (&dof_handler->get_fe() != 0, ExcInvalidObject()); Assert (vertex<4, ExcInvalidIndex (i,0,4)); - Assert (iget_selected_fe().dofs_per_vertex, - ExcInvalidIndex (i, 0, dof_handler->get_selected_fe().dofs_per_vertex)); + Assert (iget_fe().dofs_per_vertex, + ExcInvalidIndex (i, 0, dof_handler->get_fe().dofs_per_vertex)); mg_dof_handler->mg_vertex_dofs[vertex_index(vertex)] - .set_index (present_level, i, dof_handler->get_selected_fe().dofs_per_vertex, index); + .set_index (present_level, i, dof_handler->get_fe().dofs_per_vertex, index); }; @@ -234,15 +234,15 @@ void MGDoFQuadAccessor::get_mg_dof_indices (vector &dof_indices) const { Assert (dof_handler != 0, ExcInvalidObject()); Assert (mg_dof_handler != 0, ExcInvalidObject()); - Assert (&dof_handler->get_selected_fe() != 0, ExcInvalidObject()); - Assert (dof_indices.size() == (4*dof_handler->get_selected_fe().dofs_per_vertex + - 4*dof_handler->get_selected_fe().dofs_per_line + - dof_handler->get_selected_fe().dofs_per_quad), + Assert (&dof_handler->get_fe() != 0, ExcInvalidObject()); + Assert (dof_indices.size() == (4*dof_handler->get_fe().dofs_per_vertex + + 4*dof_handler->get_fe().dofs_per_line + + dof_handler->get_fe().dofs_per_quad), ExcVectorDoesNotMatch()); - const unsigned int dofs_per_vertex = dof_handler->get_selected_fe().dofs_per_vertex, - dofs_per_line = dof_handler->get_selected_fe().dofs_per_line, - dofs_per_quad = dof_handler->get_selected_fe().dofs_per_quad; + const unsigned int dofs_per_vertex = dof_handler->get_fe().dofs_per_vertex, + dofs_per_line = dof_handler->get_fe().dofs_per_line, + dofs_per_quad = dof_handler->get_fe().dofs_per_quad; vector::iterator next = dof_indices.begin(); for (unsigned int vertex=0; vertex<4; ++vertex) for (unsigned int d=0; d::get_mg_dof_values (const dVector &values, dVector &dof_values) const { Assert (dof_handler != 0, ExcInvalidObject()); Assert (mg_dof_handler != 0, ExcInvalidObject()); - Assert (&dof_handler->get_selected_fe() != 0, ExcInvalidObject()); - Assert (dof_values.size() == dof_handler->get_selected_fe().total_dofs, + Assert (&dof_handler->get_fe() != 0, ExcInvalidObject()); + Assert (dof_values.size() == dof_handler->get_fe().total_dofs, ExcVectorDoesNotMatch()); Assert (values.size() == dof_handler->n_dofs(), ExcVectorDoesNotMatch()); - const unsigned int dofs_per_vertex = dof_handler->get_selected_fe().dofs_per_vertex, - dofs_per_line = dof_handler->get_selected_fe().dofs_per_line; + const unsigned int dofs_per_vertex = dof_handler->get_fe().dofs_per_vertex, + dofs_per_line = dof_handler->get_fe().dofs_per_line; vector::iterator next_dof_value=dof_values.begin(); for (unsigned int vertex=0; vertex<2; ++vertex) for (unsigned int d=0; d::get_mg_dof_values (const dVector &values, dVector &dof_values) const { Assert (dof_handler != 0, ExcInvalidObject()); Assert (mg_dof_handler != 0, ExcInvalidObject()); - Assert (&dof_handler->get_selected_fe() != 0, ExcInvalidObject()); - Assert (dof_values.size() == dof_handler->get_selected_fe().total_dofs, + Assert (&dof_handler->get_fe() != 0, ExcInvalidObject()); + Assert (dof_values.size() == dof_handler->get_fe().total_dofs, ExcVectorDoesNotMatch()); Assert (values.size() == dof_handler->n_dofs(), ExcVectorDoesNotMatch()); - const unsigned int dofs_per_vertex = dof_handler->get_selected_fe().dofs_per_vertex, - dofs_per_line = dof_handler->get_selected_fe().dofs_per_line, - dofs_per_quad = dof_handler->get_selected_fe().dofs_per_quad; + const unsigned int dofs_per_vertex = dof_handler->get_fe().dofs_per_vertex, + dofs_per_line = dof_handler->get_fe().dofs_per_line, + dofs_per_quad = dof_handler->get_fe().dofs_per_quad; vector::iterator next_dof_value=dof_values.begin(); for (unsigned int vertex=0; vertex<4; ++vertex) for (unsigned int d=0; d FEValuesBase::FEValuesBase (const unsigned int n_q_points, - const unsigned int n_ansatz_points, + const unsigned int n_support_points, const unsigned int n_dofs, const unsigned int n_transform_functions, const unsigned int n_values_arrays, @@ -30,7 +30,7 @@ FEValuesBase::FEValuesBase (const unsigned int n_q_points, weights (n_q_points, 0), JxW_values (n_q_points, 0), quadrature_points (n_q_points, Point()), - ansatz_points (n_ansatz_points, Point()), + support_points (n_support_points, Point()), jacobi_matrices (n_q_points, dFMatrix(dim,dim)), shape_values_transform (n_values_arrays, dFMatrix(n_transform_functions, @@ -72,7 +72,7 @@ void FEValuesBase::get_function_values (const dVector &fe_function, // initialize with zero fill_n (values.begin(), n_quadrature_points, 0); - // add up contributions of ansatz + // add up contributions of trial // functions for (unsigned int point=0; point::get_function_grads (const dVector &fe_function, // initialize with zero fill_n (gradients.begin(), n_quadrature_points, Point()); - // add up contributions of ansatz + // add up contributions of trial // functions for (unsigned int point=0; point & FEValuesBase::quadrature_point (const unsigned int i) co template -const Point & FEValuesBase::ansatz_point (const unsigned int i) const { - Assert (i & FEValuesBase::support_point (const unsigned int i) const { + Assert (i::reinit (const typename DoFHandler::cell_iterator &cell, (update_flags & update_JxW_values)|| (update_flags & update_q_points) || (update_flags & update_gradients) || - (update_flags & update_ansatz_points)) + (update_flags & update_support_points)) fe->fill_fe_values (cell, unit_quadrature_points, jacobi_matrices, update_flags & (update_jacobians | update_JxW_values | update_gradients), - ansatz_points, - update_flags & update_ansatz_points, + support_points, + update_flags & update_support_points, quadrature_points, update_flags & update_q_points, shape_values_transform[0], unit_shape_gradients_transform, @@ -262,13 +262,13 @@ void FEValues::reinit (const typename DoFHandler::cell_iterator &cell, template FEFaceValuesBase::FEFaceValuesBase (const unsigned int n_q_points, - const unsigned int n_ansatz_points, + const unsigned int n_support_points, const unsigned int n_dofs, const unsigned int n_transform_functions, const unsigned int n_faces_or_subfaces, const UpdateFlags update_flags) : FEValuesBase (n_q_points, - n_ansatz_points, + n_support_points, n_dofs, n_transform_functions, n_faces_or_subfaces, @@ -363,7 +363,7 @@ void FEFaceValues::reinit (const typename DoFHandler::cell_iterator &c (update_flags & update_JxW_values)|| (update_flags & update_q_points) || (update_flags & update_gradients) || - (update_flags & update_ansatz_points) || + (update_flags & update_support_points) || (update_flags & update_JxW_values)) fe->fill_fe_face_values (cell, face_no, @@ -373,8 +373,8 @@ void FEFaceValues::reinit (const typename DoFHandler::cell_iterator &c update_flags & (update_jacobians | update_gradients | update_JxW_values), - ansatz_points, - update_flags & update_ansatz_points, + support_points, + update_flags & update_support_points, quadrature_points, update_flags & update_q_points, face_jacobi_determinants, @@ -435,7 +435,7 @@ FESubfaceValues::FESubfaceValues (const FiniteElement &fe, update_flags), fe(&fe) { - Assert ((update_flags & update_ansatz_points) == false, + Assert ((update_flags & update_support_points) == false, ExcInvalidUpdateFlag()); unit_face_quadrature_points = quadrature.get_quad_points(); diff --git a/deal.II/deal.II/source/multigrid/mg_dof_accessor.cc b/deal.II/deal.II/source/multigrid/mg_dof_accessor.cc index 1a2ac97879..49b7f9c661 100644 --- a/deal.II/deal.II/source/multigrid/mg_dof_accessor.cc +++ b/deal.II/deal.II/source/multigrid/mg_dof_accessor.cc @@ -37,12 +37,12 @@ int MGDoFLineAccessor::mg_dof_index (const unsigned int i) const Assert (mg_dof_handler != 0, ExcInvalidObject()); // make sure a FE has been selected // and enough room was reserved - Assert (&dof_handler->get_selected_fe() != 0, ExcInvalidObject()); - Assert (iget_selected_fe().dofs_per_line, - ExcInvalidIndex (i, 0, dof_handler->get_selected_fe().dofs_per_line)); + Assert (&dof_handler->get_fe() != 0, ExcInvalidObject()); + Assert (iget_fe().dofs_per_line, + ExcInvalidIndex (i, 0, dof_handler->get_fe().dofs_per_line)); return mg_dof_handler->mg_levels[present_level] - ->line_dofs[present_index*dof_handler->get_selected_fe().dofs_per_line+i]; + ->line_dofs[present_index*dof_handler->get_fe().dofs_per_line+i]; }; @@ -56,12 +56,12 @@ void MGDoFLineAccessor::set_mg_dof_index (const unsigned int i, Assert (mg_dof_handler != 0, ExcInvalidObject()); // make sure a FE has been selected // and enough room was reserved - Assert (&dof_handler->get_selected_fe() != 0, ExcInvalidObject()); - Assert (iget_selected_fe().dofs_per_line, - ExcInvalidIndex (i, 0, dof_handler->get_selected_fe().dofs_per_line)); + Assert (&dof_handler->get_fe() != 0, ExcInvalidObject()); + Assert (iget_fe().dofs_per_line, + ExcInvalidIndex (i, 0, dof_handler->get_fe().dofs_per_line)); mg_dof_handler->mg_levels[present_level] - ->line_dofs[present_index*dof_handler->get_selected_fe().dofs_per_line+i] = index; + ->line_dofs[present_index*dof_handler->get_fe().dofs_per_line+i] = index; }; @@ -72,13 +72,13 @@ int MGDoFLineAccessor::mg_vertex_dof_index (const unsigned int ve const unsigned int i) const { Assert (dof_handler != 0, ExcInvalidObject()); Assert (mg_dof_handler != 0, ExcInvalidObject()); - Assert (&dof_handler->get_selected_fe() != 0, ExcInvalidObject()); + Assert (&dof_handler->get_fe() != 0, ExcInvalidObject()); Assert (vertex<2, ExcInvalidIndex (i,0,2)); - Assert (iget_selected_fe().dofs_per_vertex, - ExcInvalidIndex (i, 0, dof_handler->get_selected_fe().dofs_per_vertex)); + Assert (iget_fe().dofs_per_vertex, + ExcInvalidIndex (i, 0, dof_handler->get_fe().dofs_per_vertex)); return (mg_dof_handler->mg_vertex_dofs[vertex_index(vertex)] - .get_index (present_level, i, dof_handler->get_selected_fe().dofs_per_vertex)); + .get_index (present_level, i, dof_handler->get_fe().dofs_per_vertex)); }; @@ -89,13 +89,13 @@ void MGDoFLineAccessor::set_mg_vertex_dof_index (const unsigned i const int index) const { Assert (dof_handler != 0, ExcInvalidObject()); Assert (mg_dof_handler != 0, ExcInvalidObject()); - Assert (&dof_handler->get_selected_fe() != 0, ExcInvalidObject()); + Assert (&dof_handler->get_fe() != 0, ExcInvalidObject()); Assert (vertex<2, ExcInvalidIndex (i,0,2)); - Assert (iget_selected_fe().dofs_per_vertex, - ExcInvalidIndex (i, 0, dof_handler->get_selected_fe().dofs_per_vertex)); + Assert (iget_fe().dofs_per_vertex, + ExcInvalidIndex (i, 0, dof_handler->get_fe().dofs_per_vertex)); mg_dof_handler->mg_vertex_dofs[vertex_index(vertex)] - .set_index (present_level, i, dof_handler->get_selected_fe().dofs_per_vertex, index); + .set_index (present_level, i, dof_handler->get_fe().dofs_per_vertex, index); }; @@ -105,13 +105,13 @@ void MGDoFLineAccessor::get_mg_dof_indices (vector &dof_indices) const { Assert (dof_handler != 0, ExcInvalidObject()); Assert (mg_dof_handler != 0, ExcInvalidObject()); - Assert (&dof_handler->get_selected_fe() != 0, ExcInvalidObject()); - Assert (dof_indices.size() == (2*dof_handler->get_selected_fe().dofs_per_vertex + - dof_handler->get_selected_fe().dofs_per_line), + Assert (&dof_handler->get_fe() != 0, ExcInvalidObject()); + Assert (dof_indices.size() == (2*dof_handler->get_fe().dofs_per_vertex + + dof_handler->get_fe().dofs_per_line), ExcVectorDoesNotMatch()); - const unsigned int dofs_per_vertex = dof_handler->get_selected_fe().dofs_per_vertex, - dofs_per_line = dof_handler->get_selected_fe().dofs_per_line; + const unsigned int dofs_per_vertex = dof_handler->get_fe().dofs_per_vertex, + dofs_per_line = dof_handler->get_fe().dofs_per_line; vector::iterator next = dof_indices.begin(); for (unsigned int vertex=0; vertex<2; ++vertex) for (unsigned int d=0; d::mg_dof_index (const unsigned int i) const Assert (mg_dof_handler != 0, ExcInvalidObject()); // make sure a FE has been selected // and enough room was reserved - Assert (&dof_handler->get_selected_fe() != 0, ExcInvalidObject()); - Assert (iget_selected_fe().dofs_per_quad, - ExcInvalidIndex (i, 0, dof_handler->get_selected_fe().dofs_per_quad)); + Assert (&dof_handler->get_fe() != 0, ExcInvalidObject()); + Assert (iget_fe().dofs_per_quad, + ExcInvalidIndex (i, 0, dof_handler->get_fe().dofs_per_quad)); return mg_dof_handler->mg_levels[present_level] - ->quad_dofs[present_index*dof_handler->get_selected_fe().dofs_per_quad+i]; + ->quad_dofs[present_index*dof_handler->get_fe().dofs_per_quad+i]; }; @@ -185,12 +185,12 @@ void MGDoFQuadAccessor::set_mg_dof_index (const unsigned int i, Assert (mg_dof_handler != 0, ExcInvalidObject()); // make sure a FE has been selected // and enough room was reserved - Assert (&dof_handler->get_selected_fe() != 0, ExcInvalidObject()); - Assert (iget_selected_fe().dofs_per_quad, - ExcInvalidIndex (i, 0, dof_handler->get_selected_fe().dofs_per_quad)); + Assert (&dof_handler->get_fe() != 0, ExcInvalidObject()); + Assert (iget_fe().dofs_per_quad, + ExcInvalidIndex (i, 0, dof_handler->get_fe().dofs_per_quad)); mg_dof_handler->mg_levels[present_level] - ->quad_dofs[present_index*dof_handler->get_selected_fe().dofs_per_quad+i] = index; + ->quad_dofs[present_index*dof_handler->get_fe().dofs_per_quad+i] = index; }; @@ -201,13 +201,13 @@ int MGDoFQuadAccessor::mg_vertex_dof_index (const unsigned int ve const unsigned int i) const { Assert (dof_handler != 0, ExcInvalidObject()); Assert (mg_dof_handler != 0, ExcInvalidObject()); - Assert (&dof_handler->get_selected_fe() != 0, ExcInvalidObject()); + Assert (&dof_handler->get_fe() != 0, ExcInvalidObject()); Assert (vertex<4, ExcInvalidIndex (i,0,4)); - Assert (iget_selected_fe().dofs_per_vertex, - ExcInvalidIndex (i, 0, dof_handler->get_selected_fe().dofs_per_vertex)); + Assert (iget_fe().dofs_per_vertex, + ExcInvalidIndex (i, 0, dof_handler->get_fe().dofs_per_vertex)); return (mg_dof_handler->mg_vertex_dofs[vertex_index(vertex)] - .get_index (present_level, i, dof_handler->get_selected_fe().dofs_per_vertex)); + .get_index (present_level, i, dof_handler->get_fe().dofs_per_vertex)); }; @@ -218,13 +218,13 @@ void MGDoFQuadAccessor::set_mg_vertex_dof_index (const unsigned i const int index) const { Assert (dof_handler != 0, ExcInvalidObject()); Assert (mg_dof_handler != 0, ExcInvalidObject()); - Assert (&dof_handler->get_selected_fe() != 0, ExcInvalidObject()); + Assert (&dof_handler->get_fe() != 0, ExcInvalidObject()); Assert (vertex<4, ExcInvalidIndex (i,0,4)); - Assert (iget_selected_fe().dofs_per_vertex, - ExcInvalidIndex (i, 0, dof_handler->get_selected_fe().dofs_per_vertex)); + Assert (iget_fe().dofs_per_vertex, + ExcInvalidIndex (i, 0, dof_handler->get_fe().dofs_per_vertex)); mg_dof_handler->mg_vertex_dofs[vertex_index(vertex)] - .set_index (present_level, i, dof_handler->get_selected_fe().dofs_per_vertex, index); + .set_index (present_level, i, dof_handler->get_fe().dofs_per_vertex, index); }; @@ -234,15 +234,15 @@ void MGDoFQuadAccessor::get_mg_dof_indices (vector &dof_indices) const { Assert (dof_handler != 0, ExcInvalidObject()); Assert (mg_dof_handler != 0, ExcInvalidObject()); - Assert (&dof_handler->get_selected_fe() != 0, ExcInvalidObject()); - Assert (dof_indices.size() == (4*dof_handler->get_selected_fe().dofs_per_vertex + - 4*dof_handler->get_selected_fe().dofs_per_line + - dof_handler->get_selected_fe().dofs_per_quad), + Assert (&dof_handler->get_fe() != 0, ExcInvalidObject()); + Assert (dof_indices.size() == (4*dof_handler->get_fe().dofs_per_vertex + + 4*dof_handler->get_fe().dofs_per_line + + dof_handler->get_fe().dofs_per_quad), ExcVectorDoesNotMatch()); - const unsigned int dofs_per_vertex = dof_handler->get_selected_fe().dofs_per_vertex, - dofs_per_line = dof_handler->get_selected_fe().dofs_per_line, - dofs_per_quad = dof_handler->get_selected_fe().dofs_per_quad; + const unsigned int dofs_per_vertex = dof_handler->get_fe().dofs_per_vertex, + dofs_per_line = dof_handler->get_fe().dofs_per_line, + dofs_per_quad = dof_handler->get_fe().dofs_per_quad; vector::iterator next = dof_indices.begin(); for (unsigned int vertex=0; vertex<4; ++vertex) for (unsigned int d=0; d::get_mg_dof_values (const dVector &values, dVector &dof_values) const { Assert (dof_handler != 0, ExcInvalidObject()); Assert (mg_dof_handler != 0, ExcInvalidObject()); - Assert (&dof_handler->get_selected_fe() != 0, ExcInvalidObject()); - Assert (dof_values.size() == dof_handler->get_selected_fe().total_dofs, + Assert (&dof_handler->get_fe() != 0, ExcInvalidObject()); + Assert (dof_values.size() == dof_handler->get_fe().total_dofs, ExcVectorDoesNotMatch()); Assert (values.size() == dof_handler->n_dofs(), ExcVectorDoesNotMatch()); - const unsigned int dofs_per_vertex = dof_handler->get_selected_fe().dofs_per_vertex, - dofs_per_line = dof_handler->get_selected_fe().dofs_per_line; + const unsigned int dofs_per_vertex = dof_handler->get_fe().dofs_per_vertex, + dofs_per_line = dof_handler->get_fe().dofs_per_line; vector::iterator next_dof_value=dof_values.begin(); for (unsigned int vertex=0; vertex<2; ++vertex) for (unsigned int d=0; d::get_mg_dof_values (const dVector &values, dVector &dof_values) const { Assert (dof_handler != 0, ExcInvalidObject()); Assert (mg_dof_handler != 0, ExcInvalidObject()); - Assert (&dof_handler->get_selected_fe() != 0, ExcInvalidObject()); - Assert (dof_values.size() == dof_handler->get_selected_fe().total_dofs, + Assert (&dof_handler->get_fe() != 0, ExcInvalidObject()); + Assert (dof_values.size() == dof_handler->get_fe().total_dofs, ExcVectorDoesNotMatch()); Assert (values.size() == dof_handler->n_dofs(), ExcVectorDoesNotMatch()); - const unsigned int dofs_per_vertex = dof_handler->get_selected_fe().dofs_per_vertex, - dofs_per_line = dof_handler->get_selected_fe().dofs_per_line, - dofs_per_quad = dof_handler->get_selected_fe().dofs_per_quad; + const unsigned int dofs_per_vertex = dof_handler->get_fe().dofs_per_vertex, + dofs_per_line = dof_handler->get_fe().dofs_per_line, + dofs_per_quad = dof_handler->get_fe().dofs_per_quad; vector::iterator next_dof_value=dof_values.begin(); for (unsigned int vertex=0; vertex<4; ++vertex) for (unsigned int d=0; d::Assembler (Triangulation *tria, const int index, const AssemblerData *local_data) : DoFCellAccessor (tria,level,index, &local_data->dof), - cell_matrix (dof_handler->get_selected_fe().total_dofs), - cell_vector (dVector(dof_handler->get_selected_fe().total_dofs)), + cell_matrix (dof_handler->get_fe().total_dofs), + cell_vector (dVector(dof_handler->get_fe().total_dofs)), assemble_matrix (local_data->assemble_matrix), assemble_rhs (local_data->assemble_rhs), matrix(local_data->matrix), @@ -91,7 +91,7 @@ Assembler::Assembler (Triangulation *tria, ExcInvalidData()); Assert (!assemble_matrix || (matrix.n() == dof_handler->n_dofs()), ExcInvalidData()); - Assert (((AssemblerData*)local_data)->fe == dof_handler->get_selected_fe(), + Assert (((AssemblerData*)local_data)->fe == dof_handler->get_fe(), ExcInvalidData()); Assert (!assemble_rhs || (rhs_vector.size()==dof_handler->n_dofs()), ExcInvalidData()); @@ -107,7 +107,7 @@ void Assembler::assemble (const Equation &equation) { present_index, dof_handler), boundary); - const unsigned int n_dofs = dof_handler->get_selected_fe().total_dofs; + const unsigned int n_dofs = dof_handler->get_fe().total_dofs; if (assemble_matrix) cell_matrix.clear (); diff --git a/deal.II/deal.II/source/numerics/data_io.cc b/deal.II/deal.II/source/numerics/data_io.cc index d81cb74813..c364746854 100644 --- a/deal.II/deal.II/source/numerics/data_io.cc +++ b/deal.II/deal.II/source/numerics/data_io.cc @@ -224,7 +224,7 @@ void DataOut::clear_data_vectors () { template void DataOut::write_ucd (ostream &out) const { Assert (dofs != 0, ExcNoDoFHandlerSelected()); - Assert (dofs->get_selected_fe().dofs_per_vertex==1, + Assert (dofs->get_fe().dofs_per_vertex==1, ExcIncorrectDofsPerVertex()); Assert ((1<=dim) && (dim<=3), ExcNotImplemented()); @@ -463,7 +463,7 @@ void DataOut::write_gnuplot (ostream &out) const { Assert ((1<=dim) && (dim<=3), ExcNotImplemented()); if (dim==1) - Assert (dofs->get_selected_fe().dofs_per_vertex==1, + Assert (dofs->get_fe().dofs_per_vertex==1, ExcIncorrectDofsPerVertex()); // write preamble diff --git a/deal.II/deal.II/source/numerics/matrices.cc b/deal.II/deal.II/source/numerics/matrices.cc index 2089de405f..482ae8e962 100644 --- a/deal.II/deal.II/source/numerics/matrices.cc +++ b/deal.II/deal.II/source/numerics/matrices.cc @@ -139,7 +139,7 @@ void MatrixCreator::create_boundary_mass_matrix (const DoFHandler & Assert (matrix.n() == matrix.m(), ExcInternalError()); Assert (matrix.n() == rhs_vector.size(), ExcInternalError()); Assert (rhs.size() != 0, ExcInternalError()); - Assert (dof.get_selected_fe() == fe, ExcInternalError()); + Assert (dof.get_fe() == fe, ExcInternalError()); Assert (dof_to_boundary_mapping.size() == dof.n_dofs(), ExcInternalError()); Assert (*max_element(dof_to_boundary_mapping.begin(),dof_to_boundary_mapping.end()) == (signed int)matrix.n()-1, diff --git a/deal.II/deal.II/source/numerics/vectors.cc b/deal.II/deal.II/source/numerics/vectors.cc index 38f13f1a1e..d81c9e4c82 100644 --- a/deal.II/deal.II/source/numerics/vectors.cc +++ b/deal.II/deal.II/source/numerics/vectors.cc @@ -70,10 +70,19 @@ 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) +{ + +} #if deal_II_dimension == 1 -template <> + void VectorTools<1>::project (const DoFHandler<1> &, const ConstraintMatrix &, const FiniteElement<1> &, @@ -353,7 +362,7 @@ void VectorTools::integrate_difference (const DoFHandler &dof, const FiniteElement &fe, const NormType &norm, const Boundary &boundary) { - Assert (fe == dof.get_selected_fe(), ExcInvalidFE()); + Assert (fe == dof.get_fe(), ExcInvalidFE()); difference.reinit (dof.get_tria().n_active_cells()); -- 2.39.5