Rao’s Parabola Angles

In the book “Modern Engineering for Design of Liquid-Propellant Rocket Engines” by D.K. Huzel and D.H. Huang, page 44 we find the plot 4-16, relating:

  • theta_n: the initial parabola angle angle;

  • theta_e: the exit parabola angle;

with the expansion ratio \(\varepsilon\) and the varying the fractional nozzle length \(Lf\).

The data has been manually extracted from that plot. If you have the original Rao’s plot, you can probably extract better data.

Let’s see the plot:

[1]:
from pygasflow import Rao_Parabola_Angles
[2]:
a = Rao_Parabola_Angles()
a.plot()
../_images/examples_tut-9_3_0.png

We can visually inspect the plot, or we can interpolate the underlying data thanks to a couple useful functions. Warning: linear interpolation is used in between the plotted Fractional Lengths! For example, if I request Lf = 68%, a linear interpolation between Lf=60% and Lf=70% is computed.

Say we would like to know the parabola angles given the Area Ratio \(\varepsilon\) and the Fractional Length \(Lf\):

[3]:
theta_n, theta_e = a.angles_from_Lf_Ar(68, 35)
print("Initial Angle", theta_n)
print("Exit Angle", theta_e)
Initial Angle 36.11883335948745
Exit Angle 10.695233384809715

Say we would like to know the Area Ratio given the Fractional Length and one of the angles:

[4]:
Ar = a.area_ratio_from_Lf_angle(68, theta_n=35)
print("Area Ratio:", Ar)
Area Ratio: 24.83022334667575

Obviously, each Fractional Length curve has a maximum and minimum parabola angle. The provided angle must lie between that range. The following example tries to interpolate over a range not covered by the specified Fractional Length curve:

[5]:
a.area_ratio_from_Lf_angle(68, theta_e=8)
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
Input In [5], in <module>
----> 1 a.area_ratio_from_Lf_angle(68, theta_e=8)

File ~/Documents/Development/pygasflow/pygasflow/nozzles/rao_parabola_angles.py:229, in Rao_Parabola_Angles.area_ratio_from_Lf_angle(self, Lf, **kwargs)
    227 _min_sup, _max_sup = Min_Max(theta_dict[Lf_sup]["data"][:, 1])
    228 if angle < _min_inf or angle > _max_sup:
--> 229     raise ValueError("Could not interpolate the value for the given angle.\n" +
    230         "\tIt must be {} <= {} <= {}".format(_min_inf, angle_name, _max_sup)
    231     )
    233 # compute area rataio corresponding to the inf and sup limits of Lf
    234 Ar_inf = func(theta_dict[Lf_inf]["data"])

ValueError: Could not interpolate the value for the given angle.
        It must be 12.095588235294116 <= theta_e <= 14.908088235294116
[ ]: