ViennaLS
Loading...
Searching...
No Matches
viennals::OxidationDeformation< T, D > Class Template Referencefinal

Propagates the volume expansion generated at the Si/SiO2 interface through the oxide as a Cartesian-grid deformation velocity field. More...

#include <lsOxidationDeformation.hpp>

Inheritance diagram for viennals::OxidationDeformation< T, D >:
viennals::VelocityField< T > viennals::OxidationSolverBase< T, D >

Classes

struct  MacLin

Public Types

enum  : std::uint8_t { macGas = 0 , macSi = 1 , macOxide = 2 , macNitride = 3 }
typedef amgcl::backend::builtin< double > MacAmgBackend
typedef amgcl::backend::builtin< float > MacAmgPrecondBackend
typedef amgcl::make_solver< amgcl::amg< MacAmgPrecondBackend, amgcl::coarsening::smoothed_aggregation, amgcl::relaxation::ilu0 >, amgcl::solver::preonly< MacAmgPrecondBackend > > MacAmgUSolver
typedef amgcl::make_solver< amgcl::relaxation::as_preconditioner< MacAmgPrecondBackend, amgcl::relaxation::spai0 >, amgcl::solver::preonly< MacAmgPrecondBackend > > MacAmgPSolver
typedef amgcl::preconditioner::schur_pressure_correction< MacAmgUSolver, MacAmgPSolver > MacAmgPrecond
typedef amgcl::solver::fgmres< MacAmgBackend > MacAmgKrylov

Public Member Functions

 OxidationDeformation ()=default
 OxidationDeformation (SmartPointer< Domain< T, D > > passedReactionInterface, SmartPointer< Domain< T, D > > passedAmbientInterface, SmartPointer< OxidationDiffusion< T, D > > passedDiffusionField, OxidationParameters passedOxidationParameters, OxidationDeformationParameters passedDeformationParameters={})
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 setDiffusionField (SmartPointer< OxidationDiffusion< T, D > > passedDiffusionField)
void setOxidationParameters (OxidationParameters passedParameters)
void setDeformationParameters (OxidationDeformationParameters passedParameters)
void setCouplingIterate (bool iterate)
 While the stress coupling iterates (OxidationModel), a solve takes one pass of the viscosity iteration – one linear solve – and then updates the viscosity for the next call: the viscosities converge together with the stress feedback instead of inside every coupling iteration. The solve after the coupling has converged runs the full iteration.
void setGpuMode (GpuMode mode)
 GPU for the 3-D velocity-pressure solve (systems of at least macGpuMinUnknowns unknowns): Cpu (default), Gpu, or Auto (the CPU when the GPU is unavailable). The 2-D sparse LU stays on the CPU.
void setOxideSigns (int passedReactionSign, int passedAmbientSign)
void setSolveBounds (const IndexType &passedMinIndex, const IndexType &passedMaxIndex)
void clearSolveBounds ()
void markGeometryChanged ()
bool monolithicNitride () const
T stepTime () const
T nitridePoisson () const
T nitrideMu () const
T nitrideLambda () const
bool viscousNitride () const
bool stressDependentNitride () const
T nitrideDecayFor (T eta) const
T nitrideImplicitFor (T eta) const
T nitrideNodeViscosity (std::size_t i) const
void nitrideModuli (std::size_t i, T &twoEta, T &volumetric) const
std::array< T, 9 > nitrideStressStartAt (const IndexType &index) const
const std::array< T, 9 > & nitrideStartOf (std::size_t i) const
BoundaryIntersection nitrideBoundaryIntersection (ConstSparseIterator &reactionIt, ConstSparseIterator &maskIt, const IndexType &inside, const IndexType &outside) const
void computeNitrideStress (std::size_t i)
void advectStress (const std::vector< std::array< T, 9 > > &end, std::vector< std::array< T, 9 > > &out, bool nitride) const
void advectNitrideStress ()
void advectOxideStress ()
bool neighbourStress (const IndexType &idx, const std::vector< std::array< T, 9 > > &field, bool nitride, std::array< T, 9 > &out) const
void writeNitrideFieldsToMask ()
void seedNitrideFromMask ()
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 > getResolvedVectorVelocity (const Vec3D< T > &coordinate) const
 Purely mechanical velocity: the interpolated Stokes solution, extended from the nearest solved node when the interpolation stencil has no node, and ZERO when nothing solved is nearby. NEVER falls back to the concentration-derived expansion heuristic — consumers that move a carried mask must see only mechanics, since oxidant concentration has nothing to do with mask motion.
template<class Accept>
bool nearbyMeanVelocity (const IndexType &index, Accept accept, Vec3D< T > &velocity) const
Vec3D< T > getVelocity (const IndexType &index) const
Vec3D< T > getMaterialVelocity (const Vec3D< T > &coordinate, bool nitride)
 Monolithic contact: the velocity of one material only (oxide or nitride), for advecting that material's surface. D-linear interpolation over that material's nodes, else its nearest node (within 4 cells), else zero for the nitride and the unresolved-ambient estimate for the oxide (as getVectorVelocity). Interpolating across both materials advected the nitride's edge corner with the free oxide next to it (measured: corner thinned 50 -> 35 nm in 0.1 h).
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 getLastContinuityResidual () 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
 callback(index, pressure, Cauchy stress) for every solution node.
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 ()
IndexType macReflect (IndexType a) const
T macPhiR (const IndexType &a) const
T macPhiRAt (const std::array< T, D > &x) const
std::uint8_t macKind (const IndexType &a) const
std::size_t macNode (const IndexType &a) const
std::int64_t macFaceId (unsigned d, const IndexType &a) const
T macFaceReflect (unsigned d, IndexType &a) const
T macPhiFace (unsigned d, IndexType a) const
T macFrontVelocity (unsigned d, const IndexType &a, const IndexType &ghost, T theta) const
MacLin macFace (unsigned d, IndexType a, const IndexType *partner) const
T macGhostFrontVelocity (unsigned d, const IndexType &pa, const IndexType &a, T theta, std::int64_t pid) const
void macGhostReset ()
MacLin macNormalRate (unsigned d, const IndexType &q) const
MacLin macShearRate (unsigned c, unsigned e, const IndexType &a) const
std::int64_t macCornerLookup (unsigned pair, const IndexType &a) const
std::int64_t macCornerReflected (unsigned pair, IndexType a, T &sign) const
T macPsi (bool nitride, const IndexType &a) const
T macPsiSlope (bool nitride, const IndexType &x, unsigned e) const
std::array< T, 3 > macSurfaceNormal (bool nitride, const IndexType &s, const IndexType &q) const
std::array< T, 3 > macCornerNormal (bool nitride, unsigned c, unsigned e, const IndexType &a) const
std::array< MacLin, 9 > macPointStress (const IndexType &q, T etaRef) const
MacLin macShearStress (unsigned c, unsigned e, const IndexType &a, T etaRef) const
MacLin macNormalStress (unsigned d, const IndexType &q, const IndexType &s, T etaRef) const
T macNodeMemory (std::size_t j, unsigned d) const
void macBuild ()
void macLoadCornerStart ()
T macCornerDecay (std::size_t k) const
void macCornerCoefficients (T etaRef)
bool macSolveLinear (T etaRef, T &backward)
bool macAmgSolve (std::vector< MacLin > &rows, T &backward)
bool macAmgSolveWith (const std::vector< ptrdiff_t > &ptr, const std::vector< ptrdiff_t > &col, const std::vector< double > &val, const std::vector< double > &rhs, bool fresh, T &backward)
void macAmgReset ()
bool macAmgSetup (const std::vector< ptrdiff_t > &ptr, const std::vector< ptrdiff_t > &col, const std::vector< double > &sval, const std::vector< double > &cs)
bool macReuseSolve (const Eigen::SparseMatrix< double > &A, const Eigen::VectorXd &b, T &backward)
bool macDirectSolve (const std::vector< MacLin > &rows, T &backward)
T macEval (const MacLin &e) const
void macRates (std::vector< std::array< T, 9 > > &nodeRate, std::vector< T > &cornerRate) const
void macAndersonStep (std::vector< T > &u, const std::vector< T > &g)
void macUpdateViscosity (const std::vector< std::array< T, 9 > > &nodeRate, const std::vector< T > &cornerRate)
void macInitViscosity ()
void macWriteBack (const std::vector< std::array< T, 9 > > &nodeRate, const std::vector< T > &cornerRate, T etaRef)
void solveMechanics ()
void macAdvectCorners ()
IndexType macCornerLower (IndexType point, unsigned pair, unsigned k) const
void macWriteCornerHistory ()
void macReadCornerHistory ()
T reactionInflow () const
void logContinuityDiagnostic (unsigned iterationsUsed) const
void computeAvgExpansionSpeed ()
void cacheBoundaryValues ()
Vec3D< T > reactionVelocityAt (std::size_t i) const
std::array< T, 9 > startStressAt (const IndexType &index) const
Vec3D< T > reactionBoundaryVelocity (const IndexType &index) const
Vec3D< T > unresolvedAmbientVelocity (const Vec3D< T > &coordinate) const
Vec3D< T > estimateMaxUnresolvedAmbientVelocity () const
T localExpansionSpeed (const Vec3D< T > &coordinate) const
Vec3D< T > reactionNormal (const IndexType &index) const
Vec3D< T > levelSetNormal (ConstSparseIterator &levelSetIt, const IndexType &index) const
std::array< T, 9 > previousDeviatoricStress (const IndexType &index) const
T maxwellDecay () const
T implicitViscosity () const
bool stressDependentViscosity () const
T nodeViscosity (std::size_t i) const
T nodeDecay (std::size_t i) const
T nodeImplicitViscosity (std::size_t i) const
T eyringFactor (const std::array< T, 9 > &deviatoric, T volume) const
void initOxideViscosity ()
void initNitrideViscosity ()
T localViscosity (const std::array< T, 9 > &start, const std::array< T, 9 > &deviatoricRate) const
T localNitrideViscosity (const std::array< T, 9 > &start, const std::array< T, 9 > &deviatoricRate) const
T localViscosity (const std::array< T, 9 > &start, const std::array< T, 9 > &deviatoricRate, T eta0, T tau0, T volume) const
T effectiveStressRelaxationTime () const
T vonMisesFromDeviatoric (const std::array< T, 9 > &deviatoricStress) 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 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
bool ambientEndsInMask (T maskInside, T maskOutside, T distance) const
bool isMaskAtCrossing (T maskInside, T maskOutside, T distance) const
T crossingDistance (T insidePhi, T outsidePhi) const

