mirror of
https://github.com/vale981/master-thesis
synced 2025-03-17 08:26:40 -04:00
34 KiB
34 KiB
Setup
Jupyter
%load_ext autoreload
%autoreload 2
%load_ext jupyter_spaces
The autoreload extension is already loaded. To reload it, use: %reload_ext autoreload
Matplotlib
import matplotlib
import matplotlib.pyplot as plt
#matplotlib.use("TkCairo", force=True)
%gui tk
%matplotlib inline
plt.style.use('ggplot')
Richard (old) HOPS
import hierarchyLib
import hierarchyData
import numpy as np
from stocproc.stocproc import StocProc_FFT
import bcf
from dataclasses import dataclass, field
import scipy
import scipy.misc
import scipy.signal
import pickle
from scipy.special import gamma as gamma_func
from scipy.optimize import curve_fit
Auxiliary Definitions
σ1 = np.matrix([[0,1],[1,0]])
σ2 = np.matrix([[0,-1j],[1j,0]])
σ3 = np.matrix([[1,0],[0,-1]])
Model Setup
Basic parameters.
class params:
T = 2
t_max = 10
t_steps = int(t_max * 1/.01)
k_max = 10
N = 1000
seed = 100
dim = 2
H_s = σ3 + np.eye(dim)
L = σ2 #1 / 2 * (σ1 - 1j * σ2)
ψ_0 = np.array([0, 1])
s = 1
num_exp_t = 4
wc = 1
with open("good_fit_data_abs_brute_force", "rb") as f:
good_fit_data_abs = pickle.load(f)
alpha = 0.8
# _, g_tilde, w_tilde = good_fit_data_abs[(numExpFit, s)]
# g_tilde = np.array(g_tilde)
# w_tilde = np.array(w_tilde)
# 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)
BCF and Thermal BCF
@dataclass
class CauchyBCF:
δ: float
wc: float
def I(self, ω):
return np.sqrt(self.δ) / (self.δ + (ω - self.wc) ** 2 / self.δ)
def __call__(self, τ):
return np.sqrt(self.δ) * np.exp(-1j * self.wc * τ - np.abs(τ) * self.δ)
def __bfkey__(self):
return self.δ, self.wc
α = bcf.OBCF(s=params.s, eta=1, gamma=params.wc)
I = bcf.OSD(s=params.s, eta=1, gamma=params.wc)
Fit
We now fit a sum of exponentials against the BCF.
from lmfit import minimize, Parameters
def α_apprx(τ, g, w):
return np.sum(
g[np.newaxis, :] * np.exp(-w[np.newaxis, :] * (τ[:, np.newaxis])), axis=1
)
def _fit():
def residual(fit_params, x, data):
resid = 0
w = np.array([fit_params[f"w{i}"] for i in range(params.num_exp_t)]) + 1j * np.array(
[fit_params[f"wi{i}"] for i in range(params.num_exp_t)]
)
g = np.array([fit_params[f"g{i}"] for i in range(params.num_exp_t)]) + 1j * np.array(
[fit_params[f"gi{i}"] for i in range(params.num_exp_t)]
)
resid = data - α_apprx(x, g, w)
return resid.view(float)
fit_params = Parameters()
for i in range(params.num_exp_t):
fit_params.add(f"g{i}", value=.1)
fit_params.add(f"gi{i}", value=.1)
fit_params.add(f"w{i}", value=.1)
fit_params.add(f"wi{i}", value=.1)
ts = np.linspace(0, params.t_max, 1000)
out = minimize(residual, fit_params, args=(ts, α(ts)))
w = np.array([out.params[f"w{i}"] for i in range(params.num_exp_t)]) + 1j * np.array(
[out.params[f"wi{i}"] for i in range(params.num_exp_t)]
)
g = np.array([out.params[f"g{i}"] for i in range(params.num_exp_t)]) + 1j * np.array(
[out.params[f"gi{i}"] for i in range(params.num_exp_t)]
)
return w, g
w, g = _fit()
Plot
Let's look a the result.
class bcfplt:
t = np.linspace(0, params.t_max, 1000)
ω = np.linspace(params.wc - 10, params.wc + 10, 1000)
fig, axs = plt.subplots(2)
axs[0].plot(t, np.real(α(t)))
axs[0].plot(t, np.imag(α(t)))
axs[0].plot(t, np.real(α_apprx(t, g, w)))
axs[0].plot(t, np.imag(α_apprx(t, g, w)))
axs[1].plot(ω, I(ω).real)
axs[1].plot(ω, I(ω).imag)
Seems ok for now.
Hops setup
HierachyParam = hierarchyData.HiP(
k_max=params.k_max,
# g_scale=None,
# sample_method='random',
seed=params.seed,
nonlinear=True,
normalized=False,
# terminator=False,
result_type=hierarchyData.RESULT_TYPE_ALL,
# accum_only=None,
# rand_skip=None
)
Integration.
IntegrationParam = hierarchyData.IntP(
t_max=params.t_max,
t_steps=params.t_steps,
# integrator_name='zvode',
# atol=1e-8,
# rtol=1e-8,
# order=5,
# nsteps=5000,
# method='bdf',
# t_steps_skip=1
)
And now the system.
SystemParam = hierarchyData.SysP(
H_sys=params.H_s,
L=params.L,
psi0=params.ψ_0, # excited qubit
g=np.array(g),
w=np.array(w),
H_dynamic=[],
bcf_scale=params.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=len(g),
)
The quantum noise.
Eta = StocProc_FFT(
I,
params.t_max,
α,
negative_frequencies=False,
seed=params.seed,
intgr_tol=1e-3,
intpl_tol=1e-3,
scale=params.bcf_scale,
)
stocproc.stocproc - INFO - non neg freq only stocproc.method_ft - INFO - get_dt_for_accurate_interpolation, please wait ... stocproc.method_ft - INFO - acc interp N 33 dt 6.25e-01 -> diff 1.51e-01 stocproc.method_ft - INFO - acc interp N 65 dt 3.12e-01 -> diff 3.41e-02 stocproc.method_ft - INFO - acc interp N 129 dt 1.56e-01 -> diff 7.19e-03 stocproc.method_ft - INFO - acc interp N 257 dt 7.81e-02 -> diff 1.70e-03 stocproc.method_ft - INFO - acc interp N 513 dt 3.91e-02 -> diff 4.21e-04 stocproc.method_ft - INFO - requires dt < 3.906e-02 stocproc.method_ft - INFO - get_N_a_b_for_accurate_fourier_integral, please wait ... stocproc.method_ft - INFO - J_w_min:1.00e-02 N 32 yields: interval [0.00e+00,6.47e+00] diff 9.83e-03 stocproc.method_ft - INFO - J_w_min:1.00e-03 N 32 yields: interval [0.00e+00,9.12e+00] diff 6.55e-03 stocproc.method_ft - INFO - J_w_min:1.00e-02 N 64 yields: interval [0.00e+00,6.47e+00] diff 1.11e-02 stocproc.method_ft - INFO - increasing N while shrinking the interval does lower the error -> try next level stocproc.method_ft - INFO - J_w_min:1.00e-04 N 32 yields: interval [0.00e+00,1.17e+01] diff 1.32e-02 stocproc.method_ft - INFO - J_w_min:1.00e-03 N 64 yields: interval [0.00e+00,9.12e+00] diff 9.90e-04 stocproc.method_ft - INFO - return, cause tol of 0.001 was reached stocproc.method_ft - INFO - requires dx < 1.425e-01 stocproc.stocproc - INFO - Fourier Integral Boundaries: [0.000e+00, 2.166e+02] stocproc.stocproc - INFO - Number of Nodes : 2048 stocproc.stocproc - INFO - yields dx : 1.058e-01 stocproc.stocproc - INFO - yields dt : 2.900e-02 stocproc.stocproc - INFO - yields t_max : 5.937e+01
The sample trajectories are smooth.
%%space plot
ts = np.linspace(0, params.t_max, 1000)
Eta.new_process()
plt.plot(ts, Eta(ts).real)
<matplotlib.lines.Line2D | at | 0x7f70a4adb790> |
And now the thermal noise.
EtaTherm = StocProc_FFT(
spectral_density=bcf.OFTDens(s=params.s, eta=1, gamma=params.wc, beta=1 / params.T),
t_max=params.t_max,
alpha=bcf.OFTCorr(s=params.s, eta=1, gamma=params.wc, beta=1 / params.T),
intgr_tol=1e-3,
intpl_tol=1e-3,
seed=params.seed,
negative_frequencies=False,
scale=params.bcf_scale,
)
stocproc.stocproc - INFO - non neg freq only stocproc.method_ft - INFO - get_dt_for_accurate_interpolation, please wait ... stocproc.method_ft - INFO - acc interp N 33 dt 6.25e-01 -> diff 2.82e-02 stocproc.method_ft - INFO - acc interp N 65 dt 3.12e-01 -> diff 5.93e-03 stocproc.method_ft - INFO - acc interp N 129 dt 1.56e-01 -> diff 1.38e-03 stocproc.method_ft - INFO - acc interp N 257 dt 7.81e-02 -> diff 3.38e-04 stocproc.method_ft - INFO - requires dt < 7.812e-02 stocproc.method_ft - INFO - get_N_a_b_for_accurate_fourier_integral, please wait ... stocproc.method_ft - INFO - J_w_min:1.00e-02 N 32 yields: interval [0.00e+00,4.10e+00] diff 1.21e-02 stocproc.method_ft - INFO - J_w_min:1.00e-03 N 32 yields: interval [0.00e+00,5.82e+00] diff 2.95e-02 stocproc.method_ft - INFO - J_w_min:1.00e-02 N 64 yields: interval [0.00e+00,4.10e+00] diff 7.88e-03 stocproc.method_ft - INFO - J_w_min:1.00e-04 N 32 yields: interval [0.00e+00,7.50e+00] diff 4.90e-02 stocproc.method_ft - INFO - J_w_min:1.00e-03 N 64 yields: interval [0.00e+00,5.82e+00] diff 6.80e-03 stocproc.method_ft - INFO - J_w_min:1.00e-02 N 128 yields: interval [0.00e+00,4.10e+00] diff 7.56e-03 stocproc.method_ft - INFO - increasing N while shrinking the interval does lower the error -> try next level stocproc.method_ft - INFO - J_w_min:1.00e-05 N 32 yields: interval [0.00e+00,9.16e+00] diff 8.38e-02 stocproc.method_ft - INFO - J_w_min:1.00e-04 N 64 yields: interval [0.00e+00,7.50e+00] diff 1.10e-02 stocproc.method_ft - INFO - J_w_min:1.00e-03 N 128 yields: interval [0.00e+00,5.82e+00] diff 1.60e-03 stocproc.method_ft - INFO - J_w_min:1.00e-02 N 256 yields: interval [0.00e+00,4.10e+00] diff 7.48e-03 stocproc.method_ft - INFO - increasing N while shrinking the interval does lower the error -> try next level stocproc.method_ft - INFO - J_w_min:1.00e-06 N 32 yields: interval [0.00e+00,1.08e+01] diff 1.22e-01 stocproc.method_ft - INFO - J_w_min:1.00e-05 N 64 yields: interval [0.00e+00,9.16e+00] diff 1.75e-02 stocproc.method_ft - INFO - J_w_min:1.00e-04 N 128 yields: interval [0.00e+00,7.50e+00] diff 2.67e-03 stocproc.method_ft - INFO - J_w_min:1.00e-03 N 256 yields: interval [0.00e+00,5.82e+00] diff 7.86e-04 stocproc.method_ft - INFO - return, cause tol of 0.001 was reached stocproc.method_ft - INFO - requires dx < 2.272e-02 stocproc.stocproc - INFO - Fourier Integral Boundaries: [0.000e+00, 8.651e+01] stocproc.stocproc - INFO - Number of Nodes : 4096 stocproc.stocproc - INFO - yields dx : 2.112e-02 stocproc.stocproc - INFO - yields dt : 7.263e-02 stocproc.stocproc - INFO - yields t_max : 2.974e+02
The sample trajectories are smooth too.
%%space plot
ts = np.linspace(0, params.t_max, 1000)
EtaTherm.new_process()
plt.plot(ts, EtaTherm(ts).real)
<matplotlib.lines.Line2D | at | 0x7f70a4a507c0> |
Actual Hops
Generate the key for binary caching.
hi_key = hierarchyData.HIMetaKey_type(
HiP=HierachyParam,
IntP=IntegrationParam,
SysP=SystemParam,
Eta=Eta,
EtaTherm=EtaTherm,
)
Initialize Hierarchy.
myHierarchy = hierarchyLib.HI(hi_key, number_of_samples=params.N, desc="calculate the heat flow")
init Hi class, use 2002 equation /home/hiro/Documents/Projects/UNI/master/masterarb/python/richard_hops/hierarchyLib.py:1058: UserWarning: sum_k_max is not implemented! DO SO BEFORE NEXT USAGE (use simplex).HierarchyParametersType does not yet know about sum_k_max warnings.warn(
Run the integration.
myHierarchy.integrate_simple(data_path="data", data_name="energy_flow_therm_new_again_less.data")
(10, 1000, 1001) samples :0.0% integration :0.0% [2A[8m[0msamples :0.4% integration :45.6% [2A[8m[0msamples :0.9% integration :12.6% [2A[8m[0msamples :1.3% integration :95.3% [2A[8m[0msamples :1.8% integration :76.1% [2A[8m[0msamples :2.3% integration :48.0% [2A[8m[0msamples :2.3% integration :99.9% [2A[8m[0msamples :2.4% integration :74.3% [2A[8m[0msamples :2.9% integration :64.6% [2A[8m[0msamples :3.4% integration :46.3% [2A[8m[0msamples :3.9% integration :14.1% [2A[8m[0msamples :4.4% integration :1.5% [2A[8m[0msamples :4.8% integration :92.0% [2A[8m[0msamples :5.3% integration :66.0% [2A[8m[0msamples :5.8% integration :51.5% [2A[8m[0msamples :6.3% integration :35.0% [2A[8m[0msamples :6.4% integration :99.9% [2A[8m[0msamples :6.4% integration :99.9% [2A[8m[0msamples :6.4% integration :99.9% [2A[8m[0msamples :6.4% integration :99.9% [2A[8m[0msamples :6.9% integration :1.2% [2A[8m[0msamples :7.0% integration :99.9% [2A[8m[0msamples :7.5% integration :35.0% [2A[8m[0msamples :7.9% integration :95.6% [2A[8m[0msamples :8.0% integration :43.1% [2A[8m[0msamples :8.5% integration :23.9% [2A[8m[0msamples :8.7% integration :99.9% [2A[8m[0msamples :9.1% integration :0.2% [2A[8m[0msamples :9.5% integration :89.0% [2A[8m[0msamples :9.6% integration :99.9% [2A[8m[0msamples :10.1% integration :77.3% [2A[8m[0msamples :10.4% integration :99.9% [2A[8m[0msamples :10.6% integration :78.4% [2A[8m[0msamples :11.1% integration :54.3% [2A[8m[0msamples :11.2% integration :99.9% [2A[8m[0msamples :11.7% integration :67.8% [2A[8m[0msamples :12.1% integration :99.9% [2A[8m[0msamples :12.3% integration :66.9% [2A[8m[0msamples :12.8% integration :49.7% [2A[8m[0msamples :12.9% integration :99.9% [2A[8m[0msamples :13.4% integration :15.6% [2A[8m[0msamples :13.8% integration :99.9% [2A[8m[0msamples :13.9% integration :99.9% [2A[8m[0msamples :14.4% integration :79.3% [2A[8m[0msamples :14.6% integration :99.9% [2A[8m[0msamples :15.0% integration :56.3% [2A[8m[0msamples :15.5% integration :24.4% [2A[8m[0msamples :15.6% integration :53.3% [2A[8m[0msamples :16.1% integration :40.1% [2A[8m[0msamples :16.3% integration :99.9% [2A[8m[0msamples :16.7% integration :1.3% [2A[8m[0msamples :17.1% integration :85.3% [2A[8m[0msamples :17.2% integration :99.9% [2A[8m[0msamples :17.7% integration :1.7% [2A[8m[0msamples :18.0% integration :99.9% [2A[8m[0msamples :18.2% integration :80.1% [2A[8m[0msamples :18.7% integration :54.7% [2A[8m[0msamples :18.8% integration :99.9% [2A[8m[0msamples :19.3% integration :42.4% [2A[8m[0msamples :19.7% integration :99.9% [2A[8m[0msamples :19.9% integration :49.4% [2A[8m[0msamples :20.4% integration :28.7% [2A[8m[0msamples :20.5% integration :99.9% [2A[8m[0msamples :20.6% integration :48.9% [2A[8m[0msamples :21.0% integration :99.9% [2A[8m[0msamples :21.3% integration :39.7% [2A[8m[0msamples :21.8% integration :17.9% [2A[8m[0msamples :22.0% integration :99.9% [2A[8m[0msamples :22.3% integration :55.0% [2A[8m[0msamples :22.8% integration :23.0% [2A[8m[0msamples :22.9% integration :61.2% [2A[8m[0msamples :23.4% integration :34.9% [2A[8m[0msamples :23.6% integration :99.9% [2A[8m[0msamples :23.9% integration :92.7% [2A[8m[0msamples :24.4% integration :63.9% [2A[8m[0msamples :24.4% integration :99.9% [2A[8m[0msamples :24.9% integration :20.4% [2A[8m[0msamples :25.2% integration :99.9% [2A[8m[0msamples :25.5% integration :57.4% [2A[8m[0msamples :25.9% integration :95.2% [2A[8m[0msamples :26.0% integration :99.9% [2A[8m[0msamples :26.2% integration :93.2% [2A[8m[0msamples :26.6% integration :99.9% [2A[8m[0msamples :26.9% integration :53.1% [2A[8m[0msamples :27.4% integration :40.7% [2A[8m[0msamples :27.5% integration :99.9% [2A[8m[0msamples :27.9% integration :71.3% [2A[8m[0msamples :28.3% integration :99.9% [2A[8m[0msamples :28.5% integration :19.5% [2A[8m[0msamples :29.0% integration :8.5% [2A[8m[0msamples :29.2% integration :99.9% [2A[8m[0msamples :29.6% integration :0.1% [2A[8m[0msamples :30.0% integration :82.2% [2A[8m[0msamples :30.1% integration :69.8% [2A[8m[0msamples :30.6% integration :50.0% [2A[8m[0msamples :30.9% integration :99.9% [2A[8m[0msamples :31.0% integration :81.4% [2A[8m[0msamples :31.5% integration :57.7% [2A[8m[0msamples :31.6% integration :52.0% [2A[8m[0msamples :32.1% integration :34.3% [2A[8m[0msamples :32.4% integration :99.9% [2A[8m[0msamples :32.7% integration :22.2% [2A[8m[0msamples :33.2% integration :0.0% [2A[8m[0msamples :33.3% integration :99.9% [2A[8m[0msamples :33.8% integration :5.6% [2A[8m[0msamples :34.1% integration :99.9% [2A[8m[0msamples :34.3% integration :3.6% [2A[8m[0msamples :34.7% integration :84.6% [2A[8m[0msamples :34.9% integration :99.9% [2A[8m[0msamples :35.3% integration :89.0% [2A[8m[0msamples :35.8% integration :62.8% [2A[8m[0msamples :35.9% integration :39.1% [2A[8m[0msamples :36.4% integration :11.0% [2A[8m[0msamples :36.6% integration :99.9% [2A[8m[0msamples :36.6% integration :99.9% [2A[8m[0msamples :37.1% integration :10.6% [2A[8m[0msamples :37.3% integration :65.4% [2A[8m[0msamples :37.8% integration :44.3% [2A[8m[0msamples :38.1% integration :99.9% [2A[8m[0msamples :38.3% integration :99.9% [2A[8m[0msamples :38.8% integration :81.3% [2A[8m[0msamples :39.0% integration :7.2% [2A[8m[0msamples :39.4% integration :97.2% [2A[8m[0msamples :39.8% integration :99.9% [2A[8m[0msamples :40.0% integration :93.5% [2A[8m[0msamples :40.5% integration :70.7% [2A[8m[0msamples :40.6% integration :99.9% [2A[8m[0msamples :40.9% integration :45.0% [2A[8m[0msamples :41.3% integration :99.9% [2A[8m[0msamples :41.5% integration :88.2% [2A[8m[0msamples :42.0% integration :68.2% [2A[8m[0msamples :42.2% integration :99.9% [2A[8m[0msamples :42.5% integration :92.3% [2A[8m[0msamples :43.0% integration :68.6% [2A[8m[0msamples :43.1% integration :99.9% [2A[8m[0msamples :43.6% integration :71.8% [2A[8m[0msamples :44.1% integration :44.8% [2A[8m[0msamples :44.6% integration :25.6% [2A[8m[0msamples :45.1% integration :7.7% [2A[8m[0msamples :45.5% integration :97.1% [2A[8m[0msamples :46.0% integration :72.7% [2A[8m[0msamples :46.5% integration :40.4% [2A[8m[0msamples :47.0% integration :22.3% [2A[8m[0msamples :47.5% integration :3.1% [2A[8m[0msamples :47.9% integration :90.8% [2A[8m[0msamples :48.4% integration :67.0% [2A[8m[0msamples :48.9% integration :36.7% [2A[8m[0msamples :48.9% integration :99.9% [2A[8m[0msamples :48.9% integration :99.9% [2A[8m[0msamples :48.9% integration :99.9% [2A[8m[0msamples :48.9% integration :99.9% [2A[8m[0msamples :48.9% integration :99.9% [2A[8m[0msamples :49.3% integration :5.0% [2A[8m[0msamples :49.7% integration :85.1% [2A[8m[0msamples :50.0% integration :99.9% [2A[8m[0msamples :50.2% integration :41.6% [2A[8m[0msamples :50.7% integration :24.7% [2A[8m[0msamples :51.1% integration :99.9% [2A[8m[0msamples :51.6% integration :78.3% [2A[8m[0msamples :52.1% integration :46.2% [2A[8m[0msamples :52.6% integration :29.4% [2A[8m[0msamples :53.1% integration :5.9% [2A[8m[0msamples :53.5% integration :78.5% [2A[8m[0msamples :54.0% integration :53.3% [2A[8m[0msamples :54.5% integration :28.7% [2A[8m[0msamples :55.0% integration :10.4% [2A[8m[0msamples :55.5% integration :3.0% [2A[8m[0msamples :55.9% integration :97.2% [2A[8m[0msamples :56.4% integration :75.1% [2A[8m[0msamples :56.7% integration :11.9% [2A[8m[0msamples :57.2% integration :0.0% [2A[8m[0msamples :57.5% integration :99.9% [2A[8m[0msamples :57.5% integration :99.9% [2A[8m[0msamples :57.5% integration :99.9% [2A[8m[0msamples :57.5% integration :99.9% [2A[8m[0msamples :57.5% integration :99.9% [2A[8m[0msamples :57.5% integration :99.9% [2A[8m[0msamples :57.8% integration :77.7% [2A[8m[0msamples :58.3% integration :53.5% [2A[8m[0msamples :58.5% integration :99.9% [2A[8m[0msamples :58.7% integration :37.1% [2A[8m[0msamples :59.2% integration :15.8% [2A[8m[0msamples :59.4% integration :5.8% [2A[8m[0msamples :59.8% integration :99.5% [2A[8m[0msamples :60.1% integration :99.9% [2A[8m[0msamples :60.1% integration :99.9% [2A[8m[0msamples :60.5% integration :0.0% [2A[8m[0msamples :60.7% integration :77.9% [2A[8m[0msamples :61.2% integration :59.5% [2A[8m[0msamples :61.5% integration :99.9% [2A[8m[0msamples :61.7% integration :62.3% [2A[8m[0msamples :62.2% integration :28.4% [2A[8m[0msamples :62.3% integration :99.9% [2A[8m[0msamples :62.5% integration :59.4% [2A[8m[0msamples :62.8% integration :99.9% [2A[8m[0msamples :63.1% integration :62.1% [2A[8m[0msamples :63.6% integration :37.8% [2A[8m[0msamples :63.7% integration :99.9% [2A[8m[0msamples :64.1% integration :99.8% [2A[8m[0msamples :64.6% integration :79.1% [2A[8m[0msamples :64.7% integration :90.6% [2A[8m[0msamples :65.2% integration :68.2% [2A[8m[0msamples :65.4% integration :99.9% [2A[8m[0msamples :65.8% integration :47.8% [2A[8m[0msamples :66.3% integration :14.5% [2A[8m[0msamples :66.4% integration :37.2% [2A[8m[0msamples :66.9% integration :20.2% [2A[8m[0msamples :67.1% integration :99.9% [2A[8m[0msamples :67.3% integration :6.3% [2A[8m[0msamples :67.7% integration :95.5% [2A[8m[0msamples :67.9% integration :53.7% [2A[8m[0msamples :68.4% integration :36.6% [2A[8m[0msamples :68.7% integration :99.9% [2A[8m[0msamples :69.1% integration :23.1% [2A[8m[0msamples :69.6% integration :10.3% [2A[8m[0msamples :70.0% integration :91.6% [2A[8m[0msamples :70.5% integration :65.4% [2A[8m[0msamples :71.0% integration :42.1% [2A[8m[0msamples :71.5% integration :20.5% [2A[8m[0msamples :72.0% integration :5.8% [2A[8m[0msamples :72.4% integration :93.3% [2A[8m[0msamples :72.9% integration :76.1% [2A[8m[0msamples :73.4% integration :73.2% [2A[8m[0msamples :73.9% integration :56.9% [2A[8m[0msamples :74.4% integration :30.2% [2A[8m[0msamples :74.9% integration :11.4% [2A[8m[0msamples :75.2% integration :66.9% [2A[8m[0msamples :75.7% integration :28.5% [2A[8m[0msamples :75.9% integration :99.9% [2A[8m[0msamples :75.9% integration :99.9% [2A[8m[0msamples :75.9% integration :99.9% [2A[8m[0msamples :75.9% integration :99.9% [2A[8m[0msamples :75.9% integration :99.9% [2A[8m[0msamples :76.1% integration :10.6% [2A[8m[0msamples :76.5% integration :99.8% [2A[8m[0msamples :77.0% integration :81.5% [2A[8m[0msamples :77.1% integration :99.9% [2A[8m[0msamples :77.4% integration :73.1% [2A[8m[0msamples :77.8% integration :99.9% [2A[8m[0msamples :78.0% integration :57.8% [2A[8m[0msamples :78.5% integration :37.9% [2A[8m[0msamples :78.6% integration :99.9% [2A[8m[0msamples :78.7% integration :0.1% [2A[8m[0msamples :79.1% integration :82.8% [2A[8m[0msamples :79.4% integration :35.2% [2A[8m[0msamples :79.9% integration :16.9% [2A[8m[0msamples :80.1% integration :99.9% [2A[8m[0msamples :80.4% integration :81.1% [2A[8m[0msamples :80.9% integration :42.0% [2A[8m[0msamples :81.0% integration :81.5% [2A[8m[0msamples :81.5% integration :64.4% [2A[8m[0msamples :81.8% integration :99.9% [2A[8m[0msamples :82.1% integration :53.6% [2A[8m[0msamples :82.6% integration :38.6% [2A[8m[0msamples :82.7% integration :15.3% [2A[8m[0msamples :83.2% integration :0.1% [2A[8m[0msamples :83.4% integration :99.9% [2A[8m[0msamples :83.4% integration :99.9% [2A[8m[0msamples :83.9% integration :41.7% [2A[8m[0msamples :84.1% integration :37.1% [2A[8m[0msamples :84.6% integration :13.4% [2A[8m[0msamples :84.9% integration :99.9% [2A[8m[0msamples :85.0% integration :81.5% [2A[8m[0msamples :85.5% integration :59.9% [2A[8m[0msamples :85.6% integration :99.9% [2A[8m[0msamples :86.1% integration :30.6% [2A[8m[0msamples :86.5% integration :53.8% [2A[8m[0msamples :86.6% integration :99.9% [2A[8m[0msamples :87.1% integration :82.4% [2A[8m[0msamples :87.3% integration :99.9% [2A[8m[0msamples :87.5% integration :58.6% [2A[8m[0msamples :88.0% integration :36.3% [2A[8m[0msamples :88.2% integration :13.1% [2A[8m[0msamples :88.6% integration :98.9% [2A[8m[0msamples :88.9% integration :99.9% [2A[8m[0msamples :89.2% integration :55.8% [2A[8m[0msamples :89.7% integration :25.7% [2A[8m[0msamples :89.8% integration :22.9% [2A[8m[0msamples :90.3% integration :0.4% [2A[8m[0msamples :90.5% integration :99.9% [2A[8m[0msamples :90.7% integration :88.2% [2A[8m[0msamples :91.2% integration :66.2% [2A[8m[0msamples :91.3% integration :99.9% [2A[8m[0msamples :91.7% integration :94.0% [2A[8m[0msamples :92.1% integration :99.9% [2A[8m[0msamples :92.3% integration :18.3% [2A[8m[0msamples :92.7% integration :96.3% [2A[8m[0msamples :93.2% integration :78.6% [2A[8m[0msamples :93.7% integration :54.4% [2A[8m[0msamples :94.2% integration :33.1% [2A[8m[0msamples :94.7% integration :20.7% [2A[8m[0msamples :95.1% integration :98.3% [2A[8m[0msamples :95.6% integration :80.2% [2A[8m[0msamples :96.1% integration :57.7% [2A[8m[0msamples :96.6% integration :35.9% [2A[8m[0msamples :97.1% integration :18.9% [2A[8m[0msamples :97.6% integration :0.4% [2A[8m[0msamples :98.0% integration :75.9% [2A[8m[0msamples :98.5% integration :54.6% [2A[8m[0msamples :98.9% integration :34.8% [2A[8m[0msamples :99.3% integration :37.7% [2A[8m[0msamples :99.3% integration :99.9% [2A[8m[0msamples :99.3% integration :99.9% [2A[8m[0msamples :99.3% integration :99.9% [2A[8m[0msamples :99.3% integration :99.9% [2A[8m[0msamples :99.3% integration :99.9% [2A[8m[0msamples :99.3% integration :99.9% [2A[8m[0msamples :99.7% integration :63.5% [2A[8m[0msamples : 100% integration :0.0% [0A[8m[0m
Get the samples.
# to access the data the 'hi_key' is used to find the data in the hdf5 file
class int_result:
with hierarchyData.HIMetaData(
hid_name="energy_flow_therm_new_again_less.data", hid_path="data"
) as metaData:
with metaData.get_HIData(hi_key, read_only=True) as data:
smp = data.get_samples()
print("{} samples found in database".format(smp))
τ = data.get_time()
rho_τ = data.get_rho_t()
#s_proc = np.array(data.stoc_proc)
#states = np.array(data.aux_states).copy()
ψ_1 = np.array(data.aux_states[:, :, 0 : params.num_exp_t * params.dim])
ψ_0 = np.array(data.stoc_traj)
y = np.array(data.y)
#η = np.array(data.stoc_proc)
temp_y = np.array(data.temp_y)
1000 samples found in database
Calculate energy.
%matplotlib inline
energy = np.einsum("ijk,kj", int_result.rho_τ,params.H_s).real
plt.plot(int_result.τ, energy)
<matplotlib.lines.Line2D | at | 0x7f70a4918400> |
Energy Flow
int_result.ψ_1.shape
1280 | 1000 | 8 |
Let's look at the norm.
plt.plot(int_result.τ, (int_result.ψ_0[0].conj() * int_result.ψ_0[0]).sum(axis=1).real)
<matplotlib.lines.Line2D | at | 0x7f70a48fabe0> |
And try to calculate the energy flow.
def flow_for_traj(ψ_0, ψ_1, temp_y):
a = np.array((params.L @ ψ_0.T).T)
EtaTherm.new_process(temp_y)
η_dot = scipy.misc.derivative(EtaTherm, int_result.τ, dx=1e-3, order=5)
ψ_1 = (-w * g * params.bcf_scale)[None, :, None] * ψ_1.reshape(
params.t_steps, params.num_exp_t, params.dim
)
# return np.array(np.sum(ψ_0.conj() * ψ_0, axis=1)).flatten().real
j_0 = np.array(
2
,* (
1j
,* (np.sum(a.conj()[:, None, :] * ψ_1, axis=(1, 2)))
/ np.sum(ψ_0.conj() * ψ_0, axis=1)
).real
).flatten()
j_therm = np.array(
2
,* (
1j
,* (np.sum(a.conj() * ψ_0, axis=1)) * η_dot
/ np.sum(ψ_0.conj() * ψ_0, axis=1)
).real
).flatten()
return j_0, j_therm
Now we calculate the average over all trajectories.
class Flow:
j_0 = np.zeros_like(int_result.τ)
j_therm = np.zeros_like(int_result.τ)
for i in range(0, params.N):
dj, dj_therm = flow_for_traj(
int_result.ψ_0[i], int_result.ψ_1[i], int_result.temp_y[i]
)
j_0 += dj
j_therm += dj_therm
j_0 /= params.N
j_therm /= params.N
j = j_0 + j_therm
And plot it :).
%matplotlib inline
plt.plot(int_result.τ, Flow.j_0, label=r"$j_0$")
plt.plot(int_result.τ, Flow.j_therm, label=r"$j_\mathrm{therm}$")
plt.plot(int_result.τ, Flow.j, label=r"$j$")
plt.legend()
<matplotlib.legend.Legend at 0x7f70a49ccac0>
Let's calculate the integrated energy.
E_t = np.array(
[0]
+ [
scipy.integrate.simpson(Flow.j[0:n], int_result.τ[0:n])
for n in range(1, len(int_result.τ))
]
)
E_t[-1]
4.387773704387552
With this we can retrieve the energy of the interaction Hamiltonian.
E_I = - energy - E_t
%%space plot
#plt.plot(τ, j, label="$J$", linestyle='--')
plt.plot(int_result.τ, E_t, label=r"$\langle H_{\mathrm{B}}\rangle$")
plt.plot(int_result.τ, E_I, label=r"$\langle H_{\mathrm{I}}\rangle$")
plt.plot(int_result.τ, energy, label=r"$\langle H_{\mathrm{S}}\rangle$")
plt.xlabel("τ")
plt.legend()
plt.show()
<matplotlib.lines.Line2D | at | 0x7f70a47fbaf0> |
<matplotlib.lines.Line2D | at | 0x7f70a47fbee0> |
<matplotlib.lines.Line2D | at | 0x7f70a47862e0> |
Text(0.5, 0, 'τ') <matplotlib.legend.Legend at 0x7f70a47fbdf0>
System + Interaction Energy
def h_si_for_traj(ψ_0, ψ_1, temp_y):
a = np.array((params.L @ ψ_0.T).T)
b = np.array((params.H_s @ ψ_0.T).T)
ψ_1 = (g*params.bcf_scale)[None, :, None] * ψ_1.reshape(
params.t_steps, params.num_exp_t, params.dim
)
EtaTherm.new_process(temp_y)
E_i = np.array(
2
,* (
-1j
,* np.sum(
a.conj()[:, None, :]
,* ψ_1,
axis=(1, 2),
)
).real
).flatten()
E_i += np.array(
2
,* (
-1j * EtaTherm(int_result.τ)
,* np.sum(
a.conj()
,* ψ_0,
axis=1,
)
).real
).flatten()
E_s = np.array(np.sum(b.conj() * ψ_0, axis=1)).flatten().real
return (E_i + E_s) / np.sum(ψ_0.conj() * ψ_0, axis=1).real
e_si = np.zeros_like(int_result.τ)
for i in range(0, params.N):
e_si += h_si_for_traj(int_result.ψ_0[i], int_result.ψ_1[i], int_result.temp_y[i])
e_si /= params.N
Doesn't work out.
plt.plot(int_result.τ, e_si, label=r"direct")
plt.plot(int_result.τ, E_I + energy)
plt.legend()
<matplotlib.legend.Legend at 0x7f70a45fddc0>