Exemplo n.º 1
0
class ShabpIO(object):
    def __init__(self):
        pass

    def get_shabp_wildcard_geometry_results_functions(self):
        data = ('S/HABP',
                'Shabp (*.geo; *.mk5; *.inp)', self.load_shabp_geometry,
                'Shabp (*.out)', self.load_shabp_results)
        return data

    def load_shabp_geometry(self, shabpFilename, dirname, name='main', plot=True):
        self.nid_map = {}

        #key = self.case_keys[self.icase]
        #case = self.result_cases[key]

        skip_reading = self.removeOldGeometry(shabpFilename)
        if skip_reading:
            return

        self.model = SHABP(log=self.log, debug=self.debug)
        self.model_type = 'shabp' # model.model_type
        self.model.read_shabp(shabpFilename)

        nodes, elements, patches, components, impact, shadow = self.model.getPointsElementsRegions()
        #for nid,node in enumerate(nodes):
            #print "node[%s] = %s" %(nid,str(node))

        self.nNodes = len(nodes)
        self.nElements = len(elements)

        #print("nNodes = ",self.nNodes)
        #print("nElements = ", self.nElements)

        self.grid.Allocate(self.nElements, 1000)
        #self.gridResult.SetNumberOfComponents(self.nElements)

        points = vtk.vtkPoints()
        points.SetNumberOfPoints(self.nNodes)
        #self.gridResult.Allocate(self.nNodes, 1000)
        #vectorReselt.SetNumberOfComponents(3)
        #elem.SetNumberOfPoints(nNodes)
        if 0:
            fraction = 1. / nNodes  # so you can color the nodes by ID
            for nid, node in sorted(iteritems(nodes)):
                points.InsertPoint(nid - 1, *node)
                self.gridResult.InsertNextValue(nid * fraction)
                #print str(element)

                #elem = vtk.vtkVertex()
                #elem.GetPointIds().SetId(0, i)
                #self.aQuadGrid.InsertNextCell(elem.GetCellType(), elem.GetPointIds())
                #vectorResult.InsertTuple3(0, 0.0, 0.0, 1.0)

        assert len(nodes) > 0
        mmax = amax(nodes, axis=0)
        mmin = amin(nodes, axis=0)
        dim_max = (mmax - mmin).max()
        self.create_global_axes(dim_max)
        for nid, node in enumerate(nodes):
            points.InsertPoint(nid, *node)

        assert len(elements) > 0
        for eid, element in enumerate(elements):
            (p1, p2, p3, p4) = element
            #print "element = ",element
            elem = vtkQuad()
            elem.GetPointIds().SetId(0, p1)
            elem.GetPointIds().SetId(1, p2)
            elem.GetPointIds().SetId(2, p3)
            elem.GetPointIds().SetId(3, p4)
            self.grid.InsertNextCell(elem.GetCellType(), elem.GetPointIds())

        #print("eid = ", eid)
        self.grid.SetPoints(points)
        #self.grid.GetPointData().SetScalars(self.gridResult)
        #print dir(self.grid) #.SetNumberOfComponents(0)
        #self.grid.GetCellData().SetNumberOfTuples(1);
        #self.grid.GetCellData().SetScalars(self.gridResult)
        self.grid.Modified()
        if hasattr(self.grid, 'Update'):
            self.grid.Update()

        # loadCart3dResults - regions/loads
        self. turn_text_on()
        self.scalarBar.VisibilityOn()
        self.scalarBar.Modified()

        self.iSubcaseNameMap = {1: ['S/HABP', '']}
        cases = {}
        ID = 1

        self.log.debug("nNodes=%i nElements=%i" % (self.nNodes, self.nElements))
        form, cases = self._fill_shabp_geometry_case(cases, ID, nodes, elements, patches, components, impact, shadow)
        self._finish_results_io2(form, cases)

    def clear_shabp(self):
        del self.elements
        del self.model

    def _fill_shabp_geometry_case(self, cases, ID, nodes, elements, patches, components, impact, shadow):
        self.elements = elements

        icase = 0
        location_form = [
            ('centroidX', icase + 5, []),
            ('centroidY', icase + 6, []),
            ('centroidZ', icase + 7, []),

            ('nodeX', icase + 8, []),
            ('nodeY', icase + 9, []),
            ('nodeZ', icase + 10, []),
        ]

        geometry_form = [
            ('Component', icase, []),
            ('PatchID', icase + 1, []),
            ('Impact', icase + 2, []),
            ('Shadow', icase + 3, []),
            ('Area', icase + 4, []),
            ('Location', None, location_form),
        ]
        form = [
            ('Geometry', None, geometry_form),
        ]
        cases[(ID, icase, 'Component', 1, 'centroid', '%i', '')] = components
        cases[(ID, icase + 1, 'PatchID', 1, 'centroid', '%i', '')] = patches
        cases[(ID, icase + 2, 'Impact', 1, 'centroid', '%i', '')] = impact
        cases[(ID, icase + 3, 'Shadow', 1, 'centroid', '%i', '')] = shadow

        XYZc = zeros((len(elements), 3), dtype='float32')
        #Normal = zeros((len(elements),3), dtype='float32')
        area = zeros(len(elements), dtype='float32')

        for i, element in enumerate(elements):
            p1, p2, p3, p4 = element
            P1 = array(nodes[p1])
            P2 = array(nodes[p2])
            P3 = array(nodes[p3])
            P4 = array(nodes[p4])
            a = P3 - P1
            b = P4 - P2
            n = cross(a, b)
            nnorm = norm(n)
            #normal = n / nnorm
            A = 0.5 * nnorm

            XYZc[i, :] = (P1 + P2 + P3 + P4) / 4.0
            #Normal[i, :] = normal
            area[i] = A
        cases[(ID, icase + 4, 'Area', 1, 'centroid', '%.2f')] = area
        cases[(ID, icase + 5, 'centroidX', 1, 'centroid', '%.2f', '')] = XYZc[:, 0]
        cases[(ID, icase + 6, 'centroidY', 1, 'centroid', '%.2f', '')] = XYZc[:, 1]
        cases[(ID, icase + 7, 'centroidZ', 1, 'centroid', '%.2f', '')] = XYZc[:, 2]

        #cases[(ID, 'normalX', 1, 'centroid', '%.2f')] = Normal[:,0]
        #cases[(ID, 'normalY', 1, 'centroid', '%.2f')] = Normal[:,1]
        #cases[(ID, 'normalZ', 1, 'centroid', '%.2f')] = Normal[:,2]

        Xn = zeros(len(nodes), dtype='float32')
        Yn = zeros(len(nodes), dtype='float32')
        Zn = zeros(len(nodes), dtype='float32')
        for i, node in enumerate(nodes):
            Xn[i] = node[0]
            Yn[i] = node[1]
            Zn[i] = node[2]
        cases[(ID, icase + 8, 'nodeX', 1, 'node', '%.2f', '')] = Xn
        cases[(ID, icase + 9, 'nodeY', 1, 'node', '%.2f', '')] = Yn
        cases[(ID, icase + 10, 'nodeZ', 1, 'node', '%.2f', '')] = Zn
        return form, cases

    def load_shabp_results(self, shabp_filename, dirname):
        Cpd, deltad = self.model.read_shabp_out(shabp_filename)

        cases = self.result_cases
        icase = len(cases)
        mach_results = []
        form = self.form
        form.append(('Results', None, mach_results))
        #self.result_cases = {}
        mach_forms = {}
        for case_id, Cp in sorted(iteritems(Cpd)):
            Cp = Cpd[case_id]
            #delta = deltad[case_id]

            mach, alpha, beta = self.model.shabp_cases[case_id]
            #name = 'Mach=%g Alpha=%g' % (mach, alpha)
            name = 'Mach=%g Alpha=%g' % (mach, alpha)
            cases[(name, icase, 'Cp', 1, 'centroid', '%.3f', '')] = Cp
            cp_form = [
                ('Cp', icase, [])
            ]
            mach_forms[mach].append(('Cp', None, cp_form))
            #self.result_cases[(name, 'delta', 1, 'centroid', '%.3f')] = delta

        for mach, mach_form in sorted(iteritems(mach_forms)):
            mach_results.append(mach_form)
        self._finish_results_io2(form, cases)
Exemplo n.º 2
0
    def load_shabp_geometry(self, shabpFilename, dirname, name='main', plot=True):
        self.nid_map = {}

        #key = self.case_keys[self.icase]
        #case = self.result_cases[key]

        skip_reading = self.removeOldGeometry(shabpFilename)
        if skip_reading:
            return

        self.model = SHABP(log=self.log, debug=self.debug)
        self.model_type = 'shabp' # model.model_type
        self.model.read_shabp(shabpFilename)

        nodes, elements, patches, components, impact, shadow = self.model.getPointsElementsRegions()
        #for nid,node in enumerate(nodes):
            #print "node[%s] = %s" %(nid,str(node))

        self.nNodes = len(nodes)
        self.nElements = len(elements)

        #print("nNodes = ",self.nNodes)
        #print("nElements = ", self.nElements)

        self.grid.Allocate(self.nElements, 1000)
        #self.gridResult.SetNumberOfComponents(self.nElements)

        points = vtk.vtkPoints()
        points.SetNumberOfPoints(self.nNodes)
        #self.gridResult.Allocate(self.nNodes, 1000)
        #vectorReselt.SetNumberOfComponents(3)
        #elem.SetNumberOfPoints(nNodes)
        if 0:
            fraction = 1. / nNodes  # so you can color the nodes by ID
            for nid, node in sorted(iteritems(nodes)):
                points.InsertPoint(nid - 1, *node)
                self.gridResult.InsertNextValue(nid * fraction)
                #print str(element)

                #elem = vtk.vtkVertex()
                #elem.GetPointIds().SetId(0, i)
                #self.aQuadGrid.InsertNextCell(elem.GetCellType(), elem.GetPointIds())
                #vectorResult.InsertTuple3(0, 0.0, 0.0, 1.0)

        assert len(nodes) > 0
        mmax = amax(nodes, axis=0)
        mmin = amin(nodes, axis=0)
        dim_max = (mmax - mmin).max()
        self.create_global_axes(dim_max)
        for nid, node in enumerate(nodes):
            points.InsertPoint(nid, *node)

        assert len(elements) > 0
        for eid, element in enumerate(elements):
            (p1, p2, p3, p4) = element
            #print "element = ",element
            elem = vtkQuad()
            elem.GetPointIds().SetId(0, p1)
            elem.GetPointIds().SetId(1, p2)
            elem.GetPointIds().SetId(2, p3)
            elem.GetPointIds().SetId(3, p4)
            self.grid.InsertNextCell(elem.GetCellType(), elem.GetPointIds())

        #print("eid = ", eid)
        self.grid.SetPoints(points)
        #self.grid.GetPointData().SetScalars(self.gridResult)
        #print dir(self.grid) #.SetNumberOfComponents(0)
        #self.grid.GetCellData().SetNumberOfTuples(1);
        #self.grid.GetCellData().SetScalars(self.gridResult)
        self.grid.Modified()
        if hasattr(self.grid, 'Update'):
            self.grid.Update()

        # loadCart3dResults - regions/loads
        self. turn_text_on()
        self.scalarBar.VisibilityOn()
        self.scalarBar.Modified()

        self.iSubcaseNameMap = {1: ['S/HABP', '']}
        cases = {}
        ID = 1

        self.log.debug("nNodes=%i nElements=%i" % (self.nNodes, self.nElements))
        form, cases = self._fill_shabp_geometry_case(cases, ID, nodes, elements, patches, components, impact, shadow)
        self._finish_results_io2(form, cases)
