Skip to content

Add ion implantation and thermal annealing process models with a public model database - #236

Open
FilipovicLado wants to merge 19 commits into
masterfrom
implant-generic
Open

Add ion implantation and thermal annealing process models with a public model database#236
FilipovicLado wants to merge 19 commits into
masterfrom
implant-generic

Conversation

@FilipovicLado

Copy link
Copy Markdown
Member

Summary

Adds ion implantation and thermal annealing process models to ViennaPS, driven
by a bundled, literature-based model database, and building on the ViennaCS
2.1.0 anneal solver. This is the ViennaPS-side companion to the implant/anneal
kernels released in ViennaCS 2.1.0.

What this adds

Ion implantation (psIonImplantation, psImplant*)

  • Analytic Pearson-IV and dual-Pearson-IV depth profiles with lateral straggle,
    and Hobler damage, driven from the model database by species/energy.
  • Screen-oxide energy loss.

Thermal annealing (psAnneal, psAnnealParams, psAnnealSetup)

  • Data-driven wrapper over the ViennaCS csAnneal solver: intrinsic Arrhenius
    diffusion, electrical activation limited by solid solubility, and an
    instantaneous effective transient-enhanced-diffusion term driven by the
    implant damage field. Defect coupling is enabled only when the parameters
    carry defect physics.

Model database (modeldb/, psModelDb, psModelDbLookup)

  • Public, literature-based CSV tables: intrinsic anneal diffusivities for 8
    dopants (B, P, Al, Ga, In, As, Sb, Bi) from Pichler (2004) and Ghoshtagore
    (1971), documented in modeldb/anneal/PROVENANCE.md. Boron and phosphorus
    additionally have solid solubility, effective-TED parameters, and MCIMPL-II
    crystalline implant + Hobler damage tables; the other six are anneal-diffusion
    only.
  • Table lookup with a coverage guard: it interpolates within the tabulated
    range and refuses to extrapolate on the shape axes (implant energy and tilt),
    with distinct messages for a dopant/material absent from the database versus a
    requested condition outside the tabulated range.

Bindings, examples, tests

  • Python bindings for the implant and anneal models.
  • Examples: ionImplantation (config-driven implant + anneal), pImplantManual,
    and pnJunction (2D implant/anneal to a net-doping junction).
  • Test suites: anneal, ionImplant, implantProfile.

Dependencies

  • Requires ViennaCS 2.1.0 (the anneal solver framework).
  • Builds against ViennaLS 5.8.5 and ViennaCore 2.2.1.

Testing

  • ctest passes (39/39).
  • Sources are clang-format clean (clang-format 17).

FilipovicLado and others added 19 commits May 26, 2026 15:15
New process models:
- IonImplantation: wraps csImplant as a psProcess with zero duration;
  supports Pearson IV and Gaussian profiles, tilt angle, dose control,
  mask/screen materials, damage field, and optional embedded boundary
  reconstruction for sub-grid surface offsets on tilted interfaces
- Anneal: thermal anneal solver driven by csAnneal; Arrhenius diffusivity,
  solid solubility capping, I/V defect coupling, transient enhanced diffusion
  (TED), arbitrary temperature schedules

Supporting additions:
- psImplantProfile, psImplantPearson, psImplantTable, psImplantDamage,
  psImplantParams, psImplantConstants, psImplantSetup
- psAnneal, psAnnealParams, psAnnealSetup
- psModelDb / psModelDbLookup / psModelNames for table-driven profile lookup
- psUnits: physical unit helpers

Changes to existing files:
- psDomain: add withEmbeddedBoundaries parameter to generateCellSet()
- psProcess: defer AUTO flux-engine resolution to apply() so callback-only
  and geometric models never enter the flux engine code path
- viennaps.hpp: include new headers; CMakeLists.txt: install them

Tests: anneal, implantProfile, ionImplant (includes embedded boundary depth test)
Example: ionImplantation

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
  Ga, In, As, Sb, Bi) from Pichler (2004) and Ghoshtagore (1971)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant