%% FLEXIES - MATLAB file that reads input data from Excel into MATLAB

% Power system optimization model with low-carbon energy generation
% and flexibility technologies.

% Authors: Mattia Maeder & Olga Weiss (June 2020)

% Developed in the Master Thesis "The role of energy flexibility measures 
% in the energy transition" by Mattia Maeder and supervised by Olga Weiss,
% ETH Zurich (April 2020)

% Introduced and used in the manuscript "Assessing the need for 
% flexibility technologies in decarbonized power systems: A new model
% applied to Central Europe" by Mattia Maeder, Olga Weiss, and 
% Konstantinos Boulouchos (June 2020), currently under review for a 
% publication in a peer-reviewed journal.

% Here we read the energy storage data found in the literature,
% collected in the input dataset in the Excel sheet "Data_Storage.xlsx".
% We used the data to project CAPEX [EUR/MWh or EUR/MW], efficiency [%],
% and lifetime [years and hours] with linear regression where applicable.

clear

dataStorage = readtable("Data_Storage.xlsx");

yrs = 2015:5:2050; % number of year instances

%% Electrolyser
% we select PEM electrolyser because of rampability and possibility of use
% at high pressures

% Efficiency [-] PEM & Alkaline
xPEM = dataStorage{(strcmp(dataStorage.Parameter,'Efficiency'))...
    & (strcmp(dataStorage.Process,'Electrolysis'))...
    & (strcmp(dataStorage.Technology,'PEM')),...
    {'Year'}};
yPEM = dataStorage{(strcmp(dataStorage.Parameter,'Efficiency'))...
    & (strcmp(dataStorage.Process,'Electrolysis'))...
    & (strcmp(dataStorage.Technology,'PEM')),...
    {'Value'}};
XPEM = [ones(length(xPEM),1) xPEM];
bPEM = XPEM\yPEM;
effElyPEM = (bPEM(1)+bPEM(2)*yrs)';
xAlk = dataStorage{(strcmp(dataStorage.Parameter,'Efficiency'))...
    & (strcmp(dataStorage.Process,'Electrolysis'))...
    & (strcmp(dataStorage.Technology,'Alkaline')),...
    {'Year'}};
yAlk = dataStorage{(strcmp(dataStorage.Parameter,'Efficiency'))...
    & (strcmp(dataStorage.Process,'Electrolysis'))...
    & (strcmp(dataStorage.Technology,'Alkaline')),...
    {'Value'}};
XAlk = [ones(length(xAlk),1) xAlk];
bAlk = XAlk\yAlk;
effElyAlk = (bAlk(1)+bAlk(2)*yrs)';
figure('Name','Electrolyzer Efficiency')
scatter(xPEM,yPEM,'b')
title('Electrolyzer Efficiency')
hold on
plot(yrs,effElyPEM,'b-*')
hold on
scatter(xAlk,yAlk,'r')
hold on
plot(yrs,effElyAlk,'r-*')
legend('PEM data points','PEM regression',...
    'Alkaline data points','Alkaline regression',...
    'location','Southeast')
xlabel('Year')
ylabel('-')
axis([yrs(1) yrs(end) 0 1])

% CAPEX [EUR/MWel] PEM & Alkaline
xPEM = dataStorage{(strcmp(dataStorage.Parameter,'CAPEX'))...
    & (strcmp(dataStorage.Process,'Electrolysis'))...
    & (strcmp(dataStorage.Technology,'PEM')),...
    {'Year'}};
yPEM = dataStorage{(strcmp(dataStorage.Parameter,'CAPEX'))...
    & (strcmp(dataStorage.Process,'Electrolysis'))...
    & (strcmp(dataStorage.Technology,'PEM')),...
    {'Value'}}*1000;
XPEM = [ones(length(xPEM),1) xPEM];
bPEM = XPEM\yPEM;
capexElyPEM = (bPEM(1)+bPEM(2)*yrs)';
xAlk = dataStorage{(strcmp(dataStorage.Parameter,'CAPEX'))...
    & (strcmp(dataStorage.Process,'Electrolysis'))...
    & (strcmp(dataStorage.Technology,'Alkaline')),...
    {'Year'}};
yAlk = dataStorage{(strcmp(dataStorage.Parameter,'CAPEX'))...
    & (strcmp(dataStorage.Process,'Electrolysis'))...
    & (strcmp(dataStorage.Technology,'Alkaline')),...
    {'Value'}}*1000;
