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
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)