-
Why crime rates per capita for small groups are brilliant if you are a cynical manipulator
Assume I’m a dishonest man.
Assume I run a few Facebook groups, or even a newspaper website, where I want to stir up contentious stuff because clicks and engagement make me money. I can spend a week or so campaigning for the UK government to release crime figures with group data attached. Any group data will do (nationality; religion; gene group; football club; martial art practiced; preferred type of silly-straw) as long as the groups are fine grained enough, and I don’t care about any small group especially, people will find things to argue about.
So I thought I’d prove this. The python code used to run the simulation and make these graphs is available here:
- Population = 10 million
- Constant chance of event 0.001%
- This is the same across every person. It might represent arrest, or a heart attack, or whatever.
- Number of groups = 200
- Group sizes distributed following a power law. The smallest group is the graph below is still ~31000 people. This is a pretty good model for most human culture/groups, they’re pretty fractal. I’ve add a graph of this dataset from the UK for a visual comparison.


So, lets run the scenario. For a unit time period, every single person has the exact same chance of the event happening to them. The total count of events clearly follows group size….

BUT events per capita clearly indicate a bunch of troublemaker groups! Not only are they 2-6x more likely to have an event per capita compared to the main population, they also exceed the standard statistical test for significance! We can be 95% confident that these groups are just terrible. Must be a cultural thing, SEND THEM BACK!

STATISCAL PROOF that some of these minority groups I enforced a constant event rate on are still unable to really live like the rest of us!!! /s
Advanced sleight of number.
Tests of significance
Of course, you might be arguing with someone who did stats to at least A-level. They know that a 95% significance check has a 5% error rate. That’s 1 in 20, and there’s 200 groups, so surely you’d see 10 groups with a significant result purely by accident right? But we see 29 groups above the green line in that graph. What more do you want? That’s pretty good proof. SEND THEM BACK!
There’s some more advanced stats needed to calculate the true significance pattern for a non-normally distributed population, and you should also consider the error bounds of the confidence interval (Yes, you can be XX% confident where the upper and lower limits of the YY% confidence bounds are, and no, they tend not to be symmetrical. Here’s one I did earlier.).
What’d you’d find if you did that would be a increasing error bound and a shrinking confident bound as you get into smaller and smaller groups. Results basically become a shrug, and the value meaningless, but that does not feel intuitive, it’s easy to dismiss by the confident, and it doesn’t sell clicks.
FIXING IT.
EDIT: Reddit user Kataera had some much more specific notes on this section, and felt that by not showing how it can and should be corrected for, I was giving a misleading impression that this problem is unsolvable. It’s not. Any competent statistician can knock this off in a lunchbreak.
First, looking at the code that was used to produce this article and the findings in the post, there is an immediate error and a smaller issue that both stick out like a sore thumb, present in these three lines of code:mean_group_population = float(group_populations.mean())rate_std_mean_group = np.sqrt(EVENT_PROBABILITY * (1.0 - EVENT_PROBABILITY) / mean_group_population)likely_above_average_threshold = EVENT_PROBABILITY + Z_95_ONE_SIDED * rate_std_mean_groupThis calculates the standard error for a group of average size, then draws that as a flat line and compares all 200 groups to it. But the whole purpose of this post is that the groups are meant to have huge variations in size, with the largest being 18.1m and the smallest 31,428. Therefore the smallest group’s true standard error rate is at least ~3.3 times larger than what is reported in the post. Every small group is being tested against a threshold that is far too lenient, and is the entire source of there being 29 groups above the line when you would expect 10. [This is the source of the weird rising linear line below the 11 big peaks in the graph of events per capita.)
The other issue is that the threshold is built from the defined and fixed event probability, meaning it is being testing against the known true rate rather than an estimate from the data. In real world analysis, the probability has to be estimated from the data and the error carried forward in the calculations. It has a minor impact, far less than the actual error, but it is a flaw in the methodology.
[Finally, the other fault/sleight of number I’m using to make a bunch of (truly) random results look statistically significant is carrying out multiple tests at once, and only reporting the significant ones]:
The example is easily corrected by a number of different methods, such as Bonferroni (which was mentioned in another comment) or Benjamini-Hockberg, computing the error per group (you’re already using numpy arrays) and use the curve as the threshold, or you stop using the z-threshold altogether and instead work with the binomial directly.Reversion to meme
Long term, with enough repeated trials (or years, if you are looking at a consistent rate over time), even the small groups will show regression to the mean. Since that doesn’t sell clicks, the trick is to keep the data fresh. Here’s three more runs of the scenario, using a slightly different seed.



oh. They look bloody identical! what’s going on! The number of events are changing:
- seed 1 -> 672 events
- seed 2 -> 723 events
- seed 42 -> 654 events
- seed 100 -> 782 events
- seed 999 -> 690 events
But the size and distribution of the groups remains the same. Most of the (pretty rare) events are occurring in the biggest population group(s) (and so most of the change in total events is happening in those groups, with the event/capita change being too small to see). Once you get past the top 50 sized groups, the per capita rate is set by a single event happening or not and the group size.
Long term, regression to the mean, might actually take quite a surprisingly long time to kick in for these small groups. Good! I can string the contentious out for as long as profitable!
Texan sharpshooting
There is a catch. This method won’t work if you are trying to be specific in your condemnation. If you really have it in for a suitably small group, say Iraqi Kurds, or diagnosed auADHD, or ex-squaddies*, then you may or may not get lucky in what the events per capita rate currently is. If you just want to pick on people generally, then it’s fine. Even for a scenario where I have fixed the event rate consistent for everyone, some unlucky groups will stand out. Just highlight them.
Complain about them!
Bang on about them!
Claim you are not victimizing them, you are just following the evidence!
There will always be a cluster if you are willing to choose after the stats come out. And if the cluster moves next year, just change who you are desperately worried about. No-one will mind. They’ll be too busy arguing.
-
Throw visual programming away? The return of text code.
Quite a few years ago, the great excitement on the block was rhino-grasshopper, and the intuitive visual programming revolution, letting people who thought text programming was too hard for them to generate wee scripts like:

Normally with the script in one window, and the geometry it was producing in another, so there’s a instant feedback loop of changing a number or slider and seeing things warp.

