Ph156-11:

2.9

Python

Here is the source code in python that produced this image.

Inlined image: P2p9.png

One thing that is interesting for this problem is that when scaled by an appropriate number, the two curves are seen to lay on top of each other! Would you have expected it? Why?

#!/usr/bin/env python

from pylab import *

T = 300 # K 
kB = 0.02585 / 300 # eV/K
EG = 1.170 - 4.730e-4 * T ** 2 / (T + 636) # pages 69,70
mnr = 1.028 + 6.11e-4 * T - 3.09e-7 * T ** 2 # mnstar / m_e -- page 55
mpr = 0.610 + 7.83e-4 * T - 4.46e-7 * T ** 2 # mpstar / m_e -- page 55

# What do we need to plot?
#   e distribution function, edf = gc(E)*f(E)      -- for E >= Ec
#   h distribution function, hdf = gv(E)*(1-f(E))  -- for E <= Ev
# Define gcp(x) = gc(x+Ec).
# Then,
#   gc(E)*f(E) = gcp(x)*f(x+Ec)
#   where x = E - Ec >= 0 is the electron excitation energy.
# Likewise, define gvp(x) = gv(Ev-x)
#   gv(E)*(1-f(E)) = gvp(x)*(1-f(Ev-x))
#   where x = Ev - E >= 0 is the hole excitation energy.

# x is in unit of eV -- it is positive and used both for e and h.
# We are taking it to go to 7 kB T.
x = linspace (0, 5, 100) * kB * T

# Check that they are reasonable.
print 'mnr =', mnr
print 'mpr =', mpr

# These are from Eqs. T2.6a,b with x = E-Ec or Ev-E.
# If x is in unit of eV, then gcp, gvp are in unit of
#     eV ** 0.5  * eV ** 1.5 / eV ** 3 / Angstrom ** 3
#   = 1 / eV / Angstrom ** 3
gcp = sqrt(2. * x) * (mnr * 0.511e6) ** 1.5 / pi ** 2 / 1973 ** 3
gvp = sqrt(2. * x) * (mpr * 0.511e6) ** 1.5 / pi ** 2 / 1973 ** 3

# As given in the problem.
Ev = 0.
Ec = EG
EF = 0.75 * EG

# Multiply by f(x+Ec) and 1-f(Ev-x) respectively, as shown above.
edf = gcp / (exp ((x + Ec - EF) / kB / T) + 1)
hdf = gvp / (exp ((x - Ev + EF) / kB / T) + 1)

# Finally, convert the unit to 1 / eV / cm ** 3
edf *= 1.e24
hdf *= 1.e24

# Check the orders of magnitude.
print 'max (edf) / max (hdf) = %g' % (max (edf) / max (hdf))

# However, the hole counts are very low -- blow them up.
# Based on what we learnd just now.
hdf *= 5.e9

# All hard compuations now done -- plot them!
plot (x / kB / T, edf, label = 'Electron')
plot (x / kB / T, hdf, label = r'Hole ($\times$  $5\times10^9$)')
grid ()

# matplotlib comes with its own LaTeX parser -- cool!
xlabel ('Carrier Excitation Energy (in unit of kT)')
ylabel (r'Carrier Distribution (1/(eV cm$^3$))')
title ('Carrier Distribution Functions at T = 300 K')
legend ()

# Sort of equivalent to "print" of matlab.  "print" is a python keyword.
# Comment out one of these lines to get a print-out in batch mode.
#savefig ('E2p3.svg')
#savefig ('E2p3.eps')
savefig ('P2p9.png')

Matlab

Here is a matlab version of the same code.

Matlab-produced image and Octave-produced image:

Inlined image: P2p9_m.png Inlined image: P2p9_o.jpg

% Clean slate
close
clear

T = 300 % K 
kB = 0.02585 / 300 % eV/K
EG = 1.170 - 4.730e-4 * T ^ 2 / (T + 636) % pages 69,70
mnr = 1.028 + 6.11e-4 * T - 3.09e-7 * T ^ 2 % mnstar / m_e -- page 55
mpr = 0.610 + 7.83e-4 * T - 4.46e-7 * T ^ 2 % mpstar / m_e -- page 55

% What do we need to plot?
%   e distribution function, edf = gc(E)*f(E)      -- for E >= Ec
%   h distribution function, hdf = gv(E)*(1-f(E))  -- for E <= Ev
% Define gcp(x) = gc(x+Ec).
% Then,
%   gc(E)*f(E) = gcp(x)*f(x+Ec)
%   where x = E - Ec >= 0 is the electron excitation energy.
% Likewise, define gvp(x) = gv(Ev-x)
%   gv(E)*(1-f(E)) = gvp(x)*(1-f(Ev-x))
%   where x = Ev - E >= 0 is the hole excitation energy.

