I finished the FAA-required 40 hours of flight testing just before Thanksgiving, and then did some night pattern work to regain my night currency. With those items complete, I was all set to give a ride to my first passenger: my lovely fiancée, Lyndsey. The weather forecast was looking gorgeous,

]]>I finished the FAA-required 40 hours of flight testing just before Thanksgiving, and then did some night pattern work to regain my night currency. With those items complete, I was all set to give a ride to my first passenger: my lovely fiancée, Lyndsey. The weather forecast was looking gorgeous, so we decided to travel to Tulsa, Oklahoma (KRVS) to visit her family over the holiday. Here are a few shots from the big trip.

After several trips to Walter Aviation in Perry, Iowa (KPRO), to regain my currency and practice tailwheel operations, the weather finally looked good for a first flight attempt.

Dad and I met at the hangar at about 0630 and began a thorough preflight.

Shortly after 0700, there seemed

]]>After several trips to Walter Aviation in Perry, Iowa (KPRO), to regain my currency and practice tailwheel operations, the weather finally looked good for a first flight attempt.

Dad and I met at the hangar at about 0630 and began a thorough preflight.

Shortly after 0700, there seemed nothing left we could do to delay the flight any longer, so I began strapping on the plane.

The engine started on the third blade, and I gave it plenty of time to warm up as I methodically performed all the necessary systems checks.

I called clearance delivery and informed them of the first flight attempt, and requested to orbit above the Class Charlie airspace at 5,500 MSL. Goals for the flight included a safe takeoff and landing, engine break-in, and basic handling qualities evaluation. I wanted to run the engine at 75% power for as long as possible, but I wanted to make sure I could glide back to the field if anything went awry.

Taxi out was uneventful, ground handling was good, and forward visibility was excellent, requiring very little S-turning to clear the taxiway in front of me. I completed a runup check in the non-movement area, then requested a departure from runway 13. Winds were less than five knots and right down the pike.

The Garmin avionics performed nearly flawlessly, and the engine ran well. I primarily flew racetrack patterns to the north and south of the airfield, at a range of airspeeds and power settings. I tried to keep the engine above 75% power for at least 30 minutes.

Toward the end of the 1-hour flight, I performed a few power-off stalls and did some maneuvering in the landing configuration — half flaps and about 80 KIAS. I even tested the autopilot briefly, even though it wasn't strictly on the test card. Then I requested and flew a wide pattern (for traffic spacing), followed by a go-around. Finally, I landed on runway 13 at half flaps with a full-stall, three-point touchdown.

I was glad to get the *Eagle* back to the barn in one piece! I had the RV Grin from ear to ear. It was quite an accomplishment, both for me and for Dad. I certainly couldn't have gotten this far without his help. Thanks, Dad!

The first start and run of a Lycoming YIO-360-M1B 180 hp engine on an RV-8 Fastback.

]]>The first start and run of a Lycoming YIO-360-M1B 180 hp engine on an RV-8 Fastback.

]]>I had to write a short paper for my propulsion class last semester, so I put together a quick and dirty performance analysis of a garden-variety RV-8. I used the open source Jupyter Notebook and the Python programming language to run the numbers. The code is pretty ugly in some

]]>I had to write a short paper for my propulsion class last semester, so I put together a quick and dirty performance analysis of a garden-variety RV-8. I used the open source Jupyter Notebook and the Python programming language to run the numbers. The code is pretty ugly in some spots, but the primary goal was to quickly generate some pretty graphs for the report. Comments and corrections are welcome.

This notebook is also available on GitHub.

- Anaconda Python Distribution, includes NumPy, Pandas, SciPy, Matplotlib, etc.
- Jupyter Notebook, to display and edit this document, included with Anaconda.
- Seaborn Data Visualization, for plotting aesthetics.
- Scikit-Aero Python package, for standard atmosphere calculations
`(v.0.2-dev)`

.

```
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.ticker as ticker
import seaborn as sns
from skaero.atmosphere import coesa as atm
```

```
# Plot style with Seaborn
%matplotlib inline
sns.set_context("paper", font_scale=1.8, rc={"lines.linewidth": 3, "figure.figsize": (10,6)})
sns.set_style("ticks")
```

General specifications for the RV-8 are taken from Van's published data.

```
# Wing span (ft)
b = 24
# Wing area (sq ft)
S = 116
# Wing chord (constant, no taper)
c = S/b
# Aspect ratio
AR = b**2/S
# Gross weight (lbs)
W = 1800
# Wing loading (lb/sq ft)
WL = W/S
# Fuel capacity (US gal)
fuel_capacity = 42
```

Initially, we cheat a bit here, using data derived by Kevin Horton in his AeroCalc Python package.

```
# Oswald efficiency factor estimation (ref: D. Raymer [2], Eqn. (12.49), p. 347.)
e = 1.78 * (1 - 0.045 * AR**0.68) - 0.64
# Oswald efficiency factor estimation (ref.: K. Horton)
e = 0.86
# Parasite drag coefficient, zero-lift (ref.: K. Horton)
C_d_0 = 0.0209
```

A range of likely velocity values for a light aircraft, from about 60 to 220 KTAS (knots true airspeed).

```
# Free stream velocity (ft/s)
V = np.arange(100,370)
```

The `scikit-aero`

COESA algorithm is based on the 1976 U.S. Standard Atmosphere. The previous 1962 U.S. Standard Atmosphere is the standard used by the FAA and the flight test community for aircraft performance assessments, however the updated 1976 version differs from this only above 32 km ^{[1]}.

Compare computed results here with an online Standard Atmosphere Calculator.

```
# COESA 1976 U.S. Standard Atmosphere (SI units!)
# Altitude to test (ft)
altitude = 23000
# Air density (kg/m^3)
rho = atm.density(altitude * 0.3048)
# Air density (slugs/ft^3)
rho = rho * 0.00194032
# Compare computed results with: https://www.digitaldutch.com/atmoscalc/
print("Air density at {:,.0f} ft = {:,.6f} slugs/ft^3".format(altitude, rho))
```

```
Air density at 23,000 ft = 0.001142 slugs/ft^3
```

Equations from Anderson ^{[2]}.

\begin{equation} \tag{6.17}

C_L = \frac{W}{\frac{1}{2} \rho_{\infty} V_{\infty}^2 S}

\end{equation}

\begin{equation} \tag{6.1c}

C_D = C_{D,0} + \frac{C_L^2}{\pi e AR}

\end{equation}

```
def plot_drag_polar():
"""
Plot drag polar for altitudes from sea level to Max_Alt in 4,000-ft increments.
"""
# This range allows the +/- curves to meet in the middle
V = np.arange(0,2000)
# COESA 1976 U.S. Standard Atmosphere (SI units!)
# Air density (kg/m^3)
rho = atm.density(altitude * 0.3048)
# Air density (slugs/ft^3)
rho = rho * 0.00194032
# Lift coefficient
CL = W / (0.5 * rho * V**2 * S)
# Drag coefficient
CD = C_d_0 + CL**2 / (np.pi * e * AR)
# Add a curve
plt.plot(CD,CL)
plt.plot(CD,-CL,color="#4c72b0")
# Locate the axis labels and limits
ax = plt.gca()
ax.set_xlim([0,0.14])
ax.set_ylim([-0.5,1.5])
ax.xaxis.set_label_coords(0.5, -0.08)
ax.yaxis.set_label_coords(-0.11, 0.5)
# Add title and axis labels
#plt.title("\n Drag Polar, RV-8, 1800 lbs \n")
plt.ylabel(r'$C_L$', rotation=0)
plt.xlabel(r'$C_D$')
sns.despine()
plt.show()
plot_drag_polar()
```

Equations from Anderson ^{[2:1]}.

\begin{equation} \tag{6.13}

T = D = q_{\infty} S C_D

\end{equation}

\begin{equation} \tag{6.14}

L = W = q_{\infty} S C_D

\end{equation}

\begin{equation} \tag{6.15}

\frac{T}{W} = \frac{C_D}{C_L}

\end{equation}

\begin{equation} \tag{6.16}

T_R = \frac{W}{C_L/C_D}

\end{equation}

```
def plot_thrust_required(V, Max_Alt=0, min_color="#4c72b0", drag_curves='N'):
"""
Plot thrust required curves for altitudes from sea level to Max_Alt in 4,000-ft increments.
Keyword arguments:
V -- a 1D array of velocity values in ft/s
Max_Alt -- an altitude, in feet, at which to stop plotting curves (default 0, sea level)
min_color -- a hex color code for the min value marker
drag_curves -- include drag curves? 'Y' or 'N'
"""
legend = ['Sea Level']
for altitude in range(0, Max_Alt + 1, 4000):
# COESA 1976 U.S. Standard Atmosphere (SI units!)
# Air density (kg/m^3)
rho = atm.density(altitude * 0.3048)
# Air density (slugs/ft^3)
rho = rho * 0.00194032
# Lift coefficient
CL = W / (0.5 * rho * V**2 * S)
# Drag coefficient
CD = C_d_0 + CL**2 / (np.pi * e * AR)
# Lift force
L = CL * 0.5 * rho * V**2 * S
# Parasite drag
Dp = 0.5 * C_d_0 * rho * V**2 * S
# Induced drag
Di = (2 * L**2) / (rho * V**2 * S * np.pi * e * AR)
# Thrust required (lbs)
Tr = W / (CL / CD)
# Add a curve
plt.plot(V,Tr)
# Plot drag curves
if drag_curves == "Y":
plt.plot(V,Dp)
plt.plot(V,Di)
legend.append("Parasite Drag")
legend.append("Induced Drag")
# Update the legend
if altitude > 0:
legend.append("{:,.0f} ft".format(altitude))
# Locate the axis labels and limits
ax = plt.gca()
ax.set_xlim([75,400])
ax.set_ylim([0,500])
ax.xaxis.set_label_coords(0.5, -0.15)
ax.yaxis.set_label_coords(-0.15, 0.5)
ax.text(138, 107, 'Best Range', size=13)
# Add title and axis labels
plt.legend(legend,loc=(0.22, 0.45))
#plt.title("\n Thrust Required for Level Flight \n")
plt.ylabel('Thrust\nRequired\n(lb)', rotation=0)
plt.xlabel('Free Stream Velocity (ft/s)')
# Plot (L/D)max point
plt.plot(V[np.argmin(Tr)], np.amin(Tr), marker='o', ms=9, color=min_color)
sns.despine(trim=True)
plt.show()
#plot_thrust_required(V,0)
plot_thrust_required(V,0,"#4c72b0","Y")
#plot_thrust_required(V,16000,"#64b5cd")
```

```
def plot_power_required(V, Max_Alt=0, min_color="#4c72b0"):
"""
Plot power required curves for altitudes from sea level to Max_Alt in 4,000-ft increments.
Keyword arguments:
V -- a 1D array of velocity values in ft/s
Max_Alt -- an altitude, in feet, at which to stop plotting curves (default 0, sea level)
min_color -- a hex color code for the min value marker
"""
legend = ['Sea Level']
for altitude in range(0, Max_Alt + 1, 4000):
# COESA 1976 U.S. Standard Atmosphere (SI units!)
# Air density (kg/m^3)
rho = atm.density(altitude * 0.3048)
# Air density (slugs/ft^3)
rho = rho * 0.00194032
# Lift coefficient
CL = W / (0.5 * rho * V**2 * S)
# Drag coefficient
CD = C_d_0 + CL**2 / (np.pi * e * AR)
# Thrust required (lbs)
Tr = W / (CL / CD)
# Power required (hp)
Pr = (Tr * V) / 550
# Add a curve (1 ft/s = 0.592484 knots)
plt.plot(V*0.592484,Pr)
# Update the legend
if altitude > 0:
legend.append("{:,.0f} ft".format(altitude))
# Locate the axis labels and limits
ax = plt.gca()
ax.set_xlim([25,250])
ax.set_ylim([0,300])
ax.xaxis.set_label_coords(0.5, -0.15)
ax.yaxis.set_label_coords(-0.15, 0.5)
#ax.text(75, 15, 'Best Endurance', size=13)
# Add title and axis labels
plt.legend(legend,loc=(0.12, 0.4))
#plt.title("\n Power Required for Level Flight \n")
plt.ylabel('Power\nRequired\n(hp)', rotation=0)
plt.xlabel('Free Stream Velocity (knots)')
# Plot (L/D)max point
plt.plot(V[np.argmin(Pr)]*0.592484, np.amin(Pr), marker='o', ms=9, color=min_color)
sns.despine()
plt.show()
plot_power_required(V,0)
plot_power_required(V,16000,"#64b5cd")
```

I found a great paper ^{[3]} detailing a numerical method for estimating propeller efficiency, and made my best attempt at creating the algorithm in Python.

```
def prop_eta(D=82, eta_guess=0.9, P=300, V=50, altitude=0, es=0.0001):
"""
Estimate propeller efficiency using a numerical method (ref: Solies [9]).
Keyword arguments:
D -- propeller diameter, inches
eta_guess -- an initial guess of propeller efficiency, percent
P -- engine brake horsepower available at selected altitude
V -- a velocity or array of velocities in knots
altitude -- operating altitude, feet
es -- percent error at which solution converges (smaller = more iterations)
"""
# Propulsive disk area, ft^2
A = (np.pi * (D/12)**2) / 4
# COESA 1976 U.S. Standard Atmosphere (SI units!)
# Air density (kg/m^3)
rho = atm.density(altitude * 0.3048)
# Air density (slugs/ft^3)
rho = rho * 0.00194032
# Convert V from knots to ft/s
V = V * 1.68781
# Convert P from hp to ft*lb/s
P = P * 550
# Initial error, %
ea = 100
# Initial guess
eta_0 = eta_guess
i = 0
while np.any(ea) > es:
# (2) Propeller thrust, lbs
T = (eta_0 * P) / V
# (3) Velocity at the propeller disk is V + dV/2
dV_by_2 = -(V/2) + np.sqrt((V**2)/4 + T/(2 * rho * A))
# (4) New efficiency
eta_i = V / (V + dV_by_2)
# (1) New eta
eta = eta_guess * eta_i
# Error
ea = np.abs((eta - eta_0)/eta) * 100
#print("\n", i, eta)
if (np.any(ea) > es) or (i>20):
eta_0 = eta
return eta
```

```
# From Lycoming O-360 manual, Fig. 3-26, "Sea Level and Altitude Performance, IO-360-M1B"
io360_bhp ={0:180, 4000:160, 8000:140, 12000:120, 16000:100, 20000:90}
# Hartzell propeller diameter, inches
D = 74
```

Equation from Raymer ^{[4]}.

\begin{equation} \tag{13.10}

P = P_{SL} \bigg(\frac{\rho}{\rho_0} - \frac{1 - \rho/\rho_0}{7.55} \bigg)

\end{equation}

```
rho_0 = atm.density(0 * 0.3048)
rho_0 = rho_0 * 0.00194032
rho_20 = atm.density(20000 * 0.3048)
rho_20 = rho_20 * 0.00194032
P_20 = 180 * ((rho_20/rho_0) - ((1 - (rho_20/rho_0))/7.55))
```

```
# Velocity range to cross power req'd curve
V_range_0 = np.arange(173,193,5)
V_range_8 = np.arange(170,190,5)
# Propeller efficiency at Sea Level
eta_0 = prop_eta(D, 0.9, io360_bhp[0], V_range_0, 0)
# Propeller efficiency, 16000
eta_8 = prop_eta(D, 0.9, io360_bhp[8000], V_range_8, 8000)
```

```
def plot_max_speed(V, altitude, V_range, BHPa, prop_eta):
"""
Plot
Keyword arguments:
V --
"""
legend = ['Sea Level', '8000 ft', 'THP Available']
# COESA 1976 U.S. Standard Atmosphere (SI units!)
# Air density (kg/m^3)
rho = atm.density(0 * 0.3048)
# Air density (slugs/ft^3)
rho = rho * 0.00194032
# Lift coefficient
CL = W / (0.5 * rho * V**2 * S)
# Drag coefficient
CD = C_d_0 + CL**2 / (np.pi * e * AR)
# Thrust required (lbs)
Tr = W / (CL / CD)
# Power required (hp)
Pr = (Tr * V) / 550
# Thrust horsepower available
THPa = BHPa * prop_eta
# Add a curve (1 ft/s = 0.592484 knots)
plt.plot(V*0.592484, Pr)
# COESA 1976 U.S. Standard Atmosphere (SI units!)
# Air density (kg/m^3)
rho = atm.density(8000 * 0.3048)
# Air density (slugs/ft^3)
rho = rho * 0.00194032
# Lift coefficient
CL = W / (0.5 * rho * V**2 * S)
# Drag coefficient
CD = C_d_0 + CL**2 / (np.pi * e * AR)
# Thrust required (lbs)
Tr = W / (CL / CD)
# Power required (hp)
Pr = (Tr * V) / 550
# Thrust horsepower available
THPa_0 = io360_bhp[0] * eta_0
THPa_8 = io360_bhp[8000] * eta_8
# Add a curve (1 ft/s = 0.592484 knots)
plt.plot(V*0.592484, Pr)
plt.plot(V_range_0, THPa_0, color="#c44e52")
plt.plot(V_range_8, THPa_8, color="#c44e52")
# Locate the axis labels and limits
ax = plt.gca()
ax.set_xlim([176,182])
ax.set_ylim([110,170])
ax.xaxis.set_label_coords(0.5, -0.15)
ax.yaxis.set_label_coords(-0.15, 0.5)
ax.xaxis.set_major_locator(ticker.MultipleLocator(0.5))
# Add title and axis labels
plt.legend(legend,loc=(0.15, 0.57))
#plt.title("\n Power Required for Level Flight \n")
plt.ylabel('Power\nRequired\n(hp)', rotation=0)
plt.xlabel('Free Stream Velocity (knots)')
sns.despine(trim=True)
plt.show()
sns.set_style("whitegrid")
plot_max_speed(V, 8000, V_range_8, io360_bhp[8000], eta_8)
```

The intersection of the Thrust Horsepower Available (THP) curves and the Power Required curves should give a rough indication of maximum velocity at a given altitude. Here, we show a max speed of 180.5 knots at sea level, and 177 knots at 8,000 feet. These numbers compare favorably to Van's published data of 213 mph (185 knots) at sea level and 203 mph (176 knots) at 8,000 feet.

R. D. Kimberlin,

*Flight Testing of Fixed-Wing Aircraft*. Reston, Va.: AIAA, 2003. ↩︎J. D. Anderson,

*Introduction to Flight*. New York: McGraw-Hill, 5th ed., 2005. ↩︎ ↩︎U. P. Solies, “Numerical method for estimation of propeller efficiencies,”

*Journal of Aircraft*, vol. 31, pp. 996–998, July 1994. ↩︎D. P. Raymer,

*Aircraft Design: A Conceptual Approach*. Reston, Va: AIAA, 4th ed., 2006. ↩︎

Russian hackers intercepted this photo of the RV-8F instrument panel today, and it will no doubt be all over WikiLeaks by tonight, so I might as well post it here.

The system is a Garmin G3X Touch PFD, with GMC 307 autoflight mode controller and GTN 625 GPS (currently not

]]>Russian hackers intercepted this photo of the RV-8F instrument panel today, and it will no doubt be all over WikiLeaks by tonight, so I might as well post it here.

The system is a Garmin G3X Touch PFD, with GMC 307 autoflight mode controller and GTN 625 GPS (currently not occupying its hole). Under the hood is a GSU 25 ADAHRS, a GAD 29 ARINC 429 interface, a GEA 24 engine analyzer, a GTR 20 COM radio and a GTX 23 ES transponder. Future upgrades include a Garmin G5 backup EFIS for IFR flight.

The sexy sheepskin seat is from Oregon Aero; the switch and warning panels are my own design.

I'm trying to wrap my head around what I can do this week. I think I'm going to start by re-wiring a few pins on the Vertical Power VP-X to match my new configuration schema. Then I'll move on to the landing lights (I need some more 18AWG shielded wire from Spruce), followed by the pitot heat and stall warning wires from the left wing, finally joining all three Nav/Strobe cables behind the instrument panel and splicing them into the VP-X.

If I get through all of that, I'll move to connecting the autopilot servos and interfacing them with the Ray Allen trim servos. That should clean up most of the wiring that's under the floor.

And finally, I'll leave you with another shot grabbed by those pesky Russians, this one from a few months back when the weather didn't feel like northern Siberia. I know, I know -- she's a beaut.

]]>Now that the wings are bolted on (hopefully for good), it's time to get back to wiring. I admit that all the new wire bundles in the fuselage had given me a bit of option paralysis, so I figured I'd just get one thing working and see where things went

]]>Now that the wings are bolted on (hopefully for good), it's time to get back to wiring. I admit that all the new wire bundles in the fuselage had given me a bit of option paralysis, so I figured I'd just get one thing working and see where things went from there.

As it turns out, my Vertical Power VP-X load planning was not as thorough as it should have been, and now I have to reconfigure the settings to combine several low-draw consumers on a single pin to make room for a few devices that I had either forgotten initially or we acquired later.

One bit in particular I had missed in the planning was the requirement for each AeroLED landing light to be connected to a separate pin in order to achieve the wig-wag functionality. Well, suffice to say I made some room on the bus and the above video documents the results of "wig-wag test #1." Enjoy.

]]>Our tech counselor Tom and my engineering buddy Eric joined me and Dad in the hangar today and we installed the wings on the fuselage for the first time. We used hardware store bolts to hold the wings on temporarily, then began the measurements and layout to set the wing

]]>Our tech counselor Tom and my engineering buddy Eric joined me and Dad in the hangar today and we installed the wings on the fuselage for the first time. We used hardware store bolts to hold the wings on temporarily, then began the measurements and layout to set the wing sweep and incidence.

Once the wings were securely attached to the fuselage with the hardware store bolts, Tom and Eric went flying, while Dad and I checked and re-checked the measurements. Then we left things alone for the night.

A few days later, we went back out to the hangar to re-check the measurements again and drill the hole for the rear spar attach bolt. We used Van's Wing Incidence Drilling Simplified checklist to make sure everything was copacetic before did any drilling.

We used the digital level taped to another carpenter's level plus the recommended spacer block to help set the wing incidence. When the digital level read zero degrees, we knew the incidence was in the ballpark.

]]>In late June, after over a year on the waiting list, we finally got the call that a T-hangar was coming available at the Eastern Iowa airport (KCID). We didn't feel quite ready to move, but it was now or never, so we made arrangements to transport our pride and

]]>In late June, after over a year on the waiting list, we finally got the call that a T-hangar was coming available at the Eastern Iowa airport (KCID). We didn't feel quite ready to move, but it was now or never, so we made arrangements to transport our pride and joy to its new home.

We contacted a local stock-car builder and racer named Johnny Spaw (who had also done some welding for us on the rollbar) to see if he had a suitable trailer and would be willing to pull the aircraft. He agreed to do the job, and we were in business!

We removed the empennage from the fuselage to ensure that no lift was created that might shift the load on the trailer — or worse, cause the fuselage to slide off.

We used every tie-down fixture the trailer offered in order to secure the payload.

Finally, we had the fuselage loaded and secured to the trailer as best we could. The plan was to drive on back roads as much as possible, keeping the speed below 25 mph.

After about 40 hand-wringing minutes, we had the trailer at the airport and proceeded to begin unloading.

When we finally got everything pulled into the hangar, the project that had seemed to dominate Dad's garage for the past six years was dwarfed by the voluminuous hangar space. This problem would soon be corrected.

The next day we secured a pickup truck and hauled the wings, empennage, work table and other parts out to the hangar.

Over the next few days, we brought in the tools, shelves, chairs, table, mini-fridge, and all the other necessities for a respectable Man Cave.

Now it's time to get serious and put some WINGS on this sucker!

]]>One fine summer Saturday morning, Tom, our EAA Tech Counselor, invited me and Dad to ride with a flight of three RVs to Boone, Iowa (KBNW) for the annual WC Aircraft Works Boone RV Day fly-in. Who could refuse an offer like that? Here are a few shots from the

]]>One fine summer Saturday morning, Tom, our EAA Tech Counselor, invited me and Dad to ride with a flight of three RVs to Boone, Iowa (KBNW) for the annual WC Aircraft Works Boone RV Day fly-in. Who could refuse an offer like that? Here are a few shots from the flight.

This document uses the open source Jupyter Notebook and the Python programming language to demonstrate a finite difference numerical method for solving a differential equation.

```
%matplotlib inline
# Required libraries
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
# Seaborn aesthetics
sns.set_context("paper"
```

]]>This document uses the open source Jupyter Notebook and the Python programming language to demonstrate a finite difference numerical method for solving a differential equation.

```
%matplotlib inline
# Required libraries
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
# Seaborn aesthetics
sns.set_context("paper", font_scale=1.8,
rc={"lines.linewidth": 3, "figure.figsize": (10,6)})
sns.set_style("ticks")
```

The basic differential equation of the elastic curve for a simply supported, uniformly loaded beam (Fig. 1) is given as

\begin{equation} EI \frac{d^2y}{dx^2} = \frac{wLx}{2} - \frac{wx^2}{2} \tag{3} \end{equation}

where *E* is the modulus of elasticity, and *I* the moment of inertia. The boundary conditions are y(0)=y(L)=0. Solve for the deflection of the beam using the finite-difference approach (delta_x = 0.6 m). The following parameter values apply: E = 200 GPa, I = 30,000 cm^{4}, w = 15 kN/m, and L = 3 m. Compare your numerical results to the analytical solution:

\begin{equation} y = \frac{wLx^3}{12EI} - \frac{wx^4}{24EI} - \frac{wL^3x}{24EI} \tag{4} \end{equation}

```
def y(x):
"""
Vertical deflection, y, of the beam in 10E-5 m.
"""
E = 200 * 10**9 # Pa
I = 30000 / 100**4 # m^4
w = 15 * 1000 # N/m
L = 3 # m
return ((w*L*x**3)/(12*E*I) - (w*x**4)/(24*E*I) - \
(w*x*L**3)/(24*E*I)) * 10**5
```

```
def cdiff_beam(L,ya,yb,n):
"""
Approximate vertical deflection, y, of the beam in 10E-5 m,
using central difference method.
Args:
L = length of the beam, m
ya = vertical deflection at x = 0
yb = vertical deflection at x = L
n = desired number of interior segments
"""
E = 200 * 10**9 # Pa
I = 30000 / 100**4 # m^4
w = 15 * 1000 # N/m
i = 0
x = 0
dx = L/n
X = [x]
A = np.zeros(shape=(n+1,n+1))
b = np.zeros(shape=(n+1,1))
while i < n-1:
i = i + 1
x = x + dx
b[i] = dx**2 * (1/(2*E*I)) * (w*L*x - w*x**2)
A[i][i] = -2
if i < n:
A[i][i+1] = 1
A[i][i-1] = 1
X = np.append(X, x)
A[0][0] = 1
A[n][n] = 1
b[0] = ya
b[n] = yb
X = np.append(X, x+dx)
Y = np.linalg.solve(A,b)
# print(A); print(b)
return X, Y
```

```
x = np.linspace(0,3)
X,Y = cdiff_beam(3,0,0,8)
plt.plot(x,y(x), lw=7, alpha=0.6, label="Analytical Solution")
plt.plot(X,Y*10**5, "o-", lw=2, ms=8, color="#c44e52", label="Finite Difference Method")
plt.legend(bbox_to_anchor=[0.665, 0.81])
plt.xlabel("distance, $x$ (m)")
plt.ylabel("deflection, $y$ (10$^{-5}$ m)")
sns.despine()
plt.show()
```

]]>After the main engine components were installed, Dad got started on the baffling kit, while I began work on fabricating the spinner backplate.

After the main engine components were installed, Dad got started on the baffling kit, while I began work on fabricating the spinner backplate.

After the holidays, Dad and I began installing the Vetterman exhaust kit that came with our firewall forward kit.

When we removed the plastic cover plates from the exhaust ports, once again we noticed only a trace of preservative oil spilled from the engine. We may ask

]]>After the holidays, Dad and I began installing the Vetterman exhaust kit that came with our firewall forward kit.

When we removed the plastic cover plates from the exhaust ports, once again we noticed only a trace of preservative oil spilled from the engine. We may ask our tech counselor what options we have in terms of preservation, or whether we need to do anything at all with a new engine. In the meantime, I installed some dessiccant plugs in the upper spark plug holes, and we'll keep an eye on those for signs of moisture.

It was tricky to reach several of the exhaust bolts to thread the washer and nuts on, but we eventually managed.

Lastly, we torqued everything to spec, with only some minor difficulty reaching one of the nuts, which we solved with a couple of stacked wrench extensions.

More on the exhaust hanger system later.

]]>Van's ships an Avstar fuel injection servo with their firewall forward kit. I don't know anything about that outfit, but it certainly seems to be a well-engineered piece of equipment.

The fuel servo mounted easily enough on the forward induction port of our IO-360-M1B, but getting

]]>Van's ships an Avstar fuel injection servo with their firewall forward kit. I don't know anything about that outfit, but it certainly seems to be a well-engineered piece of equipment.

The fuel servo mounted easily enough on the forward induction port of our IO-360-M1B, but getting the mixture and throttle brackets installed and adjusted correctly took a bit of time.

All instructions for installing the mixture bellcrank and throttle bracket are printed on Van's DWG OP-22, which is in an 8.5x17" format and can be a bit tricky to interpret initially. We definitely had to use a few web resources and photos to supplement this document.

The mixture bellcrank on the IO-360 mounts to a pair of oil sump bolts and translates the push-pull motion of the mixture cable to the mixture arm on the fuel injector servo.

The throttle cable runs underneath the engine and attaches to a bracket on the underside of the oil sump. The cable is then sheathed in firesleeve to protect it from the heat of the nearby exhaust pipe (installed later).

Lastly, one must adjust both control cables and actuator arms on both the mixture and throttle to ensure that full forward/aft travel on the cockpit levers translates to the full stop travel limits on the fuel servo. This took several hours of trial and error.

]]>When I went to remove the governor pad cover on our new Lycoming engine, I expected the preservative engine oil to come gushing out of the ports as soon as the bolts were loosened. It didn't. At first, I wasn't sure exactly what this meant, but later we found out

]]>When I went to remove the governor pad cover on our new Lycoming engine, I expected the preservative engine oil to come gushing out of the ports as soon as the bolts were loosened. It didn't. At first, I wasn't sure exactly what this meant, but later we found out the real reason -- our engine had no oil.

While the idea of this was vexing, it did make the task at hand a bit simpler. After removing the cover plate, I did some test fitting of the MT governor that Van's shipped with the firewall foreward kit and then turned my attention to installing the VA-153 governor cable bracket.

The first order of business was to get a real close look at the original safety wiring that had been done on the stop plate screws. This was first mission-critical item that I'd had to safety wire, and I wanted to do it right.

Dad and I installed the cable bracket so that it would protrude from the installed governor in a roughly level orientaion. The governor mounting pad on the engine is tilted to the right at about 45°, so this took a bit of experimentation.

Once the cable bracket was mounted, we loosened --but did not remove!-- all six screws on the stop plate, so that the control arm was free to rotate. In our case, the ideal position for the arm was at about the one o'clock position when viewed from the rear of the engine. Since our prop cable was already installed on the firewall, we had to test fit this a few times to get the cable travel we wanted.

I found that the prop cable couldn't be set to move the control arm on the governor to both stops -- it would either hit one or the other. So, we set the cable travel so that the arm would hit the fine pitch (takeoff) stop, and not quite hit the coarse pitch (low RPM) stop. I reasoned that the low RPM stop will never actually be used on a single-engine airplane, since our prop isn't full-feathering anyway.

I tightened and re-safetied the stop plate screws, which took several attempts to get just right. I had to experiment with how many turns per inch to give the safety wire pliers to get an acceptible tension. As you can see from the photos, I think all three wire pairs have a different number of turns per inch.

Since our 0.032" safety wire was a slightly heavier gauge than what was originally installed on the governor, I don't think my wire wraps are quite as pretty, but I'm happy with them for a first attempt, and I think they're correct and will do the job.

Next we installed the governor on the engine, and set about affixing the prop control cable to the bracket. This is easier said than done with the cable already installed on the firewall, and I think we nearly shredded the rubber dust gasket on the cable end with all of our test-fitting.

The stickiest problem we ran into when installing the prop cable was the fact that it was impossible to fit the AN3-11A bolt and associated washers and spacers onto the governor control arm. Since this bolt is inserted from front to rear, it simply wouldn't clear the edge of the governor stop plate enough to get it inserted into the control arm hole.

The only solution we came up with was to loosen the tension bolt on the control arm and slide the arm almost all the way off its knurled spindle. Only then could we get the AN3-11A bolt to slide in. Once all the hardware was installed, I had to re-safety wire the tension bolt -- with the entire assembly installed on the back of the engine.

In the end everything turned out fine and we got the cable travel we wanted. Any additional tweaking of the RPM settings will have to be accomplished once the engine is running.

]]>With the holiday season close at hand, the stars fully aligned, and the shrink wrap peeled off, Dad and I had no choice but to hang the engine.

After shopping around for engine hoists on Craigslist, we eventually got a sweet deal on a new Pittsburgh 1-Ton Foldable Shop Crane from Harbor Freight Aerospace Supply, and it performed like a dream.

After six years of assembling aircraft structures, Dad and I have gotten pretty confident when it comes to working with raw aluminum. Suddenly, here we were, forward of the firewall, in uncharted territory. We literally had no idea what we were doing.

For guidance, we turned to EAA's Tony Bingelis books and Van's *27 Years of the RVator*, which includes the wonderful "Illustrated Guide to Engine Hanging," also available on VAF. This guide is invaluable, since the documentation that comes with a new Lycoming is sparse at best. Van's normally-detailed plans also seem to taper off a bit in specificity when it comes to firewall-forward items.

Thus, before moving the engine into position on the motor mount, we installed the oil system fittings mentioned in the Guide. In our case, the only really critical item was the oil pressure fitting, which is located almost on top of the upper right mounting point. It's important to get this one in before mounting the engine, since it's basically unreachable afterwards.

One of my big pet peeves with Lycoming's documentation is that they send you information on multiple engine models, instead of just the one you own. I suppose it saves on printing costs, but it doesn't help the newbie installer when he's trying to figure out what everything is. We got lucky with one or two excellent VAF threads on port identification to help us out.

The second "gotcha" that we encountered was that Van's had shipped us the wrong mounting hardware, the significance of which we only began to fully comprehend when we were on Bolt #3. Van's had sent us four AN7-43 bolts, when we really needed only two of them, plus two AN7-44s.

We discovered this error not while taking inventory, and not while reviewing the engine mount plans, but only after trying to tighten down the nut on Bolt #3 and running out of threads. Luckily, Van's shipped us out the hardware we needed without a fuss.

The last bolt on the dynafocal mount is, of course, the tricky one. So a couple days later when we had our AN7-44s in hand, we tackled Bolt #4. We used the "drift pin" method mentioned by others to coax the rubber mount to align with the engine's bolt hole, but it kept wanting to snap back to its original orientation.

In the end, I decided to use some of my old rock climbing hardware to convince the Lord mount to stay put. I yanked on the mount with an old kevlar sling and a carabiner, while Dad got the bolt started. It worked.

After all the bolts were inserted and the nuts installed, I torqued the bolts down until they stopped against the Lord mounts, then Dad installed cotter pins in all of the castle nuts.

After everything was tightened and safetied, we lowered the tension on the hoist and backed it away. And just like that, the powerplant was installed! Woohoo!!

Dad and I celebrated with frosty beverages.

Shameless Menards plug...

We took a minute or two to enjoy the fruits of our labors, and then we looked forward to some real wrench-turning in the days to follow. I guess I'll finally have to learn how to install safety wire...

]]>