Files
CelerisLab/docs/karman_viv.md
T

4.7 KiB

Re_D = 50 Kármán inflow: paired pinball VIV / frozen PPO demo

Development experiment, frozen before results, 2026-10-31. No new production method, structural damping, force filter, policy training, or main merge. Force-spike research index.

Plant and structure

Base e9213dd2cc9cfed0e8487a3cf4ebdd94d23dc64d; fixed-policy contract from 580397eaf83c85b233495791ecc51662a374a247. Reuse steady_pinball config, coordinate map and exact held-force oscillator. D40, U=.005, nu=.004, MRT, 2559 x 1022, FP32 unshifted double buffers. Regularized parabolic inlet, NEQ extrapolation outlet, bounce-back y walls (.5,1020.5); no BC changes. D20 coordinates map x'=2x, y'=.5+2(y-.5). Upstream cylinder (400,510.5), radius40, is static. Pinballs radius20 at (1200,510.5), (1252,540.5), (1252,480.5) share only transverse translation. Lab probes radius10 at (1600,590.5), (1600,510.5), (1600,430.5) stay fixed.

One shared Translation, travel ±D, max wall speed .025, existing clearance and per-step move guards unchanged. M2: m*=2 based on all three disks, M=7539.8223686, fn=.000025, K=.000186037660, C=zeta=0; release y=v=0. Each native step uses previous-step sum(CME_y+Wen_y), then exact oscillator update with held force. Wall speed is interval displacement y[n+1]-y[n]. Cover/uncover impulses are logged, never added to the selected RHS. This estimator remains provisional; existing spike/convergence limitations remain.

Same release state, two clocks

A static precursor retains the accepted Kármán sequence: upstream+probes, 2,048,000-step warmup, 150 x 3,200-step no-pinball target samples, add static pinballs/sync, second 2,048,000-step warmup. Save both DDF buffers, flags, clock and last instantaneous force. Construct each moving arm fresh at the same zero-offset geometry, check flags, copy both buffers and clock, verify exact copy hashes. This one-time research initialization is not a moving checkpoint or FSI rollback. Initial policy observation and spin are zero.

Frozen model SHA256 148240c1dcb8b11d8e5a0a9e991f6874c4e799c9744707bf0fb32a8efeb0468d; normalizer 534fda818c030a56960e95d0f3ac1e350d887d03db7f80f1d6453195a502b7f0. Only these explicit supplied assets are accepted. Policy is CPU deterministic. Native policy signals: packed CME (same read_force path), lab area-mean velocity, each averaged over SI3200. Convert to original D20 training units: forces x2, area-mean velocity x2 x78, then frozen force-first normalization and clipping. Fine-grid probe pixel footprint is not exactly identical; using the original78 cells avoids a hidden area-count normalization change. The moving plant, motion-induced force, lab-frame wake displacement and D40 resolution remain out of training distribution. No transfer guarantee.

A=(8a+(0,-4,4))*.005; EMA alpha=.9^(1/4), reset0 each SI; omega=+A_eff/20. This preserves historical physical actuator timescale under dt/4. The zero arm substitutes a=(0,.5,-.5), so all spins are identically zero. Policy interval averaging does not average the native structural RHS.

Bound, output, and interpretation

One serial pair, zero then controlled: 400SI=1,280,000 native steps=160D/U =32Tn per arm. No retuning/automatic extension. Stop on nonfinite state, no_donor, travel/speed/move rejection, or four-hour whole-pair wall cap. A failure stops the remaining run; retain valid rows and completed intervals. NaN trailing rows are unexecuted, not zero-valued observations.

Report first/last80D/U windows, mean offset separately from centered RMS, half-range, peak, frequency and drift; native versus SI-averaged force, CME/Wen/node/crossing terms and action/observation clipping. Last80D/U is the principal descriptive window, not an asserted settled window. If zero arm half-range <.1D there, classify weak response and do not claim vibration suppression. Report continuous ratios regardless. Cloaking uses retained canonical last30 lagged sensor DTW against this precursor's no-pinball target, with fixed-body D20 results contextual only. These are development criteria, not paper uncertainty, grid convergence, or proof of validated FSI.

Save native18-column rows (~184MB/arm), small SI signals, target, config, release two buffers (~188MiB), hashes and terminal reports outside checkout. No per-step field output. Expected new data <650MB, check actual resources.

CUDA_VISIBLE_DEVICES=0 PYTHONPATH=src python research/karman_viv/run.py \
  --model /tmp/celeris-karman-viv-assets/model.zip \
  --norm /tmp/celeris-karman-viv-assets/norm.json --out /tmp/NEW_OUTPUT

First --smoke: same D40 geometry, warmup32/target2x8/warmup32, 4x8 response steps each arm; strictly plumbing only. CPU source checks and independent exact-tip review precede GPU. Preserve original DynamisLab files.