def test_strain(self):
     for folder, prefix, subcase in CASES:
         bdf = BDF(debug=False)
         op2 = OP2(debug=False)
         basepath = os.path.join(pkg_path, 'op2', 'test', folder)
         bdf.read_bdf(os.path.join(basepath, prefix + '.bdf'))
         op2.read_op2(os.path.join(basepath, prefix + '.op2'))
         op2_new = data_in_material_coord(bdf, op2)
         for vecname in strain_vectors:
             vector = getattr(op2_new, vecname).get(subcase)
             if vector is None:
                 continue
             name = os.path.join(basepath, '{0}_subcase_{1:02d}.txt'.format(vecname, subcase))
             if not os.path.isfile(name):
                 raise AssertionError('Not found reference result {0}'.format(name))
             ref_result = np.loadtxt(name)
             data = vector.data
             eids = get_eids_from_op2_vector(vector)
             check = eids != 0
             if 'cquad8' in vecname:
                 assert np.allclose(data[:, check][:, 0::10, :], ref_result[0::10], rtol=RTOL, atol=ATOL)
                 assert np.allclose(data[:, check][:, 1::10, :], ref_result[1::10], rtol=RTOL, atol=ATOL)
             else:
                 assert np.allclose(data[:, check], ref_result, rtol=RTOL, atol=ATOL)
         print('OK')
Esempio n. 2
0
 def test_force(self):
     log = get_logger(level='warning')
     for folder, prefix, subcase in CASES:
         bdf = BDF(debug=False, log=log)
         op2 = OP2(debug=False, log=log)
         basepath = os.path.join(pkg_path, 'op2', 'test', 'examples',
                                 folder)
         bdf.read_bdf(os.path.join(basepath, prefix + '.bdf'))
         op2.read_op2(os.path.join(basepath, prefix + '.op2'))
         op2_new = data_in_material_coord(bdf, op2)
         for vecname in force_vectors:
             vector = getattr(op2_new, vecname).get(subcase)
             if vector is None:
                 continue
             name = os.path.join(
                 basepath,
                 '{0}_subcase_{1:02d}.txt'.format(vecname, subcase))
             if not os.path.isfile(name):
                 raise AssertionError(
                     'Not found reference result {0}\n{1}'.format(
                         name, print_bad_path(name)))
             ref_result = np.loadtxt(name)
             data = vector.data
             eids = get_eids_from_op2_vector(vector)
             check = eids != 0
             if 'cquad8' in vecname:
                 assert np.allclose(data[:, check][:, 0::5, :],
                                    ref_result[0::5],
                                    rtol=RTOL,
                                    atol=ATOL)
             else:
                 assert np.allclose(data[:, check],
                                    ref_result,
                                    rtol=RTOL,
                                    atol=ATOL)
Esempio n. 3
0
 def read_op2(self, op2path):
     if not os.path.isfile(op2path):
         print('ERROR - op2 "{0}" does not exist!'.format(op2path))
         return
     op2 = OP2()
     print('Reading op2 file...')
     op2.read_op2(op2path)
     self.op2 = data_in_material_coord(self.bdf, op2, in_place=True)
     print('finished!')
