超音波流体屋のプログラム備忘録

Lapack

最終更新:

usapfrog

- view
管理者のみ編集可
Fortran環境下で連立方程式を
WindowsならMinGW前提で。

インストール

linuxならrpm等から、WindowsはOctaveのディレクトリの中にあるのを流用する、
MacはXcodeのDeveloper's kitについてくるveclibが流用できる。
[Windows]
dllがあるフォルダ"C:\Octave\Octave3.6.4_gcc4.6.2\bin"にパスを通しておき
その際liblapackがlibopenblasを求めるくせに無いので、
libblas.dllを複製してlibopenblas.dllとし、同フォルダにおいておく。

リンク

Eclipse Photranを使っているなら
[Windows]
プロジェクトのプロパティ→Fortran Build→設定
ツール設定タブ→Fortran Linker→ライブラリで
ライブラリ(-l)にlapackとblasを登録、
下の検索パス(-L)に C:\Octave\Octave3.6.4_gcc4.6.2\bin を登録する。

[Mac]
プロジェクトのプロパティ→Fortran Build→設定
ツール設定タブ→Fortran Linker→その他で
リンカー・フラグに -Wl,-framework -Wl,Accelerate を登録する。
参考: MacWiki-数値計算

[linux]
オプションは-llapackだけでよい。
/usr/local/liblapack.so のシンボリックリンクが存在するか確認し、
なければ周囲のliblapack.so.3などにリンクを貼る。

Linux環境下でIntel Fortran付属のmklを使う場合

ライブラリ(-l)指定は以下の通り
mkl_intel_lp64
mkl_intel_thread
mkl_core
mkl_def
mkl_lapack95_lp64
mkl_blas95_lp64
iomp5
pthread
検索パス(-L), LD_LIBRARY_PATHに登録しておくこと
/opt/intel/lib/intel64
/opt/intel/mkl/lib/intel64

ついでに、以下のコンパイラエラーが出るときは
undefined reference to `__intel_new_feature_proc_init' and _intel_fast_memmove
/etc/bashrc の以下の記述が原因なのでコメントアウトする
# source /opt/intel/composer_xe_2011_sp1.6.233/bin/compilervars.sh intel64

ソース

各関数はhttp://www.netlib.no/netlib/lapack/double/あたりをみて把握する。
f95式で呼び出したかったらOctaveのを流用しないで自分でコンパイルすること。
魔法陣行列。useとかは不要。

  1. program gesvtest
  2. implicit none
  3. integer,parameter :: n=3
  4. integer :: i, info
  5. integer :: ipiv(n)
  6. real(8) :: A(n,n), b(n)
  7.  
  8.  
  9. A(1,1:3) = (/ 8.0d0, 1.0d0, 6.0d0 /)
  10. A(2,1:3) = (/ 3.0d0, 5.0d0, 7.0d0 /)
  11. A(3,1:3) = (/ 4.0d0, 9.0d0, 2.0d0 /)
  12.  
  13. print *, "A="
  14. print "(3f6.3)", (A(i, :), i=1,n)
  15.  
  16. b(1:3) = (/ 1.0d0, 1.0d0, 1.0d0/)
  17. print *, "b="
  18. print "(f12.6)", b
  19.  
  20. call dgesv(n, 1, A, n, ipiv, b, n, info)
  21. print *, "x="
  22. print "(f12.6)", b
  23. end program gesvtest
  24.  

結果

A=
8.000 1.000 6.000
3.000 5.000 7.000
4.000 9.000 2.000
b=
   1.000000
   1.000000
   1.000000
x=
   0.066667
   0.066667
   0.066667

目安箱バナー