Static Public Member Functions

template<class... Args>
static auto New (Args &&...args)
static unsigned macPairIndex (unsigned c, unsigned e)
static void macPairDirs (unsigned pair, unsigned &c, unsigned &e)
static std::array< T, 3 > macUnitOutward (const std::array< T, 3 > &grad)
static MacLin macProjected (const std::array< MacLin, 9 > &S, const std::array< T, 3 > &n, unsigned a, unsigned b)
static std::array< T, 3 > macNoHistory ()
static bool macHasHistory (T value)
static std::array< T, 9 > deviatorOf (const std::array< T, 9 > &stress)
template<class Function>
static T bracketedRoot (const Function &f, T a, T fa, T b, T fb, T tolerance)
static constexpr unsigned tensorIndex (unsigned row, unsigned column)

Public Attributes

std::vector< Node > nodes
std::size_t macNodesVersion_ = std::numeric_limits<std::size_t>::max()
std::size_t nodesVersion_ = 0
std::array< std::vector< std::int64_t >, D > macPlusFace_
std::array< std::vector< std::int64_t >, D > macMinusFace_
std::vector< std::int64_t > macPid_
std::int64_t macNVel_ = 0
std::int64_t macN_ = 0
std::unordered_map< std::size_t, T > macPhiR_
std::unordered_map< std::size_t, T > macPsiA_
std::unordered_map< std::size_t, T > macPsiM_
std::vector< std::unordered_map< std::size_t, std::int64_t > > macCornerId_
std::vector< std::pair< unsigned, IndexType > > macCorners_
std::vector< T > macCornerEta_
std::vector< T > macCornerEtaN_
std::vector< T > macCornerStartV_
std::vector< T > macCornerEndV_
std::vector< T > macCornerMod_
std::vector< T > macCornerMem_
std::vector< std::uint8_t > macCornerGas_
std::vector< std::uint8_t > macCornerOxide_
std::unordered_map< IndexType, std::array< T, 3 >, detail::IndexTypeHasher< D > > macCornerStart_
std::unordered_map< IndexType, std::array< T, 3 >, detail::IndexTypeHasher< D > > macCornerEndMap_
bool macCornerAdvectedValid_ = false
std::vector< T > macX_
std::vector< T > macGhostV_
std::unique_ptr< std::atomic< std::uint8_t >[]> macGhostState_
std::size_t macGhostSlots_ = 0
bool macGhostOn_ = false
bool macPinned_ = false
bool couplingIterate_ = false
std::size_t macWarmVersion_ = std::numeric_limits<std::size_t>::max()
GpuMode gpuMode_ = GpuMode::Cpu
bool macGpuOff_ = false
void * macGpu_ = nullptr
std::unique_ptr< MacAmgPrecond > macAmgP_
std::unique_ptr< MacAmgKrylov > macAmgS_
std::size_t macAmgVersion_ = std::numeric_limits<std::size_t>::max()
std::vector< double > macAmgRs_
std::vector< double > macAmgCs_
std::size_t macAmgSetupIters_ = 0
std::vector< ptrdiff_t > macCsrPtr_
std::vector< ptrdiff_t > macCsrCol_
std::vector< double > macCsrVal_
std::vector< double > macCsrRhs_
std::vector< double > macSval_
std::vector< double > macSrhs_
std::vector< double > macY_
unsigned lastAmgIters_ = 0
std::unique_ptr< Eigen::SparseLU< Eigen::SparseMatrix< double >, Eigen::COLAMDOrdering< int > > > macLU_
std::size_t macLUVersion_ = std::numeric_limits<std::size_t>::max()
Eigen::Index macLUNnz_ = -1
Eigen::Index macLUN_ = -1
Eigen::VectorXd macLURs_
Eigen::VectorXd macLUCs_
bool macLUFactored_ = false
std::vector< std::vector< T > > macAAu_
std::vector< std::vector< T > > macAAg_

Static Public Attributes

static constexpr T stokesTolerance = T(1e-6)
static constexpr unsigned macPairs = static_cast<unsigned>(D * (D - 1) / 2)
static constexpr std::size_t macGpuMinUnknowns = 20000
static constexpr double macTolerance = 1e-9
static constexpr double macCouplingTolerance = 1e-7
static constexpr T macNone = T(1e30)

Protected Member Functions

template<class GridType>
void setMirrorSides (const GridType &grid)
int stencilOffset (const IndexType &index, unsigned direction, int offset) const
bool crosses (T a, T b) const
T valueAt (ConstSparseIterator &it, const IndexType &index) const
template<class OnGrid>
Vec3D< T > definedLevelSetGradient (ConstSparseIterator &it, const IndexType &index, OnGrid onGrid) const
bool inBounds (const IndexType &index) const
void initNodeLookup ()
std::size_t lookupNode (const IndexType &index) const
std::size_t linearIndex (const IndexType &index) const
bool increment (IndexType &index) const
std::size_t findNearbyNode (const IndexType &index) const
template<class Accept>
std::vector< std::size_t > findNearbyNodes (const IndexType &index, Accept accept) const
bool initializeGridFromInterfaces (SmartPointer< Domain< T, D > > reactionInterface, SmartPointer< Domain< T, D > > ambientInterface, SmartPointer< Domain< T, D > > maskInterface, bool useRequestedBounds, const IndexType &requestedMinIndex, const IndexType &requestedMaxIndex, std::size_t maxGridPoints, const std::string &solverName)
bool initializeGridFromMask (SmartPointer< Domain< T, D > > maskInterface, bool useRequestedBounds, const IndexType &requestedMinIndex, const IndexType &requestedMaxIndex, std::size_t maxGridPoints, const std::string &solverName)

