Exemple #1
0
def norm2diff_id_matrix(mvma, a, solveb, solvetransb, b,
                        rows: int, cols: int) -> float:
    cmvma = libkrylov.CFuncMvmT(mvma)
    ca = a.as_voidp()
    csolveb = libkrylov.CFuncPrcdT(solveb)
    csolvetransb = libkrylov.CFuncPrcdT(solvetransb)
    cb = b.as_voidp()
    return libkrylov.norm2diff_id_pre_matrix(cmvma, ca, csolveb, csolvetransb,
                                             cb, rows, cols)
Exemple #2
0
def norm2diff_pre_matrix(mvma, a, evalb, evaltransb, b,
                         rows: int, cols: int) -> float:
    cmvma = libkrylov.CFuncMvmT(mvma)
    ca = a.as_voidp()
    cevalb = libkrylov.CFuncPrcdT(evalb)
    cevaltransb = libkrylov.CFuncPrcdT(evaltransb)
    cb = b.as_voidp()
    return libkrylov.norm2diff_pre_matrix(cmvma, ca, cevalb, cevaltransb, cb,
                                          rows, cols)
Exemple #3
0
def step_puzawa(solve_a11, matrix_a11, mvm_a21, matrix_a21, prcd, pdata,
                b1: 'vec.AVector', b2: 'vec.AVector', x1: 'vec.AVector',
                x2: 'vec.AVector', r2: 'vec.AVector', q2: 'vec.AVector',
                p2: 'vec.AVector', a1: 'vec.AVector', s2: 'vec.AVector'):
    csolvea11 = libkrylov.CFuncPrcdT(solve_a11)
    cmatrixa11 = matrix_a11.as_voidp()
    cmvma21 = libkrylov.CFuncMvmT(mvm_a21)
    cmatrixa21 = matrix_a21.as_voidp()
    cprcd = libkrylov.CFuncPrcdT(prcd)
    cpdata = cast(pdata, c_void_p)
    libkrylov.step_puzawa(csolvea11, cmatrixa11, cmvma21, cmatrixa21, cprcd,
                          cpdata, b1, b2, x1, x2, r2, q2, p2, a1, s2)
Exemple #4
0
def step_pcg(addeval, matrix, prcd, pdata, b: 'vec.AVector', x: 'vec.AVector',
             r: 'vec.AVector', q: 'vec.AVector', p: 'vec.AVector',
             a: 'vec.AVector'):
    caddeval = libkrylov.CFuncAddevalT(addeval)
    cmatrix = matrix.as_voidp()
    cprcd = libkrylov.CFuncPrcdT(prcd)
    cpdata = cast(pdata, c_void_p)
    libkrylov.step_pcg(caddeval, cmatrix, cprcd, cpdata, b, x, r, q, p, a)
Exemple #5
0
def solve_pcg_avector(a, addeval, prcd, pdata, b: 'vec.AVector',
                      x: 'vec.AVector', eps: float, maxiter: int) -> int:
    ca = a.as_voidp()
    caddeval = libkrylov.CFuncAddevalT(addeval)
    cprcd = libkrylov.CFuncPrcdT(prcd)
    cpdata = cast(pdata, c_void_p)
    return libkrylovsolvers.solve_pcg_avector(ca, caddeval, cprcd, cpdata, b,
                                              x, eps, maxiter)
Exemple #6
0
def step_uzawa(solve_a11, matrix_a11, mvm_a21, matrix_a21, b1: 'vec.AVector',
               b2: 'vec.AVector', x1: 'vec.AVector', x2: 'vec.AVector',
               r2: 'vec.AVector', p2: 'vec.AVector', a1: 'vec.AVector',
               s2: 'vec.AVector'):
    csolvea11 = libkrylov.CFuncPrcdT(solve_a11)
    cmatrixa11 = matrix_a11.as_voidp()
    cmvma21 = libkrylov.CFuncMvmT(mvm_a21)
    cmatrixa21 = matrix_a21.as_voidp()
    libkrylov.step_uzawa(csolvea11, cmatrixa11, cmvma21, cmatrixa21,
                         b1, b2, x1, x2, r2, p2, a1, s2)
Exemple #7
0
def finish_pgmres(addeval, matrix, prcd, pdata, b: 'vec.AVector',
                  x: 'vec.AVector', rhat: 'vec.AVector', q: 'vec.AVector',
                  kk: List[int], qr: 'mat.AMatrix', tau: 'vec.AVector'):
    caddeval = libkrylov.CFuncAddevalT(addeval)
    cmatrix = matrix.as_voidp()
    cprcd = libkrylov.CFuncPrcdT(prcd)
    cpdata = cast(pdata, c_void_p)
    ckk = pylist_to_ptr(kk, c_uint)
    libkrylov.finish_pgmres(caddeval, cmatrix, cprcd, cpdata, b, x, rhat, q,
                            ckk, qr, tau)
Exemple #8
0
def solve_pcg(a: matrix_union, prcd, pdata, b: 'vec.AVector', x: 'vec.AVector',
              eps: float, maxiter: int) -> int:
    verify_type(a, matrix_types)
    cprcd = libkrylov.CFuncPrcdT(prcd)
    cpdata = cast(pdata, c_void_p)

    if isinstance(a, mat.AMatrix):
        solve_func = libkrylovsolvers.solve_pcg_amatrix_avector
    elif isinstance(a, mat.SparseMatrix):
        solve_func = libkrylovsolvers.solve_pcg_sparsematrix_avector
    elif isinstance(a, mat.HMatrix):
        solve_func = libkrylovsolvers.solve_pcg_hmatrix_avector
    elif isinstance(a, mat.H2Matrix):
        solve_func = libkrylovsolvers.solve_pcg_h2matrix_avector
    elif isinstance(a, mat.DH2Matrix):
        solve_func = libkrylovsolvers.solve_pcg_dh2matrix_avector
    return solve_func(a, cprcd, cpdata, b, x, eps, maxiter)