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: theconvert_tangentoption offedoo.weakform.StressEquilibriumcannot 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
Convert a full 3D tangent matrix H in an equivalent behavior in 2D with the plane stress assumption.
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
assemblyGauss 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.
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.
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.
Name of the constitutive law.
Tag set to True once the law is intialized.