def setup_baselevel(Nmesh): data = numpy.empty( (Nmesh / args.divide, Nmesh / args.divide, Nmesh / args.divide), dtype=[("gps", ("i4", 3)), ("disp", ("f4", 3)), ("delta", "f4")], ) grid1d = numpy.arange(Nmesh / args.divide) data["gps"][..., 2] = grid1d[None, None, :] + Nmesh / args.divide * args.piece[2] data["gps"][..., 1] = grid1d[None, :, None] + Nmesh / args.divide * args.piece[1] data["gps"][..., 0] = grid1d[:, None, None] + Nmesh / args.divide * args.piece[0] data = data.reshape(-1) def pick_piece(d): if args.divide > 1: return d.reshape( args.divide, Nmesh / args.divide, args.divide, Nmesh / args.divide, args.divide, Nmesh / args.divide )[args.piece[0], :, args.piece[1], :, args.piece[2], :].ravel() else: return d for i, block in enumerate(["dispx", "dispy", "dispz"]): content = pick_piece(readblock(Nmesh, block, "f4", args)) data["disp"][..., i] = content data["delta"] = pick_piece(readblock(Nmesh, "delta", "f4", args)) return data
def setup_innerlevel(Nmesh): index = readblock(Nmesh, "index", "i8", args) data = numpy.empty(len(index), dtype=[("gps", ("i4", 3)), ("disp", ("f4", 3)), ("delta", "f4"), ("region", "u4")]) data["region"][:] = readblock(Nmesh, "region", "u4", args) data["disp"][:, 0] = readblock(Nmesh, "dispx", "f4", args) data["disp"][:, 1] = readblock(Nmesh, "dispy", "f4", args) data["disp"][:, 2] = readblock(Nmesh, "dispz", "f4", args) data["delta"][:] = readblock(Nmesh, "delta", "f4", args) Size = numpy.array([args.Meta[Nmesh]["Size"][i] for i in range(len(args.Regions))]) Stride1 = Size[:, 1] * Size[:, 2] Stride2 = Size[:, 2] Offset = numpy.array([args.Meta[Nmesh]["Offset"][i] for i in range(len(args.Regions))]) data["gps"][:, 0] = index // Stride1[data["region"]] data["gps"][:, 1] = (index - data["gps"][:, 0] * Stride1[data["region"]]) // Stride2[data["region"]] data["gps"][:, 2] = index % Stride2[data["region"]] data["gps"] += Offset[data["region"]] # now gonna remove the overlaps and make sure points are within the mesh. numpy.remainder(data["gps"], Nmesh, data["gps"]) index = numpy.ravel_multi_index(data["gps"].T, (Nmesh, Nmesh, Nmesh)) u, ui = numpy.unique(index, return_index=True) return data[ui]