There are a few nuances to the UI. The first is that while the individual programming scripts inside nodes may make use of loops, building a loop outside of it was (intentionally) nearly impossible. This meant that algorithms for generating fancy shapes or bits of architecture were all about the single pass through chain of operations. It became a point of pride in advanced users to use a single data tree, kept intact, all the way through the operation.
This required some gymnastics, and sneaking a lot of maths back in for people who preferred to think visually. I enjoyed it. I’ve written a little about it here, and it’s striking how hard it is to share information – you need a picture of the visual program, close up enough to see what is plugged into what, and then a paragraph of text to explain things.
Generational anxiety abruptly returns (10)
Blender is much older than grasshopper. Like all the old 3d geometry manipulation software (inc rhino), it has scripts. Old school, keyboard bashing, text based scripts. The kind of script that is 30% algorithmic thinking, 50% boilerplate python code to enact it, and 20% incantations (specialized code vocabulary for working with blender objects. The sort of codewords you need to know, not figure out on the fly). 100% of that is within the database and specialisation of python code writing ai agents like Claude.
Given all the development in the last few years, Does it makes more sense to use ai assisted python scripts in blender, or learn the blender visual programming route?
Engineers sure to find boomerang (7)
This was a fun puzzle I’d been saving for a learning exercise in blender sverchok. Make a classical V shaped smooth meshed parametric boomerang. Requirements.
- Make two arms, each with an aerofoil profile. Cap the ends neatly
- Make sure the aerofoil profiles suit the rotation direction for a left handed or tight handed thrower
- Since the aerofoil won’t align, manage a smooth transition from one arm to other as you go around the corner.
- calculate the center of mass for the mesh, and then reorientate the aerofoil profiles, especially at the fast moving ends, so they are aligned with spin around the center of mass.
- This isn’t a deeply optimised boomerang, or anywhere close to some of the crazy practical research shapes out there. (world record holder looks like ?)
- I was aiming for something more like the below, which comes from one of the very few engineering flavoured guides on boomerang making: https://aeromodelbasic.blogspot.com/2011/10/how-to-make-traditional-boomerangs.html

The final working code is here. There’s still a slight overlap issue on the outside of the elbow on wide models with acute angles. A few 3d model examples are here.
It took about six hours, and cost $50 worth of tokens.
Process review
As always, the ai got me close very quickly. It handled the blender script incantations and dealing with active/inactive 3d viewports extremely well. I’m not joking when I say just that aspect would probably have taken me 10-14 hours to research and troubleshoot.
I was human in the loop doing three tasks. I was copying and pasting the script into blender, running it and giving feedback. In other code I’ve developed, the ai has been able to run the code itself, run tests, and collect precision feedback. My second task was prompting on the algorithic approach, as I watched and understood more about what was easy and what was hard in blender python. My third task, in extremis, was going in and manually correcting the code so that we could move on to the next stage.
It was more familiar with aerofoils than boomerangs. I do mean that in the anthropomorphism way*. The word aerofoil and some half-assed, insufficient parameter names was enough for it to produce a credible profile that was a correct mix of sharp edges and smooth transition areas. It used consistent terminology for the parts, making it easier for us to report errors in the process to each other. That familiarity (deeply entangled nest of prior weights forming an attractor in liminal space if you prefer, but it’s a mouthful) made it quite hard to change the mesh density. Claude runs “sanity check routines”, which are great when they pickup typos or figure out which parameters name likely refers to what thing; but it is aggravating when I ask for a coarse mesh and decides I must be mistaken “because aerofoils are smooth”. You can burn tokens here without moving.
By contrast, it had only a vague sense of a boomerang. First version was two curved, unconnected arms. Then overlapping straight arms, then a delta wing (saw “the aerofoil profile must logically face forward” flash past as Claude muttered to itself.). Then smoothly connected arms, but with the aerofoils all pointed straight up! Then a boomerang that managed the transition smoothly, but by turning one arm inside out!







That last one (inside out) clued me in. I got it to rewrite the algorithm so that each arm had a separate profile. The same shape, the same nodes, but in reverse order. So as you went along the line from one tip to another, the profiles were all drawn clockwise. Adjust the profile so that the nodes were equally spaced around it, manually experiment with offsetting the index of the second list of nodes, and eventually I (we?) got to a place where node 1 in profile 1 could sweep around to node 1 in profile 2.
At that point what I wanted the code to do, and the default assumptions (higher median probabilities in the liminal space) started to coincide again, and Claude was able to recursively build out to the target mesh making script. It wasn’t the algorithm I had in mind at the start, but it’s a reasonable one and I’d probably have ended up there working on my own. I did get annoyed with one of the elbow frames having a slight rotation and thus overlap with one of the arm frames. The mesh remained intact, but it meant a tiny area being folded inside itself, which is a painful error for later CAD/CAM/Printing work. I spent ages and multiple deep looping prompts trying to correct it. Claude kept jamming, crashing or spiralling since it felt the only solution was to completely rewrite the elbow blending algorithm (instead of delete that frame, or shift the arm a bit, both of which I suggested, and were ‘user error corrected’ away in its own loops) I never did solve it, but the problem disappeared on its own in the next stage.
Next was calculating the centre of mass (COM). I had expected to use the mesh we had just made and a built in blender function. But there are many many examples of approximating volume and COM out there in different languages, all done by working with slices. We had just built a list of slices, so Claude went down that route. Shrug. It worked well. I had it draw a ball in blender at the calculated coordinates, and it looked like a sensible result. Moving straight on.




Now, this next stage took a long time, and a lot of tokens, because my own understanding was faulty. I was literally asking for the wrong thing, and when i listed checks to help Claude understand, these checks were contradictory to what I asked for. There was minor confusion when I tried using coordinates, as the coordinate space during generation had (0,0) on one tip of one arm, but (0,0) was moved to the middle of the elbow in the Blender model. The other issue is that there is not widely standardised terminology for parts of a boomerang. Realising this, I actually asked Claude to define the terms, but when in the very next prompt I used the same term it had defined, it had to consult with itself, redefine everything (not quite the same either) and then start work processing my actual error report and script changes suggestion. This burns a lot of tokens. You can do the unusual and unnamed things, but it will be more expensive**.