XAlk = [ones(length(xAlk),1) xAlk];
bAlk = XAlk\yAlk;
capexElyAlk = (bAlk(1)+bAlk(2)*yrs)';
figure('Name','Electrolyzer CAPEX')
scatter(xPEM,yPEM,'b')
title('Electrolyzer CAPEX')
hold on
plot(yrs,capexElyPEM,'b-*')
hold on
scatter(xAlk,yAlk,'r')
hold on
plot(yrs,capexElyAlk,'r-*')
legend('PEM data points','PEM regression',...
    'Alkaline data points','Alkaline regression',...
    'location','Northeast')
xlabel('Year')
ylabel('€/MWel')
axis([yrs(1) yrs(end) 0 Inf])

% Lifetime Hours [hours]
xPEM = dataStorage{(strcmp(dataStorage.Parameter,'Lifetime'))...
    & (strcmp(dataStorage.Process,'Electrolysis'))...
    & (strcmp(dataStorage.Technology,'PEM'))...
    & (strcmp(dataStorage.Unit,'hours')),...
    {'Year'}};
yPEM = dataStorage{(strcmp(dataStorage.Parameter,'Lifetime'))...
    & (strcmp(dataStorage.Process,'Electrolysis'))...
    & (strcmp(dataStorage.Technology,'PEM'))...
    & (strcmp(dataStorage.Unit,'hours')),...
    {'Value'}};
XPEM = [ones(length(xPEM),1) xPEM];
bPEM = XPEM\yPEM;
ltHrsElyPEM = (bPEM(1)+bPEM(2)*yrs)';
xAlk = dataStorage{(strcmp(dataStorage.Parameter,'Lifetime'))...
    & (strcmp(dataStorage.Process,'Electrolysis'))...
    & (strcmp(dataStorage.Technology,'Alkaline'))...
    & (strcmp(dataStorage.Unit,'hours')),...
    {'Year'}};
yAlk = dataStorage{(strcmp(dataStorage.Parameter,'Lifetime'))...
    & (strcmp(dataStorage.Process,'Electrolysis'))...
    & (strcmp(dataStorage.Technology,'Alkaline'))...
    & (strcmp(dataStorage.Unit,'hours')),...
    {'Value'}};
XAlk = [ones(length(xAlk),1) xAlk];
bAlk = XAlk\yAlk;
ltHrsElyAlk = (bAlk(1)+bAlk(2)*yrs)';
figure('Name','Electrolyzer Lifetime in hours')
scatter(xPEM,yPEM,'b')
title('Electrolyzer Lifetime in hours')
hold on
plot(yrs,ltHrsElyPEM,'b-*')
hold on
scatter(xAlk,yAlk,'r')
hold on
plot(yrs,ltHrsElyAlk,'r-*')
legend('PEM data points','PEM regression',...
    'Alkaline data points','Alkaline regression',...
    'location','Southeast')
xlabel('Year')
ylabel('hours')
axis([yrs(1) yrs(end) 0 Inf])

% Lifetime Years [years]
ltYrsEly = 20*ones(length(yrs),1); % 20 years lifetime

%% Storage Hydrogen
% for underground, we need a compressor. For tank, we don't.

% CAPEX compressor [€/MWout]
x = dataStorage{(strcmp(dataStorage.Process,'Storage Hydrogen'))...
    & (strcmp(dataStorage.Parameter,'CAPEX'))...
    & (strcmp(dataStorage.Technology,'Compressor')),...
    {'Year'}};
y = dataStorage{(strcmp(dataStorage.Process,'Storage Hydrogen'))...
    & (strcmp(dataStorage.Parameter,'CAPEX'))...
    & (strcmp(dataStorage.Technology,'Compressor')),...
    {'Value'}}*1000;
X = [ones(length(x),1) x];
b = X\y;
capexCsH = (b(1)+b(2)*yrs)';

% Efficiency Compressor [-]
effCsH = 0.95*ones(length(yrs),1);

% Lifetime Compressor
ltYrsCsH = 20*ones(length(yrs),1);

% CAPEX Storage Hydrogen underground [EUR/MWh]
xUnd = dataStorage{(strcmp(dataStorage.Process,'Storage Hydrogen'))...
    & (strcmp(dataStorage.Parameter,'CAPEX'))...
    & (strcmp(dataStorage.Technology,'Underground')),...
    {'Year'}};
