nDot.io physics
08-ilang-propagation / 04-formation
04formationverified

Determines how fast a made field can approach its static value, whether a long-range part read through a conserved density can form at a finite speed, and formation speeds in oscillator cells.

Code of version 3

conserved_density_formation.py5 KB · raw
"""Check of item 2: the field of 06-ilang-source/04-profile (one field object, t_f = 1, first
order in g_s; per unit 2 n g_s), A_x = B_x = Phi_x (a conserved density), infinite lattice.
    made:   drho(rho e_1, lam) = -int_0^lam Im[e^{2iDs} (-i)^rho J_rho(2s) J_0(2s)^{D-1}] ds
    static: D = 3: -int_0^inf e^{-6t} I_rho(2t) I_0(2t)^2 dt ; D = 1: gradient = +1/2.
Criterion of (8.10) in both dimensions: ratio of the discrete radial differences along the axis,
Delta = (made(rho+1) - made(rho)) / (static(rho+1) - static(rho)) - 1, |Delta| <= EPS for every lam in
[lam_f, lam_max] (finite-window value, lam_max = 3 x prediction; horizon check with 1.5 x prediction).
Prediction of the continuum scaling limit: lam_form = rho^2 / (4 zeta_D(EPS)), zeta_D the first zero of
|F_D(zeta)| - EPS, F_1 = V, F_3 = 2 zeta V' - V, V(zeta) = sqrt(2 zeta/pi) int_0^1 (cos + sin)(zeta b^2) db.
"""
import json, os, sys, threading
from pathlib import Path
import numpy as np
from scipy import special, integrate, optimize

WALL_S = 900
_t = threading.Timer(WALL_S, lambda: (sys.stderr.write("wall-clock limit\n"), os._exit(3)))
_t.daemon = True
_t.start()

OUT = Path(__file__).parent / "output"
OUT.mkdir(exist_ok=True)
EPS = 0.1


def Dz(z):
    v, _ = integrate.quad(lambda b: np.cos(z * b * b) + np.sin(z * b * b), 0, 1)
    return np.sqrt(2 * z / np.pi) * v


def zeta_of_eps(eps):
    return optimize.brentq(lambda z: Dz(z) - eps, 1e-8, 0.5)


def D3z(z):
    """3D radial-derivative scaling function 2 z V'(z) - V(z), V = Dz (value ratio)."""
    v, _ = integrate.quad(lambda b: b * b * (np.cos(z * b * b) - np.sin(z * b * b)), 0, 1)
    return 2 * np.sqrt(2 / np.pi) * z**1.5 * v


def zeta3_of_eps(eps):
    zs = np.linspace(1e-4, 3.0, 3001)
    d = np.array([abs(D3z(x)) for x in zs])
    i = int(np.argmax(d > eps))
    return optimize.brentq(lambda x: abs(D3z(x)) - eps, zs[i - 1], zs[i])


def made_axis(D, ns, lam_max, ds):
    s = np.arange(0.0, lam_max + ds, ds)
    ph = np.exp(2j * D * s)
    J0 = special.j0(2 * s)
    out = []
    for n in ns:
        integrand = np.imag(ph * (-1j)**n * special.jv(n, 2 * s) * J0**(D - 1))
        out.append(-integrate.cumulative_trapezoid(integrand, s, initial=0.0))
    return s, np.array(out).T


def static3(n):
    f = lambda u: np.exp(u) * special.ive(n, 2 * np.exp(u)) * special.ive(0, 2 * np.exp(u))**2
    v, _ = integrate.quad(f, -30, 20, limit=4000, points=[0.0, np.log(n * n + 1.0)])
    tail = 2 * np.exp(-10.0) / (4 * np.pi)**1.5            # large-t tail, e^{-2t} I_n(2t) ~ (4 pi t)^{-1/2}
    return -(v + tail)


def lam_form(lams, Delta):
    bad = np.nonzero(np.abs(Delta) > EPS)[0]
    if not len(bad):
        return float(lams[0])
    return float(lams[bad[-1] + 1]) if bad[-1] + 1 < len(lams) else None


if __name__ == "__main__":
    z = zeta_of_eps(EPS)
    z3 = zeta3_of_eps(EPS)
    res = {"EPS": EPS, "zeta_eps": z, "pi_eps2_over_2": np.pi * EPS**2 / 2,
           "zeta3_eps": z3, "zeta3_leading_8_10": (3 * np.sqrt(2 * np.pi) * EPS / 4)**(2 / 3), "runs": []}
    for D, rhos, ds in [(1, [4, 8, 16, 32], 0.02), (3, [4, 8, 16, 32, 64], 0.01)]:
        rows = []
        for r in rhos:
            pred = r**2 / (4 * (z if D == 1 else z3))
            lmax = 3.0 * pred
            lams, m = made_axis(D, [r, r + 1], lmax, ds)
            st = 0.5 if D == 1 else static3(r + 1) - static3(r)   # static radial difference
            Delta = (m[:, 1] - m[:, 0]) / st - 1
            lf = lam_form(lams, Delta)
            half = lams <= 1.5 * pred
            lf2 = lam_form(lams[half], Delta[half])
            lin = (lams >= 2.0 * r) & (lams <= 4.0 * r)     # lambdas linear in the distance
            rows.append({"rho": r, "static_difference": st, "lam_form": lf, "pred_scaling": pred,
                         "lam_form_over_pred": lf / pred if lf else None,
                         "lam_form_half_window": lf2,
                         "max_abs_Delta_second_half_window": float(np.max(np.abs(Delta[~half]))),
                         "max_abs_Delta_lam_2rho_to_4rho": float(np.max(np.abs(Delta[lin])))})
        lr = np.log([x["rho"] for x in rows]); lf_ = np.log([x["lam_form"] for x in rows])
        res["runs"].append({"D": D, "rows": rows, "fit_exponent_all": float(np.polyfit(lr, lf_, 1)[0]),
                            "exponent_last_two": float((lf_[-1] - lf_[-2]) / (lr[-1] - lr[-2]))})
    with open(OUT / "conserved_density_formation.json", "w", encoding="utf-8") as fh:
        json.dump(res, fh, indent=1)
    print(json.dumps(res, indent=1))
oscillator_formation.py10 KB · raw
"""Check of item 3: formation of the long-range part of the made field of oscillator cells
(M -> infinity), A_x = B_x = q_x, source g_s q_0 switched on at lambda = 0.

Made field per unit g_s on a torus of side L (exact for the harmonic contract):
    da(x, lam) = -(1/L^D) sum_k cos(k.x) (1 - cos(W_k lam)) / W_k^2,  W_k^2 = m^2 + sum_i f(k_i),
    f(k) = a (1 - cos k) + b (1 - cos 2k),  c0^2 = a/2 + 2b.
It equals the infinite-lattice made field before the first image front arrives.
Static mark: infinite lattice, da_st(x) = -G(x), G(x) = int_0^inf e^{-m^2 t} prod_i g_t(x_i) dt.
Criterion (4.11): D = 3 value ratio, D = 1 discrete-gradient ratio, |Delta| <= EPS for all
lam in [lam_f, lam_max] (finite-window value), lam_max = min(0.9 (L - rho - 1) / v_front, end of the
lambda grid) (before the image front); the same with lam_max / 2 (horizon check). Arrival (4.11):
first lam with |Delta + 1| >= ETA rho^(-1/2). fold_check: membership of the separable K in note (d).
"""
import json, os, sys, threading
from pathlib import Path
import numpy as np
from scipy import special, optimize
from scipy.integrate import simpson, cumulative_trapezoid

WALL_S = 3000
_t = threading.Timer(WALL_S, lambda: (sys.stderr.write("wall-clock limit\n"), os._exit(3)))
_t.daemon = True
_t.start()

OUT = Path(__file__).parent / "output"
OUT.mkdir(exist_ok=True)
EPS, ETA, A_ARR = 0.1, 0.1, 0.5          # formation accuracy; arrival threshold ETA rho^-A_ARR
KS = {"nn": (2.0, 0.0), "control": (14.0, -3.0)}   # (a, b); both have c0 = 1


def f1(k, a, b):
    return a * (1 - np.cos(k)) + b * (1 - np.cos(2 * k))


def speeds(a, b, m=0.0):
    k = np.linspace(1e-6, np.pi, 200001)
    fp = a * np.sin(k) + 2 * b * np.sin(2 * k)
    v_front = float(np.max(fp / (2 * np.sqrt(m**2 + f1(k, a, b)))))   # max d W / d k_1 (k_perp = 0)
    g = np.linspace(0, np.pi, 161)
    F, Fp = f1(g, a, b), a * np.sin(g) + 2 * b * np.sin(2 * g)
    num = Fp[:, None, None]**2 + Fp[None, :, None]**2 + Fp[None, None, :]**2
    den = 4 * (m**2 + F[:, None, None] + F[None, :, None] + F[None, None, :])
    den[0, 0, 0] = np.inf
    return {"c0": float(np.sqrt(a / 2 + 2 * b)), "v_front_axis": v_front,
            "v_slope_max_grad": float(max(np.sqrt(np.max(num / den)), v_front))}


def g_t(t, ns, a, b, alpha, nk=4000):
    kc = min(np.pi, np.sqrt(80.0 / (alpha * t)))
    k = np.linspace(0.0, kc, nk)
    w = np.full(nk, kc / (nk - 1)); w[0] *= 0.5; w[-1] *= 0.5
    return (np.cos(np.outer(ns, k)) @ (np.exp(-t * f1(k, a, b)) * w)) / np.pi


def static_axis(D, ns, a, b, m):
    """G(n e_1) on the infinite lattice for n in ns (Laplace representation)."""
    kg = np.linspace(1e-3, np.pi, 4000)
    alpha = float(np.min(f1(kg, a, b) / kg**2))
    ts = np.logspace(-5, np.log10(60.0 / m**2), 4000)
    ns = np.asarray(ns)
    vals = np.empty((len(ts), len(ns)))
    for i, t in enumerate(ts):
        g = g_t(t, np.append(ns, 0), a, b, alpha)
        vals[i] = np.exp(-m**2 * t) * g[:-1] * g[-1]**(D - 1) * t
    return simpson(vals, x=np.log(ts), axis=0)


def made_ring(L, rhos, a, b, m, lams):
    k = 2 * np.pi * np.arange(L) / L
    W = np.sqrt(m**2 + f1(k, a, b))
    C = np.cos(np.outer(rhos, k))
    out = np.empty((len(lams), len(rhos)))
    for i0 in range(0, len(lams), 200):
        lm = lams[i0:i0 + 200]
        S = 2 * np.sin(np.outer(lm, W) / 2)**2 / W**2
        out[i0:i0 + 200] = -(S @ C.T) / L
    return out


def made_torus3(L, rhos, a, b, m, lams):
    h = L // 2
    k = 2 * np.pi * np.arange(h + 1) / L
    wt = np.full(h + 1, 2.0); wt[0] = 1.0; wt[h] = 1.0
    F = f1(k, a, b)
    W2 = m**2 + F[:, None, None] + F[None, :, None] + F[None, None, :]
    W = np.sqrt(W2)
    W23 = wt[None, :, None] * wt[None, None, :] / W2
    C = wt[None, :] * np.cos(np.outer(rhos, k))
    out = np.empty((len(lams), len(rhos)))
    for i, lm in enumerate(lams):
        S = np.sum(2 * np.sin(W * (lm / 2))**2 * W23, axis=(1, 2))
        out[i] = -(C @ S) / L**3
    return out


def formation(lams, Delta, lam_max, eta):
    sel = lams <= lam_max
    lm, d = lams[sel], np.abs(Delta[sel])
    bad = np.nonzero(d > EPS)[0]
    lf = float(lm[bad[-1] + 1]) if len(bad) and bad[-1] + 1 < len(lm) else (float(lm[0]) if not len(bad) else None)
    arr = np.nonzero(np.abs(Delta[sel] + 1) >= eta)[0]
    return lf, (float(lm[arr[0]]) if len(arr) else None)


