Exemplo n.º 1
0
def run(job_tag, traj):
    q.qmkdir_info(f"locks")
    q.qmkdir_info(get_save_path(f""))
    q.qmkdir_info(get_save_path(f"eig"))
    q.qmkdir_info(get_save_path(f"eig/{job_tag}"))
    q.qmkdir_info(get_save_path(f"configs"))
    q.qmkdir_info(get_save_path(f"configs/{job_tag}"))
    #
    total_site = ru.get_total_site(job_tag)
    geo = q.Geometry(total_site, 1)
    q.displayln_info("geo.show() =", geo.show())
    #
    path_gf = get_load_path(f"configs/{job_tag}/ckpoint_lat.{traj}")
    if path_gf is None:
        gf = mk_sample_gauge_field(job_tag, traj)
        gf.show_info()
        gf.save(get_save_path(f"configs/{job_tag}/ckpoint_lat.{traj}"))
    else:
        gf = q.GaugeField()
        gf.load(path_gf)
    #
    if q.obtain_lock(f"locks/{job_tag}-{traj}-compute-eig"):
        get_eig = compute_eig(gf,
                              job_tag,
                              inv_type=0,
                              path=f"eig/{job_tag}/traj={traj}")
        test_eig(gf, get_eig(), job_tag, inv_type=0)
        q.release_lock()
Exemplo n.º 2
0
def test_hmc(total_site, ga):
    #
    q.qmkdir_info("results")
    q.qmkdir_info("results/gf_info")
    q.qmkdir_info("results/wilson_flow_energy_info")
    q.qmkdir_info("results/gm_force_info")
    #
    geo = q.Geometry(total_site, 1)
    rs = q.RngState("test_hmc-{}x{}x{}x{}".format(total_site[0], total_site[1],
                                                  total_site[2],
                                                  total_site[3]))
    gf = q.GaugeField(geo)
    q.set_unit(gf)
    traj = 0
    for i in range(4):
        traj += 1
        run_hmc(gf, ga, traj, rs.split("hmc-{}".format(traj)))
        plaq_avg = q.gf_avg_plaq(gf)
        plaq_sum = np.prod(total_site) * 6.0 * (1.0 - plaq_avg)
        q.displayln_info("test_hmc: traj={} ; plaq_avg={}".format(
            traj, plaq_avg))
        if traj % 2 == 0:
            q.display_gauge_field_info_table_with_wilson_flow(
                "results/gf_info/traj={}.lat".format(traj),
                "results/wilson_flow_energy_info/traj={}.lat".format(traj), gf,
                0.1, 5, 2)
            q.save_gm_force_magnitudes_list(
                "results/gm_force_info/traj={}.lat".format(traj))
Exemplo n.º 3
0
def test_gf(gf):
    q.displayln_info(f"test_gf")
    #
    plaq = gf.plaq()
    #
    gpt_gf = qg.gpt_from_qlat(gf)
    g_plaq = g.qcd.gauge.plaquette(gpt_gf)
    #
    q.displayln_info(
        f"gf.plaq()={plaq} ; g.qcd.gauge.plaquette(gpt_gf) = {g_plaq:.17f}")
    assert abs(plaq - g_plaq) < 1.0e-10
Exemplo n.º 4
0
def test_src(xg):
    q.displayln_info(f"test_src: xg={xg}")
    #
    src_q = q.mk_point_src(geo, xg)
    #
    grid = qg.mk_grid(geo)
    g_src_gpt = g.mspincolor(grid)
    g.create.point(g_src_gpt, xg)
    src_g = qg.qlat_from_gpt(g_src_gpt)
    #
    src_diff = src_q.copy()
    src_diff -= src_g
    #
    q.displayln_info(src_q.qnorm(), src_g.qnorm(), src_diff.qnorm())
    assert src_diff.qnorm() == 0
Exemplo n.º 5
0
def gm_evolve_fg(gm, gf_init, ga, fg_dt, dt):
    geo = gf_init.geo()
    gf = q.GaugeField(geo)
    gf @= gf_init
    #
    gm_force = q.GaugeMomentum(geo)
    #
    q.set_gm_force(gm_force, gf, ga)
    #
    q.gf_evolve(gf, gm_force, fg_dt)
    #
    q.set_gm_force(gm_force, gf, ga)
    #
    q.display_gm_force_magnitudes(gm_force, 5)
    q.displayln_info(q.get_gm_force_magnitudes(gm_force, 5))
    #
    gm_force *= dt
    gm += gm_force
Exemplo n.º 6
0
def metropolis_accept(delta_h, traj, rs):
    flag_d = 0.0
    accept_prob = 0.0
    if q.get_id_node() == 0:
        if delta_h <= 0.0:
            accept_prob = 1.0
            flag_d = 1.0
        else:
            accept_prob = m.exp(-delta_h)
            rand_num = rs.u_rand_gen(1.0, 0.0)
            if rand_num <= accept_prob:
                flag_d = 1.0
    flag_d = q.glb_sum(flag_d)
    accept_prob = q.glb_sum(accept_prob)
    flag = flag_d > 0.5
    q.displayln_info(
        "metropolis_accept: flag={:d} with accept_prob={:.1f}% delta_h={:.16f} traj={:d}"
        .format(flag, accept_prob * 100.0, delta_h, traj))
    return flag, accept_prob
Exemplo n.º 7
0
def run_hmc(gf, ga, traj, rs):
    #
    is_reverse_test = traj < 3
    #
    geo = gf.geo()
    gf0 = q.GaugeField(geo)
    gf0 @= gf
    #
    gm = q.GaugeMomentum(geo)
    q.set_rand_gauge_momentum(gm, 1.0, rs.split("set_rand_gauge_momentum"))
    #
    steps = 6
    md_time = 1.0
    #
    delta_h = run_hmc_evolve(gm, gf0, ga, rs, steps, md_time)
    #
    if is_reverse_test:
        gm_r = q.GaugeMomentum(geo)
        gm_r @= gm
        gf0_r = q.GaugeField(geo)
        gf0_r @= gf0
        delta_h_rev = run_hmc_evolve(gm_r, gf0_r, ga, rs, steps, -md_time)
        gf0_r -= gf
        q.displayln_info("run_hmc_evolve reversed delta_diff: {} / {}".format(
            delta_h + delta_h_rev, delta_h))
        q.displayln_info("run_hmc_evolve reversed gf_diff: {} / {}".format(
            q.qnorm(gf0_r), q.qnorm(gf0)))
    #
    flag, accept_prob = metropolis_accept(delta_h, traj,
                                          rs.split("metropolis_accept"))
    #
    if flag or traj <= 20:
        q.displayln_info("run_hmc: update gf (traj={:d})".format(traj))
        gf @= gf0
Exemplo n.º 8
0
def mk_eig(gf, job_tag, inv_type):
    timer = q.Timer(f"py:mk_eig({job_tag},{inv_type})", True)
    timer.start()
    gpt_gf = g.convert(qg.gpt_from_qlat(gf), g.single)
    parity = g.odd
    params = get_lanc_params(job_tag, inv_type)
    q.displayln_info(f"mk_eig: job_tag={job_tag} inv_type={inv_type}")
    q.displayln_info(f"mk_eig: params={params}")
    fermion_params = params["fermion_params"]
    if "omega" in fermion_params:
        qm = g.qcd.fermion.zmobius(gpt_gf, fermion_params)
    else:
        qm = g.qcd.fermion.mobius(gpt_gf, fermion_params)
    w = g.qcd.fermion.preconditioner.eo2_ne(parity=parity)(qm)

    def make_src(rng):
        src = g.vspincolor(w.F_grid_eo)
        # src[:] = g.vspincolor([[1, 1, 1], [1, 1, 1], [1, 1, 1], [1, 1, 1]])
        rng.cnormal(src)
        src.checkerboard(parity)
        return src

    pit = g.algorithms.eigen.power_iteration(**params["pit_params"])
    pit_ev, _, _ = pit(w.Mpc, make_src(g.random("lanc")))
    q.displayln_info(f"mk_eig: pit_ev={pit_ev}")
    #
    cheby = g.algorithms.polynomial.chebyshev(params["cheby_params"])
    irl = g.algorithms.eigen.irl(params["irl_params"])
    evec, ev = irl(cheby(w.Mpc), make_src(g.random("lanc")))
    evals = g.algorithms.eigen.evals(w.Mpc, evec, check_eps2=1e-6, real=True)
    g.mem_report()
    #
    timer.stop()
    return evec, evals
Exemplo n.º 9
0
def test_inv(geo, inverter):
    src = mk_src(geo)
    q.displayln_info(f"src info {src.qnorm()} {src.crc32()}")
    sol = inverter * src
    q.displayln_info(f"sol info {sol.qnorm()} {sol.crc32()}")
    sol1 = inverter * sol
    q.displayln_info(f"sol1 info {sol1.qnorm()} {sol1.crc32()}")
    return src, sol, sol1
