Building on Rock

How Lighthouses Work

Chapter 6 · Building on Rock

So far the course has dealt with the light: how far it carries, what fuel feeds it, how a lens shapes it and how a turning lens gives it a rhythm. None of it matters if the tower is not there. The most useful places for a lighthouse are often the worst places to build one: a reef that is covered at high tide, a rock far out in the Atlantic, a stack at the northern tip of Britain. How Lighthouses Work 2 followed Smeaton's tower on the Eddystone, the first to be thought through as engineering. This chapter follows three later towers on Scottish rocks, Bell Rock (first lit in 1811), Skerryvore (1844) and Muckle Flugga (1858), and asks three practical questions of each. When can anyone work there? How is a stone tower held together? And what do the waves do to it?

What was run, and what to trust
Every Python snippet in this chapter and in the three exercise solutions was run, and the output in the comments is what Python printed. The facts about the three lighthouses were taken from the Wikipedia pages on Bell Rock Lighthouse, Skerryvore, Muckle Flugga and Muckle Flugga Lighthouse, fetched through a page-reading tool that answers questions about a page, so the figures are as that tool reported them and I could not check them against the printed sources the pages cite. Where a page disagrees with itself, the chapter says so. The assumptions are mine and are labelled where they appear: a tide cycle of 12.42 hours, half of the exposed time being usable, a seawater density of 1,025 kg per cubic metre, 16 hour working days for the stone cutters, and the eye heights used for the range checks. The conversions between tons, tonnes, feet and metres, and the ratios built on them, are my arithmetic. Nothing here is a record of how any tower was actually calculated.

Bell Rock: Working Between the Tides

The Bell Rock page gives the construction as 1807 to 1810 under Robert Stevenson, with the light first lit on 1 February 1811. The rock lies about 11 miles (18 km) east of the Firth of Tay and is covered by water for about 20 hours a day, with up to 12 feet (3.7 m) of water over it at high tide. That one number sets the whole project: only about four hours of every day are available, and they move. Stevenson hired 60 men in 1807, including a blacksmith to resharpen pickaxes on the rock, and avoided black powder so as not to damage it. Early on the men lived on a ship moored about a mile away and rowed out each day; then a beacon house on wooden struts was built, with room for up to 15 men. Granite from Cairngall was cut by stonemasons in the winter pauses. The first three courses were laid in early 1808, and the article says only 80 hours of building work took place on the rock during that second season. It puts the whole job at about 2,500 granite stones, hauled by one horse named Bassey.

How much work is 80 hours? The code turns the 20 hours of cover into windows of working time and asks what the 2,500 stones would need at some assumed laying rates. The tide period, the usable share and the stones per hour are my assumptions; the source gives the cover, the 80 hours and the stone count.

# Tide-limited working on a rock that is covered for most of the day. COVERED_H_PER_DAY = 20.0 # the Bell Rock article: covered by water for about 20 hours a day TIDE_PERIOD_H = 12.42 # assumed: a typical twice-daily tide cycle (general knowledge) SECOND_SEASON_H = 80 # the article: hours of building work on the rock in the second season USABLE_SHARE = 0.5 # assumed: only half of the exposed time is usable (ladders, landing, sea state) TOTAL_STONES = 2500 # the article: "about 2500" granite stones exposed_h = 24 - COVERED_H_PER_DAY windows_per_day = 24 / TIDE_PERIOD_H print("exposed per day:", exposed_h, "h, in", round(windows_per_day, 2), "windows of", round(exposed_h / windows_per_day, 2), "h") print("daily slip of the tide:", round((2 * TIDE_PERIOD_H - 24) * 60), "min") print("days to collect 80 h at all exposed time:", SECOND_SEASON_H / exposed_h) print("days to collect 80 h at 50 per cent usable:", SECOND_SEASON_H / (exposed_h * USABLE_SHARE)) for rate in (2, 4, 8): hours = TOTAL_STONES / rate print(rate, "stones per working hour:", hours, "h in all =", round(hours / SECOND_SEASON_H, 1), "seasons of 80 h") # exposed per day: 4.0 h, in 1.93 windows of 2.07 h # daily slip of the tide: 50 min # days to collect 80 h at all exposed time: 20.0 # days to collect 80 h at 50 per cent usable: 40.0 # 2 stones per working hour: 1250.0 h in all = 15.6 seasons of 80 h # 4 stones per working hour: 625.0 h in all = 7.8 seasons of 80 h # 8 stones per working hour: 312.5 h in all = 3.9 seasons of 80 h

The first two lines show four exposed hours a day in 1.93 windows of about 2.07 hours, and a tide that arrives about 50 minutes later each day (twice 12.42 hours, less 24). The next two give the days needed to collect 80 hours: 20 if every exposed minute could be used, 40 if only half could. The last three lines say that 2,500 stones at 2, 4 or 8 stones per working hour need 1,250, 625 or 312.5 hours, which is 15.6, 7.8 or 3.9 seasons of 80 hours. The article says the tower was finished in 1810, three years after starting, so the later seasons must have had far more working time than the second one, or the laying rate was high, or the stone count is not complete. I do not know which; the article gives no total hours and no laying rate. Two statements that use only the article's own numbers are safe: the rock gave about four hours a day, and the second season gave 80 hours.

Problem at the Bell RockWhat the article saysWhat it meant
Coverunder water about 20 hours a day, up to 12 ft at high tidea few hours a day of work, at times set by the tide
Housinga ship moored 1 mile away, then a beacon house on struts for up to 15 menmen on or near the rock, so no long trip each tide
Rockno black powder, to avoid damaging itpicks and chisels, and a blacksmith on the spot
StoneCairngall granite, cut in the winter pausesshaping on land, only setting on the rock

Interlocking Stones

The Bell Rock article says the design was based on John Smeaton's Eddystone Lighthouse, which Stevenson studied in 1801, and that Eddystone was also built on an offshore reef using interlocking stones. It quotes a historian describing the tower as "a copy of Smeaton's Eddystone Tower with sundry improvements in details and dimensions". It does not say how the Bell Rock blocks were joined. How Lighthouses Work 2 gave the Smeaton tower article's account: granite blocks joined with dovetail joints and marble dowels, with hydraulic lime. The Bell Rock page does not repeat any of this, so I cannot say which of Smeaton's methods Stevenson kept. There is also a conflict inside the Bell Rock page about who held the contract: the text says it was awarded to John Rennie with Stevenson as chief assistant, while the infobox credits Stevenson as builder.

Skerryvore's page is more generous with numbers, though it does not give the joint either. It says the tower was designed and built under Alan Stevenson; work on the rock began on 7 August 1838; the first block was laid on 4 July 1840 by the Duke of Argyll; the last block was raised in July 1842; and the lamp was lit on 1 February (the year is implied to be 1844). The first three courses are Hynish gneiss and the rest granite from the Ross of Mull. Up to 80 craftsmen worked on the blocks at Hynish on Tiree over the winter of 1840, from 4 am to 8 pm. The tower weighs 4,308 long tons (given as 4,377 tonnes), 4,300 blocks were fashioned by June 1840, one block could take 320 worker-hours, and the smallest block weighed 0.75 long tons and the largest over 2.5. The code checks the units and asks what these numbers can and cannot mean.

# Skerryvore masonry: units, block sizes and the cost of cutting stone. LT_TO_T = 1.0160469 # one long ton in tonnes STRUCTURE_LT = 4308 # the Skerryvore article: weight of the structure BLOCKS_BY_JUN_1840 = 4300 # blocks fashioned by June 1840 SMALLEST_LT, LARGEST_LT = 0.75, 2.5 ROCK_REMOVED_LT = 2000 MAX_WORKER_H = 320 # worker-hours that one block could take CRAFTSMEN = 80 # up to 80 craftsmen at Hynish in the winter of 1840 DAY_H = 16 # 4 am to 8 pm print("structure:", round(STRUCTURE_LT * LT_TO_T), "t") print("rock removed:", round(ROCK_REMOVED_LT * LT_TO_T), "t (the article prints 2,000 tonnes)") print("block range:", round(SMALLEST_LT * LT_TO_T, 2), "to over", round(LARGEST_LT * LT_TO_T, 2), "t") avg_t = STRUCTURE_LT * LT_TO_T / BLOCKS_BY_JUN_1840 print("mean mass if all the blocks made up the tower:", round(avg_t, 2), "t") wh_per_day = CRAFTSMEN * DAY_H print("worker-hours per day:", wh_per_day, ", blocks per day at 320 h each:", wh_per_day / MAX_WORKER_H) print("days for 4300 blocks at 320 h each:", round(BLOCKS_BY_JUN_1840 * MAX_WORKER_H / wh_per_day)) for days in (100, 200, 300): # assumed lengths of the cutting season print(days, "days of cutting: mean", round(wh_per_day * days / BLOCKS_BY_JUN_1840, 1), "worker-hours per block") # structure: 4377 t # rock removed: 2032 t (the article prints 2,000 tonnes) # block range: 0.76 to over 2.54 t # mean mass if all the blocks made up the tower: 1.02 t # worker-hours per day: 1280 , blocks per day at 320 h each: 4.0 # days for 4300 blocks at 320 h each: 1075 # 100 days of cutting: mean 29.8 worker-hours per block # 200 days of cutting: mean 59.5 worker-hours per block # 300 days of cutting: mean 89.3 worker-hours per block

The first line confirms the conversion: 4,308 long tons is 4,377 tonnes, so the page is consistent there. The second line shows that the rock removal figure is slightly off: 2,000 long tons is 2,032 tonnes, not the 2,000 tonnes the page prints (a long ton is 1.016 tonnes). Blocks ran from 0.76 to over 2.54 tonnes. If the 4,300 blocks made up the whole tower, the mean block would weigh 1.02 tonnes, which is inside that range, but this is a plausibility check only: the page does not say the 4,300 blocks were all of them. At 320 worker-hours per block, 80 craftsmen working 16 hour days (1,280 worker-hours a day) would finish 4 blocks a day and take 1,075 days for 4,300 blocks, far more than a winter. Over assumed cutting seasons of 100, 200 and 300 days, the mean cost per block must have been only 29.8, 59.5 or 89.3 worker-hours. So 320 hours is a maximum for an awkward block, not an average. The two similar numbers, 4,308 long tons and 4,300 blocks, are a coincidence of digits.

TowerHow the stones are describedWhat is not stated
Smeaton's Eddystone (1759)granite blocks with dovetail joints and marble dowels, hydraulic lime, shaped like an oak tree (from How Lighthouses Work 2)the strength of the joints
Bell Rockbased on Eddystone, which used interlocking stones; Cairngall granitethe joint type, wall thickness and base diameter
Skerryvoretapered cylinder on a hyperbolic curve; Hynish gneiss in the lowest three courses, Ross of Mull granite above; blocks cut at Hynishhow the blocks are joined

What the Waves Do

The Skerryvore article gives three figures about the sea: a design wave pressure of 6,000 lb per square foot (printed as 300 kPa), waves reportedly reaching the first window, about 60 ft up, according to a visitor in 1866, and 542 storms lasting 14,211 hours in the years 1881 to 1890. It also says the tower is a tapered cylinder with walls 9.5 ft (2.9 m) thick at the base and a solid lower section 26 ft (8 m) high. What does a pressure of 6,000 lb per square foot mean? The code converts it, compares it to a block, and then tests a deliberately pessimistic idea: that the full pressure acts at once over the whole face up to 60 ft. The seawater density and the whole-face idea are my assumptions; the page does not say over what area the design pressure was meant to act.

# Wave pressure on Skerryvore: a pessimistic bound. import math LBF_N = 4.4482216 # newtons in one pound-force FT_M = 0.3048 RHO_SEA = 1025.0 # assumed: density of seawater, kg/m3 G = 9.81 P_LB_FT2 = 6000 # the article: design wave pressure, lb per square foot BASE_D_M = 13.0 # the article: base diameter 42 ft = 13 m WAVE_H_M = 60 * FT_M # the article: waves reportedly reached the first window, about 60 ft WEIGHT_T = 4377 # the article: structure, in tonnes p = P_LB_FT2 * LBF_N / FT_M ** 2 print("pressure:", round(p / 1000, 1), "kPa (the article prints 300 kPa)") print("equivalent head of seawater:", round(p / (RHO_SEA * G), 1), "m") print("force on 1 square metre:", round(p / 1000), "kN =", round(p / 1000 / G, 1), "tonnes-force") print("largest block:", round(2.5 * 1.0160469, 2), "t, ratio:", round(p / G / 1000 / (2.5 * 1.0160469), 1)) area = BASE_D_M * WAVE_H_M force = p * area weight = WEIGHT_T * 1000 * G print("projected area:", round(area), "m2, force if the whole face took it:", round(force / 1e6, 1), "MN") print("weight:", round(weight / 1e6, 1), "MN, ratio force/weight:", round(force / weight, 2)) print("overturning moment:", round(force * WAVE_H_M / 2 / 1e6), "MN m, resisting:", round(weight * BASE_D_M / 2 / 1e6), "MN m") # pressure: 287.3 kPa (the article prints 300 kPa) # equivalent head of seawater: 28.6 m # force on 1 square metre: 287 kN = 29.3 tonnes-force # largest block: 2.54 t, ratio: 11.5 # projected area: 238 m2, force if the whole face took it: 68.3 MN # weight: 42.9 MN, ratio force/weight: 1.59 # overturning moment: 625 MN m, resisting: 279 MN m

The pressure is 287.3 kPa, so the printed 300 kPa is rounded. It is the pressure at about 28.6 m depth of seawater, and it puts 287 kN (29.3 tonnes-force) on a square metre, 11.5 times the weight of the largest block. So a stone on the face can never stand on its own weight; it has to be held by its neighbours, which is the point of interlocking blocks. Then the pessimistic test: over the whole 238 square metre face up to 60 ft the force would be 68.3 MN, which is 1.59 times the whole tower's weight of 42.9 MN, and the overturning moment (625 MN m) would be more than twice the resisting moment (279 MN m, taking the full weight acting at half the base diameter). A tower designed for that pressure would fall over if it acted everywhere at once, so it cannot be meant to. My reading is that the figure is a peak local pressure from a breaking wave, acting briefly on a small patch, though I found nothing in the source that says so. The tower is also bonded to the rock: the article says 2,000 long tons of rock were removed for the foundations, and I take that to mean the base was cut into the rock, which is an inference.

Muckle Flugga: the Same Sea, Higher Up

Muckle Flugga, a stack off Unst in Shetland, shows the sea at its worst from a different angle. The Muckle Flugga Lighthouse page says the brothers Thomas and David Stevenson designed and built it, that a temporary 50 ft (15 m) lighthouse was built 200 ft (61 m) above sea level and lit on 11 October 1854, that orders to build the permanent tower were given in June 1855, and that it was completed in 1857 and first lit on 1 January 1858. It records that "water was known to pass at a height of 200 feet" and that Stevenson saw "a huge six tonne piece of rock that had been removed by the waves, eighty feet above the sea". Winter storms sent waves onto the temporary tower and broke open the door of its living quarters. Bricks were chosen because they were easier to transport. Supplies were winched up by a Blondin cable hoist from a boat in a cleft of the rock, and every item for the permanent tower had to be carried to the top. The page also conflicts with itself on the height ("64 feet (20 m)" in the text, "20 m (66 ft)" in the infobox) and on the material (the infobox says masonry, the history says bricks). The island page says the light was automated in 1995.

Three Rocks Compared

Bell RockSkerryvoreMuckle Flugga
Sitereef about 11 miles east of the Firth of Tayabout 11 nautical miles southwest of Tireestack off Unst, Shetland
Built1807 to 1810, first lit 1 Feb 1811rock work from 1838, lit 1 Feb (1844)temporary light 1854, tower 1855 to 1857, lit 1 Jan 1858
Height35 m in the text, 36 m in the infobox48 m (156 ft in the text, 157 ft in the infobox)20 m ("64 feet" in the text, "66 ft" in the infobox)
Focal height28 m46 m66 m
CharacteristicFl W 5sFl W 10sFl(2) W 20s
Listed range18 nm (the lead also says 35 statute miles)23 nm22 nm
Main difficultytide: covered about 20 hours a dayexposure: storms far from shore, and a barrack lost in a galeheight and access: waves reported at 200 ft, hoists
Costestimate £42,000, about 50 per cent over£86,977 including about £13,000 for Hynishnot given
Automated198819941995

The characteristics are the kind described in How Lighthouses Work 5: the periods are 5, 10 and 20 seconds, and Muckle Flugga is a group flash. Skerryvore's distance from Tiree is given as 11 nautical miles (20 km) in the lead, 12 miles from Hynish elsewhere and 14 miles in an 1814 account, and it is also described as roughly 50 miles from the mainland; I have used the lead's figure. The page also says a wooden barrack on the rock for 40 men was destroyed by a gale on 3 November 1838 and replaced by early September 1839, and that Hynish on Tiree was the shore station and construction base. The Bell Rock cost of about £63,000 is not stated by the article; it is my arithmetic from a 50 per cent overrun on £42,000. Do the listed ranges agree with the geometry of How Lighthouses Work 1? The code asks, for each light, what eye height would give exactly the listed range, using 2.084 nautical miles per square root of a metre.

# Do the quoted ranges fit the geometry? Eye height each listed range would need. import math NM_PER_SQRT_M = 2.084 # from How Lighthouses Work 1: 3.86 km divided by 1.852 km per nm LIGHTS = ( # (name, focal height m, listed range nm), from each lighthouse's Wikipedia page ("Bell Rock", 28, 18), ("Skerryvore", 46, 23), ("Muckle Flugga", 66, 22), ) def geographic_range_nm(light_m, eye_m): return NM_PER_SQRT_M * (math.sqrt(light_m) + math.sqrt(eye_m)) def eye_needed_m(light_m, range_nm): return (range_nm / NM_PER_SQRT_M - math.sqrt(light_m)) ** 2 for name, height, listed in LIGHTS: print(name, "| range for a 5 m eye:", round(geographic_range_nm(height, 5), 1), "nm | listed:", listed, "nm | eye needed:", round(eye_needed_m(height, listed), 1), "m") print("66 m in feet:", round(66 / 0.3048), "; 64 ft in m:", round(64 * 0.3048, 1), "; 66 ft in m:", round(66 * 0.3048, 1)) print("six tonnes lifted 80 ft:", round(6000 * 9.81 * 80 * 0.3048 / 1e6, 2), "MJ") # Bell Rock | range for a 5 m eye: 15.7 nm | listed: 18 nm | eye needed: 11.2 m # Skerryvore | range for a 5 m eye: 18.8 nm | listed: 23 nm | eye needed: 18.1 m # Muckle Flugga | range for a 5 m eye: 21.6 nm | listed: 22 nm | eye needed: 5.9 m # 66 m in feet: 217 ; 64 ft in m: 19.5 ; 66 ft in m: 20.1 # six tonnes lifted 80 ft: 1.44 MJ

For an eye 5 m up, the geographic ranges are 15.7, 18.8 and 21.6 nm, against listed ranges of 18, 23 and 22. Muckle Flugga is consistent: it needs an eye only 5.9 m up. Bell Rock needs 11.2 m and Skerryvore 18.1 m, so either those ranges assume a high bridge or deck, or they are not geographic ranges at all (the Bell Rock article gives both 18 nautical miles and 35 statute miles inland, and I did not find what each means). I could not resolve this from my sources, so treat the listed ranges as the pages' numbers, not checked ones. The next-to-last line shows 66 m is 217 ft (matching the infobox focal height in both units), and that 64 ft is 19.5 m while 66 ft is 20.1 m, so the two Muckle Flugga heights differ by 0.6 m. The last line gives 1.44 MJ as the work needed just to lift the six tonne rock 80 ft, which is a lower bound on what the wave did to it.

Common mistakes
Treating 4,308 long tons and 4,300 blocks as the same quantity; mixing long tons, short tons and tonnes (they differ by up to 12 per cent); treating the 320 worker-hours for one block as an average; reading the Skerryvore design pressure as acting on the whole tower at once; assuming the Bell Rock joined its stones in the same way as the Eddystone (the page does not say); trusting the listed ranges of the three lights without asking how they were defined; taking the Bell Rock overrun of about £63,000 as a figure from the page; and taking the page's "2,000 tonnes" of foundation rock at face value, when the source figure is in long tons.
Exercise 1

Write a tide planner. With 4 hours of exposure a day, find the working hours in a 100-day season when 25, 50 and 75 per cent of the time is usable, and the number of such seasons that 2,500 stones need at 3 stones an hour. Then print the time a low-water window opens on each of seven days, starting at 06:00, if the tide slips by two tide periods of 12.42 hours less 24 hours a day, and the number of days before the clock time repeats.

📄 View solution
Exercise 2

Using Skerryvore figures, convert the smallest (0.75 long tons) and largest (2.5 long tons) blocks to tonnes, find how many blocks of each size the 4,308 long ton tower would be, convert the base wall (9.5 ft), top wall (2 ft) and solid section (26 ft) to metres, and give the wall-to-diameter and solid-to-height shares. Then find how many blocks 80 craftsmen make in a 6-day week of 16 hour days at 30, 60 and 120 worker-hours per block.

📄 View solution
Exercise 3

Convert wave pressures of 1,000, 3,000 and 6,000 lb per square foot to kilopascals, to the head of seawater, and to tonnes-force on one square metre. Then find the height of light needed for a 22 nm geographic range with an eye 5 m and 10 m above the sea, and convert the two Muckle Flugga heights, 64 ft and 66 ft, to metres.

📄 View solution

Quick Reference

  • Bell Rock: built 1807 to 1810, first lit 1 Feb 1811; covered about 20 hours a day; about 2,500 granite stones; based on Smeaton's Eddystone; Fl W 5s, focal height 28 m
  • Skerryvore: Alan Stevenson; rock work from 7 Aug 1838; 4,308 long tons (4,377 tonnes); base diameter 42 ft (13 m); 4,300 blocks by June 1840; Fl W 10s, focal height 46 m
  • Muckle Flugga: Thomas and David Stevenson; temporary light 1854, tower first lit 1 Jan 1858; Fl(2) W 20s, focal height 66 m; supplies by Blondin hoist
  • Waves: design pressure 6,000 lb per square foot = 287.3 kPa (printed as 300 kPa) = 29.3 tonnes-force per square metre; probably a local peak, not a uniform load (my reading)
  • Units: 1 long ton = 1.0160469 tonnes; 1 ft = 0.3048 m; 2.084 nm per square root of a metre
  • Conflicts: Bell Rock height 35 or 36 m and contractor Rennie or Stevenson; Skerryvore height 156 or 157 ft; Muckle Flugga height 64 or 66 ft and masonry or brick; listed ranges versus geometry
Coming next
How Lighthouses Work 7 is about the Stevensons: Robert Stevenson, Alan, David and Thomas, the Northern Lighthouse Board, Robert Louis Stevenson's family link, and the wave dynamometer.