Skip to content

Commit

Permalink
Merge pull request #165 from fast-aircraft-design/minor-issue-fixes
Browse files Browse the repository at this point in the history
Minor issue fixes
  • Loading branch information
ScottDelbecq committed May 7, 2020
2 parents 9ebfc5e + 759a0b8 commit 69c5c61
Show file tree
Hide file tree
Showing 4 changed files with 35 additions and 1 deletion.
2 changes: 1 addition & 1 deletion src/fastoad/cmd/fast.py
Original file line number Diff line number Diff line change
Expand Up @@ -156,7 +156,7 @@ def _notebooks(args):
print("")
print("Notebooks have been created in %s" % target_path)
print("You may now run Jupyter with:")
print(" jupyter notebook %s" % target_path)
print(' jupyter notebook "%s"' % target_path)

# UTILITIES ====================================================================================

Expand Down
23 changes: 23 additions & 0 deletions src/fastoad/models/performances/breguet.py
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,7 @@ def setup(self):
self.add_subsystem("distances", _Distances(), promotes=["*"])
self.add_subsystem("cruise_mass_ratio", _CruiseMassRatio(), promotes=["*"])
self.add_subsystem("fuel_weights", _FuelWeightFromMTOW(), promotes=["*"])
self.add_subsystem("consumption", _Consumption(), promotes=["*"])


class BreguetFromOWE(om.Group):
Expand All @@ -63,6 +64,7 @@ def setup(self):
self.add_subsystem("cruise_mass_ratio", _CruiseMassRatio(), promotes=["*"])
self.add_subsystem("mtow", _MTOWFromOWE(), promotes=["*"])
self.add_subsystem("fuel_weights", _FuelWeightFromMTOW(), promotes=["*"])
self.add_subsystem("consumption", _Consumption(), promotes=["*"])

self.nonlinear_solver = om.NewtonSolver()
self.nonlinear_solver.options["iprint"] = 0
Expand All @@ -71,6 +73,27 @@ def setup(self):
self.linear_solver = om.DirectSolver()


class _Consumption(om.ExplicitComponent):
"""
Adds a variable for consumption/passenger/km
"""

def setup(self):
self.add_input("data:mission:sizing:fuel", np.nan, units="kg")
self.add_input("data:TLAR:range", np.nan, units="km")
self.add_input("data:TLAR:NPAX", np.nan)

self.add_output("data:mission:sizing:fuel:unitary", units="kg/km")
self.declare_partials("*", "*", method="fd")

def compute(self, inputs, outputs, discrete_inputs=None, discrete_outputs=None):
fuel = inputs["data:mission:sizing:fuel"]
npax = inputs["data:TLAR:NPAX"]
distance = inputs["data:TLAR:range"]

outputs["data:mission:sizing:fuel:unitary"] = fuel / npax / distance


