The notch approximation law classes#

The following classes are available: ExtendedNeuber, SeegerBeste, and Binned.

The ExtendedNeuber and SeegerBeste classes implement the respective notch approximations.

The Binned class implements binning to a predefined number of bins. It contains an object of either ExtendedNeuber or SeegerBeste. The respective stress and strain values from the notch approximation for equi-spaced load values get precomputed and stored in a lookup table. This speeds up the computation as only the initialization step is compute intense.

class pylife.materiallaws.notch_approximation_law.ExtendedNeuber(E, K, n, K_p=None)[source]#

Apply the extended Neuber notch approximation law.

Use this law for the P_RAM damage parameter in the FKM nonlinear assessment. It converts a linear-elastic FE load to an elastic-plastic local stress and strain following the Ramberg-Osgood material law.

Parameters:
  • E (float) – Young’s modulus in MPa.

  • K (float) – Ramberg-Osgood strength coefficient in MPa, also denoted K_prime.

  • n (float) – Ramberg-Osgood strain hardening exponent, dimensionless.

  • K_p (float, optional) – Plastic shape factor, dimensionless.

Notes

The primary path follows extended Neuber’s rule from section 2.5.7 of the FKM guideline nonlinear [FKM-Neuber]:

\[\varepsilon(\sigma) = \frac{L}{\sigma} K_p\, \varepsilon^*(L), \qquad \varepsilon^*(L) = \varepsilon\!\left(\frac{L}{K_p}\right).\]

References

[FKM-Neuber]

Forschungskuratorium Maschinenbau, FKM-Richtlinie nichtlinear, 2019.

property E#

Return Young’s modulus.

Returns:

Young’s modulus in MPa.

Return type:

float

property K#

Return the Ramberg-Osgood strength coefficient.

Returns:

Strength coefficient in MPa, also denoted K_prime.

Return type:

float

property K_p#

Return the plastic shape factor.

Returns:

Plastic shape factor, dimensionless.

Return type:

float

property K_prime#

Return the Ramberg-Osgood strength coefficient.

Returns:

Strength coefficient in MPa, also denoted K_prime.

Return type:

float

load(stress, *, rtol=0.0001, tol=0.0001)[source]#

Calculate linear-elastic load from elastic-plastic stress.

Parameters:
  • stress (array_like) – Elastic-plastic stress in MPa on the primary path.

  • rtol (float, optional) – Relative tolerance for solving the implicit equation. Default is 1e-4.

  • tol (float, optional) – Absolute tolerance for solving the implicit equation. Default is 1e-4.

Returns:

Linear-elastic load in MPa that produces stress.

Return type:

float or numpy.ndarray

load_secondary_branch(delta_stress, *, rtol=0.0001, tol=0.0001)[source]#

Calculate load increment from secondary-branch stress increment.

Parameters:
  • delta_stress (array_like) – Elastic-plastic stress increment in MPa on a secondary hysteresis branch.

  • rtol (float, optional) – Relative tolerance for solving the implicit equation. Default is 1e-4.

  • tol (float, optional) – Absolute tolerance for solving the implicit equation. Default is 1e-4.

Returns:

Linear-elastic load increment in MPa that produces delta_stress.

Return type:

float or numpy.ndarray

property n#

Return the Ramberg-Osgood strain hardening exponent.

Returns:

Strain hardening exponent, dimensionless.

Return type:

float

primary(load)#

Calculate stress and strain for the primary path.

Parameters:

load (array_like) – Linear-elastic load in MPa.

Returns:

Stress-strain array. Scalars return [stress, strain]; arrays return stress values and strain values stacked along the last axis.

Return type:

numpy.ndarray

property ramberg_osgood_relation#

Return the Ramberg-Osgood material relation.

Returns:

Material relation used to convert elastic-plastic stress and strain.

Return type:

pylife.materiallaws.rambgood.RambergOsgood

secondary(delta_load)#

Calculate stress and strain increments for a secondary branch.

Parameters:

delta_load (array_like) – Linear-elastic load increment in MPa for the hysteresis branch.

Returns:

Stress-strain increment array. Scalars return [delta_stress, delta_strain]; arrays return increments stacked along the last axis.

Return type:

numpy.ndarray

strain(stress)[source]#

Calculate primary-path elastic-plastic strain from stress.

Parameters:

