Add comprehensive project report (292 lines, 7 figure references) and handover notes for the next agent. Co-authored-by: Cursor <cursoragent@cursor.com>
6.1 KiB
OID Analysis Handover Notes
For the incoming agent
Quick Overview
You are taking over the OID analysis line of the DynamisLab fluidic pinball project. This is one of three parallel analysis pipelines:
- SR/SINDy:
obs -> actwhite-box control law extraction (most mature) - CCD:
structure -> force/signaturephase-aligned correlation decomposition (correction-field analysis in progress) - OID:
Delta-q_ctl -> structure -> force/signaturefull-time-series observable-related decomposition (this line)
OID has been fully implemented as an independent project under src/OID_analysis/. All 5 scenes (steady cloak, Karman cloak, illusion 0.75/1.0/1.5L) have been analyzed end-to-end through Phases 1-7.
Start Here (in order)
-
docs/OID_analysis_results.md-- Full project report with 7 figures. Read this first. It explains OID concepts, all results, and all caveats. -
src/OID_analysis/README.md-- Engineering entry point. How to run, directory structure, common pitfalls. -
src/OID_analysis/OID_knowledge.md-- Confirmed facts, critical rules (15+ rules), current results, bug history. -
src/OID_analysis/OID_notes.md-- Task tracking, open items. -
docs/ccd_correction_field_report.md-- CCD report (sibling project, important cross-reference) -
docs/SR_analysis_results.md-- SR report (control law white-box results)
The Key Concept
OID (Observable-Inferred Decomposition) answers: "Which flow structures most affect a chosen observable (force, sensor error)?"
It does this by:
- Starting with a POD basis (unified coordinate system, but ranked by energy not task relevance)
- Computing cross-covariance between POD coefficients and the observable
- SVD to find directions in POD space that best correlate with the observable
OID operates on correction fields Delta-q_ctl = q_ctl - q_blk (controlled field minus baseline zero-rotation field), NOT on raw controlled fields.
The Flagship Result
Force-relevant and signature-relevant correction structures systematically separate across control tasks:
steady_cloak (+0.763) --> Karman (-0.034) --> illusion 0.75L (-0.082) --> illusion 1.0L (-0.495) --> illusion 1.5L (-0.932)
where the number is cosine similarity between force-OID mode 1 and signature-OID mode 1. The monotonic trend from same-channel to strongly opposite is the project's most compelling new physical finding.
OID also consistently beats POD for predicting force and signature in all scenes.
Key Files
| File | Purpose |
|---|---|
src/OID_analysis/configs.py |
Scene definitions (12 scenes) |
src/OID_analysis/utils/analysis.py |
POD, OID, PCD, statistics (CPU, no GPU) |
src/OID_analysis/utils/cfd_interface.py |
Re-exports from CCD (GPU) |
src/OID_analysis/analysis/phase3_force_oid.py |
Force-OID implementation |
src/OID_analysis/analysis/phase4a_signature_oid.py |
Signature-OID implementation |
src/OID_analysis/analysis/phase4b_signature_pcd.py |
PCD whitened cross-correlation |
src/OID_analysis/analysis/robustness_analysis.py |
Rank/tau_c/window robustness |
src/OID_analysis/analysis/make_figures.py |
Generate all 7 figures |
src/OID_analysis/scripts/collect_illusion_qblk.py |
Important: illusion-position q_blk (separate from cloak) |
Environments
# CFD data collection (GPU required, 2 GPUs available: 1 and 3)
conda run -n pycuda_3_10 python src/OID_analysis/scripts/...
# Analysis (CPU only)
conda run -n sr_env python3 src/OID_analysis/analysis/...
Open Items (Priority Order)
P0 - Should fix next
- Illusion 0.75L rank instability (std=0.26 across r=6..16). Likely needs longer time series. Current 100 snapshots for POD may be insufficient.
- Karman future-signal R2~0 -- currently near zero. Consider reformulating the signature observable as phase-error instead of direct sensor error.
P1 - Important but not blocking
- OID mode-to-field visualization -- OID spatial modes are computed but not plotted. Would show whether force-sig separation maps to different physical regions (near-body vs downstream).
- causal-PCD -- Need a separate action-PCD to get action-related z_act coordinates for the
obs -> z -> actchain.
P2 - Enhancement
- Cross-validation across multiple independent rollouts
- Vortex scenes extension (data collected in SR but not in OID)
- CCD cross-validation of the force-sig separation trend using phase-aligned data
Data to Keep / Not Commit
Commit these (small, reproducible):
- All
.pyfiles insrc/OID_analysis/ - All
.mdfiles insrc/OID_analysis/ docs/OID_analysis_results.md- JSON configs in
data/configs/
DO NOT commit (large, regeneratable):
- All
.npz,.npyindata/ - All
.pngindata/derived/figures/ - Check
.gitignorefor proper exclusion
Context on SR and CCD
-
SR/SINDy is the most mature line. Best result: Karman cross-Re unified backbone achieves 94.4% of PPO closed-loop performance. New phase-state features for illusion achieve 100.2% of PPO with zero action memory. The SR agent wrote a detailed README at
src/SR_analysis/README.md. -
CCD is in correction-field transition. Round 5 (raw-field baseline) is frozen. Round 6 (correction-field) Phase 1-2 complete. The key CCD finding that cross-validates OID: zone-restricted analysis shows force-sig structures are almost orthogonal in the sensor zone at zero lag (O=0.01) but converge after convective delay (O=0.72-0.92).
-
The correction-field framework (Delta-q_ctl) is the shared analysis object across all three lines. All analyses should use it.
Final Notes
- The OID analysis code is self-contained. It re-uses
CCD_analysis.utils.cfd_interfacefor GPU operations but has its own analysis utilities and configs. - The
data_dir_for_scene()function inconfigs.pyis the single source of truth for all data paths. Never hardcode paths. - The most likely next useful step is: (a) fix the 0.75L rank instability, (b) produce the mode-to-field plots, (c) feed OID coordinates into SR's SINDy framework for the
obs -> z -> acttest.