Skip to content

feat: add HF cryogenic plasma etching model for SiO2#227

Open
gugim2o2o-collab wants to merge 9 commits into
ViennaTools:masterfrom
gugim2o2o-collab:claude/vigilant-wright-34cbc3
Open

feat: add HF cryogenic plasma etching model for SiO2#227
gugim2o2o-collab wants to merge 9 commits into
ViennaTools:masterfrom
gugim2o2o-collab:claude/vigilant-wright-34cbc3

Conversation

@gugim2o2o-collab
Copy link
Copy Markdown

Summary

  • Add HFCryoEtching process model for pure HF gas cryogenic plasma etching of SiO2
  • Add HFCryoParameters with Frenkel-Arrhenius desorption and Arrhenius reaction kinetics
  • Register the new model in viennaps.hpp

Physics

Steady-state HF surface coverage (single-species, no passivation layer):

phi_HF = Gamma_HF / (Gamma_HF + k_des(T) + k_r(T) + Y_ie * Gamma_ion)

where

k_des(T) = nu0 * exp(-E_des / kB*T) # Frenkel-Arrhenius desorption k_r(T) = A_r * exp(-E_a / kB*T) # Arrhenius reaction rate

Etch rate (SiO2 only, in nm/s):

v = -(1/rho_SiO2) * ( k_r(T)*phi_HF + Y_ie*Gamma_ion*phi_HF + Y_sp*Gamma_ion )

Anisotropy is achieved without a chemical passivation layer: at cryogenic temperatures, k_r(T) is strongly suppressed on sidewalls (low ion flux), while ion bombardment at the trench bottom overcomes the activation barrier.

New files

  • include/viennaps/models/psHFCryoParameters.hpp - parameter struct with Desorption (nu0, E_des), Reaction (A_r, E_a), SiO2, and Ion sub-structs; k_des(T) and k_r(T) helper methods
  • include/viennaps/models/psHFCryoEtching.hpp - two-particle model (HFCryoIon, HFCryoEtchant) with HFCryoSurfaceModel computing steady-state coverage and etch velocity

Reviewer notes

  • Default parameters (E_des = 0.25 eV, E_a = 0.10 eV, T = 200 K) are reasonable starting points; experimental calibration is needed
  • Only Material::SiO2 surfaces are etched; other materials are skipped in calculateVelocities
  • Model follows the same structure as CF4O2Etching (particles + surface model + ProcessModelCPU)

monst and others added 9 commits May 5, 2026 15:25
Implements HFCryoEtching, a physics-based process model for pure HF gas
cryogenic plasma etching of SiO2. The model captures temperature-dependent
surface chemistry via Frenkel-Arrhenius desorption and Arrhenius reaction
kinetics, replacing chemical passivation layers with thermal suppression of
lateral etching.

Key additions:
- psHFCryoParameters.hpp: parameter struct with Desorption (nu0, E_des),
  Reaction (A_r, E_a), SiO2, and Ion sub-structs; k_des(T) and k_r(T)
  helper methods compute Arrhenius rates at runtime.
- psHFCryoEtching.hpp: two-particle model (HFCryoIon, HFCryoEtchant) with
  a surface model that solves steady-state HF coverage and computes etch
  rate from chemical, ion-enhanced, and sputter contributions.
- viennaps.hpp: include psHFCryoEtching.hpp alongside other models.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Adds a minimal 2D trench example for the HFCryoEtching model demonstrating:
- SiO2 trench geometry setup
- HFCryoParameters configuration (temperature, Arrhenius E_des / E_a)
- Process execution with ray tracing and Runge-Kutta advection
- Temperature sweep output showing k_r(T) and k_des(T) at 150-300 K

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
… 4-case example

Physical model additions to psHFCryoEtching / psHFCryoParameters:
- Two-state adsorption: theta_phys (physisorbed) + theta_chem (chemisorbed)
  with steady-state denominators including all loss pathways
- Pure chemical etching term k_r_direct * theta_phys (thermal, no ions)
- Steady-state surface diffusion PDE via Thomas algorithm on 1D surface chain
- ModelConfig flags: useTemperatureDependence, usePhysisorption, useSurfaceDiffusion
- DirectReactionType parameters and effective_k_* helper methods
- Fix surfaceReflection: return {1-S_eff, dir} for correct Knudsen transport

New example HFCryo4Cases:
- 4 cases x 4 temperatures (150/200/250/300 K) = 16 simulations
- VTP output with Temperature_K and CaseID scalars for ParaView

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…tures

Replace 4-case comparison example with a cleaner single simulation that
enables all three physical features (Arrhenius temperature dependence,
physisorption, surface diffusion) and sweeps 150/200/250/300 K.
Outputs HFCryo_T{T}K.vtp files colored by Temperature_K for ParaView.

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
Run all four temperatures (150-300 K) with surface diffusion both
disabled and enabled, and report the resulting trench etch depth for
each case. VTP outputs are tagged HFCryo_diffOFF/diffON_T*K.vtp.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
…tour

buildSurfaceChain started the nearest-neighbor walk from the topmost
point (interior of the flat mask top) with a tight gap threshold, so the
walk covered only one mask-top strip and never descended into the
trench. Surface diffusion was therefore applied to the wrong part of the
surface and had no effect on the etch front. Start from a true endpoint
of the open surface (leftmost point) and widen the gap threshold so the
chain follows mask top -> sidewall -> bottom -> sidewall -> mask top.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
…solver

The surface-diffusion step solved a steady-state 1D PDE on a
nearest-neighbor surface chain with Dirichlet boundaries at the chain
endpoints. Chain-ordering defects turned the discrete Laplacian into a
non-smoothing operator that injected geometry-reconstruction noise; at
large diffusion coefficients this destabilized the etch front and a D0
scan produced chaotic, non-monotonic etch depths (-53% to +39% vs
diffusion-off).

Replace it with a mesh-free reaction-diffusion solve on the surface
point cloud, iterated with Jacobi. Each update is a positive,
diagonally dominant contraction, so it is unconditionally stable and
strictly smoothing, with no chain reconstruction and no imposed
boundary values; open mask-top points act as natural diffusion sources.
The D0 scan is now monotonic and saturating, and surface diffusion
produces a stable ARDE-mitigation effect at physical D0.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
The header comment described an etch rate of k_r*theta_chem and a 1D-chain
diffusion PDE, neither of which the code implements. Update it to the
actual model: mesh-free surface diffusion, the clamped chemisorbed
coverage, theta_chem's role as site-blocking in the etchant sticking (not
a separate etch term), and the implemented etch rate
(Y_ie*Gamma_ion*theta_phys + k_r_direct*theta_phys + Y_sp*Gamma_ion).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@FilipovicLado
Copy link
Copy Markdown
Member

Thanks for contributing this HF cryogenic etching model. The topic is scientifically interesting and potentially valuable for ViennaPS. Low-temperature physisorption, surface diffusion, and ion-assisted activation are all relevant mechanisms for cryogenic SiO2 etching and high-aspect-ratio transport.

Before we can treat this as a ViennaPS model, I think the implementation needs more work in a few areas:

  1. Please document the physical derivation and units more rigorously. In particular, the coverage balances combine Gamma_HF = etchantFlux * params.etchantFlux, k_des, k_act_ion = ionActivationFlux * params.ionFlux * A_act, k_r_direct, and k_r in the same denominators/rate expressions. etchantFlux and ionFlux are documented as fluxes in 1e15 / cm^2 / s, while k_des is an Arrhenius desorption rate in 1/s, and Reaction.A_r / DirectReaction.A_r appear to be used as reaction-rate prefactors. It is therefore not yet clear whether these quantities are all consistently normalized to surface-site rates before being combined.
  2. The model currently implements its own surface diffusion solve inside psHFCryoEtching.hpp. We are actively working on a shared surface-diffusion framework for ViennaPS in a separate branch, but it has not been merged into master yet. For now, I would prefer not to merge a model-specific surface diffusion implementation that may soon conflict with, or duplicate, the framework-level implementation. Please either keep this part clearly disabled for the initial merge, or wait until the shared surface-diffusion infrastructure is available and then adapt the HF cryo model to use that instead. The goal is to avoid each process model carrying its own diffusion solver, and to make sure future improvements to surface diffusion apply consistently across models.
  3. The sidewall/chain logic appears mainly 2D-oriented, but the model is exposed through the normal 2D/3D precompile macro. Please restrict the model to 2D for now or provide a robust 3D formulation.
  4. There are a few integration gaps. The model is included in the umbrella header but not in the precompiled model source, and it is not exposed in the Python bindings/stubs. Process metadata is also missing compared with the established models.
  5. Please add validation or regression coverage. At minimum analytical/limiting-case tests for coverage behavior and diffusion disabled/enabled behavior.

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.

3 participants