Devices with Gaussian Disorder: contact barrier and image-force barrier lowering

This ex­am­ple re­pro­duces steady-state drift-dif­fu­sion sim­u­la­tions of unipo­lar or­gan­ic diodes from the ref­er­ence.

%matplotlib inline

import matplotlib.pylab as plt
import io
import numpy as np
from oedes import *
init_notebook()

Model and parameters

Uni­vari­ate in­ter­po­la­tion of Gauss-Fer­mi in­te­gral is used to speed up the cal­cu­la­tion. This is pos­si­ble, be­cause \sigma/{k T} is not al­lowed to vary con­tin­u­ous­ly in this ex­am­ple.

def egdmholeonly(L, image_force=True, z=1):
    m = models.BaseModel()
    mesh = fvm.mesh1d(L)
    poisson = Poisson(mesh)
    poisson.bc = [models.AppliedVoltage(boundary) for boundary in mesh.boundaries]
    thermal=models.ConstTemperature()
    impl = functions.gdos.UnivariateInterpolatedGaussFermiFactory(
        functions.gdos.defaultImpl)
    dos = models.egdm.GaussianDOS(impl=impl)
    charge = models.BandTransport(poisson=poisson,name='charge',z=z,dos=dos,mobility_model=models.egdm.EGDMMobility(),thermal=thermal)
    charge.bc = [models.FermiLevelEqualElectrode(
        b, image_force=image_force) for b in mesh.boundaries]
    m=models.CompositeModel([poisson,thermal,charge,models.RamoShockleyCurrentCalculation([poisson])])
    m.setUp()
    return m
egdmholeonly(100e-9)
default_params = {
    'T': 298.,
    'epsilon_r': 3.,
    'charge.N0': 1.6e-9**-3.,
    'charge.energy': 0.,
    'electrode0.workfunction': 0,
    'electrode1.workfunction': 0,
    'electrode0.voltage': 0,
    'electrode1.voltage': 0.
}

Sim­u­la­tion and plot­ting func­tions for this ex­am­ple:

def figiv(sigmaeV, mu0, maxv, L, n=41, sign=1, z=1):
    params = default_params.copy()
    nsigma = sigmaeV / functions.ThermalVoltage(params['T'])
    models.egdm.egdm_params_simple(params,'charge', nsigma, 1.6e-9, mu0)
    m = egdmholeonly(L, image_force=True, z=z)
    bar_sweep = sweep('charge.energy', -np.linspace(0., 1., 4))
    v_sweep = sweep('electrode0.voltage',sign*np.logspace(np.log10(maxv) -2,np.log10(maxv),n))
    c=context(m)
    for bar,cbar in c.sweep(params, bar_sweep):
        for _ in cbar.sweep(cbar.params, v_sweep):
            pass
        v, j = cbar.teval(v_sweep.parameter_name, 'J')
        testing.store(j, rtol=1e-4)
        plt.plot(v, sign * j, label='$\Delta$ = %.2f eV' % bar)
    plt.yscale('log')
    plt.xscale('log')
    plt.xlabel('V')
    plt.ylabel(r'$\mathrm{A/m^2}$')
    plt.title(r'L=%s nm, $\sigma$=%s eV' % (L * 1e9, sigmaeV))
    plt.legend(loc=0)
    plt.show()
def figib(sigmaeV=None, mu0=None, L=22e-9, n=76, sign=1, z=1):
    params = default_params.copy()
    nsigma = sigmaeV / functions.ThermalVoltage(params['T'])
    models.egdm.egdm_params_simple(params,'charge', nsigma, 1.6e-9, mu0)
    params['electrode0.voltage'] = sign * 2.
    for image,label in progressbar([(True, 'with image force correction'), (False, 'without image force correction')],'image'):
        m = egdmholeonly(L, image_force=image, z=z)
        c = context(m)
        for _ in c.sweep(params,sweep('charge.energy', -np.linspace(0., 1.5, n))):
            pass
        bar, j = c.teval('charge.energy', 'J')
        testing.store(j, rtol=1e-4)
        plt.plot(bar, sign * j, label=label)
    plt.yscale('log')
    plt.xlabel(r'$\mathrm{\Delta}$')
    plt.ylabel(r'$\mathrm{A/m^2}$')
    plt.title(r'L=%s nm, $\sigma$=%s eV' % (L * 1e9, sigmaeV))
    plt.legend(loc=0)
    plt.show()

Results

Reference

J. J. M. van der Holst, M. A. Ui­jt­te­waal, B. Ra­machandhran, R. Co­ehoorn, P. A. Bob­bert, Mod­el­ing and anal­y­sis of the three-di­men­sion­al cur­rent den­si­ty in sand­wich-type sin­gle-car­ri­er de­vices of dis­or­dered or­gan­ic se­mi­con­duc­tors, Phys. Rev. B 79, 085203 (2009).