The key mistake I made was being sure I wanted all the profiles aligned so that they were on planes that passed through the COM. (top left image). After a night’s sleep, I realised of course that the aerofoil is going around the COM, so needed to be at 90 degrees to that. This was easier to implement (following the more likely paths in liminal space). This made the arms look pretty good, but meant in the elbow all the profiles basically rotated into the centre line of boomerang. Exactly what I asked for, but making the boomerang impossibly thin and fragile at the centre.
Fortunately, the script had a well defined area already for the elbow, where the blending between the two profiles occurred, and it was an easy thing to direct that the aerofoil plan rotation effect should be reduced to nothing in that zone. Since the correction is opposite handed for the two arms, and Claude kept losing track of which was which, in the end I just watched which lines were being changed between three attempts, and then manually tweaked them until the mesh was coherent. At that point I was happy and stopped.
Next step is CAM slicing and making a few variants at the makerspace. The idea is they can resized to fit into offcut frames.
In short, why ram must lose head to boomerang? (7)
Lessons learned:
- It handles the blender plugin aspects REALLY well. Using python inside blender is now my default approach. Sorry Visual Programming!
- It handles the standard, quick defaults really well. The first set of graphs in the heatpump post was half the output from just putting the csvs in a folder with the command ‘analyse the data in this folder’. The other half were basic checks I’d have done myself anyway, but didn’t have anything interesting worth posting.
- Its not enough to structure your code in sensible functions and processes. You also need to think about the parts of the structure you will identify for error checking, and make sure they have a linked identity within the code, so that the LLM can grasp literally ‘what’ you are talking about. Doubly so if you aren’t exactly sure what to call bits yourself either.
- When Claude works, it works incredibly well. It is also geared to encourage rapid fire attempts (all of which burn tokens***). When it isn’t working, you are in a liminal space where the easy route/defaults lead away from where you are heading. Step away and think. In one case I had to change the algorithm so that the easy route led the way I wanted. In another, I was simply wrong and trying to force the contradictory. And a third, I decided to ignore that problem for now and it disappeared on its own.
- The number of lines of code increase rapidly, then, if you are consistent and have a goal in mind, you should see it stabilise and just wobble a bit as you develop and error check. When changes start dropping to a single location or a short length of code, it may be better/faster for you to read it and test amendments directly. Don’t waste tokens just to run code!
Below is just the footnotes, appendix, and the answers to the section headings.
Throw some symbolic boomerangs (3)
*like I’m not convinced people think most of the time either. I certainly don’t.
** The effect that working with LLM systems that have various built in assumptions and biases (basically towards an USA mindset) in flattening and pulling headspace and, with wide usage, entire societies, closer to those cultural assumptions is already being studied and discussed. The drift of American spellings into autocorrect English is an everyday example. Refering to NHS patients, or people coming to repair cafe as ‘customers’ is a more enraging one. Simon Wardley (of wardely maps) has a fairly dystopian view of the whole thing, quoted below (and replicated from here):So, we’re moving from large language models to large multimodal models. So, it’s not so much code as text as symbolic instructions. You’ve now got code and images and all the rest of it could be, you know, your code could be text or images and we’re changing the media. Now, why that matters is because that’s how we reason around the world around us. Tools, language, and medium. So, to give you an analogy, tools would be the printing press, language would be the written word, and the medium would be paper. Now, if you allow control of that into the hands of a small group of individuals, they will literally control the way you reason about the world around you, which is terrifying. It’d be like somebody owning the printing press paper and the written word. You know, you’re Charles Darwin coming along saying, “I’ve got this new idea for how species adapt. I’m going to call it evolution.” They go, “No, you can’t have that word.”
“Well, I thought I’d write a paper.” “Not on our paper, you won’t.” “I’m going to publish it.” “Not with our presses you won’t.” I mean, you control, you hand over control to a small group, which is terrifying, which is why open source is so incredibly important in this space. But I saw the OSI definition of open source, it’s not enough. I mean, it’s got to be all the symbolic instructions and that includes the training data as well because they are symbols that change the behaviour of the system. So, you know, that’s the hot topic at the moment for me, is the fact that we’re walking into this wonderful world of basically handing control of reasoning, our government seems to be handing control of reasoning to… Except for the Chinese, the Chinese are always on the ball with this stuff. But we seem to be handing the ability to reason to a small group of individuals. Our government should be coming out strongly in support of open-source AI. And that’s not just the code and the models. That’s all the way down to the training data. And I mean, there should be huge pressure towards that. Of course, it means people might make a little less money. But you know, we’re a society here. And the rich are rich enough.
*** My first draft had ‘generate revenue’ instead of burn tokens, but TBH I’m not convinced the price we are paying per token does actually cover the electricity and cooling bill, let alone the fraction of the initial training energy or the various externalities. Dear future reader, it’s 2026 06 16 and the bubble ain’t burst yet.
Spoilers sweety!Crossword clue 1. Generational anxiety could be thought of as BOOMER ANGS[t] – ‘abruptly’ = removing the last letter
Crossword clue 2. REBOUND. RE for the Royal Engineers Corps, Bound as in sure to.Crossword clue 3. YRAMMUSt. Boomerang it (reverse) and take off first letter (lose head). This one is all my own work!
Crossword clue 4. Take boomerang as an instruction and reverse symbolic and take some of it: ciLOBmys -
Heatpump
I’ve had the heat-pump installed since late April. We’ve had a record breaking hot spring in the UK, so the data is interesting, but not very helpful for ‘does my house stay warm’. A big chunk of our energy use at this time of year is hot water (for showers). That’s an intense demand for hot water, which is bad for efficiency. The system likes running low and slow.
The system is a Valliant external heatpump, and a 110L Newark ‘mini’ store. They are lovely, clever bits of kit. We reused all of the microbore piping from the old system, and replaced a couple of radiators that I hadn’t gotten around to upsizing yet.





A few oddities. You can see the early setup time in the first graph. Drak grey bars are weekends. The heatwave is obvious in the second (the outdoor senor is on a north facing wall). The ‘setpoint’ is the target interior internal tempreture. It’s at 30 degrees a couple of times when troubleshooting. The rest of the time it’s cycling between 20 during the day and 15 at night.
The COP collapses for the heating during the heatwave, as we are into a zero divided by zero error correction issue.
I was interested in figuring out more about our hot water use. The left graph is a polar chart, that shows the temperature in the hot water tank as we go around a 24hr clock. The three nights with the tank being cool were due to it being turned off. Otherwise when the lines moves inwards (cooler), hot water is being used up. We see steady demand spikes for hot water from about 8am through to midday. Some days I might start work early and have a shower after completing something. Other days one of us has a midday gym class (or it’s the weekend and I need a shower after doing a lot of DIY).
The other big wave of hot water demand is the evening, from 1800 to 2100. Again, no real surprises there.
I can’t sensibly reduce the amount of hot water demand, but I can choose when the hot water tank reheats. I’m on Octopus Intelligent Flux, so electricity prices follow the market (as previously discussed). I can’t accurately model that, or use the fluctuating values to control the tank (yet), so above is a proxy, with three phases of cheap, typical and peak electricity, and demand overlaid on them. Completely unsurprisingly, the best strategy is to heat the tank v early in the morning, and top it up in the afternoon. A lot of analysis for a common sense answer. Since most days I have solar surplus at midday, I’ve started the heating up at 1130 to cover the midday showers too.

I was also interested how well the house performed in the heatwave. The outdoor sensor is on a north facing wall in the back garden. The indoor sensor is in the centre of the house in the living room, out of direct sunlight. The house has thick insulation in the loft, thin cavity wall insulation retrofitted, and a thick growth of wisteria over the south facing wall. We practice tropic heat hygiene, ie – the blinds are down and direct sunlight isn’t allowed to heat the floor, and while the outdoor temperature is higher we keep the windows shut, venting the heat at night instead.
Looking at the first graph, clearly the house is doing a great job of shielding us from the daily swings, but it does heat up steadily over the heatwave, and take a long time to cool down again, so thermal mass is clearly very important too. A house that is currently soaking up heat in summer and keeping you warm in winter is great! As the climate changes, there’s a risk it will become one that soaks up and gets too hot by April, and cooks all through to August. More calcs needed. Cross-correlating the two daily temperature cycles gives a delay of 2hrs (or a very unlikely 25.5hrs). This suggests the house isn’t brilliantly insulated. I’d prefer something like 6hrs. Something to think about.
-
UK Grid storage
Base load is dead! And my house is haunting it’s grave!
Let me explain. I’ve long been interested in the UK green grid transistion, and right now battery tech is changing the landscape incredibly quickly. It’s like being in computers in the early nineties. This is just a quick note to try and pin some things down. It’s not a formal literature review, and is mostly based on grey literature (industry puff pieces). Caveat fingers!First, a quick reminder that this is an exciting time:

Graph from https://ourworldindata.org/battery-price-decline 
from Mark Rosen’s excellent study on power generation costs at https://ourworldindata.org/cheap-renewables-growth
Base load is a pretty old term in electrical grid thinking. It’s the opposite of peak load, it’s the absolute lowest amount of demand on the electric grid in a time period. In the UK it’s normally something like the electricity demanded at 3am on a Tuesday morning, or something like that. In ye olde grid, lots of big powerplants (especially coal and nuclear) preferred running at a steady output, and were willing to sell electricity cheaper in periods of low demand rather than turn off. This led to basic market behaviour trickling down. Energy hungry factories might run a night shift. Ceramic kilns might schedule their hottest period to match the cheapest electricity. I remember my parents putting the washing machine on a time to run at night, when bills were cheaper.
Fig 3. by Jan 2026, the UK has 1.6 million domestic solar installs (out of ~28.6 million households). Since then we’ve had an oil shock…
Data from table 1 https://www.gov.uk/government/statistics/solar-photovoltaics-deploymentThis market incentive meant the seen baseload was not necessarily a true, fixed and unmovable baseload. As more and more solar is coming online (fig 3), the ‘so surplus it’s free’ period is rapidly becoming midday, not midnight. The market driven part of the baseload will follow the supply, and the night baseload will decrease even further. Baseload is dead! Good news for people stuck on late night shifts! Or so I thought. The complicating factor is that the UK grid has a lot of wind power on it. And wind blows at night.
At the start of this year I (finally) installed solar+ batteries. The installation is not very extravagant. I have a end of terrace house with an awkward hip roof. I added the solar because I had scaffold up to fix the guttering anyway. The battery is a small domestic 4.66kWh unit, the size of a large briefcase bolted to the side of my house. By March, I was already generating more energy that I was using, and receiving a small income*. The battery didn’t work exactly like I expected. From the point of view of the national grid, my house is now overnight baseload. As I said, it’s haunting the grave.I’d expected the solar to charge the battery up over the day, to use most of the battery up in the evening, and be mostly self sufficient that way. Chasing the market, what actually happens is my battery charges up on nights when there’s an excess of wind power for the tiny demand. The battery then sells all of that back to the grid for the morning peak, recharges off solar up to 4pm, and then sells all of that into the early evening peak. If the day is forecast to be gloomy, or the night isn’t windy enough, it reverts to protecting me from price spikes. It’s only April, and maybe that pattern will change as the days get longer, I’m not sure yet. There’s 1.6 million households doing similar, and a few million more with smart EVF chargers. Baseload is dead, but it might actually be increasing as batteries shift usage away from peaks.
“So bloody what?” I hear the keyboard warriors clack. “It’s not enough! can’t run a country on renewables!”. I refer you back to that first image, of the steadily reducing battery price. There are other battery technologies likely to take over at grid scale, but for now the research investment by the phone companies and then the car companies is also driving the domestic battery price point. This is where things start moving so quickly it’s very hard to nail numbers down. But I’ll try.
April 2025, Ofgem started a new scheme for Long Duration Electricity Storage. It’s reported that in 2025 another 4GWh of electric battery storage came on line. That’s five times the amount added in 2022. It’s still trivially small compared to the pumped storage water batteries, but it’s exponential (and distributed across many projects). Batteries don’t scale to hydropower size easily, but many small sites are easier to find, finance, build, and they can target relatively smaller, sharper peaks and troughs compared to a three day reservoir. I’m not seeing build out slowing down for a long long time.
A lot of the available info out there is in reactive generation (GW), while I’m interested in total energy stored (GWh), and will focus on GWh. For a good explainer of the difference, the need for both, and a rough estimate of scale of the problem, I heavily recommend skimming this chapter of the late David McKay’s 2008 masterpiece Sustainable Energy without the Hot Air.

Fig 4. Graph from https://www.energy-storage.news/another-record-breaking-year-for-uk-battery-storage-as-4gwh-comes-online/ I took the data from fig 4 and used it to generate an exponential curve to match the data. I deliberately tweaked it to be more conservative (although the data isn’t quite exponential, and if I was being paid to do this, I’d probably look for a better fit). Here, it predicts slightly less battery installs then we actually saw.

Fig 5 taking the same data as fig 4, and fitting different models to it. There is another report from the same site, which claims
A total of 120MW/140MWh of grid-scale battery energy storage system (BESS) capacity came online in January 2025, bringing the UK’s total operational capacity to around 6GW/8.3GWh.
Meanwhile, the amount that is now under construction has reached 8.2GW/18.7GWh. That means that, assuming no significant delays or cancellations, the UK’s BESS capacity should increase by at least 134% by GW power and 224% by GWh capacity in the next two or three years – to around 14.1GW/27GW.
Now I can’t square that an extra 140MWh a year and the claimed capacity of 8.3GWh (it would be 59 years of building at the 2025 rate?, although that earlier article basically has it double from 4GWh in 2025). By comparison 1.6 million domestic installs of 4.66kWh each are 7.456GWh of storage behind the meter. Maybe the same again on Grid linked EVs. Things really are credibly moving that fast….
I find it easier to treat Fig 4 as a year by year snapshot, with the total grid-utility BESS capacity in 2025 being 140 MWh. This tiny compared to the many GWh in pumped storage sites. It’s very conservative. British Hydro think that in 2025 we had 49.7 GWh in pumped storage alone. In Nov 2025 Neso put out their latest future energy scenarios report. They think in 2024 we had 37 GWh of electric storage (nearly entirely pumped storage, but only 75% of British Hydro’s stated capacity). Under the holistic scenario, Neso think will need 205GWh by 2050 (still much less than the 1200GWh Mckay thought we may need). Lots of circles to square there.
I took that build out predictions for BESS and ran it to 2050. I took the British Hydro table of data, and assumed we built out all the various proposed sites. It’s a very mature technology, and the longest part of it is waiting for the reservoir to fill with rain. I assumed Loch Earba is complete by 2033. I left out the two on the table that have started construction but don’t have a confirmed GWh rating yet.

If we assume BESS is added at the same rate as the last five years, it isn’t ever larger than a single pixel on the graph. We end up with just over 250 GWh of energy, using all possible hydropower pumped storage. 
If we assume BESS continues to build out exponentially, feeding on price arbitrage from fluctuating supply on renewables across the grid, then by 2039 it reaches the 8GWh that some sources think it is already at. And then it takes over. Compared to the 205GWh that NESO suggests we need by 2050, the hydropower scenario covers it with a lot to spare. The BESS build out scenarios provides 8x the battery storage needed.
Even with the UK investigating lithium mining, such intense levels of battery build out would need sodium batteries to become commercially available pretty dang soon. It might mean the end of Gas Peakers. It would also solve a lot of grid issues in the UK, with far less people affected by and objecting to nondescript big buildings in urban edges then by pylons marching across the landscape. It seems unbelievable, but we already seem to be moving so fast that different sources disagree about existing capacity by multiple GWh. Exciting times. Says the man with a bike, solar, and a battery, and watching the grid with an increasing sense of detachment**.
*Financially I couldn’t afford the solar and roof work outright, so I’ve traded a monthly £70 electric bill for a monthly £169 loan payoff. The loan interest has added a year or so to the ROI period of the solar system, less if I pay it off quicker. Weirdly (not weirdly at all), the new gutter has no ROI at all. Like most things in my house, it just costs money and deprecates. At best it avoids more extensive water damage to the house. It’s psychologically interesting how the possibility of something paying for itself triggers a different solving part of the brain.** I’m currently installing a heatpump. Dumping all heating, hot water and cooking demand also onto electricity is likely to make me fee a bit vulnerable again 🙂 More to come on that.
-
Bike Trailer 2
Previously, I talked about the harder part of bike trailers – Bike trailer hitches – Bakefoldprint.
Today, the rain stopped for lunchtime, so I took advantage of that to try the other hitch design. It works, and I’ve just got back from hauling 5kg of concrete rubble a mile up a rough cycle path to fill in a pothole. Feels good man.

