Skip to content

Instantly share code, notes, and snippets.

View kumpeishiraishi's full-sized avatar

Kumpei Shiraishi kumpeishiraishi

View GitHub Profile
@kumpeishiraishi
kumpeishiraishi / CMakeLists.txt
Created December 10, 2022 07:55
My minimum cmake file with cnpy, AVX intrinsics, and Eigen
cmake_minimum_required(VERSION 3.13)
project(test_cmake CXX)
add_executable(a.out main.cpp)
target_include_directories(a.out PRIVATE /home/shiraishi/.local/include ${MKLROOT}/include)
target_link_directories(a.out PRIVATE /home/shiraishi/.local/lib ${MKLROOT}/lib/intel64)
target_compile_options(a.out PRIVATE -O3 -inline-forceinline -xCORE_AVX512 -DMKL_LP64)

私の研究分野では、実対称行列の固有値と固有ベクトルを求めることが多い。 固有値問題は最も基本的な数値計算であり、様々なパッケージが簡便に利用できる。 ここでは、C++のライブラリであるEigenを使って実対称行列の固有値を求める方法を、備忘のためにまとめる。

インストール

$ cd /home/shiraishi/.local
$ curl -O "https://gitlab.com/libeigen/eigen/-/archive/3.4.0/eigen-3.4.0.tar.gz"
$ tar xf eigen-3.4.0.tar.gz
$ mv ./eigen-3.4.0/Eigen ./include

C++で format する

Pythonでは文字列操作が format で簡単にできる。

print("ゼロ埋め {:05d}".format(99))
# output: ゼロ埋め 00099

print("指数表記 {:.2e}".format(3.14))
# output: 指数表記 3.14e+00

粒子系シミュレーションにおける高速化のメモ

個人的なチェックリスト

  1. まずは普通にコードを完成させる
    • MDなら、NVEで時間発展させて全エネルギーの保存を確認し、コードにバグがないことの確信を得る
      • 全エネルギーの揺らぎが、運動エネルギー・ポテンシャルエネルギーの揺らぎと比べて、2桁程度以上小さければOK
    • MCなら、MSDなどを計算して、自分のコードのダイナミクスと先行研究に齟齬がないことを確認する(その他の方法だと、サンプルした配置のポテンシャルの比較?)
    • この段階では、高速化の諸々を先取りするといった余計なことはしない
    • まずは、とにかく素直に正しいコードを書き終える方が、作業は結局速く終わる(経験上)

モンテカルロ法の軌道の解析について私が知っている二、三の事柄

モンテカルロ法は、粒子系のシミュレーションをする際、とてもよく使われる計算手法です。 静的な性質(ポテンシャルなど)を調べる際の配置サンプリングに使われるのはもちろん、モンテカルロ法のダイナミクスそれ自体が計算されることもよくあります。 ここで言うダイナミクスとは、平均二乗変位や様々な時間相関関数のことです。 分子動力学法(MD)のダイナミクスの計算方法はよく解説を見かける一方、モンテカルロ法(MC)の解説はさほど多くないように思います。 ここでは、粒子系のMCシミュレーションをどう実行し、得られた軌道をどのように解析するのか、簡単にまとめます。

まずは、本稿で考える粒子モデルであるKob-Andersen(KA)モデルを導入します。