Some simple examples

Anderson model

from triqs.gfs import *
from h5 import *
from numpy import array, zeros, identity

# set up a few parameters
U = 1.0
beta = 20.0
mu = 1.3
eps = 0.2
delta = 0.35

# Interaction matrix U[block,block][index,index]
IdU = U*identity(1)
Id0 = zeros([1,1])
Umat = [[Id0,IdU],
        [IdU,Id0]]

# alpha[block][index,s]
diag = 0.5 + delta
odiag = 0.5 - delta
alpha = [[[diag,odiag]], [[odiag,diag]]]

# Construct the interaction solver
from triqs_ctint import SolverCore
S = Solver(beta = beta, block_names = ["up","down"], block_sizes = [1,1], n_iw = 200)

# Initialize the Green's function
S.G0_iw << inverse(iOmega_n + mu - inverse(iOmega_n - eps));

# Solve!
S.solve(U = Umat,
        alpha = alpha,
        beta = beta,
        n_cycles = 10000,
        length_cycle = 50,
        n_warmup_cycles = 5000,
        random_seed = 34788,
        only_sign = False,
        measure_gw = True,
        measure_ft = False,
        measure_hist = True)

# Save in archive
A = HDFArchive("anderson.out.h5",'w')
A["G"] = S.G_iw

2-site model

from triqs_ctint import SolverCore
from triqs.gfs import *
from h5 import *
import numpy as np

# Solver
S = Solver(beta = 20.0,
           block_names = ['up','down'],
           block_sizes = [2,2],
           n_iw = 300)

# Set parameters
U = 1.0
t = 0.2

# Set U and alpha
Umat = [[np.array([[0,0],[0,0]]), np.array([[U,0],[0,U]])],
        [np.array([[U,0],[0,U]]), np.array([[0,0],[0,0]])]]

alpha = [ np.array([[0.80,0.20],[0.80,0.20]]) , np.array([[0.20,0.80],[0.20,0.80]]) ]

# Prepare G0
S.G0_iw['up'][0,0] << iOmega_n + 1.3 - inverse(iOmega_n - 0.2)
S.G0_iw['up'][0,1] << t - 0.1*inverse(iOmega_n)
S.G0_iw['up'][1,0] << t - 0.1*inverse(iOmega_n)
S.G0_iw['up'][1,1] << iOmega_n + 1.3 - inverse(iOmega_n - 0.2)
S.G0_iw['down'] << S.G0_iw['up']
S.G0_iw.invert()

# Solve!
S.solve( beta = 20.0, U = Umat, alpha = alpha, n_cycles = 100000 )

# Save stuff
A = HDFArchive("twosites.output.h5",'w')
A["G_int"] = S.G_iw