示例#1
0
def Sigma_decay(omega, k):
    def integrand_cubic_1(ndim, xx, ncomp, ff, userdata):

        q1, q2 = [xx[i] for i in range(ndim.contents.value)]
        q = np.array([q1, q2])
        kmq = k - q

        omega_q = LSW.eigenvalue(q)
        omega_kmq = LSW.eigenvalue(kmq)

        gamma1 = vfun.cubic_gamma1(q, kmq, k)
        integrand = 0.5 * (gamma1 * gamma1.conj()) / (
            omega - omega_q - omega_kmq + 1j * cov_fact)

        ff[0] = np.real(integrand)
        ff[1] = np.imag(integrand)

        return 0

    print_header('Vegas')

    res = pycuba.Vegas(integrand_cubic_1, 2, epsabs = 1e-3, \
                       verbose=2, ncomp=2, maxeval=1000000)

    print_results('Vegas', res)

    rres = res.get('results')
    len_rres = len(rres)
    iintegrals = np.zeros(len_rres)
    for flag in range(len_rres):
        iintegrals[flag] = rres[flag].get('integral')

    return iintegrals
示例#2
0
def Sigma_source(omega, k):
    def integrand_cubic_2(ndim, xx, ncomp, ff, userdata):

        q1, q2 = [xx[i] for i in range(ndim.contents.value)]
        q = np.array([q1, q2])
        mkmq = -k - q

        omega_q = LSW.eigenvalue(q)
        omega_mkmq = LSW.eigenvalue(mkmq)

        gamma2 = vfun.cubic_gamma2(q, mkmq, k)
        integrand = -0.5 * (gamma2 * gamma2.conj()) / (omega + omega_q +
                                                       omega_mkmq)

        ff[0] = np.real(integrand)
        ff[1] = np.imag(integrand)

        return 0

    print_header('Vegas')

    res = pycuba.Vegas(integrand_cubic_2, 2, epsabs = 1e-3, \
                       verbose=2, ncomp=2, maxeval=100000)

    print_results('Vegas', res)

    rres = res.get('results')
    len_rres = len(rres)
    iintegrals = np.zeros(len_rres)
    for flag in range(len_rres):
        iintegrals[flag] = rres[flag].get('integral')

    return iintegrals
示例#3
0
def user_dat(aa):
    
      def Integrand(ndim, xx, ncomp, ff, userdata):
          x,y,z = [xx[i] for i in range(ndim.contents.value)]
          result = aa*np.sin(x)*np.cos(y)*np.exp(z)
          ff[0] = result
          return 0
      
      print_results('Vegas', pycuba.Vegas(Integrand, 3, verbose=2))
def N_bond():

    print('---- start calculating the bond contrations N_ij')

    def integrand_N(ndim, xx, comp, ff, userdata):

        k1, k2, k3 = [xx[i] for i in range(ndim.contents.value)]
        k = np.array([k1, k2, k3])
        tmp, ubov = GLSW.eigensystem(k)
        ubov11 = ubov[:2 * num_sub, :2 * num_sub]
        ubov21 = ubov[2 * num_sub:, :2 * num_sub]
        ubov11_c = ubov11.conj()
        ubov21_c = ubov21.conj()

        for bond in range(num_bond):

            counter = 0

            bond_vec = delta_ij[:, bond]
            cphase = np.exp(-1j * 2.0 * np.pi * k @ bond_vec)
            sub1 = sub_idx[bond, 0]
            sub2 = sub_idx[bond, 1]

            for flavor1 in range(2):
                for flavor2 in range(2):

                    X1 = num_sub * flavor1 + sub1
                    X2 = num_sub * flavor2 + sub2

                    # N_onsite is pure real, imaginary part zero
                    N_ij = (ubov11[X1, :] * ubov11_c[X2, :] * cphase).sum()
                    ff[8 * bond + 2 * counter] = np.real(N_ij)
                    ff[8 * bond + 2 * counter + 1] = np.imag(N_ij)
                    counter += 1

        return 0

    NCOMP = num_bond * 8

    print_header('Vegas')

    res = pycuba.Vegas(integrand_N, NDIM, epsabs=1e-3, \
                       verbose=2, ncomp=NCOMP, maxeval=5000)

    print_results('Vegas', res)

    rres = res.get('results')
    len_rres = len(rres)
    iintegrals = np.zeros(len_rres)

    for flag in range(len_rres):
        iintegrals[flag] = rres[flag].get('integral')

    return iintegrals
