Porting FEPX v2 Inputs#
FEPX v3 does not read FEPX v2 inputs unchanged, and it has no compatibility mode: an obsolete keyword or value is a fatal error (an unknown keyword, or an invalid value), so an old file fails loudly instead of being silently misread. This page lists what changes and how to port an FEPX v2 simulation.
Mesh file (simulation.msh)#
FEPX v3 reads only Neper msh files of version 2.4 (the $MeshVersion section). A missing
$MeshVersion or another version is a fatal error. Older files differ in ways that FEPX v3
does not try to detect: their orientation labels passive/active are swapped (versions
up to 2.2), versions before 2.2.1 have wrong 3D element ids in $Fasets, and versions before
2.4 write the nodes of each $Fasets face in reverse order.
To port a mesh, regenerate it with a current Neper, or re-save it:
$ neper -M -loadmesh old.msh -o simulation
which writes simulation.msh at version 2.4. The orientation label of a re-saved file of
version 2.2 or earlier changes (e.g. rodrigues:passive becomes rodrigues:active with the
same numbers): this is Neper correcting the old, swapped label, and is expected.
The orientation (simulation.ori) and phase (simulation.phase) files keep their
FEPX v2 format (see File and Directory Formats).
Configuration file (simulation.cfg)#
The configuration file keeps FEPX v2’s look (keyword value(s) lines, # comments), but:
The parser is strict. Unknown, misplaced or duplicated keywords, wrong value counts or types, out-of-range values and conflicting keywords are fatal errors with the file name and line (see Configuration File (simulation.cfg)).
Each phase states its model (
model elasticormodel crystal_plasticity).The boundary conditions and the loading are separate.
boundary_conditionschooses the constrained faces (a preset) orgeneralconditions; the loading is written as per-step rows whose first value is the component (see Loading (simulation.cfg)).Hexagonal crystals need
c33. FEPX v2 imposed \(C_{33} = C_{11} + C_{12} - C_{13}\); FEPX v3 uses the full anisotropic stiffness. To reproduce an FEPX v2 simulation, givec33equal toc11 + c12 - c13.Slip strengths are
tau_0andtau_s(FEPX v2:g_0,g_s0), and the active slip families are chosen withslip_families(FEPX v2:g_0_bcc_112). FEPX v2’s last slip system never hardened under isotropic hardening (an error of FEPX v2, absent in FEPX v3), so results with hardening differ from those of the original FEPX v2.The first increment is preceded by a small elastic step (
initialization, see Solver Parameters (simulation.cfg)), where FEPX v2 started from the velocities of an isotropic viscous solve and a stress estimate at a yield-surface vertex;initialization isotropic_viscoplasticstarts as FEPX v2 does, with vertices computed from the phase’s slip systems and strengths (FEPX v2 used fixed tables), and for every kind of boundary condition (FEPX v2: not with its triaxial conditions), with the multi-point constraints imposed in the isotropic solve (FEPX v2 imposed them afterwards).The conjugate gradient solver uses a nodal block-Jacobi preconditioner without constraints (
cg_preconditioner, see Solver Parameters (simulation.cfg)), where FEPX v2 used the diagonal (Jacobi) one;cg_preconditioner jacobiuses FEPX v2’s. The solves need fewer iterations; the results agree to the solver tolerance. With multi-point constraints or periodic conditions FEPX v3 uses Jacobi, as FEPX v2.Per-family values are given for every family.
m,gammadot_0(and later the strengths) take one value per active slip family or one per slip system; a single value is accepted only when one family is active. FEPX v2 broadcast a singlemto everyhcporbctfamily: write it once per family (e.g.m 0.01 0.01 0.01forhcp).gammadot_0may now also differ between families.
The main renamed and replaced keywords:
FEPX v2 |
FEPX v3 |
|---|---|
|
|
several |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
a |
|
a step after load step |
|
|
|
|
|
the same with |
|
|
|
removed: inferred from the rows |
|
removed (FEPX v2 ignored them) |
|
|
|
|
|
|
|
a |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
removed: only |
The keywords of FEPX v3 are listed in Keyword Reference.
Other changes of behavior:
max_strainandmax_eqstrainhave no default (no limit) and apply in every loading mode (FEPX v2: 0.2, triaxial loading only).A
dtimeordstrainthat does not divide a step gives full increments and a shorter last one that ends the step exactly on its target, with a warning (FEPX v2 overshot the target).Rows that FEPX v2 accepted with fewer values than steps (repeating the last value) must give one value per step.
Example#
An FEPX v2 file:
number_of_phases 1
phase 1
crystal_type HCP
m 0.010d0
gammadot_0 1.0d0
h_0 190.0d0
g_0 1.0d10 1.0d10 1.0d10
g_s0 530.0d0
n 1.0d0
c11 1.6240e5
c12 0.9200e5
c13 0.6900e5
c44 0.4670e5
c_over_a 1.587d0
set_bc strainrate 11 -0.25e-2 minimal
set_bc strainrate 22 -0.3e-2 minimal
set_bc strainrate 33 1.0e-2 minimal
number_of_steps 2
target_strain33 0.0005 0.0010
number_of_incrs 2 2
print_results 1 1
print stress
and its FEPX v3 equivalent (elastic only: the very large g_0 made the FEPX v2 run elastic;
c33 is \(C_{11} + C_{12} - C_{13}\), the value FEPX v2 used):
## Material
number_of_phases 1
phase 1
crystal_type hcp
model elastic
c11 1.6240e5
c12 0.9200e5
c13 0.6900e5
c33 1.85400e+05
c44 0.4670e5
## Loading
boundary_conditions triaxial
control_component 33
number_of_steps 2
strain_rate 33 1.0e-2 1.0e-2
target_strain 33 0.0005 0.0010
strain_rate 11 -0.25e-2 -0.25e-2
strain_rate 22 -0.3e-2 -0.3e-2
number_of_incrs 2 2
midnode_linearization on
## Output
print coo
print disp
print vel
print forces
print ori
print stress
print strain_el
Output#
Results are written unrounded with 17 significant digits (FEPX v2 wrote 7, and set values below \(10^{-12}\) to 0).
The
.simlayout and the variable names are FEPX v2’s (see Simulation Results (simulation.cfg)).print convergencewritesresults/convergenceinside the.simdirectory (FEPX v2:post.convin the working directory), with FEPX v2’s columns; the initialization increment is increment 0.Restart (see Simulation Restart): as in FEPX v2,
print restartwrites andrestart onreads, and the second configuration lists only the new steps; FEPX v3 writes its restart point at every step end (FEPX v2: printed steps only) intosimulation.sim/restart(FEPX v2:rst<N>.*in the working directory), saves the whole state (FEPX v2 lost the accumulated slip of cyclic hardening), plans the new steps from where the previous run ended (FEPX v2 assumed monotonic loading from zero), and continuessimulation.sim(FEPX v2 deleted it). FEPX v2’s restart files cannot be read;restart appendis an error.strain_plkeeps FEPX v2’s definition (the plastic strain accumulated in the crystal frame);strain_pl_sampleis new: the plastic strain accumulated in the sample frame.