Elmer FEM solver
Elmer is an open source finite element software for multiphysical problems
|
integer, parameter | stack_max =64 |
integer | stack_pos =0 |
logical, dimension(stack_max) | firstcall |
double precision function | stopc (x, b, r, ipar, dpar) |
subroutine | pcond_dummy (u, v, ipar) |
subroutine | pcond_dummy_cmplx (u, v, ipar) |
recursive subroutine | itersolver (A, x, b, Solver, ndim, DotF, NormF, MatvecF, PrecF, StopcF) |
recursive subroutine itersolve::itersolver | ( | type(matrix_t), target | A, |
real(kind=dp), dimension(:) | x, | ||
real(kind=dp), dimension(:) | b, | ||
type(solver_t) | Solver, | ||
integer, optional | ndim, | ||
integer(kind=addrint), optional | DotF, | ||
integer(kind=addrint), optional | NormF, | ||
integer(kind=addrint), optional | MatvecF, | ||
integer(kind=addrint), optional | PrecF, | ||
integer(kind=addrint), optional | StopcF | ||
) |
The routine that decides which linear system solver to call, and calls it. There are two main sources of iterations within Elmer. 1) The old HUTiter C++ library that includes the most classic iterative Krylov methods. 2) The internal MODULE IterativeMethods that includes some classic iterative methods and also some more recent Krylov methods.
References generalutils::allocatematrix(), crsmatrix::crs_blockdiagonal(), crsmatrix::crs_complexdiagprecondition(), crsmatrix::crs_complexilut(), crsmatrix::crs_complexincompletelu(), crsmatrix::crs_complexluprecondition(), crsmatrix::crs_complexmatrixvectorprod(), crsmatrix::crs_diagprecondition(), crsmatrix::crs_ilut(), crsmatrix::crs_incompletelu(), crsmatrix::crs_luprecondition(), crsmatrix::crs_matrixvectorprod(), messages::error(), messages::fatal(), messages::info(), iterativemethods::itermethod_bicgstabl(), iterativemethods::itermethod_gcr(), iterativemethods::itermethod_jacobi(), iterativemethods::itermethod_richardson(), iterativemethods::itermethod_sgs(), iterativemethods::itermethod_z_bicgstabl(), iterativemethods::itermethod_z_gcr(), listmatrix::list_addtomatrixelement(), listmatrix::list_tocrsmatrix(), lists::listgetconstreal(), lists::listgetcreal(), lists::listgetinteger(), lists::listgetlogical(), lists::listgetstring(), multigridprec(), pcond_dummy(), pcond_dummy_cmplx(), solver(), stopc(), vankaprec(), and messages::warn().
Referenced by multigrid::amgsolve(), eigensolve::arpackeigensolve(), eigensolve::arpackeigensolvecomplex(), eigensolve::arpackstabeigensolve(), blocksolve::blockkryloviter(), blocksolve::blockmatrixprec(), multigrid::cmgsolve(), fetisolve::feti(), gebhardtfactors(), modeldescription::getnodalelementsize(), multigrid::gmgsolve(), solverutils::mortarrobinsolver(), multigrid::pmgsolve(), freesurface::poissonsolve(), radiationfactors(), sparitersolve::solve(), and solverutils::solvelinearsystem().
subroutine itersolve::pcond_dummy | ( | real(kind=dp), dimension(huti_ndim) | u, |
real(kind=dp), dimension(huti_ndim) | v, | ||
integer, dimension(*) | ipar | ||
) |
Dummy preconditioner, if linear system scaling is active this corresponds to diagonal preconditioning.
Referenced by itersolver().
subroutine itersolve::pcond_dummy_cmplx | ( | complex(kind=dp), dimension(huti_ndim) | u, |
complex(kind=dp), dimension(huti_ndim) | v, | ||
integer, dimension(*) | ipar | ||
) |
Complex dummy preconditioner, if linear system scaling is active this corresponds to diagonal preconditioning.
Referenced by itersolver().
double precision function itersolve::stopc | ( | double precision, dimension(*) | x, |
double precision, dimension(*) | b, | ||
double precision, dimension(*) | r, | ||
integer, dimension(*) | ipar, | ||
double precision, dimension(*) | dpar | ||
) |
We don't use the backward error estimate e = ||Ax-b||/(||A|| ||x|| + ||b||) as stopping criteriation.
References crsmatrix::crs_matrixvectormultiply().
Referenced by itersolver().
logical, dimension(stack_max) itersolve::firstcall |
integer, parameter itersolve::stack_max =64 |
integer itersolve::stack_pos =0 |