Source code for openconcept.analysis.atmospherics.true_airspeed

from __future__ import division
import numpy as np

from openmdao.api import ExplicitComponent

[docs]class TrueAirspeedComp(ExplicitComponent): ''' Computes true airspeed from equivalent airspeed and density Inputs ------ fltcond|rho : float Density (vector, kg/m3) fltcond|Ueas : float Equivalent airspeed (vector, m/s) Outputs ------- fltcond|q : float Dynamic pressure (vector, Pa) Options ------- num_nodes : int Number of analysis points to run (sets vec length) (default 1) ''' def initialize(self): self.options.declare('num_nodes', types=int) def setup(self): num_points = self.options['num_nodes'] self.add_input('fltcond|Ueas', units='m / s', shape=num_points) self.add_input('fltcond|rho', units='kg * m**-3', shape=num_points) self.add_output('fltcond|Utrue', units='m / s', shape=num_points) arange = np.arange(num_points) self.declare_partials('fltcond|Utrue', 'fltcond|Ueas', rows=arange, cols=arange) self.declare_partials('fltcond|Utrue', 'fltcond|rho', rows=arange, cols=arange) def compute(self, inputs, outputs): rho_isa_kgm3 = 1.225 outputs['fltcond|Utrue'] = inputs['fltcond|Ueas']*np.sqrt(rho_isa_kgm3/inputs['fltcond|rho']) def compute_partials(self, inputs, partials): rho_isa_kgm3 = 1.225 partials['fltcond|Utrue', 'fltcond|Ueas'] = np.sqrt(rho_isa_kgm3/inputs['fltcond|rho']) partials['fltcond|Utrue', 'fltcond|rho'] = inputs['fltcond|Ueas']*np.sqrt(rho_isa_kgm3)*(-1/2)*inputs['fltcond|rho']**(-3/2)