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:
\(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\) |
\(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)\):
File |
\((\varphi_1, \Phi, \varphi_2)\) [°] |
Loading axis in the crystal frame |
Favored family (its Schmid factor) |
|---|---|---|---|
(0, 45, 90) |
45° from \(c\), toward \(a_1\) |
basal (0.5) |
|
(0, 90, 45) |
in the basal plane, 45° from \(a_1\) |
prismatic (0.5) |
|
(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#
one of the three orientation files above, saved as
simulation.ori, e.g.:
$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#
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