/// <summary> /// Pumps One tick of gas from input atmosphere. /// This removes gas from inputAtmosphere, but nothing is added to outputAtmosphere. This enables internal processing before adding to output network(s). /// </summary> /// <param name="power">pump power (W/tick)</param> /// <param name="inputAtmosphere">Usually InputNetwork.Atmosphere</param> /// <param name="outputAtmosphere">Usually OutputNetwork.Atmosphere</param> /// <returns>GasMixture containing one tick of pumped gas from inputAtmosphere</returns> public static GasMixture VolumePumpOneTickFromInput(float quantityolume, Atmosphere inputAtmosphere, Atmosphere outputAtmosphere, out float usedPower) { float pumpedMoles = 0; return(inputAtmosphere.Remove(pumpedMoles)); }
/// <summary> /// Pumps One tick of gas from input atmosphere. /// This removes gas from inputAtmosphere, but nothing is added to outputAtmosphere. This enables internal processing before adding to output network(s). /// </summary> /// <param name="power">pump power (W/tick)</param> /// <param name="inputAtmosphere">Usually InputNetwork.Atmosphere</param> /// <param name="outputAtmosphere">Usually OutputNetwork.Atmosphere</param> /// <returns>GasMixture containing one tick of pumped gas from inputAtmosphere</returns> public static GasMixture PowerPumpOneTickFromInput(float power, Atmosphere inputAtmosphere, Atmosphere outputAtmosphere) { float head = (outputAtmosphere.PressureGasses - inputAtmosphere.PressureGasses) * 102f; // Based on PressureGasses using "Pa" float density = inputAtmosphere.GasMixture.TotalDensity; float pumpedMoles = power / (head * 9.81f * density); return(inputAtmosphere.Remove(pumpedMoles)); }
public GasMixture PumpIn(float volume, out float requiredPower) { Atmosphere inputAtmosphere = InputNetwork.Atmosphere; Atmosphere outputAtmosphere = OutputNetwork.Atmosphere; float deltaP = outputAtmosphere.PressureGassesAndLiquidsInPa - inputAtmosphere.PressureGassesAndLiquidsInPa; volume /= 1000; // convert from Liters to m3 requiredPower = deltaP * volume / Efficiency; // https://en.wikipedia.org/wiki/Pump#Pumping_power requiredPower = Math.Max(0, requiredPower) + IdlePower; // disallow negative power consumption and adding IdlePower. if (requiredPower > MaximumPower) { // Maximum power usage limit reached, so we're clamping the power and adjusting the volume accordingly requiredPower = MaximumPower; float adjustedPumpingPower = requiredPower - IdlePower; volume = adjustedPumpingPower * Efficiency / deltaP; } volume *= 1000; // Convert from m3 to Liters float molesToPump = inputAtmosphere.TotalMoles * volume / inputAtmosphere.Volume; return(inputAtmosphere.Remove(molesToPump)); }