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.