Domain Module
The domain module provides classes and utilities for creating and managing 2D domains for finite element meshing. It includes support for creating subdomains, connecting them, and specifying boundary conditions.
Classes
Domain Classes
Domain2D
Base class for 2D domains.
from ttfemesh.domain import Domain2D
domain = Domain2D(subdomains, connections, boundary_condition)
Parameters:
subdomains(List[Subdomain2D]): List of subdomains in the domainconnections(List[Union[CurveConnection2D, VertexConnection2D]]): List of connections between subdomainsboundary_condition(DirichletBoundary2D): Boundary conditions for the domain
Methods:
plot(): Visualize the domain
Subdomain Classes
Subdomain2D
Base class for 2D subdomains.
Quad
A quadrilateral subdomain defined by four vertices.
Factory Classes
RectangleFactory
Factory class for creating rectangular subdomains.
from ttfemesh.domain import RectangleFactory
rectangle = RectangleFactory.create(lower_left, upper_right)
Parameters:
lower_left(Tuple[float, float]): Coordinates of the lower-left cornerupper_right(Tuple[float, float]): Coordinates of the upper-right corner
QuadFactory
Factory class for creating quadrilateral subdomains.
Connection Classes
CurveConnection2D
Represents a connection between two subdomains along a curve.
from ttfemesh.domain import CurveConnection2D
connection = CurveConnection2D(domain_idxs, curve_idxs)
Parameters:
domain_idxs(List[int]): Indices of the connected subdomainscurve_idxs(List[int]): Indices of the curves in each subdomain
VertexConnection2D
Represents a connection between two subdomains at a vertex.
Boundary Condition Classes
DirichletBoundary2D
Specifies Dirichlet boundary conditions for a domain.
from ttfemesh.domain import DirichletBoundary2D
bc = DirichletBoundary2D(boundary_edges)
Parameters:
boundary_edges(List[Tuple[int, int]]): List of (subdomain_idx, edge_idx) tuples specifying the boundary edges
Curve Classes
Curve
Base class for curves.
Line2D
A straight line segment in 2D.
CircularArc2D
A circular arc in 2D.
ParametricCurve2D
A parametric curve in 2D.
Examples
Creating a Simple Domain
from ttfemesh.domain import RectangleFactory, CurveConnection2D, DirichletBoundary2D, Domain2D
# Create two rectangles
rectangle1 = RectangleFactory.create((0, 0), (2, 1))
rectangle2 = RectangleFactory.create((2, 0), (3, 1))
# Connect them
connection = CurveConnection2D([0, 1], [1, 3])
# Set boundary conditions
bc = DirichletBoundary2D([(0, 3), (1, 1)])
# Create the domain
domain = Domain2D([rectangle1, rectangle2], [connection], bc)
domain.plot()
Creating a Domain with a Circular Arc
from ttfemesh.domain import RectangleFactory, CircularArc2D, CurveConnection2D, DirichletBoundary2D, Domain2D
# Create a rectangle
rectangle = RectangleFactory.create((0, 0), (1, 1))
# Create a circular arc
arc = CircularArc2D(center=(1, 0.5), radius=0.5, start_angle=0, end_angle=180)
# Connect them
connection = CurveConnection2D([0, 1], [1, 0])
# Set boundary conditions
bc = DirichletBoundary2D([(0, 0), (0, 2)])
# Create the domain
domain = Domain2D([rectangle, arc], [connection], bc)
domain.plot()