resueltos - programas en fortran ejemplos
¿Fortran 90/95 biblioteca para matrices dispersas? (1)
Estoy buscando una biblioteca para tratar con matrices dispersas en Fortran 90/95. Solo necesito operaciones muy básicas como la multiplicación matriz-vector. ¿Qué sugieres que use?
He buscado alrededor y una extensión (?) A BLAS llamada "blas dispersa", documentada en el capítulo 3 de la especificación del foro técnico de explosión:
http://www.netlib.org/blas/blast-forum/ ,
parece ideal De acuerdo con ese documento, debería haber una interfaz más fuerte para la biblioteca. Sin embargo, no he podido encontrar una implementación real de esta especificación en ningún lugar que haya podido descargar. Tengo la impresión de que la especificación de blas dispersas de Fortran 95 no se implementa realmente en ninguna parte. No como fuente abierta de todos modos.
También encontré una biblioteca llamada sparsekit:
http://people.sc.fsu.edu/~jburkardt/f_src/sparsekit/sparsekit.html
¿Alguien tiene alguna experiencia con cualquiera de estas dos, o con cualquier otra biblioteca de matriz dispersa para Fortran 90/95? Me gustaría obtener consejos sobre cuál usar, y también dónde obtenerlo (en el caso de sparsekit, el código fuente está disponible a través del enlace de arriba). ¿Hay algo así como un "estándar" para matrices dispersas, como BLAS es para las densas?
Aclamaciones,
Arne
OK, responderé parcialmente mis propias preguntas:
Dónde encontrar una implementación completa de F95 de BLAS disperso fue proporcionado por @alexurba arriba:
http://www.netlib.org/toms/818
¡Eso fue todo! Este script crea todo el código fuente en la carpeta que lo ejecuta (nunca antes había visto software proporcionado de esta manera).
Para que el script INSTALL funcione, tuve que hacer algunos cambios: las instrucciones de instalación le dicen que edite el script INSTALL y elija el "arco" apropiado. Sus opciones son: AIX, ALPHA, CRAY, HP, NAG, SGI y SUN. Ninguno de estos me pareció apropiado, ya que estoy usando Linux y el único compilador de Fortran que tengo en esta computadora es gfortran. No entendí del todo el propósito de esta opción, pero lo que hice fue lo siguiente:
1) En INSTALL, crea un nuevo "arco" al que llamé GNU configurando la variable SB_ARCH = ''GNU''. 2) En SOFTWARE / Makefile cambia FC = f90 a FC = gfortran, 3) En TESTER / copia el archivo Makefile.NAG a Makefile.GNU, cambia FC = f90 a FC = gfortran, y cambia todas las instancias de la palabra ''NAG ''a'' GNU ''. (Probablemente también quiera cambiar la opción FFLAGS en los Makefiles).
Después de esto ejecuté INSTALL, y luego TESTER / test_all, y las pruebas escupieron "0.000 ..." como errores, lo que supongo significa que todo está funcionando.
Debo decir que encuentro que encontrar este código fuente es inusualmente difícil. Afortunadamente, este hilo aparece bastante alto en google cuando se busca "biblioteca de matriz escasa fortran 90" ahora.
Mi solución final: Irónicamente, después de encontrar finalmente una implementación completa de Sparse BLAS he decidido que para mi problema es mejor utilizar un enfoque más directo, ya que todo lo que probablemente necesite es la multiplicación matriz-vector: descubra qué matriz dispersa representación a usar (Compressed Sparse Row (CSR) parece ser apropiado para mi problema), desenterrar la rutina de multiplicación matriz-vector correspondiente del código fuente BLAS disperso, ver cómo quiere que ingrese, y solo usar eso directamente en mi código .