Biasmk4 system
Background
Bias は、ユーザー定義の一般化座標 (一般化座標(ユーザー定義座標) を参照) に対して任意のバイアス・ポテンシャルをかける機能を与える。汎用的な使い方が可能で、FreeFlex の特徴の一つとなっている。(一般化座標に拘束をかけるときは、bias のかわりに constraint_struct を用いる。)
主な用途は、以下の2つである。
- 自由エネルギー計算のためのアンブレラ・ポテンシャルとして用いる。
- 分子内ポテンシャルとして用いる。
主な特徴
- 定義されているバイアス・ポテンシャルの関数形を用いて、任意の数のバイアスを任意の一般化座標にかけることが可能。
- この指定は、FreeFlex本体の入力ファイル中でのデータセット &biasdata で行なうことができる。
- 新たにバイアス・ポテンシャルの関数形を定義することができる。
- この操作は、ソースコード中の ./bias_core に新たな関数形に対するFortranソースコードのファイルを追加して、再コンパイルすることで行う。
注意
* biasは古い bias ~ biaskmk3 の改良版で、これらの機能を含んでいるため、古いものを用いる必要はない。
* bias には出力の機能は備えていない。出力の必要があるときには、変数の出力(Monitor) を使用する。
Module structure
Bias の設定は、FreeFlex本体の入力ファイル中でのデータセット &biasdata で与える。Biasのモジュールのソースコードも、その入力形式に合わせて以下のようなツリー状の構造体からなる。
| Name | Content | Comment & details |
| bias_system_struct | bias 全体を統括する。 | 中に1つ以上の bias_struct を含む。(biasdata(:)) |
| bias_struct | &biasdata セクション1つ分を管理する。複数の&biasdata を与えることも可能で、WHAMや系の拘束など目的の異なるバイアスを区別して与えるときに用いる。 | 中に1つ以上の bias_manager_struct を含む。(bias(:)) |
| bias_manager_struct | &biasdata 1行分に対応する個々のバイアスポテンシャルを管理する。 | 1つの bias_core_struct を含む。 |
| bias_core_struct | 個々のバイアスポテンシャルに対応するabstract構造体。 | その実体は、バイアスの種類xxxに応じて、以下のbias_core/bias_xxx_struct で置き換えられる。 |
| bias_core/bias_xxx_struct | 種類xxxに対するバイアスポテンシャル関数。 | xxxの部分を変えて、ユーザー定義の新しいポテンシャル関数を追加できる。 |
The tree structure of an example bias system with 2 &biasdata sections that each contain 4 individual biases is shown below.
<source lang="fortran"> MODULE bias_system_module !!! !!! bias全体を統括するモジュール。 !!!
USE bias_module,ONLY: bias_struct IMPLICIT NONE
TYPE bias_system_struct
TYPE(bias_struct),ALLOCATABLE :: bias(:) !!! bias(1:n) --- n個の &biasdata を取り扱う。 !!! &biasdata にはWHAMのためや系の拘束のためなど、それぞれの目的ごとに !!! バイアスをかけることを想定している。
LOGICAL :: calculate_bias !!! Logical switch for bias. =.TRUE.のときにbiasを使用する。
INTEGER :: n !!! Number of &biasdata.
INTEGER :: nmax !!! Max number of &biasdata. !!! &biasdataをnmax個以上指定した時には、ファイルの上からnmax個が読まれる。
REAL8 :: U !!! Total bias potential. REAL8,ALLOCATABLE :: F(:,:) !!!Total bias force. (1:3,1:coord%nsite) REAL8 :: U_reus !!! REUS potential.
CONTAINS
GENERIC :: init => init_coord !!! (master_nml_unit,T,coord) !!! Initialization for bias system. !!! master_nml_unit からネームリスト bias を読み込んで設定する。 !!! 構造体 bias の各要素の初期設定。 !!! PROCEDURE :: init_coord !!! (master_nml_unit,T,coord)
PROCEDURE :: reallocate_bias !!! (n) !!! Reallocate bias system for special use. !!! PROCEDURE :: calculate !!! (coord) !!! Calculation for bias system. !!! bias全体のUとFを計算する。 !!!
PROCEDURE :: calculate_reusmk2 !!! (coord,iRep,bias_set_id) !!! Calculation for bias system REUSMK2 edition. !!! レプリカ交換を試す際に、交換後のバイアスエネルギーと力を求める。 !!! !!! 入力 --- coord(coord構造体)、iRep(交換後のノード番号) !!! bias_set_id(レプリカ交換で変化するバイアスの&biasdataの番号) !!! ※ &biasdataが複数ある場合に区別する。1つであれば、bias_set_id=1 !!! ※ 交換前のノード番号は、常に自分自身の番号。mpi%irank !!! !!! 出力 --- UとF(交換後のバイアスポテンシャルとその力) !!! ※ &biasdataが複数あるとき、すべてのバイアスの和であることに注意。 !!! U_reus(bias_set_idに対するバイアスポテンシャルの変換後の値)
END TYPE bias_system_struct
CONTAINS </source>
<source lang="fortran"> MODULE bias_module !!! !!! bias_system_structの中にあって、&biasdata 1つ分を管理する。 !!!
USE bias_manager_module,ONLY: bias_manager_struct USE flexlist_module,ONLY: flexlist_struct USE coord_module,ONLY : coord_struct
IMPLICIT NONE
TYPE bias_struct
TYPE(bias_manager_struct),ALLOCATABLE :: bias_data(:) !!! The information retrieved from &biasdata. (1:n_bias) !!! &biasdata の1行分が1つの要素に対応する。 !!!
INTEGER :: n_bias !!! Number of bias. &biasdataの行数。
REAL8 :: U !!! Bias potential. REAL8,ALLOCATABLE :: F(:,:) !!Atomic bias forces. (1:3,1:coord%nsite)
TYPE(flexlist_struct),ALLOCATABLE :: list(:) !!!List of bias that is applied to correponding mpi node. (1:mpi%isize) !!! 並列ノード数の要素からなる配列。 !!! 並列ノードごとに、そのノードにかかるbias番号のリストを保持する。 !!!
INTEGER :: rank !!! mpi node id of current bias.
CONTAINS
GENERIC :: init => init_coord !!! (master_mnl_unit,isize,T,[coord]) !!!initialization for normal bias calculation mode; !!! !!! &biasdata を読み込んで、bias(1:n_bias)の個々の要素を初期化する。 !!! 入力 --- master_mnl_unit, isize !!! master_mnl_unitは入力ファイル構造体、isizeはMPIのノード数 !!! 出力 --- n_bias, bias(1:n_bias), F, list !!! PROCEDURE :: init_coord !!! (master_mnl_unit,isize,T,coord)
PROCEDURE :: calculate !!! (coord,irank) !!! 現在のノード irank にかかるバイアスを計算する。 !!! 入力 --- coord(coord構造体) !!! 出力 --- UとF
PROCEDURE :: calculate_from_q !!! (q,ibias,U,F) !!! 一般化座標 q から直接に ibias番目のバイアスを計算する。 !!! 入力 --- q(:), ibias. !!! q は多次元座標をサポート。 !!! 出力 --- UとF
END TYPE bias_struct
CONTAINS </source>
<source lang="fortran">
MODULE bias_manager_module
!!!
!!! bias_structの中にあって、&biasdata 1行分のバイアスポテンシャル。
!!!
USE bias_core_module,ONLY: bias_core_struct IMPLICIT NONE
TYPE bias_manager_struct
CLASS(bias_core_struct),POINTER :: core !!! バイアスの種類に応じて指定する。
CONTAINS
GENERIC :: init => init_coord !!! Assign bias core to designated bias type and read in bias data. !!! 入力 --- condition (バイアスポテンシャル1行分の文字列), T !!! 出力 --- bias_coreのポインタのTYPEに応じたアサインメント !!! conditionを読み込んでbias_core内に変数を設定する。 !!! TYPE, n_ID, ID, F, n_PARA, PARA, list
PROCEDURE :: init_coord !!! (condition,T,list)
END TYPE bias_manager_struct
CONTAINS </source>
<source lang="fortran">
MODULE bias_core_module
!!!
!!! 個々のバイアスポテンシャルに対応するabstract構造体。
!!! 実体は、bias_core/bias_xxx_struct で与える。
!!!
USE flexlist_module,ONLY: flexlist_real_struct IMPLICIT NONE
TYPE,ABSTRACT :: bias_core_struct
INTEGER :: n_ID !!!number of spcoord(s) related to the bias. !!! バイアス入力のconditionで指定されている。 !!! このバイアスは、n_ID 個の一般化座標の関数となっている。
INTEGER,ALLOCATABLE :: ID(:) !!!ID of each spcoord.(1:n_ID)
CHARACTER(LEN=1024) :: TYPE !!!bias potential type.
INTEGER :: n_PARA !!!number of parameters related to the bias. REAL8,ALLOCATABLE :: PARA(:) !!!Parameter set.(1:n_PARA) !!! このバイアスポテンシャルを決めるバラメータの数とその数値。
REAL8 :: U !!!Potential of the bias. TYPE(flexlist_real_struct),ALLOCATABLE :: F(:) !!!Force imposed on each spcoord of the bias.(1:n_ID) !!! 一般化座標が多次元である際に、flexlistで対応している。
REAL8 :: T !!!Temperature.
CONTAINS
PROCEDURE(calculate),DEFERRED :: calculate !!! (q) !!! 入力 q !!! 出力 UとF
PROCEDURE :: get_q !!! (coord) result(q) PROCEDURE :: get_U !!! () result(U) PROCEDURE :: get_F !!! () result(F) !!! get_q, get_U, get_Fは、値を参照するもので、通常は使わない。
END TYPE bias_core_struct
INTERFACE
!SUBROUTINE setting(self,T)
!IMPORT bias_core_struct
!IMPLICIT NONE
!CLASS(bias_core_struct),INTENT(inout) :: self
!REAL8,INTENT(in) :: T
!END SUBROUTINE
SUBROUTINE calculate(self,q)
USE flexlist_module,ONLY: flexlist_real_struct
IMPORT bias_core_struct
IMPLICIT NONE
CLASS(bias_core_struct),INTENT(inout) :: self
TYPE(flexlist_real_struct),INTENT(in) :: q(:)
END SUBROUTINE
END INTERFACE
CONTAINS </source>
Namelist variables for bias
biasの設定は、ネームリスト &bias とデータセット &biasdata で行う。 ネームリスト &bias に含まれる変数は、以下の通りである。
| Name | Type | Default value | Description |
| calculate_bias | LOGICAL | .FALSE. | Determines whether the bias calculation is ON/OFF. |
| nmax | INTEGER | 10 | The maximum number of &biasdata sections allowed. Extra &biasdata sections will be ignored. |
bias parameter settings via &biasdata
The bias parameter section can be defined in the main namelist file for FreeFlex. Like any other namelist sections, it starts with &biasdata and ends with &end. The definition of each bias looks like this:
ファイル:Bias parameter settings.png
Note that you can set up multiple &biasdata...&end sections inside the namelist now.
このデータは、Biasmk3と共通。
bias parameter settings via &biasdata_multi
同じバイアスを複数の一般化座標に適用する場合、&biasdataの代わりに&biasdata_multiを用いることで入力の簡略化が可能である。以下に記入例と記載内容の説明を示す。
&biasdata_multi comment 2 1 3 5 7 9 2 4 6 8 10 GAUSS_2D 2 x y 5 1.0d+00 1.0d-10 3.0d-10 1.0d-10 1.0d-10 1 GAUSS_2D 2 x y 5 1.0d+00 2.0d-10 3.0d-10 1.0d-10 1.0d-10 1 GAUSS_2D 2 x y 5 1.0d+00 1.0d-10 4.0d-10 1.0d-10 1.0d-10 1 GAUSS_2D 2 x y 5 1.0d+00 2.0d-10 4.0d-10 1.0d-10 1.0d-10 1 &end
- コメント - スペースを含まない文字列。特別な機能はない。
- N_spcoord - 一行分のバイアスを定義するために必要な一般化座標の数。
- 一般化座標 - 以降の全バイアスの適用対象となる一般化座標の通し番号。N_spcoord行を用いて座標の組を明示する。
- 次の3種類の方法で指定が可能。
- 番号 - "1" "2" など。
- 連続した番号 - "1:3" など。
- 文字列 - "all" のみ。全てのユーザー定義一般化座標に対応。
- バイアス - &biasdataと同じ形式で記述する。一般化座標の番号のみ、任意の数字または文字列を入れる(あとで正しい番号に置き換わる)。
- 異なるバイアスタイプの共存は、同じN_spcoordをもつバイアスに限り許容される。
一般化座標の番号を処理する過程で昇順への並べ替えと重複の排除が行われることに注意が必要である。この仕様はN_spcoord=1のときには問題とならないが、例えばN_spcoord=2で一般化座標の指定を
- 1 2 2
- 4 3 4
とした場合、内部的には (1, 3), (2, 4) の二組として扱われる。2017年7月現在この仕様によって不都合が生じるケースは想定されないため、修正を保留している。
Available bias type
| Name | N_spcoord | TYPE_spcoord | N_para | Comment & details |
| PARABOLIC | 1 | ANY | 2 | |
| PARABOLIC_DYNAMIC | 1 | ANY | 5 | c1 = sigma; c2 = mu_start; c3 = interval; c4 = increment_mu; c5 = maxninc
mu gets updated at every interval by an increment of increment_mu until maxninc is reached.
|
| ANTIPARABOLIC | 1 | ANY | 2 | |
| PARABOLIC_CONDITIONAL | 1 | ANY | 3 | Same as PARABOLIC, except that only when the sign of is positive will the bias be applied. |
| PARABOLIC_CLUSTER | ? | ? | ? | ? |
| PARABOLIC_WFN | 1 | WATFING_N | 3 | c1 = sigma; c2 = mu; c3 = threshold
|
| HARMONIC | 1 | ANY | 2 | |
| COS_SERIES1 | 1 | ANY | 2 | |
| COS_SERIES2 | 1 | ANY | 4 | |
| COS_SERIES3 | 1 | ANY | 6 | |
| GAUSS_1D | 1 | ANY | 3 | |
| GAUSS_2D | 2 | ANY | 5 | |
| GAUSS_3D | 3 | ANY | 7 | |
| VEC_PARABOLIC | 1 | ANY | 4 |
多次元 spcoord による計算のテスト用バイアス。 |
| DUMMY | 1 | ANY | 1 | 他のバイアスと同様に置くことができ、常にフォースおよびポテンシャルエネルギーを 0 で返すバイアス。bias_manager の仕様上、パラメータを最低1つ設定する必要があるが、この値は計算には用いられないため適当に設定してよい。 |
| COS_SE2_AMBER | 1 | ANY | 4 |
ANTECHAMBER で作られたパラメータを用いるための dihedral 用のバイアス。 |
| COS_SE3_AMBER | 1 | ANY | 6 |
ANTECHAMBER で作られたパラメータを用いるための dihedral 用のバイアス。 |
| COS_DLPOLY | ? | ? | ? | ? |
| TAPERED_STEP | 1 | ANY | 3 | 構文解析に失敗 (構文エラー): {\displaystyle x=(q-c_2)/c_3\\ U_{bias} = \begin{cases} 0 & (q-c_2 < -c_3)\\ c_1(0.1875x^5 - 0.625x^3 + 0.9375x + 0.5) & (-c_3 \le q-c_2 \le c_3)\\ c_1 & (c_3 < q-c_2)\\ \end{cases}}
-c3≦(q-c2)≦c3の範囲で0からc1まで滑らかに変化するバイアス。 |