LoginSignup
4
4

More than 5 years have passed since last update.

クロスアビリティ Winmostarサポートチームです。

0. はじめに

結晶系の第一原理計算を実施する場合、事前に対象となる結晶の対称性を把握する必要がある。また、計算セルをPrimitiveセルへと変換しなければならない。しかしながら、比較的に大きなユニットセルを有する結晶においては、空間群を特定してPrimitiveセルを抽出することは容易ではない。少なくとも、手作業ではまず不可能である。本記事では、任意の結晶について、その対称性および空間群に関する処理を遂行するライブラリー"spglib"を紹介する。

1. spglib

spglibはBSDライセンスにて、以下のURLからダウンロードできる。

当該ライブラリーのコンパイルおよびインストール方法については、このURLを参照のこと。この記事では、spglibライブラリーの使い方について解説する。C言語、Fortran、Python、Rubyのインターフェースが用意されているが、ここではC言語を対象とする。

2. 空間群の特定

結晶の対称性を解析して、その空間群を特定するには、spglibのspg_get_datasetを使用する。サンプルコードは、以下の通り。spg_get_dtasetにてSpglibDatasetを取得を取得した後、これをSpglibSpacegroupTypeに変換。そこから、空間群のテーブル番号および対称性記号を取得している。入力データのlatticeは格子ベクトル、positionは計算セル内の原子座標、typeは原子種類を識別する番号、natomは原子の総数、symprecは対称性判定の閾値である。

void find_spacegroup(double lattice[3][3], double position[][3], int[] type, int natom, double symprec)
{
    SpglibDataset* dataset;
    dataset = spg_get_dataset(lattice, position, type, natom, symprec);

    SpglibSpacegroupType spgtype;
    spgtype = spg_get_spacegroup_type(dataset->hall_number);

    printf("Table Number => %d\n",  spgtype.number);
    printf("International => %s\n", spgtype.international);
    printf("Hall symbol => %s\n",   spgtype.hall_symbol);
    printf("Schoenflies => %s\n",   spgtype.schoenflies);

    spg_free_dataset(dataset);
}

3. Primitiveセルへの変換

計算セルをPrimitiveセルに変換する場合には、spg_standardize_cellを使用する。サンプルコードは、以下の通り。spg_standardize_cellの戻り値は、Primitiveセル内の原子数である。入力データは任意の計算セルに対する値である。Conventionalセルやスーパーセルを入力データとすることができる。lattice、position、typeはPrimitiveセルの値に上書きされる。

void convert_to_primitive(double lattice[3][3], double position[][3], int[] type, int natom, double symprec)
{
    int nprim;
    nprim = spg_standardize_cell(lattice, position, type, natom, 1, 0, symprec);
}

逆に、PrimitiveセルをConventionalセルに変換する場合には、以下のコードである。このとき、原子数が増大する可能性があるため、positionおよびtypeの配列次元はnprimの4倍とする必要がある。

void convert_to_conventional(double lattice[3][3], double position[][3], int[] type, int nprim, double symprec)
{
    int natom;
    natom = spg_standardize_cell(lattice, position, type, nprim, 0, 0, symprec);
}
4
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
4