HybridForceField

HybridForceField #

HybridForceField は二つの異なる力場の線形結合です。

\[V = \lambda V_1 + (1 - \lambda) V_2\]

\(\lambda = 1\) のとき、 \(V = V_1\) になることに気を付けてください。

トポロジーは異なっていても問題ありません。異なっている場合、dcdなどのchain数には一つ目のforcefieldが入ります。

#

まず、二つのforcefieldsを定義します。

その後、[simulator]テーブルでforcefields.type = "Hybrid"と、forcefields.lambdaの値を定義してください。 一番目の[[forcefields]]テーブルが上の式での \( V_1 \) に、二番目が \( V_2 \) になります。

[simulator]
type          = "MolecularDynamics"
boundary_type = "Unlimited"
precision     = "double"
delta_t       = 0.1
total_step    = 1000000
save_step     =   1_000
seed          = 2859805901
integrator.type = "BAOABLangevin"
integrator.gammas = [
    # ...
]
forcefields.type = "Hybrid"
forcefields.lambda = 0.5
# ...

[[forcefields]] # V1
[[forcefields.local]]
# ...

[[forcefields]] # V2
[[forcefields.local]]
# ...

λの値を動的に変化させる #

\(\lambda\) を仮想的な粒子の座標と解釈し、それにかかる力を考え、時間積分することによってサンプリングを行うことが可能です。 forcefields.lambdaには文字列で"dynamic"と入力し、[[systems]]dynamic_variableslambdaを定義してください。 このlambdaの値、速度、力は.eneファイルに保存されます。

また、その際に \(k(\lambda - \lambda_0)^2\) 型のポテンシャルを追加でかけることが可能です。

[simulator]
type          = "MolecularDynamics"
boundary_type = "Unlimited"
precision     = "double"
delta_t       = 0.1
total_step    = 1000000
save_step     =   1_000
seed          = 2859805901
integrator.type = "BAOABLangevin"
integrator.gammas = [
    # ...
]
forcefields.type = "Hybrid"
forcefields.lambda = "dynamic" # make lambda dynamic
forcefields.v0_lambda = 1.0    # k(v - v0)^2
forcefields.k_lambda  = 100.0  # k(v - v0)^2

# ...

[[systems]]
attributes.temperature = 300.0
dynamic_variables.lambda = {x = 1.0, m = 1000.0, gamma = 1e-5, boundary = "Repulsive", lower = 0.0, upper = 1.0}

[[forcefields]] # V1
[[forcefields.local]]
# ...

[[forcefields]] # V2
[[forcefields.local]]
# ...