Skip to content

Mandate 2026-10-20: two-stroke, performance, knock, editing on the engine - #7

Merged
zolaski333 merged 12 commits into
mainfrom
main-eina6x
Oct 23, 2026
Merged

zolaski333 merged 12 commits into
mainfrom
main-eina6x

Conversation

@zolaski333

Copy link
Copy Markdown
Owner

Items 2-5 of the owner's mandate of 2026-10-20 (item 1, Linux, was merged earlier). Every measurement is in docs/journal.md (2026-10-21 to -23); the priority list in .claude/CLAUDE.md says what is done and what is open.

Two-stroke

  • Loop scavenging with the fresh front integrated every sub-step: the 4,500-6,250 rpm hunting is gone (RD350 held-rpm std 5.06 -> 0.48).
  • The 3,500/7,000/7,500 rpm holding band was the 240 Hz frame's alias of the firing ripple: the dyno holds the frame's mean speed (frameAveragedRpm).
  • A slide carburettor (two circuits on their own depressions, Mikuni-numbered jets sized by the designer) and a power valve; designed carburetted engines idle. The reed stays a perfect check valve (no measured gap).

Performance

  • JUCE compiled once (EngineLabJuce): Linux CI build 18 -> 4.5 min. LTO and /MP2 refuted.
  • Windows CI resumes on one MSBuild node after a C1060 (runner heap).

Knock

  • End gas as its own zone (Douaud-Eyzat, prefactor x2, Livengood-Wu), stepped ECU control: the catalogue's maps sit 0-3 deg from their limit. Open: the I5's 8-12 deg of retard at its maker's boost.

Editing on the engine (each checked on screen)

  • Compression ratio on the liner/piston, live; every turbocharger drawn with its own inspector; the carburettor drawn and jetted by clicking, live; two exhaust paths joined into one (a flat six as 6-into-1).
  • Designer window: its real-time check now cranks carburetted two-strokes shut before the dyno; the name follows the engine; column headers fixed.

Tests

89/89 on Linux (linux-gcc-release) at the head; CI run 100 green on both platforms, run 101 (head) checked before merge.


Generated by Claude Code

zolaski333 and others added 12 commits October 23, 2026 02:18
The end gas the flame has not reached is followed from the seal,
isentropic with a real cp(T), against Douaud-Eyzat's delay integrated from
the spark, with its prefactor doubled: at 17.68 ms every catalogue engine
with a knock limit, NA ones included, held 4-13 deg of retard behind its
own map. The knock's intensity is the pressure the end gas adds. The
ECU's knock control pulls the spark back in steps and gives it back at
1 deg/s. Boost no longer speeds the flame. The Audi I5 gets its
intercooler, and the catalogue gate's absorber reaches 35 bar of BMEP.

Woschni's combustion term, measured with this work, is backed out: it
stalls lugged and launched engines the tests hold (journal 2026-10-23).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01FBmqGMLt8GmUG1aPYHCEVw
…hat flood