def fold_check(a, b, D, delta=0.05):
    """Note (d) for separable K (m -> 0): stationary points of k_1 rho -+ lam W lie on the branches
    k_perp in {0, pi}^(D-1), c_b = g(k_perp); Omega_b'' = N_b / (4 h^1.5), N_b = 2 g'' h - g'^2,
    h = c_b + g(k_1); at a zero of N_b the third derivative is g3 / (2 Omega_b) (fold iff g3 != 0)."""
    g = lambda k: a * (1 - np.cos(k)) + b * (1 - np.cos(2 * k))
    g1 = lambda k: a * np.sin(k) + 2 * b * np.sin(2 * k)
    g2 = lambda k: a * np.cos(k) + 4 * b * np.cos(2 * k)
    g3 = lambda k: -a * np.sin(k) - 8 * b * np.sin(2 * k)
    c0 = np.sqrt(a / 2 + 2 * b)
    k = np.linspace(delta, np.pi, 200001)
    out = {"min_gprime_over_sin_0_pi": float(np.min(g1(k[:-1]) / np.sin(k[:-1]))),
           "g2_at_0": float(g2(0.0)), "g2_at_pi": float(g2(np.pi)), "branches": []}
    for nb in range(D):
        cb = nb * g(np.pi)
        N = lambda kk: 2 * g2(kk) * (cb + g(kk)) - g1(kk)**2
        Nk = N(k)
        idx = np.nonzero(Nk[:-1] * Nk[1:] < 0)[0]
        zs = [optimize.brentq(N, k[i], k[i + 1]) for i in idx]
        W = lambda kk: np.sqrt(cb + g(kk))
        out["branches"].append({"transverse_pi": nb, "c_b": float(cb),
                                "v_axial_max": float(np.max(g1(k) / (2 * W(k)))),
                                "N_at_pi": float(N(np.pi)), "N_at_delta": float(N(delta)),
                                "folds": [{"k": float(z), "cos_k": float(np.cos(z)),
                                           "Omega_b_third": float(g3(z) / (2 * W(z))),
                                           "w_caustic": float(c0 * 2 * W(z) / g1(z))} for z in zs]})
    return out


def kg_constant():
    """sup_{Y>=0} |1 - I_mu(Y)|, I_mu(Y) = int_0^Y J1(y)/sqrt(y^2+mu^2) dy."""
    y = np.linspace(0, 400, 400001)
    res = {}
    for mu in [1e-3, 1e-2, 0.1, 0.5, 1.0]:
        I = cumulative_trapezoid(special.j1(y) / np.sqrt(y**2 + mu**2), y, initial=0)
        res[str(mu)] = {"sup_abs_1_minus_I": float(np.max(np.abs(1 - I))),
                        "min_I": float(np.min(I)), "max_I": float(np.max(I))}
    return res


def run(D, L, rhos, m, kname, dlam):
    a, b = KS[kname]
    sp = speeds(a, b)
    sp_m = speeds(a, b, m)
    rhos = np.asarray(rhos)
    lam_end = 0.9 * (L - rhos.max() - 1) / sp_m["v_front_axis"]
    if D == 3:
        lam_end = min(lam_end, 4.0 * rhos.max() / sp["c0"])
    lams = np.arange(dlam, lam_end + dlam, dlam)
    if D == 1:
        ns = np.concatenate([rhos, rhos + 1])
        made = made_ring(L, ns, a, b, m, lams)
        G = static_axis(1, ns, a, b, m)
        n = len(rhos)
        Delta = (made[:, n:] - made[:, :n]) / (-(G[n:] - G[:n])) - 1
        Gref = None
        if b == 0.0:   # closed form, nearest neighbour: G(n) = e^{-th n}/(a sinh th), cosh th = 1 + m^2/a
            th = np.arccosh(1 + m**2 / a)
            Gref = np.exp(-th * ns) / (a * np.sinh(th))
            Gref = float(np.max(np.abs((Gref[n:] - Gref[:n]) / (G[n:] - G[:n]) - 1)))
    else:
        made = made_torus3(L, rhos, a, b, m, lams)
        G = static_axis(3, rhos, a, b, m)
        Delta = made / (-G) - 1
        Gref = None
        if b == 0.0:   # cross-check of the static with the Bessel form
            ts = np.logspace(-5, np.log10(min(60.0 / m**2, 2e8)), 6000)   # ive is finite below 1e9
            v = np.array([[np.exp(-m**2 * t) * special.ive(r, a * t) * special.ive(0, a * t)**2 * t
                           for r in rhos] for t in ts])
            Gb = simpson(v, x=np.log(ts), axis=0)
            tt = np.logspace(np.log10(ts[-1]), np.log10(60.0 / m**2), 2000)   # tail, ive ~ (2 pi x)^{-1/2}
            Gb = Gb + simpson(np.exp(-m**2 * tt) * (2 * np.pi * a * tt)**-1.5 * tt, x=np.log(tt))
            Gref = float(np.max(np.abs(Gb / G - 1)))
    rows = []
    for j, r in enumerate(rhos):
        lmax = min(0.9 * (L - r - 1) / sp_m["v_front_axis"], float(lams[-1]))
        eta = ETA * r**(-A_ARR)
        lf, la = formation(lams, Delta[:, j], lmax, eta)
        lf2, _ = formation(lams, Delta[:, j], lmax / 2, eta)
        w = lams * sp["c0"] / r
        late = (w >= 1.5) & (w <= 3.0) & (lams <= lmax)
        tail = (lams >= lmax / 2) & (lams <= lmax)
        mid = (lams >= 1.2 * r / sp["v_front_axis"]) & (w <= 0.8)
        pre = float(np.max(np.abs(Delta[mid, j] + 1))) if mid.any() else None
        rows.append({"rho": int(r), "mu": float(m * r / sp["c0"]), "lam_max": float(lmax),
                     "w_max": float(lmax * sp["c0"] / r), "arrival_threshold": float(eta),
                     "lam_arrival": la,
                     "lam_arrival_vfront_over_rho": (la * sp["v_front_axis"] / r) if la else None,
                     "lam_form": lf, "lam_form_half_window": lf2,
                     "lam_form_c0_over_rho": (lf * sp["c0"] / r) if lf else None,
                     "lam_form_minus_rho_over_c0_div_rho13": ((lf - r / sp["c0"]) / r**(1 / 3)) if lf else None,
                     "max_abs_Delta_second_half_window": float(np.max(np.abs(Delta[tail, j]))),
                     "max_abs_Delta_w_1.5_to_3": float(np.max(np.abs(Delta[late, j]))) if late.any() else None,
                     "precursor_max_abs_Delta_plus_1": pre,
                     "precursor_times_rho13": (pre * r**(1 / 3)) if pre is not None else None})
    return {"D": D, "L": L, "K": kname, "a": a, "b": b, "m_h": m, "dlam": dlam,
            "speeds_m0": sp, "speeds_at_m": sp_m, "static_crosscheck_rel_err": Gref, "rows": rows}


