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 from pyNastran.op2.resultObjects.op2_Objects import scalarObject 00028 00029 class ComplexRodForce(scalarObject): # 1-ROD, 3-TUBE, 10-CONROD 00030 def __init__(self,dataCode,isSort1,iSubcase,dt): 00031 scalarObject.__init__(self,dataCode,iSubcase) 00032 #self.eType = {} 00033 self.axialForce = {} 00034 self.torque = {} 00035 00036 self.dt = dt 00037 if isSort1: 00038 if dt is not None: 00039 self.add = self.addSort1 00040 ### 00041 else: 00042 assert dt is not None 00043 self.add = self.addSort2 00044 ### 00045 00046 def addNewTransient(self,dt): 00047 self.dt = dt 00048 self.axialForce[dt] = {} 00049 self.torque[dt] = {} 00050 00051 def add(self,dt,data): 00052 [eid,axialForce,torque] = data 00053 00054 #self.eType[eid] = eType 00055 self.axialForce[eid] = axialForce 00056 self.torque[eid] = torque 00057 00058 def addSort1(self,dt,data): 00059 [eid,axialForce,torque] = data 00060 if dt not in self.axialForce: 00061 self.addNewTransient(dt) 00062 00063 #self.eType[eid] = eType 00064 self.axialForce[dt][eid] = axialForce 00065 self.torque[dt][eid] = torque 00066 00067 def addSort2(self,eid,data): 00068 [dt,axialForce,torque] = data 00069 if dt not in self.axialForce: 00070 self.addNewTransient(dt) 00071 00072 #self.eType[eid] = eType 00073 self.axialForce[dt][eid] = axialForce 00074 self.torque[dt][eid] = torque 00075 00076 def __repr__(self): 00077 return str(self.axialForce) 00078 00079 class ComplexCBeamForce(scalarObject): # 2-CBEAM 00080 def __init__(self,dataCode,isSort1,iSubcase,dt): 00081 scalarObject.__init__(self,dataCode,iSubcase) 00082 #self.eType = {} 00083 self.bendingMoment = {} 00084 self.shear = {} 00085 self.axial = {} 00086 self.totalTorque = {} 00087 self.warpingTorque = {} 00088 00089 self.dt = dt 00090 if isSort1: 00091 if dt is not None: 00092 self.addNewElement = self.addNewElementSort1 00093 self.add = self.addSort1 00094 ### 00095 else: 00096 assert dt is not None 00097 self.addNewElement = self.addNewElementSort2 00098 self.add = self.addSort2 00099 ### 00100 00101 def addNewTransient(self,dt): 00102 self.dt = dt 00103 self.bendingMoment[dt] = {} 00104 self.shear[dt] = {} 00105 self.axial[dt] = {} 00106 self.totalTorque[dt] = {} 00107 self.warpingTorque[dt] = {} 00108 00109 def addNewElement(self,dt,data): 00110 [eid,nid,sd,bm1,bm2,ts1,ts2,af,ttrq,wtrq] = data 00111 #print "CBEAM addnew",data 00112 #self.eType[eid] = eType 00113 self.bendingMoment[eid] = {sd:[bm1,bm2]} 00114 self.shear[eid] = {sd:[ts1,ts2]} 00115 self.axial[eid] = {sd:af} 00116 self.totalTorque[eid] = {sd:ttrq} 00117 self.warpingTorque[eid] = {sd:wtrq} 00118 00119 def add(self,dt,data): 00120 [eid,nid,sd,bm1,bm2,ts1,ts2,af,ttrq,wtrq] = data 00121 #print "CBEAM add ",data 00122 00123 #self.eType[eid] = eType 00124 self.bendingMoment[eid][sd] = [bm1,bm2] 00125 self.shear[eid][sd] = [ts1,ts2] 00126 self.axial[eid][sd] = af 00127 self.totalTorque[eid][sd] = ttrq 00128 self.warpingTorque[eid][sd] = wtrq 00129 00130 def addNewElementSort1(self,dt,data): 00131 [eid,nid,sd,bm1,bm2,ts1,ts2,af,ttrq,wtrq] = data 00132 00133 self._fillNewObject(dt,eid,nid,sd,bm1,bm2,ts1,ts2,af,ttrq,wtrq) 00134 00135 def addSort1(self,dt,data): 00136 [eid,nid,sd,bm1,bm2,ts1,ts2,af,ttrq,wtrq] = data 00137 self._fillObject(dt,eid,nid,sd,bm1,bm2,ts1,ts2,af,ttrq,wtrq) 00138 00139 def addNewElementSort2(self,eid,data): 00140 [dt,nid,sd,bm1,bm2,ts1,ts2,af,ttrq,wtrq] = data 00141 self._fillNewObject(dt,eid,nid,sd,bm1,bm2,ts1,ts2,af,ttrq,wtrq) 00142 00143 def addSort2(self,eid,data): 00144 [dt,nid,sd,bm1,bm2,ts1,ts2,af,ttrq,wtrq] = data 00145 self._fillObject(dt,eid,nid,sd,bm1,bm2,ts1,ts2,af,ttrq,wtrq) 00146 00147 def _fillObject(self,dt,eid,nid,sd,bm1,bm2,ts1,ts2,af,ttrq,wtrq): 00148 #if dt not in self.axial: 00149 #self.addNewTransient(dt) 00150 00151 #self.eType[eid] = eType 00152 self.bendingMoment[dt][eid][sd] = [bm1,bm2] 00153 self.shear[dt][eid][sd] = [ts1,ts2] 00154 self.axial[dt][eid][sd] = af 00155 self.totalTorque[dt][eid][sd] = ttrq 00156 self.warpingTorque[dt][eid][sd] = wtrq 00157 00158 def _fillNewObject(self,dt,eid,nid,sd,bm1,bm2,ts1,ts2,af,ttrq,wtrq): 00159 if dt not in self.axial: 00160 self.addNewTransient(dt) 00161 #self.eType[eid] = eType 00162 self.bendingMoment[dt][eid] = {sd:[bm1,bm2]} 00163 self.shear[dt][eid] = {sd:[ts1,ts2]} 00164 self.axial[dt][eid] = {sd:af} 00165 self.totalTorque[dt][eid] = {sd:ttrq} 00166 self.warpingTorque[dt][eid] = {sd:wtrq} 00167 00168 def __repr__(self): 00169 return str(self.axial) 00170 00171 class ComplexCShearForce(scalarObject): # 4-CSHEAR 00172 def __init__(self,dataCode,isSort1,iSubcase,dt): 00173 scalarObject.__init__(self,dataCode,iSubcase) 00174 #self.eType = {} 00175 self.force41 = {} 00176 self.force14 = {} 00177 self.force21 = {} 00178 self.force12 = {} 00179 self.force32 = {} 00180 self.force23 = {} 00181 self.force43 = {} 00182 self.force34 = {} 00183 self.kickForce1 = {} 00184 self.kickForce2 = {} 00185 self.kickForce3 = {} 00186 self.kickForce4 = {} 00187 self.shear12 = {} 00188 self.shear23 = {} 00189 self.shear34 = {} 00190 self.shear41 = {} 00191 00192 self.dt = dt 00193 if isSort1: 00194 if dt is not None: 00195 self.add = self.addSort1 00196 ### 00197 else: 00198 assert dt is not None 00199 self.add = self.addSort2 00200 ### 00201 00202 def addNewTransient(self,dt): 00203 self.force41[dt] = {} 00204 self.force14[dt] = {} 00205 self.force21[dt] = {} 00206 self.force12[dt] = {} 00207 self.force32[dt] = {} 00208 self.force23[dt] = {} 00209 self.force43[dt] = {} 00210 self.force34[dt] = {} 00211 self.kickForce1[dt] = {} 00212 self.kickForce2[dt] = {} 00213 self.kickForce3[dt] = {} 00214 self.kickForce4[dt] = {} 00215 self.shear12[dt] = {} 00216 self.shear23[dt] = {} 00217 self.shear34[dt] = {} 00218 self.shear41[dt] = {} 00219 00220 def add(self,dt,data): 00221 [eid,f41,f21,f12,f32,f23,f43,f34,f14, 00222 kf1,s12,kf2,s23,kf3,s34,kf4,s41] = data 00223 #self.eType[eid] = eType 00224 self.force41[eid] = f41 00225 self.force14[eid] = f14 00226 self.force21[eid] = f21 00227 self.force12[eid] = f12 00228 self.force32[eid] = f32 00229 self.force23[eid] = f23 00230 self.force43[eid] = f43 00231 self.force34[eid] = f34 00232 self.kickForce1[eid] = kf1 00233 self.kickForce2[eid] = kf2 00234 self.kickForce3[eid] = kf3 00235 self.kickForce4[eid] = kf4 00236 self.shear12[eid] = s12 00237 self.shear23[eid] = s23 00238 self.shear34[eid] = s34 00239 self.shear41[eid] = s41 00240 00241 def addSort1(self,dt,data): 00242 [eid,f41,f21,f12,f32,f23,f43,f34,f14, 00243 kf1,s12,kf2,s23,kf3,s34,kf4,s41] = data 00244 self._fillObject(dt,eid,f41,f21,f12,f32,f23,f43,f34,f14, 00245 kf1,s12,kf2,s23,kf3,s34,kf4,s41) 00246 00247 def addSort2(self,eid,data): 00248 [dt,f41,f21,f12,f32,f23,f43,f34,f14, 00249 kf1,s12,kf2,s23,kf3,s34,kf4,s41] = data 00250 00251 self._fillObject(dt,eid,f41,f21,f12,f32,f23,f43,f34,f14, 00252 kf1,s12,kf2,s23,kf3,s34,kf4,s41) 00253 00254 def _fillObject(self,dt,eid,f41,f21,f12,f32,f23,f43,f34,f14, 00255 kf1,s12,kf2,s23,kf3,s34,kf4,s41): 00256 if dt not in self.force41: 00257 self.addNewTransient(dt) 00258 #self.eType[eid] = eType 00259 self.force41[dt][eid] = f41 00260 self.force14[dt][eid] = f14 00261 self.force21[dt][eid] = f21 00262 self.force12[dt][eid] = f12 00263 self.force32[dt][eid] = f32 00264 self.force23[dt][eid] = f23 00265 self.force43[dt][eid] = f43 00266 self.force34[dt][eid] = f34 00267 self.kickForce1[dt][eid] = kf1 00268 self.kickForce2[dt][eid] = kf2 00269 self.kickForce3[dt][eid] = kf3 00270 self.kickForce4[dt][eid] = kf4 00271 self.shear12[dt][eid] = s12 00272 self.shear23[dt][eid] = s23 00273 self.shear34[dt][eid] = s34 00274 self.shear41[dt][eid] = s41 00275 00276 def __repr__(self): 00277 return str(self.force41) 00278 00279 class ComplexSpringForce(scalarObject): # 11-CELAS1,12-CELAS2,13-CELAS3, 14-CELAS4 00280 def __init__(self,dataCode,isSort1,iSubcase,dt): 00281 scalarObject.__init__(self,dataCode,iSubcase) 00282 #self.eType = {} 00283 self.force = {} 00284 00285 self.dt = dt 00286 if isSort1: 00287 if dt is not None: 00288 self.add = self.addSort1 00289 ### 00290 else: 00291 assert dt is not None 00292 self.add = self.addSort2 00293 ### 00294 00295 def addNewTransient(self,dt): 00296 self.dt = dt 00297 self.force[dt] = {} 00298 00299 def add(self,dt,data): 00300 [eid,force] = data 00301 00302 #self.eType[eid] = eType 00303 self.force[eid] = force 00304 00305 def addSort1(self,dt,data): 00306 [eid,force] = data 00307 if dt not in self.force: 00308 self.addNewTransient(dt) 00309 00310 #self.eType[eid] = eType 00311 self.force[dt][eid] = force 00312 00313 def addSort2(self,eid,data): 00314 [dt,force] = data 00315 if dt not in self.force: 00316 self.addNewTransient(dt) 00317 00318 #self.eType[eid] = eType 00319 self.force[dt][eid] = force 00320 00321 def writeF06(self,header,pageStamp,pageNum=1,f=None,isMagPhase=False): 00322 if self.nonlinearFactor is not None: 00323 return self.writeF06Transient(header,pageStamp,pageNum,f,isMagPhase) 00324 msg = header+[' C O M P L E X F O R C E S I N S C A L A R S P R I N G S ( C E L A S 4 )\n', 00325 ' (REAL/IMAGINARY)\n', 00326 ' \n', 00327 ' FREQUENCY FORCE FREQUENCY FORCE\n'] 00328 #packs = [] 00329 forces = [] 00330 elements = [] 00331 line = ' ' 00332 for eid,force in sorted(self.force.items()): 00333 elements.append(eid) 00334 forces.append(force) 00335 #pack.append(eid) 00336 #pack.append(f) 00337 line += '%13s %13s / %13s ' %(eid,force.real,force.imag) 00338 if len(forces)==3: 00339 msg.append(line.rstrip()+'\n') 00340 ### 00341 ### 00342 if forces: 00343 msg.append(line.rstrip()+'\n') 00344 ### 00345 msg.append(pageStamp+str(pageNum)+'\n') 00346 00347 if f is not None: 00348 f.write(''.join(msg)) 00349 msg = [''] 00350 return (''.join(msg),pageNum) 00351 00352 def writeF06Transient(self,header,pageStamp,pageNum=1,f=None,isMagPhase=False): 00353 words=[' C O M P L E X F O R C E S I N S C A L A R S P R I N G S ( C E L A S 4 )\n', 00354 ' (REAL/IMAGINARY)\n', 00355 ' \n', 00356 ' ELEMENT ELEMENT\n', 00357 ' ID. FORCE ID. FORCE\n'] 00358 msg = [] 00359 for dt,Force in sorted(self.force.items()): 00360 header[1] = ' %s = %10.4E\n' %(self.dataCode['name'],dt) 00361 msg += header+words 00362 #packs = [] 00363 forces = [] 00364 elements = [] 00365 line = '' 00366 for eid,force in sorted(Force.items()): 00367 elements.append(eid) 00368 forces.append(force) 00369 #pack.append(eid) 00370 #pack.append(f) 00371 ([forceReal,forceImag],isAllZeros) = self.writeFloats13E([force.real,force.imag]) 00372 00373 line += ' %13s %13s / %13s' %(eid,forceReal,forceImag) 00374 if len(forces)==2: 00375 msg.append(line.rstrip()+'\n') 00376 line = '' 00377 forces = [] 00378 ### 00379 ### 00380 if forces: 00381 msg.append(line.rstrip()+'\n') 00382 ### 00383 msg.append(pageStamp+str(pageNum)+'\n') 00384 00385 if f is not None: 00386 f.write(''.join(msg)) 00387 msg = [''] 00388 pageNum+=1 00389 return (''.join(msg),pageNum-1) 00390 00391 def __repr__(self): 00392 return str(self.force) 00393 00394 class ComplexDamperForce(scalarObject): # 20-CDAMP1,21-CDAMP2,22-CDAMP3,23-CDAMP4 00395 def __init__(self,dataCode,isSort1,iSubcase,dt): 00396 scalarObject.__init__(self,dataCode,iSubcase) 00397 #self.eType = {} 00398 self.force = {} 00399 00400 self.dt = dt 00401 if isSort1: 00402 if dt is not None: 00403 self.add = self.addSort1 00404 ### 00405 else: 00406 assert dt is not None 00407 self.add = self.addSort2 00408 ### 00409 00410 def addNewTransient(self,dt): 00411 self.dt = dt 00412 self.force[dt] = {} 00413 00414 def add(self,dt,data): 00415 [eid,force] = data 00416 00417 #self.eType[eid] = eType 00418 self.force[eid] = force 00419 00420 def addSort1(self,dt,data): 00421 [eid,force] = data 00422 if dt not in self.force: 00423 self.addNewTransient(dt) 00424 00425 #self.eType[eid] = eType 00426 self.force[dt][eid] = force 00427 00428 def addSort2(self,eid,data): 00429 [dt,force] = data 00430 if dt not in self.force: 00431 self.addNewTransient(dt) 00432 00433 #self.eType[eid] = eType 00434 self.force[dt][eid] = force 00435 00436 def __repr__(self): 00437 return str(self.force) 00438 00439 class ComplexViscForce(scalarObject): # 24-CVISC 00440 def __init__(self,dataCode,isSort1,iSubcase,dt): 00441 scalarObject.__init__(self,dataCode,iSubcase) 00442 #self.eType = {} 00443 self.axialForce = {} 00444 self.torque = {} 00445 00446 self.dt = dt 00447 if isSort1: 00448 if dt is not None: 00449 self.add = self.addSort1 00450 ### 00451 else: 00452 assert dt is not None 00453 self.add = self.addSort2 00454 ### 00455 00456 def addNewTransient(self,dt): 00457 self.dt = dt 00458 self.axialForce[dt] = {} 00459 self.torque[dt] = {} 00460 00461 def add(self,dt,data): 00462 [eid,axialForce,torque] = data 00463 00464 #self.eType[eid] = eType 00465 self.axialForce[eid] = axialForce 00466 self.torque[eid] = torque 00467 00468 def addSort1(self,dt,data): 00469 [eid,axialForce,torque] = data 00470 if dt not in self.axialForce: 00471 self.addNewTransient(dt) 00472 00473 #self.eType[eid] = eType 00474 self.axialForce[dt][eid] = axialForce 00475 self.torque[dt][eid] = torque 00476 00477 def addSort2(self,eid,data): 00478 [dt,axialForce,torque] = data 00479 if dt not in self.axialForce: 00480 self.addNewTransient(dt) 00481 00482 #self.eType[eid] = eType 00483 self.axialForce[dt][eid] = axialForce 00484 self.torque[dt][eid] = torque 00485 00486 def __repr__(self): 00487 return str(self.axialForce) 00488 00489 class ComplexPlateForce(scalarObject): # 33-CQUAD4, 74-CTRIA3 00490 def __init__(self,dataCode,isSort1,iSubcase,dt): 00491 scalarObject.__init__(self,dataCode,iSubcase) 00492 #self.eType = {} 00493 self.mx = {} 00494 self.my = {} 00495 self.mxy = {} 00496 self.bmx = {} 00497 self.bmy = {} 00498 self.bmxy = {} 00499 self.tx = {} 00500 self.ty = {} 00501 00502 self.dt = dt 00503 if isSort1: 00504 if dt is not None: 00505 self.add = self.addSort1 00506 ### 00507 else: 00508 assert dt is not None 00509 self.add = self.addSort2 00510 ### 00511 00512 def addNewTransient(self,dt): 00513 self.dt = dt 00514 self.mx[dt] = {} 00515 self.my[dt] = {} 00516 self.mxy[dt] = {} 00517 self.bmx[dt] = {} 00518 self.bmy[dt] = {} 00519 self.bmxy[dt] = {} 00520 self.tx[dt] = {} 00521 self.ty[dt] = {} 00522 00523 def add(self,dt,data): 00524 [eid,mx,my,mxy,bmx,bmy,bmxy,tx,ty] = data 00525 00526 #self.eType[eid] = eType 00527 self.mx[eid] = mx 00528 self.my[eid] = my 00529 self.mxy[eid] = mxy 00530 self.bmx[eid] = bmx 00531 self.bmy[eid] = bmy 00532 self.bmxy[eid] = bmxy 00533 self.tx[eid] = tx 00534 self.ty[eid] = ty 00535 00536 def addSort1(self,dt,data): 00537 [eid,mx,my,mxy,bmx,bmy,bmxy,tx,ty] = data 00538 if dt not in self.mx: 00539 self.addNewTransient(dt) 00540 00541 #self.eType[eid] = eType 00542 self.mx[dt][eid] = mx 00543 self.my[dt][eid] = my 00544 self.mxy[dt][eid] = mxy 00545 self.bmx[dt][eid] = bmx 00546 self.bmy[dt][eid] = bmy 00547 self.bmxy[dt][eid] = bmxy 00548 self.tx[dt][eid] = tx 00549 self.ty[dt][eid] = ty 00550 00551 def addSort2(self,eid,data): 00552 [dt,mx,my,mxy,bmx,bmy,bmxy,tx,ty] = data 00553 if dt not in self.mx: 00554 self.addNewTransient(dt) 00555 00556 #self.eType[eid] = eType 00557 self.mx[dt][eid] = mx 00558 self.my[dt][eid] = my 00559 self.mxy[dt][eid] = mxy 00560 self.bmx[dt][eid] = bmx 00561 self.bmy[dt][eid] = bmy 00562 self.bmxy[dt][eid] = bmxy 00563 self.tx[dt][eid] = tx 00564 self.ty[dt][eid] = ty 00565 00566 def __repr__(self): 00567 return str(self.mx) 00568 00569 class ComplexPLATE2Force(scalarObject): # 64-CQUAD8, 75-CTRIA6, 82-CQUADR 00570 def __init__(self,dataCode,isSort1,iSubcase,dt): 00571 scalarObject.__init__(self,dataCode,iSubcase) 00572 #self.eType = {} 00573 self.term = {} 00574 self.ngrids = {} 00575 self.mx = {} 00576 self.my = {} 00577 self.mxy = {} 00578 self.bmx = {} 00579 self.bmy = {} 00580 self.bmxy = {} 00581 self.tx = {} 00582 self.ty = {} 00583 00584 self.dt = dt 00585 if isSort1: 00586 if dt is not None: 00587 self.addNewElement = self.addNewElementSort1 00588 self.add = self.addSort1 00589 ### 00590 else: 00591 assert dt is not None 00592 self.addNewElement = self.addNewElementSort2 00593 self.add = self.addSort2 00594 ### 00595 00596 def addNewTransient(self,dt): 00597 self.dt = dt 00598 self.mx[dt] = {} 00599 self.my[dt] = {} 00600 self.mxy[dt] = {} 00601 self.bmx[dt] = {} 00602 self.bmy[dt] = {} 00603 self.bmxy[dt] = {} 00604 self.tx[dt] = {} 00605 self.ty[dt] = {} 00606 00607 def addNewElement(self,eid,dt,data): 00608 #print "eid = ",eid 00609 [term,nid,mx,my,mxy,bmx,bmy,bmxy,tx,ty] = data 00610 00611 #self.eType[eid] = eType 00612 self.term[eid] = term 00613 self.ngrids[eid] = nid 00614 00615 self.mx[eid] = [mx] 00616 self.my[eid] = [my] 00617 self.mxy[eid] = [mxy] 00618 self.bmx[eid] = [bmx] 00619 self.bmy[eid] = [bmy] 00620 self.bmxy[eid] = [bmxy] 00621 self.tx[eid] = [tx] 00622 self.ty[eid] = [ty] 00623 00624 def add(self,eid,dt,data): 00625 [nid,mx,my,mxy,bmx,bmy,bmxy,tx,ty] = data 00626 00627 #self.eType[eid] = eType 00628 #print "mx = ",self.mx,mx 00629 self.mx[eid].append(mx) 00630 self.my[eid].append(my) 00631 self.mxy[eid].append(mxy) 00632 self.bmx[eid].append(bmx) 00633 self.bmy[eid].append(bmy) 00634 self.bmxy[eid].append(bmxy) 00635 self.tx[eid].append(tx) 00636 self.ty[eid].append(ty) 00637 00638 def addNewElementSort1(self,eid,dt,data): 00639 [term,nid,mx,my,mxy,bmx,bmy,bmxy,tx,ty] = data 00640 if dt not in self.mx: 00641 self.addNewTransient(dt) 00642 00643 #self.eType[eid] = eType 00644 self.term[eid] = term 00645 self.ngrids[eid] = nid 00646 self.mx[dt][eid] = [mx] 00647 self.my[dt][eid] = [my] 00648 self.mxy[dt][eid] = [mxy] 00649 self.bmx[dt][eid] = [bmx] 00650 self.bmy[dt][eid] = [bmy] 00651 self.bmxy[dt][eid] = [bmxy] 00652 self.tx[dt][eid] = [tx] 00653 self.ty[dt][eid] = [ty] 00654 00655 def addSort1(self,eid,dt,data): 00656 [nid,mx,my,mxy,bmx,bmy,bmxy,tx,ty] = data 00657 if dt not in self.mx: 00658 self.addNewTransient(dt) 00659 00660 #self.eType[eid] = eType 00661 self.mx[dt][eid].append(mx) 00662 self.my[dt][eid].append(my) 00663 self.mxy[dt][eid].append(mxy) 00664 self.bmx[dt][eid].append(bmx) 00665 self.bmy[dt][eid].append(bmy) 00666 self.bmxy[dt][eid].append(bmxy) 00667 self.tx[dt][eid].append(tx) 00668 self.ty[dt][eid].append(ty) 00669 00670 def addNewElementSort2(self,dt,eid,data): 00671 [term,nid,mx,my,mxy,bmx,bmy,bmxy,tx,ty] = data 00672 if dt not in self.mx: 00673 self.addNewTransient(dt) 00674 00675 #self.eType[eid] = eType 00676 self.term[eid] = term 00677 self.ngrids[eid] = nid 00678 00679 self.mx[dt][eid] = [mx] 00680 self.my[dt][eid] = [my] 00681 self.mxy[dt][eid] = [mxy] 00682 self.bmx[dt][eid] = [bmx] 00683 self.bmy[dt][eid] = [bmy] 00684 self.bmxy[dt][eid] = [bmxy] 00685 self.tx[dt][eid] = [tx] 00686 self.ty[dt][eid] = [ty] 00687 00688 def addSort2(self,dt,eid,data): 00689 [nid,mx,my,mxy,bmx,bmy,bmxy,tx,ty] = data 00690 if dt not in self.mx: 00691 self.addNewTransient(dt) 00692 00693 #self.eType[eid] = eType 00694 self.mx[dt][eid].append(mx) 00695 self.my[dt][eid].append(my) 00696 self.mxy[dt][eid].append(mxy) 00697 self.bmx[dt][eid].append(bmx) 00698 self.bmy[dt][eid].append(bmy) 00699 self.bmxy[dt][eid].append(bmxy) 00700 self.tx[dt][eid].append(tx) 00701 self.ty[dt][eid].append(ty) 00702 00703 def writeF06(self,header,pageStamp,pageNum=1,f=None,isMagPhase=False): 00704 if self.nonlinearFactor is not None: 00705 return self.writeF06Transient(header,pageStamp,pageNum,f) 00706 return 'ComplexPlate writeF06 not implemented...\n' 00707 #raise NotImplementedError() 00708 #words = [' A C C E L E R A T I O N V E C T O R\n', 00709 # ' \n', 00710 # ' POINT ID. TYPE T1 T2 T3 R1 R2 R3\n'] 00711 #words += self.getTableMarker() 00712 #return self._writeF06Block(words,header,pageStamp,pageNum,f) 00713 00714 def writeF06Transient(self,header,pageStamp,pageNum=1,f=None,isMagPhase=False): 00715 return 'ComplexPlate writeF06Transient not implemented...\n' 00716 #raise NotImplementedError() 00717 00718 def __repr__(self): 00719 return str(self.mx) 00720 00721 class ComplexCBARForce(scalarObject): # 34-CBAR 00722 def __init__(self,dataCode,isSort1,iSubcase,dt): 00723 scalarObject.__init__(self,dataCode,iSubcase) 00724 #self.eType = {} 00725 self.bendingMomentA = {} 00726 self.bendingMomentB = {} 00727 self.shear = {} 00728 self.axial = {} 00729 self.torque = {} 00730 00731 self.dt = dt 00732 if isSort1: 00733 if dt is not None: 00734 self.add = self.addSort1 00735 ### 00736 else: 00737 assert dt is not None 00738 self.add = self.addSort2 00739 ### 00740 00741 def addNewTransient(self,dt): 00742 self.dt = dt 00743 self.bendingMomentA[dt] = {} 00744 self.bendingMomentB[dt] = {} 00745 self.shear[dt] = {} 00746 self.axial[dt] = {} 00747 self.torque[dt] = {} 00748 00749 def add(self,dt,data): 00750 [eid,bm1a,bm2a,bm1b,bm2b,ts1,ts2,af,trq] = data 00751 00752 #self.eType[eid] = eType 00753 self.bendingMomentA[eid] = [bm1a,bm2a] 00754 self.bendingMomentB[eid] = [bm1b,bm2b] 00755 self.shear[eid] = [ts1,ts2] 00756 self.axial[eid] = af 00757 self.torque[eid] = trq 00758 00759 def addSort1(self,dt,data): 00760 [eid,bm1a,bm2a,bm1b,bm2b,ts1,ts2,af,trq] = data 00761 if dt not in self.axial: 00762 self.addNewTransient(dt) 00763 00764 #self.eType[eid] = eType 00765 self.bendingMomentA[dt][eid] = [bm1a,bm2a] 00766 self.bendingMomentB[dt][eid] = [bm1b,bm2b] 00767 self.shear[dt][eid] = [ts1,ts2] 00768 self.axial[dt][eid] = af 00769 self.torque[dt][eid] = trq 00770 00771 def addSort2(self,eid,data): 00772 [dt,bm1a,bm2a,bm1b,bm2b,ts1,ts2,af,trq] = data 00773 if dt not in self.axial: 00774 self.addNewTransient(dt) 00775 00776 #self.eType[eid] = eType 00777 self.bendingMomentA[dt][eid] = [bm1a,bm2a] 00778 self.bendingMomentB[dt][eid] = [bm1b,bm2b] 00779 self.shear[dt][eid] = [ts1,ts2] 00780 self.axial[dt][eid] = af 00781 self.torque[dt][eid] = trq 00782 00783 def writeF06Transient(self,header,pageStamp,pageNum=1,f=None,isMagPhase=False): 00784 00785 words = [' C O M P L E X F O R C E S I N B A R E L E M E N T S ( C B A R )\n', 00786 ' (REAL/IMAGINARY)\n', 00787 '0 ELEMENT BEND-MOMENT END-A BEND-MOMENT END-B - SHEAR - AXIAL\n', 00788 ' ID. PLANE 1 PLANE 2 PLANE 1 PLANE 2 PLANE 1 PLANE 2 FORCE TORQUE\n'] 00789 00790 msg = [] 00791 for dt,bendA in sorted(self.bendingMomentA.iteritems()): 00792 header[1] = ' %s = %10.4E\n' %(self.dataCode['name'],dt) 00793 msg += header+words 00794 for eid in sorted(bendA): 00795 bm1a,bm2a = self.bendingMomentA[dt][eid] 00796 bm1b,bm2b = self.bendingMomentB[dt][eid] 00797 ts1,ts2 = self.shear[dt][eid] 00798 af = self.axial[dt][eid] 00799 trq = self.torque[dt][eid] 00800 (vals2,isAllZeros) = self.writeImagFloats13E([bm1a,bm2a,bm1b,bm2b,ts1,ts2,af,trq],isMagPhase) 00801 [bm1ar,bm2ar,bm1br,bm2br,ts1r,ts2r,afr,trqr, 00802 bm1ai,bm2ai,bm1bi,bm2bi,ts1i,ts2i,afi,trqi] = vals2 00803 msg.append(' %8i %13s %13s %13s %13s %13s %13s %13s %-s\n' %(eid,bm1ar,bm2ar,bm1br,bm2br,ts1r,ts2r,afr,trqr)) 00804 msg.append(' %8s %13s %13s %13s %13s %13s %13s %13s %-s\n' %('', bm1ai,bm2ai,bm1bi,bm2bi,ts1i,ts2i,afi,trqi)) 00805 ### 00806 msg.append(pageStamp+str(pageNum)+'\n') 00807 if f is not None: 00808 f.write(''.join(msg)) 00809 msg = [''] 00810 pageNum += 1 00811 ### 00812 return (''.join(msg),pageNum-1) 00813 00814 def writeF06(self,header,pageStamp,pageNum=1,f=None,isMagPhase=False): 00815 if self.nonlinearFactor is not None: 00816 return self.writeF06Transient(header,pageStamp,pageNum,f,isMagPhase) 00817 msg = header+[' C O M P L E X F O R C E S I N B A R E L E M E N T S ( C B A R )\n', 00818 ' (REAL/IMAGINARY)\n', 00819 '0 ELEMENT BEND-MOMENT END-A BEND-MOMENT END-B - SHEAR - AXIAL\n', 00820 ' ID. PLANE 1 PLANE 2 PLANE 1 PLANE 2 PLANE 1 PLANE 2 FORCE TORQUE\n'] 00821 00822 for eid in sorted(self.bendingMomentA): 00823 bm1a,bm2a = self.bendingMomentA[eid] 00824 bm1b,bm2b = self.bendingMomentB[eid] 00825 ts1,ts2 = self.shear[eid] 00826 af = self.axial[eid] 00827 trq = self.torque[eid] 00828 (vals2,isAllZeros) = self.writeImagFloats13E([bm1a,bm2a,bm1b,bm2b,ts1,ts2,af,trq],isMagPhase) 00829 [bm1ar,bm2ar,bm1br,bm2br,ts1r,ts2r,afr,trqr, 00830 bm1ai,bm2ai,bm1bi,bm2bi,ts1i,ts2i,afi,trqi] = vals2 00831 msg.append(' %8i %13s %13s %13s %13s %13s %13s %13s %-s\n' %(eid,bm1ar,bm2ar,bm1br,bm2br,ts1r,ts2r,afr,trqr)) 00832 msg.append(' %8s %13s %13s %13s %13s %13s %13s %13s %-s\n' %('', bm1ai,bm2ai,bm1bi,bm2bi,ts1i,ts2i,afi,trqi)) 00833 ### 00834 msg.append(pageStamp+str(pageNum)+'\n') 00835 if f is not None: 00836 f.write(''.join(msg)) 00837 msg = [''] 00838 return (''.join(msg),pageNum) 00839 00840 def __repr__(self): 00841 return str(self.axial) 00842 00843 class ComplexBendForce(scalarObject): # 69-CBEND 00844 def __init__(self,dataCode,isSort1,iSubcase,dt): 00845 scalarObject.__init__(self,dataCode,iSubcase) 00846 #self.eType = {} 00847 self.nodeIDs = {} 00848 self.bendingMoment1 = {} 00849 self.bendingMoment2 = {} 00850 self.shearPlane1 = {} 00851 self.shearPlane2 = {} 00852 self.axial = {} 00853 self.torque = {} 00854 00855 self.dt = dt 00856 if isSort1: 00857 if dt is not None: 00858 self.add = self.addSort1 00859 ### 00860 else: 00861 assert dt is not None 00862 self.add = self.addSort2 00863 ### 00864 00865 def addNewTransient(self,dt): 00866 self.dt = dt 00867 self.bendingMoment1[dt] = {} 00868 self.bendingMoment2[dt] = {} 00869 self.shearPlane1[dt] = {} 00870 self.shearPlane2[dt] = {} 00871 self.axial[dt] = {} 00872 self.torque[dt] = {} 00873 00874 def add(self,dt,data): 00875 [eid,nidA,bm1A,bm2A,sp1A,sp2A,axialA,torqueA, 00876 nidB,bm1B,bm2B,sp1B,sp2B,axialB,torqueB] = data 00877 00878 #self.eType[eid] = eType 00879 self.nodeIDs[eid] = [nidA,nidB] 00880 self.bendingMoment1[eid] = [bm1A,bm1B] 00881 self.bendingMoment2[eid] = [bm2A,bm2B] 00882 self.shearPlane1[eid] = [sp1A,sp1B] 00883 self.shearPlane2[eid] = [sp2A,sp2B] 00884 self.axial[eid] = [axialA,axialB] 00885 self.torque[eid] = [torqueA,torqueB] 00886 00887 def addSort1(self,dt,data): 00888 [eid,nidA,bm1A,bm2A,sp1A,sp2A,axialA,torqueA, 00889 nidB,bm1B,bm2B,sp1B,sp2B,axialB,torqueB] = data 00890 self._fillObject(dt,eid,nidA,bm1A,bm2A,sp1A,sp2A,axialA,torqueA, 00891 nidB,bm1B,bm2B,sp1B,sp2B,axialB,torqueB) 00892 00893 def addSort2(self,eid,data): 00894 [dt,nidA,bm1A,bm2A,sp1A,sp2A,axialA,torqueA, 00895 nidB,bm1B,bm2B,sp1B,sp2B,axialB,torqueB] = data 00896 self._fillObject(dt,eid,nidA,bm1A,bm2A,sp1A,sp2A,axialA,torqueA, 00897 nidB,bm1B,bm2B,sp1B,sp2B,axialB,torqueB) 00898 00899 def _fillObject(self,dt,eid,nidA,bm1A,bm2A,sp1A,sp2A,axialA,torqueA, 00900 nidB,bm1B,bm2B,sp1B,sp2B,axialB,torqueB): 00901 if dt not in self.axial: 00902 self.addNewTransient(dt) 00903 00904 #self.eType[eid] = eType 00905 self.nodeIDs[eid] = [nidA,nidB] 00906 self.bendingMoment1[dt][eid] = [bm1A,bm1B] 00907 self.bendingMoment2[dt][eid] = [bm2A,bm2B] 00908 self.shearPlane1[dt][eid] = [sp1A,sp1B] 00909 self.shearPlane2[dt][eid] = [sp2A,sp2B] 00910 self.axial[dt][eid] = [axialA,axialB] 00911 self.torque[dt][eid] = [torqueA,torqueB] 00912 00913 def __repr__(self): 00914 return str(self.axial) 00915 00916 class ComplexPentaPressureForce(scalarObject): # 76-CHEXA_PR,77-PENTA_PR,78-TETRA_PR 00917 def __init__(self,dataCode,isSort1,iSubcase,dt): 00918 scalarObject.__init__(self,dataCode,iSubcase) 00919 #self.eType = {} 00920 self.acceleration = {} 00921 self.velocity = {} 00922 self.pressure = {} 00923 00924 self.dt = dt 00925 if isSort1: 00926 if dt is not None: 00927 self.add = self.addSort1 00928 ### 00929 else: 00930 assert dt is not None 00931 self.add = self.addSort2 00932 ### 00933 00934 def addNewTransient(self,dt): 00935 self.dt = dt 00936 self.acceleration[dt] = {} 00937 self.velocity[dt] = {} 00938 self.pressure[dt] = {} 00939 00940 def add(self,dt,data): 00941 [eid,eName,ax,ay,az,vx,vy,vz,pressure] = data 00942 00943 #self.eType[eid] = eType 00944 self.acceleration[eid] = [ax,ay,az] 00945 self.velocity[eid] = [vx,vy,vz] 00946 self.pressure[eid] = pressure 00947 00948 def addSort1(self,dt,data): 00949 [eid,eName,ax,ay,az,vx,vy,vz,pressure] = data 00950 if dt not in self.acceleration: 00951 self.addNewTransient(dt) 00952 00953 #self.eType[eid] = eType 00954 self.acceleration[dt][eid] = [ax,ay,az] 00955 self.velocity[dt][eid] = [vx,vy,vz] 00956 self.pressure[dt][eid] = pressure 00957 00958 def addSort2(self,eid,data): 00959 [dt,eName,ax,ay,az,vx,vy,vz,pressure] = data 00960 if dt not in self.acceleration: 00961 self.addNewTransient(dt) 00962 00963 #self.eType[eid] = eType 00964 self.acceleration[dt][eid] = [ax,ay,az] 00965 self.velocity[dt][eid] = [vx,vy,vz] 00966 self.pressure[dt][eid] = pressure 00967 00968 00969 def __repr__(self): 00970 return str(self.acceleration) 00971 00972 class ComplexCBUSHForce(scalarObject): # 102-CBUSH 00973 def __init__(self,dataCode,isSort1,iSubcase,dt): 00974 scalarObject.__init__(self,dataCode,iSubcase) 00975 #self.eType = {} 00976 self.force = {} 00977 self.moment = {} 00978 00979 self.dt = dt 00980 if isSort1: 00981 if dt is not None: 00982 self.add = self.addSort1 00983 ### 00984 else: 00985 assert dt is not None 00986 self.add = self.addSort2 00987 ### 00988 00989 def addNewTransient(self,dt): 00990 self.dt = dt 00991 self.force[dt] = {} 00992 self.moment[dt] = {} 00993 00994 def add(self,dt,data): 00995 [eid,fx,fy,fz,mx,my,mz] = data 00996 00997 #self.eType[eid] = eType 00998 self.force[eid] = [fx,fy,fz] 00999 self.moment[eid] = [mx,my,mz] 01000 01001 def addSort1(self,dt,data): 01002 [eid,fx,fy,fz,mx,my,mz] = data 01003 if dt not in self.force: 01004 self.addNewTransient(dt) 01005 01006 #self.eType[eid] = eType 01007 self.force[dt][eid] = [fx,fy,fz] 01008 self.moment[dt][eid] = [mx,my,mz] 01009 01010 def addSort2(self,eid,data): 01011 [dt,fx,fy,fz,mx,my,mz] = data 01012 if dt not in self.force: 01013 self.addNewTransient(dt) 01014 01015 #self.eType[eid] = eType 01016 self.force[dt][eid] = [fx,fy,fz] 01017 self.moment[dt][eid] = [mx,my,mz] 01018 01019 def __repr__(self): 01020 return str(self.force) 01021 01022 class ComplexForce_VU(scalarObject): # 191-VUBEAM 01023 def __init__(self,dataCode,isSort1,iSubcase,dt): 01024 scalarObject.__init__(self,dataCode,iSubcase) 01025 #self.eType = {} 01026 self.parent = {} 01027 self.coord = {} 01028 self.icord = {} 01029 01030 self.forceX = {} 01031 self.shearY = {} 01032 self.shearZ = {} 01033 self.torsion = {} 01034 self.bendingY = {} 01035 self.bendingZ = {} 01036 01037 ## @todo if dt=None, handle SORT1 case 01038 self.dt = dt 01039 if isSort1: 01040 if dt is not None: 01041 self.add = self.addSort1 01042 ### 01043 else: 01044 assert dt is not None 01045 self.add = self.addSort2 01046 ### 01047 01048 def addNewTransient(self,dt): 01049 self.dt = dt 01050 self.forceX[dt] = {} 01051 self.shearY[dt] = {} 01052 self.shearZ[dt] = {} 01053 self.torsion[dt] = {} 01054 self.bendingY[dt] = {} 01055 self.bendingZ[dt] = {} 01056 01057 def add(self,nNodes,dt,data): 01058 [eid,parent,coord,icord,forces] = data 01059 self.parent[eid] = parent 01060 self.coord[eid] = coord 01061 self.icord[eid] = icord 01062 #self.eType[eid] = eType 01063 01064 self.forceX[eid] = {} 01065 self.shearY[eid] = {} 01066 self.shearZ[eid] = {} 01067 self.torsion[eid] = {} 01068 self.bendingY[eid] = {} 01069 self.bendingZ[eid] = {} 01070 01071 for force in forces: 01072 [nid,posit,forceX,shearY,shearZ,torsion,bendingY,bendingZ] = force 01073 self.forceX[eid][nid] = forceX 01074 self.shearY[eid][nid] = shearY 01075 self.shearZ[eid][nid] = shearZ 01076 self.torsion[eid][nid] = torsion 01077 self.bendingY[eid][nid] = bendingY 01078 self.bendingZ[eid][nid] = bendingZ 01079 01080 def addSort1(self,nNodes,dt,data): 01081 [eid,parent,coord,icord,forces] = data 01082 if dt not in self.forceX: 01083 self.addNewTransient(dt) 01084 self.parent[eid] = parent 01085 self.coord[eid] = coord 01086 self.icord[eid] = icord 01087 #self.eType[eid] = eType 01088 01089 self.forceX[dt][eid] = {} 01090 self.shearY[dt][eid] = {} 01091 self.shearZ[dt][eid] = {} 01092 self.torsion[dt][eid] = {} 01093 self.bendingY[dt][eid] = {} 01094 self.bendingZ[dt][eid] = {} 01095 01096 for force in forces: 01097 [nid,posit,forceX,shearY,shearZ,torsion,bendingY,bendingZ] = force 01098 self.forceX[dt][eid][nid] = forceX 01099 self.shearY[dt][eid][nid] = shearY 01100 self.shearZ[dt][eid][nid] = shearZ 01101 self.torsion[dt][eid][nid] = torsion 01102 self.bendingY[dt][eid][nid] = bendingY 01103 self.bendingZ[dt][eid][nid] = bendingZ 01104 01105 def addSort2(self,nNodes,eid,data): 01106 [dt,parent,coord,icord,forces] = data 01107 if dt not in self.forceX: 01108 self.addNewTransient(dt) 01109 self.parent[eid] = parent 01110 self.coord[eid] = coord 01111 self.icord[eid] = icord 01112 #self.eType[eid] = eType 01113 01114 self.forceX[dt][eid] = {} 01115 self.shearY[dt][eid] = {} 01116 self.shearZ[dt][eid] = {} 01117 self.torsion[dt][eid] = {} 01118 self.bendingY[dt][eid] = {} 01119 self.bendingZ[dt][eid] = {} 01120 for force in forces: 01121 [nid,posit,forceX,shearY,shearZ,torsion,bendingY,bendingZ] = force 01122 self.forceX[dt][eid][nid] = forceX 01123 self.shearY[dt][eid][nid] = shearY 01124 self.shearZ[dt][eid][nid] = shearZ 01125 self.torsion[dt][eid][nid] = torsion 01126 self.bendingY[dt][eid][nid] = bendingY 01127 self.bendingZ[dt][eid][nid] = bendingZ 01128 01129 def __repr__(self): 01130 return str(self.forceX) 01131 01132 class ComplexForce_VU_2D(scalarObject): # 189-VUQUAD,190-VUTRIA 01133 def __init__(self,dataCode,isSort1,iSubcase,dt): 01134 scalarObject.__init__(self,dataCode,iSubcase) 01135 #self.eType = {} 01136 self.parent = {} 01137 self.coord = {} 01138 self.icord = {} 01139 self.theta = {} 01140 01141 self.membraneX = {} 01142 self.membraneY = {} 01143 self.membraneXY = {} 01144 self.bendingX = {} 01145 self.bendingY = {} 01146 self.bendingXY = {} 01147 self.shearYZ = {} 01148 self.shearXZ = {} 01149 01150 ## @todo if dt=None, handle SORT1 case 01151 self.dt = dt 01152 if isSort1: 01153 if dt is not None: 01154 self.add = self.addSort1 01155 ### 01156 else: 01157 assert dt is not None 01158 self.add = self.addSort2 01159 ### 01160 01161 def addNewTransient(self,dt): 01162 self.membraneX[dt] = {} 01163 self.membraneY[dt] = {} 01164 self.membraneXY[dt] = {} 01165 self.bendingX[dt] = {} 01166 self.bendingY[dt] = {} 01167 self.bendingXY[dt] = {} 01168 self.shearYZ[dt] = {} 01169 self.shearXZ[dt] = {} 01170 01171 def add(self,nNodes,dt,data): 01172 [eid,parent,coord,icord,theta,forces] = data 01173 self.parent[eid] = parent 01174 self.coord[eid] = coord 01175 self.icord[eid] = icord 01176 self.theta[eid] = theta 01177 #self.eType[eid] = eType 01178 01179 self.membraneX[eid] = {} 01180 self.membraneY[eid] = {} 01181 self.membraneXY[eid] = {} 01182 self.bendingX[eid] = {} 01183 self.bendingY[eid] = {} 01184 self.bendingXY[eid] = {} 01185 self.shearYZ[eid] = {} 01186 self.shearXZ[eid] = {} 01187 01188 for force in forces: 01189 [nid,membraneX,membraneY,membraneXY,bendingX,bendingY,bendingXY,shearYZ,shearXZ] = force 01190 self.membraneX[eid][nid] = membraneX 01191 self.membraneY[eid][nid] = membraneY 01192 self.membraneXY[eid][nid] = membraneXY 01193 self.bendingX[eid][nid] = bendingX 01194 self.bendingY[eid][nid] = bendingY 01195 self.bendingXY[eid][nid] = bendingXY 01196 self.shearYZ[eid][nid] = shearYZ 01197 self.shearXZ[eid][nid] = shearXZ 01198 01199 def addSort1(self,nNodes,dt,data): 01200 [eid,parent,coord,icord,theta,forces] = data 01201 self._fillObject(dt,eid,parent,coord,icord,theta,forces) 01202 01203 def addSort2(self,nNodes,eid,data): 01204 [dt,parent,coord,icord,theta,forces] = data 01205 self._fillObject(dt,eid,parent,coord,icord,theta,forces) 01206 01207 def _fillObject(self,dt,eid,parent,coord,icord,theta,forces): 01208 if dt not in self.membraneX: 01209 self.addNewTransient(dt) 01210 self.parent[eid] = parent 01211 self.coord[eid] = coord 01212 self.icord[eid] = icord 01213 self.theta[eid] = theta 01214 #self.eType[eid] = eType 01215 01216 self.membraneX[dt][eid] = {} 01217 self.membraneY[dt][eid] = {} 01218 self.membraneXY[dt][eid] = {} 01219 self.bendingX[dt][eid] = {} 01220 self.bendingY[dt][eid] = {} 01221 self.bendingXY[dt][eid] = {} 01222 self.shearYZ[dt][eid] = {} 01223 self.shearXZ[dt][eid] = {} 01224 01225 for force in forces: 01226 [nid,membraneX,membraneY,membraneXY,bendingX,bendingY,bendingXY,shearYZ,shearXZ] = force 01227 self.membraneX[dt][eid][nid] = membraneX 01228 self.membraneY[dt][eid][nid] = membraneY 01229 self.membraneXY[dt][eid][nid] = membraneXY 01230 self.bendingX[dt][eid][nid] = bendingX 01231 self.bendingY[dt][eid][nid] = bendingY 01232 self.bendingXY[dt][eid][nid] = bendingXY 01233 self.shearYZ[dt][eid][nid] = shearYZ 01234 self.shearXZ[dt][eid][nid] = shearXZ 01235 01236 def __repr__(self): 01237 return str(self.membraneX)