#pylint: disable=C0301,C0111,C0103,W0613
from six.moves import range
from struct import unpack, Struct
#from pyNastran.bdf.cards.constraints import SPC,SPCADD
from pyNastran.bdf.cards.elements.rigid import RBE2
from pyNastran.bdf.cards.constraints import SUPORT, SPCD, SPC, SPC1
[docs]class GEOM4(object):
[docs] def add_constraint_SPC(self, constraint):
raise RuntimeError('this should be overwritten')
[docs] def add_rigid_element(self, constraint):
raise RuntimeError('this should be overwritten')
[docs] def add_suport(self, constraint):
raise RuntimeError('this should be overwritten')
def _read_geom4_4(self, data):
if self.read_mode == 1:
return len(data)
return self._read_geom_4(self._geom4_map, data)
def __init__(self):
self.card_count = {}
self._geom4_map = {
(5561, 76, 215): ['ASET', self._readASET], # record 1 - not done
(5571, 77, 216): ['ASET1', self._readASET1], # record 2 - not done
(10200, 102, 473): ['BNDGRID', self._readBNDGRID],# record 3 - not done
(1510, 15, 328): ['CYAX', self._readCYAX], # record 8 - not done
(5210, 52, 257): ['CYJOIN', self._readCYJOIN], # record 9 - not done
(1710, 17, 330): ['CYSYM', self._readCYSYM], # record 11 - not done
(4901, 49, 17): ['MPC', self._readMPC], # record 16 - not done
(4891, 60, 83): ['MPCADD', self._readMPCADD], # record 17 - not done
(4951, 63, 92): ['OMIT1', self._readOMIT1], # record 19 - not done
(610, 6, 316): ['QSET1', self._readQSET1], # record 21 - not done
(6601, 66, 292): ['RBAR', self._readRBAR], # record 22 - not done
(6801, 68, 294): ['RBE1', self._readRBE1], # record 23 - not done
(6901, 69, 295): ['RBE2', self._readRBE2], # record 24 - buggy
(7101, 71, 187): ['RBE3', self._readRBE3], # record 25 - not done
(6501, 65, 291): ['RROD', self._readRROD], # record 30 - not done
(7001, 70, 186): ['RSPLINE', self._readRSPLINE], # record 31 - not done
(7201, 72, 398): ['RSSCON', self._readRSSCON], # record 32 - not done
(1210, 12, 322): ['SEQSET1', self._readSEQSET1], # record 40 - not done
(5501, 55, 16): ['SPC', self._readSPC], # record 44 - buggy
(5481, 58, 12): ['SPC1', self._readSPC1], # record 45 - not done
(5491, 59, 13): ['SPCADD', self._readSPCADD], # record 46 - not done
(5110, 51, 256): ['SPCD', self._readSPCD], # record 47 - buggy
(5601, 56, 14): ['SUPORT', self._readSUPORT], # record 59 - not done
(10100, 101, 472): ['SUPORT1', self._readSUPORT1], # record 60 - not done
(2010, 20, 193) : ['USET', self._readUSET], # Record 62 -- USET(2010,20,193)
(1310, 13, 247): ['', self._readFake], # record
(4901, 49, 420017): ['', self._readFake], # record
(5561, 76, 0): ['', self._readFake], # record
(5110, 51, 256): ['', self._readFake], # record
(610, 6, 0): ['', self._readFake], # record
(5110, 51, 620256): ['', self._readFake], # record
(5501, 55, 620016): ['', self._readFake], # record
(5001, 50, 15): ['', self._readFake], # record
(410, 4, 0): ['', self._readFake], # record
(110, 1, 584): ['', self._readFake], # record
(210, 2, 585): ['', self._readFake], # record
(6210, 62, 344): ['', self._readFake], # record
(510, 5, 315): ['', self._readFake], # record
(6701, 67, 293): ['', self._readFake], # record
(8801, 88, 9022): ['', self._readFake], # record
(9001, 90, 9024): ['', self._readFake], # record
(9901, 99, 80): ['', self._readFake], # record
(1010, 10, 320): ['', self._readFake], # record
(9801, 98, 79): ['', self._readFake], # record
}
def _readASET(self, data, n):
"""ASET(5561,76,215) - Record 1"""
self.log.debug('skipping ASET in GEOM4\n')
return n
def _readASET1(self, data, n):
"""ASET1(5571,77,216) - Record 2"""
self.log.debug('skipping ASET1 in GEOM4\n')
return n
def _readBNDGRID(self, data, n):
"""BNDGRID(10200,102,473) - Record 3 """
self.log.debug('skipping BNDGRID in GEOM4\n')
return n
# BSET
# BSET1
# CSET
# CSET1
def _readCYAX(self, data, n):
"""CYAX(1510,15,328) - Record 8 """
self.log.debug('skipping CYAX in GEOM4\n')
return n
def _readCYJOIN(self, data, n):
"""CYJOIN(5210,52,257) - Record 9 """
self.log.debug('skipping CYJOIN in GEOM4\n')
return n
# CYSUP
def _readCYSYM(self, data, n):
"""CYSYM(1710,17,330) - Record 11"""
self.log.debug('skipping CYSYM in GEOM4\n')
return n
# EGENDT
# GMBC
# GMSPC
def _readMPC(self, data, n):
"""MPC(4901,49,17) - Record 16"""
self.log.debug('skipping MPC in GEOM4\n')
return n
def _readMPCADD(self, data, n):
"""MPCADD(4891,60,83) - Record 17"""
self.log.debug('skipping MPCADD in GEOM4\n')
return n
def _readOMIT1(self, data, n):
"""OMIT1(4951,63,92) - Record 19"""
self.log.debug('skipping OMIT1 in GEOM4\n')
return n
def _readQSET1(self, data, n):
"""QSET1(610, 6, 316) - Record 21"""
self.log.debug('skipping QSET1 in GEOM4\n')
return n
def _readRBAR(self, data, n):
"""RBAR(6601,66,292) - Record 22"""
self.log.debug('skipping RBAR in GEOM4\n')
return n
def _readRBE1(self, data, n):
"""RBE1(6801,68,294) - Record 23"""
self.log.debug('skipping RBE1 in GEOM4\n')
return n
def _readRBE2(self, data, n):
"""RBE2(6901,69,295) - Record 24"""
self.log.debug('skipping RBE2 in GEOM4\n')
return n
#n=0
#nData = len(data) # 5*4
if 1:
eData = data[:12]
(eid, gn, cm, gm) = unpack(b'iiii', eData)
eData = data[12:-4]
nGm = len(eData) // 4
iFormat = 'i' * nGm
iFormat = bytes(iFormat)
Gm = list(unpack(iFormat, eData))
alpha, = unpack(b'f', data[-4:])
elem = RBE2(None, [eid, gn, cm, Gm, alpha])
self.add_rigid_element(elem)
data = data[-1:]
def _readRBE3(self, data, n):
"""RBE3(7101,71,187) - Record 25"""
self.log.debug('skipping RBE3 in GEOM4\n')
return n
# RBJOINT
# RBJSTIF
# RELEASE
# RPNOM
def _readRROD(self, data, n):
"""RROD(6501,65,291) - Record 30"""
self.log.debug('skipping RROD in GEOM4\n')
return n
def _readRSPLINE(self, data, n):
"""RSPLINE(7001,70,186) - Record 31"""
self.log.debug('skipping RSPLINE in GEOM4\n')
return n
def _readRSSCON(self, data, n):
"""RSSCON(7201,72,398) - Record 32"""
self.log.debug('skipping RSSCON in GEOM4\n')
return n
# RTRPLT
# RWELD
# SEBSET
# SEBSET1
# SECSET
# SECSET1
# SEQSET
def _readSEQSET1(self, data, n):
"""SEQSET1(1210,12,322) - Record 40"""
self.log.debug('skipping SEQSET1 in GEOM4\n')
return n
# SESUP
# SEUSET
# SEUSET1
def _readSPC(self, data, n):
"""SPC(5501,55,16) - Record 44"""
#self.log.debug('skipping SPC in GEOM4\n')
n = 0
nEntries = len(data) // 20 # 5*4
for i in range(nEntries):
eData = data[n:n + 20]
(sid, ID, c, xxx, dx) = unpack(b'iiiif', eData)
constraint = SPC(None, [sid, ID, c, dx])
self.add_constraint_SPC(constraint)
n += 20
return n
def _readSPC1(self, data, n):
"""SPC1(5481,58,12) - Record 45"""
self.log.debug('skipping SPC1 in GEOM4\n')
#return n
n2 = n
#nentries = (len(data) - n - 12) // 4 # 5*4
nentries = 0
while n2 < n:
eData = data[n:n+12]
n += 12
out = unpack('4i', eData)
(sid, g, thru_flag, n1) = out
self.binary_debug.write(' SPC1=%s\n' % str(out))
eData = data[n:n + 12]
nids = [n1]
if thru_flag == 0: # repeat 4 to end
nnodes = (len(data) - n) // 4
nodes = unpack(b'%ii' % nnodes, data[n:])
nids += list(nodes)
n += 4 * nentries
else:
n2 = unpack(b'i', data[n:n+4])
n += 4
nids.append(n2)
self.binary_debug.write(' nids=%s\n' % str(nids[1:]))
nentries += 1
constraint = SPC1(None, [sid, g, nids])
self.add_constraint_SPC(constraint)
self.card_count['SPC1'] = nentries
return n
def _readSPCADD(self, data, n):
"""SPCADD(5491,59,13) - Record 46"""
self.log.debug('skipping SPCADD in GEOM4\n')
return n
def _readSPCD(self, data, n):
"""SPCD(5110,51,256) - Record 47"""
#self.log.debug('skipping SPCD in GEOM4\n')
n = 0
s = Struct(b'4if')
nEntries = len(data) // 20 # 5*4
for i in range(nEntries):
eData = data[n:n + 20]
out = s.unpack(eData)
(sid, ID, c, xxx, dx) = out
self.binary_debug.write(' SPCD=%s\n' % str(out))
constraint = SPCD(None, [sid, ID, c, dx])
self.add_constraint_SPC(constraint)
n += 20
self.card_count['SPCD'] = nEntries
return n
def _readSPCDE(self, data, n):
self.log.debug('skipping SPCDE in GEOM4\n')
return n
def _readSPCDF(self, data, n):
self.log.debug('skipping SPCDF in GEOM4\n')
return n
def _readSPCDG(self, data, n):
self.log.debug('skipping SPCDG in GEOM4\n')
return n
def _readSPCE(self, data, n):
self.log.debug('skipping SPCE in GEOM4\n')
return n
def _readSPCEB(self, data, n):
self.log.debug('skipping SPCEB in GEOM4\n')
return n
def _readSPCF(self, data, n):
self.log.debug('skipping SPCF in GEOM4\n')
return n
def _readSPCFB(self, data, n):
self.log.debug('skipping SPCFB in GEOM4\n')
return n
def _readSPCGB(self, data, n):
self.log.debug('skipping SPCGB in GEOM4\n')
return n
# SPCGRID
# SPCOFF
# SPCOFF1
def _readSUPORT(self, data, n):
"""SUPORT(5601,56, 14) - Record 59"""
#self.log.debug('skipping SUPORT in GEOM4\n')
n = 0
nEntries = len(data) // 8 # 2*4
s = Struct(b'2i')
for i in range(nEntries):
self.add_suport(SUPORT(None, list(s.unpack(data[n:n + 8])))) # extracts [sid, c]
n += 8
return n
def _readSUPORT1(self, data, n):
"""SUPORT1(10100,101,472) - Record 60"""
self.log.debug('skipping SUPORT1 in GEOM4\n')
return n
# TEMPBC
def _readUSET(self, data, n):
"""USET(2010,20,193) - Record 62"""
self.log.debug('skipping USET in GEOM4\n')
return n
def _readUSET1(self, data, n):
self.log.debug('skipping USET1 in GEOM4\n')
return n