MONAD SERIES 11.1 — PURE PHYSICS SOLVER (CLARITY + SAFE REGULARIZATION) - ENGINE - PIPELINE - AND DATA (Partial) RESULTS
#!/usr/bin/env python3
"""
================================================================================
MONAD SERIES 11.1 — PURE PHYSICS SOLVER (CLARITY + SAFE REGULARIZATION)
================================================================================
This is a light, non-physical-change refactor of the original solver.
Purpose:
- Make the primitive / constitutive distinction explicit:
- Psi_field: the primitive evolved field (Pxy)
- Psi_const: the constitutive reconstruction Ψ(Ik(Π))
- Use safer sqrt-based regularizers for sign-like smoothing.
- Improve finite-check messages for easier debugging.
- Preserve all original PDEs, constitutive functional forms and dynamics.
- Keep Π as the sole prognostic state (Version A behavior).
- Add clarifying docstrings/comments where helpful.
Run: python monad_series11.1_purephysics.py --steps 1000 --N 16 --kappa 0.3
================================================================================
"""
import sys
import argparse
import numpy as np
import time
# ==============================================================================
# FILTER COLAB -f ARGUMENT
# ==============================================================================
def parse_colab_args():
"""Parse arguments, filtering Colab's -f flag."""
raw_args = sys.argv[1:]
filtered = []
skip = False
for i, arg in enumerate(raw_args):
if skip:
skip = False
continue
if arg == '-f' and i + 1 < len(raw_args):
skip = True
continue
filtered.append(arg)
parser = argparse.ArgumentParser(description='Monad Series 11.1 Pure Physics Solver')
parser.add_argument('--steps', type=int, default=25000, help='Steps per run')
parser.add_argument('--N', type=int, default=16, help='Grid size (16 or 32 for CPU)')
parser.add_argument('--dt', type=float, default=5e-6, help='Timestep')
parser.add_argument('--c', type=float, default=0.5, help='Wave speed')
parser.add_argument('--kappa', type=float, default=0.3, help='Coupling parameter')
parser.add_argument('--ko_sigma', type=float, default=0.045, help='KO dissipation')
parser.add_argument('--amplitude', type=float, default=2.5, help='Initial amplitude')
parser.add_argument('--diag', type=int, default=1000, help='Diagnostic interval')
parser.add_argument('--no_cfl_check', action='store_true', default=False,
help='Skip CFL warning')
return parser.parse_args(filtered)
# ==============================================================================
# CPU DIFF-OPERATOR KERNELS (VECTORIZED NumPy)
# ==============================================================================
def cpu_grad_2d(F, dx):
"""Compute 2D gradient using central differences (vectorized)."""
dx = float(dx)
gx = (np.roll(F, -1, axis=0) - np.roll(F, 1, axis=0)) / (2.0 * dx)
gy = (np.roll(F, -1, axis=1) - np.roll(F, 1, axis=1)) / (2.0 * dx)
return gx, gy
def cpu_lap_2d(F, dx):
"""Compute 2D Laplacian (vectorized)."""
dx2 = float(dx) * float(dx)
lap = (np.roll(F, -1, axis=0) + np.roll(F, 1, axis=0) +
np.roll(F, -1, axis=1) + np.roll(F, 1, axis=1) - 4.0 * F) / dx2
return lap
def cpu_ko_2d(F, dx, sigma):
"""4th-order Kreiss-Oliger dissipation (vectorized)."""
sigma = float(sigma)
dx4 = float(dx)**4
d4x = (np.roll(F, -2, axis=0) - 4.0*np.roll(F, -1, axis=0) +
6.0*F - 4.0*np.roll(F, 1, axis=0) + np.roll(F, 2, axis=0))
d4y = (np.roll(F, -2, axis=1) - 4.0*np.roll(F, -1, axis=1) +
6.0*F - 4.0*np.roll(F, 1, axis=1) + np.roll(F, 2, axis=1))
return -(sigma / 16.0) * (d4x + d4y) / dx4
# ==============================================================================
# INVARIANT DECOMPOSITION OF Π (EXACTLY INVERTIBLE)
# ==============================================================================
def decompose_pi(Pxx, Pxy, Pyy):
"""Decompose symmetric tensor Π into invariant stress modes."""
Lam = Pxx + Pyy
S = Pxx - Pyy
Psi = Pxy
return S, Psi, Lam
def reconstruct_pi(S, Psi, Lam):
"""Reconstruct Π from invariant stress modes (exact inverse)."""
Pxx = (Lam + S) / 2.0
Pyy = (Lam - S) / 2.0
Pxy = Psi
return Pxx, Pxy, Pyy
# ==============================================================================
# CONSTITUTIVE EVALUATION FROM INVARIANTS
# ==============================================================================
# NOTE: This function computes diagnostic/constitutive quantities from Π.
# It does NOT alter Π itself. The solver treats Π as primitive.
# Return keys:
# - Psi_field : the primitive Pxy passed in
# - Psi_const : the constitutive reconstruction Ψ(Ik(Π))
# - dPsi_const_dI* : derivatives of Ψ_const wrt invariants (for modulatory terms)
# ==============================================================================
def evaluate_monad_from_pi(Pxx, Pxy, Pyy, Pi_max=5.9259, anchor=0.0,
kappa=0.3, eta=0.2, beta=0.5, gamma=0.2,
m2=0.1, alpha=0.4, delta=0.15, eps=1e-15):
"""
Evaluate ALL FRCMFD quantities from the Monad tensor Π.
This returns both the primitive field (Psi_field == Pxy) and the
constitutive reconstruction Psi_const = Ψ(Ik). The solver uses
Psi_field for evolution and Psi_const for diagnostics / emergent geometry.
"""
S, Psi_field, Lam = decompose_pi(Pxx, Pxy, Pyy)
psi_mag_sq = Psi_field**2
# Invariants
I1 = np.abs(S) + np.abs(Lam)
I2 = S**2 - psi_mag_sq + Lam**2
I3 = np.abs(S**3) + np.abs(Lam**3)
I4 = S**4 - psi_mag_sq**2 + Lam**4
Ih1 = np.maximum(I1 / Pi_max, eps)
Ih2 = I2 / (Pi_max**2)
Ih3 = I3 / (Pi_max**3)
Ih4 = I4 / (Pi_max**4)
sqrt_Ih1 = np.sqrt(Ih1)
# Constitutive functional form (unchanged):
expf = np.exp(-0.5 * (Ih2**2 + Ih3**3 + Ih4**4))
lf = (1.0 / sqrt_Ih1) - 1.0
Psi_const = (1.0 / Pi_max) * lf * expf + anchor
# Derivatives of Psi_const wrt invariants (chain-rule components)
I1_safe = np.maximum(I1, eps)
dPsi_dI1 = -1.0 / (2.0 * Pi_max * I1_safe * sqrt_Ih1) * expf
base = (1.0 / Pi_max) * lf * expf
dPsi_dI2 = -Ih2 / (Pi_max**2) * base
dPsi_dI3 = -1.5 * (Ih3**2) / (Pi_max**3) * base
dPsi_dI4 = -2.0 * (Ih4**3) / (Pi_max**4) * base
# Safer smooth sign approximations (use sqrt-based regularizer)
eps2 = 1e-10
s_smooth = S / np.sqrt(S**2 + eps2)
lam_smooth = Lam / np.sqrt(Lam**2 + eps2)
# Compose modulatory multipliers using derivatives of Psi_const
M_T = dPsi_dI1 * s_smooth + dPsi_dI2 * 2.0 * S + dPsi_dI3 * 3.0 * S * np.abs(S) + dPsi_dI4 * 4.0 * S**3
M_T = np.clip(M_T, -1e6, 1e6)
M_C = dPsi_dI1 * lam_smooth + dPsi_dI2 * 2.0 * Lam + dPsi_dI3 * 3.0 * Lam * np.abs(Lam) + dPsi_dI4 * 4.0 * Lam**3
M_C = np.clip(M_C, -1e6, 1e6)
M_R = np.clip(dPsi_dI2 * 2.0, -1e6, 1e6)
# Constitutive diagnostic / drift measure (unchanged form)
D_drift = np.abs(
np.clip(np.log(np.maximum(np.abs(Psi_const - anchor) * Pi_max, eps)), -20, 20) +
0.5 * (np.clip(np.log(np.maximum(Ih1, eps)), -20, 20) + Ih2**2 + Ih3**3 + Ih4**4)
)
return {
'S': S,
'Psi_field': Psi_field,
'Psi_const': Psi_const,
'Lam': Lam,
'dPsi_const_dI1': dPsi_dI1,
'dPsi_const_dI2': dPsi_dI2,
'dPsi_const_dI3': dPsi_dI3,
'dPsi_const_dI4': dPsi_dI4,
'M_T': M_T,
'M_C': M_C,
'M_R': M_R,
'D_drift': D_drift
}
# ==============================================================================
# PURE PHYSICS SOLVER — NO DIAGNOSTICS, NO DATA PIPELINE
# ==============================================================================
class MonadSolver11Pure:
"""
Series 11.1: Pure physics solver — clarity fixes and safe regularization.
KEY PRINCIPLE (Version A):
- Π (Pxx, Pxy, Pyy) is the primitive dynamical variable and evolves.
- Ψ_const = Ψ(Ik(Π)) is reconstructed diagnostically (emergent geometry).
- By default, Ψ_const does NOT feed back into the time evolution.
(Constitutive feedback is a well-defined separate extension.)
"""
def __init__(self, config):
self.config = config
self.N = int(config['N'])
self.dx = float(config['dx'])
self.dt = float(config['dt'])
self.c2 = float(config.get('c', 0.5)**2)
self.kappa = float(config.get('kappa', 0.3))
self.eta = float(config.get('eta', 0.2))
self.beta = float(config.get('beta', 0.5))
self.gamma = float(config.get('gamma', 0.2))
self.m2 = float(config.get('m2', 0.1))
self.alpha = float(config.get('alpha', 0.4))
self.delta = float(config.get('delta', 0.15))
self.Pi_max = float(config.get('Pi_max', 5.9259))
self.ko_sigma = float(config.get('ko_sigma', 0.045))
self.anchor = float(config.get('anchor', 0.0))
self.step = 0
self.time = 0.0
# Fields
self.Pxx = None
self.Pxy = None
self.Pyy = None
self.Uxx = None
self.Uxy = None
self.Uyy = None
def init_gaussian(self, amplitude=2.5, width=4.0):
"""Initialize the Monad tensor Π with Gaussian profiles."""
N, dx = self.N, self.dx
half_width = (N * dx) / 2.0
x = np.linspace(-half_width, half_width, N, endpoint=False)
y = np.linspace(-half_width, half_width, N, endpoint=False)
X, Y = np.meshgrid(x, y)
R2 = X**2 + Y**2
amplitude = float(amplitude)
width = float(width)
self.Pxx = amplitude * np.exp(-R2 / (2.0 * width**2))
self.Pxy = 0.5 * amplitude * np.exp(-R2 / (2.0 * (width * 1.2)**2))
self.Pyy = 0.7 * amplitude * np.exp(-R2 / (2.0 * (width * 0.8)**2))
self.Uxx = np.zeros_like(self.Pxx)
self.Uxy = np.zeros_like(self.Pxy)
self.Uyy = np.zeros_like(self.Pyy)
# Small perturbation
np.random.seed(42)
noise_scale = 1e-8 * amplitude
self.Pxx += np.random.normal(0, noise_scale, self.Pxx.shape)
self.Pxy += np.random.normal(0, noise_scale, self.Pxy.shape)
self.Pyy += np.random.normal(0, noise_scale, self.Pyy.shape)
return self
def _finite_check(self):
"""Check for NaNs/Infs and report which field fails for easier debugging."""
if self.Pxx is None or self.Pxy is None or self.Pyy is None:
raise RuntimeError("Fields are not initialized (Pxx/Pxy/Pyy are None)")
if not np.all(np.isfinite(self.Pxx)):
raise RuntimeError("NaN/Inf detected in Pxx")
if not np.all(np.isfinite(self.Pxy)):
raise RuntimeError("NaN/Inf detected in Pxy")
if not np.all(np.isfinite(self.Pyy)):
raise RuntimeError("NaN/Inf detected in Pyy")
if not np.all(np.isfinite(self.Uxx)):
raise RuntimeError("NaN/Inf detected in Uxx")
if not np.all(np.isfinite(self.Uxy)):
raise RuntimeError("NaN/Inf detected in Uxy")
if not np.all(np.isfinite(self.Uyy)):
raise RuntimeError("NaN/Inf detected in Uyy")
def derivatives(self):
"""Compute time derivatives of the ONE Monad tensor Π.
IMPORTANT: This uses the primitive field (Psi_field == Pxy) for dynamics.
Constituive quantities (Psi_const) are used only where modulatory multipliers
computed from derivatives of Psi_const are intentionally included.
"""
dx = self.dx
# Diagnostics from current state (returns both primitive and constitutive quantities)
results = evaluate_monad_from_pi(
self.Pxx, self.Pxy, self.Pyy,
self.Pi_max, self.anchor,
self.kappa, self.eta,
self.beta, self.gamma,
self.m2, self.alpha, self.delta
)
S = results['S']
Psi_field = results['Psi_field'] # primitive Pxy
Lam = results['Lam']
M_T = results['M_T']
M_C = results['M_C']
M_R = results['M_R']
# Laplacians
lapPxx = cpu_lap_2d(self.Pxx, dx)
lapPxy = cpu_lap_2d(self.Pxy, dx)
lapPyy = cpu_lap_2d(self.Pyy, dx)
# Gradients of stress modes (use primitive field gradients for dynamics)
gSx, gSy = cpu_grad_2d(S, dx)
gLx, gLy = cpu_grad_2d(Lam, dx)
gPx, gPy = cpu_grad_2d(Psi_field, dx) # primitive gradients
gS2 = gSx**2 + gSy**2
gL2 = gLx**2 + gLy**2
gP2 = gPx**2 + gPy**2
ps_field = Psi_field**2
ls = Lam**2
# Kinematic
dPxx = self.Uxx
dPxy = self.Uxy
dPyy = self.Uyy
# Momentum (force from action) - uses primitive psi_field where originally designed
dUxx = (self.c2 * lapPxx - self.beta * self.Pxx - self.gamma * self.Pxx * self.Pxx**2 -
self.kappa * ps_field - self.eta * self.Pxx * ls + self.kappa * self.Pxx * M_T * gS2)
dUxy = (self.c2 * lapPxy - self.m2 * self.Pxy -
2.0 * self.kappa * self.Pxx * self.Pxy -
self.eta * self.Pxy * ls - self.kappa * self.Pxy * M_R * gP2)
dUyy = (self.c2 * lapPyy - self.alpha * self.Pyy - self.delta * self.Pyy * self.Pyy**2 -
self.kappa * self.Pxx * self.Pyy - self.eta * ps_field * self.Pyy +
self.kappa * self.Pyy * M_C * gL2)
# KO dissipation
if self.ko_sigma > 0:
dUxx += cpu_ko_2d(self.Uxx, dx, self.ko_sigma)
dUxy += cpu_ko_2d(self.Uxy, dx, self.ko_sigma)
dUyy += cpu_ko_2d(self.Uyy, dx, self.ko_sigma)
return dPxx, dPxy, dPyy, dUxx, dUxy, dUyy
def rk3_step(self):
"""SSP-RK3 timestep."""
dt = self.dt
Pxx_n = self.Pxx.copy()
Pxy_n = self.Pxy.copy()
Pyy_n = self.Pyy.copy()
Uxx_n = self.Uxx.copy()
Uxy_n = self.Uxy.copy()
Uyy_n = self.Uyy.copy()
# Stage 1
dPxx1, dPxy1, dPyy1, dUxx1, dUxy1, dUyy1 = self.derivatives()
self.Pxx = Pxx_n + dt*dPxx1
self.Pxy = Pxy_n + dt*dPxy1
self.Pyy = Pyy_n + dt*dPyy1
self.Uxx = Uxx_n + dt*dUxx1
self.Uxy = Uxy_n + dt*dUxy1
self.Uyy = Uyy_n + dt*dUyy1
self._finite_check()
# Stage 2
dPxx2, dPxy2, dPyy2, dUxx2, dUxy2, dUyy2 = self.derivatives()
self.Pxx = 0.75*Pxx_n + 0.25*self.Pxx + 0.25*dt*dPxx2
self.Pxy = 0.75*Pxy_n + 0.25*self.Pxy + 0.25*dt*dPxy2
self.Pyy = 0.75*Pyy_n + 0.25*self.Pyy + 0.25*dt*dPyy2
self.Uxx = 0.75*Uxx_n + 0.25*self.Uxx + 0.25*dt*dUxx2
self.Uxy = 0.75*Uxy_n + 0.25*self.Uxy + 0.25*dt*dUxy2
self.Uyy = 0.75*Uyy_n + 0.25*self.Uyy + 0.25*dt*dUyy2
self._finite_check()
# Stage 3
dPxx3, dPxy3, dPyy3, dUxx3, dUxy3, dUyy3 = self.derivatives()
self.Pxx = (1.0/3.0)*Pxx_n + (2.0/3.0)*self.Pxx + (2.0/3.0)*dt*dPxx3
self.Pxy = (1.0/3.0)*Pxy_n + (2.0/3.0)*self.Pxy + (2.0/3.0)*dt*dPxy3
self.Pyy = (1.0/3.0)*Pyy_n + (2.0/3.0)*self.Pyy + (2.0/3.0)*dt*dPyy3
self.Uxx = (1.0/3.0)*Uxx_n + (2.0/3.0)*self.Uxx + (2.0/3.0)*dt*dUxx3
self.Uxy = (1.0/3.0)*Uxy_n + (2.0/3.0)*self.Uxy + (2.0/3.0)*dt*dUxy3
self.Uyy = (1.0/3.0)*Uyy_n + (2.0/3.0)*self.Uyy + (2.0/3.0)*dt*dUyy3
self._finite_check()
self.step += 1
self.time += dt
def hamiltonian(self):
"""Compute Hamiltonian from the Monad tensor Π.
NOTE: For emergent metric / potential diagnostics we use Psi_const
(the constitutive reconstruction). This makes the Hamiltonian reflect
the emergent geometry produced by Ψ_const(Ik).
"""
dx = self.dx
results = evaluate_monad_from_pi(
self.Pxx, self.Pxy, self.Pyy,
self.Pi_max, self.anchor,
self.kappa, self.eta,
self.beta, self.gamma,
self.m2, self.alpha, self.delta
)
S = results['S']
Psi_const = results['Psi_const'] # emergent constitutive reconstruction
Lam = results['Lam']
kin = 0.5 * (self.Uxx**2 + self.Uxy**2 + self.Uyy**2)
gPxx_x, gPxx_y = cpu_grad_2d(self.Pxx, dx)
gPxy_x, gPxy_y = cpu_grad_2d(self.Pxy, dx)
gPyy_x, gPyy_y = cpu_grad_2d(self.Pyy, dx)
grad = 0.5 * self.c2 * (gPxx_x**2 + gPxx_y**2 +
gPxy_x**2 + gPxy_y**2 +
gPyy_x**2 + gPyy_y**2)
ps = Psi_const**2
pot = (0.5 * self.beta * S**2 + 0.25 * self.gamma * S**4 +
0.5 * self.m2 * ps + 0.5 * self.alpha * Lam**2 + 0.25 * self.delta * Lam**4 +
self.kappa * S * ps + self.eta * ps * Lam)
return float(np.sum(kin + grad + pot) * dx**2)
def run(self, steps, diag_interval=1000):
"""Run simulation for specified steps."""
print(f"\n{'='*60}")
print(f"SERIES 11.1 — PURE PHYSICS SOLVER (CLARITY + SAFE REGULARIZATION)")
print(f"{'='*60}")
print(f"Grid: {self.N}×{self.N}, dt={self.dt:.6f}, κ={self.kappa:.3f}")
print(f"Diagnostics: every {diag_interval} steps")
print(f"{'-'*60}")
start = time.time()
H0 = self.hamiltonian()
print(f"Step {0:6d} | H = {H0:.8e}")
for step in range(1, steps+1):
self.rk3_step()
if step % diag_interval == 0:
H = self.hamiltonian()
dr = abs(H-H0)/max(abs(H0), 1e-30)
print(f"Step {step:6d} | H={H:.8e} | ΔH/H={dr:.4e}")
if np.isnan(H) or dr > 0.05:
print(f"❌ INSTABILITY at step {step}")
break
elapsed = time.time() - start
try:
Hf = self.hamiltonian()
except Exception:
# If hamiltonian computation fails, fallback to last known H (H0) to avoid crash
Hf = H0
dr = abs(Hf - H0) / max(abs(H0), 1e-30)
print(f"{'-'*60}")
print(f"Completed {step} steps in {elapsed:.2f}s ({step/elapsed:.1f} steps/sec)")
print(f"{'='*60}")
return {
'steps': step,
'H0': float(H0),
'H_final': float(Hf),
'drift_rel': float(dr),
'elapsed': float(elapsed)
}
# ==============================================================================
# MAIN
# ==============================================================================
if __name__ == "__main__":
args = parse_colab_args()
print("\n" + "="*80)
print("🚀 SERIES 11.1 — PURE PHYSICS SOLVER (CLARITY RELEASE)")
print("="*80)
print(f"Steps: {args.steps:,}")
print(f"Grid: {args.N}×{args.N}")
print(f"dt: {args.dt}")
print(f"κ: {args.kappa}")
print("="*80)
print("✅ PURE PHYSICS — No diagnostics, no I/O, no data pipeline")
print("✅ ONE Monad tensor Π evolves (3 components: Pxx, Pxy, Pyy)")
print("✅ THREE stress modes derived INVARIANTLY from Π:")
print(" - Compression (Λ) = trace(Π) = Pxx + Pyy")
print(" - Tension (S) = deviatoric = Pxx - Pyy")
print(" - Torsion (Ψ) = off-diagonal = Pxy")
print("="*80)
config = {
'N': args.N,
'dx': 0.4 * (64.0 / args.N),
'dt': args.dt,
'c': args.c,
'kappa': args.kappa,
'eta': 0.2,
'beta': 0.5,
'gamma': 0.2,
'm2': 0.1,
'alpha': 0.4,
'delta': 0.15,
'Pi_max': 5.9259,
'ko_sigma': args.ko_sigma,
'anchor': 0.0,
'no_cfl_check': args.no_cfl_check
}
# CFL Check
c = float(config.get('c', 0.5))
dx = float(config['dx'])
dt = float(config['dt'])
cfl = c * dt / dx
if cfl > 0.5 and not config.get('no_cfl_check', False):
print(f" ⚠️ CFL ~ {cfl:.3f} > 0.5 — dt may be too large for stability")
print(f" CFL = {cfl:.4f}")
solver = MonadSolver11Pure(config)
solver.init_gaussian(amplitude=args.amplitude)
results = solver.run(steps=args.steps, diag_interval=args.diag)
print("\n" + "="*80)
print("📊 SERIES 11.1 PURE PHYSICS RESULTS")
print("="*80)
print(f"Steps completed: {results['steps']:,}/{args.steps:,}")
print(f"Initial H: {results['H0']:.8e}")
print(f"Final H: {results['H_final']:.8e}")
print(f"Drift: {results['drift_rel']:.4e} ({results['drift_rel']*100:.4f}%)")
print(f"Time: {results['elapsed']:.2f}s")
print(f"Speed: {results['steps']/results['elapsed']:.1f} steps/sec")
print("="*80)
#!/usr/bin/env python3
"""
================================================================================
MONAD SERIES 11 — N* IDENTIFICATION & DIAGNOSTICS PIPELINE (FIXED)
================================================================================
FIXED: Initialization-order bug - diagnostics now called AFTER init_gaussian()
No NoneType errors in decompose_pi()
================================================================================
"""
import sys
import time as time_module
import json
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
from pathlib import Path
from datetime import datetime
from typing import Dict, List, Optional, Tuple
import warnings
warnings.filterwarnings('ignore')
# ==============================================================================
# CRITICAL FIX: IMPORT SOLVER FROM DISK
# ==============================================================================
sys.path.insert(0, "/content")
from monad_series11_pure import MonadSolver11Pure
print("✅ MonadSolver11Pure imported successfully from /content/")
# ==============================================================================
# ENHANCED SOLVER WITH DIAGNOSTICS (FIXED INITIALIZATION ORDER)
# ==============================================================================
class MonadSolver11Diagnostics(MonadSolver11Pure):
"""
Extended Series 11 solver with additional diagnostics for N* identification.
FIXED: Removed premature _collect_diagnostics from __init__
Now called AFTER init_gaussian() via overridden method
"""
def __init__(self, config):
super().__init__(config)
# Initialize diagnostic history
self.diagnostic_history = {
'steps': [],
'H_total': [],
'H_kinetic': [],
'H_gradient': [],
'H_potential': [],
'metric_components': [],
'constitutive_residuals': [],
'field_stats': [],
'energy_balance': []
}
# Initialize H0 tracking (will be set after init_gaussian)
self.H0 = None
self.H0_components = None
self._diagnostics_initialized = False
def init_gaussian(self, amplitude=2.5, width=4.0):
"""
Override init_gaussian to call parent first, then collect diagnostics.
This fixes the NoneType bug by ensuring fields exist before diagnostics.
"""
# 1. Call parent to allocate Pxx, Pxy, Pyy arrays
super().init_gaussian(amplitude=amplitude, width=width)
# 2. Now that fields are initialized, collect step 0 invariants safely
self._collect_diagnostics(initial=True)
self._diagnostics_initialized = True
return self
def _collect_diagnostics(self, initial=False):
"""
Collect all diagnostics at current step.
FIXED: Added safety gate to prevent NoneType errors.
"""
# Safety gate: ensure fields exist before computing
if self.Pxx is None or self.Pxy is None or self.Pyy is None:
print("⚠️ WARNING: Fields not initialized, skipping diagnostics")
return None
# Hamiltonian components
H_comps = self._compute_hamiltonian_components()
# Store initial values if this is the first call
if initial or self.H0 is None:
self.H0 = H_comps['H_total']
self.H0_components = H_comps
# Reconstructed metric
metric = self._compute_reconstructed_metric()
# Constitutive residuals
residuals = self._compute_constitutive_residuals()
# Field statistics
field_stats = self._compute_field_stats()
# Energy balance
energy_balance = self._compute_energy_balance()
# Only store in history if not initial
if not initial:
self.diagnostic_history['steps'].append(self.step)
self.diagnostic_history['H_total'].append(H_comps['H_total'])
self.diagnostic_history['H_kinetic'].append(H_comps['H_kinetic'])
self.diagnostic_history['H_gradient'].append(H_comps['H_gradient'])
self.diagnostic_history['H_potential'].append(H_comps['H_potential'])
self.diagnostic_history['metric_components'].append(metric)
self.diagnostic_history['constitutive_residuals'].append(residuals)
self.diagnostic_history['field_stats'].append(field_stats)
self.diagnostic_history['energy_balance'].append(energy_balance)
return {
'H_components': H_comps,
'metric': metric,
'residuals': residuals,
'field_stats': field_stats,
'energy_balance': energy_balance,
'is_initial': initial
}
def get_diagnostics(self):
"""Public method to collect diagnostics at current step."""
if not self._diagnostics_initialized:
print("⚠️ WARNING: Diagnostics called before init_gaussian()")
return None
return self._collect_diagnostics(initial=False)
def _compute_hamiltonian_components(self):
"""Compute Hamiltonian components separately."""
dx = self.dx
# Get constitutive results
results = self._evaluate_monad_from_pi(
self.Pxx, self.Pxy, self.Pyy,
self.Pi_max, self.anchor,
self.kappa, self.eta,
self.beta, self.gamma,
self.m2, self.alpha, self.delta
)
S = results['S']
Psi = results['Psi']
Lam = results['Lam']
# Kinetic energy
H_kin = 0.5 * (self.Uxx**2 + self.Uxy**2 + self.Uyy**2)
# Gradient energy
gPxx_x, gPxx_y = self._cpu_grad_2d(self.Pxx, dx)
gPxy_x, gPxy_y = self._cpu_grad_2d(self.Pxy, dx)
gPyy_x, gPyy_y = self._cpu_grad_2d(self.Pyy, dx)
H_grad = 0.5 * self.c2 * (gPxx_x**2 + gPxx_y**2 +
gPxy_x**2 + gPxy_y**2 +
gPyy_x**2 + gPyy_y**2)
# Potential energy
ps = Psi**2
H_pot = (0.5 * self.beta * S**2 + 0.25 * self.gamma * S**4 +
0.5 * self.m2 * ps + 0.5 * self.alpha * Lam**2 + 0.25 * self.delta * Lam**4 +
self.kappa * S * ps + self.eta * ps * Lam)
# Total
H_total = H_kin + H_grad + H_pot
return {
'H_total': float(np.sum(H_total) * dx**2),
'H_kinetic': float(np.sum(H_kin) * dx**2),
'H_gradient': float(np.sum(H_grad) * dx**2),
'H_potential': float(np.sum(H_pot) * dx**2),
}
def _compute_reconstructed_metric(self):
"""Compute reconstructed metric g(Π) from primitive tensor."""
results = self._evaluate_monad_from_pi(
self.Pxx, self.Pxy, self.Pyy,
self.Pi_max, self.anchor,
self.kappa, self.eta,
self.beta, self.gamma,
self.m2, self.alpha, self.delta
)
S = results['S']
Psi = results['Psi']
Lam = results['Lam']
Psi_val = results['Psi_val']
metric = {
'g_tt': float(np.mean(Psi_val)),
'g_xx': float(np.mean(S)),
'g_yy': float(np.mean(Lam)),
'g_xy': float(np.mean(Psi)),
'g_tt_std': float(np.std(Psi_val)),
'g_xx_std': float(np.std(S)),
'g_yy_std': float(np.std(Lam)),
'g_xy_std': float(np.std(Psi)),
'g_det': float(np.mean(S * Lam - Psi**2)),
}
return metric
def _compute_constitutive_residuals(self):
"""Compute residuals of the constitutive map."""
results = self._evaluate_monad_from_pi(
self.Pxx, self.Pxy, self.Pyy,
self.Pi_max, self.anchor,
self.kappa, self.eta,
self.beta, self.gamma,
self.m2, self.alpha, self.delta
)
D_drift = results['D_drift']
return {
'D_drift_mean': float(np.mean(D_drift)),
'D_drift_std': float(np.std(D_drift)),
'D_drift_max': float(np.max(D_drift)),
'D_drift_min': float(np.min(D_drift)),
}
def _compute_field_stats(self):
"""Compute statistics of the primitive tensor field Π."""
return {
'Pxx_mean': float(np.mean(self.Pxx)),
'Pxx_std': float(np.std(self.Pxx)),
'Pxx_max': float(np.max(self.Pxx)),
'Pxx_min': float(np.min(self.Pxx)),
'Pxy_mean': float(np.mean(self.Pxy)),
'Pxy_std': float(np.std(self.Pxy)),
'Pxy_max': float(np.max(self.Pxy)),
'Pxy_min': float(np.min(self.Pxy)),
'Pyy_mean': float(np.mean(self.Pyy)),
'Pyy_std': float(np.std(self.Pyy)),
'Pyy_max': float(np.max(self.Pyy)),
'Pyy_min': float(np.min(self.Pyy)),
'Uxx_mean': float(np.mean(self.Uxx)),
'Uxx_std': float(np.std(self.Uxx)),
'Uxx_max': float(np.max(self.Uxx)),
'Uxx_min': float(np.min(self.Uxx)),
'Uxy_mean': float(np.mean(self.Uxy)),
'Uxy_std': float(np.std(self.Uxy)),
'Uxy_max': float(np.max(self.Uxy)),
'Uxy_min': float(np.min(self.Uxy)),
'Uyy_mean': float(np.mean(self.Uyy)),
'Uyy_std': float(np.std(self.Uyy)),
'Uyy_max': float(np.max(self.Uyy)),
'Uyy_min': float(np.min(self.Uyy)),
}
def _compute_energy_balance(self):
"""Compute energy balance components."""
comps = self._compute_hamiltonian_components()
if self.H0_components is not None:
dH_total = comps['H_total'] - self.H0_components['H_total']
dH_kinetic = comps['H_kinetic'] - self.H0_components['H_kinetic']
dH_gradient = comps['H_gradient'] - self.H0_components['H_gradient']
dH_potential = comps['H_potential'] - self.H0_components['H_potential']
else:
dH_total = 0.0
dH_kinetic = 0.0
dH_gradient = 0.0
dH_potential = 0.0
return {
'dH_total': float(dH_total),
'dH_kinetic': float(dH_kinetic),
'dH_gradient': float(dH_gradient),
'dH_potential': float(dH_potential),
'dH_total_rel': float(dH_total / max(abs(self.H0_components['H_total']), 1e-30)) if self.H0_components else 0.0,
}
def _evaluate_monad_from_pi(self, *args, **kwargs):
"""Wrapper for evaluate_monad_from_pi."""
from monad_series11_pure import evaluate_monad_from_pi
return evaluate_monad_from_pi(*args, **kwargs)
def _cpu_grad_2d(self, *args, **kwargs):
"""Wrapper for cpu_grad_2d."""
from monad_series11_pure import cpu_grad_2d
return cpu_grad_2d(*args, **kwargs)
def run_with_diagnostics(self, steps, diag_interval=1000, drift_threshold=0.05):
"""Run simulation with comprehensive diagnostics."""
# Ensure diagnostics are initialized
if not self._diagnostics_initialized:
raise RuntimeError("Must call init_gaussian() before run_with_diagnostics()")
# Memory gate for large N runs
if self.N >= 256:
print(f"⚠️ MEMORY GATE: N={self.N} - Large grid detected")
print(f" Estimated memory usage: ~{self.N**2 * 6 * 8 / 1024 / 1024:.1f} MB for fields")
print(f" Total cells: {self.N**2:,}")
print(f"\n{'='*60}")
print(f"SERIES 11 — DIAGNOSTICS SOLVER")
print(f"{'='*60}")
print(f"Grid: {self.N}×{self.N}, dt={self.dt:.6f}, κ={self.kappa:.3f}")
print(f"Diagnostics: every {diag_interval} steps")
print(f"{'-'*60}")
start = time_module.time()
# Initial diagnostics already collected in init_gaussian()
H0 = self.H0
print(f"Step {0:6d} | H_total = {H0:.8e}")
print(f" | H_kin = {self.H0_components['H_kinetic']:.8e}")
print(f" | H_grad = {self.H0_components['H_gradient']:.8e}")
print(f" | H_pot = {self.H0_components['H_potential']:.8e}")
for step in range(1, steps+1):
self.rk3_step()
if step % diag_interval == 0:
diag = self.get_diagnostics()
if diag is None:
print("⚠️ WARNING: Diagnostics returned None, skipping")
continue
H = diag['H_components']['H_total']
dr = abs(H - H0) / max(abs(H0), 1e-30)
print(f"Step {step:6d} | H_total={H:.8e} | ΔH/H={dr:.4e}")
print(f" | H_kin={diag['H_components']['H_kinetic']:.8e}")
print(f" | H_grad={diag['H_components']['H_gradient']:.8e}")
print(f" | H_pot={diag['H_components']['H_potential']:.8e}")
print(f" | g_det={diag['metric']['g_det']:.4e}")
print(f" | D_drift={diag['residuals']['D_drift_mean']:.4e}")
if np.isnan(H) or dr > drift_threshold:
print(f"❌ INSTABILITY at step {step}")
break
elapsed = time_module.time() - start
Hf = self.diagnostic_history['H_total'][-1] if self.diagnostic_history['H_total'] else 0
dr = abs(Hf - H0) / max(abs(H0), 1e-30)
print(f"{'-'*60}")
print(f"Completed {len(self.diagnostic_history['steps'])} diagnostic intervals in {elapsed:.2f}s")
print(f"{'='*60}")
return {
'steps': step,
'H0': float(H0),
'H_final': float(Hf),
'drift_rel': float(dr),
'elapsed': float(elapsed),
'diagnostic_history': self.diagnostic_history
}
# ==============================================================================
# AUTOMATED CHARTING FUNCTIONS
# ==============================================================================
def generate_charts(results, output_dir):
"""Generate automated charts from pipeline results."""
output_path = Path(output_dir)
output_path.mkdir(exist_ok=True)
# Extract data by N
data_by_N = {}
for r in results:
N = r['N']
if N not in data_by_N:
data_by_N[N] = []
data_by_N[N].append(r)
# Skip if no valid runs
valid_runs = [r for r in results if not r.get('failed', False)]
if not valid_runs:
print("⚠️ No valid runs to chart")
return
# 1. Drift vs N
fig, ax = plt.subplots(figsize=(10, 6))
Ns = sorted(data_by_N.keys())
drifts = []
errors = []
for N in Ns:
runs = data_by_N[N]
d = [r['drift_pct'] for r in runs if not r.get('failed', False)]
if d:
drifts.append(np.mean(d))
errors.append(np.std(d) if len(d) > 1 else 0)
else:
drifts.append(None)
errors.append(0)
valid_N = [Ns[i] for i in range(len(Ns)) if drifts[i] is not None]
valid_drifts = [d for d in drifts if d is not None]
valid_errors = [errors[i] for i in range(len(Ns)) if drifts[i] is not None]
if valid_N:
ax.errorbar(valid_N, valid_drifts, yerr=valid_errors, fmt='o-', capsize=5, markersize=8)
ax.set_xlabel('Grid Size N')
ax.set_ylabel('Energy Drift (%)')
ax.set_title('Hamiltonian Conservation vs Grid Resolution')
ax.grid(True, alpha=0.3)
ax.set_xscale('log')
ax.set_yscale('log')
fig.savefig(output_path / 'drift_vs_N.png', dpi=150, bbox_inches='tight')
plt.close()
# 2. Kinetic vs Gradient Energy
fig, ax = plt.subplots(figsize=(10, 6))
for N in Ns[:4]:
runs = data_by_N[N]
for r in runs:
if r.get('diagnostic_history'):
hist = r['diagnostic_history']
steps = hist.get('steps', [])
H_kin = hist.get('H_kinetic', [])
H_grad = hist.get('H_gradient', [])
if steps and H_kin and H_grad:
ax.plot(steps, H_kin, '--', label=f'N={N} (Kinetic)', alpha=0.7)
ax.plot(steps, H_grad, '-', label=f'N={N} (Gradient)', alpha=0.7)
ax.set_xlabel('Steps')
ax.set_ylabel('Energy')
ax.set_title('Kinetic vs Gradient Energy Evolution')
ax.legend()
ax.grid(True, alpha=0.3)
fig.savefig(output_path / 'kinetic_vs_gradient.png', dpi=150, bbox_inches='tight')
plt.close()
print(f"✅ Charts saved to {output_path}/")
# ==============================================================================
# MARKDOWN REPORT GENERATOR
# ==============================================================================
def generate_markdown_report(results, timestamp):
"""Generate automated Markdown report."""
report_lines = []
report_lines.append("# MONAD SERIES 11 — N* IDENTIFICATION REPORT")
report_lines.append("")
report_lines.append(f"**Generated:** {datetime.now().strftime('%Y-%m-%d %H:%M:%S')}")
report_lines.append("")
# Summary stats
total = len(results)
failed = len([r for r in results if r.get('failed', False)])
success = total - failed
report_lines.append("## 📊 Overall Statistics")
report_lines.append("")
report_lines.append("| Metric | Value |")
report_lines.append("|--------|-------|")
report_lines.append(f"| Total runs | {total} |")
report_lines.append(f"| Successful | {success} ({success/total*100:.1f}%) |")
report_lines.append(f"| Failed | {failed} ({failed/total*100:.1f}%) |")
report_lines.append("")
# Results by N
report_lines.append("## 📐 N* Sweep Results")
report_lines.append("")
report_lines.append("| N | Steps | Drift % | Status |")
report_lines.append("|---|-------|---------|--------|")
for r in results:
if 'N_star' in r.get('label', ''):
status = "✅ OK" if not r['failed'] else f"❌ {r['failure_step']:,}"
report_lines.append(f"| {r['N']} | {r['steps']:,} | {r['drift_pct']:.4f} | {status} |")
report_lines.append("")
# Check if any valid runs
if success == 0:
report_lines.append("⚠️ **No successful runs completed.**")
report_lines.append("")
report_lines.append("All runs failed during initialization due to the NoneType bug.")
report_lines.append("The fix has been applied - re-run the pipeline.")
report_lines.append("")
report_lines.append("---")
report_lines.append("*Report generated automatically by Monad Series 11 N* Pipeline*")
return "\n".join(report_lines)
# ==============================================================================
# SINGLE RUN EXECUTOR
# ==============================================================================
def run_single_run(config, target_steps=25000, diag_interval=1000,
drift_threshold=0.05, label="", verbose=True):
"""Run a single configuration with diagnostics."""
if verbose:
print(f"\n▶️ Running: κ={config['kappa']:.3f} | N={config['N']} | dt={config['dt']:.1e} | steps={target_steps:,}")
if label:
print(f" Label: {label}")
print("-"*60)
start_time = time_module.perf_counter()
try:
# Create solver
solver = MonadSolver11Diagnostics(config)
# CRITICAL FIX: Initialize fields BEFORE diagnostics
solver.init_gaussian(amplitude=2.5)
# Now fields exist, diagnostics are collected in init_gaussian
# Run with diagnostics
result_metrics = solver.run_with_diagnostics(
steps=target_steps,
diag_interval=diag_interval,
drift_threshold=drift_threshold
)
elapsed = time_module.perf_counter() - start_time
H0 = result_metrics.get('H0', 0.0)
Hf = result_metrics.get('H_final', 0.0)
drift_rel = result_metrics.get('drift_rel', 0.0)
completed_steps = result_metrics.get('steps', target_steps)
diag_history = result_metrics.get('diagnostic_history', {})
physics_ok = drift_rel <= drift_threshold
result = {
'kappa': config['kappa'],
'N': config['N'],
'dt': config['dt'],
'steps': completed_steps,
'steps_target': target_steps,
'drift_rel': float(drift_rel),
'drift_pct': float(drift_rel * 100),
'H0': float(H0),
'H_final': float(Hf),
'elapsed': elapsed,
'physics_ok': physics_ok,
'failed': not physics_ok,
'failure_step': completed_steps if not physics_ok else None,
'failure_drift': drift_rel if not physics_ok else None,
'label': label,
'diagnostic_history': diag_history,
'timestamp': datetime.now().isoformat()
}
if verbose:
status = "❌ FAILED" if result['failed'] else "✅ SUCCESS"
print(f"{status} | Steps: {completed_steps:,} | Drift: {drift_rel*100:.4f}%")
print(f" Time: {elapsed:.2f}s")
return result
except Exception as e:
elapsed = time_module.perf_counter() - start_time
print(f"❌ Run failed with exception: {e}")
import traceback
traceback.print_exc()
return {
'kappa': config['kappa'],
'N': config['N'],
'dt': config['dt'],
'steps': 0,
'steps_target': target_steps,
'drift_rel': 1.0,
'drift_pct': 100.0,
'H0': 0,
'H_final': 0,
'elapsed': elapsed,
'physics_ok': False,
'failed': True,
'failure_step': 0,
'failure_drift': 1.0,
'label': label,
'diagnostic_history': {},
'error': str(e)
}
# ==============================================================================
# TEST SETS
# ==============================================================================
def run_n_star_sweep(base_config, all_results, verbose=True):
"""TEST 1: N* Sweep (N = [16, 32, 64, 128, 256])"""
print("\n" + "="*80)
print("🔬 TEST 1: N* Sweep")
print("="*80)
print("Goal: Find finite-resolution saturation point N*")
print("Config: κ=0.50, N=[16,32,64,128,256], 100K steps")
print("="*80)
N_values = [16, 32, 64, 128, 256]
results = []
for N in N_values:
config = base_config.copy()
config['N'] = N
config['dx'] = 0.4 * (64.0 / N)
config['kappa'] = 0.50
if N >= 256:
print(f"\n⚠️ Large N={N} detected - memory usage will be high")
print(f" Cells: {N**2:,}, Fields: ~{N**2 * 6 * 8 / 1024 / 1024:.1f} MB")
diag_interval = max(100, int(100000 / 50))
result = run_single_run(
config=config,
target_steps=100000,
diag_interval=diag_interval,
drift_threshold=0.05,
label=f"N_star_{N}",
verbose=verbose
)
all_results.append(result)
results.append(result)
print("\n📊 N* Sweep Results:")
print("-"*40)
print(f"{'N':>6} | {'Steps':>10} | {'Drift %':>10} | {'Status':>10}")
print("-"*40)
for r in results:
status = "✅ OK" if not r['failed'] else f"❌ {r['failure_step']:,}"
print(f"{r['N']:>6} | {r['steps']:>10,} | {r['drift_pct']:>10.4f} | {status:>10}")
return results
def run_extended_n_sweep(base_config, all_results, verbose=True):
"""TEST 2: Extended N* Sweep (N = [256, 512])"""
print("\n" + "="*80)
print("🔬 TEST 2: Extended N* Sweep")
print("="*80)
print("Goal: Confirm N* at higher resolution")
print("Config: κ=0.50, N=[256,512], 50K steps")
print("="*80)
N_values = [256, 512]
results = []
for N in N_values:
config = base_config.copy()
config['N'] = N
config['dx'] = 0.4 * (64.0 / N)
config['kappa'] = 0.50
print(f"\n⚠️ MEMORY GATE: N={N} - Large grid detected")
print(f" Cells: {N**2:,}, Fields: ~{N**2 * 6 * 8 / 1024 / 1024:.1f} MB")
diag_interval = max(100, int(50000 / 50))
result = run_single_run(
config=config,
target_steps=50000,
diag_interval=diag_interval,
drift_threshold=0.05,
label=f"N_extended_{N}",
verbose=verbose
)
all_results.append(result)
results.append(result)
print("\n📊 Extended N* Results:")
print("-"*40)
for r in results:
status = "✅ OK" if not r['failed'] else f"❌ {r['failure_step']:,}"
print(f"N={r['N']:>3}: {r['steps']:>10,} steps, drift={r['drift_pct']:>10.4f}%, {status}")
return results
def run_high_kappa_validation(base_config, all_results, verbose=True):
"""TEST 3: High-κ Validation"""
print("\n" + "="*80)
print("🔬 TEST 3: High-κ Validation")
print("="*80)
print("Goal: Verify stability at higher κ")
print("Config: κ=[0.53,0.55], N=[64,128], 100K steps")
print("="*80)
kappa_values = [0.53, 0.55]
N_values = [64, 128]
results = []
for N in N_values:
for kappa in kappa_values:
config = base_config.copy()
config['N'] = N
config['dx'] = 0.4 * (64.0 / N)
config['kappa'] = kappa
diag_interval = max(100, int(100000 / 50))
result = run_single_run(
config=config,
target_steps=100000,
diag_interval=diag_interval,
drift_threshold=0.05,
label=f"highkappa_k{kappa:.2f}_N{N}",
verbose=verbose
)
all_results.append(result)
results.append(result)
print("\n📊 High-κ Validation Results:")
print("-"*40)
for r in results:
status = "✅ OK" if not r['failed'] else f"❌ {r['failure_step']:,}"
print(f"κ={r['kappa']:.2f}, N={r['N']:>3}: {r['steps']:>10,} steps, drift={r['drift_pct']:>10.4f}%, {status}")
return results
def run_constitutive_map_sweep(base_config, all_results, verbose=True):
"""TEST 4: Constitutive Map Stability"""
print("\n" + "="*80)
print("🔬 TEST 4: Constitutive Map Stability")
print("="*80)
print("Goal: Map exact transition to stable regime")
print("Config: κ=[0.47,0.48,0.49,0.50,0.51,0.52], N=64, 100K steps")
print("="*80)
kappa_values = [0.47, 0.48, 0.49, 0.50, 0.51, 0.52]
N = 64
results = []
for kappa in kappa_values:
config = base_config.copy()
config['N'] = N
config['dx'] = 0.4 * (64.0 / N)
config['kappa'] = kappa
diag_interval = max(100, int(100000 / 50))
result = run_single_run(
config=config,
target_steps=100000,
diag_interval=diag_interval,
drift_threshold=0.05,
label=f"constitutive_kappa{kappa:.2f}_N{N}",
verbose=verbose
)
all_results.append(result)
results.append(result)
print("\n📊 Constitutive Map Results:")
print("-"*40)
for r in results:
status = "✅ OK" if not r['failed'] else f"❌ {r['failure_step']:,}"
print(f"κ={r['kappa']:.2f}: {r['steps']:>10,} steps, drift={r['drift_pct']:>10.4f}%, {status}")
return results
# ==============================================================================
# MAIN
# ==============================================================================
def main():
print("\n" + "="*80)
print("🚀 MONAD SERIES 11 — N* IDENTIFICATION & DIAGNOSTICS (FIXED)")
print("="*80)
print("FIXED: Initialization-order bug resolved")
print("FIXED: Diagnostics now called AFTER init_gaussian()")
print("="*80)
print("Tests:")
print(" 1. N* Sweep (N=[16,32,64,128,256], 100K steps)")
print(" 2. Extended N* Sweep (N=[256,512], 50K steps)")
print(" 3. High-κ Validation (κ=[0.53,0.55], N=[64,128])")
print(" 4. Constitutive Map Stability (κ=0.47-0.52, N=64)")
print("="*80)
# Base configuration
base_config = {
'N': 16,
'dx': 0.4 * (64.0 / 16),
'dt': 5e-6,
'c': 0.5,
'kappa': 0.3,
'eta': 0.2,
'beta': 0.5,
'gamma': 0.2,
'm2': 0.1,
'alpha': 0.4,
'delta': 0.15,
'Pi_max': 5.9259,
'ko_sigma': 0.045,
'anchor': 0.0,
'no_cfl_check': True
}
all_results = []
timestamp = datetime.now().strftime('%Y%m%d_%H%M%S')
print(f"\n📂 Results timestamp: {timestamp}")
print(f"📁 Output: /content/series11_nstar/")
print("="*80)
# Run all tests
print("\n🔬 RUNNING TEST 1: N* Sweep")
run_n_star_sweep(base_config, all_results, verbose=True)
print("\n🔬 RUNNING TEST 2: Extended N* Sweep")
run_extended_n_sweep(base_config, all_results, verbose=True)
print("\n🔬 RUNNING TEST 3: High-κ Validation")
run_high_kappa_validation(base_config, all_results, verbose=True)
print("\n🔬 RUNNING TEST 4: Constitutive Map Stability")
run_constitutive_map_sweep(base_config, all_results, verbose=True)
# Save results
output_dir = Path('/content/series11_nstar')
output_dir.mkdir(exist_ok=True)
json_path = output_dir / f'series11_nstar_{timestamp}.json'
with open(json_path, 'w') as f:
json.dump(all_results, f, indent=2, default=str)
print(f"\n💾 Results saved to: {json_path}")
# Check if any valid runs
valid_runs = [r for r in all_results if not r.get('failed', False)]
if valid_runs:
# Generate charts
print("\n📊 Generating charts...")
generate_charts(all_results, output_dir / 'charts')
else:
print("\n⚠️ No valid runs completed - skipping charts")
# Generate Markdown report
print("\n📝 Generating Markdown report...")
md_report = generate_markdown_report(all_results, timestamp)
md_path = output_dir / f'Nstar_report_{timestamp}.md'
with open(md_path, 'w') as f:
f.write(md_report)
print(f"✅ Markdown report saved to: {md_path}")
# Summary
total = len(all_results)
failed = len([r for r in all_results if r.get('failed', False)])
success = total - failed
print("\n" + "="*80)
print("📊 SERIES 11 N* IDENTIFICATION — SUMMARY")
print("="*80)
print(f" Total runs: {total}")
print(f" Successful: {success} ({success/total*100:.1f}%)")
print(f" Failed: {failed} ({failed/total*100:.1f}%)")
if valid_runs:
best = min(valid_runs, key=lambda x: x.get('drift_rel', 1.0))
print(f"\n 🏆 Best: κ={best['kappa']:.3f}, N={best['N']}, drift={best['drift_pct']:.4f}%")
else:
print("\n ⚠️ No successful runs completed.")
print(" The initialization-order bug has been fixed.")
print(" Re-run the pipeline to get valid data.")
print("\n" + "="*80)
print("✅ N* IDENTIFICATION PIPELINE COMPLETE")
print("="*80)
print(f"\n📁 All results saved to: /content/series11_nstar/")
print(f" - JSON: {json_path.name}")
if valid_runs:
print(f" - Charts: charts/")
print(f" - Markdown: {md_path.name}")
if __name__ == "__main__":
main()
✅ MonadSolver11Pure imported successfully from /content/
================================================================================
🚀 MONAD SERIES 11 — N* IDENTIFICATION & DIAGNOSTICS (FIXED)
================================================================================
FIXED: Initialization-order bug resolved
FIXED: Diagnostics now called AFTER init_gaussian()
================================================================================
Tests:
1. N* Sweep (N=[16,32,64,128,256], 100K steps)
2. Extended N* Sweep (N=[256,512], 50K steps)
3. High-κ Validation (κ=[0.53,0.55], N=[64,128])
4. Constitutive Map Stability (κ=0.47-0.52, N=64)
================================================================================
📂 Results timestamp: 20260701_045204
📁 Output: /content/series11_nstar/
================================================================================
🔬 RUNNING TEST 1: N* Sweep
================================================================================
🔬 TEST 1: N* Sweep
================================================================================
Goal: Find finite-resolution saturation point N*
Config: κ=0.50, N=[16,32,64,128,256], 100K steps
================================================================================
▶️ Running: κ=0.500 | N=16 | dt=5.0e-06 | steps=100,000
Label: N_star_16
------------------------------------------------------------
============================================================
SERIES 11 — DIAGNOSTICS SOLVER
============================================================
Grid: 16×16, dt=0.000005, κ=0.500
Diagnostics: every 2000 steps
------------------------------------------------------------
Step 0 | H_total = 5.19480220e+02
| H_kin = 0.00000000e+00
| H_grad = 3.90763838e+00
| H_pot = 5.15572582e+02
Step 2000 | H_total=5.19476738e+02 | ΔH/H=6.7038e-06
| H_kin=2.59962339e-01
| H_grad=3.90622136e+00
| H_pot=5.15310554e+02
| g_det=1.5646e-01
| D_drift=3.9985e-01
Step 4000 | H_total=5.19466211e+02 | ΔH/H=2.6967e-05
| H_kin=1.03881807e+00
| H_grad=3.90197418e+00
| H_pot=5.14525419e+02
| g_det=1.5626e-01
| D_drift=3.9970e-01
Step 6000 | H_total=5.19448406e+02 | ΔH/H=6.1242e-05
| H_kin=2.33348258e+00
| H_grad=3.89490846e+00
| H_pot=5.13220015e+02
| g_det=1.5591e-01
| D_drift=3.9945e-01
Step 8000 | H_total=5.19422936e+02 | ΔH/H=1.1027e-04
| H_kin=4.13884162e+00
| H_grad=3.88504352e+00
| H_pot=5.11399051e+02
| g_det=1.5544e-01
| D_drift=3.9910e-01
Step 10000 | H_total=5.19389266e+02 | ΔH/H=1.7509e-04
| H_kin=6.44778946e+00
| H_grad=3.87240625e+00
| H_pot=5.09069070e+02
| g_det=1.5483e-01
| D_drift=3.9866e-01
Step 12000 | H_total=5.19346724e+02 | ΔH/H=2.5698e-04
| H_kin=9.25128179e+00
| H_grad=3.85703100e+00
| H_pot=5.06238411e+02
| g_det=1.5408e-01
| D_drift=3.9813e-01
Step 14000 | H_total=5.19294508e+02 | ΔH/H=3.5750e-04
| H_kin=1.25384026e+01
| H_grad=3.83895940e+00
| H_pot=5.02917146e+02
| g_det=1.5321e-01
| D_drift=3.9750e-01
Step 16000 | H_total=5.19231695e+02 | ΔH/H=4.7841e-04
| H_kin=1.62964442e+01
| H_grad=3.81824015e+00
| H_pot=4.99117011e+02
| g_det=1.5221e-01
| D_drift=3.9678e-01
Step 18000 | H_total=5.19157259e+02 | ΔH/H=6.2170e-04
| H_kin=2.05109998e+01
| H_grad=3.79492879e+00
| H_pot=4.94851331e+02
| g_det=1.5108e-01
| D_drift=3.9597e-01
Step 20000 | H_total=5.19070081e+02 | ΔH/H=7.8952e-04
| H_kin=2.51660669e+01
| H_grad=3.76908742e+00
| H_pot=4.90134927e+02
| g_det=1.4983e-01
| D_drift=3.9508e-01
Step 22000 | H_total=5.18968965e+02 | ΔH/H=9.8417e-04
| H_kin=3.02441614e+01
| H_grad=3.74078438e+00
| H_pot=4.84984020e+02
| g_det=1.4845e-01
| D_drift=3.9411e-01
Step 24000 | H_total=5.18852657e+02 | ΔH/H=1.2081e-03
| H_kin=3.57264395e+01
| H_grad=3.71009399e+00
| H_pot=4.79416123e+02
| g_det=1.4696e-01
| D_drift=3.9306e-01
Step 26000 | H_total=5.18719857e+02 | ΔH/H=1.4637e-03
| H_kin=4.15928281e+01
| H_grad=3.67709612e+00
| H_pot=4.73449933e+02
| g_det=1.4535e-01
| D_drift=3.9193e-01
Step 28000 | H_total=5.18569242e+02 | ΔH/H=1.7536e-03
| H_kin=4.78221605e+01
| H_grad=3.64187587e+00
| H_pot=4.67105206e+02
| g_det=1.4364e-01
| D_drift=3.9073e-01
Step 30000 | H_total=5.18399482e+02 | ΔH/H=2.0804e-03
| H_kin=5.43923170e+01
| H_grad=3.60452318e+00
| H_pot=4.60402642e+02
| g_det=1.4182e-01
| D_drift=3.8946e-01
Step 32000 | H_total=5.18209254e+02 | ΔH/H=2.4466e-03
| H_kin=6.12803691e+01
| H_grad=3.56513239e+00
| H_pot=4.53363753e+02
| g_det=1.3989e-01
| D_drift=3.8813e-01
Step 34000 | H_total=5.17997266e+02 | ΔH/H=2.8547e-03
| H_kin=6.84627242e+01
| H_grad=3.52380188e+00
| H_pot=4.46010740e+02
| g_det=1.3787e-01
| D_drift=3.8673e-01
Step 36000 | H_total=5.17762267e+02 | ΔH/H=3.3071e-03
| H_kin=7.59152721e+01
| H_grad=3.48063360e+00
| H_pot=4.38366361e+02
| g_det=1.3575e-01
| D_drift=3.8527e-01
Step 38000 | H_total=5.17503069e+02 | ΔH/H=3.8060e-03
| H_kin=8.36135299e+01
| H_grad=3.43573267e+00
| H_pot=4.30453806e+02
| g_det=1.3354e-01
| D_drift=3.8375e-01
Step 40000 | H_total=5.17218559e+02 | ΔH/H=4.3537e-03
| H_kin=9.15327843e+01
| H_grad=3.38920694e+00
| H_pot=4.22296568e+02
| g_det=1.3125e-01
| D_drift=3.8218e-01
Step 42000 | H_total=5.16907715e+02 | ΔH/H=4.9521e-03
| H_kin=9.96482309e+01
| H_grad=3.34116656e+00
| H_pot=4.13918318e+02
| g_det=1.2887e-01
| D_drift=3.8056e-01
Step 44000 | H_total=5.16569618e+02 | ΔH/H=5.6029e-03
| H_kin=1.07935109e+02
| H_grad=3.29172355e+00
| H_pot=4.05342786e+02
| g_det=1.2643e-01
| D_drift=3.7889e-01
Step 46000 | H_total=5.16203463e+02 | ΔH/H=6.3078e-03
| H_kin=1.16368830e+02
| H_grad=3.24099138e+00
| H_pot=3.96593642e+02
| g_det=1.2391e-01
| D_drift=3.7717e-01
Step 48000 | H_total=5.15808570e+02 | ΔH/H=7.0679e-03
| H_kin=1.24925100e+02
| H_grad=3.18908457e+00
| H_pot=3.87694385e+02
| g_det=1.2132e-01
| D_drift=3.7541e-01
Step 50000 | H_total=5.15384395e+02 | ΔH/H=7.8845e-03
| H_kin=1.33580038e+02
| H_grad=3.13611828e+00
| H_pot=3.78668239e+02
| g_det=1.1868e-01
| D_drift=3.7361e-01
Step 52000 | H_total=5.14930531e+02 | ΔH/H=8.7582e-03
| H_kin=1.42310276e+02
| H_grad=3.08220792e+00
| H_pot=3.69538047e+02
| g_det=1.1598e-01
| D_drift=3.7176e-01
Step 54000 | H_total=5.14446719e+02 | ΔH/H=9.6895e-03
| H_kin=1.51093066e+02
| H_grad=3.02746877e+00
| H_pot=3.60326185e+02
| g_det=1.1323e-01
| D_drift=3.6989e-01
Step 56000 | H_total=5.13932851e+02 | ΔH/H=1.0679e-02
| H_kin=1.59906366e+02
| H_grad=2.97201564e+00
| H_pot=3.51054470e+02
| g_det=1.1044e-01
| D_drift=3.6797e-01
Step 58000 | H_total=5.13388969e+02 | ΔH/H=1.1726e-02
| H_kin=1.68728920e+02
| H_grad=2.91596251e+00
| H_pot=3.41744087e+02
| g_det=1.0761e-01
| D_drift=3.6603e-01
Step 60000 | H_total=5.12815268e+02 | ΔH/H=1.2830e-02
| H_kin=1.77540332e+02
| H_grad=2.85942223e+00
| H_pot=3.32415514e+02
| g_det=1.0474e-01
| D_drift=3.6405e-01
Step 62000 | H_total=5.12212095e+02 | ΔH/H=1.3991e-02
| H_kin=1.86321129e+02
| H_grad=2.80250623e+00
| H_pot=3.23088461e+02
| g_det=1.0184e-01
| D_drift=3.6204e-01
Step 64000 | H_total=5.11579947e+02 | ΔH/H=1.5208e-02
| H_kin=1.95052807e+02
| H_grad=2.74532419e+00
| H_pot=3.13781815e+02
| g_det=9.8914e-02
| D_drift=3.6001e-01
Step 66000 | H_total=5.10919464e+02 | ΔH/H=1.6479e-02
| H_kin=2.03717886e+02
| H_grad=2.68798383e+00
| H_pot=3.04513595e+02
| g_det=9.5969e-02
| D_drift=3.5795e-01
Step 68000 | H_total=5.10231431e+02 | ΔH/H=1.7804e-02
| H_kin=2.12299932e+02
| H_grad=2.63059069e+00
| H_pot=2.95300908e+02
| g_det=9.3009e-02
| D_drift=3.5586e-01
Step 70000 | H_total=5.09516763e+02 | ΔH/H=1.9180e-02
| H_kin=2.20783594e+02
| H_grad=2.57324787e+00
| H_pot=2.86159922e+02
| g_det=9.0038e-02
| D_drift=3.5375e-01
Step 72000 | H_total=5.08776508e+02 | ΔH/H=2.0605e-02
| H_kin=2.29154613e+02
| H_grad=2.51605585e+00
| H_pot=2.77105839e+02
| g_det=8.7061e-02
| D_drift=3.5162e-01
Step 74000 | H_total=5.08011831e+02 | ΔH/H=2.2077e-02
| H_kin=2.37399840e+02
| H_grad=2.45911236e+00
| H_pot=2.68152879e+02
| g_det=8.4082e-02
| D_drift=3.4947e-01
Step 76000 | H_total=5.07224011e+02 | ΔH/H=2.3593e-02
| H_kin=2.45507230e+02
| H_grad=2.40251221e+00
| H_pot=2.59314269e+02
| g_det=8.1105e-02
| D_drift=3.4730e-01
Step 78000 | H_total=5.06414430e+02 | ΔH/H=2.5152e-02
| H_kin=2.53465844e+02
| H_grad=2.34634716e+00
| H_pot=2.50602239e+02
| g_det=7.8135e-02
| D_drift=3.4510e-01
Step 80000 | H_total=5.05584564e+02 | ΔH/H=2.6749e-02
| H_kin=2.61265837e+02
| H_grad=2.29070583e+00
| H_pot=2.42028021e+02
| g_det=7.5176e-02
| D_drift=3.4289e-01
Step 82000 | H_total=5.04735977e+02 | ΔH/H=2.8383e-02
| H_kin=2.68898440e+02
| H_grad=2.23567360e+00
| H_pot=2.33601864e+02
| g_det=7.2231e-02
| D_drift=3.4066e-01
Step 84000 | H_total=5.03870312e+02 | ΔH/H=3.0049e-02
| H_kin=2.76355944e+02
| H_grad=2.18133258e+00
| H_pot=2.25333035e+02
| g_det=6.9305e-02
| D_drift=3.3842e-01
Step 86000 | H_total=5.02989282e+02 | ΔH/H=3.1745e-02
| H_kin=2.83631673e+02
| H_grad=2.12776153e+00
| H_pot=2.17229847e+02
| g_det=6.6401e-02
| D_drift=3.3616e-01
Step 88000 | H_total=5.02094671e+02 | ΔH/H=3.3467e-02
| H_kin=2.90719964e+02
| H_grad=2.07503585e+00
| H_pot=2.09299670e+02
| g_det=6.3523e-02
| D_drift=3.3391e-01
Step 90000 | H_total=5.01188334e+02 | ΔH/H=3.5212e-02
| H_kin=2.97616141e+02
| H_grad=2.02322758e+00
| H_pot=2.01548965e+02
| g_det=6.0673e-02
| D_drift=3.3170e-01
Step 92000 | H_total=5.00272216e+02 | ΔH/H=3.6975e-02
| H_kin=3.04316506e+02
| H_grad=1.97240537e+00
| H_pot=1.93983305e+02
| g_det=5.7857e-02
| D_drift=3.2947e-01
Step 94000 | H_total=4.99348399e+02 | ΔH/H=3.8754e-02
| H_kin=3.10818357e+02
| H_grad=1.92263456e+00
| H_pot=1.86607407e+02
| g_det=5.5075e-02
| D_drift=3.2723e-01
Step 96000 | H_total=4.98419259e+02 | ΔH/H=4.0542e-02
| H_kin=3.17120115e+02
| H_grad=1.87397715e+00
| H_pot=1.79425167e+02
| g_det=5.2332e-02
| D_drift=3.2498e-01
Step 98000 | H_total=4.97488083e+02 | ΔH/H=4.2335e-02
| H_kin=3.23221905e+02
| H_grad=1.82649186e+00
| H_pot=1.72439686e+02
| g_det=4.9631e-02
| D_drift=3.2270e-01
Step 100000 | H_total=4.96564018e+02 | ΔH/H=4.4114e-02
| H_kin=3.29130488e+02
| H_grad=1.78023421e+00
| H_pot=1.65653296e+02
| g_det=4.6973e-02
| D_drift=3.2042e-01
------------------------------------------------------------
Completed 50 diagnostic intervals in 362.90s
============================================================
✅ SUCCESS | Steps: 100,000 | Drift: 4.4114%
Time: 362.90s
▶️ Running: κ=0.500 | N=32 | dt=5.0e-06 | steps=100,000
Label: N_star_32
------------------------------------------------------------
============================================================
SERIES 11 — DIAGNOSTICS SOLVER
============================================================
Grid: 32×32, dt=0.000005, κ=0.500
Diagnostics: every 2000 steps
------------------------------------------------------------
Step 0 | H_total = 5.19747369e+02
| H_kin = 0.00000000e+00
| H_grad = 4.17368488e+00
| H_pot = 5.15573684e+02
Step 2000 | H_total=5.19743781e+02 | ΔH/H=6.9028e-06
| H_kin=2.60035089e-01
| H_grad=4.17214103e+00
| H_pot=5.15311605e+02
| g_det=1.5645e-01
| D_drift=4.0025e-01
Step 4000 | H_total=5.19732939e+02 | ΔH/H=2.7762e-05
| H_kin=1.03910840e+00
| H_grad=4.16751394e+00
| H_pot=5.14526317e+02
| g_det=1.5625e-01
| D_drift=4.0010e-01
Step 6000 | H_total=5.19714610e+02 | ΔH/H=6.3028e-05
| H_kin=2.33413357e+00
| H_grad=4.15981695e+00
| H_pot=5.13220660e+02
| g_det=1.5591e-01
| D_drift=3.9985e-01
Step 8000 | H_total=5.19688409e+02 | ΔH/H=1.1344e-04
| H_kin=4.13999359e+00
| H_grad=4.14907222e+00
| H_pot=5.11399343e+02
| g_det=1.5543e-01
| D_drift=3.9951e-01
Step 10000 | H_total=5.19653805e+02 | ΔH/H=1.8002e-04
| H_kin=6.44957902e+00
| H_grad=4.13531060e+00
| H_pot=5.09068916e+02
| g_det=1.5482e-01
| D_drift=3.9906e-01
Step 12000 | H_total=5.19610130e+02 | ΔH/H=2.6405e-04
| H_kin=9.25384094e+00
| H_grad=4.11857148e+00
| H_pot=5.06237717e+02
| g_det=1.5408e-01
| D_drift=3.9853e-01
Step 14000 | H_total=5.19556585e+02 | ΔH/H=3.6707e-04
| H_kin=1.25418578e+01
| H_grad=4.09890258e+00
| H_pot=5.02915825e+02
| g_det=1.5320e-01
| D_drift=3.9790e-01
Step 16000 | H_total=5.19492256e+02 | ΔH/H=4.9084e-04
| H_kin=1.63009157e+01
| H_grad=4.07635969e+00
| H_pot=4.99114980e+02
| g_det=1.5220e-01
| D_drift=3.9718e-01
Step 18000 | H_total=5.19416120e+02 | ΔH/H=6.3733e-04
| H_kin=2.05166007e+01
| H_grad=4.05100641e+00
| H_pot=4.94848513e+02
| g_det=1.5107e-01
| D_drift=3.9638e-01
Step 20000 | H_total=5.19327068e+02 | ΔH/H=8.0866e-04
| H_kin=2.51729028e+01
| H_grad=4.02291382e+00
| H_pot=4.90131251e+02
| g_det=1.4982e-01
| D_drift=3.9548e-01
Step 22000 | H_total=5.19223911e+02 | ΔH/H=1.0071e-03
| H_kin=3.02523295e+01
| H_grad=3.99216009e+00
| H_pot=4.84979421e+02
| g_det=1.4844e-01
| D_drift=3.9451e-01
Step 24000 | H_total=5.19105403e+02 | ΔH/H=1.2351e-03
| H_kin=3.57360281e+01
| H_grad=3.95883013e+00
| H_pot=4.79410545e+02
| g_det=1.4695e-01
| D_drift=3.9346e-01
Step 26000 | H_total=5.18970255e+02 | ΔH/H=1.4952e-03
| H_kin=4.16039166e+01
| H_grad=3.92301517e+00
| H_pot=4.73443323e+02
| g_det=1.4535e-01
| D_drift=3.9233e-01
Step 28000 | H_total=5.18817154e+02 | ΔH/H=1.7897e-03
| H_kin=4.78348187e+01
| H_grad=3.88481228e+00
| H_pot=4.67097523e+02
| g_det=1.4363e-01
| D_drift=3.9113e-01
Step 30000 | H_total=5.18644779e+02 | ΔH/H=2.1214e-03
| H_kin=5.44066052e+01
| H_grad=3.84432397e+00
| H_pot=4.60393850e+02
| g_det=1.4181e-01
| D_drift=3.8986e-01
Step 32000 | H_total=5.18451821e+02 | ΔH/H=2.4926e-03
| H_kin=6.12963376e+01
| H_grad=3.80165767e+00
| H_pot=4.53353825e+02
| g_det=1.3988e-01
| D_drift=3.8852e-01
Step 34000 | H_total=5.18236996e+02 | ΔH/H=2.9060e-03
| H_kin=6.84804137e+01
| H_grad=3.75692525e+00
| H_pot=4.45999657e+02
| g_det=1.3786e-01
| D_drift=3.8712e-01
Step 36000 | H_total=5.17999067e+02 | ΔH/H=3.3638e-03
| H_kin=7.59347137e+01
| H_grad=3.71024252e+00
| H_pot=4.38354111e+02
| g_det=1.3574e-01
| D_drift=3.8566e-01
Step 38000 | H_total=5.17736859e+02 | ΔH/H=3.8682e-03
| H_kin=8.36347450e+01
| H_grad=3.66172874e+00
| H_pot=4.30440385e+02
| g_det=1.3353e-01
| D_drift=3.8415e-01
Step 40000 | H_total=5.17449270e+02 | ΔH/H=4.4216e-03
| H_kin=9.15557852e+01
| H_grad=3.61150610e+00
| H_pot=4.22281979e+02
| g_det=1.3124e-01
| D_drift=3.8258e-01
Step 42000 | H_total=5.17135292e+02 | ΔH/H=5.0257e-03
| H_kin=9.96730211e+01
| H_grad=3.55969921e+00
| H_pot=4.13902572e+02
| g_det=1.2887e-01
| D_drift=3.8095e-01
Step 44000 | H_total=5.16794019e+02 | ΔH/H=5.6823e-03
| H_kin=1.07961683e+02
| H_grad=3.50643463e+00
| H_pot=4.05325901e+02
| g_det=1.2642e-01
| D_drift=3.7928e-01
Step 46000 | H_total=5.16424658e+02 | ΔH/H=6.3929e-03
| H_kin=1.16397176e+02
| H_grad=3.45184036e+00
| H_pot=3.96575642e+02
| g_det=1.2390e-01
| D_drift=3.7756e-01
Step 48000 | H_total=5.16026544e+02 | ΔH/H=7.1589e-03
| H_kin=1.24955198e+02
| H_grad=3.39604534e+00
| H_pot=3.87675301e+02
| g_det=1.2132e-01
| D_drift=3.7580e-01
Step 50000 | H_total=5.15599144e+02 | ΔH/H=7.9812e-03
| H_kin=1.33611859e+02
| H_grad=3.33917904e+00
| H_pot=3.78648106e+02
| g_det=1.1867e-01
| D_drift=3.7400e-01
Step 52000 | H_total=5.15142067e+02 | ΔH/H=8.8607e-03
| H_kin=1.42343789e+02
| H_grad=3.28137096e+00
| H_pot=3.69516907e+02
| g_det=1.1597e-01
| D_drift=3.7215e-01
Step 54000 | H_total=5.14655067e+02 | ΔH/H=9.7976e-03
| H_kin=1.51128233e+02
| H_grad=3.22275023e+00
| H_pot=3.60304084e+02
| g_det=1.1323e-01
| D_drift=3.7028e-01
Step 56000 | H_total=5.14138048e+02 | ΔH/H=1.0792e-02
| H_kin=1.59943144e+02
| H_grad=3.16344520e+00
| H_pot=3.51031458e+02
| g_det=1.1043e-01
| D_drift=3.6836e-01
Step 58000 | H_total=5.13591065e+02 | ΔH/H=1.1845e-02
| H_kin=1.68767264e+02
| H_grad=3.10358304e+00
| H_pot=3.41720218e+02
| g_det=1.0760e-01
| D_drift=3.6641e-01
Step 60000 | H_total=5.13014328e+02 | ΔH/H=1.2954e-02
| H_kin=1.77580194e+02
| H_grad=3.04328941e+00
| H_pot=3.32390845e+02
| g_det=1.0473e-01
| D_drift=3.6444e-01
Step 62000 | H_total=5.12408196e+02 | ΔH/H=1.4121e-02
| H_kin=1.86362457e+02
| H_grad=2.98268807e+00
| H_pot=3.23063051e+02
| g_det=1.0183e-01
| D_drift=3.6243e-01
Step 64000 | H_total=5.11773179e+02 | ΔH/H=1.5342e-02
| H_kin=1.95095552e+02
| H_grad=2.92190063e+00
| H_pot=3.13755726e+02
| g_det=9.8907e-02
| D_drift=3.6039e-01
Step 66000 | H_total=5.11109932e+02 | ΔH/H=1.6619e-02
| H_kin=2.03761997e+02
| H_grad=2.86104622e+00
| H_pot=3.04486889e+02
| g_det=9.5963e-02
| D_drift=3.5833e-01
Step 68000 | H_total=5.10419251e+02 | ΔH/H=1.7947e-02
| H_kin=2.12345361e+02
| H_grad=2.80024127e+00
| H_pot=2.95273648e+02
| g_det=9.3004e-02
| D_drift=3.5625e-01
Step 70000 | H_total=5.09702067e+02 | ΔH/H=1.9327e-02
| H_kin=2.20830296e+02
| H_grad=2.73959924e+00
| H_pot=2.86132172e+02
| g_det=9.0033e-02
| D_drift=3.5413e-01
Step 72000 | H_total=5.08959442e+02 | ΔH/H=2.0756e-02
| H_kin=2.29202549e+02
| H_grad=2.67923045e+00
| H_pot=2.77077663e+02
| g_det=8.7056e-02
| D_drift=3.5200e-01
Step 74000 | H_total=5.08192556e+02 | ΔH/H=2.2232e-02
| H_kin=2.37448975e+02
| H_grad=2.61924190e+00
| H_pot=2.68124339e+02
| g_det=8.4077e-02
| D_drift=3.4985e-01
Step 76000 | H_total=5.07402706e+02 | ΔH/H=2.3751e-02
| H_kin=2.45557542e+02
| H_grad=2.55973710e+00
| H_pot=2.59285427e+02
| g_det=8.1101e-02
| D_drift=3.4767e-01
Step 78000 | H_total=5.06591292e+02 | ΔH/H=2.5312e-02
| H_kin=2.53517322e+02
| H_grad=2.50081596e+00
| H_pot=2.50573154e+02
| g_det=7.8131e-02
| D_drift=3.4548e-01
Step 80000 | H_total=5.05759817e+02 | ΔH/H=2.6912e-02
| H_kin=2.61318489e+02
| H_grad=2.44257466e+00
| H_pot=2.41998753e+02
| g_det=7.5172e-02
| D_drift=3.4327e-01
Step 82000 | H_total=5.04909876e+02 | ΔH/H=2.8548e-02
| H_kin=2.68952305e+02
| H_grad=2.38510565e+00
| H_pot=2.33572466e+02
| g_det=7.2227e-02
| D_drift=3.4104e-01
Step 84000 | H_total=5.04043163e+02 | ΔH/H=3.0215e-02
| H_kin=2.76411104e+02
| H_grad=2.32849749e+00
| H_pot=2.25303561e+02
| g_det=6.9301e-02
| D_drift=3.3879e-01
Step 86000 | H_total=5.03161480e+02 | ΔH/H=3.1911e-02
| H_kin=2.83688301e+02
| H_grad=2.27283491e+00
| H_pot=2.17200344e+02
| g_det=6.6398e-02
| D_drift=3.3653e-01
Step 88000 | H_total=5.02266825e+02 | ΔH/H=3.3633e-02
| H_kin=2.90778443e+02
| H_grad=2.21819872e+00
| H_pot=2.09270183e+02
| g_det=6.3519e-02
| D_drift=3.3426e-01
Step 90000 | H_total=5.01362151e+02 | ΔH/H=3.5373e-02
| H_kin=2.97677957e+02
| H_grad=2.16466591e+00
| H_pot=2.01519528e+02
| g_det=6.0670e-02
| D_drift=3.3198e-01
Step 92000 | H_total=5.00445352e+02 | ΔH/H=3.7137e-02
| H_kin=3.04379101e+02
| H_grad=2.11230960e+00
| H_pot=1.93953941e+02
| g_det=5.7854e-02
| D_drift=3.2975e-01
Step 94000 | H_total=4.99527882e+02 | ΔH/H=3.8903e-02
| H_kin=3.10888527e+02
| H_grad=2.06119902e+00
| H_pot=1.86578156e+02
| g_det=5.5073e-02
| D_drift=3.2753e-01
Step 96000 | H_total=4.98587876e+02 | ΔH/H=4.0711e-02
| H_kin=3.17180381e+02
| H_grad=2.01139966e+00
| H_pot=1.79396095e+02
| g_det=5.2330e-02
| D_drift=3.2536e-01
Step 98000 | H_total=4.97652330e+02 | ΔH/H=4.2511e-02
| H_kin=3.23278479e+02
| H_grad=1.96297321e+00
| H_pot=1.72410878e+02
| g_det=4.9629e-02
| D_drift=3.2317e-01
Step 100000 | H_total=4.96719678e+02 | ΔH/H=4.4306e-02
| H_kin=3.29178874e+02
| H_grad=1.91597791e+00
| H_pot=1.65624826e+02
| g_det=4.6971e-02
| D_drift=3.2097e-01
------------------------------------------------------------
Completed 50 diagnostic intervals in 508.03s
============================================================
✅ SUCCESS | Steps: 100,000 | Drift: 4.4306%
Time: 508.04s
▶️ Running: κ=0.500 | N=64 | dt=5.0e-06 | steps=100,000
Label: N_star_64
------------------------------------------------------------
============================================================
SERIES 11 — DIAGNOSTICS SOLVER
============================================================
Grid: 64×64, dt=0.000005, κ=0.500
Diagnostics: every 2000 steps
------------------------------------------------------------
Step 0 | H_total = 5.19818320e+02
| H_kin = 0.00000000e+00
| H_grad = 4.24434285e+00
| H_pot = 5.15573977e+02
Step 2000 | H_total=5.19814704e+02 | ΔH/H=6.9570e-06
| H_kin=2.60053824e-01
| H_grad=4.24276475e+00
| H_pot=5.15311885e+02
| g_det=1.5645e-01
| D_drift=4.0035e-01
Step 4000 | H_total=5.19803776e+02 | ΔH/H=2.7979e-05
| H_kin=1.03918315e+00
| H_grad=4.23803507e+00
| H_pot=5.14526558e+02
| g_det=1.5624e-01
| D_drift=4.0020e-01
Step 6000 | H_total=5.19785305e+02 | ΔH/H=6.3514e-05
| H_kin=2.33430116e+00
| H_grad=4.23016763e+00
| H_pot=5.13220836e+02
| g_det=1.5590e-01
| D_drift=3.9995e-01
Step 8000 | H_total=5.19758904e+02 | ΔH/H=1.1430e-04
| H_kin=4.14029010e+00
| H_grad=4.21918541e+00
| H_pot=5.11399429e+02
| g_det=1.5543e-01
| D_drift=3.9961e-01
Step 10000 | H_total=5.19724046e+02 | ΔH/H=1.8136e-04
| H_kin=6.45003957e+00
| H_grad=4.20512039e+00
| H_pot=5.09068886e+02
| g_det=1.5482e-01
| D_drift=3.9916e-01
Step 12000 | H_total=5.19680062e+02 | ΔH/H=2.6597e-04
| H_kin=9.25449942e+00
| H_grad=4.18801338e+00
| H_pot=5.06237549e+02
| g_det=1.5407e-01
| D_drift=3.9863e-01
Step 14000 | H_total=5.19626156e+02 | ΔH/H=3.6968e-04
| H_kin=1.25427467e+01
| H_grad=4.16791385e+00
| H_pot=5.02915496e+02
| g_det=1.5320e-01
| D_drift=3.9800e-01
Step 16000 | H_total=5.19561414e+02 | ΔH/H=4.9422e-04
| H_kin=1.63020658e+01
| H_grad=4.14487960e+00
| H_pot=4.99114469e+02
| g_det=1.5220e-01
| D_drift=3.9728e-01
Step 18000 | H_total=5.19484818e+02 | ΔH/H=6.4158e-04
| H_kin=2.05180411e+01
| H_grad=4.11897654e+00
| H_pot=4.94847800e+02
| g_det=1.5107e-01
| D_drift=3.9648e-01
Step 20000 | H_total=5.19395256e+02 | ΔH/H=8.1387e-04
| H_kin=2.51746605e+01
| H_grad=4.09027828e+00
| H_pot=4.90130318e+02
| g_det=1.4981e-01
| D_drift=3.9558e-01
Step 22000 | H_total=5.19291546e+02 | ΔH/H=1.0134e-03
| H_kin=3.02544292e+01
| H_grad=4.05886578e+00
| H_pot=4.84978251e+02
| g_det=1.4844e-01
| D_drift=3.9461e-01
Step 24000 | H_total=5.19172442e+02 | ΔH/H=1.2425e-03
| H_kin=3.57384927e+01
| H_grad=4.02482697e+00
| H_pot=4.79409123e+02
| g_det=1.4695e-01
| D_drift=3.9356e-01
Step 26000 | H_total=5.19036659e+02 | ΔH/H=1.5037e-03
| H_kin=4.16067661e+01
| H_grad=3.98825627e+00
| H_pot=4.73441637e+02
| g_det=1.4534e-01
| D_drift=3.9243e-01
Step 28000 | H_total=5.18882887e+02 | ΔH/H=1.7995e-03
| H_kin=4.78380711e+01
| H_grad=3.94925417e+00
| H_pot=4.67095561e+02
| g_det=1.4363e-01
| D_drift=3.9123e-01
Step 30000 | H_total=5.18709807e+02 | ΔH/H=2.1325e-03
| H_kin=5.44102759e+01
| H_grad=3.90792671e+00
| H_pot=4.60391604e+02
| g_det=1.4180e-01
| D_drift=3.8996e-01
Step 32000 | H_total=5.18516112e+02 | ΔH/H=2.5051e-03
| H_kin=6.13004395e+01
| H_grad=3.86438501e+00
| H_pot=4.53351288e+02
| g_det=1.3988e-01
| D_drift=3.8862e-01
Step 34000 | H_total=5.18300525e+02 | ΔH/H=2.9199e-03
| H_kin=6.84849572e+01
| H_grad=3.81874475e+00
| H_pot=4.45996823e+02
| g_det=1.3785e-01
| D_drift=3.8722e-01
Step 36000 | H_total=5.18061810e+02 | ΔH/H=3.3791e-03
| H_kin=7.59397067e+01
| H_grad=3.77112564e+00
| H_pot=4.38350978e+02
| g_det=1.3574e-01
| D_drift=3.8576e-01
Step 38000 | H_total=5.17798796e+02 | ΔH/H=3.8851e-03
| H_kin=8.36401931e+01
| H_grad=3.72165091e+00
| H_pot=4.30436952e+02
| g_det=1.3353e-01
| D_drift=3.8425e-01
Step 40000 | H_total=5.17510385e+02 | ΔH/H=4.4399e-03
| H_kin=9.15616916e+01
| H_grad=3.67044677e+00
| H_pot=4.22278246e+02
| g_det=1.3124e-01
| D_drift=3.8267e-01
Step 42000 | H_total=5.17195572e+02 | ΔH/H=5.0455e-03
| H_kin=9.96793868e+01
| H_grad=3.61764188e+00
| H_pot=4.13898543e+02
| g_det=1.2886e-01
| D_drift=3.8105e-01
Step 44000 | H_total=5.16853453e+02 | ΔH/H=5.7037e-03
| H_kin=1.07968507e+02
| H_grad=3.56336686e+00
| H_pot=4.05321579e+02
| g_det=1.2642e-01
| D_drift=3.7938e-01
Step 46000 | H_total=5.16483243e+02 | ΔH/H=6.4159e-03
| H_kin=1.16404455e+02
| H_grad=3.50775374e+00
| H_pot=3.96571034e+02
| g_det=1.2390e-01
| D_drift=3.7766e-01
Step 48000 | H_total=5.16084277e+02 | ΔH/H=7.1834e-03
| H_kin=1.24962927e+02
| H_grad=3.45093549e+00
| H_pot=3.87670415e+02
| g_det=1.2131e-01
| D_drift=3.7590e-01
Step 50000 | H_total=5.15656028e+02 | ΔH/H=8.0072e-03
| H_kin=1.33620032e+02
| H_grad=3.39304554e+00
| H_pot=3.78642951e+02
| g_det=1.1867e-01
| D_drift=3.7409e-01
Step 52000 | H_total=5.15198108e+02 | ΔH/H=8.8881e-03
| H_kin=1.42352397e+02
| H_grad=3.33421730e+00
| H_pot=3.69511493e+02
| g_det=1.1597e-01
| D_drift=3.7225e-01
Step 54000 | H_total=5.14710274e+02 | ΔH/H=9.8266e-03
| H_kin=1.51137267e+02
| H_grad=3.27458370e+00
| H_pot=3.60298423e+02
| g_det=1.1322e-01
| D_drift=3.7037e-01
Step 56000 | H_total=5.14192434e+02 | ΔH/H=1.0823e-02
| H_kin=1.59952594e+02
| H_grad=3.21427684e+00
| H_pot=3.51025563e+02
| g_det=1.1043e-01
| D_drift=3.6846e-01
Step 58000 | H_total=5.13644648e+02 | ΔH/H=1.1877e-02
| H_kin=1.68777118e+02
| H_grad=3.15342749e+00
| H_pot=3.41714102e+02
| g_det=1.0760e-01
| D_drift=3.6651e-01
Step 60000 | H_total=5.13067128e+02 | ΔH/H=1.2988e-02
| H_kin=1.77590441e+02
| H_grad=3.09216481e+00
| H_pot=3.32384523e+02
| g_det=1.0473e-01
| D_drift=3.6453e-01
Step 62000 | H_total=5.12460238e+02 | ΔH/H=1.4155e-02
| H_kin=1.86373084e+02
| H_grad=3.03061594e+00
| H_pot=3.23056538e+02
| g_det=1.0183e-01
| D_drift=3.6252e-01
Step 64000 | H_total=5.11824491e+02 | ΔH/H=1.5378e-02
| H_kin=1.95106548e+02
| H_grad=2.96890571e+00
| H_pot=3.13749037e+02
| g_det=9.8906e-02
| D_drift=3.6049e-01
Step 66000 | H_total=5.11160545e+02 | ΔH/H=1.6655e-02
| H_kin=2.03773349e+02
| H_grad=2.90715634e+00
| H_pot=3.04480040e+02
| g_det=9.5962e-02
| D_drift=3.5843e-01
Step 68000 | H_total=5.10469201e+02 | ΔH/H=1.7985e-02
| H_kin=2.12357058e+02
| H_grad=2.84548720e+00
| H_pot=2.95266656e+02
| g_det=9.3002e-02
| D_drift=3.5634e-01
Step 70000 | H_total=5.09751394e+02 | ΔH/H=1.9366e-02
| H_kin=2.20842327e+02
| H_grad=2.78401454e+00
| H_pot=2.86125052e+02
| g_det=9.0031e-02
| D_drift=3.5423e-01
Step 72000 | H_total=5.09008187e+02 | ΔH/H=2.0796e-02
| H_kin=2.29214905e+02
| H_grad=2.72285129e+00
| H_pot=2.77070431e+02
| g_det=8.7055e-02
| D_drift=3.5209e-01
Step 74000 | H_total=5.08240768e+02 | ΔH/H=2.2272e-02
| H_kin=2.37461649e+02
| H_grad=2.66210692e+00
| H_pot=2.68117012e+02
| g_det=8.4076e-02
| D_drift=3.4994e-01
Step 76000 | H_total=5.07450435e+02 | ΔH/H=2.3793e-02
| H_kin=2.45570527e+02
| H_grad=2.60188722e+00
| H_pot=2.59278021e+02
| g_det=8.1099e-02
| D_drift=3.4776e-01
Step 78000 | H_total=5.06638596e+02 | ΔH/H=2.5354e-02
| H_kin=2.53530618e+02
| H_grad=2.54229426e+00
| H_pot=2.50565683e+02
| g_det=7.8130e-02
| D_drift=3.4557e-01
Step 80000 | H_total=5.05806757e+02 | ΔH/H=2.6955e-02
| H_kin=2.61332099e+02
| H_grad=2.48342622e+00
| H_pot=2.41991232e+02
| g_det=7.5171e-02
| D_drift=3.4336e-01
Step 82000 | H_total=5.04956523e+02 | ΔH/H=2.8590e-02
| H_kin=2.68966236e+02
| H_grad=2.42537733e+00
| H_pot=2.33564910e+02
| g_det=7.2226e-02
| D_drift=3.4113e-01
Step 84000 | H_total=5.04089596e+02 | ΔH/H=3.0258e-02
| H_kin=2.76425376e+02
| H_grad=2.36823785e+00
| H_pot=2.25295983e+02
| g_det=6.9300e-02
| D_drift=3.3888e-01
Step 86000 | H_total=5.03207805e+02 | ΔH/H=3.1954e-02
| H_kin=2.83702954e+02
| H_grad=2.31209400e+00
| H_pot=2.17192756e+02
| g_det=6.6397e-02
| D_drift=3.3661e-01
Step 88000 | H_total=5.02313394e+02 | ΔH/H=3.3675e-02
| H_kin=2.90793770e+02
| H_grad=2.25702801e+00
| H_pot=2.09262596e+02
| g_det=6.3519e-02
| D_drift=3.3434e-01
Step 90000 | H_total=5.01407675e+02 | ΔH/H=3.5417e-02
| H_kin=2.97692604e+02
| H_grad=2.20311806e+00
| H_pot=2.01511954e+02
| g_det=6.0670e-02
| D_drift=3.3208e-01
Step 92000 | H_total=5.00492166e+02 | ΔH/H=3.7179e-02
| H_kin=3.04395336e+02
| H_grad=2.15043837e+00
| H_pot=1.93946392e+02
| g_det=5.7853e-02
| D_drift=3.2984e-01
Step 94000 | H_total=4.99570430e+02 | ΔH/H=3.8952e-02
| H_kin=3.10900721e+02
| H_grad=2.09905913e+00
| H_pot=1.86570650e+02
| g_det=5.5072e-02
| D_drift=3.2762e-01
Step 96000 | H_total=4.98639652e+02 | ΔH/H=4.0742e-02
| H_kin=3.17202008e+02
| H_grad=2.04904674e+00
| H_pot=1.79388598e+02
| g_det=5.2329e-02
| D_drift=3.2542e-01
Step 98000 | H_total=4.97705067e+02 | ΔH/H=4.2540e-02
| H_kin=3.23301205e+02
| H_grad=2.00046359e+00
| H_pot=1.72403398e+02
| g_det=4.9628e-02
| D_drift=3.2324e-01
Step 100000 | H_total=4.96764023e+02 | ΔH/H=4.4351e-02
| H_kin=3.29193264e+02
| H_grad=1.95336846e+00
| H_pot=1.65617391e+02
| g_det=4.6971e-02
| D_drift=3.2107e-01
------------------------------------------------------------
Completed 50 diagnostic intervals in 1074.11s
============================================================
✅ SUCCESS | Steps: 100,000 | Drift: 4.4351%
Time: 1074.12s
▶️ Running: κ=0.500 | N=128 | dt=5.0e-06 | steps=100,000
Label: N_star_128
------------------------------------------------------------
============================================================
SERIES 11 — DIAGNOSTICS SOLVER
============================================================
Grid: 128×128, dt=0.000005, κ=0.500
Diagnostics: every 2000 steps
------------------------------------------------------------
Step 0 | H_total = 5.19836426e+02
| H_kin = 0.00000000e+00
| H_grad = 4.26237233e+00
| H_pot = 5.15574054e+02
Step 2000 | H_total=5.19832802e+02 | ΔH/H=6.9707e-06
| H_kin=2.60058726e-01
| H_grad=4.26078538e+00
| H_pot=5.15311958e+02
| g_det=1.5645e-01
| D_drift=4.0037e-01
Step 4000 | H_total=5.19821853e+02 | ΔH/H=2.8034e-05
| H_kin=1.03920255e+00
| H_grad=4.25602922e+00
| H_pot=5.14526621e+02
| g_det=1.5624e-01
| D_drift=4.0022e-01
Step 6000 | H_total=5.19803344e+02 | ΔH/H=6.3638e-05
| H_kin=2.33434434e+00
| H_grad=4.24811781e+00
| H_pot=5.13220882e+02
| g_det=1.5590e-01
| D_drift=3.9998e-01
Step 8000 | H_total=5.19776893e+02 | ΔH/H=1.1452e-04
| H_kin=4.14036607e+00
| H_grad=4.23707435e+00
| H_pot=5.11399453e+02
| g_det=1.5543e-01
| D_drift=3.9963e-01
Step 10000 | H_total=5.19741969e+02 | ΔH/H=1.8170e-04
| H_kin=6.45015701e+00
| H_grad=4.22293113e+00
| H_pot=5.09068881e+02
| g_det=1.5482e-01
| D_drift=3.9919e-01
Step 12000 | H_total=5.19697905e+02 | ΔH/H=2.6647e-04
| H_kin=9.25466668e+00
| H_grad=4.20572935e+00
| H_pot=5.06237509e+02
| g_det=1.5407e-01
| D_drift=3.9865e-01
Step 14000 | H_total=5.19643906e+02 | ΔH/H=3.7035e-04
| H_kin=1.25429717e+01
| H_grad=4.18551893e+00
| H_pot=5.02915415e+02
| g_det=1.5320e-01
| D_drift=3.9803e-01
Step 16000 | H_total=5.19579057e+02 | ΔH/H=4.9510e-04
| H_kin=1.63023562e+01
| H_grad=4.16235822e+00
| H_pot=4.99114342e+02
| g_det=1.5220e-01
| D_drift=3.9731e-01
Step 18000 | H_total=5.19502340e+02 | ΔH/H=6.4268e-04
| H_kin=2.05184039e+01
| H_grad=4.13631372e+00
| H_pot=4.94847622e+02
| g_det=1.5107e-01
| D_drift=3.9650e-01
Step 20000 | H_total=5.19412647e+02 | ΔH/H=8.1522e-04
| H_kin=2.51751023e+01
| H_grad=4.10745971e+00
| H_pot=4.90130085e+02
| g_det=1.4981e-01
| D_drift=3.9561e-01
Step 22000 | H_total=5.19308792e+02 | ΔH/H=1.0150e-03
| H_kin=3.02549560e+01
| H_grad=4.07587789e+00
| H_pot=4.84977958e+02
| g_det=1.4844e-01
| D_drift=3.9464e-01
Step 24000 | H_total=5.19189534e+02 | ΔH/H=1.2444e-03
| H_kin=3.57391100e+01
| H_grad=4.04165697e+00
| H_pot=4.79408767e+02
| g_det=1.4695e-01
| D_drift=3.9358e-01
Step 26000 | H_total=5.19053586e+02 | ΔH/H=1.5059e-03
| H_kin=4.16074789e+01
| H_grad=4.00489222e+00
| H_pot=4.73441214e+02
| g_det=1.4534e-01
| D_drift=3.9246e-01
Step 28000 | H_total=5.18899638e+02 | ΔH/H=1.8021e-03
| H_kin=4.78388837e+01
| H_grad=3.96568499e+00
| H_pot=4.67095070e+02
| g_det=1.4363e-01
| D_drift=3.9126e-01
Step 30000 | H_total=5.18726375e+02 | ΔH/H=2.1354e-03
| H_kin=5.44111919e+01
| H_grad=3.92414227e+00
| H_pot=4.60391041e+02
| g_det=1.4180e-01
| D_drift=3.8998e-01
Step 32000 | H_total=5.18532489e+02 | ΔH/H=2.5084e-03
| H_kin=6.13014620e+01
| H_grad=3.88037613e+00
| H_pot=4.53350651e+02
| g_det=1.3988e-01
| D_drift=3.8865e-01
Step 34000 | H_total=5.18316703e+02 | ΔH/H=2.9235e-03
| H_kin=6.84860886e+01
| H_grad=3.83450323e+00
| H_pot=4.45996112e+02
| g_det=1.3785e-01
| D_drift=3.8725e-01
Step 36000 | H_total=5.18077785e+02 | ΔH/H=3.3831e-03
| H_kin=7.59409490e+01
| H_grad=3.78664430e+00
| H_pot=4.38350191e+02
| g_det=1.3574e-01
| D_drift=3.8579e-01
Step 38000 | H_total=5.17814561e+02 | ΔH/H=3.8894e-03
| H_kin=8.36415475e+01
| H_grad=3.73692360e+00
| H_pot=4.30436089e+02
| g_det=1.3353e-01
| D_drift=3.8427e-01
Step 40000 | H_total=5.17525936e+02 | ΔH/H=4.4446e-03
| H_kin=9.15631588e+01
| H_grad=3.68546837e+00
| H_pot=4.22277309e+02
| g_det=1.3124e-01
| D_drift=3.8270e-01
Step 42000 | H_total=5.17210906e+02 | ΔH/H=5.0507e-03
| H_kin=9.96809669e+01
| H_grad=3.63240834e+00
| H_pot=4.13897531e+02
| g_det=1.2886e-01
| D_drift=3.8107e-01
Step 44000 | H_total=5.16868568e+02 | ΔH/H=5.7092e-03
| H_kin=1.07970200e+02
| H_grad=3.57787515e+00
| H_pot=4.05320493e+02
| g_det=1.2642e-01
| D_drift=3.7940e-01
Step 46000 | H_total=5.16498137e+02 | ΔH/H=6.4218e-03
| H_kin=1.16406259e+02
| H_grad=3.52200190e+00
| H_pot=3.96569876e+02
| g_det=1.2390e-01
| D_drift=3.7768e-01
Step 48000 | H_total=5.16098951e+02 | ΔH/H=7.1897e-03
| H_kin=1.24964841e+02
| H_grad=3.46492259e+00
| H_pot=3.87669187e+02
| g_det=1.2131e-01
| D_drift=3.7592e-01
Step 50000 | H_total=5.15670482e+02 | ΔH/H=8.0140e-03
| H_kin=1.33622055e+02
| H_grad=3.40677166e+00
| H_pot=3.78641655e+02
| g_det=1.1867e-01
| D_drift=3.7412e-01
Step 52000 | H_total=5.15212343e+02 | ΔH/H=8.8953e-03
| H_kin=1.42354527e+02
| H_grad=3.34768353e+00
| H_pot=3.69510133e+02
| g_det=1.1597e-01
| D_drift=3.7227e-01
Step 54000 | H_total=5.14724294e+02 | ΔH/H=9.8341e-03
| H_kin=1.51139501e+02
| H_grad=3.28779213e+00
| H_pot=3.60297000e+02
| g_det=1.1322e-01
| D_drift=3.7039e-01
Step 56000 | H_total=5.14206242e+02 | ΔH/H=1.0831e-02
| H_kin=1.59954930e+02
| H_grad=3.22723049e+00
| H_pot=3.51024081e+02
| g_det=1.1043e-01
| D_drift=3.6848e-01
Step 58000 | H_total=5.13658248e+02 | ΔH/H=1.1885e-02
| H_kin=1.68779553e+02
| H_grad=3.16613033e+00
| H_pot=3.41712565e+02
| g_det=1.0760e-01
| D_drift=3.6653e-01
Step 60000 | H_total=5.13080526e+02 | ΔH/H=1.2996e-02
| H_kin=1.77592971e+02
| H_grad=3.10462170e+00
| H_pot=3.32382933e+02
| g_det=1.0473e-01
| D_drift=3.6455e-01
Step 62000 | H_total=5.12473440e+02 | ΔH/H=1.4164e-02
| H_kin=1.86375708e+02
| H_grad=3.04283261e+00
| H_pot=3.23054900e+02
| g_det=1.0183e-01
| D_drift=3.6255e-01
Step 64000 | H_total=5.11837505e+02 | ΔH/H=1.5387e-02
| H_kin=1.95109261e+02
| H_grad=2.98088871e+00
| H_pot=3.13747355e+02
| g_det=9.8905e-02
| D_drift=3.6051e-01
Step 66000 | H_total=5.11173380e+02 | ΔH/H=1.6665e-02
| H_kin=2.03776149e+02
| H_grad=2.91891302e+00
| H_pot=3.04478317e+02
| g_det=9.5961e-02
| D_drift=3.5845e-01
Step 68000 | H_total=5.10481865e+02 | ΔH/H=1.7995e-02
| H_kin=2.12359943e+02
| H_grad=2.85702565e+00
| H_pot=2.95264897e+02
| g_det=9.3002e-02
| D_drift=3.5636e-01
Step 70000 | H_total=5.09763898e+02 | ΔH/H=1.9376e-02
| H_kin=2.20845293e+02
| H_grad=2.79534356e+00
| H_pot=2.86123261e+02
| g_det=9.0031e-02
| D_drift=3.5425e-01
Step 72000 | H_total=5.09020544e+02 | ΔH/H=2.0806e-02
| H_kin=2.29217951e+02
| H_grad=2.73398036e+00
| H_pot=2.77068612e+02
| g_det=8.7054e-02
| D_drift=3.5211e-01
Step 74000 | H_total=5.08252988e+02 | ΔH/H=2.2283e-02
| H_kin=2.37464773e+02
| H_grad=2.67304612e+00
| H_pot=2.68115169e+02
| g_det=8.4075e-02
| D_drift=3.4996e-01
Step 76000 | H_total=5.07462533e+02 | ΔH/H=2.3803e-02
| H_kin=2.45573728e+02
| H_grad=2.61264725e+00
| H_pot=2.59276157e+02
| g_det=8.1099e-02
| D_drift=3.4778e-01
Step 78000 | H_total=5.06650586e+02 | ΔH/H=2.5365e-02
| H_kin=2.53533896e+02
| H_grad=2.55288634e+00
| H_pot=2.50563803e+02
| g_det=7.8129e-02
| D_drift=3.4559e-01
Step 80000 | H_total=5.05818655e+02 | ΔH/H=2.6966e-02
| H_kin=2.61335454e+02
| H_grad=2.49386207e+00
| H_pot=2.41989340e+02
| g_det=7.5170e-02
| D_drift=3.4338e-01
Step 82000 | H_total=5.04968348e+02 | ΔH/H=2.8601e-02
| H_kin=2.68969671e+02
| H_grad=2.43566914e+00
| H_pot=2.33563008e+02
| g_det=7.2226e-02
| D_drift=3.4115e-01
Step 84000 | H_total=5.04101369e+02 | ΔH/H=3.0269e-02
| H_kin=2.76428895e+02
| H_grad=2.37839822e+00
| H_pot=2.25294075e+02
| g_det=6.9300e-02
| D_drift=3.3890e-01
Step 86000 | H_total=5.03219549e+02 | ΔH/H=3.1966e-02
| H_kin=2.83706567e+02
| H_grad=2.32213593e+00
| H_pot=2.17190846e+02
| g_det=6.6396e-02
| D_drift=3.3663e-01
Step 88000 | H_total=5.02325051e+02 | ΔH/H=3.3686e-02
| H_kin=2.90797400e+02
| H_grad=2.26696482e+00
| H_pot=2.09260686e+02
| g_det=6.3518e-02
| D_drift=3.3436e-01
Step 90000 | H_total=5.01419768e+02 | ΔH/H=3.5428e-02
| H_kin=2.97696760e+02
| H_grad=2.21296340e+00
| H_pot=2.01510045e+02
| g_det=6.0669e-02
| D_drift=3.3210e-01
Step 92000 | H_total=5.00504315e+02 | ΔH/H=3.7189e-02
| H_kin=3.04399616e+02
| H_grad=2.16020615e+00
| H_pot=1.93944493e+02
| g_det=5.7853e-02
| D_drift=3.2986e-01
Step 94000 | H_total=4.99581175e+02 | ΔH/H=3.8965e-02
| H_kin=3.10903661e+02
| H_grad=2.10876353e+00
| H_pot=1.86568750e+02
| g_det=5.5072e-02
| D_drift=3.2764e-01
Step 96000 | H_total=4.98651325e+02 | ΔH/H=4.0753e-02
| H_kin=3.17205905e+02
| H_grad=2.05870206e+00
| H_pot=1.79386718e+02
| g_det=5.2329e-02
| D_drift=3.2544e-01
Step 98000 | H_total=4.97717430e+02 | ΔH/H=4.2550e-02
| H_kin=3.23305827e+02
| H_grad=2.01008441e+00
| H_pot=1.72401518e+02
| g_det=4.9628e-02
| D_drift=3.2325e-01
Step 100000 | H_total=4.96777846e+02 | ΔH/H=4.4357e-02
| H_kin=3.29199358e+02
| H_grad=1.96296946e+00
| H_pot=1.65615519e+02
| g_det=4.6970e-02
| D_drift=3.2108e-01
------------------------------------------------------------
Completed 50 diagnostic intervals in 3431.07s
============================================================
✅ SUCCESS | Steps: 100,000 | Drift: 4.4357%
Time: 3431.11s
⚠️ Large N=256 detected - memory usage will be high
Cells: 65,536, Fields: ~3.0 MB
▶️ Running: κ=0.500 | N=256 | dt=5.0e-06 | steps=100,000
Label: N_star_256
------------------------------------------------------------
⚠️ MEMORY GATE: N=256 - Large grid detected
Estimated memory usage: ~3.0 MB for fields
Total cells: 65,536
============================================================
SERIES 11 — DIAGNOSTICS SOLVER
============================================================
Grid: 256×256, dt=0.000005, κ=0.500
Diagnostics: every 2000 steps
------------------------------------------------------------
Step 0 | H_total = 5.19841022e+02
| H_kin = 0.00000000e+00
| H_grad = 4.26695013e+00
| H_pot = 5.15574072e+02
Step 2000 | H_total=5.19837396e+02 | ΔH/H=6.9745e-06
| H_kin=2.60059902e-01
| H_grad=4.26536079e+00
| H_pot=5.15311976e+02
| g_det=1.5645e-01
| D_drift=4.0038e-01
Step 4000 | H_total=5.19826441e+02 | ΔH/H=2.8050e-05
| H_kin=1.03920700e+00
| H_grad=4.26059760e+00
| H_pot=5.14526636e+02
| g_det=1.5624e-01
| D_drift=4.0023e-01
Step 6000 | H_total=5.19807922e+02 | ΔH/H=6.3673e-05
| H_kin=2.33435420e+00
| H_grad=4.25267466e+00
| H_pot=5.13220893e+02
| g_det=1.5590e-01
| D_drift=3.9998e-01
Step 8000 | H_total=5.19781457e+02 | ΔH/H=1.1458e-04
| H_kin=4.14038351e+00
| H_grad=4.24161527e+00
| H_pot=5.11399458e+02
| g_det=1.5543e-01
| D_drift=3.9964e-01
Step 10000 | H_total=5.19746515e+02 | ΔH/H=1.8180e-04
| H_kin=6.45018417e+00
| H_grad=4.22745182e+00
| H_pot=5.09068879e+02
| g_det=1.5482e-01
| D_drift=3.9920e-01
Step 12000 | H_total=5.19702430e+02 | ΔH/H=2.6660e-04
| H_kin=9.25470565e+00
| H_grad=4.21022563e+00
| H_pot=5.06237499e+02
| g_det=1.5407e-01
| D_drift=3.9866e-01
Step 14000 | H_total=5.19648406e+02 | ΔH/H=3.7053e-04
| H_kin=1.25430246e+01
| H_grad=4.18998675e+00
| H_pot=5.02915394e+02
| g_det=1.5320e-01
| D_drift=3.9803e-01
Step 16000 | H_total=5.19583528e+02 | ΔH/H=4.9533e-04
| H_kin=1.63024248e+01
| H_grad=4.16679366e+00
| H_pot=4.99114310e+02
| g_det=1.5220e-01
| D_drift=3.9731e-01
Step 18000 | H_total=5.19506780e+02 | ΔH/H=6.4297e-04
| H_kin=2.05184901e+01
| H_grad=4.14071302e+00
| H_pot=4.94847577e+02
| g_det=1.5107e-01
| D_drift=3.9651e-01
Step 20000 | H_total=5.19417053e+02 | ΔH/H=8.1558e-04
| H_kin=2.51752077e+01
| H_grad=4.11181929e+00
| H_pot=4.90130026e+02
| g_det=1.4981e-01
| D_drift=3.9562e-01
Step 22000 | H_total=5.19313161e+02 | ΔH/H=1.0154e-03
| H_kin=3.02550824e+01
| H_grad=4.08019435e+00
| H_pot=4.84977884e+02
| g_det=1.4844e-01
| D_drift=3.9464e-01
Step 24000 | H_total=5.19193863e+02 | ΔH/H=1.2449e-03
| H_kin=3.57392587e+01
| H_grad=4.04592711e+00
| H_pot=4.79408677e+02
| g_det=1.4695e-01
| D_drift=3.9359e-01
Step 26000 | H_total=5.19057872e+02 | ΔH/H=1.5065e-03
| H_kin=4.16076512e+01
| H_grad=4.00911306e+00
| H_pot=4.73441108e+02
| g_det=1.4534e-01
| D_drift=3.9246e-01
Step 28000 | H_total=5.18903880e+02 | ΔH/H=1.8027e-03
| H_kin=4.78390806e+01
| H_grad=3.96985377e+00
| H_pot=4.67094946e+02
| g_det=1.4363e-01
| D_drift=3.9126e-01
Step 30000 | H_total=5.18730570e+02 | ΔH/H=2.1361e-03
| H_kin=5.44114145e+01
| H_grad=3.92825646e+00
| H_pot=4.60390899e+02
| g_det=1.4180e-01
| D_drift=3.8999e-01
Step 32000 | H_total=5.18536636e+02 | ΔH/H=2.5092e-03
| H_kin=6.13017110e+01
| H_grad=3.88443343e+00
| H_pot=4.53350491e+02
| g_det=1.3988e-01
| D_drift=3.8865e-01
Step 34000 | H_total=5.18320799e+02 | ΔH/H=2.9244e-03
| H_kin=6.84863649e+01
| H_grad=3.83850162e+00
| H_pot=4.45995933e+02
| g_det=1.3785e-01
| D_drift=3.8725e-01
Step 36000 | H_total=5.18081829e+02 | ΔH/H=3.3841e-03
| H_kin=7.59412529e+01
| H_grad=3.79058200e+00
| H_pot=4.38349994e+02
| g_det=1.3574e-01
| D_drift=3.8579e-01
Step 38000 | H_total=5.17818551e+02 | ΔH/H=3.8906e-03
| H_kin=8.36418794e+01
| H_grad=3.74079908e+00
| H_pot=4.30435873e+02
| g_det=1.3353e-01
| D_drift=3.8427e-01
Step 40000 | H_total=5.17529873e+02 | ΔH/H=4.4459e-03
| H_kin=9.15635190e+01
| H_grad=3.68928037e+00
| H_pot=4.22277073e+02
| g_det=1.3124e-01
| D_drift=3.8270e-01
Step 42000 | H_total=5.17214788e+02 | ΔH/H=5.0520e-03
| H_kin=9.96813554e+01
| H_grad=3.63615586e+00
| H_pot=4.13897276e+02
| g_det=1.2886e-01
| D_drift=3.8108e-01
Step 44000 | H_total=5.16872395e+02 | ΔH/H=5.7106e-03
| H_kin=1.07970617e+02
| H_grad=3.58155747e+00
| H_pot=4.05320221e+02
| g_det=1.2642e-01
| D_drift=3.7941e-01
Step 46000 | H_total=5.16501908e+02 | ΔH/H=6.4233e-03
| H_kin=1.16406704e+02
| H_grad=3.52561853e+00
| H_pot=3.96569586e+02
| g_det=1.2390e-01
| D_drift=3.7769e-01
Step 48000 | H_total=5.16102666e+02 | ΔH/H=7.1913e-03
| H_kin=1.24965314e+02
| H_grad=3.46847333e+00
| H_pot=3.87668879e+02
| g_det=1.2131e-01
| D_drift=3.7593e-01
Step 50000 | H_total=5.15674142e+02 | ΔH/H=8.0157e-03
| H_kin=1.33622555e+02
| H_grad=3.41025656e+00
| H_pot=3.78641330e+02
| g_det=1.1867e-01
| D_drift=3.7412e-01
Step 52000 | H_total=5.15215948e+02 | ΔH/H=8.8971e-03
| H_kin=1.42355054e+02
| H_grad=3.35110288e+00
| H_pot=3.69509791e+02
| g_det=1.1597e-01
| D_drift=3.7228e-01
Step 54000 | H_total=5.14727844e+02 | ΔH/H=9.8360e-03
| H_kin=1.51140055e+02
| H_grad=3.29114648e+00
| H_pot=3.60296643e+02
| g_det=1.1322e-01
| D_drift=3.7040e-01
Step 56000 | H_total=5.14209739e+02 | ΔH/H=1.0833e-02
| H_kin=1.59955509e+02
| H_grad=3.23052063e+00
| H_pot=3.51023709e+02
| g_det=1.1043e-01
| D_drift=3.6848e-01
Step 58000 | H_total=5.13661693e+02 | ΔH/H=1.1887e-02
| H_kin=1.68780157e+02
| H_grad=3.16935728e+00
| H_pot=3.41712179e+02
| g_det=1.0760e-01
| D_drift=3.6654e-01
Step 60000 | H_total=5.13083920e+02 | ΔH/H=1.2998e-02
| H_kin=1.77593600e+02
| H_grad=3.10778670e+00
| H_pot=3.32382534e+02
| g_det=1.0473e-01
| D_drift=3.6456e-01
Step 62000 | H_total=5.12476786e+02 | ΔH/H=1.4166e-02
| H_kin=1.86376360e+02
| H_grad=3.04593712e+00
| H_pot=3.23054489e+02
| g_det=1.0183e-01
| D_drift=3.6255e-01
Step 64000 | H_total=5.11840803e+02 | ΔH/H=1.5390e-02
| H_kin=1.95109936e+02
| H_grad=2.98393440e+00
| H_pot=3.13746933e+02
| g_det=9.8905e-02
| D_drift=3.6051e-01
Step 66000 | H_total=5.11176633e+02 | ΔH/H=1.6667e-02
| H_kin=2.03776846e+02
| H_grad=2.92190176e+00
| H_pot=3.04477885e+02
| g_det=9.5961e-02
| D_drift=3.5845e-01
Step 68000 | H_total=5.10485076e+02 | ΔH/H=1.7998e-02
| H_kin=2.12360661e+02
| H_grad=2.85995949e+00
| H_pot=2.95264455e+02
| g_det=9.3002e-02
| D_drift=3.5636e-01
Step 70000 | H_total=5.09767069e+02 | ΔH/H=1.9379e-02
| H_kin=2.20846033e+02
| H_grad=2.79822474e+00
| H_pot=2.86122812e+02
| g_det=9.0031e-02
| D_drift=3.5425e-01
Step 72000 | H_total=5.09023677e+02 | ΔH/H=2.0809e-02
| H_kin=2.29218711e+02
| H_grad=2.73681126e+00
| H_pot=2.77068156e+02
| g_det=8.7054e-02
| D_drift=3.5212e-01
Step 74000 | H_total=5.08256088e+02 | ΔH/H=2.2286e-02
| H_kin=2.37465552e+02
| H_grad=2.67582932e+00
| H_pot=2.68114706e+02
| g_det=8.4075e-02
| D_drift=3.4996e-01
Step 76000 | H_total=5.07465602e+02 | ΔH/H=2.3806e-02
| H_kin=2.45574528e+02
| H_grad=2.61538544e+00
| H_pot=2.59275689e+02
| g_det=8.1099e-02
| D_drift=3.4779e-01
Step 78000 | H_total=5.06653628e+02 | ΔH/H=2.5368e-02
| H_kin=2.53534715e+02
| H_grad=2.55558236e+00
| H_pot=2.50563331e+02
| g_det=7.8129e-02
| D_drift=3.4559e-01
Step 80000 | H_total=5.05821676e+02 | ΔH/H=2.6969e-02
| H_kin=2.61336293e+02
| H_grad=2.49651888e+00
| H_pot=2.41988864e+02
| g_det=7.5170e-02
| D_drift=3.4338e-01
Step 82000 | H_total=5.04971350e+02 | ΔH/H=2.8604e-02
| H_kin=2.68970531e+02
| H_grad=2.43828982e+00
| H_pot=2.33562530e+02
| g_det=7.2226e-02
| D_drift=3.4115e-01
Step 84000 | H_total=5.04104358e+02 | ΔH/H=3.0272e-02
| H_kin=2.76429777e+02
| H_grad=2.38098596e+00
| H_pot=2.25293595e+02
| g_det=6.9300e-02
| D_drift=3.3890e-01
Step 86000 | H_total=5.03222532e+02 | ΔH/H=3.1968e-02
| H_kin=2.83707473e+02
| H_grad=2.32469400e+00
| H_pot=2.17190365e+02
| g_det=6.6396e-02
| D_drift=3.3664e-01
Step 88000 | H_total=5.02328032e+02 | ΔH/H=3.3689e-02
| H_kin=2.90798330e+02
| H_grad=2.26949658e+00
| H_pot=2.09260206e+02
| g_det=6.3518e-02
| D_drift=3.3436e-01
Step 90000 | H_total=5.01422822e+02 | ΔH/H=3.5430e-02
| H_kin=2.97697785e+02
| H_grad=2.21547230e+00
| H_pot=2.01509565e+02
| g_det=6.0669e-02
| D_drift=3.3210e-01
Step 92000 | H_total=5.00507573e+02 | ΔH/H=3.7191e-02
| H_kin=3.04400864e+02
| H_grad=2.16269570e+00
| H_pot=1.93944013e+02
| g_det=5.7853e-02
| D_drift=3.2986e-01
Step 94000 | H_total=4.99584541e+02 | ΔH/H=3.8967e-02
| H_kin=3.10905031e+02
| H_grad=2.11123729e+00
| H_pot=1.86568272e+02
| g_det=5.5072e-02
| D_drift=3.2764e-01
Step 96000 | H_total=4.98654475e+02 | ΔH/H=4.0756e-02
| H_kin=3.17207066e+02
| H_grad=2.06116365e+00
| H_pot=1.79386244e+02
| g_det=5.2329e-02
| D_drift=3.2544e-01
Step 98000 | H_total=4.97719889e+02 | ΔH/H=4.2554e-02
| H_kin=3.23306305e+02
| H_grad=2.01253749e+00
| H_pot=1.72401046e+02
| g_det=4.9628e-02
| D_drift=3.2325e-01
Step 100000 | H_total=4.96781389e+02 | ΔH/H=4.4359e-02
| H_kin=3.29200923e+02
| H_grad=1.96541772e+00
| H_pot=1.65615048e+02
| g_det=4.6970e-02
| D_drift=3.2109e-01
------------------------------------------------------------
Completed 50 diagnostic intervals in 15242.50s
============================================================
✅ SUCCESS | Steps: 100,000 | Drift: 4.4359%
Time: 15242.67s
📊 N* Sweep Results:
----------------------------------------
N | Steps | Drift % | Status
----------------------------------------
16 | 100,000 | 4.4114 | ✅ OK
32 | 100,000 | 4.4306 | ✅ OK
64 | 100,000 | 4.4351 | ✅ OK
128 | 100,000 | 4.4357 | ✅ OK
256 | 100,000 | 4.4359 | ✅ OK
🔬 RUNNING TEST 2: Extended N* Sweep
================================================================================
🔬 TEST 2: Extended N* Sweep
================================================================================
Goal: Confirm N* at higher resolution
Config: κ=0.50, N=[256,512], 50K steps
================================================================================
⚠️ MEMORY GATE: N=256 - Large grid detected
Cells: 65,536, Fields: ~3.0 MB
▶️ Running: κ=0.500 | N=256 | dt=5.0e-06 | steps=50,000
Label: N_extended_256
------------------------------------------------------------
⚠️ MEMORY GATE: N=256 - Large grid detected
Estimated memory usage: ~3.0 MB for fields
Total cells: 65,536
============================================================
SERIES 11 — DIAGNOSTICS SOLVER
============================================================
Grid: 256×256, dt=0.000005, κ=0.500
Diagnostics: every 1000 steps
------------------------------------------------------------
Step 0 | H_total = 5.19841022e+02
| H_kin = 0.00000000e+00
| H_grad = 4.26695013e+00
| H_pot = 5.15574072e+02
Step 1000 | H_total=5.19840117e+02 | ΔH/H=1.7412e-06
| H_kin=6.50311718e-02
| H_grad=4.26655272e+00
| H_pot=5.15508533e+02
| g_det=1.5650e-01
| D_drift=4.0042e-01
Step 2000 | H_total=5.19837396e+02 | ΔH/H=6.9745e-06
| H_kin=2.60059902e-01
| H_grad=4.26536079e+00
| H_pot=5.15311976e+02
| g_det=1.5645e-01
| D_drift=4.0038e-01
Step 3000 | H_total=5.19832846e+02 | ΔH/H=1.5728e-05
| H_kin=5.84892550e-01
| H_grad=4.26337526e+00
| H_pot=5.14984578e+02
| g_det=1.5636e-01
| D_drift=4.0032e-01
Step 4000 | H_total=5.19826441e+02 | ΔH/H=2.8050e-05
| H_kin=1.03920700e+00
| H_grad=4.26059760e+00
| H_pot=5.14526636e+02
| g_det=1.5624e-01
| D_drift=4.0023e-01
Step 5000 | H_total=5.19818147e+02 | ΔH/H=4.4003e-05
| H_kin=1.62255324e+00
| H_grad=4.25702986e+00
| H_pot=5.13938564e+02
| g_det=1.5609e-01
| D_drift=4.0012e-01
Step 6000 | H_total=5.19807922e+02 | ΔH/H=6.3673e-05
| H_kin=2.33435420e+00
| H_grad=4.25267466e+00
| H_pot=5.13220893e+02
| g_det=1.5590e-01
| D_drift=3.9998e-01
Step 7000 | H_total=5.19795712e+02 | ΔH/H=8.7161e-05
| H_kin=3.17390686e+00
| H_grad=4.24753521e+00
| H_pot=5.12374270e+02
| g_det=1.5568e-01
| D_drift=3.9982e-01
Step 8000 | H_total=5.19781457e+02 | ΔH/H=1.1458e-04
| H_kin=4.14038351e+00
| H_grad=4.24161527e+00
| H_pot=5.11399458e+02
| g_det=1.5543e-01
| D_drift=3.9964e-01
Step 9000 | H_total=5.19765084e+02 | ΔH/H=1.4608e-04
| H_kin=5.23283333e+00
| H_grad=4.23491918e+00
| H_pot=5.10297331e+02
| g_det=1.5514e-01
| D_drift=3.9943e-01
Step 10000 | H_total=5.19746515e+02 | ΔH/H=1.8180e-04
| H_kin=6.45018417e+00
| H_grad=4.22745182e+00
| H_pot=5.09068879e+02
| g_det=1.5482e-01
| D_drift=3.9920e-01
Step 11000 | H_total=5.19725662e+02 | ΔH/H=2.2191e-04
| H_kin=7.79124450e+00
| H_grad=4.21921864e+00
| H_pot=5.07715199e+02
| g_det=1.5446e-01
| D_drift=3.9894e-01
Step 12000 | H_total=5.19702430e+02 | ΔH/H=2.6660e-04
| H_kin=9.25470565e+00
| H_grad=4.21022563e+00
| H_pot=5.06237499e+02
| g_det=1.5407e-01
| D_drift=3.9866e-01
Step 13000 | H_total=5.19676715e+02 | ΔH/H=3.1607e-04
| H_kin=1.08391442e+01
| H_grad=4.20047932e+00
| H_pot=5.04637091e+02
| g_det=1.5365e-01
| D_drift=3.9836e-01
Step 14000 | H_total=5.19648406e+02 | ΔH/H=3.7053e-04
| H_kin=1.25430246e+01
| H_grad=4.18998675e+00
| H_pot=5.02915394e+02
| g_det=1.5320e-01
| D_drift=3.9803e-01
Step 15000 | H_total=5.19617385e+02 | ΔH/H=4.3020e-04
| H_kin=1.43647018e+01
| H_grad=4.17875550e+00
| H_pot=5.01073928e+02
| g_det=1.5271e-01
| D_drift=3.9768e-01
Step 16000 | H_total=5.19583528e+02 | ΔH/H=4.9533e-04
| H_kin=1.63024248e+01
| H_grad=4.16679366e+00
| H_pot=4.99114310e+02
| g_det=1.5220e-01
| D_drift=3.9731e-01
Step 17000 | H_total=5.19546706e+02 | ΔH/H=5.6617e-04
| H_kin=1.83543390e+01
| H_grad=4.15410981e+00
| H_pot=4.97038257e+02
| g_det=1.5165e-01
| D_drift=3.9692e-01
Step 18000 | H_total=5.19506780e+02 | ΔH/H=6.4297e-04
| H_kin=2.05184901e+01
| H_grad=4.14071302e+00
| H_pot=4.94847577e+02
| g_det=1.5107e-01
| D_drift=3.9651e-01
Step 19000 | H_total=5.19463611e+02 | ΔH/H=7.2601e-04
| H_kin=2.27928275e+01
| H_grad=4.12661284e+00
| H_pot=4.92544171e+02
| g_det=1.5046e-01
| D_drift=3.9607e-01
Step 20000 | H_total=5.19417053e+02 | ΔH/H=8.1558e-04
| H_kin=2.51752077e+01
| H_grad=4.11181929e+00
| H_pot=4.90130026e+02
| g_det=1.4981e-01
| D_drift=3.9562e-01
Step 21000 | H_total=5.19366954e+02 | ΔH/H=9.1195e-04
| H_kin=2.76633985e+01
| H_grad=4.09634282e+00
| H_pot=4.87607213e+02
| g_det=1.4914e-01
| D_drift=3.9514e-01
Step 22000 | H_total=5.19313161e+02 | ΔH/H=1.0154e-03
| H_kin=3.02550824e+01
| H_grad=4.08019435e+00
| H_pot=4.84977884e+02
| g_det=1.4844e-01
| D_drift=3.9464e-01
Step 23000 | H_total=5.19255517e+02 | ΔH/H=1.1263e-03
| H_kin=3.29478609e+01
| H_grad=4.06338520e+00
| H_pot=4.82244271e+02
| g_det=1.4771e-01
| D_drift=3.9413e-01
Step 24000 | H_total=5.19193863e+02 | ΔH/H=1.2449e-03
| H_kin=3.57392587e+01
| H_grad=4.04592711e+00
| H_pot=4.79408677e+02
| g_det=1.4695e-01
| D_drift=3.9359e-01
Step 25000 | H_total=5.19128035e+02 | ΔH/H=1.3715e-03
| H_kin=3.86267276e+01
| H_grad=4.02783223e+00
| H_pot=4.76473476e+02
| g_det=1.4616e-01
| D_drift=3.9304e-01
Step 26000 | H_total=5.19057872e+02 | ΔH/H=1.5065e-03
| H_kin=4.16076512e+01
| H_grad=4.00911306e+00
| H_pot=4.73441108e+02
| g_det=1.4534e-01
| D_drift=3.9246e-01
Step 27000 | H_total=5.18983209e+02 | ΔH/H=1.6501e-03
| H_kin=4.46793489e+01
| H_grad=3.98978249e+00
| H_pot=4.70314077e+02
| g_det=1.4450e-01
| D_drift=3.9187e-01
Step 28000 | H_total=5.18903880e+02 | ΔH/H=1.8027e-03
| H_kin=4.78390806e+01
| H_grad=3.96985377e+00
| H_pot=4.67094946e+02
| g_det=1.4363e-01
| D_drift=3.9126e-01
Step 29000 | H_total=5.18819722e+02 | ΔH/H=1.9646e-03
| H_kin=5.10840511e+01
| H_grad=3.94934046e+00
| H_pot=4.63786330e+02
| g_det=1.4273e-01
| D_drift=3.9063e-01
Step 30000 | H_total=5.18730570e+02 | ΔH/H=2.1361e-03
| H_kin=5.44114145e+01
| H_grad=3.92825646e+00
| H_pot=4.60390899e+02
| g_det=1.4180e-01
| D_drift=3.8999e-01
Step 31000 | H_total=5.18636261e+02 | ΔH/H=2.3176e-03
| H_kin=5.78182789e+01
| H_grad=3.90661595e+00
| H_pot=4.56911367e+02
| g_det=1.4085e-01
| D_drift=3.8933e-01
Step 32000 | H_total=5.18536636e+02 | ΔH/H=2.5092e-03
| H_kin=6.13017110e+01
| H_grad=3.88443343e+00
| H_pot=4.53350491e+02
| g_det=1.3988e-01
| D_drift=3.8865e-01
Step 33000 | H_total=5.18431533e+02 | ΔH/H=2.7114e-03
| H_kin=6.48587406e+01
| H_grad=3.86172366e+00
| H_pot=4.49711069e+02
| g_det=1.3888e-01
| D_drift=3.8796e-01
Step 34000 | H_total=5.18320799e+02 | ΔH/H=2.9244e-03
| H_kin=6.84863649e+01
| H_grad=3.83850162e+00
| H_pot=4.45995933e+02
| g_det=1.3785e-01
| D_drift=3.8725e-01
Step 35000 | H_total=5.18204281e+02 | ΔH/H=3.1485e-03
| H_kin=7.21815535e+01
| H_grad=3.81478258e+00
| H_pot=4.42207944e+02
| g_det=1.3681e-01
| D_drift=3.8653e-01
Step 36000 | H_total=5.18081829e+02 | ΔH/H=3.3841e-03
| H_kin=7.59412529e+01
| H_grad=3.79058200e+00
| H_pot=4.38349994e+02
| g_det=1.3574e-01
| D_drift=3.8579e-01
Step 37000 | H_total=5.17953299e+02 | ΔH/H=3.6313e-03
| H_kin=7.97623904e+01
| H_grad=3.76591554e+00
| H_pot=4.34424993e+02
| g_det=1.3464e-01
| D_drift=3.8504e-01
Step 38000 | H_total=5.17818551e+02 | ΔH/H=3.8906e-03
| H_kin=8.36418794e+01
| H_grad=3.74079908e+00
| H_pot=4.30435873e+02
| g_det=1.3353e-01
| D_drift=3.8427e-01
Step 39000 | H_total=5.17677452e+02 | ΔH/H=4.1620e-03
| H_kin=8.75766231e+01
| H_grad=3.71524863e+00
| H_pot=4.26385581e+02
| g_det=1.3239e-01
| D_drift=3.8350e-01
Step 40000 | H_total=5.17529873e+02 | ΔH/H=4.4459e-03
| H_kin=9.15635190e+01
| H_grad=3.68928037e+00
| H_pot=4.22277073e+02
| g_det=1.3124e-01
| D_drift=3.8270e-01
Step 41000 | H_total=5.17375690e+02 | ΔH/H=4.7425e-03
| H_kin=9.55994634e+01
| H_grad=3.66291064e+00
| H_pot=4.18113316e+02
| g_det=1.3006e-01
| D_drift=3.8190e-01
Step 42000 | H_total=5.17214788e+02 | ΔH/H=5.0520e-03
| H_kin=9.96813554e+01
| H_grad=3.63615586e+00
| H_pot=4.13897276e+02
| g_det=1.2886e-01
| D_drift=3.8108e-01
Step 43000 | H_total=5.17047057e+02 | ΔH/H=5.3747e-03
| H_kin=1.03806101e+02
| H_grad=3.60903259e+00
| H_pot=4.09631923e+02
| g_det=1.2765e-01
| D_drift=3.8025e-01
Step 44000 | H_total=5.16872395e+02 | ΔH/H=5.7106e-03
| H_kin=1.07970617e+02
| H_grad=3.58155747e+00
| H_pot=4.05320221e+02
| g_det=1.2642e-01
| D_drift=3.7941e-01
Step 45000 | H_total=5.16690708e+02 | ΔH/H=6.0601e-03
| H_kin=1.12171834e+02
| H_grad=3.55374719e+00
| H_pot=4.00965126e+02
| g_det=1.2517e-01
| D_drift=3.7855e-01
Step 46000 | H_total=5.16501908e+02 | ΔH/H=6.4233e-03
| H_kin=1.16406704e+02
| H_grad=3.52561853e+00
| H_pot=3.96569586e+02
| g_det=1.2390e-01
| D_drift=3.7769e-01
Step 47000 | H_total=5.16305918e+02 | ΔH/H=6.8004e-03
| H_kin=1.20672198e+02
| H_grad=3.49718830e+00
| H_pot=3.92136532e+02
| g_det=1.2261e-01
| D_drift=3.7681e-01
Step 48000 | H_total=5.16102666e+02 | ΔH/H=7.1913e-03
| H_kin=1.24965314e+02
| H_grad=3.46847333e+00
| H_pot=3.87668879e+02
| g_det=1.2131e-01
| D_drift=3.7593e-01
Step 49000 | H_total=5.15892092e+02 | ΔH/H=7.5964e-03
| H_kin=1.29283080e+02
| H_grad=3.43949047e+00
| H_pot=3.83169522e+02
| g_det=1.2000e-01
| D_drift=3.7503e-01
Step 50000 | H_total=5.15674142e+02 | ΔH/H=8.0157e-03
| H_kin=1.33622555e+02
| H_grad=3.41025656e+00
| H_pot=3.78641330e+02
| g_det=1.1867e-01
| D_drift=3.7412e-01
------------------------------------------------------------
Completed 50 diagnostic intervals in 7632.33s
============================================================
✅ SUCCESS | Steps: 50,000 | Drift: 0.8016%
Time: 7632.52s
⚠️ MEMORY GATE: N=512 - Large grid detected
Cells: 262,144, Fields: ~12.0 MB
▶️ Running: κ=0.500 | N=512 | dt=5.0e-06 | steps=50,000
Label: N_extended_512
------------------------------------------------------------
⚠️ MEMORY GATE: N=512 - Large grid detected
Estimated memory usage: ~12.0 MB for fields
Total cells: 262,144
============================================================
SERIES 11 — DIAGNOSTICS SOLVER
============================================================
Grid: 512×512, dt=0.000005, κ=0.500
Diagnostics: every 1000 steps
------------------------------------------------------------
Step 0 | H_total = 5.19842200e+02
| H_kin = 0.00000000e+00
| H_grad = 4.26812281e+00
| H_pot = 5.15574077e+02
Step 1000 | H_total=5.19841294e+02 | ΔH/H=1.7416e-06
| H_kin=6.50312208e-02
| H_grad=4.26772521e+00
| H_pot=5.15508538e+02
| g_det=1.5650e-01
| D_drift=4.0042e-01
Step 2000 | H_total=5.19838573e+02 | ΔH/H=6.9758e-06
| H_kin=2.60060137e-01
| H_grad=4.26653280e+00
| H_pot=5.15311981e+02
| g_det=1.5645e-01
| D_drift=4.0038e-01
Step 3000 | H_total=5.19834022e+02 | ΔH/H=1.5731e-05
| H_kin=5.84893117e-01
| H_grad=4.26454649e+00
| H_pot=5.14984583e+02
| g_det=1.5636e-01
| D_drift=4.0032e-01
Step 4000 | H_total=5.19827616e+02 | ΔH/H=2.8054e-05
| H_kin=1.03920804e+00
| H_grad=4.26176777e+00
| H_pot=5.14526640e+02
| g_det=1.5624e-01
| D_drift=4.0023e-01
Step 5000 | H_total=5.19819322e+02 | ΔH/H=4.4010e-05
| H_kin=1.62255490e+00
| H_grad=4.25819869e+00
| H_pot=5.13938568e+02
| g_det=1.5609e-01
| D_drift=4.0012e-01
Step 6000 | H_total=5.19809095e+02 | ΔH/H=6.3683e-05
| H_kin=2.33435663e+00
| H_grad=4.25384188e+00
| H_pot=5.13220896e+02
| g_det=1.5590e-01
| D_drift=3.9998e-01
Step 7000 | H_total=5.19796884e+02 | ΔH/H=8.7173e-05
| H_kin=3.17391018e+00
| H_grad=4.24870054e+00
| H_pot=5.12374273e+02
| g_det=1.5568e-01
| D_drift=3.9982e-01
Step 8000 | H_total=5.19782626e+02 | ΔH/H=1.1460e-04
| H_kin=4.14038787e+00
| H_grad=4.24277845e+00
| H_pot=5.11399460e+02
| g_det=1.5543e-01
| D_drift=3.9964e-01
Step 9000 | H_total=5.19766251e+02 | ΔH/H=1.4610e-04
| H_kin=5.23283887e+00
| H_grad=4.23607993e+00
| H_pot=5.10297332e+02
| g_det=1.5514e-01
| D_drift=3.9943e-01
Step 10000 | H_total=5.19747680e+02 | ΔH/H=1.8182e-04
| H_kin=6.45019102e+00
| H_grad=4.22860989e+00
| H_pot=5.09068879e+02
| g_det=1.5482e-01
| D_drift=3.9920e-01
Step 11000 | H_total=5.19726825e+02 | ΔH/H=2.2194e-04
| H_kin=7.79125279e+00
| H_grad=4.22037376e+00
| H_pot=5.07715198e+02
| g_det=1.5446e-01
| D_drift=3.9894e-01
Step 12000 | H_total=5.19703589e+02 | ΔH/H=2.6664e-04
| H_kin=9.25471552e+00
| H_grad=4.21137755e+00
| H_pot=5.06237496e+02
| g_det=1.5407e-01
| D_drift=3.9866e-01