Source code for openaerostruct.structures.wingbox_fuel_vol_delta

import numpy as np

import openmdao.api as om


[docs] def norm(vec): return np.sqrt(np.sum(vec**2))
[docs] class WingboxFuelVolDelta(om.ExplicitComponent): """ Create a constraint to ensure the wingbox has enough internal volume to store the required fuel. Parameters ---------- fuelburn : float Fuel weight fuel_vols[ny-1] : numpy array The magnitude of each individual panel's fuel-carrying volumes. Returns ------- fuel_vol_delta : float If the value is negative, then there isn't enough volume for the fuel. """ def initialize(self): self.options.declare("surface", types=dict) def setup(self): self.surface = surface = self.options["surface"] self.ny = surface["mesh"].shape[1] self.add_input("fuelburn", val=0.0, units="kg") self.add_input("fuel_vols", val=np.zeros((self.ny - 1)), units="m**3") self.add_output("fuel_vol_delta", val=0.0, units="m**3") self.declare_partials("*", "*", method="cs") def compute(self, inputs, outputs): fuel_weight = inputs["fuelburn"] reserves = self.surface["Wf_reserve"] fuel_density = self.surface["fuel_density"] vols = inputs["fuel_vols"] if self.surface["symmetry"] is True: fuel_weight /= 2.0 reserves /= 2.0 sum_vols = np.sum(vols) # This is used for the fuel-volume constraint. It should be positive for fuel to fit. outputs["fuel_vol_delta"] = sum_vols - (fuel_weight + reserves) / fuel_density