Skip to content

Instantly share code, notes, and snippets.

@anovikov1984
Created October 16, 2017 11:08
Show Gist options
  • Save anovikov1984/88b1a66091c747681334e74fe24716fe to your computer and use it in GitHub Desktop.
Save anovikov1984/88b1a66091c747681334e74fe24716fe to your computer and use it in GitHub Desktop.
#!/usr/bin/python
import csv
data = []
with open('./SolarWindTotal.csv', 'rb') as inp:
rdr = csv.reader(inp, delimiter=';')
for row in rdr:
data.append(row);
ldata=len(data);
# MW
windBeg = 44541.0
windEnd = 49534.0
solarBeg = 38343.0
solarEnd = 39787.0
# MWH
accCapacity = 40000.0
# MW
accPower = 11300.0
# Inputs are solar installed and wind installed, in MW
def point(s, w):
acc = 0.0
totalUsed = 0.0
sumDemand = 0.0
for i in range(0,ldata):
curSolar=solarBeg+(solarEnd-solarBeg)/ldata*i
curWind=windBeg+(windEnd-windBeg)/ldata*i
curPower=float(data[i][0])*1000.0/curSolar*s+float(data[i][1])*1000.0/curWind*w
curPowerUsable=curPower
curDemand=float(data[i][2])*1000.0
sumDemand+=curDemand
if curPower>curDemand:
curPowerUsable=curDemand
savedAcc=curPower-curDemand
if (savedAcc>accPower):
savedAcc=accPower
if (acc+savedAcc) > accCapacity:
savedAcc=accCapacity-acc;
acc+=savedAcc*0.9
else:
takeFromAcc=acc*0.9;
if (takeFromAcc>accPower):
takeFroMAcc=accPower
if (takeFromAcc+curPower)>curDemand:
takeFromAcc=curDemand-curPower
curPowerUsable+=takeFromAcc
acc-=takeFromAcc/0.9
totalUsed+=curPowerUsable
return totalUsed+acc
s = 160000
w = 160000
# minimal values which mean 0% is wasted
r0 = point(10000, 10000)/1000.0
# given values
r1 = point(s, w)/1000.0
# to calculate marginal waste ratio
r2 = point(s*1.001, w*1.001)/1000.0
diff = r2/r1
lratio = (r2-r1)*1000/(s+w)
iratio = r0/20000
print(r0,r1,r2,diff,lratio/iratio)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment