fedoo.constitutivelaw.Heterogeneous

class Heterogeneous(tup_cl, tup_elset, name='')

Constitutive Law that allowing to define an heterogeneous constitutive laws.

To define constitutive from a list of phase constitutive laws, and a list of element sets.

In a finite-strain analysis, the geometric non-linearity of the parent assembly is forwarded to every phase, so that each phase law applies the same finite-strain stress convention as it would in a homogeneous problem.

Warning

Every phase law must follow the finite-strain convention documented on fedoo.core.mechanical3d.Mechanical3D (true Cauchy stress and corotational Kirchhoff tangent). The weak form converts the assembled tangent once, for the whole domain: the convert_tangent option of fedoo.weakform.StressEquilibrium cannot be selected phase by phase.

Parameters:
  • tup_cl (tuple or list) – list of constitutive laws for each phase.

  • tup_elset (tuple or list) – list of element set that may be given as str (if present in the mesh.element_sets dictionnary) or as list of element index.

  • name (str) – The name of the heterogeneous constitutive law

Example

Create a one element mesh from a 2d mesh in a 3d space:
>>> import fedoo as fd
>>> import numpy as np
>>>
>>> #Generate a mesh with a spherical inclusion inside
>>>
>>> #matrix
>>> mesh = fd.mesh.hole_plate_mesh(nr=11, nt=11, length=100, height=100, radius=20,        >>>   elm_type = 'quad4', name ="Domain")
>>> mesh.element_sets['matrix'] = np.arange(0,mesh.n_elements)
>>>
>>> #inclusion
>>> mesh_disk = fd.mesh.disk_mesh(20, 11, 11)
>>> mesh_disk.element_sets['inclusion'] = np.arange(0,mesh_disk.n_elements)
>>>
>>> #glue the inclusion to the matrix
>>> mesh = mesh + mesh_disk
>>> mesh.merge_nodes(np.c_[mesh.node_sets['hole_edge'], mesh.node_sets['boundary']])
>>>
>>> #Define the Modeling Space - Here 2D problem with plane stress assumption.
>>> fd.ModelingSpace("2Dstress")
>>>
>>> #define the materials and build the heterogeneous Assembly
>>> material1 = fd.constitutivelaw.ElasticIsotrop(2e4, 0.3)
>>> material2 = fd.constitutivelaw.ElasticIsotrop(1e5, 0.3)
>>>
>>> material = fd.constitutivelaw.Heterogeneous((material1, material2), ('matrix', 'inclusion'))
>>>
>>> wf = fd.weakform.StressEquilibrium(material)
>>> assembly = fd.Assembly.create(wf, mesh)
>>>
>>> #Define a new static problem
>>> pb = fd.problem.Linear(assembly)
>>>
>>> #Definition of the set of nodes for boundary conditions
>>> left = mesh.find_nodes('X',mesh.bounding_box.xmin)
>>> right = mesh.find_nodes('X',mesh.bounding_box.xmax)
>>>
>>> #Boundary conditions
>>> pb.bc.add('Dirichlet', left, 'Disp',    0 )
>>> pb.bc.add('Dirichlet', right, 'Disp', [20,0] )
>>> pb.apply_boundary_conditions()
>>>
>>> #Solve problem
>>> pb.solve()
>>>
>>> #---------- Post-Treatment ----------
>>> res = pb.get_results(assembly, ['Stress','Strain', 'Disp'])
>>> res.plot('Stress', component='vm')
__init__(tup_cl, tup_elset, name='')

Methods

Heterogeneous.get_H_plane_stress(H)

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

Heterogeneous.get_all()

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

Heterogeneous.get_current_local_frame([assembly])

Return the trial material frame in global coordinates.

Heterogeneous.get_local_frame([assembly])

Return material frames, resolved at assembly Gauss points.

Heterogeneous.get_local_rotation([assembly, ...])

Return a Simcoon rotation for the requested material frame.

Heterogeneous.global2local_H(H[, assembly, ...])

Rotate a global stiffness to material axes using Simcoon.

Heterogeneous.global2local_rotation_increment(DR)

Express a finite rotation increment in the initial material basis.

Heterogeneous.global2local_strain(strain[, ...])

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

Heterogeneous.global2local_stress(stress[, ...])

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

Heterogeneous.global2local_tensor(tensor[, ...])

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

Heterogeneous.initialize(assembly, pb)

Initialize the constitutive law for the current problem.

Heterogeneous.local2global_H(H[, assembly, ...])

Rotate a material stiffness to global axes using Simcoon.

Heterogeneous.local2global_strain(strain[, ...])

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

Heterogeneous.local2global_stress(stress[, ...])

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

Heterogeneous.reset()

Reset the constitutive law.

Heterogeneous.set_density(density)

Set the mass density associated with this mechanical material.

Heterogeneous.set_local_frame(local_frame[, ...])

Define the material coordinate frame.

Heterogeneous.set_start(assembly, pb)

Begin a new time iteration.

Heterogeneous.to_start(assembly, pb)

Restart the current time iteration.

Heterogeneous.update(assembly, pb)

Update the constitutive law for the current problem state.

Heterogeneous.is_isotropic

Heterogeneous.manages_material_frame

Heterogeneous.name

Name of the constitutive law.

Heterogeneous.is_initialized

Tag set to True once the law is intialized.