pyNastran  0.5.0
pyNastran BDF Reader/Writer, OP2 Parser, and GUI
oef_complexForceObjects.py
Go to the documentation of this file.
00001 ## GNU Lesser General Public License
00002 ## 
00003 ## Program pyNastran - a python interface to NASTRAN files
00004 ## Copyright (C) 2011-2012  Steven Doyle, Al Danial
00005 ## 
00006 ## Authors and copyright holders of pyNastran
00007 ## Steven Doyle <mesheb82@gmail.com>
00008 ## Al Danial    <al.danial@gmail.com>
00009 ## 
00010 ## This file is part of pyNastran.
00011 ## 
00012 ## pyNastran is free software: you can redistribute it and/or modify
00013 ## it under the terms of the GNU Lesser General Public License as published by
00014 ## the Free Software Foundation, either version 3 of the License, or
00015 ## (at your option) any later version.
00016 ## 
00017 ## pyNastran is distributed in the hope that it will be useful,
00018 ## but WITHOUT ANY WARRANTY; without even the implied warranty of
00019 ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00020 ## GNU General Public License for more details.
00021 ## 
00022 ## You should have received a copy of the GNU Lesser General Public License
00023 ## along with pyNastran.  If not, see <http://www.gnu.org/licenses/>.
00024 ## 
00025 
00026 from __future__ import division, print_function
00027 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)
 All Classes Namespaces Files Functions Variables