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

#pylint: disable=C0111,C0103,C0301,W0612,W0613,R0914,R0201
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.cards.materials import (CREEP, MAT1, MAT2, MAT3, MAT4, MAT5,
                                           MAT8, MAT9, MAT10, MATHP)
from pyNastran.bdf.cards.material_deps import (MATT1, MATS1)
from pyNastran.bdf.cards.dynamic import NLPARM, TSTEP, TSTEPNL


[docs]class MPT(object):
[docs] def add_TSTEPNL(self, card, allowOverwrites=True): raise RuntimeError('this should be overwritten')
[docs] def add_NLPARM(self, card, allowOverwrites=True): raise RuntimeError('this should be overwritten')
[docs] def add_material_dependence(self, material, allowOverwrites=True): raise RuntimeError('this should be overwritten')
[docs] def add_creep_material(self, material, allowOverwrites=True): raise RuntimeError('this should be overwritten')
[docs] def add_structural_material(self, material, allowOverwrites=True): raise RuntimeError('this should be overwritten')
[docs] def add_thermal_material(self, material, allowOverwrites=True): raise RuntimeError('this should be overwritten')
def _read_mpt_4(self, data): if self.read_mode == 1: return len(data) return self._read_geom_4(self._mpt_map, data) def __init__(self): self.card_count = {} self.bigMaterials = {} self._mpt_map = { (1003, 10, 245): ['CREEP', self._readCREEP], # record 1 ( 103, 1, 77): ['MAT1', self._readMAT1], # record 2 ( 203, 2, 78): ['MAT2', self._readMAT2], # record 3 (1403, 14, 122): ['MAT3', self._readMAT3], # record 4 (2103, 21, 234): ['MAT4', self._readMAT4], # record 5 (2203, 22, 235): ['MAT5', self._readMAT5], # record 6 (2503, 25, 288): ['MAT8', self._readMAT8], # record 7 (2603, 26, 300): ['MAT9', self._readMAT9], # record 8 - buggy (2801, 28, 365): ['MAT10', self._readMAT10], # record 9 (4506, 45, 374): ['MATHP', self._readMATHP], # record 11 (503, 5, 90): ['MATS1', self._readMATS1], # record 12 (703, 7, 91): ['MATT1', self._readMATT1], # record 13 - not done (803, 8, 102): ['MATT2', self._readMATT2], # record 14 - not done (1503, 14, 189): ['MATT3', self._readMATT3], # record 15 - not done (2303, 23, 237): ['MATT4', self._readMATT4], # record 16 - not done (2403, 24, 238): ['MATT5', self._readMATT5], # record 17 - not done (2703, 27, 301): ['MATT9', self._readMATT9], # record 19 - not done (8802, 88, 413): ['RADM', self._readRADM], # record 25 - not done # record 26 (3003, 30, 286): ['NLPARM', self._readNLPARM], # record 27 (3104, 32, 350): ['NLPCI', self._readNLPCI], # record 28 (3103, 31, 337): ['TSTEPNL', self._readTSTEPNL], # record 29 (903, 9, 336): ['', self._readFake], (8902, 89, 423): ['', self._readFake], (9002, 90, 410): ['', self._readFake], }
[docs] def addOp2Material(self, mat): self.add_structural_material(mat, allowOverwrites=True)
#print(str(mat)[:-1]) def _readCREEP(self, data, n): """ CREEP(1003,10,245) - record 1 """ #print "reading CREEP" nmaterials = (len(data) - n) // 64 s = Struct(b'i2f4ifi7f') for i in range(nmaterials): edata = data[n:n+64] out = s.unpack(edata) (mid, T0, exp, form, tidkp, tidcp, tidcs, thresh, Type, ag1, ag2, ag3, ag4, ag5, ag6, ag7) = out self.add_creep_material(CREEP(None, out), allowOverwrites=True) n += 64 self.card_count['CREEP'] = nmaterials return n def _readMAT1(self, data, n): """ MAT1(103,1,77) - record 2 """ #print "reading MAT1" ntotal = 48 # 12*4 s = Struct(b'i10fi') nmaterials = (len(data) - n) // ntotal for i in range(nmaterials): eData = data[n:n+48] out = s.unpack(eData) (mid, E, G, nu, rho, A, TRef, ge, St, Sc, Ss, mcsid) = out self.addOp2Material(MAT1(None, out)) n += ntotal self.card_count['MAT1'] = nmaterials return n def _readMAT2(self, data, n): """ MAT2(203,2,78) - record 3 """ #print "reading MAT2" ntotal = 68 # 17*4 s = Struct(b'i15fi') nmaterials = (len(data) - n) // ntotal for i in range(nmaterials): edata = data[n:n+68] out = s.unpack(edata) (mid, g1, g2, g3, g4, g5, g6, rho, aj1, aj2, aj3, TRef, ge, St, Sc, Ss, mcsid) = out #print "MAT2 = ",out mat = MAT2(None, out) if mid > 1e8 or mid < 0: # just a checker for out of range materials self.bigMaterials[mid] = mat else: self.addOp2Material(mat) n += ntotal self.card_count['MAT2'] = nmaterials return n def _readMAT3(self, data, n): """ MAT3(1403,14,122) - record 4 """ #print "reading MAT3" s = Struct(b'i8fi5fi') nmaterials = (len(data) - n) // 64 for i in range(nmaterials): out = s.unpack(data[n:n+64]) (mid, ex, eth, ez, nuxth, nuthz, nuzx, rho, gzx, blank, ax, ath, az, TRef, ge, blank) = out mat = MAT3(None, [mid, ex, eth, ez, nuxth, nuthz, nuzx, rho, gzx, ax, ath, az, TRef, ge]) self.addOp2Material(mat) n += 64 self.card_count['MAT3'] = nmaterials return n def _readMAT4(self, data, n): """ MAT4(2103,21,234) - record 5 """ #print "reading MAT4" s = Struct(b'i10f') nmaterials = (len(data) - n) // 40 for i in range(nmaterials): out = s.unpack(data[n:n+44]) (mid, k, cp, rho, h, mu, hgen, refenth, tch, tdelta, qlat) = out self.add_thermal_material(MAT4(None, out), allowOverwrites=True) n += 44 self.card_count['MAT4'] = nmaterials return n def _readMAT5(self, data, n): """ MAT5(2203,22,235) - record 6 """ #print "reading MAT5" s = Struct(b'i9f') nmaterials = (len(data) - n) // 40 for i in range(nmaterials): out = s.unpack(data[n:n+40]) (mid, k1, k2, k3, k4, k5, k6, cp, rho, hgen) = out self.add_thermal_material(MAT5(None, out), allowOverwrites=True) n += 40 self.card_count['MAT5'] = nmaterials return n def _readMAT8(self, data, n): """ MAT8(2503,25,288) - record 7 """ #print "reading MAT8" s = Struct(b'i18f') nmaterials = (len(data) - n) // 76 for i in range(nmaterials): out = s.unpack(data[n:n+76]) (mid, E1, E2, nu12, G12, G1z, G2z, rho, a1, a2, TRef, Xt, Xc, Yt, Yc, S, ge, f12, strn) = out self.addOp2Material(MAT8(None, out)) n += 76 self.card_count['MAT8'] = nmaterials return n def _readMAT9(self, data, n): """ MAT9(2603,26,300) - record 9 .. todo:: buggy """ #print "reading MAT9" s = Struct(b'22i9f4i') nmaterials = (len(data) - n) // 140 for i in range(nmaterials): out = s.unpack(data[n:n+140]) (mid, g1, g2, g3, g4, g5, g6, g7, g8, g9, g10, g11, g12, g13, g14, g15, g16, g17, g18, g19, g20, g21, rho, a1, a2, a3, a4, a5, a6, TRef, ge, blank1, blank2, blank3, blank4) = out dataIn = [mid, [g1, g2, g3, g4, g5, g6, g7, g8, g9, g10, g11, g12, g13, g14, g15, g16, g17, g18, g19, g20, g21], rho, [a1, a2, a3, a4, a5, a6], TRef, ge] #print "dataIn = ",dataIn self.addOp2Material(MAT9(None, dataIn)) n += 140 self.card_count['MAT9'] = nmaterials return n def _readMAT10(self, data, n): """ MAT10(2801,28,365) - record 9 """ #print "reading MAT10" ntotal = 44 # 5*4 s = Struct(b'i4f') nmaterials = (len(data) - n) // ntotal for i in range(nmaterials): edata = data[n:n+20] out = s.unpack(edata) (mid, bulk, rho, c, ge) = out self.addOp2Material(MAT10(None, out)) self.card_count['MAT10'] = nmaterials return n # MAT11 - unused def _readMATHP(self, data, n): """MATHP(4506,45,374) - Record 11""" #print "reading MATHP" nmaterials = 0 s1 = Struct(b'i7f3i23fi') s2 = Struct(b'8i') n2 = n while n2 < n: eData = data[n:n+140] n += 140 out1 = s1.unpack(eData) (mid, a10, a01, d1, rho, alpha, tref, ge, sf, na, nd, kp, a20, a11, a02, d2, a30, a21, a12, a03, d3, a40, a31, a22, a13, a04, d4, a50, a41, a32, a23, a14, a05, d5, continueFlag) = out1 dataIn = [out1] if continueFlag: eData = data[n:n+32] # 7*4 n += 32 out2 = s2.unpack(eData) (tab1, tab2, tab3, tab4, x1, x2, x3, tab5) = out2 data.append(out2) self.addOp2Material(MATHP(None, dataIn)) nmaterials += 1 self.card_count['MATHP'] = nmaterials return n def _readMATS1(self, data, n): """ MATS1(503,5,90) - record 12 """ #print "reading MATS1" ntotal = 44 # 11*4 s = Struct(b'3ifiiff3i') nmaterials = (len(data) - n) // ntotal for i in range(nmaterials): edata = data[n:n+44] out = s.unpack(edata) (mid, tid, Type, h, yf, hr, limit1, limit2, a, b, c) = out dataIn = [mid, tid, Type, h, yf, hr, limit1, limit2] self.add_material_dependence(MATS1(None, dataIn), allowOverwrites=True) self.card_count['MATS1'] = nmaterials return n def _readMATT1(self, data, n): self.binary_debug.write('skipping MATT1 in MPT\n') return len(data) def _readMATT2(self, data, n): self.binary_debug.write('skipping MATT2 in MPT\n') return len(data) def _readMATT3(self, data, n): self.binary_debug.write('skipping MATT3 in MPT\n') return len(data) def _readMATT4(self, data, n): self.binary_debug.write('skipping MATT4 in MPT\n') return len(data) def _readMATT5(self, data, n): self.binary_debug.write('skipping MATT5 in MPT\n') return len(data) # MATT8 - unused def _readMATT9(self, data, n): self.binary_debug.write('skipping MATT9 in MPT\n') return len(data) # MBOLT # MBOLTUS # MSTACK # NLAUTO # RADBND def _readRADM(self, data, n): """ RADM(8802,88,413) - record 25 .. todo:: add object """ #print "reading RADM" return s = Struct(b'i', ) while len(data) >= 4: # 1*4 eData = data[:4] data = data[4:] number, = s.unpack(eData) iFormat = 'if%if' % (number + 1) eDataLen = len(strings) * 4 eData = data[:eDataLen] data = data[eDataLen:] iFormat = bytes(iFormat) pack = list(unpack(iFormat, eData)) packs = [] while data: eData = data[:eDataLen] data = data[eDataLen:] pack = list(unpack(iFormat, eData)) packs.append(pack) #mat = RADM(None, packs) #self.addOp2Material(mat) return n # RADMT def _readNLPARM(self, data, n): """ NLPARM(3003,30,286) - record 27 """ #print "reading NLPARM" ntotal = 76 # 19*4 s = Struct(b'iif5i3f3iffiff') nentries = (len(data) - n) // ntotal for i in range(nentries): edata = data[n:n+76] out = s.unpack(edata) #(sid,ninc,dt,kMethod,kStep,maxIter,conv,intOut,epsU,epsP,epsW, # maxDiv,maxQn,maxLs,fStress,lsTol,maxBisect,maxR,rTolB) = out self.add_NLPARM(NLPARM(None, out)) n += ntotal self.card_count['NLPARM'] = nentries return n def _readNLPCI(self, data, n): self.binary_debug.write('skipping NLPCI in MPT\n') return len(data) def _readTSTEPNL(self, data, n): """ TSTEPNL(3103,31,337) - record 29 """ #print("reading TSTEPNL") ntotal = 88 # 19*4 s = Struct(b'iif5i3f3if3i4f') nentries = (len(data) - n) // ntotal for i in range(nentries): edata = data[n:n+88] out = s.unpack(edata) #(sid,ndt,dt,no,kMethod,kStep,maxIter,conv,epsU,epsP,epsW, # maxDiv,maxQn,maxLs,fStress,lsTol,maxBisect,adjust,mStep,rb,maxR,uTol,rTolB) = out self.add_TSTEPNL(TSTEPNL(None, out)) n += ntotal self.card_count['TSTEPNL'] = nentries return n