**iterative_solver#
Description#
This keyword specifies the iterative solver used to solve the global interface problem involved in the FETI and AMPFETI domain decomposition methods.
Note
This command is only available within dd_feti and dd_mpfeti
solvers contexts.
Syntax#
The iterative solver command has the following syntax:
**iterative_solver type
where type may have different value depending on the type of domain decomposition solver used.
FETI solver (whithin
***linear_solver dd_feticontext)ddcgis a standard conjugate gradient (CG) algorithm;
ddbicgis a standard bi-conjugate gradient (BiCG) algorithm (for non symmetric system);
dd_orthois a standard Orthomin algorithm (for non symmetric system);
AMPFETI solver (whithin
***linear_solver dd_mpfeticontext)ddcgbis a multi preconditioned conjugate gradient (MPCG) algorithm;
ddcgb_adaptive_globalis a MPCG algorithm where the selection of search direction involved in the multi preconditioning step is triggered by a global test, leading either to the use of all directions or to fall back to a classical CG at each iteration;
ddcgb_adaptive_localis a MPCG algorithm where the selection of search direction involved in the multi preconditioning step is triggered by a local test at each iteration, leading to a finer selection;
ddbicgbis a multi preconditioned bi-conjugate gradient algorithm (for non symmetric system);
dd_orthobis a multi preconditioned Orthomin algorithm (for non symmetric system);
All subsequent commands are optional and default values are automatically set, which may be different depending on the solver used.
The following keywords are common to all iterative solvers.
[ *precision eps ]
[ *max_iteration max_iter ]
[ *min_iteration min_iter ]
[ *standing_iteration standing_iter ]
[ *convergence_type type ]
[ *output_every_iter int ]
[ *ortho_type type ]
[ *ortho_number int ]
[ *double_orthogonalization ]
*precisionepswhere eps is a real value defining the relative precision required for convergence when solving the problem with the CG method. Default value is \(10^{-8}\).
*max_iterationmax_iterationis the maximum number of iterations allowed when solving the problem. Default value is 300.
*min_iterationmin_iterationwhere min_iteration is the minimum iterations when solving the problem. Default value is 0.
*standing_iterationis an integer specifying the maximum number of iterations allowed without any significant decrease of the convergence ratio. Default value is 30 for
ddcgor 5 forddcgband derived.*convergence_typetypespecifies which residual is monitored for the convergence. type can take these two values
normalorprecond. Let \({\bf r}_{i} = {\bf K} {\bf u}_{i} - {\bf F}\) be the residual at iteration \(i\) (notation are simplified). If type is set tonormal, the convergence is reached when\[\frac{\|{\bf r}_{i}\|_2}{\|{\bf r}_{0}\|_2} \leq \epsilon\]For CG like solvers, it is sometimes more interesting to monitor convergence with the residual decrease in the norm defined by the preconditioner \(\hat{\bf S}\). It is possible since preconditioners available are symmetric positive definite (if the stiffness operator is SPD). Thus, if type is set to
precond, the convergence is reached when\[\frac{\|{\bf r}_{i}\|_{\hat{\bf S}}}{\|{\bf r}_{0}\|_{\hat{\bf S}}} = \frac{\sqrt{{\bf r}_i^T {\bf z}_i}} {\sqrt{{\bf r}_0^T {\bf z}_0}} \leq \epsilon \quad \text{where} \quad {\bf z}_{i} = \hat{\bf S} {\bf r}_{i} \quad \text{is the preconditioned residual}\]Default value is
normal.*output_every_iteriterwhere iter is the frequency of the iteration information output. Default value is 10.
*ortho_typetypespecifies the kind of orthogonalisation used. type can take this two values
gskss(i.e. Krylov subspace with Gram-Schmidt orthogonalization) andmgskss(i.e. Krylov subspace with modified Gram-Schmidt orthogonalization). The modified Gram-Schmidt orthogonalization is slightly more costly than the standard one. It is also more robust in terms of numerical round off. Default value ismgskss.*ortho_numberis an integer specifying the maximum number of block of search directions retained. The classical CG short recurrence does not hold for multi preconditioned conjugate gradient. It is strongly advised to keep the default value -1 (i.e. all blocks of search directions are kept).
*double_orthogonalizationif set the orthogonalization process is made twice. It can be useful for ill conditioned problem. Disabled by default.
The following keywords are specific to multi preconditioned Krylov
solvers ddcgb, ddcgb_adaptive_global, ddcgb_adaptive_local,
ddbicgb and dd_orthob.
[ *collinearity_treatment type ]
[ *pivoting_tolerance_type type ]
[ *pivoting_tolerance eps ]
[ *double_check_collinearity ]
[ *double_check_collinearity_threshold eps ]
[ *adaptivity_threshold tau ]
[ *number_of_clusters nb_clusters ]
*collinearity_treatmentAt each iteration, a multi preconditioned Krylov solver generates a group of search directions. These search directions may be collinear or (nearly) collinear. This collinearity has a direct impact on the rank of a dense matrix \(\Delta_i\) which has to be (pseudo)-inverted.
\[\Delta_i = {\bf W}_i^\top {\bf F} {\bf W}_i \quad \text{ where} \quad {\bf W}_i \ \text{are the search directions and } {\bf F} \ \text{is the FETI operator}\]How we compute the pseudo-inverse is determined by the keyword
collinearity_treatment. Some collinearity treatment are rank revealing, they can eliminate redundant search directions and recover a full rank family. It can take these 7 values defining how we deal with the \(\Delta_i\) matrices:invcomputation of the inverse.choleskyCholesky decomposition (fastest method but not ok for finite displacement)chol_rank_revealingrank revealing version ofcholesky.croutCrout decomposition (fast method, slightly more robust, not ok for finite displacement)crout_rank_revealingrank revealing version ofcrout.luLU decomposition (more robust and ok for finite displacement)lu_rank_revealingrank revealing version oflu.
*pivoting_tolerance_typetypeit only matters if the
collinearity_treatmentchosen is rank revealing. type can take these two valuesabsolute(i.e. search directions are dropped if the associated pivot or eigen value is belowpivoting_tolerance) orrelative(i.e. search directions are dropped if the associated pivot or eigen value is belowpivoting_tolerancetimes the greatest pivot or eigen value). Default value isrelative.*pivoting_toleranceepsspecifies the threshold for rank revealing collinearity treatment. Default value is \(10^{-8}\).
*double_check_collinearityenables a second collinearity check. For some ill conditioned problems and if
pivoting_tolerance_typeis set torelativeit is possible that all pivots stay grouped during the decrease. Because of that, the collinearity treatment may be inefficient. This second check compress all search directions (i.e. AMPFETI acts as FETI) is the greatest pivots or eigen value is belowdouble_check_collinearity_threshold. Disabled by default.*double_check_collinearity_thresholdis the threshold associated with
double_check_collinearity. Default value is \(10^{-9}\).*adaptive_thresholdtauis the threshold used for the selection of search directions and thus is specific to adaptive solvers
ddcgb_adaptive_globalandddcgb_adaptive_local. A high value of tau increases the number of selected search directions and adaptive solvers tend to behave like theddcgbsolver. With a low value, adaptive solvers act like classicalddcgsolver. Default value is \(10^{-1}\).*number_of_clustersnb_clustersis an integer that drives the granularity of the multipreconditioning. The default value is -1 meaning automatic choice. With this choice, the number of clusters is equal to the number of sub-domains in the decomposition as long as where are below the value of Solver.Parallel.ClusterAutoLimit (default value 200).