Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Multipoint Optmization #447

Open
Ouzboy opened this issue Oct 3, 2024 · 1 comment
Open

Multipoint Optmization #447

Ouzboy opened this issue Oct 3, 2024 · 1 comment

Comments

@Ouzboy
Copy link

Ouzboy commented Oct 3, 2024

Hello,
Im Ousmane SY, PhD student at ISAE-SUPAERO.

I'm using OpenAeroStruct to perform trade-off studies of High Aspect Ratio wing concept by considering differents aspects of the ASO problem. I'm facing somes issues regarding the convergence of the multipoint case (more than 1 cruise flights points).Another issue Im facing is the implementation of the climb phase.
I noticed that both aspect were tackled by Eytan J. Adler in their work named "Efficient Aerostructural Wing Optimization Considering
Mission Analysis" attached below".
Would it be possible for you to share with me the implementation and ASO script used for that work?
Thanks in advance
Adler2022a.pdf

@eytanadler
Copy link
Collaborator

eytanadler commented Nov 26, 2024

Hi Ousmane SY,
Unfortunately I don't have any scripts in a format that are ready to share and it's hard to help debug without any information about your code or the convergence failure modes you're observing. Before looking at the climb phase, I'd suggest getting multipoint working. There is at least one page in the docs that should help.

For the climb phase, I can offer the OpenMDAO component in which I modified the Breguet range equation to include a flight path angle input:

import numpy as np
import openmdao.api as om

class ModifiedBreguetRange(om.ExplicitComponent):
    """
    Computes the fuel burn using the Breguet range equation modified to include flight path angle.

    Parameters
    ----------
    CL : float
        Total coefficient of lift
    CD : float
        Total coefficient of drag
    CT : float
        Specific fuel consumption for the entire aircraft (1/s)
    V : float
        Flight speed
    R : float
        The total range over which to estimate fuel burn (m)
    W0 : float
        The initial aircraft weight, excluding the wing structural weight (kg)
    W_wing : float
        Weight of the wing's structure (kg)
    gamma : float
        Flight path angle (deg)

    Returns
    -------
    fuelburn : float
        Computed fuel burn in kg based on the Breguet range equation.
    """
    def setup(self):
        self.add_input("CT", val=0.25, units="1/s")
        self.add_input("CL", val=0.7)
        self.add_input("CD", val=0.02)
        self.add_input("R", val=3000.0, units="m")
        self.add_input("V", val=200, units="m/s")
        self.add_input("W0", val=200.0, units="kg")
        self.add_input("W_wing", val=0., units="kg")
        self.add_input("gamma", val=0., units="deg")

        self.add_output("fuelburn", val=1.0, units="kg")

        self.declare_partials("*", "*", method="cs")
        self.set_check_partial_options(wrt="*", method="cs", step=1e-30)

    def compute(self, inputs, outputs):

        CT = inputs["CT"]
        R = inputs["R"]
        V = inputs["V"]
        W0 = inputs["W0"]
        Ws = inputs["W_wing"]
        gamma = inputs["gamma"] * np.pi / 180

        CL = inputs["CL"]
        CD = inputs["CD"]

        equiv_L_D = 1 / (np.cos(gamma) * CD / CL + np.sin(gamma))

        fuelburn = (W0 + Ws) * (1 - np.exp(-R * CT / V / equiv_L_D))
        fuelburn[fuelburn < 0] *= 0  # can't have negative fuel burn
        outputs["fuelburn"] = fuelburn

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants