1 Known incompatibilities

1.1 Internal API changes

IsotropicHardeningRule::computeElasticLimitAndDerivative now returns the derivative of the elastic limit (computed at the middle of the time step) with respect to the equivalent plastic strain at the middle of the time step rather than the derivative with respect to the increment of the equivalent plastic strain.

2 New features in the TFEL libraries

2.1 Environment

This version now supports a new environment variable to specify the TFEL installation directory that always supersedes the TFELHOME environment variable. The name of this variable depends on the version of the project, the fact that a development version has been compiled and the flavour (optionally specified with the cmake variable TFEL_VERSION_FLAVOUR). The name of this variable can be retrieved with the --tfel-home option of tfel-config described below.

2.2 tfel-config

2.2.1 --registry-key option

On Windows, the --registry-key option returns the registry key which is used to determine the TFEL’s installation path.

2.2.2 --tfel-home option

The --tfel-home option returns the environment variable in which the TFEL’s installation path shall be defined.

2.2.2.1 Example of usage

$ tfel-config-5.1.0-dev-release --tfel-home
TFELHOME_5_1_0_dev_release

2.2.3 --python-module-suffix option

This option return the suffix of the python module. Such suffix is not empty only the following conditions are met:

The option --python-module-suffix is only available if the python bindings is available.

2.2.4 --config

This option requests flags associated with the TFELConfig library.

2.2.5 --mfront-log-stream

This option requests flags associated with the MFrontLogStream library.

2.2.6 --mfront

This option requests flags associated with the TFELMFront library.

2.2.7 --mtest

This option requests flags associated with the TFELMTest library.

2.2.7.1 Example of usage

$ tfel-config-5.1.0-release --python-module-suffix
5_1_0_release

3 New TFEL/Math features

3.1 The tfel::types namespace

The tfel::types namespace contains type aliases that are helpful to deduce a type from another. This is mostly useful to support quantities.

The implementation of the computeLambda provides a simple example of its usage:

template <tfel::math::ScalarConcept StressType>
TFEL_HOST_DEVICE constexpr StressType computeLambda(
    const StressType& young, const types::real<StressType>& nu) noexcept
    requires(tfel::math::checkUnitCompatibility<tfel::math::unit::Stress,
                                                StressType>()) {
  return nu * young / ((1 + nu) * (1 - 2 * nu));
}

3.2 A zero method to create tensorial objects

A static method named zero is now available to create fixed-size tensorial objects.

3.2.1 Example of usage

constexpr auto s = stensor<2u, double>::zero();

4 New TFEL/Material features

4.1 Homogenization

4.1.1 Ellipsoidal inclusion embedded in anisotropic matrix

When \(\underline{\underline{\mathbf{C}}}_0\) is anisotropic, the Eshelby tensor can be computed with computeAnisotropicEshelbyTensor in 3D and computePlainStrainAnisotropicEshelbyTensor in 2D. There are also computeAnisotropicHillTensor, computePlainStrainAnisotropicHillTensor, and also computeAnisotropicLocalisationTensor and computePlainStrainAnisotropicLocalisationTensor.

4.1.2 Homogenization bounds

Different homogenization bounds are implemented. The available functions are computeVoigtStiffness, computeReussStiffness, computeIsotropicHashinShtrikmanBounds.

4.1.3 Homogenization schemes

Ponte Castaneda and Willis scheme for distributions of ellipsoidal inclusions for biphasic media is now available.

5 New features in MFront

This version introduces the following main features in MFront:

5.1 Warnings

Many warnings have been added to detect potential misuses of MFront or known bad practices.

5.1.1 Activating and desactivating warnings

Reporting warnings is activated by default and can be disabled by passing the command line argument --report-warnings=false to MFront.

Warnings are associated with keywords and code blocks. Warnings can be disabled by appending the safe option to them. For instance, in an implicit DSL, specifying a convergence threshold greater than \(10^{-10}\) is considered to loose in most cases and thus triggers a warning. This warning can be disabled as follows:

@Epsilon<safe> 1;

This safe option can be ignored by passing the --ignore-safe command line argument to MFront. This argument is useful when analysing an existing file (written by another person) to question implementation choices.

5.1.2 Warnings added to all DSLs

5.1.3 Warnings added to the DSLs of the Default family

5.1.4 Warnings added to isotropic DSLs

A warning is reported if the implementation of the flow rule(s) contains:

Note

Using the increment of the external state variable and the time increment to compute the rate of an external state variable can be legitimate, but it is better to compute this rate in [InitLocalVariables?] and take into account the fact that the Cast3M solver may set the time increment to zero when activating is forced convergence algorithm.

A warning is reported if the implementation of the flow rule(s) does not contain:

5.1.5 Warnings added to implicit DSLs

5.1.5.3 Warnings to @InitializeLocalVariables

5.1.6 Warnings added to interfaces

5.1.6.1 Warnings added to the Cast3M interface

5.1.6.2 Warnings added to the generic interface

5.2 Calling an external behaviour: the @BehaviourVariable keyword

@BehaviourVariable first_phase_plastic_behaviour {
  file: "Plasticity.mfront",
  variables_suffix: "1",
  external_names_prefix: "FirstPhase",
  store_gradients: true,
  store_thermodynamic_forces: true,
  shared_material_properties: {".+"},
  shared_external_state_variables: {".+"}
};

5.2.1 Behaviour variable factories

5.2.2 Extension of the @Model keyword

In previous versions, the @Model keyword allowed to call from a behaviour point-wise models using the historical Model DSL.

The @Model keyword now allows to use point-wise models implemented using the following DSLs: DefaultModel, RungeKuttaModel and ImplicitModel. In this case, a behaviour variable factory is automatically associated with the point-wise models which shares all its material properties and external state variables with the calling behaviour. Every persistent variables of the point-wise model are declared as auxiliary state variables. For each persistent variable of the point-wise model, a local variable meant to contain the increment of this variable over the time step is declared.

Point-wise models are called at the initialization stage of the behaviour. The auxiliary state variables associated with the point-wise models are updated at beginning of the updateAuxiliarySateVariables method before any user defined code (see the @UpdateAuxiliaryStateVariables keyword).

5.3 Uniform syntax

5.4 New command line arguments

The following command line arguments are now supported:

5.5 New features in isotropic DSLs

5.5.1 Stress update algorithm

Isotropic DSLs all introduced the elastic strain as a state variable. When the elastic material properties are now to be constant in time, then the Hooke law can be written in an incremental form \[ {\left.\underline{\sigma}\right|_{t+\Delta\,t}}={\left.\underline{\sigma}\right|_{t}}+\lambda\,{\mathrm{tr}{\left(\Delta\,\underline{\varepsilon}^{\mathrm{to}}\right)}}+2\,\mu\,{\left(\Delta\,\underline{\varepsilon}^{\mathrm{to}}-\Delta\,p\,{\left.n\right|_{t+\theta\,\Delta\,t}}\right)} \] where \(\lambda\) and \(\mu\) are the first Lamé’s coefficient and the shear modulus, \(\Delta\,p\) is the increment of the equivalent plastic strain and \({\left.n\right|_{t+\theta\,\Delta\,t}}\) the flow direction at the middle of the time step.

The use_stress_update_algorithm DSL option prevents the declaration of the elastic strain and switches to this incremental form to compute the stress.

5.5.1.1 Example of usage

@DSL IsotropicStrainHardeningMisesCreep{
  use_stress_update_algorithm : true
};

5.5.2 Predefined isotropic hardening rules

The @IsotropicHardeningRule and @IsotropicHardeningRules allow to use the isotropic hardening rules available in the StandardElastoViscoPlasticity brick.

5.5.2.1 Example of usage

@IsotropicHardeningRule "Voce" {flow_id : 0, R0 : 125e6, Rinf : 500e6, b : 20};
@IsotropicHardeningRules{
  flow_id : 0,
  isotropic_hardening : "Voce" {R0 : 125e6, Rinf : 500e6, b : 20},
  isotropic_hardening : "Linear" {R0 : 50e6}
};

5.5.2.2 Automatic declaration of the flow rule in the IsotropicPlasticMisesFlow DSL

