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

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

from pyNastran.bdf.cards.elements.elements import CGAP
from pyNastran.bdf.cards.elements.damper import (CDAMP1, CDAMP2, CDAMP3,
                                                 CDAMP4, CDAMP5, CVISC)
from pyNastran.bdf.cards.elements.springs import CELAS1, CELAS2, CELAS3, CELAS4
from pyNastran.bdf.cards.elements.shell import (CTRIA3, CQUAD4, CTRIA6,
                                                CQUADR, CQUAD8, CQUAD, CQUADX,
                                                CSHEAR)
from pyNastran.bdf.cards.elements.rods import CROD, CTUBE, CONROD
from pyNastran.bdf.cards.elements.bars import CBAR
from pyNastran.bdf.cards.elements.beam import CBEAM
from pyNastran.bdf.cards.elements.mass import (CONM1, CONM2, CMASS1, CMASS2,
                                               CMASS3, CMASS4)
from pyNastran.bdf.cards.elements.solid import (CTETRA4, CTETRA10, CPENTA6,
                                                CPENTA15, CHEXA8, CHEXA20)
from pyNastran.bdf.cards.thermal.thermal import CHBDYG, CONV  # , CONVM, CHBDYP
from pyNastran.bdf.cards.nodes import SPOINTs


[docs]class GEOM2(object): def _read_geom2_4(self, data): if self.read_mode == 1: return len(data) return self._read_geom_4(self._geom2_map, data) def __init__(self): self.card_count = {} self._geom2_map = { (2408, 24, 180): ['CBAR', self._readCBAR], # record 8 (4001, 40, 275): ['CBARAO', self._readCBARAO], # record 9 - not done (5408, 54, 261): ['CBEAM', self._readCBEAM], # record 10 (11401, 114, 9016): ['CBEAMP', self._readCBEAMP], # record 11 - not done (4601, 46, 298): ['CBEND', self._readCBEND], # record 12 - not done (2608, 26, 60): ['CBUSH', self._readCBUSH], # record 13 - not done (5608, 56, 218): ['CBUSH1D', self._readCBUSH1D], # record 14 - not done (2315, 23, 146): ['CCONE', self._readCCONE], # record 15 - not done (201, 2, 69): ['CDAMP1', self._readCDAMP1], # record 16 (301, 3, 70): ['CDAMP2', self._readCDAMP2], # record 17 (401, 4, 71): ['CDAMP3', self._readCDAMP3], # record 18 (501, 5, 72): ['CDAMP4', self._readCDAMP4], # record 19 (10608, 106, 404): ['CDAMPS', self._readCDAMP5], # record 20 (601, 6, 73): ['CELAS1', self._readCELAS1], # record 29 (701, 7, 74): ['CELAS2', self._readCELAS2], # record 30 (801, 8, 75): ['CELAS3', self._readCELAS3], # record 31 (901, 9, 76): ['CELAS4', self._readCELAS4], # record 32 # record 33 # record 34 # record 35 (8515, 85, 209): ['CFLUID2', self._readCFLUID2], # record 35 - not done (8615, 86, 210): ['CFLUID3', self._readCFLUID3], # record 36 - not done (8715, 87, 211): ['CFLUID4', self._readCFLUID4], # record 37 - not done (1908, 19, 104): ['CGAP', self._readCGAP], # record 39 - buggy # record 40 # record 41 # record 42 (10808, 108, 406): ['CHBDYG', self._readCHBDYG], # record 43 (10908, 109, 407): ['CHBDYP', self._readCHBDYP], # record 44 - not done (7308, 73, 253): ['CHEXA', self._readCHEXA], # record 45 (1001, 10, 65): ['CMASS1', self._readCMASS1], # record 51 (1101, 11, 66): ['CMASS2', self._readCMASS2], # record 52 (1201, 12, 67): ['CMASS3', self._readCMASS3], # record 53 (1301, 13, 68): ['CMASS4', self._readCMASS4], # record 54 (2508, 25, 0): ['CMFREE', self._readCMFREE], # record 55 - not done (1401, 14, 63): ['CONM1', self._readCONM1], # record 56 - not done (1501, 15, 64): ['CONM2', self._readCONM2], # record 57 (1601, 16, 47): ['CONROD', self._readCONROD], # record 58 (12701, 127, 408): ['CONV', self._readCONV], # record 59 - not tested (8908, 89, 422): ['CONVM', self._readCONVM], # record 60 - not tested # record 61 (4108, 41, 280): ['CPENTA', self._readCPENTA], # record 62 # record 63 # record 64 # record 65 # record 66 # record 67 (9108, 91, 507): ['CQUAD', self._readCQUAD], # record 68 - not tested (2958, 51, 177): ['CQUAD4', self._readCQUAD4], # record 69 - maybe buggy on theta/Mcsid field (13900, 139, 9989): ['CQUAD4', self._readCQUAD4],# record 70 - maybe buggy on theta/Mcsid field (4701, 47, 326): ['CQUAD8', self._readCQUAD8], # record 71 - maybe buggy on theta/Mcsid field # record 72 # record 73 (8009, 80, 367): ['CQUADR', self._readCQUADR], # record 74 - not tested (9008, 90, 508): ['CQUADX', self._readCQUADX], # record 75 - not tested # record 76 # record 77 # record 78 # record 79 (3001, 30, 48): ['CROD', self._readCROD], # record 80 # record 81 # record 82 # record 83 # record 84 # record 85 (12201,122,9013): ['CTETP', self._readCTETP], # record 86 - not done (5508, 55, 217): ['CTETRA', self._readCTETRA], # record 87 # record 88 # record 89 # record 90 # record 91 # record 92 (5959, 59, 282): ['CTRIA3', self._readCTRIA3], # record 93 - maybe buggy on theta/Mcsid field # record 94 (4801, 48, 327): ['CTRIA6', self._readCTRIA6], # record 95 - buggy # record 96 # record 97 (9200, 92, 385): ['CTRIAR', self._readCTRIAR], # record 98 - not done # record 99 (6108, 61, 107): ['CTRIAX6', self._readCTRIAX6], # record 100 - not done # record 101 # record 102 (3701, 37, 49): ['CTUBE', self._readCTUBE], # record 103 (3901, 39, 50): ['CVISC', self._readCVISC], # record 104 - not done # record 105 # record 106 # record 107 # record 108 # record 109 # record 110 # record 111 # record 112 # record 113 (5201, 52, 11): ['PLOTEL', self._readPLOTEL], # record 114 - not done # record 115 # record 116 # record 117 (5551, 49, 105): ['SPOINT', self._readSPOINT], # record 118 (11601,116, 9942): ['VUBEAM', self._readVUBEAM], # record 119 - not done (2108, 21, 224): ['', self._readFake], (3101, 31, 61): ['', self._readFake], (4301, 43, 28): ['', self._readFake], (5601, 56, 296): ['', self._readFake], (6908, 69, 115): ['', self._readFake], (6808, 68, 114): ['', self._readFake], (7409, 74, 9991): ['', self._readFake], (7509, 75, 9992): ['', self._readFake], (7609, 76, 9993): ['', self._readFake], (8100, 81, 381): ['', self._readFake], (8200, 82, 383): ['', self._readFake], (8308, 83, 405): ['', self._readFake], (11201, 112, 9940): ['', self._readFake], (12801, 128, 417): ['', self._readFake], (13900, 139, 9984): ['', self._readFake], (14000, 140, 9990): ['', self._readFake], (16000, 160, 9988): ['', self._readFake], (16100, 161, 9986): ['', self._readFake], (16300, 163, 9989): ['', self._readFake], (16700, 167, 9981): ['', self._readFake], (16800, 168, 9978): ['', self._readFake], (16500, 165, 9987): ['', self._readFake], (2708, 27, 59): ['', self._readFake], (5008, 50, 258): ['', self._readFake], (16400, 164, 9983) : ['', self._readFake], (3201, 32, 478): ['', self._readFake], (11000, 110, 6667): ['', self._readFake], (12301, 123, 9921): ['', self._readFake], (12401, 124, 9922): ['', self._readFake], (12600, 126, 6661): ['', self._readFake], (14700, 147, 6662): ['', self._readFake], (7309, 73, 0): ['', self._readFake], (17200, 172, 6663): ['', self._readFake], (17300, 173, 6664): ['', self._readFake], (11501, 115, 9941): ['', self._readFake], # record (12501, 125, 9923): ['', self._readFake], # record (3401, 34, 9600): ['', self._readFake], # record (2208, 22, 225): ['', self._readFake], # record (17000, 170, 9980): ['', self._readFake], # record (7701, 77, 8881): ['', self._readFake], # record (12901, 129, 482): ['', self._readFake], # record (7801, 78, 8883): ['', self._readFake], # record (4408, 44, 227): ['', self._readFake], # record (17100, 171, 9979): ['', self._readFake], # record (2901, 29, 9601): ['', self._readFake], # record (4508, 45, 228): ['', self._readFake], # record (16600, 166, 9985): ['', self._readFake], # record (16200, 162, 9982): ['', self._readFake], # record (16900, 169, 9977): ['', self._readFake], # record }
[docs] def add_element(self, elem, allowOverwrites=True): raise RuntimeError('this should be overwritten')
[docs] def addOp2Element(self, elem): self.add_element(elem, allowOverwrites=True)
#print(str(elem)[:-1]) # 1-AEROQ4 (???) # AEROT3 (???) # 1-BEAMAERO (1701,17,0) # 2-CAABSF (2708,27,59) # 3-CAXIF2 (2108,21,224) # 4-CAXIF3 (2208,22,225) # 5-CAXIF4 (2308,23,226) def _readCBAR(self, data, n): """ CBAR(2408,24,180) - the marker for Record 8 """ nelements = (len(data) - n) // 64 for i in range(nelements): eData = data[n:n + 64] # 16*4 f, = unpack(b'i', eData[28:32]) if f == 0: out = unpack(b'4i3f3i6f', eData) (eid, pid, ga, gb, x1, x2, x3, f, pa, pb, w1a, w2a, w3a, w1b, w2b, w3b) = out dataIn = [[eid, pid, ga, gb, pa, pb, w1a, w2a, w3a, w1b, w2b, w3b], [f, x1, x2, x3]] elif f == 1: out = unpack(b'4i3f3i6f', eData) (eid, pid, ga, gb, x1, x2, x3, f, pa, pb, w1a, w2a, w3a, w1b, w2b, w3b) = out dataIn = [[eid, pid, ga, gb, pa, pb, w1a, w2a, w3a, w1b, w2b, w3b], [f, x1, x2, x3]] elif f == 2: out = unpack(b'7if2i6f', eData) (eid, pid, ga, gb, g0, junk, junk, f, pa, pb, w1a, w2a, w3a, w1b, w2b, w3b) = out dataIn = [[eid, pid, ga, gb, pa, pb, w1a, w2a, w3a, w1b, w2b, w3b], [f, g0]] else: raise RuntimeError('invalid f value...f=%s' % (f)) elem = CBAR(None, dataIn) self.addOp2Element(elem) n += 64 self.card_count['CBAR'] = nelements return n def _readCBARAO(self, data, n): """ CBARAO(4001,40,275) - the marker for Record 9 """ self.binary_debug.write('skipping CBARAO in GEOM2\n') return n def _readCBEAM(self, data, n): """ CBEAM(5408,54,261) - the marker for Record 10 """ nelements = (len(data) - n) // 72 for i in range(nelements): eData = data[n:n + 72] # 18*4 f, = unpack(b'i', eData[40:44]) if f == 0: # basic cid out = unpack(b'6i3f3i6f', eData) (eid, pid, ga, gb, sa, sb, x1, x2, x3, f, pa, pb, w1a, w2a, w3a, w1b, w2b, w3b) = out dataIn = [[eid, pid, ga, gb, sa, sb, pa, pb, w1a, w2a, w3a, w1b, w2b, w3b], [f, x1, x2, x3]] elif f == 1: # global cid out = unpack(b'6i3f3i6f', eData) (eid, pid, ga, gb, sa, sb, x1, x2, x3, f, pa, pb, w1a, w2a, w3a, w1b, w2b, w3b) = out dataIn = [[eid, pid, ga, gb, sa, sb, pa, pb, w1a, w2a, w3a, w1b, w2b, w3b], [f, x1, x2, x3]] elif f == 2: # grid option out = unpack(b'12i6f', eData) (eid, pid, ga, gb, sa, sb, g0, xx, xx, f, pa, pb, w1a, w2a, w3a, w1b, w2b, w3b) = out dataIn = [[eid, pid, ga, gb, sa, sb, pa, pb, w1a, w2a, w3a, w1b, w2b, w3b], [f, g0]] else: raise RuntimeError('invalid f value...f=%r' % f) elem = CBEAM(None, dataIn) self.addOp2Element(elem) n += 72 self.card_count['CBEAM'] = nelements return n def _readCBEAMP(self, data, n): """ CBEAMP(11401,114,9016) - the marker for Record 11 """ self.binary_debug.write('skipping CBEAMP in GEOM2\n') return n def _readCBEND(self, data, n): """ CBEND(4601,46,298) - the marker for Record 12 """ self.binary_debug.write('skipping CBEND in GEOM2\n') return n def _readCBUSH(self, data, n): """ CBUSH(2608,26,60) - the marker for Record 13 """ self.binary_debug.write('skipping CBUSH in GEOM2\n') return n def _readCBUSH1D(self, data, n): """ CBUSH1D(5608,56,218) - the marker for Record 14 """ self.binary_debug.write('skipping CBUSH1D in GEOM2\n') return n def _readCCONE(self, data, n): """ CCONE(2315,23,0) - the marker for Record 15 """ self.binary_debug.write('skipping CCONE in GEOM2\n') return n def _readCDAMP1(self, data, n): """ CDAMP1(201,2,69) - the marker for Record 16 """ nelements = (len(data) - n) // 24 for i in range(nelements): eData = data[n:n + 24] # 6*4 out = unpack(b'6i', eData) self.binary_debug.write(' CDAMP1=%s\n' % str(out)) (eid, pid, g1, g2, c1, c2) = out elem = CDAMP1(None, out) self.addOp2Element(elem) n += 24 self.card_count['CDAMP1'] = nelements return n def _readCDAMP2(self, data, n): """ CDAMP2(301,3,70) - the marker for Record 17 """ nelements = (len(data) - n) // 24 for i in range(nelements): eData = data[n:n + 24] # 6*4 out = unpack(b'if4i', eData) self.binary_debug.write(' CDAMP2=%s\n' % str(out)) (eid, b, g1, g2, c1, c2) = out elem = CDAMP2(None, out) self.addOp2Element(elem) n += 24 self.card_count['CDAMP2'] = nelements return n def _readCDAMP3(self, data, n): """ CDAMP3(401,4,71) - the marker for Record 18 """ s = Struct(b'4i') nelements = (len(data) - n) // 16 for i in range(nelements): eData = data[n:n + 16] # 4*4 out = s.unpack(eData) self.binary_debug.write(' CDAMP3=%s\n' % str(out)) (eid, pid, s1, s2) = out elem = CDAMP3(None, out) self.addOp2Element(elem) n += 16 self.card_count['CDAMP3'] = nelements return n def _readCDAMP4(self, data, n): """ CDAMP4(501,5,72) - the marker for Record 19 """ s = Struct(b'ifii') nelements = (len(data) - n) // 16 for i in range(nelements): eData = data[n:n + 16] # 4*4 out = s.unpack(eData) self.binary_debug.write(' CDAMP4=%s\n' % str(out)) (eid, b, s1, s2) = out elem = CDAMP4(None, out) self.addOp2Element(elem) n += 16 self.card_count['CDAMP4'] = nelements return n def _readCDAMP5(self, data, n): """ CDAMP5(10608,106,404) - the marker for Record 20 """ s = Struct(b'4i') nelements = (len(data) - n) // 16 for i in range(nelements): eData = data[n:n + 16] # 4*4 out = s.unpack(eData) self.binary_debug.write(' CDAMP5=%s\n' % str(out)) (eid, pid, s1, s2) = out elem = CDAMP5(None, out) self.addOp2Element(elem) n += 16 self.card_count['CDAMP5'] = nelements return n # CDUM2 # CDUM3 # CDUM4 # CDUM5 # CDUM6 # CDUM7 # CDUM8 # CDUM9 def _readCELAS1(self, data, n): """ CELAS1(601,6,73) - the marker for Record 29 """ ntotal = 24 # 6*4 s = Struct(b'6i') nelements = (len(data) - n) // ntotal for i in range(nelements): eData = data[n:n+24] out = s.unpack(eData) self.binary_debug.write(' CELAS1=%s\n' % str(out)) (eid, pid, g1, g2, c1, c2) = out elem = CELAS1(None, out) self.addOp2Element(elem) n += ntotal self.card_count['CELAS1'] = nelements return n def _readCELAS2(self, data, n): """ CELAS2(701,7,74) - the marker for Record 30 """ s1 = Struct(b'if4iff') ntotal = 32 nelements = (len(data) - n) // ntotal for i in range(nelements): eData = data[n:n+32] out = s1.unpack(eData) self.binary_debug.write(' CELAS2=%s\n' % str(out)) (eid, k, g1, g2, c1, c2, ge, s) = out elem = CELAS2(None, out) self.addOp2Element(elem) n += ntotal self.card_count['CELAS2'] = nelements return n def _readCELAS3(self, data, n): """ CELAS3(801,8,75) - the marker for Record 31 """ ntotal = 16 # 4*4 s = Struct(b'4i') nelements = (len(data) - n) // ntotal for i in range(nelements): eData = data[n:n+16] out = s.unpack(eData) self.binary_debug.write(' CELAS3=%s\n' % str(out)) (eid, pid, s1, s2) = out elem = CELAS3(None, out) self.addOp2Element(elem) n += ntotal self.card_count['CELAS3'] = nelements return n def _readCELAS4(self, data, n): """ CELAS4(901,9,76) - the marker for Record 32 """ s = Struct(b'ifii') nelements = (len(data) - n) // 16 for i in range(nelements): eData = data[n:n + 16] # 4*4 out = s.unpack(eData) self.binary_debug.write(' CELAS4=%s\n' % str(out)) (eid, k, s1, s2) = out elem = CELAS4(None, out) self.addOp2Element(elem) n += 16 self.card_count['CELAS4'] = nelements return n # CFAST # CFASTP def _readCFLUID2(self, data, n): """ CFLUID2(8515,85,209) - the marker for Record 35 """ return n def _readCFLUID3(self, data, n): """ CFLUID3(8615,86,210) - the marker for Record 36 """ return n def _readCFLUID4(self, data, n): """ CFLUID4(8715,87,211) - the marker for Record 37 """ return n # CINT def _readCGAP(self, data, n): """ CGAP(1908,19,104) - the marker for Record 39 """ s1 = Struct(b'4i3fii') nelements = (len(data) - n) // 36 for i in range(nelements): eData = data[n:n + 36] # 9*4 out = s1.unpack(eData) (eid, pid, ga, gb, x1, x2, x3, f, cid) = out # f=0,1 g0 = None f2, = unpack(b'i', eData[28:32]) assert f == f2, 'f=%s f2=%s' % (f, f2) if f == 2: g0 = unpack(b'i', eData[16:20]) x1 = None x2 = None x3 = None dataIn = [eid, pid, ga, gb, g0, x1, x2, x3, cid] elem = CGAP(None, dataIn) self.addOp2Element(elem) n += 36 self.card_count['CGAP'] = nelements return n # CHACAB # CHACBR # CHBDYE # CHBDYG def _readCHBDYG(self, data, n): """ CHBDYG(10808,108,406) - the marker for Record 43 """ ntotal = 64 # 16*4 s = Struct(b'16i') nelements = (len(data) - n) // ntotal for i in range(nelements): eData = data[n:n+64] out = s.unpack(eData) (eid, blank, Type, iviewf, iviewb, radmidf, radmidb, blank2, g1, g2, g3, g4, g5, g6, g7, g8) = out self.binary_debug.write(' CHBDYG=%s\n' % str(out)) dataIn = [eid, Type, iviewf, iviewb, radmidf, radmidb, g1, g2, g3, g4, g5, g6, g7, g8] elem = CHBDYG(None, dataIn) self.addOp2Element(elem) n += ntotal def _readCHBDYP(self, data, n): self.binary_debug.write('skipping CHBDYP in GEOM2\n') return n def _readCHEXA(self, data, n): """ CHEXA(7308,73,253) - the marker for Record 45 """ s = Struct(b'22i') ntotal = 88 # 22*4 nelements = (len(data) - n) // ntotal for i in range(nelements): edata = data[n:n+88] out = s.unpack(edata) self.binary_debug.write(' CHEXA=%s\n' % str(out)) (eid, pid, g1, g2, g3, g4, g5, g6, g7, g8, g9, g10, g11, g12, g13, g14, g15, g16, g17, g18, g19, g20) = out dataIn = [eid, pid, g1, g2, g3, g4, g5, g6, g7, g8, ] big_nodes = [g9, g10, g11, g12, g13, g14, g15, g16, g17, g18, g19, g20] if sum(big_nodes) > 0: elem = CHEXA20(None, dataIn + big_nodes) else: elem = CHEXA8(None, dataIn) self.addOp2Element(elem) n += ntotal self.card_count['CHEXA'] = nelements return n # CHEXA20F # CHEXAFD # CHEXAL # CHEXP # CHEXPR def _readCMASS1(self, data, n): """ CMASS1(1001,10,65) - the marker for Record 51 """ s = Struct(b'6i') nelements = (len(data) - n) // 24 for i in range(nelements): eData = data[n:n + 24] # 6*4 out = s.unpack(eData) self.binary_debug.write(' CMASS1=%s\n' % str(out)) #(eid, pid, g1, g2, c1, c2) = out elem = CMASS1(None, out) self.addOp2Element(elem) n += 24 self.card_count['CMASS1'] = nelements return n def _readCMASS2(self, data, n): """ CMASS2(1101,11,66) - the marker for Record 52 """ s = Struct(b'if4i') nelements = (len(data) - n) // 24 for i in range(nelements): eData = data[n:n + 24] # 6*4 out = s.unpack(eData) self.binary_debug.write(' CMASS2=%s\n' % str(out)) #(eid, m, g1, g2, c1, c2) = out elem = CMASS2(None, out) self.addOp2Element(elem) n += 24 self.card_count['CMASS2'] = nelements return n def _readCMASS3(self, data, n): """ CMASS3(1201,12,67) - the marker for Record 53 """ s = Struct(b'4i') nelements = (len(data) - n) // 16 for i in range(nelements): eData = data[n:n + 16] # 4*4 out = s.unpack(eData) self.binary_debug.write(' CMASS3=%s\n' % str(out)) #(eid, pid, s1, s2) = out elem = CMASS3(None, out) self.addOp2Element(elem) n += 16 self.card_count['CMASS3'] = nelements return n def _readCMASS4(self, data, n): """ CMASS4(1301,13,68) - the marker for Record 54 """ nelements = (len(data) - n) // 16 s = Struct(b'ifii') for i in range(nelements): eData = data[n:n + 16] # 4*4 out = s.unpack(eData) #(eid, m,s 1, s2) = out elem = CMASS4(None, out) self.addOp2Element(elem) n += 16 self.card_count['CMASS4'] = nelements return n def _readCMFREE(self, data, n): """ CMFREE(2508,25,0) - the marker for Record 55 """ self.binary_debug.write('skipping CMFREE in GEOM2\n') return n def _readCONM1(self, data, n): """ CONM1(1401,14,63) - the marker for Record 56 """ s = Struct(b'3i21f') nelements = (len(data) - n) // 96 for i in range(nelements): eData = data[n:n + 96] # 24*4 out = s.unpack(eData) self.binary_debug.write(' CONM1=%s\n' % str(out)) (eid, g, cid, m1, m2a, m2b, m3a, m3b, m3c, m4a, m4b, m4c, m4d, m5a, m5b, m5c, m5d, m5e, m6a, m6b, m6c, m6d, m6e, m6f) = out elem = CONM1(None, out) self.addOp2Element(elem) n += 96 self.card_count['CONM1'] = nelements return n def _readCONM2(self, data, n): """ CONM2(1501,15,64) - the marker for Record 57 """ ntotal = 52 # 13*4 s = Struct(b'3i10f') nelements = (len(data) - n) // ntotal for i in range(nelements): eData = data[n:n+52] out = s.unpack(eData) self.binary_debug.write(' CONM2=%s\n' % str(out)) (eid, g, cid, m, x1, x2, x3, i1, i2a, i2b, i3a, i3b, i3c) = out elem = CONM2(None, out) self.addOp2Element(elem) n += ntotal self.card_count['CONM2'] = nelements return n def _readCONROD(self, data, n): """ CONROD(1601,16,47) - the marker for Record 58 """ ntotal = 32 # 8*4 s = Struct(b'4i4f') nelements = (len(data) - n) // ntotal for i in range(nelements): eData = data[n:n+32] out = s.unpack(eData) self.binary_debug.write(' CONROD=%s\n' % str(out)) (eid, n1, n2, mid, a, j, c, nsm) = out elem = CONROD(None, out) self.addOp2Element(elem) n += ntotal self.card_count['CONROD'] = nelements return n def _readCONV(self, data, n): """ CONV(12701,127,408) - the marker for Record 59 """ #return ntotal = 80 # 20*4 s = Struct(b'12i8f') nelements = (len(data) - n) // ntotal for i in range(nelements): eData = data[n:n+80] out = s.unpack(eData) self.binary_debug.write(' CONV=%s\n' % str(out)) (eid, pconID, flmnd, cntrlnd, ta1, ta2, ta3, ta5, ta6, ta7, ta8, wt1, wt2, wt3, wt5, wt6, wt7, wt8) = out dataIn = [eid, pconID, flmnd, cntrlnd, [ta1, ta2, ta3, ta5, ta6, ta7, ta8], [wt1, wt2, wt3, wt5, wt6, wt7, wt8]] elem = CONV(None, dataIn) self.addOp2Element(elem) n += ntotal self.card_count['CONV'] = nelements return n def _readCONVM(self, data, n): """ CONVM(8908,89,422) - the marker for Record 60 """ return n ntotal = 28 # 7*4 s = Struct(b'7i') nelements = (len(data) - n) // ntotal for i in range(nelements): eData = data[n:n+28] out = unpack(eData) self.binary_debug.write(' CONVM=%s\n' % str(out)) (eid, pconID, flmnd, cntrlnd, [ta1, ta2, ta3]) = out dataIn = [eid, pconID, flmnd, cntrlnd, [ta1, ta2, ta3]] elem = CONVM(None, dataIn) # undefined self.addOp2Element(elem) n += ntotal self.card_count['CONVM'] = nelements return n # CPENP def _readCPENTA(self, data, n): """ CPENTA(4108,41,280) - the marker for Record 62 """ s = Struct(b'17i') nelements = (len(data) - n) // 68 for i in range(nelements): eData = data[n:n + 68] # 17*4 out = s.unpack(eData) self.binary_debug.write(' CPENTA=%s\n' % str(out)) (eid, pid, g1, g2, g3, g4, g5, g6, g7, g8, g9, g10, g11, g12, g13, g14, g15) = out dataIn = [eid, pid, g1, g2, g3, g4, g5, g6] bigNodes = [g7, g8, g9, g10, g11, g12, g13, g14, g15] if sum(bigNodes) > 0: elem = CPENTA15(None, dataIn + bigNodes) else: elem = CPENTA6(None, dataIn) self.addOp2Element(elem) n += 68 self.card_count['CPENTA'] = nelements return n # CPENPR # CPENT15F # CPENT6FD # CQDX4FD # CQDX9FD def _readCQUAD(self, data, n): """ CQUAD(9108,91,507) - the marker for Record 68 """ return self.runCQUAD(data, n, CQUAD)
[docs] def runCQUAD(self, data, n, Element): """common method for CQUAD, CQUADX""" s = Struct(b'11i') nelements = (len(data) - n) // 44 # 11*4 self.binary_debug.write('ndata=%s\n' % (nelements * 44)) for i in range(nelements): eData = data[n:n + 44] out = s.unpack(eData) (eid, pid, n1, n2, n3, n4, n5, n6, n7, n8, n9) = out self.binary_debug.write(' %s=%s\n' % (Element.type, str(out))) #print("eid=%s pid=%s n1=%s n2=%s n3=%s n4=%s theta=%s zoffs=%s tflag=%s t1=%s t2=%s t3=%s t4=%s" %(eid,pid,n1,n2,n3,n4,theta,zoffs,tflag,t1,t2,t3,t4)) #dataInit = [eid,pid,n1,n2,n3,n4,theta,zoffs,tflag,t1,t2,t3,t4] data = [eid, pid, n1, n2, n3, n4, n5, n6, n7, n8, n9] elem = Element(None, data) self.addOp2Element(elem) n += 44 self.card_count[Element.type] = nelements return n
def _readCQUAD4(self, data, n): """ CQUAD4(2958,51,177) - the marker for Record 69 CQUAD4(13900,139,9989) - the marker for Record 70 """ return self.runCQUAD4(data, n, CQUAD4)
[docs] def runCQUAD4(self, data, n, Element): """ common method for CQUAD4, CQUADR """ nelements = (len(data) - n) // 56 s = Struct(b'6iffii4f') self.binary_debug.write('ndata=%s\n' % (nelements * 44)) for i in range(nelements): eData = data[n:n + 56] # 14*4 out = s.unpack(eData) (eid, pid, n1, n2, n3, n4, theta, zoffs, blank, tflag, t1, t2, t3, t4) = out self.binary_debug.write(' %s=%s\n' % (Element.type, str(out))) #print("eid=%s pid=%s n1=%s n2=%s n3=%s n4=%s theta=%s zoffs=%s blank=%s tflag=%s t1=%s t2=%s t3=%s t4=%s" %(eid,pid,n1,n2,n3,n4,theta,zoffs,blank,tflag,t1,t2,t3,t4)) dataInit = [eid, pid, n1, n2, n3, n4, theta, zoffs, tflag, t1, t2, t3, t4] elem = Element(None, dataInit) self.addOp2Element(elem) n += 56 self.card_count[Element.type] = nelements return n
# CQUAD4FD def _readCQUAD8(self, data, n): """ CQUAD8(4701,47,326) - the marker for Record 71 .. warning:: inconsistent with dmap manual """ return nelements = (len(data) - n) // 64 # 17*4 s = Struct(b'10i5fi') for i in range(nelements): eData = data[n:n + 64] out = s.unpack(eData) self.binary_debug.write(' CQUAD8=%s\n' % str(out)) (eid, pid, n1, n2, n3, n4, n5, n6, n7, n8, t1, t2, t3, t4, theta, tflag) = out #print("eid=%s pid=%s n1=%s n2=%s n3=%s n4=%s theta=%s zoffs=%s tflag=%s t1=%s t2=%s t3=%s t4=%s" %(eid,pid,n1,n2,n3,n4,theta,zoffs,tflag,t1,t2,t3,t4)) #dataInit = [eid,pid,n1,n2,n3,n4,theta,zoffs,tflag,t1,t2,t3,t4] elem = CQUAD8(None, out) self.addOp2Element(elem) n += 64 self.card_count['CQUAD8'] = nelements return n # CQUAD9FD # CQUADP def _readCQUADR(self, data, n): """ CQUADR(8009,80,367) - the marker for Record 74 """ return self.runCQUAD4(data, n, CQUADR) def _readCQUADX(self, data, n): """ CQUADX(9008,90,508) - the marker for Record 75 """ #print("reading CQUADX") return self.runCQUAD4(data, n, CQUADX) # CRBAR # CRBE1 # CRBE3 # CRJOINT def _readCROD(self, data, n): """ CROD(3001,30,48) - the marker for Record 80 """ s = Struct(b'4i') nelements = (len(data) - n) // 16 # 4*4 for i in range(nelements): eData = data[n:n + 16] out = s.unpack(eData) self.binary_debug.write(' CROD=%s\n' % str(out)) (eid, pid, n1, n2) = out elem = CROD(None, out) self.addOp2Element(elem) n += 16 self.card_count['CROD'] = nelements return n # CRROD # CSEAM def _readCSHEAR(self, data, n): """ CSHEAR(3101,31,61) - the marker for Record 83 """ s = Struct(b'6i') nelements = (len(data) - n) // 24 # 6*4 for i in range(nelements): eData = data[n:n + 24] out = s.unpack(eData) self.binary_debug.write(' CSHEAR=%s\n' % str(out)) (eid, pid, n1, n2, n3, n4) = out elem = CSHEAR(None, out) self.addOp2Element(elem) n += 24 self.card_count['CSHEAR'] = nelements return n # CSLOT3 # CSLOT4 def _readCTETP(self, data, n): """ CTETP(12201,122,9013) - the marker for Record 86 .. todo:: create object """ #raise NotImplementedError('needs work...') nelements = (len(data) - n) // 108 # 27*4 s = Struct(b'27i') for i in range(nelements): eData = data[n:n+108] out = s.unpack(eData) self.binary_debug.write(' CTETP=%s\n' % str(out)) (eid, pid, n1, n2, n3, n4, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, f1, f2, f3, f4, b1, ee1, ee2, ee3, ee4) = out #print("out = ",out) e = [e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12] f = [f1, f2, f3, f4] ee = [ee1, ee2, ee3, ee4] #print("e = ",e) #print("f = ",f) #print("b1 = ",b1) #print("ee = ",ee) dataIn = [eid, pid, n1, n2, n2, n3, n4] elem = CTETRA4(None, dataIn) self.addOp2Element(elem) def _readCTETRA(self, data, n): """ CTETRA(5508,55,217) - the marker for Record 87 """ s = Struct(b'12i') nelements = (len(data) - n)// 48 # 12*4 for i in range(nelements): eData = data[n:n + 48] out = s.unpack(eData) self.binary_debug.write(' CTETRA=%s\n' % str(out)) (eid, pid, n1, n2, n3, n4, n5, n6, n7, n8, n9, n10) = out #print("out = ",out) dataIn = [eid, pid, n1, n2, n3, n4] bigNodes = [n5, n6, n7, n8, n9, n10] if sum(bigNodes) > 0: elem = CTETRA10(None, dataIn + bigNodes) else: elem = CTETRA4(None, dataIn) self.addOp2Element(elem) n += 48 self.card_count['CTETRA'] = nelements return n # CTETPR # CTETR10F # CTETR4FD # CTQUAD # CTTRIA def _readCTRIA3(self, data, n): """ CTRIA3(5959,59,282) - the marker for Record 93 """ ntotal = 52 # 13*4 s = Struct(b'5iff3i3f') nelements = (len(data) - n)// 52 # 13*4 for i in range(nelements): eData = data[n:n+52] out = s.unpack(eData) #print("eid=%s pid=%s n1=%s n2=%s n3=%s theta=%s zoffs=%s blank1=%s blank2=%s tflag=%s t1=%s t2=%s t3=%s" %(eid,pid,n1,n2,n3,theta,zoffs,blank1,blank2,tflag,t1,t2,t3)) (eid, pid, n1, n2, n3, theta, zoffs, blank1, blank2, tflag, t1, t2, t3) = out self.binary_debug.write(' CTRIA3=%s\n' % str(out)) dataIn = [eid, pid, n1, n2, n3, theta, zoffs, tflag, t1, t2, t3] elem = CTRIA3(None, dataIn) self.addOp2Element(elem) n += ntotal self.card_count['CTRIA3'] = nelements return n # CTRIAFD def _readCTRIA6(self, data, n): """ CTRIA6(4801,48,327) - the marker for Record 95 .. warning:: inconsistent with dmap manual """ s = Struct(b'8i4fi') nelements = (len(data) - n) // 52 # 13*4 for i in range(nelements): eData = data[n:n + 52] out = s.unpack(eData) self.binary_debug.write(' CTRIA6=%s\n' % str(out)) #print("eid=%s pid=%s n1=%s n2=%s n3=%s theta=%s zoffs=%s blank1=%s blank2=%s tflag=%s t1=%s t2=%s t3=%s" %(eid,pid,n1,n2,n3,theta,zoffs,blank1,blank2,tflag,t1,t2,t3)) (eid, pid, n1, n2, n3, n4, n5, n6, theta, t1, t2, t3, tflag) = out elem = CTRIA6(None, out) self.addOp2Element(elem) n += 52 self.card_count['CTRIA6'] = nelements return n # CTRIA6FD # CTRIAP def _readCTRIAR(self, data, n): # 98 self.binary_debug.write('skipping CTRIAR in GEOM2\n') return n # CTRIAX def _readCTRIAX6(self, data, n): # 100 self.binary_debug.write('skipping CTRIAX6 in GEOM2\n') return n # CTRIX3FD # CTRIX6FD def _readCTUBE(self, data, n): """ CTUBE(3701,37,49) - the marker for Record 103 """ s = Struct(b'4i') nelements = (len(data) - n) // 16 for i in range(nelements): eData = data[n:n + 16] # 4*4 out = s.unpack(eData) self.binary_debug.write(' CTUBE=%s\n' % str(out)) (eid, pid, n1, n2) = out elem = CTUBE(None, out) self.addOp2Element(elem) n += 16 self.card_count['CTUBE'] = nelements return n def _readCVISC(self, data, n): """CVISC(3901,39, 50) - the marker for Record 104""" s = Struct(b'4i') nelements = (len(data) - n) // 16 for i in range(nelements): eData = data[n:n + 16] # 4*4 out = s.unpack(eData) self.binary_debug.write(' CVISC=%s\n' % str(out)) #(eid,pid,n1,n2) = out elem = CVISC(None, out) self.addOp2Element(elem) n += 16 self.card_count['CVISC'] = nelements return n def _readCWELD(self, data, n): # 105 self.binary_debug.write('skipping CWELD in GEOM2\n') return n def _readCWELDC(self, data, n): # 106 self.binary_debug.write('skipping CWELDC in GEOM2\n') return n def _readCWELDG(self, data, n): # 107 self.binary_debug.write('skipping CWELDG in GEOM2\n') return n # CWSEAM # GENEL # GMDNDC # GMBNDS # GMINTC # GMINTS def _readPLOTEL(self, data, n): # 114 self.binary_debug.write('skipping PLOTEL in GEOM2\n') return n # RADBC # RADINT # SINT
[docs] def add_SPOINT(self, spooint): raise RuntimeError('this should be overwritten')
def _readSPOINT(self, data, n): """ (5551,49,105) - the marker for Record 118 """ npoints = (len(data) - n) // 4 fmt = b'%ii' % npoints nids = unpack(fmt, data[n:]) self.binary_debug.write('SPOINT=%s\n' % str(nids)) spoint = SPOINTs(None, list(nids)) self.add_SPOINT(spoint) self.card_count['SPOINT'] = npoints return n def _readVUBEAM(self, data, n): # 119 self.binary_debug.write('skipping VUBEAM in GEOM2\n') return n
# VUHEXA # VUQUAD4 # VUPENTA # VUTETRA # VUTRIA # VUBEAM # VUHEXA # VUQUAD4 # WELDP