Extrude and Slice Geometries between 2D and 3D
ViennaPS provides two utility functions for converting between 2D and 3D geometries:
- Extrude: Converts a 2D domain into a 3D domain by extending it along a chosen axis.
- Slice: Extracts a 2D cross-section from a 3D domain along a specified axis or plane.
These tools simplify workflows that involve process simulations requiring both 2D and 3D representations.
Extrude
Extrudes a 2D domain into 3D.
Users can define the extrusion axis, the extent (min/max positions), and boundary conditions for the new dimension.
Example usage
C++
ps::Extrude<double>(
domain2D, domain3D,
{0., 1.}, // min and max extent in the extruded dimension
2, // extrude along z-axis (0=x, 1=y, 2=z)
{viennals::BoundaryConditionEnum::REFLECTIVE,
viennals::BoundaryConditionEnum::REFLECTIVE,
viennals::BoundaryConditionEnum::INFINITE_BOUNDARY}
).apply();
Python
import viennaps as vps
vps.Extrude(
domain2d, domain3d,
extent=(0.0, 1.0),
axis=2, # extrude along z-axis
boundary_conditions=[
vps.BoundaryCondition.REFLECTIVE,
vps.BoundaryCondition.REFLECTIVE,
vps.BoundaryCondition.INFINITE_BOUNDARY
]
).apply()
Slice
Creates a 2D cross-section from a 3D domain along a specified axis and position. This is useful for inspecting or analyzing a single layer or cut plane from a 3D simulation.
Example usage
C++
ps::Slice<double>(
domain3D, domain2D,
2, // slice along z-axis (0=x, 1=y, 2=z)
0.5 // normalized slice position (between min/max domain bounds)
).apply();
Python
import viennaps as vps
vps.Slice(
domain3d, domain2d,
axis=2, # slice along z-axis
position=0.5 # relative position within domain bounds
).apply()
Notes
ExtrudeandSlicepreserve material and level-set information during conversion.- Boundary conditions in
Extrudedefine how the new dimension behaves during subsequent simulations.
