Skip to content
Snippets Groups Projects
Commit 1ce9e11b authored by Valentin Bruch's avatar Valentin Bruch
Browse files

experiments: comparison to Fig. 3a in Bruhat et al. 2018

parent 2fca6114
No related branches found
No related tags found
No related merge requests found
......@@ -112,6 +112,9 @@ def bruhat18_fig2ab(dm, omega, dc_res=100, ac_res=100, vdc_min=0, vac_min=0, vdc
vac_max = min(vac_max, results.vac.max())
vdc_max = min(vdc_max, results.vdc.max())
tk_mueV = 28.2 # Kondo temperature in μeV, defined by G(V=Tk)=e²/h
tkrg_mueV = tk_mueV / TK_VOLTAGE # Kondo temperature in μeV defined as integration constant in RTRG
# Interpolate
#gdc_J_tck = bisplrep(results.vac[j], results.vdc[j], results.dc_conductance[j], s=2e-6, kx=3, ky=3)
#idc_J_tck = bisplrep(results.vac[j], results.vdc[j], results.dc_current[j], s=2e-6, kx=3, ky=3)
......@@ -137,18 +140,18 @@ def bruhat18_fig2ab(dm, omega, dc_res=100, ac_res=100, vdc_min=0, vac_min=0, vdc
# Create figure
fig, ax1 = plt.subplots(1, 1, sharex=True, sharey=True)
ax1.set_ylabel("Vac")
ax1.set_xlabel("Vdc")
ax1.set_ylabel("Vac (μV)")
ax1.set_xlabel("Vdc (μV)")
# DC conductance
gnorm = plt.Normalize(np.pi*results.dc_conductance.min(), np.pi*results.dc_conductance.max())
cmap = plt.cm.Oranges
ax1.set_title('DC conductance')
#ax1.scatter(results.vdc[j], results.vac[j], c=np.pi*results.dc_conductance[j], marker='x', norm=gnorm, cmap=plt.cm.viridis)
#ax1.scatter(results.vdc[mu], results.vac[mu], c=np.pi*results.dc_conductance[mu], marker='+', norm=gnorm, cmap=plt.cm.viridis)
img = ax1.imshow(np.pi*gdc_g_mu_interp, extent=(0, vdc_max, 0, vac_max), aspect='auto', cmap=cmap, norm=gnorm, origin='lower')
ax1.imshow(np.pi*gdc_g_mu_interp, extent=(0, -vdc_max, 0, vac_max), aspect='auto', cmap=cmap, norm=gnorm, origin='lower')
ax1.set_xlim(-vdc_max, vdc_max)
#ax1.scatter(tkrg_mueV*results.vdc[j], tkrg_mueV*results.vac[j], c=np.pi*results.dc_conductance[j], marker='x', norm=gnorm, cmap=plt.cm.viridis)
#ax1.scatter(tkrg_mueV*results.vdc[mu], tkrg_mueV*results.vac[mu], c=np.pi*results.dc_conductance[mu], marker='+', norm=gnorm, cmap=plt.cm.viridis)
img = ax1.imshow(np.pi*gdc_g_mu_interp, extent=(0, vdc_max*tkrg_mueV, 0, vac_max*tkrg_mueV), aspect='auto', cmap=cmap, norm=gnorm, origin='lower')
ax1.imshow(np.pi*gdc_g_mu_interp, extent=(0, -vdc_max*tkrg_mueV, 0, vac_max*tkrg_mueV), aspect='auto', cmap=cmap, norm=gnorm, origin='lower')
ax1.set_xlim(-tkrg_mueV*vdc_max, tkrg_mueV*vdc_max)
fig.colorbar(img, ax=ax1)
def bruhat18_fig2c(dm, **kwargs):
......@@ -264,6 +267,33 @@ def kogan04_calibrate(dm, **kwargs):
return fig, ax
def bruhat18_fig3a(dm, omega_res=100, vac_res=100, **kwargs):
for name in ("omega", "vdc", "vac"):
kwargs.pop(name, None)
results = dm.list(vdc=0, **kwargs)
results = results.loc[(results.vac < 15) & np.isfinite(results.dc_conductance)]
omega_arr = np.linspace(0.8, 10, omega_res) # units of Tkrg
vac_arr = np.linspace(0.1, 12, vac_res) # units of Tkrg
#tk_mueV = 28.2 # Kondo temperature in μeV, defined by G(V=Tk)=e²/h
#tkrg_mueV = tk_mueV / TK_VOLTAGE # Kondo temperature in μeV defined as integration constant in RTRG
fig, ax = plt.subplots()
ax.set_xlabel("Ω (Tk)")
ax.set_ylabel("Vac (Tk)")
gdc_tck = bisplrep(results.omega, results.vac, results.dc_conductance, s=1e-4, kx=3, ky=3)
gdc_interp = bisplev(omega_arr, vac_arr, gdc_tck).T
img = ax.imshow(
np.pi*gdc_interp,
extent = ((0.8-4.6/omega_res)/TK_VOLTAGE, (10+4.6/omega_res)/TK_VOLTAGE, (0.1-5.95/vac_res)/TK_VOLTAGE, (12+5.95/vac_res)/TK_VOLTAGE),
aspect = 'auto',
cmap = plt.cm.jet,
origin='lower')
ax.scatter(results.omega/TK_VOLTAGE, results.vac/TK_VOLTAGE, c=np.pi*results.dc_conductance, cmap=img.cmap, norm=img.norm)
fig.colorbar(img, ax=ax)
return fig, ax
def plot_calibration_lines(
dm,
......
......@@ -301,7 +301,7 @@ python -m frtrg_kondo.gen_data \\
dm = DataManager()
for kondo_options in gen_option_iter(**options):
vdc = kondo_options['vdc'] + kondo_options['omega']*kondo_options['resonant_dc_shift']
settings.logger.info(f"Vdc={vdc}, Vac={kondo_options['vac']}, Ω={kondo_options['omega']}")
settings.logger.info(f"Starting with Vdc={vdc}, Vac={kondo_options['vac']}, Ω={kondo_options['omega']}")
kondo = Kondo(**kondo_options)
kondo.run(**solver_options)
settings.logger.info(f"Saving Vdc={vdc}, Vac={kondo_options['vac']}, Ω={kondo_options['omega']} to {filename}")
......
......@@ -368,13 +368,13 @@ class Kondo:
Handle with care!
valid values: padding + clear_corners <= 2*nmax + 1
compact : Use extra symmetry to improve efficiency for large matrices.
compact != 0 requires the symmetry V(t+(π/Ω)) = - V(t).
valid values are:
compact != 0 requires unitary_transformation==True and the
symmetry V(t+(π/Ω)) = - V(t). Valid values are:
0: don't use compact form.
1: compact form that ignores matrix elements which are zero
by symmetry
2: compact form which additionally uses symmetry of the
nonzero matrix elements
nonzero matrix elements. requires xL = 0.5.
'''
self.global_properties = GlobalRGproperties(
nmax = nmax,
......@@ -410,7 +410,6 @@ class Kondo:
assert self.vdc == omega*resonant_dc_shift
assert fourier_coef is None or np.allclose(fourier_coef[1::2], 0)
assert self.resonant_dc_shift == 0 # extending the implementation to allow for even resonant_dc_shift requires some checks, odd resonant_dc_shift require some rewriting.
assert self.padding % 2 == 0
assert d.imag == 0.
self.d = d
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment