diff --git a/Readme.org b/Readme.org index 62303d9..efd149a 100644 --- a/Readme.org +++ b/Readme.org @@ -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が生成されます。 * 使い方 並列計算のために、環境変数をセットしてスレッド数を指定しておく。 diff --git a/dump2sq.c b/dump2sq.c index 419a853..a27c30b 100644 --- a/dump2sq.c +++ b/dump2sq.c @@ -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_; @@ -270,15 +269,15 @@ void CalcSq(HEAD *head, TYPE *type, DATASET *gr, DATASET *sq){ for (i=0; in; i++) for (j=0; jm; j++ )sq_[i][j] = 0.0; - + + /* X線・中性子の散乱理論入門 pp. 143-144 */ for (i=0; in; 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; jpairs; j++){ sekibun = 0.0; for (k=0; kn; 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; }