next up previous contents
: BeanShellスクリプトの例 : ジョブ制御 : スクリプトの利用   目次


BeanShellスクリプトの利用方法

「BeanShell」はJVM上で動作するスクリプディング環境です. 基本的にはJava言語と同等の文法ですが, クラスを定義することができない, ダイナミカルタイピィング(変数を必ずしも宣言しなくてよい) に対応している, などの違いがあります. 文法の詳細などはBeanShellのホームページ, http://www.beanshell.org/を 参照してください. BeanShellスクリプトを利用するとPHASE-Viewerのクラス, たとえばPHASE入力ファイルを操作するクラス, をご利用いただくことが できる, などのメリットがあります.

PHASE-Viewerで実行するBeanShellスクリプトに, そのスクリプトの説明用の文字列やスクリプトの動作を規定する入力を埋め込むことができます. 埋め込まれた入力は, 図 6.4\vbox{\kern3pt\textcircled{{\scriptsize 2}}}, ``edit input''ボタンをクリックすると起動できる ``BeanShellスクリプト入力エディター''(図 6.5)からGUIを介して編集することができます.

図 6.5: スクリプト編集画面.
Image script_editor

この画面は, 下記の領域から成っています.

  1. スクリプト入力の編集結果をディスクに保存するボタンです.
  2. この画面を閉じるボタンです.
  3. ``edit script input''タブを選択するとスクリプト入力を編集するためのGUIを表示します. ``edit the script itself''を選択すると, スクリプトを直接編集することができます.
  4. 「スクリプト入力編集用GUI」(スクリプト入力の内容に併せて動的に作成されます).
  5. 「埋め込まれた説明文表示領域」です.

図 6.5のスクリプト編集画面が扱うことのできるファイルの書式を説明します. スクリプトの説明文とスクリプト入力は, ファイル先頭のブロックコメント内に記述します. スクリプト説明文は BEGIN_DESCRIPTIONという文字列とEND_DESCRIPTIONという文字列の間に入力し, スクリプト入力は BEGIN_INPUTという文字列とEND_INPUTという文字列の間に入力します. 入力はPHASE入力ファイル仕様に準拠した 形式で記述します. ただし, 現時点ではテーブル, 単位の入力には対応していません. この際, 下記のルールでスクリプト編集画面のGUIが動的に作成されます.

例として, バンド計算用の初期化を行うスクリプトのヘッダー部分を下記します. このスクリプトは, ekcalの初期化(第5.2.1節)において状態密度計算の設定に利用されます. 詳細設定を行うと, このスクリプトを読み込んだ状態で図 6.5が起動します.

/*
BEGIN_DESCRIPTION    <--スクリプト説明文の始まり
バンド計算用初期入力を作成するスクリプト。

入力 (カッコ内は規定値):
accuracy->initial_wavefunctions: 初期の波動関数の計算方法
accuracy->matrix_diagonブロック: 初期の波動関数を行列対角化で行う場合のカットオフ. 
defaultを指定すると波動関数と同じ値が採用される.

accuracy -> ekconvergence ブロック, ekcal制御 phaseマニュアル参照
kpoint -> バンド計算で利用するk点ファイル作成用GUIを起動する. 以下の項目を決定した後, 
``generate kpoints''ボタンをクリックするとekcalが利用するk点ファイルが作成される.
テンプレートファイルもあるのでそちらを参考に作成するとよい.

deltk: どのくらいの頻度でk点を作成するか.
reciprocal lattice vector: 逆格子ベクトル
special kpoints: k点を作成したい対称点と, バンド図作成時に利用する記号.

END_DESCRIPTION      <--スクリプト説明文終了
BEGIN_INPUT          <--スクリプト入力始まり
kpoint{
    edit = boot_kpoint_generator:btn:gui/phase/bandkpt.bsh <--.chase/scripts/gui/phase/bandkpt.bshスクリプトを実行するボタンが配備される
}
accuracy{
    initial_wavefunctions = matrix_diagon:combo:matrix_diagon_or_random_numbers <--matrix_diagonないしrandom_numbersを選択肢とするリストが生成される
    matrix_diagon{
        cutoff_wf = default
    }
    ek_convergence{
        num_max_iteration = 500   <--``500''を初期テキストとするテキストフィールドが作成される
        sw_eval_eig_diff = on:combo:on_or_off
        delta_eigenvalue = 1.e-5
        succession = 2
        num_extra_bands = 2
    }
}
END_INPUT            <--スクリプト入力終了
*/



jkoga 平成22年4月27日