def barN_onsite():

    print('---- start calculating the on-site contrations bar_N_ii ----')

    def integrand_barN_onsite(ndim, xx, comp, ff, userdata):

        k1, k2, k3 = [xx[i] for i in range(ndim.contents.value)]
        k = np.array([k1, k2, k3])
        tmp, ubov = GLSW.eigensystem(k)
        ubov11 = ubov[:2 * num_sub, :2 * num_sub]
        ubov21 = ubov[2 * num_sub:, :2 * num_sub]
        ubov11_c = ubov11.conj()
        ubov21_c = ubov21.conj()

        for sub_lat in range(num_sub):
            counter = 0

            for flavor1 in range(2):
                for flavor2 in range(2):

                    X1 = num_sub * flavor1 + sub_lat
                    X2 = num_sub * flavor2 + sub_lat

                    # integration of barN_onsite must be real, because
                    # it corresponds to local boson number reduction
                    barN_onsite = (ubov21[X1, :] * ubov21_c[X2, :]).sum()
                    ff[4 * sub_lat + counter] = np.real(barN_onsite)
                    counter += 1

        return 0

    print_header('Vegas')

    res = pycuba.Vegas(integrand_barN_onsite, NDIM, epsabs=1e-3, \
                       verbose=2, ncomp=16, maxeval=5000)

    print_results('Vegas', res)

    rres = res.get('results')
    len_rres = len(rres)
    iintegrals = np.zeros(len_rres)
    for flag in range(len_rres):
        iintegrals[flag] = rres[flag].get('integral')

    return iintegrals
示例#6
0
 def nornalizeBreitWigner(self, algo='vegas', nwidths=100):
   def Integrand(ndim, xx, ncomp, ff, userdata):
     a = self.MW - nwidths*self.GW
     if a < 0.:
       a = 0.0
     b = self.MW + nwidths*self.GW
     x = xx[0]*(b-a) + a
     result = self.BreitWignerQ(x)
     ff[0] = result*(b-a)
     return 0
   NDIM = 1 
   if algo=='chure':   
     res = pycuba.Cuhre(Integrand, NDIM, key=13, verbose=0)['results'][0] 
   elif algo=='vegas': 
     res = pycuba.Vegas(Integrand, NDIM , epsrel=0.0001, epsabs=1e-12, maxeval=1000000)['results'][0]
   elif algo=='quad':
     res = integrate.quad(self.BreitWignerQ, self.MW-nwidths*self.GW if self.MW-nwidths*self.GW>0. else 0.0, self.MW+nwidths*self.GW)[0]
   self.normBW = res
