コード例 #1
0
    def test_merge_01(self):
        """merges multiple bdfs into a single deck"""
        log = SimpleLogger(level='error')
        bdf_filename1 = os.path.join(MODEL_PATH, 'bwb', 'bwb_saero.bdf')
        bdf_filename2 = os.path.join(MODEL_PATH, 'sol_101_elements',
                                     'static_solid_shell_bar.bdf')
        bdf_filename3 = os.path.join(MODEL_PATH, 'solid_bending',
                                     'solid_bending.bdf')
        bdf_filename4 = os.path.join(MODEL_PATH, 'iSat', 'ISat_Dploy_Sm.dat')
        bdf_filename_out1 = os.path.join(MODEL_PATH, 'bwb',
                                         'BWBsaero_staticbar_8.out')
        bdf_filename_out2 = os.path.join(MODEL_PATH, 'bwb',
                                         'BWBsaero_static_bar_16.out')
        bdf_filename_out3 = os.path.join(MODEL_PATH, 'bwb',
                                         'BWBsaero_staticbar_isat.out')

        bdf_filenames1 = [bdf_filename1, bdf_filename2]
        bdf_filenames2 = [
            bdf_filename1, bdf_filename2, bdf_filename3, bdf_filename4
        ]
        bdf_merge(bdf_filenames1,
                  bdf_filename_out=bdf_filename_out1,
                  renumber=True,
                  encoding=None,
                  size=8,
                  is_double=False,
                  cards_to_skip=None,
                  log=log)
        bdf_merge(bdf_filenames1,
                  bdf_filename_out=bdf_filename_out2,
                  renumber=False,
                  encoding=None,
                  size=16,
                  is_double=False,
                  cards_to_skip=None,
                  log=log)

        bdf_merge(bdf_filenames2,
                  bdf_filename_out=bdf_filename_out3,
                  renumber=False,
                  encoding=None,
                  size=16,
                  is_double=False,
                  cards_to_skip=None,
                  log=log)
        read_bdf(bdf_filename_out1, log=log)
        read_bdf(bdf_filename_out2, log=log)
        read_bdf(bdf_filename_out3, log=log)
コード例 #2
0
ファイル: bdf_unit_tests.py プロジェクト: zchlrnr/pyNastran
    def test_bdf_aero_01(self):
        """checks aero/aerobeam.bdf"""
        log = SimpleLogger(level='warning', encoding='utf-8')
        bdf_filename = os.path.join(MODEL_PATH, 'aero', 'aerobeam.bdf')
        fem1, fem2, diff_cards = self.run_bdf('', bdf_filename, log=log)
        diff_cards2 = list(set(diff_cards))
        diff_cards2.sort()
        assert len(diff_cards2) == 0, diff_cards2

        for fem in [fem1, fem2]:
            assert fem.card_count['MAT1'] == 3, fem.card_count
            assert fem.card_count['DCONADD'] == 2, fem.card_count
            assert fem.card_count['MAT1'] == 3, fem.card_count
            assert fem.card_count['DMI'] == 6, fem.card_count
            assert fem.card_count['PAERO1'] == 1, fem.card_count
            assert fem.card_count['EIGRL'] == 2, fem.card_count
            assert fem.card_count['PBAR'] == 1, fem.card_count
            assert fem.card_count['DESVAR'] == 3, fem.card_count
            assert fem.card_count['DRESP1'] == 11, fem.card_count
            assert fem.card_count['DRESP2'] == 6, fem.card_count

            assert fem.card_count['SPC1'] == 4, fem.card_count
            assert fem.card_count['AESTAT'] == 10, fem.card_count
            assert fem.card_count['TRIM'] == 4, fem.card_count
            assert fem.card_count['SPLINE2'] == 3, fem.card_count
            assert fem.card_count['DVPREL1'] == 6, fem.card_count
            assert fem.card_count['SUPORT1'] == 2, fem.card_count
            assert fem.card_count['DCONSTR'] == 10, fem.card_count
            assert fem.card_count['AELIST'] == 3, fem.card_count
            assert fem.card_count['CORD2R'] == 6, fem.card_count
            assert fem.card_count['CONM2'] == 10, fem.card_count

            assert fem.card_count['ENDDATA'] == 1, fem.card_count
            assert fem.card_count['AERO'] == 1, fem.card_count
            assert fem.card_count['PARAM'] == 4, fem.card_count
            assert fem.card_count['CBEAM'] == 3, fem.card_count
            assert fem.card_count['GRID'] == 14, fem.card_count
            assert fem.card_count['SET1'] == 5, fem.card_count
            assert fem.card_count['MKAERO1'] == 1, fem.card_count
            assert fem.card_count['PBEAML'] == 3, fem.card_count
            assert fem.card_count['FLFACT'] == 5, fem.card_count
            assert fem.card_count['AESURF'] == 3, fem.card_count
            assert fem.card_count['DEQATN'] == 3, fem.card_count
            assert fem.card_count['CBAR'] == 4, fem.card_count
            assert fem.card_count['CAERO1'] == 3, fem.card_count
            assert fem.card_count['AEROS'] == 1, fem.card_count
            assert fem.card_count['FLUTTER'] == 4, fem.card_count
            assert fem.card_count['DOPTPRM'] == 1, fem.card_count
コード例 #3
0
    def test_read_include_dir_1(self):
        """Tests various read methods using various include files"""
        # fails correctly
        log = SimpleLogger(level='info', encoding='utf-8')
        model = BDF(log=log, debug=False)
        bdf_name = os.path.join(TEST_PATH, 'test_include.bdf')
        model.read_bdf(bdf_name, xref=True, punch=False)
        #self.assertRaises(IOError, model.read_bdf, bdf_name, xref=True, punch=False)

        # passes
        #full_path = os.path.join(TEST_PATH, 'include_dir')
        model2 = BDF(log=log, debug=False)
        bdf_filename = 'test_include.bdf'
        if not os.path.exists(bdf_filename):
            bdf_filename = os.path.join(TEST_PATH, 'test_include.bdf')
        model2.read_bdf(bdf_filename, xref=True, punch=False)
コード例 #4
0
ファイル: bdf_unit_tests.py プロジェクト: zchlrnr/pyNastran
 def test_bdf_superelement_4(self):
     """checks see101l8.bdf"""
     bdf_filename = os.path.join(MODEL_PATH, 'superelements',
                                 'see101l8.bdf')
     log = SimpleLogger(level='error', encoding='utf-8')
     (unused_fem1, unused_fem2, diff_cards) = self.run_bdf(
         '',
         bdf_filename,
         xref=True,
         run_extract_bodies=False,
         save_file_structure=True,
         log=log,
     )
     diff_cards2 = list(set(diff_cards))
     diff_cards2.sort()
     assert len(diff_cards2) == 0, diff_cards2
コード例 #5
0
ファイル: op2_objects.py プロジェクト: zchlrnr/pyNastran
    def _eq_header(self, table):
        ScalarObject._eq_header(self, table)
        is_nan = (self.nonlinear_factor is not None
                  and np.isnan(self.nonlinear_factor)
                  and np.isnan(table.nonlinear_factor))
        if hasattr(self, 'element_name'):
            if self.nonlinear_factor not in (None, np.nan) and not is_nan:
                assert np.array_equal(
                    self._times,
                    table._times), 'ename=%s-%s times=%s table.times=%s' % (
                        self.element_name, self.element_type, self._times,
                        table._times)

        log = SimpleLogger()
        _check_element(self, table, log)
        _check_element_node(self, table, log)
コード例 #6
0
    def test_shabp_1(self):
        """tests nose.mk5"""
        log = SimpleLogger(level='info', encoding='utf-8')
        shabp_filename = os.path.join(MODEL_PATH, 'nose', 'noseX_working.mk5')
        model = read_shabp(shabp_filename, log=log)

        npatches_expected = 1
        assert len(
            model.X
        ) == npatches_expected, f'npatches_expected={npatches_expected} len(model.X)={len(model.X)}'
        assert len(
            model.Y
        ) == npatches_expected, f'npatches_expected={npatches_expected} len(model.X)={len(model.Y)}'
        assert len(
            model.Z
        ) == npatches_expected, f'npatches_expected={npatches_expected} len(model.X)={len(model.Z)}'

        #print(f'component_name_to_patch = {model.component_name_to_patch}')
        #print(f'patch_to_component_num = {model.patch_to_component_num}')
        #print(f'component_to_params = {model.component_to_params}')
        #print(f'component_num_to_name = {model.component_num_to_name}')
        #print(f'component_name_to_num = {model.component_name_to_num}')
        assert model.component_name_to_patch == {
            'ellipse': [1]
        }, model.component_name_to_patch
        assert model.patch_to_component_num == {
            0: 1
        }, model.patch_to_component_num
        assert model.component_to_params == {
            0: [5, 5, 1, 0, 0, 0.0, 1.0, 0.0, 1.0, 3.0, 3.0]
        }, model.component_to_params
        assert model.component_num_to_name == {
            0: 'ellipse'
        }, model.component_num_to_name
        assert model.component_name_to_num == {
            'ellipse': 0
        }, model.component_name_to_num

        areas = model.get_area_by_patch()
        assert np.allclose(areas, [266.47640991]), areas

        areas = model.get_area_by_component()
        assert np.allclose(areas['ellipse'], 266.47640991), areas

        areas, lengths = model.get_area_xlength_by_component()
        assert np.allclose(areas['ellipse'], 266.47640991), areas
        assert np.allclose(lengths['ellipse'], 20.0), lengths
コード例 #7
0
    def test_cut_plate_eids(self):
        """recover element ids"""
        log = SimpleLogger(level='warning', encoding='utf-8', log_func=None)
        bdf_filename = os.path.join(MODEL_PATH, 'plate_py', 'plate_py.dat')
        model = read_bdf(bdf_filename, log=log)
        nnodes = len(model.nodes)
        nodal_result = np.ones(nnodes)

        coord = CORD2R(1,
                       rid=0,
                       origin=[0., 0., 0.],
                       zaxis=[0., 0., 1],
                       xzplane=[1., 0., 0.],
                       comment='')
        model.coords[1] = coord
        ytol = 2.

        unique_geometry_array, unique_results_array, unused_rods = cut_face_model_by_coord(
            bdf_filename,
            coord,
            ytol,
            nodal_result,
            plane_atol=1e-5,
            skip_cleanup=True,
            csv_filename='cut_face.csv',
            plane_bdf_filename='plane_face.bdf',
        )
        #print(unique_geometry_array)
        #print(unique_results_array)
        unique_geometry_array = np.array(unique_geometry_array)
        unique_results_array = np.array(unique_results_array)
        assert unique_geometry_array.shape == (1, 40,
                                               4), unique_geometry_array.shape
        assert unique_results_array.shape == (1, 40,
                                              7), unique_results_array.shape
        unique_geometry_array = unique_geometry_array[0, :, :]
        unique_results_array = unique_results_array[0, :, :]

        assert unique_geometry_array.shape == (40,
                                               4), unique_geometry_array.shape
        assert unique_results_array.shape == (40,
                                              7), unique_results_array.shape
        #print(unique_geometry_array)
        #print(unique_results_array)
        os.remove('cut_face.csv')
        os.remove('plane_face.bdf')
コード例 #8
0
    def test_solid_bending(self):
        """tests solid_bending"""
        log = SimpleLogger(level='warning')
        bdf_filename = os.path.join(MODEL_PATH, 'solid_bending', 'solid_bending.bdf')
        model = read_bdfv(bdf_filename, validate=True, xref=False, punch=False,
                          skip_cards=None, encoding=None, log=log, debug=False,
                          mode='msc')
        #print(model.get_bdf_stats())

        #model.grids[10] = GRID(10, [0., 0., 0.])
        str(model.grid)
        str(model.grid[10]) # nid or index?
        str(model.grid.get_by_nid(10))
        out_filename = 'spike.bdf'
        model.write_bdf(out_filename, encoding=None, size=8, is_double=False,
                        interspersed=False, enddata=None,
                        close=True)
コード例 #9
0
    def _test_cut_box(self):  # pragma: no cover
        """recover element ids"""
        log = SimpleLogger(level='warning', encoding='utf-8', log_func=None)
        #bdf_filename = r'SEction_1_box.bdf'  # x-axis
        #normal_plane = np.array([1., 0., 0.])
        bdf_filename = 'SEction_1_box_4.bdf'  # y-axis
        normal_plane = np.array([0., 1., 0.])
        dys, coords = get_coords_box()
        y, A, I, J, EI, GJ, avg_centroid, plane_bdf_filenames = cut_and_plot_moi(
            bdf_filename, normal_plane, log,
            dys, coords,
            ytol=0.0,
            plot=True, show=True)

        show = True
        if IS_MATPLOTLIB:
            plot_inertia(y, A, I, J, EI, GJ, avg_centroid, show=show)
コード例 #10
0
    def test_clear_out_solids(self):
        """tests clear_out_solids"""
        deck = (
            "$ pyNastran: punch=True\n"
            "GRID,1\n"
            "GRID,2\n"
            "GRID,3\n"
            "GRID,4\n"
            "GRID,5\n"
            "GRID,6\n"
            "GRID,7\n"
            "GRID,8\n"
            "GRID,9\n"
            "GRID,10\n"
            "GRID,11\n"
            "GRID,12\n"
            "CHEXA,1,1, 5,6,7,8,9,10,\n"
            ",7,8\n"
            "CQUAD4,2,200, 1,2,3,4\n"
            # doesn't work
            #"CHEXA,1,1, 1,2,3,4,5,6,\n"
            #",7,8\n"
            #"CQUAD4,2,200, 8,9,10,11\n"
            "PSHELL,200,1000,0.1\n"
            "PSOLID,100,1000\n"
            "MAT1,1000,3.0e7,,0.3\n")

        bdf_filename = 'deck.bdf'
        bdf_clean_filename = 'clean.bdf'
        with open(bdf_filename, 'w') as bdf_file:
            bdf_file.write(deck)

        log = SimpleLogger(level='warning', encoding='utf-8')
        model = read_bdf(bdf_filename, xref=False, log=log)
        clear_out_solids(model,
                         bdf_clean_filename,
                         renumber=True,
                         equivalence=False,
                         equivalence_tol=0.01)

        model = read_bdf(bdf_clean_filename, log=log)
        assert len(model.nodes) == 4, len(model.nodes)
        assert len(model.elements) == 1, len(model.elements)
        os.remove(bdf_filename)
        os.remove(bdf_clean_filename)
コード例 #11
0
    def test_add_card_fail(self):
        log = SimpleLogger(level='info', encoding='utf-8')
        model = BDF(log=log, debug=False)
        card_lines1 = ['GRID', 1, 'a', 'b', 'c']
        card_lines2 = ['GRID', 1, 'd', 'e', 'f']
        with self.assertRaises(SyntaxError):
            model.add_card(card_lines1, 'GRID')

        model.set_error_storage(nparse_errors=100,
                                stop_on_parsing_error=True,
                                nxref_errors=100,
                                stop_on_xref_error=True)

        card_lines3 = ['GMSPC', 1, 'd', 'e', 'f']
        model.add_card(card_lines3, 'GMSPC')

        card_lines4 = ['GRDSET', 1, 'd2', 'e2', 'f2']
        model.add_card(card_lines4, 'GRDSET')
コード例 #12
0
    def test_export_mcids(self):
        """creates material coordinate systems"""
        log = SimpleLogger(level='error')
        bdf_filename = os.path.join(MODEL_PATH, 'bwb', 'bwb_saero.bdf')
        csv_filename = os.path.join(MODEL_PATH, 'bwb', 'mcids.csv')
        export_mcids(bdf_filename, csv_filename,
                     export_xaxis=True, export_yaxis=True,
                     iply=9, log=log, debug=False)

        model = read_bdf(bdf_filename, xref=False, debug=False)
        model.safe_cross_reference()
        #os.remove('mcids.csv')

        argv = ['bdf', 'export_mcids', bdf_filename, '-o', csv_filename,
                '--iplies', '0,1,2,3,4,5,6,7,8,9,10', '--no_x', '--no_y']
        with self.assertRaises(DocoptExit):
            # can't define both --no_x and --no_y
            cmd_line(argv=argv, quiet=True)

        argv = ['bdf', 'export_mcids', bdf_filename, '-o', csv_filename,
                '--iplies', '0,1,2,3,4,5,6,7,8,9', '--no_x']
        cmd_line(argv=argv, quiet=True)

        eids = [1204, 1211]
        export_mcids(model, csv_filename=None, eids=eids,
                     export_xaxis=True, export_yaxis=True,
                     iply=9, log=log, debug=False)
        export_mcids(model, csv_filename=None, eids=eids,
                     export_xaxis=True, export_yaxis=False,
                     iply=9, log=log, debug=False)
        export_mcids(model, csv_filename=None, eids=eids,
                     export_xaxis=False, export_yaxis=True,
                     iply=9, log=log, debug=False)
        with self.assertRaises(AssertionError):
            # export_xaxis and export_yaxis can't both be False
            export_mcids(model, csv_filename=None, eids=eids,
                         export_xaxis=False, export_yaxis=False,
                         iply=9)

        with self.assertRaises(RuntimeError):
            # no iply=10
            export_mcids(model, csv_filename, eids=eids,
                         export_xaxis=True, export_yaxis=True,
                         iply=10)
コード例 #13
0
 def test_encoding_write(self):
     """tests encodings in BDF header"""
     log = SimpleLogger(level='info', encoding='utf-8')
     mesh = BDF(log=log, debug=False)
     mesh.add_card(['GRID', 100000, 0, 43.91715, -29., .8712984], 'GRID')
     mesh.write_bdf('out.bdf')
     lines_expected = [
         '$pyNastran: version=msc',
         '$pyNastran: punch=True',
         '$pyNastran: encoding=utf-8\n',
         '$pyNastran: nnodes=1',
         '$pyNastran: nelements=0',
         '$NODES',
         'GRID      100000        43.91715    -29..8712984',
     ]
     bdf_filename = 'out.bdf'
     with open(bdf_filename, 'r', encoding='ascii') as bdf_file:
         lines = bdf_file.readlines()
         compare_lines(self, lines, lines_expected, has_endline=False)
コード例 #14
0
    def test_convert_02(self):
        """converts a full model units"""
        log = SimpleLogger(level='error')
        bdf_filename = os.path.abspath(
            os.path.join(pkg_path, '..', 'models', 'bwb', 'bwb_saero.bdf'))
        bdf_filename_out = os.path.abspath(
            os.path.join(pkg_path, '..', 'models', 'bwb', 'bwb_saero.out'))

        model = read_bdf(bdf_filename, log=log)
        units_to = ['m', 'kg', 's']
        units_from = ['in', 'lbm', 's']
        #units_to = units_from
        convert(model, units_to, units_from)
        model.write_bdf(bdf_filename_out)

        caero_bdf_filename = 'caero.bdf'
        export_caero_mesh(model, caero_bdf_filename=caero_bdf_filename)
        os.remove(bdf_filename_out)
        os.remove(caero_bdf_filename)
コード例 #15
0
ファイル: test_mesh_utils.py プロジェクト: ratalex/pyNastran
    def test_renumber_01(self):
        """renumber a bdf"""
        log = SimpleLogger(level='warning')
        bdf_filename = os.path.abspath(
            os.path.join(pkg_path, '..', 'models', 'bwb', 'bwb_saero.bdf'))
        bdf_filename_out1 = os.path.abspath(
            os.path.join(pkg_path, '..', 'models', 'bwb', 'bwb_saero1.out'))
        bdf_filename_out2 = os.path.abspath(
            os.path.join(pkg_path, '..', 'models', 'bwb', 'bwb_saero2.out'))
        bdf_filename_out3 = os.path.abspath(
            os.path.join(pkg_path, '..', 'models', 'bwb', 'bwb_saero3.out'))
        model = bdf_renumber(bdf_filename,
                             bdf_filename_out1,
                             size=8,
                             is_double=False,
                             starting_id_dict=None,
                             round_ids=False,
                             cards_to_skip=None)

        model = read_bdf(bdf_filename, log=log)
        bdf_renumber(model,
                     bdf_filename_out2,
                     size=16,
                     is_double=False,
                     starting_id_dict={
                         'eid': 1000,
                         'pid': 2000,
                         'mid': 3000,
                         'spc_id': 4000,
                     },
                     round_ids=False,
                     cards_to_skip=None)
        bdf_renumber(bdf_filename,
                     bdf_filename_out3,
                     size=8,
                     is_double=False,
                     starting_id_dict=None,
                     round_ids=True,
                     cards_to_skip=None)
        read_bdf(bdf_filename_out1, log=log)
        read_bdf(bdf_filename_out2, log=log)
        read_bdf(bdf_filename_out3, log=log)
コード例 #16
0
    def test_nastran_to_tecplot(self):
        """tests a large number of elements and results in SOL 101"""
        bdf_filename = os.path.join(MODEL_PATH, 'elements',
                                    'static_elements.bdf')
        tecplot_filename = os.path.join(MODEL_PATH, 'elements',
                                        'static_elements.plt')
        tecplot_filename2 = os.path.join(MODEL_PATH, 'elements',
                                         'static_elements2.plt')
        log = SimpleLogger(level='warning', encoding='utf-8')
        model = read_bdf(bdf_filename, log=log)
        with self.assertRaises(RuntimeError):
            nastran_to_tecplot(model)
        nastran_to_tecplot_filename(bdf_filename, tecplot_filename, log=log)

        argv = [
            'format_converter', 'nastran', bdf_filename, 'tecplot',
            tecplot_filename2
        ]
        with self.assertRaises(RuntimeError):
            cmd_line_format_converter(argv=argv, quiet=True)
コード例 #17
0
    def test_convert_isat(self):
        """converts a isat model"""
        log = SimpleLogger(level='error')
        model_path = os.path.join(pkg_path, '..', 'models', 'iSat')
        bdf_filename = os.path.join(model_path, 'ISat_Dploy_Sm.dat')
        bdf_filename_out = os.path.join(model_path, 'isat.bdf')
        bdf_filename_out2 = os.path.join(model_path, 'isat_converted.bdf')
        model = read_bdf(bdf_filename, log=log, validate=False)
        #card_lines = ['EIGRL', 42, None, None, 20]
        #model.add_card(card_lines, 'EIGRL')
        #model.case_control_deck = CaseControlDeck(lines)
        model.write_bdf(bdf_filename_out)
        #units_from = ['in', 'lbm', 's']
        units_from = ['mm', 'Mg', 's']
        units_to = ['m', 'kg', 's']

        convert(model, units_to, units=units_from)
        model.write_bdf(bdf_filename_out2)
        os.remove(bdf_filename_out)
        os.remove(bdf_filename_out2)
コード例 #18
0
    def test_add_card_skip(self):
        """tests that a fake card 'JUNK' is skipped"""
        log = SimpleLogger(level='info', encoding='utf-8')
        model = BDF(log=log, debug=False)

        card_name = 'JUNK'
        card_lines1 = ['JUNK', 1, 2, 3]
        card_lines2 = ['JUNK,a,b,c']
        model.add_card(card_lines1, card_name)
        model.add_card(card_lines2,
                       card_name,
                       comment='',
                       is_list=False,
                       has_none=True)
        bdf_file = StringIO()
        model.write_bdf(bdf_file, close=False)
        msg = bdf_file.getvalue()
        bdf_file.close()
        assert 'JUNK           1       2       3' in msg, msg
        assert 'JUNK           a       b       c' in msg, msg
コード例 #19
0
    def test_convert_01(self):
        """converts the CONM2s units"""
        log = SimpleLogger(level='error')
        model = BDF(log=log)
        eid = 1000
        nid = 100
        cid = 0
        mass = 247200.  # kg
        X = [30.16, 0., 3.55]  # m
        I11 = 1.39e7  # kg-m^2
        I22 = 3.66e7
        I33 = 4.99e7
        I13 = I12 = I23 = 0.
        I = I11, I12, I22, I13, I23, I33
        elem = CONM2(eid, nid, mass, cid=cid, X=X, I=I, comment='')
        model.masses[eid] = elem

        units_to = ['in', 'lbm', 's']
        units_from = ['m', 'kg', 's']
        convert(model, units_to, units=units_from)
コード例 #20
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.

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

        # 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')
