151 lines
9.4 KiB
Markdown
151 lines
9.4 KiB
Markdown
# Uncontrolled steady pinball: development protocol
|
|
|
|
Frozen before results: 1280 x 512 D2Q9/FP32/MRT, unshifted double buffer;
|
|
rho=1, mean U=.01, nu=.004, D=20, Re_D=50. Centres are (600,255.5),
|
|
(626,270.5), (626,240.5), radius10. No upstream cylinder. Passive probes stay
|
|
at (800,295.5), (800,255.5), (800,215.5), radius5. Every omega is zero.
|
|
Parabolic inlet, regularized NEQ damping1; y bounce-back planes .5/510.5;
|
|
NEQ-extrapolated outlet with backflow clamp (the configured blend is inactive in
|
|
this MRT route). Initial fluid is
|
|
parabolic equilibrium. Fixed warmup is 4 NX/U=512000 steps.
|
|
|
|
Geometry and fluid parameters follow DynamisLab 609116ec26f19766f5e9ce2b0df427d4e24faae8,
|
|
`legacy_test/core/legacy_env_builder.py:build_steady_cloak` and the retained
|
|
`config_lbm_pinball_legacy_re50d_u001.json`. This is a modern Celeris reconstruction,
|
|
not a bitwise Legacy reproduction: Legacy uses shifted incompressible MRT, a
|
|
different curved interpolation and prescribed parabolic outlet velocity. Current
|
|
Celeris uses standard MRT, two-branch BFL and extrapolated outlet velocity.
|
|
The fixed-hold control uses the SAME modern settings as the free case.
|
|
|
|
## Shared translation and ownership
|
|
|
|
`Translation(..., shared=True)` is explicitly transverse only. Reusing one
|
|
envelope INSTANCE declares common motion; equal but separate envelopes are not
|
|
linked. Before initialization and every positive Simulation.run, group members
|
|
must have identical applied offsets, effective target offsets and interval wall
|
|
velocities. Stage each member with set_body, then call run(1) once. An incomplete
|
|
or inconsistent target group is rejected before device uploads and can be fixed.
|
|
Existing pending-target direct-stepper restrictions remain.
|
|
|
|
Only members of that group may have overlapping whole swept bands. Their fixed
|
|
surface clearance must exceed4 lattice cells. This conservative bound exceeds
|
|
2 sqrt(2)+MAX_STEP = 3.329: M1 changed cells lie in old/new disks and read one-link
|
|
neighbors; M2 reads at most two links outside its new disk. Old/new relative
|
|
displacement is at most .5. Thus reads cannot reach another member's old/new
|
|
solid or M1 write region. M1 writes are disjoint. M2 writes opposite population
|
|
slots inside its own new disk, also disjoint. Separate first_slot ranges still
|
|
allocate each body's logical band/debug storage. Shared band cells alone do not
|
|
write anything: M1 returns unless membership changes; M2 returns unless a cut
|
|
link exists. Unrelated moving/static body and probe overlaps still reject.
|
|
|
|
This is a sufficient restricted-group condition, not support for near-contact
|
|
or independent motion. The r4, distance8.3, dy=.5 counterexample remains rejected.
|
|
CPU tests enumerate candidate donors/write footprints over subcell phases;
|
|
GPU tests compare fixed vs hold and member-order permutations through crossings
|
|
at wall speed .01 over the full +/-D envelope (8000 steps). The initial .5-speed
|
|
fixture failed with NaNs; a single-circle control also failed at step69. That
|
|
Mach~.866 fixture was unsuitable as a low-Mach numerical gate. Its failure is
|
|
retained; the geometric MAX_STEP proof is unchanged, not a stability guarantee.
|
|
CUDA kernels and arithmetic are unchanged.
|
|
|
|
## New structural parameters (not inherited from the paper)
|
|
|
|
One transverse state y,v; total assembly M=10 rho (3 pi D^2/4)=9424.77796,
|
|
fn=U/(5D)=.0001, Tn=10000, zeta=.01, K=M(2 pi fn)^2,
|
|
C=2 zeta M(2 pi fn). Initial y=v=0, no seed or later kick. Force is the sum
|
|
of the three instantaneous CME_y+Wen_y values from the previous fluid step;
|
|
node impulses are logged separately and never added. The damped oscillator is
|
|
integrated exactly for that piecewise-constant force over dt=1. Wall velocity
|
|
is y[n+1]-y[n], not the endpoint oscillator velocity. No filtering or retuning.
|
|
|
|
Observe600000 steps=60Tn=300 D/U after warmup, in each of free and fixed-hold
|
|
cases. Final20Tn is a descriptive comparison window; ten-Tn blocks expose drift.
|
|
No settled/periodic claim follows merely from reaching the cap. Stop on |y|>D,
|
|
nonfinite values, no_donor, rejected displacement or speed>.05. Report any quiet
|
|
response honestly. No automatic extension. --smoke uses32 warmup+32 steps only.
|
|
|
|
Native-step rows retain y,v, each body's CME/Wen/node terms and refill counters;
|
|
each600000x15 FP64 file is72MB. No full-field output or policy training. Compile
|
|
and run on one device serially, keep original outputs and dirty trees untouched.
|
|
This stage makes no claim of physical grid convergence or vibration suppression.
|
|
|
|
Run from checkout with PYTHONPATH=src and the existing Python environment:
|
|
`python research/steady_pinball/run.py --smoke --out <new-external-directory>`
|
|
then separately `--out <new-free-directory>` and `--fixed --out <new-fixed-directory>`.
|
|
|
|
## Zero-damping development follow-up (predeclared 2026-10-31)
|
|
|
|
The original d0bcefa run and its zeta=.01 results remain historical evidence.
|
|
The current runner exposes three fixed `--case` choices, all with C=0 as requested:
|
|
|
|
| Case | M / (rho 3 pi D^2/4) | fn | M | K | Purpose |
|
|
|---|---:|---:|---:|---:|---|
|
|
| Z0 | 10 | .0001 | 9424.77796 | .00372075320 | Remove damping only |
|
|
| M2 | 2 | .0001 | 1884.95559 | .000744150640 | Reduce mass and stiffness together at fixed fn |
|
|
| R2 | 2 | .00006 | 1884.95559 | .000267894231 | Change stiffness only relative to M2 |
|
|
|
|
R2 deliberately places fn at the retained fixed-body lift peak, f=.00006
|
|
(St=.12 on mean U). This is an informed development choice, not independent
|
|
physical validation or a promise of lock-in. All geometries, fluid settings,
|
|
512000-step fixed warmup, y0=v0=0, force time level and unfiltered RHS are unchanged.
|
|
No run result may select a replacement parameter or an automatic extension.
|
|
|
|
Each case has a 600000-step cap, the same 300 D/U physical duration. This equals
|
|
60 natural periods for Z0/M2 and 36 for R2. Compare the common final200000 native
|
|
steps, and six100000-step blocks, retaining actual natural/response frequencies
|
|
and ongoing drift. Do not call those blocks ten R2 periods. No settled-VIV claim
|
|
follows from a larger displacement. Report all three outcomes, including quiet
|
|
responses or stopped cases, alongside the existing fixed and damped-free records.
|
|
|
|
Unchanged stops: |y|>D, invalid move/speed, nonfinite values or no_donor. A 1800s
|
|
per-case wall cap and GPU headroom check bound resource use. Preserve partial rows;
|
|
do not add damping, clip trajectories, filter forces, or relax any stop. Each
|
|
case adds72MB of scalar history, no full fields. The separate Legacy/modern
|
|
baseline diagnosis does not change this FSI protocol.
|
|
|
|
## Matched D40 resolution comparison (predeclared 2026-10-31)
|
|
|
|
The first finer case is M2, with exactly the same mass ratio2, reduced velocity5,
|
|
zero structural damping, initial rest state and physical geometry as the retained
|
|
D20 M2. Targeting a development response of0.5--1D does not imply this case will
|
|
reach it. Do not change the structure within this comparison or discard a smaller
|
|
response. D60 is a supported scaling choice, not an automatically scheduled run.
|
|
|
|
For s=D/20 use dx'=dx/s, dt'=dt/s^2, U'=.01/s, nu'=.004, rho'=1,
|
|
fn'=fn/s^2, M'=s^2 M and K'=K/s^2. The same physical force per unit span
|
|
has F'_lat=F_lat/s. For D40 this gives U=.005, fn=.000025,
|
|
M=7539.82237, K=.000186037660, Re_D=50, and Tn=40000 steps.
|
|
The y walls are at .5 and ny-1.5, while x inlet/outlet source nodes are at0
|
|
and nx-1. Therefore map x'=s*x and y'=.5+s*(y-.5), with
|
|
nx'=s*(1280-1)+1, ny'=s*(512-2)+2. D40 uses2559x1022 and centres
|
|
(1200,510.5),(1252,540.5),(1252,480.5); every radius, probe and envelope scales
|
|
with D. The parabolic profile retains the same normalized wall coordinate.
|
|
This preserves the existing ghost-source boundary convention, without asserting
|
|
that it is an exact continuum open-boundary location.
|
|
|
|
Warmup=2048000 and response=2400000 native steps at D40: the SAME256 and300
|
|
D/U durations as D20, including60 natural periods after release. Compare the
|
|
six50-D/U blocks and the common final100-D/U window. Report max absolute y/D,
|
|
half-range, RMS, frequency and drift; peak-to-peak is not amplitude. No settling
|
|
claim follows from completion. Keep raw individual CME/Wen/node terms and all
|
|
crossing/fallback counters. Normalize net force by .5*rho*U^2*D in each case.
|
|
Report native crossing/non-crossing force increments separately, plus D40
|
|
four-step block means aligned with D20 intervals (diagnostic only, never replace
|
|
the raw spikes). Report final-window high-frequency variance above f*D/U=1,
|
|
using demeaned FFT Parseval weights, with the same physical cutoff for both cases.
|
|
Different motion histories confound spike-size comparisons; this is simultaneous
|
|
space/time/Mach refinement, not proof of a unique coarse-grid cause.
|
|
|
|
Only one full D40 M2 is initially scheduled, after CPU checks and a32+32-step
|
|
smoke. Stop on the unchanged geometry/speed/nonfinite/no_donor checks or a7200s
|
|
whole-case wall cap; save completed rows and status. The velocity cap scales to
|
|
.025 so its physical bound is unchanged. No force filtering, trajectory clipping,
|
|
automatic parameter search or extension. Scalar history is288MB; no full fields
|
|
or DDF snapshots are written. Two FP32 population buffers require about188MiB,
|
|
before flags, moving tables and context overhead; measure actual peak usage in
|
|
the smoke and full run. Keep all D20 outcomes. No production source changes.
|
|
|
|
Commands (one GPU and serial compilation, existing environment):
|
|
`python research/steady_pinball/run.py --case M2 --D 40 --smoke --out <new-smoke-dir>`
|
|
then `python research/steady_pinball/run.py --case M2 --D 40 --wall-seconds 7200 --out <new-full-dir>`.
|