2015年8月5日水曜日

LAMMPSをシングルプロセッサで動かす

LAMMPSやLIGGGHTSをシングルプロセッサで動かす方法について以下に書き記す
(要は並列計算しないでLAMMPSでシミュレーションする方法についてである)

まず、LAMMPSやLIGGGHTSをダウンロードしたものとして話を進める

また、シングルプロセッサでシミュレーションをする時も、
mpirunというコマンドを使えるようにopenmpiをダウンロードしておくべきであるが、
ここでは、openmpiをもうダウンロードしたものとして話を進める。
(openmpiのダウンロードについてはいろんなサイトで詳しく書かれている)

-----------
sponsored link
-----------


1. cd ~/LAMMPS or LIGGGHTS-PUBLIC/src/MAKEでsrcディレクトリ内のMAKEディレクトリに入る
(versionにより違うかもしれないので、srcディレクトリを探して、その中にMAKEディレクトリがあるかを確認する)

2.lsをしてMakefile.serialファイルを探す。そして、中身を見てみる。すると、g++と書いてある

3.c++をg++で動かせるかを確認する。
(g++とターミナルで打ってno input filesやファイルが入力されてませんと出たらok
ただ、command not foundやコマンドが見つかりませんと出たらg++を使えるように
ダウンロードをする)

4.srcディレクトリに戻って、そこにSTUBSディレクトリがあることを確認する

5.srcディレクトリでmake serialとコマンドを打つと、文字がざざざざと出て、
lmp_serialというファイルがsrcディレクトリ内にできる。

6.STUBSディレクトリ内に入ってmakeと打つ。もしくは、srcディレクトリ内でmake stubsと打つ。
(自分の古いバージョンではmake stubsと打てばいいけど、他のバージョンでは、make mpi-stubs
と打つ必要がある。実は、LAMMPSのdocディレクトリ内にあるManual.pdf内に今までのこと書いてあるので、それを参考にした方がいい。pdf内でstubsと検索をして、その周辺の英文を読めばいい。)
(これを忘れるとシングルプロッセサでシミュレーションできない)

7.lmp_serialを自分がシミュレーションしたいディレクトリに移動させて、
そのディレクトリで mpirun -np 1 lmp_serial < in.なんとか
とコマンドを打つとシミュレーションができる、もしくは、in.なんとかの記述がおかしいとか
出たら成功である。
(ちなみに-np 1 はプロセッサ1つでシミュレーションするという意味である。)
(exampleディレクトリ内に様々なディレクトリがあり、その中にin.なんとかファイルがあるので、それを使ってシミュレーションをしてみればいい)

8.Make.serialファイルのファイル名をMake.fooと書き換えて、
ファイル内の# serial = RedHat Linux box, g++4, no MPI, no FFTs の部分を
# foo と書き直してsrcディレクトリでmake fooと打つと、lmp_foo ファイルができる。
それを使ってもシミュレーションができる。
(バージョンによってはできないかもしれない)

-----------
sponsored link
-----------




僕がシングルプロセッサでやる理由は、マルチプロセッサがないというのもあるが、
grainタイプのシミュレーションをマルチプロセッサで行うと不都合なことが
起きたからである。

マルチプロセッサは複数のプロセッサがあり、それぞれのプロセッサに粒子が入っているが、Aというプロセッサに入っている粒子とBというプロセッサに入っている粒子は互いに力を及ぼさないのである。(今はもう改善されているかもしれないけど)

そうすると、シミュレーション結果がむちゃくちゃな結果となってしまう。

grainタイプ以外にもそういう問題が起きるかもしれない。
マルチプロセッサで問題が起きるかどうかは、in.なんとかファイル内に
newton onという記述を入れて、newton onの部分でerrorが出れば、
マルチプロッセサでやるべきではない。

ちなみにnewton onはAというプロセッサ内にあるatomとBというプロセッサ内にある粒子の間の力の相互作用を計算するという意味である。



0 件のコメント:

コメントを投稿