def _write_table_3(self, op2_file, fascii, new_result, itable=-3, itime=0): import inspect frame = inspect.currentframe() call_frame = inspect.getouterframes(frame, 2) fascii.write('%s.write_table_3: %s\n' % (self.__class__.__name__, call_frame[1][3])) if new_result and itable != -3: header = [ 4, 146, 4, ] else: header = [ 4, itable, 4, 4, 1, 4, 4, 0, 4, 4, 146, 4, ] op2_file.write(pack(b'%ii' % len(header), *header)) fascii.write('table_3_header = %s\n' % header) #op2_file.write(pack('12i', *[4, itable, 4, #4, 1, 4, #4, 0, 4, #4, 146, 4, #])) approach_code = self.approach_code table_code = self.table_code isubcase = self.isubcase random_code = self.random_code format_code = 1 num_wide = self.num_wide acoustic_flag = self.acoustic_flag if hasattr(self, 'acoustic_flag') else 0 thermal = self.thermal title = b'%-128s' % self.title.encode('ascii') subtitle = b'%-128s' % self.subtitle.encode( 'ascii') # missing superelement_adaptivity_index label = b'%-128s' % self.label.encode('ascii') oCode = 0 ftable3 = b'i' * 50 + b'128s 128s 128s' field6 = 0 field7 = 0 if isinstance(acoustic_flag, float_types): ftable3 = set_table3_field(ftable3, 12, b'f') # field 11 #print(self.get_stats()) if self.analysis_code == 1: #if hasattr(self, 'lsdvmns'): field5 = self.lsdvmns[itime] #else: #field5 = self.dts[itime] #assert isinstance(field5, float_types), type(field5) #ftable3 = set_table3_field(ftable3, 5, b'f') # field 5 elif self.analysis_code == 2: field5 = self.modes[itime] field6 = self.eigns[itime] field7 = self.mode_cycles[itime] assert isinstance( field6, float_types), f'field6={field6} type={type(field6)}' assert isinstance( field7, float_types ), f'field5={field5} field6={field6} field7={field7} type={type(field7)}' ftable3 = set_table3_field(ftable3, 6, b'f') # field 6 ftable3 = set_table3_field(ftable3, 7, b'f') # field 7 elif self.analysis_code == 5: field5 = self.freqs[itime] assert isinstance( field5, float_types), f'field5={field5} type={type(field5)}' ftable3 = set_table3_field(ftable3, 5, b'f') # field 5 elif self.analysis_code == 6: if hasattr(self, 'dts'): field5 = self.dts[itime] #assert isinstance(field5, float), type(field5) else: field5 = self.times[itime] #assert isinstance(field5, float), type(field5) ftable3 = set_table3_field(ftable3, 5, b'f') # field 5 elif self.analysis_code == 7: # pre-buckling field5 = self.lsdvmns[itime] # load set number elif self.analysis_code == 8: # post-buckling field5 = self.lsdvmns[itime] # load set number if hasattr(self, 'eigns'): field6 = self.eigns[itime] elif hasattr(self, 'eigrs'): field6 = self.eigrs[itime] else: # pragma: no cover raise NotImplementedError( 'cant find eigns or eigrs on analysis_code=8') assert isinstance( field6, float_types), f'field6={field6} type={type(field6)}' ftable3 = set_table3_field(ftable3, 6, b'f') # field 6 elif self.analysis_code == 9: # complex eigenvalues field5 = self.modes[itime] if hasattr(self, 'eigns'): field6 = self.eigns[itime] ftable3 = set_table3_field(ftable3, 6, b'f') # field 6 field7 = self.eigis[itime] ftable3 = set_table3_field(ftable3, 7, b'f') # field 7 elif self.analysis_code == 10: # nonlinear statics field5 = self.lftsfqs[itime] ftable3 = set_table3_field(ftable3, 5, b'f') # field 5; load step elif self.analysis_code == 11: # old geometric nonlinear statics field5 = self.lsdvmns[itime] # load set number else: raise NotImplementedError(self.analysis_code) table3 = [ approach_code, table_code, 0, isubcase, field5, field6, field7, random_code, format_code, num_wide, oCode, acoustic_flag, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, thermal, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, title, subtitle, label, ] assert table3[22] == thermal n = 0 from itertools import count for i, val, ftable3i in zip(count(), table3, ftable3.decode('ascii')): assert val is not None, 'i=%s val=%s ftable3i=%s\n%s' % ( i, val, ftable3i, self.get_stats()) if isinstance(val, integer_types): n += 4 assert ftable3i == 'i', 'analysis_code=%s i=%s val=%s type=%s' % ( self.analysis_code, i, val, ftable3i) elif isinstance(val, float_types): n += 4 assert ftable3i == 'f', 'analysis_code=%s i=%s val=%s type=%s' % ( self.analysis_code, i, val, ftable3i) else: n += len(val) assert n == 584, n data = [584] + table3 + [584] fmt = b'i' + ftable3 + b'i' #op2_file.write(pack(fascii, '%s header 3c' % self.table_name, fmt, data)) fascii.write('%s header 3c = %s\n' % (self.table_name, data)) #j = 7 #print(ftable3[:j]) #print(table3[:j]) #pack(ftable3[:j], *table3[:j]) op2_file.write(pack(fmt, *data))
def _write_table_3(self, op2_file, fascii, new_result, itable=-3, itime=0): import inspect frame = inspect.currentframe() call_frame = inspect.getouterframes(frame, 2) fascii.write('%s.write_table_3: %s\n' % (self.__class__.__name__, call_frame[1][3])) if new_result and itable != -3: header = [ 4, 146, 4, ] else: header = [ 4, itable, 4, 4, 1, 4, 4, 0, 4, 4, 146, 4, ] op2_file.write(pack(b'%ii' % len(header), *header)) fascii.write('table_3_header = %s\n' % header) approach_code = self.approach_code table_code = self.table_code isubcase = self.isubcase random_code = self.random_code format_code = 1 num_wide = self.num_wide acoustic_flag = 0 thermal = self.thermal title = b'%-128s' % self.title.encode('ascii') subtitle = b'%-128s' % self.subtitle.encode('ascii') label = b'%-128s' % self.label.encode('ascii') ftable3 = b'i' * 50 + b'128s 128s 128s' oCode = 0 field6 = 0 field7 = 0 if self.analysis_code == 1: field5 = self.lsdvmns[itime] #elif self.analysis_code == 2: #field5 = self.modes[itime] #field6 = self.eigns[itime] #field7 = self.mode_cycles[itime] #assert isinstance(field6, float), type(field6) #assert isinstance(field7, float), type(field7) #ftable3 = set_table3_field(ftable3, 6, b'f') # field 6 #ftable3 = set_table3_field(ftable3, 7, b'f') # field 7 #elif self.analysis_code == 5: #field5 = self.freqs[itime] #ftable3 = set_table3_field(ftable3, 5, b'f') # field 5 elif self.analysis_code == 6: if hasattr(self, 'dts'): field5 = self.dts[itime] else: field5 = self.times[itime] ftable3 = set_table3_field(ftable3, 5, b'f') # field 5 #elif self.analysis_code == 7: # pre-buckling #field5 = self.lsdvmns[itime] # load set number #elif self.analysis_code == 8: # post-buckling #field5 = self.lsdvmns[itime] # load set number #field6 = self.eigns[itime] #ftable3 = set_table3_field(ftable3, 6, b'f') # field 6 #elif self.analysis_code == 9: # complex eigenvalues #field5 = self.modes[itime] #field6 = self.eigns[itime] #field7 = self.eigis[itime] #ftable3 = set_table3_field(ftable3, 6, b'f') # field 6 #ftable3 = set_table3_field(ftable3, 7, b'f') # field 7 elif self.analysis_code == 10: # nonlinear statics field5 = self.lftsfqs[itime] ftable3 = set_table3_field(ftable3, 5, b'f') # field 5; load step #elif self.analysis_code == 11: # old geometric nonlinear statics #field5 = self.lsdvmns[itime] # load set number else: raise NotImplementedError(self.analysis_code) table3 = [ approach_code, table_code, 0, isubcase, field5, field6, field7, random_code, format_code, num_wide, oCode, acoustic_flag, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, thermal, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, title, subtitle, label, ] #self.num_wide = self.add_data_parameter(data, 'num_wide', b'i', 10, False) # 9 #self.thermal = self.add_data_parameter(data, 'thermal', b'i', 23, False) assert table3[22] == thermal n = 0 for v in table3: if isinstance(v, (integer_types, float_types)): n += 4 else: n += len(v) assert n == 584, n data = [584] + table3 + [584] fmt = b'i' + ftable3 + b'i' #print(fmt) #op2_file.write(pack(fascii, '%s header 3c' % self.table_name, fmt, data)) fascii.write('%s header 3c = %s\n' % (self.table_name, data)) op2_file.write(pack(fmt, *data))