2.99E-07, 2.99E-07, 2.99E-07, 2.99E-07, 2.99E-07, 2.99E-07, 2.99E-07, 2.99E-07, 3.00E-07, 3.00E-07, 3.00E-07, 3.01E-07, 3.01E-07, 3.01E-07, 3.02E-07, 3.02E-07, 3.03E-07, 3.03E-07, 3.03E-07, 3.04E-07, 3.04E-07, 3.04E-07, 3.05E-07, 3.05E-07, 3.05E-07, 3.06E-07, 3.06E-07, 3.06E-07, 3.07E-07, 3.07E-07, 3.08E-07, 3.08E-07, 3.08E-07, 3.09E-07, 3.09E-07, 3.09E-07, 3.10E-07, 3.10E-07, 3.10E-07, 3.11E-07, 3.11E-07, 3.11E-07, 3.13E-07, 3.18E-07, 3.23E-07, 3.28E-07, 3.33E-07, 3.37E-07, 3.42E-07, 3.47E-07, 3.51E-07, 3.56E-07]) T_interp = Akima(USatm1976Data.alt, USatm1976Data.T) P_interp = Akima(USatm1976Data.alt, USatm1976Data.P) rho_interp = Akima(USatm1976Data.alt, USatm1976Data.rho) visc_interp = Akima(USatm1976Data.alt, USatm1976Data.viscosity) T_interp_deriv = T_interp.derivative(1) P_interp_deriv = P_interp.derivative(1) rho_interp_deriv = rho_interp.derivative(1) visc_interp_deriv = visc_interp.derivative(1) drho_dh_interp_deriv = rho_interp_deriv.derivative(1) class USatm1976Comp(ExplicitComponent): def initialize(self): self.options.declare('num_nodes', types=int, desc='Number of nodes to be evaluated in the RHS') gamma = 1.4 # Ratio of specific heads gas_c = 1716.49 # Gas constant (ft lbf)/(slug R) self._K = gamma * gas_c
0, 0.84, 0.88, 0.891, 0.901, 0.905, 0.9075, 0.909, 0.912, 0.914, 0.915, 0.915 ]) # TGL 2 - beyond next generation technology level ~4% better EtaPoly_SE2 = np.array([ 0, 0.855, 0.900, 0.912, 0.917, 0.920, 0.922, 0.9235, 0.926, 0.930, 0.931, 0.931 ]) # Create continuously differentiable interpolations EtaPoly_SE0_interp = Akima(Wc_SE, EtaPoly_SE0) EtaPoly_SE1_interp = Akima(Wc_SE, EtaPoly_SE1) EtaPoly_SE2_interp = Akima(Wc_SE, EtaPoly_SE2) # gather derivatives EtaPoly_SE0_interp_deriv = EtaPoly_SE0_interp.derivative(1) EtaPoly_SE1_interp_deriv = EtaPoly_SE1_interp.derivative(1) EtaPoly_SE2_interp_deriv = EtaPoly_SE2_interp.derivative(1) class SmallCoreEffBalance(ImplicitComponent): """ Polytropic/ Adiabatic efficiency balance. """ def initialize(self): self.options.declare( 'tech_level', default=0, values=[0, 1, 2], desc= 'Set Technology level, 0 - current tech, 1 - next gen ~2% better, 2 - beyond next gen ~4% better' ) self.options.declare(
2.99E-07, 2.99E-07, 2.99E-07, 2.99E-07, 2.99E-07, 2.99E-07, 2.99E-07, 2.99E-07, 2.99E-07, 2.99E-07, 2.99E-07, 2.99E-07, 2.99E-07, 2.99E-07, 2.99E-07, 2.99E-07, 2.99E-07, 2.99E-07, 2.99E-07, 3.00E-07, 3.00E-07, 3.00E-07, 3.01E-07, 3.01E-07, 3.01E-07, 3.02E-07, 3.02E-07, 3.03E-07, 3.03E-07, 3.03E-07, 3.04E-07, 3.04E-07, 3.04E-07, 3.05E-07, 3.05E-07, 3.05E-07, 3.06E-07, 3.06E-07, 3.06E-07, 3.07E-07, 3.07E-07, 3.08E-07, 3.08E-07, 3.08E-07, 3.09E-07, 3.09E-07, 3.09E-07, 3.10E-07, 3.10E-07, 3.10E-07, 3.11E-07, 3.11E-07, 3.11E-07, 3.13E-07, 3.18E-07, 3.23E-07, 3.28E-07, 3.33E-07, 3.37E-07, 3.42E-07, 3.47E-07, 3.51E-07, 3.56E-07 ]) #units='lbf*s/ft**2' T_interp = Akima(USatm1976Data.alt, USatm1976Data.T) P_interp = Akima(USatm1976Data.alt, USatm1976Data.P) rho_interp = Akima(USatm1976Data.alt, USatm1976Data.rho) T_interp_deriv = T_interp.derivative(1) P_interp_deriv = P_interp.derivative(1) rho_interp_deriv = rho_interp.derivative(1) drho_dh_interp_deriv = rho_interp.derivative(2) class USatm1976Comp(ExplicitComponent): def setup(self): self.add_input('alt', val=1., units='ft') self.add_output('Ts', val=1., units='degR') self.add_output('Ps', val=1., units='psi') self.add_output('rhos', val=1., units='slug/ft**3') self.add_output('drhos_dalt', val=1., units='slug/ft**4')
3.53E-07,3.51E-07,3.49E-07,3.47E-07,3.45E-07,3.42E-07,3.40E-07,3.38E-07,3.36E-07,3.34E-07,3.31E-07,3.29E-07,3.27E-07,3.25E-07, 3.22E-07,3.20E-07,3.18E-07,3.16E-07,3.13E-07,3.11E-07,3.09E-07,3.06E-07,3.04E-07,3.02E-07,2.99E-07,2.99E-07,2.99E-07,2.99E-07, 2.99E-07,2.99E-07,2.99E-07,2.99E-07,2.99E-07,2.99E-07,2.99E-07,2.99E-07,2.99E-07,2.99E-07,2.99E-07,2.99E-07,2.99E-07,2.99E-07, 2.99E-07,2.99E-07,2.99E-07,2.99E-07,2.99E-07,2.99E-07,2.99E-07,2.99E-07,2.99E-07,2.99E-07,2.99E-07,2.99E-07,2.99E-07,3.00E-07, 3.00E-07,3.00E-07,3.01E-07,3.01E-07,3.01E-07,3.02E-07,3.02E-07,3.03E-07,3.03E-07,3.03E-07,3.04E-07,3.04E-07,3.04E-07,3.05E-07, 3.05E-07,3.05E-07,3.06E-07,3.06E-07,3.06E-07,3.07E-07,3.07E-07,3.08E-07,3.08E-07,3.08E-07,3.09E-07,3.09E-07,3.09E-07,3.10E-07, 3.10E-07,3.10E-07,3.11E-07,3.11E-07,3.11E-07,3.13E-07,3.18E-07,3.23E-07,3.28E-07,3.33E-07,3.37E-07,3.42E-07,3.47E-07,3.51E-07, 3.56E-07]) #units='lbf*s/ft**2' T_interp = Akima(USatm1976Data.alt, USatm1976Data.T) P_interp = Akima(USatm1976Data.alt, USatm1976Data.P) rho_interp = Akima(USatm1976Data.alt, USatm1976Data.rho) a_interp = Akima(USatm1976Data.alt, USatm1976Data.a) viscosity_interp = Akima(USatm1976Data.alt, USatm1976Data.viscosity) T_interp_deriv = T_interp.derivative(1) P_interp_deriv = P_interp.derivative(1) rho_interp_deriv = rho_interp.derivative(1) a_interp_deriv = a_interp.derivative(1) viscosity_interp_deriv = viscosity_interp.derivative(1) class AtmosComp(ExplicitComponent): def setup(self): self.add_input('altitude', val=1., units='ft') self.add_input('Mach_number', val=1.) self.add_output('T', val=1., units='degR') self.add_output('P', val=1., units='psi') self.add_output('rho', val=1., units='slug/ft**3')
2.99E-07, 2.99E-07, 2.99E-07, 2.99E-07, 2.99E-07, 3.00E-07, 3.00E-07, 3.00E-07, 3.01E-07, 3.01E-07, 3.01E-07, 3.02E-07, 3.02E-07, 3.03E-07, 3.03E-07, 3.03E-07, 3.04E-07, 3.04E-07, 3.04E-07, 3.05E-07, 3.05E-07, 3.05E-07, 3.06E-07, 3.06E-07, 3.06E-07, 3.07E-07, 3.07E-07, 3.08E-07, 3.08E-07, 3.08E-07, 3.09E-07, 3.09E-07, 3.09E-07, 3.10E-07, 3.10E-07, 3.10E-07, 3.11E-07, 3.11E-07, 3.11E-07, 3.13E-07, 3.18E-07, 3.23E-07, 3.28E-07, 3.33E-07, 3.37E-07, 3.42E-07, 3.47E-07, 3.51E-07, 3.56E-07 ]) #units='lbf*s/ft**2' temp_interp = Akima(USatm1976Data.h, USatm1976Data.temp) pres_interp = Akima(USatm1976Data.h, USatm1976Data.pres) rho_interp = Akima(USatm1976Data.h, USatm1976Data.rho) a_interp = Akima(USatm1976Data.h, USatm1976Data.a) viscosity_interp = Akima(USatm1976Data.h, USatm1976Data.viscosity) temp_interp_deriv = temp_interp.derivative(1) pres_interp_deriv = pres_interp.derivative(1) rho_interp_deriv = rho_interp.derivative(1) a_interp_deriv = a_interp.derivative(1) viscosity_interp_deriv = viscosity_interp.derivative(1) class AtmosComp(ExplicitComponent): def initialize(self): self.options.declare('num_nodes', types=int, default=1) def setup(self): nn = self.options['num_nodes'] self.add_input('h', val=np.ones(nn), units='ft')
2.99E-07, 2.99E-07, 3.00E-07, 3.00E-07, 3.00E-07, 3.01E-07, 3.01E-07, 3.01E-07, 3.02E-07, 3.02E-07, 3.03E-07, 3.03E-07, 3.03E-07, 3.04E-07, 3.04E-07, 3.04E-07, 3.05E-07, 3.05E-07, 3.05E-07, 3.06E-07, 3.06E-07, 3.06E-07, 3.07E-07, 3.07E-07, 3.08E-07, 3.08E-07, 3.08E-07, 3.09E-07, 3.09E-07, 3.09E-07, 3.10E-07, 3.10E-07, 3.10E-07, 3.11E-07, 3.11E-07, 3.11E-07, 3.13E-07, 3.18E-07, 3.23E-07, 3.28E-07, 3.33E-07, 3.37E-07, 3.42E-07, 3.47E-07, 3.51E-07, 3.56E-07]) # Interpolations as a function of altitide T_interp_alt = Akima(USatm1976Data.alt, USatm1976Data.T) P_interp_alt = Akima(USatm1976Data.alt, USatm1976Data.P) rho_interp_alt = Akima(USatm1976Data.alt, USatm1976Data.rho) visc_interp_alt = Akima(USatm1976Data.alt, USatm1976Data.viscosity) # Their derivatives T_interp_deriv = T_interp_alt.derivative(1) P_interp_deriv = P_interp_alt.derivative(1) rho_interp_deriv = rho_interp_alt.derivative(1) visc_interp_deriv = visc_interp_alt.derivative(1) drho_dh_interp_deriv = rho_interp_deriv.derivative(1) # Interpolations as a function of density a_vs_rho_interp = Akima(np.flip(USatm1976Data.rho), np.flip(USatm1976Data.a)) a_vs_rho_interp_deriv = a_vs_rho_interp.derivative(1) class USatm1976Group(Group): def initialize(self): self.options.declare('num_nodes', types=int, desc='Number of nodes to be evaluated in the RHS') def setup(self):