2012-09-08 44 views
13

私はfortran 90/95で疎行列を扱うためのライブラリを探しています。私は行列 - ベクトル乗算のような非常に基本的な演算しか必要としません。私は何を使用することをお勧めしますか?スパース行列のFortran 90/95ライブラリ?

私の周りで検索しましたとBLASへの拡張は爆風技術フォーラムの仕様書の第3章に記載 "スパースBLASを" と呼ばれる(?):

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

は理想的なようです。そのドキュメントによると、ライブラリへのFortran 95インタフェースが存在するはずです。しかし、私はこの仕様の実際の実装をどこでもダウンロードすることができませんでした。私は、Fortran 95の疎なblas仕様が実際にどこにも実装されていないという印象を得ていますか?とにかくオープンソースとしてではありません。

私もsparsekitと呼ばれるライブラリが見つかりました:

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

は、誰もがこれらの二つのうちの一つ、またはFortran 90/95のために、他の疎行列ライブラリのいずれかの経験を得ましたか。私はどちらを使うべきか、そしてどこから入手するのかアドバイスが欲しいです(sparsekitの場合、ソースコードは上記のリンクから入手できます)。 BLASのような疎なマトリックスのための「標準」のようなものはありますか?

乾杯、

アルネ

+0

F95は、言語のマイナーリビジョンであり、しばしばF90になります。私は大きな行列を使って何かをしてからしばらくしていますが、これはF90バージョンのhttp://people.sc.fsu.edu/~jburkardt/f_src/blas2/blas2.htmlのようです。 – Rook

+0

ありがとうございました。しかし、それはそれだとは思いません。あなたにリンクしているのはBLASライブラリで、 "希薄なblas"はその一部ではないと私は思えます。たとえば、 "duscr_begin"(またはおそらく "blas_duscr_begin")というサブルーチンがあります。これはBLASライブラリのどこにもない疎行列を初期化するのに使うサブクラスです。私はhttp://www.netlib.org/sparse-blas/index.htmlからすべてのファイルをダウンロードし、 "grep -i duscr_begin * .f"を実行しました。私はそれが非常に混乱していることが分かった – arne

+0

ああ、そうかもしれない。私は最後に急いでそれを見ました。 – Rook

答えて

12

OK、私は部分的に私自身の質問にお答えします:

:上@alexurbaによって提供されたスパースBLASの完全なf95の実装を見つけるために

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

それでした!このスクリプトは、あなたがそれを実行するフォルダ内のすべてのソースコードを作成します(これまでにこの方法で提供されたソフトウェアは見たことがありません)。

INSTALLスクリプトを動作させるには、いくつかの変更が必要でした。インストール手順では、INSTALLスクリプトを編集し、適切な「アーチ」を選択するよう指示されています。選択肢は、AIX、ALPHA、CRAY、HP、NAG、SGI、SUNです。私はlinuxを使用しているので、これらのどちらも私には適切ではないと私はこのコンピュータ上で持っている唯一のfortranコンパイラはgfortranです。

1)INSTALLでは、変数「SB_ARCH = 'GNU'」を設定してGNUと呼ばれる新しい「アーチ」を作りました。このオプションを使用すると、 。 2)SOFTWARE/MakefileでFC = f90をFC = gfortranに変更する3)TESTERでMakefile.NAGファイルをMakefile.GNUにコピーし、FC = f90をFC = gfortranに変更し、NAG 'から' GNU 'へ。 (おそらく、MakefilesのFFLAGSオプションも変更したいと思うでしょう)。

これでINSTALLとTESTER/test_allが実行され、テストで「0.000 ...」というエラーが出てしまいました。すべてが機能していることを意味します。

私は、このソースコードが異常に困難であることが判明しました。幸いなことに、このスレッドはGoogleで「Fortran 90スパース行列ライブラリ」を検索するときわめて高くなります。

最終的な解決策:皮肉なことに、最終的にSparse BLASの完全な実装を見つけた後、おそらく行列 - ベクトル乗算が必要なので、より直接的なアプローチを使用する方が良いと判断しました。どのようなスパース行列表現を使用するか(Compressed Sparse Row(CSR)は私の問題に適しているようです)、Sparse BLASソースコードから対応する行列 - ベクトル乗算ルーチンを掘り出し、入力方法を見て、私のコードで直接。

+0

私はテストが「0.000 ...」というエラーを吐き出し、すべてがうまくいっていると思います。今、私はそれらを必要とするところで、このライブラリ(またはライブラリ?)を使う方法を教えてください。自分のプログラムを含むディレクトリにコピーするファイルはどれですか? –

関連する問題