def nastran_to_tecplot_filename(bdf_filename, tecplot_filename, log=None, debug=False): """converts a BDF file to Tecplot format; supports solid elements""" model = BDF(log=log, debug=debug) model.read_bdf(bdf_filename) # tecplot = nastran_to_tecplot(model) #log.info('card_count = %s' % model.card_count) nnodes = len(model.nodes) nodes = zeros((nnodes, 3), dtype='float64') elements = [] i = 0 nodeid_to_i_map = {} for node_id, node in sorted(model.nodes.items()): xyz = node.get_position() nodes[i, :] = xyz nodeid_to_i_map[node_id] = i i += 1 assert len(model.nodes) == i, 'model.nodes=%s i=%s' % (len(model.nodes), i) for unused_eid, element in sorted(model.elements.items()): if element.type in ['CTETRA']: n1, n2, n3, n4 = element.node_ids i1, i2, i3, i4 = (nodeid_to_i_map[n1], nodeid_to_i_map[n2], nodeid_to_i_map[n3], nodeid_to_i_map[n4]) elements.append([i1, i2, i3, i4, i4, i4, i4, i4]) elif element.type in ['CPENTA']: n1, n2, n3, n4, n5, n6 = element.node_ids i1, i2, i3, i4, i5, i6 = ( nodeid_to_i_map[n1], nodeid_to_i_map[n2], nodeid_to_i_map[n3], nodeid_to_i_map[n4], nodeid_to_i_map[n5], nodeid_to_i_map[n6]) elements.append([i1, i2, i3, i4, i5, i6, i6, i6]) elif element.type in ['CPYRAM']: n1, n2, n3, n4, n5 = element.node_ids i1, i2, i3, i4, i5 = ( nodeid_to_i_map[n1], nodeid_to_i_map[n2], nodeid_to_i_map[n3], nodeid_to_i_map[n4], nodeid_to_i_map[n5]) elements.append([i1, i2, i3, i4, i5, i5, i5, i5]) elif element.type in ['CHEXA']: n1, n2, n3, n4, n5, n6, n7, n8 = element.node_ids i1, i2, i3, i4, i5, i6, i7, i8 = ( nodeid_to_i_map[n1], nodeid_to_i_map[n2], nodeid_to_i_map[n3], nodeid_to_i_map[n4], nodeid_to_i_map[n5], nodeid_to_i_map[n6], nodeid_to_i_map[n7], nodeid_to_i_map[n8]) elements.append([i1, i2, i3, i4, i5, i6, i7, i8]) else: model.log.info('skip etype=%r' % element.type) model.log.info(element) elements = array(elements, dtype='int32') tecplot = Tecplot(log=model.log) tecplot.xyz = nodes tecplot.hexa_elements = elements tecplot.write_tecplot(tecplot_filename) tecplot.nodal_results = array([], dtype='float32') return tecplot
nid_map[nid] = inid for eid, elem in sorted(bdf_model.elements.items()): tris.append([nid_map[nid] for nid in elem.node_ids]) tecplot_model = Tecplot(log=bdf_model.log, debug=bdf_model.debug) tecplot_model.xyz = np.array(xyz, dtype='float64') tecplot_model.tri_elements = tris = np.array(tris, dtype='int32') + 1 tecplot_model.title = ('%s; %s' % (case.title, case.subtitle)).strip(' ;') tecplot_model.variables = variables return tecplot_model def nastran_tables_to_tecplot_filenames(tecplot_filename_base: str, bdf_model: BDF, case, variables=None, ivars=None): if variables is None: variables = case.headers if ivars is None: ivars = np.arange(0, len(variables)) tecplot_model = nastran_table_to_tecplot(bdf_model, case, variables) for itime, time in enumerate(case._times): if '%' in tecplot_filename_base: tecplot_filename = tecplot_filename_base % time else: tecplot_filename = tecplot_filename_base # you can't combine the two lines or it transposes it... nodal_results = case.data[itime, :, :] tecplot_model.nodal_results = nodal_results[:, ivars] tecplot_model.write_tecplot( tecplot_filename, res_types=None, adjust_nids=False)