Protected Attributes

std::vector< std::size_t > nodeLookupFlat
IndexType minIndex {}
IndexType maxIndex {}
std::array< std::size_t, D > extents {}
std::array< std::size_t, D > strides {}
T gridDelta = 1.
std::array< bool, D > mirrorLow_ {}
std::array< bool, D > mirrorHigh_ {}

Static Protected Attributes

static constexpr std::size_t noNode = std::numeric_limits<std::size_t>::max()

Detailed Description

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 oxide (incompressible Maxwell fluid with a stress-dependent viscosity) and an optional nitride mask (incremental linear elasticity, monolithic mechanics) share one quasi-static Stokes problem on a staggered (MAC) grid over the level-set grid points, solved coupled in velocity and pressure: sparse LU in 2-D, AMGCL in 3-D. The Si/SiO2 interface uses the oxidation expansion velocity, the oxide/ambient and nitride/ambient interfaces are traction-free.

Member Typedef Documentation

◆ MacAmgBackend

template<class T, int D>
typedef amgcl::backend::builtin<double> viennals::OxidationDeformation< T, D >::MacAmgBackend

◆ MacAmgKrylov

template<class T, int D>
typedef amgcl::solver::fgmres<MacAmgBackend> viennals::OxidationDeformation< T, D >::MacAmgKrylov

◆ MacAmgPrecond

template<class T, int D>
typedef amgcl::preconditioner::schur_pressure_correction<MacAmgUSolver, MacAmgPSolver> viennals::OxidationDeformation< T, D >::MacAmgPrecond

◆ MacAmgPrecondBackend

template<class T, int D>
typedef amgcl::backend::builtin<float> viennals::OxidationDeformation< T, D >::MacAmgPrecondBackend

◆ MacAmgPSolver

template<class T, int D>
typedef amgcl::make_solver< amgcl::relaxation::as_preconditioner<MacAmgPrecondBackend, amgcl::relaxation::spai0>, amgcl::solver::preonly<MacAmgPrecondBackend> > viennals::OxidationDeformation< T, D >::MacAmgPSolver

◆ MacAmgUSolver

template<class T, int D>
typedef amgcl::make_solver< amgcl::amg<MacAmgPrecondBackend, amgcl::coarsening::smoothed_aggregation, amgcl::relaxation::ilu0>, amgcl::solver::preonly<MacAmgPrecondBackend> > viennals::OxidationDeformation< T, D >::MacAmgUSolver

Member Enumeration Documentation

◆ anonymous enum

template<class T, int D>
anonymous enum : std::uint8_t
Enumerator
macGas 
macSi 
macOxide 
macNitride 

Constructor & Destructor Documentation

◆ OxidationDeformation() [1/2]

template<class T, int D>
viennals::OxidationDeformation< T, D >::OxidationDeformation ( )
default

◆ OxidationDeformation() [2/2]

template<class T, int D>
viennals::OxidationDeformation< T, D >::OxidationDeformation ( SmartPointer< Domain< T, D > > passedReactionInterface,
SmartPointer< Domain< T, D > > passedAmbientInterface,
SmartPointer< OxidationDiffusion< T, D > > passedDiffusionField,
OxidationParameters passedOxidationParameters,
OxidationDeformationParameters passedDeformationParameters = {} )
inline

Member Function Documentation

◆ advectNitrideStress()

template<class T, int D>
void viennals::OxidationDeformation< T, D >::advectNitrideStress ( )
inline

◆ advectOxideStress()

template<class T, int D>
void viennals::OxidationDeformation< T, D >::advectOxideStress ( )
inline

◆ advectStress()

template<class T, int D>
void viennals::OxidationDeformation< T, D >::advectStress ( const std::vector< std::array< T, 9 > > & end,
std::vector< std::array< T, 9 > > & out,
bool nitride ) const
inline

◆ ambientEndsInMask()

template<class T, int D>
bool viennals::OxidationDeformation< T, D >::ambientEndsInMask ( T maskInside,
T maskOutside,
T distance ) const
inline

◆ apply()

template<class T, int D>
void viennals::OxidationDeformation< T, D >::apply ( )
inline

◆ avgExpansionSpeed()

template<class T, int D>
T viennals::OxidationDeformation< T, D >::avgExpansionSpeed ( )
inline

◆ boundaryIntersection()

template<class T, int D>
BoundaryIntersection viennals::OxidationDeformation< T, D >::boundaryIntersection ( ConstSparseIterator & reactionIt,
ConstSparseIterator & ambientIt,
ConstSparseIterator & maskIt,
const IndexType & inside,
const IndexType & outside ) const
inline

◆ bracketedRoot()

template<class T, int D>
template<class Function>
T viennals::OxidationDeformation< T, D >::bracketedRoot ( const Function & f,
T a,
T fa,
T b,
T fb,
T tolerance )
inlinestatic

◆ buildNodes()

template<class T, int D>
void viennals::OxidationDeformation< T, D >::buildNodes ( )
inline

◆ cacheBoundaryValues()

template<class T, int D>
void viennals::OxidationDeformation< T, D >::cacheBoundaryValues ( )
inline

◆ classifyBoundary()

template<class T, int D>
Boundary viennals::OxidationDeformation< T, D >::classifyBoundary ( ConstSparseIterator & reactionIt,
ConstSparseIterator & ambientIt,
ConstSparseIterator & maskIt,
const IndexType & inside,
const IndexType & outside ) const
inline

◆ clearMaskInterface()

template<class T, int D>
void viennals::OxidationDeformation< T, D >::clearMaskInterface ( )
inline

◆ clearSolveBounds()

template<class T, int D>
void viennals::OxidationDeformation< T, D >::clearSolveBounds ( )
inline

◆ computeAvgExpansionSpeed()

template<class T, int D>
void viennals::OxidationDeformation< T, D >::computeAvgExpansionSpeed ( )
inline

◆ computeNitrideStress()

template<class T, int D>
void viennals::OxidationDeformation< T, D >::computeNitrideStress ( std::size_t i)
inline

◆ crosses()

template<class T, int D>
bool viennals::OxidationSolverBase< T, D >::crosses ( T a,
T b ) const
inlineprotectedinherited

◆ crossingDistance()

template<class T, int D>
T viennals::OxidationDeformation< T, D >::crossingDistance ( T insidePhi,
T outsidePhi ) const
inline

◆ definedLevelSetGradient()

template<class T, int D>
template<class OnGrid>
Vec3D< T > viennals::OxidationSolverBase< T, D >::definedLevelSetGradient ( ConstSparseIterator & it,
const IndexType & index,
OnGrid onGrid ) const
inlineprotectedinherited

◆ deviatorOf()

template<class T, int D>
std::array< T, 9 > viennals::OxidationDeformation< T, D >::deviatorOf ( const std::array< T, 9 > & stress)
inlinestatic

◆ effectiveStressRelaxationTime()

template<class T, int D>
T viennals::OxidationDeformation< T, D >::effectiveStressRelaxationTime ( ) const
inline

◆ estimateMaxUnresolvedAmbientVelocity()

template<class T, int D>
Vec3D< T > viennals::OxidationDeformation< T, D >::estimateMaxUnresolvedAmbientVelocity ( ) const
inline

◆ eyringFactor()

template<class T, int D>
T viennals::OxidationDeformation< T, D >::eyringFactor ( const std::array< T, 9 > & deviatoric,
T volume ) const
inline

◆ findNearbyNode()

template<class T, int D>
std::size_t viennals::OxidationSolverBase< T, D >::findNearbyNode ( const IndexType & index) const
inlineprotectedinherited

◆ findNearbyNodes()

