CNS 1.1インストールメモ -- Vine 4/Vine 3
Intel Compilerを使ってCNSをコンパイル、インストールしました*1。ついでにパッチを作りました。
インストール方法
ここではインストール先は/usr/local/cns_solve_1.1にしました。
aptで追加インストール
- flex
ファイルの展開
/usr/local以下に以下のファイルを展開
- cns_solve_1.1_basic_inputs.tar.gz
- cns_solve_1.1_data.tar.gz
- cns_solve_1.1_test.tar.gz (これは好みで)
- cns_solve_1.1_Vine-3.2_Intel-9.0.patch インストール用パッチ
- instlib/machine/supported/linux/Makefile.headerをIntel Compiler用に書き換え
- cns_solve_envのsedオプションを修正
- source/xpeakpik.fの不具合を修正
/usr/localでパッチを当てます。
# cd /usr/local # patch -p0 < cns_solve_1.1_Vine-3.2_intel-9.0.patch # cd /usr/local/cns_solve_1.1
以降の作業は/usr/local/cns_solve_1.1で行いました。
cns_solve_envの編集
cns_solve_envを編集。通常は、
18 setenv CNS_SOLVE '_CNSsolve_location_'
の_CNSsolve_location_を環境に合わせて修正します。
18 setenv CNS_SOLVE '/usr/local/cns_solve_1.1'
インストール
# tcsh (tcshで作業) # source /opt/intel/cc/9.0/bin/iccvars.csh (C++環境設定) # source /opt/intel/fc/9.0/bin/ifortvars.csh (Fortran環境設定) # source cns_solve_env # make install
で終わりです。Intel Compilerでコンパイルされます。
linking: cns_solve created executable file cns_solve-0606121008.exe
と出力されれば実行ファイルはできているはずです。
備考
インストール出力の最後の方に
compiling: machine_c.c machine_c.c(100): warning #880: omission of explicit type is nonstandard ("int" assumed) outbuf_() ^
という警告が最後に出ますが、どうやらインストールはできているような気がします・・・
CNSでの既知の不具合
以下の不具合をパッチで修正してあります。
cns_solve_envでsedが通らない
構造生物グループMLより:
インストール自体は問題なく行ったのに、環境変数ファイルcns_solve_env にsourceを貼ると sed: -e expression #1, char 11: Invalid range end と表示されました。cnsbbによると、FedoraやRedhatEnterprise2から 現れた問題のようで、SEDのオプション仕様が変更されたことが原因の ようです。そこで、インストール前にcns_solve_envファイルとgetarch ファイルの以下の部分を次のように変更します。 sed 's/[A-z] => sed 's/[A-Z,a-z] cns_solve_envには2箇所、getarchには1箇所の変更箇所があります。 そうすると問題なしです。
Vineでは特に影響を受けませんでしたが、ついでだったのでパッチに取り込みました。
CNSにおいてwater_pickができない
構造生物グループMLより:
私的にはもう一つ気になっている問題がありました。自分の使用している FC3のDual Xeon PCでは、cnsのwater_pickで水が拾えない(no water residue となる)ことがしばしばあって困っていました。仕方ないので、もう一台の Athlon64 PCの方で拾わせていました。これもどうやら最近出てきた問題の ようで、メモリを3GB以上積むと発現することがあるとcnsbbに出てました。 対応策は以下の通りだそうです。 $ vi $cns_solve_1.1/source/xpeakpik.f 145行目:IF (MPACK.GT.0) THEN => IF (MPACK.NE.0) THEN と変更してからmake g77installすれば良いようです。
私の環境ではメモリ2GBで再現したのでGCCのバージョンにも依存するのかも知れません。以上のように修正してmakeしたら問題は解決できました