from __future__ import (nested_scopes, generators, division, absolute_import,
print_function, unicode_literals)
import sys
from struct import unpack
[docs]class RealForces(object):
[docs] def OEF_aCode(self):
if self.analysisCode == 1: # statics
format1 = 'i' # loadID
#self.addDataParameter(data,'loadID','i',5,False) ## load set ID number
elif self.analysisCode == 2: # normal modes/buckling (real eigenvalues)
format1 = 'i' # mode
#self.addDataParameter(data,'mode','i',5) ## mode number
#self.addDataParameter(data,'eign','f',6,False) ## eigenvalue
elif self.analysisCode == 3: # differential stiffness 0
format1 = 'i' # loadID
#self.addDataParameter(data,'loadID','i',5) ## load set ID number
elif self.analysisCode == 4: # differential stiffness 1
format1 = 'i' # loadID
## load set ID number
self.addDataParameter(data, 'loadID', 'i', 5)
elif self.analysisCode == 5: # frequency
format1 = 'f' # freq
#self.addDataParameter(data,'freq','f',5) ## frequency
elif self.analysisCode == 6: # transient
format1 = 'f' # time
#self.addDataParameter(data,'time','f',5) ## time step
#print "time(5)=%s" %(self.time)
elif self.analysisCode == 7: # pre-buckling
format1 = 'i' # loadID
#self.addDataParameter(data,'loadID','i',5) ## load set ID number
#print "loadID(5)=%s" %(self.loadID)
elif self.analysisCode == 8: # post-buckling
format1 = 'i' # loadID
#self.addDataParameter(data,'loadID','i',5) ## load set ID number
#self.addDataParameter(data,'eigr','f',6,False) ## real eigenvalue
#print "loadID(5)=%s eigr(6)=%s" %(self.loadID,self.eigr)
elif self.analysisCode == 9: # complex eigenvalues
format1 = 'i' # mode
#self.addDataParameter(data,'mode','i',5) ## mode number
#self.addDataParameter(data,'eigr','f',6,False) ## real eigenvalue
#self.addDataParameter(data,'eigi','f',7,False) ## imaginary eigenvalue
#print "mode(5)=%s eigr(6)=%s eigi(7)=%s" %(self.mode,self.eigr,self.eigi)
elif self.analysisCode == 10: # nonlinear statics
format1 = 'f' # loadStep
## load step
self.addDataParameter(data, 'loadStep', 'f', 5)
#print "loadStep(5) = %s" %(self.loadStep)
elif self.analysisCode == 11: # geometric nonlinear statics
format1 = 'i' # loadID
#self.addDataParameter(data,'loadID','i',5) ## load set ID number
#print "loadID(5)=%s" %(self.loadID)
else:
raise RuntimeError('invalid analysisCode...analysisCode=%s' % (str(self.analysisCode) + '\n' + self.codeInformation()))
return format1
[docs] def OEF_Rod(self): # 1-CROD, 3-CTUBE, 10-CONROD
dt = self.nonlinearFactor
(format1, extract) = self.getOEF_FormatStart()
format1 += 'ff'
format1 = bytes(format1)
while len(self.data) >= 12: # 3*4
eData = self.data[0:12]
self.data = self.data[12:]
#print "len(data) = ",len(eData)
out = unpack(format1, eData)
(eid, axial, torque) = out
eid2 = extract(eid, dt)
#print "eType=%s" %(eType)
dataIn = [eid2, axial, torque]
#print "%s" %(self.ElementType(self.elementType)),dataIn
#eid = self.obj.addNewEid(out)
self.obj.add(dt, dataIn)
#print "len(data) = ",len(self.data)
#print self.rodForces
[docs] def OEF_CVisc(self): # 24-CVISC
dt = self.nonlinearFactor
(format1, extract) = self.getOEF_FormatStart()
format1 += 'ff'
format1 = bytes(format1)
while len(self.data) >= 12: # 3*4
eData = self.data[0:12]
self.data = self.data[12:]
#print "len(data) = ",len(eData)
out = unpack(format1, eData)
(eid, axial, torque) = out
eid2 = extract(eid, dt)
#print "eType=%s" %(eType)
dataIn = [eid2, axial, torque]
#print "%s" %(self.ElementType(self.elementType)),dataIn
#eid = self.obj.addNewEid(out)
self.obj.add(dt, dataIn)
#print "len(data) = ",len(self.data)
#print self.viscForces
[docs] def OEF_Beam(self): # 2-CBEAM ## @todo is this correct???
dt = self.nonlinearFactor
(format1, extract) = self.getOEF_FormatStart()
#print self.codeInformation()
formatAll = 'iffffffff'
format1 = bytes(format1)
formatAll = bytes(formatAll)
while len(self.data) >= 400: # 1+(10-1)*11=100 ->100*4 = 400
#print "eType=%s" %(eType)
eData = self.data[0:4]
self.data = self.data[4:]
eid, = unpack(format1, eData)
eid2 = extract(eid, dt)
for i in xrange(11):
eData = self.data[0:36]
self.data = self.data[36:]
#print "len(data) = ",len(eData)
out = unpack(formatAll, eData)
(nid, sd, bm1, bm2, ts1, ts2, af, ttrq, wtrq) = out
#print "eidTemp = ",eidTemp
#print "nid = ",nid
#print "sd = ",sd
dataIn = [eid2, nid, sd, bm1, bm2, ts1, ts2, af, ttrq, wtrq]
#print "%s " %(self.ElementType(self.elementType)),dataIn
#eid = self.obj.addNewEid(out)
if i == 0: # isNewElement:
self.obj.addNewElement(dt, dataIn)
#print
elif sd > 0.:
self.obj.add(dt, dataIn)
#print
#else: pass
#print "len(data) = ",len(self.data)
#print self.beamForces
[docs] def OEF_Shear(self): # 4-CSHEAR
dt = self.nonlinearFactor
(format1, extract) = self.getOEF_FormatStart()
format1 += 'ffffffffffffffff'
format1 = bytes(format1)
while len(self.data) >= 68: # 17*4
eData = self.data[0:68]
self.data = self.data[68:]
#print "len(data) = ",len(eData)
out = unpack(format1, eData)
(eid, f41, f21, f12, f32, f23, f43, f34, f14, kf1,
s12, kf2, s23, kf3, s34, kf4, s41) = out
eid2 = extract(eid, dt)
#print "eType=%s" %(eType)
dataIn = [eid2, f41, f21, f12, f32, f23, f43, f34,
f14, kf1, s12, kf2, s23, kf3, s34, kf4, s41]
#print "%s" %(self.ElementType(self.elementType)),dataIn
#eid = self.obj.addNewEid(out)
self.obj.add(dt, dataIn)
#print "len(data) = ",len(self.data)
#print self.shearForces
[docs] def OEF_Spring(self): # 11-CELAS1, 12-CELAS2, 13-CELAS3, 14-CELAS4
dt = self.nonlinearFactor
(format1, extract) = self.getOEF_FormatStart()
format1 += 'f'
format1 = bytes(format1)
while len(self.data) >= 8: # 2*4
eData = self.data[0:8]
self.data = self.data[8:]
#print "len(data) = ",len(eData)
out = unpack(format1, eData)
(eid, force) = out
eid2 = extract(eid, dt)
#print "eType=%s" %(eType)
dataIn = [eid2, force]
#print "%s" %(self.ElementType(self.elementType)),dataIn
#eid = self.obj.addNewEid(out)
self.obj.add(dt, dataIn)
#print "len(data) = ",len(self.data)
#print self.springForces
[docs] def OEF_CBar(self): # 34-CBAR
dt = self.nonlinearFactor
(format1, extract) = self.getOEF_FormatStart()
format1 += 'ffffffff'
format1 = bytes(format1)
while len(self.data) >= 36: # 9*4
eData = self.data[0:36]
self.data = self.data[36:]
#print "len(data) = ",len(eData)
out = unpack(format1, eData)
(eid, bm1a, bm2a, bm1b, bm2b, ts1, ts2, af, trq) = out
eid2 = extract(eid, dt)
#print "eType=%s" %(eType)
dataIn = [eid2, bm1a, bm2a, bm1b, bm2b, ts1, ts2, af, trq]
#print "%s" %(self.ElementType(self.elementType)),dataIn
#eid = self.obj.addNewEid(out)
self.obj.add(dt, dataIn)
#print "len(data) = ",len(self.data)
#print self.barForces
[docs] def OEF_CBar100(self): # 100-CBAR
dt = self.nonlinearFactor
(format1, extract) = self.getOEF_FormatStart()
format1 += 'fffffff'
format1 = bytes(format1)
while len(self.data) >= 36: # 9*4
eData = self.data[0:32]
self.data = self.data[32:]
#print "len(data) = ",len(eData)
out = unpack(format1, eData)
(eid, sd, bm1, bm2, ts1, ts2, af, trq) = out
eid2 = extract(eid, dt)
#print "eType=%s" %(eType)
dataIn = [eid2, sd, bm1, bm2, ts1, ts2, af, trq]
#print "%s" %(self.ElementType(self.elementType)),dataIn
#eid = self.obj.addNewEid(out)
self.obj.add(dt, dataIn)
#print "len(data) = ",len(self.data)
#print self.bar100Forces
[docs] def OEF_Plate(self): # 33-CQUAD4,74-CTRIA3
dt = self.nonlinearFactor
(format1, extract) = self.getOEF_FormatStart()
format1 += 'ffffffff'
format1 = bytes(format1)
while len(self.data) >= 36: # 9*4
eData = self.data[0:36]
self.data = self.data[36:]
#print "len(data) = ",len(eData)
out = unpack(format1, eData)
(eid, mx, my, mxy, bmx, bmy, bmxy, tx, ty) = out
eid2 = extract(eid, dt)
#print "eType=%s" %(eType)
dataIn = [eid2, mx, my, mxy, bmx, bmy, bmxy, tx, ty]
#print "%s" %(self.ElementType(self.elementType)),dataIn
#eid = self.obj.addNewEid(out)
self.obj.add(dt, dataIn)
#print "len(data) = ",len(self.data)
#print self.plateForces
[docs] def OEF_Plate2(self): # 64-CQUAD8,70-CTRIAR,75-CTRIA6,82-CQUAD8,144-CQUAD4-bilinear
dt = self.nonlinearFactor
(format1, extract) = self.getOEF_FormatStart()
format1 += '4s'
if self.elementType in [70, 75]: # CTRIAR,CTRIA6
nNodes = 4
elif self.elementType in [64, 82, 144]: # CQUAD8,CQUADR,CQUAD4-bilinear
nNodes = 5
else:
raise NotImplementedError(self.codeInformation())
allFormat = 'fffffffff'
format1 = bytes(format1)
allFormat = bytes(allFormat)
nTotal = 44 + nNodes * 36
while len(self.data) >= nTotal:
eData = self.data[0:44]
self.data = self.data[44:]
#print self.printBlock(eData)
#print "len(data) = ",len(eData)
out = unpack(format1 + allFormat, eData)
(eid, term, nid, mx, my, mxy, bmx, bmy, bmxy, tx, ty) = out
#term= 'CEN\'
#print "eType=%s" %(eType)
eid2 = extract(eid, dt)
dataIn = [term, nid, mx, my, mxy, bmx, bmy, bmxy, tx, ty]
#print "%s" %(self.ElementType(self.elementType)),dataIn
self.obj.addNewElement(eid2, dt, dataIn)
for i in xrange(nNodes - 1):
eData = self.data[0:36]
self.data = self.data[36:]
dataIn = unpack(allFormat, eData)
#(nid,mx,my,mxy,bmx,bmy,bmxy,tx,ty) = out
#dataIn = [nid,mx,my,mxy,bmx,bmy,bmxy,tx,ty]
#print "***%s " %(self.ElementType(self.elementType)),dataIn
self.obj.add(eid2, dt, dataIn)
#print "len(data) = ",len(self.data)
#print self.plateForces2
[docs] def OEF_ConeAx(self): # 35-CCONEAX
dt = self.nonlinearFactor
(format1, extract) = self.getOEF_FormatStart()
format1 += '6f'
format1 = bytes(format1)
while len(self.data) >= 28: # 7*4
eData = self.data[0:28]
self.data = self.data[28:]
#print "len(data) = ",len(eData)
out = unpack(format1, eData)
(eid, hopa, bmu, bmv, tm, su, sv) = out
eid2 = extract(eid, dt)
#print "eType=%s" %(eType)
dataIn = [eid2, hopa, bmu, bmv, tm, su, sv]
#print "%s" %(self.ElementType(self.elementType)),dataIn
#eid = self.obj.addNewEid(out)
self.obj.add(dt, dataIn)
#print "len(data) = ",len(self.data)
#print self.shearForces
[docs] def OEF_CGap(self): # 38-CGAP
dt = self.nonlinearFactor
(format1, extract) = self.getOEF_FormatStart()
format1 += 'ffffffff'
format1 = bytes(format1)
while len(self.data) >= 36: # 9*4
eData = self.data[0:36]
self.data = self.data[36:]
#print "len(data) = ",len(eData)
out = unpack(format1, eData)
(eid, fx, sfy, sfz, u, v, w, sv, sw) = out
eid2 = extract(eid, dt)
#print "eType=%s" %(eType)
dataIn = [eid2, fx, sfy, sfz, u, v, w, sv, sw]
#print "%s" %(self.ElementType(self.elementType)),dataIn
#eid = self.obj.addNewEid(out)
self.obj.add(dt, dataIn)
#print "len(data) = ",len(self.data)
#print self.plateForces
[docs] def OEF_Bend(self): # 69-CBEND
dt = self.nonlinearFactor
(format1, extract) = self.getOEF_FormatStart()
format1 += 'i13f'
format1 = bytes(format1)
while len(self.data) >= 60: # 15*4
eData = self.data[0:60]
self.data = self.data[60:]
#print "len(data) = ",len(eData)
out = unpack(format1, eData)
(eid, nidA, bm1A, bm2A, ts1A, ts2A, afA, trqA,
nidB, bm1B, bm2B, ts1B, ts2B, afB, trqB) = out
eid2 = extract(eid, dt)
#print "eType=%s" %(eType)
dataIn = [eid2, nidA, bm1A, bm2A, ts1A, ts2A, afA, trqA,
nidB, bm1B, bm2B, ts1B, ts2B, afB, trqB]
#print "%s" %(self.ElementType(self.elementType)),dataIn
#eid = self.obj.addNewEid(out)
self.obj.add(dt, dataIn)
#print "len(data) = ",len(self.data)
#print self.bendForces
[docs] def OEF_PentaPressure(self): # 77-CPENTA_PR,78-CTETRA_PR
dt = self.nonlinearFactor
(format1, extract) = self.getOEF_FormatStart()
format1 += '8s7f'
format1 = bytes(format1)
while len(self.data) >= 40: # 10*4
eData = self.data[0:40]
self.data = self.data[40:]
#print "len(data) = ",len(eData)
out = unpack(format1, eData)
(eid, eName, ax, ay, az, vx, vy, vz, pressure) = out
eid2 = extract(eid, dt)
#print "eType=%s" %(eType)
dataIn = [eid2, eName, ax, ay, az, vx, vy, vz, pressure]
#print "%s" %(self.ElementType(self.elementType)),dataIn
#eid = self.obj.addNewEid(out)
self.obj.add(dt, dataIn)
#print "len(data) = ",len(self.data)
#print self.pentaPressureForces
[docs] def OEF_CBush(self): # 102-CBUSH
dt = self.nonlinearFactor
(format1, extract) = self.getOEF_FormatStart()
format1 += '6f'
format1 = bytes(format1)
while len(self.data) >= 28: # 7*4
eData = self.data[0:28]
self.data = self.data[28:]
#print "len(data) = ",len(eData)
out = unpack(format1, eData)
(eid, fx, fy, fz, mx, my, mz) = out
eid2 = extract(eid, dt)
#print "eType=%s" %(eType)
dataIn = [eid2, fx, fy, fz, mx, my, mz]
#print "%s" %(self.ElementType(self.elementType)),dataIn
#eid = self.obj.addNewEid(out)
self.obj.add(dt, dataIn)
#print "len(data) = ",len(self.data)
#print self.bushForces
[docs] def OEF_Force_VU(self): # 191-VUBEAM
dt = self.nonlinearFactor
(format1, extract) = self.getOEF_FormatStart()
format1 += 'ii4s'
if self.elementType in [191]:
nNodes = 2
else:
raise NotImplementedError(self.codeInformation())
formatAll = 'i7f'
format1 = bytes(format1)
formatAll = bytes(formatAll)
n = 16 + 32 * nNodes
while len(self.data) >= n:
eData = self.data[0:16] # 8*4
self.data = self.data[16:]
#print "len(data) = ",len(eData)
out = unpack(format1, eData)
(eid, parent, coord, icord) = out
eid2 = extract(eid, dt)
dataIn = [eid2, parent, coord, icord]
forces = []
for i in xrange(nNodes):
eData = self.data[0:32] # 8*4
self.data = self.data[32:]
#print "i=%s len(data)=%s" %(i,len(eData))
out = unpack(formatAll, eData)
forces.append(out)
dataIn.append(forces)
#eType = a+b+c+d+e+f+g+h
#print "eType=%s" %(eType)
#dataIn = [vugrid,posit,forceX,shearY,shearZ,torsion,bendY,bendZ]
#print "force %s" %(self.ElementType(self.elementType)),dataIn
#eid = self.obj.addNewEid(out)
self.obj.add(nNodes, dt, dataIn)
#print "len(data) = ",len(self.data)
###
if self.makeOp2Debug:
print("done with OEF_Force_VU")
#print(self.force_VU)
[docs] def OEF_Force_VUTRIA(self): # 189-VUQUAD,190-VUTRIA
dt = self.nonlinearFactor
(format1, extract) = self.getOEF_FormatStart()
format1 += 'ii4sii'
if self.elementType in [189]: # VUQUAD
nNodes = 4
elif self.elementType in [190]: # VUTRIA
nNodes = 3
else:
raise NotImplementedError(self.codeInformation())
formatAll = 'ifffiiifffffi'
format1 = bytes(format1)
formatAll = bytes(formatAll)
n = 24 + 52 * nNodes
while len(self.data) >= n:
eData = self.data[0:24] # 6*4
self.data = self.data[24:]
#print "len(data) = ",len(eData)
out = unpack(format1, eData)
(eid, parent, coord, icord, theta, _) = out
eid2 = extract(eid, dt)
dataIn = [eid2, parent, coord, icord, theta]
forces = []
for i in xrange(nNodes):
eData = self.data[0:52] # 13*4
self.data = self.data[52:]
#print "i=%s len(data)=%s" %(i,len(eData))
out = unpack(formatAll, eData)
(vugrid, mfx, mfy, mfxy, a, b, c, bmx, bmy,
bmxy, syz, szx, d) = out
out2 = (vugrid, mfx, mfy, mfxy, bmx, bmy, bmxy, syz, szx)
forces.append(out2)
dataIn.append(forces)
#eType = a+b+c+d+e+f+g+h
#print "eType=%s" %(eType)
#dataIn = [vugrid,mfx,mfy,mfxy,a,b,c,bmx,bmy,bmxy,syz,szx,d]
#print "force %s" %(self.ElementType(self.elementType)),dataIn
#eid = self.obj.addNewEid(out)
self.obj.add(nNodes, dt, dataIn)
#print "len(data) = ",len(self.data)
###
#print(self.force_VU_2D)