00000000 


I used the rough pattern from W64807’s Easy Wooden Bike Trailer. I want to build that one anyway, and I figured I could reuse the hitch if it was too lightweight. It works, and I’m very happy. The chief disadvantage is that is has no tolerance of the bike leaning while connected, which is why there’s no bike attached in the photo.
When I started out I got fixated on dimensions for the hitch. You don’t need to. I started with a bit of square stock. I put the bike with the back wheel against the wall, put the end of the stock against the wall and marked where the seat post was. Then I added 50mm or so for clearance and cut the wood.
I used a bit of old floorboard for the Y shaped hitch. I just drilled out a hole matching the bike seat post, and cut down to meet the sides of the hole. I screwed it to the stock, smoothed the shape out with a jigsaw (optional step), unsrewed it, add the strap between them and screwed them back down again. I could have got fancy and lap jointed it in, but it’s fine as is. The strap was just cut long enough to wrap around the post a few times before going through the buckle. W64807’s version is threaded through two holes, and that might make it easier to adjust to get a tight tie, but this works ok for now.
(The first time I got off the bike without thinking, it lent over in the Y fork and split it. It still works fine, but I make sure to wrap the strap around the outside of it a couple of times when tying onto the bike.)To get the height of the vertical, I drilled a hole in the trailer. I wedged the trailer level, propped the bike level in line with it, and poked the Y stock onto the seat post. Then I lined the rest of the stock up with the bottom of the horizontal piece and marked the hole in the trailer. That was good enough. The tilt of the trailer and the Y fork sliding up and down the seat post will accommodate quite a few mm error.
I just butt jointed the horizontal and vertical pieces. I sandwiched them between some scrap plywood, and popped an offcut into the space between them before screwing it all tight. The offcut (and screws through it) keep the plywood pieces from flexing and delaminating too quickly, and helps with torsional forces.
To fix it to the wheel barrow, I first tried a couple of wood screws. Apart from knowing that wood screws in direct tension are a fatigue failure in waiting, I found on a test ride the connection wasn’t stiff enough in plan, and I got the same trailer snaking failure as the thin steel wheelbarrow wall popped in and out. To mitigate this I got more of the old floorboard. I trimmed one edge so it fitted into the steel lip, and put a bunch of bolts and wood screws through it. It’s slightly overkill, but makes me feel more secure.
I’d been going around in design circles for the lid hinges. The plastic lid is a little wider than the steel, and hinges that don’t clip the wheels or posts or limit what I can carry was a bit of a challenge. Aldi had a special on magnetic knife racks this week, so for 2x£1.99 I have a magnetically secured removable lid.
Finally, I cut the steel tube axle to length, and hammered some scrap pine wood into both ends. This will keep the bulk of the rain out, and keep the axle in shape
Still to do
There’s still a a bit of fettling to do, especially on the back edge to reinstate a smooth metal wheel barrow rim and line it up with the magnetic strip.
Some handles, knobs or something would be good. I should seal the holes in the lid while I’m at it.
Linseed oil on the wood, maybe paint the lid.
I’d like to get a wee flag on a pole to put on the back for visibility in traffic. This is a pretty common thing in the UK for bike trailers to help people who can’t see over their bonnets, so it’s sensible and matches a emerging standard.
I’d like to make more secure mounts for the 20mm axle underneath the trailer, and I’d like to replace the current bodged wheel restraints. They are currently the hard plastic ones that came off the wheelbarrows, cut in half to fit onto a much bigger diameter tube and secured with jubilee clip. It looks as high quality as it ain’t. Since I need something hard wearing, but won’t wear the plastic wheel down, I’ll probably just 3d print them. I’d better fix the printer then! If you are thinking of your own and don’t have a printer, take a look at Metal Conduit Saddles (20mm).
Laura Kampf uses shaft collars for wheel restraints (thick ring with a grub screw), image below. They cost 5x the metal conduit saddles, but seem to be the engineered product for the job.

-
Getting to grips with infrared cameras 01
I’m interested in infrared and hyperspectral imaging. A friend lent me his.
Top 3 images are a kettle and (empty) teacup, the back of my house, and a closeup on the back of my house showing where a bricked up window isn’t quite as well insulated as elsewhere.




The big image is showing the dividing line between two neighbours houses, one with cavity wall insualtion and (it seems) one without. The cold spot on the roof is fake – it’s a angled skylight, with the glass reflecting the cold sky. Reflection, angles and distance are all at work, and can be worked with.
I’m interested in bridges. These aren’t heated internally like my house, so I would have to rely on 1) sun heating building up over time, 2) cold from wind forced evaporation of water and 3) different emissivity characteristics (how much IR from the sun or from a lamp it reflects).
On an overcast, damp and still day, a normal photos shows the really clear damp patch on the building from the leaking roof detail. There is no corresponding visible cold spot in the infrared image (although the cavity vents are glowing). Damp is associated with cold for humans because it feels cold (it conducts heat away from the skin efficiently). Unless there’s a wind creating some forced evaporative cooling, the damp is actually more visible to the naked eye then the infrared!

tut tut new build 
My local climbing wall has an excellent fog friendly cafe/working area that has an infrared lamp. Here it is before, with the lamp on for various times, and then after. I may have ordered pizza too.

00000001 





The last photo the lamp is turned off, but still cooling, and so still throwing out IR. The brightness of the images is a mixture of actual surface temperatures and IR from the lamp reflecting off things back to the camera.
Let’s look at that in more detail. I put a bit of wood, a plastic box and a mug on the back of the seat. With the lamp on, similar reflectivity dominates.

before lamp 


after a few minutes cooling again, the wood, plastic and ceramic re distinguisable 

After a few minutes cooling, it is possible to tell them apart, but it is a little disappointing how weak the effect is. The cup shows an interesting cooling pattern – the outside and inside of the rim cooling at different rates, and the bit that faced the lamp directly cooling faster than the side- presumably because the side is getting indirect heating from the board it is sitting on? A nice reminder of the difficulties of even cooling of terracotta pieces in a packed kiln.
Finally, since he cameo’d into quite a few images, here is Ralph.