class _BreguetPropulsion(om.ExplicitComponent):
"""
Link with engine computation
Expand Down
10 changes: 10 additions & 0 deletions src/fastoad/models/performances/tests/test_breguet.py
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@ def test_breguet_from_mtow():
ivc.add_output("data:mission:sizing:cruise:altitude", 35000, units="ft")
ivc.add_output("data:TLAR:cruise_mach", 0.78)
ivc.add_output("data:TLAR:range", 500, units="NM")
ivc.add_output("data:TLAR:NPAX", 150)
ivc.add_output("data:aerodynamics:aircraft:cruise:L_D_max", 16.0)
ivc.add_output("data:propulsion:SFC", 1e-5, units="kg/N/s")
ivc.add_output("data:weight:aircraft:MTOW", 74000, units="kg")
Expand All @@ -33,12 +34,14 @@ def test_breguet_from_mtow():

assert_allclose(problem["data:mission:sizing:ZFW"], 65617.0, rtol=1e-3)
assert_allclose(problem["data:mission:sizing:fuel"], 8382.0, rtol=1e-3)
assert_allclose(problem["data:mission:sizing:fuel:unitary"], 0.0604, rtol=1e-3)

# test 2
ivc = om.IndepVarComp()
ivc.add_output("data:mission:sizing:cruise:altitude", 35000, units="ft")
ivc.add_output("data:TLAR:cruise_mach", 0.78)
ivc.add_output("data:TLAR:range", 1500, units="NM")
ivc.add_output("data:TLAR:NPAX", 120)
ivc.add_output("data:aerodynamics:aircraft:cruise:L_D_max", 16.0)
ivc.add_output("data:propulsion:SFC", 1e-5, units="kg/N/s")
ivc.add_output("data:weight:aircraft:MTOW", 74000, units="kg")
Expand All @@ -47,6 +50,7 @@ def test_breguet_from_mtow():

assert_allclose(problem["data:mission:sizing:ZFW"], 62473.0, rtol=1e-3)
assert_allclose(problem["data:mission:sizing:fuel"], 11526.0, rtol=1e-3)
assert_allclose(problem["data:mission:sizing:fuel:unitary"], 0.0346, rtol=1e-3)

# Check consistency of other outputs
assert_allclose(
Expand All @@ -68,6 +72,7 @@ def test_breguet_from_mtow_with_rubber_engine():
ivc.add_output("data:mission:sizing:cruise:altitude", 35000, units="ft")
ivc.add_output("data:TLAR:cruise_mach", 0.78)
ivc.add_output("data:TLAR:range", 500, units="NM")
ivc.add_output("data:TLAR:NPAX", 150)
ivc.add_output("data:aerodynamics:aircraft:cruise:L_D_max", 16.0)
ivc.add_output("data:weight:aircraft:MTOW", 74000, units="kg")

Expand All @@ -86,13 +91,15 @@ def test_breguet_from_mtow_with_rubber_engine():

assert_allclose(problem["data:mission:sizing:ZFW"], 65076.0, atol=1)
assert_allclose(problem["data:mission:sizing:fuel"], 8924.0, atol=1)
assert_allclose(problem["data:mission:sizing:fuel:unitary"], 0.0642, rtol=1e-3)


def test_breguet_from_owe():
ivc = om.IndepVarComp()
ivc.add_output("data:mission:sizing:cruise:altitude", 35000, units="ft")
ivc.add_output("data:TLAR:cruise_mach", 0.78)
ivc.add_output("data:TLAR:range", 500, units="NM")
ivc.add_output("data:TLAR:NPAX", 150)
ivc.add_output("data:aerodynamics:aircraft:cruise:L_D_max", 16.0)
ivc.add_output("data:propulsion:SFC", 1e-5, units="kg/N/s")
ivc.add_output("data:weight:aircraft:OWE", 50000, units="kg")
Expand All @@ -103,13 +110,15 @@ def test_breguet_from_owe():
assert_allclose(problem["data:weight:aircraft:MTOW"], 74000.0, rtol=1e-3)
assert_allclose(problem["data:mission:sizing:ZFW"], 65617.0, rtol=1e-3)
assert_allclose(problem["data:mission:sizing:fuel"], 8382.0, rtol=1e-3)
assert_allclose(problem["data:mission:sizing:fuel:unitary"], 0.0604, rtol=1e-3)


def test_breguet_from_owe_with_rubber_engine():
ivc = om.IndepVarComp()
ivc.add_output("data:mission:sizing:cruise:altitude", 35000, units="ft")
ivc.add_output("data:TLAR:cruise_mach", 0.78)
ivc.add_output("data:TLAR:range", 500, units="NM")
ivc.add_output("data:TLAR:NPAX", 150)
ivc.add_output("data:aerodynamics:aircraft:cruise:L_D_max", 16.0)
ivc.add_output("data:weight:aircraft:payload", 15076, units="kg")
ivc.add_output("data:weight:aircraft:OWE", 50000, units="kg")
Expand All @@ -131,3 +140,4 @@ def test_breguet_from_owe_with_rubber_engine():
assert_allclose(problem["data:weight:aircraft:MTOW"], 74000.0, atol=10)
assert_allclose(problem["data:mission:sizing:ZFW"], 65076.0, atol=1)
assert_allclose(problem["data:mission:sizing:fuel"], 8924.0, atol=1)
assert_allclose(problem["data:mission:sizing:fuel:unitary"], 0.0642, rtol=1e-3)
1 change: 1 addition & 0 deletions src/fastoad/openmdao/resources/variable_descriptions.txt
Original file line number Diff line number Diff line change
Expand Up @@ -225,6 +225,7 @@ data:mission:sizing:descent:thrust_rate thrust rate (between 0.0 and 1.0) during
data:mission:sizing:flight:duration total flight time in sizing mission
data:mission:sizing:flight:fuel mass of consumed fuel during flight in sizing mission
data:mission:sizing:fuel consumed fuel mass during whole mission
data:mission:sizing:fuel:unitary consumption/passenger/distance_unit in sizing mission
data:mission:sizing:fuel_reserve mass of fuel reserve
data:mission:sizing:holding:altitude altitude during holding phase in sizing mission
data:mission:sizing:holding:CAS Calibrated Air Speed during holding phase in sizing mission
Expand Down

0 comments on commit 69c5c61

Please sign in to comment.