template<class T, int D>
template<class Accept>
std::vector< std::size_t > viennals::OxidationSolverBase< T, D >::findNearbyNodes ( const IndexType & index,
Accept accept ) const
inlineprotectedinherited

◆ forEachSolutionNode()

template<class T, int D>
template<class Callback>
void viennals::OxidationDeformation< T, D >::forEachSolutionNode ( Callback callback) const
inline

callback(index, pressure, Cauchy stress) for every solution node.

◆ getDissipationAlpha()

template<class T, int D>
T viennals::OxidationDeformation< T, D >::getDissipationAlpha ( int direction,
int material,
const Vec3D< T > &  )
inlinefinalvirtual

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.

Reimplemented from viennals::VelocityField< T >.

◆ getIterations()

template<class T, int D>
unsigned viennals::OxidationDeformation< T, D >::getIterations ( ) const
inline

◆ getLastContinuityResidual()

template<class T, int D>
T viennals::OxidationDeformation< T, D >::getLastContinuityResidual ( ) const
inline

◆ getLastStokesResidual()

template<class T, int D>
T viennals::OxidationDeformation< T, D >::getLastStokesResidual ( ) const
inline

◆ getMaterialVelocity()

template<class T, int D>
Vec3D< T > viennals::OxidationDeformation< T, D >::getMaterialVelocity ( const Vec3D< T > & coordinate,
bool nitride )
inline

Monolithic contact: the velocity of one material only (oxide or nitride), for advecting that material's surface. D-linear interpolation over that material's nodes, else its nearest node (within 4 cells), else zero for the nitride and the unresolved-ambient estimate for the oxide (as getVectorVelocity). Interpolating across both materials advected the nitride's edge corner with the free oxide next to it (measured: corner thinned 50 -> 35 nm in 0.1 h).

◆ getNumberOfSolutionNodes()

template<class T, int D>
std::size_t viennals::OxidationDeformation< T, D >::getNumberOfSolutionNodes ( ) const
inline

◆ getPressure() [1/2]

template<class T, int D>
T viennals::OxidationDeformation< T, D >::getPressure ( const IndexType & index) const
inline

◆ getPressure() [2/2]

template<class T, int D>
T viennals::OxidationDeformation< T, D >::getPressure ( const Vec3D< T > & coordinate) const
inline

◆ getResidual()

template<class T, int D>
T viennals::OxidationDeformation< T, D >::getResidual ( ) const
inline

◆ getResolvedVectorVelocity()

template<class T, int D>
Vec3D< T > viennals::OxidationDeformation< T, D >::getResolvedVectorVelocity ( const Vec3D< T > & coordinate) const
inline

Purely mechanical velocity: the interpolated Stokes solution, extended from the nearest solved node when the interpolation stencil has no node, and ZERO when nothing solved is nearby. NEVER falls back to the concentration-derived expansion heuristic — consumers that move a carried mask must see only mechanics, since oxidant concentration has nothing to do with mask motion.

◆ getScalarVelocity()

template<class T, int D>
T viennals::OxidationDeformation< T, D >::getScalarVelocity ( const Vec3D< T > & coordinate,
int material,
const Vec3D< T > & normalVector,
unsigned long  )
inlinefinalvirtual

Should return a scalar value for the velocity at coordinate for a point of material with the given normalVector.

Reimplemented from viennals::VelocityField< T >.

◆ getStrainRateTensor() [1/2]

template<class T, int D>
std::array< T, 9 > viennals::OxidationDeformation< T, D >::getStrainRateTensor ( const IndexType & index) const
inline

◆ getStrainRateTensor() [2/2]

template<class T, int D>
std::array< T, 9 > viennals::OxidationDeformation< T, D >::getStrainRateTensor ( const Vec3D< T > & coordinate) const
inline

◆ getStrainTrace() [1/2]

template<class T, int D>
T viennals::OxidationDeformation< T, D >::getStrainTrace ( const IndexType & index) const
inline

◆ getStrainTrace() [2/2]

template<class T, int D>
T viennals::OxidationDeformation< T, D >::getStrainTrace ( const Vec3D< T > & coordinate) const
inline

◆ getStressTensor() [1/2]

template<class T, int D>
std::array< T, 9 > viennals::OxidationDeformation< T, D >::getStressTensor ( const IndexType & index) const
inline

◆ getStressTensor() [2/2]

template<class T, int D>
std::array< T, 9 > viennals::OxidationDeformation< T, D >::getStressTensor ( const Vec3D< T > & coordinate) const
inline

◆ getVectorVelocity()

template<class T, int D>
Vec3D< T > viennals::OxidationDeformation< T, D >::getVectorVelocity ( const Vec3D< T > & coordinate,
int material,
const Vec3D< T > & ,
unsigned long  )
inlinefinalvirtual

Like getScalarVelocity, but returns a velocity value for each cartesian direction.

Reimplemented from viennals::VelocityField< T >.

◆ getVelocity() [1/2]

template<class T, int D>
Vec3D< T > viennals::OxidationDeformation< T, D >::getVelocity ( const IndexType & index) const
inline

◆ getVelocity() [2/2]

template<class T, int D>
Vec3D< T > viennals::OxidationDeformation< T, D >::getVelocity ( const Vec3D< T > & coordinate) const
inline

◆ getVonMisesStress() [1/2]

template<class T, int D>
T viennals::OxidationDeformation< T, D >::getVonMisesStress ( const IndexType & index) const
inline

◆ getVonMisesStress() [2/2]

template<class T, int D>
T viennals::OxidationDeformation< T, D >::getVonMisesStress ( const Vec3D< T > & coordinate) const
inline

◆ hasFiniteSolution()

template<class T, int D>
bool viennals::OxidationDeformation< T, D >::hasFiniteSolution ( ) const
inline

◆ implicitViscosity()

template<class T, int D>
T viennals::OxidationDeformation< T, D >::implicitViscosity ( ) const
inline

◆ inBounds()

template<class T, int D>
bool viennals::OxidationSolverBase< T, D >::inBounds ( const IndexType & index) const
inlineprotectedinherited

◆ increment()

template<class T, int D>
bool viennals::OxidationSolverBase< T, D >::increment ( IndexType & index) const
inlineprotectedinherited

◆ initialiseGrid()

template<class T, int D>
bool viennals::OxidationDeformation< T, D >::initialiseGrid ( )
inline

◆ initializeGridFromInterfaces()

template<class T, int D>
bool viennals::OxidationSolverBase< T, D >::initializeGridFromInterfaces ( SmartPointer< Domain< T, D > > reactionInterface,
SmartPointer< Domain< T, D > > ambientInterface,
SmartPointer< Domain< T, D > > maskInterface,
bool useRequestedBounds,
const IndexType & requestedMinIndex,
const IndexType & requestedMaxIndex,
std::size_t maxGridPoints,
const std::string & solverName )
inlineprotectedinherited

◆ initializeGridFromMask()

template<class T, int D>
bool viennals::OxidationSolverBase< T, D >::initializeGridFromMask ( SmartPointer< Domain< T, D > > maskInterface,
bool useRequestedBounds,
const IndexType & requestedMinIndex,
const IndexType & requestedMaxIndex,
std::size_t maxGridPoints,
const std::string & solverName )
inlineprotectedinherited

◆ initNitrideViscosity()

template<class T, int D>
void viennals::OxidationDeformation< T, D >::initNitrideViscosity ( )
inline

◆ initNodeLookup()

template<class T, int D>
void viennals::OxidationSolverBase< T, D >::initNodeLookup ( )
inlineprotectedinherited

◆ initOxideViscosity()

template<class T, int D>
void viennals::OxidationDeformation< T, D >::initOxideViscosity ( )
inline

◆ isInsideMask()

template<class T, int D>
bool viennals::OxidationDeformation< T, D >::isInsideMask ( ConstSparseIterator & maskIt,
const IndexType & index ) const
inline

◆ isInsideOxide()

template<class T, int D>
bool viennals::OxidationDeformation< T, D >::isInsideOxide ( T reactionPhi,
T ambientPhi ) const
inline

◆ isMaskAtCrossing()

template<class T, int D>
bool viennals::OxidationDeformation< T, D >::isMaskAtCrossing ( T maskInside,
T maskOutside,
T distance ) const
inline

◆ lastSolveConverged()

template<class T, int D>
bool viennals::OxidationDeformation< T, D >::lastSolveConverged ( ) const
inline

◆ levelSetNormal()

template<class T, int D>
Vec3D< T > viennals::OxidationDeformation< T, D >::levelSetNormal ( ConstSparseIterator & levelSetIt,
const IndexType & index ) const
inline

◆ linearIndex()

template<class T, int D>
std::size_t viennals::OxidationSolverBase< T, D >::linearIndex ( const IndexType & index) const
inlineprotectedinherited

◆ localExpansionSpeed()

template<class T, int D>
T viennals::OxidationDeformation< T, D >::localExpansionSpeed ( const Vec3D< T > & coordinate) const
inline

◆ localNitrideViscosity()

template<class T, int D>
T viennals::OxidationDeformation< T, D >::localNitrideViscosity ( const std::array< T, 9 > & start,
const std::array< T, 9 > & deviatoricRate ) const
inline

◆ localViscosity() [1/2]

template<class T, int D>
T viennals::OxidationDeformation< T, D >::localViscosity ( const std::array< T, 9 > & start,
const std::array< T, 9 > & deviatoricRate ) const
inline

◆ localViscosity() [2/2]

template<class T, int D>
T viennals::OxidationDeformation< T, D >::localViscosity ( const std::array< T, 9 > & start,
const std::array< T, 9 > & deviatoricRate,
T eta0,
T tau0,
T volume ) const
inline

◆ logContinuityDiagnostic()

template<class T, int D>
void viennals::OxidationDeformation< T, D >::logContinuityDiagnostic ( unsigned iterationsUsed) const
inline

◆ lookupNode()

template<class T, int D>
std::size_t viennals::OxidationSolverBase< T, D >::lookupNode ( const IndexType & index) const
inlineprotectedinherited

◆ macAdvectCorners()

template<class T, int D>
void viennals::OxidationDeformation< T, D >::macAdvectCorners ( )
inline

◆ macAmgReset()

template<class T, int D>
void viennals::OxidationDeformation< T, D >::macAmgReset ( )
inline

◆ macAmgSetup()

template<class T, int D>
bool viennals::OxidationDeformation< T, D >::macAmgSetup ( const std::vector< ptrdiff_t > & ptr,
const std::vector< ptrdiff_t > & col,
const std::vector< double > & sval,
const std::vector< double > & cs )
inline

◆ macAmgSolve()

template<class T, int D>
bool viennals::OxidationDeformation< T, D >::macAmgSolve ( std::vector< MacLin > & rows,
T & backward )
inline

◆ macAmgSolveWith()

template<class T, int D>
bool viennals::OxidationDeformation< T, D >::macAmgSolveWith ( const std::vector< ptrdiff_t > & ptr,
const std::vector< ptrdiff_t > & col,
const std::vector< double > & val,
const std::vector< double > & rhs,
bool fresh,
T & backward )
inline

◆ macAndersonStep()

template<class T, int D>
void viennals::OxidationDeformation< T, D >::macAndersonStep ( std::vector< T > & u,
const std::vector< T > & g )
inline

◆ macBuild()

template<class T, int D>
void viennals::OxidationDeformation< T, D >::macBuild ( )
inline

◆ macCornerCoefficients()

template<class T, int D>
void viennals::OxidationDeformation< T, D >::macCornerCoefficients ( T etaRef)
inline

◆ macCornerDecay()

template<class T, int D>
T viennals::OxidationDeformation< T, D >::macCornerDecay ( std::size_t k) const
inline

◆ macCornerLookup()

template<class T, int D>
std::int64_t viennals::OxidationDeformation< T, D >::macCornerLookup ( unsigned pair,
const IndexType & a ) const
inline

◆ macCornerLower()

template<class T, int D>
IndexType viennals::OxidationDeformation< T, D >::macCornerLower ( IndexType point,
unsigned pair,
unsigned k ) const
inline

◆ macCornerNormal()

template<class T, int D>
std::array< T, 3 > viennals::OxidationDeformation< T, D >::macCornerNormal ( bool nitride,
unsigned c,
unsigned e,
const IndexType & a ) const
inline

◆ macCornerReflected()

template<class T, int D>
std::int64_t viennals::OxidationDeformation< T, D >::macCornerReflected ( unsigned pair,
IndexType a,
T & sign ) const
inline

◆ macDirectSolve()

template<class T, int D>
bool viennals::OxidationDeformation< T, D >::macDirectSolve ( const std::vector< MacLin > & rows,
T & backward )
inline

◆ macEval()

template<class T, int D>
T viennals::OxidationDeformation< T, D >::macEval ( const MacLin & e) const
inline

◆ macFace()

template<class T, int D>
MacLin viennals::OxidationDeformation< T, D >::macFace ( unsigned d,
IndexType a,
const IndexType * partner ) const
inline

◆ macFaceId()

template<class T, int D>
std::int64_t viennals::OxidationDeformation< T, D >::macFaceId ( unsigned d,
const IndexType & a ) const
inline

◆ macFaceReflect()

template<class T, int D>
T viennals::OxidationDeformation< T, D >::macFaceReflect ( unsigned d,
IndexType & a ) const
inline

◆ macFrontVelocity()

template<class T, int D>
T viennals::OxidationDeformation< T, D >::macFrontVelocity ( unsigned d,
const IndexType & a,
const IndexType & ghost,
T theta ) const
inline

◆ macGhostFrontVelocity()

template<class T, int D>
T viennals::OxidationDeformation< T, D >::macGhostFrontVelocity ( unsigned d,
const IndexType & pa,
const IndexType & a,
T theta,
std::int64_t pid ) const
inline

◆ macGhostReset()

template<class T, int D>
void viennals::OxidationDeformation< T, D >::macGhostReset ( )
inline

◆ macHasHistory()

template<class T, int D>
bool viennals::OxidationDeformation< T, D >::macHasHistory ( T value)
inlinestatic

◆ macInitViscosity()

template<class T, int D>
void viennals::OxidationDeformation< T, D >::macInitViscosity ( )
inline

◆ macKind()

template<class T, int D>
std::uint8_t viennals::OxidationDeformation< T, D >::macKind ( const IndexType & a) const
inline

◆ macLoadCornerStart()

template<class T, int D>
void viennals::OxidationDeformation< T, D >::macLoadCornerStart ( )
inline

◆ macNode()

template<class T, int D>
std::size_t viennals::OxidationDeformation< T, D >::macNode ( const IndexType & a) const
inline

◆ macNodeMemory()

template<class T, int D>
T viennals::OxidationDeformation< T, D >::macNodeMemory ( std::size_t j,
unsigned d ) const
inline

◆ macNoHistory()

template<class T, int D>
std::array< T, 3 > viennals::OxidationDeformation< T, D >::macNoHistory ( )
inlinestatic

◆ macNormalRate()

template<class T, int D>
MacLin viennals::OxidationDeformation< T, D >::macNormalRate ( unsigned d,
const IndexType & q ) const
inline

◆ macNormalStress()

template<class T, int D>
MacLin viennals::OxidationDeformation< T, D >::macNormalStress ( unsigned d,
const IndexType & q,
const IndexType & s,
T etaRef ) const
inline

◆ macPairDirs()

template<class T, int D>
void viennals::OxidationDeformation< T, D >::macPairDirs ( unsigned pair,
unsigned & c,
unsigned & e )
inlinestatic

◆ macPairIndex()

template<class T, int D>
unsigned viennals::OxidationDeformation< T, D >::macPairIndex ( unsigned c,
unsigned e )
inlinestatic

◆ macPhiFace()

