<h3>Specific improvements</h3>
<ol>
+
+ <li> Changed: operator< for cell iterators no longer looks at
+ (level-)subdomain ids but only compares level() and index(). This makes the
+ ordering inconsistent between processes on a
+ parallel::distributed::Triangulation, but fixes the problem that the
+ ordering of cells changes under mesh refinement or other causes for changing
+ the subdomain id.
+ <br>
+ (Timo Heister, 2014/04/08)
+ </li>
+
<li> New: GridTools::laplace_transform() now takes an addition, optional
parameter that indicates the "stiffness" of the mapping.
<br>
*/
bool active () const;
- /**
- * Ordering of accessors. This function implements a total ordering
- * of cells even on a parallel::distributed::Triangulation. This
- * function first compares level_subdomain_id(). If these are equal,
- * and both cells are active, it compares subdomain_id(). If this is
- * inconclusive, TriaAccessorBase::operator < () is called.
- */
- bool operator < (const CellAccessor<dim, spacedim> &other) const;
-
-
/**
* Return whether this cell is owned by the current processor
* or is owned by another processor. The function always returns
}
-template <int dim, int spacedim>
-inline
-bool
-CellAccessor<dim,spacedim>::operator < (const CellAccessor<dim,spacedim> &other) const
-{
- Assert (this->tria == other.tria, TriaAccessorExceptions::ExcCantCompareIterators());
-
- if (level_subdomain_id() != other.level_subdomain_id())
- return (level_subdomain_id() < other.level_subdomain_id());
-
- if (active() && other.active() &&
- (subdomain_id() != other.subdomain_id()))
- return (subdomain_id() < other.subdomain_id());
-
- return TriaAccessorBase<dim,dim,spacedim>::operator < (other);
-}
/**
* Ordering relation for iterators.
*
- * This relation attempts a total ordering of cells. For lower
- * dimensional objects on distributed meshes, we only attempt a
- * partial ordering.
+ * This relation attempts a total ordering of cells.
*
* The relation is defined as follows:
*
* For objects of <tt>Accessor::structure_dimension <
* Accessor::dimension</tt>, we simply compare the index of such an
- * object. This consitutes an ordering of the elements of same
- * dimension on a mesh on a single process. For a distributed mesh,
- * the result of the ordering relation between faces across
- * processes is not defined, but most likely irrelevant.
- *
- * For cells, there is a total ordering even in a
- * distributed::parallel::Triangulation. The ordering is lexicographic
+ * object. The ordering is lexicographic
* according to the following hierarchy (in the sense, that the next
* test is only applied if the previous was inconclusive):
*
* past-the-end iterators rank the same, thus false is returned in
* that case.</li>
*
- * <li> The level subdomain id</li>
- * <li> If both cells are active, the subdomain id.</li>
* <li> The level of the cell.</li>
* <li> The index of a cell inside the level.</li>
* </ol>
+ *
+ * @Note: the ordering is not consistent between different processor in
+ * a parallel::distributed::Triangulation because we rely on index(),
+ * which is likely not the same.
*/
bool operator < (const TriaRawIterator &) const;