def window_conv_depr():

    nwf_vec = np.array([5, 10, 20, 40, 80, 160, 320])
    diff_vec = np.zeros_like(nwf_vec, dtype=np.float)

    for idx, nwf in enumerate(nwf_vec):
        d = analytic_solution(beta=2.0, U=5.0, nw=1, nwf=nwf)
        diff = np.max(np.abs(d.gamma_m.data - d.gamma_m_num.data))
        diff_vec[idx] = diff
        print 'nwf, diff =', idx, nwf, diff

    print diff_vec

    from pytriqs.plot.mpl_interface import oplot, oplotr, oploti, plt

    x = 1. / nwf_vec

    plt.figure(figsize=(3.25, 3))

    plt.plot(x, diff_vec, 'o-', alpha=0.75)
    plt.xlabel(r'$1/n_{w}$')
    plt.ylabel(r'$\max|\Gamma_{ana} - \Gamma_{num}|$')
    plt.ylim([0, diff_vec.max()])
    plt.xlim([0, x.max()])

    plt.tight_layout()
    plt.savefig('figure_bse_hubbard_atom_convergence.pdf')
    plt.show()
Exemple #2
0
def test_cf_G_tau_and_G_iw_nonint(verbose=False):

    beta = 3.22
    eps = 1.234

    niw = 64
    ntau = 2 * niw + 1
    
    H = eps * c_dag(0,0) * c(0,0)

    fundamental_operators = [c(0,0)]

    ed = TriqsExactDiagonalization(H, fundamental_operators, beta)

    # ------------------------------------------------------------------
    # -- Single-particle Green's functions

    G_tau = GfImTime(beta=beta, statistic='Fermion', n_points=ntau, target_shape=(1,1))
    G_iw = GfImFreq(beta=beta, statistic='Fermion', n_points=niw, target_shape=(1,1))

    G_iw << inverse( iOmega_n - eps )
    G_tau << InverseFourier(G_iw)

    G_tau_ed = GfImTime(beta=beta, statistic='Fermion', n_points=ntau, target_shape=(1,1))
    G_iw_ed = GfImFreq(beta=beta, statistic='Fermion', n_points=niw, target_shape=(1,1))

    ed.set_g2_tau(G_tau_ed[0, 0], c(0,0), c_dag(0,0))
    ed.set_g2_iwn(G_iw_ed[0, 0], c(0,0), c_dag(0,0))

    # ------------------------------------------------------------------
    # -- Compare gfs

    from pytriqs.utility.comparison_tests import assert_gfs_are_close
    
    assert_gfs_are_close(G_tau, G_tau_ed)
    assert_gfs_are_close(G_iw, G_iw_ed)
    
    # ------------------------------------------------------------------
    # -- Plotting
    
    if verbose:
        from pytriqs.plot.mpl_interface import oplot, plt
        subp = [3, 1, 1]
        plt.subplot(*subp); subp[-1] += 1
        oplot(G_tau.real)
        oplot(G_tau_ed.real)

        plt.subplot(*subp); subp[-1] += 1
        diff = G_tau - G_tau_ed
        oplot(diff.real)
        oplot(diff.imag)
        
        plt.subplot(*subp); subp[-1] += 1
        oplot(G_iw)
        oplot(G_iw_ed)
        
        plt.show()
def plot_res(ana, pom):

    from triqs_tprf.plot import plot_g2, get_g2_opt
    from pytriqs.plot.mpl_interface import oplot, oplotr, oploti, plt

    opt = get_g2_opt(pom.chi, cplx='re', cut=0.1)

    plt.figure(figsize=(6, 6))
    plot_g2(pom.G2_iw_ph,
            cplx='re',
            opt=opt,
            idx_labels=[r'\uparrow', r'\downarrow'])

    plt.figure(figsize=(6, 6))
    plot_g2(pom.chi0,
            cplx='re',
            opt=opt,
            idx_labels=[r'\uparrow', r'\downarrow'])

    plt.figure(figsize=(6, 6))
    plot_g2(pom.chi,
            cplx='re',
            opt=opt,
            idx_labels=[r'\uparrow', r'\downarrow'])

    plt.figure(figsize=(3, 3))
    plot_g2(pom.chi_m,
            cplx='re',
            opt=opt,
            idx_labels=[r'\uparrow', r'\downarrow'])

    plt.figure(figsize=(3, 3))
    plot_g2(pom.chi0_m,
            cplx='re',
            opt=opt,
            idx_labels=[r'\uparrow', r'\downarrow'])

    opt = get_g2_opt(pom.gamma, cplx='re', cut=0.1)
    opt['vmin'] = -5.
    opt['vmax'] = +5.

    plt.figure(figsize=(6, 6))
    plot_g2(pom.gamma,
            cplx='re',
            opt=opt,
            idx_labels=[r'\uparrow', r'\downarrow'])

    plt.figure(figsize=(3, 3))
    plot_g2(ana.gamma_m,
            cplx='re',
            opt=opt,
            idx_labels=[r'\uparrow', r'\downarrow'])

    plt.show()
