Transient space-charge-limited current with trapping

This ex­am­ple shows how to run tran­sient sim­u­la­tion of space-charge-lim­it­ed diode. It con­sid­ers a case of in­ves­ti­gat­ed in a clas­si­cal pa­per.

In the ref­er­ence, an ide­al­ized case of time-de­pen­dent space-charge-lim­it­ed cur­rent is con­sid­ered. The dif­fu­sion is ne­glect­ed, and the re­lease of trapped charge car­ri­ers is not tak­en in­to ac­count. The sam­ple is as­sumed to be in­su­lat­ing and free of mo­bile or trapped charges at time ze­ro. The con­tacts are as­sumed to be ohmic, and the con­duc­tion is unipo­lar.

It is shown that un­der these as­sump­tions, tran­sient cur­rent will have a dis­tinct peak at a time pro­por­tion­al to tran­sit time t_{peak} \approx 0.786 \frac{L^2}{\mu V} , with L be­ing the sam­ple thick­ness, \mu the charge car­ri­er mo­bil­i­ty, and V the ap­plied volt­age. Re­mark­ably, the po­si­tion of peak is shown to be al­most not af­fect­ed by the trap­ping process. This mo­ti­vates the use of tran­sient SCL ex­per­i­ment as a re­li­able con­tact test, and as a method to mea­sure mo­bil­i­ty.

oedes can­not re­pro­duce Fig. 5 from the ref­er­ence ex­act­ly, be­cause it al­ways in­cludes dif­fu­sion for nu­mer­i­cal rea­sons. In this ex­am­ple, the in­flu­ence of dif­fu­sion is re­duced by set­ting tem­per­a­ture to a low val­ue (1 K), and by us­ing rel­a­tive­ly high volt­age and de­vice thick­ness. At­tempts to fur­ther re­duce the dif­fu­sion will even­tu­al­ly lead to nu­mer­i­cal prob­lems.

The trap­ping mod­el mod­el must in­clude de­trap­ping, there­fore very deep trap lev­el (-1 eV) with very high con­cen­tra­tion are used to sim­u­late “trap on­ly” trap­ping lev­el. Trap­ping rate is set cor­re­spond­ing to the trap­ping time.

The fea­tures of tran­sient sig­nal can be made more sim­i­lar to the pa­per by us­ing more pre­cise in­te­gra­tion in time. This re­duces the amount of nu­mer­i­cal dis­si­pa­tion.

%matplotlib inline
import matplotlib.pylab as plt
from oedes import *
init_notebook()

Model and parameters

L = 1e-6
voltage = 1e3
mu = 1e-15
epsilon_r = 1.
params = {
    'T': 1,
    'electrode0.workfunction': 0,
    'electrode1.workfunction': 0,
    'hole.energy': 0,
    'hole.mu': mu,
    'hole.N0': 1e27,
    'electrode0.voltage': voltage,
    'electrode1.voltage': 0,
    'epsilon_r': epsilon_r,
    'hole.trap.energy': 1.,
    'hole.trap.trate': 0.,
    'hole.trap.N0': 1e30
}

Stock unipo­lar mod­el is used:

model = models.std.holeonly(L, traps=['trap'])

Normalization

We use the nor­mal­iza­tion of ax­es in­tro­duced in the ref­er­ence:

t0 = functions.physics.ManyRakavy(
    mu, voltage, L) / functions.physics.ManyRakavy_t1
j0 = functions.physics.MottGurney(epsilon_r, mu, voltage, L)

Accuracy

De­creas­ing tol­er­ance be­low im­proves the shape of re­spons­es, at the ex­pense of in­creased num­ber of timesteps.

reltol = 1e-5  # decrease to increase quality and runtime

Result

for tau in progressbar([1e100, 5, 2, 1., 0.5, 0.25],desc='tau'):
    params['hole.trap.trate'] = 1. / (tau * params['hole.trap.N0'])
    c = context(model)
    c.transient(params, 5, 1e-1, reltol=reltol)
    t, j = c.teval('time', 'J')
    plt.plot(t / t0, j / j0, label=tau)
    testing.store(j, rtol=1e-5)
plt.ylim([0, 1.5])
plt.xlim([0, 5])
plt.xlabel(r'Normalized time [$\frac{L^2}{\mu V}$]')
plt.ylabel(
    r'Normalized current [$\frac{9}{8}\varepsilon \mu \frac{V^2}{L^3}$]')
plt.show()

Reference

A. Many and G. Rakavy The­o­ry of Tran­sient Space-Charge-Lim­it­ed Cur­rents in Solids in the Pres­ence of Trap­ping, Phys. Rev. 126, 1980 (1962)