#pylint: disable=C0103
from __future__ import (nested_scopes, generators, division, absolute_import,
print_function, unicode_literals)
from struct import unpack
#91 -> PENTANL
#2 -> BEAM
#33 -> TUBE
#92 -> CONRODNL
[docs]class RealElementsStressStrain(object):
[docs] def skipOES_Element(self):
self.log.debug('skipping approach/table/format/sortCode=%s on %s table' % (self.atfsCode, self.tableName))
#print 'skipping approach/table/format/sortCode=%s on %s table' % (self.atfsCode,self.tableName)
#print self.codeInformation()
self.handleResultsBuffer3(self.dummyPass, None, debug=True)
[docs] def dummyPass(self):
self.data = b''
[docs] def OES_Thermal(self, debug=False):
#assert self.numWide==5,'invalid numWide...numWide=%s' % (self.numWide)
dt = self.nonlinearFactor
(format1, extract) = self.getOUG_FormatStart()
format1 += '2i5f' # 1+2+5=8
format1 = bytes(format1)
while len(self.data) >= 32: # 4*8
#print self.printSection(40)
eData = self.data[0:32]
self.data = self.data[32:]
#print "len(data) = ",len(eData)
out = unpack(format1, eData)
(eid, sideID, hbdyID, cnvCoeff, fApplied, fConv,
fRad, fTotal) = out
eid = extract(eid, dt)
#print "eid=%s sideID=%s hbdyID=%s coeff=%s fApplied=%s fConv=%s fRad=%s fTotal=%s" % (eid,sideID,hbdyID,cnvCoeff,fApplied,fConv,fRad,fTotal)
#self.obj.addNewEid(eid,axial,axialMS,torsion,torsionMS)
#print "eid=%i axial=%i torsion=%i" % (eid,axial,torsion)
#print "len(data) = ",len(self.data)
###
#print self.rodStress[self.iSubcase]
[docs] def OES_basicElement(self):
"""
genericStressReader - works on CROD_1, CELAS2_12
stress & strain
formatCode=1 sortCode=0 (eid,axial,axialMS,torsion,torsionMS)
"""
dt = self.nonlinearFactor
(format1, extract) = self.getOUG_FormatStart()
(nTotal, dataFormat) = self.obj.getLength()
dataFormat = format1 + dataFormat
#print "nTotal=%s dataFormat=%s len(data)=%s" % (nTotal,dataFormat,len(self.data))
dataFormat = bytes(dataFormat)
n = 0
nEntries = len(self.data) // nTotal
for i in xrange(nEntries):
eData = self.data[n:n + nTotal]
out = unpack(dataFormat, eData)
#print "out = ",out
eid = extract(out[0], dt)
self.obj.addNewEid(dt, eid, out[1:])
n += nTotal
self.data = self.data[n:]
[docs] def OES_CBEAM_2(self):
dt = self.nonlinearFactor
(formatStart, extract) = self.getOUG_FormatStart()
nNodes = 10 # 11-1
nTotal = self.obj.getLengthTotal()
(n1, format1) = self.obj.getLength1()
(n2, format2) = self.obj.getLength2()
format1 = formatStart + format1
format1 = bytes(format1)
format2 = bytes(format2)
while len(self.data) >= nTotal:
eData = self.data[0:n1]
self.data = self.data[n1:]
#print "len(data) = ",len(eData)
out = unpack(format1, eData)
#print "outA = ",out
eid2 = extract(out[0], dt)
self.obj.addNewEid(dt, eid2, out[1:])
for iNode in xrange(nNodes):
eData = self.data[0:n2]
self.data = self.data[n2:]
out = unpack(format2, eData)
#print "outB = ",out
self.obj.add(dt, eid2, out)
#print "eid=%i axial=%i torsion=%i" % (eid,axial,torsion)
#print "len(data) = ",len(self.data)
[docs] def OES_CQUAD4_33(self):
"""
GRID-ID DISTANCE,NORMAL-X,NORMAL-Y,SHEAR-XY,ANGLE,MAJOR MINOR,VONMISES
"""
dt = self.nonlinearFactor
(format1, extract) = self.getOUG_FormatStart()
format1 += '16f'
format1 = bytes(format1)
nNodes = 0 # centroid + 4 corner points
#self.printSection(20)
#term = data[0:4] CEN/
#data = data[4:]
#print "*****"
#self.printBlock(self.data)
assert self.numWide == 17, ('invalid numWide...numWide=%s'
% (self.numWide))
while len(self.data) >= 68: # 2+17*5 = 87 -> 87*4 = 348
#print self.printBlock(self.data[0:100])
#(eid,) = unpack(b'i',self.data[0:4])
#self.data = self.data[8:] # 2
eData = self.data[0:68] # 4*17
self.data = self.data[68:]
out = unpack(format1, eData) # 17
(eid, fd1, sx1, sy1, txy1, angle1, major1, minor1, maxShear1,
fd2, sx2, sy2, txy2, angle2, major2, minor2, maxShear2) = out
eid = extract(eid, dt)
#print "eid=%i grid=%s fd1=%-3.1f sx1=%i sy1=%i txy1=%i angle1=%i major1=%i minor1=%i vm1=%i" % (eid,'C',fd1,sx1,sy1,txy1,angle1,major1,minor1,maxShear1)
#print " fd2=%-3.1f sx2=%i sy2=%i txy2=%i angle2=%i major2=%i minor2=%i vm2=%i\n" % (fd2,sx2,sy2,txy2,angle2,major2,minor2,maxShear2)
#print "nNodes = ",nNodes
self.obj.addNewEid('CQUAD4', dt, eid, 'C', fd1, sx1, sy1,
txy1, angle1, major1, minor1, maxShear1)
self.obj.add(dt, eid, 'C', fd2, sx2, sy2, txy2,
angle2, major2, minor2, maxShear2)
for nodeID in xrange(nNodes): # nodes pts
eData = self.data[0:68] # 4*17
self.data = self.data[68:]
out = unpack(b'i16f', eData[0:68])
(grid, fd1, sx1, sy1, txy1, angle1, major1, minor1, vm1,
fd2, sx2, sy2, txy2, angle2, major2, minor2, vm2,) = out
#print "eid=%i grid=%i fd1=%i sx1=%i sy1=%i txy1=%i angle1=%i major1=%i minor1=%i vm1=%i" % (eid,grid,fd1,sx1,sy1,txy1,angle1,major1,minor1,vm1)
#print " fd2=%i sx2=%i sy2=%i txy2=%i angle2=%i major2=%i minor2=%i vm2=%i\n" % (fd2,sx2,sy2,txy2,angle2,major2,minor2,vm2)
#print "len(data) = ",len(self.data)
#self.printBlock(self.data)
self.obj.addNewNode(dt, eid, grid, fd1, sx1, sy1,
txy1, angle1, major1, minor1, vm1)
self.obj.add(dt, eid, grid, fd2, sx2, sy2,
txy2, angle2, major2, minor2, vm2)
#print '--------------------'
#print "len(data) = ",len(self.data)
#print "tell = ",self.op2.tell()
#self.printSection(100)
#self.dn += 348
###
[docs] def OES_CBAR_34(self):
dt = self.nonlinearFactor
#print "len(data) = ",len(self.data)
assert self.numWide == 16, ('invalid numWide...numWide=%s'
% (self.numWide))
(format1, extract) = self.getOUG_FormatStart()
format1 += '15f'
format1 = bytes(format1)
while len(self.data) >= 64:
#self.printBlock(self.data)
eData = self.data[0:64]
self.data = self.data[64:]
#print "len(data) = ",len(eData)
(eid, s1a, s2a, s3a, s4a, axial, smaxa, smina, MSt,
s1b, s2b, s3b, s4b, smaxb, sminb, MSc) = unpack(format1, eData)
eid2 = extract(eid, dt)
self.obj.addNewEid('CBAR', dt, eid2, s1a, s2a, s3a, s4a, axial, smaxa, smina, MSt,
s1b, s2b, s3b, s4b, smaxb, sminb, MSc)
#print "eid=%i s1=%i s2=%i s3=%i s4=%i axial=%-5i smax=%i smin=%i MSt=%i MSc=%i" % (eid,s1a,s2a,s3a,s4a,axial,smaxa,smina,MSt,MSc)
#print " s1=%i s2=%i s3=%i s4=%i smax=%i smin=%i" % (s1b,s2b,s3b,s4b,smaxb,sminb)
#print "len(data) = ",len(self.data)
[docs] def OES_CSOLID_67(self):
"""
stress is extracted at the centroid
CTETRA_39
CPENTA_67
CHEXA_68
"""
dt = self.nonlinearFactor
(format1, extract) = self.getOUG_FormatStart()
format1 += "i4si"
format1 = bytes(format1)
#nNodes = 5 # 1 centroid + 4 corner points
#self.printSection(20)
#term = self.data[0:4] CEN/
#self.data = self.data[4:]
#print "*****"
ElementType = self.ElementType(self.elementType)
nNodes = 1 # this is a minimum, it will be reset later
nNodesExpected = 1
#assert self.numWide in [109,151,193],'invalid numWide...numWide=%s' % (self.numWide)
while len(self.data) >= 16 + 84 * nNodesExpected:
eData = self.data[0:16]
self.data = self.data[16:]
#self.printBlock(eData)
out = unpack(format1, eData)
(eid, cid, abcd, nNodes) = out
eid2 = extract(eid, dt)
#print "abcd = |%s|" % (abcd)
#print "eid=%s cid=%s nNodes=%s nNodesExpected=%s" % (eid,cid,nNodes,nNodesExpected)
assert nNodes < 21, self.printBlock(eData)
if ElementType == 'TETRA':
nNodesExpected = 5
elif ElementType == 'PENTA':
nNodesExpected = 7
elif ElementType == 'HEXA':
nNodesExpected = 9
else:
raise NotImplementedError('not supported....EType=%s eType=%s nNodes=%s numWide=%s' % (ElementType, self.elementType, nNodes, self.numWide))
#print "len(data) = ",len(self.data)
for nodeID in xrange(nNodesExpected): # nodes pts, +1 for centroid (???)
#print "len(data)A = ",len(self.data)
eData = self.data[0:4 * 21] # for the stresses
self.data = self.data[4 * 21:]
#print "len(data)B = ",len(self.data)
#self.printBlock(eData)
#print "self.tableCode = ",self.tableCode
#print "len(data) = ",len(self.data)
gridDevice, = unpack(b'i', eData[0:4])
#print "gridDevice = ",gridDevice
if gridDevice == 0:
grid = 'C'
else:
#grid = (gridDevice - deviceCode) // 10
grid = gridDevice
out = unpack(b'20f', eData[4:4 * 21])
(sxx, sxy, s1, a1, a2, a3, pressure, svm,
syy, syz, s2, b1, b2, b3,
szz, sxz, s3, c1, c2, c3) = out
#print "%s eid=%s cid=%s grid=%s sxx=%-6i txy=%-5i s1=%-6i a1=%i a2=%i a3=%i press=%i vm=%s" % (elementType,eid,cid,grid,sxx,sxy,s1,a1,a2,a3,pressure,svm)
#print "%s eid=%s cid=%s grid=%s syy=%-6i tyz=%-5i s2=%-6i b1=%i b2=%i b3=%i" % (elementType,eid,cid,grid,syy,syz,s2,b1,b2,b3)
#print "%s eid=%s cid=%s grid=%s szz=%-6i txz=%-5i s3=%-6i c1=%i c2=%i c3=%i" % (elementType,eid,cid,grid,szz,sxz,s3,c1,c2,c3)
#print ""
#smax = max(s1,s2,s3)
#smin = min(s1,s2,s3)
aCos = []
bCos = []
cCos = []
if nodeID == 0:
#print "adding new eid"
self.obj.addNewEid(ElementType, cid, dt, eid2, grid, sxx, syy, szz, sxy, syz, sxz, s1, s2, s3, aCos, bCos, cCos, pressure, svm)
else:
self.obj.add(dt, eid2, grid, sxx, syy, szz, sxy, syz, sxz, s1, s2, s3, aCos, bCos, cCos, pressure, svm)
#self.printBlock(data)
#print self.solidStress[self.iSubcase]
#print '--------------------'
#print "len(data) = ",len(self.data)
#self.printSection(100)
#self.printBlock(self.data[0:100])
#self.printBlock(self.data[1:100])
#self.printBlock(self.data[2:100])
#self.printBlock(self.data[3:100])
###
[docs] def OES_CTRIA3_74(self):
"""
DISTANCE,NORMAL-X,NORMAL-Y,SHEAR-XY,ANGLE,MAJOR,MINOR,VONMISES
stress is extracted at the centroid
"""
assert self.numWide == 17, ('invalid numWide...numWide=%s'
% (self.numWide))
dt = self.nonlinearFactor
(format1, extract) = self.getOUG_FormatStart()
format1 += '16f'
format1 = bytes(format1)
while len(self.data) >= 68: # 4*17
eData = self.data[0:68]
self.data = self.data[68:]
out = unpack(format1, eData)
(eid, fd1, sx1, sy1, txy1, angle1, major1, minor1, vm1,
fd2, sx2, sy2, txy2, angle2, major2, minor2, vm2,) = out
eid = extract(eid, dt)
#print "eid=%i fd1=%i sx1=%i sy1=%i txy1=%i angle1=%i major1=%i minor1=%i vm1=%i" % (eid,fd1,sx1,sy1,txy1,angle1,major1,minor1,vm1)
#print " fd2=%i sx2=%i sy2=%i txy2=%i angle2=%i major2=%i minor2=%i vm2=%i\n" % (fd2,sx2,sy2,txy2,angle2,major2,minor2,vm2)
self.obj.addNewEid('CTRIA3', dt, eid, 'C', fd1, sx1, sy1,
txy1, angle1, major1, minor1, vm1)
self.obj.add(dt, eid, 'C', fd2, sx2, sy2, txy2,
angle2, major2, minor2, vm2)
[docs] def OES_CSOLID_85(self): # works
"""
stress is extracted at the centroid
CTETRA_85
CPENTA_91 ???
CHEXA_93 ???
"""
#print "starting nonlinear solid element..."
#nNodes = 5 # 1 centroid + 4 corner points
#self.printSection(20)
#term = self.data[0:4] CEN/
#self.data = self.data[4:]
#print "*****"
dt = self.nonlinearFactor
(format1, extract) = self.getOUG_FormatStart()
format1 += "4s"
format1 = bytes(format1)
nNodes = 4 # this is a minimum, it will be reset later
nNodesExpected = 1
assert self.numWide in [82], 'invalid numWide...numWide=%s' % (self.numWide)
while len(self.data) >= 16 + 84 * nNodesExpected:
eData = self.data[0:8]
self.data = self.data[8:]
#self.printBlock(eData)
out = unpack(format1, eData)
(eid, abcd) = out
#print "abcd = |%s|" % (a+b+c+d)
#print "eid=%s cid=%s nNodes=%s nNodesExpected=%s" % (eid,cid,nNodes,nNodesExpected)
assert nNodes < 21, self.printBlock(eData)
eid = extract(eid, dt)
if(nNodes in [4, 10]):
elementType = "CTETRA"
nNodesExpected = 5
#elif(nNodes in [6,15]):
# elementType = "CPENTA"
# nNodesExpected = 7
#elif(nNodes in [8,20]):
# elementType = "CHEXA"
# nNodesExpected = 9
#else:
# raise Exception('not supported....nNodes=%s' % (nNodes))
#print "len(data) = ",len(self.data)
for nodeID in xrange(nNodesExpected): # nodes pts, +1 for centroid (???)
#print "len(data)A = ",len(self.data)
eData = self.data[0:64] # 4*16; for the stresses
self.data = self.data[64:]
#print "len(data)B = ",len(self.data)
#self.printBlock(eData)
#print "self.tableCode = ",self.tableCode
#print "len(data) = ",len(self.data)
#gridDevice, = unpack(b'i', eData[0:4])
#print "gridDevice = ",gridDevice
out = unpack(b'i15f', eData[:64]) # 18-3 = 15
(gridGauss, sxx, syy, szz, sxy, syz, sxz, se,
eps, ecs, exx, eyy, ezz, exy, eyz, exz) = out
if gridGauss == 0:
gridGauss = 'C'
else:
#grid = (gridDevice - deviceCode) // 10
gridGauss = gridGauss
#print "%s gridGauss=%-5s eid=%s sxx=%g syy=%g szz=%g" % (elementType,gridGauss,eid,sxx,syy,szz)
#print "%s eid=%s cid=%s grid=%s sxx=%-6i txy=%-5i s1=%-6i a1=%i a2=%i a3=%i press=%i vm=%s" % (elementType,eid,cid,grid,sxx,sxy,s1,a1,a2,a3,pressure,svm)
#print "%s eid=%s cid=%s grid=%s syy=%-6i tyz=%-5i s2=%-6i b1=%i b2=%i b3=%i" % (elementType,eid,cid,grid,syy,syz,s2,b1,b2,b3)
#print "%s eid=%s cid=%s grid=%s szz=%-6i txz=%-5i s3=%-6i c1=%i c2=%i c3=%i" % (elementType,eid,cid,grid,szz,sxz,s3,c1,c2,c3)
#print ""
#smax = max(s1,s2,s3)
#smin = min(s1,s2,s3)
#if nodeID==0:
# #print "adding new eid"
# self.obj.addNewEid(elementType,cid,eid,grid,sxx,syy,szz,sxy,syz,sxz,aCos,bCos,cCos,pressure,svm)
#else:
# self.obj.add( eid,grid,sxx,syy,szz,sxy,syz,sxz,aCos,bCos,cCos,pressure,svm)
#print "eid=%i grid=%i fd1=%i sx1=%i sy1=%i txy1=%i angle1=%i major1=%i minor1=%i vm1=%i" % (eid,grid,fd1,sx1,sy1,txy1,angle1,major1,minor1,vm1)
#print " fd2=%i sx2=%i sy2=%i txy2=%i angle2=%i major2=%i minor2=%i vm2=%i\n" % (fd2,sx2,sy2,txy2,angle2,major2,minor2,vm2)
#self.printBlock(data)
#sys.exit('finished a CTETRANL')
#print self.solidStress[self.iSubcase]
#print '--------------------'
#print "len(data) = ",len(self.data)
#self.printSection(100)
#self.printBlock(self.data[0:100])
#self.printBlock(self.data[1:100])
#self.printBlock(self.data[2:100])
#self.printBlock(self.data[3:100])
###
#print self.solidStress[self.iSubcase]
[docs] def OES_field1(self):
if self.isSort1():
#raise NotImplementedError('SORT1 is not supported')
return ('i', self.scaleEid)
elif self.isSort2():
if self.analysisCode in [1, 2, 3, 4, 7, 8, 9, 11, 12]: # eid
return ('i', self.scaleEid)
elif self.analysisCode == 5: # freq
#freq
return ('f', self.scaleDt)
#raise NotImplementedError('freq is not supported')
elif self.analysisCode == 6: # time
#time
return ('f', self.scaleDt)
#raise NotImplementedError('time is not supported')
elif self.analysisCode == 10: # fqts:
#fqts # freqTime
return ('f', self.scaleDt)
#raise NotImplementedError('freqTime is not supported')
else:
raise NotImplementedError('invalid SORT2 analysisCode=%s' %
(self.analysisCode))
###
else:
raise NotImplementedError('invalid SORTx code')
###
[docs] def OES_CTRIAX6_53(self):
#(Format1,scaleValue) = self.OES_field1()
#Format = Format1+'ifffffff'
dt = self.nonlinearFactor
(format1, extract) = self.getOUG_FormatStart()
format1 += 'i7f'
format1 = bytes(format1)
while len(self.data) >= 132: # (1+8*4)*4 = 33*4 = 132
eData = self.data[0:36] # 4*9
self.data = self.data[36:]
out = unpack(format1, eData)
(eid, loc, rs, azs, As, ss, maxp, tmax, octs) = out
eid = extract(eid, dt)
#print "eid=%s loc=%s rs=%s azs=%s as=%s ss=%s maxp=%s tmx=%s octs=%s" % (eid,loc,rs,azs,As,ss,maxp,tmax,octs)
self.obj.addNewEid(dt, eid, loc, rs, azs, As, ss, maxp, tmax, octs)
for i in xrange(3):
eData = self.data[0:32] # 4*8
self.data = self.data[32:]
out = unpack(b'i7f', eData)
(loc, rs, azs, As, ss, maxp, tmax, octs) = out
#print "eid=%s loc=%s rs=%s azs=%s as=%s ss=%s maxp=%s tmx=%s octs=%s" % (eid,loc,rs,azs,As,ss,maxp,tmax,octs)
self.obj.add(dt, eid, loc, rs, azs, As, ss, maxp, tmax, octs)
[docs] def OES_RODNL_89_92(self):
dt = self.nonlinearFactor
(format1, extract) = self.getOUG_FormatStart()
format1 += '6f' # 1+6=7
format1 = bytes(format1)
while len(self.data) >= 28: # len(format1)*4 = 7*4 = 28
eData = self.data[0:28]
self.data = self.data[28:]
out = unpack(format1, eData)
(eid, axial, equivStress, totalStrain, effPlasticCreepStrain,
effCreepStrain, linearTorsionalStresss) = out
eid = extract(eid, dt)
data = (eid, axial, equivStress, totalStrain, effPlasticCreepStrain, effCreepStrain, linearTorsionalStresss)
#print "eid=%s axial=%s equivStress=%s totalStrain=%s effPlasticCreepStrain=%s effCreepStrain=%s linearTorsionalStresss=%s" % (eid,axial,equivStress,totalStrain,effPlasticCreepStrain,effCreepStrain,linearTorsionalStresss)
self.obj.add(self.elementType, dt, data)
[docs] def OES_CQUAD4NL_90(self):
dt = self.nonlinearFactor
(format1, extract) = self.getOUG_FormatStart()
nStep = 52 # 4*13
format1 += '12f' # 1+12=13
format1 = bytes(format1)
assert 13 == self.numWide, 'numWide=%s not 13' % (self.numWide)
while len(self.data) >= nStep:
eData = self.data[0:nStep]
self.data = self.data[nStep:]
out = unpack(format1, eData) # numWide=13
(eid, fd1, sx1, sy1, sz1, txy1, es1, eps1, ecs1,
ex1, ey1, ez1, exy1) = out
eid = extract(eid, dt)
data = (eid, fd1, sx1, sy1, sz1, txy1, es1, eps1,
ecs1, ex1, ey1, ez1, exy1)
self.obj.addNewEid(self.elementType, dt, data)
#print "eid=%s axial=%s equivStress=%s totalStrain=%s effPlasticCreepStrain=%s effCreepStrain=%s linearTorsionalStresss=%s" % (eid,axial,equivStress,totalStrain,effPlasticCreepStrain,effCreepStrain,linearTorsionalStresss)
[docs] def OES_CPENTANL_91(self):
"""
The DMAP manual says fields 3-18 repeat 7 times. but they dont.
They repeat 6 times. Other DMAP cards are correct with
their repeat statements.
"""
n = 0
dt = self.nonlinearFactor
(format1, extract) = self.getOUG_FormatStart()
format1 += '4s'
format1 = bytes(format1)
while len(self.data) >= 456: # 2+16*7 = 114 -> 114*4 = 456
eData = self.data[0:8]
self.data = self.data[8:]
(eid, a, b, c, d) = unpack(format1, eData)
eid = extract(eid, dt)
#out = unpack(b"ii",eData)
#(eid,cType) = out
cType = a + b + c + d
for i in xrange(7):
#print "len(self.data) = ",len(self.data)
eData = self.data[0:64]
self.data = self.data[64:]
out = unpack(b'i15f', eData)
assert len(out) == 16
(grid, sx, sy, sz, sxy, syz, sxz, se,
eps, ecs, ex, ey, ez, exy, eyz, exz) = out
#print "eid=%3s cType=%s sx=%i sy=%i sz=%i sxy=%s syz=%i szx=%i se=%s" % (eid,cType,sx,sy,sz,sxy,syz,sxz,se)
#print "gid=%3s ecs=%.3g ex=%.3g ey=%.3g ez=%.3g exy=%.3g eyz=%.3g ezx=%.3g" % (grid,ecs,ex,ey,ez,exy,eyz,exz)
#print ""
assert a == 'G'
#self.data = self.data[1456:]
#self.firstPass = True
[docs] def OES_CHEXANL_93(self):
"""
The DMAP manual says fields 3-18 repeat 9 times. but they dont.
They repeat 8 times. Other DMAP cards are correct with
their repeat statements.
"""
#print "CHEXANL_93"
#print "len(self.data) = ",len(self.data)
n = 0
dt = self.nonlinearFactor
(format1, extract) = self.getOUG_FormatStart()
format1 += '4s'
format1 = bytes(format1)
while len(self.data) >= 584: # 2+16*9 = 146 -> 146*4 = 584
eData = self.data[0:8]
self.data = self.data[8:]
(eid, cType) = unpack(format1, eData)
eid = extract(eid, dt)
#out = unpack('2i',eData)
#(eid,cType) = out
for i in xrange(9):
#print "len(self.data) = ",len(self.data)
eData = self.data[0:64]
self.data = self.data[64:]
out = unpack(b'i15f', eData)
assert len(out) == 16
(grid, sx, sy, sz, sxy, syz, sxz, se, eps,
ecs, ex, ey, ez, exy, eyz, exz) = out
#print "eid=%3s cType=%s sx=%i sy=%i sz=%i sxy=%s syz=%i szx=%i se=%s" % (eid,cType,sx,sy,sz,sxy,syz,sxz,se)
#print "gid=%3s ecs=%.3g ex=%.3g ey=%.3g ez=%.3g exy=%.3g eyz=%.3g ezx=%.3g" % (grid,ecs,ex,ey,ez,exy,eyz,exz)
#print ""
assert a == 'G'
#self.data = self.data[1456:]
#self.firstPass = True
[docs] def OES_CBEAM_94(self):
nNodes = 10 # 11-1
#nTotal = self.obj.getLengthTotal()
#(n1,format1) = self.obj.getLength1()
#(n2,format2) = self.obj.getLength2()
nTotal = 2 * 4 + (18 - 3) * 9 * 4
nTotal = 204
n1 = 24
format1 = '4s5f'
format1 = bytes(format1)
#print "len(data) = ",len(self.data)
while len(self.data) >= nTotal:
eData = self.data[0:8]
self.data = self.data[8:]
(eid, gridA) = unpack(b'2i', eData)
#print "eid=%s gridA=%s" % (eid,gridA)
for i in xrange(1):
for j in xrange(4): # c,d,e,f @ A; c,d,e,f @ B
eData = self.data[0:n1]
self.data = self.data[n1:]
out = unpack(format1, eData)
(loc, nsx, nse, te, epe, ece) = out
#print "loc=%s nsx=%s nse=%s te=%s epe=%s ece=%s" % (loc,nsx,nse,te,epe,ece)
#self.obj.add(eid,out)
[docs] def OES_CQUAD4_95(self): # works (doesnt handle all stress/strain cases tho)
"""
GRID-ID DISTANCE,NORMAL-X,NORMAL-Y,SHEAR-XY,ANGLE,MAJOR MINOR,VONMISES
composite quad
"""
eType = self.ElementType(self.elementType)
#self.printSection(20)
#term = data[0:4] CEN/
#data = data[4:]
assert self.numWide == 11, 'invalid numWide...numWide=%s' % (
self.numWide)
dt = self.nonlinearFactor
(format1, extract) = self.getOUG_FormatStart()
format1 += 'i9f'
format1 = bytes(format1)
while len(self.data) >= 44: # 2+17*5 = 87 -> 87*4 = 348
eData = self.data[0:44] # 4*11
self.data = self.data[44:]
out = unpack(format1, eData)
(eid, iLayer, o1, o2, t12, t1z, t2z, angle, major,
minor, ovm) = out
#print "out =",out
eid = extract(eid, dt)
if eid != self.eid2: # originally initialized to None, the buffer doesnt reset it, so it is the old value
#print "1 - eid=%s iLayer=%i o1=%i o2=%i ovm=%i" % (eid,iLayer,o1,o2,ovm)
self.obj.addNewEid(eType, dt, eid, o1, o2,
t12, t1z, t2z, angle, major, minor, ovm)
else:
#print "2 - eid=%s iLayer=%i o1=%i o2=%i ovm=%i" % (eid,iLayer,o1,o2,ovm)
self.obj.add(dt, eid, o1, o2, t12, t1z,
t2z, angle, major, minor, ovm)
self.eid2 = eid
#self.dn += 348
###
#print "3 - eid=%s iLayer=%i o1=%i o2=%i ovm=%i" % (eid,iLayer,o1,o2,ovm)
[docs] def OES_QUAD4FD_139(self): # hyperelastic
"""
Hyperelastic Quad
36+4*7*4 = 148
"""
#x = 0
dt = self.nonlinearFactor
(format1, extract) = self.getOUG_FormatStart()
format1 += '4si6f' # 1 + 4+1+6 = 12
format1 = bytes(format1)
while len(self.data) >= 148:
#if x==2:
# sys.exit('end of hyperQuad')
eData = self.data[0:36] # 4*9
self.data = self.data[36:]
out = unpack(format1, eData)
(eid, Type, ID, sx, sy, sxy, angle, smj, smi) = out
eid = extract(eid, dt)
self.obj.addNewEid(dt, [eid, Type, sx, sy, sxy, angle, smj, smi])
#print "eid=%s Type=%s\n***ID=%s sx=%s sy=%s sxy=%s angle=%s major=%s minor=%s" % (eid,Type,ID,sx,sy,sxy,angle,smj,smi)
for i in xrange(3):
eData = self.data[0:28] # 4*7
self.data = self.data[28:]
out = unpack(b'i6f', eData)
#(ID,sx,sy,sxy,angle,smj,smi) = out
self.obj.add(dt, eid, out)
#print "***ID=%s sx=%s sy=%s sxy=%s angle=%s major=%s minor=%s" % (ID,sx,sy,sxy,angle,smj,smi)
#self.obj.add(data)
#x+=1
#sys.exit('end of hyperQuad')
[docs] def OES_CQUADR_82(self): # not done...
"""
GRID-ID DISTANCE,NORMAL-X,NORMAL-Y,SHEAR-XY,ANGLE,MAJOR MINOR,VONMISES
"""
if self.elementType == 82: # CQUADR
nTotal = 348 # 2+17*5 = 87 -> 87*4 = 348
nNodes = 4 # centroid + 4 corner points
eType = 'CQUADR'
else:
raise RuntimeError('elementType=%s nTotal not defined...'
% (self.elementType))
dt = self.nonlinearFactor
(format1, extract) = self.getOUG_FormatStart()
format1 += '16f' # 1+16 = 17
format1 = bytes(format1)
while len(self.data) >= nTotal:
(eid, _) = unpack(b'i4s', self.data[0:8])
self.data = self.data[8:] # 2
eid = extract(eid, dt)
eData = self.data[0:68] # 4*17
self.data = self.data[68:]
out = unpack(format1, eData) # len=17*4
(grid, fd1, sx1, sy1, txy1, angle1, major1, minor1, vm1,
fd2, sx2, sy2, txy2, angle2, major2, minor2, vm2,) = out
grid = 'C'
self.obj.addNewEid(eType, eid, grid, fd1, sx1, sy1,
txy1, angle1, major1, minor1, vm1)
self.obj.add(eid, grid, fd2, sx2, sy2, txy2,
angle2, major2, minor2, vm2)
for nodeID in xrange(nNodes): # nodes pts
eData = self.data[0:68]
self.data = self.data[68:]
out = unpack(b'i16f', eData)
(grid, fd1, sx1, sy1, txy1, angle1, major1, minor1, vm1,
fd2, sx2, sy2, txy2, angle2, major2, minor2, vm2,) = out
#print "eid=%i grid=%i fd1=%i sx1=%i sy1=%i txy1=%i angle1=%i major1=%i minor1=%i vm1=%i" % (eid,grid,fd1,sx1,sy1,txy1,angle1,major1,minor1,vm1)
#print " fd2=%i sx2=%i sy2=%i txy2=%i angle2=%i major2=%i minor2=%i vm2=%i\n" % (fd2,sx2,sy2,txy2,angle2,major2,minor2,vm2)
#print "len(data) = ",len(self.data)
#self.printBlock(self.data)
self.obj.addNewNode(eid, grid, fd1, sx1,
sy1, txy1, angle1, major1, minor1, vm1)
self.obj.add(eid, grid, fd2, sx2, sy2,
txy2, angle2, major2, minor2, vm2)
###
###
[docs] def OES_CQUAD4_144(self): # works
"""
GRID-ID DISTANCE,NORMAL-X,NORMAL-Y,SHEAR-XY,ANGLE,MAJOR MINOR,VONMISES
"""
#self.printSection(20)
#term = data[0:4] CEN/
#data = data[4:]
#print "*****"
#self.printBlock(self.data)
#assert self.numWide==87,'invalid numWide...numWide=%s' % (self.numWide)
#if self.numWide==87: # 2+(17-1)*5 = 87 -> 87*4 = 348
if self.elementType == 144: # CQUAD4
nTotal = 348 # 2+17*5 = 87 -> 87*4 = 348
nNodes = 4 # centroid + 4 corner points
eType = 'CQUAD4'
elif self.elementType == 64: # CQUAD8
nTotal = 348 # 2+17*5 = 87 -> 87*4 = 348
nNodes = 4 # centroid + 4 corner points
eType = 'CQUAD8'
elif self.elementType == 82: # CQUADR
nTotal = 348 # 2+17*5 = 87 -> 87*4 = 348
nNodes = 4 # centroid + 4 corner points
eType = 'CQUAD4' ## @todo write the word CQUADR
elif self.elementType == 75: # CTRIA6
nTotal = 280 # 2+17*3 = 70 -> 70*4 = 280
nNodes = 3 # centroid + 3 corner points
eType = 'CTRIA6'
elif self.elementType == 70: # CTRIAR
nTotal = 280 # 2+17*3 = 70 -> 70*4 = 280
nNodes = 3 # centroid + 3 corner points
eType = 'CTRIAR' ## @todo write the word CTRIAR
else:
raise NotImplementedError('elementType=%s nTotal not defined...'
% (self.elementType))
dt = self.nonlinearFactor
(format1, extract) = self.getOUG_FormatStart()
format1 += '16f'
format1 = bytes(format1)
while len(self.data) >= nTotal:
(eid, _) = unpack(b'i4s', self.data[0:8])
self.data = self.data[8:] # 2
eid = extract(eid, dt)
eData = self.data[0:68]
self.data = self.data[68:]
out = unpack(format1, eData) # len=17*4
(grid, fd1, sx1, sy1, txy1, angle1, major1, minor1, vm1,
fd2, sx2, sy2, txy2, angle2, major2, minor2, vm2,) = out
grid = 'C'
self.obj.addNewEid(eType, dt, eid, grid, fd1, sx1, sy1,
txy1, angle1, major1, minor1, vm1)
self.obj.add(dt, eid, grid, fd2, sx2, sy2, txy2,
angle2, major2, minor2, vm2)
for nodeID in xrange(nNodes): # nodes pts
eData = self.data[0:68]
self.data = self.data[68:]
out = unpack(b'i16f', eData)
(grid, fd1, sx1, sy1, txy1, angle1, major1, minor1, vm1,
fd2, sx2, sy2, txy2, angle2, major2, minor2, vm2,) = out
#print "eid=%i grid=%i fd1=%i sx1=%i sy1=%i txy1=%i angle1=%i major1=%i minor1=%i vm1=%i" % (eid,grid,fd1,sx1,sy1,txy1,angle1,major1,minor1,vm1)
#print " fd2=%i sx2=%i sy2=%i txy2=%i angle2=%i major2=%i minor2=%i vm2=%i\n" % (fd2,sx2,sy2,txy2,angle2,major2,minor2,vm2)
#print "len(data) = ",len(self.data)
#self.printBlock(self.data)
self.obj.addNewNode(dt, eid, grid, fd1, sx1, sy1,
txy1, angle1, major1, minor1, vm1)
self.obj.add(dt, eid, grid, fd2, sx2, sy2,
txy2, angle2, major2, minor2, vm2)
#print '--------------------'
#print "len(data) = ",len(self.data)
#print "tell = ",self.op2.tell()
#self.printSection(100)
#self.dn += 348
###
# elif self.numWide==77:
# while len(self.data) >= 308: # 2+15*5 = 77 -> 77*4 = 308
# (eid,_) = unpack(b'i4s',self.data[0:8])
# self.data = self.data[8:] # 2
# eData = self.data[0:62] # 4*15
# self.data = self.data[62: ]
#
# out = unpack(b'i14f', eData) # 15
# (grid,fd1,sx1r,sx11,sy1r,sy11,txy1r,txy11,
# fd2,sx2r,sx21,sy2r,sy21,txy2r,txy21) = out
#
# for nodeID in xrange(nNodes): #nodes pts
# eData = self.data[0:4*15]
# self.data = self.data[4*15: ]
# out = unpack(b'i14f', eData)
# (grid,fd1,sx1r,sx11,sy1r,sy11,txy1r,txy11,
# fd2,sx2r,sx21,sy2r,sy21,txy2r,txy21) = out
# elif self.numWide==47:
# while len(self.data) >= 188: # 2+9*5 = 47 -> 47*4 = 188
# (eid,_) = unpack(b'i4s',self.data[0:8])
# self.data = self.data[8:] # 2
# eData = self.data[0:36] # 4*9
# self.data = self.data[36: ]
#
# out = unpack(b'i8f', eData) # 9
# (grid,fd1,sx1,sy1,txy1,
# fd2,sx2,sy2,txy2) = out
#
# for nodeID in xrange(nNodes): #nodes pts
# eData = self.data[0:36] # 4*9
# self.data = self.data[36: ]
# out = unpack(b'i8f', eData)
# (grid,fd1,sx1,sy1,txy1,
# fd2,sx2,sy2,txy2) = out
# else:
# raise NotImplementedError('invalid numWide')