From 463d3e80465cffb39c3f54893b0c1ffbf1463d83 Mon Sep 17 00:00:00 2001 From: kronbichler Date: Mon, 22 Dec 2008 17:09:33 +0000 Subject: [PATCH] A few functions could be made faster by smarter access to the mapping data. git-svn-id: https://svn.dealii.org/trunk@17999 0785d39b-7218-0410-832d-ea1e28bc413d --- deal.II/deal.II/source/fe/mapping_q1.cc | 155 ++++++++++++------------ 1 file changed, 77 insertions(+), 78 deletions(-) diff --git a/deal.II/deal.II/source/fe/mapping_q1.cc b/deal.II/deal.II/source/fe/mapping_q1.cc index 821d2e3429..e116a9311d 100644 --- a/deal.II/deal.II/source/fe/mapping_q1.cc +++ b/deal.II/deal.II/source/fe/mapping_q1.cc @@ -613,26 +613,23 @@ MappingQ1::compute_fill (const typename Triangulation()); } - if (update_flags & update_covariant_transformation) - { - Assert (data.covariant.size() == n_q_points, - ExcDimensionMismatch(data.covariant.size(), n_q_points)); - } - if (update_flags & update_contravariant_transformation) { Assert (data.contravariant.size() == n_q_points, ExcDimensionMismatch(data.contravariant.size(), n_q_points)); - std::fill(data.contravariant.begin(), - data.contravariant.end(), + std::fill(data.contravariant.begin(), data.contravariant.end(), Tensor<2,spacedim>()); } + if (update_flags & update_covariant_transformation) + { + Assert (data.covariant.size() == n_q_points, + ExcDimensionMismatch(data.covariant.size(), n_q_points)); + } // if necessary, recompute the // support points of the // transformation of this cell @@ -657,62 +654,55 @@ MappingQ1::compute_fill (const typename Triangulation &data_derv = data.derivative(point+data_set, k); + const Tensor<1,spacedim> &supp_pts = data.mapping_support_points[k]; + + for (unsigned int i=0; i contravariant_matrix(spacedim,dim); - FullMatrix covariant_matrix(dim,spacedim); // invert contravariant for // covariant transformation // matrices if ((update_flags & update_covariant_transformation)&&(dim==spacedim)) for (unsigned int point=0; point contravariant_matrix(spacedim,dim); + FullMatrix covariant_matrix(dim,spacedim); + for (unsigned int point=0; point::fill_fe_values (const typename Triangulation > &inverse_jacobians, std::vector > &cell_normal_vectors) const { - InternalData *data_ptr = dynamic_cast (&mapping_data); - Assert(data_ptr!=0, ExcInternalError()); - InternalData &data=*data_ptr; + // ensure that the following cast is really correct: + Assert (dynamic_cast(&mapping_data) != 0, + ExcInternalError()); + InternalData &data = static_cast(mapping_data); const unsigned int n_q_points=q.size(); @@ -1003,9 +994,10 @@ MappingQ1::fill_fe_face_values (const typename Triangulation > &normal_vectors, std::vector &cell_JxW_values) const { - InternalData *data_ptr = dynamic_cast (&mapping_data); - Assert(data_ptr!=0, ExcInternalError()); - InternalData &data=*data_ptr; + // ensure that the following cast is really correct: + Assert (dynamic_cast(&mapping_data) != 0, + ExcInternalError()); + InternalData &data = static_cast(mapping_data); const unsigned int n_q_points = q.size(); @@ -1039,9 +1031,10 @@ MappingQ1::fill_fe_subface_values (const typename Triangulation > &normal_vectors, std::vector &cell_JxW_values) const { - InternalData *data_ptr = dynamic_cast (&mapping_data); - Assert(data_ptr!=0, ExcInternalError()); - InternalData &data=*data_ptr; + // ensure that the following cast is really correct: + Assert (dynamic_cast(&mapping_data) != 0, + ExcInternalError()); + InternalData &data = static_cast(mapping_data); const unsigned int n_q_points = q.size(); @@ -1180,9 +1173,10 @@ MappingQ1::transform_covariant ( VectorSlice > > output, const typename Mapping::InternalDataBase &mapping_data) const { - const InternalData *data_ptr = dynamic_cast (&mapping_data); - Assert(data_ptr!=0, ExcInternalError()); - const InternalData &data=*data_ptr; + // ensure that the following cast is really correct: + Assert (dynamic_cast(&mapping_data) != 0, + ExcInternalError()); + const InternalData &data = static_cast(mapping_data); Assert (data.update_flags & update_covariant_transformation, typename FEValuesBase::ExcAccessToUninitializedField()); @@ -1204,9 +1198,10 @@ MappingQ1<1,2>::transform_covariant ( VectorSlice > > output, const Mapping<1,2>::InternalDataBase &mapping_data) const { - const InternalData *data_ptr = dynamic_cast (&mapping_data); - Assert(data_ptr!=0, ExcInternalError()); - const InternalData &data=*data_ptr; + // ensure that the following cast is really correct: + Assert (dynamic_cast(&mapping_data) != 0, + ExcInternalError()); + const InternalData &data = static_cast(mapping_data); Assert (data.update_flags & update_covariant_transformation, FEValuesBase<1>::ExcAccessToUninitializedField()); @@ -1235,9 +1230,10 @@ MappingQ1<2,3>::transform_covariant ( VectorSlice > > output, const Mapping<2,3>::InternalDataBase &mapping_data) const { - const InternalData *data_ptr = dynamic_cast (&mapping_data); - Assert(data_ptr!=0, ExcInternalError()); - const InternalData &data=*data_ptr; + // ensure that the following cast is really correct: + Assert (dynamic_cast(&mapping_data) != 0, + ExcInternalError()); + const InternalData &data = static_cast(mapping_data); Assert (data.update_flags & update_covariant_transformation, FEValuesBase<2>::ExcAccessToUninitializedField()); @@ -1266,17 +1262,18 @@ MappingQ1::transform_covariant ( VectorSlice > > output, const typename Mapping::InternalDataBase &mapping_data) const { - const InternalData *data_ptr = dynamic_cast (&mapping_data); - Assert(data_ptr!=0, ExcInternalError()); - const InternalData &data=*data_ptr; + // ensure that the following cast is really correct: + Assert (dynamic_cast(&mapping_data) != 0, + ExcInternalError()); + const InternalData &data = static_cast(mapping_data); - Assert (data.update_flags & update_covariant_transformation, - typename FEValuesBase::ExcAccessToUninitializedField()); + Assert (data.update_flags & update_covariant_transformation, + typename FEValuesBase::ExcAccessToUninitializedField()); - Assert (output.size() + offset <= input.size(), ExcInternalError()); + Assert (output.size() + offset <= input.size(), ExcInternalError()); - for (unsigned int i=0; i > > output, const typename Mapping::InternalDataBase &mapping_data) const { - const InternalData* data_ptr = dynamic_cast (&mapping_data); - Assert(data_ptr!=0, ExcInternalError()); - const InternalData &data=*data_ptr; + // ensure that the following cast is really correct: + Assert (dynamic_cast(&mapping_data) != 0, + ExcInternalError()); + const InternalData &data = static_cast(mapping_data); Assert (data.update_flags & update_contravariant_transformation, typename FEValuesBase::ExcAccessToUninitializedField()); @@ -1342,9 +1340,10 @@ MappingQ1::transform_contravariant ( VectorSlice > > output, const typename Mapping::InternalDataBase &mapping_data) const { - const InternalData* data_ptr = dynamic_cast (&mapping_data); - Assert(data_ptr!=0, ExcInternalError()); - const InternalData &data=*data_ptr; + // ensure that the following cast is really correct: + Assert (dynamic_cast(&mapping_data) != 0, + ExcInternalError()); + const InternalData &data = static_cast(mapping_data); Assert (data.update_flags & update_contravariant_transformation, typename FEValuesBase::ExcAccessToUninitializedField()); -- 2.39.5