Materials & Masking
Real fabrication involves multiple materials (Silicon, Oxide, Photoresist, etc.). ViennaPS tracks which material defines which part of the volume using a stack of level sets.
Material-Selective Processes
You can define process rates that depend on the material. This is crucial for masks (which shouldn’t etch) or selective deposition.
# Define specific rates for different materials
rates = {
ps.Material.Si: -10.0, # Etch Silicon fast
ps.Material.Mask: -0.1, # Etch Mask very slowly (selectivity 100:1)
ps.Material.SiO2: 0.0 # Do not etch Oxide at all
}
# Create model with material-specific dictionary
etch_model = ps.IsotropicProcess(materialRates=rates)
# Apply for 5 time units
ps.Process(domain, etch_model, 5.0).apply()
Creating Multi-Material Geometries
ViennaPS uses a stack of level sets where each level set represents a material interface. The order matters: newer materials are on top.
Pattern 1: Duplication
The most common pattern for deposition is to duplicate the top surface:
# 1. Create Silicon substrate
ps.MakePlane(domain, height=0.0, material=ps.Material.Si).apply()
# 2. Duplicate the top surface to define a new layer (e.g. deposited oxide)
domain.duplicateTopLevelSet(ps.Material.SiO2)
# 3. Grow the oxide layer
ps.Process(domain, ps.IsotropicProcess(rate=1.0), 10.0).apply()
Pattern 2: Removing Materials
After processing, you can remove materials (e.g., stripping a mask):
# Remove all level sets with the Mask material
domain.removeMaterial(ps.Material.Mask)
# Or remove just the topmost level set
domain.removeTopLevelSet()
Pattern 3: Mask Material in Process Models
Many process models accept a maskMaterial parameter to exclude certain materials:
# Directional etch that doesn't affect the Mask material
model = ps.DirectionalProcess(
direction=[0.0, 1.0],
directionalVelocity=-1.0,
isotropicVelocity=0.0,
maskMaterial=ps.Material.Mask
)
