From: wolf Date: Tue, 23 Jul 2002 16:54:31 +0000 (+0000) Subject: Use vector2d at a couple of places instead of vector >. This should make... X-Git-Url: https://gitweb.dealii.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=5d8f87c14c4ded47c0377aa40b36db959f47e353;p=dealii-svn.git Use vector2d at a couple of places instead of vector >. This should make things faster, and also significantly reduce memory fragmentation. git-svn-id: https://svn.dealii.org/trunk@6268 0785d39b-7218-0410-832d-ea1e28bc413d --- diff --git a/deal.II/deal.II/include/fe/fe_dgp.h b/deal.II/deal.II/include/fe/fe_dgp.h index 1e30f50698..6c0108286c 100644 --- a/deal.II/deal.II/include/fe/fe_dgp.h +++ b/deal.II/deal.II/include/fe/fe_dgp.h @@ -406,7 +406,7 @@ class FE_DGP : public FiniteElement * them over when visiting a * concrete cell. */ - std::vector > shape_values; + vector2d shape_values; /** * Array with shape function @@ -426,7 +426,7 @@ class FE_DGP : public FiniteElement * multiplication) when * visiting an actual cell. */ - std::vector > > shape_gradients; + vector2d > shape_gradients; }; /** diff --git a/deal.II/deal.II/include/fe/fe_dgq.h b/deal.II/deal.II/include/fe/fe_dgq.h index de35097d63..4b0910f232 100644 --- a/deal.II/deal.II/include/fe/fe_dgq.h +++ b/deal.II/deal.II/include/fe/fe_dgq.h @@ -434,7 +434,7 @@ class FE_DGQ : public FiniteElement * them over when visiting a * concrete cell. */ - std::vector > shape_values; + vector2d shape_values; /** * Array with shape function @@ -454,7 +454,7 @@ class FE_DGQ : public FiniteElement * multiplication) when * visiting an actual cell. */ - std::vector > > shape_gradients; + vector2d > shape_gradients; }; /** diff --git a/deal.II/deal.II/include/fe/fe_nedelec.h b/deal.II/deal.II/include/fe/fe_nedelec.h index c8590d2d7f..5d5ba486a0 100644 --- a/deal.II/deal.II/include/fe/fe_nedelec.h +++ b/deal.II/deal.II/include/fe/fe_nedelec.h @@ -438,7 +438,7 @@ class FE_Nedelec : public FiniteElement * multiplication with the * Jacobian of the mapping. */ - std::vector > > shape_values; + vector2d > shape_values; /** * Array with shape function @@ -458,7 +458,7 @@ class FE_Nedelec : public FiniteElement * multiplication) when * visiting an actual cell. */ - std::vector > > shape_gradients; + vector2d > shape_gradients; }; /** diff --git a/deal.II/deal.II/include/fe/fe_q.h b/deal.II/deal.II/include/fe/fe_q.h index b1d8a9e46c..0c4aabeeb0 100644 --- a/deal.II/deal.II/include/fe/fe_q.h +++ b/deal.II/deal.II/include/fe/fe_q.h @@ -779,7 +779,7 @@ class FE_Q : public FiniteElement * them over when visiting a * concrete cell. */ - std::vector > shape_values; + vector2d shape_values; /** * Array with shape function @@ -799,7 +799,7 @@ class FE_Q : public FiniteElement * multiplication) when * visiting an actual cell. */ - std::vector > > shape_gradients; + vector2d > shape_gradients; }; /** diff --git a/deal.II/deal.II/include/fe/fe_values.h b/deal.II/deal.II/include/fe/fe_values.h index bff29f91b0..ed6cfed2f8 100644 --- a/deal.II/deal.II/include/fe/fe_values.h +++ b/deal.II/deal.II/include/fe/fe_values.h @@ -20,7 +20,7 @@ #include #include #include -#include +#include #include #include #include @@ -94,8 +94,7 @@ class FEValuesData * thus have a row in the array * presently under discussion. */ -//TODO[WB]: use vector2d here - typedef FullMatrix ShapeVector; + typedef vector2d ShapeVector; /** * Storage type for @@ -103,19 +102,13 @@ class FEValuesData * is the same as for the * @ref{ShapeVector} data type. */ -//TODO[WB]: use vector2d here - typedef - std::vector > > - GradientVector; + typedef vector2d > GradientVector; /** * Likewise for second order * derivatives. */ -//TODO[WB]: use vector2d here - typedef - std::vector > > - GradGradVector; + typedef vector2d > GradGradVector; /** * Store the values of the shape @@ -1279,10 +1272,10 @@ FEValuesBase::shape_grad (const unsigned int i, ExcAccessToUninitializedField()); Assert (fe->is_primitive (i), ExcShapeFunctionNotPrimitive(i)); - Assert (ishape_gradients.size(), - ExcIndexRange (i, 0, this->shape_gradients.size())); - Assert (jshape_gradients[i].size(), - ExcIndexRange (j, 0, this->shape_gradients[i].size())); + Assert (ishape_gradients.n_rows(), + ExcIndexRange (i, 0, this->shape_gradients.n_rows())); + Assert (jshape_gradients.n_cols(), + ExcIndexRange (j, 0, this->shape_gradients.n_cols())); // if the entire FE is primitive, // then we can take a short-cut: @@ -1376,10 +1369,10 @@ FEValuesBase::shape_2nd_derivative (const unsigned int i, ExcAccessToUninitializedField()); Assert (fe->is_primitive (i), ExcShapeFunctionNotPrimitive(i)); - Assert (ishape_2nd_derivatives.size(), - ExcIndexRange (i, 0, this->shape_2nd_derivatives.size())); - Assert (jshape_2nd_derivatives[i].size(), - ExcIndexRange (j, 0, this->shape_2nd_derivatives[i].size())); + Assert (ishape_2nd_derivatives.n_rows(), + ExcIndexRange (i, 0, this->shape_2nd_derivatives.n_rows())); + Assert (jshape_2nd_derivatives.n_cols(), + ExcIndexRange (j, 0, this->shape_2nd_derivatives.n_cols())); // if the entire FE is primitive, // then we can take a short-cut: diff --git a/deal.II/deal.II/include/fe/mapping.h b/deal.II/deal.II/include/fe/mapping.h index 92c69298cb..05a0e5a880 100644 --- a/deal.II/deal.II/include/fe/mapping.h +++ b/deal.II/deal.II/include/fe/mapping.h @@ -18,6 +18,7 @@ #include #include #include +#include #include #include #include @@ -201,10 +202,10 @@ class Mapping : public Subscriptor */ virtual void - transform_covariant (typename std::vector >::iterator begin, - typename std::vector >::const_iterator end, - typename std::vector >::const_iterator src, - const InternalDataBase& internal) const = 0; + transform_covariant (Tensor<1,dim> *begin, + Tensor<1,dim> *end, + const Tensor<1,dim> *src, + const InternalDataBase &internal) const = 0; /** * Tranform a field of @@ -221,10 +222,10 @@ class Mapping : public Subscriptor */ virtual void - transform_contravariant (typename std::vector >::iterator begin, - typename std::vector >::const_iterator end, - typename std::vector >::const_iterator src, - const InternalDataBase& internal) const = 0; + transform_contravariant (Tensor<1,dim> *begin, + Tensor<1,dim> *end, + const Tensor<1,dim> *src, + const InternalDataBase &internal) const = 0; /** * Indicate fields to be updated diff --git a/deal.II/deal.II/include/fe/mapping_cartesian.h b/deal.II/deal.II/include/fe/mapping_cartesian.h index e08d594c41..0027696eb5 100644 --- a/deal.II/deal.II/include/fe/mapping_cartesian.h +++ b/deal.II/deal.II/include/fe/mapping_cartesian.h @@ -105,20 +105,20 @@ class MappingCartesian : public Mapping * @ref{Mapping}. */ virtual void - transform_covariant (typename std::vector >::iterator begin, - typename std::vector >::const_iterator end, - typename std::vector >::const_iterator src, - const typename Mapping::InternalDataBase &mapping_data) const; + transform_covariant (Tensor<1,dim> *begin, + Tensor<1,dim> *end, + const Tensor<1,dim> *src, + const typename Mapping::InternalDataBase &internal) const; /** * Implementation of the interface in * @ref{Mapping}. */ virtual void - transform_contravariant (typename std::vector >::iterator begin, - typename std::vector >::const_iterator end, - typename std::vector >::const_iterator src, - const typename Mapping::InternalDataBase &mapping_data) const; + transform_contravariant (Tensor<1,dim> *begin, + Tensor<1,dim> *end, + const Tensor<1,dim> *src, + const typename Mapping::InternalDataBase &internal) const; /** * Transforms the point @p{p} on @@ -205,12 +205,12 @@ class MappingCartesian : public Mapping * * Filled once. */ - std::vector > > unit_tangentials; + vector2d > unit_tangentials; /** * Auxiliary vectors for internal use. */ - std::vector > > aux; + vector2d > aux; }; /** diff --git a/deal.II/deal.II/include/fe/mapping_q.h b/deal.II/deal.II/include/fe/mapping_q.h index bf1934d62c..a935afb806 100644 --- a/deal.II/deal.II/include/fe/mapping_q.h +++ b/deal.II/deal.II/include/fe/mapping_q.h @@ -15,9 +15,9 @@ #include +#include #include - template class TensorProductPolynomials; class LagrangeEquidistant; @@ -83,20 +83,20 @@ class MappingQ : public MappingQ1 * @ref{Mapping}. */ virtual void - transform_covariant (typename std::vector >::iterator begin, - typename std::vector >::const_iterator end, - typename std::vector >::const_iterator src, - const typename Mapping::InternalDataBase &mapping_data) const; + transform_covariant (Tensor<1,dim> *begin, + Tensor<1,dim> *end, + const Tensor<1,dim> *src, + const typename Mapping::InternalDataBase &internal) const; /** * Implementation of the interface in * @ref{Mapping}. */ virtual void - transform_contravariant (typename std::vector >::iterator begin, - typename std::vector >::const_iterator end, - typename std::vector >::const_iterator src, - const typename Mapping::InternalDataBase &mapping_data) const; + transform_contravariant (Tensor<1,dim> *begin, + Tensor<1,dim> *end, + const Tensor<1,dim> *src, + const typename Mapping::InternalDataBase &internal) const; /** * Return the degree of the @@ -304,7 +304,7 @@ class MappingQ : public MappingQ1 * this vector is computed. */ void - set_laplace_on_quad_vector(std::vector > &loqvs) const; + set_laplace_on_quad_vector(vector2d &loqvs) const; /** * This function is needed by the @@ -317,7 +317,7 @@ class MappingQ : public MappingQ1 * @p{degree>2} this vector is * computed. */ - void set_laplace_on_hex_vector(std::vector > &lohvs) const; + void set_laplace_on_hex_vector(vector2d &lohvs) const; /** * Computes the @p{laplace_on_quad(hex)_vector}. @@ -327,7 +327,7 @@ class MappingQ : public MappingQ1 * functions if the data is not * yet hardcoded. */ - void compute_laplace_vector(std::vector > &lvs) const; + void compute_laplace_vector(vector2d &lvs) const; /** * Takes a @@ -344,7 +344,7 @@ class MappingQ : public MappingQ1 * @p{n_inner} computed inner * points are appended. */ - void apply_laplace_vector(const std::vector > &lvs, + void apply_laplace_vector(const vector2d &lvs, std::vector > &a) const; /** @@ -426,7 +426,7 @@ class MappingQ : public MappingQ1 * unit_support_points on the * boundary of the quad */ - std::vector > laplace_on_quad_vector; + vector2d laplace_on_quad_vector; /** * Needed by the @@ -434,7 +434,7 @@ class MappingQ : public MappingQ1 * (for @p{dim==3}). Filled by the * constructor. */ - std::vector > laplace_on_hex_vector; + vector2d laplace_on_hex_vector; /** * Exception. @@ -514,11 +514,11 @@ template<> void MappingQ<1>::compute_shapes_virtual ( const std::vector > &unit_points, MappingQ1<1>::InternalData &data) const; template <> void MappingQ<1>::set_laplace_on_quad_vector( - std::vector > &) const; + vector2d &) const; template <> void MappingQ<3>::set_laplace_on_hex_vector( - std::vector > &lohvs) const; + vector2d &lohvs) const; template <> void MappingQ<1>::compute_laplace_vector( - std::vector > &) const; + vector2d &) const; template <> void MappingQ<1>::add_line_support_points ( const Triangulation<1>::cell_iterator &, std::vector > &) const; diff --git a/deal.II/deal.II/include/fe/mapping_q1.h b/deal.II/deal.II/include/fe/mapping_q1.h index 13fb8dab1a..24237bb452 100644 --- a/deal.II/deal.II/include/fe/mapping_q1.h +++ b/deal.II/deal.II/include/fe/mapping_q1.h @@ -72,20 +72,20 @@ class MappingQ1 : public Mapping * @ref{Mapping}. */ virtual void - transform_covariant (typename std::vector >::iterator begin, - typename std::vector >::const_iterator end, - typename std::vector >::const_iterator src, - const typename Mapping::InternalDataBase &mapping_data) const; + transform_covariant (Tensor<1,dim> *begin, + Tensor<1,dim> *end, + const Tensor<1,dim> *src, + const typename Mapping::InternalDataBase &internal) const; /** * Implementation of the interface in * @ref{Mapping}. */ virtual void - transform_contravariant (typename std::vector >::iterator begin, - typename std::vector >::const_iterator end, - typename std::vector >::const_iterator src, - const typename Mapping::InternalDataBase &mapping_data) const; + transform_contravariant (Tensor<1,dim> *begin, + Tensor<1,dim> *end, + const Tensor<1,dim> *src, + const typename Mapping::InternalDataBase &internal) const; /** * Implementation of the interface in @@ -259,12 +259,12 @@ class MappingQ1 : public Mapping * * Filled once. */ - std::vector > > unit_tangentials; + vector2d > unit_tangentials; /** * Auxuliary vectors for internal use. */ - std::vector > > aux; + vector2d > aux; /** * Stores the support points of diff --git a/deal.II/deal.II/source/fe/fe.cc b/deal.II/deal.II/source/fe/fe.cc index e703e0868a..f07b573866 100644 --- a/deal.II/deal.II/source/fe/fe.cc +++ b/deal.II/deal.II/source/fe/fe.cc @@ -415,10 +415,10 @@ compute_2nd (const Mapping &mapping, Assert ((fe_internal.update_each | fe_internal.update_once) & update_second_derivatives, ExcInternalError()); - Assert (data.shape_2nd_derivatives.size() == this->dofs_per_cell, + Assert (data.shape_2nd_derivatives.n_rows() == this->dofs_per_cell, ExcInternalError()); // Number of quadrature points - const unsigned int n_q_points = data.shape_2nd_derivatives[0].size(); + const unsigned int n_q_points = data.shape_2nd_derivatives.n_cols(); // first reinit the fe_values // objects used for the finite @@ -433,8 +433,8 @@ compute_2nd (const Mapping &mapping, // quotients of gradients in each // direction (first index) and at // all q-points (second index) - std::vector > > diff_quot (dim, std::vector >(n_q_points)); - std::vector > diff_quot2 (n_q_points); + vector2d > diff_quot (dim, n_q_points); + std::vector > diff_quot2 (n_q_points); // for all shape functions at all // quadrature points and difference @@ -469,7 +469,7 @@ compute_2nd (const Mapping &mapping, // cell for (unsigned int d=0; d::get_data (const UpdateFlags update_flags, if (flags & update_values) { values.resize (this->dofs_per_cell); - data->shape_values.resize(this->dofs_per_cell, - std::vector(n_q_points)); + data->shape_values.reinit (this->dofs_per_cell, + n_q_points); } if (flags & update_gradients) { grads.resize (this->dofs_per_cell); - data->shape_gradients.resize(this->dofs_per_cell, - std::vector >(n_q_points)); + data->shape_gradients.reinit (this->dofs_per_cell, + n_q_points); } // if second derivatives through diff --git a/deal.II/deal.II/source/fe/fe_dgq.cc b/deal.II/deal.II/source/fe/fe_dgq.cc index b6bf202a9c..a64269356e 100644 --- a/deal.II/deal.II/source/fe/fe_dgq.cc +++ b/deal.II/deal.II/source/fe/fe_dgq.cc @@ -420,15 +420,15 @@ FE_DGQ::get_data (const UpdateFlags update_flags, if (flags & update_values) { values.resize (this->dofs_per_cell); - data->shape_values.resize(this->dofs_per_cell, - std::vector(n_q_points)); + data->shape_values.reinit (this->dofs_per_cell, + n_q_points); } if (flags & update_gradients) { grads.resize (this->dofs_per_cell); - data->shape_gradients.resize(this->dofs_per_cell, - std::vector >(n_q_points)); + data->shape_gradients.reinit (this->dofs_per_cell, + n_q_points); } // if second derivatives through diff --git a/deal.II/deal.II/source/fe/fe_q.cc b/deal.II/deal.II/source/fe/fe_q.cc index 6e8f6bb684..c8079215ec 100644 --- a/deal.II/deal.II/source/fe/fe_q.cc +++ b/deal.II/deal.II/source/fe/fe_q.cc @@ -1110,15 +1110,15 @@ FE_Q::get_data (const UpdateFlags update_flags, if (flags & update_values) { values.resize (this->dofs_per_cell); - data->shape_values.resize(this->dofs_per_cell, - std::vector(n_q_points)); + data->shape_values.reinit (this->dofs_per_cell, + n_q_points); } if (flags & update_gradients) { grads.resize (this->dofs_per_cell); - data->shape_gradients.resize(this->dofs_per_cell, - std::vector >(n_q_points)); + data->shape_gradients.reinit (this->dofs_per_cell, + n_q_points); } // if second derivatives through diff --git a/deal.II/deal.II/source/fe/fe_values.cc b/deal.II/deal.II/source/fe/fe_values.cc index 41cefe5931..a525ea75c0 100644 --- a/deal.II/deal.II/source/fe/fe_values.cc +++ b/deal.II/deal.II/source/fe/fe_values.cc @@ -65,21 +65,16 @@ FEValuesData::initialize (const unsigned int n_quadrature_points, // that we will need to their // correct size if (flags & update_values) - this->shape_values.reinit(n_nonzero_shape_components, n_quadrature_points); + this->shape_values.reinit(n_nonzero_shape_components, + n_quadrature_points); if (flags & update_gradients) - { - this->shape_gradients.resize(n_nonzero_shape_components); - for (unsigned int i=0; ishape_gradients[i].resize(n_quadrature_points); - } + this->shape_gradients.reinit(n_nonzero_shape_components, + n_quadrature_points); if (flags & update_second_derivatives) - { - this->shape_2nd_derivatives.resize(n_nonzero_shape_components); - for (unsigned int i=0; ishape_2nd_derivatives[i].resize(n_quadrature_points); - } + this->shape_2nd_derivatives.reinit(n_nonzero_shape_components, + n_quadrature_points); if (flags & update_q_points) this->quadrature_points.resize(n_quadrature_points); @@ -295,7 +290,7 @@ template template void FEValuesBase:: -get_function_grads (const InputVector &fe_function, +get_function_grads (const InputVector &fe_function, std::vector > > &gradients) const { Assert (n_quadrature_points == gradients.size(), @@ -394,7 +389,7 @@ template template void FEValuesBase:: -get_function_2nd_derivatives (const InputVector &fe_function, +get_function_2nd_derivatives (const InputVector &fe_function, std::vector > > &second_derivs) const { Assert (n_quadrature_points == second_derivs.size(), diff --git a/deal.II/deal.II/source/fe/mapping_cartesian.cc b/deal.II/deal.II/source/fe/mapping_cartesian.cc index c1dac9784e..cc90555189 100644 --- a/deal.II/deal.II/source/fe/mapping_cartesian.cc +++ b/deal.II/deal.II/source/fe/mapping_cartesian.cc @@ -438,11 +438,10 @@ MappingCartesian<1>::fill_fe_subface_values (const DoFHandler<1>::cell_iterator template void -MappingCartesian::transform_covariant ( - typename std::vector >::iterator begin, - typename std::vector >::const_iterator end, - typename std::vector >::const_iterator src, - const typename Mapping::InternalDataBase &mapping_data) const +MappingCartesian::transform_covariant (Tensor<1,dim> *begin, + Tensor<1,dim> *end, + const Tensor<1,dim> *src, + const typename Mapping::InternalDataBase &mapping_data) const { const InternalData &data = dynamic_cast (mapping_data); @@ -463,10 +462,9 @@ MappingCartesian::transform_covariant ( template void -MappingCartesian::transform_contravariant ( - typename std::vector >::iterator begin, - typename std::vector >::const_iterator end, - typename std::vector >::const_iterator src, +MappingCartesian::transform_contravariant (Tensor<1,dim> *begin, + Tensor<1,dim> *end, + const Tensor<1,dim> *src, const typename Mapping::InternalDataBase &mapping_data) const { // convert data object to internal diff --git a/deal.II/deal.II/source/fe/mapping_q.cc b/deal.II/deal.II/source/fe/mapping_q.cc index 3ac7c02902..d55bee4885 100644 --- a/deal.II/deal.II/source/fe/mapping_q.cc +++ b/deal.II/deal.II/source/fe/mapping_q.cc @@ -409,7 +409,7 @@ MappingQ::fill_fe_subface_values (const typename DoFHandler::cell_iter template <> void -MappingQ<1>::set_laplace_on_quad_vector(std::vector > &) const +MappingQ<1>::set_laplace_on_quad_vector(vector2d &) const { Assert(false, ExcInternalError()); } @@ -418,7 +418,7 @@ MappingQ<1>::set_laplace_on_quad_vector(std::vector > &) con template void -MappingQ::set_laplace_on_quad_vector(std::vector > &loqvs) const +MappingQ::set_laplace_on_quad_vector(vector2d &loqvs) const { Assert(degree>1, ExcInternalError()); const unsigned int n_inner_2d=(degree-1)*(degree-1); @@ -453,13 +453,10 @@ MappingQ::set_laplace_on_quad_vector(std::vector > &loq { // precomputed. copy values to // the loqvs array - loqvs.resize(n_inner_2d); + loqvs.reinit(n_inner_2d, n_outer_2d); for (unsigned int unit_point=0; unit_point::set_laplace_on_quad_vector(std::vector > &loq // the sum of weights of the points // at the outer rim should be // one. check this - for (unsigned int unit_point=0; unit_point::set_laplace_on_quad_vector(std::vector > &loq template <> void -MappingQ<3>::set_laplace_on_hex_vector(std::vector > &lohvs) const +MappingQ<3>::set_laplace_on_hex_vector(vector2d &lohvs) const { Assert(degree>1, ExcInternalError()); @@ -516,13 +513,10 @@ MappingQ<3>::set_laplace_on_hex_vector(std::vector > &lohvs) { // precomputed. copy values to // the lohvs array - lohvs.resize(n_inner); + lohvs.reinit(n_inner, n_outer); for (unsigned int unit_point=0; unit_point::set_laplace_on_hex_vector(std::vector > &lohvs) template void -MappingQ::set_laplace_on_hex_vector(std::vector > &) const +MappingQ::set_laplace_on_hex_vector(vector2d &) const { Assert(false, ExcInternalError()); } @@ -554,7 +548,7 @@ MappingQ::set_laplace_on_hex_vector(std::vector > &) co template <> void -MappingQ<1>::compute_laplace_vector(std::vector > &) const +MappingQ<1>::compute_laplace_vector(vector2d &) const { Assert(false, ExcInternalError()); } @@ -564,9 +558,9 @@ MappingQ<1>::compute_laplace_vector(std::vector > &) const template void -MappingQ::compute_laplace_vector(std::vector > &lvs) const +MappingQ::compute_laplace_vector(vector2d &lvs) const { - Assert(lvs.size()==0, ExcInternalError()); + Assert(lvs.n_rows()==0, ExcInternalError()); Assert(dim==2 || dim==3, ExcNotImplemented()); Assert(degree>1, ExcInternalError()); @@ -611,17 +605,10 @@ MappingQ::compute_laplace_vector(std::vector > &lvs) co // Resize and initialize the // lvs - lvs.resize(n_inner); + lvs.reinit (n_inner, n_outer); for (unsigned int i=0; i &lv=lvs[i]; - for (unsigned int k=0; k::compute_laplace_vector(std::vector > &lvs) co template void -MappingQ::apply_laplace_vector(const std::vector > &lvs, +MappingQ::apply_laplace_vector(const vector2d &lvs, std::vector > &a) const { - Assert(lvs.size()!=0, ExcLaplaceVectorNotSet(degree)); - const unsigned int n_inner_apply=lvs.size(); + Assert(lvs.n_rows()!=0, ExcLaplaceVectorNotSet(degree)); + const unsigned int n_inner_apply=lvs.n_rows(); Assert(n_inner_apply==n_inner || n_inner_apply==(degree-1)*(degree-1), ExcInternalError()); - const unsigned int n_outer_apply=lvs[0].size(); - Assert(a.size()==n_outer_apply, ExcDimensionMismatch(a.size(), n_outer_apply)); + const unsigned int n_outer_apply=lvs.n_cols(); + Assert(a.size()==n_outer_apply, + ExcDimensionMismatch(a.size(), n_outer_apply)); // compute each inner point as // linear combination of the outer @@ -648,7 +636,7 @@ MappingQ::apply_laplace_vector(const std::vector > &lvs // elements of a for (unsigned int unit_point=0; unit_point p; for (unsigned int k=0; k::fill_quad_support_points_simple (const typename Triangulation void -MappingQ::transform_covariant ( - typename std::vector >::iterator begin, - typename std::vector >::const_iterator end, - typename std::vector >::const_iterator src, - const typename Mapping::InternalDataBase &mapping_data) const +MappingQ::transform_covariant (Tensor<1,dim> *begin, + Tensor<1,dim> *end, + const Tensor<1,dim> *src, + const typename Mapping::InternalDataBase &mapping_data) const { const typename MappingQ1::InternalData *q1_data = dynamic_cast::InternalData *> (&mapping_data); @@ -1101,11 +1088,10 @@ MappingQ::transform_covariant ( template void -MappingQ::transform_contravariant ( - typename std::vector >::iterator begin, - typename std::vector >::const_iterator end, - typename std::vector >::const_iterator src, - const typename Mapping::InternalDataBase &mapping_data) const +MappingQ::transform_contravariant (Tensor<1,dim> *begin, + Tensor<1,dim> *end, + const Tensor<1,dim> *src, + const typename Mapping::InternalDataBase &mapping_data) const { const typename MappingQ1::InternalData *q1_data = dynamic_cast::InternalData *> (&mapping_data); diff --git a/deal.II/deal.II/source/fe/mapping_q1.cc b/deal.II/deal.II/source/fe/mapping_q1.cc index eb3ecc065b..3a730fe226 100644 --- a/deal.II/deal.II/source/fe/mapping_q1.cc +++ b/deal.II/deal.II/source/fe/mapping_q1.cc @@ -344,14 +344,13 @@ MappingQ1::compute_face_data (const UpdateFlags update_flags, #if (deal_II_dimension>1) if (data.update_flags & update_boundary_forms) { - data.aux.resize(dim-1); - for (unsigned int i=0;i::faces_per_cell; - data.unit_tangentials.resize(nfaces*(dim-1)); + data.unit_tangentials.reinit(nfaces*(dim-1), + n_original_q_points); for (unsigned int i=0;i::compute_face_data (const UpdateFlags update_flags, // non-zero in i. Tensor<1,dim> tangential; tangential[(nindex+1)%dim] = (this->normal_directions[i]%2) ? -1 : 1; - data.unit_tangentials[i].resize(n_original_q_points); std::fill (data.unit_tangentials[i].begin(), data.unit_tangentials[i].end(), tangential); @@ -384,7 +382,6 @@ MappingQ1::compute_face_data (const UpdateFlags update_flags, // right-handed system. Tensor<1,dim> tangential; tangential[(nindex-1)%dim] = 1.; - data.unit_tangentials[i+nfaces].resize(n_original_q_points); std::fill (data.unit_tangentials[i+nfaces].begin(), data.unit_tangentials[i+nfaces].end(), tangential); @@ -610,7 +607,7 @@ MappingQ1::compute_fill_face (const typename DoFHandler::cell_iterator result = boundary_forms.begin(); typename std::vector >::const_iterator end = boundary_forms.end(); - typename std::vector >::const_iterator + const Tensor<1,dim> * tang1 = data.aux[0].begin(); switch (dim) @@ -629,8 +626,7 @@ MappingQ1::compute_fill_face (const typename DoFHandler::cell_iterator data.unit_tangentials[ face_no+GeometryInfo::faces_per_cell].begin(), data); - typename std::vector >::const_iterator - tang2 = data.aux[1].begin(); + const Tensor<1,dim> *tang2 = data.aux[1].begin(); for (;result != end; ++result, ++tang1, ++tang2) cross_product (*result, *tang1, *tang2); break; @@ -778,11 +774,10 @@ MappingQ1<1>::fill_fe_subface_values (const DoFHandler<1>::cell_iterator &, template void -MappingQ1::transform_covariant ( - typename std::vector >::iterator begin, - typename std::vector >::const_iterator end, - typename std::vector >::const_iterator src, - const typename Mapping::InternalDataBase &mapping_data) const +MappingQ1::transform_covariant (Tensor<1,dim> *begin, + Tensor<1,dim> *end, + const Tensor<1,dim> *src, + const typename Mapping::InternalDataBase &mapping_data) const { const InternalData *data_ptr = dynamic_cast (&mapping_data); Assert(data_ptr!=0, ExcInternalError()); @@ -806,11 +801,10 @@ MappingQ1::transform_covariant ( template void -MappingQ1::transform_contravariant ( - typename std::vector >::iterator begin, - typename std::vector >::const_iterator end, - typename std::vector >::const_iterator src, - const typename Mapping::InternalDataBase &mapping_data) const +MappingQ1::transform_contravariant (Tensor<1,dim> *begin, + Tensor<1,dim> *end, + const Tensor<1,dim> *src, + const typename Mapping::InternalDataBase &mapping_data) const { const InternalData* data_ptr = dynamic_cast (&mapping_data); Assert(data_ptr!=0, ExcInternalError());