Wind power

I wrote an honest question to find out how much energy need to go via hydrogen storage if we want to make ideally a source of power that is as stable as nuclear and how much extra wind power do we need to compensate for losses? Out of all current answers one was okay and on point but there was no references just back on the napkin type of answer taking values out of experience and belief. That answer said something around 150% extra cost and 0.4kr/kWh of wind power would mean around 1kr/kWh which basically mean in parity with nuclear power. Lot's of people with strong opinions of wind power, answering other questions and some trolls. I have searched extensively on the internet for an answer and although there is a lot of information, this particular question seam to have not been addressed in media. And yes we would be wise to control using hydro power but the electricity demand is expected to increase quite a lot in the future and there is not much more hydro power remaining to be built. Sweden has a lot of wind however but has a bad reputation due to the fact that the wind does not blow all the time. Without more serius analysis of actual data it is assumed that hydrogene storage is expensive but is it. I was really curious to see what hard data gives although I'm not an expert. So I set out to see if I could do better.

I got a file with statistics for hourly electricity consumption and production figures for wind power on an hourly basis. And I investigated a few very simple strategies. let \(s\) be the mean hourly energy consumption and construct a target of the form \(y_i = f s p_i\) where \(p_i\) is a proportion that is associated to the last month energy consumption and \(f\) is a scaling factor, meaning it is higher at higher demand and lower at lower demand. The idea here is to take advantage, at least a little, of the fact that wind power production in Sweden correlate with the seasonal demand e.g. higher consumption during the cold period.

The strategy is then for each hourly wind production \(x_i\) if \(x_i > y_i\) then we will store \(x_i-y_i\) amount in a hydrogen layer and if vice versa \(x_i < y_i\) then we will need to produce energy from the storage of \(y_i-x_i\) amount. Note that this is better than a stable production and the system has some controllable features as with hydro power.

Hydrogen storage is expensive. Electricity to electricity conversion via storage has losses of the order of 0.25 left after a cycle. But by taking advantage of heat released in the process a more realistic figure is maybe 0.33. This is still considered expensive. Here I study the statistics for (almost) one year (this year). By scaling the limit by changing \(f\) we can find a approximate balance where the amount of stored energy is 3X the amount of used energy from the storage. The conclusion from the data is than essentially you need to use 10%-20% more wind power in order to stabilize the production. Now the strategy is static and in reality one can put much more intelligence in how to store and retrieve energy from the system. So my expectation is that the reality needs a level closer to 10% than 20% extra in order to stabilize the wind power in Sweden if we take advantage of our fine tradition of control theory field. Now one more thing the storage needed when studying the statistics in a simplistic way indicate that there most be a store of about 10%-20% of the total amount of energy and some suggests that this is small compared to the cost of the extra wind capacity needed. So my conclusion is that the cost more go up like 10% than 150% as suggested by the best answer to my question.

Here is the code I used from the statistics found at the site elstatestik

import csv

v = []
f = []
s = 0;
t = 0;
n = 0;
i = 25
j = 1
def g(x):
    x = "".join(x.split(","))
x = "".join(x.split('"'))
    return int(x)

with open('timvarden-2022-01-09.csv') as csv_file:
    csv_reader = csv.reader(csv_file, delimiter=',')
    line_count = 0
    for row in csv_reader:
        if line_count <= 4:
            line_count += 1
        else:
    n += 1
            x = sum(map(g,row[i:i+4]))
            y = -sum(map(g,row[j:j+4]))
            v.append(x)
            f.append(y)
            s += x
            t += y
            line_count += 1

    s = s / n
t = t / n
    print(f'Processed {n} lines with hour average of {s}.')

ff = []
fv = [] 
nf = 0
fx = 0
fy = 0
for i in range(30*24,n):
    x = sum(f[i-24*30:i])/24.0/30.0
    y = sum(v[i-24*7:i])/24.0/7.0
    nf += 1
    fv.append(y)
    ff.append(x)

def fg(p):
    s75_1 = 0
    s75_2 = 0
    S     = 0;
    m     = 0;
    M     = 0;

    for x,y in zip(fv,ff):
        y = p*s*y/t
        xx     = max(0,y-x)
        yy     = max(0,x-y)
        s75_1 += xx
        s75_2 += yy
        S  = S - 3*xx + yy
        if S < m:
            m = S
        if S > M:
            M = S

        print(f'treshold of mean: {p*100}% needed {(s75_1/n)/s} stored {(s75_2/n)/s} Storage need: {(M-m)/s/len(v)}')

fg(0.75)
fg(0.80)
fg(0.85)
fg(0.90)
fg(0.95)
print('--------------------------------------------------------------')


def f(p):
    s75_1 = 0
    s75_2 = 0
    S     = 0;
    m     = 0;
    M     = 0;
    for x in v:
        xx = max(0,s*p-x)
        yy = max(0,x-s*p)
        S  = S - 3*xx + yy
        if S < m:
           m = S
        if S > M:
           M = S
        s75_1 += xx
        s75_2 += yy

    print(f'treshold of mean: {p*100}% needed {(s75_1/n)/s} stored {(s75_2/n)/s} Storage need: {(M-m)/s/len(v)}')

f(0.75)
f(0.80)
f(0.85)
f(0.90)
f(0.95)

vv = []
nn = 0;
for i in range(24*7,n):
    x = sum(v[i-24*7:i])/24.0/7.0
    nn += 1    
    vv.append(x)

n = nn;
v = vv;

print('--------------------------------------------------------------')
f(0.75)
f(0.80)
f(0.85)
f(0.90)
f(0.95)

links

social