pyxfem.solidmechanics.lefm module
Created on Mon Mar 27 11:48:03 2023
@author: nchevaug Tools for Linear fracture mechanics.
- class pyxfem.solidmechanics.lefm.ElasticPbWilliamsonBC(mesh: SMesh, dirichlet_vertices, mat: LinearIsotropeElasticMaterial, coef_modeI, coef_modeII)[source]
Bases:
objectclass to solve a standard lefm crack problem on a mesh conform to the crack where the crack goes from (-inf, 0.) to (0,0) input : - A 2d sMesh
a map that give average traction on each edge with neumann BC the material stiffness operator
- class pyxfem.solidmechanics.lefm.WilliamsField(mat, coeffs_modeI=None, coeffs_modeII=None)[source]
Bases:
ElasticField- Exact field from williams expansion (crack tip is at (0,0), x axis aligned with the crack)
^ y | |
______o—> x crack
- class pyxfem.solidmechanics.lefm.WilliamsSerie(material_param: LinearIsotropeElasticMaterial)[source]
Bases:
objectTools for crack tip williams serie expansion of the elastic field Mode 1 williams serie with T and B stress A0, B0, B1 -> rigid body motion (x, y, theta respectivelly) ux = A0 * (kappa+1)/2/mu uy = B0 * (kappa+1)/2/mu uxr = (kappa+1)/2/mu B2(-rsin(theta)) uyr = (kappa+1)/2/mu B2( rcos(theta)) A1 = KI/sqrt(2*pi) B1 = -KII/sqrt(2*pi) A2 = 4T
- static fII_tenseur2(n, theta, notation='tensor2D')[source]
return the part that depends only on theta and n (the term of the serie) of the stress tensor for mode II (shear) t2.shape = (3, theta.shape) using voight notation : t2[0] : s11 t2[1] : s22 t2[2] : s12
- static fI_tenseur2(n, theta, notation='tensor2D')[source]
return the part that depends only on theta and n (the term of the serie) of the stress tensor for mode 1 (openning) t2.shape = (3, theta.shape) using voight notation : t2[…, 0] : s11 t2[;.., 1] : s22 t2[…, 2] : s12
- static gII_vector2(kappa, n, theta)[source]
Return the part of the displacement field that depend on theta for anti symetric mode n
- static gI_vector2(kappa, n, theta)[source]
Return the part of the displacement field that depend on theta for symetric mode n
- stress2d_rtheta(r=1.0, theta=array([-3.14159265, -2.44346095, -1.74532925, -1.04719755, -0.34906585, 0.34906585, 1.04719755, 1.74532925, 2.44346095, 3.14159265]), A=None, B=None)[source]
return the stress field for williams expansion defined by coefficient A and B sigm(r, theta) = An*fn(r)*fIn(theta) + Bn*fn(r)*fIIn(theta) (crack axi - coordinate)
- static stress_rtheta_mode(mode, n, r, theta)[source]
return the stress corresponding to mode 1 or 2, r^(n/2)
- stress_xy(xy, A=None, B=None, compute_sigma33=False)[source]
compute the stress from xy position and values A and B of the williams coefficients
- static stress_xy_mode(mode, n, x, y)[source]
return the stress corresponding to mode 1 or 2, r^(n/2)
- u_rtheta(r=1.0, theta=array([-3.14159265, -2.44346095, -1.74532925, -1.04719755, -0.34906585, 0.34906585, 1.04719755, 1.74532925, 2.44346095, 3.14159265]), A=None, B=None)[source]
return the displacement field for williams expansion defined by coefficient A and B u(r, theta) = An*fn(r)*gIn(theta) + Bn*fn(r)*gIIn(theta) (crack axi - coordinate)
- static u_rtheta_mode(mode, n, r, theta, kappa, mu)[source]
return the displacement corresponding to mode 1 or 2, r^(n/2)
- pyxfem.solidmechanics.lefm.buckner_integrand(u1, t1, u2, t2)[source]
return pointwise value of the brickner interaction integrand between two field on a line u1, t1 and u2, t2 are respectively the displacement and the tension in a direction normale to the line at the point.
- pyxfem.solidmechanics.lefm.check_extract_domain_boundary(showdom=False)[source]
check domain construction for interactions integrales
- pyxfem.solidmechanics.lefm.check_extract_williams_circle()[source]
check williams coefficient extraction in case of exact elastic fields
- pyxfem.solidmechanics.lefm.construct_domain_boundary(mesh: SMesh, cracktipxy, r0)[source]
return list of faces boundary edges and orientation of the boundary edge of a domain containing all the elements that have at least one node in the disk of radius r0
- pyxfem.solidmechanics.lefm.construct_face_domain(mesh: SMesh, cracktipxy, r0)[source]
Return the list of edges on a contour of a domain of all the 2D triangle that has at least on node in the dis of radius r0 centered on cracktipxy.
- class pyxfem.solidmechanics.lefm.crack_coordinate_system(crack_tip_xy, crack_angle)[source]
Bases:
object
- pyxfem.solidmechanics.lefm.extract_williams_from_edge_list(edge_cog, edge_lenght, edge_normal, edge_disp, edge_stress, mat, modeIterms=None, modeIIterms=None)[source]
compute williams coefficient from values at the center of each edge of the contour integrale
- pyxfem.solidmechanics.lefm.extract_williams_from_field_contour(field: ElasticField, cracktipxy, cracktheta, mat, modeIterms, modeIIterms, r, method='trapeze', npt=500, epsabs=1.49e-08, epsrel=1.49e-08)[source]
Extract from the field the williams coefficients (Aterms for mode I, Bterms for mode II) by integrating the buckner integrand on a circle of radius r, using : - trapeze rule with npt points if method ==’trapeze’ - adaptive quadrature from scipy.integrate.quad if method ==’adapt’
(with parameters epsabs and epsrel are passed to quad)
must pass an object field from which one can call stress(xy) and displacement(xy)
- pyxfem.solidmechanics.lefm.extract_williams_from_mesh_contour(mesh: SMesh, vdisp, fstress, cracktipxy, cracktheta, mat, modeIterms=None, modeIIterms=None, r=0.5, plot_bound=False)[source]
- pyxfem.solidmechanics.lefm.get_boundary_edges(mesh: SMesh, faces)[source]
return the list of boundary edge of the list of faces. Considered Boundary if inside the domain mesh (edge connected to 2 triangles) and on the boundary of the list of face (only one of the two faces of each edge is in the list faces) also, return orient that tell if each edge as the same orientation as the corresponding edge of it’s connected face (usefull to compute the external normal)