forked from ereznicek/RODeO
-
Notifications
You must be signed in to change notification settings - Fork 0
/
RODeO_plots.py
144 lines (129 loc) · 7.53 KB
/
RODeO_plots.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
# -*- coding: utf-8 -*-
"""
Evan Reznicek
September 11, 2019
"""
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
inputs = pd.read_csv('Projects\SCS\Output\Storage_dispatch_inputs_SCS_gridimports_1hstor_test.csv', index_col = None,header = 3,nrows = 13,names = ['Parameter','Value'])
hourlyinput = pd.read_csv('Projects\SCS\Output\Storage_dispatch_inputs_SCS_gridimports_1hstor_test.csv', index_col = None, header = 29)
hourlyoutput = pd.read_csv('Projects\SCS\Output\Storage_dispatch_results_SCS_gridimports_1hstor_test.csv', index_col = None, header = 26)
hourlyoutput['Storage Level (%)'] = 100*hourlyoutput['Storage Level (MW-h)']/(float(inputs.loc[inputs['Parameter'] == 'storage capacity (hours)','Value'])*float(inputs.loc[inputs['Parameter'] == 'input capacity (MW)','Value']))
summary_results = pd.read_csv('Projects\SCS\Output\Storage_dispatch_summary_SCS_gridimports_1hstor_test.csv',skiprows = 2, header = None)
summary_results = summary_results.transpose()
plt.figure(0)
plt.plot(hourlyoutput['Interval'], hourlyoutput['Storage Level (MW-h)'])
plt.xlabel('Hours',fontsize = 16)
plt.ylabel('Storage Level (MWh)',fontname = 'Arial', fontsize = 16)
plt.xticks(fontname = 'Arial',fontsize = 16,rotation = 45)
plt.yticks(fontname = 'Arial',fontsize = 16)
plt.axis([0,8760,0,0.6])
plt.tick_params(direction = 'in',width = 1)
plt.tight_layout()
plt.savefig('Projects\SCS\Plots\\annual_storagelevel.png',pad_inches = 0.1,dpi = 150)
plt.figure(1)
plt.plot(hourlyoutput['Interval'],hourlyoutput['Load Profile (MW)'])
plt.plot(hourlyoutput['Interval'],hourlyoutput['Input Power (MW)'])
plt.plot(hourlyoutput['Interval'],hourlyoutput['Renewable Input (MW)'])
plt.plot(hourlyoutput['Interval'],hourlyoutput['Non-Ren Import (MW)'])
plt.xlabel('Hours',fontname = 'Arial', fontsize = 16)
plt.ylabel('Power (MW)',fontname = 'Arial', fontsize = 16)
plt.xticks(fontname = 'Arial',fontsize = 16,rotation = 45)
plt.yticks(fontname = 'Arial',fontsize = 16)
plt.legend(['Electrolyzer', 'VRE Input', 'Grid Input'], loc = 'lower left')
plt.axis([0,8760,0,1.2])
plt.tick_params(direction = 'in',width = 1)
plt.tight_layout()
plt.savefig('Projects\SCS\Plots\\annual_loads.png',pad_inches = 0.1,dpi = 150)
months = ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"]
offset_month_hour = [["January", 0], ["February", 744], ["March", 1416], ["April", 2160], ["May",2880], ["June",3624], ["July", 4344], ["August", 5088], ["September", 5832], ["October", 6552], ["November",7296], ["December", 8016]]
offset_month_hour = pd.DataFrame(offset_month_hour, columns = ['Month', 'Hour Offset'])
plotmonth = 'August'
plotday = 15
offset_hour = int(offset_month_hour.loc[offset_month_hour['Month'] == plotmonth,'Hour Offset'] + 24*(plotday-1))
dayoutput = hourlyoutput.iloc[offset_hour:offset_hour+24,:]
dayoutput['Time'] = dayoutput['Interval'] - offset_hour
plt.figure(2)
#plt.plot(dayoutput['Time'],dayoutput['Load Profile (MW)'])
plt.plot(dayoutput['Time'],dayoutput['Input Power (MW)'])
plt.plot(dayoutput['Time'],dayoutput['Renewable Input (MW)'])
plt.plot(dayoutput['Time'],dayoutput['Non-Ren Import (MW)'])
plt.xlabel('Time',fontname = 'Arial',fontsize = 16)
plt.ylabel('Power (MW)',fontname = 'Arial',fontsize = 16)
plt.xticks(fontname = 'Arial',fontsize = 16)
plt.yticks(fontname = 'Arial',fontsize = 16)
plt.tick_params(direction = 'in',width = 1)
plt.axis([0,24,0,1.2])
plt.tight_layout()
plt.legend(['Electrolyzer', 'VRE Input', 'Grid Input'], loc = 'lower left')
plt.xticks(np.arange(0,25, step = 4))
plt.savefig('Projects\SCS\Plots\\daily_loads.png',pad_inches = 0.1,dpi = 150)
plt.figure(3)
plt.plot(dayoutput['Time'],dayoutput['Storage Level (MW-h)'])
plt.xlabel('Time (hr)',fontname = 'Arial', fontsize = 16)
plt.ylabel('Storage Level (MW-h)',fontname = 'Arial', fontsize = 16)
plt.xticks(fontname = 'Arial',fontsize = 16,rotation = 45)
plt.yticks(fontname = 'Arial',fontsize = 16)
plt.xlim(1,24)
plt.xticks(np.arange(0,25, step = 4))
plt.tick_params(direction = 'in',width = 1)
plt.axis([0,24,0,1])
plt.tight_layout()
#plt.yticks(np.arange(0,101,step = 20))
plt.savefig('Projects\SCS\Plots\daily_storagelevel.png',pad_inches = 0.1,dpi = 150)
plt.figure(4)
plt.plot(hourlyinput['Int'],hourlyinput['Product ($/product unit)'])
plt.xlabel('Hours',fontname = 'Arial', fontsize = 16)
plt.ylabel('Hydrogen production cost ($/kg)',fontname = 'Arial', fontsize = 16)
#outputs = pd.read_csv('Projects\SCS\Output\Storage_dispatch_inputs_SCS_gridimports_4hstor_test.csv',index_col = None, header = 1, names = ['Parameter', 'Value'])
#
#NPV = pd.DataFrame(outputs.loc[outputs.Parameter == "arbitrage revenue ($)"])
#NPV = NPV.append(outputs.loc[outputs.Parameter == "NPV of Fixed demand charge ($)"])
#NPV = NPV.append(outputs.loc[outputs.Parameter == "NPV of Timed demand charge 1 ($)"])
#NPV = NPV.append(outputs.loc[outputs.Parameter == "NPV of Timed demand charge 2 ($)"])
#NPV = NPV.append(outputs.loc[outputs.Parameter == "NPV of Timed demand charge 3 ($)"])
#NPV = NPV.append(outputs.loc[outputs.Parameter == "NPV of Timed demand charge 4 ($)"])
#NPV = NPV.append(outputs.loc[outputs.Parameter == "NPV of Timed demand charge 5 ($)"])
#NPV = NPV.append(outputs.loc[outputs.Parameter == "NPV of Timed demand charge 6 ($)"])
#NPV = NPV.append(outputs.loc[outputs.Parameter == "NPV of Meter cost ($)"])
#NPV = NPV.append(outputs.loc[outputs.Parameter == "Input capital cost ($)"])
#NPV = NPV.append(outputs.loc[outputs.Parameter == "Output capital cost ($)"])
#NPV = NPV.append(outputs.loc[outputs.Parameter == "Hydrogen storage cost ($)"])
#NPV = NPV.append(outputs.loc[outputs.Parameter == "Hydrogen Compressor cost ($)"])
#NPV = NPV.append(outputs.loc[outputs.Parameter == "NPV of Input FOM cost ($)"])
#NPV = NPV.append(outputs.loc[outputs.Parameter == "NPV of Output FOM cost ($)"])
#NPV = NPV.append(outputs.loc[outputs.Parameter == "NPV of Input VOM cost ($)"])
#NPV = NPV.append(outputs.loc[outputs.Parameter == "NPV of Output VOM cost ($)"])
#NPV = NPV.append(outputs.loc[outputs.Parameter == "NPV of Debts ($)"])
#NPV = NPV.append(outputs.loc[outputs.Parameter == "NPV of Taxes ($)"])
#
#
#cost_types = ['Energy', 'Demand', 'Demand', 'Demand', 'Demand', 'Demand', 'Demand', 'Demand','Meter','Capital','Capital','Capital','Capital','O&M','O&M','O&M','O&M','Financial','Financial']
#NPV['Cost Type'] = cost_types
#hourly_outputpath = 'Projects\BTM_Storage\Output\Storage_dispatch_results_With_output_Scenario_Vaca_itc0.3_NEM0_EY1.2_cftr0.249.csv'
#hourlyoutput = np.genfromtxt(hourly_outputpath, dtype = 'float_', delimiter = ',', skip_header = 28, names = True,)
#
#plt.figure(0)
#plt.plot(hourlyoutput['Interval'],hourlyoutput['Input_Power_MW'])
#plt.plot(hourlyoutput['Interval'],hourlyoutput['Renewable_Input_MW'])
#plt.plot(hourlyoutput['Interval'],hourlyoutput['Renewables_Sold_MW'])
#plt.plot(hourlyoutput['Interval'],hourlyoutput['NonRen_Import_MW'])
#plt.xlabel('Hours')
#plt.ylabel('Power (MW)')
#plt.legend(['Input', 'Renewable Input', 'Renewables Sold', 'Non-Ren Input'], loc = 'upper right')
#
#plt.figure(1)
#plt.plot(hourlyoutput['Interval'],hourlyoutput['Storage_Level_MWh'])
#plt.plot()
#
#hourlyinputpath = 'Projects\BTM_Storage\Output\Storage_dispatch_inputs_With_output_Scenario_Vaca_itc0.3_NEM0_EY1.2_cftr0.249.csv'
#hourlyinput = np.genfromtxt(hourlyinputpath, dtype = 'float_', delimiter = ',', skip_header = 35, names = True)
#
#
#plt.figure(2)
#plt.plot(hourlyinput['Int'],hourlyinput['Elec_Purchase_MWh'])
#plt.plot(hourlyinput['Int'],hourlyinput['Elec_Sale_MWh'])
#plt.xlabel('Hours')
#plt.ylabel('Rate ($/MWh)')
#plt.legend(['Purchase Rate', 'Sale Rate'], loc = 'upper right')