84 lines
4.7 KiB
Markdown
84 lines
4.7 KiB
Markdown
# 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](research/moving_boundary_force_spikes.md).
|
|
|
|
## 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.
|