Skip to content

Releases: ViennaTools/ViennaPS

ViennaPS-4.1.1

17 Nov 12:24
c7dcf89

Choose a tag to compare

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

10 Nov 14:46
c2c6808

Choose a tag to compare

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

03 Nov 19:36
02dcef0

Choose a tag to compare

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

22 Oct 07:41
9ad781d

Choose a tag to compare

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 viennaps with submodules viennaps.d2 and viennaps.d3.
  • Extended material list covering the most common materials in semiconductor fabrication.

Breaking changes

  • Python packages viennaps2d and viennaps3d are removed. Use viennaps.
  • 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 support
  • CPU_DISK
  • GPU_DISK
  • GPU_LINE
  • GPU_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:

    • AtomicLayerProcessParameters
    • CoverageParameters
    • RayTracingParameters
    • AdvectionParameters

Domain and mesh output

  • saveSurfaceMesh() updated:

    • Removed addMaterialIds option.
    • New option addInterfaces — when enabled, all material interfaces in the domain are exported.
    domain.saveSurfaceMesh("surface.vtp", /*addInterfaces=*/true);

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) # GPU

Process 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

20 Oct 09:57

Choose a tag to compare

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

12 Aug 21:03

Choose a tag to compare

What's Changed

  • Parallelize surface rate calculation by @tobre1 in #151
  • Use python native enums and improve stub generation by @tobre1 in #152
  • ViennaPS title banner by @tobre1 in #153

Full Changelog: v3.7.1...v3.7.2

ViennaPS-3.7.1

05 Aug 19:28
cfe5e49

Choose a tag to compare

What's Changed

Full Changelog: v3.7.0...v3.7.1

ViennaPS-3.7.0

04 Aug 08:19
8f3aae3

Choose a tag to compare

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

22 Jul 14:18

Choose a tag to compare

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

17 Jul 12:08
283dea7

Choose a tag to compare

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