Programs Memo
リンク
NuShell@MSU
Windows 7 に インストール
Windows 7 (32 bit) に NuShell@MSU をインストールした。32 bit だけでなく 64 bit の PC でも動く。インストールで使用したファイルは D.S. Jodson 氏のページ (http://ns.ph.liv.ac.uk/~dsj/NuShell/) の NuShell@MSU.zip。インストール方法は、この zip ファイル内の Nushel\help\help.pdf の 2 章: Setup and login に書いてある。一応、自分用に以下にインストール方法をまとめておく。次の手順を踏めば、インストールできるはず。インストールといっても、インストーラは使わず、ファイルをコピーして幾つかのファイルをいじるだけで良い。64 bit 環境でも動くようだ。
- C: ドライブ直下に aaa というフォルダを作成(C:\aaa)。
C:\aaa に NuShell@MSU.zip を持ってきてそこで展開。
C:\aaa\NuShell というフォルダが出来るはず。中に入っているフォルダは次の通り。もし解凍プログラムの関係で C:\aaa\NuShell@MSU\NuShell というディレクトリ構造になったら、C:\aaa\NuShell にする。
be, data, exe, help, login, mass, nu, nufor, pot, rsh, rsh-example, speplot, sps, spsn
NuShell の名前を nushell に変更(C:\aaa\NuShell -> C:\aaa\nushell)(もしや必要ない作業?)。
C:\aaa\nushell\login\login.bat の中身を確認(ファイルを右クリックして"編集")。書き換えなくて良い。C:\aaa ディレクトリ以外に NuShell をインストールしたい場合は、この login.dat ファイルを書き換えれば良い?(インストールしたドライブが違う場合は、\aaa\nushell\login\nushell-dir.dat を書きかえるようだ。フォルダ名は X:\aaa じゃないとうまくいかない。他のフォルダにインストールする場合は、nushell-dir.dat ファイルを適切に編集し、shell を実行するフォルダの一つ上のフォルダに置けば良いようだ。)このファイルで NuShell の実行ファイル(*.exe)がある場所を指定している(path の設定)。その他にもいろいろ設定しているようだ。NuShell に login したときに、これらの設定が読み込まれる。
set disknu=c: call ifortvars101021 set nudir=\aaa\nushell\ set path=%path%;%nudir%exe\
- C:\aaa\nushell\login\Nushell-command-prompt というリンクファイルを自分がアクセスしやすい場所(例えばデスクトップ)に置く。さらにこのファイルのプロパティを開き、作業フォルダーを h:\aaa\nushell\login から c:\aaa\nushell\login に変更。
作業フォルダー(S) : h:\aaa\nushell\login ↓ 作業フォルダー(S) : c:\aaa\nushell\login
この Nushell-command-prompt をダブルクリックすれば、NuShell にログインできる。ログイン画面は次の通り。ログイン時にやっていることは、コマンドプロンプトを立ち上げ、login.bat でさまざまな環境変数(?)の設定を行い、作業フォルダーに移動しているだけのようだ。
c:\aaa\nushell\login>set disknu=c: c:\aaa\nushell\login>call ifortvars101021 Intel(R) Visual Fortran Compiler for applications running on IA-32, Version 10.1.021 Copyright (C) 1985-2008 Intel Corporation. All rights reserved. c:\aaa\nushell\login>_
計算する
PRC 74, 034315 (2006) の束縛エネルギーとスペクトルを再現
近藤さんの oxbash のメモや Manual を見つつ、PRC 74, 034315 (2006) にある、A=26 の Al, Mg, Na, Ne, F, O の束縛エネルギーと励起エネルギーのスペクトルが再現できるか試した。論文中では、+ parity のみを計算しているようなので、それに従う。 モデルスペースは sd シェルであるので、 偶々核に対して計算しているので、 + parity のみ計算すればよい。
26Mg の計算例
NuShell にログインする(上述の Nushell-command-prompt をダブルクリック)。
コマンドプロンプトで rsh フォルダーに移動し、26Mg フォルダーを作ってそこに移動し、そこで shell を実行。具体的には、以下のコマンドを打つ。&:: の後ろはコメント。
c:\aaa\nushell\login>sd rsh &:: rsh フォルダーに移動 c:\aaa\nushell\rsh>md 26Mg &:: 26Mg フォルダーを作成 c:\aaa\nushell\rsh\26Mg>sd 26Mg &:: 26Mg フォルダーに移動 c:\aaa\nushell\rsh\26Mg>shell &:: shell を起動。
- shell を実行すると、対話的に 26Mg の計算に必要なバッチファイルが作成できる(26Mg.bat)。後でこのバッチファイルを実行して、実際の Shell Model 計算を行う。shell の回答例は次の通り。
Using \aaa\nushell\login\nushell-dir.dat this is nushell for windows directory for exe files > c:\aaa\nushell\exe\ directory for old sps and int files > c:\aaa\nushell\sps\ directory for new sps and int files > c:\aaa\nushell\spsn\ ( using label.dat from area c:\aaa\nushell\sps\ ) name for batch file (h=help) :26Mg option (lpe, den, help or st) :lpe model space (*.sp) name: sd ( using sd.sp from area c:\aaa\nushell\sps\ ) number of valence particles :10 any restrictions (y/n) :n interaction (*.int) name : usdb min, max J (f,f) :0.,10. min, max T (f,f) :1.,1. J,T to leave out (end with zero or blank) : parity (0 for +) (1 for -) (2 for both) :0 tbme norm = 0.8955 = ( 16.0/ 18.0)^ 0.30000 from first line in usdb.int wavefunctions with output labels b020ab.lpe b220ab.lpe b420ab.lpe b620ab.lpe b820ab.lpe ba20ab.lpe bc20ab.lpe be20ab.lpe bg20ab.lpe bi20ab.lpe bk20ab.lpe option (lpe, den, help or st) :st the batch file name is 26Mg.bat c:\aaa\nushell\rsh\26Mg>
各回答の意味は次の通り。- name for batch file (h=help) :26Mg
- バッチファイルの名前を決める。これで 26Mg.bat というバッチファイルが出来る。
- option (lpe, den, help or st) :lpe
- 波動関数の計算をするというオプション。このオプションを選べば、束縛エネルギーと励起エネルギーも同時に計算される。lpe, 5 などと書けば、各 J に対し最大 5 個の波動関数を計算することになる。
- model space (*.sp) name: sd
Model space として sd.sp ファイルで指定したものを使う。sd.sp ではその名の通り、 sd-shell を Model space にしている。 *.sp ファイルは、c:\aaa\nushell\sps\ にある。また、c:\aaa\nushell\sps\label.dat にその解説が書いてある。この label.dat ファイルは、Model space code と Interaction code の 割り当てにも使われているようだ。ちなみに interaction として WBP や WBT を用いたい場合、psd のモデルスペースを選択してもうまく計算できないようだ。psd の model space で WBP や WBT を用いたい場合、 spsdpf を選択し、下の any restrictions の項目で、 p-shell と sd-shell だけ計算するように model space を制限すれば良い。
- number of valence particles :10
上で選んだ model space に入れるバレンス核子の数を書く。ここでは、sd-shell を選択しているので、陽子側と中性子側の sd-shell 内にある核子(陽子+中性子)の数を書く。コアは、s-shell (0s1/2 軌道) と p-shell (0p3/2, 0p1/2 軌道) であるため、陽子 8 個と中性子 8 個がコアに入っている核子となる。26Mg の陽子数は 12, 中性子は 14 であるため、バレンスの核子は陽子側 : 12 - 8 = 4, 中性子側 14 - 8 = 6 で合計 10 個となる。もし model space として spsdpf (s-shell, p-shell, sd-shell, pf-shell を含む) を選んだ場合、コアはないので、すべての核子数 26 を入力。spsdpf を選んだ場合、 model space として広すぎるので、通常、下の restrictions の項目で制限を加える。
- any restrictions (y/n) :n
- モデルスペースに制限を加えるない場合 n とする。
- interaction (*.int) name : usdb
- Interaction として usdb.int ファイルで指定したものを使う。usdb.int はその名の通り、 USDB 相互作用を意味する。 *.int ファイルは、c:\aaa\nushell\sps\ にある。また、c:\aaa\nushell\sps\label.dat にその解説が書いてある。
- min, max J (f,f) :0.,10.
- 計算する原子核のスピン(全角運動量)を指定する。 基底状態や、低励起状態のみを考える場合は、最大 J = 10 程度で十分なようだ。Yrast line が示すように、さらに J が大きい状態は低励起状態に現れないはず。そもそも核子の組み方を考えれば、最大値がわかるかも。
- min, max T (f,f) :1.,1.
計算する原子核のアイソスピンを指定する。 26Mg の場合、Tz = (Z-N)/2 = (14-12)/2 = 1 なので、T >= 1 の場合を考えれば良い。基底状態や、低励起状態のみを考える場合は T = Tz = 1 とすれば良いようだ?
- J,T to leave out (end with zero or blank) :
- 空白を指定すると J,T には制限を加えない。
- parity (0 for +) (1 for -) (2 for both) :0
- 論文と合わせるために 0 を指定して positive parity のみを考えることにする。1 で negative parity, 2 で両方の計算を行う。
- option (lpe, den, help or st) :st
- st で計算をストップ。これで、26Mg.bat が作成される。
- name for batch file (h=help) :26Mg
- 次のように 26Mg.bat を実行すると Shell Model の計算が始まる。
c:\aaa\nushell\rsh\26Mg>26Mg
- 多くの計算結果が出力される。今必要なのは束縛エネルギーと励起エネルギーであるが、これは 26Mg.lpt というファイルに次のように出力される。
Interaction file information from 26Mg.mit spe taken from first line in *.int file Interaction spe-norm tbme-norm spe usdb 1.00000 0.89555 2.1117 -3.9257 -3.2079 16.0000 18.0000 0.3000 N name Njtp T E(MeV) J Ex(MeV) (* for yrast) 1 b020ab 1 1 -105.521 0 + 0.000 * 2 b420ab 1 1 -103.624 2 + 1.897 * 3 b420ab 2 1 -102.514 2 + 3.007 4 b020ab 2 1 -101.886 0 + 3.635 5 b620ab 1 1 -101.638 3 + 3.883 * 6 b620ab 2 1 -101.204 3 + 4.317 7 b820ab 1 1 -101.156 4 + 4.365 * 8 b420ab 3 1 -101.071 2 + 4.450 ...
b020ab ^^^^^^ |||||`- 相互作用コード (c:\aaa\nushell\sps\label.dat 内参照) ||||`-- バレンス核子の数 (10 以上は a, b, c, ... と表される) |||`--- parity (0:+,1:-) ||`---- 2*T |`----- 2*J `------ モデルスペースコード (c:\aaa\nushell\sps\label.dat 内参照)
NuShell@MSU V1.0 R1.000 B.A. Brown and W.D.M. Rae 2007 Based on NuShell code by W.D.M. Rae, Garsington, Oxford, UK, 2006/7 onejtih 2*J, 2*T 0 2 Lowest Energy Levels Level 1 E= -105.521 MeV Parity + 1.325 % Partition 3 5 2 1.507 % Partition 3 6 1 6.524 % Partition 2 6 2 3.120 % Partition 2 7 1 1.741 % Partition 4 6 0 2.599 % Partition 3 7 0 5.208 % Partition 1 7 2 1.317 % Partition 1 6 3 5.423 % Partition 1 8 1 14.729 % Partition 2 8 0 1.241 % Partition 0 7 3 13.437 % Partition 0 8 2 4.944 % Partition 1 9 0 3.161 % Partition 0 9 1 2.091 % Partition 0 6 4 28.364 % Partition 0 10 0 Average n 0.976 8.107 0.917 Norm, total %, total n 1.000000 100.0000 10.00000 Level 2 E= -101.886 MeV Parity + 2.694 % Partition 3 5 2 1.446 % Partition 4 5 1 5.936 % Partition 3 6 1 ...
計算結果のプロット
26Al, 26Mg, 26Na, 26Ne, 26F, 26O について計算を行い、26Al.lpt, 26Mg.lpt, ... を得る。これを図示するには、うまいプログラムがあるのだろうか?とりあえず、Linux にデータをコピーし PAW で表示すると以下のようになる。sm.kumac というマクロを用いた。マクロ内では、awk を使い 26Al.lpt の各準位のエネルギーとスピンパリティを抜き出して、26Al.lpt.part というファイルに書き出している。*.lpt を置いたディレクトリは、leveldir で指定。
縦軸は励起準位のエネルギーを表し、棒の長さは原子核のスピン J (J = 0, 1, 2... )を表す。パリティは、ここではすべて正である。これは PRC 74, 034315 (2006) の図を再現しており、束縛エネルギーもほぼ合っている。同じ図は、Brown 氏のページにもある: al26.jpg, mg26.jpg, na26.jpg, ne26.jpg, f_26.jpg, o_26.jpg。
エラー
問題と対処
- 計算をしていたら、次のようなエラーが出るようになった。仮想メモリを増したら直った。
c:\aaa\nushell\rsh\26Ne>call nush 26Ne b060ab 1>b060ab.cpu 指定されたプログラムは実行できません。 forrtl: severe (24): end-of-file during read, unit 10, file c:\aaa\nushell\rsh\26Ne\onejti00i.npt Image PC Routine Line Source nuorderpart.exe 00457A3A Unknown Unknown Unknown
26Ne.bat を実行した時、call nush 26Ne b060ab 1>b060ab.cpu の部分で問題が起きていることがわかる。nush はバッチファイルなのでこの中身を辿りつつ、各コマンドを手動で実行していくと、nupart で paa ファイルというのが生成されていないことがわかる。直接 nupart.exe を実行すると、「ページング ファイルが小さすぎるため、この操作を完了できません。」と出る。ネットで調べると、仮想メモリが足りないようなので、4096 MB に増やす。増やし方は、次の通り (Windows 7)。
- コントロールパネル(表示方法: 小さいアイコン) - システム - システムの詳細設定 - 詳細設定 - パフォーマンス - 詳細設定 - 仮想メモリ の [変更]
- 仮想メモリ変更画面が起動。
- カスタムサイズを選択し、 初期サイズ 4096 MB、 最大 4096 MB に変更。
- 計算をしていたら、次のようなエラーが出るようになった。仮想メモリを増したら直った。
NuShell (Rae 氏版?)
結局 NuShell@MSU に移行した。
Windows(32bit) に インストール
D.S. Jodson 氏のページ (http://ns.ph.liv.ac.uk/~dsj/NuShell/) の NuShell Manual.doc に NuShell_V6_R1 のインストール方法がとても丁寧に書いてある。インストーラ(NuShell_220708.zip)も一緒に置いてあるので、これを使えばバージョンの違いを気にせずインストール出来る。
ダウンロードしたファイル
ファイル |
備考 |
URL |
NuShell のインストールマニュアル(Windows 用) |
||
NuShell 本体 |
||
oxbash 本体 ( sps ディレクトリにある .int ファイル(相互作用ファイル)を使う) |
||
NuShell@MSU 本体 ( sps ディレクトリにある usdbpn.int ファイル(USDB 相互作用ファイル)を使う)。 |
||
42Ca の第一2+励起状態などの計算手順のサンプル |
Windows XP と Windows 7
Windows XP には NuShell Manual.doc の手順通りにインストールできるが Windows 7 にはマニュアル通りにインストールできない。それは Windows 7 には My Documents がない為(?)。Windows XP における C:\Documents and Settings\koba\My Documents を Windows 7 では C:\Users\koba\Documents に適宜読み替える。
計算してみる
42Ca_example.doc の計算はできたが、USDB の相互作用 (usdbpn.int)を NuShell@MSU から持ってきて、一行目に次の行を追加し、エネルギー準位を計算しても出来なかった。よくわからないので、NuShell@MSU を動かすことにする。
! 18 16 0.3
Oxbash
- Oxbash を 64 bit の Scientific Linux で動かそうとしたらうまくいかなかった。 32 bit の Linux じゃないと駄目かも?コンパイルのオプションで何とかなる?