Constitutive Law module.

Constitutive Law (fedoo.constitutivelaw)

The constitutive law module include several classical mechancical constitutive laws. These laws are required to create some weak formulations.

The ConstitutiveLaw library contains the following classes:

Solid mechanical constitutive laws

These laws should be associated with fedoo.weakform.StressEquilibrium

ElasticIsotrop(E, nu[, name])

ElasticOrthotropic(Ex, Ey, Ez, Gyz, Gxz, ...)

Linear Orthotropic constitutive law defined from the engineering coefficients in local material coordinates.

ElasticAnisotropic(H[, name])

Linear full Anistropic constitutive law defined from the rigidity matrix H.

CompositeUD([Vf, E_f, E_m, nu_f, nu_m, ...])

Linear Orthotropic constitutive law defined from composites phase parameters, assuming uniform unidirectional fibers.

ElastoPlasticity(young_modulus, ...[, name])

Elasto-plastic constitutive law with isotropic hardening.

FE2(assemb[, name])

FE² constitutive law based on periodic microscopic problems.

Simcoon(umat_name, props[, tangent_mode, name])

Constitutive laws from the simcoon library.

Interface mechanical constitutive laws

These laws should be associated with fedoo.weakform.StressEquilibrium

CohesiveLaw([GIc, SImax, KI, GIIc, SIImax, ...])

Bilinear cohesive Law based on the Crisfield model

Spring([Kx, Ky, Kz, name])

Simple directional spring connector between nodes or surfaces

Beam constitutive laws

These laws should be associated with fedoo.weakform.InterfaceForce

BeamProperties(material, A, Jx, Iyy, Izz[, ...])

BeamCircular(material, r[, k, name])

BeamPipe(material, r_int, r_ext[, k, name])

BeamRectangular(material, a[, b, k, name])

Shell constitutive laws

These laws should be associated with fedoo.weakform.PlateEquilibrium

ShellLaminate(list_mat, list_thickness[, k, ...])

ShellLaminateNonLinear(list_mat, list_thickness)

Layered shell integrated from nonlinear plane-stress material points.

ShellHomogeneous(material, thickness[, k, name])

ShellHomogeneousNonLinear(material, thickness)

Homogeneous shell integrated from nonlinear plane-stress material points.

Thermal constitutive law

These laws should be associated with fedoo.weakform.HeatEquation

ThermalProperties(thermal_conductivity, ...)

Manage local frames

Three-dimensional mechanical constitutive laws can be defined in a material coordinate system with fedoo.ConstitutiveLaw.set_local_frame(). A frame is a proper orthogonal rotation matrix whose rows are the material axes expressed in global coordinates. SciPy and Simcoon rotation objects are also accepted directly.

For example, one uniform initial material orientation can be assigned with:

from scipy.spatial.transform import Rotation

frame = Rotation.from_euler("z", 30, degrees=True)
material.set_local_frame(frame)

Several frames can be supplied at nodes, elements, or Gauss points. Use the canonical location names "Node", "Element", and "GaussPoint":

material.set_local_frame(nodal_frames, location="Node")
material.set_local_frame(element_frames, location="Element")
material.set_local_frame(gauss_point_frames, location="GaussPoint")

Nodal rotations are smoothly interpolated to the Gauss points using the finite-element shape functions and a local rotation-vector interpolation. Element frames are repeated at every Gauss point of their element. A Gauss-point field must contain exactly the number of points used by the associated assembly. When location is omitted, Fedoo infers it from the number of frames if the choice is unambiguous.

For small-strain analyses, the prescribed material orientation remains fixed. In finite-strain analyses, it defines the initial material orientation and the constitutive-law machinery updates the current orientation with the material rotation. Isotropic laws do not perform unnecessary frame transformations.

Beam and shell frames

For beams and shells, the element frame is also a geometrical coordinate system used by the weak form. This frame should be defined on the assembly:

assembly.set_element_local_frame(guide=guide, location="Element")

For a beam, the first axis is projected onto the element tangent and the guide sets the cross-section orientation. For a shell, the third axis remains the surface normal and the guide sets the in-plane orientation. Guides may be uniform, elemental, or nodal. The assembly element-frame API is intentionally limited to beams and shells; anisotropic solid orientations belong to the constitutive law.

For shell constitutive laws that support an additional material orientation, that orientation is interpreted relative to the geometrical shell frame defined on the assembly. Beam constitutive laws currently use isotropic materials only, so material orientations are ignored. The assembly element frame defines the beam cross-section orientation.