pyNastran  0.5.0
pyNastran BDF Reader/Writer, OP2 Parser, and GUI
oes_bars.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 
00028 from .oes_objects import stressObject, strainObject
00029 from pyNastran.op2.op2Errors import InvalidCodeError
00030 
00031 
00032 class BarStressObject(stressObject):
00033     """
00034     # sCode=0
00035                                S T R E S S E S   I N   B A R   E L E M E N T S          ( C B A R )
00036     ELEMENT        SA1            SA2            SA3            SA4           AXIAL          SA-MAX         SA-MIN     M.S.-T
00037       ID.          SB1            SB2            SB3            SB4           STRESS         SB-MAX         SB-MIN     M.S.-C
00038     """
00039     def __init__(self,dataCode,isSort1,iSubcase,dt=None):
00040         stressObject.__init__(self,dataCode,iSubcase)
00041         self.eType = {}
00042 
00043         self.code = [self.formatCode,self.sortCode,self.sCode]
00044 
00045         self.s1    = {}
00046         self.s2    = {}
00047         self.s3    = {}
00048         self.s4    = {}
00049         self.axial = {}
00050         self.smax  = {}
00051         self.smin  = {}
00052         self.MS_tension = {}
00053         self.MS_compression = {}
00054 
00055         #if self.elementType==100:
00056             #self.getLength = self.getLength100_format1_sort0
00057             #self.addNewEid = self.addNewEid100
00058 
00059         self.dt = dt
00060         #print "BAR dt=%s" %(dt)
00061         if isSort1:
00062             if dt is not None:
00063                 #self.add = self.addSort1
00064                 self.addNewEid = self.addNewEidSort1
00065             ###
00066         else:
00067             assert dt is not None
00068             #self.add = self.addSort2
00069             self.addNewEid = self.addNewEidSort2
00070         ###
00071 
00072     def addF06Data(self,data,transient):
00073         if transient is None:
00074             for line in data:
00075                 (eType,eid,s1A,s2A,s3A,s4A,axialA,smaxA,sminA,MSt,
00076                            s1B,s2B,s3B,s4B,       smaxB,sminB,MSc) = line
00077                 self.eType[eid] = 'CBAR'
00078                 self.s1[eid] = [s1A,s1B]
00079                 self.s2[eid] = [s2A,s2B]
00080                 self.s3[eid] = [s3A,s3B]
00081                 self.s4[eid] = [s4A,s4B]
00082 
00083                 self.axial[eid] = axialA
00084                 self.smax[eid] = [smaxA,smaxB]
00085                 self.smin[eid] = [sminA,sminB]
00086                 #self.MS_tension[eid]     = MSt
00087                 #self.MS_compression[eid] = MSc
00088             ###
00089             return
00090 
00091         (dtName,dt) = transient
00092         self.dataCode['name'] = dtName
00093         #print "dt = ",dt
00094         #print "dtName = ",dtName
00095         if dt not in self.s1:
00096             self.updateDt(self.dataCode, dt)
00097             self.isTransient = True
00098 
00099         for line in data:
00100             (eType,eid,s1A,s2A,s3A,s4A,axialA,smaxA,sminA,MSt,
00101                        s1B,s2B,s3B,s4B,       smaxB,sminB,MSc) = line
00102             self.eType[eid] = 'CBAR'
00103             self.s1[dt][eid] = [s1A,s1B]
00104             self.s2[dt][eid] = [s2A,s2B]
00105             self.s3[dt][eid] = [s3A,s3B]
00106             self.s4[dt][eid] = [s4A,s4B]
00107 
00108             self.axial[dt][eid] = axialA
00109             self.smax[dt][eid] = [smaxA,smaxB]
00110             self.smin[dt][eid] = [sminA,sminB]
00111             #self.MS_tension[dt][eid]     = MSt
00112             #self.MS_compression[dt][eid] = MSc
00113         ###
00114 
00115     def getLength(self):
00116         return (68, 'iffffffffffffffff')
00117 
00118     def deleteTransient(self, dt):
00119         del self.s1[dt]
00120         del self.s2[dt]
00121         del self.s3[dt]
00122         del self.s4[dt]
00123         del self.axial[dt]
00124         del self.smax[dt]
00125         del self.smin[dt]
00126 
00127     def getTransients(self):
00128         k = self.s1.keys()
00129         k.sort()
00130         return k
00131 
00132     def addNewTransient(self, dt):
00133         """
00134         initializes the transient variables
00135         """
00136         #print "****add new transient****"
00137         self.dt = dt
00138         self.s1[dt]    = {}
00139         self.s2[dt]    = {}
00140         self.s3[dt]    = {}
00141         self.s4[dt]    = {}
00142         self.axial[dt] = {}
00143         self.smax[dt]  = {}
00144         self.smin[dt]  = {}
00145         #self.MS_tension[dt]     = {}
00146         #self.MS_compression[dt] = {}
00147 
00148     def addNewEid100(self,dt,out):
00149         #print "out = ",out
00150         #return
00151         (eid,s1,s2,s3,s4,axial,smax,smin,MSt,MSc) = out
00152         #print "Bar Stress add..."
00153         self.eType[eid] = 'CBAR' #eType
00154 
00155         if self.eid in self.s1:
00156             self.s1[eid].append(s1)
00157             self.s2[eid].append(s2)
00158             self.s3[eid].append(s3)
00159             self.s4[eid].append(s4)
00160             self.axial[eid].append(axial)
00161             self.smax[eid].append(smax)
00162             self.smin[eid].append(smin)
00163             #self.MS_tension[eid].append(MSt)
00164             #self.MS_compression[eid].append(MSc)
00165         else:
00166             self.s1[eid]    = [s1]
00167             self.s2[eid]    = [s2]
00168             self.s3[eid]    = [s3]
00169             self.s4[eid]    = [s4]
00170             self.axial[eid] = axial
00171             self.smax[eid]  = [smax]
00172             self.smin[eid]  = [smin]
00173             #self.MS_tension[eid]     = MSt
00174             #self.MS_compression[eid] = MSc
00175 
00176         #msg = "eid=%s nodeID=%s fd=%g oxx=%g oyy=%g \ntxy=%g angle=%g major=%g minor=%g vm=%g" %(eid,nodeID,fd,oxx,oyy,txy,angle,majorP,minorP,ovm)
00177         #print msg
00178         #if nodeID==0: raise Exception(msg)
00179 
00180     def addNewEid(self,eType,dt,eid,s1a,s2a,s3a,s4a,axial,smaxa,smina,MSt,
00181                                     s1b,s2b,s3b,s4b,      smaxb,sminb,MSc):
00182         #print "Bar Stress add..."
00183         self.eType[eid] = eType
00184 
00185         self.s1[eid]    = [s1a,s1b]
00186         self.s2[eid]    = [s2a,s2b]
00187         self.s3[eid]    = [s3a,s3b]
00188         self.s4[eid]    = [s4a,s4b]
00189         self.axial[eid] = axial
00190         self.smax[eid]  = [smaxa,smaxb]
00191         self.smin[eid]  = [smina,sminb]
00192         #self.MS_tension[eid]     = MSt
00193         #self.MS_compression[eid] = MSc
00194 
00195         #msg = "eid=%s nodeID=%s fd=%g oxx=%g oyy=%g \ntxy=%g angle=%g major=%g minor=%g vm=%g" %(eid,nodeID,fd,oxx,oyy,txy,angle,majorP,minorP,ovm)
00196         #print msg
00197         #if nodeID==0: raise Exception(msg)
00198 
00199     def addNewEidSort1(self,eType,dt,eid,s1a,s2a,s3a,s4a,axial,smaxa,smina,MSt,
00200                                          s1b,s2b,s3b,s4b,      smaxb,sminb,MSc):
00201         msg = "dt=%s eid=%s s1a=%s" %(dt,eid,s1a)
00202         #print msg
00203         if dt not in self.s1:
00204             self.addNewTransient(dt)
00205         self.eType[eid] = eType
00206         #print self.s1
00207         self.s1[dt][eid]    = [s1a,s1b]
00208         self.s2[dt][eid]    = [s2a,s2b]
00209         self.s3[dt][eid]    = [s3a,s3b]
00210         self.s4[dt][eid]    = [s4a,s4b]
00211         self.axial[dt][eid] = axial
00212         self.smax[dt][eid]  = [smaxa,smaxb]
00213         self.smin[dt][eid]  = [smina,sminb]
00214         #self.MS_tension[dt][eid]     = MSt
00215         #self.MS_compression[dt][eid] = MSc
00216 
00217         #if nodeID==0: raise Exception(msg)
00218 
00219     def writeF06(self,header,pageStamp,pageNum=1,f=None,isMagPhase=False):
00220         if self.nonlinearFactor is not None:
00221             return self.writeF06Transient(header,pageStamp,pageNum,f)
00222 
00223         msg = header+[
00224                 '                                 S T R E S S E S   I N   B A R   E L E M E N T S          ( C B A R )\n',
00225                 '  ELEMENT        SA1            SA2            SA3            SA4           AXIAL          SA-MAX         SA-MIN     M.S.-T\n',
00226                 '    ID.          SB1            SB2            SB3            SB4           STRESS         SB-MAX         SB-MIN     M.S.-C\n',
00227               ]
00228 
00229         for eid,S1s in sorted(self.s1.iteritems()):
00230             eType = self.eType[eid]
00231             axial = self.axial[eid]
00232             #MSt = self.MSt[eid]
00233             #MSc = self.MSc[eid]
00234             MSt = ''
00235             MSc = ''
00236             
00237             s1   = self.s1[eid]
00238             s2   = self.s2[eid]
00239             s3   = self.s3[eid]
00240             s4   = self.s4[eid]
00241             smax = self.smax[eid]
00242             smin = self.smin[eid]
00243             vals = [s1[0],s2[0],s3[0],s4[0],axial,smax[0],smin[0],
00244                     s1[1],s2[1],s3[1],s4[1],      smax[1],smin[1]]
00245             (vals2,isAllZeros) = self.writeFloats13E(vals)
00246             [s1a,s2a,s3a,s4a,axial,smaxa,smina,
00247              s1b,s2b,s3b,s4b,      smaxb,sminb] = vals2
00248             msg.append('0%8i   %13s  %13s  %13s  %13s  %13s  %13s  %13s %-s\n' %(eid,  s1a,s2a,s3a,s4a,axial,smaxa,smina,MSt.rstrip()))
00249             msg.append(' %8s   %13s  %13s  %13s  %13s  %13s  %13s  %13s %-s\n'   %('', s1b,s2b,s3b,s4b,'',   smaxb,sminb,MSc.rstrip()))
00250         ###
00251         msg.append(pageStamp+str(pageNum)+'\n')
00252         return (''.join(msg),pageNum)
00253 
00254     def writeF06Transient(self,header,pageStamp,pageNum=1,f=None,isMagPhase=False):
00255         words = [
00256                 '                                 S T R E S S E S   I N   B A R   E L E M E N T S          ( C B A R )\n',
00257                 '  ELEMENT        SA1            SA2            SA3            SA4           AXIAL          SA-MAX         SA-MIN     M.S.-T\n',
00258                 '    ID.          SB1            SB2            SB3            SB4           STRESS         SB-MAX         SB-MIN     M.S.-C\n',
00259               ]
00260         msg = []
00261         for dt,S1s in sorted(self.s1.iteritems()):
00262             header[1] = ' %s = %10.4E\n' %(self.dataCode['name'],dt)
00263             msg += header + words
00264             for eid,S1 in sorted(S1s.iteritems()):
00265                 eType = self.eType[eid]
00266                 axial = self.axial[dt][eid]
00267                 #MSt = self.MSt[eid]
00268                 #MSc = self.MSc[eid]
00269                 MSt = ''
00270                 MSc = ''
00271 
00272                 s1   = self.s1[dt][eid]
00273                 s2   = self.s2[dt][eid]
00274                 s3   = self.s3[dt][eid]
00275                 s4   = self.s4[dt][eid]
00276                 smax = self.smax[dt][eid]
00277                 smin = self.smin[dt][eid]
00278                 vals = [s1[0],s2[0],s3[0],s4[0],axial,smax[0],smin[0],
00279                         s1[1],s2[1],s3[1],s4[1],      smax[1],smin[1]]
00280                 (vals2,isAllZeros) = self.writeFloats13E(vals)
00281                 [s1a,s2a,s3a,s4a,axial,smaxa,smina,
00282                  s1b,s2b,s3b,s4b,      smaxb,sminb] = vals2
00283                 msg.append('0%8i   %13s  %13s  %13s  %13s  %13s  %13s  %13s %-s\n' %(eid,  s1a,s2a,s3a,s4a,axial,smaxa,smina,MSt.rstrip()))
00284                 msg.append(' %8s   %13s  %13s  %13s  %13s  %13s  %13s  %13s %-s\n'   %('', s1b,s2b,s3b,s4b,'',   smaxb,sminb,MSc.rstrip()))
00285             ###
00286             msg.append(pageStamp+str(pageNum)+'\n')
00287             pageNum+=1
00288         return (''.join(msg),pageNum-1)
00289 
00290     def __repr__(self):
00291         if self.nonlinearFactor is not None:
00292             return self.__reprTransient__()
00293 
00294         msg = '---BAR STRESS---\n'
00295         msg += '%-6s %6s ' %('EID','eType')
00296         headers = ['s1','s2','s3','s4','Axial','sMax','sMin']
00297         for header in headers:
00298             msg += '%8s ' %(header)
00299         msg += '\n'
00300 
00301         for eid,S1s in sorted(self.s1.iteritems()):
00302             eType = self.eType[eid]
00303             axial = self.axial[eid]
00304             #MSt = self.MSt[eid]
00305             #MSc = self.MSc[eid]
00306 
00307             s1   = self.s1[eid]
00308             s2   = self.s2[eid]
00309             s3   = self.s3[eid]
00310             s4   = self.s4[eid]
00311             smax = self.smax[eid]
00312             smin = self.smin[eid]
00313             msg += '%-6i %6s ' %(eid,eType)
00314             vals = [s1[0],s2[0],s3[0],s4[0],axial,smax[0],smin[0]]
00315             for val in vals:
00316                 if abs(val)<1e-6:
00317                     msg += '%8s ' %('0')
00318                 else:
00319                     msg += '%8i ' %(val)
00320                 ###
00321             msg += '\n'
00322 
00323             msg += '%s ' %(' '*13)
00324             vals = [s1[1],s2[1],s3[1],s4[1],'',smax[1],smin[1]]
00325             for val in vals:
00326                 if isinstance(val,str):
00327                     msg += '%8s ' %(val)
00328                 elif abs(val)<1e-6:
00329                     msg += '%8s ' %('0')
00330                 else:
00331                     msg += '%8i ' %(val)
00332                 ###
00333             msg += '\n'
00334 
00335 
00336             #msg += "eid=%-4s eType=%s s1=%-4i s2=%-4i s3=%-4i s4=%-4i axial=-%5i smax=%-5i smax=%-4i\n" %(eid,eType,s1[0],s2[0],s3[0],s4[0],axial, smax[0],smin[0])
00337             #msg += "%s                s1=%-4i s2=%-4i s3=%-4i s4=%-4i %s         smax=%-5i smax=%-4i\n" %(' '*4,    s1[1],s2[1],s3[1],s4[1],'    ',smax[1],smin[1])
00338         ###
00339         return msg
00340 
00341     def __reprTransient__(self):
00342         msg = '---BAR STRESS---\n'
00343         msg += '%-6s %6s ' %('EID','eType')
00344         headers = ['s1','s2','s3','s4','Axial','sMax','sMin']
00345         for header in headers:
00346             msg += '%8s ' %(header)
00347         msg += '\n'
00348 
00349         for dt,S1ss in sorted(self.s1.iteritems()):
00350             msg += '%s = %g\n' %(self.dataCode['name'],dt)
00351             for eid,S1s in sorted(S1ss.iteritems()):
00352                 eType = self.eType[eid]
00353                 axial = self.axial[dt][eid]
00354                 #MSt = self.MSt[dt][eid]
00355                 #MSc = self.MSc[dt][eid]
00356 
00357                 s1   = self.s1[dt][eid]
00358                 s2   = self.s2[dt][eid]
00359                 s3   = self.s3[dt][eid]
00360                 s4   = self.s4[dt][eid]
00361                 smax = self.smax[dt][eid]
00362                 smin = self.smin[dt][eid]
00363                 msg += '%-6i %6s ' %(eid,eType)
00364                 vals = [s1[0],s2[0],s3[0],s4[0],axial,smax[0],smin[0]]
00365                 for val in vals:
00366                     if abs(val)<1e-6:
00367                         msg += '%8s ' %('0')
00368                     else:
00369                         msg += '%8i ' %(val)
00370                     ###
00371                 msg += '\n'
00372 
00373                 msg += '%s ' %(' '*13)
00374                 vals = [s1[1],s2[1],s3[1],s4[1],'',smax[1],smin[1]]
00375                 for val in vals:
00376                     if isinstance(val,str):
00377                         msg += '%8s ' %(val)
00378                     elif abs(val)<1e-6:
00379                         msg += '%8s ' %('0')
00380                     else:
00381                         msg += '%8i ' %(val)
00382                     ###
00383                 msg += '\n'
00384 
00385                 #msg += "eid=%-4s eType=%s s1=%-4i s2=%-4i s3=%-4i s4=%-4i axial=-%5i smax=%-5i smax=%-4i\n" %(eid,eType,s1[0],s2[0],s3[0],s4[0],axial, smax[0],smin[0])
00386                 #msg += "%s                s1=%-4i s2=%-4i s3=%-4i s4=%-4i %s         smax=%-5i smax=%-4i\n" %(' '*4,    s1[1],s2[1],s3[1],s4[1],'    ',smax[1],smin[1])
00387             ###
00388         ###
00389         return msg
00390 
00391 class BarStrainObject(strainObject):
00392     """
00393     # sCode=10
00394                                      S T R A I N S   I N   B A R   E L E M E N T S          ( C B A R )
00395     ELEMENT        SA1            SA2            SA3            SA4           AXIAL          SA-MAX         SA-MIN     M.S.-T
00396       ID.          SB1            SB2            SB3            SB4           STRAIN         SB-MAX         SB-MIN     M.S.-C
00397 
00398     """
00399     def __init__(self,dataCode,isSort1,iSubcase,dt=None):
00400         strainObject.__init__(self,dataCode,iSubcase)
00401         self.eType = {}
00402 
00403         self.code = [self.formatCode,self.sortCode,self.sCode]
00404         if self.code in [ [1,0,0],[1,0,1] ]:
00405             #raise InvalidCodeError('barStrain - get the format/sort/stressCode=%s' %(self.code))
00406             self.e1    = {}
00407             self.e2    = {}
00408             self.e3    = {}
00409             self.e4    = {}
00410             self.axial = {}
00411             self.emax  = {}
00412             self.emin  = {}
00413             #self.MS_tension = {}
00414             #self.MS_compression = {}
00415         elif self.code == [1,0,10]:
00416             self.e1    = {}
00417             self.e2    = {}
00418             self.e3    = {}
00419             self.e4    = {}
00420             self.axial = {}
00421             self.emax  = {}
00422             self.emin  = {}
00423             self.MS_tension = {}
00424             self.MS_compression = {}
00425         else:
00426             raise InvalidCodeError('barStrain - get the format/sort/stressCode=%s' %(self.code))
00427         ###
00428         if isSort1:
00429             if dt is not None:
00430                 self.add = self.addSort1
00431                 self.addNewEid = self.NewEidSort1
00432             ###
00433         else:
00434             assert dt is not None
00435             self.add = self.addSort2
00436             self.addNewEid = self.NewEidSort2
00437         ###
00438 
00439     def addF06Data(self,data,transient):
00440         if transient is None:
00441             for line in data:
00442                 (eType,eid,e1A,e2A,e3A,e4A,axialA,emaxA,eminA,MSt,
00443                            e1B,e2B,e3B,e4B,       emaxB,eminB,MSc) = line
00444                 self.eType[eid] = 'CBAR'
00445                 self.e1[eid] = [e1A,e1B]
00446                 self.e2[eid] = [e2A,e2B]
00447                 self.e3[eid] = [e3A,e3B]
00448                 self.e4[eid] = [e4A,e4B]
00449 
00450                 self.axial[eid] = axialA
00451                 self.emax[eid] = [emaxA,emaxB]
00452                 self.emin[eid] = [eminA,eminB]
00453                 #self.MS_tension[eid]     = MSt
00454                 #self.MS_compression[eid] = MSc
00455             ###
00456             return
00457 
00458         (dtName,dt) = transient
00459         self.dataCode['name'] = dtName
00460         if dt not in self.s1:
00461             self.updateDt(self.dataCode,dt)
00462             self.isTransient = True
00463 
00464         for line in data:
00465             (eType,eid,e1A,e2A,e3A,e4A,axialA,emaxA,eminA,MSt,
00466                        e1B,e2B,e3B,e4B,       emaxB,eminB,MSc) = line
00467             self.eType[eid] = 'CBAR'
00468             self.e1[dt][eid] = [e1A,e1B]
00469             self.e2[dt][eid] = [e2A,e2B]
00470             self.e3[dt][eid] = [e3A,e3B]
00471             self.e4[dt][eid] = [e4A,e4B]
00472 
00473             self.axial[dt][eid] = axialA
00474             self.emax[dt][eid] = [emaxA,emaxB]
00475             self.emin[dt][eid] = [eminA,eminB]
00476             #self.MS_tension[dt][eid]     = MSt
00477             #self.MS_compression[dt][eid] = MSc
00478         ###
00479 
00480     def deleteTransient(self,dt):
00481         del self.e1[dt]
00482         del self.e2[dt]
00483         del self.e3[dt]
00484         del self.e4[dt]
00485         del self.exial[dt]
00486         del self.emax[dt]
00487         del self.emin[dt]
00488 
00489     def getTransients(self):
00490         k = self.e1.keys()
00491         k.sort()
00492         return k
00493 
00494     def addNewTransient(self, dt):
00495         """
00496         initializes the transient variables
00497         """
00498         self.e1[dt]    = {}
00499         self.e2[dt]    = {}
00500         self.e3[dt]    = {}
00501         self.e4[dt]    = {}
00502         self.axial[dt] = {}
00503         self.emax[dt]  = {}
00504         self.emin[dt]  = {}
00505         #self.MS_tension[dt]     = {}
00506         #self.MS_compression[dt] = {}
00507 
00508     def addNewEid(self,eType,dt,eid,e1a,e2a,e3a,e4a,axial,emaxa,emina,MSt,
00509                                     e1b,e2b,e3b,e4b,      emaxb,eminb,MSc):
00510         #print "Bar Stress add..."
00511         self.eType[eid] = eType
00512         self.e1[eid]    = [e1a,e1b]
00513         self.e2[eid]    = [e2a,e2b]
00514         self.e3[eid]    = [e3a,e3b]
00515         self.e4[eid]    = [e4a,e4b]
00516         self.axial[eid] = axial
00517         self.emax[eid]  = [emaxa,emaxb]
00518         self.emin[eid]  = [emina,eminb]
00519         #self.MS_tension[eid]     = MSt
00520         #self.MS_compression[eid] = MSc
00521 
00522         #msg = "eid=%s nodeID=%s fd=%g oxx=%g oyy=%g \ntxy=%g angle=%g major=%g minor=%g vm=%g" %(eid,nodeID,fd,oxx,oyy,txy,angle,majorP,minorP,ovm)
00523         #print msg
00524         #if nodeID==0: raise Exception(msg)
00525 
00526     def addNewEidSort1(self,eType,dt,eid,e1a,e2a,e3a,e4a,axial,emaxa,emina,MSt,
00527                                          e1b,e2b,e3b,e4b,      emaxb,eminb,MSc):
00528         #print "Bar Stress add..."
00529 
00530         self.eType[eid] = eType
00531         if dt not in self.e1:
00532             self.addNewTransient(dt)
00533 
00534         self.e1[dt][eid]    = [e1a,e1b]
00535         self.e2[dt][eid]    = [e2a,e2b]
00536         self.e3[dt][eid]    = [e3a,e3b]
00537         self.e4[dt][eid]    = [e4a,e4b]
00538         self.axial[dt][eid] = axial
00539         self.emax[dt][eid]  = [emaxa,emaxb]
00540         self.emin[dt][eid]  = [emina,eminb]
00541         #self.MS_tension[dt][eid]     = MSt
00542         #self.MS_compression[dt][eid] = MSc
00543 
00544         #msg = "eid=%s nodeID=%s fd=%g oxx=%g oyy=%g \ntxy=%g angle=%g major=%g minor=%g vm=%g" %(eid,nodeID,fd,oxx,oyy,txy,angle,majorP,minorP,ovm)
00545         #print msg
00546         #if nodeID==0: raise Exception(msg)
00547 
00548     def writeF06(self,header,pageStamp,pageNum=1,f=None,isMagPhase=False):
00549         if self.isTransient:
00550             return self.writeF06Transient(header,pageStamp,pageNum,f)
00551 
00552         msg = header+[
00553                 '                                  S T R A I N S    I N   B A R   E L E M E N T S          ( C B A R )\n',
00554                 '  ELEMENT        SA1            SA2            SA3            SA4           AXIAL          SA-MAX         SA-MIN     M.S.-T\n',
00555                 '    ID.          SB1            SB2            SB3            SB4           STRAIN         SB-MAX         SB-MIN     M.S.-C\n',
00556               ]
00557         for eid,E1s in sorted(self.e1.iteritems()):
00558             eType = self.eType[eid]
00559             axial = self.axial[eid]
00560             #MSt = self.MSt[eid]
00561             #MSc = self.MSc[eid]
00562             MSt = ''
00563             MSc = ''
00564             
00565             e1   = self.e1[eid]
00566             e2   = self.e2[eid]
00567             e3   = self.e3[eid]
00568             e4   = self.e4[eid]
00569             emax = self.emax[eid]
00570             emin = self.emin[eid]
00571             vals = [e1[0],e2[0],e3[0],e4[0],axial,emax[0],emin[0],
00572                     e1[1],e2[1],e3[1],e4[1],emax[1],emin[1]]
00573             (vals2,isAllZeros) = self.writeFloats13E(vals)
00574             [e10,e20,e30,e40,axial,emax0,emin0,
00575              e11,e21,e31,e41,emax1,emin1] = vals2
00576             
00577             msg.append('0%8i   %13s  %13s  %13s  %13s  %13s  %13s  %13s %-s\n' %(eid,  e10,e20,e30,e40,axial,emax0,emin0,MSt.rstrip()))
00578             msg.append(' %8s   %13s  %13s  %13s  %13s  %13s  %13s  %13s %-s\n'   %('', e11,e21,e31,e41,'',   emax1,emin1,MSc.rstrip()))
00579         ###
00580         msg.append(pageStamp+str(pageNum)+'\n')
00581         return (''.join(msg),pageNum)
00582 
00583     def writeF06Transient(self,header,pageStamp,pageNum=1,f=None,isMagPhase=False):
00584         words = [
00585                 '                                  S T R A I N S    I N   B A R   E L E M E N T S           ( C B A R )\n',
00586                 '  ELEMENT        SA1            SA2            SA3            SA4           AXIAL          SA-MAX         SA-MIN     M.S.-T\n',
00587                 '    ID.          SB1            SB2            SB3            SB4           STRAIN         SB-MAX         SB-MIN     M.S.-C\n',
00588               ]
00589         msg = []
00590         for dt,E1s in sorted(self.e1.iteritems()):
00591             header[1] = ' %s = %10.4E\n' %(self.dataCode['name'],dt)
00592             msg += header + words
00593             for eid,e1s in sorted(E1s.iteritems()):
00594                 eType = self.eType[eid]
00595                 axial = self.axial[eid]
00596                 #MSt = self.MSt[eid]
00597                 #MSc = self.MSc[eid]
00598                 MSt = ''
00599                 MSc = ''
00600 
00601                 e1   = self.e1[eid]
00602                 e2   = self.e2[eid]
00603                 e3   = self.e3[eid]
00604                 e4   = self.e4[eid]
00605                 emax = self.emax[eid]
00606                 emin = self.emin[eid]
00607                 vals = [e1[0],e2[0],e3[0],e4[0],axial,emax[0],emin[0],
00608                         e1[1],e2[1],e3[1],e4[1],emax[1],emin[1]]
00609                 (vals2,isAllZeros) = self.writeFloats13E(vals)
00610                 [e10,e20,e30,e40,axial,emax0,emin0,
00611                  e11,e21,e31,e41,emax1,emin1] = vals2
00612 
00613                 msg.append('0%8i   %13s  %13s  %13s  %13s  %13s  %13s  %13s %-s\n' %(eid,  e10,e20,e30,e40,axial,emax0,emin0,MSt.rstrip()))
00614                 msg.append(' %8s   %13s  %13s  %13s  %13s  %13s  %13s  %13s %-s\n'   %('', e11,e21,e31,e41,'',   emax1,emin1,MSc.rstrip()))
00615             ###
00616             msg.append(pageStamp+str(pageNum)+'\n')
00617             pageNum+=1
00618         return (''.join(msg),pageNum-1)
00619 
00620     def __repr__(self):
00621         if self.isTransient:
00622             return self.__reprTransient__()
00623 
00624         msg = '---BAR STRAIN---\n'
00625         msg += '%-8s %6s ' %('EID','eType')
00626         headers = ['e1','e2','e3','e4','Axial','eMax','eMin']
00627         for header in headers:
00628             msg += '%10s ' %(header)
00629         msg += '\n'
00630 
00631         for eid,E1s in sorted(self.e1.iteritems()):
00632             eType = self.eType[eid]
00633             axial = self.axial[eid]
00634             #MSt  = self.MS_tension[eid]
00635             #MSc  = self.MS_compression[eid]
00636 
00637             e1   = self.e1[eid]
00638             e2   = self.e2[eid]
00639             e3   = self.e3[eid]
00640             e4   = self.e4[eid]
00641             emax = self.emax[eid]
00642             emin = self.emin[eid]
00643             msg += '%-8i %6s ' %(eid,eType)
00644             vals = [e1[0],e2[0],e3[0],e4[0],axial,emax[0],emin[0]]
00645             for val in vals:
00646                 if abs(val)<1e-6:
00647                     msg += '%10s ' %('0')
00648                 else:
00649                     msg += '%10.3g ' %(val)
00650                 ###
00651             msg += '\n'
00652 
00653             msg += '%s ' %(' '*17)
00654             vals = [e1[1],e2[1],e3[1],e4[1],'',emax[1],emin[1]]
00655             for val in vals:
00656                 if isinstance(val,str):
00657                     msg += '%10s ' %(val)
00658                 elif abs(val)<1e-6:
00659                     msg += '%10s ' %('0')
00660                 else:
00661                     msg += '%10.3g ' %(val)
00662                 ###
00663             msg += '\n'
00664 
00665             #msg += "eid=%-4s eType=%s s1=%-4i s2=%-4i s3=%-4i s4=%-4i axial=-%5i smax=%-5i smax=%-4i\n" %(eid,eType,s1[0],s2[0],s3[0],s4[0],axial, smax[0],smin[0])
00666             #msg += "%s                s1=%-4i s2=%-4i s3=%-4i s4=%-4i %s         smax=%-5i smax=%-4i\n" %(' '*4,    s1[1],s2[1],s3[1],s4[1],'    ',smax[1],smin[1])
00667         ###
00668         return msg
00669 
00670     def __reprTransient__(self):
00671         msg = '---BAR STRAIN---\n'
00672         msg += '%-8s %6s ' %('EID','eType')
00673         headers = ['e1','e2','e3','e4','Axial','eMax','eMin']
00674         for header in headers:
00675             msg += '%10s ' %(header)
00676         msg += '\n'
00677 
00678         for dt,E1s in sorted(self.e1.iteritems()):
00679             msg += "%s = %g\n" %(self.dataCode['name'],dt)
00680             for eid,e1s in sorted(Els.iteritems()):
00681                 eType = self.eType[eid]
00682                 axial = self.axial[dt][eid]
00683                 #MSt  = self.MS_tension[dt][eid]
00684                 #MSc  = self.MS_compression[dt][eid]
00685 
00686                 e1   = self.e1[dt][eid]
00687                 e2   = self.e2[dt][eid]
00688                 e3   = self.e3[dt][eid]
00689                 e4   = self.e4[dt][eid]
00690                 emax = self.emax[dt][eid]
00691                 emin = self.emin[dt][eid]
00692                 msg += '%-8i %6s ' %(eid,eType)
00693                 vals = [e1[0],e2[0],e3[0],e4[0],axial,emax[0],emin[0]]
00694                 for val in vals:
00695                     if abs(val)<1e-6:
00696                         msg += '%10s ' %('0')
00697                     else:
00698                         msg += '%10.3g ' %(val)
00699                     ###
00700                 msg += '\n'
00701 
00702                 msg += '%s ' %(' '*17)
00703                 vals = [e1[1],e2[1],e3[1],e4[1],'',emax[1],emin[1]]
00704                 for val in vals:
00705                     if isinstance(val,str):
00706                         msg += '%10s ' %(val)
00707                     elif abs(val)<1e-6:
00708                         msg += '%10s ' %('0')
00709                     else:
00710                         msg += '%10.3g ' %(val)
00711                     ###
00712                 msg += '\n'
00713 
00714                 #msg += "eid=%-4s eType=%s s1=%-4i s2=%-4i s3=%-4i s4=%-4i axial=-%5i smax=%-5i smax=%-4i\n" %(eid,eType,s1[0],s2[0],s3[0],s4[0],axial, smax[0],smin[0])
00715                 #msg += "%s                s1=%-4i s2=%-4i s3=%-4i s4=%-4i %s         smax=%-5i smax=%-4i\n" %(' '*4,    s1[1],s2[1],s3[1],s4[1],'    ',smax[1],smin[1])
00716             ###
00717         ###
00718         return msg
 All Classes Namespaces Files Functions Variables