pyNastran  0.5.0
pyNastran BDF Reader/Writer, OP2 Parser, and GUI
oug_accelerations.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 #import copy
00027 
00028 # pyNastran
00029 from pyNastran.op2.resultObjects.tableObject import TableObject,ComplexTableObject
00030 
00031 class AccelerationObject(TableObject): # approachCode=11, thermal=0
00032     def __init__(self,dataCode,isSort1,iSubcase,dt=None):
00033         TableObject.__init__(self,dataCode,isSort1,iSubcase,dt)
00034 
00035     def writeMatlab(self,iSubcase,f=None,isMagPhase=False):
00036         name = 'accelerations'
00037         if self.nonlinearFactor is None:
00038             return self._writeMatlab(name,iSubcase,f)
00039         else:
00040             return self._writeMatlabTransient(name,iSubcase,f)
00041 
00042     def writeF06(self,header,pageStamp,pageNum=1,f=None,isMagPhase=False):
00043         if self.nonlinearFactor is not None:
00044             return self.writeF06Transient(header,pageStamp,pageNum,f)
00045         words = ['                                             A C C E L E R A T I O N   V E C T O R\n',
00046                ' \n',
00047                '      POINT ID.   TYPE          T1             T2             T3             R1             R2             R3\n']
00048         words += self.getTableMarker()
00049         return self._writeF06Block(words,header,pageStamp,pageNum,f)
00050 
00051     def writeF06Transient(self,header,pageStamp,pageNum=1,f=None,isMagPhase=False):
00052         words = ['                                             A C C E L E R A T I O N   V E C T O R\n',
00053                  ' \n',
00054                  '      POINT ID.   TYPE          T1             T2             T3             R1             R2             R3\n']
00055         words += self.getTableMarker()
00056         return self._writeF06TransientBlock(words,header,pageStamp,pageNum,f)
00057 
00058     def __repr__(self):
00059         #return ''
00060         if self.nonlinearFactor is not None:
00061             return self.__reprTransient__()
00062 
00063         msg = '---ACCELERATIONS---\n'
00064         msg += self.writeHeader()
00065 
00066         for nodeID,translation in sorted(self.translations.iteritems()):
00067             rotation = self.rotations[nodeID]
00068             gridType = self.gridTypes[nodeID]
00069 
00070             (dx,dy,dz) = translation
00071             (rx,ry,rz) = rotation
00072 
00073             msg += '%-10i %-8s ' %(nodeID,gridType)
00074             vals = [dx,dy,dz,rx,ry,rz]
00075             for val in vals:
00076                 if abs(val)<1e-6:
00077                     msg += '%10s ' %(0)
00078                 else:
00079                     msg += '%10.3e ' %(val)
00080                 ###
00081             msg += '\n'
00082         return msg
00083 
00084     def __reprTransient__(self):
00085         msg = '---TRANSIENT ACCELERATIONS---\n'
00086         msg += self.writeHeader()
00087         
00088         for dt,translations in sorted(self.translations.iteritems()):
00089             msg += '%s = %g\n' %(self.dataCode['name'],dt)
00090             for nodeID,translation in sorted(translations.iteritems()):
00091                 rotation = self.rotations[dt][nodeID]
00092                 gridType = self.gridTypes[nodeID]
00093                 (dx,dy,dz) = translation
00094                 (rx,ry,rz) = rotation
00095 
00096                 msg += '%-10i %8s ' %(nodeID,gridType)
00097                 vals = [dx,dy,dz,rx,ry,rz]
00098                 for val in vals:
00099                     if abs(val)<1e-6:
00100                         msg += '%10s ' %(0)
00101                     else:
00102                         msg += '%10.3e ' %(val)
00103                     ###
00104                 msg += '\n'
00105             ###
00106         return msg
00107 
00108 class ComplexAccelerationObject(ComplexTableObject): # tableCode=11, approachCode=???
00109     def __init__(self,dataCode,isSort1,iSubcase,dt=None):
00110         ComplexTableObject.__init__(self,dataCode,isSort1,iSubcase,dt)
00111 
00112     def writeMatlab(self,iSubcase,f=None,isMagPhase=False):
00113         name = 'accelerations'
00114         if self.nonlinearFactor is None:
00115             return self._writeMatlab(name,iSubcase,f,isMagPhase)
00116         else:
00117             return self._writeMatlabTransient(name,iSubcase,f,isMagPhase)
00118 
00119     def writeF06(self,header,pageStamp,pageNum=1,f=None,isMagPhase=False):
00120         if self.nonlinearFactor is not None:
00121             return self.writeF06Transient(header,pageStamp,pageNum,f,isMagPhase)
00122 
00123         words = ['                                       C O M P L E X   A C C E L E R A T I O N   V E C T O R\n']
00124         return self._writeF06Block(words,header,pageStamp,pageNum,f,isMagPhase)
00125 
00126     def writeF06Transient(self,header,pageStamp,pageNum=1,f=None,isMagPhase=False):
00127         words = ['                                       C O M P L E X   A C C E L E R A T I O N   V E C T O R\n']
00128         return self._writeF06TransientBlock(words,header,pageStamp,pageNum,f,isMagPhase)
00129 
00130     def __repr__(self):
00131         return self.writeF06(['','',''],'PAGE ',1)[0]
00132         #if self.nonlinearFactor is not None:
00133             #return self.__reprTransient__()
00134 
00135         msg = '---COMPLEX ACCELERATIONS---\n'
00136         #if self.nonlinearFactor is not None:
00137         #    msg += '%s = %g\n' %(self.dataCode['name'],self.dt)
00138         headers = ['DxReal','DxImag','DyReal','DyImag','DzReal','DyImag','RxReal','RxImag','RyReal','RyImag','RzReal','RzImag']
00139         msg += '%-10s ' %('nodeID')
00140         for header in headers:
00141             msg += '%10s ' %(header)
00142         msg += '\n'
00143 
00144         for freq,translations in sorted(self.translations.iteritems()):
00145             msg += '%s = %g\n' %(self.dataCode['name'],freq)
00146 
00147             for nodeID,translation in sorted(translations.iteritems()):
00148                 rotation = self.rotations[freq][nodeID]
00149 
00150                 msg += '%-10i ' %(nodeID)
00151                 vals = translation+rotation
00152                 for val in vals:
00153                     if abs(val)<1e-6:
00154                         msg += '%10s ' %(0)
00155                     else:
00156                         msg += '%10.3e ' %(val)
00157                     ###
00158                 msg += '\n'
00159             ###
00160         return msg
 All Classes Namespaces Files Functions Variables