In order to determine reproducible $\tau$-distributions we have to check that the single Debye-term always has the same (logspaced) curve width in the imaginary part. This allows us to determine a tau-range in which a given frequency can be significantly influenced by polarization effects.
In [40]:
from NDimInv.plot_helper import *
import dd_res
dd_res = dd_res.dd_resistivity()
m_level = 0.01
rho0 = 100
m = np.array((np.log10(m_level),))
s = np.log10(tau)
f = np.logspace(-3, 6, 200)
pars = np.hstack((np.log10(200), m))
omega = f * 2 * np.pi
fig = plt.figure(figsize=(20,6))
ax = fig.add_subplot(111)
for tau_value in (100, 1e0, 1e-2, 1e-4, 1e-6):
tau = np.array((tau_value,))
re,im = dd_res.forward_re_mim(omega, pars, np.log10(tau))
ax.semilogx(f, im)
# Determine 1/e-fraction hight
im_norm = im / np.max(np.abs(im))
threshold = 1 / np.e
height_index = np.argmin(np.abs(im_norm - threshold))
height = im[height_index]
ax.axhline(y=height)
# building on this, find the two nearest values
sort_indices = np.where(im >= height)
pos_im = im[sort_indices]
pos_f = f[sort_indices]
min_indices = np.argsort(pos_im)
ax.axvline(x=pos_f[min_indices[0]])
ax.axvline(x=pos_f[min_indices[1]])
debye_width = np.abs(np.log10(pos_f[min_indices[0]]) - np.log10(pos_f[min_indices[1]]))
print('Debye Width', debye_width)
ax.set_title('Width of single-term Debye model, $\rho_0$: {0}, m\_level: {1}, '.format(rho0, m_level))
ax.set_xlabel('Frequency~(Hz)')
ax.set_ylabel(r'$Im(\rho)~(S/m)$')
Out[40]:
In [ ]: