pyNastran  0.5.0
pyNastran BDF Reader/Writer, OP2 Parser, and GUI
lama_objects.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 numpy import array
00027 from pyNastran.op2.resultObjects.op2_Objects import baseScalarObject
00028 #from pyNastran.op2.resultObjects.op2_Objects import scalarObject,array
00029 
00030 class RealEigenvalues(baseScalarObject):
00031     def __init__(self,iSubcase):
00032         #self.modeNumber = []
00033         baseScalarObject.__init__(self)
00034         self.iSubcase = iSubcase
00035         self.extractionOrder = {}
00036         self.eigenvalues = {}
00037         self.radians = {}
00038         self.cycles = {}
00039         self.generalizedMass = {}
00040         self.generalizedStiffness = {}
00041 
00042     def isReal(self):
00043         return True
00044     def isComplex(self):
00045         return False
00046 
00047     def addF06Line(self,data):
00048         (modeNum,extractOrder,eigenvalue,radian,cycle,genM,genK) = data
00049         self.extractionOrder[modeNum] = extractOrder
00050         self.eigenvalues[modeNum] = eigenvalue
00051         self.radians[modeNum] = radian
00052         self.cycles[modeNum] = cycle
00053         self.generalizedMass[modeNum] = genM
00054         self.generalizedStiffness[modeNum] = genK
00055 
00056     def addF06Data(self,data):
00057         for line in data:
00058             self.addF06Line(line)
00059 
00060     def writeMatlab(self,iSubcase,f=None,isMagPhase=False):
00061         iModesMsg = 'fem.eigenvalues(%i).iModes    = [' %(iSubcase)
00062         modesMsg  = 'fem.eigenvalues(%i).modes     = [' %(iSubcase)
00063         orderMsg  = 'fem.eigenvalues(%i).order     = [' %(iSubcase)
00064         omegaMsg  = 'fem.eigenvalues(%i).radians   = [' %(iSubcase)
00065         cyclesMsg = 'fem.eigenvalues(%i).cycles    = [' %(iSubcase)
00066         massMsg   = 'fem.eigenvalues(%i).mass      = [' %(iSubcase)
00067         stiffMsg  = 'fem.eigenvalues(%i).stiffness = [' %(iSubcase)
00068 
00069         for (iMode,order) in sorted(self.extractionOrder.iteritems()):
00070             iModesMsg += '%s,' %(iMode)
00071             orderMsg  += '%s,' %(order)
00072             modesMsg  += '%s,' %(self.eigenvalues[iMode])
00073             omegaMsg  += '%s,' %(self.radians[iMode])
00074             cyclesMsg += '%s,' %(self.cycles[iMode])
00075             massMsg   += '%s,' %(self.generalizedMass[iMode])
00076             stiffMsg  += '%s,' %(self.generalizedStiffness[iMode])
00077         f.write(iModesMsg+'];\n')
00078         f.write(orderMsg+'];\n')
00079         f.write(modesMsg+'];\n')
00080         f.write(omegaMsg+'];\n')
00081         f.write(cyclesMsg+'];\n')
00082         f.write(massMsg+'];\n')
00083         f.write(stiffMsg+'];\n')
00084 
00085     def writeF06(self,header,pageStamp,pageNum=1,f=None,isMagPhase=False):
00086         msg = header+['                                              R E A L   E I G E N V A L U E S\n',
00087                       '   MODE    EXTRACTION      EIGENVALUE            RADIANS             CYCLES            GENERALIZED         GENERALIZED\n',
00088                       '    NO.       ORDER                                                                       MASS              STIFFNESS\n']
00089         for (iMode,order) in sorted(self.extractionOrder.iteritems()):
00090             eigen = self.eigenvalues[iMode]
00091             omega = self.radians[iMode]
00092             freq  = self.cycles[iMode]
00093             mass  = self.generalizedMass[iMode]
00094             stiff = self.generalizedStiffness[iMode]
00095             ([eigen,omega,freq,mass,stiff],isAllZeros) = self.writeFloats13E([eigen,omega,freq,mass,stiff])
00096             msg.append(' %8s  %8s       %13s       %13s       %13s       %13s       %13s\n'%(iMode,order,eigen,omega,freq,mass,stiff))
00097         ###
00098         msg.append(pageStamp+str(pageNum)+'\n')
00099         return (''.join(msg),pageNum)
00100 
00101     def __repr__(self):
00102         msg = '%-7s %15s %15s %10s %10s %10s %15s\n' %('ModeNum','ExtractionOrder','Eigenvalue','Radians','Cycles','GenMass','GenStiffness')
00103         for modeNum,extractOrder in sorted(self.extractionOrder.iteritems()):
00104             eigenvalue = self.eigenvalues[modeNum]
00105             radian = self.radians[modeNum]
00106             cycle = self.cycles[modeNum]
00107             genM = self.generalizedMass[modeNum]
00108             genK = self.generalizedStiffness[modeNum]
00109             msg += '%-7s %15s %15s %10s %10s %10s %15s\n' %(modeNum,extractOrder,eigenvalue,radian,cycle,genM,genK)
00110         return msg
00111 
00112 class ComplexEigenvalues(baseScalarObject):
00113     def __init__(self,iSubcase):
00114         baseScalarObject.__init__(self)
00115         #self.rootNumber = []
00116         self.iSubcase = iSubcase
00117         self.extractionOrder = {}
00118         self.eigenvalues = {}
00119         self.cycles  = {}
00120         self.damping = {}
00121 
00122     def isReal(self):
00123         return False
00124     def isComplex(self):
00125         return True
00126 
00127     def addF06Line(self,data):
00128         (rootNum,extractOrder,eigr,eigi,cycle,damping) = data
00129         self.extractionOrder[rootNum] = extractOrder
00130         self.eigenvalues[rootNum] = array([eigr,eigi])
00131         self.cycles[rootNum]      = cycle
00132         self.damping[rootNum]     = damping
00133 
00134     def addF06Data(self,data):
00135         for line in data:
00136             self.addF06Line(line)
00137 
00138     def writeF06(self,header,pageStamp,pageNum=1,f=None,isMagPhase=False):  # not proper msg start
00139         msg = header+['                                        C O M P L E X   E I G E N V A L U E S\n',
00140                       '   MODE    EXTRACTION      EIGENVALUE            CYCLES            DAMPING\n',
00141                       '    NO.       ORDER\n']
00142         #raise NotImplementedError()
00143         for (iMode,order) in sorted(self.extractionOrder.iteritems()):
00144             eigen = self.eigenvalues[iMode]
00145             freq  = self.cycles[iMode]
00146             damping  = self.damping[iMode]
00147             ([eigen,freq,damping],isAllZeros) = self.writeFloats13E([eigen,freq,damping])
00148             msg.append(' %8s  %8s       %13s       %13s       %13s       %13s       %13s\n'%(iMode,order,eigen,freq,damping))
00149         ###
00150         msg.append(pageStamp+str(pageNum)+'\n')
00151         return (''.join(msg),pageNum)
00152 
00153     def __repr__(self):
00154         msg  = '%-7s %15s %15s %10s %10s %10s\n' %('RootNum','ExtractionOrder','Eigenvalue','','Cycles','Damping')
00155         msg += '%-7s %15s %15s %10s\n' %('','','Real','Imaginary')
00156         for rootNum,extractOrder in sorted(self.extractionOrder.iteritems()):
00157             eigenvalue = self.eigenvalues[rootNum]
00158             cycle      = self.cycles[rootNum]
00159             damping    = self.damping[rootNum]
00160             msg += '%-7s %15s %15s %10s %10s %10s\n' %(rootNum,extractOrder,eigenvalue[0],eigenvalue[1],cycle,damping)
00161         return msg
 All Classes Namespaces Files Functions Variables