fedoo.constitutivelaw.ElastoPlasticity

class ElastoPlasticity(young_modulus, poisson_ratio, yield_stress, name='')

Elasto-plastic constitutive law with isotropic hardening.

The stress integration uses a vectorized radial-return algorithm for the von Mises yield criterion. The finite-element lifecycle is provided by fedoo.core.mechanical3d.MechanicalUMAT; the scalar accumulated plastic strain P and plastic-strain tensor EP are exposed as labelled components of the private Statev array.

In a geometrically nonlinear analysis, this law is a corotational extension of the same additive small-strain model written on the logarithmic strain. Tensorial history is transported with the objective rotation increment before each return mapping. The stress returned by the radial return is the Kirchhoff stress \(\boldsymbol{\tau}\) conjugate to the logarithmic strain and the Cauchy stress \(\boldsymbol{\tau}/J\) is handed to the assembly, so that the response is the one of Simcoon’s EPICP UMAT. This makes the response objective under finite rotations, but it is not a multiplicative finite-plasticity model (there is no decomposition \(\mathbf{F} = \mathbf{F}^e \mathbf{F}^p\)).

The returned elastoplastic tangent is the continuum tangent evaluated at the updated stress. It is not the algorithmically consistent tangent of the discrete radial-return integration. Consequently, global Newton convergence is not guaranteed to be quadratic for finite plastic increments or non-proportional loading paths.

Warning

This Python implementation is intended only for pedagogical use and as a readable reference implementation. For computational analyses, prefer fedoo.constitutivelaw.Simcoon, which provides optimized constitutive updates and algorithmically consistent tangent options.

Parameters:
  • young_modulus (float) – Young modulus.

  • poisson_ratio (float) – Poisson ratio.

  • yield_stress (float) – Initial yield stress.

  • name (str, optional) – Name of the constitutive law.

__init__(young_modulus, poisson_ratio, yield_stress, name='')

Methods

ElastoPlasticity.compute_stress(total_strain)

Integrate a material-point state without an assembly.

ElastoPlasticity.get_H_plane_stress(H)

Convert a full 3D tangent matrix H in an equivalent behavior in 2D with the plane stress assumption.

ElastoPlasticity.get_all()

Return a dict with all the known ConstitutiveLaw (with a name).

ElastoPlasticity.get_current_local_frame([...])

Return the trial material frame in global coordinates.

ElastoPlasticity.get_elastic_matrix([dimension])

Return the isotropic elastic matrix in engineering Voigt form.

ElastoPlasticity.get_local_frame([assembly])

Return material frames, resolved at assembly Gauss points.

ElastoPlasticity.get_local_rotation([...])

Return a Simcoon rotation for the requested material frame.

ElastoPlasticity.get_plastic_strain()

Return plastic strain from the most recent integration.

ElastoPlasticity.get_plasticity()

Return plasticity from the most recent integration.

ElastoPlasticity.get_stress()

Return stress from the most recent integration.

ElastoPlasticity.get_tangent_matrix([...])

Return the current tangent, or the elastic tangent initially.

ElastoPlasticity.get_temp_gp(assembly, pb)

Return the current temperature field at Gauss points, if any.

ElastoPlasticity.global2local_H(H[, ...])

Rotate a global stiffness to material axes using Simcoon.

ElastoPlasticity.global2local_rotation_increment(DR)

Express a finite rotation increment in the initial material basis.

ElastoPlasticity.global2local_strain(strain)

Express engineering-strain vector(s) from global to material axes.

ElastoPlasticity.global2local_stress(stress)

Express stress Voigt vector(s) from global to material axes.

ElastoPlasticity.global2local_tensor(tensor)

Change both axes of 3x3 tensor fields to the initial material basis.

ElastoPlasticity.hardening_function(plasticity)

Evaluate the isotropic hardening stress.

ElastoPlasticity.hardening_function_derivative(...)

Evaluate the derivative of the isotropic hardening stress.

ElastoPlasticity.initialize(assembly, pb)

Initialize the constitutive law for the current problem.

ElastoPlasticity.local2global_H(H[, ...])

Rotate a material stiffness to global axes using Simcoon.

ElastoPlasticity.local2global_strain(strain)

Express engineering-strain vector(s) from material to global axes.

ElastoPlasticity.local2global_stress(stress)

Express stress Voigt vector(s) from material to global axes.

ElastoPlasticity.reset()

Reset cached results; assembly history is managed by Fedoo.

ElastoPlasticity.set_density(density)

Set the mass density associated with this mechanical material.

ElastoPlasticity.set_hardening_function(...)

Define the isotropic hardening function.

ElastoPlasticity.set_initial_statev(...)

Set a labeled initial state-variable field on an assembly.

ElastoPlasticity.set_local_frame(local_frame)

Define the material coordinate frame.

ElastoPlasticity.set_return_mapping_tolerance(...)

Set the absolute tolerance used by the local return mapping.

ElastoPlasticity.set_start(assembly, pb)

Begin a new time iteration.

ElastoPlasticity.to_start(assembly, pb)

Restart the current time iteration.

ElastoPlasticity.update(assembly, pb)

Update the constitutive law for the current problem state.

ElastoPlasticity.yield_function(stress, ...)

Evaluate the von Mises yield function.

ElastoPlasticity.yield_function_derivative(stress)

Differentiate the yield function with respect to stress.

ElastoPlasticity.is_isotropic

ElastoPlasticity.manages_material_frame

ElastoPlasticity.name

Name of the constitutive law.

ElastoPlasticity.required_corate

ElastoPlasticity.shear_modulus

Shear modulus.

ElastoPlasticity.is_initialized

Tag set to True once the law is intialized.