Beispiel #1
0
    def test_cord1_referencing_01(self):
        bulk_data_lines = [
            'CORD2C       300        253.345 171.174 197.495 242.9242270.3229205.2989+',
            '+       254.1607163.4128297.19',
            'CORD2R       301     3000.0     0.0     0.0     100.0   90.444676.406-13+',
            '+       100.0   -179.5557.514-13',
            'CORD2C       323        222.919 185.412 198.925 233.343986.26359191.1203+',
            '+       309.1199190.5056249.3577',
            'CORD2R        40        250.0   203.5575262.4969348.3264221.7756262.3345+',
            '+       250.0005202.6639162.5009',
            'CORD2R       111        253.345 171.174 197.495 263.764272.02488189.6917+',
            '+       153.8893160.7869196.6775',
            'CORD2C       112     1110.0     0.0     0.0     -7.88-14-2.58-14100.0   +',
            '+       100.0   -7.33-148.148-14',
            'CORD2C       114     1120.0     0.0     0.0     1.305-150.0     100.0   +',
            '+       100.0   -90.445 7.994-15',
            'CORD2R       116     1140.0     0.0     0.0     100.0   -90.0   -8.0-14 +',
            '+       100.0   180.0   9.859-14',
            'CORD2R       201        251.1275219.2556219.8197251.8979319.249 220.6651+',
            '+       253.9912220.0786119.8641',
            'CORD2R       202        251.4405218.3364184.3664256.3151317.7323174.5327+',
            '+       251.9847228.1553283.8817',
            'CORD2R       207        270.2522201.8565210.846 370.2484201.6459211.6994+',
            '+       271.1036200.9139110.8541',
            'CORD2R       208        230.5389215.4915162.7607234.0098310.4138131.4924+',
            '+       228.789 184.266867.77676',
            'CORD2R       511      400.0     0.0     0.0     -100.0  -1.7-13 -9.36-13+',
            '+       -9.19-131.074-12100.0',
            'CORD2R       321     3230.0     0.0     0.0     100.0   -3.26-141.363-13+',
            '+       100.0   90.0    1.11-13',
            'CORD2R        98        250.0   203.6961278.0626249.9841204.6729378.0579+',
            '+       315.2573127.9272278.8131',
            'CORD1R       932   23315   23310   22155',
            'GRID       22155     321-2.79-145.396   1.388-16     321       0',
            'GRID       23310        256.9914187.4238218.859      932       0',
            'GRID       23315     3210.0     0.0     0.0          932       0',
        ]
        model = BDF(debug=False)
        #model.echo = True
        #cards, card_count = model.get_bdf_cards(bulk_data_lines)
        cards_list = []
        cards_dict, card_count = model.get_bdf_cards_dict(bulk_data_lines)
        model._parse_cards(cards_list, cards_dict, card_count)

        #print(model.card_count)
        assert model.card_count['CORD1R'] == 1, model.card_count
        assert model.card_count['CORD2C'] == 4, model.card_count
        assert model.card_count['CORD2R'] == 11, model.card_count
        assert model.card_count['GRID'] == 3, model.card_count
        model.cross_reference()
        for unused_cid, coord in sorted(model.coords.items()):
            assert coord.i is not None, coord
Beispiel #2
0
def bdf_to_mac():
    # open bdf file
    _f = open(BDF_DIR, 'r')
    bulk_data_lines = _f.readlines()
    _f.close()
    bdf_check = parse_bdf(bulk_data_lines)

    # parse bdf file
    bdf = BDF()
    if bdf_check:
        bdf.read_bdf(BDF_DIR)
    else:
        cards_list, cards_dict, card_count = bdf.get_bdf_cards(bulk_data_lines)
        bdf._parse_cards(cards_list, cards_dict, card_count)
    print('bdf finished')

    _f_mac = open(MAC_DIR, 'w')
    head = 'finish\n'
    head += '/clear\n'
    head += '/prep7\n'
    _f_mac.write(head)

    # convert mac file
    mac_xyz = ''
    for grid_key in bdf.nodes:
        grid = bdf.nodes[grid_key]
        node_id = grid.nid
        node_xyz = grid.xyz
        mac_xyz += 'n,{},{},{},{}\n'.format(node_id, node_xyz[0], node_xyz[1],
                                            node_xyz[2])
    _f_mac.write(mac_xyz)

    # element_pro = 'et,1,shell41\n'
    element_pro = 'et,1,shell181\n'
    element_pro += 'mp,dens,1,2700\n'
    element_pro += 'mp,ex,1,70e9\n'
    element_pro += 'mp,prxy,1,0.3\n'
    element_pro += 'r,1,0.5\n'
    element_pro += 'type,1\n'
    element_pro += 'mat,1\n'
    element_pro += 'real,1\n'
    # element_pro += 'sect,1,shell,,\n'
    # element_pro += 'secdata,1.0,1,0.0,3\n'  # 1(mp), 0.0(orientation), 3(integration)
    # element_pro += 'secoffset,MID\n'  # mid(section offset)
    elements_mac = ''
    for ele_key in bdf.elements:
        element = bdf.elements[ele_key]
        element_id = element.pid
        element_nodes = element.node_ids
        if element.type == 'CQUAD4':
            elements_mac += 'e,{},{},{},{}\n'.format(element_nodes[0],
                                                     element_nodes[1],
                                                     element_nodes[2],
                                                     element_nodes[3])
    if elements_mac:
        _f_mac.write(element_pro + elements_mac)

    element_pro = 'et,2,solid185\n'
    element_pro += 'mp,dens,2,2700\n'
    element_pro += 'mp,ex,2,70e9\n'
    element_pro += 'mp,prxy,2,0.3\n'
    element_pro += 'r,2\n'
    element_pro += 'type,2\n'
    element_pro += 'mat,2\n'
    element_pro += 'real,2\n'
    elements_mac = ''
    for ele_key in bdf.elements:
        element = bdf.elements[ele_key]
        element_id = element.pid
        element_nodes = element.node_ids
        if element.type == 'CHEXA':
            elements_mac += 'e,{},{},{},{},{},{},{},{}\n'.format(
                element_nodes[0], element_nodes[1], element_nodes[2],
                element_nodes[3], element_nodes[4], element_nodes[5],
                element_nodes[6], element_nodes[7])
    if elements_mac:
        _f_mac.write(element_pro + elements_mac)

    # element_pro = 'et,3,beam4\n'
    element_pro = 'et,3,beam188\n'
    element_pro += 'mp,dens,3,2700\n'
    element_pro += 'mp,ex,3,70e9\n'
    element_pro += 'mp,prxy,3,0.3\n'
    element_pro += 'sectype,3,beam,hrec\n'
    element_pro += 'secdata,100,100,10,10,10,10\n'
    # element_pro += 'r,3,50,1000,1000,,,,,500\n'  # Area, Izz, Iyy,,,,,Ixx
    element_pro += 'type,3\n'
    element_pro += 'mat,3\n'
    element_pro += 'secnum,3\n'
    # element_pro += 'real,3\n'
    elements_mac = ''
    for ele_key in bdf.elements:
        element = bdf.elements[ele_key]
        element_id = element.pid
        element_nodes = element.node_ids
        if element.type == 'CQUAD4' or element.type == 'CHEXA' or element.type == 'CPENTA':
            continue
        if element.type == 'CBAR' and element_id.pid == 2:
            elements_mac += 'e,{},{}\n'.format(element_nodes[0],
                                               element_nodes[1])
    if elements_mac:
        _f_mac.write(element_pro + elements_mac)

    element_pro = 'et,5,beam188\n'
    element_pro += 'mp,dens,5,2700\n'
    element_pro += 'mp,ex,5,70e9\n'
    element_pro += 'mp,prxy,5,0.3\n'
    element_pro += 'sectype,5,beam,csolid\n'
    element_pro += 'secdata,10\n'
    element_pro += 'type,5\n'
    element_pro += 'mat,5\n'
    element_pro += 'secnum,5\n'
    elements_mac = ''
    for ele_key in bdf.elements:
        element = bdf.elements[ele_key]
        element_id = element.pid
        element_nodes = element.node_ids
        if element.type == 'CBAR' and element_id.pid == 3:
            elements_mac += 'e,{},{}\n'.format(element_nodes[0],
                                               element_nodes[1])
    if elements_mac:
        _f_mac.write(element_pro + elements_mac)

    element_pro = 'et,4,link180\n'
    element_pro += 'mp,dens,4,2700\n'
    element_pro += 'mp,ex,4,70e9\n'
    element_pro += 'mp,prxy,4,0.3\n'
    element_pro += 'r,4,1e-06,0,0\n'  # Area, Unit mass, drag/press
    element_pro += 'type,4\n'
    element_pro += 'mat,4\n'
    element_pro += 'real,4\n'
    elements_mac = ''
    for ele_key in bdf.elements:
        element = bdf.elements[ele_key]
        element_id = element.pid
        element_nodes = element.node_ids
        if element.type == 'CGAP':
            elements_mac += 'e,{},{}\n'.format(element_nodes[0],
                                               element_nodes[1])
    if elements_mac:
        _f_mac.write(element_pro + elements_mac)

    others = ''
    others += 'nsle,u\n'
    others += 'ndele,all\n'
    others += 'allsel,all\n'
    others += 'nsel,,loc,y,-100,80\n'
    others += 'cp,next,all,all\n'
    others += 'nsel,all\n'
    others += 'cp,next,all,1173,2313\n'  # Node 1173 2313
    others += 'cp,next,all,2312,1170\n'  # Node 2312 1170
    others += 'cp,next,all,2310,685\n'  # Node 2310 685
    others += 'cp,next,all,2311,682\n'  # Node 2311 682
    others += 'cp,next,all,1167,2303\n'  # Node 1167 2303
    others += 'cp,next,all,1164,2304\n'  # Node 1164 2304
    others += 'cp,next,all,679,2302\n'  # Node 679 2302
    others += 'cp,next,all,676,2305\n'  # Node 676 2305
    others += 'allsel,all\n'
    _f_mac.write(others)

    spc = ''
    spc += 'd,2298,all\n'
    spc += 'nsel,,loc,y,-240,-200\n'
    spc += 'd,all,all\n'  # d,node_id,ux
    spc += 'allsel,all\n'
    _f_mac.write(spc)

    force = ''
    force += 'f,2301,fz,50000\n'
    _f_mac.write(force)

    solve = ''
    solve += 'allsel,all\n'
    solve += 'eplot\n'
    solve += 'finish\n'
    solve += '/sol\n'
    solve += 'antype,0\n'
    solve += '/status,solu\n'
    solve += 'solve\n'
    _f_mac.write(solve)

    result = ''
    result += 'finish\n'
    result += '/post1\n'
    result += '/efacet,1\n'
    result += 'prnsol,u,comp\n'  # /format: first table num (7 + node/element id) + n * 12  (G12.5)
    result += 'presol,f\n'
    result += 'finish\n'  # *use,E:\work\611\vte\aerofoil\ansys\a\aaa.mac == nastran include card
    _f_mac.write(
        result)  # /prep7 and finish     /sol and finish     /post1 and finish

    _f_mac.close()