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

Vector velocity field for a compliant oxidation mask driven by solved oxide traction. A Cartesian viscous elasticity solve is built inside the mask level set, oxide-contact faces use a traction ghost velocity, and the resulting vector field moves the entire mask body. Repeated applications use Aitken relaxation on the contact-interface velocity update. More...

#include <lsOxidationMask.hpp>

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

Public Member Functions

 OxidationMaskBending ()=default
 OxidationMaskBending (SmartPointer< OxidationDeformation< T, D > > passedDeformation, OxidationMaskParameters passedParameters={})
 OxidationMaskBending (SmartPointer< OxidationDeformation< T, D > > passedDeformation, SmartPointer< Domain< T, D > > passedMaskInterface, OxidationMaskParameters passedParameters={}, int passedMaskSign=1)
 ~OxidationMaskBending ()=default
void setMaskInterface (SmartPointer< Domain< T, D > > passedMaskInterface, int passedMaskSign=1)
void setAmbientInterface (SmartPointer< Domain< T, D > > passedAmbientInterface, int passedAmbientSign=-1)
 Provide the SiO₂/ambient interface so that contact faces can be detected on any mask face that borders the oxide, not only the bottom face. ambientSign follows the same convention as OxidationDeformation: ambientSign * φ_ambient >= 0 selects nodes inside the oxide band.
void setParameters (OxidationMaskParameters passedParameters)
void setSolveBounds (const IndexType &passedMinIndex, const IndexType &passedMaxIndex)
void clearSolveBounds ()
OxidationMaskParameters getParameters () const
unsigned getIterations () const
T getResidual () const
std::size_t getNumberOfSolutionNodes () const
std::size_t getNumberOfContactNodes () const
std::size_t getNumberOfFixedNodes () const
T getLastApplyVelocityChange () const
T getLastApplyAbsoluteVelocityChange () const
void apply ()
void finalizeElasticAdvectionVelocity ()
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 getDissipationAlpha (int direction, int, 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.
void writeFieldsToLevelSet ()
 Write mask bending velocity into maskInterface->getPointData() so that lsInterior + lsAdvect carry it across timestep boundaries.
virtual T getScalarVelocity (const Vec3D< T > &, int, const Vec3D< T > &, unsigned long)
 Should return a scalar value for the velocity at coordinate for a point of material with the given normalVector.

Static Public Member Functions

static SmartPointer< OxidationMaskBendingNew (SmartPointer< OxidationDeformation< T, D > > passedDeformation, OxidationMaskParameters passedParameters={})
static SmartPointer< OxidationMaskBendingNew (SmartPointer< OxidationDeformation< T, D > > passedDeformation, SmartPointer< Domain< T, D > > passedMaskInterface, OxidationMaskParameters passedParameters={}, int passedMaskSign=1)

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::OxidationMaskBending< T, D >

Vector velocity field for a compliant oxidation mask driven by solved oxide traction. A Cartesian viscous elasticity solve is built inside the mask level set, oxide-contact faces use a traction ghost velocity, and the resulting vector field moves the entire mask body. Repeated applications use Aitken relaxation on the contact-interface velocity update.

Constructor & Destructor Documentation

◆ OxidationMaskBending() [1/3]

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

◆ OxidationMaskBending() [2/3]

template<class T, int D>
viennals::OxidationMaskBending< T, D >::OxidationMaskBending ( SmartPointer< OxidationDeformation< T, D > > passedDeformation,
OxidationMaskParameters passedParameters = {} )
inline

◆ OxidationMaskBending() [3/3]

template<class T, int D>
viennals::OxidationMaskBending< T, D >::OxidationMaskBending ( SmartPointer< OxidationDeformation< T, D > > passedDeformation,
SmartPointer< Domain< T, D > > passedMaskInterface,
OxidationMaskParameters passedParameters = {},
int passedMaskSign = 1 )
inline

◆ ~OxidationMaskBending()

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

Member Function Documentation

◆ apply()

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

◆ clearSolveBounds()

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

◆ crosses()

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

◆ finalizeElasticAdvectionVelocity()

template<class T, int D>
void viennals::OxidationMaskBending< T, D >::finalizeElasticAdvectionVelocity ( )
inline

◆ findNearbyNode()

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

◆ getDissipationAlpha()

template<class T, int D>
T viennals::OxidationMaskBending< 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::OxidationMaskBending< T, D >::getIterations ( ) const
inline

◆ getLastApplyAbsoluteVelocityChange()

template<class T, int D>
T viennals::OxidationMaskBending< T, D >::getLastApplyAbsoluteVelocityChange ( ) const
inline

◆ getLastApplyVelocityChange()

template<class T, int D>
T viennals::OxidationMaskBending< T, D >::getLastApplyVelocityChange ( ) const
inline

◆ getNumberOfContactNodes()

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

◆ getNumberOfFixedNodes()

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

◆ getNumberOfSolutionNodes()

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

◆ getParameters()

template<class T, int D>
OxidationMaskParameters viennals::OxidationMaskBending< T, D >::getParameters ( ) const
inline

◆ getResidual()

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

◆ getScalarVelocity()

template<class T>
virtual T viennals::VelocityField< T >::getScalarVelocity ( const Vec3D< T > & ,
int ,
const Vec3D< T > & ,
unsigned long  )
inlinevirtualinherited

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

Reimplemented in viennals::OxidationConstrainedAmbient< T, D >, viennals::OxidationDeformation< T, D >, and viennals::OxidationDiffusion< T, D >.

◆ getVectorVelocity()

template<class T, int D>
Vec3D< T > viennals::OxidationMaskBending< 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 >.

◆ 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

◆ 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

◆ linearIndex()

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

◆ lookupNode()

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

◆ New() [1/2]

template<class T, int D>
SmartPointer< OxidationMaskBending > viennals::OxidationMaskBending< T, D >::New ( SmartPointer< OxidationDeformation< T, D > > passedDeformation,
OxidationMaskParameters passedParameters = {} )
inlinestatic

◆ New() [2/2]

template<class T, int D>
SmartPointer< OxidationMaskBending > viennals::OxidationMaskBending< T, D >::New ( SmartPointer< OxidationDeformation< T, D > > passedDeformation,
SmartPointer< Domain< T, D > > passedMaskInterface,
OxidationMaskParameters passedParameters = {},
int passedMaskSign = 1 )
inlinestatic

◆ setAmbientInterface()

template<class T, int D>
void viennals::OxidationMaskBending< T, D >::setAmbientInterface ( SmartPointer< Domain< T, D > > passedAmbientInterface,
int passedAmbientSign = -1 )
inline

Provide the SiO₂/ambient interface so that contact faces can be detected on any mask face that borders the oxide, not only the bottom face. ambientSign follows the same convention as OxidationDeformation: ambientSign * φ_ambient >= 0 selects nodes inside the oxide band.

◆ setMaskInterface()

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

◆ setParameters()

template<class T, int D>
void viennals::OxidationMaskBending< T, D >::setParameters ( OxidationMaskParameters passedParameters)
inline

◆ setSolveBounds()

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

◆ valueAt()

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

◆ writeFieldsToLevelSet()

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

Write mask bending velocity into maskInterface->getPointData() so that lsInterior + lsAdvect carry it across timestep boundaries.

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

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