Esempio n. 1
0
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
Esempio n. 2
0
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]