Initial commit: establish deterministic rod-string solver stack.

Set up the C solver core, Node API orchestration, TS GUI workflow, and engineering documentation with cleaned repo hygiene for private Git hosting.

Made-with: Cursor
This commit is contained in:
2026-04-16 21:59:42 -06:00
commit 725a72a773
83 changed files with 14687 additions and 0 deletions

View File

@@ -0,0 +1,70 @@
import type { CaseStore } from "../../state/useCaseStore";
import { Fieldset } from "../common/Fieldset";
import { Row } from "../common/Row";
import { NumberField } from "../common/NumberField";
import { SelectField } from "../common/SelectField";
type Props = { store: CaseStore };
export function PumpTab({ store }: Props) {
const { state, update } = store;
return (
<div className="tab-grid two">
<Fieldset legend="Pump Geometry">
<Row
label="Plunger Diameter"
htmlFor="plungerDiam"
hint="mm in base-case XML (converted to m if > 2)"
>
<NumberField
id="plungerDiam"
value={state.pumpDiameter}
step={0.25}
onChange={(v) => update("pumpDiameter", v)}
/>
</Row>
<Row label="Pump Friction" htmlFor="pumpFric" hint="lbf (imperial)">
<NumberField
id="pumpFric"
value={state.pumpFriction}
step={10}
onChange={(v) => update("pumpFriction", v)}
/>
</Row>
<Row label="Pump Intake Pressure" htmlFor="pumpIntake" hint="psi (imperial)">
<NumberField
id="pumpIntake"
value={state.pumpIntakePressure}
step={1}
onChange={(v) => update("pumpIntakePressure", v)}
/>
</Row>
</Fieldset>
<Fieldset legend="Fillage">
<Row label="Pump Fillage Option" htmlFor="fillageOpt">
<SelectField
id="fillageOpt"
value={state.pumpFillageOption}
onChange={(v) => update("pumpFillageOption", v)}
options={[
{ value: 0, label: "0 — auto" },
{ value: 1, label: "1 — specified" },
{ value: 2, label: "2 — incomplete fillage" }
]}
/>
</Row>
<Row label="Percent Pump Fillage (%)" htmlFor="pctFill">
<NumberField
id="pctFill"
value={state.percentPumpFillage}
step={1}
min={0}
max={100}
onChange={(v) => update("percentPumpFillage", v)}
/>
</Row>
</Fieldset>
</div>
);
}