基本操作
** 配布物
LAMMPS 配布パッケージを unzip/untar すると、以下のディレクトリが展開されます。
src = LAMMPS のソースファイル
doc = HTML ドキュメント
examples = 入出力付きサンプル問題
tools = LAMMPS 用データファイルを生成・加工するシリアルプログラム
converters = msi2lmp, lmp2arc, amber = MSI/Discover、AMBER、LAMMPS 形式間を変換するコードとスクリプト
** LAMMPS のビルド
src ディレクトリには LAMMPS の F90 および C ソースファイルと、複数のマシン向けサンプル Makefile が含まれます。特定のマシン用に LAMMPS をビルドするには、src ディレクトリ内で
make machine
と入力します(例:「make sgi」や「make t3e」)。これにより lmp_sgi や lmp_t3e といった実行ファイルが生成されます。最適な性能を得るには、良質な F90 コンパイラを使用するのが望ましいです。Linux マシンでは Leahy F90 コンパイラが良い選択だと聞いています。(F90 コンパイラを持っていない場合、古い F77 ベースの LAMMPS 99 を提供できますが、動的メモリや LAMMPS 2001 の新機能の一部は利用できません。)
src ディレクトリにはトップレベルの Makefile が 1 つと、Makefile.xxx(xxx = マシン名)という複数のマシン固有の低レベル Makefile が含まれます。対象プラットフォーム用の低レベル Makefile が存在する場合、トップレベル Makefile を編集する必要はありません。ただし、低レベル Makefile のシステム固有セクションで、各種パスが環境に適合していることは確認してください。対象プラットフォーム向けの低レベル Makefile が存在しない場合は、トップレベル Makefile にターゲットを追加し、既存のものを参考に新しい低レベル Makefile を作成します。MPI ライブラリがインストールされていない単一プロセッサのワークステーション向けに LAMMPS をビルドする場合は、「serial」ターゲットを指定できます(例:「make serial」)。その際は、事前に STUBS ディレクトリで「make」を実行し、ワークステーション用のスタブライブラリを作成しておく必要があります。
2 段階の Makefile 構成により、複数のプラットフォーム向けに LAMMPS をビルドできます。各ターゲットは独自のオブジェクトディレクトリを作成し、*.o ファイルを別々に保存します。
低レベル Makefile では、いくつか注目すべきコンパイラオプションが指定できます。F90FLAGS に -DSYNC を設定すると、integrate.f 内のタイミングルーチンの前に同期呼び出しが挿入されます。若干コードが遅くなる場合がありますが、実行終了時に報告される個別タイミングの精度が高まります。F90FLAGS を -DSENDRECV にすると、データ交換に MPI_Irecv、MPI_Send、MPI_Wait の代わりに MPI_Sendrecv を使用します。Sendrecv は遅くなる場合が多いものの、プラットフォームによっては高速になることもあるため、通信が遅いと感じたら試す価値があります。
低レベル Makefile の CCFLAGS には FFT の指定が必要です(例:-DFFT_SGI や -DFFT_T3E)。これは、各プラットフォームのネイティブな 1 次元 FFT ライブラリを取り込むためです。現在サポートされているマシンとスイッチ(fft_3d.c 内で使用)は FFT_SGI、FFT_DEC、FFT_INTEL、FFT_T3E、FFT_FFTW です。最後の FFTW は公開されている移植性の高い FFT ライブラリで、任意のマシンにインストールできます。これらのいずれも適合しない場合はご連絡ください。お使いのマシンのネイティブ FFT ライブラリを呼び出す機能を追加する方法を相談しましょう。PPPM を使用しない場合は FFT_NONE を指定することもできます。
Linux と T3E でのコンパイルでは、CCFLAGS に KLUDGE を指定する必要があります(Makefile.linux と Makefile.t3e を参照)。これは、F90 から C を呼び出す際に C 関数名へ適切なアンダースコアを付与するためです。
** LAMMPS の実行
LAMMPS は、入力コマンドを記述したテキストファイル(スクリプト)をリダイレクトして実行します。
lmp_sgi < in.lj lmp_t3e < in.lj
スクリプトファイルには、シミュレーションのパラメータ指定や、初期原子配置・分子トポロジー・力場パラメータを記述したデータファイルなど、必要なファイルを読み込む命令が含まれます。利用可能なコマンドは input_commands ページで説明されています。データファイルの形式については data_format ページを参照してください。
LAMMPS は 1 プロセッサを含む任意のプロセッサ数で実行できます。理論的には、プロセッサ数やマシンに関わらず同一の結果が得られるはずです。しかし実際には、数値丸めにより小さな差が生じ、ダイナミクスの軌道が徐々に発散する場合があります。
LAMMPS の実行時には、扱う問題と使用プロセッサ数に基づいて必要な配列サイズを見積もってメモリを確保します。物理メモリを使い切ると F90 のアロケーションエラーが発生し、コードが停止またはクラッシュします。この場合はプロセッサ数を増やすか問題規模を小さくするしかありません。画面に「boosting ○○」のようなメッセージが表示された場合、LAMMPS が必要な配列サイズを過小評価したことを意味します。入力スクリプトで「extra memory」コマンドを使用すると、実行時にこれらのサイズを増やせます。いくつかの配列は大多数のユーザに十分なサイズでハードコードされており、global.f のパラメータ設定で指定されています。これらのパラメータを「boost」するよう求められた場合は、値を変更してから LAMMPS を再コンパイルしてください。
LAMMPS のエラーにはセットアップ時に検出されるものと、隣接リスト溢れのように計算途中で発生するものがあります。F90 のアロケーションエラーが発生した場合は(1 プロセッサのみがエラーになるため)コードがエラーメッセージを表示して停止することがありますが、それ以外は致命的なエラーに遭遇した際に必ず画面へメッセージを出力して正常終了するはずです。メッセージなしでクラッシュまたはハングした場合はバグの可能性が高いので、ぜひ報告してください。ただしこれはアルゴリズムや並列化に関する問題であり、タイムステップが大きすぎる、原子を同じ位置に重ねるといった物理的な設定ミスは含みません。例外として、MPI 実装によってはメッセージのバッファリング方法が異なります。エラーメッセージなしでハングする場合、バッファリングを有効化する、あるいはバッファ可能なメッセージサイズを大きくするための MPI 設定(通常は環境変数)を指定する必要があるかもしれません。
** サンプル
examples ディレクトリには複数のサンプル問題が用意されています。すべて、コマンドを記述した入力ファイル(in.*)と、初期原子座標を記述したデータファイル(data.*)を使用し、1 つ以上の出力ファイルを生成します。異なるマシンやプロセッサ数で得られたサンプル出力も含まれているので、自分の結果と比較できます。各サンプルが示す LAMMPS の機能については、examples サブディレクトリの README を参照してください。
(1) lj = レナード・ジョーンズ系の原子シミュレーション。
(2) class2 = DISCOVER cff95 クラス II 力場を用いたフェニルアラニン分子。
(3) lc = 各種クーロン相互作用オプションと周期境界条件設定を含む液晶分子。
(4) flow = さまざまな拘束オプションを用いたチャネル内 2 次元レナード・ジョーンズ原子の流れ。
(5) polymer = 1 種類または 2 種類の鎖を持つビーズ・スプリング型高分子モデル。
** その他のツール
converters ディレクトリには、MSI Discover、AMBER、LAMMPS 形式間で入出力ファイルを変換するツールのソースコードとスクリプトが含まれています。詳細は各ツールの README を確認してください。
tools ディレクトリには、LAMMPS 用データファイルを生成・加工するシリアルプログラムが複数含まれています。
(1) setup_chain.f = ビーズ・スプリング鎖高分子のデータファイルを生成 (2) setup_lj.f = 複数種の原子 LJ 混合系のデータファイルを生成 (3) setup_flow_2d.f = 壁を持つ LJ 粒子の 2 次元流れシミュレーション用データファイルを生成 (4) replicate.c = 既存のデータファイルを複製またはスケールして新しいファイルを作成 (5) peek_restart.f = LAMMPS のバイナリ再始動ファイルから情報を出力 (6) restart2data.f = LAMMPS のバイナリ再始動ファイルをテキストデータファイルへ変換
各ツールの使い方は、ソースファイル冒頭のコメントを参照してください。
** LAMMPS の拡張
ユーザが作成したルーチンを LAMMPS にコンパイル・リンクし、LAMMPS 実行中に「diagnostic」コマンドで呼び出すことができます。これらのルーチンはオンザフライの診断やその他さまざまな目的に利用できます。examples/lc ディレクトリには、in.lc.big.fixes 入力スクリプトと diagnostic コマンドを併用する例が示されています。また、サンプルの診断ルーチン diagnostic_temp_molecules.f も同梱されています。