active_fe_index | FEEvaluationData< dim, VectorizedArrayType, is_face > | protected |
active_quad_index | FEEvaluationData< dim, VectorizedArrayType, is_face > | protected |
apply_hanging_node_constraints(const bool transpose) const | FEEvaluationBase< dim, n_components_, Number, is_face, VectorizedArrayType > | protected |
at_boundary() const | FEFaceEvaluation< dim, fe_degree, n_q_points_1d, n_components_, Number, VectorizedArrayType > | |
BaseClass typedef | FEFaceEvaluation< dim, fe_degree, n_q_points_1d, n_components_, Number, VectorizedArrayType > | |
begin_dof_values() const | FEEvaluationData< dim, VectorizedArrayType, is_face > | |
begin_dof_values() | FEEvaluationData< dim, VectorizedArrayType, is_face > | |
begin_gradients() const | FEEvaluationData< dim, VectorizedArrayType, is_face > | |
begin_gradients() | FEEvaluationData< dim, VectorizedArrayType, is_face > | |
begin_hessians() const | FEEvaluationData< dim, VectorizedArrayType, is_face > | |
begin_hessians() | FEEvaluationData< dim, VectorizedArrayType, is_face > | |
begin_values() const | FEEvaluationData< dim, VectorizedArrayType, is_face > | |
begin_values() | FEEvaluationData< dim, VectorizedArrayType, is_face > | |
boundary_id() const | FEFaceEvaluation< dim, fe_degree, n_q_points_1d, n_components_, Number, VectorizedArrayType > | |
cell | FEEvaluationData< dim, VectorizedArrayType, is_face > | protected |
cell_ids | FEEvaluationData< dim, VectorizedArrayType, is_face > | protected |
cell_type | FEEvaluationData< dim, VectorizedArrayType, is_face > | protected |
collect_from_face(const EvaluationFlags::EvaluationFlags integration_flag, const bool sum_into_values=false) | FEFaceEvaluation< dim, fe_degree, n_q_points_1d, n_components_, Number, VectorizedArrayType > | |
collect_from_face(const EvaluationFlags::EvaluationFlags integration_flag, VectorizedArrayType *values_array, const bool sum_into_values=false) | FEFaceEvaluation< dim, fe_degree, n_q_points_1d, n_components_, Number, VectorizedArrayType > | |
data | FEEvaluationData< dim, VectorizedArrayType, is_face > | protected |
descriptor | FEEvaluationData< dim, VectorizedArrayType, is_face > | protected |
dimension | FEFaceEvaluation< dim, fe_degree, n_q_points_1d, n_components_, Number, VectorizedArrayType > | static |
distribute_local_to_global(VectorType &dst, const unsigned int first_index=0, const std::bitset< n_lanes > &mask=std::bitset< n_lanes >().flip()) const | FEEvaluationBase< dim, n_components_, Number, is_face, VectorizedArrayType > | |
divergence_is_requested | FEEvaluationData< dim, VectorizedArrayType, is_face > | protected |
dof_access_index | FEEvaluationData< dim, VectorizedArrayType, is_face > | protected |
dof_indices() const | FEFaceEvaluation< dim, fe_degree, n_q_points_1d, n_components_, Number, VectorizedArrayType > | |
dof_info | FEEvaluationData< dim, VectorizedArrayType, is_face > | protected |
dof_values_initialized | FEEvaluationData< dim, VectorizedArrayType, is_face > | protected |
DoFInfo typedef | FEEvaluationData< dim, VectorizedArrayType, is_face > | private |
dofs_per_cell | FEFaceEvaluation< dim, fe_degree, n_q_points_1d, n_components_, Number, VectorizedArrayType > | |
dofs_per_component | FEFaceEvaluation< dim, fe_degree, n_q_points_1d, n_components_, Number, VectorizedArrayType > | |
evaluate(const EvaluationFlags::EvaluationFlags evaluation_flag) | FEFaceEvaluation< dim, fe_degree, n_q_points_1d, n_components_, Number, VectorizedArrayType > | |
evaluate(const VectorizedArrayType *values_array, const EvaluationFlags::EvaluationFlags evaluation_flag) | FEFaceEvaluation< dim, fe_degree, n_q_points_1d, n_components_, Number, VectorizedArrayType > | |
evaluate_in_face(const EvaluationFlags::EvaluationFlags evaluation_flag) | FEFaceEvaluation< dim, fe_degree, n_q_points_1d, n_components_, Number, VectorizedArrayType > | |
face_ids | FEEvaluationData< dim, VectorizedArrayType, is_face > | protected |
face_numbers | FEEvaluationData< dim, VectorizedArrayType, is_face > | protected |
face_orientations | FEEvaluationData< dim, VectorizedArrayType, is_face > | protected |
fast_evaluation_supported(const unsigned int given_degree, const unsigned int given_n_q_points_1d) | FEFaceEvaluation< dim, fe_degree, n_q_points_1d, n_components_, Number, VectorizedArrayType > | static |
FEEvaluationBase(const MatrixFree< dim, Number, VectorizedArrayType > &matrix_free, const unsigned int dof_no, const unsigned int first_selected_component, const unsigned int quad_no, const unsigned int fe_degree, const unsigned int n_q_points, const bool is_interior_face, const unsigned int active_fe_index, const unsigned int active_quad_index, const unsigned int face_type) | FEEvaluationBase< dim, n_components_, Number, is_face, VectorizedArrayType > | protected |
FEEvaluationBase(const Mapping< dim > &mapping, const FiniteElement< dim > &fe, const Quadrature< 1 > &quadrature, const UpdateFlags update_flags, const unsigned int first_selected_component, const FEEvaluationData< dim, VectorizedArrayType, is_face > *other) | FEEvaluationBase< dim, n_components_, Number, is_face, VectorizedArrayType > | protected |
FEEvaluationBase(const FEEvaluationBase &other) | FEEvaluationBase< dim, n_components_, Number, is_face, VectorizedArrayType > | protected |
FEEvaluationData(const ShapeInfoType &shape_info, const bool is_interior_face=true) | FEEvaluationData< dim, VectorizedArrayType, is_face > | |
FEEvaluationData(const FEEvaluationData &other)=default | FEEvaluationData< dim, VectorizedArrayType, is_face > | |
FEEvaluationData(const InitializationData &initialization_data, const bool is_interior_face, const unsigned int quad_no, const unsigned int first_selected_component) | FEEvaluationData< dim, VectorizedArrayType, is_face > | protected |
FEEvaluationData(const std::shared_ptr< internal::MatrixFreeFunctions::MappingDataOnTheFly< dim, VectorizedArrayType > > &mapping_data, const unsigned int n_fe_components, const unsigned int first_selected_component) | FEEvaluationData< dim, VectorizedArrayType, is_face > | protected |
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 active_fe_index=numbers::invalid_unsigned_int, const unsigned int active_quad_index=numbers::invalid_unsigned_int, const unsigned int face_type=numbers::invalid_unsigned_int) | FEFaceEvaluation< dim, fe_degree, n_q_points_1d, n_components_, Number, VectorizedArrayType > | |
FEFaceEvaluation(const MatrixFree< dim, Number, VectorizedArrayType > &matrix_free, const std::pair< unsigned int, unsigned int > &range, 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) | FEFaceEvaluation< dim, fe_degree, n_q_points_1d, n_components_, Number, VectorizedArrayType > | |
first_selected_component | FEEvaluationData< dim, VectorizedArrayType, is_face > | protected |
gather_evaluate(const VectorType &input_vector, const EvaluationFlags::EvaluationFlags evaluation_flag) | FEFaceEvaluation< dim, fe_degree, n_q_points_1d, n_components_, Number, VectorizedArrayType > | |
get_active_fe_index() const | FEEvaluationData< dim, VectorizedArrayType, is_face > | |
get_active_quadrature_index() const | FEEvaluationData< dim, VectorizedArrayType, is_face > | |
get_cell_ids() const | FEEvaluationData< dim, VectorizedArrayType, is_face > | inline |
get_cell_or_face_batch_id() const | FEEvaluationData< dim, VectorizedArrayType, is_face > | inline |
get_cell_or_face_ids() const | FEEvaluationData< dim, VectorizedArrayType, is_face > | inline |
get_cell_type() const | FEEvaluationData< dim, VectorizedArrayType, is_face > | |
get_curl(const unsigned int q_point) const | FEEvaluationBase< dim, n_components_, Number, is_face, VectorizedArrayType > | |
get_current_cell_index() const | FEEvaluationData< dim, VectorizedArrayType, is_face > | |
get_divergence(const unsigned int q_point) const | FEEvaluationBase< dim, n_components_, Number, is_face, VectorizedArrayType > | |
get_dof_access_index() const | FEEvaluationData< dim, VectorizedArrayType, is_face > | |
get_dof_info() const | FEEvaluationData< dim, VectorizedArrayType, is_face > | |
get_dof_value(const unsigned int dof) const | FEEvaluationBase< dim, n_components_, Number, is_face, VectorizedArrayType > | |
get_dofs_per_component_projected_to_face() | FEFaceEvaluation< dim, fe_degree, n_q_points_1d, n_components_, Number, VectorizedArrayType > | |
get_dofs_projected_to_face() | FEFaceEvaluation< dim, fe_degree, n_q_points_1d, n_components_, Number, VectorizedArrayType > | |
get_face_ids() const | FEEvaluationData< dim, VectorizedArrayType, is_face > | inline |
get_face_no(const unsigned int v=0) const | FEEvaluationData< dim, VectorizedArrayType, is_face > | |
get_face_orientation(const unsigned int v=0) const | FEEvaluationData< dim, VectorizedArrayType, is_face > | |
get_first_selected_component() const | FEEvaluationData< dim, VectorizedArrayType, is_face > | |
get_gradient(const unsigned int q_point) const | FEEvaluationBase< dim, n_components_, Number, is_face, VectorizedArrayType > | |
get_hessian(const unsigned int q_point) const | FEEvaluationBase< dim, n_components_, Number, is_face, VectorizedArrayType > | |
get_hessian_diagonal(const unsigned int q_point) const | FEEvaluationBase< dim, n_components_, Number, is_face, VectorizedArrayType > | |
get_internal_dof_numbering() const | FEEvaluationData< dim, VectorizedArrayType, is_face > | |
get_laplacian(const unsigned int q_point) const | FEEvaluationBase< dim, n_components_, Number, is_face, VectorizedArrayType > | |
get_mapping_data_index_offset() const | FEEvaluationData< dim, VectorizedArrayType, is_face > | |
get_matrix_free() const | FEEvaluationBase< dim, n_components_, Number, is_face, VectorizedArrayType > | |
get_normal_derivative(const unsigned int q_point) const | FEEvaluationBase< dim, n_components_, Number, is_face, VectorizedArrayType > | |
get_normal_vector(const unsigned int q_point) const | FEEvaluationData< dim, VectorizedArrayType, is_face > | |
get_quadrature_index() const | FEEvaluationData< dim, VectorizedArrayType, is_face > | |
get_scratch_data() const | FEEvaluationData< dim, VectorizedArrayType, is_face > | |
get_shape_info() const | FEEvaluationData< dim, VectorizedArrayType, is_face > | |
get_subface_index() const | FEEvaluationData< dim, VectorizedArrayType, is_face > | |
get_symmetric_gradient(const unsigned int q_point) const | FEEvaluationBase< dim, n_components_, Number, is_face, VectorizedArrayType > | |
get_value(const unsigned int q_point) const | FEEvaluationBase< dim, n_components_, Number, is_face, VectorizedArrayType > | |
gradient_type typedef | FEFaceEvaluation< dim, fe_degree, n_q_points_1d, n_components_, Number, VectorizedArrayType > | |
gradients_from_hessians_quad | FEEvaluationData< dim, VectorizedArrayType, is_face > | protected |
gradients_quad | FEEvaluationData< dim, VectorizedArrayType, is_face > | protected |
gradients_quad_initialized | FEEvaluationData< dim, VectorizedArrayType, is_face > | protected |
gradients_quad_submitted | FEEvaluationData< dim, VectorizedArrayType, is_face > | protected |
hessian_type typedef | FEEvaluationBase< dim, n_components_, Number, is_face, VectorizedArrayType > | |
hessians_quad | FEEvaluationData< dim, VectorizedArrayType, is_face > | protected |
hessians_quad_initialized | FEEvaluationData< dim, VectorizedArrayType, is_face > | protected |
hessians_quad_submitted | FEEvaluationData< dim, VectorizedArrayType, is_face > | protected |
integrate(const EvaluationFlags::EvaluationFlags integration_flag, const bool sum_into_values=false) | FEFaceEvaluation< dim, fe_degree, n_q_points_1d, n_components_, Number, VectorizedArrayType > | |
integrate(const EvaluationFlags::EvaluationFlags integration_flag, VectorizedArrayType *values_array, const bool sum_into_values=false) | FEFaceEvaluation< dim, fe_degree, n_q_points_1d, n_components_, Number, VectorizedArrayType > | |
integrate_in_face(const EvaluationFlags::EvaluationFlags integration_flag) | FEFaceEvaluation< dim, fe_degree, n_q_points_1d, n_components_, Number, VectorizedArrayType > | |
integrate_scatter(const EvaluationFlags::EvaluationFlags integration_flag, VectorType &output_vector) | FEFaceEvaluation< dim, fe_degree, n_q_points_1d, n_components_, Number, VectorizedArrayType > | |
integrate_scatter(const bool integrate_values, const bool integrate_gradients, VectorType &output_vector) | FEFaceEvaluation< dim, fe_degree, n_q_points_1d, n_components_, Number, VectorizedArrayType > | |
integrate_value() const | FEEvaluationBase< dim, n_components_, Number, is_face, VectorizedArrayType > | |
interior_face | FEEvaluationData< dim, VectorizedArrayType, is_face > | protected |
inverse_jacobian(const unsigned int q_point) const | FEEvaluationData< dim, VectorizedArrayType, is_face > | |
is_interior_face() const | FEEvaluationData< dim, VectorizedArrayType, is_face > | |
is_reinitialized | FEEvaluationData< dim, VectorizedArrayType, is_face > | protected |
J_value | FEEvaluationData< dim, VectorizedArrayType, is_face > | protected |
jacobian | FEEvaluationData< dim, VectorizedArrayType, is_face > | protected |
jacobian_gradients | FEEvaluationData< dim, VectorizedArrayType, is_face > | protected |
jacobian_gradients_non_inverse | FEEvaluationData< dim, VectorizedArrayType, is_face > | protected |
JxW(const unsigned int q_point) const | FEEvaluationData< dim, VectorizedArrayType, is_face > | |
local_dof_indices | FEEvaluationBase< dim, n_components_, Number, is_face, VectorizedArrayType > | mutableprotected |
mapped_geometry | FEEvaluationData< dim, VectorizedArrayType, is_face > | protected |
mapping_data | FEEvaluationData< dim, VectorizedArrayType, is_face > | protected |
MappingInfoStorageType typedef | FEEvaluationData< dim, VectorizedArrayType, is_face > | private |
matrix_free | FEEvaluationBase< dim, n_components_, Number, is_face, VectorizedArrayType > | protected |
n_components | FEFaceEvaluation< dim, fe_degree, n_q_points_1d, n_components_, Number, VectorizedArrayType > | static |
n_fe_components | FEEvaluationData< dim, VectorizedArrayType, is_face > | protected |
n_lanes | FEFaceEvaluation< dim, fe_degree, n_q_points_1d, n_components_, Number, VectorizedArrayType > | static |
n_q_points | FEFaceEvaluation< dim, fe_degree, n_q_points_1d, n_components_, Number, VectorizedArrayType > | |
n_quadrature_points | FEEvaluationData< dim, VectorizedArrayType, is_face > | protected |
normal_vector(const unsigned int q_point) const | FEEvaluationData< dim, VectorizedArrayType, is_face > | |
normal_vectors | FEEvaluationData< dim, VectorizedArrayType, is_face > | protected |
normal_x_jacobian | FEEvaluationData< dim, VectorizedArrayType, is_face > | protected |
number_type typedef | FEFaceEvaluation< dim, fe_degree, n_q_points_1d, n_components_, Number, VectorizedArrayType > | |
NumberType typedef | FEEvaluationData< dim, VectorizedArrayType, is_face > | |
operator=(const FEEvaluationBase &other) | FEEvaluationBase< dim, n_components_, Number, is_face, VectorizedArrayType > | protected |
FEEvaluationData< dim, VectorizedArrayType, is_face >::operator=(const FEEvaluationData &other) | FEEvaluationData< dim, VectorizedArrayType, is_face > | |
project_to_face(const EvaluationFlags::EvaluationFlags evaluation_flag) | FEFaceEvaluation< dim, fe_degree, n_q_points_1d, n_components_, Number, VectorizedArrayType > | |
project_to_face(const VectorizedArrayType *values_array, const EvaluationFlags::EvaluationFlags evaluation_flag) | FEFaceEvaluation< dim, fe_degree, n_q_points_1d, n_components_, Number, VectorizedArrayType > | |
quad_no | FEEvaluationData< dim, VectorizedArrayType, is_face > | protected |
quadrature_point(const unsigned int q) const | FEEvaluationData< dim, VectorizedArrayType, is_face > | |
quadrature_point_indices() const | FEEvaluationData< dim, VectorizedArrayType, is_face > | |
quadrature_points | FEEvaluationData< dim, VectorizedArrayType, is_face > | protected |
quadrature_weights | FEEvaluationData< dim, VectorizedArrayType, is_face > | protected |
read_cell_data(const AlignedVector< T > &array) const | FEEvaluationData< dim, VectorizedArrayType, is_face > | |
read_dof_values(const VectorType &src, const unsigned int first_index=0, const std::bitset< n_lanes > &mask=std::bitset< n_lanes >().flip()) | FEEvaluationBase< dim, n_components_, Number, is_face, VectorizedArrayType > | |
read_dof_values_plain(const VectorType &src, const unsigned int first_index=0, const std::bitset< n_lanes > &mask=std::bitset< n_lanes >().flip()) | FEEvaluationBase< dim, n_components_, Number, is_face, VectorizedArrayType > | |
read_face_data(const AlignedVector< T > &array) const | FEEvaluationData< dim, VectorizedArrayType, is_face > | |
read_write_operation(const VectorOperation &operation, const std::array< VectorType *, n_components_ > &vectors, const std::array< const std::vector< ArrayView< const typename VectorType::value_type > > *, n_components_ > &vectors_sm, const std::bitset< n_lanes > &mask, const bool apply_constraints=true) const | FEEvaluationBase< dim, n_components_, Number, is_face, VectorizedArrayType > | protected |
read_write_operation_contiguous(const VectorOperation &operation, const std::array< VectorType *, n_components_ > &vectors, const std::array< const std::vector< ArrayView< const typename VectorType::value_type > > *, n_components_ > &vectors_sm, const std::bitset< n_lanes > &mask) const | FEEvaluationBase< dim, n_components_, Number, is_face, VectorizedArrayType > | protected |
read_write_operation_global(const VectorOperation &operation, const std::array< VectorType *, n_components_ > &vectors) const | FEEvaluationBase< dim, n_components_, Number, is_face, VectorizedArrayType > | protected |
reinit(const unsigned int face_batch_number) | FEFaceEvaluation< dim, fe_degree, n_q_points_1d, n_components_, Number, VectorizedArrayType > | |
reinit(const unsigned int cell_batch_number, const unsigned int face_number) | FEFaceEvaluation< dim, fe_degree, n_q_points_1d, n_components_, Number, VectorizedArrayType > | |
reinit_face(const internal::MatrixFreeFunctions::FaceToCellTopology< n_lanes > &face) | FEEvaluationData< dim, VectorizedArrayType, is_face > | |
ScalarNumber typedef | FEEvaluationData< dim, VectorizedArrayType, is_face > | |
scratch_data | FEEvaluationData< dim, VectorizedArrayType, is_face > | mutableprotected |
scratch_data_array | FEEvaluationBase< dim, n_components_, Number, is_face, VectorizedArrayType > | protected |
set_cell_data(AlignedVector< T > &array, const T &value) const | FEEvaluationData< dim, VectorizedArrayType, is_face > | |
set_data_pointers(AlignedVector< VectorizedArrayType > *scratch_data, const unsigned int n_components) | FEEvaluationData< dim, VectorizedArrayType, is_face > | |
set_dof_values(VectorType &dst, const unsigned int first_index=0, const std::bitset< n_lanes > &mask=std::bitset< n_lanes >().flip()) const | FEEvaluationBase< dim, n_components_, Number, is_face, VectorizedArrayType > | |
set_dof_values_plain(VectorType &dst, const unsigned int first_index=0, const std::bitset< n_lanes > &mask=std::bitset< n_lanes >().flip()) const | FEEvaluationBase< dim, n_components_, Number, is_face, VectorizedArrayType > | |
set_face_data(AlignedVector< T > &array, const T &value) const | FEEvaluationData< dim, VectorizedArrayType, is_face > | |
shape_info_number_type typedef | FEEvaluationData< dim, VectorizedArrayType, is_face > | |
ShapeInfoType typedef | FEEvaluationData< dim, VectorizedArrayType, is_face > | private |
static_dofs_per_cell | FEFaceEvaluation< dim, fe_degree, n_q_points_1d, n_components_, Number, VectorizedArrayType > | static |
static_dofs_per_component | FEFaceEvaluation< dim, fe_degree, n_q_points_1d, n_components_, Number, VectorizedArrayType > | static |
static_n_q_points | FEFaceEvaluation< dim, fe_degree, n_q_points_1d, n_components_, Number, VectorizedArrayType > | static |
static_n_q_points_cell | FEFaceEvaluation< dim, fe_degree, n_q_points_1d, n_components_, Number, VectorizedArrayType > | static |
subface_index | FEEvaluationData< dim, VectorizedArrayType, is_face > | protected |
submit_curl(const Tensor< 1, dim==2 ? 1 :dim, VectorizedArrayType > curl_in, const unsigned int q_point) | FEEvaluationBase< dim, n_components_, Number, is_face, VectorizedArrayType > | |
submit_divergence(const VectorizedArrayType div_in, const unsigned int q_point) | FEEvaluationBase< dim, n_components_, Number, is_face, VectorizedArrayType > | |
submit_dof_value(const value_type val_in, const unsigned int dof) | FEEvaluationBase< dim, n_components_, Number, is_face, VectorizedArrayType > | |
submit_gradient(const gradient_type grad_in, const unsigned int q_point) | FEEvaluationBase< dim, n_components_, Number, is_face, VectorizedArrayType > | |
submit_gradient(const Tensor< 2, 1, VectorizedArrayType > val_in, const unsigned int q_point) | FEEvaluationBase< dim, n_components_, Number, is_face, VectorizedArrayType > | |
submit_hessian(const hessian_type hessian_in, const unsigned int q_point) | FEEvaluationBase< dim, n_components_, Number, is_face, VectorizedArrayType > | |
submit_normal_derivative(const value_type grad_in, const unsigned int q_point) | FEEvaluationBase< dim, n_components_, Number, is_face, VectorizedArrayType > | |
submit_symmetric_gradient(const SymmetricTensor< 2, dim, VectorizedArrayType > grad_in, const unsigned int q_point) | FEEvaluationBase< dim, n_components_, Number, is_face, VectorizedArrayType > | |
submit_value(const value_type val_in, const unsigned int q_point) | FEEvaluationBase< dim, n_components_, Number, is_face, VectorizedArrayType > | |
submit_value(const Tensor< 1, 1, VectorizedArrayType > val_in, const unsigned int q_point) | FEEvaluationBase< dim, n_components_, Number, is_face, VectorizedArrayType > | |
tensor_dofs_per_cell | FEFaceEvaluation< dim, fe_degree, n_q_points_1d, n_components_, Number, VectorizedArrayType > | static |
value_type typedef | FEFaceEvaluation< dim, fe_degree, n_q_points_1d, n_components_, Number, VectorizedArrayType > | |
values_dofs | FEEvaluationData< dim, VectorizedArrayType, is_face > | protected |
values_from_gradients_quad | FEEvaluationData< dim, VectorizedArrayType, is_face > | protected |
values_quad | FEEvaluationData< dim, VectorizedArrayType, is_face > | protected |
values_quad_initialized | FEEvaluationData< dim, VectorizedArrayType, is_face > | protected |
values_quad_submitted | FEEvaluationData< dim, VectorizedArrayType, is_face > | protected |
~FEEvaluationBase() | FEEvaluationBase< dim, n_components_, Number, is_face, VectorizedArrayType > | protected |
~FEEvaluationData()=default | FEEvaluationData< dim, VectorizedArrayType, is_face > | virtual |