One of the [studies we reproduced](/writing/interface-studies-reproduced) for [Questions we need Emily to answer](/writing/questions-for-emily-testing-a-theory-of-the-interface), the companion to [the essay](/writing/testing-a-theory-of-the-interface-with-an-ontology). Generated by `scripts/reproduce_studies.py` from `reproductions/deal_grove_1965.py`. Every value from the paper was read by an AI agent and has not been checked by a person; the sample and history were re-read from the PDF alone by a second agent that had not seen our earlier transcription.
The study and why we depend on it
B. E. Deal and A. S. Grove, “General relationship for the thermal oxidation of silicon”, J. Appl. Phys. 36, 3770 (1965).
The planar growth program, experiments/vitkavage_dit/oxide_growth.isl.template, takes its constants from this paper: B and B/A are a least-squares Arrhenius fit to Table II (scripts/derive_deal_grove_constants.py, reading our transcription data/primary_sources/deal_grove_1965_jap_36_3770/tables_agent_read_UNVERIFIED.csv), and every oxide starts at the paper's 230 Å intercept. This page checks three things: that our transcription of Table II agrees with a second reading, how far the Arrhenius fit departs from the table at each temperature, and how the program does against the paper's own thickness points, dry at six temperatures and wet at two.
How well can this study be reproduced?
Moderate. The gas, the temperature and the substrate are stated, and the rate constants are printed. The history around the oxidation is not: no times are tabulated, nothing is said about insertion, time zero, withdrawal or cooling, and the paper does not say whether each point is a fresh slice. The 230 Å intercept for dry oxygen is a model choice the authors make to cover a fast first regime they do not describe, and they give it four ways (200, 210, 230, 250 Å).
| Sample described | 2 of 5 properties we need are stated and encoded the same |
| History described | 2 of 6 steps are stated and encoded the same; 2 are stated by the paper and absent from our history; 2 are ours because the paper is silent |
| Timing | 0 of 2 simulated steps have a stated duration; 4 of 4 other steps have none; 6 timing gaps listed below |
| How the results are given | Rate constants in printed Tables I and II; thickness only on log-log and linear figures (Figs. 1, 2, 5, 6), read by an agent, about ±5–10% on the log axes |
| Repeatability stated by the authors | Thickness accuracy ±25 Å below 0.20 μm and ±40 Å above; B ±2%, A ±2% to ±12% (wet), dry “of the same order” |
| Internal consistency | Good. The intercept is given as 200, 210, 230 ± 30 and 250 Å in different places; the abstract claims 700–1300 °C and 0.1–1 atm, which come from other workers' data |
| Is our model independent of this paper's data? | No. The program's constants are an Arrhenius fit to Table II, and Table II is the authors' fit to these same thicknesses. Agreement here checks our transcription, our derivation and the law's form, not a prediction |
| Outcome | 35 of 44 numbers within tolerance |
The grade is ours and is about the paper as a source for simulation, not about the quality of the experiment: high means the sample, every step and its timing are stated well enough that a simulation needs no choices of ours; moderate that some choices are ours and are listed; low that the result depends on choices the paper does not constrain.
The sample and its history, played back
The sample is drawn from the simulation: layer heights and the read-outs are what the ISL programs compute at each moment of the history. Steps the language cannot state (a clean, a metallization, a measurement) are on the clock and marked as recorded, not simulated.
“circular slices 22 mm in diameter and mechanically polished to 200 μ thickness”
| oxide thickness | 0 nm | |
| consumed substrate | 0 nm |
Does our sample and history match the paper's?
Left: the paper's own words, with the page of the PDF. Right: what we simulate. 4 same, 1 approximated, 3 assumed, 3 not in ours.
The timing of the history
Time is counted from the start of the first simulated step. A step the language cannot state takes no simulated time; where the paper gives its duration, the duration is in the last column. Stated means the paper gives the duration; partly stated that it gives a bound or a range; not stated; assumed that the duration in our history is ours.
Dry oxygen, 1200 °C
| # | Step | Starts at | Lasts | Ends at | Temperature | Rate | Gas | Is the timing in the paper? |
|---|---|---|---|---|---|---|---|---|
| 1 | Mechanically polished slices | 0 s | not simulated | not stated | ||||
| 2 | Organic and inorganic rinses, ultrasonic | 0 s | not simulated | not stated. Not given | ||||
| 3 | Insertion into the tube at 1200 °C, time before counting starts | 0 s | 1 s | 1 s | 1200 → 1200 °C | held | dry_O2 | not stated; assumed. Push rate, warm-up and whether time zero is insertion or the gas switch: not given |
| 4 | Dry oxidation at 1200 °C, up to 25 h | 1 s | 25 h 00 min | 25 h 00 min 01 s | 1200 → 1200 °C | held | dry_O2 | partly stated. Times exist only as plotted points; the paper tabulates none |
| 5 | Withdrawn and cooled | 25 h 00 min 01 s | not simulated | not stated. Withdrawal, cooling gas and rate: not given | ||||
| 6 | Thickness by multiple-beam interferometry | 25 h 00 min 01 s | not simulated | not stated |
Simulated time in this history: 25 h 00 min 01 s.
Across the samples
| Sample | Push | Oxidation | Total |
|---|---|---|---|
| Dry oxygen, 1200 °C | 1 s at 1200 °C | 25 h 00 min at 1200 °C | 25 h 00 min 01 s |
| Dry oxygen, 1100 °C | 1 s at 1100 °C | 26 h 00 min at 1100 °C | 26 h 00 min 01 s |
| Dry oxygen, 1000 °C | 1 s at 1000 °C | 28 h 00 min at 1000 °C | 28 h 00 min 01 s |
| Dry oxygen, 920 °C | 1 s at 920 °C | 23 h 00 min at 920 °C | 23 h 00 min 01 s |
| Dry oxygen, 800 °C | 1 s at 800 °C | 68 h 00 min at 800 °C | 68 h 00 min 01 s |
| Dry oxygen, 700 °C | 1 s at 700 °C | 120 h 00 min at 700 °C | 120 h 00 min 01 s |
| Wet oxygen, 920 °C | 1 s at 920 °C | 36 min at 920 °C | 36 min 01 s |
| Wet oxygen, 1100 °C | 1 s at 1100 °C | 2 h 00 min at 1100 °C | 2 h 00 min 01 s |
Timing the paper does not give
- No time is tabulated: every oxidation time on this page is read from a figure.
- Whether each plotted point is a separate slice oxidized once, or one slice taken out, measured and put back. Close pairs of points at one time suggest duplicate slices.
- Insertion: push rate, warm-up of the slice, and whether time zero is insertion into the hot tube or the switch to oxygen.
- The gas during loading, warm-up and withdrawal, and how the slices were cooled.
- The delay between cleaning and oxidation, and between oxidation and measurement.
- Durations and temperatures of the argon-carrier and flow-rate experiments.
What the second reading changed
- Our transcription of Table II (
tables_agent_read_UNVERIFIED.csv) and the second reading agree in all 24 cells: none differs. - The program does not carry the paper's activation energies. It carries a least-squares Arrhenius line through the six Table II rows: E_B = 1.286 eV against the paper's 28.5 kcal/mole (1.236 eV), and E_BA = 2.030 eV against 46.0 kcal/mole (1.995 eV). At the table's own temperatures the line is off the table by up to 15% (B at 1200 °C, B/A at 800 °C); see the table below.
- The 230 Å intercept is used for every oxide, also for wet oxygen, where the paper takes xi = 0. Our language cannot state a starting oxide on the sample, so the wet histories start at 23 nm.
- The paper says B is proportional to the oxidant pressure and A is not. Our operator multiplies the whole rate by p_O2/p_ref, which also scales B/A. For the 1 atm dry oxidations here this changes nothing; for any mixture it does.
SOURCE.mdin the source folder still says “The programs have not yet been changed to the sourced values”. The template now carries the derived values with STATUS sourced; the note is out of date.- The dry oxygen had “water content less than 5ppm”. Our histories write dry_O2, which the language reads as pure oxygen.
Their terms and ours
| The paper says | We write | Kind in our vocabulary | Note |
|---|---|---|---|
| x0: oxide thickness | Thickness | observable (target: layer_thickness) | |
| B: parabolic rate constant; B/A: linear rate constant | B0, E_B, BA0, E_BA | PARAMETER, STATUS sourced | Arrhenius fits to Table II, not the paper's own activation energies (28.5 and 46.0 kcal/mole from Figs. 9 and 11). |
| A = 2Deff(1/k + 1/h) | B / (B/A) | derived inside the OPERATOR | |
| xi: initial thickness (230 Å, dry) | x_i | PARAMETER, STATUS sourced; INITIAL of the state x_ox | A model choice for the fast first regime. The language has no sample field for a starting oxide. |
| τ = (xi² + A xi)/B | (implicit) | follows from x_i | Starting the state at x_i is the same as the paper's time shift τ. |
| purified dry oxygen (water < 5 ppm), 760 Torr | dry_O2 | ambient | Could be written mix:O2=0.999995,H2O=5e-6; no program reads the water. |
| wet oxygen (O2 bubbled through water at 95 °C), p(H2O) ≈ 640 Torr | mix:H2O=0.8421,O2=0.1579 | ambient (mixture) | The named ambient wet_O2 has no partial pressures in the language. As a mixture the gas class is steam; the 1965 program reads its 0.158 atm of oxygen and nothing else. |
| B proportional to oxidant partial pressure, A independent of it | (p_O2 / p_ref) on the rate | OPERATOR | Our operator scales the whole rate by p_O2, so A is not kept independent of pressure. |
| multiple-beam interferometry | Thickness | observable | |
| C*: solubility of the oxidant in the oxide; N1: oxidant molecules per unit volume of oxide | (none) | domain terms, not in the program |
The simulation in our language
Each sample is one history file: a SAMPLE and a CONTROL_TRAJECTORY. This is the whole input; run it with PYTHONPATH=. python -m isl_harness.predict <file>.
Dry oxygen, 1200 °C
# Dry oxygen, 1200 °C
SAMPLE Slice_dry_1200C {
FAMILY: Si_Planar
ORIENTATION: Si111
CLEAN: not_stated
DOPING: p_type_boron_1.45e16
}
CONTROL_TRAJECTORY History {
EVENT Polish KIND other TIMING assumed # Mechanically polished slices
EVENT Clean KIND clean TIMING assumed # Organic and inorganic rinses, ultrasonic
RUN Push DURATION 1 TEMP 1200->1200 AMBIENT dry_O2 TIMING assumed VARY duration 1..1800
RUN Oxidation DURATION 90000 TEMP 1200->1200 AMBIENT dry_O2 TIMING bound
EVENT Unload KIND other TIMING assumed # Withdrawn and cooled
EVENT Measure KIND measurement TIMING assumed # Thickness by multiple-beam interferometry
}Dry oxygen, 1100 °C
# Dry oxygen, 1100 °C
SAMPLE Slice_dry_1100C {
FAMILY: Si_Planar
ORIENTATION: Si111
CLEAN: not_stated
DOPING: p_type_boron_1.45e16
}
CONTROL_TRAJECTORY History {
EVENT Polish KIND other TIMING assumed # Mechanically polished slices
EVENT Clean KIND clean TIMING assumed # Organic and inorganic rinses, ultrasonic
RUN Push DURATION 1 TEMP 1100->1100 AMBIENT dry_O2 TIMING assumed VARY duration 1..1800
RUN Oxidation DURATION 93600 TEMP 1100->1100 AMBIENT dry_O2 TIMING bound
EVENT Unload KIND other TIMING assumed # Withdrawn and cooled
EVENT Measure KIND measurement TIMING assumed # Thickness by multiple-beam interferometry
}Dry oxygen, 1000 °C
# Dry oxygen, 1000 °C
SAMPLE Slice_dry_1000C {
FAMILY: Si_Planar
ORIENTATION: Si111
CLEAN: not_stated
DOPING: p_type_boron_1.45e16
}
CONTROL_TRAJECTORY History {
EVENT Polish KIND other TIMING assumed # Mechanically polished slices
EVENT Clean KIND clean TIMING assumed # Organic and inorganic rinses, ultrasonic
RUN Push DURATION 1 TEMP 1000->1000 AMBIENT dry_O2 TIMING assumed VARY duration 1..1800
RUN Oxidation DURATION 100800 TEMP 1000->1000 AMBIENT dry_O2 TIMING bound
EVENT Unload KIND other TIMING assumed # Withdrawn and cooled
EVENT Measure KIND measurement TIMING assumed # Thickness by multiple-beam interferometry
}Dry oxygen, 920 °C
# Dry oxygen, 920 °C
SAMPLE Slice_dry_920C {
FAMILY: Si_Planar
ORIENTATION: Si111
CLEAN: not_stated
DOPING: p_type_boron_1.45e16
}
CONTROL_TRAJECTORY History {
EVENT Polish KIND other TIMING assumed # Mechanically polished slices
EVENT Clean KIND clean TIMING assumed # Organic and inorganic rinses, ultrasonic
RUN Push DURATION 1 TEMP 920->920 AMBIENT dry_O2 TIMING assumed VARY duration 1..1800
RUN Oxidation DURATION 82800 TEMP 920->920 AMBIENT dry_O2 TIMING bound
EVENT Unload KIND other TIMING assumed # Withdrawn and cooled
EVENT Measure KIND measurement TIMING assumed # Thickness by multiple-beam interferometry
}Dry oxygen, 800 °C
# Dry oxygen, 800 °C
SAMPLE Slice_dry_800C {
FAMILY: Si_Planar
ORIENTATION: Si111
CLEAN: not_stated
DOPING: p_type_boron_1.45e16
}
CONTROL_TRAJECTORY History {
EVENT Polish KIND other TIMING assumed # Mechanically polished slices
EVENT Clean KIND clean TIMING assumed # Organic and inorganic rinses, ultrasonic
RUN Push DURATION 1 TEMP 800->800 AMBIENT dry_O2 TIMING assumed VARY duration 1..1800
RUN Oxidation DURATION 244800 TEMP 800->800 AMBIENT dry_O2 TIMING bound
EVENT Unload KIND other TIMING assumed # Withdrawn and cooled
EVENT Measure KIND measurement TIMING assumed # Thickness by multiple-beam interferometry
}Dry oxygen, 700 °C
# Dry oxygen, 700 °C
SAMPLE Slice_dry_700C {
FAMILY: Si_Planar
ORIENTATION: Si111
CLEAN: not_stated
DOPING: p_type_boron_1.45e16
}
CONTROL_TRAJECTORY History {
EVENT Polish KIND other TIMING assumed # Mechanically polished slices
EVENT Clean KIND clean TIMING assumed # Organic and inorganic rinses, ultrasonic
RUN Push DURATION 1 TEMP 700->700 AMBIENT dry_O2 TIMING assumed VARY duration 1..1800
RUN Oxidation DURATION 432000 TEMP 700->700 AMBIENT dry_O2 TIMING bound
EVENT Unload KIND other TIMING assumed # Withdrawn and cooled
EVENT Measure KIND measurement TIMING assumed # Thickness by multiple-beam interferometry
}Wet oxygen, 920 °C
# Wet oxygen, 920 °C
SAMPLE Slice_wet_920C {
FAMILY: Si_Planar
ORIENTATION: Si111
CLEAN: not_stated
DOPING: p_type_boron_1.45e16
}
CONTROL_TRAJECTORY History {
EVENT Polish KIND other TIMING assumed # Mechanically polished slices
EVENT Clean KIND clean TIMING assumed # Organic and inorganic rinses, ultrasonic
RUN Push DURATION 1 TEMP 920->920 AMBIENT mix:H2O=0.8421,O2=0.1579 TIMING assumed VARY duration 1..1800
RUN Oxidation DURATION 2160 TEMP 920->920 AMBIENT mix:H2O=0.8421,O2=0.1579 TIMING bound
EVENT Unload KIND other TIMING assumed # Withdrawn and cooled
EVENT Measure KIND measurement TIMING assumed # Thickness by multiple-beam interferometry
}Wet oxygen, 1100 °C
# Wet oxygen, 1100 °C
SAMPLE Slice_wet_1100C {
FAMILY: Si_Planar
ORIENTATION: Si111
CLEAN: not_stated
DOPING: p_type_boron_1.45e16
}
CONTROL_TRAJECTORY History {
EVENT Polish KIND other TIMING assumed # Mechanically polished slices
EVENT Clean KIND clean TIMING assumed # Organic and inorganic rinses, ultrasonic
RUN Push DURATION 1 TEMP 1100->1100 AMBIENT mix:H2O=0.8421,O2=0.1579 TIMING assumed VARY duration 1..1800
RUN Oxidation DURATION 7200 TEMP 1100->1100 AMBIENT mix:H2O=0.8421,O2=0.1579 TIMING bound
EVENT Unload KIND other TIMING assumed # Withdrawn and cooled
EVENT Measure KIND measurement TIMING assumed # Thickness by multiple-beam interferometry
}The programs the predictor ran on these histories: experiments/deal_qss/two_equilibria.isl.template, experiments/vitkavage_dit/oxide_growth.isl.template, scripts/search_growth.py (structure generated from the grammar), scripts/search_trap_density.py (structure generated from the grammar).
The model itself, experiments/vitkavage_dit/oxide_growth.isl.template, as it is written. Every equation the simulation uses is in this text; the runtime holds no physics.
# ==============================================================================
# ISL MODEL: DRY THERMAL OXIDATION OF SILICON (growth sector)
#
# Linear-parabolic (Deal-Grove) growth written as one ISL operator. Nothing is
# fitted to the test data: every parameter keeps the value declared here.
#
# Provenance of the constants: the rate constants are an Arrhenius fit to Table II of
# Deal and Grove (1965), which is for (111) silicon; see scripts/derive_deal_grove_constants.py.
# The orientation factor for other faces is not in that paper and remains a hypothesis.
# Fields in {{braces}} are filled by scripts/run_vitkavage_growth.py.
# ==============================================================================
SAMPLE {sample_id} {{
FAMILY: Si_Planar
ORIENTATION: Si{orientation}
}}
# Oxide thickness. The initial value is Deal and Grove's effective starting thickness
# for dry oxygen, which stands in for the fast initial regime their model does not describe.
STATE x_ox {{
UNIT: cm
INITIAL: x_i
MIN: 0
MAX: 1.0e-3
}}
CONTROL T {{ UNIT: K }}
CONTROL p_O2 {{ UNIT: atm }}
# Parabolic rate constant B = B0 * exp(-E_B / kT).
PARAMETER B0 {{ VALUE: 3.6053e-09; UNIT: cm^2 s^-1; STATUS: sourced; SOURCE: Deal and Grove, J. Appl. Phys. 36, 3770 (1965), Table II, dry oxygen on (111), Arrhenius least-squares fit, table agent-read }}
PARAMETER E_B {{ VALUE: 1.2860; UNIT: eV; STATUS: sourced; SOURCE: Deal and Grove, J. Appl. Phys. 36, 3770 (1965), Table II, dry oxygen on (111), Arrhenius least-squares fit, table agent-read }}
# Linear rate constant B/A on (111) = BA0 * exp(-E_BA / kT).
PARAMETER BA0 {{ VALUE: 2.4265e-01; UNIT: cm s^-1; STATUS: sourced; SOURCE: Deal and Grove, J. Appl. Phys. 36, 3770 (1965), Table II, dry oxygen on (111), Arrhenius least-squares fit, table agent-read }}
PARAMETER E_BA {{ VALUE: 2.0303; UNIT: eV; STATUS: sourced; SOURCE: Deal and Grove, J. Appl. Phys. 36, 3770 (1965), Table II, dry oxygen on (111), Arrhenius least-squares fit, table agent-read }}
# Orientation factor on the linear rate, relative to (111).
PARAMETER r_or {{ VALUE: {r_or}; UNIT: 1; STATUS: hypothesis }}
# Effective initial thickness for dry oxygen.
PARAMETER x_i {{ VALUE: 2.3e-6; UNIT: cm; STATUS: sourced; SOURCE: Deal and Grove, J. Appl. Phys. 36, 3770 (1965), stated intercept 230 +/- 30 angstrom for dry oxygen, agent-read }}
# Both rate constants are proportional to oxidant pressure; the constants above are for 1 atm.
PARAMETER p_ref {{ VALUE: 1.0; UNIT: atm; STATUS: constant }}
PARAMETER k_B {{ VALUE: 8.617333262e-5; UNIT: eV K^-1; STATUS: constant }}
CONTROL_TRAJECTORY {trajectory_id} {{
RUN Oxidation DURATION {duration_s} TEMP {T_C}->{T_C} AMBIENT dry_O2
}}
# dx/dt = B / (2x + A), with A = B / (B/A).
OPERATOR F_LinearParabolicGrowth : OxideGrowth {{
EQUATION: d(x_ox)/dt = (p_O2 / p_ref) * B0 * exp(-E_B / (k_B * T)) / (2 * x_ox + B0 * exp(-E_B / (k_B * T)) / (r_or * BA0 * exp(-E_BA / (k_B * T))))
}}
OBSERVATION_MODEL Obs_Oxide_Thickness {{
TARGET: Thickness
UNIT: cm
EQUATION: Thickness = x_ox
}}
# Silicon consumed by the oxide grown in this recipe: 0.44 of its thickness, by the ratio of molar volumes.
OBSERVATION_MODEL Obs_Consumed_Silicon {{
TARGET: Consumed_substrate
UNIT: cm
EQUATION: Consumed_substrate = 0.44 * (x_ox - x_i)
}}
EVALUATION_CONTRACT {contract_id} {{
FROZEN: true
DATASET: data/derived/vitkavage_1990_thickness.csv
DATASET_DIGEST: sha256:{dataset_sha256}
SPLIT: test
TARGET: Thickness = {target} +/- {tolerance} rel
}}Our simulation against the paper
35 within, 5 near, 4 off of 44 numbers. Tolerance is stated per row; nothing was fitted for this page.
| Sample and history | Quantity | The paper | Our simulation | Difference | Verdict | What the program's own evaluation says | Where in the paper |
|---|---|---|---|---|---|---|---|
| Dry oxygen, 1200 °C, 0.27 h | oxide thickness | 85 nm | 102 nm | +20% | near (±10%) | supported within scope | Fig. 2 (log axes), PDF p. 3, graph reading |
| Dry oxygen, 1200 °C, 1 h | oxide thickness | 200 nm | 207 nm | +3% | within (±10%) | supported within scope | Fig. 2 (log axes), PDF p. 3, graph reading |
| Dry oxygen, 1200 °C, 25 h | oxide thickness | 1.08e+03 nm | 1.11e+03 nm | +3% | within (±10%) | supported within scope | Fig. 2 (log axes), PDF p. 3, graph reading |
| Dry oxygen, 1100 °C, 0.53 h | oxide thickness | 87 nm | 90.7 nm | +4% | within (±10%) | supported within scope | Fig. 2 (log axes), PDF p. 3, graph reading |
| Dry oxygen, 1100 °C, 2.4 h | oxide thickness | 200 nm | 212 nm | +6% | within (±10%) | supported within scope | Fig. 2 (log axes), PDF p. 3, graph reading |
| Dry oxygen, 1100 °C, 26 h | oxide thickness | 830 nm | 764 nm | -8% | within (±10%) | supported within scope | Fig. 2 (log axes), PDF p. 3, graph reading |
| Dry oxygen, 1000 °C, 2.2 h | oxide thickness | 105 nm | 110 nm | +5% | within (±10%) | supported within scope | Fig. 2 (log axes), PDF p. 3, graph reading |
| Dry oxygen, 1000 °C, 28 h | oxide thickness | 530 nm | 485 nm | -9% | within (±10%) | supported within scope | Fig. 2 (log axes), PDF p. 3, graph reading |
| Dry oxygen, 920 °C, 1.5 h | oxide thickness | 49 nm | 48.8 nm | -0% | within (±10%) | supported within scope | Fig. 5 (linear axes), PDF p. 6, and the 23 h point of Fig. 2; graph reading |
| Dry oxygen, 920 °C, 2 h | oxide thickness | 58 nm | 56.5 nm | -3% | within (±10%) | supported within scope | Fig. 5 (linear axes), PDF p. 6, and the 23 h point of Fig. 2; graph reading |
| Dry oxygen, 920 °C, 4 h | oxide thickness | 86 nm | 84.1 nm | -2% | within (±10%) | supported within scope | Fig. 5 (linear axes), PDF p. 6, and the 23 h point of Fig. 2; graph reading |
| Dry oxygen, 920 °C, 6 h | oxide thickness | 111 nm | 108 nm | -3% | within (±10%) | supported within scope | Fig. 5 (linear axes), PDF p. 6, and the 23 h point of Fig. 2; graph reading |
| Dry oxygen, 920 °C, 8 h | oxide thickness | 131 nm | 130 nm | -1% | within (±10%) | supported within scope | Fig. 5 (linear axes), PDF p. 6, and the 23 h point of Fig. 2; graph reading |
| Dry oxygen, 920 °C, 10 h | oxide thickness | 151 nm | 150 nm | -1% | within (±10%) | supported within scope | Fig. 5 (linear axes), PDF p. 6, and the 23 h point of Fig. 2; graph reading |
| Dry oxygen, 920 °C, 12 h | oxide thickness | 170 nm | 168 nm | -1% | within (±10%) | supported within scope | Fig. 5 (linear axes), PDF p. 6, and the 23 h point of Fig. 2; graph reading |
| Dry oxygen, 920 °C, 23 h | oxide thickness | 240 nm | 252 nm | +5% | within (±10%) | supported within scope | Fig. 5 (linear axes), PDF p. 6, and the 23 h point of Fig. 2; graph reading |
| Dry oxygen, 800 °C, 8.4 h | oxide thickness | 43 nm | 41.8 nm | -3% | within (±10%) | supported within scope | Fig. 2 (log axes), PDF p. 3, graph reading; pairs at one time are two points on the figure |
| Dry oxygen, 800 °C, 8.4 h | oxide thickness | 38 nm | 41.8 nm | +10% | within (±10%) | supported within scope | Fig. 2 (log axes), PDF p. 3, graph reading; pairs at one time are two points on the figure |
| Dry oxygen, 800 °C, 17 h | oxide thickness | 68 nm | 59.8 nm | -12% | near (±10%) | supported within scope | Fig. 2 (log axes), PDF p. 3, graph reading; pairs at one time are two points on the figure |
| Dry oxygen, 800 °C, 68 h | oxide thickness | 170 nm | 150 nm | -12% | near (±10%) | supported within scope | Fig. 2 (log axes), PDF p. 3, graph reading; pairs at one time are two points on the figure |
| Dry oxygen, 800 °C, 68 h | oxide thickness | 150 nm | 150 nm | -0% | within (±10%) | supported within scope | Fig. 2 (log axes), PDF p. 3, graph reading; pairs at one time are two points on the figure |
| Dry oxygen, 700 °C, 16 h | oxide thickness | 18.6 nm | 27.1 nm | +46% | off (±15.1%) | supported within scope | Fig. 6 (linear axes), PDF p. 6, graph reading; pairs at one time are two points on the figure |
| Dry oxygen, 700 °C, 16 h | oxide thickness | 16.6 nm | 27.1 nm | +63% | off (±15.1%) | supported within scope | Fig. 6 (linear axes), PDF p. 6, graph reading; pairs at one time are two points on the figure |
| Dry oxygen, 700 °C, 24 h | oxide thickness | 20.5 nm | 29.1 nm | +42% | off (±15.1%) | supported within scope | Fig. 6 (linear axes), PDF p. 6, graph reading; pairs at one time are two points on the figure |
| Dry oxygen, 700 °C, 24 h | oxide thickness | 18.2 nm | 29.1 nm | +60% | off (±15.1%) | supported within scope | Fig. 6 (linear axes), PDF p. 6, graph reading; pairs at one time are two points on the figure |
| Dry oxygen, 700 °C, 32 h | oxide thickness | 27.6 nm | 31.1 nm | +13% | within (±15.1%) | supported within scope | Fig. 6 (linear axes), PDF p. 6, graph reading; pairs at one time are two points on the figure |
| Dry oxygen, 700 °C, 32 h | oxide thickness | 26.2 nm | 31.1 nm | +19% | near (±15.1%) | supported within scope | Fig. 6 (linear axes), PDF p. 6, graph reading; pairs at one time are two points on the figure |
| Dry oxygen, 700 °C, 48 h | oxide thickness | 34.7 nm | 35.2 nm | +1% | within (±15.1%) | supported within scope | Fig. 6 (linear axes), PDF p. 6, graph reading; pairs at one time are two points on the figure |
| Dry oxygen, 700 °C, 48 h | oxide thickness | 33 nm | 35.2 nm | +7% | within (±15.1%) | supported within scope | Fig. 6 (linear axes), PDF p. 6, graph reading; pairs at one time are two points on the figure |
| Dry oxygen, 700 °C, 78 h | oxide thickness | 43.7 nm | 42.6 nm | -2% | within (±15.1%) | supported within scope | Fig. 6 (linear axes), PDF p. 6, graph reading; pairs at one time are two points on the figure |
| Dry oxygen, 700 °C, 78 h | oxide thickness | 43 nm | 42.6 nm | -1% | within (±15.1%) | supported within scope | Fig. 6 (linear axes), PDF p. 6, graph reading; pairs at one time are two points on the figure |
| Dry oxygen, 700 °C, 93 h | oxide thickness | 46.5 nm | 46.3 nm | -0% | within (±15.1%) | supported within scope | Fig. 6 (linear axes), PDF p. 6, graph reading; pairs at one time are two points on the figure |
| Dry oxygen, 700 °C, 93 h | oxide thickness | 44.4 nm | 46.3 nm | +4% | within (±15.1%) | supported within scope | Fig. 6 (linear axes), PDF p. 6, graph reading; pairs at one time are two points on the figure |
| Dry oxygen, 700 °C, 120 h | oxide thickness | 53.7 nm | 52.9 nm | -1% | within (±15.1%) | supported within scope | Fig. 6 (linear axes), PDF p. 6, graph reading; pairs at one time are two points on the figure |
| Dry oxygen, 700 °C, 120 h | oxide thickness | 51.3 nm | 52.9 nm | +3% | within (±15.1%) | supported within scope | Fig. 6 (linear axes), PDF p. 6, graph reading; pairs at one time are two points on the figure |
| Wet oxygen, 920 °C, 0.117 h | oxide thickness | 42 nm | 43.4 nm | +3% | within (±10%) | supported within scope | Fig. 5 (linear axes, open circles), PDF p. 6, graph reading |
| Wet oxygen, 920 °C, 0.23 h | oxide thickness | 78 nm | 79.7 nm | +2% | within (±10%) | supported within scope | Fig. 5 (linear axes, open circles), PDF p. 6, graph reading |
| Wet oxygen, 920 °C, 0.3 h | oxide thickness | 102 nm | 100 nm | -2% | within (±10%) | supported within scope | Fig. 5 (linear axes, open circles), PDF p. 6, graph reading |
| Wet oxygen, 920 °C, 0.4 h | oxide thickness | 131 nm | 128 nm | -2% | within (±10%) | supported within scope | Fig. 5 (linear axes, open circles), PDF p. 6, graph reading |
| Wet oxygen, 920 °C, 0.5 h | oxide thickness | 155 nm | 154 nm | -1% | within (±10%) | supported within scope | Fig. 5 (linear axes, open circles), PDF p. 6, graph reading |
| Wet oxygen, 920 °C, 0.6 h | oxide thickness | 181 nm | 178 nm | -2% | within (±10%) | supported within scope | Fig. 5 (linear axes, open circles), PDF p. 6, graph reading |
| Wet oxygen, 1100 °C, 0.05 h | oxide thickness | 100 nm | 114 nm | +14% | near (±10%) | supported within scope | Fig. 1 (log axes), PDF p. 2, graph reading |
| Wet oxygen, 1100 °C, 0.64 h | oxide thickness | 520 nm | 511 nm | -2% | within (±10%) | supported within scope | Fig. 1 (log axes), PDF p. 2, graph reading |
| Wet oxygen, 1100 °C, 2 h | oxide thickness | 920 nm | 940 nm | +2% | within (±10%) | supported within scope | Fig. 1 (log axes), PDF p. 2, graph reading |
Aligning the simulation: what the unstated things would have to be
Every step whose timing or temperature the paper leaves open carries a range in the history above (VARY). scripts/align_study.py searched those ranges against the paper's numbers through the same predictor, first one unknown at a time, then all together. No parameter a program declares fitted was touched. The unknowns were chosen on dry_1100, dry_1200 only; every other number is a test they played no part in.
| Unknown | What the paper says | Range searched | The reproduction used | Best alone | Score at the reproduction's value | Best score alone |
|---|---|---|---|---|---|---|
| Insertion into the tube at 1200 °C, time before counting starts: duration | Push rate, warm-up and whether time zero is insertion or the gas switch: not given | 1 to 1800 s | 1 s | 1 s | 5 of 6 within tolerance, median error 5.0% | 5 of 6 within tolerance, median error 5.0% |
Together: Push duration 1 s (was 1).
As reproduced: 35 of 44 within tolerance, median error 3.1%. Aligned: 35 of 44 within tolerance, median error 3.1%. On the held-out samples only: 30 of 38 within tolerance, median error 2.5% as reproduced, 30 of 38 within tolerance, median error 2.5% aligned.
Choices of program or material property, each scored on its own and on top of the aligned history:
| Variant | Alone | With the aligned history |
|---|---|---|
| wet written as the named ambient wet_O2 | 27 of 44 within tolerance, median error 6.2% | 27 of 44 within tolerance, median error 6.2% |
| wet written as steam at 1 atm | 28 of 44 within tolerance, median error 6.2% | 28 of 44 within tolerance, median error 6.2% |
Time zero. The only history unknown is how long a slice sat in the gas before the clock started (Push, 1 s to 30 min). It was chosen on the 1100 and 1200 °C curves, where a few minutes matter most. None is best: 5 of 6 within tolerance at 1 s, 3.5 s and 12 s, falling to 3 of 6 at 8.6 min and 2 of 6 at 30 min (median error from 5.0% to 22.9%). With the 230 Å start, 2.5 min before time zero still leaves 5 of 6 (median 7.3%); somewhere between 2.5 and 8.6 min the data rule it out. The aligned history is the reproduced one, so the test score is unchanged: 22 of 38 on the other six cases.
Wet oxygen. Written as the stated mixture (640 Torr water, 120 Torr oxygen) the gas reaches the programs as steam. The 1965 program reads only its 0.158 atm of oxygen and grows 23.4 to 24.8 nm at 920 °C against the paper's 42 to 181 nm, and 68.5 against 920 nm after 2 h at 1100 °C. Written as the named wet_O2 or as steam, the same program grows nothing at all (23.0 nm, its starting value): the two variants score the same as the mixture because every wet point is far off either way. The thin-oxide program does not run on any wet history. The support label says “steam and wet oxygen steps grow nothing in it”, which is wrong for the mixture: it grows the oxygen share.
The starting oxide. It could not be searched as an unknown (see the side calculation below the conclusions): 200 to 230 Å fit best, as the paper says.
30 within, 4 near, 4 off of 38 numbers with the aligned settings (the samples used to choose the unknowns are left out).
| Sample | Quantity | The paper | As reproduced above | Aligned | Difference | Verdict | How |
|---|---|---|---|---|---|---|---|
| Dry oxygen, 1000 °C, 2.2 h | oxide thickness | 105 nm | 110 | 110 | +5% | within (±10%) | test |
| Dry oxygen, 1000 °C, 28 h | oxide thickness | 530 nm | 485 | 485 | -9% | within (±10%) | test |
| Dry oxygen, 920 °C, 1.5 h | oxide thickness | 49 nm | 48.8 | 48.8 | -0% | within (±10%) | test |
| Dry oxygen, 920 °C, 2 h | oxide thickness | 58 nm | 56.5 | 56.5 | -3% | within (±10%) | test |
| Dry oxygen, 920 °C, 4 h | oxide thickness | 86 nm | 84.1 | 84.1 | -2% | within (±10%) | test |
| Dry oxygen, 920 °C, 6 h | oxide thickness | 111 nm | 108 | 108 | -3% | within (±10%) | test |
| Dry oxygen, 920 °C, 8 h | oxide thickness | 131 nm | 130 | 130 | -1% | within (±10%) | test |
| Dry oxygen, 920 °C, 10 h | oxide thickness | 151 nm | 150 | 150 | -1% | within (±10%) | test |
| Dry oxygen, 920 °C, 12 h | oxide thickness | 170 nm | 168 | 168 | -1% | within (±10%) | test |
| Dry oxygen, 920 °C, 23 h | oxide thickness | 240 nm | 252 | 252 | +5% | within (±10%) | test |
| Dry oxygen, 800 °C, 8.4 h | oxide thickness | 43 nm | 41.8 | 41.8 | -3% | within (±10%) | test |
| Dry oxygen, 800 °C, 8.4 h | oxide thickness | 38 nm | 41.8 | 41.8 | +10% | within (±10%) | test |
| Dry oxygen, 800 °C, 17 h | oxide thickness | 68 nm | 59.8 | 59.8 | -12% | near (±10%) | test |
| Dry oxygen, 800 °C, 68 h | oxide thickness | 170 nm | 150 | 150 | -12% | near (±10%) | test |
| Dry oxygen, 800 °C, 68 h | oxide thickness | 150 nm | 150 | 150 | -0% | within (±10%) | test |
| Dry oxygen, 700 °C, 16 h | oxide thickness | 18.6 nm | 27.1 | 27.1 | +46% | off (±15%) | test |
| Dry oxygen, 700 °C, 16 h | oxide thickness | 16.6 nm | 27.1 | 27.1 | +63% | off (±15%) | test |
| Dry oxygen, 700 °C, 24 h | oxide thickness | 20.5 nm | 29.1 | 29.1 | +42% | off (±15%) | test |
| Dry oxygen, 700 °C, 24 h | oxide thickness | 18.2 nm | 29.1 | 29.1 | +60% | off (±15%) | test |
| Dry oxygen, 700 °C, 32 h | oxide thickness | 27.6 nm | 31.1 | 31.1 | +13% | within (±15%) | test |
| Dry oxygen, 700 °C, 32 h | oxide thickness | 26.2 nm | 31.1 | 31.1 | +19% | near (±15%) | test |
| Dry oxygen, 700 °C, 48 h | oxide thickness | 34.7 nm | 35.2 | 35.2 | +1% | within (±15%) | test |
| Dry oxygen, 700 °C, 48 h | oxide thickness | 33 nm | 35.2 | 35.2 | +7% | within (±15%) | test |
| Dry oxygen, 700 °C, 78 h | oxide thickness | 43.7 nm | 42.6 | 42.6 | -2% | within (±15%) | test |
| Dry oxygen, 700 °C, 78 h | oxide thickness | 43 nm | 42.6 | 42.6 | -1% | within (±15%) | test |
| Dry oxygen, 700 °C, 93 h | oxide thickness | 46.5 nm | 46.3 | 46.3 | -0% | within (±15%) | test |
| Dry oxygen, 700 °C, 93 h | oxide thickness | 44.4 nm | 46.3 | 46.3 | +4% | within (±15%) | test |
| Dry oxygen, 700 °C, 120 h | oxide thickness | 53.7 nm | 52.9 | 52.9 | -1% | within (±15%) | test |
| Dry oxygen, 700 °C, 120 h | oxide thickness | 51.3 nm | 52.9 | 52.9 | +3% | within (±15%) | test |
| Wet oxygen, 920 °C, 0.117 h | oxide thickness | 42 nm | 43.4 | 43.4 | +3% | within (±10%) | test |
| Wet oxygen, 920 °C, 0.23 h | oxide thickness | 78 nm | 79.7 | 79.7 | +2% | within (±10%) | test |
| Wet oxygen, 920 °C, 0.3 h | oxide thickness | 102 nm | 100 | 100 | -2% | within (±10%) | test |
| Wet oxygen, 920 °C, 0.4 h | oxide thickness | 131 nm | 128 | 128 | -2% | within (±10%) | test |
| Wet oxygen, 920 °C, 0.5 h | oxide thickness | 155 nm | 154 | 154 | -1% | within (±10%) | test |
| Wet oxygen, 920 °C, 0.6 h | oxide thickness | 181 nm | 178 | 178 | -2% | within (±10%) | test |
| Wet oxygen, 1100 °C, 0.05 h | oxide thickness | 100 nm | 114 | 114 | +14% | near (±10%) | test |
| Wet oxygen, 1100 °C, 0.64 h | oxide thickness | 520 nm | 511 | 511 | -2% | within (±10%) | test |
| Wet oxygen, 1100 °C, 2 h | oxide thickness | 920 nm | 940 | 940 | +2% | within (±10%) | test |
What alignment cannot fix. The dry misses are the program's constants, not the history: the Arrhenius line through Table II is off the table by up to 15%, and the 1200 °C short-time point and the 800 °C long-time points follow it. Using the table's own B and B/A at each temperature, or the paper's activation energies, is a change to sourced constants, not a history unknown, and was not made here. The 700 °C early points need a starting regime that grows from below 230 Å. Wet oxygen needs a program with water as the oxidant (Table I); none exists.
How to read the scores: the constants come from Table II, which the authors fitted to these thicknesses, so even the held-out cases are not an independent test. They test our transcription (confirmed cell by cell by the second reading), our derivation and the graph reading.
What our language and ontology cannot yet say
- A starting oxide on the sample. The 230 Å is a PARAMETER of the program and applies to every history, wet included, where the paper's own start is zero. A sample field such as
STARTING_OXIDE: 0 nm(read by the growth programs, with the program's intercept as its default) would let wet and dry slices of one preparation differ, and would let the alignment search it. - Water as an oxidant.
wet_O2has no partial pressures; written as a mixture the water reaches no program, and the 1965 program grows the 16% oxygen share. A wet growth program (Table I constants, B with 16.3 kcal/mole) reading p_H2O is needed before any wet history means anything. - Pressure on B only. The paper's law has B proportional to the oxidant pressure and A independent of it. Our operator scales the whole rate. A program that reads p_O2 only in B would be the paper's law for mixtures, which Study B (Krzeminski's 10% oxygen ramp) needs.
- One slice measured several times. The language cannot say that a curve's points are the same slice taken out, measured and put back (an EVENT unload, measure, reload between RUNs of one sample) or separate slices. The paper does not say which; the language should at least be able to write both.
- A support label per gas. The planar growth program's label claims wet and steam steps grow nothing, but a mixture makes it grow the oxygen share. The label should be computed from what the program reads (p_O2) rather than from the gas class.
With heating and cooling transitions
No paper we hold states how its wafers heated up or cooled down. The project owner specified scenarios for one Vitkavage wafer (isl_harness/vitkavage_transitions.py); isl_harness/thermal_transitions.py applies the same numbers to every sample here: a heat-up in nitrogen before the first furnace step (a hot push of 1 to 5 min, or a cold-furnace ramp of 60 to 120 min), the owner's radiative cooling knots after the last furnace step or after the paper's own pull (fast, or every time multiplied by 5), and ramps around an anneal at 300 to 500 °C. The paper's own steps are kept as written. All transitions are assumptions, written in the history with TIMING assumed.
| History | Within tolerance | Median error | Changed numbers |
|---|---|---|---|
| as the paper states it (above) | 35 of 44 | 3.2% | |
| heat-up A (hot push), fast cooling | 35 of 44 | 3.2% | 0 of 44 moved by more than 2% |
| heat-up A (hot push), slow cooling | 35 of 44 | 3.2% | 0 of 44 moved by more than 2% |
| heat-up B (cold-furnace ramp), fast cooling | 35 of 44 | 3.2% | 0 of 44 moved by more than 2% |
| heat-up B (cold-furnace ramp), slow cooling | 35 of 44 | 3.2% | 0 of 44 moved by more than 2% |
The paper's own conclusions
| The paper states | What we find | |
|---|---|---|
| x0² + A x0 = B(t + τ) describes dry and wet oxidation from 700 to 1200 °C (their own data) and 300 to 20 000 Å | The program is this law with Arrhenius constants. On dry oxygen 27 of 35 graph points are within tolerance; the misses are the first 700 °C points (below the 230 Å start) and points where the Arrhenius line leaves Table II | dry reproduced; wet not |
| Table II: B and B/A for dry oxygen at 700–1200 °C | Our transcription agrees with the second reading in every cell; the program's Arrhenius line departs from the table by up to 15% in B and 15% in B/A | transcription right; fit within 15% |
| Activation energies, dry: 28.5 kcal/mole for B, 46.0 for B/A (Figs. 9 and 11) | Our fit to Table II alone: 29.7 and 46.8 kcal/mole (1.286 and 2.030 eV) | close, not the same |
| B is proportional to the oxidant's partial pressure; A is not | The program multiplies the whole rate by p_O2, so A moves with pressure; and it has no water as an oxidant | differs |
| Wet oxidation: xi = 0, B = 0.287 μm²/h and B/A = 1.27 μm/h at 1000 °C (Table I) | No program has wet constants. Written as a mixture, the 1965 program grows the oxide in 0.158 atm of dry oxygen and lands far below the paper | no program |
What the reproduction shows
Table II against the program. The program's B and B/A at each temperature of Table II, from the constants in the template (dry oxygen, (111), 1 atm). Table values are our transcription, which the second reading confirms.
| T (°C) | B, Table II (μm²/h) | B, program | difference | B/A, Table II (μm/h) | B/A, program | difference |
|---|---|---|---|---|---|---|
| 1200 | 0.045 | 0.0517 | +15% | 1.12 | 0.99 | -12% |
| 1100 | 0.027 | 0.0247 | -8% | 0.30 | 0.309 | +3% |
| 1000 | 0.0117 | 0.0105 | -10% | 0.071 | 0.0802 | +13% |
| 920 | 0.0049 | 0.0048 | -2% | 0.0208 | 0.0232 | +12% |
| 800 | 0.0011 | 0.00119 | +8% | 0.0030 | 0.00255 | -15% |
| 700 | not determined | 0.000284 | 0.00026 | 0.000267 | +3% |
The scatter of the table about a straight Arrhenius line is in the table itself: each row is the authors' fit of x0 against t/x0 at one temperature, with A known to ±12% at high temperature. The largest departures are B at 1200 °C (line 15% above the table) and B/A at 800 °C (line 15% below). The 1200 °C point at 0.27 h, 20% above the figure, and the 800 °C points at 17 and 68 h, 12% below, sit where the line leaves the table.
The starting oxide, outside the language. The sample cannot state a starting oxide, so x_i could not be searched by the alignment. It was varied directly in the template (a side calculation, PARAMETER x_i replaced, the same 35 dry points and tolerances): 100 Å gives 15 of 35 within tolerance (median error 17.1%), 150 Å 20 (11.3%), 200 Å 28 (5.4%), 210 Å 28 (5.0%), 230 Å 27 (4.2%), 250 Å 26 (6.1%). The paper's own range, 200 to 250 Å, is where the data put it; they cannot choose inside it. No value fixes the first four points at 700 °C (16.6 to 20.5 nm at 16 and 24 h), which lie below every starting thickness in that range: at 700 °C the fast first regime is not a step at time zero.
What we would like Emily to check
- Deal and Grove give the dry intercept as 200, 210, 230 ± 30 and 250 Å in different places. Is it right for a growth program to start every dry oxide at 230 Å, or should that number belong to the sample (its starting surface) rather than to the law?
- Our constants are a least-squares line through Table II, not the authors' own activation energies from Figs. 9 and 11 (which also use other data). Which should a program use?
- Would the points of Figs. 1 and 2 be separate slices, or one slice re-measured? Does it matter for oxides of this thickness?
- The paper says A does not depend on pressure. Our program scales the whole rate with oxygen pressure. For mixtures of a few percent oxygen in nitrogen, which is right?