Updated the AMS documentation in the User and Reference Manuals.
This commit is contained in:
parent
68b7b5518a
commit
320aff47cd
@ -477,7 +477,7 @@ there could be better choices than the two suggested ones.
|
|||||||
\section{AMS}
|
\section{AMS}
|
||||||
\label{AMS}
|
\label{AMS}
|
||||||
|
|
||||||
AMS (Auxiliary space Maxwell Solver) is a parallel unstructured Maxwell
|
AMS (the Auxiliary-space Maxwell Solver) is a parallel unstructured Maxwell
|
||||||
solver for edge finite element discretizations of the variational problem
|
solver for edge finite element discretizations of the variational problem
|
||||||
\begin{equation} \label{ams-maxwell}
|
\begin{equation} \label{ams-maxwell}
|
||||||
\mbox{Find } {\mathbf u} \in {\mathbf V}_h \>:\qquad
|
\mbox{Find } {\mathbf u} \in {\mathbf V}_h \>:\qquad
|
||||||
@ -552,6 +552,7 @@ with $G$, in which case the solver is a two-level method.
|
|||||||
AMS can be used either as a solver or as a preconditioner.
|
AMS can be used either as a solver or as a preconditioner.
|
||||||
Below we list the sequence of \hypre{} calls
|
Below we list the sequence of \hypre{} calls
|
||||||
needed to create and use it as a solver.
|
needed to create and use it as a solver.
|
||||||
|
See example code \file{ex15.c} for a complete implementation.
|
||||||
We start with the allocation of the \code{HYPRE_Solver} object:
|
We start with the allocation of the \code{HYPRE_Solver} object:
|
||||||
\begin{display}\begin{verbatim}
|
\begin{display}\begin{verbatim}
|
||||||
HYPRE_Solver solver;
|
HYPRE_Solver solver;
|
||||||
@ -629,7 +630,7 @@ Here we use the following convention for the
|
|||||||
three subspace correction methods:
|
three subspace correction methods:
|
||||||
$0$ refers to smoothing, $1$ stands for BoomerAMG based on $B_G$, and
|
$0$ refers to smoothing, $1$ stands for BoomerAMG based on $B_G$, and
|
||||||
$2$ refers to a call to BoomerAMG for ${\mathbf B}_{{\mathbf \Pi}}$.
|
$2$ refers to a call to BoomerAMG for ${\mathbf B}_{{\mathbf \Pi}}$.
|
||||||
The values $3$, $4$ and $5$ refer to the scalar subspaspaces
|
The values $3$, $4$ and $5$ refer to the scalar subspaces
|
||||||
corresponding to the $x$, $y$ and $z$ components of $\mathbf \Pi$.
|
corresponding to the $x$, $y$ and $z$ components of $\mathbf \Pi$.
|
||||||
|
|
||||||
The abbreviation $xyyz$ for $x,y,z \in \{0,1,2,3,4,5\}$
|
The abbreviation $xyyz$ for $x,y,z \in \{0,1,2,3,4,5\}$
|
||||||
@ -642,7 +643,7 @@ In our experience the choices \code{cycle_type=1,5,8,11,13} often produced
|
|||||||
fastest solution times, while \code{cycle_type=7} resulted in smallest
|
fastest solution times, while \code{cycle_type=7} resulted in smallest
|
||||||
number of iterations.
|
number of iterations.
|
||||||
|
|
||||||
Additional solver parameters, as the maximum number of iterations,
|
Additional solver parameters, such as the maximum number of iterations,
|
||||||
the convergence tolerance and the output level, can be set with
|
the convergence tolerance and the output level, can be set with
|
||||||
\begin{display}\begin{verbatim}
|
\begin{display}\begin{verbatim}
|
||||||
HYPRE_AMSSetMaxIter(solver, maxit); /* default value: 20 */
|
HYPRE_AMSSetMaxIter(solver, maxit); /* default value: 20 */
|
||||||
@ -665,9 +666,26 @@ To allow for this simplification, use the following \hypre{} call
|
|||||||
\begin{display}\begin{verbatim}
|
\begin{display}\begin{verbatim}
|
||||||
HYPRE_AMSSetBetaPoissonMatrix(solver, NULL);
|
HYPRE_AMSSetBetaPoissonMatrix(solver, NULL);
|
||||||
\end{verbatim}\end{display}
|
\end{verbatim}\end{display}
|
||||||
If $\beta$ is zero only in parts of the domain, the problem is still
|
|
||||||
singular, but the AMS solver will try to detect this and construct
|
If $\beta$ is zero only in parts of the domain, the problem is still singular,
|
||||||
a non-singular preconditioner.
|
but the AMS solver will try to detect this and construct a non-singular
|
||||||
|
preconditioner. Though this often works well in practice, AMS also provides a
|
||||||
|
more robust version for solving such singular problems to very low convergence
|
||||||
|
tolerances. This version takes advantage of additional information: the list of
|
||||||
|
nodes which are interior to a zero-conductivity region provided by the function
|
||||||
|
\begin{display}\begin{verbatim}
|
||||||
|
HYPRE_AMSSetInteriorNodes(solver, HYPRE_ParVector interior_nodes);
|
||||||
|
\end{verbatim}\end{display}
|
||||||
|
Based on the \code{interior_nodes} variable, a restricted discrete gradient
|
||||||
|
operator $G_0$ is constructed, and AMS is then defined based on the matrix
|
||||||
|
${\mathbf A}+\delta G_0^TG_0$ which is non-singular, and a small $\delta>0$ perturbation of
|
||||||
|
${\mathbf A}$. When iterating with this preconditioner, it is advantageous to project on
|
||||||
|
the compatible subspace $Ker(G_0^T)$. This can be done periodically, or manually
|
||||||
|
through the functions
|
||||||
|
\begin{display}\begin{verbatim}
|
||||||
|
HYPRE_AMSSetProjectionFrequency(solver, int projection_frequency);
|
||||||
|
HYPRE_AMSProjectOutGradients(solver, HYPRE_ParVector x);
|
||||||
|
\end{verbatim}\end{display}
|
||||||
|
|
||||||
Two additional matrices are constructed in the setup of the
|
Two additional matrices are constructed in the setup of the
|
||||||
AMS method---one corresponding to the coefficient $\alpha$
|
AMS method---one corresponding to the coefficient $\alpha$
|
||||||
@ -692,7 +710,7 @@ Note the following regarding these functions:
|
|||||||
the diagonal entries of the input matrix corresponding to eliminated
|
the diagonal entries of the input matrix corresponding to eliminated
|
||||||
degrees of freedom (due to essential boundary conditions)
|
degrees of freedom (due to essential boundary conditions)
|
||||||
are penalized.
|
are penalized.
|
||||||
\item It is assumed that thei essential boundary conditions of
|
\item It is assumed that their essential boundary conditions of
|
||||||
${\mathbf A}$, \code{Abeta} and \code{Aalpha} are on the same
|
${\mathbf A}$, \code{Abeta} and \code{Aalpha} are on the same
|
||||||
part of the boundary.
|
part of the boundary.
|
||||||
\item \code{HYPRE_AMSSetAlphaPoissonMatrix} forces the
|
\item \code{HYPRE_AMSSetAlphaPoissonMatrix} forces the
|
||||||
|
|||||||
@ -126,7 +126,7 @@ HYPRE_Int HYPRE_PCGSetAbsoluteTol(HYPRE_Solver solver,
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* (Optional) Set a residual-based convergence tolerance which checks if
|
* (Optional) Set a residual-based convergence tolerance which checks if
|
||||||
* $\|r_old-r_new\| < rtol \|b\|$. This is useful when trying to converge to
|
* $\|r_{old}-r_{new}\| < rtol \|b\|$. This is useful when trying to converge to
|
||||||
* very low relative and/or absolute tolerances, in order to bail-out before
|
* very low relative and/or absolute tolerances, in order to bail-out before
|
||||||
* roundoff errors affect the approximation.
|
* roundoff errors affect the approximation.
|
||||||
**/
|
**/
|
||||||
|
|||||||
@ -287,12 +287,12 @@ HYPRE_Int HYPRE_BoomerAMGSetGridRelaxType(HYPRE_Solver solver,
|
|||||||
* 4 & hybrid Gauss-Seidel or SOR, backward solve \\
|
* 4 & hybrid Gauss-Seidel or SOR, backward solve \\
|
||||||
* 5 & hybrid chaotic Gauss-Seidel (works only with OpenMP) \\
|
* 5 & hybrid chaotic Gauss-Seidel (works only with OpenMP) \\
|
||||||
* 6 & hybrid symmetric Gauss-Seidel or SSOR \\
|
* 6 & hybrid symmetric Gauss-Seidel or SSOR \\
|
||||||
* 8 & L1-scaled hybrid symmetric Gauss-Seidel\\
|
* 8 & $\ell_1$-scaled hybrid symmetric Gauss-Seidel\\
|
||||||
* 9 & Gaussian elimination (only on coarsest level) \\
|
* 9 & Gaussian elimination (only on coarsest level) \\
|
||||||
* 15 & CG (warning - not a fixed smoother - may require FGMRES)\\
|
* 15 & CG (warning - not a fixed smoother - may require FGMRES)\\
|
||||||
* 16 & Chebyshev\\
|
* 16 & Chebyshev\\
|
||||||
* 17 & FCF-Jacobi\\
|
* 17 & FCF-Jacobi\\
|
||||||
* 18 & L1-scaled jacobi\\
|
* 18 & $\ell_1$-scaled jacobi\\
|
||||||
* \hline
|
* \hline
|
||||||
* \end{tabular}
|
* \end{tabular}
|
||||||
**/
|
**/
|
||||||
@ -1476,6 +1476,17 @@ HYPRE_Int HYPRE_AMSSetPrintLevel(HYPRE_Solver solver,
|
|||||||
/**
|
/**
|
||||||
* (Optional) Sets relaxation parameters for $A$.
|
* (Optional) Sets relaxation parameters for $A$.
|
||||||
* The defaults are $2$, $1$, $1.0$, $1.0$.
|
* The defaults are $2$, $1$, $1.0$, $1.0$.
|
||||||
|
*
|
||||||
|
* The available options for relax\_type are:
|
||||||
|
*
|
||||||
|
* \begin{tabular}{|c|l|} \hline
|
||||||
|
* 1 & $\ell_1$-scaled Jacobi \\
|
||||||
|
* 2 & $\ell_1$-scaled block symmetric Gauss-Seidel/SSOR \\
|
||||||
|
* 3 & Kaczmarz \\
|
||||||
|
* 4 & truncated version of $\ell_1$-scaled block symmetric Gauss-Seidel/SSOR \\
|
||||||
|
* 16 & Chebyshev \\
|
||||||
|
* \hline
|
||||||
|
* \end{tabular}
|
||||||
**/
|
**/
|
||||||
HYPRE_Int HYPRE_AMSSetSmoothingOptions(HYPRE_Solver solver,
|
HYPRE_Int HYPRE_AMSSetSmoothingOptions(HYPRE_Solver solver,
|
||||||
HYPRE_Int relax_type,
|
HYPRE_Int relax_type,
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user