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)$ を計算して最後に時間平均しています。よっ
|
||||
て、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が生成されます。
|
||||
|
||||
* 使い方
|
||||
並列計算のために、環境変数をセットしてスレッド数を指定しておく。
|
||||
|
||||
@@ -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; 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;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user