Skip to content

Commit 45597f6

Browse files
committed
add oxidation model to documentation
1 parent 1de718e commit 45597f6

3 files changed

Lines changed: 201 additions & 1 deletion

File tree

docs/examples/index.md

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,5 +54,9 @@ More Examples:
5454
* [GDS Reader](https://github.com/ViennaTools/ViennaPS/tree/master/examples/GDSReader)
5555
* [Interpolation Demo](https://github.com/ViennaTools/ViennaPS/tree/master/examples/interpolationDemo)
5656
* [Oxide Regrowth](https://github.com/ViennaTools/ViennaPS/tree/master/examples/oxideRegrowth)
57+
* [Step Oxidation](https://github.com/ViennaTools/ViennaPS/tree/master/examples/stepOxidation)
58+
* [Fin Oxidation](https://github.com/ViennaTools/ViennaPS/tree/master/examples/finOxidation)
59+
* [Trench Oxidation](https://github.com/ViennaTools/ViennaPS/tree/master/examples/trenchOxidation)
60+
* [LOCOS Oxidation](https://github.com/ViennaTools/ViennaPS/tree/master/examples/locosOxidation)
5761
* [SiGe Selective Etching](https://github.com/ViennaTools/ViennaPS/tree/master/examples/SiGeSelectiveEtching)
58-
* [Trench Deposition Geometric](https://github.com/ViennaTools/ViennaPS/tree/master/examples/trenchDepositionGeometric)
62+
* [Trench Deposition Geometric](https://github.com/ViennaTools/ViennaPS/tree/master/examples/trenchDepositionGeometric)

docs/models/prebuilt/index.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ ViennaPS provides ready-to-use process models for common etching, deposition, an
2626
* [Selective Epitaxy]({% link models/prebuilt/selectiveEpitaxy.md %})
2727
* [Geometric Models]({% link models/prebuilt/geometric.md %})
2828
* [Oxide Regrowth]({% link models/prebuilt/oxideRegrowth.md %})
29+
* [Thermal Oxidation]({% link models/prebuilt/oxidation.md %})
2930

3031
## Exposed Models With Example Coverage
3132

docs/models/prebuilt/oxidation.md

Lines changed: 195 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,195 @@
1+
---
2+
layout: default
3+
title: Thermal Oxidation
4+
parent: Pre-Built Models
5+
grand_parent: Process Models
6+
nav_order: 14
7+
---
8+
9+
# Thermal Oxidation
10+
{: .fs-9 .fw-500}
11+
12+
```c++
13+
#include <psOxidation.hpp>
14+
```
15+
---
16+
17+
`Oxidation` models thermal silicon oxidation using the coupled oxidation solver
18+
provided by ViennaLS. The model exposes process-level controls such as furnace
19+
temperature, oxidation time, oxidant species, pressure, and crystal orientation,
20+
while the underlying solver handles oxidant diffusion, interface motion, and
21+
oxide deformation.
22+
23+
Unlike most particle- or velocity-field-based process models, `Oxidation`
24+
manages its own physics. It is applied through the normal `Process` interface,
25+
but the model internally performs the required coupled diffusion and deformation
26+
steps.
27+
28+
## Physical Model
29+
30+
The built-in rate constants follow a Deal-Grove style thermal oxidation model.
31+
The model supports dry oxidation (`O2`) and wet oxidation (`H2O`) and includes
32+
crystal-orientation-dependent reaction-rate corrections for silicon.
33+
34+
During each internal time step, the solver computes:
35+
36+
* oxidant diffusion through the oxide,
37+
* reaction at the Si/SiO2 interface,
38+
* oxide volume expansion,
39+
* deformation and pressure inside the oxide, and
40+
* stress feedback on diffusion and reaction rates.
41+
42+
If a Si3N4 mask is present in the material stack, the model activates LOCOS
43+
physics. In that mode, oxidant transport below the nitride mask, mask bending,
44+
and constrained oxide expansion produce the characteristic bird's-beak shape.
45+
46+
## Domain Requirements
47+
48+
The domain must contain a silicon material level set, typically `Material::Si`
49+
or `Material::BulkSi`. If no SiO2 level set is present, the model can create a
50+
thin native oxide seed internally.
51+
52+
Common material roles are:
53+
54+
| Role | Default material |
55+
|------|------------------|
56+
| Silicon | `Material::Si` |
57+
| Oxide | `Material::SiO2` |
58+
| LOCOS mask | `Material::Si3N4` |
59+
60+
The material roles can be overridden with `setSiliconMaterial`,
61+
`setOxideMaterial`, and `setMaskMaterial`.
62+
63+
## Main Parameters
64+
65+
| Method | Description |
66+
|--------|-------------|
67+
| `setTemperature(temperatureC)` | Furnace temperature in degrees Celsius. |
68+
| `setTime(timeHr)` | Total oxidation time in hours. |
69+
| `setOxidant(oxidant)` | Oxidant species: `OxidantType::Dry` or `OxidantType::Wet`. |
70+
| `setPressure(pressureAtm)` | Ambient pressure in atm; scales both linear and parabolic rates. |
71+
| `setOrientation(orientation)` | Silicon orientation: `Si100`, `Si110`, `Si111`, or `PolySi`. |
72+
| `setTimeStep(dtHr)` | Optional maximum internal time step in hours. The actual step remains CFL-limited. |
73+
| `setCFLFactor(factor)` | CFL factor for internal interface motion, clamped below 0.5. |
74+
| `setInitialOxideThickness(thicknessUm)` | Native oxide seed thickness in micrometers if no oxide layer exists. |
75+
| `setTransferCoefficient(coefficient)` | Gas-transfer coefficient at the oxide/ambient interface. |
76+
| `setMaxGridPoints(maxGridPoints)` | Caps the Cartesian grid size used by the ViennaLS solves. |
77+
78+
## Stress and Solver Controls
79+
80+
| Method | Description |
81+
|--------|-------------|
82+
| `setReactionActivationVolume(volume)` | Stress coupling for the interface reaction rate. |
83+
| `setDiffusionActivationVolume(volume)` | Stress coupling for oxide diffusivity. |
84+
| `setCouplingIterations(iterations)` | Maximum outer diffusion-deformation coupling iterations. |
85+
| `setCouplingTolerance(tolerance)` | Convergence tolerance for the outer coupling loop. |
86+
| `setMechanicsIterations(iterations)` | Maximum oxide mechanics iterations. |
87+
| `setPressureIterations(iterations)` | Maximum pressure-solve iterations. |
88+
| `setStokesIterations(iterations)` | Maximum Stokes velocity iterations. |
89+
| `setPressureTolerance(tolerance)` | Pressure-solve tolerance. |
90+
| `setStokesTolerance(tolerance)` | Stokes-solve tolerance. |
91+
| `setMechanicsTolerance(tolerance)` | Mechanics coupling tolerance. |
92+
| `setSimpleVelocityRelaxation(alpha)` | SIMPLE velocity relaxation factor. |
93+
| `setSimplePressureRelaxation(beta)` | SIMPLE pressure relaxation factor. |
94+
| `setSolveBounds(minIndex, maxIndex)` | Restricts the solve to explicit Cartesian index bounds. |
95+
| `clearSolveBounds()` | Clears explicit solve bounds. |
96+
97+
## LOCOS Mask Controls
98+
99+
These controls are used when the domain contains the configured mask material,
100+
by default `Material::Si3N4`.
101+
102+
| Method | Description |
103+
|--------|-------------|
104+
| `setMaskMaterial(material)` | Selects the material treated as the oxidation mask. |
105+
| `setMaskParameters(params)` | Replaces the full ViennaLS mask parameter object. |
106+
| `setMaskTractionIterations(iterations)` | Maximum mask-traction iterations. |
107+
| `setMaskTractionTolerance(tolerance)` | Mask-traction convergence tolerance. |
108+
| `setMaskTractionRelaxation(relaxation)` | Outer mask-traction relaxation factor. |
109+
| `setMaskContactLoadRelaxation(relaxation)` | Contact-load relaxation factor. |
110+
| `setMaskContactReleaseFraction(fraction)` | Fraction used for contact release. |
111+
| `setMaskUnilateralContact(enabled)` | Enables or disables unilateral contact. |
112+
| `setMaskSmootherOmega(omega)` | Multigrid smoother over-relaxation for mask mechanics. |
113+
| `setMaskBendingBounds(minIndex, maxIndex)` | Restricts mask bending to explicit bounds. |
114+
| `clearMaskBendingBounds()` | Clears explicit mask bending bounds. |
115+
| `setMaskCouplingIterations(iterations)` | Maximum mask/deformation coupling iterations. |
116+
| `setMaskCouplingTolerance(tolerance)` | Mask/deformation coupling tolerance. |
117+
118+
## GPU Controls
119+
120+
The default solver mode is CPU. GPU acceleration is available when ViennaLS was
121+
built with GPU support.
122+
123+
| Method | Description |
124+
|--------|-------------|
125+
| `setGpuMode(mode)` | Selects `GpuMode::Cpu` or `GpuMode::Gpu`. |
126+
| `setGpuPreconditioner(preconditioner)` | Selects the GPU BiCGSTAB preconditioner, such as Jacobi or ILU0. |
127+
128+
## Output Helpers
129+
130+
| Method | Description |
131+
|--------|-------------|
132+
| `estimatePlanarOxideThickness(initialOxideThickness)` | Returns the planar Deal-Grove oxide thickness estimate for the current settings. |
133+
| `saveSurfaceMesh(domain, fileName)` | Writes a wrapped surface mesh without mutating the active simulation state. |
134+
| `saveVolumeMesh(domain, baseName)` | Writes a wrapped volume mesh and associated oxide-field output. |
135+
136+
## Example Usage
137+
138+
<details markdown="1">
139+
<summary markdown="1">
140+
C++
141+
{: .label .label-blue}
142+
</summary>
143+
```c++
144+
using namespace viennaps;
145+
146+
auto model = SmartPointer<Oxidation<double, 2>>::New();
147+
model->setTemperature(1000.0);
148+
model->setTime(0.2);
149+
model->setOxidant(OxidantType::Wet);
150+
model->setPressure(1.0);
151+
model->setOrientation(SiliconOrientation::Si100);
152+
model->setMaxGridPoints(5000000);
153+
154+
Process<double, 2>(domain, model).apply();
155+
```
156+
</details>
157+
158+
<details markdown="1">
159+
<summary markdown="1">
160+
Python
161+
{: .label .label-green}
162+
</summary>
163+
```python
164+
import viennaps as vps
165+
166+
model = vps.Oxidation()
167+
model.setTemperature(1000.0)
168+
model.setTime(0.2)
169+
model.setOxidant(vps.OxidantType.Wet)
170+
model.setPressure(1.0)
171+
model.setOrientation(vps.SiliconOrientation.Si100)
172+
model.setMaxGridPoints(5_000_000)
173+
174+
vps.Process(domain, model).apply()
175+
```
176+
</details>
177+
178+
## Practical Notes
179+
180+
* Use smaller `gridDelta` values for production results, but keep in mind that
181+
the diffusion/deformation grid scales strongly with dimension.
182+
* `setTimeStep` is an upper bound. The accepted internal step is still limited
183+
by the CFL condition.
184+
* LOCOS simulations need enough vertical space above the mask and oxide so that
185+
the growing oxide and bent mask are not clipped by the domain bounds.
186+
* In narrow or confined geometries, stress feedback can strongly reduce the
187+
local reaction rate. Inspect pressure and stress fields in the oxide-field
188+
output to understand growth suppression.
189+
190+
## Related Examples
191+
192+
* [Step Oxidation](https://github.com/ViennaTools/ViennaPS/tree/master/examples/stepOxidation)
193+
* [Fin Oxidation](https://github.com/ViennaTools/ViennaPS/tree/master/examples/finOxidation)
194+
* [Trench Oxidation](https://github.com/ViennaTools/ViennaPS/tree/master/examples/trenchOxidation)
195+
* [LOCOS Oxidation](https://github.com/ViennaTools/ViennaPS/tree/master/examples/locosOxidation)

0 commit comments

Comments
 (0)