Elmer FEM solver
Elmer is an open source finite element software for multiphysical problems
|
Data Types | |
module | smoothers |
Functions/Subroutines | |
real(kind=dp) function | mgnorm (n, x) |
subroutine | cg (n, A, M, x, b, r, Rounds) |
subroutine | uzawamv (A, x, b) |
subroutine | solvelinsys (N, LDa, A, x) |
real(kind=dp) function | mgdot (n, x, y) |
complex(kind=dp) function | mgcdot (n, x, y) |
subroutine | mgmv (A, x, b, Update) |
subroutine | mgcmv (A, x, b, Update) |
subroutine | jacobi (n, A, M, x, b, r, Rounds) |
subroutine | smoothedjacobi (n, A, M, x, b, r, w, Rounds) |
subroutine | cjacobi (n, A, M, rx, rb, rr, Rounds) |
subroutine | gs (n, A, M, x, b, r, Rounds) |
subroutine | richards (n, A, M, x, b, r, Rounds) |
subroutine | bgs (n, A, M, x, b, r, DOFs, Rounds) |
subroutine | smoothedgs (n, A, M, x, b, r, w, Rounds) |
subroutine | sgs (n, A, M, x, b, r, Rounds) |
subroutine | internalsgs (n, A, M, x, b, r, Rounds) |
subroutine | bsgs (n, A, M, x, b, r, DOFs, Rounds) |
subroutine | smoothedsgs (n, A, M, x, b, r, w, Rounds) |
subroutine | csgs (n, A, M, rx, rb, rr, Rounds) |
subroutine | postsgs (n, A, M, x, b, r, f, Rounds) |
subroutine | direct1dsmoother (n, A, M, x, b, r, f, Rounds) |
subroutine | ccg (n, A, M, rx, rb, rr, Rounds) |
subroutine | uzawa (n, A, M, x, b, r, Rounds) |
subroutine | uzawapcond (A, b) |
subroutine | bicguzawa (n, A, M, x, b, r, Rounds, reps) |
subroutine | bicg (n, A, M, x, b, r, Rounds) |
subroutine | vanka (n, A, M, x, b, r, Rounds) |
subroutine | testgs (n, A, M, x, b, r, Rounds) |
subroutine mgsmooth::bgs | ( | integer | n, |
type(matrix_t), pointer | A, | ||
type(matrix_t), pointer | M, | ||
real(kind=dp), dimension(:) | x, | ||
real(kind=dp), dimension(:) | b, | ||
real(kind=dp), dimension(:) | r, | ||
integer | DOFs, | ||
integer | Rounds | ||
) |
subroutine mgsmooth::bicg | ( | integer | n, |
type(matrix_t), pointer | A, | ||
type(matrix_t), pointer | M, | ||
real(kind=dp), dimension(:) | x, | ||
real(kind=dp), dimension(:) | b, | ||
real(kind=dp), dimension(:) | r, | ||
integer | Rounds | ||
) |
References crsmatrix::crs_lusolve(), mgdot(), and mgmv().
Referenced by smoothers::mgsmooth().
subroutine mgsmooth::bicguzawa | ( | integer | n, |
type(matrix_t), pointer | A, | ||
type(matrix_t), pointer | M, | ||
real(kind=dp), dimension(:) | x, | ||
real(kind=dp), dimension(:) | b, | ||
real(kind=dp), dimension(:) | r, | ||
integer | Rounds, | ||
real(kind=dp) | reps | ||
) |
References mgdot(), uzawamv(), and uzawapcond().
Referenced by uzawa().
subroutine mgsmooth::bsgs | ( | integer | n, |
type(matrix_t), pointer | A, | ||
type(matrix_t), pointer | M, | ||
real(kind=dp), dimension(:) | x, | ||
real(kind=dp), dimension(:) | b, | ||
real(kind=dp), dimension(:) | r, | ||
integer | DOFs, | ||
integer | Rounds | ||
) |
subroutine mgsmooth::ccg | ( | integer | n, |
type(matrix_t), pointer | A, | ||
type(matrix_t), pointer | M, | ||
real(kind=dp), dimension(:) | rx, | ||
real(kind=dp), dimension(:) | rb, | ||
real(kind=dp), dimension(:) | rr, | ||
integer | Rounds | ||
) |
Complex valued conjugate gradient as a smoother.
References crsmatrix::crs_complexlusolve(), mgcdot(), and mgcmv().
Referenced by smoothers::mgsmooth().
subroutine mgsmooth::cg | ( | integer | n, |
type(matrix_t), pointer | A, | ||
type(matrix_t), pointer | M, | ||
real(kind=dp), dimension(:) | x, | ||
real(kind=dp), dimension(:) | b, | ||
real(kind=dp), dimension(:) | r, | ||
integer | Rounds | ||
) |
Conjugate gradient as a smoother.
References crsmatrix::crs_lusolve(), mgdot(), and mgmv().
Referenced by smoothers::mgsmooth().
subroutine mgsmooth::cjacobi | ( | integer | n, |
type(matrix_t), pointer | A, | ||
type(matrix_t), pointer | M, | ||
real(kind=dp), dimension(:) | rx, | ||
real(kind=dp), dimension(:) | rb, | ||
real(kind=dp), dimension(:) | rr, | ||
integer | Rounds | ||
) |
References mgcmv().
Referenced by smoothers::mgsmooth().
subroutine mgsmooth::csgs | ( | integer | n, |
type(matrix_t), pointer | A, | ||
type(matrix_t), pointer | M, | ||
real(kind=dp), dimension(:) | rx, | ||
real(kind=dp), dimension(:) | rb, | ||
real(kind=dp), dimension(:) | rr, | ||
integer | Rounds | ||
) |
subroutine mgsmooth::direct1dsmoother | ( | integer | n, |
type(matrix_t), pointer | A, | ||
type(matrix_t), pointer | M, | ||
real(kind=dp), dimension(:) | x, | ||
real(kind=dp), dimension(:) | b, | ||
real(kind=dp), dimension(:) | r, | ||
integer, dimension(:), pointer | f, | ||
integer | Rounds | ||
) |
For some cases a smoother that only works with the local strong connections might be ideal. Given the clustering "f" just picks the entries i and j such that f(i)=f(j) and use the reduced matrix in a direct solver to smooth the system. Note that the method guarantees that the linear system actually consists of a number of local problems that are fairly small in size.
References meshutils::detectextrudedstructure(), directsolve::directsolver(), messages::fatal(), messages::info(), mgmv(), and solver().
Referenced by smoothers::mgsmooth().
subroutine mgsmooth::gs | ( | integer | n, |
type(matrix_t), pointer | A, | ||
type(matrix_t), pointer | M, | ||
real(kind=dp), dimension(:) | x, | ||
real(kind=dp), dimension(:) | b, | ||
real(kind=dp), dimension(:) | r, | ||
integer | Rounds | ||
) |
subroutine mgsmooth::internalsgs | ( | integer | n, |
type(matrix_t), pointer | A, | ||
type(matrix_t), pointer | M, | ||
real(kind=dp), dimension(:) | x, | ||
real(kind=dp), dimension(:) | b, | ||
real(kind=dp), dimension(:) | r, | ||
integer | Rounds | ||
) |
Internal symmetric-gauss-seidel for parallel computations.
Referenced by smoothers::mgsmooth().
subroutine mgsmooth::jacobi | ( | integer | n, |
type(matrix_t), pointer | A, | ||
type(matrix_t), pointer | M, | ||
real(kind=dp), dimension(:) | x, | ||
real(kind=dp), dimension(:) | b, | ||
real(kind=dp), dimension(:) | r, | ||
integer | Rounds | ||
) |
complex(kind=dp) function mgsmooth::mgcdot | ( | integer | n, |
complex(kind=dp), dimension(:) | x, | ||
complex(kind=dp), dimension(:) | y | ||
) |
subroutine mgsmooth::mgcmv | ( | type(matrix_t), pointer | A, |
complex(kind=dp), dimension(:) | x, | ||
complex(kind=dp), dimension(:) | b, | ||
logical, optional | Update | ||
) |
real(kind=dp) function mgsmooth::mgdot | ( | integer | n, |
real(kind=dp), dimension(:) | x, | ||
real(kind=dp), dimension(:) | y | ||
) |
References parallelutils::paralleldot().
Referenced by bicg(), paralleleigensolve::bicgpareigen(), bicguzawa(), cg(), and paralleleigensolve::cgpareigen().
subroutine mgsmooth::mgmv | ( | type(matrix_t), pointer | A, |
real(kind=dp), dimension(:) | x, | ||
real(kind=dp), dimension(:) | b, | ||
logical, optional | Update | ||
) |
References crsmatrix::crs_matrixvectormultiply(), and parallelutils::parallelmatrixvector().
real(kind=dp) function mgsmooth::mgnorm | ( | integer | n, |
real(kind=dp), dimension(:) | x | ||
) |
subroutine mgsmooth::postsgs | ( | integer | n, |
type(matrix_t), pointer | A, | ||
type(matrix_t), pointer | M, | ||
real(kind=dp), dimension(:) | x, | ||
real(kind=dp), dimension(:) | b, | ||
real(kind=dp), dimension(:) | r, | ||
integer, dimension(:), pointer | f, | ||
integer | Rounds | ||
) |
subroutine mgsmooth::richards | ( | integer | n, |
type(matrix_t), pointer | A, | ||
type(matrix_t), pointer | M, | ||
real(kind=dp), dimension(:) | x, | ||
real(kind=dp), dimension(:) | b, | ||
real(kind=dp), dimension(:) | r, | ||
integer | Rounds | ||
) |
Richards iteration with preconditioning by lumped mass matrix.
subroutine mgsmooth::sgs | ( | integer | n, |
type(matrix_t), pointer | A, | ||
type(matrix_t), pointer | M, | ||
real(kind=dp), dimension(:) | x, | ||
real(kind=dp), dimension(:) | b, | ||
real(kind=dp), dimension(:) | r, | ||
integer | Rounds | ||
) |
subroutine mgsmooth::smoothedgs | ( | integer | n, |
type(matrix_t), pointer | A, | ||
type(matrix_t), pointer | M, | ||
real(kind=dp), dimension(:) | x, | ||
real(kind=dp), dimension(:) | b, | ||
real(kind=dp), dimension(:) | r, | ||
real(kind=dp) | w, | ||
integer | Rounds | ||
) |
subroutine mgsmooth::smoothedjacobi | ( | integer | n, |
type(matrix_t), pointer | A, | ||
type(matrix_t), pointer | M, | ||
real(kind=dp), dimension(:) | x, | ||
real(kind=dp), dimension(:) | b, | ||
real(kind=dp), dimension(:) | r, | ||
real(kind=dp) | w, | ||
integer | Rounds | ||
) |
References mgmv().
Referenced by smoothers::mgsmooth().
subroutine mgsmooth::smoothedsgs | ( | integer | n, |
type(matrix_t), pointer | A, | ||
type(matrix_t), pointer | M, | ||
real(kind=dp), dimension(:) | x, | ||
real(kind=dp), dimension(:) | b, | ||
real(kind=dp), dimension(:) | r, | ||
real(kind=dp) | w, | ||
integer | Rounds | ||
) |
subroutine mgsmooth::solvelinsys | ( | integer | N, |
integer | LDa, | ||
double precision, dimension(lda,*) | A, | ||
double precision, dimension(n) | x | ||
) |
References messages::info().
Referenced by defutils::defaultdirichletbcs(), and vanka().
subroutine mgsmooth::testgs | ( | integer | n, |
type(matrix_t), pointer | A, | ||
type(matrix_t), pointer | M, | ||
real(kind=dp), dimension(:) | x, | ||
real(kind=dp), dimension(:) | b, | ||
real(kind=dp), dimension(:) | r, | ||
integer | Rounds | ||
) |
Gauss-Seidel smoother with plenty of comments for testing purposes.
Referenced by smoothers::mgsmooth().
subroutine mgsmooth::uzawa | ( | integer | n, |
type(matrix_t), pointer | A, | ||
type(matrix_t), pointer | M, | ||
real(kind=dp), dimension(:) | x, | ||
real(kind=dp), dimension(:) | b, | ||
real(kind=dp), dimension(:) | r, | ||
integer | Rounds | ||
) |
Uzawa algorithm as a smoother.
References bicguzawa(), mgmv(), and lists::variableget().
Referenced by smoothers::mgsmooth().
subroutine mgsmooth::uzawamv | ( | type(matrix_t) | A, |
real(kind=dp), dimension(:) | x, | ||
real(kind=dp), dimension(:) | b | ||
) |
subroutine mgsmooth::uzawapcond | ( | type(matrix_t) | A, |
real(kind=dp), dimension(:) | b | ||
) |
subroutine mgsmooth::vanka | ( | integer | n, |
type(matrix_t), pointer | A, | ||
type(matrix_t), pointer | M, | ||
real(kind=dp), dimension(:) | x, | ||
real(kind=dp), dimension(:) | b, | ||
real(kind=dp), dimension(:) | r, | ||
integer | Rounds | ||
) |
References crsmatrix::crs_getmatrixelement(), generalutils::getvarname(), solvelinsys(), and lists::variableget().
Referenced by smoothers::mgsmooth().