Exemplo n.º 3
0
class ShabpIO(object):
    def __init__(self):
        pass

    def get_shabp_wildcard_geometry_results_functions(self):
        data = ('S/HABP',
                'Shabp (*.geo; *.mk5; *.inp)', self.load_shabp_geometry,
                'Shabp (*.out)', self.load_shabp_results)
        return data

    def load_shabp_geometry(self, shabpFilename, dirname, name='main', plot=True):
        self.nid_map = {}

        #key = self.case_keys[self.icase]
        #case = self.result_cases[key]

        skip_reading = self._remove_old_geometry(shabpFilename)
        if skip_reading:
            return

        self.model = SHABP(log=self.log, debug=self.debug)
        self.model_type = 'shabp' # model.model_type
        self.model.read_shabp(shabpFilename)

        nodes, elements, patches, components, impact, shadow = self.model.getPointsElementsRegions()
        #for nid,node in enumerate(nodes):
            #print "node[%s] = %s" %(nid,str(node))

        self.nNodes = len(nodes)
        self.nElements = len(elements)

        #print("nNodes = ",self.nNodes)
        #print("nElements = ", self.nElements)

        self.grid.Allocate(self.nElements, 1000)
        #self.gridResult.SetNumberOfComponents(self.nElements)

        points = vtk.vtkPoints()
        points.SetNumberOfPoints(self.nNodes)
        #self.gridResult.Allocate(self.nNodes, 1000)
        #vectorReselt.SetNumberOfComponents(3)
        #elem.SetNumberOfPoints(nNodes)
        if 0:
            fraction = 1. / nNodes  # so you can color the nodes by ID
            for nid, node in sorted(iteritems(nodes)):
                points.InsertPoint(nid - 1, *node)
                self.gridResult.InsertNextValue(nid * fraction)
                #print str(element)

                #elem = vtk.vtkVertex()
                #elem.GetPointIds().SetId(0, i)
                #self.aQuadGrid.InsertNextCell(elem.GetCellType(), elem.GetPointIds())
                #vectorResult.InsertTuple3(0, 0.0, 0.0, 1.0)

        assert len(nodes) > 0
        mmax = amax(nodes, axis=0)
        mmin = amin(nodes, axis=0)
        dim_max = (mmax - mmin).max()
        self.create_global_axes(dim_max)
        for nid, node in enumerate(nodes):
            points.InsertPoint(nid, *node)

        assert len(elements) > 0
        for eid, element in enumerate(elements):
            (p1, p2, p3, p4) = element
            elem = vtkQuad()
            elem.GetPointIds().SetId(0, p1)
            elem.GetPointIds().SetId(1, p2)
            elem.GetPointIds().SetId(2, p3)
            elem.GetPointIds().SetId(3, p4)
            self.grid.InsertNextCell(elem.GetCellType(), elem.GetPointIds())

        self.grid.SetPoints(points)
        #self.grid.GetPointData().SetScalars(self.gridResult)
        #print dir(self.grid) #.SetNumberOfComponents(0)
        #self.grid.GetCellData().SetNumberOfTuples(1);
        #self.grid.GetCellData().SetScalars(self.gridResult)
        self.grid.Modified()
        if hasattr(self.grid, 'Update'):
            self.grid.Update()

        # loadCart3dResults - regions/loads
        self. turn_text_on()
        self.scalarBar.VisibilityOn()
        self.scalarBar.Modified()

        self.iSubcaseNameMap = {1: ['S/HABP', '']}
        cases = {}
        ID = 1

        self.log.debug("nNodes=%i nElements=%i" % (self.nNodes, self.nElements))
        form, cases = self._fill_shabp_geometry_case(cases, ID, nodes, elements, patches, components, impact, shadow)
        self._finish_results_io2(form, cases)

    def clear_shabp(self):
        del self.elements
        del self.model

    def _fill_shabp_geometry_case(self, cases, ID, nodes, elements, patches, components, impact, shadow):
        self.elements = elements

        icase = 0
        location_form = [
            ('CentroidX', icase + 5, []),
            ('CentroidY', icase + 6, []),
            ('CentroidZ', icase + 7, []),

            ('NodeX', icase + 8, []),
            ('NodeY', icase + 9, []),
            ('NodeZ', icase + 10, []),
        ]
        normal_form = [
            ('NormalX', icase + 11, []),
            ('NormalY', icase + 12, []),
            ('NormalZ', icase + 13, []),
        ]

        geometry_form = [
            ('Component', icase, []),
            ('PatchID', icase + 1, []),
            ('Impact', icase + 2, []),
            ('Shadow', icase + 3, []),
            ('Area', icase + 4, []),
            ('Location', None, location_form),
            ('Normal', None, normal_form),
        ]
        form = [
            ('Geometry', None, geometry_form),
        ]
        itime = 0
        ID = 0
        components_res = GuiResult(ID, header='Component', title='Component',
                                   location='centroid', scalar=components)
        patch_res = GuiResult(ID, header='PatchID', title='PatchID',
                              location='centroid', scalar=patches)
        impact_res = GuiResult(ID, header='Impact', title='Impact',
                               location='centroid', scalar=impact)
        shadow_res = GuiResult(ID, header='Shadow', title='Shadow',
                               location='centroid', scalar=shadow)

        cases[icase] = (components_res, (itime, 'Component'))
        cases[icase+1] = (patch_res, (itime, 'PatchID'))
        cases[icase+2] = (impact_res, (itime, 'Impact'))
        cases[icase+3] = (shadow_res, (itime, 'Shadow'))

        XYZc = zeros((len(elements), 3), dtype='float32')
        Normal = zeros((len(elements),3), dtype='float32')
        area = zeros(len(elements), dtype='float32')

        if 0:
            elements = np.array(elements, dtype='int32')
            p1 = nodes[elements[:, 0]]
            p2 = nodes[elements[:, 1]]
            p3 = nodes[elements[:, 2]]
            p4 = nodes[elements[:, 3]]
            a = p3 - p1
            b = p4 - p2
            n = np.cross(a, b)
            ni = np.linalg.norm(n, axis=1)
            assert len(ni) == n.shape[0]
            i = np.where(ni != 0.0)[0]
            #n[i] /= ni[:, i]
            area[i] = 0.5 * ni[i]
            assert p1.shape == n.shape, n.shape

        for i, element in enumerate(elements):
            n1, n2, n3, n4 = element
            p1 = nodes[n1, :]
            p2 = nodes[n2, :]
            p3 = nodes[n3, :]
            p4 = nodes[n4, :]
            a = p3 - p1
            b = p4 - p2
            n = cross(a, b)
            nnorm = norm(n)

            XYZc[i, :] = (p1 + p2 + p3 + p4) / 4.0
            if nnorm == 0.:
                print('p1=%s p2=%s p3=%s p4=%s; area=0' % (p1, p2, p3, p4))
                continue
            normal = n / nnorm
            A = 0.5 * nnorm

            Normal[i, :] = normal
            area[i] = A

        area_res = GuiResult(ID, header='Area', title='Area',
                             location='centroid', scalar=area) # data_format='%.2f

        cenx_res = GuiResult(ID, header='CentroidX', title='CentroidX',
                           location='centroid', scalar=XYZc[:,0]) # data_format='%.2f
        ceny_res = GuiResult(ID, header='CentroidY', title='CentroidY',
                             location='centroid', scalar=XYZc[:,1]) # data_format='%.2f
        cenz_res = GuiResult(ID, header='CentroidZ', title='CentroidZ',
                             location='centroid', scalar=XYZc[:,2]) # data_format='%.2f

        nodex_res = GuiResult(ID, header='NodeX', title='NodeX',
                           location='node', scalar=nodes[:, 0]) # data_format='%.2f
        nodey_res = GuiResult(ID, header='NodeY', title='NodeY',
                           location='node', scalar=nodes[:, 1]) # data_format='%.2f
        nodez_res = GuiResult(ID, header='NodeZ', title='NodeZ',
                           location='node', scalar=nodes[:, 2]) # data_format='%.2f

        nx_res = GuiResult(ID, header='NormalX', title='NormalX',
                           location='centroid', scalar=Normal[:,0]) # data_format='%.2f
        ny_res = GuiResult(ID, header='NormalY', title='NormalY',
                           location='centroid', scalar=Normal[:,1]) # data_format='%.2f
        nz_res = GuiResult(ID, header='NormalZ', title='NormalZ',
                           location='centroid', scalar=Normal[:,2]) # data_format='%.2f

        cases[icase+4] = (area_res, (itime, 'Area'))
        cases[icase+5] = (cenx_res, (itime, 'CentroidX'))
        cases[icase+6] = (ceny_res, (itime, 'CentroidY'))
        cases[icase+7] = (cenz_res, (itime, 'CentroidZ'))
        cases[icase+8] = (nodex_res, (itime, 'NodeX'))
        cases[icase+9] = (nodey_res, (itime, 'NodeY'))
        cases[icase+10] = (nodez_res, (itime, 'NodeZ'))

        cases[icase+11] = (nx_res, (itime, 'NormalX'))
        cases[icase+12] = (ny_res, (itime, 'NormalY'))
        cases[icase+13] = (nz_res, (itime, 'NormalZ'))
        return form, cases

    def load_shabp_results(self, shabp_filename, dirname):
        Cpd, deltad = self.model.read_shabp_out(shabp_filename)

        cases = self.result_cases
        icase = len(cases)
        mach_results = []
        form = self.form
        form.append(('Results', None, mach_results))
        #self.result_cases = {}
        mach_forms = {}
        for case_id, Cp in sorted(iteritems(Cpd)):
            Cp = Cpd[case_id]
            #delta = deltad[case_id]

            mach, alpha, beta = self.model.shabp_cases[case_id]
            #name = 'Mach=%g Alpha=%g' % (mach, alpha)
            name = 'Mach=%g Alpha=%g' % (mach, alpha)
            cases[(name, icase, 'Cp', 1, 'centroid', '%.3f', '')] = Cp
            cp_form = [
                ('Cp', icase, [])
            ]
            mach_forms[mach].append(('Cp', None, cp_form))
            #self.result_cases[(name, 'delta', 1, 'centroid', '%.3f')] = delta

        for mach, mach_form in sorted(iteritems(mach_forms)):
            mach_results.append(mach_form)
        self._finish_results_io2(form, cases)
Exemplo n.º 4
0
    def load_shabp_geometry(self, shabpFilename, dirname, plot=True):
        self.nidMap = {}

        #key = self.caseKeys[self.iCase]
        #case = self.resultCases[key]

        skipReading = self.removeOldGeometry(shabpFilename)
        if skipReading:
            return

        self.model = SHABP(log=self.log, debug=self.debug)
        self.modelType = 'shabp'  # model.modelType
        self.model.read_shabp(shabpFilename)

        nodes, elements, patches, components, impact, shadow = self.model.getPointsElementsRegions(
        )
        #for nid,node in enumerate(nodes):
        #print "node[%s] = %s" %(nid,str(node))

        self.nNodes = len(nodes)
        self.nElements = len(elements)

        #print("nNodes = ",self.nNodes)
        #print("nElements = ", self.nElements)

        self.grid.Allocate(self.nElements, 1000)
        #self.gridResult.SetNumberOfComponents(self.nElements)
        self.grid2.Allocate(1, 1000)

        points = vtk.vtkPoints()
        points.SetNumberOfPoints(self.nNodes)
        #self.gridResult.Allocate(self.nNodes, 1000)
        #vectorReselt.SetNumberOfComponents(3)
        #elem.SetNumberOfPoints(nNodes)
        if 0:
            fraction = 1. / nNodes  # so you can color the nodes by ID
            for nid, node in sorted(iteritems(nodes)):
                points.InsertPoint(nid - 1, *point)
                self.gridResult.InsertNextValue(nid * fraction)
                #print str(element)

                #elem = vtk.vtkVertex()
                #elem.GetPointIds().SetId(0, i)
                #self.aQuadGrid.InsertNextCell(elem.GetCellType(), elem.GetPointIds())
                #vectorResult.InsertTuple3(0, 0.0, 0.0, 1.0)

        assert len(nodes) > 0
        mmax = amax(nodes, axis=0)
        mmin = amin(nodes, axis=0)
        dim_max = (mmax - mmin).max()
        self.update_axes_length(dim_max)
        for nid, node in enumerate(nodes):
            points.InsertPoint(nid, *node)

        assert len(elements) > 0
        for eid, element in enumerate(elements):
            (p1, p2, p3, p4) = element
            #print "element = ",element
            elem = vtkQuad()
            elem.GetPointIds().SetId(0, p1)
            elem.GetPointIds().SetId(1, p2)
            elem.GetPointIds().SetId(2, p3)
            elem.GetPointIds().SetId(3, p4)
            self.grid.InsertNextCell(elem.GetCellType(), elem.GetPointIds())

        #print("eid = ", eid)
        self.grid.SetPoints(points)
        #self.grid2.SetPoints(points2)
        #self.grid.GetPointData().SetScalars(self.gridResult)
        #print dir(self.grid) #.SetNumberOfComponents(0)
        #self.grid.GetCellData().SetNumberOfTuples(1);
        #self.grid.GetCellData().SetScalars(self.gridResult)
        self.grid.Modified()
        self.grid2.Modified()
        self.grid.Update()
        self.grid2.Update()
        #print("updated grid")

        #return

        # loadCart3dResults - regions/loads
        self.TurnTextOn()
        self.scalarBar.VisibilityOn()
        self.scalarBar.Modified()

        self.iSubcaseNameMap = {1: ['S/HABP', '']}
        cases = {}
        ID = 1

        self.log.debug("nNodes=%i nElements=%i" %
                       (self.nNodes, self.nElements))
        cases = self.fillShabpGeometryCase(cases, ID, nodes, elements, patches,
                                           components, impact, shadow)
        self._finish_results_io(cases)
Exemplo n.º 5
0
class ShabpIO(object):
    def __init__(self):
        pass

    def get_shabp_wildcard_geometry_results_functions(self):
        data = ('S/HABP', 'Shabp (*.geo; *.mk5; *.inp)',
                self.load_shabp_geometry, 'Shabp (*.out)',
                self.load_shabp_results)
        return data

    def load_shabp_geometry(self, shabpFilename, dirname, plot=True):
        self.nidMap = {}

        #key = self.caseKeys[self.iCase]
        #case = self.resultCases[key]

        skipReading = self.removeOldGeometry(shabpFilename)
        if skipReading:
            return

        self.model = SHABP(log=self.log, debug=self.debug)
        self.modelType = 'shabp'  # model.modelType
        self.model.read_shabp(shabpFilename)

        nodes, elements, patches, components, impact, shadow = self.model.getPointsElementsRegions(
        )
        #for nid,node in enumerate(nodes):
        #print "node[%s] = %s" %(nid,str(node))

        self.nNodes = len(nodes)
        self.nElements = len(elements)

        #print("nNodes = ",self.nNodes)
        #print("nElements = ", self.nElements)

        self.grid.Allocate(self.nElements, 1000)
        #self.gridResult.SetNumberOfComponents(self.nElements)
        self.grid2.Allocate(1, 1000)

        points = vtk.vtkPoints()
        points.SetNumberOfPoints(self.nNodes)
        #self.gridResult.Allocate(self.nNodes, 1000)
        #vectorReselt.SetNumberOfComponents(3)
        #elem.SetNumberOfPoints(nNodes)
        if 0:
            fraction = 1. / nNodes  # so you can color the nodes by ID
            for nid, node in sorted(iteritems(nodes)):
                points.InsertPoint(nid - 1, *point)
                self.gridResult.InsertNextValue(nid * fraction)
                #print str(element)

                #elem = vtk.vtkVertex()
                #elem.GetPointIds().SetId(0, i)
                #self.aQuadGrid.InsertNextCell(elem.GetCellType(), elem.GetPointIds())
                #vectorResult.InsertTuple3(0, 0.0, 0.0, 1.0)

        assert len(nodes) > 0
        mmax = amax(nodes, axis=0)
        mmin = amin(nodes, axis=0)
        dim_max = (mmax - mmin).max()
        self.update_axes_length(dim_max)
        for nid, node in enumerate(nodes):
            points.InsertPoint(nid, *node)

        assert len(elements) > 0
        for eid, element in enumerate(elements):
            (p1, p2, p3, p4) = element
            #print "element = ",element
            elem = vtkQuad()
            elem.GetPointIds().SetId(0, p1)
            elem.GetPointIds().SetId(1, p2)
            elem.GetPointIds().SetId(2, p3)
            elem.GetPointIds().SetId(3, p4)
            self.grid.InsertNextCell(elem.GetCellType(), elem.GetPointIds())

        #print("eid = ", eid)
        self.grid.SetPoints(points)
        #self.grid2.SetPoints(points2)
        #self.grid.GetPointData().SetScalars(self.gridResult)
        #print dir(self.grid) #.SetNumberOfComponents(0)
        #self.grid.GetCellData().SetNumberOfTuples(1);
        #self.grid.GetCellData().SetScalars(self.gridResult)
        self.grid.Modified()
        self.grid2.Modified()
        self.grid.Update()
        self.grid2.Update()
        #print("updated grid")

        #return

        # loadCart3dResults - regions/loads
        self.TurnTextOn()
        self.scalarBar.VisibilityOn()
        self.scalarBar.Modified()

        self.iSubcaseNameMap = {1: ['S/HABP', '']}
        cases = {}
        ID = 1

        self.log.debug("nNodes=%i nElements=%i" %
                       (self.nNodes, self.nElements))
        cases = self.fillShabpGeometryCase(cases, ID, nodes, elements, patches,
                                           components, impact, shadow)
        self._finish_results_io(cases)

    def clear_shabp(self):
        del self.elements
        del self.model

    def fillShabpGeometryCase(self, cases, ID, nodes, elements, patches,
                              components, impact, shadow):
        assert self.is_centroidal != self.is_nodal

        self.elements = elements
        if self.is_centroidal:
            cases[(ID, 'Component', 1, 'centroid', '%i')] = components
            cases[(ID, 'PatchID', 1, 'centroid', '%i')] = patches
            cases[(ID, 'Impact', 1, 'centroid', '%i')] = impact
            cases[(ID, 'Shadow', 1, 'centroid', '%i')] = shadow

            XYZc = zeros((len(elements), 3), dtype='float32')
            #Normal = zeros((len(elements),3), dtype='float32')
            area = zeros(len(elements), dtype='float32')

            for i, element in enumerate(elements):
                p1, p2, p3, p4 = element
                P1 = array(nodes[p1])
                P2 = array(nodes[p2])
                P3 = array(nodes[p3])
                P4 = array(nodes[p4])
                a = P3 - P1
                b = P4 - P2
                n = cross(a, b)
                nnorm = norm(n)
                #normal = n / nnorm
                A = 0.5 * nnorm

                XYZc[i, :] = (P1 + P2 + P3 + P4) / 4.0
                #Normal[i, :] = normal
                area[i] = A
            cases[(ID, 'centroid_x', 1, 'centroid', '%.2f')] = XYZc[:, 0]
            cases[(ID, 'centroid_y', 1, 'centroid', '%.2f')] = XYZc[:, 1]
            cases[(ID, 'centroid_z', 1, 'centroid', '%.2f')] = XYZc[:, 2]

            #cases[(ID, 'normal_x', 1, 'centroid', '%.2f')] = Normal[:,0]
            #cases[(ID, 'normal_y', 1, 'centroid', '%.2f')] = Normal[:,1]
            #cases[(ID, 'normal_z', 1, 'centroid', '%.2f')] = Normal[:,2]
            cases[(ID, 'Area', 1, 'centroid', '%.2f')] = area
        elif self.is_nodal:
            Xn = zeros(len(nodes), dtype='float32')
            Yn = zeros(len(nodes), dtype='float32')
            Zn = zeros(len(nodes), dtype='float32')
            for i, node in enumerate(nodes):
                Xn[i] = node[0]
                Yn[i] = node[1]
                Zn[i] = node[2]
            cases[(ID, 'node_x', 1, 'node', '%.2f')] = Xn
            cases[(ID, 'node_y', 1, 'node', '%.2f')] = Yn
            cases[(ID, 'node_z', 1, 'node', '%.2f')] = Zn
        return cases

    def load_shabp_results(self, shabp_filename, dirname):
        Cpd, deltad = self.model.read_shabp_out(shabp_filename)

        if self.is_centroidal:
            self.resultCases = {}
            for case_id, Cp in sorted(iteritems(Cpd)):
                Cp = Cpd[case_id]
                #delta = deltad[case_id]

                mach, alpha, beta = self.model.shabp_cases[case_id]
                #name = 'Mach=%g Alpha=%g' % (mach, alpha)
                name = 'Mach=%g Alpha=%g' % (mach, alpha)
                self.resultCases[(name, 'Cp', 1, 'centroid', '%.3f')] = Cp
                #self.resultCases[(name, 'delta', 1, 'centroid', '%.3f')] = delta
        elif self.is_nodal:
            #key = (1, 'Cp', 1, 'node', '%.3f')
            #self.resultCases[key] = Cp_array
            pass
        self._finish_results_io(self.resultCases)
