예제 #1
0
def compute(n):
    spins = [2 for i in range(n)]
    sc = spinchain.Spin_Hamiltonian(spins)  # create the chain
    sc.clean()
    sc = spinchain.Spin_Hamiltonian(spins)  # create the chain

    def fj(i, j):
        if 0.9 < abs(i - j) < 1.1: return 1.0
        return 0.0

    sc.set_exchange(fj)  # set exchange couplings
    #sc.set_fields(lambda x: [0.2,0.2,0.2]) # set exchange couplings
    sc.maxm = 10
    sc.nsweeps = 2
    sc.get_gs()
    i = 0
    j = 1
    t0 = time.time()
    sc.fit_td = True
    #  (x,y) = sc.evolution(nt=100,dt=0.03,name="ZZ",i=i,j=j)
    (x2, y2) = sc.get_dynamical_correlator(es=es, use_kpm=False, dt=0.1)
    t1 = time.time()
    print("Time", t1 - t0)
    return t1 - t0
예제 #2
0
import sys
import os
import numpy as np
sys.path.append(os.environ["DMRGROOT"]) # root for dmrg
import spinchain

n = 30
spins = [2 for i in range(n)] # spin 1/2 heisenberg chain
sc = spinchain.Spin_Hamiltonian(spins) # create the spin chain


# dimerized coupling
def fj(i,j):
  if abs(i-j)==1:
    ij = (i+j)%4
    dj = -0.2
    if ij==1: return 1.0 + dj
    else: return 1.0 - dj
  return 0.0
sc.set_exchange(fj) # set those exchange couplings


#sc.kpmmaxm = 10 # KPM max m
sc.kpmscale = 10.0
import time
import matplotlib.pyplot as plt

fo = open("DCF.OUT","w") # dynamical correlation function

for i in range(n): # loop over sites
  (xs,ys) = sc.get_spismj(n=1000,mode="DMRG",i=i,j=0)