ViennaFit Documentation¶
Welcome to ViennaFit - a Python package for optimizing and calibrating ViennaPS process simulation models by fitting parameters to experimental data.
What is ViennaFit?¶
ViennaFit automates the task of finding optimal process parameters that make your ViennaPS simulations match experimental results. Instead of manually tweaking parameters through trial and error, ViennaFit uses advanced optimization algorithms to systematically search the parameter space and find the best fit.
Whether you're calibrating an etch model to match measured profiles, exploring how different process conditions affect outcomes, or analyzing which parameters matter most, ViennaFit provides the tools you need.
Key Features¶
-
Multiple Optimization Algorithms
Choose from dlib (global optimization), Nevergrad (evolutionary algorithms), or Ax/BoTorch (Bayesian optimization) depending on your needs.
-
8 Distance Metrics
Compare simulations to targets using CA (area), CCH (Chamfer), CSF (sparse field), CCD (critical dimensions), and more.
-
Sensitivity Analysis
Identify which parameters matter most using local (one-at-a-time) or global (Sobol indices) sensitivity analysis.
-
Multi-Domain Support
Optimize process parameters across multiple geometries simultaneously to find universal parameter sets.
-
Custom Parameter Evaluation
Explore parameter space with grid search, test specific combinations, or run repeatability tests to assess variance.
-
Incomplete Run Recovery
Load and analyze optimization runs that were stopped early or didn't complete successfully.
-
Comprehensive Reporting
Automatic generation of convergence plots, parameter evolution tracking, and detailed CSV/JSON outputs.
-
Production Ready
Battle-tested in research and production environments with ViennaPS 4.0.0+ integration.
Quick Example¶
Here's a complete optimization in just a few lines:
import viennafit as fit
import viennaps as vps
# Create project
project = fit.Project("etchCalibration", "./projects").initialize()
project.setInitialDomain(initialDomain)
project.setTargetLevelSet(targetProfile)
# Define process sequence
def processSequence(domain: vps.Domain, params: dict[str, float]):
# Your simulation using params
return simulatedProfile
# Set up and run optimization
opt = fit.Optimization(project)
opt.setProcessSequence(processSequence)
opt.setVariableParameters({
"etchRate": (10, 100),
"stickingProb": (0.01, 0.9)
})
opt.setDistanceMetrics(primaryMetric="CCH") # Chamfer distance
opt.apply(numEvaluations=100)
# Results saved automatically!
Getting Started¶
-
15-Minute Quickstart
Get your first optimization running in 15 minutes with our Quick Start guide.
-
Step-by-Step Tutorials
Learn ViennaFit through comprehensive, hands-on tutorials covering all major features.
-
Installation Guide
Detailed installation instructions including prerequisites and troubleshooting.
-
Core Concepts
Understand the fundamental concepts of projects, domains, metrics, and optimization.
Typical Workflows¶
ViennaFit supports various workflows depending on your goals:
Initial Calibration¶
Start from scratch to calibrate your process model to experimental data:
- Load experimental profile as target domain
- Define initial geometry
- Create process sequence with parameters to optimize
- Run optimization with appropriate distance metric
- Validate results and refine if needed
Best for: First-time calibration, new process models
Parameter Exploration¶
After optimization, explore the parameter landscape:
- Load optimization results
- Set up parameter grid around optimal values
- Evaluate systematic combinations
- Visualize parameter relationships
- Identify robust parameter regions
Best for: Understanding parameter sensitivity, finding robust solutions
Sensitivity Analysis¶
Identify which parameters matter most:
- Define parameter ranges
- Run Sobol or local sensitivity analysis
- Interpret sensitivity indices
- Focus optimization on important parameters
Best for: Model reduction, experimental design, uncertainty quantification
Multi-Domain Optimization¶
Find universal parameters that work across different geometries:
- Add multiple initial and target domains
- Write multi-domain process sequence
- Run optimization (metrics automatically aggregated)
- Validate on each domain
Best for: Process window optimization, robust parameter sets
What's New in v2.0¶
ViennaFit 2.0 brings major improvements:
- ViennaPS 4.0.0 Integration: Updated for latest ViennaPS API
- Incomplete Run Support: Load and analyze runs that didn't complete
- Repeatability Testing: Convenient API for variance analysis
- Fixed Multi-Domain Detection: Single-domain is now the safe default
- CSV Parameter Loading: Direct loading from progressBest.csv
- Better Documentation: This site! Complete tutorials and guides
See the CHANGELOG for full details.
Example Use Cases¶
ViennaFit is used for:
- Plasma Etching: Calibrate ion and neutral flux parameters to match trench profiles
- Deposition Processes: Fit sticking coefficients and growth rates to experimental film profiles
- Multi-Step Processes: Optimize complex sequences of etching, deposition, and planarization
- Process Window Analysis: Find robust parameter sets that work across different geometries
- Model Validation: Quantify how well process models reproduce experimental observations
Community and Support¶
- GitHub Repository: ViennaTools/ViennaFit
- Report Issues: GitHub Issues
- ViennaTools Ecosystem: Part of the ViennaTools suite
Next Steps¶
Ready to get started? Here's what we recommend:
- Install ViennaFit - Set up your environment
- Quick Start - Run your first optimization in 15 minutes
- Tutorial 1 - Deep dive into optimization workflow
- Core Concepts - Understand the fundamentals
Happy optimizing! 🚀