Exemplo n.º 10
0
def mk_qlat_gpt_copy_plan(ctype, total_site, multiplicity, tag):
    geo = q.Geometry(total_site, multiplicity)
    f_gpt = mk_gpt_field(ctype, geo)
    f_qlat = q.Field(ctype, geo)
    lexicographic_coordinates = g.coordinates(f_gpt)
    buf = f_qlat.mview()
    if tag == "qlat_from_gpt":
        qlat_from_gpt = g.copy_plan(buf, f_gpt)
        qlat_from_gpt.destination += g.global_memory_view(
            f_gpt.grid, [[f_gpt.grid.processor, buf, 0, buf.nbytes]])
        qlat_from_gpt.source += f_gpt.view[lexicographic_coordinates]
        qlat_from_gpt = qlat_from_gpt(local_only=True)
        return qlat_from_gpt
    elif tag == "gpt_from_qlat":
        gpt_from_qlat = g.copy_plan(f_gpt, buf)
        gpt_from_qlat.source += g.global_memory_view(
            f_gpt.grid, [[f_gpt.grid.processor, buf, 0, buf.nbytes]])
        gpt_from_qlat.destination += f_gpt.view[lexicographic_coordinates]
        gpt_from_qlat = gpt_from_qlat(local_only=True)
        return gpt_from_qlat
    else:
        q.displayln_info(tag)
        raise Exception("mk_qlat_gpt_copy_plan")
Exemplo n.º 11
0
def test_eig(gf, eig, job_tag, inv_type):
    geo = gf.geo()
    src = q.FermionField4d(geo)
    q.displayln_info(f"src norm {src.qnorm()}")
    src.set_rand(q.RngState("test_eig:{id(inv)}"))
    sol_ref = ru.get_inv(
        gf, job_tag, inv_type, inv_acc=2, eig=eig, eps=1e-10,
        timer=False) * src
    q.displayln_info(f"sol_ref norm {sol_ref.qnorm()} with eig")
    for inv_acc in [0, 1, 2]:
        sol = ru.get_inv(gf, job_tag, inv_type, inv_acc, eig=eig,
                         timer=False) * src
        sol -= sol_ref
        q.displayln_info(
            f"sol diff norm {sol.qnorm()} inv_acc={inv_acc} with eig")
        sol = ru.get_inv(gf, job_tag, inv_type, inv_acc, timer=False) * src
        sol -= sol_ref
        q.displayln_info(
            f"sol diff norm {sol.qnorm()} inv_acc={inv_acc} without eig")
Exemplo n.º 12
0
#!/usr/bin/env python3

import sys
import qlat as q

size_node_list = [[1, 1, 1, 1], [1, 1, 1, 2], [1, 1, 1, 4], [1, 1, 1, 8],
                  [2, 2, 2, 2], [2, 2, 2, 4]]

q.begin(sys.argv, size_node_list)

q.qremove_all_info("results")
q.qmkdir_info("results")

total_site = [4, 4, 4, 8]
geo = q.Geometry(total_site, 1)
q.displayln_info("geo.show() =", geo.show())
rs = q.RngState("seed")

gf = q.GaugeField(geo)

q.displayln_info(gf.geo().show_all())

q.set_unit(gf)

q.gf_show_info(gf)

gf.set_rand(rs.split("gf-init"), 0.3, 1)

gf.show_info()

plaq = gf.plaq()
Exemplo n.º 13
0
    g.create.point(g_src_gpt, xg)
    src_g = qg.qlat_from_gpt(g_src_gpt)
    #
    src_diff = src_q.copy()
    src_diff -= src_g
    #
    q.displayln_info(src_q.qnorm(), src_g.qnorm(), src_diff.qnorm())
    assert src_diff.qnorm() == 0


qg.begin_with_gpt()

rs = q.RngState("seed")
total_site = [4, 4, 4, 8]
geo = q.Geometry(total_site, 1)
q.displayln_info("geo.show() =", geo.show())

gf = q.GaugeField(geo)
gf.set_rand(rs, 0.2, 2)
gf.show_info()

test_gf(gf)

for i in range(16):
    xg = [
        rs.rand_gen() % total_site[0],
        rs.rand_gen() % total_site[1],
        rs.rand_gen() % total_site[2],
        rs.rand_gen() % total_site[3]
    ]
    test_src(xg)
Exemplo n.º 14
0
#!/usr/bin/env python3

import qlat_gpt as qg
import qlat as q
import gpt as g

qg.begin_with_gpt()

q.qremove_all_info("results")
q.qmkdir_info("results")
total_site = [4, 4, 4, 8]
geo = q.Geometry(total_site, 1)
q.displayln_info("geo.show() =", geo.show())
rs = q.RngState("seed")

gf = q.GaugeField(geo)
gf.set_unit()
gf.show_info()

mass = 0.05

m5 = 1.0

qinv = q.InverterDwfFreeField(mass=mass,
                              m5=m5,
                              timer=q.Timer("py:InverterDwfFreeField"))

mobius_params = {
    "mass": mass,
    "M5": m5,
    "b": 1.0,
Exemplo n.º 15
0
#!/usr/bin/env python3

import qlat as q

import sys, os

q.begin()

q.qremove_all_info("results")
q.qmkdir_info("results")
rs = q.RngState("seed")
total_site = [4, 4, 4, 8]
geo = q.Geometry(total_site, 1)
q.displayln_info("geo.show() =", geo.show())

psel = q.PointSelection([[0,0,0,0], [0,1,2,0]])

psel.save("results/psel.txt")

psel = q.PointSelection()
psel.load("results/psel.txt")

q.displayln_info("psel.list() =", psel.list())

n_per_tslice = 16

fsel = q.FieldSelection(geo.total_site(), n_per_tslice, rs)

q.displayln_info("fsel info =", fsel.geo().show(), fsel.n_per_tslice(), fsel.prob())

fsel.save("results/fsel.field")
Exemplo n.º 16
0
#!/usr/bin/env python3

import qlat_gpt as qg
import qlat as q
import gpt as g

qg.begin_with_gpt()

q.qremove_all_info("results")
q.qmkdir_info("results")

total_site = [4, 4, 4, 8]
geo = q.Geometry(total_site, 1)
q.displayln_info("geo.show() =", geo.show())
rs = q.RngState("seed")

grid = qg.mk_grid(geo)
rng = g.random("test")
gpt_gf = g.qcd.gauge.random(grid, rng, scale=0.5)

q.displayln_info(
    f"g.qcd.gauge.plaquette = {g.qcd.gauge.plaquette(gpt_gf):.17f}")

gpt_gf_f = g.convert(gpt_gf, g.single)

q.displayln_info(
    f"g.qcd.gauge.plaquette = {g.qcd.gauge.plaquette(gpt_gf_f):.17f} single precision"
)

gf = qg.qlat_from_gpt(gpt_gf)
Exemplo n.º 17
0
import qlat as q

import qlat_gpt as qg
import rbc_ukqcd as ru

qg.begin_with_gpt()

job_tag = "test-8nt16"
traj = 1000

q.qremove_all_info("results")
q.qmkdir_info("results")

total_site = ru.get_total_site(job_tag)
geo = q.Geometry(total_site, 1)
q.displayln_info("geo.show() =", geo.show())
rs = q.RngState(f"seed-{job_tag}-{traj}")

gf = q.GaugeField(geo)
gf.set_rand(rs.split("gf-init"), 0.05, 2)
gf.show_info()

inv_type = 1
inv_acc = 0

inv = ru.mk_inverter(gf,
                     job_tag,
                     inv_type,
                     inv_acc,
                     n_grouped=q.get_num_node())
Exemplo n.º 18
0
#!/usr/bin/env python3

import qlat_gpt as qg
import qlat as q
import gpt as g

qg.begin_with_gpt()

q.qremove_all_info("results")
q.qmkdir_info("results")
rs = q.RngState("seed")
geo = q.Geometry([4, 4, 4, 8], 1)
q.displayln_info("geo.show() =", geo.show())

gf = q.GaugeField(geo)

gf.set_rand(rs.split("gf-init"), 0.05, 2)

gf.show_info()

mobius_params = {
    "mass": 0.1,
    "M5": 1.0,
    "b": 1.0,
    "c": 0.0,
    "Ls": 8,
    "boundary_phases": [1.0, 1.0, 1.0, 1.0],
}

gpt_gf = qg.gpt_from_qlat(gf)
Exemplo n.º 19
0
def mk_ceig(gf, job_tag, inv_type):
    timer = q.Timer(f"py:mk_ceig({job_tag},{inv_type})", True)
    timer.start()
    gpt_gf = g.convert(qg.gpt_from_qlat(gf), g.single)
    parity = g.odd
    params = get_lanc_params(job_tag, inv_type)
    q.displayln_info(f"mk_ceig: job_tag={job_tag} inv_type={inv_type}")
    q.displayln_info(f"mk_ceig: params={params}")
    fermion_params = params["fermion_params"]
    if "omega" in fermion_params:
        qm = g.qcd.fermion.zmobius(gpt_gf, fermion_params)
    else:
        qm = g.qcd.fermion.mobius(gpt_gf, fermion_params)
    w = g.qcd.fermion.preconditioner.eo2_ne(parity=parity)(qm)

    def make_src(rng):
        src = g.vspincolor(w.F_grid_eo)
        # src[:] = g.vspincolor([[1, 1, 1], [1, 1, 1], [1, 1, 1], [1, 1, 1]])
        rng.cnormal(src)
        src.checkerboard(parity)
        return src

    pit = g.algorithms.eigen.power_iteration(**params["pit_params"])
    pit_ev, _, _ = pit(w.Mpc, make_src(g.random("lanc")))
    q.displayln_info(f"mk_ceig: pit_ev={pit_ev}")
    #
    cheby = g.algorithms.polynomial.chebyshev(params["cheby_params"])
    irl = g.algorithms.eigen.irl(params["irl_params"])
    evec, ev = irl(cheby(w.Mpc), make_src(g.random("lanc")))
    evals = g.algorithms.eigen.evals(w.Mpc, evec, check_eps2=1e-6, real=True)
    g.mem_report()
    #
    inv = g.algorithms.inverter
    #
    cparams = get_clanc_params(job_tag, inv_type)
    q.displayln_info(f"mk_ceig: cparams={cparams}")
    #
    grid_coarse = g.block.grid(w.F_grid_eo,
                               [get_ls_from_fermion_params(fermion_params)] +
                               cparams["block"])
    nbasis = cparams["nbasis"]
    basis = evec[0:nbasis]
    b = g.block.map(grid_coarse, basis)
    for i in range(2):
        b.orthonormalize()
    del evec
    gc.collect()
    #
    ccheby = g.algorithms.polynomial.chebyshev(cparams["cheby_params"])
    cop = b.coarse_operator(ccheby(w.Mpc))
    #
    cstart = g.vcomplex(grid_coarse, nbasis)
    cstart[:] = g.vcomplex([1] * nbasis, nbasis)
    eps2 = g.norm2(cop * cstart - b.project * ccheby(w.Mpc) * b.promote *
                   cstart) / g.norm2(cstart)
    g.message(f"Test coarse-grid promote/project cycle: {eps2}")
    cirl = g.algorithms.eigen.irl(cparams["irl_params"])
    cevec, cev = cirl(cop, cstart)
    #
    smoother = inv.cg(cparams["smoother_params"])(w.Mpc)
    smoothed_evals = []
    tmpf = g.lattice(basis[0])
    for i, cv in enumerate(cevec):
        tmpf @= smoother * b.promote * cv
        smoothed_evals = smoothed_evals + g.algorithms.eigen.evals(
            w.Mpc, [tmpf], check_eps2=10, real=True)
    g.mem_report()
    #
    timer.stop()
    return basis, cevec, smoothed_evals
Exemplo n.º 20
0
#!/usr/bin/env python3

import qlat as q
import os

q.begin()

q.qremove_all_info("results")
q.qmkdir_info("results")

total_site = [4, 4, 4, 8]
geo = q.Geometry(total_site, 1)
q.displayln_info("geo.show() =", geo.show())
rs = q.RngState("seed")

prop = q.Prop(geo)
prop.set_rand(rs.split("prop-1"))

q.displayln_info(
    f"prop.crc32() = {prop.crc32()} ; prop.qnorm() = {prop.qnorm()}")

prop.save("results/prop.field")
prop = q.Prop()
prop.load("results/prop.field")

q.displayln_info(
    f"prop.crc32() = {prop.crc32()} ; prop.qnorm() = {prop.qnorm()}")

prop.save_double("results/prop-double.field")
prop = q.Prop()
prop.load_double("results/prop-double.field")
Exemplo n.º 21
0
#!/usr/bin/env python3

import qlat as q
import os

q.begin()

q.qremove_all_info("results")
q.qmkdir_info("results")
rs = q.RngState("seed")
total_site = [4, 4, 4, 8]
geo = q.Geometry(total_site, 1)
q.displayln_info("geo.show() =", geo.show())

psel = q.PointSelection([[0, 0, 0, 0], [0, 1, 2, 0]])
n_per_tslice = 16
fsel = q.FieldSelection(geo.total_site(), n_per_tslice, rs.split("fsel"))

fselc = fsel.copy()
fselc.add_psel(psel)

prop = q.Prop(geo)
prop.set_rand(rs.split("prop-1"))
q.displayln_info("prop", prop.crc32(), prop.qnorm())

sfw = q.open_fields("results/prop.fields", "w", [1, 1, 1, 8])

q.displayln_info("sfw.new_size_node()", sfw.new_size_node())

prop.save_double(sfw, "prop.d")