From 3a632914b98ce7a32d020d82d67e8220dc8388c2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=A4=A7=E7=AA=AA=20=E8=B2=B4=E6=B4=8B?= Date: Wed, 31 Aug 2022 19:16:58 +0900 Subject: [PATCH] modified output.c to increase float number --- Readme.html | 138 +++++++++++++++++++++++++++------------------------- Readme.org | 14 +++++- gr2sq.py | 5 +- output.c | 16 +++--- 4 files changed, 97 insertions(+), 76 deletions(-) diff --git a/Readme.html b/Readme.html index 5267beb..82528f4 100644 --- a/Readme.html +++ b/Readme.html @@ -3,7 +3,7 @@ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> - + dump2sq @@ -251,27 +251,27 @@

Table of Contents

@@ -281,9 +281,9 @@

-
-

はじめに

-
+
+

はじめに

+

複数の時間ステップからなる時間ステップの構造データから、動径分布関数 \(g(r)\) 、積算配位数 \(CN(r)\) 、構造因子 \(S(Q)\) を計算するプログラムです。 @@ -306,16 +306,16 @@ Triclinicなセルでも計算できます。原子ペア毎の\(S(Q)\) を計

-
-

入力ファイル

-
+
+

入力ファイル

+

拡張子で入力ファイルのformatを判断しています。

-
-

LAMMPS

-
+
+

LAMMPS

+

dumpコマンドで生成したファイルで、拡張子は.trajectryです。1ス テップ目で原子のならび決めて、2ステップ目以降は、同じ原子の並びとし @@ -324,22 +324,22 @@ dumpコマンドで生成したファイルで、拡張子は.trajectryです。 のため、以下のようにdumpとdump_modifyで元素記号の出力し、idでsortし ておく必要があります。

-
+
 dump              1 all custom 10 hoge.lammpstrj id type element x y z
 dump_modify       1 element Si O sort id
 
-
-

XYZ

-
+
+

XYZ

+

xyz形式で、拡張子は.xyzまたは.10です。す。1行目に原子数、2行目に Step数と、格子定数を記述しておきます。alpha, beta, gammaがない場合 は、90, 90, 90とします。3行目以降にデータがならびます。2ステップ目 以降も同じ形式でデータを並べます。

-
+
 420
 Step      225837   18.4116484 18.4116484 18.4116484 90 90 90
 Si    10.560073  17.438902  6.614775
@@ -353,41 +353,41 @@ O     17.812448   0.110128  0.3462461
 
-
-

出力ファイル

-
+
+

出力ファイル

+

4つのファイルに拡張子を追加して出力します。basenameは、指定しなけれ ば、インプットファイルと同じになります。

-
-

積算配位数

-
+
+

積算配位数

+

拡張子はcnです。原子ペア毎の \(CN(r)\) が保存されています。

-
-

動径分布関数

-
+
+

動径分布関数

+

拡張子はgrです。原子ペア毎の \(g(r)\) と全原子 \(G(r)\) が保存されています。

-
-

構造因子

-
+
+

構造因子

+

拡張子はsqです。原子ペア毎の \(S(Q)\) とX線と中性子で観測される \(S(Q)\) が保存されています。

-
-

原子散乱因子と中性子散乱長

-
+
+

原子散乱因子と中性子散乱長

+

拡張子はcoeffです。中性子散乱長と原子散乱因子を出力します。原子散乱 因子は、xcoeff.fから抽出しています。中性子散乱長は、NISTのデータを @@ -397,9 +397,9 @@ O 17.812448 0.110128 0.3462461

-
-

インストール

-
+
+

インストール

+

プログラムはCで作成しています。Cのコンパイラを準備してmakeしてください。 ダウンロードして単にmakeしてください。 @@ -409,25 +409,25 @@ O 17.812448 0.110128 0.3462461 dump2sq-1.0.tar.gz

-
+
 make
 
-
-

使い方

-
+
+

使い方

+

並列計算のために、環境変数をセットしてスレッド数を指定しておく。

-
+
 export OMP_NUM_THREADS=4
 

example以下のglass.lammpstrjを引数で渡して実行してみます。

-
+
 dump2sq example/glass.lammpstrj
 

@@ -435,7 +435,7 @@ dump2sq example/glass.lammpstrj さの半分としています。プログラムが実行されると、次のように出力されて、 4つのファイルが出力されます。

-
+
 basename: example/glass
 Maximum cell length = 17.284100
 Rmax = 8.642050
@@ -464,7 +464,7 @@ example/glass.sq was generated.
 値です。GRmaxは、セルサイズを超えても計算できますが、物理的な意味は
 ないでしょう。
 

-
+
 ./dump2sq -h
 usage: dump2sq [options] inputfile
 inputfile format
@@ -484,24 +484,30 @@ options:
 
-
-

misc

-
+
+

misc

+
-
-

coeffploter.py

-
+
+

coeffploter.py

+

元素を指定して、原子散乱因子と中性子散乱長をプロットする。

-
-

gr2sq.py

-
+
+

gr2sq.py

+

