分享图
动画工坊
引擎就绪
<!DOCTYPE html>
<html lang="zh-CN">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>中深层多分支水平井压裂换热系统 (IFR 原理动画)</title>
  <style>
    :root {
      --bg-dark: #060911;
      --panel-bg: rgba(10, 16, 30, 0.75);
      --panel-border: rgba(0, 229, 255, 0.2);
      --accent-cyan: #00f2fe;
      --accent-blue: #4facfe;
      --accent-orange: #ff8c00;
      --accent-hot: #ff3366;
      --accent-glow: #ffe600;
      --text-main: #e2e8f0;
      --text-muted: #64748b;
      --font-mono: "SF Mono", "Fira Code", "Courier New", monospace;
    }

    * {
      box-sizing: border-box;
      margin: 0;
      padding: 0;
      user-select: none;
    }

    body {
      background-color: var(--bg-dark);
      color: var(--text-main);
      font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", sans-serif;
      overflow: hidden;
      width: 100vw;
      height: 100vh;
      display: flex;
      flex-direction: column;
    }

    /* 主视区容器 */
    .stage-container {
      position: relative;
      flex: 1;
      width: 100%;
      height: 100%;
      display: flex;
      justify-content: center;
      align-items: center;
      overflow: hidden;
    }

    /* 核心 SVG 画布 */
    svg#geothermal-svg {
      width: 100%;
      height: 100%;
      max-width: 100%;
      max-height: 100%;
      display: block;
    }

    /* 极简角隅 HUD 覆盖层(严格控制字号与区域,杜绝遮挡中心动画) */
    .hud-header {
      position: absolute;
      top: 16px;
      left: 20px;
      z-index: 10;
      pointer-events: none;
    }

    .hud-title {
      font-size: 15px;
      font-weight: 700;
      letter-spacing: 1px;
      color: #fff;
      display: flex;
      align-items: center;
      gap: 8px;
    }

    .hud-title .badge {
      font-size: 10px;
      padding: 2px 6px;
      background: rgba(0, 242, 254, 0.15);
      border: 1px solid var(--accent-cyan);
      border-radius: 3px;
      color: var(--accent-cyan);
      font-family: var(--font-mono);
    }

    .hud-subtitle {
      font-size: 11px;
      color: var(--text-muted);
      margin-top: 2px;
      letter-spacing: 0.5px;
    }

    /* 右上角实时参数遥测面板 */
    .hud-telemetry {
      position: absolute;
      top: 16px;
      right: 20px;
      background: var(--panel-bg);
      backdrop-filter: blur(8px);
      border: 1px solid var(--panel-border);
      border-radius: 6px;
      padding: 10px 14px;
      display: grid;
      grid-template-columns: repeat(3, 1fr);
      gap: 16px;
      z-index: 10;
      pointer-events: none;
    }

    .metric-item {
      display: flex;
      flex-direction: column;
    }

    .metric-label {
      font-size: 10px;
      color: var(--text-muted);
      margin-bottom: 2px;
    }

    .metric-value {
      font-family: var(--font-mono);
      font-size: 14px;
      font-weight: 700;
      color: var(--accent-cyan);
    }

    .metric-value.hot {
      color: var(--accent-hot);
    }

    .metric-value.gold {
      color: var(--accent-glow);
    }

    /* 底部轻量交互微调面板 */
    .hud-controls {
      position: absolute;
      bottom: 16px;
      right: 20px;
      background: var(--panel-bg);
      backdrop-filter: blur(8px);
      border: 1px solid var(--panel-border);
      border-radius: 6px;
      padding: 10px 16px;
      display: flex;
      align-items: center;
      gap: 16px;
      z-index: 10;
    }

    .ctrl-group {
      display: flex;
      align-items: center;
      gap: 8px;
    }

    .ctrl-label {
      font-size: 11px;
      color: var(--text-main);
    }

    .ctrl-slider {
      appearance: none;
      -webkit-appearance: none;
      width: 90px;
      height: 4px;
      background: rgba(255, 255, 255, 0.15);
      border-radius: 2px;
      outline: none;
      cursor: pointer;
    }

    .ctrl-slider::-webkit-slider-thumb {
      appearance: none;
      -webkit-appearance: none;
      width: 12px;
      height: 12px;
      border-radius: 50%;
      background: var(--accent-cyan);
      box-shadow: 0 0 6px var(--accent-cyan);
      cursor: pointer;
    }

    .ctrl-val {
      font-family: var(--font-mono);
      font-size: 11px;
      color: var(--accent-cyan);
      min-width: 48px;
    }

    /* 左下角极简图例说明 */
    .hud-legend {
      position: absolute;
      bottom: 16px;
      left: 20px;
      background: var(--panel-bg);
      backdrop-filter: blur(8px);
      border: 1px solid var(--panel-border);
      border-radius: 6px;
      padding: 8px 12px;
      display: flex;
      gap: 14px;
      font-size: 11px;
      color: var(--text-main);
      z-index: 10;
      pointer-events: none;
    }

    .legend-tag {
      display: flex;
      align-items: center;
      gap: 5px;
    }

    .legend-dot {
      width: 8px;
      height: 8px;
      border-radius: 50%;
    }

    /* 动画与高光发光滤镜 */
    @keyframes pulse-heat {
      0%, 100% { opacity: 0.6; filter: drop-shadow(0 0 3px rgba(255, 51, 102, 0.4)); }
      50% { opacity: 0.95; filter: drop-shadow(0 0 8px rgba(255, 140, 0, 0.8)); }
    }

    @keyframes turbine-spin {
      from { transform: rotate(0deg); }
      to { transform: rotate(360deg); }
    }

    @keyframes wave-flow {
      0% { stroke-dashoffset: 200; }
      100% { stroke-dashoffset: 0; }
    }

    @keyframes power-pulse {
      0%, 100% { stroke: #ffe600; opacity: 0.5; }
      50% { stroke: #ffffff; opacity: 1; filter: drop-shadow(0 0 6px #ffe600); }
    }

    .heat-fracture {
      animation: pulse-heat 3.5s ease-in-out infinite;
    }

    .power-line {
      animation: power-pulse 2s infinite;
    }
  </style>
</head>
<body>

  <div class="stage-container">
    <!-- 顶部极简 HUD -->
    <header class="hud-header">
      <div class="hud-title">
        <span>中深层多分支水平井压裂换热系统</span>
        <span class="badge">IFR 最终理想解</span>
      </div>
      <div class="hud-subtitle">以“面积置换深度”:5.5 km 主井 + 鱼骨分支压裂人工裂隙网络 (≥10⁶ m²)</div>
    </header>

    <!-- 右上角遥测数据仪表 (紧凑小字号) -->
    <div class="hud-telemetry">
      <div class="metric-item">
        <span class="metric-label">换热有效总面积</span>
        <span class="metric-value gold" id="val-area">1.25 × 10⁶ m²</span>
      </div>
      <div class="metric-item">
        <span class="metric-label">产出水温 (热端)</span>
        <span class="metric-value hot" id="val-temp">192.8 °C</span>
      </div>
      <div class="metric-item">
        <span class="metric-label">净发电功率输出</span>
        <span class="metric-value" id="val-power">14.6 MWe</span>
      </div>
    </div>

    <!-- 左下角图例 -->
    <div class="hud-legend">
      <div class="legend-tag">
        <span class="legend-dot" style="background:#00f2fe; box-shadow:0 0 6px #00f2fe;"></span>
        <span>冷流体注入 (65°C)</span>
      </div>
      <div class="legend-tag">
        <span class="legend-dot" style="background:#ff9900; box-shadow:0 0 6px #ff9900;"></span>
        <span>微裂隙渗流吸热网</span>
      </div>
      <div class="legend-tag">
        <span class="legend-dot" style="background:#ff3366; box-shadow:0 0 6px #ff3366;"></span>
        <span>高温热流体产出 (190°C+)</span>
      </div>
    </div>

    <!-- 右下角控制微调器 -->
    <div class="hud-controls">
      <div class="ctrl-group">
        <span class="ctrl-label">注采流量:</span>
        <input type="range" id="slider-flow" class="ctrl-slider" min="50" max="90" value="72" step="1">
        <span class="ctrl-val" id="flow-display">72 L/s</span>
      </div>
      <div class="ctrl-group">
        <span class="ctrl-label">裂隙导流率:</span>
        <input type="range" id="slider-perm" class="ctrl-slider" min="80" max="130" value="105" step="1">
        <span class="ctrl-val" id="perm-display">105%</span>
      </div>
    </div>

    <!-- 核心 SVG 原理图 (视口 1200 x 780,主体居中无遮挡) -->
    <svg id="geothermal-svg" viewBox="0 0 1200 780" preserveAspectRatio="xMidYMid meet" xmlns="http://www.w3.org/2000/svg">
      <defs>
        <!-- 背景渐变与地层热力学渐变 -->
        <linearGradient id="strata-grad" x1="0%" y1="0%" x2="0%" y2="100%">
          <stop offset="0%" stop-color="#0c1424" />
          <stop offset="28%" stop-color="#111c2e" />
          <stop offset="60%" stop-color="#1d1b28" />
          <stop offset="85%" stop-color="#341a22" />
          <stop offset="100%" stop-color="#47141f" />
        </linearGradient>

        <!-- HDR 结晶岩热储热场辐射 -->
        <radialGradient id="hdr-heat-glow" cx="50%" cy="85%" r="60%">
          <stop offset="0%" stop-color="rgba(255, 60, 40, 0.28)" />
          <stop offset="45%" stop-color="rgba(255, 120, 0, 0.12)" />
          <stop offset="100%" stop-color="rgba(20, 10, 15, 0)" />
        </radialGradient>

        <!-- 注入管渐变 (冷蓝) -->
        <linearGradient id="inj-tube-grad" x1="0%" y1="0%" x2="100%" y2="0%">
          <stop offset="0%" stop-color="#0080ff" />
          <stop offset="50%" stop-color="#00f2fe" />
          <stop offset="100%" stop-color="#0080ff" />
        </linearGradient>

        <!-- 生产管渐变 (热红) -->
        <linearGradient id="prod-tube-grad" x1="0%" y1="0%" x2="100%" y2="0%">
          <stop offset="0%" stop-color="#cc0044" />
          <stop offset="50%" stop-color="#ff4d6d" />
          <stop offset="100%" stop-color="#cc0044" />
        </linearGradient>

        <!-- 裂隙网络微发光滤镜 -->
        <filter id="glow-heat" x="-20%" y="-20%" width="140%" height="140%">
          <feGaussianBlur stdDeviation="2.5" result="blur" />
          <feMerge>
            <feMergeNode in="blur" />
            <feMergeNode in="SourceGraphic" />
          </feMerge>
        </filter>

        <filter id="glow-bright" x="-30%" y="-30%" width="160%" height="160%">
          <feGaussianBlur stdDeviation="4" result="blur2" />
          <feMerge>
            <feMergeNode in="blur2" />
            <feMergeNode in="SourceGraphic" />
          </feMerge>
        </filter>

        <!-- 管道流体流动虚线动画定义 -->
        <style>
          .flow-blue-down {
            stroke-dasharray: 8 6;
            animation: dash-down 1.2s linear infinite;
          }
          .flow-red-up {
            stroke-dasharray: 8 6;
            animation: dash-up 1.1s linear infinite;
          }
          .flow-fracture-stream {
            stroke-dasharray: 5 5;
            animation: dash-fracture 2s linear infinite;
          }
          @keyframes dash-down {
            from { stroke-dashoffset: 28; }
            to { stroke-dashoffset: 0; }
          }
          @keyframes dash-up {
            from { stroke-dashoffset: 0; }
            to { stroke-dashoffset: 28; }
          }
          @keyframes dash-fracture {
            from { stroke-dashoffset: 30; }
            to { stroke-dashoffset: 0; }
          }
        </style>
      </defs>

      <!-- 1. 背景地层结构与深度温度标尺 -->
      <rect x="0" y="0" width="1200" height="780" fill="url(#strata-grad)" />

      <!-- 深层高温结晶岩底色光晕 (4.5km~5.5km区域) -->
      <rect x="0" y="470" width="1200" height="310" fill="url(#hdr-heat-glow)" />

      <!-- 地层分界虚线与弱文字标注 (置于左边缘侧) -->
      <g stroke="rgba(255,255,255,0.08)" stroke-width="1" stroke-dasharray="4 4">
        <!-- 地表 0m -->
        <line x1="60" y1="120" x2="1140" y2="120" stroke="rgba(0, 242, 254, 0.3)" stroke-width="1.5" />
        <!-- 沉积层底 2000m -->
        <line x1="60" y1="260" x2="1140" y2="260" />
        <!-- 致密花岗岩顶 4500m (造斜点 KOP) -->
        <line x1="60" y1="520" x2="1140" y2="520" stroke="rgba(255, 140, 0, 0.2)" />
        <!-- 完井靶底 5500m -->
        <line x1="60" y1="710" x2="1140" y2="710" stroke="rgba(255, 51, 102, 0.3)" />
      </g>

      <!-- 左侧深度 & 地温梯度标尺 (小字号、高科技微刻度) -->
      <g font-family="var(--font-mono)" font-size="10" fill="rgba(255,255,255,0.4)">
        <text x="68" y="115">0 m (地表 15°C)</text>
        <text x="68" y="255">2000 m (沉积盖层 ~65°C)</text>
        <text x="68" y="515" fill="#ffaa44">4500 m (造斜分支点 KOP ~145°C)</text>
        <text x="68" y="705" fill="#ff4466">5500 m (结晶岩目标层 ~195°C)</text>

        <!-- 刻度线 -->
        <line x1="60" y1="120" x2="60" y2="710" stroke="rgba(255,255,255,0.2)" stroke-width="1" />
        <line x1="56" y1="120" x2="60" y2="120" stroke="rgba(255,255,255,0.5)" stroke-width="1" />
        <line x1="56" y1="260" x2="60" y2="260" stroke="rgba(255,255,255,0.5)" stroke-width="1" />
        <line x1="56" y1="520" x2="60" y2="520" stroke="#ffaa44" stroke-width="2" />
        <line x1="56" y1="710" x2="60" y2="710" stroke="#ff4466" stroke-width="2" />
      </g>

      <!-- 2. 地表发电与换热中枢系统 (0m ~ 120m 区域) -->
      <g id="surface-facilities">
        <!-- 地表网格基线 -->
        <line x1="160" y1="120" x2="1040" y2="120" stroke="#334155" stroke-width="2" />

        <!-- 发电厂房外轮廓 (ORC 有机朗肯循环机组) -->
        <path d="M 520,120 L 520,55 L 680,55 L 680,120 Z" fill="rgba(15, 23, 42, 0.85)" stroke="#38bdf8" stroke-width="1.5" />
        <text x="600" y="48" font-size="11" fill="#38bdf8" font-weight="bold" text-anchor="middle">地面闭式换热与 ORC 发电站</text>

        <!-- 汽轮机旋转叶轮动画 -->
        <g transform="translate(600, 85)">
          <circle cx="0" cy="0" r="18" fill="none" stroke="#64748b" stroke-width="2" />
          <g id="turbine-blades" style="transform-origin: 0 0; animation: turbine-spin 3s linear infinite;">
            <line x1="-14" y1="0" x2="14" y2="0" stroke="#00f2fe" stroke-width="2.5" />
            <line x1="0" y1="-14" x2="0" y2="14" stroke="#00f2fe" stroke-width="2.5" />
            <line x1="-10" y1="-10" x2="10" y2="10" stroke="#00f2fe" stroke-width="2.5" />
            <line x1="-10" y1="10" x2="10" y2="-10" stroke="#00f2fe" stroke-width="2.5" />
          </g>
          <circle cx="0" cy="0" r="4" fill="#fff" />
        </g>

        <!-- 地面换热器冷热回路管线 -->
        <!-- 热水入换热器 (来自生产井 480 处) -->
        <path d="M 500,120 L 500,85 L 560,85" fill="none" stroke="#ff3366" stroke-width="3" />
        <!-- 冷却后冷水去注入泵 (去往注入井 720 处) -->
        <path d="M 640,85 L 700,85 L 700,120" fill="none" stroke="#00f2fe" stroke-width="3" />

        <!-- 高压注入泵图标 -->
        <rect x="686" y="96" width="28" height="18" rx="2" fill="#0369a1" stroke="#38bdf8" />
        <text x="700" y="109" font-size="9" fill="#ffffff" font-family="var(--font-mono)" text-anchor="middle">泵</text>

        <!-- 电网电力输出高压线 -->
        <path d="M 680,65 L 750,40 L 820,40" fill="none" stroke="#ffe600" stroke-width="2" stroke-dasharray="4 2" class="power-line" />
        <!-- 电力输送铁塔 -->
        <path d="M 820,40 L 810,120 M 820,40 L 830,120 M 805,75 L 835,75 M 812,55 L 828,55" stroke="rgba(255, 230, 0, 0.6)" stroke-width="1.2" fill="none" />
        <text x="838" y="44" font-size="10" fill="#ffe600" font-family="var(--font-mono)">14.6 MW 绿色电能并网</text>
      </g>

      <!-- 3. 井下主体结构 (0m ~ 5.5km) -->
      <!-- 3.1 垂直主井段 (双井系统: 左生产热井 x=500, 右注入冷井 x=700) -->
      <g id="vertical-wellbores">
        <!-- 井筒外壁护套管 (套管与水泥环) -->
        <rect x="495" y="120" width="10" height="400" fill="none" stroke="rgba(255,255,255,0.15)" stroke-width="1" />
        <rect x="695" y="120" width="10" height="400" fill="none" stroke="rgba(255,255,255,0.15)" stroke-width="1" />

        <!-- 垂直流体通道 -->
        <!-- 左侧产出井 (上升热流) -->
        <line x1="500" y1="520" x2="500" y2="120" stroke="#ff3366" stroke-width="3.5" />
        <line x1="500" y1="520" x2="500" y2="120" stroke="#ffe600" stroke-width="1.8" class="flow-red-up" />

        <!-- 右侧注入井 (下行冷流) -->
        <line x1="700" y1="120" x2="700" y2="520" stroke="#0080ff" stroke-width="3.5" />
        <line x1="700" y1="120" x2="700" y2="520" stroke="#00f2fe" stroke-width="1.8" class="flow-blue-down" />

        <!-- 井身中段文字注释 (靠井侧微型胶囊) -->
        <g font-size="10" fill="rgba(255,255,255,0.6)">
          <text x="440" y="320" text-anchor="end" fill="#ff758c">热流体产出管路 ↑</text>
          <text x="760" y="320" text-anchor="start" fill="#38bdf8">↓ 低温水注水管路</text>
          <text x="600" y="440" font-family="var(--font-mono)" text-anchor="middle" fill="rgba(255,255,255,0.3)">垂深 4500m 无电子机械纯通道</text>
        </g>
      </g>

      <!-- 3.2 4.5km 造斜点 (KOP) 与 5.5km 水平鱼骨分支系统 (核心创新区域) -->
      <g id="horizontal-multilaterals">
        <!-- 造斜导向弧线 -->
        <!-- 左侧生产井 3 条鱼骨分支 (汇聚段) -->
        <!-- 分支 L1 (深度约 5200m) -->
        <path id="path-prod-1" d="M 500,520 Q 480,560 380,565 L 180,565" fill="none" stroke="#ff3366" stroke-width="3" />
        <!-- 分支 L2 (深度约 5400m) -->
        <path id="path-prod-2" d="M 500,535 Q 490,620 390,625 L 160,625" fill="none" stroke="#ff3366" stroke-width="3" />
        <!-- 分支 L3 (深度约 5500m 完井底) -->
        <path id="path-prod-3" d="M 500,550 Q 500,680 400,685 L 190,685" fill="none" stroke="#ff3366" stroke-width="3" />

        <!-- 生产分支内部流动动画 -->
        <path d="M 180,565 L 380,565 Q 480,560 500,520" fill="none" stroke="#ffffff" stroke-width="1.5" class="flow-red-up" />
        <path d="M 160,625 L 390,625 Q 490,620 500,535" fill="none" stroke="#ffffff" stroke-width="1.5" class="flow-red-up" />
        <path d="M 190,685 L 400,685 Q 500,680 500,550" fill="none" stroke="#ffffff" stroke-width="1.5" class="flow-red-up" />

        <!-- 右侧注入井 3 条鱼骨分支 (分流段) -->
        <!-- 分支 R1 (深度约 5200m) -->
        <path id="path-inj-1" d="M 700,520 Q 720,560 820,565 L 1020,565" fill="none" stroke="#0099ff" stroke-width="3" />
        <!-- 分支 R2 (深度约 5400m) -->
        <path id="path-inj-2" d="M 700,535 Q 710,620 810,625 L 1040,625" fill="none" stroke="#0099ff" stroke-width="3" />
        <!-- 分支 R3 (深度约 5500m 完井底) -->
        <path id="path-inj-3" d="M 700,550 Q 700,680 800,685 L 1010,685" fill="none" stroke="#0099ff" stroke-width="3" />

        <!-- 注入分支内部流动动画 -->
        <path d="M 700,520 Q 720,560 820,565 L 1020,565" fill="none" stroke="#00f2fe" stroke-width="1.5" class="flow-blue-down" />
        <path d="M 700,535 Q 710,620 810,625 L 1040,625" fill="none" stroke="#00f2fe" stroke-width="1.5" class="flow-blue-down" />
        <path d="M 700,550 Q 700,680 800,685 L 1010,685" fill="none" stroke="#00f2fe" stroke-width="1.5" class="flow-blue-down" />

        <!-- 分段机械滑套与隔离封隔器定位点标注 -->
        <g fill="#ffe600">
          <rect x="360" y="562" width="6" height="6" rx="1" />
          <rect x="270" y="562" width="6" height="6" rx="1" />
          <rect x="370" y="622" width="6" height="6" rx="1" />
          <rect x="250" y="622" width="6" height="6" rx="1" />
          <rect x="380" y="682" width="6" height="6" rx="1" />
          <rect x="280" y="682" width="6" height="6" rx="1" />

          <rect x="834" y="562" width="6" height="6" rx="1" />
          <rect x="924" y="562" width="6" height="6" rx="1" />
          <rect x="824" y="622" width="6" height="6" rx="1" />
          <rect x="944" y="622" width="6" height="6" rx="1" />
          <rect x="814" y="682" width="6" height="6" rx="1" />
          <rect x="914" y="682" width="6" height="6" rx="1" />
        </g>
      </g>

      <!-- 4. 核心创新:人造密集压裂裂隙网络 (Fracture Matrix) 与热传导渗流 -->
      <g id="fracture-network" class="heat-fracture" filter="url(#glow-heat)">
        <!-- 裂隙网络微细裂纹与连通流道 (从右侧注入分支渗流至左侧生产分支) -->
        <!-- 上层裂隙群 (540~590m 高度) -->
        <g stroke-width="1.2" fill="none">
          <path d="M 830,565 Q 730,530 600,550 T 370,565" stroke="url(#heat-grad-1)" class="flow-fracture-stream" />
          <path d="M 900,565 Q 770,510 610,545 T 280,565" stroke="url(#heat-grad-1)" class="flow-fracture-stream" />
          <path d="M 980,565 Q 820,535 600,560 T 200,565" stroke="url(#heat-grad-1)" class="flow-fracture-stream" />
          <!-- 纵向交错微裂缝 -->
          <path d="M 760,540 L 730,585 M 650,535 L 670,580 M 550,545 L 530,585 M 450,540 L 430,580" stroke="rgba(255, 140, 0, 0.5)" stroke-dasharray="2 3" />
        </g>

        <!-- 中层裂隙群 (600~650m 高度) -->
        <g stroke-width="1.4" fill="none">
          <path d="M 820,625 Q 720,590 600,610 T 380,625" stroke="url(#heat-grad-1)" class="flow-fracture-stream" />
          <path d="M 910,625 Q 780,585 600,615 T 270,625" stroke="url(#heat-grad-1)" class="flow-fracture-stream" />
          <path d="M 1000,625 Q 830,600 600,630 T 180,625" stroke="url(#heat-grad-1)" class="flow-fracture-stream" />
          <!-- 纵向交错微裂缝 -->
          <path d="M 780,600 L 760,645 M 680,595 L 690,640 M 520,605 L 510,645 M 420,600 L 400,640" stroke="rgba(255, 140, 0, 0.6)" stroke-dasharray="2 3" />
        </g>

        <!-- 下层裂隙群 (660~710m 高度) -->
        <g stroke-width="1.5" fill="none">
          <path d="M 810,685 Q 710,650 600,670 T 390,685" stroke="url(#heat-grad-1)" class="flow-fracture-stream" />
          <path d="M 890,685 Q 760,640 600,675 T 300,685" stroke="url(#heat-grad-1)" class="flow-fracture-stream" />
          <path d="M 980,685 Q 810,660 600,690 T 210,685" stroke="url(#heat-grad-1)" class="flow-fracture-stream" />
          <!-- 纵向交错微裂缝 -->
          <path d="M 750,660 L 730,705 M 640,655 L 660,700 M 560,665 L 540,705 M 460,660 L 440,700" stroke="rgba(255, 51, 102, 0.6)" stroke-dasharray="2 3" />
        </g>

        <!-- 层间网状交织互通通道 (体现立体 U 型闭环热交换) -->
        <g stroke="rgba(255, 180, 50, 0.4)" stroke-width="1" stroke-dasharray="3 4">
          <path d="M 720,565 Q 670,595 710,625 Q 660,655 700,685" fill="none" />
          <path d="M 600,550 Q 560,585 600,620 Q 550,655 600,680" fill="none" />
          <path d="M 480,565 Q 520,595 490,625 Q 530,655 500,685" fill="none" />
        </g>
      </g>

      <!-- 裂隙渗流渐变着色 (右蓝/冷 -> 中橙/温 -> 左红/热) -->
      <defs>
        <linearGradient id="heat-grad-1" x1="100%" y1="0%" x2="0%" y2="0%">
          <stop offset="0%" stop-color="#00f2fe" />
          <stop offset="25%" stop-color="#38bdf8" />
          <stop offset="55%" stop-color="#ff9900" />
          <stop offset="85%" stop-color="#ff3366" />
          <stop offset="100%" stop-color="#ff0033" />
        </linearGradient>
      </defs>

      <!-- 5. 核心创新说明浮标 (精简文字,不遮挡主体) -->
      <g transform="translate(600, 745)">
        <!-- 胶囊底框 -->
        <rect x="-240" y="-18" width="480" height="34" rx="17" fill="rgba(10, 18, 35, 0.85)" stroke="rgba(0, 242, 254, 0.4)" stroke-width="1" />
        <!-- 动态指示标签 -->
        <circle cx="-218" cy="-1" r="5" fill="#ffaa00" filter="url(#glow-bright)" />
        <text x="-204" y="3" font-size="11" fill="#ffffff" font-weight="600">换热机理:</text>
        <text x="-144" y="3" font-size="11" fill="#94a3b8">井筒仅作通道,压裂裂隙网络制造巨大换热面 (以面积替代超深直井)</text>
      </g>

      <!-- 水平段长度标注刻度标尺 (地下5.5km) -->
      <g font-family="var(--font-mono)" font-size="10" fill="rgba(255, 255, 255, 0.5)">
        <!-- 左侧水平支标注 -->
        <line x1="180" y1="715" x2="490" y2="715" stroke="rgba(255,255,255,0.2)" stroke-width="1" />
        <line x1="180" y1="710" x2="180" y2="720" stroke="rgba(255,255,255,0.4)" />
        <line x1="490" y1="710" x2="490" y2="720" stroke="rgba(255,255,255,0.4)" />
        <text x="335" y="730" text-anchor="middle">分支单支长 2500 m</text>

        <!-- 右侧水平支标注 -->
        <line x1="710" y1="715" x2="1020" y2="715" stroke="rgba(255,255,255,0.2)" stroke-width="1" />
        <line x1="710" y1="710" x2="710" y2="720" stroke="rgba(255,255,255,0.4)" />
        <line x1="1020" y1="710" x2="1020" y2="720" stroke="rgba(255,255,255,0.4)" />
        <text x="865" y="730" text-anchor="middle">多分支总长 ≥10000 m</text>
      </g>

      <!-- 动态热流粒子模拟层 (Canvas在JS中同步渲染到此或者SVG动态粒子) -->
      <g id="particle-group"></g>
    </svg>
  </div>

  <script>
    // 页面加载后自动运行,确保无须用户点击即全自动平稳播放
    document.addEventListener("DOMContentLoaded", () => {
      initSimulation();
    });

    // 核心物理仿真变量
    const state = {
      flowRate: 72,      // 注采流量 L/s (60 ~ 80)
      permeability: 1.05, // 裂隙导流系数
      baseRockTemp: 196.5,// 5.5km 岩体温度 °C
      injTemp: 65.0       // 注入冷水温度 °C
    };

    // DOM 元素引用
    const sliderFlow = document.getElementById("slider-flow");
    const sliderPerm = document.getElementById("slider-perm");
    const flowDisplay = document.getElementById("flow-display");
    const permDisplay = document.getElementById("perm-display");

    const valArea = document.getElementById("val-area");
    const valTemp = document.getElementById("val-temp");
    const valPower = document.getElementById("val-power");
    const turbineBlades = document.getElementById("turbine-blades");

    // 数据动态解算模型 (体现面积置换深度与热平衡)
    function updateThermodynamics() {
      // 换热面积计算 (随导流率微调)
      const effectiveArea = (1.20 * state.permeability).toFixed(2);
      valArea.innerText = `${effectiveArea} × 10⁶ m²`;

      // 产出温度计算: 热传导效率与面积正比,与流速呈热平衡非线性关系
      // T_prod = T_rock - (T_rock - T_inj) * exp(- (U * Area) / (m_dot * Cp))
      const heatExchangeFactor = (state.permeability * 1.8) / (state.flowRate * 0.022);
      const tempDiff = state.baseRockTemp - state.injTemp;
      const prodTemp = state.baseRockTemp - tempDiff * Math.exp(-heatExchangeFactor);
      valTemp.innerText = `${prodTemp.toFixed(1)} °C`;

      // 热功率与发电净功率输出计算
      // P_th = m_dot * Cp * Delta_T; ORC 转换效率按 ~14.5%
      const deltaT = prodTemp - state.injTemp;
      const thermalPowerMW = (state.flowRate * 4.184 * deltaT) / 1000; // MW_th
      const electricPowerMW = thermalPowerMW * 0.148; // MW_e
      valPower.innerText = `${electricPowerMW.toFixed(1)} MWe`;

      // 汽轮机转速与流速及热能联动动画速率
      const spinDuration = Math.max(0.8, 3.2 - (electricPowerMW / 15) * 1.8);
      if (turbineBlades) {
        turbineBlades.style.animationDuration = `${spinDuration.toFixed(2)}s`;
      }
    }

    // 交互控件绑定
    sliderFlow.addEventListener("input", (e) => {
      state.flowRate = parseFloat(e.target.value);
      flowDisplay.innerText = `${state.flowRate} L/s`;
      updateThermodynamics();
    });

    sliderPerm.addEventListener("input", (e) => {
      const val = parseFloat(e.target.value);
      state.permeability = val / 100;
      permDisplay.innerText = `${val}%`;
      updateThermodynamics();
    });

    // 动态 SVG 渗流微粒子生成器 (全自动持续运转)
    const svgNS = "http://www.w3.org/2000/svg";
    const particleGroup = document.getElementById("particle-group");
    const particles = [];
    const MAX_PARTICLES = 36;

    // 裂隙流道路径坐标定义 (从注入井右分支流向左生产分支)
    const fractureTracks = [
      { startX: 880, startY: 565, midX: 580, midY: 545, endX: 280, endY: 565 },
      { startX: 840, startY: 625, midX: 590, midY: 615, endX: 300, endY: 625 },
      { startX: 920, startY: 625, midX: 610, midY: 605, endX: 220, endY: 625 },
      { startX: 860, startY: 685, midX: 580, midY: 670, endX: 320, endY: 685 },
      { startX: 940, startY: 685, midX: 620, midY: 660, endX: 240, endY: 685 }
    ];

    function createParticle() {
      const track = fractureTracks[Math.floor(Math.random() * fractureTracks.length)];
      const circle = document.createElementNS(svgNS, "circle");
      circle.setAttribute("r", (Math.random() * 1.8 + 1.2).toFixed(1));
      circle.setAttribute("opacity", "0");
      particleGroup.appendChild(circle);

      return {
        el: circle,
        track: track,
        progress: Math.random(), // 随机分布
        speed: (Math.random() * 0.004 + 0.003) * (state.flowRate / 70)
      };
    }

    function initSimulation() {
      updateThermodynamics();

      // 初始化粒子
      for (let i = 0; i < MAX_PARTICLES; i++) {
        particles.push(createParticle());
      }

      // 启动粒子物理动画循环
      function animateLoop() {
        particles.forEach(p => {
          p.progress += p.speed * (state.flowRate / 72);
          if (p.progress >= 1) {
            p.progress = 0;
            p.track = fractureTracks[Math.floor(Math.random() * fractureTracks.length)];
          }

          // 二次贝塞尔曲线坐标插值: B(t) = (1-t)^2 * P0 + 2(1-t)t * P1 + t^2 * P2
          const t = p.progress;
          const u = 1 - t;
          const x = u * u * p.track.startX + 2 * u * t * p.track.midX + t * t * p.track.endX;
          const y = u * u * p.track.startY + 2 * u * t * p.track.midY + t * t * p.track.endY;

          p.el.setAttribute("cx", x.toFixed(1));
          p.el.setAttribute("cy", y.toFixed(1));

          // 粒子渐变颜色演化: 冷蓝(0.0) -> 琥珀金(0.5) -> 炽热绯红(1.0)
          let color = "#00f2fe";
          if (t > 0.65) {
            color = "#ff3366";
          } else if (t > 0.3) {
            color = "#ffaa00";
          }
          p.el.setAttribute("fill", color);

          // 边缘淡入淡出透明度
          let alpha = 0.8;
          if (t < 0.15) alpha = t / 0.15 * 0.8;
          else if (t > 0.85) alpha = (1 - t) / 0.15 * 0.8;
          p.el.setAttribute("opacity", alpha.toFixed(2));
        });

        requestAnimationFrame(animateLoop);
      }

      requestAnimationFrame(animateLoop);
    }
  </script>
</body>
</html>
积分规则:每轮对话扣10分