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))
示例#2
0
    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))