From 20ad3aaf7aed24e4440028a1157ad041f9d6ccb5 Mon Sep 17 00:00:00 2001 From: kanschat Date: Mon, 5 Jan 2009 21:13:20 +0000 Subject: [PATCH] new Mapping::transform implemented, but not used git-svn-id: https://svn.dealii.org/trunk@18085 0785d39b-7218-0410-832d-ea1e28bc413d --- deal.II/deal.II/include/fe/mapping.h | 80 +------ .../deal.II/include/fe/mapping_cartesian.h | 8 +- deal.II/deal.II/include/fe/mapping_q.h | 4 +- deal.II/deal.II/include/fe/mapping_q1.h | 4 +- .../deal.II/source/fe/mapping_cartesian.cc | 49 +++-- deal.II/deal.II/source/fe/mapping_q.cc | 71 ++++--- deal.II/deal.II/source/fe/mapping_q1.cc | 197 +++++++++--------- 7 files changed, 190 insertions(+), 223 deletions(-) diff --git a/deal.II/deal.II/include/fe/mapping.h b/deal.II/deal.II/include/fe/mapping.h index fe9ad1f52e..ebb7da2c1a 100644 --- a/deal.II/deal.II/include/fe/mapping.h +++ b/deal.II/deal.II/include/fe/mapping.h @@ -313,30 +313,7 @@ class Mapping : public Subscriptor const MappingType type) const = 0; /** - * Transform a field of covariant - * vectors. The covariant - * transformation multiplies a - * vector from the right with the - * inverse of the Jacobian matrix - * of the transformation from - * unit to real space - * cell. Alternatively, this is - * equivalent to a multiplication - * from the left with the - * transpose of the inverse - * matrix. - * - * The list of arguments is as follows: - * we transform as many elements in the - * @p input field, starting from @p offset, - * as there are elements in @p - * output. The @p input array may hold - * more elements than are needed (some - * finite element classes use this for a - * denser storage of data), but it needs - * to have at least - * output.size() elements - * starting with element @p offset. + * @deprecated Use transform() instead. */ virtual void @@ -346,16 +323,7 @@ class Mapping : public Subscriptor const InternalDataBase &internal) const = 0; /** - * Transform a set of matrices - * covariantly, i.e. multiply - * each function in the input - * range by the Jacobian matrices - * at the different quadrature - * points from the left. - * - * The same applies as to the - * function above regarding input - * and output arguments. + * @deprecated Use transform() instead. */ virtual void @@ -364,58 +332,22 @@ class Mapping : public Subscriptor VectorSlice > > output, const InternalDataBase &internal) const = 0; -//TODO: The argument list here seems wrong - /** - * Transform a field of - * contravariant vectors. The - * contravariant transformation - * multiplies a vector from the - * left with the Jacobian matrix - * of the transformation from - * unit to real space cell. - * - * The list of arguments is as follows: - * we transform as many elements in the - * @p input field, starting from @p offset, - * as there are elements in @p - * output. The @p input array may hold - * more elements than are needed (some - * finite element classes use this for a - * denser storage of data), but it needs - * to have at least - * output.size() elements - * starting with element @p offset. + * @deprecated Use transform() instead. */ virtual void - transform_contravariant (const VectorSlice > > input, + transform_contravariant (const VectorSlice > > input, const unsigned int offset, VectorSlice > > output, const typename Mapping::InternalDataBase &internal) const = 0; /** - * Transform a set of matrices - * contravariantly, i.e. multiply - * each function in the input - * range by the inverse Jacobian - * matrices at the different - * quadrature points from the - * right. Note that here it is no - * more equivalent to - * multiplication with the - * transpose of the inverse - * matrices from the left, unless - * the matrices to be multiplied - * with are symmetric. - * - * The same applies as to the - * function above regarding input - * and output arguments. + * @deprecated Use transform() instead. */ virtual void - transform_contravariant (const VectorSlice > > intput, + transform_contravariant (const VectorSlice > > intput, const unsigned int offset, const VectorSlice > > output, const typename Mapping::InternalDataBase &internal) const = 0; diff --git a/deal.II/deal.II/include/fe/mapping_cartesian.h b/deal.II/deal.II/include/fe/mapping_cartesian.h index 34c14b6b2a..6967368e8d 100644 --- a/deal.II/deal.II/include/fe/mapping_cartesian.h +++ b/deal.II/deal.II/include/fe/mapping_cartesian.h @@ -106,25 +106,25 @@ class MappingCartesian : public Mapping virtual void - transform_covariant (const VectorSlice > > input, + transform_covariant (const VectorSlice > > input, const unsigned int offset, VectorSlice > > output, const typename Mapping::InternalDataBase &internal) const; virtual void - transform_covariant (const VectorSlice > > input, + transform_covariant (const VectorSlice > > input, const unsigned int offset, VectorSlice > > output, const typename Mapping::InternalDataBase &internal) const; virtual void - transform_contravariant (const VectorSlice > > input, + transform_contravariant (const VectorSlice > > input, const unsigned int offset, VectorSlice > > output, const typename Mapping::InternalDataBase &internal) const; virtual void - transform_contravariant (const VectorSlice > > input, + transform_contravariant (const VectorSlice > > input, const unsigned int offset, VectorSlice > > output, const typename Mapping::InternalDataBase &internal) const; diff --git a/deal.II/deal.II/include/fe/mapping_q.h b/deal.II/deal.II/include/fe/mapping_q.h index 6995b18a83..288f12ce32 100644 --- a/deal.II/deal.II/include/fe/mapping_q.h +++ b/deal.II/deal.II/include/fe/mapping_q.h @@ -153,7 +153,7 @@ class MappingQ : public MappingQ1 * interface in Mapping. */ virtual void - transform_contravariant (const VectorSlice > > input, + transform_contravariant (const VectorSlice > > input, const unsigned int offset, VectorSlice > > output, const typename Mapping::InternalDataBase &internal) const; @@ -163,7 +163,7 @@ class MappingQ : public MappingQ1 * interface in Mapping. */ virtual void - transform_contravariant (const VectorSlice > > input, + transform_contravariant (const VectorSlice > > input, const unsigned int offset, VectorSlice > > output, const typename Mapping::InternalDataBase &internal) const; diff --git a/deal.II/deal.II/include/fe/mapping_q1.h b/deal.II/deal.II/include/fe/mapping_q1.h index 73c8b50321..fd9a81d643 100644 --- a/deal.II/deal.II/include/fe/mapping_q1.h +++ b/deal.II/deal.II/include/fe/mapping_q1.h @@ -102,13 +102,13 @@ class MappingQ1 : public Mapping const typename Mapping::InternalDataBase &internal) const; virtual void - transform_contravariant (const VectorSlice > > input, + transform_contravariant (const VectorSlice > > input, const unsigned int offset, VectorSlice > > output, const typename Mapping::InternalDataBase &internal) const; virtual void - transform_contravariant (const VectorSlice > > input, + transform_contravariant (const VectorSlice > > input, const unsigned int offset, VectorSlice > > output, const typename Mapping::InternalDataBase &internal) const; diff --git a/deal.II/deal.II/source/fe/mapping_cartesian.cc b/deal.II/deal.II/source/fe/mapping_cartesian.cc index ff32562376..9613be6852 100644 --- a/deal.II/deal.II/source/fe/mapping_cartesian.cc +++ b/deal.II/deal.II/source/fe/mapping_cartesian.cc @@ -509,17 +509,38 @@ void MappingCartesian::transform ( const VectorSlice > > input, VectorSlice > > output, - const typename Mapping::InternalDataBase &internal, + const typename Mapping::InternalDataBase &mapping_data, const MappingType mapping_type) const { + AssertDimension (input.size(), output.size()); + Assert (dynamic_cast(&mapping_data) != 0, + ExcInternalError()); + const InternalData &data = dynamic_cast (mapping_data); + switch (mapping_type) { case mapping_covariant: - transform_covariant(input, 0, output, internal); - return; -// case mapping_contravariant: -// transform_contravariant(input, 0, output, internal); -// return; + if (true) + { + Assert (data.update_flags & update_covariant_transformation, + typename FEValuesBase::ExcAccessToUninitializedField()); + + for (unsigned int i=0; i::ExcAccessToUninitializedField()); + + for (unsigned int i=0; i::transform ( case mapping_covariant: transform_covariant(input, 0, output, internal); return; -// case mapping_contravariant: -// transform_contravariant(input, 0, output, internal); -// return; + case mapping_contravariant: + transform_contravariant(input, 0, output, internal); + return; default: Assert(false, ExcNotImplemented()); } @@ -551,7 +572,7 @@ MappingCartesian::transform ( template void MappingCartesian::transform_covariant ( - const VectorSlice > > input, + const VectorSlice > > input, const unsigned int offset, VectorSlice > > output, const typename Mapping::InternalDataBase &mapping_data) const @@ -563,8 +584,6 @@ MappingCartesian::transform_covariant ( Assert (data.update_flags & update_covariant_transformation, typename FEValuesBase::ExcAccessToUninitializedField()); - - Assert (output.size() + offset <= input.size(), ExcInternalError()); // simply scale by inverse Jacobian // (which is diagonal here) @@ -578,7 +597,7 @@ MappingCartesian::transform_covariant ( template void MappingCartesian::transform_covariant ( - const VectorSlice > > input, + const VectorSlice > > input, const unsigned int offset, VectorSlice > > output, const typename Mapping::InternalDataBase &mapping_data) const @@ -606,7 +625,7 @@ MappingCartesian::transform_covariant ( template void MappingCartesian::transform_contravariant ( - const VectorSlice > > input, + const VectorSlice > > input, const unsigned int offset, VectorSlice > > output, const typename Mapping::InternalDataBase &mapping_data) const @@ -637,7 +656,7 @@ MappingCartesian::transform_contravariant ( template void MappingCartesian::transform_contravariant ( - const VectorSlice > > input, + const VectorSlice > > input, const unsigned int offset, VectorSlice > > output, const typename Mapping::InternalDataBase &mapping_data) const diff --git a/deal.II/deal.II/source/fe/mapping_q.cc b/deal.II/deal.II/source/fe/mapping_q.cc index 45892480b5..53e84d17b0 100644 --- a/deal.II/deal.II/source/fe/mapping_q.cc +++ b/deal.II/deal.II/source/fe/mapping_q.cc @@ -302,15 +302,15 @@ MappingQ::get_subface_data (const UpdateFlags update_flags, template void MappingQ::fill_fe_values ( - const typename Triangulation::cell_iterator &cell, - const Quadrature &q, - typename Mapping::InternalDataBase &mapping_data, - std::vector > &quadrature_points, - std::vector &JxW_values, - std::vector > &jacobians, - std::vector > &jacobian_grads, - std::vector > &inverse_jacobians, - std::vector > &cell_normal_vectors) const + const typename Triangulation::cell_iterator &cell, + const Quadrature &q, + typename Mapping::InternalDataBase &mapping_data, + std::vector > &quadrature_points, + std::vector &JxW_values, + std::vector > &jacobians, + std::vector > &jacobian_grads, + std::vector > &inverse_jacobians, + std::vector > &cell_normal_vectors) const { // convert data object to internal // data for this class. fails with @@ -345,15 +345,16 @@ MappingQ::fill_fe_values ( template void -MappingQ::fill_fe_face_values (const typename Triangulation::cell_iterator &cell, - const unsigned int face_no, - const Quadrature &q, - typename Mapping::InternalDataBase &mapping_data, - std::vector > &quadrature_points, - std::vector &JxW_values, - std::vector > &exterior_forms, - std::vector > &normal_vectors, - std::vector &cell_JxW_values) const +MappingQ::fill_fe_face_values ( + const typename Triangulation::cell_iterator &cell, + const unsigned int face_no, + const Quadrature &q, + typename Mapping::InternalDataBase &mapping_data, + std::vector > &quadrature_points, + std::vector &JxW_values, + std::vector > &exterior_forms, + std::vector > &normal_vectors, + std::vector &cell_JxW_values) const { // convert data object to internal // data for this class. fails with @@ -1214,9 +1215,9 @@ MappingQ::transform ( case mapping_covariant: transform_covariant(input, 0, output, internal); return; -// case mapping_contravariant: -// transform_contravariant(input, 0, output, internal); -// return; + case mapping_contravariant: + transform_contravariant(input, 0, output, internal); + return; default: Assert(false, ExcNotImplemented()); } @@ -1236,9 +1237,9 @@ MappingQ::transform ( case mapping_covariant: transform_covariant(input, 0, output, internal); return; -// case mapping_contravariant: -// transform_contravariant(input, 0, output, internal); -// return; + case mapping_contravariant: + transform_contravariant(input, 0, output, internal); + return; default: Assert(false, ExcNotImplemented()); } @@ -1275,9 +1276,15 @@ MappingQ::transform_covariant ( else tensor = data->covariant.begin(); } - + + Tensor<1, spacedim> auxiliary; + for (unsigned int i=0; i::transform_covariant ( template void MappingQ::transform_contravariant ( - const VectorSlice > > input, + const VectorSlice > > input, const unsigned int offset, VectorSlice > > output, const typename Mapping::InternalDataBase &mapping_data) const @@ -1348,8 +1355,14 @@ MappingQ::transform_contravariant ( tensor = data->contravariant.begin(); } + Tensor<1, spacedim> auxiliary; + for (unsigned int i=0; i::transform_contravariant ( template void MappingQ::transform_contravariant ( - const VectorSlice > > input, + const VectorSlice > > input, const unsigned int offset, VectorSlice > > output, const typename Mapping::InternalDataBase &mapping_data) const diff --git a/deal.II/deal.II/source/fe/mapping_q1.cc b/deal.II/deal.II/source/fe/mapping_q1.cc index 83aed8f269..a56229b2a2 100644 --- a/deal.II/deal.II/source/fe/mapping_q1.cc +++ b/deal.II/deal.II/source/fe/mapping_q1.cc @@ -1168,40 +1168,72 @@ MappingQ1<1,2>::fill_fe_subface_values (const Triangulation<1,2>::cell_iterator template void MappingQ1::transform ( - const VectorSlice > > input, - VectorSlice > > output, - const typename Mapping::InternalDataBase &internal, + const VectorSlice > > input, + VectorSlice > > output, + const typename Mapping::InternalDataBase &mapping_data, const MappingType mapping_type) const { + AssertDimension (input.size(), output.size()); + Assert (dynamic_cast(&mapping_data) != 0, + ExcInternalError()); + const InternalData &data = static_cast(mapping_data); + + Tensor<1, spacedim> auxiliary; + switch (mapping_type) { case mapping_covariant: - transform_covariant(input, 0, output, internal); - return; -// case mapping_contravariant: -// transform_contravariant(input, 0, output, internal); -// return; + if (true) + { + Assert (data.update_flags & update_covariant_transformation, + typename FEValuesBase::ExcAccessToUninitializedField()); + + for (unsigned int i=0; i::ExcAccessToUninitializedField()); + + for (unsigned int i=0; i void MappingQ1::transform ( - const VectorSlice > > input, - VectorSlice > > output, + const VectorSlice > > input, + VectorSlice > > output, const typename Mapping::InternalDataBase &internal, const MappingType mapping_type) const { + AssertDimension (input.size(), output.size()); + switch (mapping_type) { case mapping_covariant: transform_covariant(input, 0, output, internal); return; -// case mapping_contravariant: -// transform_contravariant(input, 0, output, internal); -// return; + case mapping_contravariant: + transform_contravariant(input, 0, output, internal); + return; default: Assert(false, ExcNotImplemented()); } @@ -1227,82 +1259,16 @@ MappingQ1::transform_covariant ( Assert (data.update_flags & update_covariant_transformation, typename FEValuesBase::ExcAccessToUninitializedField()); - Assert (output.size() + offset <= input.size(), ExcInternalError()); - - for (unsigned int i=0; i -void -MappingQ1<1,2>::transform_covariant ( - const VectorSlice > > input, - const unsigned int offset, - VectorSlice > > output, - const Mapping<1,2>::InternalDataBase &mapping_data) const -{ - Assert (offset == 0, ExcInternalError()); - AssertDimension (input.size(), output.size()); - - // 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()); - - Assert (output.size() + offset <= input.size(), ExcInternalError()); - - Tensor<1,2> auxiliary; - auxiliary[1]=0.; - - for (unsigned int i=0; i -void -MappingQ1<2,3>::transform_covariant ( - const VectorSlice > > input, - const unsigned int offset, - VectorSlice > > output, - const Mapping<2,3>::InternalDataBase &mapping_data) const -{ - Assert (offset == 0, ExcInternalError()); - AssertDimension (input.size(), output.size()); - // 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()); - - Assert (output.size() + offset <= input.size(), ExcInternalError()); - - Tensor<1,3> auxiliary; - auxiliary[2]=0.; - + Tensor<1, spacedim> auxiliary; + for (unsigned int i=0; i @@ -1315,16 +1281,16 @@ MappingQ1::transform_covariant ( { Assert (offset == 0, ExcInternalError()); AssertDimension (input.size(), output.size()); - // ensure that the following cast is really correct: + + // 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 (output.size() + offset <= input.size(), ExcInternalError()); - + for (unsigned int i=0; i void MappingQ1:: transform_contravariant ( - const VectorSlice > > input, + const VectorSlice > > input, const unsigned int offset, VectorSlice > > output, const typename Mapping::InternalDataBase &mapping_data) const @@ -1378,9 +1344,15 @@ transform_contravariant ( typename FEValuesBase::ExcAccessToUninitializedField()); Assert (output.size() + offset <= input.size(), ExcInternalError()); - + + Tensor<1, spacedim> auxiliary; + for (unsigned int i=0; i void MappingQ1::transform_contravariant ( - const VectorSlice > > input, + const VectorSlice > > input, const unsigned int offset, VectorSlice > > output, const typename Mapping::InternalDataBase &mapping_data) const @@ -1408,12 +1380,43 @@ MappingQ1::transform_contravariant ( } +#if deal_II_dimension == 1 + +template <> +void +MappingQ1<1, 2>::transform_contravariant ( + const VectorSlice > > , + const unsigned int, + VectorSlice > > , + const Mapping<1,2>::InternalDataBase &) const +{ + Assert(false, ExcNotImplemented()); +} + +#endif + +#if deal_II_dimension == 2 + +template <> +void +MappingQ1<2, 3>::transform_contravariant ( + const VectorSlice > > , + const unsigned int, + VectorSlice > > , + const Mapping<2,3>::InternalDataBase &) const +{ + Assert(false, ExcNotImplemented()); +} + +#endif + + template Point -MappingQ1:: -transform_unit_to_real_cell (const typename Triangulation::cell_iterator &cell, - const Point &p) const +MappingQ1::transform_unit_to_real_cell ( + const typename Triangulation::cell_iterator& cell, + const Point& p) const { // Use the get_data function to // create an InternalData with data -- 2.39.5