peclet.voro 1.0.4
Device-native moving-particle Voronoi dynamics
Loading...
Searching...
No Matches
peclet::voro::energy Namespace Reference

Namespaces

namespace  detail
 

Functions

template<class Real , class Policy = Voronoi, class Sdf = NoSdf>
Real interfaceEnergyForce (const TessellationView< Real > &view, const Kokkos::View< int *, peclet::core::MemSpace > &types, const Kokkos::View< Real *, peclet::core::MemSpace > &tension, int nTypes, const Kokkos::View< Real *, peclet::core::MemSpace > &pos, const Kokkos::View< Real *, peclet::core::MemSpace > &weight, Real L, const Kokkos::View< Real *, peclet::core::MemSpace > &force, const Kokkos::View< Real *, peclet::core::MemSpace > &forceW={}, const Sdf &sdf=Sdf{})
 
template<class Real >
void cellCentroids (const TessellationView< Real > &view, const Kokkos::View< Real *, peclet::core::MemSpace > &pos, const Kokkos::View< Real *, peclet::core::MemSpace > &out)
 Cell centroids (3N, world = seed + relative) from the facet CSR. pos supplies the seeds.
 
template<class Real >
Real lloydEnergyForce (const TessellationView< Real > &view, const Kokkos::View< Real *, peclet::core::MemSpace > &pos, Real gamma, const Kokkos::View< Real *, peclet::core::MemSpace > &force)
 
template<class Real , class Policy = Voronoi, class Sdf = NoSdf>
Real facetTensionEnergyForce (const TessellationView< Real > &view, Real sigma, const Kokkos::View< Real *, peclet::core::MemSpace > &pos, const Kokkos::View< Real *, peclet::core::MemSpace > &weight, Real L, const Kokkos::View< Real *, peclet::core::MemSpace > &force, const Kokkos::View< Real *, peclet::core::MemSpace > &forceW={}, const Sdf &sdf=Sdf{})
 
template<class Real >
KOKKOS_INLINE_FUNCTION Real dTargetVolume (Real V, Real Vref)
 e(V) = (V/Vref − 1)²: e' = 2 (V/Vref − 1)/Vref.
 
template<class Real >
KOKKOS_INLINE_FUNCTION Real dLogBarrier (Real V, Real mu)
 e(V) = −μ log(V/Vref) (log-barrier against collapse): e' = −μ/V.
 
template<class Real >
KOKKOS_INLINE_FUNCTION Real dFreeEnergy (Real V, Real Vref)
 e(V) = −Vref log V (ideal-gas free energy; equilibrium at equal pressure Vref/V): e' = −Vref/V.
 
template<class Real , class Policy = Voronoi, class Sdf = NoSdf>
void volumeGradientForce (const TessellationView< Real > &view, const Kokkos::View< Real *, peclet::core::MemSpace > &dEdV, const Kokkos::View< Real *, peclet::core::MemSpace > &pos, const Kokkos::View< Real *, peclet::core::MemSpace > &weight, Real L, const Kokkos::View< Real *, peclet::core::MemSpace > &force, const Kokkos::View< Real *, peclet::core::MemSpace > &forceW={}, const Sdf &sdf=Sdf{})
 
template<class Real , class Policy = Voronoi, class Sdf = NoSdf>
Real wallEnergyForce (const TessellationView< Real > &view, const Kokkos::View< int *, peclet::core::MemSpace > &types, const Kokkos::View< Real *, peclet::core::MemSpace > &sigmaS, const Sdf &sdf, const Kokkos::View< Real *, peclet::core::MemSpace > &pos, const Kokkos::View< Real *, peclet::core::MemSpace > &weight, Real L, const Kokkos::View< Real *, peclet::core::MemSpace > &force, const Kokkos::View< Real *, peclet::core::MemSpace > &forceW={})
 

Function Documentation

◆ cellCentroids()

template<class Real >
void peclet::voro::energy::cellCentroids ( const TessellationView< Real > &  view,
const Kokkos::View< Real *, peclet::core::MemSpace > &  pos,
const Kokkos::View< Real *, peclet::core::MemSpace > &  out 
)

Cell centroids (3N, world = seed + relative) from the facet CSR. pos supplies the seeds.

◆ dFreeEnergy()

template<class Real >
KOKKOS_INLINE_FUNCTION Real peclet::voro::energy::dFreeEnergy ( Real  V,
Real  Vref 
)

e(V) = −Vref log V (ideal-gas free energy; equilibrium at equal pressure Vref/V): e' = −Vref/V.

◆ dLogBarrier()

template<class Real >
KOKKOS_INLINE_FUNCTION Real peclet::voro::energy::dLogBarrier ( Real  V,
Real  mu 
)

