pyNastran
0.5.0
pyNastran BDF Reader/Writer, OP2 Parser, and GUI
|
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 ..real.oes_objects import stressObject, strainObject 00030 00031 00032 class ComplexBarStressObject(stressObject): 00033 """ 00034 # sCode=0 00035 C O M P L E X 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 (MAGNITUDE/PHASE) 00037 00038 ELEMENT LOCATION LOCATION LOCATION LOCATION AVERAGE 00039 ID. 1 2 3 4 AXIAL STRESS 00040 00041 1 ENDA 9.331276E+04 9.331276E+04 9.331276E+04 9.331276E+04 0.0 00042 180.0000 0.0 0.0 180.0000 0.0 00043 """ 00044 def __init__(self,dataCode,isSort1,iSubcase,dt=None): 00045 stressObject.__init__(self,dataCode,iSubcase) 00046 self.eType = {} 00047 00048 self.code = [self.formatCode,self.sortCode,self.sCode] 00049 00050 self.s1 = {} 00051 self.s2 = {} 00052 self.s3 = {} 00053 self.s4 = {} 00054 self.axial = {} 00055 00056 #if self.elementType==100: 00057 #self.getLength = self.getLength100_format1_sort0 00058 #self.addNewEid = self.addNewEid100 00059 00060 self.dt = dt 00061 #print "BAR dt=%s" %(dt) 00062 if isSort1: 00063 if dt is not None: 00064 #self.add = self.addSort1 00065 self.addNewEid = self.addNewEidSort1 00066 ### 00067 else: 00068 assert dt is not None 00069 #self.add = self.addSort2 00070 self.addNewEid = self.addNewEidSort2 00071 ### 00072 00073 def addF06Data(self,data,transient): 00074 if transient is None: 00075 for line in data: 00076 (eType,eid,s1A,s2A,s3A,s4A,axialA, 00077 s1B,s2B,s3B,s4B, ) = line 00078 self.eType[eid] = 'CBAR' 00079 self.s1[eid] = [s1A,s1B] 00080 self.s2[eid] = [s2A,s2B] 00081 self.s3[eid] = [s3A,s3B] 00082 self.s4[eid] = [s4A,s4B] 00083 self.axial[eid] = axialA 00084 ### 00085 return 00086 00087 (dtName,dt) = transient 00088 self.dataCode['name'] = dtName 00089 #print "dt = ",dt 00090 #print "dtName = ",dtName 00091 if dt not in self.s1: 00092 self.updateDt(self.dataCode,dt) 00093 00094 for line in data: 00095 (eType,eid,s1A,s2A,s3A,s4A,axialA, 00096 s1B,s2B,s3B,s4B ) = line 00097 self.eType[eid] = 'CBAR' 00098 self.s1[dt][eid] = [s1A,s1B] 00099 self.s2[dt][eid] = [s2A,s2B] 00100 self.s3[dt][eid] = [s3A,s3B] 00101 self.s4[dt][eid] = [s4A,s4B] 00102 self.axial[dt][eid] = axialA 00103 ### 00104 00105 def deleteTransient(self,dt): 00106 del self.s1[dt] 00107 del self.s2[dt] 00108 del self.s3[dt] 00109 del self.s4[dt] 00110 del self.axial[dt] 00111 00112 def getTransients(self): 00113 k = self.s1.keys() 00114 k.sort() 00115 return k 00116 00117 def addNewTransient(self,dt): 00118 """ 00119 initializes the transient variables 00120 """ 00121 #print "****add new transient****" 00122 self.dt = dt 00123 self.s1[dt] = {} 00124 self.s2[dt] = {} 00125 self.s3[dt] = {} 00126 self.s4[dt] = {} 00127 self.axial[dt] = {} 00128 00129 def addNewEid100(self,dt,out): 00130 #print "out = ",out 00131 #return 00132 (eid,s1,s2,s3,s4,axial) = out 00133 #print "Bar Stress add..." 00134 self.eType[eid] = 'CBAR' #eType 00135 00136 if self.eid in self.s1: 00137 self.s1[eid].append(s1) 00138 self.s2[eid].append(s2) 00139 self.s3[eid].append(s3) 00140 self.s4[eid].append(s4) 00141 self.axial[eid].append(axial) 00142 else: 00143 self.s1[eid] = [s1] 00144 self.s2[eid] = [s2] 00145 self.s3[eid] = [s3] 00146 self.s4[eid] = [s4] 00147 self.axial[eid] = axial 00148 00149 #print msg 00150 #if nodeID==0: raise Exception(msg) 00151 00152 def addNewEid(self,eType,dt,eid,s1a,s2a,s3a,s4a,axial, 00153 s1b,s2b,s3b,s4b, ): 00154 #print "Bar Stress add..." 00155 self.eType[eid] = eType 00156 00157 self.s1[eid] = [s1a,s1b] 00158 self.s2[eid] = [s2a,s2b] 00159 self.s3[eid] = [s3a,s3b] 00160 self.s4[eid] = [s4a,s4b] 00161 self.axial[eid] = axial 00162 #print msg 00163 #if nodeID==0: raise Exception(msg) 00164 00165 def addNewEidSort1(self,eType,dt,eid,s1a,s2a,s3a,s4a,axial, 00166 s1b,s2b,s3b,s4b, ): 00167 msg = "dt=%s eid=%s s1a=%s" %(dt,eid,s1a) 00168 #print msg 00169 if dt not in self.s1: 00170 self.addNewTransient(dt) 00171 self.eType[eid] = eType 00172 #print self.s1 00173 self.s1[dt][eid] = [s1a,s1b] 00174 self.s2[dt][eid] = [s2a,s2b] 00175 self.s3[dt][eid] = [s3a,s3b] 00176 self.s4[dt][eid] = [s4a,s4b] 00177 self.axial[dt][eid] = axial 00178 00179 #if nodeID==0: raise Exception(msg) 00180 00181 def writeF06(self,header,pageStamp,pageNum=1,f=None,isMagPhase=False): 00182 if self.nonlinearFactor is not None: 00183 return self.writeF06Transient(header,pageStamp,pageNum,f,isMagPhase) 00184 00185 msg = header+[ 00186 ' 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', 00187 ' ELEMENT SA1 SA2 SA3 SA4 AXIAL SA-MAX SA-MIN M.S.-T\n', 00188 ' ID. SB1 SB2 SB3 SB4 STRESS SB-MAX SB-MIN M.S.-C\n', 00189 ] 00190 00191 for eid,S1s in sorted(self.s1.iteritems()): 00192 eType = self.eType[eid] 00193 axial = self.axial[eid] 00194 s1 = self.s1[eid] 00195 s2 = self.s2[eid] 00196 s3 = self.s3[eid] 00197 s4 = self.s4[eid] 00198 00199 vals = [s1[0],s2[0],s3[0],s4[0],axial, 00200 s1[1],s2[1],s3[1],s4[1], ] 00201 (vals2,isAllZeros) = self.writeImagFloats13E(vals,isMagPhase) 00202 [s1ar,s2ar,s3ar,s4ar,axialr, 00203 s1br,s2br,s3br,s4br, 00204 s1ai,s2ai,s3ai,s4ai,axiali, 00205 s1bi,s2bi,s3bi,s4bi, ] = vals2 00206 msg.append('0%8i %13s %13s %13s %13s %-s\n' %(eid, s1ar,s2ar,s3ar,s4ar,axialr.rstrip())) 00207 msg.append(' %8s %13s %13s %13s %13s %-s\n' %('', s1ai,s2ai,s3ai,s4ai,axiali.rstrip())) 00208 00209 msg.append(' %8s %13s %13s %13s %-s\n' %('', s1br,s2br,s3br,s4br.rstrip())) 00210 msg.append(' %8s %13s %13s %13s %-s\n' %('', s1bi,s2bi,s3bi,s4bi.rstrip())) 00211 ### 00212 msg.append(pageStamp+str(pageNum)+'\n') 00213 return (''.join(msg),pageNum) 00214 00215 def writeF06Transient(self,header,pageStamp,pageNum=1,f=None,isMagPhase=False): 00216 words = [ 00217 ' 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', 00218 ' ELEMENT SA1 SA2 SA3 SA4 AXIAL SA-MAX SA-MIN M.S.-T\n', 00219 ' ID. SB1 SB2 SB3 SB4 STRESS SB-MAX SB-MIN M.S.-C\n', 00220 ] 00221 msg = [] 00222 for dt,S1s in sorted(self.s1.iteritems()): 00223 header[1] = ' %s = %10.4E\n' %(self.dataCode['name'],dt) 00224 msg += header + words 00225 for eid,S1 in sorted(S1s.iteritems()): 00226 eType = self.eType[eid] 00227 axial = self.axial[dt][eid] 00228 s1 = self.s1[dt][eid] 00229 s2 = self.s2[dt][eid] 00230 s3 = self.s3[dt][eid] 00231 s4 = self.s4[dt][eid] 00232 vals = [s1[0],s2[0],s3[0],s4[0],axial, 00233 s1[1],s2[1],s3[1],s4[1], ] 00234 (vals2,isAllZeros) = self.writeImagFloats13E(vals,isMagPhase) 00235 [s1ar,s2ar,s3ar,s4ar,axialr, 00236 s1br,s2br,s3br,s4br, 00237 s1ai,s2ai,s3ai,s4ai,axiali, 00238 s1bi,s2bi,s3bi,s4bi, ] = vals2 00239 msg.append('0%8i %13s %13s %13s %13s %-s\n' %(eid, s1ar,s2ar,s3ar,s4ar,axialr.rstrip())) 00240 msg.append(' %8s %13s %13s %13s %13s %-s\n' %('', s1ai,s2ai,s3ai,s4ai,axiali.rstrip())) 00241 00242 msg.append(' %8s %13s %13s %13s %-s\n' %('', s1br,s2br,s3br,s4br.rstrip())) 00243 msg.append(' %8s %13s %13s %13s %-s\n' %('', s1bi,s2bi,s3bi,s4bi.rstrip())) 00244 ### 00245 msg.append(pageStamp+str(pageNum)+'\n') 00246 pageNum+=1 00247 return (''.join(msg),pageNum-1) 00248 00249 def __repr__(self): 00250 if self.nonlinearFactor is not None: 00251 return self.__reprTransient__() 00252 00253 msg = '---BAR STRESS---\n' 00254 msg += '%-6s %6s ' %('EID','eType') 00255 headers = ['s1','s2','s3','s4','Axial'] 00256 for header in headers: 00257 msg += '%8s ' %(header) 00258 msg += '\n' 00259 00260 for eid,S1s in sorted(self.s1.iteritems()): 00261 eType = self.eType[eid] 00262 axial = self.axial[eid] 00263 00264 s1 = self.s1[eid] 00265 s2 = self.s2[eid] 00266 s3 = self.s3[eid] 00267 s4 = self.s4[eid] 00268 msg += '%-6i %6s ' %(eid,eType) 00269 vals = [s1[0],s2[0],s3[0],s4[0],axial] 00270 for val in vals: 00271 if abs(val)<1e-6: 00272 msg += '%8s ' %('0') 00273 else: 00274 msg += '%8i ' %(val) 00275 ### 00276 msg += '\n' 00277 00278 msg += '%s ' %(' '*13) 00279 vals = [s1[1],s2[1],s3[1],s4[1]] 00280 for val in vals: 00281 if isinstance(val,str): 00282 msg += '%8s ' %(val) 00283 elif abs(val)<1e-6: 00284 msg += '%8s ' %('0') 00285 else: 00286 msg += '%8i ' %(val) 00287 ### 00288 msg += '\n' 00289 00290 00291 #msg += "eid=%-4s eType=%s s1=%-4i s2=%-4i s3=%-4i s4=%-4i axial=-%5i\n" %(eid,eType,s1[0],s2[0],s3[0],s4[0],axial) 00292 #msg += "%s s1=%-4i s2=%-4i s3=%-4i s4=%-4i %s\n" %(' '*4, s1[1],s2[1],s3[1],s4[1]) 00293 ### 00294 return msg 00295 00296 def __reprTransient__(self): 00297 msg = '---BAR STRESS---\n' 00298 msg += '%-6s %6s ' %('EID','eType') 00299 headers = ['s1','s2','s3','s4','Axial','sMax','sMin'] 00300 for header in headers: 00301 msg += '%8s ' %(header) 00302 msg += '\n' 00303 00304 for dt,S1ss in sorted(self.s1.iteritems()): 00305 msg += '%s = %g\n' %(self.dataCode['name'],dt) 00306 for eid,S1s in sorted(S1ss.iteritems()): 00307 eType = self.eType[eid] 00308 axial = self.axial[dt][eid] 00309 00310 s1 = self.s1[dt][eid] 00311 s2 = self.s2[dt][eid] 00312 s3 = self.s3[dt][eid] 00313 s4 = self.s4[dt][eid] 00314 msg += '%-6i %6s ' %(eid,eType) 00315 vals = [s1[0],s2[0],s3[0],s4[0],axial] 00316 for val in vals: 00317 msg += '%8s %8s' %(val.real,val.imag) 00318 msg += '\n' 00319 00320 msg += '%s ' %(' '*13) 00321 vals = [s1[1],s2[1],s3[1],s4[1]] 00322 for val in vals: 00323 if isinstance(val,str): 00324 msg += '%8s ' %(val) 00325 elif abs(val)<1e-6: 00326 msg += '%8s %8s' %(val.real,val.imag) 00327 msg += '\n' 00328 00329 #msg += "eid=%-4s eType=%s s1=%-4i s2=%-4i s3=%-4i s4=%-4i axial=-%5i\n" %(eid,eType,s1[0],s2[0],s3[0],s4[0],axial) 00330 #msg += "%s s1=%-4i s2=%-4i s3=%-4i s4=%-4i %s\n" %(' '*4, s1[1],s2[1],s3[1],s4[1]) 00331 ### 00332 ### 00333 return msg 00334 00335 class ComplexBarStrainObject(strainObject): 00336 """ 00337 # sCode=10 00338 S T R A I N S I N B A R E L E M E N T S ( C B A R ) 00339 ELEMENT SA1 SA2 SA3 SA4 AXIAL SA-MAX SA-MIN M.S.-T 00340 ID. SB1 SB2 SB3 SB4 STRAIN SB-MAX SB-MIN M.S.-C 00341 00342 """ 00343 def __init__(self,dataCode,isSort1,iSubcase,dt=None): 00344 strainObject.__init__(self,dataCode,iSubcase) 00345 self.eType = {} 00346 00347 self.code = [self.formatCode,self.sortCode,self.sCode] 00348 self.e1 = {} 00349 self.e2 = {} 00350 self.e3 = {} 00351 self.e4 = {} 00352 self.axial = {} 00353 00354 if isSort1: 00355 if dt is not None: 00356 #self.add = self.addSort1 00357 self.addNewEid = self.addNewEidSort1 00358 ### 00359 else: 00360 assert dt is not None 00361 #self.add = self.addSort2 00362 self.addNewEid = self.addNewEidSort2 00363 ### 00364 00365 def addF06Data(self,data,transient): 00366 if transient is None: 00367 for line in data: 00368 (eType,eid,e1A,e2A,e3A,e4A,axialA, 00369 e1B,e2B,e3B,e4B, ) = line 00370 self.eType[eid] = 'CBAR' 00371 self.e1[eid] = [e1A,e1B] 00372 self.e2[eid] = [e2A,e2B] 00373 self.e3[eid] = [e3A,e3B] 00374 self.e4[eid] = [e4A,e4B] 00375 00376 self.axial[eid] = axialA 00377 ### 00378 return 00379 00380 (dtName,dt) = transient 00381 self.dataCode['name'] = dtName 00382 if dt not in self.s1: 00383 self.updateDt(self.dataCode,dt) 00384 00385 for line in data: 00386 (eType,eid,e1A,e2A,e3A,e4A,axialA, 00387 e1B,e2B,e3B,e4B, ) = line 00388 self.eType[eid] = 'CBAR' 00389 self.e1[dt][eid] = [e1A,e1B] 00390 self.e2[dt][eid] = [e2A,e2B] 00391 self.e3[dt][eid] = [e3A,e3B] 00392 self.e4[dt][eid] = [e4A,e4B] 00393 self.axial[dt][eid] = axialA 00394 ### 00395 00396 def deleteTransient(self,dt): 00397 del self.e1[dt] 00398 del self.e2[dt] 00399 del self.e3[dt] 00400 del self.e4[dt] 00401 del self.exial[dt] 00402 00403 def getTransients(self): 00404 k = self.e1.keys() 00405 k.sort() 00406 return k 00407 00408 def addNewTransient(self,dt): 00409 """ 00410 initializes the transient variables 00411 """ 00412 self.e1[dt] = {} 00413 self.e2[dt] = {} 00414 self.e3[dt] = {} 00415 self.e4[dt] = {} 00416 self.axial[dt] = {} 00417 00418 def addNewEid(self,eType,dt,eid,e1a,e2a,e3a,e4a,axial, 00419 e1b,e2b,e3b,e4b, ): 00420 #print "Bar Stress add..." 00421 self.eType[eid] = eType 00422 self.e1[eid] = [e1a,e1b] 00423 self.e2[eid] = [e2a,e2b] 00424 self.e3[eid] = [e3a,e3b] 00425 self.e4[eid] = [e4a,e4b] 00426 self.axial[eid] = axial 00427 00428 #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) 00429 #print msg 00430 #if nodeID==0: raise Exception(msg) 00431 00432 def addNewEidSort1(self,eType,dt,eid,e1a,e2a,e3a,e4a,axial, 00433 e1b,e2b,e3b,e4b, ): 00434 #print "Bar Stress add..." 00435 00436 self.eType[eid] = eType 00437 if dt not in self.e1: 00438 self.addNewTransient(dt) 00439 00440 self.e1[dt][eid] = [e1a,e1b] 00441 self.e2[dt][eid] = [e2a,e2b] 00442 self.e3[dt][eid] = [e3a,e3b] 00443 self.e4[dt][eid] = [e4a,e4b] 00444 self.axial[dt][eid] = axial 00445 00446 #print msg 00447 #if nodeID==0: raise Exception(msg) 00448 00449 def writeF06(self,header,pageStamp,pageNum=1,f=None,isMagPhase=False): 00450 return 'ComplexBarStress writeF06 not implemented...',pageNum 00451 if self.nonlinearFactor is not None: 00452 return self.writeF06Transient(header,pageStamp,pageNum,f,isMagPhase) 00453 00454 msg = header+[ 00455 ' 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', 00456 ' ELEMENT SA1 SA2 SA3 SA4 AXIAL SA-MAX SA-MIN M.S.-T\n', 00457 ' ID. SB1 SB2 SB3 SB4 STRAIN SB-MAX SB-MIN M.S.-C\n', 00458 ] 00459 for eid,E1s in sorted(self.e1.iteritems()): 00460 eType = self.eType[eid] 00461 axial = self.axial[eid] 00462 00463 e1 = self.e1[eid] 00464 e2 = self.e2[eid] 00465 e3 = self.e3[eid] 00466 e4 = self.e4[eid] 00467 vals = [e1[0],e2[0],e3[0],e4[0],axial, 00468 e1[1],e2[1],e3[1],e4[1]] 00469 (vals2,isAllZeros) = self.writeFloats13E(vals) 00470 [e10,e20,e30,e40,axial, 00471 e11,e21,e31,e41] = vals2 00472 00473 msg.append('0%8i %13s %13s %13s %13s %13s %13s %13s %-s\n' %(eid, e10,e20,e30,e40,axial.rstrip())) 00474 msg.append(' %8s %13s %13s %13s %13s %13s %13s %13s %-s\n' %('', e11,e21,e31,e41.rstrip())) 00475 ### 00476 msg.append(pageStamp+str(pageNum)+'\n') 00477 return (''.join(msg),pageNum) 00478 00479 def writeF06Transient(self,header,pageStamp,pageNum=1,f=None,isMagPhase=False): 00480 words = [ 00481 ' 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', 00482 ' ELEMENT SA1 SA2 SA3 SA4 AXIAL SA-MAX SA-MIN M.S.-T\n', 00483 ' ID. SB1 SB2 SB3 SB4 STRAIN SB-MAX SB-MIN M.S.-C\n', 00484 ] 00485 msg = [] 00486 for dt,E1s in sorted(self.e1.iteritems()): 00487 header[1] = ' %s = %10.4E\n' %(self.dataCode['name'],dt) 00488 msg += header + words 00489 for eid,e1s in sorted(E1s.iteritems()): 00490 eType = self.eType[eid] 00491 axial = self.axial[eid] 00492 00493 e1 = self.e1[eid] 00494 e2 = self.e2[eid] 00495 e3 = self.e3[eid] 00496 e4 = self.e4[eid] 00497 vals = [e1[0],e2[0],e3[0],e4[0],axial, 00498 e1[1],e2[1],e3[1],e4[1]] 00499 (vals2,isAllZeros) = self.writeFloats13E(vals) 00500 [e10,e20,e30,e40, 00501 e11,e21,e31,e41] = vals2 00502 00503 msg.append('0%8i %13s %13s %13s %13s %13s %13s %13s %-s\n' %(eid, e10,e20,e30,e40,axial.rstrip())) 00504 msg.append(' %8s %13s %13s %13s %13s %13s %13s %13s %-s\n' %('', e11,e21,e31,e41.rstrip())) 00505 ### 00506 msg.append(pageStamp+str(pageNum)+'\n') 00507 pageNum+=1 00508 return (''.join(msg),pageNum-1) 00509 00510 def __repr__(self): 00511 if self.nonlinearFactor is not None: 00512 return self.__reprTransient__() 00513 00514 msg = '---BAR STRAIN---\n' 00515 msg += '%-8s %6s ' %('EID','eType') 00516 headers = ['e1','e2','e3','e4','Axial','eMax','eMin'] 00517 for header in headers: 00518 msg += '%10s ' %(header) 00519 msg += '\n' 00520 00521 for eid,E1s in sorted(self.e1.iteritems()): 00522 eType = self.eType[eid] 00523 axial = self.axial[eid] 00524 e1 = self.e1[eid] 00525 e2 = self.e2[eid] 00526 e3 = self.e3[eid] 00527 e4 = self.e4[eid] 00528 msg += '%-8i %6s ' %(eid,eType) 00529 vals = [e1[0],e2[0],e3[0],e4[0],axial] 00530 for val in vals: 00531 if abs(val)<1e-6: 00532 msg += '%10s ' %('0') 00533 else: 00534 msg += '%10.3g ' %(val) 00535 ### 00536 msg += '\n' 00537 00538 msg += '%s ' %(' '*17) 00539 vals = [e1[1],e2[1],e3[1],e4[1]] 00540 for val in vals: 00541 if isinstance(val,str): 00542 msg += '%10s ' %(val) 00543 elif abs(val)<1e-6: 00544 msg += '%10s ' %('0') 00545 else: 00546 msg += '%10.3g ' %(val) 00547 ### 00548 msg += '\n' 00549 00550 #msg += "eid=%-4s eType=%s s1=%-4i s2=%-4i s3=%-4i s4=%-4i axial=-%5i\n" %(eid,eType,s1[0],s2[0],s3[0],s4[0],axial) 00551 #msg += "%s s1=%-4i s2=%-4i s3=%-4i s4=%-4i %s\n" %(' '*4, s1[1],s2[1],s3[1],s4[1]) 00552 ### 00553 return msg 00554 00555 def __reprTransient__(self): 00556 msg = '---BAR STRAIN---\n' 00557 msg += '%-8s %6s ' %('EID','eType') 00558 headers = ['e1','e2','e3','e4','Axial','eMax','eMin'] 00559 for header in headers: 00560 msg += '%10s ' %(header) 00561 msg += '\n' 00562 00563 for dt,E1s in sorted(self.e1.iteritems()): 00564 msg += "%s = %g\n" %(self.dataCode['name'],dt) 00565 for eid,e1s in sorted(Els.iteritems()): 00566 eType = self.eType[eid] 00567 axial = self.axial[dt][eid] 00568 e1 = self.e1[dt][eid] 00569 e2 = self.e2[dt][eid] 00570 e3 = self.e3[dt][eid] 00571 e4 = self.e4[dt][eid] 00572 msg += '%-8i %6s ' %(eid,eType) 00573 vals = [e1[0],e2[0],e3[0],e4[0],axial] 00574 for val in vals: 00575 if abs(val)<1e-6: 00576 msg += '%10s ' %('0') 00577 else: 00578 msg += '%10.3g ' %(val) 00579 ### 00580 msg += '\n' 00581 00582 msg += '%s ' %(' '*17) 00583 vals = [e1[1],e2[1],e3[1],e4[1]] 00584 for val in vals: 00585 if isinstance(val,str): 00586 msg += '%10s ' %(val) 00587 elif abs(val)<1e-6: 00588 msg += '%10s ' %('0') 00589 else: 00590 msg += '%10.3g ' %(val) 00591 ### 00592 msg += '\n' 00593 00594 #msg += "eid=%-4s eType=%s s1=%-4i s2=%-4i s3=%-4i s4=%-4i axial=-%5i\n" %(eid,eType,s1[0],s2[0],s3[0],s4[0],axial) 00595 #msg += "%s s1=%-4i s2=%-4i s3=%-4i s4=%-4i %s\n" %(' '*4, s1[1],s2[1],s3[1],s4[1]) 00596 ### 00597 ### 00598 return msg