Skip to main content
IBM Quantum Platform

FCIDump

class FCIDump

ベース: object

FCIDump形式の電子構造ハミルトニアン。


定義

FCIDump フォーマットは、もともと Knowles と Handy によって 1989 年に定義されたものである。 [1] これは、電子構造ハミルトニアンをプレーンテキストファイルとしてエクスポートするための、広く普及している形式です。

現在のデータ構造には、第2量子化演算子の構築に関連する情報のみが格納されている。 しかし、この実装は、制限のないスピンデータの読み込みをサポートしている点で、元の定義の範囲を超えています。 以下の表は、添字が属する区間に基づいて、積分がスピン種とどのように関連付けられるかをまとめたものです(見出しに が含まれていると仮定します NORB=n):

整数型
i
j
k
l
定数0{0}0{0}0{0}0{0}
1体アルファ0{0}0{0}[1,n][1,n][1,n][1,n]
1体ベータ0{0}0{0}[n+1,2n][n+1,2n][n+1,2n][n+1,2n]
2体系 α-α[1,n][1,n][1,n][1,n][1,n][1,n][1,n][1,n]
2体問題のアルファ・ベータ法[1,n][1,n][1,n][1,n][n+1,2n][n+1,2n][n+1,2n][n+1,2n]
2体ベータ-ベータ[n+1,2n][n+1,2n][n+1,2n][n+1,2n][n+1,2n][n+1,2n][n+1,2n][n+1,2n]

必須の値は、1体アルファスピン積分のみである。

2体積分は、 (ij∣kl)(ij|kl) という順序で記述されることが想定されており、これは FCIDump の規約と一致しています。


実装

積分は、その順列対称性を活用してフラットな配列として格納されます。これは、電子 FermionOperator 積分コンストラクタが期待するレイアウトでもあります。 軌道数(norb)を nn、 npair=n(n+1)/2\text{npair} = n (n + 1) / 2 と表すと、1つのデータ構造には最大5つの配列が含まれます:

コラム「 1 」
コラム「 2 」
コラム「 3 」
one_body_anpair\text{npair}α\alpha のスピン1の1体積分。
one_body_bnpair\text{npair}β\beta のスピン1の1体積分。
two_body_aanpair(npair+1)/2\text{npair} (\text{npair} + 1) / 2αα\alpha\alpha の2体積分。
two_body_abnpair2\text{npair}^2αβ\alpha\beta の2体積分。
two_body_bbnpair(npair+1)/2\text{npair} (\text{npair} + 1) / 2ββ\beta\beta の2体積分。

1-body配列は、 (n,n)(n, n) 行列の下三角部分を平坦化したものであり、インデックスは で ia = i * (i + 1) // 2 + a 指定され、 となります a <= i。 配列 two_body_bb および two_body_aa は、8重( S8 )対称である。これらは、 (npair,npair)(\text{npair}, \text{npair}) 行列の下三角部分を平坦化したものであり、その行列自身の2つの軸は、それぞれそのようなインデックスのペアとなっている。

警告

two_body_ab この製品は、同シリーズの他の製品とは梱包方法が異なります。 これは4倍対称( S4 )であるため、 (npair,npair)(\text{npair}, \text{npair})** の**行列全体を行優先順で保持しており、インデックスは として指定されます iajb = ia * npair + jb。 その行のペアは α\alpha スピン種を、列のペアは β\beta スピン種をインデックスとしており、したがって、これら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体系の β\beta スピンおよび αβ\alpha\beta / ββ\beta\beta の2体配列は、制限のないスピンデータを含むファイルでのみ存在します。 3人とも不在なので、3人全員についてまとめて報告 is_unrestricted する。

保存された値は、ファイルに記載されている通りの積分値です。 特に、これらは2体演算子項が持つ従来の係数 12\frac{1}{2}** を持たないため**、で構築された演算子の係数は、ここで返される対応する値の半分 FermionOperator.from_fcidump() となります。


変換

のインスタンスから生成できるオペレータの実装は、次のクラ from_fcidump スメソッドを提供 FCIDump します:

コラム「 1 」
コラム「 2 」
FermionOperator.from_fcidump()から FermionOperator を生成します FCIDump。

[ 1 ]

    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

このデータ構造が、制限のない(スピン依存の)積分を含むかどうか。

β\beta のスピン1の1体配列と、 αβ\alpha\beta / ββ\beta\beta の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倍、 2S2S を返します。

この番号( 2S2S )は、FCIDumpファイルのヘッダーにある「field MS2=2S 」から抽出されたものです。

nelec

電子の数を返します。

この数値は、FCIDump ファイルのヘッダーにある NELEC フィールドから抽出されたものです。

norb

軌道の数を返します。

この番号( nn )は、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()

α\alpha の-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,)

戻り値

長さ npair=n(n+1)/2\text{npair} = n (n + 1) / 2 の、平坦化された下三角1体積分。

get_one_body_tril_b

get_one_body_tril_b()

β\beta の-spin 1-body積分の読み取り専用コピーを返します。

注

このメソッドは、内部データのコピー を返します。

関連資料

内部データ構造の説明、 およびこの配列を利用する FermionOperator.from_1body_tril_spin()。

戻り値

長さが npair=n(n+1)/2\text{npair} = n (n + 1) / 2 である、平坦化された下三角1体積分。ただし、 None のとき、 is_unrestricted となる False。

get_two_body_tril_aa

get_two_body_tril_aa()

αα\alpha\alpha の-spin 2体積分の読み取り専用コピーを返します。

これらの値は化学薬品注文番号( (ij∣kl)(ij|kl) )に基づいており、 12\frac{1}{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,)

戻り値

長さ npair(npair+1)/2\text{npair} (\text{npair} + 1) / 2 の、8倍対称( S8 )な平坦化された2体積分。

get_two_body_tril_ab

get_two_body_tril_ab()

αβ\alpha\beta の-spin 2体積分の読み取り専用コピーを返します。

これらの値は化学薬品注文番号( (ij∣kl)(ij|kl) )に基づいており、 12\frac{1}{2} という係数は含まれていません。

警告

他の2体配列とは異なり、この配列は4倍対称( S4 )のみです。この配列には、 (npair,npair)(\text{npair}, \text{npair}) 行列全体が格納されており、その行のペアは α\alpha スピンを、列のペアは β\beta スピン種をそれぞれ指し示しています。 したがって、2つのペアを入れ替えても対称にはならない。

注

このメソッドは、内部データのコピー を返します。

関連資料

内部データ構造の説明、 およびこの配列を利用する FermionOperator.from_2body_tril_spin()。

戻り値

長さ npair2\text{npair}^2 を持つ、4倍対称( S4 )の平坦化された2体積分。ただし、 の場合、または is_unrestricted が の None ときは False。

get_two_body_tril_bb

get_two_body_tril_bb()

ββ\beta\beta の-spin 2体積分の読み取り専用コピーを返します。

これらの値は化学薬品注文番号( (ij∣kl)(ij|kl) )に基づいており、 12\frac{1}{2} という係数は含まれていません。

注

このメソッドは、内部データのコピー を返します。

関連資料

内部データ構造の説明、 およびこの配列を利用する FermionOperator.from_2body_tril_spin()。

戻り値

長さが npair(npair+1)/2\text{npair} (\text{npair} + 1) / 2 である、8倍対称( S8 )の平坦化された2体積分。ただし、 の場合、または が is_unrestricted の None ときは False。

このページは役に立ちましたか?
バグや誤字の報告、またはコンテンツの要求はGitHubで行ってください。