Funzioni di ordinamento
qf_ferm_op_canonical_order
QfFermionOperator *qf_ferm_op_canonical_order(const QfFermionOperator *op)
Restituisce una copia di un operatore fermionico con i suoi termini disposti in ordine canonico.
I termini sono ordinati secondo un ordine canonico che dipende esclusivamente dalla struttura di ciascun termine (la stringa di operatori che esso rappresenta) e non dal suo coefficiente. L'ordine è quindi deterministico per un dato insieme di termini, indipendentemente da come sia stato assemblato l'operatore. I termini stessi rimangono invariati: questa operazione si limita a riorganizzarli, senza semplificare né riportare l'operatore all'ordine normale.
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);Eventuali indici di gruppo (vedi qf_ferm_op_get_groups()) vengono conservati: ogni termine porta con sé il proprio indice di gruppo quando viene spostato, poiché un indice di gruppo è un’etichetta specifica per ogni termine, indipendente dall’ordine dei termini. Da quel momento in poi, i termini dello stesso gruppo semplicemente non sono più contigui. Se l'input non contiene gruppi, nemmeno il risultato ne contiene.
Parametri
- op – Un puntatore all’operatore i cui termini devono essere riordinati.
Risultati
Un puntatore all'operatore creato.
qf_maj_op_canonical_order
QfMajoranaOperator *qf_maj_op_canonical_order(const QfMajoranaOperator *op)
Restituisce una copia di un operatore di Majorana con i suoi termini disposti in ordine canonico.
I termini sono ordinati secondo un ordine canonico che dipende esclusivamente dalla struttura di ciascun termine (la stringa di operatori che esso rappresenta) e non dal suo coefficiente. L'ordine è quindi deterministico per un dato insieme di termini, indipendentemente da come sia stato assemblato l'operatore. I termini stessi rimangono invariati: questa operazione si limita a riorganizzarli, senza semplificare l'operatore.
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);Eventuali indici di gruppo (vedi qf_maj_op_get_groups()) vengono conservati: ogni termine porta con sé il proprio indice di gruppo quando viene spostato, poiché un indice di gruppo è un’etichetta specifica per ogni termine, indipendente dall’ordine dei termini. Da quel momento in poi, i termini dello stesso gruppo semplicemente non sono più contigui. Se l'input non contiene gruppi, nemmeno il risultato ne contiene.
Parametri
- op – Un puntatore all’operatore i cui termini devono essere riordinati.
Risultati
Un puntatore all'operatore creato.