pyNastran  0.5.0
pyNastran BDF Reader/Writer, OP2 Parser, and GUI
lama.py
Go to the documentation of this file.
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)
 All Classes Namespaces Files Functions Variables