Skip to content

Solid–Solid Interaction

Overview

The InteractionSolidSolid class models short-range repulsive forces between solid particles (grains) immersed in a fluid. Without such forces, solid particles can overlap during simulation, causing numerical artifacts in sintering and sedimentation simulations.

Defined in openphase/include/FluidDynamics/InteractionSolidSolid.h.


Class declaration

cpp
class InteractionSolidSolid : public OPObject
{
public:
    InteractionSolidSolid(Settings& locSettings,
                          std::string InputFileName = DefaultInputFileName);

    void Initialize(Settings& locSettings,
                    std::string ObjectNameSuffix = "") override;

    void Calculate(PhaseField& Phase,
                   const BoundaryConditions& BC,
                   const std::function<double(int,int,int)>& MassDensity,
                   const double dt) const;
};

The Calculate method iterates over all solid grain pairs and applies a repulsive force contribution to the grain velocity via PhaseField grain data.


Interaction models

Two models are available, selected by the Model parameter:

cpp
enum class SolidSolidInteractionModel
{
    Standard,  ///< ICAMS-developed model
    Wang,      ///< Wang (2006) sintering model
};

Standard model

The Standard model computes a repulsive force between overlapping solid interfaces based on the local phase-field gradient. The force is proportional to the overlap (measured by the phase-field values) and the user-defined interaction strength:

(1)Fij(x)=strengthϕi(x)ϕj(x)ϕi(x)

where ϕi, ϕj are the phase-field order parameters of grains i and j.

The order parameter controls the polynomial power of the overlap term (default 2). The cutoff parameter limits the interaction to a finite interface layer.


Wang model

The Wang model is based on the formulation from:

M. Wang (2006), Computer modeling and simulation of solid-state sintering: A phase field approach. Acta Materialia.

It computes an elastic contact force proportional to the grain-pair overlap, weighted by the local mass density:

(2)Fijstrength_wangϕiϕj(ϕi+ϕj)

The MassDensity callable passed to Calculate provides the local density at each node, enabling density-weighted force computation.


Parameters

ParameterTypeDescription
ModelSolidSolidInteractionModelStandard or Wang
strengthdoubleInteraction strength (Standard model) [Pa]
strength_wangdoubleInteraction strength (Wang model) [Pa]
orderintPolynomial order of overlap (Standard model)
cutoffintCutoff distance in grid nodes
elasticvector<vector<double>>Per-phase elastic moduli
PhaseAggregateStatesvector<AggregateStates>Identifies which phases are solid

Applicability check

The class applies interactions only to grains that satisfy all of:

  • grain.Exist == true
  • grain.State == AggregateStates::Solid
  • grain.Volume > epsilon

Grains that are too small or not in solid state are skipped.


Typical usage

cpp
InteractionSolidSolid ISS(OPSettings, InputFile);

// Provide a density function (e.g., from FlowSolverLBM)
auto massDensity = [&](int i, int j, int k) {
    return FL.Density(Phase, i, j, k);
};

// each timestep, after FlowSolverLBM::Solve():
ISS.Calculate(Phase, BC, massDensity, dt);

Numerical considerations

  • The interaction strength must be tuned relative to the fluid forces and viscosity to prevent unphysical overlap without over-constraining the dynamics.
  • Very high strength values combined with large time steps can cause instability.
  • The Wang model is better suited for sintering simulations where grain contact mechanics follow an elastic-contact law.
  • For fluid-only simulations without solid particle collision, InteractionSolidSolid is not needed and should not be instantiated.

Released under the GNU GPLv3 License.