Esempio n. 1
0
    def test_write_elements_5(self):
        """tests basic op2 writing"""
        log = get_logger(log=None, level='info', encoding='utf-8')
        folder = os.path.join(MODEL_PATH, 'elements')
        op2_filename = os.path.join(folder, 'time_elements.op2')
        op2_filename_debug = os.path.join(folder, 'time_elements.debug.out')
        op2_filename_out = os.path.join(folder, 'time_elements_out.op2')
        op2_filename_debug_out = os.path.join(folder,
                                              'time_elements_out.debug.out')
        #model = os.path.splitext(op2_filename)[0]

        exclude_results = [
            'force.cshear_force',
            'force.cvisc_force',
            'cshear_stress',
            'grid_point_forces',
            '*strain_energy',
        ]
        op2 = read_op2_geom(op2_filename,
                            debug_file=op2_filename_debug,
                            exclude_results=exclude_results,
                            log=log)

        op2.write_op2(op2_filename_out)  #, is_mag_phase=False)
        op2b = read_op2_geom(op2_filename_out,
                             debug_file=op2_filename_debug_out,
                             log=log)
        op2.assert_op2_equal(op2b,
                             skip_results=[
                                 'params',
                             ],
                             stop_on_failure=True,
                             debug=False)
Esempio n. 2
0
    def test_write_6(self):
        """tests basic op2 writing"""
        log = SimpleLogger(level='warning', encoding='utf-8')
        folder = os.path.join(MODEL_PATH, 'sol_101_elements')
        op2_filename = os.path.join(folder, 'transient_solid_shell_bar.op2')
        op2_filename_debug = os.path.join(
            folder, 'transient_solid_shell_bar.debug.out')
        op2_filename_out = os.path.join(folder,
                                        'transient_solid_shell_bar_out.op2')
        op2_filename_debug_out = os.path.join(
            folder, 'transient_solid_shell_bar_out.debug.out')
        #debug_file = 'solid_bending.debug.out'
        #model = os.path.splitext(op2_filename)[0]
        #debug_file = model + '.debug.out'

        exclude_results = ['grid_point_forces']
        op2 = read_op2_geom(op2_filename,
                            debug_file=op2_filename_debug,
                            log=log,
                            exclude_results=exclude_results)

        op2.write_op2(op2_filename_out)  #, is_mag_phase=False)
        op2b = read_op2_geom(op2_filename_out,
                             debug_file=op2_filename_debug_out,
                             log=log)
        op2.assert_op2_equal(op2b,
                             skip_results=[
                                 'params',
                             ],
                             stop_on_failure=True,
                             debug=False)
        os.remove(op2_filename_debug_out)
Esempio n. 3
0
    def test_write_elements_4(self):
        """tests basic op2 writing"""
        log = SimpleLogger(level='info', encoding='utf-8')
        folder = os.path.join(MODEL_PATH, 'elements')
        op2_filename = os.path.join(folder, 'modes_complex_elements.op2')
        op2_filename_debug = os.path.join(folder,
                                          'modes_complex_elements.debug.out')
        op2_filename_out = os.path.join(folder,
                                        'modes_complex_elements_out.op2')
        op2_filename_debug_out = os.path.join(
            folder, 'modes_complex_elements_out.debug.out')

        exclude_results = [
            'force.ctria6_force',
            'force.ctriar_force',
            'force.cshear_force',
            'force.cvisc_force',
            'cshear_stress',
        ]
        op2 = read_op2_geom(op2_filename,
                            debug_file=op2_filename_debug,
                            exclude_results=exclude_results,
                            log=log)

        op2.write_op2(op2_filename_out)  #, is_mag_phase=False)
        op2b = read_op2_geom(op2_filename_out,
                             debug_file=op2_filename_debug_out,
                             log=log)
        op2.assert_op2_equal(op2b,
                             skip_results=[
                                 'params',
                             ],
                             stop_on_failure=True,
                             debug=False)
        os.remove(op2_filename_debug_out)
Esempio n. 4
0
    def test_write_4(self):
        """tests basic op2 writing"""
        folder = os.path.join(MODEL_PATH, 'sol_101_elements')
        op2_filename = os.path.join(folder, 'static_solid_shell_bar.op2')
        op2_filename_debug = os.path.join(folder,
                                          'static_solid_shell_bar.debug.out')
        op2_filename_out = os.path.join(folder,
                                        'static_solid_shell_bar_out.op2')
        op2_filename_debug_out = os.path.join(
            folder, 'static_solid_shell_bar_out.debug.out')
        #debug_file = 'solid_bending.debug.out'
        model = os.path.splitext(op2_filename)[0]
        #debug_file = model + '.debug.out'

        op2 = read_op2_geom(op2_filename, debug_file=op2_filename_debug)

        op2w = OP2Writer(op2)
        op2w.write_op2(op2_filename_out, obj=op2)  #, is_mag_phase=False)
        op2b = read_op2_geom(op2_filename_out,
                             debug_file=op2_filename_debug_out)
        op2.assert_op2_equal(op2b,
                             skip_results=[
                                 'params',
                             ],
                             stop_on_failure=True,
                             debug=False)
Esempio n. 5
0
    def test_thermal_1(self):
        """tests basic op2 thermal writing"""
        log = get_logger(log=None, level='info', encoding='utf-8')
        folder = os.path.join(MODEL_PATH, 'elements')
        op2_filename = os.path.join(folder, 'time_thermal_elements.op2')
        op2_filename_debug = os.path.join(folder,
                                          'time_thermal_elements.debug.out')
        op2_filename_out = os.path.join(folder,
                                        'time_thermal_elements_out.op2')
        op2_filename_debug_out = os.path.join(
            folder, 'time_thermal_elements.debug.out')
        #debug_file = 'solid_bending.debug.out'
        model = os.path.splitext(op2_filename)[0]
        #debug_file = model + '.debug.out'

        exclude_results = [
            'chbdye_thermal_load',
            'chexa_thermal_load',
        ]
        op2 = read_op2_geom(op2_filename,
                            debug_file=op2_filename_debug,
                            exclude_results=exclude_results,
                            log=log)
        op2w = OP2Writer(op2)
        op2w.write_op2(op2_filename_out, obj=op2)  #, is_mag_phase=False)
        op2b = read_op2_geom(op2_filename_out,
                             debug_file=op2_filename_debug_out,
                             log=log)
        op2.assert_op2_equal(op2b,
                             skip_results=[
                                 'params',
                             ],
                             stop_on_failure=True,
                             debug=False)
Esempio n. 6
0
    def test_write_elements_5(self):
        """tests basic op2 writing"""
        folder = os.path.join(MODEL_PATH, 'elements')
        op2_filename = os.path.join(folder, 'time_elements.op2')
        op2_filename_debug = os.path.join(folder, 'time_elements.debug.out')
        op2_filename_out = os.path.join(folder, 'time_elements_out.op2')
        op2_filename_debug_out = os.path.join(folder,
                                              'time_elements_out.debug.out')
        model = os.path.splitext(op2_filename)[0]

        exclude_results = [
            'cshear_force',
            'cvisc_force',
            'cshear_stress',
            'grid_point_forces',
            '*strain_energy',
        ]
        op2 = read_op2_geom(op2_filename,
                            debug_file=op2_filename_debug,
                            exclude_results=exclude_results)

        op2w = OP2Writer(op2)
        op2w.write_op2(op2_filename_out, obj=op2)  #, is_mag_phase=False)
        op2b = read_op2_geom(op2_filename_out,
                             debug_file=op2_filename_debug_out)
        op2.assert_op2_equal(op2b,
                             skip_results=[
                                 'params',
                             ],
                             stop_on_failure=True,
                             debug=False)
Esempio n. 7
0
    def test_write_elements_1(self):
        """tests basic op2 writing"""
        log = get_logger(log=None, level='warning', encoding='utf-8')
        folder = os.path.join(MODEL_PATH, 'elements')
        op2_filename = os.path.join(folder, 'freq_elements.op2')
        op2_filename_debug = os.path.join(folder, 'freq_elements.debug.out')
        op2_filename_out = os.path.join(folder, 'freq_elements_out.op2')
        op2_filename_debug_out = os.path.join(folder,
                                              'freq_elements_out.debug.out')
        #model = os.path.splitext(op2_filename)[0]

        op2 = read_op2_geom(op2_filename,
                            debug_file=op2_filename_debug,
                            log=log)

        op2.write_op2(op2_filename_out)  #, is_mag_phase=False)
        op2b = read_op2_geom(op2_filename_out,
                             debug_file=op2_filename_debug_out,
                             log=log)
        op2.assert_op2_equal(op2b,
                             skip_results=[
                                 'params',
                             ],
                             stop_on_failure=True,
                             debug=False)
Esempio n. 8
0
    def test_write_elements_2(self):
        """tests basic op2 writing"""
        log = get_logger(log=None, level='info', encoding='utf-8')
        folder = os.path.join(MODEL_PATH, 'elements')
        op2_filename = os.path.join(folder, 'freq_elements2.op2')
        op2_filename_debug = os.path.join(folder, 'freq_elements2.debug.out')
        op2_filename_out = os.path.join(folder, 'freq_elements_out2.op2')
        op2_filename_debug_out = os.path.join(folder,
                                              'freq_elements_out2.debug.out')
        #model = os.path.splitext(op2_filename)[0]

        exclude_results = [
            'force.ctria6_force',
            'force.ctriar_force',
            'force.cshear_force',
            'force.cvisc_force',
            'modal_contribution.cshear_stress',
        ]
        op2 = read_op2_geom(op2_filename,
                            debug_file=op2_filename_debug,
                            exclude_results=exclude_results,
                            log=log)

        op2.write_op2(op2_filename_out)  #, is_mag_phase=False)
        unused_op2b = read_op2_geom(op2_filename_out,
                                    debug_file=op2_filename_debug_out,
                                    log=log)
Esempio n. 9
0
    def test_write_elements_2(self):
        """tests basic op2 writing"""
        folder = os.path.join(MODEL_PATH, 'elements')
        op2_filename = os.path.join(folder, 'freq_elements2.op2')
        op2_filename_debug = os.path.join(folder, 'freq_elements2.debug.out')
        op2_filename_out = os.path.join(folder, 'freq_elements_out2.op2')
        op2_filename_debug_out = os.path.join(folder,
                                              'freq_elements_out2.debug.out')
        model = os.path.splitext(op2_filename)[0]

        exclude_results = [
            'ctria6_force',
            'ctriar_force',
            'cshear_force',
            'cvisc_force',
            'modal_contribution.cshear_stress',
        ]
        op2 = read_op2_geom(op2_filename,
                            debug_file=op2_filename_debug,
                            exclude_results=exclude_results)

        op2w = OP2Writer(op2)
        op2w.write_op2(op2_filename_out, obj=op2)  #, is_mag_phase=False)
        op2b = read_op2_geom(op2_filename_out,
                             debug_file=op2_filename_debug_out)
Esempio n. 10
0
    def test_thermal_2(self):
        """tests basic op2 thermal writing"""
        log = get_logger(log=None, level='info', encoding='utf-8')
        folder = os.path.join(MODEL_PATH, 'other')
        op2_filename = os.path.join(folder, 'hd15306.op2')
        op2_filename_debug = os.path.join(folder, 'hd15306.debug.out')
        op2_filename_out = os.path.join(folder, 'hd15306_out.op2')
        op2_filename_debug_out = os.path.join(folder, 'hd15306_out.debug.out')
        #debug_file = 'solid_bending.debug.out'
        #model = os.path.splitext(op2_filename)[0]
        #debug_file = model + '.debug.out'

        exclude_results = [
            'thermal_load.chbdyg_thermal_load',
            'thermal_load.crod_thermal_load',
            'thermal_load.cquad4_thermal_load',
        ]
        op2 = read_op2_geom(op2_filename,
                            debug_file=op2_filename_debug,
                            exclude_results=exclude_results,
                            debug=True,
                            log=log)
        str(op2.get_op2_stats(short=True))
        op2.write_op2(op2_filename_out)  #, is_mag_phase=False)
        op2b = read_op2_geom(op2_filename_out,
                             debug_file=op2_filename_debug_out,
                             log=log)
        op2.assert_op2_equal(op2b,
                             skip_results=[
                                 'params',
                             ],
                             stop_on_failure=True,
                             debug=False)
Esempio n. 11
0
    def test_write_4(self):
        """tests basic op2 writing"""
        log = get_logger(log=None, level='warning', encoding='utf-8')
        folder = os.path.join(MODEL_PATH, 'sol_101_elements')
        op2_filename = os.path.join(folder, 'static_solid_shell_bar.op2')
        op2_filename_debug = os.path.join(folder,
                                          'static_solid_shell_bar.debug.out')
        op2_filename_out = os.path.join(folder,
                                        'static_solid_shell_bar_out.op2')
        op2_filename_debug_out = os.path.join(
            folder, 'static_solid_shell_bar_out.debug.out')
        #debug_file = 'solid_bending.debug.out'
        #model = os.path.splitext(op2_filename)[0]
        #debug_file = model + '.debug.out'

        op2 = read_op2_geom(op2_filename,
                            debug_file=op2_filename_debug,
                            log=log)

        op2.write_op2(op2_filename_out)  #, is_mag_phase=False)
        op2b = read_op2_geom(op2_filename_out,
                             debug_file=op2_filename_debug_out,
                             log=log)
        op2.assert_op2_equal(op2b,
                             skip_results=[
                                 'params',
                             ],
                             stop_on_failure=True,
                             debug=False)
