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
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()