16#ifndef dealii_non_matching_quadrature_generator_h
17#define dealii_non_matching_quadrature_generator_h
42 namespace QuadratureGeneratorImplementation
44 template <
int dim,
int spacedim>
49 namespace DiscreteQuadratureGeneratorImplementation
323 const unsigned int face_index);
418 const unsigned int face_index);
503 template <
class VectorType>
507 const VectorType & level_set,
524 std::unique_ptr<internal::DiscreteQuadratureGeneratorImplementation::
525 CellWiseFunction<dim>>
559 template <
class VectorType>
563 const VectorType & level_set,
575 const unsigned int face_index);
581 std::unique_ptr<internal::DiscreteQuadratureGeneratorImplementation::
582 CellWiseFunction<dim>>
589 namespace QuadratureGeneratorImplementation
659 std::vector<double> & roots);
670 const unsigned int recursion_depth,
671 std::vector<double> & roots);
827 template <
int dim,
int spacedim>
848 const unsigned int height_function_direction,
871 const std::vector<std::reference_wrapper<
const Function<dim>>>
874 const unsigned int height_function_direction,
957 template <
int dim,
int spacedim>
1084 template <
int dim,
int spacedim>
1108 const unsigned int n_box_splits);
1126 const unsigned int height_function_direction,
1127 const std::vector<std::reference_wrapper<
const Function<dim>>>
1130 const unsigned int n_box_splits);
1139 const unsigned int height_function_direction,
1140 const std::vector<std::reference_wrapper<
const Function<dim>>>
1151 const std::vector<std::reference_wrapper<
const Function<dim>>>
1154 const std_cxx17::optional<HeightDirectionData> &direction_data,
1155 const unsigned int n_box_splits);
1168 const std::vector<std::reference_wrapper<
const Function<dim>>>
1207 template <
int spacedim>
1227 const unsigned int n_box_splits);
1242 create_surface_points(
1243 const std::vector<std::reference_wrapper<
const Function<1>>>
1260 const unsigned int direction = 0;
1267 const double unit_weight = 1;
1282 const double weight,
1286 const unsigned int component_in_dim,
1299 const std::vector<std::reference_wrapper<
const Function<dim>>>
1332 std::pair<double, double>
1370 std_cxx17::optional<HeightDirectionData>
1377 namespace DiscreteQuadratureGeneratorImplementation
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
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
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
const ImmersedSurfaceQuadrature< dim - 1, dim > & get_surface_quadrature() const
QuadratureGenerator< dim - 1 > quadrature_generator
const Quadrature< dim - 1 > & get_outside_quadrature() const
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 ~CellWiseFunction()=default
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
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 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 split_box_and_recurse(const std::vector< std::reference_wrapper< const Function< dim > > > &level_sets, const BoundingBox< dim > &box, const std_cxx17::optional< HeightDirectionData > &direction_data, const unsigned int n_box_splits)
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 SmartPointer< const hp::QCollection< 1 > > q_collection1D
const Point< dim > & point(const unsigned int i) const
double weight(const unsigned int i) const
#define DEAL_II_NAMESPACE_OPEN
#define DEAL_II_NAMESPACE_CLOSE
std_cxx17::optional< HeightDirectionData > find_best_height_direction(const std::vector< FunctionBounds< dim > > &all_function_bounds)
std::pair< double, double > find_extreme_values(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