This commit is contained in:
2026-05-05 19:39:11 +02:00
parent 608dabff12
commit d6b1d214f5
11 changed files with 493 additions and 277 deletions

View File

@@ -1,4 +1,4 @@
using System;
using System;
namespace FluidSim.Components
{
@@ -15,10 +15,10 @@ namespace FluidSim.Components
private double _dt;
public double Density => Mass / Volume;
public double Pressure => (Gamma - 1.0) * InternalEnergy / Volume;
public double Temperature => Pressure / (Density * GasConstant);
public double SpecificEnthalpy => Gamma / (Gamma - 1.0) * Pressure / Density;
public double Density => Mass / Math.Max(Volume, 1e-12);
public double Pressure => (Gamma - 1.0) * InternalEnergy / Math.Max(Volume, 1e-12);
public double Temperature => Pressure / Math.Max(Density * GasConstant, 1e-12);
public double SpecificEnthalpy => Gamma / (Gamma - 1.0) * Pressure / Math.Max(Density, 1e-12);
public double MassFlowRateIn { get; set; }
public double SpecificEnthalpyIn { get; set; }
@@ -46,18 +46,20 @@ namespace FluidSim.Components
Mass += dm;
InternalEnergy += dE;
// Safety: if mass becomes extremely small, reset internal energy to zero
if (Mass < 1e-12)
// ---- ABSOLUTE SAFEGUARD: keep at least 1 µg of gas at ambient pressure ----
double minMass = 1e-9;
double V = Math.Max(Volume, 1e-12);
if (Mass < minMass)
{
Mass = 0.0;
InternalEnergy = 0.0;
Mass = minMass;
InternalEnergy = 5000.0 * V / (Gamma - 1.0); // 0.05 bar, not ambient
}
else if (InternalEnergy < 1e-12)
else if (InternalEnergy < 0.0)
{
InternalEnergy = 0.0;
InternalEnergy = 101325.0 * V / (Gamma - 1.0);
}
// Avoid negative mass/energy
// Final nonnegative clamp
if (Mass < 0.0) Mass = 0.0;
if (InternalEnergy < 0.0) InternalEnergy = 0.0;
}