Skip to content

Interface Properties

The InterfaceProperties module is a cornerstone of the OpenPhase library, responsible for managing the physical properties that govern the behavior of interfaces between different phases and grains. These properties—specifically interface energy (or stiffness) and interface mobility—are crucial as they dictate the driving forces for microstructure evolution, interface morphology, and the kinetics of phase transformations.

The module provides a flexible framework for defining these properties, supporting both isotropic and complex anisotropic models for various crystal symmetries (e.g., cubic, hexagonal). The properties are defined on a pairwise basis for every interacting pair of phases (α,β).

Key Classes and Concepts

  • InterfaceEnergyModel: A class that implements various mathematical models to calculate the interface energy σαβ as a function of the interface normal orientation. It distinguishes between:
    • Energy Models: The calculated value is the direct interface energy σ(n). This is used in the driving force term for phase evolution.
    • Stiffness Models: The calculated value represents the interface stiffness, which is a combination of the energy and its second derivatives (σ(n)+σ(n)). This is used in the curvature term of the phase-field equation.
  • InterfaceMobilityModel: A class that implements models for the interface mobility μαβ, which can also depend on the interface normal orientation and temperature.
  • InterfaceProperties: The main manager class. It holds an InterfaceEnergyModel and an InterfaceMobilityModel for each phase pair (α,β). During a simulation step, its primary role is to populate a grid with the correct energy and mobility values at every point within an interface, which are then used by the solver.

Interface Energy Models

The interface energy, σαβ(n), determines the energy cost per unit area of an interface with a normal vector n. OpenPhase implements several models:

  • Isotropic (ISO): The energy is constant regardless of orientation.

(1)σ(n)=σ0
  • Cubic (CUBIC, CUBICFULL): For materials with cubic crystal symmetry.
    • Stiffness Model (CUBIC):

(2)σ(n)=σ0(1.0+ϵE1(1.52.5(nx4+ny4+nz4)))
  • Energy Model (CUBICFULL):

(3)σ(n)=σ0(1.0+ϵE1(nx4+ny4+nz4))
  • Hexagonal (HEXBOETTGER, HEXSUN, HEXYANG): For materials with hexagonal symmetry, based on different formulations. For example, the Boettger model is:

(4)σ(n)=σ0(1.0ϵE1(nx6ny615nx4ny2+15ny4nx2+5nz45nz2+nz6))
  • Faceted (FACETED, FACETEDFULL): For materials with strong faceting tendencies. The model finds the facet plane closest to the interface normal and calculates the energy based on the inclination angle θ.
    • Energy Model (FACETEDFULL):

(5)σ(θ)=σFsin2θ+ϵEF2cos2θ

where σF and ϵEF are the energy and anisotropy parameter of the closest facet family.

Interface Mobility Models

The interface mobility, μαβ(n,T), scales the rate of interface migration in response to a driving force. It can be anisotropic and temperature-dependent.

The temperature dependence follows an Arrhenius law, where Qm is the activation energy:

(6)μ(n,T)=μaniso(n)exp(QmRT)

The anisotropic part, μaniso(n), is described by models analogous to those for interface energy:

  • Isotropic (ISO):

(7)μaniso(n)=μ0
  • Cubic (CUBIC):

(8)μaniso(n)=μ0(1.0ϵM1(1.52.5(nx4+ny4+nz4)))
  • Hexagonal (HEXBOETTGER, HEXSUN, HEXYANG): These models use the same functional forms as their energy counterparts but with mobility parameters (μ0, ϵM1, etc.).

  • Faceted (FACETED):

(9)μaniso(n)=μF(ϵMF+(1.0ϵMF)|tan(θ)|tanh(|tan(θ)|1))

where θ is the inclination angle to the nearest facet, and μF and ϵMF are the facet mobility and its anisotropy parameter.

Usage

Input

Interface properties are defined in the InterfaceProperties block of the input file (.opi or .json). Parameters are specified for each pair of phases, identified by _alpha_beta. For example, _0_0 refers to the interface between grains of Phase 0 (a grain boundary), while _0_1 refers to the interface between Phase 0 and Phase 1.

Here is an example .opi configuration for a two-phase system:

text
@InterfaceProperties
// --- Grain boundaries within Phase 0 (isotropic) ---
$EnergyModel_0_0 Interface energy model : ISO
$Sigma_0_0 Interface energy : 0.5 // [J/m^2]

