DAKOTA というのは、今年辺り、そろそろブレークするかもしれないオープンソースの最適化ツール。次回のオープンCAE勉強会@岐阜でも紹介があるようです。
管理人も数年前に触って以来なので、最新版を試してみようとしました。しかしLinux版のバイナリはredHat用しかリリースされておらず、DEXCS2012(OSはMint13/ubuntu-12.04)上では動かなかったので、インストールに挑戦。一筋縄でいかなかったので、ここに要点を記しておくことにしました。
インストールの基本はソースコードに同梱のINSTALLというメモ
0) Install CMake 2.8.4 (or later) and ensure it is in your $PATH
1) gunzip Dakota_releasename.src.tar.gz
2) tar xvf Dakota_releasename.src.tar
3) mkdir BuildDakota; cd BuildDakota
4) export PATH=$PATH:.
5) cmake [cmake options] ../Dakota
* generate platform-specific Makefiles with cmake
* see NOTE below regarding specifying location of Boost
6) make [-j#]
* DAKOTA supports concurrent build processes
7) make install
* optional: requires write privilege in CMAKE_INSTALL_PREFIX
(see “Source Installation Options” below).
があるので、その通りにやるだけ(但し最後のmake install はルート権限でやる必要あるのと、ライブラリが新たに加わるので、sudo ldconfig も必要)。コンパイル時間も数10分で済むものでしたが、事前に準備しておくものがたくさん必要でした。
事前に必要なもの
- gfortran
- Boost
- BLAS/LAPACK
gfortran
これは普通に
$ sudo apt-get install gfortran
または、パッケージマネージャからインストールするだけでOK
Boost
そもそも、Boost って何?の説明があって欲しかったのですが、そこは単に、
================================
Source Installation Dependencies
================================To build DAKOTA with all possible packages, some platform-dependent
software dependencies exist. These include
* Boost (required)
* Message Passing Interface (MPI) library (optional)
* Basic Linear Algebra Subprograms (BLAS) (required)
* Linear Algebra PACKage (LAPACK) libraries (required)
* X11 and Motif graphics libraries (optional)
* Fortran90 compiler (optional)
と記してあるだけで、何のことやら? でしたが、そこはググって調査。
参考サイト より
1998年に、最初のC++言語の国際規格が誕生しました。その規格に採用されたライブラリがいわゆる「C++標準ライブラリ」です。しかしこのとき、さ らに強力な標準ライブラリを求めて、標準化委員会のメンバー達が新しいプロジェクトを立ち上げました。それが Boost です。
ダウンロードは、こちら
ビルド方法は、こちら
$ cd boost_1_52_0
$ ./bootstrap.sh
$ sudo ./b2 install -j2
上記実行すると、
…on 10600th target…
common.copy /usr/local/lib/libboost_wave.a
…failed updating 2 targets…
…skipped 6 targets…
…updated 10598 targets…
となって、途中一部error があったようですが、多分、大勢に影響はなさそうです。
BLAS/LAPACK
これらはAlgebla Package ということで、CAEをやっている人間にとって、少しは馴染みがあるものですねぇ。しかし、そのインストール方法は自力で調べるしかありませんで、ここで嵌りました。インストール方法を記したサイトは簡単に見つかりました(たとえば、こちらのサイト)が、スタティックライブラリの作り方が書いてあって、これだと後のDAKOTAをmakeする時に、訳のわからないエラーで止まってしまうのでした。
/usr/bin/ld: /usr/lib/gcc/x86_64-linux-gnu/4.6/../../../../lib/libblas.a(sgemv.o): relocation R_X86_64_32 against `.rodata’ can not be used when making a shared object; recompile with -fPIC
/usr/lib/gcc/x86_64-linux-gnu/4.6/../../../../lib/libblas.a: could not read symbols: Bad value
collect2: ld はステータス 1 で終了しました
make[2]: *** [packages/teuchos/src/libteuchos.so] エラー 1
make[1]: *** [packages/teuchos/src/CMakeFiles/teuchos.dir/all] エラー 2
make: *** [all] エラー 2
このエラーメッセージでググると、どうやらライブラリがlibblas.aでは駄目で、libblas.soにしなさいということらしく、それがダイナミックライブラリということ。これを作るには、コンパイルオプションを、-fPIC にせにゃならんということなんだが、Makefileのどこをどう変えるかが、素人にはたいへんな試行錯誤でした。
で、なんとか出来たんですが、Linux Mint13 の元々のシステム(/usr/lib)を眺めていたら、libblasも、liblapackも既に入っていたじゃありませんか!単に、名前がちょっと違っていた為、コンパイラが認識できていなかっただけ。シンボリックリンクを作成してすんなり通りました。。。という顛末。
$ sudo ln -s /usr/lib/libblas/libblas.so.3gf.0 /usr/lib/libblas.so
$ sudo ln -s /usr/lib/liblapack.so.3gf /usr/lib/liblapack.so
$ sudo ldconfig
以上、お粗末でした。