A11103 3Tfib3Q

NIST

PUBLICATIONS

c NIST SPECIAL PUBLICATION 400-85

U.S. DEPARTMENT OF COMMERCE/National Institute of Standards and Technology

Semiconductor Measurement Technolog

EPROP: An Interactive FORTRA

Program for Computing Selectc

Electronic Properties < Gallium Arsenide and Silicc

A. C. Seabaugh, J.
NATIONAL INSTITUTE OF STANDARDS &

TECHNOLOGY

Research Information Center

Gaithersburg, MD 20899

DATE DUE

Demco. Inc. 38-293
Semiconductor Measurement Technology:

EPROP: An Interactive FORTRAN

Program for Computing Selected

Electronic Properties of

Gallimn Arsenide and Silicon

Alan C. Seabaugh,* John J. Mathias,^ and Michael 1. Bell

Semiconductor Electronics Division

Center for Electronics and Electrical Engineering

National Institute of Standards and Technology

Gaithersburg, MD 20899

* Texas Instruments, Incorporated

Dallas, TX 75265

^ 8812 Connecticut Avenue

Chevy Chase, MD 20815

May 1990

U.S. DEPARTMENT OF COMMERCE, Robert A. Mosbacher, Secretary

NATIONAL INSTITUTE OF STANDARDS AND TECHNOLOGY, John W. Lyons, Director
National Institute of Standards and Technology Special Publication 400-85

Natl Inst. Stand. Technoi. Spec. Publ. 400-85, 121 pages (May 1990)

CODEN: NSPUE2

U.S. GOVERNMENT PRINTING OFFICE

WASHINGTON: 1990

For sale by the Superintendent of Documents, U.S. Government Printing Office, Washington, DC 20402-9325
Table of Contents

Page

Abstract i

1. Introduction 2

2. Theory 3

2.1. Charge-Balance Equation 3

2.2. Temperature-Dependent Parameters - Gallium Arsenide .... 4

2.3. Temperature-Dependent Parameters - Silicon 9

2.4. Fermi-Dirac Integral 10

2.5. Justifications 11

2.6. Limitations 18

3. Program Operation and Output 18

3.1. Description 19

3.2. Sample Session - Short Set 25

3.3. Sample Session - Full Set . . . 35

3.4. Sample Session - Constants 40

3.5. Sample Session - User-Specified Set 46

4. Program Operations and Output 51

4.1. Program Structure and Flow Description 51

4.2. Functions, Subroutines, and Files 55

4.3. Input and Output Parameters 58

4.4. Other Variables 58

Acknowledgments 64

References 65

Appendix 1. Portability Considerations 69

Appendix 2. Adding a New Semiconductor 71

Appendix 3. Program Listing 73

List of Tables

2.1. Eff'ective Mass Coefl[icients for Silicon 10

3.1. Symbols (Band-Structure Parameters) 20

3.2. Symbols (Dopant Parameters) 21

3.3. Symbols (Miscellaneous Parameters) 21

4.1. Common Blocks And Program Variables 56

4.2. Functions 56

4.3. Subroutines 57

4.4. Files 57

4.5. Vectors 58

4.6. Independent Variables 59

4.7. Dependent Variables • .60

4.8. Other Program Variables 61

iii
List of Figures

Page

2.1. Intrinsic Carrier Density in GaAs .12

2.2. Effect of Band Nonparabolicity in GaAs 13

2.3. Apparent Electron Density in GaAs 15

2.4. Electron Mobility of GaAs 16

2.5. Hall Effect in GaAs . . . . . .17

3.1. Short Set Output Parameters (Si and GaAs) 19

3.2. Full Set Output Parameters (GaAs) ......... 19

3.3. Full Set Output Parameters (Si) 20

3.4. Constants Option (GaAs) 20

3.5. Constants Option (Si) .20

3.6. EPROP Start-Up Menu 22

3.7. Impurity Selection Menu 23

3.8. Independent Variable Selection Menu . .23

3.9. Main Menu 24

3.10. Default Start-Up Computation .24

3.11. Hole Density in GaAs (Experimental) 26

3.12. Output Device Selection Menu . 27

3.13. Plot Parameter Menu 27

3.14. Plot File Menu 28

3.15. Input Data Selection Menu 28

3.16. Independent Variable Selection Menu 29

3.17. New Independent Variable Selection Menu 29

3.18. Input Data Selection Menu 30

3.19. Impurity Selection Inputs 30

3.20. Completed Dopant Menu 31

3.21. Input Data Selection Menu . . . .31

3.22. Terminal Output 32

3.23. PLQT1.DAT Output File Format 33

3.24. Hole Density in GaAs (Calculated) . .34

3.25. Main Menu . 35

3.26. Material Selection Menu 35

3.27. Output Device Selection Menu 36

3.28. Output Set Selection Menu 36

3.29. Si Main Menu for Fidl Set Output Computation 37

3.30. Si Full Set Output Listing File list.dat . . . . . . . . . 38

3.31. Main Menu for Si Constants Option 40

3.32. Si Terminal Output Using the Constants Option 41

3.33. Si LIST.DAT File Using the Constants Option 42

3.34. Main Menu for GaAs Constants Option . . . . . . . . .43

3.35. GaAs list.dat File Using the Constants Option 44

iv
List of Figures (continued)

Page

3.36. User- Specified Output Menu 47

3.37. Main Menu for User- Specified Output 48

3.38. User-Defined Terminal Output 49

3.39. Fermi Energy of GaAs 50

4.1. Program Flow For Menu Manipulation 52

4.2. EPROP Program Flow Diagram 53

4.3. Program Flow In The Computation Subroutine, COMP 54

V

Semiconductor Measurement Technology:

EPROP: An Interactive FORTRAN Program for Computing Selected

Electronic Properties of Gallium Arsenide and Silicon

A. C. Seabaugh*, J. J. Mathiast, and M. I. Bell

Semiconductor Electronics Division

National Institute of Standards and Technology

Gaithersburg, MD 20899

Abstract

A new computer program, EPROP (an acronym for Electronic PROPerties) is presented

for use in interpreting measurements and experiments on gallium arsenide and silicon.

EPROP computes a solution of the charge balance equation in thermodynamic equilibrium for up to six different impurities. The user supplies the density, energy level, and

degeneracy for each impurity, and in response the program returns as many as 28 output parameters, such as the Fermi level, carrier density, and ionized impurity densities.

These can be computed as functions of the temperature (or reciprocal temperature) or the density, energy, or degeneracy of any of the six possible impurities. Listings can also

be obtained of various temperature-dependent parameters, such as the bandgap, densities

of states, and effective masses. The interactive features of the program allow the user to

send the output data to any combination of destinations: a terminal, a listing file, and/or

up to four graphic output files, all at the user's direction. The user is also given freedom

and abihty to customize the data output to these destinations through menu-driven controls. The program is written in ANSI standard FORTRAN 77 and has been successfully

compiled and run on both mainframe and microcomputers. Documentation is provided to

assist the interested user in customizing the program for special applications, extracting

portions for use elsewhere, or modifying the code to treat semiconductors other than silicon

and gallium arsenide.

Keywords: electronic properties; Fermi level; FORTRAN; GaAs; gallium arsenide; Si;

silicon.

* Present address, Central Research Laboratories, Texas Instruments Incorporated, Dallas, TX 75265

t Present address, 8812 Connecticut Ave., Chevy Chase, MD 20815

1
1. Introduction

In analyzing the transport properties of semiconductors, it is often useful to know the

Fermi energy as a function of temperature, or as a function of the density, binding energy,

or degeneracy of a particular impurity. Once the Fermi level is known, the electron and

hole densities can be calculated, as well as the degree of ionization of each of the impurities.

This can be useful in designing experiments and in interpreting measurements of resistivity.

Hall effect, and capacitance. Such calculations can also be useful in materials and device

design, e.g., for estimating the influence of a particular dopant configuration on the free

carrier and ionized impurity densities.

The computer program described here, EPROP (an acronym for Electronic PROPerties)

originated, in concept, with a program written by Larrabee, Thurber, and BuUis [1], which

calculates the temperature dependence of certain electronic properties of silicon (Si), such

as the free carrier and ionized impurity densities and the mobility. EPROP has expanded

on this calculation, incorporating new data and computing properties of both Si and gallium arsenide (GaAs). The mobiUty calculation of reference [l] has not been included in

EPROP, since it is not reliable over the wide range of impurities and temperatures allowed

by this program. In addition to computing the temperature dependence of the Fermi level,

EPROP can also compute the Fermi-level position as a function of the density, energy, or degeneracy of a particular impurity.

Often a user would like to control where the output of the program is directed, whether

to a terminal, printer, or listing file. EPROP accommodates these needs. In addition, as many as four x-y graphic output files can be created, which the user can then customize

for output to his particular graphics software and devices.

The purpose of this program is to provide a fast, first-order calculation of the Fermi level as a function of temperature and monovalent impurity parameters. Heavy doping effects,

impurity excited states, and multiply-ionized centers are not included. In the case of

GaAs, a density of states is used which takes into account the nonparabolicity of the Tq

conduction band minimum and the existence of the Lq and Xq upper conduction band

minima. Inclusion of the upper conduction bands is shown (sec. 2.5.2) to be useful in

interpreting high-temperature Hall-effect measurements on GaAs. An attempt has been

made to provide enough documentation so that the user can readily "cannibalize" useful

subroutines in EPROP or customize the program as desired.

EPROP has been compiled and run successfully on mainfraime, mini-, and microcomputers. A discussion of general considerations related to the portability of the code, as well

as specific modifications required for several of the machines on which it has been tested, are given in appendix 1. Appendix 2 describes the changes required in order to include

semiconductor materials other than Si and GaAs. Appendix 3 contains a complete listing

of the source code. This listing is available in machine-readable form; inquiries should be

addressed to the third author.

2
2. Theory

To simplify the presentation, we use the dimensionless energy scale of Blakemore [2]. A

reduced energy variable, e = [E — Ec)/kT, and corresponding reduced Fermi energy,

T] = [Ep — Ec)/kT, are defined with respect to the conduction band edge Ec, where E

and Ep are the usual energy variable and Fermi energy, respectively. The temperature in

Kelvin is represented by T and Boltzmann's constant by k. The reduced Fermi function,

giving the occupation probability of the available states, is /(e) = [1 + exp(e — rj)]~^.

2.1. Charge-Balance Equation

In thermodynamic equilibrium, the position of the Fermi level can be determined by as- suming that charge neutrality holds; i.e., the sum of all positive and negative charges

(electrons, holes, and ionized impurities) is zero.

where Uq and po are the electron and hole densities, and N^. and are the ionized

acceptor and ionized donor densities to be summed over the donor impurities (z) and

acceptor impurities (ji).

For a parabolic conduction band, the electron density in thermodynamic equilibrium is given by

rio = iV,Fi/2(r/), (2)

where Nc is the density of conduction band states,

Here, ffic is the average, density-of-states effective mass, and h is Planck's constant. The

Fermi-Dirac (F-D) integral is

oo

r(j + 1) 7 1 + exp(e - 77) 0

where T[i) is the gamma function.

For Si, the density of states (3), corresponding to a parabolic band, proves to be adequate

for computing the electron carrier density. For GaAs, as will be discussed in section 2.2.2, a different density of states is needed in order to account for the nonparabolic conduction

band.

3
An analogous set of relations exists to describe the hole density in thermodynamic equilibrium,

where the reduced energy parameter is ^ {E„ — EF)/kT, and the valence band density

Here, m„ is the average density-of-states effective mass for the valence band. Again, the

assumption of parabolic bands appears adequate for Si, but a more accurate treatment is required for GaAs (see sec. 2.2.3).

The donor and acceptor impurities are assumed to be single, monovalent centers located

at the discrete energies and Edj , respectively. Each ionized acceptor impurity has a

density, iV", given by

(5)

of states is given by.

(6)

and each ionized donor impurity, N^. , has a density given by

The total impurity density for each acceptor and donor is given by Ndj andNai, respectively; and are the donor and acceptor degeneracies, respectively.

2.2. Temperature-Dependent Parameters — Gallium Arsenide

Blakemore [3] has reviewed the relevant literature. This section provides an annotated

summary of the relationships used in the program, most of which have been obtained from

reference [3].
2.2.1. Bandgap - GaAs

The empirical equation of Varshni [4] predicts the temperature dependence of the bandgap

in GaAs,

E,{T) = E,{0)-^, (9)

where Eg is the bandgap energy, and a and /3 are constants determined empirically from

optical absorption measurements. At low temperatures, the bandgap has a quadratic

temperature dependence, while at high temperatures the dependence becomes linear. As

fitted to optical absorption measurements by Thurmond [5], the constants in eq (9) are Eg{0) = 1.519 eV, a = 5.405 x 10"^ eV/K, and ^ = 204 K. The standard deviation of the

fit, five measurements over the range 297 to 973 K, was found to be 2.6 meV. This fit of the

Varshni equation was also checked against other optical absorption, photoluminescence,

and injection luminescence measurements for temperatures ranging down to 4.2 K and was

found to deviate in the worst case by 6.7 meV. Provided that the bandgap is not perturbed

by heavy doping effects, the temperature dependence of the bandgap given by this fit of

the Vajshni equation represents the experimental data very closely.

2.2.2. Conduction Band Density of States — GaAs

The question arises, does the simple density of states in eq (3), corresponding to a parabolic

band, adequately describe the density of conduction states in GaAs? Under nondegenerate

conditions, the answer is yes, but for many temperatures and doping configurations of

interest in GaAs, the condition of nondegeneracy does not hold. For this reason, the

program incorporates a modified density of states.

Blakemore has examined a number of attempts to determine the intrinsic carrier density

in GaAs [6], and in his review article [3] proposes a modification of the density of states

to account for the nonparabolicity of the conduction band. This proposal is based on

Kane's [7] k • p perturbation approach to determining the band structure and Vrehen's

[8] approximation for nonparabolicity in the energy range {E — Ec) -C Eg. The modified

density of states is given by

with