template<class T, int D>
T viennals::OxidationDeformation< T, D >::macPhiFace ( unsigned d,
IndexType a ) const
inline

◆ macPhiR()

template<class T, int D>
T viennals::OxidationDeformation< T, D >::macPhiR ( const IndexType & a) const
inline

◆ macPhiRAt()

template<class T, int D>
T viennals::OxidationDeformation< T, D >::macPhiRAt ( const std::array< T, D > & x) const
inline

◆ macPointStress()

template<class T, int D>
std::array< MacLin, 9 > viennals::OxidationDeformation< T, D >::macPointStress ( const IndexType & q,
T etaRef ) const
inline

◆ macProjected()

template<class T, int D>
MacLin viennals::OxidationDeformation< T, D >::macProjected ( const std::array< MacLin, 9 > & S,
const std::array< T, 3 > & n,
unsigned a,
unsigned b )
inlinestatic

◆ macPsi()

template<class T, int D>
T viennals::OxidationDeformation< T, D >::macPsi ( bool nitride,
const IndexType & a ) const
inline

◆ macPsiSlope()

template<class T, int D>
T viennals::OxidationDeformation< T, D >::macPsiSlope ( bool nitride,
const IndexType & x,
unsigned e ) const
inline

◆ macRates()

template<class T, int D>
void viennals::OxidationDeformation< T, D >::macRates ( std::vector< std::array< T, 9 > > & nodeRate,
std::vector< T > & cornerRate ) const
inline

◆ macReadCornerHistory()

template<class T, int D>
void viennals::OxidationDeformation< T, D >::macReadCornerHistory ( )
inline

◆ macReflect()

template<class T, int D>
IndexType viennals::OxidationDeformation< T, D >::macReflect ( IndexType a) const
inline

◆ macReuseSolve()

template<class T, int D>
bool viennals::OxidationDeformation< T, D >::macReuseSolve ( const Eigen::SparseMatrix< double > & A,
const Eigen::VectorXd & b,
T & backward )
inline

◆ macShearRate()

template<class T, int D>
MacLin viennals::OxidationDeformation< T, D >::macShearRate ( unsigned c,
unsigned e,
const IndexType & a ) const
inline

◆ macShearStress()

template<class T, int D>
MacLin viennals::OxidationDeformation< T, D >::macShearStress ( unsigned c,
unsigned e,
const IndexType & a,
T etaRef ) const
inline

◆ macSolveLinear()

template<class T, int D>
bool viennals::OxidationDeformation< T, D >::macSolveLinear ( T etaRef,
T & backward )
inline

◆ macSurfaceNormal()

template<class T, int D>
std::array< T, 3 > viennals::OxidationDeformation< T, D >::macSurfaceNormal ( bool nitride,
const IndexType & s,
const IndexType & q ) const
inline

◆ macUnitOutward()

template<class T, int D>
std::array< T, 3 > viennals::OxidationDeformation< T, D >::macUnitOutward ( const std::array< T, 3 > & grad)
inlinestatic

◆ macUpdateViscosity()

template<class T, int D>
void viennals::OxidationDeformation< T, D >::macUpdateViscosity ( const std::vector< std::array< T, 9 > > & nodeRate,
const std::vector< T > & cornerRate )
inline

◆ macWriteBack()

template<class T, int D>
void viennals::OxidationDeformation< T, D >::macWriteBack ( const std::vector< std::array< T, 9 > > & nodeRate,
const std::vector< T > & cornerRate,
T etaRef )
inline

◆ macWriteCornerHistory()

template<class T, int D>
void viennals::OxidationDeformation< T, D >::macWriteCornerHistory ( )
inline

◆ makeMaskIterator()

template<class T, int D>
ConstSparseIterator viennals::OxidationDeformation< T, D >::makeMaskIterator ( ) const
inline

◆ markGeometryChanged()

template<class T, int D>
void viennals::OxidationDeformation< T, D >::markGeometryChanged ( )
inline

◆ maxwellDecay()

template<class T, int D>
T viennals::OxidationDeformation< T, D >::maxwellDecay ( ) const
inline

◆ monolithicNitride()

template<class T, int D>
bool viennals::OxidationDeformation< T, D >::monolithicNitride ( ) const
inline

◆ nearbyMeanVelocity()

template<class T, int D>
template<class Accept>
bool viennals::OxidationDeformation< T, D >::nearbyMeanVelocity ( const IndexType & index,
Accept accept,
Vec3D< T > & velocity ) const
inline

◆ neighbourStress()

template<class T, int D>
bool viennals::OxidationDeformation< T, D >::neighbourStress ( const IndexType & idx,
const std::vector< std::array< T, 9 > > & field,
bool nitride,
std::array< T, 9 > & out ) const
inline

◆ New()

template<class T, int D>
template<class... Args>
auto viennals::OxidationDeformation< T, D >::New ( Args &&... args)
inlinestatic

◆ nitrideBoundaryIntersection()

template<class T, int D>
BoundaryIntersection viennals::OxidationDeformation< T, D >::nitrideBoundaryIntersection ( ConstSparseIterator & reactionIt,
ConstSparseIterator & maskIt,
const IndexType & inside,
const IndexType & outside ) const
inline

◆ nitrideDecayFor()

template<class T, int D>
T viennals::OxidationDeformation< T, D >::nitrideDecayFor ( T eta) const
inline

◆ nitrideImplicitFor()

template<class T, int D>
T viennals::OxidationDeformation< T, D >::nitrideImplicitFor ( T eta) const
inline

◆ nitrideLambda()

template<class T, int D>
T viennals::OxidationDeformation< T, D >::nitrideLambda ( ) const
inline

◆ nitrideModuli()

template<class T, int D>
void viennals::OxidationDeformation< T, D >::nitrideModuli ( std::size_t i,
T & twoEta,
T & volumetric ) const
inline

◆ nitrideMu()

template<class T, int D>
T viennals::OxidationDeformation< T, D >::nitrideMu ( ) const
inline

◆ nitrideNodeViscosity()

template<class T, int D>
T viennals::OxidationDeformation< T, D >::nitrideNodeViscosity ( std::size_t i) const
inline

◆ nitridePoisson()

template<class T, int D>
T viennals::OxidationDeformation< T, D >::nitridePoisson ( ) const
inline

◆ nitrideStartOf()

template<class T, int D>
const std::array< T, 9 > & viennals::OxidationDeformation< T, D >::nitrideStartOf ( std::size_t i) const
inline

◆ nitrideStressStartAt()

template<class T, int D>
std::array< T, 9 > viennals::OxidationDeformation< T, D >::nitrideStressStartAt ( const IndexType & index) const
inline

◆ nodeDecay()

template<class T, int D>
T viennals::OxidationDeformation< T, D >::nodeDecay ( std::size_t i) const
inline

◆ nodeImplicitViscosity()

template<class T, int D>
T viennals::OxidationDeformation< T, D >::nodeImplicitViscosity ( std::size_t i) const
inline

◆ nodeViscosity()

template<class T, int D>
T viennals::OxidationDeformation< T, D >::nodeViscosity ( std::size_t i) const
inline

◆ previousDeviatoricStress()

template<class T, int D>
std::array< T, 9 > viennals::OxidationDeformation< T, D >::previousDeviatoricStress ( const IndexType & index) const
inline

◆ reactionBoundaryVelocity()

template<class T, int D>
Vec3D< T > viennals::OxidationDeformation< T, D >::reactionBoundaryVelocity ( const IndexType & index) const
inline

◆ reactionInflow()

template<class T, int D>
T viennals::OxidationDeformation< T, D >::reactionInflow ( ) const
inline

◆ reactionNormal()

template<class T, int D>
Vec3D< T > viennals::OxidationDeformation< T, D >::reactionNormal ( const IndexType & index) const
inline

◆ reactionVelocityAt()

template<class T, int D>
Vec3D< T > viennals::OxidationDeformation< T, D >::reactionVelocityAt ( std::size_t i) const
inline

◆ seedNitrideFromMask()

