Hide keyboard shortcuts

Hot-keys on this page

r m x p   toggle line displays

j k   next/prev highlighted chunk

0   (zero) top of page

1   (one) first highlighted chunk

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

112

113

114

115

116

117

118

119

120

121

122

123

124

125

126

127

128

129

130

131

 

 

from math import log 

 

# coefficients from curve fit of NASA SP8120 Boundary Layer Loss Recommendation. 

a=0.13956490814036465 

b=0.4839954048378114 

c=-1.5290708783162201 

d=1.8872208607881908 

e=1.2281287531868839 

f=1.1165014352424605 

g=0.08873349847277191 

 

def eff_bl_NASA( Dt=1.0, Pc=100, eps=25.0): 

""" 

Boundary layer loss correlation Digitized from the NASA SP 8120 document. 

# Dt throat diameter (in) 

# Pc chamber pressure (psia) 

# eps nozzle exit area ratio 

# For each area ratio, the lists are for (Pc*Dt) and % loss due to boundary layer 

# Pc * Dt is lbf/in^2 * in = lbf/in  

""" 

# MABL is half of NASA correlation 

 

pxd = Pc * Dt # psia * inches 

 

frac = c + d * log(e + eps*f) 

loss = g*eps/pxd + frac/( a + b*log(pxd) ) 

 

# turn loss value into an efficiency. 

return (100.0 - loss) / 100.0 

 

def regen_corrected_bl( eff_bl=0.98, eps=30., noz_regen_eps=1.0 ): 

""" 

Adjust nozzle boundary layer loss for some or all of nozzle regen cooling. 

(assume drag portion of loss is 15 to 30 percent) 

""" 

# if no portion of nozzle is regen cooled, simply return eff_bl 

if noz_regen_eps <= 1.0: 

return eff_bl 

 

BLloss = 1.0 - eff_bl 

DragFrac = min(0.3, 0.15 + 0.15 * eps / 200.0) # drag is 30% at eps=200 

DragLoss = DragFrac * BLloss 

EnthLoss = BLloss - DragLoss 

if noz_regen_eps >= eps: 

EnthLoss = 0.0 

else: 

EpsTerm = 1.0 - noz_regen_eps / eps 

EnthLoss = 0.5 * EnthLoss * EpsTerm 

 

eff_bl = 1.0 - DragLoss - EnthLoss 

return eff_bl 

 

 

if __name__ == "__main__": #Self Test 

# plot NASA data and correlation on same chart. 

import pylab 

import sys 

do_show = True 

if len(sys.argv) > 1: 

if sys.argv[1] == 'suppress_show': 

do_show = False 

 

 

pylab.figure( figsize=(9,7) ) 

 

nasa_epsL = [3., 5., 10., 20., 40., 60., 80.] 

 

# the following lists are used by eff_bl_NASA 

# eps = 3 

pxd3L = [7.91256, 9.98901, 13.0916, 18.3392, 25.2661, 34.5208, 49.9948, 72.4052, 99.339, 140.906, 192.518, 251.267, 339.044, 453.694, 654.568, 1013.25, 1939.3] 

pct3L = [1.29734, 1.17043, 1.03445, 0.907531, 0.798746, 0.717158, 0.635569, 0.572111, 0.526784, 0.481457, 0.43613, 0.408934, 0.390803, 0.363607, 0.345476, 0.33641, 0.327345] 

 

# eps = 5 

pxd5L = [8.04822, 9.98009, 13.3161, 18.3457, 24.3662, 35.6278, 53.5449, 74.1077, 98.4277, 145.243, 206.618, 289.919, 435.719, 625.541, 1016.2, 1937.68] 

pct5L = [1.99111, 1.79167, 1.59223, 1.42271, 1.27313, 1.09364, 0.954028, 0.86428, 0.784505, 0.704729, 0.644897, 0.614981, 0.575094, 0.55515, 0.515262, 0.50529] 

 

# eps = 10 

pxd10L = [7.7234, 10.0259, 13.6869, 18.6847, 25.5075, 34.3467, 49.5362, 71.7708, 99.3329, 147.251, 221.303, 331.076, 493.039, 698.179, 1016.2, 1928.84] 

