Mesh13#

Mesh a heterogeneous RVE with cracks.

Mesh13
Mesh13
Mesh13
 13 from EasyFEA import Display, ElemType, PyVista
 14 from EasyFEA.Geoms import Point, Line, Domain, Circle
 15
 16 if __name__ == "__main__":
 17     Display.Clear()
 18
 19     # ----------------------------------------------
 20     # Configuration
 21     # ----------------------------------------------
 22
 23     # geom
 24     L = 1
 25
 26     # mesh
 27     elemType = ElemType.TRI3
 28     meshSize = L / 40
 29
 30     # ----------------------------------------------
 31     # Functions
 32     # ----------------------------------------------
 33
 34     def Create_Crack(
 35         pt1: tuple[float, float], pt2: tuple[float, float], isOpen=True
 36     ) -> Line:
 37         """Creates a crack.
 38
 39         Parameters
 40         ----------
 41         pt1 : tuple[float, float]
 42             Point 1 (x, y)
 43         pt2 : tuple[float, float]
 44             Point 2 (x, y)
 45         isOpen : bool, optional
 46             The crack is open, by default True
 47
 48         Returns
 49         -------
 50         Line
 51             The crack
 52         """
 53
 54         assert len(pt1) == 2, "Must give 2 coordinates"
 55         assert len(pt2) == 2, "Must give 2 coordinates"
 56
 57         pt1 = Point(*pt1)
 58         pt2 = Point(*pt2)
 59
 60         return Line(pt1, pt2, meshSize, isOpen)
 61
 62     def Create_Circle(pt: tuple[float, float], diam: float, isFilled=True) -> Circle:
 63         """Creates a circle.
 64
 65         Parameters
 66         ----------
 67         pt : tuple[float, float]
 68             center point (x, y)
 69         diam : float
 70             diameter
 71         isFilled : bool, optional
 72             the enclosed region is filled (solid inclusion), by default True
 73
 74         Returns
 75         -------
 76         Circle
 77             The circle
 78         """
 79
 80         assert len(pt) == 2, "Must give 2 coordinates"
 81
 82         center = Point(*pt)
 83
 84         return Circle(center, diam, meshSize / 2, isFilled=isFilled)
 85
 86     # ----------------------------------------------
 87     # Mesh
 88     # ----------------------------------------------
 89
 90     # contour
 91     contour = Domain(Point(), Point(L, L), meshSize)
 92
 93     # circles
 94     circle1 = Create_Circle((L / 4, L / 4), L / 10)
 95     circle2 = Create_Circle((3 * L / 4, L / 4), L / 8)
 96     circle3 = Create_Circle((3 * L / 4, 3 * L / 4), L / 6)
 97     circle4 = Create_Circle((L / 4, 3 * L / 4), L / 5)
 98     circle5 = Create_Circle((L / 2, L / 2), L / 3, isFilled=False)
 99     circle6 = Create_Circle((L, L), L / 6, isFilled=False)
100
101     inclusions = [circle1, circle2, circle3, circle4, circle5]
102
103     # cracks
104     crack1 = Create_Crack((3 * L / 5, L / 10), (4 * L / 5, L / 10))
105     crack2 = Create_Crack((L / 10, L / 2), (2 * L / 10, L / 2 - L / 10))
106     crack3 = Create_Crack(
107         (8 * L / 10, 5 * L / 10), (8 * L / 10 + L / 20, 5 * L / 10 + L / 20)
108     )
109
110     cracks = [crack1, crack2, crack3]
111
112     PyVista.Plot_Geoms([contour, *inclusions, *cracks, circle6]).show()
113
114     # mesh
115     mesh = contour.Mesh_2D(inclusions, elemType, cracks, additionalSurfaces=[circle6])
116
117     # ----------------------------------------------
118     # Display
119     # ----------------------------------------------
120
121     PyVista.Plot_Mesh(mesh).show()
122     PyVista.Plot_Tags(mesh).show()

Total running time of the script: (0 minutes 3.249 seconds)

Gallery generated by Sphinx-Gallery