mirror of
https://github.com/vale981/master-thesis
synced 2025-03-06 10:31:37 -05:00
125 lines
5.4 KiB
Python
125 lines
5.4 KiB
Python
|
import hierarchyLib
|
||
|
import hierarchyData
|
||
|
import numpy as np
|
||
|
import pickle
|
||
|
from scipy.special import gamma as gamma_func
|
||
|
|
||
|
from stocproc.stocproc import StocProc_FFT
|
||
|
import bcf
|
||
|
|
||
|
t_max = 25
|
||
|
alpha = 0.266
|
||
|
T = 2.09
|
||
|
numExpFit = 5
|
||
|
s = 1
|
||
|
wc = 0.531
|
||
|
|
||
|
with open('good_fit_data_abs_brute_force', "rb") as f:
|
||
|
good_fit_data_abs = pickle.load(f)
|
||
|
|
||
|
_, g_tilde, w_tilde = good_fit_data_abs[(numExpFit, s)]
|
||
|
g = 1/np.pi * gamma_func(s+1) * wc**(s+1) * np.asarray(g_tilde)
|
||
|
w = wc * np.asarray(w_tilde)
|
||
|
|
||
|
bcf_scale = np.pi / 2 * alpha * wc**(1-s)
|
||
|
|
||
|
|
||
|
|
||
|
# setup hierarchy parameters, here use a simple triangular hierarchy up to level 5
|
||
|
# the comments show the default values
|
||
|
# NOTE! the normalized version of HOPS is still buggy !!!
|
||
|
HierachyParam = hierarchyData.HiP(k_max = 5,
|
||
|
#g_scale=None,
|
||
|
#sample_method='random',
|
||
|
#seed=0,
|
||
|
#nonlinear=True,
|
||
|
#normalized=False,
|
||
|
#terminator=False,
|
||
|
#result_type= hierarchyData.RESULT_TYPE_ZEROTH_ORDER_ONLY,
|
||
|
#accum_only=None,
|
||
|
#rand_skip=None
|
||
|
)
|
||
|
|
||
|
# setup the integration parameters (see scipy ode)
|
||
|
IntegrationParam = hierarchyData.IntP(t_max = t_max, t_steps = 500,
|
||
|
#integrator_name='zvode',
|
||
|
#atol=1e-8,
|
||
|
#rtol=1e-8,
|
||
|
#order=5,
|
||
|
#nsteps=5000,
|
||
|
#method='bdf',
|
||
|
#t_steps_skip=1
|
||
|
)
|
||
|
|
||
|
# setup the system parameters
|
||
|
# here a simple Spin Boson system, single qubit coupled to a sub-ohmic environment
|
||
|
# how to get the g, w is a different story
|
||
|
SystemParam = hierarchyData.SysP(H_sys = np.asarray([[0,1],[1,0]]), # SIGMA X
|
||
|
L = np.asarray([[-1,0],[0,1]]), # SIGME Z
|
||
|
psi0 = np.asarray([0,1]), # excited qubit
|
||
|
g = np.asarray(g),
|
||
|
w = np.asarray(w),
|
||
|
H_dynamic = [],
|
||
|
bcf_scale = bcf_scale, # some coupling strength (scaling of the fit parameters 'g_i')
|
||
|
gw_hash = None, # this is used to load g,w from some database
|
||
|
len_gw = None)
|
||
|
|
||
|
|
||
|
# setup the stochastic process for the subohmic SD
|
||
|
# for each sample, the StocProc_FFT class is seeded differently which results in a different realization.
|
||
|
# for the HOPS solver, this looks like a simple callable z(t) returning complex values
|
||
|
Eta = StocProc_FFT(spectral_density = bcf.OSD(s=s, eta=1, gamma=wc),
|
||
|
t_max = t_max,
|
||
|
alpha = bcf.OBCF(s=s, eta=1, gamma=wc),
|
||
|
intgr_tol=1e-3,
|
||
|
intpl_tol=1e-3,
|
||
|
seed=None,
|
||
|
negative_frequencies=False,
|
||
|
scale=bcf_scale)
|
||
|
# thermal noise
|
||
|
EtaTherm = StocProc_FFT(spectral_density = bcf.OFTDens(s=s, eta=1, gamma=wc, beta=1/T),
|
||
|
t_max = t_max,
|
||
|
alpha = bcf.OFTCorr(s=s, eta=1, gamma=wc, beta=1/T),
|
||
|
intgr_tol=1e-3,
|
||
|
intpl_tol=1e-3,
|
||
|
seed=None,
|
||
|
negative_frequencies=False,
|
||
|
scale=bcf_scale)
|
||
|
|
||
|
# this guy must be digestable by the 'binfootprint' class, generating a unique binary representation of hi_key
|
||
|
# this allows to generate a hash value of the binary to access the produced data from some hdf5 data (see hierarchyData.py)
|
||
|
# NOTE! this requires that the ENTIRE sub-structure of 'hi_key' is digestable by 'binfootprint', therefore the special classes
|
||
|
# representing the spectral density and bath correlation function defined in bcf.py
|
||
|
# I developed 'binfootprit' since pickle and co. are not guaranteed to lead to unique binary data,
|
||
|
hi_key = hierarchyData.HIMetaKey_type(HiP = HierachyParam,
|
||
|
IntP = IntegrationParam,
|
||
|
SysP = SystemParam,
|
||
|
Eta = Eta,
|
||
|
EtaTherm = EtaTherm)
|
||
|
|
||
|
# here the hierarchy structure it set up ...
|
||
|
myHierarchy = hierarchyLib.HI(hi_key,
|
||
|
number_of_samples=100,
|
||
|
desc="run a test case")
|
||
|
|
||
|
# ... which allows to perform the integration, the data is stored in a file called 'myHierarchy.data'
|
||
|
# running the script again only crunches samples not done before!
|
||
|
myHierarchy.integrate_simple(data_name='myHierarchy.data')
|
||
|
|
||
|
# to access the data the 'hi_key' is used to find the data in the hdf5 file
|
||
|
with hierarchyData.HIMetaData(hid_name='myHierarchy.data', hid_path='.') as metaData:
|
||
|
with metaData.get_HIData(hi_key, read_only=True) as data:
|
||
|
smp = data.get_samples()
|
||
|
print("{} samples found in database".format(smp))
|
||
|
t = data.get_time()
|
||
|
rho_t = data.get_rho_t()
|
||
|
|
||
|
|
||
|
# to show some dynamics
|
||
|
import matplotlib.pyplot as plt
|
||
|
plt.plot(t, rho_t[:,1,1].real, label="average ({})".format(smp))
|
||
|
plt.ylabel("rho_(0,0)")
|
||
|
plt.xlabel("time")
|
||
|
plt.legend()
|
||
|
plt.show()
|