From 8e44a50bf14fb82e3573efcf8539b1dd55435e41 Mon Sep 17 00:00:00 2001 From: Wolfgang Bangerth Date: Thu, 20 Aug 2015 21:11:21 -0500 Subject: [PATCH] Make the type of normal vectors a Tensor. As discussed in #496, normal vectors are currently returned by FEValues as Point objects, but since they are differential vectors, the correct data type should be Tensor<1,dim>. This patch implements the solution discussed in #496 by * changing the return type of FEValues::normal_vector() * deprecating FEValues::get_normal_vectors() * introducing FEValues::get_all_normal_vectors() that returns a vector of tensors. The old get_normal_vectors() function was deprecated. In order to make it work, I also had to change the return type from a reference to a straight array. This array may be bound to a reference in many places in user codes, but the style we have used everywhere is to make these reference variables very localized in scope and so I don't foresee any problems. --- doc/news/changes.h | 17 ++++ examples/step-12/step-12.cc | 4 +- examples/step-30/step-30.cc | 6 +- examples/step-33/step-33.cc | 4 +- examples/step-34/step-34.cc | 12 +-- examples/step-51/step-51.cc | 2 +- include/deal.II/fe/fe_update_flags.h | 8 +- include/deal.II/fe/fe_values.h | 32 ++++++-- include/deal.II/fe/mapping_cartesian.h | 2 +- include/deal.II/integrators/elasticity.h | 82 +++++++++---------- include/deal.II/integrators/laplace.h | 48 +++++------ include/deal.II/integrators/maxwell.h | 6 +- .../matrix_free/mapping_data_on_the_fly.h | 2 +- .../deal.II/numerics/vector_tools.templates.h | 35 ++++---- source/fe/fe_values.cc | 22 ++++- source/fe/mapping_cartesian.cc | 4 +- source/numerics/data_out_faces.cc | 7 +- source/numerics/error_estimator.cc | 4 +- source/numerics/matrix_tools.cc | 4 +- tests/aniso/mesh_3d_21.cc | 2 +- tests/bits/rt_2.cc | 6 +- tests/bits/step-12.cc | 8 +- tests/bits/step-51.cc | 2 +- tests/bits/step-51p.cc | 2 +- tests/codim_one/bem.cc | 10 +-- tests/codim_one/bem_integration.cc | 8 +- tests/codim_one/gradients.cc | 4 +- tests/codim_one/surface.cc | 2 +- tests/deal.II/nedelec_non_rect_face.cc | 2 +- tests/deal.II/project_boundary_rt_01.cc | 4 +- tests/fe/fe_q_dg0.cc | 10 +-- tests/fe/mapping.cc | 6 +- tests/fe/mapping_c1.cc | 2 +- tests/fe/rt_normal_02.cc | 12 +-- tests/grid/mesh_3d_6.cc | 4 +- tests/hp/step-12.cc | 8 +- 36 files changed, 223 insertions(+), 170 deletions(-) diff --git a/doc/news/changes.h b/doc/news/changes.h index dc04d369f4..86dd14786f 100644 --- a/doc/news/changes.h +++ b/doc/news/changes.h @@ -38,6 +38,23 @@ inconvenience this causes.

    + +
  1. Changed: FEValues::normal_vector() for historical reasons returned a + value of type Point, though a normal vector is more adequately described + as a Tensor@<1,dim@>. Many similar cases were already clarified in deal.II + 8.3. The current case has now also been changed: FEValues::normal_vector() + now returns a Tensor, rather than a Point. +
    + In a similar spirit, the FEValues::get_normal_vectors() function that + still returns a vector of Points has been deprecated and a new function, + FEValues::get_all_normal_vectors(), that returns a vector of tensors, + has been added. This was necessary since there is no way to change the + return type of the existing function in a backward compatible way. The + old function will be removed in the next version, and the new function + will then be renamed to the old name. +
    + (Wolfgang Bangerth, 2015/08/20) +
  2. Changed: The mesh_converter program has been removed from the contrib folder. The equivalent functionality can now be found in diff --git a/examples/step-12/step-12.cc b/examples/step-12/step-12.cc index fa1342b191..bc39ef2c0e 100644 --- a/examples/step-12/step-12.cc +++ b/examples/step-12/step-12.cc @@ -357,7 +357,7 @@ namespace Step12 Vector &local_vector = dinfo.vector(0).block(0); const std::vector &JxW = fe_v.get_JxW_values (); - const std::vector > &normals = fe_v.get_normal_vectors (); + const std::vector > &normals = fe_v.get_all_normal_vectors (); std::vector g(fe_v.n_quadrature_points); @@ -421,7 +421,7 @@ namespace Step12 // solution and the right hand side does not receive any contributions. const std::vector &JxW = fe_v.get_JxW_values (); - const std::vector > &normals = fe_v.get_normal_vectors (); + const std::vector > &normals = fe_v.get_all_normal_vectors (); for (unsigned int point=0; point &cell_vector) const { const std::vector &JxW = fe_v.get_JxW_values (); - const std::vector > &normals = fe_v.get_normal_vectors (); + const std::vector > &normals = fe_v.get_all_normal_vectors (); std::vector > beta (fe_v.n_quadrature_points); std::vector g(fe_v.n_quadrature_points); @@ -272,7 +272,7 @@ namespace Step30 FullMatrix &ue_ve_matrix) const { const std::vector &JxW = fe_v.get_JxW_values (); - const std::vector > &normals = fe_v.get_normal_vectors (); + const std::vector > &normals = fe_v.get_all_normal_vectors (); std::vector > beta (fe_v.n_quadrature_points); diff --git a/examples/step-33/step-33.cc b/examples/step-33/step-33.cc index a807803b7e..821943bf9f 100644 --- a/examples/step-33/step-33.cc +++ b/examples/step-33/step-33.cc @@ -260,7 +260,7 @@ namespace Step33 // $\alpha$. It's form has also been given already in the introduction: template static - void numerical_normal_flux (const Point &normal, + void numerical_normal_flux (const Tensor<1,dim> &normal, const InputVector &Wplus, const InputVector &Wminus, const double alpha, @@ -374,7 +374,7 @@ namespace Step33 static void compute_Wminus (const BoundaryKind (&boundary_kind)[n_components], - const Point &normal_vector, + const Tensor<1,dim> &normal_vector, const DataVector &Wplus, const Vector &boundary_values, const DataVector &Wminus) diff --git a/examples/step-34/step-34.cc b/examples/step-34/step-34.cc index 2d94b432f6..dd54cbb4d7 100644 --- a/examples/step-34/step-34.cc +++ b/examples/step-34/step-34.cc @@ -601,8 +601,8 @@ namespace Step34 fe_v.reinit(cell); cell->get_dof_indices(local_dof_indices); - const std::vector > &q_points = fe_v.get_quadrature_points(); - const std::vector > &normals = fe_v.get_normal_vectors(); + const std::vector > &q_points = fe_v.get_quadrature_points(); + const std::vector > &normals = fe_v.get_all_normal_vectors(); wind.vector_value_list(q_points, cell_wind); // We then form the integral over the current cell for all degrees of @@ -687,8 +687,8 @@ namespace Step34 std::vector > singular_cell_wind( singular_quadrature.size(), Vector(dim) ); - const std::vector > &singular_normals = fe_v_singular.get_normal_vectors(); - const std::vector > &singular_q_points = fe_v_singular.get_quadrature_points(); + const std::vector > &singular_normals = fe_v_singular.get_all_normal_vectors(); + const std::vector > &singular_q_points = fe_v_singular.get_quadrature_points(); wind.vector_value_list(singular_q_points, singular_cell_wind); @@ -957,8 +957,8 @@ namespace Step34 { fe_v.reinit(cell); - const std::vector > &q_points = fe_v.get_quadrature_points(); - const std::vector > &normals = fe_v.get_normal_vectors(); + const std::vector > &q_points = fe_v.get_quadrature_points(); + const std::vector > &normals = fe_v.get_all_normal_vectors(); cell->get_dof_indices(dofs); fe_v.get_function_values(phi, local_phi); diff --git a/examples/step-51/step-51.cc b/examples/step-51/step-51.cc index 8826af2918..eda88d2dce 100644 --- a/examples/step-51/step-51.cc +++ b/examples/step-51/step-51.cc @@ -810,7 +810,7 @@ namespace Step51 const double JxW = scratch.fe_face_values.JxW(q); const Point quadrature_point = scratch.fe_face_values.quadrature_point(q); - const Point normal = scratch.fe_face_values.normal_vector(q); + const Tensor<1,dim> normal = scratch.fe_face_values.normal_vector(q); const Tensor<1,dim> convection = scratch.convection_velocity.value(quadrature_point); diff --git a/include/deal.II/fe/fe_update_flags.h b/include/deal.II/fe/fe_update_flags.h index e9a7f56d90..4c40e6dd10 100644 --- a/include/deal.II/fe/fe_update_flags.h +++ b/include/deal.II/fe/fe_update_flags.h @@ -411,14 +411,12 @@ namespace internal std::vector > quadrature_points; /** - * List of outward normal vectors at the quadrature points. This field is - * filled in by the finite element class. + * List of outward normal vectors at the quadrature points. */ - std::vector > normal_vectors; + std::vector > normal_vectors; /** - * List of boundary forms at the quadrature points. This field is filled in - * by the finite element class. + * List of boundary forms at the quadrature points. */ std::vector > boundary_forms; }; diff --git a/include/deal.II/fe/fe_values.h b/include/deal.II/fe/fe_values.h index d49fa36763..c73190e914 100644 --- a/include/deal.II/fe/fe_values.h +++ b/include/deal.II/fe/fe_values.h @@ -2078,14 +2078,16 @@ public: * For a face, return the outward normal vector to the cell at the * ith quadrature point. * - * For a cell of codimension one, return the normal vector, as it is - * specified by the numbering of the vertices. + * For a cell of codimension one, return the normal vector. There + * are of course two normal directions to a manifold in that case, + * and this function returns the "up" direction as induced by the + * numbering of the vertices. * * The length of the vector is normalized to one. * * @dealiiRequiresUpdateFlags{update_normal_vectors} */ - const Point &normal_vector (const unsigned int i) const; + const Tensor<1,spacedim> &normal_vector (const unsigned int i) const; /** * Return the normal vectors at the quadrature points. For a face, these are @@ -2093,8 +2095,28 @@ public: * the orientation is given by the numbering of vertices. * * @dealiiRequiresUpdateFlags{update_normal_vectors} + * + * @note This function should really be named get_normal_vectors(), + * but this function already exists with a different return type + * that returns a vector of Point objects, rather than a vector of + * Tensor objects. This is a historical accident, but can not + * be fixed in a backward compatible style. That said, the + * get_normal_vectors() function is now deprecated, will be removed + * in the next version, and the current function will then be renamed. */ - const std::vector > &get_normal_vectors () const; + const std::vector > &get_all_normal_vectors () const; + + /** + * Return the normal vectors at the quadrature points as a vector of + * Point objects. This function is deprecated because normal vectors + * are correctly represented by rank-1 Tensor objects, not Point objects. + * Use get_all_normal_vectors() instead. + * + * @dealiiRequiresUpdateFlags{update_normal_vectors} + * + * @deprecated + */ + std::vector > get_normal_vectors () const DEAL_II_DEPRECATED; /** * Transform a set of vectors, one for each quadrature point. The @@ -3989,7 +4011,7 @@ FEValuesBase::inverse_jacobian (const unsigned int i) const template inline -const Point & +const Tensor<1,spacedim> & FEValuesBase::normal_vector (const unsigned int i) const { typedef FEValuesBase FVB; diff --git a/include/deal.II/fe/mapping_cartesian.h b/include/deal.II/fe/mapping_cartesian.h index 01424fee79..f830b9e001 100644 --- a/include/deal.II/fe/mapping_cartesian.h +++ b/include/deal.II/fe/mapping_cartesian.h @@ -246,7 +246,7 @@ private: const CellSimilarity::Similarity cell_similarity, const InternalData &data, std::vector > &quadrature_points, - std::vector > &normal_vectors) const; + std::vector > &normal_vectors) const; /** * Value to indicate that a given face or subface number is invalid. diff --git a/include/deal.II/integrators/elasticity.h b/include/deal.II/integrators/elasticity.h index 40007170a2..db3ce2d200 100644 --- a/include/deal.II/integrators/elasticity.h +++ b/include/deal.II/integrators/elasticity.h @@ -127,7 +127,7 @@ namespace LocalIntegrators for (unsigned int k=0; k &n = fe.normal_vector(k); + const Tensor<1,dim> n = fe.normal_vector(k); for (unsigned int i=0; i &n = fe.normal_vector(k); + const Tensor<1,dim> n = fe.normal_vector(k); for (unsigned int i=0; i &n = fe.normal_vector(k); + const Tensor<1,dim> n = fe.normal_vector(k); for (unsigned int i=0; i &n = fe1.normal_vector(k); + const Tensor<1,dim> n = fe1.normal_vector(k); for (unsigned int i=0; i &n = fe1.normal_vector(k); + const Tensor<1,dim> n = fe1.normal_vector(k); for (unsigned int i=0; i &n = fe.normal_vector(k); + const Tensor<1,dim> n = fe.normal_vector(k); for (unsigned int i=0; i &n = fe.normal_vector(k); + const Tensor<1,dim> n = fe.normal_vector(k); for (unsigned int i=0; i &n = fe.normal_vector(k); + const Tensor<1,dim> n = fe.normal_vector(k); for (unsigned int i=0; i &n = fe1.normal_vector(k); + const Tensor<1,dim> n = fe1.normal_vector(k); for (unsigned int d=0; d &n = fe1.normal_vector(k); + const Tensor<1,dim> n = fe1.normal_vector(k); for (unsigned int i=0; i &n = fe1.normal_vector(k); + const Tensor<1,dim> n = fe1.normal_vector(k); for (unsigned int i=0; i &n = fe1.normal_vector(k); + const Tensor<1,dim> n = fe1.normal_vector(k); for (unsigned int i=0; i &n = fe.normal_vector(k); + const Tensor<1,dim> n = fe.normal_vector(k); for (unsigned int i=0; i &n = fe.normal_vector(k); + const Tensor<1,dim> n = fe.normal_vector(k); for (unsigned int i=0; i &n = fe1.normal_vector(k); + const Tensor<1,dim> n = fe1.normal_vector(k); for (unsigned int i=0; i normal_at_q_point = fe_face_values.normal_vector(q_point); + Tensor<1,dim> normal_at_q_point = fe_face_values.normal_vector(q_point); for (unsigned int j = 0; j < associated_edge_dofs; ++j) { const unsigned int j_face_idx = associated_edge_dof_to_face_dof[j]; @@ -4226,15 +4226,15 @@ namespace VectorTools // Using n cross phi edge_matrix(i,j) += fe_face_values.JxW (q_point) - * ((phi_i[1]*normal_at_q_point(0) - phi_i[0]*normal_at_q_point(1)) - * (phi_j[1]*normal_at_q_point(0) - phi_j[0]*normal_at_q_point(1))); + * ((phi_i[1]*normal_at_q_point[0] - phi_i[0]*normal_at_q_point[1]) + * (phi_j[1]*normal_at_q_point[0] - phi_j[0]*normal_at_q_point[1])); } // Using n cross phi edge_rhs(j) += fe_face_values.JxW (q_point) - * ((values[q_point] (first_vector_component+1) * normal_at_q_point (0) - - values[q_point] (first_vector_component) * normal_at_q_point (1)) - * (phi_j[1]*normal_at_q_point(0) - phi_j[0]*normal_at_q_point(1))); + * ((values[q_point] (first_vector_component+1) * normal_at_q_point[0] + - values[q_point] (first_vector_component) * normal_at_q_point[1]) + * (phi_j[1]*normal_at_q_point[0] - phi_j[0]*normal_at_q_point[1])); } } @@ -4343,14 +4343,10 @@ namespace VectorTools // associated with this face. We also must include the residuals from the // shape funcations associated with edges. Tensor<1, dim> tmp; - Tensor<1, dim> normal_vector, - cross_product_i, + Tensor<1, dim> cross_product_i, cross_product_j, cross_product_rhs; - // Store all normal vectors at quad points: - std::vector > normal_vector_list(fe_face_values.get_normal_vectors()); - // Loop to construct face linear system. for (unsigned int q_point = 0; q_point < fe_face_values.n_quadrature_points; ++q_point) @@ -4383,10 +4379,8 @@ namespace VectorTools } // Tensor of normal vector on the face at q_point; - for (unsigned int d = 0; d < dim; ++d) - { - normal_vector[d] = normal_vector_list[q_point](d); - } + const Tensor<1,dim> normal_vector = fe_face_values.normal_vector(q_point); + // Now compute the linear system: // On a face: // The matrix entries are: @@ -4756,7 +4750,7 @@ namespace VectorTools // functions supported on the boundary. const FEValuesExtractors::Vector vec (first_vector_component); const FiniteElement<2> &fe = cell->get_fe (); - const std::vector > &normals = fe_values.get_normal_vectors (); + const std::vector > &normals = fe_values.get_all_normal_vectors (); const unsigned int face_coordinate_direction[GeometryInfo<2>::faces_per_cell] = {1, 1, 0, 0}; std::vector > @@ -4837,7 +4831,7 @@ namespace VectorTools // functions supported on the boundary. const FEValuesExtractors::Vector vec (first_vector_component); const FiniteElement<3> &fe = cell->get_fe (); - const std::vector > &normals = fe_values.get_normal_vectors (); + const std::vector > &normals = fe_values.get_all_normal_vectors (); const unsigned int face_coordinate_directions[GeometryInfo<3>::faces_per_cell][2] = {{1, 2}, {1, 2}, @@ -5410,7 +5404,7 @@ namespace VectorTools = (cell->face(face_no)->get_boundary().normal_vector (cell->face(face_no), fe_values.quadrature_point(i))); - if (normal_vector * static_cast >(fe_values.normal_vector(i)) < 0) + if (normal_vector * fe_values.normal_vector(i) < 0) normal_vector *= -1; Assert (std::fabs(normal_vector.norm() - 1) < 1e-14, ExcInternalError()); @@ -6211,9 +6205,8 @@ namespace VectorTools { // compute (f.n) n const Number f_dot_n - = (data.psi_grads[q][k] * Tensor<1,spacedim,Number>(fe_values.normal_vector(q))); - const Tensor<1,spacedim,Number> f_dot_n_times_n - = f_dot_n * Tensor<1,spacedim,Number>(fe_values.normal_vector(q)); + = (data.psi_grads[q][k] * fe_values.normal_vector(q)); + const Tensor<1,spacedim,Number> f_dot_n_times_n (f_dot_n * fe_values.normal_vector(q)); data.psi_grads[q][k] -= (data.function_grads[q][k] + f_dot_n_times_n); } diff --git a/source/fe/fe_values.cc b/source/fe/fe_values.cc index bb75e3bc55..7003914a6d 100644 --- a/source/fe/fe_values.cc +++ b/source/fe/fe_values.cc @@ -3148,8 +3148,8 @@ FEValuesBase::get_cell () const template -const std::vector > & -FEValuesBase::get_normal_vectors () const +const std::vector > & +FEValuesBase::get_all_normal_vectors () const { typedef FEValuesBase FEVB; Assert (this->update_flags & update_normal_vectors, @@ -3159,6 +3159,24 @@ FEValuesBase::get_normal_vectors () const +template +std::vector > +FEValuesBase::get_normal_vectors () const +{ + typedef FEValuesBase FEVB; + Assert (this->update_flags & update_normal_vectors, + typename FEVB::ExcAccessToUninitializedField("update_normal_vectors")); + + // copy things into a vector of Points, then return that + std::vector > tmp (this->normal_vectors.size()); + for (unsigned int q=0; qnormal_vectors.size(); ++q) + tmp[q] = Point(this->normal_vectors[q]); + + return tmp; +} + + + template void FEValuesBase::transform ( diff --git a/source/fe/mapping_cartesian.cc b/source/fe/mapping_cartesian.cc index 6b192da404..9a366a9c84 100644 --- a/source/fe/mapping_cartesian.cc +++ b/source/fe/mapping_cartesian.cc @@ -154,7 +154,7 @@ MappingCartesian::compute_fill (const typename Triangulation > &quadrature_points, - std::vector > &normal_vectors) const + std::vector > &normal_vectors) const { const UpdateFlags update_flags = data.update_each; @@ -346,7 +346,7 @@ fill_fe_values (const typename Triangulation::cell_iterator &cell, Assert (dynamic_cast (&internal_data) != 0, ExcInternalError()); const InternalData &data = static_cast (internal_data); - std::vector > dummy; + std::vector > dummy; compute_fill (cell, invalid_face_number, invalid_face_number, cell_similarity, data, diff --git a/source/numerics/data_out_faces.cc b/source/numerics/data_out_faces.cc index 0768241e7c..c67af1892b 100644 --- a/source/numerics/data_out_faces.cc +++ b/source/numerics/data_out_faces.cc @@ -153,7 +153,12 @@ build_one_patch (const FaceDescriptor *cell_and_face, // thus does not depend on the number of components of the data // vector if (update_flags & update_normal_vectors) - data.patch_normals=this_fe_patch_values.get_normal_vectors(); + { +//TODO: undo this copying when we can change the data type of +// data.patch_normals to Tensor<1,spacedim> as well + for (unsigned int q=0; q(this_fe_patch_values.get_all_normal_vectors()[q]); + } if (n_components == 1) { diff --git a/source/numerics/error_estimator.cc b/source/numerics/error_estimator.cc index 6278501fe5..93383b29cd 100644 --- a/source/numerics/error_estimator.cc +++ b/source/numerics/error_estimator.cc @@ -149,7 +149,7 @@ namespace internal /** * The normal vectors of the finite element function on one face */ - std::vector > normal_vectors; + std::vector > normal_vectors; /** * Two arrays needed for the values of coefficients in the jumps, if @@ -364,7 +364,7 @@ namespace internal // change the sign. We take the outward normal. parallel_data.normal_vectors = - fe_face_values_cell.get_present_fe_values().get_normal_vectors(); + fe_face_values_cell.get_present_fe_values().get_all_normal_vectors(); for (unsigned int n=0; n::H1) && base.conforms(FiniteElementData::Hdiv)) for (unsigned int point=0; point &tria) fe_face_values2.JxW(q)) < 1e-14, ExcInternalError()); AssertThrow ((fe_face_values1.normal_vector(q) + - fe_face_values2.normal_vector(q)).square() + fe_face_values2.normal_vector(q)).norm_square() < 1e-20, ExcInternalError()); } diff --git a/tests/bits/rt_2.cc b/tests/bits/rt_2.cc index f095367ee7..235930421c 100644 --- a/tests/bits/rt_2.cc +++ b/tests/bits/rt_2.cc @@ -107,9 +107,9 @@ void evaluate_normal (DoFHandler<2> &dof_handler, for (unsigned int q_point=0; q_point vn = fe_v_face.normal_vector (q_point); - double nx = vn(0); - double ny = vn(1); + Tensor<1,2> vn = fe_v_face.normal_vector (q_point); + double nx = vn[0]; + double ny = vn[1]; double u = this_value[q_point](0); double v = this_value[q_point](1); diff --git a/tests/bits/step-12.cc b/tests/bits/step-12.cc index c7d9e4d012..e889852c6c 100644 --- a/tests/bits/step-12.cc +++ b/tests/bits/step-12.cc @@ -1,6 +1,6 @@ // --------------------------------------------------------------------- // -// Copyright (C) 2005 - 2014 by the deal.II authors +// Copyright (C) 2005 - 2015 by the deal.II authors // // This file is part of the deal.II library. // @@ -205,7 +205,7 @@ void DGTransportEquation::assemble_boundary_term( Vector &cell_vector) const { const std::vector &JxW = fe_v.get_JxW_values (); - const std::vector > &normals = fe_v.get_normal_vectors (); + const std::vector > &normals = fe_v.get_all_normal_vectors (); std::vector > beta (fe_v.n_quadrature_points); std::vector g(fe_v.n_quadrature_points); @@ -241,7 +241,7 @@ void DGTransportEquation::assemble_face_term1( FullMatrix &ue_vi_matrix) const { const std::vector &JxW = fe_v.get_JxW_values (); - const std::vector > &normals = fe_v.get_normal_vectors (); + const std::vector > &normals = fe_v.get_all_normal_vectors (); std::vector > beta (fe_v.n_quadrature_points); beta_function.value_list (fe_v.get_quadrature_points(), beta); @@ -277,7 +277,7 @@ void DGTransportEquation::assemble_face_term2( FullMatrix &ue_ve_matrix) const { const std::vector &JxW = fe_v.get_JxW_values (); - const std::vector > &normals = fe_v.get_normal_vectors (); + const std::vector > &normals = fe_v.get_all_normal_vectors (); std::vector > beta (fe_v.n_quadrature_points); diff --git a/tests/bits/step-51.cc b/tests/bits/step-51.cc index 2ae285dd65..250b215223 100644 --- a/tests/bits/step-51.cc +++ b/tests/bits/step-51.cc @@ -638,7 +638,7 @@ namespace Step51 const double JxW = scratch.fe_face_values.JxW(q); const Point quadrature_point = scratch.fe_face_values.quadrature_point(q); - const Point normal = scratch.fe_face_values.normal_vector(q); + const Tensor<1,dim> normal = scratch.fe_face_values.normal_vector(q); const Tensor<1,dim> convection = scratch.convection_velocity.value(quadrature_point); diff --git a/tests/bits/step-51p.cc b/tests/bits/step-51p.cc index 11b39616ac..27b368443b 100644 --- a/tests/bits/step-51p.cc +++ b/tests/bits/step-51p.cc @@ -638,7 +638,7 @@ namespace Step51 const double JxW = scratch.fe_face_values.JxW(q); const Point quadrature_point = scratch.fe_face_values.quadrature_point(q); - const Point normal = scratch.fe_face_values.normal_vector(q); + const Tensor<1,dim> normal = scratch.fe_face_values.normal_vector(q); const Tensor<1,dim> convection = scratch.convection_velocity.value(quadrature_point); diff --git a/tests/codim_one/bem.cc b/tests/codim_one/bem.cc index e8e1d6b0da..7b28ad6d92 100644 --- a/tests/codim_one/bem.cc +++ b/tests/codim_one/bem.cc @@ -266,7 +266,7 @@ BEM::assemble_system() FullMatrix cell_DLP_matrix (dofs_per_cell, dofs_per_cell); Vector cell_rhs (dofs_per_cell); - std::vector< Point > cell_normals_i, cell_normals_j; + std::vector< Tensor<1,spacedim> > cell_normals_i, cell_normals_j; std::vector local_dof_indices_i (dofs_per_cell); std::vector local_dof_indices_j (dofs_per_cell); @@ -289,7 +289,7 @@ BEM::assemble_system() { fe_values_i.reinit (cell_i); - cell_normals_i = fe_values_i.get_normal_vectors(); + cell_normals_i = fe_values_i.get_all_normal_vectors(); cell_i->get_dof_indices (local_dof_indices_i); // if (cell_i->index()%100==0) @@ -353,7 +353,7 @@ BEM::assemble_system() for (cell_j=dof_handler.begin_active(); cell_j!=endc; ++cell_j) { fe_values_j.reinit (cell_j); - cell_normals_j = fe_values_j.get_normal_vectors(); + cell_normals_j = fe_values_j.get_all_normal_vectors(); cell_j->get_dof_indices (local_dof_indices_j); if (cell_j != cell_i) @@ -570,7 +570,7 @@ BEM::solve() update_gradients | update_normal_vectors ); - std::vector< Point > cell_normals(q_iterated.size()); + std::vector< Tensor<1,spacedim> > cell_normals(q_iterated.size()); std::vector< Point > cell_tangentials(q_iterated.size()); std::vector local_dof_indices (fe_q.dofs_per_cell); @@ -596,7 +596,7 @@ BEM::solve() // std::cout< &r, const Tensor<1,3> &a1, const Tensor<1,3> &a2, - const Point<3> &n, + const Tensor<1,3> &n, const double &rn_c); double term_D(const Tensor<1,3> &r, @@ -123,9 +123,9 @@ LaplaceKernelIntegration<2>::compute_SD_integral_on_cell(vector &dst, ExcDimensionMismatch(dst.size(), 2)); fe_values->reinit(cell); vector > jacobians = fe_values->get_jacobians(); - vector > normals = fe_values->get_normal_vectors(); + vector > normals = fe_values->get_all_normal_vectors(); - Point<3> n,n_c; + Tensor<1,3> n,n_c; Tensor<1,3> r_c = point-cell->center(); n_c = normals[4]; @@ -151,7 +151,7 @@ double LaplaceKernelIntegration::term_S (const Tensor<1,3> &r, const Tensor<1,3> &a1, const Tensor<1,3> &a2, - const Point<3> &n, + const Tensor<1,3> &n, const double &rn_c) { Point<3> ra1, ra2, a12; diff --git a/tests/codim_one/gradients.cc b/tests/codim_one/gradients.cc index 1f3e330adb..45b51788e6 100644 --- a/tests/codim_one/gradients.cc +++ b/tests/codim_one/gradients.cc @@ -124,7 +124,7 @@ void test(std::string filename) FullMatrix cell_matrix (dofs_per_cell, dofs_per_cell); - std::vector< Point > cell_normals(q_midpoint.size()); + std::vector< Tensor<1,spacedim> > cell_normals(q_midpoint.size()); std::vector< Point > cell_tangentials(q_midpoint.size()); std::vector shape_directional_derivative(dofs_per_cell); Vector projected_directional_derivative(triangulation.n_cells()); @@ -140,7 +140,7 @@ void test(std::string filename) fe_values.reinit(cell); cell-> get_dof_indices (local_dof_indices); - cell_normals = fe_values.get_normal_vectors(); + cell_normals = fe_values.get_all_normal_vectors(); // The cell tangential is calculated // in the midpoint of the cell. For diff --git a/tests/codim_one/surface.cc b/tests/codim_one/surface.cc index e8e211069e..8544b17589 100644 --- a/tests/codim_one/surface.cc +++ b/tests/codim_one/surface.cc @@ -76,7 +76,7 @@ void test(std::string filename) for (; cell!=endc; ++cell) { fe_values.reinit (cell); - const std::vector > &cellnormals = fe_values.get_normal_vectors(); + const std::vector > &cellnormals = fe_values.get_all_normal_vectors(); const std::vector > &quad_points = fe_values.get_quadrature_points(); for (unsigned int i=0; i > neumann_value_list(n_face_q_points, Vector(fe.n_components())); - std::vector > normal_vector_list(fe_face_values.get_normal_vectors()); + std::vector > normal_vector_list(fe_face_values.get_all_normal_vectors()); Tensor<1,dim> neumann_value_vector(dim); Tensor<1,dim> neumann_value(dim); Tensor<1,dim> normal_vector; diff --git a/tests/deal.II/project_boundary_rt_01.cc b/tests/deal.II/project_boundary_rt_01.cc index 37d05c837d..ab4ba2cd70 100644 --- a/tests/deal.II/project_boundary_rt_01.cc +++ b/tests/deal.II/project_boundary_rt_01.cc @@ -1,6 +1,6 @@ // --------------------------------------------------------------------- // -// Copyright (C) 2007 - 2014 by the deal.II authors +// Copyright (C) 2007 - 2015 by the deal.II authors // // This file is part of the deal.II library. // @@ -111,7 +111,7 @@ double integrate_error(const DoFHandler &dof, { double diff = 0.; for (unsigned int d=0; d(1) {} double jump (const Point< dim> &p, - const Point &normal) const; + const Tensor<1,dim> &normal) const; }; template double JumpFunction::jump (const Point &p, - const Point &normal) const + const Tensor<1,dim> &normal) const { double x = p[0]; double y = p[1]; @@ -596,8 +596,8 @@ namespace Step22 { fe_v_face.reinit (cell, face_no); - const std::vector > &normals = - fe_v_face.get_normal_vectors (); + const std::vector > &normals = + fe_v_face.get_all_normal_vectors (); const std::vector > &quad_points= fe_v_face.get_quadrature_points(); diff --git a/tests/fe/mapping.cc b/tests/fe/mapping.cc index 6f7d72bae1..cd4ebc860e 100644 --- a/tests/fe/mapping.cc +++ b/tests/fe/mapping.cc @@ -110,7 +110,7 @@ plot_faces(Mapping &mapping, for (unsigned int nx=0; nx x = fe_values.quadrature_point(k); - const Point &n = fe_values.normal_vector(k); + const Tensor<1,dim> n = fe_values.normal_vector(k); const double ds = fe_values.JxW(k); deallog << x << '\t' << n << '\t' << ds << std::endl; @@ -149,8 +149,8 @@ plot_subfaces(Mapping &mapping, { fe_values.reinit(cell, face_nr, sub_nr); - const std::vector > &normals - =fe_values.get_normal_vectors(); + const std::vector > &normals + =fe_values.get_all_normal_vectors(); unsigned int k=0; for (unsigned int ny=0; ny<((dim>2) ? nq : 1); ++ny) diff --git a/tests/fe/mapping_c1.cc b/tests/fe/mapping_c1.cc index 697f0912aa..cc6f45fea2 100644 --- a/tests/fe/mapping_c1.cc +++ b/tests/fe/mapping_c1.cc @@ -96,7 +96,7 @@ int main () // there should now be two // normal vectors, one for // each vertex of the face - Assert (c1_values.get_normal_vectors().size() == 2, + Assert (c1_values.get_all_normal_vectors().size() == 2, ExcInternalError()); // check that these two diff --git a/tests/fe/rt_normal_02.cc b/tests/fe/rt_normal_02.cc index 58b57eb7a3..3defae43bf 100644 --- a/tests/fe/rt_normal_02.cc +++ b/tests/fe/rt_normal_02.cc @@ -141,9 +141,9 @@ void EvaluateNormal2 (DoFHandler<2> *dof_handler, for (unsigned int q_point=0; q_point vn = fe_v_face.normal_vector (q_point); - double nx = vn(0); - double ny = vn(1); + Tensor<1,2> vn = fe_v_face.normal_vector (q_point); + double nx = vn[0]; + double ny = vn[1]; double u = this_value[q_point + offset](0); double v = this_value[q_point + offset](1); @@ -230,9 +230,9 @@ void EvaluateNormal (DoFHandler<2> *dof_handler, for (unsigned int q_point=0; q_point vn = fe_v_face.normal_vector (q_point); - double nx = vn(0); - double ny = vn(1); + Tensor<1,2> vn = fe_v_face.normal_vector (q_point); + double nx = vn[0]; + double ny = vn[1]; double u = this_value[q_point](0); double v = this_value[q_point](1); diff --git a/tests/grid/mesh_3d_6.cc b/tests/grid/mesh_3d_6.cc index cce1d791bf..96ae7f4f83 100644 --- a/tests/grid/mesh_3d_6.cc +++ b/tests/grid/mesh_3d_6.cc @@ -1,6 +1,6 @@ // --------------------------------------------------------------------- // -// Copyright (C) 2003 - 2014 by the deal.II authors +// Copyright (C) 2003 - 2015 by the deal.II authors // // This file is part of the deal.II library. // @@ -80,7 +80,7 @@ void check_this (Triangulation<3> &tria) // so their sum should be // close to zero Assert ((fe_face_values1.normal_vector(0) + - fe_face_values2.normal_vector(0)).square() + fe_face_values2.normal_vector(0)).norm_square() < 1e-20, ExcInternalError()); } diff --git a/tests/hp/step-12.cc b/tests/hp/step-12.cc index abce655f73..633d86818c 100644 --- a/tests/hp/step-12.cc +++ b/tests/hp/step-12.cc @@ -1,6 +1,6 @@ // --------------------------------------------------------------------- // -// Copyright (C) 2005 - 2014 by the deal.II authors +// Copyright (C) 2005 - 2015 by the deal.II authors // // This file is part of the deal.II library. // @@ -207,7 +207,7 @@ void DGTransportEquation::assemble_boundary_term( Vector &cell_vector) const { const std::vector &JxW = fe_v.get_present_fe_values().get_JxW_values (); - const std::vector > &normals = fe_v.get_present_fe_values().get_normal_vectors (); + const std::vector > &normals = fe_v.get_present_fe_values().get_all_normal_vectors (); std::vector > beta (fe_v.get_present_fe_values().n_quadrature_points); std::vector g(fe_v.get_present_fe_values().n_quadrature_points); @@ -244,7 +244,7 @@ void DGTransportEquation::assemble_face_term1( FullMatrix &ue_vi_matrix) const { const std::vector &JxW = fe_v.get_present_fe_values().get_JxW_values (); - const std::vector > &normals = fe_v.get_present_fe_values().get_normal_vectors (); + const std::vector > &normals = fe_v.get_present_fe_values().get_all_normal_vectors (); std::vector > beta (fe_v.get_present_fe_values().n_quadrature_points); beta_function.value_list (fe_v.get_present_fe_values().get_quadrature_points(), beta); @@ -281,7 +281,7 @@ void DGTransportEquation::assemble_face_term2( FullMatrix &ue_ve_matrix) const { const std::vector &JxW = fe_v.get_present_fe_values().get_JxW_values (); - const std::vector > &normals = fe_v.get_present_fe_values().get_normal_vectors (); + const std::vector > &normals = fe_v.get_present_fe_values().get_all_normal_vectors (); std::vector > beta (fe_v.get_present_fe_values().n_quadrature_points); -- 2.39.5