5
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

GROMACS の xtc を自分の C++ プログラムで読む

Posted at

GROMACS の xtc ファイルを自分の C++ プログラムで読む方法を紹介します。
既存のプログラムではサポートされていない独自の解析方法を試したい・・・という時に役に立つでしょう。

以下の前提で書いています。

  • Linux 環境
  • GROMACS はインストール済み
  • GROMACS のコンパイルにはインテルコンパイラを使用している

GROMACS のインストールについては以下のリンクが参考になるでしょう。
Gromacs 2019.3をmacOS / Linux上にインストール
Gromacsのインストールとパフォーマンスの検証 on Docker and CentOS 7

サンプルソースコード

sample.cpp
#include <iostream>
#include "gromacs/fileio/xtcio.h"
using namespace std;
int main (int argc, char** argv)
{
        t_fileio* fi = open_xtc(argv[1], "r");

        int n;

        gmx_int64_t step;

        real time;
        real prec;

        matrix box;

        rvec *x;

        gmx_bool bOK;

        // 原子数もここでゲット
        read_first_xtc(fi, &n, &step, &time, box, &x, &prec, &bOK);

        cout << "REMARK natom = " <<  n << '\n';

        read_next_xtc(fi, n, &step, &time, box, x, &prec, &bOK);

        cout << "Time: " << time << '\n';
        cout << "Step: " << step << '\n';
        cout << "Prec: " << prec << '\n';
        cout << "boxx: " << box[0][0] << '\n';
        cout << "boxy: " << box[1][1] << '\n';
        cout << "boxz: " << box[2][2] << '\n';
        cout << x[0][0] << '\n';
        cout << x[0][1] << '\n';
        cout << x[0][2] << '\n';
        cout << x[1][0] << '\n';
        cout << x[1][1] << '\n';
        cout << x[1][2] << '\n';

        close_xtc(fi);
}

Makefile

makefile_sample
TARGET=sample.x

CXX=icpc

CXXFLAGS= -O3 -std=c++11 -I/home/hoge/include -L/home/hoge/lib -I/home/hoge/gromacs-2018.3/src -L/home/hoge/gromacs-2018.3/build/lib

LIBS= -lgromacs

SRCS = sample.cpp

OBJS = $(SRCS:.cpp=.o)

HEADS=

$(TARGET): $(OBJS) $(HEADS)
             $(CXX) $(CXXFLAGS) -o $(TARGET) $(OBJS) $(LIBS)

clean:
        rm -f $(OBJS) $(TARGET)

GROMACS の共有ライブラリの場所は、インストール時の設定で変わるので適当に設定する。

コンパイル

$ make -f makefile_sample

実行

$ ./sample.x foo.xtc

実行時に
error while loading shared libraries: libgromacs.so.3: cannot open shared object file: No such file or directory
というエラーが出る場合、環境変数 LD_LIBRARY_PATH に、共有ライブラリがあるディレクトリへのパス(今回の場合は /home/hoge/gromacs-2018.3/build/lib)を追加する。

5
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?