gemseo.problems.mdo.aerostructure.aerostructure module#

The aerostructure MDO problem.

The aerostructure module implements all Discipline included in the Aerostructure problem:

\[\begin{split}\text{OVERALL AIRCRAFT DESIGN} = \left\{ \begin{aligned} &\text{minimize }range(thick\_airfoils, thick\_panels, sweep) = 8 \times10^{11}\times lift\times mass/drag \\ &\text{with respect to }thick\_airfoils,\,thick\_panels, \,sweep \\ &\text{subject to }\\ & rf-0.5 = 0\\ & lift-0.5 \leq 0 \end{aligned}\right.\end{split}\]

where

\[\begin{split}\text{AERODYNAMICS} = \left\{ \begin{aligned} &drag=0.1\times((sweep/360)^2 + 200 + thick\_airfoils^2 - thick\_airfoils - 4\times displ)\\ & forces=10\times sweep + 0.2\times thick\_airfoils-0.2\times displ\\ & lift=(sweep + 0.2\times thick\_airfoils- 2\times displ)/3000 \end{aligned} \right.\end{split}\]

and

\[\begin{split}\text{STRUCTURE} = \left\{ \begin{aligned} &mass =4000\times(sweep/360)^3 + 200000 + 100\times thick\_panels + 200\times forces\\ &rf=3\times sweep - 6\times thick\_panels + 0.1\times forces + 55\\ &displ=2\times sweep + 3\times thick\_panels - 2\times forces \end{aligned} \right.\end{split}\]
class Aerodynamics[source]#

Bases: Discipline

The aerodynamics discipline of the aerostructure use case.

Evaluate: [drag, forces, lift] = f(sweep, thick_airfoils, displ).

static compute_drag(sweep, thick_airfoils, displ)[source]#

Compute the coupling.

\(drag=0.1*((sweep/360)^2 + 200 + thick\_airfoils^2 - thick\_airfoils - 4*displ)\)

Parameters:
  • sweep -- The sweep.

  • thick_airfoils -- The thickness of the airfoils.

  • displ -- The displacement.

Returns:

The drag.

Return type:

float

static compute_forces(sweep, thick_airfoils, displ)[source]#

Compute the coupling forces.

\(forces=10*sweep + 0.2*thick\_airfoils-0.2*displ\)

Parameters:
  • sweep -- The sweep.

  • thick_airfoils -- The thickness of the airfoils.

  • displ -- The displacement.

Returns:

The forces.

static compute_lift(sweep, thick_airfoils, displ)[source]#

Compute the lift.

\(lift=(sweep + 0.2*thick\_airfoils-2.*displ)/3000.\).

Parameters:
  • sweep -- The sweep.

  • thick_airfoils -- The thickness of the airfoils.

  • displ -- The displacement.

Returns:

The lift.

auto_detect_grammar_files: ClassVar[bool] = True#

Whether to find the grammar files automatically.

cache: BaseCache | None#

The execution and linearization data saved according to the cache type.

execution_statistics: ExecutionStatistics#

The execution statistics of the process.

execution_status: ExecutionStatus#

The execution status of the process.

jac: JacobianData#

The Jacobian matrices of the outputs.

The structure is {output_name: {input_name: jacobian_matrix}}.

name: str#

The name of the process.

class Mission(r_val=0.5, lift_val=0.5)[source]#

Bases: Discipline

The mission discipline of the aerostructure use case.

Compute the objective and the constraints.

Initialize self. See help(type(self)) for accurate signature.

Parameters:
  • r_val (float) --

    The threshold to compute the reserve factor constraint.

    By default it is set to 0.5.

  • lift_val (float) --

    The threshold to compute the lift constraint.

    By default it is set to 0.5.

static c_lift(lift, lift_val=0.5)[source]#

Compute the lift constraint: \(lift-0.5\).

Parameters:
  • lift -- The lift.

  • lift_val (float) --

    The threshold for the lift constraint.

    By default it is set to 0.5.

Returns:

The value of the lift constraint.

static c_rf(reserve_fact, rf_val=0.5)[source]#

Compute the reserve factor constraint: \(rf-0.5\).

Parameters:
  • reserve_fact -- The reserve factor.

  • rf_val (float) --

    The threshold for the reserve factor constraint.

    By default it is set to 0.5.

Returns:

The value of the reserve factor constraint.

static compute_range(lift, mass, drag)[source]#

Compute the objective function: \(range=8.10^{11}*lift/(mass*drag)\).

Parameters:
  • lift -- The lift.

  • mass -- The mass.

  • drag -- The drag.

Returns:

The range.

Return type:

float

auto_detect_grammar_files: ClassVar[bool] = True#

Whether to find the grammar files automatically.

cache: BaseCache | None#

The execution and linearization data saved according to the cache type.

execution_statistics: ExecutionStatistics#

The execution statistics of the process.

execution_status: ExecutionStatus#

The execution status of the process.

jac: JacobianData#

The Jacobian matrices of the outputs.

The structure is {output_name: {input_name: jacobian_matrix}}.

name: str#

The name of the process.

class Structure[source]#

Bases: Discipline

The structure discipline of the aerostructure use case.

Evaluate: [mass, rf, displ] = f(sweep, thick_panels, forces).

static compute_displ(sweep, thick_panels, forces)[source]#

Compute the coupling.

\(displ=2*sweep + 3*thick\_panels - 2.*forces\)

Parameters:
  • sweep -- The sweep.

  • thick_panels -- The thickness of the panels.

  • forces -- The forces.

Returns:

The displacement.

static compute_mass(sweep, thick_panels, forces)[source]#

Compute the mass.

\(mass=4000*(sweep/360)^3 + 200000 + 100*thick\_panels + 200.0*forces\).

Parameters:
  • sweep -- The sweep.

  • thick_panels -- The thickness of the panels.

  • forces -- The forces.

Returns:

The mass.

static compute_rf(sweep, thick_panels, forces)[source]#

Compute the coupling.

\(rf=-3*sweep - 6*thick\_panels + 0.1*forces + 55\)

Parameters:
  • sweep -- The sweep.

  • thick_panels -- The thickness of the panels.

  • forces -- The forces.

Returns:

The reserve factor.

auto_detect_grammar_files: ClassVar[bool] = True#

Whether to find the grammar files automatically.

cache: BaseCache | None#

The execution and linearization data saved according to the cache type.

execution_statistics: ExecutionStatistics#

The execution statistics of the process.

execution_status: ExecutionStatus#

The execution status of the process.

jac: JacobianData#

The Jacobian matrices of the outputs.

The structure is {output_name: {input_name: jacobian_matrix}}.

name: str#

The name of the process.

get_inputs(*names)[source]#

Generate initial solution.

Parameters:

*names (str) -- The names of the variables.

Returns:

An initial design solution.