Get started now View it on GitHub


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

ViennaPS supports both physics-based process models and fast emulation approaches, enabling flexible and efficient development of semiconductor processes. It can be integrated into existing C++ projects and also provides Python bindings for Python-based workflows.

ViennaPS is under heavy development and improved daily. If you do have suggestions or find bugs, please let us know on GitHub or contact us directly at viennatools@iue.tuwien.ac.at!

This documentation is your guide to installing ViennaPS, building C++ and Python workflows, selecting process models, and running the provided examples.


Quick Start

Install the Python package from PyPI:

pip install ViennaPS

Then import it in Python:

import viennaps as vps

By default, ViennaPS operates in 2D. Use vps.setDimension(3) for 3D workflows.

For C++ projects, ViennaPS is usually consumed with CPM.cmake:

CPMAddPackage("gh:viennatools/viennaps@4.6.1")
target_link_libraries(${PROJECT_NAME} PUBLIC ViennaTools::ViennaPS)

See Installing the Library for full installation instructions.

Dependencies

ViennaPS is part of the ViennaTools ecosystem. During CMake configuration, the required ViennaTools libraries are fetched automatically:

The main external dependencies are:

CMake checks for these dependencies during configuration. If they are not available, they can be built from source as part of the build. To prefer local installations, pass their prefixes through VIENNAPS_LOOKUP_DIRS or CMAKE_PREFIX_PATH.

Supported Platforms

ViennaPS supports Linux, macOS, and Windows with a C++20 compiler and OpenMP support.

GPU Acceleration

ViennaPS supports experimental GPU acceleration for ray tracing and for the diffusion solver in the physics-based oxidation model. GPU builds require a CUDA-capable system. See Installing the GPU Module for details.

Tests

ViennaPS uses CTest. To build and run the regular test suite:

git clone https://github.com/ViennaTools/ViennaPS.git
cd ViennaPS

cmake -B build -DVIENNAPS_BUILD_TESTS=ON
cmake --build build
ctest -E "Benchmark|Performance" --test-dir build

Contributing

If you want to contribute to ViennaPS, make sure to follow the LLVM Coding guidelines.

Make sure to format all files before creating a pull request:

cmake -B build
cmake --build build --target format

About the project

ViennaPS was developed under the aegis of the Institute for Microelectronics at the TU Wien.

Current contributors: Tobias Reiter, Noah Karnel, Roman Kostal, Lado Filipovic

Contact us via: viennatools@iue.tuwien.ac.at

License

Versions older than 4.3.0 were released under the MIT License. Starting with version 4.3.0, ViennaPS is licensed under the GPL-3.0 License.