yUnd = dataStorage{(strcmp(dataStorage.Process,'Storage Hydrogen'))...
    & (strcmp(dataStorage.Parameter,'CAPEX'))...
    & (strcmp(dataStorage.Technology,'Underground')),...
    {'Value'}}*1000;
XUnd = [ones(length(xUnd),1) xUnd];
bUnd = XUnd\yUnd;
capexHsUnd = (bUnd(1)+bUnd(2)*yrs)';
figure('Name','Hydrogen Underground Storage CAPEX')
scatter(xUnd,yUnd,'b')
hold on
title('Hydrogen Underground Storage CAPEX')
plot(yrs,capexHsUnd,'b-*')
xlabel('Year')
ylabel('€/MWh')
axis([yrs(1) yrs(end) 0 Inf])
legend('Underground data points','Underground regression',...
    'location','Northeast')

% CAPEX Storage Hydrogen tank [EUR/MWh]
xTank = dataStorage{(strcmp(dataStorage.Process,'Storage Hydrogen'))...
    & (strcmp(dataStorage.Parameter,'CAPEX'))...
    & (strcmp(dataStorage.Technology,'Tank')),...
    {'Year'}};
yTank = dataStorage{(strcmp(dataStorage.Process,'Storage Hydrogen'))...
    & (strcmp(dataStorage.Parameter,'CAPEX'))...
    & (strcmp(dataStorage.Technology,'Tank')),...
    {'Value'}}*1000;
XTank = [ones(length(xTank),1) xTank];
bTank = XTank\yTank;
capexHsTank = (bTank(1)+bTank(2)*yrs)';
figure('Name','Hydrogen Storage Tanks CAPEX')
scatter(xTank,yTank,'b')
title('Hydrogen Storage Tanks CAPEX')
hold on
plot(yrs,capexHsTank,'b-*')
xlabel('Year')
ylabel('€/MWh')
axis([yrs(1) yrs(end) 0 Inf])
legend('Tank data points','Tank regression',...
    'location','Northeast')

% Lifetime Years [years]
ltYrsHsTank = 20*ones(length(yrs),1); % 20 years for tanks,
ltYrsHsUnd = 30*ones(length(yrs),1); % 30 for underground, 50 for pipes

%% Fuel Cell PEM
% we select PEM fuel cell because of its rampability and longer lifetime
% in terms of hours

% Efficiency [-] PEM & Alkaline
xPEM = dataStorage{(strcmp(dataStorage.Parameter,'Efficiency'))...
    & (strcmp(dataStorage.Process,'Fuel Cell'))...
    & (strcmp(dataStorage.Technology,'PEM')),...
    {'Year'}};
yPEM = dataStorage{(strcmp(dataStorage.Parameter,'Efficiency'))...
    & (strcmp(dataStorage.Process,'Fuel Cell'))...
    & (strcmp(dataStorage.Technology,'PEM')),...
    {'Value'}};
XPEM = [ones(length(xPEM),1) xPEM];
bPEM = XPEM\yPEM;
effFcPEM = (bPEM(1)+bPEM(2)*yrs)';
xAlk = dataStorage{(strcmp(dataStorage.Parameter,'Efficiency'))...
    & (strcmp(dataStorage.Process,'Fuel Cell'))...
    & (strcmp(dataStorage.Technology,'Alkaline')),...
    {'Year'}};
yAlk = dataStorage{(strcmp(dataStorage.Parameter,'Efficiency'))...
    & (strcmp(dataStorage.Process,'Fuel Cell'))...
    & (strcmp(dataStorage.Technology,'Alkaline')),...
    {'Value'}};
XAlk = [ones(length(xAlk),1) xAlk];
bAlk = XAlk\yAlk;
effFcAlk = (bAlk(1)+bAlk(2)*yrs)';
figure('Name','Fuel Cell Efficiency')
scatter(xPEM,yPEM,'b')
title('Fuel Cell Efficiency')
hold on
plot(yrs,effFcPEM,'b')
hold on
scatter(xAlk,yAlk,'r')
hold on
plot(yrs,effFcAlk,'r')
legend('PEM data points','PEM regression',...
    'Alkaline data points','Alkaline regression',...
    'location','Southeast')
xlabel('Year')
ylabel('-')
axis([yrs(1) yrs(end) 0 1])

% CAPEX [EUR/MWel] PEM & Alkaline
xPEM = dataStorage{(strcmp(dataStorage.Parameter,'CAPEX'))...
    & (strcmp(dataStorage.Process,'Fuel Cell'))...
    & (strcmp(dataStorage.Technology,'PEM')),...
    {'Year'}};
