Swap pyarpackSparseLDLT and pyarpackSparseLU tests
SparseLU tests solves now - complex128 non-symmetric problem - complex64 non-symmetric general problem SparseLDLT solves now - float64 symmetric problem - float32 symmetric general problem
This commit is contained in:
committed by
Franck HOUSSEN
parent
bdb881c973
commit
de52ee6e32
@@ -8,7 +8,7 @@ from pyarpack import sparseLDLT as pyarpackSlv
|
||||
n = 4
|
||||
i = np.array([], dtype='@PYINT@')
|
||||
j = np.array([], dtype='@PYINT@')
|
||||
Aij = np.array([], dtype='complex128')
|
||||
Aij = np.array([], dtype='float64')
|
||||
for k in range(n):
|
||||
for l in [k-1, k, k+1]:
|
||||
if l < 0 or l > n-1:
|
||||
@@ -16,27 +16,23 @@ for k in range(n):
|
||||
i = np.append(i, np.@PYINT@(k)) # Casting value on append is MANDATORY or C++ won't get the expected type.
|
||||
j = np.append(j, np.@PYINT@(l)) # Casting value on append is MANDATORY or C++ won't get the expected type.
|
||||
if l == k:
|
||||
Aij = np.append(Aij, np.complex128(complex( 200., 200.))) # Casting value on append is MANDATORY or C++ won't get the expected type.
|
||||
if l == k-1:
|
||||
Aij = np.append(Aij, np.complex128(complex(-101., -101.))) # Casting value on append is MANDATORY or C++ won't get the expected type.
|
||||
if l == k+1:
|
||||
Aij = np.append(Aij, np.complex128(complex( -99., -99.))) # Casting value on append is MANDATORY or C++ won't get the expected type.
|
||||
Aij = np.append(Aij, np.float64( 200.)) # Casting value on append is MANDATORY or C++ won't get the expected type.
|
||||
if l == k-1 or l == k+1:
|
||||
Aij = np.append(Aij, np.float64(-100.)) # Casting value on append is MANDATORY or C++ won't get the expected type.
|
||||
for k, l, Akl in zip(i, j, Aij):
|
||||
print("A[", k, ",", l, "] =", Akl)
|
||||
A = (n, i, j, Aij) # coo format: dimension, i 0-based indices, j 0-based indices, Aij values.
|
||||
|
||||
# Get and tune arpack solver.
|
||||
|
||||
arpackSlv = pyarpackSlv.complexDouble() # Caution: complexDouble <=> np.array(..., dtype='complex128')
|
||||
arpackSlv = pyarpackSlv.double() # Caution: double <=> np.array(..., dtype='float64')
|
||||
arpackSlv.verbose = 3 # Set to 0 to get a quiet solve.
|
||||
arpackSlv.debug = 1 # Set to 0 to get a quiet solve.
|
||||
arpackSlv.nbEV = 1
|
||||
arpackSlv.nbCV = 2*arpackSlv.nbEV + 1
|
||||
arpackSlv.mag = 'LM'
|
||||
arpackSlv.maxIt = 200
|
||||
arpackSlv.slvOffset = 0.
|
||||
arpackSlv.slvScale = 1.
|
||||
arpackSlv.symPb = False
|
||||
arpackSlv.slvPvtThd = 1.e-6
|
||||
|
||||
# Solve eigen problem.
|
||||
|
||||
@@ -66,8 +62,8 @@ print("\n#######################################################################
|
||||
n = 8
|
||||
i = np.array([], dtype='@PYINT@')
|
||||
j = np.array([], dtype='@PYINT@')
|
||||
Aij = np.array([], dtype='complex64')
|
||||
Bij = np.array([], dtype='complex64')
|
||||
Aij = np.array([], dtype='float32')
|
||||
Bij = np.array([], dtype='float32')
|
||||
for k in range(n):
|
||||
for l in [k-1, k, k+1]:
|
||||
if l < 0 or l > n-1:
|
||||
@@ -75,14 +71,11 @@ for k in range(n):
|
||||
i = np.append(i, np.@PYINT@(k+1)) # Casting value on append is MANDATORY or C++ won't get the expected type.
|
||||
j = np.append(j, np.@PYINT@(l+1)) # Casting value on append is MANDATORY or C++ won't get the expected type.
|
||||
if l == k:
|
||||
Aij = np.append(Aij, np.complex64(complex( 200., 200.))) # Casting value on append is MANDATORY or C++ won't get the expected type.
|
||||
Bij = np.append(Bij, np.complex64(complex( 33.3, 33.3))) # Casting value on append is MANDATORY or C++ won't get the expected type.
|
||||
if l == k-1:
|
||||
Aij = np.append(Aij, np.complex64(complex(-101., -101.))) # Casting value on append is MANDATORY or C++ won't get the expected type.
|
||||
Bij = np.append(Bij, np.complex64(complex( 16.6, 16.6))) # Casting value on append is MANDATORY or C++ won't get the expected type.
|
||||
if l == k+1:
|
||||
Aij = np.append(Aij, np.complex64(complex( -99., -99.))) # Casting value on append is MANDATORY or C++ won't get the expected type.
|
||||
Bij = np.append(Bij, np.complex64(complex( 16.6, 16.6))) # Casting value on append is MANDATORY or C++ won't get the expected type.
|
||||
Aij = np.append(Aij, np.float32( 200.)) # Casting value on append is MANDATORY or C++ won't get the expected type.
|
||||
Bij = np.append(Bij, np.float32( 33.3)) # Casting value on append is MANDATORY or C++ won't get the expected type.
|
||||
if l == k-1 or l == k+1:
|
||||
Aij = np.append(Aij, np.float32(-100.)) # Casting value on append is MANDATORY or C++ won't get the expected type.
|
||||
Bij = np.append(Bij, np.float32( 16.6)) # Casting value on append is MANDATORY or C++ won't get the expected type.
|
||||
for k, l, Akl in zip(i, j, Aij):
|
||||
print("A[", k, ",", l, "] =", Akl)
|
||||
for k, l, Bkl in zip(i, j, Bij):
|
||||
@@ -92,18 +85,15 @@ B = (n, i, j, Bij) # coo format: dimension, i 1-based indices, j 1-based indices
|
||||
|
||||
# Get and tune arpack solver.
|
||||
|
||||
arpackSlv = pyarpackSlv.complexFloat() # Caution: complexFloat <=> np.array(..., dtype='complex64')
|
||||
arpackSlv = pyarpackSlv.float() # Caution: float <=> np.array(..., dtype='float32')
|
||||
arpackSlv.verbose = 3 # Set to 0 to get a quiet solve.
|
||||
arpackSlv.debug = 1 # Set to 0 to get a quiet solve.
|
||||
arpackSlv.nbEV = 2
|
||||
arpackSlv.nbCV = 2*arpackSlv.nbEV + 1
|
||||
arpackSlv.mag = 'LM'
|
||||
arpackSlv.maxIt = 200
|
||||
arpackSlv.slvOffset = 0.
|
||||
arpackSlv.slvScale = 1.
|
||||
arpackSlv.slvPvtThd = 1.e-6
|
||||
arpackSlv.sigmaReal = 1
|
||||
arpackSlv.sigmaImag = 1
|
||||
arpackSlv.symPb = False
|
||||
|
||||
# Solve eigen problem.
|
||||
|
||||
|
||||
@@ -2,13 +2,12 @@
|
||||
|
||||
import numpy as np
|
||||
from pyarpack import sparseLU as pyarpackSlv
|
||||
|
||||
# Build laplacian.
|
||||
|
||||
n = 4
|
||||
i = np.array([], dtype='@PYINT@')
|
||||
j = np.array([], dtype='@PYINT@')
|
||||
Aij = np.array([], dtype='float64')
|
||||
Aij = np.array([], dtype='complex128')
|
||||
for k in range(n):
|
||||
for l in [k-1, k, k+1]:
|
||||
if l < 0 or l > n-1:
|
||||
@@ -16,23 +15,27 @@ for k in range(n):
|
||||
i = np.append(i, np.@PYINT@(k)) # Casting value on append is MANDATORY or C++ won't get the expected type.
|
||||
j = np.append(j, np.@PYINT@(l)) # Casting value on append is MANDATORY or C++ won't get the expected type.
|
||||
if l == k:
|
||||
Aij = np.append(Aij, np.float64( 200.)) # Casting value on append is MANDATORY or C++ won't get the expected type.
|
||||
if l == k-1 or l == k+1:
|
||||
Aij = np.append(Aij, np.float64(-100.)) # Casting value on append is MANDATORY or C++ won't get the expected type.
|
||||
Aij = np.append(Aij, np.complex128(complex( 200., 200.))) # Casting value on append is MANDATORY or C++ won't get the expected type.
|
||||
if l == k-1:
|
||||
Aij = np.append(Aij, np.complex128(complex(-101., -101.))) # Casting value on append is MANDATORY or C++ won't get the expected type.
|
||||
if l == k+1:
|
||||
Aij = np.append(Aij, np.complex128(complex( -99., -99.))) # Casting value on append is MANDATORY or C++ won't get the expected type.
|
||||
for k, l, Akl in zip(i, j, Aij):
|
||||
print("A[", k, ",", l, "] =", Akl)
|
||||
A = (n, i, j, Aij) # coo format: dimension, i 0-based indices, j 0-based indices, Aij values.
|
||||
|
||||
# Get and tune arpack solver.
|
||||
|
||||
arpackSlv = pyarpackSlv.double() # Caution: double <=> np.array(..., dtype='float64')
|
||||
arpackSlv = pyarpackSlv.complexDouble() # Caution: complexDouble <=> np.array(..., dtype='complex128')
|
||||
arpackSlv.verbose = 3 # Set to 0 to get a quiet solve.
|
||||
arpackSlv.debug = 1 # Set to 0 to get a quiet solve.
|
||||
arpackSlv.nbEV = 1
|
||||
arpackSlv.nbCV = 2*arpackSlv.nbEV + 1
|
||||
arpackSlv.mag = 'LM'
|
||||
arpackSlv.maxIt = 200
|
||||
arpackSlv.slvPvtThd = 1.e-6
|
||||
arpackSlv.slvOffset = 0.
|
||||
arpackSlv.slvScale = 1.
|
||||
arpackSlv.symPb = False
|
||||
|
||||
# Solve eigen problem.
|
||||
|
||||
@@ -62,8 +65,8 @@ print("\n#######################################################################
|
||||
n = 8
|
||||
i = np.array([], dtype='@PYINT@')
|
||||
j = np.array([], dtype='@PYINT@')
|
||||
Aij = np.array([], dtype='float32')
|
||||
Bij = np.array([], dtype='float32')
|
||||
Aij = np.array([], dtype='complex64')
|
||||
Bij = np.array([], dtype='complex64')
|
||||
for k in range(n):
|
||||
for l in [k-1, k, k+1]:
|
||||
if l < 0 or l > n-1:
|
||||
@@ -71,11 +74,14 @@ for k in range(n):
|
||||
i = np.append(i, np.@PYINT@(k+1)) # Casting value on append is MANDATORY or C++ won't get the expected type.
|
||||
j = np.append(j, np.@PYINT@(l+1)) # Casting value on append is MANDATORY or C++ won't get the expected type.
|
||||
if l == k:
|
||||
Aij = np.append(Aij, np.float32( 200.)) # Casting value on append is MANDATORY or C++ won't get the expected type.
|
||||
Bij = np.append(Bij, np.float32( 33.3)) # Casting value on append is MANDATORY or C++ won't get the expected type.
|
||||
if l == k-1 or l == k+1:
|
||||
Aij = np.append(Aij, np.float32(-100.)) # Casting value on append is MANDATORY or C++ won't get the expected type.
|
||||
Bij = np.append(Bij, np.float32( 16.6)) # Casting value on append is MANDATORY or C++ won't get the expected type.
|
||||
Aij = np.append(Aij, np.complex64(complex( 200., 200.))) # Casting value on append is MANDATORY or C++ won't get the expected type.
|
||||
Bij = np.append(Bij, np.complex64(complex( 33.3, 33.3))) # Casting value on append is MANDATORY or C++ won't get the expected type.
|
||||
if l == k-1:
|
||||
Aij = np.append(Aij, np.complex64(complex(-101., -101.))) # Casting value on append is MANDATORY or C++ won't get the expected type.
|
||||
Bij = np.append(Bij, np.complex64(complex( 16.6, 16.6))) # Casting value on append is MANDATORY or C++ won't get the expected type.
|
||||
if l == k+1:
|
||||
Aij = np.append(Aij, np.complex64(complex( -99., -99.))) # Casting value on append is MANDATORY or C++ won't get the expected type.
|
||||
Bij = np.append(Bij, np.complex64(complex( 16.6, 16.6))) # Casting value on append is MANDATORY or C++ won't get the expected type.
|
||||
for k, l, Akl in zip(i, j, Aij):
|
||||
print("A[", k, ",", l, "] =", Akl)
|
||||
for k, l, Bkl in zip(i, j, Bij):
|
||||
@@ -85,15 +91,18 @@ B = (n, i, j, Bij) # coo format: dimension, i 1-based indices, j 1-based indices
|
||||
|
||||
# Get and tune arpack solver.
|
||||
|
||||
arpackSlv = pyarpackSlv.float() # Caution: float <=> np.array(..., dtype='float32')
|
||||
arpackSlv = pyarpackSlv.complexFloat() # Caution: complexFloat <=> np.array(..., dtype='complex64')
|
||||
arpackSlv.verbose = 3 # Set to 0 to get a quiet solve.
|
||||
arpackSlv.debug = 1 # Set to 0 to get a quiet solve.
|
||||
arpackSlv.nbEV = 2
|
||||
arpackSlv.nbCV = 2*arpackSlv.nbEV + 1
|
||||
arpackSlv.mag = 'LM'
|
||||
arpackSlv.maxIt = 200
|
||||
arpackSlv.slvPvtThd = 1.e-6
|
||||
arpackSlv.slvOffset = 0.
|
||||
arpackSlv.slvScale = 1.
|
||||
arpackSlv.sigmaReal = 1
|
||||
arpackSlv.sigmaImag = 1
|
||||
arpackSlv.symPb = False
|
||||
|
||||
# Solve eigen problem.
|
||||
|
||||
@@ -113,4 +122,4 @@ for val, vec in zip(arpackSlv.val, arpackSlv.vec):
|
||||
print("eigen value:", val)
|
||||
print("eigen vector:")
|
||||
for v in range(n):
|
||||
print(vec[v])
|
||||
print(vec[v])
|
||||
Reference in New Issue
Block a user