예제 #1
0
def get_last_work_stage(stage_geom: StageGeomAndHeatDrop,
                        prev_stage: StageGasDynamics, L_stage_rel,
                        eta_t0) -> StageGasDynamics:
    logger.info('get_last_work_stage')
    L_stage = L_stage_rel / (
        prev_stage.G_stage_out / prev_stage.G_turbine -
        (stage_geom.g_lb + stage_geom.g_ld + stage_geom.g_lk))
    p0_stag = prev_stage.p2 * (1 + (stage_geom.mu * prev_stage.c2) ** 2 / (2 * prev_stage.c_p_gas *
                                                                           prev_stage.T_st)) ** \
                              (prev_stage.k_gas / (prev_stage.k_gas - 1))
    result = StageGasDynamics(prev_stage.T_st_stag,
                              p0_stag,
                              prev_stage.G_stage_out,
                              prev_stage.G_turbine,
                              prev_stage.alpha_air,
                              KeroseneCombustionProducts(),
                              stage_geom.rho,
                              stage_geom.phi,
                              stage_geom.psi,
                              stage_geom.l1,
                              stage_geom.l2,
                              stage_geom.D1,
                              stage_geom.D2,
                              stage_geom.delta_r_rk,
                              stage_geom.n,
                              stage_geom.epsilon,
                              stage_geom.g_lk,
                              stage_geom.g_ld,
                              stage_geom.g_lb,
                              L_t=L_stage,
                              eta_t0=eta_t0)
    return result
예제 #2
0
def get_last_pressure_stage(turbine_geom: TurbineGeomAndHeatDropDistribution,
                            stage_geom: StageGeomAndHeatDrop,
                            prev_stage: StageGasDynamics) -> StageGasDynamics:
    logger.info('get_last_pressure_stage')
    p0_stag = prev_stage.p2 * (1 + (stage_geom.mu * prev_stage.c2)**2 / (2 * prev_stage.c_p_gas * prev_stage.T_st)) ** \
                              (prev_stage.k_gas / (prev_stage.k_gas - 1))
    result = StageGasDynamics(prev_stage.T_st_stag,
                              p0_stag,
                              prev_stage.G_stage_out,
                              prev_stage.G_turbine,
                              prev_stage.alpha_air,
                              KeroseneCombustionProducts(),
                              stage_geom.rho,
                              stage_geom.phi,
                              stage_geom.psi,
                              stage_geom.l1,
                              stage_geom.l2,
                              stage_geom.D1,
                              stage_geom.D2,
                              stage_geom.delta_r_rk,
                              stage_geom.n,
                              stage_geom.epsilon,
                              stage_geom.g_lk,
                              stage_geom.g_ld,
                              stage_geom.g_lb,
                              p2=turbine_geom.p_t)
    return result
예제 #3
0
def get_intermediate_stage(stage_geom: StageGeomAndHeatDrop, prev_stage: StageGasDynamics, precise_heat_drop=True) -> \
        StageGasDynamics:
    logger.info('get_intermediate_stage')
    if precise_heat_drop:
        H0 = stage_geom.H0 * (1 + (1 - stage_geom.mu)**2 * prev_stage.c2**2 /
                              (2 * prev_stage.c_p_gas * prev_stage.T_st)
                              ) + 0.5 * (stage_geom.mu * prev_stage.c2)**2
    else:
        H0 = stage_geom.H0
    p0_stag = prev_stage.p2 * (1 + (stage_geom.mu * prev_stage.c2)**2 / (2 * prev_stage.c_p_gas * prev_stage.T_st)) ** \
                              (prev_stage.k_gas / (prev_stage.k_gas - 1))
    result = StageGasDynamics(prev_stage.T_st_stag,
                              p0_stag,
                              prev_stage.G_stage_out,
                              prev_stage.G_turbine,
                              prev_stage.alpha_air,
                              KeroseneCombustionProducts(),
                              stage_geom.rho,
                              stage_geom.phi,
                              stage_geom.psi,
                              stage_geom.l1,
                              stage_geom.l2,
                              stage_geom.D1,
                              stage_geom.D2,
                              stage_geom.delta_r_rk,
                              stage_geom.n,
                              stage_geom.epsilon,
                              stage_geom.g_lk,
                              stage_geom.g_ld,
                              stage_geom.g_lb,
                              H0=H0)
    return result
