Hi,
I am trying to simulate a reaction-diffusion system containing two species on a square domain(structured mesh) with periodic boundary conditions enforced on the concentration fields on opposite edges. After testing my implementation on a single processor I obtain the following error message :
--------------------------------------------------------- TimerOutput objects finalize timed values printed to the screen by communicating over MPI in their destructors. Since an exception is currently uncaught, this synchronization (and subsequent output) will be skipped to avoid a possible deadlock. --------------------------------------------------------- ---------------------------------------------------- Exception on processing: -------------------------------------------------------- An error occurred in line <2107> of file </home/aadi/dealii-9.2.0/source/grid/grid_tools_dof_handlers.cc> in function void dealii::GridTools::match_periodic_face_pairs(std::set<std::pair<CellIterator, unsigned int> >&, std::set<std::pair<typename dealii::identity<RangeType>::type, unsigned int> >&, int, std::vector<dealii::GridTools::PeriodicFacePair<CellIterator> >&, const dealii::Tensor<1, typename FaceIterator::AccessorType:: space_dimension>&, const dealii::FullMatrix<double>&) [with CellIterator = dealii::TriaIterator<dealii::CellAccessor<2, 2> >; typename dealii::identity<RangeType>::type = dealii::TriaIterator<dealii::CellAccessor<2, 2> >; typename FaceIterator::AccessorType = dealii::CellAccessor<2, 2>] The violated condition was: n_matches == pairs1.size() && pairs2.size() == 0 Additional information: Unmatched faces on periodic boundaries -------------------------------------------------------- Aborting!
Additional Details : The error message is associated with the create_mesh() method of the problem class whose implementation I have included below. The part highlighted in red is the cause of the error message :
template <int dim>
void Schnakenberg<dim>::create_mesh()
{
TimerOutput::Scope t(computing_timer, "setup");
GridGenerator::hyper_cube(triangulation, min_coord, max_coord, true);
std::vector<GridTools::PeriodicFacePair<
typename parallel::distributed::Triangulation<dim>::cell_iterator>>
periodicity_vector;
GridTools::collect_periodic_faces(triangulation,
0,
1,
0,
periodicity_vector);
GridTools::collect_periodic_faces(triangulation,
2,
3,
0,
periodicity_vector);
triangulation.add_periodicity(periodicity_vector);
triangulation.refine_global(refine_factor);
}
Also, I am curious as to what the 'direction' argument in the GridTools::collect_periodic_faces function should be for a scalar solution field. I would appreciate some insight on this. Thank you.
Best,
Aaditya