diff --git a/src/CCD_analysis/PIPELINE.md b/src/CCD_analysis/PIPELINE.md new file mode 100644 index 0000000..a5a59a8 --- /dev/null +++ b/src/CCD_analysis/PIPELINE.md @@ -0,0 +1,160 @@ +# CCD Analysis Pipeline + +> Correction-field CCD analysis for fluidic pinball DRL control. +> Core question: does `dq_ctl` (what the controller adds) match `dq_tar` (what the target requires)? + +## Quick Start + +```bash +cd src/CCD_analysis + +# Panorama comparison figure (primary output) +conda run -n pycuda_3_10 python3 correction_analysis/compare_dqctl_scenes.py + +# CCD quantitative decomposition +conda run -n pycuda_3_10 python3 correction_analysis/decompose_corrections.py + +# Single-scene zone diagnostics +conda run -n pycuda_3_10 python3 correction_analysis/diagnose_corrections.py +``` + +## Pipeline Architecture + +``` +[Data Collection] [Phase Alignment] [Correction Fields] [Analysis] +scripts/collect_*.py → detect_period.py → compute_correction_ → compare_dqctl_scenes.py + (GPU, device 2) replay_fields.py fields.py decompose_corrections.py + (CPU/GPU) (CPU) diagnose_corrections.py + (CPU) +``` + +## Key Conventions + +### Geometry (unified 2026-06-25) +- **All scenes**: pinball center ≈ 613 px, sensors at 800 px (40×L0) +- Collected at source — no post-processing translation needed + +### Correction Fields +- **`dq_blk = q_blk − q_in`**: pinball blockage (passive) +- **`dq_ctl = q_ctl − q_blk`**: control correction (active) — **primary analysis object** +- **`dq_tar = q_tar − q_blk`**: target correction (theoretical) +- Core question: **O(dq_ctl, dq_tar)** — how well does control match theory? + +### Observation Normalization +- **Force-first**: `obs = [forces/force_norm, sensors/sens_norm]` +- Each scene computes its own `force_norm_fact`, `sens_deviation`, `sens_norm_fact` during collection +- Same norm values MUST be used during inference + +### Reynolds Number +- Code Re uses reference length 2D = 40: `Re = U0×40/ν` +- Physical Re_D uses D = 20: `Re_D = Re/2` +- Default: Re=100 → Re_D=50, nu=0.004 + +### Inlet +- Parabolic velocity profile (not uniform) +- Top/bottom walls: no-slip bounce-back +- U0 = 0.01 (centerline, lattice units) + +### Vortex Bug History (2026-06-29) +Three bugs in `collect_vortex.py` caused incorrect Lamb data: +1. **Cylinder order**: add order is front→TOP(+y)→BOTTOM(−y); reversed caused wrong bias mapping +2. **Obs swap**: used `[sensors/force_norm, forces/sens_norm]` instead of force-first `[forces/force_norm, sensors/sens_norm]` +3. **Missing fade-in/out**: 25-step transition from steady-cloak bias to PPO action required + +See `collect_vortex.py` header and `ccd_knowledge.md` §12 for full details. + +## Results Index + +All figures in `results/figures/`; CCD JSON in `results/ccd/`. + +### Panorama (main deliverable) + +| # | Figure | Content | +|---|--------|---------| +| 01 | `01_panorama_all_scenes.png` | 7 scenes × 4 quantities (ux_mean, uy_mean, RMS, vorticity) | +| 02 | `02_cloak_comparison.png` | 4 cloak scenes (steady, karman, vortex_lamb, vortex_taylor) | +| 03 | `03_illusion_comparison.png` | 3 illusion scenes (0.75L, 1.0L, 1.5L) | + +### Per-Scene dq_ctl vs dq_tar + +| # | Figure | Scene | +|---|--------|-------| +| 04 | `04_steady_cloak_cancel.png` | Steady cloak cancellation test | +| 05 | `05_illusion_075L_ctl_vs_tar.png` | Illusion 0.75L | +| 06 | `06_illusion_10L_ctl_vs_tar.png` | Illusion 1.0L | +| 07 | `07_illusion_15L_ctl_vs_tar.png` | Illusion 1.5L | +| 08 | `08_karman_ctl_vs_tar.png` | Karman cloak re100 | +| 09 | `09_vortex_lamb_ctl_vs_tar.png` | Vortex Lamb | +| 10 | `10_vortex_taylor_ctl_vs_tar.png` | Vortex Taylor | + +### Vortex Diagnosis + +| # | Figure | Content | +|---|--------|---------| +| 11 | `11_vortex_lamb_diagnosis.png` | Lamb sensor + action comparison | +| 12 | `12_vortex_taylor_diagnosis.png` | Taylor sensor + action comparison | +| 13 | `13_vortex_lamb_vorticity.png` | Lamb vorticity field evolution | +| 14 | `14_vortex_taylor_vorticity.png` | Taylor vorticity field evolution | +| 15 | `15_vortex_lamb_target_vorticity.png` | Lamb target (no pinball) reference | +| 16 | `16_vortex_taylor_target_vorticity.png` | Taylor target (no pinball) reference | + +### Key Numerical Results + +**Correction-field CCD (2026-06-28, unified geometry)** + +| Metric | 0.75L | 1.0L | 1.5L | +|--------|:-----:|:----:|:----:| +| O(dq_ctl, dq_tar) mode1 (r=6) | 0.383 | **0.926** | **0.922** | +| O(dq_ctl, dq_tar) mode1 (r=10) | 0.320 | 0.684 | 0.661 | +| Force-CCD m80 (r=6) | 2 | 2 | 1 | +| Action sigma1 (r=6) | 1.49 | 1.17 | **0.20** | + +**Cloak dq_ctl RMS (cropped x=[300,1100])** + +| Scene | RMS | Type | +|-------|:---:|------| +| steady_cloak | 0.196 | Steady, open-loop | +| karman_re100 | 0.397 | Periodic, PPO closed-loop | +| vortex_lamb | 0.146 | Transient, PPO closed-loop | +| vortex_taylor | 0.188 | Transient, PPO closed-loop | + +**Key findings:** +- Cloak mechanism is **independent of upstream condition** (steady/vortex street/transient vortex all share the same dq_ctl structure) +- Illusion 1.0L achieves near-perfect overlap (O=0.926) via "cloak physics + target frequency modulation" +- Illusion 1.5L uses a fundamentally different mechanism (high-freq modulation, action sigma1=0.20 vs 1.17-1.49) +- 0.75L overlap dropped from 0.564→0.383 after fixing geometry alignment — old number was inflated + +### CCD Quantitative (JSON) + +| File | Content | +|------|---------| +| `results/ccd/correction_ccd_results.json` | Force/Action-CCD per scene (r=6,8,10), O(dq_ctl,dq_tar) per mode | +| `results/ccd/zone_metrics.json` | Per-zone KE and enstrophy | + +## Full Documentation + +| File | Content | +|------|---------| +| `PIPELINE.md` | This file — pipeline overview, conventions, results index | +| `README.md` | Quick start | +| `ccd_knowledge.md` | Complete knowledge base (theory, methodology, detailed results, bug history) | +| `Lyu23.md` | CCD method paper (Lyu 2023) | + +## Adding New Training Results + +When new DRL models are trained (e.g. on new CelerisLab solver): + +1. **Collect fields**: Run the appropriate `scripts/collect_*.py` with the new model path +2. **Phase alignment**: `detect_period.py` → `replay_fields.py` (for periodic scenes) +3. **Correction fields**: Already handled by `compute_correction_fields.py` — just ensure the scene name is registered in `configs.py` `_SCENE_MAP` +4. **Regenerate figures**: `compare_dqctl_scenes.py` and `diagnose_corrections.py` +5. **Regenerate CCD**: `decompose_corrections.py` +6. **Symlink**: Add new figures to `results/figures/` + +The `configs.py` `SCENES` dict is the single source of truth — add new scenes there and all analysis scripts automatically pick them up. + +## Environment + +- **Conda**: `pycuda_3_10` +- **GPU**: Device 2 (check with `nvidia-smi` before collection) +- **CPU-only steps**: POD, CCD, analysis scripts diff --git a/src/CCD_analysis/README.md b/src/CCD_analysis/README.md index 7b6ce0e..ac424cc 100644 --- a/src/CCD_analysis/README.md +++ b/src/CCD_analysis/README.md @@ -2,84 +2,54 @@ Analyzes DRL-controlled fluidic pinball using **correction-field decomposition** + **Canonical Correlation Decomposition (CCD/Lyu23)**. Core question: does `dq_ctl` (what the controller adds) match `dq_tar` (what the target requires)? -## Quick Start +## Start Here + +**→ [`PIPELINE.md`](PIPELINE.md)** — pipeline overview, results index, conventions, new training integration guide. + +## Quick Commands ```bash -# 1. Panorama comparison figure (primary output) +cd src/CCD_analysis + +# Panorama comparison (main output) conda run -n pycuda_3_10 python3 correction_analysis/compare_dqctl_scenes.py -# 2. CCD quantitative decomposition +# CCD quantitative analysis conda run -n pycuda_3_10 python3 correction_analysis/decompose_corrections.py -# 3. Single-scene diagnostics (zone metrics) +# Zone diagnostics conda run -n pycuda_3_10 python3 correction_analysis/diagnose_corrections.py ``` -## Pipeline Architecture - -``` -scripts/collect_*.py → scripts/{detect_period,replay_fields}.py - (GPU采集) (phase alignment) - ↓ -correction_analysis/compute_correction_fields.py - (dq_blk, dq_ctl, dq_tar) - ↓ - ┌────┴────┬────────────┐ - ↓ ↓ ↓ -compare_ decompose_ diagnose_ -dqctl_ corrections corrections -scenes.py .py .py -(全景对比) (CCD定量) (zone诊断) -``` - -## Directory Structure +## Directory ``` CCD_analysis/ - README.md # 本文件 - ccd_knowledge.md # 唯一知识库 (理论, 结果, 操作流程, bug经验) - Lyu23.md # CCD 方法文献 - configs.py # 场景元数据 (统一几何) - utils/ - resampling.py # POD, CCD, 场加载 - cfd_interface.py # LegacyCelerisLab 封装 (GPU) + build_observation - field_translate.py # 场平移 (备用) - load_vortex_fields.py # 瞬态 vortex 场加载 - scripts/ - collect_*.py # GPU 数据采集 - detect_period.py # 周期检测 → phase_plan.json - replay_fields.py # 场回放 → fields_aligned.npz - correction_analysis/ - compute_correction_fields.py # dq 计算 (核心) - compare_dqctl_scenes.py # 全景对比图 (核心输出) - decompose_corrections.py # CCD 定量 (POD + force/action CCD) - diagnose_corrections.py # 单场景 zone 诊断 - run_signature_line.py # Signature CCD - run_zone_ccd.py # Zone-restricted CCD - run_steady_metrics.py # Steady cloak 定量 - run_15L_correction.py # 1.5L 专项 - visualize_action_ccd.py # Action-CCD mode1 可视化 - process_legacy_steady.py # 旧格式加载 - ccd/ # Round 5 冻结基线 (勿改) - data/ - figures/ # 诊断图 (仅保留核心对比图) - ccd/ # JSON 结果 - old_data/ # 归档 (废弃脚本/旧报告/旧数据) + README.md # This file + PIPELINE.md # Primary entry — overview, results, conventions + ccd_knowledge.md # Full knowledge base (theory, methods, bug history) + Lyu23.md # CCD method paper + configs.py # Scene registry (single source of truth) + results/ # Canonical outputs + figures/ # Symlinks to all core figures (numbered) + ccd/ # Final CCD JSON results + correction_analysis/ # All analysis scripts + scripts/ # GPU data collection + phase alignment + utils/ # Core algorithms (POD, CCD, field loading) + data/ # Raw data + generated figures + ccd/ # Round 5 frozen baseline (do not modify) ``` ## Key Documentation | File | Content | |------|---------| -| `ccd_knowledge.md` | **Primary entry** — theory, results, conventions, bug history | -| `Lyu23.md` | CCD method paper (Lyu 2023) | -| `data/old_data/ccd_correction_field_report.md` | Old full report (archived reference) | -| `data/old_data/ccd_handover.md` | Old handover notes (archived) | +| `PIPELINE.md` | **Primary entry** — pipeline, convention, results index | +| `ccd_knowledge.md` | Complete knowledge base (509 lines) | +| `results/figures/` | All core figures with numerical prefix ordering | -## Key Conventions +## Environment -- **Main analysis object**: `dq_ctl` (not raw `q_ctl`) -- **Observation order**: `[forces/force_norm, sensors/sens_norm]` — force first (see Bug 3 in ccd_knowledge.md §12) -- **All scenes unified geometry**: pinball center at 613px, sensors at 800px -- **Environment**: `conda run -n pycuda_3_10` -- **GPU**: Device 2 for collection +``` +conda run -n pycuda_3_10 +``` diff --git a/src/CCD_analysis/results/ccd/correction_ccd_results.json b/src/CCD_analysis/results/ccd/correction_ccd_results.json new file mode 100644 index 0000000..f3415da --- /dev/null +++ b/src/CCD_analysis/results/ccd/correction_ccd_results.json @@ -0,0 +1,731 @@ +{ + "illusion_0.75L_dqctl_force_fy_r6": { + "scene": "illusion_0.75L", + "diam": 0.75, + "obs": "force_fy", + "r": 6, + "m80": 2, + "N": 6, + "sigma_top3": [ + 0.9363693259668311, + 0.5427124016524685, + 0.02867293614015484 + ], + "special_mechanism": false + }, + "illusion_0.75L_dqctl_force_fx_r6": { + "scene": "illusion_0.75L", + "diam": 0.75, + "obs": "force_fx", + "r": 6, + "m80": 2, + "N": 6, + "sigma_top3": [ + 0.8887476512241682, + 0.7024685939692135, + 0.17373174245109088 + ], + "special_mechanism": false + }, + "illusion_0.75L_dqctl_action_r6": { + "scene": "illusion_0.75L", + "diam": 0.75, + "obs": "action", + "r": 6, + "m80": 2, + "N": 6, + "sigma_top3": [ + 1.4929827205494475, + 1.0564978623336443, + 0.3536240923864859 + ], + "special_mechanism": false + }, + "illusion_0.75L_dqtar_force_fy_r6": { + "scene": "illusion_0.75L", + "diam": 0.75, + "obs": "force_fy_tar", + "r": 6, + "m80": 2, + "N": 6, + "sigma_top3": [ + 0.9557871261173136, + 0.5104093433240032, + 0.00272381506789553 + ], + "special_mechanism": false + }, + "illusion_0.75L_O_dqctl_vs_dqtar_r6_mode1": { + "overlap": 0.38274004938666406, + "mode": 1, + "r": 6 + }, + "illusion_0.75L_O_dqctl_vs_dqtar_r6_mode2": { + "overlap": 0.3742735673782987, + "mode": 2, + "r": 6 + }, + "illusion_0.75L_O_dqctl_vs_dqtar_r6_mode3": { + "overlap": 0.4160221885366777, + "mode": 3, + "r": 6 + }, + "illusion_0.75L_O_dqctl_vs_dqtar_r6_mode4": { + "overlap": 0.7933885479724803, + "mode": 4, + "r": 6 + }, + "illusion_0.75L_O_dqctl_vs_dqtar_r6_mode5": { + "overlap": 0.6200548221579631, + "mode": 5, + "r": 6 + }, + "illusion_0.75L_dqctl_force_fy_r8": { + "scene": "illusion_0.75L", + "diam": 0.75, + "obs": "force_fy", + "r": 8, + "m80": 2, + "N": 7, + "sigma_top3": [ + 1.1478269894791648, + 0.652863182963739, + 0.028786077604042823 + ], + "special_mechanism": false + }, + "illusion_0.75L_dqctl_force_fx_r8": { + "scene": "illusion_0.75L", + "diam": 0.75, + "obs": "force_fx", + "r": 8, + "m80": 2, + "N": 7, + "sigma_top3": [ + 0.9786149641068052, + 0.7691113807859654, + 0.188609876636516 + ], + "special_mechanism": false + }, + "illusion_0.75L_dqctl_action_r8": { + "scene": "illusion_0.75L", + "diam": 0.75, + "obs": "action", + "r": 8, + "m80": 2, + "N": 8, + "sigma_top3": [ + 1.8212349775439216, + 1.2876771686498985, + 0.36519455351462626 + ], + "special_mechanism": false + }, + "illusion_0.75L_dqtar_force_fy_r8": { + "scene": "illusion_0.75L", + "diam": 0.75, + "obs": "force_fy_tar", + "r": 8, + "m80": 2, + "N": 7, + "sigma_top3": [ + 0.9559584636516365, + 0.5114433620666231, + 0.020016175925514433 + ], + "special_mechanism": false + }, + "illusion_0.75L_O_dqctl_vs_dqtar_r8_mode1": { + "overlap": 0.32804391166994556, + "mode": 1, + "r": 8 + }, + "illusion_0.75L_O_dqctl_vs_dqtar_r8_mode2": { + "overlap": 0.3279264837693497, + "mode": 2, + "r": 8 + }, + "illusion_0.75L_O_dqctl_vs_dqtar_r8_mode3": { + "overlap": 0.04479564315361202, + "mode": 3, + "r": 8 + }, + "illusion_0.75L_O_dqctl_vs_dqtar_r8_mode4": { + "overlap": 0.345183841487867, + "mode": 4, + "r": 8 + }, + "illusion_0.75L_O_dqctl_vs_dqtar_r8_mode5": { + "overlap": 0.4363341302545839, + "mode": 5, + "r": 8 + }, + "illusion_0.75L_dqctl_force_fy_r10": { + "scene": "illusion_0.75L", + "diam": 0.75, + "obs": "force_fy", + "r": 10, + "m80": 2, + "N": 7, + "sigma_top3": [ + 1.2041535893498374, + 0.6687434874320507, + 0.033382686367867884 + ], + "special_mechanism": false + }, + "illusion_0.75L_dqctl_force_fx_r10": { + "scene": "illusion_0.75L", + "diam": 0.75, + "obs": "force_fx", + "r": 10, + "m80": 2, + "N": 7, + "sigma_top3": [ + 1.021082402461413, + 0.7906946910917539, + 0.19569390445830676 + ], + "special_mechanism": false + }, + "illusion_0.75L_dqctl_action_r10": { + "scene": "illusion_0.75L", + "diam": 0.75, + "obs": "action", + "r": 10, + "m80": 2, + "N": 10, + "sigma_top3": [ + 1.873772820479455, + 1.3476153959060446, + 0.3912418253445644 + ], + "special_mechanism": false + }, + "illusion_0.75L_dqtar_force_fy_r10": { + "scene": "illusion_0.75L", + "diam": 0.75, + "obs": "force_fy_tar", + "r": 10, + "m80": 2, + "N": 7, + "sigma_top3": [ + 0.95651717599455, + 0.5116328905682535, + 0.02153808322188994 + ], + "special_mechanism": false + }, + "illusion_0.75L_O_dqctl_vs_dqtar_r10_mode1": { + "overlap": 0.3200853391492714, + "mode": 1, + "r": 10 + }, + "illusion_0.75L_O_dqctl_vs_dqtar_r10_mode2": { + "overlap": 0.3169378757210263, + "mode": 2, + "r": 10 + }, + "illusion_0.75L_O_dqctl_vs_dqtar_r10_mode3": { + "overlap": 0.07447905724690952, + "mode": 3, + "r": 10 + }, + "illusion_0.75L_O_dqctl_vs_dqtar_r10_mode4": { + "overlap": 0.05289143799442159, + "mode": 4, + "r": 10 + }, + "illusion_0.75L_O_dqctl_vs_dqtar_r10_mode5": { + "overlap": 0.3699778630857817, + "mode": 5, + "r": 10 + }, + "illusion_1.0L_dqctl_force_fy_r6": { + "scene": "illusion_1.0L", + "diam": 1.0, + "obs": "force_fy", + "r": 6, + "m80": 2, + "N": 6, + "sigma_top3": [ + 0.9133527075400956, + 0.5492417355984791, + 0.03698984539919565 + ], + "special_mechanism": false + }, + "illusion_1.0L_dqctl_force_fx_r6": { + "scene": "illusion_1.0L", + "diam": 1.0, + "obs": "force_fx", + "r": 6, + "m80": 2, + "N": 6, + "sigma_top3": [ + 0.9627700852255946, + 0.575350111829231, + 0.12210932634955265 + ], + "special_mechanism": false + }, + "illusion_1.0L_dqctl_action_r6": { + "scene": "illusion_1.0L", + "diam": 1.0, + "obs": "action", + "r": 6, + "m80": 3, + "N": 6, + "sigma_top3": [ + 1.1703371479902003, + 0.928425799748123, + 0.6993315776263908 + ], + "special_mechanism": false + }, + "illusion_1.0L_dqtar_force_fy_r6": { + "scene": "illusion_1.0L", + "diam": 1.0, + "obs": "force_fy_tar", + "r": 6, + "m80": 2, + "N": 6, + "sigma_top3": [ + 0.9230800944823152, + 0.5409412328754315, + 0.013881195337352553 + ], + "special_mechanism": false + }, + "illusion_1.0L_O_dqctl_vs_dqtar_r6_mode1": { + "overlap": 0.9255017481198297, + "mode": 1, + "r": 6 + }, + "illusion_1.0L_O_dqctl_vs_dqtar_r6_mode2": { + "overlap": 0.9092817930388517, + "mode": 2, + "r": 6 + }, + "illusion_1.0L_O_dqctl_vs_dqtar_r6_mode3": { + "overlap": 0.5921722575222331, + "mode": 3, + "r": 6 + }, + "illusion_1.0L_O_dqctl_vs_dqtar_r6_mode4": { + "overlap": 0.3695873593868685, + "mode": 4, + "r": 6 + }, + "illusion_1.0L_O_dqctl_vs_dqtar_r6_mode5": { + "overlap": 0.49273985058737546, + "mode": 5, + "r": 6 + }, + "illusion_1.0L_dqctl_force_fy_r8": { + "scene": "illusion_1.0L", + "diam": 1.0, + "obs": "force_fy", + "r": 8, + "m80": 2, + "N": 7, + "sigma_top3": [ + 1.0512290431026903, + 0.6038168034405464, + 0.038604687614151825 + ], + "special_mechanism": false + }, + "illusion_1.0L_dqctl_force_fx_r8": { + "scene": "illusion_1.0L", + "diam": 1.0, + "obs": "force_fx", + "r": 8, + "m80": 2, + "N": 7, + "sigma_top3": [ + 1.024212111702677, + 0.6235362523473601, + 0.1398413327047235 + ], + "special_mechanism": false + }, + "illusion_1.0L_dqctl_action_r8": { + "scene": "illusion_1.0L", + "diam": 1.0, + "obs": "action", + "r": 8, + "m80": 3, + "N": 8, + "sigma_top3": [ + 1.289052813250248, + 0.9661024499957929, + 0.7306012213889583 + ], + "special_mechanism": false + }, + "illusion_1.0L_dqtar_force_fy_r8": { + "scene": "illusion_1.0L", + "diam": 1.0, + "obs": "force_fy_tar", + "r": 8, + "m80": 2, + "N": 7, + "sigma_top3": [ + 0.9296477714715806, + 0.5431506822355127, + 0.013939617415588563 + ], + "special_mechanism": false + }, + "illusion_1.0L_O_dqctl_vs_dqtar_r8_mode1": { + "overlap": 0.7335300559150799, + "mode": 1, + "r": 8 + }, + "illusion_1.0L_O_dqctl_vs_dqtar_r8_mode2": { + "overlap": 0.7735101257517341, + "mode": 2, + "r": 8 + }, + "illusion_1.0L_O_dqctl_vs_dqtar_r8_mode3": { + "overlap": 0.5847457198896681, + "mode": 3, + "r": 8 + }, + "illusion_1.0L_O_dqctl_vs_dqtar_r8_mode4": { + "overlap": 0.361282468563919, + "mode": 4, + "r": 8 + }, + "illusion_1.0L_O_dqctl_vs_dqtar_r8_mode5": { + "overlap": 0.024744386112383842, + "mode": 5, + "r": 8 + }, + "illusion_1.0L_dqctl_force_fy_r10": { + "scene": "illusion_1.0L", + "diam": 1.0, + "obs": "force_fy", + "r": 10, + "m80": 2, + "N": 7, + "sigma_top3": [ + 1.1068219379848616, + 0.6279999575810425, + 0.03877250537017653 + ], + "special_mechanism": false + }, + "illusion_1.0L_dqctl_force_fx_r10": { + "scene": "illusion_1.0L", + "diam": 1.0, + "obs": "force_fx", + "r": 10, + "m80": 2, + "N": 7, + "sigma_top3": [ + 1.0798028524010137, + 0.6538475361620503, + 0.14841911584738715 + ], + "special_mechanism": false + }, + "illusion_1.0L_dqctl_action_r10": { + "scene": "illusion_1.0L", + "diam": 1.0, + "obs": "action", + "r": 10, + "m80": 3, + "N": 10, + "sigma_top3": [ + 1.3276794140080077, + 1.0190742997211644, + 0.7375547554838907 + ], + "special_mechanism": false + }, + "illusion_1.0L_dqtar_force_fy_r10": { + "scene": "illusion_1.0L", + "diam": 1.0, + "obs": "force_fy_tar", + "r": 10, + "m80": 2, + "N": 7, + "sigma_top3": [ + 0.9303683839417445, + 0.5438911279398368, + 0.015264317923416145 + ], + "special_mechanism": false + }, + "illusion_1.0L_O_dqctl_vs_dqtar_r10_mode1": { + "overlap": 0.6843033711672328, + "mode": 1, + "r": 10 + }, + "illusion_1.0L_O_dqctl_vs_dqtar_r10_mode2": { + "overlap": 0.7092374384087569, + "mode": 2, + "r": 10 + }, + "illusion_1.0L_O_dqctl_vs_dqtar_r10_mode3": { + "overlap": 0.5408170275775555, + "mode": 3, + "r": 10 + }, + "illusion_1.0L_O_dqctl_vs_dqtar_r10_mode4": { + "overlap": 0.2185189595791332, + "mode": 4, + "r": 10 + }, + "illusion_1.0L_O_dqctl_vs_dqtar_r10_mode5": { + "overlap": 0.19476801271238336, + "mode": 5, + "r": 10 + }, + "illusion_1.5L_dqctl_force_fy_r6": { + "scene": "illusion_1.5L", + "diam": 1.5, + "obs": "force_fy", + "r": 6, + "m80": 1, + "N": 6, + "sigma_top3": [ + 0.9147833091150019, + 0.45038325163212484, + 0.03489015873428606 + ], + "special_mechanism": true + }, + "illusion_1.5L_dqctl_force_fx_r6": { + "scene": "illusion_1.5L", + "diam": 1.5, + "obs": "force_fx", + "r": 6, + "m80": 2, + "N": 6, + "sigma_top3": [ + 0.24320738039972734, + 0.21287788693838852, + 0.042222381595628855 + ], + "special_mechanism": true + }, + "illusion_1.5L_dqctl_action_r6": { + "scene": "illusion_1.5L", + "diam": 1.5, + "obs": "action", + "r": 6, + "m80": 2, + "N": 6, + "sigma_top3": [ + 0.20100087148018667, + 0.16474318694556772, + 0.06287962977503929 + ], + "special_mechanism": true + }, + "illusion_1.5L_dqtar_force_fy_r6": { + "scene": "illusion_1.5L", + "diam": 1.5, + "obs": "force_fy_tar", + "r": 6, + "m80": 2, + "N": 6, + "sigma_top3": [ + 0.9652520561509902, + 0.5009040282539201, + 0.03619846551092434 + ], + "special_mechanism": true + }, + "illusion_1.5L_O_dqctl_vs_dqtar_r6_mode1": { + "overlap": 0.9219537578400411, + "mode": 1, + "r": 6 + }, + "illusion_1.5L_O_dqctl_vs_dqtar_r6_mode2": { + "overlap": 0.9523902874156159, + "mode": 2, + "r": 6 + }, + "illusion_1.5L_O_dqctl_vs_dqtar_r6_mode3": { + "overlap": 0.6142970258676237, + "mode": 3, + "r": 6 + }, + "illusion_1.5L_O_dqctl_vs_dqtar_r6_mode4": { + "overlap": 0.6094429047936349, + "mode": 4, + "r": 6 + }, + "illusion_1.5L_O_dqctl_vs_dqtar_r6_mode5": { + "overlap": 0.7802610781754543, + "mode": 5, + "r": 6 + }, + "illusion_1.5L_dqctl_force_fy_r8": { + "scene": "illusion_1.5L", + "diam": 1.5, + "obs": "force_fy", + "r": 8, + "m80": 1, + "N": 7, + "sigma_top3": [ + 1.0829392538529714, + 0.5377241276357321, + 0.035957125479337396 + ], + "special_mechanism": true + }, + "illusion_1.5L_dqctl_force_fx_r8": { + "scene": "illusion_1.5L", + "diam": 1.5, + "obs": "force_fx", + "r": 8, + "m80": 2, + "N": 7, + "sigma_top3": [ + 0.24532002823760304, + 0.2176027887532337, + 0.06997228412312347 + ], + "special_mechanism": true + }, + "illusion_1.5L_dqctl_action_r8": { + "scene": "illusion_1.5L", + "diam": 1.5, + "obs": "action", + "r": 8, + "m80": 2, + "N": 8, + "sigma_top3": [ + 0.24569133479372693, + 0.19734109779802844, + 0.07358222383616513 + ], + "special_mechanism": true + }, + "illusion_1.5L_dqtar_force_fy_r8": { + "scene": "illusion_1.5L", + "diam": 1.5, + "obs": "force_fy_tar", + "r": 8, + "m80": 2, + "N": 7, + "sigma_top3": [ + 0.965559410900674, + 0.5011783760115653, + 0.036374759425362196 + ], + "special_mechanism": true + }, + "illusion_1.5L_O_dqctl_vs_dqtar_r8_mode1": { + "overlap": 0.7669082530299124, + "mode": 1, + "r": 8 + }, + "illusion_1.5L_O_dqctl_vs_dqtar_r8_mode2": { + "overlap": 0.7846172591640821, + "mode": 2, + "r": 8 + }, + "illusion_1.5L_O_dqctl_vs_dqtar_r8_mode3": { + "overlap": 0.5966131594534103, + "mode": 3, + "r": 8 + }, + "illusion_1.5L_O_dqctl_vs_dqtar_r8_mode4": { + "overlap": 0.4961899748365384, + "mode": 4, + "r": 8 + }, + "illusion_1.5L_O_dqctl_vs_dqtar_r8_mode5": { + "overlap": 0.554083931172919, + "mode": 5, + "r": 8 + }, + "illusion_1.5L_dqctl_force_fy_r10": { + "scene": "illusion_1.5L", + "diam": 1.5, + "obs": "force_fy", + "r": 10, + "m80": 1, + "N": 7, + "sigma_top3": [ + 1.2267278703286486, + 0.583312734476056, + 0.03658838363884156 + ], + "special_mechanism": true + }, + "illusion_1.5L_dqctl_force_fx_r10": { + "scene": "illusion_1.5L", + "diam": 1.5, + "obs": "force_fx", + "r": 10, + "m80": 2, + "N": 7, + "sigma_top3": [ + 0.2567417793308261, + 0.23357924739128508, + 0.10637915056271505 + ], + "special_mechanism": true + }, + "illusion_1.5L_dqctl_action_r10": { + "scene": "illusion_1.5L", + "diam": 1.5, + "obs": "action", + "r": 10, + "m80": 2, + "N": 10, + "sigma_top3": [ + 0.2696699328581466, + 0.23742010933522745, + 0.08104308573268743 + ], + "special_mechanism": true + }, + "illusion_1.5L_dqtar_force_fy_r10": { + "scene": "illusion_1.5L", + "diam": 1.5, + "obs": "force_fy_tar", + "r": 10, + "m80": 2, + "N": 7, + "sigma_top3": [ + 0.9662457501034244, + 0.5015382439664361, + 0.03666891184815278 + ], + "special_mechanism": true + }, + "illusion_1.5L_O_dqctl_vs_dqtar_r10_mode1": { + "overlap": 0.6614436164339873, + "mode": 1, + "r": 10 + }, + "illusion_1.5L_O_dqctl_vs_dqtar_r10_mode2": { + "overlap": 0.7185566980291951, + "mode": 2, + "r": 10 + }, + "illusion_1.5L_O_dqctl_vs_dqtar_r10_mode3": { + "overlap": 0.5549038455928854, + "mode": 3, + "r": 10 + }, + "illusion_1.5L_O_dqctl_vs_dqtar_r10_mode4": { + "overlap": 0.42330974813153344, + "mode": 4, + "r": 10 + }, + "illusion_1.5L_O_dqctl_vs_dqtar_r10_mode5": { + "overlap": 0.4199314352386385, + "mode": 5, + "r": 10 + } +} \ No newline at end of file diff --git a/src/CCD_analysis/results/ccd/zone_metrics.json b/src/CCD_analysis/results/ccd/zone_metrics.json new file mode 100644 index 0000000..be8deb4 --- /dev/null +++ b/src/CCD_analysis/results/ccd/zone_metrics.json @@ -0,0 +1,282 @@ +{ + "illusion_0.75L_dq_blk": { + "near_body": { + "n_points": 76800, + "mean_KE": 0.0007648248574696481, + "mean_enstrophy": 2.9027347636656486e-07, + "KE_fraction": 0.0023668697103857994 + }, + "body_wake": { + "n_points": 102400, + "mean_KE": 0.07021629065275192, + "mean_enstrophy": 0.0008679562015458941, + "KE_fraction": 0.28972700238227844 + }, + "sensor_zone": { + "n_points": 35840, + "mean_KE": 0.09573789685964584, + "mean_enstrophy": 0.001991209341213107, + "KE_fraction": 0.1382620632648468 + } + }, + "illusion_0.75L_dq_ctl": { + "near_body": { + "n_points": 76800, + "mean_KE": 3.614435627241619e-05, + "mean_enstrophy": 1.743321575986556e-08, + "KE_fraction": 0.000138708230224438 + }, + "body_wake": { + "n_points": 102400, + "mean_KE": 0.031560733914375305, + "mean_enstrophy": 0.001438321196474135, + "KE_fraction": 0.16149072349071503 + }, + "sensor_zone": { + "n_points": 35840, + "mean_KE": 0.04915999248623848, + "mean_enstrophy": 0.003602436976507306, + "KE_fraction": 0.0880400612950325 + } + }, + "illusion_1.0L_dq_blk": { + "near_body": { + "n_points": 76800, + "mean_KE": 0.0007648248574696481, + "mean_enstrophy": 2.9027347636656486e-07, + "KE_fraction": 0.0023668697103857994 + }, + "body_wake": { + "n_points": 102400, + "mean_KE": 0.07021629065275192, + "mean_enstrophy": 0.0008679562015458941, + "KE_fraction": 0.28972700238227844 + }, + "sensor_zone": { + "n_points": 35840, + "mean_KE": 0.09573789685964584, + "mean_enstrophy": 0.001991209341213107, + "KE_fraction": 0.1382620632648468 + } + }, + "illusion_1.0L_dq_ctl": { + "near_body": { + "n_points": 76800, + "mean_KE": 2.7065932954428717e-05, + "mean_enstrophy": 1.3172467561162193e-08, + "KE_fraction": 0.000290345138637349 + }, + "body_wake": { + "n_points": 102400, + "mean_KE": 0.0158767718821764, + "mean_enstrophy": 0.0004291802179068327, + "KE_fraction": 0.2270871102809906 + }, + "sensor_zone": { + "n_points": 35840, + "mean_KE": 0.015243785455822945, + "mean_enstrophy": 0.0009271366288885474, + "KE_fraction": 0.07631170749664307 + } + }, + "illusion_1.5L_dq_blk": { + "near_body": { + "n_points": 76800, + "mean_KE": 0.0007648248574696481, + "mean_enstrophy": 2.9027347636656486e-07, + "KE_fraction": 0.0023668697103857994 + }, + "body_wake": { + "n_points": 102400, + "mean_KE": 0.07021629065275192, + "mean_enstrophy": 0.0008679562015458941, + "KE_fraction": 0.28972700238227844 + }, + "sensor_zone": { + "n_points": 35840, + "mean_KE": 0.09573789685964584, + "mean_enstrophy": 0.001991209341213107, + "KE_fraction": 0.1382620632648468 + } + }, + "illusion_1.5L_dq_ctl": { + "near_body": { + "n_points": 76800, + "mean_KE": 2.4420158297289163e-05, + "mean_enstrophy": 1.2525031012344812e-09, + "KE_fraction": 8.383671229239553e-05 + }, + "body_wake": { + "n_points": 102400, + "mean_KE": 0.04845782741904259, + "mean_enstrophy": 0.00021500905859284103, + "KE_fraction": 0.22181373834609985 + }, + "sensor_zone": { + "n_points": 35840, + "mean_KE": 0.11757005751132965, + "mean_enstrophy": 0.0005185439949855208, + "KE_fraction": 0.18836025893688202 + } + }, + "steady_cloak_dq_blk": { + "near_body": { + "n_points": 76800, + "mean_KE": 0.0007648248574696481, + "mean_enstrophy": 2.9027347636656486e-07, + "KE_fraction": 0.0023668697103857994 + }, + "body_wake": { + "n_points": 102400, + "mean_KE": 0.07021629065275192, + "mean_enstrophy": 0.0008679562015458941, + "KE_fraction": 0.28972700238227844 + }, + "sensor_zone": { + "n_points": 35840, + "mean_KE": 0.09573789685964584, + "mean_enstrophy": 0.001991209341213107, + "KE_fraction": 0.1382620632648468 + } + }, + "steady_cloak_dq_ctl": { + "near_body": { + "n_points": 76800, + "mean_KE": 6.172616849653423e-05, + "mean_enstrophy": 3.953555349767157e-08, + "KE_fraction": 0.00015435306704603136 + }, + "body_wake": { + "n_points": 102400, + "mean_KE": 0.13577842712402344, + "mean_enstrophy": 0.008918941020965576, + "KE_fraction": 0.45270517468452454 + }, + "sensor_zone": { + "n_points": 35840, + "mean_KE": 0.3214779794216156, + "mean_enstrophy": 0.02501676417887211, + "KE_fraction": 0.375149130821228 + } + }, + "karman_re100_dq_blk": { + "near_body": { + "n_points": 71680, + "mean_KE": 0.14623497426509857, + "mean_enstrophy": 0.0006234294269233942, + "KE_fraction": 0.20486503839492798 + }, + "body_wake": { + "n_points": 66560, + "mean_KE": 0.10329263657331467, + "mean_enstrophy": 0.0001615467481315136, + "KE_fraction": 0.13436967134475708 + }, + "sensor_zone": { + "n_points": 35840, + "mean_KE": 0.0839567631483078, + "mean_enstrophy": 0.00010710477363318205, + "KE_fraction": 0.05880879983305931 + } + }, + "karman_re100_dq_ctl": { + "near_body": { + "n_points": 71680, + "mean_KE": 0.20531150698661804, + "mean_enstrophy": 0.008244173601269722, + "KE_fraction": 0.2548401653766632 + }, + "body_wake": { + "n_points": 66560, + "mean_KE": 0.12807133793830872, + "mean_enstrophy": 0.00012567009252961725, + "KE_fraction": 0.147612065076828 + }, + "sensor_zone": { + "n_points": 35840, + "mean_KE": 0.12139707058668137, + "mean_enstrophy": 8.339789928868413e-05, + "KE_fraction": 0.07534124702215195 + } + }, + "vortex_lamb_dq_blk": { + "near_body": { + "n_points": 71680, + "mean_KE": 0.13352914154529572, + "mean_enstrophy": 0.0010146809509024024, + "KE_fraction": 0.46505114436149597 + }, + "body_wake": { + "n_points": 66560, + "mean_KE": 0.11699999123811722, + "mean_enstrophy": 0.0002210606326116249, + "KE_fraction": 0.37837791442871094 + }, + "sensor_zone": { + "n_points": 35840, + "mean_KE": 0.09222870320081711, + "mean_enstrophy": 0.00014765505329705775, + "KE_fraction": 0.16060562431812286 + } + }, + "vortex_lamb_dq_ctl": { + "near_body": { + "n_points": 71680, + "mean_KE": 0.18387039005756378, + "mean_enstrophy": 0.008811434730887413, + "KE_fraction": 0.48393887281417847 + }, + "body_wake": { + "n_points": 66560, + "mean_KE": 0.13139627873897552, + "mean_enstrophy": 0.0002448623126838356, + "KE_fraction": 0.32112717628479004 + }, + "sensor_zone": { + "n_points": 35840, + "mean_KE": 0.12105172127485275, + "mean_enstrophy": 0.00019949178386013955, + "KE_fraction": 0.15930141508579254 + } + }, + "vortex_taylor_dq_blk": { + "near_body": { + "n_points": 71680, + "mean_KE": 0.1294081211090088, + "mean_enstrophy": 0.0011693575652316213, + "KE_fraction": 0.44358906149864197 + }, + "body_wake": { + "n_points": 66560, + "mean_KE": 0.10131462663412094, + "mean_enstrophy": 0.0001417396852048114, + "KE_fraction": 0.3224829137325287 + }, + "sensor_zone": { + "n_points": 35840, + "mean_KE": 0.07597015053033829, + "mean_enstrophy": 4.9815782404039055e-05, + "KE_fraction": 0.1302063763141632 + } + }, + "vortex_taylor_dq_ctl": { + "near_body": { + "n_points": 71680, + "mean_KE": 0.16766612231731415, + "mean_enstrophy": 0.008833244442939758, + "KE_fraction": 0.48838308453559875 + }, + "body_wake": { + "n_points": 66560, + "mean_KE": 0.08698907494544983, + "mean_enstrophy": 0.000124395388411358, + "KE_fraction": 0.23528558015823364 + }, + "sensor_zone": { + "n_points": 35840, + "mean_KE": 0.06907761096954346, + "mean_enstrophy": 3.919627488357946e-05, + "KE_fraction": 0.10060571134090424 + } + } +} \ No newline at end of file diff --git a/src/CCD_analysis/results/figures/01_panorama_all_scenes.png b/src/CCD_analysis/results/figures/01_panorama_all_scenes.png new file mode 120000 index 0000000..786fb61 --- /dev/null +++ b/src/CCD_analysis/results/figures/01_panorama_all_scenes.png @@ -0,0 +1 @@ +../../data/figures/corr_comparison_all_scenes.png \ No newline at end of file diff --git a/src/CCD_analysis/results/figures/02_cloak_comparison.png b/src/CCD_analysis/results/figures/02_cloak_comparison.png new file mode 120000 index 0000000..3404cd5 --- /dev/null +++ b/src/CCD_analysis/results/figures/02_cloak_comparison.png @@ -0,0 +1 @@ +../../data/figures/corr_cloak_comparison_dqctl.png \ No newline at end of file diff --git a/src/CCD_analysis/results/figures/03_illusion_comparison.png b/src/CCD_analysis/results/figures/03_illusion_comparison.png new file mode 120000 index 0000000..04241f2 --- /dev/null +++ b/src/CCD_analysis/results/figures/03_illusion_comparison.png @@ -0,0 +1 @@ +../../data/figures/corr_illusion_comparison_dqctl.png \ No newline at end of file diff --git a/src/CCD_analysis/results/figures/04_steady_cloak_cancel.png b/src/CCD_analysis/results/figures/04_steady_cloak_cancel.png new file mode 120000 index 0000000..efda685 --- /dev/null +++ b/src/CCD_analysis/results/figures/04_steady_cloak_cancel.png @@ -0,0 +1 @@ +../../data/figures/steady_cloak_cancel_test.png \ No newline at end of file diff --git a/src/CCD_analysis/results/figures/05_illusion_075L_ctl_vs_tar.png b/src/CCD_analysis/results/figures/05_illusion_075L_ctl_vs_tar.png new file mode 120000 index 0000000..6e3c646 --- /dev/null +++ b/src/CCD_analysis/results/figures/05_illusion_075L_ctl_vs_tar.png @@ -0,0 +1 @@ +../../data/figures/corr_illusion_0.75L_ctl_vs_tar.png \ No newline at end of file diff --git a/src/CCD_analysis/results/figures/06_illusion_10L_ctl_vs_tar.png b/src/CCD_analysis/results/figures/06_illusion_10L_ctl_vs_tar.png new file mode 120000 index 0000000..5510d44 --- /dev/null +++ b/src/CCD_analysis/results/figures/06_illusion_10L_ctl_vs_tar.png @@ -0,0 +1 @@ +../../data/figures/corr_illusion_1.0L_ctl_vs_tar.png \ No newline at end of file diff --git a/src/CCD_analysis/results/figures/07_illusion_15L_ctl_vs_tar.png b/src/CCD_analysis/results/figures/07_illusion_15L_ctl_vs_tar.png new file mode 120000 index 0000000..91e6e11 --- /dev/null +++ b/src/CCD_analysis/results/figures/07_illusion_15L_ctl_vs_tar.png @@ -0,0 +1 @@ +../../data/figures/corr_illusion_1.5L_ctl_vs_tar.png \ No newline at end of file diff --git a/src/CCD_analysis/results/figures/08_karman_ctl_vs_tar.png b/src/CCD_analysis/results/figures/08_karman_ctl_vs_tar.png new file mode 120000 index 0000000..eaed7d2 --- /dev/null +++ b/src/CCD_analysis/results/figures/08_karman_ctl_vs_tar.png @@ -0,0 +1 @@ +../../data/figures/corr_karman_re100_ctl_vs_tar.png \ No newline at end of file diff --git a/src/CCD_analysis/results/figures/09_vortex_lamb_ctl_vs_tar.png b/src/CCD_analysis/results/figures/09_vortex_lamb_ctl_vs_tar.png new file mode 120000 index 0000000..11505ca --- /dev/null +++ b/src/CCD_analysis/results/figures/09_vortex_lamb_ctl_vs_tar.png @@ -0,0 +1 @@ +../../data/figures/corr_vortex_lamb_ctl_vs_tar.png \ No newline at end of file diff --git a/src/CCD_analysis/results/figures/10_vortex_taylor_ctl_vs_tar.png b/src/CCD_analysis/results/figures/10_vortex_taylor_ctl_vs_tar.png new file mode 120000 index 0000000..4f5f9ad --- /dev/null +++ b/src/CCD_analysis/results/figures/10_vortex_taylor_ctl_vs_tar.png @@ -0,0 +1 @@ +../../data/figures/corr_vortex_taylor_ctl_vs_tar.png \ No newline at end of file diff --git a/src/CCD_analysis/results/figures/11_vortex_lamb_diagnosis.png b/src/CCD_analysis/results/figures/11_vortex_lamb_diagnosis.png new file mode 120000 index 0000000..81d2a5b --- /dev/null +++ b/src/CCD_analysis/results/figures/11_vortex_lamb_diagnosis.png @@ -0,0 +1 @@ +../../data/figures/vortex_lamb_diagnosis.png \ No newline at end of file diff --git a/src/CCD_analysis/results/figures/12_vortex_taylor_diagnosis.png b/src/CCD_analysis/results/figures/12_vortex_taylor_diagnosis.png new file mode 120000 index 0000000..1f8ad21 --- /dev/null +++ b/src/CCD_analysis/results/figures/12_vortex_taylor_diagnosis.png @@ -0,0 +1 @@ +../../data/figures/vortex_taylor_diagnosis.png \ No newline at end of file diff --git a/src/CCD_analysis/results/figures/13_vortex_lamb_vorticity.png b/src/CCD_analysis/results/figures/13_vortex_lamb_vorticity.png new file mode 120000 index 0000000..c1dad85 --- /dev/null +++ b/src/CCD_analysis/results/figures/13_vortex_lamb_vorticity.png @@ -0,0 +1 @@ +../../data/figures/vortex_lamb_vorticity.png \ No newline at end of file diff --git a/src/CCD_analysis/results/figures/14_vortex_taylor_vorticity.png b/src/CCD_analysis/results/figures/14_vortex_taylor_vorticity.png new file mode 120000 index 0000000..9720ad2 --- /dev/null +++ b/src/CCD_analysis/results/figures/14_vortex_taylor_vorticity.png @@ -0,0 +1 @@ +../../data/figures/vortex_taylor_vorticity.png \ No newline at end of file diff --git a/src/CCD_analysis/results/figures/15_vortex_lamb_target_vorticity.png b/src/CCD_analysis/results/figures/15_vortex_lamb_target_vorticity.png new file mode 120000 index 0000000..f018151 --- /dev/null +++ b/src/CCD_analysis/results/figures/15_vortex_lamb_target_vorticity.png @@ -0,0 +1 @@ +../../data/figures/vortex_lamb_target_vorticity.png \ No newline at end of file diff --git a/src/CCD_analysis/results/figures/16_vortex_taylor_target_vorticity.png b/src/CCD_analysis/results/figures/16_vortex_taylor_target_vorticity.png new file mode 120000 index 0000000..fd9c39e --- /dev/null +++ b/src/CCD_analysis/results/figures/16_vortex_taylor_target_vorticity.png @@ -0,0 +1 @@ +../../data/figures/vortex_taylor_target_vorticity.png \ No newline at end of file