def Print_Gloc(self, print_at, TB): for at in print_at: Fileio.Print_complex_multilines( array([ self.Gloc[i] for i in range(TB.idx[at][TB.TB_orbs[at][0]], TB.idx[at][TB.TB_orbs[at][-1]] + 1) ]), self.ommesh, 'G_loc_' + at + '.out')
emax = 5.0 #rom=1000 rom = int(sys.argv[1]) execfile('INPUT.py') TB = Struct.TBstructure('POSCAR', p['atomnames'], p['orbs']) cor_at = p['cor_at'] cor_orb = p['cor_orb'] TB.Compute_cor_idx(cor_at, cor_orb) ommesh = linspace(emin, emax, rom) Sig_tot = zeros((TB.ncor_orb, rom), dtype=complex) for i, ats in enumerate(cor_at): (om, Sig, TrSigmaG, Epot, nf_q, mom) = Fileio.Read_complex_Data('Sig' + str(i + 1) + '.out') newSig = zeros((len(Sig), rom), dtype=complex) for ii in range(len(Sig)): SigSpline = interpolate.splrep(om, Sig[ii].real, k=1, s=0) newSig[ii, :] += interpolate.splev(ommesh, SigSpline) SigSpline = interpolate.splrep(om, Sig[ii].imag, k=1, s=0) newSig[ii, :] += 1j * interpolate.splev(ommesh, SigSpline) for at in ats: for ii, orbs in enumerate(cor_orb[i]): for orb in orbs: idx = TB.idx[at][orb] Sig_tot[idx, :] = copy.deepcopy( newSig[ii, :]) # non spin polarized #Sig_tot[idx,:]=copy.deepcopy(newSig[ii+len(cor_orb[i]),:]) Fileio.Print_complex_multilines(Sig_tot, ommesh, 'SigMoo_real.out') #Fileio.Print_complex_multilines(Sig_tot,ommesh,'SigMoo_dn_real.out')
main_out.flush() #for i in range(len(cor_at)): # DMFT.sig_st[i][:]+=0.5*(DMFT.Nd_imp[i]-DMFT.Nd_latt[i]) #DMFT.Impurity_Solver #if itt%3==0: om_loc, Delta = Fileio.Read_complex_multilines('Delta.out') loc_idx = -1 for i, ats in enumerate(cor_at): Delta_loc = zeros((len(cor_orb[i]), len(om_loc)), dtype=complex) for j, orbs in enumerate(cor_orb[i]): loc_idx += 1 Delta_loc[j, :] = copy.deepcopy(Delta[loc_idx, :]) Fileio.Print_complex_multilines( Delta_loc, om_loc, 'Delta' + str(i + 1) + '.inp') # shutil.copy2('Delta.out','Delta1.inp') Ed = array([loadtxt('Ed.out')]) if TB.LHF == '.FALSE.': IMP_SOLVER.RUN_CTQMC(p, pC, pD, it, itt, para_com, DMFT.mu, Ed, DMFT.Vdc) main_out.write('--- Impurity solver is finished ' + now() + '---') main_out.write('\n') main_out.flush() ################# Mix sig.inp ###############################3 DMFT.Read_Sig(TB, p['nspin']) DMFT.Compute_Energy(DFT, TB, Ed) DMFT.Compute_Sigoo_and_Vdc(p, TB) DMFT.Mix_Sig_and_Print_sig_inp(TB, p['Nd_qmc'], p['mix_sig'],
def Compute_Delta(self, T, nspin, cor_at, cor_orb, TB, nom, delta=0.0): ##### Store local Green function and local Self energy with equidistant mesh as a list type ########## ommesh, tot_GLOC = Fileio.Read_complex_multilines("G_loc.out") ommesh, tot_SIGLOC = Fileio.Read_complex_multilines("SigMoo.out") SIGMDC = loadtxt("SigMdc.out") if nspin == 2: ommesh, tot_GLOC_dn = Fileio.Read_complex_multilines("G_loc_dn.out") ommesh, tot_SIGLOC_dn = Fileio.Read_complex_multilines("SigMoo_dn.out") SIGMDC_dn = loadtxt("SigMdc_dn.out") DMFT_mu = loadtxt("DMFT_mu.out") tot_ed = loadtxt("Ed.out") # tot_sig_st=loadtxt('Sig_st.out') ed = [] GLOC = [] SIGLOC = [] for i, ats in enumerate(cor_at): GLOC.append([]) SIGLOC.append([]) ed.append([]) # sig_st.append([]) for j, orbs in enumerate(cor_orb[i]): Gf_avg = zeros(len(ommesh), dtype=complex) Sig_avg = zeros(len(ommesh), dtype=complex) ed_avg = 0.0 # sigst_avg=0.0 for at in ats: for orb in orbs: idx = TB.idx[at][orb] Gf_avg += tot_GLOC[idx] Sig_avg += tot_SIGLOC[idx] + SIGMDC[idx] ed_avg += tot_ed[idx] # sigst_avg+=DMFT.Sig_st[i][j]#tot_sig_st[idx] Gf_avg /= len(ats) * len(orbs) Sig_avg /= len(ats) * len(orbs) # ;Sig_avg-=sig_st[i] ed_avg /= len(ats) * len(orbs) # sigst_avg/=len(ats)*len(orbs) GLOC[i].append(list(Gf_avg)) SIGLOC[i].append(list(Sig_avg)) ed[i].append(ed_avg) # sig_st[i].append(sigst_avg) if nspin == 2: GLOC_dn = [] SIGLOC_dn = [] for i, ats in enumerate(cor_at): GLOC_dn.append([]) SIGLOC_dn.append([]) for j, orbs in enumerate(cor_orb[i]): Gf_avg = zeros(len(ommesh), dtype=complex) Sig_avg = zeros(len(ommesh), dtype=complex) for at in ats: for orb in orbs: idx = TB.idx[at][orb] Gf_avg += tot_GLOC_dn[idx] Sig_avg += tot_SIGLOC_dn[idx] + SIGMDC_dn[idx] Gf_avg /= len(ats) * len(orbs) Sig_avg /= len(ats) * len(orbs) # ;Sig_avg-=sig_st[i] GLOC_dn[i].append(list(Gf_avg)) SIGLOC_dn[i].append(list(Sig_avg)) for i in range(len(GLOC)): if len(GLOC[i]) > 0: Delta_s = zeros((nspin * len(GLOC[i]), len(ommesh)), dtype=complex) for j in range(len(GLOC[i])): Delta_s[j, :] = ( 1j * ommesh + DMFT_mu - ed[i][j] - array(SIGLOC[i][j]) + 1j * delta - 1.0 / array(GLOC[i][j]) ) if nspin == 2: for j in range(len(GLOC[i])): Delta_s[j + len(GLOC[i]), :] = ( 1j * ommesh + DMFT_mu - ed[i][j] - array(SIGLOC_dn[i][j]) + 1j * delta - 1.0 / array(GLOC_dn[i][j]) ) ###### Interpolate Delta #### ommesh_new = pi * T * (2 * arange(nom) + 1) Delta = Interpolate(ommesh, Delta_s, ommesh_new, 3) Fileio.Print_complex_multilines( Delta, ommesh_new, "Delta" + str(i + 1) + ".inp" ) return DMFT_mu, ed # ,sig_st
def Mix_Sig_and_Print_sig_inp(self, TB, Nd_qmc, mix_sig, sig_file, nspin): fi = open(sig_file, "r") self.nom, self.ncor_orb = map(int, fi.readline()[16:].split()) fi.readline() fi.readline() Sigoo_old = eval(fi.readline()[8:]) Vdc_old = eval(fi.readline()[7:]) fi.close() om, Sig_old = Fileio.Read_complex_multilines(sig_file, 5) sym_Sigoo = self.Symmetrize_orb(TB, self.Sigoo, nspin) sym_Sigoo_imp = self.Symmetrize_orb(TB, self.Sigoo_imp, nspin) sym_Vdc = [] sym_Vdc_imp = [] for i, ats in enumerate(self.cor_at): for j, orbs in enumerate(self.cor_orb[i]): sym_Vdc.append(self.Vdc[i]) sym_Vdc_imp.append(self.Vdc_imp[i]) if nspin == 2: for j, orbs in enumerate(self.cor_orb[i]): sym_Vdc.append(self.Vdc[i]) sym_Vdc_imp.append(self.Vdc_imp[i]) # print self.Sigoo_imp,sym_Sigoo_imp # print array(Sigoo_old),sym_Sigoo_imp if Nd_qmc == 1: new_Sigoo = array(Sigoo_old) + mix_sig * ( array(sym_Sigoo_imp) - array(Sigoo_old) ) new_Vdc = array(Vdc_old) + mix_sig * (array(sym_Vdc_imp) - array(Vdc_old)) else: new_Sigoo = array(Sigoo_old) + mix_sig * ( array(sym_Sigoo) - array(Sigoo_old) ) new_Vdc = array(Vdc_old) + mix_sig * (array(sym_Vdc) - array(Vdc_old)) # print new_Sigoo,new_Vdc self.SigMdc = new_Sigoo - new_Vdc # print self.SigMdc # print om, self.ommesh for i in range(len(self.Sig)): self.Sig[i, :] -= sym_Sigoo_imp[i] # print self.Sig if len(om) != len(self.ommesh): Sig_old = Interpolate(om, Sig_old, self.ommesh, 3) self.nom = len(self.ommesh) self.Sig = Sig_old + mix_sig * (self.Sig - Sig_old) # print self.Sig # print shape(self.Sig) header1 = "# nom,ncor_orb= " + str(self.nom) + " " + str(self.ncor_orb) header2 = "# T= %18.15f" % (self.T) # +str(self.T) header3 = "# s_oo-Vdc= " for i in range(self.ncor_orb): header3 += "%18.15f " % (self.SigMdc[i]) header4 = "# s_oo= " + str(new_Sigoo.tolist()) header5 = "# Vdc= " + str(new_Vdc.tolist()) # print header1 # print header2 # print header3 # print header4 # print header5 Fileio.Print_complex_multilines( self.Sig, self.ommesh, "sig.inp", [header1, header2, header3, header4, header5], )
Ed = [] om_loc, Delta = Fileio.Read_complex_multilines("Delta.out") loc_idx = -1 for i, ats in enumerate(cor_at): Delta_loc = zeros((len(cor_orb[i]) * p["nspin"], len(om_loc)), dtype=complex) Ed.append([]) for ispin in range(p["nspin"]): for j, orbs in enumerate(cor_orb[i]): loc_idx += 1 print "---i:", i, " ", cor_at[ i], " ---loc_idx:", loc_idx Ed[i].append(Ed_loc[loc_idx]) Delta_loc[j + ispin * len(cor_orb[i]), :] = deepcopy( Delta[loc_idx, :]) Fileio.Print_complex_multilines(Delta_loc, om_loc, "Delta" + str(i + 1) + ".inp") Ed = array(Ed) print "Ed:", Ed if TB.LHF == ".FALSE.": IMP_SOLVER.RUN_CTQMC(p, pC, pD, it, itt, para_com, DMFT.mu, Ed, DMFT.Vdc, args.hf) main_out.write("--- Impurity solver is finished " + now() + "---") main_out.write("\n") main_out.flush() ################# Mix sig.inp ###############################3 DMFT.Read_Sig(TB, p["nspin"]) DMFT.Compute_Energy(DFT, TB, Ed) DMFT.Compute_Sigoo_and_Vdc(p, TB) DMFT.Mix_Sig_and_Print_sig_inp(TB, p["Nd_qmc"], p["mix_sig"],
cmd = p[ 'path_bin'] + "atom_d.py 'atom_d.inp' 2> atom_d.error || { echo 'ATOMD run failed!'; exit 1; }" out, err = subprocess.Popen( cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE).communicate() print out #, err cmd = 'cp UC.dat UC' + str(i + 1) + '.dat' print os.popen(cmd).read() DMFT.Read_Sig(TB, p['nspin']) DMFT.Compute_HF(1, p, TB) DMFT.Cmp_Sig_highT(T_high, noms_high, p['nspin']) #DMFT.Mix_Sig(p['mix_sig']) if TB.LHF == '.FALSE.': Fileio.Print_complex_multilines(DMFT.Sig, DMFT.ommesh, 'SigMoo.out') if p['nspin'] == 2: Fileio.Print_complex_multilines( DMFT.Sig_dn, DMFT.ommesh, 'SigMoo_dn.out') Fileio.Print_complex_multilines(DMFT.Sig_highT, DMFT.ommesh_highT, 'SigMoo_highT.out') if p['nspin'] == 2: Fileio.Print_complex_multilines( DMFT.Sig_dn_highT, DMFT.ommesh_highT, 'SigMoo_dn_highT.out') if (os.path.exists('SigMdc.out')): pass else: fi = open('SigMdc.out', 'w')
def interpol(self, emin, emax, rom, broaden, dest_dir, sp=False): """ This performs the interpolation of points on the real axis. """ print("\nInterpolating points on real axis...") headerline = 2 om, Sig = Fileio.Read_complex_multilines("./ac/Sig.out", headerline) s_oo = None Vdc = None # The exec() function doesn't work properly on Python3 so I had to use a workaround: fi = open("./ac/Sig.out", "r") line1 = fi.readline() s_oo = re.findall(r"\s*([0-9.+-]*)", line1) while "" in s_oo: s_oo.remove("") line2 = fi.readline() Vdc = re.findall(r"\s*([0-9.+-]*)", line2) while "" in Vdc: Vdc.remove("") # exec(ar[0]) # m=re.search('#(.*)',line) # exec(m.group(1).strip()) # s_oo_Vdc=np.array(s_oo)-array(Vdc) fi.close() s_oo_Vdc = np.array((np.array(s_oo)).astype(np.float)) - np.array( (np.array(Vdc)).astype(np.float)) ommesh = np.linspace(emin, emax, rom) # non spin polarized case if sp == False: Sig_tot = np.zeros((len(Sig), rom), dtype=complex) for i in range(len(Sig)): SigSpline = interpolate.splrep(om, Sig[i].real, k=1, s=0) Sig_tot[i, :] += interpolate.splev(ommesh, SigSpline) SigSpline = interpolate.splrep(om, Sig[i].imag, k=1, s=0) Sig_tot[i, :] += 1j * interpolate.splev(ommesh, SigSpline) header1 = "# nom,ncor_orb= " + str(len(ommesh)) + " " + str( len(Sig_tot)) # header2='# T= %18.15f'%(1.0/pC['beta'][0])#+str(self.T) header2 = "# T= %18.15f" % (broaden) # +str(self.T) header3 = "# s_oo-Vdc= " for i in range(len(s_oo_Vdc)): header3 += "%18.15f " % (s_oo_Vdc[i]) header4 = "# s_oo= " + str(s_oo) header5 = "# Vdc= " + str(Vdc) if dest_dir == "dos": Fileio.Print_complex_multilines( Sig_tot, ommesh, "./dos/sig.inp_real", [header1, header2, header3, header4, header5], ) # create sig.inp_real if dest_dir == "bands": Fileio.Print_complex_multilines( Sig_tot, ommesh, "./bands/sig.inp_real", [header1, header2, header3, header4, header5], ) # Spin polarized calculation if sp: Sig_tot = np.zeros((int(len(Sig) / 2), rom), dtype=complex) Sig_tot_dn = np.zeros((int(len(Sig) / 2), rom), dtype=complex) for i in range(int(len(Sig) / 2)): # spin SigSpline = interpolate.splrep(om, Sig[i].real, k=1, s=0) Sig_tot[i, :] += interpolate.splev(ommesh, SigSpline) SigSpline = interpolate.splrep(om, Sig[i].imag, k=1, s=0) Sig_tot[i, :] += 1j * interpolate.splev(ommesh, SigSpline) # spin down SigSpline = interpolate.splrep(om, Sig[i + int(len(Sig) / 2)].real, k=1, s=0) Sig_tot_dn[i, :] += interpolate.splev(ommesh, SigSpline) SigSpline = interpolate.splrep(om, Sig[i + int(len(Sig) / 2)].imag, k=1, s=0) Sig_tot_dn[i, :] += 1j * interpolate.splev(ommesh, SigSpline) header1 = "# nom,ncor_orb= " + str(len(ommesh)) + " " + str( len(Sig_tot)) header2 = "# T= %18.15f" % (broaden) header3 = "# s_oo-Vdc= " header3_dn = "# s_oo-Vdc= " for i in range(int(len(s_oo_Vdc) / 2)): header3 += "%18.15f " % (s_oo_Vdc[i]) header3_dn += "%18.15f " % (s_oo_Vdc[i + int(len(s_oo_Vdc) / 2)]) header4 = "# s_oo= " + str(s_oo[0:int(len(s_oo) / 2)]) header4_dn = "# s_oo= " + str(s_oo[int(len(s_oo) / 2):]) header5 = "# Vdc= " + str(Vdc[0:int(len(Vdc) / 2)]) header5_dn = "# Vdc= " + str(Vdc[int(len(Vdc) / 2):]) if dest_dir == "dos": Fileio.Print_complex_multilines( Sig_tot, ommesh, "./dos/sig.inp_real", [header1, header2, header3, header4, header5], ) Fileio.Print_complex_multilines( Sig_tot_dn, ommesh, "./dos/sig.inp_real_dn", [header1, header2, header3_dn, header4_dn, header5_dn], ) # create sig.inp_real if dest_dir == "bands": Fileio.Print_complex_multilines( Sig_tot, ommesh, "./bands/sig.inp_real", [header1, header2, header3, header4, header5], ) Fileio.Print_complex_multilines( Sig_tot_dn, ommesh, "./bands/sig.inp_real_dn", [header1, header2, header3_dn, header4_dn, header5_dn], ) print("Interpolation complete.\n")
om, Sig = Fileio.Read_complex_multilines('Sig.out', headerline) s_oo = None Vdc = None fi = open('Sig.out', 'r') for i in range(headerline): line = fi.readline() m = re.search('#(.*)', line) exec(m.group(1).strip()) s_oo_Vdc = array(s_oo) - array(Vdc) ommesh = linspace(emin, emax, rom) Sig_tot = zeros((len(Sig), rom), dtype=complex) for i in range(len(Sig)): SigSpline = interpolate.splrep(om, Sig[i].real, k=1, s=0) Sig_tot[i, :] += interpolate.splev(ommesh, SigSpline) SigSpline = interpolate.splrep(om, Sig[i].imag, k=1, s=0) Sig_tot[i, :] += 1j * interpolate.splev(ommesh, SigSpline) header1 = '# nom,ncor_orb= ' + str(len(ommesh)) + ' ' + str(len(Sig_tot)) #header2='# T= %18.15f'%(1.0/pC['beta'][0])#+str(self.T) header2 = '# T= %18.15f' % (broaden) #+str(self.T) header3 = '# s_oo-Vdc= ' for i in range(len(s_oo_Vdc)): header3 += '%18.15f ' % (s_oo_Vdc[i]) header4 = '# s_oo= ' + str(s_oo) header5 = '# Vdc= ' + str(Vdc) Fileio.Print_complex_multilines( Sig_tot, ommesh, 'sig.inp_real', [header1, header2, header3, header4, header5])