In [45]:
import hsfcf
import numpy as np

def SCF (r = 1.4632, Z=[1,1], b1 = hsfcf.GTO["H"], b2 = hsfcf.GTO["H"], b = 3):

    R = [0, r] # Π—Π°Π΄Π°Π΅ΠΌ Ρ†Π΅Π½Ρ‚Ρ€Ρ‹ Π°Ρ‚ΠΎΠΌΠΎΠ²
    s_scf = hsfcf.S(R, b1, b2, b) # ГСнСрация ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹ пСрСкрывания S
    h_scf = hsfcf.H(R, Z, b1, b2, b) # ГСнСрация Π³Π°ΠΌΠΈΠ»ΡŒΡ‚ΠΎΠ½ΠΈΠ°Π½Π° H для ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° Π€ΠΎΠΊΠ° (core-Hamiltonian operator)
        

    X = hsfcf.diagon(m=s_scf) # Диагонализированная ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹ S
    Xa = X.getH() # транспонированная ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π°
    
    p_scf = np.matrix([[0,0],[0,0]], dtype=np.float64) #  ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π° плотности P
    
    for iteracion in range(50): #  ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° сходимости SCF итСрациями (заполняСм ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρƒ F, Π΄ΠΈΠ°Π³ΠΎΠ½Π°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅ΠΌ, провСряСм Ρ€Π°Π·Π½ΠΈΡ†Ρƒ)
        
        # РасчСт Π΄Π²ΡƒΡ… элСктронной части ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹ Π€ΠΎΠΊΠ° (G)
        # ГСнСрация ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹ Π€ΠΎΠΊΠ°: F = H + G
        g_scf = hsfcf.G(r, p_scf, b1, b2, b)
        f_scf = h_scf + g_scf
        
        # Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹ F' = X_adj * F * X
        f_tra = Xa * f_scf * X
        
        # Диагонализация F' ΠΈ гСнСрация C'
        c_tra = hsfcf.diagon2(m=f_tra)
    
        # ΠŸΠΎΡΡ‚Ρ€ΠΎΠ΅Π½ΠΈΠ΅ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹ коэффициСнтов C C = X * C'
        c_scf = X * c_tra
        
        # Из ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹ C строим ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρƒ Π  ΠΈ пСрСсчитываСм ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹ плотности P
        p_temp = hsfcf.P(C=c_scf)
        
        print("ΠžΠΊΠΎΠ½Ρ‡Π΅Π½Π° " + str(iteracion + 1) + " итСрация.\n")
        
        # ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° сходимости
        if np.linalg.norm(p_temp - p_scf) < 1E-4:
            print("SCF сошлось! Π£Ρ€Π°!")
            return {"S":s_scf,"H":h_scf,"X": X,"F":f_scf,"C":c_scf,"P":p_temp}
        else:
            p_scf = p_temp
            
    print("SCF нС сошлось. Упс...")
    return {"S":s_scf,"H":h_scf,"X": X,"F":f_scf,"C":c_scf,"P":p_temp}
In [46]:
s=SCF()
ΠžΠΊΠΎΠ½Ρ‡Π΅Π½Π° 1 итСрация.

ΠžΠΊΠΎΠ½Ρ‡Π΅Π½Π° 2 итСрация.

ΠžΠΊΠΎΠ½Ρ‡Π΅Π½Π° 3 итСрация.

ΠžΠΊΠΎΠ½Ρ‡Π΅Π½Π° 4 итСрация.

ΠžΠΊΠΎΠ½Ρ‡Π΅Π½Π° 5 итСрация.

ΠžΠΊΠΎΠ½Ρ‡Π΅Π½Π° 6 итСрация.

ΠžΠΊΠΎΠ½Ρ‡Π΅Π½Π° 7 итСрация.

SCF сошлось! Π£Ρ€Π°!
In [47]:
hsfcf.orbital(s['C']) #  ΠΎΡ€Π±ΠΈΡ‚Π°Π»ΠΈ Π² 1 ΠΈΠ·ΠΌΠ΅Ρ€Π΅Π½ΠΈΠΈ
In [48]:
hsfcf.orbital2D(s['C'], s['X'], s['F']) #ΠΈ Π² Π΄Π²ΡƒΡ…
In [49]:
total = hsfcf.ener_tot()
print('Полная энСргия ΠΌΠΎΠ»Π΅ΠΊΡƒΠ»Ρ‹: ' + str(total))


orbit = hsfcf.ener_orbs(s['X'], s['F'])
print('Π­Π½Π΅Ρ€Π³ΠΈΠΈ ΠΎΡ€Π±ΠΈΡ‚Π°Π»Π΅ΠΉ: ' + str(orbit[0]) + ' ΠΈ ' + str(orbit[1]))

electr = hsfcf.ener_elec(s['P'], s['H'], s['F'])
print('ЭлСктронная энСргия ΠΌΠΎΠ»Π΅ΠΊΡƒΠ»Ρ‹: ' + str(electr))
Полная энСргия ΠΌΠΎΠ»Π΅ΠΊΡƒΠ»Ρ‹: 0.683433570256971
Π­Π½Π΅Ρ€Π³ΠΈΠΈ ΠΎΡ€Π±ΠΈΡ‚Π°Π»Π΅ΠΉ: -0.5646153594583119 ΠΈ 0.636867398093562
ЭлСктронная энСргия ΠΌΠΎΠ»Π΅ΠΊΡƒΠ»Ρ‹: -1.7974485548087507
In [ ]: