def METHOD_NAME(self, p3d_filename, name='main'):
    print("load_plot3d_geometry")
    self.nid_map = {}
    #key = self.case_keys[self.icase]
    #case = self.result_cases[key]
    skip_reading = self._remove_old_geometry(p3d_filename)
    if skip_reading:
        return
    model = Plot3d(log=self.log, debug=self.debug)
    #self.model_type = model.model_type
    model.read_plot3d(p3d_filename)
    npoints = 0
    nelements = 0
    for iblock, shape in sorted(model.block_shapes.items()):
        npoints += shape[0] * shape[1] * shape[2]
        nelements += (shape[0] - 1)  * (shape[1] - 1) * (shape[2] - 1)
    nblocks = len(model.block_shapes)
    self.nnodes = npoints
    self.nelements = nelements
    #nodes, elements, regions = model.get_points_elements_regions()
    #for nid,node in enumerate(nodes):
        #print "node[%s] = %s" % (nid, str(node))
    self.grid.Allocate(self.nelements, 1000)
    points = vtkPoints()
    points.SetNumberOfPoints(self.nnodes)
    nid = 0
    nid_base = 0
    eid_base = 0
    elem = vtkQuad()
    quad_type = elem.GetCellType()
    #nblocks = len(model.x)
    for iblock in range(nblocks):
        print("iblock =", iblock)
        nid_base = nid
        x = model.x[iblock]
        y = model.y[iblock]
        z = model.z[iblock]
        print("x.shape[%s] =" % iblock, x.shape)
        print(x)
        (ni, nj, nk) = x.shape
        assert nk == 1
        for k in range(nk):
            for j in range(nj):
                for i in range(ni):
                    points.InsertPoint(
                        nid, x[i, j, 0], y[i, j, 0], z[i, j, 0])
                    nid += 1
        for j in range(nj - 1):
            jstart = nid_base + j * ni
            for i in range(ni - 1):
                elem = vtkQuad()
                p1 = jstart + (i)
                p2 = jstart + (i + 1)
                p3 = jstart + (ni) + (i + 1)
                p4 = jstart + (ni) + (i)
                elem.GetPointIds().SetId(0, p1)
                elem.GetPointIds().SetId(1, p2)
                elem.GetPointIds().SetId(2, p3)
                elem.GetPointIds().SetId(3, p4)
                element = [p1, p2, p3, p4]
                self.grid.InsertNextCell(quad_type, elem.GetPointIds())
                print(element)
            #jstart += ni
        #nid_base += ni * nj * nk
        eid_base += (ni-1) * (nj-1) * (nk-1)
        break
    #print("eid = ", eid)
    grid = self.gui.grid
    grid.SetPoints(points)
    grid.Modified()
    grid.Update()
    self.log_info("updated grid")
    #return
    # loadPlot3dResults - regions/loads
    self.gui.scalar_bar_actor.VisibilityOn()
    self.gui.scalar_bar_actor.Modified()
    self.gui.isubcase_name_map = {1: ['Plot3d', '']}
    cases = {}
    ID = 1
    #cases = self._fill_stl_case(cases, ID, elements)
    self.result_cases = cases
    self.case_keys = sorted(cases.keys())
    #print "case_keys = ",self.case_keys
    #print "type(case_keys) = ",type(self.case_keys)
    self.ncases = min(0, len(self.result_cases) - 1)  # number of keys in dictionary
    self.icase = 0 if self.ncases == 0 else -1
    self.cycle_results()  # start at ncase=0