Ralph the 34kg hunting dog -
Bike trailer hitches
I need a bike trailer. Sometimes I need to move toolboxes or sewing machines around for other members of the repair cafe. Sometimes I need to take a few large boxes of survey equipment with me to site. At the moment I ‘need’ to be able to move several hundred kilo of smashed old concrete roof tiles to fill some potholes on a bike trail. I almost need a nice clean road trailer and a smaller tougher off roader, and I’ll probably build both. Both need at least two wheels for stability in loading and unloading.
There are a LOT of good DIY bike trailer designs out there. This post isn’t about them (although I’ll flag them as I go along). It’s purely about the hitch, the bit that links the bike to the trailer. The hitch needs to be able to transmit a lot of force between the bike and the trailer. It needs to not collapse or buckle if you need to emergency stop while going downhill with a full trailer. It needs to be able to let the bike turn in plan, lean a little bit side to side, and rotate.Bike post hitches
A lot of hitches are attached to the seat post. This has some advantages:
- the hitch is accessible and largely out of the mud.
- it suits rotation nearly above the back wheel axle. This helps keep turning circles smaller and low effort. A rigid arm that sticks out behind the bike creates shear drag across the trailer wheels.
- The goose neck arm needed to reach from the trailer to the post is a handy thing to drive it around with as a hand cart.
Example bought ball hitch. This isn’t something I could easily make at home. You can get cheaper variations for £20.

The Greens and Machine’s boys preferred solution. It is a couple of links of heavy chain welded to a plate that is clamped to the bike post.
A no weld solution would be a normal gate hasp and staple with matching bolt holes. Bolt them together. Strap the hasp part to the bike. The hinge gives you one direction of movement, the loop manages the other two. If you have to buy the hasp and staple, I’m not sure you’d save anything compared to just buying a purpose made hitch.


W64807’s Easy Wooden Bike Trailer is a seriously well designed approach, and one I’m going to be building. He uses a wooden U slot to give the compression connection to the post, and a cut down cargo strap threaded through the wood for secure tension. The relatively thin/flat connection means a decent amount of rock and wiggle can be accommodated. I’d argue it’s even simpler and better then the Greens and Machines approach for light loads on smooth(ish) tracks.It also can be fitted to anyone else’s bike without having to mod their bike.


This is the solution I’m going with.
At the other end of the scale, this design cuts the entire hitch and gooseneck bar out of a waste bike frame. They are profligate with their welding in the video, but it’s not really needed with enough strapping and hacksaws. It does mean taking the seat off to connect and disconnect the trailer.Half Frame hitches
Another common option is connecting the trailer straight to the bike frame, normally around the where the back axle is. This has some advantages:
- the whole trailer is much flatter, so normally easier to store
- It works no matter what height your bike saddle needs to be
- it doesn’t clash with pannier mounts
- for heavy stuff on rough tracks, if something falls or slides sideways, you get a push sideways at axle height rather than up at the seatpost height.
I’m going to go with a frame hitch for the off-road heavy stuff hauling trailer.
The most common solution is a single arm, coming from the trailer, bending around a bit to give the back wheel space during turning and then connecting to a bracket mounted on the axle. The bracket is so simple and cheap it isn’t worth DIY.
The single best, cleanest design for a low arm trailer I’ve seen is: Bike Trailers from Edge Collective. It’s amazing, and very close to being an Art Nouveau masterpiece in conduit. Their design uses a super cheap axle bracket, and a short length of hosepipe to get all the degrees of motion needed without over complicating it.




I am not sure that’s going to be strong enough alone for my needs, but I could always feed a chain down the hoespipe. But to be honest, for my needs I want to be connected on both sides of the frame.
This complicates thingsFork frame hitches
These are needed for single back wheel trailers to stop it tipping over (and tipping you over) if you need to stop at the lights. Because they connect on BOTH sides of the wheel the only movement you can absorb there is up and down rotation around the axle, while the turning sideways (needed for turning the bike) needs to be done separately, once the fork has reconnected at the trailer front.
Doing this with a flat arm is risky. Sudden braking with a heavy trailer is going to cause that tiny joint to buckle. Instead we need a triangle for stiffness:

A practical (and very nice, but welded) trailer using this is below.

Single Wheel Bicycle Trailer With Suspension. : 10 Steps (with Pictures) – Instructables
At this point the rain reduced to ‘wet air levels*’ , and I started work…
It was still raining by most stadnards, so I decided to focus on the steel and plastic heavy duty trailer. Excuse the complete mess of the garden, it is on the list!

Rummaging in my available parts, I found I have a bunch of spring steel sections, roughly 3mmx10mm in section, about a meter long with M5 holes drilled at both ends. I also had two spare M5 holes on my bike frame just below the pannier bolts. But how to achieve the hinge?

The bit of angle iron is part of the old wheelbarrow frame. My biggest worry with fixing to it is ripping it off the barrow entirely. I may put some extra bolts and plates through in the future. The bolts are too long, but I’ve got a lot of those spare. The other ends of the steel screw directly to the frame. I pre-bent the spring steel using a wedge vice and a bit of electrical conduit to keep the main part of the steel straight. Then I drilled through the mild steel angle and mounted the spring steel on it so that is crosses over. The crossing over point creates a location of minimal rotational stiffness. It means when I steer the bike (gently, which is the only option with a heavy trailer anyway), one steel bends slightly, the cross over point slides up towards the bike and we get a smooth rotation (with the spring wanting to straighten everything back out, which is helpful (HAHAH, see addendum).

This is almost the same mechanism that is used for ‘concrete hinges’ in bridge work to absorb thermal sway movementents:

from Vertical section of a concrete hinge of the integral bridge [50] shown… | Download Scientific Diagram
Next up: Axles, bushings. a hinge for the lid and (legally required) red triangle reflectors, and when the weather cooperates, the timber lighter one. I’m glad to have cracked this the hitches so far!Addendum
Some more parts arrived, so I took the half built trailer out for a test run.
OH MY GOD.
So, trailer snaking is a thing. I was going to write a bit about it on vehicles, but watching this video it’s a little more complex then simple pendulm methods and stored energy: https://www.youtube.com/watch?v=JeEEC5eVNCk
BUT – using the paired spring steel link to the trailer means that when one wheel hits a bit of resistance on the track and swings out, the springs store that energy and force it back. I imagined it would make it go straight, but no, it swings too far the other way, and with continued energy input from the cycling (or going downhill), it very quickly becomes a huge swinging catastrophe.
Back to the drawing board on this one!* a recurring thing I have online is convincing people no in west wales just how temperate, but humid and wet it is here in the winter. This land is naturally a rainforest, a wine bottle left out in full exposure will fill up with water, not dry out from sun and wind. Rolling stones grow moss, interiors grow mould. Today is, relatively speaking, dry enough to work outside.
-
Gaudian bridge piers
The challenge was described in a engineering linkedin argument

In short, the bottom of the leaf pier has to be aligned to the river flow to reduce scour effects, while the top of it needs to rotate to carry the half deck of beams square to the span. Supporting it this way avoids gnarly torsional effects in the deck as heavy lorries pass over, but it does create a difficult transition. I promised to try a quick modelled example.
So what would Gaudi do?
Probably something starting from the idea of a hyperboloid. These allow complex curve transitions to be approximated using lots of straight pieces of narrow timber in a formwork. It means your straight(ish) rebar can be laid on the same lines, with inner and outer layers having opposed rotation. The problem is a true hyperboloid is a geometry of revolution, meaning any horizontal slice gives a circle and we need a long hydrodynamic pier. Let’s see.
Starting from the right: I drew a rough outline of a leaf pier, and a messed around a little with it to get a cutwater shape. I really don’t like the absence of any cutwater in the original design – piers ending in semicircles are terrible for inducing scour pits. I removed the middle of semi-circle, rejoined the segments and stretched it a little bit, creating some mutant child of a gothic arch and a segmental ellipse. Better options exist for sane layout.
Pier 1. (on the right) I simply put a pier on a cutwater, extruded it up 10m, extruded a 5m tall head and widened it until it could absorb the rotated pier top inside. It’s has plenty of space for rebar, but may make bearing access hard in the future, and is a bit top heavy, and a bit wasteful of material.
Pier 2 and 3 are related ideas. The top 5m of the pier is twisted to give a transition. Pier 2 is done as a single twist, and looks clumsy. Pier 3 is done with gradual transitions over layers, and looks better, but the contrast between the tall straight piece and the top twist still feels off in proportion, and the gradual transitions means that in the built reinforced concrete, to achieve at least minimum cover the straight(ish) rebar pieces need to be deeper into the section and thus less efficient. The waste is small but feels un-Gaudian. Bending all of the bars to slightly different angles (and getting them put in correctly on site) is a world of pain.
Pier 4 has a single transition from the cutwater up to the top. The single transition and careful geometry means two ‘legs’ of straight rebar can be constructed fairly easily at the sharp edges of the pier., with the middle bit just using lighter mesh. The width variance from top to bottom is proportional to the stress from forces acting on the edge of the pier or bridge trying to push it over. The sideways forces in this case would be the flood waters, or wind blowing across a bridge full of lorries. As a viaduct, it shares load up and down the deck so they can be much slimmer in the along deck direction.
The twist will create a torque from floodwater, which isn’t ideal and is a challengeable flaw in this design. I think it should work, and I like it, so lets take it forward to a Guadian style facceting.


What do I mean by Gaudian style faceting? I mean tweaking the geometry to ensure the formwork can be made from lots of thin pieces of straight timber.
So what I did (manually, although it’s an excellent candidate for parameterisation), is take the length of each horizontal edge on the cutwater, and slide the vertices around the top shape until the top edge was the same length. In Blender, the controlling parameter is a proportion and not an absolute distance, so I’m a few mm out in places. Each panel is therefore a parallelogram, lightly twisted along its length. Thin formwork material can accommodate such twist in construction.

So, that’s my contribution to the debate. It’s still a big lump o’ concrete and steel with a limited lifespan.
I wonder what a 2050 solution would be? Skew stone arch on self-healing cutwaters?
-
Basic design of a gravity thermosiphon for hot water
It’s a long title, but it’s what we’re here for. This is the informal run through, and a cleaned up version will be added to Appropedia’s thermosiphon article. It’s a how to plumbing math, basically. It will be in SI units. If you spot errors or emissions, or want to contribute an American unit translation, please please let me know in a comment or email. Many eyes make all bugs shallow and all that.
The situation
A friend is building an off-grid house in the temperate UK. It will be heated by a wood burning stove. The hot water tank for showers ect, is located above the stove, and there is a loop pipe between the two that carries the thermosiphon.
It’s a long and awkward pipe, and the friend was concerned that it wouldn’t work at all, or at least not fast enough to meet farming family needs for hot water.

Simple models
Design guides for industrial thermosiphons have a LOT of design variables to contend with, and pressure to optimise within that space. That’s not the case here:
Heat input: A woodburner with backboiler. Manufacturer’s spec says boiler output is 8kW (!!) with target output water temperature of 75°C. If you are using a diy solar water heater, there’s some more work you’ll need to do here to figure out the heat supply in different scenarios.
Heat store: A 350 litre insulated tank (Flowcube). The hot water comes in at the bottom, and mixes and rises up before flowing out the top back around the loop. Target maximum storage temperature of 75 °C. The water supply to the shower/tap runs on a spiral through the tank, so it collects heat from it on the way to the tap, but doesn’t actually touch the water in the tank/loop.
Liquid: Just water. Industrial systems might include phase change/vapour ect, but we don’t need that here. Water is VERY good at carrying heat. Some systems (not as committed to One Planet Development) might have antifreeze or similar in (which will increase friction in the calcs). If you are doing a lower temperature system you might need poison in it to avoid breeding Legionnaires disease.
EDIT: I asked someone (me da) who has built a few of these to review, and his recommended fluid isn’t water, it’s tractor coolant. It is designed to operate at these temperatures or above, and vastly reduces the chance of a steam explosion. The old stuff was pretty toxic. The newer stuff is still quite nasty. Traditional OAT methods seem least toxic, but check the material’s SDS. These fluids have a limited life, and can’t be disposed off down the drain, so there are implications there for houseowners. On the other hand, if you have farm equipment, you might be handling this anyway. This note will continue assuming you are using water.Transfer interfaces: These are fixed in this scenario. These are the complicated spirals or cross flow bits or modified fins that help the heat input get the heat into the water, or help the Heat store get it out of the water. They are normally major pinch points in the thermal flow system. In this case, we have manufacturers spec for the stove AFTER the transfer, and we are only concerned with the Flowcube’s temperature BEFORE the transfer (since again, manufactuer’s spec covers if it will be able to get heat out to the shower fast enough). This vastly simplifies our design case. At Appropedia level, if you are making your own, it might make sense to build these parts and test them first before designing the rest of the system. Design by testing is really the only practical option for these.
Pipework: This is the only practical design consideration for this case. What diameter (and what material?). There’s a limited number of pipe diameters (and standard fittings) available. The two obvious choices here are 32mm diameter (standard big copper pipe) and 1″ (the fitting on the back of the stove). Yes, UK units are a mess. There’s also Imperial copper and Irish copper standards, so check your manual/location. Since it is a hot water case (and the pipe is on display), the legacy default in the UK is copper, although plastic (PEX, C-PVC, and polybutelyne are all sometimes used with hot systems in the UK).
Simple Model – best case
Let’s ignore the pipework for now. The absolute best case scenario is the wood stove is running full power, and all of the output magically flying across and heating the water tank. This sets the minimum time it will take to warm the tank up – if it is days, or even hours, the system needs a rethink.
The flowcube (hot water tank) is 350 Litres of water ~ 350 kg of water. We want to raise it from an ambient 20 °C[footnote 1] to 75 °C. In this range, for clean water, it takes 4.179 Joules per gram per degree Centigrade change.
4.179*350*1000*(75-20) = 80,445.75 Joules needed to warm the tank up.
The stove output is 8kW, or 8000 J/s and so it needs just over 10 seconds to warm the tank up!! Even if our thermosiphon is hundred times slower, that’s still only 16-17 minutes, which is still plenty fast for recharging a hot water tank!
let’s proceed.
Model – balanced forces
To start with, the water in the thermosiphon is not moving. The stove is not lit, and the water tank is at room temperature. For it to start cycling, it needs to accelerate. You might recall from high school physics,
F = ma Force = mass * acceleration
What is the accelerating force here?
The main force is the difference in density between the cool water in the pipe at the top of the system, and the hot water in the pipe at the bottom of the system. The volume of the two (in a similar length of pipe) is the same, so the cold water at the top weighs more and ‘falls’ down the system, pushing the lighter hot water up. The actual height difference between the top and the bottom doesn’t matter much compared to the heat differential. Think of it like a pulley, the acceleration when you let go occurs because of the difference of the weight, not the length of the string[footnote 2].

Unlike the pulley, the thermosiphon is a loop, so what stops it accelerating forever? Friction. Friction in a fluid is a function of its speed, so as the system speeds up, the frictional forces increase. Once they are balanced, there is no net force and therefore no further acceleration. A familiar example with air as the fluid is terminal velocity.
Fluid flow is described by engineers as laminar or turbulent. For our purposes, the main difference is that laminar flow friction is proportional to speed (so double speed, double friction), while turbulent is proportional to speed squared (so double speed, quadruple friction). Fast flow through the mains tap is almost certainly turbulent. For 75 °C water, the flow is laminar if it stays below 0.028 m/s. I’m expecting this system to be laminar flow, which is nice as the maths is easier.
So what we will do is work out accelerating force, and the friction from the pipe length, the extra friction from any elbows, bends or fittings, and see where they balance out. That will give the speed of water flow, which will give the speed that heat can be transferred from the stove to the flowcube.
Darcy weisbach formula (pipe friction loss formula)
Δpmajor_loss = λ (L / dh ) (ρf v2 / 2)
The system will accelerate until accelerating forces = friction. If friction is larger (from cooling), system will slow down until forces again balanced.
v is the velocity in the pipe, and λ is also dependent on velocity. This makes life difficult mathematically, since we don’t know the speed without previously knowing the friction. The way I will approach it for this problem is to choose different likely speeds, and calculate the friction for them. We can compare that to the accelerating force. If the accelerating force is stronger, the system would be still accelerating to a slightly faster speed. If the accelerating force is lower, then the hypothetical friction at that speed, the system would be decelerating to a slower speed. Where they balance, that’s the expected speed.
λ = 64/Re where Re = v.ρtemp.dh / μtemp
Most of these greek letters are known. Water is well studied:
L = length of pipe. It’s normally lowercase l, but that gets confusing with this font.
dh = Hydraulic diameter = inside diameter of pipe = 32mm for a 32mm pipe
ρf =ρ temp= density of water at the temperature being modelled
v = velocity (unknown)
μtemp = dynamic viscosity of water at the temperature being modelled
Model – balanced forces, starting out.
The Accelerating force is a function of the difference in density. This means as the tank at the top of the system warms
At top of system = tank 20 °C Density of water @20
ρ20998.21 kg/m3 Bottom of system = stove 75 °C Density of water @75
ρ75974.84 kg/m3 Net pressure = g*(bot-top) 229.2597 kg/m2 /s2 Pressure head 0.0234 m Pressure head is another way of describing pressure that is quite common in plumbing. It literally means the height of the water in an open vertical pipe that would generate the same force.
I’m not going to show the full calculations here, wordpress is ill suited to it, but below is an image of an excel output, and I work through the calculation for the first row.
If you look at the two tables in the image, the yellow bars mark the approx speed of the system. Note that if the loop is full of water at 75 °C, the balance speed is higher. For the first few minutes, it’s maybe fair to take an average (assume the half the system leading to the tank is hot, and the second half returning to the stove is room temperature). As the tank heats up, the accelerating force (the temp difference) will shrink, but the return water will flow more easily)

