2012-09-08 18 views
13

Sto cercando una libreria per gestire matrici sparse in fortran 90/95. Ho solo bisogno di operazioni molto semplici come la moltiplicazione di matrice vettoriale. Cosa suggerisci di usare?Libreria Fortran 90/95 per matrici sparse?

Ho cercato in giro e una proroga per BLAS chiamati "blas sparsi", documentati nel capitolo 3 della specifica tecnica scoppio forum (?):

http://www.netlib.org/blas/blast-forum/,

sembra l'ideale. Secondo questo documento, dovrebbe esserci un'interfaccia fortran 95 nella libreria. Tuttavia, non sono stato in grado di trovare un'implementazione effettiva di questa specifica ovunque potessi scaricare. Mi sembra di avere l'impressione che la specifica spettrale fortran 95 non sia realmente implementata da nessuna parte? Non come open source comunque.

Ho anche trovato una libreria chiamata sparsekit:

http://people.sc.fsu.edu/~jburkardt/f_src/sparsekit/sparsekit.html

Chiunque ha alcuna esperienza con uno di questi due, o di qualsiasi altra libreria matrice sparsa per FORTRAN 90/95? Vorrei consigli su quale usare e anche dove trovarlo (nel caso di sparsekit il codice sorgente è disponibile attraverso il link sopra). C'è qualcosa di simile a uno "standard" per matrici sparse, come BLAS è per quelli densi?

Cheers,

Arne

+0

F95, essendo una revisione minore della lingua, spesso va sotto F90. È passato un po 'di tempo da quando ho fatto qualcosa con matrici di grandi dimensioni, ma questo sembra essere http://people.sc.fsu.edu/~jburkardt/f_src/blas2/blas2.html la versione F90. – Rook

+0

Grazie Idigas, ma non penso sia così. A me sembra, quello a cui si sta collegando è la libreria BLAS, e che "sparse blas" non fa parte di questo. Ad esempio, dovrebbe esserci una subroutine (secondo la specifica) chiamata "duscr_begin" (o possibilmente "blas_duscr_begin"), che è la sub che usi per inizializzare una matrice sparsa, che non ho trovato da nessuna parte nella libreria BLAS. Ho persino scaricato tutti i file da http://www.netlib.org/sparse-blas/index.html e ho fatto "grep -i duscr_begin * .f" senza fortuna. L'ho trovato molto confuso. – arne

+0

Ah, potrebbe essere. L'ho solo guardato frettolosamente l'ultima volta. – Rook

risposta

12

OK, risponderò in parte le mie domande:

Dove trovare un'implementazione f95 pieno di Sparse BLAS è stato fornito da @alexurba sopra:

http://www.netlib.org/toms/818

Proprio così! Questo script crea tutto il codice sorgente nella cartella in cui viene eseguito (non ho mai visto il software fornito in questo modo prima).

Per fare in modo che lo script INSTALL funzioni, è necessario apportare alcune modifiche: Le istruzioni di installazione indicano di modificare lo script INSTALL e scegliere l'appropriato "arch". Le tue scelte sono: AIX, ALPHA, CRAY, HP, NAG, SGI e SUN. Nessuno di questi mi è sembrato appropriato, visto che sto usando linux e l'unico compilatore fortran che ho su questo computer è gfortran. Non ho capito lo scopo di questa opzione, ma quello che ho fatto è stato il seguente:

1) In INSTALL, creare un nuovo "arco" che ho chiamato GNU impostando la variabile SB_ARCH = 'GNU' . 2) In SOFTWARE/Makefile cambia FC = f90 in FC = gfortran, 3) In TESTER/copia il file Makefile.NAG in Makefile.GNU, cambia FC = f90 in FC = gfortran e cambia tutte le occorrenze della parola 'NAG 'a' GNU '. (Probabilmente vorrai anche cambiare l'opzione FFLAGS nei Makefile.)

Dopo questo ho eseguito INSTALL, e poi TESTER/test_all, ei test sputano "0.000 ..." come errori, che presumo significa che tutto funziona.

Devo dire che ho trovato trovare questo codice sorgente particolarmente difficile. Fortunatamente questo thread appare piuttosto su google quando si cerca "fortran 90 sparse matrix library" ora.

La mia soluzione finale: Ironia della sorte, dopo aver finalmente trovare una piena attuazione della Sparse BLAS ho deciso che per il mio problema è meglio utilizzare un approccio più diretto, poiché tutto io probabilmente bisogno è la moltiplicazione matrice-vettore: Figura la rappresentazione di matrice sparsa da usare (Compressed Sparse Row (CSR) sembra essere appropriata per il mio problema), scavare la corrispondente routine di moltiplicazione di matrice-matrice dal codice sorgente Sparse BLAS, vedere come lo vuole input, e basta usare quello direttamente nel mio codice.

+0

Sono nel punto in cui _e i test sputano "0.000 ..." come errori, che presumo significano che tutto funziona_. Ora, come usare questa libreria (o librerie?) Dove ho bisogno di loro? Quali file devo copiare nella directory contenente i miei programmi? –

Problemi correlati