Skip to content

Commit e4528f7

Browse files
committed
docs: update installation and model documentation, add oxidation examples
1 parent 45597f6 commit e4528f7

11 files changed

Lines changed: 478 additions & 97 deletions

File tree

18.8 KB
Loading

docs/assets/examples/locos.png

19 KB
Loading

docs/deps/index.md

Lines changed: 19 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,11 +11,27 @@ nav_order: 2
1111

1212
![]({% link assets/images/ViennaPS_framework.png %})
1313

14-
ViennaPS is part of the ViennaTools ecosystem and depends on several lightweight, header-only ViennaTools libraries. During configuration, CMake will fetch them automatically as part of the ViennaPS build. **No separate installation step is required for these dependencies**:
14+
ViennaPS is part of the ViennaTools ecosystem and depends on several
15+
ViennaTools libraries. During configuration, CMake will fetch them
16+
automatically as part of the ViennaPS build. **No separate installation step is
17+
required for these dependencies**:
1518

1619
## [ViennaLS](https://github.com/ViennaTools/ViennaLS)
1720

18-
Handles topography simulation using an efficient level-set implementation based on a hierarchical run-length encoded (HRLE) data structure. ViennaLS also integrates the Visualization Toolkit (VTK) for geometry import/export, enabling processed geometries to be saved in the VTK format and visualized using ParaView.
21+
Provides the level-set algorithms used for topography evolution, geometry
22+
operations, and surface/volume mesh generation. ViennaLS also provides the
23+
physics solver stack used by the ViennaPS thermal oxidation model, including
24+
the coupled oxidant diffusion, viscous oxide-flow, stress/pressure, and nitride
25+
mask-deformation solves needed for LOCOS and trench oxidation simulations.
26+
27+
ViennaLS integrates the Visualization Toolkit (VTK) for geometry import/export,
28+
enabling processed geometries and solver fields to be written in VTK formats
29+
and visualized with tools such as ParaView.
30+
31+
## [ViennaHRLE](https://github.com/ViennaTools/ViennaHRLE)
32+
33+
Provides the hierarchical run-length encoded data structure used by ViennaLS to
34+
store sparse level-set grids efficiently.
1935

2036
<!-- ViennaLS forms the foundation of the process simulator, applying the level-set surface representation concepts for topography simulations. This module not only stores the level-set surface but also encompasses essential algorithms for geometry initialization, level-set value manipulation based on a velocity field, surface feature analysis, and seamless conversion of the level-set representation to other commonly employed material representations in device simulators. -->
2137

@@ -37,4 +53,4 @@ Furthermore, pseudo-particles have the capability to undergo reflection from the
3753

3854
## [ViennaCore](https://github.com/ViennaTools/ViennaCore)
3955

40-
A utility library that provides common functionalities such as logging, vector operations, and other shared methods essential for all sub-libraries.
56+
A utility library that provides common functionalities such as logging, vector operations, and other shared methods essential for all sub-libraries.

docs/examples/index.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,7 @@ Individual examples can also be build by calling `make` in their respective buil
4848
| **Ion Beam Etching**<br/>[![]({% link assets/examples/IBE.png %})](https://github.com/ViennaTools/ViennaPS/tree/master/examples/ionBeamEtching) | **Selective Epitaxy**<br/>[![]({% link assets/examples/epitaxy.png %})](https://github.com/ViennaTools/ViennaPS/tree/master/examples/selectiveEpitaxy) |
4949
| **Sputter Deposition**<br/>[![]({% link assets/examples/sputterDepo.png %})](https://github.com/ViennaTools/ViennaPS/tree/master/examples/sputterDeposition) | **Stack Etching**<br/>[![]({% link assets/examples/stackEtching.png %})](https://github.com/ViennaTools/ViennaPS/tree/master/examples/stackEtching) |
5050
| **TEOS Trench Deposition**<br/>[![]({% link assets/examples/TEOS.png %})](https://github.com/ViennaTools/ViennaPS/tree/master/examples/TEOSTrenchDeposition) | **Trench Deposition**<br/>[![]({% link assets/examples/trenchDepo.png %})](https://github.com/ViennaTools/ViennaPS/tree/master/examples/trenchDeposition) |
51+
| **Fin Oxidation**<br/>[![]({% link assets/examples/finOxidation.png %})](https://github.com/ViennaTools/ViennaPS/tree/master/examples/finOxidation) | **LOCOS Oxidation**<br/>[![]({% link assets/examples/locos.png %})](https://github.com/ViennaTools/ViennaPS/tree/master/examples/locosOxidation) |
5152

5253
More Examples:
5354
* [Custom Example Process](https://github.com/ViennaTools/ViennaPS/tree/master/examples/exampleProcess)
@@ -58,5 +59,7 @@ More Examples:
5859
* [Fin Oxidation](https://github.com/ViennaTools/ViennaPS/tree/master/examples/finOxidation)
5960
* [Trench Oxidation](https://github.com/ViennaTools/ViennaPS/tree/master/examples/trenchOxidation)
6061
* [LOCOS Oxidation](https://github.com/ViennaTools/ViennaPS/tree/master/examples/locosOxidation)
62+
* [Neutral Transport Cylinder](https://github.com/ViennaTools/ViennaPS/tree/master/examples/neutralTransportCylinder)
63+
* [Surface Diffusion](https://github.com/ViennaTools/ViennaPS/tree/master/examples/surfaceDiffusion)
6164
* [SiGe Selective Etching](https://github.com/ViennaTools/ViennaPS/tree/master/examples/SiGeSelectiveEtching)
6265
* [Trench Deposition Geometric](https://github.com/ViennaTools/ViennaPS/tree/master/examples/trenchDepositionGeometric)

docs/index.md

Lines changed: 87 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -17,55 +17,98 @@ Process Simulation Library
1717

1818
---
1919

20-
ViennaPS is a header-only C++ library for topography simulation in microelectronic fabrication processes. It models the evolution of 2D and 3D surfaces during etching, deposition, and related steps, combining advanced level-set methods for surface evolution with Monte Carlo ray tracing for flux calculation. This allows accurate, feature-scale simulation of complex fabrication geometries.
20+
ViennaPS is a header-only C++ library for process and topography simulation in
21+
microelectronic fabrication. It models the evolution of 2D and 3D surfaces
22+
during etching, deposition, oxidation, and related steps, combining advanced
23+
level-set methods for surface evolution with Monte Carlo ray tracing for flux
24+
calculation and physics-based solvers for coupled processes.
2125

22-
ViennaPS supports both physical process models and fast emulation approaches, enabling flexible and efficient development of semiconductor processes. It can be easily integrated into existing C++ projects and also provides Python bindings for use in Python-based workflows. The library is actively developed and continuously improved to address the needs of process and topography simulation in microelectronics.
26+
ViennaPS supports both physics-based process models and fast emulation
27+
approaches, enabling flexible and efficient development of semiconductor
28+
processes. It can be integrated into existing C++ projects and also provides
29+
Python bindings for Python-based workflows.
2330

2431
{: .note }
2532
> ViennaPS is under heavy development and improved daily. If you do have suggestions or find bugs, please let us know on [GitHub][ViennaPS issues] or contact us directly at [viennatools@iue.tuwien.ac.at](mailto:viennatools@iue.tuwien.ac.at)!
2633
27-
This documentation is your guide to using and getting the most out of our process simulation library. Whether you're a researcher looking to improve your simulation workflows or an engineer working to optimize fabrication processes, this library offers a flexible and powerful platform to support your work.
28-
29-
Inside, you'll find clear explanations, practical examples, and recommended workflows to help you use the library effectively. Our goal is to give you the knowledge and tools needed to accurately simulate a wide range of fabrication processes, enabling better insights, informed decisions, and innovation in the field.
34+
This documentation is your guide to installing ViennaPS, building C++ and
35+
Python workflows, selecting process models, and running the provided examples.
3036

3137
---
3238

33-
> ⚙️ **ViennaPS v4.0.0 Released — Major Framework Update**
34-
>
35-
> This release introduces a complete rework of the process framework, unified Python bindings, and extended GPU and material support.
36-
37-
## What's New
38-
39-
### Core framework
40-
- Modular **flux engine** with new options: `AUTO` (default), `CPU_DISK`, `GPU_DISK`, `GPU_LINE`, `GPU_TRIANGLE`.
41-
- `AUTO` automatically selects CPU or GPU based on build and model support.
42-
- **AtomicLayerProcess** removed; ALD handled by standard `Process()`.
43-
- New parameter structs:
44-
- `AtomicLayerProcessParameters`
45-
- `CoverageParameters`
46-
- `RayTracingParameters`
47-
- `AdvectionParameters`
48-
- All parameter structs now use a single `setParameters()` function.
49-
50-
### Python interface
51-
- Unified package: `viennaps` replaces `viennaps2d` and `viennaps3d`.
52-
- Dimension modules available under `viennaps.d2` and `viennaps.d3`.
53-
- Default dimension is 2D; can be changed via `viennaps.setDimension()`.
54-
55-
### Models and simulation
56-
- Extended **material list** with common semiconductor materials.
57-
- **Fluorocarbon model** now supports arbitrary material combinations.
58-
- Fixed issue where **underlying materials** were not etched in geometric models.
59-
60-
### I/O and utilities
61-
- Updated `saveSurfaceMesh()`:
62-
- Removed `addMaterialIds`
63-
- Added `addInterfaces` to export all material interfaces.
64-
- Improved extrusion and slicing functions.
65-
66-
### Build system
67-
- GPU builds now **auto-download OptiX headers** if missing.
68-
- Updated CI, OpenMP handling, and dependencies.
39+
## Quick Start
40+
41+
Install the Python package from PyPI:
42+
43+
```bash
44+
pip install ViennaPS
45+
```
46+
47+
Then import it in Python:
48+
49+
```python
50+
import viennaps as vps
51+
```
52+
53+
By default, ViennaPS operates in 2D. Use `vps.setDimension(3)` for 3D
54+
workflows.
55+
56+
For C++ projects, ViennaPS is usually consumed with
57+
[CPM.cmake](https://github.com/cpm-cmake/CPM.cmake):
58+
59+
```cmake
60+
CPMAddPackage("gh:viennatools/viennaps@4.6.1")
61+
target_link_libraries(${PROJECT_NAME} PUBLIC ViennaTools::ViennaPS)
62+
```
63+
64+
See [Installing the Library]({% link inst/index.md %}) for full installation
65+
instructions.
66+
67+
## Dependencies
68+
69+
ViennaPS is part of the ViennaTools ecosystem. During CMake configuration, the
70+
required ViennaTools libraries are fetched automatically:
71+
72+
* [ViennaCore](https://github.com/ViennaTools/ViennaCore)
73+
* [ViennaLS](https://github.com/ViennaTools/ViennaLS)
74+
* [ViennaHRLE](https://github.com/ViennaTools/ViennaHRLE)
75+
* [ViennaRay](https://github.com/ViennaTools/ViennaRay)
76+
* [ViennaCS](https://github.com/ViennaTools/ViennaCS)
77+
78+
The main external dependencies are:
79+
80+
* [VTK](https://vtk.org/) 9.0.0 or newer
81+
* [Embree](https://www.embree.org/) 4.0.0 or newer
82+
83+
CMake checks for these dependencies during configuration. If they are not
84+
available, they can be built from source as part of the build. To prefer local
85+
installations, pass their prefixes through `VIENNAPS_LOOKUP_DIRS` or
86+
`CMAKE_PREFIX_PATH`.
87+
88+
## Supported Platforms
89+
90+
ViennaPS supports Linux, macOS, and Windows with a C++20 compiler and OpenMP
91+
support.
92+
93+
## GPU Acceleration
94+
95+
ViennaPS supports experimental GPU acceleration for ray tracing and for the
96+
diffusion solver in the physics-based oxidation model. GPU builds require a
97+
CUDA-capable system. See [Installing the GPU Module]({% link inst/gpu.md %})
98+
for details.
99+
100+
## Tests
101+
102+
ViennaPS uses CTest. To build and run the regular test suite:
103+
104+
```bash
105+
git clone https://github.com/ViennaTools/ViennaPS.git
106+
cd ViennaPS
107+
108+
cmake -B build -DVIENNAPS_BUILD_TESTS=ON
109+
cmake --build build
110+
ctest -E "Benchmark|Performance" --test-dir build
111+
```
69112

70113
---
71114

@@ -89,8 +132,9 @@ Contact us via: [viennatools@iue.tuwien.ac.at](mailto:viennatools@iue.tuwien.ac.
89132

90133
## License
91134

92-
ViennaPS is licensed under the [MIT License](https://github.com/ViennaTools/ViennaPS/blob/master/LICENSE).
135+
Versions older than 4.3.0 were released under the MIT License. Starting with
136+
version 4.3.0, ViennaPS is licensed under the
137+
[GPL-3.0 License](https://github.com/ViennaTools/ViennaPS/blob/master/LICENSE).
93138

94139
[ViennaPS repo]: https://github.com/ViennaTools/ViennaPS
95140
[ViennaPS issues]: https://github.com/ViennaTools/ViennaPS/issues
96-

docs/inst/gpu.md

Lines changed: 44 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ parent: Installing the Library
55
nav_order: 1
66
---
77

8-
# Installing the GPU Module
8+
# Installing the GPU Module
99
{: .fs-9 .fw-500 }
1010

1111
---
@@ -24,56 +24,56 @@ The GPU ray tracing module is implemented using [**OptiX 8.0**](https://develope
2424

2525
## Python Bindings Installation
2626

27-
For a convenient setup, a helper script is provided. It builds **ViennaPS** and **ViennaLS** with GPU support directly from source inside the `ViennaTools` folder.
27+
The Python package can be built with GPU support using helper scripts in
28+
`python/scripts`. GPU support enables GPU ray tracing in ViennaPS and the GPU
29+
BiCGSTAB solver used by the oxidation model.
2830

29-
Run:
31+
### Existing ViennaPS Checkout
32+
33+
Use `install_ViennaPS.py` when working from a ViennaPS checkout. It creates or
34+
reuses a virtual environment, installs a compatible local ViennaLS build, and
35+
then installs ViennaPS from the selected checkout.
3036

3137
```sh
32-
wget https://raw.githubusercontent.com/ViennaTools/ViennaPS/refs/tags/v4.2.1/python/scripts/install_ViennaTools.py && python3 install_ViennaTools.py
38+
python python/scripts/install_ViennaPS.py
3339
```
3440

35-
The script performs the following steps:
41+
When working from existing local ViennaPS and ViennaLS checkouts, pass the
42+
ViennaLS source directory explicitly:
3643

37-
* Creates a virtual environment (`.venv`) in the `ViennaTools` directory.
38-
* Builds and installs **ViennaLS** and **ViennaPS** with GPU support enabled.
39-
* Installs required system dependencies (**VTK**, **Embree**).
44+
```sh
45+
python python/scripts/install_ViennaPS.py --viennals-dir ../ViennaLS
46+
```
4047

41-
> **Note:** Installing system dependencies requires `sudo` privileges.
48+
Use `--no-gpu` for a CPU-only local build.
4249

43-
---
50+
### Fresh ViennaTools Setup
4451

45-
There are two installation scripts available in the `python/scripts` directory, with different compatibility and functionality:
46-
47-
### 1. `install_ViennaPS.py`
48-
49-
- **Compatibility:** All Linux distributions and Windows
50-
- **Functionality:**
51-
- Builds and installs **ViennaPS** locally
52-
- Checks for an existing local build of **ViennaLS**
53-
- Checks for OptiX installation, downloads if not found
54-
- **Limitations:**
55-
- Assumes you have already installed dependencies like VTK and embree manually. Otherwise, they will be built from source, which can take a long time.
56-
57-
### 2. `install_ViennaTools.py`
58-
59-
- **Compatibility:**
60-
- Linux: Ubuntu 22.04+, Debian 11+, Fedora 35+, Rocky Linux 8+, AlmaLinux 8+, Arch Linux, Manjaro, openSUSE Leap 15.3+, openSUSE Tumbleweed
61-
- macOS: macOS 12+ (Monterey and later) with Homebrew (only CPU support, no GPU)
62-
- **Prerequisites**:
63-
- For Linux:
64-
- `sudo` privileges for installing system packages
65-
- Git
66-
- Python 3.8+
67-
68-
- For macOS:
69-
- [Homebrew](https://brew.sh/) package manager
70-
- Xcode Command Line Tools (will be installed automatically if missing)
71-
- Git (usually comes with Xcode Command Line Tools)
72-
- Python 3.8+
73-
- **Functionality:**
74-
- Installs all required dependencies: `VTK`, `embree`, and others using `apt`
75-
- Builds and installs **ViennaLS** and **ViennaPS** in a local folder named `ViennaTools`
76-
- Suitable for a fresh installation on Ubuntu systems
52+
Use `install_ViennaTools.py` for a broader fresh setup. It creates a
53+
`ViennaTools` directory, installs supported system dependencies, clones
54+
ViennaLS and ViennaPS, creates a virtual environment, and builds both Python
55+
packages.
56+
57+
From a ViennaPS checkout:
58+
59+
```sh
60+
python python/scripts/install_ViennaTools.py
61+
```
62+
63+
Or download the script directly from a tagged release:
64+
65+
```sh
66+
wget https://raw.githubusercontent.com/ViennaTools/ViennaPS/refs/tags/v4.6.1/python/scripts/install_ViennaTools.py
67+
python3 install_ViennaTools.py
68+
```
69+
70+
GPU support is enabled by default on Linux when CUDA is available. Use
71+
`--no-gpu` for a CPU-only setup. On macOS, GPU support is disabled because
72+
NVIDIA CUDA/OptiX is not available.
73+
74+
{: .note }
75+
Installing system dependencies with `install_ViennaTools.py` may require
76+
administrator privileges on Linux.
7777

7878
## CMake Configuration
7979

@@ -100,11 +100,11 @@ include("cmake/cpm.cmake") # Include CPM.cmake (get from: https://github.com/cpm
100100
101101
CPMFindPackage(
102102
NAME ViennaPS
103-
VERSION 4.2.1
103+
VERSION 4.6.1
104104
GIT_REPOSITORY "https://github.com/ViennaTools/ViennaPS"
105105
OPTIONS "VIENNAPS_USE_GPU ON")
106106
107107
# Link against ViennaPS
108108
add_executable(example_gpu main.cpp)
109-
target_link_libraries(example_gpu PRIVATE ViennaPS)
109+
target_link_libraries(example_gpu PRIVATE ViennaTools::ViennaPS)
110110
```

0 commit comments

Comments
 (0)