Exemple #4
0
def strip_sigma(nw, beta, sigma_in, debug=False):

    np.testing.assert_almost_equal(beta, sigma_in.mesh.beta)

    wmesh = MeshImFreq(beta, 'Fermion', n_max=nw)
    sigma = Gf(mesh=wmesh, target_shape=sigma_in.target_shape)

    for w in wmesh:
        index = w.linear_index + wmesh.first_index()  # absolute index
        sigma[w] = sigma_in[Idx(index)]

    if debug:
        from pytriqs.plot.mpl_interface import oplot, plt
        oplot(p.Sigmalatt_iw)
        oplot(sigma, 'x')
        plt.show()
        exit()

    return sigma
        ax = plt.subplot(*subp)
        subp[-1] += 1
        plt.title('Re ' + label + ' [:,i,:]')
        plt.pcolormesh(s.real, **opt)
        plt.colorbar()

        ax = plt.subplot(*subp)
        subp[-1] += 1
        plt.title('Im ' + label + ' [:,i,:]')
        plt.pcolormesh(s.imag)
        plt.colorbar()

        s1 = np.squeeze(g1.data[:, :, idx])
        s2 = np.squeeze(g2.data[:, :, idx])
        s = s1 - s2

        a = plt.subplot(*subp)
        subp[-1] += 1
        plt.title('Re ' + label + ' [:,:,i]')
        plt.pcolormesh(s.real, **opt)
        plt.colorbar()

        a = plt.subplot(*subp)
        subp[-1] += 1
        plt.title('Im ' + label + ' [:,:,i]')
        plt.pcolormesh(s.imag)
        plt.colorbar()

    plt.tight_layout()
    plt.show()
Exemple #6
0
    a['Delta_iw_fit'] = Delta_iw_fit

# -- Plot 

from pytriqs.plot.mpl_interface import oplot, oplotr, oploti, plt
plt.figure(figsize=(10, 10))

ylim = [-4, 4]

plt.plot([w_min.imag]*2, ylim, 'sr-', lw=0.5)
plt.plot([w_max.imag]*2, ylim, 'sr-', lw=0.5)
         
for i1, i2 in itertools.product(range(2), repeat=2):
    oplotr(Delta_iw[i1, i2], alpha=0.1)
    oploti(Delta_iw[i1, i2], alpha=0.1)

    oplotr(Delta_iw_ref[i1, i2], lw=4, alpha=0.25)
    oploti(Delta_iw_ref[i1, i2], lw=4, alpha=0.25)

    oplotr(Delta_iw_fit[i1, i2])
    oploti(Delta_iw_fit[i1, i2])

ax = plt.gca()
ax.legend_ = None

plt.ylim([-1, 1])
plt.tight_layout()
plt.savefig(figure_filename)
plt.show(); exit()

Exemple #7
0
from pytriqs.gf.local import GfReFreq, Omega, Wilson, inverse
import numpy

eps_d,t  = 0.3, 0.2

# Create the real-frequency Green's function and initialize it
g = GfReFreq(indices = ['s','d'], window = (-2, 2), n_points = 1000, name = "$G_\mathrm{s+d}$")
g['d','d'] = Omega - eps_d
g['d','s'] = t
g['s','d'] = t
g['s','s'] = inverse( Wilson(1.0) )
g.invert()

