Funções de ordenação
qf_ferm_op_canonical_order
QfFermionOperator *qf_ferm_op_canonical_order(const QfFermionOperator *op)
Retorna uma cópia de um operador fermiónico com seus termos na ordem canônica.
Os termos são ordenados em uma ordem canônica que depende apenas da estrutura de cada termo (a sequência de operadores que ele representa) e não de seu coeficiente. A ordem é, portanto, determinística para um determinado conjunto de termos, independentemente de como o operador tenha sido montado. Os próprios termos permanecem inalterados — isso apenas os reordena, não simplifica nem coloca o operador na ordem 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);Quaisquer índices de grupo (ver qf_ferm_op_get_groups()) são preservados: cada termo mantém seu índice de grupo ao se deslocar, uma vez que o índice de grupo é uma marca específica de cada termo, independente da ordem dos termos. Os termos do mesmo grupo simplesmente deixam de ser contíguos a partir de então. Se a entrada não tiver grupos, o resultado também não terá.
Parâmetros
- op – Um ponteiro para o operador cujos termos devem ser reordenados.
Retorna
Um ponteiro para o operador criado.
qf_maj_op_canonical_order
QfMajoranaOperator *qf_maj_op_canonical_order(const QfMajoranaOperator *op)
Retorna uma cópia de um operador de Majorana com seus termos na ordem canônica.
Os termos são ordenados em uma ordem canônica que depende apenas da estrutura de cada termo (a sequência de operadores que ele representa) e não de seu coeficiente. A ordem é, portanto, determinística para um determinado conjunto de termos, independentemente de como o operador tenha sido montado. Os próprios termos permanecem inalterados — isso apenas os reordena, não simplifica o operador.
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);Quaisquer índices de grupo (ver qf_maj_op_get_groups()) são preservados: cada termo mantém seu índice de grupo ao se deslocar, uma vez que o índice de grupo é uma marca específica de cada termo, independente da ordem dos termos. Os termos do mesmo grupo simplesmente deixam de ser contíguos a partir de então. Se a entrada não tiver grupos, o resultado também não terá.
Parâmetros
- op – Um ponteiro para o operador cujos termos devem ser reordenados.
Retorna
Um ponteiro para o operador criado.