def RunTest(): from petsc4py import PETSc import example100 import hpddm OptDB = PETSc.Options() N = OptDB.getInt('N', 100) draw = OptDB.getBool('draw', False) hpddm.registerKSP() OptDB.setValue('ksp_type', 'hpddm') hpddm.optionParse( hpddm.optionGet(), '-hpddm_krylov_method gcrodr -hpddm_recycle 10 -hpddm_verbosity') A = PETSc.Mat() A.create(comm=PETSc.COMM_WORLD) A.setSizes([N, N]) A.setType(PETSc.Mat.Type.PYTHON) A.setPythonContext(example100.Laplace1D()) A.setUp() x, b = A.getVecs() b.set(1) ksp = PETSc.KSP() ksp.create(comm=PETSc.COMM_WORLD) ksp.setType(PETSc.KSP.Type.PYTHON) ksp.setPythonContext(example100.ConjGrad()) pc = ksp.getPC() pc.setType(PETSc.PC.Type.PYTHON) pc.setPythonContext(example100.Jacobi()) ksp.setOperators(A, A) ksp.setFromOptions() ksp.solve(b, x) r = b.duplicate() A.mult(x, r) r.aypx(-1, b) rnorm = r.norm() PETSc.Sys.Print('error norm = %g' % rnorm, comm=PETSc.COMM_WORLD) if draw: viewer = PETSc.Viewer.DRAW(x.getComm()) x.view(viewer) PETSc.Sys.sleep(2) ksp.solve(b, x) A.mult(x, r) r.aypx(-1, b) rnorm = r.norm() PETSc.Sys.Print('error norm = %g' % rnorm, comm=PETSc.COMM_WORLD)
sys.path.append('interface') import ctypes import numpy import scipy.sparse import scipy.sparse.linalg import hpddm import re try: xrange except NameError: xrange = range opt = hpddm.optionGet() args = ctypes.create_string_buffer(' '.join(sys.argv[1:]).encode('ascii', 'ignore')) hpddm.optionParse(opt, args) def appArgs(): val = (ctypes.c_char_p * 2)() (val[0], val[1]) = [ b'generate_random_rhs=<1>', b'fill_factor=<18>' ] desc = (ctypes.c_char_p * 2)() (desc[0], desc[1]) = [ b'Number of generated random right-hand sides.', b'Specifies the fill ratio upper bound (>= 1.0) for ILU.' ] hpddm.optionParseInts(opt, args, 2, ctypes.cast(val, ctypes.POINTER(ctypes.c_char_p)), ctypes.cast(desc, ctypes.POINTER(ctypes.c_char_p))) val[0] = b'drop_tol=<1.0e-4>' desc[0] = b'Drop tolerance (0 <= tol <= 1) for an incomplete LU decomposition.' hpddm.optionParseDoubles(opt, args, 1, ctypes.cast(val, ctypes.POINTER(ctypes.c_char_p)), ctypes.cast(desc, ctypes.POINTER(ctypes.c_char_p))) val[0] = b'matrix_filename=<input_file>' desc[0] = b'Name of the file in which the matrix is stored.' hpddm.optionParseArgs(opt, args, 1, ctypes.cast(val, ctypes.POINTER(ctypes.c_char_p)), ctypes.cast(desc, ctypes.POINTER(ctypes.c_char_p))) val = None desc = None appArgs()
""" from __future__ import print_function from mpi4py import MPI import sys sys.path.append('interface') import ctypes import numpy import hpddm from generate import * rankWorld = MPI.COMM_WORLD.Get_rank() sizeWorld = MPI.COMM_WORLD.Get_size() opt = hpddm.optionGet() args = ctypes.create_string_buffer(' '.join(sys.argv[1:]).encode('ascii', 'ignore')) hpddm.optionParse(opt, args, rankWorld == 0) def appArgs(): val = (ctypes.c_char_p * 4)() (val[0], val[1], val[2], val[3]) = [ b'Nx=<100>', b'Ny=<100>', b'overlap=<1>', b'generate_random_rhs=<0>' ] desc = (ctypes.c_char_p * 4)() (desc[0], desc[1], desc[2], desc[3]) = [ b'Number of grid points in the x-direction.', b'Number of grid points in the y-direction.', b'Number of grid points in the overlap.', b'Number of generated random right-hand sides.' ] hpddm.optionParseInts(opt, args, 4, ctypes.cast(val, ctypes.POINTER(ctypes.c_char_p)), ctypes.cast(desc, ctypes.POINTER(ctypes.c_char_p))) (val[0], val[1]) = [ b'symmetric_csr=(0|1)', b'nonuniform=(0|1)' ] (desc[0], desc[1]) = [ b'Assemble symmetric matrices.', b'Use a different number of eigenpairs to compute on each subdomain.' ] hpddm.optionParseArgs(opt, args, 2, ctypes.cast(val, ctypes.POINTER(ctypes.c_char_p)), ctypes.cast(desc, ctypes.POINTER(ctypes.c_char_p))) val = None desc = None appArgs() o, connectivity, dof, Mat, MatNeumann, d, f, sol, mu = generate(rankWorld, sizeWorld) status = 0 if sizeWorld > 1: