def _write_boundary(ugrid, boundary_filename, tag_filename): """writes an OpenFOAM boundary file""" with open(boundary_filename, 'wb') as boundary_file: boundary_file.write('\n\n') #f.write('%i\n' % (nnodes)) boundary_file.write('(\n') uboundaries = unique(ugrid.pids) nboundaries = len(uboundaries) boundary_file.write('%i\n' % nboundaries) boundary_file.write('(\n') tagger = TagReader() tag_data = tagger.read_tag_filename(tag_filename) isort = argsort(ugrid.pids) ugrid.pids.sort() #print(isort) pids = ugrid.pids for iboundary in uboundaries: data = tag_data[iboundary] #name, is_visc, is_recon, is_rebuild, is_fixed, is_source, #is_trans, is_delete, bl_spacing, bl_thickness, nlayers = data name = data[0] i = where(iboundary == pids)[0] nfaces = i.max() - i.min() + 1 startface = i.min() if len(i) != nfaces: msg = 'The data is unsorted...len(i)=%s nfaces=%s' % (len(i), nfaces) raise RuntimeError(msg) boundary_file.write(' %s\n' % name) boundary_file.write(' {\n') boundary_file.write(' type patch;\n') #f.write(' type 1(wall);\n') # create a new group boundary_file.write(' nFaces %i;\n' % nfaces) boundary_file.write(' startFace %i;\n' % startface) boundary_file.write(' }\n') boundary_file.write(')\n') ugrid.isort = isort
def _fill_ugrid3d_case(self, base, cases, ID, nnodes, nelements, model): tag_filename = base + '.tags' mapbc_filename = base.split('.')[0] + '.mapbc' self.log.info('mapbc_filename = %r' % mapbc_filename) cases_new = [] has_tag_data = False has_mapbc_data = False results_form = [] mapbc_form = [] geometry_form = [ #('Region', 0, []), ('ElementID', 0, []), ('NodeID', 1, []), ('SurfaceID', 2, []), #('normSpacing', 3, []), #('BL_thick', 4, []), #('ReconFlag', 5, []), #('GridBC', 6, []), ] ntris = model.tris.shape[0] nquads = model.quads.shape[0] #nelements = ntris + nquads eids = arange(1, nelements + 1) nids = arange(1, nnodes + 1) #grid_bcs = element_props[:, 2] #npids = len(model.pids) pids = model.pids eid_res = GuiResult(0, header='ElementID', title='ElementID', location='centroid', scalar=eids) nid_res = GuiResult(0, header='NodeID', title='NodeID', location='node', scalar=nids) surface_res = GuiResult(0, header='SurfaceID', title='SurfaceID', location='centroid', scalar=pids) icase = 0 cases[icase] = (eid_res, (0, 'ElementID')) cases[icase + 1] = (nid_res, (0, 'NodeID')) cases[icase + 2] = (surface_res, (0, 'SurfaceID')) icase = 3 if os.path.exists(tag_filename): #surf_ids = element_props[:, 0] #recon_flags = element_props[:, 1] #cases[(ID, 2, 'ReconFlag', 1, 'centroid', '%i')] = recon_flags #cases[(ID, 3, 'GridBC', 1, 'centroid', '%i')] = grid_bcs tagger = TagReader() data = tagger.read_tag_filename(tag_filename) int_data = ones((nelements, 8), dtype='int32') * -10. float_data = zeros((nelements, 2), dtype='float64') for key, datai in sorted(iteritems(data)): #self.log.info(datai) [ name, is_visc, is_recon, is_rebuild, is_fixed, is_source, is_trans, is_delete, bl_spacing, bl_thickness, nlayers ] = datai i = where(pids == key)[0] int_data[i, :] = [ is_visc, is_recon, is_rebuild, is_fixed, is_source, is_trans, is_delete, nlayers ] float_data[i, :] = [bl_spacing, bl_thickness] self.log.info('data[%i] = %s' % (key, name)) has_tag_data = True tag_form = [] tag_form.append(('is_visc', icase, [])) tag_form.append(('is_recon', icase + 1, [])) tag_form.append(('is_rebuild', icase + 2, [])) tag_form.append(('is_fixed', icase + 3, [])) tag_form.append(('is_source', icase + 4, [])) tag_form.append(('is_trans', icase + 5, [])) tag_form.append(('is_delete', icase + 6, [])) tag_form.append(('nlayers', icase + 7, [])) tag_form.append(('bl_spacing', icase + 8, [])) tag_form.append(('bl_thickness', icase + 9, [])) visc_res = GuiResult(0, header='is_visc', title='is_visc', location='node', scalar=int_data[:, 0]) recon_res = GuiResult(0, header='is_recon', title='is_recon', location='node', scalar=int_data[:, 1]) rebuild_res = GuiResult(0, header='is_rebuild', title='is_rebuild', location='node', scalar=int_data[:, 2]) fixed_res = GuiResult(0, header='is_fixed', title='is_fixed', location='node', scalar=int_data[:, 3]) source_res = GuiResult(0, header='is_source', title='is_source', location='node', scalar=int_data[:, 4]) trans_res = GuiResult(0, header='is_trans', title='is_trans', location='node', scalar=int_data[:, 5]) delete_res = GuiResult(0, header='is_delete', title='is_delete', location='node', scalar=int_data[:, 6]) nlayers_res = GuiResult(0, header='nlayers', title='nlayers', location='node', scalar=int_data[:, 7]) spacing_res = GuiResult(0, header='bl_spacing', title='bl_spacing', location='centroid', scalar=float_data[:, 0]) blthickness_res = GuiResult(0, header='bl_thickness', title='bl_thickness', location='centroid', scalar=float_data[:, 1]) cases[icase] = (visc_res, (0, 'is_visc')) cases[icase + 1] = (recon_res, (0, 'is_recon')) cases[icase + 2] = (rebuild_res, (0, 'is_rebuild')) cases[icase + 3] = (fixed_res, (0, 'is_fixed')) cases[icase + 4] = (source_res, (0, 'is_source')) cases[icase + 5] = (trans_res, (0, 'is_trans')) cases[icase + 6] = (delete_res, (0, 'is_delete')) cases[icase + 7] = (nlayers_res, (0, 'nlayers')) cases[icase + 8] = (spacing_res, (0, 'bl_spacing')) cases[icase + 9] = (blthickness_res, (0, 'bl_thickness')) icase += 10 else: self.log.warning('tag_filename=%r could not be found' % tag_filename) if os.path.exists(mapbc_filename): has_mapbc_data = True mapbc = open(mapbc_filename, 'r') lines = mapbc.readlines() lines = [ line.strip() for line in lines if not line.strip().startswith('#') and line.strip() ] npatches = int(lines[0]) mapbcs = zeros(pids.shape, dtype='int32') for ipatch in range(npatches): line = lines[ipatch + 1] iline, bc_num, name = line.split() iline = int(iline) bc_num = int(bc_num) assert ipatch + 1 == iline, 'line=%r; ipatch=%s iline=%s' % ( line, ipatch + 1, iline) islot = where(pids == ipatch + 1)[0] if len(islot) == 0: upids = unique(pids) msg = 'ipatch=%s not found in pids=%s' % (ipatch + 1, upids) raise RuntimeError(msg) mapbcs[islot] = bc_num self.log.info(line) mapbc_form.append(('Map BC', icase, [])) mapbc_res = GuiResult(0, header='Map BC', title='Map BC', location='centroid', scalar=mapbcs) cases[icase + 9] = (mapbc_res, (0, 'Map BC')) else: self.log.warning('mapbc_filename=%r could not be found' % mapbc_filename) #norm_spacing = model.node_props[:, 0] #bl_thickness = model.node_props[:, 1] #cases[(ID, 1, 'normSpacing', 1, 'node', '%.3e', '')] = norm_spacing #cases[(ID, 2, 'BL_thick', 1, 'node', '%.3e', '')] = bl_thickness form = [ ('Geometry', None, geometry_form), ] if has_tag_data: form.append(('Tag Data', None, tag_form), ) if has_mapbc_data: form.append(('Map BC Data', None, mapbc_form), ) results_form = [] if len(results_form): form.append(('Results', None, results_form)) self.log.info(form) return form, cases
def _fill_surf_case(self, surf_filename, cases, ID, nnodes, nelements, model): """builds the results for the *.surf AFLR3 input file""" base, ext = os.path.splitext(surf_filename) assert ext == '.surf', surf_filename tag_filename = base + '.tags' cases_new = [] has_tag_data = False results_form = [] geometry_form = [ #('Region', 0, []), ('ElementID', 0, []), ('NodeID', 1, []), ('SurfaceID', 2, []), ('ReconFlag', 3, []), ('GridBC', 4, []), ('NormalX', 5, []), ('NormalY', 6, []), ('NormalZ', 7, []), ('normSpacing', 8, []), ('BL_thick', 9, []), ] nids = arange(1, nnodes + 1) norm_spacing = model.node_props[:, 0] bl_thickness = model.node_props[:, 1] ntris = model.tris.shape[0] nquads = model.quads.shape[0] #nelements = ntris + nquads eids = arange(1, nelements + 1) if ntris and nquads: element_props = vstack([model.tri_props, model.quad_props]) elif ntris: element_props = model.tri_props elif nquads: element_props = model.quad_props surf_ids = element_props[:, 0] recon_flags = element_props[:, 1] grid_bcs = element_props[:, 2] #print(unique(grid_bcs)) normals = model.get_normals() eid_res = GuiResult(0, header='ElementID', title='ElementID', location='centroid', scalar=eids) nid_res = GuiResult(0, header='NodeID', title='NodeID', location='node', scalar=nids) surface_res = GuiResult(0, header='SurfaceID', title='SurfaceID', location='centroid', scalar=surf_ids) recon_res = GuiResult(0, header='ReconFlag', title='ReconFlag', location='centroid', scalar=recon_flags) gridbc_res = GuiResult(0, header='GridBC', title='GridBC', location='centroid', scalar=grid_bcs) normalx_res = GuiResult(0, header='NormalX', title='NormalX', location='centroid', scalar=normals[:, 0]) normaly_res = GuiResult(0, header='NormalY', title='NormalY', location='centroid', scalar=normals[:, 1]) normalz_res = GuiResult(0, header='NormalZ', title='NormalZ', location='centroid', scalar=normals[:, 2]) normspacing_res = GuiResult(0, header='NormSpacing', title='NormSpacing', location='node', scalar=norm_spacing) blthick_res = GuiResult(0, header='BL_thick', title='BL_thick', location='node', scalar=bl_thickness) icase = 0 cases[icase] = (eid_res, (0, 'ElementID')) cases[icase + 1] = (nid_res, (0, 'NodeID')) cases[icase + 2] = (surface_res, (0, 'SurfaceID')) cases[icase + 3] = (recon_res, (0, 'ReconFlag')) cases[icase + 4] = (gridbc_res, (0, 'GridBC')) cases[icase + 5] = (normalx_res, (0, 'NormalX')) cases[icase + 6] = (normaly_res, (0, 'NormalY')) cases[icase + 7] = (normalz_res, (0, 'NormalZ')) cases[icase + 8] = (normspacing_res, (0, 'NormSpacing')) cases[icase + 9] = (blthick_res, (0, 'BL_thick')) icase += 10 if os.path.exists(tag_filename): tagger = TagReader() data = tagger.read_tag_filename(tag_filename) int_data = ones((nelements, 8), dtype='int32') * -10. float_data = zeros((nelements, 2), dtype='float64') for key, datai in sorted(iteritems(data)): #self.log.info(datai) [name, is_visc, is_recon, is_rebuild, is_fixed, is_source, is_trans, is_delete, bl_spacing, bl_thickness, nlayers] = datai i = where(surf_ids == key)[0] int_data[i, :] = [is_visc, is_recon, is_rebuild, is_fixed, is_source, is_trans, is_delete, nlayers] float_data[i, :] = [bl_spacing, bl_thickness] self.log.info('data[%i] = %s' % (key, name)) has_tag_data = True tag_form = [] tag_form.append(('is_visc', icase, [])) tag_form.append(('is_recon', icase + 1, [])) tag_form.append(('is_rebuild', icase + 2, [])) tag_form.append(('is_fixed', icase + 3, [])) tag_form.append(('is_source', icase + 4, [])) tag_form.append(('is_trans', icase + 5, [])) tag_form.append(('is_delete', icase + 6, [])) tag_form.append(('nlayers', icase + 7, [])) tag_form.append(('bl_spacing', icase + 8, [])) tag_form.append(('bl_thickness', icase + 9, [])) visc_res = GuiResult(0, header='is_visc', title='is_visc', location='centroid', scalar=int_data[:, 0]) recon_res = GuiResult(0, header='is_recon', title='is_recon', location='centroid', scalar=int_data[:, 1]) rebuild_res = GuiResult(0, header='is_rebuild', title='is_rebuild', location='centroid', scalar=int_data[:, 2]) fixed_res = GuiResult(0, header='is_fixed', title='is_fixed', location='centroid', scalar=int_data[:, 3]) source_res = GuiResult(0, header='is_source', title='is_source', location='centroid', scalar=int_data[:, 4]) trans_res = GuiResult(0, header='is_trans', title='is_trans', location='centroid', scalar=int_data[:, 5]) delete_res = GuiResult(0, header='is_delete', title='is_delete', location='centroid', scalar=int_data[:, 6]) nlayers_res = GuiResult(0, header='nlayers', title='nlayers', location='centroid', scalar=int_data[:, 7]) spacing_res = GuiResult(0, header='bl_spacing', title='bl_spacing', location='centroid', scalar=float_data[:, 0]) blthickness_res = GuiResult(0, header='bl_thickness', title='bl_thickness', location='centroid', scalar=float_data[:, 1]) cases[icase] = (visc_res, (0, 'is_visc')) cases[icase + 1] = (recon_res, (0, 'is_recon')) cases[icase + 2] = (rebuild_res, (0, 'is_rebuild')) cases[icase + 3] = (fixed_res, (0, 'is_fixed')) cases[icase + 4] = (source_res, (0, 'is_source')) cases[icase + 5] = (trans_res, (0, 'is_trans')) cases[icase + 6] = (delete_res, (0, 'is_delete')) cases[icase + 7] = (nlayers_res, (0, 'nlayers')) cases[icase + 8] = (spacing_res, (0, 'bl_spacing')) cases[icase + 9] = (blthickness_res, (0, 'bl_thickness')) form = [ ('Geometry', None, geometry_form), ] if has_tag_data: form.append(('Tag Data', None, tag_form),) results_form = [] if len(results_form): form.append(('Results', None, results_form)) return form, cases