ViennaLS
Loading...
Searching...
No Matches
viennals::Oxidation< T, D > Class Template Reference

Unified oxidation time-step orchestrator. More...

#include <lsOxidation.hpp>

Public Member Functions

const std::unordered_map< std::size_t, T > & getConcentrationCache () const
void setConcentrationCache (std::unordered_map< std::size_t, T > cache)
 Oxidation ()=default
 ~Oxidation ()
 Oxidation (SmartPointer< Domain< T, D > > passedSiInterface, SmartPointer< Domain< T, D > > passedAmbientInterface, SmartPointer< Domain< T, D > > passedMaskInterface=nullptr)
void setGpuMode (GpuMode mode)
void setGpuPreconditioner (GpuPreconditioner preconditioner)
void setSiInterface (SmartPointer< Domain< T, D > > si)
void setAmbientInterface (SmartPointer< Domain< T, D > > ambient)
void setMaskInterface (SmartPointer< Domain< T, D > > mask)
void setOxidationParameters (OxidationParameters params)
void setDeformationParameters (OxidationDeformationParameters params)
void setCouplingParameters (OxidationCouplingParameters params)
void setMaskParameters (OxidationMaskParameters params)
void setSpatialScheme (SpatialSchemeEnum scheme)
 Set the spatial integration scheme for all advections.
void setTemporalScheme (TemporalSchemeEnum scheme)
 Set the temporal integration scheme for all advections.
void setMaskCouplingIterations (unsigned iterations)
void setMaskCouplingTolerance (T tolerance)
void setSolveBounds (const IndexType &minIndex, const IndexType &maxIndex)
 Set the Cartesian index bounding box for the diffusion and deformation solves. If not set, bounds are auto-computed from the level-set narrow band.
void setMaskBendingBounds (const IndexType &minIndex, const IndexType &maxIndex)
 Set the Cartesian index bounding box for the mask bending solve (LOCOS).
SmartPointer< OxidationDiffusion< T, D > > getDiffusionField () const
 Return the diffusion field populated by the most recent apply() call.
SmartPointer< OxidationDeformation< T, D > > getDeformationField () const
 Return the deformation field populated by the most recent apply() call.
SmartPointer< OxidationMaskBending< T, D > > getMaskBendingField () const
 Return the mask bending field (null when no mask is set).
unsigned getMaskCouplingIterations () const
T getMaskCouplingResidual () const
T getLastMaxVelocity () const
 Maximum interface velocity (µm/hr) from the most recent CFL-limited step.
void apply (T advectionTime)
 Execute one oxidation time step of duration advectionTime.
T applyCFLLimited (T requestedTime, T cflFactor)
 Execute one CFL-limited oxidation step; returns the actual time advanced.

Static Public Member Functions

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

Detailed Description

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

Unified oxidation time-step orchestrator.

Couples diffusion, viscoelastic deformation, and (optionally) mask bending into a single CFL-limited step. When a mask interface is provided the solver operates in LOCOS mode; without one it performs standard planar or step oxidation.

Standard mode (no mask):

  1. Diffusion+deformation coupled solve (OxidationModel)
  2. Ambient interface advection (deformation velocity)
  3. Si/SiO2 reaction interface advection (diffusion velocity)
  4. Interior fill for warm-start persistence

LOCOS mode (mask provided):

  1. Diffusion+deformation coupled solve (OxidationModel)
  2. Nitride mask bending solve (OxidationMaskBending) + coupling loop
  3. Pre-advection boolean clip (ambientInterface \ maskInterface)
  4. Ambient interface advection (constrained: mask-coupled under nitride)
  5. Si/SiO2 reaction interface advection (diffusion velocity)
  6. Mask advection (mask bending velocity)
  7. Interior fills + post-advection boolean clip

Usage (standard):

auto ox = ls::Oxidation<double, 2>::New(si, ambient);
ox->setOxidationParameters(oxParams);
ox->setDeformationParameters(defParams);
ox->apply(0.1); // advection time in hours
static auto New(Args &&...args)
Definition lsOxidation.hpp:215

Usage (LOCOS):

auto ox = ls::Oxidation<double, 2>::New(si, ambient, mask);
ox->setOxidationParameters(oxParams);
ox->setDeformationParameters(defParams);
ox->setMaskParameters(maskParams);
ox->setSolveBounds(minIdx, maxIdx);
ox->setMaskBendingBounds(maskMinIdx, maskMaxIdx);
ox->applyCFLLimited(0.35, 0.499);
ox->getDiffusionField()->getConcentration(pt); // diagnostics

