#pragma css /css/2016.css
<<BI>>




= Вычисление параметров молекулы водорода =

Вам дан файл с фунциями для расчёта основных  матриц  [[http://kodomo.fbb.msu.ru/~golovin/qm/hfscf.py| hfscf.py ]]

Теория (ref 7) : https://chemistlibrary.files.wordpress.com/2015/02/modern-quantum-chemistry.pdf

Более подробная реализация на Python : https://gitlab.com/LLindenbauer/Hartree-Fock-Tutorial/-/blob/master/Hartree-Fock%20Sample.ipynb

Функция расчёта орбиталей на основе подхода Рутана Холла выглядит примерно так:

{{{#!highlight python

def SCF (r = 1.4632, Z=[1,1], b1 = GTO["H"], b2 = GTO["H"], b = 3, vbs=False):
    R = [0, r]
    if vbs: print("*) Generando matriz de traslape S.")
    s_scf = S(....
    if vbs: print("\n*) Generando hamiltoniano H.")
    h_scf = H(....
        
    # Diagonalizar matriz S y hallar matriz X
    if vbs: print("\n*) Diagonalizando matriz S y hallando matriz diagonal X.")
    X = diagon(m=s_scf)
    Xa = X.getH()
    
    # Estimar matriz de densidad P
    if vbs: print("\n*) Creando matriz de densidad P.")
    p_scf = np.matrix([[0,0],[0,0]], dtype=np.float64)  # Referencia (7) p. 148
    
    # Comenzar proceso iterativo
    if vbs: print("\n*) Comenzando con el SCF.")
    for iteracion in range(50):
        # Construir matriz de Fock F
        # F = H + G
        if vbs: print("\n**) Generando la matriz de Fock: calculando \
integrales de dos electrones.")
        g_scf = G(....
        f_scf = h_scf + ....   # Referencia (7) p. 141 eq. (3.154)
        
        # Construir matriz F'
        # F' = X_adj * F * X
        if vbs: print("**) Cambiando la base de F.")
        f_tra = Xa * f_scf * X
        
        # Diagonalizar matriz F y constuir matriz C'
        if vbs: print("**) Diagonalizando F' y generando C'.")
        c_tra = diagon2(m=f_tra)
        
        # Construir matriz C
        # C = X * C'
        if vbs: print("**) Construyendo matriz de coeficientes C.")
        c_scf = X * c_tra
        
        # Construir matriz P a partir de matriz C
        if vbs: print("**) Recalculando matriz de densidad P.")
        p_temp = P(C=c_scf)
        
        print("\nConcluida la " + str(iteracion + 1) + ". iteracion.\n")
        
        # Revisar convergencia
        if np.linalg.norm(p_temp - p_scf) < 1E-4: # Referencia (7) p. 148
            print("\n\n-->El campo autoconsistente SI ha convergido!")
            return {"S":s_scf,"H":h_scf,"X": X,"F":f_scf,"C":c_scf,"P":p_temp}
        else:
            p_scf = p_temp
    print("\n\n-->El campo autoconsistente NO ha convergido!\nRevisar supuestos.")
    return {"S":s_scf,"H":h_scf,"X": X,"F":f_scf,"C":c_scf,"P":p_temp}

}}}

=== Опишите : ===

 * Добавьте коментарии в код функции 
 * Опишите объекты S,F,X,H,C

=== Рссчитайте: ===

 * Элеткронную энрегию молекулы
 * Полную эннергию молекулы

=== Постройте : ===

 * 1D плот орбиталей
 * 2D плот орбиталей