39#include <Kokkos_Macros.hpp>
92std::unique_ptr<FiniteElement<2, 2>>
95 return std::make_unique<FE_P1NC>(*
this);
100std::vector<unsigned int>
103 std::vector<unsigned int> dpo(3);
126 const double det = (mpt[0][0] - mpt[1][0]) * (mpt[2][1] - mpt[3][1]) -
127 (mpt[2][0] - mpt[3][0]) * (mpt[0][1] - mpt[1][1]);
131 ((mpt[2][1] - mpt[3][1]) * (0.5) - (mpt[0][1] - mpt[1][1]) * (0.5)) / det;
133 ((mpt[2][1] - mpt[3][1]) * (-0.5) - (mpt[0][1] - mpt[1][1]) * (0.5)) / det;
135 ((mpt[2][1] - mpt[3][1]) * (0.5) - (mpt[0][1] - mpt[1][1]) * (-0.5)) / det;
137 ((mpt[2][1] - mpt[3][1]) * (-0.5) - (mpt[0][1] - mpt[1][1]) * (-0.5)) / det;
140 (-(mpt[2][0] - mpt[3][0]) * (0.5) + (mpt[0][0] - mpt[1][0]) * (0.5)) / det;
142 (-(mpt[2][0] - mpt[3][0]) * (-0.5) + (mpt[0][0] - mpt[1][0]) * (0.5)) / det;
144 (-(mpt[2][0] - mpt[3][0]) * (0.5) + (mpt[0][0] - mpt[1][0]) * (-0.5)) / det;
146 (-(mpt[2][0] - mpt[3][0]) * (-0.5) + (mpt[0][0] - mpt[1][0]) * (-0.5)) /
149 coeffs[0][2] = 0.25 - cpt[0] * coeffs[0][0] - cpt[1] * coeffs[0][1];
150 coeffs[1][2] = 0.25 - cpt[0] * coeffs[1][0] - cpt[1] * coeffs[1][1];
151 coeffs[2][2] = 0.25 - cpt[0] * coeffs[2][0] - cpt[1] * coeffs[2][1];
152 coeffs[3][2] = 0.25 - cpt[0] * coeffs[3][0] - cpt[1] * coeffs[3][1];
159std::unique_ptr<FiniteElement<2, 2>::InternalDataBase>
161 const UpdateFlags update_flags,
167 auto data_ptr = std::make_unique<FiniteElement<2, 2>::InternalDataBase>();
183std::unique_ptr<FiniteElement<2, 2>::InternalDataBase>
185 const UpdateFlags update_flags,
193 auto data_ptr = std::make_unique<FiniteElement<2, 2>::InternalDataBase>();
209std::unique_ptr<FiniteElement<2, 2>::InternalDataBase>
211 const UpdateFlags update_flags,
217 auto data_ptr = std::make_unique<FiniteElement<2, 2>::InternalDataBase>();
265 Point<2>(coeffs[k][0], coeffs[k][1]);
273 const unsigned int face_no,
278 const InternalDataBase &fe_internal,
284 const UpdateFlags flags(fe_internal.update_each);
297 for (
unsigned int i = 0; i < quadrature_on_face.
size(); ++i)
301 mapping.transform_unit_to_real_cell(cell,
302 quadrature_on_face.
point(i));
305 (coeffs[k][0] * quadrature_point[0] +
306 coeffs[k][1] * quadrature_point[1] + coeffs[k][2]);
310 for (
unsigned int i = 0; i < quadrature_on_face.
size(); ++i)
313 Point<2>(coeffs[k][0], coeffs[k][1]);
321 const unsigned int face_no,
322 const unsigned int sub_no,
327 const InternalDataBase &fe_internal,
331 const UpdateFlags flags(fe_internal.update_each);
346 for (
unsigned int i = 0; i < quadrature_on_subface.
size(); ++i)
351 mapping.transform_unit_to_real_cell(
352 cell, quadrature_on_subface.
point(i));
355 (coeffs[k][0] * quadrature_point[0] +
356 coeffs[k][1] * quadrature_point[1] + coeffs[k][2]);
361 for (
unsigned int i = 0; i < quadrature_on_subface.
size(); ++i)
364 Point<2>(coeffs[k][0], coeffs[k][1]);
virtual std::unique_ptr< FiniteElement< 2, 2 >::InternalDataBase > get_face_data(const UpdateFlags update_flags, const Mapping< 2, 2 > &, const hp::QCollection< 1 > &quadrature, ::internal::FEValuesImplementation::FiniteElementRelatedData< 2, 2 > &output_data) const override
static ndarray< double, 4, 3 > get_linear_shape_coefficients(const Triangulation< 2, 2 >::cell_iterator &cell)
virtual void 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 internal::FEValuesImplementation::MappingRelatedData< 2, 2 > &mapping_data, const InternalDataBase &fe_internal, ::internal::FEValuesImplementation::FiniteElementRelatedData< 2, 2 > &output_data) const override
virtual std::unique_ptr< FiniteElement< 2, 2 > > clone() const override
virtual void fill_fe_face_values(const Triangulation< 2, 2 >::cell_iterator &cell, const unsigned int face_no, const hp::QCollection< 1 > &quadrature, const Mapping< 2, 2 > &mapping, const Mapping< 2, 2 >::InternalDataBase &mapping_internal, const internal::FEValuesImplementation::MappingRelatedData< 2, 2 > &mapping_data, const InternalDataBase &fe_internal, ::internal::FEValuesImplementation::FiniteElementRelatedData< 2, 2 > &output_data) const override
virtual void fill_fe_values(const Triangulation< 2, 2 >::cell_iterator &cell, const CellSimilarity::Similarity cell_similarity, const Quadrature< 2 > &quadrature, const Mapping< 2, 2 > &mapping, const Mapping< 2, 2 >::InternalDataBase &mapping_internal, const internal::FEValuesImplementation::MappingRelatedData< 2, 2 > &mapping_data, const FiniteElement< 2, 2 >::InternalDataBase &fe_internal, internal::FEValuesImplementation::FiniteElementRelatedData< 2, 2 > &output_data) const override
void initialize_constraints()
virtual std::unique_ptr< FiniteElement< 2, 2 >::InternalDataBase > get_data(const UpdateFlags update_flags, const Mapping< 2, 2 > &, const Quadrature< 2 > &quadrature, ::internal::FEValuesImplementation::FiniteElementRelatedData< 2, 2 > &output_data) const override
virtual std::unique_ptr< FiniteElement< 2, 2 >::InternalDataBase > get_subface_data(const UpdateFlags update_flags, const Mapping< 2, 2 > &, const Quadrature< 1 > &quadrature, ::internal::FEValuesImplementation::FiniteElementRelatedData< 2, 2 > &output_data) const override
virtual UpdateFlags requires_update_flags(const UpdateFlags flags) const override
static std::vector< unsigned int > get_dpo_vector()
virtual std::string get_name() const override
unsigned int n_dofs_per_cell() const
FiniteElementData(const std::vector< unsigned int > &dofs_per_object, const unsigned int n_components, const unsigned int degree, const Conformity conformity=unknown, const BlockIndices &block_indices=BlockIndices())
ReferenceCell< dim > reference_cell() const
std::vector< std::vector< Point< dim - 1 > > > unit_face_support_points
FiniteElement(const FiniteElementData< dim > &fe_data, const std::vector< bool > &restriction_is_additive_flags, const std::vector< ComponentMask > &nonzero_components)
TableIndices< 2 > interface_constraints_size() const
FullMatrix< double > interface_constraints
Abstract base class for mapping classes.
static void project_to_subface(const ReferenceCell< dim > &reference_cell, const SubQuadrature &quadrature, const unsigned int face_no, const unsigned int subface_no, std::vector< Point< dim > > &q_points, const RefinementCase< dim - 1 > &ref_case=RefinementCase< dim - 1 >::isotropic_refinement)
static void project_to_face(const ReferenceCell< dim > &reference_cell, const SubQuadrature &quadrature, const unsigned int face_no, std::vector< Point< dim > > &q_points)
const Point< dim > & point(const unsigned int i) const
unsigned int size() const
Point< spacedim > & vertex(const unsigned int i) const
unsigned int size() const
#define DEAL_II_NAMESPACE_OPEN
#define DEAL_II_NAMESPACE_CLOSE
#define AssertDimension(dim1, dim2)
TriaIterator< CellAccessor< dim, spacedim > > cell_iterator
@ update_hessians
Second derivatives of shape functions.
@ update_values
Shape function values.
@ update_normal_vectors
Normal vectors.
@ update_JxW_values
Transformed quadrature weights.
@ update_gradients
Shape function gradients.
@ update_quadrature_points
Transformed quadrature points.
@ update_default
No update.
MappingQ< dim, spacedim > StaticMappingQ1< dim, spacedim >::mapping
constexpr types::geometric_orientation default_geometric_orientation
typename internal::ndarray::HelperArray< T, Ns... >::type ndarray
* const unsigned int n_q_points