def run(renorm, beta, S0, PI0): params['renormalized'] = True if renorm == 1 else False params['beta'] = beta migdal = Migdal(params, basedir) savedir, mu, G, D, S, GG = migdal.selfconsistency(sc_iter=200, frac=0.4, cont=True, S0=S0, PI0=PI0) print('compute jjcorr ivn') migdal.compute_jjcorr(savedir, G, D) PI = params['g0']**2 * GG migdal = RealAxisMigdal(params, basedir) migdal.selfconsistency(sc_iter=35, frac=0.8, cont=False) print('compute jjcorr w') path = os.path.join(savedir, 'G.npy') G = np.load(path) path = os.path.join(savedir, 'GR.npy') GR = np.load(path) migdal.compute_jjcorr(savedir, G, GR) return S, PI
def compute_single_particle(basedir): lambs = [0.2, 0.4, 0.5] S0, PI0 = None, None fracs = [0., 0.8, 0.2] for i, lamb in enumerate(lambs): print('2D Renormalized Migdal') W = 8.0 params['g0'] = lamb2g0_ilya(lamb, params['omega'], W) print('g0 is ', params['g0']) migdal = Migdal(params, basedir) sc_iter = 800 savedir, mu, G, D, S, GG = migdal.selfconsistency(sc_iter, S0=S0, PI0=PI0, frac=fracs[i], cont=True) PI = params['g0']**2 * GG save(savedir + 'S.npy', S) save(savedir + 'PI.npy', PI) save(savedir + 'G.npy', G) save(savedir + 'D.npy', D) #sc_iter = 300 #Xsc, Xcdw = migdal.susceptibilities(sc_iter, G, D, PI, frac=0.7) #save(savedir + 'Xsc.npy', [Xsc]) #save(savedir + 'Xcdw.npy', [Xcdw]) S0, PI0 = S, PI
def imag_axis(): interp = None if False: interp_folder = '/scratch/users/bln/elph/data/2d/data/data_{}renormalized_nk120_abstp0.300_dim2_g00.33665_nw128_omega0.170_dens0.800_beta16.0000_QNone'.format( '' if renorm == 1 else 'un') interp = Interp(interp_folder, params['nk']) migdal = Migdal(params, basedir) migdal.selfconsistency(sc_iter=1, frac=0.9, cont=True, interp=interp)
def compute_susceptibilities(basedir): shutil.rmtree(basedir + 'data/') S0, PI0 = None, None lambs = linspace(0.01, 0.6, 20) fracs = linspace(0.8, 0.2, len(lambs)) Xscs = [] Xcdws = [] for i, lamb in enumerate(lambs): print('2D Renormalized Migdal') W = 8.0 params['g0'] = lamb2g0_ilya(lamb, params['omega'], W) print('g0 is ', params['g0']) migdal = Migdal(params, basedir) sc_iter = 400 savedir, mu, G, D, S, GG = migdal.selfconsistency(savedir, sc_iter, S0=S0, PI0=PI0, frac=0.2) PI = params['g0']**2 * GG if G is None: break sc_iter = 300 Xsc, Xcdw = migdal.susceptibilities(savedir, sc_iter, G, D, GG, frac=0.7) save(savedir + 'Xsc.npy', [Xsc]) save(savedir + 'Xcdw.npy', [Xcdw]) if Xsc is None or Xcdw is None: break Xscs.append(Xsc) Xcdws.append(amax(Xcdw)) save(basedir + 'Xscs.npy', Xscs) save(basedir + 'Xcdws.npy', Xcdws) save(basedir + 'lambs.npy', lambs) S0, PI0 = S, PI
def x_vs_t_interp(): if not params['renormalized']: params['beta'] = 1.0 dbeta = 1.0 dbeta_min = 0.8 else: params['beta'] = 73.0 dbeta = 9.0 dbeta_min = 2.5 S0, PI0 = None, None while dbeta > dbeta_min and params['beta'] < 90: #interp_folder = basedir+'data/data_renormalized_nk16_abstp0.300_dim2_g00.33665_nw256_omega0.170_dens0.800_beta{:.4f}_QNone'.format(params['beta']) interp = None interp_folder = basedir+'data/data_{}_nk32_abstp0.300_dim2_g00.33665_nw256_omega0.170_dens0.800_beta{:.4f}_QNone'.format('renormalized' if params['renormalized'] else 'unrenormalized', params['beta']) if not os.path.exists(interp_folder): print('performing interp') interp = Interp(interp_folder, params['nk']) else: print('no interp') migdal = Migdal(params, basedir) savedir, mu, G, D, S, GG = migdal.selfconsistency(sc_iter=1000, frac=0.2, S0=S0, PI0=PI0, cont=True, interp=interp) if G is not None: params['beta'] += dbeta S0 = S PI0 = GG * params['g0']**2 Xsc, Xcdw = migdal.susceptibilities(savedir, 1000, G, D, GG, frac=1) if Xcdw is None: print('Xcdw blew up. Decrease beta') dbeta /= 2 params['beta'] -= dbeta continue print('Xsc', Xsc) np.save(savedir + 'Xsc.npy', [Xsc]) np.save(savedir + 'Xcdw.npy', Xcdw) else: print('G is None') return
def run_imag_axis(): params = read_params(basedir, rfolder) migdal = Migdal(params, basedir) G = np.load(basedir + 'data/' + rfolder + 'G.npy') D = np.load(basedir + 'data/' + rfolder + 'D.npy') print(G.shape) migdal.compute_jjcorr(G, D) params = read_params(basedir, ufolder) migdal = Migdal(params, basedir) G = np.load(basedir + 'data/' + ufolder + 'G.npy') D = np.load(basedir + 'data/' + ufolder + 'D.npy') print(G.shape) migdal.compute_jjcorr(G, D)
def x_vs_t(): if not params['renormalized']: params['beta'] = 1.0 dbeta = 1.0 dbeta_min = 0.8 else: params['beta'] = 1.0 dbeta = 9.0 dbeta_min = 2.5 S0, PI0 = None, None while dbeta > dbeta_min and params['beta'] < 90: migdal = Migdal(params, basedir) savedir, mu, G, D, S, GG = migdal.selfconsistency(sc_iter=1000, frac=0.2, S0=S0, PI0=PI0, cont=True) if G is not None: params['beta'] += dbeta S0 = S PI0 = GG * params['g0']**2 Xsc, Xcdw = migdal.susceptibilities(savedir, 1000, G, D, GG, frac=1) if Xcdw is None: print('Xcdw blew up. Decrease beta') dbeta /= 2 params['beta'] -= dbeta continue print('Xsc', Xsc) np.save(savedir + 'Xsc.npy', [Xsc]) np.save(savedir + 'Xcdw.npy', Xcdw) else: print('G is None') return
basedir = '/scratch/users/bln/migdal_check_vs_ilya/single_particle_unrenorm/' if os.path.exists(basedir): shutil.rmtree(basedir) lamb = 0.4 frac = 0.8 S0, PI0 = None, None print('2D unrenormalized Migdal') params['g0'] = lamb2g0_ilya(lamb, omega, 8.0) print('g0 = ', params['g0']) time0 = time.time() migdal = Migdal(params, basedir) sc_iter = 2000 savedir, mu, G, D, S, GG = migdal.selfconsistency(sc_iter, S0=S0, PI0=PI0, frac=frac) print('savedir : ', savedir) #save(savedir+'G.npy', G) #save(savedir+'D.npy', D) save(savedir + 'S.npy', S) save(savedir + 'GG.npy', GG) #------------------------------------------------ # reproduce the selfenergy plots
params['beta'] = 16.0 params['dim'] = 2 params['g0'] = mylamb2g0(lamb=1 / 6, omega=params['omega'], W=8.0) params['Q'] = None params['dw'] = 0.005 params['idelta'] = 0.010j params['wmin'] = -5.0 params['wmax'] = 9.0 #params['wmin'] = -1.9 #params['wmax'] = 6.5 #params['wmin'] = -4.2 #params['wmax'] = +4.2 #params['idelta'] = 0.002j migdal = Migdal(params, basedir) def imag_axis(): interp = None if True: interp_folder = '/scratch/users/bln/elph/data/2d/data/data_{}renormalized_nk120_abstp0.300_dim2_g00.33665_nw128_omega0.170_dens0.800_beta16.0000_QNone'.format( '' if renorm == 1 else 'un') interp = Interp(interp_folder, params['nk']) migdal.selfconsistency(sc_iter=200, frac=0.9, cont=True, interp=interp) def real_axis(): interp = None if True:
def test1(): migdal = Migdal(params, basedir) savedir, mu, G, D, S, GG = migdal.selfconsistency(sc_iter=200, frac=0.6, cont=True) Xsc, Xcdw = migdal.susceptibilities(500, G, D, GG, frac=0.7) print('Xsc', Xsc)
def test_single_iteration(): basedir = '/scratch/users/bln/elph/debug/' lamb = 0.6 W = 8.0 params['g0'] = sqrt(0.5 * lamb / 2.4 * params['omega'] * W) params['nk'] = 2 params['nw'] = 512 params['beta'] = 16.0 params['dens'] = 0.8 params['omega'] = 0.5 omega = params['omega'] migdal = Migdal(params, basedir) S0, PI0, sc_iter = None, None, 1 savedir, G, D, S, GG = migdal.selfconsistency(sc_iter, S0=S0, PI0=PI0, frac=1.0) PI = params['g0']**2 * GG S = fourier.t2w(S, params['beta'], 2, 'fermion')[0] PI = fourier.t2w(PI, params['beta'], 2, 'boson') print('S from migdal') print(shape(S)) savedir, wn, vn, ek, mu, deriv, dndmu = migdal.setup() print('E = ', params['band'](params['nk'], 1.0, params['tp'])) nk = params['nk'] nw = params['nw'] beta = params['beta'] wn = (2.0*arange(nw)+1.0) * pi / beta vn = (2.0*arange(nw+1)) * pi / beta ekmu = params['band'](nk, 1.0, params['tp']) - mu Dv0 = -2.0*omega/(vn**2 + omega**2) nB = 1.0/(exp(beta*omega)-1.0) S_ = zeros((nk,nk,nw), dtype=complex) for ik1 in range(nk): for ik2 in range(nk): for iq1 in range(nk): for iq2 in range(nk): E = ekmu[iq1,iq2] nF = 1.0/(exp(beta*E)+1.0) S_[ik1,ik2,:] += (nB + nF)/(1j*wn - E + omega) + (nB + 1 - nF)/(1j*wn - E - omega) S_ *= params['g0']**2 / nk**2 print('S-S_', mean(abs(S-S_))) figure() plot(ravel(S).imag-ravel(S_).imag) plot(ravel(S).real-ravel(S_).real) title('diff Skw') #savefig('figs/diff Skw.png') figure() plot(ravel(S).imag) plot(ravel(S_).imag) plot(ravel(S).real) plot(ravel(S_).real) title('Skw') #savefig('figs/Skw.png') show() PI_ = zeros((nk,nk,nw+1), dtype=complex) for ik1 in range(nk): for ik2 in range(nk): for iq1 in range(nk): for iq2 in range(nk): ip1 = ((ik1+iq1)-nk//2)%nk ip2 = ((ik2+iq2)-nk//2)%nk E1 = ekmu[ik1,ik2] E2 = ekmu[ip1,ip2] nF1 = 1.0/(exp(beta*E1)+1.0) nF2 = 1.0/(exp(beta*E2)+1.0) if abs(E1-E2)<1e-14: PI_[iq1,iq2,0] += -beta * nF1 * (1-nF1) PI_[iq1,iq2,1:] += (nF1 - nF2)/(1j*vn[1:] + E1 - E2) else: PI_[iq1,iq2,:] += (nF1 - nF2)/(1j*vn + E1 - E2) PI_ *= 2.0 * params['g0']**2 / nk**2 print('PI-PI_', mean(abs(PI-PI_))) ''' figure() plot(ravel(PI).imag-ravel(PI_).imag) plot(ravel(PI).real-ravel(PI_).real) title('re diff PIkw') #savefig('figs/diff_PIkw.png') ''' figure() plot(ravel(PI).imag) plot(ravel(PI_).imag) title('Im PIkw') figure() plot(ravel(PI).real) plot(ravel(PI_).real) title('Re PIkw') show()