Esempio n. 12
0
    def _test_write_3(self):
        """tests basic op2 writing"""
        log = get_logger(log=None, level='warning', encoding='utf-8')
        folder = os.path.join(MODEL_PATH, 'sol_101_elements')
        op2_filename = os.path.join(folder, 'static_solid_shell_bar.op2')
        op2_filename_debug = os.path.join(folder, 'static_solid_shell_bar.debug.out')
        op2_filename_out = os.path.join(folder, 'static_solid_shell_bar_out.op2')
        op2_filename_debug_out = os.path.join(folder, 'static_solid_shell_bar_out.debug.out')
        #debug_file = 'solid_bending.debug.out'
        #model = os.path.splitext(op2_filename)[0]
        #debug_file = model + '.debug.out'

        op2 = read_op2_geom(op2_filename, debug_file=op2_filename_debug, log=log)

        op2.write_op2(op2_filename_out) #, is_mag_phase=False)
        unused_op2b = read_op2_geom(op2_filename_out, debug_file=op2_filename_debug_out)
Esempio n. 13
0
    def test_kelm_kdict(self):
        """Tests reading KELM and KDICT"""
        op2_filename = os.path.join(MODEL_PATH, 'sol_101_elements',
                                    'static_solid_shell_bar_kelm.op2')
        model = read_op2_geom(op2_filename, debug=False)

        kelm = model.matrices['KELM']
        kdict = model.matdicts['KDICT']
        assert kelm.data.shape == (300, 21), kelm.data.shape
        assert (kdict.element_types) == [34, 2, 67, 68, 33, 1, 39,
                                         74], kdict.element_types
        ngrids = [len(np.where(sil[0, :] > 0)[0]) for sil in kdict.sils]

        #print(kelm.data)
        #print('ndata =', len(kelm.data.data), 300*21)
        eids = np.hstack(kdict.eids)
        ndofs = [
            len(eids) * numgrid * dof_per_grid for eids, numgrid, dof_per_grid
            in zip(kdict.eids, ngrids, kdict.dof_per_grids)
        ]
        ndof = np.cumsum(ndofs)

        sil = np.hstack([sil.ravel() for sil in kdict.sils])
        usil = np.unique(sil)

        address = np.vstack(kdict.address)
Esempio n. 14
0
    def test_gpspc(self):
        """Tests the gspc1 MATPOOL model"""
        op2_filename = os.path.join(PKG_PATH, 'op2', 'test', 'matrices',
                                    'gpsc1.op2')
        model = read_op2_geom(op2_filename, debug=False)

        deltak = model.matrices['DELTAK']
        assert deltak.data.shape == (17, 221), deltak.data.shape

        deltam = model.matrices['DELTAM']
        assert deltam.data.shape == (17, 221), deltam.data.shape

        deltam0 = model.matrices['DELTAM0']
        assert deltam0.data.shape == (6, 78), deltam0.data.shape

        #mrggt = model.matrices['MRGGT']
        mrggt = model.matrices['MRGG']
        assert mrggt.data.shape == (24, 24), mrggt.data.shape

        rbm0 = model.matrices['RBM0']
        assert rbm0.data.shape == (6, 6), rbm0.data.shape

        #uexpt = model.matrices['UEXPT']
        uexpt = model.matrices['UEXP']
        assert uexpt.data.shape == (276, 24), uexpt.data.shape
Esempio n. 15
0
    def test_cut_plate(self):
        """mode 10 is a sine wave"""
        log = SimpleLogger(level='warning', encoding='utf-8', log_func=None)
        bdf_filename = os.path.join(MODEL_PATH, 'plate_py', 'plate_py.dat')
        op2_filename = os.path.join(MODEL_PATH, 'plate_py', 'plate_py.op2')
        model = read_bdf(bdf_filename, log=log)
        op2_model = read_op2_geom(op2_filename, log=log)

        title = 'Mode 10 Eigenvector'
        p1 = None
        p2 = None
        zaxis = None
        coord = CORD2R(1,
                       rid=0,
                       origin=[0., 0., 0.],
                       zaxis=[0., 0., 1],
                       xzplane=[1., 0., 0.],
                       comment='')
        model.coords[1] = coord
        ytol = 2.

        # real
        nodal_result = op2_model.eigenvectors[1].data[9, :, 2]

        cut_and_plot_model(title,
                           p1,
                           p2,
                           zaxis,
                           model,
                           coord,
                           nodal_result,
                           model.log,
                           ytol,
                           plane_atol=1e-5,
                           csv_filename='real_result.csv',
                           invert_yaxis=False,
                           cut_type='edge',
                           plot=IS_MATPLOTLIB,
                           show=False)

        # complex
        nodal_result2 = np.asarray(nodal_result, dtype='complex64')
        nodal_result2.imag = -nodal_result.real
        cut_and_plot_model(title,
                           p1,
                           p2,
                           zaxis,
                           model,
                           coord,
                           nodal_result2,
                           model.log,
                           ytol,
                           plane_atol=1e-5,
                           csv_filename='complex_result.csv',
                           invert_yaxis=True,
                           cut_type='edge',
                           plot=IS_MATPLOTLIB,
                           show=False)
        os.remove('real_result.csv')
        os.remove('complex_result.csv')
Esempio n. 16
0
    def test_write_2(self):
        """tests basic op2 writing"""
        log = SimpleLogger(level='warning', encoding='utf-8')
        folder = os.path.join(MODEL_PATH, 'solid_bending')
        op2_filename = os.path.join(folder, 'solid_bending.op2')
        op2_filename_debug = os.path.join(folder, 'solid_bending.debug.out')
        op2_filename_out = os.path.join(folder, 'solid_bending_out.op2')
        op2_filename_debug_out = os.path.join(folder,
                                              'solid_bending_out.debug.out')
        #debug_file = 'solid_bending.debug.out'
        #model = os.path.splitext(op2_filename)[0]
        #debug_file = model + '.debug.out'

        op2 = OP2(debug=True,
                  log=log,
                  debug_file=op2_filename_debug,
                  mode=None)
        op2.read_op2(op2_filename)

        op2.write_op2(op2_filename_out)  #, is_mag_phase=False)
        op2b = read_op2_geom(op2_filename_out,
                             debug_file=op2_filename_debug_out,
                             log=log)
        assert op2 == op2b
        os.remove(op2_filename_debug_out)
Esempio n. 17
0
    def test_write_1(self):
        """tests basic op2 writing"""
        log = get_logger(log=None, level='warning', encoding='utf-8')
        folder = os.path.join(MODEL_PATH, 'solid_bending')
        op2_filename = os.path.join(folder, 'solid_bending.op2')
        op2_filename_debug = os.path.join(folder, 'solid_bending.debug.out')
        op2_filename_out = os.path.join(folder, 'solid_bending_out.op2')
        op2_filename_debug_out = os.path.join(folder, 'solid_bending_out.debug.out')
        #debug_file = 'solid_bending.debug.out'
        #model = os.path.splitext(op2_filename)[0]
        #debug_file = model + '.debug.out'

        op2 = read_op2_geom(op2_filename, debug_file=op2_filename_debug,
                            include_results='displacements', log=log)

        op2.write_op2(op2_filename_out) #, is_mag_phase=False)
        op2b = read_op2_geom(op2_filename_out, debug_file=op2_filename_debug_out, log=log)
        assert op2 == op2b
Esempio n. 18
0
    def test_op2_solid_shell_bar_01_gpforce(self):
        folder = os.path.join(model_path, 'sol_101_elements')
        #bdf_filename = os.path.join(folder, 'static_solid_shell_bar.bdf')
        op2_filename = os.path.join(folder, 'static_solid_shell_bar.op2')
        op2 = read_op2_geom(op2_filename, xref=False, debug=False)

        nids_all, nids_transform, icd_transform = op2.get_displacement_index()
        op2.transform_displacements_to_global(icd_transform, op2.coords)

        gpforce = op2.grid_point_forces[1]

        #bdf_filename = os.path.join(folder, 'solid_shell_bar_xyz.bdf')
        #model = BDF(debug=False)
        #model.read_bdf(bdf_filename, xref=True)

        op2.cross_reference(xref_elements=False,
                            xref_nodes_with_elements=False,
                            xref_properties=False,
                            xref_masses=False,
                            xref_materials=False,
                            xref_loads=False,
                            xref_constraints=False,
                            xref_aero=False,
                            xref_sets=False,
                            xref_optimization=False)
        xyz_cid0 = op2.get_xyz_in_coord(cid=0)
        nid_cd = np.array([[nid, node.Cd()] for nid, node in sorted(op2.nodes.items())])
        coords = op2.coords

        data = _get_gpforce_data()
        for datai in data:
            eids, nids, cid, summation_point, total_force_local_expected, total_moment_local_expected = datai
            if cid not in coords:
                continue
            #op2.log.debug('*' * 30 + 'Next Test' + '*' * 30)
            coord_out = coords[cid]
            out = gpforce.extract_interface_loads(
                nids, eids,
                coord_out, coords,
                nid_cd, icd_transform,
                xyz_cid0, summation_point, itime=0, debug=False, logger=op2.log)
            total_force_global, total_moment_global, total_force_local, total_moment_local = out

            #op2.log.debug('***********')
            #op2.log.debug('force = %s; %s' % (total_force_global, np.linalg.norm(total_force_global)))
            #op2.log.debug('moment = %s; %s' % (total_moment_global, np.linalg.norm(total_moment_global)))

            case = 'eids=%s nids=%s cid=%s summation_point=%s' % (
                eids, nids, cid, summation_point)
            msg = '%s\ntotal_force_local_expected=%s total_force_local=%s' % (
                case, total_force_local_expected, total_force_local)
            self.assertTrue(np.allclose(total_force_local_expected, total_force_local, atol=0.005), msg)

            msg = '%s\ntotal_moment_local_expected=%s total_moment_local=%s' % (
                case, total_moment_local_expected, total_moment_local)
            self.assertTrue(np.allclose(total_moment_local_expected, total_moment_local, atol=0.005), msg)
Esempio n. 19
0
    def test_write_1(self):
        """tests basic op2 writing"""
        folder = os.path.join(MODEL_PATH, 'solid_bending')
        op2_filename = os.path.join(folder, 'solid_bending.op2')
        op2_filename_debug = os.path.join(folder, 'solid_bending.debug.out')
        op2_filename_out = os.path.join(folder, 'solid_bending_out.op2')
        op2_filename_debug_out = os.path.join(folder,
                                              'solid_bending_out.debug.out')
        #debug_file = 'solid_bending.debug.out'
        model = os.path.splitext(op2_filename)[0]
        #debug_file = model + '.debug.out'

        op2 = read_op2_geom(op2_filename,
                            debug_file=op2_filename_debug,
                            include_results='displacements')

        op2w = OP2Writer(op2)
        op2w.write_op2(op2_filename_out, obj=op2)  #, is_mag_phase=False)
        op2b = read_op2_geom(op2_filename_out,
                             debug_file=op2_filename_debug_out)
        assert op2 == op2b
Esempio n. 20
0
    def test_write_5(self):
        """tests basic op2 writing"""
        folder = os.path.join(MODEL_PATH, 'sol_101_elements')
        op2_filename = os.path.join(folder, 'mode_solid_shell_bar.op2')
        op2_filename_debug = os.path.join(folder,
                                          'mode_solid_shell_bar.debug.out')
        op2_filename_out = os.path.join(folder, 'mode_solid_shell_bar_out.op2')
        op2_filename_debug_out = os.path.join(
            folder, 'mode_solid_shell_bar_out.debug.out')
        #debug_file = 'solid_bending.debug.out'
        model = os.path.splitext(op2_filename)[0]
        #debug_file = model + '.debug.out'

        exclude_results = [
            #'*_strain_energy',
        ]
        op2 = read_op2_geom(
            op2_filename,
            debug_file=op2_filename_debug,
            exclude_results=exclude_results,
            #include_results='eigenvectors',
            #include_results=['crod_stress', 'cbar_stress'],
            #include_results=['crod_force', 'cbar_force'],
            #include_results='element_forces',
            #include_results='stress',
        )

        op2w = OP2Writer(op2)
        op2w.write_op2(
            op2_filename_out,
            obj=op2,
        )  #is_mag_phase=False)
        op2b = read_op2_geom(op2_filename_out,
                             debug_file=op2_filename_debug_out)
        op2.assert_op2_equal(op2b,
                             skip_results=[
                                 'params',
                             ],
                             stop_on_failure=True,
                             debug=False)
Esempio n. 21
0
    def test_thermal_2(self):
        """tests basic op2 thermal writing"""
        folder = os.path.join(MODEL_PATH, 'other')
        op2_filename = os.path.join(folder, 'hd15306.op2')
        op2_filename_debug = os.path.join(folder, 'hd15306.debug.out')
        op2_filename_out = os.path.join(folder, 'hd15306_out.op2')
        op2_filename_debug_out = os.path.join(folder, 'hd15306.debug.out')
        #debug_file = 'solid_bending.debug.out'
        model = os.path.splitext(op2_filename)[0]
        #debug_file = model + '.debug.out'

        exclude_results = [
            'chbdyg_thermal_load',
            'crod_thermal_load',
            'cquad4_thermal_load',
            #'chbdye_thermal_load',
            #'chexa_thermal_load',
        ]
        op2 = read_op2_geom(
            op2_filename,
            debug_file=op2_filename_debug,
            exclude_results=exclude_results,
            debug=True,
            #include_results='eigenvectors',
            #include_results=['crod_stress', 'cbar_stress'],
            #include_results=['crod_force', 'cbar_force'],
            #include_results='element_forces',
            #include_results='stress',
        )
        str(op2.get_op2_stats(short=True))
        op2w = OP2Writer(op2)
        op2w.write_op2(op2_filename_out, obj=op2)  #, is_mag_phase=False)
        op2b = read_op2_geom(op2_filename_out,
                             debug_file=op2_filename_debug_out)
        op2.assert_op2_equal(op2b,
                             skip_results=[
                                 'params',
                             ],
                             stop_on_failure=True,
                             debug=False)
