SLEPC
hledání vlastních hodnot rozsáhlých matic
Základní dokumentaci najdete zde:
http://slepc.upv.es/documentation/manual.htm
Je zde i odkaz na tutoriály, z nichž pro zobecněný problém je užitečný [příklad 7]
Konkrétně na cuda.physics.muni.cz jde o
/usr/lib/slepc-3.6.1/src/eps/examples/tutorials/ex7.c
pro kompilaci nastavíme
export SLEPC_DIR=/usr/lib/slepc-3.6.1
export PETSC_DIR=/usr/lib/petsc-3.6.2
a v Makefile se použije tato konstrukce
include ${SLEPC_DIR}/lib/slepc/conf/slepc_common
EX7: ex7.o chkopts
-${CLINKER} -o eps_ex7 ex7.o ${SLEPC_LIB}
Jeden z příkladů lze použít pro konverzi z MatrixMarket formatu
/home/munz/inst/slepc/ex72_own.c se přeloží stejným způsobem jako výše...
a volá se
ex72_own -fin matA.mtx -fout matA.petsc
konvertovat do/z binárního formátu lze i pomocí Pythonu
import scipy.io, PetscBinaryIO
A = scipy.io.mmread('H_FEM_A.mtx')
PetscBinaryIO.PetscBinaryIO().writeMatSciPy(open('H_FEM_A.petsc','w'), A)
B = scipy.io.mmread('H_FEM_B.mtx')
PetscBinaryIO.PetscBinaryIO().writeMatSciPy(open('H_FEM_B.petsc','w'), A)
Příslušný modul PetscBinaryIO najdete v adresáři /usr/lib/petsc-3.6.2/bin .
Ostatní odkazy, zkompilované binárky i makefile můžete dohledat v /home/munz/inst/slepc.
Volání probíhá
./eps_ex7 -f1 mat_A.petsc -f2 mat_B.petsc -eps_nev 20 -evecs orbital.petsc
kde parametr eps_nev udává počet (největších) vlastních čísel a orbital.petsc obsahuje vlastní vektory (v PETSC formatu.