If an isotropic hardening rule is defined in the IsotropicPlasticMisesFlow DSL, and if no flow rule is defined, the following flow rule is automatically defined:

@FlowRule {
  f = seq - R;
  df_dseq = 1;
  df_dp = -dR_dp;
}

5.5.2.3 Available isotropic hardening rules

The following flow rules are currently available: Data, Linear, Power, StrainRateSensitive, Swift, UserDefined, and Voce.

This list can be retrieved as follows:

$ mfront --list-isotropic-hardening-rules

5.6 Extensions of the StandardElastoViscoPlasticity brick

5.6.1 Changing the external name of the equivalent strain

All inelastic flows now allows to change the external name of the equilvaent strain with the equivalent_strain_external_name option.

5.6.1.1 Example of usage

@Brick StandardElastoViscoPlasticity{
  stress_potential : Hooke{young_modulus : 150e9, poisson_ratio : 0.3},
  inelastic_flow : "Plastic" {
    criterion : "Mises",
    isotropic_hardening : "Linear" {R0 : 33e6, H : 438e6},
    equivalent_strain_external_name : "CumulatedEquivalentPlasticStrain"
  }
};

5.6.2 Saving the stress criterion

All inelastic flows now allows the save the value of the stress criterion at \(t+\theta\,\Delta\,t\) in a dedicated auxiliary state variable by setting the save_stress_criterion option to true.

The external name of this auxiliary state variable defaults to EquivalentStress + id, where id is the identifier of the inelastic flow. This name can be changed using the stress_criterion_external_name option.

5.6.2.1 Example of usage

@Brick StandardElastoViscoPlasticity{
  stress_potential : Hooke{young_modulus : 150e9, poisson_ratio : 0.3},
  inelastic_flow : "Plastic" {
    criterion : "Mises",
    isotropic_hardening : "Linear" {R0 : 33e6, H : 438e6},
    stress_criterion_external_name : "StressCriterion",
    save_stress_criterion : true
  }
};

5.6.3 Saving yield radius

All inelastic flows now allows the save the value of the stress criterion at \(t+\theta\,\Delta\,t\) in a dedicated auxiliary state variable by setting the save_yield_surface_radius option to true.

The external name of this auxiliary state variable defaults to YieldSurfaceRadius + id, where id is the identifier of the inelastic flow. This name can be changed using the yield_surface_radius_external_name option.

5.6.3.1 Example of usage

@Brick StandardElastoViscoPlasticity{
  stress_potential : Hooke{young_modulus : 150e9, poisson_ratio : 0.3},
  inelastic_flow : "Plastic" {
    criterion : "Mises",
    isotropic_hardening : "Linear" {R0 : 33e6, H : 438e6},
    yield_surface_radius_external_name : "CurrentYieldStrength",
    save_yield_surface_radius : true
  }
};

5.6.4 Saving the thermal expansion

The save_thermal_expansion boolean option has been introduced in all stress potentials deriving from the HookeStressPotentialBase.

This option states if the computed thermal expansion(s) at the end of the time step shall be stored in an auxiliary state variable. The external name of this variable is ComputedThermalExpansion. For an isotropic thermal expansion, this variable is a scalar. For an orthotropic material, this variable is an array of (3) scalars.

5.6.4.1 Example of usage

@Brick StandardElastoViscoPlasticity{
  stress_potential : Hooke{
    young_modulus : 150e9,
    poisson_ratio : 0.3,
    thermal_expansion : 1e-5,
    save_thermal_expansion : true
  }
};

5.7 Uniform syntax for @ComputeThermalExpansion

The @ComputeThermalExpansion keyword now accepts the same options than the stress potentials deriving from the HookeStressPotentialBase:

@ComputeThermalExpansion{
  thermal_expansion1: 1.e-5,
  thermal_expansion2: 0.2e-5,
  thermal_expansion3: 1.2e-5,
  thermal_expansion_reference_temperature: 293.15, 
  initial_geometry_reference_temperature: 293.15,
  save_thermal_expansion: true
};

6 New features in mfront-query

6.1 New command line arguments

The following command line arguments are now supported:

7 New features in tfel-check

7.1 Discard commands failure

