ViennaPS is a header-only C++ process simulation library, which includes surface and volume representations, a ray tracer, and physical models for the simulation of microelectronic fabrication processes. This library seamlessly integrates advanced level-set functionalities with top-down Monte Carlo flux calculations, powered by state-of-the-art ray tracing techniques. This combination brings a new level of accuracy and efficiency to process simulations, empowering engineers and researchers to model complex systems.
Note
ViennaPS is under heavy development and improved daily. If you do have suggestions or find bugs, please let us know!
Releases are tagged on the master branch and available in the releases section.
-
Windows (Visual Studio)
-
Linux (g++ / clang)
-
macOS (XCode)
- C++17 Compiler with OpenMP support
The CMake configuration automatically checks if the dependencies are installed. If CMake is unable to find them, the dependencies will be built from source with the buildDependencies target. Notably, ViennaPS operates as a header-only library, eliminating the need for a formal installation process. Nonetheless, we advise following the outlined procedure to neatly organize and relocate all header files to a designated directory:
git clone https://github.com/ViennaTools/ViennaPS.git
cd ViennaPS
mkdir build && cd build
cmake .. -DCMAKE_INSTALL_PREFIX=/path/to/your/custom/install/
make buildDependencies # this will install all dependencies and might take a while
make install
This will install the necessary headers and CMake files to the specified path. If CMAKE_INSTALL_PREFIX
is not specified, it will be installed to the standard path for your system, usually /usr/local/
.
If one wants to use a specific installation of one or more of the dependencies, just pass the corresponding _*DIR variable as a configuration option (e.g. -DViennaLS_DIR=/path/to/viennals/install -DViennaRay_DIR=/path/to/viennaray/install).
The Python package can be built and installed using the pip
command:
git clone https://github.com/ViennaTools/ViennaPS.git
cd ViennaPS
pip install --user .
Some functionalities of the ViennaPS Python module only work in combination with the ViennaLS Python module. It is therefore recommended to additionally install the ViennaLS Python module on your system. Instructions to do so can be found in the ViennaLS Git Repository.
The 2D version of the library can be imported as follows:
import viennaps2d as vps
In order to switch to three dimensions, only the import needs to be changed:
import viennaps3d as vps
In order to use this library in your CMake project, add the following lines to the CMakeLists.txt of your project:
set(ViennaPS_DIR "/path/to/your/custom/install/")
find_package(ViennaPS REQUIRED)
add_executable(${PROJECT_NAME} ...)
target_include_directories(${PROJECT_NAME} PUBLIC ${VIENNAPS_INCLUDE_DIRS})
target_link_libraries(${PROJECT_NAME} ${VIENNAPS_LIBRARIES})
The examples can be built using CMake:
Important: Make sure all dependencies are installed and have been built previously
mkdir build && cd build
cmake .. -DVIENNAPS_BUILD_EXAMPLES=ON
make buildExamples
The examples can then be executed in their respective build folders with the config files, e.g.:
cd examples/exampleName
./ExampleName config.txt
Individual examples can also be build by calling make
in their respective build folder. An equivalent Python script, using the ViennaPS Python bindings, is also given for each example.
This example focuses on a particle deposition process within a trench geometry. By default, the simulation presents a 2D representation of the trench. Nevertheless, users have the flexibility to conduct 3D simulations by adjusting the value of the constant D in trenchDeposition.cpp to 3. Customization of process and geometry parameters is achieved through the config.txt file. The accompanying image illustrates instances of the trench deposition process, showcasing variations in the particle sticking probability s.
This example demonstrates a hole etching process with a SF6O2 plasma etching chemistry with ion bombardment. The process and geometry parameters can be varied in the config.txt file. Below the results after 10, 20, and 30 seconds of etching are shown.
By changing the dimension of the hole etching example (D = 2), we can easily simulate the profile of a trench etching process with the same plasma chemistry. Here we can, for example, vary the mask tapering angle to observe increased micro-trenching, as shown below.
In the anisotropic process model, the etch or deposition rates are dependent on the crystallographic directions of the surface. This enables the accurate modeling of intricate processes like epitaxial growth or anisotropic wet etching. Basic examples, illustrating these processes are provided with the library and shown below.
This example demonstrates capturing etching byproducts and the subsequent redeposition during a selective etching process in a Si3N4/SiO2 stack. The etching byproducts are captured in a cell set description of the etching plasma. To model the dynamics of these etching byproducts, a convection-diffusion equation is solved on the cell set using finite differences. The redeposition is then captured by adding up the byproducts in every step and using this information to generate a velocity field on the etched surface.
ViennaPS uses CTest to run its tests. In order to check whether ViennaPS runs without issues on your system, you can run:
Important: Make sure all dependencies are installed and have been built previously
mkdir build && cd build
cmake .. -DVIENNAPS_BUILD_EXAMPLES=ON -DCMAKE_BUILD_TYPE=DEBUG
make buildTests
ctest -C Debug
Deprecation Warning: The ViennaPS application is no longer updated with new functionalities added to ViennaPS after release 1.2.0. Please use the Python bindings instead.
It is also possible to build an application which can parse a custom configuration file and execute pre-defined processes. The application can be built using CMake:
Important: Make sure all dependencies are installed and have been built previously
mkdir build && cd build
cmake .. -DVIENNAPS_BUILD_APPLICATION=ON
make buildApplication
This creates 2 executables ViennaPS2D
and ViennaPS3D
which run processes in 2 or 3 dimensions respectively. Every configuration file can be run in 2D or 3D mode.
The configuration file must obey a certain structure in order to be parsed correctly. An example for a configuration file can be seen in SampleConfig.txt. The configuration file is parsed line by line and each successfully parsed line is executed immediately. A detailed documentation for the configuration file can be found in app/README.md.
If you want to contribute to ViennaPS, make sure to follow the LLVM Coding guidelines. Before creating a pull request, make sure ALL files have been formatted by clang-format, which can be done using the format-project.sh script in the root directory.
Current contributors: Tobias Reiter, Julius Piso
Contact us via: [email protected]
ViennaPS was developed under the aegis of the 'Institute for Microelectronics' at the 'TU Wien'. http://www.iue.tuwien.ac.at/
See file LICENSE in the base directory.