|
ViennaLS
|
Unified oxidation time-step orchestrator. More...
#include <lsOxidation.hpp>
Public Member Functions | |
| OxidationMaskTracker (SmartPointer< Domain< T, D > > mask) | |
| bool | tracks (const SmartPointer< Domain< T, D > > &mask) const |
| False for another mask, or after the mask was resampled to another grid. | |
| template<class VelocityFunction> | |
| void | correct (SmartPointer< Domain< T, D > > mask, VelocityFunction &&velocity, T dt) |
| Re-sample the just advected mask: dt is the advection time, velocity (Vec3D<T>(const Vec3D<T> &coordinate)) the one it was advected with. | |
Unified oxidation time-step orchestrator.
Couples diffusion and viscoelastic deformation into a single CFL-limited step. When a mask interface is provided the solver operates in LOCOS mode; without one it performs standard planar or step oxidation.
Standard mode (no mask):
LOCOS mode (mask provided):
Usage (standard):
Usage (LOCOS):
Lagrangian nitride surface. The nitride is an elastic solid that moves almost rigidly, by up to hundreds of nm, and level-set advection rounds its convex corners by a numerical diffusion that grows with the distance travelled, for every scheme order: over a 0.1 um lift on a 5 nm grid the side wall 2.5 nm from a corner moved in by 13 nm (Engquist-Osher 1st order) or 6.5 nm (WENO5 + RK3), and a 50 nm strip lost its contact with the oxide. After each advection the mask is therefore re-sampled from the shape it had when the tracker was created and the accumulated displacement u of the nitride, phi(x) = phi_0(x - u(x)) (D-linear in phi_0). u follows the material: u(x) = u_old(x - v dt) + v dt with the velocity v the mask was advected with (accumulating v at a fixed point instead turns a rotation of angle a by an error ~ a^2 r / 2). The advection still moves the narrow band and carries the point data; the re-sampled band is normalised like an advected one. A tracker lives for one Oxidation object, i.e. one process call: phi_0 is sampled once per call (over a 0.1 um lift the corner moved by 0.9 nm in one call, 2.5 nm in six; re-sampled every step, 17 nm).
|
inlineexplicit |
|
inline |
Re-sample the just advected mask: dt is the advection time, velocity (Vec3D<T>(const Vec3D<T> &coordinate)) the one it was advected with.
|
inline |
False for another mask, or after the mask was resampled to another grid.