Source code for engine

import pdb
import pandas as pd
import numpy as np
from dataclasses import dataclass
from pyNA.src.settings import Settings


[docs]@dataclass class Engine: """ Engine class containing the following parameters * ``time_series``: time series of engine parameters for a predefined trajectory * ``deck``: engine deck used for trajectory computations """ # Initialize aircraft name
[docs] def __init__(self) -> None: # Initialization self.time_series = dict() self.deck = dict()
[docs] def load_time_series(self, settings, engine_file_name='Engine_to.csv') -> None: """ Load engine time series for noise computations. :param settings: pyna settings :type settings: Dict[str, Any] :param engine_file_name: File name of engine time series :type engine_file_name: str :return: None """ # Load raw inputs from .csv file # Source: validation noise assessment data set of NASA STCA (Berton et al., 2019) self.time_series = pd.read_csv(settings.pyNA_directory + '/cases/' + settings.case_name + '/engine/' + engine_file_name) return None
[docs] def load_operating_point(self, settings, time_step, engine_file_name='Engine_to.csv') -> None: """ Load engine operating point for noise distribution calculations. :param settings: pyna settings :type settings: Dict[str, Any] :param time_step: :type time_step: :param engine_file_name: File name of engine time series :type engine_file_name: str :return: None """ # Load raw inputs from .csv file # Source: validation noise assessment data set of NASA STCA (Berton et al., 2019) self.time_series = pd.read_csv(settings.pyNA_directory + '/cases/' + settings.case_name + '/engine/' + engine_file_name) # Select operating point cols = self.time_series.columns op_point = pd.DataFrame(np.reshape(self.time_series.values[time_step, :], (1, len(cols)))) op_point.columns = cols # Duplicate operating for theta range (np.linspace(0, 180, 19)) self.time_series = pd.DataFrame() for i in np.arange(19): self.time_series = self.time_series.append(op_point) return None
[docs] def load_deck(self, settings: Settings) -> None: """ Load engine deck for trajectory computations. :return: None """ # Load self.engine data and create interpolation functions data = pd.read_csv(settings.pyNA_directory + '/cases/' + settings.case_name + '/engine/' + settings.engine_file_name) self.deck['z'] = np.unique(data['z [m]'].values) self.deck['M_0'] = np.unique(data['M_0 [-]'].values) self.deck['TS'] = np.unique(data['T/TMAX [-]'].values) self.deck['F_n'] = np.zeros((self.deck['z'].shape[0], self.deck['M_0'].shape[0], self.deck['TS'].shape[0])) self.deck['W_f'] = np.zeros((self.deck['z'].shape[0], self.deck['M_0'].shape[0], self.deck['TS'].shape[0])) self.deck['V_j'] = np.zeros((self.deck['z'].shape[0], self.deck['M_0'].shape[0], self.deck['TS'].shape[0])) self.deck['Tt_j'] = np.zeros((self.deck['z'].shape[0], self.deck['M_0'].shape[0], self.deck['TS'].shape[0])) self.deck['rho_j'] = np.zeros((self.deck['z'].shape[0], self.deck['M_0'].shape[0], self.deck['TS'].shape[0])) self.deck['A_j'] = np.zeros((self.deck['z'].shape[0], self.deck['M_0'].shape[0], self.deck['TS'].shape[0])) self.deck['M_j'] = np.zeros((self.deck['z'].shape[0], self.deck['M_0'].shape[0], self.deck['TS'].shape[0])) self.deck['mdot_i_c'] = np.zeros((self.deck['z'].shape[0], self.deck['M_0'].shape[0], self.deck['TS'].shape[0])) self.deck['Tti_c'] = np.zeros((self.deck['z'].shape[0], self.deck['M_0'].shape[0], self.deck['TS'].shape[0])) self.deck['Ttj_c'] = np.zeros((self.deck['z'].shape[0], self.deck['M_0'].shape[0], self.deck['TS'].shape[0])) self.deck['Pti_c'] = np.zeros((self.deck['z'].shape[0], self.deck['M_0'].shape[0], self.deck['TS'].shape[0])) self.deck['DTt_des_c'] = np.zeros((self.deck['z'].shape[0], self.deck['M_0'].shape[0], self.deck['TS'].shape[0])) self.deck['rho_te_c'] = np.zeros((self.deck['z'].shape[0], self.deck['M_0'].shape[0], self.deck['TS'].shape[0])) self.deck['rho_ti_c'] = np.zeros((self.deck['z'].shape[0], self.deck['M_0'].shape[0], self.deck['TS'].shape[0])) self.deck['c_te_c'] = np.zeros((self.deck['z'].shape[0], self.deck['M_0'].shape[0], self.deck['TS'].shape[0])) self.deck['c_ti_c'] = np.zeros((self.deck['z'].shape[0], self.deck['M_0'].shape[0], self.deck['TS'].shape[0])) self.deck['DTt_f'] = np.zeros((self.deck['z'].shape[0], self.deck['M_0'].shape[0], self.deck['TS'].shape[0])) self.deck['mdot_f'] = np.zeros((self.deck['z'].shape[0], self.deck['M_0'].shape[0], self.deck['TS'].shape[0])) self.deck['N_f'] = np.zeros((self.deck['z'].shape[0], self.deck['M_0'].shape[0], self.deck['TS'].shape[0])) self.deck['A_f'] = np.zeros((self.deck['z'].shape[0], self.deck['M_0'].shape[0], self.deck['TS'].shape[0])) self.deck['d_f'] = np.zeros((self.deck['z'].shape[0], self.deck['M_0'].shape[0], self.deck['TS'].shape[0])) self.deck['M_d_f'] = np.zeros((self.deck['z'].shape[0], self.deck['M_0'].shape[0], self.deck['TS'].shape[0])) cntr = -1 for i in np.arange(self.deck['z'].shape[0]): for j in np.arange(self.deck['M_0'].shape[0]): for k in np.flip(np.arange(self.deck['TS'].shape[0])): cntr = cntr + 1 # F_n[i, j, k] = 1000. * data['DP.NetThrust[kN]'].values[cntr] self.deck['F_n'][i, j, k] = data['Fn [N]'].values[cntr] self.deck['W_f'][i, j, k] = data['Wf [kg/s]'].values[cntr] self.deck['V_j'][i, j, k] = data['jet_V [m/s]'].values[cntr] self.deck['Tt_j'][i, j, k] = data['jet_Tt [K]'].values[cntr] self.deck['rho_j'][i, j, k] = data['jet_rho [kg/m3]'].values[cntr] self.deck['A_j'][i, j, k] = data['jet_A [m2]'].values[cntr] self.deck['M_j'][i, j, k] = data['jet_M [-]'].values[cntr] self.deck['mdot_i_c'][i, j, k] = data['core_mdot_in [kg/s]'].values[cntr] self.deck['Tti_c'][i, j, k] = data['core_Tt_in [K]'].values[cntr] self.deck['Ttj_c'][i, j, k] = data['core_Tt_out [K]'].values[cntr] self.deck['Pti_c'][i, j, k] = data['core_Pt_in [Pa]'].values[cntr] self.deck['DTt_des_c'][i, j, k] = data['core_Tt_out [K]'].values[0] - \ data['core_Tt_in [K]'].values[0] self.deck['rho_te_c'][i, j, k] = data['core_LPT_rho_out [kg/m3]'].values[cntr] self.deck['rho_ti_c'][i, j, k] = data['core_HPT_rho_in [kg/m3]'].values[cntr] self.deck['c_te_c'][i, j, k] = data['core_LPT_c_out [m/s]'].values[cntr] self.deck['c_ti_c'][i, j, k] = data['core_HPT_c_in [m/s]'].values[cntr] self.deck['DTt_f'][i, j, k] = data['fan_DTt [K]'].values[cntr] self.deck['mdot_f'][i, j, k] = data['fan_mdot_in [kg/s]'].values[cntr] self.deck['N_f'][i, j, k] = data['fan_N [rpm]'].values[cntr] self.deck['A_f'][i, j, k] = data['fan_A [m2]'].values[cntr] self.deck['d_f'][i, j, k] = data['fan_d [m]'].values[cntr] self.deck['M_d_f'][i, j, k] = data['fan_M_d [-]'].values[cntr] return None