\ mj {E, + A){3E, + 2Ar ^

'

where A is the energy difference between the Fs valence band maximum and the splitoff band, and mo is the free electron mass. The spin-orbit splitting A is 0.341 eV at room

temperature and is assumed to be temperature-independent for lack of any experimental

evidence to the contrary. The temperature dependence of a' ir influenced by that of the

1 -

15a'fcr \ .P3/2(^)

4Eg JFU2{V).

(10)

6
effective mass (sec. 2.2.4) and the energy gap. In fact, a' is not strongly temperaturedependent, varying between —0.824 at low temperature and —0.854 at the melting point.

These modifications to the density of states act to increase the number of states at room

temperature by about 6% and to inflate the density monotonically with increasing temperature to nearly 26% at 1000 K.

Long before the temperature reaches 1000 K, however, electrons begin to populate the

and Xe conduction band minima. As Blakemore shows [3], this effect is important as the

temperature increases above 400 K. For temperatures exceeding 900 K, the Lq conduction

band contains more than half of all conduction electrons. It is possible to express the

total conduction band population as the sum of the electron densities in each of the three

bands [3], Fe, ie? s,n.d Xe,

Uo = nr -\- riL + nx. (12)

The nonparabolicity and statistical occupation of the central Fe minimum are accounted for

by writing np = N'^Fii2{r)). Under nondegenerate conditions, we may assume Boltzmann

distributions for the carriers in the and bands. Their electron densities (n^ and

nx , respectively) are given by

anc

As in eqs (3) and (6), the average density-of-states electron masses in the bands, Lq and

Xe, are represented by m£, and nix- The temperature-independent values used for the

effective masses are, following Blakemore [3], = 0.52mo and nix = 0.85mo. The

temperature-dependent energy difference between the Lq and Fe conduction bands, ArL?

and between the Xq and Fe conduction bands, Arx? as fit to the Varshni equation (see

Blakemore [3] for references) are,

and

ArL = 0.296 eV - (6.45 x 10"^ eV/K)

Arx = 0.462 eV + (8.05 x 10"^ eV/K)

T^

T-H/3'

T + /3'

(15)

(16)

where j3 = 204 K, as in eq (9).

6
2.2.3. Valence Band Density of States - GaAs

Blakemore [3] has proposed a companion density of states to eq (10) to account for the

nonparabolicity of the Hght- and heavy-hole valence bands in GaAs:

N' m

3/2

-|- m

3/2

where m/j is the heavy hole effective mass and m/ is the light hole effective mass.

In this treatment, only the light-hole band is nonparabolic, and its nonparabolicity is due

entirely to interaction with the conduction band. The temperature-dependent parameter

/3' which describes the contribution of this nonparabohcity to the density of states is given

by

1 + EJ2A

^--(l-E,/2xO^'

^''^

where xi — 10.0 eV. The parabolic heavy-hole bajid is not coupled to any other band in

this model. Its mass must be determined entirely by reference to experiment.

The valence band density of states described by eqs (17) and (18) was used in early

versions of EPROP and remains available as part of the computer code. A more accurate

description of the density of states is provided, however, by the recent work of Lowney and

Kahn [9]. This treatment includes the effects of two more distant conduction bands (lying

above the primary conduction band at the center of the Brillouin zone) and is able to

describe correctly the behavior of the heavy-hole band. The additional conduction bands

also produce an effective interaction between the light- and heavy-hole bands which is absent in Blakemore's treatment. Without this interaction, Blakemore's light-hole band

turns upward at large wavevector, an erroneous and potentially misleading result. The

density-of-states effective masses obtained by Lowney and Kahn differ significantly from

those of Blakemore, as can be seen in figures 2 and 3 of reference [9]. Somewhat fortuitously,

the density-of-states expansion (17) is in good agreement with the results of Lowney and

Kahn for energies less than 300 meV into the band.

Lowney and Kahn [9] provide numerical results for the density-of-states masses as a function of hole energy E. In order to calculate the density of states, these masses have

been raised to the 3/2 power and the values fitted with cubic polynomials of the form

A + BE + CE^ -f DE^. For the heavy-hole band, the fitting coefficients are Ah - 0.4009,

Bh = 0.2637, Ch = 0.05909, and Dh = -0.3141. For the light-hole band, the coefficients are Ai = 0.03396, Bi -0.5439, Cj = 5.203, and Di = -6.488. The density of states is then given by

N' f2TkT\ 3/2

A + BkT + C{kT)^ + D{kTy (19)

where

A = Ah-h Ai,

7
B = {BH + Bi)T{hl2)F„2{OIG,

C = {Ch + Ci)V{7I2)F„:,{QIG,

D = {Dh + Di)T{9/2)Fy2{(:)/G,

and

G = T{3/2)F,/2{0-

The F-D integrals of order 5/2 and 7/2 are now used, in addition to those of order 1/2

and 3/2. Note that because the heavy-hole band (as well as the light-hole band) is nonparabolic, its mass requires an expansion in powers of the energy. The total density of

states is somewhat greater with this new model, and the results of the calculations are cor- respondingly changed. EPROP is delivered with the more accurate valence band density

of states of Lowney and Kahn; the Blakemore formulation is readily computed, however,

by making a simple modification of the source code.

2.2.4. Electron Effective Mass - GaAs

The temperature dependence of the conduction band effective mass is computed, again

from k • p theory, [3]

rric = (20)

where Xc = 7.51 eV.

2,2.5. Hole Effective Mass - GaAs

When eq (17) is used for the valence band density of states, the heavy hole mass is set to

rrih — O.Smo, independent of temperature. This corresponds to its room temperature value;

at low temperatures (T < 100 K), Blakemore [3] reports 0.51 ± 0.02mo as the consensus

of various experiments. This is an increase of only 2% from the room temperature value.

The temperature dependence of the light hole mass is more significant; from k-p theory [3] it can be described by

Egirio

'mi = ^- (21)

When eq (19) is used, the hole effective masses do not appear explicitly in the density of

states. Instead, the temperature dependence of the effective masses is reflected in the coefficients A, B, C, and D. The values given in section 2.2.3 apply at low temperature. Since it

is not presently possible to determine the temperature dependence of these coefficients [9],

EPROP treats them as independent of temperature.

8
2.3. Temperature-Dependent Parameters - Silicon

The parameters used in EPROP are essentially identical to those employed in the program

of reference [1], except that the bandgap is obtained from a fit to the Varshni equation.

2.3.1. Bandgap — Si

The temperature dependence of the bandgap of Si is also described well by the Varshni [4] eq (9). Thurmond's [5] fit to experimental data yields the values: a = 4.730 x 10~'*eV/K

and = 636 K, with Eg{0) = 1.1700 eV.

2.3.2. Conduction and Valence Band Density of States — Si

For Si, the assumption of parabolic bajids is used, leading to the densities of states (3) and

(6). No formulation for nonparaboHc bands equivalent to that for GaAs is available. The

degenerate valence bands and split-off" bands have not been included, although formulations

for their densities of states have been proposed [10]. These should be important at high

temperatures and/or high doping.

2.3.3. Electron Effective Mass - Si

The measurements of electron effective mass of Ukhanov and Mal'tsev [11] and Stradling

and Zhttkov [12] were summarized by Barber [13]. A polynomial fit to these data in the

temperature range 50 to 600 K was obtained by Larrabee et al. [1] and is used in EPROP,

6 ^ = 1.0627- VaiT*. (22)

The coefficients are listed in table 2.1.

2.3.4. Hole Effective Mass - Si

The hole effective mass, again fitted by Larrabee et al. [1] to the curves presented in Barber

[13], is

6 — = 0.590525 -VftiTS (23)

where the coefficients 6j are also listed in table 2.1. The fit is for the temperature range 0

to 500 K.

9
Table 2.1. Effective Mass Coefficients for Silicon

Coefficient Electrons (a^) Holes (6,)

i Eq (22) Eq (23)

1 1.61708 X 10-4 5.23548 x IQ-^

2 -6.83008 X 10-^ -1.85678 x 10-^

3 3.32013 X 10-^ 9.67212 x lO"^

4 -8.04032 X 10-1^ -2.30049 x 10-^°

5 9.66067 X lO'^^ 2.59673 x lO'^^

6 -4.54649 x lO'^*^ -1.11997 x lO-^^

2.4. Fermi-Dirac Integral

Numerical integration of the Fermi-Dirac function is unnecessary due to the availability of

accurate analytic approximations [14]. While approximations with relative accuracies of

10~^ or better [15] are available, a particularly short and simple approximation reported

recently by Van Halen and Pulfrey [16] is used here. This set of short series approximations

to the integral gives better than two parts in 10^ accuracy over the entire range of the

argument, — oo to +oo.

For the F-D integrals of order 1/2, 3/2, 5/2, and 7/2, three separate series expansions are used. These can be written as follows:

7

r=l

where

/ (_l)r-+lgra!

.r-l

k X

i+l-2(r-l)

a; < 0

0 < a; < 3.7

X > 3.7

(24)

The coefficients ajr are given by Van Halen and Pulfrey [16].

Equation (24) defines the ranges of validity for the series expansions somewhat differently

than Van Halen and Pulfrey [16]. Our evaluation of the series in the range 3.7 < x < 4

diverged from the pubHshed tables in Blakemore [2] and from the results of the series

10
approximation of Cody and Thacher [15]. Agreement to within less than five parts in 10^

is achieved, however, by changing the ranges to those given above (24).

2.5. Justifications

Several computations which were performed to test the program are discussed below. The

results serve to document the reasoning behind the analytical formulation and to illustrate

the range of parameters for which the results have been examined.

2.5.1. Intrinsic Carrier Density

The nonparabolicity of the valence and conduction bands in GaAs is taken into account

by modifying the density-of-states relations as previously described in sections 2.2.2-3.

The nonparabolicity restilts in an increase in the conduction and valence band densities

of states. The density of conduction states is further increased by the contributions from

the Ls and Xs bands as described in eqs (12-14). The importance of these effects on the

intrinsic carrier density is shown in figures 2.1 and 2.2. Neither the nonparabolicity nor the

contribution of the upper conduction band states significantly affects the intrinsic carrier

density for temperatures less than 600 K, as seen in figure 2.1. For temperatures greater

than this, however, the upper conduction band states become occupied and modify the

intrinsic carrier density. At 1000 K, the intrinsic carrier density computed including all three conduction bands is roughly twice that obtained with only a single conduction band.

On the scale of the plot of figure 2.1, the difference between including and excluding the

conduction and valence band nonparabolicity is negligible. Figure 2.2, however, shows an

expansion of the temperature range between 500 and 1000 K which demonstrates that the

nonparabolicity does in fact increase the intrinsic carrier density relative to the parabolic

case. EPROP computes the properties of GaAs using the nonparabolic density of states

and the upper conduction bands. The value of including the upper conduction band in the

computation is seen in the next section.

2.5.2. High-Temperature Hall-EfFect Measurements on GaAs

The ability to compute the occupation of the upper conduction band states is important in

interpreting high-temperature Hall-effect measurements. This can be seen in an analysis

of the high-temperature Hall-effect measurements of Nichols, Yee, and Wolfe [17]. The

results show good agreement between experiment and theory using the program output.

Incorporation of the nonparabolic density of states has negligible effect on the fit to the

data.

The Hall coefficient data for one of the three n-type GaAs specimens measured by Nichols et

al. [17] are shown in figure 2.3. For single- carrier conduction in an n-type semiconductor,

the reciprocal of the Hall coefficient is proportional to the electron density, and if the

scattering factor is unity, then the electron density is just 1 / [qKn)- This quantity is plotted

11
T—-i \ r—I

1 1 1 i—I1 \ 1 r

1000/T (K"i)

Figure 2.1. Intrinsic Carrier Density in GaAs. Dependence on reciprocal temperature. Inclusion of the upper conduction bands increases the density of states and the intrinsic carrier density at high temperatures.

12
1000/T (K-'')

Figure 2.2. Effect of Band Nonparabolicity in GaAs. Influence of conduction band nonparabolicity and

the upper conduction bands on the intrinsic carrier density of GaAs at high temperatures. The two lower curves include only the Tq conduction band; the upper two curves (virtually indistinguishable) include

the two higher conduction bands.

13
in figure 2.3. EPROP was used to compute the temperature dependence of the electron

density for various formulations of the density of states. There is general agreement using a

single donor impurity with a concentration of 2 x 10-^^ cm~^, an activation energy of 6 meV,

and a degeneracy of 2, but this computation does not describe all the features apparent in

the experimental data. Curves (a) and (b) are computed without incorporating the upper

conduction bands; (a) assumes parabolic bands, while (b) includes nonparabolicity. Curve

(c) includes the upper conduction band density of states; the nonparabolic and parabolic

density-of- states cases including the upper conduction bands are indistingtdshable. It can be seen from all of these curves that the dip in the apparent electron density in the

temperature range 500 to 800 K is not accounted for by this interpretation of the data.

Nichols et al. [17] show that these data can be fit to an expression for three-carrier transport: the Hall coefficient is given by

where the mobilities in the Fg and Lq conduction bands and the valence band are represented by /ir? i^L^ and fih, respectively. For carrier densities greater than the intrinsic

carrier density, the holes can be neglected [17]. In this range, with the additional as- sumption that qRn = l/C'^r at 400 K, the data can be fit using eq (25). The only

adjustable parameter in this case is fiL/fJ-r, the ratio of the conduction band mobility at

to that at Fe- The extracted values for this ratio are reproduced from the data of Nichols

et al. in figure 2.4. Using a fit^ to these data, shown as the solid line in figure 2.4, and as- suming a constant ratio between the Tq conduction band electron mobility and the valence

band hole mobility, the temperature dependence of the Hall coefficient can be computed

over the entire temperature range. EPROP was used to provide the electron density in

the two conduction bands and the hole density in the valence band. The resulting fit to

the experimental data is shown in figure 2.5.

The experimental data in figure 2.5 are the same as in figure 2.3. The ordinate is now

labeled l/qRn, which is what is actually measured and computed. The computation

now predicts the Hall coefficient increase in the range 500 to 700 K. The agreement is not surprising since the temperature dependence of /xl/a^f was computed to account for

this effect. The values of this ratio are reasonable, however, and lend credence to this

interpretation [17]. At the highest temperatures, the intrinsic carrier density overestimates

the experimental findings, but good agreement with experiment is found for temperatures

less than 950 K.

(25)

t /xi/^r = 1.2068 - 1.7590 x 10"^ T + 6.7235 x lO""^ T^.

14
Figure 2.3. Apparent Electron Density in GaAs. Temperature dependence, based on the data (triangles)

of reference [17]. Fits were obtained from EPROP using equations for the density of states based on (a) a

single, parabolic conduction band, (b) a single, nonparabolic conduction band, and (c) multiple conduction

bands.

16
800

TEMPERATURE (K)

Figure 2.4. Electron Mobility of GaAs. Temperature dependence of the mobility ratio iihltiv [17]; squares

and circles are for two different GaAs specimens. Solid line is a power series fit to the data.

16
in"*^! I I I I 200 400 600 800 1000 1200

TEMPERATURE (K)

Figure 2.5. Hall Effect in GaAs. Fit to experimental data of Nichols et al. [17] using EPROP to predict

occupancy of the conduction bands as a function of temperature.

17
2.6. Limitations

Changes in the temperature or in the energy or density of the impurity states can cause

the argument of the F-D integral to swing from large negative values to large positive

ones. It is possible, at certain extremes, to make calculations for situations in which the

validity of the model is in question. Important physical intuition can often be gained from

pondering these extreme cases, however, so this output is not suppressed. Appropriate

warning messages are provided to the user; care must be taken in interpreting the results.

The program is clearly limited by what it does not take into account. For example, no

provision is made for divalent or multiply-charged centers, although the statistics of these

centers have been formulated [18-23]. Neither does the program include any heavy doping

effects [24]. Heavy doping results in a modification of the density of states, decreasing the

bandgap and the impurity activation energy. This has been shown to be a significant effect

in Si [25-26] for impurity densities greater than 5 X 10-^^ cm~^. Similarly, for GaAs [27-28],

these effects can be significant for acceptor impurity densities exceeding 5 x 10-^ cm~^ and

donor densities exceeding lO-'^ cm~^. Results from EPROP may deviate from experimental

data when the impurity or carrier concentrations become large, and appropriate warnings

are given.

The numerical accuracy of the calculation is considerably greater than the physical accu- racy of the models used. Numerical accuracy is roughly five parts in 10^ (worst case), as determined by the F-D integral computation. For most computers and compilers, singleprecision arithmetic should prove adequate.

3. Program Operation and Output

In this chapter, four different sample sessions are presented. These demonstrate the interactive features of the program and illustrate a few of the many ways that the output can

be organized. The user may find it instructive to execute the program while reading this

chapter. This is not necessary, however, since both the input and output for each sample

session are shown.

The numerical results for GaAs were obtained using eq (17) for the valence band density

of states. The final version of the program (see listing in appendix 3) uses eq (19), but the

statements required to implement eq (17) are included as comment lines in the source code.

If the user wishes to reproduce exactly the numerical results of this chapter (perhaps as a test of modifications to the program), these lines can be substituted for the aj propriate

active sections of the code.

18
3.1. Description

To run the program requires only the executable file, but after execution, several other files will be created. One of these is named EPROP.DAT and contains all the specifications of the

previous run. With EPROP .DAT present, the previous input data and plotting attributes are

recalled, and the user can make modifications for the next run without wholesale re-entry

of every parameter. If the user has selected an output listing file, the output is sent to

the file LIST. DAT. Similarly, if plot files are specified, these appear as the files PL0T1.DAT,

PL0T2.DAT, PL0T3.DAT, and/or PL0T4.DAT. When errors occur in the computation., e.g=, the solution of the charge balance equation does not achieve the required accuracy, error messages are written to the file ERROR. LIS. If messages are sent to this file, the user is notified at the conclusion of the computations. The only other file that the program creates

is the file TEMPQR.ARY. This file is used to house the data temporarily prior to the final

data output. After all the computations are completed, data are selected from TEMPQR.ARY

and written to the selected output devices according to the output option then in effect.

Upon normal termination of the program, the file TEMPQR.ARY is deleted and is therefore

not visible to the user. EPROP allows almost any axrangement of the output data. Three internally defined output

sets are available. These output options are called short set, full set, and constants.

The short set lists 10 parameters as shown below in figure 3.1. Figures 3.2 and 3.3 show

the output parameters under the full set option for GaAs and Si, respectively.

Temp EF n p Ndl+ NalNd2+ Na2- Nd3+ NaSFigure 3.1. Short Set Output Parameters (Si and GaAs).

Temp 1000/T EF n p Ndl+

Nd2+ Nd3+ Nal- Na2- NaS- Eg

Sum Charges kT Ec-EF diel Temp**3/2 efme

efmh Nc Nv Nc' Nv' nG

xiL nX Delta EGL Delta EGX

Figure 3.2. Full Set Output Parameters (GaAs).

The const suits output option also differs slightly depending on whether the computation

is being made for GaAs or Si. These two output sets are listed in figures 3.4 and 3.5 for

GaAs and Si, respectively.

A fourth option, the user-specified set, allows the user to designate any of the output

parameters for listing or display. For GaAs, up to 28 parameters can be selected for output;

in the case of Si, 21 parameters are available.

19
Temp 1000/T EF Zl P Ndl+

Nd2+ Nd3+ Nal- Na2- NaS- Eg

Sum Charges kT Ec-EF diel Temp**3/2 efme

efmh Nc Nv

Figure 3.3. Full Set Output Parameters (Si).

Temp 1000/T kT Eg diel Temp**3/2

efme efmh Nc Nv Delta EGL Delta EGX

Figure 3.4. Constants Option (GaAs).

Temp 1000/T kT Eg diel Temp**3/2

efme efmh Nc Nv

Figure 3.5. Constants Option (Si).

Correspondences between the output parameter names used in figures 3.1-3.5, the variables

appearing in the equations of chapter 2, and the names used in the FORTRAN program

(appendix 3) can be! obtained from tables 3.1-3.

Table 3.1. Symbols (Band-Structure Parameters)

Equation Symbol Eq Nos. Output Symbol Program Variable

mc/mo 3 efme EFME

6 efmh EFMH

10 Ncl FNCP

K 17,19 Nvl FNVP

12 n6 CNG

13 hL CNL

14 nX CNX

a 11 ALPHA

18 BETA

A 11 DEL

ArL 15 Delta EGL DELGL

Arx 16 Delta EGX DELGX

The output can be directed to any combination of three different destinations: terminal (or

printer), listing file, and plot files. If terminal output is selected, the first six parameters

of the output set and the input information about the impurities are sent to the terminal.

20
Table 3.2. Symbols (Dopant Parameters)

Equation Symbol Eg Nos. Output Symbol Program Variable

no 2 n CN

Po 5 P CP

Na, 7 Nal DNS

Na, 7 Na2 DN4

Na, 7 Na3 DNS

8 Ndl DNl

AT Nd, 8 Nd2 DN2

Nda 8 Nd3 DNS

7 Nal- DIS

7 Na2- DI4

7 Na3- DIS

8 Ndl+ DIl

8 Nd2+ DI2

8 Nd3+ DIS

Ec — Edi 8 Edl ENl

Ec — Ed, 8 Ed2 EN2

Ec — Edg 8 Ed3 ENS

Eai — Ev 7 Eal EN4

Ea, — E-o 7 £a2 ENS

Eau — Er, 7 Ea3 EN6

Nc 2,3 Nc FNC

5,6 Nv FNV

(see equation) 1 Sum Cheirges SUM

Table 3.3. Symbols (Miscellaneous Parameters)

Equation Symbol Eq Nos, Output Symbol Program Variable

4 . FD(J,ARG)

V ETA

C ZETA

T Temp T

kT kT/q CAYT

Ec — Ep Ec-EF ECMEF

rp3/2 Temp**3/2 TPOWR

Ef — Ev EF EF

Ec — Ep Ec-EF ECMEF

h H

21
The listing file, if selected, will contain a complete listing of the output set as defined

above, along with the impurity information. If plot files are desired, the user can specify

up to four pairs of parameters to be tabulated in separate files. The file EPROP.DAT, which contains the attributes entered during the previous program

execution, is normally present and read by the main program. If EPRDP.DAT does not

exist, it is created through a default start-up sequence. Upon execution, EPROP attempts

to read EPROP.DAT. If it is not present, the program presents the start-up header and

instructions shown in figure 3.6. If a carriage return is given, a menu allowing input of

impurity parameters will appear (fig. 3.7). The six slots for impurity information are listed

by type: three donors, Dl, D2, and D3, and three acceptors, Al, A2, and A3. The names of

the impurities would normally appear under the Dopants header. The word none indicates

that no impurities have been defined.

EPROP Version 1.0

An Interactive Program for Computing the Electrical

Properties of GaAs and Si

by

John J. Mathias, Alan C. Seabaugh, Michael I. Bell

Semiconductor Electronics Division

National Institute of Standards and Technology

Gaithersburg, MD 20899

MCMXC

Instructions: You will be ask^d to respond to a series of menus. If an input is incorrectly entered, do

not abort the program; you will have an opportunity to

make changes. The file, EPROP.DAT (normally containing

parameters from the previous run) is not present. Press

<RETURN> to create a new input file or enter "Q" to quit. >

Figure 3.6. EPROP Start-Up Menu.

At this point, the user may enter impurity information by entering one of the six Type

designators or, if a computation for the intrinsic (no impurity) case is desired, the return

key can be pressed to exit the menu. All of the menus, except the Main Menu, can be

exited by pressing a carriage return.

For now, assume that the computation is to be made for the intrinsic case. Entering a

carriage return causes the Independent Variable Selection Menu to appear (fig. 3.8).

Upon start-up with no EPROP . DAT file, the independent variable defaults to temperature

with its initial value (Start) and final value (Stop) set to room temperature (300 K); the

22
Impurity Selection

Type Dopants Density (cm-3) Energy(eV) Degeneracy

Dl none

D2 none

D3 none

Al none

A2 none

A3 none

Enter type >

Figure 3.7. Impurity Selection Menu.

incremental step (Step) is set to 1.0 (the step cannot be zero). Assume this is satisfactory,

i.e., only a single computation, at room temperature, is required. Pressing the return key

causes the Main Menu to be displayed. The Main Menu contains all the input information

and the desired output attributes (fig. 3.9). At the top of the menu, Material indicates

that the computation is to be made for GaAs (the default start-up selection). The second

item directs that the output be sent to the user's terminal only and the third item tells which output option is selected. Here, the short set option is listed. Under item 4, the

independent variable and its previously defined attributes are listed. Under the Dopants

header, the label none is displayed to indicate that no dopants are specified.

Independent Variable Selection Menu

Independent veiriable > Temp

Start > 300.0000

Stop > 300.0000

Step > 1.0000

1 New independent V8u:iable

2 New st£u:ting value

3 New final value

4 New step (log or linear)

Enter number (s) >

Figure 3.8. Independent Variable Selection Menu.

23
1 Material >

2 Output to > 3 Output > 4 Input data : Independent variable

Start

Stop

Step

Main Menu

GaAs

terminal onlyshort set

Temp

300.0000

300.0000

1.0000

Dopants Density (cm-3) Energy (eV) Degeneracy

none

5 Execute

6 Exit Enter number >

Figure 3.9. Main Menu.

To make changes to any of the data or output attributes, enter the number corresponding

to the item which should be changed. A new menu will appear which can be manipulated

in the same way or exited to return to the Main Menu. If the number 5 is entered without

making changes, the short set output to the terminal, a single room temperature computation, is displayed (fig. 3.10). The ionized donor density Ndl+ and the ionized acceptor

density Nal- are listed as equal to zero when they are undefined. At this point, the user

hr.s enough of an introduction to be able to experiment with the program. The user directs

the program fiow and can return to any point as often as necessary before beginning the

computation. The next four sections detail the manipulation of the menus.

Electrical Properties of Gallium Arsenide

Dopants Density (cm-3) Energy(eV) Degeneracy

none

Temp EF n p Ndl+ Nal300.0000 0.751551 2.2582E+06 2.2582E+06 O.OOOOE+00 O.OOOOE+00

Computation Complete

FORTRAN STOP

Figure 3.10. Default Start-Up Computation.

24
3.2. Sample Session — Short Set

This section describes the short set output option. In addition, the plot file output is demonstrated. As an example, we examine the Hall-efFect data and computer fit of Ta et

al. [29] on undoped p-type GaAs.

Figure 3.11 reproduces the Hall-effect data of reference [29], showing the temperature

dependence of the hole density in an undoped, liquid-encapsulated-Czochralski (LEG)

GaAs crystal. Ta et al. reported a fit to the data as listed in the figure. As is often the

case, due perhaps to the large number of parameters required to describe the density of

states, effective masses, bandgap, and impurity energies and degeneracies, the model used

was not completely specified. It will be shown that for the model embodied in EPROP,

the fitted parameters are sensitive to the values of the model parameters used. This

leads to an uncertainty in the fitting parameters greater than the statistical uncertainty

of the experiment. Hence, to compare the results of these fits with those made at other

laboratories requires that the impurity parameters be extracted using the same program

(i.e., the same model and input parameters). EPROP can serve as this standard for data

comparison. It can also be useful in testing the sensitivity of a fit to changes in the model

parameters.

Upon running the program again, the main menu appears with the data and attributes of

the previous run (fig. 3.9). Suppose a plot file is desired for input to a graphics package.

Entering the number 2 brings up the Output Device Selection Menu (fig. 3.12), which

lists the possible output destinations. This menu shows that the present selection, output

to the terminal, is on with all other outputs off. The listing file option directs the data to an

output file, LIST. DAT, which the user can then print, edit, or archive as desired. Entering

the number or numbers with or without sepaxators (spaces or commas) will enable or

disable the corresponding output.

When the plot fUe option is selected, the entire set of possible plot parameters is listed

(fig. 3.13). The prompt asks for the x-axis input which is specified by the number corre- sponding to the desired x-axis parameter in the menu. To plot hole density p as a function

of 1000/T, type 2 to select 1000/T and enter a carriage return; then enter 5 to select

hole density, and press return. The Plot File Menu appears, allowing the specification

of additional plot files (fig. 3.14). If a single plot file is all that is needed, press the return

key. The Main Menu is then displayed (lower half of fig. 3.14) with the selected plot files listed under the Output to selection. The Main Menu always gives a complete description

of the output attributes.

It should be noted that while the program checks the user's input for everything that

might prove fatal to the computation, it does not check for every logical inconsistency.

For example, if the user were to select the degeneracy of acceptor 3 (number 39, Deg. A3,

the degeneracy of A3) for output to a plot file (fig. 3.13), the program would not check to

make certain that acceptor 3 is defined. This is because the user could enter the impurity

data at any time before computation. Errors which can be detected unambiguously are reported, however, as when the user tries to plot a variable against itself. No entry is truly

25
10

00

Ie

o

O

<

DC

H

Z

UJ

o

z

o

o

UJ

-J

o

I

17

16

15

10

10

10

14

13

12

10

10

1

10

Dopant

Density Energy

(cm-3) (meV) Degen.

donor 9.47x10^4 ? ?

C 3.76x10^5 25 ?

defect 7.02x10^^ 73 ?

0 10 20 30 40

1000/T(K"^)

50 60

Figure 3.11. Hole Density in GaAs (Experimental). Hall-effect measurements of Ta et al. on an LEG

GaAs wafer. The numbers reported in the table are the energies and densities of the impurities used to obtain the fit (solid line); the energy of the donor and the three degeneracies were not reported.

26
Output Device Selection Menu

1

2

3

To toggle, enter number (s) > 3

Figure 3.12. Output Device Selection Menu.

Plot Peirameter Menu

1> Temp 2> 1000/T 3> EF 4> n 5> P

6> Ndl+ 7> Nd2+ 8> Nd3+ 9> Nal- 10> Ia2-

11> Na3- 12> Eg i3> Sum Chargesl4> kT 15> Ec-EF

16> diel 17> Temp**3/2 18> efme 19> efmh 20> Nc

21> Nv 22> Ndl 23> Edl 24> Deg. Dl 25> Nd2

26> Ed2 27> Deg. D2 28> Nd3 29> Ed3 30> Deg. D3

31> Nal 32> Eal 33> Deg. Al 34> Na2 35> Ea2

36> Deg. A2 37> Na3 38> Ea3 39> Deg. A3 40> Ic^

41> Nv' 42> nG 43> nL 44> nX 45> Delta EGL

46> Delta EGX

Enter parameter number for the X-ajcis > 2

Enter peirameter number for the Y-ajcis > 5

Figure 3.13. Plot Parameter Menu.

fatal, since aJl attributes are saved (in EPROP.DAT) when the program is executed, and

these attributes are recalled upon re-running the program. In this way, the user can easily recover from errors.

Next, in order to fit the data of figure 3.11, the independent variable and its range must

be changed and the dopant parameters must be entered. To make a change to the input

data, enter 4. With this, the Input Data Selection Menu appears (fig. 3.15). Select 1 to

change the independent variable and a new menu appears (fig. 3.16). Above the selections,

the present independent variable and its range are listed. Entering 1 brings up the New

Independent Variable Selection Menu, which lists the possible independent variables

(fig. 3.17). To fit the present data, the independent variable must be 1000/T, so from the

table in figure 3.17, 2 is entered. With a change in the independent variable, the starting

value, stopping value, and the step increment are all requested. In addition, the user can

Terminal > on

Listing file > off

Plot file(s) > off

27
12

3

4

Plot File Menu

p vs. 1000/T

not sslacted

not selected

not selected

Enter number >

3

4

Main Menu

GaAs

terminal and plot fil©(s)

Material > Output to > Plot file(s) : p vs. 1000/T

Output > short set

Input data i Independent variable > Temp

Start > 300.0000

Stop > 300.0000

Step > 1„0000

Dopants Densitj(cm-3) Energy(e¥)

none

Execute

Exit

DegeneracyEnter number > 4

Figure 3.14. Plot File Menu.

Input Data Selection Menu

1 Independent variable > Temp

Start > 300,0000

Stop > 300.0000

Step > 1.0000

2 Impurity data:

Dopants Density (cm-3) Energy (©V) Degeneracy

none

Enter number > 1

Figure 3.15. Input Data Selection Menu.

change between linear and logarithmic stepping of the independent variable.

28
Independent Vzuriable Selection Menu

Independent v£n:iable > Temp

Start > 300.0000

Stop > 300.0000

Step > 1.0000

1 Ne¥ independent variable

2 New starting value

3 New final value

4 New step (log or linear)

Enter number (s) > 1

Figure 3.16. Independent Variable Selection Menu.

ImpurityNew Independent Variable Selection

1 Temperature (K)

2 1000/Temp

Density (cm-3) Energy(eV)

Not Selected 3

Not Selected 6

Not Selected 9

Not Selected 12

Not Selected 15

Not Selected 18

Enter number > 2

Enter the starting value > 4

Enter the final value > 56

Do you want to change to log scale

Enter the step value > 4

4

7

10

13

16

19

(y/n) > n

Degeneracy

5

8

11

14

17

20

Figure 3.17. New Independent Variable Selection Menu.

With this completed as shown, the user is returned to the Input Data Selection Menu

(fig. 3.18). To enter the impurity parameters, select 2 and choose the impurity type from

the Impurity Selection shown previously in figure 3.7. The choices are, for donors,

Dl, D2, and D3, and for acceptors, Al, A2, and A3. Here, dl is entered, signifying that

29
parameters for a donor are to be entered. The Impurity Data Entry prompts are issued

as shown in figure 3.19.

Input Data Selection Menu

1 Independent variable > 1000/T

Start > 4.0000

Stop > 56.0000

Step > 4.0000

2 Impurity data:

Dopants Density (cm-3) EnergyCef) Degeneracy

non®

Enter number > 2

Figure 3.18. Input Data Selection Menu.

Impurity Data Entry

123456789012

Enter the name (up to 12 characters) > Silicon

Enter the density > 9. 47914

Enter the energy > .006

Enter the degeneracy > 2

Impurity Selection

Type Dopants Density (cm-3) Energy (©¥)

Dl Silicon 9.470E+14 0,0060

D2 none

D3 none

Ai none

A2 none

A3 none

Enter type > al

Degeneracy

2.0000

Figure 3.19. Impurity Selection Inputs.

Following the instructions, the parameters listed in figure 3.11 can be entered. The impurity energy requested is the difference between the conduction band and the donor energy

level or between the acceptor energy and the valence band. The Impurity Selection

30
table is redrawn (lower half of fig. 3.19), and the parameters of the next dopant can be

entered. Upon completion of the data entry for all three impurities, the Impurity Selection menu should look like figure 3.20, and pressing return brings back the Input Data

Selection Menu (fig. 3.21).

Impurity Selection

Type Dopants Density (cm-3) Energy(eV) Degeneracy

Dl Silicon 9.470E+14 0.0060 2.0000

D2 none

D3 none

Al Ceirbon 3.760E+15 0.0250 4.0000

A2 defect 7.020E+16 0.0730 4.0000

A3 none

Enter type >

Figure 2.20. Completed Dopant Menu.

Input Data Selection Menu

1 Independent variable > 1000/T

Start

Stop

Step

4.0000

56.0000

4.0000

2 Impurity data:

Dopants Density(cm-3)

Silicon

Ceurbon

Defect

9.4700E+14

3.7600E+15

7.0200E+16

Energy (eV)

0.0060

0.0250

0.0730

Degeneracy

2.0

4.0

4.0

Enter number >

Figure 3.21. Input Data Selection Menu.

Enter a carriage return to bring up the Main Menu, followed by 5 to execute. The terminal

output is shown in figure 3.22, and the plot file output (PLQT1.DAT) in figure 3.23.

With the aid of a graphics program, this plot file can be compared with the data, as shown in figure 3.24. It is immediately apparent that the fit obtained using EPROP and

the parameters reported by Ta et al. (dashed line) is not as tight as the fit shown in

31
Electrical Properties of Gallium Arsenide

Dopants Density(cin-3) Energy(eV) Degeneracy

Silicon

Carbon

Defect

9.470E+14

3.760E+15

7.020E+16

0.0060

0.0250

0.0730

2.0000

4.0000

4.0000

1000/T EF n P Ndl+ Nal4. 0000 0 . 110151 4 .0681E-10 4 .3524E+16 9 . 4700E+14 3 .4918E+15

8. 0000 0 .061920 0 .OOOOE+00 8 .1402E+15 9 .4700E+14 3 .3278E+15

12. 0000 0 .045441 0 .OOOOE+00 2 .4806E+15 9 .4700E+14 3 .0515E+15

16. 0000 0 .034941 0 .OOOOE+00 1 .3726E+15 9 .4700E+14 2 .3045E+15

20. 0000 0 .029691 0 .OOOOE+00 6 .5600E+14 9 .4700E+14 1 .6022E+15

24. 0000 0 .027239 0 . OOOOE+00 2 .4893E+14 9 .4700E+14 1 .1959E+15

28. 0000 0 .026242 0 .OOOOE+00 7 .7113E+13 9 .4700E+14 1 .0241E+15

32. 0000 0 .025882 0 .OOOOE+00 2 .1340E+13 9 .4700E+14 9 .6833E+14

36. 0000 0 .025732 0 .OOOOE+00 5 .7264E+12 9 .4700E+14 9 .5275E+14

40. 0000 0 .025646 0 .OOOOE+00 1 .5410E+12 9 .4700E+14 9 .4852E+14

44. 0000 0 .025584 0 .OOOOE+00 4 .1915E+11 9 .4700E+14 9 .4741E+14

48. 0000 0 .025535 0 .OOOOE+00 1 .1531E+11 9 .4700E+14 9 .4713E+14

52. 0000 0 .025493 0 .OOOOE+00 3 .2045E+10 9 .4700E+14 9 .4703E+14

56. 0000 0 .025458 0 .OOOOE+00 8 .9819E+09 9 .4700E+14 9 .4719E+14

Computation Complete

FORTRAN STOP

Figure 3.22. Terminal Output.

figure 3.11. This could be due to differences in the temperature-dependent quantities

(bandgaps, densities of states, and effective masses) and illustrates the fact that when the

model is incompletely specified, the impurity parameters have a greater degree of uncertainty than the statistical deviations in the fit. Differences can also arise from inaccuracy

in calculating the Fermi-Dirac integral, although this is unlikely in cases such as this where

the Fermi level is not close to either band edge. In situations where it is of interest to

make accurate comparisons, EPROP can be used as a benchmark to compare published

impurity parameters against reported data using known temperature-dependent constants.

A closer fit can be obtained by using EPROP to vary the impurity parameters at a single

temperature. For example, since the slope of the data at low temperatures is due to the

thermal activation of the carbon impurity, the carbon activation energy was varied in a

single EPROP computation to fit the lowest temperature data point. Similarly, since the

slope of the line in the 100- to 200-K range is controlled by the defect, its activation energy can be varied to fit a data point in this range, and so on. By making informed guesses, the

impurity parameters listed in the upper part of figure 3.24 were obtained. The fit which

32
1000/T P

ft r\r\r\r\ 4

QO . OOOU o8 . 1402E+lb

12 AAAA . UUUU 2 . 4806E+15

16 AAAA . 0000 1 . 3726E+15

AAAA . 0000 6 . 5600E+14

24 . 0000 2 . 4893E+14

28 .0000 7 . 7113E+13

32 .0000 2 . 1340E+13

36 .0000 5 .7264E+12

40 .0000 1 .5410E+12

44 .0000 4 .1915E+11

48 .0000 1 .1531E+11

52 .0000 3 .2045E+10

56 .0000 8 .9819E+09

Figure 3.23. PL0T1.DAT Output File Format.

resulted is shown as the solid line. This does not represent an optimiim solution, but the

fit is visibly improved. These changes amount to a decrease in all the reported impurity

parameters (caxbon density —15%, defect density —37%, carbon activation energy —4%,

and defect activation energy —14%) and show the extent to which the impurity parameters

can be sensitive to the model and temperature-dependent parameters used.

33
0 10 20 30 40 50 60

1000/T iK^'^)

Figure 3.24. Hole Density in GaAs (Calculated). Comparison of published fit (dashed curve) with modified

fit (solid curves). Both curves were computed using EPROP.

34
3.3. Sample Session — Full Set

As an example of the full set option, the impurity parameters used by Larrabee et al. [1] in their electrical properties program are reproduced. They computed the temperature

dependence for closely compensated Si doped with phosphorus and boron. To change

to the full set option, EPROP is run, bringing up the Main Menu obtained during the

previous run, figure 3.25. To change the material to Si, simply enter 1 and the Material

Selection table is presented, figure 3.26. (This menu has been provided in case other

materials are incorporated.)

Main Menu

1 Material > GaAs

2 Output to > terminal and plot file(s)

Plot file(s) : p vs. 1000/T

3 Output > short set

4 Input data : Independent variable > 1000/T

Start > 4.0000

Final > 56.0000

Step > 4.0000

Dopants

Silicon

Carbon

Defect

Density (cm-3)

9.4700E+14

3.7600E+15

7.0200E+16

Energy (eV)

0.0060

0.0250

0.0730

Degeneracy

2.0

4.0

4.0

5 Execute

6 Exit Enter number > 1

Figure 3.25. Main Menu.

Material Selection

Silicon

G Gallium Arsenide

Enter letter > s

Figure 3.26. Material Selection Menu.

35
The Main Menu is then re- displayed with the Material entry now indicating Si. The

output destinations can be modified to eliminate the plot file by entering 2 to bring up

the Output Device Selection Menu, figure 3.27. If the number 123 is entered, all three

output devices are changed. Here, the terminal and plot file output are turned off", and the

listing file is turned on. Next, from the Main Menu, the number 3 is input to choose the

output set. The Output Set Selection Menu is then displayed as shown in figure 3.28.

In this example, the number 2 for the full set option is chosen.

Output Device Selection Menu

1 Terminal > on

2 Listing file > off

3 Plot file(s) > on

4 Change plot file(s)

To toggle, enter number (s) > 123

Figure 3.27. Output Device Selection Menu.

Output Set Selection Menu

1 short set

2 full set

3 constants

4 user specified

The current selection is short set

Enter number > 2

Figure 3.28. Output Set Selection Menu.

As in the previous example, the input data for the impurity parameters and the independent variables can be entered by first selecting 4 from the Main Menu and then working

through the menus described in the previous section. The impurity configuration to be

computed is described by the resulting Main Menu, figure 3.29.

36
1 Material > 2 Output to > 3 Output > 4 Input data : Independent variable > Start > Final > Step >

Main Menu

Si

listing file onlyfull set

iOOO/T

50.0000

2.0000

-2.0000

Dopants

Phosphorus

Boron

Density(cm-3)

l.OOOOE+15

l.OOOOE+13

Energy (eV)

0.0286

0.0090

Degeneracy

2.0

4.0

5 Execute

6 Exit Enter number >

Figure 3.29. Si Main Menu for Full Set Output Computation.

The full set output data are listed in figure 3.30. Comparison of the output with the re- sults of reference [l] reveals some differences. These are due to the different approximations

used for the Fermi-Dirac integral. The program of reference [1] uses the approximations

recommended by Blakemore [2], which are accurate to roughly 3%, while EPROP uses approximations with an accuracy of better than 5 parts in 10^.

37
Electrical Properties of Silicon

Dopants Density(cm-3) Energy(eV) Degeneracy

Phosphorus l.OOOE-i-15 0.0286 2.0000

Boron l.OOOE-i-13 0.0090 4.0000

1000/T Temp EF n p Ndl+

50.0000 20.0000 1.133781 1 .2857E+12 0 .OOOOE+OO 1 . 1287E+13

48.0000 20.8333 1.133878 2 .4112E+12 0 .OOOOE+OO 1 .2414E+13

46.0000 21.7391 1.133892 4 .3201E+12 0 .OOOOE+OO 1 .4317E+13

44.0000 22.7273 1.133804 7 .36941+12 0 .OOOOE+OO 1 .7372E+13

42.0000 23.8095 1.133611 1 .2043E+13 0 .OOOOE+OO 2 .2035E+13

40.0000 25.0000 1.133311 1 .8986E+13 0 .OOOOE+OO 2 .9005E+13

38.0000 26.3158 1.132911 2.9179E+13 0 .OOOOE+OO 3 .9179E+13

36.0000 27.7778 1.132405 4.3940E+13 0 .OOOOE+OO 5 .3970E+13

34.0000 29.4118 1.131787 6 .5223E+13 0 .OOOOE+OO 7 .5231E+13

32.0000 31.2500 1.131038 9 .5592E+13 0 .OOOOE+OO 1 .0564E+14

30.0000 33.3333 1.130133 1 .3855E+14 0 .OOOOE+OO 1 .4854E+14

28.0000 35.7143 1.129030 1 .9816E+14 0 .OOOOE+OO 2 .0817E+14

26.0000 33.4615 1.127665 2 .7882E+14 0 .OOOOE+OO 2 .8870E+14

24.0000 41.6867 1.125940 3 .8301E+14 0 .OOOOE+OO 3 .9310E+14

22.0000 45.4545 1.123710 5 .0917E+14 0 .OOOOE+OO 6 .1917E+i4

20.0000 50.0000 1.120752 6 .4633E+14 0 .OOOOE+OO 6 .6629E+14

18.0000 65.6556 1.116743 7.7420E+14 0 .OOOOE+OO 7 .8425E+14

16.0000 62.5000 1.111236 8 .7237E+14 0 .OOOOE+OO 8 .8238E+14

14.0000 71.4286 1.103685 9 .3371E+14 0 OOOOE+OO 9 .4356E+14

12.0000 83.3333 1.092734 9 .6652E+14 0 .OOOOE+OO 9 .7562E+14

10.0000 100.0000 1.076687 9 .8023E+14 0 .OOOOE+OO 9 .9022E+14

8.0000 125.0000 1.051182 9 .8642E+14 0 .OOOOE+OO 9 .9641E+14

6.0000 166.6667 1.005619 9 .8879E+14 2 .4657E-12 9 .9883E+14

4.0000 250.0000 0.905928 9 .8968E+14 7 .1978E+00 9 .9969E+14

2.0000 500.0000 0.573313 1 .0669E+15 7 .5932E+13 9 .9995E+14

Nd2+ Nd3+ Nal- Na2- Na3- Eg

O.OOOOE+00 O.OOOOE+OO 1 .OOOOE+13 0 . OOOOE+OO 0 . OOOOE+OO 1.165867

O.OOOOE+00 O.OOOOE+OO 1 .OOOOE+13 0 , OOOOE+OO 0 .OOOOE+OO 1.155866

O.OOOOE+OO O.OOOOE+OO 1 .OOOOE+13 0 .OOOOE+OO 0 .OOOOE+OO 1.155863

O.OOOOE+00 O.OOOOE+00 1 .OOOOE+13 0 .OOOOE+OO 0 .OOOOE+OO 1.165858

O.OOOOE+OO O.OOOOE+OO 1 .OOOOE+13 0 .OOOOE+OO 0 .OOOOE+OO 1.155861

O.OOOOE+OO O.OOOOE+OO 1 .OOOOE+13 0 .OOOOE+OO 0 .OOOOE+OO 1.165841

O.OOOOE+OO O.OOOOE+OO 1 .OOOOE+13 0 .OOOOE+OO 0 , OOOOE+OO 1.155827

O.OOOOE+OO O.OOOOE+00 1 .OOOOE+13 0 .OOOOE+OO 0 OOOOE+OO 1.155809

O.OOOOE+OO O.OOOOE+00 1 .OOOOE+13 0 .OOOOE+OO 0 OOOOE+OO 1.155784

O.OOOOE+OO O.OOOOE+OO 1 .OOOOE+13 0 .OOOOE+OO 0 OOOOE+OO 1.155752

O.OOOOE+OO O.OOOOE+OO 1 .OOOOE+13 0 .OOOOE+OO 0 OOOOE+OO 1.155709

O.OOOOE+OO O.OOOOE+OO 1 .OOOOE+13 0 .OOOOE+OO 0 .OOOOE+OO 1.155651

O.OOOOE+00 O.OOOOE+00 1 .OOOOE+13 0 .OOOOE+OO 0 .OOOOE+OO 1.156674

0 . OOOOE+00 O.OOOOE+OO 1 .OOOOE+13 0 .OOOOE+OO 0 .OOOOE+OO 1.166469

O.OOOOE+OO 0 . OOOOE+OO 1 .OOOOE+13 0 .OOOOE+OO 0 .OOOOE+OO 1 . 156326

0 . OOOOE+OO 0 . OOOOE+OO 1 .OOOOE+13 0 .OOOOE+OO 0 .OOOOE+OO 1 . 155125

0 OOOOE+OO 0 . OOOOE+OO 1 .OOOOE+13 0 .OOOOE+OO 0 .OOOOE+OO 1.154840

0 OOOOE+OO O.OOOOE+00 1 .OOOOE+13 0 .OOOOE+OO 0 .OOOOE+OO 1.154422

O.OOOOE+OO O.OOOOE+00 1 .OOOOE+13 0 .OOOOE+OO 0 .OOOOE+OO 1.153786

O.OOOOE+OO O.OOOOE+OO 1 .OOOOE+13 0 .OOOOE+OO 0 .OOOOE+OO 1.162773

O.OOOOE+OO O.OOOOE+OO 1 .OOOOE+13 0 .OOOOE+OO 0 .OOOOE+OO 1.151053

O.OOOOE+00 O.OOOOE+00 1 .OOOOE+13 O.OOOOE+00 0 .OOOOE+OO 1.147862

O.OOOOE+00 O.OOOOE+00 1 .OOOOE+13 0 .OOOOE+OO 0 .OOOOE+OO 1.141098

O.OOOOE+OO O.OOOOE+00 1 .OOOOE+13 0 .OOOOE+OO 0 .OOOOE+OO 1.123330

O.OOOOE+OO O.OOOOE+OO 9 .9999E+12 0 .OOOOE+OO 0 .OOOOE+OO 1.054783

Sum Charges kT Ec-EF diel Temp**3/2 elme

-1.4869E+09 1.7235E-03 0.022086 11.4472 8 .9443E+01 1 .0619E+00

-2.4526E+09 1.7953E-03 0.021987 11.4480 9 .5091E+01 1 .0620E+00

3.3775E+0g 1.8733E-03 0.021971 11.4488 1 .0136E+02 1 .0621E+00

-2.4264E+09 1.9585E-03 0.022054 11.4497 1 .0835E+02 1 .0622E+00

r.7951E+09 2.0517E-03 0.022240 11.4506 1 .1618E+02 1 .0623E+00

-1.8587E+10 2.1543E-03 0.022630 11.4517 1 ,2500E+02 1 .0624E+00

5.9559E+08 2.2677E-03 0.022916 11.4529 1 .3500E+02 1 .0626E+00

38
-3. 02giE-i-10 2 3g37E- 03 0 .023404 11.4542 1.4640E+02 1 .0628E+00

-8. 6822E+09 2 6345E- 03 0 .023998 11.4567 1. 5951E-)-02 1 .0631E+00

-4. 3814E+10 2 692gE- 03 0 .024714 11.4573 1. 7469E-i-02 1 .0634E-I-00

1. 2382E-i-10 2 8724E- 03 0 .025676 11.4592 1. 9246E-I-02 1 .0638E-i-00 -1. 7962E+10 3 0776E- 03 0 .026622 11.4613 2. 1343E+02 1 .0642E+00

1. 2516E-I-11 3 3143E- 03 0 .027909 11.4637 2. 3853E+02 1 .064gE-i-00

-9. 4925E+10 3 6906E- 03 0.029529 11.4666 2. 6896E+02 1 .0666E+00

-5. 3687E-t-08 3 9170E- 03 0 .031615 11.4700 3. 0e45E+02 1 .0667E-I-00

3. 4226E-«-10 4 3086E- 03 0 .034373 11.4741 3.6366E-t-02 1 .0680E+00

-5. 3419E-I-10 4 7874E- 03 0 .038097 11.4790 4. 1409E+02 1 .06g8E+00

-1. 8522E-I-10 5 3858E- 03 0 .043187 11.4853 4. 9411E+02 1 .0723E+00

1. 6106E+11 6 1562E- 03 0 .060201 11.4933 6. 0368E-t-02 1 .0758E+00

1. 8119E+09 7 1811E- 03 0 .060039 11.5039 7. 6073E+02 1 .080gE+00

1. 0469E-I-10 8 6173E- 03 0 .074366 11.6189 1. OOOOE+03 1 .0887E+00

1. 0737E+09 1 0772E- 02 0 .096680 11.5414 1. 3976E+03 1 .1012E+00

-3. 4360E+10 1 4362E- 02 0 .135479 11.5790 2. 1517E+03 1 .1224E+00

-3. 0870E+09 2 1B43E- 02 0 .217403 11.6646 3. g628E-i-03 1 .1612E+00

-2. 6844E-I-08 4 3086E- 02 0 .481470 11.8840 1. 1180E+04 1 .2568E+00

efmh Nc Nv

5. 8674E- 01 4 7270E+17 l.g413E+17

6. 8684E- 01 6 025gE+17 2. 0646E+17

5 86g7E- 01 6 3678E+17 2. 2013E+17

5 8714E- 01 6 7280E+17 2. 3641E+17

6 8735E- 01 6 1430E+17 2. 5256E+17

6 8762E- 01 6 6107E+17 2. 7ig2E+17

6 87g5E- 01 7 1411E+17 2. g3giE-i-17

5 8837E- 01 7 7467E+17 3. ig08E-t-17

6 888gE- 01 8 4432E+17 3.4811E+17

6 8956E- 01 g 2510E+17 3. 8igOE+17

6 9040E- 01 1 0ig7E+18 4. 2162E+17

5 gi46E- 01 1 1317E+18 4. 6886E-fl7

5 g283E- 01 1 2658E-I-18 5. 2680E-I-17

6 g461E- 01 1 428gE-t-18 6. g665E+17

6 g6g4E- 01 1 6304E-)-18 6. 8257E+17

6 0004E- 01 1 8846E-t-18 7. g360E-«-17

6 0422E- 01 2 .2128E-t-18 g. 3g22E+17

6 ogggE- 01 2 .64g6E-»'18 1. 1368E-)-18 6 .1813E- 01 3 .2631E-t-18 1. 4168E-)-18

6 .2gg6E- 01 4 .1287E+18 1. 836gE+18

6 .4766E- 01 5 .4862E+18 2.5171E+18

6 .74g6E- 01 7 .79g3E+18 3. 7426E+18

7 .1777E- 01 1 .2355E+19 6. 3188£-«-18

7 .8124E- 01 2 .3887E+19 1. 3182E-i-ig

8 .g37gE- 01 7 .6g87E+ig 4. 6624E-t-ig

Figure 3.30. Si Full Set Output Listing File LIST. DAT

39
3.4. Sample Session — Constants

Here the constants used in the program for both GaAs and Si are listed using the constants

option. Since all of the menu manipulations necessary to produce this output have already

been described, the results are simply listed.

The Main Menu for the Si output set is shown in figure 3.31. If impurity parameters

had been present, they would not influence the output, since parameters output under

the constants option depend only on temperature. The terminal output, which is not a complete listing of all the constants, is shown in figure 3.32, and the listing file showing

all of the constants is listed in figure 3.33. Similarly, the Main Menu used to produce the

constants output for GaAs is shown in figure 3.34, followed by the output listing file shown in figure 3.35.

12

3

4

Material

Output to

Output

Input data

Independent

Main Menu

> Si

> terminal and listing file

> constants

variable > Temp

Start > Final > Step >

25.0000

1000.0000

25.0000

Dopants Density(cm-3) Energy (eV) Degeneracy

none

5

6

Execute

Exit Enter number >

Figure 3.31. Main Menu for Si Constants Option.

40
Electrical Properties of Silicon

Dopants Density(cm-3) Energy(eV) Degeneracy

none

Temp 1000/T kT Eg diel Temp**3/2

250000 40

WW 2. 1543E- 03 1. 156841 11 4517 4 50. 0000 20

0000 4. 3086E- 03 1. 156125 11 4741

75. 0000 13 ^^^^ 6.4630E- 03 1. 153501 11 4966 D 100. 0000 1 ft ftftftft 8. 6173E- 03 1. 151063 11.6189 41 A AAA?J.A9 125. 0000 oV • 1. 0772E- 02 1. 147862 i11i x>*tx.*t 4 OS r b£+03

150. 0000 A AAA7 ODD r 1, 2926E- 02 1. 144004 1

41 175. 0000 cD . 71 4.^ f ito 1. 5080E- 02 1. 139554 11 OoOD *\ Q4 CAVxA'9 200. 0000 co

WW 1. 7235E- 02 1. 134581 A A 11 DUVl A 225. 0000 At: . tttt 1.9389E- 02 1. 129152 A A 1

A^i ft 9*7CAVxA^

250. 0000 At . uuuu z • 4 CAQV. 02 1. 123330 11 DO^D 3 9b2o£+03

275. 0000 oJ . D JOrx z • ODIfOA ^AflflT- 02 1. 117175 A A 1 1 A770 oe04£-i-U3 300. 0000 o • ^^^^ z • 02 1. 110741 i A 1 X 7nnn b 325. 0000 o • z • 02 1. 104082 11 1

> 1 zzo cO QCO AVx AO 350. 0000 •J CD r X J • n4 A1 V- 02 1. 097246 A A 11 7K7n a0 b4 f wE+03

375. 0000 oz . ODD r o

02 1. 090278 11 7 AfiA f OA4 OVxAO

400. 0000 oz . 0\f\J\J 3. 4469E- 02 1. 083219 A A 11 7Q-1 A . r VID QO AAAA17XA9

425. 0000 ii . 3. 6624E- 02 1.076108 11 AA o 7A4 AVxAQ

450.0000 ^ • 3. 8778E- 02 1. 068978 11 . O J r r n

0 bflb0£+Uo

475. 0000 ^ . 4 4. 0932E- 02 1. 061861 A A 11 41 A'SCOCxAiL 500. 0000 ^ . 4. 3086E- 02 1. 054783 A A 11 41

4 4 OAVXAA

525. 0000 41OU^O 4. 5241E- 02 1. 047769 11 .9071 41 OAOOVxAA

550. 0000 41

fi4 fiO 4. 7395E- 02 1. 040839 11 .9304 41 . OQQQTxAA ^OB0£+U4

575. 0000 41

7^Q4 r Ool 4. 9549E- 02 1.034008 11 .9537 41 . 37o8£+Q4

600. 0000 4 ODD 1 5. 1704E- 02 1. 027290 11 .9770 41

A aA*7Uj.A/l

. 4887E+04

625. 0000 1. 6000 5. 3858E- 02 1. 020695 12 .0004 1 .6625E+04

650. 0000 1. 6385 5. 6012E- 02 1. 014227 12 .0238 1 .6572E+04

675 0000 1. 4816 5. 8167E- 02 1. 007889 12 .0473 1 .7537E+04

700. 0000 1. 4286 6. 0321E- 02 1. 001680 12 .0708 1 .8620E-«-04 725. 0000 1. 3793 6. 2476E- 02 0. 995596 12 .0944 1 .9521E+04

750. 0000 1. 3333 6. 4630E- 02 0. 989626 12 .1180 2 .0640E+04

775. 0000 1. 2903 6. 6784E- 02 0. 983760 12 .1416 2 .1575E+04

800. 0000 1. 2600 6. 8938E- 02 0. 977981 12 .1653 2 .2627E+04

825. 0000 1. 2121 7. 1093E- 02 0. 972270 12 .1891 2 .3696E-I-04 850. 0000 1. 1765 7. 3247E- 02 0. 966606 12 .2129 2 .4782E+04

875. 0000 1. 1429 7. 5401E- 02 0. 960960 12 .2367 2 .5883E+04

900. 0000 1. 1111 7. 7556E- 02 0. 955304 12 .2606 2 .7000E+04

925. 0000 1. 0811 7. 9710E- 02 0. 949603 12 .2845 2 8133E+04

950. 0000 1. 0626 8. 1864E- 02 0. 943821 12 .3085 2 g281E+04

975. 0000 1. 0266 8. 40igE- 02 0. 937917 12 .3325 3 0444E+04

1000. 0000 1. 0000 8. 6173E- 02 0. 931847 12 .3566 3 1623E+04

Computation Complete

FORTEAN STOP

Figure 3.32. Si Terminal Output Using the Constants Option.

41
Elactrical Properties of Silicon

Dopants Density(cBi-3) En*rgy(«V) Degeneracy

none

Temp 1000/T kT Eg diel Temp**3/2

25 0000 uuoo d a 4 CAOW — A^ 1. 156841 11 4517 1 2600E+02

50 0000 on nnno At a ^AO AV_ A^ 1. 156126 11 4741 3 6366E+02

75 0000 1±o% OaJOO aV a O^W<7 1. 153501 11.4965 6.4962E+02

100.0000 1 0 OOOO www O a A1w 7^17- X r w£i 0^ 1. 151053 R1 RQ 4X 0000174-0^ WwwW£i~Wc7

12B A AO 0000 RQ e O O A A a 0770P- y f f a6£ 09 la 147862 R41 4 4X ^Q7R7-l-0^

0000 WW Ao

ODD r 41 a OQOAV— ^ v^oc AO la 144004 H 4 1 J, Rfi^Q 4X Oi3 f xJCi^yjj 0000 WW co

r Irt^ 1 a bUoUJ!i~ AO la 139564 4 4

J. ± RRAR OOOD o '>4 CA'P + A^

900 0000 www cD oono 1 a 7*5^ RT?- oow^ 1. 134581 4 4 A J. vWX oa£ 891)417 4-0^ Oa£O^JEi~W J 225 0000 A% • 41 a oo la 129152 4 4 xo a

a^ 0^7R0V+0'^ r OW£i wet 250 0000 A% • oono wUUw ^ a ftO la 123330 X X RR4R QR9R'R-t-0^

275 0000 QC I •J^ a o AQfiV- OOtf OA oo la 117175 X X S779 AI RA04174-0^ 300 0000 O JJ O Z a O0OZJL~ AO la 110741 11 7000 5 325 0000 A7U 1 DoAO Z a OUUDJL AO 1. 104082 11 7228 5 8E80E+03

^RO 0000 WW WW •> So 1 1 J a AH Ai V~ AO 1.097246 11 7467 g R478E+03

375 0000 ODD f O<3 a <£ J 1 D£i oowz 1. 090278 11 7686 7 2818E+03

400 0000 z ROOO DWVW O a AAAQT- oow^ 1. 083219 7916 3 OOOOE+03

426 0000 o »O a DDZ*t£i oowz 1. 076108 X X ft^ o x^w4A ft 7A1 r wXOAftP-l-O^ vw 4R0 0000 WWWW £ • a a Off OJS AO la 068978 X X 8^77 Qw 47K OOOO wV/wW o<s •

•1 AC9 A4 a A0Q017-. AO 1. 061861 JL X ODWO 4X DvV OOOO Wwww <£ . A AAA 4 a JUoO£~ AO la 054783 4 4 X X RR40 4X A J. 0 w£i~ vTE 625 OOOO 1

Q AAQ 4 a OA4 V — AO 1. 047769 4 4 X X Q071 ow r J> 4X 560 OOOO 41

At a r JWo£ AO la 040839 11 9304 1 2899E+04

575 OOOO 1 a 79Qi r Jol A% a VOtVa AO la 034008 11 9537 1 3788E+04

600 OOOO 1 a A A A7 c0 a H 7AAV-. AO la 027290 11 9770 1 4697E+04

625 OOOO 1. 6000 6. 3868E- 02 la 020695 12 0004 1 6626E+04

650 OOOO 1. 5386 5 6012E- 02 la 014227 12 0238 1 6572E+04

676 OOOO 1. 4815 5. 8167E- 02 la 007889 12 0473 1 7537E+04

700 OOOO 1. 4286 6 0321E- 02 la 001680 12 0708 1 8620E+04

725 OOOO 1. 3793 6 2476E- 02 Oa 995596 12 0944 1 9521E+04

760 OOOO 1. 3333 6 4630E- 02 Oa 989626 12 1180 2 0540E+04

775 OOOO 1. 2903 6 6784E- 02 Oa 983760 12 1416 2 1575E+04

800 OOOO 1. 2600 6 8938E- 02 Oa 977981 12 1663 2 2627E+04

826 OOOO 1. 2121 7 iog3E- 02 Oa 972270 12 1891 2 3696E+04

850 OOOO 1 1765 7 3247E- 02 Oa 966606 12 2129 2 4782E+04

875 OOOO 1 1429 7 5401E- 02 Oa 960960 12 2367 2 5883E+04

900 OOOO 1 1111 7 7556E- 02 Oa 966304 12 2606 2 7000E+04

925 OOOO 1 0811 7 9710E- 02 0. 949603 12 2846 2 8133E+04

960 OOOO 1 0526 8 1864E- 02 0 943821 12 3085 2 9281E+04

075 .0000 1 0266 8 4019E- 02 0 937917 12 3326 3 0444E+04

1000 .0000 1 OOOO 8 6173E- 02 0 931847 12 .3566 3 1623E+04

efme efmh Nc Nv

1 .0624E-i-00 6. 8762E- 01 6 6107E+17 2 .7ig2E+17

1 .0680E+00 6a 0004E- 01 1 8845E4-18 7 .9360E+17

1 .0773E+00 6 2158E- 01 3 5074E+18 1 .5372E+18

1 .0887E+00 6 4765E- 01 6 .4862E+18 2 .6171E+18

1 .1012E+00 6 7496E- 01 7 .7993E+18 3 .7426E+18

1 .1140E+00 7 0135E- 01 1 .0431E+19 6 .2111E+18

1 .1266E-i-00 7 2554E- 01 1 a3367E+19 6 .g092E+18

1 .1386E+00 7 4691E- 01 1 .6696E+19 8 .8172E+18

1 .1502E+00 7 6639E- 01 2 .0106E+19 1 .0914E+19

1 .1612E+00 7 8124E- 01 2 .3887E+19 1 .3182E+ig

1 .1718E+00 7 94g6E- 01 2 .7937E+19 1 .5610E+19

1 .1821E+00 8 .0713E- 01 3 .2252E->-ig 1 .8196E+ig

1 .1922E+00 8 .1834E- 01 3 .6830E+19 2 .og46E-i-ig

1 .2020E+00 8 .2912E- 01 4 .1672E+ig 2 .3873E+ig

1.2117E+00 8 .3g86E- 01 4 .6777E+19 2 .6gg2E+ig

1 .2212E+00 8 .5074E- 01 6 .2141E+19 3 .0316E+ig

1 .2306E+00 8 .6182E- 01 6 .7766E+ig 3 .3853E-i-ig

42
1.2395E-»-00 1.2479E+00

1.2568E-<-00 1.2631E+00

1.2698E-t-00 1.2761E+00

1.2824E+00

1.2892E-I-00 1.2976E+00

1.3090E+00

1.3262E-)-00

1.348gE+00

1.3832E-)-00

1.4322E+00

1.B009E+00

1.5956E-(-00

1.7234E+00

1.8931E+00

2.114gE-t-00

2.4009E-t-00 2.7646E+00

3.2220E+00

3.7912E+00

8.7293E-01

8.8374E-01

8.9379E-01

9.0254E-01

9.0948E-01

9.1420E-01

9.1653E-01

9.1667E-01

9.1531E-01

9.1390E-01

9.1475E-01

9.2130E-01

9.3837E-01

9.7236E-01

1.0316E+00

1.1265E+00

1.2702E+00

1.4784E+00

1.7701E+00

2.1680E-t-00 2.6987E+00

3.3g29E-)-00

4.2866E-)-00

6.3613E-i-ig

e.gegcE+ig

7. Bg87E+ig

8.246gE-Mg

8. gi34E+ig

g.5g88E+ig

1.0307E+20

1.104BE-I-20

1.182gE-i-20

1.2683E+20

1.3646E-i-20

1.476gE-t-20

1.6136E-f20

1.78B8E+20

2.00g4E-<-20

2.3064E-t'20 2.7078E+20

3.2BB7E+20

4.010BE-t-20

B.0B41E-I-20

6.B002E-I-20 8.E033E'f20

1.1273E+21

3.76ggE+ig

4.1B36E+ig

4.B624E-i-ig

4.9810E+ig

B.4027E+ig

6.8204E-i-ig

6.2278E+ig

6.622BE+ig

7.0082E+ig

7.3gg2E+ig

7.82B0E+ig

8.3367E-i-ig

9.0166E-)-19

g.9903E-t-19

1.1449E+20

1.3683E+20

1.7132E+20

2.2468E-t-20 3.0708E+20

4.3371E+20

6.268gE+20

9.1887E+20

1.3B63E-I-21

Figure 3.33. Si LIST. DAT File Using the Constants Option.

Main Menu

1 Material > GaAs

2 Output to > listing file only

3 Output > constants

4 Input data

Independent ve^riable > Temp

Start > 25.0000

Stop > 1000.0000

Step > 25.0000

Dopajits Density(cni-3) Energy(eV) Degeneracy

none

5 Execute

6 Exit Enter number > 5

Figure 3.34. Main Menu for GaAs Constants Option.

43
Electrical Properties oi Gallium Arsenide

Dopants Density(cm-3) Energy(eV) Degeneracy

none

Temp 1000/T kT Eff diel Temp**3/2

26.0000 40.0000 2. 1643E-03 1.517626 1^ . to f 2 1 50.0000 20.0000 4. 3086E-03 1.613680 1 9 47A4 3 75.0000 13.3333 6. 4630E-03 1.608103 1 9 .Olio C4 4 A AD AOOVxAO

100.0000 10.0000 8. 81731-03 1.601220 4 n 1^ 1 A A AACx A9! 125.0000 8.0000 1. 0772E-02 1 493330 12 C O A A

. 6860 1 . 3975E+03

IBO 0000 6 a 6637 1. 2926E-02 1 464343 12 . 6232 1 . 8371E+03

17B 0000 5 . 7143 1. 6080E-02 1 47E32B 12 . 6604 2 . 3160E+03

200 0000 6 . 0000 1. 7236E-02 1Ja • 46B48S *W^Wft# 12 . Bo70 2 225.0000 4 , 4444 1. 9389E-02 1 465217 12 . f oto 3 AVJ. A O 250.0000 <L^ • 0000 V W V w 2. 1543E-02 1 444592 12 . 7720 3 O C OOV J- A *>

. 9d2o£+03

275 0000 3.6364 2. 3698E-02 1 433665 12 . 8092 4 . &604E+03

300 0000 3 3333 2.6852E-02 12 . 8464 5 . 1962E+03

325 0000 ^ 1 411070 12 . 8836 6 . 8590E+03

350 W0V D 0000 WW 2 . 8671 qo

12 . 9208 6 . b479E+03

375 0000 2«• 6667 W WH 12 OCO A 7 400 & W V .a 0000 V w W W 2A • 5000 V W V W 1 37B821 12 . V9b2 8

A A AAVJ. A O 425.0000 2 . 3629 3. 6624E-02 1 363789 1

. U32% B taa avxA9

450.0000 2.2222 3. 8778E-02 1 361643 13 . 0696 A

V . d4o9£+03

475 ^ V • 0000 WWW 2 . 1053 4. 0932E-02 1 339397 13 . 1068 1 . 03o2E+04

BOO ow • 0000 www 2A > 0000 w w w w 4. 3086E-02 1 3270fi1 13 A A A r\

. 1440 1 . 1180E+04

626 0000 1 . 9048 4. 5241E-02 1 314644 13 4 04 o . 10l2 1 lAOQWJ.AA . 2U20&+U4

550 . 0000 1 . 8182 4. 7396E-02 1 302166 13 OA 1 . 2osoj!iTUrc

675 0000 1 . 7391 4. 9649E-02 1 B 289600 AW 0 W W 13 . 200D 1 600.0000 1 .6667 5. 1704E-02 1 .276985 13 . 292o 1 AAQ717 J.AA 626.0000 1 . 6000 6. 3868E-02 1 264316 13 . 33UU 1 .5626E+04

650.0000 1 5385 5. 6012E-02 1 251598 13 .3672 1 .6672E+04

675.0000 1 .4816 6. 8187E-02 1 238836 13 .4044 1 7537E+04

700.0000 1 .4286 6. 0321E-02 1.228030 13 .4416 1 8620E+04

725.0000 1.3793 6. 2475E-02 1.213187 13 .4788 1 9521E-t-04 760.0000 1 . 3333 6. 4630E-02 1 .200309 13 .6160 2 0540E+04

775.0000 1.2903 6. 8784E-02 1.187399 13 .6532 2 1676E+04

800.0000 1 2500 6. 8938E-02 1 174458 13 .6904 2 2627E+04

825.0000 1 . 2121 7. 1093E-02 1 161480 13 .6276 2 3696E+04

860.0000 1 . 1765 7. 3247E-02 1 148496 13 .6648 2 4782E+04

875.0000 1 . 1429 7. 6401E-02 1 136478 13 .7020 2 5883E+04

900.0000 1 . 1111 7. 7556E-02 1A a 122438 AAA aQ#W 13 .7392 2 7000E+04

926.0000 1 . 0811 7. 9710E-02 1 109376 13 .7764 2 8133E+04

950.0000 1 .0526 8. 1864E-02 1 096296 13 8136 2 9281E+04

975.0000 1 . 0266 8. 4019E-02 1 083196 13 8608 3 0444E-«-04 1000.0000 1 0000 8. 6173E-02 1X • 070080 Wf www 13 8880 3 1623E+04

efme Nc Delta EGL Delta EGX

6 .6941E-02 R 1. 0466E+16 0A* 97(8^F AI Ugar&Gj, + 17V 2 96821-01 4 6222E-01

6 .6791E-02 aG 2. 9473E+16 fi 43677+17 2 95371-01 4 6279E-01

6 .6574E-02 6 2172E-01 5. 3880E+16 1.1821E+18 2 9470E-01 4 63621-01

6 .6305E-02 6 2167E-01 8.2463E+16 1.8191E+18 2 9388E-01 4 64661-01

6 .5997E-02 5 2138E-01 1. 1443E+17 2.6409E+18 2 9294E-01 4 65821-01

6 .5668E-02 6 2118E-01 1. 4926E+17 3.3382E+18 2 91901-01 4 67121-01

6.6293E-02 5 2097E-01 1. 8653E+17 4.2040E4-18 2 90791-01 4 68501-01

6.4908E-02 6 2075E-01 2. 2688E+17 6.1330E+18 2 89611-01 4 69971-01

6.4606E-02 5 2062E-01 2. 8703E+17 6.1208E+18 2 88391-01 4 71501-01

6.4089E-02 6 2028E-01 3. 0972E+17 7.1638E+18 2 8712E-01 4 73081-01

6 .3660E-02 5 2003E-01 3. 6374E+17 8.2590E+1P 2 8682E-01 4 74711-01

6 .3221E-02 5 1978E-01 3. 9889E+17 9.4037E+18 2 8448E-01 4 76381-01

6 .2772E-02 6 1963E-01 4. 4600E+17 1.0696E+19 2 8312E-01 4 78071-01

6 .2315E-02 6 1927E-01 4. 9190E+17 1.1833E+19 2 8174E-01 4 79801-01

6 .1852E-02 5 .1902E-01 5. 3946E+17 1.3113E+19 2 80331-01 4 81661-01

6 .1382E-02 6 .1876E-01 5. 8763E+17 1.4435E+19 2 7891E-01 4 83321-01

6. 0906^-02 5 .1849E-01 6. 3600E+17 1.6797E+19 2 ,7748E-01 4 85121-01

44
6.0426E-02

B.gg41E-02

5.g451E-02

5.89682-02

5.8462E-02

5.7962E-02

B.7459E-02

6.6954E-02

5.6446E-02

6.5936E-02

6.5422E-02

B.4907E-02

5.4389E-02

B.3870E-02

B.3349E-02

B.2826E-02

B.2301E-02

B.1775E-02

B.1247E-02

B.0717E-02

B.0186E-02

4.9654E-02

4.9120E-02

B.1823E-01

5.1797E-01

B.1771E-01

5.1744E-01

B,1718E-01

6.16g2E-01

5.1666E-01

B.1639E-01

B.1613E-01

B.1B87E-01

B.1B61E-01

B.1B3BE-01

B.lBlOE-01

B.1484E-01

6.14B9E-01

B.1433E-01

B.1408E-01

5.1383E-01

B.1358E-01

B.1333E-01

5.1308E-01

5.1284E-01

6.12B9E-01

6.8476E+17

7.3368E+17

7.8268E+17

8.316BE+17

8.80B1E+17

9.2918E+17

9.77B8E+17

1.0256E-I-18 1.0732E+18

1.1204E+18

1.1670E+18

1.212gE-i-18

1.2B82E-I-18 1.3027E+18

1.3466E+18

1.38g4E+18

1.431BE-t-18 1.4726E+18

1.B127E+18

1.BB18E+18

l.B8g8E+18

1.6267E+18

1.6626E+18

1.7ig8E+ig

1.8637E+ig

2.0112E+19

2.1623E+ig

2.3168E+ig

2.4747E+ig

2.63B8E+19

2.8001E+19

2.g67BE-<-ig

3.1380E+ig

3.3114E+19

3.4878E+19

3.6670E+19

3.8490E+19

4.0337E+19

4.2211E+19

4.4112E-I-19 4.603gE+ig

4.7ggiE-)-ig

4.gg68E+ig

B.ig70E-t-ig

B.3g96E-i-19

B.6046E+ig

2.7603E-01

2.7457E-01

2.7310E-01

2.7161E-01

2.7012E-01

2.6862E-01

2.6712E-01

2.6561E-01

2.640gE-01

2.62B7E-01

2.6104E-01

2.BgBlE-01

2.B7g7E-01

2.B643E-01

2.B488E-01

2.B334E-01

2.517gE-01

2.B023E-01

2.4868E-01

2.4712E-01

2.45B6E-01

2.43ggE-01

2.4243E-01

4.86g3E-01

4.887BE-01

4.gOBgE-01

4.g244E-01

4.9430E-01

4.g617E-01

4.9804E-01

4.g993E-01

5.0183E-01

5.0373E-01

B.0B63E-01

B.07BBE-01

6.0946E-01

B.1139E-01

B.1331E-01

B.1B2BE-01

B.1718E-01

B.1912E-01

B.2106E-01

B.2301E-01

5.2496E-01

5.2691E-01

5.2886E-01

Figure 3.35. GaAs LIST. DAT File Using the Constants Option.

45
3.5. Sample Session — User-Specified Set

A particularly useftd feature of EPROP is the user-specified output set. When this

output option is in effect, the output can be put into almost any format desired. This can

be used to limit the data output to only what is desired, or it can be used to create data

for input to another program, as was done to fit the data of Nichols et al. in section 2.5.

As an example, a us er- specified set will be created to examine the room-temperature

electrical properties of GaAs doped with carbon and a monovalent deep level with an

energy appropriate for EL2 [30]. Here, the position of the Fermi level will be studied as a

function of the EL2 and carbon densities.

If the user-specified output set is selected (through selection 3, the Output to option

in the Main Menu), the User-Specified Output Set menu is displayed (see fig. 3.36).

The screen is divided into two parts, with instructions at the bottom. The Current Set

is what would be output if the program were run; in this case, it would give only the

reciprocal temperature. The first entry is always the independent variable and will be

changed automatically if the independent variable is changed. It cannot be changed in any

other way from this menu.

The second listing, Optional Output Parameters, gives the complete list from which the

user-defined output can be selected. To create an output which contains EF, p, Ndl+,

and Nal-, the response is A3 5 6 8 (or C3 5 6 8). Pressing carriage return rewrites the

menu with the user-specified output listed under current set. Changes can be made if necessary using the R command for removing, the A command for adding, and C to start over (creating). A carriage return brings back the Main Menu.

Using the menus previously described, the independent variable and dopant parameters

are entered (fig. 3.37). Here, for a background silicon density of lO^^cm"^, and an EL2

concentration of 10^^ cm~^, the carbon density is stepped from 10^^ to 10^®cm~^. The

user-defined terminal output which results when the program is run is shown in figure 3.38.

This dependence of the Fermi energy on the carbon and EL2 concentrations, with the

background silicon concentration fixed at lO-'^ cm~^ is shown in figure 3.39. With no

EL2 present, the resistivity changes abruptly from n-type to p-type as the carbon density

becomes greater than the silicon density. If high resistivity material is desired, a broader

range in carbon density can be tolerated as the deep electron trap density is increased.

The minimum carrier densities are obtained for a Fermi-level position near the intrinsic

Fermi energy; this is best achieved using large trap densities or by introducing traps with

energies closer to the intrinsic Fermi energy.

46
User-Specified Output Set

Current Set : 1> 1000/T

Optional Output Peorameters : 1> Temp 2> 1000/T 3> EF 4> n 5> P

6> Ndl+ 7> Nd2+ 8> Nd3+ 9> Nal- 10> Na2-

11> Na3- 12> kT 13> ES 14> Ec-EF 15> Sum Charges

16> Temp**3/2 17> diel 18> efme 19> efznh 20> Nc

21> Nv 22> Nc' 23> Nv' 24> nG 25> nL

26> nX 27> Delta EGL 28> Delta EGX

Enter R[number(s)] to remove from the current output set,

A [number (s)] to add to the current output set, or

C[number(s)] to create a nev set.

Separate numbers by commas or spaces, press return to exit.

(Note: Use numbers from the Current set for a removal)

Input > a 3 5 6,8

User-Specified Output Set

Current Set : 1> 1000/T 2> EF 3> P 4> Ndl+ 5> Nd3+

Optional Output Parameters : 1> Temp 2> 1000/T 3> EF 4> n 5> P

6> Ndl+ 7> Nd2+ 8> Nd3+ 9> Nal- 10> Na2-

11> Na3- 12> kT 13> Eg 14> Ec-EF 15> Sum Charges

16> Temp**3/2 17> diel 18> efme 19> efmh 20> Nc

21> Nv 22> Nc' 23> Nv' 24> nG 25> nL

26> nX 27> Delta EGL 28> Delta EGX

Enter R[number(s)] to remove from the current output set,

A [number (s)] to add to the current output set, or

C [number (s)] to create a new set.

Separate numbers by commas or spaces, press return to exit.

(Note: Use numbers from the Current set for a removal)

Input >

Figure 3.36. User-Specified Output Menu.

47
Main Menu

1 Material > GaAs

2 Output to > terminal only

3 Output > user specified

4 Input data : Independent variable > Nal

Start > l.OOOE+14

Final > l.OOOE+18

Divisions/Decade > 5.000E+00

Temperature (K) > 300.0000

Dopants

EL2

Silicon

Carbon

Density(cm-3)

l.OOOOE+15

l.OOOOE+15

ind . var

Energy (eV)

0.8300

0.0060

0.0250

Degeneracy

2.0

2.0

4.0

5 Execute

6 Exit Enter number >

Figure 3.37. Main Menu for User-Specified Output.

48
Electrical Properties of Gallium Arsenide

Dopeints

EL 2 Silicon

Carbon

Density(cm-3) Energy(eV) Degeneracy

1.000E+i5

l.OOOE+15

l.OOOE+14

0.8300

0.0060

0.0250

2.0000

2.0000

4.0000

P wai~

1 .OOOE+14 X m 0

CQ'a7'ir— r>Q 1AAAAE'j.'l A . UUUU£j+l'±

1 .585E+14 A1 . ZD jLDoD D . U0s70£i Uo z

•<1 . Oo43r.+ l*t 2 .512E+14 i ZOoDl 1 D

q0C -1 "1 017^.4 A

3 .981E+14 i . oO

CI RQP — . OXOVEi KJO ft . \JxX XCt+Uci 0 . yollri+l^

6 .310E+14 X . 1 D . OtOZSL+Vo D

1 .OOOE+15 r\

yj . Q

•3 1

41 AAAATTj-H C . vJUUU£i+lb

1 .585E+15 0

.

565699 2 . 9914E+09 5 .8489E+14 1 . 5849E+15

2 .512E+15 0. 254252 5 . 1047E+14 1 .OOOOE+15 2 .5105E+15

3 .981E+15 0. 219307 1 .9724E+15 1 .OOOOE+15 3 .9724E+15

6 .310E+15 0. 199279 4 .2798E+15 1 .OOOOE+15 6 .2799E+15

1 .OOOE+16 0. 183385 7 .9135E+15 1 .OOOOE+15 9 .9134E+15

1 .585E+16 0. 169354 1 .3614E+16 1 .OOOOE+15 1 .5614E+16

2 .512E+16 0. 156346 2 .2510E+16 1 .OOOOE+15 2 .4509E+16

3 .981E+16 0. 143996 3 .6276E+16 1 .OOOOE+15 3 .8276E+16

6 .310E+16 0. 132143 5 .7334E+16 1 .OOOOE+15 5 .9334E+16

l.OOOE+17 0. 120737 8 .9026E+16 1 .OOOOE+15 9 .1027E+16

1 .585E+17 0. 109786 1 .3575E+17 1 .OOOOE+15 1 .3775E+17

2 .512E+17 0. 099327 2 .0294E+17 1 .OOOOE+15 2 .0494E+17

3 .981E+17 0. 089391 2 .9702E+17 1 .OOOOE+15 2 .9902E+17

6 .310E+17 0. 079990 4 .2527E+17 1 .OOOOE+15 4 .2727E+17

1 .OOOE+18 0. 071103 5 .9599E+17 1 .OOOOE+15 5 .9798E+17

1 .585E+18 0. 062683 8 .1871E+17 1 .OOOOE+15 8 .2071E+17

Computation Complete

FORTRAN STOP

Figure 3.38. User-Defined Terminal Output.

49
1.4

1.2

1.0

0)

g 0.8

111 z

m

0.4

0.2

T

1—rr 1 r

1 1

I I

I —r~—I—r-r

Conduction band

Intrinsic Fermi energy

Valence band

' ' ' '

I I I I

' III J L_L

.15 16

10 10 10

CARBON DENSITY (cm"^)

17

1018

Figure 3.39. Fermi Energy of GaAs. Dependence on carbon and EL2 density for a fixed silicon background

density of 10" cm"*.

50
4. Program Operations and Output

The purpose of this section is to describe the EPROP program in enough detail that

the interested user can modify it to fit a particular purpose. To make this section more

readable and easier to reference, all names of variables and constants are in boldface. The

variables and constants used in the program are also described in the following sections.

4.1. Program Structure and Flow Description

The program executes in two parts, an interactive part and a computational part. First,

the parameters from the previous run are read from the file EPROP . DAT, and the main menu

is presented. The main menu is the dispatcher for the interactive part of the program.

The user can gain access to any of the menus and submenus starting from the main menu.

In general, each of the menus and submenus is a single subroutine. The routines handling

submenus are called from the routines handling more general menus, the highest menu

being the main menu which is the subroutine MENU. The way these menus interconnect

is described by the diagram of figure 4.1, which further illustrates the hierarchy of the

routines. The arrows show the paths which the program flow can follow. The individual

routines are described in the next section.

If, for example, the independent variable needs to be changed, the program flow is directed to INPSEL (the INput Parameters SELection menu) and from there to INDSEL

(INDependent-variable SELection). If the independent variable is no longer temperature,

TSEL (Temperature SELection) is called to receive the temperature for the computation.

The return trip to the main menu subroutine MENU is made by retracing the same path.

Note that the diagram above represents the flow of control among the menu routines; it does not always reflect the order in which the menus can be presented. The transition from

MENU to a lower subroutine always involves display of the intermediate menus. However,

in several cases, a low order subroutine will appear to return to the level above its calling

routine. This is true of TSEL, PLTSEL (PLoT SELection), and USPEC (User-SPECified

output).

In one special case, not shown in figure 4.1, the subroutines INDSEL, DOPSEL (DOPant

SELection), and TSEL can be called directly from MENU. This occurs when the input

file, EPROP.DAT is not available. (The actual sequence of events in such a case is discussed

in sec. 3.1.)

The computational part of the program starts when the user exits the main menu. While

the interactive part of the program has a flexible flow pattern, the computational part has a

structured control flow as shown in flgure 4.2. The capitalized names in the small boxes are individual routines. The large boxes contain the names of routines which themselves call

other routines. The content of these larger boxes is charted elsewhere (figs. 4.1 and 4.3).

Upon completing the interactive part (MENU) the program generates an impurity table

(IMPTBL) to be output to the destinations selected earlier. The HEADER routme then

generates the column headings. If the independent variable is not related to temperature,

51
Figure 4.1, Program Flow For Menu Manipulation. The labels refer to subroutines, and the arrows between the subroutines show the calling and returning paths.

52

No

Is the

independent

var. T or 1000/T

Yes

TVARS

Figure 4.3. Program Flow In The Computation Subroutine, COMP.

54
then the temperature-dependent constants can be computed once and for all in TVARS.

Otherwise, they will have to be computed for each value of temperature.

The computation, COMP, which will be described later, is then performed for a single

value of the independent variable. EPROP then tests to see whether the computation

was successful; this usually depends on the ability of the zero finding routine to converge.

For a successful computation, CUROUT (CURrent OUTput) writes the selected output

to one of the output devices. For an unsuccessful computation, the error handling routine,

ERHAN, is called. If a listing file is selected, all computations are stored in the scratch file TEMPOR.ARY. Once all values of the independent variable are evaluated, the final output,

CMPOUT (CoMPlete OUTput), is written to the listing file, and if terminal output is also

selected, the first six output variables axe sent to the terminal. The WRAPUP routine

then closes all open files, sends out any error messages generated during the computation,

and terminates the program.

Referring to figure 4.3, the computational program flow can be described. If the independent variable is temperature or 1000/T, the temperature-dependent constants need to be

reevaluated each time through the loop, in TVARS. Next, if the constants output option

is selected, no solution of the charge balance equation is required.

The heart of the computation is the ZEROIN subroutine [31], which computes the roots of

the equation, F[x) = 0. This function, F[x) is passed to ZEROIN as an external function

TEST. In EPROP, TEST is the charge neutrality condition, eq (1). ZEROIN selects a value for the Fermi level within the bounds defined in the subroutine call, using bisection

and the secant rule to select new values. If a zero is found for a particular Fermi-level

selection, within the accuracy reqtured, ZEROIN is exited.

For those interested in making changes to EPROP, a map of the common blocks and the

program segments (subroutines and functions) which contain them is provided in table 4.1.

The left-hand column lists the main program EPROP followed by the subroutines and

functions which pass or use common variables. The common variables are shown across the top of the table, with the common block names bracketing the variables.

4.2. Functions, Subroutines, and Files

Two logical functions and two real functions axe used in EPROP. They are defined as shown in table 4.2. Twenty-one subroutines are called; their names and functions are

listed in table 4.3. Up to eight files may be opened during program execution; these are Hsted and described in table 4.4.

55
Table 4.1 Common Blocks and Program Variables — Closed circles indicate that the variable is necessary

to the segment (subroutine or function) and is made available through the common block labeled at the

top. Open circles indicate that the variable is passed to the segment through an argument in a subroutine

or function call.

SWITCH

EPROP

CMPOUT o o o

COMP o o • •

CUROUT • • • • • • • • • • •

DEVSEL o o o o • •

DOPSEL o o • • • • • •

ERHAN o o # # # # 9

HEADER •

IMPTBL o 0 o 6 o o • • • •

INDSEL • • • • o o o • • • • • • •

INPSEL • • • • o o o • • • • • • •

MATSEL • •

MENU

OUTSEL o o o • •

PLTSEL o o o • • • •

PVARS o • •

TSEL o • • • • • •

TVARS o o •

TEST • • • • •

USPEC o o o • •

WRAPUP o o o o • •

ZEROIN o

Table 4.2. Functions

DIGIT( ) INRNGE(LOW,UP,VAR)

FD(J, ARG)

TEST(FERMI)

returns true if the argument is an ASCII character

between 0 and 9

returns true if the integer VAR is between the

lower bound LOW and the upper bound UP

returns the value of the Fermi-Dirac integral of order J

returns the real value of the sum of all positive and

negative charges for a Fermi energy passed via

FERMI

56
Table 4.3. Subroutines

CMPOUT completes output, produces terminal and listing-file output from the

scratch file, TEMPOR.ARY

COMP computation - directs the computation flow

CUROUT current output - directs data output concurrent with the computation

DEVSEL device select - produces the menu for output device selection

DOPSEL dopant select - produces the menu for selection of dopant impurities

ERHAN error handler - writes error messages to error file HEADER produces column headings for output

IMPTBL impurity table - produces table of impurity data for output listings

INDSEL independent variable selection - produces the menu for selection of

independent variable

INPSEL input data selection - calls INDSEL and DOPSEL

MATSEL material selection - menu for choice of Si or GaAs

MENU main menu - directs menu calls

OUTSEL output set selection - provides menu to choose from among three

predefined output sets or a user-defined output

PLTSEL plot file selection - provides menu to select plot file attributes

PROMPT sends a prompt string to the terminal (without carriage return),

preceded by a specified number of blank lines and spaces

PVARS plot variables - provides Hsting of all possible x- and y-axis

plot parameters

TSEL temperature selection - provides menu for selecting temperature or 1000/T and specifying its value

TVARS temperature-dependent variables - computes the temperature-dependent

variables

USPEC user-specified output set selection - allows selection of a desired output set WRAPUP closes all opened files and displays error messages from the computation

ZEROIN searches for a zero of the function TEST

Table 4.4. Files

EPROP.DAT contains current data

ERROR. LIS listing of computation errors, deleted if no errors are detected

LIST. DAT contains output data

PL0T1.DAT first plot file PL0T2.DAT second plot file PL0T3.DAT third plot file PL0T4.DAT fourth plot file TEMPOR.ARY scratch file, deleted after normal program completion

57
4.3. Input and Output Parameters

The values of all of the input and output parameters are stored in a single real vector P.

This vector is indexed by integer constants which have been given names descriptive of the

parameters they represent (e.g., T for temperature). These integer constants are also used

to index two other vectors, one containing the string descriptors (DSCRIP) and the other

indicating the type of output format to be used with each parameter (PFORM). This

technique simplifies the bookkeeping for input and output and for switching independent

variables, and greatly reduces the number of decisions the program must make. These

three vectors and the format vector are defined in table 4.5.

Table 4.5. Vectors

P() real vector containing the values of all input and

output parameters

PFORM( ) integer vector containing indices for the character

vector FORMS( ). FORMS( ) holds the actual string format

DSCRIP( ) character vector containing the labels for all parameters that can be input or output

FORMS( ) character vector containing the format for all parameters that can be input or output

4.3.1. Independent Variables

The program allows the user to select the independent variable from among 17 different

parameters: temperature, reciprocal temperature, or, for any of six impurities: density,

energy level, or degeneracy. Up to three acceptors and three donors can be specified. The

possible independent variables are listed in table 4.6; the physical units (dimensions) for

each variable are given in parentheses.

4.3.2. Dependent Variables

In addition to the independent variables, the parameters listed in table 4.7 are also available

for output.

4.4. Other Variables

Other variables and constants used in the program are defined in table 4.8.

58
Table 4.6. Independent Variables - Physicsil units (dimensions) are in parentheses.

Parameter Integer Value Refers to

DGl 23 degeneracy of donor impurity 1 DG2 26 degeneracy of donor impurity 2

DG3 29 degeneracy of acceptor impurity 1 DG4 32 degeneracy of acceptor impurity 2

DG5 35 degeneracy of acceptor impurity 3

DG6 46 degeneracy of donor impurity 3

DNl 21 density of donor impurity 1 ( cm~^)

DN2 24 density of donor impurity 2 ( cm~^

)

DN3 27 density of acceptor impurity 1 ( cm""^)

DN4 30 density of acceptor impurity 2 ( cm~^)

DNS 33 density of acceptor impurity 3 ( cm~^)

DN6 44 density of donor impurity 3 ( cm~^)

ENl 22 binding energy of donor 1 (eV)

EN2 25 binding energy of donor 2 (eV)

ENS 28 binding energy of acceptor (eV)

EN4 31 binding energy of acceptor 2 (eV)

ENS 34 binding energy of acceptor 3 (eV)

EN6 45 binding energy of donor 3 (eV)

RTEMP 2 reciprocal temperature (K~^)

T 1 temperature (K)

59
Table 4.7. Dependent Variables - Physical units (dimensions) are in parentheses.

Parameter Integer Value Refers to

CAYT

CN

CP

CNG

CNL

CNX

DELGL

DELGX

DIl

DI2

DI3

DI4

DI5

DI6

ECMEF

EF

EFME

EFMH

EG

FNC

FNCP

FNV

FNVP

RDIEL

13

4

5

38

39

40

41

42

6

7

8

9

10

43

14

3

17

18

11

19

36

20

37

15

SUM

TPOWR

12

16

thermal energy, kT/q , (eV) where

k is Boltzmann's constant, 1.380662 x 10"^^ J/K,

q is the elemental charge, 1.602189 x 10~^^ C

free electron density (cm~^)

free hole density ( cm~*)

electron density in the Fe conduction band ( crn"^)

electron density in the L% conduction band (cm~')

electron density in the Xq conduction band (cm~^)

energy difference between Vq and Lq conduction bands (eV)

energy difference between Tq and Xq conduction bands (eV)

density of ionized donor 1 (cm~^)

density of ionized donor 2 ( cm~^)

density of ionized acceptor 1

( cm~^)

density of ionized acceptor 2 (cm"^)

density of ionized acceptor 3 (cm~^)

density of ionized donor 3 ( cm~^)

difference between the conduction band

and Fermi energies

Fermi level (eV)

electron effective mass

hole effective mass

energy gap (eV)

conduction band density of states ( cm~^)

conduction band density of states ( cm~^

)

(nonparabolic, GaAs only)

valence band density of states ( cm~^)

valence band density of states ( cm~^

)

(nonparabolic, GaAs only)

relative dielectric constant

(EPROP computes the temperature dependence of the

dielectric constant independent of the rest of the

calculations. References for the formulas used can be

found in the program source.)

sum of all charged species

2^3/2(^3/2)

60
Table 4.8. Other

Name Description

AE real absolute error rpfiprrprl +n iri 7)T^\T?OTlV Qiil-»rr»iitin*»

ARG real dununv ***** * r areument fc*xxxx^xx V for XV^X FD^ ' subroutine l_X V-J X V_/ LX \J XXXV,^ ALPHA real defined ^xv'Xxxxv^u. bvfc./j' ea dO") \ /) (Et? V -t^ — EQ )/(kT/a) y/v /i/

BETA real defined by eq fl7), Ep/ikT/a)

CONST real constant 2(27rmoA;//i2)3/2 = 4.8293 x 10^^ K^^/^ cm-^

where

TTlo = 9.1095 X 10~^^ ke is the electron mass

and h = 6.6262 x 10"^"* Js is Planck's constant

CSTSET(

)

integer pointers to the ten parameters in the

constants output set DEV( ) logical O indicates where output will be directed,

where true directs output to the terminal (1), a listing file (2), or up to four plot files (3)

Dir

)

integer pointers to the ionized donor densities

DG( ) integer pointers to the dopant degeneracies

DN( ) integer pointers to the dopant densities

DOPANT( ) logical switches for which dopants are selected

DUMB real used to calculate the instantaneous value of the

independent variable

EGAP real upper Hmit of Fermi-level energy used in ZEROIN

EN( ) integer pointers for the energies of the dopant

impurities (up to five)

ETA real reduced Fermi energy (relative to conduction band

edge), (Ef - Ec)/kT

FERMI real instantaneous Fermi energy

FINVAL real final value of independent variable

FTNUM real first value of independent variable when logarithmic

stepping is selected

FULSET( ) integer pointers to the 20 full-set output parameters

HYBNUM integer number of parameters in the hybrid (user-specified)

output set HYBSET( ) integer pointers to hybrid fuser-specified) output

set variables

INDSETf ) intecrer XXX V V>> E^X_>X pointers to possible independent variables

INDVAR integer pointer to the independent variable

INIVAL real initial value of independent variable

IFLAG integer flag returned by ZEROIN subroutine

J real order of Fermi-Dirac integral

LOGSW logical true indicates log scale output

LOW integer lower bound used by logical function INRNGE

LOWLIM real low temperature limit of computation defined by

machine exponentiation overflow

61
LSTSW logical

LUDEF integer

integer constant

LUIN integer constant

LULST integer constant

LUPL( ) integer

LUPLl integer constant

LUPL2 integer constant

integer constant

LUPL4 integer constant

•

J. integer

LUTO integer

LUTEMP integer constant

MATSW integer

MAXOUT integer

MBL real

MH real

MLL real

MSEL integer

MX real

NAMES( ) character

NDV integer

NPT integer

NUMER integer

OUTNUM integer

OUTPUT(

)

integer

OUTSET( ) character

PF( 5 ) integer

PLNAM( ) character

PLTSW logical

PNUM integer

POWER real

RE real

SETNUM integer

list switch, true indicates output should go

to the listing file, LIST. DAT

default logical unit number

logical unit number (27) for storing error messages

logical unit number (20) for input data file,

EPROP.DAT

logical unit number (21) for datalisting file,

LIST. DAT

contains the four plot file logical unit numbers

logical unit number (22) for plot file 1 output

logical unit number (23) for plot file 2 output

logical unit number (24) for plot file 3 output

logical unit number (25) for plot file 4 output

logical unit number (5) for terminal input

logical unit number (6) for terminal output

logical unit number (26) for temporary storage

of output data

global materials switch, indicates Si (1), GaAs (2),

other, user defined material (3 or greater)

maximum number of output parameters

Lq conduction band effective mass

Fg valence band heavy hole effective mass

Fg valence band light hole effective mass

local materials switch like MATSW

Xe conduction band effective mass

names of dopant impurities (up to six)

number of divisions per decade

number of values of the independent variable

number of computation errors number of parameters in selected output set pointers for selected output set (up to 20)

labels for the four possible output sets,

short set, full set, constants set, and user specified

integer pointers to the x- and y-axis

variables for up to four plot files names of four plot files plot switch, true indicates output should go

to the plot files number of plot files selected

argument of ionized impurity density exponent;

see eqs (7) and (8)

relative error, referred to in ZEROIN subroutine

argument for OUTSET vector indicating

62
set of parameters being output

SHTSET( ) integer pointers to tHe nine sbiort set output

parameters

START integer lower limit for computation loop

STEP integer step for computation loop

STOPIT integer upper limit for computation loop

STPVAL real incremental step of independent variable for linear

scale, number of divisions per decade for log scale

TRMSW logical terminal switch, true indicates output should

go to the terminal

UP integer upper bound used by logical function INRNGE

UPLIM real melting point of semiconductor

VAR integer variable tested by logical function INRNGE

X real value of the Fermi-Dirac integral in FD

ZETA real reduced energy for holes, (E^ — EF)/kT

63
Acknowledgments

The authors wish to thank R. D. Larrabee, W. R. Thurber, and W. M. BuUis whose

calculation of the electrical properties of silicon was the basis for this work. J. R. Lowney

provided the results of reference [9] prior to publication and converted them to a form

which could be used in our program. H. S. Bennett, and C. L. Wilson made helpful

comments and suggestions. C. E. Bouldin and D. Kahaner provided help in improving the

portability of the code. Thanks are also due to P. Baker, J. Walters, and W. Gladden for

their assistance in producing the final manuscript.

64
References

1. Larrabee, R. D., Thurber, W. R., and Bullis, W. M., Semiconductor Measurement

Technology: A FORTRAN Program for Calculating the Electrical Properties of

Extrinsic Silicon, NBS Special Publication 400-63 (October 1980).

2. Blakemore, J. S., Semiconductor Statistics (Pergamon Press, New York, NY, 1962).

3. Blakemore, J. S., Semiconducting and Other Major Properties of Gallium Arsenide,

J. AppL Phys. 53, R123-R181 (1982).

4. Varshni, Y. P., Temperature Dependence of the Energy Band Gap in Semiconductors, Physica 34, 149-154 (1967).

5. Thurmond, C. D., The Standard Thermodynamic Functions for the Formation of

Electrons and Holes in Ge, Si, GaAs, and GaP, J. Electrochem. Soc. 122, 1133-1141

(1975).

6. Blakemore, J. S., Intrinsic Density 7ij(T) in GaAs: Deduced from Band Gap and

Effective Mass Parameters and Derived Independently from Cr Acceptor Capture

and Emission Coefficients, J. AppL Phys. 53, 520-531 (1982).

7. Kane, E. O., Band Structure of Indium Antimonide, J. Phys. Chem. Sohds 1, 249-

261 (1957).

8. Vrehen, Q. H. F,, Interband Magneto-Optical Absorption in Gallium Arsenide,

J. Phys. Chem. Solids 29, 129-141 (1968).

9. Lowney, J. R. and Kahn, A. H., Valence-band effective masses of GaAs, J. AppL

Phys. 64, 447-450 (1988).

10. Heasel, E. L., The Calculation of Carrier Concentrations in Silicon in the Medium

and High Temperature Regions, SoUd State Electronics 16, 651-655 (1972).

11. Ukhanov, Yu. I., and Mal'tsev, Yu. V., Investigation of the Temperature Dependence of the Electron Effective Mass in Semiconductors, Soviet Physics - Solid State

5, 2144-2149 (1964).

12. Stradling, R. A. and Zhvikov, V. V., Cyclotron Resonance of Electrons in Silicon at

Temperatures up to 200°K, Proc. Phys. Soc. 87, 263-271 (1966).

13. Barber, H. D., Effective Mass and Intrinsic Concentration in Silicon, Solid State

Electronics 10, 1039-1051 (1967).

14. Blakemore, J. S., Review Paper, Approximations for Fermi-Dirac Integrals, Especially the Function Fi (77) Used to Describe the Electron Density in a Semiconductor,

Solid State Electronics 25, 1067-1076 (1982).

65
15. Cody, W, J. and Thacher, Jr., H.C, Rational Chebyshev Approximations for FermiDirac Integrals of Orders -1/2,1/2, and 3/2, Mathematics of Computation 21,

30-40 (1967).

16. Van Halen, P. and Pulfrey, D. L., Accurate Short Series Approximations to FermiDirac Integrals of Order -1/2,1/2,1,3/2,2,5/2,3, and 7/2, J. Appl. Phys. 57,

5271-5274 (1985); Erratum, J. Appl. Phys. 59, 2264-2265 (1986).

17. Nichols, K. H., Yee, C. M. L., and Wolfe, C. M., High-Temperature Carrier Transport in n-Type Epitaxial GaAs, Solid State Electronics 23, 109-116 (1980).

18. Landsberg, P. T., Defect With Several Trapping Levels in Semiconductors, Proc. Phys.

Soc. London B69, 1056-1059 (1956).

19. Champness, C. H., The Statistics of Divalent Impurity Centres in a Semiconductor,

Proc. Phys. Soc. London B69, 1335-1339 (1956).

20. Shockley, W., and Last, J. T., Statistics of the Charge Distribution for a Localized

Flaw in a Semiconductor, Phys. Rev. 107, 392-396 (1957).

21. Sah, C. T. and Shockley, W., Electron-Hole Recombination Statistics in Semiconductors Through Flaws With Many Charge Conditions, Phys. Rev. 109, 1103-1115

(1958).

22. Blakemore, J. S., Modeling of a Multi-Valent Impurity, Such as GaAsrCr, SemiInsulating lU-V Materials Nottingham 1980 (Imprint Editions, Fort Collins, CO,

1980), pp. 29-40.

23. Look, D. C, Statistics of Multicharged Centers in Semiconductors: Applications,

Phys. Rev. B 24, 5852-5862 (1981).

24. Bonch-Bruevich, V. L., Effect of Heavy Doping on the Semiconductor Band Structure, Semiconductors and Semimetals 1, R. K. Willardson and A. C. Beer, Editors

(Academic Press, New York, NY, 1966), pp. 101-142.

25. Bennett, H. S., Heavy Doping Effects on Bandgaps, Effective Intrinsic Carrier Concentrations and Carrier Mobilities and Lifetimes, Solid State Electronics 28, 193-200

(1985).

26. Lowney, J. R., Impurity Bands and Band Tailing in Moderately Doped Silicon,

J. Appl. Phys. 59, 2048-2053 (1986).

27. Bennett, H. S., High Dopant and Carrier Concentration Effects in Gallium Arsenide:

Band Structure and Effective Intrinsic Carrier Concentrations, J Appl. Phys. 60,

2866-2874 (1986).

28. Lowney, J. R., Impurity Bands and Band Tailing in n-Type GaAs, J. Appl. Phys.

60, 2854-2859 (1986).

66
29. Ta, L. B., Thomas, R. N., Eldridge, G. W., and Hobgood, H. M., Reproducibility

and Uniformity Considerations in LEG Growth of Undoped Semi-Insvdating GaAs

for Large- Area, Direct Implantation Technology, Inst. Phys. Conf. Ser. No, 65,

31-39 (1982).

30. Milnes, A. G., Impurity and Defect Levels (Experimental) in Gallium Arsenide,

Advances in Electronics and Electron Physics 61, 63-160 (1983).

31. Shampine, L. F., and Allen, R. C., Numerical Computing: An Introduction (W. B.

Saunders Co., Philadelphia, PA, 1973).

67

Appendix 1. Portability Considerations

EPROP is written in ANSI standard FORTRAN 77 and has been successfully compiled

and run on a Digital Equipment Corporation (DEC) VAX 11/785, an International Business Machines (IBM) PC/AT, and on Apple Computer Macintosh Plus and Macintosh II computers.* The source code listed in Appendix 3 of this document was developed on

a DEC VAX 11/785 with VMS operating system using the VAX FORTRAN compiler.

It was compiled without modification on an IBM PC/AT, using the Layhey FORTRAN

compiler V2.0 and IBM linker V2.3 and using Ryan-McFarland RM/FORTRAN V2.00

and Hnker V1.51RM. It has also been run with minor modifications (described below) on

the Apple Macintosh Plus using Absoft MacFortran V2.4 and on the Apple Macintosh II using Absoft MacFortran/020.

Two modifications axe necessary in order to produce a working application on the Macintosh, The logical unit number for reading and writing to the Macintosh screen is 9, as opposed to the usual assignments of logical unit 5 for reading and 6 for writing. In

the main program, the statements LTJTI=5 and LUT0=6 must be changed to LUTI=9 and

LTn'0=9; these values are then made available to all the subroutines which require them.

Second, upon completion of an application, the Macintosh operating system returns the

user to the Finder, erasing any terminal output. To prevent this, a PAUSE statement should

be inserted just prior to STOP in the main program and in the subroutine MENU. Early

versions of the FORTRAN compiler allocated too little memory (in the application heap)

to permit the simultaneous use of all eight output files allowed by EPROP. The linker

could be used, however, to increase this default allocation, or a dummy subroutine could

be added to EPROP containing a DIMENSION statement allocating a large, unused block

of memory. The current release of the compiler appears to have eliminated this problem.

In the VAX/VMS operating environment, when an OPEN statement is issued with the

qualifier STATTJS=NEW and a file already exists with this file name, VMS creates a new file with a new version number. EPROP uses OPEN statements with STATUS=UNKNOWN so that

the VAX does not create a new version number. If it is desired to use this VAX VMS

feature, all such OPEN statements shoidd be changed to STATUS=NEW.

In adapting the program to other computers, several factors may need to be considered,

some related to the operating system and some to the FORTRAN compiler used. EPROP

makes extensive use of one nonstandard feature of FORTRAN. This is so-called "$ editing,"

in which the end-of-line output (typically carriage return/hnefeed) is suppressed in output

if a "$" string appears in the first space of the FORMAT statement. The VAX and IBM

compilers, as well as the current release of MacFortran support this extension, but other

compilers may not. For this reason, all output requiring end-of-line suppression is sent

* Certain commercial equipment, instruments, or materials are identified in this paper in

order to adequately specify the procedures used. Such identification does not imply rec- ommendation or endorsement by the National Institute of Standards and Technology, nor

does it imply that the materials or equipment identified are necessarily the best available

for the purpose.

69
through the subroutine PROMPT (see table 4.3). The VAX and IBM versions of PROMPT

use $ editing; the Macintosh version uses the TYPE statement which also suppresses the

end-of-line output and was available in earUer versions of the compiler. Users of other

compilers will have to supply appropriate code in this subroutine.

Under operating systems which do not support file name extensions (as in EPROP.DAT

ERROR. LIS, and TEMPOR.ARY), the eight output file names Usted in section 4.2 must be

changed globaUy to names compatible with the target system. The DEC, IBM, and Apple

systems mentioned above support file name extensions.

70
Appendix 2. Adding a New Semiconductor

It is not difficult to modify EPROP to perform calculations for additional semiconductor

materials, especially if the same formulation as for GaAs or Si can be used. The following

description will aid the user in adding a third material. There is no reason not to add as many as desired; a total of of 26 will, however, exhaust the letters of the alphabet available

for menu selections.

The first step is to add another option to the Material Selection Menu by modifying

the MATSEL subroutine. Add the following to the Block-IF structure in the routine:

ELSEIF ((CH.EQ. 'U.C. ') .OR(CH.EQ. 'I.e. ')) THEN

MATSW=3

where U. C . and I.e. represent the upper and lower case, respectively, of the letter chosen

to indicate the material being added.

The rest of the modifications involve either adding a third option to Block-IF structures

to account for the third material, or adding . OR. (MATSW.EQ . 3) to an existing condition

in a Block-IF. In general, a third option will be necessary, but where the new material has

enough in common with silicon or gallium arsenide (such as a formula or number of output

parameters), the user may be able to make use of one of the two existing options.

There are 12 places in the code where the logic branches on the basis of material. They

are listed below; their location in the source code can be readily found by searching for

the string " option ."

SUBROUTINE OR TYPE OF CHANGE

FUNCTION

COMP

IMPTBL

INDSEL

MENU

PVARS

TEST

Define EGAP and UPLIM (energy gap approximation

and melting point).

Define the string: "Electrical Properties of XXXX";

this occurs in two places in IMPTBL.

Define UPLIM (same as for COMP).

1. Add a third option in addition to "Si" and "GaAs",

2. Define MAXOUT (number of output parameters).

Note: this could well be the same for the new material

as it is for Si or GaAs.

3. Define OUTNUM for the constants output set (number of output parameters).

Note: this also could be the same as for Si or GaAs.

4. Check for undefined parameters. This checking will

need to be changed only if a new formulation and

new output parameters are required.

Define MAX (number of possible plot file parameters).

The formulation for electron P(N) and hole density

71
P(CP) must be changed to use the appropriate density

of states for the new material.

Define UPLIM ( same as COMP).

The temperature-dependent constants, P(EFME),

P(EFMH), and P(EG) must be defined appropriately

for the new semiconductor.

72
Appendix 3. Program Listing

PROGRAM EPEOP

C

C Written by John J. Nathias and Alan C. Seabaugh

C Modified by Michael I. Bell and Jeremiah R. Lowney

C Semiconductor Electronics Division

C National Institute of Standards and Technology

C (Formerly the National Bureau of Standards)

C Gaithersburg, MD 20899

CC Jtmuary 1990, Version 1.0

C

C This program solves the charge balance equation to compute

C selected electrical properties of gallium arsenide and silicon.

C The user interface allocs the selection of independent variables

C from the list: temperature, reciprocal temperature, and

C concentration, energy level, and degeneracy for up to three donor

C and three acceptor impurities. The output can be selected from

C a list including: Fermi energy level, electron and hole densities,

C donor or acceptor ionized impurity densities, energy band gap,

C valence and conduction band density of states, and

C electron and hole effective masses.

C REAL INIVAL,FINVAL,STPVAL

LOGICAL LOGSW

COMMON /RANGE/ INIVAL,FINVAL,STPVAL, LOGSW

INTEGER PFORM ( 46 ) , INDVAR , OUTPUT ( 28 ), OUTNUH , PF (4 , 2)

,

* PNUM,LUDEF,MAXOUT,MATSW

LOGICAL TRMSW.LSTSW.PLTSW

COMMON /GLOBAL/ PFORM, INDVAR, OUTPUT, OUTNUM,

* PF , PNUM , LUDEF , TRMSW , LSTSW , PLTSW , MATSW , MAXOUT

REAL P(46)

COMMON /FARMS/ P CHARACTER NAMES(6}*13,DSCRIP(46)*11,F0RMS(6)*16

COMMON /STRING/ NAMES, DSCRIP, FORMS

INTEGER IFLAG

COMMON /SWITCH/ IFLAG

REAL ETA,ZETA

COMMON /CALC/ ETA,ZETA

LOGICAL D0PANT(6)

COMMON /TSTCOM/ DOPANT

INTEGER LUTI,LUTO

COMMON /LUNIT/ LUTI,LUTO

C INTEGER T ,RTEMP , EF , CN, CP , DIl , DI2 , DI3 , DI4 , DIB , EG , SUM , CAYT , ECMEF

,

* RDIEL , TPOWR , EFME , EFMH , FNC , FNV , DNl , ENl , D61 , DN2 , EN2 , DG2 , DN3 , ENS

,

* DG3 , DN4 , EN4 , DG4 , DNB , EN5 , DGB , FNCP , FNVP , CNG , CNL , CNX , DELGL , DELGX

* DI6,DN6,EN6,DG6

PARAMETER (T=1,RTEMP=2,EF=3,CN=4,CP=B,DI1=6,DI2=7,DI3=8,DI4=9,

* DIB=10,DI6=43,EG=11,SUM=12,CAYT=13,ECMEF=14,RDIEL=1B,TP0WR=16,

* EFME=17,EFMH=18,FNC=19,FNV=20,DN1=21,EN1=22,DG1=23,DN2=24.

* EN2=2B,DG2=26,DN3=27,EN3=28,DG3=29,DN4=30,EN4=31,DG4=32,DNB=33,

* ENB=34 ,DGB=3B ,DN6=44 , EN6=4B , DG6=46 ,FNCP=36 ,FNVP=37 , CNG=38

,

* CNL=39 , CNX=40 , DELGL=41 , DELGX=42

)

INTEGER NUMER,SETNUM,NPT

REAL DUMB, START, STOPIT, STEP, NDV.FTNUM

C

C *** Format specifier specification *** PFORM(T)= 1 PFORM(RTEMP)= 1 PFORM(EF)= 2 PFORM(CN)= 3 PFORM ( CP )= 3 PF0RM(DI1)= 3

73
PF0RM(DI2)= 3 PF0RM(DI3)= 3 PF0RM(DI4)= 3 PF0RM(DI5)= 3 PF0RM(DI6)= 3 PFORM(EG)= 2 PFORM(SUM)= 3 PFORM(CAYT)= 3 PFORM(ECMEF)= 2 PFORM(RDIEL)= 1 PFORM(TPOWR)= 3 PFORM(EFME)= 3 PFORM(EFMH)= 3 PFORM(FNC)= 3 PFORM(FNV)= 3 PF0RM(DN1)= 4

PF0RM(EN1)= 6 PF0RM(DG1)= B PF0RM(DN2)= 4

PF0RM(EN2)= 6 PF0RM(DG2)= E PF0RM(DN3)= 4

PF0RM(EN3)= 6 PF0RM(D63)=: E PF0RM(DN4)= 4

PF0RM(EN4)= 6 PF0RM(DG4)= E PF0RM(DN5)= 4

PFORM(ENE)= 6 PFORM(DGE}= 5 PF0RM(DN6)= 4 PF0RM(EN8)= 8 PF0RM(DG6)= E PFORM(FNCP)= 3 PFORM(FNVP)= 3 PFORM(CNG)= 3 PFORM(CNL)= 3 PFORM(CNX)= 3 PFORM(DELGL)= 3 PFORM(DELGX)= 3 *• Variable dBscription specification **• DSCRIP(T)

DSCRIP(RTEMP)=

DSCRIP(EF)=

DSCRIP(CN)=

DSCRIP(CP)=

DSCRIP(DI1)=

DSCRIP(DI2)=

DSCRIP(DI3)=

DSCRIP(DI4)=

DSCRIP(DIB)=

DSCRIP(DI6)=

DSCRIP(EG)=

DSCRIP(SUM)=

DSCRIP(CATT)=

DSCRIP(ECMEF)=

DSCRIP(RDIEL)=

DSCRIP(TPOWR)=

DSCRIP(EFHE)=

DSCRIP(EFMH)=

DSCRIP(FNC)=

DSCRIP(FNV)=

DSCRIP(DN1)=

DSCRIP(EW1)=

DSCRIP(DG1)=

DSCRIP(DN2)=

Temp

1000/T

EF n

PNdl+

Nd2+

Nd3+

NalNa2-

Na3-

Eg

Sum Charges

kT

Ee-EF

diel

Temp**3/2

efme •lah

Nc

Nv

Ndl

Edl

Deg. Dl

Nd2

74
DSCEIP(EN2)= ' Ed2

DSCRIP(D62)= ' Dag. D2

DSCKIP(DN3)= > Nd3

DSCEIP(EN3)= ' Ed3

DSCEIP(D63)= > Deg. D3

DSCEIP(DN4)= ' Nal

DSCEIP(EN4)= ' Eal

DSCEIP(D64)= > Dag. Al

DSCEIP(DN5)= > Na2

DSCEIP(EN6)= > Ea2

DSCEIP(D66)= > Dag. A2

DSCEIP(DN0)= ' Na3

DSCEIP(ENe)= ' Ea3

DSCEIP(D66)= ' Dag. A3

DSCEIP(FNCP)= » Nc"

DSCEIP(FNVP)= ' Nv'» DSCEIP(CNG)= ' n6

DSCEIP(CNL)= » nL

DSCEIP(CNI)= ' nX

DSCEIP(DEL6L)= * Dalta EGL

DSCEIP(DELGX)= > Dalta EGX

*** Format spacifiars *•* F0EMS(1)= '(FIO.4,21)

F0EMS(2)=

F0EMS(3)=

F0EMS(4)=

FORMS (5)

F0EMS(6)=

'(lI.Fll.e)

»(1X,1PE11.4)

'(1I,1PE10.3,1X)

'(2X,F8.4,2X)

'(2X,F7.4,3X)

C

C *** Logical unit spacif ication (tarminal) *** CALL UNITS (LUTI.LUTO)

C NUMEE=0

*** Main Prograa loop *•* CALL MENU(SETNTJM)

CALL IMPTBL ( PFOEM , INDVAE , LUDEF , LSTSW , MATSW , TEMSW)

CALL HEADEE

IF (((INDVAE.NE.T) .AND. (INDVAE.NE.ETEMP)))

* CALL TVAES( INDVAE. MATSW)

IF (LOGSW) THEN

STAET=1.

STEP=1.

NDV=ABS(STPVAL)

FTNTJM=INT(AL0G10(AMIN1(FINVAL,INIVAL))*NDV)

NPT= INT ( ALO 6 1 0 ( AMAX 1 ( F INVAL , INIVAL ) ) *NDV ) -FTNUM+2

IF ( ABS ( FLOAT ( INT ( ALOG 10 ( MAX ( FINVAL , INIVAL ) ) )

)

* AL0G10(MAX(FINVAL,INIVAL))).LT. 0.0002) NPT=NPT-1

STOPIT=NPT

ELSE

STAET=INIVAL

STOPIT=FINVAL

STEP=STPVAL

ENDIF

DO 100 DnHB=STAET,STOPIT,STEP

IF (LOGSW) THEN

P ( INDVAE) =10 . •* ( (FTNTIM+DUMB-1 ) /NDV)

ELSE

P( INDVAE) =DUMB

ENDIF

CALL COMP( INDVAE, MATSW, SETNUM)

IF (IFLAG.GT.2) THEN

CALL EEHAN(INDVAE,NnMEE. PFOEM)

ELSE

CALL CUEOUT

ENDIF

75
100 CONTINUE

IF (LSTSH) CALL CMPOUT(LUDEF,TEMSW,OUTNUM, START, STOPIT, STEP, NUMER)

CALL HRAPUP ( LUDEF , LSTSW , NUMER , PLT SW , PNUM

)

C Pause naaded in MacFORTRAN

C PAUSE

STOP

END

C

C Subroutines and functions follow in alphabetical order.

C

C Subroutine CMPOUT provides terminal output if a listing file is

C selected and a clean listing fil« if the number of output

C parameters is mors thm six (six fills the screen).

C SUBROUTINE CMPOUT (LUDEF , TRMSW , OUTNUM , START , STOPIT , STEP , NUMER)

C INTEGER LULST.LUTMP.LUER

PARAMETER (LULST=21 ,LUTMP=26 ,LUER=27)

C INTEGER LUDEF, OUTNUM, NUMER

LOGICAL TRHSW

REAL DUMB, START, STOPIT, STEP

CHARACTER*72 OUTSTR(B) ,TEMP*12

INTEGER LUTO.LUTI

COMMON /LUNIT/ LUTI.LUTO

DATA OUTSTR /' ',» '/

DATA TEMP /» '/

STOPIT=STOPIT-NUMEE*STEP

IF ( LUDEF. NE.LUTMP) THEN

IF (TRMSW) THEN

REWIND (UNIT=LUDEF)

10 READ (LUDEF,'(A)',ERR=60,END=60) OUTSTR(l)

WRITE (LUTO,'(A)») OUTSTR(l)

GOTO 10

ENDIF

ELSE

N=0UTNUM/8

ITEST=N*6

IF (ITEST.NE. OUTNUM) N=N+1

DO 40 L=1,N

REWIND (UNIT=LUDEF)

DO 20 1=1,

LAST=6

IF (I.EQ.N) LAST=0UTNUM+6-N*6

DO 20 J-1,LAST

IB READ (LUDEF, '(A) ') TEMP

IF (TEMP.EQ. ' ') GOTO IB OUTSTR(I) (12*(J-1)+1 : 12*J)=TEMP

20 CONTINUE

LAST=72

IF (L.EQ.N) LAST=0UTNUM*12-N*72+72

WRITE (LULST,*) OUTSTR(L) ( :LAST) IF (TRMSW. AND. (L.EQ.D) WRITE (LUTO,*)

* OUTSTR(L)(:LAST)

DO 40 DUMB=START, STOPIT, STEP

DO 30 1=1,

LAST2=6

IF (I.EQ.N) LAST2=0UTNUM+6-N*6

DO 30 J=1,LAST2

READ (LUDEF,'(A)',ERR=40,END=40) TEMP

0UTSTR(I)(12*(J-1)+1:12*J)=TEMP

30 CONTINUE

LAST=72

IF (L.EQ.N) LAST=0UTNUM*12+72-N*72

WRITE (LULST,*) OUTSTR(L) ( :LAST) IF (TRMSW. AND. (L.EQ.D) WRITE (LUTO,*)

76
• OUTSTR(L)(:LAST)

40 CONTINUE

4B IF (NUMEE.NE.O) THEN

REWIND (UNIT=LUEa)

50 READ (LUER, '(A) ' ,ERR=5B,END=5B) OUTSTR(l)

IF (TRMSW) WRITE (LUTO,*) OUTSTR(l)

WRITE (LULST,*) OUTSTR(l)

GOTO 50

ENDIF

ENDIF

65 RETURN

60 IF (NUMER.NE.O) THEN

REWIND {UNIT=LUER)

65 READ (LUER,>(A)',ERR=66,END=55) OUTSTR(l)

WRITE (LUTO,*) OUTSTR(l)

GOTO 65

ENDIF

END

C

C Subroutina COMP computes the electrical properties for a

C fixed value of one independent variable.

C SUBROUTINE COMP ( INDVAR , MATSW , SETNUM

C EXTERNAL TEST

REAL P(46)

COMMON /FARMS/ P INTEGER IFLAG

COMMON /SWITCH/ IFLAG

C INTEGER T.RTEMP.EF.EG.SUM.ECMEF

PARAMETER (T=1,RTEMP=2,EF=3,EG=11 ,SUM=12,ECMEF=14)

REAL UPLIM

C REAL EGAP, FERMI. RE, AE INTEGER INDVAR, SETNUM, MATSW

C FERMI=-0 .

IFLAG=0

RE=1.0E-06

AE=1.0E-06

C IF (MATSW. EQ.l) THEN

C •• Silicon *** EGAP=1.4

UPLIM=1688.

ELSEIF (MATSW. EQ. 2) THEN

C *** Gallium Arsenide *** EGAP=1.8

UPLIM=1511.

ELSE

C option This option has been added for InP, but could be

C changed to work for any semiconductor.

EGAP=1.35

UPLIM=1343.

ENDIF

IF ((INDVAR.EQ.T) .OR. (INDVAR.EQ.RTEMP)) CALL TVARS( INDVAR, MATSW)

IF (P(T) .GT. UPLIM) THEN

IFLAG=6

RETURN

ENDIF

IF ( SETNUM. NE. 3) THEN

CALL ZEROIN (TEST, FERMI, EGAP, RE, AE, IFLAG)

P(EF)=FERMI

IF (IFLAG. LE. 2) THEN

P ( SUM )=TEST( FERMI)

77
P(ECMEF)=P(EG)-P(EF)

ENDIF

ENDIF

RETUEN

END

C

C Subroutine CUROUT outputs data concurrent with the computation.

C SUBEOUTINE CUaOUT

c INTEGER PFORM ( 48 ) , INDVAR , OUTPUT (28), OUTNUM , PF ( 4 , 2 )

,

* PNUM.LUDEF.MAXOUT.MATSW

LOGICAL TRMSH.LSTSW.PLTSH

COMMON /GLOBAL/ PFORM, INDVAR, OUTPUT, OUTNUM,

* PF , PNUM , LUDEF , TRMSW , LSTSW , PLTSW , MATSW , MAXOUT

REAL P(46)

COMMON /PARMS/ P CHARACTER NAHES(6)*13,DSCRIP(46)*11,F0RMS(6)*15

COMMON /STRING/ NAMES, DSCRIP, FORMS

C INTEGER LUPL1,LUPL2,LUPL3,LUPL4

PARAMETER (LUPL1=22,LUPL2=23,LUPL3=24,LUPL4=25,LUTMP=26)

C

CHARACTER«72 0UTSTR(5)

INTEGER LUPL(4)

DATA OUTSTR /» »,» »,» ',' »/

DATA LUPL /LUPL1,LUPL2,LUPL3,LUPL4/

C

IF (LUDEF. NE.LUTMP) THEN

IF (TRMSW. OR. LSTSW) THEN

DO 10 1=1, OUTNUM

WRITE (0UTSTR(1)(12*(I-1)+1:12*I),

* FORMS(PFORM(OUTPUT(I)))) P( OUTPUT (I))

10 CONTINUE

WRITE (LUDEF,*) OUTSTR(l) ( : 12*0UTNUM)

ENDIF

ELSE

DO 20 1=1, OUTNUM

WRITE ( LUDEF, FORMS (PFORM(OUTPUT(I)))) P(OUTPUT(I))

20 CONTINUE

ENDIF

IF (PLTSW) THEN

DO 30 1=1, PNUM

WRITE (0UTSTR(1)(:12),F0RMS(PF0RM(PF(I,1)))) P(PF(I,1))

WRITE ( OUTSTR( 1 ) ( 1 3 : 24 ), FORMS ( PFORM ( PF ( I , 2 ) ) )

)

* P(PF(I,2))

WRITE (LUPL(I),*) 0UTSTR(1)(:24)

30 CONTINUE

ENDIF

RETURN

END

C

C Subroutine DEVSEL obtains user's output device selection.

C SUBROUTINE DEVSEL ( DEV , PNUM , PF , MAXOUT , MATSW)

C

INTEGER LUTO,LUTI

COMMON /LUNIT/ LUTI.LUTO

C CHARACTER 0UTSTR(3)*80,INSTR*E

INTEGER I,J,K,PF(4,2), PNUM , MAXOUT , MATSW

LOGICAL DEV(3).DIGIT,INRNGE

C *•* Note that DIGIT and INRNGE are logical functions *** DATA OUTSTR /3*' '/

DATA INSTR /» '/ C *** Create output device selection menu

78
WRITE (LUTO, •(////)')

B WRITE (LUTO, '(21X, "Output Device Selection Menu",///)')

OUTSTR(l) (:47)=' 1 Terminal > » 0UTSTR(2) (:47)=' 2 Listing file > ' OUTSTRO) (:47) = ' 3 Plot iile(s) > » DO 10 1=1,3

IF (DEV(I)) THEN

OUTSTR(I) (48:B0)=»on ' ELSE

OUTSTR(I) (48:B0)='oll

ENDIF

WRITE (LUTO, '(A,/)') OUTSTR(I)

10 CONTINUE

IF (DEV(3).OR.(PNUM.GT.O)) WRITE (LUTO,

*'(/,20X,"4 Change plot lile(s) " ,/) '

CALL PROMPTC To toggle, enter number(s) > ',2,19)

READ (LUTI,'(A)') INSTR

C *** Count the number of characters in the response ***

DO 20 1=1,

IF (DIGIT(INSTR(I:I))) J=I

20 CONTINUE

C Toggle logical switches ***

DO 30 1=1,

IF (DIGIT(INSTR(I:I))) THEN

READ (INSTR(I:I),'(I1)') K IF (INRNGE(1,3,K)) THEN

DEV(K)=(.NOT.DEV(K))

ELSEIF (K.Eq.4) THEN

CALL PLTSEL(DEV , PNUM , PF , MAXOUT , MATSW)

ENDIF

ENDIF

30 CONTINUE

IF (.N0T.((DEV(1)).0R.(DEV(2)).0R.(DEV(3)))) THEN

WRITE (LUTO. '(//," At least one output device must",

* "be selected. ",//)')

GOTO B ENDIF

IF (DEV(3). AND. (PNUM. EQ.O)) CALL PLTSEL(DEV,PNUH,PF,

* MAXOUT, MATSW)

RETURN

END

C

C Function DIGIT returns TRUE if the character (C) is a digit

C between 0 and 0. C LOGICAL FUNCTION DIGIT (C)

CHARACTER C DIGIT = (('O'.LE.C).AND.(C.LE. '9'))

RETURN

END

C

C Subroutine DOPSEL obtains the impurity information from the user.

C SUBROUTINE DOPSEL (INDVAR,PFORM)

C

REAL P(46)

COMMON /PARMS/ P CHARACTER NAMES (6)*13,DSCRIP(46)*11,F0RMS(6)«1E

COMMON /STRING/ NAMES, DSCRIP, FORMS

LOGICAL D0PANT(6)

COMMON /TSTCOM/ DOPANT

C

INTEGER DNl , ENl , DGl , DN2 , EN2 , DG2 , DN3 , EN3

* DG3,DN4.EN4,DG4,DNB,ENB,DG6,DN6,EN6,DG6

PARAMETER (DN1=21,EN1=22,DG1=23,DN2=24,EN2=2B,DG2=26,DN3=27,

« EN3=28 , D63=29 . DN4=30 . EN4=31 . DG4=32 , DNE=33 , ENB=34 , D6E=3B . DN6=44,

79
* EN6=4B,DG6=46)

INTEGER LUTO.LUTI

COMMON /LUNIT/ LUTI.LUTO

INTEGEE DG(6),DN(6),EN(6), INDVAR , PFORM ( 46 )

, RSPON , SELECT

CHARACTER*2 TYPE(12) ,0UTSTR*80,INSTR*2,INSTR2*40

LOGICAL DONE, ACTIONC 6), DIGIT, INRNGE

DATA DN /DN1,DN2,DN3,DN4,DM5,DN6/

DATA EN /EN1,EN2,1N3,EN4,ENB,EN6/

DATA DG /DGi,D62,DG3,DG4.D6E,D66/

DATA TYPE / 'Dl ' , 'D2 ' , 'D3 ' ,

' Al '

, 'A2 ' ,

' A3 '

,

* 'dl'.'d2',»d3','al%'a2','a3'/

DATA 0UTSTR,INSTR,INSTR2 /' '/

DONE=. FALSE.

WRITE (LUTO, '(////)')

IF (.NOT. DONE) THEN

DO 5 1=1,6

ACTION(I)=. FALSE.

CONTINUE

WRITE (LUTO.'OOX, "Impurity Salection" ,///)'

)

WRITE (LUTO, '(BX, » »Type Dopants Density (cm-3) '

* " Energy (eV) Dagenaracy " ) '

)

WRITE (LUTO, '(5X, - — —— ii * s. _ ___ ",/)')

0UTSTR(:3T)=' » DO 10 L=l,6

0UTSTR(a:7)=TYPE(L)

IF (DOPANT(L)) THEN

OUTSTR ( 1 3 : 2 B ) =NAMES ( L

)

0UTSTR(a2:82)=' ' IF ClNDVAa.EQ.DN(L)) THEN

0UTSTR(25:38)=' ind. var.

WRITE ( OUTSTR( 38 : 49 ), FORMS ( PFORM ( ENl

)

P(EN(L))

WRITE ( OUTSTR ( B 0 : 6 1 )

, FORMS ( PFORM ( D Gl

)

P(DG(L))

ELSEIF (INDVAE.EQ.EN(L)) THEN

WRITE ( OUTSTR( 2B : 36) , FORMS (PF0RM(DN1

)

P(DN(L))

0UTSTR(38:49)=' ind. var. ' WRITE (0UTSTR(B0:61),F0RMS(PF0RM(DG1)

P(DG(L))

ELSEIF (INDVAR.EQ.DG{L)) THEN

WRITE ( OUTSTR ( 2 B : 38 ), FORMS ( PFORM ( DNl

)

P(DN(L))

WRITE ( OUTSTR (38:49), FORMS ( PFORM ( ENl )

)

P(EN(L))

0UTSTR(B0:62)=' ind. var.'

ELSE

WRITE (0UTSTR(2B:36) ,F0RMS(PF0RM(DN1)

)

P(DN(L))

WRITE (0UTSTE(38:49) ,F0RMS(PF0RM(EN1)

P(EN(L))

WRITE (0UTSTR(B0:81),F0RMS(PF0RM(D61))

P(DG(L))

ENDIF

ELSE

0UTSTR(10:30)=' none

QUTSTE(31:81)='

ENDIF

WRITE (LUT0,'(1X,A81,/)') 0UTSTR(:62)

10 CONTINUE

20 GALL PROMPT (' Enter type > ',2,B)

READ (LUTI,»(A)') INSTR

IF (INSTE.EQ.* ») THEN

DONS = .TRUE.

80
ELSE

SELECT=0

DO 30 1=1,6

IF ((INSTR.EQ.TYPE(I)).Oa.

(INSTE.EQ.TYPE(I+6))) SELECT=I

CONTINUE

IF ( SELECT. EQ.O) THEN

WRITE (LUTO,*)' Error: improper responss.

' Entsr Dl, D2, Al, A2. or A3'

GOTO 20

END IF ENDIF

IF ((DOPANT(SELECT}). AND. .NOT. DONE) THEN

WHITE (LUTO, »(////, 32X,»' Impurity Data Entry",///)')

WRITE (LUTO, » (51, "Type Dopants Density(cm-3) "

' ' Energy (eV) Degeneracy " ) '

WRITE (LUT0,'(6X," — — —

,, -__ _ "./)')

OUTSTR( 6 : 7

) =TYPE ( SELECT

0UTSTR(13:26)=NAMES(SELECT)

WRITE (0UTSTR(2B:36),F0RHS(PF0RM(DN1))) P(DN(SELECT)

WRITE (0UTSTR(38:40),F0RMS(PF0RM(EN1))) P(EN(SELECT)

WRITE (0UTSTR(BO:61),FORHS(PFORM(D61))) P(D6(SELECT)

WRITE (LUTO,*) 0UTSTR(:61)

WRITE (LUTO, 2000)

FORMAT (//,30X,'l NBme',/,30X,

»2 Den8ity(ca-3)»,/,30X,

'3 Energy (eV)',/,30X,

'4 Degeneracy ' ,/,30X,

'B Replace entry' ,/,30X,

'6 Delete entry',/)

CALL PROMPTC Enter number(8) > ',2,4)

READ (LUTI,'(A)') INSTR2

*** count number of significant

characters in the response ***

DO 60 1=1,40

IF (DIGIT(INSTR2(I:I))) J=I

CONTINUE

*** toggle logical switches ***

DO 60 1=1,

IF (DIGIT(INSTR2(I:I))) THEN

READ (INSTR2(I:I),'(I1)') K IF (INRN6E(1,6,K)) ACTION(K)=.TRUE.

ENDIF

CONTINUE

ELSEIF (.NOT. DONE) THEN

DOPANT ( SELECT)= . TRUE

DO 66 1=1,4

ACTION(I)=.TRUE.

ENDIF

IF (ACTI0N(6)) THEN

DO 70 1=1,

ACTION(I)=. FALSE.

CONTINUE

DOPANT ( SELECT) = . FALSE

NAMES ( SELECT) = 'Not Selected ' ENDIF

IF (ACTI0N(6)) THEN

DO 80 1=1,4

ACTION(I)=.TRUE.

CONTINUE

ENDIF

IF (ACTION(l)) THEN

WRITE (LUTO, '(//, SOX, "Impurity Data Entry",/)')

WRITE (LUTO ,

» (41X, • ' 123466780012 " ) '

CALL PROMPT(> Enter the name (up to 12 characters) >

'

81
* 0,0)

READ (LUTI.'CA)') NAMES (SELECT)

ENDIF

4006 FORMAT (' Error: Response must be a positive,

* 'real number')

90 IF (ACTI0N(2)) THEN

CALL PROMPTC Enter the density > ',2.0)

READ (LnTI,*,ERR=0610) P(DN(SELECT)

)

IF (P(DN(SELECT)).LT.O.) THEN

WRITE (LnT0,400B)

GOTO 90

ENDIF

IF (P(DN(SELECT)).6T.1.0E+21) THEN

WRITE (LTJTO,*)' Error: The upper limit for

* 'density is l.OE+21'

GOTO 90

ENDIF

ENDIF

100 IF (ACTIONO)) THEN

CALL PROMPTC Enter the energy > ',2,0)

READ (LnTI,*,ERR=9620) P(EN(SELECT))

IF (P(EN(SELECT)).LT.O.) THEN

WRITE (LUT0,4006)

GOTO 100

ENDIF

IF (P(EN(SELECT)).6T.1.6) THEN

WRITE (LUTO,*)' Error: The upper limit ior

* 'energy is 1.6'

GOTO 100

ENDIF

ENDIF

110 IF (ACTI0N(4)) THEN

CALL PROMPTC Enter the degeneracy > ',2,0)

READ (LnTI,*,ERR=9630) P(D6(SELECT)

)

IF (P(D6(SELECT)).LT.O.) THEN

WRITE (LUT0,400B)

GOTO 110

ENDIF

IF (P(DG(SELECT)).6T.&0.) THEN

WRITE (LUTO,*)' Error: The upper limit for

* 'degeneracy is 50.'

GOTO 110

ENDIF

ENDIF

GOTO 1 9510 WRITE (LUTO,*)' Error: response must be a real number

GOTO 90

9520 WRITE (LUTO,*)' Error: response must be a real number

GOTO 100

9530 WRITE (LUTO,*)' Error: response must be a real number

GOTO 110

ENDIF

RETURN

END

C

C Subroutine EEHAN updates the error file.

C

SUBROUTINE ERHAN(INDVAR,NUMER,PFORH)

C

REAL P(46)

COMMON /FARMS/ F CHARACTER NAMES(6)*13,DSCRIP(46)*11 ,F0RMS(6)*16

COMMON /STRING/ NAMES. DSCRIP, FORMS

INTEGER IFLAG

COMMON /SWITCH/ IFLAG

C

82
INTEGER LUTO.LUTI.LUER

COMMON /LUNIT/ LUTI.LUTO

PARAMETER (LUER=27)

INTEGER INDVAR,PF0RM(46)

CHARACTER*80 OUTSTR

C IF (IFLAG.Eq.3) THEN

C 0UTSTR(:39)=» IFLA6 = 3, At a valua ol 123456789012 » 0UTSTR(:39)=' At a value ol 1234B6789012 ' 0UTSTR(40 : B5)= »f or 1234B678901 :

WRITE (0nTSTR(27: 38), FORMS (PFORM(INDVAR))) P(INDVAR)

0UTSTR(44:B4)=DSCRIP(INDVAR)

WRITE (LUER, '(/)')

WRITE (LUER.*) OnTSTR(:BB)

WRITE (LUER, 10)

10 F0RMAT(1X,' th« convergaiics criterion was met, but

* 'the true zero ?as')

WRITE (LUER,*) ' not found. The output is suppressed.'

NUMER=NTJMER+1

ELSEIF (IFLAG.Eg.4) THEN

C 0nTSTR(:39)=' IFLA6 = 4, At a value of 123466789012 ' 0UTSTR(:39)=' At a value of 1234B6789012 ' 0UTSTR(40:BB)='for 12348678901:'

WRITE (0UTSTR(27:38),F0RMS(PFQRM(INDVAR))) P(INDVAR)

0nTSTR(44:B4)=DSCRIP(INDVAR)

WRITE (LUER, '(/)')

WRITE (LUER,«) OUTSTR(:BB)

WRITE (LUER, 20)

20 FORMATdX,' no root vas found in the search interval.',

* ' The output is suppressed.')

NUMER=NUMER-i-l

ELSEIF (IFLA6.EQ.5) THEN

C 0UTSTR(:3g)=' IFLAO = B, At a value of 1234B6789012 ' 0UTSTR(:39)=' At a value of 123456789012 ' 0UTSTR(40 : B5)= 'f or 12345678901 :

WRITE (0UTSTR(27:38),F0RMS(PF0RM(INDVAR))) P(INDVAR)

0UTSTR(44:B4)=DSCRIP(INDVAR)

WRITE (LUER, '(/)»)

WRITE (LUER,*) OUTSTR(:BB)

WRITE (LUER, 30)

30 F0RMAT(1X,' no zero was found after BOO iterations.',

* ' The output is suppressed.')

NUMER=NUHER-t-l

ELSEIF (IFLA6.Eq.6) THEN

C 0UTSTR(:39)=' IFLA6 = 6, At a value of 123466789012 ' 0UTSTR(:39)=' At a value of 123466789012 ' 0UTSTR(40 : 56)= 'for 12346678901 :

WRITE (0UTSTR(27:38),F0RMS(PF0RM(INDVAR))) P(INDVAR)

0UTSTR(44:54)=DSCRIP(INDVAR)

WRITE (LUER, '(/)')

WRITE (LUER.*) 0UTSTR(:66)

WRITE (LUER, 40)

40 FORMATdX,' Temperature exceeded the melting point

* 'of the material. ',/, IX, ' The output is suppressed.')

NUMER=NUMER-i-l

ENDIF

RETURN

END

C

C Real Function FD performs the Fermi Dirae integral calculation.

C FUNCTION FD(J,AR6)

C

C Function FD defines the Fermi-Dirac integral of order J.

C The short series expansion of P. Van Halen and D. L. Pulfrey, Appl.

C Phys. Lett. 57, 6271-6274 (1986) is used to approximate the integral

83
C to within tvo parts in tan thousand for all real arguments.

C Corrected coefficients were received from David Pulfrey.

C INTEGER R

REAL A(7),B(7),C(7),D(7)

REAL A1(7),B1(7),C1(7),D1(7)

REAL A2(7),B2(7).D2(7)

REAL A3(7),B3(7),D3(7)

REAL A4(7),B4(7),D4(7)

REAL ARG.J.X

DATA Al /I. , .363668, .192439, .122973, .077134, .036228, .008346/

SITA Bl /, 765147, .804011, .188885, .020307, -.00438, -.000366, .000133/

DATA Ca /. 777114, .681307, .206132, .01768, -.006549, .000784, -.000036/

DATA Dl/. 762263, .928196, .680839,26.7829,-663.636,3631.43,-3264.66/

DATA A2/1. , .176826, .064722, .033677, .021363, .011461, .003032/

DATA B2/. 8672, .766101, .302693, .062718, .006793, -.001342, .000089/

DATA D2/. 300901, 1.86681, -.466432, -7. 71648, 120. 636,

*-800.702,2189.84/

DATA A3/1. , .088392, .021407, .007917, .003723, .001716, .000461/

DATA B3/. 927660, .866971, .383690, .098863, .017398, .000418,

*-. 000067/

DATA D3/. 086972, 1.23738, 1.07293, .362030,38.7679,-760.718,

4378.70/

DATA A4/1. , .044203, .007167, .001976, .000719, .000317, .000106/

DATA B4/. 961478, .927761, .432494, .129617, .023308, .004067,

-.000061/

DATA D4/. 019105, .494958, 2. 13722, -.603902, -6. 99243, 96. 6031,

-426.046/

C IF(J.EQ.0.6) THEN

DO 6 R=l,7

A(R)=A1(R)

B(R)=B1(R}

C(R)=C1(R)

D(R)=D1(R)

6 CONTINUE

ELSEIF (J.EQ.1.6) THEN

DO 6 R=l,7

A(R)=A2(R)

B(R)=32(R)

C(R)=B2(R)

D(R)=D2(R)

6 CONTINUE

ELSEIF (J.EQ.2.6} THEN

DO 7 R=l,7

A(R)=A3(R)

B(R)=B3(R)

C(R)=B3(R)

D(R)=D3(R)

7 CONTINUE

ELSEIF (J.Eq.3.&) THEN

DO 8 R=l,7

A(R)=A4(R)

B(R)=B4(R)

C(R)=B4(R)

D(R)=D4(R)

8 CONTINUE

ELSE

STOP

ENDIF

C x=o IF(ARG.LE.O) THEN

DO 10 R=l,7

IF (R«ARG.6T.-85.) X=X+(-l)^+(R+l)^A(R)^EXP(ARG^R)

10 CONTINUE

84
ELSEIF((AEG.GT.O) .AND. (ARG.LE.2.)) THEN

DO 20 R=l,7

X=X+B(R)*AEG**(a-l)

20 CONTINUE

ELSEIF ( ( ARG . GT . 2 . ) . AND . (AEG . LT . 3 . 6999) } THEN

DO 30 R=l,7

X=X+C(R)*AR6*«(R-1)

30 CONTINUE

ELSE

DO 40 a=l,7

X=X+D(R)/AR6**(2*(R-1))

40 CONTINUE

X=X*ARG*«(J+1)

ENDIF

C FD=X

RETURN

END

C

C Subroutina HEADER produces output headings.

C SUBROUTINE HEADER

C INTEGER PFORM ( 46 ) , INDVAR , OUTPUT (28), OUTNUM , PF ( 4 , 2 )

,

• PNUM.LUDEF.MAXOUT.HATSW

LOGICAL TRMSW.LSTSW.PLTSW

COMMON /GLOBAL/ PFORM, INDVAR, OUTPUT, OUTNUM,

• PF , PNUM , LUDEF , TRMSW , LSTSW , PLTSW , MATSW , MAXOUT

CHARACTER NAMES ( 6 ) * 1 3 , DSCRIP ( 46 )

>»< 1 1 , FORMS ( 6 ) « 1

5

COMMON /STRING/ NAMES , DSCRIP , FORMS

C INTEGER LUPLl , LUPL2 , LUPL3 , LUPL4 , LUTMP

PARAMETER (LUPL1=22,LUPL2=23,LUPL3=24,LUPL4=25,LUTMP=26)

C CHARACTER*72 OUTSTE

INTEGER LUPL(4)

DATA LUPL /LUPLl, LUPL2,LUPL3,LUPL4/

DATA OUTSTR /' '/ IF ( LUDEF. NE. LUTMP) THEN

IF (TRMSW. OR. LSTSW) THEN

DO 10 1=1, OUTNUM

WRITE (0UTSTR(12*(I-1)+1:12*(I)), '(IX.All)')

• DSCRIP (OUTPUT(I))

10 CONTINUE

WRITE (LUDEF, '(/)')

WRITE (LUDEF,*) OUTSTR(: 12*0UTNUM)

DO IB 1=1, OUTNUM

WRITE (0UTSTa(12*(I-l)+l :12*(I)) ,

' (IX, All) '

)

» I > 15 CONTINUE

ENDIF

ELSE

DO 20 1=1, OUTNUM

WRITE (LUDEF,*) DSCaiP(OUTPUT(I))

20 CONTINUE

ENDIF

IF (PLTSW) THEN

DO 30 1=1, PNUM

0UTSTE(:12)=DSCEIP(PF(I,1))

OUTSTE( 13 : 24) =DSCEIP ( PF ( 1 , 2 ) ) WEITE (LUPL(I),*) 0UTSTE(:24)

30 CONTINUE

ENDIF

EETUEN

END

C

85
C Subroutine IMPTBL produces a table of impurity information.

C SUBEOUTINE IMPTBL ( PFORM , INDVAR , LUDEF , LS TSW , MATSV , TRMSW)

C REAL P(46)

COMMON /PARMS/ P CHARACTER NAMES (6)>»13,DSCRIP(46)«11, FORMS ( 6

) * 1

COMMON /STRING/ NAMES. DSCRIP, FORMS

LOGICAL D0PANT(6)

COMMON /TSTCOM/ DOPANT

C INTEGER T , RTEMP , DNl , ENl , DGl , DN2 , EN2 . DG2 , DN3 , EN3

* D63 , DN4 , EN4 , DG4 , DN5 , ENE , D6S , DNS , EN6 , DG6

PARAMETER (T=i ,RTEMP=2 , DN1=21 , EN1=22 , D61=23 , DN2=24 , EN2=25 , D62=26

,

* DN3=27,EN3=28,D63=29,DN4=30,EN4=31,DG4=32,DNB=33,ENB=34,D6B=35,

* DN8=44,EN8=4B,D66=46)

INTEGER LULST

PARAMETER (LULST=21)

INTEGER LUTI.LUTO

COMMON /LUNIT/ LUTI.LUTO

C

CHARACTER OniSTE^SO

INTEGER DN(6} ,EN(6) ,DG(6) , LUDEF, PF0RM(46) .INDVAR.MATSW

LOGICAL LSTSV, TRMSW

DATA DN /DN1,DN2,DN3,DN4,DNB,DN6/

DATA EN /EN1,EN2,EN3,EN4,EN6,EN6/

DATA DG /D61,DG2,DG3,DG4,DGB,DG6/

DATA OUTSTR /' »/ C IF (INDVAR.GT. RTEMP) THEN

OUTSTR( : 26)= 'Measurement Temperature = ' WRITE (0UTSTR(27:38),F0RMS(PF0RM(T))) P(T)

0UTSTR(39:B3)=' 1000/T = ' WRITE (0UTSTR(B4:6B), FORMS (PFORM(RTIMP))) P (RTEMP)

ENDIF

IF ( TRMSW, AND. ( LUDEF. NE. LULST)) THEN

IF (MATSW.Eq.l) THEN

WRITE (LUTO, '(////," Electrical Properties of

* "Silicon",/)')

ILSEIF (MATSW.EQ.2) THEN

WRITE (LUTO, '(////, " Electrical Properties of ",

* ' 'Gallium Arsenide" ,/) ») ELSE

C —-option-'— This option has been added for InP, but could

C be changed to any semiconductor name. WRITE (LUTO, '(////, " Electrical Properties of ",

* "Indium Phosphide" ,/) ') ENDIF

IF (INDVAR.GT. RTEMP) THEN

WRITE (LUTO,*) 0UTSTR(:6B)

ENDIF

WRITE (LUTO.IBO)

IBO F0EMAT(/,1X, 'Dopants ' ,7X, »Density(cm-3) ' ,4X, 'Energy(eV) '

,

* 4X ,

' Degeneracy '

)

WRITE (LUTO, IBB) IBB FORMATdX, '- —' ,4X, ' ' ,4X, ' '

,

* >) DO IB 1=1,8

IF (DOPANT(I)) THEN

IF (DN(I).EQ.INDVAR) THEN

WRITE (LUT0,2B1) NAMES(I),

* ' ind. var. ' ,P(EN(I)) ,P(DG(I))

ELSEIF (£N(I).EQ.INDVAR) THEN

WRITE (LUT0,2B2) NAMES (I).

* P(DN(I)),' ind. var. ',P(DG(I))

ELSEIF (DG(I) .EQ.IND7AR) THEN

86
WRITE (LnT0,253) NAMES (I),

* P(DN(I)),P(EN(I)).» ind. var' ELSE

WRITE (LTIT0,2S0) NAMES(I),

* P(DN(I)),P(EN(I)).P(DG(I))

END IF ENDIF

15 CONTINUE

250 F0RMAT(1I,A13,2I,1PE10.3,0P,6X,F8.4,6X,F8.4)

251 F0RMAT(1X,A13,2X,A11,0P.5X,F8.4,6X,F8.4)

252 FORMAT (1X,A13,2X,1PE10.3,0P,6X,A11,3X,F8.4)

253 FORMAT (IX , Al 3 , 2X , IPEIO . 3 , OP , 6X , F8 . 4 , 3X , A12

)

IF(.N0T.((D0PANT(1)).QR.(D0PANT(2)).0R.(D0PANT(3)).0R.

* (D0PANT(4) ) . OR. (DOPANT(B) ) . OR . (D0PANT(6) ) )

)

* WRITE (LUTO, '(IX, "none")')

IF (LSTSW) WRITE (LUTO, '(/)')

ENDIF

IF (LSTSW) THEN

IF (MATSW.EQ.l) THEN

WRITE (LULST.'C Electrical Propertias of ",

* "Silicon",/)')

ELSEIF (MATSW.Eq.2) THEN

WRITE (LULST, '(////," Electrical Properties of "

* "Gallium Arsenide",/)')

ELSE

C option This option has been added lor InP, but could be

C changed to any semiconductor name. WRITE (LULST, •(////, " Electrical Properties of "

* "Indium Phosphide",/)')

ENDIF

IF (INDVAR.GT.RTEMP) THEN

WRITE (LULST,*) 0UTSTR(:65)

ENDIF

WRITE (LULST, IBO)

WRITE (LULST, lEE)

DO 25 1=1,6

IF (DOPANT(I)) THEN

IF (DN(I).Eq.INDVAR) THEN

WRITE (LULST, 251) NAMES(I),

* ' ind. var. ' ,P(EN(I) ) ,P(DG(I)

)

ELSEIF (EN(I).Eq.INDVAR) THEN

WRITE (LULST, 252) NAMES(I),

* P(DN(I)),' ind. var. ',P(D6(I))

ELSEIF (D6(I).Eq.INDVAR) THEN

WRITE (LULST, 253) NAMES (I),

* P(DN(I)),P(EN(I)), ' ind. var' ELSE

WRITE (LULST, 250) NAMES(I),

* P(DN(I)),P(EN(I)),P(D6(I))

ENDIF

ENDIF

26 CONTINUE

IF(.NOT. ((DOPANT(l)) .OR. (D0PANT(2) ) . OR. (D0PANT(3) ) . OR.

* (D0PANT(4)) .OR. (D0PANT(5)) .OR. (D0PANT(6))))

* WRITE (LULST, '(IX, "none")')

ENDIF

RETURN

END

CC Subroutine INDSEL obtains information about independent variable

C SUBROUTINE INDSEL ( INDVAR , PFORM , MATSW)

REAL INIVAL,FINVAL,STPVAL

LOGICAL LOGSW

COMMON /RANGE/ INIVAL,FINVAL,STPVAL, LOGSW

87
REAL P(46)

COMMON /FARMS/ P CHARACTER NAMES(6)*13,DSCRIP(46}*11.F0RMS(6)*1E

COMMON /STRING/ NAMES, DSCRIP, FORMS

LOGICAL D0PANT(6)

COMMON /TSTCOM/ DOPANT

INTEGER LUTO.LUTI

COMMON /LUNIT/ LUTI.LUTO

C INTEGER T , RTEMP , ENl , OGl , DN2 , EN2 , DG2 , DN3 , EN3

,

* D63,DN4,EN4,DG4,DN6,ENE,DGB,DN6,EN6,DG6

PARAMETER (T=l ,RTEMP=2 ,DN1=21 ,EN1=22 ,DG1=23 ,DN2=24, EN2=25 ,D62=26

,

* DN3=27,EN3=28,DG3=29,DN4=30,EN4=31,DG4=32.DNE=33,EN5=34,DG6=35.

* DN6=44,EN6=45,DG6=46)

C INTEGER INDSET ( 20 }

, INDVAR , ITEST , PFORM ( 46 ), RSPON , NDV , OTHER

,

* DN(6),EN(6),DG(6),MATSW

C *** Note that DIGIT and INRNGE are logical functions

LOGICAL MOD ( 5 ), DIGIT , INRNGE , TOOLO , TOOHI

CHARACTER 0UTSTR*80 , INSTR*15 , YES*1 , CH

REAL UPLIM,L0WLIM,T01,T02,UPCHK,L0WCHK,SIZE

DATA INDSET /T, RTEMP, DNl, ENl, DG1,DN2,EN2,D62,DN3,

* EN3 , DG3 , DN4 , EN4 , DG4 , DNB , ENB , DGE , DN6 , EN6 , DG6/

DATA DN /DN1.DN2,DN3,DN4,DN6,DN6/

DATA EN /EN1,EN2,EN3,EN4,EN5,EN6/

DATA D6 /D61,DG2,DG3,D64,DG6,D66/

DATA OUTSTR /' '/ C DO 6 1=1,6

MOD(I)=. FALSE.

5 CONTINUE

IF (MATSW.Eq.l) THEN

C *•* Silicon *** nPLIM=1688.0

ELSEIF (MATSW.Eq.2) THEN

C *«« Gallium Arssnids *** nPLIM=1511.0

ELSE

C option Option addad for malting point of InP, this could be

C changed to work for any semiconductor.

nPLIM=1343.0

END IF L0WLIM=2 .

C *** Produce the independent variable selection menu *** WRITE (LUTO, '(////)•)

15 INSTR=' ' WRITE (LUTO, 1000)

1000 FORMAT (20X, 'Independent Variable Selection Menu',//)

0UTSTR(:42)=' Independent variable >

' 0UTSTR(43:B4) = DSCRIP (INDVAR)

WRITE (LUTO,*) 0UTSTR(:54)

0UTSTR(:42)=' Start >

' WRITE (0UTSTR(43:B4),F0RMS(PF0RM(INDVAR))) INIVAL

WRITE (LUTO,*) 0UTSTR(:B4)

0UTSTR(:42)=' Stop >

' WRITE (0UTSTR(43:B4), FORMS (PFORM( INDVAR))) FINVAL

WRITE (LUTO,*) 0UTSTR(:B4)

IF (LOGSW) THEN

OUTSTR( :42)=' Divisions/Decade >

' ELSE

0UTSTR{:42)=' Step >

' ENDIF

WRITE (0UTSTR(43: 54), FORMS (PFORM( INDVAR))) STPVAL

WRITE (LUTO,*) 0UTSTR(:54)

IF (( INDVAR. NE. T). AND. (INDVAR.NE. RTEMP)) THEN

OUTSTR( :42)=' Temperature (K) >

'

88
WRITE (0UTSTR(43:B4),F0EMS(PF0RM(T))) P(T)

WRITE (LUT0,'(1X,/,AB4)') 0UTSTR(:B4)

EiroiF

WRITE (LUT0,'(//,2BX,"1 New independent variable",/)')

WRITE (HJT0,'(2BX,"2 New starting value",/)')

WRITE (LUT0,'(2BX,"3 New final value",/)')

WRITE (LUT0,'(2BX,"4 New step (log or linear) ",/)')

IF (((INDVAR.NE.T).AND.(INDVAR.NE.RTEMP))) THEN

WRITE(LUT0,'(2BX,"B New temperature ",/)')

ENDIF

CALL PROMPTC Enter numberCs) > ',1,28)

READ (LUTI,'(A)') INSTR

C *** Count the number of characters in the response **>x J=0

DO 10 1=1, IB IF (DIGIT (INSTR(I:I))) J=I

10 CONTINUE

C *** Flag true, the menu item selected for change

DO 20 1=1,

IF (DIGIT (INSTR(I:I))) THEN

READ (INSTR(I:I), '(Il)») K IF (INRNGE(1,B,K)) HOD(K)=.TRUE.

ENDIF

20 CONTINUE

C *** Execute options selected *** WRITE (LUTO, '(////)')

40 IF (MOD(l)) THEN

DO 30 1=2,4

MOD(I)=.TRUE.

30 CONTINUE

IF (INDVAR.LE.RTEMP) H0D(6)=.TRUE.

C *** Just turned other options on ***

C

C *** Create variable menu ***

C WRITE (LUTO, '(2BX, "New",

* " Independent Variable Selection",///)')

WRITE (LUT0,'(33X,"1 Temperature (K) ",/)')

WRITE (LUTO, '(33X, "2 1000/Temp ",//)')

WRITE (LUTO, '(IX," Impurity " ,6X, "Density(cm-3) " , * 6X," Energy(eV) ",6X," Degeneracy ")')

WRITE (LUTO, '(IX," ",6X," ",

* 6X," ",6X," ",/)')

WRITE (LUTO, '(1X,A,T28, "3" , * T47,"4",T66,"B",/)') NAMES(l)

WRITE (LUTO, '(1X,A,T28, "6" , * T47,"7",T66,"8",/)') NAMES(2)

WRITE (LUT0,'(1X,A,T28,"9",

* T46, "10" ,T6B, "11" ,/) ') NAMES(3)

WRITE (LUTO, '(IX, A, T27, "12",

* T48,"13",T6B,"14",/)') NAMES(4)

WRITE (LUTO, '(IX, A, T27, "IB",

* T46, "16" ,T6B, "17" ,/) ') NAMES(B)

WRITE (LUT0,'(1X,A,T27,"18",

* T46,"19",T6B,"20",/)') NAMES(8)

C *** Install new independent variable **>•' CALL PROMPTC Enter number > ',1,19)

READ (LUTI,*,ERR=9B00) RSPON

IF (INRNGE (1,20, RSPON)) THEN

ITEST=RSP0N/3

IF (

(

ITEST . GE . 1 )and . (

not . DOPANT ( ITEST) ) ) THEN

WRITE (LUTO, '(IX," Error: parameter is "

,

* ''inactive, reselect. '')')

WRITE (LUTO, '(IX, "Hit <RETURN> to continue")')

READ (LUTI,'(A)') YES

GOTO 40

li

89
ENDIF

INDVAa=INDSET(RSPON)

ELSE

WEITE(LUTO,*} ' Error: Rasponso out of ranga'

WRITE (LUTO, '(IX, "Hit <RETDRN> to continue")')

READ (LUTI,'(A)') YES

GOTO 40

ENDIF

ENDIF

C *** Starting value... ***

60 TOOLO=. FALSE.

TOOHI=. FALSE.

IF (M0D(2)) THEN

CALL PROMPT (> Enter the starting value > ',1,0)

READ (LnTI,*,ERR=g600) INIVAL

P(INDVAR)=INIVAL

IF (INDVAR.EQ.T) P(RTEMP) = 1000. /P(T)

IF (INDVAR.EQ.RTEMP) P(T)= 1000./P(RTEMP)

ENDIF

C ** Final value ... **

70 IF (M0D(3)) THEN

CALL PROMPTC Enter the final value > ',1,0)

READ (LnTI,*,ERR=9700) FINVAL

ENDIF

C *** Hake sure Temperature is in an acceptable range

IF (INDVAR.LE.RTEMP) THEN

IF (INDVAR.EQ.T) THEN

0THER=RTEHP

ELSE

OTHER=T

ENDIF

P(INDVAR)=INIVAL

P(0THER)=1000./P(INDVAR)

T01=P(T)

P(INDVAR)=FINVAL

P( OTHER) =1000. /P(INDVAR)

T02=P(T)

UPCHK=AMAI1(T01,T02)

L0WCHK=AMIN1 ( TOl , T02

)

IF (LOWCHK.LT.LOVLIM) THEN

WRITE (LUTO,*)' Error: Temperature must always be ', * 'greater than'

WRITE (LUTO,*)' 2.5 degrees (absolute) for ', * 'computational'

WRITE (LUTO,*)' reasons'

TOOLO=.TRUE.

ENDIF

IF (UPCHK.GT.UPLIM) THEN

WRITE (LUTO,*)' Error: Calculation attempted past the ', * 'melting point'

WRITE (LUTO, '(9X, "of the material, ",F6.1,

* " degrees (absolute)")') UPLIM

TOOHI=.TRUE.

ENDIF

IF (TQOHI.OR.TOOLO) GOTO 60

P(INDVAR)=INIVAL

P(0THER)=1000./P(INDVAR)

ELSE

C Check for unreasonable impurity parameters *** DO 83 1=1,6

IF ( ( INDVAR . EQ . DN( I ) ) . AND . ( AMAXl ( FINVAL , INIVAL) . GT. 1 . OE+21)

)

* THEN

WRITE (LUTO,*)' Error: Maximum allowed density',

* ' is 1. OE+21'

TOOHI=.TRUE.

ENDIF

90
IF ((INDVAR.Eq.EN(I)).AND.(AMAXl(FINVAL,INIYAL) .GT.1.8)) THEN

WRITE (LUTO,*)' Error: Maximum allowed anergy is 1.6'

TOOHI=.TRUE.

ENDIF

IF ((INDVAR.Eq.DG(I)).AND.(AMAXl(FINVAL,INIVAL).6T.50.)) THEN

WRITE (LUTO,*)' Error: Maximum allowed degeneracy is 60>

TOOHI=.TRUE.

ENDIF

83 CONTINUE

IF ((INIVAL.LT.O.).OR.(FINVAL.LT.O.)) THEN

WRITE (LUTO,*)' Error: Starting and Final values must'

WRITE (LUTO,*)' be positive real numbers.'

TOOLO=.TRUE.

ENDIF

IF (TOOLO.OR.TOOHI) GOTO 60

ENDIF

C *** Step. . . ***

72 IF (M0D(4)) THEN

IF (LOGSW) THEN

CALL PROMPTC Do you want to change '//

* 'to linear scale ? (y/n) > ',1,0)

ELSE

CALL PROMPTC Do you want to change '//

* 'to log scale ? (y/n) > ',1,0)

ENDIF

READ (LUTI,'(A)') YES

IF ((YES.EQ. 'Y').OR.(YES.EQ. 'y»)) LOGSW=. NOT. LOGSW

IF (LOGSW) THEN

75 CALL PROMPTC Enter the integer number o£'//

* ' divisions/decade > ',1,0)

READ (LUTI,*,ERR=76) NDV

STPVAL=NDV

ELSE

80 CALL PROMPTC Enter the step value > ',1,0)

READ (LUTI,*,ERR=80) STPVAL

ENDIF

ENDIF

C *** Make sure step is reasonable *** IF ( STPVAL. EQ.O) THEN

WRITE (LUTO,*)' Error: Improper response or zero entered'

WRITE (LUTO,*)' for step or div. /decade'

GOTO 72

ENDIF

IF ( ( ( INIVAL . GT . FINVAL ) . AND . ( STPVAL . GT . 0 . 0 ) ) . OR

* ( (INIVAL.LT. FINVAL). AND. (STPVAL. LT. 0.0))) STPVAL=-STPVAL

IF (LOGSW. AND. ((INIVAL. EQ.O.). OR. (FINVAL. EQ.O.))) THEN

WRITE (LUTO,*)' Error: Logarithmic stepping is not possible'

WRITE (LUTO,*)' when starting or final value is zero'

M0D(4)=.TRUE.

GOTO 72

ENDIF

IF (LOGSW) STPVAL=ABS (STPVAL)

11=0

12=0

J=PFORM(INDVAR)

DO 86 1=1,15

CH = FORMS(J)(I:I)

IF (CH.EQ. 'F') 11=1

IF (CH.EQ. '.») 12=1

85 CONTINUE

IF (Il.NE.O) THEN

11=11+1

13=12+1

12=12-1

READ (F0RHS(J)(I1:I2), '(12)') Kl

READ (F0RMS(J)(I3:I3),'(I1)') K2

91
SIZE=10*«(K1-K2-1)-1

IF (STPVAL.LT.O.) SIZE=SIZE/10

IF Ubs(stpval).gt.size) then

WEITE (LUTO,*)' Error: Step or div/dacade is too large'

IF (STPVAL.GT.O)

* WRITE (LUTO, '(91, "a positive number for",

* A)') DSC&IPdNDVAR)

IF (STPVAL.LT.O)

* WRITE (LUTO, '(9X, "a negative number for",

* A)') DSCRIP(INDVAR)

M0D(4)=.TRUE.

GOTO 72

ENDIF

ENDIF

C *** Temperature... ***

IF ((MOD(E)).AND.(INDVAR.GT.RTEMP)) CALL TSEL(MATSW)

DO 90 1=1,5

MOD(I)=. FALSE.

90 CONTINUE

RETURN

9600 WRITE (LUTO,*)' Error: response must be an integer'

WRITE (LUTO, '(IX, "Hit <RETURN> to continue")')

READ (LUTI.'(A)') TES

GOTO 40

9600 WRITE (LUTO,*)' Error: response must be in F, D, or E format'

GOTO 60

9700 WRITE (LUTO,*)' Error: response must be in F, D, or E format'

GOTO 70

END

C

C Subroutine INPSEL allows user to select various input parameters.

C SUBROUTINE INPSEL (INDVAR,PFORM,HATSW)

C

REAL INIVAL,FINVAL,STPVAL

LOGICAL LOGSW

COMMON /RANGE/ INIVAL,FINVAL.STPVAL, LOGSW

REAL P(46)

COMMON /PARMS/ P CHARACTER NAMES(6)*13,DSCRIP(46)*11,F0RMS(6)*15

COMMON /STRING/ NAMES, DSCRIP, FORMS

LOGICAL D0PANT(6)

COMMON /TSTCOM/ DOPANT

C INTEGER T , RTEHP , DNl , ENl , DGl , DN2 , EN2 , DG2 , DN3 , ENS

,

* DG3,DN4,EN4,DG4,DNB,EN6,DG6,DN6,EN6,DG6

PARAMETER (T=l ,RTEMP=2 , DN1=21 , EN1=22 , DG1=23 , DN2=24 , EN2=25 , DG2=26

,

* DN3=27 , EN3=28 , DG3=29 , DN4=30 , EN4=31 , DG4=32 , DNS=33 , EN6=34 , D65=36

,

* DN6=44,EN6=46,DG6=46)

INTEGER LUTI.LUTO

COMMON /LUNIT/ LUTI.LUTO

C

INTEGER DN(6),EN(6),DG(6),INDVAR,PF0RM(46),RSP0N,MATSW

CHARACTER 0UTSTR*80,CH*1

LOGICAL DONE, DIGIT

DATA OUTSTR /' '/

DATA CH /' '/

DATA DN /DN1,DN2,DN3,DN4,DN&,DN6/

DATA EN /EN1,EN2,EN3,EN4,ENE,EN6/

DATA DG /DG1,DG2,DG3,DG4,DG5,DG6/

DONE=. FALSE.

WRITE (LUTO, '(////)')

10 IF (.NOT. DONE) THEN

WRITE (LUTO, 1000)

1000 FORMAT (/,26X, 'Input Data Selection Menu',///)

0UTSTR(:32)=' 1 Independent variable >

'

92
2000

2005

50

3000

3010

3020

3030

0UTSTE(33:44)=DSCRIP(INDVAR)

WEITE (LUTO,*) 0UTSTR(:44)

0UTSTR(:32)=' Start >

' WRITE (0UTSTR(33:44),F0RMS(PF0RM(INDVAR))) INIVAL

WRITE (LUTO,*) 0UTSTR(:44)

0UTSTR(:32)=' Stop >

' WRITE (0UTSTR(33:44),F0RMS(PF0RM(INDVAR))) FINVAL

WRITE (LUTO,*) 0UTSTR(:44)

IF (LOGSW) THEN

OUTSTR( :32)=' Divisions/Dscada > ELSE

0UTSTR(:32)=' Step > ENDIF

WRITE (0UTSTR(33: 3:4),FORMS(PFORM(INDVAR))) STPVAL

WRITE (LUTO,*) 0UTSTR(:44)

IF (((INDVAR.LT.l) .OR. (INDVAR.GT.2))) THEN

0UTSTR(:32)=' Temperature (K) > WRITE (0UTSTR(33:44),F0RMS(PF0RM(T))) P(T)

WRITE (LUTO, '(1X,/,A44,/)') 0UTSTR(:44)

ENDIF

WRITE (LUTO, '(71, "2 Impurity data: ")')

WRITE (LUTO, 2000)

F0RMAT(1X,/,10X, 'Dopants ' ,8X, 'Density (cm-3) ' ,5X,

'Energy(eV) ' ,6X, 'Degeneracy'

)

WRITE (LUTO, 2005)

FORMATdOX, ' ' ,8X, ' ',5X,

' ',6X,' ') DO 50 L=l,6

IF (DOPANT(L)) THEN

IF (INDVAR.EQ.DN(L)) THEN

WRITE (LUT0,3000)NAMES(L)

,

ind. var. ,P(EN(L)),P(DG(L))

ELSE

IF (INDVAR.Eq.EN(L)) THEN

WRITE (LUT0,3010)NAMES(L),

P(DN(L)),' ind. var. ',P(DG(L))

ELSE

IF (INDVAR.Eq.DG(L)) THEN

WRITE (LUT0,3020)NAMES(L),

P(DN(L)),P(EN(L)), ' ind.

ELSE

WRITE (LUT0,3030)NAMES(L)

,

P(DN(L)),P(EN(L)),P(DG(L))

ENDIF

ENDIF

ENDIF

ENDIF

CONTINUE

F0RMAT(10X,A13,3X,A11,5X,F8.4,8X,F8.1)

F0RMAT(10X,A13,3X,1PE11.4,5X,A11,5X,0PF8.1)

F0RMAT(10X,A13,3X,1PE11.4,5X,0PF8.4,8X,A11)

FORMATdOX, A13,3X,1PE11. 4, BX,0PF8. 4, 8X,F8.1)

IF (.N0T.((D0PANT(l)).0It-(D0PANT(2)).0R.(D0PANT(3))

.0R.(D0PANT(4)).0R.(D0PANT(5)).0R.(D0PANT(6))))

WRITE (LUTO, '(lOX, "none")')

WRITE (LUTO, '(/,7X, "3 Exit",/)')

CALL PROMPTC Enter number > ',2,9)

READ (LUTI,'(A)',ERR=9500) CH

IF (DIGIT(CH)) THEN

READ (CH,'(I1)') RSPON

ELSEIF (CH.EQ. ' ') THEN

RSP0N=3

ELSE

GOTO 9500

ENDIF

IF (RSPON. Eq.O) RSP0N=3

93
IF (RSPON.EQ.l) THEN

CALL INDSELdNDVAE.PFORM.MATSW)

ELSEIF (RSP0N.EQ.2) THEN

CALL DOPSELdNDVAR.PFORM)

ELSEIF (RSP0N.EQ.3) THEN

DONE=.TRnE.

ELSE

WRITE (LUTO,*)' Error: improper response, try again'

WRITE (LUTO,*)' Hit <RETIIRN> to continue.'

READ (LUTI.'CA)') CH END IF SOTO 10

ENDIF

RETURN

9500 WRITE (LUTO,*)' Error: response must be an integer'

WRITE (LUTO,*)' Hit <RETURN> to continue.'

READ (LUTI,'(A)') CH

GOTO 10

END

C

C Logical function INRNGE returns true if VAR is in the range [LOW, UP]

C LOGICAL FUNCTION INRNGE (LOy,UP,?AR)

C INTEGER LOW,UP,VAR

INRNGE= ( ( VAR . GE . LOW) . AND . ( VAR . LE . UP )

)

RETURN

END

C

C Subroutine MATSEL selects gallium arsenide, silicon,

C or other semiconductor.

C SUBROUTINE MATSEL(MATSW)

C INTEGER LUTI.LUTO

COMMON /LUNIT/ LUTI.LUTO

C

INTEGER MATSW

CHARACTER*! CH

DATA CH /' '/

10 WRITE (LUTO, '(////, 30X, "Material Selection",///)')

WRITE (LUT0,»(30X,"S Silicon",/)')

WRITE (LUT0,'(30X,"G Gallium Arsenide",/)')

C option—— Uncommenting the next statement will enable EPROP to

C compute for InP. No temperature dependent parameters

C have been included, hovever, and the constants used are not

C necessarily the best available. The InP example illustrates

C how other impurities can be added.

C WRITE (LUTO, '(30X, "I Indium Phosphide",/)')

CALL PROMPT(' Enter letter > ',2,25)

READ (LUTI,'(A)') CH

IF ((CH.EQ.'S').OR.(CH.EQ.»s')) THEN

MATSW=1

ELSEIF ((CH.EQ. >G').OR.(CH.Eq. 'g')) THEN

MATSW=2

ELSEIF ((CH.EQ. 'I').OE.(CH.EQ. 'i')) THEN

MATSW=3

ELSEIF (CH.EQ. ' ') THEN

RETUHI

ELSE

WRITE (LUTO,*)' Error: improper response'

GOTO 10

ENDIF

RETURN

END

C

94
C Subroutine MEIITJ sets up all oi the switches and parameters naeded

C loT the operation ol the program. It produces the main menu and

C calls the routines vhich produce all of the submenus.

C SUBROUTINE MEinj(SETNTJM)

C REAL INIVAL.FINVAL.STPVAL

LOGICAL LOGSW

COMMON /RANGE/ INIVAL.FINVAL.STPVAL, LOGSW

INTEGER PFORM ( 46 )

, INDVAR , OUTPUT (28), OUTNUM , PF ( 4 , 2 )

.

* PNUM,LUDEF,MAXOUT,MATSW

LOGICAL TRHSW.LSTSW.PLTSW

COMMON /GLOBAL/ PFOEM, INDVAR, OUTPUT, OUTNUM,

* PF , PNUM , LUDEF , TRMSW , LSTSW , PLTSW . MATSW , MAXOUT

REAL P(46)

COMMON /PARMS/ P CHARACTER NAMES(6)*13,DSCRIP(46)*11,F0RMS(6)*1B

COMMON /STRING/ NAMES. DSCRIP, FORMS

LOGICAL D0PANT(6)

COMMON /TSTCOM/ DOPANT

INTEGER LUTO.LUTI

COMMON /LUNIT/ LUTI.LUTO

C INTEGER T . RTEMP , EF . CN . CP , DI 1 , DI2 , DI3 . DI4 . DIB , EG , SUM , CAYT , ECMEF

,

* RDIEL , TPOVR , EFME , EFMH , FNC , FNV , DNl , ENl , DGl , DN2 , EN2 . DG2 . DN3 , EN3

,

* DG3 , DN4 , EN4 , DG4 , DN5 , ENB , DG5 , FNCP , FNVP , CN6 , CNL , CNX , DSLGL . DEL6X

,

* DI6.DN6.EN6,DG6

PARAMETER (T=1,RTEMP=2,EF=3.CN=4.CP=B.DI1=6,DI2=7,DI3=8, 014=9,

* DIB=10,EG=11,SUM=12,CAYT=13,ECMEF=14,RDIEL=1B,TP0WR=18,EFME=17,

* EFMH=18,FNC=19,FNV=20,DN1=21,EN1=22,DG1=23,DN2=24,EN2=2B.DG2=26,

* DN3=27,EN3=28,DG3=29,DN4=30,EN4=31,DG4=32,DNB=33,EN5=34,DG5=3S.

* FNCP=36 , FNVP=37 , CNG=38 , CNL=39 , CNX=40 , DELGL=41 , DELGX=42 , 016=43

,

* DN6=44,EN6=4B.DG6=46)

INTEGER LUIN.LULST.LUPL1,LUPL2.

* LUPL3.LUPL4,LUTMP.LUER

PARAMETER (LUIN=20 ,LULST=21 ,LUPL1=22 ,LUPL2=23

,

* LUPL3=24 , LUPL4=2B , LUTMP=26 , LUER=27

)

C INTEGER SETNUM,DN(6) ,EN(6) .DG(6) .RSP0N,HYBSET(28) .HYBNUM,

* SHTSET(IO) ,FULSET(28) .CSTSET(12) .LUPL(4)

CHARACTER 0UTSTR*80 , CH*1 , OUTSET ( 4 ) * 14 , PLNAM ( 4 ) *9 , INSTR*4

LOGICAL DEV ( 3 ) , DONE , INRNGE . UNDEFP , UNDEFO .DIGIT

DATA DN /DN1,DN2,DN3.DN4,DNB,DN6/

DATA EN /EN1,EN2.EN3,EN4.ENB,EN6/

DATA DG /DG1,D62.DG3,DG4,DGB,DG6/

DATA OUTSET /'short set ','full set

* 'constants '.'user specified'/

DATA SHTSET /RTEMP, EF.CN. CP. DI1.DI4.DI2. DIE. DI3.DI6/

DATA FULSET /T,RTEMP,EF,CN,CP,DI1,DI2,DI3,DI4,DI5,DI6,E6,SUM,

* CAYT. ECMEF, RDIEL, TPGWR. EFME. EFMH, FNC. FNV, FNCP, FNVP,

* CNG,CNL,CNX,DELGL,DELGX/

DATA CSTSET /T, RTEMP, CAYT, EG, RDIEL, TPOWR, EFME,

* EFMH, FNC, FNV, DEL6L,DEL6X/

DATA LUPL /LUPL1,LUPL2,LUPL3,LUPL4/

DATA PLNAM / 'PLOTl. DAT' , 'PL0T2.DAT' , 'PL0T3.DAT' , 'PL0T4, DAT'/

DATA OUTSTR /' '/

DATA CH /' '/

DONE=. FALSE.

C *** Read input file *** OPEN (UNIT=LUIN , FILE= ' EPROP . DAT ' . STATUS= » OLD '

, ERE=9B10

)

READ (LUIN,'(4L2)',ERR=9S10,END=9610) DEV, LOGSW

READ (LUIN.'(2I2)'.ERR=9510.END=9B10) SETNUM. MATSW

READ (LUIN. ' (914) ' .ERR=9B10 .END=9510)PNUM, ( (PF(I , J) . 1=1 ,4) , J=l , 2)

READ (LUIN.'(29(1X.I2))'.ERR=9B10,END=9B10) OUTNUM , OUTPUT

READ (LUIN. '(29(1X.I2))',ERR=9B10.END=9610) HYBNUM, HYBSET

READ (LUIN, '(1X,I2)'.ERR=9B10.END=9B10) INDVAR

95
READ (LUIN ,

' ( 3 ( IX , E12 . B )

)

' , ERR=95 10 , END=9510 ) INIVAL , FINVAL , STP VAL

READ (LUIN, '(2(1X,E12.B))',ERR=9510,END=9510) P(T) ,P(RTEMP)

READ (LUIN,'(6L2)',ERR=9510,END=9B10) DOPANT

DO 10 1=1,6

IF (DOPANT(I)) THEN

READ (LUIN, '(1X,A13,3(1X,E12.B))',ERR=9E10,END=9B10)

NAMES(I).P(DN(I)),P(EN(I)),P{DG(I))

ELSE

P(DN(I))=0.0

P(EN(I))=0.0

P(DG(I))=0.0

NAMES(I)='Not Sslscted ' ENDIF

CONTINUE

*** Menu loop **•

IF (.NOT. DONE) THEN

*** Put the main menu on ths screen *** WRITE (LUTO, '(//////////, 3BX, "Main Menu")')

0UTSTR(:2B)=' 1 Material > ' IF (MATSW.EQ.l) THEN

0UTSTR(26:29)='Si ' ELSEIF (MATSW.Eq.2) THEN

0UTSTR(26:29)='GaAs>

ELSE

>ption This option added for InP; but could represent

any semiconductor.

0UTSTR(26:29)='InP'

ENDIF

WRITE (LUTO,*) 0UTSTR(:29)

OUTSTR( :2B)=' 2 Output to >

' 0UTSTR(26:6B)=' » IF (DEV(l)) THEN

IF (DEV(2)) THEN

IF (DEV(3)) THEN

0UTSTR(26:48)='terminal, listing file,'

0UTSTR(49:6B)=» and plot lile(s)'

ELSE

0UTSTR(26: BO) = 'terminal and listing file'

ENDIF

ELSE

IF (DEV(3)) THEN

0UTSTR(26:B0)= 'terminal and plot file(s)'

ELSE

0UTSTR(26:38)='terminal only'

ENDIF

ENDIF

ELSE

IF (DEV(2)) THEN

IF (DEV(3)) THEN

0UTSTR(26:49)='listing and plot file(s)«

ELSE

0UTSTR(26:42)='listing file only'

ENDIF

ELSE

0UTSTR(26:42)='plot file(s) only'

ENDIF

ENDIF

WRITE (LUTO,*) 0UTSTR(:6B)

IF (DEV(3)) THEN

0UTSTR(:2B)=' Plot file(s) : ' WRITE (LUTO,*) 0UTSTR(:2B)

IF (PNUM.EQ.l) WRITE (LU''0, ' (13X,A11

,

» " vs. ".All)') DS ,RIP(PF(1,2)),DSCRIP(PF(1.1))

IF (PNUM.GE.2) WRITE (LUTO, ' (lOX, All

,

» " vs. " ,A11,4X,A11, " vs. ",A11)')

* DSCRIP(PF(1,2)),DSCRIP(PF(1,1)),

96
2000

200B

60

3000

3010

3020

3030

DSCRIP(PF(2,2)),DSCaiP(PF(2,l))

IF (Pinra.EQ.3) WHITE (LUTO, ' (lOX.All, " vs. ",A11)') DSCRIP(PF(3,2)),DSCaiP(PF(3,l))

IF (POTM.Eq.4) WEITE (LUTO, ' (lOX, All, " vs. " ,A11,4X,A11, " vs. ".All)')

DSCRIP(PF(3,2)),DSCRIP(PF(3,1)),

DSCRIP(PF{4,2)),DSCRIP(PF(4,1))

ENDIF

OUTSTRC :2B)=' 3 Output > » 0UTSTR(26:39)= OirTSET(SETNUM)

WRITE (LUTO,*) 0UTSTR(:39)

0UTSTR(:2B)=' 4 Input data : ' WRITE (LUTO,*) 0UTSTR(:25)

OUTSTR( :32)=' Independent variable >

' 0UTSTR(33:44) = DSCRIP(INDVAR)

WRITE (LUTO,*) 0UTSTR(:44)

0UTSTR(:32)=' Start >

' WRITE (0UTSTR(33:44),F0RMS(PF0RM(INDVAR))) INIVAL

WRITE (LUTO,*) 0UTSTR(:44)

0UTSTR(:32)=' Stop >

» WRITE (0UTSTR(33:44),F0RMS(PF0RM(INDVAR))) FINVAL

WRITE (LUTO,*) 0UTSTR(:44)

IF (LOGSW) THEN

0UTSTR(:32)=> Divisions/Decade >

' ELSE

0UTSTR(:32)=' Step >

' ENDIF

WRITE (0UTSTR(33:44),F0RMS(PF0RM(INDVAR))) STPVAL

WRITE (LUTO,*) 0UTSTR(:44)

IF (((INDVAR.LT.l) .OR. (INDVAR.GT.2))) THEN

0UTSTR(:32)=' Temperature (K) >

' WRITE (0UTSTR(33:44),F0RMS(PF0RM(T))) P(T)

WRITE (LUTO,*) 0UTSTR(:44)

ENDIF

WRITE (LUTO, 2000)

F0RMAT(1I,/,10X, 'Dopants ' ,8X, 'Density (cm-3) ' ,BX,

'Energ7(eV) ' ,6X, 'Degeneracy'

)

WRITE (LUT0,200B)

FORMATdOX, ' ' ,5X, ' ' ,BX,

. ,,ei.' ') DO 60 L=l,6

IP (DOPANT(L)) THEN

IF (INDVAR.Eq.DN(L)) THEN

WRITE (LUTO, 3000 )NAHES (L) ,

' ind. var. ' ,P(EN(L) ) ,P(DG(L)

)

ELSEIF (INDVAR.Eq.EN(L)) THEN

WRITE (LUT0,3010)NAMES(L)

,

P(DN(L)),' ind. var. ',P(DG(L))

ELSEIF (INDVAR.Eq.DG(L)) THEN

WRITE (LUTO,3020)NAMES(L) , P(DN(L)),P(EN(L)),' ind. var.'

ELSE

WRITE (LUT0,3030)NAMES(L) , P(DN(L)),P(EN(L)),P(DG(L))

ENDIF

ENDIF

CONTINUE

FORMATdOX, A13,3X, All, BX,F9. 4, BX,F8.1)

FORMATdOX, A13,3X,1PE11. 4, OP, BX, All, 3X,F8.1)

FORMATdOX, A13,3X,1PE11. 4, OP, BX,F9. 4, BX,A12)

FORMATdOX, A13,3X,1PE11. 4, OP, 6X,F9. 4, 5X,F8.1)

IF (.N0T.((D0PANT(l)).0a.(D0PANT(2)).0R. (D0PANT(3))

.OR. (D0PANT(4)) .OR. (D0PANT(6) ) . OR. (D0PANT(8))))

WRITE (LUTO, 'dOX, "none")')

WRITE (LUTO,*)

WRITE (LUTO, 4000)

97
4000 F0aMAT(7X,'B Execute')

CALL PaOMPTC 6 Exit ',0,6)

CALL PEOMPTC' Enter number > ',0,27)

READ (LUTI,'(A)',EEE=9B00) INSTR

DO 60 L=l,4

IF (DIGIT(INSTR(L:L))) THEN

READ (INSTR(LiL),'(Il)') RSPON

GOTO 6E

ENDIF

60 CONTINUE

GOTO 9600

65 IF (.N0T.INRNGE(1,6,RSP0N)) THEN

WRITE (LUTO,*)' Error: input not in the range 1 to 6' WRITE (LUTO,*)' Hit <aETDaN> to continue.'

READ (HJTI,'(A)') CH

ELSE

IF (MATSW.EQ.l) THEN

C *** Silicon *** MAX0UT=21

ELSEIF (MATSW.Eq.2) THEN

C *** Gallium Arsenide *«*

MAX0irr=28

ELSE

C option This option specifies the maximum number ol

C output parameters, taken here to be the same

C as for Si.

MAX0UT=21

ENDIF

IF (RSPON. EQ.l) THEN

CALL MATSEL (MATSW)

ELSEIF (RSPON. £Q. 2) THEN

CALL DEVSEL (DEV,PNUM,PF,MAXOUT, MATSW)

ELSEIF (RSPON. EQ. 3) THEN

CALL OUTSEL (DSCRIP,INDVAa,SETNTJM, OUTSET,

* HYBSET,HYBNUH,MAXOUT)

ELSEIF (RSPON. EQ. 4) THEN

CALL INPSEL(INDVAR,PFORM, MATSW)

ELSEIF (RSPON. EQ. 6) THEN

WRITE (LUTO,*)' EPROP run aborted,',

* ' no changes made.'

C Pause needed in HacFortran

C PAUSE

STOP

ELSE

DONE = .TRUE. ENDIF

ENDIF

GOTO 20

ENDIF

C *** Initialize certain parameters according

C to decisions made above *** 0UTPUT(1)=INDVAR

TRMSW=DEV(1)

LSTSW=DEV(2)

PLTSW=DEV(3)

IF (SETNUM.EQ.i) THEN

DO 70 1=2,10

OUTPUT(I)=SHTSET(I)

70 CONTINUE

OUTNUM=e

ELSEIF (SETNUM.EQ.2) THEN

DO 80 I=2,MAX0UT

OUTPUT ( I

) =FULSET ( I

)

80 CONTINUE

OUTNUM=MAXOUT

IF (INDVAE.EQ.RTEMP) 0UTP¥T(2)=T

98
ELSEIF (SETNUM.EQ.a) THEN

IF (MATSW.EQ.l) THEN

C *** Silicon ***

0UTNira=10

ELSEIF (MATSW.Eq.2) THEN

C *** Gallium Arsanide *** 0UTNUM=12

ELSE

C option Third material option lor number ol output

C parameters under constants option, set here

C to be the same as for Si.

0UTNUM=10

END IF

DO 90 I=1,0UTNUM

OUTPUT(I)=CSTSET(I)

90 CONTINUE

ELSE

DO 100 I=2,HTBNUM

OUTPIIT ( I ) =HYBSET ( I

)

100 CONTINUE

OUTNUM=HYBNTra END IF WEITE (LUTO. '(///////////////////////////)')

C Warnings for unusual exit conditions

IF ((SETNTIM.EQ.3).AND.(INDVAa.NE.T),AND.(INDVAa.NE.aTEMP)) THEN

WEITE (LUTO, 102)

102 FORHAT(//,' Warning: The constants option is',

* ' selected and the ',/,' temperature is fixed. ', * ' Would you like to make temperature or')

CALL PROMPTC 1000/T the independent variable? (Y/N) > ',0,0)

READ (LUTI,'(A)') CH

IF (CH.EQ. 'Y') THEN

DONE=. FALSE.

GOTO 20

ENDIF

ENDIF

IF ((MATSW.EQ.l) .OR. (MATSW.EQ. 3)) THEN

UNDEFP=. FALSE.

UNDEFO=. FALSE.

IF (DE?(3)) THEN

DO 103 1=1,4

DO 103 J=l,2

IF (INRNGE(FNCP,DELGX,PF(I,J))) UNDEFP=.TRUE.

103 CONTINUE

ENDIF

IF (SETNUM.Eq.4) THEN

DO 104 I=1,HYBNUM

IF (INRNGE(FNCP,DELGX,HYBSET(I)))

* UNDEFO=.TRUE.

104 CONTINUE

ENDIF

IF (UNDEFO.AND.UNDEFP) THEN

WRITE (LUTO,*)' Warning: There are',

* > parameters in both the plot file'

WRITE (LUTO,*)' output and the user specified',

* ' output vhich are undefined'

WRITE (LUTO,*)' for this material'

ELSEIF (UNDEFO) THEN

WRITE (LUTO.'C Warning: There are",

* *> parameters in the user specified'',/,

* '' output vhich are undefined for'',

* " this material")')

ELSEIF (UNDEFP) THEN

WRITE (LUTO,'(" Warning: There are",

* '> parameters in the plot file output'',/,

* " vhich are undefined for this material'')')

99
END IF

IF (UNDEFO.OR.UNDEPP) THEN

CALL PROMPTC Do you wish to retiirn to '//

* 'the main menu? <Y/N> ',0,0)

READ (LUTI,'(A1)') CH

IF ((CH.EQ. 'Y').OR.(CH.EQ. 'y')) THEN

DONE=. FALSE.

GOTO 20

ENDIF

ENDIF

ENDIF

DO 1041 1=1,6

IF (.NOT.DOPANT(I)) THEN

IF ((INDVAR.EQ.DN(I)).OR.(INDVAR.EQ.EN(I)).OR.

* (iNDVAR.EQ.DGd))) THEN

WRITE (LUTO,*)' Warning: The independent ', * 'variable is an unselected parameter'

CALL PROMPT(' Do you wish to return to'//

* 'the main menu? <Y/N> ',0,0)

READ (LUTI, '(Al)') CH

IF ((CH.Eq. 'Y'). OR. (CH.EQ. 'y')) THEN

DONE=. FALSE.

GOTO 20

ENDIF

ENDIF

ENDIF

1041 CONTINUE

IF ((.N0T.LSTSW).AND.(0UTNUM.GT.6)) 0UTNTJM=6

IF (.NOT.LSTSW) THEN

LUDEF=LUTO

ELSE

OPEN (TmiT=LULST,FILE= 'LIST. DAT ',STATUS=' UNKNOWN')

IF (0UTNUM.GT.6) THEN

LUDEF=LUTMP

OPEN (UNIT=LUTMP , FILE= ' TEMP OR . ARY ' , STATUS= ' UNKNOWN '

)

ELSE

LUDEF=LULST

ENDIF

ENDIF

IF (PLTSW) THEN

DO lOB I=1,PNUM

OPEN (UNIT=LUPL ( I )

, FILE=PLNAM ( I ), STATUS= ' UNKNOWN '

)

106 CONTINUE

ENDIF

OPEN (UNIT=LUER,FILE='ERROR.LIS' ,STATUS='UNKNOWN')

CLOSE (UNIT=LUIN,STATUS=' DELETE')

C *** Send modifications to the input file **>•> OPEN (UNIT=LUIN , FILE= ' EPROP . DAT ' , STATUS= 'NEW '

)

WRITE (LUIN, '(4L2) ') DEV.LOGSW

WRITE (LUIN, '(212)') SETNUM,MATSW

WRITE (LUIN, '(914)') PNUM, ( (PF(I, J) ,1=1 ,4) , J=l ,2)

WRITE (LUIN,'(29(1X,I2))') OUTNUM , OUTPUT

WRITE (LUIN, '(29 (IX, 12)) ') HYBNUM.HYBSET

WRITE (LUIN, '(IX, 12)') INDVAR

WRITE (LUIN, '(3(1X,E12.B))') INIVAL,FINVAL,STPVAL

WRITE (LUIN, '(2(1X,E12.B))') P(T) ,P(RTEMP)

WRITE (LUIN, '(6L2)') DOPANT

DO 110 1=1.6

IF (DOPANT(I)) WRITE (LUIN, ' (1X,A13,3(1X,E12.B) )

'

)

* NAHES(I),P(DN(I)),P(EN(I)),P(DG(I))

110 CONTINUE

CLOSE (UNIT=LUIN)

200 RETURN

9B00 WRITE (LUTO,*)' Error: response must be an integer'

WRITE (LUTO,*)' Hit <RETURN> to continue.'

READ (LUTI, '(A)') CH

100
GOTO 20

C Sets up nsv input fils if ona doesn't exist *** 9B10 WRITE (LUT0,9520)

9520 FORMAT (////, 27X, 'EPEOP Version 1.0',///,

*12X,'An Interactive Program lor Computing the Electrical',/,

*12X,' Properties ol GaAs and Si',///,

*3BX, 'by' ,//,13X, 'John J. Mathias, Alan C. Saabaugh, ', *'Michaal I. Bell' ,/,21X, 'Semiconductor Electronics Division',

*14X, 'National Institute of Standards and Technology',

*/,26X, 'Gaithersburg, MD 20899' ,/,34X, 'MCMXC

)

WRITE (LirT0,9B21)

9521 F0RMAT(//,18X, 'Instructions : You will be asked to respond to *11X, 'series of menus. If an input is incorrectly entered, d

*/,llX,'not abort the program; you will have an opportunity to IIX, 'make changes. The file, EPROP.DAT (normally containing

*11X, 'parameters from the previous run) is not present. Pres

CALL PROMPTC <RETURN> to create a new input file '//

* 'or enter "Q" to quit. >',0,10)

READ (LUTI,'(A)') CH

IF ((CH.EQ. 'Q') .OR. (CH.Eq. '<!')) STOP

DEV(1)=.TRUE.

DEV(2)=. FALSE.

DEV(3)=. FALSE.

LOGSW=. FALSE.

SETNVM=1

HATSW=2

PNUM=0

0UTNUM=10

HTBNnM=l

MAX0UT=28

DO 9526 1=1,21

HYBSET(I)=FULSET(I)

OUTPUT(I)=FULSET(I)

9625 CONTINUE

DO 9526 1=1,6

NAMES(I)=>Not Selected ' DOPANT(I)=.FALSE.

9526 CONTINUE

INDVAR=T

INIVAL=300.

FINVAL=300.

STPVAL=1.

P(T)=300.

P(RTEMP)=1000./P(T)

CALL DOPSEL(INDVAR,PFORM)

CALL INDSEL(INDVAR,PFORM,MATSW)

HYBSET(1)=INDVAR

IF ((INDVAR.NE.T) .AND. (INDVAR.NE.RTEMP)) CALL TSEL(MATSW)

GOTO 20 END

C

C Subroutine OUTSEL selects the output set.

C SUBROUTINE OUTSEL ( DSCRIP , INDVAR , SETNUM , OUTSET

,

* HYBSET,HYBNUM,MAXOUT)

C INTEGER LUTI,LUTO

COMMON /LUNIT/ LUTI,LUTO

C LOGICAL INRNGE, DIGIT

INTEGER HYBSET(28) ,HYBNUM, SETNUM, RSPON,MAXOUT

CHARACTER 0UTSET(4) *14 , 0UTSTR*80 , DSCRIP (46) *1 1 , CH*1

DATA OUTSTR /' '/

Q ««« Create the output sat selection menu *** WRITE (LUTO, '(////)')

1 WRITE (LUTO, '(25X, "Output Set Selection Menu",///)')

101
0UTSTE(:33)=» » DO 10 1=1,4

WRITE (0UTSTE(30:30),'(I1)') I 0nTSTE(34:48)=0irTSET(I)

WRITE (LUTO,'(A,/)') 0UTSTR(:48)

10 CONTINUE

OUTSTa( :40)=» The current selection is ' 0UTSTa(41:B5)=0UTSET(SETNUM)

WRITE (LUTO,'(lX,A,//)») 0UTSTR(:54)

IB CALL PaOMPT(' Enter number > ',0,27)

C o^'*' Read the response from the terminal

C and perform indicated function *** READ (LUTI,'(A)',ERR=8E00) CK

IF (DIGIT(CH)) THEN

READ (CH.'dl)') ESPQN

ELSEIF (CH.EQ.' >) THEN

RSPON=B

ELSE

SOTO 9B00

ENDIF

IF (RSPON.EQ.O) RSP0N=5

IF (INRN6E(1,B,RSP0N)) THEN

IF (RSPON.NE.B) THEN

SETNUM^RSPON

IF (SETNUM.EQ.4) CALL TJSPEC (DSCRIP,INDVAR,

* HYBNUM.HYBSET.MAXOUT)

ENDIF

ELSE

WRITE (LUTO,*) ' Error: improper response, try again'

WRITE (LUTO,*) ' Hit <RETURN> to continue.'

READ (LUTI,'(A)') CH

60T0 1 ENDIF

RETURN

9B00 WRITE (LUTO,*)' Error: response must b® an integer'

GOTO IS END

C

C Subroutine PLTSEL selects plot file pairs.

C SUBROUTINE PLTSEL ( DE¥ , PNUM , PF , MAXOUT , MATSW)

C REAL P(46)

COMMON /FARMS/ P CHARACTER NAMES ( 6

) *1 3 , DSCRIP ( 46 ) * 1 1 , FORMS ( 6) * IB COMMON /STRING/ NAMES, DSCRIP, FORMS

C INTEGER LUTI.LUTO

COMMON /LUWIT/ LUTI,LUTQ

C INTEGER T , RTEMP , EF , CN , CP , DI 1 , DI2 , DI3 , DI4 , DIS , EG , SUM , CAYT , ECMEF

,

* RDIEL , TPOWR , EFME , EFMH , FNC . FNV , DNl , ENl , DGl , DN2 , EN2 , DG2 , DN3 , ENS

,

« DG3 , DN4 , EN4 , DG4 , DNS , ENE , DG6 , FNCP , FNVP , CNG , CNL , CNX , DELGL , DELGX

« DI6,DN6,EN6,DG6

PARAMETER (T=1,RTEMP=2,EF=3,CN=4,CP=B,DI1=6,DI2=7,DI3=8,DI4=9,

* DIB=10 , DI6=43 ,E6=11 , SUM=12 , CAYT=13 ,ECMEF=14 ,RDIEL=1B , TP0WR=16

,

* EFME=17 , EFMH=18 , FNC=19 , FNV=20 , DN1=21 , EN1=22 , DG1=23 , DN2=24

,

* EN2=25 ,DG2=26 ,DN3=27 , EN3=28 , DG3=29 ,DN4=30 , EN4=31 , DG4=32 , DNB=33

* ENB=34, DG5=35 ,DN6=44, EN6=4B ,DG6=4S , FNCP=36 , FNVP=37 , CNG=38

,

* CNL=39 , CNX=40 , DEL6L=41 , DELGX=42

)

C CHARACT£R«80 OUTSTR

INTEGER ITEMP , PF ( 4 , 2 ) , PNUM , RSPON , RSP0N2 , MAXOUT , STOVER , PLST (46 )

,

* MATSW

LOCICAL DEV(3),INRNGE

DATA PLST /T, RTEMP, EF.CN, CP, DI1,DI2. DIS, DI4, DIS, DI6. EG, SUM, CAYT

102
* ECMEF , RDIEL , TPOWR , EFME , EFMH, FNC , FNV , DNl , ENl , DGl , DN2 , EN2 , DG2 , DN3

,

* EN3 , DG3 , DN4 , EN4 , DG4 , DNB , ENB , DG5 , DN6 , EN6 , DG6 , FNCP , FNVP , CN6

,

• CNL.CNX.DELGL.DELGX/

DATA OUTSTE /' '/ C *** Have plot fila attributes b«an previously entered? *** WRITE (LUTO, '(////) ») 1 IF (PNUM.GE.l) THEN

WRITE (LUTO, '(SIX, "Plot File Menu",//)')

0UTSTR(:24)=' ' DO 10 I=l,PNnM

WRITE (0UTSTR(20:20),'(I1)') I 0UTSTR(38:40)=' vs. ' 0UTSTR(25:3B)=DSCRIP(PF(I,2))

0UTSTR(41 : 51 ) =DSCRIP ( PF ( I , 1 )

)

WRITE (LUTO,*) 0UTSTR(:B1)

WRITE (LUTO,*)

10 CONTINUE

DO 20 I=PNUM+1,4

WRITE (LUTO, '(20X,I1,6X, " not selected",/)') I 20 CONTINUE

26 CALL PROMPTC Entor number > ',2,2)

READ (LUTI,'(A)') OUTSTR

IF (0UTSTR(:20).EQ. ' ») THEN

GOTO 1000

ELSE

READ (0UTSTR(1:1), '(II) ' ,ERR=9B00) RSPON

ENDIF

IF (. NOT. INRNGE( 1,4, RSPON)) THEN

WRITE (LUTO,*)' Error: response out of range'

GOTO 25

ENDIF

ELSE

RSP0N=1

ENDIF

STOVER=PNUM

2 IF (RSPON. LE.PNUH) THEN

WRITE (LUTO, '(////, 28X, "Plot File Submenu",//)')

WRITE (LUTO, ' (23X, ' 'File" ,5X, ' 'X-axis" ,6X,

* "Y-axis")')

WRITE (LUTO, '(23X, ' ' " ,5X, ' ' " ,6X. " ")')

WRITE (LUT0,'(24X,I1,5X,A11,2X,A11,//)')

RSP0N,DSCRIP(PF(RSP0N,1)),DSCRIP(PF(RSP0N,2))

WRITE (LUTO, '(29X, "1 Change x-axis")')

WRITE (LUTO, '(29X, "2 Change y-axis")')

WRITE (LUT0,'(29X,"3 Change both ")')

WRITE (LUTO, '(29X, "4 Switch order ")')

WRITE (LUTO, '(29X, "5 Delete entry ")')

30 CALL PROMPT(' Enter number > ',2,29)

READ (LUTI,'(A)') OUTSTR

IF (0UTSTR(:20).Eq. ' ') THEN

GOTO 1 ELSE

READ (0UTSTR(1:1),'(I1)',ERR=9B0B) RSP0N2

ENDIF

IF (.N0T.INRNGE(1,B,RSP0N2)) THEN

WRITE (LUTO,*)' Error: response out of range'

GOTO 30

ENDIF

IF (RSP0N2.Eq.6) THEN

DO 40 I=RSP0N,PNUM-1

PF(I,1)=PF(I+1,1)

40 PF(I,2)=PF(I+1,2)

PNUM=PNUM-1

IF (PNUH.EQ.O) THEN

DEV(3)=. FALSE.

103
GOTO 1000

ENDIF

ELSEIF (RSP0N2.Eq.4) THEN

ITEMP=PF(RSP0N,1)

PF (RSPON , 1

) =PF (aSPON ,2)

PF(RSP0N,2)=ITEMP

ELSE

CALL PVARS(DSCRIP,MATSW,PLST)

WRITE (LUTO, '(//)') IF ((RSP0N2.£q.l).0R.(RSP0N2.Eq.3)) THEN

45 CALL PROMPTC Entar paramoter number'//

* ' for the X-axis > ',0,0)

READ (LUTI,*,ERR=gB05) ITEMP

IF (INRNGE(1,MAX0UT+18,ITEMP)) THEN

PF (RSPON , 1

) =PLST ( ITEMP

)

ELSE

WRITE (LUTO,*)

* ' Error: Response out of range'

GOTO 45

ENDIF

ENDIF

IF ((RSP0N2.Eq.2).0R.(RSP0N2.Eq.3)) THEN

50 CALL PROMPT(' Enter parameter number'//

* ' for the Y-axis > ',0,0)

READ (LUTI,*,ERR=g505) ITEMP

IF (INRNGE(1,MAI0UT+ 18, ITEMP)) THEN

PF(RSP0N,2)=PLST(ITEMP)

ELSE

WRITE (LUTO,*)

* ' Error: Response out of range'

GOTO 50

ENDIF

ENDIF

ENDIF

ELSE

PNUM=PNUM+1

CALL PVARS(DSCRIP,MATSW,PLST)

56 CALL PROMPT(' Enter parameter number'//

* ' for the X-axis > ',0,0)

READ (LUTI,*,ERR=9530) ITEMP

IF (INRNGE(1,MAX0UT+18, ITEMP)) THEN

PF ( PNUM , 1

) =PLST ( ITEMP

)

ELSE

WRITE (LUTO,*)

* ' Error: Response out of range'

GOTO 55

ENDIF

60 CALL PROMPT(' Enter parameter number'//

* ' for the Y-axis > ',0,0)

READ (LUTI,*,ERR=9530) ITEMP

IF (INRNGE(1,MAX0UT+18, ITEMP)) THEN

PF (PNUM , 2

) =PLST ( ITEMP

)

ELSE

WRITE (LUTO,*)

* ' Error: Response out of range'

GOTO 60

ENDIF

IF (PF(PNUM,1) .Eq.PF(PNUM,2)) THEN

WRITE (LUTO, '(//," *** X and Y axes are the same,",

* " reselect. ",//)')

GOTO 55

ENDIF

ENDIF

WRITE (LUTO, '(//)')

GOTO 1 1000 RETURN

104
9500 WHITE (LUTO,*)' Error: Response must be an integer'

WEITE (LUTO,*)' Hit <RETTON> to continue.'

READ (LUTI,'(A)') CH

GOTO 1 9505 WRITE (LUTO,*)' Error: Response must be an integer'

WRITE (LUTO,*)' Hit <RETURN> to continue.'

READ (LUTI, '(A)') CH

GOTO 2 9530 WRITE (LUTO,*)' Error: Response must be an integer'

WRITE (LUTO,*)' Hit <RETURN> to continue.'

READ (LUTI,'(A)') CH

PIfUM=STOVER

GOTO 2 END

C

C Subroutine PROMPT sends a prompt string to the terminal,

C preceeded by the specified number of blank lines and spaces.

C SUBROUTINE PROMPT ( STRING, RTNS, TAB)

C IMPLICIT NONE

CHARACTER* (*) STRING

INTEGER RTNS, TAB

C

INTEGER LUTI,LUTO

COMMON /LUNIT/ LUTI.LUTO

C CHARACTER FMT*20,TABSTR*3

INTEGER I IF (RTNS .GT. 0) THEN

DO 10 1=1, RTNS

WRITE (9, '(A)')

10 CONTINUE

END IF WRITE (TABSTR, '(13)') TAB

C

C MacFortran version

C FMT='( '//TABSTR// 'I,A)»

C TYPE (LUTO,FMT) STRING

C

C VAI-11 Fortran version

FMT='(t, '//TABSTR// 'I, A)'

WRITE (LUTO,FMT) STRING

C RETURN

END

C

C Subroutine PVARS provides a list of the possible file

C variables for PLTSEL

C SUBROUTINE PVARS (DSCRIP . MATSW . PLST)

C INTEGER LUTO.LUTI

COMMON /LUNIT/ LUTI,LUTO

C CHARACTER DSCRIP (46) •11,0UTSTR*80

INTEGER BASE , COL , NUM , MAX , ROWS , PLST ( 46 )

, MATSW

DATA OUTSTR /' '/ IF (MATSW. EQ.l) THEN

C *** Silicon *•• MAX=3g

ELSEIF (MATSW.Eq.2) THEN

C *** Gallium Arsenide *** MAX=46

ELSE

C option Third material option, set to be the same

105
C as for Si.

MAX=3g

ENDIF

0UTSTR(4:4)='>'

0UTSTR(19:19)='>'

0UTSTR(34:34)='>»

0UTSTa(49:49)='>»

0UTSTa(84:64)='>'

WHITE (LTrT0,'(//,30X,'»Plot Parameter Menu",///)')

BASE=2

aOWS=MAX/5

IF ((ROWS*E).NE.MAX) ROWS^ROWS+l

DO 20 1=1, ROWS

JE=5

IF ((I*B) .GT.MAX) JE=MAX-5*(I-1)

DO 10 J=1,JE

NUM=5*(I-1)+J

C0L=BASE+15*(J-1)

WRITE (0UTSTR(C0L:C0L+1),'(I2)') HUM

WRITE (0UTSTR(C0L+3:C0L+14), '(IX.All)')

* DSCRIP(PLST(iroM))

10 CONTINUE

WRITE (LUTO,*) 0UTSTE(:C0L+14)

WRITE (LUTO,*)

20 CONTINUE

RETURN

END

C

C Function TEST defines the parameter 'TEST'. Subroutine ZEROIN

C then finds the value of FERMI vhich minimizes 'TEST'.

C FUNCTION TEST (FERMI)

C REAL P(46)

COMMON /PARMS/ P REAL ETA.ZETA

COMMON /CALC/ ETA.ZETA

LOGICAL D0PANT(6)

COMMON /TSTCOM/ DOPANT

INTEGER PFORM ( 46 )

, INDVAR , OUTPUT (28), OUTNUM

* PF(4,2),PNUM,LUDEF,MAX0UT,MATSW

LOGICAL TRMSW.LSTSW.PLTSW

COMMON /GLOBAL/ PFORM , INDVAR , OUTPUT , OUTNUM , PF , PNUM

,

* LUDEF , TRMSW , LSTSW , PLTSW , MATSW , MAXOUT

C INTEGER CN , CP , DIl , DI2 , DI3 , DI4 , DIB , EG , CAYT , TPOWR , EFME , FNC , FNV , DNl

,

* ENl . DGl , DN2 , EN2 , DG2 , DNS , EN3 , DG3 , DN4 , EN4 , DG4 , DN5 , ENS , DG5

,

* FNCP , FNVP , CNG , CNL , CNX , DELGL , DELGX , DI6 , DN6 , EN6 , DG6

PARAMETER (CN=4 , CP=B , DI1=6 , DI2=7 , DI3=8 , DI4=9 , DIB=10 , EG=11

,

* CAYT=13 , TP0WR=16 ,EFME=17 , FNC=19 , FNV=20 , DN1=21 ,EN1=22 , DG1=23

,

* DN2=24,EN2=26,D62=26,DN3=27,EN3=28,DG3=29,DN4=30,EN4=31,D64=32,

* DNB=33,ENB=34,D6B=3B,FNCP=36,FNVP=37,CNG=38,CNL=39,CNX=40,

* DELGL=41,DELGX=42,DI6=43,DN6=44,EN6=4B,DG6=46)

C

C *** CONST = 2*(2*pi*k*m0/h**2)**(3/2), where

C *** k is Boltzmann's constant, 1.3807E-23 J/K,

C *** mO is the free electron mass, 9.109BE-31 kg, and

C *** h is Planck's constant, 6.6262E-34 J-s. CONST is

C *** vritten in units of K**-3/2 cm**-3.

REAL CONST,DEL,H,MBL,MH,MX,PI

PARAMETER ( C0NST=4 . 8293E1E , DEL=0 . 341 ,H=6 . e262E-34 , MBL= . B2

,

* MH=.B,MX=.8B,PI=3.1416)

REAL A,AH,AL,B,BH,BL,C,CH,CL,D,DH,DL

PARAMETER (AH=0 .400892, BH=0 . 263693, CH=. 059092B,DH=- . 314104)

PARAMETER (AL=.033961B,BL=-. 543866, CL=B. 202820, DL=-6. 48801)

PARAMETER (A=AH+AL,B=(BH+BL)*1 . B , C=(CH+CL)*3 . 7S ,D=(DH+DL) *13 . 12B)

106
c REAL ALPHA, BETA. FERMI, MLL INTEGER EN(6),DN(6),DI(6),D6(6)

DATA EN /EN1,EN2,EN3,EN4,ENB,EN8/

DATA DN /DN1,DN2,DN3,DN4,DN6,DN8/

DATA DI /DI1,DI2,DI3,DI4,DI5,DI8/

DATA D6 /D61,DG2,D63,D64,DG5,D66/

C MLL=P(E6)/(20.0-P(EG))

C ETA=(PERMI-P(E6))/P(CATT)

C **• Computation ol P(CN) •** IP (MATSW.EQ.l) THEN

C *• Silicon *•* P(CN)=P(FNC)*FD(0.5,ETA)

ELSEIP (MATSW.EQ,2) THEN

C *** Gallium Arsanids *** ALPHA=- ( 1

. -P (EFME) ) **2 . * (3 . P(EG) **2 . +4 . *P (EG) *DEL+

* 2.*DEL**2.)/(P(EG)+DEL)/(3.«P(E6)+2.*DEL)

IF (ETA.GE.-80.) THEN

P(FNCP)=P(FNC)*(1.-1B.*ALPHA*P(CAYT)*FD(1.5,ETA)/

* (4.*P(EG)*FD(0.5,ETA)))

ELSE

P(FNCP)=P(FNC)*(l.-15.*ALPHA*P(CAyT)/(4.*P(E6)))

END IF

P ( CNG ) =P ( FNCP ) *FD ( 0 . 5 , ETA)

IF ((ETA-P(DELGL)/P(CAYT)) .LE.-8S) THEN

P(CNL)=0.

ELSE

P(CNL)=C0NST*P(TP0WR)*MBL*»(1.5)*EXP(ETA-P(DELtt)/P(GAYT))

ENDIF

IF ((ETA-P(DELGX)/P(CAYT)).LE.-85) THEN

P{CNX)=0.

ELSE

P ( CNX) =CONST*P (TPOWR) •MX** ( 1 . B) *EXP (ETA-P (DEL6X) /P ( CAYT )

)

ENDIF

P ( CN) =P ( CNG) +P (CNL) +P ( CNX)

ELSE

C option Third material formulation for the electron density.

C Here it is taken to be the same as for Si.

P(CN)=P(FNC)*FD(0.6,ETA)

ENDIF

ZETA=-FERMI/P(CAYT)

C *** Computation of P(CP) ***

IF (MATSW.EQ.l) THEN

C *** Silicon *** P(CP)=P(FNV)*FD(O.B,ZETA)

ELSEIF (MATSW.Eq.2) THEN

C *** Gallium Arsenide *** BETA=-(l.+P(EG)/2./DEL)/(l-P(EG)/20.0)**2.

IF (ZETA.GT.-80) THEN

C This uses the valence band density of states for GaAs described in

C J. S. Blakemore, J. Appl. Phys. B3, R123-R181 (1982)

C P(FNVP)=C0NST*P(TP0WR)*((MH**1.B)+(MLL**1.B)*(1.-

C * 1B.*BETA*P(CAYT)*FD(1.B,ZETA)/(4.*P(EG)*FD(0.B,ZETA))))

C This uses the valence band density of states for GaAs described in

C J. R. Lovney and A. H. Kahn, J. Appl. Phys. 64, 447-4B0 (1988).

P(FNVP)=CONST*P(TPOWR)*(A+(

* B*P(CAYT)*FD(1.B,ZETA)

* +C*P(CAYT)**2*FD(2.6,ZETA)

* +D*P(CAYT)**3*FD(3.B,ZETA)

* )/FD(.B,ZETA))

ELSE

C Folloving Blakemore:

C P(FNVP)=C0NST*P(TP0WR)*((MH**1.5)+(MLL**l.B)*Cl.-

C * 1B.*BETA*P(CAYT)/(4.*P(E6))))

107
C Following Lovney and Kahn:

P(FNVP)=CONST*P(TPOWE)*

* (A+B*P(CAYT)+C*P(CAYT)**2+D«P(CAYT)**3)

ENDIF

P(CP)=P(FNVP)*FD(O.B,ZETA)

ELSE

C option Third matarial formiilation lor the hola density.

C Here it is taken to be the same as for Si.

P(CP)=P(FNV)*FD(0.5,ZETA)

ENDIF

C *** Computation of P(DI'S) ***

DO 35 L=l,6

IF (DOPANT(L)) THEN

IF (L.LE.3) THEN

POWER=(FERMI-P(EG)+P(EN(L)))/P(CAYT)

ELSE

P OWEE= ( P ( EN( L )) -FERMI ) /P ( CAYT

)

ENDIF

IF (POWER. LE. -80.) THEN

P(DI(L))=P(DN(L))

ELSE IF (POWER. LT. 80.) THEN

P(DI(L))=P(DN(L))/(1.+(EXP(P0WER)*P(DG(L))))

ELSE

P(DI(L))=0.

ENDIF

ELSE

P(DI(L))=0.

ENDIF

35 CONTINUE

C *«* Testing to see hov close to neutrality we have come,

C the parameter test is the net density of residual charges

C ?hen the FERMI level is at its present position

140 TEST=(P(CN)+P(DI4)+P(DI5)+P(DI6))-(P(CP)+P(DI1)+P(DI2)+P(DI3))

RETURN

END

C

C Subroutine TSEL allovs selection of temperature or 1000/T.

C SUBROUTINE TSEL(MATSW)

C REAL P(46)

COMMON /FARMS/ P CHARACTER NAMES(6)«>13,DSCRIP(46)*11,F0RMS(6)*15

COMMON /STRING/ NAMES, DSCRIP, FORMS

C REAL LOWLIM,UPLIM

INTEGER T.RTEMP.MATSW

PARAMETER (T=l ,RTEMP=2)

INTEGER LUTI.LUTO

COMMON /LUNIT/ LUTI.LUTO

C INTEGER RSPON

CHARACTER CH

C IF (MATSW.EQ.l) THEN

UPLIM=1688.0

ELSEIF (MATSW.Eq.2) THEN

UPLIM=1511.0

ELSE

C option Third material melting point, set here to be the

C melting point of InP, but it could be changed to

C that appropriate for any semiconductor.

UPLIM=1343.

ENDIF

L0WLIM=2.5

6 WRITE (LUTO, '(////, 30X, "Temperature Selection",///)')

108
WEITE (LUTO, '(30X, "1 T«mp«ratur« (K) ",/)')

WRITE (LUTO, '(30X, "2 1000/T (K'-l) ",/)')

CALL PaOMPT(' Entar number > ',2,25)

READ (LUTI, '(I2)',ERa=9505) RSPON

10 IF (RSPON. EQ.l) THEN

CALL PROMPTC Enter new temperature (K) > ',0,0)

READ (LUTI,*,ERR=9500) P(T)

P(RTEMP)=1000./P(T)

ELSE

CALL PROMPTC Enter new value for 1000/T > ',0,0)

READ (LUTI,*,ERR=9500) P(RTEMP)

P(T)=1000./P(RTEMP)

ENDIF

IF (P(T) .LT.LOWLIH) THEN

WRITE (LUTO, ' (IX, "Temperature must always be greater",

* /, IX, "than 2.5 degrees (absolute). Start over.")')

GOTO 10

ENDIF

IF (P(T) .GT.UPLIM) THEN

WRITE (LUTO, ' (IX, "Calculation attempted past the ",

* ''melting point oi the material. '',/, Ix,

* "(",E12.5," degrees) Start over.")') UPLIM

GOTO 10

ENDIF

RETURN

9500 WRITE (LUTO,*)' Error: response must be in F, D, or E format'

GOTO 10

9605 WRITE (LUTO,*)' Error: response must be an integer'

WRITE (LUTO,*)' Hit <RETURN> to continue.'

READ (LUTI,'(A)') CH

GOTO 5 END

C

C Subroutine TVARS calculates temperature dependent constants.

C SUBROUTINE TVARS(INDVAR,MATSW)

C REAL P(46)

COMMON /PARMS/ P C

INTEGER T , RTEMP , EG , CAYT , RDIEL , TPOWR , EFME

,

* EFMH,FNC,FNV,DELGL,DELGX

PARAMETER (T=l , RTEMP=2 , EG=11 , CAYT=13 , ECMEF=14 ,RDIEL=15

,

* TP0WR=16,EFME=17,EFMH=18,FNC=19,FNV=20,DELGL=41,DELGX=42)

REAL CONST, MH PARAMETER (C0NST=4.8293E15,MH=0.5)

C INTEGER INDVAR,MATSW

REAL MLL

C IF (INDVAR.EQ.T) THEN

P(RTEMP)=1000./P(T)

ELSE

P(T)=1000./P(RTEMP)

ENDIF

P(CAYT)=8.6173E-5*P(T)

P(TP0WR)=P(T)**1.5

IF (MATSW.EQ.l) THEN

C *** Computed for silicon *** P(RDIEL)=11.4294*EXP(7.8E-5*P(T))

C This formulation for the relative dielectric constant

C was taken from R. D. Larrabee, W. R. Thurber, and W. M. Bullis

C NBS Spec. Pub. 400-63 (1980).

C *** P(EFM£) and P(EFMH) are the effective masses of electrons

C and holes. P(EFME) and P(EFMH) eqs. from least squares fit

C . of data in BARBER, SSEIO, 1039 (1967). P(EFME) and P(EFMH)

109
C eqs. fittsd over temp range 0 to 600 K. *** P(EFME)=(((((4.B4649E-17*P(T)-9.66067E-14)*P(T)+8.04032E-11)*

* P(T)-3.320130E-8)*P(T)+6.83008E-6)*P(T)-.000161708)*P(T)+

* 1.0627

P(EFMH)=(((((1.11997E-16*P(T)-2.B0673OE-13)*P(T)+2.3OO49E-1O)

* P(T)-9.67212E-8)*P(T)+1.85678E-5)*P(T)-.000523548)*P(T)+

* .B9052B

C •** P(EG) irom lit ol data ixom MACFARLANE,

C PHYS. REV. Ill, 1245 (1958) *«* P(EG)=(((-3.80977E-13*P(T)+9.9BE-10)*P(T)-8.70110E-7)*

* P(T)+.0000323741)*P(T)+1. 15558

ELSEIF (HATSW.Eq.2) THEN

C *** Computed for gallium arsenide *** P(RDIEL)=12.4*(1.+1.2E-04*P(T))

C This formulation for the relative dielectric constant

C vas taken from Blakemore, see reference [3] of

C EPROP manuscript.

P(EG)=1.519-(B.40BE-04*P(T)*P(T)/(P(T)+204.))

MLL=P(EG)/(20.0-P(EG))

P(EFHE)=1./(1.+7.51*(2./P(E6)+1./(P(E6)+.341)))

P(EFMH)=(MH**1 .5+MLL**l . B)**(2 . /3 .

)

P(DEL6L)=. 296-6. 45E-5*P(T)*«2/(P(T)+204.)

P(DEL6X)=. 462+8. 05E-5*P(T)**2/(P(T)+204.)

ELSE

C —option-— Temperature-dependent constcuits for third material;

C here constants for InP have been used. These do not

C have any temperature dependence and are not necessarily

C the best available.

P(RDIEL)=10.6

P(EFHE)=0.078

P(EFMH)=0.8

P(EG)=1.36

ENDIF

C *** P(FNC) and P(FNV) are the density of states in the

C conduction and valence bcmds respectively *** P(FNC)=C0NST*(P(EFME)**1.5)*P(TP0HR)

P(FNV)=C0NST*(P(EFMH)**1.5)*P(TP0WR)

RETURN

END

C

C Subroutine UNITS defines the logical unit numbers for terminal I/O.

CSUBROUTINE UNITS (LUTI.LUTO)

INTEGER LUTI.LUTO

C VAX/VMS assignments:

LUTI=E

LUT0=6

C

C MacFORTRAN assignments:

C LUTI=9

C LUT0=9

C

RETURN

END

C

C Subroutine USPEC allows the user to create a custom output set.

C SUBROUTINE USPEC (DSCRIP.INDVAR.HYBNUM.HYBSET.MAXOUT)

C INTEGER T , RTEMP , EF , CN , CP , DI 1 , DI2 , DI3 , DI4 , DIB , EG , SUM , CAYT , ECHEF

,

* RDIEL , TPOWR , EFME , EFMH , FNC , FNV , DNl , ENl , D61 , DN2 , EN2 , DG2 , DN3 , EN3

,

* D63 , DN4 , EN4 , DG4 , DNB , ENB , DGB , FNCP , FNVP , CNG , CNL , CNX , DEL6L , DELGX

* DI6,DN6,EN6,DG6

PARAMETER (T=l ,RTEMP=2 ,EF=3 , CN=4 , CP=B , DI1=6 , DI2=7 ,DI3=8 ,DI4=9

,

* DIB=10 , EG=11 , SUM=12 , CAYT=13 , ECMEF=14 ,RDIEL=1B , TP0WR=16 ,EFME=17

,

* EFMH=18,FNC=19,FNV=20,DN1=21,EN1=22,DG1=23,DN2=24,EN2=2B,DG2=26

110
* DN3=27,EN3=28.DG3=2g,DM=30,EN4=31,D64=32,DN5=33,EN6=34.D6B=36,

» FNCP=36 , FNVP=37 , CNG=38 , CNL=39 , CNX=40 , DELGL=41 , DELGX=42 , DI6=43

,

* DN6=44,EN6=45,DG6=46)

INTEGER LUTI.LUTO

COMMON /LUNIT/ LUTI.LUTO

C INTEGER INDVAR , INDEX 1 , INDEX2 . HTBNUM , HYBSET ( 28 )

, HAXOUT

INTEGER BASE,C0L,SP,AC0UNT,ADDLST(27},REMLST(28),R0WS

INTEGER RSP0N,0PTI0N(28)

CHARACTER*80 0UTSTR*80.INSTR*80,DSCRIP(46)*11,CH*1

LOGICAL REM , R , ADD . NEV , SKIP , DIGIT , INRNGE

DATA OPTION /T,RTEHP,EF,CN,CP,DI1,DI2,DI3.DI4,

* DIB , DI6 , CAYT . EG , ECMEF , SUM , TPOWR , RDIEL

,

* EFME , EFMH , FNC , FNV , FNCP , FNVP , CN6 , CNL

,

* CNX.DELGL.DELGX/

DATA OUTSTR /' '/

ETBSET(1)=INDVAR

WRITE (LUTO, '(/////)')

1 REM=. FALSE.

R=. FALSE.

ADD=. FALSE.

NEW=. FALSE.

SKIP=. FALSE.

ACOUNT=0

INSTR=' ' DO 6 1=1,28

REMLST(I)=0

5 CONTINUE

C *** Create user specified output set menu *** WRITE (LUTO, '(2BI, "User-Specilied Output Set",/)')

WRITE (LUTO, '(21, "Current Set :")')

0UTSTR(1:1)=» ' 0UTSTR(4:4)='>'

0UTSTR(19:19)='>'

0UTSTR(34:34)='>'

0UTSTR(49:49)='>'

0UTSTR(64:64)='>'

BASE=2

ROWS=HYBNUM/B

IF (HYBNUM.NE.ROWS*B) R0WS=R0WS+1

DO 2B 1=1, ROWS

COL=0

INDEXl = (I-1)*B+1

INDEX2 = INDEXl+4

IF (INDEX2.GT.HYBNUM) INDEX2=HYBNUM

DO 20 J=INDEX1,INDEX2

SP=BASE-)-lB«COL

WRITE (0UTSTR(SP:SP+1),»(I2)') J WRITE (0UTSTR(SP+3:SP+14),»(1X,A11,1X)')

* DSCRIP(HYBSET(J))

COL=COL-i-l

20 CONTINUE

WRITE (LUTO,*) 0UTSTR(:SP+14)

2B CONTINUE

WRITE (LUTO, '(/,2X, "Optional Output Parameters :")')

ROWS=HAXOUT/B

IF (MAXOUT.NE.ROWS«B) R0WS=R0WS+1

DO 40 1=1, ROWS

COL=0

INDEXl = (I-1)*B+1

INDEX2 = INDEXl+4

IF (INDEX2.GE.MAX0UT) INDEX2=MAX0UT

DO 30 J=INDEX1,INDEX2

SP=BASE-i-lB*COL

WRITE (0UTSTR(SP:SP+1), '(12)') J WRITE (0UTSTR(SP+3:SP+14),'(1X,A11,1X)»)

111
DSCRIP(OPTION(J))

C0L=C0L+1

CONTINUE

WRITE (LUTO,*) 01JTSTa(:SP+14)

CONTINUE

WRITE (LUTO, 3000)

F0RMAT(/,1 OX, 'Enter R[number(s)] to remove from the current',

' output set, ' ,/,10X, ' A[number(s)] to add to the',

' current output set, or',/,10X,' C [number (s)] '

,

' to create a new set. ' ,/,10X, 'Sepiurate numbers by',

' commas or spaces, press return to exit . ' ,/,10x,

' (Note: Use numbers from the Current set ior a removal)',/}

CALL PROMPT (' Input > ',0,2)

READ (LUTI ,

' (A) ' ) INSTR

IF (INSTR(:20).EQ. ' «) GOTO 100

DO 50 1=1,80

IF ((INSTR(I:I).Eq. » ') .OR. (INSTR(I:I) .EQ. ' , ') .OR.SKIP) THEN

SKIP =. FALSE,

ELSEIF ((INSTR(I:I).EQ.'R').OR.(INSTR(I:I).EQ. 'r')) THEN

IF (ADD. OR. NEW) THEN

WRITE (LUTO,*)' Error: Remove operation',

' must be done first.'

WRITE (LUTO,*)' Hit <RETURN> to continue.'

READ (LUTI, '(A)') CH

GOTO 1 ELSE

REM=.TRUE.

R=.TRUE.

END IF ELSEIF ((INSTR(I:I).Eq. 'A').OR.(INSTR(I:I).Eq. 'a')) THEN

IF (NEW) THEN

WRITE (LUTO,*)' Error: Once a create command',

' is given, no others are accepted.

WRITE (LUTO,*)' Hit <RETURN> to continue.'

READ (LUTI, '(A)') CH

GOTO 1 ELSE

ADD =. TRUE. REM=. FALSE. END IF ELSEIF ((INSTR(I:I) .EQ. 'O .OR. (INSTR(I:I) .EQ. 'c')) THEN

ADD=. FALSE.

REM=. FALSE.

NEW=.TRUE.

AC0UNT=1

ELSEIF (DI6IT(INSTR(I:I))) THEN

IF (DIGIT(INSTR(I+1:I+1))) THEN

SKIP=.TaUE.

READ (INSTR(I:I+1), «(I2) ') RSPON

ELSE

READ (INSTR(I:I), '(II) ') RSPON

ENDIF

IF (INRN6E(1,MAX0UT, RSPON)) THEN

IF (REM) THEN

IF (. NOT. INRNGE(1,HYBNUM, RSPON)) THEN

WRITE (LUTO, '(//) ') WRITE (LUTO,*)' Warning: ', 'attempt to remove entry #',

RSPON,' ignored'

ELSEIF (RSPON. NE.l) THEN

REMLST(RSP0N)=-1

ELSE

WRITE (LUTO, '(//) ') WRITE (LUTO,*)' Warning: your',

' attempt to remove the indepen',

'dent variable from the first'.

112
* ' column was ignorad'

ENDIF

ELSEIF (ADD. OR. NEW) THEN

IF (ACODNT.LE.(MAXOUT-l)) THEN

lCOnNT=ACOUNT+l

ADDLST ( ACOUNT) =ESPON

ELSE

WHITE (LUTO,*)' Warning:',

* ' attampt to add mora than',

* MAXOUT,

* ' variables ignorad'

GOTO 61

ENDIF

ELSE

WKITE (LUTO,*)' Error: input », * 'lina must start vith a command'

WRITE (LUTO,*)' Hit <RETURN> », * 'to continue.

READ (LUTI,'(A)') CH

GOTO 1 ENDIF

ELSE

WRITE (LUTO,*)' Warning: antry # ' ,RSPON,

* ' is out of ranga and has baan ignorad'

ENDIF

ELSE

WRITE (LUTO,*)' Error: illagal character ', * 'in input lina'

WRITE (LUTO,*)' Hit <RETURN> to continue.'

READ (LUTI,'(A)') CH

GOTO 1 ENDIF

50 CONTINUE

61 IF (NEW) THEN

IF (ACOUNT. GT. MAXOUT) THEN

WRITE (LUTO,*)' Warning: too many parameters.',

* ' — list truncated.'

ACOUNT=MAXOUT

ENDIF

DO 66 1=2, ACOUNT

HTBSET(I)=OPTION(ADDLST(I))

66 CONTINUE

HTBNUM=ACOUNT

ELSE

IF (R) THEN

1=1

60 IF (REHLST(I).EQ.-l) THEN

DO 66 J=I,HYBNUM-1

REMLST(J)=REMLST(J+1)

HyBSET(J)=HYBSET(J+l)

66 CONTINUE

HYBNUM=HYBNUM1

ELSE

1=1+1

ENDIF

IP (I.LT.HYBNUM) GOTO 60 IF (REMLST(HYBNUM).EQ.-l) HYBNUH=HYBNUM-1

ENDIF

IF (ADD) THEN

L=ACOUNT+HYBNUM

IF (L.GT. MAXOUT) THEN

WRITE (LUTO,*)' Warning: too many',

* ' parameters. — list truncated.'

ACOUNT=MAIOUT-HTBNUM

ENDIF

DO 70 1=1, ACOUNT

113
HTBNUH=HYBNUM+1

HYBSET(HYBNUH)=OPTION(ADDLST(I))

70 CONTINUE

ENDIF

ENDIF

GOTO 1 100 RETURN

END

C

C Subroutine WRAPUP elosss all opanad files.

C SUBROUTINE VRIPUP (LUDEF . LSTSW , NUHER , PLTSW , PNUH)

C

INTEGER LUIN,LULST,LUPLl,LnPL2.

* LUPL3,LUPL4.LUTHP.LUER

PARAMETER (LUIN=20,LULSTs21 ,LUPL1=22,LUPL2=23

,

* LUPL3=24,LUPL4=2B,LUTMP=28,LUER=27)

C INTEGER LUTI.LUTO

COMMON /LUNIT/ LUTI.LUTO

INTEGER LUDEF,LUPL(4),PNUM

LOGICAL TRHSW, LSTSW, PLTSW

CHARACTER«80 OUTSTR

DATA LUPL /LUPL1,LUPL2,LUPL3,LUPL4/

C IF (NUMER.NE.O) THEN

IF (LSTSW) THEN

WRITE (LULST.B) NUMER

B FORMAT (16X, 13, ' errors in computation.

* 'See ERROR. LIS')

ELSE

REWIND (UNIT=LUER)

7 READ (LUER,'(A)',ERR=8,END=8) OUTSTR

WRITE (LUTO,'(A)') OUTSTR

GOTO 7 ENDIF

8 WRITE (LUT0,6) NUMER

CLOSE (UNIT=LUER)

ELSE

CLOSE (UNIT=LUER,STATUS=*DELETE')

ENDIF

IF (LSTSW) CLOSE (UNIT=LULST)

IF ( LUDEF. EQ.LUTMP) CLOSE (UNIT=LUTMP,STATUS= 'DELETE'

)

IF (PLTSW) THEN

DO 10 I=1,PNUM

CLOSE (UNIT=LUPL(I))

10 CONTINUE

ENDIF

WRITE (LUTO,'(" — Computation

* "Complete —— —»»)')

RETURN

END

C

C Subroutine ZEROIN

C SUBROUTINE ZEROIN( F , B , C , RE . AE , IFLAG

)

C

C Sandia Mathematical Program Library

C Mathematical Computing Services Division 5422

C Sandia Laboratories

C P. 0. Box 6800

C Albuquerque, New Mexico 87115

C Control Data 6600 Version 4.6, 1 November 1071

C

C Modified to run at NBS by D. Kahanar, Division 713

C

114
C Abstract

C ZEEOIN s«arch6s lor a z«ro of a function F(X) batvean

C the givan values B and C until the vidth of the interval

C (B,C; has collapsed to vithin a tolerance specified by

C the stopping criterion, ABS(B-C) .LE. 2 . •(IIW*ABS(B)+AE) . C

C Description of Argument

s

C F - Name of the real valued external function. This name

C must be in an external statement in the calling

C program. F must be a function of one real argument.

C B - One end of the interval (B,C}. The value returned for

C B usually is the better approximation to a ssero of F. C C - The other snd ©f the interval (B,C)

C RE - Relative error used for RV in the stopping criterion.

C If the requested RE is less than machine precision,

C then RW is set to approximately machine precision.

q

C iE - Absolute error used in the stopping criterion. If the

C given interval (B,C) contains the origin, then a

C nonzero value should be chosen for AE. C IFLA6 - Returns a status of the resuiLts indicating which

C of the folloving hold.

C A - ABS(B-C) .LE. 2 . *(RW«ABS(B)+AE)

C B - F(B) * F(C) .LT. 0. C C - ABS(F(B)) .LE. ABS(F(C))

C D - ABS(F(B }) .LE. MAX(ABS(F(B )),ABS(F(C ))) C OUT IN IN

C E - Number of evaluations of F(X) .LE. 500

C =1 Indicates normal case. All conditions above hold.

C =2 Indicates F(B) = 0. Condition A may not hold.

C =3 Indicates conditions A, B, C, and E hold but D does

C not. (B,C) probably contains a singular point of F. C =4 Indicates conditions A and E hold but B does not.

C A local minimum of F(X) in (B,C) may have been found.

C =6 Indicates search was aborted when condition E failed.

C

C References

C 1. L F Shampine and H A Watts, ZEROIN, A Root-Solving Coda,

C SC-TM-70-631, Sept 1970.

C 2. T J DeUcer, Finding a Zero by means of Successive Linear

C Interpolation, «Cf nstructive Aspects of the Fundamental

C Theorem of Algebra*, Edited by B Dejon and P Henrioi, 1969.

C 3. L F Shampine and R C Allen, Numerical Computing

C an Introduction, 1973.

C

C Initialize for DNIVAC 1108 or VAX 11/780

DATA ER/e.OE-8/

C Initialize in a portable manner

C DATA ER/O.O/

C IF (ER .EQ. 0.0) ER = 4. • (RIMACH (4) ) C RW=AMAX1(RE,ER)

IC=0

ACBS=ABS(B-C)

A=C

FA=F(A)

FB=F(B)

FC=FA

X0UNT=2

FX=AHAX1(ABS(FB),ABS(FC))

C

1 .F (ABS(FC) .6E. ABS(FB)) GO TO 2 C Perform interchange

A=B FA=FB

B=C

FB=FC

115
FC=FA

2 CHB=O.B>k(C-B)

ACMB=ABS(CMB)

TQL=RW*ABS(B)+AE

C

C T«8t stopping criterion

IF (ACHB .LE. TOL) 60 TO 10

C

C Calculate nev iterate implicitly as B+P/Q,

C vhisrs arrange P.6E.0.

C The implicit form is used to prevent ovarflou.

P=(B-A)*FB

Q=FA-FB

IF (P .GE. 0.) 60 TO 3 P=-P

Q=-q

C

C Update A and check for satisfactory reduction

C in the size of our bounding interval.

3 A=B

FA=FB

IC=IC+1

IF (IC .LT. 4) 60 TO 4

IF (8.*ACMB .6E. ACBS) GO TO 6 IC=0

ACBS=ACMfi

C

C Test for too small a change

4 IF (P .6T. ABS(q)*TOL) 60 TO B C

C Increment by tolerance

B=B+SI6N(T0L,CMB)

60 TO 7 C

C Root ought to be between B and (C-)-B)/2. 5 IF (P .GE. CMBKQ) 60 TO 6 C

C Interpolate

B=B+P/q

GO TO 7

C

6 B=O.B*(C+B)

C Bisect

C

C Have completed computation for nsv iterate B

7 FB=F(B)

IF (FB .EQ. 0.) 60 TO 11

K0U1IT=K0U1JT+1

IF (KOTOT .GT. 600) 60 TO 16

C

C Decide whether next step is interpolation or extrapolation

IF (SI6N(1.0,FB) .NE. SI6N(1.0,FC)) 60 TO 1 C=A

FC=FA

60 TO 1 C

C Finished. Process results for proper setting of IFLA6

C 10 IF (FB*FC .6T, 0.) 60 TO 13 IF (ABS(FB) .GT. FX) 60 TO 12

IFLAG ~ 1 RETURN

11 IFLAG = 2 RETURN

116
12 IFLAG = 3 RETURN

13 IFLAG = 4

RETURN

15 IFLAG = 5 RETURN

END

tr U.S. GOVERNMENT PRINTING OFFICE: 1990 — 26 1- 9 1 3/ 2 0 6 0 0

117

NIST-114A U.S. DEPARTMENT OF COMMERCE 1. PUBLICATION OR REPORT NUMBER

(REV. 3-«9) NATIONAL INSTITUTE OF STANDARDS AND TECHNOLOGY NIST/SP-400/85

2. PERFORMING ORGANIZATION REPORT NUMBER BIBLIOGRAPHIC DATA SHEET 3. PUBUCATION DATE May 1990

4. TITLE AND SUBTITLE Semiconductor Measurement Technology: eprop: An interactive FORTRAN Program for Computing

Selected Electronic Properties of Gallium Arsenide and Silicon

5. AUTHOR(S)

A. C. Seabaugh, J. J. Mathias, and M. I. Bell

6. PERFORMING ORGANIZATION (IF JOINT OR OTHER THAN NIST, SEE INSTRUCTIONS)

U.S. DEPARTMENT OF COMMERCE

NATIONAL INSTITUTE OF STANDARDS AND TECHNOLOGY

QAITHERSBURQ, MD 20899

7. CONTRACT/GRANT NUMBER

8. TYPE OF REPORT AND PERIOD COVERED

Final

9. SPONSORING ORGANIZATION NAME AND COMPLETE ADDRESS (STREET, CITY, STATE, ZIP)

Same as item #6

10. SUPPLEMENTARY NOTES

DOCUMENT DESCRIBES A COMPUTER PROGRAM; SF-185, FIPS SOFTWARE SUMMARY, IS ATTACHED.

11. ABSTRACT (A 200-WORD OR LESS FACTUAL SUMMARY OF MOST SIGNIFICANT INFORMATION. IF DOCUMENT INCLUDES A SIGNIFICANT BIBUOGRAPHY OR

UTERATURE SURVEY, MENTION IT HERE.) A new computer program, EPROP (an acronym for Eiectronic PROPerties) is presented

for use in interpreting measurements and experiments on gallium arsenide and

silicon. EPROP computes a solution of the charge balance equation in thermodynamic

equilibrium for up to six different impurities. The user supplies the density,

energy level, and degeneracy for each impurity, and in response the program returns

as many as 28 output parameters, such as the Fermi level, carrier density, and

ionized impurity densities. These can be computed as functions of the temperature

(or reciprocal temperature) or the density, energy, or degeneracy of any of the six

possible impurities. Listings can also be obtained of various temperature -dependent

parameters, such as the bandgap , densities of states, and effective masses. The

interactive features of the program allow the user to send the output data to any

combination of destinations: a terminal, a listing file, and/or up to four graphic

output files, all at the user's direction. The user is also given freedom and

ability to customize the data output to these destinations through menu-driven

controls. The program is written in ANSI standard FORTRAN 77 and has been

successfully compiled and run on both mainframe and microcomputers. Documentation

is provided to assist the interested user in customizing the program for special

applications, extracting portions for use elsewhere, or modifying the code to treat

semiconductors other than silicon and gallium arsenide.

12. KEY WORDS (6 TO 12 ENTRIES; ALPHABETICAL ORDER; CAPITAUZE ONLY PROPER NAMES; AND SEPARATE KEY WORDS BY SEMICOLONS)

electronic properties; Fermi level; FORTRAN; GaAs; gallium arsenide; Si; silicon

13. AVAILABIUTY UNUMITED

FOR OFFICIAL DISTRIBUTION. DO NOT RELEASE TO NATIONAL TECHNICAL INFORMATION SERVICE (NTIS).

X

ORDER FROM SUPERINTENDENT OF DOCUMENTS, U.S. GOVERNMENT PRINTING OFFICE, WASHINGTON, DC 20402. ORDER FROM NATIONAL TECHNICAL INFORMATION SERVICE (NTIS), SPRINGFIELD, VA 22161.

14. NUMBER OF PRINTED PAGES

121

IS. PRICE

ELECTRONIC FORM
1 >4B"
I

i y JL Technical Publications

Periodical

Journal of Research of the National Institute of Standards and Technology—Reports NIST research

and development in those disciplines of the physical and engineering sciences in which the Institute

is active. These include physics, chemistry, engineering, mathematics, and computer sciences. Papers cover a broad range of subjects, with major emphasis on measurement methodology and

the basic technology underlying standardization. Also included from time to time are survey articles on topics closely related to the Institute's technical and scientific programs. Issued six times a year.

Nonperiodicals

Monographs—Major contributions to the technical literature on various subjects related to the

Institute's scientific and technical activities. Handbooks—Recommended codes of engineering and industrial practice (including safety codes) developed in cooperation with interested industries, professional organizations, and regulatory bodies.

Special Publications—Include proceedings of conferences sponsored by NIST, NIST annual reports,

and other special publications appropriate to this grouping such as wall charts, pocket cards, and

bibliographies.

Applied Mathematics Series—Mathematical tables, manuals, and studies of special interest to physicists, engineers, chemists, biologists, mathematicians, computer programmers, and others engaged in scientific and technical work.

National Standard Reference Data Series—Provides quantitative data on the physical and chemical

properties of materials, compiled from the world's literature and critically evaluated. Developed un- der a worldwide program coordinated by NIST under the authority of the National Standard Data

Act (Public Law 90-396). NOTE: The Journal of Physical and Chemical Reference Data (JPCRD)

is published quarterly for NIST by the American Chemical Society (ACS) and the American Insti- tute of Physics (AIP). Subscriptions, reprints, and supplements are available from ACS, 1155 Sixteenth St., NW., Washington, DC 20056.

Building Science Series—Disseminates technical information developed at the Institute on building

materials, components, systems, and whole structures. The series presents research results, test methods, and performance criteria related to the structural and environmental functions and the

durability and safety characteristics of building elements and systems.

Technical Notes—Studies or reports which are complete in themselves but restrictive in their treat- ment of a subject. Analogous to monographs but not so comprehensive in scope or definitive in treatment of the subject area. Often serve as a vehicle for final reports of work performed at NIST

under the sponsorship of other government agencies.

Voluntary Product Standards—Developed under procedures published by the Department of Commerce in Part 10, Title 15, of the Code of Federal Regulations. The standards establish nationally

recognized requirements for products, and provide all concerned interests with a basis for common

understanding of the characteristics of the products. NIST administers this program as a supplement

to the activities of the private sector standardizing organizations.

Consumer Information Series—Practical information, based on NIST research and experience, covering areas of interest to the consumer. Easily understandable language and illustrations provide useful background knowledge for shopping in today's technological marketplace.

Order the above NIST publications from: Superintendent of Documents, Government Printing Office,

Washington, DC 20402.

Order the following NISTpublications—FIPS and NISTIRs—from the National Technical Information

Service, Springfield, VA 22161.

Federal Information Processing Standards Publications (FIPS PUB)—Publications in this series col- lectively constitute the Federal Information Processing Standards Register. The Register serves as the official source of information in the Federal Government regarding standards issued by NIST

pursuant to the Federal Property and Administrative Services Act of 1949 as amended. Public Law

89-306 (79 Stat. 1127), and as implemented by Executive Order 1 1717 (38 FR 12315, dated May 11, 1973) and Part 6 of Title 15 CFR (Code of Federal Regulations).

NIST Interagency Reports (NISTIR)—A special series of interim or final reports on work performed

by NIST for outside sponsors (both government and non-government). In general, initial distribu- tion is handled by the sponsor; public distribution is by the National Technical Information Service,

Springfield, VA 22161, in paper copy or microfiche form.
U.S. Department of Commerce

National Institute of Standards and Technology

(formerly National Bureau of Standards)

Gaithersburg, MD 20899

Official Business

Penalty for Private Use $300