Hole Geometry
#include <geometries/psMakeHole.hpp>
The MakeHole
class generates a hole geometry in the z direction, which, in 2D mode, corresponds to a trench geometry. Positioned at the origin, the hole is centered, with the total extent defined in the x and y directions. The normal direction for the hole creation is in the positive z direction in 3D and the positive y direction in 2D. Users can specify the hole’s radius, depth, and opt for tapering with a designated angle. The hole configuration may include periodic boundaries in both the x and y directions. Additionally, the hole can serve as a mask, with the specified material only applied to the bottom of the hole, while the remainder adopts the mask material.
// namespace viennaps
// with DomainSetup configured (v3.3.0)
MakeHole(psDomainType domain,
NumericType holeRadius,
NumericType holeDepth,
NumericType holeTaperAngle = 0.,
NumericType maskHeight = 0.,
NumericType maskTaperAngle = 0.,
HoleShape shape = HoleShape::Full,
Material material = Material::Si,
Material maskMaterial = Material::Mask)
MakeHole(DomainType domain,
NumericType gridDelta,
NumericType xExtent,
NumericType yExtent,
NumericType holeRadius,
NumericType holeDepth,
NumericType taperAngle = 0., // in degrees
NumericType baseHeight = 0.,
bool periodicBoundary = false,
bool makeMask = false,
Material material = Material::Si,
HoleShape holeShape = HoleShape::Full)
Parameter | Type | Description | Applicable Constructor |
---|---|---|---|
domain | psDomainType | The simulation domain. | Both |
holeRadius | NumericType | Radius of the hole. | Both |
holeDepth | NumericType | Depth of the hole. | Both |
holeTaperAngle | NumericType | Taper angle of the hole (default: 0. ). | Both |
maskHeight | NumericType | Height of the masking layer (default: 0. ). | First constructor only |
maskTaperAngle | NumericType | Taper angle of the masking layer (default: 0. ). | First constructor only |
shape | HoleShape | Shape of the hole (default: HoleShape::Full ). | Both |
material | Material | Material of the hole (default: Material::Si ). | Both |
maskMaterial | Material | Material of the mask (default: Material::Mask ). | First constructor only |
gridDelta | NumericType | Grid spacing in the simulation domain. | Second constructor only |
xExtent | NumericType | Extent of the domain in the x-direction. | Second constructor only |
yExtent | NumericType | Extent of the domain in the y-direction. | Second constructor only |
taperAngle | NumericType | Alternative name for holeTaperAngle in the second constructor (default: 0. ). | Second constructor only |
baseHeight | NumericType | Height at which the hole starts (default: 0. ). | Second constructor only |
periodicBoundary | bool | If true , enables periodic boundary conditions (default: false ). | Second constructor only |
makeMask | bool | If true , the mask is created instead of the hole, setting holeDepth to 0 (default: false ). | Second constructor only |
Note:
- The first constructor requires that the domain is already configured.
- The second constructor sets up a new simulation domain with
gridDelta
,xExtent
, andyExtent
.- If
makeMask
istrue
, the hole is not created, and only the masking layer is applied.
Example usage:
C++
// namespace viennaps
// with DomainSetup configured (v3.3.0)
auto domain = SmartPointer<Domain<NumericType, D>>::New(0.5, 10., 10., BoundaryType::REFLECTIVE_BOUNDARY);
MakeHole<NumericType, D>(domain, 5.0, 5.0, 10., 0., 0., HoleShape::Quarter, Material::Si, Material::Mask)
.apply();
// without DomainSetup
auto domain = SmartPointer<Domain<NumericType, D>>::New();
MakeHole<NumericType, D>(domain, 0.5, 10.0, 10.0, 2.5, 5.0, 10., 0., false,
false, Material::Si)
.apply();
Python
# with DomainSetup configured (v3.3.0)
domain = vps.Domain(gridDelta=0.5,
xExtent=10.0,
yExtent=10.0,
boundaryType=vps.BoundaryType.REFLECTIVE_BOUNDARY)
vps.MakeHole(domain=domain,
holeRadius=5.0,
holeDepth=0.0,
holeTaperAngle=0.0,
maskHeight=5.0,
maskTaperAngle=2.0,
shape=vps.HoleShape.Quarter,
material=vps.Material.Si,
maskMaterial=vps.Material.Mask
).apply()
domain = vps.Domain()
vps.MakeHole(domain=domain,
gridDelta=0.5,
xExtent=10.0,
yExtent=10.0,
holeRadius=2.5,
holeDepth=5.0,
taperingAngle=10.0,
baseHeight=0.0,
periodicBoundary=False,
makeMask=False,
material=vps.Material.Si,
holeShape=vps.HoleShape.Quarter
).apply()