Source code for pyNastran.op2.tables.ogs

from six.moves import range
from struct import Struct, unpack
from pyNastran.op2.op2_common import OP2Common

[docs]class OGS(OP2Common): def __init__(self): OP2Common.__init__(self) def _read_ogs1_3(self, data): three = self.parse_approach_code(data) self.words = [ 'aCode', 'tCode', '???', 'isubcase', '???', '???', '???', 'dLoadID' 'format_code', 'num_wide', 'o_code', '???', 'acoustic_flag','???', '???', '???', '???', '???', '???', '???', '???', '???', 'thermal', '???', '???', 'Title', 'subtitle', 'label'] self.parse_approach_code(data) #isubcase = self.get_values(data, 'i', 4) ## surface/volumeID self.ID = self.add_data_parameter(data, 'ID', 'i', 3, False) #: Reference coordinate system ID self.refid = self.add_data_parameter(data, 'refid', 'i', 8, False) ## format code self.format_code = self.add_data_parameter(data, 'format_code', 'i', 9, False) ## number of words per entry in record self.num_wide = self.add_data_parameter(data, 'num_wide', 'i', 10, False) ## Stress/Strain code self.sCode = self.add_data_parameter(data, 'sCode', 'i', 11, False) ## Output Coordinate System self.oCoord = self.add_data_parameter(data, 'oCoord', 'i', 12, False) ## Axis Specification code self.axis = self.add_data_parameter(data, 'axis', 'i', 13, False) #: Normal Specification Code self.normal = self.add_data_parameter(data, 'normal', 'i', 14, False) #print "dLoadID(8)=%s format_code(9)=%s num_wide(10)=%s oCode(11)=%s thermal(23)=%s" %(self.dLoadID,self.format_code,self.num_wide,self.oCode,self.thermal) if not self.is_sort1(): raise NotImplementedError('sort2...') ## assuming tCode=1 if self.analysis_code == 1: # statics ## load set number self.lsdvmn = self.add_data_parameter(data, 'lsdvmn', 'i', 5, False) self.dataNames = self.apply_data_code_value('dataNames', ['lsdvmn']) self.setNullNonlinearFactor() elif self.analysis_code == 2: # normal modes/buckling (real eigenvalues) ## mode number self.mode = self.add_data_parameter(data, 'mode', 'i', 5) ## real eigenvalue self.eign = self.add_data_parameter(data, 'eign', 'f', 6, False) self.dataNames = self.apply_data_code_value('dataNames', ['mode', 'eign']) #elif self.analysis_code == 3: # differential stiffness #elif self.analysis_code == 4: # differential stiffness #elif self.analysis_code == 5: # frequency elif self.analysis_code == 6: # transient ## time step self.time = self.add_data_parameter(data, 'time', 'f', 5) self.dataNames = self.apply_data_code_value('dataNames', ['time']) #elif self.analysis_code == 7: # pre-buckling #elif self.analysis_code == 8: # post-buckling #elif self.analysis_code == 9: # complex eigenvalues elif self.analysis_code == 10: # nonlinear statics ## load step self.lftsfq = self.add_data_parameter(data, 'lftsfq', 'f', 5) self.dataNames = self.apply_data_code_value('dataNames', ['lftsfq']) #elif self.analysis_code == 11: # old geometric nonlinear statics #elif self.analysis_code == 12: # contran ? (may appear as aCode=6) --> straight from DMAP...grrr... else: raise RuntimeError('invalid analysis_code...analysis_code=%s' % self.analysis_code) #print "*isubcase=%s" % (self.isubcase) #print "analysis_code=%s table_code=%s thermal=%s" %(self.analysis_code,self.table_code,self.thermal) #print self.code_information() if self.debug: self.binary_debug.write(' approach_code = %r\n' % self.approach_code) self.binary_debug.write(' tCode = %r\n' % self.tCode) self.binary_debug.write(' isubcase = %r\n' % self.isubcase) self._read_title(data) self._write_debug_bits() def _read_ogs1_4(self, data): if self.read_mode == 1: return len(data) if self.table_code == 26: # OGS1 - grid point stresses - surface assert self.table_name in [b'OGS1'], 'table_name=%s table_code=%s' % (self.table_name, self.table_code) n = self._read_ogs1_table26(data) elif self.table_code == 27: # OGS1 - grid point stresses - volume direct assert self.table_name in [b'OGS1'], 'table_name=%s table_code=%s' % (self.table_name, self.table_code) n = self._read_ogs1_table27(data) elif self.table_code == 28: # OGS1- grid point stresses - principal assert self.table_name in [b'OGS1'],'table_name=%s table_code=%s' % (self.table_name,self.table_code) n = self._read_ogs1_table28(data) #elif self.table_code == 35: # OGS - Grid point stress discontinuities (plane strain) #n = self._not_implemented_or_skip(data, msg) else: raise NotImplementedError(self.table_code) return n def _read_ogs1_table28(self, data): if self.num_wide == 15: pass else: raise NotImplementedError(self.num_wide) return len(data) def _read_ogs1_table26(self, data): resultName = 'gridPointStresses' if self.num_wide == 11: # real/random #self.create_transient_object(self.gridPointStresses, GridPointStressesObject) n = self._readOGS1_table26_numWide11(data) else: msg = 'only num_wide=11 is allowed num_wide=%s' % self.num_wide raise RuntimeError(msg) return n def _readOGS1_table26_numWide11(self, data): # surface stresses #dt = self.nonlinear_factor format1 = b'2i4s8f' s = Struct(format1) n = 0 nelements = len(data) // 44 # 11*4 for i in range(nelements): edata = data[n:n+44] out = s.unpack(edata) (ekey, eid, fiber, nx, ny, txy, angle, major, minor, tmax, ovm) = out nid = (ekey - self.device_code) // 10 #fiber = fiber.decode('utf-8').strip() assert nid > 0, nid #self.obj.add(dt, nid, eid, fiber, nx, ny, txy, # angle, major, minor, tmax, ovm) return n def _read_ogs1_table27(self, data): # OGS1 - grid point stresses - volume direct #is_sort1 = self.is_sort1() if self.num_wide == 9: # real/random resultName = 'gridPointVolumeStresses' #self.create_transient_object(self.gridPointVolumeStresses, GridPointStressesVolumeObject) n = self._readOGS1_table27_numWide9(data) else: msg = 'only num_wide=9 is allowed num_wide=%s' % self.num_wide raise RuntimeError(msg) return n def _readOGS1_table27_numWide9(self, data): # surface stresses format1 = b'2i7f' s = Struct(format1) n = 0 nelements = len(data) // 36 # 9*4 for i in range(nelements): edata = data[n:n+36] out = unpack(format1, edata) (ekey, nx, ny, nz, txy, tyz, txz, pressure, ovm) = out nid = (ekey - self.device_code) // 10 assert nid > 0, nid #check_nid #self.obj.add(dt, nid, nx, ny, nz, txy, tyz, txz, pressure, ovm) return n