By default, tfel-check discards a command failure if at least one test is defined. The rationale behind this choice is that some command may succeed in producing the expected results but may still fail to exit properly.

This behavior can be controlled by the --discard-commands-failure which takes true or false as argument.

7.1.1 Example of usage

$ tfel-check --discard-commands-failure=false
entering directory '/tmp/tests'
* beginning of test './test.check'
** Exec-1 ./main                                                       [ FAILED]
** Compare-1 'results.res' and 'results.res', column '1'               [SUCCESS]
* end of test './test.check'                                           [ FAILED]
======
$ tfel-check --discard-commands-failure=true
entering directory '/tmp/tests'
* beginning of test './test.check'
** Exec-1 ./main                                                       [ FAILED]
** Compare-1 'results.res' and 'results.res', column '1'               [SUCCESS]
* end of test './test.check'                                           [SUCCESS]
====== 

7.2 New keywords

7.2.1 @TFELLibraries

The @TFELLibraries keyword let the user specify TFEL libraries to link with. This keyword must be followed by an array of strings.

The following libraries are available: Config, Exception, Glossary, Tests, UnicodeSupport, Utilities, System, Math, MathCubicSpline, MathKriging, MathParser, NUMODIS, Material, MFront, MTest.

7.2.1.1 Example of usage

@TFELLibraries {"MathParser"};

7.3 New tutorials

New tutorials on implementation of homogenization schemes for biphasic linear elastic media are available in the gallery.

New tutorials on implementation of homogenization schemes in non-linear elasticity are available in the gallery: Taylor scheme, Sachs scheme, \(\beta\)-rule. These tutorials use the keyword @BehaviourVariable for the integration and the computation of tangent operator of the local behaviours. The implementation shows how to use any behaviour law on each phase.

8 Python bindings

Python bindings are now generated using the pybind11 library.

8.1 New features in the mfront module

9 Issues fixed

9.1 Issue 790: [tfel-math] Remove Stress, Time from the tfel::math namespace

For more details, see https://github.com/thelfer/tfel/issues/790

9.2 Issue 789: [mfront] advice to remove include and src in case of compilation error

For more details, see https://github.com/thelfer/tfel/issues/789

9.3 Issue 779: [tfel-check] Failure during parsing step if a symbolic linked was not correctly generated

For more details, see https://github.com/thelfer/tfel/issues/779.

9.4 Issue 778: [tfel-check] Add an option to return a failure if at least one check fails

For more details, see https://github.com/thelfer/tfel/issues/778

9.5 Issue 777: [tfel-check] Clearer message if a directory is given as an argument

For more details, see https://github.com/thelfer/tfel/issues/777

9.6 Issue 763: Personalize names of equivalent plastic strain in StandardElastoViscoPlasticity’s inelastic_flow

This feature is described in Section 5.6.1.

For more details, see https://github.com/thelfer/tfel/issues/763

9.7 Issue 762: Save the isotropic_hardening’s threshold stress via an auxiliary state variable using StandardElastoViscoPlasticity’s inelastic_flow

This feature is described in Section 5.6.3.

For more details, see https://github.com/thelfer/tfel/issues/762

9.8 Issue 761: Save the equivalent stress via an @AuxiliaryStateVariable using StandardElastoViscoPlasticity’s inelastic_flow

This feature is described in Section 5.6.2.

For more details, see https://github.com/thelfer/tfel/issues/761

9.9 Issue 760: Save the thermal expansion tensor via an @AuxiliaryStateVariable using StandardElastoViscoPlasticity’s stress_potential

This feature is described in Section 5.6.4.

For more details, see https://github.com/thelfer/tfel/issues/760

9.10 Issue 739: [mfront] Depreciation of europlexus interface

For more details, see https://github.com/thelfer/tfel/issues/739

9.11 Issue 708: Add support for hardening modes when libc++ is used

For more details, see https://github.com/thelfer/tfel/issues/708

9.12 Issue 724: [mfront] Add support for non constant elastic properties in the stress update algorithm of the isotropic DSLs

For more details, see https://github.com/thelfer/tfel/issues/724