示例#7
0
def proceed_err(nidim, nods, nt):
    r_vec = [nt, nidim]
    p_integ = PyMikor()
    fof = Integrand('FCN', nidim)
    fof.normalize_a(2, 600)
    exact_res = fof.exact_oscillatory()
    v_integ = vegas.Integrator(nidim * [[0, 1]])
    v_result = []
    v_result.append(v_integ(fof.oscillatory_fcn, nitn=10, neval=1e3).mean)
    v_result.append(v_integ(fof.oscillatory_fcn, nitn=10, neval=1e5).mean)

    global ave, ucc
    ave = fof.a
    ucc = fof.u

    def IntegCuba(ndim, xx, ncomp, ff, userdata):
        # x, y, z = [xx[i] for i in range(ndim.contents.value)]
        nnn = ndim.contents.value
        sma = 0.
        for i in range(nnn):
            sma += ave[i] * xx[i]
        ff[0] = math.cos(2. * math.pi * ucc[0] + sma)

        # res = 1.
        # for i in range(nnn):
        #    res *= 1./(1./math.pow(ave[i], 2) + math.pow(xx[i] - ucc[i], 2))
        #ff[0] = res
        return 0

    NDIM = nidim
    NCOMP = 1

    NNEW = 1000
    NMIN = 2
    FLATNESS = 50.

    KEY1 = 47
    KEY2 = 1
    KEY3 = 1
    MAXPASS = 5
    BORDER = 0.
    MAXCHISQ = 10.
    MINDEVIATION = .25
    NGIVEN = 0
    LDXGIVEN = NDIM
    NEXTRA = 0
    MINEVAL = 0
    MAXEVAL = 50000

    KEY = 0

    def print_header(name):
        print('-------------------- %s test -------------------' % name)

    def print_results(name, results):
        keys = ['nregions', 'neval', 'fail']
        text = ["%s %d" % (k, results[k]) for k in keys if k in results]
        print("%s RESULT:\t" % name.upper() + "\t".join(text))
        for comp in results['results']:
            print("%s RESULT:\t" % name.upper() +
                  "%(integral).8f +- %(error).8f\tp = %(prob).3f\n" % comp)

    # print_header('Vegas')
    vrs = pycuba.Vegas(IntegCuba, NDIM, verbose=0)
    # print_results('Vegas', vrs)
    v_result.append(vrs['results'][0]['integral'])

    # print_header('Divonne')
    cub = pycuba.Divonne(IntegCuba,
                         NDIM,
                         mineval=MINEVAL,
                         maxeval=MAXEVAL,
                         key1=KEY1,
                         key2=KEY2,
                         key3=KEY3,
                         maxpass=MAXPASS,
                         border=BORDER,
                         maxchisq=MAXCHISQ,
                         mindeviation=MINDEVIATION,
                         ldxgiven=LDXGIVEN,
                         verbose=0)
    # print_results('Divonne', cub)
    v_result.append(cub['results'][0]['integral'])

    for v in v_result:
        v = math.fabs((v - exact_res) / exact_res)
        r_vec.append(format_num(v))

    for tab_prime in nods:
        p_integ.set_values(1, nidim, tab_prime, 1, sigma=2)
        p_result = p_integ(fof.oscillatory_fcn)  # , eps=1e-4
        p_rel_res = math.fabs((p_result - exact_res) / exact_res)
        r_vec.append(format_num(p_rel_res))

    with open('data_oscillatory_a_norm1.csv', 'a', newline='') as file:
        wr = csv.writer(file, delimiter=',', quoting=csv.QUOTE_ALL)
        wr.writerow(r_vec)

    del p_integ
示例#8
0
def test_vegas():
    print_header('Vegas')
    print_results('Vegas', pycuba.Vegas(Integrand, NDIM, verbose=2))
