Propagates the volume expansion generated at the Si/SiO2 interface through the oxide as a Cartesian-grid deformation velocity field.
More...
|
| | OxidationDeformation ()=default |
| | OxidationDeformation (SmartPointer< Domain< T, D > > passedReactionInterface, SmartPointer< Domain< T, D > > passedAmbientInterface, SmartPointer< OxidationDiffusion< T, D > > passedDiffusionField, OxidationParameters passedOxidationParameters, OxidationDeformationParameters passedDeformationParameters={}) |
| | ~OxidationDeformation () |
| void | setGpuMode (GpuMode mode) |
| void | setGpuPreconditioner (GpuPreconditioner prec) |
| void | setReactionInterface (SmartPointer< Domain< T, D > > passedInterface) |
| void | setAmbientInterface (SmartPointer< Domain< T, D > > passedInterface) |
| void | setMaskInterface (SmartPointer< Domain< T, D > > passedInterface, int passedMaskSign=1) |
| void | clearMaskInterface () |
| void | setMaskVelocityField (SmartPointer< VelocityField< T > > passedVelocityField) |
| void | clearMaskVelocityField () |
| void | setDiffusionField (SmartPointer< OxidationDiffusion< T, D > > passedDiffusionField) |
| void | setOxidationParameters (OxidationParameters passedParameters) |
| void | setDeformationParameters (OxidationDeformationParameters passedParameters) |
| void | setOxideSigns (int passedReactionSign, int passedAmbientSign) |
| void | setSolveBounds (const IndexType &passedMinIndex, const IndexType &passedMaxIndex) |
| void | clearSolveBounds () |
| void | markGeometryChanged () |
| void | apply () |
| Vec3D< T > | getVectorVelocity (const Vec3D< T > &coordinate, int material, const Vec3D< T > &, unsigned long) final |
| | Like getScalarVelocity, but returns a velocity value for each cartesian direction.
|
| T | getScalarVelocity (const Vec3D< T > &coordinate, int material, const Vec3D< T > &normalVector, unsigned long) final |
| | Should return a scalar value for the velocity at coordinate for a point of material with the given normalVector.
|
| T | getDissipationAlpha (int direction, int material, const Vec3D< T > &) final |
| | If lsLocalLaxFriedrichsAnalytical is used as the spatial discretization scheme, this is called to provide the analytical solution for the alpha values, needed for numerical stability.
|
| Vec3D< T > | getVelocity (const Vec3D< T > &coordinate) const |
| Vec3D< T > | getVelocity (const IndexType &index) const |
| T | getPressure (const Vec3D< T > &coordinate) const |
| T | getPressure (const IndexType &index) const |
| T | getStrainTrace (const Vec3D< T > &coordinate) const |
| T | getStrainTrace (const IndexType &index) const |
| std::array< T, 9 > | getStrainRateTensor (const Vec3D< T > &coordinate) const |
| std::array< T, 9 > | getStrainRateTensor (const IndexType &index) const |
| std::array< T, 9 > | getStressTensor (const Vec3D< T > &coordinate) const |
| std::array< T, 9 > | getStressTensor (const IndexType &index) const |
| T | getVonMisesStress (const Vec3D< T > &coordinate) const |
| T | getVonMisesStress (const IndexType &index) const |
| unsigned | getIterations () const |
| T | getResidual () const |
| T | getLastPressureResidual () const |
| T | getLastStokesResidual () const |
| bool | lastSolveConverged () const |
| bool | hasFiniteSolution () const |
| std::size_t | getNumberOfSolutionNodes () const |
| T | avgExpansionSpeed () |
| template<class Callback> |
| void | forEachSolutionNode (Callback callback) const |
| void | writeFieldsToLevelSet () |
| | Write velocity (Vec3D) and viscoelastic stress history (3 tensor-row vectors) into ambientInterface->getPointData(). Called alongside OxidationDiffusion::writePersistentFields() so a single lsInterior pass fills the oxide interior with all warm-start data.
|
| bool | initialiseGrid () |
| void | buildNodes () |
| template<class SolverT> |
| void | computeHarmonicStencilAt (std::size_t nodeId, const std::vector< Vec3D< SolverT > > &v, Vec3D< T > &sum) const |
| template<class SolverT> |
| void | harmonicMatvec (const std::vector< Vec3D< SolverT > > &v, const std::vector< Vec3D< T > > &b, std::vector< Vec3D< SolverT > > &Av) const |
| void | solveVelocity () |
| std::vector< Vec3D< T > > | computeVelocityDiagonals () const |
| void | solveMechanics () |
| void | applySimpleVelocityCorrection (const std::vector< T > &pressureOld, const std::vector< Vec3D< T > > &diagV) |
| template<class SolverT> |
| void | computePressureStencilAt (std::size_t nodeId, const std::vector< SolverT > &p, const std::vector< T > &ambientBP, T &diag, T &rhs) const |
| template<class SolverT> |
| void | pressureMatvec (const std::vector< SolverT > &v, const std::vector< T > &ambientBP, const std::vector< T > &precomputedDiag, const std::vector< T > &pBC, std::vector< SolverT > &Av) const |
| void | solvePressure () |
| template<class SolverT> |
| void | computeVelocityStencilAt (std::size_t nodeId, const std::vector< Vec3D< SolverT > > &v, T &diag, Vec3D< T > &rhs) const |
| void | solveStokesVelocity () |
| std::vector< Vec3D< T > > | collectVelocities () const |
| std::vector< T > | collectPressures () const |
| template<class SolverT> |
| StencilPoint< T > | pressureStencilPoint (const std::vector< SolverT > &pressure, const std::vector< T > &ambientBoundaryPressure, std::size_t nodeId, unsigned direction, int offset) const |
| template<class SolverT> |
| StencilPoint< Vec3D< T > > | velocityStencilPoint (const std::vector< Vec3D< SolverT > > &velocity, std::size_t nodeId, unsigned direction, int offset) const |
| StencilPoint< T > | currentPressureStencilPoint (std::size_t nodeId, unsigned direction, int offset) const |
| StencilPoint< Vec3D< T > > | currentVelocityStencilPoint (std::size_t nodeId, unsigned direction, int offset) const |
| T | maxVelocityChange (const std::vector< Vec3D< T > > &previous) const |
| T | maxPressureChange (const std::vector< T > &previous) const |
| std::array< T, 9 > | currentBoundaryDeviatoricStress (const IndexType &index) const |
| T | freeSurfacePressureBoundary (const IndexType &index) const |
| T | maskPressureBoundary (const IndexType &, unsigned, int, T fallbackPressure) const |
| Vec3D< T > | freeSurfaceVelocityBoundary (const IndexType &index, unsigned direction, int offset, T distance, const Vec3D< T > &interiorVelocity) const |
| Vec3D< T > | maskVelocityBoundary (const IndexType &index, const Vec3D< T > &interiorVelocity) const |
| void | computeAvgExpansionSpeed () |
| Vec3D< T > | reactionBoundaryVelocity (const IndexType &index) const |
| Vec3D< T > | unresolvedAmbientVelocity (const Vec3D< T > &coordinate) const |
| Vec3D< T > | estimateMaxUnresolvedAmbientVelocity () const |
| T | divergenceAt (const IndexType &index) const |
| Vec3D< T > | pressureGradient (const IndexType &index) const |
| Vec3D< T > | momentumForcing (const IndexType &index) const |
| Vec3D< T > | deviatoricStressDivergence (const IndexType &index) const |
| std::array< T, 9 > | deviatoricStressAt (const IndexType &index) const |
| T | pressureAt (const IndexType &index) const |
| T | localExpansionSpeed (const Vec3D< T > &coordinate) const |
| Vec3D< T > | reactionNormal (const IndexType &index) const |
| Vec3D< T > | interfaceNormal (const IndexType &index, Boundary boundary) const |
| Vec3D< T > | levelSetNormal (ConstSparseIterator &levelSetIt, const IndexType &index) const |
| void | computeDiagnostics () |
| void | computeStressTensors () |
| std::array< T, 9 > | strainRateTensorAt (const IndexType &index) const |
| T | velocityDerivative (const IndexType &index, unsigned component, unsigned direction) const |
| T | pressureDerivative (const IndexType &index, unsigned direction) const |
| std::array< T, 9 > | deviatoricTensor (const std::array< T, 9 > &tensor, T trace) const |
| std::array< T, 9 > | previousDeviatoricStress (const IndexType &index) const |
| T | effectiveStressRelaxationTime () const |
| T | vonMisesFromDeviatoric (const std::array< T, 9 > &deviatoricStress) const |
| T | normalStress (const std::array< T, 9 > &tensor, const Vec3D< T > &normal) const |
| Boundary | classifyBoundary (ConstSparseIterator &reactionIt, ConstSparseIterator &ambientIt, ConstSparseIterator &maskIt, const IndexType &inside, const IndexType &outside) const |
| BoundaryIntersection | boundaryIntersection (ConstSparseIterator &reactionIt, ConstSparseIterator &ambientIt, ConstSparseIterator &maskIt, const IndexType &inside, const IndexType &outside) const |
| bool | touchesBoundary (ConstSparseIterator &reactionIt, ConstSparseIterator &ambientIt, ConstSparseIterator &maskIt, const IndexType &index, Boundary requestedBoundary) const |
| bool | isInsideOxide (T reactionPhi, T ambientPhi) const |
| ConstSparseIterator | makeMaskIterator () const |
| bool | isInsideMask (ConstSparseIterator &maskIt, const IndexType &index) const |
| T | valueAtMask (ConstSparseIterator &maskIt, const IndexType &index) const |
| BoundaryIntersection | ambientCrossingInsideMask (T maskInside, T maskOutside, T distance) const |
| bool | isMaskAtCrossing (T maskInside, T maskOutside, T distance) const |
| T | crossingDistance (T insidePhi, T outsidePhi) const |
template<class
T, int D>
class viennals::OxidationDeformation< T, D >
Propagates the volume expansion generated at the Si/SiO2 interface through the oxide as a Cartesian-grid deformation velocity field.
This class implements the deformation part of the oxidation workflow in the same fixed-grid spirit as the diffusion solver above. The Si/SiO2 boundary is driven by the volume expansion velocity
(gamma - 1) / gamma * k C / N
along the reaction-interface normal. The initial velocity field in the oxide is obtained from a component-wise harmonic extension and is then relaxed with a Cartesian-grid quasi-static Stokes solve. The mechanical update solves a pressure equation from the current velocity divergence and a velocity momentum equation, including pressure-gradient and viscoelastic deviatoric stress terms. The Si/SiO2 interface uses the oxidation expansion velocity, the oxide/ambient interface uses a traction-free boundary, and optional mask contacts use the mask velocity field.