Exemplo n.º 1
0
        public void Test_GetConsumedFuel_WithPartialExcessFuelAndPartialInsuffiecientFuel()
        {
            var fuelTank = new FuelTank(
                new FuelComponent(0.5, 100000),
                new FuelComponent(0.5, 0));

            var dryMass         = 10000;
            var fuelAMass       = 100000;
            var exhaustVelocity = 350 * 9.81;
            var deltaVelocity   = 9400d;

            var exhaustMass = FuelCalculator.GetConsumedFuel(
                deltaVelocity,
                dryMass,
                fuelTank,
                exhaustVelocity,
                0.01);

            var expectedBurnedFuelMass = 193256d;

            var expectedBurnedFuelAMass = expectedBurnedFuelMass / 2;

            var expectedExceedingFuelAMass = fuelAMass - expectedBurnedFuelAMass;

            var confirmedDeltaVelocity = Physics.GetDeltaVelocityBudget(
                dryMass + expectedExceedingFuelAMass,
                exhaustMass,
                exhaustVelocity);

            Assert.Equal(deltaVelocity, confirmedDeltaVelocity, 0);

            Assert.True(Math.Abs(expectedBurnedFuelMass - exhaustMass) < expectedBurnedFuelMass / 1000);
        }
Exemplo n.º 2
0
        public void Test_GetConsumedFuel_WithInsufficientFuel()
        {
            var x = Physics.GetRequiredExhaustMass(9400, 10000, 350 * 9.81);

            Assert.Equal(144518.9, FuelCalculator.GetConsumedFuel(9400, 10000, new FuelTank(0), 350 * 9.81, 0.1), 1);
            Assert.Equal(144518.9, FuelCalculator.GetConsumedFuel(9400, 10000, new FuelTank(1), 350 * 9.81, 0.1), 1);
            Assert.Equal(144518.9, FuelCalculator.GetConsumedFuel(9400, 10000, new FuelTank(10000), 350 * 9.81, 0.1), 1);
            Assert.Equal(144518.9, FuelCalculator.GetConsumedFuel(9400, 10000, new FuelTank(100000), 350 * 9.81, 0.1), 1);
        }
Exemplo n.º 3
0
        public double GetRequiredFuelMass(double deltaVelocity)
        {
            var totalMass = Mass;

            // TODO: Refactor Enginge.Components to be more user friendly, dont do this shit here
            var massPerCycleSum   = Engine.FuelComponents.Sum(i => i.Mass);
            var componentsByItems = Engine.FuelComponents.ToDictionary(i => i.Item);
            var fuelTank          = new FuelTank(Engine.GetAvailableFuel(CargoBay).Select(i =>
            {
                var portion = componentsByItems[i.Item].Mass / massPerCycleSum;
                return(new FuelComponent(portion, i.Mass));
            }).ToList());

            var dryMass = totalMass - fuelTank.GetAvailableMass();

            return(FuelCalculator.GetConsumedFuel(deltaVelocity, dryMass, fuelTank, Engine.ExhaustVelocity, 1.MeterPerSecond()));
        }
Exemplo n.º 4
0
        public void Test_GetConsumedFuel_WithZeroExhaustVelocity()
        {
            var exhaustMass = FuelCalculator.GetConsumedFuel(9400, 10000, new FuelTank(144518.9), 0, 0.1);

            Assert.Equal(double.PositiveInfinity, exhaustMass, 1);
        }
Exemplo n.º 5
0
        public void Test_GetConsumedFuel_WithZeroDryMass()
        {
            var exhaustMass = FuelCalculator.GetConsumedFuel(9400, 0, new FuelTank(144518.9), 350 * 9.81, 0.1);

            Assert.Equal(135166.2, exhaustMass, 1);
        }
Exemplo n.º 6
0
        public void Test_GetConsumedFuel_WithZeroDeltaVelocity()
        {
            var exhaustMass = FuelCalculator.GetConsumedFuel(0, 10000, new FuelTank(144518.9), 350 * 9.81, 0.1);

            Assert.Equal(0, exhaustMass, 1);
        }
Exemplo n.º 7
0
        public void Test_GetConsumedFuel_WithExcessFuel()
        {
            var exhaustMass = FuelCalculator.GetConsumedFuel(9400, 5000, new FuelTank(144518.9), 350 * 9.81, 0.1);

            Assert.Equal(139842.3, exhaustMass, 1);
        }