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
342 const unsigned int face_index);
351 const unsigned int face_index);
452 const unsigned int face_index);
461 const unsigned int face_index);
546 template <
typename VectorType>
550 const VectorType &level_set,
573 std::unique_ptr<internal::DiscreteQuadratureGeneratorImplementation::
574 CellWiseFunction<dim>>
608 template <
typename VectorType>
612 const VectorType &level_set,
624 const unsigned int face_index);
632 unsigned int face_index);
637 std::unique_ptr<internal::DiscreteQuadratureGeneratorImplementation::
638 CellWiseFunction<dim>>
645 namespace QuadratureGeneratorImplementation
715 std::vector<double> &roots);
726 const unsigned int recursion_depth,
727 std::vector<double> &roots);
895 template <
int dim,
int spacedim>
916 const unsigned int height_function_direction,
939 const std::vector<std::reference_wrapper<
const Function<dim>>>
942 const unsigned int height_function_direction,
1025 template <
int dim,
int spacedim>
1152 template <
int dim,
int spacedim>
1176 const unsigned int n_box_splits);
1194 const unsigned int height_function_direction,
1195 const std::vector<std::reference_wrapper<
const Function<dim>>>
1198 const unsigned int n_box_splits);
1207 const unsigned int height_function_direction,
1208 const std::vector<std::reference_wrapper<
const Function<dim>>>
1219 const std::vector<std::reference_wrapper<
const Function<dim>>>
1222 const std::optional<HeightDirectionData> &direction_data,
1223 const unsigned int n_box_splits);
1236 const std::vector<std::reference_wrapper<
const Function<dim>>>
1275 template <
int spacedim>
1295 const unsigned int n_box_splits);
1310 create_surface_points(
1311 const std::vector<std::reference_wrapper<
const Function<1>>>
1328 const unsigned int direction = 0;
1335 const double unit_weight = 1;
1350 const double weight,
1354 const unsigned int component_in_dim,
1367 const std::vector<std::reference_wrapper<
const Function<dim>>>
1400 std::pair<double, double>
1438 std::optional<HeightDirectionData>
1445 namespace DiscreteQuadratureGeneratorImplementation
1485 virtual unsigned int
DiscreteFaceQuadratureGenerator(const hp::QCollection< 1 > &quadratures1D, const DoFHandler< dim > &dof_handler, const VectorType &level_set, const AdditionalData &additional_data=AdditionalData())
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)
DiscreteQuadratureGenerator(const hp::QCollection< 1 > &quadratures1D, const DoFHandler< dim > &dof_handler, const VectorType &level_set, const AdditionalData &additional_data=AdditionalData())
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)
FaceQuadratureGenerator(const hp::QCollection< 1 > &quadratures1D, const AdditionalData &additional_data=AdditionalData())
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
QuadratureGenerator(const hp::QCollection< 1 > &quadratures1D, const AdditionalData &additional_data=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 SmartPointer< const hp::QCollection< 1 > > q_collection1D
const AdditionalQGeneratorData additional_data
QGeneratorBase(const hp::QCollection< 1 > &q_collection1D, const AdditionalQGeneratorData &additional_data)
const QPartitioning< dim > & get_quadratures() const
QPartitioning< dim > q_partitioning
const Point< 0 > zero_dim_point
std::vector< double > roots
QGenerator(const hp::QCollection< 1 > &q_collection1D, const AdditionalQGeneratorData &additional_data)
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)
RootFinder(const AdditionalData &data=AdditionalData())
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 SmartPointer< const hp::QCollection< 1 > > q_collection1D
UpThroughDimensionCreator(const hp::QCollection< 1 > &q_collection1D, const AdditionalQGeneratorData &additional_data)
#define DEAL_II_NAMESPACE_OPEN
#define DEAL_II_NAMESPACE_CLOSE
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
AdditionalQGeneratorData(const unsigned int max_box_splits=4, const double lower_bound_implicit_function=1e-11, const double min_distance_between_roots=1e-12, const double limit_to_be_definite=1e-11, const double root_finder_tolerance=1e-12, const unsigned int max_root_finder_splits=2, bool split_in_half=true)
std::array< std::pair< double, double >, dim > gradient
std::pair< double, double > value
AdditionalData(const double tolerance=1e-12, const unsigned int max_recursion_depth=2, const unsigned int max_iterations=500)
unsigned int max_iterations
unsigned int max_recursion_depth