FCIDump
class FCIDump
ベース: object
FCIDump形式の電子構造ハミルトニアン。
定義
FCIDump フォーマットは、もともと Knowles と Handy によって 1989 年に定義されたものである。 [1] これは、電子構造ハミルトニアンをプレーンテキストファイルとしてエクスポートするための、広く普及している形式です。
現在のデータ構造には、第2量子化演算子の構築に関連する情報のみが格納されている。 しかし、この実装は、制限のないスピンデータの読み込みをサポートしている点で、元の定義の範囲を超えています。 以下の表は、添字が属する区間に基づいて、積分がスピン種とどのように関連付けられるかをまとめたものです(見出しに が含まれていると仮定します NORB=n):
整数型 | i | j | k | l |
|---|---|---|---|---|
| 定数 | ||||
| 1体アルファ | ||||
| 1体ベータ | ||||
| 2体系 α-α | ||||
| 2体問題のアルファ・ベータ法 | ||||
| 2体ベータ-ベータ |
必須の値は、1体アルファスピン積分のみである。
2体積分は、 という順序で記述されることが想定されており、これは FCIDump の規約と一致しています。
実装
積分は、その順列対称性を活用してフラットな配列として格納されます。これは、電子 FermionOperator 積分コンストラクタが期待するレイアウトでもあります。 軌道数(norb)を 、 と表すと、1つのデータ構造には最大5つの配列が含まれます:
コラム「 1 」 | コラム「 2 」 | コラム「 3 」 |
|---|---|---|
one_body_a | のスピン1の1体積分。 | |
one_body_b | のスピン1の1体積分。 | |
two_body_aa | の2体積分。 | |
two_body_ab | の2体積分。 | |
two_body_bb | の2体積分。 |
1-body配列は、 行列の下三角部分を平坦化したものであり、インデックスは で ia = i * (i + 1) // 2 + a 指定され、 となります a <= i。 配列 two_body_bb および two_body_aa は、8重( S8 )対称である。これらは、 行列の下三角部分を平坦化したものであり、その行列自身の2つの軸は、それぞれそのようなインデックスのペアとなっている。
two_body_ab この製品は、同シリーズの他の製品とは梱包方法が異なります。 これは4倍対称( S4 )であるため、 ** の**行列全体を行優先順で保持しており、インデックスは として指定されます iajb = ia * npair + jb。 その行のペアは スピン種を、列のペアは スピン種をインデックスとしており、したがって、これら2つのペアを入れ替えても対称にはならない。
これらの内部配列の読み取り専用コピー には、それぞれのメソッド( get_one_body_tril_a(), get_one_body_tril_b(), get_two_body_tril_aa(), get_two_body_tril_ab(), および )を通じてアクセスできます get_two_body_tril_bb()。
1体系の スピンおよび / の2体配列は、制限のないスピンデータを含むファイルでのみ存在します。 3人とも不在なので、3人全員についてまとめて報告 is_unrestricted する。
保存された値は、ファイルに記載されている通りの積分値です。 特に、これらは2体演算子項が持つ従来の係数 ** を持たないため**、で構築された演算子の係数は、ここで返される対応する値の半分 FermionOperator.from_fcidump() となります。
変換
のインスタンスから生成できるオペレータの実装は、次のクラ from_fcidump スメソッドを提供 FCIDump します:
コラム「 1 」 | コラム「 2 」 |
|---|---|
FermionOperator.from_fcidump() | から FermionOperator を生成します FCIDump。 |
[ 1 ]
-
- Knowles および N. C. Handy、『Computer Physics Communications』54 (1989) 75-83。
属性
constant
ファイルに定数エネルギーオフセットが指定されている場合、それを返します。
これは、4つの添字がすべてゼロである積分線の値であり、電子構造ハミルトニアンにおいては、これは核間反発エネルギーに相当する。 そのファイルにそのような行が含まれていない None 場合です。
FermionOperator.from_fcidump(), これにはこの値が恒等項として含まれている。
>>> from qiskit_fermions.operators.library import FCIDump
>>> fcidump = FCIDump.from_file("tests/h2.fcidump")
>>> fcidump.constant
0.7199689944489797
戻り値
定数エネルギーオフセット、あるいはファイルに指定がない None 場合。
is_unrestricted
このデータ構造が、制限のない(スピン依存の)積分を含むかどうか。
のスピン1の1体配列と、 / の2体配列は、これがのときにのみ存在し True、両方が同時に存在することはない。
>>> from qiskit_fermions.operators.library import FCIDump
>>> FCIDump.from_file("tests/h2.fcidump").is_unrestricted
False
>>> FCIDump.from_file("tests/heh.fcidump").is_unrestricted
True
戻り値
ベータスピン積分配列が存在するかどうか。
ms2
スピン量子数の2倍、 を返します。
この番号( )は、FCIDumpファイルのヘッダーにある「field MS2=2S 」から抽出されたものです。
nelec
電子の数を返します。
この数値は、FCIDump ファイルのヘッダーにある NELEC フィールドから抽出されたものです。
norb
軌道の数を返します。
この番号( )は、FCIDumpファイルのヘッダーにある「field NORB=n 」から抽出されたものです。
方法
from_file
classmethod from_file(file_path)
FCIDump ファイルを解析します。
「」という名前の FCIDump ファイルがある場合 molecule.fcidump、このメソッドは次のように使用します:
from qiskit_fermions.operators.library import FCIDump
fcidump = FCIDump.from_file("molecule.fcidump")パラメーター
file_path – FCIDump ファイルへのパス。
戻り値
構築されたデータ構造。
昇給
- OSError – c を開くか読み込むことができない
file_path場合。 - ValueError – ファイルがFCIDump形式に準拠していない場合(ヘッダーのnamelistが欠落している、または
NORBフィールドNELECが欠落している、あるいは フィールドMS2の形式が不正である場合)、または、まだサポートされていないMOエネルギー値が含まれている場合。
get_one_body_tril_a
get_one_body_tril_a()
の-spin 1-body積分の読み取り専用コピーを返します。
このメソッドは、内部データのコピー を返します。
内部データ構造の説明、 およびこの配列を利用する FermionOperator.from_1body_tril_spin_sym()。
>>> from qiskit_fermions.operators.library import FCIDump
>>> fcidump = FCIDump.from_file("tests/h2.fcidump")
>>> fcidump.get_one_body_tril_a().shape
(3,)
戻り値
長さ の、平坦化された下三角1体積分。
get_one_body_tril_b
get_one_body_tril_b()
の-spin 1-body積分の読み取り専用コピーを返します。
このメソッドは、内部データのコピー を返します。
内部データ構造の説明、 およびこの配列を利用する FermionOperator.from_1body_tril_spin()。
戻り値
長さが である、平坦化された下三角1体積分。ただし、 None のとき、 is_unrestricted となる False。
get_two_body_tril_aa
get_two_body_tril_aa()
の-spin 2体積分の読み取り専用コピーを返します。
これらの値は化学薬品注文番号( )に基づいており、 という係数は含まれていません。
このメソッドは、内部データのコピー を返します。
内部データ構造の説明、 およびこの配列を利用する FermionOperator.from_2body_tril_spin_sym()。
>>> from qiskit_fermions.operators.library import FCIDump
>>> fcidump = FCIDump.from_file("tests/h2.fcidump")
>>> fcidump.get_two_body_tril_aa().shape
(6,)
戻り値
長さ の、8倍対称( S8 )な平坦化された2体積分。
get_two_body_tril_ab
get_two_body_tril_ab()
の-spin 2体積分の読み取り専用コピーを返します。
これらの値は化学薬品注文番号( )に基づいており、 という係数は含まれていません。
他の2体配列とは異なり、この配列は4倍対称( S4 )のみです。この配列には、 行列全体が格納されており、その行のペアは スピンを、列のペアは スピン種をそれぞれ指し示しています。 したがって、2つのペアを入れ替えても対称にはならない。
このメソッドは、内部データのコピー を返します。
内部データ構造の説明、 およびこの配列を利用する FermionOperator.from_2body_tril_spin()。
戻り値
長さ を持つ、4倍対称( S4 )の平坦化された2体積分。ただし、 の場合、または is_unrestricted が の None ときは False。
get_two_body_tril_bb
get_two_body_tril_bb()
の-spin 2体積分の読み取り専用コピーを返します。
これらの値は化学薬品注文番号( )に基づいており、 という係数は含まれていません。
このメソッドは、内部データのコピー を返します。
内部データ構造の説明、 およびこの配列を利用する FermionOperator.from_2body_tril_spin()。
戻り値
長さが である、8倍対称( S8 )の平坦化された2体積分。ただし、 の場合、または が is_unrestricted の None ときは False。