yPEM = dataStorage{(strcmp(dataStorage.Parameter,'CAPEX'))...
    & (strcmp(dataStorage.Process,'Fuel Cell'))...
    & (strcmp(dataStorage.Technology,'PEM')),...
    {'Value'}}*1000;
XPEM = [ones(length(xPEM),1) xPEM];
bPEM = XPEM\yPEM;
capexFcPEM = (bPEM(1)+bPEM(2)*yrs)';
xAlk = dataStorage{(strcmp(dataStorage.Parameter,'CAPEX'))...
    & (strcmp(dataStorage.Process,'Fuel Cell'))...
    & (strcmp(dataStorage.Technology,'Alkaline')),...
    {'Year'}};
yAlk = dataStorage{(strcmp(dataStorage.Parameter,'CAPEX'))...
    & (strcmp(dataStorage.Process,'Fuel Cell'))...
    & (strcmp(dataStorage.Technology,'Alkaline')),...
    {'Value'}}*1000;
XAlk = [ones(length(xAlk),1) xAlk];
bAlk = XAlk\yAlk;
capexFcAlk = (bAlk(1)+bAlk(2)*yrs)';
figure('Name','Fuel Cell CAPEX')
scatter(xPEM,yPEM,'b')
title('Fuel Cell CAPEX')
hold on
plot(yrs,capexFcPEM,'b')
hold on
scatter(xAlk,yAlk,'r')
hold on
plot(yrs,capexFcAlk,'r')
legend('PEM data points','PEM regression',...
    'Alkaline data points','Alkaline regression',...
    'location','Northeast')
xlabel('Year')
ylabel('EUR/MWel')
axis([yrs(1) yrs(end) 0 3500000])

% Lifetime [hours]
xPEM = dataStorage{(strcmp(dataStorage.Parameter,'Lifetime'))...
    & (strcmp(dataStorage.Process,'Fuel Cell'))...
    & (strcmp(dataStorage.Technology,'PEM'))...
    & (strcmp(dataStorage.Unit,'hours')),...
    {'Year'}};
yPEM = dataStorage{(strcmp(dataStorage.Parameter,'Lifetime'))...
    & (strcmp(dataStorage.Process,'Fuel Cell'))...
    & (strcmp(dataStorage.Technology,'PEM'))...
    & (strcmp(dataStorage.Unit,'hours')),...    
    {'Value'}};
XPEM = [ones(length(xPEM),1) xPEM];
bPEM = XPEM\yPEM;
ltHrsFcPEM = (bPEM(1)+bPEM(2)*yrs)';
xAlk = dataStorage{(strcmp(dataStorage.Parameter,'Lifetime'))...
    & (strcmp(dataStorage.Process,'Fuel Cell'))...
    & (strcmp(dataStorage.Technology,'Alkaline'))...
    & (strcmp(dataStorage.Unit,'hours')),...
    {'Year'}};
yAlk = dataStorage{(strcmp(dataStorage.Parameter,'Lifetime'))...
    & (strcmp(dataStorage.Process,'Fuel Cell'))...
    & (strcmp(dataStorage.Technology,'Alkaline'))...
    & (strcmp(dataStorage.Unit,'hours')),...
    {'Value'}};
XAlk = [ones(length(xAlk),1) xAlk];
bAlk = XAlk\yAlk;
ltHrsFcAlk = (bAlk(1)+bAlk(2)*yrs)';
figure('Name','Fuel Cell Lifetime Hours')
scatter(xPEM,yPEM,'b')
title('Fuel Cell Lifetime Hours')
hold on
plot(yrs,ltHrsFcPEM,'b')
hold on
scatter(xAlk,yAlk,'r')
hold on
plot(yrs,ltHrsFcAlk,'r')
legend('PEM data points','PEM regression',...
    'Alkaline data points','Alkaline regression',...
    'location','Southeast')
xlabel('Year')
ylabel('hours')
axis([yrs(1) yrs(end) 0 120000])

% Lifetime Years [years]
ltYrsFc = 20*ones(length(yrs),1); % 20 years lifetime

%% Methanation
% we do not differentiate between chemical and biological methanation,
% since performance is very similar

% Efficiency [-]
effMeth = 0.78*ones(length(yrs),1); % theoretical limit of H2 to CH4 conversion

