Ubuntu12.04 OpenMPIのインストール

共有メモリを使う並列計算ならばOpenMPが便利ですが、ワークステーションやスーパーコンピュータとなってくると分散メモリなのでMPIが必須になってきます。
インテルの提供するIntel MPIはコンパイラと違って有償なので、フリーで配布されているOpenMPIかMPICHを使用することにします。
ワークステーションでジョブを実行する前に、自分のパソコンでテストランしたいので、パソコンにもMPIを使ったプログラムがコンパイルできる環境を作ります。
ネットの評判を見ていると、OpenMPIの方が安定して動作し、性能も高いみたいです。

OpenMPは、実はapt-getで簡単にインストールできます。

$ sudo apt-get install openmpi-bin openmpi-dev

プログラムのコンパイル

$ mpif90 -o test test.f90

とするとできます。
コンパイルオプションはgfortranと同じです。
ですが、今回はインテルコンパイラが使いたいのでそっちをインストールします。
インテルコンパイラのインストール方法は過去の記事をどうぞ。
Ubuntu12.04 Intel® Parallel Studio XE 2011 for Linuxのインストール - cmphysの日記

インストール

OpenMPIのサイトからダウンロードします。
Open MPI: Open Source High Performance Computing
現在のバージョンは1.6です。
ダウンロードしたファイルはホーム・ディレクトリにおいてください。
これを展開します。

$ tar xzvf openmpi-1.6.tar.gz
$ cd openmpi-1.6

インストール前に、インストール先の指定とコンパイラインテルのものに変更します。

$ ./configure --prefix=/usr/local/openmpi CC=icc CXX=icpc F77=ifort FC=ifort

そしてコンパイル、管理者権限に移ってインストールを実行します。

$ make all
$ sudo su
# source /home/username/.bashrc
# make install

途中でルートに移りますが、インテルコンパイラを使うので、そのパスが入った.bashrcを読み込む必要があります。
usernameはご自身のユーザー名に変更してください。

環境設定

~/.bashrcを開いて、ファイルの最後に次の文を付け加えます。

MPIROOT=/usr/local/openmpi
PATH=$MPIROOT/bin:$PATH
LD_LIBRARY_PATH=$MPIROOT/lib:$LD_LIBRARY_PATH
MANPATH=$MPIROOT/share/man:$MANPATH
export MPIROOT PATH LD_LIBRARY_PATH MANPATH

次に /etc/ld.so.conf.d/ を管理者権限で開いて"openmpi.conf"というファイルを作り、以下の内容を記述します。

/usr/local/openmpi/lib

複数のパソコンをつなげてMPIを使う場合は、ホストの設定が必要です。
ここではこれについては触れませんので、別に調べてください。

コンパイルと実行

コンパイルは、Fortranの場合

$ mpif90 -o test test.f90

C++の場合

$ mpicc -o test test.cc

でできます。
コンパイルオプションの付け方はインテルコンパイラのときと同じです。
MPIで実行する場合は

$ mpirun -np 2 test

-npで指定してるのはプロセスの数です。

参考 http://www.hitachi.co.jp/Prod/comp/hpc/foruser/sr8000/tebiki/mpi_exec.html

Ubuntu12.04 Intel® Parallel Studio XE 2011 for Linuxのインストール

Linux向けの非商用Intel Fortran Compilerのインストール方法です。
FortranC++の両方のコンパイラを含むIntel® Parallel Studio XE 2011 for Linuxのインストールする手順を紹介しますが、FortranコンパイラだけのIntel® Fortran Composer XE 2011 for Linuxも同様の手順でインストールできます。
Fortranの場合はifort、C++の場合はiccコンパイルできます。

準備

まず次のソフトをインストールします。

$ sudo apt-get install build-essential
$ sudo apt-get install gcj-jre

もしかしたらこれらも必要です。

$ sudo apt-get install libstdc++6
$ sudo apt-get install ia32-libs

インストール

Qualify for Free Software | Intel® SoftwareからIntel® Parallel Studio XE 2011 for Linuxをダウンロードします。
ダウンロードの際は、メールアドレスの登録が必要です。
登録したメールアドレスに、シリアル番号とダウンロードファイルのURLが送られてきます。
自分のOSに合わせて32bit版か64bit版をダウンロードしてください。
ダウンロードしたファイルはホーム・フォルダに置いておきます。

まず拾ったファイルを解凍(ファイル名は落としたファイルを見てください)。

$ tar xvzf parallel_studio_xe_2011_sp1_update2_ia32.tgz

そしたらルート権限に変更してインストール実行。

$ cd parallel_studio_xe_2011_sp1_update2_ia32
$ sudo su
# ./install.sh

で、あとは画面の指示に従ってください。

