In [298]:
import json
import matplotlib.pyplot as plt; plt.rcdefaults()
import numpy as np

In [287]:
with open('rickshaw.json') as inp:
    dict = json.load(inp)
inst = dict['simulation']['region']['institution']['config']['DeployInst']
sim_length = dict['simulation']['control']['duration']
rpx, r1px = 0, 0
for obj in dict['simulation']['facility']:
    if obj['name'] == 'Reactor':
        rpx = obj['config']['Reactor']['power_cap']
    if obj['name'] == 'Reactor1':
        r1px = obj['config']['Reactor']['power_cap']

In [288]:
builds = inst['n_build']['val']
protos = inst['prototypes']['val']
times = inst['build_times']['val']
lifes = inst['lifetimes']['val']
prototypes = {}

In [289]:
for proto in protos:
    prototypes[proto] = {}
    prototypes[proto]['times'] = []
    prototypes[proto]['builds'] = []
    prototypes[proto]['fulltime'] = {}
    prototypes[proto]['fullpower'] = {}
    prototypes[proto]['sumtime'] =[]
    prototypes[proto]['deploy'] = []
    prototypes[proto]['power'] = []
    if proto == 'Reactor': prototypes[proto]['px'] = rpx
    elif proto == 'Reactor1': prototypes[proto]['px'] = r1px
    else: prototypes[proto]['px'] = 0
for i in range(len(protos)):
    prototypes[protos[i]]['times'].append(times[i])
    prototypes[protos[i]]['builds'].append(builds[i])
    if times[i] in prototypes[protos[i]]['fulltime']:
        prototypes[protos[i]]['fulltime'][times[i]] += builds[i]
        prototypes[protos[i]]['fullpower'][times[i]] += builds[i] * prototypes[protos[i]]['px']      
    else:
        prototypes[protos[i]]['fulltime'][times[i]] = builds[i]
        prototypes[protos[i]]['fullpower'][times[i]] = builds[i] * prototypes[protos[i]]['px']     
    prototypes[protos[i]]['fulltime'][times[i]+(lifes[i]*12)] = builds[i]*-1
    prototypes[protos[i]]['fullpower'][times[i]+(lifes[i]*12)] = builds[i]*-1*prototypes[protos[i]]['px'] 
for proto in prototypes.keys():
    p = prototypes[proto]
    for date in p['fulltime'].keys():
        p['sumtime'].append(date)
    p['sumtime'].sort()
    i = 1
    p['deploy'].append(p['fulltime'][p['sumtime'][0]])
    while i < len(p['sumtime']):
        p['deploy'].append(p['fulltime'][p['sumtime'][i]] + p['deploy'][i-1])
        i+=1
    if proto == 'Reactor':
        for n in p['deploy']:
            p['power'].append(n*rpx)
    if proto == 'Reactor1':
        for n in p['deploy']:
            p['power'].append(n*r1px)

In [290]:
for proto in protos:
    prototypes[proto]['deploy'] = np.asarray(prototypes[proto]['deploy'])
    prototypes[proto]['power'] = np.asarray(prototypes[proto]['power'])

In [291]:
plt.plot(prototypes['Reactor']['sumtime'], prototypes['Reactor']['deploy'], 'r', label="LWR")
plt.plot(prototypes['Reactor1']['sumtime'], prototypes['Reactor1']['deploy'], 'g', label="FR")
plt.xlabel("Months")
plt.ylabel("Number of facilities")
plt.legend()
plt.show()



In [292]:
plt.plot(prototypes['Reactor']['sumtime'], prototypes['Reactor']['power'], 'r', label="LWR")
plt.plot(prototypes['Reactor1']['sumtime'], prototypes['Reactor1']['power'], 'g', label="FR")
plt.legend()
plt.xlabel("Months")
plt.ylabel("Power (MWe)")
plt.show()



In [293]:
totalp = []
power = prototypes['Reactor']['fullpower']
for k,v in prototypes['Reactor1']['fullpower'].items():
    if k < sim_length:
        if k in power:
            power[k] += v
        else:
            power[k] = v
sumt = list(power.keys())
sumt.sort()
for date in sumt:
    totalp.append(power[date])
totalp = np.asarray(totalp)
totalp = np.cumsum(totalp)
plt.plot(sumt, totalp, 'r', label="Total Power")
plt.legend()
plt.xlabel("Months")
plt.ylabel("Power (MWe)")
plt.show()



In [296]:
pstart = 10000
pgrow = []
for date in sumt:
    pgrow.append(pstart*(1+.01)**(date/12))
pgrow = np.asarray(pgrow)

In [297]:
plt.plot(sumt, totalp, 'r', label="Total Power")
plt.plot(sumt, pgrow, 'r', label="Expected")
plt.legend()
plt.xlabel("Months")
plt.ylabel("Power (MWe)")
plt.show()
diff = np.sum(abs(pgrow-totalp)/pgrow)/len(pgrow)



In [ ]: