Funciones de ordenación
qf_ferm_op_canonical_order
QfFermionOperator *qf_ferm_op_canonical_order(const QfFermionOperator *op)
Devuelve una copia de un operador fermiónico con sus términos en orden canónico.
Los términos se ordenan según un orden canónico que depende únicamente de la estructura de cada término (la cadena de operadores que representa) y no de su coeficiente. Por lo tanto, el orden es determinista para un conjunto dado de términos, independientemente de cómo se haya construido el operador. Los términos en sí no se modifican: esto solo cambia su orden, no simplifica ni pone en orden normal el operador.
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);Se conservan los índices de grupo (véase qf_ferm_op_get_groups()): cada término lleva consigo su índice de grupo al desplazarse, ya que un índice de grupo es una etiqueta propia de cada término, independiente del orden de los términos. A partir de ese momento, los términos del mismo grupo ya no son contiguos. Si la entrada no tiene grupos, el resultado tampoco los tiene.
Parámetros
- op : un puntero al operador cuyos términos se van a reordenar.
Devuelve
Un puntero al operador creado.
qf_maj_op_canonical_order
QfMajoranaOperator *qf_maj_op_canonical_order(const QfMajoranaOperator *op)
Devuelve una copia de un operador de Majorana con sus términos en orden canónico.
Los términos se ordenan según un orden canónico que depende únicamente de la estructura de cada término (la cadena de operadores que representa) y no de su coeficiente. Por lo tanto, el orden es determinista para un conjunto dado de términos, independientemente de cómo se haya construido el operador. Los términos en sí no se modifican: esto solo cambia su orden, no simplifica el 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);Se conservan los índices de grupo (véase qf_maj_op_get_groups()): cada término lleva consigo su índice de grupo al desplazarse, ya que un índice de grupo es una etiqueta propia de cada término, independiente del orden de los términos. A partir de ese momento, los términos del mismo grupo ya no son contiguos. Si la entrada no tiene grupos, el resultado tampoco los tiene.
Parámetros
- op : un puntero al operador cuyos términos se van a reordenar.
Devuelve
Un puntero al operador creado.