インストールが完了したら、ホーム・フォルダにある .bashrc を開いて、ファイルの最後に以下の行を追加します。
(インストール先のフォルダは自身で確認してください。)

source /opt/intel/composer_xe_2011_sp1.9.293/bin/compilervars.sh ia32

ia32は32bit用のオプションです。64bitの場合は代わりに'intel64'としてください。

これが終わったら、rootから一回ぬけてコマンドラインで再度読み込み

$ source ~/.bashrc

か、もう一回ログインするとOK。
これで毎回コマンドラインから使えるようになります。

$ ifort -v
$ icc -v

でバージョンが表示されたらインストール成功です。

iccコンパイルできない?

試しにiccで簡単なプログラムをコンパイルしようとしても、うまくコンパイルできないことがあります。
エラーメッセージを見ると、bits/predefs.hがないとか言っています。
このpredefs.h、変なところに潜り込んでいて、

$ sudo ln -s /usr/include/i386-linux-gnu/* /usr/include/

とすれば解決します。
これ、早く改善した方がいいと思うんだけど・・・。



追記 2012/10/02
新しくリリースされた XE 2013 では直ってるみたいです。

MKLのコンパイルオプション

このコンパイラにはIntel特製のMath Kernel Libraryというのがついてきます。
この中にはLAPACK&BLASも含まれています。
MKLを使う際のコンパイルオプションの付け方は
Intel® Math Kernel Library Link Line Advisor | Intel® Software
から調べることができます。
出てきたlink line, Compiler optionsで$(MKLROOT)となっているところは

/opt/intel/composer_xe_2011_sp1.9.293/mkl

などと置き換えます。
(MKLの入っているフォルダは自身で確認してください。)

Wannier90でLCAOの跳び移り積分を計算

PWscfとWannier90というソフトを使って、LACO法(Linear Combination of Atomic Orbitals method)で用いられる跳び移り積分の計算を行う。
LCAO法は強束縛法(Tight-binding method)と等価である。

電子のスピンは無視して考える。
サイトiを中心とした軌道\alphaの電子のワニエ型波動関数\phi_{\alpha}({\bf r}-{\bf R}_i)とする。
このときのハミルトニアン\mathcal{H}の行列要素は


t_{i,j}^{\alpha,\beta} = \int d^3 r \, \phi_\alpha^{\ast}({\bf r}-{\bf R}_i) \mathcal{H} \phi_\beta({\bf r}-{\bf R}_j)
で表される。
すなわち、第二量子化の形でハミルトニアンを書くと

\mathcal{H} = \sum_{i,j} \sum_{\alpha,\beta} t_{ij}^{\alpha,\beta} c_{i,\alpha}^\dagger c_{j,\beta}
となる。
ここでc_{i,\alpha}^\daggerはサイトiにある軌道\alphaの電子の生成演算子である。

LCAO法についてはHarrisonのテキストに詳しく、一読の価値がある。

Electronic Structure and the Properties of Solids: The Physics of the Chemical Bond (Dover Books on Physics)

Electronic Structure and the Properties of Solids: The Physics of the Chemical Bond (Dover Books on Physics)

Elementary Electronic Structure

Elementary Electronic Structure


Wannier90のインストール

Wannier90を使うにはPWscfが必要なので、先にインストールしてください。
Ubuntu11.10 Quantum ESPRESSOのインストール - cmphysの日記
以下では、上の手順に従ってインストールしたものとします。
また、Intel Fortran CompilerとMKLはすでにインストールされているものとします。

次のサイトから Wannier90-1.2.tar.gz をダウンロードします。
http://www.wannier.org/download.html
ダウンロードしたファイルをホーム・フォルダにあるespresso-5.0の中に入れて展開し、展開したフォルダ名を'wannier90'とでもしておきます。
フォルダ内の'make.sys'というファイルをテキストエディタで開き、下から二行を自分のMKLの入っているフォルダに合わせて変更します。
ちなみに自分の場合は次の様に変更しました。

LIBDIR = /opt/intel/composer_xe_2011_sp1.7.256/mkl
LIBS = -L$(LIBDIR) -lmkl_lapack95 -lmkl_intel -lmkl_intel_thread -lmkl_core -openmp -lpthread

できたらmakeしましょう。
端末から

$ cd espresso-5.0/wannier90/
$ make all

でしばらく待つとコンパイルが終わります。
ホーム・フォルダにある.bashrcを開いて

export PATH=$PATH:/home/koudai/espresso-5.0/wannier90/

を付け加えます。

Crの跳び移り積分

ここでは、サンプルプログラムの解説をしてもよいのですが、spin-density waveの代表的な物質であるクロム(元素記号:Cr)の跳び移り積分を求めてみましょう。
最初から作るのは面倒なので、 /espresso-5.0/wannier90/examples/example08/ にある同じ遷移金属である鉄のインプットファイルを流用します。
ここから

iron.scf
iron.nscf
iron.pw2wan
iron.win

をコピーして、適当なフォルダ(ここではexamplesの中に'chromium'という名前のディレクトリを作りましょう)に貼り付けます。
ファイル名はironの部分をchromiumに代えてしまいましょう。
ただし、.winのファイルだけは下に出てくるseednameに合わせます。
これとさらに偽ポテンシャルのデータが必要です。
偽ポテンシャルのファイルはQunatum ESPRESSOのウェブサイトからダウンロードできます。
以下のサイトから'Cr.pw91-sp-van.UPF'を手に入れてchromiumディレクトリに一緒に入れてください。
QUANTUMESPRESSO - QUANTUMESPRESSO
これで、chromiumディレクトリに次の5つのファイルが入っているか確認してください。

chromium.scf
chromium.nscf
chromium.pw2wan
cr.win
Cr.pw91-sp-van.UP

以下、各ファイルの設定の説明をします。
詳しい説明はプログラムに添付のマニュアル(~/espresso-5.0/PW/Doc/INPUT_PW.html, ~/espresso-5.0/Wannier90/doc/user_guid/user_guide.tex)などを参照してください。

chromium.scf

電子密度を求めるのに必要なファイルです。

&control
    calculation='scf'
    restart_mode='from_scratch',
    pseudo_dir = './',
    outdir='./'
    prefix='cr'
 /

pseudo_dirは偽ポテンシャルが記述されているファイルのあるディレクトリを指定します。
あとはprefixをcrにしておきます。

 &system
    ibrav = 3, celldm(1) =5.453, nat= 1, ntyp= 1,
    ecutwfc =120.0, nspin = 1, nbnd= 16, ecutrho=800.0
    occupations='smearing', smearing='cold', degauss=0.02
 /

ibravはブラベー格子の種類で、体心立方格子の場合は3です。
他の種類についてはマニュアルを参照してください。
celldm(1)格子定数aです。
ブラベー格子が立方晶系でない場合は、celldm(2)やcelldm(3)も指定する必要があります。
ボーア半径を1とした場合の長さを入れてください。
natは、単位胞(ブラベー格子でない)に含まれる原子の数、ntypは原子の種類の数を指定します。
ecutwfc波動関数を計算する際の運動エネルギーのカットオフをリュードベリで指定します。
ecutofrhoは電子密度を計算する際のカットオフで、ecutwfcの8〜12倍程度にします。
nspinはスピンがオーダーしているかどうかで、常磁性の場合は1です。
nbndはバンドの数です。多めにとっておきます。
occupationsは電子がどのように局在しているかを指定し、smearingであればガウシアンに分布しています。
このガウシアンの拡がり方には種類があり、smearingで指定します。
coldはMarzari-Vanderbilt cold smearing(PRL 82, 3296 (1999))のものを使います。
ガウシアンの拡がりはdegaussで指定します。

 &electrons
    conv_thr = 1.0e-8
 /

conv_thrは自己無撞着に解く際の収束の大きさです。

ATOMIC_SPECIES
 Cr 51.9961 Cr.pw91-sp-van.UPF
ATOMIC_POSITIONS
 Cr 0.0 0.0 0.0
K_POINTS (automatic)
16 16 16 0 0 0

ATOMIC_SPECIESでは原子量と偽ポテンシャルのファイルを指定し、それに'Cr'というインデックスをつけます。
ATOMIC POSITIONSでは単位胞内での各原子の位置を指定します(今は単体のクロムを考えているので楽ですね)。

chromium.nscf

固有エネルギーを求めます。
calculation='nscf'を除いて、K_POINTS {crystal}より上の部分はchuromium.scfと同じように書き換えます。
それと、&systemにnosym=.true.を追加しないと、うまくバンドが表現できないみたいです。

 &system
    ibrav = 3, celldm(1) =5.453, nat= 1, ntyp= 1,
    ecutwfc =120.0, nspin = 1, nbnd= 16, ecutrho=800.0 
    nosym=.true.
    occupations='smearing', smearing='cold', degauss=0.02
 /
chromium.pw2wan

次の様に書き直してください。

&inputpp 
   outdir = './'
   prefix = 'cr'
   seedname = 'cr'
   write_mmn = .true.
   write_amn = .true.
   write_unk = .true.
/
cr.win
num_bands         =   16    
num_wann          =   9

num_bandsはバンドの数、num_wannは軌道の数です。
今考えているクロムは5つの3d軌道と3つの4p軌道と1つの4s軌道の計9つです。

bands_plot         = true
hr_plot            = true
wannier_plot       = true
fermi_surface_plot = true
dis_win_max        = 70.0d0
dis_win_min        = 0.0d0
dis_froz_max       = 25.0d0
dis_num_iter       = 1000
dis_mix_ratio      = 1.0
dis_conv_tol       = 1.0E-10
dis_conv_window    = 3

num_iter           = 1000
conv_tol           = 1.0E-10
conv_window        = 3
mp_grid            = 8 8 8

guiding_centres    = true

ワニエ関数を計算する際の設定です。
多いので詳しくはマニュアルを見てください。
mp_gridは.nscfのファイルに合わせます。

begin atoms_frac
Cr  0.000  0.000  0.000
end atoms_frac

begin projections
Cr:sp3d2;dxy;dxz,dyz
end projections

Fermi_energy     18.4914

projectionは考えるWannier関数の軌道です。
Fermi energyはPWscfでchromium.nscfを実行した際にできるchromium.scf.outの中に書かれている値を使います。

begin kpoint_path  
G 0.0000 0.0000 0.0000	 H 0.500 -0.5000 -0.5000	 
H 0.500 -0.5000 -0.5000	 P 0.7500 0.2500 -0.2500	 
P 0.7500 0.2500 -0.2500	 N 0.5000 0.0000 -0.5000	 
N 0.5000 0.0000 -0.5000	 G 0.0000 0.0000 0.000	 
G 0.0000 0.0000 0.000	 H 0.5 0.5 0.5		 
H 0.5 0.5 0.5		 N 0.5 0.0 0.0		 
N 0.5 0.0 0.0		 G 0.0 0.0 0.0		 
G 0.0 0.0 0.0		 P 0.75 0.25 -0.25	 
P 0.75 0.25 -0.25	 N 0.5 0.0 0.0            
end kpoint_path

バンド図をプロットする際の、k空間の経路です。

begin unit_cell_cart
bohr
 2.7265  2.7265 2.7265
-2.7265  2.7265 2.7265
-2.7265 -2.7265 2.7265
end unit_cell_cart

begin unit_cell_cartには、ボーア半径を単位として、単位胞の基本並進ベクトルを入れます。

以下はそのままにしておきましょう。

プログラムの実行

$ cd chromium
$ pw.x chromium.scf.out
$ pw.x chromium.nscf.out
$ wannier90.x -pp cr
$ pw2wannier90.x chromium.pw2wan.out
$ wannier90.x cr

pw.xとpw2wannier90.xの実行には時間がかかります。

フェルミ面を見たければ

$ xcrysden --bxsf cr.bxsf

で、XcrySDenが起動します。
Band numberの全部にチェックしてやれば、すべてのバンドのフェルミ面が見えます。
(全部のバンドを同時に見るには、タブにある[Merged Bands]を選んでください。)
バンド構造は、GNUPLOTを使って

$ gnuplot cr_band.gnu

とするか

$ gnuplot
> load 'cr_band.gnu'

で見ることができます。

飛び移り積分はcr_hr.datに出力されています。
例えば

   -6    2   -4    1    1    0.003331    0.000000

であれば、格子点から格子点の飛び移りのベクトルを {\bf R} = n_1 {\bf a}_1 + n_2 {\bf a}_2 + n_3 {\bf a}_3 としたときの n_1 = -6, n_2  = 2, n_3 = -4 への軌道1から軌道1への飛び移り積分の大きさの実部が 0.003331 eV、虚部が 0.000000 eV という意味です。

速習 makefileの作り方

Linuxにはmakeという便利な機能があります。
通常ですとプログラムをコンパイルする時は、コンパイルする度にコマンドラインコンパイラ名とソースファイル名とコンパイルオプションと・・・と大変めんどうなのです。
さらに、ある一つのソースファイルを書き換えたとき、すべてをもう一回プログラムをすべてコンパイルし直すのは面倒です。
これを"make"のコマンド一発でやってのけてくれます。
makeを使えば、コマンドラインに面倒くさいオプションを書く必要もなし、更新されたファイルだけを選択的に選んでコンパイルしてくれるので、書き直した時のコンパイル時間の短縮にもなります。
このmakefileの作り方は全く難しいものではなく、一度作ってしまえばあとは使い回すことができます。
今回はFortran90のプログラムの場合を考えますが、C言語にも簡単に応用することができます。

復習 ソースコードから実行プログラムになるまで

この項はプログラミングをある程度慣れ親しんでいる方には常識だと思いますので読み飛ばしてください。

プログラムを書いたコードは、機械語に翻訳しないとコンピュータは理解できません。
Fortran90で書いたコードを機械が読めるように翻訳してやる、これがコンパイルです。
コンパイルをするとオブジェクトファイル(拡張子.o)が完成します。
ところで、ソースコードの書かれたファイルは、普通は一つではありません。
先人の作った便利なプログラム群であるライブラリを読み込む必要も出てきます。
すなわち、それぞれのファイルをコンパイルした後、一つにまとめて実行プログラムにする必要があり、これがリンクです。
実行プログラムは、Windowsですと拡張子として.exeがついたりしますが、特に明示する必要はありません。

すなわち、あなたの書いたソースコード
コンパイル->リンク
の過程を経て、実行プログラムとなります。
以上の過程をまとめてビルドと呼んだりします。

準備

ソースファイルが

main.f90
interface.f90
globals.f90
sub1.f90
sub2.f90

というファイルに分けて書かれているとします。
interface.f90にはインターフェイスモジュールinteface_modが、globals.f90にはグローバル変数モジュールglobalsが書かれているとしましょう。
また、プログラムにはライブラリとしてLAPACK(あるいはIntel MKL)とOpenMPが使われているとします
実行ファイル名は

sample

というにしようと思います。

makefileの準備

ソースコードのあるフォルダに makefile という名前のファイルを作ります。
Linuxディストリビューションによってはファイル名を make とか Makefile とかにしないといけないものもあるみたいです。
makefileをgeditでもEmacsでもなんでもいいから開いて、次の様に入力します。

TARGET = sample
OBJECTS = globals.o interface.o main.o \
	sub1.o sub2.o
MOD_FILES  = globals.mod interface_mod.mod
#FC = gfortran
FC = ifort

FFLAGS =
LDFLAGS =


# for gfortran
ifeq (${FC},gfortran)
	FFLAGS += -fimplicit-none -fbounds-check
	LDFLAGS += -fopenmp -llapack -lblas
endif

# for ifort
ifeq (${FC},ifort)
	MKLROOT = /opt/intel/composer_xe_2011_sp1.7.256/mkl
	FFLAGS += -I${MKLROOT}/include/ia32 -I${MKLROOT}/include
	LDFLAGS += -L${MKLROOT}/lib/ia32 ${MKLROOT}/lib/ia32/libmkl_blas95.a
	LDFLAGS += ${MKLROOT}/lib/ia32/libmkl_lapack95.a
	LDFLAGS += -lmkl_intel -lmkl_intel_thread -lmkl_core -openmp -lpthread -lm
endif


.SUFFIXES : .o .f90
.f90.o:
	${FC} -c $<

${TARGET} : ${OBJECTS}
	${FC} -o $@ ${OBJECTS} ${LDFLAGS} ${FFLAGS} 


.PHONY: clean
clean:
	${RM} ${TARGET} ${OBJECTS} ${MOD_FILES}

文頭に空白がある場合は、スペースキーで空白を作るのではなく、Tabキーで作ることに注意してください。
端末を開いてmakefileのあるフォルダに移動し

$ make

で、プログラムがビルドされます。
また

$ ./sample

でプログラムが実行されます。
ソースコード以外のプログラムのコンパイルの途中に生成されるファイルたちをすべて消したいときは

$ make clean

で削除できます。

makefileの解説

順番に解説していきましょう。

TARGET = sample
OBJECTS = globals.o interface.o main.o \
	sub1.o sub2.o
MOD_FILES  = globals.mod interface_mod.mod

#FC = gfortran
FC = ifort

FFLAGS =
LDFLAGS =

例えば、一番上の TARGET = sample というのは、 TARGET という変数に'sample'という文字列を入れろという意味です。
呼び出す場合は ${TARGET} か $(TARGET) と書きます。
文末にある\マークは改行を意味し、一つの文が長くなりすぎる場合に使います。
また、#はコメント文を表し、その行で#よりも後ろにある文は無視されます。
FCにはコンパイラの種類を入れています。

# for gfortran
ifeq (${FC},gfortran)
	FFLAGS += -fimplicit-none -fbounds-check
	LDFLAGS += -fopenmp -llapack -lblas
endif

gfortranを使う場合です。
FFLAGSにはコンパイル時のオプションやインクルードファイルのパス設定が入ります。
LDFLAGSにはリンク時のオプションやライブラリのパス設定が入ります。

-fimplicit-noneは、ソースコードに出てくる関数にすべてimplicit noneを指定するオプションです。
implicit noneのつけ忘れに効果的です。

また、-fbounds-checkはデバッグ用のオプションで、配列の領域外を参照してないかチェックします。
例えば dimension a(3) で配列aを定義したのに a(4) を使ってないかをチェックします。
デバッグ用のオプションをつけると実行速度がやや落ちるので、実際の計算の際はこのオプションを落としましょう。

デバッグ用のオプションについては以下のページが参考になります。
http://www.rcs.arch.t.u-tokyo.ac.jp/kusuhara/fswiki/wiki.cgi?page=Fortran%A5%C7%A5%D0%A5%C3%A5%B0%CD%D1%A5%AA%A5%D7%A5%B7%A5%E7%A5%F3

# for ifort
ifeq (${FC},ifort)
	MKLROOT = /opt/intel/composer_xe_2011_sp1.7.256/mkl
	FFLAGS += -I${MKLROOT}/include/ia32 -I${MKLROOT}/include
	FFLAGS += -lmkl_intel -lmkl_intel_thread -lmkl_core -openmp -lpthread -lm
	LDFRAGS += -L${MKLROOT}/lib/ia32 ${MKLROOT}/lib/ia32/libmkl_blas95.a
	LDFLAGS += ${MKLROOT}/lib/ia32/libmkl_lapack95.a
	LDFLAGS += -lmkl_intel -lmkl_intel_thread -lmkl_core -openmp -lpthread -lm
endif

今度はIntel Fortran Compilerを使う場合です。
MKL(Math Kernel Library)の場所は人によって違うので確認しておきましょう。
MKLを使う場合のコンパイルオプションの付け方は、以下のページで質問に答えていけば教えてくれます。
Intel® Math Kernel Library Link Line Advisor | Intel® Software

.SUFFIXES : .o .f90
.f90.o:
	${FC} -c $<

一行目でサフィックスルール摘要対象の拡張子を指定します。
サフィックスとは拡張子のことです。
'.SUFFIXES : .o .f90' は、.oを作るときは必ず.f90から作られるよ、という意味です。
三行目がmakeがコマンドラインに代わりに入れてくれる行です。
$<は、前回に.oファイルを作ってから、現在にソースコードが更新されている.f90の拡張子のファイルだけを選択的に選んで挿入してくれる記号です。

${TARGET} : ${OBJECTS}
	${FC} -o $@ ${OBJECTS} ${LDFLAGS} ${FFLAGS}

今度は一行目が${OBJECTS}から${TARGET}を作るよ、という意味です。
$@はターゲットファイル名(:の左側のファイル名)が入ります。


最後に、プログラムをビルドする時にできたファイルたちを一掃するマクロを書いておきます。

.PHONY: clean
clean:
	${RM} ${TARGET} ${OBJECTS} ${MOD_FILES}

こうすると

$ make clean

と入力することで、${TARGET} ${OBJECTS} ${MOD_FILES}のファイルが消えます。
${RM}は定義済みのマクロで、'rm -f'を表します。
Linuxディストリビューションによっては${RM}が使えない場合もありますので、このときは rm -f に置き換えてください。

Ubuntu11.10 Quantum ESPRESSOのインストール

第一原理計算ソフト、Quantum ESPRESSOの導入方法の解説。
そもそもQuantum ESPRESSOとは何か?と言う場合はググってください。
ちなみにWIEN2kと異なり無料です。
使い方のページもそのうち作れたらなぁ、と思っています。

ちなみに、公式のチュートリアルは以下のページで見ることができます。
Quantum ESPRESSO Tutorial

準備

事前に必要なのは、build-essential, gfortran, fftw3-devの三つです。
これをインストールします。
端末を開いて

$ sudo apt-get install build-essential fftw3-dev gfortran

でインストールします。

実行ファイルはgfortranよりもifortで作った方が早いので、そっちを使いたい場合はgfortranの代わりにifortをインストールしてください。
cmphysの日記
ifortのインストールが終わったら、端末で次の様に入力します。

$ sudo apt-get install liblapack-dev fftw-dev

これで準備は終わりです。

Quantum ESPRESSOのインストール

Quantum ESPRESSOのダウンロードは次のページから行います。
qe-forge.org
以下、"espresso-5.0.tar.gz"をダウンロードしたとして話を進めましょう。
ダウンロードしたファイルをホーム・フォルダにおきます。
そして、端末で次の様に入力し、ファイルを展開します。

$ tar -xzvf espresso-5.0.tar.gz

展開できたら、展開先のフォルダに移動して、インストールします。
configureについてるオプションは、デフォルトではMPIを使用することになっているので、それをOpenMPを使うように変更しています。
MPIを使いたい場合はオプションを外します。

$ cd espresso-5.0
$ ./configure --enable-parallel=no --enable-openmp=yes
$ make all

最後の make all はちょっと時間がかかるので根気よく待ちましょう。
途中で

/usr/include/features.h(324): 致命的なエラー: ソース ファイル "bits/predefs.h" を開けません。
#include
^

コンパイルは stack.c で異常終了しました (コード 4)。

と言われる場合があります。
この場合はなんらかの理由で bit/predefs.h がへんなところに行っているので(自分の場合は/usr/include/i386-linux-gnu/に入り込んでた)

sudo ln -s /usr/include/i386-linux-gnu/* /usr/include/

とリンクを貼り、

$ make clean
$ make all

でもう一回コンパイルします。


インストールができたら、.bashrcを書き換えます、
ホーム・フォルダにある.bashrcを開きます。
(ちなみに、Linuxでファイルの最初にピリオドがついているのは隠しファイルで、Ctrl+hで表示できます。もう一回、Ctrl+hで再び隠れます)
このファイルの最後の行の下に以下の文を付け加えます。

export PATH=$PATH:/home/username/espresso-5.0/bin/

ただしusernameは、自分のユーザー名に変更してください。
保存できたら、パソコンを再起動するか、端末に戻って次のように入力します。

$ source ~/.bashrc

以上でインストールは終了しました。
ホーム・フォルダにあるespresso-5.0.tar.gzはもういらないので消しても構いません。


PWguiのインストール

GUI環境でQuantum ESPRESSOを使いたい場合は、PWguiをインストールします。
まず、端末を開き直すか、$ cd と入力してホーム・フォルダに戻ってください。
PWguiにはTcl8.5, iwidgets4の二つが必要です。
すでに入っているが最新バージョンではない場合は、アンインストール後、最新バージョンにインストールしなおしてください。
すでに入っている場合、そのバージョンは

$ sudo dpkg --get-selections | grep tcl
$ sudo dpkg --get-selections | grep iwidgets

で取得できます。
入っていない場合は何も表示されません。
最新バージョンではなかった場合、アンインストールは

$ sudo apt-get purge tclx.x
$ sudo apt-get purge iwidgetsx.x

で行います。xはさきほど取得したバージョン番号に置き換えます。
最新版のインストールは

$ sudo apt-get install tcl8.5 iwidgets4

で行います。

できたら、さきほどと同じページか、PWguiのホームページからダウンロードします。
qe-forge.org
http://www-k3.ijs.si/kokalj/pwgui/download.html
以下、"PWgui-5.0.tgz"をダウンロードしたとして話を進めましょう。
ちなみにPWguiのバージョン番号はESPRESSOのバージョン番号と違っててもいいみたいです。
このtgzファイルを「右クリック->ここに展開する」で展開すると"PWgui-5.0"というフォルダができるので、これをさきほどの"espresso-5.0"というフォルダに入れます。

最後に、ホーム・フォルダの.bashrcを開いて

export PATH=$PATH:/home/username/espresso-5.0/PWgui-5.0/

を、さきほど書いたものの次の行に付け加えてください。
再起動するか

$ source ~/.bashrc

を実行したらインストールは終了です。
コマンドラインから

$ pwgui

と入力して、PWguiが起動すれば成功です。

XCrySDen

XCrySDenは結晶構造などを画像で出力するソフトです。
以下のサイトからダウンロードできます。
最新版はVersion 1.5みたいですが、なぜかインストールできなかったのでVersion 1.4を使いました。
XCrySDen - (X-Window) Crystalline Structures and Densities

ダウンロードしたファイル(例えばxc-1.4.1bin-linuxPC-static.tar.gz)を展開して、espresso-5.0フォルダに'xcrysden'などという名前のフォルダを作って入れておきます。

$ cd
$ cd espresso-5.0/xcrysden/
$ ./xcConfigure

として、後は指示に従ってインストールしてください。
今度は.bashrcに自動的に書き込まれるので

$ xcrysden

と入力して起動したら成功です。

追記

$ sudo apt-get install xcrysden

でもインストールできました。

はてなダイアリーで数式を出す方法

Twitterで何気なくつぶやいたら教えてくれました。
ありがとうございます。

数式を出す方法はいたって簡単で、例えば下のようにかいてやります。
(最初の行のdivなんちゃらは、数式を真ん中に表示させてるだけです。)

<div style="text-align:center">
[TeX:{e^{i\pi} = \cos \pi + i \sin \pi \\ \:\:\:\:\:\: =-1}]
</div>


{e^{i\pi} = \cos \pi + i \sin \pi \\ \:\:\:\:\:\: =-1}

一般のブログに数式を出力するには、下のページのような方法があります。
はてなの標準のだと字がそれなりにきたないので、こちらを使ってもいいかもしれません。
ブログで数式を表示させる方法:Online LaTeX Equation Editorを利用 - とね日記

Ubuntu11.10 TeXworksの導入

今更ながらインストールしました。
TeXworksはLatexのエディタで、ボタン一つでPDFに変換してくれます。

[改訂第5版] LaTeX2e 美文書作成入門

[改訂第5版] LaTeX2e 美文書作成入門

に紹介されていたのですが、初期状態は使い勝手が悪いです。
とりあえず入れるだけ入れて、今後改善していきます。

準備

TeXworksを入れる前に、必要なものをインストールします。
本来はUTF-8に対応しているTeXLive2011を入れたかったのですが、インストールをしようとしてもサーバーの接続が切断されてしまうので、普通のTeXLiveを入れました。

$ sudo apt-get install texlive-latex-extra
$ sudo apt-get install latexmk dvipng
$ sudo apt-get install xpdf gs-cjk-resource
$ sudo apt-get install vfdata-morisawa5 dvi2ps-fontdesc-morisawa5
$ sudo apt-get install cmap-adobe-japan1 cmap-adobe-japan2 cmap-adobe-cns1 cmap-adobe-gb1
$ sudo jisftconfig add

それぞれの詳細についてはJapaneseLocalizedDerivative/LaTeXForJapanese - Ubuntu Japanese Wikiなど参照してください。

これでも、あとはpdfglyphlist.txtとglyphlist.txtが足りないので、ネットからダウンロードしてきます。

$ wget http://www.ring.gr.jp/pub/text/TeX/ptex-win32/current/dvipdfm-w32.tar.xz
$ tar Jxvf dvipdfm-w32.tar.xz
$ cd ./share/texmf/fonts/map/agl/
$ sudo cp -v pdfglyphlist.txt glyphlist.txt /etc/texmf/dvipdfmx

TeXworksのインストール

Ubuntuソフトウェアセンターで「TeXworks」と検索してインストールするか、apt-getを使います。

$ sudo apt-get install texworks

これで一応できましたが、実は日本語でTeXを作る場合にはplatexの設定が必要です。
ホームフォルダーに「pdfplatex.sh」を作り、その中に次のように記述します。

#!/bin/sh
platex $1
dvipdfmx $1

そしてモード設定をしておきます。

$ chmod u+x pdfplatex.sh

この設定が終わったらTeXworksを起動して、

編集->設定->エディタ->エンコーディング

EUC-JPを選択します。
さらに

タイプセット->タイプセットの方法

で、+ボタンをクリックし、次のように設定します。

名前: pdfplatex
プログラム: /home/ユーザー名/pdfplatex.sh
引数: $basename

デフォルトを今設定したpdfplatexにしておくとよいでしょう。
引数については、詳しくはTeXworks · GitHubを参考にしてください。


以上で設定が完了です。
使い方は、ホーム画面の左上にある中に三角が描かれた丸い緑のボタンを押せばPDFに変換されます。
Ctrl+tでもPDFに変換できます。

TeXworksについて、以下のページが参考になります。
TeXworks - TeX Wiki


スペルチェック

スペルチェック辞書ファイルを追加すれば、スペルチェックが行えます。
間違った綴りを書くと、下に赤線を引いてくれる便利な機能です。
スペルチェック辞書は標準で搭載していないので、OpenOfficeThunderbirdのものを流用します(とmanualに書いてあります)。
今回はThunderbirdのものを流用しましょう。

Thunderbirdはインストールされているとします。
次のページから必要な言語のものをダウンロードします。
科学論文用の英語であれば、English(US)です。
スペルチェック辞書と言語パック :: Thunderbird向けアドオン
ダウンロードができたら、Thunderbirdを開いて

ツール->アドオン

でアドオンの画面を開き、右上の「アドオンを検索」の左側にあるスパナとドライバーが交わってX字になっているアイコンをクリックし、「ファイルからアドオンをインストール」を選びます。
そしてさきほどダウンロードしたファイルを選択すれば、インストールが自動的に行われます。

インストールが終わったらホームフォルダーを開いてCtrl+hで隠しファイルを表示します。
English(US)をインストールした場合ですと

~/.thunderbird/hogehoge.default/extensions/en-US@dictionaries.addons.mozilla.org/dictionaries/

の中にen-US.affとen-US.dicという二つのファイルがあるのでこれをコピーします。
hogehogeの部分は人によって違います)

次に、ウインドウの左側にある「ファイルシステム」をクリックして

/usr/share/myspell/dicts/

ルート権限で開いてください。
ルート権限でディレクトリを開くには「OpenAsRoot」などを使います。
http://ubuntuapps.blog67.fc2.com/blog-entry-241.html
このディレクトリにさきほどの2つのファイルをコピーすれば完了です。

TeXworksをすでに開いている場合は再起動して

編集->スペルチェック->en-US

にチェックを入れたらスペルチェックがオンになります。


※追記(20012/08/22)
usr/share に myspell のフォルダがない場合は

$ sudo apt-get install myspell-en-us

でスペルチェッカを取得できます。
上で述べたThunderbirdとか不要です。