フィルタリング関数
qf_ferm_op_filter_diagonal_terms
void qf_ferm_op_filter_diagonal_terms(QfFermionOperator *op)
占有数基底において対角成分となる演算子の項を除去する。
これにより、指定された式の中から、数演算子の積( )である QfFermionOperator すべての項が除去されます。これには、定数項(数演算子の積がゼロであるもの)、単一の数演算子、および のような高次の積も含まれます。
このような項を除去する主な動機は、演算子の時間発展において生じます。そこでは、このような対角項は、全体的な位相を導入する以外、時間発展に影響を与えないからです。 したがって、時間経過に伴う状態からサンプリングされたビット列には影響が及ばない。 したがって、例えば SqDRIFT, で使用される qDRIFT の時間発展のための電子構造ハミルトニアンを準備する際には、これらを除去することを推奨します。そうすることで、そうでなければ生じる不必要なサンプリングのオーバーヘッドを回避できるからです。
指定された演算子は、正規順序でなければならない! これは、検証されていない実装の前提条件です! その形式の演算子を得る方法については qf_ferm_op_normal_ordered() 、を参照してください。
1QfFCIDump *fcidump = qf_fcidump_from_file("molecule.fcidump");
2QfFermionOperator *op = qf_ferm_op_from_fcidump(fcidump);
3
4QfFermionOperator *normal = qf_ferm_op_normal_ordered(op, NULL);
5
6qf_ferm_op_filter_diagonal_terms(normal);演算子はその場で変更されます。 グループインデックスを追跡する場合(参照 qf_ferm_op_get_groups())、残存する項は相対的なグループ分けを維持しますが、グループインデックスは0から始まる連続した範囲に再割り当てされます。 したがって、この関数の呼び出しを通じて、どの項の特定のグループインデックスも保持されることを当てにしてはなりません。
パラメーター
- op – フィルタリング(その場で変更)の対象となる項を持つ、正規順序のフェルミオン演算子へのポインタ。