Exemplo n.º 1
0
    def load_su2_geometry(self, su2_filename, name='main', plot=True):
        #print("load_su2_geometry...")
        skip_reading = self._remove_old_geometry(su2_filename)
        if skip_reading:
            return

        model = SU2(log=self.log, debug=False)
        #self.model_type = model.model_type
        ndim, nodes, elements, regions = model.read_su2(su2_filename)

        nnodes = nodes.shape[0]
        nelements = 0
        for etype, elems in iteritems(elements):
            nsub_elements = elems.shape[0]
            if nsub_elements:
                nelements += nsub_elements
                #print('min of type = %s' % elems.min())
        assert nnodes > 0, nnodes
        assert nelements > 0, nelements

        self.nNodes = nnodes
        self.nElements = nelements

        self.log.info('nnodes=%s nelements=%s' % (self.nNodes, self.nElements))
        self.grid.Allocate(self.nElements, 1000)
        #self.gridResult.SetNumberOfComponents(self.nElements)

        #vectorReselt.SetNumberOfComponents(3)
        self.nid_map = {}

        assert nodes is not None
        nnodes = nodes.shape[0]
        if ndim == 3:
            xmax, ymax, zmax = nodes.max(axis=0)
            xmin, ymin, zmin = nodes.min(axis=0)
            self.log.info('xmax=%s xmin=%s' % (xmax, xmin))
            self.log.info('ymax=%s ymin=%s' % (ymax, ymin))
            self.log.info('zmax=%s zmin=%s' % (zmax, zmin))
            dim_max = max(xmax-xmin, ymax-ymin, zmax-zmin)
        elif ndim == 2:
            xmax, ymax = nodes.max(axis=0)
            xmin, ymin = nodes.min(axis=0)
            self.log.info('xmax=%s xmin=%s' % (xmax, xmin))
            self.log.info('ymax=%s ymin=%s' % (ymax, ymin))
            dim_max = max(xmax-xmin, ymax-ymin)

        self.create_global_axes(dim_max)

        if ndim == 2:
            nodes = np.hstack([nodes, np.zeros((nnodes, 1), dtype=nodes.dtype)])
        #else:
            # ndim=3

        points = self.numpy_to_vtk_points(nodes)


        #nelements = 0
        #elements = {
            #5 : tris,
            #9 : quads,
        #}
        #print('dict =', elements)
        for etype, elems in iteritems(elements):
            #print(etype, elems)
            if isinstance(elems, list):
                #print('continue')
                continue
            #print(type(elems))
            nsub_elements = elems.shape[0]
            if nsub_elements == 0:
                #print('continue')
                continue
            #print('eid_min =', elems.min())
            assert nsub_elements > 0, nsub_elements
            if etype == 5:
                for eid in range(nsub_elements):
                    elem = vtkTriangle()
                    node_ids = elems[eid, :]
                    elem.GetPointIds().SetId(0, node_ids[0])
                    elem.GetPointIds().SetId(1, node_ids[1])
                    elem.GetPointIds().SetId(2, node_ids[2])
                    self.grid.InsertNextCell(5, elem.GetPointIds())  #elem.GetCellType() = 5  # vtkTriangle
            elif etype == 9:
                for eid in range(nsub_elements):
                    elem = vtk.vtkQuad()
                    node_ids = elems[eid, :]
                    elem.GetPointIds().SetId(0, node_ids[0])
                    elem.GetPointIds().SetId(1, node_ids[1])
                    elem.GetPointIds().SetId(2, node_ids[2])
                    elem.GetPointIds().SetId(3, node_ids[3])
                    self.grid.InsertNextCell(elem.GetCellType(), elem.GetPointIds())
            else:
                raise NotImplementedError(etype)

        self.grid.SetPoints(points)
        self.grid.Modified()
        if hasattr(self.grid, 'Update'):
            self.grid.Update()
            self.log_info("updated grid")

        # loadSTLResults - regions/loads
        self.scalarBar.VisibilityOff()
        self.scalarBar.Modified()

        cases = {}
        self.isubcase_name_map = {}
        ID = 1

        form, cases = self._fill_su2_case(cases, ID, nelements, nnodes)
        self._finish_results_io2(form, cases)