$MobilityModel_0_0 Interface mobility model : ISO
$Mu_0_0 Interface mobility : 1.0e-8 // [m^4/(J*s)]
$Q_0_0 Activation energy for mobility : 150000 // [J/mol]

// --- Interface between Phase 0 and Phase 1 (anisotropic) ---
$EnergyModel_0_1 Interface energy model : CUBIC
$Sigma_0_1 Interface energy : 0.8
$EpsilonE_0_1 Energy anisotropy parameter : 0.1

$MobilityModel_0_1 Interface mobility model : CUBIC
$Mu_0_1 Interface mobility : 5.0e-9
$EpsilonM_0_1 Mobility anisotropy parameter : -0.2
$Q_0_1 Activation energy for mobility : 200000

Output

The InterfaceProperties module can generate VTK files (.vts) for visualization. If enabled, it will output fields representing the spatially-resolved, averaged interface energy (or stiffness) and mobility at all points within interfaces. This is useful for debugging and analyzing the effect of anisotropy on the simulation.

Example

The following example demonstrates how to set up and use the InterfaceProperties class in a typical simulation loop. It builds on the grain growth example by introducing anisotropy.

cpp
#include "Settings.h"
#include "RunTimeControl.h"
#include "DoubleObstacle.h"
#include "PhaseField.h"
#include "Initializations.h"
#include "BoundaryConditions.h"
#include "InterfaceProperties.h"
#include "Temperature.h"

using namespace std;
using namespace openphase;

int main(int argc, char *argv[])
{
    // --- Standard Initialization ---
    std::string InputFile = (argc > 1) ? argv[1] : "ProjectInput.opi";
    
    Settings            OPSettings;
    OPSettings.ReadInput(InputFile);

    RunTimeControl      RTC(OPSettings, InputFile);
    PhaseField          Phi(OPSettings, InputFile);
    DoubleObstacle      DO(OPSettings, InputFile);
    InterfaceProperties IP(OPSettings, InputFile);
    BoundaryConditions  BC(OPSettings, InputFile);
    Temperature         Tx(OPSettings, InputFile);

    // --- Initial Microstructure ---
    // For anisotropy, grains need initial orientations
    int number_of_grains = 100;
    size_t GrainsPhase = 0;
    Initializations::VoronoiTessellation(Phi, BC, number_of_grains, GrainsPhase);
    Initializations::RandomOrientations(Phi);

    // --- Main Time Loop ---
    std::cout << "Entering the Time Loop!!!" << std::endl;
    for(RTC.tStep = RTC.tStart; RTC.tStep <= RTC.nSteps; RTC.IncrementTimeStep())
    {
        // Calculate and set interface properties for the current timestep.
        // This function iterates over all interface points, determines the local
        // interface normal, calculates the orientation-dependent energy and mobility,
        // and stores the values in an internal grid.
        // The version with Temperature also applies the Arrhenius law.
        IP.Set(Phi, Tx, BC);

        // The solver uses the pre-calculated properties from IP to compute phase-field increments.
        DO.CalculatePhaseFieldIncrements(Phi, IP);
        
        Phi.NormalizeIncrements(BC, RTC.dt);
        Phi.MergeIncrements(BC, RTC.dt);

        // --- Output ---
        if (RTC.WriteVTK())
        {
            Phi.WriteVTK(OPSettings, RTC.tStep);
            IP.WriteVTK(OPSettings, RTC.tStep); // Output energy and mobility fields
        }
        // ... other outputs
    }
    return EXIT_SUCCESS;
}

See also: examples

  • NormalGG (OpenPhase-main/examples/NormalGG/) — isotropic interface energy / mobility (ISO).
  • FacetedGGFACETED / FACETEDFULL anisotropy.
  • SolidificationFeC, SolidificationNiAl — anisotropic interfaces between two solidification phases.

Dependencies

  • PhaseField — fields and increments the energy / mobility values are evaluated against.
  • DoubleObstacle — primary consumer; takes InterfaceProperties& in its CalculatePhaseFieldIncrements calls.
  • BoundaryConditions — applied during IP.Set(Phi, BC).
  • Temperature — supplies T(x) for the Arrhenius mobility (IP.Set(Phi, Tx, BC)).
  • Settings — phase list and grid metadata.
  • InterfaceRegularization — optional stabiliser when interface profiles distort under strong driving forces.

Released under the GNU GPLv3 License.