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

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

 *   PDAMP
 *   PDAMP5 (not implemented)
 *   PDAMPT
 *   PVISC

All damper properties are DamperProperty and Property objects.
"""
from __future__ import (nested_scopes, generators, division, absolute_import,
                        print_function, unicode_literals)

from pyNastran.bdf.field_writer_8 import set_blank_if_default, print_card_8
from pyNastran.bdf.field_writer_16 import print_card_16
from pyNastran.bdf.cards.baseCard import Property
from pyNastran.bdf.bdfInterface.assign_type import (integer, integer_or_blank,
    double, double_or_blank)


[docs]class DamperProperty(Property): def __init__(self, card, data): Property.__init__(self, card, data)
[docs] def cross_reference(self, model): pass
[docs]class PDAMP(DamperProperty): type = 'PDAMP' _field_map = { 1: 'pid', 2:'b', } def __init__(self, card=None, nPDAMP=0, data=None, comment=''): DamperProperty.__init__(self, card, data) if comment: self._comment = comment nOffset = nPDAMP * 2 if card: # 3 PDAMP properties can be defined on 1 PDAMP card #: Property ID self.pid = integer(card, 1 + nOffset, 'pid') # these are split into 2 separate cards #: Force per unit velocity (Real) self.b = double(card, 2 + nOffset, 'b') else: self.pid = data[0] self.b = data[1]
[docs] def B(self): return self.b
[docs] def _verify(self, xref=True): pid = self.Pid() b = self.B() assert isinstance(pid, int), 'pid=%r\n%s' % (pid, str(self)) assert isinstance(b, float), 'b=%r\n%s' % (b, str(self))
[docs] def raw_fields(self): list_fields = ['PDAMP', self.pid, self.b] return list_fields
[docs] def repr_fields(self): return self.raw_fields()
[docs] def write_card(self, size=8, is_double=False): card = self.repr_fields() if size == 8: return self.comment() + print_card_8(card) return self.comment() + print_card_16(card)
[docs]class PDAMP5(DamperProperty): type = 'PDAMP5' _field_map = { 1: 'pid', 2:'mid', 3:'b', } def __init__(self, card=None, data=None, comment=''): """ Defines the damping multiplier and references the material properties for damping. CDAMP5 is intended for heat transfer analysis only. """ DamperProperty.__init__(self, card, data) if comment: self._comment = comment if card: #: Property ID self.pid = integer(card, 1, 'pid') #: Material ID self.mid = integer(card, 2, 'mid') #: Damping multiplier. (Real > 0.0) #: B is the mass that multiplies the heat capacity CP on the MAT4 #: or MAT5 entry. self.b = double(card, 3, 'b') assert len(card) == 4, 'len(PDAMP5 card) = %i' % len(card) else: self.pid = data[0] self.mid = data[1] self.b = data[2]
[docs] def _verify(self, xref=True): pid = self.Pid() #b = self.B() assert isinstance(pid, int), 'pid=%r\n%s' % (pid, str(self))
#assert isinstance(b, float), 'b=%r\n%s' % (b, str(self))
[docs] def cross_reference(self, model): self.mid = model.Material(self.mid)
[docs] def Mid(self): if isinstance(self.mid, int): return self.mid return self.mid.mid
[docs] def repr_fields(self): return self.raw_fields()
[docs] def raw_fields(self): list_fields = ['PDAMP5', self.pid, self.Mid(), self.b] return list_fields
[docs] def write_card(self, size=8, is_double=False): card = self.repr_fields() if size == 8: return self.comment() + print_card_8(card) return self.comment() + print_card_16(card)
[docs]class PDAMPT(DamperProperty): type = 'PDAMPT' _field_map = { 1: 'pid', 2:'tbid', } def __init__(self, card=None, data=None, comment=''): DamperProperty.__init__(self, card, data) if comment: self._comment = comment if card: #: Property ID self.pid = integer(card, 1, 'pid') #: Identification number of a TABLEDi entry that defines the #: damping force per-unit velocity versus frequency relationship self.tbid = integer_or_blank(card, 2, 'tbid', 0) assert len(card) <= 3, 'len(PDAMPT card) = %i' % len(card) else: self.pid = data[0] self.tbid = data[1]
[docs] def _verify(self, xref=False): pid = self.Pid() assert isinstance(pid, int), 'pid=%r' % pid
[docs] def cross_reference(self, model): self.tbid = model.Table(self.tbid)
[docs] def Tbid(self): if self.tbid == 0: return None elif isinstance(self.tbid, int): return self.tbid return self.tbid.tid
[docs] def repr_fields(self): return self.raw_fields()
[docs] def raw_fields(self): list_fields = ['PDAMPT', self.pid, self.Tbid()] return list_fields
[docs] def write_card(self, size=8, is_double=False): card = self.repr_fields() if size == 8: return self.comment() + print_card_8(card) return self.comment() + print_card_16(card)
[docs]class PVISC(DamperProperty): type = 'PVISC' _field_map = { 1: 'pid', 2:'ce', 3:'cr', } def __init__(self, card=None, nPVISC=0, data=None, comment=''): DamperProperty.__init__(self, card, data) if comment: self._comment = comment if card: self.pid = integer(card, 1 + 4 * nPVISC, 'pid') self.ce = double(card, 2 + 4 * nPVISC, 'ce') self.cr = double_or_blank(card, 3 + 4 * nPVISC, 'cr', 0.) else: self.pid = data[0] self.ce = data[1] self.cr = data[2]
[docs] def cross_reference(self, model): pass
[docs] def _verify(self, xref=False): pid = self.Pid() assert isinstance(pid, int), 'pid=%r' % pid
[docs] def raw_fields(self): list_fields = ['PVISC', self.pid, self.ce, self.cr] return list_fields
[docs] def repr_fields(self): cr = set_blank_if_default(self.cr, 0.) list_fields = ['PVISC', self.pid, self.ce, cr] return list_fields
[docs] def write_card(self, size=8, is_double=False): card = self.repr_fields() if size == 8: return self.comment() + print_card_8(card) return self.comment() + print_card_16(card)