Skip to content

Driving Force

DrivingForce is the shared accumulator for every chemical, mechanical, magnetic, user-defined, or thermodynamic contribution to the phase-field driving force Δgαβ. Individual physics modules (diffusion, grand potential, elasticity, nucleation, user-defined forces) write into it during the time step; 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, default Yes): smooth the driving force over the diffuse interface profile before PhaseField reads it.
  • Unification ($bUnify, default No): 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 where ϕα is below this value.
  • Limiting ($Limiting / $dGcut, default Yes): cap the magnitude of Δgαβ to $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, default PHASEFIELDS): which spatial weighting is used when averaging contributions across the interface.

Usage

Input

Defined in the @DrivingForce block.

text
@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:

cpp
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

Released under the GNU GPLv3 License.