Skip to content

Commit 8572c32

Browse files
authored
Add emulation examples and coverage convergence warning (#141)
* Check number of coverage iterations and add warning * Add emulation example * Add emulation FinFET example * Add nanowire example * Fix nanowire example * Domain bounds setup and small fixes * small adjustment in nanowire example
1 parent 757acbf commit 8572c32

File tree

14 files changed

+701
-29
lines changed

14 files changed

+701
-29
lines changed

CMakeLists.txt

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ cmake_minimum_required(VERSION 3.20 FATAL_ERROR)
22
project(
33
ViennaPS
44
LANGUAGES CXX C
5-
VERSION 3.5.1)
5+
VERSION 3.5.2)
66

77
# --------------------------------------------------------------------------------------------------------
88
# Library switches
@@ -96,7 +96,7 @@ include("cmake/cpm.cmake")
9696

9797
CPMAddPackage(
9898
NAME ViennaCore
99-
VERSION 1.4.3
99+
VERSION 1.4.4
100100
GIT_REPOSITORY "https://github.com/ViennaTools/ViennaCore"
101101
EXCLUDE_FROM_ALL ${VIENNAPS_BUILD_PYTHON}
102102
OPTIONS "VIENNACORE_USE_GPU ${VIENNAPS_USE_GPU}" "VIENNACORE_FORCE_GPU ${VIENNAPS_FORCE_GPU}")
@@ -115,7 +115,7 @@ CPMFindPackage(
115115

116116
CPMFindPackage(
117117
NAME ViennaLS
118-
VERSION 4.3.2
118+
VERSION 4.3.3
119119
GIT_REPOSITORY "https://github.com/ViennaTools/ViennaLS"
120120
EXCLUDE_FROM_ALL ${VIENNAPS_BUILD_PYTHON})
121121

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -115,7 +115,7 @@ We recommend using [CPM.cmake](https://github.com/cpm-cmake/CPM.cmake) to consum
115115

116116
* Installation with CPM
117117
```cmake
118-
CPMAddPackage("gh:viennatools/viennaps@3.5.1")
118+
CPMAddPackage("gh:viennatools/viennaps@3.5.2")
119119
```
120120

121121
* With a local installation
Lines changed: 35 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,49 +1,66 @@
11
import viennaps2d as vps
2-
import viennals2d as vls
2+
import viennals2d as vls
33

44

55
params = vps.ReadConfigFile("config.txt")
66
geometry = vps.Domain()
77

88
# Create the geometry
9-
boundaryCons = [vls.BoundaryConditionEnum.REFLECTIVE_BOUNDARY, vls.BoundaryConditionEnum.INFINITE_BOUNDARY]
9+
boundaryCons = [
10+
vls.BoundaryConditionEnum.REFLECTIVE_BOUNDARY,
11+
vls.BoundaryConditionEnum.INFINITE_BOUNDARY,
12+
]
1013
gridDelta = params["gridDelta"]
11-
bounds = [0.,
12-
params["openingWidth"] / 2. + params["xPad"] + params["gapLength"],
13-
-gridDelta,
14-
params["openingDepth"] + params["gapHeight"] + gridDelta]
14+
bounds = [
15+
0.0,
16+
params["openingWidth"] / 2.0 + params["xPad"] + params["gapLength"],
17+
-gridDelta,
18+
params["openingDepth"] + params["gapHeight"] + gridDelta,
19+
]
1520

1621
substrate = vls.Domain(bounds, boundaryCons, gridDelta)
17-
normal = [0., 1.]
18-
origin = [0., params["openingDepth"] + params["gapHeight"]]
22+
normal = [0.0, 1.0]
23+
origin = [0.0, params["openingDepth"] + params["gapHeight"]]
1924
vls.MakeGeometry(substrate, vls.Plane(origin, normal)).apply()
2025

2126
geometry.insertNextLevelSetAsMaterial(substrate, vps.Material.Si)
2227

2328
vertBox = vls.Domain(bounds, boundaryCons, gridDelta)
24-
minPoint = [-gridDelta, 0.]
25-
maxPoint = [params["openingWidth"] / 2., params["gapHeight"] + params["openingDepth"] + gridDelta]
29+
minPoint = [-gridDelta, 0.0]
30+
maxPoint = [
31+
params["openingWidth"] / 2.0,
32+
params["gapHeight"] + params["openingDepth"] + gridDelta,
33+
]
2634
vls.MakeGeometry(vertBox, vls.Box(minPoint, maxPoint)).apply()
2735

2836
geometry.applyBooleanOperation(vertBox, vls.BooleanOperationEnum.RELATIVE_COMPLEMENT)
2937

3038
horiBox = vls.Domain(bounds, boundaryCons, gridDelta)
31-
minPoint = [params["openingWidth"] / 2. - gridDelta, 0.]
32-
maxPoint = [params["openingWidth"] / 2. + params["gapLength"], params["gapHeight"]]
39+
minPoint = [params["openingWidth"] / 2.0 - gridDelta, 0.0]
40+
maxPoint = [params["openingWidth"] / 2.0 + params["gapLength"], params["gapHeight"]]
3341
vls.MakeGeometry(horiBox, vls.Box(minPoint, maxPoint)).apply()
3442
geometry.applyBooleanOperation(horiBox, vls.BooleanOperationEnum.RELATIVE_COMPLEMENT)
3543

3644
geometry.saveVolumeMesh("SingleParticleALD_initial.vtu")
3745

3846
geometry.duplicateTopLevelSet(vps.Material.Al2O3)
3947

40-
gasMFP = vps.constants.gasMeanFreePath(params["pressure"], params["temperature"], params["diameter"])
48+
gasMFP = vps.constants.gasMeanFreePath(
49+
params["pressure"], params["temperature"], params["diameter"]
50+
)
4151
print("Mean free path: ", gasMFP, " um")
4252

43-
model = vps.SingleParticleALD(params["stickingProbability"], params["numCycles"],
44-
params["growthPerCycle"], params["totalCycles"],
45-
params["coverageTimeStep"], params["evFlux"],
46-
params["inFlux"], params["s0"], gasMFP)
53+
model = vps.SingleParticleALD(
54+
params["stickingProbability"],
55+
params["numCycles"],
56+
params["growthPerCycle"],
57+
params["totalCycles"],
58+
params["coverageTimeStep"],
59+
params["evFlux"],
60+
params["inFlux"],
61+
params["s0"],
62+
gasMFP,
63+
)
4764

4865
ALP = vps.AtomicLayerProcess(geometry, model)
4966
ALP.setCoverageTimeStep(params["coverageTimeStep"])
@@ -57,4 +74,4 @@
5774
# MeasureProfile<NumericType, D>(domain, params.get("gapHeight") / 2.)
5875
# .save(params.get<std::string>("outputFile"));
5976

60-
geometry.saveVolumeMesh("SingleParticleALD_final.vtu")
77+
geometry.saveVolumeMesh("SingleParticleALD_final.vtu")

examples/emulation/CMakeLists.txt

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
project(Emulation LANGUAGES CXX)
2+
3+
add_executable(FinFET "FinFET.cpp")
4+
target_link_libraries(FinFET PRIVATE ViennaPS)
5+
6+
viennacore_setup_bat(FinFET ${VIENNAPS_ARTIFACTS_DIRECTORY})

0 commit comments

Comments
 (0)