コード例 #21
0
ファイル: test_read_write.py プロジェクト: ratalex/pyNastran
    def test_isat_02():
        """vectorized vs. standard test on ISat_Launch_Sm_4pt.dat"""
        log = SimpleLogger(level='error')
        bdf_filename = os.path.join(test_path, 'iSat',
                                    'ISat_Launch_Sm_4pt.dat')
        bdf_filename_outv = os.path.join(test_path, 'iSat',
                                         'ISat_Launch_Sm_4ptv.dat')
        bdf_filename_out = os.path.join(test_path, 'iSat',
                                        'ISat_Launch_Sm_4pt2.dat')

        vmodel = read_bdfv(bdf_filename)
        vmodel.write_bdf(bdf_filename_outv)
        model = read_bdf(bdf_filename, log=log)
        model.write_bdf(bdf_filename_out)

        run_and_compare_fems(
            bdf_filename,
            bdf_filename_outv,
            debug=False,
            xref=True,
            check=True,
            punch=False,
            cid=None,
            mesh_form=None,
            print_stats=False,
            encoding=None,
            sum_load=False,
            size=8,
            is_double=False,
            stop=False,
            nastran='',
            post=-1,
            dynamic_vars=None,
            quiet=False,
            dumplines=False,
            dictsort=False,
            nerrors=0,
            dev=False,
            crash_cards=None,
        )
        os.remove(bdf_filename_out)
コード例 #22
0
    def test_cgen(self):
        """tests CGEN"""
        log = SimpleLogger(level='warning')
        model = BDF(log=log, debug=False)
        model.add_grid(1, [0., 0., 0.])
        model.add_grid(2, [1., 0., 0.])
        model.add_grid(3, [1., 1., 0.])
        model.add_grid(4, [0., 1., 0.])
        #feedge = model.add_feedge()

        Type = 10
        field_eid = 'cat'
        pid = 20
        field_id = 30
        th_geom_opt = 301.
        eidl = 40
        eidh = 50
        cgen = CGEN(Type, field_eid, pid, field_id, th_geom_opt,
                    eidl, eidh)
        cgen.raw_fields()
        str(cgen)
コード例 #23
0
ファイル: bdf_unit_tests.py プロジェクト: zchlrnr/pyNastran
    def test_bdf_transfer_function_01(self):
        """checks transfer_function/actuator_tf_modeling.bdf"""
        log = SimpleLogger(level='warning', encoding='utf-8')
        bdf_filename = os.path.join(MODEL_PATH, 'transfer_function',
                                    'actuator_tf_modeling.bdf')
        fem1, fem2, diff_cards = self.run_bdf('', bdf_filename, log=log)
        diff_cards2 = list(set(diff_cards))
        diff_cards2.sort()
        assert len(diff_cards2) == 0, diff_cards2

        for fem in [fem1, fem2]:
            assert fem.card_count['CONM2'] == 3, fem.card_count
            assert fem.card_count['SPOINT'] == 1, fem.card_count
            assert fem.card_count['EPOINT'] == 1, fem.card_count
            assert fem.card_count['PARAM'] == 1, fem.card_count
            assert fem.card_count['CELAS2'] == 2, fem.card_count
            assert fem.card_count['GRID'] == 3, fem.card_count
            assert fem.card_count['EIGR'] == 1, fem.card_count
            assert fem.card_count['EIGC'] == 1, fem.card_count
            assert fem.card_count['MPC'] == 1, fem.card_count
            assert fem.card_count['TF'] == 2, fem.card_count
コード例 #24
0
    def test_tecplot_box(self):
        """simple UGRID3D box model"""
        ugrid_filename = os.path.join(UGRID_PATH, 'box.b8.ugrid')
        log = SimpleLogger(level='warning', encoding='utf-8')
        tecplot_filename2 = os.path.join(TECPLOT_PATH, 'box.plt')

        #ugrid_model = read_ugrid(ugrid_filename, log=log)
        tecplot = ugrid3d_to_tecplot_filename(ugrid_filename,
                                              tecplot_filename2,
                                              log=log)
        tecplot.write_tecplot(tecplot_filename2,
                              res_types=None,
                              adjust_nids=True)

        test = TecplotGUI()
        test.log = log
        tecplot_filename = os.path.join(TECPLOT_PATH, 'models', 'ascii',
                                        'point_fetri_2d_02.dat')
        test.on_load_geometry(tecplot_filename,
                              geometry_format='tecplot',
                              raise_error=True)
