toolsを整理した。cn2Iqとcn2Iq.pyを追加した。
This commit is contained in:
+103
-66
@@ -3,7 +3,7 @@
|
|||||||
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
|
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
|
||||||
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
|
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
|
||||||
<head>
|
<head>
|
||||||
<!-- 2023-04-23 日 14:57 -->
|
<!-- 2023-04-24 月 09:01 -->
|
||||||
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
|
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||||
<title>dump2sq</title>
|
<title>dump2sq</title>
|
||||||
@@ -228,27 +228,29 @@
|
|||||||
<h2>Table of Contents</h2>
|
<h2>Table of Contents</h2>
|
||||||
<div id="text-table-of-contents" role="doc-toc">
|
<div id="text-table-of-contents" role="doc-toc">
|
||||||
<ul>
|
<ul>
|
||||||
<li><a href="#org43fc4a9">はじめに</a></li>
|
<li><a href="#org1fb693c">はじめに</a></li>
|
||||||
<li><a href="#orgbfe6519">入力ファイル</a>
|
<li><a href="#org3d360c5">入力ファイル</a>
|
||||||
<ul>
|
<ul>
|
||||||
<li><a href="#org92143b8">LAMMPS</a></li>
|
<li><a href="#orgdb86d08">LAMMPS</a></li>
|
||||||
<li><a href="#org46a939b">XYZ</a></li>
|
<li><a href="#org61fd967">XYZ</a></li>
|
||||||
</ul>
|
</ul>
|
||||||
</li>
|
</li>
|
||||||
<li><a href="#orgaa87222">出力ファイル</a>
|
<li><a href="#org20edf79">出力ファイル</a>
|
||||||
<ul>
|
<ul>
|
||||||
<li><a href="#org4bbc8de">積算配位数</a></li>
|
<li><a href="#org788070c">積算配位数</a></li>
|
||||||
<li><a href="#orgb1c1caa">動径分布関数</a></li>
|
<li><a href="#org3203c1b">動径分布関数</a></li>
|
||||||
<li><a href="#org1aa9b90">構造因子</a></li>
|
<li><a href="#orgb063307">構造因子</a></li>
|
||||||
<li><a href="#org73ec849">原子散乱因子と中性子散乱長</a></li>
|
<li><a href="#org4fa713d">原子散乱因子と中性子散乱長</a></li>
|
||||||
</ul>
|
</ul>
|
||||||
</li>
|
</li>
|
||||||
<li><a href="#org2fd5e8e">インストール</a></li>
|
<li><a href="#orgdbb1636">インストール</a></li>
|
||||||
<li><a href="#org101ea22">使い方</a></li>
|
<li><a href="#org0b28eee">使い方</a></li>
|
||||||
<li><a href="#orgf466f82">misc</a>
|
<li><a href="#orge128b57">tools</a>
|
||||||
<ul>
|
<ul>
|
||||||
<li><a href="#orgfdc1020">coeffploter.py</a></li>
|
<li><a href="#org5f52764">coeffploter.py</a></li>
|
||||||
<li><a href="#orgda5455e">gr2sq.py</a></li>
|
<li><a href="#org0bc877e">gr2sq.py</a></li>
|
||||||
|
<li><a href="#org9f47a58">cn2Iq.c</a></li>
|
||||||
|
<li><a href="#org64e2a3f">cn2Iq.py</a></li>
|
||||||
</ul>
|
</ul>
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
@@ -258,9 +260,9 @@
|
|||||||
<br />
|
<br />
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<div id="outline-container-org43fc4a9" class="outline-2">
|
<div id="outline-container-org1fb693c" class="outline-2">
|
||||||
<h2 id="org43fc4a9">はじめに</h2>
|
<h2 id="org1fb693c">はじめに</h2>
|
||||||
<div class="outline-text-2" id="text-org43fc4a9">
|
<div class="outline-text-2" id="text-org1fb693c">
|
||||||
<p>
|
<p>
|
||||||
複数の時間ステップからなる時間ステップの構造データから、動径分布関数
|
複数の時間ステップからなる時間ステップの構造データから、動径分布関数
|
||||||
\(g(r)\) 、積算配位数 \(CN(r)\) 、構造因子 \(S(Q)\) を計算するプログラムです。
|
\(g(r)\) 、積算配位数 \(CN(r)\) 、構造因子 \(S(Q)\) を計算するプログラムです。
|
||||||
@@ -283,16 +285,16 @@ Triclinicなセルでも計算できます。原子ペア毎の\(S(Q)\) を計
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div id="outline-container-orgbfe6519" class="outline-2">
|
<div id="outline-container-org3d360c5" class="outline-2">
|
||||||
<h2 id="orgbfe6519">入力ファイル</h2>
|
<h2 id="org3d360c5">入力ファイル</h2>
|
||||||
<div class="outline-text-2" id="text-orgbfe6519">
|
<div class="outline-text-2" id="text-org3d360c5">
|
||||||
<p>
|
<p>
|
||||||
拡張子で入力ファイルのformatを判断しています。
|
拡張子で入力ファイルのformatを判断しています。
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
<div id="outline-container-org92143b8" class="outline-3">
|
<div id="outline-container-orgdb86d08" class="outline-3">
|
||||||
<h3 id="org92143b8">LAMMPS</h3>
|
<h3 id="orgdb86d08">LAMMPS</h3>
|
||||||
<div class="outline-text-3" id="text-org92143b8">
|
<div class="outline-text-3" id="text-orgdb86d08">
|
||||||
<p>
|
<p>
|
||||||
dumpコマンドで生成したファイルで、拡張子は.trajectryです。1ス
|
dumpコマンドで生成したファイルで、拡張子は.trajectryです。1ス
|
||||||
テップ目で原子のならび決めて、2ステップ目以降は、同じ原子の並びとし
|
テップ目で原子のならび決めて、2ステップ目以降は、同じ原子の並びとし
|
||||||
@@ -301,22 +303,22 @@ dumpコマンドで生成したファイルで、拡張子は.trajectryです。
|
|||||||
のため、以下のようにdumpとdump_modifyで元素記号の出力し、idでsortし
|
のため、以下のようにdumpとdump_modifyで元素記号の出力し、idでsortし
|
||||||
ておく必要があります。
|
ておく必要があります。
|
||||||
</p>
|
</p>
|
||||||
<pre class="example" id="org3682e1f">
|
<pre class="example" id="orgf547c21">
|
||||||
dump 1 all custom 10 hoge.lammpstrj id type element x y z
|
dump 1 all custom 10 hoge.lammpstrj id type element x y z
|
||||||
dump_modify 1 element Si O sort id
|
dump_modify 1 element Si O sort id
|
||||||
</pre>
|
</pre>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div id="outline-container-org46a939b" class="outline-3">
|
<div id="outline-container-org61fd967" class="outline-3">
|
||||||
<h3 id="org46a939b">XYZ</h3>
|
<h3 id="org61fd967">XYZ</h3>
|
||||||
<div class="outline-text-3" id="text-org46a939b">
|
<div class="outline-text-3" id="text-org61fd967">
|
||||||
<p>
|
<p>
|
||||||
xyz形式で、拡張子は.xyzまたは.10です。す。1行目に原子数、2行目に
|
xyz形式で、拡張子は.xyzまたは.10です。す。1行目に原子数、2行目に
|
||||||
Step数と、格子定数を記述しておきます。alpha, beta, gammaがない場合
|
Step数と、格子定数を記述しておきます。alpha, beta, gammaがない場合
|
||||||
は、90, 90, 90とします。3行目以降にデータがならびます。2ステップ目
|
は、90, 90, 90とします。3行目以降にデータがならびます。2ステップ目
|
||||||
以降も同じ形式でデータを並べます。
|
以降も同じ形式でデータを並べます。
|
||||||
</p>
|
</p>
|
||||||
<pre class="example" id="org29c0781">
|
<pre class="example" id="orgc4e85d6">
|
||||||
420
|
420
|
||||||
Step 225837 18.4116484 18.4116484 18.4116484 90 90 90
|
Step 225837 18.4116484 18.4116484 18.4116484 90 90 90
|
||||||
Si 10.560073 17.438902 6.614775
|
Si 10.560073 17.438902 6.614775
|
||||||
@@ -330,41 +332,41 @@ O 17.812448 0.110128 0.3462461
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
||||||
<div id="outline-container-orgaa87222" class="outline-2">
|
<div id="outline-container-org20edf79" class="outline-2">
|
||||||
<h2 id="orgaa87222">出力ファイル</h2>
|
<h2 id="org20edf79">出力ファイル</h2>
|
||||||
<div class="outline-text-2" id="text-orgaa87222">
|
<div class="outline-text-2" id="text-org20edf79">
|
||||||
<p>
|
<p>
|
||||||
4つのファイルに拡張子を追加して出力します。basenameは、指定しなけれ
|
4つのファイルに拡張子を追加して出力します。basenameは、指定しなけれ
|
||||||
ば、インプットファイルと同じになります。
|
ば、インプットファイルと同じになります。
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
<div id="outline-container-org4bbc8de" class="outline-3">
|
<div id="outline-container-org788070c" class="outline-3">
|
||||||
<h3 id="org4bbc8de">積算配位数</h3>
|
<h3 id="org788070c">積算配位数</h3>
|
||||||
<div class="outline-text-3" id="text-org4bbc8de">
|
<div class="outline-text-3" id="text-org788070c">
|
||||||
<p>
|
<p>
|
||||||
拡張子はcnです。原子ペア毎の \(CN(r)\) が保存されています。
|
拡張子はcnです。原子ペア毎の \(CN(r)\) が保存されています。
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div id="outline-container-orgb1c1caa" class="outline-3">
|
<div id="outline-container-org3203c1b" class="outline-3">
|
||||||
<h3 id="orgb1c1caa">動径分布関数</h3>
|
<h3 id="org3203c1b">動径分布関数</h3>
|
||||||
<div class="outline-text-3" id="text-orgb1c1caa">
|
<div class="outline-text-3" id="text-org3203c1b">
|
||||||
<p>
|
<p>
|
||||||
拡張子はgrです。原子ペア毎の \(g(r)\) と全原子 \(G(r)\) が保存されています。
|
拡張子はgrです。原子ペア毎の \(g(r)\) と全原子 \(G(r)\) が保存されています。
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div id="outline-container-org1aa9b90" class="outline-3">
|
<div id="outline-container-orgb063307" class="outline-3">
|
||||||
<h3 id="org1aa9b90">構造因子</h3>
|
<h3 id="orgb063307">構造因子</h3>
|
||||||
<div class="outline-text-3" id="text-org1aa9b90">
|
<div class="outline-text-3" id="text-orgb063307">
|
||||||
<p>
|
<p>
|
||||||
拡張子はsqです。原子ペア毎の \(S(Q)\) とX線と中性子で観測される \(S(Q)\) が保存されています。
|
拡張子はsqです。原子ペア毎の \(S(Q)\) とX線と中性子で観測される \(S(Q)\) が保存されています。
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div id="outline-container-org73ec849" class="outline-3">
|
<div id="outline-container-org4fa713d" class="outline-3">
|
||||||
<h3 id="org73ec849">原子散乱因子と中性子散乱長</h3>
|
<h3 id="org4fa713d">原子散乱因子と中性子散乱長</h3>
|
||||||
<div class="outline-text-3" id="text-org73ec849">
|
<div class="outline-text-3" id="text-org4fa713d">
|
||||||
<p>
|
<p>
|
||||||
拡張子はcoeffです。中性子散乱長と原子散乱因子を出力します。原子散乱
|
拡張子はcoeffです。中性子散乱長と原子散乱因子を出力します。原子散乱
|
||||||
因子は、<a href="https://www.szfki.hu/~nphys/rmc++/downloads.html">xcoeff.f</a>から抽出しています。中性子散乱長は、<a href="https://www.ncnr.nist.gov/resources/n-lengths/">NIST</a>のデータを
|
因子は、<a href="https://www.szfki.hu/~nphys/rmc++/downloads.html">xcoeff.f</a>から抽出しています。中性子散乱長は、<a href="https://www.ncnr.nist.gov/resources/n-lengths/">NIST</a>のデータを
|
||||||
@@ -374,9 +376,9 @@ O 17.812448 0.110128 0.3462461
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div id="outline-container-org2fd5e8e" class="outline-2">
|
<div id="outline-container-orgdbb1636" class="outline-2">
|
||||||
<h2 id="org2fd5e8e">インストール</h2>
|
<h2 id="orgdbb1636">インストール</h2>
|
||||||
<div class="outline-text-2" id="text-org2fd5e8e">
|
<div class="outline-text-2" id="text-orgdbb1636">
|
||||||
<p>
|
<p>
|
||||||
プログラムはCで作成しています。Cのコンパイラを準備してmakeしてください。
|
プログラムはCで作成しています。Cのコンパイラを準備してmakeしてください。
|
||||||
ダウンロードして単にmakeしてください。
|
ダウンロードして単にmakeしてください。
|
||||||
@@ -386,25 +388,25 @@ O 17.812448 0.110128 0.3462461
|
|||||||
<a href="dump2sq-1.0.tar.gz">dump2sq-1.0.tar.gz</a>
|
<a href="dump2sq-1.0.tar.gz">dump2sq-1.0.tar.gz</a>
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<pre class="example" id="org7f02d9b">
|
<pre class="example" id="orge7646c4">
|
||||||
make
|
make
|
||||||
</pre>
|
</pre>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div id="outline-container-org101ea22" class="outline-2">
|
<div id="outline-container-org0b28eee" class="outline-2">
|
||||||
<h2 id="org101ea22">使い方</h2>
|
<h2 id="org0b28eee">使い方</h2>
|
||||||
<div class="outline-text-2" id="text-org101ea22">
|
<div class="outline-text-2" id="text-org0b28eee">
|
||||||
<p>
|
<p>
|
||||||
並列計算のために、環境変数をセットしてスレッド数を指定しておく。
|
並列計算のために、環境変数をセットしてスレッド数を指定しておく。
|
||||||
</p>
|
</p>
|
||||||
<pre class="example" id="orga6c3daf">
|
<pre class="example" id="org5be6b90">
|
||||||
export OMP_NUM_THREADS=4
|
export OMP_NUM_THREADS=4
|
||||||
</pre>
|
</pre>
|
||||||
<p>
|
<p>
|
||||||
example以下のglass.lammpstrjを引数で渡して実行してみます。
|
example以下のglass.lammpstrjを引数で渡して実行してみます。
|
||||||
</p>
|
</p>
|
||||||
<pre class="example" id="org75e677e">
|
<pre class="example" id="org05c3b6e">
|
||||||
dump2sq example/glass.lammpstrj
|
dump2sq example/glass.lammpstrj
|
||||||
</pre>
|
</pre>
|
||||||
<p>
|
<p>
|
||||||
@@ -412,7 +414,7 @@ dump2sq example/glass.lammpstrj
|
|||||||
さの半分としています。プログラムが実行されると、次のように出力されて、
|
さの半分としています。プログラムが実行されると、次のように出力されて、
|
||||||
4つのファイルが出力されます。
|
4つのファイルが出力されます。
|
||||||
</p>
|
</p>
|
||||||
<pre class="example" id="org3066764">
|
<pre class="example" id="orgdaa7dff">
|
||||||
basename: example/glass
|
basename: example/glass
|
||||||
Maximum cell length = 17.284100
|
Maximum cell length = 17.284100
|
||||||
Rmax = 8.642050
|
Rmax = 8.642050
|
||||||
@@ -441,7 +443,7 @@ example/glass.sq was generated.
|
|||||||
値です。GRmaxは、セルサイズを超えても計算できますが、物理的な意味は
|
値です。GRmaxは、セルサイズを超えても計算できますが、物理的な意味は
|
||||||
ないでしょう。
|
ないでしょう。
|
||||||
</p>
|
</p>
|
||||||
<pre class="example" id="orgfe36c9f">
|
<pre class="example" id="org7b72f5c">
|
||||||
./dump2sq -h
|
./dump2sq -h
|
||||||
usage: dump2sq [options] inputfile
|
usage: dump2sq [options] inputfile
|
||||||
inputfile format
|
inputfile format
|
||||||
@@ -461,22 +463,23 @@ options:
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div id="outline-container-orgf466f82" class="outline-2">
|
<div id="outline-container-orge128b57" class="outline-2">
|
||||||
<h2 id="orgf466f82">misc</h2>
|
<h2 id="orge128b57">tools</h2>
|
||||||
<div class="outline-text-2" id="text-orgf466f82">
|
<div class="outline-text-2" id="text-orge128b57">
|
||||||
</div>
|
</div>
|
||||||
<div id="outline-container-orgfdc1020" class="outline-3">
|
<div id="outline-container-org5f52764" class="outline-3">
|
||||||
<h3 id="orgfdc1020">coeffploter.py</h3>
|
<h3 id="org5f52764">coeffploter.py</h3>
|
||||||
<div class="outline-text-3" id="text-orgfdc1020">
|
<div class="outline-text-3" id="text-org5f52764">
|
||||||
<p>
|
<p>
|
||||||
元素を指定して、原子散乱因子と中性子散乱長をプロットする。
|
元素を指定して、原子散乱因子と中性子散乱長をプロットする。引数に元
|
||||||
|
素名を複数していできる。
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div id="outline-container-orgda5455e" class="outline-3">
|
<div id="outline-container-org0bc877e" class="outline-3">
|
||||||
<h3 id="orgda5455e">gr2sq.py</h3>
|
<h3 id="org0bc877e">gr2sq.py</h3>
|
||||||
<div class="outline-text-3" id="text-orgda5455e">
|
<div class="outline-text-3" id="text-org0bc877e">
|
||||||
<p>
|
<p>
|
||||||
Qの刻みを変えて再計算するために、dump2sqで生成したgrファイルから
|
Qの刻みを変えて再計算するために、dump2sqで生成したgrファイルから
|
||||||
S(Q)を計算しなおす。結晶のパターンを計算するために、\(2\theta\) で\(Q\)
|
S(Q)を計算しなおす。結晶のパターンを計算するために、\(2\theta\) で\(Q\)
|
||||||
@@ -485,6 +488,40 @@ defaultで波長は、CuのK alpha線の1.54183 Åとしている。
|
|||||||
\[
|
\[
|
||||||
Q = \frac{4\pi}{\lambda}\sin(\theta)
|
Q = \frac{4\pi}{\lambda}\sin(\theta)
|
||||||
\]
|
\]
|
||||||
|
計算した$S(Q)$はpngとxlsxを生成する
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div id="outline-container-org9f47a58" class="outline-3">
|
||||||
|
<h3 id="org9f47a58">cn2Iq.c</h3>
|
||||||
|
<div class="outline-text-3" id="text-org9f47a58">
|
||||||
|
<p>
|
||||||
|
dump2sqで生成された*.cnと*.coeffから$I(q)$を計算するCプログラム。
|
||||||
|
openmpでスレッド並列する。f*fは足していない。sincのwindow関数をかけ
|
||||||
|
る。コンパイルは、
|
||||||
|
</p>
|
||||||
|
<pre class="example" id="orgbd8abab">
|
||||||
|
gcc -fopenmp -O3 -Wall cn2Iq.c -o cn2Iq
|
||||||
|
</pre>
|
||||||
|
<p>
|
||||||
|
実行は、*.cnと*.coeffを渡す。I(q)は標準出力に出力されうr.
|
||||||
|
</p>
|
||||||
|
<pre class="example" id="org64cabbd">
|
||||||
|
./cn2Iq fort.cn fort.cn.coeff
|
||||||
|
</pre>
|
||||||
|
<p>
|
||||||
|
複数のcnファイルやxslxに保存したい場合は、cn2Iq.pyを使う。
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div id="outline-container-org64e2a3f" class="outline-3">
|
||||||
|
<h3 id="org64e2a3f">cn2Iq.py</h3>
|
||||||
|
<div class="outline-text-3" id="text-org64e2a3f">
|
||||||
|
<p>
|
||||||
|
subprocessでCのcn2Iqを呼び出して、I(Q)のpngとxlsxを生成する。Qの範囲
|
||||||
|
またはthetaの範囲を指定できる。
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -492,7 +529,7 @@ defaultで波長は、CuのK alpha線の1.54183 Åとしている。
|
|||||||
</div>
|
</div>
|
||||||
<div id="postamble" class="status">
|
<div id="postamble" class="status">
|
||||||
<p class="author">Author: 大窪 貴洋</p>
|
<p class="author">Author: 大窪 貴洋</p>
|
||||||
<p class="date">Created: 2023-04-23 日 14:57</p>
|
<p class="date">Created: 2023-04-24 月 09:01</p>
|
||||||
<p class="validation"><a href="https://validator.w3.org/check?uri=referer">Validate</a></p>
|
<p class="validation"><a href="https://validator.w3.org/check?uri=referer">Validate</a></p>
|
||||||
</div>
|
</div>
|
||||||
</body>
|
</body>
|
||||||
|
|||||||
+22
-2
@@ -146,9 +146,10 @@ example/glass.sq was generated.
|
|||||||
-o --output=%s Output basename [basename]
|
-o --output=%s Output basename [basename]
|
||||||
#+end_example
|
#+end_example
|
||||||
|
|
||||||
* misc
|
* tools
|
||||||
** coeffploter.py
|
** coeffploter.py
|
||||||
元素を指定して、原子散乱因子と中性子散乱長をプロットする。
|
元素を指定して、原子散乱因子と中性子散乱長をプロットする。引数に元
|
||||||
|
素名を複数していできる。
|
||||||
|
|
||||||
** gr2sq.py
|
** gr2sq.py
|
||||||
Qの刻みを変えて再計算するために、dump2sqで生成したgrファイルから
|
Qの刻みを変えて再計算するために、dump2sqで生成したgrファイルから
|
||||||
@@ -158,4 +159,23 @@ example/glass.sq was generated.
|
|||||||
$$
|
$$
|
||||||
Q = \frac{4\pi}{\lambda}\sin(\theta)
|
Q = \frac{4\pi}{\lambda}\sin(\theta)
|
||||||
$$
|
$$
|
||||||
|
計算した$S(Q)$はpngとxlsxを生成する
|
||||||
|
|
||||||
|
** cn2Iq.c
|
||||||
|
dump2sqで生成された*.cnと*.coeffから$I(q)$を計算するCプログラム。
|
||||||
|
openmpでスレッド並列する。f*fは足していない。sincのwindow関数をかけ
|
||||||
|
る。コンパイルは、
|
||||||
|
#+begin_example
|
||||||
|
gcc -fopenmp -O3 -Wall cn2Iq.c -o cn2Iq
|
||||||
|
#+end_example
|
||||||
|
実行は、*.cnと*.coeffを渡す。I(q)は標準出力に出力されうr.
|
||||||
|
#+begin_example
|
||||||
|
./cn2Iq fort.cn fort.cn.coeff
|
||||||
|
#+end_example
|
||||||
|
複数のcnファイルやxslxに保存したい場合は、cn2Iq.pyを使う。
|
||||||
|
|
||||||
|
** cn2Iq.py
|
||||||
|
subprocessでCのcn2Iqを呼び出して、I(Q)のpngとxlsxを生成する。Qの範囲
|
||||||
|
またはthetaの範囲を指定できる。
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
+129
@@ -0,0 +1,129 @@
|
|||||||
|
#include "stdio.h"
|
||||||
|
#include "stdlib.h"
|
||||||
|
#include "string.h"
|
||||||
|
#include "math.h"
|
||||||
|
|
||||||
|
typedef struct{
|
||||||
|
int m; /* 行 */
|
||||||
|
int n; /* 列 */
|
||||||
|
double *x;
|
||||||
|
double **y;
|
||||||
|
}DATA;
|
||||||
|
|
||||||
|
void Init(FILE *cn, FILE *coeff, DATA *rdata, DATA *qdata,
|
||||||
|
DATA *cdata){
|
||||||
|
char buf[1024];
|
||||||
|
int i;
|
||||||
|
int rsize, qsize, pairsize;
|
||||||
|
|
||||||
|
while (fgets(buf, sizeof(buf), cn)){
|
||||||
|
if (buf[0] != '#') break;
|
||||||
|
}
|
||||||
|
rsize = 1;
|
||||||
|
while (fgets(buf, sizeof(buf), cn)){
|
||||||
|
rsize++;
|
||||||
|
}
|
||||||
|
fgets(buf, sizeof(buf), coeff);
|
||||||
|
sscanf(buf, "%d", &qsize);
|
||||||
|
fgets(buf, sizeof(buf), coeff);
|
||||||
|
sscanf(buf, "%d", &pairsize);
|
||||||
|
|
||||||
|
rdata->m = rsize;
|
||||||
|
rdata->n = pairsize;
|
||||||
|
rdata->x = malloc(rsize * sizeof(double));
|
||||||
|
rdata->y = malloc(rsize * sizeof(double*));
|
||||||
|
for (i=0; i<rsize; i++) {
|
||||||
|
rdata->y[i] = malloc(pairsize * sizeof(double));
|
||||||
|
}
|
||||||
|
qdata->m = qsize;
|
||||||
|
qdata->n = pairsize;
|
||||||
|
qdata->x = malloc(qsize * sizeof(double));
|
||||||
|
qdata->y = malloc(qsize * sizeof(double*));
|
||||||
|
cdata->m = qsize;
|
||||||
|
cdata->n = pairsize;
|
||||||
|
cdata->x = malloc(qsize * sizeof(double));
|
||||||
|
cdata->y = malloc(qsize * sizeof(double*));
|
||||||
|
for (i=0; i<qsize; i++) {
|
||||||
|
qdata->y[i] = malloc(pairsize * sizeof(double));
|
||||||
|
cdata->y[i] = malloc(pairsize * sizeof(double));
|
||||||
|
}
|
||||||
|
rewind(cn);
|
||||||
|
rewind(coeff);
|
||||||
|
}
|
||||||
|
|
||||||
|
void SetData(FILE *cn, FILE *coeff, DATA *rdata, DATA *cdata){
|
||||||
|
int i, j;
|
||||||
|
char buf[1024];
|
||||||
|
char *tok;
|
||||||
|
|
||||||
|
while (fgets(buf, sizeof(buf), cn)){
|
||||||
|
if (buf[0] != '#') break;
|
||||||
|
}
|
||||||
|
for (i=0; i<rdata->m; i++){
|
||||||
|
tok = strtok(buf, " "); // 半角スペース区切りでパース
|
||||||
|
rdata->x[i] = atof(tok);
|
||||||
|
for (j=0; j<rdata->n; j++) {
|
||||||
|
tok = strtok(NULL, " ");
|
||||||
|
rdata->y[i][j] = atof(tok);
|
||||||
|
}
|
||||||
|
fgets(buf, sizeof(buf), cn);
|
||||||
|
}
|
||||||
|
/* 積算配位数からC(r)に変換 */
|
||||||
|
for (i=rdata->m-1; i>0; i--){
|
||||||
|
for (j=0; j<rdata->n; j++){
|
||||||
|
rdata->y[i][j] = rdata->y[i][j] - rdata->y[i-1][j];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/* 原子散乱因子 */
|
||||||
|
for (i=0; i<3; i++){
|
||||||
|
fgets(buf, sizeof(buf), coeff);
|
||||||
|
}
|
||||||
|
for (i=0; i<cdata->m; i++){
|
||||||
|
tok = strtok(buf, " "); // 半角スペース区切りでパース
|
||||||
|
cdata->x[i] = atof(tok);
|
||||||
|
for (j=0; j<cdata->n; j++) {
|
||||||
|
tok = strtok(NULL, " ");
|
||||||
|
cdata->y[i][j] = atof(tok);
|
||||||
|
}
|
||||||
|
fgets(buf, sizeof(buf), coeff);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
int main(int argn, char **argv){
|
||||||
|
FILE *cn, *coeff;
|
||||||
|
DATA rdata, qdata, cdata;
|
||||||
|
int i, j, k;
|
||||||
|
double q, r;
|
||||||
|
double Rc;
|
||||||
|
|
||||||
|
cn = fopen(argv[1], "r");
|
||||||
|
coeff = fopen(argv[2], "r");
|
||||||
|
Init(cn, coeff, &rdata, &cdata, &qdata);
|
||||||
|
SetData(cn, coeff, &rdata, &cdata);
|
||||||
|
for (i=0; i<cdata.m; i++) {
|
||||||
|
qdata.x[i] = cdata.x[i];
|
||||||
|
for (j=0; j<cdata.n; j++) {
|
||||||
|
qdata.y[i][j] = 0.0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Rc = rdata.x[rdata.m-1];
|
||||||
|
|
||||||
|
#pragma omp parallel for private(j, k, q, r)
|
||||||
|
for (i=0; i<cdata.m; i++){
|
||||||
|
for (j=0; j<cdata.n; j++){
|
||||||
|
for (k=0; k<rdata.m; k++){
|
||||||
|
q = cdata.x[i];
|
||||||
|
r = rdata.x[k];
|
||||||
|
qdata.y[i][j] = qdata.y[i][j] + rdata.y[k][j] * cdata.y[i][j] * sin(q*r)/q/r
|
||||||
|
* sin(M_PI*r/Rc)/(M_PI*r/Rc);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
for (i=0; i<qdata.m; i++){
|
||||||
|
for (j=0; j<qdata.n; j++){
|
||||||
|
printf("%24.16e", qdata.y[i][j]);
|
||||||
|
}
|
||||||
|
printf("\n");
|
||||||
|
}
|
||||||
|
}
|
||||||
Executable
+1150
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user