pyNastran
0.5.0
pyNastran BDF Reader/Writer, OP2 Parser, and GUI
|
00001 ## GNU Lesser General Public License 00002 ## 00003 ## Program pyNastran - a python interface to NASTRAN files 00004 ## Copyright (C) 2011-2012 Steven Doyle, Al Danial 00005 ## 00006 ## Authors and copyright holders of pyNastran 00007 ## Steven Doyle <mesheb82@gmail.com> 00008 ## Al Danial <al.danial@gmail.com> 00009 ## 00010 ## This file is part of pyNastran. 00011 ## 00012 ## pyNastran is free software: you can redistribute it and/or modify 00013 ## it under the terms of the GNU Lesser General Public License as published by 00014 ## the Free Software Foundation, either version 3 of the License, or 00015 ## (at your option) any later version. 00016 ## 00017 ## pyNastran is distributed in the hope that it will be useful, 00018 ## but WITHOUT ANY WARRANTY; without even the implied warranty of 00019 ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 00020 ## GNU General Public License for more details. 00021 ## 00022 ## You should have received a copy of the GNU Lesser General Public License 00023 ## along with pyNastran. If not, see <http://www.gnu.org/licenses/>. 00024 ## 00025 import sys 00026 from struct import unpack 00027 00028 from pyNastran.op2.tables.lama_eigenvalues.lama_objects import ( 00029 RealEigenvalues,ComplexEigenvalues) 00030 #from pyNastran.bdf.cards.nodes import GRID 00031 #from pyNastran.bdf.cards.coordinateSystems import CORD1R,CORD2R,CORD2C,CORD3G #CORD1C,CORD1S,CORD2S 00032 00033 00034 class LAMA(object): 00035 00036 def readTable_LAMA(self): 00037 tableName = self.readTableName(rewind=False) # LAMA 00038 self.tableInit(tableName) 00039 #print "tableName1 = |%r|" %(tableName) 00040 #print "tableName2 = |%r|" %(self.tableName) 00041 00042 self.readMarkers([-1,7],'LAMA') 00043 ints = self.readIntBlock() 00044 #print "*ints = ",ints 00045 00046 self.readMarkers([-2,1,0],'LAMA') 00047 bufferWords = self.getMarker() 00048 #print "bufferWords = ",bufferWords 00049 00050 00051 word = self.readStringBlock() # LAMA 00052 #print "word = |%s|" %(word) 00053 self.readMarkers([-3,1,0],'LAMA') 00054 00055 #data = self.getData(4*50) 00056 #print self.printBlock(data) 00057 00058 self.readTable_LAMA_3(-3) 00059 00060 self.readMarkers([-4,1,0],'LAMA') 00061 self.readTable_LAMA_4(-4) 00062 00063 self.readMarkers([-5,1,0],'LAMA') 00064 #data = self.getData(4*30) 00065 #print self.printBlock(data) 00066 return 00067 sys.exit('stopping in LAMA') 00068 if 0: 00069 iTable = -3 00070 #imax = -244 00071 00072 while bufferWords: # read until bufferWords=0 00073 self.readMarkers([iTable,1,0],'LAMA') 00074 nOld = self.n 00075 bufferWords = self.getMarker() 00076 #print "bufferWords = ",bufferWords 00077 if bufferWords==0: # maybe read new buffer... 00078 self.goto(nOld) 00079 break 00080 data = self.readBlock() 00081 #print "len(data) = ",len(data) 00082 self.readDesvar(data) 00083 iTable -= 1 00084 self.printSection(80) 00085 ### 00086 #self.op2Debug.write('bufferWords=%s\n' %(str(bufferWords))) 00087 #print "1-bufferWords = ",bufferWords,bufferWords*4 00088 00089 #print self.printSection(300) 00090 #sys.exit('asdf') 00091 00092 def readTable_LAMA_3(self,iTable): # iTable=-3 00093 bufferWords = self.getMarker() 00094 if self.makeOp2Debug: 00095 self.op2Debug.write('bufferWords=%s\n' %(str(bufferWords))) 00096 #print "2-bufferWords = ",bufferWords,bufferWords*4,'\n' 00097 00098 data = self.getData(4) 00099 bufferSize, = unpack('i',data) 00100 data = self.getData(4*50) 00101 #print self.printBlock(data) 00102 00103 (three) = self.parseApproachCode(data) 00104 00105 self.addDataParameter(data,'seven', 'i',10,False) ## seven 00106 self.addDataParameter(data,'resFlag','i',11,False) ## residual vector augmentation flag 00107 self.addDataParameter(data,'fldFlag','i',12,False) ## fluid modes Flag 00108 00109 #print self.dataCode 00110 #self.addDataParameter(data,'formatCode', 'i',9,False) ## format code 00111 #self.addDataParameter(data,'numWide', 'i',10,False) ## number of words per entry in record; @note is this needed for this table ??? 00112 00113 #if self.analysisCode==2: # sort2 00114 # self.lsdvmn = self.getValues(data,'i',5) 00115 00116 #print "*iSubcase=%s"%(self.iSubcase) 00117 #print "analysisCode=%s tableCode=%s thermal=%s" %(self.analysisCode,self.tableCode,self.thermal) 00118 00119 #self.printBlock(data) 00120 self.readTitle() 00121 00122 def readTable_LAMA_4(self,iTable): # iTable=-4 00123 bufferWords = self.getMarker() # 70*4=280 00124 if self.makeOp2Debug: 00125 self.op2Debug.write('bufferWords=%s\n' %(str(bufferWords))) 00126 #print "2-bufferWords = ",bufferWords,bufferWords*4,'\n' 00127 00128 data = self.getData(4) # dummy - 70*4=280 00129 #print self.printBlock(data) 00130 #print "280/3 = ",280/4 00131 nModes = bufferWords//7 00132 00133 lama = RealEigenvalues(self.iSubcase) 00134 self.eigenvalues[self.iSubcase] = lama 00135 for i in xrange(nModes): 00136 data = self.getData(28) # 4*7 00137 out = unpack('iifffff',data) 00138 #(iMode,order,eigen,omega,freq,mass,stiff) = out 00139 #(modeNum,extractOrder,eigenvalue,radian,cycle,genM,genK) = line 00140 #print out 00141 lama.addF06Line(out) 00142 #print "mode=%s order=%s eigen=%s omega=%s freq=%s mass=%s stiff=%s" %(mode,order,eigen,omega,freq,mass,stiff) 00143 #print "" 00144 #print ''.join(msg) 00145 #print "self.iSubcase = ",self.iSubcase 00146 #print lama.writeF06([],'PAGE',1)[0] 00147 #sys.exit() 00148 # ' 1 1 8.232776E+06 2.869281E+03 4.566603E+02 8.719168E-03 7.178296E+04 00149 # ' 2 2 8.232776E+06 2.869281E+03 4.566603E+02 8.719168E-03 7.178296E+04 00150 00151 data = self.getData(4)