Integrales electrónicas
Las funciones constructoras que se enumeran aquí suelen tomar como entrada los coeficientes de los hamiltonianos de la estructura electrónica. Hay diferentes sabores:
tril: estas funciones toman como argumento matrices unidimensionales de índices triangulares aplanados (generalizados)full: estas funciones consumen matrices de alta dimensiónspin: estas funciones admiten matrices independientes para las diferentes especies de espínsym: estas funciones toman una sola matriz correspondiente a una especie de espín y deducen la otra especie de espín
qf_ferm_op_from_1body_tril_spin_sym
QfFermionOperator *qf_ferm_op_from_1body_tril_spin_sym(double *one_body_a, uint32_t norb)
Construye un operador a partir de integrales triangulares de un cuerpo con simetría de espín.
El operador resultante se define mediante
donde son los coeficientes integrales almacenados en one_body_a, y son los índices obtenidos a partir del índice triangular que indexa la matriz, y es el número de orbitales, norb.
1int norb = 2;
2double one_body_a[3] = {1.0, 2.0, 3.0};
3QfFermionOperator *op = qf_ferm_op_from_1body_tril_spin_sym(one_body_a, norb);Seguridad
El comportamiento es indefinido si se incumple alguna de las siguientes condiciones:
one_body_aes un puntero no nulo y alineado a un matrizdoublede longitudnorb * (norb + 1) / 2
Se detecta un puntero nulo o desalineado y se produce un error grave; no es posible deducir la longitud de la matriz a partir del puntero, por lo que sigue siendo un contrato de llamada no comprobado.
Parámetros
- one_body_a : una matriz unidimensional de longitud que
norb * (norb + 1) / 2almacena los coeficientes de la integral electrónica de un cuerpo de las especies de espín alfa, en forma de matriz triangular aplanada. - norb : el número de orbitales.
Devuelve
Un indicador de la componente del hamiltoniano de la estructura electrónica que se define a continuación.
qf_ferm_op_from_1body_tril_spin
QfFermionOperator *qf_ferm_op_from_1body_tril_spin(double *one_body_a, double *one_body_b, uint32_t norb)
Construye un operador a partir de integrales triangulares de un cuerpo para cada especie de espín por separado.
El operador resultante se define mediante
donde ( ) son los coeficientes integrales almacenados en one_body_a (one_body_b, respectivamente), y son los índices obtenidos a partir del índice triangular que indexa las matrices, y es el número de orbitales, norb.
1int norb = 2;
2double one_body_a[3] = {1.0, 2.0, 3.0};
3double one_body_b[3] = {-1.0, -2.0, -3.0};
4QfFermionOperator *op = qf_ferm_op_from_1body_tril_spin(one_body_a, one_body_b, norb);Seguridad
El comportamiento es indefinido si se incumple alguna de las siguientes condiciones:
one_body_ay sonone_body_bpunteros no nulos y alineados adoublematrices, cada una de longitudnorb * (norb + 1) / 2
Se detecta un puntero nulo o mal alineado y se produce un error grave; las longitudes de las matrices no pueden deducirse a partir de los punteros, por lo que siguen siendo un contrato de llamada no comprobado.
Parámetros
- one_body_a : una matriz unidimensional de longitud que
norb * (norb + 1) / 2almacena los coeficientes de la integral electrónica de un cuerpo de las especies de espín alfa, en forma de matriz triangular aplanada. - one_body_b : una matriz unidimensional de longitud que
norb * (norb + 1) / 2almacena los coeficientes de la integral electrónica de un cuerpo de las especies de espín beta, en forma de matriz triangular aplanada. - norb : el número de orbitales.
Devuelve
Un indicador de la componente del hamiltoniano de la estructura electrónica que se define a continuación.
qf_ferm_op_from_2body_tril_spin_sym
QfFermionOperator *qf_ferm_op_from_2body_tril_spin_sym(double *two_body_aa, uint32_t norb)
Construye un operador a partir de integrales triangulares de dos cuerpos con simetría de espín.
El operador resultante se define mediante
donde son los coeficientes integrales almacenados en two_body_aa, es el índice corriente de la matriz, genera las permutaciones únicas del índice de 4 elementos (véase más adelante), y es el número de orbitales, norb.
1int norb = 2;
2double two_body_aa[6] = {1.0, 2.0, 3.0, 4.0, 5.0, 6.0};
3QfFermionOperator *op = qf_ferm_op_from_2body_tril_spin_sym(two_body_aa, norb);Seguridad
El comportamiento es indefinido si se incumple alguna de las siguientes condiciones:
two_body_aaes un puntero no nulo y alineado a un matrizdoublede longitudnpair * (npair + 1) / 2, dondenpair = norb * (norb + 1) / 2
Se detecta un puntero nulo o desalineado y se produce un error grave; no es posible deducir la longitud de la matriz a partir del puntero, por lo que sigue siendo un contrato de llamada no comprobado.
two_body_aa es una matriz simétrica de tipo « S8-fold ». Esto significa que se trata de los datos triangulares inferiores aplanados de una matriz de forma (npair, npair), donde npair = (norb * (norb + 1) // 2. Esto, a su vez, son los datos de la parte triangular inferior de la matriz de 4 dimensiones de forma (norb, norb, norb, norb). Por lo tanto, la expresión anterior expande el índice «aplanado» en todas las permutaciones de índices que indexan este array de 4 dimensiones.
Parámetros
- two_body_aa : una matriz unidimensional que contiene los coeficientes de la integral electrónica simétrica de dos cuerpos de tipo « S8-fold » de las especies de espín alfa/alfa, en forma de matriz aplanada.
- norb : el número de orbitales.
Devuelve
Un indicador de la componente del hamiltoniano de la estructura electrónica que se define a continuación.
qf_ferm_op_from_2body_tril_spin
QfFermionOperator *qf_ferm_op_from_2body_tril_spin(double *two_body_aa, double *two_body_ab, double *two_body_bb, uint32_t norb)
Construye un operador a partir de integrales triangulares de dos cuerpos para cada especie de espín por separado.
El operador resultante se define mediante
donde ( , ) son los coeficientes integrales almacenados en two_body_aa (two_body_ab, two_body_bb, respectivamente), es el índice corriente de la matriz, ( ) genera las permutaciones únicas del índice de 4 elementos (véase más adelante), y es el número de orbitales, norb.
1int norb = 2;
2double two_body_aa[6] = {1.0, 2.0, 3.0, 4.0, 5.0, 6.0};
3double two_body_ab[9] = {11.0, 12.0, 13.0, 14.0, 15.0,
4 16.0, 17.0, 18.0, 19.0};
5double two_body_bb[6] = {-1.0, -2.0, -3.0, -4.0, -5.0, -6.0};
6QfFermionOperator *op = qf_ferm_op_from_2body_tril_spin(
7 two_body_aa, two_body_ab, two_body_bb, norb);Seguridad
El comportamiento es indefinido si se incumple alguna de las siguientes condiciones:
two_body_aay sontwo_body_bbpunteros no nulos y alineados adoublematrices, cada una de longitudnpair * (npair + 1) / 2, dondenpair = norb * (norb + 1) / 2two_body_abes un puntero no nulo y alineado a un matrizdoublede longitudnpair * npair
Se detecta un puntero nulo o mal alineado y se produce un error grave; las longitudes de las matrices no pueden deducirse a partir de los punteros, por lo que siguen siendo un contrato de llamada no comprobado.
two_body_aa y two_body_bb son matrices simétricas de orden S8-fold. Esto significa que son los datos triangulares inferiores aplanados de matrices de forma (npair, npair), donde npair = (norb * (norb + 1) // 2. Estos, a su vez, son los datos del triángulo inferior de las matrices de cuatro dimensiones de forma (norb, norb, norb, norb). Por lo tanto, la expresión anterior expande el índice aplanado en todas las permutaciones de índices que indexan estas matrices de 4 dimensiones.
Sin embargo, solo two_body_ab es simétrico respecto a S4-fold. Por lo tanto, contiene todos los datos de la matriz (npair, npair) (aunque todavía en forma aplanada). La función « » realiza la expansión de índices correspondiente. (En la definición anterior, hemos vuelto a utilizar el índice « », lo que constituye un abuso de notación.)
Parámetros
- two_body_aa : una matriz unidimensional que contiene los coeficientes de la integral electrónica simétrica de dos cuerpos de tipo « S8-fold » de las especies de espín alfa/alfa, en forma de matriz aplanada.
- two_body_ab : una matriz unidimensional de los coeficientes de la integral electrónica simétrica de dos cuerpos S4-fold de las especies de espín alfa/beta, en forma de matriz aplanada.
- two_body_bb : una matriz unidimensional que contiene los coeficientes de la integral electrónica simétrica de dos cuerpos de tipo beta/beta-spin, según la ecuación S8-fold, en forma de matriz aplanada.
- norb : el número de orbitales.
Devuelve
Un indicador de la componente del hamiltoniano de la estructura electrónica que se define a continuación.