Библиотеки Fortran 90/95 для разреженных матриц?
Я ищу библиотеку для работы с разреженными матрицами в fortran 90/95. Мне нужны только очень простые операции, такие как умножение матрицы-вектора. Что вы предлагаете мне использовать?
Я искал вокруг и расширение(?) BLAS называется "sparse blas", документированный в главе 3 спецификации технического форума blast:
http://www.netlib.org/blas/blast-forum/,
кажется идеальным. Согласно этому документу, должен быть интерфейс fortran 95 для библиотеки. Тем не менее, я не смог найти фактическую реализацию этой спецификации в любом месте, которое я смог загрузить. У меня складывается впечатление, что спецификация fortran 95 sparse blas на самом деле нигде не реализована? Во всяком случае, не с открытым исходным кодом.
Я также нашел библиотеку под названием sparsekit:
http://people.sc.fsu.edu / ~jburkardt/f_src/sparsekit/sparsekit.html
У кого-нибудь есть опыт работы с одним из этих двух или любой другой разреженной матричной библиотекой для fortran 90/95? Я хотел бы посоветовать, какой из них использовать, а также где его получить (в случае sparsekit исходный код доступен по приведенной выше ссылке). Есть ли что-то вроде "стандарта" для разреженных матриц, например BLAS для плотных?
спасибо,
Арне
1 ответов
хорошо, я частично отвечу на свои вопросы:
где найти полную реализацию F95 Sparse BLAS, предоставленную @alexurba выше:
http://www.netlib.org/toms/818
вот оно что! Этот скрипт создает весь исходный код в папке, которую вы запускаете (я никогда раньше не видел программное обеспечение, предоставляемое таким образом).
чтобы сценарий установки работал, мне нужно было внести некоторые изменения: инструкции по установке говорят вам отредактируйте сценарий установки и выберите соответствующую "арку". Ваш выбор: AIX, ALPHA, CRAY, HP, NAG, SGI и SUN. Ни один из них не казался мне подходящим, так как я использую linux, и единственный компилятор fortran, который у меня есть на этом компьютере, - gfortran. Я не совсем понял цель этого варианта, но то, что я сделал, работало следующим образом:
1) в INSTALL создайте новую "арку", которую я назвал GNU, установив переменную SB_ARCH='GNU'. 2) в программном обеспечении/Makefile измените FC = f90 на FC = gfortran, 3)в тестере / скопируйте файл Makefile.Ворчать на Makefile.GNU, измените FC = f90 на FC = gfortran и измените все экземпляры слова " NAG " на "GNU". (Вероятно, вы также захотите изменить параметр FFLAGS в Makefiles.)
после этого я запустил INSTALL, а затем TESTER / test_all, и тесты выплюнули "0.000...- как ошибки, которые, я полагаю, означают, что все работает.
Я должен сказать, что нахожу этот исходный код необычайно сложным. К счастью, эта нить довольно высоко поднимается в google при поиске "Fortran 90 sparse matrix library".
мое окончательное решение: по иронии судьбы, после того, как я, наконец, нашел полную реализацию Sparse BLAS, я решил, что для моей проблемы лучше использовать более прямой подход, так как все, что мне, вероятно, понадобится, это умножение матрицы-вектора: выяснить, какое разреженное матричное представление использовать (сжатая разреженная строка (CSR), кажется, подходит для моей проблемы), выкопать соответствующую матрицу-вектор процедура умножения из разреженного исходного кода BLAS, посмотрите, как он хочет его ввода, и просто используйте это непосредственно в моем коде.