Exemplo n.º 2
0
    def load_su2_geometry(self, su2_filename, name='main', plot=True):
        model_name = name
        skip_reading = self.gui._remove_old_geometry(su2_filename)
        if skip_reading:
            return

        model = SU2(log=self.gui.log, debug=False)
        #self.model_type = model.model_type
        ndim, zones = model.read_su2(su2_filename)

        nnodes = 0
        nelements = 0
        nzones = len(zones)
        for i, zone in zones.items():
            nodes, elements, regions = zone
            nnodes += nodes.shape[0]
            for etype, elems in elements.items():
                nsub_elements = elems.shape[0]
                if nsub_elements:
                    nelements += nsub_elements
                #print('min of type = %s' % elems.min())

            if nzones > 1:
                self.log.warning('only reading a single zone')
                break
        assert nnodes > 0, nnodes
        assert nelements > 0, nelements

        self.gui.nnodes = nnodes
        self.gui.nelements = nelements

        self.gui.log.info('nnodes=%s nelements=%s' %
                          (self.gui.nnodes, self.gui.nelements))

        grid = self.gui.grid
        grid.Allocate(self.gui.nelements, 1000)

        self.gui.nid_map = {}

        assert nodes is not None
        nnodes = nodes.shape[0]
        if ndim == 3:
            xmax, ymax, zmax = nodes.max(axis=0)
            xmin, ymin, zmin = nodes.min(axis=0)
            self.gui.log.info('xmax=%s xmin=%s' % (xmax, xmin))
            self.gui.log.info('ymax=%s ymin=%s' % (ymax, ymin))
            self.gui.log.info('zmax=%s zmin=%s' % (zmax, zmin))
            dim_max = max(xmax - xmin, ymax - ymin, zmax - zmin)
        elif ndim == 2:
            xmax, ymax = nodes.max(axis=0)
            xmin, ymin = nodes.min(axis=0)
            self.gui.log.info('xmax=%s xmin=%s' % (xmax, xmin))
            self.gui.log.info('ymax=%s ymin=%s' % (ymax, ymin))
            dim_max = max(xmax - xmin, ymax - ymin)

        self.gui.create_global_axes(dim_max)

        if ndim == 2:
            nodes = np.hstack(
                [nodes, np.zeros((nnodes, 1), dtype=nodes.dtype)])
        #else:
        # ndim=3

        points = numpy_to_vtk_points(nodes)

        #nelements = 0
        #elements = {
        #5 : tris,
        #9 : quads,
        #}
        #print('dict =', elements)
        for etype, elems in elements.items():
            #print(etype, elems)
            if isinstance(elems, list):
                #print('continue')
                continue
            #print(type(elems))
            nsub_elements = elems.shape[0]
            if nsub_elements == 0:
                #print('continue')
                continue
            #print('eid_min =', elems.min())
            assert nsub_elements > 0, nsub_elements
            if etype == 5:
                for eid in range(nsub_elements):
                    elem = vtkTriangle()
                    node_ids = elems[eid, :]
                    elem.GetPointIds().SetId(0, node_ids[0])
                    elem.GetPointIds().SetId(1, node_ids[1])
                    elem.GetPointIds().SetId(2, node_ids[2])
                    #elem.GetCellType() = 5  # vtkTriangle
                    grid.InsertNextCell(5, elem.GetPointIds())
            elif etype == 9:
                for eid in range(nsub_elements):
                    elem = vtk.vtkQuad()
                    node_ids = elems[eid, :]
                    elem.GetPointIds().SetId(0, node_ids[0])
                    elem.GetPointIds().SetId(1, node_ids[1])
                    elem.GetPointIds().SetId(2, node_ids[2])
                    elem.GetPointIds().SetId(3, node_ids[3])
                    grid.InsertNextCell(elem.GetCellType(), elem.GetPointIds())
            else:
                raise NotImplementedError(etype)

        grid.SetPoints(points)
        grid.Modified()

        # loadSTLResults - regions/loads
        self.gui.scalar_bar_actor.VisibilityOff()
        self.gui.scalar_bar_actor.Modified()

        cases = OrderedDict()
        self.gui.isubcase_name_map = {}
        ID = 1

        form, cases, node_ids, element_ids = self._fill_su2_case(
            cases, ID, nelements, nnodes)
        self.gui.node_ids = node_ids
        self.gui.element_ids = element_ids
        self.gui._finish_results_io2(model_name, form, cases)