# Skid vibration isolation

A Python sizing study for the vertical and pitch response of a small rotating-equipment skid. It compares equivalent support stiffness and damping, checks the selected configuration at uncertainty corners, and produces data files and a self-contained HTML report.

The reference case uses a 120 kg rigid skid, two asymmetric support groups, eccentric rotating unbalance, and a common foundation pulse. Each support group represents two mounts with equal left/right load sharing. The input properties are assumed design values, not vendor test data.

## Run

Python 3.11 or newer is required. The recorded run used Python 3.12, NumPy 2.3.5, SciPy 1.17.0, and Matplotlib 3.10.8.

```sh
python -m pip install -r requirements.txt
python run.py
python complete_validation.py
python -m unittest -v test_project.py
```

Open `report.html` after the run. The shipped report and data can be read without installing the Python dependencies. The full uncertainty run integrates 64 transient scenarios and can take several minutes, depending on the computer.

To evaluate another input set without replacing the shipped report:

```sh
python run.py --inputs inputs.json --output alternate-run
python complete_validation.py --output alternate-run
```

The second command rebuilds missing or source-stale study outputs, then evaluates generated source and CSV provenance and the acceptance limits in the input snapshot. A modified recorded CSV with unchanged source fails the audit rather than being silently replaced. The supplied reference study has 32 uncertainty corners. A different grid is evaluated against its own declared Cartesian product.

## Files

- `model.py`: equations of motion, frequency response, stiffness derivative, spin schedule, and transient integration.
- `study.py`: candidate grid, parameter corners, limits and conservative transient envelopes.
- `validation.py`: analytical limits, frequency/time agreement, derivative, energy and refinement checks.
- `test_project.py`: invalid-input and analytical regression tests.
- `inputs.json`: reference geometry, mass properties, force and foundation inputs, uncertainty and limits.
- `outputs/candidate-grid.csv`: every tested grid candidate, with rejection reasons.
- `outputs/uncertainty-corners.csv`: selected-design results at each parameter corner.
- `outputs/frequency-response.csv`: selected and rejected design responses from 1 to 45 Hz.
- `outputs/runup.csv` and `outputs/foundation-pulse.csv`: nominal transient states and energy records.
- `outputs/summary.json`: selected properties and recorded envelopes.
- `verification.json` and `completion.json`: checks, acceptance outcomes and source provenance.
- `outputs/explorer.json`: exact sampled frequency data for the portfolio chart.

The transient CSV records signed dynamic support reactions about static equilibrium. Add the static gravity load to obtain total support load. The frequency CSV uses the sum of the two support reaction amplitudes, a conservative force-transmission measure. It is not the amplitude of the signed sum, which could conceal cancellation between support forces.

## Model and calculus

The generalized coordinates are downward translation `z` and small pitch `theta` about the center of mass. At support position `x_i`, the compression relative to its base is `delta_i = z + x_i*theta - y`. The input base displacement `y` is common to both supports.

The model assembles `M q'' + C q' + K q = F_generalized`. Frequency response solves the complex dynamic-stiffness system `D(omega) Q = F_hat`. The stiffness derivative follows by differentiating that system: `dQ/dk_j = -D^-1 (b_j b_j^T) Q`, holding damping fixed. This is checked against centered finite differences.

The start/stop force is derived from an exactly integrated smooth angular-frequency schedule. Both radial and angular-acceleration terms are included. The transient solver integrates displacement, velocity, input work and damper heat. It compares the work balance with kinetic and relative spring energies. A separate trapezoidal integral and a scalar oscillator solution provide independent checks.

## Selection and interpretation

The finite grid contains 30 stiffness/damping combinations. It minimizes the worst operating-band force envelope among grid candidates that satisfy static compression, acceleration and pole-decay criteria at 32 uncertainty corners. All selected-design corners then undergo runup and foundation-pulse simulations. This is a finite candidate selection, not a continuous or global optimum.

The combined runup/pulse bound adds each scenario's peak magnitude at each support. By the triangle inequality, it bounds their arbitrary timing within this linear model. It includes a 1% allowance for sampled peak estimation; refined transient runs check that allowance. The pole-based 2% decay time is a modal-envelope indicator, not a general guarantee for every initial condition. Actual final start/stop states are checked separately.

The 18 N force-transmission and 1.8 m/s² sensor-acceleration criteria apply to the 20-35 Hz running band. Outside-band harmonic curves are provided to explain resonance and are not operating approvals.

## Scope

This package completes the numerical and synthetic evaluation. It does not claim physical commissioning. The body is rigid and has only vertical/pitch degrees of freedom. Mounts are linear and viscously damped. Lateral motion, roll, frame flexibility, piping forces, floor flexibility, elastomer temperature/creep effects, and fatigue are outside the model. A negative support reaction is rejected rather than treated as a solved contact separation.

All 32 corners are explicit design cases. They do not establish a probability or prove feasibility at every point inside an uncertain parameter region. The force, pulse and mount-property assumptions should be replaced with application-specific inputs before a physical design decision.

## Primary references

- MIT OpenCourseWare, Dynamics and Control I, Lecture 24, forced response of multi-degree-of-freedom systems: https://ocw.mit.edu/courses/2-003j-dynamics-and-control-i-spring-2007/81544b5ec000784ed88d4786188add28_lec24.pdf
- SciPy `solve_ivp` API, DOP853 and error controls: https://docs.scipy.org/doc/scipy/reference/generated/scipy.integrate.solve_ivp.html
