Source code for pyNastran.op2.tables.geom.ept

#pylint: disable=C0301,W0612,C0111,R0201,C0103,W0613,R0914,C0326
from __future__ import (nested_scopes, generators, division, absolute_import,
                        print_function, unicode_literals)
from six.moves import range
from struct import unpack, Struct

from pyNastran.bdf.bdf import (NSM, PBAR, PBARL, PBEAM,
                               PROD, PSHELL, PSHEAR,
                               PCOMP, PSOLID,
                               PVISC, PELAS, PMASS,
                               PTUBE, PGAP)
# PCOMPG, PBUSH1D, PBEAML, PBEAM3, PBUSH,


[docs]class EPT(object):
[docs] def add_property(self, card, allowOverwrites=True): raise RuntimeError('this should be overwritten')
def _read_ept_4(self, data): return self._read_geom_4(self._ept_map, data) def __init__(self): self.card_count = {} self.bigProperties = {} self._ept_map = { (3201,32,55): ['NSM', self._readNSM], # record 2 - needs an object holder (e.g. self.elements/self.properties) (52, 20, 181): ['PBAR', self._readPBAR], # record 11 - buggy (9102, 91, 52): ['PBARL', self._readPBARL], # record 12 - almost there... (2706, 27, 287): ['PCOMP', self._readPCOMP], # record 22 - buggy (302, 3, 46): ['PELAS', self._readPELAS], # record 39 (2102, 21, 121): ['PGAP', self._readPGAP], # record 42 (902, 9, 29): ['PROD', self._readPROD], # record 49 (1002, 10, 42): ['PSHEAR', self._readPSHEAR], # record 50 (2402, 24, 281): ['PSOLID', self._readPSOLID], # record 51 (2302, 23, 283): ['PSHELL', self._readPSHELL], # record 52 (1602, 16, 30): ['PTUBE', self._readPTUBE], # record 56 (5402, 54, 262): ['PBEAM', self._readPBEAM], # record 14 - not done (9202, 92, 53): ['PBEAML', self._readPBEAML], # record 15 - not done (2502, 25, 248): ['PBEND', self._readPBEND], # record 16 - not done (1402, 14, 37): ['PBUSH', self._readPBUSH], # record 19 - not done (3101, 31, 219): ['PBUSH1D', self._readPBUSH1D], # record 20 - not done (152, 19, 147): ['PCONEAX', self._readPCONEAX], # record 24 - not done (11001,110, 411): ['PCONV', self._readPCONV], # record 25 - not done # record 26 (202, 2, 45): ['PDAMP', self._readPDAMP], # record 27 - not done (2802, 28, 236): ['PHBDY', self._readPHBDY], # record 43 - not done (402, 4, 44): ['PMASS', self._readPMASS], # record 48 (1802, 18, 31): ['PVISC', self._readPVISC], # record 59 (10201,102, 400): ['PVAL', self._readPVAL], # record 58 - not done (2606, 26, 289): ['VIEW', self._readVIEW], # record 62 - not done (2706, 27, 287): ['', self._readFake], # record (702, 7, 38): ['', self._readFake], # record (10301, 103, 399): ['', self._readFake], (5403, 55, 349): ['', self._readFake], (6902, 69, 165): ['', self._readFake], (3002, 30, 415): ['', self._readFake], (13301, 133, 509): ['', self._readFake], (6802, 68, 164): ['', self._readFake], (4606, 46, 375): ['', self._readFake], (1302, 13, 34): ['', self._readFake], (4706, 47, 376): ['', self._readFake], (8702, 87, 412): ['', self._readFake], (2902, 29, 420): ['', self._readFake], (1502, 15, 36): ['', self._readFake], (3301, 33, 56): ['', self._readFake], (3401, 34, 57): ['', self._readFake], # record (1202, 12, 33): ['', self._readFake], # record (12001, 120, 480): ['', self._readFake], # record (12101, 121, 484): ['', self._readFake], # record (3501, 35, 58): ['', self._readFake], # record (3601, 36, 62): ['', self._readFake], # record (8300, 83, 382): ['', self._readFake], # record (8500, 85, 384): ['', self._readFake], # record }
[docs] def addOp2Property(self, prop): self.add_property(prop, allowOverwrites=True)
#print(str(prop)[:-1]) # HGSUPPR def _readNSM(self, data, n): """ NSM(3201,32,55) - the marker for Record 2 .. todo:: this isnt a property... """ return n s = Struct(b'i4sif') while len(data) >= 16: # 4*4 eData = data[:16] data = data[16:] out = s.unpack(eData) (sid, propSet, ID, value) = out #print("sid=%s propSet=%s ID=%s value=%s" %(sid,propSet,ID,value)) prop = NSM(None, None, [sid, propSet, ID, value]) #self.addOp2Property(prop) return n # NSM1 # NSML1 # NSMADD # NSML # NSML1 # PAABSF # PACABS # PACBAR def _readPBAR(self, data, n): """ PBAR(52,20,181) - the marker for Record 11 .. warning:: this makes a funny property... """ ntotal = 76 # 19*4 s = Struct(b'2i17f') nentries = (len(data) - n) // ntotal for i in range(nentries): eData = data[n:n+76] out = s.unpack(eData) (pid, mid, a, I1, I2, J, nsm, fe, c1, c2, d1, d2, e1, e2, f1, f2, k1, k2, I12) = out prop = PBAR(None, out) self.addOp2Property(prop) n += ntotal self.card_count['PBAR'] = nentries return n def _readPBARL(self, data, n): """ PBARL(9102,91,52) - the marker for Record 12 TODO: buggy """ validTypes = { "ROD": 1, "TUBE": 2, "I": 6, "CHAN": 4, "T": 4, "BOX": 4, "BAR": 2, "CROSS": 4, "H": 4, "T1": 4, "I1": 4, "CHAN1": 4, "Z": 4, "CHAN2": 4, "T2": 4, "BOX1": 6, "HEXA": 3, "HAT": 4, "HAT1": 5, "DBOX": 10, # was 12 #'MLO TUBE' : 2, } # for GROUP="MSCBML0" ntotal = 28 # 7*4 - ROD - shortest entry...could be buggy... # TODO fix this s = Struct(b'2i8s8sf') #nentries = (len(data) - n) // ntotal #print(self.show_ndata(80)) ndata = len(data) while ndata - n > ntotal: eData = data[n:n+28] n += 28 out = s.unpack(eData) (pid, mid, group, Type, value) = out Type = Type.strip() dataIn = [pid, mid, group, Type, value] print("pid=%s mid=%s group=%r Type=%r value=%s" %(pid, mid, group, Type, value)) if pid > 100000000: raise RuntimeError('bad parsing...') expectedLength = validTypes[Type] iFormat = b'%if' % expectedLength ndelta = expectedLength * 4 dataIn += list(unpack(iFormat, data[n:n+ndelta])) # TODO why do i need the +4??? #min_len = expectedLength * 4 + 4 #if len(data) #data = data[n + expectedLength * 4 + 4:] n += ndelta #prin( "len(out) = ",len(out))) #print("PBARL = %s" % dataIn) prop = PBARL(None, dataIn) # last value is nsm self.addOp2Property(prop) #print(self.show_data(data[n-8:-100])) break self._increase_card_count('PBARL') #assert len(data) == n return len(data) # PBCOMP def _readPBEAM(self, data, n): """ PBEAM(5402,54,262) - the marker for Record 14 .. todo:: add object """ s1 = Struct(b'4if') s2 = Struct(b'16f') s3 = Struct(b'11f') ntotal = 1072 # 44+12*84+20 nproperties = (len(data) - n) // ntotal for i in range(nproperties): eData = data[n:n+20] n += 20 dataIn = list(s1.unpack(eData)) self.binary_debug.write(' PBEAM=%s\n' % str(dataIn)) (pid, mid, nsegs, ccf, x) = dataIn for i in range(12): eData = data[n:n+64] n += 64 pack = s2.unpack(eData) (so, xxb, a, i1, i2, i12, j, nsm, c1, c2, d1, d2, e1, e2, f1, f2) = pack dataIn.append(pack) self.binary_debug.write(' %s\n' % str(pack)) eData = data[n:n+44] dataIn = list(s3.unpack(eData)) #(k1,k2,s1,s2,nsia,nsib,cwa,cwb,m1a,m2a,m1b,m2b,n1a,n2a,n1b,n2b) = pack prop = PBEAM(None, dataIn) self.addOp2Property(prop) #sys.exit('ept-PBEAM') self.card_count['PBEAM'] = nproperties return n def _readPBEAML(self, data, n): self.binary_debug.write('skipping PBEAML in EPT\n') return len(data) def _readPBEND(self, data, n): self.binary_debug.write('skipping PBEND in EPT\n') return len(data) # PBMSECT # PBRSECT def _readPBUSH(self, data, n): self.binary_debug.write('skipping PBUSH in EPT\n') return len(data) def _readPBUSH1D(self, data, n): self.binary_debug.write('skipping PBUSH1D in EPT\n') return len(data) def _readPBUSHT(self, data, n): self.binary_debug.write('skipping PBUSHT in EPT\n') return len(data) def _readPCOMP(self, data, n): """ PCOMP(2706,27,287) - the marker for Record 22 """ nproperties = 0 n2 = n s1 = Struct(b'2i3fi2f') s2 = Struct(b'i2fi') while n2 < n: #len(data) >= 32: # 8*4 - dynamic #print("len(data) = %s" % len(data)) #print(self.print_block(data[0:200])) isSymmetrical = 'NO' eData = data[n:n+32] out = s1.unpack(eData) self.binary_debug.write(' PCOMP=%s\n' % str(out)) (pid, nLayers, z0, nsm, sb, ft, Tref, ge,) = out eData = data[n:n+16 * (nLayers)] Mid = [] T = [] Theta = [] Sout = [] if nLayers < 0: isSymmetrical = 'YES' nLayers = abs(nLayers) #print("nLayers = ",nLayers) assert 0 < nLayers < 100, 'pid=%s nLayers=%s z0=%s nms=%s sb=%s ft=%s Tref=%s ge=%s' % (pid, nLayers, z0, nsm, sb, ft, Tref, ge) idata = 0 for ilayer in range(nLayers): (mid, t, theta, sout) = s2.unpack(eData[idata:idata+16]) Mid.append(mid) T.append(t) Theta.append(theta) Sout.append(sout) idata += 16 dataIn = [pid, z0, nsm, sb, ft, Tref, ge, isSymmetrical, Mid, T, Theta, Sout] #print("PCOMP = %s" % (dataIn)) prop = PCOMP(None, dataIn) self.addOp2Property(prop) nproperties += 1 self.card_count['PCOMP'] = nproperties return n # PCOMPA def _readPCONEAX(self, data, n): # 24 self.binary_debug.write('skipping PCONEAX\n') return len(data) def _readPCONV(self, data, n): # 25 self.binary_debug.write('skipping PCONV\n') return len(data) def _readPCONVM(self, data, n): # 26 self.binary_debug.write('skipping PCONVM\n') return len(data) def _readPDAMP(self, data, n): self.binary_debug.write('skipping PDAMP\n') return len(data) # PDAMPT # PDAMP5 # PDUM1 # PDUM2 # PDUM3 # PDUM4 # PDUM5 # PDUM6 # PDUM7 # PDUM8 # PDUM9 def _readPELAS(self, data, n): """PELAS(302,3,46) - the marker for Record 39""" s = Struct(b'i3f') ntotal = 16 # 4*4 nproperties = (len(data) - n) // ntotal for i in range(nproperties): eData = data[n:n+16] out = s.unpack(eData) #(pid,k,ge,s) = out self.binary_debug.write(' PELAS=%s\n' % str(out)) prop = PELAS(data=out) self.addOp2Property(prop) n += ntotal self.card_count['PELAS'] = nproperties return n # PFAST # PELAST def _readPGAP(self, data, n): """ PGAP(3201,32,55) - the marker for Record 42 """ s = Struct(b'i10f') nproperties = (len(data) - n) // 44 for i in range(nproperties): eData = data[n:n+44] out = s.unpack(eData) self.binary_debug.write(' PGAP=%s\n' % str(out)) #(pid,u0,f0,ka,kb,kt,mu1,mu2,tmax,mar,trmin) = out prop = PGAP(None, out) self.addOp2Property(prop) return n def _readPHBDY(self, data, n): return len(data) def _readPINTC(self, data, n): return len(data) def _readPINTS(self, data, n): return len(data) def _readPLPLANE(self, data, n): return len(data) def _readPLSOLID(self, data, n): return len(data) def _readPMASS(self, data, n): """ PMASS(402,4,44) - the marker for Record 48 """ n = 0 s = Struct(b'ii') nEntries = (len(data) - n) // 8 # 2*4 for i in range(nEntries): eData = data[n:n + 8] out = s.unpack(eData) #out = (pid,mass) self.binary_debug.write(' PMASS=%s\n' % str(out)) prop = PMASS(data=out) self.addOp2Property(prop) n += 8 return n def _readPROD(self, data, n): """ PROD(902,9,29) - the marker for Record 49 """ ntotal = 24 # 6*4 s = Struct(b'2i4f') nproperties = (len(data) - n) // ntotal for i in range(nproperties): eData = data[n:n+24] out = s.unpack(eData) (pid, mid, a, j, c, nsm) = out prop = PROD(None, out) self.binary_debug.write(' PROD=%s\n' % str(out)) self.addOp2Property(prop) n += ntotal self.card_count['PROD'] = nproperties return n def _readPSHEAR(self, data, n): """ PSHEAR(1002,10,42) - the marker for Record 50 """ s = Struct(b'2i4f') nproperties = (len(data) - n) // 24 for i in range(nproperties): eData = data[n:n+24] out = s.unpack(eData) (pid, mid, t, nsm, f1, f2) = out self.binary_debug.write(' PSHEAR=%s\n' % str(out)) prop = PSHEAR(data=out) self.addOp2Property(prop) n += 24 self.card_count['PSHEAR'] = nproperties return n def _readPSHELL(self, data, n): """ PSHELL(2302,23,283) - the marker for Record 51 """ ntotal = 44 # 11*4 s = Struct(b'iififi4fi') nproperties = (len(data) - n) // ntotal for i in range(nproperties): eData = data[n:n+44] out = s.unpack(eData) (pid, mid1, t, mid2, bk, mid3, ts, nsm, z1, z2, mid4) = out self.binary_debug.write(' PSHELL=%s\n' % str(out)) prop = PSHELL(None, out) if max(pid, mid1, mid2, mid3, mid4) > 1e8: #print("PSHELL = ",out) self.bigProperties[pid] = prop else: self.addOp2Property(prop) n += ntotal self.card_count['PSHELL'] = nproperties return n def _readPSOLID(self, data, n): """ PSOLID(2402,24,281) - the marker for Record 52 """ #print("reading PSOLID") ntotal = 28 # 7*4 s = Struct(b'6i4s') nproperties = (len(data) - n) // ntotal for i in range(nproperties): eData = data[n:n+28] out = s.unpack(eData) #(pid, mid, cid, inp, stress, isop, fctn) = out #dataIn = [pid, mid, cid, inp, stress, isop, fctn] self.binary_debug.write(' PSOLID=%s\n' % str(out)) prop = PSOLID(None, out) self.addOp2Property(prop) n += ntotal self.card_count['PSOLID'] = nproperties return n # PSOLIDL # PTRIA6 # PTSHELL def _readPTUBE(self, data, n): """ PTUBE(1602,16,30) - the marker for Record 56 .. todo:: OD2 only exists for heat transfer...how do i know if there's heat transfer at this point... .. todo:: I could store all the tubes and add them later, but what about themal/non-thermal subcases .. warning:: assuming OD2 is not written (only done for thermal) """ s = Struct(b'2i3f') nproperties = (len(data) - n) // 20 for i in range(nproperties): eData = data[n:n+20] # or 24??? out = s.unpack(eData) (pid, mid, OD, t, nsm) = out dataIn = [pid, mid, OD, t, nsm] self.binary_debug.write(' PTUBE=%s\n' % str(out)) prop = PTUBE(None, dataIn) self.addOp2Property(prop) n += 20 self.card_count['PTUBE'] = nproperties def _readPSET(self, data, n): return len(data) def _readPVAL(self, data, n): return len(data) def _readPVISC(self, data, n): """PVISC(1802,18,31) - the marker for Record 39""" s = Struct(b'i2f') nproperties = (len(data) - n) // 12 for i in range(nproperties): eData = data[n:n+12] out = s.unpack(eData) self.binary_debug.write(' PVISC=%s\n' % str(out)) #(pid,ce,cr) = out prop = PVISC(data=out) self.addOp2Property(prop) n += 12 self.card_count['PVISC'] = nproperties return n # PWELD # PWSEAM def _readVIEW(self, data, n): return len(data) def _readVIEW3D(self, data, n): return len(data)