In the current release, we added experimental support to compute intersections on parallel::distributed::Triangulation objects using \texttt{CGAL}~\cite{cgal-user-ref}.
For this purpose we introduced a free function, which computes intersections and relevant information for communication from \texttt{intersection\_requests}.
\texttt{intersection\_requests} is a vector indicating entities of a given triangulation (in the form of \texttt{GridTools::Cache}) that intersections are computed upon.
-Each entity (face or cell) is described by a vector of vertices.
+Each entity (face or cell) is described by a vector of vertices. The actual computation of the intersection of two geometric
+entities is performed by the new function \texttt{CGALWrappers::compute\_intersection\_of\_cells()}.
+
\begin{c++}
// compute intersections on distributed triangulation
that multigrid levels are given by non-nested meshes~\cite{adams2002evaluation, bittencourt2001nonnested, bramble1991analysis}. An example for such meshes is
presented in Figure~\ref{fig:nonnested}.
-\begin{figure}
-
-\centering
-
-\todo[inline]{Complete these figures.}
-
-\fbox{\begin{minipage}{0.31\textwidth}\centering 0\vspace{5cm}\end{minipage}}
-\fbox{\begin{minipage}{0.31\textwidth}\centering 1\vspace{5cm}\end{minipage}}
-\fbox{\begin{minipage}{0.31\textwidth}\centering 2\vspace{5cm}\end{minipage}}
-
-\caption{\it Example of non-nested multigrid levels.}\label{fig:nonnested}
+\begin{figure}
+ \centering
+ \begin{subfigure}[b]{0.28\textwidth}
+ \centering
+ \includegraphics[width=\textwidth]{png/mesh_0.png}
+ \end{subfigure}\qquad
+ \hfill
+ \begin{subfigure}[b]{0.28\textwidth}
+ \centering
+ \includegraphics[width=\textwidth]{png/mesh_1.png}
+ \end{subfigure}
+ \hfill
+ \begin{subfigure}[b]{0.28\textwidth}
+ \centering
+ \includegraphics[width=\textwidth]{png/mesh_2.png}
+ \end{subfigure}
+ \caption{\it Example of non-nested multigrid levels.}\label{fig:nonnested}
\end{figure}
The current implementation extends the existing global-coarsening infrastructure by
that the coarser of the two \texttt{DoFHandler} instances can be generated by a coarsening step from the fine
mesh.
-At the time of writing, the \texttt{MGTwoLevelTransferNonNested} operator performs
-a pointwise interpolation (injection) from the coarse mesh to the support points
-of the fine mesh. Adopting the notation of~\cite{munch2022gc}, we perform
-for prolongation
-\todo{I think you need to at least explain in a few words what each of
- the components of this formula is.}
-\todo{Alternatively (MK's preference), skip the parts that are just unnecessary
- abstractions that do not help the reader's understanding.}
+At the time of writing, the \texttt{MGTwoLevelTransferNonNested} operator provides a prolongation operator $\mathcal{P}^{(f,c)}$
+that prolongates a vector $x^{(c)}$ from the coarse space to the fine space:
\begin{align*}
-x^{(f)} = \mathcal{W}^{(f)} \circ \sum_{e \in \{\text{coarse cells}\}} \mathcal{S}_e^{(f)} \circ \mathcal{P}_e^{(f, c)}
-\circ \mathcal{C}_e^{(c)} \circ \mathcal{G}_e^{(c)} x^{(c)},
+x^{(f)} = \mathcal{P}^{(f, c)} x^{(c)},
\end{align*}
-i.e., loop over all coarse cells and interpolate to all (fine support) points that fall
-into the cell with \texttt{FEPointEvaluation}. The local result is scattered into a global
-vector, which is finalized by a communication and a weighting step.
+by a pointwise interpolation (injection) from the coarse mesh to the support points of the fine mesh. This is done
+by looping over all coarse cells and interpolating to all (fine support) points that fall into the cell with
+\texttt{FEPointEvaluation}. The local result is scattered into $x^{(f)}$, which is finalized by a
+communication and a weighting step that is necessary as multiple elements could add to the same global entry.
+
The current implementation works for scalar and vectorial, continuous (\texttt{FE\_Q})
and discontinuous (\texttt{FE\_DGQ}) elements on hypercube-shaped cells. We plan to support