Petsc4py: Creating an AIJ matrix from csc_matrix results in a TypeError

I am trying to create a petsc-form matrix from an existing csc matrix. Given this , I created the following code example:

import numpy as np
import scipy.sparse as sp
import math as math
from petsc4py import PETSc
n=100

A = sp.csc_matrix((n,n),dtype=np.complex128)
print A.shape
A[1:5,:]=1+1j*5*math.pi

p1=A.indptr
p2=A.indices
p3=A.data
petsc_mat = PETSc.Mat().createAIJ(size=A.shape,csr=(p1,p2,p3))

This works fine if only the matrix is ​​made up of real values. When the matrix is ​​complex, this piece of code leads to TypeError: Cannot cast array data from dtype('complex128') to dtype('float64') according to the rule 'safe'. I tried to figure out where the error occurred exactly, but could not understand the meaning of the trace:

petsc_mat = PETSc.Mat().createAIJ(size=A.shape,csr=(p1,p2,p3))  File "Mat.pyx", line 265, in petsc4py.PETSc.Mat.createAIJ (src/petsc4py.PETSc.c:98970)
File "petscmat.pxi", line 662, in petsc4py.PETSc.Mat_AllocAIJ (src/petsc4py.PETSc.c:24264)
File "petscmat.pxi", line 633, in petsc4py.PETSc.Mat_AllocAIJ_CSR (src/petsc4py.PETSc.c:23858)
File "arraynpy.pxi", line 136, in petsc4py.PETSc.iarray_s (src/petsc4py.PETSc.c:8048)
File "arraynpy.pxi", line 117, in petsc4py.PETSc.iarray (src/petsc4py.PETSc.c:7771)

Is there an efficient way to create a petsc matrix (from which I want to get some own pairs later) from a complex csc scipy matrix?

I would be very happy if you guys could help me find my (hopefully not too obvious) error.

+2
1

PETSc, , , , , --with-scalar-type=complex.

, :

  • $PETSC_DIR/arch-linux2-c-opt/conf/configure.log.

  • reconfigure-arch-linux2-c-opt.py.

, PETSc. SLEPc, . , (--with-scalar-type=complex) script , .

+2

Source: https://habr.com/ru/post/1668659/


All Articles