Esempio n. 22
0
    def test_write_elements_1(self):
        """tests basic op2 writing"""
        folder = os.path.join(MODEL_PATH, 'elements')
        op2_filename = os.path.join(folder, 'freq_elements.op2')
        op2_filename_debug = os.path.join(folder, 'freq_elements.debug.out')
        op2_filename_out = os.path.join(folder, 'freq_elements_out.op2')
        op2_filename_debug_out = os.path.join(folder,
                                              'freq_elements_out.debug.out')
        model = os.path.splitext(op2_filename)[0]

        op2 = read_op2_geom(op2_filename, debug_file=op2_filename_debug)

        op2w = OP2Writer(op2)
        op2w.write_op2(op2_filename_out, obj=op2)  #, is_mag_phase=False)
        op2b = read_op2_geom(op2_filename_out,
                             debug_file=op2_filename_debug_out)
        op2.assert_op2_equal(op2b,
                             skip_results=[
                                 'params',
                             ],
                             stop_on_failure=True,
                             debug=False)
Esempio n. 23
0
    def test_write_5(self):
        """tests basic op2 writing"""
        log = get_logger(log=None, level='info', encoding='utf-8')
        folder = os.path.join(MODEL_PATH, 'sol_101_elements')
        op2_filename = os.path.join(folder, 'mode_solid_shell_bar.op2')
        op2_filename_debug = os.path.join(folder,
                                          'mode_solid_shell_bar.debug.out')
        op2_filename_out = os.path.join(folder, 'mode_solid_shell_bar_out.op2')
        op2_filename_debug_out = os.path.join(
            folder, 'mode_solid_shell_bar_out.debug.out')
        #debug_file = 'solid_bending.debug.out'
        model = os.path.splitext(op2_filename)[0]
        #debug_file = model + '.debug.out'

        exclude_results = [
            #'*_strain_energy',
        ]
        op2 = read_op2_geom(
            op2_filename,
            debug_file=op2_filename_debug,
            exclude_results=exclude_results,
            log=log,
        )

        op2w = OP2Writer(op2)
        op2w.write_op2(
            op2_filename_out,
            obj=op2,
        )  #is_mag_phase=False)
        op2b = read_op2_geom(op2_filename_out,
                             debug_file=op2_filename_debug_out,
                             log=log)
        op2.assert_op2_equal(op2b,
                             skip_results=[
                                 'params',
                             ],
                             stop_on_failure=True,
                             debug=False)
Esempio n. 24
0
    def test_write_2(self):
        """tests basic op2 writing"""
        log = get_logger(log=None, level='info', encoding='utf-8')
        folder = os.path.join(MODEL_PATH, 'solid_bending')
        op2_filename = os.path.join(folder, 'solid_bending.op2')
        op2_filename_debug = os.path.join(folder, 'solid_bending.debug.out')
        op2_filename_out = os.path.join(folder, 'solid_bending_out.op2')
        op2_filename_debug_out = os.path.join(folder,
                                              'solid_bending_out.debug.out')
        #debug_file = 'solid_bending.debug.out'
        model = os.path.splitext(op2_filename)[0]
        #debug_file = model + '.debug.out'

        op2 = read_op2(op2_filename, debug_file=op2_filename_debug, log=log)

        op2w = OP2Writer(op2)
        op2w.write_op2(op2_filename_out, obj=op2)  #, is_mag_phase=False)
        op2b = read_op2_geom(op2_filename_out,
                             debug_file=op2_filename_debug_out,
                             log=log)
        assert op2 == op2b
    def test_op2_solid_shell_bar_01_gpforce_radial(self):
        warning_log = SimpleLogger(level='warning')
        debug_log = SimpleLogger(level='debug')
        folder = os.path.join(model_path, 'sol_101_elements')
        op2_filename = os.path.join(folder,
                                    'static_solid_shell_bar_radial.op2')
        op2_1 = read_op2_geom(op2_filename, xref=False, log=warning_log)
        op2_1.log = debug_log

        print("disp_orig =\n", op2_1.displacements[1].data[0, :2, :])
        #print("spc_orig =\n", op2_1.spc_forces[1].data[0, -3:, :])
        #print("gpf_orig =\n", op2_1.grid_point_forces[1].data[0, :2, :])

        op2_1.cross_reference(xref_elements=False,
                              xref_nodes_with_elements=False,
                              xref_properties=False,
                              xref_masses=False,
                              xref_materials=False,
                              xref_loads=False,
                              xref_constraints=False,
                              xref_aero=False,
                              xref_sets=False,
                              xref_optimization=False)
        xyz_cid0 = op2_1.get_xyz_in_coord(cid=0)

        nid_cd = np.array([[nid, node.Cd()]
                           for nid, node in sorted(op2_1.nodes.items())])
        #-------------------------------------------------
        #coords = op2_1.coords
        #used_cds = np.unique(nid_cd[:, 1])
        #for cd in used_cds:
        #coord = op2_1.coords[cd]
        #print(coord)
        #print('origin = %s' % coord.origin)
        #print('beta =\n%s' % coord.beta())
        #print('-----------------------------')

        #disp = op2_1.displacements[1]
        #for line in list(disp.data[0, :, :3]):
        #print('%10.4e %10.4e %10.4e' % tuple(line))

        nids_all, nids_transform_1, icd_transform_1 = op2_1.get_displacement_index(
        )
        op2_1.transform_displacements_to_global(icd_transform_1,
                                                op2_1.coords,
                                                xyz_cid0=xyz_cid0)
        op2_1.transform_gpforce_to_global(nids_all,
                                          nids_transform_1,
                                          icd_transform_1,
                                          op2_1.coords,
                                          xyz_cid0=xyz_cid0)
        #print('stuff...')
        #disp = op2_1.displacements[1]
        #for line in list(disp.data[0, :, :3]):
        #print('%10.4e %10.4e %10.4e' % tuple(line))
        #print(disp.data[0, :, :3])

        print("disp_new =\n", op2_1.displacements[1].data[0, :2, :])
        #print("spc_new =\n", op2_1.spc_forces[1].data[0, -3:, :])
        #print("gpf_new =\n", op2_1.grid_point_forces[1].data[0, :2, :])

        #-----------------------------------------------------------------------
        op2_filename2 = os.path.join(folder, 'static_solid_shell_bar.op2')
        op2_2 = read_op2_geom(op2_filename2, debug=False)
        nids_all, nids_transform_2, icd_transform_2 = op2_2.get_displacement_index(
        )
        op2_2.transform_displacements_to_global(icd_transform_2, op2_2.coords)
        op2_2.transform_gpforce_to_global(nids_all, nids_transform_2,
                                          icd_transform_2, op2_2.coords)

        print("disp_goal =\n", op2_2.displacements[1].data[0, :2, :])
        #print("spc_goal =\n", op2_2.spc_forces[1].data[0, -3:, :])
        #print("gpf_goal =\n", op2_2.grid_point_forces[1].data[0, :2, :])

        return
        msg = 'displacements baseline=\n%s\ndisplacements xyz=\n%s' % (
            op2_1.displacements[1].data[0, :, :],
            op2_2.displacements[1].data[0, :, :])
        #print(msg)
        assert op2_1.displacements[1].assert_equal(op2_2.displacements[1])

        msg = 'grid_point_forces baseline=\n%s\ngrid_point_forces xyz=\n%s' % (
            op2_1.grid_point_forces[1].data[0, :, :],
            op2_2.grid_point_forces[1].data[0, :, :])
        #print(msg)

        assert op2_1.spc_forces[1].assert_equal(op2_2.spc_forces[1],
                                                atol=4.4341e-04), msg
        assert op2_1.mpc_forces[1].assert_equal(op2_2.mpc_forces[1]), msg
        assert op2_1.load_vectors[1].assert_equal(op2_2.load_vectors[1]), msg
        assert op2_1.grid_point_forces[1].assert_equal(
            op2_2.grid_point_forces[1], atol=0.000123), msg
        #-----------------------------------------------------------------------
        gpforce = op2_1.grid_point_forces[1]
        data = _get_gpforce_data()
        for i, datai in enumerate(data):
            eids, nids, cid, summation_point, total_force_local_expected, total_moment_local_expected = datai
            coord_out = op2_1.coords[cid]
            op2_1.log.debug('*' * 30 + 'Next Test #%s' % i + '*' * 30)
            out = gpforce.extract_interface_loads(nids,
                                                  eids,
                                                  coord_out,
                                                  op2_1.coords,
                                                  nid_cd,
                                                  icd_transform_1,
                                                  xyz_cid0,
                                                  summation_point,
                                                  itime=0,
                                                  debug=False,
                                                  logger=op2_1.log)
            total_force_global, total_moment_global, total_force_local, total_moment_local = out

            op2_1.log.debug('***********')
            op2_1.log.debug(
                'force = %s; %s' %
                (total_force_global, np.linalg.norm(total_force_global)))
            op2_1.log.debug(
                'moment = %s; %s' %
                (total_moment_global, np.linalg.norm(total_moment_global)))

            case = 'eids=%s nids=%s cid=%s summation_point=%s' % (
                eids, nids, cid, summation_point)
            msg = '%s\ntotal_force_local_expected=%s total_force_local=%s delta=%s' % (
                case, total_force_local_expected, total_force_local,
                np.abs(total_force_local_expected - total_force_local))
            self.assertTrue(
                np.allclose(total_force_local_expected,
                            total_force_local,
                            atol=0.2), msg)

            msg = '%s\ntotal_moment_local_expected=%s total_moment_local=%s delta=%s' % (
                case, total_moment_local_expected, total_moment_local,
                np.abs(total_moment_local_expected - total_moment_local))
            self.assertTrue(
                np.allclose(total_moment_local_expected,
                            total_moment_local,
                            atol=0.005), msg)