pct10L = [3.00825, 2.71906, 2.42988, 2.19055, 1.98114, 1.82159, 1.64209, 1.48254, 1.37285, 1.25319, 1.16344, 1.10361, 1.04378, 0.983944, 0.944056, 0.91414] 

 

# eps = 20 

pxd20L = [7.93846, 9.98009, 13.1345, 17.4448, 23.4901, 32.9605, 46.6744, 66.7022, 99.3329, 146.579, 219.286, 322.107, 484.094, 730.881, 1020.86, 1937.68] 

pct20L = [4.12511, 3.80601, 3.45699, 3.12791, 2.8487, 2.58943, 2.33016, 2.12075, 1.89139, 1.72187, 1.59223, 1.48254, 1.38282, 1.32299, 1.23324, 1.14349] 

 

# eps = 40 

pxd40L = [8.01147, 9.98009, 12.7786, 15.9917, 20.6643, 27.0714, 36.2861, 47.5369, 64.8952, 81.9594, 99.3329, 130.729, 179.284, 244.75, 337.194, 460.322, 619.84, 779.252, 1011.56, 1387.27, 1946.57] 

pct40L = [5.17216, 4.70348, 4.28466, 3.96556, 3.62651, 3.31738, 3.05811, 2.82875, 2.62932, 2.47974, 2.37004, 2.23044, 2.09083, 1.98114, 1.87145, 1.80164, 1.72187, 1.68198, 1.63212, 1.58226, 1.51246] 

 

# eps = 60 

pxd60L = [8.08515, 9.93451, 12.7203, 16.5124, 21.2397, 27.6982, 36.2861, 49.0848, 66.7022, 99.3329, 145.243, 206.618, 296.631, 406.805, 578.709, 779.252, 1011.56, 1362.1, 1946.57] 

pct60L = [6.02975, 5.5511, 5.04253, 4.60376, 4.22483, 3.90573, 3.60657, 3.32735, 3.07805, 2.79884, 2.56948, 2.38002, 2.23044, 2.11077, 2.00108, 1.91134, 1.84153, 1.77173, 1.69195] 

 

# eps = 80 

pxd80L = [8.04822, 9.93451, 12.7203, 16.8175, 23.0639, 31.9211, 46.0379, 66.0944, 100.247, 146.579, 211.401, 313.381, 449.906, 651.849, 861.813, 1011.56, 1349.69, 1928.84] 

pct80L = [7.14661, 6.37877, 5.72062, 5.15222, 4.62371, 4.18494, 3.78606, 3.44702, 3.11794, 2.85867, 2.64926, 2.45979, 2.2803, 2.14069, 2.04097, 1.99111, 1.91134, 1.81162] 

 

pxdLL = [pxd3L, pxd5L, pxd10L, pxd20L, pxd40L, pxd60L, pxd80L] 

pctLL = [pct3L, pct5L, pct10L, pct20L, pct40L, pct60L, pct80L] 

 

MARKERL = ['o','v','^','<','>','d','X','P','s','p','*','.'] 

COLORL = ['g','c','b','y','#FFA500','m','r'] 

 

i = 0 

for area_ratio, pxdL, lossL in zip(nasa_epsL, pxdLL, pctLL): 

effL = [(100.0 - loss) / 100.0 for loss in lossL] 

pylab.semilogx(pxdL, effL, '.', marker=MARKERL[i], color=COLORL[i], label='ref AR=%g'%area_ratio) 

i += 1 

 

i = 0 

for area_ratio, pxdL in zip(nasa_epsL, pxdLL): 

lossL = [eff_bl_NASA( Dt=1.0, Pc=pxd, eps=area_ratio) for pxd in pxdL ] 

 

# show impact of partially regen cooled nozzle 

#lossL = [regen_corrected_bl( eff_bl=eff_bl, eps=area_ratio, noz_regen_eps=6.0 ) for eff_bl in lossL] 

 

pylab.semilogx(pxdL, lossL, '-', color=COLORL[i], label='fit AR=%g'%area_ratio) 

i += 1 

 

 

pylab.title('Boundary Layer Nozzle Efficiency') 

pylab.xlabel('Pc(psia) * Dt(inch)') 

pylab.ylabel('BL Efficiency') 

pylab.legend() 

 

if do_show: 

pylab.savefig( 'nasa_sp8120_bl_eff.png' ) 

 

pylab.show()