An hcp single crystal: slip activity by orientation#

Note

Read first: Simple RVE-type simulation.

An hcp crystal deforms by slip on families of very different strengths. This tutorial pulls a single crystal of the \(\alpha\) phase of Ti-6Al-4V along \(z\) in three orientations, each of which puts one family in the most favorable position, and shows which family slips from the slip-rate output. The material is that of Multiaxial control at a constant strain rate, with isotropic hardening:

Table 21 Single-crystal elastic constants (\(c/a = 1.587\)).#

\(c_{11}\) [MPa]

\(c_{12}\) [MPa]

\(c_{13}\) [MPa]

\(c_{33}\) [MPa]

\(c_{44}\) [MPa]

\(169.66 \times 10^3\)

\(88.66 \times 10^3\)

\(61.66 \times 10^3\)

\(196.66 \times 10^3\)

\(42.50 \times 10^3\)

Table 22 Plasticity parameters (saturation_isotropic hardening; one value per family for \(m\), \(\dot{\gamma}_0\) and \(\tau_0\): basal, prismatic, pyramidal \(\langle c+a \rangle\)).#

\(m\) [-]

\(\dot{\gamma}_0\) [1/s]

\(\tau_0\) [MPa]

\(h_0\) [MPa]

\(\tau_s\) [MPa]

\(n\) [-]

0.01, 0.01, 0.01

1.0, 1.0, 1.0

390.0, 468.0, 663.0

190.0

700.0

1.0

The mesh is the unit cube meshed as two cells (256 10-node tetrahedra), which are given the same orientation, so that the material is one crystal. The orientations are read from simulation.ori (read_ori_from_file), one file per orientation, as Bunge Euler angles \((\varphi_1, \Phi, \varphi_2)\) of the passive convention (sample to crystal frame, see File and Directory Formats); the loading axis \(z\) then has, in the crystal frame, the direction \((\sin\varphi_2 \sin\Phi, \cos\varphi_2 \sin\Phi, \cos\Phi)\):

Table 23 The three orientations (the crystal frame: \(x_c\) along \([2\bar{1}\bar{1}0]\), \(z_c\) along \(c\), see Slip families).#

File

\((\varphi_1, \Phi, \varphi_2)\) [°]

Loading axis in the crystal frame

Favored family (its Schmid factor)

simulation_basal.ori

(0, 45, 90)

45° from \(c\), toward \(a_1\)

basal (0.5)

simulation_prismatic.ori

(0, 90, 45)

in the basal plane, 45° from \(a_1\)

prismatic (0.5)

simulation_pyramidal.ori

(0, 0, 0)

along \(c\)

pyramidal \(\langle c+a \rangle\) (0.41; basal and prismatic: 0)

The crystal is pulled with the uniaxial_minimal conditions at 0.001 /s to 2 % strain, in 8 steps of 0.25 %, so that the slip rates are written every 0.25 %.

Input files#

$ElsetOrientations
2 euler-bunge:passive
1 0.0 45.0 90.0
2 0.0 45.0 90.0
$EndElsetOrientations
## FEPX tutorial "hcp single crystal": a single crystal of alpha-phase Ti-6Al-4V pulled
## along z, in three orientations (simulation_basal.ori, simulation_prismatic.ori,
## simulation_pyramidal.ori) that favor basal, prismatic and pyramidal <c+a> slip.

## Material
number_of_phases 1
phase 1
  crystal_type HCP
  model crystal_plasticity
  c11 1.6966e5
  c12 0.8866e5
  c13 0.6166e5
  c33 1.9666e5
  c44 0.4250e5
  c_over_a 1.587
  m 0.01 0.01 0.01
  gammadot_0 1.0 1.0 1.0
  tau_0 390.0 468.0 663.0
  hardening saturation_isotropic
  h_0 190.0
  tau_s 700.0
  n 1.0

## Input files
read_ori_from_file

## Loading
boundary_conditions uniaxial_minimal
number_of_steps 8
#                  step 1  step 2  step 3  step 4  step 5  step 6  step 7  step 8
strain_rate   33   1.0e-3  1.0e-3  1.0e-3  1.0e-3  1.0e-3  1.0e-3  1.0e-3  1.0e-3
target_strain 33   0.0025  0.0050  0.0075  0.0100  0.0125  0.0150  0.0175  0.0200
dstrain            2.5e-4  2.5e-4  2.5e-4  2.5e-4  2.5e-4  2.5e-4  2.5e-4  2.5e-4