stress (array_like) – Elastic-plastic stress in MPa on the primary path.

Returns:

Elastic-plastic strain on the primary path, dimensionless.

Return type:

float or numpy.ndarray

strain_secondary_branch(delta_stress)[source]#

Calculate secondary-branch strain increment from stress increment.

Parameters:

delta_stress (array_like) – Elastic-plastic stress increment in MPa on a secondary hysteresis branch.

Returns:

Elastic-plastic strain increment on the secondary branch, dimensionless.

Return type:

float or numpy.ndarray

stress(load, *, rtol=0.0001, tol=0.0001)[source]#

Calculate primary-path elastic-plastic stress from load.

Parameters:
  • load (array_like) – Linear-elastic von Mises stress from a scaled FE result in MPa, denoted as load L in the FKM nonlinear guideline.

  • rtol (float, optional) – Relative tolerance for solving the implicit equation. Default is 1e-4.

  • tol (float, optional) – Absolute tolerance for solving the implicit equation. Default is 1e-4.

Returns:

Elastic-plastic stress in MPa on the primary path.

Return type:

float or numpy.ndarray

stress_secondary_branch(delta_load, *, rtol=0.0001, tol=0.0001)[source]#

Calculate stress increment from secondary-branch load increment.

Parameters:
  • delta_load (array_like) – Linear-elastic load increment in MPa for a hysteresis branch.

  • rtol (float, optional) – Relative tolerance for solving the implicit equation. Default is 1e-4.

  • tol (float, optional) – Absolute tolerance for solving the implicit equation. Default is 1e-4.

Returns:

Elastic-plastic stress increment in MPa on the secondary branch.

Return type:

float or numpy.ndarray

class pylife.materiallaws.notch_approximation_law_seegerbeste.SeegerBeste(E, K, n, K_p=None)[source]#

Apply the Seeger-Beste notch approximation law.

Use this law for the P_RAJ damage parameter in the FKM nonlinear assessment. It converts a linear-elastic FE load to an elastic-plastic local stress and strain following the Ramberg-Osgood material law.

Parameters:
  • E (float) – Young’s modulus in MPa.

  • K (float) – Ramberg-Osgood strength coefficient in MPa, also denoted K_prime.

  • n (float) – Ramberg-Osgood strain hardening exponent, dimensionless.

  • K_p (float) – Plastic shape factor, dimensionless.

Notes

The implementation follows section 2.8.7 of the FKM guideline nonlinear [FKM-SeegerBeste] and solves the Seeger-Beste implicit equations for primary and secondary paths.

References

[FKM-SeegerBeste]

Forschungskuratorium Maschinenbau, FKM-Richtlinie nichtlinear, 2019.

property E#

Return Young’s modulus.

Returns:

Young’s modulus in MPa.

Return type:

float

property K#

Return the Ramberg-Osgood strength coefficient.

Returns:

Strength coefficient in MPa, also denoted K_prime.

Return type:

float

property K_p#

Return the plastic shape factor.

Returns:

Plastic shape factor, dimensionless.

Return type:

float

property K_prime#

Return the Ramberg-Osgood strength coefficient.

Returns:

Strength coefficient in MPa, also denoted K_prime.

Return type:

float

load(stress, *, rtol=0.0001, tol=0.0001)[source]#

Calculate linear-elastic load from elastic-plastic stress.

Parameters:
  • stress (array_like) – Elastic-plastic stress in MPa on the primary path.

  • rtol (float, optional) – Relative tolerance for solving the implicit equation. Default is 1e-4.

  • tol (float, optional) – Absolute tolerance for solving the implicit equation. Default is 1e-4.

Returns:

Linear-elastic load in MPa that produces stress.

Return type:

float or numpy.ndarray

load_secondary_branch(delta_stress, *, rtol=0.0001, tol=0.0001)[source]#

Calculate load increment from secondary-branch stress increment.

Parameters:
  • delta_stress (array_like) – Elastic-plastic stress increment in MPa on a secondary hysteresis branch.

  • rtol (float, optional) – Relative tolerance for solving the implicit equation. Default is 1e-4.

  • tol (float, optional) – Absolute tolerance for solving the implicit equation. Default is 1e-4.

Returns:

Linear-elastic load increment in MPa that produces delta_stress.

Return type:

float or numpy.ndarray