% CAPEX [EUR/MWel] 
xBio = dataStorage{(strcmp(dataStorage.Parameter,'CAPEX'))...
    & (strcmp(dataStorage.Process,'Methanation'))...
    & (strcmp(dataStorage.Technology,'Biological')),...
    {'Year'}};
yBio = dataStorage{(strcmp(dataStorage.Parameter,'CAPEX'))...
    & (strcmp(dataStorage.Process,'Methanation'))...
    & (strcmp(dataStorage.Technology,'Biological')),...
    {'Value'}}*1000;
XBio = [ones(length(xBio),1) xBio];
bBio = XBio\yBio;
capexMethBio = (bBio(1)+bBio(2)*yrs)';
xChem = dataStorage{(strcmp(dataStorage.Parameter,'CAPEX'))...
    & (strcmp(dataStorage.Process,'Methanation'))...
    & (strcmp(dataStorage.Technology,'Chemical')),...
    {'Year'}};
yChem = dataStorage{(strcmp(dataStorage.Parameter,'CAPEX'))...
    & (strcmp(dataStorage.Process,'Methanation'))...
    & (strcmp(dataStorage.Technology,'Chemical')),...
    {'Value'}}*1000;
XChem = [ones(length(xChem),1) xChem];
bChem = XChem\yChem;
capexMethChem = (bChem(1)+bChem(2)*yrs)';
x = dataStorage{(strcmp(dataStorage.Parameter,'CAPEX'))...
    & (strcmp(dataStorage.Process,'Methanation')),...
    {'Year'}};
y = dataStorage{(strcmp(dataStorage.Parameter,'CAPEX'))...
    & (strcmp(dataStorage.Process,'Methanation')),...
    {'Value'}}*1000;
X = [ones(length(x),1) x];
b = X\y;
capexMeth = (b(1)+b(2)*yrs)';
figure('Name','Methanation CAPEX')
scatter(xBio,yBio,'g')
title('Methanation CAPEX')
hold on
plot(yrs,capexMethBio,'g-*')
hold on
scatter(xChem,yChem,'r')
hold on
plot(yrs,capexMethChem,'r-*')
hold on
plot(yrs,capexMeth,'k-*')
xlabel('Year')
ylabel('€/MWsng')
axis([yrs(1) yrs(end) 0 Inf])
legend('Biological data points','Biological regression',...
    'Chemical data points','Chemical regression',...
    'Aggregate regression',...
    'location','Northeast')

% Lifetime [hours]
ltHrsMeth = 120000*ones(length(yrs),1); % not a limiting factor

% Lifetime Years [years]
ltYrsMeth = 20*ones(length(yrs),1); % 20 years lifetime

%% Storage Methane

% CAPEX [EUR/MWh]
capexMs = zeros(length(yrs),1); % assumed to be zero

% Lifetime years [years]
ltYrsMs = 50*ones(length(yrs),1); % assumed to be 50 years

%% Injection

% Injection Limit [-]
injLim = linspace(0.02,0.2,length(yrs)); % assumed to increase linearly 
% from 2% in 2015 to 20% in 2050.

%% Batteries

% Efficiency [-]
x = dataStorage{(strcmp(dataStorage.Parameter,'Efficiency'))...
    & (strcmp(dataStorage.Process,'Battery')),...
    {'Year'}};
y = dataStorage{(strcmp(dataStorage.Parameter,'Efficiency'))...
    & (strcmp(dataStorage.Process,'Battery')),...
    {'Value'}};
X = [ones(length(x),1) x];
b = X\y;
effBat = (b(1)+b(2)*yrs)';
figure('Name','Battery Efficiency')
scatter(x,y,'r')
title('Battery Efficiency')
xlabel('Year')
ylabel('-')
axis([yrs(1) yrs(end) 0 1])
hold on
plot(yrs,effBat,'r')

% CAPEX [EUR/MWh]
x = dataStorage{(strcmp(dataStorage.Parameter,'CAPEX'))...
    & (strcmp(dataStorage.Process,'Battery')),...
    {'Year'}};
y = dataStorage{(strcmp(dataStorage.Parameter,'CAPEX'))...
    & (strcmp(dataStorage.Process,'Battery')),...
    {'Value'}}*1000;
X = [ones(length(x),1) x];
b = X\y;
capexBat = (b(1)+b(2)*yrs)';
figure('Name','Battery CAPEX')
scatter(x,y,'r')
title('Battery CAPEX')
xlabel('Year')
ylabel('€/MWh')
axis([yrs(1) yrs(end) 0 350000])
hold on
plot(yrs,capexBat,'r')