Esempio n. 26
0
def save_load_deck(model,
                   xref='standard',
                   punch=True,
                   run_remove_unused=True,
                   run_convert=True,
                   run_renumber=True,
                   run_mirror=True,
                   run_save_load=True,
                   run_quality=True,
                   write_saves=True,
                   run_save_load_hdf5=True,
                   run_mass_properties=True,
                   run_loads=True,
                   run_test_bdf=True,
                   run_op2_writer=True,
                   run_op2_reader=True,
                   op2_log_level: str = 'warning'):
    """writes, re-reads, saves an obj, loads an obj, and returns the deck"""
    if os.path.exists('junk.bdf'):
        os.remove('junk.bdf')
    model.set_error_storage(nparse_errors=0,
                            stop_on_parsing_error=True,
                            nxref_errors=0,
                            stop_on_xref_error=True)
    model.validate()
    model.pop_parse_errors()
    model.pop_xref_errors()
    bdf_file = StringIO()
    model.write_bdf(bdf_file, size=8, close=False)
    bdf_file.seek(0)
    model.write_bdf(bdf_file, size=16, close=False)
    bdf_file.seek(0)
    model.write_bdf(bdf_file, size=16, is_double=True, close=False)
    bdf_file.seek(0)

    if write_saves and model.save_file_structure:
        bdf_filenames = {
            0: 'junk.bdf',
        }
        model.write_bdfs(bdf_filenames)
        os.remove('junk.bdf')

    if run_convert:
        units_to = ['m', 'kg', 's']
        units = ['ft', 'lbm', 's']
        convert(model, units_to, units)

    model2 = BDF(log=model.log)
    #print(bdf_file.getvalue())
    model2.read_bdf(bdf_file, punch=punch, xref=False)
    _cross_reference(model2, xref)

    model2.pop_parse_errors()
    model2.get_bdf_stats()
    model2.write_bdf('model2.bdf')
    if run_test_bdf:
        folder = ''
        log_error = get_logger(log=None, level='error', encoding='utf-8')
        test_bdf(folder,
                 'model2.bdf',
                 stop_on_failure=True,
                 punch=punch,
                 quiet=True,
                 log=log_error)
        os.remove('model2.test_bdf.bdf')

    nelements = len(model2.elements) + len(model2.masses)
    nnodes = len(model2.nodes) + len(model2.spoints) + len(model2.epoints)

    _run_mass_properties(model2,
                         nnodes,
                         nelements,
                         run_mass_properties=run_mass_properties)
    _run_loads(model2, nelements, run_loads=run_loads)

    if run_save_load:
        model2.save(obj_filename='model.obj', unxref=True)
        model3 = BDF(debug=False, log=model.log, mode='msc')
        model3.load(obj_filename='model.obj')
        os.remove('model.obj')
    else:
        model2.uncross_reference()
        model3 = model2

    _run_hdf5(model2, model.log, run_save_load_hdf5=run_save_load_hdf5)

    cross_reference(model3, xref)
    if run_renumber:
        renumber('model2.bdf', model.log)
        if run_mirror:
            # we put this under renumber to prevent modifying an
            # existing model to prevent breaking tests
            #
            # shouldn't have any effect model2.bdf
            model_mirrored = bdf_mirror('model2.bdf',
                                        plane='xz',
                                        log=model.log)[0]
            model_mirrored.write_bdf('mirrored2.bdf')
            read_bdf('mirrored2.bdf', log=model.log)
            os.remove('mirrored2.bdf')
    os.remove('model2.bdf')

    if model.elements and run_quality:
        element_quality(model)

    if run_op2_writer:
        op2_geom_model = attach_op2_results_to_bdf(model, op2_model=None)
        from pyNastran.op2.op2_geom import read_op2_geom

        table_name = 'OUGV1'
        node_gridtype = np.zeros((10, 2), dtype='int32')
        node_gridtype[:, 0] = np.arange(1, 11)
        data = np.zeros((1, 10, 6), dtype='float32')
        isubcase = 1
        disp = RealDisplacementArray.add_static_case(table_name,
                                                     node_gridtype,
                                                     data,
                                                     isubcase,
                                                     is_sort1=True)
        op2_geom_model.displacements[isubcase] = disp

        op2_filename = 'spike.op2'
        bkp_log = op2_geom_model.log
        op2_geom_model.log = get_logger(log=None,
                                        level=op2_log_level,
                                        encoding='utf-8')
        op2_geom_model.write_op2(op2_filename,
                                 post=-1,
                                 endian=b'<',
                                 skips=None,
                                 nastran_format='nx')
        if run_op2_reader:
            unused_op2_geom = read_op2_geom(op2_filename,
                                            log=op2_geom_model.log,
                                            xref=False)
        else:
            frame = inspect.currentframe()
            call_frame = inspect.getouterframes(frame, 2)
            op2_geom_model.log.warning('skipping op2 reader for %s' %
                                       call_frame[1][3])
        op2_geom_model.log = bkp_log
        os.remove(op2_filename)

    if run_remove_unused:
        remove_unused(model)

    return model3
                tmp.imag = eyy_theta_imag
                new_vector.data[:, :, 1][:, check] = tmp
                tmp.real = exy_theta_real * 2.
                tmp.imag = exy_theta_imag * 2.
                new_vector.data[:, :, 2][:, check] = tmp
            else:
                exx_theta, eyy_theta, exy_theta = transf_Mohr(
                    exx, eyy, exy, vecthetarad)
                thetadeg_new = thetadeg_to_principal(exx_theta, eyy_theta,
                                                     exy_theta)
                new_vector.data[:, :, 1][:, check] = exx_theta
                new_vector.data[:, :, 2][:, check] = eyy_theta
                new_vector.data[:, :, 3][:, check] = exy_theta * 2.
                new_vector.data[:, :, 4][:, check] = thetadeg_new

            #TODO implement transformation for corner nodes
            #     for now we just zero the wrong values
            if 'quad8' in vecname:
                for i in [2, 3, 4, 5, 6, 7, 8, 9]:
                    new_vector.data[:, i, :] = 0
    return op2_new