-Qの刻みを変えて再計算するために、dump2sqで生成したgrファイルからS(Q)を計算しなおす。結晶のパターンを計算するために、\(2\theta\) で\(Q\) を指定して計算することもできる。 +Qの刻みを変えて再計算するために、dump2sqで生成したgrファイルから +S(Q)を計算しなおす。結晶のパターンを計算するために、\(2\theta\) で\(Q\) +を指定して計算することもできる。\(\theta\) と\(Q\) の関係は以下のとおり。 +defaultで波長は、CuのK alpha線の1.54183 Åとしている。 +\[ + Q = \frac{4\pi}{\lambda}\sin(\theta) + \]

@@ -509,7 +515,7 @@ Qの刻みを変えて再計算するために、dump2sqで生成したgrファ

Author: 大窪 貴洋

-

Created: 2022-08-31 水 19:04

+

Created: 2022-08-31 水 19:16

Validate

diff --git a/Readme.org b/Readme.org index efd149a..2eacdd6 100644 --- a/Readme.org +++ b/Readme.org @@ -146,4 +146,16 @@ example/glass.sq was generated. -o --output=%s Output basename [basename] #+end_example - +* misc +** coeffploter.py + 元素を指定して、原子散乱因子と中性子散乱長をプロットする。 + +** gr2sq.py + Qの刻みを変えて再計算するために、dump2sqで生成したgrファイルから + S(Q)を計算しなおす。結晶のパターンを計算するために、$2\theta$ で$Q$ + を指定して計算することもできる。$\theta$ と$Q$ の関係は以下のとおり。 + defaultで波長は、CuのK alpha線の1.54183 Åとしている。 + $$ + Q = \frac{4\pi}{\lambda}\sin(\theta) + $$ + diff --git a/gr2sq.py b/gr2sq.py index a8039d0..03f4468 100755 --- a/gr2sq.py +++ b/gr2sq.py @@ -11,7 +11,7 @@ par = argparse.ArgumentParser(description="test") par.add_argument('grfile') par.add_argument('-q', '--qrange', nargs=2, default=None, type=float) par.add_argument('-t', '--trange', nargs=2, default=[10, 120], type=float) -par.add_argument('--pnt', default=1000>, type=int) +par.add_argument('--pnt', default=1001, type=int) par.add_argument('--lmd', default=1.54183, type=float) args = par.parse_args() @@ -1102,6 +1102,8 @@ class Data(): qmin, qmax = sorted([args.qrange[0], args.qrange[1]]) q = np.linspace(qmin, qmax, args.pnt) self.sq["Q"] = q + t = args.lmd/4/np.pi * self.sq["Q"] + self.sq["2theta"] = 2*np.arcsin(t[t < 1]) * 180/np.pi r = np.array(self.gr["r"]) dr = self.gr["r"][1] - self.gr["r"][0] coeff = 4*np.pi*self.rho/q @@ -1164,4 +1166,5 @@ class Data(): d = Data(args.grfile) + d.PlotSq() diff --git a/output.c b/output.c index 0964530..e3a2851 100644 --- a/output.c +++ b/output.c @@ -74,9 +74,9 @@ void OutputCN(COMMAND *com, HEAD *head, TYPE *type, DATASET *cn){ fprintf(f, "%15s\n", "Total"); for (i=0; in; i++){ - fprintf(f, "%14e", cn->x[i]); + fprintf(f, "%24.16e", cn->x[i]); for (j=0; jm; j++) { - fprintf(f, " %14e", cn_[i][j]); + fprintf(f, " %24.16e", cn_[i][j]); } fprintf(f, "\n"); } @@ -97,9 +97,9 @@ void OutputGr(COMMAND *com, HEAD *head, TYPE *type, DATASET *gr){ fprintf(f, "%15s\n", "Total"); for (i=0; in; i++){ - fprintf(f, "%14e", gr->x[i]); + fprintf(f, "%24.16e", gr->x[i]); for (j=0; jm; j++) { - fprintf(f, " %14e", gr->y[i][j]); + fprintf(f, " %24.16e", gr->y[i][j]); } fprintf(f, "\n"); } @@ -125,9 +125,9 @@ void OutputSQ(COMMAND *com, HEAD *head, TYPE *type, DATASET *sq){ fprintf(f, "\n"); /* データ */ for (i=0; in; i++){ - fprintf(f, "%14e", sq->x[i]); + fprintf(f, "%24.16e", sq->x[i]); for (j=0; jm; j++){ - fprintf(f, " %14e", sq->y[i][j]); + fprintf(f, " %24.16e", sq->y[i][j]); } fprintf(f, "\n"); } @@ -156,9 +156,9 @@ void OutputCoeff(COMMAND *com, HEAD *head, TYPE *type, DATASET *sq){ } fprintf(f, "\n"); for (i=0; in; i++){ - fprintf(f, " %12.6f", sq->x[i]); + fprintf(f, " %24.16e", sq->x[i]); for (j=0; jtypes; j++){ - fprintf(f, " %12.6f", type->XRDcoeff[i][j]); + fprintf(f, " %24.16e", type->XRDcoeff[i][j]); } fprintf(f, "\n"); }