% Lifetime Cycles [cycles]
x = dataStorage{(strcmp(dataStorage.Parameter,'Lifetime'))...
    & (strcmp(dataStorage.Process,'Battery'))...
    & (strcmp(dataStorage.Unit,'cycles')),...
    {'Year'}};
y = dataStorage{(strcmp(dataStorage.Parameter,'Lifetime'))...
    & (strcmp(dataStorage.Process,'Battery'))...
    & (strcmp(dataStorage.Unit,'cycles')),...
    {'Value'}};
X = [ones(length(x),1) x];
b = X\y;
cyclesBat = (b(1)+b(2)*yrs)';
figure('Name','Battery Lifetime Cycles')
scatter(x,y,'r')
title('Battery Lifetime Cycles')
xlabel('Year')
ylabel('cycles')
axis([yrs(1) yrs(end) 0 15000])
hold on
plot(yrs,cyclesBat,'r')

% Lifetime Years [years]
ltYrsBat = 15*ones(length(yrs),1); % 15 years lifetime

% Depth of Discharge
DoDBat = 0.8;

%% Pumped Hydro Storage
effPHS = 0.95*ones(length(yrs),1);

%% annualisation factors
dr = 0.05*ones(length(yrs),1);  % discount rate [-]

% preallocate the annualisation vectors for speed
annBat = zeros(length(yrs),1);
annEly = zeros(length(yrs),1);
annCsH = zeros(length(yrs),1);
annHsTank = zeros(length(yrs),1);
annHsUnd = zeros(length(yrs),1);
annFc = zeros(length(yrs),1);
annMeth = zeros(length(yrs),1);
annMs = zeros(length(yrs),1);

for i=1:length(dr)
    annBat(i) = (dr(i)/(1-(1+dr(i))^(-ltYrsBat(i))));
    annEly(i) = (dr(i)/(1-(1+dr(i))^(-ltYrsEly(i))));
    annCsH(i) = (dr(i)/(1-(1+dr(i))^(-ltYrsCsH(i))));
    annHsTank(i) = (dr(i)/(1-(1+dr(i))^(-ltYrsHsTank(i))));
    annHsUnd(i) = (dr(i)/(1-(1+dr(i))^(-ltYrsHsUnd(i))));
    annFc(i) = (dr(i)/(1-(1+dr(i))^(-ltYrsFc(i))));
    annMeth(i) = (dr(i)/(1-(1+dr(i))^(-ltYrsMeth(i))));
    annMs(i) = (dr(i)/(1-(1+dr(i))^(-ltYrsMs(i))));
end

%% Fixed Operation and Maintenance Cost

FOMBat = 0.02*ones(length(yrs),1);
FOMEly = 0.02*ones(length(yrs),1);
FOMCsH = 0.02*ones(length(yrs),1);
FOMFc = 0.02*ones(length(yrs),1);
FOMHsTank = 0.02*ones(length(yrs),1);
FOMHsUnd = 0.02*ones(length(yrs),1);
FOMMeth = 0.02*ones(length(yrs),1);
FOMMs = 0.02*ones(length(yrs),1);

%% Clean code
% save the variables
save('Data_Storage.mat',...
    'capexElyPEM','capexElyAlk',...
    'capexHsTank','capexHsUnd','capexCsH',...
    'capexFcPEM','capexFcAlk',...
    'capexMethBio','capexMethChem','capexMeth',...
    'capexMs','capexBat',...
    'ltHrsElyPEM','ltHrsElyAlk',...
    'ltHrsFcPEM','ltHrsFcAlk',...
    'ltHrsMeth','cyclesBat',...
    'effElyPEM','effElyAlk','effCsH',...
    'effFcPEM','effFcAlk',...
    'effMeth','effBat','DoDBat','effPHS',...
    'injLim',...
    'ltYrsEly','ltYrsCsH','ltYrsHsTank','ltYrsHsUnd',...
    'ltYrsFc','ltYrsMeth','ltYrsMs','ltYrsBat',...
    'annEly','annCsH','annHsTank','annHsUnd',...
    'annFc','annMeth','annMs','annBat',...
    'FOMBat','FOMEly','FOMCsH','FOMHsTank','FOMHsUnd',...
    'FOMFc','FOMMeth','FOMMs',...
    'dr','yrs');

clear