## Output
print coo
print stress
print strain
print sliprate
print slip
print forces

Execution#

In three directories, one per orientation file; the mesh is not partitioned, and is small: one process suffices.

$ mpirun -np 1 fepx

For the basal orientation:

========================    F   E   P   X    ===========================
Info   : A finite element software package for polycrystal plasticity.
Info   : Version 3.0.0-dev (git 755da754, 11-06-2026)
Info   : Built with: GCC 15.2.0|Open MPI 5.0.10|HDF5 1.14.6
Info   : Running on 1 rank.
Info   : <https://fepx.info>
Info   : Copyright (C) 1996-2026, and MIT licensed, by the FEPX authors.
Info   : ---------------------------------------------------------------
Info   : Loading simulation...
Info   :   [i] Parsing file `simulation.cfg'...
Info   :   [i] Parsed file `simulation.cfg'.
Info   :   [i] Parsing file `simulation.msh'...
Info   :   [i] Parsed file `simulation.msh'.
Info   :   [i] Parsing file `simulation.ori'...
Info   :   - $ElsetOrientations from `simulation.ori' replaces the one
Info   :     from `simulation.msh'.
Info   :   [i] Parsed file `simulation.ori'.
Info   :   - Material parameters:
Info   :     > Number of phases: 1
Info   :     > Phase 1: hcp, crystal_plasticity
Info   :       . c11:                       1.6966E+05 MPa
Info   :       . c12:                       8.8660E+04 MPa
Info   :       . c13:                       6.1660E+04 MPa
Info   :       . c33:                       1.9666E+05 MPa
Info   :       . c44:                       4.2500E+04 MPa
Info   :       . c_over_a:                  1.5870E+00
Info   :       . m:                         1.0000E-02 1.0000E-02
Info   :                                    1.0000E-02
Info   :       . gammadot_0:                1.0000E+00 1.0000E+00
Info   :                                    1.0000E+00 1/s
Info   :       . hardening:                 saturation_isotropic
Info   :       . tau_0:                     3.9000E+02 4.6800E+02
Info   :                                    6.6300E+02 MPa
Info   :       . h_0:                       1.9000E+02 MPa
Info   :       . tau_s:                     7.0000E+02 MPa
Info   :       . n:                         1.0000E+00
Info   :       . saturation_evolution:      off (def.)
Info   :       . cyclic_hardening:          off (def.)
Info   :       . precipitate_strengthening: off (def.)
Info   :   - Loading: boundary_conditions uniaxial_minimal, 8 steps
Info   :     > Step 1: t = 0.0000E+00 -> 2.5000E+00 s, 10 increments,
Info   :       strain 33: 0.0000E+00 -> 2.5000E-03 (rate 1.0000E-03 1/s)
Info   :     > Step 2: t = 2.5000E+00 -> 5.0000E+00 s, 10 increments,
Info   :       strain 33: 2.5000E-03 -> 5.0000E-03 (rate 1.0000E-03 1/s)
Info   :     > Step 3: t = 5.0000E+00 -> 7.5000E+00 s, 10 increments,
Info   :       strain 33: 5.0000E-03 -> 7.5000E-03 (rate 1.0000E-03 1/s)
Info   :     > Step 4: t = 7.5000E+00 -> 1.0000E+01 s, 10 increments,
Info   :       strain 33: 7.5000E-03 -> 1.0000E-02 (rate 1.0000E-03 1/s)
Info   :     > Step 5: t = 1.0000E+01 -> 1.2500E+01 s, 10 increments,
Info   :       strain 33: 1.0000E-02 -> 1.2500E-02 (rate 1.0000E-03 1/s)
Info   :     > Step 6: t = 1.2500E+01 -> 1.5000E+01 s, 10 increments,
Info   :       strain 33: 1.2500E-02 -> 1.5000E-02 (rate 1.0000E-03 1/s)
Info   :     > Step 7: t = 1.5000E+01 -> 1.7500E+01 s, 10 increments,
Info   :       strain 33: 1.5000E-02 -> 1.7500E-02 (rate 1.0000E-03 1/s)
Info   :     > Step 8: t = 1.7500E+01 -> 2.0000E+01 s, 10 increments,
Info   :       strain 33: 1.7500E-02 -> 2.0000E-02 (rate 1.0000E-03 1/s)
Info   :   - Options other than the defaults:
Info   :     > read_ori_from_file
Info   :   - Output: coo stress strain sliprate slip forces (format
Info   :     ascii)
Info   :   - Mesh parameters:
Info   :     > Node number: 320
Info   :     > Elt  number: 145 (10-node tetrahedra)
Info   :     > Elsets: 2; partitions: 0
Info   :   - Partitioning: 1 rank
Info   :     > Elements per rank: 145 to 145
Info   :     > Ghost nodes per rank: 0 to 0 (0 in total)
Info   :     > Neighbors per rank: 0 to 0
Info   :   [o] Writing results to `simulation.sim'...
Info   : Initializing simulation...
Info   :   - Elastic step of 3.6565E-02 s (step 1)
Info   :     > Iteration 1 (SA): R = 1.3252E+00 (207 CG iterations)
Info   :     > Iteration 2 (SA): R = 4.8547E-05 (205 CG iterations)
Info   :     > Converged in 2 iterations (0.114 s)
Info   : Running step 1...
Info   :   - Increment 1: t = 2.5000E-01 s, dt = 2.1344E-01 s
Info   :     > Iteration 1 (SA): R = 1.2084E-04 (209 CG iterations)
Info   :     > Iteration 2 (NR): R = 5.6912E-08 (210 CG iterations)
Info   :     > Converged in 2 iterations (0.132 s)
  [...]
Info   : Final step terminated. Simulation completed successfully.
Info   :   [o] Wrote results to `simulation.sim'.
Info   :   - Increments: 80
Info   :   - Global iterations: 203 (114 NR)
Info   :   - CG iterations: 46619
Info   :   - Warnings issued: 0
Info   :   - Wall time per phase:
Info   :     > Input and setup:                      0.008 s
Info   :     > Initialization:                       0.115 s
Info   :     > Increments:                          15.772 s
Info   :       . Element and material work:         13.364 s
Info   :       . CG:                                 2.340 s
Info   :       . Other:                              0.068 s
Info   :     > Output:                               0.213 s
Info   : Elapsed time:                              16.107 s
========================================================================
simulation.sim
|-- inputs
|   |-- simulation.cfg
|   |-- simulation.msh
|   `-- simulation.ori
`-- results
    |-- elts
    |   |-- slip
    |   |   |-- slip.step0
    |   |   |-- slip.step1
    |   |   |-- ...
    |   |   `-- slip.step8
    |   |-- sliprate
    |   |   |-- sliprate.step0
    |   |   |-- sliprate.step1
    |   |   |-- ...
    |   |   `-- sliprate.step8
    |   |-- strain
    |   |   |-- strain.step0
    |   |   |-- strain.step1
    |   |   |-- ...
    |   |   `-- strain.step8
    |   `-- stress
    |       |-- stress.step0
    |       |-- stress.step1
    |       |-- ...
    |       `-- stress.step8
    |-- forces
    |   |-- x0
    |   |-- x1
    |   |-- y0
    |   |-- y1
    |   |-- z0
    |   `-- z1
    |-- mesh
    |   |-- strain
    |   |   |-- strain.step0
    |   |   |-- strain.step1
    |   |   |-- ...
    |   |   `-- strain.step8
    |   `-- stress
    |       |-- stress.step0
    |       |-- stress.step1
    |       |-- ...
    |       `-- stress.step8
    `-- nodes
        `-- coo
            |-- coo.step0
            |-- coo.step1
            |-- ...
            `-- coo.step8

Simulation results#

../../_images/curves1.png

Fig. 36 (left) Volume-averaged stress against strain of the three orientations: the crystal yields near \(\tau_0 / S \, (\dot{\varepsilon}/\dot{\gamma}_0)^m\), with \(\tau_0\) and \(S\) the strength and Schmid factor of the favored family (about 725, 870 and 1520 MPa); (right) the slip rate of that family (the sum of the magnitudes of its systems’ slip rates, averaged over the elements) against strain, at the ends of the steps. In each orientation the other two families do not slip.#

The slip rates are those of results/elts/sliprate, one column per system, in the order of Slip families: systems 1 to 3 are basal, 4 to 6 prismatic, 7 to 18 pyramidal \(\langle c+a \rangle\). The commands, in the directory of the pyramidal orientation (beside the other two):

$ neper -S simulation.sim -resmesh stress,strain
$ python3 tutorial_pages.py plot hcp . ../hcp_basal/simulation.sim \
    ../hcp_prismatic/simulation.sim simulation.sim