def get_V_hartree(V_hartree, elektroni_tiheys, tolerance=1e-5): """ lasketaan Hartree potentiaali tämänhetkiselle elektronitiheydelle""" e_vanha = E_elektroni_elektroni(elektroni_tiheys, V_hartree) e_uusi = e_vanha + 100.0 counter = 0 while (abs (e_uusi - e_vanha) > tolerance ): tee_gauss_seidel_yksi_askel(V_hartree, elektroni_tiheys) e_vanha = e_uusi e_uusi = E_elektroni_elektroni(elektroni_tiheys, V_hartree) counter = counter + 1
def get_V_hartree(V_hartree, elektroni_tiheys_3d, dx, dy, dz, n_iter=10): """ lasketaan Hartree potentiaali tämänhetkiselle elektronitiheydelle""" for step in range(n_iter): tee_gauss_seidel_yksi_askel(V_hartree, elektroni_tiheys_3d, dx, dy, dz)
nx = 4 ny = 4 nz = 1 dx = 0.1 dy = 0.1 dz = 0.1 V_hartree = tee_gridi(nx,ny,nz) #print "V_hartree", V_hartree elektroni_tiheys = tee_gridi(nx,ny,nz) elektroni_tiheys[1,1,0] = -1 elektroni_tiheys[2,2,0] = -1 #elektroni_tiheys[3,0,1] = -3 aseta_gridin_alkuarvo(0, V_hartree) #print "elektroni_tiheys", elektroni_tiheys #print "V_hartree", V_hartree #sys.exit() for step in range(10): tee_gauss_seidel_yksi_askel(V_hartree, elektroni_tiheys, dx, dy, dz) #print V_hartree print "kineettinen energia", E_T(elektroni_tiheys) print "vaihtokorrelaatio energia", E_vaihtokorrelaatio(elektroni_tiheys) print "elektroni_elektroni energia", \ E_elektroni_elektroni(elektroni_tiheys,V_hartree) print "elektroni_ydin energia", \ E_elektroni_ydin(elektroni_tiheys,ytimet,dx,dy,dz) plot2d(V_hartree, dx, dy, nx, ny)