Ejemplo n.º 1
0
    def test_stl_io_02(self):
        lines = ('solid  testsphere\n'
                 '    facet normal -0.13 -0.13 -0.98\n'
                 '        outer loop\n'
                 '            vertex 1.50000 1.50000 0.00000\n'
                 '            vertex 1.50000 1.11177 0.05111\n'
                 '            vertex 1.11177 1.50000 0.05111\n'
                 '        endloop\n'
                 '    endfacet\n'
                 '    facet normal  0.13  0.13 -0.98\n'
                 '        outer loop\n'
                 '            vertex 1.50000 1.50000 0.00000\n'
                 '            vertex 1.50000 1.88823 0.05111\n'
                 '            vertex 1.88823 1.50000 0.05111\n'
                 '        endloop\n'
                 '    endfacet\n'
                 'endsolid\n')
        log = get_logger(level='warning')
        stl_filename = os.path.join(TEST_PATH, 'tris.stl')
        stl_out_filename = os.path.join(TEST_PATH, 'tris_out.stl')
        stl_bin_filename = os.path.join(TEST_PATH, 'tris_bin.stl')
        with open(stl_filename, 'w') as stl_file:
            stl_file.write(lines)

        stl = read_stl(stl_filename, log=log, debug=False)
        stl._get_normals_data(stl.elements)
        stl.write_stl(stl_out_filename, is_binary=False)
        stl_out = read_stl(stl_out_filename, log=log, debug=False)

        stl.write_stl(stl_bin_filename, is_binary=True)
        stl.write_stl(stl_bin_filename,
                      is_binary=True,
                      normalize_normal_vectors=True)
        stl_bin = read_stl(stl_bin_filename, log=log, debug=False)

        assert len(stl.nodes) == 6, 'nodes=%s' % len(stl.nodes)
        assert len(stl.elements) == 2, 'nelements=%s' % len(stl.elements)
        assert len(
            stl_out.elements) == 2, 'nelements=%s' % len(stl_out.elements)
        assert len(
            stl_bin.elements) == 2, 'nelements=%s' % len(stl_bin.elements)
        os.remove(stl_filename)
        os.remove(stl_out_filename)
Ejemplo n.º 2
0
    def test_mat8_01(self):  # should fail...
        """tests MAT8"""
        #lines = [  # fails???
        #    'MAT8*    4700007        1675.47         1675.47         .33             *   LHIG',
        #    '*   LHIG28.2            210000.         78000.                          *   LHIH',
        #    '*   LHIH1.32-5          1.32-5          75.             1.943           *   LHII',
        #    '*   LHII1.943           1.943           1.943           3.35',
        #]
        lines = [  # fails
            'MAT8*    4700010        2.83+6          1.14+6          .55             *   LHIJ',
            '*   LHIJ717000.         285194.         285194.                         *   LHIK',
            '*   LHIK9.17-6          2.606-5         70.                             *   LHIL',
            '*   LHIL',
        ]
        lines_expected = [
            'MAT8*            4700010        2830000.        1140000.             .55',
            '*                717000.         285194.         285194.',
            '*              .00000917       .00002606             70.',
            '*',
        ]

        log = get_logger(level='warning')
        model = BDF(log=log)
        card = model._process_card(lines)
        #print(print_card_8(card))
        cardi = BDFCard(card)
        card2 = MAT8.add_card(cardi)

        fields = card2.raw_fields()
        msg = print_card_8(fields)
        size = 16
        msg = card2.write_card(size, 'dummy')

        lines_actual = msg.rstrip().split('\n')
        msg = '\n%s\n\n%s' % ('\n'.join(lines_expected), msg)
        msg += 'nlines_actual=%i nlines_expected=%i' % (len(lines_actual),
                                                        len(lines_expected))
        #print(msg)
        self.assertEqual(len(lines_actual), len(lines_expected), msg)
        for actual, expected in zip(lines_actual, lines_expected):
            msg = 'actual   = %r\n' % actual
            msg += 'expected = %r' % expected
            self.assertEqual(actual, expected, msg)
Ejemplo n.º 3
0
    def test_strain(self):
        log = get_logger(level='warning')
        for folder, prefix, freqs in CASES:
            bdf = BDF(debug=False, log=log)
            basepath = os.path.join(pkg_path, 'op2', 'test', 'examples',
                                    folder)
            bdf.read_bdf(os.path.join(basepath, prefix + '.bdf'))
            op2 = read_op2(
                os.path.join(basepath, prefix + '.op2'),
                debug=False,
                log=log,
                exclude_results=['element_forces', 'stress'],
            )
            op2_new = data_in_material_coord(bdf, op2)

            for freq in freqs:
                for vecname in strain_vectors:
                    vector = getattr(op2_new, vecname).get(1)
                    if vector is None:
                        continue
                    if 'center' in prefix:
                        name = os.path.join(
                            basepath, f'{vecname}_center_freq_{freq:1.1f}.txt')
                    else:
                        name = os.path.join(
                            basepath, f'{vecname}_corner_freq_{freq:1.1f}.txt')
                    if not os.path.isfile(name):
                        raise AssertionError(
                            f'Not found reference result {name}')
                    ref_strain = np.loadtxt(name)
                    mag = ref_strain[:, 1::2]
                    phase = ref_strain[:, 2::2]
                    if freq == 1.0:
                        data = vector.data[0]
                    elif freq == 9.5:
                        data = vector.data[17]
                    eids = get_eids_from_op2_vector(vector)
                    check = eids != 0
                    assert np.allclose(np.abs(data[check]), mag, rtol=RTOL)
                    phase[np.isclose(mag, 0)] = 0
                    assert np.allclose(calc_phasedeg(data[check]),
                                       phase,
                                       rtol=RTOL)
Ejemplo n.º 4
0
    def test_opt_1(self):
        """tests SOL 200"""
        log = get_logger(level='warning')
        bdf_filename = os.path.join(MODEL_PATH, 'sol200', 'model_200.bdf')
        unused_model = read_bdf(bdf_filename, xref=True, debug=False)
        op2_filename = os.path.join(MODEL_PATH, 'sol200', 'model_200.op2')
        #bdf, op2 = run_model(bdf_filename, op2_filename,
        #f06_has_weight=False, vectorized=True,
        #encoding='utf-8')

        op2 = OP2(log=log, debug=True, debug_file='temp.debug')
        op2.read_op2(op2_filename)
        unused_subcase_ids = op2.subcase_key.keys()
        #for subcase_id in subcase_ids:
        #assert isinstance(subcase_id, integer_types), subcase_id
        #for key, dresp in sorted(model.dresps.items()):
        #print(dresp)
        #dresp.calculate(op2, subcase_id)
        os.remove('temp.debug')
Ejemplo n.º 5
0
    def test_ctrishell68(self):
        """tests a CPLSTN6, CPLSTN8/PSHELL/MAT8"""
        log = get_logger(level='warning')
        model = BDF(log=log)
        model.add_grid(1, [0., 0., 0.])
        model.add_grid(5, [.5, 0., 0.])
        model.add_grid(2, [1., 0., 0.])
        model.add_grid(6, [1., .5, 0.])
        model.add_grid(3, [1., 1., 0.])
        model.add_grid(7, [.5, 1., 0.])
        model.add_grid(4, [0., 1., 0.])
        model.add_grid(8, [0., .5, 0.])
        pid = 4
        eid = 3
        nids = [1, 2, 3, 4, 5, 6, 7, 8]
        cquad8 = model.add_cquad8(eid, pid, nids, comment='cquad8')

        eid = 5
        nids = [1, 2, 3, 4, 5, 6]
        mid = 10
        ctria6 = model.add_ctria6(eid, pid, nids, comment='ctria6')
        pplane = model.add_pplane(pid, mid, t=0.1, nsm=0.,
                                  formulation_option=0, comment='pplane')
        E = 1e7
        G = None
        nu = 0.3
        mat1 = model.add_mat1(mid, E, G, nu)

        ctria6.raw_fields()
        cquad8.raw_fields()
        pplane.raw_fields()

        model.validate()
        model._verify_bdf(xref=False)
        ctria6.write_card(size=8)
        cquad8.write_card(size=8)
        pplane.write_card(size=8)
        model.cross_reference()
        model.pop_xref_errors()

        model.uncross_reference()
        model.safe_cross_reference()
        save_load_deck(model, run_test_bdf=False)
