Source code for openconcept.analysis.atmospherics.dynamic_pressure_comp

from __future__ import division
import numpy as np

from openmdao.api import ExplicitComponent


[docs]class DynamicPressureComp(ExplicitComponent): ''' Calculates dynamic pressure from true airspeed and density. Inputs ------ fltcond|Utrue : float True airspeed (vector, m/s) fltcond|rho : float Density (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): nn = self.options['num_nodes'] self.add_input('fltcond|Utrue', units='m/s', shape=(nn,)) self.add_input('fltcond|rho', units='kg * m**-3', shape=(nn,)) self.add_output('fltcond|q', units='N * m**-2', shape=(nn,)) arange = np.arange(nn) self.declare_partials('fltcond|q', 'fltcond|rho', rows=arange, cols=arange) self.declare_partials('fltcond|q', 'fltcond|Utrue', rows=arange, cols=arange) def compute(self, inputs, outputs): nn = self.options['num_nodes'] outputs['fltcond|q'] = 0.5 * inputs['fltcond|rho'] * inputs['fltcond|Utrue']**2 def compute_partials(self, inputs, partials): nn = self.options['num_nodes'] partials['fltcond|q', 'fltcond|rho'] = 0.5 * inputs['fltcond|Utrue']**2 partials['fltcond|q', 'fltcond|Utrue'] = inputs['fltcond|rho'] * inputs['fltcond|Utrue']