template<class T, int D>
void viennals::OxidationDeformation< T, D >::seedNitrideFromMask ( )
inline

◆ setAmbientInterface()

template<class T, int D>
void viennals::OxidationDeformation< T, D >::setAmbientInterface ( SmartPointer< Domain< T, D > > passedInterface)
inline

◆ setCouplingIterate()

template<class T, int D>
void viennals::OxidationDeformation< T, D >::setCouplingIterate ( bool iterate)
inline

While the stress coupling iterates (OxidationModel), a solve takes one pass of the viscosity iteration – one linear solve – and then updates the viscosity for the next call: the viscosities converge together with the stress feedback instead of inside every coupling iteration. The solve after the coupling has converged runs the full iteration.

◆ setDeformationParameters()

template<class T, int D>
void viennals::OxidationDeformation< T, D >::setDeformationParameters ( OxidationDeformationParameters passedParameters)
inline

◆ setDiffusionField()

template<class T, int D>
void viennals::OxidationDeformation< T, D >::setDiffusionField ( SmartPointer< OxidationDiffusion< T, D > > passedDiffusionField)
inline

◆ setGpuMode()

template<class T, int D>
void viennals::OxidationDeformation< T, D >::setGpuMode ( GpuMode mode)
inline

GPU for the 3-D velocity-pressure solve (systems of at least macGpuMinUnknowns unknowns): Cpu (default), Gpu, or Auto (the CPU when the GPU is unavailable). The 2-D sparse LU stays on the CPU.

◆ setMaskInterface()

template<class T, int D>
void viennals::OxidationDeformation< T, D >::setMaskInterface ( SmartPointer< Domain< T, D > > passedInterface,
int passedMaskSign = 1 )
inline

◆ setMirrorSides()

template<class T, int D>
template<class GridType>
void viennals::OxidationSolverBase< T, D >::setMirrorSides ( const GridType & grid)
inlineprotectedinherited

◆ setOxidationParameters()

template<class T, int D>
void viennals::OxidationDeformation< T, D >::setOxidationParameters ( OxidationParameters passedParameters)
inline

◆ setOxideSigns()

template<class T, int D>
void viennals::OxidationDeformation< T, D >::setOxideSigns ( int passedReactionSign,
int passedAmbientSign )
inline

◆ setReactionInterface()

template<class T, int D>
void viennals::OxidationDeformation< T, D >::setReactionInterface ( SmartPointer< Domain< T, D > > passedInterface)
inline

◆ setSolveBounds()

template<class T, int D>
void viennals::OxidationDeformation< T, D >::setSolveBounds ( const IndexType & passedMinIndex,
const IndexType & passedMaxIndex )
inline

◆ solveMechanics()

template<class T, int D>
void viennals::OxidationDeformation< T, D >::solveMechanics ( )
inline

◆ startStressAt()

template<class T, int D>
std::array< T, 9 > viennals::OxidationDeformation< T, D >::startStressAt ( const IndexType & index) const
inline

◆ stencilOffset()

template<class T, int D>
int viennals::OxidationSolverBase< T, D >::stencilOffset ( const IndexType & index,
unsigned direction,
int offset ) const
inlineprotectedinherited

◆ stepTime()

template<class T, int D>
T viennals::OxidationDeformation< T, D >::stepTime ( ) const
inline

◆ stressDependentNitride()

template<class T, int D>
bool viennals::OxidationDeformation< T, D >::stressDependentNitride ( ) const
inline

◆ stressDependentViscosity()

template<class T, int D>
bool viennals::OxidationDeformation< T, D >::stressDependentViscosity ( ) const
inline

◆ tensorIndex()

template<class T, int D>
constexpr unsigned viennals::OxidationDeformation< T, D >::tensorIndex ( unsigned row,
unsigned column )
inlinestaticconstexpr

◆ unresolvedAmbientVelocity()

template<class T, int D>
Vec3D< T > viennals::OxidationDeformation< T, D >::unresolvedAmbientVelocity ( const Vec3D< T > & coordinate) const
inline

◆ valueAt()

template<class T, int D>
T viennals::OxidationSolverBase< T, D >::valueAt ( ConstSparseIterator & it,
const IndexType & index ) const
inlineprotectedinherited

◆ valueAtMask()

template<class T, int D>
T viennals::OxidationDeformation< T, D >::valueAtMask ( ConstSparseIterator & maskIt,
const IndexType & index ) const
inline

◆ viscousNitride()

template<class T, int D>
bool viennals::OxidationDeformation< T, D >::viscousNitride ( ) const
inline

◆ vonMisesFromDeviatoric()

template<class T, int D>
T viennals::OxidationDeformation< T, D >::vonMisesFromDeviatoric ( const std::array< T, 9 > & deviatoricStress) const
inline

◆ writeFieldsToLevelSet()

template<class T, int D>
void viennals::OxidationDeformation< T, D >::writeFieldsToLevelSet ( )
inline

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.

◆ writeNitrideFieldsToMask()

template<class T, int D>
void viennals::OxidationDeformation< T, D >::writeNitrideFieldsToMask ( )
inline

Member Data Documentation

◆ couplingIterate_

template<class T, int D>
bool viennals::OxidationDeformation< T, D >::couplingIterate_ = false

◆ extents

template<class T, int D>
std::array<std::size_t, D> viennals::OxidationSolverBase< T, D >::extents {}
protectedinherited

◆ gpuMode_

template<class T, int D>
GpuMode viennals::OxidationDeformation< T, D >::gpuMode_ = GpuMode::Cpu

◆ gridDelta

template<class T, int D>
T viennals::OxidationSolverBase< T, D >::gridDelta = 1.
protectedinherited

◆ lastAmgIters_

template<class T, int D>
unsigned viennals::OxidationDeformation< T, D >::lastAmgIters_ = 0

◆ macAAg_

template<class T, int D>
std::vector<std::vector<T> > viennals::OxidationDeformation< T, D >::macAAg_

◆ macAAu_

template<class T, int D>
std::vector<std::vector<T> > viennals::OxidationDeformation< T, D >::macAAu_

◆ macAmgCs_

template<class T, int D>
std::vector<double> viennals::OxidationDeformation< T, D >::macAmgCs_

◆ macAmgP_

template<class T, int D>
std::unique_ptr<MacAmgPrecond> viennals::OxidationDeformation< T, D >::macAmgP_

◆ macAmgRs_

template<class T, int D>
std::vector<double> viennals::OxidationDeformation< T, D >::macAmgRs_

◆ macAmgS_

template<class T, int D>
std::unique_ptr<MacAmgKrylov> viennals::OxidationDeformation< T, D >::macAmgS_

◆ macAmgSetupIters_

template<class T, int D>
std::size_t viennals::OxidationDeformation< T, D >::macAmgSetupIters_ = 0

◆ macAmgVersion_

template<class T, int D>
std::size_t viennals::OxidationDeformation< T, D >::macAmgVersion_ = std::numeric_limits<std::size_t>::max()

◆ macCornerAdvectedValid_

template<class T, int D>
bool viennals::OxidationDeformation< T, D >::macCornerAdvectedValid_ = false

◆ macCornerEndMap_

template<class T, int D>
std::unordered_map<IndexType, std::array<T, 3>, detail::IndexTypeHasher<D> > viennals::OxidationDeformation< T, D >::macCornerEndMap_

◆ macCornerEndV_

template<class T, int D>
std::vector<T> viennals::OxidationDeformation< T, D >::macCornerEndV_

◆ macCornerEta_

template<class T, int D>
std::vector<T> viennals::OxidationDeformation< T, D >::macCornerEta_

◆ macCornerEtaN_

template<class T, int D>
std::vector<T> viennals::OxidationDeformation< T, D >::macCornerEtaN_

◆ macCornerGas_

template<class T, int D>
std::vector<std::uint8_t> viennals::OxidationDeformation< T, D >::macCornerGas_

◆ macCornerId_

