Fonctions d'ordre
qf_ferm_op_canonical_order
QfFermionOperator *qf_ferm_op_canonical_order(const QfFermionOperator *op)
Renvoie une copie d'un opérateur fermionique dont les termes sont classés dans l'ordre canonique.
Les termes sont classés selon un ordre canonique qui dépend uniquement de la structure de chaque terme (la chaîne d'opérateurs qu'il représente) et non de son coefficient. L'ordre est donc déterministe pour un ensemble donné de termes, quelle que soit la manière dont l'opérateur a été construit. Les termes eux-mêmes restent inchangés : cela ne fait que les réorganiser, sans simplifier ni mettre l'opérateur en ordre normal.
1QfFermionOperator *op = qf_ferm_op_zero();
2bool actions[2] = {true, false};
3uint32_t modes_a[2] = {1, 0};
4QkComplex64 coeff_a = {1.0, 0.0};
5qf_ferm_op_add_term(op, 2, actions, modes_a, &coeff_a);
6uint32_t modes_b[2] = {0, 1};
7QkComplex64 coeff_b = {2.0, 0.0};
8qf_ferm_op_add_term(op, 2, actions, modes_b, &coeff_b);
9
10QfFermionOperator *ordered = qf_ferm_op_canonical_order(op);Les indices de groupe (voir qf_ferm_op_get_groups()) sont conservés : chaque terme conserve son indice de groupe lorsqu'il est déplacé, car un indice de groupe est une balise propre à chaque terme, indépendante de l'ordre des termes. Les termes d’un même groupe ne sont tout simplement plus contigus par la suite. Si les données d'entrée ne comportent pas de groupes, le résultat n'en comporte pas non plus.
Paramètres
- op – Un pointeur vers l'opérateur dont les termes doivent être réorganisés.
Retours
Un pointeur vers l'opérateur créé.
qf_maj_op_canonical_order
QfMajoranaOperator *qf_maj_op_canonical_order(const QfMajoranaOperator *op)
Renvoie une copie d'un opérateur de Majorana dont les termes sont classés selon l'ordre canonique.
Les termes sont classés selon un ordre canonique qui dépend uniquement de la structure de chaque terme (la chaîne d'opérateurs qu'il représente) et non de son coefficient. L'ordre est donc déterministe pour un ensemble donné de termes, quelle que soit la manière dont l'opérateur a été construit. Les termes eux-mêmes restent inchangés : cela ne fait que les réorganiser, sans simplifier l'opérateur.
1QfMajoranaOperator *op = qf_maj_op_zero();
2uint32_t modes_a[2] = {1, 0};
3QkComplex64 coeff_a = {1.0, 0.0};
4qf_maj_op_add_term(op, 2, modes_a, &coeff_a);
5uint32_t modes_b[2] = {0, 1};
6QkComplex64 coeff_b = {2.0, 0.0};
7qf_maj_op_add_term(op, 2, modes_b, &coeff_b);
8
9QfMajoranaOperator *ordered = qf_maj_op_canonical_order(op);Les indices de groupe (voir qf_maj_op_get_groups()) sont conservés : chaque terme conserve son indice de groupe lorsqu'il est déplacé, car un indice de groupe est une balise propre à chaque terme, indépendante de l'ordre des termes. Les termes d’un même groupe ne sont tout simplement plus contigus par la suite. Si les données d'entrée ne comportent pas de groupes, le résultat n'en comporte pas non plus.
Paramètres
- op – Un pointeur vers l'opérateur dont les termes doivent être réorganisés.
Retours
Un pointeur vers l'opérateur créé.