Source code for pyNastran.bdf.cards.elements.damper

# pylint: disable=C0103,R0902,R0904,R0914,C0111
"""
All damper elements are defined in this file.  This includes:

 * CDAMP1
 * CDAMP2
 * CDAMP3
 * CDAMP4
 * CDAMP5
 * CVISC

All damper elements are DamperElement and Element objects.
"""
from __future__ import (nested_scopes, generators, division, absolute_import,
                        print_function, unicode_literals)

from pyNastran.bdf.cards.baseCard import Element
from pyNastran.bdf.bdfInterface.assign_type import (integer, integer_or_blank,
                                                    double)
from pyNastran.bdf.field_writer_8 import print_card_8


[docs]class DamperElement(Element): def __init__(self, card, data): Element.__init__(self, card, data)
[docs]class LineDamper(DamperElement): def __init__(self, card, data): DamperElement.__init__(self, card, data)
[docs] def cross_reference(self, model): msg = ' which is required by %s eid=%s' % (self.type, self.eid) self.nodes = model.Nodes(self.nodes, msg=msg) self.pid = model.Property(self.pid, msg=msg)
[docs]class CDAMP1(LineDamper): type = 'CDAMP1' _field_map = { 1: 'eid', 2:'pid', 'c1':4, 'c2':6, }
[docs] def _update_field_helper(self, n, value): if n == 3: self.nodes[0] = value elif n == 5: self.nodes[1] = value else: raise KeyError('Field %r=%r is an invalid %s entry.' % (n, value, self.type))
def __init__(self, card=None, data=None, comment=''): LineDamper.__init__(self, card, data) if comment: self._comment = comment if card: self.eid = integer(card, 1, 'eid') self.pid = integer(card, 2, 'pid') nids = [integer_or_blank(card, 3, 'g1', 0), integer_or_blank(card, 5, 'g2', 0)] #: component number self.c1 = integer_or_blank(card, 4, 'c1', 0) self.c2 = integer_or_blank(card, 6, 'c2', 0) assert len(card) <= 7, 'len(CDAMP1 card) = %i' % len(card) else: self.eid = data[0] self.pid = data[1] nids = [data[2], data[4]] self.c1 = data[3] self.c2 = data[5] self.prepare_node_ids(nids, allow_empty_nodes=True) assert len(self.nodes) == 2 msg = 'on\n%s\n is invalid validComponents=[0,1,2,3,4,5,6]' % str(self) assert self.c1 in [0, 1, 2, 3, 4, 5, 6], 'c1=|%s| %s' % (self.c1, msg) assert self.c2 in [0, 1, 2, 3, 4, 5, 6], 'c2=|%s| %s' % (self.c2, msg)
[docs] def _verify(self, xref=True): eid = self.Eid() pid = self.Pid() b = self.B() nids = self.node_ids assert isinstance(eid, int) assert isinstance(pid, int) assert isinstance(b, float) for i, nid in enumerate(nids): assert isinstance(nid, int), 'nid%i is not an integer; nid=%s' %(i, nid) if xref: assert self.pid.type in ['PDAMP'], 'pid=%i self.pid.type=%s' % (pid, self.pid.type)
[docs] def Eid(self): return self.eid
[docs] def nodeIDs(self): """deprecated""" return self.node_ids
@property def node_ids(self): return [0 if nid is None else nid for nid in self._nodeIDs(allowEmptyNodes=True)] @node_ids.setter def node_ids(self, value): raise ValueError("You cannot set node IDs like this...modify the node objects")
[docs] def _is_same_card(self, elem, debug=False): if self.type != elem.type: return False fields1 = [self.eid, self.Pid()] + self.node_ids + [self.c1, self.c2] fields2 = [elem.eid, elem.Pid()] + elem.nodeIDs() + [elem.c1, elem.c2] if debug: print("fields1=%s fields2=%s" % (fields1, fields2)) return self._is_same_fields(fields1, fields2)
[docs] def B(self): return self.pid.b
[docs] def cross_reference(self, model): msg = ' which is required by CDAMP1 eid=%s' % self.eid self.nodes = model.Nodes(self.nodes, allowEmptyNodes=True, msg=msg) pid = self.pid if pid in model.properties: self.pid = model.Property(pid, msg=msg) elif pid in model.pdampt: self.pid = model.pdampt[pid] else: pids = model.properties.keys() + model.pdampt.keys() pids.sort() msg = 'pid=%i not found which is required by CDAMP1 eid=%i. Allowed Pids=%s' % (self.pid, self.eid, pids) raise KeyError(msg)
[docs] def raw_fields(self): nodes = self.node_ids fields = ['CDAMP1', self.eid, self.Pid(), nodes[0], self.c1, nodes[1], self.c2] return fields
[docs] def write_card(self, size=8, is_double=False): card = self.raw_fields() return self.comment() + print_card_8(card)
[docs]class CDAMP2(LineDamper): type = 'CDAMP2' _field_map = { 1: 'eid', 2:'b', 'c1':4, 'c2':6, }
[docs] def _update_field_helper(self, n, value): if n == 3: self.nodes[0] = value elif n == 5: self.nodes[1] = value else: raise KeyError('Field %r=%r is an invalid %s entry.' % (n, value, self.type))
def __init__(self, card=None, data=None, comment=''): LineDamper.__init__(self, card, data) if comment: self._comment = comment if card: self.eid = integer(card, 1, 'eid') #: Value of the scalar damper (Real) self.b = double(card, 2, 'b') nids = [integer_or_blank(card, 3, 'n1', 0), integer_or_blank(card, 5, 'n2', 0)] #: component number self.c1 = integer_or_blank(card, 4, 'c1', 0) self.c2 = integer_or_blank(card, 6, 'c2', 0) assert len(card) <= 7, 'len(CDAMP2 card) = %i' % len(card) else: self.eid = data[0] self.b = data[1] nids = [data[2], data[4]] self.c1 = data[3] self.c2 = data[5] self.prepare_node_ids(nids, allow_empty_nodes=True) assert len(self.nodes) == 2 msg = 'on\n%s\n is invalid validComponents=[0,1,2,3,4,5,6]' % str(self) assert self.c1 in [0, 1, 2, 3, 4, 5, 6], 'c1=%r %s' % (self.c1, msg) assert self.c2 in [0, 1, 2, 3, 4, 5, 6], 'c2=%r %s' % (self.c2, msg)
[docs] def _verify(self, xref=True): eid = self.Eid() b = self.B() nids = self.node_ids assert isinstance(eid, int) assert isinstance(b, float) for i, nid in enumerate(nids): assert isinstance(nid, int), 'nid%i is not an integer; nid=%s' %(i, nid)
[docs] def Eid(self): return self.eid
[docs] def B(self): return self.b
[docs] def cross_reference(self, model): msg = ' which is required by CDAMP2 eid=%s' % self.eid self.nodes = model.Nodes(self.nodes, allowEmptyNodes=True, msg=msg)
[docs] def nodeIDs(self): return self.node_ids
@property def node_ids(self): return [0 if nid is None else nid for nid in self._nodeIDs(allowEmptyNodes=True)] @node_ids.setter def node_ids(self, value): raise ValueError("You cannot set node IDs like this...modify the node objects")
[docs] def raw_fields(self): nodes = self.node_ids fields = ['CDAMP2', self.eid, self.b, nodes[0], self.c1, nodes[1], self.c2] return fields
[docs] def write_card(self, size=8, is_double=False): card = self.raw_fields() return self.comment() + print_card_8(card)
[docs]class CDAMP3(LineDamper): type = 'CDAMP3' _field_map = { 1: 'eid', 2:'pid', }
[docs] def _update_field_helper(self, n, value): if n == 3: self.nodes[0] = value elif n == 4: self.nodes[1] = value else: raise KeyError('Field %r=%r is an invalid %s entry.' % (n, value, self.type))
def __init__(self, card=None, data=None, comment=''): LineDamper.__init__(self, card, data) if comment: self._comment = comment if card: self.eid = integer(card, 1, 'eid') self.pid = integer(card, 2, 'pid') nids = [integer_or_blank(card, 3, 's1', 0), integer_or_blank(card, 4, 's2', 0)] assert len(card) <= 5, 'len(CDAMP3 card) = %i' % len(card) else: self.eid = data[0] self.pid = data[1] nids = [data[2], data[3]] self.prepare_node_ids(nids, allow_empty_nodes=True) assert len(self.nodes) == 2
[docs] def _verify(self, xref=True): eid = self.Eid() pid = self.Pid() b = self.B() nids = self.node_ids assert isinstance(eid, int) assert isinstance(pid, int) assert isinstance(b, float) for i, nid in enumerate(nids): assert isinstance(nid, int), 'nid%i is not an integer; nid=%s' %(i, nid) if xref: assert self.pid.type in ['PDAMP'], 'pid=%i self.pid.type=%s' % (pid, self.pid.type)
[docs] def Eid(self): return self.eid
[docs] def B(self): return self.pid.b
[docs] def cross_reference(self, model): msg = ' which is required by CDAMP3 eid=%s' % self.eid self.nodes = model.Nodes(self.nodes, allowEmptyNodes=True, msg=msg) self.pid = model.Property(self.pid, msg=msg)
[docs] def nodeIDs(self): """deprecated""" return self.node_ids
@property def node_ids(self): return [0 if nid is None else nid for nid in self._nodeIDs(allowEmptyNodes=True) ] @node_ids.setter def node_ids(self, value): raise ValueError("You cannot set node IDs like this...modify the node objects")
[docs] def raw_fields(self): nodes = self.node_ids list_fields = ['CDAMP3', self.eid, self.pid, nodes[0], nodes[1]] return list_fields
[docs] def write_card(self, size=8, is_double=False): card = self.raw_fields() return self.comment() + print_card_8(card)
[docs]class CDAMP4(LineDamper): type = 'CDAMP4' _field_map = { 1: 'eid', 2:'b', }
[docs] def _update_field_helper(self, n, value): if n == 3: self.nodes[0] = value elif n == 4: self.nodes[1] = value else: raise KeyError('Field %r=%r is an invalid %s entry.' % (n, value, self.type))
def __init__(self, card=None, data=None, comment=''): LineDamper.__init__(self, card, data) if comment: self._comment = comment if card: self.eid = integer(card, 1, 'eid') #: Value of the scalar damper (Real) self.b = double(card, 2, 'b') nids = [integer_or_blank(card, 3, 'n1', 0), integer_or_blank(card, 4, 'n2', 0)] assert len(card) <= 5, 'len(CDAMP4 card) = %i' % len(card) else: self.eid = data[0] self.b = data[1] nids = [data[2], data[3]] self.prepare_node_ids(nids, allow_empty_nodes=True) assert len(self.nodes) == 2
[docs] def _verify(self, xref=True): eid = self.Eid() b = self.B() nids = self.node_ids assert isinstance(eid, int) assert isinstance(b, float) for i, nid in enumerate(nids): assert isinstance(nid, int), 'nid%i is not an integer; nid=%s' %(i, nid)
[docs] def Eid(self): return self.eid
[docs] def B(self): return self.b
[docs] def cross_reference(self, model): msg = ' which is required by CDAMP4 eid=%s' % self.eid self.nodes = model.Nodes(self.nodes, allowEmptyNodes=True, msg=msg)
[docs] def nodeIDs(self): """deprecated""" return self.node_ids
@property def node_ids(self): return self._nodeIDs(allowEmptyNodes=True) @node_ids.setter def node_ids(self, value): raise ValueError("You cannot set node IDs like this...modify the node objects")
[docs] def raw_fields(self): nodes = self.node_ids list_fields = ['CDAMP4', self.eid, self.b, nodes[0], nodes[1]] return list_fields
[docs] def write_card(self, size=8, is_double=False): card = self.raw_fields() return self.comment() + print_card_8(card)
[docs]class CDAMP5(LineDamper): type = 'CDAMP5' _field_map = { 1: 'eid', 2:'pid', }
[docs] def _update_field_helper(self, n, value): if n == 3: self.nodes[0] = value elif n == 4: self.nodes[1] = value else: raise KeyError('Field %r=%r is an invalid %s entry.' % (n, value, self.type))
def __init__(self, card=None, data=None, comment=''): LineDamper.__init__(self, card, data) if comment: self._comment = comment if card: self.eid = integer(card, 1, 'eid') #: Property ID self.pid = integer(card, 2, 'pid') nids = [integer_or_blank(card, 3, 'n1', 0), integer_or_blank(card, 4, 'n2', 0)] assert len(card) <= 5, 'len(CDAMP5 card) = %i' % len(card) else: self.eid = data[0] self.pid = data[1] nids = [data[2], data[3]] self.prepare_node_ids(nids, allow_empty_nodes=True) assert len(self.nodes) == 2
[docs] def _verify(self, xref=True): eid = self.Eid() pid = self.Pid() b = self.B() nids = self.node_ids assert isinstance(eid, int) assert isinstance(pid, int) assert isinstance(b, float) for i, nid in enumerate(nids): assert isinstance(nid, int), 'nid%i is not an integer; nid=%s' %(i, nid) if xref: assert self.pid.type in ['PDAMP5'], 'pid=%i self.pid.type=%s' % (pid, self.pid.type)
[docs] def cross_reference(self, model): msg = '' self.nodes = model.Nodes(self.nodes, allowEmptyNodes=True, msg=msg) self.pid = model.Property(self.pid, msg=msg)
[docs] def Eid(self): return self.eid
[docs] def B(self): return self.pid.b
[docs] def nodeIDs(self): """deprecated""" return self.node_ids
@property def node_ids(self): return [0 if nid is None else nid for nid in self._nodeIDs(allowEmptyNodes=True)] @node_ids.setter def node_ids(self, value): raise ValueError("You cannot set node IDs like this...modify the node objects")
[docs] def raw_fields(self): nodes = self.node_ids list_fields = ['CDAMP5', self.eid, self.Pid(), nodes[0], nodes[1]] return list_fields
[docs] def write_card(self, size=8, is_double=False): card = self.raw_fields() return self.comment() + print_card_8(card)
[docs]class CVISC(LineDamper): type = 'CVISC' _field_map = { 1: 'eid', 2:'pid', }
[docs] def _update_field_helper(self, n, value): if n == 3: self.nodes[0] = value elif n == 4: self.nodes[1] = value else: raise KeyError('Field %r=%r is an invalid %s entry.' % (n, value, self.type))
def __init__(self, card=None, data=None, comment=''): LineDamper.__init__(self, card, data) if comment: self._comment = comment if card: self.eid = integer(card, 1, 'eid') self.pid = integer_or_blank(card, 2, 'pid', self.eid) nids = [integer_or_blank(card, 3, 'n1', 0), integer_or_blank(card, 4, 'n2', 0)] assert len(card) <= 5, 'len(CVISC card) = %i' % len(card) else: self.eid = data[0] self.pid = data[1] nids = data[2:4] self.prepare_node_ids(nids) assert len(self.nodes) == 2
[docs] def _verify(self, xref=True): eid = self.Eid() pid = self.Pid() b = self.B() nids = self.node_ids assert isinstance(eid, int) assert isinstance(pid, int) assert isinstance(b, float) for i, nid in enumerate(nids): assert isinstance(nid, int), 'nid%i is not an integer; nid=%s' %(i, nid) if xref: assert self.pid.type in ['PVISC'], 'pid=%i self.pid.type=%s' % (pid, self.pid.type)
[docs] def Eid(self): return self.eid
[docs] def B(self): return self.pid.ce
[docs] def nodeIDs(self): """deprecated""" return self.node_ids
@property def node_ids(self): return [0 if nid is None else nid for nid in self._nodeIDs(allowEmptyNodes=True)] @node_ids.setter def node_ids(self, value): raise ValueError("You cannot set node IDs like this...modify the node objects")
[docs] def raw_fields(self): list_fields = ['CVISC', self.eid, self.Pid()] + self.node_ids return list_fields
[docs] def repr_fields(self): return self.raw_fields()
[docs] def write_card(self, size=8, is_double=False): card = self.raw_fields() return self.comment() + print_card_8(card)