From af52cfb4e83e3672e5b9df782b8a4843891a419a Mon Sep 17 00:00:00 2001 From: Jaeryun Yim Date: Thu, 28 Jan 2016 15:33:41 +0900 Subject: [PATCH] Modify the interface of the member variables and functions Compatible with the current development version of dealii library --- include/deal.II/fe/fe_p1nc.h | 111 ++++++++-------- source/fe/fe_p1nc.cc | 243 ++++++++++++++--------------------- 2 files changed, 153 insertions(+), 201 deletions(-) diff --git a/include/deal.II/fe/fe_p1nc.h b/include/deal.II/fe/fe_p1nc.h index 70ca8e173d..d7a0ae437e 100644 --- a/include/deal.II/fe/fe_p1nc.h +++ b/include/deal.II/fe/fe_p1nc.h @@ -49,58 +49,60 @@ private: { public: - std::vector > shape_values; - std::vector > > shape_gradients; + Table<2,double > shape_values; + Table<2,Tensor<1,2> > shape_gradients; + mutable std::vector > transformed_shape_gradients ; }; - virtual FiniteElement<2,2>::InternalDataBase * +virtual FiniteElement<2,2>::InternalDataBase * get_data (const UpdateFlags update_flags, - const Mapping<2,2> &mapping, - const Quadrature<2> &quadrature) const ; + const Mapping<2,2> &, + const Quadrature<2> &, + dealii::internal::FEValues::FiniteElementRelatedData<2,2> &output_data) const ; virtual void - fill_fe_values (const Mapping<2,2> &mapping, - const Triangulation<2,2>::cell_iterator &cell, + fill_fe_values (const Triangulation<2,2>::cell_iterator &cell, + const CellSimilarity::Similarity , const Quadrature<2> &quadrature, - const Mapping<2,2>::InternalDataBase &mapping_internal, - const FiniteElement<2,2>::InternalDataBase &fe_internal, + const Mapping<2,2> &mapping, + const Mapping<2,2>::InternalDataBase &, const internal::FEValues::MappingRelatedData<2,2> &mapping_data, - internal::FEValues::FiniteElementRelatedData<2,2> &output_data, - const CellSimilarity::Similarity cell_similarity) const; + const FiniteElement<2,2>::InternalDataBase &fe_internal, + internal::FEValues::FiniteElementRelatedData<2,2> &output_data) const; virtual void - fill_fe_face_values (const Mapping<2,2> &mapping, - const Triangulation<2,2>::cell_iterator &cell, - const unsigned int face_no, - const Quadrature<1> &quadrature, + fill_fe_face_values (const Triangulation<2,2>::cell_iterator &cell, + const unsigned int face_no, + const Quadrature<1> &quadrature, + const Mapping<2,2> &mapping, const Mapping<2,2>::InternalDataBase &mapping_internal, - const FiniteElement<2,2>::InternalDataBase &fe_internal, - const internal::FEValues::MappingRelatedData<2,2> &mapping_data, - internal::FEValues::FiniteElementRelatedData<2,2> &output_data) const; + const dealii::internal::FEValues::MappingRelatedData<2,2> &mapping_data, + const InternalDataBase &fe_internal, + dealii::internal::FEValues::FiniteElementRelatedData<2,2> &output_data) const; virtual void - fill_fe_subface_values (const Mapping<2,2> &mapping, - const Triangulation<2,2>::cell_iterator &cell, - const unsigned int face_no, - const unsigned int sub_no, - const Quadrature<1> &quadrature, + fill_fe_subface_values (const Triangulation<2,2>::cell_iterator &cell, + const unsigned int face_no, + const unsigned int sub_no, + const Quadrature<1> &quadrature, + const Mapping<2,2> &mapping, const Mapping<2,2>::InternalDataBase &mapping_internal, - const FiniteElement<2,2>::InternalDataBase &fe_internal, - const internal::FEValues::MappingRelatedData<2,2> &mapping_data, - internal::FEValues::FiniteElementRelatedData<2,2> &output_data) const; + const dealii::internal::FEValues::MappingRelatedData<2,2> &mapping_data, + const InternalDataBase &fe_internal, + dealii::internal::FEValues::FiniteElementRelatedData<2,2> &output_data) const; @@ -111,11 +113,7 @@ public: virtual std::string get_name () const ; - - - virtual UpdateFlags update_once (const UpdateFlags flags) const ; - - virtual UpdateFlags update_each (const UpdateFlags flags) const ; + virtual UpdateFlags requires_update_flags (const UpdateFlags flags) const ; const std::vector > &get_unit_face_support_points () const ; @@ -174,50 +172,51 @@ private: virtual FiniteElement<2,2>::InternalDataBase * get_data (const UpdateFlags update_flags, const Mapping<2,2> &, - const Quadrature<2> &) const ; + const Quadrature<2> &, + dealii::internal::FEValues::FiniteElementRelatedData<2,2> &output_data) const ; - virtual + virtual void - fill_fe_values (const Mapping<2,2> &mapping, - const Triangulation<2,2>::cell_iterator &cell, + fill_fe_values (const Triangulation<2,2>::cell_iterator &cell, + const CellSimilarity::Similarity , const Quadrature<2> &quadrature, - const Mapping<2,2>::InternalDataBase &mapping_internal, - const FiniteElement<2,2>::InternalDataBase &fe_internal, + const Mapping<2,2> &mapping, + const Mapping<2,2>::InternalDataBase &, const internal::FEValues::MappingRelatedData<2,2> &mapping_data, - internal::FEValues::FiniteElementRelatedData<2,2> &output_data, - const CellSimilarity::Similarity cell_similarity) const; + const FiniteElement<2,2>::InternalDataBase &fe_internal, + internal::FEValues::FiniteElementRelatedData<2,2> &output_data) const; virtual void - fill_fe_face_values (const Mapping<2,2> &mapping, - const Triangulation<2,2>::cell_iterator &cell, - const unsigned int face_no, - const Quadrature<1> &quadrature, + fill_fe_face_values (const Triangulation<2,2>::cell_iterator &cell, + const unsigned int face_no, + const Quadrature<1> &quadrature, + const Mapping<2,2> &mapping, const Mapping<2,2>::InternalDataBase &mapping_internal, - const FiniteElement<2,2>::InternalDataBase &fe_internal, - const internal::FEValues::MappingRelatedData<2,2> &mapping_data, - internal::FEValues::FiniteElementRelatedData<2,2> &output_data) const; + const dealii::internal::FEValues::MappingRelatedData<2,2> &mapping_data, + const InternalDataBase &fe_internal, + dealii::internal::FEValues::FiniteElementRelatedData<2,2> &output_data) const; virtual void - fill_fe_subface_values (const Mapping<2,2> &mapping, - const Triangulation<2,2>::cell_iterator &cell, - const unsigned int face_no, - const unsigned int sub_no, - const Quadrature<1> &quadrature, + fill_fe_subface_values (const Triangulation<2,2>::cell_iterator &cell, + const unsigned int face_no, + const unsigned int sub_no, + const Quadrature<1> &quadrature, + const Mapping<2,2> &mapping, const Mapping<2,2>::InternalDataBase &mapping_internal, - const FiniteElement<2,2>::InternalDataBase &fe_internal, - const internal::FEValues::MappingRelatedData<2,2> &mapping_data, - internal::FEValues::FiniteElementRelatedData<2,2> &output_data) const; + const dealii::internal::FEValues::MappingRelatedData<2,2> &mapping_data, + const InternalDataBase &fe_internal, + dealii::internal::FEValues::FiniteElementRelatedData<2,2> &output_data) const; @@ -226,9 +225,7 @@ public: virtual std::string get_name () const ; - virtual UpdateFlags update_once (const UpdateFlags flags) const ; - - virtual UpdateFlags update_each (const UpdateFlags flags) const ; + virtual UpdateFlags requires_update_flags (const UpdateFlags flags) const ; virtual FiniteElement<2,2> *clone () const ; diff --git a/source/fe/fe_p1nc.cc b/source/fe/fe_p1nc.cc index 4a33815ffd..66d058205a 100644 --- a/source/fe/fe_p1nc.cc +++ b/source/fe/fe_p1nc.cc @@ -36,7 +36,7 @@ std::vector FE_P1NCParametric::get_dpo_vector () { std::vector dpo(3); - dpo[0] = 1; //dofs per object: vertex + dpo[0] = 1; // dofs per object: vertex dpo[1] = 0; // line dpo[2] = 0; // quad return dpo; @@ -45,30 +45,29 @@ FE_P1NCParametric::get_dpo_vector () FiniteElement<2,2>::InternalDataBase * FE_P1NCParametric::get_data (const UpdateFlags update_flags, - const Mapping<2,2> &mapping, - const Quadrature<2> &quadrature) const + const Mapping<2,2> &, + const Quadrature<2> &quadrature, + dealii::internal::FEValues::FiniteElementRelatedData<2,2> &) const { InternalData *data = new InternalData; - data->update_once = update_once(update_flags); - data->update_each = update_each(update_flags); - data->update_flags = data->update_once | data->update_each; + data->update_each = requires_update_flags(update_flags); - const UpdateFlags flags(data->update_flags); + const UpdateFlags flags(data->update_each); const unsigned int n_q_points = quadrature.size(); // initialize shape value if (flags & update_values) - data->shape_values.resize (this->dofs_per_cell, - std::vector (n_q_points)); + data->shape_values.reinit (this->dofs_per_cell, + n_q_points); // initialize shape gradient if (flags & update_gradients) - data->shape_gradients.resize (this->dofs_per_cell, - std::vector > (n_q_points)); + data->shape_gradients.reinit (this->dofs_per_cell, + n_q_points); // update @@ -94,25 +93,27 @@ FE_P1NCParametric::get_data (const UpdateFlags update_flags, } -// get fe value in real cell from fedata in reference cell void -FE_P1NCParametric::fill_fe_values (const Mapping<2,2> &mapping, - const Triangulation<2,2>::cell_iterator &cell, +FE_P1NCParametric::fill_fe_values (const Triangulation<2,2>::cell_iterator &, + const CellSimilarity::Similarity cell_similarity, const Quadrature<2> &quadrature, + const Mapping<2,2> &mapping, const Mapping<2,2>::InternalDataBase &mapping_internal, + const internal::FEValues::MappingRelatedData<2,2> &, const FiniteElement<2,2>::InternalDataBase &fe_internal, - const internal::FEValues::MappingRelatedData<2,2> &mapping_data, - internal::FEValues::FiniteElementRelatedData<2,2> &output_data, - const CellSimilarity::Similarity cell_similarity) const + internal::FEValues::FiniteElementRelatedData<2,2> &output_data) const { Assert (dynamic_cast (&fe_internal) != 0, ExcInternalError()); const InternalData &fe_data = static_cast (fe_internal); - const UpdateFlags flags(fe_data.current_update_flags()); + const UpdateFlags flags(fe_data.update_each); + + // std::cout<<" ? Flag ? " + // << (flags) + // <dofs_per_cell; ++k) { // shape value @@ -123,10 +124,10 @@ FE_P1NCParametric::fill_fe_values (const Mapping<2,2> // shape gradient if (flags & update_gradients && cell_similarity != CellSimilarity::translation) - mapping.transform(fe_data.shape_gradients[k], + mapping.transform(make_array_view(fe_data.shape_gradients, k), mapping_covariant, mapping_internal, - output_data.shape_gradients[k]); + make_array_view(output_data.shape_gradients, k)); } @@ -134,14 +135,14 @@ FE_P1NCParametric::fill_fe_values (const Mapping<2,2> void -FE_P1NCParametric::fill_fe_face_values (const Mapping<2,2> &mapping, - const Triangulation<2,2>::cell_iterator &cell, - const unsigned int face_no, - const Quadrature<1> &quadrature, +FE_P1NCParametric::fill_fe_face_values (const Triangulation<2,2>::cell_iterator &cell, + const unsigned int face_no, + const Quadrature<1> &quadrature, + const Mapping<2,2> &mapping, const Mapping<2,2>::InternalDataBase &mapping_internal, - const FiniteElement<2,2>::InternalDataBase &fe_internal, - const internal::FEValues::MappingRelatedData<2,2> &mapping_data, - internal::FEValues::FiniteElementRelatedData<2,2> &output_data) const + const dealii::internal::FEValues::MappingRelatedData<2,2> &, + const InternalDataBase &fe_internal, + dealii::internal::FEValues::FiniteElementRelatedData<2,2> &output_data) const { @@ -157,7 +158,7 @@ FE_P1NCParametric::fill_fe_face_values (const Mapping<2,2> cell->face_rotation(face_no), quadrature.size()); - const UpdateFlags flags(fe_data.update_once | fe_data.update_each); + const UpdateFlags flags(fe_data.update_each); for (unsigned int k=0; kdofs_per_cell; ++k) { @@ -166,10 +167,18 @@ FE_P1NCParametric::fill_fe_face_values (const Mapping<2,2> output_data.shape_values(k,i) = fe_data.shape_values[k][i+offset]; if (flags & update_gradients) - mapping.transform(make_slice(fe_data.shape_gradients[k], offset, quadrature.size()), + { + const ArrayView > transformed_shape_gradients + = make_array_view(fe_data.transformed_shape_gradients, offset, quadrature.size()); + + mapping.transform(make_array_view(fe_data.shape_gradients, k, offset, quadrature.size()), mapping_covariant, mapping_internal, - output_data.shape_gradients[k]); + transformed_shape_gradients); + + for (unsigned int i=0; i void -FE_P1NCParametric::fill_fe_subface_values (const Mapping<2,2> &mapping, - const Triangulation<2,2>::cell_iterator &cell, - const unsigned int face_no, - const unsigned int sub_no, - const Quadrature<1> &quadrature, +FE_P1NCParametric::fill_fe_subface_values (const Triangulation<2,2>::cell_iterator &cell, + const unsigned int face_no, + const unsigned int sub_no, + const Quadrature<1> &quadrature, + const Mapping<2,2> &mapping, const Mapping<2,2>::InternalDataBase &mapping_internal, - const FiniteElement<2,2>::InternalDataBase &fe_internal, - const internal::FEValues::MappingRelatedData<2,2> &mapping_data, - internal::FEValues::FiniteElementRelatedData<2,2> &output_data) const + const dealii::internal::FEValues::MappingRelatedData<2,2> &, + const InternalDataBase &fe_internal, + dealii::internal::FEValues::FiniteElementRelatedData<2,2> &output_data) const { @@ -206,7 +215,7 @@ FE_P1NCParametric::fill_fe_subface_values (const Mapping<2,2> quadrature.size(), cell->subface_case(face_no)); - const UpdateFlags flags(fe_data.update_once | fe_data.update_each); + const UpdateFlags flags(fe_data.update_each); for (unsigned int k=0; kdofs_per_cell; ++k) { @@ -215,23 +224,30 @@ FE_P1NCParametric::fill_fe_subface_values (const Mapping<2,2> output_data.shape_values(k,i) = fe_data.shape_values[k][i+offset]; if (flags & update_gradients) - mapping.transform(make_slice(fe_data.shape_gradients[k], offset, quadrature.size()), + { + const ArrayView > transformed_shape_gradients + = make_array_view(fe_data.transformed_shape_gradients, offset, quadrature.size()); + + mapping.transform(make_array_view(fe_data.shape_gradients, k, offset, quadrature.size()), mapping_covariant, mapping_internal, - output_data.shape_gradients[k]); + transformed_shape_gradients); + + for (unsigned int i=0; i(FiniteElementData<2>(get_dpo_vector(), 1, 1, - FiniteElementData<2>::L2, - numbers::invalid_unsigned_int), + FiniteElementData<2>::L2), std::vector (1, false), get_nonzero_component()) { @@ -253,7 +269,7 @@ FE_P1NCParametric::FE_P1NCParametric() unit_face_support_points[1][0] = 1.0 ; - // CONSTRAINTS MATRIX INITIALIZATION + // constraints matrix initialization initialize_constraints () ; } @@ -266,15 +282,12 @@ std::string FE_P1NCParametric::get_name () const -UpdateFlags FE_P1NCParametric::update_once (const UpdateFlags flags) const -{ - return (update_default | (flags & update_values)); -} - -UpdateFlags FE_P1NCParametric::update_each (const UpdateFlags flags) const +UpdateFlags FE_P1NCParametric::requires_update_flags (const UpdateFlags flags) const { UpdateFlags out = update_default; + if (flags & update_values) + out |= update_values; if (flags & update_gradients) out |= update_gradients | update_covariant_transformation; if (flags & update_cell_normal_vectors) @@ -348,7 +361,7 @@ double FE_P1NCParametric::shape_value (const unsigned int i, double value = 0.0 ; - // P1NC with HALF COEFFICIENT + // P1NC with a half value switch (i) { case 0: @@ -369,23 +382,6 @@ double FE_P1NCParametric::shape_value (const unsigned int i, return value*0.5 ; - - // // Q1 for test - // switch (i) - // { - // case 0: - // return (1.0-p[0])*(1.0-p[1]) ; - // case 1: - // return p[0]*(1.0-p[1]) ; - // case 2: - // return (1.0-p[0])*p[1] ; - // case 3: - // return p[0]*p[1] ; - // default: - // return 0 ; - // }; - - } @@ -397,7 +393,7 @@ Tensor<1,2> FE_P1NCParametric::shape_grad (const unsigned int i, Tensor<1,2> grad ; - // P1NC with HALF COEFFICIENT + // P1NC with a half value switch (i) { case 0: @@ -422,37 +418,9 @@ Tensor<1,2> FE_P1NCParametric::shape_grad (const unsigned int i, return grad*0.5 ; - - // // Q1 for test - // switch (i) - // { - // case 0: - // grad[0] = p[1]-1.0 ; - // grad[1] = p[0]-1.0 ; - // return grad ; - // case 1: - // grad[0] = 1.0-p[1] ; - // grad[1] = -p[0] ; - // return grad ; - // case 2: - // grad[0] = -p[1] ; - // grad[1] = 1.0-p[0] ; - // return grad ; - // case 3: - // grad[0] = p[1] ; - // grad[1] = p[0] ; - // return grad ; - // default: - // return grad ; - // }; - - } -// 2015 05 13 CONSTRAINTS MATRIX FOR HANGING NODE -// BASED ON 'fe_q_base.cc' - void FE_P1NCParametric::initialize_constraints () { @@ -460,9 +428,6 @@ void FE_P1NCParametric::initialize_constraints () // Add midpoint constraint_points.push_back (Point<1> (0.5)); - // Now construct relation between destination (child) and source (mother) - // dofs. - interface_constraints .TableBase<2,double>::reinit (interface_constraints_size()); @@ -510,9 +475,7 @@ FE_P1NCNonparametric::get_data (const UpdateFlags update_flags, { FiniteElement<2,2>::InternalDataBase *data = new FiniteElement<2,2>::InternalDataBase; - data->update_once = update_once(update_flags); - data->update_each = update_each(update_flags); - data->update_flags = data->update_once | data->update_each; + data->update_each = requires_update_flags(update_flags); return data; @@ -524,17 +487,16 @@ FE_P1NCNonparametric::get_data (const UpdateFlags update_flags, void -FE_P1NCNonparametric::fill_fe_values (const Mapping<2,2> &mapping, - const Triangulation<2,2>::cell_iterator &cell, +FE_P1NCNonparametric::fill_fe_values (const Triangulation<2,2>::cell_iterator &cell, + const CellSimilarity::Similarity , const Quadrature<2> &quadrature, - const Mapping<2,2>::InternalDataBase &mapping_internal, - const FiniteElement<2,2>::InternalDataBase &fe_internal, + const Mapping<2,2> &mapping, + const Mapping<2,2>::InternalDataBase &, const internal::FEValues::MappingRelatedData<2,2> &mapping_data, - internal::FEValues::FiniteElementRelatedData<2,2> &output_data, - const CellSimilarity::Similarity cell_similarity) const - + const FiniteElement<2,2>::InternalDataBase &fe_internal, + internal::FEValues::FiniteElementRelatedData<2,2> &output_data) const { - const UpdateFlags flags(fe_internal.current_update_flags()) ; + const UpdateFlags flags(fe_internal.update_each) ; const unsigned int n_q_points = mapping_data.quadrature_points.size(); @@ -631,15 +593,14 @@ FE_P1NCNonparametric::fill_fe_values (const Mapping<2,2> void -FE_P1NCNonparametric::fill_fe_face_values (const Mapping<2,2> &mapping, - const Triangulation<2,2>::cell_iterator &cell, +FE_P1NCNonparametric::fill_fe_face_values (const Triangulation<2,2>::cell_iterator &cell, const unsigned int face_no, - const Quadrature<1> &quadrature, + const Quadrature<1> &quadrature, + const Mapping<2,2> &mapping, const Mapping<2,2>::InternalDataBase &mapping_internal, - const FiniteElement<2,2>::InternalDataBase &fe_internal, - const internal::FEValues::MappingRelatedData<2,2> &mapping_data, - internal::FEValues::FiniteElementRelatedData<2,2> &output_data) const - + const dealii::internal::FEValues::MappingRelatedData<2,2> &mapping_data, + const InternalDataBase &fe_internal, + dealii::internal::FEValues::FiniteElementRelatedData<2,2> &output_data) const {} @@ -649,15 +610,15 @@ FE_P1NCNonparametric::fill_fe_face_values (const Mapping<2,2> void -FE_P1NCNonparametric::fill_fe_subface_values (const Mapping<2,2> &mapping, - const Triangulation<2,2>::cell_iterator &cell, - const unsigned int face_no, - const unsigned int sub_no, - const Quadrature<1> &quadrature, +FE_P1NCNonparametric::fill_fe_subface_values (const Triangulation<2,2>::cell_iterator &cell, + const unsigned int face_no, + const unsigned int sub_no, + const Quadrature<1> &quadrature, + const Mapping<2,2> &mapping, const Mapping<2,2>::InternalDataBase &mapping_internal, - const FiniteElement<2,2>::InternalDataBase &fe_internal, - const internal::FEValues::MappingRelatedData<2,2> &mapping_data, - internal::FEValues::FiniteElementRelatedData<2,2> &output_data) const + const dealii::internal::FEValues::MappingRelatedData<2,2> &mapping_data, + const InternalDataBase &fe_internal, + dealii::internal::FEValues::FiniteElementRelatedData<2,2> &output_data) const {} @@ -668,8 +629,7 @@ FE_P1NCNonparametric::FE_P1NCNonparametric() FiniteElement<2,2>(FiniteElementData<2>(get_dpo_vector(), 1, 1, - FiniteElementData<2>::L2, - numbers::invalid_unsigned_int), + FiniteElementData<2>::L2), std::vector (1, false), get_nonzero_component()) { @@ -692,21 +652,16 @@ std::string FE_P1NCNonparametric::get_name () const } - -UpdateFlags FE_P1NCNonparametric::update_once (const UpdateFlags flags) const -{ - return (update_default ); - -} - -UpdateFlags FE_P1NCNonparametric::update_each (const UpdateFlags flags) const +UpdateFlags FE_P1NCNonparametric::requires_update_flags (const UpdateFlags flags) const { - UpdateFlags out = (update_default | (flags & update_values) | (flags & update_quadrature_points)) ; - - if (flags & update_gradients) - out |= update_gradients | update_covariant_transformation | update_JxW_values; - if (flags & update_cell_normal_vectors) - out |= update_cell_normal_vectors | update_JxW_values; + UpdateFlags out = update_default; + + if (flags & update_values) + out |= update_values | update_quadrature_points ; + if (flags & update_gradients) + out |= update_gradients ; + if (flags & update_cell_normal_vectors) + out |= update_cell_normal_vectors | update_JxW_values; return out; } -- 2.39.5