AC simulation of asymmetric single carrier devices

This shows cal­cu­la­tion of sim­u­lat­ed ca­pac­i­tance-volt­age (C-V) curves us­ing AC anal­y­sis func­tion­al­i­ty.

It re­pro­duces pre­vi­ous­ly pub­lished ref­er­ence, on the de­ter­mi­na­tion of in­jec­tion bar­ri­ers from C-V mea­sure­ments.

Simulation setup

%matplotlib inline
import matplotlib.pylab as plt
import oedes
import numpy as np
import scipy.constants # for epsilon_0
oedes.init_notebook()

Common parameters:

Com­mon phys­i­cal pa­ram­e­ters are stored in params. Ad­di­tion­al­ly, de­vice thick­ness L, fre­quen­cy freq, and list of volt­age points in voltages must be de­fined.

params = {
    'T': 300., # K
    'electrode0.voltage': 0., # V
    'electrode0.workfunction': 0., # eV
    'electrode1.voltage': 0., # V
    'electrode1.workfunction': 0., # eV
    'hole.N0': 1e27, # 1/m3
    'hole.energy': 0., # eV
    'hole.mu': 1e-9, # m2/(Vs)
    'epsilon_r': 3. # 1
}
L = 100e-9 # sample thickness, m
Cgeom = params['epsilon_r'] * scipy.constants.epsilon_0 / L # F/m2
voltages = np.linspace(-1, 2, 200) # V
freq = 1e3 # Hz

Device model

Stan­dard sin­gle lay­er, hole-on­ly de­vice mod­el is used in this ex­am­ple:

device_model = oedes.models.holeonly(L)

Convenience function C-V simulation

AC anal­y­sis re­turns AC cur­rent :math:` tilde{J} ` cal­cu­lat­ed for unit AC ex­ci­ta­tion :math:` tilde{V} . Ca­pac­i­tance is ex­tract­ed as­sum­ing that en­tire imag­i­nary part of cur­rent is ca­pac­i­tive, :math: Im tilde{J} = omega C `.

System Message: WARNING/2 (<string>, line 63); backlink

In­line in­ter­pret­ed text or phrase ref­er­ence start-string with­out end-string.
@oedes.testing.stored(atol=1e-8)
def cvscan(model,params,voltages,freq,electrode='electrode0.voltage',output='J'):
    c = oedes.context(model)
    omega = 2 * np.pi * freq
    def ac(voltage_point):
        # This is called for each steady-state solution voltage_point
        acx, acj = voltage_point.acsolver(electrode, output).solve(omega)
        return voltage_point.params[electrode], np.imag(acj) / omega, np.real(acj), np.imag(acj)
    return np.asarray([ac(p) for v,p in c.sweep(params, oedes.sweep(electrode, voltages))])

C-V simulation of asymmetric device, in function of temperature T

for T in [300., 150., 75.]:
    params['electrode0.workfunction'] = 0.
    params['electrode1.workfunction'] = -0.5
    params['T'] = T
    cv = np.asarray(list(cvscan(device_model, params, voltages, freq)))
    plt.plot(cv[:, 0], cv[:, 1] / Cgeom, label='$T$=%.0f K' % T)
plt.legend(loc=0)
plt.xlabel('V')
plt.ylabel('$C/C_{geom}$');

Calculation for parameters optimized for experimental data in the reference

params['T'] = 295
params['epsilon_r'] = 3.2
params['electrode0.workfunction'] = -0.015
params['electrode1.workfunction'] = -1.635
params['hole.mu'] = 1e-10
params['hole.N0'] = 1.8e26
Cgeom = params['epsilon_r'] * scipy.constants.epsilon_0 / L
for freq in [250, 500, 1e3, 2.5e3, 5e3, 1e4]:
    cv = np.asarray(list(cvscan(device_model, params, voltages, freq)))
    plt.plot(cv[:, 0], cv[:, 1] / Cgeom, label='$f$=%.0f Hz' % freq)
plt.legend(loc=0)
plt.xlabel('V')
plt.ylabel('$C/C_{geom}$');

Reference:

S. L. M. van Mensfoort, R. Co­ehoorn, De­ter­mi­na­tion of In­jec­tion Bar­ri­ers in Or­gan­ic Semi­con­duc­tor De­vices from Ca­pac­i­tance Mea­sure­ments, Phys. Rev. Lett. 100, 086802 (2008)