-
Notifications
You must be signed in to change notification settings - Fork 13
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Add MultiParticle process, other fixes (#98)
* Add option to set ray tracing disk radii * Add domain member functions to remove level sets and materials * Start on multi particle process model * Generalize ion particle * Multi particle model Python wrapper * Finish test for MultiParticleProcess * Add info for zero velocities instead of printing max time * Clean up TEOSPECVD * Bump version * Fix ctors in TEOSPECVD * Rework bosch process example * Use ViennaRay default particles in models * Rework MP surface model * Add numeric header * Bump dep verions * Remove smart pointer holders for geometry builders * Small fixes in Python wrapper * Remove KD tree benchmark example
- Loading branch information
Showing
16 changed files
with
663 additions
and
319 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file was deleted.
Oops, something went wrong.
This file was deleted.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,74 @@ | ||
from argparse import ArgumentParser | ||
|
||
# parse config file name and simulation dimension | ||
parser = ArgumentParser( | ||
prog="boschProcess", | ||
description="Run a Bosch process on a trench geometry.", | ||
) | ||
parser.add_argument("-D", "-DIM", dest="dim", type=int, default=2) | ||
parser.add_argument("filename") | ||
args = parser.parse_args() | ||
|
||
# switch between 2D and 3D mode | ||
if args.dim == 2: | ||
print("Running 2D simulation.") | ||
import viennaps2d as vps | ||
else: | ||
print("Running 3D simulation.") | ||
import viennaps3d as vps | ||
|
||
params = vps.ReadConfigFile(args.filename) | ||
vps.Logger.setLogLevel(vps.LogLevel.INFO) | ||
|
||
geometry = vps.Domain() | ||
vps.MakeTrench( | ||
domain=geometry, | ||
gridDelta=params["gridDelta"], | ||
xExtent=params["xExtent"], | ||
yExtent=params["yExtent"], | ||
trenchWidth=params["trenchWidth"], | ||
trenchDepth=params["maskHeight"], | ||
taperingAngle=0.0, | ||
baseHeight=0.0, | ||
periodicBoundary=False, | ||
makeMask=True, | ||
material=vps.Material.Si, | ||
).apply() | ||
|
||
|
||
depoModel = vps.IsotropicProcess(params["depositionThickness"]) | ||
|
||
etchModel = vps.MultiParticleProcess() | ||
etchModel.addNeutralParticle(params["neutralStickingProbability"]) | ||
etchModel.addIonParticle(params["ionSourceExponent"]) | ||
|
||
|
||
# Custom rate function for the etch model | ||
def rateFunction(fluxes, material): | ||
if material == vps.Material.Mask: | ||
return 0.0 | ||
rate = fluxes[1] * params["ionRate"] | ||
if material == vps.Material.Si: | ||
rate += fluxes[0] * params["neutralRate"] | ||
return -rate | ||
|
||
|
||
etchModel.setRateFunction(rateFunction) | ||
|
||
geometry.saveSurfaceMesh("initial.vtp") | ||
|
||
proc = vps.Process(geometry, etchModel, params["etchTime"]) | ||
proc.disableRandomSeeds() | ||
proc.apply() | ||
|
||
numCycles = int(params["numCycles"]) | ||
for i in range(numCycles): | ||
geometry.duplicateTopLevelSet(vps.Material.Polymer) | ||
vps.Process(geometry, depoModel, 1).apply() | ||
vps.Process(geometry, etchModel, params["etchTime"]).apply() | ||
geometry.removeTopLevelSet() | ||
|
||
geometry.saveSurfaceMesh("final.vtp") | ||
|
||
if args.dim == 2: | ||
geometry.saveVolumeMesh("final") |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,21 +1,18 @@ | ||
# Geometry | ||
gridDelta = 1.0 | ||
xExtent = 50.0 | ||
xExtent = 150.0 | ||
yExtent = 50.0 | ||
holeRadius = 10.0 | ||
maskHeight = 10.0 | ||
trenchWidth = 40.0 | ||
maskHeight = 20.0 | ||
|
||
# all flux values are units 1e16 / cm² | ||
ionFlux=10. | ||
etchantFlux=50. | ||
|
||
ionExponent=200 | ||
meanEnergy=100 # eV | ||
sigmaEnergy=10 # eV | ||
neutralStickingProbability = 0.1 | ||
neutralRate = 0.5 | ||
ionSourceExponent = 200 | ||
ionRate = 1.0 | ||
|
||
etchTime = 10.0 | ||
|
||
depositionRate = 0.2 | ||
depositionTime = 10.0 | ||
depositionThickness = 2.0 | ||
|
||
numCycles = 5 | ||
numCycles = 4 |
Oops, something went wrong.