# Plot it with matplotlib. 'S' means: spectral function ( -1/pi Imag (g) )
from pytriqs.plot.mpl_interface import oplot, plt
oplot( g['d','d'], '-o', RI = 'S', x_window  = (-1.8,1.8), name = "Impurity" )
oplot( g['s','s'], '-x', RI = 'S', x_window  = (-1.8,1.8), name = "Bath" )
plt.show()
def dcore_check(filename, fileplot=None):
    """
    Main routine for checking convergence

    Parameters
    ----------
    filename : string
        Input-file name

    fileplot : string
        Output file name. File format is determined by the extension (pdf, eps, jpg, etc).
    """
    if mpi.is_master_node():
        print("\n  @ Reading {0} ...".format(filename))
    #
    # Construct a parser with default values
    #
    pars = create_parser()
    #
    # Parse keywords and store
    #
    pars.read(filename)
    p = pars.as_dict()
    #
    solver = DMFTCoreSolver(p["model"]["seedname"], p)
    #

    # Just for convenience
    sol = solver.S
    output_file = p["model"]["seedname"] + '.out.h5'
    output_group = 'dmft_out'
    beta = p["system"]["beta"]
    omega_check = p['tool']['omega_check']
    gs = GridSpec(2, 1)

    if fileplot is not None:  # if graph is to be printed in a file
        import matplotlib
        matplotlib.use('Agg')  # do not plot on x11
    from pytriqs.plot.mpl_interface import oplot, plt
    plt.figure(figsize=(8, 10))
    #
    # Chemical potential
    #
    ar = HDFArchive(output_file, 'r')
    iteration_number = ar[output_group]['iterations']
    perform_tail_fit = p["system"]["perform_tail_fit"] and \
        not ar[output_group]['parameters']["system"]["perform_tail_fit"]
    nsh = solver.SK.n_inequiv_shells
    print("  Total number of Iteration: {0}".format(iteration_number))
    print("\n  Iter  Chemical-potential")
    for itr in range(1, iteration_number + 1):
        print("  {0} {1}".format(
            itr, ar[output_group]['chemical_potential'][str(itr)]))
    #
    # Read Sigma and average it
    #
    sigma_ave = []
    sigma_fit = []
    nsigma = 0
    itr_sigma = [0] * 7
    for itr in range(1, iteration_number + 1):
        if itr > iteration_number - 7:
            itr_sigma[nsigma] = itr
            sigma_ave.append(
                GfImFreq(indices=[0], beta=beta, n_points=p["system"]["n_iw"]))
            sigma_fit.append(
                GfImFreq(indices=[0], beta=beta, n_points=p["system"]["n_iw"]))
            sigma_ave[nsigma].data[:, 0, 0] = 0.0
            sigma_fit[nsigma].data[:, 0, 0] = 0.0
            norb_tot = 0
            for ish in range(nsh):
                spn = solver.SK.spin_block_names[solver.SK.corr_shells[
                    solver.SK.inequiv_to_corr[ish]]['SO']]
                norb = solver.SK.corr_shells[
                    solver.SK.inequiv_to_corr[ish]]['dim']
                sol[ish].Sigma_iw << ar[output_group]['Sigma_iw'][str(itr)][
                    str(ish)]
                sigma_iw_fit = sol[ish].Sigma_iw.copy()
                if perform_tail_fit:
                    tail_fit(sigma_iw_fit,
                             fit_max_moment=p["system"]["fit_max_moment"],
                             fit_min_w=p["system"]["fit_min_w"],
                             fit_max_w=p["system"]["fit_max_w"])
                for isp in spn:
                    for iorb in range(norb):
                        norb_tot += 1
                        for jorb in range(norb):
                            sigma_ave[nsigma].data[:, 0, 0] += sol[
                                ish].Sigma_iw[isp].data[:, iorb, jorb]
                            sigma_fit[nsigma].data[:, 0, 0] += sigma_iw_fit[
                                isp].data[:, iorb, jorb]
            sigma_ave[nsigma].data[:, 0, 0] /= norb_tot
            sigma_fit[nsigma].data[:, 0, 0] /= norb_tot
            nsigma += 1
    #
    # Real part
    #
    plt.subplot(gs[0])
    for itr in range(nsigma):
        oplot(sigma_ave[itr],
              '-o',
              mode='R',
              x_window=(0.0, omega_check),
              name='Sigma-%s' % itr_sigma[itr])
        if perform_tail_fit:
            oplot(sigma_fit[itr],
                  '-o',
                  mode='R',
                  x_window=(0.0, omega_check),
                  name='S_fit-%s' % itr_sigma[itr])
    plt.legend(loc=0)
    #
    # Imaginary part
    #
    plt.subplot(gs[1])
    for itr in range(nsigma):
        oplot(sigma_ave[itr],
              '-o',
              mode='I',
              x_window=(0.0, omega_check),
              name='Sigma-%s' % itr_sigma[itr])
        if perform_tail_fit:
            oplot(sigma_fit[itr],
                  '-o',
                  mode='I',
                  x_window=(0.0, omega_check),
                  name='S_fit-%s' % itr_sigma[itr])
    plt.legend(loc=0)

    plt.show()
    if fileplot is not None:
        plt.savefig(fileplot)
    #
    # Output Sigma into a text file
    #
    print("\n Output Local Self Energy : ",
          p["model"]["seedname"] + "_sigma.dat")
    with open(p["model"]["seedname"] + "_sigma.dat", 'w') as fo:
        print("# Local self energy at imaginary frequency", file=fo)
        #
        # Column information
        #
        print("# [Column] Data", file=fo)
        print("# [1] Frequency", file=fo)
        icol = 1
        for ish in range(nsh):
            spn = solver.SK.spin_block_names[solver.SK.corr_shells[
                solver.SK.inequiv_to_corr[ish]]['SO']]
            norb = solver.SK.corr_shells[solver.SK.inequiv_to_corr[ish]]['dim']
            for isp in spn:
                for iorb in range(norb):
                    for jorb in range(norb):
                        icol += 1
                        print("# [%d] Re(Sigma_{shell=%d, spin=%s, %d, %d})" %
                              (icol, ish, isp, iorb, jorb),
                              file=fo)
                        icol += 1
                        print("# [%d] Im(Sigma_{shell=%d, spin=%s, %d, %d})" %
                              (icol, ish, isp, iorb, jorb),
                              file=fo)
        #
        # Write data
        #
        omega = [x for x in sol[0].Sigma_iw.mesh]
        for iom in range(len(omega)):
            print("%f " % omega[iom].imag, end="", file=fo)
            for ish in range(nsh):
                spn = solver.SK.spin_block_names[solver.SK.corr_shells[
                    solver.SK.inequiv_to_corr[ish]]['SO']]
                norb = solver.SK.corr_shells[
                    solver.SK.inequiv_to_corr[ish]]['dim']
                for isp in spn:
                    for iorb in range(norb):
                        for jorb in range(norb):
                            print("%f %f " %
                                  (sol[ish].Sigma_iw[isp].data[iom, iorb,
                                                               jorb].real,
                                   sol[ish].Sigma_iw[isp].data[iom, iorb,
                                                               jorb].imag),
                                  end="",
                                  file=fo)
            print("", file=fo)
    #
    # Output Legendre polynomial
    #
    if p["system"]["n_l"] > 0:
        #
        # Output Sigma into a text file
        #
        print("\n Output Local Self Energy : ",
              p["model"]["seedname"] + "_legendre.dat")
        with open(p["model"]["seedname"] + "_legendre.dat", 'w') as fo:
            print("# Local self energy at imaginary frequency", file=fo)
            #
            # Column information
            #
            print("# [Column] Data", file=fo)
            print("# [1] Order of Legendre polynomials", file=fo)
            icol = 1
            for ish in range(nsh):
                sol[ish].G_l << ar[output_group]['G_l'][str(ish)]
                spn = solver.SK.spin_block_names[solver.SK.corr_shells[
                    solver.SK.inequiv_to_corr[ish]]['SO']]
                norb = solver.SK.corr_shells[
                    solver.SK.inequiv_to_corr[ish]]['dim']
                for isp in spn:
                    for iorb in range(norb):
                        for jorb in range(norb):
                            icol += 1
                            print(
                                "# [%d] Re(G_l_{shell=%d, spin=%s, %d, %d})" %
                                (icol, ish, isp, iorb, jorb),
                                file=fo)
                            icol += 1
                            print(
                                "# [%d] Im(G_l_{shell=%d, spin=%s, %d, %d})" %
                                (icol, ish, isp, iorb, jorb),
                                file=fo)
            #
            # Write data
            #
            for il in range(p["system"]["n_l"]):
                print("%d " % il, end="", file=fo)
                for ish in range(nsh):
                    spn = solver.SK.spin_block_names[solver.SK.corr_shells[
                        solver.SK.inequiv_to_corr[ish]]['SO']]
                    norb = solver.SK.corr_shells[
                        solver.SK.inequiv_to_corr[ish]]['dim']
                    for isp in spn:
                        for iorb in range(norb):
                            for jorb in range(norb):
                                print("%f %f " %
                                      (sol[ish].G_l[isp].data[il, iorb,
                                                              jorb].real,
                                       sol[ish].G_l[isp].data[il, iorb,
                                                              jorb].imag),
                                      end="",
                                      file=fo)
                print("", file=fo)

    #
    # Finish
    #
    del ar
    print("\n  Done\n")