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 >

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={})
 ~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< TgetVectorVelocity (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< TgetVelocity (const Vec3D< T > &coordinate) const
Vec3D< TgetVelocity (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< TcollectPressures () const
template<class SolverT>
StencilPoint< TpressureStencilPoint (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< TcurrentPressureStencilPoint (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< TfreeSurfaceVelocityBoundary (const IndexType &index, unsigned direction, int offset, T distance, const Vec3D< T > &interiorVelocity) const
Vec3D< TmaskVelocityBoundary (const IndexType &index, const Vec3D< T > &interiorVelocity) const
void computeAvgExpansionSpeed ()
Vec3D< TreactionBoundaryVelocity (const IndexType &index) const
Vec3D< TunresolvedAmbientVelocity (const Vec3D< T > &coordinate) const
Vec3D< TestimateMaxUnresolvedAmbientVelocity () const
T divergenceAt (const IndexType &index) const
Vec3D< TpressureGradient (const IndexType &index) const
Vec3D< TmomentumForcing (const IndexType &index) const
Vec3D< TdeviatoricStressDivergence (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< TreactionNormal (const IndexType &index) const
Vec3D< TinterfaceNormal (const IndexType &index, Boundary boundary) const
Vec3D< TlevelSetNormal (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

Static Public Member Functions

template<class... Args>
static auto New (Args &&...args)
static T firstDerivative (T minusValue, T centerValue, T plusValue, T minusDistance, T plusDistance)
static constexpr unsigned tensorIndex (unsigned row, unsigned column)

Public Attributes

std::vector< Node > nodes

Protected Member Functions

bool crosses (T a, T b) const
T valueAt (ConstSparseIterator &it, const IndexType &index) 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
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, Dextents {}
std::array< std::size_t, Dstrides {}
T gridDelta = 1.

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 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.

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

◆ ~OxidationDeformation()

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

Member Function Documentation

◆ ambientCrossingInsideMask()

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

◆ apply()

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

◆ applySimpleVelocityCorrection()

template<class T, int D>
void viennals::OxidationDeformation< T, D >::applySimpleVelocityCorrection ( const std::vector< T > & pressureOld,
const std::vector< Vec3D< T > > & diagV )
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

◆ buildNodes()

template<class T, int D>
void viennals::OxidationDeformation< T, D >::buildNodes ( )
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

◆ clearMaskVelocityField()

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

◆ clearSolveBounds()

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

◆ collectPressures()

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

◆ collectVelocities()

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

◆ computeAvgExpansionSpeed()

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

◆ computeDiagnostics()

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

◆ computeHarmonicStencilAt()

template<class T, int D>
template<class SolverT>
void viennals::OxidationDeformation< T, D >::computeHarmonicStencilAt ( std::size_t nodeId,
const std::vector< Vec3D< SolverT > > & v,
Vec3D< T > & sum ) const
inline

◆ computePressureStencilAt()

template<class T, int D>
template<class SolverT>
void viennals::OxidationDeformation< T, D >::computePressureStencilAt ( std::size_t nodeId,
const std::vector< SolverT > & p,
const std::vector< T > & ambientBP,
T & diag,
T & rhs ) const
inline

◆ computeStressTensors()

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

◆ computeVelocityDiagonals()

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

◆ computeVelocityStencilAt()

template<class T, int D>
template<class SolverT>
void viennals::OxidationDeformation< T, D >::computeVelocityStencilAt ( std::size_t nodeId,
const std::vector< Vec3D< SolverT > > & v,
T & diag,
Vec3D< T > & rhs ) const
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

◆ currentBoundaryDeviatoricStress()

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

◆ currentPressureStencilPoint()

template<class T, int D>
StencilPoint< T > viennals::OxidationDeformation< T, D >::currentPressureStencilPoint ( std::size_t nodeId,
unsigned direction,
int offset ) const
inline

◆ currentVelocityStencilPoint()

template<class T, int D>
StencilPoint< Vec3D< T > > viennals::OxidationDeformation< T, D >::currentVelocityStencilPoint ( std::size_t nodeId,
unsigned direction,
int offset ) const
inline

◆ deviatoricStressAt()

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

◆ deviatoricStressDivergence()

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

◆ deviatoricTensor()

template<class T, int D>
std::array< T, 9 > viennals::OxidationDeformation< T, D >::deviatoricTensor ( const std::array< T, 9 > & tensor,
T trace ) const
inline

◆ divergenceAt()

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

◆ 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

◆ findNearbyNode()

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

◆ firstDerivative()

template<class T, int D>
T viennals::OxidationDeformation< T, D >::firstDerivative ( T minusValue,
T centerValue,
T plusValue,
T minusDistance,
T plusDistance )
inlinestatic

◆ forEachSolutionNode()

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

◆ freeSurfacePressureBoundary()

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

◆ freeSurfaceVelocityBoundary()

template<class T, int D>
Vec3D< T > viennals::OxidationDeformation< T, D >::freeSurfaceVelocityBoundary ( const IndexType & index,
unsigned direction,
int offset,
T distance,
const Vec3D< T > & interiorVelocity ) const
inline

◆ getDissipationAlpha()

template<class T, int D>
T viennals::OxidationDeformation< T, D >::getDissipationAlpha ( int ,
int ,
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

◆ getLastPressureResidual()

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

◆ getLastStokesResidual()

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

◆ 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

◆ getScalarVelocity()

template<class T, int D>
T viennals::OxidationDeformation< T, D >::getScalarVelocity ( const Vec3D< T > & ,
int ,
const Vec3D< T > & ,
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 > & ,
int ,
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

◆ harmonicMatvec()

template<class T, int D>
template<class SolverT>
void viennals::OxidationDeformation< T, D >::harmonicMatvec ( const std::vector< Vec3D< SolverT > > & v,
const std::vector< Vec3D< T > > & b,
std::vector< Vec3D< SolverT > > & Av ) const
inline

◆ hasFiniteSolution()

template<class T, int D>
bool viennals::OxidationDeformation< T, D >::hasFiniteSolution ( ) 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

◆ initNodeLookup()

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

◆ interfaceNormal()

template<class T, int D>
Vec3D< T > viennals::OxidationDeformation< T, D >::interfaceNormal ( const IndexType & index,
Boundary boundary ) const
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

◆ lookupNode()

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

◆ 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

◆ maskPressureBoundary()

template<class T, int D>
T viennals::OxidationDeformation< T, D >::maskPressureBoundary ( const IndexType & ,
unsigned ,
int ,
T fallbackPressure ) const
inline

◆ maskVelocityBoundary()

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

◆ maxPressureChange()

template<class T, int D>
T viennals::OxidationDeformation< T, D >::maxPressureChange ( const std::vector< T > & previous) const
inline

◆ maxVelocityChange()

template<class T, int D>
T viennals::OxidationDeformation< T, D >::maxVelocityChange ( const std::vector< Vec3D< T > > & previous) const
inline

◆ momentumForcing()

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

◆ New()

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

◆ normalStress()

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

◆ pressureAt()

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

◆ pressureDerivative()

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

◆ pressureGradient()

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

◆ pressureMatvec()

template<class T, int D>
template<class SolverT>
void viennals::OxidationDeformation< T, D >::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
inline

◆ pressureStencilPoint()

template<class T, int D>
template<class SolverT>
StencilPoint< T > viennals::OxidationDeformation< T, D >::pressureStencilPoint ( const std::vector< SolverT > & pressure,
const std::vector< T > & ambientBoundaryPressure,
std::size_t nodeId,
unsigned direction,
int offset ) 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

◆ reactionNormal()

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

◆ setAmbientInterface()

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

◆ 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

◆ setGpuPreconditioner()

template<class T, int D>
void viennals::OxidationDeformation< T, D >::setGpuPreconditioner ( GpuPreconditioner prec)
inline

◆ setMaskInterface()

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

◆ setMaskVelocityField()

template<class T, int D>
void viennals::OxidationDeformation< T, D >::setMaskVelocityField ( SmartPointer< VelocityField< T > > passedVelocityField)
inline

◆ 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

◆ solvePressure()

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

◆ solveStokesVelocity()

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

◆ solveVelocity()

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

◆ strainRateTensorAt()

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

◆ tensorIndex()

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

◆ touchesBoundary()

template<class T, int D>
bool viennals::OxidationDeformation< T, D >::touchesBoundary ( ConstSparseIterator & reactionIt,
ConstSparseIterator & ambientIt,
ConstSparseIterator & maskIt,
const IndexType & index,
Boundary requestedBoundary ) const
inline

◆ 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

◆ velocityDerivative()

template<class T, int D>
T viennals::OxidationDeformation< T, D >::velocityDerivative ( const IndexType & index,
unsigned component,
unsigned direction ) const
inline

◆ velocityStencilPoint()

template<class T, int D>
template<class SolverT>
StencilPoint< Vec3D< T > > viennals::OxidationDeformation< T, D >::velocityStencilPoint ( const std::vector< Vec3D< SolverT > > & velocity,
std::size_t nodeId,
unsigned direction,
int offset ) 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.

Member Data Documentation

◆ extents

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

◆ gridDelta

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

◆ 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

◆ 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

◆ noNode

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

◆ 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: