15#ifndef dealii_non_matching_quadrature_generator_h
16#define dealii_non_matching_quadrature_generator_h
41 namespace QuadratureGeneratorImplementation
43 template <
int dim,
int spacedim>
48 namespace DiscreteQuadratureGeneratorImplementation
339 const unsigned int face_index);
348 const unsigned int face_index);
449 const unsigned int face_index);
458 const unsigned int face_index);
543 template <
typename Number>
570 std::unique_ptr<internal::DiscreteQuadratureGeneratorImplementation::
571 CellWiseFunction<dim>>
605 template <
typename Number>
621 const unsigned int face_index);
629 unsigned int face_index);
634 std::unique_ptr<internal::DiscreteQuadratureGeneratorImplementation::
635 CellWiseFunction<dim>>
642 namespace QuadratureGeneratorImplementation
712 std::vector<double> &roots);
723 const unsigned int recursion_depth,
724 std::vector<double> &roots);
892 template <
int dim,
int spacedim>
913 const unsigned int height_function_direction,
936 const std::vector<std::reference_wrapper<
const Function<dim>>>
939 const unsigned int height_function_direction,
1022 template <
int dim,
int spacedim>
1149 template <
int dim,
int spacedim>
1173 const unsigned int n_box_splits);
1191 const unsigned int height_function_direction,
1192 const std::vector<std::reference_wrapper<
const Function<dim>>>
1195 const unsigned int n_box_splits);
1204 const unsigned int height_function_direction,
1205 const std::vector<std::reference_wrapper<
const Function<dim>>>
1216 const std::vector<std::reference_wrapper<
const Function<dim>>>
1219 const std::optional<HeightDirectionData> &direction_data,
1220 const unsigned int n_box_splits);
1233 const std::vector<std::reference_wrapper<
const Function<dim>>>
1272 template <
int spacedim>
1292 const unsigned int n_box_splits);
1307 create_surface_points(
1308 const std::vector<std::reference_wrapper<
const Function<1>>>
1325 const unsigned int direction = 0;
1332 const double unit_weight = 1;
1347 const double weight,
1351 const unsigned int component_in_dim,
1364 const std::vector<std::reference_wrapper<
const Function<dim>>>
1397 std::pair<double, double>
1435 std::optional<HeightDirectionData>
1442 namespace DiscreteQuadratureGeneratorImplementation
1482 virtual unsigned int
void generate(const typename Triangulation< dim >::active_cell_iterator &cell, const unsigned int face_index)
std::unique_ptr< internal::DiscreteQuadratureGeneratorImplementation::CellWiseFunction< dim > > reference_space_level_set
void generate_fe_q_iso_q1(const BoundingBox< dim > &unit_box, unsigned int face_index)
AdditionalQGeneratorData AdditionalData
void generate(const typename Triangulation< dim >::active_cell_iterator &cell)
AdditionalQGeneratorData AdditionalData
std::unique_ptr< internal::DiscreteQuadratureGeneratorImplementation::CellWiseFunction< dim > > reference_space_level_set
void generate_fe_q_iso_q1(const BoundingBox< dim > &unit_box)
Quadrature< 0 > outside_quadrature
Quadrature< 0 > inside_quadrature
const ImmersedSurfaceQuadrature< 0, 1 > surface_quadrature
const Quadrature< dim - 1 > & get_inside_quadrature() const
void generate(const Function< dim > &level_set, const BoundingBox< dim > &box, const unsigned int face_index)
ImmersedSurfaceQuadrature< dim - 1, dim > surface_quadrature
void set_1D_quadrature(const unsigned int q_index)
AdditionalQGeneratorData AdditionalData
void generate_append(const Function< dim > &level_set, const BoundingBox< dim > &box, const unsigned int face_index)
const ImmersedSurfaceQuadrature< dim - 1, dim > & get_surface_quadrature() const
QuadratureGenerator< dim - 1 > quadrature_generator
const Quadrature< dim - 1 > & get_outside_quadrature() const
void generate_append(const Function< dim > &level_set, const BoundingBox< dim > &box)
void set_1D_quadrature(const unsigned int q_index)
AdditionalQGeneratorData AdditionalData
const Quadrature< dim > & get_inside_quadrature() const
const Quadrature< dim > & get_outside_quadrature() const
internal::QuadratureGeneratorImplementation::QGenerator< dim, dim > q_generator
const ImmersedSurfaceQuadrature< dim > & get_surface_quadrature() const
void generate(const Function< dim > &level_set, const BoundingBox< dim > &box)
virtual unsigned int n_subdivisions() const =0
virtual void set_subcell(const std::vector< unsigned int > &mask, const BoundingBox< dim > &subcell_box)=0
virtual ~CellWiseFunction()=default
virtual bool is_fe_q_iso_q1() const =0
virtual void set_active_cell(const typename Triangulation< dim >::active_cell_iterator &cell)=0
void push_back(const Point< dim > &point, const double weight)
ExtendableQuadrature()=default
const AdditionalQGeneratorData additional_data
const ObserverPointer< const hp::QCollection< 1 > > q_collection1D
const QPartitioning< dim > & get_quadratures() const
QPartitioning< dim > q_partitioning
const Point< 0 > zero_dim_point
std::vector< double > roots
void set_1D_quadrature(const unsigned int q_index)
void create_high_dim_quadratures(const unsigned int height_function_direction, const std::vector< std::reference_wrapper< const Function< dim > > > &level_sets, const BoundingBox< dim > &box)
void generate(const std::vector< std::reference_wrapper< const Function< dim > > > &level_sets, const BoundingBox< dim > &box, const unsigned int n_box_splits)
hp::QCollection< dim > tensor_products
void split_box_and_recurse(const std::vector< std::reference_wrapper< const Function< dim > > > &level_sets, const BoundingBox< dim > &box, const std::optional< HeightDirectionData > &direction_data, const unsigned int n_box_splits)
void use_midpoint_method(const std::vector< std::reference_wrapper< const Function< dim > > > &level_sets, const BoundingBox< dim > &box)
UpThroughDimensionCreator< dim, spacedim > up_through_dimension_creator
void create_low_dim_quadratures(const unsigned int height_function_direction, const std::vector< std::reference_wrapper< const Function< dim > > > &level_sets, const BoundingBox< dim > &box, const unsigned int n_box_splits)
QGenerator< dim - 1, spacedim > low_dim_algorithm
ExtendableQuadrature< dim > & quadrature_by_definiteness(const Definiteness definiteness)
ExtendableQuadrature< dim > positive
ImmersedSurfaceQuadrature< dim > surface
ExtendableQuadrature< dim > negative
ExtendableQuadrature< dim > indefinite
const AdditionalData additional_data
void find_roots(const std::vector< std::reference_wrapper< const Function< 1 > > > &functions, const BoundingBox< 1 > &interval, std::vector< double > &roots)
void generate(const std::vector< std::reference_wrapper< const Function< dim > > > &level_sets, const BoundingBox< dim > &box, const Quadrature< dim - 1 > &low_dim_quadrature, const unsigned int height_function_direction, QPartitioning< dim > &q_partitioning)
std::vector< Functions::PointRestriction< dim - 1 > > point_restrictions
void set_1D_quadrature(const unsigned int q_index)
void create_surface_point(const Point< dim - 1 > &point, const double weight, const std::vector< std::reference_wrapper< const Function< dim > > > &level_sets, const BoundingBox< dim > &box, const unsigned int height_function_direction, ImmersedSurfaceQuadrature< dim > &surface_quadrature)
const AdditionalQGeneratorData additional_data
std::vector< double > roots
const ObserverPointer< const hp::QCollection< 1 > > q_collection1D
#define DEAL_II_NAMESPACE_OPEN
#define DEAL_II_NAMESPACE_CLOSE
std::vector< index_type > data
std::pair< double, double > find_extreme_values(const std::vector< FunctionBounds< dim > > &all_function_bounds)
std::optional< HeightDirectionData > find_best_height_direction(const std::vector< FunctionBounds< dim > > &all_function_bounds)
void tensor_point_with_1D_quadrature(const Point< dim - 1 > &point, const double weight, const Quadrature< 1 > &quadrature1D, const double start, const double end, const unsigned int component_in_dim, ExtendableQuadrature< dim > &quadrature)
Definiteness pointwise_definiteness(const std::vector< std::reference_wrapper< const Function< dim > > > &functions, const Point< dim > &point)
double min_distance_between_roots
unsigned int max_box_splits
double root_finder_tolerance
double lower_bound_implicit_function
unsigned int max_root_finder_splits
double limit_to_be_definite
std::array< std::pair< double, double >, dim > gradient
std::pair< double, double > value
unsigned int max_iterations
unsigned int max_recursion_depth