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

#pylint: disable=C0103,C0111,C0301,W0612,W0613,R0914,C0326,R0201
from six.moves import range
from struct import unpack, Struct

from pyNastran.bdf.cards.loads.staticLoads import (FORCE, FORCE1, FORCE2, GRAV,
                                                   MOMENT, MOMENT1, MOMENT2,
                                                   LOAD, PLOAD1, PLOAD2,  #PLOAD3,
                                                   PLOAD4)  # PLOAD3,
from pyNastran.bdf.cards.thermal.loads import QBDY1, QBDY2, QBDY3, TEMP, TEMPD

[docs]class GEOM3(object):
[docs] def add_thermal_load(self, load): raise RuntimeError('this should be overwritten')
[docs] def add_load(self, load): raise RuntimeError('this should be overwritten')
def _read_geom3_4(self, data): if self.read_mode == 1: return len(data) return self._read_geom_4(self._geom3_map, data) def __init__(self): self.card_count = {} self._geom3_map = { (4201, 42, 18): ['FORCE', self._readFORCE], # record 3 (4001, 40, 20): ['FORCE1', self._readFORCE1], # record 4 (4101, 41, 22): ['FORCE2', self._readFORCE2], # record 5 (4401, 44, 26): ['GRAV', self._readGRAV], # record 7 - buggy (4551, 61, 84): ['LOAD', self._readLOAD], # record 8 (3709, 37, 331): ['LOADCYH', self._readLOADCYH], # record 9 - not done (3609, 36, 188): ['LSEQ', self._readLSEQ], # record 12 - not done (4801, 48, 19): ['MOMENT', self._readMOMENT], # record 13 - not tested (4601, 46, 21): ['MOMENT1', self._readMOMENT1], # record 14 - not tested (4701, 47, 23): ['MOMENT2', self._readMOMENT2], # record 15 - not tested (5101, 51, 24): ['PLOAD', self._readPLOAD], # record 16 - not done (6909, 69, 198): ['PLOAD1', self._readPLOAD1], # record 17 - buggy (6802, 68, 199): ['PLOAD2', self._readPLOAD2], # record 18 - buggy (7109, 81, 255): ['PLOAD3', self._readPLOAD3], # record 19 - not done (7209, 72, 299): ['PLOAD4', self._readPLOAD4], # record 20 - buggy - g1/g3/g4 (7309, 73, 351): ['PLOADX1', self._readPLOADX1], # record 22 (4509, 45, 239): ['QBDY1', self._readQBDY1], # record 24 (4909, 49, 240): ['QBDY2', self._readQBDY2], # record 25 (2109, 21, 414): ['QBDY3', self._readQBDY3], # record 26 (5509, 55, 190): ['RFORCE', self._readRFORCE], # record 30 - not done (5401, 54, 25): ['SLOAD', self._readSLOAD], # record 31 - not done (5701, 57, 27): ['TEMP', self._readTEMP], # record 32 (5641, 65, 98): ['TEMPD', self._readTEMPD], # record 33 (8409, 84, 204): ['TEMPRB', self._readTEMPRB], # record 40 - not done (8109, 81, 201): ['TEMPP1', self._readTEMPP1], # record 37 - not done (8209, 82, 202): ['TEMPP2', self._readTEMPP2], # record 38 - not done (8309, 83, 203): ['TEMPP3', self._readTEMPP3], # record 39 - not done (8409, 84, 204): ['TEMP4', self._readTEMPP4], # record 40 - not done (2309, 23, 416): ['', self._readFake], (4309, 43, 233): ['', self._readFake], (6609, 66, 9031): ['', self._readFake], (8100, 81, 381): ['', self._readFake], (11302, 113, 600): ['', self._readFake], (11402, 114, 601): ['', self._readFake], (2209, 22, 241): ['', self._readFake], (6409, 64, 9032): ['', self._readFake], (3809, 38, 332): ['', self._readFake], # record (6209, 62, 390): ['', self._readFake], # record (10901, 109, 427): ['', self._readFake], # record (10801, 108, 428): ['', self._readFake], # record (11329, 113, 9602): ['', self._readFake], # record (11429, 114, 9603): ['', self._readFake], # record (11529, 115, 9604): ['', self._readFake], # record } # ACCEL # ACCEL1 def _readFORCE(self, data, n): """ FORCE(4201,42,18) - the marker for Record 3 """ #print("reading FORCE") ntotal = 28 # 7*4 nEntries = (len(data) - n) // ntotal s = Struct(b'iiiffff') for i in range(nEntries): out = s.unpack(data[n:n + 28]) (sid, g, cid, f, n1, n2, n3) = out self.binary_debug.write(' FORCE=%s\n' % str(out)) load = FORCE(None, [sid, g, cid, f, n1, n2, n3]) self.add_load(load) n += 28 return n def _readFORCE1(self, data, n): """ FORCE1(4001,40,20) - the marker for Record 4 """ #print("reading FORCE1") ntotal = 20 # 5*4 s = Struct('iifii') nEntries = (len(data) - n) // ntotal for i in range(nEntries): eData = data[n:n + 20] out = s.unpack(eData) out = (sid, g, f, n1, n2) self.binary_debug.write(' FORCE1=%s\n' % str(out)) load = FORCE1(None, [sid, g, f, n1, n2]) self.add_load(load) n += 20 self.card_count['FORCE1'] = nEntries return n def _readFORCE2(self, data, n): """ FORCE2(4101,41,22) - the marker for Record 5 """ #print("reading FORCE2") ntotal = 28 # 7*4 s = Struct(b'iif4i') nEntries = (len(data) - n) // ntotal for i in range(nEntries): out = s.unpack(data[n:n + 28]) (sid, g, f, n1, n2, n3, n4) = out self.binary_debug.write(' FORCE2=%s\n' % str(out)) load = FORCE2(None, [sid, g, f, n1, n2, n3, n4]) self.add_load(load) n += 28 self.card_count['FORCE2'] = nEntries return n # GMLOAD def _readGRAV(self, data, n): """ GRAV(4401,44,26) - the marker for Record 7 """ #print("reading GRAV") ntotal = 28 # 7*4 s = Struct(b'ii4fi') nEntries = (len(data) - n) // ntotal for i in range(nEntries): eData = data[n:n + 28] out = s.unpack(eData) (sid, cid, a, n1, n2, n3, mb) = out grav = GRAV(None, out) self.add_load(grav) n += 28 self.card_count['GRAV'] = nEntries return n def _readLOAD(self, data, n): """ (4551, 61, 84) - the marker for Record 8 .. todo:: add object """ #print("reading LOAD") ntotal = 16 # 4*4 nEntries = (len(data) - n) // ntotal count = 0 while (len(data) - n) >= 16: eData = data[n:n+16] n += 16 out = unpack('iffi', eData) (sid, s, si, l1) = out self.binary_debug.write(' LOAD=%s\n' % str(out)) Si = [si] L1 = [l1] #print(Si, L1) while 1: eData = data[n:n+8] n += 8 (si, l1) = unpack('fi', eData) siTest, = unpack('i', eData[0:4]) #print(si,siTest, l1) #print(type(si)) if [siTest, l1] == [-1, -1]: break Si.append(si) L1.append(l1) self.binary_debug.write(' [%s,%s]\n' % (si, l1)) #print(Si, L1) dataIn = [sid, s, Si, L1] load = LOAD(None, dataIn) self.add_load(load) count += 1 if count > 1000: raise RuntimeError('Iteration limit...probably have a bug.') self.card_count['LOAD'] = nEntries return n def _readLOADCYH(self, data, n): self.binary_debug.write('skipping LOADCYG in GEOM3\n') return n # LOADCYN # LOADCYT def _readLSEQ(self, data, n): self.binary_debug.write('skipping LSEQ in GEOM3\n') return n def _readMOMENT(self, data, n): """ MOMENT(4801,48,19) - the marker for Record 13 """ #print("reading MOMENT") ntotal = 28 s = Struct(b'3i4f') nEntries = (len(data) - n) // 28 # 7*4 for i in range(nEntries): eData = data[n:n + 28] out = s.unpack(eData) self.binary_debug.write(' MOMENT=%s\n' % str(out)) (sid, g, cid, m, n1, n2, n3) = out load = MOMENT(None, out) self.add_load(load) n += 28 self.card_count['MOMENT'] = nEntries return n def _readMOMENT1(self, data, n): """ MOMENT1(4601,46,21) - the marker for Record 14 """ #print("reading MOMENT1") ntotal = 20 # 5*4 nEntries = (len(data) - n) // ntotal for i in range(nEntries): eData = data[n:n + 20] out = unpack('iifii', eData) self.binary_debug.write(' MOMENT1=%s\n' % str(out)) (sid, g, m, n1, n2) = out load = MOMENT1(None, out) self.add_load(load) n += 20 self.card_count['MOMENT1'] = nEntries return n def _readMOMENT2(self, data, n): """ MOMENT2(4701,47,23) - the marker for Record 15 """ #print("reading MOMENT2") ntotal = 28 # 7*4 nEntries = (len(data) - n) // ntotal for i in range(nEntries): eData = data[n:n + 28] out = unpack('iif4i', eData) self.binary_debug.write(' MOMENT2=%s\n' % str(out)) (sid, g, m, n1, n2, n3, n4) = out load = MOMENT2(None, out) self.add_load(load) n += 28 self.card_count['MOMENT2'] = nEntries return n def _readPLOAD(self, data, n): return n def _readPLOAD1(self, data, n): """ PLOAD2(6802,68,199) - the marker for Record 17 """ #print("reading PLOAD1") ntotal = 32 # 8*4 s = Struct(b'4i4f') nEntries = (len(data) - n) // ntotal for i in range(nEntries): eData = data[n:n + 32] out = s.unpack(eData) self.binary_debug.write(' PLOAD1=%s\n' % str(out)) (sid, eid, Type, scale, x1, p1, x2, p2) = out #print("PLOAD1 = ", out) load = PLOAD1(None, out) self.add_load(load) n += 32 self.card_count['PLOAD1'] = nEntries return n def _readPLOAD2(self, data, n): """ PLOAD2(6802,68,199) - the marker for Record 18 """ #print("reading PLOAD2") ntotal = 12 # 3*4 nEntries = (len(data) - n) // ntotal for i in range(nEntries): eData = data[n:n + 12] out = unpack('ifi', eData) self.binary_debug.write(' PLOAD2=%s\n' % str(out)) (sid, p, eid) = out load = PLOAD2(None, out) self.add_load(load) n += 12 self.card_count['PLOAD2'] = nEntries return n def _readPLOAD3(self, data, n): """ PLOAD3(7109,71,255) - the marker for Record 19 """ #print("reading PLOAD3") ntotal = 20 # 5*4 nEntries = (len(data) - n) // ntotal for i in range(nEntries): eData = data[n:n + 20] out = unpack('if3i', eData) self.binary_debug.write(' PLOAD3=%s\n' % str(out)) (sid, p, eid, n1, n2) = out load = PLOAD3(None, out) # undefined self.add_load(load) n += 20 self.card_count['PLOAD3'] = nEntries return n def _readPLOAD4(self, data, n): ## inconsistent with DMAP """ PLOAD4(7209,72,299) - the marker for Record 20 """ #print("reading PLOAD4") ntotal = 48 # 13*4 nEntries = (len(data) - n) // ntotal for i in range(nEntries): eData = data[n:n + 48] #iiffffiiifffi ssssssssssssssss out = unpack('2i4f3i3f', eData) self.binary_debug.write(' PLOAD4=%s\n' % str(out)) (sid, eid, p1, p2, p3, p4, g1, g34, cid, n1, n2, n3) = out #s1,s2,s3,s4,s5,s6,s7,s8,L1,L2,L3,L4,L5,L6,L7,L8 #sdrlA = s1+s2+s3+s4 #sdrlB = s5+s6+s7+s8 #ldirA = L1+L2+L3+L4 #ldirB = L5+L6+L7+L8 sdrlA = None sdrlB = None ldirA = None ldirB = None load = PLOAD4(None, [sid, eid, [p1, p2, p3, p4], g1, g34, cid, [n1, n2, n3], sdrlA, sdrlB, ldirA, ldirB]) self.add_load(load) n += 48 self.card_count['PLOAD4'] = nEntries return n # PLOADX - obsolete def _readPLOADX1(self, data, n): self.binary_debug.write('skipping PLOADX1 in GEOM3\n') return n # PRESAX def _readQBDY1(self, data, n): """ QBDY1(4509,45,239) - the marker for Record 24 """ #print("reading QBDY1") ntotal = 12 # 3*4 nEntries = (len(data) - n) // ntotal for i in range(nEntries): eData = data[n:n + 12] out = unpack('ifi', eData) self.binary_debug.write(' QBDY1=%s\n' % str(out)) (sid, q0, eid) = out load = QBDY1(None, out) self.add_thermal_load(load) n += 12 self.card_count['QBDY1'] = nEntries return n def _readQBDY2(self, data, n): """ QBDY2(4909,49,240) - the marker for Record 25 """ #print("reading QBDY2") ntotal = 40 # 10*4 nEntries = (len(data) - n) // ntotal for i in range(nEntries): eData = data[n:n + 40] out = unpack('ii8f', eData) self.binary_debug.write(' QBDY2=%s\n' % str(out)) (sid, eid, q1, q2, q3, q4, q5, q6, q7, q8) = out load = QBDY2(None, out) self.add_thermal_load(load) n += 40 self.card_count['QBDY2'] = nEntries return n def _readQBDY3(self, data, n): """ QBDY3(2109,21,414) - the marker for Record 26 """ #print("reading QBDY3") ntotal = 16 # 4*4 nEntries = (len(data) - n) // ntotal for i in range(nEntries): eData = data[n:n + 16] out = unpack('ifii', eData) (sid, q0, cntrlnd, eid) = out load = QBDY3(None, out) self.add_thermal_load(load) n += 16 self.card_count['QBDY3'] = nEntries return n def _readTEMP(self, data, n): """ TEMP(5701,57,27) - the marker for Record 32 .. warning:: buggy """ #print("reading TEMP") ntotal = 12 # 3*4 nEntries = (len(data) - n) // ntotal for i in range(nEntries): eData = data[n:n + 12] out = unpack('iif', eData) self.binary_debug.write(' TEMP=%s\n' % str(out)) (sid, g, T) = out if g < 10000000: load = TEMP(None, out) self.add_thermal_load(load) else: self.log.debug('TEMP = %s' % (out)) n += 12 self.card_count['TEMP'] = nEntries return n def _readTEMPD(self, data, n): """ TEMPD(5641,65,98) - the marker for Record 33 .. todo:: add object """ #print("reading TEMPD") ntotal = 8 # 2*4 nEntries = (len(data) - n) // ntotal for i in range(nEntries): eData = data[n:n + 8] out = unpack('if', eData) self.binary_debug.write(' TEMPD=%s\n' % str(out)) (sid, T) = out load = TEMPD(None, out) #self.add_thermal_load(load) n += 8 self.card_count['TEMPD'] = nEntries return n # QHBDY # QVECT # QVOL def _readRFORCE(self, data, n): self.binary_debug.write('skipping RFORCE in GEOM3\n') return n def _readSLOAD(self, data, n): self.binary_debug.write('skipping SLOAD in GEOM3\n') return n # TEMP(5701,57,27) # 32 # TEMPD(5641,65,98) # 33 # TEMPEST # TEMPF # TEMP1C def _readTEMPP1(self, data, n): self.binary_debug.write('skipping TEMPP1 in GEOM3\n') return n def _readTEMPP2(self, data, n): self.binary_debug.write('skipping TEMPP2 in GEOM3\n') return n def _readTEMPP3(self, data, n): self.binary_debug.write('skipping TEMPP3 in GEOM3\n') return n def _readTEMPP4(self, data, n): """ TEMPP4(4201,42,18) - the marker for Record 40 """ return n def _readTEMPRB(self, data, n): self.binary_debug.write('skipping TEMPRB in GEOM3\n') return n
# PFACE # PEDGE