Exemplo n.º 6
0
class ShabpIO(object):
    def __init__(self):
        pass

    def get_shabp_wildcard_geometry_results_functions(self):
        data = ('S/HABP',
                'Shabp (*.geo; *.mk5; *.inp)', self.load_shabp_geometry,
                'Shabp (*.out)', self.load_shabp_results)
        return data

    def load_shabp_geometry(self, shabpFilename, dirname, plot=True):
        self.nidMap = {}

        #key = self.caseKeys[self.iCase]
        #case = self.resultCases[key]

        skipReading = self.removeOldGeometry(shabpFilename)
        if skipReading:
            return

        self.model = SHABP(log=self.log, debug=self.debug)
        self.modelType = 'shabp' # model.modelType
        self.model.read_shabp(shabpFilename)

        nodes, elements, patches, components, impact, shadow = self.model.getPointsElementsRegions()
        #for nid,node in enumerate(nodes):
            #print "node[%s] = %s" %(nid,str(node))

        self.nNodes = len(nodes)
        self.nElements = len(elements)

        #print("nNodes = ",self.nNodes)
        #print("nElements = ", self.nElements)

        self.grid.Allocate(self.nElements, 1000)
        #self.gridResult.SetNumberOfComponents(self.nElements)
        self.grid2.Allocate(1, 1000)

        points = vtk.vtkPoints()
        points.SetNumberOfPoints(self.nNodes)
        #self.gridResult.Allocate(self.nNodes, 1000)
        #vectorReselt.SetNumberOfComponents(3)
        #elem.SetNumberOfPoints(nNodes)
        if 0:
            fraction = 1. / nNodes  # so you can color the nodes by ID
            for nid, node in sorted(iteritems(nodes)):
                points.InsertPoint(nid - 1, *node)
                self.gridResult.InsertNextValue(nid * fraction)
                #print str(element)

                #elem = vtk.vtkVertex()
                #elem.GetPointIds().SetId(0, i)
                #self.aQuadGrid.InsertNextCell(elem.GetCellType(), elem.GetPointIds())
                #vectorResult.InsertTuple3(0, 0.0, 0.0, 1.0)

        assert len(nodes) > 0
        mmax = amax(nodes, axis=0)
        mmin = amin(nodes, axis=0)
        dim_max = (mmax - mmin).max()
        self.update_axes_length(dim_max)
        for nid, node in enumerate(nodes):
            points.InsertPoint(nid, *node)

        assert len(elements) > 0
        for eid, element in enumerate(elements):
            (p1, p2, p3, p4) = element
            #print "element = ",element
            elem = vtkQuad()
            elem.GetPointIds().SetId(0, p1)
            elem.GetPointIds().SetId(1, p2)
            elem.GetPointIds().SetId(2, p3)
            elem.GetPointIds().SetId(3, p4)
            self.grid.InsertNextCell(elem.GetCellType(), elem.GetPointIds())

        #print("eid = ", eid)
        self.grid.SetPoints(points)
        #self.grid2.SetPoints(points2)
        #self.grid.GetPointData().SetScalars(self.gridResult)
        #print dir(self.grid) #.SetNumberOfComponents(0)
        #self.grid.GetCellData().SetNumberOfTuples(1);
        #self.grid.GetCellData().SetScalars(self.gridResult)
        self.grid.Modified()
        self.grid2.Modified()
        if hasattr(self.grid, 'Update'):
            self.grid.Update()
            self.grid2.Update()
            #print("updated grid")

        #return

        # loadCart3dResults - regions/loads
        self.TurnTextOn()
        self.scalarBar.VisibilityOn()
        self.scalarBar.Modified()

        self.iSubcaseNameMap = {1: ['S/HABP', '']}
        cases = {}
        ID = 1

        self.log.debug("nNodes=%i nElements=%i" % (self.nNodes, self.nElements))
        cases = self.fillShabpGeometryCase(cases, ID, nodes, elements, patches, components, impact, shadow)
        self._finish_results_io(cases)

    def clear_shabp(self):
        del self.elements
        del self.model

    def fillShabpGeometryCase(self, cases, ID, nodes, elements, patches, components, impact, shadow):
        assert self.is_centroidal != self.is_nodal

        self.elements = elements
        if self.is_centroidal:
            cases[(ID, 'Component', 1, 'centroid', '%i')] = components
            cases[(ID, 'PatchID', 1, 'centroid', '%i')] = patches
            cases[(ID, 'Impact', 1, 'centroid', '%i')] = impact
            cases[(ID, 'Shadow', 1, 'centroid', '%i')] = shadow

            XYZc = zeros((len(elements),3), dtype='float32')
            #Normal = zeros((len(elements),3), dtype='float32')
            area = zeros(len(elements), dtype='float32')

            for i,element in enumerate(elements):
                p1, p2, p3, p4 = element
                P1 = array(nodes[p1])
                P2 = array(nodes[p2])
                P3 = array(nodes[p3])
                P4 = array(nodes[p4])
                a = P3 - P1
                b = P4 - P2
                n = cross(a, b)
                nnorm = norm(n)
                #normal = n / nnorm
                A = 0.5 * nnorm

                XYZc[i,:] = (P1 + P2 + P3 + P4) / 4.0
                #Normal[i, :] = normal
                area[i] = A
            cases[(ID, 'centroid_x', 1, 'centroid', '%.2f')] = XYZc[:,0]
            cases[(ID, 'centroid_y', 1, 'centroid', '%.2f')] = XYZc[:,1]
            cases[(ID, 'centroid_z', 1, 'centroid', '%.2f')] = XYZc[:,2]

            #cases[(ID, 'normal_x', 1, 'centroid', '%.2f')] = Normal[:,0]
            #cases[(ID, 'normal_y', 1, 'centroid', '%.2f')] = Normal[:,1]
            #cases[(ID, 'normal_z', 1, 'centroid', '%.2f')] = Normal[:,2]
            cases[(ID, 'Area', 1, 'centroid', '%.2f')] = area
        elif self.is_nodal:
            Xn = zeros(len(nodes), dtype='float32')
            Yn = zeros(len(nodes), dtype='float32')
            Zn = zeros(len(nodes), dtype='float32')
            for i, node in enumerate(nodes):
                Xn[i] = node[0]
                Yn[i] = node[1]
                Zn[i] = node[2]
            cases[(ID, 'node_x', 1, 'node', '%.2f')] = Xn
            cases[(ID, 'node_y', 1, 'node', '%.2f')] = Yn
            cases[(ID, 'node_z', 1, 'node', '%.2f')] = Zn
        return cases

    def load_shabp_results(self, shabp_filename, dirname):
        Cpd, deltad = self.model.read_shabp_out(shabp_filename)

        if self.is_centroidal:
            self.resultCases = {}
            for case_id, Cp in sorted(iteritems(Cpd)):
                Cp = Cpd[case_id]
                #delta = deltad[case_id]

                mach, alpha, beta = self.model.shabp_cases[case_id]
                #name = 'Mach=%g Alpha=%g' % (mach, alpha)
                name = 'Mach=%g Alpha=%g' % (mach, alpha)
                self.resultCases[(name, 'Cp', 1, 'centroid', '%.3f')] = Cp
                #self.resultCases[(name, 'delta', 1, 'centroid', '%.3f')] = delta
        elif self.is_nodal:
            #key = (1, 'Cp', 1, 'node', '%.3f')
            #self.resultCases[key] = Cp_array
            pass
        self._finish_results_io(self.resultCases)
