Releases: ViennaTools/ViennaPS
ViennaPS-4.1.1
What's Changed
New
- Flux engines now support triangle-based geometries in 2D, enabling more consistent behavior between 2D and 3D simulations.
Improvements and Fixes
- Updated ion model utilities and ray-tracing utilities.
- Fixed an issue where consecutive calls to Process.apply() could crash.
- Improved installation script for smoother dependency handling across platforms.
- Fixed Python package build and CI workflow.
Full Changelog: v4.1.0...4.1.1
ViennaPS-4.1.0
New Features
- CPU triangle flux calculation
- More options in MakeTrench
Fixes
- Fixes in psPlasmaEtching and psIonModelUtil
- Correct wrapper and stubs to reflect changes in psReader
Full Changelog: 4.0.1...v4.1.0
ViennaPS-4.0.1
What's Changed
- Remove NumericType template in DomainSetup
- Update GPU model pipelines and IonBeamEtching model
- Add Materials: Au, Cr
Full Changelog: v4.0.0...4.0.1
ViennaPS-4.0.0
ViennaPS v4.0.0 — 2025-10-22
Highlights
- Complete rework of the process framework with modular flux engine design.
- Improved GPU integration across all process types.
- Unified Python bindings: one package
viennapswith submodulesviennaps.d2andviennaps.d3. - Extended material list covering the most common materials in semiconductor fabrication.
Breaking changes
- Python packages
viennaps2dandviennaps3dare removed. Useviennaps. - Default Python dimension is 2D when using top-level
viennaps.*. - Dimension can be changed at runtime with
viennaps.setDimension(2 | 3). - AtomicLayerProcess was removed. ALD and related atomic-layer processes are now handled by the standard
Process()class. - All process parameters must now be set through parameter structs using
setParameters(). saveSurfaceMesh()behavior changed (see below).
New / changed API
Flux engine
Processes now use a configurable flux engine, which defines how particle fluxes are computed.
Available options:
AUTO(default) — chooses CPU or GPU automatically, depending on build type and model supportCPU_DISKGPU_DISKGPU_LINEGPU_TRIANGLE
Example:
auto proc = ps::Process(...);
proc.setFluxEngineType(ps::FluxEngineType::AUTO);import viennaps as vps
p = vps.Process(...)
p.setFluxEngineType(vps.FluxEngineType.AUTO)Python bindings
-
Unified structure:
import viennaps as vps dom = vps.Domain() # default 2D from viennaps import d3 dom3 = d3.Domain() # explicit 3D vps.setDimension(3) dom = vps.Domain() # now 3D by default
Process parameters
-
Parameters are configured via parameter structs and passed using the unified
setParameters()function:struct AtomicLayerProcessParameters { unsigned numCycles = 1; double pulseTime = 1.0; double coverageTimeStep = 1.0; double purgePulseTime = 0.0; }; struct CoverageParameters { double coverageDeltaThreshold = 0.0; unsigned maxIterations = std::numeric_limits<unsigned>::max(); };
-
Example:
ps::AtomicLayerProcessParameters alp; alp.numCycles = 10; proc.setParameters(alp); // same function for all parameter structs
-
Applies to:
AtomicLayerProcessParametersCoverageParametersRayTracingParametersAdvectionParameters
Domain and mesh output
-
saveSurfaceMesh()updated:- Removed
addMaterialIdsoption. - New option
addInterfaces— when enabled, all material interfaces in the domain are exported.
domain.saveSurfaceMesh("surface.vtp", /*addInterfaces=*/true);
- Removed
Models and physical updates
- Fluorocarbon model now supports arbitrary material combinations.
See documentation for the new parameter setup. - Geometric process models: fixed an issue where underlying materials were not etched correctly.
- Material list extended to include commonly used materials in semiconductor manufacturing (e.g., Si, SiO₂, Si₃N₄, SiGe, W, Al₂O₃, HfO₂, TiN, and more).
Build system and GPU support
- OptiX headers are now downloaded automatically if not found on the system when building with GPU support.
- Standard OpenMP is used on macOS.
Other changes
- Cleaner process metadata management.
- New
calculateFlux()entry point in the process path. - Improved surface mesh generation and point-to-element data mapping.
- Extrusion and slice functions exposed in Python (
Extrude,Slice). - GDS reader fixes and mask blur improvements.
Migration guide
From viennaps2d / viennaps3d to unified viennaps
-
Before:
import viennaps2d as vps dom = vps.Domain(...)
-
After:
import viennaps as vps dom = vps.Domain(...)
Selecting a flux engine
p.setFluxEngineType(vps.FluxEngineType.AUTO) # automatic
p.setFluxEngineType(vps.FluxEngineType.CPU_DISK) # CPU
p.setFluxEngineType(vps.FluxEngineType.GPU_TRIANGLE) # GPUProcess parameters
-
Before:
proc.numCycles = 10; -
After:
ps::AtomicLayerProcessParameters alp; alp.numCycles = 10; proc.setParameters(alp);
Surface mesh export
-
Before:
domain.saveSurfaceMesh("surf.vtp", /*addMaterialIds=*/true);
-
After:
domain.saveSurfaceMesh("surf.vtp", /*addInterfaces=*/true);
ViennaPS-3.7.3
This release provides a temporary compatibility update.
Updated dependency to ViennaLS 4.5.0 (instead of the latest version) to ensure compatibility and restore Python import functionality.
Notes:
This is an interim fix. A major update aligning with ViennaPS 4.0.0 and ViennaLS 5.0.0 will follow soon.
ViennaPS-3.7.2
ViennaPS-3.7.1
ViennaPS-3.7.0
What's Changed
- Update TecPlotReader
- Update license
- Add shared library target
- Improved epitaxy model
- Update ViennaCore with improved Logger
Full Changelog: v3.6.1...v3.7.0
ViennaPS-3.6.1
What's Changed
- Improve TecPlotReader and custom particle sampling example
- Fix domain print in Python bindings
Full Changelog: v3.6.0...v3.6.1
ViennaPS-3.6.0
What's Changed
- Added emulation examples (FinFET, Nanosheet)
- Added coverage convergence warning (too many intermediate iterations)
- add a model of SF6C4F8 Etching
- Add optional process meta data to VTK output
- Add custom particle distribution example
Full Changelog: v3.5.1...v3.6.0