pyNastran  0.5.0
pyNastran BDF Reader/Writer, OP2 Parser, and GUI
oes_shear.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 
00026 from __future__ import division, print_function
00027 import sys
00028 
00029 from .oes_objects import stressObject, strainObject
00030 
00031 class ShearStressObject(stressObject):
00032     """
00033     # formatCode=1 sortCode=0 stressCode=0
00034                                    S T R E S S E S   I N   S H E A R   P A N E L S      ( C S H E A R )
00035     ELEMENT            MAX            AVG        SAFETY         ELEMENT            MAX            AVG        SAFETY
00036       ID.             SHEAR          SHEAR       MARGIN           ID.             SHEAR          SHEAR       MARGIN
00037         328        1.721350E+03   1.570314E+03   7.2E+01
00038     """
00039     def __init__(self,dataCode,isSort1,iSubcase,dt=None):
00040         stressObject.__init__(self,dataCode,iSubcase)
00041         self.eType = 'CSHEAR'
00042         
00043         self.code = [self.formatCode,self.sortCode,self.sCode]
00044         self.maxShear = {}
00045         self.avgShear = {}
00046         self.margin   = {}
00047         
00048         self.getLength = self.getLength
00049         self.isImaginary = False
00050         #if dt is not None:
00051         #    self.addNewTransient = self.addNewTransient
00052         #    self.addNewEid       = self.addNewEidTransient
00053         #else:
00054         #    self.addNewEid = self.addNewEid
00055         ###
00056 
00057         self.dt = dt
00058         if isSort1:
00059             if dt is not None:
00060                 self.add = self.addSort1
00061                 self.addNewEid = self.addNewEidSort1
00062             ###
00063         else:
00064             assert dt is not None
00065             self.add = self.addSort2
00066             self.addNewEid = self.addNewEidSort2
00067         ###
00068 
00069     def getLength(self):
00070         return (16,'fff')
00071 
00072     def deleteTransient(self,dt):
00073         del self.maxShear[dt]
00074         del self.avgShear[dt]
00075         del self.margin[dt]
00076 
00077     def getTransients(self):
00078         k = self.maxShear.keys()
00079         k.sort()
00080         return k
00081 
00082     def addNewTransient(self,dt):
00083         """
00084         initializes the transient variables
00085         """
00086         self.dt = dt
00087         self.maxShear[dt] = {}
00088         self.avgShear[dt] = {}
00089         self.margin[dt]   = {}
00090 
00091     def addNewEid(self,dt,eid,out):
00092         #print "Rod Stress add..."
00093         (maxShear,avgShear,margin) = out
00094         assert isinstance(eid,int)
00095         self.maxShear = {}
00096         self.avgShear = {}
00097         self.margin   = {}
00098         self.maxShear[eid] = maxShear
00099         self.avgShear[eid] = avgShear
00100         self.margin[eid]   = margin
00101 
00102     def addNewEidSort1(self,dt,eid,out):
00103         (maxShear,avgShear,margin) = out
00104         if dt not in self.maxShear:
00105             self.addNewTransient(dt)
00106         assert isinstance(eid,int)
00107         assert eid >= 0
00108         self.maxShear[dt][eid] = maxShear
00109         self.avgShear[dt][eid] = avgShear
00110         self.margin[dt][eid]   = margin
00111 
00112     def addNewEidSort1(self,eid,dt,out):
00113         (maxShear,avgShear,margin) = out
00114         if dt not in self.maxShear:
00115             self.addNewTransient(dt)
00116         assert isinstance(eid,int)
00117         assert eid >= 0
00118         self.maxShear[dt][eid] = maxShear
00119         self.avgShear[dt][eid] = avgShear
00120         self.margin[dt][eid]   = margin
00121 
00122     def __reprTransient__(self):
00123         msg = '---TRANSIENT CSHEAR STRESSES---\n'
00124         msg += '%-6s %6s ' %('EID','eType')
00125         headers = ['maxShear','avgShear','Margin']
00126         for header in headers:
00127             msg += '%10s ' %(header)
00128         msg += '\n'
00129 
00130         for dt,maxShears in sorted(self.maxShear.iteritems()):
00131             msg += '%s = %g\n' %(self.dataCode['name'],dt)
00132             for eid in sorted(maxShears):
00133                 maxShear = self.maxShear[dt][eid]
00134                 avgShear = self.avgShear[dt][eid]
00135                 margin   = self.margin[dt][eid]
00136                 msg += '%-6i %6s ' %(eid,self.eType)
00137                 vals = [maxShear,avgShear,margin]
00138                 for val in vals:
00139                     if abs(val)<1e-6:
00140                         msg += '%10s ' %('0')
00141                     else:
00142                         msg += '%10i ' %(val)
00143                     ###
00144                 msg += '\n'
00145                 #msg += "eid=%-4s eType=%s axial=%-4i torsion=%-4i\n" %(eid,self.eType,axial,torsion)
00146             ###
00147         return msg
00148 
00149     def __repr__(self):
00150         if self.dt is not None:
00151             return self.__reprTransient__()
00152 
00153         msg = '---CSHEAR STRESSES---\n'
00154         msg += '%-6s %6s ' %('EID','eType')
00155         headers = ['maxShear','avgShear','margin']
00156         for header in headers:
00157             msg += '%10s ' %(header)
00158         msg += '\n'
00159         #print "self.code = ",self.code
00160         for eid in sorted(self.maxShear):
00161             #print self.__dict__.keys()
00162             maxShear = self.maxShear[eid]
00163             avgShear = self.avgShear[eid]
00164             margin   = self.margin[eid]
00165             msg += '%-6i %6s ' %(eid,self.eType)
00166             vals = [maxShear,avgShear,margin]
00167             for val in vals:
00168                 if abs(val)<1e-6:
00169                     msg += '%10s ' %('0')
00170                 else:
00171                     msg += '%10i ' %(val)
00172                 ###
00173             msg += '\n'
00174             #msg += "eid=%-4s eType=%s axial=%-4i torsion=%-4i\n" %(eid,self.eType,axial,torsion)
00175         return msg
00176 
00177 class ShearStrainObject(strainObject):
00178     """
00179     """
00180     def __init__(self,dataCode,isSort1,iSubcase,dt=None):
00181         strainObject.__init__(self,dataCode,iSubcase)
00182         self.eType = 'CSHEAR'
00183         raise Exception('not supported...CSHEAR strain')
00184         self.code = [self.formatCode,self.sortCode,self.sCode]
00185         self.maxShear = {}
00186         self.avgShear = {}
00187         self.margin   = {}
00188 
00189         self.dt = dt
00190         if isSort1:
00191             if dt is not None:
00192                 self.add = self.addSort1
00193                 self.addNewEid = self.addNewEidSort1
00194             ###
00195         else:
00196             assert dt is not None
00197             self.add = self.addSort2
00198             self.addNewEid = self.addNewEidSort2
00199         ###
00200 
00201     def getLength(self):
00202         return (16,'fff')
00203 
00204     def deleteTransient(self,dt):
00205         del self.maxShear[dt]
00206         del self.avgShear[dt]
00207         del self.margin[dt]
00208 
00209     def getTransients(self):
00210         k = self.maxShear.keys()
00211         k.sort()
00212         return k
00213 
00214     def addNewTransient(self,dt):
00215         """
00216         initializes the transient variables
00217         @note make sure you set self.dt first
00218         """
00219         self.dt = dt
00220         self.maxShear[dt] = {}
00221         self.avgShear[dt] = {}
00222         self.margin[dt]   = {}
00223 
00224     def addNewEid(self,dt,eid,out):
00225         (axial,SMa,torsion,SMt) = out
00226         #print "Rod Strain add..."
00227         assert eid >= 0
00228         #self.eType = self.eType
00229         self.maxShearl[eid] = axial
00230         self.avgShear[eid]  = SMa
00231         self.margin[eid]    = torsion
00232 
00233     def addNewEidSort1(self,dt,eid,out):
00234         (maxShear,avgShear,margin) = out
00235         if dt not in self.maxShear:
00236             self.addNewTransient(dt)
00237         assert eid >= 0
00238 
00239         #self.eType[eid] = self.elementType
00240         self.maxShear[dt][eid] = maxShear
00241         self.avgShear[dt][eid] = avgShear
00242         self.margin[dt][eid]   = margin
00243 
00244     def addNewEidSort2(self,eid,dt,out):
00245         (maxShear,avgShear,margin) = out
00246         if dt not in self.maxShear:
00247             self.addNewTransient(dt)
00248         assert eid >= 0
00249 
00250         #self.eType[eid] = self.elementType
00251         self.maxShear[dt][eid] = maxShear
00252         self.avgShear[dt][eid] = avgShear
00253         self.margin[dt][eid]   = margin
00254 
00255     def __reprTransient__(self):
00256         msg = '---TRANSIENT CSHEAR STRAINS---\n'
00257         msg += '%-6s %6s ' %('EID','eType')
00258         headers = ['maxShear','avgShear','Margin']
00259         for header in headers:
00260             msg += '%10s ' %(header)
00261         msg += '\n'
00262 
00263         for dt,maxShears in sorted(self.maxShear.iteritems()):
00264             msg += '%s = %g\n' %(self.dataCode['name'],dt)
00265             for eid in sorted(maxShears):
00266                 maxShear = self.maxShear[dt][eid]
00267                 avgShear = self.avgShear[dt][eid]
00268                 margin   = self.margin[dt][eid]
00269                 msg += '%-6i %6s ' %(eid,self.eType)
00270                 vals = [maxShear,avgShear,margin]
00271                 for val in vals:
00272                     if abs(val)<1e-6:
00273                         msg += '%10s ' %('0')
00274                     else:
00275                         msg += '%10g ' %(val)
00276                     ###
00277                 msg += '\n'
00278                 #msg += "eid=%-4s eType=%s axial=%-4i torsion=%-4i\n" %(eid,self.eType,axial,torsion)
00279             ###
00280         return msg
00281 
00282     def __repr__(self):
00283         if self.dt is not None:
00284             return self.__reprTransient__()
00285 
00286         msg = '---CSHEAR STRAINS---\n'
00287         msg += '%-6s %6s ' %('EID','eType')
00288         headers = ['maxShear','avgShear','margin']
00289         for header in headers:
00290             msg += '%10s ' %(header)
00291         msg += '\n'
00292 
00293         #print "self.code = ",self.code
00294         for eid in sorted(self.maxShear):
00295             #print self.__dict__.keys()
00296             maxShear = self.maxShear[eid]
00297             avgShear = self.avgShear[eid]
00298             margin   = self.margin[eid]
00299             msg += '%-6i %6s ' %(eid,self.eType)
00300             vals = [maxShear,avgShear,margin]
00301 
00302             for val in vals:
00303                 if abs(val)<1e-7:
00304                     msg += '%8s ' %('0')
00305                 else:
00306                     msg += '%8.3g ' %(val)
00307                 ###
00308             msg += '\n'
00309         return msg
 All Classes Namespaces Files Functions Variables