The idle governor's gains were set on four-strokes. On the RD350, whose
idle air passes the crankcase first, they hunt: a 5 s limit cycle, std
66 rpm with the lambda trim (which damps it) and 165 with it frozen. At
half the proportional and integral gain the idle holds within 1,284-1,325
rpm. Designed carburetted 1-3 cylinder two-strokes do not idle at all: an
open item-2 lead, recorded in the journal.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01FBmqGMLt8GmUG1aPYHCEVw
…gned twin

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01FBmqGMLt8GmUG1aPYHCEVw
The designer sized the pilot jet for an idle delivery ratio of 0.35,
about eight times what a two-stroke idles on, so designed twins and
triples flooded at idle and stalled. The pilot is now sized from the air
the idle path passes at the crankcase's 20 kPa, and follows that path as
the ECU's idle air (the slide's idle stop) opens, the way progression
holes do; each carburettor's bypass goes with the cylinder it feeds, and
the lumped pilot restriction is refitted on the same RD350 pair (0.026,
a #35). Designed 1-4 cylinder engines idle at their 1,300 rpm.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01FBmqGMLt8GmUG1aPYHCEVw
…rame's mean speed

A designed two-stroke twin could not be held at 3,500, 7,000 and 7,500
rpm. Those are where it fires at 117, 233 and 250 Hz against the 240 Hz
frame: the absorber held EngineState::rpm, the speed at the frame's end
with the firing ripple in it, which aliased into a 6-7 Hz wander the
brake answered. The simulator now publishes frameAveragedRpm and the
absorber holds that: held_rpm_stddev 2.3/6.6/2.6 -> 0.2/0.3/0.2 rpm,
torque within 1 %. DynoSweepHarness --frame-hz moves the frame.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01FBmqGMLt8GmUG1aPYHCEVw
A power valve in the exhaust port's roof (YPVS and its kind): shut, the
port opens later and is lower; a servo lifts it between two speeds.
`two_stroke.power_valve_*` in YAML, JSON, the catalogue and scripts;
EngineState::powerValveOpening publishes it. The designer fits one to
sport two-strokes (12 deg later shut, lifting from 65 to 90 % of peak
power speed): a designed 500 cc twin gains 20-39 % between 3,250 and
5,750 rpm and keeps its top end. The JSON reader now reads the
scavenging loop length the writer already saved.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01FBmqGMLt8GmUG1aPYHCEVw
JUCE's modules are interface libraries that carry their sources, and the
audio library linked four of them PUBLIC, so every executable linking
audio compiled JUCE again: 130 of the tree's 390 compile units. They are
now compiled once into EngineLabJuce, linked PRIVATE with their include
directories (SYSTEM) and definitions re-exported, JUCE's own pattern for
a shared module library; every target links it. Clean Linux build on 4
cores at -j 4: 14 min 46 s -> 6 min 08 s wall, 53 min 40 s -> 20 min 50 s
CPU, 255 compile units. The per-unit JUCE warning exemptions go: no
JUCE unit compiles under our warnings any more.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01FBmqGMLt8GmUG1aPYHCEVw
MSBuild compiles one project's units in series, so moving JUCE into one
project put its heavy units on the Windows critical path: the CI build
went from 25 to 32 min there while Linux went from 18 to 4.5. /MP2 on
that project only, beside CI's two MSBuild nodes.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01FBmqGMLt8GmUG1aPYHCEVw
Run 98 ran out of compiler heap on two MSBuild nodes with run 96's green
tree: the runner's memory, not the code. The build now resumes on one
node when the log shows C1060, as .claude/CLAUDE.md prescribes, which
rebuilds only what failed.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01FBmqGMLt8GmUG1aPYHCEVw
…, 6-into-1

- Every turbocharger is drawn, each on the collector of the path that
  drives it, and each opens its own inspector.
- A liner or piston edits the compression ratio beside bore and stroke
  (setCompressionRatio; a chamber-geometry engine moves its deck), taken
  live.
- A carburetted path's throttle is drawn as a carburettor (slide tower,
  float bowl) and its inspector jets every carburettor alike: main and
  pilot jets, needle clip, air screw (tuneCarburettor), taken live.
  Carburetted cylinders no longer draw or offer injectors.
- The exhaust ports or a junction offer Joined: joinExhaustPaths copies
  the kept path's primary run for each cylinder of the other path into
  its collector, so a boxer six's banks become one 6-into-1 (restart).
- Designer, checked on screen for the first time: its real-time check
  cranked carburetted two-strokes at full throttle, where they never
  catch; it now cranks shut until the engine runs. The name follows the
  engine until typed; the table's columns read Quantity and Value.

All 89 tests pass on Linux; each change was checked in the app under Xvfb
(journal 2026-10-23).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01FBmqGMLt8GmUG1aPYHCEVw
@zolaski333
zolaski333 merged commit e1b2260 into main Oct 23, 2026
4 of 6 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants