Spaces:
Running
Running
Download index.html from ark-zeropoint/Framework: direct link, hf CLI and curl.
- Browser
- Download file 11 kB
-
https://huggingface.co/spaces/ark-zeropoint/Framework/resolve/main/index.html
- Command line
-
hf download hf://spaces/ark-zeropoint/Framework/index.html
-
curl -L -o index.html https://huggingface.co/spaces/ark-zeropoint/Framework/resolve/main/index.html
11 kB
| <html lang="en"> | |
| <head> | |
| <meta charset="utf-8"> | |
| <title>TZT CFD Solver</title> | |
| <link rel="stylesheet" href="https://pyscript.net/releases/2024.1.1/core.css"> | |
| <script type="module" src="https://pyscript.net/releases/2024.1.1/core.js"></script> | |
| <style> | |
| body { font-family: 'Courier New', monospace; background-color: #f4f4f9; padding: 20px; } | |
| .panel { background: white; padding: 20px; border-radius: 8px; box-shadow: 0 4px 6px rgba(0,0,0,0.1); max-width: 900px; margin: auto; } | |
| h2 { border-bottom: 2px solid #333; padding-bottom: 10px; margin-top: 0; } | |
| .guide-box { background-color: #e3f2fd; border-left: 4px solid #1976d2; padding: 15px; margin-bottom: 20px; font-size: 0.95em; line-height: 1.6; color: #0d47a1; } | |
| .guide-box strong { color: #002171; font-size: 1.05em; } | |
| .control-group { margin-bottom: 15px; } | |
| label { display: inline-block; width: 180px; font-weight: bold; color: #333; } | |
| select, input { padding: 6px; width: 220px; border: 1px solid #ccc; border-radius: 4px; } | |
| button { background-color: #333; color: white; border: none; padding: 12px; font-weight: bold; width: 100%; cursor: pointer; margin-top: 10px; border-radius: 4px; font-size: 1.1em; } | |
| button:hover { background-color: #555; } | |
| #status-box { margin-top: 15px; padding: 10px; background: #e9ecef; border-left: 4px solid #333; font-weight: bold; } | |
| #plot-container { margin-top: 20px; text-align: center; } | |
| </style> | |
| </head> | |
| <body> | |
| <div class="panel"> | |
| <h2>Part 1 & 2: H.U.G.G.E.R + TZT Dynamics Solver</h2> | |
| <div class="guide-box"> | |
| <strong>[ Recommended Test Coordinates ]</strong><br> | |
| To witness the stark contrast in mathematical stability, input the following values manually and run both modes:<br> | |
| • <b>Grid Size (N^3):</b> <code>32 (Slow Rendering)</code> | <b>Simulation Time (T):</b> <code>5</code><br> | |
| • <b>base mode:</b> Observe the <i>finite-time blowup</i> where standard equations fail (energy divergence & singularity formation).<br> | |
| • <b>tzt mode:</b> Observe the <i>Zero-Point Equilibrium</i> where the TZT engine successfully dissipates destructive energy via a localized Fractal Valve, maintaining structural integrity. | |
| </div> | |
| <div class="control-group"> | |
| <label>Dynamics Mode:</label> | |
| <select id="ui_mode"> | |
| <option value="tzt">tzt (Zero-Point Equilibrium)</option> | |
| <option value="base">base (Finite-time Blowup)</option> | |
| </select> | |
| </div> | |
| <div class="control-group"> | |
| <label>Grid Size (N^3):</label> | |
| <select id="ui_n"> | |
| <option value="16">16 (Fast Rendering)</option> | |
| <option value="32">32 (Slow Rendering)</option> | |
| </select> | |
| </div> | |
| <div class="control-group"> | |
| <label>Simulation Time (T):</label> | |
| <input type="number" id="ui_t" value="0.5" step="0.1"> | |
| </div> | |
| <button id="run-btn" py-click="execute_simulation">Execute TZT Solver</button> | |
| <div id="status-box">Status: Engine Standby.</div> | |
| <div id="plot-container"></div> | |
| </div> | |
| <py-config> | |
| packages = ["numpy", "matplotlib"] | |
| </py-config> | |
| <py-script> | |
| import numpy as np | |
| import matplotlib.pyplot as plt | |
| from numpy import pi | |
| from pyscript import document, display | |
| N, NU, DT, MODE = 16, 0.0, 0.05, "tzt" | |
| CX, CO, DM, EPS, CS = 0.01, 2.0, 1.0, 1e-2, 0.17 | |
| Nh, DELTA, mask, K, K2, K2i, KX, KY, KZ, wgt = [None]*10 | |
| LAM = 0.0 | |
| VALVE_WIDTH = 0.2 | |
| def init_globals(n_val, mode_val): | |
| global N, NU, DT, MODE, CX, CO, DM, EPS, CS | |
| global Nh, DELTA, mask, K, K2, K2i, KX, KY, KZ, wgt | |
| N = int(n_val) | |
| MODE = mode_val | |
| Nh = N // 2 + 1 | |
| DELTA = 2 * pi / N | |
| x = np.arange(N) * 2 * pi / N | |
| X_, Y_, Z_ = np.meshgrid(x, x, x, indexing="ij") | |
| k1 = np.fft.fftfreq(N, 1.0 / N) | |
| kr = np.arange(Nh, dtype=float) | |
| KX, KY, KZ = np.meshgrid(k1, k1, kr, indexing="ij") | |
| K = np.stack([KX, KY, KZ]) | |
| K2 = KX ** 2 + KY ** 2 + KZ ** 2 | |
| K2i = 1.0 / np.where(K2 == 0, 1.0, K2) | |
| kc = N / 3.0 | |
| mask = (np.abs(KX) <= kc) & (np.abs(KY) <= kc) & (np.abs(KZ) <= kc) | |
| wgt = np.full((N, N, Nh), 2.0) | |
| wgt[:, :, 0] = 1.0 | |
| if N % 2 == 0: | |
| wgt[:, :, -1] = 1.0 | |
| u0 = np.stack([np.sin(X_) * np.cos(Y_) * np.cos(Z_), | |
| -np.cos(X_) * np.sin(Y_) * np.cos(Z_), | |
| np.zeros_like(X_)]) | |
| return u0 | |
| def rfft(a): return np.fft.rfftn(a, axes=(-3, -2, -1)) | |
| def irfft(a): return np.fft.irfftn(a, s=(N, N, N), axes=(-3, -2, -1)) | |
| def curl_hat(uh): return 1j * np.stack([KY * uh[2] - KZ * uh[1], KZ * uh[0] - KX * uh[2], KX * uh[1] - KY * uh[0]]) | |
| def grad(fh): | |
| G = np.empty((fh.shape[0], 3, N, N, N)) | |
| for j, Kj in enumerate((KX, KY, KZ)): | |
| G[:, j] = irfft(1j * Kj * fh) | |
| return G | |
| def proj(fh): return fh - K * ((KX * fh[0] + KY * fh[1] + KZ * fh[2]) * K2i) | |
| def dot(a, b, wk=1.0): return float(np.sum(wgt * wk * np.real(np.sum(np.conj(a) * b, axis=0))) / N ** 6) | |
| def energy(uh): return 0.5 * dot(uh, uh, 1.0) | |
| # Z-CORE: Fractal Valve (C1 Smooth Localization) | |
| def valve(w2): | |
| if VALVE_WIDTH <= 0.0 or LAM <= 0.0: | |
| return (w2 > LAM * LAM).astype(float) | |
| s = np.clip((np.sqrt(w2) - LAM) / (VALVE_WIDTH * LAM), 0.0, 1.0) | |
| return s * s * (3.0 - 2.0 * s) | |
| def forcing(uh, up, wp, gu): | |
| S = 0.5 * (gu + gu.transpose(1, 0, 2, 3, 4)) | |
| nut = (CS * DELTA) ** 2 * np.sqrt(2.0 * np.einsum('ij...,ij...->...', S, S)) | |
| FA_h = np.zeros((3, N, N, Nh), complex) | |
| FO_h = np.zeros((3, N, N, Nh), complex) | |
| w2 = (wp ** 2).sum(0) | |
| # Calculate global fields first | |
| FA = np.zeros((3, N, N, N)) | |
| FO = np.zeros((3, N, N, N)) | |
| if CX != 0.0: | |
| w2h = rfft(w2) * mask | |
| g = irfft(1j * K * w2h[None]) | |
| gn = np.sqrt((g ** 2).sum(0)) | |
| Xv = -CX * g / (gn + DM) | |
| Xh_proj = proj(rfft(Xv) * mask) | |
| Xv_proj = irfft(Xh_proj) | |
| FA = np.einsum('i...,ji...->j...', Xv_proj, gu) | |
| if CO != 0.0: | |
| Ov = CO * nut * (w2 / (w2 + EPS)) * wp | |
| FO = irfft(-curl_hat(rfft(Ov) * mask)) | |
| # Apply Fractal Valve (Localization) | |
| chi = valve(w2) | |
| FA = chi[None] * FA | |
| FO = chi[None] * FO | |
| FA_h = rfft(FA) | |
| FO_h = rfft(FO) | |
| return FA_h, FO_h | |
| def compute_rhs(uh): | |
| wh = curl_hat(uh) | |
| up = irfft(uh) | |
| wp = irfft(wh) | |
| ch = proj(rfft(np.cross(up, wp, axis=0)) * mask) | |
| out = ch - NU * K2 * uh | |
| if MODE != "base": | |
| gu = grad(uh) | |
| FA_h, FO_h = forcing(uh, up, wp, gu) | |
| out = out + proj(FA_h * mask) + proj(FO_h * mask) | |
| return out | |
| def execute_simulation(event): | |
| global LAM | |
| box = document.getElementById("status-box") | |
| box.innerText = "Status: Calculating CFD Dynamics... (Check visualization below when done)" | |
| mode_val = document.getElementById("ui_mode").value | |
| grid_n = int(document.getElementById("ui_n").value) | |
| t_end = float(document.getElementById("ui_t").value) | |
| u0 = init_globals(grid_n, mode_val) | |
| uh = rfft(u0) * mask | |
| E0 = energy(uh) | |
| # Initial Vorticity to set LAM | |
| wp0 = irfft(curl_hat(uh)) | |
| wmax0 = float(np.sqrt((wp0 ** 2).sum(0).max())) | |
| LAM = 1.0 * wmax0 | |
| nsteps = int(round(t_end / DT)) | |
| t_list, E_list, wmax_list = [], [], [] | |
| blowup_detected = False | |
| status_final = "" | |
| for n in range(nsteps + 1): | |
| t = n * DT | |
| if n < nsteps: | |
| k1_ = compute_rhs(uh) | |
| k2_ = compute_rhs(uh + 0.5 * DT * k1_) | |
| k3_ = compute_rhs(uh + 0.5 * DT * k2_) | |
| k4_ = compute_rhs(uh + DT * k3_) | |
| new = uh + DT / 6.0 * (k1_ + 2 * k2_ + 2 * k3_ + k4_) | |
| else: | |
| new = None | |
| E = energy(uh) | |
| wp = irfft(curl_hat(uh)) | |
| wmax = float(np.sqrt((wp ** 2).sum(0).max())) | |
| t_list.append(t) | |
| E_list.append(E / E0) | |
| wmax_list.append(wmax) | |
| # Z-CORE: Divergence detection logic | |
| if not np.isfinite(E) or E > 50 * E0: | |
| status_final = f"[ CRITICAL ] Non-linear Blowup detected at t={t:.3f} (System Halted)" | |
| blowup_detected = True | |
| break | |
| if new is not None: | |
| uh = new | |
| # Z-CORE: Status message branching upon successful loop completion | |
| if not blowup_detected: | |
| if mode_val == "base": | |
| status_final = "[ WARNING ] Energy accumulation detected. Divergence Threshold Approaching." | |
| else: | |
| status_final = "[ SUCCESS ] Simulation Complete. Geometric Equilibrium Maintained via Localized Valve." | |
| plt.clf() | |
| fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(10, 4)) | |
| ax1.plot(t_list, E_list, label="Energy (E/E0)", color="blue") | |
| ax1.set_title("Kinetic Energy Conservation", pad=25) | |
| ax1.set_xlabel("Time") | |
| # Z-CORE: Fix Energy axis to 0.92 ~ 1.02 to prevent auto-scaling illusion | |
| ax1.set_ylim(0.92, 1.02) | |
| ax1.grid(True) | |
| ax2.plot(t_list, wmax_list, label="Max Vorticity", color="red") | |
| ax2.set_title("Singularity Resolution (|w| max)", pad=25) | |
| ax2.set_xlabel("Time") | |
| # Z-CORE: Fix Vorticity axis to 0 ~ 12 to clearly contrast blowup vs suppression | |
| ax2.set_ylim(0, 12) | |
| ax2.grid(True) | |
| plt.tight_layout(pad=2.0) | |
| container = document.getElementById("plot-container") | |
| container.innerHTML = "" | |
| display(fig, target="plot-container") | |
| box.innerText = "Status: " + status_final | |
| </py-script> | |
| <!-- 제3부 TZT-Benchmark 라우팅 포털 --> | |
| <div style="text-align: center; margin: 40px auto; padding: 40px 20px; background-color: #111827; border: 1px solid #1f2937; border-radius: 12px; max-width: 800px; box-shadow: 0 10px 15px -3px rgba(0, 0, 0, 0.5);"> | |
| <h2 style="color: #00ffcc; font-size: 1.8rem; font-weight: 300; letter-spacing: 1px; margin-top: 0;">Part 3: NS_TZT Model</h2> | |
| <p style="color: #9ca3af; font-size: 1.1rem; margin-bottom: 30px; line-height: 1.6;"> | |
| Directly verify the Theorem 4.1 regularity proof and the 80% suppression of laminar over-damping.<br> | |
| A real-time interactive CFD benchmark is now available. | |
| </p> | |
| <a href="https://huggingface.co/spaces/ark-zeropoint/TZT-Benchmark" target="_blank" | |
| onmouseover="this.style.transform='scale(1.05)'; this.style.boxShadow='0 6px 20px rgba(14, 165, 233, 0.6)';" | |
| onmouseout="this.style.transform='scale(1)'; this.style.boxShadow='0 4px 15px rgba(14, 165, 233, 0.4)';" | |
| style="display: inline-block; padding: 16px 36px; background: linear-gradient(135deg, #0ea5e9, #2563eb); color: #ffffff; text-decoration: none; font-size: 1.2rem; font-weight: bold; border-radius: 50px; transition: all 0.3s ease; box-shadow: 0 4px 15px rgba(14, 165, 233, 0.4);"> | |
| 🚀 Launch TZT Benchmark Simulator | |
| </a> | |
| </div> | |
| </body> | |
| </html> |