9.13 Issue 721: [tfel-math] Add a zero method to create tensorial objects

This feature is described in Section 3.2.

For more details, see https://github.com/thelfer/tfel/issues/721

9.14 Issue 717: [mfront] Add warning if the increment of a state variable is not used in @Integrator for the Implicit DSLs and the Default DSLs

For more details, see https://github.com/thelfer/tfel/issues/717

9.15 Issue 698: [mfront] Add a stress update option which would not use the elastic strain as a state variable in Isotropic DSLs

For more details, see https://github.com/thelfer/tfel/issues/698

9.16 Issue 661: [mfront] Allow to use isotropic hardening rules in isotropic DSLs

For more details, see https://github.com/thelfer/tfel/issues/661

9.17 Issue 702: [mfront] Add a warning if an auxiliary state variable not computed by an external point-wise model is used in a @FlowRule block in isotropic DSLs

For more details, see https://github.com/thelfer/tfel/issues/702

 ## Issue #697: [cyrano] Add a warning when the maximum number of sub steppings is too high

For more details, see https://github.com/thelfer/tfel/issues/697

9.18 Issue #696: [calculix-interface] add support for the @GenerateMTestFileOnFailure keyword

For more details, see https://github.com/thelfer/tfel/issues/696

9.19 Issue #695: [aster-interface] add support for the @GenerateMTestFileOnFailure keyword

For more details, see https://github.com/thelfer/tfel/issues/695

9.20 Issue #694: [ansys-interface] add support for the @GenerateMTestFileOnFailure keyword

For more details, see https://github.com/thelfer/tfel/issues/694

9.21 Issue #692: [mfront] add warning when interface specific keywords are not restricted to the corresponding interface

For more details, see https://github.com/thelfer/tfel/issues/692

9.22 Issue #690: [castem] Add a warning when the maximum number of sub steppings is too high

For more details, see https://github.com/thelfer/tfel/issues/690

9.23 Issue #689: [implicit-dsl] Add warning when using auxiliary state variables (not computed by external point-wise models) in @ComputeStress and @ComputeFinalStress

For more details, see https://github.com/thelfer/tfel/issues/689

9.24 Issue 685: [tfel-config] Add support for TFELConfig, TFELMFront and TFELMTest

This feature is described in Section 2.2.

For more details, see https://github.com/thelfer/tfel/issues/685

For more details, see https://github.com/thelfer/tfel/issues/684

9.26 Issue 683: Using TFEL librairies in material properties

For more details, see https://github.com/thelfer/tfel/issues/683

9.27 Issue 677:[tfel-config] add a python-module-suffix option

For more details, see https://github.com/thelfer/tfel/issues/677

9.28 Issue 676: Always prefer the versioned TFELHOME environment variable

For more details, see https://github.com/thelfer/tfel/issues/676

9.29 Issue 674: [python-bindings] Add option to disable the modication of the names of python modules by the TFEL_APPEND_VERSION and TFEL_VERSION_FLAVOUR

For more details, see https://github.com/thelfer/tfel/issues/674

9.30 Issue 673: [tfel-config] Add the ability to define an environment variable associated with the TFEL’s version and flavour

For more details, see https://github.com/thelfer/tfel/issues/673

9.31 Issue 672: python bindings fix python modules names when TFEL_APPEND_VERSION or TFEL_VERSION_FLAVOUR is defined

For more details, see https://github.com/thelfer/tfel/issues/672

9.32 Issue 667: Reduce the size of files paths in sources to fit in Windows’s MAX_PATH limit

For more details, see https://github.com/thelfer/tfel/issues/667

9.33 Issue 666: [doc] Add CONTRIBUTING file, remove devel.md

For more details, see https://github.com/thelfer/tfel/issues/666

9.34 Issue 654: Add PowerShell environment script

For more details, see https://github.com/thelfer/tfel/issues/654

9.35 Issue 640: [mfront] Only point-wise models defined by Model DSL can be embedded in behaviours using the @Model keyword

For more details, see https://github.com/thelfer/tfel/issues/640

9.36 Issue 294: [python-bindings] Evaluate port to pybind

For more details, see https://github.com/thelfer/tfel/issues/293