property n#

Return the Ramberg-Osgood strain hardening exponent.

Returns:

Strain hardening exponent, dimensionless.

Return type:

float

primary(load)#

Calculate stress and strain for the primary path.

Parameters:

load (array_like) – Linear-elastic load in MPa.

Returns:

Stress-strain array. Scalars return [stress, strain]; arrays return stress values and strain values stacked along the last axis.

Return type:

numpy.ndarray

property ramberg_osgood_relation#

Return the Ramberg-Osgood material relation.

Returns:

Material relation used to convert elastic-plastic stress and strain.

Return type:

pylife.materiallaws.rambgood.RambergOsgood

secondary(delta_load)#

Calculate stress and strain increments for a secondary branch.

Parameters:

delta_load (array_like) – Linear-elastic load increment in MPa for the hysteresis branch.

Returns:

Stress-strain increment array. Scalars return [delta_stress, delta_strain]; arrays return increments stacked along the last axis.

Return type:

numpy.ndarray

strain(stress)[source]#

Calculate primary-path elastic-plastic strain from stress.

Parameters:

stress (array_like) – Elastic-plastic stress in MPa on the primary path.

Returns:

Elastic-plastic strain on the primary path, dimensionless.

Return type:

float or numpy.ndarray

strain_secondary_branch(delta_stress)[source]#

Calculate secondary-branch strain increment from stress increment.

Parameters:

delta_stress (array_like) – Elastic-plastic stress increment in MPa on a secondary hysteresis branch.

Returns:

Elastic-plastic strain increment on the secondary branch, dimensionless.

Return type:

float or numpy.ndarray

stress(load, *, rtol=0.0001, tol=0.0001)[source]#

Calculate primary-path elastic-plastic stress from load.

Parameters:
  • load (array_like) – Linear-elastic von Mises stress from a scaled FE result in MPa, denoted as load L in the FKM nonlinear guideline.

  • rtol (float, optional) – Relative tolerance for solving the implicit equation. Default is 1e-4.

  • tol (float, optional) – Absolute tolerance for solving the implicit equation. Default is 1e-4.

Returns:

Elastic-plastic stress in MPa on the primary path.

Return type:

float or numpy.ndarray

stress_secondary_branch(delta_load, *, rtol=0.0001, tol=0.0001)[source]#

Calculate stress increment from secondary-branch load increment.

Parameters:
  • delta_load (array_like) – Linear-elastic load increment in MPa for a hysteresis branch.

  • rtol (float, optional) – Relative tolerance for solving the implicit equation. Default is 1e-4.

  • tol (float, optional) – Absolute tolerance for solving the implicit equation. Default is 1e-4.

Returns:

Elastic-plastic stress increment in MPa on the secondary branch.

Return type:

float or numpy.ndarray

class pylife.materiallaws.notch_approximation_law.NotchApproxBinner(notch_approximation_law, number_of_bins=100)[source]#

Cache a notch approximation law on lookup tables.

Use this helper when repeated evaluations of the same notch approximation law would make nonlinear root finding too expensive. The binner precomputes the primary path and secondary hysteresis branches up to an expected maximum load.

Parameters:
  • notch_approximation_law (NotchApproximationLawBase) – Notch approximation law to tabulate.

  • number_of_bins (int, optional) – Number of bins in the primary lookup table. Default is 100.

initialize(max_load)[source]#

Initialize lookup tables up to the maximum expected load.

Parameters:

max_load (array_like) – Maximum linear-elastic load in MPa expected during the assessment.

Returns:

Initialized binner instance.

Return type:

NotchApproxBinner

primary(load)[source]#

Look up stress and strain on the primary path.

Parameters:

load (array_like) – Linear-elastic load in MPa.

Returns:

Tabulated stress-strain array on the primary path.

Return type:

numpy.ndarray

Raises:
property ramberg_osgood_relation#

Return the Ramberg-Osgood material relation.

Returns:

Material relation of the tabulated notch approximation law.

Return type:

pylife.materiallaws.rambgood.RambergOsgood

secondary(delta_load)[source]#

Look up stress and strain increments on a secondary branch.

Parameters:

delta_load (array_like) – Linear-elastic load increment in MPa.

Returns:

Tabulated stress-strain increment array on the secondary branch.

Return type:

numpy.ndarray

Raises: