Skip to content

Interface Diffusion

InterfaceDiffusion adds a solute flux confined to the diffuse interface region, modelling the fast diffusion that occurs along grain- or phase-boundaries in real microstructures. It runs on top of the shared Composition storage and complements the bulk solver EquilibriumPartitionDiffusionBinary.

Key Classes and Concepts

  • InterfaceDiffusion : public OPObject: interface-only additional flux; contributes into the same concentration storage the bulk solver updates.

Model

The module adds a tangential flux active only where the interface indicator is non-trivial. Its magnitude is scaled by $dSR and the per-component $dIDC_<n> coefficient. Optional averaging over a stencil of size $Range smooths the flux; $Threshold is the phase-field threshold below which the flux is switched off.

Usage

Input

Defined in the @InterfaceDiffusion block.

text
@InterfaceDiffusion

$dSR         Interface-diffusion scaling factor             : 1.0
$dIDC_0      Interface diffusion coefficient, component 0   : 1.0e-11
TokenVariableTypeDefault
$dSRscalingdouble
$dIDC_<n>per-component coefficientdouble

When combined with the bulk solver, the module re-uses the averaging and threshold controls defined on DrivingForce and InterfaceRegularization.

Output

The contribution is merged into Composition; VTK output is through Composition::WriteVTK.

Example

cpp
#include "InterfaceDiffusion.h"
#include "EquilibriumPartitionDiffusionBinary.h"

EquilibriumPartitionDiffusionBinary DF(OPSettings, InputFile);
InterfaceDiffusion                  ID(OPSettings, InputFile);

for(RTC.tStep = RTC.tStart; RTC.tStep <= RTC.nSteps; RTC.IncrementTimeStep())
{
    DF.Solve(Phi, Cx, Tx, BC, RTC.dt);
    ID.Solve(Phi, Cx, BC, RTC.dt);
}

Dependencies

Released under the GNU GPLv3 License.