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.
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
}
]
}
]
}