e(V) = −μ log(V/Vref) (log-barrier against collapse): e' = −μ/V.

◆ dTargetVolume()

template<class Real >
KOKKOS_INLINE_FUNCTION Real peclet::voro::energy::dTargetVolume ( Real  V,
Real  Vref 
)

e(V) = (V/Vref − 1)²: e' = 2 (V/Vref − 1)/Vref.

◆ facetTensionEnergyForce()

template<class Real , class Policy = Voronoi, class Sdf = NoSdf>
Real peclet::voro::energy::facetTensionEnergyForce ( const TessellationView< Real > &  view,
Real  sigma,
const Kokkos::View< Real *, peclet::core::MemSpace > &  pos,
const Kokkos::View< Real *, peclet::core::MemSpace > &  weight,
Real  L,
const Kokkos::View< Real *, peclet::core::MemSpace > &  force,
const Kokkos::View< Real *, peclet::core::MemSpace > &  forceW = {},
const Sdf &  sdf = Sdf{} 
)

◆ interfaceEnergyForce()

template<class Real , class Policy = Voronoi, class Sdf = NoSdf>
Real peclet::voro::energy::interfaceEnergyForce ( const TessellationView< Real > &  view,
const Kokkos::View< int *, peclet::core::MemSpace > &  types,
const Kokkos::View< Real *, peclet::core::MemSpace > &  tension,
int  nTypes,
const Kokkos::View< Real *, peclet::core::MemSpace > &  pos,
const Kokkos::View< Real *, peclet::core::MemSpace > &  weight,
Real  L,
const Kokkos::View< Real *, peclet::core::MemSpace > &  force,
const Kokkos::View< Real *, peclet::core::MemSpace > &  forceW = {},
const Sdf &  sdf = Sdf{} 
)

Interfacial energy + gradient. types per cell (N), tension nTypes×nTypes. Adds dE/dx into force (3N) and dE/dw into forceW (N; only under a weighted policy). Returns E. The view must carry the area-Jacobian CSR (build with withAreaGrad = true).

◆ lloydEnergyForce()

template<class Real >
Real peclet::voro::energy::lloydEnergyForce ( const TessellationView< Real > &  view,
const Kokkos::View< Real *, peclet::core::MemSpace > &  pos,
Real  gamma,
const Kokkos::View< Real *, peclet::core::MemSpace > &  force 
)

Lloyd energy gradient dE/dx = 2 V_i (x_i − c_i) added into force (3N); returns E when the view carries facet second moments (withMoments), else −1 (gradient only).

◆ volumeGradientForce()

template<class Real , class Policy = Voronoi, class Sdf = NoSdf>
void peclet::voro::energy::volumeGradientForce ( const TessellationView< Real > &  view,
const Kokkos::View< Real *, peclet::core::MemSpace > &  dEdV,
const Kokkos::View< Real *, peclet::core::MemSpace > &  pos,
const Kokkos::View< Real *, peclet::core::MemSpace > &  weight,
Real  L,
const Kokkos::View< Real *, peclet::core::MemSpace > &  force,
const Kokkos::View< Real *, peclet::core::MemSpace > &  forceW = {},
const Sdf &  sdf = Sdf{} 
)

Gradient of Σ_i e_i(V_i) for a caller-supplied e'(V_i) per cell (dEdV, N). Adds into force / forceW. (The energy value itself is the caller's Σ e_i — it needs no geometry.)

◆ wallEnergyForce()

template<class Real , class Policy = Voronoi, class Sdf = NoSdf>
Real peclet::voro::energy::wallEnergyForce ( const TessellationView< Real > &  view,
const Kokkos::View< int *, peclet::core::MemSpace > &  types,
const Kokkos::View< Real *, peclet::core::MemSpace > &  sigmaS,
const Sdf &  sdf,
const Kokkos::View< Real *, peclet::core::MemSpace > &  pos,
const Kokkos::View< Real *, peclet::core::MemSpace > &  weight,
Real  L,
const Kokkos::View< Real *, peclet::core::MemSpace > &  force,
const Kokkos::View< Real *, peclet::core::MemSpace > &  forceW = {} 
)

Solid–fluid (wetting) energy E = Σ_c σ_s(t_c) Σ_{wall facets f of c} |A_f| over the published view, with a PER-SPECIES wall tension σ_s(t) (sigmaS, nTypes; types per cell). A uniform σ_s on a closed wall is a constant (the wall is tiled by the wall facets), so only the difference between species does work — Young's angle emerges from σ_sg − σ_sl (plan D2). Needs the facet-edge area-Jacobian CSR (build with withAreaGrad). Adds dE/dx (and dE/dw under a weighted policy) into force / forceW. Returns E.