Source code for pyNastran.op2.tables.oee_energy.oee_objects

from __future__ import (nested_scopes, generators, division, absolute_import,
                        print_function, unicode_literals)
from math import isnan

from pyNastran.op2.resultObjects.op2_Objects import ScalarObject
from pyNastran.f06.f06_formatting import get_key0


[docs]class RealStrainEnergy(ScalarObject): """ :: E L E M E N T S T R A I N E N E R G I E S ELEMENT-TYPE = QUAD4 * TOTAL ENERGY OF ALL ELEMENTS IN PROBLEM = 9.817708E+08 SUBCASE 1 * TOTAL ENERGY OF ALL ELEMENTS IN SET 1 = 4.192036E+08 ELEMENT-ID STRAIN-ENERGY PERCENT OF TOTAL STRAIN-ENERGY-DENSITY 12 2.291087E+07 2.3336 2.291087E+02 13 1.582968E+07 1.6124 1.055312E+02 14 6.576075E+07 6.6982 3.288037E+02 """ def __init__(self, data_code, is_sort1, isubcase, dt): ScalarObject.__init__(self, data_code, isubcase) self.energy = {} self.percent = {} self.density = {} #print self.data_code #print "num_wide = %s %s" % (self.data_code['num_wide'], type(self.data_code['num_wide'])) self.dt = dt if is_sort1: if dt is not None: self.add = self.add_sort1 else: assert dt is not None self.add = self.addSort2
[docs] def get_stats(self): msg = [] if self.nonlinear_factor is not None: # transient ntimes = len(self.energy) time0 = get_key0(self.energy) nelements = len(self.energy[time0]) msg.append(' type=%s ntimes=%s nelements=%s\n' % (self.__class__.__name__, ntimes, nelements)) else: nelements = len(self.energy) msg.append(' type=%s nelements=%s\n' % (self.__class__.__name__, nelements)) msg.append(' energy, percent, density\n ') msg += self.get_data_code() return msg
[docs] def update_dt(self, data_code, dt): """ this method is called if the object already exits and a new time step is found """ self.data_code = data_code self.apply_data_code() #assert dt >= 0. self.log.debug("updating %s...%s=%s isubcase=%s" % ( self.name, self.name, dt, self.isubcase)) #print "data_code = ", self.data_code if dt is not None: self.dt = dt self.add_new_transient(dt) self.updateNumWide()
[docs] def delete_transient(self, dt): del self.energy[dt] del self.percent[dt] del self.density[dt]
[docs] def get_transients(self): k = self.energy.keys() k.sort() return k
[docs] def add_new_transient(self, dt): """ initializes the transient variables """ self.energy[dt] = {} self.percent[dt] = {} self.density[dt] = {}
[docs] def add(self, dt, out): (eid, energy, percent, density) = out #print "energyGridIDs = %s" % (self.energy.keys()) #assert grid not in self.energy,'grid=%s out=%s' % (grid, out) if isinstance(eid, int) and eid <= 0: raise ValueError("Invalid Grid ID: eid=%s" % eid) self.energy[eid] = energy self.percent[eid] = percent self.density[eid] = density
[docs] def add_sort1(self, dt, out): if dt not in self.energy: self.add_new_transient(dt) (eid, energy, percent, density) = out #print str(self) #assert grid not in self.energy[dt],'grid=%s dt=%s energy=%s percent=%s density=%s' % (grid, dt, energy, percent, density) if eid <= 0: raise ValueError("Invalid Grid ID: eid=%s" % eid) self.energy[dt][eid] = energy self.percent[dt][eid] = percent self.density[dt][eid] = density