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 #pylint: disable=C0301,C0111,C0324,R0912,R0915,W0223,E1101 00026 00027 from __future__ import division, print_function 00028 #import sys 00029 from struct import unpack 00030 00031 from .real.elementsStressStrain import RealElementsStressStrain 00032 from .real.oes_rods import RodStressObject, RodStrainObject 00033 from .real.oes_shear import ShearStressObject, ShearStrainObject 00034 from .real.oes_bars import BarStressObject, BarStrainObject 00035 from .real.oes_beams import BeamStressObject, BeamStrainObject 00036 from .real.oes_solids import SolidStressObject, SolidStrainObject 00037 from .real.oes_plates import PlateStressObject, PlateStrainObject 00038 from .real.oes_springs import CelasStressObject, CelasStrainObject 00039 from .real.oes_triax import TriaxStressObject, TriaxStrainObject 00040 from .real.oes_compositePlates import CompositePlateStressObject, CompositePlateStrainObject 00041 00042 00043 from .complex.elementsStressStrain import ComplexElementsStressStrain 00044 from .complex.oes_rods import ComplexRodStressObject, ComplexRodStrainObject 00045 from .complex.oes_springs import ComplexCelasStressObject, ComplexCelasStrainObject 00046 from .complex.oes_bars import ComplexBarStressObject, ComplexBarStrainObject 00047 from .complex.oes_plates import ComplexPlateStressObject, ComplexPlateStrainObject 00048 00049 00050 from .oes_nonlinear import NonlinearRodObject,NonlinearQuadObject,HyperelasticQuadObject 00051 00052 class OES(RealElementsStressStrain,ComplexElementsStressStrain): 00053 """Table of stresses/strains""" 00054 00055 def readTable_OES(self): 00056 table3 = self.readTable_OES_3 00057 table4Data = self.readTable_OES_4_Data 00058 self.readResultsTable(table3,table4Data,flag=1) # flag=1 defines old style 00059 self.deleteAttributes_OES() 00060 00061 def deleteAttributes_OES(self): 00062 params = ['sCode','elementType','obj','markerStart','loadSet','formatCode','sCode','thermal', 00063 'lsdvmn','mode','eign','modeCycle','freq','mode','eigr','eigi','dt'] 00064 self.deleteAttributes(params) 00065 00066 def readTable_OES_3(self, iTable): 00067 #print "*iTable3 = ", iTable 00068 #if 0: 00069 #markers = self.readMarkers([0,2]) 00070 #print "markers=%s" % (markers) 00071 #block = self.readBlock() 00072 #print "block = ",block 00073 #markers = self.readMarkers([-1,7]) 00074 #print "markers=%s" % (markers) 00075 #print self.printSection(200) 00076 00077 bufferWords = self.getBufferWords() 00078 00079 data = self.getData(4) 00080 bufferSize, = unpack(b'i',data) 00081 if self.makeOp2Debug: 00082 self.op2Debug.write('bufferSize=|%s|\n' % (str(bufferSize))) 00083 00084 data = self.getData(4*50) 00085 #self.printBlock(data) 00086 if self.makeOp2Debug: 00087 self.op2Debug.write('block3header\n') 00088 00089 self.parseApproachCode(data) # 3 00090 self.addDataParameter(data,'elementType', 'i', 3, False) ## element type 00091 self.addDataParameter(data,'loadSet', 'i', 8, False) ## load set ID 00092 self.addDataParameter(data,'formatCode', 'i', 9, False) ## format code 00093 self.addDataParameter(data,'numWide', 'i', 10, False) ## number of words per entry in record; @note is this needed for this table ??? 00094 self.addDataParameter(data,'sCode', 'i', 11, False) ## stress/strain codes 00095 self.addDataParameter(data,'thermal', 'i', 23, False) ## thermal flag; 1 for heat ransfer, 0 otherwise 00096 00097 #print "loadset=%s formatCode=%s numWordsEntry=%s sCode=%s" % (self.loadSet,self.formatCode,self.numWide,self.sCode) 00098 #print "thermal(23)=%s elementType(3)=%s" % (self.thermal,self.elementType) 00099 00100 00101 ## assuming tCode=1 00102 if self.analysisCode == 1: # statics / displacement / heat flux 00103 self.addDataParameter(data,'lsdvmn','i',5,False) ## load set number 00104 self.applyDataCodeValue('dataNames',['lsdvmn']) 00105 self.setNullNonlinearFactor() 00106 elif self.analysisCode == 2: # real eigenvalues 00107 self.addDataParameter(data,'mode', 'i',5) ## mode number 00108 self.addDataParameter(data,'eign', 'f',6,False) ## real eigenvalue 00109 self.addDataParameter(data,'modeCycle','f',7,False) ## mode or cycle @todo confused on the type - F1??? 00110 self.applyDataCodeValue('dataNames',['mode','eigr','modeCycle']) 00111 #elif self.analysisCode==3: # differential stiffness 00112 #self.lsdvmn = self.getValues(data,'i',5) ## load set number 00113 #self.dataCode['lsdvmn'] = self.lsdvmn 00114 #elif self.analysisCode==4: # differential stiffness 00115 # self.lsdvmn = self.getValues(data,'i',5) ## load set number 00116 elif self.analysisCode == 5: # frequency 00117 self.addDataParameter(data,'freq','f',5) ## frequency 00118 self.applyDataCodeValue('dataNames',['freq']) 00119 elif self.analysisCode == 6: # transient 00120 self.addDataParameter(data,'dt','f',5) ## time step 00121 self.applyDataCodeValue('dataNames',['dt']) 00122 elif self.analysisCode == 7: # pre-buckling 00123 self.addDataParameter(data,'lsdvmn','i',5) ## load set 00124 self.applyDataCodeValue('dataNames',['lsdvmn']) 00125 elif self.analysisCode == 8: # post-buckling 00126 self.addDataParameter(data,'lsdvmn','i',5) ## mode number 00127 self.addDataParameter(data,'eigr','f',6,False) ## real eigenvalue 00128 self.applyDataCodeValue('dataNames',['lsdvmn','eigr']) 00129 elif self.analysisCode == 9: # complex eigenvalues 00130 self.addDataParameter(data,'mode','i',5) ## mode number 00131 self.addDataParameter(data,'eigr','f',6,False) ## real eigenvalue 00132 self.addDataParameter(data,'eigi','f',7,False) ## imaginary eigenvalue 00133 self.applyDataCodeValue('dataNames',['mode','eigr','eigi']) 00134 elif self.analysisCode == 10: # nonlinear statics 00135 self.addDataParameter(data,'lftsfq','f',5) ## load step 00136 self.applyDataCodeValue('dataNames',['lftsfq']) 00137 elif self.analysisCode == 11: # old geometric nonlinear statics 00138 self.addDataParameter(data,'lsdvmn','i',5) ## load set number 00139 self.applyDataCodeValue('dataNames',['lsdvmn']) 00140 elif self.analysisCode == 12: # contran ? (may appear as aCode=6) --> straight from DMAP...grrr... 00141 self.addDataParameter(data,'dt','f',5) ## Time step ??? --> straight from DMAP 00142 self.applyDataCodeValue('dataNames',['dt']) 00143 else: 00144 raise RuntimeError('invalid analysisCode...analysisCode=%s' % (self.analysisCode)) 00145 # tCode=2 00146 #if self.analysisCode==2: # sort2 00147 # self.lsdvmn = self.getValues(data,'i',5) 00148 00149 if not self.isSort1(): 00150 raise NotImplementedError('sort2...') 00151 00152 self.readTitle() 00153 #print "n4 = ",self.n 00154 00155 def parseStressCode(self): 00156 """ 00157 sCode = 0 -> stressBits = [0,0,0,0,0] 00158 sCode = 1 -> stressBits = [0,0,0,0,1] 00159 sCode = 2 -> stressBits = [0,0,0,1,0] 00160 sCode = 3 -> stressBits = [0,0,0,1,1] 00161 etc. 00162 sCode = 32 -> stressBits = [1,1,1,1,1] 00163 00164 stressBits[0] = 0 -> isMaxShear=True isVonMises=False 00165 stressBits[0] = 1 -> isMaxShear=False isVonMises=True 00166 00167 stressBits[1] = 0 -> isStress=True isStrain=False 00168 stressBits[2] = 0 -> isFiberCurvature=True isFiberDistance=False 00169 stressBits[3] = 0 -> duplicate of Bit[1] (stress/strain) 00170 stressBits[4] = 0 -> material coordinate system flag 00171 """ 00172 bits = [0,0,0,0,0] 00173 00174 sCode = self.sCode 00175 i=4 00176 while sCode>0: 00177 value = sCode%2 00178 sCode = (sCode - value)//2 00179 bits[i] = value 00180 #print " *bit = ",value 00181 #print " sCode = ",sCode 00182 i-=1 00183 #bits.reverse() 00184 #print "stressBits = ",bits 00185 self.stressBits = bits 00186 self.dataCode['stressBits'] = self.stressBits 00187 00188 def readTable_OES_4_Data(self, iTable): 00189 isTable4Done = False 00190 isBlockDone = False 00191 #print self.printSection(100) 00192 00193 data = self.getData(16) 00194 #print self.printBlock(data) # on 00195 #print "16 block..." 00196 #self.printBlock(data) 00197 bufferWords, = unpack(b'i',data[4:8]) 00198 #print "bufferWords = ",bufferWords 00199 if self.makeOp2Debug: 00200 self.op2Debug.write('bufferWords=|%s|\n' % (str(bufferWords))) 00201 00202 #print "*********************" 00203 #bufferWords = self.getMarker() # 87 - buffer 00204 #print "OES4 bufferWords = ",bufferWords,bufferWords*4 00205 #self.verifyBufferSize(bufferWords) 00206 00207 isBlockDone = not(bufferWords) 00208 #print "self.firstPass = ",self.firstPass 00209 00210 ## table -4 is done, restarting table -3 00211 if self.isBufferDone: # table is done when the buffer is done 00212 isTable4Done = True 00213 #print "exitA" 00214 return (isTable4Done, isBlockDone) 00215 if bufferWords == 0: 00216 #print "bufferWords 0 - done with Table4" 00217 isTable4Done = True 00218 #isBlockDone = True 00219 self.printSection(40) 00220 #print "exitB" 00221 return (isTable4Done, isBlockDone) 00222 00223 self.readElementTable() 00224 return isTable4Done,isBlockDone 00225 00226 def readElementTable(self): 00227 #print "**self.readElementTable" 00228 #print "*elementType = ",self.elementType 00229 #print "op2.tell=%s n=%s" % (self.op2.tell(),self.n) 00230 00231 self.rewind(4) 00232 self.data = self.readBlock() # 348 00233 #print "len(self.data) = ",len(self.data) 00234 00235 if self.makeOp2Debug: 00236 self.op2Debug.write('reading big data block\n') 00237 #print self.printBlock(self.data) 00238 00239 #msg = 'elementType=%s -> %s' % (self.elementType,self.ElementType(self.elementType)) 00240 self.parseStressCode() 00241 00242 if not self.isValidSubcase(): # lets the user skip a certain subcase 00243 self.log.debug("***skipping table=%s iSubcase=%s" % (self.tableName,self.iSubcase)) 00244 print("***skipping table=%s iSubcase=%s" % (self.tableName,self.iSubcase)) 00245 self.skipOES_Element() 00246 elif self.thermal == 0: 00247 # Stress / Strain 00248 self.dataCode['elementName'] = self.ElementType(self.elementType) 00249 if self.tableCode == 5 and self.isSort1(): 00250 assert self.tableName in ['OES1', 'OES1X', 'OES1X1', 'OES1C', 'OESNLXR','OESNLXD','OESNL1X','OESCP','OESTRCP', 00251 'OSTR1X','OSTR1C'],'%s is not supported' % (self.tableName) 00252 self.readOES_Data() 00253 else: 00254 self.NotImplementedOrSkip('invalid atfsCode=%s' % (self.atfsCode)) 00255 elif self.thermal == 1: 00256 self.OES_Thermal() 00257 else: 00258 raise RuntimeError('invalid thermal option...') 00259 00260 #print self.obj 00261 00262 def OES_StressStrainCode(self): 00263 """ 00264 Gets the numwide codes for the element to determine if 00265 the real / complex / random result should be found. 00266 The format and sort codes do not always give the right answer... 00267 """ 00268 realMapper = { 00269 0: 17, # GRID - OES1G 00270 1: 5, # CROD 00271 2: 1+(11-1)*11, # CBEAM 00272 3: 5, # CTUBE 00273 4: 4, # CSHEAR 00274 10: 5, # CONROD 00275 11: 2, # CELAS1 00276 12: 2, # CELAS2 00277 13: 2, # CELAS3 00278 #14: 2, # CELAS4 00279 24: None, # CVISC 00280 33: 17, # CQUAD4 00281 34: 16, # CBAR 00282 35: 18, # CCONEAX 00283 38: None, # CGAP 00284 39: 4+(25-4)*5, # CTETRA 00285 40: 8, # CBUSH1D 00286 47: 5, # CAXIF2 00287 48: 10, # CAXIF3 00288 50: 6, # CSLOT3 00289 51: 7, # CSLOT4 00290 53: 1+(9-1)*4, # CTRIAX6 00291 60: 10, # CRAC2D, CDUM8 00292 61: 10, # CRAC3D, CDUM9 00293 64: 2+(19-2)*5, # CQUAD8 00294 67: 4+(25-4)*9, # CHEXA 00295 68: 4+(25-4)*7, # CPENTA 00296 69: 1+(11-1)*2, # CBEND 00297 70: 2+(19-2)*4, # CTRIAR 00298 74: 17, # CTRIA3 00299 75: 2+(19-2)*4, # CTRIA6 00300 82: 2+(19-2)*5, # CQUADR 00301 85: 2+(18-2)*5, # Nonlinear CTETRA 00302 86: 11, # Nonlinear CGAP 00303 87: 7, # Nonlinear CTUBE 00304 88: 13, # Nonlinear CTRIA 00305 89: 7, # Nonlinear CROD 00306 90: 13, # Nonlinear QUAD 00307 91: 4+(25-4)*7, # Nonlinear CPENTA 00308 92: 7, # Nonlinear CONROD 00309 93: 4+(25-4)*9, # Nonlinear CHEXA 00310 94: 51, # Nonlinear CBEAM 00311 95: 11, # Composite QUAD4 00312 96: 11, # Composite QUAD8 00313 97: 11, # Composite CTRIA3 00314 98: 11, # Composite CTRIA6 00315 145: 98, # VUHEXA 00316 146: 74, # VUPENTA 00317 100: 10, # CBAR 100 00318 101: 3, # CAABSF 00319 102: 7, # CBUSH 00320 139: 2+(9-2)*4, # hyperelastic QUAD4FD 00321 140: 2+(22-2)*8, # hyperelastic HEXAFD 00322 144: 2+(19-2)*5, # bilinear CQUAD4 00323 147: 50, # VUTETRA 00324 160: 2+(22-2)*6, # linear hyperelastic PENTAFD - 6 nodes 00325 161: 2+(22-2)*1, # linear hyperelastic TETRAFD - 4 nodes 00326 162: 2+(9-2)*1, # linear hyperelastic TRIAFD 00327 163: 2+(22-2)*27,# linear hyperelastic HEXAFD - 20 nodes 00328 164: 2+(9-2)*9, # linear hyperelastic QUADFD 00329 165: 2+(22-2)*21,# linear hyperelastic PENTAFD - 15 nodes 00330 166: 2+(22-2)*5, # linear hyperelastic TETRAFD - 10 nodes 00331 167: 2+(9-2)*3, # linear hyperelastic TRIA6FD 00332 168: 2+(9-2)*1, # linear hyperelastic TRIAXFD 00333 169: 2+(9-2)*3, # linear hyperelastic TRIAX6FD 00334 170: 2+(9-2)*4, # linear hyperelastic QUADXFD 00335 171: 2+(9-2)*9, # linear hyperelastic QUAD9XFD 00336 172: 13, # Nonlinear CQUADR 00337 173: 13, # Nonlinear CTRIAR 00338 189: 6+(23-6)*4, # VUQUAD 00339 190: 6+(23-6)*3, # VUTRIA 00340 191: 6+((12-6)*2+4)*2, # VUBEAM 00341 200: 8, # WELD 00342 201: 2+(13-2)*4, # nonlinear hyperelastic QUAD 00343 202: 2+(17-2)*8, # nonlinear hyperelastic HEXA8FD 00344 204: 2+(17-2)*8, # hyperelastic HEXAFD - 20 nodes 00345 205: 2+(17-2)*5, # hyperelastic PENTAFD - 4 nodes 00346 211: 2+(13-2)*3, # hyperelastic TRIAFD 00347 212: 2+(13-2)*1, # hyperelastic TRIAX3FD 00348 213: 2+(13-2)*3, # hyperelastic TRIAXFD 00349 214: 2+(13-2)*4, # hyperelastic QUAD4XFD 00350 215: 2+(13-2)*9, # hyperelastic QUADXFD 00351 216: 2+(17-2)*4, # hyperelastic TETRAFD - 4 nodes 00352 217: 2+(13-2)*3, # hyperelastic TRIA3FD - 3 nodes 00353 218: 2+(17-2)*8, # hyperelastic HEXAFD - 20 nodes 00354 219: 2+(13-2)*4, # hyperelastic QUAD4FD - 4 nodes 00355 220: 2+(17-2)*8, # hyperelastic PENTAFD - 15 nodes 00356 221: 2+(17-2)*4, # hyperelastic TETRAFD - 4 nodes 00357 222: 2+(13-2)*3, # hyperelastic TRIAXFD - 3 nodes 00358 223: 2+(13-2)*4, # hyperelastic QUADXFD - 4 nodes 00359 224: 3, # nonlinear CELAS1 00360 225: 3, # nonlinear CELAS3 00361 226: 19, # nonlinear CBUSH 00362 232: 11, # composite CQUADR (same as CQUAD4) 00363 233: 11, # composite CTRIAR (same as CQUAD4) 00364 235: 16, # punch plate CQUADR 00365 236: 16, # punch plate CTRIAR 00366 } 00367 00368 imagMapper = { 00369 0: None, # GRID - OES1G 00370 1: 5, # CROD 00371 2: 1+(11-1)*11, # CBEAM 00372 3: 5, # CTUBE 00373 4: 5, # CSHEAR 00374 10: 5, # CONROD 00375 11: 3, # CELAS1 00376 12: 3, # CELAS2 00377 13: 3, # CELAS3 00378 14: 3, # CELAS4 00379 24: 5, # CVISC 00380 33: 15, # CQUAD4 00381 34: 19, # CBAR 00382 35: None, # CCONEAX 00383 38: None, # CGAP 00384 39: 4+(17-4)*5, # CTETRA 00385 40: 9, # CBUSH1D 00386 47: 9, # CAXIF2 00387 48: 19, # CAXIF3 00388 50: 11, # CSLOT3 00389 51: 13, # CSLOT4 00390 53: 1+(10-1)*4, # CTRIAX6 00391 60: None, # CRAC2D, CDUM8 00392 61: None, # CRAC3D, CDUM9 00393 64: 2+(17-2)*5, # CQUAD8 00394 67: 4+(17-4)*9, # CHEXA 00395 68: 4+(17-4)*7, # CPENTA 00396 69: 1+(11-1)*2, # CBEND 00397 70: 2+(17-2)*4, # CTRIAR 00398 74: 15, # CTRIA3 00399 75: 2+(17-2)*4, # CTRIA6 00400 82: 2+(17-2)*5, # CQUADR 00401 85: None, # Nonlinear CTETRA 00402 86: None, # Nonlinear CGAP 00403 87: None, # Nonlinear CTUBE 00404 88: 25, # Nonlinear CTRIA 00405 89: None, # Nonlinear CROD 00406 90: 25, # Nonlinear QUAD 00407 91: None, # Nonlinear CPENTA 00408 92: None, # Nonlinear CONROD 00409 93: None, # Nonlinear CHEXA 00410 94: None, # Nonlinear CBEAM 00411 95: None, # Composite QUAD4 00412 96: None, # Composite QUAD8 00413 97: None, # Composite CTRIA3 00414 98: None, # Composite CTRIA6 00415 100: 16, # CBAR 100 00416 101: 4, # CAABSF 00417 102: 13, # CBUSH 00418 139: None, # hyperelastic QUADFD 00419 140: None, # hyperelastic HEXAFD 00420 144: 2+(17-2)*5, # bilinear CQUAD4 00421 145: 58, # VUHEXA 00422 146: 44, # VUPENTA 00423 147: 30, # VUTETRA 00424 160: None, # linear hyperelastic PENTAFD - 6 nodes 00425 161: None, # linear hyperelastic TETRAFD - 4 nodes 00426 162: None, # linear hyperelastic TRIAFD 00427 163: None, # linear hyperelastic HEXAFD - 20 nodes 00428 164: None, # linear hyperelastic QUADFD 00429 165: None, # linear hyperelastic PENTAFD - 15 nodes 00430 166: None, # linear hyperelastic TETRAFD - 10 nodes 00431 167: None, # linear hyperelastic TRIA6FD 00432 168: None, # linear hyperelastic TRIAXFD 00433 169: None, # linear hyperelastic TRIAX6FD 00434 170: None, # linear hyperelastic QUADXFD 00435 171: None, # linear hyperelastic QUAD9XFD 00436 172: 25, # Nonlinear CQUADR 00437 173: 25, # Nonlinear CTRIAR 00438 189: 6+(33-6)*4, # VUQUAD 00439 190: 6+(33-6)*3, # VUTRIA 00440 191: 6+((15-6)*2+4)*2, # VUBEAM 00441 200: None, # WELD 00442 201: None, # nonlinear hyperelastic QUAD 00443 202: None, # nonlinear hyperelastic HEXA8FD 00444 204: None, # hyperelastic HEXAFD - 20 nodes 00445 205: None, # hyperelastic PENTAFD - 4 nodes 00446 211: None, # hyperelastic TRIAFD 00447 212: None, # hyperelastic TRIAX3FD 00448 213: None, # hyperelastic TRIAXFD 00449 214: None, # hyperelastic QUAD4XFD 00450 215: None, # hyperelastic QUADXFD 00451 216: None, # hyperelastic TETRAFD - 4 nodes 00452 217: None, # hyperelastic TRIA3FD - 3 nodes 00453 218: None, # hyperelastic HEXAFD - 20 nodes 00454 219: None, # hyperelastic QUAD4FD - 4 nodes 00455 220: None, # hyperelastic PENTAFD - 15 nodes 00456 221: None, # hyperelastic TETRAFD - 4 nodes 00457 222: None, # hyperelastic TRIAXFD - 3 nodes 00458 223: None, # hyperelastic QUADXFD - 4 nodes 00459 224: None, # nonlinear CELAS1 00460 225: None, # nonlinear CELAS3 00461 226: None, # nonlinear CBUSH 00462 232: None, # composite CQUADR (same as CQUAD4) 00463 233: None, # composite CTRIAR (same as CQUAD4) 00464 235: 14, # punch plate CQUADR 00465 236: 14, # punch plate CTRIAR 00466 } 00467 00468 randomMapper = { 00469 0: None, # GRID - OES1G 00470 1: 3, # CROD 00471 2: 1+(7-1)*11, # CBEAM 00472 3: 3, # CTUBE 00473 4: 3, # CSHEAR 00474 10: 3, # CONROD 00475 11: 2, # CELAS1 00476 12: 2, # CELAS2 00477 13: 2, # CELAS3 00478 #14: 2, # CELAS4 00479 24: 3, # CVISC ## @todo: ????? 00480 33: 9, # CQUAD4 00481 34: None, # CBAR ## @todo: 19 stress; 10 for strain??? 00482 35: None, # CCONEAX 00483 38: None, # CGAP 00484 39: 4+(11-4)*5, # CTETRA 00485 40: 2+(19-2)*5, # CBUSH1D 00486 47: 5, # CAXIF2 00487 48: 10, # CAXIF3 00488 50: 6, # CSLOT3 00489 51: 7, # CSLOT4 00490 53: 1+(9-1)*4, # CTRIAX6 00491 60: None, # CRAC2D, CDUM8 00492 61: None, # CRAC3D, CDUM9 00493 64: 2+(11-2)*5, # CQUAD8 00494 67: 4+(11-4)*9, # CHEXA 00495 68: 4+(11-4)*7, # CPENTA 00496 69: 1+(7-1)*2, # CBEND 00497 70: 2+(11-2)*4, # CTRIAR 00498 74: 9, # CTRIA3 00499 75: 2+(11-2)*4, # CTRIA6 00500 82: 2+(11-2)*5, # CQUADR 00501 85: None, # Nonlinear CTETRA 00502 86: None, # Nonlinear CGAP 00503 87: None, # Nonlinear CTUBE 00504 88: None, # Nonlinear CTRIA 00505 89: None, # Nonlinear CROD 00506 90: None, # Nonlinear QUAD 00507 91: None, # Nonlinear CPENTA 00508 92: None, # Nonlinear CONROD 00509 93: None, # Nonlinear CHEXA 00510 94: None, # Nonlinear CBEAM 00511 95: None, # Composite QUAD4 00512 96: None, # Composite QUAD8 00513 97: None, # Composite CTRIA3 00514 98: None, # Composite CTRIA6 00515 100: 9, # CBAR 100 00516 101: 3, # CAABSF 00517 102: 7, # CBUSH 00518 139: None, # hyperelastic QUADFD 00519 140: None, # hyperelastic HEXAFD 00520 144: 2+(11-2)*5, # bilinear CQUAD4 00521 145: 106, # VUHEXA 00522 146: 80, # VUPENTA 00523 147: 54, # VUTETRA 00524 160: None, # linear hyperelastic PENTAFD - 6 nodes 00525 161: None, # linear hyperelastic TETRAFD - 4 nodes 00526 162: None, # linear hyperelastic TRIAFD 00527 163: None, # linear hyperelastic HEXAFD - 20 nodes 00528 164: None, # linear hyperelastic QUADFD 00529 165: None, # linear hyperelastic PENTAFD - 15 nodes 00530 166: None, # linear hyperelastic TETRAFD - 10 nodes 00531 167: None, # linear hyperelastic TRIA6FD 00532 168: None, # linear hyperelastic TRIAXFD 00533 169: None, # linear hyperelastic TRIAX6FD 00534 170: None, # linear hyperelastic QUADXFD 00535 171: None, # linear hyperelastic QUAD9XFD 00536 172: None, # Nonlinear CQUADR 00537 173: None, # Nonlinear CTRIAR 00538 189: None, # VUQUAD 00539 190: None, # VUTRIA 00540 191: None, # VUBEAM 00541 200: None, # WELD 00542 201: None, # nonlinear hyperelastic QUAD 00543 202: None, # nonlinear hyperelastic HEXA8FD 00544 204: None, # hyperelastic HEXAFD - 20 nodes 00545 205: None, # hyperelastic PENTAFD - 4 nodes 00546 211: None, # hyperelastic TRIAFD 00547 212: None, # hyperelastic TRIAX3FD 00548 213: None, # hyperelastic TRIAXFD 00549 214: None, # hyperelastic QUAD4XFD 00550 215: None, # hyperelastic QUADXFD 00551 216: None, # hyperelastic TETRAFD - 4 nodes 00552 217: None, # hyperelastic TRIA3FD - 3 nodes 00553 218: None, # hyperelastic HEXAFD - 20 nodes 00554 219: None, # hyperelastic QUAD4FD - 4 nodes 00555 220: None, # hyperelastic PENTAFD - 15 nodes 00556 221: None, # hyperelastic TETRAFD - 4 nodes 00557 222: None, # hyperelastic TRIAXFD - 3 nodes 00558 223: None, # hyperelastic QUADXFD - 4 nodes 00559 224: None, # nonlinear CELAS1 00560 225: None, # nonlinear CELAS3 00561 226: None, # nonlinear CBUSH 00562 232: None, # composite CQUADR (same as CQUAD4) 00563 233: None, # composite CTRIAR (same as CQUAD4) 00564 235: None, # punch plate CQUADR 00565 236: None, # punch plate CTRIAR 00566 } 00567 00568 Real = realMapper[self.elementType] 00569 Imag = imagMapper[self.elementType] 00570 Random = randomMapper[self.elementType] 00571 return (Real,Imag,Random) 00572 00573 def readOES_Data(self): 00574 #msg = '%s-OES elementType=%-3s -> %-6s\n' % (self.tableName,self.elementType,self.ElementType(self.elementType)) 00575 msg = '' 00576 #if self.analysisCode not in [1,6,10]: 00577 #raise InvalidATFSCodeError('self.atfsCode=%s' % (self.atfsCode)) 00578 00579 readCase = True 00580 if self.iSubcase in self.expectedTimes and len(self.expectedTimes[self.iSubcase])>0: 00581 readCase = self.updateDtMap() 00582 00583 if readCase==False: 00584 self.skipOES_Element() 00585 return 00586 00587 #print 'self.elementType = ',self.elementType 00588 (numWideReal,numWideImag,numWideRandom) = self.OES_StressStrainCode() 00589 if self.elementType in [1,3,10]: # crod/ctube/conrod 00590 #if self.elementType==1: self.dataCode['elementName'] = 'CROD' 00591 #if self.elementType==3: self.dataCode['elementName'] = 'CTUBE' 00592 #if self.elementType==10: self.dataCode['elementName'] = 'CONROD' 00593 if self.numWide==numWideReal: 00594 resultName = self.makeOES_Object(self.rodStress,RodStressObject,'rodStress', 00595 self.rodStrain,RodStrainObject,'rodStrain') 00596 self.handleResultsBuffer3(self.OES_basicElement,resultName) 00597 elif self.numWide==numWideImag: 00598 resultName = self.makeOES_Object(self.rodStress,ComplexRodStressObject,'rodStress', 00599 self.rodStrain,ComplexRodStrainObject,'rodStrain') 00600 self.handleResultsBuffer3(self.OES_Rod1_alt,resultName) 00601 else: 00602 self.NotImplementedOrSkip() 00603 00604 elif self.elementType == 2: # cbeam - these have the same numWide 00605 self.dataCode['elementName'] = 'CBEAM' 00606 #print self.codeInformation() 00607 #print "numWideReal=%s numWideImag=%s" % (numWideReal,numWideImag) 00608 if self.formatCode==1: # Real 00609 #if self.numWide==numWideReal: 00610 resultName = self.makeOES_Object(self.beamStress, BeamStressObject, 'beamStress', 00611 self.beamStrain, BeamStrainObject, 'beamStrain') 00612 self.handleResultsBuffer3(self.OES_CBEAM_2,resultName) 00613 #elif self.formatCode in [2,3]: # Imag 00614 ##elif self.numWide==numWideImag: 00615 # self.makeOES_Object(self.beamStress, ComplexBeamStressObject, 'beamStress', 00616 # self.beamStrain, ComplexBeamStrainObject, 'beamStrain') 00617 # self.handleResultsBuffer3(self.OES_CBEAM_2_alt,resultName) 00618 else: 00619 self.NotImplementedOrSkip() 00620 00621 elif self.elementType in [4]: # cshear 00622 self.dataCode['elementName'] = 'CSHEAR' 00623 if self.numWide==numWideReal: 00624 resultName = self.makeOES_Object(self.shearStress,ShearStressObject, 'shearStres', 00625 self.shearStrain,ShearStrainObject, 'shearStrain') 00626 self.handleResultsBuffer3(self.OES_basicElement,resultName) 00627 #elif self.numWide==numWideImag: 00628 # resultName = self.makeOES_Object(self.shearStress, ComplexShearStressObject, 'shearStress', 00629 # self.shearStrain, ComplexShearStrainObject, 'shearStrain') 00630 # self.handleResultsBuffer3(self.OES_shear4_alt,resultName) 00631 else: 00632 self.NotImplementedOrSkip() 00633 elif self.elementType in [11,12,13]: # celas1/celas2/celas3 00634 #print " found celas2_12" 00635 #if self.elementType==11: self.dataCode['elementName'] = 'CELAS1' 00636 #elif self.elementType==12: self.dataCode['elementName'] = 'CELAS2' 00637 #elif self.elementType==13: self.dataCode['elementName'] = 'CELAS3' 00638 #else: raise Exception('not implemented error') 00639 00640 if self.numWide==numWideReal: 00641 resultName = self.makeOES_Object(self.celasStress,CelasStressObject,'celasStress', 00642 self.celasStrain,CelasStrainObject,'celasStrain') 00643 self.handleResultsBuffer3(self.OES_basicElement,resultName) 00644 elif self.numWide==numWideImag: 00645 resultName = self.makeOES_Object(self.celasStress,ComplexCelasStressObject,'celasStress', 00646 self.celasStrain,ComplexCelasStrainObject,'celasStrain') 00647 self.handleResultsBuffer3(self.OES_Elas1_alt,resultName) 00648 #print self.obj 00649 #raise NotImplementedError('add printing to stress CELAS complex...') 00650 else: 00651 self.NotImplementedOrSkip() 00652 elif self.elementType == 34: # cbar 00653 self.dataCode['elementName'] = 'CBAR' 00654 #print "numWideReal=%s numWideImag=%s" % (numWideReal,numWideImag) 00655 if self.numWide==numWideReal: 00656 resultName = self.makeOES_Object(self.barStress,BarStressObject,'barStress', 00657 self.barStrain,BarStrainObject,'barStrain') 00658 self.handleResultsBuffer3(self.OES_CBAR_34,resultName) 00659 elif self.numWide==numWideImag: 00660 resultName = self.makeOES_Object(self.barStress,ComplexBarStressObject,'barStress', 00661 self.barStrain,ComplexBarStrainObject,'barStrain') 00662 self.handleResultsBuffer3(self.OES_CBAR_34_alt,resultName) 00663 else: 00664 self.NotImplementedOrSkip() 00665 00666 elif self.elementType==33: # cquad4_33 00667 if self.numWide==numWideReal: 00668 self.dataCode['elementName'] = 'CQUAD4' 00669 resultName = self.makeOES_Object(self.plateStress,PlateStressObject,'plateStress', 00670 self.plateStrain,PlateStrainObject,'plateStrain') 00671 self.handleResultsBuffer3(self.OES_CQUAD4_33,resultName) 00672 elif self.numWide==numWideImag: 00673 resultName = self.makeOES_Object(self.plateStress,ComplexPlateStressObject,'plateStress', 00674 self.plateStrain,ComplexPlateStrainObject,'plateStrain') 00675 self.handleResultsBuffer3(self.OES_CQUAD4_33_alt,resultName) 00676 else: 00677 self.NotImplementedOrSkip() 00678 00679 elif self.elementType==53: # ctriax6 00680 self.dataCode['elementName'] = 'CTRIAX6' 00681 #print self.codeInformation() 00682 if self.numWide==numWideReal: 00683 resultName = self.makeOES_Object(self.ctriaxStress,TriaxStressObject,'ctriaxStress', 00684 self.ctriaxStrain,TriaxStrainObject,'ctriaxStrain') 00685 self.handleResultsBuffer3(self.OES_CTRIAX6_53,resultName) 00686 #elif self.numWide==numWideImag: 00687 # resultName = self.makeOES_Object(self.ctriaxStress,ComplexTriaxStressObject,'ctriaxStress', 00688 # self.ctriaxStrain,ComplexTriaxStrainObject,'ctriaxStrain') 00689 # self.handleResultsBuffer3(self.OES_CTRIAX6_53_alt,resultName) 00690 else: 00691 self.NotImplementedOrSkip() 00692 00693 elif self.elementType==74: # ctria 00694 self.dataCode['elementName'] = 'CTRIA3' 00695 if self.numWide==numWideReal: 00696 resultName = self.makeOES_Object(self.plateStress,PlateStressObject,'plateStress', 00697 self.plateStrain,PlateStrainObject,'plateStrain') 00698 self.handleResultsBuffer3(self.OES_CTRIA3_74,resultName) 00699 elif self.numWide==numWideImag: 00700 resultName = self.makeOES_Object(self.plateStress,ComplexPlateStressObject,'plateStress', 00701 self.plateStrain,ComplexPlateStrainObject,'plateStrain') 00702 self.handleResultsBuffer3(self.OES_CTRIA3_74_alt,resultName) 00703 else: 00704 self.NotImplementedOrSkip() 00705 elif self.elementType in [64,144,70,75,82]: # 64-cquad8/cquad4/70-ctriar/ctria6/cquadr 00706 #print " found cquad_144" 00707 if self.elementType == 64: 00708 self.dataCode['elementName'] = 'CQUAD8' 00709 elif self.elementType == 144: 00710 self.dataCode['elementName'] = 'CQUAD4' 00711 elif self.elementType == 70: 00712 self.dataCode['elementName'] = 'CTRIAR' 00713 elif self.elementType == 75: 00714 self.dataCode['elementName'] = 'CTRIA6' 00715 elif self.elementType == 82: 00716 self.dataCode['elementName'] = 'CQUADR' 00717 else: 00718 msg = 'card not implemented elementType=%s' % (self.elementType) 00719 raise NotImplementedError(msg) 00720 if self.numWide==numWideReal: 00721 resultName = self.makeOES_Object(self.plateStress,PlateStressObject,'plateStress', 00722 self.plateStrain,PlateStrainObject,'plateStrain') 00723 self.handleResultsBuffer3(self.OES_CQUAD4_144,resultName) 00724 elif self.numWide==numWideImag: 00725 resultName = self.makeOES_Object(self.plateStress,ComplexPlateStressObject,'plateStress', 00726 self.plateStrain,ComplexPlateStrainObject,'plateStrain') 00727 self.handleResultsBuffer3(self.OES_CQUAD4_144_alt,resultName) 00728 else: 00729 self.NotImplementedOrSkip() 00730 00731 elif self.elementType in [39,67,68]: # ctetra/chexa/cpenta (linear) 00732 if self.numWide==numWideReal: 00733 resultName = self.makeOES_Object(self.solidStress,SolidStressObject,'solidStress', 00734 self.solidStrain,SolidStrainObject,'solidStrain') 00735 self.handleResultsBuffer3(self.OES_CSOLID_67,resultName) 00736 #elif self.numWide==numWideImag: 00737 # resultName = self.makeOES_Object(self.solidStress,ComplexSolidStressObject,'solidStress', 00738 # self.solidStrain,ComplexSolidStrainObject,'solidStrain') 00739 # self.handleResultsBuffer3(self.OES_CSOLID_67_alt,resultName) 00740 else: 00741 self.NotImplementedOrSkip() 00742 00743 elif self.elementType in [85]: # ctetra/chexa/cpenta (91,93) (nonlinear) 00744 if self.numWide==numWideReal: 00745 resultName = self.makeOES_Object(self.solidStress,SolidStressObject,'solidStress', 00746 self.solidStrain,SolidStrainObject,'solidStrain') 00747 self.handleResultsBuffer3(self.OES_CSOLID_85,resultName) 00748 #elif self.numWide==numWideImag: 00749 # resultName = self.makeOES_Object(self.solidStress,ComplexSolidStressObject,'solidStress', 00750 # self.solidStrain,ComplexSolidStrainObject,'solidStrain') 00751 # self.handleResultsBuffer3(self.OES_CSOLID_85_alt,resultName) 00752 else: 00753 self.NotImplementedOrSkip() 00754 00755 elif self.elementType in [87,89,92]: # CTUBENL, RODNL, CONRODNL 00756 #print " found RODNL_89" 00757 resultName = self.makeOES_Object(self.nonlinearRodStress,NonlinearRodObject,'nonlinearRodStress', 00758 self.nonlinearRodStrain,NonlinearRodObject,'nonlinearRodStrain') 00759 self.handleResultsBuffer3(self.OES_RODNL_89_92,resultName) 00760 00761 elif self.elementType in [88,90]: # CTRIA3NL, CQUAD4NL 00762 #print "cquad4_90" 00763 if self.numWide==numWideReal: 00764 resultName = self.makeOES_Object(self.nonlinearPlateStress,NonlinearQuadObject,'nonlinearPlateStress', 00765 self.nonlinearPlateStrain,NonlinearQuadObject,'nonlinearPlateStrain') 00766 self.handleResultsBuffer3(self.OES_CQUAD4NL_90,resultName) 00767 elif self.numWide==numWideImag: ## @todo switch to ComplexNonlinearPlateObject 00768 resultName = self.makeOES_Object(self.nonlinearPlateStress,NonlinearQuadObject,'nonlinearPlateStress', 00769 self.nonlinearPlateStrain,NonlinearQuadObject,'nonlinearPlateStrain') 00770 self.handleResultsBuffer3(self.OES_CQUAD4NL_90_alt,resultName) 00771 else: 00772 self.NotImplementedOrSkip() 00773 00774 #elif self.elementType in [91]: # CPENTANL 00775 # #print "hexa_93" 00776 # self.handleResultsBuffer3(self.OES_CPENTANL_91) 00777 #elif self.elementType in [93]: # CHEXANL 00778 # #print "hexa_93" 00779 # self.handleResultsBuffer3(self.OES_CHEXANL_93) 00780 00781 elif self.elementType in [95,96,97,98]: # CQUAD4, CQUAD8, CTRIA3, CTRIA6 (composite) 00782 #print " found a 95/96/97 or 98!" 00783 self.eid2 = None # stores the previous elementID 00784 if self.numWide==numWideReal: 00785 resultName = self.makeOES_Object(self.compositePlateStress,CompositePlateStressObject,'compositePlateStress', 00786 self.compositePlateStrain,CompositePlateStrainObject,'compositePlateStrain') 00787 self.handleResultsBuffer3(self.OES_CQUAD4_95,resultName) 00788 #elif self.numWide==numWideImag: 00789 # resultName = self.makeOES_Object(self.compositePlateStress,ComplexCompositePlateStressObject,'compositePlateStress', 00790 # self.compositePlateStrain,ComplexCompositePlateStrainObject,'compositePlateStrain') 00791 # self.handleResultsBuffer3(self.OES_CQUAD4_95_alt,resultName) 00792 else: 00793 self.NotImplementedOrSkip() 00794 del self.eid2 00795 00796 #elif self.elementType in [94]: # CBEAM (nonlinear) 00797 #print " found a 94!" 00798 #self.eid2 = None # stores the previous elementID 00799 #self.makeOES_Object(self.beamStress,beamStressObject, 00800 # self.beamStrain,beamStrainObject) 00801 #self.handleResultsBuffer3(self.OES_CBEAM_94) 00802 #raise NotImplementedError('stoping at end of CBEAM_94') 00803 #del self.eid2 00804 00805 elif self.elementType in [139]: # QUAD4FD (hyperelastic) 00806 #print " found QUAD4FD_139" 00807 if self.numWide==numWideReal: 00808 resultName = self.makeOES_Object(self.hyperelasticPlateStress,HyperelasticQuadObject,'hyperelasticPlateStress', 00809 self.hyperelasticPlateStrain,HyperelasticQuadObject,'hyperelasticPlateStrain') 00810 self.handleResultsBuffer3(self.OES_QUAD4FD_139,resultName) 00811 #elif self.numWide==numWideImag: 00812 # resultName = self.makeOES_Object(self.hyperelasticPlateStress,ComplexHyperelasticQuadObject,'hyperelasticPlateStress', 00813 # self.hyperelasticPlateStrain,ComplexHyperelasticQuadObject,'hyperelasticPlateStrain') 00814 # self.handleResultsBuffer3(self.OES_QUAD4FD_139,resultName) 00815 else: 00816 self.NotImplementedOrSkip() 00817 00818 #elif self.elementType in [2,53,61,70,86,88,90,94,102,189,232,]: 00819 #elementType=53 -> TRIAX6 is not supported 00820 #elementType=61 -> DUM9 is not supported 00821 #elementType=70 -> TRIAR is not supported 00822 #elementType=86 -> GAPNL is not supported 00823 #elementType=88 -> TRIA3NL is not supported 00824 #elementType=90 -> QUAD4NL is not supported 00825 #elementType=94 -> BEAMNL is not supported 00826 #elementType=102 -> BUSH is not supported 00827 #elementType=189 -> VUQUAD is not supported 00828 #elementType=232 -> QUADRLC is not supported 00829 #elif self.elementType in [100]: # BARS 00830 # self.makeOES_Object(self.barStress,barStressObject, 00831 # self.barStrain,barStrainObject) 00832 # self.handleResultsBuffer3(self.OES_basicElement) 00833 #elif self.elementType in [75,89,90,92,93]: 00834 # msg = '%s-OES format1_sort0 elementType=%-3s -> %s is not supported - fname=%s\n' % (self.tableName,self.elementType,self.ElementType(self.elementType),self.op2FileName) 00835 # raise AddNewElementError(msg) 00836 else: 00837 msg = '%s-OES format%s elementType=%-3s -> %s is not supported - fname=%s\n' % (self.tableName,self.formatCode,self.elementType,self.ElementType(self.elementType),self.op2FileName.strip()) 00838 self.log.debug(msg) 00839 self.skippedCardsFile.write(msg) 00840 self.NotImplementedOrSkip() 00841 ### 00842 #elif self.elementType == 1: # crod (done) 00843 #elif self.elementType == 2: # cbeam (done) 00844 #elif self.elementType == 3: # ctube (done) 00845 #elif self.elementType == 4: # cshear (done) 00846 #elif self.elementType == 10: # conrod (done) 00847 00848 #elif self.elementType == 33: # cquad4_33 (done) 00849 #elif self.elementType == 34: # cbar (done) 00850 #elif self.elementType == 35: # cconeax 00851 #elif self.elementType == 38: # cgap 00852 #elif self.elementType == 39: # ctetra (done) 00853 #elif self.elementType == 40: # cbush1d 00854 00855 #elif self.elementType == 47: # caxif2 00856 #elif self.elementType == 48: # caxif3 00857 #elif self.elementType == 49: # caxif4 00858 #elif self.elementType == 50: # cslot3 00859 #elif self.elementType == 51: # cslot4 00860 #elif self.elementType == 53: # ctriax6 00861 #elif self.elementType == 55: # cdum3 00862 #elif self.elementType == 56: # cdum4 00863 #elif self.elementType == 57: # cdum5 00864 #elif self.elementType == 58: # cdum6 00865 #elif self.elementType == 59: # cdum7 00866 #elif self.elementType == 60: # cdum8/crac2d 00867 #elif self.elementType == 64: # cquad8 (done) 00868 #elif self.elementType == 67: # chexa (done) 00869 #elif self.elementType == 68: # cpenta (done) 00870 #elif self.elementType == 69: # cbend 00871 #elif self.elementType == 70: # ctriar 00872 #elif self.elementType == 74: # ctria3 (done) 00873 #elif self.elementType == 75: # ctria6 (done) 00874 #elif self.elementType == 82: # cquadr (done) 00875 #elif self.elementType == 95: # composite CQUAD4 (done) 00876 #elif self.elementType == 96: # composite CQUAD8 (done) 00877 #elif self.elementType == 97: # composite CTRIA3 (done) 00878 #elif self.elementType == 98: # composite CTRIA6 (done) 00879 #elif self.elementType == 100: # cbar w/ cbarao or pload1 00880 00881 #elif self.elementType == 102: # cbush 00882 #elif self.elementType == 144: # cquad_144 - corner stresses (done) 00883 00884 00885 # rods/bars/beams 00886 #elif self.elementType == 1: # crod (done) 00887 #elif self.elementType == 2: # cbeam (done) 00888 #elif self.elementType == 3: # ctube (done) 00889 #elif self.elementType == 10: # conrod (done) 00890 #elif self.elementType == 34: # cbar (done) 00891 00892 #springs 00893 #elif self.elementType == 11: # celas1 (done) 00894 #elif self.elementType == 12: # celas2 (done) 00895 #elif self.elementType == 13: # celas3 (done) 00896 00897 #plate 00898 #elif self.elementType == 33: # cquad_33 (done) 00899 #elif self.elementType == 74: # ctria3_74 - (done) 00900 #elif self.elementType == 75: # ctria6_75 - (in progress) 00901 #elif self.elementType == 64: # cquad8_64 - corner stresses (done) 00902 #elif self.elementType == 144: # cquad4_144 - corner stresses (done) 00903 00904 #solid (???) 00905 #elif self.elementType == 39: # ctetra (done) 00906 #elif self.elementType == 67: # chexa (done) 00907 #elif self.elementType == 68: # cpenta (done) 00908 00909 # composite plate 00910 #elif self.elementType == 95: # CQUAD4 (done) 00911 #elif self.elementType == 96: # CQUAD8 (done) 00912 #elif self.elementType == 97: # CTRIA3 (done) 00913 #elif self.elementType == 98: # CTRIA6 (done) 00914 00915 # nonlinear 00916 #elif self.elementType == 85: # tetra (nonlinear,not integrated) 00917 #elif self.elementType == 86: # gap (nonlinear) 00918 #elif self.elementType == 87: # ctube (nonlinear, done) 00919 #elif self.elementType == 88: # tria3 (nonlinear) - same as quad4 00920 #elif self.elementType == 89: # crod (nonlinear, done) 00921 #elif self.elementType == 90: # quad4 (nonlinear, done) 00922 #elif self.elementType == 91: # cpenta (nonlinear) 00923 #elif self.elementType == 92: # conrod (nonlinear, done) 00924 #elif self.elementType == 93: # chexa (nonlinear,not integrated) 00925 #elif self.elementType == 94: # cbeam (nonlinear) 00926 00927 # acoustic 00928 #elif self.elementType == 76: # chexa (acoustic) 00929 #elif self.elementType == 77: # cpenta (acoustic) 00930 #elif self.elementType == 78: # ctetra (acoustic) 00931 #elif self.elementType == 101: # caabsf (acoustic) 00932 00933 def makeOES_Object(self, stress, stressObject, stressName, 00934 strain, strainObject, strainName): 00935 """ 00936 Creates a stress/strain object if necessary 00937 """ 00938 if self.isStress(): 00939 self.createTransientObject(stress,stressObject) 00940 return stressName 00941 else: 00942 self.createTransientObject(strain,strainObject) 00943 return strainName 00944 ### 00945 #print "loading",self.obj.__class__.__name__ 00946 #return self.obj