Skip to content

Elastic Properties

ElasticProperties is the data side of the mechanics subsystem. It holds per-phase elastic constants, transformation stretches, global mechanical boundary conditions applied to the domain, and optional chemo- and thermo-mechanical coupling parameters. The continuum mechanics that consumes this state — St. Venant–Kirchhoff hyperelasticity, the Piola-Kirchhoff stress, and the spectral mechanical-equilibrium solver — is covered in the Mechanics module. This page documents what ElasticProperties reads and stores.

Key Classes and Concepts

  • ElasticProperties : public OPObject: the storage + reader.
  • ElasticityModels: enum selecting the effective-stiffness homogenisation model across diffuse interfaces. Accepted $EModel values (default KHACHATURYAN): KHACHATURYAN, STEINBACH, VOIGT, REUSS, RANK1, RANK1NL.
  • ElasticConstantMode: either ELASTICMODULI (default) — specify elastic moduli; the stiffness tensor is assembled from them — or TENSOR, which lets you provide the full 6×6 Voigt stiffness matrix directly.

Mechanical boundary conditions

Six axes are exposed, matching the Voigt index order used elsewhere in the library (normal + shear):

TokenVoigt axis
$BCXxx
$BCYyy
$BCZzz
$BCYZyz
$BCXZxz
$BCXYxy

Each axis accepts one of four kinds:

ValueAccompanying value
FREEBOUNDARIESnone
APPLIEDSTRAIN$BCValueX$BCValueXY (matching axis)
APPLIEDSTRAINRATE$BCValueX$BCValueXY (matching axis)
APPLIEDSTRESS$BCValueX$BCValueXY (matching axis)

Additionally $Restrict accepts ASPECTRATIO (aspect ratio kept constant during adjustment) or SHEAR (shear deformation prevented). The rationale is the Fourier-periodic-boundary limitation described under External boundary conditions in Mechanics.

Elastic moduli

For each phase α, supply any two of the moduli below and the library derives λ and G internally:

TokenModulus
$K_<alpha>Bulk modulus K
$E_<alpha>Young's modulus E
$L_<alpha>First Lamé parameter λ
$G_<alpha>Shear modulus G
$Nu_<alpha>Poisson's ratio ν
$M_<alpha>P-wave modulus M

With $ElasticConstantMode = TENSOR, supply either the full matrix $C_<alpha> (6×6) or its individual components $C<ii><jj>_<alpha> with ii,jj{1..6}. The lower triangle is mirrored from the upper.

Transformation stretches

Each phase carries a 3×3 transformation stretch tensor, required:

text
$U_0  Transformation stretch for phase 0  : ((1.0 0 0)(0 1.0 0)(0 0 1.0))

Couplings

  • External forces$ConsiderExternalForces (default false). When on, an external force-density field is allocated and applied in the equilibrium equation (see Mechanics §Considering internal forces).
  • Chemo-mechanical$ChemoMechanicalCoupling (default false). Requires $Cref_<alpha>_<comp> per phase-component pair (reference composition for eigenstrain calculation).
  • Thermo-mechanical$ThermoMechanicalCoupling (default false). Requires $Tref_<alpha> reference temperature per phase. Supply either a scalar $Gamma_<alpha> (applied uniformly to every entry of the 6×6 Gamma matrix) or the per-component upper triangle $Gamma<ii><jj>_<alpha>. A 3×3 thermal expansion matrix $Alpha<ii><jj>_<alpha> (with ii,jj{1..3}) may also be supplied.

Usage

Input

text
@ElasticProperties

$EModel               Homogenisation model              : KHACHATURYAN
$ElasticConstantMode  Elastic-constant specification    : ELASTICMODULI

$BCX           X-axis stress/strain kind                : FREEBOUNDARIES
$BCY           Y-axis stress/strain kind                : APPLIEDSTRAIN
$BCValueY      Y-axis applied strain                    : 0.01
$BCZ           Z-axis stress/strain kind                : FREEBOUNDARIES
$BCYZ          yz shear kind                            : FREEBOUNDARIES
$BCXZ          xz shear kind                            : FREEBOUNDARIES
$BCXY          xy shear kind                            : FREEBOUNDARIES

$Restrict      Geometric restriction (optional)         : ASPECTRATIO

# Per-phase elastic moduli (provide any two) {#per-phase-elastic-moduli-provide-any-two}
$E_0           Young's modulus, phase 0                 : 210e9
$Nu_0          Poisson's ratio, phase 0                 : 0.30
$E_1           Young's modulus, phase 1                 : 120e9
$Nu_1          Poisson's ratio, phase 1                 : 0.34

# Transformation stretches (required) {#transformation-stretches-required}
$U_0           Transformation stretch, phase 0          : ((1.0 0 0)(0 1.0 0)(0 0 1.0))
$U_1           Transformation stretch, phase 1          : ((1.02 0 0)(0 0.99 0)(0 0 0.99))

$ConsiderExternalForces       Apply external force density    : No
$ChemoMechanicalCoupling      Enable eigenstrain from composition : No
$ThermoMechanicalCoupling     Enable thermal eigenstrain      : No

Output

ElasticProperties is written via its WriteVTK method — stress and strain fields, typically through the Voigt-component name convention (xx, yy, zz, yz, xz, xy). Restart is supported through the standard Read / Write raw I/O.

Example

cpp
#include "ElasticProperties.h"
#include "ElasticitySolverSpectral.h"

ElasticProperties        EP(OPSettings, InputFile);
ElasticitySolverSpectral ES(OPSettings, InputFile);

for(RTC.tStep = RTC.tStart; RTC.tStep <= RTC.nSteps; RTC.IncrementTimeStep())
{
    // ... phase-field update ...

    ES.Solve(EP, BC, RTC.dt);

    if (RTC.WriteVTK())
    {
        EP.WriteVTK(OPSettings, RTC.tStep);
    }
}

Dependencies

Released under the GNU GPLv3 License.