% x is in unit of eV -- it is positive and used both for e and h.
% We are taking it to go to 7 kB T.
x = linspace (0, 5, 100) * kB * T

% Check that they are reasonable.
mnr
mpr

% These are from Eqs. T2.6a,b with x = E-Ec or Ev-E.
% If x is in unit of eV, then gcp, gvp are in unit of
%     eV ** 0.5  * eV ** 1.5 / eV ** 3 / Angstrom ** 3
%   = 1 / eV / Angstrom ** 3
gcp = sqrt(2. * x) * (mnr * 0.511e6) ^ 1.5 / pi ^ 2 / 1973 ^ 3
gvp = sqrt(2. * x) * (mpr * 0.511e6) ^ 1.5 / pi ^ 2 / 1973 ^ 3

% As given in the problem.
Ev = 0.
Ec = EG
EF = 0.75 * EG

% Multiply by f(x+Ec) and 1-f(Ev-x) respectively, as shown above.
edf = gcp ./ (exp ((x + Ec - EF) / kB / T) + 1)
hdf = gvp ./ (exp ((x - Ev + EF) / kB / T) + 1)

% Finally, convert the unit to 1 / eV / cm ** 3
edf = edf * 1.e24
hdf = hdf * 1.e24

% Check the orders of magnitude.
max (edf) / max (hdf)

% However, the hole counts are very low -- blow them up.
% Based on what we learnd just now.
hdf = hdf * 5.e9

% All hard compuations now done -- plot them!
f (1, :) = edf
f (2, :) = hdf
plot (x / kB / T, f)
grid ()

xlabel ('Carrier Excitation Energy (in unit of kT)')
ylabel ('Carrier Distribution (1/(eV cm^3))')
title ('Carrier Distribution Functions at T = 300 K')
legend ('Electron', 'Hole (x 5x10^9)')

print -dpng P2p9_m.png

2.10b

In this problem, the broadening of the electron distribution as T increases can be noted.

Python

Inlined image: P2p10.png

#!/usr/bin/env python

from pylab import *

kB = 0.02585 / 300 # eV/K

# What do we need to plot?
#   the normalized e distribution function
#   nedf = gc f / n = ... as given in part (a) of this problem (and below).

# x is in unit of eV
# Need many points for a smooth curve at 300 K.
x = linspace (0, 0.4, 800)

for T in [300, 600, 1200]:
        mnr = 1.028 + 6.11e-4 * T - 3.09e-7 * T ** 2 # mnstar / m_e -- page 55
        mpr = 0.610 + 7.83e-4 * T - 4.46e-7 * T ** 2 # mpstar / m_e -- page 55
        # Check that they are reasonable.
        print 'mnr =', mnr, 'at T =', T
        print 'mpr =', mpr, 'at T =', T
        nedf = 2 * sqrt (x) / sqrt (pi) / (kB * T) ** 1.5 * exp (-x / (kB * T))
        plot (nedf, x, label = 'T = %g K' % T)
grid ()
legend ()
xlim ([0, 20])
ylim ([0, 0.4])

# matplotlib comes with its own LaTeX parser -- cool!
xlabel ('Normalized Electron Distribution Function (1/eV)')
ylabel ('Excitation Energy (eV)')

savefig ('P2p10.png')

Matlab

Matlab-produced image and Octave-produced image:

Inlined image: P2p10_m.png Inlined image: P2p10_o.jpg

% Clean slate
close
clear

kB = 0.02585 / 300 % eV/K

% What do we need to plot?
%   the normalized e distribution function
%   nedf = gc f / n = ... as given in part (a) of this problem (and below).

% x is in unit of eV
% Need many points for a smooth curve at 300 K.
x = linspace (0, 0.4, 800)

for ii=1:3;
        T = 300 * ii
        if ii == 3
            T = 1200
        end
        mnr = 1.028 + 6.11e-4 * T - 3.09e-7 * T ^ 2 % mnstar / m_e -- page 55
        mpr = 0.610 + 7.83e-4 * T - 4.46e-7 * T ^ 2 % mpstar / m_e -- page 55
        nedf = 2 * sqrt (x) / sqrt (pi) / (kB * T) ^ 1.5 .* exp (-x / (kB * T))
        f(:,ii) = nedf
end
plot (f, x)
grid ()
legend ('T = 300 K', 'T = 600 K', 'T = 1200 K')
axis ([0 20 0 0.4])

xlabel ('Normalized Electron Distribution Function (1/eV)')
ylabel ('Excitation Energy (eV)')

print -dpng P2p10_m.png
UC Santa Cruz Department of Physics