Esempio n. 4
0
 def read_op2(self, op2path):
     if not os.path.isfile(op2path):
         print('ERROR - op2 "{0}" does not exist!'.format(op2path))
         return
     op2 = OP2()
     print('Reading op2 file...')
     op2.read_op2(op2path)
     self.op2 = data_in_material_coord(self.bdf, op2, in_place=True)
     print('finished!')
    def test_strain(self):
        log = get_logger(level='warning')
        is_failed = False
        for folder, prefix, freqs in CASES:
            bdf = BDF(debug=False, log=log)
            basepath = os.path.join(pkg_path, 'op2', 'test', 'examples',
                                    folder)
            bdf.read_bdf(os.path.join(basepath, prefix + '.bdf'))
            op2 = read_op2(
                os.path.join(basepath, prefix + '.op2'),
                debug=False,
                log=log,
                exclude_results=['element_forces', 'stress'],
            )

            try:
                op2_new = data_in_material_coord(bdf, op2)
            except ValueError as error:
                op2.log.error('failed rotating %r' % prefix)
                is_failed = True
                #continue
                raise

            for freq in freqs:
                for vecname in strain_vectors:
                    vector = getattr(op2_new, vecname).get(1)
                    if vector is None:
                        continue
                    if 'center' in prefix:
                        name = os.path.join(
                            basepath,
                            '%s_center_freq_%1.1f.txt' % (vecname, freq))
                    else:
                        name = os.path.join(
                            basepath,
                            '%s_corner_freq_%1.1f.txt' % (vecname, freq))
                    if not os.path.isfile(name):
                        raise AssertionError(
                            'Not found reference result {0}'.format(name))
                    ref_strain = np.loadtxt(name)
                    mag = ref_strain[:, 1::2]
                    phase = ref_strain[:, 2::2]
                    if freq == 1.0:
                        data = vector.data[0]
                    elif freq == 9.5:
                        data = vector.data[17]
                    eids = get_eids_from_op2_vector(vector)
                    check = eids != 0
                    assert np.allclose(np.abs(data[check]), mag, rtol=RTOL)
                    phase[np.isclose(mag, 0)] = 0
                    assert np.allclose(calc_phasedeg(data[check]),
                                       phase,
                                       rtol=RTOL)
        if is_failed:
            raise ValueError('see previous message')
    def test_stress(self):
        log = get_logger(level='warning')
        for folder, prefix, freqs in CASES:
            bdf = BDF(debug=False, log=log)
            basepath = os.path.join(pkg_path, 'op2', 'test', 'examples',
                                    folder)
            bdf.read_bdf(os.path.join(basepath, prefix + '.bdf'))
            op2 = read_op2(
                os.path.join(basepath, prefix + '.op2'),
                debug=False,
                log=log,
                exclude_results=['element_forces', 'strain'],
            )
            op2_new = data_in_material_coord(bdf, op2)

            for freq in freqs:
                for vecname in stress_vectors:
                    vector = getattr(op2_new, vecname).get(1)
                    if vector is None:
                        continue
                    if 'center' in prefix:
                        name = os.path.join(
                            basepath,
                            '%s_center_freq_%1.1f.txt' % (vecname, freq))
                    else:
                        name = os.path.join(
                            basepath,
                            '%s_corner_freq_%1.1f.txt' % (vecname, freq))
                    if not os.path.isfile(name):
                        raise AssertionError(
                            'Not found reference result {0}'.format(name))
                    ref_stress = np.loadtxt(name)
                    mag = ref_stress[:, 1::2]
                    phase = ref_stress[:, 2::2]
                    if freq == 1.0:
                        data = vector.data[0]
                    elif freq == 9.5:
                        data = vector.data[17]
                    eids = get_eids_from_op2_vector(vector)
                    check = eids != 0
                    if 'cquad8' in vecname:
                        assert np.allclose(np.abs(data[check][0::10, :]),
                                           mag[0::10],
                                           rtol=RTOL)
                        assert np.allclose(calc_phasedeg(
                            data[check][1::10, :]),
                                           phase[1::10],
                                           rtol=RTOL)
                    else:
                        assert np.allclose(np.abs(data[check]), mag, rtol=RTOL)
                        assert np.allclose(calc_phasedeg(data[check]),
                                           phase,
                                           rtol=RTOL)
Esempio n. 7
0
    def test_force(self):
        log = get_logger(level='warning')
        for folder, prefix, freqs in CASES:
            bdf = BDF(debug=False, log=log)
            basepath = os.path.join(pkg_path, 'op2', 'test', 'examples',
                                    folder)
            bdf.read_bdf(os.path.join(basepath, prefix + '.bdf'))
            op2 = read_op2(
                os.path.join(basepath, prefix + '.op2'),
                debug=False,
                log=log,
                exclude_results=['stress', 'strain'],
            )
            op2_new = data_in_material_coord(bdf, op2)

            for freq in freqs:
                for vecname in force_vectors:
                    vector = getattr(op2_new, vecname).get(1)
                    if vector is None:
                        continue
                    if 'center' in prefix:
                        name = os.path.join(
                            basepath, f'{vecname}_center_freq_{freq:1.1f}.txt')
                    else:
                        name = os.path.join(
                            basepath, f'{vecname}_corner_freq_{freq:1.1f}.txt')
                    if not os.path.isfile(name):
                        raise AssertionError(
                            f'Not found reference result {name}')
                    ref_force = np.loadtxt(name)
                    mag = ref_force[0::2]
                    phase = ref_force[1::2]
                    if freq == 1.0:
                        data = vector.data[0]
                    elif freq == 9.5:
                        data = vector.data[17]
                    #eids = get_eids_from_op2_vector(vector)
                    #check = eids != 0
                    assert np.allclose(np.abs(data[:, :]), mag, rtol=RTOL)
                    assert np.allclose(calc_phasedeg(data), phase, rtol=RTOL)