示例#9
0
    def print_results(name, results):
        keys = ['nregions', 'neval', 'fail']
        text = ["%s %d" % (k, results[k]) for k in keys if k in results]
        print("%s RESULT:\t" % name.upper() + "\t".join(text))
        for comp in results['results']:
            print("%s RESULT:\t" % name.upper() + \
       "%(integral).8f +- %(error).8f\tp = %(prob).3f\n" % comp)

    from os import environ as env
    verbose = 2
    if 'CUBAVERBOSE' in env:
        verbose = int(env['CUBAVERBOSE'])

    print_header('Vegas')
    print_results('Vegas', pycuba.Vegas(Integrand, NDIM, verbose=2))

    print_header('Suave')
    print_results(
        'Suave',
        pycuba.Suave(Integrand, NDIM, NNEW, NMIN, FLATNESS, verbose=2 | 4))

    print_header('Divonne')
    print_results(
        'Divonne',
        pycuba.Divonne(Integrand,
                       NDIM,
                       mineval=MINEVAL,
                       maxeval=MAXEVAL,
                       key1=KEY1,
                       key2=KEY2,
示例#10
0
def integrand_HF(ndim, xx, ncomp, ff, userdata):

    q1, q2 = [xx[i] for i in range(ndim.contents.value)]
    q = np.array([q1, q2])
    k = np.zeros(2)
    k[0], k[1] = cob.k12tokxy(q[0], q[1])
    omegak = LSW.eigenvalue(q) / (3.0 * J_ex * spinsize)
    gammak = LSW.gammak(k)

    ff[0] = 1.0 / omegak
    ff[1] = (gammak) / omegak
    ff[2] = (gammak)**2 / omegak

    return 0


res = pycuba.Vegas(integrand_HF, 2, epsabs = 1e-4, \
                   verbose=2, ncomp=3, maxeval=1000000)

print_results('Vegas', res)

rres = res.get('results')
len_rres = len(rres)
iintegrals = np.zeros(len_rres)
for flag in range(len_rres):
    iintegrals[flag] = rres[flag].get('integral')

print(iintegrals)
fname = 'cintegrals.txt'
np.savetxt(fname, iintegrals)
示例#11
0
    print('-------------------- %s test -------------------' % name)
  def print_results(name, results):
    keys = ['nregions', 'neval', 'fail']
    text = ["%s %d" % (k, results[k]) for k in keys if k in results]
    print("%s RESULT:\t" % name.upper() + "\t".join(text))
    for comp in results['results']:
      print("%s RESULT:\t" % name.upper() + \
	"%(integral).8f +- %(error).8f\tp = %(prob).3f\n" % comp)
  
  from os import environ as env
  verbose = 2
  if 'CUBAVERBOSE' in env:
    verbose = int(env['CUBAVERBOSE'])
  
  print_header('Vegas')
  RR = pycuba.Vegas(Integrand, NDIM, verbose=2)
  print_results('Vegas', RR)
  
  print_header('Suave')
  print_results('Suave', pycuba.Suave(Integrand, NDIM, NNEW, NMIN, FLATNESS, verbose=2 | 4))
  
  print_header('Divonne')
  print_results('Divonne', pycuba.Divonne(Integrand, NDIM, 
    mineval=MINEVAL, maxeval=MAXEVAL,
    key1=KEY1, key2=KEY2, key3=KEY3, maxpass=MAXPASS,
    border=BORDER, maxchisq=MAXCHISQ, mindeviation=MINDEVIATION,
    ldxgiven=LDXGIVEN, verbose=2))
  
  print_header('Cuhre')
  print_results('Cuhre', pycuba.Cuhre(Integrand, NDIM, key=KEY, verbose=2 | 4))
示例#12
0
def run_cuba(**config):
	NDIM = config['ndim']
	loglikelihood = config['loglikelihood']
	def Integrand(ndim, xx, ncomp, ff, userdata):
		ff[0] = exp(loglikelihood([xx[i] for i in range(ndim.contents.value)]))
		return 0
	NCOMP = 1

	NNEW = 1000
	FLATNESS = 25.

	KEY1 = 47
	KEY2 = 1
	KEY3 = 1
	MAXPASS = 5
	BORDER = 0.
	MAXCHISQ = 10.
	MINDEVIATION = .25
	NGIVEN = 0
	LDXGIVEN = NDIM
	NEXTRA = 0
	MINEVAL = 100
	MAXEVAL = 2000000
	epsrel=0.5
	epsabs=1e-300
	
	KEY = 0
	
	commonargs = dict(
		mineval=MINEVAL, maxeval=MAXEVAL,
		epsrel=epsrel, epsabs=epsabs, 
		seed = config['seed'] + 1, # 0 stands for random
	)
	
	def print_results(name, results):
		keys = ['nregions', 'neval', 'fail']
		keys = list(filter(results.has_key, keys))
		text = ["%s %d" % (k, results[k]) for k in keys]
		print ("%s RESULT:\t" % name.upper() + "\t".join(text))
		for comp in results['results']:
			print ("%s RESULT:\t" % name.upper() + "%(integral).8f +- %(error).8f\tp = %(prob).3f\n" % comp)
	starttime = time.time()
	if config['cuba_algorithm'] == 'Vegas':
		results = pycuba.Vegas(Integrand, NDIM, verbose=2, **commonargs)
	elif config['cuba_algorithm'] == 'Suave':
		results = pycuba.Suave(Integrand, NDIM, NNEW, FLATNESS, verbose=2 | 4, **commonargs)
	elif config['cuba_algorithm'] == 'Divonne':
		results = pycuba.Divonne(Integrand, NDIM,
			key1=KEY1, key2=KEY2, key3=KEY3, maxpass=MAXPASS,
			border=BORDER, maxchisq=MAXCHISQ, mindeviation=MINDEVIATION,
			ldxgiven=LDXGIVEN, verbose=2, **commonargs)
	elif config['cuba_algorithm'] == 'Cuhre':
		results = pycuba.Cuhre(Integrand, NDIM, key=KEY, verbose=2 | 4, **commonargs)
  	else:
  		assert False, 'Unknown cuba algorithm "%s"!' % config['cuba_algorithm']
  	duration = time.time() - starttime
	print_results(config['cuba_algorithm'], results)
	Z = results['results'][0]['integral']
	Zerr = results['results'][0]['error']

	return dict(
		Z_computed = float(log(abs(Z) + 1e-300)),
		Z_computed_err = float(log(abs(Z+Zerr) + 1e-300) - log(abs(Z) + 1e-300)),
		failed=results['fail'] != 0 and Z >= 0 and Zerr >= 0,
		duration = duration,
	)
示例#13
0
def Sigma_decay(q, eq, ubov_q, ubov_mq):
    """
    Calculates the decay self-energy using on-shell approximation

    Parameters
    ----------
    q : np.array((3, ))
        incoming momentum.
    eq : np.array((4*num_sub, ))
        incoming energy.
    ubov_q : np.array((4*num_sub, 4*num_sub))
        Bogoliubov matrix of q.
    ubov_mq : np.array((4*num_sub, 4*num_sub))
        Bogoliubov matrix of -q.

    Returns
    -------
    np.array((2*num_sub, ))
        Self-energies for 2*num_sub bands.

    """

    # define the integrand as a nested function
    def integrand_decay(ndim, xx, ncopm, ff, userdata):
        """
        Integrand passed to cuba.

        Parameters
        ----------
        ndim : int
            dimension of integration.
        xx : np.array((3, ))
            input momentum.
        ncopm : int
            number of components.
        ff : np.array()
            integrand.
        userdata : c-type
            I don't know how to use this for python. try to avoid it

        Returns
        -------
        int
            value not relevent unless -999, see mannual.

        """

        # integration variable: k
        k1, k2, k3 = [xx[i] for i in range(ndim.contents.value)]
        k = np.array([k1, k2, k3])
        qmk = q - k

        ek, ubov_k = GLSW.eigensystem(k)
        eqmk, ubov_qmk = GLSW.eigensystem(qmk)
        tmp, ubov_mk = GLSW.eigensystem(-k)
        tmp, ubov_mqmk = GLSW.eigensystem(-qmk)

        tmpmat1 = ek[:2 * num_sub][:, None]
        tmpmat2 = eqmk[:2 * num_sub][None, :]
        esum = tmpmat1 + tmpmat2
        #denomin = eq[:2*num_sub, None, None] - esum[None, :, :] + 1j*cgf

        denomin = eq[None, None, :2 * num_sub] - esum[:, :, None] + 1j * cgf

        #v_decay = vertex.V_cubic_decay(q, k, qmk, ubov_q, ubov_k, ubov_qmk, \
        #                               ubov_mq, ubov_mk, ubov_mqmk)

        v_decay = vertex.V_cubic_decay(k, qmk, q, ubov_k, ubov_qmk, ubov_q, \
                                       ubov_mk, ubov_mqmk, ubov_mq)
        Intmat = (v_decay.conj() * v_decay) / denomin
        # 0.5 is the symmetry factor, return to the "on-shell" self-energy
        # for all bands
        Intvec = 0.5 * Intmat.sum(axis=(0, 1))

        for band in range(2 * num_sub):
            ff[2 * band] = np.real(Intvec[band])
            ff[2 * band + 1] = np.imag(Intvec[band])

        return 0

    print_header('Vegas')
    """
     vegas:
     pycuba.Vegas(integrand, ndim, userdata, epsrel=0.001, epsabs=1e-12, \
                 verbose=0, ncomp=1, seed=None, minevel=0, maxeval=50000, \
                 nstart=1000, nincrease=500, nbatch=1000, gridno=0, statefile=, \
                 nvec=1)
    """

    res = pycuba.Vegas(integrand_decay, NDIM, epsabs = 1e-5, \
                      verbose=2, ncomp=4*num_sub, maxeval=10000)
    """
    
    The return value is always a dictionary:
 { 'neval': number of evaluations,
  'fail': 0 or 1,
  'comp': number of components, usually 1,
  'nregions': number of regions used,
  'results': [ # a list of results for each component
     {
       'integral': value of the integral,
       'error':  uncertainty,
       'prob': probability (see manual),
     },
     ...
  ]
 }
  """

    print_results('Vegas', res)

    rres = res.get('results')
    len_rres = len(rres)
    iintegrals = np.zeros(len_rres)
    for flag in range(len_rres):
        iintegrals[flag] = rres[flag].get('integral')

    return iintegrals