def __init__(self,Z,Ne=0,ni=None,spin=2,scf=True,\ gridN=350,gridMin=1e-4,gridMax=100,Lmax=3,\ convCrit=1e-3, mixConst=0.3): """ Main class to calculate find LSDA solution of atom in: Z : Atomic number Ne : Additional electrons 0, +-1 etc. ni : Initial electron density on radial grid spin : 1 (non) or 2 (spin) polarized solution scf : Find SCF solution (True) one iteration (False) grid N,min,max : Radial grid specification """ self.grid = FEM.radialGrid(NN=gridN,rmin=gridMin,rmax=gridMax) print len(self.grid.x) self.spin, self.Lmax = spin, Lmax self.Z, self.Ne, self.convCrit = Z, Ne, convCrit self.mixConst = mixConst if ni==None: self.initDensity() else: self.n = ni self.initMat() if scf: self.runSCF()
import time as t Z=4 #Mass number Ne=4 #No of electrons l=0 #max value of l L=l*(l+1)/2 spinn=0 #0=y,1=n NN=350 #grid pts elec=N.zeros(shape=50);elec[0:Ne]=N.ones(shape=Ne) if spinn==0: s1=N.sum(elec[0:2]);s2=N.sum(elec[2:4]);s3=N.sum(elec[4:10]);s4=N.sum(elec[10:12]) s5=N.sum(elec[12:18]);s6=N.sum(elec[18:28]);s7=N.sum(elec[28:30]);s8=N.sum(elec[30:36]);s9=N.sum(elec[36:46]) g=F.radialGrid(NN=350,rmin=1e-4,rmax=100) D2, S=F.D2mat(g), F.Smat(g) n=N.zeros(shape=NN) Vxc=N.zeros(shape=(NN)) def excorrutanspinn(n): rs=(3./4./N.pi/n)**(1./3);bb=3.72744;c=12.9352;K=0.0621814; y0=-0.10498;Q=N.sqrt(4*c-bb**2);y=N.sqrt(rs);Y=y**2+bb*y+c;Yy0=y0**2+bb*y0+c; Ex=-3./4./N.pi*(3*N.pi**2*n)**(1./3) DEx=-1./4*n**(-2./3)*(3./N.pi)**(1./3) Ec=K/2*(N.log(y**2/Y)+2*bb/Q*N.arctan(Q/(2*y+bb))-bb*y0/Yy0*(N.log((y-y0)**2/Y)+2*(bb+2*y0)/Q*N.arctan(Q/(2*y+bb)))) DEc=(-0.327938-0.910488/n**(2./3)-4.54825/n**(1./2)-20.1334/n**(1./3)-5.06527/n**(1./6))/(4.0967+39.8675*n**(1./6)+273.006*n**(1./3)+879.214*n**(1./2)+2001.37*n**(2./3)+489.179*n**(5./6)+31.6434*n) Vxc=Ex+Ec+n*(DEx+DEc) Exc=Ex+Ec