Пример #1
0
        /// <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));
        }
Пример #2
0
        /// <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));
        }
Пример #3
0
        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));
        }