The Open FUSION Toolkit 1.0.0-8905cc5
Modeling tools for plasma and fusion research and engineering
Loading...
Searching...
No Matches
Available Solvers

This page outlines the solvers that are currently available through Open FUSION Toolkit solver objects. Additional solvers may be used through backend implementations, but only internally controlled and supported solvers are outlined here.

Mixing Native and PETSc Solvers

Solver interfaces have been designed to allow mixing of native and PETSc methods. Most native solvers are written with generic API calls for linear algebra and as a result can be used when either backend is used for vectors and matrices. There are many cases however where the PETSc implementation of a particular solver/preconditioner is more optimal for its matrices and vectors. Additionally, there are some methods, ex. direct methods, which are only available through PETSc. The oft_petsc_pre_solver class is provided to allow using PETSc solvers as preconditioners for native solvers. This class acts as a wrapper around the PETSc solver, allowing it to be called using the standard solver calling sequence.

Basic Solvers and Preconditioners

Jacobi Iteration

Jacobi iterations solves a system of linear equations by iterating on the method

\[ x^{n+1} = x^n + D^{-1}(A*x^n - y) \]

where \( D \) is a matrix of only the diagonal elements of \( A \). Functionality is provided through either a general native interface oft_diag_scale and an optimized PETSc interface oft_petsc_diagprecond.

XML Spec: <pre type="jacobi">

LU Factorization

This method is supported through both the native and PETSc backends through oft_lusolver and oft_petsc_direct_solver for a full solver or oft_petsc_luprecond as a PETSc preconditioner.

Warning
The native solver currently only supports local solves (ie as a sub-solver to Block Jacobi)

XML Spec: <solver type="lu">

Group Description Type List
package Solver package to use {super, superd, mumps} str No

PETSc only options

Group Description Type List
type Inverse type {lu, ilu} str No

Block Jacobi

This method is supported through both the native and PETSc backends through oft_bjprecond and oft_petsc_asprecond.

XML Spec: <pre type="block_jacobi">

Group Description Type List
nlocal Number of local blocks (-1 for field based) int Yes
groups Group index for each field in multi-field vector [n] int Yes
boverlap Overlap boundary rows (native only) bool false

Additive Schwarz

This method is currently only supported with the PETSc backend through oft_petsc_asprecond as a preconditioner.

XML Spec: <pre type="add_schwarz">

Group Description Type List
nlocal Number of local blocks (-1 for field based) int Yes
overlap Overlap size int Yes

Krylov Solvers

Conjugate Gradient

This method is provided through both the native and PETSc backends through oft_cg_solver and oft_petsc_cg_solver.

XML Spec: <solver type="cg">

Group Description Type List
atol Absolute convergence tolerance real Yes
rtol Relative convergence tolerance real Yes
its Iteration limit int Yes

Generalized Minimum Residual Method

This method is provided through both the native and PETSc backends through oft_gmres_solver and oft_petsc_gmres_solver.

XML Spec: <solver type="gmres">

Group Description Type List
atol Absolute convergence tolerance real Yes
rtol Relative convergence tolerance real Yes
its Iteration limit int Yes
nrit Restart size int Yes