template<class T, int D>
std::vector<std::unordered_map<std::size_t, std::int64_t> > viennals::OxidationDeformation< T, D >::macCornerId_

◆ macCornerMem_

template<class T, int D>
std::vector<T> viennals::OxidationDeformation< T, D >::macCornerMem_

◆ macCornerMod_

template<class T, int D>
std::vector<T> viennals::OxidationDeformation< T, D >::macCornerMod_

◆ macCornerOxide_

template<class T, int D>
std::vector<std::uint8_t> viennals::OxidationDeformation< T, D >::macCornerOxide_

◆ macCorners_

template<class T, int D>
std::vector<std::pair<unsigned, IndexType> > viennals::OxidationDeformation< T, D >::macCorners_

◆ macCornerStart_

template<class T, int D>
std::unordered_map<IndexType, std::array<T, 3>, detail::IndexTypeHasher<D> > viennals::OxidationDeformation< T, D >::macCornerStart_

◆ macCornerStartV_

template<class T, int D>
std::vector<T> viennals::OxidationDeformation< T, D >::macCornerStartV_

◆ macCouplingTolerance

template<class T, int D>
double viennals::OxidationDeformation< T, D >::macCouplingTolerance = 1e-7
staticconstexpr

◆ macCsrCol_

template<class T, int D>
std::vector<ptrdiff_t> viennals::OxidationDeformation< T, D >::macCsrCol_

◆ macCsrPtr_

template<class T, int D>
std::vector<ptrdiff_t> viennals::OxidationDeformation< T, D >::macCsrPtr_

◆ macCsrRhs_

template<class T, int D>
std::vector<double> viennals::OxidationDeformation< T, D >::macCsrRhs_

◆ macCsrVal_

template<class T, int D>
std::vector<double> viennals::OxidationDeformation< T, D >::macCsrVal_

◆ macGhostOn_

template<class T, int D>
bool viennals::OxidationDeformation< T, D >::macGhostOn_ = false

◆ macGhostSlots_

template<class T, int D>
std::size_t viennals::OxidationDeformation< T, D >::macGhostSlots_ = 0

◆ macGhostState_

template<class T, int D>
std::unique_ptr<std::atomic<std::uint8_t>[]> viennals::OxidationDeformation< T, D >::macGhostState_

◆ macGhostV_

template<class T, int D>
std::vector<T> viennals::OxidationDeformation< T, D >::macGhostV_
mutable

◆ macGpu_

template<class T, int D>
void* viennals::OxidationDeformation< T, D >::macGpu_ = nullptr

◆ macGpuMinUnknowns

template<class T, int D>
std::size_t viennals::OxidationDeformation< T, D >::macGpuMinUnknowns = 20000
staticconstexpr

◆ macGpuOff_

template<class T, int D>
bool viennals::OxidationDeformation< T, D >::macGpuOff_ = false

◆ macLU_

template<class T, int D>
std::unique_ptr< Eigen::SparseLU<Eigen::SparseMatrix<double>, Eigen::COLAMDOrdering<int> > > viennals::OxidationDeformation< T, D >::macLU_

◆ macLUCs_

template<class T, int D>
Eigen::VectorXd viennals::OxidationDeformation< T, D >::macLUCs_

◆ macLUFactored_

template<class T, int D>
bool viennals::OxidationDeformation< T, D >::macLUFactored_ = false

◆ macLUN_

template<class T, int D>
Eigen::Index viennals::OxidationDeformation< T, D >::macLUN_ = -1

◆ macLUNnz_

template<class T, int D>
Eigen::Index viennals::OxidationDeformation< T, D >::macLUNnz_ = -1

◆ macLURs_

template<class T, int D>
Eigen::VectorXd viennals::OxidationDeformation< T, D >::macLURs_

◆ macLUVersion_

template<class T, int D>
std::size_t viennals::OxidationDeformation< T, D >::macLUVersion_ = std::numeric_limits<std::size_t>::max()

◆ macMinusFace_

template<class T, int D>
std::array<std::vector<std::int64_t>, D> viennals::OxidationDeformation< T, D >::macMinusFace_

◆ macN_

template<class T, int D>
std::int64_t viennals::OxidationDeformation< T, D >::macN_ = 0

◆ macNodesVersion_

template<class T, int D>
std::size_t viennals::OxidationDeformation< T, D >::macNodesVersion_ = std::numeric_limits<std::size_t>::max()

◆ macNone

template<class T, int D>
T viennals::OxidationDeformation< T, D >::macNone = T(1e30)
staticconstexpr

◆ macNVel_

template<class T, int D>
std::int64_t viennals::OxidationDeformation< T, D >::macNVel_ = 0

◆ macPairs

template<class T, int D>
unsigned viennals::OxidationDeformation< T, D >::macPairs = static_cast<unsigned>(D * (D - 1) / 2)
staticconstexpr

◆ macPhiR_

template<class T, int D>
std::unordered_map<std::size_t, T> viennals::OxidationDeformation< T, D >::macPhiR_

◆ macPid_

template<class T, int D>
std::vector<std::int64_t> viennals::OxidationDeformation< T, D >::macPid_

◆ macPinned_

template<class T, int D>
bool viennals::OxidationDeformation< T, D >::macPinned_ = false

◆ macPlusFace_

template<class T, int D>
std::array<std::vector<std::int64_t>, D> viennals::OxidationDeformation< T, D >::macPlusFace_

◆ macPsiA_

template<class T, int D>
std::unordered_map<std::size_t, T> viennals::OxidationDeformation< T, D >::macPsiA_

◆ macPsiM_

template<class T, int D>
std::unordered_map<std::size_t, T> viennals::OxidationDeformation< T, D >::macPsiM_

◆ macSrhs_

template<class T, int D>
std::vector<double> viennals::OxidationDeformation< T, D >::macSrhs_

◆ macSval_

template<class T, int D>
std::vector<double> viennals::OxidationDeformation< T, D >::macSval_

◆ macTolerance

template<class T, int D>
double viennals::OxidationDeformation< T, D >::macTolerance = 1e-9
staticconstexpr

◆ macWarmVersion_

template<class T, int D>
std::size_t viennals::OxidationDeformation< T, D >::macWarmVersion_ = std::numeric_limits<std::size_t>::max()

◆ macX_

template<class T, int D>
std::vector<T> viennals::OxidationDeformation< T, D >::macX_

◆ macY_

template<class T, int D>
std::vector<double> viennals::OxidationDeformation< T, D >::macY_

◆ maxIndex

template<class T, int D>
IndexType viennals::OxidationSolverBase< T, D >::maxIndex {}
protectedinherited

◆ minIndex

template<class T, int D>
IndexType viennals::OxidationSolverBase< T, D >::minIndex {}
protectedinherited

◆ mirrorHigh_

template<class T, int D>
std::array<bool, D> viennals::OxidationSolverBase< T, D >::mirrorHigh_ {}
protectedinherited

◆ mirrorLow_

template<class T, int D>
std::array<bool, D> viennals::OxidationSolverBase< T, D >::mirrorLow_ {}
protectedinherited

◆ nodeLookupFlat

template<class T, int D>
std::vector<std::size_t> viennals::OxidationSolverBase< T, D >::nodeLookupFlat
protectedinherited

◆ nodes

template<class T, int D>
std::vector<Node> viennals::OxidationDeformation< T, D >::nodes

◆ nodesVersion_

template<class T, int D>
std::size_t viennals::OxidationDeformation< T, D >::nodesVersion_ = 0

◆ noNode

template<class T, int D>
std::size_t viennals::OxidationSolverBase< T, D >::noNode = std::numeric_limits<std::size_t>::max()
staticconstexprprotectedinherited

◆ stokesTolerance

template<class T, int D>
T viennals::OxidationDeformation< T, D >::stokesTolerance = T(1e-6)
staticconstexpr

◆ strides

template<class T, int D>
std::array<std::size_t, D> viennals::OxidationSolverBase< T, D >::strides {}
protectedinherited

The documentation for this class was generated from the following file: