master-thesis/python/graveyard/richard_hops/energy_flow_nonlinear.org

507 lines
18 KiB
Org Mode
Raw Normal View History

2021-10-22 18:01:50 +02:00
#+PROPERTY: header-args :session rich_hops_eflow_nl :kernel python :pandoc t :async yes
* Setup
** Jupyter
#+begin_src jupyter-python
%load_ext autoreload
%autoreload 2
%load_ext jupyter_spaces
#+end_src
#+RESULTS:
** Matplotlib
#+begin_src jupyter-python
import matplotlib
import matplotlib.pyplot as plt
#matplotlib.use("TkCairo", force=True)
%gui tk
%matplotlib inline
plt.style.use('ggplot')
#+end_src
#+RESULTS:
** Richard (old) HOPS
#+begin_src jupyter-python
import hierarchyLib
import hierarchyData
import numpy as np
from stocproc.stocproc import StocProc_FFT
import bcf
from dataclasses import dataclass
import scipy
import scipy.misc
import scipy.signal
#+end_src
#+RESULTS:
** Auxiliary Definitions
#+begin_src jupyter-python
σ1 = np.matrix([[0,1],[1,0]])
σ2 = np.matrix([[0,-1j],[1j,0]])
σ3 = np.matrix([[1,0],[0,-1]])
#+end_src
#+RESULTS:
* Model Setup
Basic parameters.
#+begin_src jupyter-python
γ = 3 # coupling ratio
ω_c = 2 # center of spect. dens
δ = 2 # breadth BCF
2021-11-02 18:37:48 +01:00
t_max = 4
2021-10-22 18:01:50 +02:00
t_steps = 4000
2021-11-02 18:37:48 +01:00
k_max = 3
2021-10-22 18:01:50 +02:00
seed = 100
2021-11-02 18:37:48 +01:00
g = np.sqrt(δ)
2021-10-22 18:01:50 +02:00
H_s = σ3 + np.eye(2)
2021-11-02 18:37:48 +01:00
L = 1 / 2 * (σ1 - 1j * σ2) * γ
2021-10-22 18:01:50 +02:00
ψ_0 = np.array([1, 0])
W = ω_c * 1j + δ # exponent BCF
2021-11-02 14:39:09 +01:00
N = 1000
2021-10-22 18:01:50 +02:00
#+end_src
#+RESULTS:
** BCF
#+begin_src jupyter-python
@dataclass
class CauchyBCF:
δ: float
ω_c: float
def I(self, ω):
return np.sqrt(self.δ) / (self.δ + (ω - self.ω_c) ** 2 / self.δ)
def __call__(self, τ):
return np.sqrt(self.δ) * np.exp(-1j * self.ω_c * τ - np.abs(τ) * self.δ)
def __bfkey__(self):
return self.δ, self.ω_c
α = CauchyBCF(δ, ω_c)
#+end_src
#+RESULTS:
*** Plot
#+begin_src jupyter-python
%%space plot
t = np.linspace(0, t_max, 1000)
ω = np.linspace(ω_c - 10, ω_c + 10, 1000)
fig, axs = plt.subplots(2)
axs[0].plot(t, np.real(α(t)))
axs[0].plot(t, np.imag(α(t)))
axs[1].plot(ω, α.I(ω))
#+end_src
#+RESULTS:
:RESULTS:
2021-11-05 10:20:58 +01:00
| <matplotlib.lines.Line2D | at | 0x7fad39fdcb20> |
| <matplotlib.lines.Line2D | at | 0x7fad39fdcdc0> |
| <matplotlib.lines.Line2D | at | 0x7fad39f78370> |
2021-11-02 18:37:48 +01:00
[[file:./.ob-jupyter/cc8a82c1bde6ea1912c1b977e822908ef92ed79a.png]]
2021-10-22 18:01:50 +02:00
:END:
** Hops setup
#+begin_src jupyter-python
HierachyParam = hierarchyData.HiP(
k_max=k_max,
# g_scale=None,
# sample_method='random',
seed=seed,
nonlinear=True,
normalized=False,
# terminator=False,
result_type=hierarchyData.RESULT_TYPE_ALL,
# accum_only=None,
# rand_skip=None
)
#+end_src
#+RESULTS:
Integration.
#+begin_src jupyter-python
IntegrationParam = hierarchyData.IntP(
t_max=t_max,
t_steps=t_steps,
# integrator_name='zvode',
# atol=1e-8,
# rtol=1e-8,
# order=5,
# nsteps=5000,
# method='bdf',
# t_steps_skip=1
)
#+end_src
#+RESULTS:
And now the system.
#+begin_src jupyter-python
SystemParam = hierarchyData.SysP(
H_sys=H_s,
L=L,
psi0=ψ_0, # excited qubit
2021-11-02 18:37:48 +01:00
g=np.array([g]),
2021-10-22 18:01:50 +02:00
w=np.array([W]),
H_dynamic=[],
bcf_scale=1, # 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=1,
)
#+end_src
#+RESULTS:
The quantum noise.
#+begin_src jupyter-python
Eta = StocProc_FFT(
α.I,
t_max,
α,
negative_frequencies=True,
seed=seed,
intgr_tol=1e-2,
intpl_tol=1e-2,
scale=1,
)
#+end_src
#+RESULTS:
#+begin_example
stocproc.stocproc - INFO - use neg freq
stocproc.method_ft - INFO - get_dt_for_accurate_interpolation, please wait ...
stocproc.method_ft - INFO - acc interp N 33 dt 1.44e-01 -> diff 7.57e-03
stocproc.method_ft - INFO - requires dt < 1.439e-01
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 [-1.47e+01,1.87e+01] diff 3.37e-01
stocproc.method_ft - INFO - J_w_min:1.00e-03 N 32 yields: interval [-5.11e+01,5.51e+01] diff 6.70e-01
stocproc.method_ft - INFO - J_w_min:1.00e-02 N 64 yields: interval [-1.47e+01,1.87e+01] diff 3.37e-01
stocproc.method_ft - INFO - J_w_min:1.00e-04 N 32 yields: interval [-1.66e+02,1.70e+02] diff 2.44e+00
stocproc.method_ft - INFO - J_w_min:1.00e-03 N 64 yields: interval [-5.11e+01,5.51e+01] diff 1.11e-01
stocproc.method_ft - INFO - J_w_min:1.00e-02 N 128 yields: interval [-1.47e+01,1.87e+01] diff 3.37e-01
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 [-5.30e+02,5.34e+02] diff 3.68e+00
stocproc.method_ft - INFO - J_w_min:1.00e-04 N 64 yields: interval [-1.66e+02,1.70e+02] diff 1.34e+00
stocproc.method_ft - INFO - J_w_min:1.00e-03 N 128 yields: interval [-5.11e+01,5.51e+01] diff 1.06e-01
stocproc.method_ft - INFO - J_w_min:1.00e-02 N 256 yields: interval [-1.47e+01,1.87e+01] diff 3.37e-01
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 [-1.68e+03,1.68e+03] diff 4.19e+00
stocproc.method_ft - INFO - J_w_min:1.00e-05 N 64 yields: interval [-5.30e+02,5.34e+02] diff 3.04e+00
stocproc.method_ft - INFO - J_w_min:1.00e-04 N 128 yields: interval [-1.66e+02,1.70e+02] diff 4.07e-01
stocproc.method_ft - INFO - J_w_min:1.00e-03 N 256 yields: interval [-5.11e+01,5.51e+01] diff 1.06e-01
stocproc.method_ft - INFO - J_w_min:1.00e-02 N 512 yields: interval [-1.47e+01,1.87e+01] diff 3.37e-01
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-07 N 32 yields: interval [-5.32e+03,5.32e+03] diff 4.36e+00
stocproc.method_ft - INFO - J_w_min:1.00e-06 N 64 yields: interval [-1.68e+03,1.68e+03] diff 3.94e+00
stocproc.method_ft - INFO - J_w_min:1.00e-05 N 128 yields: interval [-5.30e+02,5.34e+02] diff 2.09e+00
stocproc.method_ft - INFO - J_w_min:1.00e-04 N 256 yields: interval [-1.66e+02,1.70e+02] diff 3.72e-02
stocproc.method_ft - INFO - J_w_min:1.00e-03 N 512 yields: interval [-5.11e+01,5.51e+01] diff 1.06e-01
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-08 N 32 yields: interval [-1.68e+04,1.68e+04] diff 4.42e+00
stocproc.method_ft - INFO - J_w_min:1.00e-07 N 64 yields: interval [-5.32e+03,5.32e+03] diff 4.28e+00
stocproc.method_ft - INFO - J_w_min:1.00e-06 N 128 yields: interval [-1.68e+03,1.68e+03] diff 3.50e+00
stocproc.method_ft - INFO - J_w_min:1.00e-05 N 256 yields: interval [-5.30e+02,5.34e+02] diff 9.79e-01
stocproc.method_ft - INFO - J_w_min:1.00e-04 N 512 yields: interval [-1.66e+02,1.70e+02] diff 3.36e-02
stocproc.method_ft - INFO - J_w_min:1.00e-03 N 1024 yields: interval [-5.11e+01,5.51e+01] diff 1.06e-01
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-09 N 32 yields: interval [-5.32e+04,5.32e+04] diff 4.43e+00
stocproc.method_ft - INFO - J_w_min:1.00e-08 N 64 yields: interval [-1.68e+04,1.68e+04] diff 4.39e+00
stocproc.method_ft - INFO - J_w_min:1.00e-07 N 128 yields: interval [-5.32e+03,5.32e+03] diff 4.12e+00
stocproc.method_ft - INFO - J_w_min:1.00e-06 N 256 yields: interval [-1.68e+03,1.68e+03] diff 2.75e+00
stocproc.method_ft - INFO - J_w_min:1.00e-05 N 512 yields: interval [-5.30e+02,5.34e+02] diff 2.16e-01
stocproc.method_ft - INFO - J_w_min:1.00e-04 N 1024 yields: interval [-1.66e+02,1.70e+02] diff 3.36e-02
stocproc.method_ft - INFO - J_w_min:1.00e-03 N 2048 yields: interval [-5.11e+01,5.51e+01] diff 1.06e-01
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-10 N 32 yields: interval [-1.68e+05,1.68e+05] diff 4.44e+00
stocproc.method_ft - INFO - J_w_min:1.00e-09 N 64 yields: interval [-5.32e+04,5.32e+04] diff 4.43e+00
stocproc.method_ft - INFO - J_w_min:1.00e-08 N 128 yields: interval [-1.68e+04,1.68e+04] diff 4.34e+00
stocproc.method_ft - INFO - J_w_min:1.00e-07 N 256 yields: interval [-5.32e+03,5.32e+03] diff 3.82e+00
stocproc.method_ft - INFO - J_w_min:1.00e-06 N 512 yields: interval [-1.68e+03,1.68e+03] diff 1.71e+00
stocproc.method_ft - INFO - J_w_min:1.00e-05 N 1024 yields: interval [-5.30e+02,5.34e+02] diff 1.07e-02
stocproc.method_ft - INFO - J_w_min:1.00e-04 N 2048 yields: interval [-1.66e+02,1.70e+02] diff 3.36e-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-11 N 32 yields: interval [-5.32e+05,5.32e+05] diff 4.44e+00
stocproc.method_ft - INFO - J_w_min:1.00e-10 N 64 yields: interval [-1.68e+05,1.68e+05] diff 4.44e+00
stocproc.method_ft - INFO - J_w_min:1.00e-09 N 128 yields: interval [-5.32e+04,5.32e+04] diff 4.41e+00
stocproc.method_ft - INFO - J_w_min:1.00e-08 N 256 yields: interval [-1.68e+04,1.68e+04] diff 4.24e+00
stocproc.method_ft - INFO - J_w_min:1.00e-07 N 512 yields: interval [-5.32e+03,5.32e+03] diff 3.28e+00
stocproc.method_ft - INFO - J_w_min:1.00e-06 N 1024 yields: interval [-1.68e+03,1.68e+03] diff 6.56e-01
stocproc.method_ft - INFO - J_w_min:1.00e-05 N 2048 yields: interval [-5.30e+02,5.34e+02] diff 1.06e-02
stocproc.method_ft - INFO - J_w_min:1.00e-04 N 4096 yields: interval [-1.66e+02,1.70e+02] diff 3.36e-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-12 N 32 yields: interval [-1.68e+06,1.68e+06] diff 4.44e+00
stocproc.method_ft - INFO - J_w_min:1.00e-11 N 64 yields: interval [-5.32e+05,5.32e+05] diff 4.44e+00
stocproc.method_ft - INFO - J_w_min:1.00e-10 N 128 yields: interval [-1.68e+05,1.68e+05] diff 4.43e+00
stocproc.method_ft - INFO - J_w_min:1.00e-09 N 256 yields: interval [-5.32e+04,5.32e+04] diff 4.38e+00
stocproc.method_ft - INFO - J_w_min:1.00e-08 N 512 yields: interval [-1.68e+04,1.68e+04] diff 4.04e+00
stocproc.method_ft - INFO - J_w_min:1.00e-07 N 1024 yields: interval [-5.32e+03,5.32e+03] diff 2.43e+00
stocproc.method_ft - INFO - J_w_min:1.00e-06 N 2048 yields: interval [-1.68e+03,1.68e+03] diff 9.69e-02
stocproc.method_ft - INFO - J_w_min:1.00e-05 N 4096 yields: interval [-5.30e+02,5.34e+02] diff 1.06e-02
stocproc.method_ft - INFO - J_w_min:1.00e-04 N 8192 yields: interval [-1.66e+02,1.70e+02] diff 3.36e-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-13 N 32 yields: interval [-5.32e+06,5.32e+06] diff 4.44e+00
stocproc.method_ft - INFO - J_w_min:1.00e-12 N 64 yields: interval [-1.68e+06,1.68e+06] diff 4.44e+00
stocproc.method_ft - INFO - J_w_min:1.00e-11 N 128 yields: interval [-5.32e+05,5.32e+05] diff 4.44e+00
stocproc.method_ft - INFO - J_w_min:1.00e-10 N 256 yields: interval [-1.68e+05,1.68e+05] diff 4.42e+00
stocproc.method_ft - INFO - J_w_min:1.00e-09 N 512 yields: interval [-5.32e+04,5.32e+04] diff 4.31e+00
stocproc.method_ft - INFO - J_w_min:1.00e-08 N 1024 yields: interval [-1.68e+04,1.68e+04] diff 3.67e+00
stocproc.method_ft - INFO - J_w_min:1.00e-07 N 2048 yields: interval [-5.32e+03,5.32e+03] diff 1.33e+00
stocproc.method_ft - INFO - J_w_min:1.00e-06 N 4096 yields: interval [-1.68e+03,1.68e+03] diff 3.37e-03
stocproc.method_ft - INFO - return, cause tol of 0.01 was reached
stocproc.method_ft - INFO - requires dx < 8.212e-01
stocproc.stocproc - INFO - Fourier Integral Boundaries: [-1.680e+03, 1.684e+03]
2021-11-02 18:37:48 +01:00
stocproc.stocproc - INFO - Number of Nodes : 4096
stocproc.stocproc - INFO - yields dx : 8.212e-01
2021-10-22 18:01:50 +02:00
stocproc.stocproc - INFO - yields dt : 1.868e-03
2021-11-02 18:37:48 +01:00
stocproc.stocproc - INFO - yields t_max : 7.649e+00
2021-10-22 18:01:50 +02:00
#+end_example
* Actual Hops
Generate the key for binary caching.
#+begin_src jupyter-python
hi_key = hierarchyData.HIMetaKey_type(
HiP=HierachyParam,
IntP=IntegrationParam,
SysP=SystemParam,
Eta=Eta,
EtaTherm=None,
)
#+end_src
#+RESULTS:
Initialize Hierarchy.
#+begin_src jupyter-python
myHierarchy = hierarchyLib.HI(hi_key, number_of_samples=N, desc="run a test case")
#+end_src
#+RESULTS:
2021-11-02 18:37:48 +01:00
: init Hi class, use 8 equation
2021-10-22 18:01:50 +02:00
: /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.
#+begin_src jupyter-python
2021-11-02 14:39:09 +01:00
myHierarchy.integrate_simple(data_path="data", data_name="energy_flow_nl_2.data")
2021-10-22 18:01:50 +02:00
#+end_src
#+RESULTS:
2021-11-05 10:20:58 +01:00
: samples :0.0%
: integration :0.0%
: samples :49.0%
: integration :0.0%
: samples : 100%
: integration :0.0%
: 
2021-10-22 18:01:50 +02:00
2021-11-02 18:37:48 +01:00
2021-10-22 18:01:50 +02:00
Get the samples.
#+begin_src jupyter-python
# to access the data the 'hi_key' is used to find the data in the hdf5 file
2021-11-02 18:37:48 +01:00
with hierarchyData.HIMetaData(hid_name="energy_flow_nl_2.data", hid_path="data") as metaData:
2021-10-22 18:01:50 +02:00
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:2]
ψ_0 = np.array(data.stoc_traj)
y = np.array(data.y)
η = np.array(data.stoc_proc)
#+end_src
#+RESULTS:
2021-11-02 18:37:48 +01:00
: 1000 samples found in database
2021-10-22 18:01:50 +02:00
Calculate energy.
#+begin_src jupyter-python
%matplotlib inline
2021-11-05 10:20:58 +01:00
import qutip
2021-10-22 18:01:50 +02:00
energy = np.array([np.trace(ρ @ H_s).real for ρ in rho_τ])
plt.plot(τ, energy)
#+end_src
#+RESULTS:
:RESULTS:
2021-11-05 10:20:58 +01:00
| <matplotlib.lines.Line2D | at | 0x7fad39643880> |
2021-11-02 18:37:48 +01:00
[[file:./.ob-jupyter/6f9ff44b906cf57c7c84d88a0a157cc66b911965.png]]
2021-10-22 18:01:50 +02:00
:END:
#+begin_src jupyter-python
%%space plot
plt.plot(τ, np.trace(rho_τ.T).real)
#+end_src
#+RESULTS:
:RESULTS:
2021-11-05 10:20:58 +01:00
| <matplotlib.lines.Line2D | at | 0x7fad3984bb20> |
2021-11-02 18:37:48 +01:00
[[file:./.ob-jupyter/f3f9c51e9054713cfd1c1c767658d98df3b5a747.png]]
2021-10-22 18:01:50 +02:00
:END:
* Energy Flow
:PROPERTIES:
:ID: eefb1594-e399-4d24-9dd7-a57addd42e65
:END:
#+begin_src jupyter-python
ψ_1.shape
#+end_src
#+RESULTS:
2021-11-02 18:37:48 +01:00
| 1280 | 4000 | 2 |
2021-10-22 18:01:50 +02:00
Let's look at the norm.
#+begin_src jupyter-python
plt.plot(τ, (ψ_0[0].conj() * ψ_0[0]).sum(axis=1).real)
#+end_src
#+RESULTS:
:RESULTS:
2021-11-05 10:20:58 +01:00
| <matplotlib.lines.Line2D | at | 0x7fad3930a970> |
2021-11-02 18:37:48 +01:00
[[file:./.ob-jupyter/410aaf67c52a948f72fac9345da5fb6cedf4889d.png]]
2021-10-22 18:01:50 +02:00
:END:
And try to calculate the energy flow.
#+begin_src jupyter-python
def flow_for_traj(ψ_0, ψ_1):
a = np.array((L @ ψ_0.T).T)
#return np.array(np.sum(ψ_0.conj() * ψ_0, axis=1)).flatten().real
2021-11-02 18:37:48 +01:00
return np.array(np.sqrt(δ) * 2 * (1j * -W * np.sum(a.conj() * ψ_1, axis=1)/np.sum(ψ_0.conj() * ψ_0, axis=1)).real).flatten()
2021-10-22 18:01:50 +02:00
def flow_for_traj_alt(ψ_0, y):
Eta.new_process(y)
eta_dot = scipy.misc.derivative(Eta, τ, dx=1e-8)
a = np.array((L @ ψ_0.T).T)
return -(
2j * eta_dot.conj() * np.array((np.sum(ψ_0.conj() * a, axis=1))).flatten()
).real
#+end_src
#+RESULTS:
Now we calculate the average over all trajectories.
#+begin_src jupyter-python
j = np.zeros_like(τ)
for i in range(0, N):
j += flow_for_traj(ψ_0[i], ψ_1[i])
j /= N
#+end_src
#+RESULTS:
And do the same with the alternative implementation.
#+begin_src jupyter-python
ja = np.zeros_like(τ)
for i in range(0, N):
ja += flow_for_traj_alt(ψ_0[i], y[i])
ja /= N
#+end_src
#+RESULTS:
And plot it :)
#+begin_src jupyter-python
%matplotlib inline
plt.plot(τ, j)
#plt.plot(τ, ja)
plt.show()
#+end_src
#+RESULTS:
2021-11-02 18:37:48 +01:00
[[file:./.ob-jupyter/9c069301b804633b13ade3d61ac2757938ac6dcf.png]]
2021-10-22 18:01:50 +02:00
Let's calculate the integrated energy.
#+begin_src jupyter-python
E_t = np.array([0] + [scipy.integrate.simpson(j[0:n], τ[0:n]) for n in range(1, len(τ))])
E_t[-1]
#+end_src
#+RESULTS:
2021-11-02 18:37:48 +01:00
: 1.992784078082371
2021-10-22 18:01:50 +02:00
With this we can retrieve the energy of the interaction Hamiltonian.
#+begin_src jupyter-python
E_I = 2 - energy - E_t
#+end_src
#+RESULTS:
#+begin_src jupyter-python
%%space plot
plt.rcParams['figure.figsize'] = [15, 10]
#plt.plot(τ, j, label="$J$", linestyle='--')
plt.plot(τ, E_t, label=r"$\langle H_{\mathrm{B}}\rangle$")
plt.plot(τ, E_I, label=r"$\langle H_{\mathrm{I}}\rangle$")
plt.plot(τ, energy, label=r"$\langle H_{\mathrm{S}}\rangle$")
plt.xlabel("τ")
plt.legend()
plt.show()
#+end_src
#+RESULTS:
:RESULTS:
2021-11-02 18:37:48 +01:00
| <matplotlib.lines.Line2D | at | 0x7ffa22a791c0> |
| <matplotlib.lines.Line2D | at | 0x7ffa22a795e0> |
| <matplotlib.lines.Line2D | at | 0x7ffa22a79970> |
2021-10-22 18:01:50 +02:00
: Text(0.5, 0, 'τ')
2021-11-02 18:37:48 +01:00
: <matplotlib.legend.Legend at 0x7ffa22a793a0>
[[file:./.ob-jupyter/82a58cfbc077e4a57611ba17d345c984cd3deca7.png]]
2021-10-22 18:01:50 +02:00
:END:
#+RESULTS:
* System + Interaction Energy
#+begin_src jupyter-python
def h_si_for_traj(ψ_0, ψ_1):
a = np.array((L @ ψ_0.T).T)
b = np.array((H_s @ ψ_0.T).T)
E_i = np.array(2 * (-1j * np.sum(a.conj() * ψ_1, 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
def h_si_for_traj_alt(ψ_0, y):
Eta.new_process(y)
a = np.array((L.conj().T @ ψ_0.T).T)
b = np.array((H_s @ ψ_0.T).T)
E_i = np.array(2 * (Eta(τ) * 1j * 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
#+end_src
#+RESULTS:
#+begin_src jupyter-python
e_si = np.zeros_like(τ)
for i in range(0, N):
e_si += h_si_for_traj(ψ_0[i], ψ_1[i])
e_si /= N
#+end_src
#+RESULTS:
Not too bad...
#+begin_src jupyter-python
plt.plot(τ, e_si)
plt.plot(τ, E_I + energy)
#+end_src
#+RESULTS:
:RESULTS:
2021-11-02 18:37:48 +01:00
| <matplotlib.lines.Line2D | at | 0x7ffa22ca8a00> |
[[file:./.ob-jupyter/377ab054182f30bb1937d7b37a215d9b6584c278.png]]
2021-10-22 18:01:50 +02:00
:END: