modified dump2sq, iccの-qopenmpでTHREAD>1でS(Q)がおかしい。調査中
This commit is contained in:
+9
-8
@@ -26,8 +26,7 @@ https://www.cmu.edu/biolphys/deserno/pdf/gr_periodic.pdf
|
|||||||
|
|
||||||
1ステップ毎に$g(r)$ と$S(Q)$ を計算して最後に時間平均しています。よっ
|
1ステップ毎に$g(r)$ と$S(Q)$ を計算して最後に時間平均しています。よっ
|
||||||
て、NPT計算でセルサイズが変わったとしても問題なく計算できます。計算コ
|
て、NPT計算でセルサイズが変わったとしても問題なく計算できます。計算コ
|
||||||
ストのほとんどは、原子間距離の計算です。この計算はopenmpで並列化してい
|
ストのほとんどは、原子間距離の計算です。
|
||||||
ます。
|
|
||||||
|
|
||||||
* 入力ファイル
|
* 入力ファイル
|
||||||
拡張子で入力ファイルのformatを判断しています。
|
拡張子で入力ファイルのformatを判断しています。
|
||||||
@@ -78,15 +77,17 @@ https://www.cmu.edu/biolphys/deserno/pdf/gr_periodic.pdf
|
|||||||
|
|
||||||
[[file:dump2sq-1.0.tar.gz][dump2sq-1.0.tar.gz]]
|
[[file:dump2sq-1.0.tar.gz][dump2sq-1.0.tar.gz]]
|
||||||
|
|
||||||
|
|
||||||
#+begin_example
|
#+begin_example
|
||||||
make
|
make
|
||||||
#+end_example
|
#+end_example
|
||||||
icc用のMakefileも準備しています。
|
|
||||||
#+begin_example
|
# iccでOMT_NUM_THREAD > 1にすると、S(Q)がおかしくなる。g(r)は正しいのに…。
|
||||||
make -f Makefile.icc
|
# 原因不明。Threadは1にしとく。
|
||||||
#+end_example
|
# icc用のMakefileも準備しています。
|
||||||
これで、dump2sqが生成されます。
|
# #+begin_example
|
||||||
|
# make -f Makefile.icc
|
||||||
|
# #+end_example
|
||||||
|
# これで、dump2sqが生成されます。
|
||||||
|
|
||||||
* 使い方
|
* 使い方
|
||||||
並列計算のために、環境変数をセットしてスレッド数を指定しておく。
|
並列計算のために、環境変数をセットしてスレッド数を指定しておく。
|
||||||
|
|||||||
@@ -261,7 +261,6 @@ void CalcCn_pp(DATA *data, HEAD *head, TYPE *type, DATASET *cn,
|
|||||||
/* ####################################################################### */
|
/* ####################################################################### */
|
||||||
void CalcSq(HEAD *head, TYPE *type, DATASET *gr, DATASET *sq){
|
void CalcSq(HEAD *head, TYPE *type, DATASET *gr, DATASET *sq){
|
||||||
int i, j, k;
|
int i, j, k;
|
||||||
double r, q;
|
|
||||||
double keisuu, sekibun;
|
double keisuu, sekibun;
|
||||||
double **sq_;
|
double **sq_;
|
||||||
|
|
||||||
@@ -270,15 +269,15 @@ void CalcSq(HEAD *head, TYPE *type, DATASET *gr, DATASET *sq){
|
|||||||
|
|
||||||
for (i=0; i<sq->n; i++)
|
for (i=0; i<sq->n; i++)
|
||||||
for (j=0; j<sq->m; j++ )sq_[i][j] = 0.0;
|
for (j=0; j<sq->m; j++ )sq_[i][j] = 0.0;
|
||||||
|
|
||||||
|
/* X線・中性子の散乱理論入門 pp. 143-144 */
|
||||||
for (i=0; i<sq->n; i++){
|
for (i=0; i<sq->n; i++){
|
||||||
q = sq->x[i];
|
keisuu = 4.0 * M_PI * head->rho / sq->x[i];
|
||||||
keisuu = 4.0 * M_PI * head->rho / q;
|
|
||||||
for (j=0; j<type->pairs; j++){
|
for (j=0; j<type->pairs; j++){
|
||||||
sekibun = 0.0;
|
sekibun = 0.0;
|
||||||
for (k=0; k<gr->n; k++){ /* rで積分 */
|
for (k=0; k<gr->n; k++){ /* rで積分 */
|
||||||
r = gr->x[k];
|
sekibun = sekibun + gr->x[k] * (gr->y[k][j] - 1.0)*
|
||||||
sekibun = sekibun + r * (gr->y[k][j] - 1.0)* sin(q * r) * gr->dx;
|
sin(sq->x[i] * gr->x[k]) * gr->dx;
|
||||||
}
|
}
|
||||||
sq_[i][j] = keisuu * sekibun;
|
sq_[i][j] = keisuu * sekibun;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user