Url = {https://www.dealii.org/developer/doxygen/deal.II/changes_between_9_2_0_and_9_3_0.html}
}
+@Misc{changes94,
+ key={List of Changes},
+ Title = {List of Changes for 9.4},
+ Note = {\url{https://www.dealii.org/developer/doxygen/deal.II/changes_between_9_3_0_and_9_4_0.html}},
+ Url = {https://www.dealii.org/developer/doxygen/deal.II/changes_between_9_3_0_and_9_4_0.html}
+}
+
@article{dealII80,
title = {The \texttt{deal.II} Library, Version 8.0},
author = {W. Bangerth and T. Heister and L. Heltai and G. Kanschat
url = {https://doi.org/10.1515/jnma-2020-0043}
}
+@article{dealII93,
+ title = {The \texttt{deal.II} Library, Version 9.3},
+ author = {Daniel Arndt and Wolfgang Bangerth and Bruno Blais and
+ Marc Fehling and Rene Gassm{\"o}ller and Timo Heister
+ and Luca Heltai and Uwe K{\"o}cher and Martin
+ Kronbichler and Matthias Maier and Peter Munch and
+ Jean-Paul Pelteret and Sebastian Proell and Konrad
+ Simon and Bruno Turcksin and David Wells and Jiaqi
+ Zhang},
+ journal = {Journal of Numerical Mathematics},
+ year = {2021},
+ url = {https://dealii.org/deal93-preprint.pdf},
+ doi = {10.1515/jnma-2021-0081},
+ volume = {29},
+ number = {3},
+ pages = {171--186}
+}
+
%% The deal.II web page and online reference.
%% Please cite specific versions only if you really need to
archivePrefix={arXiv},
primaryClass={cond-mat.mtrl-sci}
}
+
+@article{burstedde2020parallel,
+ title={Parallel tree algorithms for AMR and non-standard data access},
+ author={Burstedde, Carsten},
+ journal={ACM Transactions on Mathematical Software (TOMS)},
+ volume={46},
+ number={4},
+ pages={1--31},
+ year={2020},
+ publisher={ACM New York, NY, USA}
+}
+
+@article{mirzadeh2016parallel,
+ title={Parallel level-set methods on adaptive tree-based grids},
+ author={Mirzadeh, Mohammad and Guittet, Arthur and Burstedde, Carsten and Gibou, Frederic},
+ journal={Journal of Computational Physics},
+ volume={322},
+ pages={345--364},
+ year={2016},
+ publisher={Elsevier}
+}
+
+@article{hoefler2010scalable,
+ title={Scalable communication protocols for dynamic sparse data exchange},
+ author={Hoefler, Torsten and Siebert, Christian and Lumsdaine, Andrew},
+ journal={ACM Sigplan Notices},
+ volume={45},
+ number={5},
+ pages={159--168},
+ year={2010},
+ publisher={ACM New York, NY, USA}
+}
+
+@article{ibanez2016pumi,
+ title={PUMI: Parallel unstructured mesh infrastructure},
+ author={Ibanez, Daniel A and Seol, E Seegyoung and Smith, Cameron W and Shephard, Mark S},
+ journal={ACM Transactions on Mathematical Software (TOMS)},
+ volume={42},
+ number={3},
+ pages={1--28},
+ year={2016},
+ publisher={ACM New York, NY, USA}
+}
+
+@article{munch2022gc,
+ title={Efficient distributed matrix-free multigrid methods on locally refined meshes for FEM computations},
+ author= {Munch, Peter and Heister, Timo and Prieto Saavedra, Laura and Kronbichler, Martin},
+ year= {2022},
+ url = {https://arxiv.org/abs/2203.12292}
+}
+
+@article{munch2022hn,
+ title = {Efficient application of hanging-node constraints for matrix-free high-order FEM computations on CPU and GPU},
+ author = {Munch, Peter and Ljungkvist, Karl and Kronbichler, Martin},
+ year = {2022, accepted for publication},
+}
+
+@inproceedings{ljungkvist2017matrix,
+ title={Matrix-free finite-element computations on graphics processors with adaptively refined unstructured meshes.},
+ author={Ljungkvist, Karl},
+ booktitle={SpringSim (HPC)},
+ pages={1--1},
+ year={2017}
+}
\ No newline at end of file
%\renewcommand{\baselinestretch}{2.0}
+\graphicspath{{svg/}}
+
\usepackage[normalem]{ulem}
\usepackage{todonotes}
\affil[6]{School of Mathematical and Statistical Sciences,
Clemson University,
Clemson, SC, 29634, USA
- {\texttt{heister/jiaqi2@clemson.edu}}}
+ {\texttt{heister@clemson.edu}}}
\author[7]{Luca~Heltai}
\affil[7]{SISSA,
\affil[9]{Institute for Computational Mechanics,
Technical University of Munich,
Boltzmannstr.~15, 85748 Garching, Germany.
- {\texttt{kronbichler/munch/proell@lnm.mw.tum.de}}}
+ {\texttt{kronbichler/munch@lnm.mw.tum.de}}}
\affil[10]{Department of Information Technology,
Uppsala University,
Box 337, 751\,05 Uppsala, Sweden.
\begin{abstract}
This paper provides an overview of the new features of the finite element
- library \dealii, version 9.3.
+ library \dealii, version 9.4.
\end{abstract}
The major changes of this release are:
%
\begin{itemize}
- \item TODO;
- \item TODO new tutorial programs and a new code gallery program (see Section~\ref{subsec:steps}).
+ \item Advances in simplex- and mixed-mesh support (see Section~\ref{sec:simplex});
+ \item Repartitioning of distributed meshes (see Section~\ref{sec:repartitioning});
+ \item Advances in matrix-free infrastructure (see Section~\ref{sec:mf});
+ \item Advances in multigrid infrastructure (see Section~\ref{sec:multigrid});
+ \item CutFEM support (see Section~\ref{sec:cut});
+ \item Performance improvement of particle infrastructure (see Section~\ref{sec:particles});
+ \item Two new tutorial programs and a new code gallery program (see Section~\ref{subsec:steps}).
\end{itemize}
%
-In addition, we discuss the \candi{} installation program in Section~\ref{subsec:candi}.
While all of these major changes are discussed in detail in
Section~\ref{sec:major}, there
that we briefly outline in the remainder of this section:
%
\begin{itemize}
- \item TODO.
+% \item \texttt{AffineConstraints::make\_consistent\_in\_parallel()} allows
+% to make constraints consistent in parallel.
+ \item \texttt{DataOutResample} does not output a numerical solution
+ on the cells of the original triangulation but interpolates the result
+ onto a second triangulation (that can be completely unrelated).
+ By using this class, one can output the result obtained on an
+ unstructured mesh on a structured one, which might be a more
+ memory-efficient storage format, or one can create a slice in 3D.
+ \item The new function \texttt{find\_point\_owner\_rank()} of \texttt{parallel::distributed::Triangulation} allows to find the MPI
+ rank of the subdomain of a distributed mesh that contains a given point.
+ It is communication-free, leverages the functionality of p4est (>v.2.2),
+ and its algorithm is described in \cite{burstedde2020parallel}. Based on the obtained information,
+ communication pattern in \texttt{Utilties::MPI::RemotePointEvaluation} can be set up efficiently. Furthermore, this feature could be used in the future to allow
+ particle simulations, where particle movement is not
+ limited by CFL conditions, as done in \cite{mirzadeh2016parallel}.
\end{itemize}
%
-The changelog lists more than 200 other features and bugfixes.
+The changelog lists more than 150 other features and bugfixes.
%\newpage
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-\subsection{Topic 1}
+\subsection{Advances in simplex- and mixed-mesh support}\label{sec:simplex}
+
+We continued to work on the simplex- and mixed-mesh support. We fixed
+many bugs and generalized existing functions that only worked for
+hypercube shaped cells. Most notable new functions are:
+
+\begin{figure}[!t]
+
+ \centering
+
+
+ \begin{tikzpicture}[scale=1.7]
+
+ \coordinate (0) at (0,0);
+ \coordinate (1) at (1,0);
+ \coordinate (2) at (0,1);
+
+ \coordinate (3) at (0,0.5);
+ \coordinate (4) at (0.5,0.5);
+ \coordinate (5) at (0.5,0);
+
+ \foreach \i in {0,1, 2, 3, 4, 5}
+ \draw[blue,fill=blue] (\i) circle (1.1pt) node [below] {};
+
+
+ \draw (0) --(1) -- (2) -- (0);
+ \draw (3) --(4) -- (5) -- (3);
+
+ \end{tikzpicture}
+ \qquad\qquad
+ \begin{tikzpicture}[scale=1.3]
+
+ \coordinate (0) at (0,0,0);
+ \coordinate (1) at (0,0,1);
+ \coordinate (2) at (1,0,0);
+ \coordinate (3) at (0,1,0);
+ \coordinate (4) at (0,0,0.5);
+ \coordinate (6) at (0.5,0,0);
+ \coordinate (7) at (0,0.5,0);
+ \coordinate (5) at (0.5,0.0,0.5);
+ \coordinate (8) at (0.0,0.5,0.5);
+ \coordinate (9) at (0.5,0.5,0.0);
+
+ \draw (0) -- (1) -- (2) -- (0);
+ \draw (0) -- (1) -- (3) -- (0);
+ \draw (1) -- (2) -- (3) -- (1);
+
+ \draw[-, fill=red!30, opacity=.5] (4)--(6)--(7)--cycle;
+ \draw[-, fill=red!30, opacity=.5] (0)--(6)--(7)--cycle;
+ \draw[-, fill=red!30, opacity=.5] (0)--(4)--(7)--cycle;
+ \draw[-, fill=red!30, opacity=.5] (0)--(4)--(6)--cycle;
+
+ \draw[-, fill=blue!30, opacity=.5] (1)--(4)--(5)--cycle;
+ \draw[-, fill=blue!30, opacity=.5] (1)--(4)--(8)--cycle;
+ \draw[-, fill=blue!30, opacity=.5] (4)--(5)--(8)--cycle;
+ \draw[-, fill=blue!30, opacity=.5] (1)--(5)--(8)--cycle;
+
+ \draw[-, fill=green!30, opacity=.5] (2)--(5)--(6)--cycle;
+ \draw[-, fill=green!30, opacity=.5] (2)--(6)--(9)--cycle;
+ \draw[-, fill=green!30, opacity=.5] (2)--(5)--(9)--cycle;
+ \draw[-, fill=green!30, opacity=.5] (5)--(6)--(9)--cycle;
+
+ \draw[-, fill=orange!30, opacity=.5] (7)--(8)--(9)--cycle;
+ \draw[-, fill=orange!30, opacity=.5] (3)--(7)--(9)--cycle;
+ \draw[-, fill=orange!30, opacity=.5] (3)--(7)--(8)--cycle;
+ \draw[-, fill=orange!30, opacity=.5] (3)--(8)--(9)--cycle;
+
+ \foreach \i in {0,1,2,3,4,5,6,7,8,9}
+ \draw[blue,fill=blue] (\i) circle (1.0pt) node [below] {};
+
+ \end{tikzpicture}
+ \begin{tikzpicture}[scale=1.3]
+
+ \coordinate (0) at (0,0,0);
+ \coordinate (1) at (0,0,1);
+ \coordinate (2) at (1,0,0);
+ \coordinate (3) at (0,1,0);
+ \coordinate (4) at (0,0,0.5);
+ \coordinate (6) at (0.5,0,0);
+ \coordinate (7) at (0,0.5,0);
+ \coordinate (5) at (0.5,0.0,0.5);
+ \coordinate (8) at (0.0,0.5,0.5);
+ \coordinate (9) at (0.5,0.5,0.0);
+
+ \draw (0) -- (1) -- (2) -- (0);
+ \draw (0) -- (1) -- (3) -- (0);
+ \draw (1) -- (2) -- (3) -- (1);
+
+ \draw[-, fill=red!30, opacity=.5] (4)--(5)--(6)--cycle;
+ \draw[-, fill=red!30, opacity=.5] (4)--(5)--(8)--cycle;
+ \draw[-, fill=red!30, opacity=.5] (4)--(6)--(8)--cycle;
+ \draw[-, fill=red!30, opacity=.5] (5)--(6)--(8)--cycle;
+
+% \draw[-, fill=blue!30, opacity=.5] (4)--(6)--(7)--cycle;
+% \draw[-, fill=blue!30, opacity=.5] (4)--(6)--(8)--cycle;
+% \draw[-, fill=blue!30, opacity=.5] (4)--(7)--(8)--cycle;
+% \draw[-, fill=blue!30, opacity=.5] (6)--(7)--(8)--cycle;
+
+% \draw[-, fill=green!30, opacity=.5] (6)--(7)--(8)--cycle;
+% \draw[-, fill=green!30, opacity=.5] (6)--(7)--(9)--cycle;
+% \draw[-, fill=green!30, opacity=.5] (6)--(8)--(9)--cycle;
+% \draw[-, fill=green!30, opacity=.5] (7)--(8)--(9)--cycle;
+%
+ \draw[-, fill=blue!30, opacity=.5] (5)--(6)--(8)--cycle;
+ \draw[-, fill=blue!30, opacity=.5] (5)--(6)--(9)--cycle;
+ \draw[-, fill=blue!30, opacity=.5] (5)--(8)--(9)--cycle;
+ \draw[-, fill=blue!30, opacity=.5] (6)--(8)--(9)--cycle;
+
+ \foreach \i in {0,1,2,3,4,5,6,7,8,9}
+ \draw[blue,fill=blue] (\i) circle (1.0pt) node [below] {};
+
+ \end{tikzpicture}
+ \begin{tikzpicture}[scale=1.3]
+
+ \coordinate (0) at (0,0,0);
+ \coordinate (1) at (0,0,1);
+ \coordinate (2) at (1,0,0);
+ \coordinate (3) at (0,1,0);
+ \coordinate (4) at (0,0,0.5);
+ \coordinate (6) at (0.5,0,0);
+ \coordinate (7) at (0,0.5,0);
+ \coordinate (5) at (0.5,0.0,0.5);
+ \coordinate (8) at (0.0,0.5,0.5);
+ \coordinate (9) at (0.5,0.5,0.0);
+
+ \draw (0) -- (1) -- (2) -- (0);
+ \draw (0) -- (1) -- (3) -- (0);
+ \draw (1) -- (2) -- (3) -- (1);
+
+% \draw[-, fill=red!30, opacity=.5] (4)--(5)--(6)--cycle;
+% \draw[-, fill=red!30, opacity=.5] (4)--(5)--(8)--cycle;
+% \draw[-, fill=red!30, opacity=.5] (4)--(6)--(8)--cycle;
+% \draw[-, fill=red!30, opacity=.5] (5)--(6)--(8)--cycle;
+
+ \draw[-, fill=red!30, opacity=.5] (4)--(6)--(7)--cycle;
+ \draw[-, fill=red!30, opacity=.5] (4)--(6)--(8)--cycle;
+ \draw[-, fill=red!30, opacity=.5] (4)--(7)--(8)--cycle;
+ \draw[-, fill=red!30, opacity=.5] (6)--(7)--(8)--cycle;
+
+ \draw[-, fill=blue!30, opacity=.5] (6)--(7)--(8)--cycle;
+ \draw[-, fill=blue!30, opacity=.5] (6)--(7)--(9)--cycle;
+ \draw[-, fill=blue!30, opacity=.5] (6)--(8)--(9)--cycle;
+ \draw[-, fill=blue!30, opacity=.5] (7)--(8)--(9)--cycle;
+
+% \draw[-, fill=orange!30, opacity=.5] (5)--(6)--(8)--cycle;
+% \draw[-, fill=orange!30, opacity=.5] (5)--(6)--(9)--cycle;
+% \draw[-, fill=orange!30, opacity=.5] (5)--(8)--(9)--cycle;
+% \draw[-, fill=orange!30, opacity=.5] (6)--(8)--(9)--cycle;
+
+ \foreach \i in {0,1,2,3,4,5,6,7,8,9}
+ \draw[blue,fill=blue] (\i) circle (1.0pt) node [below] {};
+
+ \end{tikzpicture}
+
+ \caption{New refinement strategies for triangles and tetrahedrons: triangles
+ are subdivided in 4 children and tetrahedrons 8 ones.}\label{fig:refinement}
+
+\end{figure}
+\begin{itemize}
+\item Experimental support of locally refined meshes. FEM on locally refined
+meshes requires 1) the possibility to locally refine the mesh (see Figure~\ref{fig:refinement})
+and 2) appropriate hanging-node constraints. For 3D, we are in progress to
+implement the missing constraint definitions.
+\item TODO
+\end{itemize}
+Furthermore, we continued to remove the usage of \texttt{GeometryInfo} from
+the library and to replace the instances by more general equivalent functions, which
+in many cases rely of \texttt{ReferenceCell}. Once all instance of
+\texttt{GeometryInfo} are remove, we will deprecate the class.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-\subsection{Topic 2}
-
-
+\subsection{Repartitioning of distributed meshes}\label{sec:repartitioning}
+
+Until now, distributed meshes were either partitioned statically (\texttt{parallel::\allowbreak fullydistributed::\allowbreak Triangulation}; short \texttt{p::f::T}) or used a
+fixed policy to partition the cells among processes
+(\texttt{parallel::\allowbreak distributed::\allowbreak Triangulation}; short \texttt{p::d::T}). For latter, we
+use a Morton-order as the backend of that class---\texttt{p4est}---does. Fixed Morton-order
+might provide very good performance in terms in communication and
+setup costs, but might be non-optimal when interfacing with other
+libraries that have fixed partitioning, most notably a Cartesian
+partitioning, themselves.
+
+New utility functions from the \texttt{RepartitioningPolicyTools} can be
+used now to create a new \texttt{p::f::T} instances,
+given a distributed triangulation (\texttt{p::f::T} or \texttt{p::d::T}) and a vector with the new owners of locally
+owned cells. The workflow is shown in the following listing:
+\begin{c++}
+// original triangulation
+parallel::distributed::Triangulation<dim> tria(comm);
+
+// select a partitioning policy and use it
+const RepartitioningPolicyTools::Cartesian<dim> policy(tria);
+const auto construction_data = TriangulationDescription::Utilities::
+ create_description_from_triangulation(tria, policy.partition(tria));
+
+// create the new triangulation
+parallel::fullydistributed::Triangulation<dim> tria_pft(comm);
+tria_pft.create_triangulation(construction_data);
+\end{c++}
+Instead of using one of the predefined partitioning policies, users
+can write their own by implementing the \texttt{RepartitioningPolicyTools::Base} interface. Similarly to the
+active level, also the multigrid levels can be repartitioned arbitrarily.
+
+\begin{figure}
+ \centering
+ \def\svgwidth{0.8\columnwidth}
+ \input{svg/repartitioning.pdf_tex}
+ \caption{Visualization of the repartitioning process: after
+ cells are assigned new ranks, each process collect sends the cells incl.
+ ghost cells to the new owner. There incoming cells are processed, duplicates
+ are removed and the local part of the triangulation is built.}\label{fig:repartitioning}
+\end{figure}
+
+The setup process is visualized in Figure~\ref{fig:repartitioning}. First cells, incl. their
+surrounding (ghost) cells and their parent cells, are collected and
+sent to the new owner. On the
+receiving side, the set of all cells are combined and possible duplicates
+are removed. This information is enough to construct a new triangulation.
+For sending/receiving, we apply consensus-based algorithms~\cite{hoefler2010scalable}, which
+we introduced in the library in release 9.2~\cite{dealII92}. Consensus-based
+algorithms are used also in \cite{ibanez2016pumi} for repartitioning.
+
+In future releases, we plan to add support for repartitioning based on distributed graph
+partitioning libraries, e.g., \texttt{ParMETIS} of \texttt{Zotan}. Furthermore, we intend to extend the
+\texttt{p::f::T} with adaptivity support.
+With this and and the new repartitionging features, \texttt{p::f::T}
+could be selfconsistent like \texttt{p::d::T}, which is an important
+step towards the support of AMR also for distributed simplex and mixed meshes
+(see also Subsection~\ref{sec:simplex}).
+
+%We would like to note that we provide a similar class also for repartitioning
+%of vectors: \texttt{Noncontiguous\allowbreak Partitioner} from the
+%\texttt{Utilities::MPI} namespace.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-\subsection{Topic 3}
+\subsection{Advances in matrix-free infrastructure}\label{sec:mf}
+In the matrix-free infrastructure, we have added many new features. Most
+notably:
+\begin{itemize}
+\item Improved support of Hessians: just like values and gradients can be
+evaluated and integrated during matrix-free loops, one can do this now
+also for Hessians both for cells and faces. This enables, e.g., to write
+a matrix-free version of step-47, which solves the biharmonic equation with DG.
+\item Cell-centric loops now also allow to access to gradients and Hessians
+of neighboring cells on faces. The major obstacle here was to reorientation
+of theses in the case of arbitrary orientated cells on unstructured meshes.
+\item Users can now create their own cell batches, by providing \texttt{FEEvaluation::reinit()} a list of cell IDs. \texttt{FEEvaluation}
+accesses the appropriate data and reshuffles mapping data accordingly on
+the fly to enable vectorization over cells. The new feature is useful in many
+contexts. Examples are application with sharp interfaces (e.g., two phase flow
+or shock capturing) where one needs to treat cells that are ``cut'' by
+the interface in a special way. A challenge is that cell batchs
+might contain cut or not-cut cell, making vectorization potentially more complication. One way to deal with such cell batches it to apply masks if
+the code paths do not diverge too much
+(many functions of \texttt{FEEvaluation} allows this). Another way is to
+categorize cells during \texttt{MatrixFree::reinit()} in such a way that mixed cell batches do not occur. However, calling \texttt{MatrixFree::reinit()}
+might be too expensive if a very dynamic system is given, which requires
+recatorization in each time step. Doing this on-the-fly might be a cheep alternative, even if not computationally optimal during matrix-free loops.
+\end{itemize}
+Besides these new features, we improved the performance of
+hanging-node-constraint evaluation on the CPU. Instead of performing
+quasi-dense matrix-vector multiplications~\cite{KronbichlerKormann2012}, we now use an
+approach based on inplace interpolation and sumfactorization, similarly
+as we already did in the GPU code~\cite{ljungkvist2017matrix}. The algorithm is described
+in \cite{munch2022hn} and performance numbers are shown, indicating a reduction
+of overhead of cells with hanging nodes by a factor of 10$\times$.
+
+Furthermore, we have performed a major restructuring of internals
+of the \texttt{FEEvaluation} classes. This will enable us to add more
+simply the support of new element types in the future, e.g., of
+Raviart--Thomas and Nedelec elements.
+
+
+%\begin{c++}
+%additional_data.mapping_update_flags = ... | update_hessians;
+%\end{c++}
+%
+%\begin{c++}
+%FEEvaluation<dim> phi(matrix_free);
+%
+%phi.reinit(cell);
+%phi.gather_evaluate(src, ... | EvaluationFlags::hessians);
+%
+%for(const auto q : phi.quadrature_point_indices())
+% phi.submit_hessian(phi.get_hessian(q), q);
+%
+%phi.integrate_scatter(... | EvaluationFlags::hessians, dst);
+%\end{c++}
+%
+%... similar for faces; can be used to implement biharmonic equation (like in
+%step-X)
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-\subsection{Topic 4}
+\subsection{Advances in multigrid infrastructure}\label{sec:multigrid}
+
+In release 9.3~\cite{dealII93}, we added support for global coarsening multigrid in
+addition to the established local smoothing infrastructure. Global
+coarsening smoothens on the whole computational domain on each
+multigrid level, which are obtained by coarsening the finest mesh globally.
+For this purpose, we use a sequence of triangulations, on which we perform
+the smoothing only on the active levels. To create the sequence of
+triangulations, one can use the functions \texttt{create\_geometric\_coarsening\_sequence()} from the
+\texttt{MGTransferGlobalCoarseningTools} namespace. A new version takes an
+instance of \texttt{RepartitioningPolicyTools::Base} (see Subsection~\ref{sec:repartitioning}, which allow to specify the parallel
+distribution of each multigrid level (in contrast to the fixed---first-child---policy in the case of local smoothing). Furthermore, we added support of block vectors,
+fixed a number of limitations, and performed performance optimizations of
+the transfer operator; particularly, the redundant copy from/to temporary vectors
+has been eliminated and the application of hanging-node constraints are applied
+efficiently the same way as in the matrix-free loops (see Subsection~\ref{sec:mf}).
+
+In \cite{munch2022gc}, the performance of \texttt{deal.II}'s local-smoothing and global-coarsening
+infrastructure was compared for locally refined meshes. The results indicate that
+the local definition of multirgrid levels might introduce load imbalances
+in the case of local smoothing so that global coarsening is favorable despite
+of potentially more expensive inter-grid transfers. To judge the benefit
+of one approach against the other, \texttt{deal.II} provides new functions
+\texttt{workload\_imbalance()} and \texttt{vertical\_communication\_efficiency()}
+in the \texttt{MGTools} namespace to estimate the workload imbalance and the
+vertical communication efficiency purely based on the given mesh. The publication also points out that not
+all types of smoothers are applicable for global coarsening, due to the
+presence of hanging-nodes, which is a motivation to add new smoother types
+to \dealii.
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\subsection{CutFEM support}\label{sec:cut}
+\begin{itemize}
+\item new classes
+\end{itemize}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-\subsection{Topic 5}
+\subsection{Performance improvement of particle infrastructure}\label{sec:particles}
+
+\begin{itemize}
+\item describe the new data structure
+\item do we have performance numbers?
+\end{itemize}
Many of the \dealii{} tutorial programs were revised in a variety of
ways as part of this release. In addition, there are a number of new tutorial programs:
\begin{itemize}
-\item \texttt{TODO} TODO.
-
-
+\item \texttt{step-82} was contributed by Andrea Bonito (Texas A\&M University) and Diane Guignard (University of Ottawa). It shows how
+\dealii{} can be used to implement the
+local discontinuous Galerkin (LDG) method for approximating the solution to the bi-Laplacian problem.
+\item \texttt{step-85} was contributed by Simon Sticko (Uppsala University). It shows how to use the new CutFEM infrastructure to solve a Poisson
+problem on a circular domain that is embedded in a Cartesian background mesh.
\end{itemize}
-There is also a new program in the code gallery (a collection of
-user-contributed programs that often solve more complicated problems
-than tutorial programs, and intended as starting points for further
-research rather than as teaching tools):
-\begin{itemize}
-\item ``\texttt{TODO}'' TODO.
-\end{itemize}
+%There is also a new program in the code gallery (a collection of
+%user-contributed programs that often solve more complicated problems
+%than tutorial programs, and intended as starting points for further
+%research rather than as teaching tools):
+%\begin{itemize}
+%\item ``\texttt{TODO}'' TODO.
+%\end{itemize}
The 9.4 release includes
\href{https://dealii.org/developer/doxygen/deal.II/changes_between_9_3_0_and_9_4_0.html}
-{around TODO incompatible changes}; see \cite{changes94}. The majority of these changes
+{around 40 incompatible changes}; see \cite{changes94}. The majority of these changes
should not be visible to typical user codes; some remove previously
deprecated classes and functions; and the majority change internal
interfaces that are not usually used in external
applications. That said, the following are worth mentioning since they
may have been more widely used:
\begin{itemize}
- \item TODO
- \item TODO
+ \item In continuation of our attempt to merge the classes \texttt{DoFHandler} and \texttt{hp::DoFHandler}, we have removed the
+ template parameter \texttt{DoFHandlerType} form many classes and
+ functions and replaced it by \texttt{dim}/\texttt{spacedim}. Affected
+ classes are, e.g., \texttt{SolutionTransfer} and \texttt{DataOut}.
+ \item \texttt{FE\_RaviartThomasNodal} now uses a different polynomial space to allow
+for a simpler use for faces in non-standard orientation. The new polynomials
+are anisotropic tensor products of Lagrange polynomials on the points of a
+Gauss--Lobatto quadrature formula. This change leads to different entries in
+the matrices and constraints, for example, but as the resulting polynomial
+space spans the same polynomials, no change in accuracy should be expected.
+\item We made different changes to the repartitoning of \texttt{parallel::distributed::Triangulation}. Most notably, we have have
+removed the default weight (10,000) for consistency reasons with the rest
+of the library.
\end{itemize}
\begin{multicols}{2}
\vspace*{-36pt}
\begin{itemize}
- \item For geometric multigrid: \cite{Kanschat2004,JanssenKanschat2011,ClevengerHeisterKanschatKronbichler2019};
+ \item For geometric multigrid: \cite{Kanschat2004,JanssenKanschat2011,ClevengerHeisterKanschatKronbichler2019, munch2022gc};
\item For distributed parallel computing: \cite{BangerthBursteddeHeisterKronbichler11};
\item For $hp$-adaptivity: \cite{BangerthKayserHerold2007};
\item For partition-of-unity (PUM) and finite element enrichment methods:
% Uwe Koecher doesn't usually show up in the changelog, but
% we should make sure he's listed.
%
-% 9.3: updated 5/08/2021 PM
-% sorted by WB 5/28
-TODO.
+% 9.4: updated 23/04/2022 PM
+Pasquale Africa,
+Tyler Anderson,
+Francesco Andreuzzi,
+Mathias Anselmann,
+Maximilian Bergbauer,
+Bruno Blais,
+Till Budde,
+Fabian Castelli,
+Praveen Chandrashekar,
+Cu Cui,
+Ivo Dravins,
+Marco Feder,
+Niklas Fehn,
+Johannes Friedlein,
+Sebastian Fuchs,
+Rene Gassmoeller,
+Nicola Giuliani,
+Alexander Grayver,
+Diane Guignard,
+Jake Harmon,
+Sean Ingimarson,
+Pengfei Jia,
+Sebastian Kinnewig,
+Simon Konrad,
+Katharina Kormann,
+Paras Kumar,
+Wenyu Lei,
+Alberto F. Martin,
+Nils Much,
+Lucas Myers,
+Justin O'Connor,
+Judith Pauen,
+Vachan Potluri,
+Raghunandan Pratoori,
+Sebastian Proell,
+Ce Qin,
+Reza Rastak,
+Jose E. Roman,
+Raphael Schoof,
+Magdalena Schreter,
+Konrad Simon,
+Simon Sticko,
+Bruno Turcksin,
+Kuljit S. Virk,
+Michał Wichrowski,
+Niklas Wik,
+Jiaqi Zhang.
+
Their contributions are much appreciated!
--- /dev/null
+%% Creator: Inkscape 1.1.2 (1:1.1+202202050942+0a00cf5339), www.inkscape.org
+%% PDF/EPS/PS + LaTeX output extension by Johan Engelen, 2010
+%% Accompanies image file 'repartitioning.pdf' (pdf, eps, ps)
+%%
+%% To include the image in your LaTeX document, write
+%% \input{<filename>.pdf_tex}
+%% instead of
+%% \includegraphics{<filename>.pdf}
+%% To scale the image, write
+%% \def\svgwidth{<desired width>}
+%% \input{<filename>.pdf_tex}
+%% instead of
+%% \includegraphics[width=<desired width>]{<filename>.pdf}
+%%
+%% Images with a different path to the parent latex file can
+%% be accessed with the `import' package (which may need to be
+%% installed) using
+%% \usepackage{import}
+%% in the preamble, and then including the image with
+%% \import{<path to file>}{<filename>.pdf_tex}
+%% Alternatively, one can specify
+%% \graphicspath{{<path to file>/}}
+%%
+%% For more information, please see info/svg-inkscape on CTAN:
+%% http://tug.ctan.org/tex-archive/info/svg-inkscape
+%%
+\begingroup%
+ \makeatletter%
+ \providecommand\color[2][]{%
+ \errmessage{(Inkscape) Color is used for the text in Inkscape, but the package 'color.sty' is not loaded}%
+ \renewcommand\color[2][]{}%
+ }%
+ \providecommand\transparent[1]{%
+ \errmessage{(Inkscape) Transparency is used (non-zero) for the text in Inkscape, but the package 'transparent.sty' is not loaded}%
+ \renewcommand\transparent[1]{}%
+ }%
+ \providecommand\rotatebox[2]{#2}%
+ \newcommand*\fsize{\dimexpr\f@size pt\relax}%
+ \newcommand*\lineheight[1]{\fontsize{\fsize}{#1\fsize}\selectfont}%
+ \ifx\svgwidth\undefined%
+ \setlength{\unitlength}{684.71485517bp}%
+ \ifx\svgscale\undefined%
+ \relax%
+ \else%
+ \setlength{\unitlength}{\unitlength * \real{\svgscale}}%
+ \fi%
+ \else%
+ \setlength{\unitlength}{\svgwidth}%
+ \fi%
+ \global\let\svgwidth\undefined%
+ \global\let\svgscale\undefined%
+ \makeatother%
+ \begin{picture}(1,0.45602588)%
+ \lineheight{1}%
+ \setlength\tabcolsep{0pt}%
+ \put(0,0){\includegraphics[width=\unitlength,page=1]{repartitioning.pdf}}%
+ \put(0.88363077,0.05285442){\color[rgb]{0,0,0}\makebox(0,0)[lt]{\lineheight{1.25}\smash{\begin{tabular}[t]{l}\tiny 0\end{tabular}}}}%
+ \put(0.91134681,0.05285442){\color[rgb]{0,0,0}\makebox(0,0)[lt]{\lineheight{1.25}\smash{\begin{tabular}[t]{l}\tiny 1\end{tabular}}}}%
+ \put(0.9388259,0.05285442){\color[rgb]{0,0,0}\makebox(0,0)[lt]{\lineheight{1.25}\smash{\begin{tabular}[t]{l}\tiny 2\end{tabular}}}}%
+ \put(0.96654194,0.05285442){\color[rgb]{0,0,0}\makebox(0,0)[lt]{\lineheight{1.25}\smash{\begin{tabular}[t]{l}\tiny 3\end{tabular}}}}%
+ \put(0.86106546,0.05285442){\color[rgb]{0,0,0}\makebox(0,0)[rt]{\lineheight{1.25}\smash{\begin{tabular}[t]{r}\tiny{ranks:}\end{tabular}}}}%
+ \put(0,0){\includegraphics[width=\unitlength,page=2]{repartitioning.pdf}}%
+ \put(0.0907548,0.44492978){\color[rgb]{0,0,0}\makebox(0,0)[t]{\lineheight{1.25}\smash{\begin{tabular}[t]{c}\textit{old partitioning}\end{tabular}}}}%
+ \put(0.09075479,0.00303788){\color[rgb]{0,0,0}\makebox(0,0)[t]{\lineheight{1.25}\smash{\begin{tabular}[t]{c}\textit{new partitioning}\end{tabular}}}}%
+ \put(0,0){\includegraphics[width=\unitlength,page=3]{repartitioning.pdf}}%
+ \put(0.36459141,0.44492978){\color[rgb]{0,0,0}\makebox(0,0)[t]{\lineheight{1.25}\smash{\begin{tabular}[t]{c}\textit{old rank "0"}\end{tabular}}}}%
+ \put(0.36459141,0.00303788){\color[rgb]{0,0,0}\makebox(0,0)[t]{\lineheight{1.25}\smash{\begin{tabular}[t]{c}\textit{old rank "1"}\end{tabular}}}}%
+ \put(0,0){\includegraphics[width=\unitlength,page=4]{repartitioning.pdf}}%
+ \put(0.9133016,0.22778746){\color[rgb]{0,0,0}\makebox(0,0)[t]{\lineheight{1.25}\smash{\begin{tabular}[t]{c}\textit{new rank "0"}\end{tabular}}}}%
+ \put(0,0){\includegraphics[width=\unitlength,page=5]{repartitioning.pdf}}%
+ \end{picture}%
+\endgroup%
--- /dev/null
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ width="210mm"
+ height="297mm"
+ viewBox="0 0 210 297"
+ version="1.1"
+ id="svg8"
+ inkscape:version="1.1.2 (1:1.1+202202050942+0a00cf5339)"
+ sodipodi:docname="repartitioning.svg"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:dc="http://purl.org/dc/elements/1.1/">
+ <defs
+ id="defs2">
+ <marker
+ inkscape:stockid="Arrow1Lend"
+ orient="auto"
+ refY="0.0"
+ refX="0.0"
+ id="marker3007"
+ style="overflow:visible;"
+ inkscape:isstock="true">
+ <path
+ id="path3005"
+ d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
+ style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1;fill:#000000;fill-opacity:1"
+ transform="scale(0.8) rotate(180) translate(12.5,0)" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow1Lend"
+ orient="auto"
+ refY="0.0"
+ refX="0.0"
+ id="marker2651"
+ style="overflow:visible;"
+ inkscape:isstock="true">
+ <path
+ id="path2649"
+ d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
+ style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1;fill:#000000;fill-opacity:1"
+ transform="scale(0.8) rotate(180) translate(12.5,0)" />
+ </marker>
+ <marker
+ inkscape:isstock="true"
+ style="overflow:visible;"
+ id="marker1352"
+ refX="0.0"
+ refY="0.0"
+ orient="auto"
+ inkscape:stockid="Arrow1Lend">
+ <path
+ transform="scale(0.8) rotate(180) translate(12.5,0)"
+ style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1;fill:#000000;fill-opacity:1"
+ d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
+ id="path1350" />
+ </marker>
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="4.8493903"
+ inkscape:cx="651.93763"
+ inkscape:cy="332.51603"
+ inkscape:document-units="mm"
+ inkscape:current-layer="layer2"
+ showgrid="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1136"
+ inkscape:window-x="0"
+ inkscape:window-y="0"
+ inkscape:window-maximized="1"
+ showguides="true"
+ inkscape:guide-bbox="true"
+ inkscape:pagecheckerboard="0">
+ <inkscape:grid
+ type="xygrid"
+ id="grid815" />
+ <sodipodi:guide
+ position="-95.249998,280.45834"
+ orientation="1,0"
+ id="guide3385"
+ inkscape:locked="false" />
+ <sodipodi:guide
+ position="-31.749999,301.62501"
+ orientation="1,0"
+ id="guide3387"
+ inkscape:locked="false" />
+ <sodipodi:guide
+ position="31.749999,280.45834"
+ orientation="1,0"
+ id="guide3389"
+ inkscape:locked="false" />
+ <sodipodi:guide
+ position="58.208332,234.15626"
+ orientation="1,0"
+ id="guide3564"
+ inkscape:locked="false" />
+ <sodipodi:guide
+ position="63.499999,219.60417"
+ orientation="1,0"
+ id="guide4163"
+ inkscape:locked="false" />
+ <sodipodi:guide
+ position="-79.374998,222.91667"
+ orientation="0,-1"
+ id="guide1272" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata5">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:groupmode="layer"
+ id="layer2"
+ inkscape:label="Layer 2"
+ style="display:inline;opacity:0.5">
+ <rect
+ style="fill:none;fill-opacity:1;stroke:none;stroke-width:1.85208;stroke-miterlimit:4;stroke-dasharray:none"
+ id="rect1919"
+ width="2.5431314e-06"
+ height="0.66666663"
+ x="-10.583336"
+ y="10.583333" />
+ <rect
+ style="fill:#00ff00;fill-opacity:1;stroke:none;stroke-width:1.85208;stroke-miterlimit:4;stroke-dasharray:none"
+ id="rect2001"
+ width="21.166656"
+ height="21.166649"
+ x="-52.916676"
+ y="-32.279167"
+ transform="scale(1,-1)" />
+ <rect
+ style="fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:1.85208;stroke-miterlimit:4;stroke-dasharray:none"
+ id="rect2099"
+ width="21.166656"
+ height="21.166649"
+ x="-52.916676"
+ y="-53.445816"
+ transform="scale(1,-1)" />
+ <rect
+ style="fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:1.85208;stroke-miterlimit:4;stroke-dasharray:none"
+ id="rect2181"
+ width="21.166656"
+ height="21.166649"
+ x="-31.749998"
+ y="-32.279167"
+ transform="scale(1,-1)" />
+ <rect
+ style="fill:#ffff00;fill-opacity:1;stroke:none;stroke-width:1.85208;stroke-miterlimit:4;stroke-dasharray:none"
+ id="rect2183"
+ width="21.166656"
+ height="21.166649"
+ x="-31.749998"
+ y="-53.445816"
+ transform="scale(1,-1)" />
+ <rect
+ style="fill:none;fill-opacity:1;stroke:none;stroke-width:1.85208;stroke-miterlimit:4;stroke-dasharray:none"
+ id="rect2417"
+ width="2.5431314e-06"
+ height="0.66666663"
+ x="-10.583336"
+ y="62.970852" />
+ <rect
+ style="fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:1.85208;stroke-miterlimit:4;stroke-dasharray:none"
+ id="rect2421"
+ width="42.333344"
+ height="10.583344"
+ x="-52.916676"
+ y="-105.83334"
+ transform="scale(1,-1)" />
+ <rect
+ style="fill:#ffff00;fill-opacity:1;stroke:none;stroke-width:1.85208;stroke-miterlimit:4;stroke-dasharray:none"
+ id="rect2425"
+ width="42.333336"
+ height="10.583333"
+ x="-52.916668"
+ y="-95.25"
+ transform="scale(1,-1)" />
+ <rect
+ style="fill:#00ff00;fill-opacity:1;stroke:none;stroke-width:1.85208;stroke-miterlimit:4;stroke-dasharray:none"
+ id="rect2815"
+ width="42.333344"
+ height="10.583344"
+ x="-52.916676"
+ y="-84.666679"
+ transform="scale(1,-1)" />
+ <rect
+ style="fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:1.85208;stroke-miterlimit:4;stroke-dasharray:none"
+ id="rect2817"
+ width="42.333336"
+ height="10.583333"
+ x="-52.916668"
+ y="-74.083336"
+ transform="scale(1,-1)" />
+ <rect
+ style="fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:1.85208;stroke-miterlimit:4;stroke-dasharray:none"
+ id="rect3045"
+ width="26.458334"
+ height="10.583344"
+ x="29.104166"
+ y="-105.83334"
+ transform="scale(1,-1)" />
+ <rect
+ style="fill:#ffff00;fill-opacity:1;stroke:none;stroke-width:1.85208;stroke-miterlimit:4;stroke-dasharray:none"
+ id="rect3047"
+ width="26.458334"
+ height="10.583336"
+ x="29.104166"
+ y="-95.25"
+ transform="scale(1,-1)" />
+ <rect
+ style="fill:#00ff00;fill-opacity:1;stroke:none;stroke-width:1.85208;stroke-miterlimit:4;stroke-dasharray:none"
+ id="rect3151"
+ width="26.458334"
+ height="5.2916794"
+ x="29.104166"
+ y="-84.666679"
+ transform="scale(1,-1)" />
+ <rect
+ style="fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:1.85208;stroke-miterlimit:4;stroke-dasharray:none"
+ id="rect3255"
+ width="26.458334"
+ height="10.583344"
+ x="13.229167"
+ y="-53.710415"
+ transform="scale(1,-1)" />
+ <rect
+ style="fill:#ffff00;fill-opacity:1;stroke:none;stroke-width:1.85208;stroke-miterlimit:4;stroke-dasharray:none"
+ id="rect3257"
+ width="26.458334"
+ height="10.583336"
+ x="13.229167"
+ y="-43.127071"
+ transform="scale(1,-1)" />
+ <rect
+ style="fill:#00ff00;fill-opacity:1;stroke:none;stroke-width:1.85208;stroke-miterlimit:4;stroke-dasharray:none"
+ id="rect3259"
+ width="26.458334"
+ height="5.2916794"
+ x="13.229167"
+ y="-32.543755"
+ transform="scale(1,-1)" />
+ <rect
+ style="fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:1.85208;stroke-miterlimit:4;stroke-dasharray:none"
+ id="rect5724"
+ width="26.458334"
+ height="10.583344"
+ x="13.229167"
+ y="-53.710415"
+ transform="scale(1,-1)" />
+ <rect
+ style="fill:#ffff00;fill-opacity:1;stroke:none;stroke-width:1.85208;stroke-miterlimit:4;stroke-dasharray:none"
+ id="rect5726"
+ width="26.458334"
+ height="10.583336"
+ x="13.229167"
+ y="-43.127071"
+ transform="scale(1,-1)" />
+ <rect
+ style="fill:#00ff00;fill-opacity:1;stroke:none;stroke-width:1.85208;stroke-miterlimit:4;stroke-dasharray:none"
+ id="rect5728"
+ width="26.458334"
+ height="5.2916794"
+ x="13.229167"
+ y="-32.543755"
+ transform="scale(1,-1)" />
+ <rect
+ style="fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:1.85208;stroke-miterlimit:4;stroke-dasharray:none"
+ id="rect5832"
+ width="26.458334"
+ height="10.583344"
+ x="79.441422"
+ y="-53.710415"
+ transform="scale(1,-1)" />
+ <rect
+ style="fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:1.85208;stroke-miterlimit:4;stroke-dasharray:none"
+ id="rect5838"
+ width="26.458334"
+ height="10.583344"
+ x="79.441422"
+ y="-53.710415"
+ transform="scale(1,-1)" />
+ <rect
+ style="fill:#ffff00;fill-opacity:1;stroke:none;stroke-width:1.85208;stroke-miterlimit:4;stroke-dasharray:none"
+ id="rect5840"
+ width="26.458336"
+ height="5.2916546"
+ x="79.441422"
+ y="-43.127071"
+ transform="scale(1,-1)" />
+ <rect
+ style="fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:1.85208;stroke-miterlimit:4;stroke-dasharray:none"
+ id="rect5844"
+ width="26.458334"
+ height="10.583344"
+ x="95.25"
+ y="-105.83334"
+ transform="scale(1,-1)" />
+ <rect
+ style="fill:#ffff00;fill-opacity:1;stroke:none;stroke-width:1.85208;stroke-miterlimit:4;stroke-dasharray:none"
+ id="rect5846"
+ width="26.458336"
+ height="5.2916665"
+ x="95.25"
+ y="-95.25"
+ transform="scale(1,-1)" />
+ <rect
+ style="fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:1.85208;stroke-miterlimit:4;stroke-dasharray:none"
+ id="rect7908"
+ width="42.333324"
+ height="10.583344"
+ x="145.52083"
+ y="-53.710423"
+ transform="scale(1,-1)" />
+ <rect
+ style="fill:#ffff00;fill-opacity:1;stroke:none;stroke-width:1.85208;stroke-miterlimit:4;stroke-dasharray:none"
+ id="rect7910"
+ width="42.333324"
+ height="5.2916641"
+ x="145.52083"
+ y="-43.127079"
+ transform="scale(1,-1)" />
+ <rect
+ style="fill:#00ff00;fill-opacity:1;stroke:none;stroke-width:1.85208;stroke-miterlimit:4;stroke-dasharray:none"
+ id="rect28810"
+ width="5.2916665"
+ height="5.2916818"
+ x="170.65625"
+ y="-103.18752"
+ transform="scale(1,-1)" />
+ <rect
+ style="fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:1.85208;stroke-miterlimit:4;stroke-dasharray:none"
+ id="rect28812"
+ width="5.2916665"
+ height="5.2916565"
+ x="157.42708"
+ y="-103.1875"
+ transform="scale(1,-1)" />
+ <rect
+ style="fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:1.85208;stroke-miterlimit:4;stroke-dasharray:none"
+ id="rect28814"
+ width="5.2916617"
+ height="5.2916818"
+ x="177.27084"
+ y="-103.18752"
+ transform="scale(1,-1)" />
+ <rect
+ style="fill:#ffff00;fill-opacity:1;stroke:none;stroke-width:1.85208;stroke-miterlimit:4;stroke-dasharray:none"
+ id="rect28816"
+ width="5.2916617"
+ height="5.2916565"
+ x="164.04167"
+ y="-103.18749"
+ transform="scale(1,-1)" />
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-weight:normal;font-size:1.41111px;line-height:1.25;font-family:sans-serif;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
+ x="159.99493"
+ y="102.09044"
+ id="text31776"><tspan
+ sodipodi:role="line"
+ id="tspan31774"
+ style="font-size:1.41111px;text-align:center;text-anchor:middle;stroke-width:0.264583"
+ x="159.99493"
+ y="102.09044">\tiny 0</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-weight:normal;font-size:1.41111px;line-height:1.25;font-family:sans-serif;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
+ x="166.6898"
+ y="102.09044"
+ id="text40284"><tspan
+ sodipodi:role="line"
+ id="tspan40282"
+ style="font-size:1.41111px;text-align:center;text-anchor:middle;stroke-width:0.264583"
+ x="166.6898"
+ y="102.09044">\tiny 1</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-weight:normal;font-size:1.41111px;line-height:1.25;font-family:sans-serif;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
+ x="173.32744"
+ y="102.09044"
+ id="text40288"><tspan
+ sodipodi:role="line"
+ id="tspan40286"
+ style="font-size:1.41111px;text-align:center;text-anchor:middle;stroke-width:0.264583"
+ x="173.32744"
+ y="102.09044">\tiny 2</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-weight:normal;font-size:1.41111px;line-height:1.25;font-family:sans-serif;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
+ x="180.02231"
+ y="102.09044"
+ id="text40292"><tspan
+ sodipodi:role="line"
+ id="tspan40290"
+ style="font-size:1.41111px;text-align:center;text-anchor:middle;stroke-width:0.264583"
+ x="180.02231"
+ y="102.09044">\tiny 3</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-weight:normal;font-size:1.41111px;line-height:1.25;font-family:sans-serif;text-align:end;text-anchor:end;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
+ x="154.54424"
+ y="102.09044"
+ id="text2401"><tspan
+ sodipodi:role="line"
+ id="tspan2399"
+ style="font-size:1.41111px;text-align:end;text-anchor:end;stroke-width:0.264583"
+ x="154.54424"
+ y="102.09044">\tiny{ranks:}</tspan></text>
+ </g>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ style="display:inline"
+ sodipodi:insensitive="true">
+ <rect
+ y="11.25"
+ x="-52.916668"
+ height="42.333332"
+ width="42.333332"
+ id="rect833"
+ style="opacity:1;fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path835"
+ d="m -52.916667,21.833333 h 42.333333"
+ style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path837"
+ d="m -52.916667,32.416668 h 42.333333"
+ style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path839"
+ d="m -52.916667,43.000001 h 42.333333"
+ style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path841"
+ d="M -42.333334,11.25 V 53.583334"
+ style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path843"
+ d="M -31.75,11.25 V 53.583334"
+ style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path845"
+ d="M -21.166667,11.25 V 53.583334"
+ style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M -47.625,11.25 V 53.583334"
+ id="path847"
+ inkscape:connector-curvature="0" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M -37.041666,11.25 V 53.583334"
+ id="path849"
+ inkscape:connector-curvature="0" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M -26.458333,11.25 V 53.583334"
+ id="path851"
+ inkscape:connector-curvature="0" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path853"
+ d="M -15.875,11.25 V 53.583334"
+ style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m -52.916667,16.541665 h 42.333333"
+ id="path855"
+ inkscape:connector-curvature="0" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m -52.916667,27.125 h 42.333333"
+ id="path857"
+ inkscape:connector-curvature="0" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m -52.916667,37.708333 h 42.333333"
+ id="path859"
+ inkscape:connector-curvature="0" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path861"
+ d="m -52.916667,48.291667 h 42.333333"
+ style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-weight:normal;font-size:11.2889px;line-height:1.25;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
+ x="-31.525991"
+ y="7.3837776"
+ id="text3405"><tspan
+ sodipodi:role="line"
+ id="tspan3403"
+ x="-31.52599"
+ y="7.3837776"
+ style="font-size:3.52778px;text-align:center;text-anchor:middle;stroke-width:0.264583">\textit{old partitioning}</tspan></text>
+ <text
+ id="text3455"
+ y="114.12373"
+ x="-31.525991"
+ style="font-style:normal;font-weight:normal;font-size:11.2889px;line-height:1.25;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
+ xml:space="preserve"><tspan
+ style="font-size:3.52778px;text-align:center;text-anchor:middle;stroke-width:0.264583"
+ y="114.12373"
+ x="-31.525991"
+ id="tspan3453"
+ sodipodi:role="line">\textit{new partitioning}</tspan></text>
+ <rect
+ y="63.5"
+ x="-52.916668"
+ height="42.333332"
+ width="42.333332"
+ id="rect1354"
+ style="opacity:1;fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path1356"
+ d="m -52.916667,74.083329 h 42.333333"
+ style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path1358"
+ d="m -52.916667,84.666664 h 42.333333"
+ style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path1360"
+ d="m -52.916667,95.249993 h 42.333333"
+ style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path1362"
+ d="M -42.333334,63.499996 V 105.83333"
+ style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path1364"
+ d="M -31.75,63.499996 V 105.83333"
+ style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path1366"
+ d="M -21.166667,63.499996 V 105.83333"
+ style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M -47.625,63.499996 V 105.83333"
+ id="path1368"
+ inkscape:connector-curvature="0" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M -37.041666,63.499996 V 105.83333"
+ id="path1370"
+ inkscape:connector-curvature="0" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M -26.458333,63.499996 V 105.83333"
+ id="path1372"
+ inkscape:connector-curvature="0" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path1374"
+ d="M -15.875,63.499996 V 105.83333"
+ style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m -52.916667,68.791661 h 42.333333"
+ id="path1376"
+ inkscape:connector-curvature="0" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m -52.916667,79.374996 h 42.333333"
+ id="path1378"
+ inkscape:connector-curvature="0" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m -52.916667,89.958333 h 42.333333"
+ id="path1380"
+ inkscape:connector-curvature="0" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path1382"
+ d="m -52.916667,100.54166 h 42.333333"
+ style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <rect
+ y="11.25"
+ x="13.229165"
+ height="42.333332"
+ width="42.333332"
+ id="rect1384"
+ style="opacity:1;fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path1388"
+ d="M 13.229166,32.416668 H 39.6875"
+ style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ sodipodi:nodetypes="cc" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path1390"
+ d="M 13.229166,43.000001 H 39.6875"
+ style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ sodipodi:nodetypes="cc" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path1392"
+ d="M 23.812499,26.9875 V 53.583334"
+ style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ sodipodi:nodetypes="cc" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path1394"
+ d="M 34.395833,26.9875 V 53.583334"
+ style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M 18.520833,27.252083 V 53.583334"
+ id="path1398"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M 29.104167,26.9875 V 53.583334"
+ id="path1400"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M 39.6875,26.9875 V 53.583334"
+ id="path1402"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M 13.229166,27.125 H 39.6875"
+ id="path1408"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M 13.229166,37.708333 H 39.6875"
+ id="path1410"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cc" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path1412"
+ d="M 13.229166,48.291667 H 39.6875"
+ style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ sodipodi:nodetypes="cc" />
+ <path
+ sodipodi:nodetypes="cc"
+ style="fill:none;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker2651)"
+ d="m 58.208333,32.416667 h 15.875"
+ id="path1414"
+ inkscape:connector-curvature="0" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path1416"
+ d="m 58.208333,85.33333 h 15.875"
+ style="fill:none;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker2651)"
+ sodipodi:nodetypes="cc" />
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-weight:normal;font-size:11.2889px;line-height:1.25;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
+ x="34.619843"
+ y="7.3837776"
+ id="text1420"><tspan
+ sodipodi:role="line"
+ id="tspan1418"
+ x="34.619843"
+ y="7.3837776"
+ style="font-size:3.52778px;text-align:center;text-anchor:middle;stroke-width:0.264583">\textit{old rank "0"}</tspan></text>
+ <text
+ id="text1424"
+ y="114.12373"
+ x="34.619843"
+ style="font-style:normal;font-weight:normal;font-size:11.2889px;line-height:1.25;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
+ xml:space="preserve"><tspan
+ style="font-size:3.52778px;text-align:center;text-anchor:middle;stroke-width:0.264583"
+ y="114.12373"
+ x="34.619843"
+ id="tspan1422"
+ sodipodi:role="line">\textit{old rank "1"}</tspan></text>
+ <rect
+ y="63.5"
+ x="13.229165"
+ height="42.333332"
+ width="42.333332"
+ id="rect1426"
+ style="opacity:1;fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path1430"
+ d="M 29.104167,84.666664 H 55.562499"
+ style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ sodipodi:nodetypes="cc" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path1432"
+ d="M 29.104167,95.249993 H 55.562499"
+ style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ sodipodi:nodetypes="cc" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path1436"
+ d="m 34.395833,79.375 v 26.45833"
+ style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ sodipodi:nodetypes="cc" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path1438"
+ d="m 44.979166,79.375 v 26.45833"
+ style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 29.104167,79.375 v 26.45833"
+ id="path1442"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 39.6875,79.375 v 26.45833"
+ id="path1444"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cc" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path1446"
+ d="m 50.270833,79.375 v 26.45833"
+ style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M 29.104167,79.374996 H 55.562499"
+ id="path1450"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M 29.104167,89.958333 H 55.562499"
+ id="path1452"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cc" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path1454"
+ d="M 29.104167,100.54166 H 55.562499"
+ style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ sodipodi:nodetypes="cc" />
+ <rect
+ y="11.25"
+ x="79.375"
+ height="42.333332"
+ width="42.333332"
+ id="rect1456"
+ style="opacity:1;fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <path
+ sodipodi:nodetypes="cc"
+ style="fill:none;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker2651)"
+ d="m 124.35417,32.416667 15.875,0.127083"
+ id="path1486"
+ inkscape:connector-curvature="0" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path1488"
+ d="m 124.35417,85.33333 15.875,-42.999997"
+ style="fill:none;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker2651)"
+ sodipodi:nodetypes="cc" />
+ <text
+ id="text1496"
+ y="59.83498"
+ x="167.16199"
+ style="font-style:normal;font-weight:normal;font-size:11.2889px;line-height:1.25;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
+ xml:space="preserve"><tspan
+ style="font-size:3.52778px;text-align:center;text-anchor:middle;stroke-width:0.264583"
+ y="59.83498"
+ x="167.16199"
+ id="tspan1494"
+ sodipodi:role="line">\textit{new rank "0"}</tspan></text>
+ <rect
+ y="63.5"
+ x="79.375"
+ height="42.333332"
+ width="42.333332"
+ id="rect1498"
+ style="opacity:1;fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <rect
+ y="11.377084"
+ x="145.52084"
+ height="42.333332"
+ width="42.333332"
+ id="rect1570"
+ style="opacity:1;fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path1576"
+ d="m 145.52084,43.127078 h 42.33333"
+ style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path1578"
+ d="m 156.10417,37.835415 v 15.875"
+ style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ sodipodi:nodetypes="cc" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path1580"
+ d="m 166.68751,37.835415 v 15.875"
+ style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ sodipodi:nodetypes="cc" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path1582"
+ d="m 177.27084,37.835415 v 15.875"
+ style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 150.8125,37.835415 v 15.875"
+ id="path1584"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 161.39584,37.835415 v 15.875"
+ id="path1586"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 171.97917,37.835415 v 15.875"
+ id="path1588"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cc" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path1590"
+ d="m 182.56251,37.835415 v 15.875"
+ style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 145.52084,37.835418 h 42.33333"
+ id="path1596"
+ inkscape:connector-curvature="0" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path1598"
+ d="m 145.52084,48.418745 h 42.33333"
+ style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path5526"
+ d="M 95.250001,95.249993 H 121.70833"
+ style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ sodipodi:nodetypes="cc" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path5528"
+ d="M 100.54167,89.958333 V 105.83333"
+ style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ sodipodi:nodetypes="cc" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path5530"
+ d="M 111.125,89.958333 V 105.83333"
+ style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M 95.250001,89.958333 V 105.83333"
+ id="path5532"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M 105.83333,89.958333 V 105.83333"
+ id="path5534"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cc" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path5536"
+ d="M 116.41667,89.958333 V 105.83333"
+ style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M 95.250001,89.958333 H 121.70833"
+ id="path5540"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cc" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path5542"
+ d="M 95.250001,100.54166 H 121.70833"
+ style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ sodipodi:nodetypes="cc" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path5706"
+ d="M 79.374999,43.000001 H 105.83333"
+ style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ sodipodi:nodetypes="cc" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path5708"
+ d="M 89.958332,37.570833 V 53.583334"
+ style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ sodipodi:nodetypes="cc" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path5710"
+ d="M 100.54167,37.835417 V 53.583334"
+ style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M 84.666666,37.570833 V 53.583334"
+ id="path5712"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M 95.25,37.570833 V 53.583334"
+ id="path5714"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M 105.83333,37.708333 V 53.583334"
+ id="path5716"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M 79.374999,37.708333 H 105.83333"
+ id="path5720"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cc" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path5722"
+ d="M 79.374999,48.291667 H 105.83333"
+ style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ sodipodi:nodetypes="cc" />
+ </g>
+</svg>