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

Carries a mechanically transparent (barrier-only) mask along with the oxide it rests on. More...

#include <lsOxidationMask.hpp>

Inheritance diagram for viennals::OxidationMaskCarry< T, D >:
viennals::VelocityField< T >

Public Member Functions

 OxidationMaskCarry ()=default
 OxidationMaskCarry (SmartPointer< OxidationDeformation< T, D > > oxideMechanics, SmartPointer< Domain< T, D > > maskInterface)
Vec3D< T > getVectorVelocity (const Vec3D< T > &coordinate, int material, const Vec3D< T > &normalVector, unsigned long pointId) final
 Like getScalarVelocity, but returns a velocity value for each cartesian direction.
T getScalarVelocity (const Vec3D< T > &, int, const Vec3D< T > &, unsigned long) final
 Should return a scalar value for the velocity at coordinate for a point of material with the given normalVector.
virtual T getDissipationAlpha (int, int, const Vec3D< T > &)
 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.

Static Public Member Functions

template<class... Args>
static auto New (Args &&...args)

Detailed Description

template<class T, int D>
class viennals::OxidationMaskCarry< T, D >

Carries a mechanically transparent (barrier-only) mask along with the oxide it rests on.

The mask's contact face already gets the right velocity by sampling the oxide field at its own coordinates — that face lies on the oxide. The rest of the mask does not: those points sit off the oxide entirely, where the field is undefined and evaluates to zero. Advecting with the raw field therefore moves the contact face and leaves the rest behind, deforming the mask.

The contact velocity is extended through the mask by relaxation over the mask's OWN points. Interior fills the mask body first, so every point the sweep touches is guaranteed to be defined — no value is ever read from another level set outside its narrow band, which is what made isolated grid columns fall back to a wrong velocity and gouge the oxide.

Each sweep is synchronous and averages over ALL known neighbours, so the result does not depend on visit order and cannot shear where the contact velocity varies laterally. Direction never appears: propagation follows the mask's own connectivity, so this is equally valid for a mask lying flat, one standing against a sidewall, and general 3-D geometry.

Constructor & Destructor Documentation

◆ OxidationMaskCarry() [1/2]

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

◆ OxidationMaskCarry() [2/2]

template<class T, int D>
viennals::OxidationMaskCarry< T, D >::OxidationMaskCarry ( SmartPointer< OxidationDeformation< T, D > > oxideMechanics,
SmartPointer< Domain< T, D > > maskInterface )
inline

Member Function Documentation

◆ getDissipationAlpha()

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

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 in viennals::OxidationDeformation< T, D >, viennals::OxidationDiffusion< T, D >, and viennals::OxidationMaterialVelocity< T, D >.

◆ getScalarVelocity()

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

◆ getVectorVelocity()

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

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

Reimplemented from viennals::VelocityField< T >.

◆ New()

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

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