La derivación formal necesaria ya ha sido bien hecha por AngusTheMan. Empezaré por la última ecuación:
$$ \langle \mu_{z} \rangle = \langle \Psi | \hat{\mu}_{z} | \Psi \rangle $$
donde $\Psi$ es la función de onda variacional; puede ser cualquier estado molecular. Es importante que sea variacional, de lo contrario el enfoque del valor de expectativa no es exacto. Por lo tanto, esto funciona para las funciones de onda SCF, CI y MCSCF, pero es necesario tomar derivadas adicionales para las funciones de onda Moller-Plesset y de clústeres acoplados. Hay que trabajar más para las funciones de onda multideterminadas como CI y MCSCF, pero la complejidad no es diferente para un solo estado en cada función de onda. Es posible que haya alguna partición del espacio de MO que esté descuidando y que sea necesaria para MCSCF, por lo que limitaré mi trabajo a una función de onda monodeterminada.
Expandir la función de onda como una combinación lineal de orbitales moleculares (MOs)
$$ \Psi = \sum_{i} \psi_{i}, $$
donde cada orbital molecular es una combinación lineal de orbitales atómicos (AOs)
$$ \psi_{i} = \sum_{\mu} C_{\mu i} \phi_{\mu}, $$
donde $C_{\mu i}$ es la matriz de coeficientes de MO, por lo que nuestro valor de expectativa ahora se ve así:
$$ \langle \mu_{z} \rangle = \sum_{i}^{\textrm{occ MOs}} \sum_{\mu\nu}^{\textrm{AOs}} C_{\mu i} C_{\nu i} \langle \phi_{\mu} | \hat{\mu}_{z} | \phi_{\nu} \rangle. $$
Los índices $\mu,\nu$ se ejecuta sobre todos los AOs, y el índice $i$ recorre las MO ocupadas. Sólo hay un índice porque este es un operador de un solo electrón. También estoy descuidando cualquier valor complejo aquí, ya que casi siempre trabajamos con AOs y coeficientes de MO de valor real.
Hacemos un último reordenamiento. Sustituir los coeficientes de MO por la matriz de densidad
$$ P_{\mu\nu} = \sum_{i}^{\textrm{occ MOs}} C_{\mu i} C_{\nu i} $$
para dar la primera "ecuación de trabajo" explícita:
$$ \langle \mu_{z} \rangle = \sum_{\mu\nu}^{\textrm{AOs}} P_{\mu\nu} \langle \phi_{\mu} | \hat{\mu}_{z} | \phi_{\nu} \rangle $$
Digo lo primero por dos razones: normalmente intentamos evitar bucles explícitos como éste, y la expresión puede descomponerse más, dependiendo de qué propiedades moleculares sean de interés; seré más claro sobre esto más adelante. Dentro de la suma hay dos términos:
- La matriz de densidad $P_{\mu\nu}$ que proviene de un cálculo convergente del SCF.
- La integral del operador dipolar sobre dos funciones base, $\langle \phi_{\mu} | \hat{\mu}_{z} | \phi_{\nu} \rangle$ . Los orbitales atómicos se representan como funciones base centradas en el átomo. Se pueden calcular una vez y en cualquier momento, ya que las cantidades aquí no cambian en el transcurso de un cálculo.
Cada uno de estos términos se representa como una matriz. Dado que el índice $\mu$ corre a lo largo de las filas y $\nu$ recorre las columnas de cada matriz, la "contracción" implica un producto matricial seguido de la traza, o un producto por elementos seguido de una suma de acumulación sobre todos los elementos de la matriz. Hay otros detalles con los que hay que tener cuidado, como en qué unidades debe estar el resultado, que cambia el prefactor (los programas trabajan internamente en unidades atómicas), y cuál es el origen para el operador dipolar, pero eso es todo.
Bueno, más o menos. En realidad, estoy tratando algunas de las partes internas del programa como una caja negra. Si estás familiarizado con Hartree-Fock, debería estar claro dónde $P_{\mu\nu}$ pero ¿qué pasa con la integral? Para un valor de expectativa general $\langle A \rangle$ con su correspondiente operador, donde hace $\langle \phi_{\mu} | \hat{A} | \phi_{\nu} \rangle$ ¿viene? Si ya está disponible en el código, entonces se llama a una función envolvente que luego llama al motor integral para hacer todo el trabajo sucio, y se obtiene una matriz ordenada sin tener que preocuparse por los detalles. Si $\langle \phi_{\mu} | \hat{A} | \phi_{\nu} \rangle$ no está presente, dependiendo de la complejidad de $\hat{A}$ En el caso de la ecuación integral de trabajo, puede ser necesaria una cantidad no trivial de derivación, seguida de la implementación.
Ignorando cualquier posible contracción de las funciones base primitivas, expande $\langle \phi_{\mu} | \hat{A} | \phi_{\nu} \rangle$ utilizando la definición de $\phi$ en coordenadas cartesianas:
$$ \phi(\mathbf{r}; \mathbf{A}, \mathbf{a}, \zeta) = (x-A_x)^{a_x} (y-A_y)^{a_y} (z-A_z)^{a_z} e^{-\zeta |\mathbf{r} - \mathbf{A}|^2} $$
donde $\mathbf{r} = (x, y, z)$ es la posición del electrón, $\mathbf{A} = (A_x, A_y, A_z)$ es la posición de la función base (casi siempre centrada en el átomo), y $\mathbf{a} = (a_x, a_y, a_z)$ son los momentos angulares para cada coordenada, con $l_{\textrm{max}} = a_x + a_y + a_z$ momento angular total de la función base. $(0,0,0)$ es una función s, $(1,1,0)$ y $(0,0,2)$ son funciones d, y así sucesivamente.
Formando la integral de forma más explícita se obtiene
$$ \langle \phi_{\mu} | \hat{A} | \phi_{\nu} \rangle = \int\int d\mathbf{r}_1 d\mathbf{r}_2 \left[ (x_1-A_x)^{a_x} (y_1-A_y)^{a_y} (z_1-A_z)^{a_z} e^{-\zeta_a |\mathbf{r}_1 - \mathbf{A}|^2} \right] \\ \times\left[ \hat{A} \right]\left[ (x_2-B_x)^{b_x} (y_2-B_y)^{b_y} (z_2-B_z)^{b_z} e^{-\zeta_b |\mathbf{r}_2 - \mathbf{B}|^2} \right] $$
Antes de ir más lejos, $\hat{A}$ debe definirse. Si $\hat{A} = 1$ se convierte en una integral de solapamiento. El operador dipolar en el z -está dada por $\hat{A} = \hat{\mu}_{z} = -ez = -e(z_3 - C_z)$ , donde $z_3$ es la coordenada de integración y $C_z$ es el origen del dipolo en el z -dirección, que normalmente se toma como cero. Todo se mantiene en unidades atómicas hasta después de la integral/contracción de la densidad, por lo que se deja de lado el prefactor $-e$ . Ahora podemos generalizar esto a un operador de momento multipolar cartesiano arbitrario,
$$ \hat{A} = \mathfrak{M}(\mathbf{r}_3) = (x_3 - C_x)^{c_x} (y_3 - C_y)^{c_y} (z_3 - C_z)^{c_z} $$
donde $(c_x, c_y, c_z)$ determinan la coordenada de cada multipolar, y su suma es el orden multipolar total; por ejemplo, $(1,0,0), (0,1,0), (0,0,1)$ son los x -, y -, y z -direcciones del operador dipolar. El operador de momento cartesiano se parece a una función base gaussiana donde $\zeta = 0$ .
Una vez que se ha derivado la forma de un operador, es necesario implementarlo como parte de un paquete de integrales, cada uno de los cuales implementa uno o más algoritmos para calcular integrales. Cada algoritmo lleva el nombre de los autores del artículo en el que se introdujeron, y suelen estar abreviados. Por ejemplo, el primero que conozco es el trabajo de Taketa, Huzinaga, O-Ohata (THO, DOI: 10.1143/JPSJ.21.2313 ), donde se dan ecuaciones de trabajo explícitas para las integrales de solapamiento de 2 centros, de energía cinética de 2 centros, de atracción electrónica-nuclear de 2 centros y de repulsión electrónica de 4 centros. Se puede encontrar una implementación de trabajo en el PyQuante paquete. Hice un Traducción del cuaderno IPython de los fragmentos de código en la primera página de la documentación oficial.
Otros algoritmos más complejos son los de Pople-Hehre (PH), McMurchie-Davidson (MD, DOI: 10.1016/0021-9991(78)90092-X ), Obara-Saika (OS, DOI: 10.1063/1.450106 ), Dupuis-Rys-King (DRK) y Head-Gordon-Pople (HGP). Estoy seguro de que me estoy olvidando de algunos, incluido el artículo seminal de Boys que introdujo el uso de funciones gaussianas como sustituto de las funciones de tipo Slater en los conjuntos de bases. Una buena revisión de estos algoritmos se encuentra en un artículo de Peter Gill (DOI: 10.1016/S0065-3276(08)60019-2 ); es el autor original del código integral en ambos Gaussiano y Q-Chem .
Para cerrar el círculo, hace unos meses escribí un código para calcular el momento dipolar usando pyquante2 y un wrapper que llama a una implementación del algoritmo integral recursivo de Obara-Saika. Puedes encontrarlo en aquí con algunas comparaciones con programas cuánticos "industriales".
1 votos
Podrías utilizar el teorema variacional para determinar los coeficientes de los orbitales moleculares (funciones de onda de un electrón). Si dejas que las funciones de onda moleculares sean una superposición lineal de las funciones de onda atómicas base $\Psi =\sum c_i\psi_i$ Con los coeficientes orbitales puedes entender las propiedades clave de tu molécula. También puedes racionalizar las tendencias de la polaridad de los enlaces, que no se pueden explicar con otras teorías.