if __name__ == '__main__':  # pragma: no cover
    op2_filename = r'C:\NASA\m4\formats\git\pyNastran\models\solid_bending\solid_bending_coord1.op2'
    from pyNastran.op2.op2 import read_op2
    from pyNastran.op2.op2_geom import read_op2_geom
    model = read_op2_geom(op2_filename)
    cid = 0
    transform_solids(model, model, cid)
    def test_op2_solid_shell_bar_01_gpforce(self):
        #bdf_filename = os.path.join(MODEL_PATH, 'sol_101_elements', 'static_solid_shell_bar.bdf')
        op2_filename = os.path.join(MODEL_PATH, 'sol_101_elements',
                                    'static_solid_shell_bar.op2')
        op2 = read_op2_geom(op2_filename, debug=False)

        nids_all, nids_transform, icd_transform = op2.get_displacement_index()
        op2.transform_displacements_to_global(icd_transform, op2.coords)

        gpforce = op2.grid_point_forces[1]

        #bdf_filename = os.path.join(folder, 'solid_shell_bar_xyz.bdf')
        #model = BDF(debug=False)
        #model.read_bdf(bdf_filename, xref=True)

        op2.cross_reference(xref_elements=False,
                            xref_nodes_with_elements=False,
                            xref_properties=False,
                            xref_masses=False,
                            xref_materials=False,
                            xref_loads=False,
                            xref_constraints=False,
                            xref_aero=False,
                            xref_sets=False,
                            xref_optimization=False)
        xyz_cid0 = op2.get_xyz_in_coord(cid=0)
        nid_cd = np.array([[nid, node.Cd()]
                           for nid, node in sorted(iteritems(op2.nodes))])
        coords = op2.coords

        data = [
            #eids, nids, cid, summation_point
            #[1], [1], 0, [0., 0., 0.],
            [
                [1],
                [1, 2, 3, 4],
                0,
                [0., 0., 0.],
                [0.0, 0.0, -10000.0],
                [-5000.0, 5000.0, 0.0],
            ],

            # cid=0; eid=[1]; nid=[3]; sum=[0., 0., 0.] - done
            #               fmag     mmag       fx      fy       fz       mx       my       mz
            # F2      = [2589.95,     0.0,  26.34, -44.15, -2589.44,     0.0,     0.0,     0.0]
            # F2Total = [2589.95, 3862.70,  26.34, -44.15, -2589.44, -2589.44, 2589.44, -70.49]
            [
                [1],
                [3],
                0,
                [0., 0., 0.],
                [26.34, -44.15, -2589.44],
                [-2589.44, 2589.44, -70.49],
            ],

            # cid=1; eid=[1]; nid=[1]; sum=[0., 0., 0.]
            #               fmag     mmag      fx      fy       fz       mx       my       mz
            # F1      = [2589.90,     0.0,1853.64, 567.74, 1717.35,     0.0,     0.0,     0.0]
            # F1Total = [2589.90,     0.0,1853.64, 567.74, 1717.35,     0.0,     0.0,     0.0]
            [
                [1],
                [1],
                1,
                [0., 0., 0.],
                [1853.64, 567.74, 1717.35],
                [0.0, 0.0, 0.0],
            ],

            # cid=1; eid=[1]; nid=[2]; sum=[0., 0., 0.]
            #               fmag     mmag       fx      fy       fz       mx       my       mz
            # F2      = [2411.67,     0.0, 1710.67, 634.80, 1577.03,     0.0,     0.0,     0.0]
            # F2Total = [2411.67, 2410.58, 1710.67, 634.80, 1577.03, 1698.38, -570.22, -1612.84]
            [
                [1],
                [2],
                1,
                [0., 0., 0.],
                [1710.67, 634.80, 1577.03],
                [1698.38, -570.22, -1612.84],
            ],

            # cid=1; eid=[1]; nid=[3]; sum=[0., 0., 0.]
            #           fmag          mmag     fx       fy       fz       mx        my       mz
            # F3      = [2589.95,     0.0, 1799.79, 645.58, 1746.94,     0.0,      0.0,     0.0]
            # F3Total = [2589.95, 3862.70, 1799.79, 645.58, 1746.94, 1880.85, -3035.07, -816.15]
            [[1], [3], 1, [0., 0., 0.], [1799.79, 645.58, 1746.94],
             [1880.85, -3035.07, -816.15]],
        ]
        for datai in data:
            eids, nids, cid, summation_point, total_force_local_expected, total_moment_local_expected = datai
            if cid not in coords:
                continue
            #op2.log.debug('*' * 30 + 'Next Test' + '*' * 30)
            coord_out = coords[cid]
            out = gpforce.extract_interface_loads(nids,
                                                  eids,
                                                  coord_out,
                                                  coords,
                                                  nid_cd,
                                                  icd_transform,
                                                  xyz_cid0,
                                                  summation_point,
                                                  itime=0,
                                                  debug=False,
                                                  logger=op2.log)
            total_force_global, total_moment_global, total_force_local, total_moment_local = out

            #op2.log.debug('***********')
            #op2.log.debug('force = %s; %s' % (total_force_global, np.linalg.norm(total_force_global)))
            #op2.log.debug('moment = %s; %s' % (total_moment_global, np.linalg.norm(total_moment_global)))

            case = 'eids=%s nids=%s cid=%s summation_point=%s' % (
                eids, nids, cid, summation_point)
            msg = '%s\ntotal_force_local_expected=%s total_force_local=%s' % (
                case, total_force_local_expected, total_force_local)
            self.assertTrue(
                np.allclose(total_force_local_expected,
                            total_force_local,
                            atol=0.005), msg)

            msg = '%s\ntotal_moment_local_expected=%s total_moment_local=%s' % (
                case, total_moment_local_expected, total_moment_local)
            self.assertTrue(
                np.allclose(total_moment_local_expected,
                            total_moment_local,
                            atol=0.005), msg)
    def test_op2_solid_shell_bar_01_gpforce_radial(self):
        folder = os.path.abspath(
            os.path.join(PKG_PATH, '..', 'models', 'sol_101_elements'))
        bdf_filename = os.path.join(folder,
                                    'static_solid_shell_bar_radial.bdf')
        op2_filename = os.path.join(folder,
                                    'static_solid_shell_bar_radial.op2')
        op2 = read_op2_geom(op2_filename)

        op2.transform_displacements_to_global(icd_transform, op2.coords)

        op2.cross_reference(xref_elements=False,
                            xref_nodes_with_elements=False,
                            xref_properties=False,
                            xref_masses=False,
                            xref_materials=False,
                            xref_loads=False,
                            xref_constraints=False,
                            xref_aero=False,
                            xref_sets=False,
                            xref_optimization=False)
        xyz_cid0 = op2.get_xyz_in_coord(cid=0)

        nid_cd = np.array([[nid, node.Cd()]
                           for nid, node in sorted(iteritems(op2.nodes))])
        data = [
            #eids, nids, cid, summation_point
            #[1], [1], 0, [0., 0., 0.],
            #[[1], [1, 2, 3, 4], 0, [0., 0., 0.], [0.0, 0.0, -10000.0], [-5000.0, 5000.0, 0.0],],

            # cid=0; eid=[1]; nid=[3]; sum=[0., 0., 0.] - done
            #               fmag     mmag       fx      fy       fz       mx       my       mz
            # F2      = [2589.95,     0.0, -12.59, -49.84, -2589.44,      0.0,     0.0,    0.0]  cid 0
            # F2Total = [2589.95, 3862.70,  26.34, -44.15, -2589.44, -2589.44, 2589.44, -70.49]  cid 0
            [
                [1],
                [3],
                0,
                [0., 0., 0.],
                [26.34, -44.15, -2589.44],
                [-2589.44, 2589.44, -70.49],
            ],

            # cid=0; eid=[1]; nid=[3]; sum=[0., 0., 0.] - done
            #               fmag     mmag       fx      fy       fz       mx       my       mz
            # F2      = [2589.95,     0.0, -12.59, -49.84, -2589.44,      0.0,     0.0,    0.0]  cid 0
            # F2Total = [2589.95, 3862.70,  26.34, -44.15, -2589.44, -2589.44, 2589.44, -70.49]  cid 1
            [
                [1],
                [3],
                1,
                [0., 0., 0.],
                [44.15, -26.34, -2589.44],
                [2589.44, 2589.44, -70.49],
            ],
        ]

        gpforce = op2.grid_point_forces[1]
        coords = op2.coords
        for datai in data:
            eids, nids, cid, summation_point, total_force_local_expected, total_moment_local_expected = datai
            if cid not in coords:
                continue
            coord_out = coords[cid]
            op2.log.debug('*' * 30 + 'Next Test #%s' % i + '*' * 30)
            out = gpforce.extract_interface_loads(nids,
                                                  eids,
                                                  coord_out,
                                                  coords,
                                                  nid_cd,
                                                  icd_transform_1,
                                                  xyz_cid0,
                                                  summation_point,
                                                  itime=0,
                                                  debug=False,
                                                  logger=op2.log)
            total_force_global, total_moment_global, total_force_local, total_moment_local = out

            op2.log.debug('***********')
            op2.log.debug(
                'force = %s; %s' %
                (total_force_global, np.linalg.norm(total_force_global)))
            op2.log.debug(
                'moment = %s; %s' %
                (total_moment_global, np.linalg.norm(total_moment_global)))

            case = 'eids=%s nids=%s cid=%s summation_point=%s' % (
                eids, nids, cid, summation_point)
            msg = '%s\ntotal_force_local_expected=%s total_force_local=%s delta=%s' % (
                case, total_force_local_expected, total_force_local,
                np.abs(total_force_local_expected - total_force_local))
            self.assertTrue(
                np.allclose(total_force_local_expected,
                            total_force_local,
                            atol=0.2), msg)

            msg = '%s\ntotal_moment_local_expected=%s total_moment_local=%s delta=%s' % (
                case, total_moment_local_expected, total_moment_local,
                np.abs(total_moment_local_expected - total_moment_local))
            self.assertTrue(
                np.allclose(total_moment_local_expected,
                            total_moment_local,
                            atol=0.005), msg)
Esempio n. 30
0
    if load_geometry:
		# TODO: kwargs support for methods
		kw = {'op2_filename': op2_filename, 
		      'combine': combine, 
			  'subcases': subcases,
			  'exclude_results': exclude_results, 
			  'include_results': include_results,
			  'validate': True, 
			  'xref': True,
			  'build_dataframe': build_dataframe,
			  'skip_undefined_matrices': skip_undefined_matrices,
			  'mode': mode, 
			  'log': log, 
			  'debug': debug, 
			  'encoding': encoding}
		model = read_op2_geom(**kw)
    else:
        model = OP2(log=log, debug=debug, mode=mode)
        model.set_subcases(subcases)
        model.include_exclude_results(exclude_results=exclude_results,
                                      include_results=include_results)
		
		# TODO: kwargs support
		kw = {'op2_filename': op2_filename, 
			  'build_dataframe': build_dataframe,
			  'skip_undefined_matrices': skip_undefined_matrices, 
			  'combine': combine,
			  'encoding': encoding}
		model.read_op2(**kw)

    # TODO: This will go away when OP2 is refactored. Many methods will be