Driving Force
DrivingForce is the shared accumulator for every chemical, mechanical, magnetic, user-defined, or thermodynamic contribution to the phase-field driving force PhaseField reads it when computing phase-field increments. The module optionally averages the accumulated driving force over the diffuse interface region, caps it to a physically meaningful maximum, and unifies the per-pair contributions.
Key Classes and Concepts
DrivingForce : public OPObject: the accumulator. It stores the per-pair driving-force field, the weighting mode used to average over the interface, and the per-pair cap values used when limiting is enabled.
The final driving force fed back into the phase-field equation is the sum of all contributions written into this object during a time step.
Controls
- Interface averaging (
$Average, defaultYes): smooth the driving force over the diffuse interface profile beforePhaseFieldreads it. - Unification (
$bUnify, defaultNo): unify contributions from different physics channels into a single pair value. - Stencil range (
$Range): how far into the interface the averaging kernel reaches. - Phase-field threshold (
$Threshold): ignore points whereis below this value. - Limiting (
$Limiting/$dGcut, defaultYes): cap the magnitude ofto $Limit_<a>_<b>(alias$CutOff_<a>_<b>, default 0.95). The cap is expressed as a fraction of the physically maximum driving force that keeps the interface profile stable. - Weights mode (
$WeightsMode, defaultPHASEFIELDS): which spatial weighting is used when averaging contributions across the interface.
Usage
Input
Defined in the @DrivingForce block.
@DrivingForce
$Average Average the driving force over the interface : Yes
$bUnify Unify multi-physics contributions : No
$Range Averaging stencil range (grid cells) : 2
$Threshold Phase-field threshold : 0.05
$Limiting Apply per-pair magnitude limit : Yes
$WeightsMode Spatial weighting mode : PHASEFIELDS
$Limit_0_1 Cap for pair (0,1) (fraction of stable max) : 0.95
$Limit_1_0 Cap for pair (1,0) : 0.95$Limit_<a>_<b> is accepted under the alias $CutOff_<a>_<b>.
Output
DrivingForce does not write its own files; its state is observable indirectly through the phase-field increment written by PhaseField.
Example
DrivingForce is rarely constructed alone — other modules take it as an argument and write into it:
DrivingForce dG(OPSettings, InputFile);
for(RTC.tStep = RTC.tStart; RTC.tStep <= RTC.nSteps; RTC.IncrementTimeStep())
{
dG.Clear();
// physics modules accumulate into dG:
// CompositionDiffusion.GetDrivingForce(..., dG);
// Elasticity.GetDrivingForce(..., dG);
// UserDrivingForce.Apply(..., dG);
DO.CalculatePhaseFieldIncrements(Phi, IP, dG);
Phi.NormalizeIncrements(BC, RTC.dt);
Phi.MergeIncrements(BC, RTC.dt);
}Dependencies
- PhaseField — consumes the accumulated force.
- InterfaceProperties — supplies the per-pair scaling used when limiting.
- Settings, BoundaryConditions.