if __name__ == "__main__":
    res = {"EPS": EPS, "ETA": ETA, "A_ARR": A_ARR, "kg_constant": kg_constant(),
           "fold_check": {f"{kn}_D{D}": fold_check(*KS[kn], D) for kn in KS for D in (1, 3)}, "runs": []}
    for kname in KS:
        res["runs"].append(run(1, 16384, [16, 32, 64, 128, 256, 512], 5e-5, kname, 0.05))
        res["runs"].append(run(3, 256, [8, 16, 24, 48], 2.5e-4, kname, 0.05))
    with open(OUT / "oscillator_formation.json", "w", encoding="utf-8") as fh:
        json.dump(res, fh, indent=1)
    for r in res["runs"]:
        print(r["D"], r["K"], r["speeds_m0"], "static check", r["static_crosscheck_rel_err"])
        for row in r["rows"]:
            print("  ", row)
    print(res["kg_constant"])
output/conserved_density_formation.json4 KB · raw
{
 "EPS": 0.1,
 "zeta_eps": 0.015547161170110783,
 "pi_eps2_over_2": 0.015707963267948967,
 "zeta3_eps": 0.40684244934607827,
 "zeta3_leading_8_10": 0.3281714518343664,
 "runs": [
  {
   "D": 1,
   "rows": [
    {
     "rho": 4,
     "static_difference": 0.5,
     "lam_form": 433.76,
     "pred_scaling": 257.28169639676395,
     "lam_form_over_pred": 1.6859341572868134,
     "lam_form_half_window": 385.28000000000003,
     "max_abs_Delta_second_half_window": 0.10601227856077777,
     "max_abs_Delta_lam_2rho_to_4rho": 0.8349008993494698
    },
    {
     "rho": 8,
     "static_difference": 0.5,
     "lam_form": 1358.96,
     "pred_scaling": 1029.1267855870558,
     "lam_form_over_pred": 1.3204981339833595,
     "lam_form_half_window": 1358.96,
     "max_abs_Delta_second_half_window": 0.09379419787133969,
     "max_abs_Delta_lam_2rho_to_4rho": 1.0704367963721582
    },
    {
     "rho": 16,
     "static_difference": 0.5,
     "lam_form": 4753.46,
     "pred_scaling": 4116.507142348223,
     "lam_form_over_pred": 1.154731386494919,
     "lam_form_half_window": 4753.46,
     "max_abs_Delta_second_half_window": 0.08766002506153114,
     "max_abs_Delta_lam_2rho_to_4rho": 1.3822847504734623
    },
    {
     "rho": 32,
     "static_difference": 0.5,
     "lam_form": 17718.8,
     "pred_scaling": 16466.028569392893,
     "lam_form_over_pred": 1.0760821849256208,
     "lam_form_half_window": 17718.8,
     "max_abs_Delta_second_half_window": 0.08458572398245678,
     "max_abs_Delta_lam_2rho_to_4rho": 1.3686533592388863
    }
   ],
   "fit_exponent_all": 1.7863195246172574,
   "exponent_last_two": 1.8982309757089364
  },
  {
   "D": 3,
   "rows": [
    {
     "rho": 4,
     "static_difference": 0.004187791941348953,
     "lam_form": 22.52,
     "pred_scaling": 9.831815746929156,
     "lam_form_over_pred": 2.2905229898184207,
     "lam_form_half_window": null,
     "max_abs_Delta_second_half_window": 0.1714843221447424,
     "max_abs_Delta_lam_2rho_to_4rho": 0.45038458740206844
    },
    {
     "rho": 8,
     "static_difference": 0.0011177413086628594,
     "lam_form": 68.04,
     "pred_scaling": 39.32726298771662,
     "lam_form_over_pred": 1.7300975158441982,
     "lam_form_half_window": 58.72,
     "max_abs_Delta_second_half_window": 0.12042193918043953,
     "max_abs_Delta_lam_2rho_to_4rho": 0.5147511456726397
    },
    {
     "rho": 16,
     "static_difference": 0.0002933867454862297,
     "lam_form": 218.83,
     "pred_scaling": 157.3090519508665,
     "lam_form_over_pred": 1.3910833311000363,
     "lam_form_half_window": 218.83,
     "max_abs_Delta_second_half_window": 0.09109654935808087,
     "max_abs_Delta_lam_2rho_to_4rho": 1.2940144489768795
    },
    {
     "rho": 32,
     "static_difference": 7.541123729887592e-05,
     "lam_form": 760.72,
     "pred_scaling": 629.236207803466,
     "lam_form_over_pred": 1.208957765884956,
     "lam_form_half_window": 760.72,
     "max_abs_Delta_second_half_window": 0.07600308693646918,
     "max_abs_Delta_lam_2rho_to_4rho": 4.01175042194086
    },
    {
     "rho": 64,
     "static_difference": 1.9132652878900078e-05,
     "lam_form": 2788.62,
     "pred_scaling": 2516.944831213864,
     "lam_form_over_pred": 1.107938467866661,
     "lam_form_half_window": 2788.62,
     "max_abs_Delta_second_half_window": 0.06881164973551512,
     "max_abs_Delta_lam_2rho_to_4rho": 3.600843237728775
    }
   ],
   "fit_exponent_all": 1.7387311922715083,
   "exponent_last_two": 1.8741139140352194
  }
 ]
}
output/oscillator_formation.json18 KB · raw
{
 "EPS": 0.1,
 "ETA": 0.1,
 "A_ARR": 0.5,
 "kg_constant": {
  "0.001": {
   "sup_abs_1_minus_I": 1.0,
   "min_I": 0.0,
   "max_I": 1.091655721757512
  },
  "0.01": {
   "sup_abs_1_minus_I": 1.0,
   "min_I": 0.0,
   "max_I": 1.0872122951530423
  },
  "0.1": {
   "sup_abs_1_minus_I": 1.0,
   "min_I": 0.0,
   "max_I": 1.043803943767944
  },
  "0.5": {
   "sup_abs_1_minus_I": 1.0,
   "min_I": 0.0,
   "max_I": 0.8786050622292139
  },
  "1.0": {
   "sup_abs_1_minus_I": 1.0,
   "min_I": 0.0,
   "max_I": 0.7222373628601453
  }
 },
 "fold_check": {
  "nn_D1": {
   "min_gprime_over_sin_0_pi": 2.0,
   "g2_at_0": 2.0,
   "g2_at_pi": -2.0,
   "branches": [
    {
     "transverse_pi": 0,
     "c_b": 0.0,
     "v_axial_max": 0.9996875162757172,
     "N_at_pi": -16.0,
     "N_at_delta": -6.247396321847759e-06,
     "folds": []
    }
   ]
  },
  "nn_D3": {
   "min_gprime_over_sin_0_pi": 2.0,
   "g2_at_0": 2.0,
   "g2_at_pi": -2.0,
   "branches": [
    {
     "transverse_pi": 0,
     "c_b": 0.0,
     "v_axial_max": 0.9996875162757172,
     "N_at_pi": -16.0,
     "N_at_delta": -6.247396321847759e-06,
     "folds": []
    },
    {
     "transverse_pi": 1,
     "c_b": 4.0,
     "v_axial_max": 0.41421356237109297,
     "N_at_pi": -32.0,
     "N_at_delta": 15.97999791892314,
     "folds": [
      {
       "k": 1.3983703290820475,
       "cos_k": 0.17157287525380996,
       "Omega_b_third": -0.4142135623730951,
       "w_caustic": 2.414213562373095
      }
     ]
    },
    {
     "transverse_pi": 2,
     "c_b": 8.0,
     "v_axial_max": 0.31783724519065093,
     "N_at_pi": -48.0,
     "N_at_delta": 31.9600020852426,
     "folds": [
      {
       "k": 1.4696031969877372,
       "cos_k": 0.10102051443364382,
       "Omega_b_third": -0.3178372451957822,
       "w_caustic": 3.1462643699419726
      }
     ]
    }
   ]
  },
  "control_D1": {
   "min_gprime_over_sin_0_pi": 2.014996875260404,
   "g2_at_0": 2.0,
   "g2_at_pi": -26.0,
   "branches": [
    {
     "transverse_pi": 0,
     "c_b": 0.0,
     "v_axial_max": 2.4752880010458127,
     "N_at_pi": -1456.0,
     "N_at_delta": 0.00010634592333047706,
     "folds": [
      {
       "k": 1.5520422597490282,
       "cos_k": 0.01875296771732312,
       "Omega_b_third": -2.3539748849285873,
       "w_caustic": 0.4039933937187391
      }
     ]
    }
   ]
  },
  "control_D3": {
   "min_gprime_over_sin_0_pi": 2.014996875260404,
   "g2_at_0": 2.0,
   "g2_at_pi": -26.0,
   "branches": [
    {
     "transverse_pi": 0,
     "c_b": 0.0,
     "v_axial_max": 2.4752880010458127,
     "N_at_pi": -1456.0,
     "N_at_delta": 0.00010634592333047706,
     "folds": [
      {
       "k": 1.5520422597490282,
       "cos_k": 0.01875296771732312,
       "Omega_b_third": -2.3539748849285873,
       "w_caustic": 0.4039933937187391
      }
     ]
    },
    {
     "transverse_pi": 1,
     "c_b": 28.0,
     "v_axial_max": 1.3216921359462517,
     "N_at_pi": -2912.0,
     "N_at_delta": 114.37751142874353,
     "folds": [
      {
       "k": 1.9511824105954438,
       "cos_k": -0.37127898413118016,
       "Omega_b_third": -2.278910318598875,
       "w_caustic": 0.7566058484833607
      }
     ]
    },
    {
     "transverse_pi": 2,
     "c_b": 56.0,
     "v_axial_max": 1.0258261392658874,
     "N_at_pi": -4368.0,
     "N_at_delta": 228.75491651156372,
     "folds": [
      {
       "k": 1.997181516879786,
       "cos_k": -0.413582347589187,
       "Omega_b_third": -1.8312629642480829,
       "w_caustic": 0.9748240581033607
      }
     ]
    }
   ]
  }
 },
 "runs": [
  {
   "D": 1,
   "L": 16384,
   "K": "nn",
   "a": 2.0,
   "b": 0.0,
   "m_h": 5e-05,
   "dlam": 0.05,
   "speeds_m0": {
    "c0": 1.0,
    "v_front_axis": 1.0000001072486475,
    "v_slope_max_grad": 1.0000001072486475
   },
   "speeds_at_m": {
    "c0": 1.0,
    "v_front_axis": 0.9999750002880591,
    "v_slope_max_grad": 0.9999750002880591
   },
   "static_crosscheck_rel_err": 1.0898627555988583e-09,
   "rows": [
    {
     "rho": 16,
     "mu": 0.0008,
     "lam_max": 14284.3,
     "w_max": 892.76875,
     "arrival_threshold": 0.025,
     "lam_arrival": 14.3,
     "lam_arrival_vfront_over_rho": 0.8937500958534788,
     "lam_form": 39.5,
     "lam_form_half_window": 39.5,
     "lam_form_c0_over_rho": 2.46875,
     "lam_form_minus_rho_over_c0_div_rho13": 9.325981180313171,
     "max_abs_Delta_second_half_window": 0.007356978843440221,
     "max_abs_Delta_w_1.5_to_3": 0.1797020638872704,
     "precursor_max_abs_Delta_plus_1": null,
     "precursor_times_rho13": null
    },
    {
     "rho": 32,
     "mu": 0.0016,
     "lam_max": 14284.3,
     "w_max": 446.384375,
     "arrival_threshold": 0.01767766952966369,
     "lam_arrival": 29.35,
     "lam_arrival_vfront_over_rho": 0.9171875983671189,
     "lam_form": 55.1,
     "lam_form_half_window": 55.1,
     "lam_form_c0_over_rho": 1.721875,
     "lam_form_minus_rho_over_c0_div_rho13": 7.276044063142893,
     "max_abs_Delta_second_half_window": 0.008020079475012043,
     "max_abs_Delta_w_1.5_to_3": 0.12367838676602472,
     "precursor_max_abs_Delta_plus_1": null,
     "precursor_times_rho13": null
    },
    {
     "rho": 64,
     "mu": 0.0032,
     "lam_max": 14284.3,
     "w_max": 223.1921875,
     "arrival_threshold": 0.0125,
     "lam_arrival": 60.05,
     "lam_arrival_vfront_over_rho": 0.938281350629395,
     "lam_form": 91.3,
     "lam_form_half_window": 91.3,
     "lam_form_c0_over_rho": 1.4265625,
     "lam_form_minus_rho_over_c0_div_rho13": 6.825,
     "max_abs_Delta_second_half_window": 0.00935652705468426,
     "max_abs_Delta_w_1.5_to_3": 0.088383078430329,
     "precursor_max_abs_Delta_plus_1": null,
     "precursor_times_rho13": null
    },
    {
     "rho": 128,
     "mu": 0.0064,
     "lam_max": 14284.3,
     "w_max": 111.59609375,
     "arrival_threshold": 0.008838834764831846,
     "lam_arrival": 122.35000000000001,
     "lam_arrival_vfront_over_rho": 0.9558594775146253,
     "lam_form": 160.95000000000002,
     "lam_form_half_window": 160.95000000000002,
     "lam_form_c0_over_rho": 1.2574218750000001,
     "lam_form_minus_rho_over_c0_div_rho13": 6.538108082794026,
     "max_abs_Delta_second_half_window": 0.012035426380727188,
     "max_abs_Delta_w_1.5_to_3": 0.06987380692234679,
     "precursor_max_abs_Delta_plus_1": null,
     "precursor_times_rho13": null
    },
    {
     "rho": 256,
     "mu": 0.0128,
     "lam_max": 14284.3,
     "w_max": 55.798046875,
     "arrival_threshold": 0.00625,
     "lam_arrival": 248.10000000000002,
     "lam_arrival_vfront_over_rho": 0.9691407289390214,
     "lam_form": 296.5,
     "lam_form_half_window": 296.5,
     "lam_form_c0_over_rho": 1.158203125,
     "lam_form_minus_rho_over_c0_div_rho13": 6.378350315092796,
     "max_abs_Delta_second_half_window": 0.017445956661796158,
     "max_abs_Delta_w_1.5_to_3": 0.05751192461998311,
     "precursor_max_abs_Delta_plus_1": null,
     "precursor_times_rho13": null
    },
    {
     "rho": 512,
     "mu": 0.0256,
     "lam_max": 14284.257102312848,
     "w_max": 27.89893965295478,
     "arrival_threshold": 0.004419417382415923,
     "lam_arrival": 501.1,
     "lam_arrival_vfront_over_rho": 0.9787110424654244,
     "lam_form": 576.4499999999999,
     "lam_form_half_window": 576.4499999999999,
     "lam_form_c0_over_rho": 1.1258789062499999,
     "lam_form_minus_rho_over_c0_div_rho13": 8.056249999999993,
     "max_abs_Delta_second_half_window": 0.02849632355376097,
     "max_abs_Delta_w_1.5_to_3": 0.05816662001389483,
     "precursor_max_abs_Delta_plus_1": null,
     "precursor_times_rho13": null
    }
   ]
  },
  {
   "D": 3,
   "L": 256,
   "K": "nn",
   "a": 2.0,
   "b": 0.0,
   "m_h": 0.00025,
   "dlam": 0.05,
   "speeds_m0": {
    "c0": 1.0,
    "v_front_axis": 1.0000001072486475,
    "v_slope_max_grad": 1.0000001072486475
   },
   "speeds_at_m": {
    "c0": 1.0,
    "v_front_axis": 0.9998750077923975,
    "v_slope_max_grad": 0.9999247915059737
   },
   "static_crosscheck_rel_err": 3.5349501104064984e-13,
   "rows": [
    {
     "rho": 8,
     "mu": 0.002,
     "lam_max": 186.35000000000002,
     "w_max": 23.293750000000003,
     "arrival_threshold": 0.03535533905932738,
     "lam_arrival": 6.3,
     "lam_arrival_vfront_over_rho": 0.7875000844583099,
     "lam_form": 33.75,
     "lam_form_half_window": 33.75,
     "lam_form_c0_over_rho": 4.21875,
     "lam_form_minus_rho_over_c0_div_rho13": 12.875,
     "max_abs_Delta_second_half_window": 0.021747061708378368,
     "max_abs_Delta_w_1.5_to_3": 0.23790178466039902,
     "precursor_max_abs_Delta_plus_1": null,
     "precursor_times_rho13": null
    },
    {
     "rho": 16,
     "mu": 0.004,
     "lam_max": 186.35000000000002,
     "w_max": 11.646875000000001,
     "arrival_threshold": 0.025,
     "lam_arrival": 13.650000000000002,
     "lam_arrival_vfront_over_rho": 0.8531250914965025,
     "lam_form": 58.25,
     "lam_form_half_window": 58.25,
     "lam_form_c0_over_rho": 3.640625,
     "lam_form_minus_rho_over_c0_div_rho13": 16.766923611414107,
     "max_abs_Delta_second_half_window": 0.055710483229597596,
     "max_abs_Delta_w_1.5_to_3": 0.19722473633941695,
     "precursor_max_abs_Delta_plus_1": null,
     "precursor_times_rho13": null
    },
    {
     "rho": 24,
     "mu": 0.006,
     "lam_max": 186.35000000000002,
     "w_max": 7.764583333333334,
     "arrival_threshold": 0.020412414523193152,
     "lam_arrival": 21.150000000000002,
     "lam_arrival_vfront_over_rho": 0.8812500945128706,
     "lam_form": 89.35000000000001,
     "lam_form_half_window": 89.35000000000001,
     "lam_form_c0_over_rho": 3.722916666666667,
     "lam_form_minus_rho_over_c0_div_rho13": 22.655579639406994,
     "max_abs_Delta_second_half_window": 0.08622271469258758,
     "max_abs_Delta_w_1.5_to_3": 0.1776161665529532,
     "precursor_max_abs_Delta_plus_1": null,
     "precursor_times_rho13": null
    },
    {
     "rho": 48,
     "mu": 0.012,
     "lam_max": 186.32328895921478,
     "w_max": 3.881735186650308,
     "arrival_threshold": 0.014433756729740644,
     "lam_arrival": 44.0,
     "lam_arrival_vfront_over_rho": 0.9166667649779269,
     "lam_form": 150.8,
     "lam_form_half_window": 64.15,
     "lam_form_c0_over_rho": 3.141666666666667,
     "lam_form_minus_rho_over_c0_div_rho13": 28.286510098863975,
     "max_abs_Delta_second_half_window": 0.13003185290088437,
     "max_abs_Delta_w_1.5_to_3": 0.13003185290088437,
     "precursor_max_abs_Delta_plus_1": null,
     "precursor_times_rho13": null
    }
   ]
  },
  {
   "D": 1,
   "L": 16384,
   "K": "control",
   "a": 14.0,
   "b": -3.0,
   "m_h": 5e-05,
   "dlam": 0.05,
   "speeds_m0": {
    "c0": 1.0,
    "v_front_axis": 2.475288001110099,
    "v_slope_max_grad": 2.475288001110099
   },
   "speeds_at_m": {
    "c0": 1.0,
    "v_front_axis": 2.47528800071032,
    "v_slope_max_grad": 2.47528800071032
   },
   "static_crosscheck_rel_err": null,
   "rows": [
    {
     "rho": 16,
     "mu": 0.0008,
     "lam_max": 5770.650000000001,
     "w_max": 360.66562500000003,
     "arrival_threshold": 0.025,
     "lam_arrival": 6.0,
     "lam_arrival_vfront_over_rho": 0.9282330004162871,
     "lam_form": 20.250000000000004,
     "lam_form_half_window": 20.250000000000004,
     "lam_form_c0_over_rho": 1.2656250000000002,
     "lam_form_minus_rho_over_c0_div_rho13": 1.6866136177162132,
     "max_abs_Delta_second_half_window": 0.0014433697891544917,
     "max_abs_Delta_w_1.5_to_3": 0.02756316801339287,
     "precursor_max_abs_Delta_plus_1": 0.19509305447973158,
     "precursor_times_rho13": 0.4916036920546022
    },
    {
     "rho": 32,
     "mu": 0.0016,
     "lam_max": 5770.650000000001,
     "w_max": 180.33281250000002,
     "arrival_threshold": 0.01767766952966369,
     "lam_arrival": 12.55,
     "lam_arrival_vfront_over_rho": 0.970777012935367,
     "lam_form": 37.199999999999996,
     "lam_form_half_window": 37.199999999999996,
     "lam_form_c0_over_rho": 1.1624999999999999,
     "lam_form_minus_rho_over_c0_div_rho13": 1.637897364863334,
     "max_abs_Delta_second_half_window": 0.0021876150203909983,
     "max_abs_Delta_w_1.5_to_3": 0.0064909870034315365,
     "precursor_max_abs_Delta_plus_1": 0.22776747879754122,
     "precursor_times_rho13": 0.723116670894723
    },
    {
     "rho": 64,
     "mu": 0.0032,
     "lam_max": 5770.650000000001,
     "w_max": 90.16640625000001,
     "arrival_threshold": 0.0125,
     "lam_arrival": 24.85,
     "lam_arrival_vfront_over_rho": 0.9611079191810307,
     "lam_form": 69.7,
     "lam_form_half_window": 69.7,
     "lam_form_c0_over_rho": 1.0890625,
     "lam_form_minus_rho_over_c0_div_rho13": 1.425000000000001,
     "max_abs_Delta_second_half_window": 0.003680880597371594,
     "max_abs_Delta_w_1.5_to_3": 0.007079670118746106,
     "precursor_max_abs_Delta_plus_1": 0.16577416130665923,
     "precursor_times_rho13": 0.6630966452266368
    },
    {
     "rho": 128,
     "mu": 0.0064,
     "lam_max": 5770.650000000001,
     "w_max": 45.083203125000004,
     "arrival_threshold": 0.008838834764831846,
     "lam_arrival": 50.4,
     "lam_arrival_vfront_over_rho": 0.9746446504371015,
     "lam_form": 134.8,
     "lam_form_half_window": 134.8,
     "lam_form_c0_over_rho": 1.053125,
     "lam_form_minus_rho_over_c0_div_rho13": 1.349290894172972,
     "max_abs_Delta_second_half_window": 0.006680810758071809,
     "max_abs_Delta_w_1.5_to_3": 0.009196517566621765,
     "precursor_max_abs_Delta_plus_1": 0.1357744764490354,
     "precursor_times_rho13": 0.6842604836663815
    },
    {
     "rho": 256,
     "mu": 0.0128,
     "lam_max": 5770.650000000001,
     "w_max": 22.541601562500002,
     "arrival_threshold": 0.00625,
     "lam_arrival": 101.5,
     "lam_arrival_vfront_over_rho": 0.981413016065137,
     "lam_form": 264.0,
     "lam_form_half_window": 264.0,
     "lam_form_c0_over_rho": 1.03125,
     "lam_form_minus_rho_over_c0_div_rho13": 1.2599210498948732,
     "max_abs_Delta_second_half_window": 0.012739743958185334,
     "max_abs_Delta_w_1.5_to_3": 0.014823127555151805,
     "precursor_max_abs_Delta_plus_1": 0.10640494021427394,
     "precursor_times_rho13": 0.6756292561230072
    },
    {
     "rho": 512,
     "mu": 0.0256,
     "lam_max": 5770.601237472579,
     "w_max": 11.27070554193863,
     "arrival_threshold": 0.004419417382415923,
     "lam_arrival": 203.75000000000003,
     "lam_arrival_vfront_over_rho": 0.9850389262230131,
     "lam_form": 521.15,
     "lam_form_half_window": 521.15,
     "lam_form_c0_over_rho": 1.01787109375,
     "lam_form_minus_rho_over_c0_div_rho13": 1.1437499999999974,
     "max_abs_Delta_second_half_window": 0.025093098469038733,
     "max_abs_Delta_w_1.5_to_3": 0.0271919133295615,
     "precursor_max_abs_Delta_plus_1": 0.0830966097648349,
     "precursor_times_rho13": 0.6647728781186791
    }
   ]
  },
  {
   "D": 3,
   "L": 256,
   "K": "control",
   "a": 14.0,
   "b": -3.0,
   "m_h": 0.00025,
   "dlam": 0.05,
   "speeds_m0": {
    "c0": 1.0,
    "v_front_axis": 2.475288001110099,
    "v_slope_max_grad": 2.475288001110099
   },
   "speeds_at_m": {
    "c0": 1.0,
    "v_front_axis": 2.475287991115634,
    "v_slope_max_grad": 2.475287991115634
   },
   "static_crosscheck_rel_err": null,
   "rows": [
    {
     "rho": 8,
     "mu": 0.002,
     "lam_max": 75.3,
     "w_max": 9.4125,
     "arrival_threshold": 0.03535533905932738,
     "lam_arrival": 2.4,
     "lam_arrival_vfront_over_rho": 0.7425864003330297,
     "lam_form": 10.750000000000002,
     "lam_form_half_window": 10.750000000000002,
     "lam_form_c0_over_rho": 1.3437500000000002,
     "lam_form_minus_rho_over_c0_div_rho13": 1.3750000000000009,
     "max_abs_Delta_second_half_window": 0.0042833950594023396,
     "max_abs_Delta_w_1.5_to_3": 0.056940747837635586,
     "precursor_max_abs_Delta_plus_1": 0.4137443879152425,
     "precursor_times_rho13": 0.827488775830485
    },
    {
     "rho": 16,
     "mu": 0.004,
     "lam_max": 75.3,
     "w_max": 4.70625,
     "arrival_threshold": 0.025,
     "lam_arrival": 5.6000000000000005,
     "lam_arrival_vfront_over_rho": 0.8663508003885347,
     "lam_form": 19.05,
     "lam_form_half_window": 19.05,
     "lam_form_c0_over_rho": 1.190625,
     "lam_form_minus_rho_over_c0_div_rho13": 1.2103933021257522,
     "max_abs_Delta_second_half_window": 0.010530801679962343,
     "max_abs_Delta_w_1.5_to_3": 0.02253198949227997,
     "precursor_max_abs_Delta_plus_1": 0.38162130219738244,
     "precursor_times_rho13": 0.9616254234535495
    },
    {
     "rho": 24,
     "mu": 0.006,
     "lam_max": 75.3,
     "w_max": 3.1374999999999997,
     "arrival_threshold": 0.020412414523193152,
     "lam_arrival": 8.100000000000001,
     "lam_arrival_vfront_over_rho": 0.8354097003746586,
     "lam_form": 27.700000000000003,
     "lam_form_half_window": 27.700000000000003,
     "lam_form_c0_over_rho": 1.1541666666666668,
     "lam_form_minus_rho_over_c0_div_rho13": 1.2827183575486754,
     "max_abs_Delta_second_half_window": 0.023124422809707834,
     "max_abs_Delta_w_1.5_to_3": 0.023124422809707834,
     "precursor_max_abs_Delta_plus_1": 0.36652228620045246,
     "precursor_times_rho13": 1.057233219561383
    },
    {
     "rho": 48,
     "mu": 0.012,
     "lam_max": 75.26396955371362,
     "w_max": 1.5679993657023672,
     "arrival_threshold": 0.014433756729740644,
     "lam_arrival": 17.1,
     "lam_arrival_vfront_over_rho": 0.8818213503954729,
     "lam_form": 51.95,
     "lam_form_half_window": null,
     "lam_form_c0_over_rho": 1.0822916666666667,
     "lam_form_minus_rho_over_c0_div_rho13": 1.0868843860944821,
     "max_abs_Delta_second_half_window": 1.3752690872870188,
     "max_abs_Delta_w_1.5_to_3": 0.02204535788638573,
     "precursor_max_abs_Delta_plus_1": 0.3752690872870188,
     "precursor_times_rho13": 1.363818372725127
    }
   ]
  }
 ]
}
Analyse with ChatGPTnDot Physics Research plugin
ChatGPT plugin

Analyse this research in ChatGPT

The free plugin nDot Physics Research gives ChatGPT read-only access to everything published here.

  1. Open ChatGPT and select the plugin in the message box.
  2. Write your question after it:nDot Physics Research Explain what 08-ilang-propagation/04-formation establishes and what it builds on.
  3. Name the subproject when you cite an equation number, e.g. (17.7) of 03-ilang-space.
Open in ChatGPT

Interested in this research?

Join the readers' list and get an e-mail when a new stage or a correction is published. No password, and you can unsubscribe at any time.