modified dump2sq, iccの-qopenmpでTHREAD>1でS(Q)がおかしい。調査中

This commit is contained in:
2022-03-13 09:03:42 +09:00
parent c684c77be4
commit c86de83c0c
2 changed files with 14 additions and 14 deletions
+9 -8
View File
@@ -26,8 +26,7 @@ https://www.cmu.edu/biolphys/deserno/pdf/gr_periodic.pdf
1ステップ毎に$g(r)$ と$S(Q)$ を計算して最後に時間平均しています。よっ
て、NPT計算でセルサイズが変わったとしても問題なく計算できます。計算コ
ストのほとんどは、原子間距離の計算です。この計算はopenmpで並列化してい
ます。
ストのほとんどは、原子間距離の計算です。
* 入力ファイル
拡張子で入力ファイルの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]]
#+begin_example
make
#+end_example
icc用のMakefileも準備しています。
#+begin_example
make -f Makefile.icc
#+end_example
これで、dump2sqが生成されます。
# iccでOMT_NUM_THREAD > 1にすると、S(Q)がおかしくなる。g(r)は正しいのに…。
# 原因不明。Threadは1にしとく。
# icc用のMakefileも準備しています。
# #+begin_example
# make -f Makefile.icc
# #+end_example
# これで、dump2sqが生成されます。
* 使い方
並列計算のために、環境変数をセットしてスレッド数を指定しておく。
+4 -5
View File
@@ -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){
int i, j, k;
double r, q;
double keisuu, sekibun;
double **sq_;
@@ -271,14 +270,14 @@ void CalcSq(HEAD *head, TYPE *type, DATASET *gr, DATASET *sq){
for (i=0; i<sq->n; i++)
for (j=0; j<sq->m; j++ )sq_[i][j] = 0.0;
/* X線・中性子の散乱理論入門 pp. 143-144 */
for (i=0; i<sq->n; i++){
q = sq->x[i];
keisuu = 4.0 * M_PI * head->rho / q;
keisuu = 4.0 * M_PI * head->rho / sq->x[i];
for (j=0; j<type->pairs; j++){
sekibun = 0.0;
for (k=0; k<gr->n; k++){ /* rで積分 */
r = gr->x[k];
sekibun = sekibun + r * (gr->y[k][j] - 1.0)* sin(q * r) * gr->dx;
sekibun = sekibun + gr->x[k] * (gr->y[k][j] - 1.0)*
sin(sq->x[i] * gr->x[k]) * gr->dx;
}
sq_[i][j] = keisuu * sekibun;
}