超音波流体屋のプログラム備忘録
Lapack
最終更新:
usapfrog
-
view
Fortran環境下で連立方程式を
WindowsならMinGW前提で。
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とし、同フォルダにおいておく。
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 を登録する。
[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-数値計算
プロジェクトのプロパティ→Fortran Build→設定
ツール設定タブ→Fortran Linker→その他で
リンカー・フラグに -Wl,-framework -Wl,Accelerate を登録する。
参考: MacWiki-数値計算
[linux]
オプションは-llapackだけでよい。
/usr/local/liblapack.so のシンボリックリンクが存在するか確認し、
なければ周囲のliblapack.so.3などにリンクを貼る。
オプションは-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とかは不要。
f95式で呼び出したかったらOctaveのを流用しないで自分でコンパイルすること。
魔法陣行列。useとかは不要。
- program gesvtest
- implicit none
- integer,parameter :: n=3
- integer :: i, info
- integer :: ipiv(n)
- real(8) :: A(n,n), b(n)
-
-
- A(1,1:3) = (/ 8.0d0, 1.0d0, 6.0d0 /)
- A(2,1:3) = (/ 3.0d0, 5.0d0, 7.0d0 /)
- A(3,1:3) = (/ 4.0d0, 9.0d0, 2.0d0 /)
-
- print *, "A="
- print "(3f6.3)", (A(i, :), i=1,n)
-
- b(1:3) = (/ 1.0d0, 1.0d0, 1.0d0/)
- print *, "b="
- print "(f12.6)", b
-
- call dgesv(n, 1, A, n, ipiv, b, n, info)
- print *, "x="
- print "(f12.6)", b
- end program gesvtest
-
結果
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