예제 #4
0
def get_first_stage_gas_dynamics(stage_geom: StageGeomAndHeatDrop, T0_stag,
                                 p0_stag, G_turbine,
                                 alpha_air) -> StageGasDynamics:
    logger.info('get_first_stage_gas_dynamics')
    result = StageGasDynamics(T0_stag,
                              p0_stag,
                              G_turbine,
                              G_turbine,
                              alpha_air,
                              KeroseneCombustionProducts(),
                              stage_geom.rho,
                              stage_geom.phi,
                              stage_geom.psi,
                              stage_geom.l1,
                              stage_geom.l2,
                              stage_geom.D1,
                              stage_geom.D2,
                              stage_geom.delta_r_rk,
                              stage_geom.n,
                              stage_geom.epsilon,
                              stage_geom.g_lk,
                              stage_geom.g_ld,
                              stage_geom.g_lb,
                              H0=stage_geom.H0)
    return result
예제 #5
0
 def _compute_outlet(self):
     self._outlet.input.alpha = self._combustion_chamber.output.alpha
     self._outlet.input.lam_out = self.lam_out
     self._outlet.input.p_out = self.p_a
     self._outlet.input.sigma_out = self.sigma_out
     self._outlet.input.work_fluid = KeroseneCombustionProducts()
     logger.info('%s _compute_outlet' % str(self))
     self._outlet.compute_output()
예제 #6
0
 def _compute_power_turbine(self):
     self._power_turbine.input.alpha = self._combustion_chamber.output.alpha
     self._power_turbine.input.work_fluid = KeroseneCombustionProducts()
     self._power_turbine.input.eta_turb_stag_p = self.eta_power_turb_stag_p
     self._power_turbine.input.p_in_stag = self._compressor_turbine.output.p_out_stag
     self._power_turbine.input.T_in_stag = self._compressor_turbine.output.T_out_stag
     self._power_turbine.input.T_out_stag_init = 600
     logger.info('%s _compute_power_turbine' % str(self))
     self._power_turbine.compute_output()
예제 #7
0
 def _compute_compressor_turbine(self):
     self._compressor_turbine.input.T_in_stag = self.T_comb_stag
     self._compressor_turbine.input.p_in_stag = self._combustion_chamber.output.p_out_stag
     self._compressor_turbine.input.alpha = self._combustion_chamber.output.alpha
     self._compressor_turbine.input.eta_m = self.eta_m
     self._compressor_turbine.input.eta_turb_stag_p = self.eta_comp_turb_stag_p
     self._compressor_turbine.input.g_gas = self._combustion_chamber.output.g_gas
     self._compressor_turbine.input.L_comp = self._compressor.output.L_comp
     self._compressor_turbine.input.pi_turb_stag_init = 3
     self._compressor_turbine.input.work_fluid = KeroseneCombustionProducts()
     logger.info('%s _compute_compressor_turbine' % str(self))
     self._compressor_turbine.compute_output()
예제 #8
0
    def __init__(self, turbine_type: TurbineType, **kwargs):
        """

        :param turbine_type:
        :param kwargs: gamma_av, gamma_sum, gamma_in, gamma_out
        """
        self._T_g_stag = None
        self._p_g_stag = None
        self._G_turbine = None
        self._kwargs = kwargs
        self._alpha_air = None
        self._stage_number = None
        self._k_n = 6.8
        self._work_fluid = KeroseneCombustionProducts()
        self._l1_D1_ratio = None
        self._n = None
        self._c21_init = None
        self._H01_init = None
        self._rho1 = None
        self._phi1 = 0.97
        self._T_t_stag_cycle = None
        self._p_t_stag_cycle = None
        self._L_t_cycle = None
        self._alpha11 = None
        self._eta_t_stag_cycle = None
        self._H_t_stag_cycle = None
        self._geom = None
        self.c_p_gas = None
        self.k_gas = None
        self.c_p_gas_stag = None
        self.k_gas_stag = None
        self._gas_dynamics = list()
        self._type = turbine_type
        if ('gamma_av' in kwargs) and ('gamma_sum' in kwargs):
            self._gamma_av = kwargs['gamma_av']
            self._gamma_in = None
            self._gamma_out = None
            self._gamma_sum = kwargs['gamma_sum']
        elif ('gamma_in' in kwargs) and ('gamma_out' in kwargs):
            self._gamma_av = None
            self._gamma_in = kwargs['gamma_in']
            self._gamma_out = kwargs['gamma_out']
            self._gamma_sum = None
        else:
            assert False, 'gamma_av and gamma_sum or gamma_in and gamma_out must be set'
        self.L_t_sum = None
        self.H_t = None
        self.H_t_stag = None
        self.eta_t = None
        self.eta_t_stag = None
        self.eta_l = None
        self.N = None
        self.eta_m = None
예제 #9
0
 def _init_turbine_geom(self):
     try:
         self._geom = TurbineGeomAndHeatDropDistribution(self.stage_number, self.eta_t_stag_cycle,
                                                         self.H_t_stag_cycle,
                                                         self.c21_init, self.n, KeroseneCombustionProducts(),
                                                         self.T_g_stag, self.p_g_stag, self.alpha_air,
                                                         self.G_turbine, self.l1_D1_ratio, self.H01_init,
                                                         self.rho1, self.phi1, self.alpha11, self.k_n,
                                                         self.T_t_stag_cycle,
                                                         self.p_t_stag_cycle, **self._kwargs)
     except AssertionError:
         pass
예제 #10
0
 def _compute_combustion_chamber(self):
     self._combustion_chamber.input.T_out_stag = self.T_comb_stag
     self._combustion_chamber.input.eta_comb = self.eta_comb
     self._combustion_chamber.input.g_cooling = self.g_cooling
     self._combustion_chamber.input.g_outflow = self.g_outflow
     self._combustion_chamber.input.g_return = self.g_return
     self._combustion_chamber.input.l0 = self.l0
     self._combustion_chamber.input.p_in_stag = self._compressor.output.p_out_stag
     self._combustion_chamber.input.Q_n = self.Q_n
     self._combustion_chamber.input.sigma_comb = self.sigma_comb
     self._combustion_chamber.input.T_in_stag = self._compressor.output.T_out_stag
     self._combustion_chamber.input.work_fluid_in = Air()
     self._combustion_chamber.input.work_fluid_out = KeroseneCombustionProducts()
     logger.info('%s _compute_combustion_chamber' % str(self))
     self._combustion_chamber.compute_output()
예제 #11
0
        turbine_geometry.compute_output()
        dh01_rel = abs(turbine_geometry.first.H0 -
                       turbine_geometry.H01) / turbine_geometry.H01
        logger.debug('specify_h01 dh01_rel = %s' % dh01_rel)
        H01 = turbine_geometry.first.H0


if __name__ == '__main__':
    deg = np.pi / 180
    turbine_geom = TurbineGeomAndHeatDropDistribution(
        2,
        0.91,
        300e3,
        150,
        10e3,
        KeroseneCombustionProducts(),
        1400,
        1.3e6,
        2.4,
        9,
        1 / 3.5,
        180e3,
        0.8,
        0.96,
        15 * deg,
        6.8,
        850,
        120e3,
        gamma_av=0 * deg,
        gamma_sum=15 * deg)
    turbine_geom[0].delta_a_b_sa_ratio = 0.23