Elmer FEM solver
Elmer is an open source finite element software for multiphysical problems
 All Classes Files Functions Variables Typedefs Macros Groups Pages
Smoothers.src File Reference

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)
 

Function/Subroutine Documentation

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 
)

Referenced by smoothers::mgsmooth().

Here is the caller graph for this function:

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().

Here is the call graph for this function:

Here is the caller graph for this function:

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().

Here is the call graph for this function:

Here is the caller graph for this function:

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 
)

Referenced by smoothers::mgsmooth().

Here is the caller graph for this function:

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().

Here is the call graph for this function:

Here is the caller graph for this function:

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().

Here is the call graph for this function:

Here is the caller graph for this function:

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().

Here is the call graph for this function:

Here is the caller graph for this function:

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 
)

Referenced by smoothers::mgsmooth().

Here is the caller graph for this function:

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().

Here is the call graph for this function:

Here is the caller graph for this function:

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 
)

Referenced by smoothers::mgsmooth().

Here is the caller graph for this function:

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().

Here is the caller graph for this function:

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 
)

References mgmv().

Here is the call graph for this function:

complex(kind=dp) function mgsmooth::mgcdot ( integer  n,
complex(kind=dp), dimension(:)  x,
complex(kind=dp), dimension(:)  y 
)

Referenced by ccg().

Here is the caller graph for this function:

subroutine mgsmooth::mgcmv ( type(matrix_t), pointer  A,
complex(kind=dp), dimension(:)  x,
complex(kind=dp), dimension(:)  b,
logical, optional  Update 
)

References crsmatrix::crs_complexmatrixvectormultiply().

Here is the call graph for this function:

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().

Here is the call graph for this function:

Here is the caller graph for this function:

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().

Here is the call graph for this function:

real(kind=dp) function mgsmooth::mgnorm ( integer  n,
real(kind=dp), dimension(:)  x 
)

References parallelutils::parallelnorm().

Here is the call graph for this function:

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 
)

Referenced by smoothers::mgsmooth().

Here is the caller graph for this function:

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 
)

Referenced by smoothers::mgsmooth().

Here is the caller graph for this function:

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().

Here is the call graph for this function:

Here is the caller graph for this function:

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 
)

Referenced by smoothers::mgsmooth().

Here is the caller graph for this function:

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().

Here is the call graph for this function:

Here is the caller graph for this function:

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().

Here is the caller graph for this function:

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().

Here is the call graph for this function:

Here is the caller graph for this function:

subroutine mgsmooth::uzawamv ( type(matrix_t)  A,
real(kind=dp), dimension(:)  x,
real(kind=dp), dimension(:)  b 
)

Referenced by bicguzawa().

Here is the caller graph for this function:

subroutine mgsmooth::uzawapcond ( type(matrix_t)  A,
real(kind=dp), dimension(:)  b 
)

Referenced by bicguzawa().

Here is the caller graph for this function:

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().

Here is the call graph for this function:

Here is the caller graph for this function: