const typename dealii::Triangulation<dim>::cell_iterator &cell,
const unsigned int number_cell_interior,
const typename dealii::Triangulation<dim>::cell_iterator &neighbor,
- const unsigned int number_cell_exterior);
+ const unsigned int number_cell_exterior,
+ const bool is_mixed_mesh);
bool use_active_cells;
const std::vector<std::pair<unsigned int, unsigned int>> &cell_levels,
TaskInfo & task_info)
{
+ const bool is_mixed_mesh = triangulation.is_mixed_mesh();
+
// step 1: create the inverse map between cell iterators and the
// cell_level_index field
std::map<std::pair<unsigned int, unsigned int>, unsigned int>
info.interior_face_no = f;
info.exterior_face_no = dcell->face(f)->boundary_id();
info.face_type =
- dcell->face(f)->reference_cell() !=
- dealii::ReferenceCells::get_hypercube<dim - 1>();
+ is_mixed_mesh ?
+ (dcell->face(f)->reference_cell() !=
+ dealii::ReferenceCells::get_hypercube<dim - 1>()) :
+ 0;
info.subface_index =
GeometryInfo<dim>::max_children_per_cell;
info.face_orientation = 0;
neighbor_c,
map_to_vectorized[level_index],
dcell,
- cell));
+ cell,
+ is_mixed_mesh));
}
else if (face_is_owned[dcell->face(f)
->child(c)
neighbor_c,
map_to_vectorized[level_index],
dcell,
- cell));
+ cell,
+ is_mixed_mesh));
}
else
Assert(
dcell,
cell,
neighbor,
- map_to_vectorized[level_index]));
+ map_to_vectorized[level_index],
+ is_mixed_mesh));
}
else if (face_is_owned[dcell->face(f)
->index()] ==
dcell,
cell,
neighbor,
- map_to_vectorized[level_index]));
+ map_to_vectorized[level_index],
+ is_mixed_mesh));
}
}
else
dcell,
cell,
neighbor,
- refinement_edge_faces.size()));
+ refinement_edge_faces.size(),
+ is_mixed_mesh));
}
}
}
const typename dealii::Triangulation<dim>::cell_iterator &cell,
const unsigned int number_cell_interior,
const typename dealii::Triangulation<dim>::cell_iterator &neighbor,
- const unsigned int number_cell_exterior)
+ const unsigned int number_cell_exterior,
+ const bool is_mixed_mesh)
{
FaceToCellTopology<1> info;
info.cells_interior[0] = number_cell_interior;
else
info.exterior_face_no = cell->neighbor_face_no(face_no);
- info.face_type = cell->face(face_no)->reference_cell() !=
- dealii::ReferenceCells::get_hypercube<dim - 1>();
+ info.face_type = is_mixed_mesh ?
+ (cell->face(face_no)->reference_cell() !=
+ dealii::ReferenceCells::get_hypercube<dim - 1>()) :
+ 0;
info.subface_index = GeometryInfo<dim>::max_children_per_cell;
Assert(neighbor->level() <= cell->level(), ExcInternalError());
face_data.resize(quad.size());
face_data_by_cells.resize(quad.size());
+ const bool is_mixed_mesh = tria.is_mixed_mesh();
+
// dummy FE that is used to set up an FEValues object. Do not need the
// actual finite element because we will only evaluate quantities for
// the mapping that are independent of the FE
if (quad_face.second.size() > 0) // triangle
{
AssertDimension(dim, 3);
- face_data[my_q].descriptor[hpq * scale + 1].initialize(
- quad_face.second, update_default);
+ face_data[my_q]
+ .descriptor[hpq * scale + (is_mixed_mesh ? 1 : 0)]
+ .initialize(quad_face.second, update_default);
face_data_by_cells[my_q]
- .descriptor[hpq * scale + 1]
+ .descriptor[hpq * scale + (is_mixed_mesh ? 1 : 0)]
.initialize(quad_face.second, update_default);
}