text:
\section{Algebraic multigrid}\label{sec:AMG}

Algebraic multigrid (AMG) was introduced as a method for mimicking the performance of geometric multigrid on unstructured grids.
The multilevel process is realized from a purely algebraic standpoint without
any  explicit knowledge of the problem geometry.
The most popular published implementation of the algorithm is the one by Ruge and Stuben (RS) \cite{Ruge.Stuben.87};
for an introduction to AMG, see e.g. \cite{Briggs.06,Trottenberg, Falgout.introAMG} and  \cite{Yang} for parallel AMG methods.

The  two main components of multigrid
 are \emph{smoothing} and \emph{coarse-grid correction}.
Coarse-grid correction involves operators that transfer information between fine and coarse ``grids'', i.e.,
from the vector space $\mathbb{R}^n$ to the coarse vector space $\mathbb{R}^{n_c}$.
{\em Prolongation} maps the coarse grid to the fine grid and is just the
matrix $P : \mathbb{R}^{n_c} \rightarrow \mathbb{R}^n$. {\em Restriction}
maps the fine grid to the coarse grid and is the transpose of interpolation, $P^T$.
The two-grid method for solving \nref{system}  is then:

\

{\rm\tt  \begin{algorithmic}[a]
\State  do $n_1$ smoothing steps on $A\mathbf{u} = \mathbf{f}$.
\State  Compute residual $\mathbf{r} = \mathbf{f} - A \mathbf{u} = A \mathbf{e}$.
\State  Solve $A_c \mathbf{e}_c = P^T \mathbf{r}$.
\State  Correct $\mathbf{u}\leftarrow \mathbf{u}+P \mathbf{e}_c$.
\State  do $n_2$ smoothing steps on $A\mathbf{u} = \mathbf{f}$.
\end{algorithmic}}
\

The vector $\mathbf{e} = A^{-1}\mathbf{f} - \mathbf{u}$ is the difference between the exact solution and the current iterate and it
is called the \emph{error}.
The coarse system $A_c \mathbf{e}_c=P^T \mathbf{r}$  is solved by re-applying the algorithm, yielding a hierarchy of coarse grids, transfer operators, and coarse-grid systems.

In the AMG method these components are realized in a purely algebraic way, without exploiting any knowledge of the underlying discretization method. The \emph{smoother} (or relaxation process)   is generally an iterative method  such as point-wise Gauss-Seidel, which effectively eliminates some errors, while other components of the error are reduced quite slowly. The smooth error component, in the case of AMG, is then defined to be any component of the error not reduced by the relaxation. The nonzero structure of the matrix is used to determine the adjacency relationships between the unknowns and the smooth error components are related  to strongly connected degrees of freedom.
We say that $u_i$ is connected to $u_j$ if the element matrix $a_{ij}\neq0$.
The magnitude of $a_{ij}$ indicates how strong the connection is and how much influence the error at $j$ has on the error at $i$ in the relaxation.
Following the classic RS algorithm \cite{Ruge.Stuben.87},  $u_i$ is defined to be strongly connected to $u_j$ if
$-a_{ij}\geq \theta \max_{k\neq i} (-a_{ik}),  $
 with $\theta$ being a user-defined strength threshold.

An alternative successful coarsening strategy is based on the so-called \emph{smoothed aggregation} (SA) technique \cite{Vanek_Mandel_Brezina}, where a coarse node is defined by an aggregate of a root point $i$  and all the neighboring nodes $j$  such that $a_{ij} > \theta \sqrt{|a_{ii}a_{jj}|}$.

The AMG algorithms have setup costs associated with the automatic selection of coarse grid operators that other multilevel methods do not have in general. This automatic selection makes implementing the algorithm into a given application simpler, but it does add extra computations to every simulation that cannot be a priori estimated.

In this work we follow the \emph{CG accelerated multigrid (AMG/CG)} approach where  AMG
is used as a preconditioner for the conjugate gradient (CG) method.
This approach has
the advantage  that the Krylov method reduces the error in the eigenmodes that are not being effectively reduced by multigrid.

All our numerical experiments were carried out by using the Portable Extensible Toolkit for Scientific computation
(PETSc)~\cite{petsc-web-page}.
We now briefly recall the methods and the corresponding codes used for the numerical tests.

\subsection{Methods}\label{sec:methods}

As iterative solvers, we used the conjugate gradient method implemented in PETSc~\cite{petsc-web-page} and its interfaces to different AMG preconditioners, with default settings. More precisely we considered:
\begin{itemize}
	\item GAMG: native AMG preconditioner implemented in PETSc. We tested two different versions: a classical AMG method (c-GAMG) and a smoothed aggregation AMG method (a-GAMG)~\cite{petsc-user-ref}.
	\item BoomerAMG: a parallel algebraic multigrid solver and preconditioner, which is part of the \textit{hypre} library~\cite{falgout2006} (\url{http://www.llnl.gov/CASC/hypre/}).
	\item ML: Multi Level Preconditioning Package, a smoothed aggregation algebraic preconditioner developed at Sandia National Laboratories~\cite{ml-guide} (\url{https://trilinos.org/packages/ml/}).
\end{itemize}

We also compared the performance of several direct solvers, which were called via
the interfaces available in PETSc~\cite{petsc-web-page}:
\begin{itemize}
	\item SuperLU and SuperLU\_Dist: sparse LU codes developed by Jim
	Demmel, Xiaoye S. Li, and John Gilbert~\cite{li05}
	(\url{http://crd-legacy.lbl.gov/˜xiaoye/SuperLU});
	\item UMFPACK: part of the SuiteSparse package developed by Timothy Davis~\cite{davis2004-umfpack} (\url{http://www.cise.ufl.edu/research/sparse/});
	\item MUMPS: MUltifrontal Massively Parallel sparse direct Solver, developed by
	Patrick Amestoy, Iain Duff, Jacko Koster, and Jean-Yves L'Excellent~\cite{amestoy2001,amestoy2006} (\url{http://www.enseeiht.fr/lima/apo/MUMPS/credits.html});
	\item PaStiX: Parallel LU and Cholesky solvers~\cite{henon2002} (\url{http://pastix.gforge.inria.fr/}).
\end{itemize}
SuperLU and UMFPACK are sequential solvers, whereas SuperLU\_Dist, MUMPS, and PaStiX can handle distributed memory systems. These last three solvers were run using $2$ processes.

All the experiments were run on a machine equipped with processor Intel$^\text{\textregistered}$ Core$^\text{\texttrademark}$ i7-7820HQ, operating system Ubuntu Linux 16.04 LTS, memory 64GB, 2400MHz DDR4 Non-ECC SDRAM.

\section{Numerical tests}\label{sec:numerical}
In this section we present results for  the solution of linear systems arising from the discretization with the virtual element method of degree one  of the following model problem:
\begin{align}\label{eq:poisson}
-\nabla\cdot(\rho \nabla u) &= f\qquad \text{in }\Omega = (0,1)^2,\\
u &= 0\qquad \text{on }\partial\Omega,\nonumber
\end{align}
with $\rho$ diffusion coefficient.
Boundary conditions and loading term are chosen so that \linebreak
$u = \frac{1}{2\pi^2}\sin(2\pi x)\sin(2\pi y)$
is the exact solution.
Several different meshes and diffusion coefficients $\rho$ are considered.
 %
We start testing a constant-coefficient diffusion problem on a regular polygonal mesh,  then we deal with  irregular polygonal meshes, agglomeration of meshes and finally, highly heterogeneous coefficients $\rho$.

We analyze the performance of the Conjugate Gradient method (CG) preconditioned with different  AMG preconditioners.
 All problems are run with different AMG codes but with fixed parameters.

 Let $\Omega$ and
 $\mathcal{T}_h$ be the computational domain and a polygonal tessellation, respectively. We define:
 \begin{itemize}
 	\item $N_\textup{elt}$, number of polygons of $\mathcal{T}_h$,
	\item $N_\textup{v}$, number of vertices of $\mathcal{T}_h$.
 	\item $\displaystyle h = \max_{K\in\mathcal{T}_h} h_K$, where $h_K$ is the diameter of element $K\in \mathcal{T}_h$.
 	\item $\displaystyle h_\textup{min} = \min_{K\in\mathcal{T}_h} h_{\textup{min},K}$, where $h_{\textup{min},K}$ is the minimum distance between any two vertices of $K$.
 	\item $\displaystyle \gamma_0 = \max_{K\in\mathcal{T}_h}\frac{h_K}{\rho_K}$, where $\rho_K$ is the radius of the largest ball that is contained inside $K$.
 	\item $\displaystyle \gamma_1 = \max_{K\in\mathcal{T}_h}\frac{h_K}{h_{\textup{min},K}}$.
 \end{itemize}
 We consider  different meshes by varying the shape of each cell and we study if the performance of the methods is affected by the shape of the cell and/or the presence of very small/large edges.
We deal with the following different polygonal meshes $\mathcal{T}_h$:
\begin{enumerate}[1)]
	\item regular hexagons meshes (Figure~\ref{fig:hexa});
	\item Voronoi meshes from uniformly random seed points

	(Figure~\ref{fig:mesh-voro});
	\item meshes of "horse"  cell (Figure~\ref{fig:mesh-horse}); each horse is made up of 76 edges;
	\item sequence of meshes obtained by embedding successive iterates of the Koch snowflake into a rectangle  (Figure~\ref{fig:mesh-koch}).
\end{enumerate}
We remark that Voronoi and hexagonal
meshes are  the ones
more likely to be used, whereas all the other meshes are considered here only for stress testing of AMG preconditioners.
In particular we observe that snowflake meshes are particularly complex and challenging, as they are characterized by very small edges on the boundary of the snowflake and greater edges on the boundary of the square. These meshes may be of interest in domains with periodic structures.

Moreover, in view of a possible use of AMG in an adaptive approach, we also deal with meshes obtained by agglomerating an underlying fine mesh. More precisely,
we consider  different Voronoi and horse meshes and build coarse grid elements by agglomerating fine grid elements,
that is, we deal with:
\begin{enumerate}[1)]
\setcounter{enumi}{4}
	\item aggregates of Voronoi cells  (Figure~\ref{fig:mesh-voro-agg}),
	\item
aggregates of "horse" cells (Figure~\ref{fig:mesh-horse-agg}).
\end{enumerate}

Let us now analyze the results.  The first Tables~\ref{tab:mesh-hexa},\ref{tab:mesh-voro},\ref{tab:mesh-horse},\ref{tab:mesh-voro-agg},\ref{tab:mesh-horse-agg} list the values of the geometrical parameters defined above for each mesh considered;

 %
 we recall that the number of unknowns coincides with the number of vertices $N_\textup{v}$.
 %
 Then,  in Tables~\ref{tab:k1-hexa},\ref{tab:k1-voro},\ref{tab:k1-horse},\ref{tab:k1-koch} and \ref{tab:k1-voro-agg},\ref{tab:k1-horse-agg} (for the case of aggregates of cells),
we report, for each mesh, the condition number $\kappa$
of the matrix $A$ in (\ref{system}) with and without AMG preconditioning.
 The condition numbers are numerical approximations computed from the standard tridiagonal Lanczos matrix generated during the preconditioned CG iteration as the ratio between the maximum and the minimum eigenvalues, see e.g. \cite{GolubVanLoan_1996}.
 %
Since in the following we deal also with a performance comparison of different (iterative and direct) solvers available in PETSc,
the stopping criterion fixed for CG is defined by
 the relative residual error
  obtained with the direct solver SuperLU\_DIST (see \texttt{atol} reported in each Table).

We start by presenting the behavior of the condition number and of the iteration count when hexagonal meshes are taken into account.
In this case the scalability of all the AMG preconditioners considered is clearly shown in Table~\ref{tab:k1-hexa}: the iteration count to converge does not depend on the number of the mesh nodes. If we pass from hexagonal to  Voronoi meshes (see Table~\ref{tab:k1-voro}), which are characterized by worse geometrical parameters, we notice only a slight  increase in the number of iterations and in the condition number while the scalability is still preserved.

Instead, when dealing with horse or snowflake elements, we note  an increase in the number of iterations (Tables~\ref{tab:k1-horse}-\ref{tab:k1-koch}); scalability is not preserved by c-GAMG.
The best results are obtained by using BoomerAMG for the horse meshes and ML for the snowflake meshes.
In this last case,  scalability is preserved also by BoomerAMG and a-GAMG, but with a higher number of iterations.
Similar results can also be observed with meshes of agglomerates of Voronoi or horse
cells (see  Tables~\ref{tab:k1-voro-agg} and \ref{tab:k1-horse-agg}).  As before, BoomerAMG outperforms the other preconditioners, but, for the agglomerates of snowflakes cells, it still exhibits a high number of iterations, thereby worsening its computational performance, as we will see in the next sections. %

\input{hexa}

\input{voronoi}

\input{horse}

\input{snowflakes}

\input{voro_agg}

\input{horse_agg}

\input{disc}
\input{comput_time_fig}

\section{Conclusion}\label{sec:conclusion}
We numerically investigated the performance of AMG preconditioners
for the solution of a model elliptic problem  on polygonal meshes employing the virtual element method.
The tested meshes range from the most regular hexagonal to more complex and challenging grids that may mimic features of  more realistic problems such as those based on periodic cellular structures. %
Our results show that CG accelerated multigrid (AMG/CG) is very effective when dealing with either regular (hexagonal) or Voronoi and aggregates of Voronoi meshes.
Moreover, our tests showed that BoomerAMG is also robust if highly varying diffusion coefficients are considered for both set of meshes considered.
Hinging on the results of the present paper, the adoption of AMG preconditioners (in particular BoomerAMG) seems to be a promising approach for solving large linear systems of equations associated with a VEM discretization, in terms of both scalability and reduction of the overall computational cost.

 However, we also verified that, when more complex and challenging meshes are taken into account, such as meshes with many tiny (when compared to the diameter of the elements) edges, most of the considered AMG preconditioners do not preserve scalability, whilst those that retain it, like BoomerAMG or ML, lose most of their efficiency.
 Certainly, the linear system associated with the VEM discretization based on these meshes deserves further investigations that will be addressed in future works.

\bibliographystyle{amsplain}

\subsection{Performance Comparison of Direct and Iterative Solvers}
\label{computational_times_fig}

Finally we compare the performance of several direct and iterative solvers available in PETSCs by measuring the elapsed time for both setup and solving.
We recall that, for iterative methods, convergence was decided by the decrease of either the relative or the absolute residual norm as obtained with the direct solver SuperLU\_DIST (see \texttt{rtol} and \texttt{abstol} reported in each Table).
Figures~\ref{fig:k1-hexa-voro},\ref{fig:k1-koch}, \ref{fig:k1-horse-agg},
\ref{fig:hexa-random} and \ref{fig:voro-random-metis} display the time in seconds (for setup and solving) for both direct and direct solvers in a loglog scale.

The best results are obtained with BoomerAMG and/or with ML for hexagonal, Voronoi and horse meshes, as well as for meshes of aggregated Voronoi cells.
Conversely, when considering Koch snowflake meshes and aggregates of horse cells,
direct methods outperform AMG preconditioners.
We recall that
AMG preconditioners require a high number of iterations for these meshes, as shown in Figure~\ref{fig:k1-koch}-right and  \ref{fig:k1-horse-agg}-right and Tables~\ref{tab:k1-koch}, \ref{tab:k1-horse-agg}, thereby worsening their performance.

Clearly, a more accurate evaluation of the efficiency of AMG techniques for this type of meshes
 would require a deeper analysis (outside the scope of this work),
such as an ad-hoc tuning of the AMG parameters or a more accurate analysis of the matrices involved.

\begin{figure}
	\centering

	\begin{tikzpicture}[scale=1.2][trim axis left]
	\begin{loglogaxis}[small, xlabel=Dofs, ylabel={Time $[s]$}, title = {hexagonal},
	legend columns=5,
	legend entries={$\text{No Prec}$;, $\text{c-GAMG}$;, $\text{a-GAMG}$;, $\text{BoomerAMG}$;, $\text{ML}$;, $\text{SuperLU}$;, $\text{UMFPACK}$;, $\text{MUMPS}$;, $\text{SuperLU\_DIST}$;, $\text{PaStiX}$},
	legend to name=named-hexa-voro,
	cycle list name=mycolorlist]

	\addplot coordinates {
		(20304, 0.045653)
		(80604, 0.16226)
		(180904, 0.47489)
		(321204, 1.1451)
		(501504, 2.2957)
		(721804, 3.9597)
		(982104, 6.4281)
		(1282404, 9.2533)
		(1622704, 12.969)
		(2003004, 17.36)
	};

	\addplot coordinates {
		(20304, 0.20505)
		(80604, 0.82052)
		(180904, 1.9168)
		(321204, 3.458)
		(501504, 5.3899)
		(721804, 7.951)
		(982104, 10.892)
		(1282404, 13.988)
		(1622704, 17.638)
		(2003004, 21.989)
	};

	\addplot coordinates {
		(20304, 0.10766)
		(80604, 0.48551)
		(180904, 1.147)
		(321204, 2.127)
		(501504, 3.3479)
		(721804, 4.8896)
		(982104, 6.7115)
		(1282404, 8.9592)
		(1622704, 11.472)
		(2003004, 14.22)
	};

	\addplot coordinates {
		(20304, 0.053521)
		(80604, 0.22416)
		(180904, 0.53778)
		(321204, 0.9893)
		(501504, 1.619)
		(721804, 2.3374)
		(982104, 3.2013)
		(1282404, 4.3529)
		(1622704, 5.5429)
		(2003004, 6.7944)
	};

	\addplot coordinates {
		(20304, 0.04433)
		(80604, 0.20129)
		(180904, 0.50579)
		(321204, 0.91425)
		(501504, 1.494)
		(721804, 2.266)
		(982104, 3.1606)
		(1282404, 4.3112)
		(1622704, 5.4728)
		(2003004, 6.92)
	};

	\addplot coordinates {
		(20304, 0.43678)
		(80604, 4.4357)
		(180904, 17.16)
		(321204, 40.319)
		(501504, 94.402)
		(721804, 190.54)
		(982104, 299.4)
		(1282404, 450.36)
		(1622704, 678.48)
		(2003004, 917.19)
	};

	\addplot coordinates {
		(20304, 0.20205)
		(80604, 1.76)
		(180904, 4.7001)
		(321204, 10.114)
		(501504, 28.546)
		(721804, 36.074)
		(982104, 153.1)

	};

	\addplot coordinates {
		(20304, 0.36014)
		(80604, 2.3383)
		(180904, 7.3608)
		(321204, 15.961)
		(501504, 30.678)
		(721804, 52.996)
		(982104, 82.006)
		(1282404, 125.26)
		(1622704, 163.5)
		(2003004, 233.31)
	};

	\addplot coordinates {
		(20304, 0.27888)
		(80604, 1.5642)
		(180904, 4.614)
		(321204, 10.364)
		(501504, 18.414)
		(721804, 30.481)
		(982104, 49.179)
		(1282404, 71.369)
		(1622704, 100.93)
		(2003004, 135.5)
	};

	\addplot coordinates {
		(20304, 0.30496)
		(80604, 1.8645)
		(180904, 5.512)
		(321204, 12.598)
		(501504, 24.532)
		(721804, 36.777)
		(982104, 59.314)
		(1282404, 84.039)
		(1622704, 116.91)
		(2003004, 161.21)
	};
	\end{loglogaxis}
	\end{tikzpicture}

	\begin{tikzpicture}[scale=1.2][trim axis left]
	\begin{loglogaxis}[small,
	xlabel=Dofs,
	title = {Voronoi},
	cycle list name=mycolorlist]

	\addplot coordinates {
		(5006, 0.91552)
		(10008, 2.9097)
		(20007, 9.4653)
		(40011, 24.67)
		(80007, 85.39)
		(160028, 218.74)
		(320020, 760.42)
		(640035, 2387.3)
		(1280053, 7067.2)

	};

	\addplot coordinates {
		(5006, 0.08162)
		(10008, 0.16309)
		(20007, 0.32221)
		(40011, 0.6834)
		(80007, 1.4079)
		(160028, 2.9335)
		(320020, 6.0827)
		(640035, 12.407)
		(1280053, 25.664)
		(2560065, 52.643)
	};

	\addplot coordinates {
		(5006, 0.043763)
		(10008, 0.09054)
		(20007, 0.17557)
		(40011, 0.35923)
		(80007, 0.76393)
		(160028, 1.5958)
		(320020, 3.2037)
		(640035, 6.6865)
		(1280053, 13.743)
		(2560065, 28.153)
	};

	\addplot coordinates {
		(5006, 0.029351)
		(10008, 0.05628)
		(20007, 0.10303)
		(40011, 0.20794)
		(80007, 0.45199)
		(160028, 0.92067)
		(320020, 1.8673)
		(640035, 4.0881)
		(1280053, 8.3346)
		(2560065, 17.311)
	};

	\addplot coordinates {
		(5006, 0.019332)
		(10008, 0.040488)
		(20007, 0.076759)
		(40011, 0.1638)
		(80007, 0.36494)
		(160028, 0.75699)
		(320020, 1.6226)
		(640035, 3.4304)
		(1280053, 7.1346)
		(2560065, 14.924)
	};

	\addplot coordinates {
		(5006, 0.048909)
		(10008, 0.13066)
		(20007, 0.39211)
		(40011, 1.1661)
		(80007, 3.6194)
		(160028, 11.41)
		(320020, 34.604)
		(640035, 104.42)
		(1280053, 342.92)
		(2560065, 1070.3)
	};

	\addplot coordinates {
		(5006, 0.028318)
		(10008, 0.074702)
		(20007, 0.20329)
		(40011, 0.51084)
		(80007, 1.4038)
		(160028, 4.1462)
		(320020, 12.708)
		(640035, 39.266)

	};

	\addplot coordinates {
		(5006, 0.059363)
		(10008, 0.13736)
		(20007, 0.3329)
		(40011, 0.83607)
		(80007, 2.1098)
		(160028, 5.9635)
		(320020, 14.214)
		(640035, 38.819)
		(1280053, 89.477)
		(2560065, 265.41)
	};

	\addplot coordinates {
		(5006, 0.055963)
		(10008, 0.12392)
		(20007, 0.27823)
		(40011, 0.65385)
		(80007, 1.5334)
		(160028, 3.624)
		(320020, 9.1874)
		(640035, 23.621)
		(1280053, 63.586)
		(2560065, 182.87)
	};

	\addplot coordinates {
		(5006, 0.054207)
		(10008, 0.14279)
		(20007, 0.33321)
		(40011, 0.76909)
		(80007, 1.8535)
		(160028, 4.398)
		(320020, 11.807)
		(640035, 32.741)
		(1280053, 78.915)
		(2560065, 228.65)
	};
	\end{loglogaxis}
	\end{tikzpicture}
	\\
	\ref{named-hexa-voro}

	\caption{Time (for setup and solving)
		of direct and iterative solvers in a loglog scale for the {\em hexagonal meshes} of Table~\ref{tab:mesh-hexa} and for the {\em Voronoi meshes} of Table~\ref{tab:mesh-voro}.

		With mesh voro$_{10}$, CG without preconditioning requires more than $10000$ iterations to reach convergence.
With meshes voro$_9$, voro$_{10}$ and hexa$_8$, hexa$_9$, hexa$_{10}$ UMFPACK fails due to an \emph{out of memory} error.
	}
	\label{fig:k1-hexa-voro}
\end{figure}

\begin{figure}
	\centering

	\begin{tikzpicture}[scale=1.2][trim axis left]
	\begin{loglogaxis}[
	small,
	xlabel=Dofs, ylabel={Time $[s]$}, title = {horses},
	legend columns=5,
	legend entries={$\text{No Prec}$;, $\text{c-GAMG}$;, $\text{a-GAMG}$;, $\text{BoomerAMG}$;, $\text{ML}$;, $\text{SuperLU}$;, $\text{UMFPACK}$;, $\text{MUMPS}$;, $\text{SuperLU\_DIST}$;, $\text{PaStiX}$},
	legend to name=named-horse-koch,
	cycle list name=mycolorlist]

	\addplot coordinates {
		(94401, 149.33)
		(135481, 250.89)
		(183961, 380.27)
		(239841, 549.03)
		(303121, 766.32)
		(373801, 1026)
		(451881, 1295.9)
		(537361, 1663)
		(630241, 2081.9)
		(730521, 2571.2)
	};

	\addplot coordinates {
		(94401, 24.673)
		(135481, 38.347)
		(183961, 57.833)
		(239841, 81.981)
		(303121, 116.91)
		(373801, 145.49)
		(451881, 188.48)
		(537361, 242.24)
		(630241, 302.77)
		(730521, 367.86)
	};

	\addplot coordinates {
		(94401, 16.6)
		(135481, 24.273)
		(183961, 33.713)
		(239841, 44.681)
		(303121, 57.57)
		(373801, 71.957)
		(451881, 86.813)
		(537361, 104.55)
		(630241, 123.07)
		(730521, 143.51)
	};

	\addplot coordinates {
		(94401, 11.332)
		(135481, 16.156)
		(183961, 22.014)
		(239841, 30.306)
		(303121, 36.166)
		(373801, 46.732)
		(451881, 57.419)
		(537361, 68.282)
		(630241, 79.241)
		(730521, 91.991)
	};

	\addplot coordinates {
		(94401, 4.5034)
		(135481, 6.6268)
		(183961, 9.3621)
		(239841, 12.751)
		(303121, 16.547)
		(373801, 20.957)
		(451881, 25.622)
		(537361, 30.879)
		(630241, 35.882)
		(730521, 43.889)
	};

	\addplot coordinates {
		(94401, 280.2)
		(135481, 578.07)
		(183961, 1068.7)
		(239841, 1819.5)
		(303121, 2910.7)
		(373801, 4425.4)
		(451881, 7690.3)
		(537361, 8554.2)

	};

	\addplot coordinates {
		(94401, 53.079)
		(135481, 97.411)
		(183961, 151.42)
		(239841, 237.75)
		(303121, 352.39)

	};

	\addplot coordinates {
		(94401, 28.767)
		(135481, 48.24)
		(183961, 75.912)
		(239841, 110.89)
		(303121, 162.01)
		(373801, 141.7)
		(451881, 284.76)
		(537361, 338.76)
		(630241, 452.43)
		(730521, 597)
	};

	\addplot coordinates {
		(94401, 14.244)
		(135481, 27.227)
		(183961, 39.155)
		(239841, 60.67)
		(303121, 78.628)
		(373801, 109.2)
		(451881, 155.55)
		(537361, 198.77)
		(630241, 258.73)
		(730521, 308.16)
	};

	\addplot coordinates {
		(94401, 20.271)
		(135481, 26.959)
		(183961, 44.552)
		(239841, 71.129)
		(303121, 90.443)
		(373801, 125.58)
		(451881, 181.73)
		(537361, 242.53)
		(630241, 284.98)
		(730521, 402.3)
	};
	\end{loglogaxis}
	\end{tikzpicture}
	\begin{tikzpicture}[scale=1.2][trim axis left]
	\begin{loglogaxis}[
	small,
	xlabel=Dofs,
	 title ={Koch snowflakes},
	cycle list name=mycolorlist]

	\addplot coordinates {
		(27973, 21.531)
		(49713, 51.627)
		(77661, 97.942)
		(111817, 166.27)
		(152181, 262.51)
		(198753, 327.79)
		(251533, 454.06)
		(310521, 587.12)
		(375717, 761.78)
		(447121, 913.9)
		(524733, 1113.7)
		(608553, 1332.8)
		(698581, 1584.1)
	};

	\addplot coordinates {
		(27973, 16.394)
		(49713, 32.685)
		(77661, 56.046)
		(111817, 86.023)
		(152181, 123.2)
		(198753, 168.41)
		(251533, 226.3)
		(310521, 291.17)
		(375717, 375.47)
		(447121, 443.58)
		(524733, 534.65)
		(608553, 643.22)
		(698581, 745.59)
	};

	\addplot coordinates {
		(27973, 12.55)
		(49713, 23.781)
		(77661, 36.768)
		(111817, 53.713)
		(152181, 73.848)
		(198753, 96.782)
		(251533, 122.69)
		(310521, 153.01)
		(375717, 184.01)
		(447121, 219.29)
		(524733, 258.17)
		(608553, 299.8)
		(698581, 345.2)
	};

	\addplot coordinates {
		(27973, 3.275)
		(49713, 5.5831)
		(77661, 8.7684)
		(111817, 12.42)
		(152181, 16.474)
		(198753, 21.117)
		(251533, 26.733)
		(310521, 32.799)
		(375717, 39.155)
		(447121, 45.871)
		(524733, 53.606)
		(608553, 62.004)
		(698581, 70.977)
	};

	\addplot coordinates {
		(27973, 1.0097)
		(49713, 1.8667)
		(77661, 3.0388)
		(111817, 4.6977)
		(152181, 6.5114)
		(198753, 8.9937)
		(251533, 11.435)
		(310521, 13.811)
		(375717, 17.606)
		(447121, 21.434)
		(524733, 24.59)
		(608553, 29.646)
		(698581, 33.412)
	};

	\addplot coordinates {
		(27973, 1.7345)
		(49713, 3.198)
		(77661, 5.2957)
		(111817, 8.1646)
		(152181, 11.924)
		(198753, 16.872)
		(251533, 23.069)
		(310521, 30.703)

	};

	\addplot coordinates {
		(27973, 1.3959)
		(49713, 2.5131)
		(77661, 3.9955)
		(111817, 5.8966)
		(152181, 8.0952)
		(198753, 10.863)
		(251533, 13.709)
		(310521, 16.57)
		(375717, 20.464)
		(447121, 24.926)

	};

	\addplot coordinates {
		(27973, 0.94683)
		(49713, 1.4538)
		(77661, 2.5893)
		(111817, 3.7623)
		(152181, 5.093)
		(198753, 5.8099)
		(251533, 7.16)
		(310521, 10.372)
		(375717, 12.739)
		(447121, 12.806)
		(524733, 17.894)
		(608553, 20.635)
		(698581, 20.187)
	};

	\addplot coordinates {
		(27973, 1.0734)
		(49713, 1.9793)
		(77661, 3.0891)
		(111817, 4.5162)
		(152181, 6.1561)
		(198753, 7.2941)
		(251533, 9.2413)
		(310521, 12.467)
		(375717, 13.956)
		(447121, 16.505)
		(524733, 19.547)
		(608553, 22.45)
		(698581, 28.09)
	};

	\addplot coordinates {
		(27973, 1.3945)
		(49713, 2.5254)
		(77661, 4.6091)
		(111817, 6.5096)
		(152181, 9.0957)
		(198753, 10.163)
		(251533, 12.863)
		(310521, 15.893)
		(375717, 19.586)
		(447121, 23.142)
		(524733, 27.031)
		(608553, 37.387)
		(698581, 42.312)
	};
	\end{loglogaxis}
	\end{tikzpicture}

	\ref{named-horse-koch}

	\caption{	Time (for setup and solving)
		of direct and iterative solvers in a loglog scale for \emph{meshes of horses} (Table~\ref{tab:mesh-horse}) and for meshes with {\em Koch snowflakes} (Table~\ref{tab:mesh-koch}).

		SuperLU fails due to an \emph{out of memory} error on meshes horse$_9$ and horse$_{10}$ and koch$_9$--koch$_{13}$ whereas UMFPACK fails on meshes horse$_6$--horse$_{10}$

			 and
			 koch$_{11}$--koch$_{13}$.
	}
	\label{fig:k1-koch}
\end{figure}

\begin{figure}
	\centering

	\begin{tikzpicture}[scale=1.2][trim axis left]
	\begin{loglogaxis}[
	small,
	xlabel=Dofs, ylabel={Time $[s]$}, title = {aggregated Voronoi},
	legend columns=5,
	legend entries={$\text{No Prec}$;, $\text{c-GAMG}$;, $\text{a-GAMG}$;, $\text{BoomerAMG}$;, $\text{ML}$;, $\text{SuperLU}$;, $\text{UMFPACK}$;, $\text{MUMPS}$;, $\text{SuperLU\_DIST}$;, $\text{PaStiX}$},
	legend to name=named-aggr,
	cycle list name=mycolorlist]

	\addplot coordinates {
		(5652, 0.91591)
		(11190, 3.3472)
		(22250, 9.8986)
		(44615, 33.218)
		(89283, 98.114)
		(180219, 319.52)
		(365921, 1004.9)
		(731552, 2850)
		(1471656, 8816)
	};

	\addplot coordinates {
		(5652, 0.2376)
		(11190, 0.48695)
		(22250, 1.1118)
		(44615, 2.7327)
		(89283, 6.2733)
		(180219, 15.513)
		(365921, 40.934)
		(731552, 101.21)
		(1471656, 278.36)
	};

	\addplot coordinates {
		(5652, 0.14155)
		(11190, 0.30161)
		(22250, 0.7198)
		(44615, 1.611)
		(89283, 3.5809)
		(180219, 7.4151)
		(365921, 15.585)
		(731552, 32.126)
		(1471656, 69.776)
	};

	\addplot coordinates {
		(5652, 0.091514)
		(11190, 0.17726)
		(22250, 0.32378)
		(44615, 0.66466)
		(89283, 1.3737)
		(180219, 3.0861)
		(365921, 6.3442)
		(731552, 12.776)
		(1471656, 29.381)
	};

	\addplot coordinates {
		(5652, 0.047074)
		(11190, 0.098826)
		(22250, 0.25157)
		(44615, 0.61792)
		(89283, 1.4189)
		(180219, 3.0051)
		(365921, 6.5038)
		(731552, 14.012)
		(1471656, 31.551)
	};

	\addplot coordinates {
		(5652, 0.44655)
		(11190, 2.1618)
		(22250, 5.0852)
		(44615, 19.197)
		(89283, 60.273)
		(180219, 180.88)
		(365921, 676.15)
		(731552, 2160.1)
		(1471656, 6601.2)
	};

	\addplot coordinates {
		(5652, 0.16557)
		(11190, 0.55736)
		(22250, 1.431)
		(44615, 4.4137)
		(89283, 15.475)
		(180219, 42.723)
		(365921, 161.19)

	};

	\addplot coordinates {
		(5652, 0.11158)
		(11190, 0.34276)
		(22250, 0.92242)
		(44615, 1.9924)
		(89283, 7.2822)
		(180219, 18.892)
		(365921, 59.134)
		(731552, 150.93)
		(1471656, 454.94)
	};

	\addplot coordinates {
		(5652, 0.09993)
		(11190, 0.25352)
		(22250, 0.58947)
		(44615, 1.521)
		(89283, 3.9478)
		(180219, 10.892)
		(365921, 31.527)
		(731552, 84.079)
		(1471656, 234.54)
	};

	\addplot coordinates {
		(5652, 0.093522)
		(11190, 0.25285)
		(22250, 0.62481)
		(44615, 1.7812)
		(89283, 4.1225)
		(180219, 16.042)
		(365921, 36.667)
		(731552, 107.36)
		(1471656, 243.77)
	};
	\end{loglogaxis}
	\end{tikzpicture}

	\begin{tikzpicture}[scale=1.2][trim axis left]
	\begin{loglogaxis}[
	small,
	xlabel=Dofs, title = {aggregated horses},
	cycle list name=mycolorlist]

	\addplot coordinates {
		(42621, 120.26)
		(61151, 299.89)
		(82007, 547.79)
		(107899, 934.99)
		(134589, 1410.2)
		(168525, 2097)
	};

	\addplot coordinates {
		(42621, 76.214)
		(61151, 123.16)
		(82007, 173.28)
		(107899, 246.47)
		(134589, 305.76)
		(168525, 418.23)
	};

	\addplot coordinates {
		(42621, 79.454)
		(61151, 120.5)
		(82007, 171.53)
		(107899, 233.86)
		(134589, 298.65)
		(168525, 393.51)
	};

	\addplot coordinates {
		(42621, 159.1)
		(61151, 281.54)
		(82007, 381.52)
		(107899, 524.13)
		(134589, 627.53)
		(168525, 888.74)
	};

	\addplot coordinates {
		(42621, 493.71)
		(61151, 851.44)
		(82007, 1325.6)
		(107899, 2055)

	};

	\addplot coordinates {
		(42621, 111.62)
		(61151, 190.7)
		(82007, 325.71)
		(107899, 516.99)

	};

	\addplot coordinates {
		(42621, 79.294)
		(61151, 134.25)
		(82007, 214.58)
		(107899, 361.02)
		(134589, 464.82)
		(168525, 566.2)
	};

	\addplot coordinates {
		(42621, 34.721)
		(61151, 64.283)
		(82007, 92.711)
		(107899, 160.29)
		(134589, 199.31)
		(168525, 273.21)
	};

	\addplot coordinates {
		(42621, 46.22)
		(61151, 79.695)
		(82007, 108.41)
		(107899, 121.97)
		(134589, 242.98)
		(168525, 348.91)
	};
	\end{loglogaxis}
	\end{tikzpicture}
	\ref{named-aggr}

	\caption
		Time (for setup and solving)
		of direct and iterative solvers in a loglog scale for meshes of \emph{aggregated Voronoi} and  \emph{aggregated horses} (Tables~\ref{tab:mesh-voro-agg}-\ref{tab:mesh-horse-agg}).

		Both SuperLU and UMFPACK fails on a-horse$_5$ and a-horse$_6$ due to an \emph{out of memory} error.}
	\label{fig:k1-horse-agg}
\end{figure}

\begin{figure}
	\centering

	\begin{tikzpicture}[scale=0.8][trim axis left]
	\begin{loglogaxis}[
	small, xlabel = Dofs, title = {$L = 64$},
	ylabel={Time $[s]$},
	legend columns=5,
	legend entries={$\text{c-GAMG}$;, $\text{a-GAMG}$;, $\text{BoomerAMG}$;, $\text{ML}$;, $\text{SuperLU}$;, $\text{UMFPACK}$;, $\text{MUMPS}$;, $\text{SuperLU\_DIST}$;, $\text{PaStiX}$},
	legend to name=robust-irho3-hexa-time,
	cycle list name=mycolorlist]

	\addplot coordinates {
		(80604, 0.91213)
		(321204, 3.9874)
		(721804, 8.3183)
		(1282404, 15.22)

	};

	\addplot coordinates {
		(80604, 0.60452)
		(321204, 2.9554)
		(721804, 6.0131)
		(1282404, 11.719)

	};

	\addplot coordinates {
		(80604, 0.26308)
		(321204, 1.0634)
		(721804, 2.6356)
		(1282404, 4.5659)
		(2003004, 7.1908)
	};

	\addplot coordinates {
		(80604, 0.306)
		(321204, 1.6689)
		(721804, 3.449)
		(1282404, 6.2838)
		(2003004, 12.95)
	};

	\addplot coordinates {
		(80604, 4.3881)
		(321204, 39.8)
		(721804, 188.9)
		(1282404, 445.33)
		(2003004, 907.64)
	};

	\addplot coordinates {
		(80604, 1.7315)
		(321204, 10.098)
		(721804, 35.454)

	};

	\addplot coordinates {
		(80604, 2.3106)
		(321204, 15.643)
		(721804, 52.596)
		(1282404, 124.48)
		(2003004, 231.43)
	};

	\addplot coordinates {
		(80604, 1.6881)
		(321204, 10.841)
		(721804, 30.718)
		(1282404, 72.509)
		(2003004, 138.22)
	};

	\addplot coordinates {
		(80604, 1.8712)
		(321204, 12.499)
		(721804, 36.769)
		(1282404, 84.145)
		(2003004, 161.01)
	};
	\end{loglogaxis}
	\end{tikzpicture}
	\begin{tikzpicture}[scale=0.8][trim axis left]
	\begin{loglogaxis}[
	small,  xlabel = Dofs, title = {$L = 256$},
	cycle list name=mycolorlist]

	\addplot coordinates {
		(80604, 1.1396)
		(321204, 5.5811)
		(721804, 13.857)
		(1282404, 27.385)
		(2003004, 32.243)
	};

	\addplot coordinates {
		(80604, 1.5927)
		(321204, 7.9401)
		(721804, 17.538)
		(1282404, 38.986)
		(2003004, 40.656)
	};

	\addplot coordinates {
		(80604, 0.27117)
		(321204, 1.101)
		(721804, 2.5346)
		(1282404, 4.2508)
		(2003004, 6.8684)
	};

	\addplot coordinates {
		(80604, 1.1405)
		(321204, 5.5657)
		(721804, 12.916)
		(1282404, 30.537)
		(2003004, 36.397)
	};

	\addplot coordinates {
		(80604, 4.3793)
		(321204, 39.85)
		(721804, 189.11)
		(1282404, 445.29)
		(2003004, 907.12)
	};

	\addplot coordinates {
		(80604, 3.1394)
		(321204, 14.702)
		(721804, 36.378)

	};

	\addplot coordinates {
		(80604, 2.3095)
		(321204, 15.746)
		(721804, 52.616)
		(1282404, 124.58)
		(2003004, 232.23)
	};

	\addplot coordinates {
		(80604, 1.6736)
		(321204, 10.779)
		(721804, 31.157)
		(1282404, 72.302)
		(2003004, 137.11)
	};

	\addplot coordinates {
		(80604, 1.8742)
		(321204, 12.279)
		(721804, 36.772)
		(1282404, 84.136)
		(2003004, 161.23)
	};
	\end{loglogaxis}
	\end{tikzpicture}
	\begin{tikzpicture}[scale=0.8][trim axis left]
	\begin{loglogaxis}[
	small,
	 xlabel = Dofs, title = {$L = 1024$},
	cycle list name=mycolorlist]

	\addplot coordinates {
		(80604, 5.0487)
		(321204, 14.182)
		(721804, 56.76)
		(1282404, 65.313)
		(2003004, 136.96)
	};

	\addplot coordinates {
		(80604, 14.688)
		(321204, 33.694)
		(721804, 89.818)
		(1282404, 135.07)
		(2003004, 293.3)
	};

	\addplot coordinates {
		(80604, 0.28678)
		(321204, 1.2879)
		(721804, 2.608)
		(1282404, 4.7267)
		(2003004, 6.9779)
	};

	\addplot coordinates {
		(80604, 16.315)
		(321204, 32.948)
		(721804, 93.934)
		(1282404, 119.62)
		(2003004, 326.04)
	};

	\addplot coordinates {
		(80604, 4.3622)
		(321204, 39.667)
		(721804, 189.55)
		(1282404, 445.16)
		(2003004, 906.21)
	};

	\addplot coordinates {
		(80604, 5.8249)
		(321204, 23.247)
		(721804, 218.18)

	};

	\addplot coordinates {
		(80604, 2.3098)
		(321204, 15.696)
		(721804, 52.661)
		(1282404, 124.6)
		(2003004, 231.67)
	};

	\addplot coordinates {
		(80604, 1.6676)
		(321204, 10.846)
		(721804, 31.021)
		(1282404, 72.557)
		(2003004, 137.36)
	};

	\addplot coordinates {
		(80604, 1.8786)
		(321204, 12.432)
		(721804, 36.804)
		(1282404, 83.913)
		(2003004, 160.99)
	};
	\end{loglogaxis}
	\end{tikzpicture}
	\ref{robust-irho3-hexa-time}

	\caption
		Time (for setup and solving)
		of direct and iterative solvers for the hexagonal meshes hexa$_2$, hexa$_4$, hexa$_6$, hexa$_8$ and hexa$_{10}$ of  Table~\ref{tab:mesh-hexa} partitioned
		in $L = 64, 256, 1024$ parts. Every elements of a part is assigned the same diffusion coefficient $\rho = 10^\alpha$, with $\alpha\in[-5,5]$.

}
	\label{fig:hexa-random}
\end{figure}

\begin{figure}
	\centering

	\begin{tikzpicture}[scale=0.8][trim axis left]
	\begin{loglogaxis}[
	small,
	xlabel=Dofs, ylabel={Time $[s]$}, title= {$L = 64$},
	legend columns=5,
	legend entries={$\text{c-GAMG}$;, $\text{a-GAMG}$;, $\text{BoomerAMG}$;, $\text{ML}$;, $\text{SuperLU}$;, $\text{UMFPACK}$;, $\text{MUMPS}$;, $\text{SuperLU\_DIST}$;, $\text{PaStiX}$},
	legend to name=robust-irho3-voro-time,
	cycle list name=mycolorlist]

	\addplot coordinates {
		(20007, 0.23919)
		(40011, 0.52486)
		(80007, 1.1242)
		(160028, 2.4742)
		(320020, 4.9139)
		(640035, 11.446)
		(1280053, 22.953)
		(2560065, 56.681)
	};

	\addplot coordinates {
		(20007, 0.25732)
		(40011, 0.44939)
		(80007, 0.93814)
		(160028, 1.948)
		(320020, 3.8165)
		(640035, 9.9439)
		(1280053, 18.485)
		(2560065, 38.991)
	};

	\addplot coordinates {
		(20007, 0.10895)
		(40011, 0.23189)
		(80007, 0.45836)
		(160028, 0.97389)
		(320020, 2.1262)
		(640035, 4.1607)
		(1280053, 9.4007)
		(2560065, 20.469)
	};

	\addplot coordinates {
		(20007, 0.13239)
		(40011, 0.30533)
		(80007, 0.5768)
		(160028, 1.1381)
		(320020, 2.5677)
		(640035, 6.2731)
		(1280053, 12.282)
		(2560065, 29.222)
	};

	\addplot coordinates {
		(20007, 0.23658)
		(40011, 0.6672)
		(80007, 1.7456)
		(160028, 4.7006)
		(320020, 13.965)
		(640035, 44.107)
		(1280053, 141.96)
		(2560065, 440.35)
	};

	\addplot coordinates {
		(20007, 0.13599)
		(40011, 0.3344)
		(80007, 0.69415)
		(160028, 1.8806)
		(320020, 5.149)
		(640035, 15.385)

	};

	\addplot coordinates {
		(20007, 0.25138)
		(40011, 0.5939)
		(80007, 0.9249)
		(160028, 2.114)
		(320020, 4.5343)
		(640035, 11.396)
		(1280053, 27.486)
		(2560065, 69.928)
	};

	\addplot coordinates {
		(20007, 0.23264)
		(40011, 0.5522)
		(80007, 1.1542)
		(160028, 2.3426)
		(320020, 5.6466)
		(640035, 13.214)
		(1280053, 30.713)
		(2560065, 79.336)
	};

	\addplot coordinates {
		(20007, 0.22645)
		(40011, 0.50317)
		(80007, 1.0735)
		(160028, 2.3281)
		(320020, 5.0226)
		(640035, 11.738)
		(1280053, 24.234)
		(2560065, 68.286)
	};
	\end{loglogaxis}
	\end{tikzpicture}
	\begin{tikzpicture}[scale=0.8][trim axis left]
	\begin{loglogaxis}[
	small,
	xlabel=Dofs, title={$L = 256$},
	cycle list name=mycolorlist]

	\addplot coordinates {
		(20007, 0.61384)
		(40011, 1.0748)
		(80007, 3.4119)
		(160028, 7.899)
		(320020, 17.728)
		(640035, 31.062)
		(1280053, 81.295)
		(2560065, 200.05)
	};

	\addplot coordinates {
		(20007, 0.80825)
		(40011, 1.0095)
		(80007, 2.7438)
		(160028, 6.6927)
		(320020, 12.949)
		(640035, 21.867)
		(1280053, 68.561)
		(2560065, 153.04)
	};

	\addplot coordinates {
		(20007, 0.095413)
		(40011, 0.21166)
		(80007, 0.42168)
		(160028, 0.92577)
		(320020, 1.9803)
		(640035, 4.0734)
		(1280053, 8.6757)
		(2560065, 19.306)
	};

	\addplot coordinates {
		(20007, 0.82717)
		(40011, 0.84182)
		(80007, 2.9882)
		(160028, 6.9114)
		(320020, 12.307)
		(640035, 19.958)
		(1280053, 59.375)
		(2560065, 122.13)
	};

	\addplot coordinates {
		(20007, 0.22203)
		(40011, 0.5914)
		(80007, 1.6566)
		(160028, 4.7524)
		(320020, 15.251)
		(640035, 44.929)
		(1280053, 141.91)
		(2560065, 434.59)
	};

	\addplot coordinates {
		(20007, 0.1465)
		(40011, 0.31841)
		(80007, 0.80297)
		(160028, 2.0617)
		(320020, 6.0724)
		(640035, 15.798)

	};

	\addplot coordinates {
		(20007, 0.20897)
		(40011, 0.46142)
		(80007, 0.96547)
		(160028, 2.2502)
		(320020, 4.7861)
		(640035, 11.106)
		(1280053, 27.182)
		(2560065, 68.077)
	};

	\addplot coordinates {
		(20007, 0.2357)
		(40011, 0.50776)
		(80007, 1.16)
		(160028, 2.4988)
		(320020, 5.5394)
		(640035, 13.835)
		(1280053, 30.348)
		(2560065, 78.262)
	};

	\addplot coordinates {
		(20007, 0.23317)
		(40011, 0.51628)
		(80007, 1.1609)
		(160028, 2.3292)
		(320020, 5.2971)
		(640035, 12.573)
		(1280053, 25.432)
		(2560065, 70.057)
	};
	\end{loglogaxis}
	\end{tikzpicture}
	\begin{tikzpicture}[scale=0.8][trim axis left]
	\begin{loglogaxis}[
	small,
	xlabel=Dofs, title={$L = 1024$},
	cycle list name=mycolorlist]

	\addplot coordinates {
		(20007, 7.5051)
		(40011, 15.481)
		(80007, 17.681)
		(160028, 54.848)
		(320020, 69.004)
		(640035, 185)
		(1280053, 379.29)
		(2560065, 655.66)
	};

	\addplot coordinates {
		(20007, 19.614)
		(40011, 28.51)
		(80007, 31.527)
		(160028, 61.183)
		(320020, 71.455)
		(640035, 161.8)
		(1280053, 313.6)
		(2560065, 481.54)
	};

	\addplot coordinates {
		(20007, 0.093928)
		(40011, 0.20548)
		(80007, 0.42791)
		(160028, 0.90888)
		(320020, 1.8899)
		(640035, 4.0643)
		(1280053, 8.6875)
		(2560065, 19.199)
	};

	\addplot coordinates {
		(20007, 39.306)
		(40011, 65.728)
		(80007, 54.97)
		(160028, 99.723)
		(320020, 117.25)
		(640035, 263.58)
		(1280053, 435.63)
		(2560065, 539.27)
	};

	\addplot coordinates {
		(20007, 0.22929)
		(40011, 0.67522)
		(80007, 1.8051)
		(160028, 5.1732)
		(320020, 14.902)
		(640035, 45.08)
		(1280053, 138.42)
		(2560065, 434.54)
	};

	\addplot coordinates {
		(20007, 0.19838)
		(40011, 0.34193)
		(80007, 0.85573)
		(160028, 2.1392)
		(320020, 7.0265)
		(640035, 22.43)

	};

	\addplot coordinates {
		(20007, 0.19466)
		(40011, 0.42387)
		(80007, 0.91368)
		(160028, 2.1111)
		(320020, 5.0092)
		(640035, 10.934)
		(1280053, 27.262)
		(2560065, 68.618)
	};

	\addplot coordinates {
		(20007, 0.2367)
		(40011, 0.55088)
		(80007, 1.0881)
		(160028, 2.4783)
		(320020, 5.4639)
		(640035, 13.229)
		(1280053, 31.028)
		(2560065, 79.845)
	};

	\addplot coordinates {
		(20007, 0.25418)
		(40011, 0.51623)
		(80007, 1.2039)
		(160028, 2.4435)
		(320020, 5.3808)
		(640035, 12.831)
		(1280053, 26.664)
		(2560065, 71.502)
	};
	\end{loglogaxis}
	\end{tikzpicture}
	\ref{robust-irho3-voro-time}

	\caption{
			Time (for setup and solving)
		of direct and iterative solvers for the Voronoi meshes voro$_3$--voro$_{10}$ of  Table~\ref{tab:k1-voro}  partitioned
		in $L = 64, 256, 1024$ parts. Every elements of a part is assigned the same diffusion coefficient $\rho = 10^\alpha$, with $\alpha\in[-5,5]$.
		%
		}
	\label{fig:voro-random-metis}
\end{figure}

\subsection{Computational efficiency}
\label{computational_times}

We compare the performance of several direct and iterative solvers and
convergence is decided by the decrease of the residual norm relative to the norm of right hand side obtained with the direct solver SuperLU\_DIST, \texttt{rtol} reported in each Table.

\input{full_tables}

\begin{landscape}

	\begin{table}
		\vspace{2.cm}
		\centering
		\caption{Performance of direct and iterative solvers on the the hexagonal meshes hexa$_2$, hexa$_4$, hexa$_6$, hexa$_8$ and hexa$_{10}$ shown in Table~\ref{tab:mesh-hexa}
						with jumping coefficients $\rho$ as described in Section~\ref{sec:lowest-random}.
				We report the time for setup and solving for both direct and iterative solvers.
				From top to bottom, concerning the number of parts which Voronoi meshes are partitioned into, we consider $L = 64, 256, 1024$, respectively.
						Convergence is decided by the decrease of the residual norm relative to the norm of right hand side obtained with the direct solver SuperLU\_DIST, \texttt{rtol}.

		}
		\label{tab:k1-hexa-jump}
		\small
		\begin{tabular}{c
				S[table-format=7.0]
				S[table-format=1.{2}]
				S[table-format=1.{2}]
				S[table-format=1.{2}]
				S[table-format=1.{2}]
				S[table-format=1.{2}]
				S[table-format=1.{2}]
				S[table-format=1.{2}]
				S[table-format=1.{2}]
				S[table-format=1.{2}]
				S[table-format=1.{2}]
			}
			\toprule
			{Mesh}       & {Dof}   & {c-GAMG}& {a-GAMG}& {BoomerAMG}& {ML}&{SuperLU}&{UMFPACK}& {MUMPS}&{SuperLu DIST}&  {Pastix}\\
			\midrule
			$L = 64$     &         &         &         &         &        &        &        &         &        & \\
			\midrule
			hexa$_{8}$   &  80604  & 0.91213& 0.60452 & 0.26308 &   0.306  &   4.3881 &  1.7315 & 2.3106 &  1.6881 & 1.8712  \\
			hexa$_{8}$   &  321204 & 3.9874 &  2.9554 & 1.0634  &   1.6689 &  39.8    & 10.098  & 15.643 & 10.841  & 12.499 \\
			hexa$_{8}$   &  721804 & 8.3183 & 6.0131  & 2.6356  &   3.449  & 188.9    & 35.454  & 52.661 & 30.718  & 36.769 \\
			hexa$_{8}$   & 1282404 & 15.22  & 11.719  & 4.5659  &   6.2838 & 445.33   &  *      & 124.48 & 72.509  & 84.145 \\
			hexa$_{8}$   & 2003004 &  *     & *       & 7.1908  &  12.95   & 907.64   &  *      & 231.43 & 138.22  & 161.01 \\
			\midrule
			$L = 256$    &         &        &         &         &         &        &        &        &         & \\
			\midrule
			hexa$_{8}$   &  80604  & 1.1396 &  1.5927 & 0.27117 &  1.1405 & 4.3793 & 3.1394&  2.3095&  1.6736 &  1.8742 \\
			hexa$_{8}$   &  321204 & 5.5811 &  7.9401 & 1.101   &  5.5657 & 39.85  &  14.702 & 15.746 & 10.779  &  12.279 \\
			hexa$_{8}$   &  721804 & 13.857  &  17.538 & 2.5346  &  12.916 & 189.11 & 36.378& 52.616& 31.157  & 36.772 \\
			hexa$_{8}$   & 1282404 & 27.385 & 38.986 & 4.2508  &  30.537 & 445.29 &  *     & 124.58& 72.302  & 84.136 \\
			hexa$_{8}$   & 2003004 & 32.243 & 40.656  & 6.8684  &  36.397 & 907.12 &  *     & 232.23& 137.11  & 161.23\\
			\midrule
			$L = 1024$   &         &        &         &         &         &        &        &        &         &       \\
			\midrule
			hexa$_{8}$   &  80604 & 5.0487 &  14.688 & 0.28678 &  16.315 & 4.3622 &  5.8249&  2.3098&  1.6676 & 1.8786  \\
			hexa$_{8}$   &  321204 & 14.182 &  33.694 & 1.2879  &  32.948 & 39.667 & 23.247 & 15.696 & 10.846  & 12.432 \\
			hexa$_{8}$   &  721804 & 56.76  &  89.818 & 2.608   &  93.934 & 189.55 & 218.18 & 52.661 & 31.021  & 36.804 \\
			hexa$_{8}$   & 1282404 & 65.313 & 135.07  & 4.7267  & 119.62  & 445.16 &  *     & 124.6  & 72.557  & 83.913 \\
			hexa$_{8}$   & 2003004 & 136.96 & 293.3   & 6.9779  & 326.04  & 906.21 &  *     & 231.67 & 137.36  & 160.99 \\
			\bottomrule
		\end{tabular}
	\end{table}
\end{landscape}

	\begin{landscape}

		\begin{table}
			\vspace{2.cm}
			\centering
			\caption{Performance of direct and iterative solvers on the Voronoi meshes voro$_5$--voro$_{10}$ shown in Table~\ref{tab:k1-voro}
			 partitioned with METIS,
				with jumping coefficients $\rho$ as described in Section~\ref{sec:lowest-random}.
				We report the time for setup and solving for both direct and iterative solvers.
				From top to bottom, concerning the number of parts which Voronoi meshes are partitioned into, we consider $L = 64, 256, 1024$, respectively.
			}
			\label{tab:k1-voro-jump}
			\small
			\begin{tabular}{c
					S[table-format=7.0]
					S[table-format=1.{2}]
					S[table-format=1.{2}]
					S[table-format=1.{2}]
					S[table-format=1.{2}]
					S[table-format=1.{2}]
					S[table-format=1.{2}]
					S[table-format=1.{2}]
					S[table-format=1.{2}]
					S[table-format=1.{2}]
					S[table-format=1.{2}]
				}
				\toprule
				{Mesh}       & {Dof}   & {c-GAMG}& {a-GAMG}& {BoomerAMG}& {ML}&{SuperLU}&{UMFPACK}& {MUMPS}&{SuperLu DIST}&  {Pastix}\\
				\midrule
				$L = 64$     &         &         &         &         &        &        &        &         &        & \\
				\midrule

				voro$_5$  &   80007 & 1.1242  &  0.93814 &0.45836 & 0.5768 &   1.7456  &  0.69415  &  0.9249&  1.1542 &   1.0735 \\
				voro$_6$  &  160028 &  2.4742  &  1.948  & 0.97389 & 1.1381   &  4.7006   & 1.8806 &  2.114& 2.3426& 2.3281 \\
				voro$_7$  &  320020 &  4.9139 & 3.8165& 2.1262 & 2.5677    & 13.965 & 5.149  & 4.5343& 5.6466   & 5.0226\\
				voro$_8$  &  640035 & 11.446  & 9.9439   & 4.1607& 6.2731   & 44.107 & 15.385    & 11.396 & 13.214 & 11.738\\
				voro$_9$  & 1280053 & 22.953 & 18.485  & 9.4007& 12.282   & 141.96   &  *           & 27.486  & 30.713& 24.234\\
			    voro$_{10}$ & 2560065 & 56.681  & 38.991  & 20.469 & 29.222     & 440.35  &  *           & 69.928 & 79.336  & 68.286\\
				\midrule
				$L = 256$    &         &        &         &         &         &        &        &        &         & \\
				\midrule

				voro$_5$     &   80007 & 3.4119 & 2.7438   & 0.42168 &  2.9882 & 1.6566   & 0.80297 &  0.96547 & 1.16  & 1.1609\\
				voro$_6$     &  160028 &  7.899 & 6.6927   & 0.92577&  6.9114  &  4.7524 & 2.0617 &  2.2502 & 2.4988&  2.3292 \\
				voro$_7$     &  320020 &  17.728 & 12.949   & 1.9803 &12.307    & 15.251   & 6.0724   & 4.7861   & 5.5394 & 5.2971\\
				voro$_8$     &  640035 & 31.062  & 21.867   & 4.0734 &19.958   & 44.929   & 15.798  & 11.106 & 13.835 & 12.573 \\
				voro$_9$     & 1280053 & 81.295 & 68.561   & 8.6757&59.375   & 141.91    &  *            & 27.182  & 30.348  & 25.432\\
				voro$_{10}$ & 2560065 & 200.05 & 153.04     & 19.306 &122.13   & 434.59     &  *           & 68.077 & 78.262  & 70.057\\
				\midrule
				$L = 1024$   &         &        &         &         &         &        &        &        &         &       \\
				\midrule

				voro$_5$     &   80007   & 17.681  &  31.527 & 0.42791 &  54.97& 1.8051 &  0.85573  &0.91368 & 1.0881  &   1.2039 \\
				voro$_6$     &  160028  & 54.848 &  61.183& 0.90888 & 99.723 & 5.1732   & 2.1392 & 2.1111 & 2.4783 &   2.4435 \\
				voro$_7$     &  320020  & 69.004&  71.455  & 1.8899& 117.25& 14.902  & 7.0265& 5.0092 & 5.4639  &   5.3808 \\
				voro$_8$     &  640035  & 185 & 161.8  & 4.0643&  263.58 & 45.08  & 22.43  &10.934 & 13.229  &  12.831 \\
				voro$_9$     & 1280053 & 379.29 & 313.6 &  8.6875 & 435.63 & 138.42   &  *           & 27.262 &  31.028  & 26.664 \\
				voro$_{10}$ & 2560065 & 655.66& 481.54  & 19.199 & 539.27  & 434.54  &  *           &  68.618 & 79.845  & 71.502 \\
				\bottomrule
			\end{tabular}
		\end{table}
	\end{landscape}

\subsection{Discontinuous coefficients}
 \label{sec:lowest-random}
We now want to test robustness of AMG preconditioners when discontinuous, highly heterogeneous coefficients $\rho$ are considered.
We build a ``checkerboard'' pattern as follows:
we deal with five of the hexagonal meshes in Table~\ref{tab:mesh-hexa} (in particular, hexa$_2$, hexa$_4$, hexa$_6$, hexa$_8$ and hexa$_{10}$) and the eight
 finest meshes in Table~\ref{tab:k1-voro} and partition their polygons into an increasing number of parts $L$ ($L = 64, 128, 256, 512$ and $1024$) by using METIS~\cite{metis-web-page}.
Every element in a given part is then assigned the same diffusion coefficient $\rho = 10^\alpha$, with $\alpha$ random integer in $[-5, 5]$.
 The loading term is random uniform in $[-1, 1]$.

Here, convergence is decided by the \emph{absolute} size of the residual norm \texttt{abstol} obtained with the direct solver SuperLU\_DIST (see Tables~\ref{tab:abstol-hexa},~\ref{tab:abstol-voro}). Results are displayed  in Table~\ref{tab:hexa-random} and Figure~\ref{fig:hexa-random-amg} for hexagonal meshes, and in Table~\ref{tab:voro-random-metis} and Figure~\ref{fig:voro-random-metis-amg} for Voronoi meshes.
We point out that, with highly oscillating coefficients, CG without AMG preconditioning does not attain convergence on any mesh.

Tables~\ref{tab:hexa-random} and \ref{tab:voro-random-metis} show that only BoomerAMG, for both hexagonal and Voronoi meshes, is performing well even with highly oscillating coefficients; the iteration count of BoomerAMG  does not
depend  on the size of the jump of the diffusion coefficient and on the problem size,  see Figures ~\ref{fig:hexa-random-amg}-\ref{fig:voro-random-metis-amg} where we used a logarithmic scale for the x-axis.

\begin{table}
\centering
\caption{Absolute size of the residual norm \texttt{abstol} obtained with the direct solver SuperLU\_DIST on the hexagonal meshes partitioned with METIS with random data.}
\label{tab:abstol-hexa}
\begin{tabular}
{
c
S[table-format=1.{2}e-2]
S[table-format=1.{2}e-2]
S[table-format=1.{2}e-2]
S[table-format=1.{2}e-2]
S[table-format=1.{2}e-2]
}
\toprule
$\text{Mesh} \backslash L$ & {$64$} & {$128$} & {$256$} & {$512$} & {$1024$}\\
\midrule
hexa$_2$   &   3.377076e-15   &   2.749819e-12   &   1.659726e-13   &   6.289179e-13   &   1.097806e-12\\
hexa$_4$   &   4.656541e-15   &   3.928083e-14   &   3.005561e-13   &   1.402578e-13   &   1.724394e-13\\
hexa$_6$   &   7.400275e-16   &   6.396524e-15   &   3.228314e-13   &   9.881418e-13   &   1.651562e-12\\
hexa$_8$   &   1.146216e-15   &   7.971567e-13   &   4.437052e-13   &   4.136265e-13   &   1.156183e-13\\
hexa$_{10}$   &   2.303510e-15   &   1.376253e-12   &   1.467877e-13   &   1.327990e-13   &   4.095764e-12\\
\bottomrule
\end{tabular}
\end{table}

\begin{table}
\centering
\caption{Absolute size of the residual norm \texttt{abstol} obtained with the direct solver SuperLU\_DIST on the Voronoi meshes partitioned with METIS with random data.}
\label{tab:abstol-voro}
\begin{tabular}
{
c
S[table-format=1.{2}e-2]
S[table-format=1.{2}e-2]
S[table-format=1.{2}e-2]
S[table-format=1.{2}e-2]
S[table-format=1.{2}e-2]
}
\toprule
$\text{Mesh} \backslash L$ & {$64$} & {$128$} & {$256$} & {$512$} & {$1024$}\\
\midrule
voro$_{3}$   &   3.643422e-16   &   3.265309e-12   &   4.943836e-13   &   1.260445e-12   &   2.146567e-13\\
voro$_{4}$   &   4.640741e-15   &   4.042216e-14   &   2.189554e-14   &   8.516365e-14   &   3.836524e-13\\
voro$_{5}$   &   1.123398e-14   &   6.368778e-13   &   4.922339e-13   &   5.050658e-13   &   2.665815e-13\\
voro$_{6}$   &   5.361608e-15   &   1.154381e-12   &   1.684534e-13   &   3.386050e-12   &   5.315959e-13\\
voro$_{7}$   &   7.146989e-16   &   4.619196e-13   &   3.049112e-13   &   1.468307e-13   &   1.439853e-12\\
voro$_{8}$   &   1.287743e-14   &   3.819394e-14   &   5.987926e-14   &   1.578116e-13   &   1.529344e-12\\
voro$_{9}$   &   9.557891e-16   &   1.146418e-12   &   3.469132e-13   &   1.830300e-12   &   3.798424e-13\\
voro$_{10}$   &   2.582220e-15   &   3.416954e-14   &   3.007990e-13   &   3.142518e-13   &   1.439913e-13\\
\bottomrule
\end{tabular}
\end{table}

\input{lowest_order_i_rho_3_hexa}
\input{lowest_order_i_rho_3_voro}

\section{Introduction}
	\label{intro}

The high flexibility of polytopic grids is
crucial
when dealing with real life problems since it  enables the treatment of complex geometries  and simpler meshing of the domain including local mesh adaptivity and nonconforming grids without requiring any special treatment, e.g.  for hanging nodes.
This explains
the increasing interest on numerical methods  where the discretization is based on arbitrarily shaped polytopic meshes.

Here we focus on the Virtual Element Method (VEM) which is a quite recent PDE discretization method that allows for polygonal and polyhedral meshes and can be viewed as an extension of the Finite Element Method (FEM) \cite{basicVEM, hitchVEM}.
The name
 {\em virtual} is related to the fact that
 operators and matrices, needed in the implementation of the method, are evaluated  by relying on an implicit knowledge of the local shape functions only, and
are computed directly in terms of the degrees of freedom through a computable
elementwise projector onto the space of polynomials.

The method has already been applied and extended to a wide variety of different model problems
\cite{beirao_parab,Antonietti_VEM_Stokes,Antonietti_VEM_Cahn,beirao_stokes,beirao_Navier_Stokes,perugia_Helmholtz,beirao_elastic,beirao_linear_elasticity,VEM_3D_elasticity,VEM_mixed,VEM_discrete_fracture,VEM_Laplace_Beltrami};  the $p$ and $hp$ versions of the
method are discussed and analyzed in  \cite{hitchVEM, antonietti_p_VEM,beirao_hp,beirao_hp_exponential},
 its implementation can be found in \cite{hitchVEM} and its extension
 to the case of curved boundaries can be found in \cite{VEM_curved_beirao,VEM_curvo}.

In this paper we focus on the efficient solution of the linear system of equations associated with a VEM discretization of a model  elliptic problem.
 The design of computationally effective solvers  for such linear systems is a crucial phase of the overall numerical process.
So far few  works in literature have been devoted to the study
of effective numerical algorithms for the solution of these linear systems of equations.
Attempts in the recent literature focused on the increase in the condition number of the stiffness matrix
due either to a degradation of the quality of the tessellation and/or to the increase in the polynomial order  of the method \cite{beirao_hp,Mascotto_illcond,berrone_borio_17}.
Other works tackled the problem of the increase in the condition number resulting from refining the discretization by considering domain decomposition techniques
  \cite{Calvo_Schwarz,Calvo_MG,FETI_VEM_2D,Prada_enumath_17,FETI_VEM_3D} or $p$ refinement multigrid methods \cite{antonietti_p_VEM}.

We observe that designing geometric multigrid solvers for VEM for the case of $h$ refinement is not straightforward.
In fact, for such method, even if two grids are embedded one in the other, the two corresponding spaces are not. This makes the design of coarsening and prolongation operators tricky.
The alternative is to use the algebraic version of multigrid.
Algebraic multigrid (AMG) was introduced as a method for solving linear systems based on multigrid principles, without
exploiting
the problem geometry; only the connections in the matrix graph are used to determine intergrid transfer operators and to define coarse grids, see e.g. \cite{Ruge.Stuben.87,Stuben2001}.
AMG has already proved its usefulness in various  problem types and especially those discretized on unstructured grids \cite{RobScalAMG}.

Here we want to exploit the performance of AMG solvers when very general polygonal meshes are considered, i.e. with very general  shape  as allowed by VEM.

AMG is also commonly used as a preconditioner for a Krylov subspace method such as the conjugate gradient (CG).
The approach of using AMG with CG is often referred to as \emph{CG accelerated multigrid (AMG/CG)} and it has the advantage that the Krylov method reduces the error in eigenmodes that are not being effectively reduced by multigrid.

The aim of this paper is to investigate the effectiveness
of Algebraic Multigrid Methods (AMG) when applied to the linear system of equations associated with the lowest  order VEM discretization.
We follow the AMG/CG approach and analyze the
performance
of the conjugate gradient method implemented in PETSc~\cite{petsc-web-page}  and its interfaces to different AMG preconditioners in the default setting.
The interest in AMG techniques is mainly related
to their potential scalability with the size of the problem to be solved,
 in the sense that
the number of iterations required to reach convergence for a given problem does not depend on the number of the mesh nodes.
The results of the present paper show that using AMG preconditioners for the solution of the linear system of equations associated with VEM discretizations is a promising approach, in terms of both scalability and reduction of the overall computational cost.
With most of the meshes considered, AMG outperforms other classical solvers available in PETSc, in terms of computational times.

However, we also verified that, when dealing with particularly complex and challenging meshes,
not all the AMG preconditioners considered
preserve  scalability and those that do,
loose most of their efficiency.
 The use of AMG/CG
for the solution of linear systems associated with VEM discretization based on these  meshes deserves further investigation,
beyond the scope of this work.

The paper is organized as follows. The basic notation
and the description of the Virtual Element Method are given in Section~\ref{sec:VEM}.
Algebraic Multigrid Methods are briefly recalled  in Section~\ref{sec:AMG} with
  the different codes used.
Numerical experiments to test the performance of AMG are presented in Section~\ref{sec:numerical} and finally in Section \ref{sec:conclusion} we draw conclusions on the efficiency and robustness of the AMG preconditioners considered.

\subsection{Matrix form}\label{sec:matrix}
We now  focus on the construction of the linear system of equations stemming from problem \ref{discrete_full}.
Proceeding as in the Finite Element Method (FEM), on each element, we consider a system of $N$ shape functions, $\{ \varphi_i(\mathbf{x})\}_{i=1}^N$ associated with the $N$ vertices of the element.
We assume that the shape functions satisfy the Lagrange conditions, that is,
they take value 1 at the vertex which they are associated with and zero at the other vertices.
We deal with the standard  basis for the space $\mathbb{P}_K$ of local linear polynomials on each
element $K$, that is, the set of scaled monomials of degree 1 that are defined  on the element $K$ as follows
\begin{equation}
\mathcal{M}_K:=\left \{ m_1(x,y) := 1, \quad m_2(x,y) :=\frac{
  x - x_K }{h_K}, \quad m_3(x,y) := \frac{ y - y_K  }{h_K}
\right \},
\end{equation}
with $x_K,y_K$ and $h_K$
being the barycenter and diameter of the element $K$, respectively.

If we write the virtual element solution $u_h$ as
$u_h = \sum_{i=1}^N dof_i(u_h)\, \varphi_i,$
problem \ref{discrete_full}
can be rewritten
 in matrix form as
\begin{equation}\label{system}
A \mathbf{u} = \mathbf{f},
\end{equation}
where the elements of matrix $A$ and of $\mathbf f$ are:
\begin{align*}
a_{j,i}&=  \sum_{K\in\mathcal{T}_h} \left(  a^K_h(\nabla \Pi^\nabla_K \varphi_i,\nabla \Pi^\nabla_K \varphi_j) + \S^K(\varphi_i- \Pi^\nabla_K\varphi_i, \varphi_j- \Pi^\nabla_K\varphi_j)\right),\quad i, j = 1,\dots, N,\\
 f_j &= \sum_K \left( \Pi^0_K f , \varphi_j \right)_{0,K},\quad j = 1,\dots, N .
\end{align*}

Both these terms are defined through sums over elements thus

 the virtual element method implementation is similar to that of
a standard finite element method.
The main difference with FEM is that
the computation of the VEM local stiffness matrices relies on computing the local projector $\Pi^K$ on each element first.
Moreover,
while the implementation of a  finite element may rely on a mapping to a reference element, this is not  possible in VEM because the mesh elements are allowed to be general  polygons.

\section{The virtual element method (VEM)}\label{sec:VEM}
Let us start by recalling the definition and the main properties of the  Virtual Element Method \cite{basicVEM}.
To fix the ideas we focus on the following  model  elliptic problem:
\[
-\nabla \cdot(\rho \nabla u) = f \ \text{ in } \Omega, \qquad u = 0 \ \text{ on } \partial \Omega,
\]
with $f \in L^2(\Omega)$ and $\Omega \subset \mathbb{R}^2$  polygonal domain. We assume that the coefficient $\rho$ is a scalar such that for almost all $x \in \Omega$,  $\alpha \leq \rho(x) \leq M$ for two constants $M \geq \alpha >0$. The variational formulation of such an equation reads as follows
\begin{equation}\label{variational}
\left\{
\begin{array}{l}
\text{find $u \in V:=H^1_0(\Omega)$ such that}\\[1mm]
a(u,v) = ( f , v ) \ \forall v \in V
\end{array}\right.
\end{equation}
with
\[
a(u,v) = \int_{\Omega}\rho(x)\nabla u(x)\cdot \nabla v(x)\,dx, \qquad (f,v) = \int_{\Omega}f(x) v(x)\,dx.
\]

\

We consider a family $\{ \mathcal{T}_h \}_h$ of tessellations of $\Omega$ into a finite number of simple polygons $K$.
The assumptions  generally considered on each tessellation $\mathcal{T}_h$ are the following
 (see, e.g. \cite{basicVEM,hitchVEM}):

\begin{assumption}\label{assumption_K}

	there exist constants $\gamma_0, \gamma_1, \alpha_0, \alpha_1 > 0$ such that:

\begin{enumerate
	\item each element $K \in \mathcal{T}_h$ is star-shaped with respect to a ball of radius $\geq \gamma_0 h_K$, where $h_K$ is the diameter of $K$;
	\item for each element $K\in\mathcal{T}_h$ the distance between any two vertices of $K$ is $\geq \gamma_1 h_K$;
	\item $\mathcal{T}_h$ is quasi-uniform, that is, for any two elements $K$ and $K'$ in $\mathcal{T}_h$ we have $\alpha_0  \leq h_K / h_{K'}\leq \alpha_1 $.
\end{enumerate}
\end{assumption}

For simplicity we assume that
	for all $K$ there exists a constant $\rho_K$ such that the coefficient $\rho$ verifies $\rho = \rho_K$ on $K$.

	However, we remark that the virtual element method can also be defined for the case of coefficients varying within the elements of the tessellation, see e.g.  \cite{beirao_var_coef}.

The Virtual Element discretization space is defined element by element starting from the edges of the tessellation.
More precisely, for each  polygon $K \in \mathcal{T}_h$ we introduce the space $\mathbb{B}_1(\partial K)$ as
\begin{gather*}
\mathbb{B}_1(\partial K) = \{ v \in C^0(\partial K): v|_{e} \in \mathbb{P}_1\ \forall e \in \mathcal{E}^K \},
\end{gather*}
where $\mathbb{P}_1$ denotes the set of polynomials of degree less than or equal to $1$, and
$\mathcal{E}^K$
the set of edges of the polygon $K$.
Letting \begin{equation}\label{deflocalspace}
V_h^K =   \{ v \in H^1(K):\ v|_{\partial K} \in \mathbb{B}_1(\partial K),\ \Delta v =0 \text{ in } K \}
\end{equation}
the discrete space $V_h$ is then defined as
\begin{align*}
V_h &= \{ v \in V: w|_{K} \in V_h^K, \forall K \in \mathcal{T}_h \}.
\end{align*}

\

Let $(\cdot,\cdot)$ be the scalar product in $L^2$,
$a(u,v)= (\rho \nabla u, \nabla v)$ and  $a^K$ the restriction of $a$ to $K$.
Using a Galerkin approach, we look for $u_h\in V_h$ such
that for all $v_h\in V_h$
$$a(u_h,v_h)=\int_\Omega f \, v_h \, dx. $$

Both terms at the right
and at the left hand sides
 cannot be computed exactly with the knowledge of the value of the degrees of freedom of $u_h$ and $v_h$ only.
Setting,
for each $K \in \mathcal{T}_h$
\[
a^K(u,v)=\int_K \rho \nabla u\cdot \nabla v
\]
we observe that, by using Green's formula, given any $v \in V^{K}_h$ and any $p \in \mathbb{P}_1(K)$
\[
a^K(p,v) = - \rho_K\int_K v \Delta p + \rho_K \int_{\partial K} v \frac {\partial p}{\partial n}.
\]

Since on each edge of $K$ $v$ is a known linear and $\partial w/\partial n$ is a known constant, the right hand side can be computed exactly and directly from the degrees of freedom of $v_h$.
This allows to define  the ``element by element'' computable projection
operator $\Pi^\nabla_K : V^{K}_h \longrightarrow \mathbb{P}_1(K)$
\[
a^K(\Pi^\nabla_K  u, q ) = a^K(u,q) \quad \forall q \in \mathbb{P}_1(K),
\]
and we clearly have
\begin{equation}\label{1}
	a^{K}(u,v) = a^K(\Pi^\nabla_K  u,\Pi^\nabla_K  v) + a^K(u - \Pi^\nabla_K  u, v - \Pi^\nabla_K  v).
\end{equation}
The virtual element method stems
from replacing the second term of the sum on the right hand side (which cannot be computed exactly), with an ``equivalent''  term, where the bilinear form $a^K$ is substituted by a computable symmetric bilinear form $S_a^K$, resulting in defining
\[
a^{K}_h(u,v) = a^K(\Pi^\nabla_K  u,\Pi^\nabla_K  v) + S_a^K(u - \Pi^\nabla_K  u, v - \Pi^\nabla_K  v) .
\]

As it is usually done in VEM, the bilinear form $a$ is then replaced with
a suitable approximate bilinear form
$a_h : V_h \times V_h \to \mathbb{R}$ defined by
\[
a_h(u_h,v_h) = \sum_K a_h^K(u_h,v_h) .
\]

Different choices are possible for the bilinear form $S_a^K$ (see \cite{beirao_stab}), the essential requirement being that it satisfies
\begin{equation}\label{2}
	c_0  a^K(v,v) \leq  S_a^K(v,v) \leq c_1 a^K(v,v)\quad \forall v \in V^K_h\ \text{ with } \Pi^\nabla_K  v=0,\end{equation}
for two positive constants $c_0$ and $c_1$, so that we have
\begin{equation}\label{elemequiv}
	(1+c_0)   a^K(v,v) \leq   a^K_h(v,v) \leq (1+c_1) a^K(v,v)\quad \forall v \in V^K_h,
\end{equation}
and the local discrete bilinear forms satisfy the two following properties:
\begin{itemize}
	\item {\em stability}:

	$$
	(1+c_0)   a^K(v,v) \leq   a^K_h(v,v) \leq (1+c_1) a^K(v,v)\quad \forall v \in V^K_h,
	$$

	\item {\em consistency}: for any $v_h\in V^K_h$ and $p\in \mathbb{P}_{1}(K)$
	\begin{equation}\label{mconsistency}
		a_h^K(v_h,p) = a^K(v_h,p) .
	\end{equation}
\end{itemize}
In the numerical tests performed in Section \ref{sec:numerical} we made the standard choice of defining $S_a^K$ in terms of the vectors of local degrees of freedom as the properly scaled euclidean scalar product.

As far as  the linear form $f$ on the right-hand side of the variational problem \nref{variational}, it  is discretized by
$ f_h : V_h^K \rightarrow \mathbb{R}$ such that
$$f_h(v_h) :=   (\Pi^0_K f,v_h)_{0,K}\qquad  \forall K\in \mathcal{T}_h,$$
where $\Pi^0_K : V_h^K \rightarrow \mathbb{R}$ denotes the $L^2(K)$-orthogonal projection onto constants, defined for any $w_h\in V_h^K$ to be such that
$$\int_K( w_h - \Pi^0_K w_h ) dx = 0.$$

Thus the virtual element discretization of (\ref{variational}) yields the following discrete problem:
\begin{problem}\label{discrete_full} Find $u_h \in V_h$ such that
	\[  a_h(u_h,v_h) = f_h(v_h) \qquad  \forall v_h \in V_h. \]
\end{problem}

\noindent For the study of the convergence, stability and robustness properties of the method we refer to~\cite{basicVEM,beirao_var_coef}.

redpajama_set_name: RedPajamaArXiv


text:
Oneida eller Onayotekaono är ett irokesiskt folk som sedan urminnes tid tillhör Irokesförbundet, som en av dess tre systersöner. Deras ursprungliga bosättningsområde var mellan onondaga och mohawkerna. Idag tillhör de flesta oneida antingen Six Nations of the Grand River First Nation och Oneida Nation of the Thames i Ontario eller Oneida Indian Nation i New York och Oneida Nation of Wisconsin i Green Bay.

Referenser

Nordamerikanska indianer
Irokeser

redpajama_set_name: RedPajamaWikipedia


Located in Bakırköy, this luxury hotel is 1.2 mi (2 km) from Atakoy Marina and within 3 miles (5 km) of Sinan Erdem Dome and Marmara Forum. Olivium Outlet Center and CNR Expo Center are also within 6 miles (10 km).
This family-friendly Istanbul hotel is located near the airport, within 3 mi (5 km) of Atakoy Marina, Marmara Forum and Olivium Outlet Center. Sinan Erdem Dome is 2 mi (3.2 km) away. Istanbul Bakirkoy Station is 18 minutes by foot and Istanbul Yeni Mahalle Station is 29 minutes.
Located in Bakırköy, this luxury hotel is 0.1 mi (0.2 km) from Capacity Shopping Center, and within 9 mi (15 km) of Hippodrome of Constantinople and Grand Bazaar. Blue Mosque and Topkapi Palace are also within 9 mi (15 km). Istanbul Bakirkoy Station is 8 minutes by foot and Istanbul Yeni Mahalle Station is 19 minutes.
Located in Bakırköy, this hotel is within 2 miles (3 km) of Atakoy Marina, Sinan Erdem Dome and Marmara Forum. Olivium Outlet Center is 2.7 mi (4.4 km) away. Istanbul Bakirkoy Station is 7 minutes by foot and Istanbul Yeni Mahalle Station is 18 minutes.
Located in Bakırköy, this spa hotel is within a 10-minute walk of Dunyagoz Hospital, Galleria Atakoy and Capacity Shopping Center. Atakoy Marina and Carousel Shopping Center are also within 10 minutes. Istanbul Bakirkoy Station is 11 minutes by foot and Istanbul Yeni Mahalle Station is 21 minutes.
Located in Bakırköy, this hotel is 0.5 mi (0.8 km) from Atakoy Marina and within 3 miles (5 km) of Sinan Erdem Dome and Marmara Forum. Olivium Outlet Center is 2.7 mi (4.4 km) away. Istanbul Bakirkoy Station is 10 minutes by foot and Istanbul Yeni Mahalle Station is 20 minutes.
Located in Bakırköy, this hotel is 0.3 mi (0.4 km) from Atakoy Marina and within 3 miles (5 km) of Sinan Erdem Dome and Marmara Forum. Olivium Outlet Center is 2.7 mi (4.3 km) away. Istanbul Bakirkoy Station is 10 minutes by foot and Istanbul Yeni Mahalle Station is 19 minutes.
Like the idea of having Dunyagoz Hospital just a short amble from your doorstep? You can make it happen with ebookers, which has a number of tools for allowing you to find hotels near Dunyagoz Hospital. Our service allows you to filter your search for the best accommodation that's close to major attractions and landmarks, including Dunyagoz Hospital. You can survey the relevant hotels on a detailed map of the local area, so you can see exactly where they are in relation to Dunyagoz Hospital. Our concise hotel descriptions, which set out the room types and amenities to expect from each place, will let you make an informed choice in no time.
Wherever you happen to be travelling from, you can use ebookers to plan the journey to your Dunyagoz Hospital hotel. For one thing, there's the wide array of flights you'll be able to access through our service. These are constantly updated, ensuring you get the best flight available at the time of booking, and you'll be able to compare prices at different times and from different airlines. You can also check out the car hire deals available through ebookers. Not only will this mean you can drive from the airport to your hotel near Dunyagoz Hospital without worrying about public transport, but you'll also be able to explore the whole region at your leisure.
Simply relaxing and lounging at your chosen accommodation is an activity in itself when you're on holiday. But you'll also find plenty to keep you busy once you've unpacked and are all set to explore beyond your Dunyagoz Hospital hotel. To give you a head start, you can use our Things to Do tool to see what attractions are close to Dunyagoz Hospital. It's a good way to gain inspiration and ensure you really make the most of your stay.


text:
package edu.getty.cdwa.cdwaLite;

/**
 * A document containing one relatedWorksWrap(@http://www.getty.edu/CDWA/CDWALite) element.
 *
 * This is a complex type.
 */
public interface RelatedWorksWrapDocument extends org.apache.xmlbeans.XmlObject
{
    public static final org.apache.xmlbeans.SchemaType type = (org.apache.xmlbeans.SchemaType)
        org.apache.xmlbeans.XmlBeans.typeSystemForClassLoader(RelatedWorksWrapDocument.class.getClassLoader(), "schemaorg_apache_xmlbeans.system.s1F643FAF4399D1206A04583D585DB128").resolveHandle("relatedworkswrapeb4edoctype");

    /**
     * Gets the "relatedWorksWrap" element
     */
    edu.getty.cdwa.cdwaLite.RelatedWorksWrapDocument.RelatedWorksWrap getRelatedWorksWrap();

    /**
     * Sets the "relatedWorksWrap" element
     */
    void setRelatedWorksWrap(edu.getty.cdwa.cdwaLite.RelatedWorksWrapDocument.RelatedWorksWrap relatedWorksWrap);

    /**
     * Appends and returns a new empty "relatedWorksWrap" element
     */
    edu.getty.cdwa.cdwaLite.RelatedWorksWrapDocument.RelatedWorksWrap addNewRelatedWorksWrap();

    /**
     * An XML relatedWorksWrap(@http://www.getty.edu/CDWA/CDWALite).
     *
     * This is a complex type.
     */
    public interface RelatedWorksWrap extends org.apache.xmlbeans.XmlObject
    {
        public static final org.apache.xmlbeans.SchemaType type = (org.apache.xmlbeans.SchemaType)
            org.apache.xmlbeans.XmlBeans.typeSystemForClassLoader(RelatedWorksWrap.class.getClassLoader(), "schemaorg_apache_xmlbeans.system.s1F643FAF4399D1206A04583D585DB128").resolveHandle("relatedworkswrap9f2belemtype");

        /**
         * Gets a List of "relatedWorkSet" elements
         */
        java.util.List<edu.getty.cdwa.cdwaLite.RelatedWorkSetDocument.RelatedWorkSet> getRelatedWorkSetList();

        /**
         * Gets array of all "relatedWorkSet" elements
         * @deprecated
         */
        @Deprecated
        edu.getty.cdwa.cdwaLite.RelatedWorkSetDocument.RelatedWorkSet[] getRelatedWorkSetArray();

        /**
         * Gets ith "relatedWorkSet" element
         */
        edu.getty.cdwa.cdwaLite.RelatedWorkSetDocument.RelatedWorkSet getRelatedWorkSetArray(int i);

        /**
         * Returns number of "relatedWorkSet" element
         */
        int sizeOfRelatedWorkSetArray();

        /**
         * Sets array of all "relatedWorkSet" element
         */
        void setRelatedWorkSetArray(edu.getty.cdwa.cdwaLite.RelatedWorkSetDocument.RelatedWorkSet[] relatedWorkSetArray);

        /**
         * Sets ith "relatedWorkSet" element
         */
        void setRelatedWorkSetArray(int i, edu.getty.cdwa.cdwaLite.RelatedWorkSetDocument.RelatedWorkSet relatedWorkSet);

        /**
         * Inserts and returns a new empty value (as xml) as the ith "relatedWorkSet" element
         */
        edu.getty.cdwa.cdwaLite.RelatedWorkSetDocument.RelatedWorkSet insertNewRelatedWorkSet(int i);

        /**
         * Appends and returns a new empty value (as xml) as the last "relatedWorkSet" element
         */
        edu.getty.cdwa.cdwaLite.RelatedWorkSetDocument.RelatedWorkSet addNewRelatedWorkSet();

        /**
         * Removes the ith "relatedWorkSet" element
         */
        void removeRelatedWorkSet(int i);

        /**
         * A factory class with static methods for creating instances
         * of this type.
         */

        public static final class Factory
        {
            public static edu.getty.cdwa.cdwaLite.RelatedWorksWrapDocument.RelatedWorksWrap newInstance() {
              return (edu.getty.cdwa.cdwaLite.RelatedWorksWrapDocument.RelatedWorksWrap) org.apache.xmlbeans.XmlBeans.getContextTypeLoader().newInstance( type, null ); }

            public static edu.getty.cdwa.cdwaLite.RelatedWorksWrapDocument.RelatedWorksWrap newInstance(org.apache.xmlbeans.XmlOptions options) {
              return (edu.getty.cdwa.cdwaLite.RelatedWorksWrapDocument.RelatedWorksWrap) org.apache.xmlbeans.XmlBeans.getContextTypeLoader().newInstance( type, options ); }

            private Factory() { } // No instance of this class allowed
        }
    }

    /**
     * A factory class with static methods for creating instances
     * of this type.
     */

    public static final class Factory
    {
        public static edu.getty.cdwa.cdwaLite.RelatedWorksWrapDocument newInstance() {
          return (edu.getty.cdwa.cdwaLite.RelatedWorksWrapDocument) org.apache.xmlbeans.XmlBeans.getContextTypeLoader().newInstance( type, null ); }

        public static edu.getty.cdwa.cdwaLite.RelatedWorksWrapDocument newInstance(org.apache.xmlbeans.XmlOptions options) {
          return (edu.getty.cdwa.cdwaLite.RelatedWorksWrapDocument) org.apache.xmlbeans.XmlBeans.getContextTypeLoader().newInstance( type, options ); }

        /** @param xmlAsString the string value to parse */
        public static edu.getty.cdwa.cdwaLite.RelatedWorksWrapDocument parse(java.lang.String xmlAsString) throws org.apache.xmlbeans.XmlException {
          return (edu.getty.cdwa.cdwaLite.RelatedWorksWrapDocument) org.apache.xmlbeans.XmlBeans.getContextTypeLoader().parse( xmlAsString, type, null ); }

        public static edu.getty.cdwa.cdwaLite.RelatedWorksWrapDocument parse(java.lang.String xmlAsString, org.apache.xmlbeans.XmlOptions options) throws org.apache.xmlbeans.XmlException {
          return (edu.getty.cdwa.cdwaLite.RelatedWorksWrapDocument) org.apache.xmlbeans.XmlBeans.getContextTypeLoader().parse( xmlAsString, type, options ); }

        /** @param file the file from which to load an xml document */
        public static edu.getty.cdwa.cdwaLite.RelatedWorksWrapDocument parse(java.io.File file) throws org.apache.xmlbeans.XmlException, java.io.IOException {
          return (edu.getty.cdwa.cdwaLite.RelatedWorksWrapDocument) org.apache.xmlbeans.XmlBeans.getContextTypeLoader().parse( file, type, null ); }

        public static edu.getty.cdwa.cdwaLite.RelatedWorksWrapDocument parse(java.io.File file, org.apache.xmlbeans.XmlOptions options) throws org.apache.xmlbeans.XmlException, java.io.IOException {
          return (edu.getty.cdwa.cdwaLite.RelatedWorksWrapDocument) org.apache.xmlbeans.XmlBeans.getContextTypeLoader().parse( file, type, options ); }

        public static edu.getty.cdwa.cdwaLite.RelatedWorksWrapDocument parse(java.net.URL u) throws org.apache.xmlbeans.XmlException, java.io.IOException {
          return (edu.getty.cdwa.cdwaLite.RelatedWorksWrapDocument) org.apache.xmlbeans.XmlBeans.getContextTypeLoader().parse( u, type, null ); }

        public static edu.getty.cdwa.cdwaLite.RelatedWorksWrapDocument parse(java.net.URL u, org.apache.xmlbeans.XmlOptions options) throws org.apache.xmlbeans.XmlException, java.io.IOException {
          return (edu.getty.cdwa.cdwaLite.RelatedWorksWrapDocument) org.apache.xmlbeans.XmlBeans.getContextTypeLoader().parse( u, type, options ); }

        public static edu.getty.cdwa.cdwaLite.RelatedWorksWrapDocument parse(java.io.InputStream is) throws org.apache.xmlbeans.XmlException, java.io.IOException {
          return (edu.getty.cdwa.cdwaLite.RelatedWorksWrapDocument) org.apache.xmlbeans.XmlBeans.getContextTypeLoader().parse( is, type, null ); }

        public static edu.getty.cdwa.cdwaLite.RelatedWorksWrapDocument parse(java.io.InputStream is, org.apache.xmlbeans.XmlOptions options) throws org.apache.xmlbeans.XmlException, java.io.IOException {
          return (edu.getty.cdwa.cdwaLite.RelatedWorksWrapDocument) org.apache.xmlbeans.XmlBeans.getContextTypeLoader().parse( is, type, options ); }

        public static edu.getty.cdwa.cdwaLite.RelatedWorksWrapDocument parse(java.io.Reader r) throws org.apache.xmlbeans.XmlException, java.io.IOException {
          return (edu.getty.cdwa.cdwaLite.RelatedWorksWrapDocument) org.apache.xmlbeans.XmlBeans.getContextTypeLoader().parse( r, type, null ); }

        public static edu.getty.cdwa.cdwaLite.RelatedWorksWrapDocument parse(java.io.Reader r, org.apache.xmlbeans.XmlOptions options) throws org.apache.xmlbeans.XmlException, java.io.IOException {
          return (edu.getty.cdwa.cdwaLite.RelatedWorksWrapDocument) org.apache.xmlbeans.XmlBeans.getContextTypeLoader().parse( r, type, options ); }

        public static edu.getty.cdwa.cdwaLite.RelatedWorksWrapDocument parse(javax.xml.stream.XMLStreamReader sr) throws org.apache.xmlbeans.XmlException {
          return (edu.getty.cdwa.cdwaLite.RelatedWorksWrapDocument) org.apache.xmlbeans.XmlBeans.getContextTypeLoader().parse( sr, type, null ); }

        public static edu.getty.cdwa.cdwaLite.RelatedWorksWrapDocument parse(javax.xml.stream.XMLStreamReader sr, org.apache.xmlbeans.XmlOptions options) throws org.apache.xmlbeans.XmlException {
          return (edu.getty.cdwa.cdwaLite.RelatedWorksWrapDocument) org.apache.xmlbeans.XmlBeans.getContextTypeLoader().parse( sr, type, options ); }

        public static edu.getty.cdwa.cdwaLite.RelatedWorksWrapDocument parse(org.w3c.dom.Node node) throws org.apache.xmlbeans.XmlException {
          return (edu.getty.cdwa.cdwaLite.RelatedWorksWrapDocument) org.apache.xmlbeans.XmlBeans.getContextTypeLoader().parse( node, type, null ); }

        public static edu.getty.cdwa.cdwaLite.RelatedWorksWrapDocument parse(org.w3c.dom.Node node, org.apache.xmlbeans.XmlOptions options) throws org.apache.xmlbeans.XmlException {
          return (edu.getty.cdwa.cdwaLite.RelatedWorksWrapDocument) org.apache.xmlbeans.XmlBeans.getContextTypeLoader().parse( node, type, options ); }

        /** @deprecated {@link org.apache.xmlbeans.xml.stream.XMLInputStream} */
        @Deprecated
        public static edu.getty.cdwa.cdwaLite.RelatedWorksWrapDocument parse(org.apache.xmlbeans.xml.stream.XMLInputStream xis) throws org.apache.xmlbeans.XmlException, org.apache.xmlbeans.xml.stream.XMLStreamException {
          return (edu.getty.cdwa.cdwaLite.RelatedWorksWrapDocument) org.apache.xmlbeans.XmlBeans.getContextTypeLoader().parse( xis, type, null ); }

        /** @deprecated {@link org.apache.xmlbeans.xml.stream.XMLInputStream} */
        @Deprecated
        public static edu.getty.cdwa.cdwaLite.RelatedWorksWrapDocument parse(org.apache.xmlbeans.xml.stream.XMLInputStream xis, org.apache.xmlbeans.XmlOptions options) throws org.apache.xmlbeans.XmlException, org.apache.xmlbeans.xml.stream.XMLStreamException {
          return (edu.getty.cdwa.cdwaLite.RelatedWorksWrapDocument) org.apache.xmlbeans.XmlBeans.getContextTypeLoader().parse( xis, type, options ); }

        /** @deprecated {@link org.apache.xmlbeans.xml.stream.XMLInputStream} */
        @Deprecated
        public static org.apache.xmlbeans.xml.stream.XMLInputStream newValidatingXMLInputStream(org.apache.xmlbeans.xml.stream.XMLInputStream xis) throws org.apache.xmlbeans.XmlException, org.apache.xmlbeans.xml.stream.XMLStreamException {
          return org.apache.xmlbeans.XmlBeans.getContextTypeLoader().newValidatingXMLInputStream( xis, type, null ); }

        /** @deprecated {@link org.apache.xmlbeans.xml.stream.XMLInputStream} */
        @Deprecated
        public static org.apache.xmlbeans.xml.stream.XMLInputStream newValidatingXMLInputStream(org.apache.xmlbeans.xml.stream.XMLInputStream xis, org.apache.xmlbeans.XmlOptions options) throws org.apache.xmlbeans.XmlException, org.apache.xmlbeans.xml.stream.XMLStreamException {
          return org.apache.xmlbeans.XmlBeans.getContextTypeLoader().newValidatingXMLInputStream( xis, type, options ); }

        private Factory() { } // No instance of this class allowed
    }
}

redpajama_set_name: RedPajamaGithub


0%68°49°Night - Clear. Winds from ENE to NE at 7 to 8 mph (11.3 to 12.9 kph). The overnight low will be 49 °F (9.4 °C).Sunny with a high of 66 °F (18.9 °C). Winds variable at 4 to 7 mph (6.4 to 11.3 kph).
Tonight - Clear. Winds from ENE to NE at 7 to 8 mph (11.3 to 12.9 kph). The overnight low will be 49 °F (9.4 °C).


text:
In keeping with its mission of furthering the Houston region as a top global community to work and live, the Center for Houston's Future launched the My Degree Counts campaign as part of the Talent Dividend, a national initiative to increase the graduation rates at two and four-year college institutions. Data shows that education explains most differences in metropolitan income, economic competitiveness and prosperity, voting rates, volunteering, crime, and drug abuse. Even though Houston is the nation's fourth largest city, we ranked only 34th in college attainment in a 2010 survey, with a 28.4% four-year college attainment rate.
We know that educational attainment is the biggest predictor of success for cities and metro areas. The research is unassailable: 58% of a city's success, as measured by per capita income, can be explained by the percentage of the adult population with a college degree. Our goal is to increase college attainment in the Houston region. As little as a one percent increase translates into additional $5 billion for the Houston regional economy annually and an $856 increase in per capita income for the entire metropolitan area each year.
As part of the Talent Dividend, we are competing with 56 other cities for the Talent Dividend Prize, $1 million grant for a national promotion campaign awarded to the city that exhibits the greatest increase in the number of post-secondary degrees granted over a four-year period.
The Center publicly launched this campaign on April 2, 2012 together with Mayor Annise Parker, Houston Texan Fullback James Casey and local rapper, Baby Jay, and our numerous partners from various universities, community colleges, ISDs and nonprofits.

redpajama_set_name: RedPajamaCommonCrawl


From its first ruler, King Fairhair in A.D. 900, until the present king, Harald V, Norway has developed from rural Viking settlements into a modern, industrialized nation. Norway's incomparable beauty is dramatically displayed in its mountains and fjords. Thanks to the Gulf Stream and prevailing westerly winds, the country enjoys a pleasant climate marked by four distinct seasons.
Norway is a long, narrow country, stretching approximately the same distance as from Maine to Miami, and is divided by the Arctic Circle. The capital city, Oslo, is located at approximately the same latitude as Anchorage, Alaska.
Norway's standard of living, life expectancy and cost of living are among the highest in the world. From approximately 1,700 hydro-electric plants Norwegians receive inexpensive electricity, which they consume at the highest per capita rate in the world. Because of its North Sea oil fields, Norway is the only western country that exports more oil than it consumes.
The government of Norway is a constitutional monarchy with legislative power vested in the Storting (parliament). The king's role is primarily symbolic.
Tolerance, kindness and equality are important Norwegian ideals. Norwegians take great pride in national and individual independence. Sincerity in friendship is greatly prized, but the expression of personal feelings is held in reserve.
In approximately A.D. 1000, Catholicism was forced on Norwegian society at the edge of the sword. During the Reformation, the State Church became Lutheran. Eighty-seven percent of the population are nominal members of the State Church. However, only about 50 percent believe that God exists, only 10 percent profess some sort of personal relationship with God, and less than three percent attend any sort of religious service on the average Sunday. Most Norwegians go to church only on special occasions, such as baptisms, confirmations, weddings, funerals, and Christmas; they feel that all religions are basically the same.
The first ABWE church planting team arrived in Norway during the summer of 1981. The team is concentrated in the large housing developments and apartment complexes in the greater Oslo metropolitan area, planning for extension into the greater Bergen and Trondheim metropolitan areas.
The greatest challenges in Norway today are secularism, materialism, religious indifference, relativism and nominal church membership. These create a difficult but challenging field of service.


Adam William Simpson Metcalfe director information. Free company director check.
MR Adam William Simpson Metcalfe works at ROLLATURF LIMITED as Director, TYAS TURF LIMITED as Director, AWSM FARMING LIMITED as Director.
Adam William Simpson Metcalfe works at ROLLATURF LIMITED since 12 April 2013 currently as a Director (FARMER).
Adam William Simpson Metcalfe works at TYAS TURF LIMITED since 14 March 2013 currently as a Director (FARMER).
Adam William Simpson Metcalfe works at AWSM FARMING LIMITED since 25 March 2011 currently as a Director (FARMER).


Be it through photography, video, books or other outlets, the agency's core remains the same: VII tells compelling visual stories. As many of its members turn toward film and expand their methods and approaches, the collective's archive also showcases the crème de la crème of its filmmaking talent.
Millennium Villages Project: SENEGAL - "The Will to do More"
Millennium Villages Project: GHANA - "All Fronts Forward"
Millennium Villages Project: RWANDA - "We are the Bosses"
Millennium Villages Project: RWANDA - "Breaking the Poverty Trap"
Millennium Villages Project: ETHIOPIA - "Together"


text:
Home Sports Wolves skipper Conor Coady left out of squad to take on Southampton
Wolves skipper Conor Coady left out of squad to take on Southampton
Wolves captain Conor Coady left OUT of squad to take on Southampton to dash chance of breaking club record for consecutive league appearances despite ending his period of self-isolation
Wolves host high-flying Southampton in the Premier League on Monday night
However, Nuno Espirito Santo will be without one of his most experienced stars
Conor Coady has been omitted from Wolves' squad to take on the Saints
Centre back Coady was recently forced to withdraw from the England squad
He had come in contact with someone who had tested positive for Covid-19
LIVE: Follow all the action right here as Wolves host Southampton at Molineux
By Adrian Kajumba For Mailonline and Tom Collomosse For Mailonline
Published: 18:40 GMT, 23 November 2020 | Updated: 21:08 GMT, 23 November 2020
Captain Conor Coady has been omitted from the Wolves squad to face Southampton – agonisingly ending his hopes of breaking a club record for consecutive appearances.
Manager Nuno Espirito Santo has made the surprise call to leave out the influential Coady despite the England defender being fit and available for selection after completing a period of self-isolation.
Coady was desperately hoping to make it 122 successive league appearances against Southampton at Molineux on Monday night and edge a step closer to Phil Parkes' landmark of 127.
Conor Coady has not been included in Wolves' squad to take on Southampton at Molineux
But Nuno has put sentiment to one side and made alternative plans with his gamble in dropping one of his most important players not just from his team but entire squad ending Coady's remarkable run when the record was in touching distance.
Coady was forced to withdraw from the England squad after coming into contact with someone who had tested positive for Covid-19 prior to meeting up with Gareth Southgate's side.
The 27 year-old tested negative twice himself but, in line with government guidelines, was still required to quarantine.
Coady also took steps, including continuing to train on his own until his isolation period ended on Sunday, to ensure he would be in contention for the visit of Ralph Hasenhuttl's in-form side.
Asked about Coady in his pre-Southampton press conference last week, Nuno said: 'I think it's public that we have the situation of Coady, so let's see. Let's hope and see.
Nuno Espirito Santo made the surprise call to omit his experienced centre back from his squad
'We've spoken to him, and he's doing his individual training sessions. He's not with the squad. Then, we'll wait and see.
'He is handling as much as possible the situation. No player wants to be out of the training session and not be involved in the squad.
'For Conor, it is a big problem, but I think he is handling well the situation. We are in contact, he has his individual training sessions. But we still don't know how it is going to be.
'For now, he is trying to maintain his level of fitness, because he has not been involved in a training session since the first day with the England squad. We still have to wait.'
Ex-keeper Phil Parkes (left) holds a club record of 127 straight league appearances for Wolves
Previous articleIt's Time To Close Your Pandemic Bubble. Here's How To Do It Without Losing Friends.
Next articleNo, Joe Biden did not have a maskless birthday party last week.
What a devastating sequence of events for the Browns, who lost a touchdown — and gave possession back to Kansas City — after...
Megan Rapinoe and Carli Lloyd have a lot in common.Both are two-time World Cup champions and Olympic gold medalists.Each has led a World...
Liverpool have 'lost their spark', says Roy Keane after they fail...
Roy Keane bemoans Paul Pogba for missing his 'moment to be the main man'
Roy Keane bemoans Paul Pogba for missing his 'moment to be...
Two hotel quarantine staff in Melbourne, Australia test positive to coronavirus
GOP senator Ben Sasse pleads for end to Republican embrace of QAnon
Protests at state capitols remain small and under heavy police presence...


text:
<?php

namespace Elastica\Aggregation;

/**
 * Class Avg
 * @package Elastica\Aggregation
 * @link http://www.elasticsearch.org/guide/en/elasticsearch/reference/master/search-aggregations-metrics-avg-aggregation.html
 */
class Avg extends AbstractSimpleAggregation
{

}


Individual Retirement Accounts or IRA's, were designed to give Americans tax breaks and a greater incentive to save. The Taxpayer Relief Act of 1997 not only improved the traditional IRA, but it also introduced the Roth IRA and Educational IRA.
There are contribution limits and features unique to each type of account. Please feel free to contact your local member service representative for more guidance about which account is right for you.
Income limits have been raised so more people can make tax-deductible contributions.
An educational savings account can be a great way to invest money to help pay for your child's college education. Although contributions to an ESA are not tax-deductible, your withdrawals (including earnings) are tax-free if used for tuition, books, and other qualified higher-education expenses.
For both the Traditional and Roth IRAs the Credit Union offers term certificates which pay higher dividends.
What Happened To Savings Bonds?
What Are The Investment Deposit Rates?


"I'm a lifelong Democrat," says Dorrie from Pennsylvania.
"My dad was a Democrat. My mother was a Democrat. I've converted my wife to a Democrat," says Jack from Iowa.
"I voted for the wrong guy," says Nancy, a Democrat from Ohio.
"As he would say, we're ready for a change," says Matthew, an independent from Virginia.
After hearing from 40 independents and Democrats from swing states, the new documentary The Hope and the Change ends with this question: "Can we go through another four years of this?" What would America look like after another four years of squandered opportunities for economic stewardship, and of leadership priorities driven by radical ideology contrary to the much-celebrated unifying tone Barack Obama rode into office on?