A111D3 3flt,MM7

4?

NIST o PUBLICATIONS

NIST SPECIAL PUBLICATION 400-84

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

QC

100

U57

1990

C.2

A Software Program fi

Aiding the Analysis i Ellipsometric Measuremi

Simple Spectroscopic
NATIONAL INSTITUTE OF STANDARDS

TECHNOLOGY

Research Information Center

Gaithersburg, MD 20899

DATE DUE

t
Semiconductor Measurement Technology:

A Software Program for

Aiding the Analysis of

Ellipsometric Measurements,

Simple Spectroscopic Models

J. F. Marchiando

Semiconductor Electronics Division

National Institute of Standards and Technology

Gaithersburg, MD 20899

April 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-84

Natl. Inst. Stand. Technol, Spec. Publ. 400-84, 362 pages (Apr. 1990)

CODEN: NSPUE2

U.S. GOVERNMENT PRINTING OFFICE

WASfflNGTON: 1990

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

Page

Abstract 1

1. Introduction 2

2. The Dielectric Function . 6

2.1 Constituent Media 7

2.2 The Effective Medium Approximation 8

2.3 Partial Derivatives 10

3. The Inverse Problem 12

3.1 Formulation of the Least-Squares Problem 12

3.2 Sensitivity Analysis of Model Parameters 15

4. Manual of Operations 17

4.1 Software Development Considerations 17

4.1.1 Input/Output Files 17

4.1.2 Allocation of Array or Work Space 19

4.1.3 Library Software 20

4.2 Input Data Requirements 20

4.2.1 Database Information 21

4.2.2 Layer Thicknesses 21

4.2.3 Supplementary Parameters (Integer) 24

4.2.4 Supplementary Parameters (Floating-Point) 24

4.2.5 Effective Media or Mixtures

.

. . 25

4.2.6 Ambients and External Parameters 29

4.2.7 Sample Characterization or Construction 32

4.2.8 Measurement Data (A, -0) 34

4.2.9 Combining 38

4.3 Command Options 40

4.3.1 Forward Problems, Plots, 41

4.3.2 Search (vary) 45

4.3.3 Search Grid (vary) 47

5. Worked Examples 50

5.1 Forward Problems, Plots, 50

5.2 Search (vary) 55

iii
5.3 Search Grid (vary) 61

5.4 Supplementary Parameters 67

6. Listing of Software Source Files and Routines 72

6.1 Named COMMON and BLOCK DATA Statements 74

6.1.1 lOUNIT 74

6.1.2 DEFNIT 75

6.1.3 FILMMM 76

6.1.4 XPRMNT 77

6.1.5 FILMSS. 78

6.1.6 ARRAYD. 79

6.1.7 ARRAYS 80

6.1.8 ABCDEF 81

6.1.9 RSTACK 82

6.1.10 WSTACK 83

6.1.11 ELMNTS 84

6.1.12 NESTOl 85

6.1.13 HANDYY .86

6.1.14 BLKDAT.FOR . 87

6.2 Source Programs 88

6.2.1 MAIN.FOR 88

6.2.2 FILEOP.FOR 90

6.2.3 INPDAT.FOR 91

6.2.4 SCATOS.FOR ' 105

6.2.5 SCATOLFOR 107

6.2.6 SCATOl.FOR 110

6.2.7 SCAT02.F0R 116

6.2.8 SCANOl.FOR 125

6.2.9 SCAN02.F0R 136

6.2.10 SEEKOl.FOR 146

6.2.11 SEEK02.F0R . 150

6.2.12 ASMBL.FOR 155

6.2.13 ASMBLO.FOR . . . 162

6.2.14 ARRANG.FOR . 169

iv
6.2.15 SCATTR.FOR 174

6.2.16 SCATTO.FOR 179

6.2.17 FORWRD.FOR 181

6.2.18 FORWRO.FOR '.

. , 185

6.2.19 DIFFER.FOR 187

6.2.20 STAT22.FOR 188

6.2.21 CORLAT.FOR ; 190

6.3 General Utilities 193

6.3.1 DOT.FOR 193

6.3.2 NORM.FOR 194

6.3.3 APROD.FOR 195

6.3.4 SCALII.FOR 196

6.3.5 SCALJJ.FOR 198

6.3.6 CGNL.FOR , 200

6.3.7 LSQR.FOR 202

6.3.8 SQRTT.FOR 214

6.3.9 POLAR.FOR 215

6.3.10 IINDEX.FOR , 217

6.3.11 ISTIME.FOR 218

6.3.12 TIMES.FOR 219

6.3.13 LJCHAR.FOR 221

6.3.14 HHLINE.FOR . 222

6.4 Dielectric Functions, Effective Media 223

6.4.1 DIEFCN.FOR 223

6.4.2 DIEEMA.FOR 227

6.4.3 DIEMAD.FOR 230

6.4.4 DIELMN.FOR 231

6.5 Dielectric Functions, Constituent Media 234

6.5.1 DIELOl.FOR, vacuum 234

6.5.2 DIEL02.FOR, air 235

6.5.3 DIEL03.FOR, Si (crystalline) 238

6.5.4 DIEL04.FOR, Si (amorphous) 242

6.5.5 DIEL05.FOR, SiOz (amorphous) 246

V
6.5.6 DIEL06.FOR, Si3N4 (noncrystalline) 250

6.5.7 DIEL07.FOR, Ge (crystalline) • 254

6.5.8 DIEL08.FOR, GaAs (crystalline) 258

6.5.9 DIEL09.FOR, AUGai_^As (crystalline) 262

6.5.10 DIELIO.FOR, Oxides of GaAs 268

6.5.11 DIELll.FOR, As (amorphous) 270

6.5.12 DIEL12.F0R, GaP 272

6.5.13 DIEL13.F0R, GaSb 276

6.5.14 DIEL14.F0R, InAs 280

6.5.15 DIEL15.F0R, InP 284

6.5.16 DIEL16.F0R, InSb 288

6.5.17 DIEL17.F0R, AlSb 292

6.6 Databases 296

6.6.1 W.SI 296

6.6.2 W.SIA 298

6.6.3 W.SI_02G 299

6.6.4 W.SI3_N4 301

6.6.5 W.GE .302

6.6.6 W.GA_AS 305

6.6.7 W.AL„GA„AS 309

6.6.8 W.GA_P 318

6.6.9 W.GA_SB 322

6.6.10 W.IN„AS 324

6.6.11 W.IN_P 326

6.6.12 W.IN_SB ^ 328

6.6.13 W.AL.SB 330

7. Acknowledgments 332

8. References . 333

Appendix - Quick Reference Guide A-1

vi
Semiconductor Measurement Technology:

A Software Program for Aiding the

Analysis of Ellipsometric Measurements,

Simple Spectroscopic Models

J. F. Marchiando

Semiconductor Electronics Division

National Institute of Standards and Technology

Gaithersburg, Maryland 20899

MAIN2 is a software program for analyzing spectroscopic ellipsometric measurements.

MAIN2 consists mainly of subroutines written in FORTRAN that are used to invert the

standard reflection ellipsometry equations for simple systems. Here, a system is said to

be simple if the solid material sample is characterized by models which assume at least

the following: (1) materials are nonmagnetic; (2) samples exhibit depth-dependent optical properties, such as one with layered or laminar structure atop a substrate that behaves like a semi-infinite half-space; (3) layers are flat and of uniform thickness; and (4)

the optical medium within each ambient /layer/substrate is isotropic, homogeneous, local,

and linear. The ambient region refers to that region of space which lies external to the

layer/substrate structure of the sample. Usually, the ambient region involves a medium

of air or vacuum. Each layer is characterized by a thickness and a dielectric function. The

dielectric function of a region, i.e., ambient, layer, or substrate, is represented by the Bruggeman effective medium approximation (EMA). Within the EMA, the effective medium of

a region is characterized by an aggregate mixture of constituent media, and the dielectrie function of each constituent medium is known a priori. The constituent dielectric

functions are taken from the literature. The ellipsometric equations are formulated as a standard damped nonlinear least-squares problem and then solved by an iterative method

when possible. The program is sufficiently modular to allow one to modify some of the

models used in the calculations.

Key words: ellipsometry; EMA; FORTRAN; modeling; software; spectroscopic models.

1
1. Introduction

In general, when linearly polarized light is incident on a flat surface, it becomes elliptically polarized upon reflection. Ellipsometry involves measuring this induced change in

polarization, as well as understanding the measured change in polarization in terms of the

optical properties of the material medium. The optical properties of the medium are characterized by the dielectric function and its spatial distribution. MAIN2 is a program for

analyzing ellipsometric measurements to find the dielectric function and its spatial distribution. MAIN2 consists mainly of FORTRAN* subroutines that are used to invert a standard set of reflection ellipsometry equations. The systems under consideration here involve

only simple structures such as those containing fiat, thin, solid films atop a substrate.

A system is said to be simple if the solid material sample may be characterized by models

that include at least the following: (1) materials are nonmagnetic; (2) samples exhibit

depth-dependent optical properties, e.g., one with a layered or laminar structure atop a

substrate that behaves like a semi-infinite half-space; (3) layers are flat and of uniform

thickness; and (4) the optical medium within each ambient /layer/substrate is isotropic,

homogeneous, local, and linear. The ambient region refers to that region of space which

lies external to the layer/substrate structure of the sample. Usually, the medium of the

ambient region is air or vacuum. The use of these assumptions is well documented [1-9]. .

The models used here involve at least two kinds of parameters: each layer is characterized in part by a thickness, and the dielectric function of the medium is expressed in terms

of the effective medium approximation (EMA) due to Bruggeman [10-13]. The optical

behavior of the ambient, layer, or substrate region is characterized as a macroscopic or

physical aggregate mixture of constituent media where the dielectric function of each constituent medium is assumed to be known a priori, and the physical size or cross section

of any given aggregate is much smaller than the classical wavelength of the incident light.

* Disclaimer: Certain commercial equipment, instruments, materials, or software products

are identified by name in this document in order to adequately specify the experimental

procedure or software development. Such identification does not imply recommendation or endorsement by the National Institute of Standards and Technology, nor does it imply that

the materials, equipment, or software products identified are necessarily the best available

for the intended purpose.

2
Here, the dielectric functions of the constituent media serve as basis functions in representing the effective dielectric function of the spatial region. The relative amount that each

constituent medium contributes in representing the effective medium is given by a scalar

coefficient and is called a volume fraction. The effective dielectric function is expressed in

terms of dielectric functions and volume fractions of the constituents.

A limited database of the characteristics of the constituent media is stored in files, see section 6.5 [4]. These files usually contain a profile of the dielectric function, e.g., a point

function over a range of discrete photon energies. Each of these data files has its own distinct subroutine in the software program to interpret the format of stored data. The con- vention associated with naming these subroutines and data files allows one to easily increase the number and/or resolution of the databases. Also, some provision is made for

passing parameters to these subroutines, so that one may alter or change the models used

in the representation of the dielectric function.

With only three kinds of model parameters to characterize a region, a sample may be as- sembled layer by layer atop a substrate. Since the natural parameters of the formulation

involve only thickness and dielectric function, it is straightforward to analyze several distinct samples collectively. Here, the program is said to have a multiple-sample capability.

Because of the method of indexing the parameters used in the program, it is possible for

two distinct regions to have a model parameter in common, e.g., a common dielectric function but a distinct thickness. Also, it is possible for distinct samples to have parameters in

common. Such cases may arise when analyzing samples which have undergone some type

of limited processing, e.g., changes in thickness due to etching. Here, the program is said

to allow coupling between samples and layers.

The phenomenological models and methods of solution are classical. The ellipsometric

equations are formulated as a standard nonlinear, damped least-squares problem that is

solved by an iterative method [14-17]. Following the convergence (or nonconvergence) of

the iterations to a good solution, i.e., within the resolution of the measurement by the instrumentation, the program stops.

Regarding the uniqueness of the calculated solution that is found by minimizing a residual in the least-squares sense, it is important to realize that multiple local minima (pseudo

3
solutions) may exist, as well as correlation among the modeling parameters [18-21]. Although the program serves as a tool in finding solutions at local minima, the responsibility

of assessing the consistency and appropriateness of the resulting solution remains entirely

dependent on the user. Because it is possible for the number of model parameters to become large and the run times to become long, the program was designed to run in batch

mode, as opposed to interactive mode. Regarding the calculation of the uncertainty of the

model parameters, the program uses the LINPACK library [15], which is public domain

software.

Although no graphic displays are provided while running the program, provision is made

for selecting specific sets of data for output. These data are written to a file in a format

amenable to the generation of graphics later. Thus, graphics capability is dependent upon

the resource library available at the local computing site. Actually, any one of several soft- ware graphics packages would be more than adequate. But for convenience, as well as for

completeness, this document refers to the NCAR software graphics package [22, 23]. This

is mentioned briefly in section 4.1.3.

This report presents a brief overview of the theory and methods of solution and provides

a brief manual of operations or guide for the user to the options and capabilities of the

software program. Section 2 discusses the models of the dielectric functions. Section 3 discusses the methods of inverting the ellipsometric equations. Section 4 discusses the manual

of operations for the software package. This includes an overview regarding some of the

considerations that went into the design of the software package. This overview includes

a short listing of parameters which are used in specifying the allocations of the various arrays. Presented next are the free-field formats which are used when entering the required

sets of input data. These include the tabular lists of model parameters, the specification

or characterization of the samples, and the collective sets of measurements of the ellipsometric angles. Finally, information is given regarding the command options that are available to the user for exercising operational control over the program, i.e., constraints of procedures during analyses. Section 5 discusses a few selected examples of actual runs of the

software package. The input and output data files are listed. Section 6 contains a listing

of the software source files. Lastly, the appendix contains a quick reference guide for using

the program and building the necessary input data files.

4
The source code is written predominantly in standard FORTRAN-77. Minor compiler extensions involve the DO-ENDDO, the INCLUDE, and the OPEN and CLOSE statements

such are appropriate for a VAX computer. The system clock is also machine dependent,

see section 6.3.12. The source code contains some in-line comments for the user's convenience, but some compilers may find this to be a nuisance. The more expert user may

want to modify some of the routines while taking advantage of the interior data structure

of the program, whereas the less expert user may simply want to operate the package as

presented. A copy of the ASCII files of the source program and an mstallation guide are

available from the author upon written request on letterhead stationery and receipt of a DOS-formatted floppy diskette or a small reel of nine-track magnetic tape.

5
2. The Dielectric Function

The theory describing the scattering of light for ellipsometry, as well as the numerical

methods of calculation of the models, has been discussed in detail elsewhere [1-3]. The

discussion presented in [3] involved the reflection and refraction of a time-harmonic monochromatic plane electromagnetic wave obliquely-incident on a flat plane surface of a stratified

medium exhibiting depth-dependent optical properties. The optical properties of the material medium were assumed to be piecewise continuous, isotropic, local, linear, and not

perturbed by the effects of free charges and surface currents.

The coordinate geometry used here is the same as that presented in [3]. The material

medium is assumed to occupy the semi-infinite positive half-space [z > 0) with the flat surface being the plane (2 = 0). For the isotropic homogeneous medium with depth-dependent

[z) optical properties, there is translational invariance within the {x,y) plane. The zaxis is aligned in a direction normal to the surface and planes of stratification. A lossless

isotropic homogeneous medium like air or vacuum is assumed to occupy the so-called ambient region (2 < 0). A source time-harmonic monochromatic plane wave is assumed to be

incident on the surface of the medium (2 =^ 0), from the ambient region (2 < 0), in a direction of angle 0 with respect to the surface normal. The plane of incidence is taken to be

the {z,x) plane, and the direction cosines of propagation are both positive.

The profile of the stratified structure of the dielectric function is approximated by a stepped

profile; the dielectric function of a region, i.e., ambient, layer, or substrate, is assumed

to depend only on the optical frequency of light. The dielectric function in [3] was expressed in terms of one index of refraction and one extinction coefficient per optical fre- quency. Although this may be adequate for analyzing measurements involving very few

optical frequencies, spectroscopic ellipsometry usually involves analyzing measurements at very many frequencies. Here, dispersion is used to advantage in analysis; i.e., the dielectric

function may change with frequency, whereas the layer thickness may not change. The dielectric function of the ambient, layer, or substrate region is assumed to be characterized

by the optical behavior of a macroscopic or physical aggregate mixture of constituent media, where the dielectric function of each constituent medium is known a priori. Further,

the cross-sectional diameter of any given aggregate is assumed to be small compared to

the classical wavelength of the incident light, and there is negligible interaction between

6
neighboring aggregates. Such ideas in part form bases of several effective medium theories. The model assumed here is the effective medium approximation (EMA) associated

with Bruggeman [10-13]. The relative amount that each constituent medium contributes

to the effective medium of the region is given by a real-valued scalar number called a volume fraction. The following subsections present brief discussions regarding the calculations

of the dielectric functions of the constituent media, the effective media within the EMA,

and the partial derivatives of the dielectric functions with respect to the associated model

parameters.

2.1 Constituent Media

Within any given region, i.e., ambient, layer, or substrate, the effective medium is assumed

to behave like an aggregate mixture of distinct constituent media. Within the EMA, the

dielectric function (e) of the effective medium is expressed in terms of the dielectric functions {ej) of the constituent media, where j indexes the distinct constituent media. The

(cj) serve as basis functions for (e) and are assumed to be known functions of the optical

frequency.

Here, a constituent medium is characterized by its optical properties, i.e., the dielectric

function. A constituent medium is considered distinct insofar as its optical dielectric function is distinct. Hence, a constituent medium may refer to a distinct chemical entity and

its associated optical properties, e.g., due to a phase state. For example, regarding a thermally grown oxide atop a silicon wafer, j may refer to the distinct chemical entities of

SiOa or Si, as well as the associated phases that may be present, e.g., amorphous Si02,

amorphous Si, or crystalline Si. Since these materials have distinct dielectric functions,

they are considered to be three distinct constituent media.

To calculate the dielectric function of a constituent medium, a distinct subroutine is used

for each distinct constituent medium. Each of these subroutines contain an argument list,

so that it is possible to optimize on model parameters that are local to the individual constituent dielectric function. Since these dedicated subroutines have similar names and ar- gument lists, one may easily modify the database of any individual constituent medium.

The convention used here for naming subroutines that calculate constituent dielectric functions is of the form, DIELxx, where xx refers to a two-digit number between 01 and 99.

7
These subroutines calculate (sj) from those models that have been found or reported in

the available open literature. Usually, this involves evaluating a Sellmeier equation or a

spline fit of a point function defined on a discrete grid of energies, i.e., where the optical

frequencies have been expressed in terms of energy. The point function is stored in and

read from some data file, and the spline-fitting algorithms are from the GAMS software

library [14]. The point functions are stored in files with suggestive filenames. For example, to calculate the dielectric function of gallium arsenide, the subroutine DIEL08 reads

and stores the entire point function that is stored in file W.GA_AS during the first call,

see sections 6.5,8 and 6.6.6, respectively. Then, DIEL08 needs to evaluate only two spline

fits per call, i.e., the real and imaginary parts of the complex refractive index or dielectric

function.

Note also that these subroutines, i.e., DIELxx, are all called from the same subroutine,

DIELMN, see section 6.4.4. (LMN is meant to be a mnemonic for elements.) If it is ever decided (by the user) that the number of distinct constituent media in the database is to

be enlarged by including additional subroutines, then appropriate calls to these additional

subroutines must be included in the subroutine DIELMN. Further, it may be necessary to

modify the parameter called nlnmts that is discussed in section 4.1.2 as v/eU.

2.2 The Effective Medium Approximation

The effective medium approximation [10-13] for determining the dielectric function (e) of

a distinct spatial region, i.e., ambient, layer, or substrate, is given by the following equation •

where TV denotes the number of distinct constituent media in the mixture, fj denotes the

volume fraction of the j*^ constituent, ej denotes the dielectric function of the j*'^ distinct

constituent medium evaluated at the appropriate classical optical frequency of light, and e

is the dielectric function of the effective medium. It is assumed that fj and Sj are known

on input, and that fj is independent of the frequency and is a real valued scalar. Equation

(1) must then be solved for e. The method of solution used here is Newton iteration. This

involves a three-step procedure.

(1)

subject to the constraint

N

(2)

8
The first step involves reformulating eq (1) in order to simplify the functional dependence

on £. Equation (l) may be written as

Thus,

1 ^ /

.

Equation (1) may also be written as

where a substitution has been made from eq (3).

The second step involves applying the Newton algorithm to eq (4). Here, one seeks the

root to an equation, say Q, given by

The root minimizes \Q\. The variation of Q given by

^<? = -(^0 2E(^ (6)

forms the basis for the Newton step. The Newton step is related to (Q/SQ).

The third step involves providing a reasonable initial solution. This is necessary for starting any iterative method of solution. For convenience, the initial solution is given by

^ = ^(2^11 + £x), .

where

N 1 ^ /•

j=i j=i

which follows from considering two extreme cases when the electric field vector is oriented

either parallel or perpendicular to the layers of the stratified media.

The criterion for convergence in finding the root is that the Newton step be at least six

orders of magnitude smaller than the magnitude of the dielectric function of the effective

medium. This algorithm is located in subroutine DIEEMA, see section 6.4.2.

9
To help understand eqs (l) and (5), consider the following example. Consider a sample of

silicon with a thermally-grown oxide layer. Let the layered structure consist of two layers

and a substrate. Here, the substrate is silicon, and the top layer is amorphous SiOa- Let a

transition region layer lie between the top layer and substrate, and let it be an aggregate

mixture of half Si and half amorphous Si02. This structure involves three effective media,

i.e., one to a region, but only two constituent media, i.e., crystalline Si and amorphous

Si02. Accordingly, [cj) may refer to either (^si) or (esiOz)- Regarding eq (5), it follows

that [N = 1) and [fj = 1) for both the top layer and the substrate regions. Hence, (e —

^5102) for the top layer, and (e = esi) for the substrate. Regarding the transition region,

(A'" = 2) and (/si = /siOz — 0.5). Letting the optical frequency be that corresponding to an energy of 2.0 eV, one may evaluate the complex dielectric functions for the constituent

media. From sections 2.1, 6.6.1, and 6.6.3, it follows that

£si ~ 15.256 + i 0.172 and esi02 ~ 2.124 + i 0.0,

where i = \/— 1 . Then, regarding eq (5), the root is found to be

e « 6.747 + i 0.052,

i.e., the dielectric function of the effective medium of the transition region.

2.3 Partial Derivatives

The problem associated with inverting a standard set of reflection ellipsometry equations

has been discussed in detail elsewhere [1-3]. The inverse problem is formulated as a leastsquares problem. The method of solution used here involves an iterative procedure for improving the numerical values of the model parameters [3]. This requires some understanding of the functional dependence of the dielectric function on the necessary model parameters. Hence, one must calculate the partial derivatives of the dielectric function with respect to any model parameter that may be selected for optimization. Regarding the EMA,

this involves at least two kinds of partial derivatives.

The first kind involves variations in model parameters that are local to the constituent dielectric function, but yet are independent of volume fraction and thickness. Letting the

prime denote a partial derivative with respect to such a model parameter, and then operating on eq (4), it follows that

10
which may be rearranged to yield ^ fe'-

e — e

^^^^ Jl'^t (7)

To evaluate e' from eq (7), the program uses subroutine DIEMAD, see section 6.4.3.

The second kind involves variations in the volume fractions. Again, starting with eq (4), it follows that

which implies that

de \ \ €4 + 2£

(8)

when the fj are mutually independent variables. Yet, from eq (2), it follows that

o==f;(^/,). (9).

Hence, the variations are linearly dependent. Since each independent constraint removes

one degree of freedom, if some of the volume fractions of a layer are selected for optimization, then at least two or more of the fj must be involved in the variation. Since,

then one may evaluate the partial derivative of e with respect to a set of unconstrained

variables [fj) by letting

(i)^te)-(a)'

where j and k involve the set of model parameters that are selected for variation but are coupled by the constraint, where k involves a fixed index selected arbitrarily by the user, and where [j / k). For convenience, the program uses: {k<j). To evaluate the [de/dfj)

in eq (8), the software program uses subroutine DIEEMA, see section 6.4.2.

11
3. The Inverse Problem

3.1 Formulation of the Least-Squares Problem

In order to characterize the layered structure of the sample, it is necessary to invert the

standard ellipsometric equations. These equations relate how the optical properties of the

material sample induce a phase-shift in the reflected light that is measured by the ellipsometer. Because of the nonlinearity of the equations, it is usually not possible to find

simple analytic expressions which will invert the equations. The common approach to

performing such inversions is to formulate them as nonlinear least-squares problems [1-3].

Here, one considers a sequence of forward problems, where each increment of the sequence

involves three distinct steps. The steps are: starting with a good estimate of values of the

model parameters, determining the deviations between the experiment and the model, and

then updating the model parameters with better values. This sequence is repeated until

the magnitude of the corrections become sufficiently small.

The ellipsometric equations for the ellipsometric angles, A and ip, are of the form:

A = A[u,(f),h) and -0 = ^, b)

where u is the frequency of the incident light; (f) is the angle of incidence; and b is an array

where the components specify the model parameters, e.g., layer thicknesses and volume

fractions. The standard procedure for inverting the above equations involves minimizing

some objective function or nonnegative scalar error expression containing the deviations

between experiment and model of A and -0 in the least-squares sense, e.g., M

t= 1 6At J \ SiPl

(11)

{=1

where superscripts (e, m) refer to experiment and model, respectively, M refers to the

number of measurements of (A^ip) from experiment, g is an array of the deviations, e.g., (A^ — ATM), that are scaled by the uncertainties in the measurement, i.e., - A^\

(12)

12
where (1 < i < M), the superscript T denotes transposition, and the uncertainties in the

measurement of and are denoted by ^A^ and ^-0?, respectively.

The third step of the sequence is concerned with the procedure for obtaining better nu- merical values for the model parameters, i.e., the Newton step. An estimate of the neces- sary correction may be realized by linearizing the functional representation of the m^odel

and solving the resulting matrix equation, g = Jv, where v is a column array (Newton

step) for improving the model parameters that were selected to undergo variation, i.e.,

VjOcShj, and where the Jacobian J is a sparse matrix, Jij (x[dAi/ dbj).

Such matrix equations are common to optimization problems. It is well known that additional numerical stability may result if one requests that the norm of v be minimized as

well. This involves modifying the error expression to

G = (g-Jvr(g-Jv) + /.v^v, (14)

where k is a positive scalar parameter subjectively chosen between. 0.01 and 1.0 for our

calculations. Of course, the final solution v ought to be independent of k.

It is also known that the columnar scaling of J affects the accuracy of the solution, as well

as the effectiveness of k. A simple choice for the scaling can be found by considering the

diagonal elements from J^J and then defining the diagonal matrix, S, where

S.^ii^^lf. (15)

Letting

J=JS-\

V = Sv,

r = g-Jv = g-Jv,

a suitable error expression may be defined by

(g- Jv)''(g- Jv) +/cv^v (16)

13
The criterion for critical points or relative minima is a vanishing variation, i.e.,

dG/dvj — 0, which yields a set of equations that may be expressed as

' 1 J r g"

.0.

and must then be solved for v.

Because of the sparsity of the Jacobian, it is expedient to utilize an iterative method for

solving the above matrix algebra problem. Algorithms [14, 15] exist that specifically address this type of problem, one [16, 17] of which utilizes a relatively stable Lanczos process

(Krylov space decomposition) in formulating the method of steepest-descents. Essentially,

the method requires that each updating vector be orthogonal to the previous update vectors. From this procedure, one finds v, which leads to v, which is then used to improve

the estimate of the values for the model parameters, e.g.,

6"^*' = b^^^ + vj.

Using this improved b, the sequence is repeated again until either: |g| becomes sufficiently small, of the order of a few millidegrees, e.g., the resolution of the measurement,

or until |v| become sufficiently smsdl so that |g| suffers no further reduction regardless of

magnitude. It is especially during this last case that it becomes necessary to scan a grid of

model parameters. Multiple local-minima may be encountered, e.g., nonuniqueness. Often,

this reveals either: (i) correlation v/hich prevents model parameters from being resolved

independently; i.e., the measurement data are not sufficiently functionally independent

which thereby induces a functional dependence among the model parameters; or (ii) the

inadequacy of the model in providing a sufficiently good physical description of the process, which is likely whenever jg| greatly exceeds the resolution of the measurements.

Finally, it is important to realize that in the above-outlined steps, the emphasis centers on searching for and ascribing good values to the parameters of a physical model which

has already been specified. Only one specific model is assumed to have been applied to a

given set of measurements. But often situations may occur, or questions may arise, where

it is important to consider alternative models during the effort to furthet reduce the value

of the error expression G, and these must be investigated as well. Also, it is possible that

two or more distinct models may be found that reduce the deviations in |g| to comparable magnitudes. Then, the problem of characterizing the sample becomes one of comparing models which ought to lead toward a decision about selecting the better model. One

heuristic approach has been to select that model which provides the smallest deviations,

14
i.e., |g|, while utilizing the fewest modeling parameters and being consistent with physical

reality. However, comparisons assume some criteria or ordering, and that requires a number. So the problem becomes one of reducing a model to a number. This reduction is cer- tainly not simple and fully merits its own discussion, e.g., hypothesis testing and decision

theory. But such a discussion is beyond the scope that is intended here, so that it is expedient to direct the reader to consider simple statistics and use the i^-statistic in assessing

the so-called goodness-o{-£t test. For further discussion on topics such as parameter estimation, hypothesis testing, significance testing, and other formulations involving decision

processes, the reader is advised to consider the statistics literature available.

3.2 Sensitivity Analysis of Model Parameters

In the above discussion of the least-squares problem, the emphasis was on obtaining accurate numerical values for the model parameters. Following this, it is natural to consider

next some assessment of the uncertainties associated with those values. For a restricted

class of linearizable problems and assumptions, one may ascribe estimates to these uncertainties by utilizing a formulism similar to that used in the least-squares problem [3].

Starting with the functional representation of the model, and then expanding about the

critical or fixed point solution, the deviations may be expressed by assuming variations out

to first order, i.e.,

8b^

and

d(i>

^<f> + Ki (17)

where A'^ refers to the number of distinct model parameters, and refers to the uncertainty associated with individual measurements of performed by the instrument.

Further, it may be the case that during the course of analysis of finding the critical point

solution, some of the model parameters will have had values and uncertainties assigned to

them from some earlier experiment or measurement that is external to and distinct from

those being analyzed here, e.g., values taken from the literature. These values are assumed

as given and remain unchanged during the calculations. Consequently, the set of model

parameters {Sbj) may be partitioned into two disjoint sets, those that remain unchanged

15
[uj] and those that are allov/ed to vary {vj). This allows both of the above expansions to

be combined and expressed as

gi = Jv,ijVj + Ju,ijUj + J^/(j)i + ei, (19)

where §{ refers to deviations in (Aj-^) between measurement and theory, e.g., (A^ — A^)

.without scaling by the measurement uncertainty; J refers to the Jacobian or the array

of partial derivatives that is appropriate for the partitioning and evaluated at the critical point; and 0i involves the uncertainty in the angle of incidence and the assumption of

stochastic independence between each measurement, and the implied summation affects

only the j index. The sensitivity analysis of the model parameters centers on the procedure of assigning values to the uncertainty in [hj) that are associated with {vj). Since this

has been discussed in [3], only terms associated with {vj) are considered in what follows.

From eqs (11), (14), and (19), it follows that the minimum value of the error expression G

is attributed to residuals that are due to measurement uncertainties that are assumed to

behave as random variables in a statistical sense, i.e., being stochastically independent and

identically distributed. So, when G is evaluated at the critical point solution, it is assumed

that . . Go = \z? = \e\\ (20)

and that an expansion of G about the critical point may be shifted to zero and written as

G = G-Go = ig-Jvv|'-|g|'. (21)

A simple estim^ate of the variances of the model parameters may be found from

{v^v,)= sl\[rj,)~'\ , (22)

ok where

2 - ^ ^ 5_ = (23)

' 2M - N

estimates the variance of a distribution with 2M—N degrees of freedom, M is the number of measurements of (A,'0), and N is the number of model parameters (vj) undergoing variation. In the absence of correlation, the magnitude of uncertainty {U) assigned to

model parameter (vj) may be estimated by

li{vj)<{vjvjy/\ (24)

To calculate the necessary terms given in eq (22), the program uses subroutine CORLAT.

16
4. Manual of Operations

In order to use MAIN2, it is necessary to: (1) specify the model parameters that characterize the layered structure of the sample, (2) collect the necessary measurement data

of ellipsometric angles and the associated energies and angles of the incident light, (3)

assign size allocations of arrays which hold these data, (4) assign formats and filenames

which are provided for entering the input data and receiving the output data from calculations, (5) understand the stored databases of constituent media, and (6) understand

the limitations and capabilities of the software package and its utility for implementing

strategies in analyzing the measurement data. The filename convention assumes a filename

and an extension made of alphanumeric characters in the standard format given by: file- name.extension. This section presents a brief overview of these considerations,

4.1 Software Development Considerations

The main program, MAIN, performs a small set of functions, see section 6.2.1. First, it

* calls a subroutine to open the necessary data files. Second, it requests a subroutine to read

most of the input data file. Third, it allows the user to select an option from a menu or tabulated list of command options and then calls the appropriate subroutine. Following

the return from the subroutine to the main program, the main program stops; no further

command options are processed.

4.1.1 Input/Output Files

MAIN2 involves at least two kinds of data files. The first kind of file involves five

input/output files for calculations. Two files serve for entering input data, and three files

serve for collecting output data.

X.DAT is an input data file. It contains: the model parameters that characterize the

sample, the configuration of the layered structure of the sample, and the ellipsometric angles of the measurement data. An example of an X.DAT file is shown in section 4.2.9.

X.INN is an input data file. It contains the sequential list of command options that provide control of the program. These are discussed further in section 4.3. Examples of X.INN

files may be found in section 5.

17
X.OUT is an output data file. It contains a collective list of: ail the entered input data

and the general proceedings generated during the course of a calculation, as well as any

informative error messages. Examples are shown in section 5.

X.SOUT is an output data file for intermediate solutions. It contains the breakpoint information that may be generated during any grid scan of the model parameters. This information is written to the file at periodic intervals of 15 CPU-minutes and overwrites the

information from previous breakpoints, so that only the last or most recent breakpoint is

retained. The procedure for restarting or resuming a previously interrupted calculation

involves the simple task of appending the output of this file X.SOUT onto the end of file X.INN, i.e., without any intervening blank lines, and then re-executing the job. When the

job is re-executed, the program will attempt to read only one set of breakpoint information in file X.INN before resuming calculations. Consequently, it is important to replace

any earlier breakpoint data in X.INN, as appropriate.

X.PLOT is an output data file for graphics. The data are formatted in a manner that is intended to be amenable for later reading and plotting. Examples are shown in section 5.

These files are opened initially by subroutine FILEOP, see section 6.2.2. Since breakpointing involves opening/closing files, other open/close statements may be found in subroutines SCANOl and SCAN02. The integer logical units that are associated with these

files are assigned by the block data statement located in BLKDAT.FOR. These logical

units are passed throughout the program by the named common block statement in file lOUNIT.

All output files are deleted at the start of the program, as may be seen from looking at

files MAIN.FOR and FILEOP. FOR. Thus, it is important to append any breakpoint information contained in X.SOUT to X.INN, as appropriate, before the next execution of the

program, lest that which was stored in X.SOUT be overwritten and lost.

The second kind of data file involves the database of constituent media. These data files

Serve as input to subroutines, i.e., DIELxx, which calculate the constituent dielectric functions. Each data file is associated with a distinct constituent medium. Usually, the data

file contains a discrete profile of the complex dielectric function and/or the complex refractive index as a function of energy. Naturally, the filenames must match that assumed

18
by the subroutines that read them. Here, the filenames are rather suggestive and straightforward, e.g., W.SI for crystalline silicon, V/.SIA for amorphous silicon, W.SI3_N4 for

noncrystalline Si3N4, W.GA_AS for crystalline gallium arsenide, etc.

4.1.2 Allocation of Array or Work Space

In general, the allocation size of the arrays used in the program may be determined or es- timated from a set of eight constants. These constants are assigned their numerical values

prior to compilation by parameter statements located in file DEFNIT, see section 6.1.2.

Consequently, if any changes are made to these assignments, it is usually necessary to

recompile and relink most (if not all) of the subroutines in order to incorporate the said

changes into the running program. The following list includes the eight basic constants.

nsampl, the maximum number of samples allowed for analysis, where the sample involves some finite number of films/layers atop a substrate.

nf ilms, the maximum number of films/layers allowed atop the substrate of any given

sample.

nparms, the maximum number of distinct parameters allowed per mixture or effective

medium.

nlmnts, the maximum number of distinct constituent media [ej] allowed during analysis.

nbient, the maximum number of distinct ambients allowed atop the layers/substrate of

any sample.

nwaves, the maximum number of distinct classical optical frequencies or wavelengths in

vacuum of light incident on any sample.

nanglx, the maximum number of angles of incidence allowed per classical optical fre- quency of light incident on any sample.

nrpeat, the maximum number of repeats of an experiment run, where an experiment

run involves taking measurements of (A,-0) for a range of incident angles and

energies on the same (ambient/sample) configuration.

In some cases, the array allocations are overestimated. The algorithms that estimate the

array allocations from these eight constants assume a worst-case scenario involving the

19
largest size possible being calculated. This occurs especially when sizing arrays for the Jacobian. Here, it is convenient to assign some upper limit to these arrays. This is the purpose of the constant named nnjaaa. It is located in file ARRAYS, see section 6.1.7. A few

internal check-tests are provided to help ensure that indices remain within bounds of the

dimensions of these arrays.

4.1.3 Library Software

During the course of calculation of the least-squares fit, it is sometimes necessary to estimate the sensitivity of the model parameters. As discussed earlier in section 3.2, e.g., eq

(22), it is necessary to calculate the inverse of a square matrix, i.e., the matrix formed by

the product of the Jacobian and its transpose. This may be evaluated by using subroutines from the LINPACK library of mathematical software [15]. Reference calls to such

subroutines may be found in subroutine CORLAT, see section 6.2.21.

4.2 Input Data Requirements

As mentioned previously in section 4.1.1, the input data file X.DAT contains: the model

parameters, the characterization of the layered structure of the samples, and the measure- ment data of ellipsometric angles. Also, the input file contains information regarding the

locations of the database files of point functions that are used in calculating the dielectric functions of the distinct constituent media. Here, all of the database files reside in the

same directory.

The following subsections develop a line-by-line construction of file X.DAT. As mentioned

above, the input data may be partitioned into subsets. Each subsection discusses one subset, and the subsets are presented in the order that they are expected to occur in the input file. Because each subset of data requires its ov/n input format, each format is demonstrated with a worked example. For convenience, an example of a completed input file is presented in the last subsection, section 4.2.9.

The main program uses subroutine INPDAT to read all of the data in file X.DAT, see section 6.2.3. These data are stored in the arrays of named common areas, FILMMM and

XPRMNT, see sections 6.1.3 and 6.1.4, respectively.

20
Note: The examples presented in this document are for the expressed single purpose of

communicating the utility of the software package and are not to be construed as an en- dorsement of the best models or numerical values that may be assigned to the optical

properties of the media at particular optical frequencies.

4.2.1 Database Information

Regarding the database of point functions that are used in evaluating dielectric functions

of constituent media, as mentioned earlier in sections 2.1, 2.2, and 4.1.2, all these files are assumed to reside in the same directory. Further, since the complete specification of a file

is of the form:

disk:[directoTy]filename.extension;veTsion

when no defaults are assumed, it is convenient to let the database files have similar file- names, i.e., W, but have distinct extensions to identify distinct constituent media. Consequently, the first line of data in X.DAT is a character string which allows one to complete

the specification of these files. Since the extension refers to a specific medium, the first

line in X.DAT may contain everything but the extension. Incidentally, the file specification

is completed by appending a character string of the appropriate extension that is stored

in the subroutine that calculates the dielectric function of the constituent medium, i.e.,

DIELxx, where xx is a two-digit integer. An example of the format may be something like

the following:

drbl: [data_bases]w.

where 'drhl' refers to the name of the disk or mass-storage device, 'data_bases' refers to

the name of the directory, and V.' refers to the filename of the database files, i.e., including the final period and no extension.

4.2.2 Layer Thicknesses

The next set of data involves listing the distinct thicknesses of the layers that form the

layered structure of the samples. The unit measure of thickness is nanometers.

As mentioned earlier in section 3, the numerical values assigned to these parameters may

be selected to undergo variation (vary) or remain fixed (frozen) during the course of the

21
analysis or calculations. An integer switch (froz/vary) is provided for each model parameter, i.e., refractive index or extinction coefficient. If the switch is set equal to 0, the numerical value is frozen. If the switch is set equal to 1 upon input, the numerical value may

undergo variation. The switches remain unchanged during the course of calculation.

An uncertainty value is also required for each model parameter. The magnitude of this

uncertainty may serve either of two purposes. If the numerical value of the parameter undergoes variation, then the uncertainty value sets the maximum stepsize allowed for changing the numerical value of the parameter between consecutive iterations of the calculation.

If the numerical value of the parameter is selected to remain frozen, then the uncertainty

value is used during the sensitivity analysis calculation to estimate the uncertainty values

of other 'vary' model parameters. This is discussed further in section 3.2.

To demonstrate the necessary format, it is convenient to consider an example of a sample that involves two layers atop a substrate of silicon, where one layer is atop the other

layer. Let the layer adjacent to the ambient region be a thermally grown oxide. Let the

layer adjacent to the substrate region be a thin transition region that involves some mixture of thermally grown oxide and crystalline silicon. The layered structure may then be

expressed by the ordered form:

(ambient / oxide / oxide + silicon / silicon substrate).

Suppose further that the top layer of oxide is 100 nm thick, that the transition region is

2 nm thick, and that a reasonable initial estimate of the uncertainty is subjectively chosen to be 2 nm. Lastly, let only the transition region thickness be subject to optimization.

This construct would require four lines of input data. An example of the format would be

as the following:

2 ! mfilmz ' thicknesses /(i ,2 ,zii,ivary)

1 100.0 2.0 0 ! i,2,zu.,ivary ' top layer, Si02

2 2.0 2.0 1 ! i,z,zu,ivary ' bottom layer, Si02+Si

Note that the tabulation would include distinct thicknesses from all samples; thus any ordering among the thicknesses is not necessarily important here. Again, this format does

not mention any sample or any ordering of layers; thus these thicknesses are not yet associated with any particular sample. The ordering of layers for a sample is presented later in

section 4.2.7.

22
Also, note the initial line of connected hyphens; it is included. The intent here is to ease the readability of the input file. For convenience, a line of connected hyphens will be as- sumed to precede each format presented in the remaining subsections of 4.2.

Since the program uses READ statements to fetch its data from files, it is convenient to use a notation that is a suggestive adaptation of the argument list of a READ statement

in FORTRAN. This notation was presented previously in [3]. Following this same convention for specifying input formats, the input format for thicknesses may be expressed by the

form:

/{i, Zi, 5zi, Vi)

where:

is the number of distinct thicknesses that contribute to the layered structure of

the samples;

i is an integer that indexes the line entries consecutively in unit increments,

i.e., [i = 1,2,3, . . . ,m^);

Zi is the thickness of a layer measured in nanometers;

6zi is the uncertainty that is assigned to the numerical value of Zi] and

Vi is the integer (froz/vary) switch with value 0 or 1, respectively.

The forward slash mark '/' delimits the first line of input data. The parentheses bound

items that ought to appear on each subsequent line of data until the implied DO-loop has

been satisfied. Such notation has been convenient in conveying the complicated formats

that are required for the input entries as well as the associated data structures. This notation is assumed throughout the remainder of the document unless inferred otherwise from

context.

Incidentally, if {m^ — 0), this is the only line of information that ought to be entered for

this set of data, i.e., apart from the short line of connected hyphens.

23
4.2.3 Supplementary Parameters (Integer)

Regarding the ability of the program to incorporate complicated models, it is sometimes

important to be able to pass parameters to subroutines that calculate the dielectric functions of the constituents and mixtures. Such parameters may serve as integer switches for

decision processes or serve as floating-point variables that may be subjected to optimization. The manner in which these parameters are discerned and passed among the subroutines may be readily seen by considering the subroutine named DIEFCN, see section 6.4.1.

Although the structure for passing, referring, and interpreting the supplementary parameters is rather limited, it does provide some measure of convenience for the user in adapting

or incorporating his/her own models. The input format for integer supplementary parameters is of the form:

mi I

[i, Pi)

where:

m/ is the number of distinct integer supplementary parameters;

i is an integer that indexes the line entries of data consecutively in unit increments, i.e., (i = 1, 2, 3, . .

. , m/); and

pi is the integer supplementary parameter.

Since integer parameters are not subjected to optimization here, no uncertainties are included regarding their numerical value. This tabulation includes all integer supplementary

parameters that may be associated with any of the samples or mixtures.

Since the integer supplementary parameters are used so infrequently, it is often the case

that (m/ = 0). Then, an example of the format would be of the form:

0 ! mipars / (i,ip)

4.2.4 Supplementary Parameters (Floating-Point)

As m^entioned above, the program provides the capability to input floating-point supplementary parameters to aid in modeling the optical behavior of the constituents and/or

24
mixtures. As may be seen from eq (7), these parameters may be subjected to optimization. The input format is of the form:

T^R /{i, Pi, Spi, Vi)

where:

mji is the number of distinct floating-point supplementary parameters;

i is an integer that indexes the line entries of data consecutively in unit increments, i.e., (i = 1, 2, 3, . .

. , m_R);

Pi is the floating-point supplementary parameter;

Spi is the uncertainty that is assigned to the numerical value of pi] and

Vi is the integer (froz/vary) switch with value of either 0 or 1, respectively.

Since the floating-point supplementary parameters are used so infrequently, it is often the

case that {mR = 0). Then, an example of the format would be of the form:

0 ! mrpars / (i ,rp ,up ,ivary)

4.2.5 Effective Media or Mixtures

For each effective medium that contributes toward the construction of the layered structure of the sample, as well as the ambient regions, one must specify the constituents and

their volume fractions. If any constituent medium requires supplementary parameters, it

is convenient to include this information as well. Further, it is convenient to group such

information individually. Regarding the organization of these data for the effective media,

the general format is given by the following form:

25
TUfj mij rriRj

1 £1 /i Sfi Vi

if £i fi Sfi Vi

^'^fj J^^f,} ^-^"^/.i ^'"^t,i

«R PR,i

26
where

TTZmedia IS the numbei of distinct effective media. From sections 4.1.2 and 6.1.2,

(2 < mmedia < ns ampl * (nf ilitis + 2 ) ).

j is an integer that indexes the distinct effective media, i.e., (j = 1, 2, . .

. , mniedia)-

TTifj is the number of distinct constituent media (or volume fractions) that are associated with the j^^ effective medium. From section 4.1.2, (1 < rufj < nlmnts).

mij is the number of integer supplementary parameters that are associated with the

j'^ effective medium.

TTiRj is the number of floating-point supplementary parameters that are associated

with the j*^ effective medium.

if is an integer that locally indexes the distinct constituent media (or volume fractions) of the j'^ effective medium, i.e., {if — 1,2, . . . ,mfj). For convenience and

readability, the subscript j on i is suppressed here, as well as in the following set

of entries.

li is an integer index label of the appropriate constituent medium that is associated with the if^^ constituent medium of the j*'^ effective medium. From section

4.1.2, {1 <£i< nlmnts).

fi is the volume fraction of the if^^ constituent medium of the j*^ effective medium.

Sfi is the uncertainty that is assigned to the numerical value of fi.

Vi is the integer (froz/vary) switch for /{ with value 0 or 1, respectively.

ii is an integer that locally indexes the integer supplementary parameters that are

associated with the j^^ effective medium, i.e., [ij — 1,2, .. . ^mij).

pi^i is the integer index label of the appropriate integer supplementary parameter

that is associated with the Zj'^ integer supplementary parameter of the j^^ effective medium, i.e., (1 < pi,i ^ ^z)? where mj was presented earlier in section

4.2.3.

27
Ir is an integer that locally indexes the floating-point supplementary parameters

that are associated with the j*^ effective medium, i.e., (z^ = 1,2, .. . ,mRj).

PR^i is the integer index label of the appropriate floating-point supplementary parameter that is associated with the i^*^^ floating-point supplementary parameter

of the j'^ effective medium, i.e., (1 < pR,i < mi?), where was presented

earlier in section 4.2.4.

Again, regarding the above entries that are capped with a tilde, it is important to note

that these entries refer to index labels local to the appropriate subset of data, i.e., constituent media and supplementary parameters from sections 4.2.1, 4.2.3, and 4.2.4.

To demonstrate this format, consider again the example that was presented in section

4.2.2 regarding thicknesses. The layered structure involved the following ordered form:

(ambient / oxide / oxide -f silicon / silicon substrate).

This structure involves four distinct effective media, i.e., one for each distinct spatial region. Letting the ambient be air, one need only consider three distinct constituent media,

i.e., air, oxide, and silicon.

In section 6.5, one may locate the set of distinct constituent media that is of interest here,

and then go on to identify the names of the subroutines which are used to calculate the dielectric functions, i.e., DIELxx, where xx refers to some two-digit number. Here, the index

label that is associated with a distinct constituent medium is that integer which is derived

from the last two characters of the subroutine name, i.e., xx. The constituent media index

labels for air, silicon, and oxide are found to be 2, 3, and 5, respectively. Further, let the

transition region be half oxide and half silicon. The format for this example could then be

as the following:

4 ! mixtures ' number of effective media

1 0 0 ! mlmnt ,mipar ,mrpar #1

1 2 1 0 0 0 0 ! j , Imnt ,f rac ,-uf rac , ivary " air

1 0 0 ! mlmnt ,mipar ,mrpar #2

1 3 1 0 0 0 0 ! j , Imnt ,f rac ,uf rac, ivary - Si

1 0 0 ! mlmnt ,mipar ,mrpar #3

1 B 1 0 0 0 0 ! j , Imnt ,f rac ,uf rac, ivary ' Si02

2 0 0 ! mlmnt ,mipar ,mrpar #4

1 3 0 6 0 02 1 ! j , Imnt ,f rac ,uf rac , ivary - Si

2 5 0 .5 0 02 1 ! j , Imnt ,f rac ,u.f rac , ivary - Si02

28
The uncertainties of the volume fractions of the transition region have been subjectivelyset at 0.02, and the volume fractions of the transition region have been selected to undergo

optimization. Again, because the volume fractions must sum to one, the number of volume fractions that may be selected to undergo variation may be set equal to 0, 2, or more

than 2. Although the line entries of the constituent media are not necessarily ordered, the

constituent media must be distinct. This is check-tested; a violation stops the program.

Regarding the comments that are appended onto each line of data, the word 'Imnt' is a mnemonic for elements or constituents. Lastly, since the format simply tabulates distinct

effective media, ordering of the distinct effective media is not important here.

4.2.6 Ambients and External Parameters

The ambient region refers to that spatial region that lies external to the layered structure

of the sample, i.e., the (layers/substrate) system. Sometimes, it is necessary to analyze ellipsometric measurements involving a number of distinct samples and ambients. In the Table of Contents, it may be seen that the database contains at least two distinct constituent

media which are often used as ambients, i.e., vacuum and air.

Of course, the database may be enlarged to include nearly any number of lossless, isotropic,

and homogeneous media. Enlarging the database is rather straightforward, because the

user need only follow the conventions that are assumed by subroutine DIELMN, see section 6.4.4.

Because the analysis of a sample may involve more than one ambient, it is convenient to

construct an indexed listing of effective media that are used as ambients. Further, in the

event that a distinct (ambient/sample) system depends upon some independent or externa] parameter, e.g., an externally applied perturbation or stress field, this information may

be included in the indexed listing as well. The indexed listing defines an ambient as being

that composite entity which associates a distinct effective medium and two distinct sets of

supplementary parameters that characterize the applied perturbation.

The indexed listing of the ambients simply provides another opportunity for assigning supplementary parameters to the effective or constituent media of the system configuration.

The general format is given by the following form:

29
^^ambients

(i-1)

Pi,i

mij Pl,mij

PR,i

PR,i

rriRj PR,mnj

(i+1)

^^ambients

where

mambients is the number of distinct ambients which involves associating distinct effective

media with subsets of supplementary parameters for all configurations of the

(ambient/sample) system. From sections 4.1.2 and 6.1.2,

(1 < mambients < nbient).

j is an integer that indexes the distinct ambients, i.e., (j — 1,2, .. . , mambients)-

ij is an integer index label of the appropriate effective {not constituent) medium

that is associated with the j^^ ambient. From section 4.2.5, (1 < ij < mmedia)'

mij is the number of integer supplementary parameters that are associated with the

j**^ ambient.

30
mRj is the number of floating-point supplementary parameters that are associated

with the j^^ ambient.

ij is an integer that locally indexes the integer supplementary parameters that are associated with the j*^ ambient, i.e., [i^ = 1,2, .. . ,mjj). For convenience and

readability, the subscript j on i is suppressed here, as well as in the following set

of entries.

pi^i is the integer index label of the appropriate integer supplementary parameter

that is associated with the ij^^ integer supplementary parameter of the j^^ ambient, i.e., (1 < pi,i < TTT'i)i where mj was presented earlier in section 4.2.3.

in is an integer that locally indexes the floating-point supplementary parameters

that are associated with the ^^'^'^ ambient, i.e., [i^ — 1,2, ... ^rriRj).

PR^i is the integer index label of the appropriate floating-point supplementary parameter that is associated with the Zr'^ floating-point supplementary parameter

of the j'^ ambient, i.e., (1 < pR,i < ttir), where niR was presented earlier in

section 4.2.4.

Again, regarding the above entries that are capped with a tilde, it is important to note

that these entries refer to index labels local to the appropriate subset of data, i.e., supplementary parameters and effective media presented in sections 4.2.3, 4.2.4, and 4.2.5.

To demonstrate this format, it is convenient to build upon the development of the previous

example. The format for the ambient configurations could then be as the following:

! mbient ' ntunber of ambients

! j , imix ,mipar ,mrpar ' air

because no supplementary parameters have been used thus far; the worked examples in

sections 4.2.3 and 4.2.4 assumed that {mi = mR — 0).

1 110 0

31
4.2.7 Sample Characterization or Gonstruction

Now that the basic model parameters have been presented, it is possible to discuss the

method of constructing a sample by characterizing each region of its layered structure in

terms of the basic parameters presented heretofore. From section 4.1.2, the program is

able to analyze a number of distinct samples collectively. Here, the samples become indexed according to the order in which they are entered for characterization in the input

file. Furthermore, this ordering of samples will also govern how the measurement data are

to be entered in the file; such is discussed later in the next subsection.

First, it is important to discuss the meaning of the word sample. A sample is defined as being that material structure of the (layers/substrate) system that is subjected to ellipsometric measurement. The business of characterizing a sample refers to that procedure of

index-labeling which associates the distinct spatial regions of the (layers/substrate) system

with the appropriate sets of model parameters, so that the direct or forward problem may

be completely defined, i.e., apart from specifying the ambient. Since measurements on a sample may involve more than one ambient, the business of associating samples and ambients is deferred until the next subsection. Here, the samples are constructed or assembled

in a layer-by-layer fashion. For each spatial region, one must specify an effective medium,

and if the region is a layer, one must also specify a thickness.

Recall, the inverse problem is formulated as a least-squares problem. This involves a series

of linear algebra problems. Consequently, the matrices associated with individual samples

may be combined so that several samples may be analyzed together. Here, the program is

said to have a multiple-sample capability. The maximum number of samples that may be

analyzed together is set by the parameter nsampl, as mentioned in section 4.1.2.

Each previous subsection presented a format for inputting parameters. Each model parameter has a distinct index label; each line entry following the first line is usually indexed.

Here, those index labels are used for specifying the configuration of the (layers/substrate)

system. The sample is characterized by an ordered set of integers that point into those arrays which store the numerical values of the parameters.

The general format for specifying the layered structure of the samples is of the following

form:

32
^^samples

^K'^sftmplea

£1 Zi

substrate,j

where

'^samples IS the number of distinct material samples that are subjected to ellipsometric

measurement. From section 4.1.2, (1 < msampies ^ nsampl).

j is an integer that indexes the distinct samples, i.e., (j = 1,2, .. . , msampies)-

m^j is the number of layers that lie atop the substrate of the j*^ sample.

From section 4.1.2, (0 < rrizj < nf ilms).

i is an integer that locally indexes the distinct layers of the j*'^ sample, i.e.,

(z = 1,2,... ,m2j). The layer adjacent to the ambient is indexed 1; the layer

adjacent to the substrate is indexed nizj. For convenience and readability, the

subscript j on i is suppressed here, as well as in the following set of entries.

Ei is the integer index label of the appropriate effective medium that is associated

with the i^^ layer of the j*^ sample. From section 4.2.5, (1 < ei < rn,inedia)-

Zi is the integer index label of the appropriate thickness that is associated with the

i^^ layer of the j*^ sample. From section 4.2.2, (1 < Zi < m^).

33
Again, regarding the above entries that are capped with a tilde, it is important to note

that these entries refer to index labels local to the appropriate subset of data, i.e., effective

media and thicknesses presented in sections 4.2.5 and 4.2.2, respectively.

To demonstrate this format, it is convenient to build upon the development of the previous example. Again, the sample involved the form: (oxide / oxide + silicon / silicon

substrate). The format for this sample configuration would then be as the following:

1 ! msampl ' number of samples analyzed

2 ! mfilm ' number of layers on sample #1

13 1 ! j.imiXjiz ' Si02 , top layer

2 4 2 ! j.imix.iz ' Si02+Si, transition region

3 2 ! j.imix ' Si , substrate

No mention is made regarding the ambient; this is discussed in the next subsection.

4.2.8 Measurement Data (A,'0)

The measurement data of ellipsometric angles are organized in the same fashion as was

presented in the previous subsection, i.e., sample by sample. Regarding measurements,

both the sample and ambient must be specified. To characterize the (ambient /sample)

system, a similar scheme of index labels is assumed again.

For convenience, the integers are ordered in a format compatible with the collection algorithm of the laboratory instrumentation. The ellipsometric measurement data are ordered

into a data structure that follows the FORTRAN indexing convention for multiply-indexed

arrays. That data structure is of the following form:

[angles &: wavelengths, repeats, ambients, samples)

where:

samples indexes the set of distinct samples that were subjected to ellipsometric

measurement;

ambients indexes the set of distinct ambients used during measurement involving a given sample;

34
repeats indexes the sets of distinct repeats of multiple-angle of incidence and multiple

optical frequency measurements performed on a system involving a given

ambient and sample; and

angles &: wavelengths indexes the set of distinct angles of incidence and optical

frequencies (or wavelengths) used during measurement on a system of given

repeat index, ambient, and sample.

This form suggests that the measurement data (A,-;/') are grouped and ordered according to the following structure. The measurement data are grouped sample by sample. For

each sample, they are grouped ambient by ambient. For each ambient, they are grouped

by their repeat index label. For each repeat index, they are indexed by the source variables, i.e., the angle of incidence and the optical frequency (or wavelength in vacuum or corresponding photon energy) of the light. Ordering aiifong the incident angles or among

the optical frequencies is not important, i.e., apart from that associated with the input

format. Hence, the forward problem becomes completely defined. The repeats simply partition the measurement data, e.g., distinguishing measurement data collected on different

days.

To implement the above organization and thereby characterize the (ambient/sample) system, the program reads a tabulated set of integers line by line. Since the program assumes

that data are entered sample by sample, one need only consider the data for one sample,

e.g., sample s. The total set of input data of all samples is constructed simply by concatenating the individual data sets of each sample. Now, consider the data that are associated

with sample s. The first line of data is the number of ambients, niasLet a, index the set of distinct ambients on sample s. Let be the index label of the appropriate ambient that is associated with the a^*^ ambient on sample s. Let rriras be the

number of sets of repeat measurements of (A,-0) involving the a^*^ ambient on sample s.

Let Tas index these sets of repeat measurements. Heading the set of data associated with

the a,^^ ambient would be a line that contains two integers, rriras and a,.

The ordering infers that is sequenced through its range before the indexing of is

stepped; i.e., repeated sets of measurements on a sample are collected together before one

considers changing the ambient.

35
Since the (repeat, ambient, sample) structure is an ordered form, the structure is completely specified by the aforementioned indices. Next, consider the data of the ras*'^ repeat

set. Heading this set of data would be a line that contains one integer, the number of measurements of (A, -!/;). It is denoted by m^^^raa- For convenience, it is not necessary to include the indexing label Vas on the same line.

This is followed by the measurement data of ellipsometric angles. They are entered into

the data file line by line. Each set of measurements involves two lines of data, one being

for the source variables (A,^) and measured ellipsometric angles [A,7p), and the other being for the associated uncertainties. The format is of the following form:

m\<l>,Tas l{h Ai, Ai, (f)i I 8Xi, S(f)i, SAi, S(f)i)ras

where:

m'\4>,ras is the total number of measurements of ellipsometric angles [A,ip) involving

multiple angles of incidence and multiple optical frequencies that involve the

Tas^^ repeat set of measurements, i.e., (vas = 1,2, . ,mras), and the a^*^ ambient of sample i.e., (a^ = 1,2,..., nias). From sections 4.1.2, 6.1.2, and 6.2.3,

(1 < m\4)^Tas ^ nwaves*nanglx < nexpts).

i is an integer that locally indexes the multiple- angle of incidence and multipleoptical frequency measurement data consecutively with unit increments, i.e.,

(z = 1,2, . . . ,mA,^,raa)-

\i is a floating-point source parameter that may be of either sign depending upon

how one chooses to characterize the optical frequency of light. When the value

is negative, the unit of measure is nanometers. When the value is positive, the

unit of measure is electron-volts. The program check-tests for either

(-1240 < \i < -200) or (1.0 < < 6.0).

SXi is the uncertainty that is assigned to the numerical value of A^.

<f>i is the angle of incidence measured in degrees, where a value of zero relates to

that of normal incidence, i.e., (0 < < 90).

S(f)i is the uncertainty that is assigned to the numerical value of ^j.

36
Ai is an ellipsometric angle measured in degrees, i.e., (0 < Ai < 360), assuming the

Nebraska convention, i.e., i2p_jy from section 2.3 of [3].

^A,- is the uncertainty that is assigned to the numerical value of A^.

•01' is an ellipsometric angle measured in degrees, i.e., (0 < -^i ^ 90)-

Sil^i is the uncertainty that is assigned to the numerical value of ^i.

Within any set of mx^^^aB measurement data, ordering of optical frequencies or angles of

incidence is not important. Thus, regarding sample 5, the general format is given by the

following form:

'rriraa

'ITT'X4>,ras

i Ai <f)i Ai Vi

6Xi 6(pi 6Ai 6i/ji

Again, to construct the final set of data for all of the samples, one simply concatenates the

data for each individual sample, i.e., without any intervening lines of demarcation.

To demonstrate this format, let the measurements be those found by solving the forward

problem for the (ambient/sample) configuration that was developed in the previous ex- amples. Hence, these measurements would be exact. Let the measurements involve a grid

of optical frequencies, e.g., where the associated photon energies are between 1.5 to 6.0

eV in steps of 0.5 eV, for one angle of incidence, e.g., 70 deg. Let ^A, 6(f), 6A, and Sijj be

given by 0.1, 0.01, 0.01, and 0.01 deg, respectively. Although these uncertainties depend

on the instrumentation, the values are chosen subjectively for convenience. The format

could then be as the following:

37
mbion ' number of ambients on sample #1

1 mrpeat , imbien

10 j moxpt ' number of measurements

50000F+00 7 OOOOOF+01 8 .04309E+01 3 08875E+01 (i.E.a. d .D

1 OOOOOE-01 1 OOOOOE-02 1 ,00000E-02 1 OOOOOE-02 (uncertainty

2 2 . OOOOOE+00 7 OOOOOE+01 7 97129E+01 4 31275E+01 vi.E.a. d.i3

1 OOOOOE-01 OOOOOE-02 1 OOOOOE-02 1 OOOOOE-02 ( unc e rt aint y

3 2 BOOOOE+OO 7 OOOOOE+01 1 02227E+02 6 93018E+01 (i.E.a. d.T3 OOOOOE-01 OOOOOE-02 1 OOOOOE-02 1 OOOOOE-02 (uncertainty

4 3 OOOOOE+OO 7 OOOOOE+01 2 50415E+02 6 09989E+01 (i.E.a. d .D OOOOOE-01 1 OOOOOE-02 1 OOOOOE-02 1 OOOOOE-02 (uncertainty

B 3 50000E+00 7 OOOOOE+01 2 62427E+02 4 00376E+01 (i.E.a. d .TJ OOOOOE-01 OOOOOF-0? 1 OOOOOE-02 1 OOOOOE-02 (loncertainty

g 4 OOOOOE+00 7 OOCOOE+Ol 2 47313E+02 3 31054E+01 (i.E.a, d,p

1 OOOOOE-01 1 OOOOOE-02 1 OOOOOE-02 1 OOOOOE-02 (uncertainty

7 4 50000E+00 7 OOOOOE+01 1 92800E+02 3 34557E+01 (i,E,a, d.p

1 OOOOOE-01 1 OOOOOE-02 1 OOOOOE-02 1 OOOOOE-02 (uncertainty

8 6 OOOOOE+OO 7 OOOOOE+01 1 24499E+02 3 21867E+01 (i.E.a, d.p

1 OOOOOE-01 1 OOOOOE-02 1 OOOOOE-02 1 OOOOOE-02 (uncertainty

9 5 50000E+00 7 OOOOOE+01 8 77637E+01 3 66717E+01 (i.E.a, d,p

1 OOOOOE-01 1 OOOOOE-02 1 OOOOOE-02 1 OOOOOE-02 (imcertainty

10 6 OOOOOE+OO 7 OOOOOE+01 7 10687E+01 4 18238E+01 (i.E.a, d.p

1 OOOOOE-01 1 OOOOOE-02 1 00000E~02 1 OOOOOE-02 (uncertainty

Incidentally, these data are retained in arrays that are located in the named common area, exprmt, see section 6.1.4.

4.2.9 Combining

In general, the input data are composed of two kinds of information, those which define

the system model and associated measurements, and those which define the options for

processing these data. Thus far, only the first kind has been presented, and they are con- tained in the input file X.DAT. The input data file is constructed by simply combining the

formats in the order that they were presented. In general, no intervening blank lines are

allowed. Again, those lines of connected hyphens are merely conveniences; the intent is

that of easing the readability of the input file.

Combining the examples of the formats presented thus far, and indexing the lines for convenience, i.e., the input data file would not actually contain such indexing, the input data

file X.DAT would become:

38
1

23

4

56

7

8

010

111213

14

151617

18

19

20

21222324

252627

28

2930

31

3233

drbl : [d.ata_bases] w

.

2 100.0

2.0

2.0

2.0

mfilmz ' thicknesses /(i.z.zu.ivary)

i,z,zu,ivary ' top layer, Si02

i,z,2u,ivary ' bottom layer, Si02+Si

! mipars / (i,ip)

! mrpars / (i,rp,up,ivary)

"2 1.0 0.0

0

3 1.0 0.0

5 1.0 0.0

0

3 0.5 0.02 1 5 0.5 0.02 1

mixtures ' number of effective media

mlmnt .mipar ,mrpar #1

j ,lmnt ,f rac,uf racjivary

mlmnt ,mipar ,mrpar #2

j

, Imnt ,f rac ,uf rac , ivary

mlmnt ,mipar,mrpar #3

j ,lmnt ,f rac, ufrac, ivary

mlmnt ,mipar,mrpar #4

j

, Imnt ,f rac ,uf rac , ivary

j

, Imnt , f rac ,uf rac , ivary

air

Si

Si02

Si

Si02

10 0

! mbient ' number of ambients

! j ,imix,mipar,mrpar

3 1 4 2

2

msEunpl * number of samples analyzed

mfilm " number of layers on sample #1

jjimix.iz ' Si02 , top layer

jjimix.iz ' Si02+Si, transition region

j.imix ' Si , substrate

1 10

mbien ' number of ambients on sample #1

mrpeat , imbien

mexpt ' number of measurements

34 1 1 .50000E+00 7 .OOOOOE+01 8 .04309E+01 3 .08875E+01 (i,E,a, d.p)

35 1 ,00000E-01 1 .OOOOOE-02 1 .OOOOOE-02 1 .OOOOOE-02 (uncertainty)

36 2 2 .OOOOOE+00 7 OOOOOE+01 7 97129E+01 4 .31275E+01 (i.E.a, d.p)

37 1 .OOOOOE-01 1 OOOOOE-02 1 OOOOOE-02 1 .OOOOOE-02 (uncertainty)

38 3 2 BOOOOE+00 7 OOOOOE+01 1 02227E+02 6 .93018E+01 (i.E.a, d.p)

39 1 OOOOOE-01 1 OOOOOE-02 1 OOOOOE-02 1 .OOOOOE-02 (uncertainty)

40 4 3 OOOOOE+00 7 OOOOOE+01 2 50415E+02 6 09989E+01 (i.E.a, d,p)

41 1 OOOOOE-01 1 OOOOOE-02 1 OOOOOE-02 1 OOOOOE-02 (uncertainty)

42 B 3 50000E+00 7 OOOOOE+01 2 62427E+02 4 00376E+01 (i,E,a, d.p)

43 1 OOOOOE-01 1 OOOOOE-02 1 OOOOOE-02 1 OOOOOE-02 (uncertainty)

44 6 4 OOOOOE+00 7 OOOOOE+01 2 47313E+02 3 31054E+01 (i.E.a. d.p)

45 1 OOOOOE-01 1 OOOOOE-02 1 OOOOOE-02 1 OOOOOE-02 (uncertainty)

46 7 4 50000E+00 7 OOOOOE+01 1 92800E+02 3 34557E+01 (i,E,a, d.p)

47 1 OOOOOE-01 1 OOOOOE-02 1 OOOOOE-02 1 OOOOOE-02 (uncertainty)

48 8 5 OOOOOE+00 7 OOOOOE+01 1 24499E+02 3 21867E+01 (i.E.a. d.p)

49 1 OOOOOE-01 1 OOOOOE-02 1 OOOOOE-02 1 OOOOOE-02 (uncertainty)

50 9 5 50000E+00 7 OOOOOE+01 8 77637E+01 3 66717E+01 (i.E.a. d.p)

51 1 OOOOOE-01 1 OOOOOE-02 1 OOOOOE-02 1 OOOOOE-02 (uncertainty)

52 10 6 OOOOOE+00 7 OOOOOE+01 7 10687E+01 4 18238E+01 (i.E.a, d,p)

39
53 l.OOOOOE-01 l.OOOOOE-02 l.OOOOOE-02 l.OOOOOE-02 (imcertainty)

The example shows that three model parameters are selected for optimization; see lines

5, 19, and 20. These model parameters are associated with the transition region; see line

28. Hence, their numerical values will undergo variation if so requested from the command

options in file X.INN. The command options are discussed in the next section.

Further, regarding model parameters selected for optimization, their uncertainty values were set to nonzero values. This condition is check-tested upon input; if violated, the user would be so notified of the zero values. Setting the uncertainty value to a nonzero value

circumvents notification. The reason for the check-test is that the program uses the uncertainty value to limit the stepsize for updating the numerical value of the associated model

parameter. With an allowed maximum stepsize of zero, the program would be unable to

reduce the numerical value of the error expression, at least with respect to this model parameter. Being unable to justify further calculation, it would terminate. Such control is

useful in other situations as well, e.g., limiting the calculation to a single evaluation of the

residual or discerning relative contributions made to the uncertainty value of some 'vary'

model parameter. This may be accomplished by assigning a sufficiently small number to

the uncertainty value on input.

4.3 Command Options

As mentioned previously in section 4.1.1, the input data file X.INN contains the command

options that are necessary for directing control of the softv/are package. To direct the execution of the program, a menu-driven decision tree of command options is made available

to the user. Incidentally, the program reads file X.DAT before reading file X.INN. Examples of X.INN files are shown in section 5.

The first level of the tree involves a menu of three options. One option is selected per exe- cution of the program; the selection of that option is the first line of data in X.INN. After

reading this line of input data, the program branches to the appropriate subroutine. After leaving this subroutine at level one, the main program stops. Hence, the main program

does not loop back on itself to a condition where a request is made of the user to select

another option at level one. This branching at level one is performed by the MAIN program, see section 6.2.1.

40
Before reading the first line of data in file X.INN, the MAIN program writes to the output

file X.OUT the following menu of available options (at level one):

Enter: option

1, forward problems , plots, ... 2, search (vary)

3, search grid (vary)

Where the options at level one include:

1, requests the program to perform one of several simple tasks, such as providing a

set of tabulated output that is amenable for plotting or initiating a series of calculations of the direct or forward problem. No iterative calculations are considered,

i.e., no minimizations or inversions of the ellipsometric equations. This is discussed

further in section 4.3.1.

2, requests the program to invert the ellipsometric equations by performing a series of

unconstrained optimization calculations. The variation of numerical values of selected model parameters is generally unbounded. This is presented in section 4.3.2.

3, requests the program to invert the ellipsometric equations by performing a grid scan over a selected set of model parameters. A series of constrained optimization

calculations is initiated at each point of the grid of model parameters. This is discussed further in section 4.3.3.

These options provide the current range of utility of the program. Regarding the general

nature of the options, it may be expected that option one is more useful towards the beginning of analysis with plots, while options two and three form the primary tools during

analysis. Since the grid scans are constructed from a simple nesting of DO-loops, there

may be redundant calculations over parts of the parameter space whenever the 'vary' model

parameters are not common to every sample. These options are discussed further in the

following subsections. Here, it is convenient to simply follow the decision tree of options.

4.3.1 Forward Problems, Plots, ...

Following the selection of option '1' at level one, the program calls subroutine SCATOS,

thus entering level two, see section 6.2,4. This subroutine presents the user with another

41
set of options. The options specify the sets of source variables (A,^) that may be used in

the model calculations. The menu of options at level two is:

Enter: choice of incident (energies, angles)

1, measurement data, x.dat

2, grid scan.

where the options involve:

1, requests the program to use as source variables only those sets of ordered pairs

(A, ^) that are specified in the input file X.DAT for the measurement data of [A, if)).

2, requests the program to use as source variables only those sets of ordered pairs

(A,0) that lie on a two-dimensional grid that is specified later in a following promptrequest. The program prompts or requests information regarding the lower bound,

the upper bound, and the stepsize for each dimension of the grid.

The above two options form a branch in the decision tree of options. The next step in the

program involves specifying which field quantities are to be calculated and then written

to the output file X.PLOT. Thus, another set of options is presented to the user, i.e., level

three, but here the menu will depend upon which option is selected at level two. Hence,

there are two alternative sets of options at level three. They are presented in succession.

After selecting option '1' at level two, the menu of options at level three is:

Enter: choice of output suitable for:

1 , input dat a , x . dat

,

2, plotting (Delta, psi),

3, plotting (Delta, psi) deviations,

deviation = measurement - model.

4, plotting Igl ' rms deviation, unsealed,

on a ID or 2D grid of model parameters.

where

1, requests the program to calculate [A^ip) using {X,<p) as supplied by the file X.DAT,

The output is written to the plot file X.PLOT. The format is suitable for use in file X.DAT.

- 2, requests the program to calculate (A,-0) using {X,4>) as supplied by the file X.DAT.

42
The output is written to the plot file X.PLOT. The format is suitable for later

graphics.

3, requests the program to calculate and tabulate the deviations between the measure- ment data and that calculated by the model. The deviations are ordered similar to

that of the measurement data. The output is written to the plot file X.PLOT.

4, requests the program to initiate a grid scan of model parameters and evaluate the

error expression |g| for each point on the grid. For convenience, the grid may be either one or two dimensional; i.e., only one or two model parameters may undergo

variation. It is then necessary to specify the domain of the grid. The format for

specifying the grid of model parameters is presented later in section 4.3.3. But unlike that presented in section 4.3.3, there is no option regarding optimization here.

The output is written to file X.PLOT.

After selecting option '2' at level two, the menu of options at level three is:

Enter: choice of output suitable for:

1, dielectric function, media,

2, (Delta, psi), x.dat,

3, (Delta, psi), plotting,

4, d/db, b'(z,f,p),

5, d/da, angle of incidence,

6, d/dE, energy.

where

1, requests the program to calculate the dielectric function for an effective medium

that is specified in a later prompt-request from the program. The format is suitable

for later graphics.

2, requests the program to calculate {A,ip) for a grid of {X,(f>). The format is suitable

for use in file X.DAT.

3, requests the program to calculate (AjV') for a grid of (A,(?5>). The format is suitable

for later graphics.

4, requests the program to calculate partial derivatives of (A,V') with respect to one

of the model parameters, i.e., thickness, volume fraction, or supplementary parameter. Since volume fractions involve a linear constraint, the partial derivative with

43
respect to fj is calculated according to eq (10), where [k < j). Again, if the selection involves volume fractions, two volume fractions must be selected to undergo

variation, that which is associated with /j, as given by eq (10), is written to the file X.PLOT. The model parameter is selected by setting the (froz/vary) switch to '1'

in X.DAT. The unit of measure is degree per unit of the 'vary' model parameter.

5, request the program to calculate partial derivatives of (A,'0) with respect to the

angle of incidence, (f). The measure is unitless, i.e., degree per degree.

6, requests the program to calculate partial derivatives of (A,'0) with respect to the

photon energy of light. The unit of measure is degree per electron-volt.

Two things are yet unspecified; both are associated with the last set of options mentioned

immediately above. These are presented in succession.

The first is associated with option '1.' One must select or specify one of the effective media for evaluation on the grid of photon energies. Accordingly, the program prompts the

user with the following:

Enter: kmix ' effective medium of dielectric function

Here, one enters an integer for the index label of the appropriate effective medium, i.e,

(1 < kmix < mmedia) ^s discussed in section 4.2.5.

The second thing yet unspecified is the grid of source variables, the classical optical fre- quencies (or the wavelengths in vacuum or associated photon energies) and the angles of

incidence, i.e., (A,0). Since the grid is constructed from a set of nested DO-loops, one

specifies the grid by specifying three numerical values, i.e., the lower bound, the upper

bound, and the stepsize, for each axis or dimension of the grid. The program prompts the

user for each axis individually. These input values are check-tested, as appropriate. See

section 6.2.5, subroutine SCATOI.

The first prompt-request is the following:

Enter: range of incident energies (eV)

or: - wavelengths (nm)

Enter: evl, ev2, ev3

44
where evl is the lower bound, ev2 is the upper bound, and ev3 is the stepsize. Negative

values are associated with wavelength in units of nanometers, and positive values are asso- ciated with energy in units of electron-volts.

Following an answer to the above prompt, the program issues the second prompt-request:

Enter: range of incident angles (degrees)

Enter: anglel, angle2, angleS

where anglel is the lower bound, angle2 is the upper bound, and angleS is the stepsize.

Incidentally, the field quantities are written to the output file X.PLOT from either of two

subroutines, i.e., SCATOl or SCAT02, depending upon the set of ordered pairs (A,^) that

is selected at level two, i.e., input from measurements in X.DAT or some discrete grid of

values. Regarding these two subroutines, their use of suggestive names for variables, as

well as from the lines of comments that are enclosed within the various subroutines, it ought to be rather straightforward for the user to add his own selection of field quantities

to the program. This completes the list of options available to the user regarding calculations of the direct or forward problem and graphics.

4.3.2 Search (vary)

Following the selection of option '2' at level one, the main program calls the subroutine

SEEKOl to invert the ellipsometric equations, thus entering level two, see section 6.2.10.

This subroutine initiates and maintains the search for a minimum to the error expression

as an unconstrained optimization problem, as discussed in section 3.1. The (froz/vary)

switch specifies the model parameters which have numerical values that are undergoing

variation. At least one numerical value must undergo variation per measurement of (A,'0),

so that the associated rows in the Jacobian are not zero. Note that an iterative method

requires an initial solution. Here, the initial value solution is given by the initial input of

model parameters as presented in section 4.2. The problem is now completely defined; no

further specifications are necessary; no further menus need to be issued to the user.

Since the optimization algorithm is unconstrained, unphysical fixed-point solutions are

possible and likely during analyses. These pseudo solutions were discussed earlier in section 3.

45
The following presents a brief orientation regarding the internal organization of the subroutine SEEKOl. The organization is that for setting up an iterative loop. It calls subroutine ASMBL to construct the Jacobian matrix. It calls subroutine CGNL to solve for the

Newton step. It updates the numerical value of the selected model parameters and tests the rate of reduction of the error expression. The progress regarding the rate of reduction

is written to the output file, X.OUT. If the rate of reduction is sufficiently small to merit no further expenditure, it returns; otherwise, it continues iterating. Such calculations usually involve short durations of time, thus breakpointing is not necessary, and so it was not

incorporated into the routine.

Upon completion of the above exercises, the program reports its best fixed-point solution.

The deviations between the measurement data and that of the model are written to the

plot file, X.PLOT, using subroutine SCATOl.

Statistics regarding the deviations are provided by subroutine STAT22. It reports the statistical means, standard deviations, and the correlation coefficient of the deviations, i.e.,

g,. = A^,-AT and g,,i = - i^T,

which is distinct from eqs (12) and (13) from section 3.1. Here, the deviations involve no

scaling by the measurement uncertainties. The estimated mean for A is defined by

M

the estimated variance is defined by

i=l

where the square root estimates the standard deviation, the covariance is defined by

I M

{{9a - {9a)) {g^ - {g^.))) = 77 (S'A.i - {9a)) {9^,i - {9i>)) , i—l

and the correlation coefficient is defined by the ratio formed by the covariance divided by

the product of standard deviations of g^ - and g^^.

In regards to providing an analysis of sensitivities, here too, the Jacobian involves no row

scaling by the measurement uncertainties. Similarly, a scaling matrix S is then defined. A

46
correlation matrix, defined by J'^jj , is calculated by subroutine CORLAT. Being a symmetric matrix, only the upper triangle is reported. The output file reports the condition

number of this matrix. The diagonal elements of the scaling matrix are reported as well.

Such reports help identify which model parameters may be correlated, and aid the decision

process regarding the selection of frozen model parameters for a series of calculations.

Lastly, the output file reports the estimated uncertainties of the 'vary' model parameters

as calculated from eq (22) in section 3.2. Following these exercises, the program stops.

4.3.3 Search Grid (vary)

After the selection of option '3' at level one, the main program calls subroutine SCAN02

to invert the ellipsometric equations, thus entering level two, see section 6.2.9. This subroutine seeks to find a minimum to the error expression, as a constrained optimization

problem, by initiating a scan over a grid of numerical values associated with a selected

set of model parameters. Here, the (froz/vary) switch specifies the selection; the model

parameters contributing to the grid are those whose numerical values are selected to un- dergo variation. Since the grid is constructed from a single block of nested DO-loops, each

selected model parameter contributes one independent axis or dimension to the grid, i.e.,

a hyper-cube, apart from the special consideration that is necessary for the volume fractions. Note that efficient use of the grid occurs only when the selected model parameters

are common to all samples.

Each independent axis of the grid involves four items: the local index label for the model

parameter, the lower bound, the upper bound, and the stepsize. To provide this information to the program, it is convenient to follow the convention of DO-loop specification and

require that the input format be of the form:

Pi, P2, P3,

where ip refers to the local index label of the model parameter p, and pj refers to the

numerical value of the model parameter associated with the initial value, final value, and

stepsize, respectively.

To enter the DO-loop specification parameters, the parameters are entered in the same order that they occur in the file X.DAT. From section 4.2, the parameters are grouped and

ordered as follows: thicknesses, supplementary parameters, and then volume fractions.

47
Within each group, the model parameters are indexed locally. By adhering to this group

ordering and using only local indices, one is able to specify the necessary vary model parameters. Here, ip refers to the local index label as used in file X.DAT.

Note that while the effective media are indexed as ordered in file X.DAT, the volume fractions are indexed locally from within the effective medium, i.e., starting with one. Hence,

{ip = 2) could refer to the second volume fraction of any effective medium. This is checktested upon input for consistency.

Regarding volume fractions and eq (10) from section 2.3, it is assumed that k refers to the

smallest local index label among those selected to undergo variation for that particular effective medium. DO-loop specification parameters are not allowed for /fc, but are required

for those fj selected for optimization, i.e., {k<j).

In regard to these considerations, the program issues forth the following lines:

Scan a grid of model parameters: (z,p,f).

Grid info: DO-loop parameters

Grid info: i, initial, final, increment

For each point on the multidimensional grid of model parameters, the program is designed

to provide either one of two things. It may simply evaluate the residual at each grid point,

and then compare values of the residual over the entire grid. Here, the best solution yields

the smallest residual. The Jacobian is not calculated. Although small stepsizes are often

requested, this may be a relatively fast calculation.

Alternatively, the calculation may initiate a series of unconstrained optimization problems

using the Jacobian, except that the range of numerical values of the selected model parameters is restricted to remain within the bounds of the grid. At the conclusion of the

grid scan, the program reports its best fixed-point solution. The program also reports any

components of the solution that lie near the boundary of the selected grid. Solutions with

components at grid boundaries are, of course, grid dependent, and as such, further calculation is usually necessary, i.e., after the grid is moved or redefined. Again, the calculations

involve the Jacobian. Although large stepsizes are often requested, this may be a relatively

slow calculation.

In regard to these considerations, the program presents the following menu of options:

48
Enter: option regarding the grid scan:

0, no optimization, |g| only,

1, lull optimization, Jacobian.

The format convention for indicating the type of optimization is of the form:

where io is an integer with value 0 or 1, accordingly.

Since the grid specification includes the stepsize, the calculations may become very timeconsuming. For this reason, the program writes breakpoint information to the output

file X.SOUT at intervals of 15 cpu-minutes. This is discussed in section 4.1.1. The procedure for restarting a previously interrupted calculation is rather straightforward. One

need merely append the contents of X.SOUT onto the end of the input data file X.INN,

without any intervening blank lines. Upon starting any grid scan calculation, the program will attempt to read a set of breakpoint information. If restarting is not intended

by the user, the input data file ought to be absent of excess lines. The program does initiate some measure of check-testing regarding the breakpoint information. Anything deemed

irregular in the input file should inhibit the chances of erroneous restarts, but it is good

practice to truncate the input data file with either an end-of-fUe condition or some other

delimiter, e.g., a short line of connected equal signs.

Again, as presented in the previous subsection, i.e., section 4.3.2, the program reports a few basic statistics regarding deviations of the fit between the measurement data and that

of the model, as well as the estimated uncertainties in the model parameters.

49
5. Worked Examples

The following subsections present worked examples using the program. Each subsection

presents an example involving one selection from among the set of available top level options. A brief orientation is given regarding the purpose of each calculation. Since the program outputs a journal listing of the input data, only the output file needs to be presented

in the following subsections. Again, an example of the input file X.DAT may be found in

section 4.2.9. For convenience, the input file X.INN is included as well. The input/output

files are shown as indexed for convenience.

5.1 Forward Problems, Plots, ...

This option is discussed in sections 4.3 and 4.3.1. Consider again the example that is presented in section 4.2.9. The input file X.DAT contains both the characterization of the

sample and the measurement data of ellipsometric angles. For the sake of demonstration,

suppose that only the characterization of the sample is known. Let the exercise here be

that of generating a set of measurement data. A suitable input file X.DAT may be as follows:

1

. 23

4

567

8

910

111213

14

151617

18

1920

212223

24

25

drbl : [data_bases] w

.

100.0

2.0

2.0

2.0

mfilmz ' thicknesses /(i ,z ,2U, ivary)

i,z,zu,ivary ' top layer, Si02

i.ZjZu, ivary ' bottom layer, Si02+Si

4

10 0

1 2 1.0 0.0 0 10 0

1 3 1.0 0.0 0 10 0

1 5 1.0 0.0 0

2 0 0

1 3 0.5 0.02 1 2 5 0.5 0.02 1 10 0

! mipars / (i,ip)

! mrpars / (i,rp, up, ivary)

mixtures ' number of effective media

mlrant ,mipar ,mrpar #1

j

, Imnt ,f rac ,uf rac , ivary

mimnt ,mipar ,mrpar #2

j

, Imnt , f r ac ,uf rac , ivary

mlmnt , mipar , mrpar #3

j

, Imnt ,f rac ,uf rac , ivary

mlmnt , mipar , mrpar #4

j

, Imnt ,f rac ,uf rac , ivary

j ,lmnt ,f rac ,uf rac, ivary

air

Si

Si02

Si

Si02

! mbient ' number of ambient

s

! J

, imix , mipar , mrpar axr

! msampl ' number of samples analyzed

50
2627

28

2930

313233

34

35

13 1 2 4 2

3 2

1.5

0.1

mfilm ' number of layers on sample #1

j.imix.iz ' Si02 , top layer

j.imix.iz ' SiQ2+Si, transition region

j.imix ' Si , substrate

70.0

0.01

! mbien ' number of ambients on sample #1

! mrpeat , imbien

i mexpt ' number of measurements

0.0 0.0 (i.E.a. d.p)

0.01 0.01 (uncertainty)

Note, the above last two lines involve pseudo measurement data. Also, only two volume

fractions are shown selected for variation, i.e., lines 19 and 20.. Due to the constraint among

volume fractions for an effective medium, only one variable is subject to optimization, i.e.,

the oxide. This is mentioned in section 4.3.1 in option 4 near the bottom of page 43.

Suppose now that measurement data are requested for optical frequencies which corre- spond to energies between 1.5 and 6.0 eV with stepsize of 0.5 eV. Further, let this involve

only one angle of incidence, e.g., 70 deg. A suitable input file X.INN may be as follows:

1 1

2 2

3 2

4 1.5

5 70.

6.0

70.

0.5

0.0

forward problems, plots, ... grid scan

(Delta, psi), x.dat

grid energy (eV)

grid angle of incidence (degrees)

Given the above two input files, the program generates two output files. The output file X.OUT contains a journal listing of the program's activity. The output file X.OUT is

given below.

1

23

4

56

7

8

910

11

1213

14

15

Enter: sub-directory for constituent media

sub-directory ' drbl : Cdata_bases] w

.

Enter

:

2 Enter:

1 100.000

2 2.000

mfilmz ' number of distinct widths

mfilmz ' number of distinct widths

i ,z ,zu, ivary

2.000 0 i,z,2U, ivary

2.000 0 i,z,2u, ivary

Enter: mipars ' number of parameters (integer)

0 mipars ' number of parameters (integer)

51
1617

18

19

20

2122

23

24

252627

28

2930

3132

33

34

3536

37

38

39

40

414243

44

454647

48

49

50

5152S3

54

555657

58

59eo

61626364

656667

68

Enter: mrpars ' number of parameters (floating-point)

0 mrpars ' number of parameters (floating-point)

Enter:

4

Enter

1 0 Enter:

1 2

Enter

1 0 Enter

1 3

Enter:

1 0 Enter

1 5

Enter:

2 0 Enter:

1 3 2 5

mmixtr ' number of distinct mixtures

mmixtr ' number of distinct mixtures

mlmnt

,

0 mlmnt

,

mipar, mrpar

mipar, mrpar

1.00000 0.00000

mlmnt

,

0 mlmnt

,

mipar, mrpar

mipar, mrpar

1.00000 0.00000

mlmnt

,

0 mlmnt

mipar, mrpar

mipar, mrpar

1.00000 0.00000

mlmnt

,

0 mlmnt

O.BOOOO

0.50000

mipar, mrpar

mipar, mrpar

0.02000 1 0.02000 1

(mix # 1)

j, Imnt , frac, ufrac, ivary

j, Imnt, frac, ufrac, ivary

(mix # 2)

j, Imnt, frac, ufrac, ivary

j, Imnt, frac, uirac, ivary

(mix # 3)

j, Imnt, frac, ufrac, ivary

j, Imnt, frac, ufrac, ivary

(mix •# 4)

j, Imnt, frac, ufrac, ivary

j, Imnt, frac, ufrac, ivary

j, Imnt, frac, ufrac, ivary

Enter: mbient ' number of distinct ambients

1 mbient ' number of distinct ambients

Enter: j, imix, mipar, mrpar

1 1 0 0 j, imix, mipar, mrpar

Enter:

1

Enter:

2 Enter

12

3

msampl ' number of samples

msampl ' number of samples

mfilm ' number of films on sample # 1 mfilm ' number of films on sample # 1 j, imix, iwidth. (film/substrate)

1 j, imix, iwidth

2 j, imix, iwidth

j , imix

Enter: mbien ' number of ambients on sample # 1 1 mbien ' number of ambients on sample # 1 Enter: mrpeat, imbien

1 1 mrpeat, imbien

Enter: mexpt ' niimber of measurement data

1 mexpt ' number of measurement data

Enter: j, wavln (nm) , angli , delta, psi (degree)

52
69 wavlnu , anglu.deltu.psiu

70

71 1 l.BOO 70.000 0.000 0.000 ( j , wavln.angli , delta, psi ) 72 0.100 0.010 0.010 0.010 ( wavlu.anglu, deltu,psiu)

73

74

75 Enter: option

76 1, forward problems , plots, ...

77 2, search (vary)

78 3, search grid (vary)

79 option =1

80

81

82 Enter: choice of incident (energies, angles)

83 1, measurement data, x.dat

84 2, grid scan.

85 choice = 2

8687 Enter: choice of output suitable for:

88 1, dielectric function, media,

89 2, (Delta, psi), x.dat,

90 3, (Delta, psi), plotting,

01 4, d/db, b'(z,f,p),

92 5, d/da, angle of incidence,

93 6, d/dE, energy.

94 choice = 2

95

96 Enter: range of incident energies (eV)

97 or: - wavelengths (nm)

98 Enter: evl , ev2, ev3

99 1.5000 6.0000 0.5000 energy (eV)

100

101 Enter: range of incident angles (degrees)

102 Enter: anglel, angle2, emgleS

103 70.0000 70.0000 0.0000 al,a2,a3

104

105 Imnt ' 2, filename = air

106 Imnt ' B, filename = Si_02g

107 Imnt ' 3, filename = Si

108

109 elapsed cpu-time = 37 centi-seconds

110 + 1 seconds

Again, three constituent media are used in these calculations, and 'imnt' is a mnemonic

for elements or constituents. Regarding the constituent media of air, crystalline silicon,

and amorphous silicon dioxide, their index labels are given by 2, 3, and 5, respectively.

This is shown above on lines 105 to 107.

The output file X.PLOT contains the requested set of measurement data of ellipsometric

53
angles, [A^ip). The output file X.PLOT is given below.

1 1 msampl

2 1 mbien

3 11 mrpeat , imbien

4 10 mexpt ' measurements

5 1 1 bOOOOE+OO 7 0 04309E+01 3

A O O "7 r" W 1 A4 0887bE+01 (i.E.a, d,p;

6 1 OOOOOE-01 1 1 OOOOOE-02 1 AAAAAT A^ OOOOOE-02 (uncertainty]

7 2 2 OOOOOE+00 f AAAnnT7a.A'! f 97129E+01 4 3127BE+01 (i.E.a, d,p;

8 1 00000E~01 ijL OOOOOE-02 1 AAAAAT? AA OOOOOE-02 (uncertainty

J

9 3 2 bOOOOE+00 7f i1 A A O O 'y "D lAA 0222 r E+02 6

A*3A4 OT?_lA4 93OI0E+OI (i,E,a, d,p;

10 1 OOOOOE-01 1 AAAAAT? AA OOOOOE-02 1 AAAAAT7 AA OOOOOE-02 (uncertainty]

11 4 3 OOOOOE+00 7f AAAAAT?a.A1 CA/I * t"T^ 1 AA b041bE+02 6 A A A 0 A T? 1 A4 09989E+01 (i.E.a, d.p]

12 1 OOOOOE-01 1X A A AAAV_AO OOOOOE-02 1 OOOOOE-02 (uncertainty]

13 b

oo bOOOOb+00 7 OOOOOE+01 2 6242 f r.+02 AAO'yCfj^A^ 0037dE+01 (I.E.a. d.p,

14 1 OOOOOE-01 1 OOOOOE-02 1 OOOOOE-02 1 OOOOOE-02 (uncertainty]

15 6 4 OOOOOE+00 7 OOOOOE+Ol 2 47313E+02 3 31054E+01 (i.E.a. d.p]

16 1 OOOOOE-01 1 OOOOOE-02 1 OOOOOE-02 1 OOOOOE-02 (uncertainty]

17 7 4 50000E+00 7 OOOOOE+01 1 92800E+02 3 34557E+01 (i.E.a. d.p]

18 1 OOOOOE-01 1 OOOOOE-02 1 OOOOOE-02 1 OOOOOE-02 (uncertainty]

19 8 5 OOOOOE+00 7 OOOOOE+Ol 1 24499E+02 3 21867E+01 (i.E.a, d.p]

20 1 .OOOOOE-01 1 .OOOOOE-02 1 OOOOOE-02 1 OOOOOE-02 (uncertainty]

21 9 6 .BOOOOE+OO 7 .OOOOOE+Ol 8 .77637E+01 3 66717E+01 (i.E.a, d.p]

22 1 .OOOOOE-01 1 .OOOOOE-02 1 .OOOOOE-02 1 OOOOOE-02 (uncertainty]

23 10 6 .OOOOOE+00 7 .OOOOOE+Ol 7 10687E+01 4 18238E+01 (i.E.a, d.p]

24 1 .OOOOOE-01 1 .00000E~02 1 .OOOOOE-02 1 OOOOOE-02 (uncertainty]

The data in file X.PLOT may then be inserted into file X.DAT, i.e., replacing the previ ous pseudo measurement data, see sections 4.2.8 and 4.2.9. This concludes one method

procedure that may be used for generating model measurement data.

54
5.2 Search (vary)

This option is discussed in sections 4.3 and 4.3.2 regarding the inverse problem. Suppose

now that one is given the ellipsometric measurement data. For convenience, let the measurements be those presented in section 5.1. Since the inverse problem involves determining the model parameters from the measurements, let the initial solution be close to the

true solution. Regarding the transition region of the sample, let the volume fractions be

displaced from their correct values. Let the volume fraction for. the silicon be judiciously

set to 0.7, see line 19 below.

Further, let only one variable be subjected to optimization, and let it involve only the volume fractions of the transition region. The purpose here is to show the rate of convergence

of the program. Attention is directed less toward optimality of iterations than that which

is necessary to follow convergence. Again, the measurement data are exact for the correct

model parameters, the system is nicely overdetermined, and the correct solution is found.

The input file X.DAT is given below:

1 dxbl : Cdata_bases] w.

23 2 ! mfilmz ' thicknesses /(i.z.zu.ivary)

4 1 100.0 2.0 0 ! i,z,zu,ivary ' top layer, Si02

5 2 2.0 2.0 0 ! i ,z .zu.ivary ' bottom layer, Si02+Si

6

7 0 ! mipars / (i,ip)

8

9 0 ! mrpars / (i,rp,up,ivary)

10

11 4 ! mixtures ' number of effective media

12 1 0 0 ! mlmnt ,mipar ,mrpar #1

13 121.00. 0 0 ! j ,lmnt ,f rac.ufrac.ivary ' air

14 1 0 0 ! mlmnt ,mipar,mrpar #2

15 131. 00. 0 0 ! j ,lmnt ,f rac ,uf rac.ivary ' Si

16 1 0 0 ! mlmnt ,mipar ,mrpar #3

17 IBI.00.0 0 ! j ,lmnt ,f rac ,uf rac,ivary ' Si02

18 2 0 0 ! mlmnt ,mipar,mrpar #4

19 1 3 0.7 0.02 1 ! j ,lmnt ,f rac, ufrac.ivary ' Si

20 2 5 0.3 0.02 1 ! j ,lmnt,frac,ufrac,ivary ' Si02

2122 1 ! mbient ' number of eunbients

23 1 1 0 0 ! j ,imix,mipar ,mrpar ' air

24

25 1 ! msampl ' number of samples analyzed

26 2 ! mfilm ' number of layers on sample #1

27 1 3 1 ! j.imix.iz ' Si02 , top layer

28 2 4 2 ! j.imix.iz ' Si02+Si, transition region

55
2930

31

3 2 j j .imix ' Si substrat®

1 ! mbien ' number of ambient s on sample #1

32 1 1 mrpeat , imbien

33 10 mexpt ' mimber of measurements

34 1 1 BOOOOE+00 7 OOOOOE+01 8 04309E+01 3 08875E+01 [i,E,a, d.,p)

35 1 OOOOOE-01 1 OOOOOE-02 1 OOOOOE-02 1 OOOOOE-02 uncertainty)

36 2 2 OOOOOE+00 7 OOOOOE+Ol 7

A*T4 AAT" 1 A-* 97129E+01 4^< A'yr""R 1 A< 3127bE+01 [i,E,a, d.p)

37 1 OOOOOE-01 1 OOOOOE-02 1 OOOOOE-02 1 OOOOOE-02 [uncertainty)

38 3 2 50QO0E+0O 7 OOOOOE+Ol 1 02227E+02 6

A>^Ai* ftT* f A^ 93018E+01 [i,E,a, d,p)

39 1 OOOOOE-01 1 OOOOOE-02 1 AAAAAT' A'^ OOOOOE-02 1 AAAAAW A^ OOOOOE-02 [uncertainty)

40 4 3 OOOOOE+OO 7 2 50415E+02 6 09989E+01 ,i,E,a, d,p)

41 1 OOOOOE-01 1 AAAAAT7 A*^ OOOOOE-02 1 OOOOOE-02 1 OOOOOE-02 [uncertainty)

42 5 3 50000E+00 7 AAAAAt? ) A-< OOOOOE+Ol 2 62427E+02 4 00376E+01 ^i,E,a, d,p)

43 1 OOOOOE-01 1 OOOOOE-02 1 AAnAAl? A'^ *1 AAAAAt? A*^ 00000r.-02 .uncertainty)

44 6 4 OOOOOE+00 7 OOOOOE+Ol 47313E+02 3 31054E+01 [i.E.a, d.p)

45 1 OOOOOE-01 1 1 OOOOOE-02 1 OOOOOE-02 [uncertainty)

46 7 4 50000E+00 7 OOOOOE+Ol 1 92800E+02 3 34557E+01 [i.E.a, d.p)

47 1 OOOOOE-01 1 OOOOOE-02 1 OOOOOE-02 1 OOOOOE-02 [uncertainty)

48 8 5 OOOOOE+OO 7 .OOOOOE+Ol 1 24499E+02 3 21867E+01 Ci.E.a, d.p)

49 1 OOOOOE-01 1 .OOOOOE-02 1 OOOOOE-02 1 OOOOOE-02 [uncertainty)

50 9 6 .BOOOOE+OO 7 .OOOOOE+Ol 8 77637E+01 3 66717E+01 [i.E.a, d.p)

51 1 .OOOOOE-01 1 .OOOOOE-02 1 .OOOOOE-02 1 OOOOOE-02 [uncertainty)

52 10 6 .OOOOOE+00 7 .OOOOOE+Ol 7 10687E+01 4 18238E+01 Ci.E.a, d.p)

53 1 .OOOOOE-01 1 .OOOOOE-02 1 .00000E~02 1 .OOOOOE-02 [uncertainty)

The option for unconstrained optimization is selected by setting the one and only line of

data in the input file X.INN to the integer value 2, i.e.,

1 2 ! search (vary)

The output file X.OUT contains a journal listing of the input data, progress reports re- garding convergence, the final numerical values of the vary model parameters, and a selection of associated statistics, as well as the amount of cpu-time that is used during calculation. The output shows on line 132 that 27 iterations were used to converge to the correct

final solution shown on line 135. Again, regarding line 135, the index label 5 refers to the

volume fraction for amorphous silicon dioxide. This index label refers to the fifth successive volume fraction found by cumulative indexing the constituent media of the effective

media, and not the constituent label xx that would be associated with DIELxx. The output file X.OUT is given below.

1 Enter: sub-directory for constituent media

2 sub-directory " drbl t [data_bases] w

.

3

56
4

5 Enter: mfilmz ' number of distinct widths

6 2 mfilmz ' number of distinct widths

7 Enter: ' i,z,2u,ivary

8 1 100.000 2.000 0 i,z,zu,ivary

9 2 2.000 2.000 0 i,z,zu,ivary

10n

12 Enter: mipars ' number of parameters (integer)

13 0 mipars ' number of parameters (integer)

14

1516 Enter: mrpars ' number of parameters (floating-point)

17 0 mrpars ' number of parameters (floating-point)

,1819

20 Enter: mmixtr ' number of distinct mixtures

21 4 mmixtr ' number of distinct mixtures

22

23 Enter: mlmnt , mipar, mrpar (mix #1)

24 10 0 mlmnt, mipar, mrpar

25 Enter: j, Imnt , frac, ufrac,

26 1 2 1.00000 0.00000 0 j, Imnt, frac, ufrac,

27

28 Enter: mlmnt, mipar, mrpar (mix #2)

29 10 0 mlmnt, mipar, mrpar

30 Enter: j, Imnt, frac, ufrac,

31 13 1.00000 0.00000 0 j, Imnt, frac, ufrac,

3233 Enter: mlmnt, mipar, mrpar (mix #3)

34 10 0 mlmnt, mipar, mrpar

35 Enter: j, Imnt, frac, ufrac,

36 1 5 1.00000 0.00000 0 j, Imnt, frac, ufrac,

37

38 Enter: mlmnt, mipar, mrpar (mix # 4)

39 2 0 0 mlmnt, mipar, mrpar

40 Enter: j, Imnt, frac, ufrac,

41 13 0.70000 0.02000 1 j, Imnt, frac, ufrac,

42 2 5 0.30000 0.02000 1 j, Imnt, frac, ufrac,

43

44

45 Enter: mbient ' number of distinct ambients

46 • 1 mbient ' number of distinct ambients

47 Enter: j, imix, mipar, mrpar

48 1 1 0 0 j, imix, mipar, mrpar

49

50

51 Enter: msampl ' number of samples

52 1 msampl ' number of samples

53

54 Enter: mfilm ' number of films on sample # 1

55 2 mfilm ' number of films on sample # 1

56 Enter: j, imix, iwidth (film/substrate)

ivary

ivary

ivary

ivary

ivary

ivary

ivary

ivary

ivary

57
57

5S

5960

616263

64

656667

68

69

70

9192

9394

959697

98

99 100

101 102

103

104 105 106

107

108

109

1 3 1 j, imix, iwidth

2 4 2 j, imix, iwidth

3 2 j , imix

Enter: mbien ' number of ambient s on sample # 1

1 mbien ' niimber of ambients on sample # 1 Enter: mrpeat, imbien

1 1 mrpeat , imbien

Enter: mexpt ' number of measurement data

10 mexpt ' number of measurement data

Enter: j, wavln (nm) , angli , delta ,psi (degree)

wavlnu , anglu,deltu,psiu

71 1 1 BOO 70 000 80 431 30 888 ^ J * wavln , angli

,

delta, psi ) 72 0 100 0 010 0 010 0 010 wavlu.anglu, deltu.psiu)

73 2 2 000 70 000 79 713 43 127 V J » wavln, angli

,

delta, psi ) 74 0 100 0 010 0 010 0 010 wavlu.anglu. deltu.psiu)

75 3 2 BOO 70 000 102 227 69 302 » wavln, angli

,

delta, psi ) 76 0 100 0 010 0 010 0 010 wavlu,anglu. deltu.psiu)

77 4 3 000 70 000 2B0 41B 60 999 ^ 3 » wavln, angli

,

delta, psi ) 78 0 100 0 010 0 010 0 010 wavlu, anglu, deltu,psiu)

79 B 3 600 70 000 262 427 40 038 \ 3 1 wavln, angli

,

delta, psi ) 80 0 100 0 010 0 010 0 010 wavlu, anglu, deltu,psiu)

81 6 4 000 70 000 247 313 33 105 V 3 » wavln, angli

,

delta, psi ) 82 0 100 0 010 0 010 0 010 wavlu, anglu, deltu,psiu)

83 7 4 BOO 70 000 192 800 33 456 \ 3 » wavln, angli

,

delta, psi ) 84 0 100 0 010 0 010 0 010 wavlu.anglu. deltu,psiu)

85 8 5 000 70 000 124 499 32 187 V 3 > wavln, angli

,

delta, psi ) 86 0 100 0 010 0 010 0 010 wavlu.anglu. deltu.psiu)

87 9 B BOO 70 000 87 764 36 672 ^ 3 > wavln, angli

,

delta, psi ) 88 0 100 0 010 0 010 0 010 wavlu.anglu, deltu,psiu)

89 10 6 000 70 000 71 069 41 824 \ 3 > wavln, angli

,

delta, psi ) 90 0 100 0 010 0 010 0 010 wavlu.anglu. deltu.psiu)

Enter:

option

Imnt ' Imnt ' Imnt '

seek

option

1, forward problems, plots,

2, search (vary)

3, search grid (vary)

2

2, filename = air

B, filename = Si_02g

3, filename = Si

loop,

0

12

34

ratio of reduction,

(rel)

8.800E-01

8.668E-01

8.B08E-01

8.308E-01

(total)

8.800E-01

7.628E-01

6.490E-01

B.392E-01

1 .268E+02

1.116E+02

9.670E+01

8.227E+01

6.836E+01

58
110 5 8 050E-01 4 . 341E-01 5

111 6 7 . 702E-01 3 343E-01 4 238F+01

112 7 7 200E-01 2 . 407E-01 3 • nm\J O X F+ni iU* \J X 113 g 5 388E-01 t iJ iJ V X 114 9 g 143E-01 9 . 446E-02 I

i. J. !7 f Ij f V JL

1 fl u \J *7 O Li \J X co 7 oz Qy ocy + nnu vj

lift 1 1

0

11 5 \J %J \J V J. 3 4 t: X o Ej T V u 117 12 5 039E-01 2 1 05F-0? 2 \J \J \J Lji \J \J 118 13 5 020E-01 267E-02 •C w ( JLi V ^ U \/ U £j ' V V

119 14 5 012E-01 7 618E-03 9 6B7E-01

120 15 6 019E-01 4 585E-03 5 W X JLt V X 121 16 6 003E-01 2 753E-03 3 489E-01 ^ J_J \/ X 122 17 6 037E-01 1 662E-03 2 107E-01

123 18 6 OOlE-01 9 972E-04 1 264E-01

124 19 6 082E-01 6 065E-04 7 688E-02

125 20 6 108E-01 3 704E-04 4 696E-02

128 21 5 391E-01 2 367E-04 Vy 1 XJ V i 3 OOlE-02 V/ V/ X XJ w ^

1 27 0 f oorj u 1

11 DU f Ij Ut

128 23 7 420E-01 1 192E-04 1 512E-02

129 24 8 563E-01 1 021E-04 1 294E-02

130 2B 9 337E-01 9 535E-05 1 209E-02

131 26 9 660E-01 9 211E-05 1 168E-02

132 27 9 638E-01 8 877E-05 1 125E-02

133

134 model parameter value along the minimum:

135 1) 0.5000 0.00000, for: £ 136

137 initial |g| = 1.26767E+02

138 final Igl = 1.12530E-02

139

140

141 Statistics of deviations ' experiment-model ' g

142 143

144

145 146 147

148

149 150

151 152 psi:

153 delta:

154

155

158 157

158

159

160

161

182 rcond

(f ,fu)

where: g is a column vector of length 2M,

() denotes either (delta) or (psi) mean () = m() = <g()> = (1/M) sum: g()

< (gO -m() )**2 >

< (g(l)-m(l))*(g(2)-m(2)) > sqrt (variance)

covariance / (sd(l) * sd(2))

variance ()

covariance

std dev

correlat coef

mean, std dev (degrees)

0.000 0.000

0.000 0.000

0.172 ' correlation coefficient ' <psi|delta>

[J(T)*J] , renormalized for correlation.

1) 1.00000

Normalization coefficients, sqrt

7.80E-02

CJ(T)*J]_(i,i)

l.OOE+00, condition number, CJ(T)*J]

59
163

164 CJ(T)*J]**(-1) : 165 Determinant: 10.0000 E -1.0000

166 Inertia: ( 1 0 0), number of (+,-,0) eigenvalues,

167 Inverse: upper+diagonal matrix

168 1) l.OOE+00

169

170

171 The standard deviation of the residuals.

172

173 s(g) = sqrt C<gg>/(2M-N)] = 1.15453E-04 (degrees)

174

175

176 The estimated uncertainty in the model parameters,

177 assuming no correlation, i.e., diagonal terms only.

178

179 value, imcertainty.

180 1) 0.5000 0.00003, for: 5

' (f.fu)

181

182 elapsed cpu-time = 10 centi-seconds

183 + 10 seconds

Note that lines 137 and 138 refer to root-mean-square (rms) residuals, which involve deviations scaled by the measurement uncertainties, and hence, are unitless. The final rms

residual is near 10~^, and the measurement uncertainty is 10~^. Hence, the final rms deviation is near 10"'*, as is shown on line 173.

The output file X.PLOT contains a listing of the deviations between the measurements of

(Aj-^) and that calculated for the model. The output file X.PLOT is presented below.

1 1 msampl

2 1 mbien

3 11 mrpeat, imbien

4 10 2 mexpt , mu

5 1 1 50000E+00 7 OOOOOE+01 0 OOOOOE+00 6 83019E-06 (i,E,ai g (d,p)

6 2 2 OOOOOE+00 7 OOOOOE+01 5 46415E-05 -4 09811E-05 (i.E.a, g (d,p)

7 3 2 50000E+00 7 OOOOOE+01 1 36604E-04 -1 02453E-04 (i,E,a, g (d.p)

8 4 3 OOOOOE+00 7 OOOOOE+01 -4 78113E-05 2 04906E-05 (i,E,a, g (d.p)

9 5 3 BOOOOE+00 7 OOOOOE+01 -2 59547E-04 -3 07358E-05 (i.E.a, g (d.p)

10 6 4 OOOOOE+00 7 OOOOOE+01 3 21019E-04 5 12264E-05 (i,E,a, g (d,p)

11 7 4 50000E+00 7 OOOOOE+01 -5 46415E-05 1 36604E-05 (i,E,a, g (d.p)

12 8 5 OOOOOE+00 7 OOOOOE+01 1 91245E-04 1 02453E-05 (i,E,a, g (d.p)

13 9 5 50000E+00 7 OOOOOE+01 0 OOOOOE+00 3 41509E-05 (i,E,a, g (d.p)

14 10 6 OOOOOE+00 7 OOOOOE+01 0 OOOOOE+00 -4 09811E-05 (i.E,a, g (d.p)

60
5.3 Search Grid (vary)

This option is discussed in sections 4.3 and 4.3.3. Suppose again that the exercise of the

single search that was presented in the previous subsection yielded a residual much larger

than the measurement uncertainties, and yet there is strong conviction that the model is

reasonable. One may then want to find the best solution that is available for this given

model of the sample. Hence, one may be led to consider searching a grid of model parameters.

Regarding the example presented in the previous section, suppose further that the thickness of the transition region is sought as well. For convenience, let the initial value solution be displaced from the correct value; let the thickness be set to 3 nm, see line 5. The

input file X.DAT is given below.

1

23

4

56

7

8910

111213

14

1516

17

18

19

20

212223

24

252627

282930

313233

drbl : Cdata_basos] w

.

2

1 100.0 2.0

2 3.0 2.0

1

1 1 10

mfilmz ' thicknesses /(i,z,ZTi,ivary)

i,z,zu,ivary ' top layer, Si02

i,z,zu,ivary ' bottom layer, Si02+Si

4

10 0

1 2 1.0 0.0 0 10 0

1 3 1.0 0.0 0 10 0

1 B 1.0 0.0 0 2 0 0

1 3 0.7 0.02 1 2 5 0.3 0.02 1

11 0 0

13 1 2 4 2 3 2

! mipars / (i,ip)

! mrpars / (i,rp,up,ivary)

mixtures ' number of effective media

mlmnt , mipar , mrpar #1

j ,lmnt ,frac,iifrac,ivary ' air

mlmnt , mipar , mrpar #2

j ,lmnt ,f rac ,uf rac,ivary

mlmnt , mipar , mrpar #3

j ,lmnt ,f rac ,uf rac ,ivary

mlmnt .mipar , mrpar #4

j jlmnt ,f rac ,uf rac.ivary

j

, Imnt , f rac ,uf rac , ivary

Si

Si02

Si

Si02

! mbient ' number of ambients

! j ,imix, mipar, mrpar ' air

mseunpl ' number of samples analyzed

mfilm ' number of layers on sample #1

j.imix.iz ' Si02 , top layer

j,imix,iz ' Si02+Si, transition region

j,imix ' Si , substrate

mbien ' number of ambients on sample #1

mrpeat .imbien

mexpt ' number of measurements

61
1 1 7 8 3 IT F. fl n 1 35 j_ OOOOOE-01 OOOOOE-0? 00000F.-02 I im f fiT"h a "i TTfc v j \ LULw OX wC&XXLWV y ou 2 2 OOOOOF+00 7 7 Q71 9QF+01 4TC •51 07[;f+01 I 1 F. n H Ti 1

a ( 1 nnnnoF-09 i IX noonoF-n*? ^U-LL^OX w aXXL w V y OO 9 7 vWV/V/Cj'VX X D'p'j^yF+n'? V Mb 4l 1 £i^V^ Aw

0*^01 90vXw£<*\/X PF + 01

onOV i UvUUU£i vX J. X nnonnF—no X A AA A AT7_nO 1 nTi ^ A ^+ n T Ti ^ 1 VUXLC 6X u aXXL w y ^ o 7 nnnnnp+ni OU^XOCitVZ aID 41 UUUUUCi ux X X A AAA AT? — AO X A A A A Ap_ AO V uxIC o X u axil b y y cD OUS./U VXj ' u 7 UuvVJUti^UX "5A UZ*TZf IIi^VJZ U V O f O ti ' V X

^ "i F ck <^ n ^ ^.3. , £i , a, O-sP-/ 43 J. vU^^vVJi!* UX X vUVJUV^£« uz

•1X X A AAA AP — A '3 \ uXlC OX ^ aXXL w y y 44 O 7f vvwUvJ-iTV/X A7*3i t: f O X *?Ju 7F +i^UZ nO o

«j O X U D*x£<^U X V.i ,£1, a, a.,p^

AC iX UUUUUCi UX 1X nnonnp-09 X nnnnfiF-no vvvvUJZi vZ X nnnnoF-n*? V/uvUVJiZi UZ \ ixno sx u axxL u y j 40 7 A 7 VvUUwjj~vX X o (i ,E,a, d.,p)

4 f iX WvwUvC) vX 1X .v/Wvuvri uz

1X X vVvWCa V/Z V UXiw o X w aXXL w y y 48 8 B OOOOOE+00 7 OOOOOE+01 V/ V W w W iiJ W X 1 24499E+02 3 21867E+01

49 1 OOOOOE-01 1 .OOOOOE-02 1 OOOOOE-02 1 .OOOOOE-02 (imcortainty)

50 9 B 50000E+00 7 .OOOOOE+01 8 77637E+01 3 66717E+01 (i,E,a, d.p)

51 1 OOOOOE-01 1 .OOOOOE-02 1 OOOOOE-02 1 .OOOOOE-02 (uncertainty)

52 10 6 OOOOOE+00 7 OOOOOE+01 7 10687E+01 4 ,18238E+01 (i,E,a, d.p)

53 1 OOOOOE-01 1 OOOOOE-02 1 OOOOOE-02 1 OOOOOE-02 (uncertainty)

Here, there are three model parameters selected for variation, but only two undergo optimization and contribute to the grid. Both model parameters involve the transition region,

the thickness of the layer and the volume fraction for the amorphous silicon dioxide. Regarding the construction of the grid of model parameters: let the thickness range between

loO and 3.0 nm with stepsize of 2.0 nm, and let the volume fraction range between 0.3 and

0.7 with stepsize of 0.4, so that no grid point lies on the correct solution. Accordingly, the

input file X.INN is given below.

1 3 ! search, grid

22 1.0 3.0 2.0 ! thickness, transition x-egion

32 0.3 0.7 0.4 ! volumQ fraction, oxide, transition region

4 1 ! full optimization, use Jacobian

The output file X.OUT is given below.

1 Enter: sub-directory for constituent media

2 sub-directory ' drbl : Cdata_bases] w

.

3

4

5 Enter; mfilmz ' number of distinct widths

6 2 mfilma: ' number of distinct widths

7 Enter: i,z,zu,ivary

8 1 100-000 2.000 0 i,z,zu,ivary

9 2 3.000 2.000 1 i,2,zu,ivary

10

62
1112 Enter: mipars ' number of parameters (integer)

13 0 mipars ' number of parcimeters (integer)

14

1516 Enter: mrpars ' number of parameters (floating-point)

17 0 mrpars ' number of parameters (floating-point)

18

19

20 Enter: mmixtr ' number of distinct mixtures

21 4 mmixtr ' number of distinct mixtures

22

23 Enter: mlmnt , mipar, mrpar (mix #1) '

24 10 0 mlmnt, mipar, mrpar

25 Enter: j, Imnt , frac, ufrac, ivary

28 1 2 1.00000 0.00000 0 j, Imnt, frap, ufrac, ivary

27

28 Enter: mlmnt, mipar, mrpar (mix # 2)

29 1 0 0 mlmnt, mipar, mrpar

30 Enter: j, Imnt, frac, ufrac, ivary

31 13 1.00000 0.00000 0 j, Imnt, frac, ufrac, ivary

32

33 Enter: mlmnt, mipar, mrpar (mix #3)

34 1 0 0 mlmnt, mipar, mrpar

35 Enter: j, Imnt, frac, ufrac, ivary

38 IB 1.00000 0.00000 0 j, Imnt, frac, ufrac, ivary

37

38 Enter: mlmnt, mipar, mrpar (mix # 4)

39 2 0 0 mlmnt , mipar , mrpar

40 Enter: j, Imnt, frac, ufrac, ivary

41 13 0.70000 0.02000 1 j, Imnt, frac, ufrac, ivary

42 2 B 0.30000 0.02000 1 j, Imnt, frac, ufrac, ivary

43

44

45 Enter: mbient ' number of distinct ambients

46 1 mbient ' number of distinct ambients

47 Enter: j, imix, mipar, mrpar

48 1 1 0 0 j, imix, mipar, mrpar

49

50

51 Enter: msampl ' number of samples

52 1 msampl ' number of samples

53

54 Enter: mfilm ' number of films on sample # 1

55 2 mfilm ' number of films on sample #1

56 Enter: j, imix, iwidth (f ilm/substrate)

57 1 3 1 j, imix, iwidth

58 2 4 2 j, imix, iwidth

59 3 2 j

, imix

60

6162 Enter: mbien ' number of ambients on sample # 1

83 1 mbien ' number of ambients on sample # 1

63
64

656667

6869

70

9192

9394

959697

98

99 100

101 102

103

104

105 106

107

108

109

110

111 112 113

114

115 116

Enter: mrpeat, imbien

1 1 mrpeat , imbien

Enter: mexpt ' number of measurement data

10 mexpt ' number of measurement data

Enter: j, wavln (nm) , angli .delta, psi (degree)

wavlnu , anglu,deltu,psiu

71 1 1 500 70 000 80 431 30 888 wavln, angli

,

delta, psi ) 72 0 100 0 .010 0 010 0 010 wavlu,anglu, deltu,psiu)

73 2 2 000 70 .000 79 713 43 127 (j . wavln, angli

,

delta, psi ) 74 0 10.0 0 010 0 010 0 010 wavlu.anglu, deltUspsiu)

75 3 2 500 70 . 000 102 227 69 302 wavln, angli

,

delta, psi ) 76 0 100 0 .010 0 010 0 010 wavlu.anglu, 1 1 j_ • \ deltu.psiu;

77 4 3 000 70 .000 250 415 60 999 ^ J > wavln, angli

,

delta, psi ; 78 0 100 0 010 0 010 0 010 wavlu,anglu, deltu,psiu;

79 5 3 500 70 000 262 427 40 038 ^ J » wavln, angli

,

delta, psi ) 80 0 100 0 010 0 010 0 010 wavlu, anglu. deltu,psiu)

81 6 4 000 70 000 247 313 33 105 ^ J > wavln, angli

,

delta, psi ) 82 0 100 0 010 0 010 0 010 wavlu, anglu, deltu,psiu)

83 7 4 500 70 000 192 800 33 456 V J J wavln, angli

,

delta, psi ) 84 0 100 0 010 0 010 0 010 wavlu, anglu, deltu,psiu)

85 8 5 000 70 000 124 499 32 187 \ J 1 wavln, angli

,

delta, psi ) 86 0 100 0 010 0 010 0 010 wavlu, anglu. deltu,psiu)

87 9 6 500 70 000 87 764 36 672 \ J » wavln, angli, delta, psi ) 88 0 100 0 010 0 010 0 010 wavlu, anglu, deltu.psiu)

89 10 6 000 70 000 71 069 41 824 V J 1 wavln, angli

,

delta, psi ) 90 0 100 0 010 0 010 0 010 wavlu, anglu, deltu,psiu)

Enter: option

1, forward problems, plots,

2, search (vary)

3, search grid (vary)

option = 3

Scan a grid of model parameters:

Grid info: DO-loop parameters

Grid info: i, initial,

Enter:

1)

Enter:

2)

Enter:

i, zl, z2, z3

2

i, fl. f2, f3

2

1.0000

0.3000

(z,p,f )

.

final

,

(widths

)

3.0000

(fraction)

0.7000

increment

2.0000

0.4000

( 1)

( 2)

option regarding the grid scan:

0, no optimization, |gi only,

1, full optimization, Jacobian.

option '1

Restart by attempting to read breakpoint info

64
117 Note: NO attempt was made to restart.

118

119 Imnt ' 2, filename = air

120 Imnt ' 5, filename = Si_02g

121 Imnt ' 3, filename = Si

122

123 number of grid points scanned, kts = 4

124 population along the minimum, ktm = 1

125 norm of the residual, |gi = 1.17853E-04 (degrees)

126 127 model parameter value along the minimum:

128 1) 2.00014E+00, for: 2, (z)

129 2) 4.99959E-01, for: 5, (f)

130

131 132 Statistics of deviations ' experiment-model ' g

133 134 where: g is a column vector of length 2M,

135 () denotes either (delta) or (psi)

136 meem () = m() = <g()> = (1/M) sum: g()

137 variance () = < (g() -m() )**2 >

138 covariance = < (g(l)-m(l) )*(g(2)-m(2) ) >

139 std dev = sqrt (varijince)

140 corrolat coef = covariance / (sd(l) * sd(2))

141

142 mean, std dev (degrees)

143 psi: 0.000 0.000

144 delta: 0.000 0.000

145 0.422 ' correlation coefficient ' <psi|delta>

146

147 CJ(T)*J] , renormalizod for correlation.

148 1) 1.00000-

149 2) 0.94674 1.00000

150

151 Normalization coefficients, sqrt: CJ(T)*J] _(i,i)

152 2.90E-02 7.80E-02

153

154 rcond = 2.74E-02, condition number, CJ(T)*J]

155

156 [J(T)*J] *(-!)

157 Determinant: 1.0369 E -1.0000

158 Inertia: ( 2 0 0), number of (+,-,0) eigenvalues.

159 Inverse: upper+diagonal matrix

160 1) 9.64E+00

161 2) -9.13E+00 9.64E--00

162

163

164 The standard deviation of the residuals.

165

166 s(g) = sqrt C<gg>/(2M-N)] = 1.24228E-04 (degrees)

167

168

169 The estimated uncertainty in the model parameters,

65
170 assuming no correlation, i.e., diagonal terms only.

171

172

173

174

175

176 177

178

1)

2)

value

,

2.0001

0.5000

elapsed cpu-time = 52

+ 0 + 1

uncertainty

.

0.00023,

0.00009,

centi-seconds

seconds

minutes

for:

±ox:

(z,zu)

(l.fu)

Regarding lines 173 and 174, one finds the values of the calculated uncertainty for the

model parameters. Incidently, it is also possible to calculate the uncertainty by inserting

information from lines 132 to 168, i.e., "Statistics of deviations," into eq (24) directly, but

then one must respect the mixed units of measure of the appropriate quantities. Regarding line 166, Sg is expressed in degrees, The Jacobian is expressed in radians and is scaled

as well. To help one understand how the output data of the "Statistics of deviations" may

be inserted into eq (24), consider as an example the calculation that yields the value of

uncertainty shown on line 173. From eq (24), it follows that

1/2

TT 180

3.14159

180.0

2.32 X lO-''

1.24228 X 10"

11

\/9~64

2.9 X 10-2

where information has been taken from lines 166, 160, and 152.

The output file X.PLOT is given below.

1 1 msampl

2 1 mbien

3 1 1 mrpe at , imb i en

4 10 2 mexpt , mu

5 1 1 50000E+00 7.00000E+01 0 OOOOOE+OO 1 707B5E-05 (i,E,a, g (d.p)

6 2 2 OOOOOE+00 7.00000E+01 2 73208E-05 -3 75660S-05 (i,E,a, g (d.p)

7 3 2 50000E+00 7.00000E+01 2 73208E-05 -7 51321E-•05 (i.E.a, g (d.p)

8 4 3 OOOOOE+00 7.00000E+01 -6 14717E-05 -2 04906E-05 (i.E.a. g (d,p)

9 5 3 50000E+00 7.00000E+0i - 2 B9B47E-04 -5 12264E- 05 (i.E.a. g (d.p)

10 6 4 OOOOOE+00 7.00000E+01 3 62000E-04 3 07358E-05 (i.E.a. g (d.p)

11 7 4 50000E+00 7.00000E+01 -•8 19623E-05 -1 16113E-04 (i.E.a, g (d.p)

12 8 B OOOOOE+00 7.00000E+01 B 46415E-05 -1 7075BE-05 (i.E.a, g (d.p)

13 9 5 50000E+00 7.00000E+01 -1 36604E-04 1 70755E-05 (i,E,a, g (d,p)

14 10 6 OOOOOE+OO 7.00000E+01 --1 36604E-04 -4 09811E- 05 (i,E,a, g (d,p)

66
5.4 Supplementary Parameters

As mentioned in the various subsections of section 4.2, supplementary parameters provide

the user with additional degrees of freedom in characterizing the constituent and effective media. Currently, the program has incorporated only one constituent medium that requires a supplementary parameter, i.e., Ala-Ga^.^, As, where x refers to the aluminum mole

fraction and (0 < x < 0.8). This may be seen by considering both the subroutine DIEL09

and its associated database file W.AL_GA_AS, see sections 6.5.9 and 6.6.7, respectively.

The database contains profiles of the dielectric function as functions of energy for a set of

discrete values {xj) of the mole fraction of aluminum. To evaluate the dielectric function

for intermediate values of x, subroutine DIEL09 linearly interpolates between two discrete

prolUes. Because of the rapid variations in the profiles and the coarseness of the [xj) grid,

a better approximation for £{x) than that used here is possible by fitting the profiles of the

dielectric functions with a set of oscillators as functions of the mole fraction [x). To provide this approximation, one would need to modify the subroutine DIEL09 appropriately.

Incidently, effects due to the internal electric field that is induced near the boundary between adjacent layers of GaAs and Ala.Ga1_2.As where (x > 0) are not included here [6,

7].

The mechanism for making the proper correspondence between the model parameters and

appropriate effective media and/or constituent media may be readily seen from the ar- gument list of subroutines DIEFCN and DIELMN. The subroutine for the constituent

medium receives supplementary parameters that are associated with the effective medium,

as well as those associated with the ambient. Hence, it is incumbent on the subroutine

of the constituent medium to interpret the information. Subroutine DIEL09 check-tests

for the appropriate supplementary parameters, utilizes the parameters in calculating the

constituent dielectric function, and calculates the appropriate partial derivative, which is

required for any optimization variable. Regarding the supplementary parameters and their

numerical values, the integer value labels the appropriate constituent medium, while the

floating-point value provides the necessary relative concentration of aluminum.

For sake of demonstration, consider a room-temperature sample involving a substrate of

GaAs and a top layer of Al.3Ga.7As. Let the top layer thickness be 50 nm. Consider generating a set of measurement data for this structure. The input file X.DAT may be as follows.

67
1

23

4

5a7

8

910

111213

14

15la17

1819

20

212223

24

25

2627

28

29

30

313233

34

drbl : [data_bases] w

.

1 ! mfilmz / ( j ,z,zii,ivary)

1 50. 1.0 0 ! thickness, top layer

1 ! mipars / (i.ip)

1 9 i litmt ' 9 J constituent ' AlGaAs

1 ! mrpars / (i ,rp,u.p,ivary)

1 0.3 0 . 01 1 ! stoichiometry ' x, Al(x)Ga(l-x)As

3 ! mixtures ' number of effective media

1 0 0 i mlmnt ,mipar ,mrpar #1

1 2 1 0 0.0 0 ! j ,lmnt ,f rac ,uf rac.ivary ' air

1 0 0 ! mlmnt ,mipar ,mrpar #2

1 8 1 0 0.0 0 ! j ,lmnt ,f rac,ufrac.ivary ' GaAs

1 1 1 ! mlmnt ,mipar ,mrpar #3

1 9 1 0 0.0 0 ! j ,lmnt ,f rac jUf racjivary ' AlGaAs

1 1 ! i, iip

1 1 ! i, irp

1 \ mbient ' number of distinct ambients

1 1 0 0 ! j ,imix,mipar ,mrpar ' air

1 ! msampl ' number of samples

1 ! mfilm ' number of layers on seunple #1

1 3 1 ! j,imix,iz ' AlGaAs

2 2 ! j,imix ' GaAs substrate

1.5

0.1

70.0

0.01

! mbien ' number of ambients for sample #1

! mrpeat , imbien

! mexpt ' number of measurements

0.0 0.0 (i.E.a, d,p)

0.01 0.01 (uncertainty)

Again, the above last two lines involve pseudo measurement data.

Suppose now that measurement data are requested for energies that range between 1.5

and 4.0 eV with stepsize of 0,5 eV. Let the angles of incidence involve 65 and 70 deg. The

input file X.INN may be as follows.

1 1

2 2

3 2

4 1.5

5 66.

4.0

70.

0.5

B.O

forward problems , plots, ... grid scan

(Delta, psi), x.dat

incident energy (eV)

incident angles (degrees)

The output file X.OUT is given below.

68
Enter: sub-directory for constituent media

sub-directory ' drbl : [data_bases] w

.

6

78

9

10

111213

14

15

1617

18

19

20

21

22

23

24

25

2627

28

2930

313233

34

35

3637

38

3940

414243

44

45

4647

48

49

50

5152

Enter:

1 Enter:

1 50.000

mfilmz ' number of distinct widths

mfilmz ' number of distinct widths

i,z,2u,ivary

1.000 0 i,z,zu,ivary

Enter: mipars ' num.ber of parameters (integer)

1 mipars ' number of parameters (integer)

Enter: j, iparm (# items= 1)

1 9 j » iparm

Enter: mrpars ' number of parameters (floating-point)

1 mrpars ' number of parameters (floating-point)

Enter: j, rparm, uparm, ivary (# items= 1)

1 3.00000E-01 l.OOOOOE-02 1 ( j ,rparm,uparm,ivary)

Enter

:

3

Enter:

1 Enter:

1

Enter

:

1 Enter

:

1

Enter

:

1 Enter

1 Enter:

1 Enter

:

1

mmixtr * number of distinct mixtures

mmixtr ' number of distinct mixtures

mlmnt , mipar , mrpar

0 mlmnt, mipar, mrpar

1.00000 0.00000

mlmnt, mipar, mrpar

0 mlmnt, mipar, mrpar

1.00000 0.00000 0

mlmnt, mipar, mrpar

1 mlmnt, mipar, mrpar

1.00000 0.00000 0

j , iiparm (# items

j , iiparm

j , irparm (# items

j , irparm

(mix #1)

j, Imnt , frac, ufrac,

j, Imnt, frac, ufrac,

(mix # 2)

j, Imnt, frac, ufrac,

j, Imnt, frac, ufrac,

(mix # 3)

j, Imnt, frac, ufrac,

j, Imnt, frac, ufrac.

ivary

ivary

ivary

ivary

ivary

ivary

1)

1)

Enter: mbient ' number of distinct ambients

1 mbient ' number of distinct ambients

Enter: j, imix, mipar, mrpar

1 1 0 0 j, imix, mipar, mrpar

Enter: msjunpl ' number of samples

69
53 1 msampl " number of samples

54

55 Enter: mfilm ' number of films on sample # 1

56 1 mfilm ' niimber of films- on sample # 1 57 Enter: j, imix, iwidth (film/ substrate)

58 1 3 1 j, imix, iwidth

59 2 2 j , imix

60

6162 Enter: mbien ' number of ambients on sample # 1 63 1 mbien ° number of ambients on sample # 1 64 Enter: mrpeat, imbien

65 11 mrpeat, imbien

66 Enter: mexpt ' number of measurement data

67 1 mexpt ' nujnber of measurement data

68 Enter: j, wavln (nm) , angli , delta ,psi (degree)

69 wavlnu , anglu,deltu,psiu

70

71 1 1.500 70,000 0.000 0.000 ( j , wavln, angli, delta, psi ) 72 0.100 0.010 0.010 0.010 ( wavlu,anglu, deltu,psiu)

73

74

75 Enter: option

76 1, forward problems, plots, ...

77 2, search (vary)

78 3, search grid (vary)

79 option = 1 80

81

82 Enter: choice of incident (energies, angles)

83 1, measurement data, x.dat

84 2, grid scan.

85 choice - 2

8687 Enter: choice of output suitable for:

88 1, dielectric function, media,

89 2, (Delta, psi), x.dat,

90 3, (Delta, psi), plotting,

91 4, d/db, b''(z,f,p),

92 5, d/da, angle of incidence,

93 6 , d/dE , energy

.

94 choice =2

95

96 Enter: range of incident energies (eV)

97 or: - wavelengths (nm)

98 Enter: evl, ev2, ev3

99 1.5000 4.0000 0.5000 energy (eV)

100

101 Enter: range of incident angles (degrees)

102 Enter: anglel, Emgle2, angleS

103 65.0000 70.0000 5.0000 al,a2,a3

104

105 Imnt ' 2, filename = air

70
106 Imnt ' 9, filename = Al_Ga_As

107 Imnt ' 8, filename = Ga_As

108

109 elapsed cpu-time = 67 centi-seconds

lie + 5 seconds

The requested measurement data of ellipsometric angles (A,'^) are written to X.PLOT.

The output fil-e X.PLOT is given below.

1 1 msampl

2 1 mbien

3 11 mrpeat , imbien

4 12 mexpt ' measurements

5 1 1 50000E+00 6 50000E+01 1 76446E+02 1 24387E+01 (i,E,a, d.p"

e 1 OOOOOE-01 1 OOOOOE-02 1 OOOOOE-02 1 OOOOOE-02 (uncertainty]

7 2 2 OOOOOE+00 6 50000E+01 1 79401E+02 1 5782BE+01 (i,E,a, d.p]

8 1 OOOOOE-01 1 OOOOOE-02 1 OOOOOE-02 1 OOOOOE-02 (uncertainty]

9 3 2 50000E+00 6 50000E+01 1 77396E+02 1 95307E+01 (i.E.a, d.p]

10 1 OOOOOE-01 1 OOOOOE-02 1 OOOOOE-02 1 OOOOOE-02 (imcertainty]

11 4 3 OOOOOE+00 6 50000E+01 1 66208E+02 2 33677E+01 (i.E.a, d.p]

12 1 OOOOOE-01 1 OOOOOE-02 1 OOOOOE-02 1 OOOOOE-02 (uncertainty]

13 5 3 50000E+00 6 50000E+01 1 49379E+02 2 43128E+01 (i.E.a. d.p]

14 1 OOOOOE-01 1 OOOOOE-02 1 OOOOOE-02 1 OOOOOE-02 (uncertainty]

15 6 4 OOOOOE+00 6 50000E+01 1 48705E+02 2 3B367E+01 (i.E.a, d.p]

16 1 OOOOOE-01 1 OOOOOE-02 1 OOOOOE-02 1 OOOOOE-02 (uncertainty]

17 7 1 BOOOOE+00 7 OOOOOE+01 1 69646E+02 4 6BB7BE+00 (i.E.a, d.p]

18 1 OOOOOE-01 1 OOOOOE-02 1 OOOOOE-02 1 OOOOOE-02 (uncertainty]

19 8 2 OOOOOE+00 7 OOOOOE+01 1 78701E+02 8 31343E+00 (i.E.a, d.p]

20 1 OOOOOE-01 1 OOOOOE-02 1 OOOOOE-02 1 OOOOOE-02 (uncertainty]

21 9 2 BOOOOE+00 7 OOOOOE+01 1 75534E+02 1 26304E+01 (i.E.a. d.p]

22 1 OOOOOE-01 1 .OOOOOE-02 1 OOOOOE-02 1 OOOOOE-02 (uncertainty]

23 10 3 OOOOOE+00 7 .OOOOOE+01 1 B8723E+02 1 7B083E+01 (i,E,a, d.p]

24 1 OOOOOE-01 1 .OOOOOE-02 1 OOOOOE-02 1 OOOOOE-02 (uncertainty]

25 11 3 bOOOOE+00 7 .OOOOOE+01 1 35016E+02 1 96919E+01 (i.E.a. d.p]

26 1 OOOOOE-01 1 .OOOOOE-02 1 OOOOOE-02 1 OOOOOE-02 (uncertainty]

27 12 4 OOOOOE+00 7 .OOOOOE+01 1 33B38E+02 1 88B74E+01 (i.E.a, d.p]

28 1 OOOOOE-01 1 .OOOOOE-02 1 OOOOOE-02 1 OOOOOE-02 (uncertainty]

71
6. Listing of Software Source Files and Routines

This section presents a listing of the source files for MAIN2. For convenience, the files are

partitioned into six subsections. The first subsection involves files associated with storage

arrays. The second subsection involves source programs that govern the direct or forward

problem and the command options. The third subsection involves general utilities that

provide basic tasks for the source programs. The fourth subsection iiivolves source routines associated with evaluating the dielectric function for the effective media. The fifth

subsection involves source routines associated with evaluating the dielectric function for

the constituent media. The sixth subsection involves the databases that are associated

with the constituent media.

For convenience, a brief orientation of the organization of the software development may

be found in file A.HLP.

1 Motes:

2 .

.

3 1) FORWRD solves the direct or forward problem.

4 The model parameters of sample include:

5 (z,e) ' (thickness, dielectric function)

6 The dielectric function involves variables: (f,p)

7 FORWRD calculates: R, dR/dz, dR/de , dR/da.

8 Regarding (f,p), one needs: de/df, de/dp

9 so the Jacobian involves: J(z,f ,p)

10 where: z ' film thicknesses,

11 f

' volume fractions of effective medium,

12 • p

' parameters local to constituents,

13 e

' dielectric function,

14 a ' angle of incidence

15

16 2) EMA: 1 = sum(j): f(j), j indexes constituent media.

17

18 3) Organization of software development:

19

20 A) Enter relevant information for processing.

21 1) DEFNIT ' define parameters controlling array allocation.

22 2) MAIN " main program ' command processing of input data.

23 3) INPDAT ' input data to describe: models + measurements.

24

25 B) Command options for simulation, plotting, etc.

26 1) SCATOS ' decision branch/tree

27 2) SCATOl ' scan grid, domain input measurement data

28 3) SCAT02 " scan grid, domain contiguous

29 4) SCANOl ' scan grid of model parameters, evaluate |g| 30

31 C) Minimize the residual in the least-squares sense.

72
32 1) SEEKOl ' search: single, unbounded

33 2) SEEK02 ' used by: SCAN02

34 3) SCAN02 ' scan grid of (vary) model parameters

35

38 D) Construct the necessary sparse matrices, b=Ax

37 1) ARRANG ' construct pointers for sparse matrix ' A

38 2) ASMBL ' assemble the sparse matrices, A,b

39 3) SCATTR ' (psi, delta) for a single experiment.

40 4) FORWRD ' (Rs, Rp, dRs , dRp) ' direct or forward problem.

41 B) ASMBLO ' similEir to the above, |g| only, no Jacobian.

42 6) SCATTO '

43 7) FORWRO "

44

45 E) Calculate the complex dielectric function, effective media.

46 1) DIEFCN ' pass parameters to constituent media

47 2) DIEEHA * effective medium approximation

48 3) DIEMAD ' calculate local partial derivatives

49 4) DIELMN ' discern constituent media elements

50

51 F) Calculate the complex dielectric function, constituent media.

52 1) DIELOl * vacuim

53 2) DIEL02 • air

54 3) DIEL03 ' Silicon

55 4) DIEL04 ' Silicon amorphous

56 5) DIEL05 ' Silicon Dioxide (glass)

57 6) DIEL06 ' Silicon Nitride (non-crystalline)

58 7) DIEL07 " Germanium

59 8) DIEL08 ' Gallium Arsenide

60 9) DIEL09 ' Aluminum Gallium Arsenide (x ' stoichiometry)

61 10) DIELIO ' Gallium Arsenide Oxides

62 11) DIELll ' Arsenic eimorphous

63 12) DIEL12 ' GaP

64 13) DIEL13 ' GaSb

65 14) DIEL14 - InAs

68 . 15) DIEL15 ' InP

67 16) DIELlfl ' InSb

68 17) DIEL17 - AlSb

69 18) DIEL18 -

70 19) DIEL19 -

71 20) DIEL20 '

73
6.1 Named COMMON and BLOCK DATA Statements

6.1.1 lOUNIT.

conunon / iounit / irui, iout, idat, isout, iplt, i scr

74
6.1.2 DEFNIT.

1 c The conf ig\iration of each seunple is: (ambiant/f ilms/substrato) .

2 c each film is characterized by: widths, mixture.

3 c each mixtiire is characterized by:

4 c elements + volume fractions, parameters,

s c The configuration of each experiment /measurement is:

6 c (psi,delta| wavelength, incident angle, ambient .sample)

.

7

8 c Note: the ambient mixture is NOT allowed to undergo variation,

e c This imposition is accounted within: nrowsf

.

10 c Further, the constraint of: 1 = sum: f

11 c has also been accounted within: rowsf

.

12

13 c nsampl ' number of distinct seunple configurations, films/substrate.

14 c nfilms ' number of films layers allowed atop a substrate.

15 c nparms ' number of distinct parajneters per mixture/ambient.

la c nlmnts ' number of distinct elemental dielectric functions, e(w).

17 c nbient ' number of distinct anbients allowed atop a seunple.

18 c nwaves ' number of wavelengths incident on seimple.

10 c namglx ' number of incident smgles per wavelength.

20 c nrpeat ' number of repeats of an experiment.

21

22 pareuneter (nseunpl= 6)

23 parameter (nfilms= 10)

24 parEuneter (nparms= 4)

25 parameter (nlmnts= 20) ! see: DIELMN

26 parameter (nbient= 1)

27 parameter (nwaves=100)

28 parameter (nanglx= 10)

29 parameter (nrpeat= 1)

30

31 peureuneter (nrows = nfilms*2+l) ! (z,e),(e) 'local

32 ! (z),(f ,p),(p) 'local

33 parameter (nrowsf= nf ilms+(nfilms+l)*(nlmnts-l+nparms)+nparms)

34 parameter (nmixtr= nsEunpl* (nfilms+2) ) ! mixtures 'global

35 parameter (nfilmz= nsampl* nfilms) ! z 'global

36 parmneter (nrowss= nssunpl*nrowsf + (nbient-l)*nparms) ! 'global

37 parameter (nexpts= ns£unpl*nbient*nrpeat*nwaves*nanglx)

38 paraunoter (mrows8= nexpt8*2) ! (psi, delta)

3940 complex cmplx, conjg, sqrtt

75
6.1.3 FILMMM.

1 real widths (nsampl+nfilms) ! distinct widths of films r real iiwidth(nsampl*iif ilms) ! uncertainty in widths

3 integer lwidth(nsarapl*nf ilms) ! variation in widths

4

5 integer mm"'mnt(nmixtr) ! number of fractions per mixture

6 integer kklmnt (nmixtr) ! offset location pointer

7 integer mvlmnt (nmixtr) ! number of fractions varying in mix

8

9 integer iilmnt(nmixtr>*<nlmnts) ! composition of mixture

10 real f flrant(nmixtr*nlmnts) ! volume fraction

11 real uf lmnt(nmixtr*nlmnts) ! uncertainty

12 integer If Imnt (nmixtrnlmnts) ! (vary/froz)

13

14 , integer iiparm((nmixtr+nbient)i>nparms) ! pareuneters

15 integer miparm( nmixtr+nbient) ! number of parameters

16 integer kiparm( nmixtr+nbient) ! offset

17 integer jiparm( (nmixtr+nbient )*nparras) ! distribution

18

19 real rrparm( (nmixtr+nbient )*nparms) ! parameters

20 real urparm( (nmixtr+nbient )*nparms) ! imcertainty

21 integer lrparm( (nmixtr+nbient )*nparms) I (vary/froz)

22 integer mrparm( ximixtr+nbient) S number of parameters

23 integer mvparm( nmixtr+nbient) ! number of parameters varying

24 integsr krparm( nmixtr+nbient) ! offset

25 integer jrparm( (nmixtr+nbient )*nparms) ! distribution

26

27 integer mixmbn(nbient) ! ambient

28

29 integer mmf ilm(nsampl) ! number of films on sample

30 integer kkf ilm(nsampl) ! offset

31 integer iif ilm(nsampl*nrows) ! (z .mixture) , (mixture)

32

33 common / filmmm / widths, uwidth, Iwidth, mfilmz,

34 k mmlmnt, kklmnt, mvlmnt, mmixtr,

35 & iilmnt, fflmnt, uflmnt, If Imnt, mlmnts,

36 & iiparm, mipars,

37 & rrparm, urparm, Irparm, mrpars, '

38 & miparm, kiparm, jiparm,

39 ft mrparm, mvparm, krparm, jrparm,

40 ft mixmbn, mbient,

41 ft mmfilm, kkfilm, iifilm, msampl

76
6.1.4 XPRMNT.

1 real psiiis (nexpts) , psiiiu(nexpts)

2 real deltas (nexpts) , deltau(nexpts)

3 real emgles (nexpts) , angleu(nexpts)

4 real wavIns (nexpts) , wavltiu(nexpts)

5

a integer inmbent(nsainpl)

7 integer iibent (nsampl*nbient)

8 integer mmpeat(nsampl*nbient)

9 integer mmexpt (nsampl*nbient*nrpeat)

10

11 common / xprmnt / psiiis, psiiiu, deltas, deltau,

12 k angles, zmgleu, wavIns, wavlnu,

13 k mmbent, iibent, mmpeat, mmexpt, mexpts

77
6.1.5 FILMSS.

1 c Each sample is characterized by the f ilm/substrate

2 c geometry: air / z(l) / ... / z(nfilms) / substrate

3 c parameters: three data (z,f ,p) for each film, may vary

4 c two data ( ,f ,p) for the substrate, may vary

5 c one data ( ,f ,p) for the air, may not vary

6

7 c epsilon = electric permittivity " dielectric function ' 1

8 c sigma = specific conductivity ' 0

9 c mu = magnetic permeability ' 1

10 c omega = etngular frequency

11 c die_r = epsilon * mu

12 c die_i = 4*pi * sigma * mu / omega

13

14 complex die(nf ilms+l)

15 real zzz(nfilms ), air

16 integer mfilm

17

18 common / filmss / die, zzz, air, mfilm

78
6.1.6 ARRAYD.

1 integer mixf lin(nf ilms+2)

2 logical f irstx(iimixtr)

3

4 complex dielec(iiinixtr) ! (e) ' dielectric lunction

5 complex dieleH(nmixtr) ! d(e) /d (energy ' eV)

6 complex dielfl(nlmnts ,nmixtr) ! d(e) /d (volume fraction)

7 complex dielpp(nparms ,nmixtr) ! d(e) /d (pareimeter mixture)

8 complex dielpa(nparms ,nmixtr) ! d(e) /d (parameter eunbient)

9

10 common / arrayd / dielec, dielew, dielff, dielpp, dielpa,

11 k mixflm, firstx

79
6.1.7 ARRAYS.

1 c* parameter (imjaaa = mrowss*nrowsf ) ! estimated need

2 parameter (imjaaa = 2000000) ! convenience

3

4 integer ja(nnjaaa), ia(mrowss+l)

5 real aa(nnjaaa), bb(mrowss ), cc(mrowss)

6 real xx(nrowss)

7

8 integer iptu(nrowss) , iptv(nrowss) , iptw(nrowss) , iptx(nrowss)

e logical llnorm

Id

11 common / arrays / aa, bb, cc, xx, ja, ia,

12 ft iptu, iptv, iptw, iptx,

13 ft meqns, mvary, mfroz, llnorm

80
6.1.8 ABCDEF.

1 real aCnrowsf *2) , b(2), c(4)

2

3 common / abcdef / a,b,c

81
6.1.9 RSTACK.

1 c Accessed or used by: FORWRD, SCATTR

2

3 c waveniimber ' 2*pi/wavalength, wavelength ' iiEm.o-meters

4

5 c d/dw (total derivative wrt frequency ) =

6 c d/dq (partial derivative wrt wavenumber) * (dq/dw) +

7 c d/de (partial wrt dielectric function ) (da/dw)

8

9 complex Rs , Rp ! reflection coeff in ambient

10 complex dRs(nrows), dRp(nrows) ! Jacobians

11 complex dRsa, dRpa ! d/d(angle of incidence)

12 complex dRsq, dRpq ! d/d( wavenumber)

13

'

14 common / rstack / Rs.Rp, dRs.dRp, dRsa, dRpa, dRsq, dRpq

82
6.1.10 WSTACK.

1 parsuneter (naat=(iirowss*(nrowss+l))/2) ! upper triang + diag

2 real aat (naat) ! JL(T)»>A

3 real aats(iirowss) SCALJJ

4 integer ipvt(nrowss} ! LINPACK workspace

5

6 real p(inrowBs), u(mrowss) ! SCALII, CGH

7 real v(nrowss), w(nrowss), xw(nrowss), se(iirowss)

8

9 common / wstack / aat , aat s , ipvt , FiU, v,ir,xw,se

83
6.1.11 ELMNTS.

1 c Discern ^hich. aimong the files containing spectroscopic data

2 c that describes the: (dielectric functions, conductivities) (w)

,

3 c have been accessed or elsewise opened.

4

5 character*40 subdir ! sub-directory

6 logical llmnt s (nlinnt s ) 7

8 common / elmnts / llmnts, subdir

84
6.1.12 NESTOl.

1 c Nest of do-loops associated with ^he mult i -parameter grid scan.

2 c Purpose: SCAN02 passes arguments onto: SEEK02

34 integer iiii(nrowss) , iii2(nrowss)

5 real pppp(nrowss) , pppl(nrowss) , ppp2(nrowss) , ppp3(nrowss)

6 real psav(nrowss)

7

8 common / nestol / pppp, pppi. ppp2, ppp3, psav,

e Ic iiii, iii2

85
6.1.13 HANDYY.

Convenient /handy set of data information,

data pi / 3 . 14159265E+00 /

data cccc / 2 . 99792458E+17 / ! speed of light, (nano-m/soc)

data wavlev / 1239.8520B6 / ! he, (nano-meters)-(electron-volts)

real pi, cccc, wavlev common / handyy / pi, cccc, wavlev

86
6.1.14 BLKDAT.FOR

1 block data blkdat

2

3 include 'ioun.it.'

4 include ' handyy.'

5

6 data inn,iout,idat,isout,iplt,iscr / 5,6,7,8,9,10 /

7

8 data pi / 3 . 14159265E+00 /

9 data cccc / 2 . 99792458E+17 / ! speed of light, (nano-m/sec)

10 data wavlev / 1239.852056 / ! (nano-meters)-(electron-volts)

11

12 end

13

87
6.2 Source Programs

6.2.1 MAIN.FOR

1 program main

2 include ' iounit .

3

4 call fileop ! open input data files

5 call inpdat ! read input data

6 call arrang ! set up pointers

7 itl = istime (i) ! CPU time (milli-sec)

8

9 write (iout.lOl)

10 read (inn,* ,err=21,end=21) ich'oic

11 write (ioUt,102) ichoic

12

13 goto (1,2,3), ichoic

14 goto 22

15

18 1 call scatos ! model > experiment

17 goto 11

18 2 call seekol ! single search for minimum

19 goto 11

20 3 call scano2 ! scan grid ( vary)

21 goto 11

22

23 11 it2 = iftime (i) ! CPU time (milli-sec)

24 it = (it2-itl)/10 ! CPU time (centi-sec) elapsed

25 its = 100 ! clock units / second

26 itm = its*60 ! / minute

27 ith = itm*60 ! / hour

28 itd = ith*24 ! / day

29

30 id = it/itd ! days

31 it = it-id*itd

32 ih = it/ith ! hours

33 it = it-ih*ith

34 im = it/itm ! minutes

35 it = it-im*itm

36 is = it/its ! seconds

37 it = it-is*its ! remaining time in: centi-seconds

38

39 if (id.ne.O) then

40 write (iout.lll) it, is, im, ih, id

41 else if (ih.ne.O) then

42 write (ioutjlll) it, is, im, ih

43 else if (im.ne.O) then

44 write (iout,lll) it, is, im

45 else if (is.ne.O) then

46 write (ioutjlll) it, is

47 else

48 write (iout,lll) it

88
49 oxid

50

51 dos o (iout)

s ^ op

53

54 ^1 WXj.bG ( lOIlt 121) ! error, opening file

0 9 s t op

56 WxX w

( ' +

^ lOUl .122) : error, opwxon cnoxce

57 3 1* op

58

59 lui lorniab (/' \ f Enter

option ' AH h / 12x, ' 1, forward problems J plots, ...

'

0 1

A-Ob / 12x, ' 2, search (vary) '

/ 12x, ' 3, search grid (vary) ')

AQ (

' option = ' , i3 /)

64

65 111 xormab elapsed cpu-time = i3, ' centi-seconds '

66 1 > / + ' , i3 ,

' seconds '

A 7 h /' + '

, i3, ' minutes '

68 K /• + ' , i3 , ' hours '

69 i_ 5 /' + ' , i3, ' days '

70

71 121 format (/' oops

unable to access input data file ')

72 122 format (/' oops

inconsistent with available options')

73

74 end

89
6.2.2 FILEOP.FOR

1 subroutine fileop

2 include 'iounit.'

3

4

5 open ( inn, file='x. inn' ,status='old' , readonly, shared)

6 open (idat ,file= 'x .dat ', status- 'old' .readonly .shared)

7

8 1 open (iout,jlIile='x.out' ,status='old' ,disp='delete' ,err=2)

0 close(iout)

10 goto 1 n 2 open (iout ,f ile= 'x . out ' ,status= 'new '

)

12

13 3 open (isout,file='x.sout' ,status='old' ,disp='delete' ,err=4) ! 8

14 close(isout)

15 goto 3

16 4 continue ! open (isout ,f ile= 'x . sout ' , status= 'new'

)

17

18 5 open (iplt,lile='x.plot' ,status='old' ,disp='delete' ,err=6) ! 9

19 close(iplt)

20 goto 6

21 6 open (iplt,file='x.plot' ,status='new')

22

23 c* 7 open (iscr.f ile='x.scr' ,status='old' ,disp='delete' ,err=8) ! 10

24 c* close(iscr)

25 c* goto 7

26 c* 8 continue ! open (iscr,file='x.scr' ,status='new'

)

27

28 return

29 end

! B

! 7

! 6

90
6.2.3 INPDAT.FOR

1 subroutine inpdat

2 include 'iounit.'

3 include 'defnit.'

4 include 'filmnun.'

5 include 'xprmnt.'

e include 'handyy.' ! pi.cccc.wavlev

7 include 'elmnts.' ! constituent media

8

9 logical Ivary ! test whether something varies

10

11 raddeg = pi/180.0 ! radiems/degree

12

13 c ================================================================

14 c Sub-directory associated with database of constituent media.

15

16 write (iout.lOOl)

17 read (idat,1002) subdir

18 write (iout,1003) subdir

19 write (iout,1004)

20 call Ijchar (subdir) ! left-justify character string

21

22 do i=l,nlmnts

23 llinnts(i) = .false. ! initialize

24 end do

25

26 c ================================================================

27 c The dielectric function of each distinct element is

28 c already available and provided via the subroutines.

29

30 c Distinct widths

31

32 call hhline (idat.iout) ! line of connected hyphens

33

34 write (iout.lOll)

35 read (idat, *) mfilmz

36 write (iout,10i2) mfilmz

37 if (mfilmz. It. 0 .or. mf ilmz .gt .nfilmz) then

38 write (iout,1013)

39 stop

40 end if

41 if (mf ilmz .ne .0) then

42 write (iout,1014)

43 do i=l, mfilmz ! distinct widths

44 read (idat, *) j, z,zu, ivary

45 write (iout.lOlB) j, z.zu, ivary

46 if (j.ne.i .or.

47 k z. It. 0.0 .or. zu.lt. 0.0 .or.

48 t ivary . It . 0 . or . ivary . gt . 2 ) then

49 write (iout.lOie)

50 stop

91
51 end if

52 if (ivary.eq.l .and. zu.eq.O.O) then

53 write (iout,1017)

54 stop

55 end if

'

56 widths (i) = z

57 uwidthCi) = zu

58 Iwidth(i) = ivary

59 end do

60 end if

81 write (iout,1004)

62 C == =: = = = = = :;= == = = = = ===:= = = = = =: = = = = = = = =: = =: = = = = = = = = = = = === = = =========:

63 c Distinct supplementary parameters ' integer

64

65 call hhline (idat.iout) ! line of connected hjrphens

66

67 write (iout,102l)

68 read (idat, *) mipars

69 write (iout,1022) mipars

70 if (mipars .It. 0 .or.

71 & mipars .gt. (nmixtr+nbient)*nparms) then

72 write (iout,1023)

73 stop

74 end if

75 if (mipars .ne .0) then

76 writ® (iout,1024) mipars

77 do i=ljmipars

78 read (idat, *) j, iparm

70 write (iout,102S) j, iparm

80 if (i.ne.j) then

81 write (iout,1026)

82 stop

83 end if

84 iiparm(i) = iparm

85 end do

88 end if \ iiparm

87 writs (ioTit,1004)

88 C = = = = = = = === = = = = = == = = = = = =:== = === = = === = = == = = =: = =:= ====== = =========:

89 c Distinct supplementary parameters ' floating-point

90

ei call hhline (idat,iout) ! line of connected hyphens

92

93 write (iout,1031)

94 read (idat, *) mrpars

95 write (iout,1032) mrpars

98 if (mrpars .It. 0 .or.

97 k mrpars .gt, (nmixtr+nbi0nt)*nparms) then

98 write (iout,i033)

99 stop

100 end if

101 if (mrpars .ne .0) then

102 writs (iout,1034) mrpars

103 do i=l, mrpars

92
104 read (idat , *) j i rparm, uparm, ivary

105 write (iout,1035) j. rparm, uparm, ivary

106 if (i.ne.j .or. uparm . It . 0 . 0 .or.

107 t ivary.lt.O .or. ivary.gt.2 ) then

108 write (iout,1036)

109 stop

110 end if

111 if (ivary.eq.l .and. uparm. eq. 0.0) then

112 write (iout,1037)

113 stop

114 end if

115 rrparm(i) = rparm

116 urparm(i) = uparm

117 Irparm(i) = ivary

118 end do

119 end if ! rrparm

120

121 C write (iout,1004)

122 C Distinct effective media ' mixtures

123

124 call hhline (idat,iout) ! line of connected hyphens

125

126 write (iout.llll)

127 read (idat, *) mmixtr . ! number of distinct mixtures

128 write (iout,1112) mmixtr

129 write (iout,1004)

130 if (mmixtr. It. 1 .or. mmixtr .gt .nmixtr) then

131 write (iout,1113)

132 stop

133 end if

134 mlmnt s = 0 ! total number of elements

135 kk = 0 ! index elements in the mixture

136 ki = 0

137 kr = 0

138 do m=l, mmixtr ! distinct mixtures

139 write (iout,1114) m

140 read (idat, *) mlmnt, mipar, mrpar

141 write (iout,1115) mlmnt. mipar, mrpar

142 if (mlmnt. It. 0 .or. mlmnt . gt.nlmnts .or.

143 k mipar.lt.O .or. mipar . gt.nparms .or.

144 1: mrpar.lt.O .or. mrpar . gt.nparms .or.

145 k (mlmnt+mrpEir .eq. 0) ) then

146 write (iout,1116)

147 stop

148

149 end ifc

150 mv = 0 ! vary count

151 mmlmnt(m) = mlmnt ! number of elements in mixture

152 kklmnt(m) = kk ! offset

153 if (mlmnt .ne.O) then

154 mlmnt s = mlmnt s+mlmnt ! sum element

155 sv = 0.0 1 vary

156 8U = 0.0 ! froz

93
157 write (ioiit,1121)

158 do i=l,mlinnt ! composition

159 read (idat, *) j, limt , frac, ufrac, ivary

160 write (iou.t,1122) j, Imnt, frac, ufrac, ivary

161 if ( j .ne . i . or

.

162 ft Imnt.lt.l .or. litint . gt . nlmnt s .or.

163 ft frac. It. -0.5 .or. frac.gt.1.5 .or.

164 ft ufrac. It. 0.0 .or. ufrac.gt.1.0 .or.

165 ft ivary. It. 0 .or. ivary. gt. 2 ) then

166 write v3.out,1123;

167 stop

168 end 11

169 if (ivary. eq.l .and. ufrac.eq.0.0) then

170 write tiout,1124J

171 stop

172 GIICL 11

173 if Qi.ne.l; then ! redundancy

174 do j=2,i

175 if (Imnt .eq. iiliim,t(kk+2-j)) then

176 write (lout, 1131;

177 stop

178 end if

179 end do

180 end if

181 KK — XK+1 ! index

182 iilmnt^KK; - Xmnt ! distinct element

183 fflmnt(kk) = frac ! volume fraction

184 uflmnt(kk) = ufrac ! uncertainty

185 If Imnt (kk) = ivary ! vary

186 if (If lmnt(kk; . eq. 1; then ! vary

187 mv = mv+1

188 sv = sv+frac

189 else f froz

190 su = su+frac

191 end. IX

192 end do ! elements

193

194 sum = sv+su ! vary+froz

195 if (sum. le. 0.9 .or. sum. gt. 1.1} then ! consistency check

196 write (iout,1132)

197 stop

198 end if

1 QQ

200 if (mv.eq.O) then ! froz

201 if (abs(1.0-su; .gt. l.OE-6; then ! renormalize

202 write (iout5ll33)

203 j = kk-mlmnt

204 do i=l ,mlmnt

205 j = j + 1 206 fflmnt(j) = fflmnt(j)/su ! volume fraction

207 end do

208 end if

209 else if (mv.eq.l) then ! inconsistency

94
210 write (iout,1134)

211 stop

212 else ! mv > 1

'

213 j = kk-mlmnt ! convenience

214 ii (su .gt. 1.0) then ! consistency check

215 write (iout,1135)

216 stop

217 end it

218 if (sv .eq. 0.0) then ! renorm equally

219 write (iout,1136)

220 sv = (1 .0-su)/f loat(mv)

221 do i=l,mlmnt

222 j = j+1

223 il (If linnt(j) .eq.l) then

224 fflmnt(j) = sv ! volume fraction

225 end if

226 end do

227 else if (absCl.O-suin) .gt. l,0E-6) then ! renorm linearly

228 write (iout,1137)

229 V = (1.0-su)/sv ! vary(new)

230 do i=l,mlmnt

231 j = j+1

232 if (Iflmnt(j) .eq.l) then

233 fflmnt(j) = v*fflmnt(j) ! volume fraction

234 end if

235 end do

236 end if

237 end if ! element test, vary+froz

238 end if ! composition of elements

239 mvlmnt(m) = mv

240 C

241 miparm(m) = mipar ! number

242 kiparm(m) = ki ! offset

243 if (mipar .ne.O) then

244 write (iout,1141) mipar

245 do i=l, mipar

246 read (idat, *) j,ip ! pointers

247 write (iout,1142) j.ip

248 if (j.ne.i .or. ip.lt.l .or. ip.gt .mipars) then

249 write (iout,1143)

250 stop

251 end if

352 if (i.gt.l) then ! redundancy

253 do im=2,i

254 if (ip .eq. jiparm(ki+2-im) ) then

255 write (iout,1144)

256 stop

257 end if

258 end do

259 end if

260 ki = ki+1

261 jiparm(ki) = ip ! distribution

262 end do

95
263 end. iz

264 C

265 mv = 0

266 nirparm(m) = mrpar ! number

267 krparm(m) = kr ! offset

268 if (mrpar .ne . 0) then

269 write (iout,1161) mrpar

270 do i=l, mrpar

271 read (idat, *) jjip ! pointer

272 273 if (j.ne.i .or. ip.lt.l .or. ip .gt .mrpar s) then

274 wribS ^loubfiiooj

275 stop

276 end if

277 If ^i.gt.lj tiien ! redundzmcy

278 do im=2

,

2. 279 if (ip .eq. jrparm(kr+2-im)) then

280 write ^ioui;,iib%y

281 stop

282 tart 1^ "1 -P 283 AVI .4 eno. uo

284 end if

ZOO 286 jrparm(kr) = ip ! distribution

287 if (Irparm(ip) . eq^. 1) mv=mv+l

288 end do

289 eno. iz

290 mvparm(m) = mv

291 c

292 write (iout,1004)

293 end do i mixtures

294 c

295 c Ambients t external parameters

296 297 call hhline (idat.iout) ! line of connected hyphens

298

299 write (iout,1211)

300 read (idat, *) mbient

301 write (iout,12i2) mbient

302 if (mbient. It. 1 .or. mbient .gt .nbient) then

303 write (iout,1213)

304 stop

305 end if

306 write (iout,1214)

307

308 do m=l, mbient

309 read (idat, *) j, imix, mipar, mrpar ! additional

310 write (iout,12iE) j, imix, mipar, mrpar ! parameters

311 if ( j . ne . m . or

.

312 k imix .It.l .or. imix.gt .mmixtr .or.

313 k mipar. It. 0 .or. mipar .gt .nparms .or.

314 & mrpar . It . 0 . or . mrpar . gt . nparms ) then

315 write (iout,1216)

96
316 Stop

317 end if

318

319 if (mvlmnt(imix) .ne .0 .or, m\'parm(imix) .ne.O) then

320 write (iout,1217)

321 stop

322 end if

323

324 mixinbn(m) = imix ! specify the mixture composing the ambient

325 mm = mmixtr+m ! offset

326

327 miparm(mm) = mipar ! number

328 kiparm(mm) = ki ! offset

329 if (mipar .ne.O) then ! parameters

330 write (iout,1221) mipar

331 do i=l, mipar

332 read (idat, *) j.ip ! point to: iiparm

333 write (iout,1222) j.ip

334 if (j.ne.i .or. ip.lt.l .or. ip.gt .mipars) then

335 write (iout,1223)

338 stop

337 end if

338 if (i.ne.l) then ! redundancy

339 do j=2,i

340 if (ip .eq. jiparm(ki+2-j ) ) then

341 write (iout,1224)

342 stop

343 end if

344 end do

345 end if

346 ki = ki+i

347 jiparm(ki) = ip {distribution

348 end do

349 end if

360

351 mv = 0

352 mrparm(mm) = mrpar ! number

353 krparm(mm) = kr ! offset

354 if (mrpar .ne.O) then ! parameter

355 write (iout,1231) mrpar

366 do i=l, mrpar

867 read (idat, *) j.ip ! point to: rrparm

358 write (iout,1232) j.ip

359 if (j.ne.i .or. ip.lt.l .or. ip.gt .mrpars) then

360 write (iout,1233)

361 stop

363 end if

363 if (i.ne.l) then ! redundancy

364 do j=2,i

365 if (ip .eq. jrparm(kr+2-j ) ) than

366 write (iout,1234)

367 stop

368 end if

97
369 end do

370 end if

371 kr = kr+1

372 jrparin(kr) = ip ! distribution

373 if (Irparm(ip) .eq. 1) mv=mv+l

374 end do

375 end if

376 mvpRrm(mm) = mv

377

378 end do ! ambients + external parameters

379 write (iout,1004)

380 C == =================== = ==== ============== = ====:= ================:==

381 c Construction of sample configuration ' layered structure.

382 383 call lililine (idat,iout) ! line of connected hyphens

384

385 write (iout,131l)

386 read (idat, *) msampl

387 write (iout,13i2) msampl

388 write (iout,1004)

389 if (msampl. It. 1 .or. msampl. gt .nseunpl) then

390 write (iout,13i3)

391 stop

392 end if

393

394 k = 0

395 do is=l,msaunpl ! films/substrate

396 write (iout,1321) is

397 read (idat, *) mfilm

398 write (iout,1322} mfilm, is

399 if (mfilm. It. 0 .or. mfilm. gt .nfilms) then

400 write (iout,i323)

401 stop

402 end if . 403 mmfilm(is) = mfilm

404 kkfilm(is) = k ! offset

405 mfilms = mfilm+1 ! films , substrate

406 Ivary = .false. ! something should vary

407

408 write (iout,1331)

400 do m=l, mfilms

410 if (m.aq. mfilms) than

4tl read (idat, *) j, imixtr

412 write (iout,1332) j, imixtr

413 else

414 read (idat, *) j, imixtr, iwidth

418 write (iout,1333) j, imixtr, iwidth

416 if (iwidth. It. i .or. iwidth. gt .mfilmz) then

417 write (iout,i334)

418 stop

419 end if

420 k = k+1

421 iifilm(k) = iwidth

98
422 Ivary = Ivary .or. ( lwidth(iwidth) .eq.l) ! test vary

423 end if

424 il (imixtr.lt.l .or, imixtr.gt.mmixtr) then

425 write (iout,1335)

426 stop

427 end if

428 if (j.ne.m) then ! sequential indexing

420 write (iout,1336)

430 stop

431 end if

432 if (m.ne.l) then ! adjacency of mixtures

433 if (m.eq.mf ilms) then

434 kback = k ! previous mixture

435 else

436 kback = k-1 ! previous mixture

437 end if

438 if (imixtr .eq. iif ilm(kback) ) then ^ 439 mv = mvlmnt (imixtr )+mvparm(imixtr)

440 if (mv .ne. 0) then

441 write (iout,1337)

442 stop

443 end if

444 end if

445 end if

446 k = k+1

447 iifilm(k) = imixtr

448 Ivary = Ivary .or. (mvlmnt (imixtr) .ne . 0)

449 k .or. (mvparm(imixtr) .ne .0)

450 end do ! films

451

452 c* if (.not. Ivary) then ! something should vary, however

453 c* write (iout,1338) ! in SCAT02 we allow (mv=0)

454 c* stop ! so as to discern:

455 c* end if ! d() /d(incident angle)

456 457 write (iout,1004)

458 end do ! sample

450 c ================================================================

480 c Test compactness of domain variables.

461 462 C ================================================================

463 c Measurement data of ellipsometric angles by instrumentation.

464

486 call hhline (idat.iout) ! line of connected hyphens

460 467 ias =0 ! ambient , sample

468 iras =0 ! repeat , ambient , sample

469 i = 0 ! expt, repeat, sunbient, sample

470 ii = 0 ! overflow

471 nexpt = nwaves*nanglx ! convenience

472 do is=l,msampl

473 write (iout,14il) is

474 read (idat, *) mbien ! number of ambients

99
475 write (ioiit,1412) mbien,is

476 if (mbien.lt.l .or. mbien. gt .mbient) then

477 write (iout,1413)

478 stop

479 end if

480 mmbent(is) = mbien ! number of ambients

481 do mbn=l, mbien ! distinct ambients

482 X7rXbO \,XOXLZ fX'tZxJ

483 xQau \lCLaw^ J luxpoau j XlIlDieil 484 write (iout,1422) mrpeat, imbien

485 if (mrpeat. It. 1 .or. mrpeat . gt .nrpeat .or.

486 Sc imbien. It. 1 .or. imbien. gt .mbient ) then

487 write Ciout,1423;

488 stop

489 end if

490

491 U.O J— <fi,mDn 492 if (imbien .eq. iibent(ias+2~j ) ) then

493 wrxxe ^xoub . iiziy

494 s t op

495 end if

496 end do

497 end if

498

499 ias = ias+1

500 iibent(ias) = imbien ! specify ambient

501 mmpeat(ias) = mrpeat ! number of repeats

502 do irpeat=l , mrpeat

503 write (iout,1431)

504 read (idat, *) mexpt

505 write (iout,1432) mexpt

506 if (mexpt. It. 1 .or. mexpt .gt .nexpt J then

507 write (iout,1433) nexpt

508 stop

509 end if

510 iras = iras+1

511 mmexpt(iras) = mexpt ! number of experiments

512 write (iout,1441)

513 do ixpt=l, mexpt .

! (wave, incident angle)

514

515 read (idat, *) j, wave.angl, delta, psi

516 write (iout,1442) j, wava.angl, delta, psi

517 read (idat, ) wavu,angu, dalu,psiu

518 write (iout,1443) wavu.,angu, dolu,psiu

519

520 if (delta .It. 0.0) then ! [0, 360)

521 delta = delta + 360.0

522 else if (delta .ge. 360.0) then

523 delta = delta - 360.0

524

525 end ifC

526 C The above measurement data is found from instrumentation.

527 c Azzam and Horowitz assume: n-ik > (Delta, psi) (Nebraska)

100
528 C

529 c

530 c

531

532 533

534

535 c

536

537

538

539

540

541 542 543 544

545 c*

546 c*

547 c*

548

549

550

551 552 553

554

555 sse

557

568 559

580

561 • 562 563

564

565 566 667

568

569

570

571 572 573

574

575 576 577

578

579 580

Here, we assume: n+ik > (Delta, psi) (physics ) The convention affects only Delta.

The relationship is: (physics) < conjg (Nebraska)

if (delta .ne. 0.0) then

delta = 360.0 - delta

end if

if (wave .It. 0.0) then

if (wave .It. -1240.0 .or. wave .gt. -200.0 .or. wavu . le . 0 . 0 . or

.

wavu .gt. 1000.0 ) then

write (iout,1444)

stop

end if wavu = -wavu/wave

wave = -wavlev/wave wavu = wave*wavu

else if (wave .It. 1.0 .or. wave .gt. 6.0 .or. wavu .It. 0.0 .or. wavu . gt . 6 . 0 ) then

write (iout,1444)

stop

end if

wavelength nm

> 0 eV

eV

energy

if (angl It 0 0 . or

.

angl gt 90 0 . or

.

angu It 0 0 .or. angu gt 1 0 .or. psi It 0 0 . or

.

psi gt 90 0 . or

.

psiu It 0 0 . or

.

psiu gt 1000 0 .or. delta .It 0 0 . or

.~ delta ge 360 0 .or. delu It 0 0 . or

.

delu gt 1000 0 ) then

write (iout,1444)

stop

end if

angu = amaxl (angu, 0.01)

delu = amaxl (delu, 0.01)

psiu = amaxl (psiu, 0.01)

! convenenience

angl = angl *raddeg

angu = angu *raddeg

psi = psi *raddeg

psiu = psiu *raddeg

delta = delta*raddeg

delu = delu *raddeg

! radian < degree

if (i.lt .nexpts) then

i = i+1

wavlns(i) = wave wavlnu(i) = wavu

-nm, +eV

101
581 angles (1) = angl ! radians

582 angleu(i) = angu

583 psiiis(i) = psi

584 psiiiu.(i) = psiu

585 deltas(i) = delta

586 deltau(i) = delu

587 else ! overflow

588 ii = 11+1

589 end if

590 end do ! experiment , measurement

591 write (iout,1004) ! blank line

592 593 end do ! repeat

C

594 end do I ambient

595 end do ! sampl e

596

597 i± (ii.ne.O) then

598 i = i+ii

599 writ e (iout,1445) nexpts.i

600 stop

601 end if

602 mexpts = i ! number of measured data

603

604 return

605 606 1001 format (

' Enter: sub-directory for constituent media' ) 607 1002 format ( a)

608 1003 format ( sub-directory ' ' , a)

609 1004 format (

' ')

6).0

611 1011 format (

' Enter: mfilmz ' number of distinct widths')

612 1012 format ( Ix, 14, 7x, 'mfilmz " number of distinct widths')

613 1013 format ( / ' ... oops

,

inconsistency'

)

614 1014 format (

' Enter: ', 24x, 'i,z,zu,ivary'

)

615 1015 format ( Ix, 14, 2fl0.3, 15, 4x, 'i,z,zii,ivary'

)

616 1016 format ( / ' ... oops

,

inconsistency '

)

617 1017 format ( / ' ... oops

,

let: zu > 0.0')

618

619 1021 format (

' Enter

mipars " number of parameters (integer )')

620 1022 format ( Ix, 14, 7x, 'mipars ' number of parameters (integer )')

621 1023 format ( / ' ... oops

,

inconsistency'

)

622 1024 format (

' Enter: ', 13x, 'j, iparm (# items=' ,12, '

)

') 623 1025 format ( Ix, 14, 4x, 110, 4x, 'j, iparm')

624 1026 format ( / ' ... oops

,

inconsistency'

)

625 626 1031 format (

' Enter: mrpars ' number of pareimeters ' , 627 ii ' (floating-point) '

)

628 1032 format ( Ix, 14, 7x, 'mrpars ' number of pareimeters ' , 629 Ii ' (floating-point) '

)

630 1033 format ( / ' ... oops

,

inconsistency '

)

631 1034 format (

' Enter: j, rparm, uparm, ivary (# items=',i2. ')')

632 1035 format ( Ix, 14, 3x, Ip2el3.5, 4x, 11, 4x,

633 ft ' (j ,rparm, uparm, ivary) ' )

102
634 1036 format (/' ... oops, inconsistency')

635 1037 format (/' ... oops, let: uparm =/= 0.0 ') 636

637

638 1111 format (

' Enter: mmixtr ' number of distinct mixtures')

639 1112 format ( Ix, i4, 7x, 'mmixtr ' number of distinct mixtures')

640 1113 format (/' ... oops, inconsistency')

641 1114 format (

' Enter: mlmnt , mipar, mrpar (mix #',i2,')')

642 1115 format ( Ix, 3i4, 3x, 'mlmnt, mipar, mrpar')

643 1116 format (/' ... oops, inconsistency')

644

645 1121 format (

' Enter: ', 30x, 'j, Imnt, frac, ufrac, ivary')

646 1122 format ( Ix, i4, iB, 2fl0.5, iB, 5x,

647 ft 'j, Imnt, frac, ufrac, ivary')

648 1123 format (/' ... oops, inconsistency')

649 1124 format (/' ... oops, let: ufrac > 0.0')

650

651 1131 format (/' ... oops, redundancy among: Imnt')

652 1132 format (/' ... oops, sum of fractions not equal to unity')

653 1133 format (/' Note: renormalizing frozen fractions,'

654 t /' since the mixture in the layer is frozen')

655 1134 format (/' ... oops, unable to vary one fraction, alone')

656 1135 format (/' ... oops, constraint upon: vary')

657 1136 format (/' Note: renormalizing vary fractions, equally ') 658 1137 format (/' Note: renormalizing vary fractions, linearly')

659

660 1141 format (

' Enter: ', 4x, 'j, iiparm (# items =',i2,')')

661 1142 format ( Ix, i4, iB, 4x, 'j, iiparm')

662 1143 format (/' ... oops, inconsistency')

663 1144 format (/' ... oops, redundemcy in: iparm')

664

665 1151 format (

' Enter: ', 4x, 'j, irparm (# items =',i2,')')

666 1152 format ( Ix, i4, i5, 4x, 'j, irparm')

667 1153 format (/' ... oops, inconsistency')

668 1154 format (/' ... oops, redundancy in: irparm')

669 670

671 1211 format (

' Enter: mbient ' number of distinct ambients')

672 1212 format ( Ix, i4, 7x, 'mbient ' number of distinct ambients')

673 1213 format (/' ... oops, inconsistency')

674 1214 format (

' Enter: ', 14x, 'j, imix, mipar, mrpar')

675 1215 format ( Ix, i4, 3i5, 4x, 'j, imix, mipar, mrpar')

676 1216 format (/' ... oops, inconsistency')

677 1217 format (/' ... oops, the ambient mixture should NOT vary,'

678 I; /' but the ambient parameters may vary')

679

680 1221 format (

' Enter: ', 4x, 'j, iiparm (# items=', i2, ')')

681 1222 format ( Ix, i4, iB, 4x, 'j, iiparm')

682 1223 format (/' ... oops, inconsistency')

683 1224 format (/' ... oops, redundancy ') 684

685 1231 format (

' Enter: ', Bx, 'j, irparm (# items=', i2, ')')

686 1232 format ( Ix, i4, i5, Bx, 'j, irparm')

103
687 1233 format (/' ... oops, inconsistency')

688 1234 format (/' ... oops, redundancy ') 689 690

691 1311 format (

' Enter: msampl ' niunber of samples')

692 1312 format ( Ix, i4, 7x, 'msampl ' number of samples')

693 1313 format (/' ... oops, inconsistency')

694

695 1321 format (

' Enter: mfilm ' number of films on seunple #', i2)

696 1322 format ( Ix, i4, 7x, 'mfilm ' number of films on seunple #', i2)

697 1323 format (/' ... oops, inconsistency')

698

699 1331 format (

' Enter: ', lOx, 'j, imix, iwidth' , 4x,

700 ft ' (film/ substrate) '

)

701 1332 format ( Ix, i4, i5, lOx, 'j, imix ')

702 1333 format ( Ix, i4, 2i5, 5x, 'j, imix, iwidth')

703 1334 format (/' ... oops, inconsistency in: iwidth')

704 1335 format (/' ... oops, inconsistency in: imixtr')

705 1336 format (/' ... oops, inconsistency in: j ')

706 1337 format (/' ... oops, two adjacent mixtures are identical,'

707 & /' yet undergoing variation. Why ? ')

708 1338 format (/' ... oops, inconsistency ' nothing is varying'

709 . & /' neither width nor mixture pareuneter')

710

711

712 1411 format (

' Enter: mbien ' number of ambients on sample #',

713 ft i2)

714 1412 format ( Ix, i4, 7x, 'mbien ' number of ambients on sample #',

715 ft i2)

716 1413 format (/' ... oops, inconsistency')

717

718 1421 format (

' Enter: ', 4x, 'mrpeat, imbien')

719 1422 format ( Ix, i4, i5, 4x, 'mrpeat, imbien')

720 1423 format (/' ... oops, inconsistency')

721 14 24 format (/' ... oops, redundemcy ')

722

723 1431 format ( ' Enter: mexpt ' number of measurement data')

724 1432 format ( Ix, i4, 7x, 'mexpt " number of measurement data')

725 1433 format (/' ... oops, inconsistency, nwaves*nanglx=' , i5)

726 727 1441 format (

' Enter:. j, wavln (nm) , angli , delta,psi (degree)'

728 ft /' wavlnu , anglu,deltu,psiu '/)

729 1442 format ( Ix, i4, flO.3, flO.3, flO.3, flO.3,

730 ft 5x, '(j, wavln, angli, delta, psi )')

731 1443 format ( 5x, flO.3, flO.3, flO.3, flO.3,

732 & 5x, '( wavlu,juiglu, deltu,psiu) '

)

733 1444 format (/' ... oops, inconsistency')

734 1445 format (/' ... oops, increase the value of: nexpts'

735 ft /' from:', i5, ', to:', i5)

736 737 end

104
6.2.4 SCATOS.FOR

1 subroutine scatos ! simulate measurement data

2 include 'iounit.'

3 integer choice

4

5

6 write (iout.lOl) ! measurements vs. grid scEin

7 read ( inn, *) choice ! involving source variables

8 write (iout,102) choice ! photon energy, and

9 ±1 (choice. It. 1 .or. ! smgle ol incidence

10 ft choice. gt. 2 ) then

11 write (iout,103)

12 stop

13 end if

14

15 if (choice . eq . 1) then ! measurements: (E,a)

16 write (iout.lll)

17 read ( inn, *) choice

18 write (iout,112) choice

19 if (choice. ge.l .and.

20 k choice. le. 3 ) then

21 call scatol (choice)

22 else if (choice . eq. 4) then

23 call scanol

24 else

25 write (iout,113)

26 stop

27 end if

28

29 else if (choice. eq. 2) then ! grid scan: (E,a)

30 write (iout,12l)

31 read ( inn, ) choice

32 write (iout,122) choice

33 if (choice. It. 1 .or.

34 ft choice. gt. 6 ) then

35 write (iout,123)

36 stop

37 end if

38 call Bcato2 (choice)

39 end if

40

41 return

4243 101 format (/' Enter: choice of incident (energies, angles)'

44 ft / 12x, '1, measurement data, x.dat'

46 ft / 12x, '2, grid scan. ')

46 102 format ( ' choice -

' , i3)

47 103 format (/' scatos, ... oops, inconsistent choice')

48

49 111 format (/' Enter: choice of output suitable for: '

50 ft / 12x, '1, input data, x.dat, '

105
51 k / 12x, '2, plotting (Delta, psi), '

52 t / 12x. '3, plotting (Delta, psi) deviations,'

53 ft / 12x, • deviation = measurement - model,'

54 ft / 12x, '4, plotting Igl ' rms deviation, unsealed.

55 ft / 12x, ' on a ID or 2D grid of model parameters

.

56 112 format (

' choico = ' . i3)

57

58 113 format (/' scat OS

,

... oops, inconsistent choice')

59 121 format (/' Enter

choice of output suitable for: '

60 ft / 12x, '1, dielectric function, media,'

61 ft / 12x. '2. (Delta, psi), x.dat,'

62 ft / 12x, '3, (Delta, psi), plotting,'

63 ft / 12x, '4, d/db, b'(z,f,p),'

64 A I Ask BTlffHA ^^f*^AtkT\f*Wk '

65 ft / 12x, '6, d/dE, energy . '

)

66 122 format (

' choice = '. i3)

67

68 123 format (/• scatos

,

... oops, inconsistent choice')

68 end

106
6.2.5 SCATOI.FOR

1 c

2 c Input the remgo parameters for the grid scan, (energy, angle)

3 c

4

5 subroutine scatoi (mevs , evl, ev2, ev3,

6 k n^ang, angl, ang2, ang3 ) 7 include ' iounit .

8 include 'handyy.' ! pi , cccc , wavlev

9

10 c

11 c Optical frequency, wavelength, or associated photon energy.

12 c : 13

14 write (iout,lll) ! incident energy

15 read ( inn, *) evl, ev2, ev3 ! -nm, +eV

16

17 if (evl. It. 0.0 .and. ev2.gt.0.0 .or. ! no mixing

18 k evl. gt. 0.0 .and. ev2.lt. 0.0 .or.

19 k evl.gt.ev2 ) then

20 write (iout,114)

21 stop

22 end if

23

24 if (evl ,lt. 0.0) then

25 write (iout,112) evl, ev2 , ev3 ! -nm, wavelength

20 if (evl .eq. ev2) then

27 m = 1 ! number of steps

28 else if (ev3 .eq. 0.0) then

29 m = 2

30 else

31 m = max (l, nint (abs ( (ev2-evl)/ev3 )))

32 end if

33 evl = -wavlev/evl ! +eV, energy

34 ev2 = -wavlev/ev2

35 ev3 = (ev2-evl)/f loat (max (1, m-1))

36 end if

37 write (iout,113) evl, ev2, ev3

38

39 if (evl. It. 1.0 .or. ev2.gt.6.0 .or. ! Check-test

40 It ev3.lt. 0.0 .or. ev2.lt. evl ) then

41 write (iout,114)

42 stop

43 end if

44

45 if (evl.eq.ev2) then

46 mevs = 1 47 ev3 =0.0

48 else if (ev3.eq.0.0) then

49 mevs =2

60 ev3 = ev2-evl

107
51 else

52 ev4 = ev2-evl

53 mevs = 1 + nint (ev4/ev3)

54 if (mevs.eq.l) then

55 ev3 = ev4

56 else

57 ev3 = ev4/float (mevs-1)

58 end if

59 end if

60

61 C

8233

c Angle of incidence

c

64

65 write (iout,12l) ! incident angles

66 read ( inn, *) angl , ang2i ang3 ! degrees

67 write (iout , 122) angl, ang2, ang3

68 if (angl. It. 0.0 .or. ang2.gt.90.0 .or.

69 1iz ango . JLt . u . 0 . or . angz . iz . angl / tnen

70 write (iout, 123)

71 stop

72 end if

73

74

•if (etngl . eq. ang2) then

75 mang = 1 76 ang3 =0.0

77 elsa if (angS.eq.O.O) then

78 mang = 2

79 ang3 = ang2-ELngl

80 else

81 ang4 = ang2-angl

82 mang = 1 + nint (ang4/ang3)

83 if (mang.eq.l) then

84 ang3 = ang4

85 else

86 angS = ang4/float (mem.g-1)

87 end if

88

89 end ifc

90 write (iout, 131)

91

02 return

94 111 format (/' Enter: range of incident energies (eV)'

95 Iic /'or: - wavelengths (nm)

96 Ii /' Enter: evl, ev2, ev3 ') 97 112 format ( Ix, 3fl0.2, lOx, 'wavelength (nm) '

)

98 113 format ( Ix, 3fl0.4, lOx, ' energy (eV)')

99 114 format (

' ... oops, inconsistent')

100

101 121 format (/' Enter: range of incident angles (degrees) '

102 ft /' Enter: anglel, em.gle2, amgleS ')

103 122 format ( Ix, 3fl0.4, lOx, 'al,a2,a3')

108
104 123 format (

' ... oops, inconsistent')

105

106 131 format (

' ') 107

108 end

109
6.2.6

1

2

3 C

4 C

5 C

6 C

7

8 C

9 c

10 c

11 c

12 c

13 c

14 c

1

5

16 c

17 c

18

19

20

212233

24

252627

28

29ou

31

32

34

353637

38

39

40

414243

44

454647

48

49

50

SCATOl.FOR

subroutine scatol (lease)

Retain and use information specifying the configuration of the:

1) source probe " (angle of incidence, wavelength)

2) sample geometry ' (z,f,p)

Calculate the forward scattering problem ' (Delta, psi)

.

Simulate ellipsometric measurements of (Delta, psi).

Format the output scattering data (Delta, psi):

1) suitable for INPDAT

2) suitable for plotting

3) suitable for plotting differences in the fit.

difference = experiment - model

The template for this routine is from: ASMBL

include ' iounit

.

include ' defnit

.

include 'f ilmmm.

include ' xprmnt

.

include ' arrayd.

include ' arrays

.

include ' filrass

include • abcdef

include * handyy

.

logical first

,

raddag = 180.0/pi

mmm = mf ilmz+mlmnts+mrpars

do m=l,mmm

if (iptw(m) .ne .-1) then

iptw(m) = 0 end if

iptx(m) = 0 end do

! local, column in a row of: aa

! utilized

! global > local into: aa

! local > global into: iptw

izs - 0 ias = 0 iras = 0 ixpts = 0

(z,e) , sample

ambient , sample

repeat , ambient .sample

expt .repeat , ambient , sample

write (iplt.lOi) msampl

do is=l.m.sampl

mfilm = mmfilm(is) ! FILMSS

110
51 mfilms = mfilm+1 ! films/substrate

52 mfilma = mfilin+2 ! ambient/films/substrate

53 mzs = mfilm*2+l ! (z,o),(e)

54 mv = 0 ! local, unique, vary

55

56 do m=l, mfilms

57 if (m.ne .mfilms) then ! films

58 izs = iz8+l ! widths

59 iwidth = iifilm(izs)

60 zzz(m) = widths (iwidth) ! FILMSS

61 if (Iwidth(iwidth) .eq, 1) then ! vary

62 j = iwidth

63 if (iptw( j ) .eq.O) then ! unique, compress

64 rav = mv+1 ! local

65 iptw(j ) = mv

66 iptx(rav) =

j 67 end if

68 end if

69 end if

70 izs = izs+i ! films/substrate

71 imixtr = iifilm(izs) ! mixture

72

73 mixflm(m) = imixtr ! initialize

74 '

75 mvlmn = mvlmnt (imixtr) ! vary

76 if (mvlmn. ne.O) then ! fraction

77 first = .true. ! constraint, l=u+v

78 mmlmn = mmlmnt (imixtr) ! quantity

79 kk = kklmnt (imixtr) ! offset

80 do lmn=l, mmlmn

81 kk = kk+1 ! monotonic

82 if (Iflmnt(kk) .eq.l) then ! vary

83 j = mfilmz+kk ! global

84 if (first) then ! constraint on: dv(l)

85 first = .false.

86 else if (iptw( j ) .eq.O) then

87 mv = mv+1 ! local unique

88 iptw(j ) = mv

89 iptx(mv) = j 90 end if

91 end if ! vary

92 end do ! fraction

93 end if ! something varies

94

95 mvpar = mvparm (imixtr) ! vary

96 if (mvpar. ne.O) then ! parameter

97 mrpar = mrparm( imixtr) ! quantity

98 kr = krparm( imixtr) ! offset

99 do irp=l, mrpar

100 kr = kr+1 ! offset

101 ip = jrparm(kr) ! specify index

102 if (Irparm(ip) .eq.l) then ! vary

103 j = mf ilmz+mlmnts+ip ! global, unique

111
104 if (iptw( j ) . eq. 0) then ! imiquo

105 mv = mv+1 ! local, compress, aa

106 iptw(j ) = mv

107 iptx(mv) =

j 108 end if

109 end if ! vary- no end do ! parameters

111 end if ! something varies

112 end do ! mfilms

113

114 mvsav = mv ! convenience

115 mbien = mmbent(is) ! quantity

116 117 write (iplt,102) mbien

118

119 do mbn=l, mbien ! ambients

120 ias = ias+1

121 mrpeat = mmpeat(ias)

122 imbien = iibent(ias) ! specify ambient

123 imixtr = mixmbn(imbien) ! mixture used as ambient

124

125 mixf lm(mfilms+l) = imixtr

128 mv = mvsav

127

128 write (iplt,103) mrpeat, imbien

129 130 mvlmn = mvlmnt (imixtr) ! vary

131 if (mvlmn. ne.O) then ! fractions

132 first = .true.

133 mmlmn = mmlmnt (imixtr)

134 kk = kklmnt (imixtr) ! offset

135 do lmn=l, mmlmn ! fractions

136 kk = kk+1

137 if (If lnm.t(kk) . eq. 1) then ! vary

138 j = mfilmz+kk

139 if (first) then i constraint

140 first = .false.

141 else if (iptw( j ) .eq.O) then

142 mv = mv+1 ! local, compress

143 iptw(j ) = mv

144 iptx(mv) =

j 145 end if

146 end if i vary

147 end do ! fractions

148 end if ! something varies

149

150 mvpar = mvparm( imixtr) ! vary

151 if (mvpar. ne.O) then ! parzimeters

152 mrpar = mrparm(imixtr)

153 kr = krparm(iraixtr) ! offset

154 do irp=l, mrpar

155 kr = kr+1

156 ip = jrparm(kr) ! specify index

112
157 if (irpariii(ip) . eq. 1 ) then

158 T — mf iXmz+mlrTvn't s + i "n

1 59 V " " \ J / • v y wXLOXL a 11T1 LULXU 1 miU«3A

TTIV iU V — TTlV+i ill V i 161 w w \ J J — mV 102 iptxCniv) —

j 163 oxicl i.£ 164 end. if

165 end do

166 end if

167

168 mm = mmixtr+imbien offset J ambient

169 mv^ar ill V fc^ — mvTsaTin ilk V *" t mrn ) \ •••'IL J vary

170 xf. Cnivpar .ne . 0} tlien paramet er

171 mxpar — mrparm(nuu) cj^uantity

172 kr = krparm(mm) offset

173 do irp=l ,mrpar

1 1 % kr — kr+1 V X X 9 w U 175 ip —

j rp arm ( kr ) specify index

176 if (XrparmCip) . ecj^. 1 ) then vary

I { { 1 iilX X JLili^ illJLlLLLL W 0 • X W gXobal

1 7fl 1 f O JL X ^ ~ H *' V J y * ^ / WXLOXL iiTi T mi a

1 7Q mvill V — ill mv+i. VTA ToeaX V w p cW onrnres S^ilLh/ A O O sO y 180

181 182

1 fiQ io^ 184

185 end ! something varies

186 187 ravari = mv local qucmtity

188 yet need row; delta

189

190 uO IX pe a w ~ J. 1 lux poa b

yfiTifl X n t R "ff sj o.y a

191 iras = iras+1

192 moxpt = minsxp't ( iras ) 193 In — ^

194 Wx X w O ^ J.px w g X / {iio w 1 lu Tl5r Tin /Ti 3C 11^ 195

196 do ixpt=l ,inexpt measurements

197 ixpts = ixpts+l

198

199 wavlzil = wavIns (ixpts) -nm, +eV

200 wavln2 - vavlnuCixpts

)

201 angle 1 = angles (ixpts) radiams

202 Cuigxez — ongxeu^iAp b a ^ 203 uolX — uoxxxa\ XA H w o y Tadi ans

204 psj.z — ps XXxU. V w s y 205 deltal = deltas(ixpts) radians

208 delta2 = deltau(ixpts)

207

208 do m=l ,mf ilma ! initialize, indicate

209 i = mixflm(m)

113
210 llirstx(i) = .true. ! need of evaluation

211 end do

212

213 C Discern: dielectric functions (z)

214

215 imixtr = mixmbn(imbien) ! ambient

216 jlirstx(imixtr) = .false.

217 call diefcn (imbien, imixtr, imglel, wavlnl.

218 ft dielec( imixtr), dielen( imixtr)

,

219 ft dielff (1 , imixtr)

,

220 ft dielppCi .imixtr) , dielpa(l , imixtr))

221

222 izs = izs-mzs ! reset pointer

223 do m=l ,mf ilms

224 if (m.ne .mf ilms) then ! skip widths

225 izs = izs+1

226 end if

227 izs = izs+1

228 imixtr = iifilm(izs)

229 if (f irstx(imixtr)) then ! first

230 f irstx(imixtr) = .false.

231 call diefcn (imbien, imixtr, , 232 ft anglel, «avlnl.

233 ft dielecC imixtr). dielew( imixtr)

,

234 ft dielffd , imixtr)

,

235 & dielpp(l , imixtr)

,

dielpa(l,imixtr))

236 end if

237 die(m) = dielec(imixtr)

238 end do ! films

239

240 isampl = is

241 izsmpl = izs-mzs i reset index

242 call scattr (wavlnl, anglel,

243 ft isampl, izsmpl, imbien, mvari)

244

245 angl ' = angle l*radd®g ! degrees

246 psi = b(l) *raddQg

247 delta = b(2) *raddeg

248 au = angle2>*'raddeg

249 pu = psi2 *raddeg

250 du = delta2'<<raddeg

251

252 if (delta. It. 0.0) then ! [0,360)

253 delta = delta + 360.0

254 end if

255 if (delta. ne. 0.0) then ! phase shift

256 delta = 360.0 - delta

257 end if

258

259 C

260 c Now, consider the distinct formats for output

261

262 if (icase .eq. 1) then ! for INPDAT

114
263 write (iplt.lOB) ixpt, wavlnl ,«mgl, delta, psi

264 write (iplt,106) wavln2, au, du, pu

265 266 else if (icase .eq. 2) then ! lor plotting

267 write (iplt.lOB) ixpt, wavlnl ,angl, delta, psi

268

269 else if (icase .eq. 3) then ! diff = expt-model

270 dpsi = ( psil-b(l)) *raddeg ! degrees

271 c* ddel = (deltal-b(2)) raddeg

272 call differ (deltal, b(2), diff)! deviation, mod fen

273 ddel = diff *raddeg

274 write (iplt,107) ixpt, wavlnl ,angl, ddel, dpsi

275 else ! oops

276 call exit (2)

277 end if

278 c

379 end do ! measurements

280 end do ! repeats

281 282 if (mv .gt .mvsav) then ! reset unique-ness

283 mvl = mvsav+1

284 do i=mvl,mv

285 j = iptx(i) ! point to: iptw

286 iptw(j) = 0 ! unique-ness

287 iptx(i) = 0

288 end do

289 end if

290 end do ! ambient

s

291

292 if (mvsav .ne.O) then ! reset imique-ness

293 do i=l, mvsav

294 j = iptx(i) ! point to: iptw

295 iptw(j) = 0 ! unique-ness

296 iptx(i) = 0

297 end do

298 end if

299 end do ! sample

300

301 return

302

303 101 format (Ix, iB, IBx, 'msampl')

304 102 format (Ix, iB, IBx, 'mbien ')

305 103 format (Ix, 2iB, lOx, 'mrpeat, imbien')

306 104 format (Ix, 2iB, lOx, 'mexpt, mu')

307 lOB format (Ix, iB, 2x, lp4el3.B, 2x, '(i,E,a, d,p) ')

308 106 format ( 8x, lp4el3.B, 2x, '(uncertainty)')

309 107 format (Ix, iB, 2x, lp4el3.B, 2x, '(i,E,a, g (d,p))')

310

311 end

115
SCAT02.F0R

subroutine scato2 (choice) grid scan, contiguous

Perform a grid scan: (wavelength-energy, incident angle)

Ouput : function: , dielectric function (energy), media

function: (Delta, psi), uncertainties, x.dat

function: (Delta, psi)

Jacobian; (d/dz, d/df, d/dp)_(Delta, psi)

Jacobian: (d/da )_(Delta, psi)

Jacobian: (d/dE )_(Delta, psi)

The template for this routine is from: ASHBL

include

include

include

include

include

include

include

include

include

' iounit .

'defnit.

'f ilmmm.

' xprmnt .

'

' arrayd.

' arrays .

'f ilmss .

' abcdef ,

' handyy .

logical

integer

first, firstv

choice

! pi,cccc,wavlev

if (choice . eq. 1) then i dielectric function

write (iout,141) ! specify mixture

read ( iim., *) kmix ! for plotting

write (iout,142) kmix

if (kmix. It. 1 .or. kmix .gt .mmixtr) then

write (iout,143)

stop

end if

end if

Discern the bounds or domain of the grid.

call scatoi (mevs, evl, ev2, ev3, i wavelength-energy

& mang, angl, ang2, ang3 ) ! angles of incidence

mmm = mf ilmz+mlmnts+mrpars

do m=l,mmin ! local, coluim in a row of: aa

if (iptw(m) .ne .~l) then ! utilized

iptw(m) = 0 ! global > local into: aa end if

iptx(m) = 0 ! local > global into: iptw

end do

116
51

52 raddeg = 180.0/pi

53 izs =0 ! (z,e) .sample

54 ias = 0 ! cunbient , sample

55 iras = 0 ! repeat , ambient , sample

56 ixpts = 0 ! expt .repeat , ambient , sample

57

58 write (iplt,211) msampl

5960 do is=l,mseunpl

61 mfilm = mmiilm(is) ! FILMSS

62 mlilms = mfilm+1 . ! films/substrate

63 mfilma = mfilm+2 ! 2unbient/f ilms/substrate

64 mzs = mfilm*2+l ! (z,e),(e)

65 mv = 0 ! local, unique, vary

6667 if (choice . eq. 1) then ! initialize

68 kmix = iabs (kmix) ! referencing

69 end if

70

71 do m=l,mfilms

72 if (m.ne .mf ilms) then ! films

73 izs = izs+1 ! widths

74 iwidth = iifilm(izs)

75 zzz(m) = widths (iwidth) ! FILMSS

76 if (Iwidth(iwidth) . eq. 1) then ! vary

77 j = iwidth

78 if (iptw(j) .eq.O) then ! unique, compress

79 mv - mv+1 ! local

80 iptw(j ) = mv

81 iptx(mv) =

j 82 end if

83 end if

84 end if

85 izs = izs+1 ! films/substrate

86 imixtr = iifilm(izs) ! mixture

87 mixflm(m) = imixtr ! initialize

88

89 if (choice .eq. 1) then

90 if (kmix . eq. imixtr) then ! referenced

91 kmix = -kmix ! negative

92 end if

93 end if

94

95 mvlmn = mvlmnt (imixtr) ! vary

96 if (mvlmn. ne.O) then ! fraction

07 first = .true. ! constraint, l=u+v

98 mmlmn = mmlmnt (imixtr) ! quantity

99 kk = kklmnt (imixtr) ! offset

100 do lmn=l, mmlmn

101 kk = kk+1 ! monotonic

102 if (If Imnt(kk) .eq.l) then ! vary

103 j = mfilmz+kk ! global

117
104

105 106 107

108 109

110

111 112 113

114

115 lie 117

118

lie 120

121

122 123

124

125 126 127

128

129

130

131

132 133

134

135 136 137

138

139

140

141 142

143

144

145

146 147

148

149 150

151

152 153

154

155

158

if (first) then ! first = .falsa,

else if (iptw( j ) . eq. 0) then

mv = mv+1 ! iptw(j ) = mv iptx(mv) = j end if

end if ! vary

end do ! fraction

end if ! something varies

constraint, dv(l)

local unique

mvpar = mvparm(imixtr)

if (mvpar. ne.O) then

mrpar = mrparm(imixtr)

kr = krparm(imixtr)

do irp=l, mrpar

kr = kr+1

ip ~ jrparm(kr)

if (Irparm(ip) . eq. 1) then

j = mf ilmz+mlmnts+ip

if (iptw( j ) . eq. 0) then

mv = mv+1

, iptw(j ) = mv

iptx(mv) =

j end if

end if ! vary

end do ! parameters

end if ! something varies

end do ! mfilms

vary

parameter

quantity

offset

offset

specify index

vary

global, unique

unique

local, compress, aa

mvsav = mv mbien = mmbent(is)

write (iplt,212) mbien

do mbn=l,mbian

ias = ias+1

mrpeat = mmpsat(ias)

imbian = iibsnt(ias)

imixtr = mixmbn(imbien)

mixflm(mf ilms+1) = imixtr

mv = mvsav

if (choice .eq. 1) then

if (kmix.eq. imixtr) then

kmix = -kmix

end if

and if

write (iplt,213) mrpeat, imbien

mvlmn = mvlmnt( imixtr)

if (mvlmn. ne.O) then

first = .true.

convenience

! quantity

! ambient

s

specify ambient

mixture used as ambient

! referenced

! negative

vary

fractions

118
157 mmlmn = mmlmnt (imixtr)

158 kk = kklmntC imixtr) ! offset

159 do linn=l .mmlmn ! fractions

160 kk = kk+1

161 if (Iflmnt(kk) .eq.l) then ! vary

162 j = mfilmz+kk

163 if (first) then ! constraint, dv(l)

164 first = .false.

165 else if (iptw(j) .eq.O) then

196 mv = mv+1 I local, compress

167 iptw(j ) = mv

168 iptx(mv) =

j 169 end if

170 end if ! vary- in end do ! fractions

172 end if ! something varies

173

174 mvpar = mvparm( imixtr) ! vary

175 if (mvpar. ne.O) then ! parameters

176 mrpar = mrparm(imixtr)

177 kr = krparm(imixtr) ! offset

178 do irp=l, mrpar

179 kr = kr+1

180 ip = jrparm(kr) ! specify index

181 if (Irparm(ip) . eq. 1) then

182 j = mf ilmz+mlmnts+ip

183 if (iptw( j ) . eq. 0) then ! unique

184 mv = mv+1

185 iptw(j ) = mv

186 iptx(mv) =

j 187 end if

188 end if "

189 end do

190 end if

191

192 mm = mmixtr+imbien ! offset, eimbient

193 mvpar = mvparm(mm) ! vary

194 if (mvpar. ne.O) then ! parauneter

195 mrpar = mrparm(mm) ! quttntity

196 kr = krparm(mm) ! offset

197 do irp=l, mrpar

198 kr = kr+1 ! offset

199 ip = jrparm(kr) ! specify index

200 if (Irparm(ip) . eq. 1) then ! vary

201 j = mf ilmz+mlmnts+ip ! global

202 if (iptw(j) .eq.O) then ! unique

203 mv = mv+1 ! local, compress, aa

204 iptw(j ) = mv

205 iptx(mv) = j . 206 end if

207 end if

208 end do

209 end if ! something varies

119

%
210

211 mvari = mv ! local quantity

212 fixstv — . 'tz'us . ! you ±fc V w U X V n . J. w CI 213

214 if (mv.gt.l) then ! vary only (0,1) things

£91LaR write (iout,214) mv, mbn, is

stop

217 end if

218 if (mrpeat .ne . 1) then ! convenience

219 write (iout,215) mrpeat, mbn, is

220 end. if

221

222 C* do irpeat=l , mrpeat ! repeats

223 c* iras = iras+1

224 c* mexpt = mmexpt(iras)

225 mexpt = m£mg*mevs ! measurements

226 ixpts =0 ! reset

227

228 mu - 2 ! columns of output

229 if (choice . eq. 1) then ! dielectric fen

230 write (iplt,223) mevs , mang, mu, mexpt

9^1 else if ( choice . eq . 2 ) then ! X . dat

232 write firjlt 222^ mextit

233 else ! values, Jacobians

234 write (iplt,223) mevs, mimg, mu, mexpt

235 end if

236

237 c* do ixpt=l, mexpt ! measurement s 238 c* ixpts = ixpts+1

238 c* wavlnl = wavlns( ixpts) 1 -nm, +eV

240 c* wavln2 = wavlnu( ixpts)

241 c* anglel = jmgles (ixpts) ! radians

242 c* angle2 = angleu(ixpts)

243 c* psii = psiiis(ixpts) ! radians

244 c* psi2 . = psiiiu(ixpts)

245 c* deltal = deltas (ixpts) ! radians

246 c* delta2 = de It an(ixpts)

247

248 c —! grid scan

249 do iang=l,mang ! incident emgl

250 if (iang.eq.mam.g .and. mang.ne.l> then

251 eingl = axLg2

252 else

253 angl = angl + ang3*float (iang-1) ! degrees

254 end if

255 anglel = angl*pi/180.0 i radians

256 angle2 = 0.01 ! degrees

257 do ievs=l,mevs ! photon energy

258 if (ievs .eq.mevs .and. mevs.ne.l) then

259 energy = ev2

260 else

261 energy = evl + ev3*float (ievs-i)! eV

262 end if

120
263 wavlnl - -wavlev/energy ! -lun, +eV

284 wavln2 =0.1 ! convenienc

285 C

266 ixpts = ixpts+1 ! update

287

268 do m=l ,inf ilma ! initialize, indicate

269 i = mixflm(m)

270 firstx(i) = .true. ! need of evaluation

271 end do

£, { &

273 c Discern: dielectric functions (z)

274

275 imixtr = inixmbn(imbien) ! ambient

276 firstx(imixtr) = .false.

277 call diefcn (imbien, imixtr, anglel, navlnl

,

278 1: dielecC imixtr), diele?( imixtr).

279 s uxexxz ^1 , imxx vr^

,

280

a. c dielppCl , imixtr) , dielpa(l , imixtr)

)

281

282 izs = izs~mzs ! reset pointer

283 do m=l,miilms

284 if (m.ne .mf ilms) then ! skip ;?idths

285 izs = izs+1

286 end if

287 izs = izs+1

288 imixtr = iifilm(izs)

289 if (f irstx(imixtr) ) then ! first

290 f irstx(imixtr) = .falsa.

291 call diefcn (imbien, imixtr.

292 k anglel, navlnl.

293 k dielec( imixtr), dielew( imixtr),

294 k dielf f ( 1 , imixtr)

,

295 k dislppC 1 , imixtr) , dislpa(l , imixtr)

)

2&6 end if

297 die(m) = dielec(imixtr)

298 end do ! films

299

300 isampl = is

301 izsmpl = izs-mzs ! reset index

302 call scattr (wavlnl, anglel.

303 k isampl, izsmpl, imbien, mvari)

304

305 c

306 if (choice . eq. 1; then ! QieiecTric

307 if (kmix.lt.O) then \ referenced

308 delta = real (dielec (-kmix))

309 psi — aimag ^uiejLec ^ aiiha^^

310 write (iplt,311)

311 k ixpts, energy, angl, delta, psi

312 else if (ixpts, eq.l) then ! notify -

313 write (iout,144) is, mbn, kmix

314 end if

315 c

121
316 else if (choice .eq.2) then ! (Delta, psi)

317 psi = b(l)*raddeg ! degrees

318 delta = b(2)*raddeg

319

320 if (delta. It. 0.0) then ! [0, 360)

321 delta = delta + 360.0

322 end if

323 if (delta. gt. 360.0) then ! [0, 360)

324 delta = delta - 360.0

325 end if

326 if ( delta. ne. 0.0) then ! Nebraska

327 delta = 360.0 - delta ! convention

328 end if

329

'

330 write (iplt,32l)

331 ft ixpts, energy, angl, delta, psi

332 c* t ixpts7 wavlnl , angl, delta, psi

333 c ! convenience

334 du = 0.01 ! degrees

335 pu = 0.01 ! degrees

336 write (iplt,322) wavln2, angle2, du, pu

337 c

338 else if (choice .eq.3) then ! (Delta, psi)

339 psi = b(l)')'raddeg ! degrees

340 delta = b(2)*raddeg

341 •

. 342 if (delta. It. 0.0) then ! [0, 360)

343 delta = delta + 360.0

344 end if

345 if (delta. gt. 360.0) then ! [0, 360)

346 delta = delta - 360.0

347 end if

348 if (delta. ne .0 . 0) then ! Nebraska

349 delta = 360.0 - delta ! convention

350 end if

351 352 write (iplt,331)

353 k ixpts, energy, angl, delta, psi

354 c

355 else if (choice .eq. 4) then ! d/d(z,f,p)

356 if (mv.eq.l) then

357 psi = a(l)*raddeg ! degrees

358 delta = a(2)*raddeg

359 else

360 stop

361 end if _

362

363 write (iplt,341)

364 k ixpts, energy, angl, delta, psi

365 c • 366 else if (choice. eq. 5) then ! d/da

367 psi = c(l)>fraddeg ! degrees

368 delta = c(2)*raddeg

122
369 370 write (iplt,3Bl)

371 t ixpts, energy, angl, delta, psi

372 c

373 else if (choice . eq. 6) then ! d/d£

374 psi = c(3)*raddeg ! degrees

375 delta = c(4)*raddag

376 377 write (iplt,361)

378 k ixpts, energy, angl, delta, psi

379 c

380 end if

381

382 end do ! energy

383 end do ! angles of incidence

384 c* end do ! measurements

385 c* end do ! repeats

386 387 if (mv.gt .mvsav) then ! reset unique-ness

388 mvl = mvsav+1

389 do i=ravl,mv

390 j = iptx(i) ! point to: iptw

391 iptw(j) = 0 ! unique-ness

392 iptx(i) = 0

393 end do

394 end if

395 end do ! sunbients

396 397 if (mvsav. ne.O) then ! reset unique-ness

398 do i=l, mvsav

399 j = iptx(i) ! point to: iptw

400 iptw(j) = 0 ! unique-ness

401 iptx(i) = 0

402 end do

403 end if

404 end do ! sample

405

406 return

407

408 141 format (/' Enter: kmix * effective medium of,

409 k ' dielectric function')

410 142 format (

' kmix iS /)

411 143 format (/' ... oops, inconsistent*)

412 144 format (/' 8cato2, ... oops, sample '

' , iS

413 k / ' ambient '

' , i3

414 Ic /' does not contain mixture *', i3)

415 416 211 format (ix, i5, 15x, 'msampl')

417 212 format (Ix, iB, IBx, 'mbien *)

418 213 format (Ix, 2iB, lOx, 'mrpeat, imbien')

419 214 format (' ... oops, vary only zero or one thing at a time'

420 k /' you are assuming: mvari '*, i4

421 k /' for the case of: ambient '', i4

123
422 Sc /' sample "

' , i4)

423 215 format (' ... oops, only one repeat of experiment is necessary'

424 k /' you are assuming: mrpeat i4

425 & /' for the case of: ambient i4

426 . & /' sample i4 /)

427

428 221 format (Ix, 2i5, lOx, 'nx.nu /(i,x,u)')

429 222 format (Ix, i5, lOx, 'maxpt ' measurements')

430 223 format (Ix, 4i5, lOx, 'nx,ny,nu, (nx*ny) /(i,x,y,u)')

431 432 311 format (Ix, iS, 2x, Ip4al3.5, 2x, '(i.E.a, or.ei)')

433 321 format (Ix, i5, 2x, Ip4ei3.5, 2x, '(i,E,a, d,p)')

434 322 format ( 8x, lp4el3.B, 2x, '(uncertainty)')

435 331 format (Ix, i5, 2x, Ip4el3.5, 2x, '(i,E,a, d,p)')

436 341 format (Ix, i5, 2x, lp4el3.E, 2x, '(i,E,a, d/db (d,p)')

437 3B1 format (Ix, iS, 2x, Ip4el3.5, 2x, '(i,E,a, d/da (d,p)')

438 361 format (Ix, i5, 2x, Ip4el3.5, 2x, '(i,E,a, d/dE (d,p)')

439

440 end

124
6.2.8 SCANOl.FOR

1 subroutine scanol ! adapted from: SCAN02

2 c ! called by: SCATOS

3 C

4 c Scan the domain grid of model parameters (z,f ,p)

5 c to the set of ellipsometric equations governing experiment.

0 c Here, we set up the structure of do-loops necessary for the scan.

7 c Inside the do-nest, we solve the direct or forward problem.

8 c

• 9

10 include ' iounit .

11 include 'defnit.'

12 include 'filmmm.'

13 include ' arrays .

'

14 include 'nestol.' ! do-nest, SEEK02

15 include 'handyy.' ! pi

16

17 logical Ibdry, local, first

18 character bufft*8, buffd*9, buffc(9)*l, buff*l, blank*l

19 equivalence (buf f d,buff c(l))

20

21 data blank /' '/

2223

24 if (mvary.eq.O .or. mvary.gt.2) then ! some model parameter

25 write (iout.lOl) ! ought to vary

2a stop

27 end if

28

29 c Input grid specifications for model pareuneters (z,p,f).

30

31 write (iout,102)

32 i = 0 ! index of vary parameters

33 k = 0 ! index for convenience

34 c

35 if (mfilmz .ne. 0) then ! widths

36 local = .true. ! first

37 do m=l, mfilmz

38 if (Iwidth(m) .eq.l .and. iptw(ra) .ne . -1) then ! vary + utilized

39 if (local) then ! first

40 local = .false.

41 write (iout.lll) ! Enter: widths

42 end if

43 i = i+1 ! vary

44 k = k+1 • convenience

45

46 read ( inn, *) j, zl, z2, z3

47 write (iout,112) k, j, zl, z2, z3, i

48

49 if ( j.ne.m .or. z2.1e.zl .or.

50 k zl.lt. 0.0 .or. z2.lt. 0.0 .or. z3.lt. 0.0) then

125
51 write (ioiit,113)

52 stop

53 end if

54

55 pppl(i) = Zl

56 ppp2(i) = z2

57

58 if (z3 .eq. 0.0) than

59 iii2(i) = 2

60 ppp3(i) = z2-zl

61 else

62 iii2(i) = 1 + nint ((z2-zl)/z3)

63 ppp3(i) = (z2-zl) /float (max (1, iii2(i)-i))

64 end if

65

66 psav(i) = widths(m)

67 end if ! utilized + varjf

68 end do ! mfilmz

69 end if

70 C

71 c Since ordering in PPP assumes (z,f,p) rather than (z,p,f),

72 c and if we impose the same ordering of groups as in X.DAT,

73 c then we must account for this interchange of group ordering.

74 c Method: pre-index the 'vary' volume fractions.

75

76 ipsavl = i ! retain last value of index

77 do m=l,mmixtr ! effective media

78 mmlmn = mmlmnt(ra)

79 mvlmn = mvlmnt(m)

80 kk = kklmnt(m)

81 if (mvlmn .ne. 0) then ! vary

82 j = mfilmz+kk+1

83 if (iptw( j ) .ne . -1) then ! utilized

84 first = .true.

85 do lmn=l, mmlmn

86 kk = kk+1

87 if (If Imnt(kk) .eq.l) then ! vary

88 if (first) then ! skip

89 first = .false.

90 else

91 i = i+1 ! hop

92 end if ! first

93 end if ! vary

94 end do 1 fractions

95 end if ! utilized

96 end if [ something varies

97 end do I mixtures

98 c

99 if (mrpars .ne. 0) then ! parameters

100 local = .true. ! first

101 do m=l, mrpars

102 j = mf ilmz+mlmnts+m

103 if (Irparm(m) . eq. 1 .and. iptw( j ) .ne . -1) then

126
104 if (local) then

105 local = .false.

106 write (iout,'131)

107 end if

108 i = i+1 ! vary

109 k = k+i ! convenience

110

111 read ( inn, *) j, pi, p2, p3

112 write (iout,132) k, j, pi, p2, p3, i

113

114 if (j.ne.m .or. p2.le.pl .or. p3.lt. 0.0) then

115 write (iout,133)

116 stop

117 end if

118

119 pppl(i) = pi

120 ppp2(i) = p2

121 122 if (p3 .eq. 0.0) then

123 iii2(i) = 2

124 ppp3(i) = p2-pl

125 else

126 iii2(i) = 1 + nint ((p2-pl)/p3)

127 ppp3(i) = (p2-pl) /float (max (1, iii2(i)-l))

128 end if

129

130 psav(i) = rrparm(m)

131 end if

132 end do

133 end if

134 ipsav2 = i ! retain last value of index

135 c

136 i = ipsavl ! recover initial indexing

137 local = .true. ! first

138 do m=l,ramixtr ! fractions

139 mmlmn = mmlnmt(m)

140 mvlmn = mvlinnt(ia)

141 kk = kklinnt(m)

142 if (mvlmn .ne. 0) then ! vary

148 j = mfilmz+kk+1

144 if (iptw(j) .ne.-l) then ! utilized

146 if (local) then ! first

146 local = .false.

147 write (iout,12l)

148 end if

149 first = .true.

150 do lmn=l, mmlmn

151 kk = kk+1

162 if (If Imnt(kk) .eq.l) then ! vary

153 if (first) then ! skip

164 first = .false.

156 else

156 i = i+1 ! vary

127
157 Tn — k+1 ! c onvoni one s

158 159 read ^ inn, *) xi, xz,

160 WX X V O V lO U. W f X^jC J JV| J, ^•'1 '^^9 ^

181

162 if ( j.ne.lmn .or. f2.1e.fl .or.

163 s il.lt. 0.0 .or. f2.lt. 0.0 .or.

164 £ 1 3. It. (J. 0 .or. i^.gt.i.u ^ tnen

165 write (.loutjl^dj

166 stop

167 end IX

^68

169 170 ppp2ti; - 12

171

172 11 \xo .ecj^. \j ,\j J bnen

173 lllz^ly — ^

174 pppovl^ - 12-11

175 else

176 iii^vi^ — 1 + ninx v.^1^ iiy/i<3^

177 pppj^i; - V.I2-I1; / 178 C llOali Vlnax vl] lll^vly l^y

179 end IX

180

181 psav^xy X J. XluxL w V / 182 end 11 ! iirsi:

183 end. if ! vary

184 end do ! fractions

185 end if ! utilized

186 exicL IX ! s oine uiixxig vax10 s 187 Gzid d.0 ! inxx't'u.xBs 188 C

189 i = ipsav2 ! recover last value of indexing

190 11 vnivary .ne. i; tnen ; deptii ox do-ioop nest, AaaAUvj

191 write v.iou.t,13oj

192 stop

193 end if

194

195 C

196 c* nrite (ioiit,141) ! optimization strategies

197 c* read ( inn, *) ichoic ! 0,1

196 c* nrite (iout,142) ichoic

199 c* if Qicnoic.lt.O .or. icnoic .gt . 1 j tnen

200 write (iout,i43)

201 c* stop

202 c* end if ! NO optimization

203

204 c

205 c Discern breakpoints . . . from previous attempts

206 207 write (iout,151)

208 read ( inn,*,err=ll,end=ll) mvarii, kts, ktm, old

209 write (iout,152) mvarii, kts, ktm, old

128
210

211 if (mvarii .ne .mvary .or. old. le. 0.0 .or.

212 ft kts.lt.l .or. ktm.lt.l ) goto 11

213 214 write (iout,153)

215 do i=l,mvEury

216 road ( iim,*,err=ll,end=ll) j, iiii(i), pppp(i), psav(i)

217 write (iout,154) j, iiii(i), pppp(i), psav(i)

218

219 if (iiii(i) .It. 1 .or. j.ne.i .or.

220 k iiii(i) .gt. iii2(i) .or.

221 ft PPPPCi) -It- pppl(i)-ppp3(i)*0.001 .or.

222 ft PPPP(i) -g*- ppp2(i)+ppp3(i)*0.001 .or.

223 ft psav(i) .It. pppl(i)-ppp3(i)*0.001 .or.

224 ft psav(i) .gt. ppp2(i)+ppp3(i)*0.001 ) then

225 write (iout,155)

22a stop

227 end if

228 229 if (iiii(i) .It .iii2(i) .or. iii2(i) . eq. 1) then

230 PPPPi = pppl(i) + ppp3(i)*float(iiii(i) -1) ! [) 231 else

232 PPPPi = ppp2(i) ! ] 233 end if

234

235 if (abs(pppp(i)-ppppi) .gt. ppp3(i)*0 . 01) then

236 write (iout,156)

237 stop

238 end if

239 end do

240

241 write (iout.iei)

243 iiistp = 1 ! do-increment

243 iii = mvary ! depth of do-nest

244 itl = iftime(i) ! start clock

245 goto 2

246 11 continue

347 write (iout,162)

348 itl = iftime(i) ! start clock

349

350 C

251 c Formulate header card for the plot utility.

252 c Plot format: nx.ny.nu /(i.x.y.u) ====> index backwards

353

254 m = 1 355 kt = mvary+1

268 if (mvary .eq. 1) then

3S7 write (iplt,212) (iii2(kt-j), j=l, mvary), m ! header card

258 else

259 write (iplt,213) (iii2(kt-j), j=l, mvary), m ! header card

360 end if

261

262 C

129
263 c Emulate, initialize, activate: the nest of do-loops

264

265 do i=l,mvary

268 iiii(i) = 0 ! il-i3

267 end do

268

269 kts = 0 ! coimter

270 iiistp = 1 ! do-increment

271 iii =0 ! index do-levels

272 1 iii = iii+1 ! index of : iii-th level

273 if (iii .gt. mvary) goto 3

274 2 iiii(iii) = iiii(iii) + iiistp ! update do pariuneter

276 if (iiii(iii) .It. iii2(iii)) then i test upper limit

276 pppp(iii) = pppl(iii) + ppp3(iii)*f loat (iiii(iii) -1)

277 goto 1 278 else if (iiii(iii) .eq. iii2(iii}) then

279 if (iii2(iii) ,eq. 1) then

280 pppp(iii) = pppl(iii)

281 else

282 pppp(iii) = ppp2(iii)

263 end if

284 goto 1 286 end if

286 iiii(iii) = 0 S il-i3, reset izmer do

287 iii = iii-1 ! backup one do-level

288 if (iii.eq.O) goto 4 ! escape do-nest

289 goto 2

290 3 iii = iii-1 ! level of inner-most do,

291 c

292 kts = kts+1 ! simple counter

293

294 c Reset the model parameters to their appropriate values.

295 296 do i=l, mvary

297 j = iptu(i)

298 if (j .le. mfilmz) then

299 widths(j) = pppp(i)

300 else if (j .la. mfilmz+mlmnts) then

301 j = j -mfilmz

302 fflmnt(j) = pppp(i)

303 else

304 j = j-mfilmz-mlmnts

305 rrparm(j) = pppp(i)

306 end if

. 307 end do

308 309 do m=l,mmixtr ! mixtures

310 mvlmn = mvlmnt(m)

311 if (mvlmn. ne.O) then ! vary

312 mmlmn = mmlmnt(m)

313 kk = kklmnt(m) ! offset

314 j = mfilmz+kk+1

315 if (iptw(j) .ne.-l) than ! utilized

130
316 lu =0.0

817 IV = 0.0

318 first = .tme.

319 do linn= 1 , mmlmn ! fractions

320 kk = kk+1

321 if (Iflmnt(kk) .eq.l) then ! vary

322 if (first) then

323 first = .false.

324 kkl = kk

325 else

326- fv = f v+f f linnt(kk)

337 end if

338 else ! froz

329 lu, - zu+filiniit (.kkj 330 end if

331 end do ! fractions

332 zf ImntCkkl J = l.O-fu-fv ! constraint

333 end if ! utilized

334 end if ! vary

335

336 end do ! mixtureC

337 c* il (ichoic . eq. 1) then

338 c* call seeko2 ! constrained optimization

339 c* end if

341 llnorm = .false.

342 call asmblO ! residual only, Igl343 call norm (meqns, bb, ^norm, 1) ! retain norm of residuEtL

344 bnorm = bnorm *180.0/pi ! degrees < radians

345 346 c

347 m = mvary+1 ! backwards

348 vrite (iplt,214) kts, (pppp(m-j), j=l,mvary), bnorm

349

350 c

351 if (kts .eq. l; then ! first

353 ktffl = 1 ! density of states along minimum

353 old = bnorm

354 do i=l,mvary

355 j = iptu(i)

856 il ( J . le . miilmz; then

357 psav(i; = widths(j;

358 else iz . le . mzilmz+mxmnts j tnen

359 j = j-mfilmz

360 psav(i; = fflmnt(j;

361 else

362 j = j -mf ilmz-mlmnts

363 psav(i) = rrparm(j)

364 end if

365 end do

366 else if (bnorm .It. old) then

367 ktm = 1 ! density of states along minimum

368 old = bnorm

131
369 do i=l,invary

370 j = iptu(i)

371 if (j .19. mfilmz) then

372 psav(i) = widths(j)

373 else if (j ,le. mf ilmz+mlmnts) then

374 j = j -mfilmz

375 psav(i) = fflmnt(j)

376 else

377 j = j-mf ilmz-mlmnts

378 psav(i) = rrparm(j)

379 end if

380 end do

381 else if (bnorm .eq. old) then

382 ktra = ktm+1 ! density of states along minimum

383 end if

384

385 it2 = iftim© (i) ! CPU clock

386 tim = float (it2-itl) /6.0E4 ! CPU minutes elapsed

387

388 if (tim .gt. 15.0) then 1 breakpoint

380 itl = it2

300 open (unit=isout, f ile='x.sout' , status= 'unknown')

301 write (isout,17l) mvary, kts, ktm, old

392 do i=l, mvary

303 write (isout,172) i, iiii(i), pppp(i)i psav(i)

304 end do

305 call time (bufft) ! hh:mm:ss

306 call date (buffd) ! dd-mmm-yy

307

308 buff = buffc(l) ! interchange (dd.yy)

390 buffc(l) = buffc(8)

400 buffc(8) = buff

401 buff = buffc(2)

402 buffc(2) = buffcO)

403 buf£c(9) = buff

404

405 write (isout,173) bufft, buffd ! convenience

406 close (unit=isout)

407 end if

408 c ! finish processing body

400 goto 2 ! nested do-loop: iiii

410 4 continue ! last line of do-nest, iiii

411 C = = = === = = = = = = === = = = === = ==== = == = = === = = == = =: = = = = = == = = == = = =

412 413 Ibdry = .false.

414

415 write (iout,181) kts, ktm, old ! DOS along minimum

416 write (iout,182)

417

418 do i=l, mvary

410 local = (psav(i) .le. pppl(i)+ppp3(i)*0.001) .or.

420 A; (psav(i) .go. ppp2(i)-ppp3(i)*0 . 001)

421 c* local = local .and. (iii2(i) .ne . 1)

132
422 Ibdry = Ibdry .or. local I retain hitting boundary

423 j = iptii(i)

424

425 if (j .le. mfilmz) then

426 widths(j) = psav(i)

427 if (local) then

428 write (iout,183) i, psav(i), j, blank

429 else

430 write (iout,183) i, psav(i), j 431 end if

432 else if (j .le. mf ilmz+mlmnts) then

433 j = j -mfilmz

434 fflmnt(j) = psav(i)

435 if (local) then

436 write (iout,184) i, psav(i), j, blank

437 else

438 write (iout,184) i, psav(i), j 439 end if

440 else

441 j = j -mfilmz-mlmnts / 442 rrparra(j) = psav(i)

443 if (local) then

444 write (iout,186) i, psav(i), j, blank

445 else

446 write (iout,185) i, psav(i), j 447 end if

448 end if

449 end do ! vary

450

451 do m=l,mmixtr ! mixtures

452 mvlmn = mvlmnt(m)

453 if (mvlmn. ne.O) then ! vary

454 mmlmn = mmlmnt(m)

455 kk = kklmnt(m)

456 j = mfilmz+kk+1

457 if (iptw(j) .ne.-l) then ! utilized

458 fu = 0.0

459 fv = 0.0

460 first = .true.

461 do lmn=l, mmlmn ! fractions

462 kk = kk+1

463 if (Iflmnt(kk) .eq.l) then ! vary

464 if (first) then

465 first = .false.

466 kkl = kk

467 else

468 fv = fv+f f Imnt(kk)

469 end if

470 else ! froz

471 fu = fu+ff Imnt(kk)

472 end if

473 end do ! fractions

474 fflmnt(kkl) = 1.0-fu-fv ! constraint

133
475 end if ! utilized

476 end if ! vary

477 end do ! mixture

478 if (Ibdry) write (lout, 186)

480 C

481 482 call corlat

483 call scatoj (3)

484 / 485 return

486 487 101 format (/' OOT5S all TTiofieX narametsTS rtg fTos^en or '

488 jt too TTianv TTiodfiX TaaTamot ers ar© varviTicr '

489 & /' For convenience , only 1 or 2 may vary • '

)

102 format (/' Scan a grid of model paramet ers: (z,p,f)* '

ilQI to 1 ft /' Grid info: DO-loop parameters '

ii /' Grid info:', 4x, '1,', 8x,

403 k 'initial,', 6x, 'final,', 5x, 'increment' ) 494 111 format (/' Enter: 1, zl, z2, z3 (widths) '

)

112 format (3x, 14, ')', 3x, 15, 3x, 3fl3.4, 5x, '(', 13, ')')

497 113 format (/' oops, inconsistent data input ') 498

499 121 format (/' Enter: 1, fl, f2, f3 (fraction) ') ouu 122 format (3x. 14, ' )

' , 3x, 15, 3x, 3fl3.4, 5i, '(', 13, ')')

501 123 format (/' oops , inconsistent data input '

)

502

503 131 format (/' Enter: 1 , pi, p2 , p3 (parameters) '

)

504 . 132 format (3x,i4, ')', 3x, 15, 3x. Ip3el3.4, 5x, 13, ')')

505 133 format (/' oops , inconsistent data input ') 506 507 135 format (/' oops , inconsistent info: mvary '

)

508

509 141 format (/• Snter: option regarding the grid scan: '

510 ft /' 0 , no optimization, 1 g 1 only ,

511 ii /' 1, full optimization, Jacobism..')

512 142 format (

' option ' ' , 11)

513 143 format (/' oops , inconsistent data input '

)

514

515 151 format (/' Restart by attempting to read breakpoint info')

516 152 format ( Ix, 3110 , lpel5 . 6 , 5x , ' (mvary , kts , ktm, residual)

517 153 format (/' Enter : 1 , ip, pp , psav (breakpoint info) '

OLO 154 format ( Ix, 2(14, Ix) , Ip2el5.6 ) 519 155 format (/' oops , your attempt at restarting has failed. '

)

ton 156 format (/' oops , yoTir attempt at restarting has failed. ' ) 521

coo 161 format (

' Good, your attempt at restarting was successful . '

)

523 162 format (/' Note : NO attempt was made to restart . ' /)

524

525 171 format (Ix, 14, Ix, 2110 , lplel5.6, 5x, ' mvary , kts , ktm, residual

526 172 format (Ix. 2(14, Ix) , Ip2el5 .6, 5x, ' 1, ip, p, p(mln) '

527 173 format (' wall clock: time - a8, ' ' hh:mm:ss'

134
528 t /' date = a9, ' ' yy-mmm-dd' ) 529

530 181 format (/' number of grid points scanned, kts =', ilO

531 ft /' population along the minimum, ktm =', ilO

532 ft /' norm of the residual, |g| =', lpel3.5,

533 ft ' (degrees) ' ) 534 182 format (/' model parameter value along the minimum:')

535 183 format (Ix, i4, ')', IpelB.B, ', for:', iB, ', (z)',

536 ft al ,

' ' boundary '

)

537 184 format (Ix, i4, ')', IpelB.B, ', for:', iB, ', (f)',

538 ft al, ' ' boundary')

539 18B format (ix, i4, ')', IpelB.B, ', for:', i5, ', (p) '

,

540 ft al ,

' ' boundary')

541 186 format (/' Note: minimum point is near a boundary.')

542

543 212 format ( Ix, 2iB, ' ' mx, mu /(i, x, |g|) ') 544 213 format ( Ix, 3iB, ' ' mx(2), mx(l), mu /(i, x(2), x(l), Igl)')

545 214 format ( Ix, i6, lp3elB.6)

546 end

135
6.2.9 SCAN02.F0R

1 subroutine scano2

2

3 c

4 c Scan the domain grid of model parameters (z,f ,p)

5 c to the set of ellipsometric equations governing experiment,

6 c Minimize the sujti of error residuals in the least-squares sense.

7 c Method of solution: damped least-squares analysis.

8 c Here, we set up the structure of do-loops necessary for the scan.

9 c Inside the do-nest, we solve the direct or forward problem.

10 c

11

12 include 'iounit.'

13 include 'defnit.'

14 include 'filmmm.'

15 include 'arrays.'

16 include 'nestol.' ! do-nest, SEEK02

17 include 'handyy.' ! pi

18

19 logical Ibdry, local, first

20 character bufft*8, buffd*9, buffc(9)*l, buff*l, blank*!

21 equivalence (buf f d,buff c(l))

22

23 data blank /' '/

24

2526 if (mvary .eq. 0) then ! something needs to vary

27 write (iout.lOl)

28 stop

29 end if

30

31 c Input grid specifications for model parameters (z,p,f).

32

33 write (iout,102)

34 i = 0 i index of vary parameters

35 k = 0 ! index for convenience

36 c

37 if (mfilmz .ne. 0) then ! widths

38 local = .true. ! first

39 do m=l, mfilmz

40 if (Iwidth(m) . eq. 1 .and. iptw(m) .ne . -1) then ! vary + utilized

41 if (local) then ! first

42 local = .false.

43 write (iout,lll) ! Enter: widths

44 end if

45 i = i+1 ! vary

46 k = k+1 ! convenience

47

48 read ( inn, *) j, zl, z2, z3

49 write (iout,112) k, j, zl, z2, z3, i

50

136
51 if ( j.ne.m .or. z2.1e.zl .or.

52 K zi.xu.u.u .or. ZiS.xTf, u.vj .or. ZO.XX.U.U^ uIlGIl 53 wribe ^10u.b,llo>

54 stop

55 end IX

56

0 1 PFP '• V- ' > ^ •'• 56 ppp2(.i; - z2

5960

61 iii2(i) = 2

62 pppStiJ = z2-zl

63 else

64 iii^^iJ - 1 T nint ^ vz^-zl j/zo

j

65 pppJ^.l^ - V.ZZ-Z1; /xloat ^max 1.1, 66 end if

67

00 ^9 aV \ 4. y Wlu.wXLS ^uly AQ OILU XX LlwXXX«awUi V GlX V

f U

71

72

oncL 1.

C

73 c Sine 6 ordoring xil PPP eis suitids C z , f aP ) xo.'th.ex' t«liaii (z,p,f} , 74 c and if 70 imposo tlie samo ordanng of groups as in X.DAT,

75 c then we musl; account for this interchange of group ordering.

78 c Method: pre-index the 'vary' volume fractions.

77

78 ipsavl — i ! retain last value of index

70 do ni=l (ininixtr ! effective media

80 mmlmn — mmlmnt Cm)

81 mvlmn = mvlmnt(m)

82 XK - xxlmiitv.mj

83 if (mvlmn .ne. 0) then ! vary

84 j = mfilmz+kk+1

85 iz ip bW ^ J J .ne . 1 y xnen ! u.xii.izea

86 first = .true.

87 do lmn= 1 , mmlmn

88 XX - XX+1

80 If tlilmnt ^XX; . eq. 1 J tnen ! vary

90 11 (.first J tnen ! sxip

01 zirst - .laxse.

92 exse

93 1 — iTl : XLOp

94 end if ! first

95 end IX ! vary

96 end do ! fractions

97 end if ! utilized

98 enu. IX t B OHIO wXLxxLg va^xoo

99

100 c end do ! mixtures

101 if (mrpars .ne. 0) then ! parameters

102 local = .true. ! first

103 do m=l,m2T)ar8

137
104 j = mf ilmz+mlnmts+m

105 if (IrparmCm) . e^. 1 .ctnd. iptw(3 ) .ne . ~1) then

106 if (local) then

107 local = .false.

IDS write tiout,131;

109 end if

110 i = i+1 ! vary

111 k = k+1 ! convenienc

112

113 read ( inn, *) j , pi, p2, p3

114 write (iout,132) k, j , pi, n2, p3, i

lis lie if (j.ne.m .or. p2.1e. pi .or. p3.lt. 0.0) then

117 write (iout,133)

118 stop

119 end If

121 ppplCiJ - pi

122 ppp2(i) = p2

123

124 it (p3 .eq. 0.0) then

125 iii2(i) = 2

120 ppp3(i) = p2-pl

127 else

128 iii2(i) = 1 + nint ((p2-pl)/p3)

129 ppp3(i) = (p2-pl) /float (max (1, iii2(i)-l))

130 end if

131

132 psav(i) = rrparm(m)

133 end if

134 end do

135 end if

136 ipsav2 = i ! retain last value of index

137 C

138 i = ipsavl ! recover initial indexing

139 local = .true. ! first

140 do m=l,mmixtr ! fractions

141 minlinn = imnlinnt(m)

142 mvlmn = mvlmnt(m)

143 kk = kklinnt(m)

144 if (mvlmn .ne. 0) then ! vary

145 j = mfilmz+kk+1

146 if (iptw( j ) .no . -1) then ! utilized

147 if (local) then ! first

148 local = .false.

149 write (iout,12i)

150 end if

151 first = .true.

152 do lmn=l,mmlmn

153 kk = kk+1

154 if (Iflmnt(kk) .eq.. 1) then ! vary

155 if (first) then ! skip

156 first = .false.

138
157 else

158 i = i+1 ! vary

159 Jc = k+1 ! convenience

160

181 read ( inn, *) j, fl, f2, f3

i«2 write (iout,122) k, j, fl, f2, f3, i

163

194 if ( j.ne.lmn .or. f2.1e.fl .or.

195 k fl.lt.-O.B .or. f2.gt.l,B .or.

166 k f3.lt. 0.0 ) then

197 write (iout,123)

168 stop

169 end if

170

171 pppl(i) = fl

172 ppp2(i) = f2

173

174 if (f3 .eq. 0.0) then

175 iii2(i) = 2

ire ppp3(i) = f2-fl

177 else

178 iii2(i) = 1 + nint ((f2-fl)/f3)

179 ppp3(i) = (f2-fl) /

180 k float (max (1, iii2(i)-l))

181 end if

183

183 psav(i) = fflinnt(kk)

184 end if ! first

186 end if ! vary

186 end do ! fractions

187 end if ! utilized

188 end if . ! something varies

189 end do ! mixtiires

190 c

191 i = ipsav2 ! recover last value of indexing

192 if (mvary .ne. i) then ! depth of do-loop nest, ARRAN6

193 write (iout.lSB)

104 Stop

195 end if

196

197 C

198 write (iout,14l) ! optimization strategies

199 read ( inn, *) ichoic ! 0,1

200 write (iout,142) ichoic

201 if (ichoic. It. 0 .or. ichoic. gt.l) then

202 write (iout,143)

203 stop

204 end if

205

206 C

207 c Discern breeikpoints . . . from previous attempts

208

200 write (iout,15l)

139
210 read. ( iim, * ,err— 11 , ond-ll) invarii, l^ts, xtm, oxa

211 212 213 if fiTTvarii ne mvarv or old 1 o 0 0 or* 214 & kts.lt.l .or. ktm.lt.l ) goto 11

215

91 A write (iout,153)

91 Tf , do i=l,mvary

218 read ( iim.,*,err=ll,end=ll) j, iiii( i) , pppp(i) , psav(i)

219 write (iout,154) j, iiii(i), pppp(i), psav(i)

220

221 if (iiii(i) .It. 1 .or. j.zie.i . or

.

222 ft iiii(i) .gt, iii2(i) .or.

223 ft pppp(i) .It. pppl(i)-ppp3(i)*0.001 .or.

ft pppp(i) .gt. ppp2(i)+ppp3(i)*0.001 • or.

225 ft psav(i) .It. pppl(i)-ppp3(i)*0.001 . or

.

226 ft psav(i) .gt. ppp2(i)+ppp3(i)*0.001 ) then

227 write (iout,155)

228 stop

229 end if

230

231 if (iiii(i) .It .iii2(i) .or. iii2(i). eq.i) then

232 ppppi = pppl(i) + ppp3(i)*f loat(iiii(i) -1) ! [) 233 234 ppppi = ppp2(i) ! ] 235 end if

236

2or if (abs(pppp(i)-ppppi) .gt. ppp3(i)*0. 01) then

238 write (iout,156)

239 stop

240 end if

241 end do

242 243 write (iout,161)

244 iiistp = 1 ! do-increment

iii = mvary ! depth of do-nest

246 itl = iftiine(i) ! start clock

Z4 f goto 2

248 11 continue

249 write (iout,162)

250 itl = iftime(i) ! start clock

251

252 C

253 C Emulate, initialize, activate: the nest of do-loops

254

255 do i=l, mvary

256 iiii(i) =0 ! il-i3

257 end do

258

259 kts = 0 ! counter

260 iiistp = 1 ! do-increment

261 iii = 0 ! index do-lavels

262 1 iii = iii+1 ! index of : iii-th

140
263 ii (iii .gt. mvary) goto 3

264 2 iiii(iii) = iiii(iii) + iiistp ! update do parameter

265 if (iiii(iii) .It. iii2(iii)) then ! test upper limit

266 pppp(iii) = pppl(iii) + ppp3(iii)*f loat (iiii(iii) -1)

267 goto 1

268 else if (iiii(iii) .eq. iii2(iii)) then

269 if (iii2(iii) .eq. 1) then

270 pppp(iii) = pppl(iii)

271 else

272 pppp(iii) = ppp2(iii)

273 end if

274 goto 1 275 end if

276 iiii(iii) = 0 ! il-iS, reset inner do

277 iii = iii-1 ! backup one do-level

278 if (iii.eq.O) goto 4 ! escape do-nest

279 goto 2

280 3 iii = iii-1 ! level of inner-most do.

281 c

282 kts = kts+1 ! simple counter

283

284 c Reset the model parameters to their appropriate values.

285 286 do i=l, mvary

287 j = iptu(i)

288 if (j .le. mfilmz) then

289 widths(j) = pppp(i)

290 else if (j .le. mf ilmz+mlmnts) then

291 j = j -mfilmz

292 fflmnt(j) = pppp(i)

293 else

294 j = j -mfilmz -mlmnts

295 rrparm(j) = pppp(i)

296 end if

297 end do

298

299 do m=l,mmixtr ! mixtures

300 mvlmn = mvlmnt(m)

301 if (mvlmn. ne.O) then ! vary

302 mmlmn = mmlmnt(m)

303 kk = kklmnt(m) ' ! offset

304 j = mfilmz+kk+1

305 if (iptw(j) .ne.-l) then ! utilized

306 fu = 0.0

307 fv = 0.0

308 first = .true.

309 do lmn=l, mmlmn ! fractions

310 kk = kk+1

311 if (If Imnt(kk) .eq.l) then ! vary

312 if (first) then

313 first = .false.

314 kkl = kk

316 else

141
316 fv = fv+fflitm.t(kk)

317 end if

318 else ! froz

319 ' fu = fu+ff liimt(kk)

320 end it

321 end do ! fractions

322 fflmnt(kkl) = 1.0-fu-fv constraint

323 end if ! utilized

324 end if ! vary

325 end do ! mixture

326 c

327 if (ichoic . eq. 1) then

32« call seeko2 ! constrained optimization

329 end if

330

331 llnorm = .false.

332 call asmblO ! residual only, Igi

.

333 call norm (meqns, bb, bnorm, 1) ! retain norm of residual

334 bnorm = bnorm *180.0/pi ! degrees < radians

335 336 if (kts .eq. 1) then ! first

337 ktm =1 ! density of states along minimum

338 old = bnorm

339 do i=l,mvary

340 j = iptu(i)

341 if (j .le. mfilmz) then

342 psav(i) = widths(j)

343 else if (j .le. mf ilmz+mlmnts) then

344 j = j -mfilmz

345 psav(i) = fflmnt(j)

346 else

347 j = j -mf ilmz-mlmnts

348 psav(i) = rrparm(j)

349 end if

350 end do

351 else if (bnorm .It. old) then

352 ktm = 1 ! density of states along minimum

353 . old = bnorm

354 do i=l,mveu:y

355 j = iptu(i)

356 if (j .le. mfilmz) then

357 psav(i) = Hidths(j)

358 else if (j .le. mf ilmz+mlmnts) then

359 j = j -mfilmz

360 psav(i) = fflrant(j)

361 else

362 j = j-mf ilmz-mlmnts

363 psav(i) = rrparm(j)

364 end if

365 end do

366 else if (bnorm .eq. old) then

367 ktm = ktm+1 ! density of states along minimum

368 end if

142
369

370 it2 = iftimo (i) ! CPU clock

371 tim = float (it2-itl) /6.0E4 ! CPU minutes elapsed

372 373 if (tim .gt. 15.0) then ! breakpoint

374 itl = it2

375 open (unit =is out , file='x.sout' , status= 'unknown'

)

376 write (isout,171) mvary, kts, ktm, old

377 do i=l,mveiry

378 write (isout,172) i, iiii(i), pppp(i), psav(i)

379 end do

380 call t ime (bufft) ! lili:mm:ss

381 call date (buffd) ! dd-mram-yy

382

383 buff = buffc(l) ! interchange (dd.yy)

384 buffc(l) = buffc(8)

385 buffc(8) = buff

386 buff = buffc(2)

387 buffc(2) = buffc(9)

388 buffc(9) = buff

389

390 write (isout,173) bufft, buffd ! convenience

391 close (unit=isout)

392 end if

393 c ! finish processing body

394 goto 2 ! nested do-loop: iiii

395 4 continue ! last line of do-nest, iiii

396 c = == = = = =: = = = = = = = =: = = ==== = === = == = = = === = = = = = = = === = = ==== = = = =

397

398 Ibdry = .false.

399

400 write (iout,18l) kts, ktm, old ! DOS along minimum

401 write (iout,182)

402 403 do i=l, mvary

404 local = (psav(i) .le. pppl (i)+ppp3(i) *0 . 001) .or.

405 k (psav(i) .ge. ppp2(i)-ppp3(i)*0.001)

406 c* local = local .and. (iii2(i) .ne . 1)

407 Ibdry = Ibdry .or. local ! retain hitting boundary

408 j = iptu(i)

409

410 if (j .le. mfilmz) then

411 widths(j) = p8av(i)

412 if (local) then

413 write (iout,183) i, psav(i), j, blank

414 else

415 write (iout,183) i, psav(i), j 416 end if

417 else if (j .le. mf ilmz+mlmnts) then

418 j = j -mfilmz

419 Iflmnt(j) = psav(i)

420 il (local) then

421 write (iout,184) i, psav(i), j, blank

143
422 else

423 write (iout,18'l) i, psav(i), j 424 end if

425 else

426 j = j-mf ilmz-mlmnts

427 r2T>arm(j) = psav(i)

428 if (local) then

429 write (iou.t,185) i, psav(i), j, blank

430 else

431 write (iout,185) i, psav(i), j 432 end if

433 end if

434 end do ! vary

435

436 do m=l,niinixtr ! mixtures

437 mvlmn = mvlinnt(m)

438 if ( mvlmn. ne . 0) then ! vary

439 mmlmn = mmlmnt(m)

440 kk = kklmnt(m)

441 j = mfilmz+kk+1

442 if (iptw( j ) .ne . -1) then ! utilized

443 fu = 0.0

444 fv = 0.0

445 first = .true.

446 do lmn=l, mmlmn ! fractions

447 kk = kk+1

448 if (If Imnt(kk) .eq. 1) then ! vary

449 if (first) then

450 first = .false.

451 kkl = kk

452 else

453 fv = fv+fflmnt(kk)

454 end if

455 else ! froz

456 fu = fu+ff Imnt(kk)

457 end if

458 end do ! fractions

459 fflmnt(kkl) = 1.0-fu-fv 1 constraint

460 end if ! utilized

461 end if i vary

462 end do ! mixture

463

464 if (Ibdry) write (iout,186)

465 c

466 467 call corlat

468 call scatol (3)

469

470 return

471 472 101 format (/' oops, all model parameters are frozen, at least'

473 & /' one of them must be allowed to vary. ') 474 102 format (/' Scan a grid of model parameters: (z,p,f). '

144
475 £ /' Grid Info: DO-loop parameters

476 /' Grid Info:', 4x, '1,', 8x,

477 ft •Initial,', 6x, 'final,', Bx, 'increment' ) 478

479 111 format (/' Enter: 1, zl, z2, z3 (widths) ')

480 112 format (3x,i4, ')', 3x, i5, 3x. 3fl3.4, 5x, '(', i3, ')')

481 113 format (/' oops, inconsistent data input ')

482

483 121 format (/' Enter: 1, 11, f2, 13 (fraction) ')

484 122 format (3x ,14, ')', 3x, 15. 3x, 3fl3.4, 5x, '(', 13, ')')

483 486 123 format (/' oops , inconsistent data input '

)

487 131 format (/' Enter: 1, pi, p2, p3 (parameters) ') 488 132 format (3x,i4, ')'. 3x, 15, 3x, Ip3el3.4, 5x, »('. 13, ')')

489 133 format (/• oops, inconsistent data input ') 490

491 492 135 format (/' oops, inconsistent info: mvary')

493 141 format (/' Enter: option regarding the grid scan:'

494 ft /' 0, no optimization, |g| only,'

495 ft /' 1, full optimization, Jacoblan. '

)

496 142 format option ' ' , 11)

497

498 143 format (/' oops, Inconsistent data input ')

499 151 format (/' Restart by attempting to read breaikpolnt info')

500 152 format Ix, 3110, lpel5.6, 5x, '(mvary, kts, ktm, residual)')

501 153 format (/' Enter: 1. Ip, pp, psav (breakpoint info) ')

502 154 format Ix, 2(14, Ix), Ip2el5.6 ) 503 155 format (/• oops, your attempt at restarting has failed.')

504 156 format (/' oops, your attempt at restarting has failed.')

505

506 161 format ( » Good, your attempt at restarting was successful.')

607 162 format (/• Note: NO attempt was made to restart.'/)

508

509 171 format (Ix , 14, Ix, 2110, lplel5.6, 5x, ' mvary , kts , ktm, residual '

)

510 172 format (Ix , 2(14, Ix), Ip2el5.6, 5x, ' 1, ip, p, p(mln) ')

511 173 format (' wall clock: time = ', a8, ' ' hh.:mm:ss'

512

513

ft /

date = ', a9, ' ' yy-mmm-dd* )

514 181 format (/' number of grid points scanned, kts =', 110

515 ft /' population along the minimum, ktm =', 110

516 ft /' norm of the residual, Igl =', lpel3.5.

517 ft ' (degrees)' ) 518 182 format (/• model parameter value along the minimum:')

519 183 format (Ix , 14, ')', lpel5.5, ', for:', 15, ', (z)'.

520 ft al , ' ' boundary')

521 184 format (Ix , 14, ')', lpel5.B, ', for:', 15, ', (f)',

522 k al ,

' ' boundary '

)

523 185 format (Ix . 14, ')', lpel5.5, ', for:', 15, ', (p) '

,

524 t al, ' ' boundary')

525 186 format (/' Note: minimum point is near a boundary.')

626 527 end

145
6.2.10 SEEKOl.FOR

1

23

4

58

789

10

1112

1314

15

1617

18

1020

2122

23

24

2526

27

28

2930

3132

3334

353637

38

3940

41

424344

454647

48

40

SO

subroutine seekol

Find a single set ol model parameters (z,f ,p)

which minimizes the sum of least-squares error residuals

to the set of ellipsometric equations governing experiment.

Mathod of solution: deunped least-squares analysis.

include

include

include

include

include

include

include

'iounit .

'defnit .

'f ilmmm.

' xprmnt .

' arrays .

' wstack .

'htmdyy . '

logical first, jump

raddeg = 180.0 /pi

llnorm = .true,

call asmbl

call norm (meqns, bb, bn, 1)

if (bn .eq. 0.0) retiixn

bnl = bn

bn2 = bn

loop = 0

niter = mvary*4

write (iout.lll)

write (iout,112) loop, bn

aa,bb,xx

p,u,v,w,xw,se, aat,aats

degrees/radian

ASMBL, renormalize g

ia,ja,aa,bb

residual

! initial

! last

\ number of iterations

Btepsize reductions

iterations

initialize Newton step

scale columns, A

itry = 0

loop = loop+1

do i=l,mvary

xx(i) = 0.0

end do

call scaljj (meqns ,mvary,ia,ja, aa, XX, aats,w,2) ! call cgnl (meqns ,mvary,ia,ja, aa,bb, XX,

I; niter, u,v,w, xw,se)

do i=l,mvary ! account for scaling

xx(i) = xx(i)/aats(i) ! columns in SCALJJ

se(i) = se(i)/aats(i)

end do

2 do i=l,mvary

j = iptu(i)

h = xx(i)*0.4

s = se(i)*0.4

if (j .le. mfilmz) then

f = widths(j)

! update

! step

! estimated standard deviation

! z, thicknesses

'i value

146
51 j UxLw Ox w aXlL w Y

52 C* write (iout ,131) i,f,h,j

53 ha = ainaxl (s, f*0.2, 0.05) f IXUUOX UULXLLU 54 haAid — ainini mu^AL^ ( cf ' a^<! ClUa (yi') 1 ym'\ XhCLJ XvWOx UOUxLvL if fh It 0 0^ ha=-'ha

56 aat(i) = f j X O W CLXJ.L 57 wxuwXiS^jy — GuuaA 1 \\J , \J f ± ^Xla /

1 const raint

58 .Qxso ix • • xnx ixmz^iuxniii w s V wILOIL 1 volume fractions

59 J ~ J mxiXiuz

1 vaJ.110 61 Kor = n ^ n TTin +; f i i LLX XilLLL V \ A y

1 uxLC O X w aXXL b y

62 c* write (ioiit|132) i,f,h,j

63 ha = airiaxl (s, abs (1*0.2), 0.01) j upper bound

64 ha — aminl Cs» ahs Ch) , ha) '

1 TowaT bound

65 il (h. It. 0.0) ha=-ha

66 aat(i) = f retain

67 fflmntfi) = f+ha

68 eXs 0 naTamataT wax cuiLO vox s

69 T = 1 —Tti'f i T Tny —n\l imrh ^

70 f — rrparin( j ) j value

71 LLX ^ax ill V J /

j line art aint v

72 c* write (iout, 133) i,l,h,j

73 ha — amaxl (s , abs (1 +0 . 2)

)

upper bound

74 ha — aminl T cr abs i h ) ha i

1 lower hound

75 if ^'Vi ^XL • 1+X w nV . v / hn=-'ha lit* — ILa 76 aat(i) = f ! retain

7*7

r * xxDaxuiV J

/ x~llci 78 end il

79 and do

80

81 1 Tunn = ^ a 1 s a escape switch.

82 W^ rfft iTi Ui = 1X , mini iLUlLXJLytTWX algebraic constraint

84 invlinii ~ inv limit (m)

85 il (mvXmn . ne . 0 ) then something varies

86 nunlmn ~ niinlnmt(in)

O 1 k> = kklmntfm*) aaXilUL W \ ill J

fiQ 11 =~ mflUX X^iU^^JWA n lmz"+>Tc+l• X 89 XX1 f\ XT T»+".tj u * *< ^i'^ \ 1 y • naXLw • —1^X y uxloxi an utilized

wu fn = 0 0

91 X V V » V

92 XXxSw • wxllO*

vo doUV Tirm^l X lUt 1 X ,itUII^Alukfc Tiiinl_mTi 94 — J.

95 •i -f f 1 -f 1 Trnrt f »^ ma l") than ! vary

96

97 xxxaw — .XGIXOO.

98 XX X — x&

99 else

100 fv = lv+lflinnt(kk)

101 end if

102 else ! froz

103 fu = fu+ff linnt(kk)

147
104 end if

105 end do i volume fractions

106 fflinnt(kkl) = l.O-fu-fv ! constraint

107 end if ! utilized

108 end if ! vary

109 end do ! mixture

110

111 if (jump) goto 6 ! escape

112 113 call asmbl ! ia,ja,aa,bb

114 call norm (meqns, bb, bn, 1) ! residual

115 total = bn /bnl ! total reduction

116 relat = bn /bn2 ! relative reduction

117

118 if (total .le. l.E-5) then ! convergence

119 bn2 = bn ! retain

120 goto 5 ! escape

121 end if

122

123 if (relat .le. 0.999) then ! converging

124 bn2 = bn ! retain

125 goto 4 ! iterate

126 end if

127

128 do i=l,mvary ! reset

129 j = iptu(i)

130 if (j .le. mfilmz) then

131 widths(j) = aat(i)

132 else if (j .le. mfilmz+mlmnts) then

133 j = j -mfilmz

134 fflmnt(j) = aat(i)

135 else

136 j - j-mf ilmz-mlmnts

137 riparm(j) = aat(i)

138 end if

139 end do

140

141 if (itry.lt. 3) then ! try again

142 itry = itry+1

143 do i=l,mvary

144 xx(i) = xx(i)*0.5 ! reduce stepsize

145 end do

146 goto 2

147 end if

148

149 if (loop .le. 3) then [ convenience

150 write (iout,114)

151 if (relat .le. 1.0) then ! marginal

152 write (ioutjllB)

153 else ! divergence

154 write (iout,116)

155 end if

156 end if

148
157 juinp — yxLLO • escape

158 goto 3 ! constraint

159

180 t write (iout,113) loop, relat, total, bn

161 goto 1

162 5 write (iout.llS) loop, relat, total, bn

163 0 continue

164

165 C

166 c Output results of iterations involving least-squares.

167

168 write (iout,12l) ! results

169 do i=l ,mvary

170 j = iptu(i)

i i i if (j .le. mfilmz) then ! widths

172 write (iout,122) i, widths(j), se(i), j

1 73 else if (j .le. mf ilmz+mlmnts) then ! fractions

174 j = j -mfilmz

175 write (iout,123) i, fflmnt(j), se(i), j 176 else ! parameters

177 j = j-mf ilmz-mlmnts

178 write (iout,124) i, rrparm(j), se(i), j 179 end if

180 end do

181 write [iout,125) bnl , bn2 ! compare

1

183 c

184 call corlat ! correlation matrix

185 call Bcatol (3) ! plot deviations of

186 return

187

188 111 format (/* seek: loop, ratio of reduction, Igl'

189 k /' (rel) (total) ')

190 112 format ( 8x, i5, 24x, lplel2.3)

191 113 format ( 8x, i5, Ip3el2.3)

192 114 format ( 8x, 'stepsize reduction attempted.')

193. 115 format ( 8x, '... slow convergence. ')

194 116 format ( 8x, '... divergence. ')

195

196 121 format (/' model parameter value along the minimum:')

197 122 format (5x, i5, ')', 115.4, fl0,5, ', for:', i5, • ' (z,zu)')

198 123 format (5x, i5, ')', 115.4, 110.5, ', lor:', i5, ' ' (l,lu)')

199 124 format (5x, i5. ')', 115.4, 110.5, ', lor:', i5, ' * (p,pu)')

200 125 format (/' initial Igl =', lplel3.5.

201 k /' linal Igl =', el3.5)

202

203 131 format (20x, i5, ')', Ip2el5.5, ', lor:', i5, ' ' (z.dz)')

204 132 format (20x, i5. ')', Ip2el5.5. ', lor:', i5, ' ' (l,dl)')

205 133 format (20x, i5, ')', Ip2el5.5, ', lor:', i5, ' ' (p,dp)')

206

207 end

149
6.2.11 SEEK02.F0R

1

23

4

56

78

g10

111213

14

1516

17

18

19

20

212223

24

252627

28

2930

313233

34

353637

38

39

40

41424344

4546

47

48

49

50

subroutine seeko2

Find a single set of model parameters (z,f,p}

which minimizes the s\m of least-squares error residuals

to the set of ellipsomstric equations governing experiment.

Method of solution: damped least-squares analysis

.

include ' iounit .

include •defnit.

include 'f ilmmm.

include ' xprmnt .

include ' arrays .

! aa,bb,xx

include ' wstack .

! p,u,v,w,xw,se, aat.aats

include 'nestol .! pppl, ppp2, ppp3

include ' handyy .! pi

logical first, jump

raddeg - 180.0 /pi

llnorm = .true

.

! ASMBL, renormalize g call asmbl ! ia,ja,aa,bb

call norm (meqns , bb

,

bn. 1) ! residual

if (bn .eq. 0.0) return

bnl = bn

bn2 = bn

loop = 0 niter = mvary*4

write (iout.lll)

write (iout,112) loop, bn

! initial

! last

! number of iterations

stepsize reductions

iterations

initialize Uewton step

1 itry = 0 loop = loop+1

do i=l,mvary

xx(i) = 0.0

end do

call scaljj (meqns ,mvary,ia,ja, aa, XX, aats,w,2) ! scale columns, A call cgnl (meqns ,mvary,ia,ja, aa,bb, XX,

t niter, u,v,w, xw,se)

do i=l,mvary ! account for scaling

xx(i) = xx(i)/aats(i) ! columns in SCALJJ

se(i) = se(i)/aats(i)

end do

2 do i=l,mvary

j = iptu(i)

h = xx(i)*0.4

s = se(i)*0.4

if (j .le. mfilmz) then

! updat e

! step

! estimated standard deviation

! z, thicknesses

150
51 f = widths(j) ! value

52 g = uwidth(j) ! uncertainty

53 c* write (iout,131) i,f,h,j

54 ha = eimaxl (s, f*0.2, 0.05) ! upper bound

55 ha = aminl (g, abs (h) , ha, ppp3(i)) ! lower bound

56 if (h. It. 0.0) ha=-ha

57 aat(i) = i ! retain

58 widths(j) = amaxl (0.0, i+ha) ! constraint

5060 if (widths(j) .It. pppl(i)) then ! bounds

61 widths(j) = pppl(i)

62 else if (widths(j) .gt. ppp2(i)) then

63 Hidths(j) = ppp2(i)

64 end if

65

66 else if (j .le. mfilmz+mlmnts) then ! volume fractions

67 j = j-mfilmz

68 f = fflmnt(j) ! value

60 g = uflrant(j) ! uncertainty

70 c* write (iout,132) i,f,h,j

71 ha = eunaxl (s, abs (f*0.2), 0.01) ! upper bound

72 ha = aminl (g, abs (h) , ha, ppp3(i)) ! lower bound

73 if (h. It. 0.0) ha=-ha

74 aat(i) = f ! retain

75 fflmnt(j) = f+ha

7677 if (fflmnt(j) .It. pppl(i)) then ! bounds

78 fflmnt(j) = pppl(i)

70 else if (fflmnt(j) .gt. ppp2(i)) then

80 fflinnt(j) = ppp2(i)

81 end if

82

83 else ! parameters

84 j = j-mf ilmz-mlmnts

85 f = rrparra(j) ! value

86 g = urparm(j) ' ! uncertainty

87 c* write (iout,133) i,f,h,j

88 ha = amaxl (s, abs (f*0.2)) ! upper bound

80 ha = aminl (g, abs (h) , ha, ppp3(i)) ! lower bound

90 if (h. It. 0.0) ha=-ha

01 aat(i) = f ! retain

02 rrparm(j) = f+ha

03

04 if (rrparm(j) .It. pppl(i)) then ! bounds

95 rrparm(j) = pppl(i)

96 else if (rrparm(j) .gt. ppp2(i)) then

97 rrparm(j) = ppp2(i)

98 end if

90

100 end if ! z,f ,p

101 end do ! vary

102 •

103 jump = .false. ! escape switch

151
104

105 3 do in=l,mmixtr ! algebraic constraint

106 jnvlmn = mvlinnt (m)

107 if (mvlmn.ne . 0) then ! something varies

108 mmlmn = mmlmnt(m)

109 kk = kklrant(m)

110 j = mfilmz+kk+1

111 il (iptw( j ) .ne . -1) then ! utilized

112 lu = 0.0

113 ±v = 0.0

114 first = .true.

115 do linn=l .mmlmn

lie kk = kk+1

117 if (Iflmnt(kk) .eq.l) then ! vary

118 if (first) then

119 first = .false.

120 kkl = kk

121 else

122 fv = f v+f f Imnt(kk)

123 end if

124 else ! froz

125 fu = fu+ff Imnt(kk)

126 end if

127 end do ! volume fractions

128 fflmnt(kkl) = 1.0-fu-fv ! constraint

129. end if ! utilized • 130 end if ! vary

131 end do ! mixture

132 133 if (jump) goto 6 ! escape

134

135 call asmbl ! ia,ja,aa,bb

136 call norm (meqns , bb, bn, 1) ! residual

137 total = bn /bnl ! total reduction

138 relat = bn /bn2 I relative reduction

139

140 if (total .le. l.E-5) then I convergence

141 bn2 = bn ! retain

142 goto 5 ! escape

143 end if

144

145 if (relat .le. 0.999) then ! converging

146 bn2 = bn ! retain

147 goto 4 ! iterate

148 end if

149

150 do i=l,mvary ! reset

151 j = iptu(i)

152 if (j .le. mfilmz) then

153 widths(j) = aat(i)

154 else if (j .le. mf ilmz+mlmnts) then

155 j = j -mfilmz

156 fflmnt(j) = aat(i)

152
IK? Lot 158 j = j -mf ilmz-mlimts

159 160 end if

161 onci do

162

163

184 i wi y — i uxyx

1

165 do i=l,invaxy

186 167 end do

168 goto 2

169 end H

170

171 c if ( x0013 . Xg . 3 J tilOTl ' ATnr *»Ti T «ti^#» 172 c nTits fioul; 114^

173 c ii (relat .Is. 1.0) then. ' marerinal

174 c write (iout.llB)

175 c AlSfi 1 ^ ir AT*cr ATI

A

176 177 c ozid i.£ 178 c end if

179 jump = . true . ! escape

180 goto 3 ! constrainlj

181

182 4 cont inue

183 c write (iout,113) loop, relat, total, bn

184 ffOtO 1

185 5 continue

1 86 t7 T" T "t: A 11 All ^ i 1 ^ 1 T A rtTl T'ATft+: ^rt+ial V»T1 187 6 continue

188

189 c

190 c Output result s of iterations involving leas t ^scj^uares • 191

192 c write (iout|12l) ! results

193 c do i— IjiTivary

194 c i ~ iiDtufi^

195 Q if ( T Ifl m'f 3 Xmz ^ tHeTv ' dtlis

196 BTita fiout 1221 i widthsfil safi) i 197 c else if (j . le . mf ilmz+mlmnts) then ! fractions

196 c J ~ j~nifilznz

199 c write (iout , 123) i , f f linnt (j), se(i)i j 200 Q else ! parameters

201 c j = j -mf ilmz-mlmnts

202 Q wri HXXVOtft f^XVbiU|XA7/ i out 174^ X|i rmaTTn XXk/aXtllVJ/} f "i ^ safi^ ''^V^/l iJ c OXLCL XX

204 end do

205 C write (iout, 125) bnl, bn2 ! compare

206

207 C

208 C call corlat ! correlation matrix

209 C call Bcatol (3) ! plot deviations ol

153
210

211 return

212 213 111 format (/' seek: loop, ratio of reduction, Igl

214 & /' (rel) (total) ')

215 112 format ( 8x, i5, 24x, lplel2.3)

216 113 format ( 8x, i5, Ip3el2.3)

217 114 format ( 8x, 'stepsize reduction attempted.')

218 115 format ( 8x, slow convergence. ')

219 116 format ( 8x, divergence. ')

220

221 121 format (/' model parameter value along the minimum:')

222 122 format (5x, iB, ')', fl5.4, flO.5, ', for:', i5, ' ' (z,zu)')

223 123 format (5x, iB, ')', flB.4, flO.B, ', for:', iB, ' ' (f,fu)')

224 124 format (Bx, iB, ')', flB.4, flO.B, ', for:', iB, ' ' (p,pu)')

225 125 format (/' initial Igl =', lplel3.B,

226 t /> final Igl =' , el3.5)

227

228 131 format (20x, iB, ')', lp2elB.B, ', for:', iB, ' ' (z,dz)')

229 132 format (20x, iB, ')', lp2el5.B, ', for:', iB, ' ' (f.df)')

230 133 format (20x, iB, ')', lp2elB.B, ', for:', iB, ' ' (p,dp)')

231 232 end

154
6.2.12 ASMBL.FOR

1 subroutine asmbl

2 include 'iounit.'

3 include 'defnit.'

4 include 'lilmmm.'

6 include 'xprmnt.'

6 include 'arrayd.'

7 include ' arrays .

'

8 include 'filmsc'

9 include ' abcdef .

'

10 include 'handyy.* i pi

11

12 logical first, firstv

13

14

15 mmm = ml ilmz+mlrints+mrpars

le do m=l,minm ! local, column in a ron of: aa

ir if (iptw(m) .ne .-1) then ! utilized, retain info from ARRAWG

18 iptff(m) = 0 ! global > local into: aa

le end if

20 iptx(m) = 0 ! local > global into: iptw

21 end do

22

23 ia(l) = 1

24 ii = 1 ! lA

25 jj = 0 ! JA

28 izs =0 ! (z,e) , sample

27 ias = 0 ! ambient , sample

28 iras = 0 ! repeat , ainbient , sample

29 ixpts = 0 ! expt , repeat .ambient , sample

30

31 do is=l,mseunpl

32 mfilm = mmfilmCis) ! FILMSS

33 mfilms = mfilm+1 ! f ilms/substrate

34 mfilma = mfilm+2 ! Eunbient/f ilms/substrate

35 mzB = mfilm*2+l ! (z,e),(e)

36 mv = 0 ! local, unique, vary

37

38 do m=l, mfilms

39 if (m.ne .mfilms) then ! films

40 izs = izs+1 ! widths

41 iwidth = iifilm(izs)

42 zzz(m) = widths (iwidth) ! FILMSS

43 if (IwidthC iwidth) . eq. 1) then ! vary

44 j = iwidth

45 if (iptw(j) .eq.O) then ! unique, compress

46 mv = mv+1 ! local

47 iptw(j ) = mv

48 ' iptx(mv) = j 49 jj = jj+1 ! within row A

50 ja(jj) = iptv(j) ! column, global

155
I

51 end if

52 end if

53 end if

54 izs = izs+1 ! films/substrate

55 imixtr = iif ilm(izs) ! mixture

56

57 niixflm(m) - imixtr ! initialize

°s

59 mvlmn = mvlmnt( imixtr) ! vary

60 if (mvlmn. ne .0) then ! fraction

61 first = .true. ! constraint, l=u+v

62 mmlmn = mmlmnt( imixtr) ! quantity

63 kk = kklmnt (imixtr) ! offset

64 do lmn=l, mmlmn

85 kk - kk+1 ! monotonic

66 if (If Imnt(kk) . aq. 1) then 1 vary

67 j = mfilmz+kk ! global

68 if (first) then ! constraint on: dv(l)

69 first = .false.

70 else if (iptw( j ) . eq. 0) then

71 mv = mv+1 ! local unique

72 iptw(j ) = mv

73 iptx(mv) =

j 74 jj - jj+i • along a row within A

75 ja(jj) = iptv(j) ! column

76 end if

77 end if ! vary

76 end do ! fraction

79 end if ! something varies

80

81 mvpar = mvparm( imixtr) ! vary

82 if (mvpar, ne.O) then ! pareuneter

83 mrpar = mrparm( imixtr) ! quantity

84 kr = krparm(imixtr) ! offset

85 do irp=ljmrpar

36 " kr = kr+1 i offset

87 ip = jrparm(kr) ! specify index

88 if (Irparm(ip) . eq. 1) then ! vary

89 j = mf ilraz+mlmnts+ip ! global, \mique

90 if (iptw(j) .eq.O) then ! unique

91 mv = mv+1 ! local, compress, aa

92 iptw(j ) = mv

93 iptx(mv) = j 94 jj = jj+1

95 ja(jj) = iptv(j) ! column

96 end if

97 end if I vary

. 98 end do ! parameters

99 end if ! something varies

100 end do ! mfilms

101

102 mvsav = mv I convenience

103 jjsav = jj

156
104

105 mbien = mmbeiit(is) ! quantity

108 do inbii.= l , mbien ! aimbients

107 ias = ias+1

108 inrpeat = mmpeat(ias)

109 imbien = iibentCias) ! specify eunbient

110 imixtr = mixmbn( imbien) ! mixture used as ambient

111

112 mixflm(mf ilms+l) = imixtr ! mixture used as ambient

113 mv = mvsav

114 jj = jjsav

115 -

118 mvlmn = mvlmnt( imixtr) ! vary

117 if (mvlmn. ne.O) then ! fractions

118 first = .true.

119 mmlmn = mmlmnt (imixtr)

120 kk = kklmnt (imixtr) ! offset

121 do lmn=l, mmlmn ! fractions

122 kk = kk+1

123 if (Iflmnt(kk).eq.l) then ! vary

124 j = mfilmz+kk

125 if (first) then ! constraint

126 first = .false.

127 else if (iptw(j) .eq.O) then

128 mv = rav+1 ! local, compress

129 iptw(j ) = mv

130 iptx(mv) = j 131 jj jj"*"! ' along a row in A

132 ja(jj) = iptv(j) ! column

133 end if

134 end if ! vary

135 end do ! fractions

136 end if ! something varies

137

138 mvpar = mvparm( imixtr) ! vary

139 if (mvpar. ne.O) then ! parameters

140 mrpar = mrparm(imixtr)

141 kr = krparm( imixtr) ! offset

142 do irp=l, mrpar

143 kr = kr+1

144 ip = jrparm(kr) ! specify index

145 if (Irparm(ip) . eq. 1) then

146 j = mf ilmz+mlmnts+ip

147 if (iptw(j) .eq.O) then ! unique

148 mv = mv+1

149 iptw(j ) = mv

150 iptx(mv) = j 151 jj = jj+1

152 ja(jj) = iptv(j)

153 end if

154 end if

155 end do

156 end if

157
157

158 inni — mmix'tr+imbiaii ! offset, ambient

159 / \ I mvpar = mvparm(.min; ! vary

160 if (mvpar .ne . 0) then ! parameter

161 rarpar = mrparm(nmi) ! quantity

162 kr = krparmCnun) ! offset

183 do irp=l, rarpar

164 kr = kr+i ! offset

165 ip = jrparmCkr; ! specify index

166 if (.IrparmCip; . eq. 1; then ! vary

167 j = mf ilraz+mlmnts+ip ! global

168 if (iptwCj ) .9q.O) then ! unique

169 mv = rav+1 ! local, compress, aa

170 iptw( j ) = mv

171 iptxCmv) =

3 172 jj =

173 ja(jj) = iptv(j)

174 and if

175 end if

176 end do

177 end if ! something varies

178

179 If tniv.eq.OJ then ! something should vary

180 write (iout,102) is,mbn

181 stop

182 end if

183

184 mvari = mv ! local quantity

185 firstv - .true. ! yet need row: delta

186

187 do irpeat=l .mrpeat ! repeats

188 iras = iras+1

189 mexpt = mmexpt(iras)

100

191 needs = jj + mv + mv*(mexpt-l)*2

192 if (nnjaaa .It. needs) then

193 write (iout,103) needs

194 stop

195 end if

197 do ixpt=l,mexpt ! measurements

198 ixpts = ixpts+1

1 OQ

200 wavlnl = wavlns( ixpts) ! nano-meters

201 wavln2 = wavlnu( ixpts)

202 anglel = angles(ixpts) ! radians

203 angle2 = angleu( ixpts)

204 psil = psiiis(ixpts) ! radians

205 psi2 = psiiiu(ixpts

)

206 doltal = deltas (ixpts) ! radians

207 delta2 = deltau(ixpts)

208

209 do m=l,mfilma ! initialize, indicate

158
210 i — iTiixf Ini(in) 211 iii51*jL^l^ — .bxu.6. ! XieOu, OX OVaXLLablOn

212 BXLU CIO 213

214 C i^j.sc8xn. uxoxecbxic xiuic^ions ^z^

215

216 xniix'tr ~ nixxitiDiiv. l>niDi.Giiy ! siinDXCiL't 217 f i.rs'tx(i.inix'tr) — .£ also . 218 call diefcn (i.mbd.6ii| i.mix'trj anglol^ vavlnl.

219 C d.i.sl6c( imix'tr) ) dielewC imi.x'tr).

220 yB

221 S

^uxoxpp ^ A 1 ^^T^ I 1 T ^ V + ^ 1 *5 T « T « f T fH ^ V ^ ^* 1 1 v j> t xmxx wx ^ 1 dXQxpa V. x » xmxx bX ^ ^ 222 223 XZ5 — X2S mzs : xosow pojLXLwex

224

225 226 izs — xzs^x

227

228 xza — X£to~ X 229 xmxx'tr = xxf xlm ( xzs ) 230 xf (fxrs'tx(xinxx'tr) ) 'then ! fxrsli

231 f xrs'tx(xinxx'tx) — . false . 232 call dxoifcii (xmlsxeiiy xmxxifXi

233 Lc aziglol , wavliil ^ 234 S CLXGXOCv xmxxxxy « cixexowv. xinxxbir^ ^ 235 C cLxexxx ^ X J xmxxxr^ ^ 236 K Hux1 fto TXT»Tiu f1v.X|Xiux^wxy nTnTY+;^^ y HifilTiail ux c X k^a \^ x | xiiix iTniYtTii mx j j 237 ezid xf

238 QxO \In^ — CLX 6 xo c V, xmxjw bx y 239 eiicL do ! xxxms

240

241 xsaznpl — xs

242 xzsinpx — xzs~inzs ; xesou xiiu.tiJL 243 caxx scaxux ^^avxiiiy axigxexy

244 S X s ampx y xz smpx | xiuuxexi y in v ax x j 245

246 DDV,XX y— pSXx D^X> . P**-** 247 C* DD^XX'Xy — QoX w aX D V. ^ V • ".ox w <x 248 call dxiier (.deltal, Dt2J , axiij

249 DD^xx^xy — axxx

250

251 Xa^XX'Xy =— XClvXX lafil J*i\\^ ^ +Tnv '• 133 i.

252 Xa^XX^^V xavXX'Xy ~IUV • u.o a u a

253

254 •i -f rfiT«i"fcv^ "fhon ' T3si frow already coni'Dlo'ted

255 XXxSwV — •XclXaOa

20tf Ho -1=1 mv ! tmiaiie

257 JJ JJ^-*- 258 ja(jj) = ja(jj-mv) ! delta

259 end do

260 else

261 do j=l,mv

262 jj = jj+1

159
263 ja(jj ) = ja(jj-mv) ! psi

264 ja(jj+mv) = ja(jj ) ! delta

265 end do

268 jj = jj+mv ! end of second row

287 end if

268

289 jv = 0

270 jl = ia(ii ) 271 j2 = ia(ii+l)-l

272 do j=jl,j2 ! initialize

273 aa(j ) = a(jv+l) ! psi

274 aa(j+mv) = a(jv+2) ! delta

275 jv = jv+2

276 end do

277

278 c , Renormalize the rows in the Jacobian matrix

279 280 if (llnorm) then

281 bb(ii ) = bb(ii )/psi2 ! psi

282 bb(ii+l) = bb(ii+l)/delta2 ! delta

283 do j=jl,j2

284 aa(j ) = aa(j )/psi2 ! psi

285 aa(j+mv) = aa( j+mv)/delta2 ! delta

286 end do

287 end if • 288

289 ii = ii+2

290 end do ! measurements

291 end do ! repeats

292 293 if (mv .gt .mvsav) then ! reset unique-ness

294 mvl = mvsav+1

295 do i=mvl,mv

296 j = iptx(i) ! point to: iptw

297 iptwCj) = 0 ! imique-ness

298 iptx(i) = 0

299 end do -

300 end if

301 end do eunbients

302 303 if (mvsav. ne.O) then ! reset unique-ness

304 do i=i, mvsav

305 j = iptx(i) ! point to: iptw

306 iptw(j) =0 ! unique-ness

307 iptx(i) = 0

308 end do

309 end if

310 end do ! sample

311 meqns = ii-1

312 313 if (jj .ne. ia(ii)-l) then

314 write (iout,104) ii, jj, ia(ii)

315 stop

160
316 end if

317

318 return

319

320 102 format (' asmbl,

321 4 /

322 103 format (' asmbl,

323 k /'

324 k /'

325 104 format (' asmbl,

326 k />

327 k /'

328 329 end

something should vary in the Jacobian,

sam.ple=', i2, ', ambient='s i2)

insufficient array allocation for: aa,ja'

see named common: arrays. ' update to atleast: ', ilO ) inconsistent formating of sparse matrix,'

ii = ' , ilO

jj = ', ilO, ' =/=', ilO, ' = ia(ii)-l')

161
6.2.13 ASMBLO.FOR

1 subroutine asmblO residual only

2 include 'iounit. 9

3 include ' defnit

.

1 TTieludfl ' T T TTiTfim t

5 include 'xprmnt. > include 'arrayd. 1

7 include ' arrays

.

1

8 include 'filmss. 1

9 include ' abc def

.

1

10

11 include ' handyy. » pi

12T logical first, firstv

13

14 mitim = mf ilmz+mlmnts+mrpars

T do !n-l,tninn local, coltimn in a row of: aa

16 if (iptw(m).nQ. -i) then utilized, retain info from ARRAN6

17 iptw(m) = 0 global —-> local into: aa

18 end if

19 iptx(m) = 0

1 local —-> global into: iptw

20 end do

21

22 ia(l) = 1 23 ii = 1 lA

24 jj = 0 JA

25 izs = 0 (z,e) .sample

29 ias = 0 ambient , sample

27 iras = 0 repeat , ambient , sample

28 ixpt s = 0 expt .repeat , ambient , sample

2930 do is=l,msampl

31 mfilm = mmfilmC is) FILMSS

32 mfilms = mfilm+1 films/ substrate

33 mfilma = mfilm+2 ambient/films/ substrate

34 iRzs = mfilm*2+l (z,e) , (e)

39 mv = 0 locals unique, vary

3637 do m=l, mfilms

38 if (m.ne .mfilms) then ; films

39 izs = izs+1 widths

40 iwidth = iifilm(izs)

41 zzz(m) = widths (iwidth) i FILMSS . 42 if (IwidthC iwidth) eq 1) then ! vary

43 j = iwidth

44 if (iptw(j) .sq 0) then ! unique, compress

45 mv = mv+i 1 local

46 iptwCj ) = mv

47 iptx(mv) =

j 48 jj = jj+1 within row A

49 ja(jj) = iptv(j) ! column, global

50 end if

162
51 end if

52 ozid xi

53 izs — izs+1 ' x^XiUS/ SUDS wxauO

54 imixtr = iifilm(izs) ! 1111^1! 11X0

55

56 nixf lin(in) — imixtr ! 57

68 lU V ^Alh^fc ill V ^illAfc W ^ ^ill^ A V ^ y vflry

59 4 "f (TTIvTtTITI Tlfl 0 I tVlfiTl 1 X X aw u X OXL 60 lirst = .'tmo. ! cons'fcT'aiTit 1 =ti+v

61 nunlmn = mmlmnt (imixtr) ! quantity

62 kk — kklmnt (imixtr) ! offset

63 do Tmn^l inTnT.TT\Ti 64 kk = kk+1 ! monotonic

65 if (Iflmiit(kk) .eq.l) then ! vary

66 j = miilmz+kk ! global

67 if (first) then ! constraint on: dv(l)

68 first = .false.

69 else if (iptw(j) .eq.O) then

70 mv = mv+1 ! local unique

71 iptw(j ) = mv

72 iptx(mv) =

j 73 ii = jj+l ! along a row within A ja(jj) = iptv(j) ! column

75 end if

76 end if ! vary

77 end do ! fraction

78 end if ! something varies

7980 mvpar = mvparm( imixtr) ! vary

81 if (mvpar. ne.O) then ! parameter

82 mrpar = mrparm( imixtr) ! quantity

83 kr = krparm(imixtr) ! offset

84 do irp=l,mrpeu:

85 kr = kr+1 ! offset

86 ip = jrparra(kr) ! specify index

87 if (Irparm(ip) . eq. 1) then ! vary

88 j = mf ilmz+mlmnts+ip ! global, unique

89 if (iptw(j) .eq.O) then ! unique

90 mv = mv+1 ! local, compress, aa

91 iptw(j ) = mv

92 iptx(mv) = j 93 jj = jj+l

94 ja(jj) = iptv(j) ! column

OR end if

96 end if ! vary

97 end do ! parameters

98 end if ! something varies

99 end do ! mfilms

100

101 mvsav = mv ! convenience

102 jjsav = jj

103

163
104 mbien = minbent(is) ! quantity

105 do mbii=l , mbien ! ambients

106 ias = ias+1

107 mrpeat = mmpeat(ias)

108 imbien = iibentCias) ! specify ambient

100 imixtr = mixmbn(imbien) ! mixture used as ambient

110

111 mixf ImCmf ilms+1) = imixtr ! mixture used as ambient

112 mv = mvsav

113 jj = jjsav

114

115 mvlmn = mvlmnt (imixtr) ! vary

lie if (mvlmn. ne.O) then ! fractions

117 first = .true. ' ^ 118 mmlmn =mmlmnt( imixtr)

119 kk =. kklmnt( imixtr) ! offset

120 do . lmn= 1 , mmlmn ! fractions

121 kk = kk+1

122 if (If Imnt(kk) .eq, 1) then ! vary

123 j = mfilmz+kk

124 if (first) then ! constraint

125 first = .false.

126 else if (iptw( j ) . eq. 0) then

127 mv = mv+1 ! local, compress

128 iptw(j ) = mv

129 iptx(mv) = j 130 jj ~ jj'^l ' along a row in A

131 ja(jj) = iptv(j) ! column

132 end if

133 end if ! vary

134 end do ! fractions

135 end if ! something varies

136 137 mvpar = mvparm(imixtr) ! vary

138 if (mvpar. ne.O) then ! parameters

139 mrpar = mrparm( imixtr)

140 kr = krparm(imixtr) 1 offset

141 do irp=l, mrpar

142 kr = kr+1

143 ip = jrparm(kr) ! specify index

144 if (Irparm(ip) . eq. 1) then

145 j = mf ilmz+mlmnts+ip

146 if (iptw( j ) . eq. 0) then ! unique

147 mv = mv+1

148 iptw(j ) = mv

149 iptx(mv) = j 150 33 = 33"^^

151 ja(jj) = iptv(j)

152 end if

153 ©nd if

154 end do

155 end if

156

164
157 mm = mmixtr+imbien ! offset, Eimbient

158 mvpar = mvparm(mm) ! varv

159 if (mvpar. ne.O) then ! parameter

160 mrpar = mrparm(mm) ! quEtntity

161 kr = krparm(mm) ! offset

162 do irp=l, mrpar

163 kr = kr+1 ! offset

164 ip = jrparm(kr) ! specify index

165 if (Irparm(ip) . eq. 1) then ! vary

166 j = mf ilmz+mlmnts+ip ! global

167 if (iptw(j) .eq.O) then ! unique

168 mv = mv+1 ! local, compress, aa

169 iptwCi ) = mv

170 iptx(mv) = i 171

172 J V J J y -^xr * \ J V 173 end if

174 end if

175 end do

176 end if ! something varies

177

178 c* if (mv.eq.O) then ! something should vary

179 c* write (iout,102) is,mbn

180 c* stop

181 c* end if

182

183 mvari = mv ! local quantity

184 firstv = .tme. ! yet need rot?: delta

185

186 do irpeat=l ,mrpeat ! repeats

187 iras = iras+1

188 mexpt = mmexpt(iras)

189

190 c* needs = jj + mv + mv*(mexpt-l)*2

191 c* if (nnjaaa .It. needs) then

192 c* write (iout,103) needs

193 c* stop

194 c* end if

195

196 do ixpt=l, mexpt ! measurements

197 ixpts = ixpts+1

198

198 wavlnl = wavlns( ixpts) ! nano-meters

200 wavln2 = wavlnu(ixpts)

201 smglel = angles(ixpts) ! radians

arifflft^ CULK ^ O a = anO-LLft^trl^ flU O U I\ J^AlJ i^cntWO/s J 203 psil — ps iiis ( ixpt s ) ! radians

204 psi2 — ps iiiu( ixpt s

)

205 deltal = deltas (ixpts) ! radi^lns

206 delta2 = deltau( ixpts)

207

208 do m=l,mfilma ! initialize, indicate

209 i = mixflm(m)

165
210 firstx(i) = .true. ! need of evaluation

211 end do

212

213 C Discern: dielectric functions (z)

214

215 imixtr = mixrabn(imbien) ! ambient

216 f irstx(imixtr) = .false.

217 call diefcn (imbien, imixtr, anglel, wavlnl

,

218 t dieloc( imixtr), dielew( imixtr).

219 k dielff(l .imixtr)

,

220 k dielpp(l , imixtr) , dielpa(l , imixtr))

221

222 izs = izs-mzs ! reset pointer

223 do m=l,mfilms

224 if (m.ne.mf ilms) then ! skip widths

225 izs = izs+1

226 end if

227 izs = izs+1

228 imixtr = iifilm(izs)

229 if (f irstx(imixtr)) than ! first

230 f irstx(imixtr) = .false.

231 call diefcn (imbien, imixtr.

232 k anglel, wavlnl,

233 k dielec( imixtr), dielewC imixtr).

234 k dielf f(l , imixtr)

,

235 k diolppCl , imixtr) , diolpa(l , imixtr)

)

236 end if

237 die(m) = dielecCimixtr)

238 end do ! films

239

240 isarapl = is

241 izsmpl = izs-mzs ! reset index

242 call scattO (wavlnl, anglel.

243 k isampl, izsmpl, imbien, mvari)

244

245 bb(ii ) = psil - b(l) ! psi

246 C* bb(ii+l) = doltal - b(2) ! delta

247 call differ (deltal, b(2), diff)

248 bb(ii+l) = diff

249

250 c* ia(ii+l) = ia(ii )+mv ! psi

251 c* ia(ii+2) = ia(ii+l)+mv ! delta

252

253 c* if (firstv) then ! psi (row A) already completed

254 c* firstv = .false.

255 c* do j=l,mv ! unique

256 c* jj =

257 c* ja(jj) = ja(jj-mv) ! delta

258 c* end do

259 c* else

260 c* do j=l,mv

261 c* jj = jj+1

262 c* ja(jj ) = ja(jj-mv) ! psi

166
263 C*

264 C* end do

265 C* i i = i T +inv

266 C* end if

267

268 C* iv = 0 J 269 c* il = iafii ^ 270 c*

271

272 c* aaf"i 0.0. V

^ = a^Tv+ll J J ttVJV'J-y

Z ( o aa^jTinv> — a^jVT^^

274 jv = 1V+2

275 c* end do

276 277 c Renormalize the rows in the Jacobian

278

279 if (llnorm) then

280 bb(ii ) = bb(ii )/psi2

281 bbfii+lO = bbf ii+l) /delta2

282 c* do i = T 1 i 2

283 c* aa(i ) = aaCi )/T3si2

284 c* aa(j+inv) = aa( j+inv)/delta2

285 c* end do

286 end if

287

288 ii = ii+2

289 end do ! measurements

290 end do ! repeats

291

292 if (mv.gt .mvsav) then ! reset unique-ness

293 mvl - mvsav+1

294 do i—mvl,mv

295 "i = i^nt^cri"^ ' T5oiTi"fc to* iTatw

296 IT^twiTI — n ' llTl T mi A —71 fl *5 ^ 297 iptx(i) = 0

298 end do

299 end if

300 end do ! sunbients

301

302 il [mvsav. ne.O) then ! reset unique-ness

303 do i=l, mvsav

304 j = iptx(i) ! point to: iptw

305 xptw(j) — 0 S 'uni<jiie~ne s

306 i rct-y r 1^ = 0

307 end do

308 end if

309 end do ! sample

310 meqns = ii-1

311

312 c* if (jj .ne. ia(ii)-l) then

313 c* write (iout,104) ii, jj, ia(ii)

314 c* stop

315 c* end if

! delta

! end of second row

initialize

psi

delta

! psi

! delta

! psi

! delta

167
316 317 return

318

aie 102 format (' asmblO,

320 & /'

321 103 format (' asmblO,

322 Ic /'

323 ft /'

324 104 format (' asmblO,

325 ft /'

326 ft /'

327

328 end

something should vary in the Jacobian,'

sample=', i2, ambient=', i2)

insufficient array allocation for: aa,ja'

see named common: arrays. ' update to atleast: ilO ) inconsistent formating of sparse matrix,'

ii = ' , ilO

jj = ilO, ' =/=', ilO, ' = ia(ii)-l')

168
6.2.14 ARRANG.FOR

1 subroutine arrang ! discern global pointers

2 include 'iounit.'

3 include 'defnit.'

4 include 'filmmm.'

5 include 'xprmnt.'

6 include 'arrays.'

7

8 logical first

g

10 c The sparse matrix format of model pareuneters involve:

11 c [2(1), z(2), .... zCmfilmz)]

,

12 c [ f(2), .... f(mlmnts)] .(mixture first), ...

13 c C f(2), ... ] .(mixture last ),

14 c [p(l), p(2), ... ]_(mixture first), ...

15 c [p(l), ... ] .(mixture last ),

16 c Cp(l), ... ]_(eunbient first), ...

17 c Cp(l), ... ] .(ambient last ).

18

19 c where entities under-going variation are:

20 c z

' widths,

21 c f

' volume fractions,

22 c p

' pareuneters associated with distinct mixtures,

23 c p

' parEuneters associated with distinct ambient/modulation.

24

25 c The constraint on volume fractions within each mixture is:

26 c l=v+u ====> dv(l) = -dv(2)-dv(3)- ...

27

28

29 c Initialize distinct quantities which may undergo variation.

30

31 mmm = mf ilmz+mlmnts+mrpars

32 do m=l,mmm

33 iptw(m) = -1 ! initialize

34 end do

35

36 c Discern contiguous-ness of model pareuneters.

37

38 k = 0 ! (z,e),(e)

39 ias = 0 ! ambient ,seunple

40 do iB=l,msampl

41 mfilm = mmfilm(i8)

42 mfilms = mfilm+l ! films, substrate

43 do m=l, mfilms

44 if (m.ne .mfilms) then ! widths

45 k = k+1

46 iwidth = iifilm(k)

47 if (Iwidth(iwidth) .eq.i) then ! vary

48 iptw( iwidth) =1

49 else ! froz

50 iptw( iwidth) = 0

169
51 end ii

52 end if

53 k = k+1 ! dielectric function

54 imixtr = iifilm(k) ! mixture

55

56 itimlmn = mmlimt (imixtr) ! volume fractions

57 if (mmlmn.ne.O) then ! existence

58 kk = kklmnt (imixtr) ! offset

59 do lmn=l,mmljnn

60 kk = kk+1

61 j = mfilmz+kk

62 if (Iflmnt(kk) .eq.l) then ! vary

63 iptw(j) = 1 64 else ! froz

65 iptw(j) - 0

66 end if

67 end do

68 end if ! fractions

69

70 mrpar = mrparm( imixtr) ! parameters

71 if (mrpar. ne.O) then ! existence

72 kr = krparm(imixtr) ! offset

73 do irp=l, mrpar

74 kr = kr+1

76 ip = jrparm(kr)

76 . j = mf ilmz+mlmnts+ip

77 if (Irparm(ip) . eq. 1) then ! vary

78 iptw(j) = 1

79 iBlse ! froz

80 iptw(j) = 0

81 end if

82 end do

83 end if ! pareuneters

84 end do ! films

85

86 mbien = mmbent(is) ! quantity

87 do mbn=l, mbien ! ambients + modulations

88 ias = ias+1

89 imbien = iibent(ias) ! specify ambient

90 imixtr = mixmbn( imbien) ! mixture used as ambient

9192 mmlmn = mmlmnt (imixtr) ! volume fractions

93 if (mmlmn.ne.O) then ! existence

94 kk = kklmnt (imixtr) ! offset

95 do lmn=l, mmlmn

96 kk = kk+1

97 j = mfilmz+kk

98 if (If Imnt(kk) .eq.l) then ! vary

99 iptw(j) = 1 100 else ! froz

101 iptw(j) = 0

102 end if

103 end do

170
104 end if ! fractions

105

106 mrpar = mrparm(imixtr) ! pariuneters

107 if (mrpar. ne.O) then ! existence

108 kr = krparm(iinixtr) ! offset

109 do i=l, mrpar

110 kr = kr+1

111 ip = jrparm(kr)

112 j - mf ilmz+mlmnts+ip

113 if (Irparm(ip) .eq. 1) then ! vary

114 ipts(j) = 1

115 else ! froz

lie iptw(j) = 0

117 end if

118 end do

119 end if ! parameters

120

121 mm = mmixtr+imbien

122 mrpar = mrparm(mm) ! ambient modulation

123 if (mrpar. ne.O) then ! existence

124 kr = krparm(mm) ! offset

125 do i=l, mrpar

126 kr = kr+1

127 ip = jrparm(kr)

128 j = mf ilmz+mlmnts+ip

129 if (Irparm(ip) .eq. 1) then ! vary

130 iptw(j) = 1

131 else ! froz

132 iptw( j

)• =0

133 end if

134 end do

135 end if ! modulation pareuneters

138 end do ! ambient

s

137 end do ! sample

138 c = = = == = = === = = === = = ====: ===== === = = = ==: = -. ==== ====: = ====== = = =

130 c Induce ordering on model parameters, (z,f,p).

140

141 jj = 0 ! index extraneous baggage

142 i = 0 ! vary ' compress

143 k = 0 ! froz " compress

144 if (mfilmz .ne. 0) then

145 do m=l, mfilmz ! film widths

146 if (iptw(m) . eq. 1) then ! vary + utilized

147 i = i+1 ! compress

148 iptu(i) = m ! . full (vary)

149 iptv(m) = i ! vary (full)

150 else if (iptH(m) .eq.O) then ! iroz + utilized

151 k = k+1 ! compress

152 km = nrowss+l-k ! backwards

153 iptu(km) = m ! full (froz)

154 iptv( m) = km ! froz (full)

155 else ! extraneous baggage

156 jj = jj+i

171
157 ' write (iout.lOll) in 158 end if

159 end do

160 end if

161

162 do m=l ,jr.mixtr

163 mmlmn = inmlmnt(m)

164 if (miulmn.ne . 0) then

165 kk = kklmnt(m)

166 j = mfilmz+kk+1

167

168 if (iptwCj) .eq.-l) then

168 jj =

170 write (ioTit,1012) • m

171 else

172 first = .trua.

173 do lmn= 1 , mmlmn

174 kk = kk+1

175 . j = mfilmz+kk

176 if (Iflmnt(kk) .eq.l) then

177 if (first) then

178 first = .false.

179 else

180 i = i+1

181 iptu(i) = j 182 iptv(j) = i

183 end if

184 else

185 k = k+1

186 km = nrowss+l-k

187 iptti(km) =

j 188 iptv( j) = km

189 end if

190 end do ! fractions

191 end if ! utilized

192 end if I existence

193 end do ! mixture

194

195 if (mrpars .ne .0) then

196 j = mf ilmz+mlmnts

197 do m=l, mrpars

198 j = j+1

199 if (iptw( j ) . eq. 1) then

200 i = i+1

201 iptu(i) = j 202 iptv(j) = i

203 else if (iptw(j) .eq.O) then

204 k - k+1

205 km = nrowss+l-k

206 iptu(km) = j 207 iptv( j ) = km

208 else

209 jj = jj+1

! volume fractions

! quantity

! existence

! offset

! test extraneous mixture

i extraneous baggage

! utilized

! constraint : 1 = v+u

! offset, monotonic

! distinct, unique

! vary volume fraction

! constraint

! dv(l)=-dv(2)-dv(3)-.

.

! compress

! full (vary)

! vary (full)

! froz + utilized

! compress

! backwards

! full (froz)

! froz (full)

! parameters

! offset

I vary, utilized

! compress

! full (vary)

! vary (full)

! froz, utilized

f compress

! backwards

! full (froz)

! froz (full)

! extrazLoous

172
210 if f Irrsairindii^ . ea 1^ tlieri j v&ry

211 writo (10111; J 1013 ) m

£,!.£, X X 0<C 213 write (iout,1014) m

214 6IL(i

6zicl if

216 ATI H H/^ 1 TiAT'nmni^A're 217 AT^^^^ 1ayiq^ati/*a

218

219 C

220 TTi T <5 is Tiot Tiftcassarv luacausa l^cmi; •

221 a.x'o sot "to zoxo fxoin withint

222 c ASMBL, SCATOl, SCAT02.

223

224

225

XX ITT TIA Ol n+. rtT^ \ J J

* * V J 0 W V U

226

227 TflvaTV — i • W Vill Am W 0 0

228 m'fToz " ^ ' ^ V = It ! compsTBss

229

230 rs'tiim

231 1011 format (' note: extraneous width '

. i4)

232 1012 format (' note: extraneous mixtuxe '

, i4, (fraction)

233 1013 format (' note: extraneous pareuneter '

, i4, (vary)'

234 1014 format (' note: extraneous parameter '

, i4, ', (froz)'

235 end

173
6.2.15 SCATTR.FOR

1 subroutino scattr (wavlen, anglei, isampl, izsmpl, imbien, mvari)

2

3 include 'iounit.'

4 include 'defnit.'

5 include 'filmmm.'

6 include 'arrayd.'

7 include ' arrays .

8 include 'filmss.' ! z,e

9 include 'rstack.' ! R, dR

10 include 'abcdef.' ! a,b,c > output results

11 include 'hemdyy.' ! pi , cccc .wavlev

12

13 complex dRssumCnrowsf ) , dRpsuin(nrowsf ) , dRsw.dRpw

14 complex dedf , dedff , dedp

15 logical first

1617

18 imixtr = mixmbn( imbien) ! mixture used as ambient

19 air - sqrt (real (dielec (imixtr))) ! refractive index, FILMSS

20

21 if (wavlen .It. 0.0) then ! wavelength, nm

22 qqq = -(pi+pi) /wavlen ! inverse nm

23 else ! energy, eV

24 qqq = (pi+pi) *wavlen/wavlev ! inverse nm

25 end if

2627 call forwrd (qqq, anglei)

28

29 sx = real (Rs)

30 sy = aimag (Rs)

31 px = real (Rp)

32 py = aimag (Rp)

33 call polar (sx,sy,sr,sa,l)

34 call polar (px,py ,pr,pa,l)

3538 if (sr.eq.0.0) then

37 if (pr.eq.O.O) then

38 psi = 0.0

39 else

40 psi = 0.5*pi

41 end if

42 else if (pr.eq.O.O) then ! sr > 0.0

43 psi = 0.0

44 else if (pr.le.sr) then

45 psi = atan (pr/sr)

46 else

47 psi = 0.5*pi - atan(sr/pr)

48 end if

49

50 delta = pa-sa

174
51 1 il (delta.lt .0.0) then

52 delta = delta+2.0

53 goto 1

54 else if (delta. ge. 2.0) then

55 delta = delta-2.0

56 goto 1 57 end if

58 delta = delta*pi

59

60 'b(l) = psi ! radians

61 13(2) = delta ! radians

62

63 c

64 c Note: q ' radian/nanometer, dR/dq ' nanometer/radian

65 c q = w/c = (2*pi/hc) * [energy (eV)]

66 c dq/d(energy (eV)) ' radian/ [n£inomet8r-(eV)]

6768 hep = (pi+pi)/wavlev ! dq/d(energy) ' (2*pi/hc)

69 dUsw = dRsq*cmplx (hep, 0.0) ! inverse (eV)

70 dKpw = dRpq+cmplx (hep, 0.0)

71 e ======================================================

72 if (mvari.eq.O) goto 2

73

74 do i=l,mvari ! remove degeneracy, compress

75 dRssum(i) = cmplx (0.0, 0.0)

76 dRpsum(i) = emplx (0.0, 0.0)

77 end do

78

79 nun = mmixtr+imbien ! offset, ambient

80 iv = 0 ! (z,e), (e)

81 izs = izsmpl

82 mzs = mfilm*2+l ! (z,e), (e)

83 mfilms = mfilm+1

84 do m=l, mfilms ! films/substrate

85 if (m.ne .mfilms) then

86 iv = iv+1

87 izs = izs+1

88 iwidth = iifilm(izs)

89 if (Iwidth(iwidth) . eq. 1) then

90 j = iwidth

91 mv = iptw(j)

92 dRssum(mv) = dRssum(mv) + dRs(iv)

93 dRpsum(rav) = dilpsum(mv) + dRp(iv)

94 end if

95 end if

96 iv = iv+1

97 izs = izs+1

98 imixtr = iifilm(izs)

99 100 mmlmn = mmlmnt (imixtr) ! fractions

101 mvlmn = mvlmnt (imixtr)

102 if (mvlmn. ne.O) then ! vary

103 kk = kklmnt( imixtr) ! offset

175
104 first = .true.

105 do lmn=l ,mmlinii

106 kk. = kk+1

107 if (If Imnt (kk) . eq. 1) then ! vary

108 j = mfilmz+kk

100 if (first) then ! constraint

110 first = .false.

111 dedff = dielff (Imn.imixtr)

112 else

113 mv = iptw(j)

114 dedf = dielff (Imn.imixtr) - dedff

lis dRssuin(mv) = dRssum(mv) + dRs(iv)*dedf

116 dRpsiim(mv) = dRpsuiii(mv) + dRp(iv)*dedf

117 end if

118 end if ! vary

110 end do ! fraction

120 end if ! existence

121

122 if (mmlmn.ne .0) then ! dK/dw = (dR/de)*(de/dw)

123 dRsw = dRsH + dRs(iv)*dieleH(imixtr)

124 dRpw = dRpw + dRp(iv) *dielew(imixtr)

125 end if

126 127 mrpar = mrparm(imixtr) ! mixture parameters

128 mvpar = mvparm(imixtr)

120 if (mvpar .ne.O) then ! vary '

130 kr = krparm(imixtr) ! offset

131 do irp=l, mrpar

132 kr = kr+l

133 ip = jrparm(kr)

134 if (Irparm(ip) . eq. 1) then

135 j = mf ilmz+mlmnts+ip

136 mv = iptw(j)

137 dedp = dielpp(irp,imixtr)

138 dRssum(mv) = dRssum(mv) + da.s(iv)*dedp

139 dRpsum(mv) = dRpsum(rav) + dRp(iv)*dedp

140 end if ! vary

141 end do ! parameters

142 end if ! existence

143

144 C Here, we assume that ambient mixture does NOT vary, but

145 c parameters associated with an external modulation MAT vary,

146 c i.e., whenever they modify the dielectric properties of a

147 c layer within the seimple.

148

140 mrpar = mrparm(mm) ! eunbient parameters

150 mvpar = mvparm(mm)

151 if (mvpar, ne.O) then ! vary

152 kr = krparm(mm) ! offset

153 do irp=l, mrpar

154 kr = kr+l

155 ip = jrparm(kr)

156 if (Irparm(ip) . eq. 1) then

176
157

158 159

160

161 162

163

164

165

lee

167 168

169

170

171 172

173 174

175 176 177

178

170

180

181

182 183 184

185

186 187

188

189 190

191 192 193

194

195

198 197

198

199

200

201

202

203

204

205 206

207

208

209

j = mf ilmz+mlmnts+ip

mv = iptw(j)

dedp = dielpa(irp,imixtr)

dRssum(mv) = dRssxamCmv) + dRs(iv)*dedp

dRpsujii(mv) = dRpsum(mv) + dRp(iv)*dedp

end if ! vary

end do ! parameters

end if ! existence

end do ! films

ddel = pdel-sdel

dpsi = (ar*pprd-pr*ssrd)/(sr*sr+pr*pr)

c(l) = dpsi

c(2) = ddel

! dCpsi ) /d(angle),

! d(delta) /dCangle),

sxd = real (dRsw)

syd = aimag (dRsw)

pxd = real (dRpw)

pyd = ainag (dRpw)

sard = (8x*8xd+sy*syd)/sr

! Jacobian

k = 0 do i=l,mvari

sxd = real (dRsstmi(i))

syd = aimag (dRss\un(i))

pxd = real (dB.psuin(i)

)

pyd = aimag (dRpsum(i))

ssrd = (sx*sxd+sy*syd)/sr

pprd = (px*pxd+py*pyd)/pr

sdel = (sxi'syd-sy*sxd)/(sr*sr)

pdel = (px*pyd-py*pxd)/(pr*pr)

ddel = pdel-sdel

dpsi = (sr*pprd-pr*ssrd)/(sr*sr+pr*pr)

a(k+l) = dpsi

a(k+2) = ddel

k = k+2

end do

2 continue

sxd = real (dRsa)

syd = aimag (dKsa)

pxd = real (dRpa)

pyd = aimag (dRpa)

ssrd = (8x*sxd+sy*syd)/sr

pprd = (px*pxd+py*pyd)/pr

sdel = (sx*syd-8y*sxd)/(sr*sr)

pdel = (px*pyd-py*pxd)/(pr*pr) •

iRsI ' iRpI'

delta(s)

delta(p)

! delta'

! psi'

! d(psi ) /d(e)

! d(delta) /d(e)

incident angle

iRsI ' iRpI ' delta(s)

delta(p)

! delta'

! psi'

Jacobiem.

Jacobian

! frequency

IRsI

177
210 pprd - (px*pxd+py*pyd) /pr ! 1 Rp 1

211 sdel = (sx*syd-sy*sxd)/(sr*sr) ! delta(s)'

212 pdel (px*pyd-py*pxd)/ (pr*pr) ! delta(p)

213

214 ddel pdel-sdel ! delta'

215 dpsi (sr*pprd-pr*ssrd)/ (sr*sr+pr*pr) ! psi

216 217 c(3) dpsi ! d(psi )/dw

218 c(4) ddel ! d(delta)/dw

219

220 return

221 end

178
6.2.16 SCATTO.FOR

12 subroutine scattO (wavlen, angle!

,

isampl

1

Jk u 0 41V ^ y ^lll *d O f111 V .A. /

3 include ' iounit .

5 include 'iilinmin. '

0 include 'arrayd.'

7 include ' arrays .

8 include 'filmss.' ! z,e

9 include 'rstack.' ! R, dR

10 include ' abcdel .

' ! a,b,c -> output results

1112 include 'hemdyy.' ! pi.cccc .wavlev

13

14 imixtr = mixmbn(imbien) ! mixture used as ambient

15 air = sqrt (real (dielec (imixtr))) ! refractive index, FILMSS

la17 (wavlen .It. 0.0) then ! wavelength, nm

18 qqq = -(pi+pi) /wavlen ! inverse nm

19 else ! energy , eV

20 qqq = (pi+pi )*wavlen/wavlev ! inverse nm

21 end if

22

23 call forwrO (qqq, angloi) ! R only

24

26 sx = real (Rs)

26 sy = aimag (Rs)

27 px = real (Rp)

2S py = aimag (Rp)

29 call polar (sx,sy,sr,sa,l)

30 call polar (px.py ,pr,pa,l)

31

32 il (sr.eq.0.0) then

33 if (pr.eq.0.0) then

34 psi = 0.0

36 else

36 psi = 0.5*pi

37 end if

38 else if (pr.eq.0.0) then ! sr > 0. 0

39 psi =0.0

40 else if (pr.le.sr) then

41 psi = atan (pr/sr)

42 else

43 psi = 0.5*pi - atan(sr/pr)

44 end if

4546 delta = pa-sa

47 1 if (delta.lt .0.0) then

48 delta = delta+2.0

49 goto 1 50 else if (delta. ge. 2.0) then

179
51 delta = delta-2.0

52 goto 1

53 end if

54 delta = delta*pi

55

58 b(l) = psi ! radians

67 b(2) = delta ! radians

58

69 return

60 end

180
6.2.17 FORWRD.FOR

1 subroutine forwrd (qqq, angl)

23 r 0 EiX qqq, angl

4 include •delnit .! nfilms, nrows

5 1 Ti cT nrf fl 'lilmss .! z , e

7

1 TTcT lid a 'rstack .

! R, dR > output results

8 complex ys(nlilms+l) , eta(nlilms+l)

9 complex yp(nlilms+l) , cta(nlilms+l)

10

11 complex ee(nlilras), em(nlilms), ep(nlilms), zq(nlilms)

12 complex hall , one , two , four , etaO,etaOa, ctaO,ctaOa

13

14 complex top,bot,ss,pp, ssz,ppz,sse,ppe,ssa,ppa, ppl,pp2,pp3

15 C Solve

:

the direct or lorward problem.

16 c Discern: the rellection coellicient and Jacobiem..

17 c Given: dielectric lunction ol lilms (isotropic , homogeneous ,unilorm)

18 c incident angle: angl ' radians

IB c wavenumber

:

qqq ' 2*pi/wavelength

20

21 c wavelength:

22 c Find: Rs, Rp. > (psi| dcl't ci) 23 c dRs,dRp. <

24 c dRsa,dRpa < partial wrt : - [n(air)*sin(£m.gle)] **2

25 c <

partial wrt: incident angle in radians

2627c dRsq,dRpq <

partial wrt: q ' wavenumber

28 half = cmplx (0.5, 0.0)

29 one = cmplx (1.0, 0.0)

30 two = cmplx (2.0, 0.0)

3132 lour = cmplx (4.0, 0.0)

33 sa = sin (angl)

34 ca = cos (angl)

35 as = air*sa

36 ac = airt^ca

O f as2 = as*as ! air

38

39 etaO = cmplx ( ac , 0.0) ! air IE

J* A4U etaOa = cmplx (-as, 0.0) ! air d(eta)/d(angl)

41 ctaO = cmplx ( ca/air, 0. 0) ! air TM

4243 ctaOa = cmplx (-sa/air, 0. 0) ! air d(cta)/d(angl)

44

45 mlilms = mlilm+l ! films, substrate

46 do i=l, mlilms ! films, substrate

47 eta( i) = sqrtt (die(i) -cmplx(as2,0.0)) ! TE

48 cta(i) = eta(i)/die(i) ! TM

49 end do

SO

181
51 c Determine the reflection coefficients in air.

52 c Method for TE: admittance = Y = - Hx/Ey, Rs uses E field.

53 c TH: impedance = Z = Ex/Hy, Rp uses H field.

54

55 ys(mfilms) = eta(mfilms) ! substrate

56 yp(mfilms) = cta(mfilms)

57 if (mfilm.ne.O) then

58 do i=mfilm,l,-l ! backwards

59 X = zzz(i)i'qqq

60 zq.(i) = cmplx (0.0, x) ! izq

61 ss = cmplx (0.0, x+x) * eta(i) ! izqn2

62 X = exp (real (ss))

63 y = aimag (ss)

64 ss = cmplx (x*cos(y), x*sin(y)) ! exp (izqn2)

65 ee(i) = ss

66 em(i) = one-ES

67 ep(i) = one+ss

68 ys(i) = eta(i)* ( (em(i)*eta(i)+ep(i)*ys(i+l) ) /

69 ft (ep(i)*eta(i)+em(i)*ys(i+l)) ) 70 iT^i) = cta(i)* ((em(i)*cta(i)+ep(i)*3rp(i+l)) /

71 & (ep(i)*cta(i)+em(i)*yp(i+l)) ) 72 end do

73 end if

74 Rs = (etaO-ys(l)) /(etaO+ys(l)) ! air

75 Rp = (ctaO-yp(l)) /(ctaO+yp(l) ) ! air

76

77 c Jacobian

78

79 dRsq = cmplx (0.0,0.0) ! d/dq

80 dRpq = cmplx (0.0,0.0)

81

82 do i=mf ilms - 1 ,-1 ! backwards

83 if (i . eq.mf ilms) then ! source substrate

84 sse = half /eta(i) ! d(eta)/d(e)

85 ssa = sse ! d(eta)/d(-as**2)

86 ssz = cmplx (0.0,0.0) ! convenience

87

88 ppe = (cmplx (2.0*as2, 0.0) - die(i))

89 & * half / (eta(i)* die(i)*die(i) ) ! d(cta)/d(e)

90 ppa = half / (eta(i)*die(i)) ! d(cta)/d(-as**2)

91 ppz = cmplx (0.0,0.0) ! convenience

92 else ! source film

93 bot = ep(i)*eta(i) + em(i) *ys (i+1) ! denominator, TE

94 top = em(i)*eta(i) + ep(i)*ys(i+l) ! numerator

95 ss = em(i) + zq(i)*ee(i)*(ys(i+l)-eta(i))

98 & + ep(i)*half *(ys(i+l)/eta(i))

97 pp - ep(i)*half - zq(i)*ee(i)*(ys(i+l)-eta(i))

98

99 sse = (ss/bot) - (pp*top)/(bot*bot)

100 ssa = (ss + ep(i)*eta(i)*ssa) /bot -

101 ft (pp + em(i)*eta(i)*ssa)*top /(bot*bot)

102 ssz = two*ee(i)* (ys(i+l)-eta(i)) * (ys(i+l)+eta(i)

)

103 ft * (eta(i)/bot)**2 ! d/d (izq2)

182
104

105 bot = ep(i)*eta(i) + em(i)*yp(i+l)*die(i) ! denominator.

106 top = em(i)*eta(i) + ep(i)*yp(i+l)*die(i) ! numerator

107 PP = (cmplx (2.0*as2, 0.0) - die(i))

108

109 k * half / (eta(i)* die(i)*die(i)) ! d(cta)/d(8)

110 ppl = pp*top/bot

111 pp2 = em(i)*half/die(i) + ep(i)*cta(i)*yp(i+l) +

112 t zq(i)*ee(i)*(yp(i+l)-cta(i))

113 pp3 = ep(i)*half/die(i) + em(i)*cta(i)*yp(i+l)

114 t zq(i)*ee(i)*(yp(i+l)-cta(i))

115 116 ppe = ppl + pp2/bot - pp3*top/(bot*bot)

117 ppl = half*top /(bot*eta(i)*die(i))

118 pp2 = em(i)*half/die(i) + ep(i)*eta(i)*ppa + , 119 t zq(i)*ee(i)*(yp(i+l)-cta(i))

120 pp3 = ep(i)*half/die(i) + em(i)*eta(i)*ppa -

121 k zq(i)*ee(i)*(yp(i+l)-cta(i))

122 123 ppa = ppl + pp2/bot - pp3*top/(bot*bot)

124 PP = (eta(i)-die(i)*yp(i+l)) * (eta(i)+die(i)*yp(i+l))

125 ppz = -two*ee(i)*eta(i)*cta(i)* (pp/(bot*bot))

126 end if

127

128 if (i.ne.l) then ! transport

129 k = i-1

130 do j=k.l.-l ! backwards

131 ss = eta(j) / (ep(j)*eta(j)+em(j)*ys(j+l))

132 PP = cta(j) / (ep(j)*cta(j)+em(j)*yp(j+l))

133 ss = f our*ee( j

) *ss*ss ! coefficient

134 PP = f oiir*ee( j )*pp*pp

135 sse = sse*ss ! T'(e)

136 ppe = ppe*pp

137 ssz = ssz'Oss ! Y'(izq2)

138 ppz = ppz*pp

139 end do

140 end if

141 ss = -two*etaO /((ota0+ys(l))**2) ! coefficient

142 PP = -two+ctaO /((cta0+yp(l))**2)

143 sse = sse*ss ! R'(e)

144 ppo = PPO*PP

145 ssz = ssz*ss ! R'(izq2)

146 ppz = PPZ*PP

147

148 C The format of the Jacobian vector has the form:

149 C air / f ilm#l / f ilm#2 / . . . / mf ilm / substrate

150 C c z,e, z,e, ... z,e, e]

151

152 k = 2*( ! position Jacobijin

153 if (i.eq.mf ilms) then ! substrate, ( ,e)

154 k = k-1

155 else ! film, (z,e)

156 ss = cmplx (0.0, qqq*2.0) ! d(izq2) /dz

183
157 cuts ^-SSZ^SS !K'V.ZJ

158

159 dRp(k+l; = ppz*ss ! R'CzJ

160 ss - cmplx vu.U, zzz\x)*Z.^j) ! a^izqzj /ciq

161 dRsq = dE.sq+ssz*ss ! R'(q)

162 dRpq = dRpq+ppz*ss ! R'(q)

163 end if

164 dRs(k+2) = ssa ! R>(e)

165 dRpCk+2; = ppo ! R'Co)

1 AA

167 end do ! mfilms

168

169

170 C

- Since the angular partials involved: dR/d (-(aix'*'sin)'t"i'2)

171 C and ^9 want partials nrt angle, i.e.: dR/d (angl) angl'radians

172 173 SS — cmplx ^ as*ac*.tf.o, O.UJ ! d. ^ vfm*siny**zy /a^angxj

174 ssa = ssa'i'ss ! d(Ts) /d(angl)

175 ppa — ppa'i'ss ! CLv,ipj /cL^angx^

176 177 ssa = two* tetaOa*ystl;-etaO*ssaj /v,QetaO+ysCi;j**2J ! RHaJ

178 ppa = two* (ctaOa*yp(l)-ctaO*ppa) /( (ctaO+3rp(l) )**2)

179 ansa - ssa ! H'^a^

180 dRpa = ppa

1 fii

182 c Note one distinction regarding conventions in defintions of fields.

183 c liio in calculation utilizes n xieiaSi itp nv. reiiecteaj/av. inciaezitj

184 c while some conventions use E fields, Rp ' E(x,reflected)/E(x, incident)

185 c Consec^uently y in oz'deir to change to this othez' convention, one should

186 c induce a minus sign (-) onto the terms of Rp.

187

188 A — ^''^mxixmTi

189 c* do i-l,x

190 c* dRpCi; = -dRptiJ

191 c* end do

192 c* dRpa = -dRpa

193 c* dRpq = -dRpq

194 c* Rp = -Rp

195

196 return

197 end

184
6.2.18 FORWRO.FOR

1

23

4

567

8

9

10

11

1313

14

IS16

17

18

19

20

21

2223

24

252627

28

29

30

313233

34

353637

38

39

40

41

4243

44

45

46

47

48

49

50

subroutine f orwrO (qqq, smgl)

real q.<l<l» ai^gl

include

include

include

complex

complex

complex

'defnit

.

'filmss

.

' rstack

,

! nfilms, nrow£

R, dR -> output results

ys(nfilms+l) , eta(nlilms+l)

yp(niilms+l) , cta(nf ilms+1)

ee(nfilms), em(nfilms), ep(nlilms), zqCnfilms)

complex halftone, etaO,ctaO

complex top,bot,ss,pp, ssz,ppz,sse,ppe,ssa,ppa, ppl,pp2,pp3

Solve: the direct or forward problem.

Discern: the reflection coefficient emd Jacobian.

Given: dielectric function of films (isotropic .homogeneous .uniform)

incident angle: a^gl ' radians

wavenumber: qqq ' 2*pi/wavelength

wavelength: nano-meters

Find: Rs, Rp. > (psi, delta)

dRs.dRp. < partial wrt : (z, dielectric function)

dRsa.dRpa < partial wrt: - tn(air)*sin(angle)] **2

< partial wrt: incident angle in radians

dRsq.dRpq < partial wrt: q

' wavenumber

half = cmplx (0.5, 0.0) one = cmplx (1.0,0.0)

sa = sin (angl) ca = cos (angl)

as = air*sa

ac = air*ca

as2 = as*as ! air

etaO = cmplx ( ac, 0.0)

ctaO = cmplx ( ca/air, 0.0)

mfilms = mfilm+1

do i=l, mfilms

eta(i) = sqrtt (die(i)-cmplx(as2,0.0))

cta(i) = eta(i)/die(i)

end do

air

air

TE

TM

films, substrate

films, substrate

TE

TM

Determine the reflection coefficients in air.

Method for TE: admittance = Y = - Hx/Ey,

TM: impedance = Z = Ex/Ey,

Rs uses E field.

Rp uses H field.

185
ys(mfilms) = etaCmfilms) ! substrate

3rp(mfilms) = cta(infilms)

if (mfilm.ne.O) then

do i=nif ilm, 1 ,-1 ! backwards

X = zzz(i)*qqq

zq(i) = cmplx (0.0, x) ! izq

SB = cmplx (0.0, x+x) * eta(i) ! izqn2

X = exp (real (ss))

y = aimag (ss)

ss = cmplx (x*cos(y), x*siii(y)) ! exp (izqn2)

ee(i) = ss em(i) = one-ss

ep(i) = one+ss

ys(i) = eta(i)* ((em(i)*eta(i)+ep(i)*ys(i+l)) /

t (ep(i)*eta(i)+em(i)*ys(i+l)) ) yp(i) = cta(i)* ((em(i)*cta(i)+ep(i)*yp(i+l)) /

I: (ep(i)*cta(i)+em(i)*yp(i+l)) ) end do

end if

Rs = (etaO-ys(l)) /(etaO+ys(l)) ! air

Rp = (ctaO-yp(l)) /(ctaO+yp(l) ) ! air

return

end

186
6.2.19 DIFFER.FOR

1 subroutine differ (exprmt, theory, diff) ! radians

3 real exprmt, theory, diff

3 include 'handyy.' pi

4

5

e xl = exprmt - theory ! 0 .le. theory .It. 2*pi

7 x2 = xl - (pi+pi) ! mod 2*pi

8 x3 = xl + (pi+pi)

910 al = abs (xl)

11 a2 = abs (x2)

12 a3 = abs (x3)

13

14 if (al.le.a2) then ! al < a2

15 diff = xl

le if (aS.lt.al) then

17 diff = x3

18 end if

19 else ! a2 < al

20 diff = x2

21 if (a3.1t.a2) then

22 diff = x3

23 end if

24 end if

25

26 rettim

27 end

187
6.2.20 STAT22.FOR

1 subroutine stab 22 (n,b)

2 real bCn)

3 include ' ioimit .

'

4 include ' handyy.' pi

SQ logical llzero

7 C Perform: simple statistics of deviations from the model.

8 C Discern: (mean., standard deviation) of deviations

.

e c Assume: bCl) ' d(psi ) ' deviation ' experiment-model

10

11 c b(2) - d(delta) ' deviation ' experiment-model

12 raddeg = 180.0 / pi 1 degrees ^ radians

13 nh = n/2 psi, delta

14

15 h = float (nh)

16 write (iout.lil)

17 if (n.le.l .or. n.ne.nh+nh) then

18 write (iout,112) n

19 stop

20 end if

21

22 al = 0.0

23 a2 = 0.0

24 do i=l8nf2 1 mean deviation

25 al = al + b(i )

1 psi

28 a2 = a2 + b(i+l) delta

27 end do

28 al = al /h 1 psi

29 a2 = a2 /h 1 delta

30

31 llzero = .false. zero variance

32 si = 0.0

33 s2 = 0.0

34 s3 = 0.0

35 do i=l,n,2 j variance of deviations

36 si = si + (b(i )-al)**2 j psi

37 s2 = s2 + (b(i+l)-a2)**2 delta

38 s3 = s3 + (b(i+l)-a2)*(b( i)-al) ! correlation

39 end do

40 si = sqrt (si /h) standard deviation

41 s2 = sqrt (s2 /h)

42 s3 = s3 /h covariance

43

44 if (sl.eq.O.O .or. s2.eq.0.0) then ! exact fit, no scatter

45 llzero = .true.

46 else

47 b3 = s3 /(sl*32) 1 correlation coefficient

48 end if

49

50 al = al >i<raddeg degrees

188
51 a2 = a2 *raddeg

52 si = si *raddeg

53 s2 = s2 *raddeg

54

55 write (iout.llS) al.sl, a2,s2, s3

56 xf (llzero) write (iout,114)

57

58 return

5060 111 format (/ Ix, 15(' ')

61 k /' Statistics of deviations ' experiment-model ' g'

82 k

' //' where: g is a column vector of length 2M,'

63 k /' () denotes either (delta) or (psi)'

64 k /' mean () = m() = <g()> = (1/M) sum: gO'

65 k /' variance () = < (g() -m() )**2 >

'

66 I; /' covariance = < (g(l)-m(l) )*(g(2)-m(2) ) >

'

67 k /' std dev = sqrt (variance) '

68 k /' correlat coef = covariance / (sd(l) * sd(2)) ' ) 69

70 112 format (/' stat22, ... oops ' inconsistency, n=', iB)

71

72 113 format (/ 20x, ' mean,', 4x, ' std dev (degrees)'

73 t / 5x, ' psi:', 4x, flO.3, 3x, flO.3

74 * / 5x, 'delta:', 4x, flO.3, 3x, flO.3

75 It / 5x, 6x, 4x, flO.3, Ix,

76 I: '' correlation coefficient ' <psi|delta> ') 77 114 format ( 26x, '' UNnormalized, because atleast one of the '

78 k / 26x, ' standard deviations vanish.'/)

7980 end

4

189
6.2.21 CORLAT.FOR

1

2

3

4

6a

7

8

910

111213

14

1516

17

1819

20

2122

23

24

252e27

28

2930

313233

34

35

3637

38

39

40

414243

44

454647

48

49

50

subroutine corlat

c Construct the correlation matrix ±ot model parameters (z.f ,p)

c for the given sampling of measurementd data from experiment,

c Correlation matrix ' normalized: [J(Transpose)*J]

.

include

include

include

include

include

include

' iounit .

'defnit .

'f ilmmm.

' arrays . 'ffstack.

' handyy .

real det(2)

integer inert (3)

llnorm = .false,

call Bsmbl

call stat22 (meqns,bb)

call norm (meqns,bb,bbnorm,0)

bbnorm = bbnorm/sqrt (float (meqns-mvary)

)

raddeg = 180.0/pi

kv = 0 do jv=l,mvary

do iv=l,jv

sum = 0.0

do i=l,m9qns,2

jl = ia(i ) j2 = ia(i+l)-l mv = j2-ji+l

si = 0.0

s2 = 0.0

s3 = 0.0

s4 = 0.0

do j=ji.j2

jaj = ja(j)

if (jaj.eq.iv) then

si = aa(j ) s3 = aa(j+mv)

end if

if (jaj.eq.jv) then

s2 = aa(j ) s4 = aa(j+mv)

end if

end do sum = sum + sl*s2 + s3t>s4 end do sum = sum/float (meqns)

aa

aat

pi

! LINPACK

! LINPACK

UNscaled by experiment

ia,ja,aa,bb

mean, std dev

I <gg>

I

variance, <gg>/(2M-II)

degree/radian

! A(T)*A, parameters

! upper triangle + diagonal

! within a row of A

! column

dot product

convenience

190
51 kv - kv+1 ! packed format ' storage

52 aat (kv) = svun ! upper triangle + diagonal

53 a (jv.eq.iv) then ! diagonal

54 xxCjvJ = sqrt (sum)

55 end if

56 end do

57 end do

68

59 kv = 0

60 do jv=l,mvary ! correlation matrix

61 do iv=l,jv ! ronormalize

62 kv = kv+1

63 aattkvj = aattkvj/(,xx(jvj*xx(av))

64 end do

65 end do

6867 write (iout,211)

68 k2 = 0

69 do i=l,mvary

70 kl = k2+l

71 k2 = k2+i

72 write (iout,212) i, (aat(k), k=kl,k2)

73 end do

74 write (iout,214)

75 write (iout,216; (xxCi), i=l,mvary) ! scaling coefficients

7677 C

78 c LINPACK, Chapter 5, Solving symmetric indefinite matrices.

7019 80 call sspco (aat, mvary, ipvt , rcond, w) ! nD'*<T(U) decomposition

81 write (iout,216) rcond ! inverse condition number

82

83 c* if (1.0 .eq. 1.0+rcond ) then ! singular matrix

84 if (1.0 .ne. 1 . 0+rcond*0 . 01) then ! NOT ill-conditioned

85 call sspdi (aat, mvary, ipvt, det, inert, w, 111)

86 write (iout,217) det, inert

87 k2 = 0

88 do i=l, mvary

89 kl = k2+l

00 k2 = k2+i

01 write (iout,213) i, (aat(k), k=kl,k2)

02 end do

93 else ! indeterminate

04 return ! n-O reason to continue

95 end if

96

07 c

98 c Estimate the uncertainty in the modal parameters.

99 c Ignore correlation among model pariimeters.

100 c i.e., consider only the diagonal contributions.

101

102 k2 = 0

103 do i=l, mvary

191
104 kl = k2+l

105 k2 = k2+i ! diagonal

106 XX ( i) = bbnorm*sqrt (aat(k2)} /xx(i)

lor end do

108 bbnorm = bbnorm*raddeg ! degrees

loe

110 write [iout,121) bbnorm

111 do i=l,ravary

112 j

= iptu(i)

113 it (j .le. mfilmz) then ! widths

114 write (iout,122) i, widths(j), xx(i), j 115 else ±1 (j .le. mf ilmz+mlmnts) then ! fractions

116 j = j -mfilmz

117 write (iout,123) i, fflmnt(j), xx(i), j 118 else ! parameter

119 j = j-mf ilmz-mlmnts

120 write (iout,124) i, rrparm(j), xx(i), j 121 end it

122 end do

123

124 return

125 126 121 X ^ X format Jl VJL Ilia, V (/ Ix, 15(' ') 127 ft /' The standard deviation of the residuals.'

128 ft //' s(g) = sqrt C<gg>/(2M-N)] lplel4.5,' (degrees)

129 ft ///' The estimated uncertainty in the model parameters, '

130 ft /' assuming no correlation, i.e., diagonal terms only.'

131 ft // 17x, 'value,' 3x, 'uncertainty.' ) 132 122 format (Ix, i5, ')', fl5.4, flB.B, ', for:', iB, ' - (z.zu)')

133 123 format (Ix, iB, ')', flB.4, flB.B, ', for:', iB, ' - (f.fu)')

134 124 format (Ix. iB, ')', flB.4, flB.B, ', for:', iB, ' ' (p.pu)')

135

136 211 format (/' CJ(T)*J], renormalized for correlation. ') 137 212 format (Ix, i4, ')', Ix. lOflO.B. : /(7x. lOflO.B))

138 213 format (Ix. i4. ')'. Ix. lplOelO.2, : /(7x. lOelO.2))

139 214 format (/' Normalization coefficients , sqrt: [J(T)*J] _(i ,i) '

)

140 2 IE format ( Ix, lplOelO.2)

141

142 216 format (/' rcond = ', lpelO.2. ', condition number. [J(T)*J]')

143 217 format (/' [J(T)*J]**(-1):

144 ft /' Determinant: ', f8.4, ' E ', f8.4

145 ft /' Inertia: (', 3i4, '),

146 ft ' number of (+,-,0) eigenvalues.'

147 ft /' Inverse: upper+diagonal matrix' ) 148

149 end

192
6.3 General Utilities

6.3.1 DOT.FOR

1 subroutine dot (n.x.y, xy,k)

2 real x(l), y(l)

3

4 xy = 0.0

s xn = 0.0

6 yn = 0.0

7 do i=l,n ! find maximiun

8 xn = amaxl (xn, abs (x(i)))

e yn = amaxl (3m, abs (y(i)))

10 end do

11 ±i (xn.eq.0.0 .or. yn.eq.0.0) return

12IS xs = 0.0

14 ys = 0.0

15 do i=l,n

la XX = x(i)/xn ! scaled vector component

xr yy = y(i)/yn

18 X8 = xs + xx*xx ! dot product * |x*x|

19 ys = ys + yy*yy ! dot product ' |y*y|

20 xy = xy + xx*yy ! dot product ' |x*y|

21 end do

2223 h = float (n)

24 xs = xs/h. ! mean square value

25 ys = ys/h

2S xy = xy/h

27 ' xs = sqrt (xs) ! root mean square value

28 ys = sqrt (ys)

2930 il (k.eq.O) then ! usual dot product

31 xy - xy*xn*yn*h

32 else if (k.eq.l) then ! un-normalized

33 xy = xy*xn*yn

34 else ! normalized

35 xy = xy/(xs*ys)

36 end if

87

38 retiim

39 end

193
6.3.2 NORM.FOR

1 subroutine norm Xtl,x, xn,k)

2 real x(l)

3

4 xn = 0.0

5 do i=l,n ! find maximum

8 xn = amaxl (xn, abs (x(i)))

7 end do

8 it (xn .eq. 0.0) return

910 XX = 0 .

0

11 do i=l,n ! dot product

12 XX = XX + (x(i)/xn)**2 ! |x*x|

13 end do

14

15 if (k.eq.l) then ! mean squared value

18 XX = xx/float (n)

17 end if

18 xn ^ xn^sqrt (xx) ! Euclidean norm

19

20 return

21 end

194
6.3.3 APROD.FOR

1 subroutine aprod (mode ,m,n,x,y

,

ia, ja,aa)

2 integer mode, m, n, ia(l), ja(l)

3 real x(n), y(ra), aa(l)

4

5 data iout / 6 /

e c

7 c A ' A.(m,n), Transpose operator ' (')

8 c Operation: mode= 1, set : y = y + A *x

9 c mode= 2, set : X = X + A'*y

10 c x' = x' + y'*A

11 c

12

13 if (mode.eq.l) then ! y = y + Ax

14 do i=l,m ! scan rows of matrix A

16 mj = ia(i+l)-ia(i) ! number of columns in row

la it (mj.ne.O) then

17 ss = 0.0 ! sum

18 jj = ia(i)-l ! indexing

IQ do j=l,mj ! scan columns of row

20 jj = jj+1

21 kk = ja(jj) [ column

22 SB = ss + aa(jj)*x(kk)

23 end do

24 y(i) = y(i)+ss ! y = y+Ax

25 end if

20 end do

27

28 else if (mode.eq.2) then ! x' = x' + y'*A

29 do i=l,m ! scan rows of matrix A

30 mj = ia(i+l)-ia(i) ! number of columns in row

31 if (mj .ne .0) then

32 yy = y(i)

33 jj = ia(i)-l ! indexing

34 do j=l,mj ! scan columns of row

35 jj = jj+1

3e kk = ja(jj) ! column

37 x(kk) = x(kk) + yy*aa(jj)

38 end do

39 end if

40 end do

4142 else

43 write (iout, 10) mode

44 stop

45 end if

4647 return

4849 10 format (/' aprod, ... error. mode=: ' , i2)

50 end

195
6.3.4 SCALII.FOR

1 subroutine scalii (m,n, ia,ja,a,b. P.k)

2 integer ia(i), ja(l), m, n, k

3

4 real a(l), b(l), p(l)

5 C

6 c Scale the rows in matrix, A(m,n)j b(m)

7 c Retain scaling coefficients in P(m).

e c Evaluate P only when k = 0,1,2, 3.

9 c Re-scale A only when |k| = 2, 3.

10 c Re-scale B only when |k| = 1, 3.

11 c Matrix A is stored (row-wise) in the Yale Sparse Matrix Format.

12 c

13

14 ka = iabs (k) convenience

15 if (ka.gt.3) then out of range

16 do i=l,m scan rows

17 p(i) = 1.0 default

18 end do

19 return

20 end if

21

22 if (k.ge.O) then determine scaling

23 do i=ljm scan rows

24 mj = ia(i+l)-ia(i) number of columns in

25 if (mj .ne , 0) then

26 big =0.0 initialize

27 jj = ia(i)-l indexing

28 do j=l,mj scan columns in row

29 jj = jj+i

30 big = amaxl (big, abs ( a(jj)))

31 end do

32 if (big .eq. 0.0) then i trivial case

33 p(i) = 1.0 1 default

34 else

35 ss = 0.0 1 initialize

36 jj = jj-raj 1 reset indexing

37 do j=l,mj 1 scan coliimns in row

38 jj = jj+1

39 ss = ss + (a(j j)/big)**2

40 end do

41 p(i) = big*sq^rt (ss) scale factor

42 end if

43 end if

44 end do

45 end if

4647 if (ka.eq.2 .or. ka.eq.3) than rescale A

48 do i=l,m scan rows, A

49 mj = ia(i+l)-ia(i) number of colujnns in

50 if (mj .ne ,0) then

196
51 PP = p(i) ! scale factor of row

52 jj = ia(i)-l ! indexing

53 do j=l,mj ! scan columns in row

54 jj = jj + 1 55 a(jj) = *(jj)/pp • rescale the row

56 end do

57 end if

58 end do

59 end if

60

61 if (ka.eq.l .or. ka.eq.3) then ! rescale b

63 do i=l,m ! scan rows

63 b(i) = b(i)/p(i)

64 end do

65 end if

66

67 return

68 end.

197
6.3.5 SCALJJ.FOR

1 subroutine scaljj (m,n, ia,ja,a,b, P w,k)

2 integer ia(l), ja(l), k, m, n

3

4 real a(l), b(l), p(l), w(l)

56

CC Scale matrix A so the diagonal of: CTranspose(A)*A] =1.

7 c Matrix A is stored ro^-wise in the 7ale Sparse Matrix Format

.

8 c Scale the coluinns of matrices, A(m, n) , b(n).

9 c Retain the scaling coefficients in P(n).

10 c Use as a dummy work storage array, W(n).

11 c Evaluate P only when k =0,1, 2,3

12 c Re-scale A only when |k| = 2,3

13 c Re-scale B only when lk| = 1, 3

14 c

15

16 ka = iabs (k) ! convenience

17 if (ka.gt.3) then ! out of range

18 do j=l,n ! scan columns

19 p(j) = 1.0 ! default

20 end do

21 return

22 end if

23

24 if (k.ge.O) then ! determine scaling

25 do j=l,n [ scan columns

26 p(j) = 0.0 ! initialize

27 = 0.0 ! sums

28 end do

2930 do i=l,m ! scan rows , A

31 mj = ia(i+l)-ia(i) ! number of columns in row

32 if (mj .ne .0) then

33 jj = ia(i)-l ! indexing

34 do j=l,mj ! scan columns of row

35 jj = jj+1

36 kk = ja(jj) ! column

37 p(kk) = amaxl (p(kk) , abs (a(jj))) ! max |A(,j)l

38 end do

39 end if

40 end do

41

42 do i=l,m ! scan rows , A

43 mj = ia(i+l)-ia(i) ! number of columns

44 if (mj..ne.O) then

45 jj = ia(i)-l ! indexing

46 do j=l,mj ! scan columns in row

47 jj = jj+i

48 kk = ja(jj) 1 column

49 w(kk) = w(kk) + (a(j j)/p(kk))**2 ! sums

50 end do

198
51 end if

52 end do

53

54 do j=l,n ! scan columns

55 pCj) = p(j)*sqrt (w(j)) ! retain scale factor

56 end do

57 end if

58

50 if (ka.eq.2 .or. ka.eq.3) then ! rescale A

60 do i=l,m ! scan rows, A

61 mj = ia(i+l)-ia(i) ! number of columns

82 if (mj.ne.O) then

63 jj ~ ia(i)-i ! indexing

64 do j=l,inj ! scan columns in row

85 jj = jj+1

66 kk = ja(jj) ! column

67 *(jj) a(jj)/p(kk) ! rescale column

68 end do

69 end if

70 end do

71 end if

72

73 if (ka.eq.l .or. ka.eq.3) then ! rescale b

74 do j=l,n ! scan columns

75 b(j) = b(j)/p(j) ! rescale column

76 end do

77 end if

78

79 return

80 end

199
6.3.6 CGNL.FOR

1 subroutine cgnl (ina,na,ia, ja,aa, b,x,

2 ft itmax, u,v,w, xx,se)

3

4 integer ia(l), ja(l)

5 real aa(l), b(l), x(l)

a real u(l). v(l), w(l), xx(l), se(l)

7 external aprod

8 data iout /6/

9

10 c

11 c real b(nia), u(ma) , aa(ma,]ia)

12 c real x(na), v(na), w(na), xx(na), se(na)

13

14 c Solve the linear or matrix algebra problem, Ax=b.

15 c Matrix A is stored row-wise in the Tale Sparse Matrix Format,

le c Reference: C.C.Paige and M.A.Saunders,

17 c

' 'LSQH: An Algorithm for Sparse Linear Equations

18 c and Sparse Least Squares'',

19 c Association for Computing Machinery,

20 c Transactions on Mathematical Software,

21 c Volume 8, Number 1, March 1982, pp. 43-71, (Note pp. 50-Bl)

.

22 c ibid.. Volume 8, Number 2, June 1982, pp. 195-209.

23 c

24

25 loop = 0 ! initialize

26 1 loop = loop+1 ! update counter

27 rr = 0.0 ! norm of residual

28 do i=l,ma ! scsm rows, r=b-Ax

29 mj = ia(i+l)-ia(i) ! number of columns in row

30 if (mj .ne. 0) then

31 ss = 0.0 ! initialize siim

32 jj = ia(i)-l ! indexing

33 do j=l,mj ! scan columns of row

34 jj = jj+1

35 kk = ja(jj) ! column

38 ss = ss + aa(jj)*x(kk) ! Ax

37 end do

38 ss = b(i)-ss ! r = b-Ax = residual

39 u(i) = ss ! r = residual

40 rr = rr+ss*ss ! |r|**2

41 end if

42 end do

43 if (rr .eq. 0.0) return

44

45 if (loop .eq. 1) then ! retain first norm

46 rrr = rr

47 else if (rr .ge. rrlast*0.98) then ! rate of convergence

48 c* ratio = sqrt (rr/rrr)

49 c* write (iout, 103) loop, ratio

50 c* write (iout, 104) istop, anorm, acond, morm, amorm, xnorm

200
51 retiim

52 end if

53 rrlast = rr ! update

54

55 c ! Set-up for LSQR

56 relpr = l.OE-06 ! relative precision of floating point arithmetic

57 damp = l.OE+00 ! 58 atol = l.OE-06 ! relative error of data in A

59 btol = l.OE-06 ! relative error of data in B ' rhs

60 conlim = l.OE+04 ! apparent condition number of matrix A-bar

81 ! (upper limit)

62 itnlim - itmax ! upper limit on number of iterations

63 nout = -iout ! output index to printer

64

65 call Isqr (ma, na, aprod, damp,

66 ft ia, ja, aa,

67 ft u, V, w, XX, se,

68 ft atol, btol, conlim, itnlim, nout,

69 ft istop, anorm, acond, morm, amorm, xnorm)

70

71 do i=l ,na

72 x(i) = x(i) + xx(i) ! update solution

73 xx(i) = 0.0 ! reset

74 end do

76 goto 1 ! loop back

7677 101 format (' cgnl, singular row= ', ilO)

78 102 format (' cgnl, singular column= ', ilO)

79 103 format (' cgnl, ', i5, lplell.3, ' ' loop, ratio '

80 ft , '(residual reduction)')

81 104 format (' cgnl, ', iB, IpBell.S)

82 end

201
6.3.7 LSQR.FOR

The following subroutine is located in the software library,

Guide to Available Mathematical Software, by R. F. Boisvert, S. E. Howe, and D. K. K

haner. Center for Applied Mathematics, National Institute of Standards and Technology (formerly National Bureau of Standards), U.S. Department of Commerce,

1985.

The source code is copyrighted by the Association for Computing Machinery, Inc. The

references for the following source code include:

1) C. C. Paige and M. A. Saunders, "LSQR: An Algorithm for Sparse Linear Equations

and Sparse Least Squares," ACM Trans. Math. Softw. 8, 43-71 (1982).

2) C. C. Paige and M. A. Saunders, "Algorithm 583, LSQR: Sparse Linear Equations

and Least Squares Problems," ACM Trans. Math. Softw. 8, 195-209 (1982).

1 SUBROUTINE LSQR (M.N.APROD.DAMP, '

2 1 lA.Jl.AA,

3 . 2 U.V.W.X.SE,

4 3 ATOL.BTDL.CONLIM.ITNLIM.NOUT,

5 4 ISTOP.ANQRM.ACOND.RNORM.ARNORM.XNORM ) 6 C

7 EXTERNAL APROD

8 INTEGER M.N.ITNLIM.NOUT.ISTOP

9 INTEGER IA(M),JA(M)

10 REAL AA(M), U(M) .V(N) ,U(N) ,X(N) ,SE(N)

,

11 1 ATOL,BTQL,CONLIM,DAMP,ANORM,ACOND,RNORM,ARNORM,XNORM

12 C

^

13 C

14 C LSQR FINDS A SOLUTION X TO THE FOLLOWING PROBLEMS ..

.

15 C

16 C 1. UNSYMMETRIC EQUATIONS — SOLVE A*X = B

17 C

18 C

' 2. LINEAR LEAST SQUARES — SOLVE A*X = B

19 C IN THE LEAST-SQUARES SENSE

20 C

21 C 3. DAMPED LEAST SQUARES — SOLVE ( A )*X = ( B ) 22 C ( DAMP*I ) ( 0 ) 23 C IN THE LEAST-SQUARES SENSE

24 C

25 C WHERE A IS A MATRIX WITH M ROWS AMD N COLUMNS,

26 C B IS AN M-VECTOR, AND

27 C DAMP IS A SCALAR (ALL QUANTITIES REAL).

28 C THE MATRIX A IS INTENDED TO BE LARGE AND SPARSE.

29 C IT IS ACCESSED BY MEANS OF SUBROUTINE CALLS OF THE FORM

202
31 C CALL APROD ( MODE,M,N,X,Y, lA.JA.AA ) 32 C

33 C WHICH MUST PERFORM THE FOLLOWING FUNCTIONS...

34 C

35 C IF MODE = 1, COMPUTE T = Y + A*X.

39 C IF MODE = 2, COMPUTE 1=1+ A(TRANSPOSE)*Y

.

37 C

38 C THE VECTORS I AND Y ARE INPUT PARAMETERS IN BOTH CASES.

39 C IF MODE = 1, Y SHOULD BE ALTERED WITHOUT CHANGING X.

40 C IF MODE =2,1 SHOULD BE ALTERED WITHOUT CHANGING Y.

41 C THE PARAMETERS: lA, JA, AA.

42 C MAY BE USED FOR WORKSPACE AS DESCRIBED BELOW.

43 C

44 C THE RHS VECTOR B IS INPUT VIA U, AND SUBSEQUENTLY OVERWRITTEN.

45 C

46 C

47 C HOTE. LSQR USES AN ITERATIVE METHOD TO APPROXIMATE THE SOLUTION.

48 C THE NUMBER OF ITERATIONS REQUIRED TO REACH A CERTAIN ACCURACY

49 C DEPENDS STRONGLY ON THE SCALING OF THE PROBLEM. POOR SCALING OF

50 C THE ROWS OR COLUMNS OF A SHOULD THEREFORE BE AVOIDED WHERE

51 C POSSIBLE. \ 52 C

53 C FOR EXAMPLE, IN PROBLEM 1 THE SOLUTION IS UNALTERED BY

54 C ROW-SCALING. IF A ROW OF A IS VERY SMALL OR LARGE COMPARED TO

55 C THE OTHER ROWS OF A, THE CORRESPONDING ROW OF (A B ) SHOULD

so C BE SCALED UP OR DOWN.

57 C

58 C IN PROBLEMS 1 AND 2, THE SOLUTION X IS EASILY RECOVERED

59 C FOLLOWING COLUMN-SCALING. IN THE ABSENCE OF BETTER INFORMATION,

60 C THE NONZERO COLUMNS OF A SHOULD BE SCALED SO THAT THEY ALL HAVE

61 C THE SAME EUCLIDEAN NORM (E.G. 1.0).

62 C

63 C IH PROBLEM 3, THERE IS NO FREEDOM TO RE-SCALE IF DAMP IS

94 C NONZERO. HOWEVER, THE VALUE OF DAMP SHOULD BE ASSIGNED ONLY

65 C AFTER ATTENTION HAS BEEN PAID TO THE SCALING OF A.

96 C

97 C THE PARAMETER DAMP IS INTENDED TO HELP REGULARIZE

68 C ILL-CONDITIONED SYSTEMS, BY PREVENTING THE TRUE SOLUTION FROM

69 C BEING VERY LARGE. ANOTHER AID TO REGULARIZATION IS PROVIDED BY

70 C THE PARAMETER ACOND, WHICH MAY BE USED TO TERMINATE ITERATIONS

71 C BEFORE THE COMPUTED SOLUTION BECOMES VERY LARGE.

72 C

73 C

74 C NOTATION

75 C

76 C

77 C THE FOLLOWING QUANTITIES ARE USED IN DISCUSSING THE SUBROUTINE

78 C PARAMETERS...

79 C

80 C ABAR = ( A ), BEAR = ( B )

81 C

* ( DAMP*I ) ( 0 ) 82 C

203
83 c

c R = B - A*S, REAR = BEAR - ABAR*X84

85 c RNORM = SQRT( N0RM(R)**2 + DAMP**2 * N0RM(X)**2 ) 86 c = NORM( REAR ) 87 c

88 c RELPR = THE RELATIVE PRECISION OF FLOATING-POINT ARITHMETIC

8Q c ON THE MACHINE BEING USED. FOR EXAMPLE, ON THE IBM 370,

80 c TvELPR IS ABOUT l.OE-6 AND l.OD-16 IN SINGLE AND DOUBLE

91 c PRECISION RESPECTIVELY.

92 c

93 c LSQR MINIMIZES THE FUNCTION RNORM WITH RESPECT TO X.

94 c

95 c

96 c PARAMETERS

97 c

98 c

99 c

100 c

101 c

102 c

103 G

104 c

105 c Hi MP TMPHT TTTF TifiMPTHft PS'HiMFT'PP FPU PmTRTFM ARnTTF

106 c

107 c

108 c

109 c

110 c T iUCFB T78TTTFC; np T) i MP I.iTT T TFWT1 TO TVFfHFlQF

111 c

TTT17 HTnUM niT Y KVTt Tfl UTTnTTnt? TIT17 TiTTTMUTPU HV

112 c TTiri3ATTnWC xx£iaaxiujaId 'DT?nTTT"Dl?"n nri^uiACiU BVsi TCOD Lisi^a. 113 c

114 c THE WORK PER ITriRAlION AND xuE STORAGE NEEDED

115 c DV TCn^ AD'S? 'T^TTT-t CAMI? C*nD ATT TTAT A MB 01 LsLJa AR£i lHa sAHJS r Ua ALL VALUrib ur DAnif

.

116 c

117 c Ik INPUT CONTAINS ROW INFORMATION OF ARRAY A

118 c JA INPUT CONTAINS COLUMN INFORMATION OF A ROW WITHIN A

119 c AA INPUT THE A ARRAY.

120 c

121 c NOTE. LSQR DOES NOT EXPLICITLY USE THE PREVIOUS FOUR

122 c PARAMETERS, BUT PASSES THEM TO SUBROUTINE APROD FOR

123 c POSSIBLE USE AS WORKSPACE. IF APROD DOES NOT NEED

124 c IW OR RW, THE VALUES LENIW = 1 OR LENRW = 1 SHOULD

125 c BE USED, AND THE ACTUAL PARAMETERS CORRESPONDING TO

126 c IW OR RW MAY BE ANY CONVENIENT ARRAY OF SUITABLE TYPE.

127 c

128 c U(M) INPUT THE RHS VECTOR B. BEWARE THAT U IS

129 c OVER-WRITTEN BY LSQR.

130 c

131 c V(N) WORKSPACE

132 c W(1J) WORKSPACE

133 c

134 c I(N) OUTPUT RETURNS THE COMPUTED SOLUTION I.

135 c

204
136 c

137 c

138 c

139 c

140 c

141 c

143 c

143 c

144 c

145 c

146 c

147 c

148 c

149 c

150 c

151 c

152 c

153 c

154 c

155 c

156 c

157 c

158 c

159 c

160 c

161 c

162 c

163 c

164 c

165 c

166 c

167 c

168 c

169 c

170 c

171 c

172 c

173 c

174 c

175 c

176 c

177 c

178 c

179 c

180 c

181 c

182 c

183 c

184 c

166 c

186 c

187 c

188 c

seCn) output

ATOL INPUT

BTOL INPUT

CONLIM INPUT

RETURNS STANDARD ERROR ESTIMATES FOR THE

COMPONENTS OF X, FOR EACH I, SE(I) IS SET

TO THE VALUE RNORM * SQRT( SIGMA(I.I) / T ),

WHERE SIGMAd.I) IS AN ESTIMATE OF THE I-TH

DIAGONAL OF THE INVERSE OF ABAR(TRANSPOSE)*ABAR

AND T = 1 IF M .LE. N, T = M - N IF H .GT. N AND DAMP = .0, T = M IF DAMP .NE. 0.

AN ESTIMATE OF THE RELATIVE ERROR IN THE DATA

DEFINING THE MATRIX A. FOR EXAMPLE,

IF A IS ACCURATE TO ABOUT 6 DIGITS, SET

ATOL = l.OE-6 .

AN ESTIMATE OF THE RELATIVE ERROR IN THE DATA

DEFINING THE RHS VECTOR B. FOR EXAMPLE,

IF B IS ACCURATE TO ABOUT 6 DIGITS, SET

BTOL = l.OE-6 .

AN UPPER LIMIT ON COND(ABAR), THE APPARENT

CONDITION NUMBER OF THE MATRIX ABAR.

ITERATIONS WILL BE TERMINATED IF A COMPUTED

ESTIMATE OF COND(ABAR) EXCEEDS CONLIM.

THIS IS INTENDED TO PREVENT CERTAIN SHALL OR

ZERO SINGULAR VALUES OF A OR ABAR FROM

COMING INTO EFFECT AND CAUSING UNWANTED GROWTH

IN THE COMPUTED SOLUTION.

CONLIM AND DAMP MAY BE USED SEPARATELY OR

TOGETHER TO REGULARIZE ILL-CONDITIONED SYSTEMS.

NORMALLY, CONLIM SHOULD BE IN THE RANGE

1000 TO 1/RELPR.

SUGGESTED VALUE —

CONLIM = 1/(100*RELPR) FOR COMPATIBLE SYSTEMS,

CONLIM = l/(10*SqRT(RELPR)) FOR LEAST SQUARES.

NOTE. IF THE USER IS NOT CONCERNED ABOUT THE PARAMETERS

ATOL, BTOL AND CONLIM, ANY OR ALL OF THEM MAY BE SET

TO ZERO. THE EFFECT WILL BE THE SAME AS THE VALUES

RELPR, RELPR AND 1/RELPR RESPECTIVELY.

ITNLIM INPUT

NOUT INPUT

ISTOP OUTPUT

0

AN UPPER LIMIT ON THE NUMBER OF ITERATIONS.

SUGGESTED VALUE —

ITNLIM = N/2 FOR WELL CONDITIONED SYSTEMS,

ITNLIM = 4*N OTHERWISE.

FILE NUMBER FOR PRINTER. IF POSITIVE,

A SUMMARY WILL BE PRINTED ON FILE NOUT.

AN INTEGER GIVING THE REASON FOR TERMINATION..

X = 0 IS THE EXACT SOLUTION.

205
189 c NO ITERATIONS WERE PERFORMED.

190 c

191 c 1 THE EQUATIONS A*X = B ARE PROBABLY

192 c COMPATIBLE. NORM(A*X- - B) IS SUFFICIENTLY

193 c SMALL, GIVEN THE VALUES OF ATOL AND BTOL.

194 c

195 c 2 THE SYSTEM A*X = B IS PROBABLY NOT

196 c COMPATIBLE. A LEAST-SQUARES SOLUTION HAS

197 c BEEN OBTAINED WHICH IS SUFFICIENTLY ACCURATE,

198 c GIVEN THE VALUE OF ATOL.

199 c

200 c 3 AN ESTIMATE OF COND(ABAR) HAS EXCEEDED

201 c CONLIM. THE SYSTEM A*X = B APPEARS TO BE

202 c ILL-CONDITIONED. OTHERWISE, THERE COULD BE AN

203 c AN ERROR IN SUBROUTINE APROD

.

204 c

205 c 4 THE EQUATIONS A*X = B ARE PROBABLY

206 c COMPATIBLE. NORM(A*X - B) IS AS SMALL AS

207 c SEEMS REASONABLE ON THIS MACHINE.

208 c

209 c 5 THE SYSTEM A*X = B IS PROBABLY NOT

210 c COMPATIBLE. A LEAST-SQUARES SOLUTION HAS

211 c BEEN OBTAINED WHICH IS AS ACCURATE AS SEEMS

212 c

c REASONABLE ON THIS MACHINE.213

214 c 6 COND(ABAR) SEEMS TO BE SO LARGE THAT THERE IS

215 c NOT MUCH POINT IN DOING FURTHER ITERATIONS,

216 c GIVEN THE PRECISION OF THIS MACHINE.

217 c THERE COULD BE AN ERROR IN SUBROUTINE APROD.

218

219

c

c 7 THE ITERATION LIMIT ITNLIM WAS REACHED.

220 c

221 c ANORM OUTPUT AN ESTIMATE OF THE FROBENIUS NORM OF ABAR.

222 c THIS IS THE SQUARE-ROOT OF THE SUM OF SQUARES

223 c OF THE ELEMENTS OF ABAR.

224 c IF DAMP IS SMALL AND IF THE COLUMNS OF A

225 c HAVE ALL BEEN SCALED TO HAVE LENGTH 1.0,

226 c ANORM SHOULD INCREASE TO ROUGHLY SqRT(N)

.

227 c A RADICALLY DIFFERENT VALUE FOR ANORM MAY

228 c INDICATE AN ERROR IN SUBROUTINE APROD (THERE

229 c MAY BE AN INCONSISTENCY BETWEEN MODES 1 AND 2).

230 c

231 c ACOND OUTPUT AN ESTIMATE OF COND(ABAR), THE CONDITION

232 c NUMBER OF ABAR. A VERY HIGH VALUE OF ACOND

233 c MAY AGAIN INDICATE AN ERROR IN APROD.

234 c

235 c RNORM OUTPUT AN ESTIMATE OF THE FINAL VALUE OF NORM(RBAR)

,

236 c THE FUNCTION BEING MINIMIZED (SEE NOTATION

237 c ABOVE). THIS WILL BE SMALL IF A*X = B HAS

238 c A SOLUTION.

239 c

240 c ARNORM OUTPUT AN ESTIMATE OF THE FINAL VALUE OF

241 c NORH( ABAR(TRANSPOSE)*RBAR ), THE NORM OF

206
242 C

243 C

244 C

245 C

246 C

247 C

248 C

249 C

250 C

251 C

252 C

253 C

254 C

255 C

2Se C

257 C

258 C

259 C

260 C

261 C

262 C

263 C

264 C

265 C

266 C

267 C

268 C

269 C

270 C

271 C

272 C

273 C

274 C

275 C

276 C

277 C

278 C

279 C

280 C

281 C

282 C

283 C

284 C

285 C

286 C

287 C

288 C

289 C

290 C

291

292 293

294

THE RESIDUAL FOR THE USUAL NORMAL EQUATIONS.

THIS SHOULD BE SMALL IN ALL CASES. (ARNORM

WILL OFTEN BE SMALLER THAN THE TRUE VALUE

COMPUTED FROM THE OUTPUT VECTOR X.)

XNORM OUTPUT AN ESTIMATE OF THE NORM OF THE FINAL

SOLUTION VECTOR X.

SUBROUTINES AND FUNCTIONS USED

USER APROD

LSQR NORMLZ

BLAS SC0PY,SNRM2,SSCAL (SEE LAWSON ET AL. BELOW)

(SNRM2 IS USED ONLY IN NORMLZ)

FORTRAN ABS.MOD.SQRT

PRECISION

THE NUMBER OF ITERATIONS REQUIRED BY LSQR WILL USUALLY DECREASE

IF THE COMPUTATION IS PERFORMED IN HIGHER PRECISION. TO CONVERT

LSQR AND NORMLZ BETWEEN SINGLE- AND DOUBLE-PRECISION, CHANGE

THE WORDS

SCOPY, SNRM2, SSCAL

ABS, REAL, SQRT

TO THE APPROPRIATE BLAS AND FORTRAN EQUIVALENTS.

REFERENCES

PAIGE, C.C. AND SAUNDERS, M.A. LSQROD AN ALGORITHM FOR SPARSE

LINEAR EQUATIONS AND SPARSE LEAST SQUARES.

ACM TRANSACTIONS ON MATHEMATICAL SOFTWARE 8, 1 (MARCH 1982).

LAWSON, C.L., HANSON, R.J., KINCAID, D.R. AND KROGH, F.T.

BASIC LINEAR ALGEBRA SUBPROGRAMS FOR FORTRAN USAGE.

ACM TRANSACTIONS ON MATHEMATICAL SOFTWARE 5, 3 (SEPT 1979),

308-323 AND 324-325.

LSQR. THIS VERSION DATED 22 FEBRUARY 1982.

FUNCTIONS AND LOCAL VARIABLES

INTEGER I,ITN,MOD,NCONV,NSTOP

REAL ABS, SQRT

REAL ALFA, BBNORM, BETA, BNORM,

1 CS , CSl , CS2 , CTOL ,DAMPSq ,DDNORM .DELTA

,

207
295 2 GAMMA , GAMBAR , ONE , PHI , PHIBAR , PSI

,

296 3 RESl ,RES2 ,RHO ,RHUBAR,RHBAR1 ,RHBAR2 ,RHS ,RTuL

297 4 SN , SNl , SII2 , T , TAU , TESTl , TEST2 , TEST3

,

298 b THETA , Tl , T2 , T3 , XXNORH , Z , ZBAR , ZERO

299 C

300 C

301 C INITIALIZE.

302 C

303 IF (NOUT .GT. 0)

304 1 WRIlEtWOUT, 1000; M,N,DAMP , ATOL,CaNLIM,BTOL, ITNLIM

305 ry T> O /% ZERO =0.0

306 ujy Js - 1.0

307 CTuL - ZERO

308 IF tCONLIM .GT. . ZERO J CTUL - UNE/CONLIM

309 DAMPSCj = DAMP**2

310 ft WHOM TT^Tin ' AN CRM - ZERO

311 ACOND - ZERO

312 BBNORM = ZERO

313 DDNORM = ZERO

314 RES2 - ZERO

315 316 XXNORM - ZERO

317 Ca^ - -UwJtS 318 SN2 = ZERO

319 Z - ZERO

320 ITN = 0 , 321 ISTOP = 0

322 NSTOP =0

323 c

324 DO 10 I = 1, N

325 VCD = ZERO

326 Xv.Ij = ZERO

327 SE(I; = ZERO

328 10 CONTINUE

329 c

330 c SET UP THE FIRST VECTORS FOR THE BIDIAGONALIZATION

.

331 c THESE SATISFY BETA*U - B, ALFA*V - AtTRANSPOSE;*U.

332 c

333 CALL NORMLZC M,U,BETA ) 334 CALL APROD ( 2,M,N,V,U, lA.JA.AA ) 335 CALL NORMLZC N,V,ALFA ) 336 CALL SCOPT ( N,V,1,W,1 ) 337 c

338 RHOBAR = ALFA

339 PHIBAR = BETA

340 BNORM .= BETA

341 RNORM = BETA

342 ARNORM = ALFA*BETA . 343 IF (ARNORM .LE. ZERO) GO TO 800

344 IF (NOUT .LE« 0 ) GO TO 100

345 IF (DAMPSq .LE. ZERO) WRITE(NOUT, 1200)

346 IF (DAMPSq .GT. ZERO) WRITE(NOUT, 1300)

347 TESTl = ONE

208
348 TES72 = ALFA/BETA

349 WRITE(NOUT, 1500) ITN,X(1) ,M0RM,TEST1,TEST2

350 WRITE(NOUT, 1600)

351 c

352 r MAIN ITERATTOM LOOP

c

355 100 ITN = ITN + 1 356 c

357 c PERFORM THE NEXT STEP OF THE BIDIAGORALIZATION TO OBTAIN THE

358 c NEXT BETA, U, ALFa, V. THESE SATISFY THE RELATIONS

359 BETA*U = A*V - ALFA*U,

ODV ALFA*V = Af TRANSPOSE) *U - BETA*V

361 c

362 CALL SSCAL f M (-ALFA) .U 1 ) 363 CALL APROD ( 1,M,N,V,U, lA.JA.AA ) 364 CALL NORMLZC M.U.BETA ) 365 BBNORM = BBNORK + ALFA**2 + BETA**2 + DAHPSQ

0OD QAA CALL SSCAL ( N (-BETA).V.l ) 367 CALL APROD ( 2,H,N,V,U, IA,JA,AA ) 368 CALL NORMLZC N.V.ALFA ) 369 c

0 f U f

371 r n«;P A PT iNE ROTATION TO ELIMINATE THE DAMPING PARAMETER.

0 1 £ Q THIS ALTERS THE DIAGONAL (RKOBAR) OF THE LOWER-BIDIAGONAL MATRIX.

373

374 RHBAR2 = RH0BAR**2 + DAMPSQ

375 RHBARl = SQRT(RHBAR2)

376 CSl - RHOBAR/RHBARl

Alt SWl = DAMP/RHBARl

378 PSI = SN1*PHIBAR

379 PHIBAR = CS1*PHIBAR

380 c

00

1

382 c USE A PLANE ROTATION TO ELIMINATE THE SUBDIAGONAL ELEMENT (BETA)

383 c OF THE LOWER-BIDIAGONAL MATRIX. GIVING AN UPPER-BIDIAGONAL MATRIX.

384 c

385 RHO = SqRT(RHBAR2 + BETA**2)

386 CS = RHBARl/RHO

387 SN = BETA/RHO

388 THETA = SN*ALFA

OO0 RHOBAR = -CS*ALFA

390 PHI = CS*PHIBAR

391 PHIBAR = SN*PHIBAR

Otf z Tan AAW = SN*PHI • AAA 393 c

394 c

395 r UPDATE X, W AND THE STANDARD ERROR ESTIMATES.

396 c

397 Tl = PHI/RHO

308 T2 = -THETA/RHO

399 T3 = ONE/RHO

400 c

209
401 DO 200 I = 1, N

402 403 404

405 T =(T3*T)**2

406 SE(I) = T + SE(I)

407 DDNQRM= T + DDNORM

408 200 CONTINUE

409 C

410 C

411 C USE A PLANE RuTATIUN ON THE RIGHT TO ELIMINATE THE

412 C SUPER-DIAGONAL ELEMENT (THETA; OF THE UPPER-BID lAGONAL MATRIX

413 C THEN USE THE RESULT TO ESTIMATE NORMtXj.

414 C

415 DELTA = SN2*RH0

416 GAMBAR = -CS2*RH0

417 RHS = PHI - DELTA*Z

418 ZBAR = RHS/GAMBAR

419 iflORM - SyilH,iiWUJiM + ZBAR**2^

420 GAMMA ~ Sl^Kf vGAMdAJI**2 + laCiTA**Z)

421 CS2 = GAMBAR/ GAMMA

422 SN2 = THETA/ GAMMA

423 Z = RHS/GAMMA

424 IaNURM - iilJORM + Z**2

425 c

426 c

427 c TEST rOR CONVERGENCE.

428 c FIRST, ESTIMATE THE NORM AND CONDITION OF THE MATRIX ABAR,

429 c AND THE NORMS OF REAR AND ABAR(TRANS?OSE)*RBAR.

430 c

431 432 ACQND = ANORM*SQRT(DDNORM;

433 RESl = PHIBAR**2

434 RES2 = RES2 + PSI**2

435 RNORM = SQRTCRESI + RE32)

436 ARNORM = ALFA*ABS(TAn)

437 c

438 c NOW USE THESE NORMS TO ESTIMATE CERTAIN OTHER QUANTITIES,

439 c SOME OF WHICH WILL BE SMALL NEAR A SOLUTION.

440 c

441 TESTl = RNORM/BNORM

442 TEST2 = ARNORM/ (ANORM+RNORM)

443 TEST3 = ONE/ACOMD

444 Tl = TESTl/ (ONE + ANORM*ZIORM/BNORM)

445 RTOL = BIOL + ATOL*ANORM*XNORM/BNORM

446 c

447 c THE FOLLOWING TESTS GUARD AGAINST EXTREMELY SMALL VALUES OF

448 c ITOL, BTOL OR CTOL. (THE USER MAY HAVE SET ANY OR ALL OF

449 c THE PARAMETERS ATOL, BTOL, CONLIM TO ZERO.)

450 c THE EFFECT IS EQUIVALENT TO THE NORMAL TESTS USING

451 c ATOL = RELPR, BTOL = RELPR, CONLIM = i/RELPR.

452 c

453 T3 = ONE + TESTS

210
454

too

456 457

AKa 43o 459 460 \* 461 r

462 c\0 463

464

465 466 c

467 c

noo rw

469 Q

^ f u 471

474

475

^ f D 477

479

480 c

481 c

482 483

484

485 486 c

487 c

488 c

489 c

490 c

TO 1 492

4w 1 c

dOQ c

ouu c

501 c

502 c

503 c

504

505 506

T2 = OWE + TEST2

Tl = ONE + Tl IF (ITN .GE. ITNLIM) ISTOP = 7 IF (T3 .LE. ONE ) ISTOP = 6 IF (T2 .LE. ONE ) ISTOP = 5 IF (Tl .LE. ONE ) ISTOP = 4

ALLOW FOR TOLERANCES SET BY THE USER.

IF (TEST3 .LE. CTOL) ISTOP = 3 IF (TEST2 .LE. ATOL) ISTOP = 2 IF (TESTl .LE. RTOL) ISTOP = 1

SEE IF IT IS TIME TO PRINT SOMETHING.

IF (NOUT .LE. 0) GO TO 600

IF (M.LE.40 .OR. N.LE.40) GO TO 400

IF (ITN .LE. 10) GO TO 400

IF (ITN .GE. ITNLIM-10) GO TO 400

IF (M0D(ITN,10) .EQ, 0) GO TO 400

IF (TEST3 .LE. 2.0*CT0L) GO TO 400

IF (TEST2 .LE. 10.0*AT0L) GO TO 400

IF (TESTl .LE. 10.0*RT0L) GO TO 400

GO TO 600

PRINT A LINE FOR THIS ITERATION.

400 WRITE(NOUT, 1500) ITN,I(1) ,RN0RM,TEST1,TEST2.AN0RM,AC0ND

IF (MODdTN.lO) .EQ, 0) WRITE(NOUT, 1600)

STOP IF APPROPRIATE.

THE CONVERGENCE CRITERIA ARE REQUIRED TO BE MET ON NCONV

CONSECUTIVE ITERATIONS, WHERE NCONV IS SET BELOW.

SUGGESTED VALUE — NCONV =1,2 OR 3.

600 IF (ISTOP .EQ. 0) NSTOP = 0 IF (ISTOP .EQ. 0) GO TO 100

NCONV = 1 NSTOP = NSTOP + 1 IF (NSTOP .LT. NCONV .AND. ITN .LT. ITNLIM) ISTOP = 0 IF (ISTOP .EQ. 0) GO TO 100

END OF ITERATION LOOP.

FINISH OFF THE STANDARD ERROR ESTIMATES.

T = ONE

IF (M .GT. N) T = M - N

IF (DAMPSQ .GT. ZERO) T = M

211
507 T = RNORM/SqRT(T)

508 C

509 DO 700 I = 1, N

510 SE(I) = T*SqRT(SE(I))

511 700 CONTINUE

512 C

513 C PRINT THE STOPPING CONDITION.

514 C

515 800 IF (NOUT .LE. 0) GO TO 900

516 WRITE(NOUT, leOO) ITN.ISTOP

517 IF (ISTOP .EQ. 0) WRITECNOUT, 2000)

518 IF (ISTOP .EQ. 1) WRITECNOUT. 2100)

519 IF (ISTOP .EQ. 2) WRITE(NOUT, 2200)

520 IF (ISTOP .EQ. 3) WRITE(NOUT, 2300)

521 IF (ISTOP .EQ. 4) WRITE(NOUT, 2400)

522 IF (ISTOP .EQ. 5) WRITE(NOUT, 2500)

523 IF (ISTOP .EQ. 6) WRITE(NOUT, 2600)

524 IF (ISTOP .EQ. 7) WRITE(NOUT, 2700)

525 900 RETURN

528 C

'

527 C

528 1000 FORMAT(

529 1 // 25X, 46HLSQR — LEAST-SQUARES SOLUTION OF A*I = B

530 2 // 25X, 18HTHE MATRIX A HAS, 16, IIH ROWS AND, 16, BE COLS

531 3 / 25X, 36HTHE DAMPING PARAMETER IS DAMP =, 1PE10.2

532 4 // 25X, 8HAT0L =, 1PE10.2, lOX, 8HC0NLIM =, 1PE10.2 . 533 5 / 25X, 8HBT0L =, 1PE10.2, lOX, 8HITNLIM =, 110)

534 1200 FORMAT(// 3X, 3HITN, 9X, 4HX(1), 14X, 8HFUNCTI0N, 7X,

535 1 45HC0MPATIBLE INCOMPATIBLE NORM(A) COND(A) /)

536 1300 FORMAT(// 3X, 3HITN, 9X, 4HX(1), 14X, 8HFUNCTI0N, 7X,

537 1 45HC0MPATIBLE INCOMPATIBLE NORM(ABAR) COND(ABAR) /)

538 IBOO F0RMAT(I6, 1PE20.10, 1PE19.10, 1P2E13.3, 1P2E11.2)

539 1800 FORMAT(IX)

540 1900 FQRMAT(/ 20H NO. OF ITERATIONS =, 16,

541 1 8X. 21H STOPPING CONDITION =, 13)

542 2000 FORMAT(/ 52H THE EXACT SOLUTION IS X = 0

.

543 2100 FORMAT(/ B2H A*X - B IS SMALL ENOUGH, GIVEN ATOL, BTOL

544 2200 FORMAT(/ B2H THE LEAST-SQRS SOLN IS GOOD ENOUGH, GIVEN ATOL

545 2300 FORMATC/ B2H THE ESTIMATE OF COND(ABAR) HAS EXCEEDED CONLIM

546 2400 FORMAT(/ B2H A*X - B IS SMALL ENOUGH FOR THIS MACHINE

547 2500 FORMAT(/ B2H THE LEAST-SQRS SOLN IS GOOD ENOUGH FOR THIS MACHINE

548 2600 FORMAT(/ B2H COND(ABAR) SEEMS TO BE TOO LARGE FOR THIS MACHINE

549 2700 FORMAT(/ B2H THE ITERATION LIMIT HAS BEEN REACHED

550 C END OF LSQR

551 END

552 C

553 SUBROUTINE NORMLZ( N,X,BETA ) 554 INTEGER N

555 REAL X(N),BETA

556 C

557 C NORMLZ IS REQUIRED BY SUBROUTINE LSQR. IT COMPUTES THE

558 C EUCLIDEAN NORM OF X AND RETURNS THE VALUE IN BETA.

559 C IF X IS NONZERO, IT IS SCALED SO THAT NORM(X) = 1.

212
560 C

561 C

562 C

563 C

564 C

565 566 C

567 C

568

668

570

571 572 573 C

574 C

575

FUNCTIONS AND SUBROUTINES

BLAS SNRM2,SSCAL

REAL ONE, SNRM2, ZERO

ZERO =0.0

ONE =1.0

BETA = SNRM2( N.I.l ) IF (BETA .GT. ZERO) CALL SSCAL( N, (ONE/BETA) ,1,1 ) RETURN

END OF NORMLZ

END

213
6.3.8 SQRTT.FOR

1 function sqrtt (z) ! assure proper

2 complex sqrtt , z , cmplx

3

4 data pi / 3.1416926E0 /

5 X = real (z)

e y = aimag (z)

7 call polar (x,y,r,a,l) ! [0,2)

8

• if (r.eq.O.O) then

9 sqrtt = cmplx (0.0, 0 .0)

10 else

11 r = sqrt (r)

12 a = a*pi*O.B ! [0, pi)

13 sqrtt = cmplx (r*cos( a). r*sin(a))

14 end if

15 return

16 end

214
6.3.9 POLAR.FOR

1 c

2 subroutine polar (x, y, r, a, icase)

3 c given: x,y

4 c discern: r,a

s c where: r>0, x=r*coB (a*pi) , y=r*sin(a*pi)

a c case 1: a ' [ 0, 2)

7 c 2: a - (-1, 1]

8 c 3: a '

C 0, 2*pi) ! radians

9 c 4: a ' [ 0, 360) ! degrees

10

11 data pi / 3.14159265E0 /

12

13 it (y .eq. 0.0) then ! x axis

14 if (x .It. 0.0) then

15 a = 1.0

16 r = -X

17 else

18 a = 0.0

10 r = X

20 end if

21 goto 1

22 end if

23 if (x .eq. 0.0) then ! y axis

24 if (y .It. 0.0) then

25 a = 1 .

5

26 r = -y

27 else

28 a = 0.5

20 r = y

30 end if

31 goto 1

32 end if

33 XX = abs (x)

34 yy = abs (y)

35 if (xx .It. yy) then

36 a = x/y ! ratio < 1 37 r = yy * sqrt (a*a+1.0)

38 a = 0,5 - atan (a) /pi ! top

39 if (y .It. 0.0) a=a+1.0 ! bottom

40 else

41 a = y/x ! ratio < 1

42 r = XX sqrt (a*a+1.0)

43 a = atan (a) /pi

44 if (x .It. 0.0) then ! Ihs

45 a = a+1.0

46 else if (y .It. 0.0) then

47 a = a+2.0 ! rhs

48 end if

49 end if

50

215
51 1 if (icase .eq. 1) retuxzi

52 if (icase .eq. 2) then

53 if (a .gt. 1.0) a=a-2.0

54 return

55 end if

56 if (icase .eq. 3) then ! radians

57 a = a*pi

68 else ! degrees

59 a = a*180 .0

60 end if

61

62 return

63 end

216
6.3.10 IINDEX.FOR

1 c Discern the sequential index (k) for the (i,j) matrix element,

2 c where the matrix is symmetric, a(i,j) = a(j,i) = a(k),

3 c but where only the tipper/lower triangle is stored, k=k(i,j).

4 c N ' size of the square matrix, i.e., A " a(i,j) is MxN.

5 c L ' indicates the storage format, 1-4.

6

7 fimction iindex (l,n,i,j)

8 integer iindex, l,n,i,j

9

10 if (l.lt.l .or. n.lt.l .or. i.lt.l .or. j.lt.l .or.

11 ft l.gt.6 .or. i.gt.n .or. j.gt.n ) then

12 call exit (2) ! 2''error, 4'severe error

13 end if

14

15 mn = min (i,j)

16 mx = max (i,j)

17 goto (1,2,3,4,5,6), 1

18

19 c Symmetric Matix

20

21 c Lower triangular matrix, j<=i, stored column by column.

22 1 iindex = mx + ( (n+n-mn) fCmn-l) )/2

23 return

24

25 c Lower triangular matrix, j<=i, stored row by row.

26 2 iindex = mn + ( (mx-l)*mx)/2

27 return

28

29 c Upper trismgular matrix, i<= j , stored column by column.

30 3 iindex = mn + ( (mx-l)*mx)/2

31 return

32

33 c Upper triangular matrix, i<=j , stored row by row.

34 4 iindex = mx + ((n+n-ran)*(mn-l))/2

35 return

3637 c Asymmetric Matrix

38

39 c Full matrix, stored column by column.

40 5 iindex = i + (j-l)fn

41 return

42

43 c Full matrix, stored row by row.

44 6 iindex = j + (i-l)*n

45 return

4647 end

217
6.3.11 ISTIME.FOR

1 function istime (i) ! dummy argument

2 integer istime, if time, i, it

3 logical first

4 data first /.true./

5

e entry iftime (i)

7 if (first) then ! initial

8 first = .false.

9 call times (-l,it) ! initialize cpu clock , 10 end if

11 call times (l,it) ! query elapsed cpu time (centi-seconds)

12 istime = it^lO ! milli-seconds

13 return

14 end

218
6.3.12 TIMES.FOR

1 subroutine times (is, it)

2 include 'sys$library :libdel .f or'

3 include ' sys$library : sigdef .f or'

4 c* include ' sys$library :mthdef .f or'

5 c* include ' sys$library :lordef .lor'

a

7 paretmeter (io=6, nh=2)

8 integer*4 hzmdle(nh), status

B save handle

10

11 c

12 c This routine maintains or keeps track of several distinct

13 c or separate and independent clocks.

14 c Each clock is equivalent to any other clock,

15 c i.e., among themselves.

16 c The number ot clocks is restricted by the magnitude

17 c or dimension o± the array, "handle", i.e., "nh"

18 c The clocks are indexed by the magnitude of "is" = |is|.

19 c ii clock is initalized whenever "is" is negative;

20 c all clocks are initalized whenever "is" is zero.

21 c Time displacements or intervals, "it", are:

22 c a) evaluated whenever "is" is positive

23 c b) expressed in units of: centi-seconds

24 C

25

26 if (is.eq.O) then ! initialize all clocks

27 do i=l,nh ! scan distinct clocks

28 status = lib$init_timer (handle(i))

2B if (status .ne . ss$_normal) then

30 write (io,6)

31 Stop

32 end if

33 end do

34 return

35 end if

38

37 if (iabs(is) .gt .nh) then ! nonexisting clock

38 write (io,8) is

39 stop

40 end if

41

42 if (is.lt.O) then ! initialize, clock # |is|.

43 status = lib$init_timer (handle(-is)

)

44 if (status .eq. ss$_normal) return

45 write (io,6)

46 stop

47 else ! elapsed time, clock # (is).

48 status = lib$stat_timer (2,it ,handle(i8))

49 if ( status. eq.ss$_normal) return

60 write (io,7)

219
51 Stop

52 end if

53

54 6 format (' times, error: clock initalization problem. '

)

55 7 format (' times, error: clock evaluation problem .'

)

56 8 format (' times, error: using non-existing clock #', i2)

57 end.

220
6.3.13 LJCHAR.FOR

1 c

2 c Left-justify and compress a character string

3 c by removing blank characters from the string.

4 C

5 subroutine Ijchar (c)

0 character a, c*(*)

78 1 = len (c) ! length, number of characters in string

0 i = index (c,' ') ! locate first occuxance of blank character

10 if (i.eq.O .or. i.eq.l) return

11

12 ii = i+1 ! index of next character

13 do j=ii,l ! scan rightmost part of string

14 a = c(j:j) ! extract next character

15 if (a.ne . ' ' ) then

19 c(i:i) = a ! fill on left

17 c(j:j) = ' ' ! fill on right

18 i = i+1 ! update index

19 end if

20 end do

21 return

22 end

221
6.3.14 HHLINE.FOR

1 subroutine hhline (idat, iout) ! used only by: INPDAT

2

3 character*50 dlimit, hyphen ! convenience

4 data hyphen/' '/

5

6 read (idat, 2) dlimit

7 il (dlimit .eq. hyphen) then

8 ?rite (iout, 3) dlimit

9 else

10 write (iout, 4) dlimit, hyphen

11 stop

12 end il

13 return

14

15 2 format (a)

18 3 format (Ix, a)

17 4 format (/' ... oops, inadequate delimiter'

18 ft /' read:', a /' want:', a)

19 end

222
6.4 Dielectric Functions, Effective Media

6.4.1 DIEFCN.FOR

1 c Evaluate: dielectric function of mixture.

2 c Consider:

3 c 1) volume fractions, effective medium approximation

4 c 2) structure fractions, depolarization factors ... (not yet)

5 c 3) mixture parEuneters

6 c 4) ambient parameters

7 C

8

9 subroutine diefcn (imbien, imixtr,

10 k anglei, wavlen, dielec,

11 k dielew, dielff, dielpp, dielpa)

1213 complex dielec, dielew, dielff (1), dielpp(l), dielpa(i)

15 include 'iounit.*

16 include 'defnit.'

17 include 'filmmm.

18 include 'handyy.' ! pi

19'

20 complex dielCnlmnts) , diew(nlmnts) , ss(nlmnts)

21 integer iipa(nparms) , iipp(nparms)

22 real rrpa(nparms) , rrpp(nparms)

23 integer llpa(nparms) , llpp(nparms)

24 parameter (klmnts=5) ! convenience

25 complex ddpa(nparms ,klmnts) , ddpp(nparms .klmnts) ! (nparms,nlmnts)

2627

28 mm = mmixtr+imbien ! offset, ambient

2930 mipa = miparm(mm)

31 kipa = kiparm(mm)

32 if (mipa.ne.O) then ! ambient parameters

33 ki = kipa

34 do m=l,mipa

35 ki = ki+1

36 ip = jiparm(ki)

37 iipa(m) = iiparm(ip)

38 end do

39 end if

40

41 mrpa = mrparm(mm)

42 krpa = krparm(mm)

43 if (mrpa.ne.O) then ! ambient parameters

44 kr = krpa

45 do m=l,mrpa

46 kr = kr+1

47 ip = jrparm(kr)

48 rrpa(m) = rrparm(ip)

223
49 llpa(m) = Irparm(ip)

50 end do

51 end if

52

53 mipp = niiparm(imixtr)

54 l^ipp = kiparm(imixtr) ! offset > jiparm > iiparm

55 if (mipp.ne.O) then

56 ki = kipp

57 do m=l,mipp

58 ki = ki+1

59 ip = jiparm(ki)

60 iipp(m) = iiparm(ip)

61 end do

62 end if

63

64 mrpp = mrparm(imixtr)

65 krpp = krparm(iinixtr) ! offset > jrparm > rrparm

66 if (mrpp.ne.O) then

67 kr = krpp

68 do m=l ,mrpp

69 kr = kr+1

70 ip = jrparin(kr)

71 rrpp(m) = rrparm(ip)

72 llpp(m) = Irparm(ip)

73 end do

74 end if

75

76 nunlmn = ininlmnt(imixtr) ! quantity of elements in mixture

77 kklmn = kklmnt(imixtr) ! offset > iilmnt

78 c ======================================================

79 if (mmlmn.ne.O) then ! volume fractions

80 if (mmlmn .gt. klmnts) then ! insure sufficient norkspace

81 write (ioutjlll) mmlmn

82 stop

83 end if

84

85 kk = kklmn

86 do i=l, mmlmn ! scan elements

87 kk = kk+1

88 Imnt = iilmnt (kk) ! specific element

89 c frac = f f Imnt(kk) ! volume fraction

90

91 if (mrpp .ne. 0) then ! initialize

92 do j=l,mrpp

93 ddpp(j,i) = cmplx (0.0, 0.0)

94 end do

95 end if

96 if (mrpa .ne. 0) then I initialize

97 do j=l,mrpa

98 ddpa(j,i) = cmplx (0.0, 0.0)

99 end do

100 end if

101

224
103 call dielmn (Imnt, anglei, wavlen, diel(i), diew(i).

103 £ mipp.iipp, mrpp,rrpp,llpp, ddpp(l,i),

104 ft mipa.iipa, mrpa,rrpa,llpa, ddpa(l,i) ) 105 end do

106 107 kk = kklmn+1 ! locate volume fractions

108 call dieema (mmlmn, fflmnt(kk), diel, diaw, dielff.

109 s dielec, dielew, ss )

1lit! 1 A

Ill if (mrpp .ne. 0) then

112 do j=l,mrpp

113 do i=l, mmlmn

114 ss(i) = ddpp(j ,i)

lis end do

116 call diemad (mmlmn, fflmnt(kk), diel, ss.

117 k dielec, dielpp(j) ) 118 end. do

119 end if

130 if (mrpa .ne. 0) then

121 do 3=1, mrpa

122 do i=l, mmlmn

123 ss(i) = ddpa( j ,i)

124 end do

125 call diemad (mmlmn, fflmnt(kk), diel, ss.

126 c dielec, dielpa(j) ) 127 end do

128 end if

129 130

131 C end if ! volume fractions

132 c Determine: d (dielectric lunction_(w) ) /d (mixture parameters)

133

134 c* \i (mrpp.ne.O) then ! mixture pareuneters

135 c* kr = krpp

136 c* do irp=l,mrpp

137 c* kr = kr+1

138 c* dielpp(irp) =0.0

139 c* end do

140 c* dielec = ... when ever necessary

141 c* dielew = ... when ever necessary

142 end if

143 c

144 c Determine: d (dielectric lunction_(w) ) /d (ambient parameters)

145

146 c* i.1 (mrpa.ne.O) then ! ambient parameters

147 c* kr = krpa

148 c* do irp=l,mrpa

149 c* kr = kr+l

160 c* dielpa(irp) = 0.0

151 c* end do

152 c* dielec = ... when ever necessary

163 c* dielew = ... when ever necessary

154 c* end if

225
155 C

156

157 roturn

158

158 111 format (/' diefcn, increase the allocation size '

160 Sc /' of the second index of arrays:'

161 k /' dtipPj ddpa. '

162 & /' to: ' , is ) 163

164 end

226
6.4.2 DIEEMA.FOR

1 C

2 c Evaluate: dielectric function of a mixture

3 c within: the effective mediuin approximation

4 c Method: Newton iteration

56

c

7 subroutine dieema (mlmzit, frac, diel. diew, dief

,

8

9 k dielec, dielew. ss)

10 real f rac(inlitiiit)

11 complex diel(mlmnt), diew(mlrant). dief(mlmnt)

12 complex dielec, dielew

13 complex ss(mlmiit) ! workspace

14

IS complex cmplx

le complex ssl, ss2, step, denom

17 complex dies, died, fracc, third. one, zero

18

19 include ' iounit •

! iout

20

21

22 third = cmplx (1.0/3.0, 0.0)

23 one = cmplx (1.0, 0.0)

24 zero = cmplx (0.0, 0.0)

25 ssl - zero ! initialize

20 ss2 = zero

27

28 do i=l ,mlinnt

29 fracc = cmplx (frac(i), 0.0) ! volume fraction

30 dies = diel(i) ! dielectric function

31 8s(i) = fracc+dies ! convenience

32 ssl = ssl+fracc*dies ! shielding minimum

33 ss2 = ss2+frace/dies ! shielding maximum

34 end do

3538 8s2 = one/ss2

37 dielec = (ssl+ssl+ss2)*third ! estimate EMA

38

39 if (mlmnt.eq.l) goto 2

40 c

41 c Newton iteration

4243 kt = 0

44 1 kt = kt+1 ! iteration count

45 dies = zero ! residual, Q

46 died = zero ! gradient, dQ

47 do i=l,mlmnt

48 denom = diel(i) + dielec+dielec

49 step = ss(i) /denom ! convenience

50 dies = dies+step ! f(x)

227
51 died = died-step/denom f'(x) /2

52 end do

Do 1

54 died = died+died dQ = df/dx

OD a w c u — ux OS/ dX 6 CL Newton step

5657 sx = real (step)

58 sy = aimag (step)

59 dx = real (dielec)

60 dy = aimag (dielec)

61 call polar (sx.sy, sr,sa, 1) L0,2;

62 call polar (dx.dy, dr.da, 1) 1 [0,2)

63

64 if (kt .©q. 200) then 1 slow convergence

65 write (ioutjlOi) kt, dies, step, dielec

66 stop

67 end if

68

69 if (sr .gt. 0.1*dr) then limit stepsize

70 seal = 0.1*dr/sr

71 dielec = dielec + step*cmplx (seal. 0.0)

72 goto 1 73 else

74 dielec = dielec + step j update solution

75 if (sr .ge. dr*1.0E-6) goto 1 test convergence

76 end if

77 C

78 C Convergence achieved.

79 c Evaluate: (d/dw) (dielectric function EMA)

80 c and: (d/df) (dielectric function EMA)

81

82 2 continu®

83 dies = zero

84 died = zero

85 do i=i,mlinnt fractions

86 denom = diel(i) + dielec+dielec

87 dief(i) = diol(i) /denom 1 df , convenience

88 denom = denom*denom

89 fracc = cmplx (frac(i), 0.0)

90 dies = dies + 3s(i) /denom d@

91 died = died + dieff(i)*f racc/denom dw

92 end do

93 dielew = dielee*(di9d/dies) 1 de/dw

94 dies = dies+dies

95 do i=i,mlmnt

96 diof(i) = dief(i)/dies de/df

97 end do

98

99 return

100

101 101 format (/' dieEMA, slow convergence or divergence, '

102 ft /' iteration " ' , i5

103 ft /' residual ' lp2© IE.

6

228
104 I: /' Newton step ' 2el5.6

105 k /* dielec ' ', 2el5.6 ) 106 107 end

229
6.4.3 DIEMAD.FOR

1 c Evaluate: dielectric function partial derivatives

2 c within: the effective medium approximation

3 c

4

5 subroutine diemad (mlmnt, frac, diel, diew,

a ft dielec, dielew)

7

8 real frac(mlmnt)

e complex diel(mlmnt), diew (mlmnt ) , dielec, dielew

10 complex cmplx

11 complex dies, died, fracc, denom

12

13 dies = cmplx (0.0, 0.0)

14 died = cmplx (0.0, 0.0)

15 do i=l, mlmnt ! fractions

16 denom = diel(i) + dielec+dielec

17 denom = denom*denom

18 fracc = cmplx (frac(i), 0.0)

10 dies = dies + diel(i)*fracc/denom ! de

20 died = died + diew(i)*fracc/denom ! dw

21 end do

22 dielew = dielec* (died/dies) ! de/dw

23

24 return

25 end

230
6.4.4 DIELMN.FOR

1 subroutine dielmn (Inmt,

2 ft anglei, wavlen, dialec, dielew,

3 ft inipPiiipp. mrpp , rrpp , llpp , ddpp, ! mixture 4ft mipa.iipa, imrpa.rrpa.llpa, ddpa) ! ambient

5

a integer iipa(l), iipp(l)

7 real rrpa(l), rrpp(l)

8 integer llpa(l), llpp(l)

9 complex ddpa(l), ddpp(l), dielec, dielew

10

11 include 'iounit.'

12 include 'defnit.'

1314

15 if (Imnt.lt.l .or. Imnt . gt . nlmnt s ) then

18 write (iout,102) Imnt, nlmnts

17 stop

18 end it

19

20 goto ( 1, 2, 3, 4, 5, 6, 7, 8, 9, 10,

21 ft 11, 12, 13, 14, 15, 16, 17, 18, 19, 20 ), Imnt

22 write (iout,103)

23 stop

24

25 C

26 1 continue ! vacuum

27 call dielOl (anglei, wavlen, dielec, dielew,

28 ft mipp.iipp, rarpp , rrpp , llpp , ddpp,

29 ft mipa,iipa, mrpa,rrpa, Ilpa, ddpa)

30 goto 101

31 c

32 2 continue ! air

33 call diel02 (anglei, wavlen, dielec, dielew,

34 ft mipp.iipp, mrpp, rrpp, llpp, ddpp,

35 ft mipa,iipa, mrpa,rrpa,llpa, ddpa)

36 goto 101

37 c

38 3 continue ! Silicon (crystalline)

39 call diel03 (anglei, wavlen, dielec, dielew,

40 ft mipp.iipp, mrpp, rrpp, llpp, ddpp,

41 ft mipa.iipa, mrpa.rrpa.llpa, ddpa)

42 goto 101

43 c

44 4 continue ! Silicon (sunorphous)

45 call diel04 (anglei, wavlen, dielec, dielew,

46 ft mipp,iipp, mrpp . rrpp , llpp , ddpp,

47 ft mipa.iipa, mrpa.rrpa.llpa, ddpa)

48 goto 101

49 c

50 5 continue ! Silicon Dioxide (glass)

231
51 call dielOB (angle! , wavlen, dielec, dielew,

52 k mipp.iipp, mrpp , rrpp , llpp , ddpp,

53 & mipa.iipa, mrpa,rrpa,llpa, ddpa)

54 goto 101

55 c

56 6 continue ! Silicon Nitride (noncrystalline)

57 call diel06 (anglei, wavlen, dielec, dielew,

58 ft mipp,iipp, mrpp, rrpp, llpp, ddpp,

59 ft znipa,iipa, inrpa,rrpa,llpa, ddpa)

60 goto 101

61 c

62 7 continue ! GerraEinium (crystalline)

63 call diel07 (anglei, wavlen, dielec, dielew,

64 ft mipp,iipp, mrpp , rrpp , llpp , ddpp,

65 ft mipa,iipa, mrpa,rrpa,llpa, ddpa)

66 goto 101

67 c

68 8 continue ! GaAs (crystalline)

60 call dielOS (anglei, wavlen, dielec, dielew,

70 ft mipp,iipp, mrpp , rrpp , llpp , ddpp,

71 ft mipa.iipa, mrpa,rrpa,llpa, ddpa)

72 goto 101

73 c

74 9 continue ! Al(x) Ga(l-x) As

75 call dielOS (anglei, wavlen, dielec, dielew,

76 ft mipp.iipp, mrpp , rrpp , llpp , ddpp,

77 ft mipa,iipa, mrpa,rrpa,llpa, ddpa)

78 goto 101

79 c

80 10 continue ! Oxides of GaAs, Ga(2)0(3), etc.

81 call diellO (anglei, wavlen, dielec, dielew,

82 ft mipp,iipp, mrpp, rrpp, llpp, ddpp,

83 ft mipa,iipa, mrpa,rrpa,llpa, ddpa)

84 goto 101

85 C

'

86 11 continue ! Arsenic (amorphous)

87 call dielll (anglei, wavlen, dielec, dielew,

88 ft mipp,iipp, mrpp , rrpp , llpp , ddpp,

89 ft mipa,iipa, mrpa,rrpa,llpa, ddpa)

90 goto 101

91 C

92 12 continue ! GaP

93 call diell2 (anglei, wavlen, dielec, dielew,

94 ft mipp.iipp, mrpp, rrpp, llpp, ddpp,

95 ft mipa,iipa, mrpa,rrpa,llpa, ddpa)

98 goto 101

97 C

98 13 continue ! GaSb

99 call diell3 (anglei, wavlen, dielec, dielew,

100 ft mipp.iipp, mrpp , rrpp , llpp , ddpp,

101 ft mipa.iipa, mrpa,rrpa,llpa, ddpa)

102 goto 101

103 c

232
104 14 continue 1 InAs

105 call diell4 (anglei, wavlen, dielec, dielew,

106 s mipp , iipp , mrpp , rrpp , llpp , ddpp

,

107 mipajiipa, mrpa,rrpa,l±pa, adpaj

108

109 gObO lUl

c

110 15 continue ! InP

111 call dxellb (anglei, wavlen, dielec, dielew,

112 c mipp , iipp , mrpp , rrpp , llpp , ddpp

,

113 mipa,iipa, mrpa,rrpa,llpa, ddpa)

114

115 gObO lUlc

116 16 continue ! InSc

117 call aielle (anglei, wavlen, dielec, diele?.

118 C mipp, iipp, mrpp , rrpp , llpp , ddpp,

119

120

121 gObO lUl

c

122 17 continue ! ilXbD

123 call diell/ (anglei 1 wavlen, dielec , dielew.

124

• mipp , iipp , mrpp , rrpp , llpp , ddpp

,

125 mipHiiipa, inrpa,rrpayllpai ddpa)

126

127 goto lui

c

128 18 continue ! Si *1.01, Geist

129 call diellS (emglei, wavlen, dielec, dielew.

130 t mipp, iipp, mrpp , rrpp , llpp , ddpp.

131 C mipa,iipa, mrpa,rrpa,llpa, ddpa)

132 gObO lUl

133 c

134 19 continue { 135 c* call d.iell9 (anglei, wavlen, dielec, dielew,

136 c* k mipp, iipp, mrpp, rrpp, llpp, ddpp.

137 c* k mipa.iipa, mrpa,rrpa,llpa, ddpa)

138 11 (.true.; stop

139 goto 101

140 c

141 20 continue ! GaAs (.Sell, Horowitz;

142 call diel20 (anglei, wavlen, dielec, dielew.

143 k mipp, iipp, mrpp , rrpp , llpp , ddpp.

144 k mipa,iipa, mrpa,rrpa,llpa, ddpa)

145 goto 101

146 c

147 101 continue

148 return

149

150 102 format (' dielmn, ... oops, 2i4, 4x, Imnt, nlmnts')

151 103 format (' dielmn, ... oops, update argument list of: GOTO

152 end

233
6.5 Dielectric Functions, Constituent Media

6.5.1 DIELOl.FOR, vacuum

1 c Optical properties of : vacuum

2

3 subroutine dielOl (anglei, vavlen, dielec, dislen,

4 k mipp,iipp, mrpp , rrpp , llpp , ddpp, ! mixture

5 I; mipa,iipa, inrpa,rrp'i.,llpa, ddpa) ! ambient

67 integer iipa(l), iipp(l)

8 real rrpa(l), rrpp(l), anglei, wavlen

9 integer llpa(l), llpp(l)

10 complex ddpa(l), ddpp(l), dielec, dielew

11

12 include 'iounit.'

13 include 'defnit.'

14 include 'elmnts.'

15 include 'handyy.' ! pi.cccc.wavlev

16

17 c* common / dieool / rfrac, dfrac ! not necessary

18

19

20 if ( .not .llmnts(l) ) then

21 llrants(l) = .true.

22 write (iout.lll)

23 end if

24

25 dielec = cmplx (1.0, 0.0) ! dielectric function

26 dielew = cmplx (0.0, 0.0) ! d/d(energy 'eV) (dielec)

27

28 return

29 111 format (' Imnt ' 1, filename = vacuum')

30 end

234
6.5.2 DIEL02.FOR, air

1

23

4

5e

7

e

810

111213

14

15le17

18

19

20

212223

24

252627

28

2930

313233

34

363637

38

39

40

414243

44

454647

48

49

50

Optical properties of: air

References: Frank E. Jones,

1) "Calculation of Compressibility Factor for Air Over Ranges of

Pressure, Temperature, and Relative Humidity of Interest in

Flowmeter Calibration",

IIBSIR 83-2652, National Bureau of Standards, March 1983.

2) "The Refractivity of Air",

Journal of Research of the National Bureau of Standards,

Volume 88, Number 1, January-February, 1981, pages 27-32.

3) "Simplified Equation for Calculating the Refractivity of Air",

Applied Optics, Volume 19, Number 24, 15 December 1980,

pages 4129-4130.

4) "The Air Density Equation and the Transfer of the Mass Unit",

Journal of Research of the National Bureau of Standards,

Volume 83, Number S, September-October, 1978, pages 419-428.

The optical properties of air is dependent upon:

a) molecular composition (C02, water vapor, ...)

b) pressure,

c) temperature.

subroutine diel02 (anglei, wavlen, dielec, dielew,

k mipp.iipp, mrpp , rrpp , llpp , ddpp,

k mipa.iipa, mrpa,rrpa,llpa, ddpa)

integer iipa(l), iipp(l)

real rrpa(l), rrpp(l), anglei, wavlen

integer llpa(l). llpp(l)

complex ddpa(l), ddpp(l), dielec, dielew

include ' iounit .

include 'defnit.'

include ' elmnt s

.

include ' handyy.'

! mixture

! am.bient

common / dieoo2 / rfrac, dfrac

if ( .not .llmnts(2)) then

llmnt8(2) = .true,

write (iout.lll)

end if

tz = 273.15

ts = tz + 15.0

tr = tz + 20.0

! pi,cccc,wavlev

! (n-1), n'

zero Celsius expressed in Kelvin

standard air

temperature of room (Kelvin)

235
515253

54

5556

57

58

5e60 C

61 C

62

63

64

65 C

66 C

67

68

69 C

70 C

71

7273

74

7576

77

78

7980 C

81 C

82

6384

858687

88

8990

91 C

92 C

93 C

94 C

95 C

9697

98

99 100

101

102 103

ps = 760.0

pr = 760.0

! standard air " one atmosphere

! pressure in room (torr ' mm Hg)

xs = 0.0003

xr = 0.00043

! st£indard air

! carbon dioxide in room

us = 0.0 ur = 0.50

! standard air ' dry

I relative humidity (water) in room

Enhancement factor (saturation vater vapor pressure: air vs. pure phase)

f = 1.00070 + (3.113E-8 * 101325 .0)*(pr/ps)

& + 5.4E-7 * (tr-tz)**2

Saturation water vapor pressure in (pure phase ?)

es = 1.7526E+11 * exp (-5315.56 /tr) ! Pascals

Compressibility of air (standard)

pp 1.0 ! pressure in atmospheres

ap -10.884 + pp*(588.26 - pp*2.7106)

bp 0.33297 - pp*(12.58B - pp*2.06B9E-2)

cp -2.4925E-3 + pp*(6 .3706E-2 - pp*5.5619E-5)

tt ts-tz ! temperature in Celsius

zs ap + tt*(bp + tt*cp)

zs zs - us*(35.0 + us*0.5) ! relative humidity correction

zs i.O - zs*1.0E-6

Compressibility of air (room)

PP pr/ps ! pressure in atmospheres

ap -10.884 + pp*(588.26 - pp*2.7106)

bp 0.33297 - pp*(12.585 - PP+2.0859E-2)

cp ~2.4925E-3 + pp*(6.3708E-2 - pp*5.5619E-5)

tt tr-tz ! temperature in Celsius

zr ap + tt*(bp + tt*cp)

zr zr - ur*(35.0 + ur*0.5) ! relative humidity correction

zr 1.0 - zr*1.0E-6

The source of incident light is characterized by

wavlen: a) -wavelength in units of netno-meters , or

b) energy in units of electron-volts.

if (wavlen .It. 0.0) then ! nm, wavelength

sigma = -1 .0E3/wavlen ! um**-l

else ! eV, energy

sigma = 1 . 0E3*Havlen/wavlev ! um**-l

end if

S3 = sigma*sigma ! inverse (micro-metar) **2

airs = 8342.13 + 2406030 . /(130 . 0-ss) + 15997 .0/(38 .0-ss)

236
1

104 airs = airs * l.OE-8 * (pr/ps)*(ts/tr)*(zs/zr) ! standard air

105 airx = airs * (1.0 + 0 . 540*(xr-xs) ) • x C02

106 107 water = iir*f*es* (4.2922E-2 - ss*3.43E-4) *1.0E-8

108 rfrac = airx - water ! n-l

109 refrac = 1.0 + rfrac ! refractive index

110 dielec - cmplx (ref rac*refrac , 0.0) I dielectric function

111 c

112 c Derivatives with respect to energy (eV).

113

114 airs = 2406030. /((130.0-ss)**2) + 15997 . 0/( (38 . 9-ss)**2) ! d/d(ss)

115 airs = airs * l.OE-8 * (pr/ps)*(ts/tr)*(zs/zr) ! standard air

lie airx = airs * (1.0 + 0 .B40*(xr-xs)) ! x C02

117

118 water = ur*f*es* 3.43E-12 ! d/d(ss)

119 dfrac = airx - water 1 d/d(ss) ' (micro-m)**2

120 dfrac = dfrac * sigma*2.0 ! d/d(sigma) ' (micro-m)

121 dfrac = dfrac / (wavlev*l . OE-3) ! d/d(energy ' eV)

122 dielew = cmplx (ref rac*dfrac*2 . 0 , 0.0) ! d/d(energy 'eV) (dielec)

123

124 c* write (iout,103) rfrac, dfrac

125 126 return

127

128 103 format (' rfrac = IpelB.B, ' = (n-l) '

129 t /' dfrac = elB.B, ' = (n-l)" ' d/d(energy) (n-l) ')

130 111 format (' Imnt ' 2, filename = air')

131 end

I

237
6.5.3 DIEL03.FOR, Si (crystalline)

1 c

2 c Optical properties of: Silicon (Si), crystalline.

3 c • 4

5 subroutine dielOS (anglei, wavlen, dielec, dielew,

6 k mipp.iipp, inrpp,rrpp,llpp, ddpp, ! mixture

7 ft mipa,iipa, mrpa,rrpa,llpa, ddpa) ! ambient

8

9 integer iipa(l), iipp(l)

10 real rrpa(l), rrpp(l), anglei, wavlen

11 integer llpa(l), llpp(l)

12 complex ddpa(l), ddpp(l), dielec, dielew

13

14 include ' iounit .

'

15 include 'defnit.'

16 include 'elmnts.'

17 include 'handyy.' ! pi , cccc .wavlov

18

16 ch.aracter*64 filnam

20 ch.aracter*4 string ! convenience

21

22 c Note: nx = mx+2, because of: dudx(l), dudx(mx)

23 c in order to include the first derivatives at each end point.

24

25 parjuneter (nx = 50, ko = 4)

26 parameter (nw = nx*(3*ko-2) + ko*ko + ( (ko+l)*(ko+2) )/2)

27 common / dieoo3 / t(nx+ko), c(nx,2), xl,x2, mx, iptr

28 common / dieooo / xx(nx), id(nx) , iw(nx), w(nw), u(4) , v(2)

2930

31 if (llmntsO)) goto 2

32

33 c Fetch information on the dielectric function.

34 c Assume: 1) no partitions

35 c 2) discretization of input data is of either form:

36 c a) energy (eV), refractive index, extinction

37 c b) energy (eV), dielectric function, conductivity

38

39 filnam = 'Si' ! silicon crystalline

40 write (iout,lll) filnam

41 filnam = subdir//filnam

42 call Ijchar (filnam) ! left-justify characters

43 open (iscr, file=filnam, Etatus='old' , readonly .shared, err=ll)

44 c* write (iout,lll) filnam

45

46 1 read (iscr, 112, err=12,end=12) string I skip header

47 c* write (iout,113) string

48 if (string .ne. '=h==') goto 1

49

50 read (iscr, *) mx ! quantity of input data

238
51 c* write (iout. 121) mx ! within one partition

52 if (rax. It. 3 .or. mx+2,ne.nx) then

53 write (iout,122)

54 Stop

55 end if

56

^7 'k = 0 j index knots

58 do i=l ,mx

58 read (iscr,*,err=13,end=13) x, u

60 c* write (ioiit,123) x, u

61

82 if (i.ne.l) then ! induce ordering

«3 if (x .le. xx(k)) then

64 write (iout,124)

65 stop

66 end if

67 end if

68

*9 if (i.eq.2) then ! usual case for cubic spline fit

70 k = k+1

71 xx(k) = xx(l) ! energy (eV)

72 id(k) =1 ! i-th derivative

73 c(k,l) = (u(3)-c(l,l)) /(x-xx(l)) ! refractive index

74 c(k,2) = (u(4)-c(l,2)) /(x-xx(l)) 1 extinction

75 end if

76

77 k = k+1

78 xx(k) = X ! energy (eV)

79 id(k) = 0 .! i-th derivative

80 c(k,l) = u(3) ! refractive index

81 c(k,2) = u(4) ! extinction

82

83 if (i.eq.rax) then ! usual case for cubic spline fit

84 k = k+1

85 xx(k) = X ! energy (eV)

86 id(k) = 1 ! i-th derivative

87 c(k,l) = (u(3)-c(k-2,l)) /(x-xx(k-2)) ! refractive index

88 c(k,2) = (u(4)-c(k-2,2)) /(x-xx(k-2)) ! extinction

89 end if

90

91 end do ! x,u

92 c

93 Xl = XX(1)

94 x2 = xx(k)

95 mx = k ! quemtity of data points

96

97 do i=l,2

98 call bindk (xx ,c(l , i) , id.mx ,ko , t,c(l,i), w,iw,info)

99 if (info.ne.O) then

100 write (iout,131) info, i

101 call exit (2)

102 end if

103 end do

239
104 C =============== = ====== = = = = === = = === = = ===: = === = =: ===:=:== = = =

105 read (iscr , 112 , err=12 , oiid=12) string ! end of information

106 c* write (iout,113) string

107 if (string .oq. '=h==') then

108 close (iscr)

109 else

110 write (iout,114)

111 stop

112 end if

113 114 llinnts(3) = .true.

115 iptr = 1 ! initialize

116 117 2 if (wavlen .It. 0.0) then ! nm, wavelength

118 X = -wavlev /wavlen ! eV < nm

119 else

120 X = wavlen ! eV, energy

121 end if

122

123 if (x.lt.xl .or. x.gt.x2) then ! point exterior domain

124 write (iout,132) xl,x2,x

125 stop

126 end if

127

128 do i=l,2

129 u(i) = bvalu (t ,c(l ,i) ,mx,ko, 0,x, iptr.w) ! (n+ik)

130 v(i) = bvalu (t ,c(l ,i) ,mx,ko, l,x, iptr.w) ! (n+ik)'

131 end do

132 133 dielec = cmplx (u(l), u(2)) ! (n+ik)

134 dielew = cmplx (v(l), v(2)) ! (n+ik)'

135 136 dielew = dielec*dielew*cmplx (2.0, 0.0) ! e'

137 dielec = dielecxdielec ! e

138 139 return

140 C = = = = = = = = ================:= ==== = = === = ==== = ==== = = ====== ==

141 142 11 write (iout,14l)

143 stop

144 12 write (iout,142)

145 stop

146 13 write (iout,143)

147 stop

148

149 111 format (

' Imnt ' 3, filename = ' , a) ••

150 112 format ( a)

151 113 format (

' string = ' , a)

152 114 format (

' oops, error in end-of-info header')

153

154 121 format (

* mx = ' , i5)

155 122 format (

' oops, inconsistency within: mx')

156 123 format ( Ix, i4, 2x, 3fl0.4, lOx, '(j,x,u)' )

240
157 124 lormat (

' oops, ordering violation ') 138

159 131 format (

' oops, error in B-spline formation '

160 k / lOx, 'info =', i2

181 ft / lOx, ' i =' , i2 ,

'

,

' , 5x, 'd'u, 2'du/dx)' ) 162 132 format (

' oops, evaluation point is exterior domain,'

163 ft / ' xl,x2.x ' ' . 3f 10.3)

164

165 141 format (

' oops, error in opening input data file, ')

lee 142 format (

' oops, error in locating header card, ') 167 143 format (

' oops, error in reading (i,x,iii) ')

168

168 end

241
6.5.4 DIEL04.FOR, Si (amorphous)

1 c .

2 c ' Optical properties of: Silicon (Si), amorphous.

3 C

4

5 subroutine diel04 (anglei, wavlen, dielec, dielev,

e k fflipp,iipp, mrpp , rrpp , llpp , ddpp, ! mixture

7 t niipa,iipa, mrpa.rrpa.llpa, ddpa) ! ambient

8

e integer iipa(l), iipp(l)

10 real rrpa(l), rrpp(l), anglei, wavlen

11 integer llpa(l), llpp(l)

12 complex ddpa(l), ddpp(l), dielec, dielew

13

14 include 'iounit.'

15 include 'defnit.'

16 include 'elmnts.'

17 include 'handyy.' ! pi.cccc.wavlev

18

19 character*64 filnam

20 character*4 string ! convenience

21

22 c Note: luc = mx+2, because ol: dudx(i), dudx(mx)

23 c in order to include the first derivatives at each end point.

24

25 parameter (nx =27, ko = 4)

26 parameter (nw = nx*(3*ko-2) + ko*ko + ((ko+l)*(ko+2))/2)

27 common / dieoo4 / t(nx+ko), c(nx,2), xl,x2, mx, iptr

28 common / dieooo / xx(nx), id(nx) , iw(nx), w(nw), u(2), v(2)

2830

31 if (llmnts(4)) goto 2

32

33 c Fetch information on the dielectric function.

34 c Assume: 1) no partitions

35 c 2} discretization of input data is of either form:

36 c a) energy (e7), refractive index, extinction

37 c b) energy (eV), dielectric function, conductivity

3839 filnam = 'Sia' ! silicon amorphous

40 write (iout.lll) filnam

41 filnam = subdir//filnam

42 call Ijchar (filnam) ! left-justify characters

43 open (iscr, f ile=f ilnaiti, status='old' .readonly, shared, err=ll)

44 c* write (iout,lll) filnam

45

46 1 read (iscr, 112, err-12,end=12) string ! skip header

47 c* write (iout,113) string

48 if (string .ne. '=h==') goto 1

49

50 read (iscr, *) mx I quantity of input data

242
51 c* write (iout. 121) mx . within one partitio

52 if (inx.lt.3 .or. mx+2.ne.nx) then

53 write (iout,122)

54 stop

55 end if

56

^7 = 0 ! index knots

68 do i=l,mx

5» read (iscr,*,err=13,end=13) x, u

80 c* write (iout,123) x, u

ei" if (i.ne.l) then ! induce ordering

63 if (x .le. xx(k)) then

64 write (iout,124)

65 stop

66 end if

67 end if

68

•8 if (i.eq.2) then ! usual case for cubic spline fit

70 k = k+1

71 xx(k) = xx(l) ! energy (eV)

"

72 id(k) = 1 ! i-th derivative

73 c(k,l) = (u(l)-c(l,l)) /(x-xx(l)) ! refractive index

74 c(k,2) = (u(2)-c(l,2)) /(x-xx(l)) ! extinction

75 end if

7677 k = k+1

78 xx(k) = X ! energy (eV)

79 id(k) = 0 ! i-th derivative

80 c(k,l) = u(l) ! refractive index

81 c(k,2) = u(2) ! extinction

82

83 if (i.eq.mx) then ! usual case for cubic spline fit

84 k = k+1

85 xx(k) = X ! energy (eV)

86 id(k) =1 ! i-th derivative

87 c(k,l) = (u(l)-c(k-2,l)) /(x-xx(k-2)) ! refractive index

88 c(k,2) = (u(2)-c(k-2,2)) /(x-xx(k-2)) ! extinction

89 end if

90

91 end do ! x,u

92 c

93 Xl = XX(1)

94 x2 = xx(k)

95 mx = k ! quantity of data points

98

97 do i=l,2

98 call bindk (xx,c(l,i) ,id,mx,ko, t,c(l,i), w.iw.info)

99 if (info.ne.O) then

100 write (iout,13l) info, i

101 call exit (2)

102 end if

103 end do

243
105 read (iscr,112,err=12,end=12) string ! end o± information

106 c* write (iout,113) string

107 if (string .eq. '=h==') then

108 close (iscr)

109 else

110 write (iout,114)

111 stop

112 end if

113

114 llmnts(4) = .true.

115 iptr = 1 ! initialize

lie 117 2 if (wavlen .It. 0.0) then ! nm, wavelength

118 X = -wavlev /wavlen ! ©7 < nm

lie else

120 X = wavlen ! eV, energy

121 end if

122

123 if (x.lt.xl .or. x.gt.x2) then ! point exterior domain

124 write (iout,i32) xl,x2,x

125 stop

126 end if

127

128 do i=i,2

129 uCi) = bvalu (t ,c(l ,i) ,mx,ko, 0,x, iptr.w) ! (n+ik)

130 v(i) = bvalu (t ,c(l , i) ,mx,ko , l,x, iptr,w) ! (n+ik)'

131 end do

132 133 dielec = cmplx (u(l), u(2)) ! (n+ik)

134 dielew = cmplx (v(l), v(2)) ! (n+ik)'

135

136 dielew = dielec«dielew*cmplx (2.0, 0.0) ! e'

137 dielec = dielec^dielec ! e

138

139 return

140 C ==== = = = ======== = = === = = ==== ==== = === = = = = = = ======= = = ==: == =

141

142 11 write (iout,14l)

143 stop

144 12 write (iout,142)

145 Stop

146 13 write (iout,143)

147 Stop

148

149 111 format (

' Irant ' 4, filename = ' , a)

150 112 format (a)

151 113 format (

' string = '

, a)

152 114 format (

' oops, error in end-of-info header')

153

154 121 format (

' mx = ' , iB)

155 122 format (

' oops, inconsistency within: mx')

156 123 format ( Ix, i4, 2x, 3fl0.4, lOx, '(j,x,u)' )

244
157 124 format (

' oops, ordering violation ') 158

159 131 format (

' oops, error in B-spline formation, '

190 k I lOx, 'info =', i2

161 4 / lOx, ' i =', i2 , 5x, 'd'u, 2'du/dx)' ) 162 132 format (

' oops, evaluation point is exterior domain,'

163 k / ' xl,x2,x ' ' , 3f 10.3)

164

165 141 format (

' oops, error in opening input data file, ') 166 142 format (

' oops, error in locating header card, ') 167 143 format (

' oops, error in reading (i,x,u) ')

168

169 end

245
6.5.5 DIEL05.FOR, SiOa (amorphous)

1 c

2 c Optical properties o±i Silicon Dioxide (Si02), sunorphous glass.

3 c

4

5 subroutine dielOB (anglei, wavlen, dielec, dielew,

e & mipp.iipp, mrpp , rrpp , llpp , ddpp, ! mixture

7 & inipa,iipa, inrpa,rrpa,llpa, ddpa) ! ambient

8

e integer iipa(l), iipp(l)

10 real rrpa(l), rrpp(l), anglei, wavlen

11 integer llpa(l), llpp(l)

12 complex ddpa(l), ddpp(l), dielsc, dielew

13

14 include 'iounit.'

15 include 'defnit.'

16 include 'elmnts.'

17 include 'h.an.dyy.' ! pi.cccc.wavlev

18

19 character*64 filn2im

20 character*4 string ! convenience

21

22 c Note: nx = mx+2, because of: dudx(l), dudx(mx)

23 c in order to include the first derivatives at each end point.

24

25 parameter (nx =48, ko = 4)

26 parameter (nw = nx*(3*ko-2) + ko*ko + ( (ko+l)*(ko+2) )/2)

27 common / dieooB / t(nx+ko), c(nx,2), xl,x2, mx, iptr

28 common / dieooo / xx(nx), id(nx), iw(nx), wCnw), u(2), v(2)

2930

31 if (llmnts(B)) goto 2

32

33 c Fetch information on the dielectric function.

34 c Assume: 1) no partitions

35 c 2) discretization of input data is of either form:

36 c a) energy (eV), refractive index, extinction

37 c . b) energy (eV), dielectric function, conductivity

38

39 filnam = 'Si_02g' ! silicon dioxide (amorphous glass)

40 write (iout,lll) filnam

41 filneun = subdir//filnam

42 call Ijchar (filnam) ! left-justify characters

43 open (iscr, fil6=filnam, status= ' old' , readonly, shared, err=ll)

44 c* write (iout,!!!) filnam

45

46 1 read (iscr, 112, err=12,end=12) string ! skip header

47 c* write (iout, 113) string

48 if (string .ne. '=h==') goto 1

49

50 read (iscr, *) mx ! quantity of input data

246
51 c* write (iout. 121) mx ! within one partition

52 if (mx.lt. 3 .or. mx+2.ne.nx) then

53 write (iout, 122)

54 stop

55 end if

56

^7 k = 0 I index knots

58 do i=l,mx

59 read (iscr , * , err=13 , end=13) x, u

60 c* write (iout, 123) x, u

61

«2 if (i.ne.l) then ! induce ordering

63 if (x .le. xx(k)) then

64 write (iout, 124)

65 stop

66 end if

67 end if

68

69 if (i.eq.2) then ! usual case for cubic spline fit

70 k = k+1

71 xx(k) = xx(l) ! energy (eV)

72 id(k) = 1 !.i-th derivative

73 c(k,l) = (u(l)-c(l,l)) /(x-xx(l)) ! refractive index

74 c(k,2) = (u(2)-c(l.2)) /(x-xx(l)) ! extinction

75 end if

78

77 k = k+1

78 xx(k) = X ! energy (eV)

78 id(k) =0 ! i-th derivative

80 c(k,l) = u(l) ! refractive index

81 c(k,2) = u(2) ! extinction

82

83 if (i.eq.mx) then ! usual case for cubic spline fit

84 k = k+1

85 xx(k) = X ! energy (eV)

86 id(k) = 1 ! i-th derivative

87 c(k,l) = (u(l)-c(k-2,l)) /(x-xx(k-2)) ! refractive index

88 c(k,2) = (u(2)-c(k-2,2)) /(x-xx(k-2)) ! extinction

89 end if

90

91 end do ! x,u

92 C -

93 Xl = XX(1)

94 x2 = xx(k)

95 mx = k ! quantity of data points

96

97 do i=l,2

98 call bindk (xx,c(l,i) ,id,mx,ko, t,c(l,i), w.iw.info)

99 if (info.ne.O) then

100 write (iout, 131) info, i

101 call exit (2)

102 end if

103 end do

247
104

105 X a avL ^xa^^x yXXAywj.x'X^| w^lu.— X ^ y 0 w x Xxlk ! OXLU Ux inx orma, b ion

106 C* write (iout ,113) string

107 if (string . eq. ' =h== ' ) then

108 cxose v.'i-SCxy 109 else

110 write (iout ,114)

111 st op

112 end. XX

113

114

115 iptr = 1 ! initialize

116 117 if (wavlen .It. 0.0) then ! lun, ravolength

118 X = -Havlev /wavlen ! eV < nm

119 else

120 X = wavlen ! eV, energy

121 end if

122

123 if (x.lt.xl .or. x.gt.x2) then ! point exterior domain

124 write (iout, 132) xl,x2,x

125 stop

126 end if

127 do i=l,2

129 u(i) = bvalu (t ,c(l ,i) ,mx,ko, 0,x, iptr.w) ! (n+ik)

130 v(i) = bvalu (t ,c(l ,i) ,mx,ko , l,x, iptr.w) ! (n+ik)'

131 end do

132

133 dielec = cmplx (u(l), u(2)) ! (n+ik)

134 dielew = cmplx (v(l), v(2)) ! (n+ik)'

11 ODQA dielew = dielec'*'dielew*cmplx (2.0, 0.0) ! e'

137 dielec = dielec*dielec ! e

138

139

1 40 returnC

141

142 11 write (iout, 141)

143 stop

144 1 o 1 z write (iout, 142)

145 stop

146 lo write (iout, 143)

147 stop

148

149 1 -1 -1 111 format (

' Imnt ' B, filename = ' , a)

150 11^ format ( a)

151 113 format (

' string = ' , a)

152 114 format (

' oops, error in end-of-info header')

153 154 121 format (

' mx = ' , i5)

155 122 format (

' oops, inconsistency within: mx')

156 123 format ( Ix, i4, 2x, 3fl0.4, lOx, '(j,x,u)' )

248
157 124 format (

' oops, ordering violation ') 158

159 131 format (

' oops, error in B-spline formation, '

160 t I lOx, 'info =', i2

161 & / lOx, ' i =• , i2 ,

' , ' , 5x, 'd'u, 2'du/dx)' ) 162 132 format (

' oops, evaluation point is exterior domain,'

163 4 / ' xl,x2,x ' 3fl0.3)

164

165 141 format (

' oops, error in opening input data file, ')

166 142 format (

' oops, error in locating header card, ') 167 143 format (

' oops, error in reading (i.x.u) ')

188

169 end

249
6.5.6 D1EL06.FOR, Si^N^ (noncrystalline)

1 c

2 c Optical properties of: Silicon Nitride (Si3N4), non-crystalline.

3 C

4

6 subroutine diel06 (anglei, wavlen, dielec, dielew,

6 & mipp.iipp, mrpp , rrpp , llpp , ddpp, ! mixture

7 & mipa,iipa, mrpa,rrpa,llpa, ddpa) ! ambient

8

9 integer iipa(l), iipp(l)

10 real rrpa(l), rrpp(l), einglei, wavlen

11 integer llpa(l), llpp(l)

12 complex ddpa(l), ddpp(l), dielec, diele?

13

14 include ' iounit . '

15 include 'defnit.'

16 include 'elrants.'

17 include 'handyy.' ! pi.cccc.wavlev

18

19 character*64 filneun

20 characteri'4 string I convenience

21

22 c Note: nx = mx+2, because of: dudx(l), dudx(mx)

23 c in order to include the first derivatives at each end point.

24

25 parameter (nx =21, ko = 4)

26 parameter (n^; = nx*(3*ko-2) + ko*ko + ( (ko+l)*(ko+2) )/2)

27 common / dieco6 / t(nx+ko), c(nx,2), xl,x2, mx, iptr

28 common / dieooo / xx(nx), id(nx), iw(nx), w(nw), u(2), v(2)

2930

31 if (llmnts(6)) goto 2

32

33 c Fetch information on the dielectric function.

34 c Assume: 1) no partitions

35 c 2) discretization of input data is of either form:

36 c a) energy (eV), refractive index, extinction

37 c b) energy (eV), dielectric function, conductivity

38

39 filnam = 'Si3_N4' ! Silicon Nitride (non-crystalline)

40 write (iout,lll) filneun

41 filnam = subdir//f ilneun

42 call Ijchar (filnam) ! left-justify characters

43 open (iscr, f ile=f ilntun, status= ' old' , readonly, shared, err=ll)

44 c* write (iout,lll) filnam

4546 1 read (iscr, 112, err=12,end=12) string ! skip header

47 c* write (iout,113) string

48 if (string .ne. '=h==') goto 1

49

50 read (iscr, *) mx ! quantity of input data

250
51 c* write (iout.121) mx i within one partition

52 if (mx.lt. 3 .or. mx+2.ne.nx) then

53 write (iout,122)

54 stop

55 end if

56

^7 = 0 I index knots

58 do i=l,mx

88 read (iscr,*,err=13,end=13) x, u

ao c* write (iout,123) x, u

61

•2 if (i.ne.l) then i induce ordering

fl3 if (x .le. XX (k)) then

«4 write (iout,124)

65 Stop

66 end if

67 end if

68 Ti(2) = alog (u(2)) ! logarithm fit to extinction

70

71 if (i.eq.2) then ! usual case for cubic spline fit

72 k = k+1

73 xx(k) = xx(l) ! energy (eV)

74 id(k) =1 ! i-th derivative

''5 c(k,l) = (u(l)-c(l,l)) /(x-xx(l)) ! refractive index

7« c(k.2) = (u(2)-c(l,2)) /(x-xx(l)) ! extinction

77 end if

78

79 k = k+1

80 xx(k) = X ! energy (aV)

81 id(k) = 0 ! i-th derivative

82 c(k,l) = u(l) ! refractive index

83 c(k,2) = u(2) ! extinction

84

85 if (i.eq.mx) then ! usual case for cubic spline fit

88 k = k+1

87 xx(k) = X ! energy (eV)

88 id(k) = 1 ! i-th derivative

89 c(k,l) = (u(l)-c(k-2,l)) /(x-xx(k-2)) ! refractive index

90 c(k,2) = (u(2)-c(k-2,2)) /(x-xx(k-2)) ! extinction

91 end if

9293 end do ! x,u

94 C

95 Xl = XX(1)

96 x2 = xx(k)

97 mx = k ! quantity of data points

98

99 do i=l,2

100 call bindk (xx,c(l ,i) ,id,mx,ko, t,c(l,i), w,iw,info)

101 if (info.ne.O) then

102 write (iout,131) info, i

103 call exit (2)

251
104 end if

105 end do

109 C ======================================================

107 read (iscr,112,err=12,end=12) string ! end of information

108 c* write (iout,113) string

108 if (string .eq. '=h==') then

110 close (iscr)

111 else

112 write (iou.t,114)

113 stop

114 end if

lis lie llnints(6) = .true.

117 iptr = 1 ! initialize

118

119 2 if (wavlen .It. 0.0) then ! lun, wavelength

120 X = -wavlev /wavlen ! eV < nm

121 else

122 X = wavlen ! eV, energy

123 end if

124

125 ' if (x.lt.xi .or. x.gt.x2) then ! point exterior domain

128 write (io'at,132) xl,x2,x

127 stop

128 end if

129

130 do i=i,2

131 u(i) = bvalu (t,c(l,i) ,rax,ko, 0,x, iptr,w) ! (n+ik)

132 v(i) = bvalu (t ,c(l ,i) ,mx,ko, l,x, iptr.w) ! (n+ik)'

133 end do

134

135 c Logarithmic fit to extinction coefficient, k

136 11.(2) = exp (u(2)) ! k = exp (u)

137 v(2) = ii(2)*v(2) 1 k' = k * u'

138

139 dielec = cmplx (u(l), u(.2)) ! (n+ik)

140 dielow = cmplx (v(l), v(2)) ! (n+ik)'

141

142 dielew = dielec*dielew*cmplx (2.0, 0.0) ! e'

143 dielec = dielecKdielec ! e

144

145 return

147

148 11 write (iout,14l)

149 stop

150 12 write (iout,142)

151 stop

152 13 write (iout,143)

153 stop

154

155 111 format (

' Imnt * 6^ filename = ' , a)

156 112 format ( a)

252
157 113 format (

' string = ' , a)

158 114 format (

' oops, error in end-of-info header')

159

160 121 format (

' mx = ' , i5)

161 122 format (

' oops, inconsistency within: mx')

162 123 format ( Ix, i4, 2x, 3fl0.4, lOx, '(j,x,u)' ) 163 124 format (

' oops, ordering violation ')

164 .

165 131 format (

' oops, error in B-spline formation '

166 k I lOx, 'info =', i2

167 k / lOx, ' i =' , i2 ,

' ,

' , 5x, '(I'u, 2'du/dx)' ) 168 132 format (

' oops, evaluation point is exterior domain,'

169 t / ' xl,x2,x ' ' , 3f 10.3)

170

171 141 format (

' oops, error in opening input data file ')

172 142 format (

' oops, error in locating header card, ') 173 143 format (

' oops, error in reading (i,x,u) ') 174

175 end

253
6.5.7 DIEL07.FOR, Ge (crystalline)

1 c

2 c Optical properties of: Germanium (Ge), crystalline.

3 C

4

5 subroutine diel07 (emglei, wavlen, dielec, dielew,

6 ft mipp,iipp, mrpp.rrpp.llpp, ddpp, ! mixture

7 ft mipa,iipa, znrpa,rrpa, Ilpa, ddpa) ! ambient

8

e integer iipa(l), iipp(l)

10 real rrpa(l), rrpp(l), anglei, wavlen

11 integer llpa(l), llpp(l)

12 complex ddpa(l), ddpp(l), dielec, dielew

13

14 include 'iounit.'

15 include 'defnit.'

16 include 'elmnts.'

17 include 'handyy.' ! pi,cccc,wavlev

18

19 character*84 filnam

20 character*4 string ! convenience

21

22 c Note: nx = mx+2, because of: dudx(l), dudx(mx)

23 c in order to include the first derivatives at each, end point

.

24

25 paramstar (nx =93, ko = 4)

26 parameter (nw = nx*(3*ko-2) + ko*ko + ((ko+l)*(ko+2))/2)

27 common / disoo? / t(nx+ko), c(nx,2), xl,x2, mx, iptr

28 common / dieooo / xx(nx), id(nx) , iw(nx), w(nw), u(2), v(2)

2930

31 if (llmnts(7)) goto 2

32

33 c Fetch, information on the dielectric function.

34 c Assume: 1} no partitions

35 c 2) discretization of input data is of either form:

36 c a) energy (eT), refractive index, extinction

37 c b) energy (eV), dielectric function, conductivity

38 .

39 filnam = 'Go' ! Germanium crystalline

40 write (iout,lll) filnam

41 filnam = subdir//f ilnaim

42 call Ijchar (filnam) ! left- justify characters

43 open (iscr, file=filnam, status='old' .readonly, shared, err=ll)

44 c* write (iout.lll) filnam

4546 1 read (iscr, 112, err=12,end=12) string ! skip header

47 c* write (iout,113) string

48 if (string .ne. '=h==') goto 1

49

50 read (iscr, *) mx ! quantity of input data

254
51 c* write (iout. 121) mx , within one partitio

52 if (mx.lt. 3 .or. inx+2.ne,nx) than

53 write (iout, 122)

54 stop

55 end if

56 ^ = 0 j index knots

58 do i=l,mx

59 read (iscr,*,err=13,end=13) x, u

60 c* write (iout, 123) x, u

61

92 if (i.ne.l) then i induce ordering

63 if (x .le. xx(k)) then

64 write (iout, 124)

65 Stop

66 end if

67 end if

68

69 if (i.eq.2) then ! usual case for cubic spline fit

70 k = k+1

71 xx(k) = xx(l) ! energy (eV)

72 id(k) = 1 ! i-th derivative

73 c(k,l) = (u(l)-c(l,l)) /(x-xx(l)) ! refractive index

74 c(k,2) = (u(2)-c(l,2)) /(x-xx(l)) ! extinction

75 end if

76

77 k = k+1

78 XX (k) = X ! energy (eV)

79 id(k) =0 ! i-th derivative

80 c(k,l) = u(l) ! refractive index

81 c(k,2) = u(2) ! extinction

82

83 if (i.eq.mx) then ! usual case for cubic spline fit

84 k = k+1

85 xx(k) = X ! energy (oV)

86 id(k) = 1 ! i-th derivative

87 c(k,l) = (u(l)-c(k-2,l)) /(x-xx(k-2)) ! refractive index

88 c(k,2) = (u(2)-c(k-2,2)) /(x-xx(k-2)) ! extinction

89 end if

90

91 end do ! x,u

92 c : 93 Xl = XX(1)

94 x2 = xx(k)

95 mx = k ! quantity of data points

9697 do i=l,2

98 call bindk (xx,c(l,i) ,id,mx,ko, t,c(l,i), w,iw,info)

99 if (info.ne.O) then

100 write (iout, 131) info, i

101 call exit (2)

102 end if

103 end do

255
104 C ======================================================

105 read (iscr , 112 , err=12 , end=12) string ! end of information

106 c* write (ioiit,113) string

107 if (string .eq. '=h==') then

108 close (iscr)

109 else

110 write (iout,114)

111 stop

112 end if

113

114 llnm.ts(7) = .true.

115 iptr = 1 ! initialize

116 117 2 if (wavlen .It. 0.0) then ! nm, wavelength

118 X = -wavlev /wavlen ! eV < nm

119 else

120 X = wavlen ! eV, energy

121 end if

122

123 if (x.lt.xl .or. x.gt.x2) then ! point exterior domain

124 write (iout,132) xl,x2,x

125 stop

126 end if

127

128 do i=l,2

129 'u.(i) = bvalu (t ,c(l ,i) ,mx,ko, 0,x, iptr.w) ! (n+ik)

130 v(i) = bvalu (t,c(l,i) ,mx,ko, l,x, iptr.w) ! (n+ik)'

131 end do

132

133 dielec = cmplx (u(l), u(2)) ! (n+ik)

134 dielew = cmplx (v(l), v(2)) ! (n+ik)'

136 136 dielew = dielec>«dielew*cmplx (2.0, 0.0) ! e'

137 dielec = dielec*dielec ! e

138

139 return

140 C ======================================================

141

142 11 write (iout,141)

143 stop

144 12 write (iout,142)

145 stop

146 13 write (iout,143)

147 stop

148

149 111 format (

' Imnt ' 7, filename = ' , a)

150 112 format ( a)

151 113 format (

' string = ' , a)

152 114 format (

' oops, error in and-of-info header ')

153

154 121 format (

' mx = ' , i5)

155 122 format (

' oops, inconsistency within: mx')

156 123 format ( Ix, i4, 2x, 3fl0.4, lOx, '(j.x.u)' )

256
157 124 format (

' oops, ordering violation ') 158

159 131 format (

' oops, error in B-spline formation, '

160 t / lOx, 'info =', i2

181 k / lOx, ' i =' , i2 ,

' ,

' , 5x, '(I'u, 2-du/dx) ' ) 182 132 format (

' oops, evaluation point is exterior domain ,' 163 l! / ' xl,x2,x ' ' , 3fl0.3)

164

185 141 format (

' oops, error in opening input data file, ')

166 142 format (

' oops, error in locating header card, ')

187 143 format (

' oops, error in reading (i,x,u) ') 168

169 end

257
6.5.8 DIEL08.FOR, GaAs (crystalline)

1 c —

2 c Optical properties of: Galliiuci Arsenide (GaAs), crystalline.

3 c

4

5 subroutine dielOS (anglei, \7avlen, dielec, dielew,

9 k mippjiipp, mrpp , rrpp , llpp , ddpp^ ! mixture

7 k mipa,iipa, nirpa,rrpa,llpa, ddpa) ! eunbient

s

9 integer iipa(l)j iipp(l)

10 real rrpa(l), rrpp(l), anglei, wavlen

11 integer llpa(l), llpp(l)

12 complex ddpa(i), ddpp(i), dielec, dielew

13

14 include ' iounit .

15 include 'defnit.'

16 include 'elmnts.'

17 include 'handyy.' ! pi,cccc,wavlev

18

19 character*64 filnam

20 character*4 string ! convenience

21

22 c Note: nx = mx+2, because of: dudx(l), dudx(mx)

23 c in order to include the first derivatives at each end point.

24

29 parameter (nx = 153, ko = 4)

26 parameter (nw = nx*(3*ko-2) + ko*ko + ((ko+l)*(ko+2))/2)

27 common / dieooS / t(nx+ko), c(nx,2), xl,x2, mx, iptr

28 common / dieooo / xx(njc), id(nx), iw(nx), w(nw), u(2), v(2)

2930

31 if (llmnts(8)) goto 2

32

33 c Fetch information on the dielectric function.

34 c Assume: 1) no partitions

35 c 2) discretization of input data is of either form:

36 c a) energy (eV), refractive index, extinction

37 c b) energy (eV) , dielectric function, conductivity

38

39 filnam = 'Ga_As' ! Gallium Arsenide

40 write (iout,lll) filnam

41 filnam = subdir//f ilnam

42 call Ijchar (filnasi) ! left-justify characters

43 open (iscr, fil®=filnam, status= 'old' .readonly, shared, err=ll)

44 c* write (iout,ill) filnam

4646 1 read (iscr, 112, err=12,end=12) string ! skip header

47 c* write (iout,113) string

48 if (string .ne. '=h==') goto 1 49

50 read (iscr, *) mx ! quantity of input data

258
51 c* write (iout, 121) mx ! within one partition

52 if (mx.lt. 3 .or. mx+2.ne.nx) then

53 write (iout,122)

54 stop

55 end if

56

57 k = 0 j index knots

58 do i=l,rax

58 read (iscr , * ,err=13,end=13) x, u

60 c* write (iout,123) x, u

0162 if (i.ne.l) then ! induce ordering

63 if (x .le. xx(k)) then

64 write (iout,124)

65 Stop

66 end if

67 end if

68

69 if (i.eq.2) then ! usual case for cubic spline fit

70 k = k+1

71 xx(k) = xx(l) ! energy (eV)

72 id(k) = 1 ! i-th derivative

73 c(k,l) = (u(l)-c(l,l)) /(x-xx(l)) ! refractive index

74 c(k,2) = (u(2)-c(l,2)) /(x-xx(l)) ! extinction

75 end if

76

77 k = k+1

78 xx(k) = X ! energy (eV)

79 id(k) = 0 ! i-th derivative

80 c(k,l)=u(l) ! refractive index

81 c(k,2) = u(2) ! extinction

8283 if (i.eq.mx) then ! usual case for cubic spline fit

84 k = k+1

86 xx(k) = X ! energy (eV)

86 id(k) = 1 ! i-th derivative

87 c(k,l) = (u(l)-c(k-2,l)) /(x-xx(k-2)) ! refractive index

88 c(k,2) = (u(2)-c(k-2,2)) /(x-xx(k-2)) ! extinction

89 end if

90

91 end do ! x,u

92 c

93 Xl = XX(1)

94 x2 = xx(k)

95 mx = k ! quantity of data points

9697 do i=l,2

98 call bindk (xx,c(l,i) ,id,mx,ko, t,c(l,i), w.iw.info)

99 if (info.ne.O) then

100 write (iout,13l) info, i

101 call exit (2)

102 end if

108 end do

259
105 read (i3cr,112,err=12,end=12) string ! end of information

106 c* write (iout,113) string

107 if (string .oq. >=h==') then

108 close (iscr)

109 else

110 write (ioiit,114)

111 stop

112 end if

113

114 llinnts(8) = .true.

115 iptr = 1 ! initialize

lie 117 2 if (wavlen .It. 0.0) then ! nm, wavelength

118 X = -wavlev /wavlen ! aV < nm

119 else

120 X = wavlen ! oV, energy

121 end if

122 123 if (x.lt.xl .or. x.gt.x2) then 1 point exterior domain

124 write (iout ,132) xl ,x2,x

125 stop

126 end if

127

128 do i=i,2

129 TiCi) = bvalu (t,c(l,i) ,mx,ko, 0,x, iptr,w) ! (n+ik)

130 v(i) = bvalu (t ,c(l ji) ,mx,ko , l,x, iptr.w) ! (n+ik)'

131 end do

132

133 dielec = cmplx (u(l), u(2)) ! (n+ik)

134 dielaw = cmplx (v(l), v(2)) ! (n+ik)'

135

136 dieiew = dielec*dieleH*cmplx (2.0, 0.0) ! e'

137 dielec = dielec*dielec ! e

138

130 return

140 C = = = = = = = = ==: ====:= = = = = = = = = ==== = =: ==i== = == ==== == = = = =: = = = = ===

141

142 11 write (iout, 141)

143 stop

144 12 write (iout, 142)

146 stop

146 13 write (iout, 143)

147 stop

148

149 111 format (

' Imnt ' 8, filename = ' , a)

160 112 format ( a)

151 113 format (

' string = ', a4 ) 152 114 format (

' oops, error in end-of-info header')

153

154 121 format (

' mx = ' , iB)

155 122 format (

' oops, inconsistency within: mx')

156 123 format ( Ix, i4, 2x, 3fl0.4, lOx, '(j,x,u)' )

260
157 124 format (

' oops. ordering violation ' ) 158

159 131 format (

' oops. error in B-spline formation, '

ISO t / lOx, 'info =' , i2

161 t / lOx, ' i =' , i2 ,

' , ' , 5x, 'd'u, 2'dii/dx)

162 132 format (

' oops

,

evaluation point is exterior domain,

163 t / xl,x2,x • ' , 3f 10.3)

164

165 141 format (

' oops, error in opening input data file ' ) 166 142 format (

' oops. error in locating header card, ' ) 167 143 format (

' oops. error in reading (i,x,u) ' ) 168

169 end

261
6.5.9 DIEL09.FOR, AUGai_^As (crystalline)

1 c

2 c Optical properties of: Alumintun Gallium Arsenide

3 c Al(x) Ga(l-x) As

4

5 c Fetch information on the dielectric function.

6 c Here, we assume that:

7 c 1) partitions involve distinct composition/stoichiometry

8 c 2) each partition has its OWN discretization (energy)

9 c 3) discratization of the input data file is of either form:

10 c i) energy (eV), refractive index, extinction coeff

.

11 c ii) energy (eV), dielectric function, conductivity

12 C

13

14 subroutine diel09 (anglei, wavlen, dielec, dielew,

15 & mipp.iipp, mrpp,rrpp,llpp, ddpp, ! mixture

16 b mipa,iipa, mrpa,rrpa,llpa, ddpa) ! ambient

17

18 integer iipa(l), iipp(l)

19 real rrpa(l), rrpp(l), anglei, wavlen

20 integer llpa(l), llpp(l)

21 complex ddpa(l), ddpp(l), dielsc, dielew

22

23 include 'iounit.' • 24 include 'defnit.'

25 include 'elmnts.'

26 include 'handyy.' ! pi , cccc , wavlev

27

28 character*64 filnam

29 character*4 string ! convenience

30 integer kkpp(nparms)

31 complex dielc(2), dielw(2)

32

33 c Let: MI be the maximum number of grid points in any profile, u(x)

.

34 c If w@ then add-include the first derivatives at the end points,

35 c dudx(l) & dudx(mx), we need spline fit: nx=mx+2 grid points.

3637 parameter (ny = 9 ) ! number of distinct stoichiometrics

38 G parameter (mx = 47) ! max number of points in any profile

39 parameter (nx =49, ko = 4)

40 parameter (nw = nx*(3*ko-2) + ko*ko + ( (ko+l)*(ko+2) )/2)

41

42 common / diaooQ / t(nx+ko,ny), c(nx,2,ny),

43 & xl,x2, mx, iptrxCny), mxsave(ny),

44 k yy(ny), yl,y2, my, iptry

45 common / dieooo / xx(nx), id(nx), iw(nx), w(nw), u(4) , v(2)

4647

48 if (llmnts(9)) goto 2 ! info already in arrays

49

50 filnam = 'Al_Ga_As' ! Aluminum Gallium Arsenide

262
51 write (iout.lll) filnam

52 iilneun = subdir/ /filnam

53 call Ijchar (filnam) ! left-justify characters

54 open (iscr, file=filnam, status='old' .readonly, shared, err=ll)

55 c write (iout,lll) filnam

56 1 read (iscr , 112 , err=12 , end=12) string ! skip header

57 c write (iout,113) string

58 il (string .ne. '=h==') goto 1

59 c

80

61 read (iscr, *) my ! quantity of partitions

62 c write (iout,121) my ! distinct compositions

63 if (my.lt.l .or. my.ne.ny) then ! involving Aluminum

64 write (iout,122) my, ny

65 stop

66 end if

67 read (iscr, 112) string ! skip delimiter

68

69 do ±7=1, my ! scan partitions , stoichiometry

70 read (iscr, *) mx, y, jy ! quantity of input data

71 c write (iout,131) mx, y, jy ! within one partition

72

73 if (mx.lt. 3 .or.

74 k y. It. 0.0 .or. y.gt.1.0 .or. jy.ne.iy) then

75 write (iout,132) mx,y,jy, nx,iy

76 stop

77 end if

78 if (iy.ne.l) then ! verify ordering

79 if (y .le. yy(iy-l)) then ! of monotonically

80 write (iout,133) iy, y ! increasing

81. stop ! stoichiometry

82 end if

83 end if

84

85 yy(iy) = y ' retain composition ' Al

86 mx8ave(iy) = mx ! retain number of points

87 k = 0 ! index knots

88 do i=l,mx ! scan energy (eV)

89 read (iscr , * , err=lB,end=15) x, u

90 c write (iout,134) x, u

91

92 if (i.ne.l) then ! verify ordering

93 if (x .le. XX (k)) then ! of monotonically

94 write (iout,135) ! increasing energy

95 stop

96 end if

97 end if

98 if (i.eq.2) then ! usual cubic spline

99 k = k+1 ! update index label

100 id(k) = 1 derivative

101 xx(k) = xx(l) ! energy (eV)

102 h = x-xx(l) ! energy increment

103 c(k,l,iy) = (u(3)-c(l,l,iy)) /h ! refractive index'

263
104 c(k,2,iy) = (ii(4)-c(l , 2 , iy) ) /h ! extinction coeff

105 end if

106

107 k = k+1 ! update index label

108 id(k) = 0 ! i-th derivative

109 . xx(k) = X ! energy (eV)

110 c(k,l,iy) = u(3) ! refractive index

111 c(k,2,iy) = u(4) 1 extinction coeff

112

113 if (i.eq.mx) then ! usual cubic spline

114 k = k+1 ! update index label

115 id(k) =1 ! i-th derivative

116 xx(k) = X ! energy (eV)

117 h = x-xx(k-2) ! energy increment

118 c(k,l,iy) = (u(3)-c(k-2,l,iy)) /h ! refractive index'

lie c(k,2,iy) = (u(4)-c(k-2,2,iy)) /h ! extinction coeff

120 end if

121 end do ! x,u

122 C - 123 xl = xx(l) ! minimum

124 x2 = xx(k) ! maximum

125 mx = k ! number of points spline fitted

126 do i=l,2

127 call bindk (xx, c(l,i,iy), id, mx, ko,

128 k t(l,iy), c(l,i,iy), w,iw,info)

129 if (info.ne.O) then

130 write (iout,151) info, i, iy

131 stop

132 end if

133 end do

134

135 read (iscr,112) string ! skip delimiter

136 end do ! stoichiometry

137 C

138 read (iscr,112,err=13,end=13) string ! end of info

139 c write (iout,113) string

140 if (string ,ne. '=h==') goto 14

141

142 close (iscr)

143 llmnts(9) - .srue. ! info in arrays

144 do iy=l,my

145 iptrx(iy) = 1 ! initialize

146 end do

147 iptry =1

148 yl = yy( 1) ! minimum, convenience

149 y2 = yy(my) ! maximum

150 C == = = = = = ==== === :;: = = = = = = == = =: = = = = = = = = = = = =: = = = = = = ====== = ==== = ===: ======

151

152 2 if (wavlen .It, 0.0) then ! nm, wavelength

153 X = -wavlev /wavlen ! eV < nm

154 else

155 X = wavlen ! eV, energy

156 end if

264
157 xi (x.lt.xl .or. x.gt.x2) then ! point exterior domain

158 write (ioiit.iei) xl, x2, x

159 stop

160 end if

161

162 c . 163 if (mipp.eq.O .or.

164 ft inrpp.eq.O ) then ! consistency test

165 write (iout,162)

166 stop

167 end if

168 k = 0

169 do i=l,mipp ! discern pointer parameter

170 if (iipp(i) .eq. 9) then ! naive identification-recognition

171 k = k+1 ! index local parameters

172 kkpp(k) = i

173 end if

174 end do

175 if (k.ne.l .or. k.gt.mrpp) then ! precaution, verification

176 write (iou.t,163)

177 stop

178 end if

179 180 i = kkpp(k) ! locate composition index

181 y = rrpp(i) ! specify composition ° Al

182 183 if (y.lt.yl .or. v.gt.y2) then ! point exterior domain

184 write (iout,164) yl, y2, y

185 stop

186 end if

187

188 j = 1 ! need one composition, default

189 iy = iptry

190 if (y .eq. yy(l)) then ! lower boundary

191 iy = 1 192 goto B

193 else if (y .eq. yy(my)) then ! upper boundary

194 iy = my

195 goto 5

196 end if

197 3 if (y .eq. yy(iy)) goto 5 ! grid point

198 if (y .It, yy(iy)) then ! grid point is high

199 iy = iy-1

200 goto 3

201 end if

202 4 if (y .gt. yy(iy)) then ! grid point is low

203 iy = iy+1

204 if (y .It. yy(iy)) then ! success

205 j = 2 ! need two compositions

206 else

207 goto 3

208 end if

209 end if

265
210

211 5 iptry = iy \ yy(iy-l) < y <= yy(iy)

212 213 c Necessary to evaluate: de/dy ' de/d stoichiometry

214

215 iys = -1 ! step down

216 if (j.eq.l .and. iy.eq.l) iys=l ! step up, lower bdry

217 do jj=l,2

218 it (jj.eq,2) iy=iy+iys ! step down/up

219

220 mx = mxsave(iy)

221

222 do i=l,2

223 u(i) = bvalu (t(l,iy) ,c(l,i,iy) ,mx,ko, 0,x, iptrx(iy),w)

224 v(i) = bvalu (t(l,iy),c(l,i,iy),mx,ko, l.x, iptrx(iy),w)

225 end do

226 227 dielec = cmplx (u(l), u(2)) ! (n+ik)

228 dielew = cmplx (v(l), v(2)) ! (n+ik)

229 dielen = dielec>*<dielew*cmplx (2.0, 0.0) ! e'

230 dielec = dielec*dielec ! e

231 dielc(jj) = dielec

232 dielw(jj) = dielew

233 end do

234 iy = iy-iys ! reset

235 diff = yy(iy) - yy(iy+iys) ! > 0, usually

236 i = kkpp(k) ! locate composition

237 ddpp(i) = (dielc(l)-dielc(2)) /cmplx (diff ,0.0) ! de/dy

238

239 if (j.eq.l) then ! grid point

240 dielec = dielc(l)

241 dielew = dielw(l)

242 else ! interpolate, j=2

243 frac = (y-yy(iy-l)) /diff ! above

244 dielc(l) = dielc(l)*cmplx (frac, 0.0)

246 dielw(l) = dielw(l)*cmplx (frac, 0.0)

246 frac = (yy(iy)-y) /diff ! below

247 dielc(2) = dielc(2)*cmplx (frac, 0.0)

248 dielw(2) = dielw(2)*cmplx (frac, 0.0)

249 ' dielec = dielc(l)+dielc(2) ! linear interpolation

250 dielew = dielw(l)+dielw(2) ! between compositions

251 end if . 252 253 return

254 C ======================================================

255 256 11 write (iout,llB) ! opening

257 stop

258 12 write (iout,116) ! end of header

259 stop

260 13 write (iout,117) ! end of info

261 stop

262 14 write (iout,118) ! end of info ' improper

266
263 stop

264 15 write (iout,119) ! (i,x,u)

265 stop

266

267 111 format (

' Imnt ' 9, filename = ' , a)

268 112 format ( a)

269 113 format (

' string: a)

270

271 115 format (

' oops, unable to open: input data file ') 272 116 format ( ' oops, unable to find: delimiter of header ') 273 117 format (

» oops, unable to find: delimiter of End-of -Inf o

»

)

274 118 format (

' oops, improper delimiting string: End-of-Inf o')

275 119 format (

' oops, unable to read: (i,x,u) ')

276 277 121 format (

' my = ' , i5)

278 122 format (

' oops, inconsistency, my = ' , i5

279 t /' ny = ' , i5)

280

281 131 format ( Ix, i4, 2x, flO.4, 2x, i4, lOx, '(mx, y, iy) '

)

282 132 format (

' oops, inconsistency among the values: mx, y, iy'

283 k / 7x, i4, 2x, flO.4, 2x, i4

284 ft / 7x, i4, 14x, i4)

285 133 format (

* oops, violation in ordering: y'

286 t /' iy = ' , i4

287 k /' y = ' . f 10.4)

288 134 format ( Ix, i4, 2x, 3fl0.4, lOx, '(j,x,u)' ) 289 135 format (

' oops, violation in ordering: x')

290

291 151 format (

' oops, error in construction of the B-splines '

292 k I lOx, 'info =', i2

293 k / lOx, ' i =' , i2, ' , ' , 4x, '(I'u, 2''du/dx)

294 I; / lOx, ' iy =' , i2, ' ,

' , 4x, '(amount of Aluminum)')

295

296 161 format (' oops, evaluation point is exterior domain, (DIEL09)'

297 k /' (xl, x2, x) ' ', 3(2x, flO.4))

298 162 format (' oops, need to pass some parameter, so as to specify '

299 ic /' ... the composition of Aluminum')

300 163 format (' oops, need a pointer from within: iipp'

301 1; /' to discern the pariuneter in: rrpp')

302 164 format (' oops, evaluation point is exterior domain, (DIEL09)'

303 k /' (yl, y2, y) ' ' , 3(2x, flO.4))

304

305 end

1

267
6.5.10 DIELIO.FOR, Oxides of GaAs

1 c

2 c Optical properties of: Gallium Arsenide Oxide.

3 c There are several oxide stoichiometries

,

4 c These include: Ga(2)0(3), GaAsO(4), As(2)0(3).

6 c The order of preference is from (most to least), respectively,

e c Reference: D.E. Aspnes, G.P. Schwartz, G.J. Gualtieri,

7 c A. A. Studna, and B. Schwartz,

8 c Journal Electrochemical Society,

9 c Volume 128, Number 3, pp. 590-B97, (1981).

10 c

11

12 subroutine diellO (anglei, wavlen, dislec, dielew,

13 k mipp,iipp, rarpp , rrpp , llpp , ddpp, ! mixture

14 ft mipa,iipa, mrpa,rrpa,llpa, ddpa) ! ambient

15

16 integer iipa(l), iipp(l)

17 real rrpa(i), rrpp(l), anglei, wavlen

18 integer llpa(l), llpp(l)

19 complex ddpa(l), ddpp(l), dielec, dielew

20

21 include ' iounit .

22 include 'defnit.'

23 include 'elmnts.'

24 include 'handyy.' ! pi , cccc .wavlev

2526 character*64 filnam

27

28 real eg(4), eo(4)

29 data eg / 0.075, B.B, 7.5, 16.0/ I poles. Note: 5.5

30 data eo / 0.35, 1.62, 5.5, 18.8 /

31 data xi , x2 / 1 . 5 , 4 . 5 / ! domain

32

33 if ( .not .llmnts(lO)) then ! info already in arrays

34 llmnts(lO) = .true. ! info in arrays

35 filnaun = ' Ga_As_0xide ' ! Gallium Arsenide Oxide

36 writ® (iout.lll) filnam

37 end if

38 if (mipp.ne.O .or. mrpp.ne.O) then ! no parameters necessary

39 write (iout,112)

40 stop

41 end if

4243 if (wavlen .It. 0.0) then ! nm, wavelength

44 X = -wavlev /wavlen ! eV < nm

45 else

46 X = wavlen ! e?, energy

47 end if

48 if (x.lt.xl .or. x.gt.x2) then ! point exterior domain

49 writ9 (iout,121) xl, x2, x

50 stop

268
51 end if

52

53 c Evaluate jmalytic expression for the dielectric function.

54

55 diel = 0.0

56 diew = 0.0

57 do i=l,4

58 top = eg(i)*eo(i)

59 bot = eg(i)**2 - x**2

60 rat = top/bot

61 diel = diel + rat ! e

62 diew = diew + rat*(x/bot)*2 . 0 ! a'

63 end do

64

65 diolec = cmplx (1.0+diel, 0.0) ! e

66 dielew = cmplx ( diew, 0.0) ! e'

67

68 return

69

70 111 format (

' Imnt ' 10, fileniune = ' , a)

71 112 format (' oops, no pareuneters necessary')

72 121 format (' oops, evaluation point is exterior domain, (DIELIO)'

73 k /' (xl, x2, x) ' 3(2x, flO.4))

74 end

269
6.5.11

1 c

2 C

3 C

4 C

5 C

6 C

7 C

8 C

8 C*

10

111213

14

15 . 1617

18

19

20

21222324

25

2627

28

29

30 C

3132

33

34

353637

38

39

40

41 C

42

4344

454647

48

49

50

DIELll.FOR, As (amorphous)

Dielectric function of amorphous arsenic.

Reference

"Optical Properties of Amorphous Arsenic",

G.N. Greaves, E.A.Davis, and J.Bordas,

Philosophical Magazine, Vol 34, No. 2, pp. 26B-290, 1976.

Specifically, see page 278.

subroutine dielll (dielec, dielew, energy)

subroutine dielll (anglei, wavlen, dielec, dielew,

& mipp.iipp, mrpp , rrpp , llpp , ddpp, ! mixture

t ' mipa,iipa, mrpa,rrpa,llpa, ddpa) ! ambient

integer iipa(l)

,

iipp(l)

real rrpa(l) rrpp(l), anglei, wavlen

integer llpa(l). llpp(l)

complex ddpa(l). ddpp(l), dielec, dielew

real energy

complex plasma

include ' iounit .

include 'defnit . include ' elmnts .

include ' handyy .! pi, cccc, wavlev

data hbarwo / 3.9 /

data hbarwp / 18.0 /

data hbtaui / 5.0 /

! natural freq, interband transition, (eV)

.

! plasma freq, (eV)

.

! damping, (e7)

.

if ( .not .llmnts(ll)) then

llmnts(ll) = .true,

write (iout,ll)

end if

if (wavlen .It. 0.0) then 1 nm, wavelength

energy = - wavlev/wavlen ! eV < run else

energy = wavlen ! eV

end if

plasma = cmplx (hbarwp**2, 0.0)

tl = (hbarwo-energy)*(hbarwo+energy)

t2 = energy*hbtaui

dielec = cmplx (tl, -t2) ! denominator

tip = energy* 2.0 ! d/d( energy)

t2p = hbtaui

270
dielew = (plasma/dielec)*(cmplx (tip, t2p) /dielec)

dielec = cmplx (1.0, 0.0) + plasma/dieloc

return

11 format (

' Imnt ' 11, Eunorphous arsenic')

end

271
6.5.12 DIEL12.FOR, GaP

1 c

2 c Optical properties of: Gallium Phosphide (GaP), crystalline.

3 c

4

5 subroutine diell2 (anglei, wavlen, dielec, dielew,

6 ft mipp.iipp, mrpp.rrpp.llpp, ddpp, ! mixture

7 ft mipa.iipa, mrpa,rrpa,llpa, ddpa) ! ambient

8

9 integer iipa(l), iipp(l)

10 real rrpa(l), rrpp(l), anglei, wavlen

11 integer llpa(l), llpp(l)

12 complex ddpa(l), ddpp(l), dielec, dielew

13

14 include ' iounit .

15 include 'defnit.'

16 include 'elmnts.'

17 include 'handyy.' ! pi , cccc ,wavlev

18

19 character>x64 filnam

20 character*4 string ! convenience

21

22 c Note: nx = mx+2, because of: dudx(l), dudx(mx)

23 c in order to include the first derivatives at each end point.

24 c Let : nx > mx+2

.

25

26 parameter (nx = 158, ko = 4)

27 parameter (nw = nx*(3*ko-2) + ko*ko + ( (ko+1) *(ko+2) )/2)

28 common / dieol2 / t(nx+ko), c(nx,2), xl,x2, mx, iptr

29 common / dieooo / xx(nx), id(nx) , iw(nx), w(nw), u(2), v(2)

30

31

32 if (llmnts(12)) goto 2

33

34 c Fetch information on the dielectric function.

35 c Assume: 1) no partitions

36 c 2) discretization of input data is of either form:

37 c a) energy (eV), refractive index, extinction

38 c b) energy (eV), dielectric function, conductivity

39

40 filnam = 'Ga_P' ! Gallium Phosphide

41 write (iout,lll) filnam

42 filnsun = subdir//filnam

43 call Ijchar (filnam) ! left-justify characters

44 open (iscr, file=filnam, status= 'old' .readonly, shared, err=ll)

45 c* write (iout.lll) filneun

4647 1 read (iscr, 112, err=12,end=12) string ! skip header

48 c* write (iout,113) string

49 if (string .ne. '=h==') goto 1

50

272
51 read (iscr, *) mx i quantity of input data

52 c* write (iout. 121) mx i within one partition

53 if (mx.lt. 3 .or. mx+2.gt.nx) then

54 write (iout,122)

55 Stop

56 end if

57

^8 It = 0 I index knots

59 do i=l,mx

ao read (iscr,*,err=13,end=13) x, u

61 c* write (iout,123) x, u

62" if (i.ne.l) then f induce ordering

84 if (x .le. xx(k)) then

65 write (iout,i24)

66 stop

67 end if

68 end if

69

70 if (i.eq.2) then ! usual case for cubic spline fit

71 k = k+1

72 xx(k) = xx(l) ! energy (eV)

73 id(k) = 1 ! i-th derivative

74 c(k,l) = (u(l)-c(l,l)) /(x-xx(l)) ! refractive index

75 c(k,2) = (u(2)-c(l,2)) /(x-xx(l)) ! extinction

76 end if

77

78 k = k+1

79 XX (k) = X I energy (eV)

80 id(k) =0 ! i-th derivative

81 c(k,l) = u(l) ! refractive index

82 c(k,2) = u(2) ! extinction

83

84 if (i.eq.mx) then ! usual case for cubic spline fit

86 k = k+1

86 xx(k) = X i energy (eV)

87 id(k) = 1 ! i-th derivative

88 c(k,l) = (u(l)-c(k-2,l)) /(x-xx(k-2)) ! refractive index

89 c(k,2) = (u(2)-c(k-2,2)) /(x-xx(k-2)) ! extinction

90 end if

91

92 end do ! x,u

93 c

94 Xl - XX(1)

95 x2 = xx(k)

96 mx = k ! quantity of data points

97

98 do i=l,2

99 call bindk (xx,c(l,i) ,id,mx,ko, t,c(l,i), w.iw.info)

100 if (info.ne.O) then

101 write (iout.lSl) info, i

102 call exit (2)

103 end if

273
104 end do

105 c = = = = = = = = = = = = = = = = = === = == = = = === = = ===== = = = ==: ====== = = = = ===

106 read (iscr,112,err=12,end=12) string ! end of information

107 c* write (iout,113) string

108 if (string .eq. '=h.==') then

109 close (iscr)

110 else

111 write (iout,114)

112 stop

113 end if

114

lis llinnts(12) = .true.

116 iptr = 1 ! initialize

117

118 2 if (wavlen .It. 0.0) then ! nm, wavelength

119 X = -wavlev /wavlen ! eV < nm

120 else

121 X = wavlen ! eV, energy

122 end if

123 124 if (x.lt.xl .or. x.gt.x2) then ! point exterior domain

125 write (iout,132) xl,x2,x

126 stop

127 end if

128

129 do i=l,2

130 ii(i) = bvalu (tsc(l,i) ,mx,ko, 0,x, iptr^w) ! (n+ik)

131 v(i) = bvalu (t jc(l ,i) ,mx,ko , l,x, iptr,w) ! (n+ik)'

132 end do

133 134 dielec = cmplx (u(l), u(2)) f (n+ik)

135 dielew = cmplx (v(l), v(2)) ! (n+ik)»

136 137 dielew = dielec*dielow«cmplx (2.0, 0.0) ! e'

138 dielec = dielec*dielec ! e

139

140 return

141 C ======================================================

142 143 11 write (iout,14l)

144 stop

145 12 write (iout,142)

146 stop

147 13 write (iout,143)

148 stop

149

150 111 format (

' Imnt ' 12, filename = a)

151 112 format (a)

152 113 format (

' string = ' , a)

153 114 format (

' oops, error in end-of-info header')

154

155 121 format (

' mx = ' , iB)

156 122 format (

' oops, inconsistency within: mx')

274
157 123 format ( Ix, i4, 2x, 3110.4, lOx, '(j.x.u)' ) 158 124 format (

' oops, ordering violation ' ) 159

160 131 format (

' oops, error in B-spline formation, '

161 ft / lOx, 'info =', i2

162 ft / lOx, • i =', i2 , 5x, '(I'll, 2'du/dx)' ) 163 132 format (

' oops, evaluation point is exterior domain,'

164 ft / ' xl,x2,x ' ', 3fl0.3)

165

166 141 format (

' oops, error in opening input data file ' ) 167 142 format (

' oops, error in locating header card, ' ) 168 143 format (

' oops, error in reading (i,x,u) ' ) 169 170 end

275
6.5.13 DIEL13.FOR, GaSb

1 C

2 c Optical properties of: Gallium Antimonide (GaSb), crystalline.

3 c

4

5 subroutine diellS (anglei, wavlen, dielec, dielew,

6 k mipp.iippj mrpp , rrpp , llpp , ddpp, ! mixture

7 & mipa.iipa, mrpa,rrpR,llpa, ddpa) 1 ambient

8

9 integer iipa(l), iipp(l)

10 real r2rpa(l), rrppd), anglei, wavlen

11 integer llpa(l), llpp(l)

12 complex ddpa(l), ddpp(l), dielec, dielew

13

14 include 'iounit.'

IB include 'dsfnit.'

16 include 'elimts,'

17 include 'handyy.* ! pi.cccc.wavlev

18

19 character*64: filnam

20 ch.aracter*4 string ! convunience

21

22 c Note: nx = mx+2, because of: dudx(l), dudx(mx)

23 c in order to include the first derivatives at each, end point.

24 c Let : nx > mx+2

.

25

26 parameter (nx =48, ko = 4)

27 parameter (nw = nx*(3*ko-2) + ko*ko + ( (ko+l)*(ko+2))/2)

28 common / dieolS / t(nx+ko), c(nx,2), xl,x2, mx, iptr

29 common / dieooo / xx(nx), id(nx) , iw(nx), w(nw), u(4) , v(2)

30

31

32 if (llmnts(13)) goto 2

33

34 c Fetch information on the dielectric function.

35 c Assume: 1) no partitions

36 c 2) discretization of input data is of either form:

37 c a) energy (eV), refractive index, extinction

38 c b) energy (eV), dielectric function, conductivity

3940 filnam = 'Ga_Sb' ! Gallium Antimonide

41 write (iout.lll) filnam

42 filnam = subdir/ /filnam

43 call Ijchar (filnam) ! left-justify characters

44 open (iscr, f ile=f ilnara, status='old' , readonly, shared, ©rr=ll)

45 c* write (iout,lll) filnem

46

47 1 read (iscr ,112, err=12,©nd=12) string ! skip header

48 c* write (iout,113) string

49 if (string .ne. '=h==') goto 1

so

276
" read (iscr, *) mx ! quantity of input data

52 c* write (iout,121) mx ! within one partition

53 if (mx.lt. 3 .or. mx+2.gt.nx) then

54 write (iout,122)

55 stop

56 end if

57

^» Is. = 0 ! index knots

59 do i=l,rax

60 read (iscr,*,err=13,end=13) x, u

61 c* write (iout,123) x, u

62

63 if (i.ne.l) then ! induce ordering

64 if (x .le. xx(k)) then

65 write (iout,124)

66 stop

67 end if

68 end if

69

70 if (i.eq.2) then ! usual case for cubic spline fit

71 k = k+1

72 xx(k) = xx(l) ! energy (eV)

73 id(k) = 1 ! i-th derivative

74 c(k,l) = (u(3)-c(l,l)) /(x-xx(l)) ! refractive index

75 c(k,2) = (u(4)-c(l,2)) /(x-xx(l)) ! extinction

76 end if

77

78 k = k+1

79 xx(k) = X ! energy (eV)

80 id(k) =0 ! i-th derivative

81 c(k,l) = u(3) ! refractive index

82 c(k,2) = u(4) ! extinction

83

84 if (i.eq.mx) then ! usual case for cubic spline fit

85 k = k+1

86 xx(k) = X ! energy (eV)

87 id(k) =1 ! i-th derivative

88 c(k,l) = (u(3)-c(k-2,l)) /(x-xx(k-2)) ! refractive index

89 c(k,2) = (u(4)-c(k-2,2)) /(x-xx(k-2)) ! extinction

90 end if

91

92 end do ! x,u

93 c

94 xl = xx(l)

95 x2 = xx(k)

96 mx = k ! quantity of data points

97

98 do i=l,2

99 call bindk (xx,c(l,i) ,id,mx,ko, t,c(l,i), w.iw.info)

100 if (info.ne.O) then

101 write (iout,13l) info, i

102 call exit (2)

103 end if

277
104 end do

108 read (iscr,112,err=12,end=12) string ! end of information

107 c* write (ioiit,113) string

108 if (string .eq. '=h.==') then

100 close (iscr)

110 else

111 write (iout,114)

112 stop

113 end if

114

115 llinnts(13) = .true.

116 iptr = 1 ! initialize

117

118 2 if (wavlen .It. 0.0) then ! nm, wavelength

119 X = -wavlev /wavlen ! eV < nm

120 else

121 X = wavlen ! eV, energy

122 end if

123

124 if (x.lt.xl .or. x.gt.x2) then ! point exterior domain

125 write (iout,132) xl,x2,x

126 stop , 127 end if

128

120 do i=l,2

130 ii(i) = bvalu (t,c(l,i) ,mx,ko, 0,x, iptr.w) ! (n+ik)

131 v(i) = bvalu (t,c(l,i) ,mx,ko, l,x, ij5tr,w) ! (n+ik)'

132 end do

133 134 dielec = cmplx (u(l), u(2)) ! (n+ik)

135 dielew = cmplx (v(l), v(2)) ! (n+ik)'

136 137 dielew = dielec*dielew*cmplx (2.0, 0.0) ! e'

138 dielec = dielec^dielec I e

130 140 return

141 C = === = =: = = = = = = ==== == =: = ==== = = = = = = = === = === = ====: = ==== = = = ===

142

143 11 write (iout,i41)

144 stop

145 12 write (iout,142)

146 stop

147 13 writ© (iout,143)

148 stop

140

150 111 format (

' Imnt ''13, filensime = ' , a)

151 112 format ( a)

152 113 format (

' string = ' , a)

153 114 format (

' oops, error in end-of-info header')

154

155 121 format (

' mx = ' , i5)

156 122 format (

' oops, inconsistency within: mx')

278
157 123 format ( Ix, i4, 2x, 3fl0.4, lOx, '(j.x.u)' ) 158 124 format (

' oops, ordering violation ' ) 159

160 131 format (

' oops, error in B-spline formation, '

161 k / lOx, 'info =' , i2

162 t I lOx, ' i =' , i2 ,

' ,

' , 5x, '(I'u, 2'du/dx)' ) 163 132 format (

' oops, evaluation point is exterior domain,'

164 ft / ' xl,x2,x ' ' , 3f 10.3)

165

166 141 format (

' oops, error in opening input data file ' ) 187 142 format (

' oops, error in locating header card, ' ) 168 143 format (

' oops, error in reading (i,x,u) ' ) 169

170 end

279
6.5.14 DIEL14.FOR, InAs

1 C

2 c Optical properties of: Indium Arsenide (InAs), crystalline.

3 c

4

5 subroutine diell4 (anglei, wavlen, dielec, dielew,

6 k mipp.iipp, mrpp,rrpp,llpp, ddpp, ! mixture

7 ft mipa.iipa, mrpa.rrpa.llpa, ddpa) ! ambient

8

9 integer iipa(l), iipp(l)

10 real rrpa(l), rrpp(l), anglei, wavlen

11 integer llpa(l), llpp(l)

12 complex ddpa(i), ddpp(l), dielec, dielew

13 . * , 14 include 'iounit,'

15 include 'defnit.'

16 include 'elmnts.'

17 include 'handyy.' ! pi,cccc,wavlev

18

19 character*64 filneim

20 character>«4 string ! convenience

21

22 c Note: nx = mx+2, because of: dudx(l), dudx(mx)

23 c in order to include the first derivatives at each, end point.

24 c Let: nx > mx+2.

2526 pariuneter (nx =48, ko = 4)

27 parameter (nw = nx*(3*ko-2) + ko*ko + ((ko+l)*(ko+2))/2)

28 common / dieol4 / t(nx+ko), c(nx,2), xl,x2, mx, iptr

29 common / dieooo / xx(nx), id(nx) , iw(nx), w(nw), u(4) , v(2)

30

31

32 if (llmnts(14)) goto 2

33

34 c Fetch information on the dielectric function.

35 c Assume: 1) no partitions

36 c 2} discretization of input data is of either form:

37 c a) energy (eV), refractive index, extinction

38 c b) energy (eV), dielectric function, conductivity

3940 filnam = 'In_As' ! Indium Arsenide

41 write (iout.lil) filnam

42 filnam = subdir//f ilnam

43 call Ijchar (filneun) ! left-justify characters

44 open (iscr, file=filnam, status= ' old' , readonly, shared, err=ll)

45 c* write (iout,lll) filnam

4647 1 read (iscr, 112, err=i2,end=12) string ! skip header

48 c* write (iout,113) string

49 if (string .ne. '=h==') goto 1

50

280
" "^'^ (iscr, *) mx i quantity of input data

52 c* write (iout.121) mx ! within one partition

53 if (rax. It. 3 .or. mx+2.gt.nx) then

54 write (iout,122)

55 Stop

56 end if

57

5^ ^ = 0 I index knots

59 do i=l,mx

ao read (iscr,*,err=13,end=13) x, u

61 c* write (iout,123) x, u

62

83 il (i.ne.l) then ! induce ordering

84 if (x .le. xx(k)) then

85 write (iout,124)

66 stop

67 end if

68 end if

69

70 if (i.eq.2) then ! usual case for cubic spline fit

71 k = k+1

72 xx(k) = xx(l) ! energy (eV)

73 id(k) = 1 ! i-th derivative

74 c(k.l) = (u(3)-c(l,l)) /(x-xx(l)) ! refractive index

75 c(k,2) = (u(4)-c(l,2)) /(x-xx(l)) ! extinction

76 end if

77

78 k = k+1

79 xx(k) = X ! energy (e?)

80 id(k) =0 ! i-th derivative

81 c(k,l) = u(3) ! refractive index

82 c(k,2) = u(4) ! extinction

83

84 if (i.eq.mx) then ! usual case for cubic spline fit

8B k = k+1

86 xx(k) = X ! energy (eV)

87 id(k) = 1 ! i-th derivative

88 c(k,l) = (u(3)-c(k-2,l)) /(x-xx(k-2)) ! refractive index

89 c(k,2) = (u(4)-c(k-2,2)) /(x-xx(k-2)) ! extinction

90 end if

91

92 end do ! x,u

93 c

94 Xl = XX(1)

95 x2 = xx(k)

96 ' mx = k ! quantity of data points

97

98 do i=l,2

99 call bindk (xx,c(l,i) ,id,mx,ko, t,c(l,i), w.iw.info)

100 if (info.ne.O) then

101 write (iout,131) info, i

102 call exit (2)

103 end if

281
104 end do

105 C = = = = = = = ===== ====== = = = = = = = == = = ==== = = =: == = == ======= = = ==:== 106 road (iscr,112,err=12,end=12) string ! end of information

107 c* write (iout,ll3) string

108 if (string .eq, '=h==') then

109 close (iscr)

110 else

111 write (iout,114)

112 stop

113 end if

114

lis llinnts(14) = .true.

lie iptr =1 ! initialize

117

118 2 if (wavlen .It. 0.0) then ! nm, wavelength

119 X = -wavlev /wavlen ! eV < nm

120 else

iSi X = wavlen ! eV, energy

122 end if

123

124 if (x.lt.xl .or. x.gt.x2) then ! point exterior domain

125 write (iout,132) xl,x2,x

126 stop

127 end if

128

129 do i=l,2

130 Ti(i) = bvalu (t ,c(l ,i) ,mx,ko, 0,x, iptr.w) ! (n+ik)

iSi v(i) = bvalu (t ,c(l ,i) ,mx,ko , l,x, iptr.w) ! (n+ik)'

132 end do

133 134 dielec = cmplx (u(l), u(2)) ! (n+ik)

135 dielew = cmplx (v(l), v(2)) ! (n+ik)'

136 137 dielew = di8lec*dielew*cmplx (2.0, 0.0) 1 e'

138 dielec = dielect^dielec ! e

139

140 return

141 C ======================================================

142

143 11 write (iout,141)

144 stop

145 12 write (iout,142)

146 atop

147 13 write (iout,143)

148 stop

149

150 111 format (

' Imnt ' 14, filename = ' , a)

151 112 format ( a)

152 113 format (

' string = ' , a)

153 114 format (

' oops, error in end-of-info header')

154

155 121 format (

' mx = ' , i5)

156 122 format (

' oops, inconsistency within: mx')

282
157 123 format ( Ix, i4, 2x, 3fl0.4, lOx, '(j.x.u)' ) 158

159 124 format (

' oops

»

ordering violation ' )

160 131 format (

' oops

,

error in B-spline formation, '

161 ft / lOx, 'info =' , i2

162 k / lOx, • i =', i2 , 5x, '(I'll, 2'du/dx)'

163 132 format (

' oops, evaluation point is exterior domain^'

164 k /

1 xl,x2,x ' ', 3fl0.3)

165 166 141 format (

' oops, error in opening input data file ' ) 167 142 format (

' oops

,

error in locating header card, ' ) 168 143 format (

' oops

,

error in reading (i,x,u) ' ) 169

170 end

283
6.5.15 DIEL15.FOR, InP

1 c

2 c Optical properties of: Indium Phosphide (InP), crystalline.

3 C

4

6 subroutine diellE (anglei, wavlen, dielec, dielew,

6 t mipp.iipp, mrpp , rrpp , llpp , ddpp, ! mixtiire

7 k mipa.iipa, mrpa,rrpa,llpa, ddpa) ! ambient

8e integer iipa(l), iipp(l)

10 real rrpa(l), rrpp(l), anglei, wavlen

11 integer llpa(l), llpp(l)

12 complex ddpa(l), ddpp(l), dielec, dielew

13

14 include ' iounit .

15 include 'defnit.'

16 include 'elmnts.'

17 include 'handyy.' ! pi,cccc,wavlav

1819 character>K64 filnam

20 character>x4 string ! convenience

21

22 c Note: nx = mx+2, because of: dudx(l), dudx(mx)

23 c in order to include the first derivatives at each end point.

24 c Let : nx > mx+2

.

2628 parameter (nx =48, ko = 4)

27 parameter (nw = nx*(3*ko-2) + ko*ko + ((ko+l)*(ko+2))/2)

28 common / dieolE / t(nx+ko), c(nx,2), xl,x2, mx, iptr

29 common / dieooo / xx(nx), id(nx) , iw(nx), w(nw), u(4) , v(2)

30

3132 if (llmnts(15)} goto 2

33

34 c Fetch information on the dielectric function.

35 c Assume: 1) no partitions

36 c 2) discretization of input data is of either form:

37 c a) energy (e¥), refractive index, extinction

38 c b) energy (eV), dielectric function, conductivity

39

40 filnam = 'In_P' ! Indium Phosphide

41 write (iout,lll) filneun

42 filnam = subdir//f ilneun

43 call Ijchar (filnam) I left-justify characters

44 open (iscr, file=f ilneun, status= 'old' , readonly , shared, err=ll)

45 c* write (iout,lll) filnam

4647 1 read (iscr, 112, err=12,end=12) string ! skip header

48 c* write (iout,113) string

49 if (string .ne. '=h==') goto 1

50

284
5^ ^^^'^ (iscr, *) mx ! quantity of input data

52 c* write (iout,121) mx ! within one partition

53 if (nix»lt.3 .or. mx+2.gt.iix) then

54 write (iout,122)

55 Stop

56 end if

57

58 k = 0 ! index knots

59 do i=l,mx

«o read (i8cr,*,err=13,end=13) x, u

61 c* write (iout,123) x, u

62

63 if (i.ne.l) then ! induce ordering

64 if (x .le. xx(k)) then

65 write (iout,124)

66 stop

67 end if

68 end if

69

70 if (i.eq.2) then ! usual case for cubic spline fit

71 k = k+1

72 xx(k) = xx(l) ! energy (eV)

73 id(k) = 1 ! i-th derivative

74 c(k,l) = (u(3)-c(l,l)) /(x-xx(l)) ! refractive index

75 c(k,2) = (u(4)-c(l,2)) /(x-xx(l)) ! extinction

76 end if

77

78 k = k+1

79 xx(k) = X ! energy (eV)

80 id(k) =0 ! i-th derivative

81 c(k,l) = u(3) ! refractive index

82 c(k,2) = u(4) ! extinction

83

84 if (i.eq.mx) then ! usual case for cubic spline fit

85 k = k+1

86 xx(k) = X ! energy (eV)

87 id(k) =1 ! i-th derivative

86 c(k,l) = (u(3)-c(k-2,l)) /(x-xx(k-2)) ! refractive index

89 c(k,2) = (u(4)-c(k-2,2)) /(x-xx(k-2)) ! extinction

90 end if

91

92 end do ! x,u

93 c

94 xl = xx(l)

95 x2 = xx(k)

96 mx = k ! quantity of data points

97

98 do i=l,2

99 call bindk (xx,c(l,i) ,id,mx,ko, t,c(l,i), w.iw.info)

100 if (info.ne.O) then

101 write (iout,131) info, i

102 call exit (2)

103 end if

285
104 end do

105 C ======================================================

106 read (iscr,112,err=12,end=12) string ! end o± information

107 c* write (io-ut,113) string

108 if (string .eq. '=h.==') then

109 close (iscr)

110 else

111 write (iout,114)

112 stop

113 end if

114

115 llmntsClB) = .true.

116 iptr =1 ! initialize

117

118 2 if (wavlen .It. 0.0) then ! nm, wavelength

119 X = -wavlev /wavlen ! eV < nm

120 else

121 X = wavlen ! eV, energy

122 end if

123

124 if (x.lt.xl .or. x.gt.x2) then ! point exterior domain

125 write (iout,132) xl,x2,x

129 stop

127 end if

128

129 do i=lj2

130 u(i) = bvalu (t,c(l,i) ,mx,ko, 0,x, iptr.w) ! (n+ik)

131 v(i) = bvalu (t,c(l,i) ,mx,ko, l,x, iptr.w) ! (n+ik)'

132 end do

133

134 dielec = cmplx (u(l), u(2)) ! (n+ik)

135 dielew = cmplx (v(l), v(2)) ! (n+ik)'

136 137 dielew = dielec*dielew*cmplx (2.0, 0.0) ! e'

138 dielec = dielec*dielec ! e

139

140 return

141 c ======================================================

142

143 11 write (iout,141)

144 stop

145 12 write (iout,142)

146 stop

147 13 write (iout,143)

148 stop

149

150 111 format (

' Imnt ' 15, filename = '

, a)

151 112 format ( a)

152 113 format (

' string = ' , a)

153 114 format (

' oops, error in end-of-info header')

154

155 121 format (

' mx = ' , 15)

156 122 format (

' oops, inconsistency within: mx')

286
157 123 format ( Ix, i4, 2x, 3fl0.4, lOx, '(j.x.u)' ) 158 124 format (

' oops , ordering violation ' ) 159

160 131 format (

' oops, error in B-spline formation, '

lai ft / lOx, 'info =', i2

162 ft / lOx, ' i =' , i2 ,

'

,

' , 5x, 'd'u, 2'du/dx)' ) 163 132 format (

' oops, evaluation point is exterior domain,'

164 ft / ' xl,x2,x ' ', 3fl0.3)

165

166 141 format (

' oops, error in opening input data file ' ) 167 142 format (

' oops, error in locating header card, ' ) 168 143 format (

' oops, error in reading (i,x,u) ' ) 169

170 end

287
6.5.16 DIEL16.FOR, InSb

1 C

2 c Optical properties of: Indiiun Antinionide (InSb), crystalline.

3 c

4

5 subroutine diell6 (anglei, wavlen, dielec, dielev,

e & mipp.iipp, mrpp.rrpp.llpp, ddpp, ! mixture

7 & mipa.iipa, mrpa,rrpa,llpa, ddpa) ! eunbient

8

g integer iipa(l), iipp(l)

10 real rrpa(l), rrpp(l), anglei, wavlen

11 integer llpa(l), llpp(l)

12 complex ddpa(l), ddpp(l), dielec, dielew

13

14 include ' iounit .

15 include 'defnit.'

16 include 'elmnts.'

17 include 'hemdyy.' ! pi,cccc,wavlev

18

19 character*64 filneun

20 character>^4 string ! convenience

21

22 c Note: nx = mx+2, because of: dudx(l), dudx(mx)

23 c in order to include the first derivatives at each, end point.

24 c Let: nx > mx+2.

25

26 parameter (nx =48, ko = 4)

27 parameter (nw = nx*(3*ko-2) + ko*ko + ( (ko+l)*(ko+2) )/2)

28 common / dieol6 /"t(nx+ko), c(nx,2), xl,x2, mx, iptr

29 common / dieooo / xx(nx), id(nx) , iw(nx), w(nw), u(4) , v(2)

30

31

32 if (llmnts(16)) goto 2

33

34 c Fetch information on the dielectric function.

35 c Assume: 1) no partitions

36 c 2) discretization of input data is of either form:

37 c a) energy (eV), refractive index, extinction

38 c b) energy (eV) , dielectric function, conductivity

3940 filneun = 'In_Sb' ! Indium Antimonide

41 write (iout.lll) filnam

42 filnam = subdir//filnam

43 call Ijchar (filnam) ! left-justify characters

44 open (iscr, fil8=filnam, status= ' old' jToadonly, shared, err=ll)

45 c* write (iout,lll) filnam

4647 1 read (iscr, 112, err=12,end=12) string ! skip header

48 c* write (iout,113) string

49 if (string .ne. •=h==') goto 1

50

288
" ^^^^ (iscr, *) mx i quantity of input data

52 c* write (iout.121) mx ! within one partition

53 if (mx.lt. 3 .or. mx+2.gt.nx) then

54 write (iout,122)

55 stop

56 end if

57 ^ = 0 j index knots

59 do i=l ,mx

80 read (i8cr,*,err=13,end=13) x, u, 81 c* write (iout,123) x, u

82

83 if (i.ne.l) then ! induce ordering

84 if (x .le. xx(k)) then

85 write (iout,124)

66 stop

87 end if

68 end if

69

70 if (i.eq.2) then ! usual case for cubic spline fit

71 k = k+1

72 xx(k) = xx(l) ! energy (eV)

73 id(k) = 1 ! i-th derivative

74 c(k,l) = (u(3)-c(l,l)) /(x-xx(l)) ! refractive index

75 c(k,2) = (u(4)-c(l,2)) /(x-xx(l)) ! extinction

76 end if

77

78 k = k+1

79 xx(k) = X I energy (eV)

80 id(k) =0 ! i-th derivative

81 c(k,l) = u(3) ! refractive index

82 c(k,2) = u(4) ! extinction

83

84 if (i.eq.mx) then ! usual case for cubic spline fit

85 k = k+i

8fl xx(k) = X ! energy (e?)

87 id(k) = 1 ! i-th derivative

88 c(k,l) = (u(3)-c(k-2,l)) /(x-xx(k-2)) ! refractive index

89 c(k,2) = (u(4)-c(k-2,2)) /(x-xx(k-2)) ! extinction

90 end if

91

92 end do ! x,u

93 C

•-

94 xl = XX(1)

95 x2 = xx(k)

96 mx = k ! quantity of data points

97

98 do i=l,2

99 call bindk (xx,c(l ,i) ,id,mx,ko, t,c(l,i), w,iw,inio)

100 if (info.ne.O) then

101 write (iout,13l) info, i

102 call exit (2)

103 end if

289
104 end do

105 106 read (iscr,112,err=12,eiid=12) string ! end of information

107 XX V ** ux XZLg • • ^j^..— ^ ^XlOXi 109 cXo86 C^SCP)

110 else

ill VTiliQ M A A W W fioTi1;.114^ \ ^V V f A * / 112 8% op

113 end il

114

115 XXinXL w S V XU y ~ • WXALO • lie 117

1 1 a if (wavlen .It. 0.0) then ! nm, wavelength

110 ¥ ~ —cavl Av /cravl ati I mTT ^——— Tim 120 OXBa AO

121 X — vavlen ! eV , energy

122 end if

123

124 (t Tt or 5C crt 1:'hiin I noTni; iivtflT'iAT UWillCiXXL 126 WT*T +. <* 11 mill 1^0^ vi vO V

128 stop

1X«57f end il

128

120 do i=l,2

130 ii(i) = bvalu ( t . cfl . i) .mx .ko 0.x. iutr ! (n+ik)

131 vfi^ = favalii r t . c f 1 . i^ .inx . ko . 1.x. iiatr ! (n+ik)

132 end do

133

134 dlAlAC = CTBTITy fufl^ Tlf^^Y I fn+ik^ V»^XAy

135 dielev = cmplx (v(l), v(2)) ! (n+ik)

139 dieles - dialec*dieleQ*cmplx (2.0, 0.0) ! e'

138 dielec = dielac*dielec ! e

139

140

141 c return

142

143 11 srite Cio'iit.l4ll

144 StOD

149 12 OT'ilift f i mil: 147^

s t op

147 13 wrTtft 1 ioTit 143 J stop

149 111 format (

' Imnt ' 16, filename = ' , a)

1 R1 112 format ( a)

152 113 format (

' string = ' , a)

IBS 114 format (

' oops, error in end-of-info header')

164

166 121 format (

' mx = ' , iB)

156 122 format (

' oops, inconsistency vithin: mx')

290
157 123 format ( Ix, i4, 2x, 3fl0.4, lOx, '(j.x.u)' ) 158 124 format (

' oops, ordering violation ' ) 159

lao 131 format (

' oops, error in B-spline formation, '

161 4 / lOx, 'info =', i2

182 ft / lOx, ' i =' , i2 ,

' ,

' , 5x, '(I'u, 2-du/dx)' ) 163 132 format (

' oops, evaluation point is exterior domain,'

164 * / ' xl,x2,x - ' , 3fl0.3)

165

166 141 format (

' oops, error in opening input data file ' ) 187 142 format (

' oops, error in locating header card, ' ) 168 143 format (

' oops, error in reading (i,x,u) * ) 169

170 end

291
6.5.17 DIEL17.FOR, AlSb

1 c

2 c Optical properties of: Aliuninum Antimonide (AlSb) , crystalline.

3 c

4

5 subroutine diell7 (anglei, wavlen, dielec, dielew,

6 ft mipp,iipp, mrpp , rrpp , llpp , ddpp, ! mixture

7 & mipa.iipa, mrpa,rrpa,llpa, ddpa) ! ambient

8

9 integer iipa(l), iipp(l)

10 real rrpa(l), rrpp(l), anglei, wavlen

11 integer llpa(l), llpp(l)

12 complex ddpa(l), ddpp(l), dielec, dielew

13

14 * include 'iounit.'

15 include 'defnit.'

16 include 'elmnts.'

17 include 'handyy.' ! pi ,cccc .wavlev

18

19 character*64 filnam

20 ch.aracter*4 string ! convenience

21

22 c Note: nx = mx+2, because of: dudx(l), dudx(mx)

23 c in order to include the first derivatives at each, end point.

24 c Let: nx > mx+2.

25

26 parameter (nx =47, ko = 4)

27 parameter (nw = nx*(3*ko-2) + ko*ko + ((ko+l)*(ko+2))/2)

28 common / dieolT / t(nx+ko), c(nx,2), xl,x2, mx, iptr

29 common / dieooo / xx(nx), id(nx) , iw(nx), w(nw), u(4), v(2)

30

3132 if (llmnts(17)) goto 2

33

34 c Fetch information on the dielectric function.

35 c Assume: 1) no partitions

36 c 2) discretization of input data is of either form:

37 c a) energy (eV), refractive index, extinction

38 c b) energy (eV), dielectric function, conductivity

3940 filnam = 'Al_Sb' ! Aluminum Antimonide

41 writ© (iout.lll) filnam

42 filnam = subdir//filnam

43 call Ijchar (filnam) ! left-justify characters

44 open (iscr, file=filnam, status= ' old' , readonly, shared^ err=ll)

45 c* write (iout,lll) filnam

4647 1 read (iscr, 112, err=12,end=12) string ! skip header

48 c* write (iout,113) string

49 if (string .ne. '=h==') goto 1

50

292
" (iscr, *) mx ! quantity of input data

52 c* write (iout.121) mx ! within one partition

53 if (mx.lt. 3 .or. mx+2.gt.nx) then

54 write (iout,122)

55 Stop

56 end if

57 = 0 I index knots

59 do i=l,mx

60 read (iscr,*,err=13,end=13) x, u

61 c* write (iout,123) x, u

62

63 if (i.ne.l) then ! induce ordering

64 if (x .le. xx(k)) then

65 write (iout,124)

66 stop

67 end if

68 end if

69

70 if (i.eq.2) then ! usual case for cubic spline fit

71 k = k+1

72 xx(k) = xx(l) ! energy (eV)

73 id(k) = 1 ! i-th derivative

74 c(k,l) = (u(3)-c(l,l)) /(x-xx(l)) ! refractive index

75 c(k.2) = (u(4)-c(l,2)) /(x-xx(l)) ! extinction

76 end if

77

78 k = k+1

79 xx(k) = X ! energy (eV)

80 id(k) = 0 ! i-th derivative

81 c(k,l) = u(3) ! refractive index

82 c(k,2) = u(4) ! extinction

83

84 if (i.eq.mx) then ! usual case for cubic spline fit

85 k = k+1

86 xx(k) = X ! energy (eV)

87 id(k) = 1 ! i-th derivative

88 c(k,l) = (u(3)-c(k-2,l)) /(x-xx(k-2)) ! refractive index

89 c(k,2) = (u(4)-c(k-2,2)) /(x-xx(k-2)) ! extinction

90 end if

91

92 end do ! x,u

93 c

94 il = xx(l)

95 x2 = xx(k)

96 mx = k • ! quantity of data points

97

98 do i=l,2

99 call bindk (xx,c(l,i) ,id,mx,ko, t,c(l,i), w.iw.info)

100 if (info.ne.O) then

101 write (iout,131) info, i

102 call exit (2)

103 end if

293
104 end do

105 C =: = = = = = = = = = = =: ===== = = = = = = = = = === = = ========= = =;== = = ========

106 read (iscr,112,orr=12,end=12) string ! end o± information

107 c* write (iout,113) string

108 if (string .eq. '=h.==') then

109 close (iscr)

110 else

111 write (iout,114)

112 stop

113 end if

114

115 llmnts(17) = .tnie.

lie iptr = 1 ! initialize

117

118 2 if (wavlen .It. 0.0) then ! nm, wavelength

119 X = -wavlev /wavlen ! eV < nm

120 els©

121 X = wavlen ! eV, energy

122 end if i 123

124 if (x.lt.xl .or. x.gt.x2) then ! point exterior domain

125 write (iout,132) xl,x2,x

126 stop

127 end if

128

129 do i=l,2

130 u(i) = bvalu (t,c(l,i) ,mx,ko, 0,x, iptr.w) ! (n+ik)

131 v(i) = bvalu (t ,c(l ,i) ,mx,ko , l,x, iptr ,w) ! (n+ik)

132 end do

133

134 dielec = cmplx (ti(1), ii(2)) ! (n+ik)

135 dielew = cmplx (v(l), v(2)) \ (n+ik)'

136 137 dielew = dielec*dielew*cmplx (2.0, 0.0) ! e*

138 dielec = dielecfdialec ! e

139

140 return

141 C ======================================================

142 143 11 write (iout,141)

144 stop

145 12 write (iout,142)

148 stop

147 13 write (iout,143)

148 stop

149

150 111 format (

' Imnt ' 17, filename = ' , a)

151 112 format ( a)

152 113 format (

' string = ' , a)

153 114 format (

' oops, error in end-of-info header')

154

155 121 format ( ' mx = ' , iB)

156 122 format (

' oops, inconsistency within: mx')

294
157 123 format ( Ix, 14, 2x, 3fl0.4, lOx, '(j,x,u)' ) 158 124 format (

* oops, ordaring violation ' ) 159

160 131 format (

' oops, error in B-spline formation, '

181 ft / lOx, 'info =' , i2

162 4 / lOx, ' i =' , i2 ,

'

,

' , 5x, '(I'u, 2-du/dx) ' ) 163 132 format (

' oops, evaluation point is exterior domain,'

164 ft / ' xl,x2,x • ', 3fl0.3)

165

166 141 format (

' oops, error in opening input data file ' ) 167 142 format (

' oops, error in locating header card, ' ) 168 143 format (

' oops, error in reading (i,x,u) ' ) 169

170 end

295
6.6 Databases

6.6.1 W.SI

1 Optical Properties ol Silicon

2

3 D.E. Aspnes ft A. A. Studna,

4 Physical Review B, Voltune 27, Number 2, 1983, January, 15.

5 Pages: 985-1009.

6

c8

910

E(eV), <el>. <e2>. n. R, alpha* 1

.

=h= indicate end of header information

11 48 - quantity of lines of data

12 1. 500 13 488 0. 038 3 673 0 005 0 327 0 78

13 1. 600 13 793 0. 057 3 714 0 008 0 331 1 25

14 1. 700 14 079 0. 078 3 752 0 010 0 335 1 80

15 1. 800 14 413 0

.

099 3 796 0 013 0 340 2 38

16 1

.

900 14 797 0

.

126 3 847 0 018 0 345 3 15

17 1. 959308 15 0684 0

.

14646 3 88185 0 019

18 2. 000 15 254 0

.

172 3 906 0 022 0 351 4 47

19 2. 100 15 754 0

.

236 3 969 0 030 0 357 6 32

20 2. 200 18 334 0

.

260 4 042 0 032 0 364 7 17

21 2. 27037 16 7912 0

.

35981 4 09794 0 044

22 2. 300 16 994 0

.

396 4 123 0 048 0 372 11 19

23 2. 400 17 761 0

.

508 4 215 0 080 0 380 14 85

24 2. 500 18 661 0

.

630 4 320 0 073 0 390 18 48

25 2. 600 19 724 0

.

803 4 442 0 090 0 400 23 81

26 2. 700 Qft7 Wo f iJ> • 193 4 583 0 130 0 412 36 \jO 27 2. 800 ODD 1J. • 548 4 753 0 163 0 426 46 00

28 2. 900 on O f *I ^ • 017 4 961 0 203 0 .442 59 f o 3. 000 27 197 2

.

807 5 222 0 269 0 .461 81 f 3

30 3. 100 30 874 4. 321 5 570 0 .387 0 .486 121 62

31 3. 200 36 355 7. 636 6 062 0 .830 0 .518 204 28

32 3. 300 43 264 17 .717 6 709 1 .320 0 .661 441 68

33 3. 400 35 224 35 .282 6 522 2 .705 0 .592 932 13

34 3. 500 22 394 S3 .818 5 610 3 .014 0 .575 1069 19

35 3. 600 19 124 31 .632 5 298 2 987 0 .664 1089 90

36 3. 700 17 231 31 .527 5 156 3 .058 0 .563 1148 67

37 3. 800 15 531 32 ,229 5 065 3 .182 0 .568 1225 46

38 3. 900 13 .965 33 .587 5 016 3 .348 0 .577 1322 69

39 4. 000 12 .240 35 .939 5 010 3 .586 0 .591 1454 11

40 4. 100 9 364 39 .947 5 020 3 .979 0 .814 1663 60

41 4. 200 2 .371 45 .348 4 888 4 .639 0 .852 1974 84

42 4. 300 -12 .404 44 .095 4 087 5 395 0.703 2351 38

43 4. 400 -18 .818 33 .350 3 120 5 344 0 728 2383 23

44 4. 500 -19 .815 24 .919 2 452 5 082 0 740 2317 99

45 4. 600 -17 .931 18 .601 1 988 4 678 0 742 2181 15

46 4. 700 -15 .190 15 .094 1 764 • 4 278 0 728 2038 07

47 4. 800 -13 .087 13 .193 1 658 3 979 0 710 1936 06

48 4. 900 -11 507 11 .974 1 597 3 749 0 893 1862. 11

Aspnes

Aspnes

296
49 5 000 -10 242 11 . 19B

50 5 100 -9 291 10.776

51 B 200 -8 724 10 . 6B5

52 6 300 -8 7B1 10 .B86

53 5 400 -9 168 9.907

54 E BOO -9 106 8.846

55 5 600 -8 726 7.999

56 5 700 -8 32E 7.400

57 B 800 -7 .987 6.898

58 B 900 -7 .721 6.460

59 6 .000 -7.443 5.877

60 =h= ' indi

1 570 3 565 0 675 1806 67

1 571 3 429 0 658 1772 70

1 B89 3 354 0 646 1767 66

1 579 3 353 0 647 1801 26

1 471 3 366 0 663 1842 63

1 340 3 302 0 673 1840 59

1 .247 3 206 0 675 1820 07

1 .186 3 .120 0 673 1802 31

1 .133 3 .04B 0 .672 1789 .99

1 .083 2 .982 0 673 1783 .51

1 .010 2 .909 0.677 1769 .27

e end of information

297
6.6.2 W.SIA

3

4

5

6

7

8910

Optical Properties of Silicon (Amorphous) (a-Si)

Reference

Handbook of Optical Constants, Edited by:

(Academic Press, Inc.; Orlando, 1985),

Subpart 2, Section: Silicon (Amorphous) (a-Si),

pages: 571-586, compiled by: H. Piller,

literature: D.T. Pierce and U.E. Spicer,

Physical Review B 5, 3017, (1972).

Edward D. Palik,

1112 E(eV), n. n(H)

.

k(H)

13

14 =h= ' indicate end of header information

15 25 ' quantity of lines of data

16 1. 500 3 . 86 0

.

0812 4 . 13 2.. OOE-4 (xxx?)

17 1. 600 0 2

,

. 37E-2 (xxix)

18 1. 700 . Ul 0. 199 4.37 (xxi?)

19 1. 800 4.09 0. 271 4.49 (xxi?)

20 1. 900 4.17 0. 363 4.69 (xxi?)

21 2. 000 4.23 0.,461 4.71 0,.217 (xxxx)

22 2.,200 4.36 0.,690 4.926 0,.4 (xxii)

23 2.,400 4.46 0.,969 6.142 0,.6 (xxii)

24 2.,500 4.47 1.,12 5.25 0,.992 (xxxx)

25 2.,600 4.49 1.,28 0,.850 (xxii)

26 2.,800 4.47 1.,64 (xxii)

27 3.,000 4.38 2.,02 5.43 2 .19 (xxxx)

28 3.,200 4.17 2,.38 (xxii)

29 3,,400 3.90 2,.66 (xxii)

30 3,.500 3.73 2..79 4.59 3,.38 (xxxx)

31 3..600 3.56 2.,88

32 3,.800 3,21 3.,00

33 4,.000 2.87 3..06 3.36 3 .92 (xxxx)

34 4,.200 2.66 3,.04 (xxii)

35 4.400 2.30 2 .99 (xxii)

36 4,.600 2.07 2..93 (xxii)

37 4,.800 1.86 2,.86 (xxii)

38 5,.000 1.69 2,.76 1.66 3 .38 (xxxx)

39 5 .500 1.35 2..51 1.23 2 .99 (xxxx)

40 6 .000 1.11 2,,28 0.961 2 .65 (xxxx)

41 =h= ' indicate end of information

298
6.6.3 W.SI_02G

Optical Properties oi Silicon Dioxide (glass , amorphous) (Si02-g)

Edward D. Palik,

Reference

:

Handbook of Optical Constsm.ts, Edited by:

(Academic Press, Inc.; Orleuido, 1985),

Subpart 2, Section: Silicon Dioxide (Glass) (5i02).

pages: 749-763, compiled by: H.R. Phillip.

810 E(e V). n. k

1112 =h= ' indicate end of

13 46 ' quantity of line

14 n Q19 X niw X ftO 1.44621 0.0

15 1X . \JVOO 1.44888 0.0

16 1 1 44.Q 1.44941 0.0

17 1 AO 1.45025 0.0

18 X . o o u ^ 1.45185 0.0

19 1X . 1.45248 0.0

20 7B49 1.45515 0.0

21 8566 1.45608 0.0

22 1 . 8892 1.45637 0.0

23 9257 1.45671 0.0

24 1 _ 95930784 1.457018 0.0

25 2

.

1041 1.45841 0.0

20 2

.

1102 1.45847 0.0

27 2

.

1411 1.45877 0.0

28 1 .45885 0.0

29 2 2705 1.46008 0.0

30 2 4379 1.46187 0.0

31 2 5504 1 .46313 0.0

32 2 6503 1.46429 0.0

33 2 8448 1.46669 0.0

34 3 0640 1.46961 0.0

35 3 3967 1.47453 0.0

36 3 4340 1.47512 0.0

37 3 5770 1.47746 0.0

38 3 6427 1.47858 0.0

39 3 7105 1.47976 0.0

40 3 7542 1.48053 0.0

41 4 1034 1.48719 0.0

42 4 1784 1.48873 0.0

43 4 2848 1.49099 0.0

44 4 4226 1.49404 0.0

45 4 5040 1.49592 0.0

46 4 5940 1.49805 0.0

47 4 .6751 1.50004 0.0

48 4 .9939 1.50841 0.0

49 6 .1674 1.51338 0.0

SO 6 .2131 1.51474 0.0

Malitson

299
51 B.38B8 1.52009 0.0

52 5.4680 1.52276 0.0

53 5.7819 1.53371 0.0

54 5.7976 1.53429 0.0

55 6.0 1.543 0.0

56 6.25 1.554 0.0

57 6.5 1.567 0.0

58 6.75 l,f;82 0.0

59 7.0 1.600 0.0

60 =h.== ' indicate end of information

300
6.6.4 W.SI3_N4

1 Optical Properties of Silicon Nitride (non-crystalline) (Si31I4).

2

3 Reference

:

4 Handbook of Optical Constants, Edited by: Edward D. Palik,

5 (Academic Press, Inc.; Orlando, 1985),

e Subpart 2, Section: Silicon Nitride (non-crystalline) (Si3N4),

7 pages: 771-774, compiled by: H.R. Phillip.

8

9 Note: k should be fitted logarithmically within: diel06

10

11 E(eV), n. k

1213 =h== ' indicate end of header information

14 19 ' quantity of lines of data

15 1.0 1 998 1. OE-10 ' 0.0

16 1.5 2 008 1. OE-10

17 2.0 2 022 1. OE-10

18 2.5 2 041 1. OE-10

le 3.0 2 066 1. OE-10

20 3.E 2 099 1. OE-10

21 4.0 2 141 1. OE-10

22 4.2B 2 167 1. OE-10 - 0.0

23 4.5 2 .198 2. 2E-4

24 4.75 2 .234 1. 2E-3

25 5.0 2 .278 4. 9E-3

26 5.25 2 .331 1. lE-2

27 5.5 2 .393 2. 9

28 5.75 2 .464 5. 7E-2

29 6.0 2 .541 0. 102

30 6.25 2 .620 0 174

31 6.5 2 .682 0 273

32 6.75 2 .724 0 380

33 7.0 2 .752 0 493

34 =h== ' indicate end of information

301
6.6.5 W.GE

2 Optical Properties of: Germanium (Ge)

3

4 1) Handbook of Optical Constants of Solids,

5 edited by Edward D. Palik,

6 (Academic Press, Inc., Orlando, 1985)

7

s 2) D.E. Aspnes k A. A. Studna,

9 Physical Review B, Volume 27, Number 2, 1983, January, 15.

10 Pages: 985-1009.

11

1^13 E(eV). n. R. alpha* 1.0E3 (« 14

15 ' indicate end of header information

16 91 ' quantity of lines of data

17 1

.

C A A ft A C O God 0 298 0.419 46.30

18 1

.

4: no A 0 316

19 1

.

600 *7 a o

r DO 0 34B 0.428 66.97

20 1

.

64 A olo 0 364

21 1

.

700 A4

O O °T 897 0 401 0.439 69.06

22 1

.

74 4 961 0 430

23 1

.

800 B 067 0 BOO 0.453 91.26

24 1

.

84 5 1B2 0 B37

25 1

.

900 B 294 0 638 0 .471 122.96

28 1

.

95 B B 0 66

27 2. 000 B B88 0 933 0.495 189.12

28 2. 04 B 708 1 IBO

29 2. 100 B 748 1 634 0.523 347.91

30 2. 14 B 5B4 1 924

31 2. 200 B 283 2 049 0.516 456.93

32 2. 24 B 198 2 12B

33 2. 300 6 062 2 318 0,519 540.33

34 2. 34 4 883 2 434

35 2. 400 4 610 2 4B& 0.608 597.26

36 2 44 4 482 2 429

37 2 500 4 340 2 384 0.492 604.15

38 2 54 4 267 2 3B3

39 2 600 4 .180 2 309 0.480 608.62

40 2 64 4 .133 2 .281

41 2 700 4 .082 2 .240 0.471 613.12

42 2 74 4 .058 2 .216

43 2 800 4 .036 2 .181 0.464 619.05

44 2 84 4 .030 2 .162

45 2 900 4 .037 2 .140 0.461 629.17

48 2 94 4 .052 2 .136

47 3 000 4 .082 2 .145 0.463 652.25

48 3 04 4 .107 2 .164

49 3 .100 4 .141 2 .216 0.471 696.14

50 3 .14 4 .153 2 .262

302
51 3 . 200

d • 1X oK7r . Otv IdO

U

AQ 4 "7 c 0 fob . 90

52 3 24 4 150 09^

53 3 300 4 X ^ o dAQ 0 AQO tyu QO

C ozbQQ 00

54 3 34 4 106 z > K10 X 71 55 3 400 4 070 bK7Qf 9 0 AQ7 ty f QPQ 000

Q 4 OX

CA00 o At OdP uto

A 4 C Dlb

57

Q

b vU

At z AA7 DO r 0 C

A 0 502 946 01

58 3q bt

At ooc UUb 2 702

59

Q3 q oob 2

•7 c n 7b9 0 509 1006 86

60

qAA4. Ort

q Q7A tf f t 2 7 QQ

61 •i f q 0bo z Q

Aq 080 0 517 1073 71 o f ^ q QdO vtw z QOQ

63

qq 9«3o z QP

AAu bz f 4 4 CA 1 xbU 0 Q 29

qq 9 O

U 0 Odl uto

AR

q *3q 03 1 "57 X 0 f 0 C

QQ 4 OAO 0 q 20

66

q If ^ q 9 X

D 0 OOQ

67 t q•3 QOC oUb

QqqA ooO

u boo 4 0 C 0 lob2 c c bb

68

At q

Q Aq

A too

69

A

q<3A 4 A 01 

0 C TO b r y 4 C

A 4 loOl 84

70 It

qQ q7 •3 7 CA . r bo

71

A*±

q 7dC 1 tb OOQ

u 012 4 7A

A 1 f 00 bb

72 *I <3q Aqq

A

'x 007

73

A

q Oi30

A

*T buC07f 0 1lyQAdDt . boCP 7A1 n

4, *3q U«30 Tt ARl

75 4.

bX 0 A*t . AUDl7 AQ 0 OOPO APto

78

A OOA

A . bto Kdl

77 *± buu *X 9b.3

A

rr 007 0 r lo 4xyou QAO . 4ItA

78

A*± ot 1 0«3

V . 11 d71 f 79 At i1 700 I ZV Q OAO . you 0 f Uz 4 PAA XotO CObz

80 *i Ad 1X ARQ Q b 9 Q RKO ObZ

81 il*± f 1 boo PP A 70Q f uy 0 1X 7A7 f 0 f 1X

dt

82

A*T 7df t X btw RdA AOd 0 z t

83

Ax OVJv

X dOP

J 0\j fi77 Oil 1X 707 f V f 10

84 4. nd IX d7n •J d^Q

85 4.

X d"? 10 bK 0V

A Ad xuoy 71f 0

86 A. Od9*1X d1tX 7f Q ZO

87 cD

•1X ^Qd «3 1X Q7y f 0yj DO 1 A'JO

X 0

88

b Od 4X <304: 1xtodA

89

b 4X q7o 071 U f 0 0 OOD 1XbOO PPR

90

b i d •iX

qAA OHVOX

91 co 4X oot q A A z Q7

q 0 DZi^ 1XboKA7f Zb

92

b ^t 4X 300 q AA z QIR yoo

93b 4X

q 7 4

•3rX z RQ7 oy f 0 u

V 9 1XDDU RRA

X 0

94b 7d 4X Off 177 0z R77 Off

95b dOO tuu 4X 000 0z RRd OD * 0V 600 Www 1562 04

96 o Adtt 4x 001P7r z RdQ 0 1y

97b bUU COO 4X oou IPO z 0 1^ 0 0 0 1584 57

98 5 54 41 070 z OAO Ot^

99 5 600 1 360 2 846 0 602 1615 23

100 5 64 1 345 2 852

101 5 700 1 310 2 866 0 613 1656 06

102 5 74 1 273 2 874

103 6 800 1 209 2 873 0 632 1689 07

303
104 5 . 84 1.167

105 5.900 1.108

106 5 . 94 1.073

107 6.000 1.023

108 =h.= =

2.862

2.831 0.644 1693.31

2.801

2.774 0.653 1686.84

' indicate end of information

304
6.6.6 W.GA_AS

1

2 Optical Properties of: Gallium Arsenide (GaAs)

3

4 1) Handbook of Optical Constants of Solids,

s edited by Edward D. Palik,

6 (Academic Press, Inc., Orlando, 1985).

7

8 2) D.E. Aspnes t A. A. Studna,

e Physical Review B, Volume 27, Number 2, 1983 January 15,

10 Pages: 985-1009.

11

1213 E(eV), n, k, R, alpha*1.0E3 (cm**-l)

14

15 =h= indicate end of header information

16 151 quantity of lines of data

17 1. 500 3 666 0 080 0. 327 12.21

18 1. 52 3 672 0 083

19 1. 54 3 679 0 085

20 1 56 3 685 0 087

21 1. 58 3 693 0 089

22 1

.

600 3 700 0 091 0. 330 14.83

23 1. 62 3 707 0 093

24 1. 64 3 716 0 097

25 1

.

66 3 725 0 101

26 1

.

68 3.734 0 105

27 1. 700 3 742 0 112 0. 335 19.28

£o 1. 72 3 752 0 118

29 1 74 3 762 0 127

30 1 76 3 772 0 134

31 1. 78 3 779 0 152

32 1. 800 3 785 0 151 0. 339 27.49

33 1 82 3 792 0 158

34 1. 84 3 799 0 168

35 1 86 3 809 0 173

36 1 88 3 817 0 173

37 1 900 3 826 0 179 0. 344 34.45

38 1 92 3 836 0 183

39 1 94 3 846 0 187

40 1 96 3 856 0 196

41 1 98 3 .867 0 203

42 2 000 3 .878 0 211 0 349 42.79

43 2 02 3 .890 0 .213

44 2 04 3 .902 0 .223

45 2 06 3 .914 0 .228

46 2 .08 3 .927 0 .232

47 2 .100 3 .940 0 .240 0 356 51.15

48 2 .12 3 .954 0 .245

49 2 .14 3 .968 0 .251

50 2 .16 3 .983 0.257

305
51 2.18 3.998 0.266

52 2.200 4.013 0,276

53 2.22 4.029 0,286

54 2.24 4.045 0.294

55 2.26 4.063 0.301

66 2.28 4.082 0.308

57 2.300 4.100 0,320

58 2.32 4.120 0,327

59 2.34 4.141 0,337

60 2.3S 4.162 0.347

61 2.38 4.183 0,359

62 2.400 4.205 0.371

83 2.42 4.229 0.385

64 2.44 4.254 0.398

65 2.46 4.279 0.411

66 2.48 4.305 0.426

67 2.500 4.333 0.441

€8 2.62 4.362 0.458

60 2.54 4.392 0.476

70 2.56 4.423 0.497

71 2.58 4.456 0.517

72 2.600 4.492 0.539

73 2.62 4.525 0.569

74 2.64 4.567 0,595

75 2.66 4.605 0.626

76 2.68 4.649 0.659

77 2 . 700 4.694 0.696

78 2.72 4.741 0.739

79 2.74 4.793 0.789

80 2.76 4.845 0.846

81 2.78 4.902 0,912

82 2.800 4.959 0.991

83 2.82 5.015 1.088

84 2.84 5.065 1.206

85 2.86 B.102 1.363

86 2.88 5.107 1.629

87 2.900 6.052 1.721

88 2.92 4.917 1.885

89 2.94 4.765 1.960

90 2.96 4.626 1.967

91 2.98 4.550 1.952

92 3.000 4.609 1.948

93 3.02 4.483 1.961

94 3.04 4.462 1.988

95 3.06 4.439 2.029

96 3.08 4.413 2.082

97 3,100 4,373 2.148

98 3.12 4.313 2.212

99 3.14 4.229 2,270

LOO 3.16 4,126 2,304

LOl 3.18 4,023 2,307

102 3.200 3.938 2.288

.03 3.22 3.871 2.260

0.363 61.46

0.372 74.56

0.382 90.34

0.396 111.74

0.410 142.02

0,429 190.53

0.456 281.33

0.490 506.76

0.472 692.48

0.477 674.17

0.468 742.21

306
104 3 .24 3.818 2 .232

105 3 .26 3.776 2 .207

106 3 .28 3.740 2 .183

107 3 .300 3.709 2 .162

108 3 .32 3.681 2 .142

109 3 .34 3.667 2 .123

110 3 .36 3.63E 2 .107

111 3 .38 3.614 2 .091

113 3 .400 3.696 2 .076

113 3 .42 3.680 2 .062

114 3 .44 3.666 2 .049

lis 3 .46 3.653 2 .038

116 3 .48 3.641 2 .024

117 3 .600 3.631 2 .013

118 3 .B4 3.613 1 .992

119 3 .600 3.496 1 .966

120 3 .64 3.489 1 .950

121 3 .700 3.486 1 931

122 3 .74 3.488 1 920

123 3 .800 3.601 1 909

124 3 .84 3.612 1 906

125 3 .900 3.638 1 904

126 3 .94 3.669 1 907

127 4 000 3.601 1 920

128 4 04 3.634 1 936

129 4 100 3.692 1 969

130 4 14 3.736 2 001

131 4 200 3.810 2 069

132 4 24 3.864 2 132

133 4 300 3.939 2 260

134 4 34 3.981 2 368

135 4 400 4.016 2 563

138 4 44 4.004 2 716

137 4 600 3.913 2 919

138 4 64 3.860 3 018

139 4 600 3.769 3. 169

140 4 64 3.708 3 280

141 4 700 3.698 3 462

142 4 74 3.611 3 574

143 4 800 3.342 3. 770

144 4 84 3.187 3. 898

145 4 900 2.890 4 047

146 4 94 2.664 4 106

147 6 000 2.273 4 084

148 6 04 2.044 3 992

149 B .100 1.802 3 796

150 6 .14 1.699 3 660

151 5 .200 1.699 3 484

152 B .24 1.662 3 384

153 6 .300 1.499 3 266

154 6 .34 1.468 3 181

155 B .400 1.430 3 079

156 B .44 1.410 3 019

0.447 723.09

0.434 715.28

0.426 714.20

0.419 717.14

0.416 724.14

0.414 736.28

0.416 762.62

0.421 778.66

0.430 818.23

0.444 880.86

0.466 984.86

0.494 1143.26

0.621 1331.28

0.640 1477.66

0.566 1644.29

0.696 1834.18

0.633 2009.92

0.668 2069.81

0.676 1961.86

0.661 1836.14

0.644 1748.74

0.628 1686.29

307
157 5 .EOO 1 .383 2 .936 0.613 1636 . 68

158 5..B4 1 .367 2 .88B

159 E,,600 1 .349 2 .81B 0.E99 1E97.99

160 E.,64 1 .339 2 .772

161 E.,700 1 .32B 2 .710 0.B84 1E6B.73

162 E. 74 1,.321 2..673

163 E. 800 1,.311 2,,62E 0.E71 1B43.07

164 S. 84 1,,304 2,,E92

165 E. 900 1.,288 2.,EE6 0.E62 1B28.86

166 E. 94 1

.

,287 2. E23

167 6. 000 1. 284 2. 472 O.BEO 1503.20

168 =h= indicate end of information

308
6.6.7 W.AL_GA_AS

Optical Properties of;

where

:

Aluminium Gallium Arsenide,

Al(x) Ga(l-x) As,

0 < X < .8

D.E.Aspnes, S.M.Kelso, R.A.Logan, R.Bhat,

Jouxnal Applied Physics, Volume 60, Number 2,

Pages: 754-767.

1986-January-15

,

9 E(eV), <el>. <e2>, n. k, R. alpha*1 .

0

10

11 =h== indicate end of header inf ormatio

12 G quantity of distinct compositions

13 quantity of lines, composition of

14 46 0. 0 1 (mx, y. iy)

15 1. BOO 13. 436 0. 436 3 666 0

.

059 0. 327 9 03

16 1

.

600 13. 683 0. 687 3 700 0. 093 0 330 15 06

17 1. 700 13. 991 0. 922 3 742 0. 123 0 335 21 22

18 1. 800 14. 307 1. 192 3 .786 0. 167 0 340 28 72

19 1

.

900 14 607 1 367 3 .826 0. 179 0 344 34 40

20 2. 000 14 991 1 637 3 .878 0. 211 0 349 42 79

21 2. 100 IB 463 1 893 3 .940 0. 240 0 356 51 16

77 2. 200 16 031 2 212 4 .013 0. 276 0 363 61 46

23 2 300 16 709 2 622 4 .100 0. 320 0 372 74 56

24 2 400 17 547 3 123 4 .205 0. 371 0 382 90 34

25 2 BOO 18 B79 3 821 4 .333 0. 441 0 396 111 74

26 2 600 19 885 4 841 4 .492 0. 639 0 410 142 02

27 2 700 21 BBO 6 536 4 .694 0. 696 0 429 190 63

28 2 800 23 60B 9 830 4 .959 0. 991 0 456 281 33

29 2 900 22 5B8 17 383 5 .052 1. 721 0 490 605 75

30 3 000 16 B36 17 571 4 .509 1. 948 0 472 592 48

31 3 100 14 B19 18 766 4 .373 2. 146 0 477 674 17

32 3 200 10 271 18 022 3 .938 2. 288 0 468 742 21

33 3 300 9 086 16 037 3 .709 2. 162 0 447 723 09

34 3 400 8 626 14 929 3 .696 2. 076 0 434 715 28

35 3 BOO 8 413 14 216 3 .631 2. 013 0 425 714 20

36 3 600 8 3BB 13 739 3 .495 1. 966 0 419 717 14

37 3 700 8 419 13 469 3 .485 1. 931 0 415 724 14

38 3 800 8 611 13 366 3 .501 1. 909 0 414 736 28

39 3 900 8 890 13 470 3 .638 1. 904 0 416 752 62

40 4 000 9 279 13 832 3 .601 1. 920 0 421 778 66

41 4 100 9 7B4 14 538 3 .692 1. 969 0 430 818 23

42 4 200 10 23B IB 767 3 .810 2. 069 0 444 880 86

43 4 300 10 .412 17 803 3 .939 2 260 0 466 984 86

44 4 400 9 .B4B 20 .682 4 .016 2 563 0 .494 1143 .28

45 4 BOO 6 .797 22 .845 3 .913 2 919 0 .621 1331 .28

46 4 .600 4 .163 23 .891 3 .769 3 169 0 .540 1477 .66

47 4 .700 1 .030 24 .835 3 .698 3 452 0 .666 1644 .29

48 4 .800 -3 .046 26 .196 3 .342 3 770 0 .696 1834 .17

49 4 .900 -8 .022 23 .394 2 .890 4 047 0 .633 2009 .91

50 B .000 -11 .514 18 .564 2 .273 4 084 0 .668 2069 .81

309
0

1

co X X 1X oRAo 1X .3^ .Off A77 i

. RAO OU2 qO 7Q C fab u

A 7 A .6/6 4 A A 4 1961 . 86

R O 0£ co — Q K7R X X

1 4q 1 . CQQ byy q•3 AQA 4o4 U

A A •* . 661 1836 . 15

53 co _oO qCA A

V

7C53 . 1 bo 1 AOQ . 4y yo A C C 2bb 0 . 644 1748 . 74

54 co _7f 4q C oO

fi AA 1 Aq A . 4oU ooA 7 A 0

A A O

. 020 1685 .29

55 B .500 -6 .705 8 .123 1 .383 2 936 0 .613 1636 .68

56 5 .600 -6 .107 7 .593 1 .349 2 815 0 .599 1597 .99

O 1 g 700 _co 7f . 1xozft9 1 .325 2 710 AU . bo's CR4 1IbOb C AC . 7q1 o

OS c -Ko 1 7-1

. X f X Au 1 .311 2 625 Au C7

1

. b 1 1

1lb4o CAq A Q . Uo

Do co R7A Au KR7 1 .288 2 557 A .002 C AO 1lb20 COQ Q A . 00

AO

0

1

AO

5 000 O X X A . 9K0 Z u U 1 .264 2. 472 A . bbvj K CO 1IbUo coq 01 . 21

48 AV/ OQQ 9 (mx, y, iy)

DO 1X KOO 1X 9z f D O Av 000 3 .572 0

.

000 AU oxO q 1 A A A A

Ad. 600 X .7 401 ^V X A 4'^4 T J ^ 3 . 661 0. 059 A\J u^0z Au y AO02

AI« DO J. 700 X o OZK91X A\J AOO O V w 3 .678 0

.

082 AU •320 ^ OR 1It4 AvOA

AA ftOO X J 79S Aw 1 OO 3 .716 0

.

099 AV 1X RO 1loq A7D « 900 X ^ 9?7 0 QA9 3 .775 0

.

127 A\J OOO 04Z t K4

68 2 000 14X ~ 563 1X o\j o 3 820 0

.

171 AV o^o ^4^ o74t A^DO

AODtf 1X 00w 1X 4^ QR1 vox 1X K40 3 876 0

.

199 A o^y ^40 40 OQzy

7ft 900 lb V/ V X o 471 ^ 1 X 1X RA4 3 940 0

.

237 AV OOu ^RA OZK9 74

f 1 ^00 X u 0A7 9 91Z X Au 4 018 0

.

276 A\J oOt ^ A4 A4Ot OQ2y

'2 1X AD 7Q A 9 A97 D2 r 4 111 0

.

320 AU Oq7qr o 77f 1 7q1 o

73 1X 7r A AO q OOK 22b 4 220 0

.

382 A 004 qQA Q A y D

fiq So

74 1

0

7^9 f Oz *x 09^ U2.3 4 353 0

.

462 A

U oyqQ71 1 0

1

121 7Q1 y

•yc lO 700 90 ORO D 1X QA9D 4 518 0

.

575 AU 41tloq 1lbC71 OOqR

flOO 91Z X 744 7 91Z X i3 A 79K 1 ^o Av . 7A^ r OO AU 4^1 too 01 A ^lO A^Oo

77 •5 QOO 9'? 41^X 1X X X

1lotH4 At: Qy ARD o X . 1X 9AZ u A 4A1 to X OOU RQoy

7ia Q 000 V W V 90 0^8 V .7 o 1X 7f 7AK A OOO 1X • R^A OOO AV 4R^ ^o o 9K^ o

7Q Q 1Xuv00 1X Au OQK 1X 7f A 4A0 X . Q4Q y Tty AV 4AQ toy AIO X 9Z OO

900 X o O^0U AU 1X Ro RQR 0 9 0 A 9K? ZOO 9 1X R7O r Aw 47K t f o 70Q r uy 99zz

81 1XVo 070 1X 7r 00U2DA oq R A4 A2 . OOq 2Uo AU 4CR rrbO 7q7 lot 04

82 q /inn Q one 1xoc; AQ•ly A4

q AQA oyu A

2 . 1 AA lUU A AA1 ttl 70q I 20 AOl1

83 o

Qo 0^0 1 A14 A 1 Q oly q.9 A A

1

6U1 A2 . A q A A A q A 4oU 70 A I 2U 1 q lo

84 q Qo vW 1 A14 AAA qO ceo bb2 •41 . 07Q y f y A AO q 42.3 700 1 22 1 o ly

85 q•3 1 UU O AO A 4 q lo 7 q A r J6 qO

c q o bo2 1 . QAC w4b AU A 4 Q 41y 70Q r 2y q q OO

86 q Qnn Qo

Q AQ i q Xd A AQ 3 537 1

.

924 A 4141 7f 7AA f 4U QQy y

87 q y uu AOQ 1xaq AQO cy2 3 .566 1. 920 AU AI Q rtXy 7 Cfl r bo Q7y f 88 noA UUU n

V

q AO 1 A14 A 1 7 Ul f 3 .618 1

.

937 A Aoq 42o 7fi robC qiol

89 Q 7qA ( oft 1 A14 AAA 0D4 3 .697 1. 983 A Aqi 4ol no4 02'£ 1 Q 1 y

90 ^ A IrtO lb 7 A A 3 .801 2. 074 A AAA 444 QQO 002 Q 1 y 1 91 O A A

. 300 H A 10 n a /I .364 < 71 f C 7 -4 b f 1 3 .922 2. 240 0 AAA 404 976 34

92 AAA nV obi O A H A C 14b 4 .017 2. 507 A AQO 4oy 1118 25

93 C A A. oOO 1 Oil A O A A C u6b 4 010 2. 876 0 bly 1311 72

94 AAA . 600 A't O "3 fl Z J6 OA24 7 Q ^

r ol 3 .829 3. 229 Au

C A A b40 1505 64

95 •7 A A . f 00 u

C Q "7 o c 2b c q c bob 3 .611 3. 536 A C70 b I 2 1884 43

96 /I OA A . 800 . 1X0 o c 2b 4 Q A 1.30 3 .267 3. 846 A 0U4 AAA 1871.41

97 'i AAA . »00 ~o AAA , 604 OO22 ooy q AQ 2 .772 4. 036 A Aq7 Do f 2004 32

98 5 .000 -10 991 17 583 2 .207 3. 983 0 662 2018 51

99 5 .100 '-10 408 13 478 1 .819 3. 704 0 664 1914 68

100 5 .200 -9 116 11 220 1 .634 3. 433 0 651 1809 48

101 5 .300 -8 .043 9 870 1 .531 3. 223 0 635 1731 43

102 5 .400 -7 227 8 928 1 459 3. 059 0 621 1674 24

103 5 .500 -6 650 8 225 1 408 2. 921 0 607 1628. 38

310
104 5 .600 -B 963 7 .677 1 371 2. 800 0 593 1589 66

105 6 . 700 -B 468 7 .256 1 345 2. 698 0 579 1658 54

106 5 800 -5 032 6 .937 1 330 2. 608 0 665 1633 16

107 5 900 -4 702 6 .692 1 318 2. 538 0 554 1617 71

108 109

110 6 000 -4 321 6 442 1 311 2. 457 0 539 1494 49

47 0 198 3 (mx, y, iy) i 111 1 600 11 9B0 0 000 3 457 0. 000 0 304 0 00

112 1 600 12 B02 0 017 3 636 0. 002 0 313 0 39

113 1 .700 13 213 0 013 3 635 0. 002 0 323 0 30

114 1 .719 13 423 0 .02 3 664 0. 003

115 1 .800 13 423 0 .601 3 662 0. 082 0 326 14 97

116 1 .900 13 682 0 .696 3 700 0. 094 0 330 18 11

117 2 .000 14 119 0 .887 3 759 0. 118 0 337 23 92

118 2 . 100 14 B29 1 .260 3 815 0 .

166 0 343 35 16

119 2 .200 14 946 1 .567 3 871 0. 202 0 349 46 13

120 2 .300 IB 464 1 .909 3 940 0. 242 0 356 66 49

121 2 .400 16 096 2 .313 4 022 0. 288 0 364 69 94

122 2 .BOO 16 84B 2 .812 4 118 0. 341 0 374 86 61

123 2 .600 17 767 3 .460 4 235 0. 409 0 386 107 66

124 2 .700 18 893 4 .363 4 375 0. 499 0 399 136 46

125 2 .800 20 272 6 .787 4 547 0. 636 0 417 180 69

126 2 .900 21 877 8 .226 4 757 0. 866 0 439 264 16

127 3 .000 22 682 13 .063 4 943 1. 322 0 467 401 86

128 3 .100 17 781 17 .110 4 607 1. 867 0 472 583 43

129 3 .200 IB 264 17 .326 4 379 1. 978 0 467 641 61

130 3 .300 11 927 17 .808 4 084 2. 180 0 466 729 24

131 3 .400 9 908 16 .040 3 792 2. 115 0 447 728 86

132 3 .BOO 9 31B 14 .923 3 668 2. 034 0 434 721 70

133 3 .600 9 081 14 .254 3 602 1. 979 0 426 721 98

134 3 .700 8 987 13 .874 3 672 1. 942 0 421 728 36

135 3 .800 9 03B 13 .714 3 568 1 .

922 0 419 740 28

136 3 .900 9 199 13 .768 3 588 1. 917 0 420 757 87

137 4 .000 9 468 14 .047 3 633 1. 933 0 423 783 89

138 4 .100 9 796 14 .630 3 701 1. 976 0 431 821 32

139 4 .200 10 163 16 .627 3 795 2. 059 0 443 876 48

140 4 .300 10 429 17 .264 3 911 2. 206 0 460 961 42

141 4 .400 10 147 19 .686 4 018 2. 449 0 485 1092 43

142 4 .BOO 8 B68 22 .716 4 053 2. 803 0 514 1278 33

143 4 .600

B 008 26 .295 3 924 3. 223 0 547 1502 86

144 4 .700 0 469 26 .010 3 638 3. 576 0 576 1702 90

145 4 .800 -4 468 26 .047 3 238 3. 867 0 607 1881 60

146 4 .900 -8 500 21 .861 2 734 3. 997 0 634 1985 28

147 5 .000 -10 433 17 .302 2 210 3. 914 0 665 1983 56

148 6 .100 -9 896 13 .595 1 860 3. 664 0 664 1889 12

149 E .200 -8 796 11 .429 1 677 3. 407 0 643 1796 77

150 6 .300 -7 837 10 .058 1 667 3 .

208 0 629 1723 61

151 5 .400 -7 075 9 .089 1 490 3 .

049 0 616 1668 90

152

B .BOO -6 .426 8 .346 1 433 2. 912 0 602 1623 42

153 5 .600 -B .866 7 .786 1 393 2. 794 0 688 1585 91

154 6 .700 -B .360 7 .346 1 366 2. 688 0 574 1653 11

155

B .800 -4 .943 7 .013 1 .349 2. 600 0 661 1528 .73

156 E .900 -4 .611 6 .776 1 .339 2. 531 0 649 1613 .36

311
157

158 159

D AAA . 000 -4 . 261 6 . 551 1 .333 2 457 0 . 536 1494 .40

47 0 . 315 4 (mx, y, iy)

160 1 . BOO 11 . 585 0 . 000 3 . 404 0 000 0 .298 0 .00

161 1 . 600 11 . 945 0 . 000 3

A C O

0 000 0 .304 0.00

162 1 .700 12 . 312 0 . 000 3

c A n . o09 A

0 000 0 .310 0.00

163 1 . 800 12 . 901 0 . 058 Q3 CQO . b92 A0 AAO 008 0 .319 1 .46

164 1 . 864 13 .423 0 . 1 3 AAA A0

A 4 A Olfl

165 1 A A 13 O A A. 309 0 . 812 o . DOU A

U

i111i i 0 . 325 21 .43

166 i

AArt

. 000 13 C A "7 1

A*T A . 070 • AQA OaK) AO

i14bAC 0 . 330 29 . 38

167 Z

^ AA lUU A AX'i A O A OdO 1 OCA 2b0 q3 7C A . f bO A

0 . 1 A7 10 r 0 . 336 3B . 47

168 o OA A •i A blo EI -1 A 1 q . 0 i. o AU . A0

qyj q

. 343 A C AO 45 . 08

169 2. O AA dOO 14 A O

1 Tec loo q ft70 AU . 0 . 349 B2 . 83

170 2

/I A A 400 15 2A O O 038 q . vto A

U . 2bo 0 . 356 62 . 83

171 2. C A A bOO 16 167 2 460 A q o . 03Z A

U . 30b q AC 0 365 77 . 30

172 Z AAA GOO lo A A O 963 3

A O 037 A

. loo AO . JOq A71 0 367 96 . 76

173 2

"T A A 700 17 A A O 928 3 794 f OCQ . 2bo AO . AAA 0 388 121 . 93

174 2

O A A 800 A A 19 A O A 089 4 AAA 900 •1 AU . OOO CCA 0 403 1B7 . 89

175 2

O A A 900 OA20 6a A A 61^ A*± KBO AU . TOO 0 421 212 . 14

176 i AAA 000 O A 21 o o o 832 9

A O A 680 At . r Ol A1 . Ai O 012 0 445 307 . 84

177 i

^ AA 100 OA20 OCA lb 031 At . o2b A1 . bbo C C Q A

0

A on 469 ^ O A A A 489 . 44

178 3 OAA 200 A it 16 O A A 329 A A 16 746 A

. ^bo A1 . o f 9 0 465 AAA >1 A 609 .42

179 3 300 13 867 17 334 Art OAA o2 . AAi Oftl 0 464 AAA A *T 682 . 67

180 3

^ A A 400 10

.

827 16 T O "T 737 q3 QOO 922 o2 . H134qA 0 455 73B . 39

181 3 BOO 9

.

653 15 298 q3

"TOA f 2^ o2 . ACA Ob% 0 439 728 . B8

182 3 600 9 242 14 445 q3

A q q 033 A1 . 988 0 428 72B.50

183 3 700 9 094 13 968 q3

C O Q bo9 A1 . AAA 940 0 422 ^ A A A A 729 . 80

184 3 800 9 095 13 734 q3

C*7C b r b

A1 . OO i 921 0 419 739 . 7B

185 3 900 9

.

212 13 739 q3 boo A1 . cn914A 0 419 7B6 .76

186 4 000 9 427 13 973 q3

A02bO C AX . 007 92 1 0 422 781 .41

187 4 100 9 723 14 492 q3 AQA 000 A1 . QA A 900 0 429 816 . 92

188 4

Oi A A 200 10 065 15 387 3

•7*70 772 2

.

A /I A 040 0 440 868 . 37

189 4 300 10 362 16 868 3 883 2

.

172 0 456 946 . 63

190 4 400 10 266 19 139 3 . 999 2

.

393 0.479 4 A A ^ A A 1067 .23

191 4 BOO 9 029 22 204 4 . 062 2

.

733 0 509 1246 .64

192 4 600 5 766 25 299 3 . 982 3

.

177 0 544 1481 . 12

193 4 700 0 383 26 540 3 . 669 3

.

617 0 579 1722 .91

194 4 800 -4 850 24 805 3 . 196 3

.

881 0 609 1888.25

195 4 900 -8 451 21 238 2 . 684 3

.

957 0 633 1965 .08

196 5 000 -9 954 16 908 2 . 198 3

.

845 0 648 1948 .84

197 E 100 -9 460 13 534 1 . 878 3

.

604 0 647 ^ AAA 1862 .86

198 5 200 -8 520 11 454 1 .696 3. 376 0 637 1779 .44

199 B 300 -7 656 10 078 1 .581 3. 187 0 624 1712 .04

200 B 400 -6 940 9 074 1 .497 q3 . A q A 030 0 612 1658 .54

201 B BOO -6 308 8 313 1 .437 2 . 893 0 598 1613.01

202 B 600 -5 765 7.734 1 .393 2. 776 0 585 1575.68

203 B 700 -5 255 7 296 1 .367 2. 669 0 570 1B41 .99

204 B 800 -4 814 6 967 1 .352 2. 577 0 556 1514.99

205 B 900 -4 471 6 698 1 338 2. 502 0 544 1496.52

206 207

208

6 000 -4 156 6 583 1 347 2. 443 0 B31 1486.00

46 0 419 5 (mx, y. iy)

209 1 BOO 11 160 0 000 3 341 0. 000 0. 291 0.00

312
210 1 .600 11 .412 0 .000 3 .378 0

.

, 000 0 . 295 0 . 00

211 1 .700 11 .709 0 .000 3 .422 0

.

, 000 0 . 300 0 . 00

212 1 .800 12 .106 0 .000 3 .479 0

.

, 000 0 . 308 0 . 00

213 1 .900 12 .669 0 .018 3 .559 0

.

, 003 0 . 315 0 . 49

214 2 .000 13 .423 0 .431 3 .664 0

.

,059 0 . 326 11 . 010 X 215 2 .100 13 .678 0 .736 3 . 686 0

.

, 100 0 . 329 ^ X . ^ X 216 2 .200 14 .022 1 .003 3 .747 0

.

, 134 0 . 335 29 . 86

217 2 .300 14 .662 1 .367 3 .820 0

.

, 178 0 . 343 41 .40

218 2 .400 16 .016 1 .700 3 .881 0

.

,219 0 . 350 63 .29

219 2 .500 15,.582 2 .120 3 .957 0

.

,268 0 . 353 67 . 88

220 2 .600 16,.279 2 .581 4 .047 0

.

,319 0 . 367 84 . 03

221 2 .700 17,.103 3 .202 4 . 154 0

.

, 385 0 . 378 105 .49

222 2 .800 18 .100 4 .037 4 .280 0

.

,472 0 .391 133 . 82

223 2 .900 19 .273 6 .279 4 .430 0

.

, 596 0 .406 175 . 12

224 3 .000 20 .691 7 .236 4 .605 0,,786 0 .425 238 . 89

225 3 .100 21 .679 10 .694 4 .778 1

,

, 119 0 .448 351 . 61

226 3 .200 19 .457 16 .439 4 .706 1

.

,840 0 .488 532 . 03

227 3 .300 16 .873 16 .459 4 .401 1

.

,870 0 .461 626 .45

228 3 .400 13 .237 17 .043 4 . 172 2.,042 0 .480 703 . 86

229 3 .BOO 10 .814 16 . 101 3 .887 2., 071 0 .448 734 . 87

230 3 .600 9 .940 14 .982 3 .736 2

.

, 005 0 .435 731 . 61

231 3 .700 9 .622 14 .365 3 .668 1

,

, 958 0 .427 734 . 32

232 3 .800 9 .616 14 .069 3 .640 1

.

, 931 0 .424 743 , 92

233 3 .900 9 .649 14 .006 3 ,640 1

.

,924 0 .423 780 .47

234 4<.000 9 .696 14 .201 3 .067 1

.

,936 0 .426 785 .08

235 4,,100 9..942 14 .663 3 .719 1. 971 0 .431 819 .31

236 4,.200 10,.229 16,.482 3,.794 2. 040 0 .441 868 .66

237 4,.300 10,.619 16,.848 3,.897 2. 161 0,.456 941 .92

238 4.,400 10,.630 18,.973 4,.014 2. 363 0,.477 1053 .94

239 4.,600 9..587 22..083 4,,103 2. 691 0,.507 1227 .63

240 4.,600 6,.468 25.,594 4.,054 3. 157 0,.543 1471,.88

241 4..700 0

,

.644 27.217 3..733 3. 646 0,,582 1736.73

242 4,,800 -6..043 26..014 3..200 3. 909 0.,611 1901,.83

243 4.,900 -8,.234 21..217 2..696 3. 937 0..630 1955..15

244 &.,000 -9.,614 17..074 2..234 3. 822 0,.643 1936,,79

245 5..100 -9..238 13..861 1

,

.926 3. 598 0,.642 1860,,13

246 5

.

.200 -8..428 11..775 1..740 3. 384 0,.633 1783.,80

247 6..300 -7,,643 10.,329 1,,613 3. 201 0..622 1719..58

248 5..400 -6.,964 9..277 1

.

,623 3. 047 0..611 1687.,58

249 6.,600 -6. 334 8.,469 1.,466 2. 908 0.,598 1621.,01

250 6.,600 -6. 765 7.,828 1.,406 2. 783 0.,584 1B79.,54

251 B

,

,700 -6.,259 7..365 1.,377 2. 675 0.,570 1545,,40

252 B

.

800 -4.,787 6.,985 1. 357 2. 574 0.,555 1513.,42

253 B

.

, 900 -4

.

466 6. 767 1. 360 2. 507 0.,543 1499.,39

254 6

.

.000 -4., 124 6.,602 1. 353 2. 440 0.,629 1483.,96

255

256 46 0

.

,491 6 (mx, y, iy)

257 1

.

, BOO 10

.

,780 0.,000 3.,283 0. 000 0.,284 0. 00

258 1.,600 11.,080 G.,000 3.,329 0. 000 0.,289 0.,00

259 1.,700 11.,344 0.,000 3.,368 0. 000 0.,294 0.,00

260 1,,800 11..676 0..000 3.,417 0. 000 0.,299 0.,01

261 1,,900 12..089 0..000 3.,477 0, 000 0.,308 0.,02

202 2.,000 12..659 0..016 3.,558 0. 002 0..315 0.46

313
263 2 .100 13 .423 0 .647 3 .666 0 088 0 .327 18 .80

264 2 .200 13 .639 0 98& 3 .696 0 133 0 .330 29 .72

265 2 .300 14 .IIB 1 234 3 .761 0 164 0 .337 38 .25

266 2 .400 14 .68B 1 671 3 .838 0 205 0 .346 49 .79

267 2 .BOO IB .176 1 914 3 .903 0 246 0 .352 62 .12

268 2 .600 IB .797 2 331 3 .986 0 292 0 .361 77 .07

269 2 .700 16 .B2B 2 900 4 .081 0 366 0 .371 97 .24

270 2 .800 17 .411 3 596 4 .195 0. 429 0 .382 121 88

271 2 .900 18.445 4 623 4 .328 0. 534 0 .396 156 98

272 3 .000 19 629 6 132 4 483 0. 684 0 413 207 .96

273 3 .100 20 801 8 624 4 654 0. 926 0 433 291 11

274 3 .200 20 801 12 736 4 753 1. 340 0 456 434 48

275 3 .300 17 419 16. 823 4 525 1. 748 0 461 684 80

276 3 .400 14 746 16. 502 4 294 1. 922 0 468 662 21

277 3 .BOO . 12 074 16. 529 4 034 2. 049 0 454 726 82

278 3 .600 10 634 15. 419 3 822 2. 017 0 440 736 17

278 3 .700 9 992 14. 670 3 724 1. 969 0 431 738 60

280 3 800 9 771 14. 294 3 680 1. 942 0 427 748 01

281 3 900 9 737 14. 190 3 671 1. 933 0 426 764 12

282 4 000 9 821 14. 346 3 688 1. 946 0 427 788 49

283 4 100 9 996 14. 768 3 730 1. 980 0 433 822 67

284 4 200 10 237 15. 640 3 798 2. 046 0 442 871 00

285 4 300 10 602 16. 815 3 894 2. 169 0 456 941 02

286 4 400 10 647 18. 847 4 009 2. 361 0.476 1048 33

287 4 BOO 9 762 21. 916 4 107 2. 668 0 506 1216 88

288 4 600 6 678 25 324 4 072 3. 147 0 543 1467 13

289 4 700 0 636 27. 202 3 731 3. 646 0 682 1736 48

290 4 800 -B 044 24. 850 3 187 3. 899 0 611 1896 86

291 4 900 -8 024 20. 971 2 686 3. 904 0 627 1938 84

292 5 000 -9 278 17. 038 2 230 3. 787 0 639 1919 09

293 B .100 -9 003 13. 967 1 951 3. 579 0 637 1850 21

294 5 .200 -8 301 11. 910 1 763 3. 378 0 630 1780 31

295 5 ?00 -7 673 10. 444 .1 632 3. 199 0 620 1718 78

296 5 .400 -6 923 9. 330 1 632 3. 045 0 609 1666 52

297 5 .BOO -6 293 8. 487 1 462 2. 903 0 696 1818 56

298 5 .600 -B 733 7. 849 1 412 2

.

780 0 583 1677 75

299 E .700 -B 206 7. 361 1 379 2. 666 0 568 1640 12

300 B .800 -4 766 7. 018 1 364 2. 572 0 663 1512 16

301 B .900 -4 ,344 6. 790 1 363 2. 490 0 637 1489 38

302

303 304

6 .000 -3 983 6. 608 1 366 2. 418 0 623 1470 81

46 0 590 7 (mx, y. iy)

305 1 .BOO 10 .480 0 000 3 237 0. 000 0 279 0 00

306 1 .600 10 .721 0 000 3 274 0. 000 0 283 0 00

307 1 .700 10 973 0 000 3 313 0. 000 0 288 0 00

308 1 .800 11 .247 0. 000 3 364 0. 000 0 292 0 00

309 1 .900 11 .591 0. 000 3 406 0. 000 0 298 0 00

310 2 .000 12 017 0. 000 3 487 0. 000 0 306 0. 01

311 2 .100 12 675 0. 034 3 546 0. 005 0 314 1. 03

312 2 .200 13 380 0. 458 3 658 0. 063 0 326 13. 96

313 2 .300 13 699 0. 931 3 690 0. 126 0 329 29.43

^14 2 .400 14 097 1. 181 3 758 0. 157 0 337 38. 23

315 2 .BOO 14 682 1. 674 3 837 0. 206 0. 345 61. 97

314
316 2 AAA 600 16 . 208 2 .047

317 2

•7 AA 700 16 . 837 2 .532

318 2

O A A 800 16 800 3 140

3ie 2 . 900 17 493 3 .936

320 3

.

000 18 517 6 070

321 3

.

100 19 663 6 784

322 3

.

200 20 660 9 557

323 3

.

300 19 663 13 530

324 3 400 16 642 16 .536

325 3 500 14 137 18 265

326 3 600 11 .804 15 .923

327 3 700 10 .713 16 .077

328 3 800 10 .287 14 .581

329 3 900 10 .131 14 .417

330 4 000 10 .113 14 . 518

331 4 100 10 .210 14 .870

332 4 200 10 .403 15 .664

333 4 300 10 . 647 16 . 723

334 4.400 10 . 746 18 . 612

335 4 BOO 10 . 194 21 .592

336 4 600 7 .326 26 .601

337 4 700 1 .071 27 .219

338 4 800 -4 .574 24 .901

339 4 900 -7 .663 21 .268

340 g 000 -8 .921 17.386

341 c 100 -8.797 14 .375

342 co -8 .246 12 .245

343 5 300 -7 .589 10 .682

344 co Ann -6 .945 9 .504

345 6 BOO -6 .321 8 .600

346 5 600 -6 .732 7 .920

347 6 700 -B .195 7.413

348 5 800 -4 .701 7 .030

349 5 900 -4 .301 6 .810

350

351

6 000 -3 .936 6 .704

352 46 0 .700 8

353 1 600 9 .940 0 .000

354 1 600 10 .161 0 .000

355 1 700 10 .398 0 .000

356 1 800 10 .636 0 .000

357 1 900 10 .928 0 .000

358 2 .000 11 .294 0 .000

359 2 .100 11 .728 0 .001

360 2 .200 12 .262 0 .003

361 2 .300 12 .924 0 .016

362 2 .400 13 .663 0 .513

363 2 .600 14 .012 0 .969

364 2 .600 14 .582 1 .408

365 2 .700 16 .200 1 .913

366 2 .800 16 .806 2 .448

367 2 .900 16 .538 3 .058

368 3 .000 17 .393 3 .857

3

.

909 0. 262 0 353 69 00

3

.

992 0. 317 0 382 88 80

4. 092 0. 384 0 372 108 87

4. 208 0. 468 0 384 137 44

4. 343 0. 684 0 399 177, 51

4. 497 0. 764 0 416 237. 00

4. 649 1. 028 0 436 333 35

4. 665 1. 460 0 454 485 03

4. 429 1. 764 0 456 604 41

4. 224 1. 924 0 466 882 35

3. 977 2. 002 0 447 730 58

3. 822 1. 973 0 437 739 80

3. 750 1. 944 0 431 748 73

3. 725 1.935 0.428 765 00

3. 729 1. 947 0 430 789 30

3. 768 1. 978 0.434 822 15

3. 815 2.038 0 442 867 72

3. 903 2. 142 A

0 45o 933 67

4. 015 2. 318 A0 4r4 1033 .77

4. 127 2. 616 A0

C A*^ 1193 .05

4. 120 3. 107 AU

C A-l 1448 .53

3. 782 3. 617 A b f y 1723 .21

3. 221 ,3. 886 A

u OU f 1880 .90

2. 740 3. 881 Au

AO'S . Olio 1927 .50

2. 304 3. 772 Au . OO^ 1911 .84

2. 007 3. 581 AU

A ^ Q 1851 .26

1

.

806 3. 392 AU . 62 r 1787 .75

1

.

661 3. 217 AU

A^ Q 1727 .95

1

.

663 3 059 A

u

A AO 1674 .41

1. 475 2. 916 A . boo 1825 .05

1. 422 2. 785 A0 coo . bo2 1580 .61

1. 389 2. 889 0 567 1542 . 06

1. 370 2. 666 0 551 1507 .87

1. 370 2.485 0 535 1486 .39

1. 385 2. 420 0 520 1471 .56

(mx, y, iy)

3. 153 0. 000 0 269 0 00

3. 188 0. 000 0 .273 0 00

3. 226 0. 000 0 277 0 00

3. 281 0. 000 0 .282 0 00

3. 306 0. 000 0 .287 0 00

3. 361 0. 000 0 .293 0 00

3. 425 0. 000 0 .300 0 .03

3 500 0.000 0 .309 0 .09

3 595 0 002 0 .319 0 .51

3 696 0 069 0 .330 16 .89

3 746 0 129 0 .335 32 .78

3 823 0 184 0 .344 48 .64

3 906 0 246 0 .363 67 .10

3 . 987 0 307 0 .361 87 .06

4 084 0 374 0 .371 110 .04

4 196 0 460 0 .383 139 .75

315
369 3 .100 18 .378 4 .965 4 .325 0 574 0 .397 180 .35

370 3 .200 19 .4B0 6 .576 4 .471 0 735 0 .413 238 .51

371 3 .300 20 .334 9 .049 4 .615 0 980 0 .432 327 .96

372 3 .400 19 .926 12 .658 4 .665 1. 357 0 .450 467 .51

373 3 .BOO 17 464 IB .104 4 .502 1 678 0 .456 596 .12

374 3 .600 IE 128 16 .217 4 319 1. 877 0 .457 686 .06

375 3 .700 12 864 16 356 4 103 1. 993 0 .453 747 .43

376 3 .800 11 660 IB 837 3 947 2. 006 0 .446 772 .81

377 3 .900 10 928 16 538 3 868 2. 009 0 .442 793 .97

378 4 .000 10 S20 16 616 3 836 2. 023 0 442 820 09

379 4 .100 10 487 16 766 3 835 2. 066 0 444 864 10

380 4 .200 10 602 16 330 3 868 2. 111 0 450 898 74

381 4 .300 10 696 17 349 3 932 2. 206 0 481 961 61

382 4 .400 10 632 19 053 4 028 2. 365 0 478 1064 .80

383 4 .600 10 180 21 908 4 142 2. 645 0 604 1208 .30

384 4 .600 7 263 26 106 4 144 3. ISO 0 644 1468 .60

385 4 .700 0 897 27 338 3 768 3. 637 0 681 1732 .66

386 4 .800 -4 618 24 762 3 214 3. 853 0 606 1874 61

387 4 .900 -7 292 21 512 2 777 3. 873 0 620 1923 76

388 6 .000 -8 809 17 839 2 354 3. 788 0 632 1919 97

389 B .100 -8 906 14 834 2 049 3. 620 0 634 1871 32

390 E .200 -8 B26 12 699 1 829 3. 445 0 632 1816 84

391 5 .300 -7 924 10 863 1 682 3. 269 0 626 1756 01

392 B .400 -7 216 9 672 1 645 3. 098 0 616 1695 93

393 B .BOO -6 641 3 613 1 462 2. 946 0 603 1642 26

394 B .600 -B 908 7 903 1 407 2, 809 0 589 1694 16

395 B .700 -B 337 7 391 1 376 2. 688 0 673 1663 18

396 E .800 -4 796 7 046 1 365 2. 581 0 664 1617 .16

397 B .900 -4 348 6 811 1 368 2. 493 0 637 1490 .74

398

399 400

6 .000 -3 991 6 683 1 377 2. 426 0 623 1476 .64

46 0 804 9 (mx, y, iy)

401 1 .BOO 9 761 0 000 3 124 0. 000 0 266 0 00

402 1 .600 9 902 0 000 3 147 0. 000 0 268 0 00

403 1 .700 10 068 0 000 3 173 0. 000 0 271 0 00

404 1 .800 10 261 0 000 3 202 0. 000 0 27B 0 00

405 1 .900 10 472 0 000 3 236 0. 000 0 .279 0 00

406 2 .000 10 739 0 000 3 277 0. 000 0 .283 0 00

407 2 .100 11 038 0 000 3 322 0. 000 0 .289 0 00

408 2 .200 11.408 0 .000 3 378 0. 000 0 295 0 00

409 2 .300 11 .834 0 019 3 440 0. 003 0 .302 0 64

410 2 .400 12 .382 0 025 3 519 0. 004 0 311 0 87

411 2 .BOO 13 217 0 096 3 636 0. 013 0 323 3 30

412 2 .600 13 964 0 778 3 733 0. 104 0 334 27 42

413 2 .700 14 31B 1 217 3 787 0. 161 0 340 43 98

414 2 .800 14 948 1 586 3 872 0. 205 0 349 68 12

416 2 .900 IB 613 2 190 3 961 0. 276 0 368 81 26

416 3 .000 16 281 2 859 4 060 0. 353 0 368 107 31

417 3 .100 17 072 3 632 4 155 0. 437 0 379 137 32

418 3 .200 18 001 4 626 4 277 0. 541 0 392 176 38

419 3 .300 19 007 6 042 4 413 0. 686 0 407 228. 97

420 3 .400 20 017 8 123 4 662 0. 890 0 426 306 82

421 3 .BOO 20 339 11 193 4 667 1. 199 0 444 426. 46

316
422 3 600 18 84B 14 406 4 613 1. 661 0 466 669. 68

423 3 700 16 603 16 240 4 462 1 820 0 462 682. 44

424 3 800 14 .1B2 17 181 4 267 2 013 0 463 775 50

425 3 900 12 .25B 17 069 4 078 2 092 0 459 826 82

426 4 000 11 .207 16 793 3 962 2 119 0 456 859 20

427 4 100 10 .643 16 737 3 904 2 144 0 455 890 89

428 4 200 10 .392 17 002 3 893 2 183 0 458 929 51

429 4 300 10 .334 17 723 3 928 2 256 0 465 983 42

430 4 400 10 .323 19 127 4 004 2 389 0 479 1065 33

431 4 BOO 9 .941 21 704 4 112 2 639 0 503 1203 83

432 4 600 7 .082 2B 692 4 107 3 128 0 642 1458 44

433 4 700 1 .23B 26 869 3 761 3 682 0 .676 1706 48

434 4 800 -3 .720 24 346 3 233 3 766 0 .597 1831 .69

435 4 900 -6 .E24 21 616 2 833 3 .816 0 .612 1894 .58

436 5 000 -8 .274 18 2B6 2 .426 3 .763 0 .625 1907 .01

437 6 100 -8 .768 16 .338 2 .110 3 .635 0 .631 1878 .88

438 5 .200 -8 .628 12 .909 1 .857 3 475 0 .633 1831 .74

439 E .300 -8 .089 10 .939 1 .661 3 .293 0 .629 1769 .26

440 5 .400 -7 .300 9 .489 1 .628 3 .104 0 .619 1699 .08

441 5 .BOO -6 .617 8 .496 1 .447 2 .936 0 .604 1636 .04

442 B .600 -B .837 7 .808 1 .399 2 .792 0 .587 1584 .53

443 5 .700 -B .237 7 .307 1 .370 2 .667 0 .670 1540 .88

444 5 .800 -4 .722 6 .931 1 .354 2 .560 0 .562 1505 .06

445 B .900 -4 .267 6 .729 1 .360 2 .473 0 .634 1479 .16

446 6 000 -3 .931 6 .689 1 .368 2 .409 0 .620 1464 .84

447

317
6.6.8 W.GA_P

1

2 Optical Properties of: Galliiun Phosphide (GaP)

3

4 1) Ezmdbook of Optical Constants,

5 edited by Edward D. Palik,

6 (Academic Press, Inc., Orlando, 198B)

7

8 2) D.E. Aspnes & A. A, Studna,

9 Physical Review B, Volume 27, Nximber 2, 1983 January 15.

10 Pages: 985-1009.

IX

13 E(eV), n, Tn R. alpha* 1.0E3 ( 14

15 =h= ' indicate end of header information

16 156 ' quantity of lines of data

17 1. 500 3

.

178 0. 0 0.272 0.0

18 1. 54 3

.

191 0. 0

19 1. 600 3

.

209 0. 0 0.275 0.0

20 1. 64 3. 219 0. 0

21 1. 700 3

.

234 0. 0 0.278 0.0

22 1

.

74 3. 245 0. 0

23 1

.

800 3, 262 0. 0 0.282 0.0

24 1

.

84 3. 275 0. 0

25 900 3 295 0

.

0 0.286 0.0

26 1. 94 3. 311 0. 0

27 2. 000 3. 334 0. 0 0.290 0.0

28 2. 04 3. 350 0. 0

29 2. 100 3 375 0. 0 0.295 0.01

30 2. 14 3 393 0. 0

31 2. 18 3 411 2. 8E-7

32 2. 200 3 421 1. 4E-6 0.3 0.04

33 2. 22 3 430 3. lE-6

34 2. 24 3 441 2. 7E-6

35 2. 26 3 452 6. 2E-5

36 2. 28 3 463 1. 3E-4

37 2 300 3 474 2. 5E-4 0.306 0.36

38 2 34 3 497 5. 5E-4

39 2 400 3 535 1. lE-3 0.312 0.86

40 2 44 3 561 1 6E-3

41 2 48 3 .590 2 47E-3

42 2 500 3 .605 2 54E-3 0.320 1.63

43 2 64 3 .638 3 lE-3

44 2 600 3 .691 5 5E-3 0.329 2.94

45 2 64 3 .730 1 5E-2

46 2 700 3 .805 2 7E-2 0.341 7.52

47 2 .72 3 .835 3 5E-2

48 2 .74 3 .869 5 7E-2

49 2 .76 3 .896 8 5E-2

50 2 .78 3 .904 0 103

318
51 2 800

qw Q117 X

Q9 AU 11101 n

AW obz q CO

52 2 82

qo 9 U 1lOb^c

53 2 84 3 . 9 O Z V

*i

qi3 . 9U^A 1iwbAC

55 2 88

q•3 • Q7fi 9 f UA\) 1 7fl 1 r o

56 £t www

q 99VJ

AU 1loofi q

AqAA OOU COQA

57

A (^r> UUDA

AU 1 OA

58

A rio

qAO AO Z\jZ 59 OA A u O AQ

60 Qfi

A ft ArtAu 0 1 Q 2io

61

QAft .

uoi

Au OOA zzt f\QqA o OOo Go . Jo

62 o«3 wZ

A 1XW2no

Au oqq ZoS

63

qo Uf

A i OAA OAA

64 o

i3

A 1 A7

Au OC^ ZbO

65 3 wo

A 111

A OAA

66 o

.3 X\J\i

A 1l90QA

A 07C Zl o AW OoU qQAQODA Ofi . zo

67 1 o A OOO

Au ORC .cob 68 Qo 1^ A O.CtAO9 A OQS Zvo

60 3 10

A 07QAUq 1 A . OlU

70 . lo

Aq AO oUoAq o q . ozo

71 3 A

qqQAqq 7 . oO rAq o A 4 AQ OC

72 3

q*70 SI Z u

q c q . obo

73 oo Art AAA ftUO

A . OOo q AQ

74

QA AAO ftfizA qoQ . OOO

75 •a OQ

A 1 1 9 A . AA7 "iw 1 78 qJ A blQ A . AOt^OA

A . A1*X 1 Aw

77 qo . <3Z

A CA

A . bou

AU AAQ

78

q qAAft AAA

AU . A7C t r b

79

qqAA ACObi1 A . DwO cn^

80

qo qQA 7 A

A

A\) • K7A Dot

81

qA . 7C1 f b 1 AU • OOO

AW . tO

XX 9 O

Ov

82

q

A . RAC OwO

A • u

w o

83

q AAA .Owl

AV fi4Q

84

q AA

A > 9 z w 0 . 697

85

q . Anto

A"t . 900

AV 7^?

86

q o . wow 0 . 819 0 .458 290 .40

87

q•3 o 1 "71 1 Z X

V . 893

88

qO CA cD 1l9*t QA

A . 90Z

89

q . bo co . OAS <£00 . W09

90 3 . 58

b

qq o . OOO 1 01 7 . 21 1

91 3 . 600

b . AAA tuo 1 . OwO

Aw .few 499 . 04

92 3 AO . 62

b . ACA ftbt • ODw Kcn

93 3 A ^ . O^

b .tlA70Z • 7fiR f WW

94

qAA . 00 co A^7 . 010

95 3 . 68

b qoQ • zow

96

q3 . (\J\)

b . 11*Z9 AQ . 451X 0 . 530 919 .21

07

q •70

A*t • Q97 9Z r as . 585

98 3 . 74

A 7 A

A . wfrw

99 3 .76 4 .497 2 .649

100 3 .78 4 .328 2 .615

101 3 .800 4 .196 2 .562 0 .500 986.69

102 3 .82 4 .095 2 .502

103 3 .84 4 .021 2 .443

319
104 3 .86 3.966 2 .389

105 3 .88 3.923 2 .343

106 3 .900 3.890 2 .303 0 .467 910 . 55

107 3 .94 3.840 2 .240

108 4 .000 3.790 2 .171 0 .452 880 . 10

109 4 .04 3.769 2 .137

110 4 .100 3.752 2 .100 0 .444 872 59

111 4 .14 3 .748 2 .082

112 4 .200 3.754 2 .063 0 .441 878 . 38

113 4 .24 3.765 2 .057

114 4 .300 3.792 2 .058 0 .442 896 . 99

115 4 .34 3.817 2 .066

116 4 .400 3.867 2 .090 0 .449 932 . 14

117 4 .44 3,907 2 . 117

118 4 .500 3.978 2 , 180 0 .461 994 .27

119 4 B4 4.031 2 .241

120 4 600 4.113 2 371 0 482 1105 . 61

121 4 62 4.137 2 427

122 4 64 4.158 2 491

123 4 66 4.173 2 560

124 4 68 4.181 2 634

125 4 700 4.181 2 712 0 511 1291 94

126 4 72 4. 173 2 791

127 4. 74 4.157 2. 871

128 4. 76 4.132 2

.

949

129 4. 78 4.100 3

.

024

130 4. 800 4.062 3. 096 0. 539 1506. 17

131 4. 82 4.018 3. 162

132 4. 84 3.970 3. 218

133 4. 86 3.923 3. 269

134 4. 88 3.880 3. 316

135 4. 900 3.844 3

.

358 0

.

557 1667

.

57

136 4. 92 3.806 3

.

404

137 4. 94 3 .774 3

.

454

138 4. 96 3.739 3

.

509

139 4. 98 3.701 3

.

567

140 5. 000 3.661 3

.

631 0

.

580 1839

.

99

141 5

.

02 3 . 615 3

.

698

142 5

.

04 3.561 3

.

768

143 5

.

06 3 .498 3

.

839

144 5

.

08 3 .424 3

.

909

145 5

.

100 3 .342 3

.

975 0 • 614 20K4 74

146 5

.

12 3 . 248 4

.

036

147 6

.

14 3 . 144 4

.

086

148 5

.

16 3.036 4

.

123

149 S

.

18 2 .930 4, 150

150 5. 200 2 . 825 4, 170 0 647 ^ X 17 f 151 5. 22 Z • r t

.

loo

162 6. 24 2.607 4. 197

183 B. 26 2.490 4. 201

154 5. 28 2.368 4. 192

155 6.300 2.248 4. 168 0. 678 2239. 10

156 5. 32 2.134 4. 128

320
157 5.,34 2..028 4,,077

158 5.,36 1,.936 4,.019

159 E. 38 1

,

.8E1 3,.9EE

160 5,,400 1,.778 3..889 0. 689 2128.87

161 S..44 1..860 3.,7B2

162 5. EGO 1,,E43 3,,BE6 0. 677 1982. B3

163 5.,E4 1,.494 3,.441

164 5,,600 1..444 3..297 0. 6B7 1871.33

165 B..64 1..418 3..211

166 5,.700 1,.38E 3 .096 0.,637 1788.84

167 E..74 1,.368 3 .028

168 E,.800 1 .348 2 .934 0..618 1724.82

169 E .84 1 .342 2 .882

170 E .900 1 .327 2 .803 0,.600 1676.14

171 E .94 1 .327 2 .766

172 6 .000 1 .309 2 .690 0,.E83 163E.71

173 ' indicate end of information

321
6.6.9 W.GA_SB

1 —

2 Optical Proporties of: Gallium Antimonido (GaSb)

3

4 D.E. Aspnes Ic A. A. Studna,

5 Physical Reviaw B, Voliune 27, N-umber 2, 1983, January, 15.

e Pages: 985-1009,

7

IS9

1 n

1

1

<el>. <e2>

,

k. a. axpna^x a *! -nVi n :k 1

.

=h== indicate end of header information

4fi quantity of lines of data

13 1 . 500 19 . 135 3 .023 4 388 0 344 0 .398 52 . 37

14 1 . 600 20 137 3 .752 4 507 0.416 0 409 67 . 51

1

5

1 . 700 21 . 322 4 .503 4 643 0 485 0 .421 83 . 56

16 1 . 800 22 . 826 5 .889 4 817 0 611 0 437 111 . 53

17 1 . 900 24 . 836 8 .373 S 052 0 829 0 458 159 59

1 A 2 .000 . 545 O 3w 14 .442 5 239 1 378 0.487 279 . 43

1 Q 2 . 100 . OvO 18 .933 4 705 1 803 0 474 383 . 74

2 . 200 1 7 . .M* O U 15 .794 4 521 1 747 0 461 389 , 54

2 . 300 . 980 16 .069 4 492 1 789 0 461 416 , 97

22 2 .400 .WAX 521 17 .708 4 513 1 962 0.473 477 . 22

23 2 . 500 1 3 3fi7 19 .705 4 312 2 285 0 484 579 .07

*•* 2 . 600 1X ftV U B D 18 .172 3 984 2 280 0 470 600.94

25 2 . 700 Q 16 .966 3 836 2 211 0 457 605 , 14

9 A 5 800 Q9 . *XO*X 16 .216 3 760 2 157 0 449 612 , 05

0*7 2 ( o Qfin Q ^QQ 15 .810 3,728 2 121 0 445 623.34

23 QV . TC f y 15 .738 3 732 2 109 0 444 fi41 20

29 o . lUU n

V . DZO 16 .070 3 766 2 134 0 448 fi7ft 4K

30

r\V . 558 18 .797 3 800 2 210 0 456 71r XQft

. S20^

31 •9 . OUU 9 . 121 17 .658 3 808 2 319 0 465 77K (KO

32 O AAA 8 .490 18 .440 3 794 2 430 0 475 R'57r . 33 A . bUO 7 .852 19 .267 3 785 2 545 0 485 QftO V\J^ fiA . oO

34 3 . 600 7 .011 20 ,306 3 774 2 690 0 497 Vol . Ot

35 3.700 5 .853 21 .453 3,748 2 862 0 512 1073.44

36 3.800 4 .281 22 .719 3 701 3 069 0 530 1182.10

37 3.900 2 .058 24 .057 3 620 3 323 0 553 1313.68

38 4.000 -1 .374 25 .138 3 450 3 643 0 583 1477.21

39 4.100 -6 .203 24 .648 3 100 3 976 0 820 1652.40

40 4.200 -10 .699 20 .831 2 522 4 130 0 658 1758.30

41 4.300 -11 .435 IB .607 1 989 3 923 0 673 1709.93

42 4.400 -10 .186 12 .500 1 723 3 628 0 665 1618.09

43 4.500 -8 .989 10 .763 1 586 3 392 0 651 1547.17

44 4.600 -8 .031 9 .642 1 503 3 208 0 837 1495.68

45 4.700 -7 .249 8 .823 1 444 3 .055 0 .623 1455.44

46 4.800 -6 .594 8 .244 1 .408 2 .928 0 .608 1424.76

47 4.900 -6 .079 7 .846 1 .387 2 829 0 .595 1405.00

48 5.000 -5 .693 7 .529 1 .369 2 .751 0 .585 1394.02

49 5.100 -5 .365 7 .290 1 .358 2 .685 0 .575 1387.91

50 5.200 -5 .156 7 .173 1 .356 2 .645 0 .568 1394.03

322
51 5 300 -5 IBl 7.099 1 .345 2.638 0 568 1417 39

52 5 400 -5 353 6 . 890 1 .299 2.653 0 578 1452 17

53 5 500 -5 B27 6 .410 1 .212 2.645 0 592 1474 51

54 5 600 -5 497 B.866 1.127 2.602 0 601 1476 67

55 5 700 -B 297 B.385 1.062 2.535 0 602 1464 56

56 5 800 -5 102 B.070 1.022 2.479 0 601 1457 65

57 B 900 -B 002 4.814 0.985 2.444 0 603 1461 .49

58 6 000 -4 962 4.520 0.936 2.416 0 610 1469 .28

59 =li= indicate end of information

323
6.6.10 W.IN_AS

1

2 Optical Properties of: Indiim Arsenide (InAs)

3

4 D.E. Aspnas t A. A. Studna,

5 Physical Review B, Volume 27, Number 2, 1983, January, 15.

6 Pages: 985-1009.

7

0

910

1

1

E(e V). <el>, <e2>. n. alpha*! . (

=h= indicate end of header information

12 46 quantity of lines of data

13 1. 500 X o

QyJD 3 209 3 714 0 432 0 337 u b AQ0 0

14 1. 600 1 s USA 3 478 3 755 0 463 0 342 1 b X X

1

5

1. 700 It: 1XOlfil 3 .744 3 798 0 493 0 .347 fill vt

16 1. 800 bto 4 .083 3 851 0 530 0 .353 Q A 70

1 '7 1. 900 uxb 4 .481 3 917 0 572 0 .361 X xu 1XDA

18 2. 000 OOO 5 .062 3 995 0 634 0 .370 1xzoOR

19 2. 100 10 one 5 .820 4 088 0 .712 0 .380 ibi bxR1

20 2. 200 i A 1

0

Vol 6 .905 4 199 0 .822 0 .394 . 13.3 21 2. 300 1J. Ti 77 fk I 1 Q 8 .582 4 331 0 .991 0 .411

22 2. 400 11 .458 4 466 1 .283 0 .433 i3 X ^ . vO

23 2. 500 1X RD OOw 15 .592 4 .364 1 .786 0 .454 . fl4 u 7

2. 600 1 1X ^ D X X 15 .160 4 .021 1 .885 0 .441 TCI? 0

ZD 2. 700 1

1

0*30 15 .768 3 .911 2 .016 0 .445 00 X AR

Zo 2. 800 o . ^ 1 u 16 .010 3 .826 2 .208 0 .448

Z f 2. 900 aD 14 .211 3 .337 2 .129 0 .428 . w f 28 3. 000 KV 13 .003 3 .197 2 .034 0 .412 D X 0 4A

29 3. 100 co mi0<3X 12 .162 3 .108 1 .957 0 .400 Aid Q X^ flfl . 0 u

30 3. 200 b 11 .540 3 .051 1 .891 0 .389 A10x0^

31 3. 300 b

T Q C f Ob 11 .082 3 .018 1 .836 0 .381 D X*X X 0

32 3. 400 f-o

O O A 10 .753 3 .004 1 .790 0 .375 ADID1 A

33 3. 500 5 973 10 .550 3 .008 1 .754 0 .371 622 13

34 3. 600 6 197 10 .471 3 030 1 .728 0 .370 830 47

35 3. 700 6 478 10 .529 3 .069 1 .715 0 .370 643 29

36 3. 800 6 835 10 .754 3 .129 1 .719 0 .374 661 95

37 3. 900 7 254 11 .187 3 208 1 743 0 .382 689 18

38 4. 000 7 744 11 .919 3 313 1 79D 0 .393 729 23

39 4. 100 8 273 13 .130 3 449 1 903 0 .411 791 03

40 4. 200 8 663 15 .173 3 615 2 099 0 .437 893 42

41 4. 300 8 000 18 .639 3 761 2 478 0 .478 1080 14

42 4. 400 4 024 22 .171 3 644 3 042 0 .527 1356 76

43 4. 500 -1 663 22 .006 3 194 3 445 0 .566 1571 19

44 4. 800 -5 509 19 .372 2 705 3 581 0 593 1669 74

45 4. 700 -7 921 15 .762 2 205 3 £75 0 .817 1703 11

46 4. 800 -7 961 12 .077 1 803 3 349 0 622 1629 16

47 4. 900 -6 905 9 .909 1 608 3 081 0 605 1530 10

48 5. 000 -5 923 8 .752 1 524 2 871 0 583 1455 26

49 5. 100 -5 264 8 .107 1 484 2 732 0 .565 1412 38

50 5. 200 -4 .942 7 .600 1 438 2 646 0 .656 1394 86

324
51 6 300 -4 66B 6 980 1. 366 2 5BB 0 B50 1372 78

52 5 400 -4 278 6 42B 1. 312 2 449 0 B37 1340 B6

53 E BOO -3 8B1 6 008 1. 282 2 344 0 E21 1306 62

54 5 600 -3 424 B 738 1. 276 2 248 0 BOl 1275 94

55 5 700 -3 006 B BgB 1. 293 2 163 0 479 1249 73

56 5 800 -2 642 B 602 1. 333 2 102 0 459 1235 70

57 5 900 -2 430 B 764 1. 383 2 084 0 448 1246 25

58 6 000 -2 403 6 OBB 1. 434 2 112 0 448 1284 15

59 =h= indicate end of information

325
6.6.11 W.IN_P

1

2 Optical Properties o±: Indium Phosphide (InP)

3

4 D.E. Aspnes t A. A. Studna,

5 Physical Review B, Volume 27, Number 2, 1983, January, 15.

6 Pages: 985-1009.

7

8

9 E(eV), <el>, <e2>, n, k, R, alpha*1.0E3 (cm**-l)

10 • n =h== ' indicate end of header information

12 46 quantity of lines of data

13 1. 500 11. 904 1. 400 3 456 0 203 0 305 30 79

14 1. 600 11, 972 1 509 3 467 0 218 0 307 35 30

15 1. 700 12. 022 1. 680 3 476 0 242 0 308 41 64

16 1. 800 12. 120 1 889 3 492 0 270 0 310 49 34

17 1. 900 12. 284 2 062 3 517 0 293 0 313 56 44

18 2. 000 12. 493 2 252 3 549 0 317 0 317 64 32

19 2. 100 12 734 2 488 3 585 0 347 0 322 73 87

20 2, 200 13 026 2 755 3 629 0 380 0 327 84 65

21 2. 300 13 382 3 060 3 682 . 0 416 0 333 96 89

22 2. 400 13 812 3 425 3 745 0 457 0 341 111 25

23 2. 500 14 313 3 904 3 818 0 511 0 349 129 56

24 2. 600 14 899 4 524 3 903 0 579 0 360 152 71

25 2. 700 15 585 5 337 4 004 0 667 0 372 182 41

28 2. 800 16 365 6 482 4 121 0 786 0 386 223 21

27 2. 900 17 188 8 205 4 256 0 964 0 404 283 32

28 3. 000 17 759 10 962 4 395 1 247 0 427 379 23

29 3. 100 16 483 15 325 4 .415 1 735 0 454 545 30

30 3. 200 11 211 17 043 3 .976 2 143 0 458 695 23

31 3. 300 7 .911 15 .797 3 .576 2 209 0 446 738 76

32 3. 400 6 .639 13 592 3 .299 2 .060 0 .419 709 95

33 3. 500 6 .400 12 .443 3 .193 1 .948 0 .403 691 21

34 3 600 6 .312 11 .731 3 .133 1 .872 0 .391 683 12

35 3 700 6 .330 11 .266 3 .103 1 .816 0 .383 680 92

36 3 800 6 .432 10 .974 3 .095 1 .773 0 .378 682 .96

37 3 900 6 .616 10 .841 3 .108 1 .744 0 .376 689 .47

38 4 000 6 .874 10 .871 3 .141 1 .730 0 .376 701 .54

39 4 100 7 .205 11 .088 3 .196 1 .735 0 .380 720 91

40 4 200 7 .620 11 .539 3 .275 1 .762 0 .387 750 .02

41 4 300 8 .119 12 .358 3 .384 1 .826 0 .400 795 80

42 4 400 8 .644 13 .739 3 .527 1 .948 0 .419 868 69

43 4 500 8 .891 16 .161 3 .697 2 .186 0 .449 996 95

44 4 600 7 .484 20 .039 3 .800 2 .637 0 493 1229 .49

45 4 700 2 .292 22 .948 3 .560 3 223 0 543 1535 24

46 4 800 -3 .469 20 .989 2 .984 3 517 0 577 1711 26

47 4 900 -5 .868 17 .894 2 .546 3 514 0 591 1745 40

48 5 000 -7 .678 14 .896 2 .131 3 495 0 613 1771 52

49 5 100 -7 .787 11 ,483 1 .745 3 291 0 620 1701 26

50 5 200 -6 .668 9 .399 1 .558 3 016 0 601 1BS9 64

326
51 B ., 300 -B

.

, 6B4 8 . 308 1 .482 2 .802 0

,

,577 150B

,

,35

52 5 ,,400 -4

,

, 91B 7 .717 1 .4BB 2.652 0

,

, 554 14B1

,

.50

53 5 ., BOO -4

.

, B28 7 . 308 1 .426 2.562 0

,

. 542 1428

,

. 14

54 B.,600 -4.,280 6.832 1 .375 2.484 0,.534 1410,.02

55 5.,700 -3..924 6.317 1.32B 2.383 0,.B22 1376,.99

56 B..800 -3,,B09 B.924 1.299 2.280 0,.504 1340 .27

57 B,.900 -3,.073 B.680 1.301 2.183 0 .483 130B .47

58 6 .000 -2 .681 B.644 1.336 2.113 0 .461 1285 .10

59 indicate end of information

327
6.6.12 W.IN_SB

1

'

2 Optical Properties of: Indium Ant imonide (InSb)

3

4 D.E. Aspnes & A. A. Studna,

5 Physical Review B, Volume 27, Number 2, 1983, January, 15.

6 Pages: 985-1009.

7

8

:

9 E(oV), <el>, <o2>, n, . k, R, alpha*1.0E3 (cm**-l)

10 :

11 =h.== " indicate end of header information

12 46 ' quantity of lines of data

13 1 500 19 105 5 ,683 4 .418 0 .643 0 .406 97 .79

14 1 600 20 302 6 838 4 .568 0 .749 0 .421 121 .39

15 1 roo 21 699 9 019 4 754 0 .949 0 .441 163 .46

16 1 800 22 148 13 707 4 909 1 396 0 .467 254 .73

17 1 900 16 144 16 603 4 433 1 873 0 .463 360 .65

18 2 000 14 448 14 875 4 194 1 773 0 443 359 46

19 2 100 13 974 14 643 4 136 1 770 0 439 376 79

20 2 200 13 674 16 302 4 135 1 850 0 445 412 62

21 2 300 12 653 16 936 4 111 2 060 0 458 480 25

22 2 400 9 377 17 480 3 822 2 287 0 463 556 30

23 2 500 7 811 15 856 3 570 2 221 0 447 562 77

24 2 600 7 278 14 787 3 447 2 145 0 434 566 33

25 2 700 7 069 14 069 3 377 2 083 0 425 670 01

26 2 800 7 044 13 617 3 345 2 036 0 419 677 71

27 2 900 7 150 13 395 3 342 2 004 0 415 589 12

28 3 000 7 354 13 421 3 366 1 994 0 416 606 27

29 3 100 7 627 13 779 3 419 2 015 0 420 633 20

30 3 200 7 742 14 572 3 482 2 093 0 431 678 77

31 3 300 7 507 15 631 3 525 2 217 0 445 741 69

32 3 400 6 782 16 678 3 520 2 369 0 459 816 31

33 3 500 5 995 17 673 3 511 2 517 0 474 892 82

34 3 600 4 830 18 854 3 485 2 705 0 492 987 01

35 3 700 3 147 20 102 3 427 2 933 0 514 1099 83

36 3 800 0 534 21 064 3 287 3 204 0 541 1234 25

37 3 900 -2 838 21 177 3 044 3 479 0 572 1376 21

38 4 000 -6 722 19 443 2 632 3 694 0 608 1497 79

39 4 100 -8 911 15 595 2 127 3 666 0 633 1623 33

40 4 200 -8 580 12 296 1 791 3 433 0 634 1461 59

41 4 300 -7 678 10 382 1 618 3 209 0 623 1398 45

42 4 .400 -6 910 9 .191 1 515 3 034 0 610 1353 08

43 4 .500 -6 297 8 .351 1 443 2 894 0 598 1320 24

44 4 .600 -5 788 7 .690 1 385 2 .776 0 .586 1294 36

45 4 .700 -5 324 7 .160 1 .341 2 .669 0 .574 1271 51

46 4 .800 -4 .912 6 .761 1 .312 2 576 0 .562 1253 17

47 4 .900 -4 .534 6 .492 1 .301 2 .495 0 .548 1239 36

48 5 .000 -4 .250 6 .378 1 .307 2 .441 0 .537 1237 01

49 5 .100 -4 .190 6 .360 1 .309 2 .430 0 .534 1255 97

50 5 .200 -4 .359 6 .207 1 .270 2 .444 0 .543 1288 04

328
51 5 300 -4 BOB B.81B 1 194 2.43B 0 BB6 1308 2B

52 5 400 -4 487 B.34B 1 116 2.394 0 B63 1310 B8

53 E BOO -4 32B 4.931 1 0B7 2.333 0 B63 1300 BB

54 B 600 -4 126 4.664 1 02B 2.27B 0 EB8 1291 44

55 6 700 -3 996 4.470 1 000 2.23B 0 BBB 1291 22

56 B 800 -3 94B 4.282 0 969 2.210 0 BBS 1299 21

57 B 900 -3 92B 4.029 0 922 2.18B 0 B6B 1306 73

58 6 000 -3 83B 3.681 0 861 2.139 0 B72 1300 8B

5e =h= indicate end of information

329
6.6.13 W.AL_SB

1

2 Optical Properties of: Aluminujn Antimonide (AlSb)

3

4 S. Zollner, C. Lin, E. Schonherr , A. Bohringer, and M. Cardona

5 Joiirnal of Applied Physics, Volume 66, Number 1, 1 July 1989.

8 Pages: 383-387.

7

8 E(oV), <el>, <e2>, n, k, R, alpha*!. 0E3 (cm**-l)

910 =h= ' indicate end of header information

11 45 ' quEmtity of lines of data

12 1. 400 12 .23 0 0007 3 .50 0 .0001 0 .308 0 .02

13 1

.

BOO 12 . 56 0 001 3 .54 0 .0002 0 .312 0 . 03

14 1. 800 12 . 91 0 002 3 .60 0 .0003 0 .319 0 .05

15 1. 700 13 .30 0 007 3 .66 0 .001 0 .325 0 .2

16 1. 800 13 .93 0 015 3 .73 0 .002 0 .333 0 . 3

17 1. 900 14 .53 0 02 3 .81 0 .003 0 .341 0 . 6

18 2. 000 15 .24 0 .03 3 .90 0 .004 0 .350 0 .8

19 2. 100 16 . 08 0 .05 4 .01 0 ,008 0 .361 1 . 3

20 2. 200 17 .54 0 .08 4 .20 0 .01 0 .378 2 .4

21 2. 300 18 .50 2 .11 4 .31 0 .24 0 .390 57 . 1

22 2. 400 19 . 62 2 .99 4 .44 0 .33 0 .402 82 . 0

23 2. 500 20 .97 4 25 4 .61 0 .46 0 .417 117 . 0

24 2. 600 22 . 76 6 09 4 .81 0 .63 0 .436 iDD . 8

25 2. 700 24 . 98 9 35 5 .08 0 .92 0 .482 252 . 1

26 2. 800 25 .30 16 70 5 .27 1 .58 0 .496 449 . 3

27 2. 900 17 .41 19 19 4 .66 2 .06 0 .486 605 . 7

28 3. 000 16 .54 17 82 4 .52 1 .97 0 .473 599 . 0

29 3

.

100 18 .30 19 43 4 .57 2 .12 0 .485 668 .0

30 3

.

200 14 .24 22 35 4 .51 2 .47 0 .605 803 . 1

31 3. 300 9 .91 22 32 4 .14 2 .69 0 ,508 900 . 8

32 3. 400 8 .77 21 00 3 .97 2 .64 0 .498 911 .2

33 3. 500 8 .31 21 33 3 .95 2 .69 0 .503 957 .7

34 3. 600 7 .72 22 32 3 .96 2 .81 0 .513 1028 .7

35 3. 700 6 .63 23 35 3 91 2 .97 0 .525 1113 .8

36 3. 800 4 .53 24 12 3 .81 3 .16 0 .540 1218 .3

37 3. 900 2 .16 25 22 3 .71 3 .40 0 .560 1345 .0

38 4. 000 -1 .56 26 00 3 .50 3 .71 0 .588 1506 ,1

39 4. 100 -6 .14 25 24 3 .15 4 .00 0 ,621 1665 ,6

40 4. 200 -11 .16 21 99 2 60 4 .22 0 ,862 1799 .7

41 4. 300 -12 .73 15 94 1 96 4 .07 0 .691 1776 .3

42 4. 400 -11 .20 11 81 1 .59 3 .70 0 .688 1653 .6

43 4. 500 -9 .41 9 81 1 .45 3 .39 0 ,669 1547 .4

44 4. 600 -8 .11 8 71 1 .38 3 .18 0 ,648 1475 .0

45 4. 700 -7 .17 7 97 1 .33 2 .99 0 .629 142B .2

46 4. 800 -6 .40 7 42 1 .30 2 .84 0 ,611 1384 .6

47 4. 900 -5 .76 7 06 1 .29 2 .72 0 ,592 13B4 .9

48 B. 000 -5 .29 6 85 1 .30 2 .64 0 .576 1338 .8

49 5. 100 -5 .00 6 .77 1 .31 2.59 0 .565 1339 .4

50 5. 200 -4 .95 6 .74 1 .31 2 .58 0 .563 1360 .3

330
51 5 300 -5 15 6 53 1 26 2 59 0 574 1394 7

52 5 400 -5 30 6 02 1 17 2 58 0 589 1413 2

53 5 500 -5 18 5 51 1 09 2 52 0 593 1407 9

54 5 600 -5 CO 5 12 1 04 2 46 0 594 1399 9

55 5 700 -4 84 4 83 1 01 2 42 0 592 1398 7

56 5 800 -4 81 4 78 1 00 2 .40 0 693 1416 3

57 =h,== ' indicate end o£ information

331
7, Acknowledgments

It is the author's pleasure to acknowledge Dr. George Candela for his suggestions and support during the course of this project. The author appreciates the questions and suggestions from Deane Chandler-Horowitz and Pradip Dutta, who have been among the first to

apply the software package. Somewhere during the middle of the development of this software, the author had the expressed good fortune of receiving an invitation from Drs. Paul

G. Snyder and John A. Woollam to attend a week-long seminar regarding ellipsometry

that they were organizing at the University of Nebraska-Lincoln. The author appreciates

the many fine presentations of and discussions with the staff and invited speakers, as well

as the hospitality that was extended to all of the participants.

Regarding the database of dielectric functions for the constituent media, these were collected from the literature and serve so vitally in advancing various applications of spectroscopic ellipsometry. Such collections of data are products of much labor and incorporate

much relevant physics. It would be a serious omission to fail to include special mention of

appreciation of those who have made such databases available. Among them, the author

especially appreciates the work reported by Dr. David E. Aspnes and associates.

Finally, the author appreciates the assistance of Dr. Ronald Boisvert in making available

various subroutines from the GAMS software library, and the editorial assistance of Ms.

Jane Walters and Jo Gonzalez.

332
8. References

[I] R. M. A. Azzam and N. M. Bashara, Ellipsometry and Polarized Light, paperback edition (North-Holland, Amsterdam, 1987).

[2] Fundamentals and Applications of Ellipsometry ed. by J. A. Woollam, Department of

Electrical Engineering, (University of Nebraska, Lincoln, Nebraska, June 15-19, 1987).

[3] J. F. Marchiando, ^^Semiconductor Measurement Technology: A Software Program for

Aiding the Analysis of EUipsometric Measurements, Simple Models," NIST Spec. Puhl.

400-83, Natl. Inst. Stand. Technol. (U.S. Department of Commerce), 1989.

[4] Handbook of Optical Constants of Solids, ed. by E. W. Palik (Academic Press, Orlando, 1985).

[5] F. Wooten, Optical Properties of Solids (Academic, New York, 1972).

[6] Handbook on Semiconductors, Volume 2, Optical Properties of Solids, ed. by M. Balkanski, (North-Holland, Amsterdam, 1980).

[7] P. G. Snyder, J. E. Oh, J. A. Woolam, and R. E. Owens, "EUipsometric Analysis of

Built-in Electric Fields in Semiconductor Heterostructures," Appl. Phys. Lett. 51,

770-772 (1987).

[8] F. A. Hopf and G. I. Stegeman, Applied Classical Electrodynamics, Volume 1: Linear

Optics (John Wiley & Sons, Inc., New York, 1985).

[9] F. E. Jones, "The Refractivity of Air," J. Res. Natl. Bur. Stand. (U.S.) 86, 27-32

(January-February 1981).

[10] D. A. G. Bruggeman, "Calculation of the Various Physical Constants of Heterogeneous

Substances," Ann. Physik, Series 5, 24, 636-664 (1935).

[II] C. G. Granqvist and O. Hunderi, "Optical Properties of Ultrafine Gold Particles,"

Phys. Rev. B, 16, 3513-3534 (1977).

[12] D. E. Aspnes, J. B. Theeten, and F. Hottier, "Investigation of Effective-Medium Models of Microscopic Surface Roughness by Spectroscopic Ellipsometry," Phys. Rev. B,

20, 3292-3302 (1979).

333
[13] D. E. Aspnes and J. B. Theeten, "Dielectric Function of Si-SiOj and Si-Si3N4 Mixtures," J. Appl. Phys., 50, 4928-4935 (1979).

[14] R. F. Boisvert, S. E. Howe, and D. K. Kahaner, Guide to Available Mathematical Softjvare, Center for Applied Mathematics, National Bureau of Standards (U.S. Department of Commerce), 1985.

[15] J. J. Dongarra, C. B. Moler, J. R. Bunch, and G. W. Stewart, UNPACK Users' Guide

(Society for Industrial and Applied Mathematics, Philadelphia, 1979).

[16] C. C. Paige and M. A. Saunders, "LSQR: An Algorithm for Sparse Linear Equations

and Sparse Least Squares," ACM Trans. Math. Softw. 8, 43-71 (1982).

[17] C. C. Paige and M, A. Saunders, "Algorithm 583, LSQR: Sparse Linear Equations

and Least Squares Problems," ACM Trans. Math. Softw. 8, 195-209 (1982).

[18] G. H. Bu-Abbud, N, M. Bashara, and J. A. Woolam, "Variable Wavelength, Variable

Angle Ellipsometry Including a Sensitivities Correlation Test," Thin Solid Films 138,

27-41 (1986).

[19] G. H. Bu-Abbud and N. M. Bashara, "Parameter Correlation and Precision in MultipleAngle Ellipsometry," Appl. Opt. 20, 3020-3026 (1981).

[20] M. M. Ibrahim and N. M. Bashara, "Parameter- Correlation and Computational Considerations in Multiple- Angle Ellipsometry," J. Opt. Soc. Am. 61, 1622-1629 (1971).

[21] S. Y. Kim and K. Vedam, "Proper Choice of the Error Function in Modeling Spectroellipsometric Data," Appl. Opt. 25, 2013-2021 (1986).

[22] "The SCD Graphics Utilities," ed. by G. R. McArthur, NCAR Technical Note 166+IA,

Scientific Computing Division, National Center for Atmospheric Research, Boulder,

Colorado (1981).

[23] "The System Plot Package," edited by G. R. McArthur, NCAR Technical Note 162-f-IA,

Scientific Computing Division, National Center for Atmospheric Research, Boulder,

Colorado (1981).

334
Appendix

Quick Reference Guide

for

NIST Special Publication 400-84

Semiconductor Measurement Technology:

A Software Program for Aiding the

Analysis of EUipsometric Measurements,

Simple Spectroscopic Models

J. F. Marchiando

Semiconductor Electronics Division

National Institute of Standards and Technology

Gaithersburg, Maryland 20899

A-1
Table of Contents

Page

1. Introduction A-3

2. Input Data Requirements A-3

2.1 Database Information A-3

2.2 Layer Thicknesses . A-4

2.3 Supplementary Parameters (Integer) A-4

2.4 Supplementary Parameters (Floating-Point) A-5

2.5 Effective Media or Mixtures A-5

2.6 Ambients and External Parameters A-7

2.7 Sample Characterization or Construction A-8

2.8 Measurement Data (A, •0) A-9

3. Command Options A-11

3.1 Forward Problems, Plots, A-12

3.2 Search (vary) . A-15

3.3 Search Grid (vary) A-15

4. Constituent Media . A-16

5. Example, Si02 on Si A-17

6. Example, Ala.Gai_a,As on GaAs . A-19

A-2
1. Introduction

MAIN2 is a software program for analyzing spectroscopic ellipsometric measurements. The

solid material sample is assumed to be nonmagnetic and to exhibit depth-dependent optical properties, such as one with layered structure atop a substrate, where the substrate behaves like a semi-infinite half-space, and where the layers are flat and of uniform thickness.

The ambient region refers to that region of space that lies external to the layers-substrate

region of the sample. The optical medium within each ambient /layer /substrate region is assumed to be isotropic, homogeneous, local, and linear. The dielectric function of an optical medium is represented by the Bruggeman effective medium approximation (EMA). An

effective medium is represented as a mixture of distinct constituent bulk media, where the

optical properties of each constituent medium is known a priori. The ellipsometric equations are solved for the model parameters by using a damped least-squares method.

The program involves at least five data files. These include: X.DAT, an input data file

of the model parameters and measurement data; X.INN, an input data file of command

options controlling the program; X.OUT, an output data file journaling the activity of the

program; X.PLOT, an output data file of results suitable for later plotting; and W.*, the

data files that contain the dispersion relationships of the distinct constituent media that

are used in representing the effective media of the sample.

2. Input Data Requirements

The input data file X.DAT contains both the model parameters that characterize the layered structure of the sample and the ellipsometric measurement data. Each subsection

presents a format convention that is used in forming the input file X.DAT for one particular subset of these input data. The subsections are presented in the order that the subsets

are to appear in the input file. Each subset of entries is separated by a demaraction line

that is made of connected hyphens and is at least 50 characters in length. Parameters that

are shown to be capped with a tilde refer to index labels of array elements.

2.1 Database Information

The first line in file X.DAT specifies the location of the database files. The database files

contain the optical properties or complex dielectric functions as functions of energy or optical frequency of tlie distinct constituent media. These constituent media are used in repA-3
resenting the effective media of the ambient/layers/substrate regions. The format convention for specifying the location of the database files is of the form:

disk:[directory]w.

where 'disk' refers to the name of the mass-storage device, 'directory' refers to the name

of the directory that contains the database files of the constituent media, and V is the

filename of the various database files. The database file of a particular constituent medium

has a distinct extension in its filename specification; the appropriate extension is supplied

by the program.

2.2 Layer Thicknesses

The format convention for specifying the layer thicknesses is of the form:

I

{i, Zi, 6zi, Vi)

where:

rUz is the number of distinct thicknesses;

i is an integer that indexes the line entries consecutively in unit increments,

i.e., {i = 1,2,3,. . . ,m^);

Zi is the thickness of a layer measured in nanometers;

Szi is the uncertainty that is assigned to the numerical value of Zi] and

Vi is the integer (froz/vary) switch with value 0 or 1, respectively.

The forward slash mark '/' delimits the first line of input data. The parentheses bound

items that ought to appear on each subsequent line of data until the implied DO-loop has

been satisfied. Incidentally, if (m^ = 0), this is the only line of information that ought to be

entered for this set of data, i.e., apart from the short line of connected hyphens for demarcation.

2.3 Supplementary Parameters (Integer)

The format convention for specifying the integer supplementary parameters is of the form:

771/ /

(i, Pi)

A-4
where:

mi is the number of distinct integer supplementary parameters;

i is an integer that indexes the line entries of data consecutively in unit increments, i.e., (i = 1,2,3, ... ,771/); and

Pi is the integer supplementary parameter.

Since integer parameters are not subjected to optimization, no uncertainties are included

regarding their numerical value.

2.4 Supplementary Parameters (Floating-Point)

The format convention for specifying the floating-point supplementary parameters is of the

form:

'^R I {h Pi, hi, Vi)

where:

mji is the number of distinct floating-point supplementary parameters;

i is an integer that indexes the line entries of data consecutively in unit increments, i.e., (i = 1,2,3, ... ,mii);

Pi is the floating-point supplementary parameter;

8pi is the uncertainty that is assigned to the numerical value oi pi\ and

Vi is the integer (froz/vary) switch with value of either 0 or 1, respectively.

2.5 Effective Media or Mixtures

For each efl'ective medium used in the ambient /layers/substrate regions, one must specify

the constituent media and their volume fractions. The format convention for specifying

the effective media or mixtures is of the form:

A-5
TTT'iJi 'rriRJ I ih, ei, /i, <^/n "^0

/ {^i, Pi,i)

I (^H, VR,i)

where:

the number of distinct effective media, i.e., (mmedia > 2);

j is an integer that indexes the distinct effective media, i.e., (j = 1, 2, . .

. , mmedia);

myj is the number of distinct constituent media (or volume fractions) that are associated with the j'^ effective medium;

mj^j is the number of integer supplementary parameters that are associated with the

j^^ effective medium;

TTiR^j is the number of floating-point supplementary parameters that are associated

with the j'^ effective medium;

if is an integer that locally indexes the distinct constituent media (or volume fractions) of the j^^ effective medium, i.e., {if — 1,2,

.

. . ,m/,j);

£i is an integer index label of the appropriate constituent medium that is associated with the if^^ constituent medium of the effective medium;

fi is the volume fraction of the ty*^ constituent medium of the j^^ effective medium;

8fi is the uncertainty that is assigned to the numerical value of fi\

Vi is the integer (froz/vary) switch for fi with value 0 or 1, respectively;

ij is an integer that locally indexes the integer supplementary parameters that are

associated with the j^^ effective medium, i.e., (ij = 1,2, .. . ,mij)]

pi^i is the integer index label of the appropriate integer supplementary parameter

that is associated with the ij*'^ integer supplementary parameter of the j*'^ effective medium, i.e., (1 < pi,i < ^n/);

A-6
Ir is an integer that locally indexes the floating-point supplementary parameters

that are associated with the j'^ effective medium, i.e., (i^ = 1,2,... ,mflj); and

PE^i is the integer index label of the appropriate floating-point supplementary parameter that is associated with the i^^ floating-point supplementary parameter

of the j^^ effective medium, i.e., (1 < pn^i < mR).

2.6 Ambient and External Parameters

The ambient region refers to that spatial region that lies external to the layered structure

of the sample. The indexed listing associates distinct effective media with distinct subsets

of the supplementary parameters. The format convention for specifying the ambient and

the external parameters is of the form:

'^ambients

h '^R,j I i^n VI,i)

I {Ir, PR,i)

where:

mambients is the number of distinct ambients which involve associating effective media

with subsets of the supplementary parameters;

j is an integer that indexes the distinct ambients, i.e., {j = 1,2, .. . , mambients);

ij is an integer index label of the appropriate effective {not constituent) medium

that is associated with the j'^ ambient, i.e., (1 < < mjacdia.)',

mjj is the number of integer supplementary parameters that are associated with the

j'^ ambient;

mnj is the number of floating-point supplementary parameters that are associated

with the j*'^ ambient;

ii is an integer that locally indexes the integer supplementary parameters that are

associated with the j*^ ambient, i.e., (zj = 1,2, .. . ,m,/j);

A-7
pi^i is the integer index label of the appropriate integer supplementary parameter

that is associated with the i/^ integer supplementary parameter of the j*^ ambient, i.e., (1 < pi,i < m/);

in is an integer that locally indexes the floating-point supplementary parameters

that are associated with the j*^ ambient, i.e., (i^ = 1,2, .. . ,mRj); and

PR^i is the integer index label of the appropriate floating-point supplementary parameter that is associated with the z^'^ floating-point supplementary parameter

of the j^^ ambient, i.e., (1 < pR,i < mn).

2.7 Sample Characterization or Construction

The samples are constructed or assembled in a layer-by-layer fashion. Each spatial region

requires an effective medium, and if the region is a layer, a thickness is required as well.

Index labels are used to specify the configuration of the (layers/substrate) system. The

format convention for specifying the layered structure of the samples is of the form:

'^samples

^izj / {h Zi)

I ^^z,j ~^ » ^substrate,j

where:

"^'samples is the number of distinct material samples being analyzed.

j is an integer that indexes the distinct samples, i.e., (j = 1, 2, . . . ,msanipies)-

rrizj is the number of layers that lie atop the substrate of the j*^^ sample.

i is an integer that locally indexes the distinct layers of the j'^ sample, i.e.,

(i = 1,2, . . . ,mzj). The layer adjacent to the ambient is indexed 1, and the layer

adjacent to the substrate is indexed m^j.

Si is the integer index label of the appropriate effective medium that is associated

' with the i*^ layer of the j*'^ sample, i.e., {1 < ii < TTimedia)-

A-8
2i is the integer index label of the appropriate thickness that is associated with the

z*^ layer of the j'^ sample, i.e., {1 < zi < m^).

2.8 Measurement Data (A,'(/))

The measurement data of ellipsometric angles are organized in the same fashion that the

samples are constructed, i.e., sample by sample. The data structure is of the form:

{angles Sz wavelengths, repeats, ambients, samples)

where:

samples indexes the set of distinct samples;

ambients indexes the set of distinct ambients involving a given sample;

repeats indexes the sets of distinct repeats of multiple- angle of incidence and multiple

optical frequency measurements of a system involving a given ambient and

sample; and

angles Sz wavelengths indexes the set of distinct angles of incidence and optical

frequencies (or wavelengths) used during the measurements of a system involving a given repeat index, ambient, and sample.

The measurement data are grouped sample by sample. For each sample, they are grouped

ambient by ambient. For each ambient, they are grouped by their repeat index label. For

each repeat index, they are indexed by both source variables, i.e., the angle of incidence

and the optical frequency (or wavelength in vacuum or corresponding energy) of the light.

The format convention for associating the measurement data with the sample, e.g., sample

5, is of the form:

rriae

rriras a,

mx^^ras I {h ^i, (t>h V'i / ^fpi)ras

where:

A-9
s is an integer that indexes the samples, i.e., (5 = 1,2, .. . ,msainpies)-

nias is the number of ambients associated with sample s.

aa is an integer that locally indexes the ambients associated with sample 5,

i.e., (a, = 1,2, . . . ,ma«).

(Lg is the integer index label of the appropriate ambient that is associated with the

05*^ ambient on sample s.

m-ras is the number of sets of repeat measurements of (Aj-^) involving the a,*^ ambient on sample s.

n^X4>,ras is the number of measurements of ellipsometric angles (A, -0) involving multipleangles of incidence and multiple-optical frequencies (or wavelengths in vacuum

or associated energies) that involve the r^a*^ repeat set of measurements,

i.e., [vaa — 1,2, .. . ,mra«), and the a^*^ ambient of sample 5.

i is an integer that locally indexes the multiple- angle of incidence and multipleoptical frequency measurement data consecutively with unit increments, i.e.,

{i = 1,2, .. . ,mxcj>,ras)-

Xi is a floating-point source variable that may be of either sign depending upon

how one chooses to characterize the optical frequency of light. When the value

is negative, the unit of measure is nanometers. When the value is positive, the

unit of measure is electron-volts. The program check-tests for either

(-1240 < Ai < -200) or (1.0 < A,- < 6.0).

^Ai is the uncertainty that is assigned to the numerical value of A^.

is the angle of incidence measured in degrees, where a value of zero relates to

that of normal incidence, i.e., (0 < < 90).

6(f>i is the uncertainty that is assigned to the numerical value of ^i.

Ai is an ellipsometric angle measured in degrees, i.e., (0 < Ai < 360), assuming the

engineering or Nebraska convention, i.e., Rp^n.

8Ai is the uncertainty that is assigned to the numerical value of Ai.

A-10
fpi is an ellipsometric angle measured in degrees, i.e., (0 < V'i < 90).

Sipi is the uncertainty that is assigned to the numerical value of

Within any set of mx<i>,ras measurement data, ordering among the angles of incidence or among the optical frequencies (or wavelengths in vacuum or associated energies) is not

necessarily important.

To construct the final set of data that includes all of the samples, one simply concatenates

the data of the individual samples together, i.e., without any intervening lines of demarcation.

3. Command Options

The input data file X.INN contains the list of command options that direct the control of

the software package. To direct the execution of the program, a menu-driven decision tree of command options isjnade available to the user. The subsections are presented in the

order that the options are listed at level one. The first level of the tree involves a menu of

three options.

Enter: option

1, forward problems , plots, ... 2, search (vary)

3, search grid (vary)

where the options at level one include:

1, requests the program to perform one of several simple tasks, such as providing a set

of tabulated output that is amenable for plotting or initiating a series of calculations of the direct or forward problem. No iterative calculations are considered, i.e., no minimizations or inversions of the ellipsometric equations.

2, requests the program to invert the ellipsometric equations by performing a series of

unconstrained optimization calculations.

3, requests the program to invert the ellipsometric equations by performing a grid

scan over a selected set of model parameters. A series of constrained optimization

calculations is initiated at each point of the grid of model parameters.

A-U
3.1 Forward Problems, Plots, ..

.

This option provides simulations of the forward problem, i.e., option '1' at level one. The

next set of options requests the type of grid used for the source variables (A,^), i.e., the

optical frequency (or wavelength in vacuum or corresponding energy) and the angle of incidence. The menu of options at level two is:

\ Entar: choice of incident (energies, angles)

1, measurement data, x.dat

2, grid scEin.

where the options at level two involve:

1, requests the program to use as source variables only those sets of ordered pairs

(A,^) that are specified in the input file X.DAT for the measurement data of (A,'0)

2, requests the program to use as source variables only those sets of ordered pairs

(A, (f>) that lie on a two-dimensional grid that is specified later in a following prompt

request. The program prompts or requests information regarding the lower bound,

the upper bound, and the stepsize for each dimension of the grid.

The next step in the program involves specifying which field quantities are to be calculated and written to the output file X.PLOT. Two alternative sets of options are presented

in succession.

Following the selection of option '1' at level two, the menu of options at level three is:

Enter: choice of output suitable for:

1, input data, x.dat,

2, plotting (Delta, psi),

3, plotting (Delta, psi) deviations,

deviation = measurement - model.

4, plotting Igl ' rms deviation, unsealed,

on a ID or 2D grid of model parEuneters.

where:

1, requests the program to calculate (A,'0) using (A,^) as supplied by the file X.DAT.

The output is written to the plot file X.PLOT. The format is suitable for use in file X.DAT.

A-12
2, requests the program to calculate (A,i/j) using (A,0) as supplied by the file X.DAT.

The output is written to the plot file X.PLOT. The format is suitable for later

graphics.

3, requests the program to calculate and tabulate the deviations between the measure- ment data and that calculated by the model. The output is written to the plot file X.PLOT.

4, requests the program to initiate a grid scan of model parameters and evaluate the

error expression |g| for each point on the grid. For convenience, the grid may be

either one or two dimensional; i.e., only one or two model parameters may undergo

variation. To specify the grid of 'vary' model parameters, see section 3.3, but note

that there is no option regarding optimization here. The output is written to file X.PLOT.

Alternatively, following the selection of option '2' at level two, the menu of options at level

three is:

choice of output suitable for:

1, dielectric function, media.

2, (Delta, psi), X . dat

,

3. (Delta, psi)

,

plotting.

4. d/db. b'(z,f ,p).

5. d/da, angle of incidence.

6. d/dZ, energy

.

where:

1, requests the program to calculate the dielectric function for an effective medium

that is specified later. The format is suitable for later graphics.

2, requests the program to calculate (A,-0) for a grid of (A,<^). The format is suitable

for use in file X.DAT.

3, requests the program to calculate {A,'iJ}) for a grid of (A,<^). The format is suitable

for later graphics.

4, requests the program to calculate partial derivatives of {A,ip) with respect to one

of the model parameters, i.e., thickness, volume fraction, or supplementary parameter. Since volume fractions involve a linear constraint, the partial derivative with

A-13
respect to fj is calculated according to eq (10), where {k < j). Again, if the selection involves volume fractions, two volume fractions must be selected to undergo

variation; that which is associated with fj, as given by eq (10), is written to the file X.PLOT. The model parameter is selected by setting the (froz/vary) switch to '1'

in X.DAT. The unit of measure is degree per unit of the 'vary' model parameter.

5, requests the program to calculate partial derivatives of {A,tlj) with respect to the

angle of incidence, 6. The measure is unitless, i.e., degree per degree.

6, requests the program to calculate partial derivatives of (Aj-^) with respect to the

corresponding energy of light. The unit measure is degree per electron-volt.

If the dielectric function of option '1' is selected from the above list, then the associated

effective medium must be specified next.

Enter: kmix ' effective medium of dielectric function

where 'kmix' is the integer index label of the particular effective medium.

Finally, regarding the grid of source variables (A,<^), the grid is established by specifying

for each axis of the grid the lower bound, the upper bound, and the stepsize.

The first axis involves the grid of optical frequencies, wavelengths in vacuum, or associated

energies.

Eiit®r: range of incident energies (oV) or : - wavelengths (nm)

Enter: evl, 8v2, ev3

where evl is the lower bound, ev2 is the upper bound, and ev3 is the stepsize. Negative

values are associated with wavelength in units of nanometers, and positive values are associated with frequency as expressed by energy in units of electron-volts.

The second axis involves the grid of angles of incidence.

Enter: range of incident angles (degrees)

Enter: anglel, angle2, an,gle3

A-14
where anglel is the lower bound, a,ngle2 is the upper bound, and angleS is the stepsize.

NumericaJ values are positive and are in units of degrees.

3.2 Search (vary)

This option lets the program invert the ellipsometric equations by minimizing the error ex- pression as an unconstrained optimization problem, i.e., option '2' at level one. No further

options are required here. At least one model parameter must be set to undergo variation in file X.DAT for each set of measurement data being analyzed. Regarding the 'vary'

model parameters, the stepsizes of the Newton steps are scaled by the numerical values of

the uncertainties.

3.3 Search Grid (vary)

This option lets the program invert the ellipsometric equations by minimizing the error expression as an constrained optimization problem, i.e., option '3' at level one. This involves scanning a grid of model parameters; the grid is scanned from a set of nested DOloops; the grid is established as a direct product of its axes. Each axis involves one distinct model parameter and is characterized by its lower bound, upper bound, and stepsize.

The program issues the following prompt-request:

Scan a grid of model parameters: (z,p,f).

Grid info: DO-loop parsunoters

Grid info: i, initial, final, incrementFor each model parameter selected to undergo variation, the format convention for specifying the range of the DO-loop to characterize the axis of the grid is of the form:

V' Pi» P2, P3,

where ip refers to the local integer index label of the model parameter p, and pj refers

to the numerical value of the model parameter that is associated with the initial value,

final value, and stepsize, as appropriate. The model parameters are entered in the order of

their placement in the input file X.DAT. Regarding the grid of volume fractions for a given

effective medium, the grid specification skips the one with the smallest index label.

A-15
For each point of the multidimensional grid of model parameters, the program evaluates

the error expression |g|. The program may then move to the next grid point, i.e., no optimization, or else use Newton steps to minimize |g|, i.e., full optimization. Accordingly, the

program prompts the following list of options:

Enter: option regarding the grid scan:

0, no optimization, |g| only,

1, full optimization, Jacobian.

The format convention for indicating the type of optimization is of the form:

where io is an integer with value 0 or 1, accordingly.

4. Constituent Media

The effective medium of a ambient /layer/substrate region is modeled as a mixture composed of distinct constituent media. A constituent medium is characterized by its optical

properties, i.e., complex dielectric function as a function of optical frequency. These dielectric functions of the constituent media are known a priori, and serve as basis functions in

expressing the effective media. The following is the current indexed listing of constituent

media.

vacuum

air

Si (crystalline)

Si (amorphous)

Si02 (amorphous)

Si3N4 (noncrystalline)

Ge (crystalline)

GaAs (crystalline)

Ala.Gai_j.As (crystalline)

A-16
10) Oxides of GaAs (amorphous)

11) As (amorphous)

12) GaP (crystalline)

13) GaSb (crystalline)

14) InAs (crystalline)

15) InP (crystalline)

16) InSb (crystalline)

17) AlSb (crystalline)

5. Example, Si02 on Si

This section presents an example of input files, X.DAT and X.INN, for a case of modeling

a flat sample of silicon with a thermally grown oxide layer. For convenience, let the layered structure of the sample involve two layers and a substrate. Let the top layer be amor- phous Si02 and be 100 nm thick; let the transition region be a 50-50 mixture of amor- phous Si02 and crystalline Si and be 2 nm thick, and let the substrate be crystalline Si. An example of the input file X.DAT is the following:

1

234

5e

7

8

g10

111213

1416

la

17

181820

dxl)! : [data_bases] w

.

100.0

2.0

2.0

2.0

mlilmz ' thicknesses /(i ,z ,zu,ivary)

i,z,zu,ivary ' top layer, Si02

i,z,zu,iv£iry ' bottom layer, Si02+Si

mipars / (i,ip)

mrpars / (i,rp,up,ivary)

! mixtures ' number of effective media

! mlmnt,mipiu:,mrpar #1

1 0 0 0 0 ! j ,lrant ,frac ,ufrac.ivary ' air

! mlmnt ,mipar ,mrpar #2

1 0 0 0 0 ! j jlmnt ,frac,uirac,ivary - Si

! mlmnt ,mip£u:,mrpar #3

1 0 0 0 0 ! j ,lmnt,frac ,uf rac.ivary - Si02

! mlmnt ,mipEir,mrpar #4

0 6 0 02 1 ! j ,lmnt ,f rac.ufrac.ivary - Si

0 .5 0 02 1

• ! j ,lmnt ,frac ,uf rac.ivary ' Si02

A-17
2122 '41 ! mbient " number of ambient

s

23

24

25

1 1 0 0 j ,imix,mipar ,mrpar ' air

1 i msampl " numbar of samples analyzed

26 2 mfilm ° number of layers on sample #1

27 1 3 1 j .imix.iz - Si02 top layer

28 2 4 2 j jimixjiz ' Si02+Si, transition . 2830

31

3 2 j .iiriix ' Si substrate

1 ! mbien ' number of ambient s on sample #1

32 1 1 mrpeat , imbien

33 10 mexpt ' number of measurements

34 1 1 .50000E+00 7 OOOOOF+01 Q ^ .woof OEt~\J ± (i,E,a, d,p

35 1 .OOOOOE-01 1 onciCiov-cio 1X . OOOOOE-02 1 OOOOOE-02 ( 1171 f flyt ft 1 irt; V

36 2 2 . OOOOOE+00 7 . V v \J \J \J Ju^ \J 7 .97129E+01 4 .3127BE+01 (i.E.a, d.p

37 1 .OOOOOE-01 1 00000E-02 1 .OOOOOE-02 1 .OOOOOE-02 (uncertainty

38 3 2 . 50000E+00 7 OOOOOE+01 1 .02227E+02 6 .93018E+01 (i,E,a, d.p

39 1 .OOOOOE-01 1 OOOOOE-02 1 .OOOOOE-02 1 .OOOOOE-02 (uncertainty

40 4 3 ,00000E+00 7 OOOOOE+01 2 .5041BE+02 6 .09989E+01. (i.E.a, d.p

41 1 .00000E~01 1 OOOOOE-02 1 .OOOOOE-02 1 .OOOOOE-02 (uncertainty

42 5 3 .BOOOOE+00 7 OOOOOE+01 2 .62427E+02 4 .00376E+01 (i.E.a. d.p

43 1 .OOOOOE-01 1 OOOOOE-02 1 .00000E-02 1 OOOOOE-02 (uncertainty

44 6 4 .OOOOOE+00 7 OOOOOE+01 2 .47313E+02 3 310B4E+01 (i.E.a, d,p

45 1 .OOOOOE-01 1 00000E-C2 1 .OOOOOE-02 1 OOOOOE-02 (uncertainty

46 7 4 . 50000E+00 7 OOOOOE+01 1 .92800E+02 3 34BB7E+01 (i.E.a, d.p

47 1 .OOOOOE-01 1 OOOOOE-02 1 .OOOOOE-02 1 OOOOOE-02 (uncertainty

48 8 B . OOOOOE+00 7 OOOOOE+01 1 .24499E+02 3 21867E+01 (i.E.a, d.p

48 1 .OOOOOE-01 1 OOOOOE-02 1 .OOOOOE-02 1 OOOOOE-02 (uncertainty

50 9 5 .50000E+00 7 OOOOOE+01 8 .77637E+01 3 66717E+01 (i.E.a. d.p

51 1 .OOOOOE-01 1 OOOOOE-02 1 .OOOOOE-02 1 OOOOOE-02 (uncertainty

52 10 6 .OOOOOE+00 7 OOOOOE+01 7 10687E+01 4 18238E+01 (i.E.a, d.p

53 1 .OOOOOE-01 1 OOOOOE-02 1 OOOOOE-02 1 OOOOOE-02 (uncertainty

where the lines have been indexed or numbered for convenience and readability; the input

file should not contain such indexing.

Line 1 specifies the location of the database files for the constituent media. Lines 3 to 5

refer to the distinct layer thicknesses. Line 7 refers to the integer supplementary parameters. Line 9 refers to the floating-point supplementary parameters. Lines 11 to 20 specify

the effective media in terms of the constituent media. Lines 22 and 23 refer to the ambient

and external parameters. Lines 26 to 29 specify the layered structure of the sample. Lines

31 to 53 refer to the collected set of simulated measurement data.

This example shows that three model parameters are selected to undergo variation, a thickness and two volume fractions; see lines 5, 19, and 20, respectively; the (froz/vary) switches

are set to '1.' Hence, their numerical values will undergo variation if so requested from the

A-18
command options in file X.INN. These three model parameters are associated with the

transition region; see line 28.

Regarding the selection of command options in input file X.INN, suppose now that a grid

search is to be used to find the best solution for this set of vary model parameters. For

convenience, let the thickness range from 1.0 to 3.0 nm in steps of 2.0 nm. Regarding volume fractions (/{), the volume fraction with the smallest index label value of the effective

medium is not entered in the specification of the grid. From lines 19 and 20, note that the

volume fraction for crystalline silicon (/si) is listed before the volume fraction for amor- phous Si02 (/siOa); ^l^^s no grid information is entered for /si. Let /siOj range from 0.3 to

0.7 in steps of 0.4. Lastly, let the grid search use Newton steps in the calculations. The

input file X.INN would then be as follows:

! search grid

3.0 2.0 ! thickness transition region

0.7 0.4 ! volume fraction, oxide, transition region

! lull optimization, use the Jacobian

The output file X.OUT journals the activity of the program. The output file X.PLOT

would contain the deviations between the measurement and the model.

6. Example, Al3.Ga1_3.As on GaAs

This section presents an example of using the supplementary parameters. Consider a flat sample of GaAs with a layer of Ala.Ga1_3.As. Let the layered structure involve only the

layer and the substrate. Let the layer be 50 nm thick, and let {x — 0.3) specify the mole

fraction of aluminum. An example of the input file X.DAT is the following:

32 1.0

2 0.3

1

1 drbl : [data_bases] w

.

1

1 50. 1.0 1

! mfilmz / ( j ,z , zu, ivary)

! thickness, top layer

1 1 9

! mipars / (i,ip)

! liTint ' 9, constituant ' AlGaAs

1. 1 0.3 0.01 1

! mrpars / (i,rp, up, ivary)

! stoichiometry ' x, Al(x)6a(l

12 3 ! mixtures " number of effective media

13 1 0 0 ! mlmnt .mipaur.mrpar #1

A-19
14 1 2 1 . 0 0.0 0 j ,lmnt ,f rac ,uf rac,ivary air

IS 1 0 0 mlmnt , mipar , mrpar #2

16 1 8 1 .0 0.0 0 j ,lmnt ,f rac ,ufrac.ivary " GaAs

17 1X mlmnt .mipar ,mrpar #3

18 1 9 1 .0 0.0 0 j ,lmnt ,frac ,uf rac,ivary • AlGaAs

19 1 1 i, iip

9n«u

2122

X

4X i, irp

1 ! mbient ' ntunber of distinct ambients

23

24

25

1 1 0 0 j> Lmix, mipar , mrpar - air

1 ! msampl ' number of samples

20 mfilm ' number of layers on sample #1

27 X

4X j ,imix,iz - AlGaAs

28

2930

•5 j

, imix ' GaAs subst

1 ! mbien ' number of Eunbients for sample #1

31 1

4X mrpeat .imbien

32 j mexpt ' number of measurements

33 4X

41 . bOOUOiS+OO o

CAAAA^?J.A^ . bOOOOiS+Ul 1 .76446E+02 1 .24387E+01 (i.E.a, d.p)

34 41 . OOOOOE-01 1 1 .OOOOOE-02 1 .OOOOOE-02 (uncertainty)

35 . OOOOOxS+OO O ,50000E+01 1 .79401E+02 1 .B7825E+01 (i.E.a, d.p)

36 41 AAAAA17 A4 41 .00000E-02 1 .OOOOOE-02 1 .OOOOOE-02 [uncertainty)

37 3

CAAAAT?_lAA 6 ,E0000E+0i 1 .77396E+02 1 .95307E+01 [i.E.a. d.p)

38 41 , OOOOOE-01 41 .OOOOOE-02 1 .OOOOOE-02 1 .OOOOOE-02 [uncertainty)

39 Q<3

Id .50000E+01 1 .66208E+02 2 .33677E+01 [i.E.a, d.p)

40 41 AAAAAT?_A^ 41 .OOOOOE-02 1 .OOOOOE-02 1 .OOOOOE-02 [uncertainty)

41 Co o

C A A AAT7 J. A A aO .50000E+01 1 .49379E+02 2 .43128E+01 [i.E.a, d.p)

42 4X AAAAAt? A4 . OOOOOfi-01 41 .OOOOOE-02 1 .OOOOOE-02 1 .OOOOOE-02 [uncertainty)

43 aO t AAAAATTxA A o .50000E+01 i .48705E+02 2 .35367E+01 [i.E.a. d.p)

44 4X AAAAAT? A4 OOOOOE-Ol 41 .OOOOOE-02 1 .OOOOOE-02 1 .OOOOOE-02 [uncertainty)

45 f

4X CAAAA'PJ.AA bOOUOJb+OO 7

f .OOOOOE+01 1 69646E+02 4 .65575E+00 [i.E,a. d.p)

46 41 AAAAAW A^ OUUOOE-Ol 41 OOOOOE-02 1 OOOOOE-02 1 .OOOOOE-02 [uncertainty)

47 o AAAAAT7xAA OOOOOii+OO «7f OOOOOE+01 1 78701E+02 8 .31343E+00 ([i.E.a, d.p)

48 4 AAAAAW—AH UOOOOfi-Ol 41 OOOOOE-02 1 OOOOOE-02 1 .OOOOOE-02 ([uncertainty)

49 a CAAAAT7-LAA bOOOUCi+00 «y

f OOOOOE+01 1 75534E+02 1 .26304E+01 ([i,E,a, d.p)

50 4X AAAAAT7 A4 OOOOOb-Ol 41 OOOOOE-02 1 OOOOOE-02 1 .OOOOOE-02 ([uncertainty)

51 xu •3 AAAAA17-t.AA f OOOOOE+01 1 B8723E+02 1 .7S083E+01 ([i.E.a. d.p)

52 1. OOOOOE-Ol 1 OOOOOE-02 1 OOOOOE-02 1 OOOOOE-02 ([tmcertainty)

53 11 3 50000E+00 7 OOOOOE+01 1 35016E+02 1 98919E+01 1[i.E.a. d.p)

54 1. 00000E-~01 1 OOOOOE-02 1 OOOOOE-02 1 OOOOOE-02 ([uncertainty)

55 12 4, OOOOOE+00 7 OOOOOE+01 1 33538E+02 1 88574E+01 ([i.E.a, d.p)

56 1. OOOOOE-01 1 OOOOOE-02 1. OOOOOE-02 1 OOOOOE-02 ([uncertainty)

where the lines have been indexed for convenience and readability; the input file should

not contain such indexing.

Lines 3 and 4 refer to the thickness of the layer. Lines 6 and 7 refer to the integer supplementary parameters; the integer parameter is used to specify a distinct constituent

medium. Lines 9 and 10 refer to the floating-point supplementary parameters; the floatingA-20
point parameter is used to specify the mole fraction of aluminum. Lines 19 and 20 are used to provide the necessary correspondence between the effective medium and the supplementary parameters. Two model parameters are shown to be selected for optimization,

the layer thickness and the mole fraction of aluminum; two (froz/vary) switches are set to

one; see Knes 4 and 10. Lines 30 to 56 refer to simulated measurement data.

Regarding command options, suppose that a grid search is used to find the best solution.

Let the thickness range from 40 to 60 nm in steps of 2 nm. Let the aluminum mole fraction range from 0.2 to 0.4 in steps of 0.02. Since the axes of the grid are specified according to the order that the model parameters are presented in the input file X.DAT, the

specification for layer thickness precedes that for the mole fraction of aluminum; see lines 4

and 10 of file X.DAT. Let the grid search evaluate |g| only at the grid points, i.e., no Newton steps. The input file X.INN would be as follows:

! search grid

2.0 ! thickness, top layer, Al(x)Ga(l-x)As

0.02 ! stoichiometry , x * Al

! no optimization, grid points only

3

1 40.0 60.0

1 0.2 0.4

0

A-21

tr U.S G0VERNMEh4T PRINTING OFFICE; 1990 — 261-9 1 3 2 0 5 9 3

NIST-114A U.S. DEPARTMENT OF COMMERCE 1. PUBLICATION OR REPORT NUMBER

(REV. 3-89) NATIONAL INSTITUTE OF STANDARDS AND TECHNOLOGY NIST/SP- 400/84

2. PERFORMING ORGANIZATION REPORT NUMBER BIBLIOGRAPHIC DATASHEET 3. PUBUCATION DATE April 1990

4. TITLE AND SUBTITLE Serrcioondy.otov Measurement Technology: A Software Program for Aiding the Analysis of

Ellipsometric Measurements, Simple Spectroscopic Models

5. AUTHOR(S)

J. F. Marchiando

6. PERFORMING ORGANIZATION (IF JOINT OR OTHER THAN NIST, SEE INSTRUCTIONS)

U S. DEPARTMENT OF COMMERCE

NATIONAL INSTITUTE OF STANDARDS AND TECHNOLOGY

GAITHERSBURQ, 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 #5

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 BIBLIOGRAPHY OR UTERATURE SURVEY, MENTION IT HERE.) MAIN2 is a software program for analyzing spectroscopic ellipsometric measurements. MAIN2 consists mainly of subroutines written in FORTRAN that are used to invert

the standard reflection ellipsometry equations for simple systems. Here, a system is

said to be simple if the solid material sample is characterized by models which assume

at least the following: (1) materials are nonmagnetic; (2) samples exhibit depthdependent optical properties, such as one with layered or laminar structure atop a substrate that behaves like a semi-infinite half-space; (3) layers are flat and of uniform

thickness; and (4) the optical medium within each ambient/layer/substrate is isotropic,

homogeneous, local, and linear. The ambient region refers to that region of space which

lies external to the layer/substrate structure of the sample. Usually, the ambient

region involves a medium of air or vacuum. Each layer is characterized by a thickness

and a dielectric function. The dielectric function of a region, i.e., ambient, layer, or substrate, is represented by the Bruggeman effective medium approximation (EMA)

Within the EMA, the effective medium of a region is characterized by an aggregate^

mixture of constituent media, and the dielectric function of each constituent medium is

known a priori. The constituent dielectric functions are taken from the literature.

The ellipsometric equations are formulated as a standard damped nonlinear least-squares

problem and then solved by an iterative method when possible. The program is

sufficiently modular to allow one to modify some of the models used in the calculations.

12. KEY WORDS (6 TO 12 ENTRIES; ALPHABETICAL ORDER; CAPITAUZE ONLY PROPER NAMES; AND SEPARATE KEY WORDS BY SEMICOLONS)

ellipsometry; EMA; FORTRAN; modeling; software; spectroscopic models

1 3. AV/ X«LABIUTY UNUMITED

FOR OFFICIAL DISTRIBUTION. DO NOT RELEASE TO NATIONAL TECHNICAL INFORMATION SERVICE (NTIS). 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

352

X

X

15. PRICE

ELECTRONIC FORM

i 1 Ak<J Technical Publications

Periodical

Journal of Research of the National Institute of Standards and Technology—Reports NXST 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 Six- teenth 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 NISTpublications 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 11717 (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