const unsigned int quad_no,
const unsigned int fe_degree,
const unsigned int n_q_points,
- const bool is_interior_face);
+ const bool is_interior_face,
+ const unsigned int active_fe_index,
+ const unsigned int active_quad_index);
/**
* Constructor that comes with reduced functionality and works similar as
const unsigned int quad_no,
const unsigned int fe_degree,
const unsigned int n_q_points,
- const bool is_interior_face);
+ const bool is_interior_face,
+ const unsigned int active_fe_index,
+ const unsigned int active_quad_index);
/**
* Constructor that comes with reduced functionality and works similar as
const unsigned int quad_no,
const unsigned int fe_degree,
const unsigned int n_q_points,
- const bool is_interior_face = true);
+ const bool is_interior_face = true,
+ const unsigned int active_fe_index = numbers::invalid_unsigned_int,
+ const unsigned int active_quad_index = numbers::invalid_unsigned_int);
/**
* Constructor with reduced functionality for similar usage of FEEvaluation
const unsigned int quad_no,
const unsigned int fe_degree,
const unsigned int n_q_points,
- const bool is_interior_face = true);
+ const bool is_interior_face = true,
+ const unsigned int active_fe_index = numbers::invalid_unsigned_int,
+ const unsigned int active_quad_index = numbers::invalid_unsigned_int);
/**
* Constructor with reduced functionality for similar usage of FEEvaluation
const unsigned int quad_no,
const unsigned int dofs_per_cell,
const unsigned int n_q_points,
- const bool is_interior_face = true);
+ const bool is_interior_face = true,
+ const unsigned int active_fe_index = numbers::invalid_unsigned_int,
+ const unsigned int active_quad_index = numbers::invalid_unsigned_int);
/**
* Constructor with reduced functionality for similar usage of FEEvaluation
const unsigned int quad_no,
const unsigned int fe_degree,
const unsigned int n_q_points,
- const bool is_interior_face = true);
+ const bool is_interior_face = true,
+ const unsigned int active_fe_index = numbers::invalid_unsigned_int,
+ const unsigned int active_quad_index = numbers::invalid_unsigned_int);
/**
* Constructor with reduced functionality for similar usage of FEEvaluation
* same base element of a FESystem needs to be set for the components
* between @p first_selected_component and
* <code>first_selected_component+n_components_</code>.
+ *
+ * @param active_fe_index If matrix_free was set up with DoFHandler
+ * objects with hp::FECollections, this parameter selects to which
+ * DoFHandler/AffineConstraints pair the given evaluator should be attached
+ * to.
+ *
+ * @param active_quad_index If matrix_free was set up with hp::Collection
+ * objects, this parameter selects the appropriate number of the quadrature
+ * formula.
*/
- FEEvaluation(const MatrixFree<dim, Number, VectorizedArrayType> &matrix_free,
- const unsigned int dof_no = 0,
- const unsigned int quad_no = 0,
- const unsigned int first_selected_component = 0);
+ FEEvaluation(
+ const MatrixFree<dim, Number, VectorizedArrayType> &matrix_free,
+ const unsigned int dof_no = 0,
+ const unsigned int quad_no = 0,
+ const unsigned int first_selected_component = 0,
+ const unsigned int active_fe_index = numbers::invalid_unsigned_int,
+ const unsigned int active_quad_index = numbers::invalid_unsigned_int);
/**
* Constructor that comes with reduced functionality and works similar as
* selects the number of the base element in FESystem. Note that this does
* not directly relate to the component of the respective element due to the
* possibility for a multiplicity in the element.
+ *
+ * @param active_fe_index If matrix_free was set up with DoFHandler
+ * objects with hp::FECollections, this parameter selects to which
+ * DoFHandler/AffineConstraints pair the given evaluator should be attached
+ * to.
+ *
+ * @param active_quad_index If matrix_free was set up with hp::Collection
+ * objects, this parameter selects the appropriate number of the quadrature
+ * formula.
*/
FEFaceEvaluation(
const MatrixFree<dim, Number, VectorizedArrayType> &matrix_free,
const bool is_interior_face = true,
const unsigned int dof_no = 0,
const unsigned int quad_no = 0,
- const unsigned int first_selected_component = 0);
+ const unsigned int first_selected_component = 0,
+ const unsigned int active_fe_index = numbers::invalid_unsigned_int,
+ const unsigned int active_quad_index = numbers::invalid_unsigned_int);
/**
* Initializes the operation pointer to the current face. This method is the
const unsigned int quad_no_in,
const unsigned int fe_degree,
const unsigned int n_q_points,
- const bool is_interior_face)
+ const bool is_interior_face,
+ const unsigned int active_fe_index_in,
+ const unsigned int active_quad_index_in)
: scratch_data_array(data_in.acquire_scratch_data())
, quad_no(quad_no_in)
, active_fe_index(fe_degree != numbers::invalid_unsigned_int ?
data_in.get_dof_info(dof_no).fe_index_from_degree(
first_selected_component,
fe_degree) :
- 0)
+ (active_fe_index_in != numbers::invalid_unsigned_int ?
+ active_fe_index_in :
+ 0))
, active_quad_index(fe_degree != numbers::invalid_unsigned_int ?
(is_face ? data_in.get_mapping_info()
.face_data[quad_no_in]
data_in.get_mapping_info()
.cell_data[quad_no_in]
.quad_index_from_n_q_points(n_q_points)) :
- 0)
+ (active_quad_index_in != numbers::invalid_unsigned_int ?
+ active_quad_index_in :
+ 0))
, n_quadrature_points(
fe_degree != numbers::invalid_unsigned_int ?
n_q_points :
const unsigned int quad_no_in,
const unsigned int fe_degree,
const unsigned int n_q_points,
- const bool is_interior_face)
+ const bool is_interior_face,
+ const unsigned int active_fe_index,
+ const unsigned int active_quad_index)
: FEEvaluationBaseData<dim, Number, is_face, VectorizedArrayType>(
data_in,
dof_no,
quad_no_in,
fe_degree,
n_q_points,
- is_interior_face)
+ is_interior_face,
+ active_fe_index,
+ active_quad_index)
, n_fe_components(data_in.get_dof_info(dof_no).start_components.back())
, dof_values_initialized(false)
, values_quad_initialized(false)
const unsigned int quad_no_in,
const unsigned int fe_degree,
const unsigned int n_q_points,
- const bool is_interior_face)
+ const bool is_interior_face,
+ const unsigned int active_fe_index,
+ const unsigned int active_quad_index)
: FEEvaluationBase<dim, n_components_, Number, is_face, VectorizedArrayType>(
data_in,
dof_no,
quad_no_in,
fe_degree,
n_q_points,
- is_interior_face)
+ is_interior_face,
+ active_fe_index,
+ active_quad_index)
{}
const unsigned int quad_no_in,
const unsigned int fe_degree,
const unsigned int n_q_points,
- const bool is_interior_face)
+ const bool is_interior_face,
+ const unsigned int active_fe_index,
+ const unsigned int active_quad_index)
: FEEvaluationBase<dim, 1, Number, is_face, VectorizedArrayType>(
data_in,
dof_no,
quad_no_in,
fe_degree,
n_q_points,
- is_interior_face)
+ is_interior_face,
+ active_fe_index,
+ active_quad_index)
{}
const unsigned int quad_no_in,
const unsigned int fe_degree,
const unsigned int n_q_points,
- const bool is_interior_face)
+ const bool is_interior_face,
+ const unsigned int active_fe_index,
+ const unsigned int active_quad_index)
: FEEvaluationBase<dim, dim, Number, is_face, VectorizedArrayType>(
data_in,
dof_no,
quad_no_in,
fe_degree,
n_q_points,
- is_interior_face)
+ is_interior_face,
+ active_fe_index,
+ active_quad_index)
{}
const unsigned int quad_no_in,
const unsigned int fe_degree,
const unsigned int n_q_points,
- const bool is_interior_face)
+ const bool is_interior_face,
+ const unsigned int active_fe_index,
+ const unsigned int active_quad_index)
: FEEvaluationBase<1, 1, Number, is_face, VectorizedArrayType>(
data_in,
dof_no,
quad_no_in,
fe_degree,
n_q_points,
- is_interior_face)
+ is_interior_face,
+ active_fe_index,
+ active_quad_index)
{}
FEEvaluation(const MatrixFree<dim, Number, VectorizedArrayType> &data_in,
const unsigned int fe_no,
const unsigned int quad_no,
- const unsigned int first_selected_component)
+ const unsigned int first_selected_component,
+ const unsigned int active_fe_index,
+ const unsigned int active_quad_index)
: BaseClass(data_in,
fe_no,
first_selected_component,
quad_no,
fe_degree,
- static_n_q_points)
+ static_n_q_points,
+ true /*note: this is not a face*/,
+ active_fe_index,
+ active_quad_index)
, dofs_per_component(this->data->dofs_per_component_on_cell)
, dofs_per_cell(this->data->dofs_per_component_on_cell * n_components_)
, n_q_points(this->data->n_q_points)
const bool is_interior_face,
const unsigned int dof_no,
const unsigned int quad_no,
- const unsigned int first_selected_component)
+ const unsigned int first_selected_component,
+ const unsigned int active_fe_index,
+ const unsigned int active_quad_index)
: BaseClass(matrix_free,
dof_no,
first_selected_component,
quad_no,
fe_degree,
static_n_q_points,
- is_interior_face)
+ is_interior_face,
+ active_fe_index,
+ active_quad_index)
, dofs_per_component(this->data->dofs_per_component_on_cell)
, dofs_per_cell(this->data->dofs_per_component_on_cell * n_components_)
, n_q_points(this->data->n_q_points_face)