#Always doubly-occupy the 3p orbitals for the TM atom for p in TM_3p_orbitals: for s in [0,1]: dm[s,p,p]=1 #Control the 3d occupancy for CrO... if (el=='Cr'): for i,d in enumerate(TM_3d_orbitals): #These are the 3d orbitals we want to fill to get the correct symmetry if ( ('xy' in aos[d]) or ('yz' in aos[d]) or ('z^2' in aos[d]) or ('x2-y2' in aos[d]) ): print('We are singly filling this d-orbital: '+np.str(aos[d]) ) dm[0,d,d]=1 m.chkfile=el+basis+"_r"+str(r)+"_s"+str(S[run])+"_"+method+"_"+str(run)+".chk" m.irrep_nelec = symm_dict[run] m.max_cycle=100 m = addons.remove_linear_dep_(m) m.conv_tol=1e-6 #Only need an initial guess for CrO and CuO... if (el=='Cr' or el=='Cu'): total_energy=m.kernel(dm) else: total_energy=m.kernel() #Compute the Mulliken orbital occupancies... m.analyze() assert(np.sum(m.mo_occ)==25)
if("U" in method): if("HF" in method): m=UHF(mol) else: m=UKS(mol) m.xc=method[1:] else: if(method=="ROHF"): m=ROHF(mol) else: m=ROKS(mol) m.xc=method if basis=='vdz': #m=m.newton() m.chkfile= '3d8_vdz.chk' #el+basis+"_r"+str(r)+"_s"+str(S[run])+"_"+method+"_"+str(run)+".chk" m.irrep_nelec = symm_dict[run] m.max_cycle=100 m = addons.remove_linear_dep_(m) m.conv_tol=1e-5 m.diis=scf.ADIIS() total_energy=m.kernel() #Compute the Mulliken orbital occupancies... m.analyze() #m.stability(external=True) assert(np.sum(m.mo_occ)==25) #Once we get past the vdz basis, just read-in the existing chk file... else: dm= m.from_chk('3d8_vdz.chk') #m.from_chk(el+'vdz'+"_r"+str(r)+"_s"+str(S[run])+"_"+method+"_"+str(run)+".chk")
if("U" in method): if("HF" in method): m=UHF(mol) else: m=UKS(mol) m.xc=method[1:] else: if(method=="ROHF"): m=ROHF(mol) else: m=ROKS(mol) m.xc=method if basis=='vdz': #m=m.newton() m.chkfile=el+basis+"_r"+str(r)+"_s"+str(S)+"_"+method+"_"+str(run)+"mirror.chk" m.irrep_nelec = symm_dict[run] m.max_cycle=100 m = addons.remove_linear_dep_(m) m.conv_tol=1e-5 m.diis=scf.ADIIS() total_energy=m.kernel() #Compute the Mulliken orbital occupancies... m.analyze() #m.stability(external=True) assert(np.sum(m.mo_occ)==25) #Once we get past the vdz basis, just read-in the existingmirror.chk file... else: dm=m.from_chk(el+'vdz'+"_r"+str(r)+"_s"+str(S)+"_"+method+"_"+str(run)+"mirror.chk")
#Control the 3d occupancy for CrO... if (el == 'Cr'): for i, d in enumerate(TM_3d_orbitals): #These are the 3d orbitals we want to fill to get the correct symmetry if (('xy' in aos[d]) or ('yz' in aos[d]) or ('z^2' in aos[d]) or ('x2-y2' in aos[d])): print( 'We are singly filling this d-orbital: ' + np.str(aos[d])) dm[0, d, d] = 1 m.chkfile = el + basis + "_r" + str( r) + "_c" + str(charge) + "_s" + str( mol.spin ) + "_" + method + "_" + run + ".chk" m.irrep_nelec = symm_dict[run] m.max_cycle = 100 m = addons.remove_linear_dep_(m) #m.direct_scf_tol=1e-5 m.conv_tol = 1e-6 #m.level_shift_factor=0.1 #m=scf.newton(m) #Only need an initial guess for CrO and CuO... if (el == 'Cr' or el == 'Cu'): total_energy = m.kernel(dm) else: total_energy = m.kernel()