|
ViennaLS
|
Propagates the volume expansion generated at the Si/SiO2 interface through the oxide as a Cartesian-grid deformation velocity field. More...
#include <lsOxidationDeformation.hpp>
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() |
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.
| typedef amgcl::backend::builtin<double> viennals::OxidationDeformation< T, D >::MacAmgBackend |
| typedef amgcl::solver::fgmres<MacAmgBackend> viennals::OxidationDeformation< T, D >::MacAmgKrylov |
| typedef amgcl::preconditioner::schur_pressure_correction<MacAmgUSolver, MacAmgPSolver> viennals::OxidationDeformation< T, D >::MacAmgPrecond |
| typedef amgcl::backend::builtin<float> viennals::OxidationDeformation< T, D >::MacAmgPrecondBackend |
| typedef amgcl::make_solver< amgcl::relaxation::as_preconditioner<MacAmgPrecondBackend, amgcl::relaxation::spai0>, amgcl::solver::preonly<MacAmgPrecondBackend> > viennals::OxidationDeformation< T, D >::MacAmgPSolver |
| typedef amgcl::make_solver< amgcl::amg<MacAmgPrecondBackend, amgcl::coarsening::smoothed_aggregation, amgcl::relaxation::ilu0>, amgcl::solver::preonly<MacAmgPrecondBackend> > viennals::OxidationDeformation< T, D >::MacAmgUSolver |
| anonymous enum : std::uint8_t |
|
default |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inlinestatic |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inlineprotectedinherited |
|
inline |
|
inlineprotectedinherited |
|
inlinestatic |
|
inline |
|
inline |
|
inline |
|
inlineprotectedinherited |
|
inlineprotectedinherited |
|
inline |
callback(index, pressure, Cauchy stress) for every solution node.
|
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 >.
|
inline |
|
inline |
|
inline |
|
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).
|
inline |
|
inline |
|
inline |
|
inline |
|
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.
|
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 >.
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inlinefinalvirtual |
Like getScalarVelocity, but returns a velocity value for each cartesian direction.
Reimplemented from viennals::VelocityField< T >.
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inlineprotectedinherited |
|
inlineprotectedinherited |
|
inline |
|
inlineprotectedinherited |
|
inlineprotectedinherited |
|
inline |
|
inlineprotectedinherited |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inlineprotectedinherited |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inlineprotectedinherited |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inlinestatic |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inlinestatic |
|
inline |
|
inline |
|
inlinestatic |
|
inlinestatic |
|
inline |
|
inline |
|
inline |
|
inline |
|
inlinestatic |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inlinestatic |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inlinestatic |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
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.
|
inline |
|
inline |
|
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.
|
inline |
|
inlineprotectedinherited |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inlineprotectedinherited |
|
inline |
|
inline |
|
inline |
|
inlinestaticconstexpr |
|
inline |
|
inlineprotectedinherited |
|
inline |
|
inline |
|
inline |
|
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.
|
inline |
| bool viennals::OxidationDeformation< T, D >::couplingIterate_ = false |
|
protectedinherited |
| GpuMode viennals::OxidationDeformation< T, D >::gpuMode_ = GpuMode::Cpu |
|
protectedinherited |
| unsigned viennals::OxidationDeformation< T, D >::lastAmgIters_ = 0 |
| std::vector<std::vector<T> > viennals::OxidationDeformation< T, D >::macAAg_ |
| std::vector<std::vector<T> > viennals::OxidationDeformation< T, D >::macAAu_ |
| std::vector<double> viennals::OxidationDeformation< T, D >::macAmgCs_ |
| std::unique_ptr<MacAmgPrecond> viennals::OxidationDeformation< T, D >::macAmgP_ |
| std::vector<double> viennals::OxidationDeformation< T, D >::macAmgRs_ |
| std::unique_ptr<MacAmgKrylov> viennals::OxidationDeformation< T, D >::macAmgS_ |
| std::size_t viennals::OxidationDeformation< T, D >::macAmgSetupIters_ = 0 |
| std::size_t viennals::OxidationDeformation< T, D >::macAmgVersion_ = std::numeric_limits<std::size_t>::max() |
| bool viennals::OxidationDeformation< T, D >::macCornerAdvectedValid_ = false |
| std::unordered_map<IndexType, std::array<T, 3>, detail::IndexTypeHasher<D> > viennals::OxidationDeformation< T, D >::macCornerEndMap_ |
| std::vector<T> viennals::OxidationDeformation< T, D >::macCornerEndV_ |
| std::vector<T> viennals::OxidationDeformation< T, D >::macCornerEta_ |
| std::vector<T> viennals::OxidationDeformation< T, D >::macCornerEtaN_ |
| std::vector<std::uint8_t> viennals::OxidationDeformation< T, D >::macCornerGas_ |
| std::vector<std::unordered_map<std::size_t, std::int64_t> > viennals::OxidationDeformation< T, D >::macCornerId_ |
| std::vector<T> viennals::OxidationDeformation< T, D >::macCornerMem_ |
| std::vector<T> viennals::OxidationDeformation< T, D >::macCornerMod_ |
| std::vector<std::uint8_t> viennals::OxidationDeformation< T, D >::macCornerOxide_ |
| std::vector<std::pair<unsigned, IndexType> > viennals::OxidationDeformation< T, D >::macCorners_ |
| std::unordered_map<IndexType, std::array<T, 3>, detail::IndexTypeHasher<D> > viennals::OxidationDeformation< T, D >::macCornerStart_ |
| std::vector<T> viennals::OxidationDeformation< T, D >::macCornerStartV_ |
|
staticconstexpr |
| std::vector<ptrdiff_t> viennals::OxidationDeformation< T, D >::macCsrCol_ |
| std::vector<ptrdiff_t> viennals::OxidationDeformation< T, D >::macCsrPtr_ |
| std::vector<double> viennals::OxidationDeformation< T, D >::macCsrRhs_ |
| std::vector<double> viennals::OxidationDeformation< T, D >::macCsrVal_ |
| bool viennals::OxidationDeformation< T, D >::macGhostOn_ = false |
| std::size_t viennals::OxidationDeformation< T, D >::macGhostSlots_ = 0 |
| std::unique_ptr<std::atomic<std::uint8_t>[]> viennals::OxidationDeformation< T, D >::macGhostState_ |
|
mutable |
| void* viennals::OxidationDeformation< T, D >::macGpu_ = nullptr |
|
staticconstexpr |
| bool viennals::OxidationDeformation< T, D >::macGpuOff_ = false |
| std::unique_ptr< Eigen::SparseLU<Eigen::SparseMatrix<double>, Eigen::COLAMDOrdering<int> > > viennals::OxidationDeformation< T, D >::macLU_ |
| Eigen::VectorXd viennals::OxidationDeformation< T, D >::macLUCs_ |
| bool viennals::OxidationDeformation< T, D >::macLUFactored_ = false |
| Eigen::Index viennals::OxidationDeformation< T, D >::macLUN_ = -1 |
| Eigen::Index viennals::OxidationDeformation< T, D >::macLUNnz_ = -1 |
| Eigen::VectorXd viennals::OxidationDeformation< T, D >::macLURs_ |
| std::size_t viennals::OxidationDeformation< T, D >::macLUVersion_ = std::numeric_limits<std::size_t>::max() |
| std::array<std::vector<std::int64_t>, D> viennals::OxidationDeformation< T, D >::macMinusFace_ |
| std::int64_t viennals::OxidationDeformation< T, D >::macN_ = 0 |
| std::size_t viennals::OxidationDeformation< T, D >::macNodesVersion_ = std::numeric_limits<std::size_t>::max() |
|
staticconstexpr |
| std::int64_t viennals::OxidationDeformation< T, D >::macNVel_ = 0 |
|
staticconstexpr |
| std::unordered_map<std::size_t, T> viennals::OxidationDeformation< T, D >::macPhiR_ |
| std::vector<std::int64_t> viennals::OxidationDeformation< T, D >::macPid_ |
| bool viennals::OxidationDeformation< T, D >::macPinned_ = false |
| std::array<std::vector<std::int64_t>, D> viennals::OxidationDeformation< T, D >::macPlusFace_ |
| std::unordered_map<std::size_t, T> viennals::OxidationDeformation< T, D >::macPsiA_ |
| std::unordered_map<std::size_t, T> viennals::OxidationDeformation< T, D >::macPsiM_ |
| std::vector<double> viennals::OxidationDeformation< T, D >::macSrhs_ |
| std::vector<double> viennals::OxidationDeformation< T, D >::macSval_ |
|
staticconstexpr |
| std::size_t viennals::OxidationDeformation< T, D >::macWarmVersion_ = std::numeric_limits<std::size_t>::max() |
| std::vector<T> viennals::OxidationDeformation< T, D >::macX_ |
| std::vector<double> viennals::OxidationDeformation< T, D >::macY_ |
|
protectedinherited |
|
protectedinherited |
|
protectedinherited |
|
protectedinherited |
|
protectedinherited |
| std::vector<Node> viennals::OxidationDeformation< T, D >::nodes |
| std::size_t viennals::OxidationDeformation< T, D >::nodesVersion_ = 0 |
|
staticconstexprprotectedinherited |
|
staticconstexpr |
|
protectedinherited |