Constructor & Destructor Documentation

◆ Oxidation() [1/2]

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

◆ ~Oxidation()

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

◆ Oxidation() [2/2]

template<class T, int D>
viennals::Oxidation< T, D >::Oxidation ( SmartPointer< Domain< T, D > > passedSiInterface,
SmartPointer< Domain< T, D > > passedAmbientInterface,
SmartPointer< Domain< T, D > > passedMaskInterface = nullptr )
inline

Member Function Documentation

◆ apply()

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

Execute one oxidation time step of duration advectionTime.

◆ applyCFLLimited()

template<class T, int D>
T viennals::Oxidation< T, D >::applyCFLLimited ( T requestedTime,
T cflFactor )
inline

Execute one CFL-limited oxidation step; returns the actual time advanced.

◆ getConcentrationCache()

template<class T, int D>
const std::unordered_map< std::size_t, T > & viennals::Oxidation< T, D >::getConcentrationCache ( ) const
inline

◆ getDeformationField()

template<class T, int D>
SmartPointer< OxidationDeformation< T, D > > viennals::Oxidation< T, D >::getDeformationField ( ) const
inline

Return the deformation field populated by the most recent apply() call.

◆ getDiffusionField()

template<class T, int D>
SmartPointer< OxidationDiffusion< T, D > > viennals::Oxidation< T, D >::getDiffusionField ( ) const
inline

Return the diffusion field populated by the most recent apply() call.

◆ getLastMaxVelocity()

template<class T, int D>
T viennals::Oxidation< T, D >::getLastMaxVelocity ( ) const
inline

Maximum interface velocity (µm/hr) from the most recent CFL-limited step.

◆ getMaskBendingField()

template<class T, int D>
SmartPointer< OxidationMaskBending< T, D > > viennals::Oxidation< T, D >::getMaskBendingField ( ) const
inline

Return the mask bending field (null when no mask is set).

◆ getMaskCouplingIterations()

template<class T, int D>
unsigned viennals::Oxidation< T, D >::getMaskCouplingIterations ( ) const
inline

◆ getMaskCouplingResidual()

template<class T, int D>
T viennals::Oxidation< T, D >::getMaskCouplingResidual ( ) const
inline

◆ New()

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

◆ setAmbientInterface()

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

◆ setConcentrationCache()

template<class T, int D>
void viennals::Oxidation< T, D >::setConcentrationCache ( std::unordered_map< std::size_t, T > cache)
inline

◆ setCouplingParameters()

template<class T, int D>
void viennals::Oxidation< T, D >::setCouplingParameters ( OxidationCouplingParameters params)
inline

◆ setDeformationParameters()

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

◆ setGpuMode()

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

◆ setGpuPreconditioner()

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

◆ setMaskBendingBounds()

template<class T, int D>
void viennals::Oxidation< T, D >::setMaskBendingBounds ( const IndexType & minIndex,
const IndexType & maxIndex )
inline

Set the Cartesian index bounding box for the mask bending solve (LOCOS).

◆ setMaskCouplingIterations()

template<class T, int D>
void viennals::Oxidation< T, D >::setMaskCouplingIterations ( unsigned iterations)
inline

◆ setMaskCouplingTolerance()

template<class T, int D>
void viennals::Oxidation< T, D >::setMaskCouplingTolerance ( T tolerance)
inline

◆ setMaskInterface()

template<class T, int D>
void viennals::Oxidation< T, D >::setMaskInterface ( SmartPointer< Domain< T, D > > mask)
inline

◆ setMaskParameters()

template<class T, int D>
void viennals::Oxidation< T, D >::setMaskParameters ( OxidationMaskParameters params)
inline

◆ setOxidationParameters()

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

◆ setSiInterface()

template<class T, int D>
void viennals::Oxidation< T, D >::setSiInterface ( SmartPointer< Domain< T, D > > si)
inline

◆ setSolveBounds()

template<class T, int D>
void viennals::Oxidation< T, D >::setSolveBounds ( const IndexType & minIndex,
const IndexType & maxIndex )
inline

Set the Cartesian index bounding box for the diffusion and deformation solves. If not set, bounds are auto-computed from the level-set narrow band.

◆ setSpatialScheme()

template<class T, int D>
void viennals::Oxidation< T, D >::setSpatialScheme ( SpatialSchemeEnum scheme)
inline

Set the spatial integration scheme for all advections.

◆ setTemporalScheme()

template<class T, int D>
void viennals::Oxidation< T, D >::setTemporalScheme ( TemporalSchemeEnum scheme)
inline

Set the temporal integration scheme for all advections.


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