Source code for normalization_engine_variables

import pdb
import openmdao
import pandas as pd
import openmdao.api as om
import numpy as np
from pyNA.src.settings import Settings

## CHECK THIS COMPONENT

[docs]class NormalizationEngineVariables(om.ExplicitComponent): """ Normalizes engine variables with ambient atmospheric parameters. The *NormalizationEngineVariables* component requires the following inputs: * ``inputs['c_0']``: ambient speed of sound [m/s] * ``inputs['T_0']``: ambient temperature [K] * ``inputs['p_0']``: ambient pressure [Pa] * ``inputs['rho_0']``: ambient density [kg/m3] * ``inputs['F_n']``: engine net thrust [N] * ``inputs['W_f']``: engine fuel mass flow [kg/s] * ``inputs['V_j']``: jet velocity (re. c_0) [-] * ``inputs['rho_j']``: jet total density (re. rho_0) [-] * ``inputs['A_j']``: jet area (re. A_e) [-] * ``inputs['Tt_j']``: jet total temperature (re. T_0) [-] * ``inputs['M_j']``: jet Mach number [-] * ``inputs['mdoti_c']``: core inlet mass flow (re. rho_0c_0A_e) [-] * ``inputs['Tti_c']``: core inlet total temperature (re. T_0) [-] * ``inputs['Ttj_c']``: core exit total temperature (re. T_0) [-] * ``inputs['Pti_c']``: core inlet total pressure (re. p_O) [-] * ``inputs['DTt_des_c']``: core total temperature drop across the turbine (re. T_0) [-] * ``inputs['rho_te_c']``: core exit total density (re. rho_0) [-] * ``inputs['c_te_c']``: core exit total speed of sound (re. c_0) [-] * ``inputs['rho_ti_c']``: core inlet total density (re. rho_0) [-] * ``inputs['c_te_c']``: core inlet total speed of sound (re. c_0) [-] * ``inputs['mdot_f']``: fan inlet mass flow (re. rho_0c_0A_e) [-] * ``inputs['N_f']``: fan rotational speed (re. c_0/sqrt(A_e)) [-] * ``inputs['d_f']``: fan diameter (re. sqrt(A_e)) [-] * ``inputs['DTt_f']``: fan total temperature rise (re. T_0) [-] The *NormalizationEngineVariables* component computes the following outputs: * ``outputs['F_n']``: engine net thrust [N] * ``outputs['W_f']``: engine fuel mass flow [kg/s] * ``outputs['V_j_star']``: jet velocity (re. c_0) [-] * ``outputs['rho_j_star']``: jet total density (re. rho_0) [-] * ``outputs['A_j_star']``: jet area (re. A_e) [-] * ``outputs['Tt_j_star']``: jet total temperature (re. T_0) [-] * ``outputs['M_j']``: jet Mach number [-] * ``outputs['mdoti_c_star']``: core inlet mass flow (re. rho_0c_0A_e) [-] * ``outputs['Tti_c_star']``: core inlet total temperature (re. T_0) [-] * ``outputs['Ttj_c_star']``: core exit total temperature (re. T_0) [-] * ``outputs['Pti_c_star']``: core inlet total pressure (re. p_O) [-] * ``outputs['DTt_des_c_star']``: core total temperature drop across the turbine (re. T_0) [-] * ``outputs['rho_te_c_star']``: core exit total density (re. rho_0) [-] * ``outputs['c_te_c_star']``: core exit total speed of sound (re. c_0) [-] * ``outputs['rho_ti_c_star']``: core inlet total density (re. rho_0) [-] * ``outputs['c_te_c_star']``: core inlet total speed of sound (re. c_0) [-] * ``outputs['mdot_f_star']``: fan inlet mass flow (re. rho_0c_0A_e) [-] * ``outputs['N_f_star']``: fan rotational speed (re. c_0/sqrt(A_e)) [-] * ``outputs['d_f_star']``: fan diameter (re. sqrt(A_e)) [-] * ``outputs['A_f_star']``: fan inlet area (re. A_e) [-] * ``outputs['DTt_f_star']``: fan total temperature rise (re. T_0) [-] The *NormalizationEngineVariables* component has the following options: * ``settings``: pyna settings * ``n_t``: number of time steps in the noise time series """
[docs] def initialize(self): self.options.declare('settings', types=Settings) self.options.declare('n_t', types=int, desc='Number of time steps in trajectory')
[docs] def setup(self): # Load options settings = self.options['settings'] n_t = self.options['n_t'] # Add inputs self.add_input('c_0', val=np.ones(n_t), units='m/s', desc='ambient speed of sound [m/s]') self.add_input('T_0', val=np.ones(n_t), units='K', desc='ambient temperature [K]') self.add_input('p_0', val=np.ones(n_t), units='Pa', desc='ambient pressure [Pa]') self.add_input('rho_0', val=np.ones(n_t), units='kg/m**3', desc='ambient density [kg/m3]') if settings.jet_mixing and settings.jet_shock == False: self.add_input('V_j', val=np.ones(n_t), units=None, desc='jet velocity [m/s]') self.add_input('rho_j', val=np.ones(n_t), units=None, desc='jet total density [kg/m3]') self.add_input('A_j', val=np.ones(n_t), units=None, desc='jet area [m2]') self.add_input('Tt_j', val=np.ones(n_t), units=None, desc='jet total temperature [K]') elif settings.jet_shock and settings.jet_mixing == False: self.add_input('V_j', val=np.ones(n_t), units=None, desc='jet velocity [m/s]') self.add_input('A_j', val=np.ones(n_t), units=None, desc='jet area [m2]') self.add_input('Tt_j', val=np.ones(n_t), units=None, desc='jet total temperature [K]') elif settings.jet_shock and settings.jet_mixing: self.add_input('V_j', val=np.ones(n_t), units=None, desc='jet velocity [m/s]') self.add_input('rho_j', val=np.ones(n_t), units=None, desc='jet total density [kg/m3]') self.add_input('A_j', val=np.ones(n_t), units=None, desc='jet area [m2]') self.add_input('Tt_j', val=np.ones(n_t), units=None, desc='jet total temperature [K]') if settings.core: if settings.method_core_turb == 'GE': self.add_input('mdoti_c', val=np.ones(n_t), units=None, desc='core inlet mass flow [kg/s]') self.add_input('Tti_c', val=np.ones(n_t), units=None, desc='core inlet total temperature [K]') self.add_input('Ttj_c', val=np.ones(n_t), units=None, desc='core exit total temperature [K]') self.add_input('Pti_c', val=np.ones(n_t), units=None, desc='core inlet total pressure [Pa]') self.add_input('DTt_des_c', val=np.ones(n_t), units=None, desc='core total temperature drop across the turbine [K]') elif settings.method_core_turb == 'PW': self.add_input('mdoti_c', val=np.ones(n_t), units=None, desc='core inlet mass flow [kg/s]') self.add_input('Tti_c', val=np.ones(n_t), units=None, desc='core inlet total temperature [K]') self.add_input('Ttj_c', val=np.ones(n_t), units=None, desc='core exit total temperature [K]') self.add_input('Pti_c', val=np.ones(n_t), units=None, desc='core inlet total pressure [Pa]') self.add_input('rho_te_c', val=np.ones(n_t), units=None, desc='core exit total density [kg/m3]') self.add_input('c_te_c', val=np.ones(n_t), units=None, desc='core exit total speed of sound [m/s]') self.add_input('rho_ti_c', val=np.ones(n_t), units=None, desc='core inlet total density [kg/m3]') self.add_input('c_ti_c', val=np.ones(n_t), units=None, desc='core inlet total speed of sound [m/s]') if settings.fan_inlet or settings.fan_discharge: self.add_input('mdot_f', val=np.ones(n_t), units=None, desc='fan inlet mass flow [kg/s]') self.add_input('N_f', val=np.ones(n_t), units=None, desc='fan rotational speed [rpm]') self.add_input('DTt_f', val=np.ones(n_t), units=None, desc='fan total temperature rise [K]') self.add_input('A_f', val=np.ones(n_t), units=None, desc='fan inlet area [m2]') self.add_input('d_f', val=np.ones(n_t), units=None, desc='fan diameter [m]') # Add outputs if settings.jet_mixing and settings.jet_shock == False: self.add_output('V_j_star', val=np.ones(n_t), units=None, desc='jet velocity (re. c_0) [-]') self.add_output('rho_j_star', val=np.ones(n_t), units=None, desc='jet total density (re. rho_0) [-]') self.add_output('A_j_star', val=np.ones(n_t), units=None, desc='jet area (re. A_e) [-]') self.add_output('Tt_j_star', val=np.ones(n_t), units=None, desc='jet total temperature (re. T_0) [-]') elif settings.jet_shock and settings.jet_mixing == False: self.add_output('V_j_star', val=np.ones(n_t), units=None, desc='jet velocity (re. c_0) [-]') self.add_output('A_j_star', val=np.ones(n_t), units=None, desc='jet area (re. A_e) [-]') self.add_output('Tt_j_star', val=np.ones(n_t), units=None, desc='jet total temperature (re. T_0) [-]') self.add_output('M_j', val=np.ones(n_t), units=None) elif settings.jet_shock and settings.jet_mixing: self.add_output('V_j_star', val=np.ones(n_t), units=None, desc='jet velocity (re. c_0) [-]') self.add_output('rho_j_star', val=np.ones(n_t), units=None, desc='jet total density (re. rho_0) [-]') self.add_output('A_j_star', val=np.ones(n_t), units=None, desc='jet area (re. A_e) [-]') self.add_output('Tt_j_star', val=np.ones(n_t), units=None, desc='jet total temperature (re. T_0) [-]') if settings.core: if settings.method_core_turb == 'GE': self.add_output('mdoti_c_star', val=np.ones(n_t), units=None, desc='core inlet mass flow (re. rho_0c_0A_e) [-]') self.add_output('Tti_c_star', val=np.ones(n_t), units=None, desc='core inlet total temperature (re. T_0) [-]') self.add_output('Ttj_c_star', val=np.ones(n_t), units=None, desc='core exit total temperature (re. T_0) [-]') self.add_output('Pti_c_star', val=np.ones(n_t), units=None, desc='core inlet total pressure (re. p_O) [-]') self.add_output('DTt_des_c_star', val=np.ones(n_t), units=None, desc='core total temperature drop across the turbine (re. T_0) [-]') elif settings.method_core_turb == 'PW': self.add_output('mdoti_c_star', val=np.ones(n_t), units=None, desc='core inlet mass flow (re. rho_0c_0A_e) [-]') self.add_output('Tti_c_star', val=np.ones(n_t), units=None, desc='core inlet total temperature (re. T_0) [-]') self.add_output('Ttj_c_star', val=np.ones(n_t), units=None, desc='core exit total temperature (re. T_0) [-]') self.add_output('Pti_c_star', val=np.ones(n_t), units=None, desc='core inlet total pressure (re. p_O) [-]') self.add_output('rho_te_c_star', val=np.ones(n_t), units=None, desc='core exit total density (re. rho_0) [-]') self.add_output('c_te_c_star', val=np.ones(n_t), units=None, desc='core exit total speed of sound (re. c_0) [-]') self.add_output('rho_ti_c_star', val=np.ones(n_t), units=None, desc='core inlet total density (re. rho_0) [-]') self.add_output('c_ti_c_star', val=np.ones(n_t), units=None, desc='core inlet total speed of sound (re. c_0) [-]') if settings.fan_inlet or settings.fan_discharge: self.add_output('mdot_f_star', val=np.ones(n_t), units=None, desc='fan inlet mass flow (re. rho_0c_0A_e) [-]') self.add_output('N_f_star', val=np.ones(n_t), units=None, desc='fan rotational speed (re. c_0/sqrt(A_e)) [-]') self.add_output('DTt_f_star', val=np.ones(n_t), units=None, desc='fan total temperature rise (re. T_0) [-]') self.add_output('A_f_star', val=np.ones(n_t), units=None, desc='fan inlet area (re. A_e) [-]') self.add_output('d_f_star', val=np.ones(n_t), units=None, desc='fan diameter (re. sqrt(A_e)) [-]') self.add_output('F_n', val=np.ones(n_t), units='N') self.add_output('W_f', val=np.ones(n_t), units='kg/s')
[docs] def compute(self, inputs: openmdao.vectors.default_vector.DefaultVector, outputs: openmdao.vectors.default_vector.DefaultVector): # Load options settings = self.options['settings'] if settings.jet_mixing and settings.jet_shock == False: outputs['V_j_star'] = inputs['V_j'] / inputs['c_0'] outputs['rho_j_star'] = inputs['rho_j'] / inputs['rho_0'] outputs['A_j_star'] = inputs['A_j'] / settings.A_e outputs['Tt_j_star'] = inputs['Tt_j'] / inputs['T_0'] elif settings.jet_shock and settings.jet_mixing == False: outputs['V_j_star'] = inputs['V_j'] / inputs['c_0'] outputs['A_j_star'] = inputs['A_j'] / settings.A_e outputs['Tt_j_star'] = inputs['Tt_j'] / inputs['T_0'] elif settings.jet_shock and settings.jet_mixing: outputs['V_j_star'] = inputs['V_j'] / inputs['c_0'] outputs['rho_j_star'] = inputs['rho_j'] / inputs['rho_0'] outputs['A_j_star'] = inputs['A_j'] / settings.A_e outputs['Tt_j_star'] = inputs['Tt_j'] / inputs['T_0'] if settings.core: if settings.method_core_turb == 'GE': outputs['mdoti_c_star'] = inputs['mdoti_c'] / (inputs['rho_0'] * inputs['c_0'] * settings.A_e) outputs['Tti_c_star'] = inputs['Tti_c'] / inputs['T_0'] outputs['Ttj_c_star'] = inputs['Ttj_c'] / inputs['T_0'] outputs['Pti_c_star'] = inputs['Pti_c'] / inputs['p_0'] outputs['DTt_des_c_star'] = inputs['DTt_des_c'] / inputs['T_0'] elif settings.method_core_turb == 'PW': outputs['mdoti_c_star'] = inputs['mdoti_c'] / (inputs['rho_0'] * inputs['c_0'] * settings.A_e) outputs['Tti_c_star'] = inputs['Tti_c'] / inputs['T_0'] outputs['Ttj_c_star'] = inputs['Ttj_c'] / inputs['T_0'] outputs['Pti_c_star'] = inputs['Pti_c'] / inputs['p_0'] outputs['rho_te_c_star'] = inputs['rho_te_c'] / inputs['rho_0'] outputs['c_te_c_star'] = inputs['c_te_c'] / inputs['c_0'] outputs['rho_ti_c_star'] = inputs['rho_ti_c'] / inputs['rho_0'] outputs['c_ti_c_star'] = inputs['c_ti_c'] / inputs['c_0'] if settings.fan_inlet or settings.fan_discharge: outputs['DTt_f_star'] = inputs['DTt_f'] / inputs['T_0'] outputs['mdot_f_star'] = inputs['mdot_f'] / (inputs['rho_0'] * inputs['c_0'] * settings.A_e) outputs['d_f_star'] = inputs['d_f'] / np.sqrt(settings.A_e) outputs['A_f_star'] = inputs['A_f'] / settings.A_e outputs['N_f_star'] = inputs['N_f'] / (inputs['c_0'] / inputs['d_f'] * 60)