def cp2eff(prop, Cp, J, tip_mach): """ Returns prop efficiency, given power coefficient (Cp), advance ratio (J) and the mach number of the blade tip. """ mach_low = max( prop.eff_mach_min, prop.prop_eff_map[max(min(N.searchsorted(prop.prop_eff_map[:, 0, 0], tip_mach) - 1, prop.z_size - 1), 0), 0, 0], ) if mach_low == prop.eff_mach_max: mach_low = prop.prop_eff_map[-2, 0, 0] mach_high = min( prop.eff_mach_max, prop.prop_eff_map[min(N.searchsorted(prop.prop_eff_map[:, 0, 0], tip_mach), prop.z_size - 1), 0, 0], ) if mach_high == prop.eff_mach_min: mach_high = prop.prop_eff_map[1, 0, 0] J_low = max( prop.eff_J_min, prop.prop_eff_map[0, 0, max(min(N.searchsorted(prop.prop_eff_map[0, 0, 1:], J), prop.x_size - 2), 1)], ) if J_low == prop.eff_J_max: J_low = prop.prop_eff_map[0, 0, -2] J_high = min( prop.eff_J_max, prop.prop_eff_map[0, 0, min(N.searchsorted(prop.prop_eff_map[0, 0, 1:], J), prop.x_size - 2) + 1], ) if J_high == prop.eff_J_min: J_high = prop.prop_eff_map[0, 0, 2] if J_high == J_low: J_high = J_low + 0.1 Cp_low = max( prop.eff_Cp_min, prop.prop_eff_map[0, max(min(N.searchsorted(prop.prop_eff_map[0, 1:, 0], Cp), prop.y_size - 1), 1), 0], ) if Cp_low == prop.eff_Cp_max: # print 'in CP-low' Cp_low = prop.prop_eff_map[0, -2, 0] Cp_high = min( prop.eff_Cp_max, prop.prop_eff_map[0, min(N.searchsorted(prop.prop_eff_map[0, 1:, 0], Cp), prop.y_size - 1) + 1, 0], ) if Cp_high == prop.eff_Cp_min: # print 'in CP-high' Cp_high = prop.prop_eff_map[0, 2, 0] if Cp_high == Cp_low: Cp_high = Cp_low + 0.01 # get eff for mach_low, J_low and Cp_low eff_low_low_low = pull_eff_data_point(prop, mach_low, J_low, Cp_low) # get eff for mach_low, J_high and Cp_low eff_low_high_low = pull_eff_data_point(prop, mach_low, J_high, Cp_low) # get eff for mach_low, J_low and Cp_high eff_low_low_high = pull_eff_data_point(prop, mach_low, J_low, Cp_high) # get eff for mach_low, J_high and Cp_high eff_low_high_high = pull_eff_data_point(prop, mach_low, J_high, Cp_high) # get eff for mach_high, J_low and Cp_low eff_high_low_low = pull_eff_data_point(prop, mach_high, J_low, Cp_low) # get eff for mach_high, J_high and Cp_low eff_high_high_low = pull_eff_data_point(prop, mach_high, J_high, Cp_low) # get eff for mach_high, J_low and Cp_high eff_high_low_high = pull_eff_data_point(prop, mach_high, J_low, Cp_high) # get eff for mach_high, J_high and Cp_high eff_high_high_high = pull_eff_data_point(prop, mach_high, J_high, Cp_high) x = [J_low, J_high] y = [Cp_low, Cp_high] z = [mach_low, mach_high] values = [ [[eff_low_low_low, eff_low_high_low], [eff_low_low_high, eff_low_high_high]], [[eff_high_low_low, eff_high_high_low], [eff_high_low_high, eff_high_high_high]], ] # print '[J_low, J_high]:', x # print '[Cp_low, Cp_high]:', y # print '[mach_low, mach_high:]', z # print '[[[eff_low_low_low, eff_low_high_low], [eff_low_low_high, eff_low_high_high]], [[eff_high_low_low, eff_high_high_low], [eff_high_low_high, eff_high_high_high]]]:', values # print 'J:', J # print 'Cp:', Cp # print 'tip mach:', tip_mach eff = I.interpolate3(x, y, z, values, J, Cp, tip_mach) return eff
def cp2ct(prop, Cp, J, tip_mach): """ Returns thrust coefficient, given power coefficient (Cp), advance ratio (J) and the mach number of the blade tip. """ mach_low = max( prop.Ct_mach_min, prop.prop_CT_map[max(min(N.searchsorted(prop.prop_CT_map[:, 0, 0], tip_mach) - 1, prop.z_size - 1), 0), 0, 0], ) if mach_low == prop.Ct_mach_max: mach_low = prop.prop_CT_map[-2, 0, 0] mach_high = min( prop.Ct_mach_max, prop.prop_CT_map[min(N.searchsorted(prop.prop_CT_map[:, 0, 0], tip_mach), prop.z_size - 1), 0, 0], ) if mach_high == prop.Ct_mach_min: mach_high = prop.prop_CT_map[1, 0, 0] J_low = max( prop.Ct_J_min, prop.prop_CT_map[0, 0, max(min(N.searchsorted(prop.prop_CT_map[0, 0, 1:], J), prop.x_size - 2), 1)], ) if J_low == prop.Ct_J_max: J_low = prop.prop_CT_map[0, 0, -2] J_high = min( prop.Ct_J_max, prop.prop_CT_map[0, 0, min(N.searchsorted(prop.prop_CT_map[0, 0, 1:], J), prop.x_size - 2) + 1] ) if J_high == prop.Ct_J_min: J_high = prop.prop_CT_map[0, 0, 2] Cp_low = max( prop.Ct_Cp_min, prop.prop_CT_map[0, max(min(N.searchsorted(prop.prop_CT_map[0, 1:, 0], Cp), prop.y_size - 2), 1), 0], ) if Cp_low == prop.Ct_Cp_max: Cp_low = prop.prop_CT_map[0, -2, 0] Cp_high = min( prop.Ct_Cp_max, prop.prop_CT_map[0, min(N.searchsorted(prop.prop_CT_map[0, 1:, 0], Cp), prop.y_size - 2) + 1, 0] ) if Cp_high == prop.Ct_Cp_min: Cp_high = prop.prop_CT_map[0, 2, 0] # get Ct for mach_low, J_low and Cp_low Ct_low_low_low = pull_Ct_data_point(prop, mach_low, J_low, Cp_low) # get Ct for mach_low, J_high and Cp_low Ct_low_high_low = pull_Ct_data_point(prop, mach_low, J_high, Cp_low) # get Ct for mach_low, J_low and Cp_high Ct_low_low_high = pull_Ct_data_point(prop, mach_low, J_low, Cp_high) # get Ct for mach_low, J_high and Cp_high Ct_low_high_high = pull_Ct_data_point(prop, mach_low, J_high, Cp_high) # get Ct for mach_high, J_low and Cp_low Ct_high_low_low = pull_Ct_data_point(prop, mach_high, J_low, Cp_low) # get Ct for mach_high, J_high and Cp_low Ct_high_high_low = pull_Ct_data_point(prop, mach_high, J_high, Cp_low) # get Ct for mach_high, J_low and Cp_high Ct_high_low_high = pull_Ct_data_point(prop, mach_high, J_low, Cp_high) # get Ct for mach_high, J_high and Cp_high Ct_high_high_high = pull_Ct_data_point(prop, mach_high, J_high, Cp_high) x = [J_low, J_high] y = [Cp_low, Cp_high] z = [mach_low, mach_high] values = [ [[Ct_low_low_low, Ct_low_high_low], [Ct_low_low_high, Ct_low_high_high]], [[Ct_high_low_low, Ct_high_high_low], [Ct_high_low_high, Ct_high_high_high]], ] Ct = I.interpolate3(x, y, z, values, J, Cp, tip_mach) return Ct
def cp2blade_angle(prop, Cp, J, tip_mach): """ Returns blade angle, given power coefficient (Cp), advance ratio (J) and the mach number of the blade tip. """ mach_low = max( prop.blade_angle_mach_min, prop.blade_angle_map[ max(min(N.searchsorted(prop.blade_angle_map[:, 0, 0], tip_mach) - 1, prop.z_size - 1), 0), 0, 0 ], ) if mach_low == prop.blade_angle_mach_max: mach_low = prop.blade_angle_map[-2, 0, 0] mach_high = min( prop.blade_angle_mach_max, prop.blade_angle_map[min(N.searchsorted(prop.blade_angle_map[:, 0, 0], tip_mach), prop.z_size - 1), 0, 0], ) if mach_high == prop.blade_angle_mach_min: mach_high = prop.blade_angle_map[1, 0, 0] J_low = max( prop.blade_angle_J_min, prop.blade_angle_map[0, 0, max(min(N.searchsorted(prop.blade_angle_map[0, 0, 1:], J), prop.x_size - 2), 1)], ) if J_low == prop.blade_angle_J_max: J_low = prop.blade_angle_map[0, 0, -2] J_high = min( prop.blade_angle_J_max, prop.blade_angle_map[0, 0, min(N.searchsorted(prop.blade_angle_map[0, 0, 1:], J), prop.x_size - 2) + 1], ) if J_high == prop.blade_angle_J_min: J_high = prop.blade_angle_map[0, 0, 2] Cp_low = max( prop.blade_angle_Cp_min, prop.blade_angle_map[0, max(min(N.searchsorted(prop.blade_angle_map[0, 1:, 0], Cp), prop.y_size - 1), 1), 0], ) if Cp_low == prop.blade_angle_Cp_max: # print 'in CP-low' Cp_low = prop.blade_angle_map[0, -2, 0] Cp_high = min( prop.blade_angle_Cp_max, prop.blade_angle_map[0, min(N.searchsorted(prop.blade_angle_map[0, 1:, 0], Cp), prop.y_size - 1) + 1, 0], ) if Cp_high == prop.blade_angle_Cp_min: # print 'in CP-high' Cp_high = prop.blade_angle_map[0, 2, 0] # get eff for mach_low, J_low and Cp_low blade_angle_low_low_low = pull_blade_angle_data_point(prop, mach_low, J_low, Cp_low) # get eff for mach_low, J_high and Cp_low blade_angle_low_high_low = pull_blade_angle_data_point(prop, mach_low, J_high, Cp_low) # get eff for mach_low, J_low and Cp_high blade_angle_low_low_high = pull_blade_angle_data_point(prop, mach_low, J_low, Cp_high) # get eff for mach_low, J_high and Cp_high blade_angle_low_high_high = pull_blade_angle_data_point(prop, mach_low, J_high, Cp_high) # get eff for mach_high, J_low and Cp_low blade_angle_high_low_low = pull_blade_angle_data_point(prop, mach_high, J_low, Cp_low) # get eff for mach_high, J_high and Cp_low blade_angle_high_high_low = pull_blade_angle_data_point(prop, mach_high, J_high, Cp_low) # get eff for mach_high, J_low and Cp_high blade_angle_high_low_high = pull_blade_angle_data_point(prop, mach_high, J_low, Cp_high) # get eff for mach_high, J_high and Cp_high blade_angle_high_high_high = pull_blade_angle_data_point(prop, mach_high, J_high, Cp_high) x = [J_low, J_high] y = [Cp_low, Cp_high] z = [mach_low, mach_high] values = [ [[blade_angle_low_low_low, blade_angle_low_high_low], [blade_angle_low_low_high, blade_angle_low_high_high]], [ [blade_angle_high_low_low, blade_angle_high_high_low], [blade_angle_high_low_high, blade_angle_high_high_high], ], ] blade_angle = I.interpolate3(x, y, z, values, J, Cp, tip_mach) return blade_angle
def cp2ct(prop, Cp, J, tip_mach): """ Returns thrust coefficient, given power coefficient (Cp), advance ratio (J) and the mach number of the blade tip. """ mach_low = max( prop.Ct_mach_min, prop.prop_CT_map[max( min( N.searchsorted(prop.prop_CT_map[:, 0, 0], tip_mach) - 1, prop.z_size - 1), 0), 0, 0]) if mach_low == prop.Ct_mach_max: mach_low = prop.prop_CT_map[-2, 0, 0] mach_high = min( prop.Ct_mach_max, prop.prop_CT_map[ min(N.searchsorted(prop.prop_CT_map[:, 0, 0], tip_mach), prop.z_size - 1), 0, 0]) if mach_high == prop.Ct_mach_min: mach_high = prop.prop_CT_map[1, 0, 0] J_low = max( prop.Ct_J_min, prop.prop_CT_map[0, 0, max( min(N.searchsorted(prop.prop_CT_map[ 0, 0, 1:], J), prop.x_size - 2), 1)]) if J_low == prop.Ct_J_max: J_low = prop.prop_CT_map[0, 0, -2] J_high = min( prop.Ct_J_max, prop.prop_CT_map[ 0, 0, min(N.searchsorted(prop.prop_CT_map[0, 0, 1:], J), prop.x_size - 2) + 1]) if J_high == prop.Ct_J_min: J_high = prop.prop_CT_map[0, 0, 2] Cp_low = max( prop.Ct_Cp_min, prop.prop_CT_map[ 0, max( min(N.searchsorted(prop.prop_CT_map[0, 1:, 0], Cp), prop.y_size - 2), 1), 0]) if Cp_low == prop.Ct_Cp_max: Cp_low = prop.prop_CT_map[0, -2, 0] Cp_high = min( prop.Ct_Cp_max, prop.prop_CT_map[0, min(N.searchsorted(prop.prop_CT_map[ 0, 1:, 0], Cp), prop.y_size - 2) + 1, 0]) if Cp_high == prop.Ct_Cp_min: Cp_high = prop.prop_CT_map[0, 2, 0] # get Ct for mach_low, J_low and Cp_low Ct_low_low_low = pull_Ct_data_point(prop, mach_low, J_low, Cp_low) # get Ct for mach_low, J_high and Cp_low Ct_low_high_low = pull_Ct_data_point(prop, mach_low, J_high, Cp_low) # get Ct for mach_low, J_low and Cp_high Ct_low_low_high = pull_Ct_data_point(prop, mach_low, J_low, Cp_high) # get Ct for mach_low, J_high and Cp_high Ct_low_high_high = pull_Ct_data_point(prop, mach_low, J_high, Cp_high) # get Ct for mach_high, J_low and Cp_low Ct_high_low_low = pull_Ct_data_point(prop, mach_high, J_low, Cp_low) # get Ct for mach_high, J_high and Cp_low Ct_high_high_low = pull_Ct_data_point(prop, mach_high, J_high, Cp_low) # get Ct for mach_high, J_low and Cp_high Ct_high_low_high = pull_Ct_data_point(prop, mach_high, J_low, Cp_high) # get Ct for mach_high, J_high and Cp_high Ct_high_high_high = pull_Ct_data_point(prop, mach_high, J_high, Cp_high) x = [J_low, J_high] y = [Cp_low, Cp_high] z = [mach_low, mach_high] values = [[[Ct_low_low_low, Ct_low_high_low], [Ct_low_low_high, Ct_low_high_high]], [[Ct_high_low_low, Ct_high_high_low], [Ct_high_low_high, Ct_high_high_high]]] Ct = I.interpolate3(x, y, z, values, J, Cp, tip_mach) return Ct
def cp2blade_angle(prop, Cp, J, tip_mach): """ Returns blade angle, given power coefficient (Cp), advance ratio (J) and the mach number of the blade tip. """ mach_low = max( prop.blade_angle_mach_min, prop.blade_angle_map[max( min( N.searchsorted(prop.blade_angle_map[:, 0, 0], tip_mach) - 1, prop.z_size - 1), 0), 0, 0]) if mach_low == prop.blade_angle_mach_max: mach_low = prop.blade_angle_map[-2, 0, 0] mach_high = min( prop.blade_angle_mach_max, prop.blade_angle_map[ min(N.searchsorted(prop.blade_angle_map[:, 0, 0], tip_mach ), prop.z_size - 1), 0, 0]) if mach_high == prop.blade_angle_mach_min: mach_high = prop.blade_angle_map[1, 0, 0] J_low = max( prop.blade_angle_J_min, prop.blade_angle_map[ 0, 0, max( min(N.searchsorted(prop.blade_angle_map[0, 0, 1:], J), prop.x_size - 2), 1)]) if J_low == prop.blade_angle_J_max: J_low = prop.blade_angle_map[0, 0, -2] J_high = min( prop.blade_angle_J_max, prop.blade_angle_map[ 0, 0, min(N.searchsorted(prop.blade_angle_map[0, 0, 1:], J), prop.x_size - 2) + 1]) if J_high == prop.blade_angle_J_min: J_high = prop.blade_angle_map[0, 0, 2] Cp_low = max( prop.blade_angle_Cp_min, prop.blade_angle_map[ 0, max( min(N.searchsorted(prop.blade_angle_map[0, 1:, 0], Cp), prop.y_size - 1), 1), 0]) if Cp_low == prop.blade_angle_Cp_max: # print 'in CP-low' Cp_low = prop.blade_angle_map[0, -2, 0] Cp_high = min( prop.blade_angle_Cp_max, prop.blade_angle_map[ 0, min(N.searchsorted(prop.blade_angle_map[0, 1:, 0], Cp), prop.y_size - 1) + 1, 0]) if Cp_high == prop.blade_angle_Cp_min: # print 'in CP-high' Cp_high = prop.blade_angle_map[0, 2, 0] # get eff for mach_low, J_low and Cp_low blade_angle_low_low_low = pull_blade_angle_data_point( prop, mach_low, J_low, Cp_low) # get eff for mach_low, J_high and Cp_low blade_angle_low_high_low = pull_blade_angle_data_point( prop, mach_low, J_high, Cp_low) # get eff for mach_low, J_low and Cp_high blade_angle_low_low_high = pull_blade_angle_data_point( prop, mach_low, J_low, Cp_high) # get eff for mach_low, J_high and Cp_high blade_angle_low_high_high = pull_blade_angle_data_point( prop, mach_low, J_high, Cp_high) # get eff for mach_high, J_low and Cp_low blade_angle_high_low_low = pull_blade_angle_data_point( prop, mach_high, J_low, Cp_low) # get eff for mach_high, J_high and Cp_low blade_angle_high_high_low = pull_blade_angle_data_point( prop, mach_high, J_high, Cp_low) # get eff for mach_high, J_low and Cp_high blade_angle_high_low_high = pull_blade_angle_data_point( prop, mach_high, J_low, Cp_high) # get eff for mach_high, J_high and Cp_high blade_angle_high_high_high = pull_blade_angle_data_point( prop, mach_high, J_high, Cp_high) x = [J_low, J_high] y = [Cp_low, Cp_high] z = [mach_low, mach_high] values = [[[blade_angle_low_low_low, blade_angle_low_high_low], [blade_angle_low_low_high, blade_angle_low_high_high]], [[blade_angle_high_low_low, blade_angle_high_high_low], [blade_angle_high_low_high, blade_angle_high_high_high]]] blade_angle = I.interpolate3(x, y, z, values, J, Cp, tip_mach) return blade_angle
def cp2eff(prop, Cp, J, tip_mach): """ Returns prop efficiency, given power coefficient (Cp), advance ratio (J) and the mach number of the blade tip. """ mach_low = max( prop.eff_mach_min, prop.prop_eff_map[max( min( N.searchsorted(prop.prop_eff_map[:, 0, 0], tip_mach) - 1, prop.z_size - 1), 0), 0, 0]) if mach_low == prop.eff_mach_max: mach_low = prop.prop_eff_map[-2, 0, 0] mach_high = min( prop.eff_mach_max, prop.prop_eff_map[ min(N.searchsorted(prop.prop_eff_map[:, 0, 0], tip_mach), prop.z_size - 1), 0, 0]) if mach_high == prop.eff_mach_min: mach_high = prop.prop_eff_map[1, 0, 0] J_low = max( prop.eff_J_min, prop.prop_eff_map[ 0, 0, max( min(N.searchsorted(prop.prop_eff_map[0, 0, 1:], J), prop.x_size - 2), 1)]) if J_low == prop.eff_J_max: J_low = prop.prop_eff_map[0, 0, -2] J_high = min( prop.eff_J_max, prop.prop_eff_map[0, 0, min(N.searchsorted(prop.prop_eff_map[ 0, 0, 1:], J), prop.x_size - 2) + 1]) if J_high == prop.eff_J_min: J_high = prop.prop_eff_map[0, 0, 2] if J_high == J_low: J_high = J_low + 0.1 Cp_low = max( prop.eff_Cp_min, prop.prop_eff_map[ 0, max( min(N.searchsorted(prop.prop_eff_map[0, 1:, 0], Cp), prop.y_size - 1), 1), 0]) if Cp_low == prop.eff_Cp_max: # print 'in CP-low' Cp_low = prop.prop_eff_map[0, -2, 0] Cp_high = min( prop.eff_Cp_max, prop.prop_eff_map[0, min(N.searchsorted(prop.prop_eff_map[ 0, 1:, 0], Cp), prop.y_size - 1) + 1, 0]) if Cp_high == prop.eff_Cp_min: # print 'in CP-high' Cp_high = prop.prop_eff_map[0, 2, 0] if Cp_high == Cp_low: Cp_high = Cp_low + 0.01 # get eff for mach_low, J_low and Cp_low eff_low_low_low = pull_eff_data_point(prop, mach_low, J_low, Cp_low) # get eff for mach_low, J_high and Cp_low eff_low_high_low = pull_eff_data_point(prop, mach_low, J_high, Cp_low) # get eff for mach_low, J_low and Cp_high eff_low_low_high = pull_eff_data_point(prop, mach_low, J_low, Cp_high) # get eff for mach_low, J_high and Cp_high eff_low_high_high = pull_eff_data_point(prop, mach_low, J_high, Cp_high) # get eff for mach_high, J_low and Cp_low eff_high_low_low = pull_eff_data_point(prop, mach_high, J_low, Cp_low) # get eff for mach_high, J_high and Cp_low eff_high_high_low = pull_eff_data_point(prop, mach_high, J_high, Cp_low) # get eff for mach_high, J_low and Cp_high eff_high_low_high = pull_eff_data_point(prop, mach_high, J_low, Cp_high) # get eff for mach_high, J_high and Cp_high eff_high_high_high = pull_eff_data_point(prop, mach_high, J_high, Cp_high) x = [J_low, J_high] y = [Cp_low, Cp_high] z = [mach_low, mach_high] values = [[[eff_low_low_low, eff_low_high_low], [eff_low_low_high, eff_low_high_high]], [[eff_high_low_low, eff_high_high_low], [eff_high_low_high, eff_high_high_high]]] # print '[J_low, J_high]:', x # print '[Cp_low, Cp_high]:', y # print '[mach_low, mach_high:]', z # print '[[[eff_low_low_low, eff_low_high_low], [eff_low_low_high, eff_low_high_high]], [[eff_high_low_low, eff_high_high_low], [eff_high_low_high, eff_high_high_high]]]:', values # print 'J:', J # print 'Cp:', Cp # print 'tip mach:', tip_mach eff = I.interpolate3(x, y, z, values, J, Cp, tip_mach) return eff