Ejemplo n.º 6
0
 def test_nsm1(self):
     """tests the NSM1 card"""
     log = get_logger(level='warning', encoding='utf-8')
     model = BDF(debug=False, log=log)
     sid = 1
     #Type = 'PSHELL'
     nsmi = 0.1
     pid = 10
     mid = 100
     model.add_nsm1(sid, 'PSHELL', nsmi, [pid])
     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.])
     model.add_ctria3(1, pid, [1, 2, 3]) # A=0.5
     model.add_cquad4(2, pid, [1, 2, 3, 4]) # A=1.0
     model.add_pshell(pid, mid, t=0.1)
     model.add_mat1(mid, 3.0e7, None, 0.3)
     save_load_deck(model, run_convert=False)
Ejemplo n.º 7
0
 def test_pdamp(self):
     """PDAMP"""
     log = get_logger(level='warning')
     model = BDF(log=log)
     eid1 = 10
     eid2 = 20
     eid3 = 30
     eid4 = 40
     b1 = 1.0
     b2 = 2.0
     b3 = 3.0
     b4 = 4.0
     #nodes1 = [10, 20]
     #nodes2 = [20, 30]
     card_lines = ['PDAMP', eid1, b1, eid2, b2, eid3, b3, eid4, b4]
     model.add_card(card_lines, 'PDAMP', comment='', is_list=True, has_none=True)
     model.validate()
     model._verify_bdf()
     save_load_deck(model)
Ejemplo n.º 8
0
 def test_encoding_write(self):
     """tests encodings in BDF header"""
     log = get_logger(log=None, 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)
Ejemplo n.º 9
0
    def test_pconeax(self):
        """PCONEAX"""
        log = get_logger(level='warning')
        model = BDF(log=log)
        model.add_grid(1, [0., 0., 0.])
        pid = 100
        mid1 = 1000
        nsm = 0.0
        z1 = 0.
        z2 = 0.
        pconeax = model.add_pconeax(pid, mid1, t1=None, mid2=0, i=None, mid3=None,
                                    t2=None, nsm=nsm, z1=z1,
                                    z2=z2, phi=None,
                                    comment='pconeax')
        model.add_mat1(mid=mid1, E=3.0e7, G=None, nu=0.3)

        eid = 10
        rings = [2, 3]
        cconeax = model.add_cconeax(eid, pid, rings, comment='ccone')

        sid = 42
        ring = 6
        phi = 37.
        temperature = 420.
        tempax = model.add_tempax(sid, ring, phi, temperature, comment='tempax')

        R = 1.2
        z = 3.2
        ringax = model.add_ringax(ring, R, z, ps=None, comment='ringax')

        nid = 7
        pointax = model.add_pointax(nid, ring, phi, comment='pointax')

        nharmonics = 12
        axic = model.add_axic(nharmonics, comment='axic')
        tempax.raw_fields()
        ringax.raw_fields()
        pointax.raw_fields()
        cconeax.raw_fields()
        pconeax.raw_fields()
        axic.raw_fields()
        save_load_deck(model, run_mass_properties=False, run_test_bdf=False)
Ejemplo n.º 10
0
    def test_cquadx8(self):
        """tests a CQUADX, CTRIAX, CTRIAX6"""
        log = get_logger(level='warning')
        model = BDF(log=log)
        eid = 1
        pid = 10
        mid = 100
        model.add_grid(1, [0., 0., 0.])
        model.add_grid(5, [.5, 0., 0.])
        model.add_grid(2, [1., 0., 0.])
        model.add_grid(6, [1., .5, 0.])
        model.add_grid(3, [1., 1., 0.])
        model.add_grid(7, [.5, 1., 0.])
        model.add_grid(4, [0., 1., 0.])
        model.add_grid(8, [0., .5, 0.])
        model.add_grid(9, [.5, .5, 0.])
        nids = [1, 2, 3, 4, 5, 6, 7, 8]
        model.add_cquadx8(eid, pid, nids, theta=0., comment='cquadx8')

        eid = 2
        # 4---7---3
        # |     / |
        # 8   9   6
        # |/      |
        # 1---5---2
        nids = [1, 2, 3, 5, 6, 9]
        model.add_ctriax(eid, pid, nids, theta_mcid=0., comment='ctriax')

        eid = 3
        nids = [1, 5, 2, 6, 3, 9]
        model.add_ctriax6(eid, mid, nids, theta=0., comment='ctriax6')

        model.add_psolid(pid, mid)

        E = 3.0e7
        G = None
        nu = 0.3
        model.add_mat1(mid, E, G, nu)

        model.cross_reference()
        model.pop_xref_errors()
        save_load_deck(model, run_test_bdf=False)
    def test_force(self):
        log = get_logger(level='warning')
        for folder, prefix, freqs in CASES:
            bdf = BDF(debug=False, log=log)
            basepath = os.path.join(pkg_path, 'op2', 'test', 'examples',
                                    folder)
            bdf.read_bdf(os.path.join(basepath, prefix + '.bdf'))
            op2 = read_op2(
                os.path.join(basepath, prefix + '.op2'),
                debug=False,
                log=log,
                exclude_results=['stress', 'strain'],
            )
            op2_new = data_in_material_coord(bdf, op2)

            for freq in freqs:
                for vecname in force_vectors:
                    vector = getattr(op2_new, vecname).get(1)
                    if vector is None:
                        continue
                    if 'center' in prefix:
                        name = os.path.join(
                            basepath,
                            '%s_center_freq_%1.1f.txt' % (vecname, freq))
                    else:
                        name = os.path.join(
                            basepath,
                            '%s_corner_freq_%1.1f.txt' % (vecname, freq))
                    if not os.path.isfile(name):
                        raise AssertionError(
                            'Not found reference result {0}'.format(name))
                    ref_force = np.loadtxt(name)
                    mag = ref_force[0::2]
                    phase = ref_force[1::2]
                    if freq == 1.0:
                        data = vector.data[0]
                    elif freq == 9.5:
                        data = vector.data[17]
                    #eids = get_eids_from_op2_vector(vector)
                    #check = eids != 0
                    assert np.allclose(np.abs(data[:, :]), mag, rtol=RTOL)
                    assert np.allclose(calc_phasedeg(data), phase, rtol=RTOL)
Ejemplo n.º 12
0
    def test_cart3d_io_01(self):
        """geometry"""
        lines = ("7 6\n"
                 "0.000000 0.000000 0.000000\n"
                 "1.000000 0.000000 0.000000\n"
                 "2.000000 0.000000 0.000000\n"
                 "1.000000 1.000000 0.000000\n"
                 "2.000000 1.000000 0.000000\n"
                 "1.000000 -1.000000 0.000000\n"
                 "2.000000 -1.000000 0.000000\n"
                 "1 4 2\n"
                 "2 4 5\n"
                 "2 5 3\n"
                 "2 6 1\n"
                 "5 6 2\n"
                 "5 5 2\n"
                 "1\n"
                 "2\n"
                 "3\n"
                 "2\n"
                 "4\n"
                 "6\n")
        log = get_logger(level='warning', encoding='utf-8')
        infile_name = os.path.join(TEST_PATH, 'flat_full.tri')
        out_name = os.path.join(TEST_PATH, 'combined.tri')
        with open(infile_name, 'w') as f:
            f.write(lines)

        model = comp2tri([infile_name, infile_name],
                         out_name,
                         is_binary=False,
                         float_fmt='%6.7f',
                         log=log)
        read_cart3d(out_name, log=log, debug=False)

        cart3d = read_cart3d(infile_name, log=log, debug=False)
        assert len(cart3d.points) == 7, 'npoints=%s' % len(cart3d.points)
        assert len(cart3d.elements) == 6, 'nelements=%s' % len(cart3d.elements)
        assert len(cart3d.regions) == 6, 'nregions=%s' % len(cart3d.regions)
        assert len(cart3d.loads) == 0, 'nloads=%s' % len(cart3d.loads)
        os.remove(infile_name)
        os.remove(out_name)
Ejemplo n.º 13
0
    def test_panair_io_01(self):
        """test the M100 model"""
        log = get_logger(level='warning')
        in_filename = os.path.join(TEST_PATH, 'M100', 'M100.inp')
        out_filename = os.path.join(TEST_PATH, 'M100', 'M100_out.inp')
        #with open(infile_name, 'w') as f:
            #f.write(lines)

        model = PanairGrid(log=log, debug=False)
        model.read_panair(in_filename)
        model.write_panair(out_filename)
        (points, elements, regions, kt, cp_nrom) = model.get_points_elements_regions()

        model.write_panair('junk_m100.inp')
        os.remove('junk_m100.inp')
        model.print_options()
        model.print_abutments()
        model.print_grid_summary()
        model.print_out_header()
        os.remove(out_filename)
Ejemplo n.º 14
0
    def test_write_2(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(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)
        assert op2 == op2b
Ejemplo n.º 15
0
 def test_nxstrat(self):
     params = {
         #'AUTO' : 1,
         #'MAXITE' : 30,
         'RTOL' : 0.005,
         #'ATSNEXT' : 3,
         'A' : 1,
         'B' : 2,
         'C' : 3,
         'D' : 4,
         'E' : 5,
         'F' : 6,
         'G' : 7,
         'H' : 8,
     }
     log = get_logger(level='warning')
     model = BDF(log=log)
     nxstrat = model.add_nxstrat(42, params)
     nxstrat.raw_fields()
     save_load_deck(model) # , run_remove_unused=False
Ejemplo n.º 16
0
    def test_mats1(self):
        """tests MATS1"""
        log = get_logger(level='warning')
        model = BDF(log=log)
        mid = 10
        E = 3.0e7
        G = None
        nu = 0.3
        model.add_mat1(mid, E, G, nu)

        tid = None
        Type = 'NLELAST'
        h = None
        hr = None
        yf = None
        limit1 = None
        limit2 = None
        unused_mats1 = model.add_mats1(mid, tid, Type, h, hr, yf, limit1, limit2,
                                       comment='mats1')
        save_load_deck(model, xref='standard', punch=True, run_remove_unused=False)
Ejemplo n.º 17
0
    def test_add_card_skip(self):
        """tests that a fake card 'JUNK' is skipped"""
        log = get_logger(log=None, 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
Ejemplo n.º 18
0
    def test_ugrid2d(self):
        """simple UGRID2D model"""
        log = get_logger(level='warning')
        ugrid_filename = os.path.join(TEST_PATH, 'quad_tri.ugrid')
        #if not os.path.exists(ugrid_filename):
        msg = (
            #(nnodes, ntrias, nquads), ntets, npyram5, npenta6, nhexas8s
            '5 1 1   0 0 0 0\n'
            '0. 0. 0.\n'
            '1. 0. 0.\n'
            '1. 1. 0.\n'
            '0. 1. 0.\n'
            '0. 2. 0.\n'
            '3 4 5\n'
            '1 2 3 4\n')
        with open(ugrid_filename, 'w') as ugrid_file:
            ugrid_file.write(msg)

        model = UGRID2D_Reader(log=log, debug=True)
        model.read_ugrid(ugrid_filename)
Ejemplo n.º 19
0
    def test_tecplot_02(self):
        log = get_logger(level='warning')
        nastran_filename1 = os.path.join(NASTRAN_MODEL_PATH, 'solid_bending',
                                         'solid_bending.bdf')
        nastran_filename2 = os.path.join(NASTRAN_MODEL_PATH, 'solid_bending',
                                         'solid_bending2.bdf')
        tecplot_filename = os.path.join(NASTRAN_MODEL_PATH, 'solid_bending',
                                        'solid_bending.plt')
        tecplot = nastran_to_tecplot_filename(nastran_filename1,
                                              tecplot_filename,
                                              log=log)
        #tecplot.write_tecplot(tecplot_filename)
        tecplot_to_nastran_filename(tecplot_filename,
                                    nastran_filename2,
                                    log=log)
        #os.remove(nastran_filename2)
        #os.remove(tecplot_filename)

        bdf_model = read_bdf(nastran_filename1, log=log)
        unused_tecplot = nastran_to_tecplot(bdf_model)
Ejemplo n.º 20
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 = get_logger(log=None, 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)
Ejemplo n.º 21
0
    def test_avus_io_02(self):
        """geometry + results"""
        ndm = -1
        nzones = 1
        npatches = -1
        npoints, nfaces, ncells, mxppfs, mxfpcs = 5, 3, 3, -1, -1
        line0 = '%s %s %s\n' % (ndm, nzones, npatches)
        line1 = "%s %s %s %s %s\n" % (npoints, nfaces, ncells, mxppfs, mxfpcs)
        lines = (
            line0 + line1 +
            # nodes
            "0. 0. 0.\n"
            "1. 0. 0.\n"
            "2. 0. 0.\n"
            "1. 1. 0.\n"
            "2. 1. 0.\n"

            # faces?
            "3  1 4 2 11 -12\n"
            "3  2 4 5 11 -12\n"
            "3  2 5 3 11 -12\n")
        avus_filename = os.path.join(test_path, 'flat.tri')
        with open(avus_filename, 'w') as avus_file:
            avus_file.write(lines)

        log = get_logger(level='warning', encoding='utf-8')
        model = read_avus(avus_filename, log=log, debug=False)

        assert len(model.nodes) == 5, 'nnodes=%s' % len(model.nodes)
        assert len(
            model.tri_elements) == 3, 'nelements=%s' % len(model.tri_elements)
        #assert len(model.regions) == 3, 'nregions=%s' % len(model.regions)

        #assert len(model.loads) == 14, 'nloads=%s' % len(model.loads)  # was 10
        #assert len(model.loads['Cp']) == 5, 'nCp=%s' % len(model.loads['Cp'])

        outfile_name = os.path.join(test_path, 'flat.bin.tri')
        model.loads = None
        model.write_avus(outfile_name)
        os.remove(avus_filename)
        os.remove(outfile_name)
Ejemplo n.º 22
0
    def test_cdamp1_01(self):
        """tests a CDAMP1"""
        log = get_logger(level='warning')
        model = BDF(log=log)
        lines = ['CDAMP1, 2001, 20, 1001, 1']
        card = model._process_card(lines)
        card = BDFCard(card)

        size = 8
        elem = CDAMP1.add_card(card)
        self.assertEqual(elem.eid, 2001)
        self.assertEqual(elem.Pid(), 20)
        node_ids = elem.node_ids
        assert node_ids == [1001, None], node_ids
        elem.write_card(size, 'dummy')
        elem.raw_fields()

        pid = 1
        tbid = 2
        model.add_pdampt(pid, tbid, comment='pdampt')
        save_load_deck(model)
Ejemplo n.º 23
0
    def test_damper_01(self):
        """tests PDAMP"""
        lines = ['pdamp, 201, 1.e+5']
        log = get_logger(level='warning')
        model = BDF(log=log)
        card = model._process_card(lines)
        card = BDFCard(card)

        size = 8
        elem = PDAMP.add_card(card)
        elem.write_card(size, 'dummy')
        elem.raw_fields()
        self.assertEqual(elem.Pid(), 201)
        self.assertEqual(elem.B(), 1e5)

        fields = ['pelas', 201, 1.e+5, None, None, 202, 2.e+5]
        card_name = fields[0]
        model.add_card(fields, card_name, comment='', is_list=True,
                       has_none=True)
        assert len(model.properties) == 2, model.properties
        save_load_deck(model)
Ejemplo n.º 24
0
 def test_bdf_superelement_3(self):
     """checks cqrsee101b2.bdf"""
     bdf_filename = os.path.join(MODEL_PATH, 'superelements',
                                 'cqrsee101b2.bdf')
     log = get_logger(log=None, level='error', encoding='utf-8')
     (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
     bdf_filenames = {
         bdf_filename: 'cat.bdf',
     }
     fem1.write_bdfs(bdf_filenames)
     os.remove('cat.bdf')
Ejemplo n.º 25
0
    def test_damper_02(self):
        """tests CDAMP1, CDAMP2, PDAMP, PDAMPT, GRID"""
        log = get_logger(level='warning')
        model = BDF(log=log)
        eid = 1
        pid = 2
        nids = [3, 4]
        c1 = 1
        c2 = 1
        celas1 = model.add_cdamp1(eid, pid, nids, c1, c2, comment='cdamp1')
        celas1.raw_fields()
        celas1.write_card(size=8, is_double=False)

        b = 1.0e7
        pdamp = model.add_pdamp(pid, b, comment='pdamp')
        pdamp.raw_fields()
        pdamp.write_card(size=8, is_double=False)

        tbid = 10
        pdampt = model.add_pdampt(pid, tbid, comment='pdampt')
        pdampt.raw_fields()
        pdampt.write_card(size=8, is_double=False)

        eid = 5
        cdamp2 = model.add_cdamp2(eid, b, nids, comment='cdamp2')
        cdamp2.raw_fields()
        cdamp2.write_card(size=8, is_double=False)

        model.add_grid(3, [0., 0., 0.])
        model.add_grid(4, [0., 0., 0.])
        model.validate()
        model._verify_bdf(xref=False)
        model.cross_reference()
        model._verify_bdf(xref=True)

        bdf_file = StringIO()
        model.write_bdf(bdf_file, close=False)
        bdf_file.seek(0)
        unused_model2 = read_bdf(bdf_file, punch=True, debug=False)
        save_load_deck(model)
Ejemplo n.º 26
0
    def test_mass_3_4(self):
        """tests a CMASS3, PMASS, CMASS4"""
        log = get_logger(level='warning', encoding='utf-8')
        model = BDF(debug=False, log=log)
        eid = 1
        pid = 2
        s1 = 1
        s2 = 2
        cmass3 = model.add_cmass3(eid, pid, [s1, s2], comment='cmass3')
        cmass3.write_card(size=8)
        cmass3.write_card(size=16)
        cmass3.write_card(size=16, is_double=True)
        cmass3.raw_fields()

        mass = 142.
        pmass = model.add_pmass(pid, mass, comment='pmass')
        pmass.write_card(size=8)
        pmass.write_card(size=16)
        pmass.write_card(size=16, is_double=True)
        pmass.raw_fields()

        eid = 10
        cmass4 = model.add_cmass4(eid, mass, [s1, s2], comment='cmass4')
        cmass4.write_card(size=8)
        cmass4.write_card(size=16)
        cmass4.write_card(size=16, is_double=True)
        cmass4.raw_fields()

        model.add_spoint([1, 2])

        model.validate()
        model.pop_parse_errors()

        cmass3.write_card(size=8)
        cmass4.write_card(size=8)
        pmass.write_card(size=8)
        model.cross_reference()
        model.uncross_reference()
        save_load_deck(model)
Ejemplo n.º 27
0
    def __init__(self,
                 log=None,
                 debug=False,
                 read_shells=True,
                 read_solids=True):
        self.log = get_logger(log, 'debug' if debug else 'info')
        self.debug = debug
        self.n = 0

        self.nodes = array([], dtype='float32')
        self.tris = array([], dtype='int32')
        self.quads = array([], dtype='int32')
        self.pids = array([], dtype='int32')

        self.tets = array([], dtype='int32')
        self.penta5s = array([], dtype='int32')
        self.penta6s = array([], dtype='int32')
        self.hexas = array([], dtype='int32')
        self.read_shells = read_shells
        self.read_solids = read_solids

        self.isort = None
Ejemplo n.º 28
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)
Ejemplo n.º 29
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 = [
            '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, 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)
Ejemplo n.º 30
0
 def test_dtable(self):
     """
     tests:
      - DTABLE
      - DRESP2
     """
     log = get_logger(level='warning')
     model = BDF(log=log)
     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.])
     default_values = {
         'A': 1.0,
         'B1': 2.0,
         'C': -3.,
     }
     dtable = model.add_dtable(default_values, comment='table')
     str(dtable)
     #print(dtable)
     dresp_id = 42
     label = 'cat'
     dequation = 1000
     region = None
     params = {
         (0, 'DTABLE'): ['B1', 'C', 'A'],
     }
     dresp2 = model.add_dresp2(dresp_id,
                               label,
                               dequation,
                               region,
                               params,
                               method='MIN',
                               c1=1.,
                               c2=0.005,
                               c3=10.,
                               validate=True,
                               comment='')
     str(dresp2)