Source code for OpenSTRAN.Members

from .Member import Member
from .Nodes import Nodes
from .Node import Node

from dataclasses import dataclass, field, asdict

from typing import Any


[docs] @dataclass(slots=True) class Members(): """Container class for managing member (element) objects. :ivar nodes: Reference to the global Nodes collection :type nodes: Nodes :ivar count: Number of members added to the collection :type count: int :ivar members: Mapping of member ID to Member object :type members: dict[int, Member] """ nodes: Nodes count: int = 0 members: dict[int, Member] = field(default_factory=dict[int, Member])
[docs] def properties(self) -> dict[str, Any]: """Return the dataclass properties as a dictionary. :returns: Dictionary of this instance's fields :rtype: dict[str, Any] """ return asdict(self)
[docs] def addMember( self, node_i: Node, node_j: Node, i_release: bool = False, j_release: bool = False, E: float = 29000.0, Ixx: float = 88.6, Iyy: float = 2.36, A: float = 4.16, G: float = 12000.0, J: float = 0.0704, mesh: int = 50, bracing: str = "continuous", shape: str = "W12x14", ) -> Member: """Add a member to the model. :param node_i: Start node of the member :type node_i: Node :param node_j: End node of the member :type node_j: Node :param i_release: True if start node is released (pinned). Defaults to False. :type i_release: bool :param j_release: True if end node is released (pinned). Defaults to False. :type j_release: bool :param E: Young's modulus in ksi. Defaults to 29000.0. :type E: float :param Ixx: Moment of inertia about the strong axis in in^4. Defaults to 88.6. :type Ixx: float :param Iyy: Moment of inertia about the weak axis in in^4. Defaults to 2.36. :type Iyy: float :param A: Cross-sectional area in in^2. Defaults to 4.16. :type A: float :param G: Shear modulus in ksi. Defaults to 12000.0. :type G: float :param J: Polar moment of inertia in in^4. Defaults to 0.0704. :type J: float :param mesh: Number of discretizations per member. Defaults to 50. :type mesh: int :param bracing: Bracing type (e.g., "continuous"). Defaults to "continuous". :type bracing: str :param shape: Section shape name (e.g., "W12x14"). Defaults to "W12x14". :type shape: str :returns: The created Member instance :rtype: Member :Example: >>> M1 = frame.members.addMember(N1, N2) >>> M2 = frame.members.addMember(N2, N3) """ self.count += 1 member = Member( self.nodes, node_i, node_j, i_release, j_release, E, Ixx, Iyy, A, G, J, mesh, bracing, shape ) self.members[self.count] = member return member