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
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:
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:
where
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:
The MassDensity callable passed to Calculate provides the local density at each node, enabling density-weighted force computation.
Parameters
| Parameter | Type | Description |
|---|---|---|
Model | SolidSolidInteractionModel | Standard or Wang |
strength | double | Interaction strength (Standard model) [Pa] |
strength_wang | double | Interaction strength (Wang model) [Pa] |
order | int | Polynomial order of overlap (Standard model) |
cutoff | int | Cutoff distance in grid nodes |
elastic | vector<vector<double>> | Per-phase elastic moduli |
PhaseAggregateStates | vector<AggregateStates> | Identifies which phases are solid |
Applicability check
The class applies interactions only to grains that satisfy all of:
grain.Exist == truegrain.State == AggregateStates::Solidgrain.Volume > epsilon
Grains that are too small or not in solid state are skipped.
Typical usage
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
strengthvalues 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,
InteractionSolidSolidis not needed and should not be instantiated.