3. チュートリアル

第一原理計算入力ファイル生成ツール cif2x を使うには、入力パラメータファイルと結晶構造データおよび擬ポテンシャルファイルを用意した後、プログラム cif2x を実行します。現在は Quantum ESPRESSO, VASP, OpenMX, AkaiKKR の入力ファイル生成に対応しています。以下では、 docs/tutorial/cif2x ディレクトリにある Quantum ESPRESSO 向けサンプルを例にチュートリアルを実施します。

3.1. 入力パラメータファイルを作成する

入力パラメータファイルには、第一原理計算プログラムに与える入力ファイルの内容を記述します。

以下に入力パラメータファイルのサンプルを記載します。このファイルは YAML形式のテキストファイルで、結晶構造データに対するオプションの指定や、出力する第一原理計算入力ファイルの内容を記述します。仕様の詳細については ファイルフォーマット の章を参照してください。

YAMLフォーマットでは、 keyword: value の辞書形式でパラメータを記述します。 value には数値や文字列などのスカラー値や、複数の値を [ ] または箇条書きの形式で列挙するリスト型、または辞書型を入れ子にすることができます。

structure:
  use_ibrav: false
  tolerance: 0.05

optional:
  pseudo_dir: ./pseudo
  pp_file: ./pseudo/pp_psl_pbe_rrkjus.csv

tasks:
  - mode: scf
    output_file: scf.in
    output_dir: scf
    template: scf.in_tmpl
    content:
      namelist:
        control:
          prefix: pwscf
          pseudo_dir:
          outdir: ./work
        system:
          ecutwfc:
          ecutrho:
      CELL_PARAMETERS:
      ATOMIC_SPECIES:
      ATOMIC_POSITIONS:
        option: crystal
      K_POINTS:
        option: automatic
        grid: [8,8,8]

入力パラメータファイルは structure, optional, tasks のブロックから構成されます。 structure は結晶構造データに関するオプションを指定します。 optional は擬ポテンシャルに関する global な設定などを行います。

tasks は出力する第一原理計算入力ファイルの内容を指定します。一連の計算に対応して複数のファイルを生成できるよう、tasks は配列の値を取ります。 各出力について、計算内容は mode パラメータで指定します。SCF計算の scf や NSCF計算の nscf に対応するほか、一般的な出力を行う任意の出力モードを指定できます。 ファイルは output_dir および output_file で指定するファイルに書き出されます。

出力内容は content に記載します。 Quantum ESPRESSO の入力ファイルは、 &keyword で始まる Fortran90 の namelist 形式と、 K_POINTS などのキーワードで始まり空行で分割される cards と呼ばれるブロックからなります。 content には namelist と cards を入れ子の辞書形式で指定します。 いくつかの例外を除いて、指定された内容が基本的にはそのまま入力ファイルに書き出されます。値が空欄のキーワードは、結晶構造データなどから求めた値が代入されます。

また、template として入力ファイルの雛形を指定することもできます。 template に指定したファイルの内容と content のデータを合わせたものを入力データとして扱います。同じキーワードのデータが存在する場合は content の指定が優先されます。従って、既存の入力ファイルを元に必要な箇所を入力パラメータファイルで上書きする使い方が可能です。上記の例では次のファイル(scf.in_tmpl)を template として取り込み、カットオフと CELL_PARAMETER, ATOMIC_SPECIES, ATOMIC_POSITIONS, K_POINT の箇所を結晶構造等から決めます。 ecutwfcecutrho が空欄で上書きされていることに留意してください。

&control
    calculation = 'scf'
    prefix = 'pwscf'
    pseudo_dir = './pseudo'
    outdir = './work'
    tstress = .true.
    tprnfor = .true.
/

&system
    ibrav = 0
    nat = 7
    ntyp = 3
    ecutwfc = 36.0
    ecutrho = 180.0
    occupations = 'smearing'
    smearing = 'm-p'
    degauss = 0.01
    noncolin = .true.
    nspin = 2
/

&electrons
    missing_beta = 0.1
    conv_thr = 1e-08
/

3.2. 第一原理計算入力ファイルを生成する

入力パラメータファイル(input.yaml)と結晶構造データ(Co3SnS2_nosym.cif)を入力として cif2x を実行します。

$ cif2x -t QE input.yaml Co3SnS2_nosym.cif

予め必要な擬ポテンシャルのファイルを ./pseudo ディレクトリに配置し、擬ポテンシャルのインデックスファイルを ./pseudo/pp_psl_pbe_rrkjus.csv に作成しておきます。

cif2x を実行すると Quantum ESPRESSO用の入力ファイルが生成され出力されます。出力先は入力パラメータファイル内のパラメータで指定するディレクトリ(output_dir)およびファイル(output_file)です。この例では ./scf/scf.in に SCF計算用の入力ファイルが書き出されます。

3.3. パラメータセットを指定する

入力パラメータ内の値をいくつか変えながら一連の入力ファイルを生成したいことがあります。例えばカットオフの値やk点の数を変えて収束性を評価するなどの場合です。入力パラメータには値のリストや範囲を指定することができ、値の組み合わせごとに個別のディレクトリを作成して入力ファイルを生成します。 パラメータセットの指定は特別な構文 ${...} を用います。

content:
  K_POINTS:
    option: automatic
    grid:   ${ [ [4,4,4], [8,8,8], [12,12,12] ] }

例えば上記のように K_POINTS を指定すると、 grid の値が [4,4,4], [8,8,8], [12,12,12] の入力ファイルがそれぞれ 4x4x4/, 8x8x8/, 12x12x12/ サブディレクトリ内に作成されます。