コード例 #25
0
ファイル: bdf_unit_tests.py プロジェクト: zchlrnr/pyNastran
    def test_bdf_02(self):
        """checks plate_py.dat"""
        log = SimpleLogger(level='warning', encoding='utf-8')
        bdf_filename = os.path.join(MODEL_PATH, 'plate_py', 'plate_py.dat')
        self.run_bdf('', bdf_filename, log=log)
        fem1, fem2, diff_cards = self.run_bdf('', bdf_filename, xref=True)

        etype_to_eids_pids_nids = fem1.get_elements_properties_nodes_by_element_type(
        )
        assert len(etype_to_eids_pids_nids) == 1, list(
            etype_to_eids_pids_nids.keys())
        #etype_to_eids_pids_nids[etype] : [eids, pids, nids]
        unused_eids, pids, unused_node_ids = etype_to_eids_pids_nids['CQUAD4']
        assert pids.min() == 1, pids.min()
        assert pids.max() == 1, pids.max()

        etype_pid_to_eids_nids, _etype_to_eids_pids_nids = fem1.get_elements_nodes_by_property_type(
            dtype='int32', save_element_types=False)
        #etype_pid_to_eids_nids[(etype, pid)] : [eids, nids]
        assert _etype_to_eids_pids_nids is None, _etype_to_eids_pids_nids
        assert len(etype_pid_to_eids_nids) == 1, list(
            etype_pid_to_eids_nids.keys())

        diff_cards2 = list(set(diff_cards))
        diff_cards2.sort()
        assert len(diff_cards2) == 0, diff_cards2

        for fem in [fem1, fem2]:
            assert len(fem.coords) == 3, 'len(coords) = %i' % len(fem.coords)
            assert len(fem.params) == 6, 'len(params) = %i' % len(fem.params)
            assert len(fem.nodes) == 231, 'len(nodes) = %i' % len(fem.nodes)
            assert len(
                fem.materials) == 1, 'len(materials) = %i' % len(fem.materials)
            assert len(
                fem.elements) == 200, 'len(elements) = %i' % len(fem.elements)
            assert len(
                fem.methods) == 1, 'len(methods) = %i' % len(fem.methods)
            assert len(fem.properties) == 1, 'len(properties) = %i' % len(
                fem.properties)
        compare_mass_cg_inertia(fem1)
コード例 #26
0
    def test_eq1(self):
        """Collapse nodes 2 and 3; consider 1-3"""
        log = SimpleLogger(level='error')
        msg = ('CEND\n'
               'BEGIN BULK\n'
               'GRID,1,,0.,0.,0.\n'
               'GRID,2,,0.,0.,0.5\n'
               'GRID,3,,0.,0.,0.51\n'
               'GRID,10,,0.,0.,1.\n'
               'GRID,11,,0.,0.,1.\n'
               'CTRIA3,1,1,1,2,11\n'
               'CTRIA3,3,1,2,3,11\n'
               'CTRIA3,4,1,1,2,10\n'
               'PSHELL,1,1,0.1\n'
               'MAT1,1,3.0,, 0.3\n'
               'ENDDATA')
        bdf_filename = 'nonunique.bdf'
        bdf_filename_out = 'unique.bdf'

        with open(bdf_filename, 'w') as bdf_file:
            bdf_file.write(msg)

        tol = 0.2
        bdf_equivalence_nodes(bdf_filename,
                              bdf_filename_out,
                              tol,
                              renumber_nodes=False,
                              neq_max=4,
                              xref=True,
                              node_set=None,
                              crash_on_collapse=False,
                              log=log,
                              debug=False)

        # model = BDF(debug=False)
        # model.read_bdf(bdf_filename_out)
        # assert len(model.nodes) == 3, len(model.nodes)

        os.remove(bdf_filename)
        os.remove(bdf_filename_out)
コード例 #27
0
ファイル: test_renumber.py プロジェクト: ratalex/pyNastran
    def test_renumber_05(self):
        """renumbers a deck in a couple ways"""
        log = SimpleLogger(level='error')
        bdf_filename = os.path.join(MODEL_PATH, 'bwb', 'bwb_saero.bdf')
        bdf_filename_out1 = os.path.join(MODEL_PATH, 'bwb', 'bwb_saero1.out')
        bdf_filename_out2 = os.path.join(MODEL_PATH, 'bwb', 'bwb_saero2.out')
        bdf_filename_out3 = os.path.join(MODEL_PATH, 'bwb', 'bwb_saero3.out')
        model = bdf_renumber(bdf_filename,
                             bdf_filename_out1,
                             size=8,
                             is_double=False,
                             starting_id_dict=None,
                             round_ids=False,
                             cards_to_skip=None,
                             debug=False)

        model = read_bdf(bdf_filename, log=log)
        bdf_renumber(model,
                     bdf_filename_out2,
                     size=16,
                     is_double=False,
                     starting_id_dict={
                         'eid': 1000,
                         'pid': 2000,
                         'mid': 3000,
                         'spc_id': 4000,
                     },
                     round_ids=False,
                     cards_to_skip=None)
        bdf_renumber(bdf_filename,
                     bdf_filename_out3,
                     size=8,
                     is_double=False,
                     starting_id_dict=None,
                     round_ids=True,
                     cards_to_skip=None)
        read_bdf(bdf_filename_out1, log=log)
        read_bdf(bdf_filename_out2, log=log)
        read_bdf(bdf_filename_out3, log=log)
コード例 #28
0
ファイル: bdf_unit_tests.py プロジェクト: zchlrnr/pyNastran
    def test_bdf_06(self):
        """checks bar3truss/vared_bar3.bdf"""
        log = SimpleLogger(level='warning', encoding='utf-8')
        bdf_filename = os.path.join(MODEL_PATH, 'bar3truss', 'vared_bar3.bdf')

        dynamic_vars = {
            'bar1_a': 1.0,
            'bar2_a': 1.0,
            'bar3_a': 1.0,
            'loadx': 1.0,
            'loady': 1.0,
            'loadmag': 10000.,
            'youngs': 1e7,
            'rho': 0.01,
        }
        fem1, fem2, diff_cards = self.run_bdf('',
                                              bdf_filename,
                                              dynamic_vars=dynamic_vars,
                                              log=log)
        diff_cards2 = list(set(diff_cards))
        diff_cards2.sort()
        assert len(diff_cards2) == 0, diff_cards2

        for fem in [fem1, fem2]:
            assert len(fem.params) == 4, 'len(params) = %i' % len(fem.params)
            assert len(fem.coords) == 1, 'len(coords) = %i' % len(fem.coords)
            assert len(fem.nodes) == 4, 'len(nodes) = %i' % len(fem.nodes)
            assert len(
                fem.materials) == 1, 'len(materials) = %i' % len(fem.materials)
            assert len(
                fem.elements) == 3, 'len(elements) = %i' % len(fem.elements)
            assert len(
                fem.methods) == 0, 'len(methods) = %i' % len(fem.methods)
            assert len(fem.properties) == 3, 'len(properties) = %i' % len(
                fem.properties)  # PBEAML issue

        fem1.cross_reference()
        fem1.pop_xref_errors()
        compare_mass_cg_inertia(fem1)
コード例 #29
0
    def test_include_05(self):
        log = SimpleLogger(level='info', encoding='utf-8')
        with open('include5.bdf', 'w') as bdf_file:
            bdf_file.write('$ pyNastran: punch=True\n')
            bdf_file.write('$ pyNastran: dumplines=True\n')
            bdf_file.write("INCLUDE 'include5b.inc'\n\n")

        with open('include5b.inc', 'w') as bdf_file:
            bdf_file.write('ECHOON\n')
            bdf_file.write('$ GRID comment\n')
            bdf_file.write('GRID,2,,2.0\n')
            bdf_file.write('ECHOOFF\n')
            bdf_file.write('GRID,3,,3.0\n')
            bdf_file.write('grid,4,,4.0\n')
            bdf_file.write('grid ,5,,5.0\n')

        model = BDF(log=log, debug=False)
        model.read_bdf('include5.bdf')
        assert model.echo is False, model.echo
        #model.write_bdf('include5.out.bdf')

        # os.remove('c.bdf')
        # os.remove('executive_control.inc')
        # os.remove('case_control.inc')

        self.assertEqual(len(model.nodes), 4)
        self.assertEqual(model.nnodes, 4, 'nnodes=%s' % model.nnodes)

        model2 = read_bdf(bdf_filename='include5.bdf',
                          xref=True,
                          punch=False,
                          log=log,
                          encoding=None)
        self.assertEqual(len(model2.nodes), 4)
        self.assertEqual(model2.nnodes, 4, 'nnodes=%s' % model.nnodes)
        os.remove('include5.bdf')
        #os.remove('include5.out.bdf')
        os.remove('include5b.inc')
        os.remove('pyNastran_dump.bdf')
コード例 #30
0
    def test_include_03(self):
        """tests executive/case control includes"""
        log = SimpleLogger(level='info', encoding='utf-8')
        with open('a.bdf', 'w') as bdf_file:
            bdf_file.write("INCLUDE 'executive_control.inc'\n\n")
            bdf_file.write('CEND\n')
            bdf_file.write("INCLUDE 'case_control.inc'\n\n")
            bdf_file.write('BEGIN BULK\n')
            bdf_file.write('GRID,1,,1.0\n')
            bdf_file.write("INCLUDE 'b.bdf'\n\n")
            bdf_file.write('GRID,4,,4.0\n')

        with open('executive_control.inc', 'w') as bdf_file:
            bdf_file.write('SOL = 103\n')

        with open('case_control.inc', 'w') as bdf_file:
            bdf_file.write('DISP = ALL\n')

        with open('b.bdf', 'w') as bdf_file:
            bdf_file.write('GRID,2,,2.0\n')
            bdf_file.write("INCLUDE 'c.bdf'\n\n")
            bdf_file.write('GRID,5,,5.0\n')

        with open('c.bdf', 'w') as bdf_file:
            bdf_file.write('GRID,3,,3.0\n\n')

        model = BDF(log=log, debug=False)
        model.read_bdf('a.bdf')
        model.write_bdf('a.out.bdf')

        os.remove('a.bdf')
        os.remove('b.bdf')
        os.remove('c.bdf')
        os.remove('executive_control.inc')
        os.remove('case_control.inc')

        os.remove('a.out.bdf')
        self.assertEqual(len(model.nodes), 5)
        self.assertEqual(model.nnodes, 5, 'nnodes=%s' % model.nnodes)