stable
This commit is contained in:
@@ -30,7 +30,7 @@ namespace FluidSim.Tests
|
||||
|
||||
private double dt;
|
||||
private int stepCount;
|
||||
public float MaxThrottleArea = 1e-4f; // 1 cm²
|
||||
public float MaxThrottleArea = 100e-4f; // 1 cm²
|
||||
|
||||
// pipe area for open end calculations
|
||||
private float pipeArea;
|
||||
@@ -41,9 +41,9 @@ namespace FluidSim.Tests
|
||||
|
||||
// ---- Crankshaft ----
|
||||
crankshaft = new Crankshaft(600);
|
||||
crankshaft.Inertia = 0.2f;
|
||||
crankshaft.Inertia = 0.05f;
|
||||
crankshaft.FrictionConstant = 2f;
|
||||
crankshaft.FrictionViscous = 0.04f;
|
||||
crankshaft.FrictionViscous = 0.01f;
|
||||
|
||||
// ---- Cylinder ----
|
||||
float bore = 0.056f, stroke = 0.057f, conRod = 0.110f, compRatio = 9.2f;
|
||||
@@ -77,12 +77,12 @@ namespace FluidSim.Tests
|
||||
|
||||
pipeSystem = new PipeSystem(totalCells, pipeStart, pipeEnd, area, dx,
|
||||
1.225f, 0f, 101325f);
|
||||
pipeSystem.DampingMultiplier = 0.5f;
|
||||
pipeSystem.EnergyRelaxationRate = 0f;
|
||||
pipeSystem.DampingMultiplier = 1.0f;
|
||||
pipeSystem.EnergyRelaxationRate = 0.5f;
|
||||
pipeSystem.AmbientPressure = 101325f;
|
||||
|
||||
// ---- Volumes ----
|
||||
intakePlenum = new Volume0D(5e-6f, 101325f, 300f); // 5 mL
|
||||
intakePlenum = new Volume0D(100e-6f, 101325f, 300f); // 100 mL
|
||||
plenumInlet = intakePlenum.CreatePort();
|
||||
plenumOutlet = intakePlenum.CreatePort();
|
||||
exhaustCollector = new Volume0D(10e-6f, 101325f, 800f); // 10 mL (unused but present)
|
||||
@@ -130,8 +130,8 @@ namespace FluidSim.Tests
|
||||
solver.AddComponent(exhaustCollector);
|
||||
|
||||
// ---- Sound ----
|
||||
exhaustSound = new SoundProcessor(sampleRate, 1f) { Gain = 1f };
|
||||
intakeSound = new SoundProcessor(sampleRate, 1f) { Gain = 1f };
|
||||
exhaustSound = new SoundProcessor(sampleRate, 1f) { Gain = 20f };
|
||||
intakeSound = new SoundProcessor(sampleRate, 1f) { Gain = 20f };
|
||||
reverb = new OutdoorExhaustReverb(sampleRate);
|
||||
|
||||
stepCount = 0;
|
||||
@@ -163,11 +163,31 @@ namespace FluidSim.Tests
|
||||
if (stepCount % 1000 == 0)
|
||||
{
|
||||
float rpm = crankshaft.AngularVelocity * 60f / (2f * MathF.PI);
|
||||
Console.WriteLine($"Step {stepCount}, RPM={rpm:F0}, CylP={cylinder.Pressure / 1e5f:F2} bar");
|
||||
Console.WriteLine($"intake flow: {intakeFlow:F12}, exhaust flow: {exhaustFlow:F16}");
|
||||
float crankDeg = crankshaft.CrankAngle; // public property on Cylinder
|
||||
Console.WriteLine($"Step {stepCount}, CA={crankDeg:F1} deg, RPM={rpm:F0}, CylP={cylinder.Pressure / 1e5f:F2} bar");
|
||||
Console.WriteLine($" intake flow: {intakeFlow:F6}, exhaust flow: {exhaustFlow:F6}");
|
||||
|
||||
// Pipe 0 (intake before throttle)
|
||||
var (r0L, u0L, p0L) = pipeSystem.GetInteriorStateLeft(0);
|
||||
var (r0R, u0R, p0R) = pipeSystem.GetInteriorStateRight(0);
|
||||
Console.WriteLine($" Pipe0 L: rho={r0L:F4} u={u0L:F3} p={p0L/1e5:F3}bar | R: rho={r0R:F4} u={u0R:F3} p={p0R/1e5:F3}bar");
|
||||
|
||||
// Pipe 1 (runner)
|
||||
var (r1L, u1L, p1L) = pipeSystem.GetInteriorStateLeft(1);
|
||||
var (r1R, u1R, p1R) = pipeSystem.GetInteriorStateRight(1);
|
||||
Console.WriteLine($" Pipe1 L: rho={r1L:F4} u={u1L:F3} p={p1L/1e5:F3}bar | R: rho={r1R:F4} u={u1R:F3} p={p1R/1e5:F3}bar");
|
||||
|
||||
// Pipe 2 (exhaust)
|
||||
var (r2L, u2L, p2L) = pipeSystem.GetInteriorStateLeft(2);
|
||||
var (r2R, u2R, p2R) = pipeSystem.GetInteriorStateRight(2);
|
||||
Console.WriteLine($" Pipe2 L: rho={r2L:F4} u={u2L:F3} p={p2L/1e5:F3}bar | R: rho={r2R:F4} u={u2R:F3} p={p2R/1e5:F3}bar");
|
||||
|
||||
// Plenum and cylinder mass
|
||||
Console.WriteLine($" Plenum P={intakePlenum.Pressure/1e5:F3}bar, mass={intakePlenum.Mass:E4} kg");
|
||||
Console.WriteLine($" Cyl mass={cylinder.Mass:E4} kg");
|
||||
}
|
||||
|
||||
return reverb.Process(intakeDry);
|
||||
return reverb.Process(intakeDry + exhaustDry);
|
||||
}
|
||||
|
||||
public override void Draw(RenderWindow target)
|
||||
|
||||
Reference in New Issue
Block a user