Source code for fconcrete.Structural.Node

import numpy as np
from fconcrete.helpers import to_unit

[docs]class Node: def __init__(self, x, condition_boundary, length=0): """ Represents a generical node. Node is the delimitation for a beam_element. """ x = to_unit(x, "cm") length = to_unit(length, "cm") self.x = x self.condition_boundary = condition_boundary self.length = length
[docs] @classmethod def SimpleSupport(cls, x, length=0): """ Represents a node with vertical displacement equal to zero. But it allows rotation. Call signatures: fc.Node.SimpleSupport(x, length=0) >>> simple_support_1 = fc.Node.SimpleSupport(100) >>> simple_support_2 = fc.Node.SimpleSupport('1m') >>> repr(simple_support_1) == repr(simple_support_2) True Parameters ---------- x : number or str Position of the node. If it is a number, default unit is cm, but also [length] unit can be given. Example: '20m', '10dm', etc length : number or str, optional Length of the node if applicable. If it is a number, default unit is cm, but also [length] unit can be given. Example: '20m', '10dm', etc. Default is 0. """ return cls(x, [0, 1], length)
[docs] @classmethod def Free(cls, x): """ Represents a node with vertical displacement and rotation. Call signatures: fc.Node.Free(x) >>> free_node_1 = fc.Node.Free(100) >>> free_node_2 = fc.Node.Free('1m') >>> repr(free_node_1) == repr(free_node_2) True Parameters ---------- x : number or str Position of the node. If it is a number, default unit is cm, but also [length] unit can be given. Example: '20m', '10dm', etc """ return cls(x, [1, 1])
[docs] @classmethod def MiddleNode(cls, x): """ Represents a node with vertical displacement and rotation. Call signatures: fc.Node.Free(x) >>> middle_node_1 = fc.Node.MiddleNode(100) >>> middle_node_2 = fc.Node.MiddleNode('1m') >>> repr(middle_node_1) == repr(middle_node_2) True Parameters ---------- x : number or str Position of the node. If it is a number, default unit is cm, but also [length] unit can be given. Example: '20m', '10dm', etc """ return cls(x, [1, 1])
[docs] @classmethod def Crimp(cls, x, length=0): """ Represents a node with vertical displacement and rotation equal to zero. Call signatures: fc.Node.Crimp(x) >>> crimp_node_1 = fc.Node.Crimp(100) >>> crimp_node_2 = fc.Node.Crimp('1m') >>> repr(crimp_node_1) == repr(crimp_node_2) True Parameters ---------- x : number or str Position of the node. If it is a number, default unit is cm, but also [length] unit can be given. Example: '20m', '10dm', etc length : number or str, optional Length of the node if applicable. If it is a number, default unit is cm, but also [length] unit can be given. Example: '20m', '10dm', etc. Default is 0. """ return cls(x, [0, 0], length)
def __repr__(self): return str(self.__dict__)+'\n'
[docs]class Nodes: def __init__(self, nodes): self.nodes = np.array(nodes) self.x = np.array([ node.x for node in nodes ]) self.condition_boundary = np.array([ node.condition_boundary for node in nodes ]) def __repr__(self): return str(self.nodes) def __getitem__(self, key): return self.nodes[key] def __len__(self): return len(self.nodes)