The first seven columns are setting up the pipe pressure head loss calculation. It’s the main source of friction in the system, so worth modelling accurately.
The next three columns are the additional losses due to swirls created at tight bends. These are done using ‘rules of thumb’. A good guide and the coefficient (c) of 0.3 (for a 90 degree elbow bed) is from here . It plugs into this rule of thumb equation.
Δpelbow_loss = c. 1/2 ρf v2
Now, the v2 portion suggests it’s a rule of thumb for turbulent flow, not laminar, so it’s an overestimate, but it simply isn’t very important compared to the major pipe friction, so it’s good enough for this model. This small friction can be practically eliminated by using swept bends instead of elbows, and I’d recommend you use swept bends (or no bends) in any thermosiphon design


The next three columns are even less important. They capture the friction effect for the change in pipe diameter from 32mm to the 1″ on the back on the stove. The change is small, the coefficient is small and the effect is negligable.
Then, finally, I compare the accelerating pressure head to the friction loss for all the different modelled speeds, and find the balance point (~ 0.00025 m/s for the bottom table).
The pipe diameter is 32mm, so a 32mm cylinder moving at the averaged speed of 0.00005 m/s will move a total volume of 4.02E-08 m3 of water past a point in the system (say the start of the heat store tank).
At 75 °C, that volume is 3.9E-7kg, or 0.032g (almost nothing?).
The water is entering 55 °C hotter than the tank, and just like the first model, we can use the 4.179 Joules per gram per degree Centigrade, to calculate ~9 Joules delivered per second.
The answer
The tank needs 80,445 Joules to heat up fully, and that will take 8928 seconds to transfer at full speed, or 149 minutes. That is borderline acceptable. The real time is likely to be double that ~ 5 hours to reheat fully (although you could start drawing hot water down earlier). The reason it is slower is that the calculation is for the starting case, with the tank at 20 deg C and the maximum difference in density between the tank and the stove. As the tank heats up, that difference decreases. Also the return water heats heats up, and so less heat per unit volume is transferred (although the fluid viscosity changes and the system may speed up, delivering volume units faster).
This kind of multi-factor iterative solving is something that excel alone is not very good at. When I have time I could throw this calculation into python/anvil so people have a widget to use. Would that be useful to you?
Caveats:
I’ve neglected the friction/headloss due to kinematic losses due to swirl inside pipes and (much more significantly) inside the flowcube.
If you are adding glycol antifreeze to the system, that will significantly increase friction. I’ve not looked at structural forces for system expansion/contraction, risk of water hammer from valves closing, or bubble cavitation causes by water in the back boiler boiling.
Safety
If this system got stuck becuase of a closed valve or something, the water in the pipe at the stove will boil very quickly, and the steam pressure will cause something in the system to explode, pretty quickly.
Any thermosiphon system with (rule of thumb) more than 15L of water in NEEDS an expansion vessel in the system to absorb pressure changes. In this case, I’m pretty sure it’s handled by the Flowcube, but be careful if designing from scratch. Also, if designing from scratch, if you need cold water mixers, use them. My father-in-law had steam blowing out of his taps after an overzealous, too simple solar water ehater system was installed (in Vietnam). He had it disconnected again as the hot water was just too dangerous. Make friends with a plumber.
footnote 1: there’s probably a reasonable argument that a physically active farming household who are wearing thick wooly gilets and slippers are probably going to run the house a little cooler than average ‘room tempreture’, but 2-3 degrees difference won’t make or break this system.
footnote 2: Obviously for practical systems with pipe diameters, you need some visible height difference for the thermosiphon effect to kick in. And generally you need a long enough pipe that the heat doesn’t just straight up conduct along it.