Exemplo n.º 7
0
class ShabpIO(object):
    def __init__(self):
        pass

    def get_shabp_wildcard_geometry_results_functions(self):
        data = ('S/HABP', 'Shabp (*.geo; *.mk5; *.inp)',
                self.load_shabp_geometry, 'Shabp (*.out)',
                self.load_shabp_results)
        return data

    def load_shabp_geometry(self,
                            shabpFilename,
                            dirname,
                            name='main',
                            plot=True):
        self.nid_map = {}

        #key = self.case_keys[self.icase]
        #case = self.result_cases[key]

        skip_reading = self._remove_old_geometry(shabpFilename)
        if skip_reading:
            return

        self.model = SHABP(log=self.log, debug=self.debug)
        self.model_type = 'shabp'  # model.model_type
        self.model.read_shabp(shabpFilename)

        nodes, elements, patches, components, impact, shadow = self.model.getPointsElementsRegions(
        )
        #for nid,node in enumerate(nodes):
        #print "node[%s] = %s" %(nid,str(node))

        self.nNodes = len(nodes)
        self.nElements = len(elements)

        #print("nNodes = ",self.nNodes)
        #print("nElements = ", self.nElements)

        self.grid.Allocate(self.nElements, 1000)
        #self.gridResult.SetNumberOfComponents(self.nElements)

        points = vtk.vtkPoints()
        points.SetNumberOfPoints(self.nNodes)
        #self.gridResult.Allocate(self.nNodes, 1000)
        #vectorReselt.SetNumberOfComponents(3)
        #elem.SetNumberOfPoints(nNodes)
        if 0:
            fraction = 1. / nNodes  # so you can color the nodes by ID
            for nid, node in sorted(iteritems(nodes)):
                points.InsertPoint(nid - 1, *node)
                self.gridResult.InsertNextValue(nid * fraction)
                #print str(element)

                #elem = vtk.vtkVertex()
                #elem.GetPointIds().SetId(0, i)
                #self.aQuadGrid.InsertNextCell(elem.GetCellType(), elem.GetPointIds())
                #vectorResult.InsertTuple3(0, 0.0, 0.0, 1.0)

        assert len(nodes) > 0
        mmax = amax(nodes, axis=0)
        mmin = amin(nodes, axis=0)
        dim_max = (mmax - mmin).max()
        self.create_global_axes(dim_max)
        for nid, node in enumerate(nodes):
            points.InsertPoint(nid, *node)

        assert len(elements) > 0
        for eid, element in enumerate(elements):
            (p1, p2, p3, p4) = element
            elem = vtkQuad()
            elem.GetPointIds().SetId(0, p1)
            elem.GetPointIds().SetId(1, p2)
            elem.GetPointIds().SetId(2, p3)
            elem.GetPointIds().SetId(3, p4)
            self.grid.InsertNextCell(elem.GetCellType(), elem.GetPointIds())

        self.grid.SetPoints(points)
        #self.grid.GetPointData().SetScalars(self.gridResult)
        #print dir(self.grid) #.SetNumberOfComponents(0)
        #self.grid.GetCellData().SetNumberOfTuples(1);
        #self.grid.GetCellData().SetScalars(self.gridResult)
        self.grid.Modified()
        if hasattr(self.grid, 'Update'):
            self.grid.Update()

        # loadCart3dResults - regions/loads
        self.turn_text_on()
        self.scalarBar.VisibilityOn()
        self.scalarBar.Modified()

        self.iSubcaseNameMap = {1: ['S/HABP', '']}
        cases = {}
        ID = 1

        self.log.debug("nNodes=%i nElements=%i" %
                       (self.nNodes, self.nElements))
        form, cases = self._fill_shabp_geometry_case(cases, ID, nodes,
                                                     elements, patches,
                                                     components, impact,
                                                     shadow)
        self._finish_results_io2(form, cases)

    def clear_shabp(self):
        del self.elements
        del self.model

    def _fill_shabp_geometry_case(self, cases, ID, nodes, elements, patches,
                                  components, impact, shadow):
        self.elements = elements

        icase = 0
        location_form = [
            ('CentroidX', icase + 5, []),
            ('CentroidY', icase + 6, []),
            ('CentroidZ', icase + 7, []),
            ('NodeX', icase + 8, []),
            ('NodeY', icase + 9, []),
            ('NodeZ', icase + 10, []),
        ]
        normal_form = [
            ('NormalX', icase + 11, []),
            ('NormalY', icase + 12, []),
            ('NormalZ', icase + 13, []),
        ]

        geometry_form = [
            ('Component', icase, []),
            ('PatchID', icase + 1, []),
            ('Impact', icase + 2, []),
            ('Shadow', icase + 3, []),
            ('Area', icase + 4, []),
            ('Location', None, location_form),
            ('Normal', None, normal_form),
        ]
        form = [
            ('Geometry', None, geometry_form),
        ]
        itime = 0
        ID = 0
        components_res = GuiResult(ID,
                                   header='Component',
                                   title='Component',
                                   location='centroid',
                                   scalar=components)
        patch_res = GuiResult(ID,
                              header='PatchID',
                              title='PatchID',
                              location='centroid',
                              scalar=patches)
        impact_res = GuiResult(ID,
                               header='Impact',
                               title='Impact',
                               location='centroid',
                               scalar=impact)
        shadow_res = GuiResult(ID,
                               header='Shadow',
                               title='Shadow',
                               location='centroid',
                               scalar=shadow)

        cases[icase] = (components_res, (itime, 'Component'))
        cases[icase + 1] = (patch_res, (itime, 'PatchID'))
        cases[icase + 2] = (impact_res, (itime, 'Impact'))
        cases[icase + 3] = (shadow_res, (itime, 'Shadow'))

        XYZc = zeros((len(elements), 3), dtype='float32')
        Normal = zeros((len(elements), 3), dtype='float32')
        area = zeros(len(elements), dtype='float32')

        if 0:
            elements = np.array(elements, dtype='int32')
            p1 = nodes[elements[:, 0]]
            p2 = nodes[elements[:, 1]]
            p3 = nodes[elements[:, 2]]
            p4 = nodes[elements[:, 3]]
            a = p3 - p1
            b = p4 - p2
            n = np.cross(a, b)
            ni = np.linalg.norm(n, axis=1)
            assert len(ni) == n.shape[0]
            i = np.where(ni != 0.0)[0]
            #n[i] /= ni[:, i]
            area[i] = 0.5 * ni[i]
            assert p1.shape == n.shape, n.shape

        for i, element in enumerate(elements):
            n1, n2, n3, n4 = element
            p1 = nodes[n1, :]
            p2 = nodes[n2, :]
            p3 = nodes[n3, :]
            p4 = nodes[n4, :]
            a = p3 - p1
            b = p4 - p2
            n = cross(a, b)
            nnorm = norm(n)

            XYZc[i, :] = (p1 + p2 + p3 + p4) / 4.0
            if nnorm == 0.:
                print('p1=%s p2=%s p3=%s p4=%s; area=0' % (p1, p2, p3, p4))
                continue
            normal = n / nnorm
            A = 0.5 * nnorm

            Normal[i, :] = normal
            area[i] = A

        area_res = GuiResult(ID,
                             header='Area',
                             title='Area',
                             location='centroid',
                             scalar=area)  # data_format='%.2f

        cenx_res = GuiResult(ID,
                             header='CentroidX',
                             title='CentroidX',
                             location='centroid',
                             scalar=XYZc[:, 0])  # data_format='%.2f
        ceny_res = GuiResult(ID,
                             header='CentroidY',
                             title='CentroidY',
                             location='centroid',
                             scalar=XYZc[:, 1])  # data_format='%.2f
        cenz_res = GuiResult(ID,
                             header='CentroidZ',
                             title='CentroidZ',
                             location='centroid',
                             scalar=XYZc[:, 2])  # data_format='%.2f

        nodex_res = GuiResult(ID,
                              header='NodeX',
                              title='NodeX',
                              location='node',
                              scalar=nodes[:, 0])  # data_format='%.2f
        nodey_res = GuiResult(ID,
                              header='NodeY',
                              title='NodeY',
                              location='node',
                              scalar=nodes[:, 1])  # data_format='%.2f
        nodez_res = GuiResult(ID,
                              header='NodeZ',
                              title='NodeZ',
                              location='node',
                              scalar=nodes[:, 2])  # data_format='%.2f

        nx_res = GuiResult(ID,
                           header='NormalX',
                           title='NormalX',
                           location='centroid',
                           scalar=Normal[:, 0])  # data_format='%.2f
        ny_res = GuiResult(ID,
                           header='NormalY',
                           title='NormalY',
                           location='centroid',
                           scalar=Normal[:, 1])  # data_format='%.2f
        nz_res = GuiResult(ID,
                           header='NormalZ',
                           title='NormalZ',
                           location='centroid',
                           scalar=Normal[:, 2])  # data_format='%.2f

        cases[icase + 4] = (area_res, (itime, 'Area'))
        cases[icase + 5] = (cenx_res, (itime, 'CentroidX'))
        cases[icase + 6] = (ceny_res, (itime, 'CentroidY'))
        cases[icase + 7] = (cenz_res, (itime, 'CentroidZ'))
        cases[icase + 8] = (nodex_res, (itime, 'NodeX'))
        cases[icase + 9] = (nodey_res, (itime, 'NodeY'))
        cases[icase + 10] = (nodez_res, (itime, 'NodeZ'))

        cases[icase + 11] = (nx_res, (itime, 'NormalX'))
        cases[icase + 12] = (ny_res, (itime, 'NormalY'))
        cases[icase + 13] = (nz_res, (itime, 'NormalZ'))
        return form, cases

    def load_shabp_results(self, shabp_filename, dirname):
        Cpd, deltad = self.model.read_shabp_out(shabp_filename)

        cases = self.result_cases
        icase = len(cases)
        mach_results = []
        form = self.form
        form.append(('Results', None, mach_results))
        #self.result_cases = {}
        mach_forms = {}
        for case_id, Cp in sorted(iteritems(Cpd)):
            Cp = Cpd[case_id]
            #delta = deltad[case_id]

            mach, alpha, beta = self.model.shabp_cases[case_id]
            #name = 'Mach=%g Alpha=%g' % (mach, alpha)
            name = 'Mach=%g Alpha=%g' % (mach, alpha)
            cases[(name, icase, 'Cp', 1, 'centroid', '%.3f', '')] = Cp
            cp_form = [('Cp', icase, [])]
            mach_forms[mach].append(('Cp', None, cp_form))
            #self.result_cases[(name, 'delta', 1, 'centroid', '%.3f')] = delta

        for mach, mach_form in sorted(iteritems(mach_forms)):
            mach_results.append(mach_form)
        self._finish_results_io2(form, cases)