おいも貴婦人ブログ

生物系博士課程満期退学をしたAIエンジニアのブログ。

GROMACSのコードリード(code reading)(2)

今回はMD計算がどのように実行されるかを中心に読んでいく。引数は省略。変数t_stateを追えば、Gromacsのkernelが見えてくるはず!
ディレクトリ gromacs-4.6.5/src/kernel

mdrun

  • mdrunはGROMACSに含まれる主要な計算化学エンジンである。分子動力学計算に加え、確率動力学(多分、ブラウニアンダイナミクスのこと)、エネルギー最小化、粒子挿入、種々のエネルギーの再計算、基準振動解析を実行することが出来る。
  • mdrunは、-sの引数としてinputファイルを読み込み、必要ならtopologyファイルを書き出す。mdrunは、少なくとも4つのアウトプットファイルを書き出す。書き出されるファイルの1つにlogファイルがあり(-g)、これは各ノードで書き出される。必要でない場合-seppotオプションを指定する。トラジェクトリファイルには(-o)、座標、速度とオプションとして力が書き出されている。構造ファイル(-c)は、最後の座標と速度が書き出されている。エネルギーファイル(-e)には、エネルギー、温度や圧力などが書き出されており、それらの多くはlogファイルにも書き出されている。オプションとして座標は、圧縮したトラジェクトリ(-x)として書き出されている。
  • -dhdlは、自由エネルギー計算を行うときのみに使われる。

以下、マニュアルの重要な点

  • Full OpenMP support is only available with the Verlet cut-off scheme, with the (older) group scheme only PME-only processes can use OpenMP parallelization.
  • With thread-MPI, unless set on the command line, the number of MPI threads will automatically be set to the number of GPUs detected.

mdrun.c

  • cmain()
    • src/contrib/runner_opemm.c:mdrunnuer();t_state *state=NULL; L1231
    • src/contrib/runner_opemm.c:mdrunnuer();snew(state,1); L1274(領域確保)
    • src/contrib/runner_opemm.c:mdrunnuer(); integrator[inputrec->eI].func(...)このfuncはdo_mdかdo_md_openmmに置き換わる。
      • src/kernel/md.c:do_md();L820からループスタート(この関数の理解が肝だと思う。)
        • src/mblib/sim_util.c:do_force()力の計算