Source code for trusspy.handlers.handler_boundary

# -*- coding: utf-8 -*-
"""
title: TrussPy - Truss Solver for Python
author: Andreas Dutzler
year: 2023
"""

import numpy as np

from ..core.boundary import BoundaryU


[docs]class BoundaryHandler: "Handler for Boundary Conditions" def __init__(self): # Node-based displacement boundary condition self.Unodes = None # UValue: # 1=active (free) DOF # 0=inactive (locked) DOF self.Uvalues = None # NOT IMPLEMENTED # Element based thermal boundary condition self.Telements = None self.Tvalues = None def __enter__(self): return self def __exit__(self, H_type, H_value, H_traceback): pass
[docs] def add_bound_U(self, B, *args, **kwargs): """add displacement boundary""" if "BoundaryU" not in str(type(B)): B = BoundaryU(B, *args, **kwargs) if self.Unodes is None: self.Unodes = np.array([B.node]) self.Uvalues = np.array(B.values) else: self.Unodes = np.append(self.Unodes, B.node) self.Uvalues = np.vstack((self.Uvalues, B.values))
[docs] def del_bound_U(self, label): """delete boundary U by label""" idx = np.where(self.Unodes == label)[0] self.Unodes = np.delete(self.Unodes, idx, axis=0) self.Uvalues = np.delete(self.Uvalues, idx, axis=0)
[docs] def add_bounds_U(self, BB): """add list of displacement boundaries""" for B in BB: self.add_bound_U(B)
[docs] def fix_bounds_U(self, nodelist): # check for undefined DOF --> set them all to free # are nodelist entries in Unodes? mask = np.isin(nodelist, self.Unodes, invert=True) fix_nodes = nodelist[mask] # nodes to fix for n in fix_nodes: B = BoundaryU(n, (1, 1, 1)) self.add_bound_U(B) indices = np.argsort(self.Unodes) self.Unodes = self.Unodes.take(indices) self.Uvalues = self.Uvalues.take(indices, axis=0)
[docs] def add_bound_T(self, B): # add thermal boundary if self.Tnodes is None: self.Tnodes = np.array([B.node]) self.Tvalues = np.array(B.value) else: self.Tnodes = np.append(self.Tnodes, B.node) self.Tvalues = np.vstack((self.Tvalues, B.value))
[docs] def add_bounds_T(self, BB): # add list of thermal boundaries for B in BB: self.add_bound_T(B)