Commit a385f421 authored by Markus Millinger's avatar Markus Millinger
Browse files

Added model to repository

parent 9407ecfd
This diff is collapsed.
# BENOPT
BENOPT is a deterministic, recursive, bottom-up, perfect foresight, linear optimisation model for modelling cost-optimal and/or GHG abatement optimal allocation of renewable energy carriers across power, heat and transport sectors. The sectors are further divided into sub-sectors. The model has an up to hourly resolution, which can be aggregated depending on the task. The model has been developed in Matlab and GAMS and requires both installed. The CPLEX solver is used as a standard for solving the LP problem, but other LP solvers may work as well.
The model includes modules for crop price developments (based on the premise that farmers want to achieve the same profit regardless of the crop grown), automatic GHG emission and cost calculations based on input-output, opex and capex data, and it has been hard coupled with a VRE module. Some 30+ technologies with 20+ biomass residues and crop types, which can be used across 10+ sub-sectors enable a myriad of biomass pathway options, which can be easily extended. PtX based on the power mix or excess electricity is included with numerous usage pathways, such as hydrogen, EVs or heat pumps. The whole pathway from source to end use service is captured across all energy sectors, allowing a systems perspective. Thanks to short run-times, extensive sensitivity analyses can be performed.
The model is developed for:
* System modelling across energy and bioeconomy sectors with a high detail on biomass crops and conversion pathways, as well as on power-to-X/electrofuels.
* Analysis throughout the entire biomass and renewable energy carrier supply chain, using a systems perspective
Main research question assessed:
* What role could/should biomass and other renewable energy options play within the energy system transformation process in order to achieve climate targets in the most cost- and GHG-optimal way, and how can conflicting targets be quantified?
Two goal functions can be used or combined: greenhouse gas (GHG) abatement or cost minimisation for fulfilling set energetic or GHG targets. In combination, pareto analyses can be performed.
BENOPT contains sectors for transport (road passenger, road goods, shipping and aviation), power and heat (industry, household and commercial). The model functions on a yearly resolution (with the exception of surplus power usage, which can be broken down to an hourly resolution) and is not spatially explicit. Detailed input-output, capex and opex data are integrated for feedstocks, conversion and supply, which allows detailed cost analyses and combined with relevant emission factors also GHG analyses.
The models are also used to investigate the sensitivity of the developments by means of various methods (Monte Carlo, SOBOL), on which a large number of parameters have an influence, especially in the complex area of biomass use.
Running
=======
`main.m` is the main file of the model, where data is read, variables set and from which the other modules are called and the optimization module in GAMS is executed. Data can be changed in the excel file and some variables are set and can be changed in 'setData.m'.
Licence
=======
Copyright 2017-2020 Markus Millinger, Philip Tafarte, Matthias Jordan, Frazer Musonda
This program is free software: you can redistribute it and/or
modify it under the terms of the GNU General Public License as
published by the Free Software Foundation; either `version 3 of the
License <LICENSE.txt>`, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
`GNU General Public License <LICENSE.txt>` for more details.
%!PS-Adobe-3.0 EPSF-3.0
%%Creator: (MATLAB, The Mathworks, Inc. Version 9.5.0.944444 \(R2018b\). Operating System: Windows 10)
%%Title: ../fig/CO2useScenarios.eps
%%CreationDate: 2020-06-08T14:23:54
%%Pages: (atend)
%%BoundingBox: 0 0 300 188
%%LanguageLevel: 3
%%EndComments
%%BeginProlog
%%BeginResource: procset (Apache XML Graphics Std ProcSet) 1.2 0
%%Version: 1.2 0
%%Copyright: (Copyright 2001-2003,2010 The Apache Software Foundation. License terms: http://www.apache.org/licenses/LICENSE-2.0)
/bd{bind def}bind def
/ld{load def}bd
/GR/grestore ld
/GS/gsave ld
/RM/rmoveto ld
/C/curveto ld
/t/show ld
/L/lineto ld
/ML/setmiterlimit ld
/CT/concat ld
/f/fill ld
/N/newpath ld
/S/stroke ld
/CC/setcmykcolor ld
/A/ashow ld
/cp/closepath ld
/RC/setrgbcolor ld
/LJ/setlinejoin ld
/GC/setgray ld
/LW/setlinewidth ld
/M/moveto ld
/re {4 2 roll M
1 index 0 rlineto
0 exch rlineto
neg 0 rlineto
cp } bd
/_ctm matrix def
/_tm matrix def
/BT { _ctm currentmatrix pop matrix _tm copy pop 0 0 moveto } bd
/ET { _ctm setmatrix } bd
/iTm { _ctm setmatrix _tm concat } bd
/Tm { _tm astore pop iTm 0 0 moveto } bd
/ux 0.0 def
/uy 0.0 def
/F {
/Tp exch def
/Tf exch def
Tf findfont Tp scalefont setfont
/cf Tf def /cs Tp def
} bd
/ULS {currentpoint /uy exch def /ux exch def} bd
/ULE {
/Tcx currentpoint pop def
gsave
newpath
cf findfont cs scalefont dup
/FontMatrix get 0 get /Ts exch def /FontInfo get dup
/UnderlinePosition get Ts mul /To exch def
/UnderlineThickness get Ts mul /Tt exch def
ux uy To add moveto Tcx uy To add lineto
Tt setlinewidth stroke
grestore
} bd
/OLE {
/Tcx currentpoint pop def
gsave
newpath
cf findfont cs scalefont dup
/FontMatrix get 0 get /Ts exch def /FontInfo get dup
/UnderlinePosition get Ts mul /To exch def
/UnderlineThickness get Ts mul /Tt exch def
ux uy To add cs add moveto Tcx uy To add cs add lineto
Tt setlinewidth stroke
grestore
} bd
/SOE {
/Tcx currentpoint pop def
gsave
newpath
cf findfont cs scalefont dup
/FontMatrix get 0 get /Ts exch def /FontInfo get dup
/UnderlinePosition get Ts mul /To exch def
/UnderlineThickness get Ts mul /Tt exch def
ux uy To add cs 10 mul 26 idiv add moveto Tcx uy To add cs 10 mul 26 idiv add lineto
Tt setlinewidth stroke
grestore
} bd
/QT {
/Y22 exch store
/X22 exch store
/Y21 exch store
/X21 exch store
currentpoint
/Y21 load 2 mul add 3 div exch
/X21 load 2 mul add 3 div exch
/X21 load 2 mul /X22 load add 3 div
/Y21 load 2 mul /Y22 load add 3 div
/X22 load /Y22 load curveto
} bd
/SSPD {
dup length /d exch dict def
{
/v exch def
/k exch def
currentpagedevice k known {
/cpdv currentpagedevice k get def
v cpdv ne {
/upd false def
/nullv v type /nulltype eq def
/nullcpdv cpdv type /nulltype eq def
nullv nullcpdv or
{
/upd true def
} {
/sametype v type cpdv type eq def
sametype {
v type /arraytype eq {
/vlen v length def
/cpdvlen cpdv length def
vlen cpdvlen eq {
0 1 vlen 1 sub {
/i exch def
/obj v i get def
/cpdobj cpdv i get def
obj cpdobj ne {
/upd true def
exit
} if
} for
} {
/upd true def
} ifelse
} {
v type /dicttype eq {
v {
/dv exch def
/dk exch def
/cpddv cpdv dk get def
dv cpddv ne {
/upd true def
exit
} if
} forall
} {
/upd true def
} ifelse
} ifelse
} if
} ifelse
upd true eq {
d k v put
} if
} if
} if
} forall
d length 0 gt {
d setpagedevice
} if
} bd
/RE { % /NewFontName [NewEncodingArray] /FontName RE -
findfont dup length dict begin
{
1 index /FID ne
{def} {pop pop} ifelse
} forall
/Encoding exch def
/FontName 1 index def
currentdict definefont pop
end
} bind def
%%EndResource
%%BeginResource: procset (Apache XML Graphics EPS ProcSet) 1.0 0
%%Version: 1.0 0
%%Copyright: (Copyright 2002-2003 The Apache Software Foundation. License terms: http://www.apache.org/licenses/LICENSE-2.0)
/BeginEPSF { %def
/b4_Inc_state save def % Save state for cleanup
/dict_count countdictstack def % Count objects on dict stack
/op_count count 1 sub def % Count objects on operand stack
userdict begin % Push userdict on dict stack
/showpage { } def % Redefine showpage, { } = null proc
0 setgray 0 setlinecap % Prepare graphics state
1 setlinewidth 0 setlinejoin
10 setmiterlimit [ ] 0 setdash newpath
/languagelevel where % If level not equal to 1 then
{pop languagelevel % set strokeadjust and
1 ne % overprint to their defaults.
{false setstrokeadjust false setoverprint
} if
} if
} bd
/EndEPSF { %def
count op_count sub {pop} repeat % Clean up stacks
countdictstack dict_count sub {end} repeat
b4_Inc_state restore
} bd
%%EndResource
%FOPBeginFontDict
%%IncludeResource: font Courier-Oblique
%%IncludeResource: font Courier-BoldOblique
%%IncludeResource: font Courier-Bold
%%IncludeResource: font ZapfDingbats
%%IncludeResource: font Symbol
%%IncludeResource: font Helvetica
%%IncludeResource: font Helvetica-Oblique
%%IncludeResource: font Helvetica-Bold
%%IncludeResource: font Helvetica-BoldOblique
%%IncludeResource: font Times-Roman
%%IncludeResource: font Times-Italic
%%IncludeResource: font Times-Bold
%%IncludeResource: font Times-BoldItalic
%%IncludeResource: font Courier
%FOPEndFontDict
%%BeginResource: encoding WinAnsiEncoding
/WinAnsiEncoding [
/.notdef /.notdef /.notdef /.notdef /.notdef
/.notdef /.notdef /.notdef /.notdef /.notdef
/.notdef /.notdef /.notdef /.notdef /.notdef
/.notdef /.notdef /.notdef /.notdef /.notdef
/.notdef /.notdef /.notdef /.notdef /.notdef
/.notdef /.notdef /.notdef /.notdef /.notdef
/.notdef /.notdef /space /exclam /quotedbl
/numbersign /dollar /percent /ampersand /quotesingle
/parenleft /parenright /asterisk /plus /comma
/hyphen /period /slash /zero /one
/two /three /four /five /six
/seven /eight /nine /colon /semicolon
/less /equal /greater /question /at
/A /B /C /D /E
/F /G /H /I /J
/K /L /M /N /O
/P /Q /R /S /T
/U /V /W /X /Y
/Z /bracketleft /backslash /bracketright /asciicircum
/underscore /quoteleft /a /b /c
/d /e /f /g /h
/i /j /k /l /m
/n /o /p /q /r
/s /t /u /v /w
/x /y /z /braceleft /bar
/braceright /asciitilde /bullet /Euro /bullet
/quotesinglbase /florin /quotedblbase /ellipsis /dagger
/daggerdbl /circumflex /perthousand /Scaron /guilsinglleft
/OE /bullet /Zcaron /bullet /bullet
/quoteleft /quoteright /quotedblleft /quotedblright /bullet
/endash /emdash /asciitilde /trademark /scaron
/guilsinglright /oe /bullet /zcaron /Ydieresis
/space /exclamdown /cent /sterling /currency
/yen /brokenbar /section /dieresis /copyright
/ordfeminine /guillemotleft /logicalnot /sfthyphen /registered
/macron /degree /plusminus /twosuperior /threesuperior
/acute /mu /paragraph /middot /cedilla
/onesuperior /ordmasculine /guillemotright /onequarter /onehalf
/threequarters /questiondown /Agrave /Aacute /Acircumflex
/Atilde /Adieresis /Aring /AE /Ccedilla
/Egrave /Eacute /Ecircumflex /Edieresis /Igrave
/Iacute /Icircumflex /Idieresis /Eth /Ntilde
/Ograve /Oacute /Ocircumflex /Otilde /Odieresis
/multiply /Oslash /Ugrave /Uacute /Ucircumflex
/Udieresis /Yacute /Thorn /germandbls /agrave
/aacute /acircumflex /atilde /adieresis /aring
/ae /ccedilla /egrave /eacute /ecircumflex
/edieresis /igrave /iacute /icircumflex /idieresis
/eth /ntilde /ograve /oacute /ocircumflex
/otilde /odieresis /divide /oslash /ugrave
/uacute /ucircumflex /udieresis /yacute /thorn
/ydieresis
] def
%%EndResource
%FOPBeginFontReencode
/Courier-Oblique findfont
dup length dict begin
{1 index /FID ne {def} {pop pop} ifelse} forall
/Encoding WinAnsiEncoding def
currentdict
end
/Courier-Oblique exch definefont pop
/Courier-BoldOblique findfont
dup length dict begin
{1 index /FID ne {def} {pop pop} ifelse} forall
/Encoding WinAnsiEncoding def
currentdict
end
/Courier-BoldOblique exch definefont pop
/Courier-Bold findfont
dup length dict begin
{1 index /FID ne {def} {pop pop} ifelse} forall
/Encoding WinAnsiEncoding def
currentdict
end
/Courier-Bold exch definefont pop
/Helvetica findfont
dup length dict begin
{1 index /FID ne {def} {pop pop} ifelse} forall
/Encoding WinAnsiEncoding def
currentdict
end
/Helvetica exch definefont pop
/Helvetica-Oblique findfont
dup length dict begin
{1 index /FID ne {def} {pop pop} ifelse} forall
/Encoding WinAnsiEncoding def
currentdict
end
/Helvetica-Oblique exch definefont pop
/Helvetica-Bold findfont
dup length dict begin
{1 index /FID ne {def} {pop pop} ifelse} forall
/Encoding WinAnsiEncoding def
currentdict
end
/Helvetica-Bold exch definefont pop
/Helvetica-BoldOblique findfont
dup length dict begin
{1 index /FID ne {def} {pop pop} ifelse} forall
/Encoding WinAnsiEncoding def
currentdict
end
/Helvetica-BoldOblique exch definefont pop
/Times-Roman findfont
dup length dict begin
{1 index /FID ne {def} {pop pop} ifelse} forall
/Encoding WinAnsiEncoding def
currentdict
end
/Times-Roman exch definefont pop
/Times-Italic findfont
dup length dict begin
{1 index /FID ne {def} {pop pop} ifelse} forall
/Encoding WinAnsiEncoding def
currentdict
end
/Times-Italic exch definefont pop
/Times-Bold findfont
dup length dict begin
{1 index /FID ne {def} {pop pop} ifelse} forall
/Encoding WinAnsiEncoding def
currentdict
end
/Times-Bold exch definefont pop
/Times-BoldItalic findfont
dup length dict begin
{1 index /FID ne {def} {pop pop} ifelse} forall
/Encoding WinAnsiEncoding def
currentdict
end
/Times-BoldItalic exch definefont pop
/Courier findfont
dup length dict begin
{1 index /FID ne {def} {pop pop} ifelse} forall
/Encoding WinAnsiEncoding def
currentdict
end
/Courier exch definefont pop
%FOPEndFontReencode
%%EndProlog
%%Page: 1 1
%%PageBoundingBox: 0 0 300 188
%%BeginPageSetup
[1 0 0 -1 0 188] CT
%%EndPageSetup
GS
[0.5 0 0 0.5 0 0.5] CT
1 GC
N
0 0 600 375 re
f
GR
GS
[0.5 0 0 0.5 0 0.5] CT
1 GC
N
0 0 600 375 re
f
GR
GS
[0.5 0 0 0.5 0 0.5] CT
1 GC
N
78 315 M
544 315 L
544 28 L
78 28 L
cp
f
GR
GS
[0.5 0 0 0.5 0 0.5] CT
0.873 GC
1 LJ
N
78 315 M
78 28 L
S
GR
GS
[0.5 0 0 0.5 0 0.5] CT
0.873 GC
1 LJ
N
155.667 315 M
155.667 28 L
S
GR
GS
[0.5 0 0 0.5 0 0.5] CT
0.873 GC
1 LJ
N
233.333 315 M
233.333 28 L
S
GR
GS
[0.5 0 0 0.5 0 0.5] CT
0.873 GC
1 LJ
N
311 315 M
311 28 L
S
GR
GS
[0.5 0 0 0.5 0 0.5] CT
0.873 GC
1 LJ
N
388.667 315 M
388.667 28 L
S
GR
GS
[0.5 0 0 0.5 0 0.5] CT
0.873 GC
1 LJ
N
466.333 315 M
466.333 28 L
S
GR
GS
[0.5 0 0 0.5 0 0.5] CT
0.873 GC
1 LJ
N
544 315 M
544 28 L
S
GR
GS
[0.5 0 0 0.5 0 0.5] CT
0.873 GC
1 LJ
N
544 303.962 M
78 303.962 L
S
GR
GS
[0.5 0 0 0.5 0 0.5] CT
0.873 GC
1 LJ
N
544 248.769 M
78 248.769 L
S
GR
GS
[0.5 0 0 0.5 0 0.5] CT
0.873 GC
1 LJ
N
544 193.577 M
78 193.577 L
S
GR
GS
[0.5 0 0 0.5 0 0.5] CT
0.873 GC
1 LJ
N
544 138.385 M
78 138.385 L
S
GR
GS
[0.5 0 0 0.5 0 0.5] CT
0.873 GC
1 LJ
N
544 83.192 M
78 83.192 L
S
GR
GS
[0.5 0 0 0.5 0 0.5] CT
0.873 GC
1 LJ
N
544 28 M
78 28 L
S
GR
GS
[0.5 0 0 0.5 0 0.5] CT
0.149 GC
2 setlinecap
1 LJ
N
78 315 M
544 315 L
S
GR
GS
[0.5 0 0 0.5 0 0.5] CT
0.149 GC
2 setlinecap
1 LJ
N
78 315 M
78 310.34 L
S
GR
GS
[0.5 0 0 0.5 0 0.5] CT
0.149 GC
2 setlinecap
1 LJ
N
155.667 315 M
155.667 310.34 L
S
GR
GS
[0.5 0 0 0.5 0 0.5] CT
0.149 GC
2 setlinecap
1 LJ
N
233.333 315 M
233.333 310.34 L
S
GR
GS
[0.5 0 0 0.5 0 0.5] CT
0.149 GC
2 setlinecap
1 LJ
N
311 315 M
311 310.34 L
S
GR
GS
[0.5 0 0 0.5 0 0.5] CT
0.149 GC
2 setlinecap
1 LJ
N
388.667 315 M
388.667 310.34 L
S
GR
GS
[0.5 0 0 0.5 0 0.5] CT
0.149 GC
2 setlinecap
1 LJ
N
466.333 315 M
466.333 310.34 L
S
GR
GS
[0.5 0 0 0.5 0 0.5] CT