* @note The usual warning about the missing type safety of @p void pointers are
* obviously in place here; responsibility for correctness of types etc
* lies entirely with the user of the pointer.
+ *
+ *
+ * <dt class="glossary">@anchor workstream_paper <b>%WorkStream paper</b></dt>
+ * <dd>The "%WorkStream paper" is a paper by B. Turcksin, M. Kronbichler and W. Bangerth
+ * that discusses the design and implementation of WorkStream. WorkStream is, at its
+ * core, a design pattern, i.e., something that is used over and over in finite element
+ * codes and that can, consequently, be implemented generically. In particular, the
+ * paper lays out the motivation for this pattern and then proposes different ways
+ * of implementing it. It also compares the performance of different implementations.
+ *
+ * The paper is currently in preparation.
* </dd>
*
* </dl>
* are considered unused and may be re-used for the next invokation of
* the worker function, on this or another thread.
*
- * This class only really works in parallel when multithread mode was selected
- * during deal.II configuration. Otherwise it simply works on each item
- * sequentially.
+ * The functions in this namespace only really work in parallel when
+ * multithread mode was selected during deal.II configuration. Otherwise they
+ * simply work on each item sequentially.
*
* @ingroup threads
* @author Wolfgang Bangerth, 2007, 2008, 2009, 2013. Bruno Turcksin, 2013.
* A namespace for the implementation of details of the WorkStream pattern
* and function. This namespace holds classes that deal with the second
* implementation described in the paper by Turcksin, Kronbichler and
- * Bangerth.
+ * Bangerth (see @ref workstream_paper).
*
* Even though this implementation is slower than the third implementation
* discussed in that paper, we need to keep it around for two reasons:
* A namespace for the implementation of details of the WorkStream pattern
* and function. This namespace holds classes that deal with the third
* implementation described in the paper by Turcksin, Kronbichler and
- * Bangerth.
+ * Bangerth (see @ref workstream_paper).
*/
namespace Implementation3
{
* Pointer to a thread local variable identifying the scratch
* and copy data objects this thread will use. The same considerations
* apply as documented in the Implementation2::IteratorRangeToItemStream
- * class as well as in the paper by Turcksin, Kronbichler and Bangerth.
+ * class as well as in the paper by Turcksin, Kronbichler and Bangerth
+ * (see @ref workstream_paper).
*/
Threads::ThreadLocalStorage<ScratchAndCopyDataList> *scratch_and_copy_data;
* copy data objects each thread will use. The same is true as
* discussed for the implementation in the
* Implementation2::IteratorRangeToItemStream class and the paper
- * by Turcksin, Kronbichler and Bangerth.
+ * by Turcksin, Kronbichler and Bangerth (see @ref workstream_paper).
*/
Threads::ThreadLocalStorage<typename ItemType::ScratchAndCopyDataList> thread_local_scratch_and_copy;
/**
* This is one of two main functions of the WorkStream concept, doing work as
* described in the introduction to this namespace. It corresponds to
- * implementation 2 of the paper by Turcksin, Kronbichler and Bangerth.
+ * implementation 2 of the paper by Turcksin, Kronbichler and Bangerth
+ * (see @ref workstream_paper).
*
* This function that can be used for worker and copier objects that
* are either pointers to non-member functions or objects that allow to be
/**
* This is one of two main functions of the WorkStream concept, doing work as
* described in the introduction to this namespace. It corresponds to
- * implementation 3 of the paper by Turcksin, Kronbichler and Bangerth.
+ * implementation 3 of the paper by Turcksin, Kronbichler and Bangerth,
+ * see @ref workstream_paper .
* As such, it takes not a range of iterators described by a begin
* and end iterator, but a "colored" graph of iterators where each
* color represents cells for which writing the cell contributions into
* are not neighbors). Each "color" is represented by std::vectors of cells.
* The first argument to this function, a set of sets of cells (which are
* represent as a vector of vectors, for efficiency), is typically
- * constructed by calling GraphColoring::make_graph_coloring().
+ * constructed by calling GraphColoring::make_graph_coloring(). See there
+ * for more information.
*
* This function that can be used for worker and copier objects that
* are either pointers to non-member functions or objects that allow to be
* This is a variant of one of the two main functions of the WorkStream
* concept, doing work as described in the introduction to this namespace.
* It corresponds to implementation 2 of the paper by Turcksin, Kronbichler
- * and Bangerth.
+ * and Bangerth (see @ref workstream_paper).
*
* This is the function that can be used for worker and copier functions
* that are member functions of a class.