bndv = LocalVandermondes(mesh, [[data]] * mesh.nelements, mqs) bndvs.append(bndv) S, f = assemble(mesh, k, lv, bndvs, mqs, elttobasis, bnddata, params) print "Solving system" from pymklpardiso.linsolve import solve S=S.tocsr() f=numpy.array(f.todense()) f=f.squeeze() (X,error)=solve(S,f) #X = print_timing(spsolve)(S.tocsr(), f.tocsr()) #print X print "Residual: %e: " % numpy.linalg.norm(S*X-f) EvalError=EvalElementError(mesh,elttobasis,quad, bnddata, lv, bndvs) (ed,en,eb)=EvalError.evaluate(X) print numpy.linalg.norm(ed),numpy.linalg.norm(en),numpy.linalg.norm(eb)
def pardisoSolve(self, M, b): from pymklpardiso.linsolve import solve print "pardisosolve" (x, error) = solve(M,b.squeeze(),msglvl=0) if not error == 0: raise Exception("Pardiso Error") return x
def umfpackSolve(self, M, b): from scipy.sparse.linalg.dsolve.linsolve import spsolve as solve print "umfpacksolve" return solve(M,b)
def solve(A,b): return pl.solve(A.tocsr().sorted_indices(),np.array(b))[0]