示例#1
0
文件: iterative.py 项目: zhaog6/hpddm
    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()

filename = hpddm.optionPrefix(opt, b'matrix_filename')
if len(filename) == 0:
    print('Please specity a -matrix_filename=<input_file>')
    sys.exit(1)

n, m, nnz, a, ia, ja, sym = hpddm.parse_file(filename)

Mat = hpddm.matrixCSRCreate(n, m, nnz, a, ia, ja, sym)
if hpddm.numbering.value == b'F':
    ia[:] -= 1
    ja[:] -= 1
csr = scipy.sparse.csr_matrix((a, ja, ia), shape = (n, m), dtype = hpddm.scalar)

mu = int(hpddm.optionApp(opt, b'generate_random_rhs'))
shape = n if mu == 1 else (n, mu)
sol = numpy.zeros(shape, order = 'F', dtype = hpddm.scalar)
f = numpy.empty_like(sol)
f[:] = numpy.random.random_sample(shape)
if hpddm.scalar == numpy.complex64 or hpddm.scalar == numpy.complex128:
    f[:] += numpy.random.random_sample(shape) * 1j
示例#2
0
文件: solver.py 项目: feelpp/hpddm
   HPDDM is distributed in the hope that it will be useful,
   but WITHOUT ANY WARRANTY; without even the implied warranty of
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   GNU Lesser General Public License for more details.

   You should have received a copy of the GNU Lesser General Public License
   along with HPDDM.  If not, see <http://www.gnu.org/licenses/>.
"""

import sys
sys.path.append('interface')
import ctypes
import numpy
import hpddm

n, m, nnz, a, ia, ja, sym = hpddm.parse_file(sys.argv[1])

Mat = hpddm.matrixCSRCreate(n, m, nnz, a, ia, ja, sym)
S = ctypes.POINTER(hpddm.Subdomain)()
hpddm.subdomainNumfact(ctypes.byref(S), Mat)
f = numpy.empty(n, hpddm.scalar)
f[:] = numpy.random.random_sample(n)
if hpddm.scalar == numpy.complex64 or hpddm.scalar == numpy.complex128:
    f[:] += numpy.random.random_sample(n) * 1j
sol = numpy.empty_like(f)
hpddm.subdomainSolve(S, f, sol)
nrmb = numpy.linalg.norm(f)
tmp = numpy.empty_like(f)
hpddm.csrmv(Mat, sol, tmp)
tmp -= f
nrmAx = numpy.linalg.norm(tmp)