def solve(self,rhs): """ Overrides LinearSolver.solve Result contains (solution,status) Status means: 0: method has converged k>0 : maximum number of iterations reached k<0 : illegal input or breakdown """ self.resid = zeros((0,)) tol = self.param['tol'] if self.param['relative']: tol = max(self.param['rel_tol']*norm(rhs),tol) print_it = self.param['print'] #if print_it == 'short': restart = self.param['restart'] maxiter = self.param['max_iter'] if self.param['flexible']: x,info=self.fgmres(rhs,tol=tol,restrt=restart,\ maxiter=maxiter) elif self.param['builtin']: if ((restart > len(rhs)) or (restart == None)): restart = 2*len(rhs) print "# using builtin | restrt : ", restart x,info=sgmres(self.point,rhs,tol=tol,\ restrt=restart,maxiter=maxiter,\ callback=self.callback,xtype=None) else: x,info=self.gmres(rhs,tol=tol,restrt=restart,\ maxiter=maxiter) return (x,info)
def solve(self,rhs): """ Overrides LinearSolver.solve Result contains (solution,status) Status means: 0: method has converged k>0 : maximum number of iterations reached k<0 : illegal input or breakdown """ #self.resid = zeros((0,)) tol = self.param['tol'] if self.param['relative']: tol = max(self.param['rel_tol']*norm(rhs),tol) print_it = self.param['print'] #if print_it == 'short': restart = self.param['restart'] maxiter = self.param['max_iter'] if self.param['flexible']: x,info=self.fgmres(rhs,tol=tol,restrt=restart,\ maxiter=maxiter) elif self.param['builtin']: if ((restart > len(rhs)) or (restart == None)): restart = 2*len(rhs) print "# using builtin | restrt : ", restart x,info=sgmres(self.point,rhs,tol=tol,\ restrt=restart,maxiter=maxiter,\ callback=self.callback,xtype=None) else: x,info=self.gmres(rhs,tol=tol,restrt=restart,\ maxiter=maxiter) if print_it == 'long': print 'Convergence in GMRES!' plt.title('Final GMRES-residual') plt.plot(rhs-self.point.system.applyJacobian(x)) plt.show() print ' for vector ' plt.plot(x) plt.title(r'$\delta_{final}$') plt.show() return (x,info)