Source code for kona.linalg.solvers.krylov.basic

from kona.options import get_opt

[docs]class KrylovSolver(object): """ Base class for all Krylov solvers. Parameters ---------- vector_factory : VectorFactory optns : dict, optional Attributes ---------- vec_factory : VectorFactory Used to generate abstracted KonaVector objects. max_iter : int Maximum iterations for the CG solve. rel_tol : float Relative residual tolerance for the solution. check_res : boolean Flag for checking the residual after solution is found out_file : file File stream for writing convergence data. """ def __init__(self, vector_factory, optns=None): # save the vector factory self.vec_fac = vector_factory # set up empty optns dict if optns is None: self.optns = {} else: assert type(optns) is dict, "Invalid options! Must be a dictionary." self.optns = optns # get default options self.max_iter = get_opt(self.optns, 10, 'subspace_size') self.rel_tol = get_opt(self.optns, 1e-6, 'rel_tol') self.check_res = get_opt(self.optns, True, 'check_res') # set up the info file self.out_file = get_opt(self.optns, 'kona_krylov.dat', 'krylov_file') if isinstance(self.out_file, str): try: _memory = self.vec_fac._memory except Exception: _memory = self.vec_fac[0]._memory self.out_file = _memory.open_file(self.out_file) def _validate_options(self): if self.max_iter < 1: raise ValueError('max_iter must be greater than one') if self.rel_tol <= 0: raise ValueError('max_iter must be greater than zero')
[docs] def solve(self, mat_vec, b, x, precond): """ Solves the Ax=b linear system iteratively. Parameters: ----------- mat_vec : function Matrix-vector product for left-hand side matrix A. b : KonaVector Right-hand side vector. x : KonaVector Solution vector precond : function Matrix-vector product for approximate inv(A). """ raise NotImplementedError