def _read_pbeam(self, data, n): """ PBEAM(5402,54,262) - the marker for Record 14 .. todo:: add object """ struct1 = Struct(b(self._endian + '4if')) struct2 = Struct(b(self._endian + '16f')) struct3 = Struct(b(self._endian + '16f')) ntotal = 1072 # 44+12*84+20 nproperties = (len(data) - n) // ntotal print('') #assert nproperties > 0, 'ndata-n=%s n=%s datai\n%s' % (len(data)-n, n, self.show_data(data[n:100+n])) ndata = len(data) while n < ndata: #while 1: #for i in range(nproperties): edata = data[n:n+20] n += 20 data_in = list(struct1.unpack(edata)) if self.is_debug_file: self.log.info('PBEAM pid=%s mid=%s nsegments=%s ccf=%s x=%s\n' % tuple(data_in)) (pid, mid, nsegments, ccf, x) = data_in self.log.info('PBEAM pid=%s mid=%s nsegments=%s ccf=%s x=%s' % tuple(data_in)) # Constant cross-section flag: 1=yes and 0=no # what is 2? assert ccf in [0, 1, 2], ' PBEAM pid=%s mid=%s nsegments=%s ccf=%s x=%s\n' % tuple(data_in) for i in range(11): edata = data[n:n+64] if len(edata) != 64: endpack = [] raise RuntimeError('PBEAM unexpected length i=%s...' % i) n += 64 pack = struct2.unpack(edata) (soi, xxb, a, i1, i2, i12, j, nsm, c1, c2, d1, d2, e1, e2, f1, f2) = pack if soi == 0.0: so_str = 'NO' elif soi == 1.0: so_str = 'YES' else: raise NotImplementedError('PBEAM pid=%s i=%s x/xb=%s soi=%s' % (pid, i, xxbi, soi)) pack2 = (so_str, xxb, a, i1, i2, i12, j, nsm, c1, c2, d1, d2, e1, e2, f1, f2) data_in.append(pack2) if self.is_debug_file: self.binary_debug.write(' %s\n' % str(pack)) self.log.info(' i=%-2s' % i + ' so=%s xxb=%.1f a=%g i1=%g i2=%g i12=%g j=%g nsm=%g ' 'c=[%s,%s] d=[%s,%s] e=[%s,%s] f=[%s,%s]' % (tuple(pack2))) edata = data[n:n+64] if len(edata) != 64: endpack = [] raise RuntimeError('PBEAM unexpected length 2...') #break else: endpack = struct3.unpack(edata) n += 64 assert len(endpack) == 16, endpack (k1, k2, s1, s2, nsia, nsib, cwa, cwb, # 8 m1a, m2a, m1b, m2b, n1a, n2a, n1b, n2b ) = endpack # 8 -> 16 self.log.info(' k=[%s,%s] s=[%s,%s] nsi=[%s,%s] cw=[%s,%s] ' 'ma=[%s,%s] mb=[%s,%s] na=[%s,%s] nb=[%s,%s]' % (tuple(endpack))) data_in.append(endpack) prop = PBEAM.add_op2_data(data_in) self._add_op2_property(prop) self.card_count['PBEAM'] = nproperties return n