using System; using FluidSim.Components; using FluidSim.Utils; namespace FluidSim.Core { public static class Simulation { private static Solver solver; private static Volume0D volA, volB; private static Pipe1D pipe; private static Connection connA, connB; private static int stepCount; private static double time; private static double dt; public static void Initialize(int sampleRate) { dt = 1.0 / sampleRate; double V = 5.0 * Units.L; volA = new Volume0D(V, 2.0 * Units.atm, Units.Celsius(20), sampleRate); volB = new Volume0D(V, 1.0 * Units.atm, Units.Celsius(20), sampleRate); double length = 150 * Units.mm; double diameter = 25 * Units.mm; double area = Units.AreaFromDiameter(25, Units.mm); pipe = new Pipe1D(length, area, sampleRate); pipe.SetUniformState(volA.Density, 0.0, volA.Pressure); pipe.FrictionFactor = 0.02; // Connections with orifice area equal to pipe area (flange joint) connA = new Connection(volA.Port, pipe.PortA) { Area = area, DischargeCoefficient = 1.0, Gamma = 1.4 }; connB = new Connection(pipe.PortB, volB.Port) { Area = area, DischargeCoefficient = 1.0, Gamma = 1.4 }; solver = new Solver(); solver.AddVolume(volA); solver.AddVolume(volB); solver.AddPipe(pipe); solver.AddConnection(connA); solver.AddConnection(connB); } public static float Process() { solver.Step(); time += dt; stepCount++; Log(); return 0f; } public static void Log() { bool logPipe = true; if ((stepCount <= 10 || (stepCount <= 1000 && stepCount % 100 == 0)) || stepCount % 1000 == 0 && stepCount < 10000) { // Summary line Console.WriteLine( $"t = {time * 1e3:F3} ms Step {stepCount:D4}: " + $"PA = {volA.Pressure / 1e5:F6} bar, " + $"PB = {volB.Pressure / 1e5:F6} bar, " + $"FlowA = {pipe.PortA.MassFlowRate * 1e3:F2} g/s"); // Per‑cell state if (logPipe && stepCount <= 1000) { int n = pipe.GetCellCount(); for (int i = 0; i < n; i++) { double rho = pipe.GetCellDensity(i); double p = pipe.GetCellPressure(i); double u = pipe.GetCellVelocity(i); Console.WriteLine( $" Cell {i,2}: ρ={rho,8:F4} kg/m³, p={p,10:F2} Pa, u={u,8:F3} m/s"); } } } } } }