Nota

Esta página fue generada a partir de docs/tutorials/02_vibrational_structure.ipynb.

Estructura vibracional#

Introducción#

El Hamiltoniano molecular es

\[\mathcal{H} = - \sum_I \frac{\nabla_{R_I}^2}{M_I} - \sum_i \frac{\nabla_{r_i}^2}{m_e} - \sum_I\sum_i \frac{Z_I e^2}{|R_I-r_i|} + \sum_i \sum_{j>i} \frac{e^2}{|r_i-r_j|} + \sum_I\sum_{J>I} \frac{Z_I Z_J e^2}{|R_I-R_J|}\]

Cómo los núcleos son mucho más pesados que los electrones, no se mueven en la misma escala de tiempo, entonces, el comportamiento de los núcleos y los electrones puede estar desacoplado. Esta es la aproximación de Born-Oppenheimer.

Dentro de la aproximación de Born-Oppenheimer, una función de onda molecular es factorizada como un producto de una parte electrónica, que es la solución a la ecuación de Schrödinger electrónica, una parte vibro-rotacional, que es la solución de la ecuación de Schrödinger nuclear en la superficie de energía potencial (potential energy surface, PES), generada al muestrear los valores propios de la ecuación de Schrödinger electrónica para diferentes geometrías.

La ecuación de Schrödinger nuclear generalmente se resuelve en dos pasos, en analogía con su contraparte electrónica. Una base de una sola partícula (las funciones base se denominan, en este caso, modales) se obtiene mediante la aproximación armónica aplicada al PES o a partir de un cálculo de campo autoconsistente vibracional (vibrational self-consistent field, VSCF). Las correlaciones anarmónicas vibracionales son agregadas a posteriori con enfoques perturbativos o variacionales. Estos últimos incluyen la Interacción de Configuración Vibracional (Vibrational Configuration Interaction, VCI) y Clúster Acoplado Vibracional (Vibrational Coupled Cluster, VCC) para energías anarmónicas de alta precisión. La principal ventaja de VCI y VCC sobre los enfoques alternativos (como las teorías de perturbación) es que su precisión se puede mejorar sistemáticamente hacia el límite del conjunto de bases completo para un PES dado. Sin embargo, su aplicabilidad está limitada a moléculas pequeñas de hasta unos 10 átomos debido a su escalado desfavorable con el tamaño del sistema.

Para abordar el problema de escalabilidad nos gustaría usar algoritmos cuánticos.

La ecuación de Schrödinger nuclear es

\[\mathcal{H}_{\text{vib}} |\Psi_{n}\rangle = E_{n} |\Psi_{n}\rangle\]

El llamado Hamiltoniano de Watson (ignorando los términos de acoplamiento vibro-rotacional) es

\[\mathcal{H}_\text{vib}(Q_1, \ldots, Q_L) = - \frac{1}{2} \sum_{l=1}^{L} \frac{\partial^2}{\partial Q_l^2} + V(Q_1, \ldots, Q_L)\]

donde \(Q_l\) son las coordenadas cartesianas armónicas ponderadas en masa.

\(\mathcal{H}_\text{vib}\) debe ser mapeado a un operador que actúa sobre los estados de un conjunto de \(N_q\) qubits para poder calcular sus funciones propias en hardware cuántico. En los cálculos de estructura electrónica, el mapeo se logra al expresar el Hamiltoniano electrónico no relativista en la segunda cuantización, es decir, proyectándolo sobre el conjunto completo de vectores numéricos (occupation number vectors, ONV) de ocupación antisimetrizados generados por un conjunto dado (finito) de orbitales. Para codificar el Hamiltoniano vibracional en un operador de segunda cuantización análogo, expandimos el potencial \(V(Q_1, \ldots, Q_L)\) con la expansión de \(n\) cuerpos de la siguiente manera:

\[V(Q_1, \ldots, Q_L) = V_0 + \sum_{l=1}^L V^{[l]}(Q_l) + \sum_{l<m}^L V^{[l,m]}(Q_l, Q_m) + \sum_{l<m<n}^L V^{[l,m,n]}(Q_l, Q_m, Q_n) + \ldots\]

donde \(V_0\) es la energía electrónica de la geometría de referencia, el término de un modo \(V^{[l]}(Q_l)\) representa la variación del PES al cambiar de la \(l\)-ésima coordenada normal desde la posición de equilibrio. De manera similar, el potencial de dos cuerpos \(V^{[l,m]}(Q_l, Q_m)\) representa el cambio en el PES exacto tras un desplazamiento simultáneo a lo largo de las coordenadas \(l\)-ésima y \(m\)-ésima. A menudo, incluir términos de hasta tres cuerpos en la expansión de \(L\) cuerpos es suficiente para obtener una precisión de aproximadamente 1~cm\(^{-1}\). Destacamos que la expansión de muchos cuerpos del operador potencial que define el Hamiltoniano de Watson contiene términos de acoplamiento arbitrariamente altos. Esta es una diferencia crucial en comparación con el Hamiltoniano de estructura electrónica no relativista que contiene solo interacciones por pares.

Se obtiene una segunda forma de cuantización flexible del Hamiltoniano de Watson dentro de la llamada representación en n-modos. Supongamos que cada modo \(l\) está descrito por un conjunto \(S_l\) base \(N_l\)-dimensional definido como sigue:

\[\mathcal{S}_l = \{ \phi_1^{(l)} (Q_l) , \ldots , \phi_{N_l}^{(l)} (Q_l) \} \, .\]

La función de onda de \(n\)-modos se puede expandir en el producto de las bases \(\mathcal{S} = \otimes_{i=1}^L \mathcal{S}_i\) como la siguiente expansión tipo CI (interacción de configuraciones):

\[|\Psi\rangle = \sum_{k_1=1}^{N_1} \cdots \sum_{k_L=1}^{N_L} C_{k_1,\ldots,k_L} \phi_{k_1}^{(1)}(Q_1) \cdots \phi_{k_L}^{(L)}(Q_L) \, ,\]

Las funciones base de muchos cuerpos \(\phi_{k_1}^{(1)}(Q_1) \cdots \phi_{k_L}^{(L)}(Q_L)\) están codificadas dentro de la llamada segunda cuantización de \(n\)-modos como vectores de número de ocupación (ONVs) de la siguiente manera:

\[\phi_{k_1}(Q_1) \cdots \phi_{k_L}(Q_L) \equiv |0_1 \cdots 1_{k_1} \cdots 0_{N_1}, 0_1 \cdots 1_{k_2} \cdots 0_{N_2}, \cdots , 0_1 \cdots 1_{k_L} \cdots 0_{N_L}\rangle \, .\]

El ONV definido anteriormente es, por lo tanto, el producto de \(L\) ONVs específico del modo, cada uno describiendo un modo individual. Dado que cada modo está descrito por una y solo una función base, la ocupación de cada ONV específico del modo es uno. Desde una perspectiva teórica, cada modo se puede interpretar como una cuasi partícula distinguible (definidas como fonones en física de estado sólido). La distinguibilidad surge del hecho que la PES no es invariante por la permutación de dos modos, también en este caso a diferencia de la interacción de Coulomb entre dos partículas iguales. Desde esta perspectiva, una molécula puede ser interpretar como una colección de \(L\) partículas indistinguibles que interactúan a través del operador de la PES.

Basándonos en esta representación de segunda cuantización, presentamos un par de operadores de creación y aniquilación por modo \(l\) y por función base \(k_l\) definidos como:

\[\begin{split}\begin{aligned} a_{k_l}^\dagger |\cdots, 0_1 \cdots 0_{k_l} \cdots 0_{N_l}, \cdots\rangle &= | \cdots, 0_1 \cdots 1_{k_l} \cdots 0_{N_l}, \cdots\rangle \\ a_{k_l}^\dagger | \cdots, 0_1 \cdots 1_{k_l} \cdots 0_{N_l}, \cdots\rangle &= 0 \\ a_{k_l} | \cdots, 0_1 \cdots 1_{k_l} \cdots 0_{N_l}, \cdots\rangle &= | \cdots, 0_1 \cdots 0_{k_l} \cdots 0_{N_l}, \cdots\rangle \\ a_{k_l} | \cdots, 0_1 \cdots 0_{k_l} \cdots 0_{N_l}, \cdots\rangle &= 0 \\ \end{aligned}\end{split}\]

con

\[\begin{split}\begin{aligned} \left[ a_{k_l}^\dagger, a_{h_m}^\dagger \right] &= 0 \\ \left[ a_{k_l}, a_{h_m} \right] &= 0 \\ \left[ a_{k_l}^\dagger, a_{h_m} \right] &= \delta_{l,m} \, , \delta_{k_l,h_m} \end{aligned}\end{split}\]

La forma de la segunda cuantización se obtiene expresando el potencial como

\[\begin{split}\begin{aligned} \mathcal{H}_\text{vib}^{SQ} =& \sum_{l=1}^L \sum_{k_l,h_l}^{N_l} \langle \phi_{k_l} | T(Q_l) + V^{[l]}(Q_l) | \phi_{h_l} \rangle a_{k_l}^+ a_{h_l} \\ +& \sum_{l<m}^L \sum_{k_l,h_l}^{N_l} \sum_{k_m,h_m}^{N_m} \langle \phi_{k_l} \phi_{k_m} | V^{[l,m]}(Q_l, Q_m) | \phi_{h_l} \phi_{h_m} \rangle a_{k_l}^+ a_{k_m}^+ a_{h_l} a_{h_m} + \cdots \end{aligned}\end{split}\]

Destacamos la diferencia entre los operadores definidos aquí anteriormente y el de la estructura del electrón. Primero, como ya mencionamos, el potencial contiene (en principio) términos de acoplamiento de tres y más cuerpos que conducen a cadenas con seis (o más) operadores de segunda cuantización. Por otra parte, el Hamiltoniano conserva el número de partículas para cada modo, como se puede ver del hecho que el número de operadores de creación y aniquilación para un modo dado es el mismo en cada término. No obstante, modos diferentes están acoplados por términos de dos (o más) cuerpos que contienen operadores SQ que pertenecen a diferentes modos \(l\) y \(m\).

Referencia: Ollitrault, Pauline J., et al., arXiv:2003.12578 (2020).

Calcular el potencial electrónico

Resolver el ESE para diferentes configuraciones nucleares para obtener la función PES \(V(Q_1, \ldots, Q_L)\). Hasta ahora Qiskit ofrece la posibilidad de aproximar la PES con un campo de fuerza cuártico.

\[V(Q_1, \ldots, Q_L) = \frac{1}{2} \sum_{ij} k_{ij} Q_i Q_j + \frac{1}{6} \sum_{ijk} k_{ijk} Q_i Q_j Q_k + \frac{1}{16} \sum_{ijkl} k_{ijkl} Q_i Q_j Q_k Q_l\]

La ventaja de dicha forma para la PES es que los campos de fuerza anarmónicos (\(k_{ij}\), \(k_{ijk}\), \(k_{ijkl}\)) se pueden calcular por enfoques de diferencia finita. Para métodos para los que la energía nuclear del Hessiano se puede calcular analíticamente con métodos basados en la teoría de la respuesta (como HF y DFT) , el campo de fuerza cuártico se puede calcular mediante una diferenciación semi-numérica como:

\[k_{ijk} = \frac{H_{ij}(+\delta Q_k) - H_{ij}(-\delta Q_k)}{2\delta Q_k}\]

y

\[k_{ijkl} = \frac{H_{ij}(+\delta Q_k+\delta Q_l) - H_{ij}(+\delta Q_k-\delta Q_l) -H_{ij}(-\delta Q_k+\delta Q_l) + H_{ij}(-\delta Q_k+\delta Q_l)} {4\delta Q_k \delta Q_l}\]

Tal procedimiento numérico está implementado, por ejemplo, en el conjunto de programas Gaussian.

En la práctica esto se puede hacer con Qiskit usando GaussianForceDriver.

[1]:
from qiskit_nature.second_q.drivers import GaussianForcesDriver

# if you ran Gaussian elsewhere and already have the output file
driver = GaussianForcesDriver(logfile="aux_files/CO2_freq_B3LYP_631g.log")

# if you want to run the Gaussian job from Qiskit
# driver = GaussianForcesDriver(
#                 ['#p B3LYP/6-31g Freq=(Anharm) Int=Ultrafine SCF=VeryTight',
#                  '',
#                  'CO2 geometry optimization B3LYP/6-31g',
#                  '',
#                  '0 1',
#                  'C  -0.848629  2.067624  0.160992',
#                  'O   0.098816  2.655801 -0.159738',
#                  'O  -1.796073  1.479446  0.481721',
#                  '',
#                  ''
[2]:
from qiskit_nature.second_q.problems import HarmonicBasis

basis = HarmonicBasis([2, 2, 2, 2])

Mapear a un Hamiltoniano de qubit#

Ahora que tenemos una aproximación para el potencial, necesitamos escribir el Hamiltoniano en la segunda cuantización. Para este fin necesitamos seleccionar una a base modal para calcular las integrales de un solo cuerpo \(\langle\phi_{k_i}| V(Q_i) | \phi_{h_i} \rangle\), integrales de dos cuerpos \(\langle\phi_{k_i} \phi_{k_j}| V(Q_i,Q_j) | \phi_{h_i} \phi_{h_j} \rangle\)

En el caso más simple, las funciones \(\phi\) son las funciones propias del oscilador armónico para cada modo. La principal ventaja de esta elección es que las integrales de una PES expresada como una expansión de Taylor son fáciles de calcular con dicha base. Una rutina para calcular estas integrales está implementada en Qiskit.

El operador bosónico \(\mathcal{H}_\text{vib}^{SQ}\), se crea y debe ser mapeado a un operador de qubit. El mapeo directo presentado en la primera sección de este tutorial se puede usar en Qiskit de la siguiente manera:

[3]:
from qiskit_nature.second_q.problems import VibrationalStructureProblem
from qiskit_nature.second_q.mappers import DirectMapper

vibrational_problem = driver.run(basis=basis)
vibrational_problem.hamiltonian.truncation_order = 2
main_op, aux_ops = vibrational_problem.second_q_ops()

El operador Vibracional para el problema ahora se lee como

[4]:
print(main_op)
Vibrational Operator
number modes=4, number modals=[2, 2, 2, 2], number terms=50
  (1268.0676746875001+0j) * ( +_0_0 -_0_0 )
+ (3813.8767834375008+0j) * ( +_0_1 -_0_1 )
+ (705.8633818750002+0j) * ( +_1_0 -_1_0 )
+ (-46.025705898886045+0j) * ( +_1_0 -_1_1 )
+ (-46.025705898886045+0j) * ( +_1_1 -_1_0 )
+ (2120.1145593750007+0j) * ( +_1_1 -_1_1 )
+ (238.31540750000005+0j) * ( +_2_0 -_2_0 )
+ (728.9613775000003+0j) * ( +_2_1 -_2_1 )
+ (238.31540750000005+0j) * ( +_3_0 -_3_0 )
+ (728.9613775000003+0j) * ( +_3_1 -_3_1 )
+ (4.942542500000002+0j) * ( +_0_0 -_0_0 +_1_0 -_1_0 )
+ (-88.20174216876333+0j) * ( +_0_0 -_0_0 +_1_0 -_1_1 )
+ (-88.20174216876333+0j) * ( +_0_0 -_0_0 +_1_1 -_1_0 )
+ (14.827627500000007+0j) * ( +_0_0 -_0_0 +_1_1 -_1_1 )
+ (14.827627500000007+0j) * ( +_0_1 -_0_1 +_1_0 -_1_0 )
+ (-264.60522650629+0j) * ( +_0_1 -_0_1 +_1_0 -_1_1 )
+ (-264.60522650629+0j) * ( +_0_1 -_0_1 +_1_1 -_1_0 )
+ (44.482882500000024+0j) * ( +_0_1 -_0_1 +_1_1 -_1_1 )
+ (-10.205891250000004+0j) * ( +_2_0 -_2_0 +_0_0 -_0_0 )
+ (-30.617673750000016+0j) * ( +_2_0 -_2_0 +_0_1 -_0_1 )
+ (-4.194299375000002+0j) * ( +_2_0 -_2_0 +_1_0 -_1_0 )
+ (42.67527310283147+0j) * ( +_2_0 -_2_0 +_1_0 -_1_1 )
+ (42.67527310283147+0j) * ( +_2_0 -_2_0 +_1_1 -_1_0 )
+ (-12.582898125000007+0j) * ( +_2_0 -_2_0 +_1_1 -_1_1 )
+ (-30.61767375000002+0j) * ( +_2_1 -_2_1 +_0_0 -_0_0 )
+ (-91.85302125000007+0j) * ( +_2_1 -_2_1 +_0_1 -_0_1 )
+ (-12.582898125000007+0j) * ( +_2_1 -_2_1 +_1_0 -_1_0 )
+ (128.02581930849442+0j) * ( +_2_1 -_2_1 +_1_0 -_1_1 )
+ (128.02581930849442+0j) * ( +_2_1 -_2_1 +_1_1 -_1_0 )
+ (-37.74869437500002+0j) * ( +_2_1 -_2_1 +_1_1 -_1_1 )
+ (-10.205891250000004+0j) * ( +_3_0 -_3_0 +_0_0 -_0_0 )
+ (-30.617673750000016+0j) * ( +_3_0 -_3_0 +_0_1 -_0_1 )
+ (-4.194299375000002+0j) * ( +_3_0 -_3_0 +_1_0 -_1_0 )
+ (42.67527310283147+0j) * ( +_3_0 -_3_0 +_1_0 -_1_1 )
+ (42.67527310283147+0j) * ( +_3_0 -_3_0 +_1_1 -_1_0 )
+ (-12.582898125000007+0j) * ( +_3_0 -_3_0 +_1_1 -_1_1 )
+ (7.0983500000000035+0j) * ( +_3_0 -_3_0 +_2_0 -_2_0 )
+ (21.29505000000001+0j) * ( +_3_0 -_3_0 +_2_1 -_2_1 )
+ 0j * ( +_3_0 -_3_1 +_2_0 -_2_1 )
+ 0j * ( +_3_0 -_3_1 +_2_1 -_2_0 )
+ 0j * ( +_3_1 -_3_0 +_2_0 -_2_1 )
+ 0j * ( +_3_1 -_3_0 +_2_1 -_2_0 )
+ (-30.61767375000002+0j) * ( +_3_1 -_3_1 +_0_0 -_0_0 )
+ (-91.85302125000007+0j) * ( +_3_1 -_3_1 +_0_1 -_0_1 )
+ (-12.582898125000007+0j) * ( +_3_1 -_3_1 +_1_0 -_1_0 )
+ (128.02581930849442+0j) * ( +_3_1 -_3_1 +_1_0 -_1_1 )
+ (128.02581930849442+0j) * ( +_3_1 -_3_1 +_1_1 -_1_0 )
+ (-37.74869437500002+0j) * ( +_3_1 -_3_1 +_1_1 -_1_1 )
+ (21.29505000000001+0j) * ( +_3_1 -_3_1 +_2_0 -_2_0 )
+ (63.88515000000004+0j) * ( +_3_1 -_3_1 +_2_1 -_2_1 )

En la celda previa definimos una transformación bosónica para expresar el Hamiltoniano en la base modal armónica, con 2 modales por modo con el potencial truncado en orden 2 y el bosón “directo” al mapeo en qubit. El cálculo se ejecuta luego como:

[5]:
qubit_mapper = DirectMapper()
qubit_op = qubit_mapper.map(main_op)

print(qubit_op)
4854.200029687493 * IIIIIIII
- 618.5645973437502 * IIIIIIIZ
- 1860.5306717187502 * IIIIIIZI
- 349.48563468750024 * IIIIIZII
- 25.864048912543417 * IIIIXXII
- 25.864048912543417 * IIIIYYII
- 1049.719110937499 * IIIIZIII
- 111.85586312500007 * IIIZIIII
- 342.57516687500015 * IIZIIIII
- 111.85586312500007 * IZIIIIII
- 342.57516687500015 * ZIIIIIII
+ 1.2356356250000005 * IIIIIZIZ
+ 22.050435542190833 * IIIIXXIZ
+ 22.050435542190833 * IIIIYYIZ
+ 3.706906875000002 * IIIIZIIZ
+ 3.706906875000002 * IIIIIZZI
+ 66.1513066265725 * IIIIXXZI
+ 66.1513066265725 * IIIIYYZI
+ 11.120720625000006 * IIIIZIZI
- 2.551472812500001 * IIIZIIIZ
- 7.654418437500004 * IIIZIIZI
- 1.0485748437500004 * IIIZIZII
- 10.668818275707867 * IIIZXXII
- 10.668818275707867 * IIIZYYII
- 3.1457245312500017 * IIIZZIII
- 7.654418437500005 * IIZIIIIZ
- 22.963255312500017 * IIZIIIZI
- 3.1457245312500017 * IIZIIZII
- 32.006454827123605 * IIZIXXII
- 32.006454827123605 * IIZIYYII
- 9.437173593750005 * IIZIZIII
- 2.551472812500001 * IZIIIIIZ
- 7.654418437500004 * IZIIIIZI
- 1.0485748437500004 * IZIIIZII
- 10.668818275707867 * IZIIXXII
- 10.668818275707867 * IZIIYYII
- 3.1457245312500017 * IZIIZIII
+ 1.7745875000000009 * IZIZIIII
+ 5.323762500000003 * IZZIIIII
- 7.654418437500005 * ZIIIIIIZ
- 22.963255312500017 * ZIIIIIZI
- 3.1457245312500017 * ZIIIIZII
- 32.006454827123605 * ZIIIXXII
- 32.006454827123605 * ZIIIYYII
- 9.437173593750005 * ZIIIZIII
+ 5.323762500000003 * ZIIZIIII
+ 15.97128750000001 * ZIZIIIII

Para tener un número diferente de modales por modo:

[6]:
basis = HarmonicBasis([3, 3, 3, 3])

vibrational_problem = driver.run(basis=basis)
vibrational_problem.hamiltonian.truncation_order = 2
main_op, aux_ops = vibrational_problem.second_q_ops()

qubit_mapper = DirectMapper()

qubit_op = qubit_mapper.map(main_op)

print(qubit_op)
10788.71998265624 * IIIIIIIIIIII
- 599.2280473437502 * IIIIIIIIIIIZ
- 42.382439413480455 * IIIIIIIIIXIX
- 42.382439413480455 * IIIIIIIIIYIY
- 1802.5210217187503 * IIIIIIIIIIZI
- 3015.487755468749 * IIIIIIIIIZII
- 345.17806437499996 * IIIIIIIIZIII
- 29.42804386641884 * IIIIIIIXXIII
- 29.42804386641884 * IIIIIIIYYIII
- 9.18025376111823 * IIIIIIXIXIII
- 9.18025376111823 * IIIIIIYIYIII
- 1036.7963999999984 * IIIIIIIZIIII
- 74.16262749999993 * IIIIIIXXIIII
- 74.16262749999993 * IIIIIIYYIIII
- 1730.9391493749995 * IIIIIIZIIIII
- 102.72856234375004 * IIIIIZIIIIII
- 13.324103454983607 * IIIXIXIIIIII
- 13.324103454983607 * IIIYIYIIIIII
- 315.1932645312502 * IIIIZIIIIIII
- 541.6731217187498 * IIIZIIIIIIII
- 102.72856234375004 * IIZIIIIIIIII
- 13.324103454983597 * XIXIIIIIIIII
- 13.324103454983597 * YIYIIIIIIIII
- 315.1932645312502 * IZIIIIIIIIII
- 541.6731217187498 * ZIIIIIIIIIII
+ 1.2356356250000005 * IIIIIIIIZIIZ
+ 22.050435542190833 * IIIIIIIXXIIZ
+ 22.050435542190833 * IIIIIIIYYIIZ
- 1.7474526590263566 * IIIIIIXIXIIZ
- 1.7474526590263566 * IIIIIIYIYIIZ
+ 3.706906875000002 * IIIIIIIZIIIZ
+ 31.184025000000005 * IIIIIIXXIIIZ
+ 31.184025000000005 * IIIIIIYYIIIZ
+ 6.178178125000002 * IIIIIIZIIIIZ
- 1.7474526590263566 * IIIIIIIIZXIX
- 1.7474526590263566 * IIIIIIIIZYIY
- 31.184025000000013 * IIIIIIIXXXIX
- 31.184025000000013 * IIIIIIIYYXIX
- 31.184025000000013 * IIIIIIIXXYIY
- 31.184025000000013 * IIIIIIIYYYIY
+ 2.471271250000001 * IIIIIIXIXXIX
+ 2.471271250000001 * IIIIIIYIYXIX
+ 2.471271250000001 * IIIIIIXIXYIY
+ 2.471271250000001 * IIIIIIYIYYIY
- 5.24235797707907 * IIIIIIIZIXIX
- 5.24235797707907 * IIIIIIIZIYIY
- 44.100871084381666 * IIIIIIXXIXIX
- 44.100871084381666 * IIIIIIYYIXIX
- 44.100871084381666 * IIIIIIXXIYIY
- 44.100871084381666 * IIIIIIYYIYIY
- 8.737263295131783 * IIIIIIZIIXIX
- 8.737263295131783 * IIIIIIZIIYIY
+ 3.706906875000002 * IIIIIIIIZIZI
+ 66.1513066265725 * IIIIIIIXXIZI
+ 66.1513066265725 * IIIIIIIYYIZI
- 5.24235797707907 * IIIIIIXIXIZI
- 5.24235797707907 * IIIIIIYIYIZI
+ 11.120720625000006 * IIIIIIIZIIZI
+ 93.55207500000002 * IIIIIIXXIIZI
+ 93.55207500000002 * IIIIIIYYIIZI
+ 18.534534375000007 * IIIIIIZIIIZI
+ 6.178178125000003 * IIIIIIIIZZII
+ 110.25217771095417 * IIIIIIIXXZII
+ 110.25217771095417 * IIIIIIIYYZII
- 8.737263295131783 * IIIIIIXIXZII
- 8.737263295131783 * IIIIIIYIYZII
+ 18.53453437500001 * IIIIIIIZIZII
+ 155.920125 * IIIIIIXXIZII
+ 155.920125 * IIIIIIYYIZII
+ 30.89089062500001 * IIIIIIZIIZII
- 2.551472812500001 * IIIIIZIIIIIZ
+ 3.608327455463727 * IIIIIZIIIXIX
+ 3.608327455463727 * IIIIIZIIIYIY
- 7.654418437500004 * IIIIIZIIIIZI
- 12.757364062500006 * IIIIIZIIIZII
- 1.0485748437500004 * IIIIIZIIZIII
- 10.668818275707867 * IIIIIZIXXIII
- 10.668818275707867 * IIIIIZIYYIII
+ 1.4829087651944997 * IIIIIZXIXIII
+ 1.4829087651944997 * IIIIIZYIYIII
- 3.1457245312500017 * IIIIIZIZIIII
- 15.087987500000002 * IIIIIZXXIIII
- 15.087987500000002 * IIIIIZYYIIII
- 5.242874218750002 * IIIIIZZIIIII
+ 3.608327455463727 * IIIXIXIIIIIZ
+ 3.608327455463727 * IIIYIYIIIIIZ
- 5.102945625000002 * IIIXIXIIIXIX
- 5.102945625000002 * IIIXIXIIIYIY
- 5.102945625000002 * IIIYIYIIIXIX
- 5.102945625000002 * IIIYIYIIIYIY
+ 10.82498236639118 * IIIXIXIIIIZI
+ 10.82498236639118 * IIIYIYIIIIZI
+ 18.04163727731863 * IIIXIXIIIZII
+ 18.04163727731863 * IIIYIYIIIZII
+ 1.4829087651944997 * IIIXIXIIZIII
+ 1.4829087651944997 * IIIYIYIIZIII
+ 15.087987500000006 * IIIXIXIXXIII
+ 15.087987500000006 * IIIXIXIYYIII
+ 15.087987500000006 * IIIYIYIXXIII
+ 15.087987500000006 * IIIYIYIYYIII
- 2.097149687500001 * IIIXIXXIXIII
- 2.097149687500001 * IIIXIXYIYIII
- 2.097149687500001 * IIIYIYXIXIII
- 2.097149687500001 * IIIYIYYIYIII
+ 4.4487262955835 * IIIXIXIZIIII
+ 4.4487262955835 * IIIYIYIZIIII
+ 21.337636551415734 * IIIXIXXXIIII
+ 21.337636551415734 * IIIXIXYYIIII
+ 21.337636551415734 * IIIYIYXXIIII
+ 21.337636551415734 * IIIYIYYYIIII
+ 7.4145438259724985 * IIIXIXZIIIII
+ 7.4145438259724985 * IIIYIYZIIIII
- 7.654418437500005 * IIIIZIIIIIIZ
+ 10.824982366391183 * IIIIZIIIIXIX
+ 10.824982366391183 * IIIIZIIIIYIY
- 22.963255312500017 * IIIIZIIIIIZI
- 38.27209218750002 * IIIIZIIIIZII
- 3.1457245312500017 * IIIIZIIIZIII
- 32.006454827123605 * IIIIZIIXXIII
- 32.006454827123605 * IIIIZIIYYIII
+ 4.4487262955835 * IIIIZIXIXIII
+ 4.4487262955835 * IIIIZIYIYIII
- 9.437173593750005 * IIIIZIIZIIII
- 45.26396250000001 * IIIIZIXXIIII
- 45.26396250000001 * IIIIZIYYIIII
- 15.728622656250007 * IIIIZIZIIIII
- 12.757364062500006 * IIIZIIIIIIIZ
+ 18.04163727731863 * IIIZIIIIIXIX
+ 18.04163727731863 * IIIZIIIIIYIY
- 38.27209218750002 * IIIZIIIIIIZI
- 63.786820312500026 * IIIZIIIIIZII
- 5.242874218750002 * IIIZIIIIZIII
- 53.34409137853934 * IIIZIIIXXIII
- 53.34409137853934 * IIIZIIIYYIII
+ 7.414543825972498 * IIIZIIXIXIII
+ 7.414543825972498 * IIIZIIYIYIII
- 15.728622656250007 * IIIZIIIZIIII
- 75.43993750000001 * IIIZIIXXIIII
- 75.43993750000001 * IIIZIIYYIIII
- 26.21437109375001 * IIIZIIZIIIII
- 2.551472812500001 * IIZIIIIIIIIZ
+ 3.608327455463727 * IIZIIIIIIXIX
+ 3.608327455463727 * IIZIIIIIIYIY
- 7.654418437500004 * IIZIIIIIIIZI
- 12.757364062500006 * IIZIIIIIIZII
- 1.0485748437500004 * IIZIIIIIZIII
- 10.668818275707867 * IIZIIIIXXIII
- 10.668818275707867 * IIZIIIIYYIII
+ 1.4829087651944997 * IIZIIIXIXIII
+ 1.4829087651944997 * IIZIIIYIYIII
- 3.1457245312500017 * IIZIIIIZIIII
- 15.087987500000002 * IIZIIIXXIIII
- 15.087987500000002 * IIZIIIYYIIII
- 5.242874218750002 * IIZIIIZIIIII
+ 1.7745875000000009 * IIZIIZIIIIII
- 2.509645710117766 * IIZXIXIIIIII
- 2.509645710117766 * IIZYIYIIIIII
+ 5.323762500000003 * IIZIZIIIIIII
+ 8.872937500000004 * IIZZIIIIIIII
- 2.8170754092577175 * IXXXXIIIIIII
- 2.8170754092577175 * IXXYYIIIIIII
- 2.8170754092577175 * IYYXXIIIIIII
- 2.8170754092577175 * IYYYYIIIIIII
+ 3.608327455463727 * XIXIIIIIIIIZ
+ 3.608327455463727 * YIYIIIIIIIIZ
- 5.102945625000002 * XIXIIIIIIXIX
- 5.102945625000002 * XIXIIIIIIYIY
- 5.102945625000002 * YIYIIIIIIXIX
- 5.102945625000002 * YIYIIIIIIYIY
+ 10.82498236639118 * XIXIIIIIIIZI
+ 10.82498236639118 * YIYIIIIIIIZI
+ 18.04163727731863 * XIXIIIIIIZII
+ 18.04163727731863 * YIYIIIIIIZII
+ 1.4829087651944997 * XIXIIIIIZIII
+ 1.4829087651944997 * YIYIIIIIZIII
+ 15.087987500000006 * XIXIIIIXXIII
+ 15.087987500000006 * XIXIIIIYYIII
+ 15.087987500000006 * YIYIIIIXXIII
+ 15.087987500000006 * YIYIIIIYYIII
- 2.097149687500001 * XIXIIIXIXIII
- 2.097149687500001 * XIXIIIYIYIII
- 2.097149687500001 * YIYIIIXIXIII
- 2.097149687500001 * YIYIIIYIYIII
+ 4.4487262955835 * XIXIIIIZIIII
+ 4.4487262955835 * YIYIIIIZIIII
+ 21.337636551415734 * XIXIIIXXIIII
+ 21.337636551415734 * XIXIIIYYIIII
+ 21.337636551415734 * YIYIIIXXIIII
+ 21.337636551415734 * YIYIIIYYIIII
+ 7.4145438259724985 * XIXIIIZIIIII
+ 7.4145438259724985 * YIYIIIZIIIII
- 2.509645710117766 * XIXIIZIIIIII
- 2.509645710117766 * YIYIIZIIIIII
+ 3.5491750000000017 * XIXXIXIIIIII
+ 3.5491750000000017 * XIXYIYIIIIII
+ 3.5491750000000017 * YIYXIXIIIIII
+ 3.5491750000000017 * YIYYIYIIIIII
- 7.528937130353299 * XIXIZIIIIIII
- 7.528937130353299 * YIYIZIIIIIII
- 12.54822855058883 * XIXZIIIIIIII
- 12.54822855058883 * YIYZIIIIIIII
- 7.654418437500005 * IZIIIIIIIIIZ
+ 10.824982366391183 * IZIIIIIIIXIX
+ 10.824982366391183 * IZIIIIIIIYIY
- 22.963255312500017 * IZIIIIIIIIZI
- 38.27209218750002 * IZIIIIIIIZII
- 3.1457245312500017 * IZIIIIIIZIII
- 32.006454827123605 * IZIIIIIXXIII
- 32.006454827123605 * IZIIIIIYYIII
+ 4.4487262955835 * IZIIIIXIXIII
+ 4.4487262955835 * IZIIIIYIYIII
- 9.437173593750005 * IZIIIIIZIIII
- 45.26396250000001 * IZIIIIXXIIII
- 45.26396250000001 * IZIIIIYYIIII
- 15.728622656250007 * IZIIIIZIIIII
+ 5.323762500000003 * IZIIIZIIIIII
- 7.528937130353299 * IZIXIXIIIIII
- 7.528937130353299 * IZIYIYIIIIII
+ 15.97128750000001 * IZIIZIIIIIII
+ 26.618812500000015 * IZIZIIIIIIII
+ 2.8170754092577175 * XXIIXXIIIIII
+ 2.8170754092577175 * XXIIYYIIIIII
+ 2.8170754092577175 * YYIIXXIIIIII
+ 2.8170754092577175 * YYIIYYIIIIII
- 12.757364062500006 * ZIIIIIIIIIIZ
+ 18.04163727731863 * ZIIIIIIIIXIX
+ 18.04163727731863 * ZIIIIIIIIYIY
- 38.27209218750002 * ZIIIIIIIIIZI
- 63.786820312500026 * ZIIIIIIIIZII
- 5.242874218750002 * ZIIIIIIIZIII
- 53.34409137853934 * ZIIIIIIXXIII
- 53.34409137853934 * ZIIIIIIYYIII
+ 7.414543825972498 * ZIIIIIXIXIII
+ 7.414543825972498 * ZIIIIIYIYIII
- 15.728622656250007 * ZIIIIIIZIIII
- 75.43993750000001 * ZIIIIIXXIIII
- 75.43993750000001 * ZIIIIIYYIIII
- 26.21437109375001 * ZIIIIIZIIIII
+ 8.872937500000003 * ZIIIIZIIIIII
- 12.548228550588828 * ZIIXIXIIIIII
- 12.548228550588828 * ZIIYIYIIIIII
+ 26.61881250000001 * ZIIIZIIIIIII
+ 44.36468750000001 * ZIIZIIIIIIII

Resolviendo el VibrationalStructureProblem#

A continuación, calcularemos el estado fundamental de nuestra instancia del problema. Para obtener más información sobre los componentes individuales que se incluyen en GroundStateSolver, consulta los tutoriales correspondientes.

[7]:
# for simplicity, we will use the smaller basis again
vibrational_problem = driver.run(basis=HarmonicBasis([2, 2, 2, 2]))
vibrational_problem.hamiltonian.truncation_order = 2
[8]:
from qiskit_algorithms import NumPyMinimumEigensolver
from qiskit_nature.second_q.algorithms import GroundStateEigensolver

solver = GroundStateEigensolver(
    qubit_mapper,
    NumPyMinimumEigensolver(filter_criterion=vibrational_problem.get_default_filter_criterion()),
)
[9]:
result = solver.solve(vibrational_problem)
print(result)
=== GROUND STATE ===

* Vibrational ground state energy (cm^-1): 2432.106954036546
The number of occupied modals for each mode is:
- Mode 0: 1.0
- Mode 1: 1.0
- Mode 2: 1.0
- Mode 3: 1.0
[10]:
import qiskit.tools.jupyter

%qiskit_version_table
%qiskit_copyright

Version Information

Qiskit SoftwareVersion
qiskit-terra0.24.0.dev0+2b3686f
qiskit-aer0.11.2
qiskit-ibmq-provider0.19.2
qiskit-nature0.6.0
System information
Python version3.9.16
Python compilerGCC 12.2.1 20221121 (Red Hat 12.2.1-4)
Python buildmain, Dec 7 2022 00:00:00
OSLinux
CPUs8
Memory (Gb)62.50002670288086
Thu Apr 06 08:54:06 2023 CEST

This code is a part of Qiskit

© Copyright IBM 2017, 2023.

This code is licensed under the Apache License, Version 2.0. You may
obtain a copy of this license in the LICENSE.txt file in the root directory
of this source tree or at http://www.apache.org/licenses/LICENSE-2.0.

Any modifications or derivative works of this code must retain this
copyright notice, and modified files need to carry a notice indicating
that they have been altered from the originals.