Difference between revisions of "Helsinki energy decision 2015"

From Opasnet
Jump to: navigation, search
(new graphs)
(Case-specific ovariables)
 
(36 intermediate revisions by the same user not shown)
Line 1: Line 1:
 +
<noinclude>
 
[[heande:Helsinki energy decision 2015]]
 
[[heande:Helsinki energy decision 2015]]
 
[[op_fi:Helsingin_energiapäätös_2015]]
 
[[op_fi:Helsingin_energiapäätös_2015]]
Line 7: Line 8:
  
 
{{summary box
 
{{summary box
| question = This website contains an on-going impact assessment to support the decision making on how energy should be produced in Helsinki in the future. The City of Helsinki is making a major decision about power plants in 2015, and it will affect the energy supply in Helsinki for decades. Political discussion is active, but quantitative, analytical assessments are scarce, especially those that are also looking at health and climate impacts. How to continuously supply energy for the heating and electricity needs of Helsinki in all circumstances all year round for the next fifty years? An energy balance assessment is needed with several output indicators, such as cost, climate emissions, health, supply security, and domestic growth. How can decentralised energy supply and energy efficiency renovations improve the situation? The latter question was asked by the city council in spring 2015, and an other assessment (coordinated by the City of Helsinki and Helen energy company) is ongoing to also answer that question by September 2015.
+
|question = Helsinki will make a large energy decision during fall 2015. it will impact energy production for decades. An important decision requires systematic information. How do we guarantee a continuous and sufficient supply of district heat and electricity in Helsinki around the year for the next fifty years in such a way that the impacts on costs, health, climate change, and sustainable growth are as beneficial as possible? How can decentralised energy production and energy efficiency renovations improve the situation? The latter question was asked by the City Council, and another assessment (coordinated by the city of Helsinki and Helen energy company) will answer that soon.
| answer = The National Institute of Health and Welfare [[THL]] is performing an [[open assessment]] in Opasnet web-workspace during summer 2015. We are developing an assessment model (called ''Sofia'') to estimate feasibility and impacts of several suggested solutions to the Helsinki energy decision. Sofia is an energy balance model that optimises the costs of energy production in a way that the district heat demand is met every day with appropriate supply from the power plants in Helsinki. The situation is followed from 1985 to 2065. Sofia is looking also at other heat and electricity consumption, but not traffic or industry. Based on the balanced energy supply, Sofia estimates the fuel and other costs as well as greenhouse gas and fine particle emissions for power plants and other energy processes. The model can handle several scenarios that can be compared with each other to see the impacts of different actions (such as building renovations or new power plants) on the overall situation.
+
|answer = National Institute for Health and Welfare (THL) performed an open assessment on the Opasnet web-workspace during summer and fall 2015 aiming at shared understanding. We utilised knowledge crystals, i.e. regurlarly updated collaborative online answers to specific research questions. Based on them, we built a model called ''Sofia'' to assess impacts and implementability of several different energy options in Helsinki. [[:op_fi:File:Helsingin energiapäätös 2015 raportti.pdf|An assessment report|]] has been published in Finnish.
  
Sofia is able to calculate the building stock and its energy use based on average energy intensity per floor area and outdoor temperature. It also finds the optimal use of existing power plants for different situations for the whole timespan of the assessment. The model suggests how the energy demand could be covered in the future when different impacts are considered. Production costs are optimised, but also other criteria could be used. Currently, Sofia suggests the use of Vuosaari A&B gas plant as the main energy source of energy, but if Vuosaari C biofuel plant were built, the importance of Vuosaari A&B would diminish. Such guidance is naturally based on the data that Sofia currently has, and her recommendations are likely to change when more and more precise data is collected. According to the principles of open assessment, we invite anybody who is interested in Helsinki's energy decision to participate and browse through the pages of this assessment. All data and all parts of the model are openly available in machine-readable format. All comments, criticism, and update suggestions are welcome.  
+
Sofia can estimate the building stock and energy consumption based on average energy efficiency, floor area, and ambient temperature. Sofia is an energy balance model that optimises costs of energy production while ensuring the supply of district heating in Helsinki for each day. The situation is followed from 1985 to 2065. Sofia looks also at other heat, fuel, and electric power consumption, but not those of industry and traffic.
 +
 
 +
Based on balanced energy production Sofia estimates the fuel and other costs and greenhouse gas and fine particle emissions from power plants and other energy processes. The model can assess several scenarios and thus compare the overall impacts of different actions, such as energy renovations or new power plants.
 +
 
 +
Sofia's main conclusion is that the energy solutions seem to fall into two categories: those that produce electric power as a side stream of district heat, like in Hanasaari coal plant and the suggested Vuosaari C biofuel plant; and those that do not produce or even consume a large amount of electricity, like decentralised biofuel heat plants or sea heat pumps. Based on current discussions, the self-sufficiency of electric power in Helsinki seems to be disappearing and probably changing into a deep dependency of outside electricity. The development of the Nordic electric market determines whether this will be a problem or not in the future.
 +
 
 +
Unfortunately, the electric market is under strong transition, and for example the wind power tariffes complicate the situation, making future predictions of this crucial issue even more difficult. Local heat production solutions are in a great need of a clear and systematic national electric policy. Otherwise, the previously very efficient combined heat and power production will be replaced with something much less efficient in Finland in the future.
 +
 
 +
If we forget the question about self-sufficiency of electric power and focus only on district heat, there are several cost-effective solutions available. Excess heat from different processes such as data centres or Neste oil refinery seem to be more cost-effective than e.g. Vuosaari C biofuel plant. Also small and large heat pumps that take heat from the environment are cost-effective. District heat from Loviisa 3 nuclear power plant is also cost-effective in our estimates, but we were not able to fully charaterise uncertainties in the investment cost; and we must remember that the decision to build or not to build the reactor is not in the hands of Helsinki.
 +
 
 +
A major problem with the process heat solutions is that they consume electric power exactly when the demand for power is the largest and price the highest. We were not able to assess the variability of the price of electricity in this assessment, but it is substantial and might change conclusions. Also for this reason, there is a need for a national energy balance model with hourly resolution including eletricity, industry, and traffic.
 +
 
 +
Health and climate impacts are important in every single option we looked at, together ranging between a fifth and a fourth of all costs, health and climate comprising a half of that each. Surprisingly, differences between policy options in this respect were small even if the reputation of the climate-friendliness of the options was very different. According to Sofia, this is due to several reasons. All large power plants filter fine particles out very effectively, and therefore there are no large differences in health impacts; a clear exception is small-scale wood burning in houses, which has several times larger health problems than any other option despite its marginal role in energy production. Also, the life cycle emissions of fine particles and greenhouse gases is also important: even if the direct emissions from a heat pump are zero, the electric power imported has produced emissions somewhere. Biofuels are considered climate neutral in emission trade, but they still produce emissions during their life cycle. Therefore, even a fuel switch does not produce the expected results.
 +
 
 +
Of course, the conclusions based on the model depend on the goodness of the data used. There are several uncertainties that should have been clarified had there been more time to work on the topic. Especially the fuel prices are very difficult to predict into the future. Also the fuel taxes are very high for some fuels but not for others. Effectively, the society decides, using taxes, which solutions make sense on the city level. This is a third reason why there should be a national, long-term, and clear energy policy - and tax policy supporting it - based on detailed, open energy balance modelling the best available information.
 
}}
 
}}
  
Line 31: Line 46:
 
Helsinki City Council will make a major decision in autumn 2015 about renovating old power plants, building a new one, or some other option replacing the need of the old power plants. Therefore, the City Council is the major user of the assessment. There are also secondary uses, such as informing national energy discussion and demonstrating the usefulness of an open combined [[energy balance]] and [[building model]].
 
Helsinki City Council will make a major decision in autumn 2015 about renovating old power plants, building a new one, or some other option replacing the need of the old power plants. Therefore, the City Council is the major user of the assessment. There are also secondary uses, such as informing national energy discussion and demonstrating the usefulness of an open combined [[energy balance]] and [[building model]].
  
{{hidden|1 =
 
<br/>
 
 
=== Participants ===
 
=== Participants ===
  
 
The work is coordinated by [[User:Jouni|Jouni Tuomisto]] from [[THL]] / Impact Assessment Unit. Their motivation is to contribute to the decision-making process by bringing quantitative results to help assess the health and other impacts of different options in a transparent manner. Participants that we hope get involved when they are informed about the assessment include  
 
The work is coordinated by [[User:Jouni|Jouni Tuomisto]] from [[THL]] / Impact Assessment Unit. Their motivation is to contribute to the decision-making process by bringing quantitative results to help assess the health and other impacts of different options in a transparent manner. Participants that we hope get involved when they are informed about the assessment include  
* THL: Jouni, Pauli, Teemu, Matleena, Julia, Olli
+
* THL: Jouni, Pauli, Teemu, Matleena, Julia
 
* the City of Helsinki,
 
* the City of Helsinki,
 
* Helen energy company
 
* Helen energy company
Line 44: Line 57:
 
=== Boundaries ===
 
=== Boundaries ===
  
* Time: 2015 - 2065
+
* Time: 1985 - 2065
 
* Energy need estimated for Helsinki.
 
* Energy need estimated for Helsinki.
 
* Main focus is on local heat and power need. Energy balance estimated for Helsinki (electricity nationally).
 
* Main focus is on local heat and power need. Energy balance estimated for Helsinki (electricity nationally).
Line 50: Line 63:
 
* Impacts are assessed separately for the citizen, the city, Helen energy company, and Finland.
 
* Impacts are assessed separately for the citizen, the city, Helen energy company, and Finland.
 
* Transport is not looked at although it is an important energy consumer. This is because there is no interaction with heating except via city structure, and there are no resources to look at that in this assessment. Electric cars would have an interaction with electricity production, but that applies to the total electricity market area (Finland, partly Scandinavia) and is too complex to look at.
 
* Transport is not looked at although it is an important energy consumer. This is because there is no interaction with heating except via city structure, and there are no resources to look at that in this assessment. Electric cars would have an interaction with electricity production, but that applies to the total electricity market area (Finland, partly Scandinavia) and is too complex to look at.
}}
 
  
 
=== Decisions and scenarios ===
 
=== Decisions and scenarios ===
Line 56: Line 68:
 
:''Main article: [[Helsinki energy decision options 2015]]
 
:''Main article: [[Helsinki energy decision options 2015]]
  
The two options in the official decision preparation are Hanasaari shutdown and Vuosaari, and Hanasaari 40 bio and Salmisaari 40 bio. However, also other options have been suggested, and also they are evaluated at least superficially.
+
The two options in the official decision preparation as of May 2015 are i) Hanasaari shutdown and Vuosaari C, and ii) Hanasaari 40 bio and Salmisaari 40 bio. However, also other options have been suggested, and also they are evaluated at least superficially.
 
# '''BAU:''' Only small, essential renovations are made to current power plants to stay within new emission limits.
 
# '''BAU:''' Only small, essential renovations are made to current power plants to stay within new emission limits.
 
# '''Vuosaari C:''' A new power plant is built in Vuosaari with the capacity to burn 100 % wood-based fuel or any combination of wood-based fuels and coal.
 
# '''Vuosaari C:''' A new power plant is built in Vuosaari with the capacity to burn 100 % wood-based fuel or any combination of wood-based fuels and coal.
Line 107: Line 119:
 
|| Loviisa nuclear heat || {{no}}|| {{yes}}|| {{no}}|| {{no}}|| {{no}}|| {{no}}|| {{no}}
 
|| Loviisa nuclear heat || {{no}}|| {{yes}}|| {{no}}|| {{no}}|| {{no}}|| {{no}}|| {{no}}
 
|----
 
|----
|| Neste oil refinery heat || {{no}}|| {{yes}}|| {{no}}|| {{no}}|| {{no}}|| {{no}}|| {{no}}
+
|| Neste oil refinery heat || {{no}}|| {{yes}}|| {{no}}|| {{no}}|| {{yes}}|| {{no}}|| {{no}}
 
|----
 
|----
 
|| Salmisaari A&amp;B || renovated for biofuels|| {{yes}}|| {{yes}}|| {{yes}}|| {{no}}|| renovated for biofuels|| {{yes}}
 
|| Salmisaari A&amp;B || renovated for biofuels|| {{yes}}|| {{yes}}|| {{yes}}|| {{no}}|| renovated for biofuels|| {{yes}}
 
|----
 
|----
|| Sea heat pump || {{no}}|| {{no}}|| {{no}}|| {{no}}|| {{no}}|| {{no}}|| {{yes}}
+
|| Sea heat pump || {{no}}|| {{no}}|| {{no}}|| {{no}}|| {{yes}}|| {{no}}|| {{yes}}
 
|----
 
|----
 
|| Sea heat pump for cooling || {{no}}|| {{no}}|| {{no}}|| {{no}}|| {{no}}|| {{no}}|| {{yes}}
 
|| Sea heat pump for cooling || {{no}}|| {{no}}|| {{no}}|| {{no}}|| {{no}}|| {{no}}|| {{yes}}
Line 138: Line 150:
  
 
<t2b name="Decisions" index='Decision_maker,Decision,Option,Variable,Cell,Change,Unit' obs='Amount' desc='Description' unit='-'>
 
<t2b name="Decisions" index='Decision_maker,Decision,Option,Variable,Cell,Change,Unit' obs='Amount' desc='Description' unit='-'>
Builders|EnergySavingPolicy|BAU|efficiencyShares||Add||0|
+
Builders|EnergySavingPolicy|BAU|efficiencyShares||Identity||0|
Builders|EnergySavingPolicy|Energy saving moderate|efficiencyShares||Add||0|
+
Builders|EnergySavingPolicy|Energy saving moderate|efficiencyShares||Identity||0|
 
Builders|EnergySavingPolicy|Energy saving total|efficiencyShares|Efficiency:Passive;Time:2025,2035|Add|fraction|0.25|All input must be given in units that are used in respective ovariables.
 
Builders|EnergySavingPolicy|Energy saving total|efficiencyShares|Efficiency:Passive;Time:2025,2035|Add|fraction|0.25|All input must be given in units that are used in respective ovariables.
 
Builders|EnergySavingPolicy|Energy saving total|efficiencyShares|Efficiency:Passive;Time:2045,2055,2065|Add|fraction|0.1|
 
Builders|EnergySavingPolicy|Energy saving total|efficiencyShares|Efficiency:Passive;Time:2045,2055,2065|Add|fraction|0.1|
 
Builders|EnergySavingPolicy|Energy saving total|efficiencyShares|Efficiency:Low-energy;Time:2025,2035|Add|fraction|-0.25|
 
Builders|EnergySavingPolicy|Energy saving total|efficiencyShares|Efficiency:Low-energy;Time:2025,2035|Add|fraction|-0.25|
 
Builders|EnergySavingPolicy|Energy saving total|efficiencyShares|Efficiency:Low-energy;Time:2045,2055,2065|Add|fraction|-0.1|
 
Builders|EnergySavingPolicy|Energy saving total|efficiencyShares|Efficiency:Low-energy;Time:2045,2055,2065|Add|fraction|-0.1|
 +
Building owner|EnergySavingPolicy|WWF energy saving|efficiencyShares||Identity|fraction|0|Energy efficiency in future buildings is so close to BAU that it is not changed.
 
Building owner|EnergySavingPolicy|BAU|renovationRate||Multiply|1 /a|1|Assumes BAU renovation rate = 1%/a for buildings >30 a old
 
Building owner|EnergySavingPolicy|BAU|renovationRate||Multiply|1 /a|1|Assumes BAU renovation rate = 1%/a for buildings >30 a old
 
Building owner|EnergySavingPolicy|Energy saving moderate|renovationRate||Multiply|1 /a|2|
 
Building owner|EnergySavingPolicy|Energy saving moderate|renovationRate||Multiply|1 /a|2|
 
Building owner|EnergySavingPolicy|Energy saving total|renovationRate||Multiply|1 /a|4|
 
Building owner|EnergySavingPolicy|Energy saving total|renovationRate||Multiply|1 /a|4|
 +
Building owner|EnergySavingPolicy|WWF energy saving|renovationRate||Multiply|1 /a|2.5|
 +
Building owner|EnergySavingPolicy|BAU|demolitionRate||Replace|1 /a|0|
 +
Building owner|EnergySavingPolicy|Energy saving moderate|demolitionRate||Replace|1 /a|0|
 +
Building owner|EnergySavingPolicy|Energy saving total|demolitionRate||Replace|1 /a|0|
 +
Building owner|EnergySavingPolicy|WWF energy saving|demolitionRate||Identity|1 /a|0|
 
Building owner|EnergySavingPolicy|BAU|renovationShares||Add|fraction|0|
 
Building owner|EnergySavingPolicy|BAU|renovationShares||Add|fraction|0|
 
Building owner|EnergySavingPolicy|Energy saving moderate|renovationShares||Add|fraction|0|
 
Building owner|EnergySavingPolicy|Energy saving moderate|renovationShares||Add|fraction|0|
 
Building owner|EnergySavingPolicy|Energy saving total|renovationShares|Renovation:Windows|Add|fraction|-0.25|
 
Building owner|EnergySavingPolicy|Energy saving total|renovationShares|Renovation:Windows|Add|fraction|-0.25|
 
Building owner|EnergySavingPolicy|Energy saving total|renovationShares|Renovation:Sheath reform|Add|fraction|0.25|
 
Building owner|EnergySavingPolicy|Energy saving total|renovationShares|Renovation:Sheath reform|Add|fraction|0.25|
 +
Building owner|EnergySavingPolicy|WWF energy saving|renovationShares|Renovation:Sheath reform|Add|fraction|0.1|
 +
Building owner|EnergySavingPolicy|WWF energy saving|renovationShares|Renovation:Windows|Add|fraction|-0.1|
 
Helen|PlantPolicy|BAU|plantParameters|Plant:Biofuel heat plants,CHP diesel generators,Data center heat,Deep-drill heat,Loviisa nuclear heat,Neste oil refinery heat,Sea heat pump,Sea heat pump for cooling,Small-scale wood burning,Vuosaari C biofuel,Wind mills;Parameter:Min,Max,Investment cost,Management cost|Replace|MW,MW,M€,M€/a|0|
 
Helen|PlantPolicy|BAU|plantParameters|Plant:Biofuel heat plants,CHP diesel generators,Data center heat,Deep-drill heat,Loviisa nuclear heat,Neste oil refinery heat,Sea heat pump,Sea heat pump for cooling,Small-scale wood burning,Vuosaari C biofuel,Wind mills;Parameter:Min,Max,Investment cost,Management cost|Replace|MW,MW,M€,M€/a|0|
 
Helen|PlantPolicy|BAU|energyProcess|Plant:Hanasaari;Fuel:Biofuel;Time:>=2018|Add|MJ/MJ|-0.4|
 
Helen|PlantPolicy|BAU|energyProcess|Plant:Hanasaari;Fuel:Biofuel;Time:>=2018|Add|MJ/MJ|-0.4|
Line 169: Line 189:
 
Helen|PlantPolicy|Zero investment|plantParameters|Plant:Biofuel heat plants,CHP diesel generators,Data center heat,Deep-drill heat,Sea heat pump,Sea heat pump for cooling,Small-scale wood burning,Suvilahti power storage,Loviisa nuclear heat,Neste oil refinery heat,Vuosaari C biofuel,Wind mills;Parameter:Min,Max,Investment cost,Management cost|Replace|MW,MW,M€,M€/a|0|
 
Helen|PlantPolicy|Zero investment|plantParameters|Plant:Biofuel heat plants,CHP diesel generators,Data center heat,Deep-drill heat,Sea heat pump,Sea heat pump for cooling,Small-scale wood burning,Suvilahti power storage,Loviisa nuclear heat,Neste oil refinery heat,Vuosaari C biofuel,Wind mills;Parameter:Min,Max,Investment cost,Management cost|Replace|MW,MW,M€,M€/a|0|
 
Helen|PlantPolicy|Carbon neutral 2050|energyProcess||Identity|MJ/MJ|0|
 
Helen|PlantPolicy|Carbon neutral 2050|energyProcess||Identity|MJ/MJ|0|
Helen|PlantPolicy|Carbon neutral 2050|plantParameters|Plant:CHP diesel generators,Data center heat,Deep-drill heat,Loviisa nuclear heat,Neste oil refinery heat,Sea heat pump,Sea heat pump for cooling,Small-scale wood burning;Parameter:Min,Max,Investment cost,Management cost|Replace|MW,MW,M€,M€/a|0|
+
Helen|PlantPolicy|Carbon neutral 2050|plantParameters|Plant:CHP diesel generators,Data center heat,Deep-drill heat,Loviisa nuclear heat,Sea heat pump for cooling,Small-scale wood burning;Parameter:Min,Max,Investment cost,Management cost|Replace|MW,MW,M€,M€/a|0|
 
Helen|PlantPolicy|Carbon neutral 2050|plantParameters|Plant:Salmisaari A&B,Small gas heat plants,Small fuel oil heat plants,Vuosaari A,Vuosaari B;Time:>=2030;Parameter:Min,Max,Investment cost,Management cost|Replace|MW,MW,M€,M€/a|0|Fossil fuel plants
 
Helen|PlantPolicy|Carbon neutral 2050|plantParameters|Plant:Salmisaari A&B,Small gas heat plants,Small fuel oil heat plants,Vuosaari A,Vuosaari B;Time:>=2030;Parameter:Min,Max,Investment cost,Management cost|Replace|MW,MW,M€,M€/a|0|Fossil fuel plants
 
Helen|PlantPolicy|Carbon neutral 2050|plantParameters|Plant:Hanasaari;Time:>=2023;Parameter:Max|Replace|MW|0|As described in Helen Vuosaari C proposition
 
Helen|PlantPolicy|Carbon neutral 2050|plantParameters|Plant:Hanasaari;Time:>=2023;Parameter:Max|Replace|MW|0|As described in Helen Vuosaari C proposition
Line 189: Line 209:
 
** Energy saving moderate: renovate 2 %/a
 
** Energy saving moderate: renovate 2 %/a
 
** Energy saving total: renovate 4 %/a, in addition increase the share of passive buildings up by 25 %-units since 2025, and add the share of sheath reform renovations up by 25 %-units.
 
** Energy saving total: renovate 4 %/a, in addition increase the share of passive buildings up by 25 %-units since 2025, and add the share of sheath reform renovations up by 25 %-units.
* Plant policy: Choose an optimal selection of power plant infrastructure
+
** WWF energy saving: energy saving according to WWF energy saving plan published 8th October 2015. It is based on efficient energy saving actions on buildings and consequental possibility to reduce coal energy. The savings are based on increased energy renovations (2.5 % per year), more effective renovations in 10 % of renovation cases, and demolition of old buildings (1 % per year).<ref name="wwf">WWF. Helsingin energiapäätös. Energiansäästö on polttoainevaihtoehdoista paras. WWF, 8.10.2015 http://wwf.fi/mediabank/7784.pdf [http://wwf.fi/wwf-suomi/viestinta/uutiset-ja-tiedotteet/WWF--Hajautettu-malli-energiatehokkuuden-lisayksella-vahvistettuna-on-paras-ratkaisu-Helsingille-2584.a]</ref>
** BAU: Old plants remain as planned but Vuosaari C biofuel, Loviisa nuclear heat, and Neste oil refinery heat are not built.
+
* Plant policy: Choose an optimal selection of power plant infrastructure. These poicy options are the main focus of the assessment. There is a separate table describing these options.
** Biofuels and process heat: Old plants remain as planned. In addition, Vuosaari C biofuel, Loviisa nuclear heat, and Neste oil refinery heat are built.
 
 
 
{{defend|# |If you have ideas about options that should be modelled, please just contact us and we'll try and adjust the model accordingly.|--[[User:Jouni|Jouni]] ([[User talk:Jouni|talk]]) 08:54, 15 July 2015 (UTC)}}
 
  
 
=== Timing ===
 
=== Timing ===
  
The assessment started in May 2015. First draft results are expected before midsummer 2015. Final results should be available well before the City Council makes the decision in autumn, which means that results should exist by September 15th, 2015. There will be a public meeting to present the near-final results and discuss their implications. The meeting is held in THL, Helsinki on 31<sup>st</sup> August 2015 at noon.
+
The assessment started in May 2015. First draft results are expected before midsummer 2015. Final results should be available well before the City Council makes the decision in autumn, which means that results should exist by September 15th, 2015. There will be a public meeting to present the near-final results and discuss their implications. The meeting was held in THL, Helsinki on 11<sup>st</sup> September 2015 at noon. The final report was published on 27th October 2015.
  
 
== Answer ==
 
== Answer ==
 +
</noinclude>
  
Current results:
+
=== Model with user interface ===
* [http://en.opasnet.org/en-opwiki/index.php?title=Special:RTools&id=W9GaPYU04pdgLVtD Model run 9.9.2015] with old and new graphs. ''Custom'' option is the same as ''Cheapest'' in the preference analysis
 
* [http://en.opasnet.org/en-opwiki/index.php?title=Special:RTools&id=eSpi8FBqfKbl7NKD Model run 6.9.2015]
 
* [http://en.opasnet.org/en-opwiki/index.php?title=Special:RTools&id=E2jFkLL7QuCFQ0Tt Model run 5.9.2015]
 
* [http://en.opasnet.org/en-opwiki/index.php?title=Special:RTools&id=d3bp5VSYGCagxhWl Model run 4.9.2015] Cost calculations are up to profit including external costs.
 
* [http://en.opasnet.org/en-opwiki/index.php?title=Special:RTools&id=9PE7a4B1mBhUjlcR Model run 29.7.2015] Full run with lots of graphs.
 
  
* [http://en.opasnet.org/en-opwiki/index.php?title=Special:RTools&id=4klHVl14kKW0RqDF What happens if you shut down both fossil and biofuel plants?]
+
The final results results can be found from [http://en.opasnet.org/en-opwiki/index.php?title=Special:RTools&id=Z33GxBqiKH0MHC0B model run 1.11.2015] (token 144638929414). It is the final archived version in English. Objects were stored, so you can download the whole assessment to R in your own computer.
* [http://en.opasnet.org/en-opwiki/index.php?title=Special:RTools&id=lJf2oQkm1wjHOqtE What happens if you shut down coal and gas power plants?]
+
* [http://en.opasnet.org/en-opwiki/index.php?title=Special:RTools&id=3gnGOAq9MXJYpTz0 Model run 26.10.2015] graphs in Finnish [http://en.opasnet.org/en-opwiki/index.php?title=Special:RTools&id=pW8GFqqo6bPNkb6s 20.11.2015 additional graphs]
* [http://en.opasnet.org/en-opwiki/index.php?title=Special:RTools&id=9c3Otq1qJIO19qzx What happens if you shut down both coal-fired power plants?]
+
* Intermediate results are available at section [[#See also]].
  
<rcode name="answer" label="Run energy balance model" graphics=1 variables="
+
<rcode name="finalresults" label="Run energy balance model" graphics=1 store=0 variables="
 
name:noshutdown|description:Choose power plants you want to build (or keep running if they already exist) (the default selection is Helen's bio). This will become PlantPolicy: Custom.|type:checkbox|options:
 
name:noshutdown|description:Choose power plants you want to build (or keep running if they already exist) (the default selection is Helen's bio). This will become PlantPolicy: Custom.|type:checkbox|options:
 
'Biofuel heat plants';Biofuel heat plants;
 
'Biofuel heat plants';Biofuel heat plants;
Line 233: Line 246:
 
'Small gas heat plants';Small gas heat plants;
 
'Small gas heat plants';Small gas heat plants;
 
'Small fuel oil heat plants';Small fuel oil heat plants;
 
'Small fuel oil heat plants';Small fuel oil heat plants;
 +
'Small-scale wood burning';Small-scale wood burning;
 
'Vuosaari A';Vuosaari A;
 
'Vuosaari A';Vuosaari A;
 
'Vuosaari B';Vuosaari B;
 
'Vuosaari B';Vuosaari B;
'Vuosaari C biofuel';Vuosaari C biofuel|default:'Biofuel heat plants';'Household air conditioning';'Katri Vala cooling';'Katri Vala heat';'Kellosaari back-up plant';'Salmisaari A&B';'Small fuel oil heat plants';'Small gas heat plants';'Suvilahti power storage';'Suvilahti solar';'Vanhakaupunki museum';'Vuosaari A';'Vuosaari B';'Vuosaari C biofuel'|
+
'Vuosaari C biofuel';Vuosaari C biofuel|default:'Biofuel heat plants';'Household air conditioning';'Katri Vala cooling';'Katri Vala heat';'Kellosaari back-up plant';'Salmisaari A&B';'Small fuel oil heat plants';'Small gas heat plants';'Small-scale wood burning';'Suvilahti power storage';'Suvilahti solar';'Vanhakaupunki museum';'Vuosaari A';'Vuosaari B';'Vuosaari C biofuel'|
 
name:renovation|description:Choose power plants to be renovated (PlantPolicy: Custom)|type:checkbox|options:
 
name:renovation|description:Choose power plants to be renovated (PlantPolicy: Custom)|type:checkbox|options:
 
'Hanasaari';Hanasaari biofuel renovation
 
'Hanasaari';Hanasaari biofuel renovation
 
">
 
">
 
+
# This code is Op_en7237/finalresults on page [[Helsinki energy decision 2015]]
 
library(OpasnetUtils)
 
library(OpasnetUtils)
 
library(ggplot2)
 
library(ggplot2)
  
 
openv.setN(0) # use medians instead of whole sampled distributions
 
openv.setN(0) # use medians instead of whole sampled distributions
BS <- 24 # base_size for graph fonts
 
objects.latest("Op_en6007", code_name = "answer") # [[OpasnetUtils/Drafts]]
 
saveobjects <- TRUE
 
  
 
# Download all pre-calculated inputs, e.g. building stock.
 
# Download all pre-calculated inputs, e.g. building stock.
 
objects.latest("Op_en7237", code_name = "intermediates") # [[Helsinki energy decision 2015]]
 
objects.latest("Op_en7237", code_name = "intermediates") # [[Helsinki energy decision 2015]]
# Short version of health impact computation
+
objects.latest("Op_en6007", code_name = "answer") # [[OpasnetUtils/Drafts]] oggplot
 +
objects.latest("Op_en7392", code_name = "translate") # [[OpasnetUtils/Translate]] translate
 +
objects.latest("Op_en7392", code_name = "dictionary") # [[OpasnetUtils/Translate]] dictionary
 +
BSbase <- 24 # base_size for graph fonts. Use 12 if you use savefig to sav svg fils.
 +
BS <- BSbase
 +
saveobjects <- FALSE
 +
savefigs <- FALSE
 +
language <- "Finnish"
 +
fi <- language == "Finnish"
  
#plants <- union(as.character(unique(plantParameters@data$Plant)), as.character(unique(energyProcess@data$Plant)))
+
savefig <- function(
 +
fil,
 +
path = "N:/YMAL/Publications/2015/Helsingin energiapäätös/Kuvat/",
 +
sav = if(exists("savefigs")) savefigs else FALSE,
 +
type = "svg",
 +
height = 18,
 +
width = 24,
 +
units = "cm"
 +
) {
 +
if(sav) {
 +
ggsave(paste(path, fil, ".", type, sep = ""), height = height, width = width, units = units)
 +
}
 +
}
  
 
allplants <- c(
 
allplants <- c(
Line 336: Line 367:
 
)
 
)
 
))
 
))
 +
 +
EnergyNetworkDemand <- EvalOutput(EnergyNetworkDemand)
 +
 +
EnergyNetworkDemand@output <- rbind(
 +
EnergyNetworkDemand@output,
 +
data.frame(
 +
Time = rep(c(2025, 2035, 2045, 2055, 2065), each = 4),
 +
EnergySavingPolicy = rep(c("BAU", "Energy saving moderate", "Energy saving total", "WWF energy saving"), times = 5),
 +
Temperature = "(-18,-15]",
 +
EnergyConsumerDemandSource = "Formula",
 +
EnergyConsumerDemandTotalSource = "Formula",
 +
Fuel = "Cooling",
 +
fuelSharesSource = "Formula",
 +
EnergyNetworkDemandResult = 0,
 +
EnergyNetworkDemandSource = "Formula"
 +
)
 +
)
 +
 +
#cat("All energy taxes are assumed zero.\n")
 +
#objects.latest("Op_en4151", code_name = "fuelTax")
 +
#fuelTax <- EvalOutput(fuelTax)
 +
#result(fuelTax) <- 0
  
 
fuelUse <- EvalOutput(fuelUse)
 
fuelUse <- EvalOutput(fuelUse)
Line 380: Line 433:
 
############## POST_PROCESSING AND GRAPHS, VERSION FROM PERFERENCE ANALYSIS
 
############## POST_PROCESSING AND GRAPHS, VERSION FROM PERFERENCE ANALYSIS
  
cat("Total DALYs/a by different combinations of policy options.\n")
+
cat(translate("NOTE! In all graphs and tables, the Total energy saving policy is assumed unless otherwise noted\n"))
 +
cat(translate("Total DALYs/a by different combinations of policy options.\n"))
  
 
temp <- DALYs[as.character(DALYs$Time) %in% c("2015", "2035") & DALYs$Response == "Total mortality" , ]
 
temp <- DALYs[as.character(DALYs$Time) %in% c("2015", "2035") & DALYs$Response == "Total mortality" , ]
  
 
oprint(
 
oprint(
oapply(temp, INDEX = c("Time", "EnergySavingPolicy", "PlantPolicy"), FUN = sum),
+
translate(oapply(temp, INDEX = c("Time", "EnergySavingPolicy", "PlantPolicy"), FUN = sum)),
caption = "Table 1: Total DALYs/a by different combinations of policy options.",
+
caption = translate("Table 1: Total DALYs/a by different combinations of policy options."),
caption.placement = "top",
+
caption.placement = "top",
include.rownames = FALSE
+
include.rownames = FALSE
 
)
 
)
  
BS <- 14
+
bui <- oapply(buildings * 1E-6, cols = c("City_area", "buildingsSource"), FUN = sum)
 +
bui <- truncateIndex(bui, cols = "Heating", bins = 4)
  
eac <- EAC * -1
+
oggplot(bui[bui$EnergySavingPolicy == "BAU" , ], x = "Time", fill = "Heating", binwidth = 5) +
 +
labs(
 +
title = translate("Building stock in Helsinki by heating"),
 +
y = translate("Floor area (M m2)")
 +
)
  
oggplot(eac, x = "PlantPolicy", fill = "Cost", turnx = TRUE)+
+
savefig("Rakennuskannan koko Helsingissä")
facet_wrap(~ Plant, scale = "free_y") +
 
labs(title = "Incomes and costs by plant, total energy saving", y = "Effective annual cash flow (Meur/a)")
 
  
oggplot(eac, x = "PlantPolicy", fill = "Cost", turnx = TRUE)+
+
oggplot(bui, x = "Time", fill = "Efficiency", binwidth = 5) +  
facet_wrap(~ Plant)+
+
{if(fi) facet_wrap(~ Energiansäästöpolitiikka) else facet_wrap(~ EnergySavingPolicy)} +  
labs(title = "Incomes and costs by plant, total energy saving", y = "Effective annual cash flow (Meur/a)")
+
labs(
 +
title = translate("Building stock in Helsinki by efficiency policy"),
 +
y = translate("Floor area (M m2)")
 +
)
  
BS <- 24
+
oggplot(bui, x = "Time", fill = "Renovation", binwidth = 5) +
 +
{if(fi) facet_wrap(~ Energiansäästöpolitiikka) else facet_wrap(~ EnergySavingPolicy)} +
 +
labs(
 +
title = translate("Building stock in Helsinki by renovation policy"),
 +
y = translate("Floor area (M m2)")
 +
)
  
eb <-EnergyNetworkOptim[EnergyNetworkOptim$Process_variable_type == "Activity",]
+
oggplot(bui[bui$EnergySavingPolicy == "BAU" , ], x = "Time", fill = "Building", binwidth = 5) +
colnames(eb@output)[colnames(eb@output) == "Process_variable_name"] <- "Plant"
+
labs(
 +
title = translate("Building stock in Helsinki"),
 +
y = translate("Floor area (M m2)")
 +
)
 +
 
 +
oggplot(buildings, x = "Time", fill = "Efficiency", binwidth = 5)+
 +
{if(fi) facet_grid(Energiansäästöpolitiikka ~ Korjaukset) else facet_grid(EnergySavingPolicy ~ Renovation)} +
 +
labs(
 +
title = translate("Renovation of buildings by policy and efficiency"),
 +
y = translate("Floor area (M m2)")
 +
)
 +
 
 +
# Contains also other buildings than district heating and other energy than heating
 +
hea <- EnergyConsumerDemandTotal * temperdays * 24 * 1E-3 # MW -> GWh
 +
hea$Time <- as.numeric(as.character(hea$Time))
 +
 
 +
temp <- hea[hea$EnergySavingPolicy == "Energy saving total" & !hea$Consumable %in% c("District cooling", "Electric cooling") , ]
 +
oggplot(truncateIndex(temp, cols = "Temperature", bins = 7), x = "Time", fill = "Temperature", binwidth = 5) +
 +
{if(fi) facet_wrap(~ Hyödyke) else facet_wrap(~ Consumable)} +
 +
labs(
 +
title = translate("Energy consumption in all buildings"),
 +
y = translate("Total energy (GWh /a)")
 +
)
 +
 
 +
temp <- hea[!hea$Consumable %in% c("District cooling", "Electric cooling") , ]
 +
oggplot(temp, x = "Time", fill = "Consumable", binwidth = 5) +
 +
{if(fi) facet_wrap(~ Energiansäästöpolitiikka) else facet_wrap(~ EnergySavingPolicy)} +
 +
labs(
 +
title = translate("Energy consumption in all buildings"),
 +
y = translate("Total energy (GWh /a)")
 +
)
 +
 
 +
savefig("Helsingin vuotuinen energiantarve")
 +
 
 +
oggplot(hea, x = "Time", fill = "Consumable", binwidth = 5) +
 +
{if(fi) facet_wrap(~ Energiansäästöpolitiikka) else facet_wrap(~ EnergySavingPolicy)} +
 +
labs(
 +
title = translate("Energy consumption in all buildings"),
 +
y = translate("Total energy (GWh /a)")
 +
)
 +
 
 +
hea2 <- EnergyNetworkDemand * temperdays * 24 / 1000 # MW -> GWh
 +
hea2$Time <- as.numeric(as.character(hea2$Time))
 +
 
 +
oggplot(hea2, x = "Time", fill = "Fuel", binwidth = 5) +
 +
{if(fi) facet_wrap(~ Energiansäästöpolitiikka) else facet_wrap(~ EnergySavingPolicy)} +
 +
labs(
 +
title = translate("Energy demand in the network"),
 +
fill = translate("Consumable"),
 +
y = translate("Total energy (GWh /a)")
 +
)
 +
 
 +
savefig("Energiankulutus verkossa Helsingissä")
 +
 
 +
eb <-EnergyNetworkOptim[EnergyNetworkOptim$Process_variable_type == "Activity",]
 +
eb <- eb[eb$EnergySavingPolicy == "Energy saving total" , ]
 +
colnames(eb@output)[colnames(eb@output) == "Process_variable_name"] <- "Plant"
 
eb$Process_variable_type <- NULL
 
eb$Process_variable_type <- NULL
  
ebtemp <- eb[eb$Time %in% c("2035") & eb$PlantPolicy == "BAU" , ]
+
ebtemp <- eb[eb$Time %in% c("2035") & eb$PlantPolicy == "BAU" & eb$Temperature != "(-18,-15]" , ]
 
ebtemp <- truncateIndex(ebtemp, cols = "Plant", bins = 7)
 
ebtemp <- truncateIndex(ebtemp, cols = "Plant", bins = 7)
  
oggplot(ebtemp, x = "Temperature", fill = "Plant") +
+
oggplot(ebtemp, x = "Temperature", fill = "Plant", turnx = TRUE) +
 
labs(
 
labs(
title = "Power plant activity by temperature daily optim \nPlant policy = BAU, Year = 2035",
+
title = translate("Power plant activity by temperature daily optim \nPlant policy = BAU, Year = 2035"),
x = "Temperature of the day",
+
x = translate("Temperature of the day"),
y = "Power output daily average (MW)"
+
y = translate("Average daily activity (MW)")
 
)
 
)
  
ebtemp <- eb[eb$Time %in% c("2035") , ]
+
ebtemp <- eb[eb$Time %in% c("2035") & eb$Temperature != "(-18,-15]" , ]
 
ebtemp <- truncateIndex(ebtemp, cols = "Plant", bins = 10)
 
ebtemp <- truncateIndex(ebtemp, cols = "Plant", bins = 10)
oggplot(ebtemp, x = "Temperature", fill = "Plant") + facet_wrap(~ PlantPolicy)
+
oggplot(ebtemp, x = "Temperature", fill = "Plant", turnx = TRUE) +  
 +
{if(fi) facet_wrap(~ Voimalapolitiikka) else facet_wrap(~ PlantPolicy)} +
 
labs(
 
labs(
title = "Power plant activity by temperature daily optim \nmoderate energy saving in 2035",
+
title = translate("Power plant activity by temperature daily optim in 2035"),
x = "Temperature of the day",
+
x = translate("Temperature of the day"),
y = "Power plant activity daily average (MW)"
+
y = translate("Average daily activity (MW)")
 
)
 
)
 +
 +
savefig("Helsingin päivittäinen kaukolämpötase")
  
 
ebtemp <- eb[eb$Time %in% c("2005") & eb$PlantPolicy == "BAU" & eb$Temperature == "(0,3]" , ]
 
ebtemp <- eb[eb$Time %in% c("2005") & eb$PlantPolicy == "BAU" & eb$Temperature == "(0,3]" , ]
 
ebtemp <- truncateIndex(ebtemp, cols = "Plant", bins = 10)
 
ebtemp <- truncateIndex(ebtemp, cols = "Plant", bins = 10)
  
oggplot(ebtemp, x = "Plant", fill = "Plant") + facet_wrap( ~ Temperature) +
+
oggplot(ebtemp, x = "Plant", fill = "Plant", turnx = TRUE) +  
theme(axis.text.x = element_blank()) + # Turn text and adjust to right
+
{if(fi) facet_wrap(~ Lämpötila) else facet_wrap( ~ Temperature)} +
labs(
+
theme(axis.text.x = element_blank()) + # Turn text and adjust to right
title = "Power plant activity by temperature daily optim \nPlant policy = BAU, Year = 2005",
+
labs(
y = "Power output daily average (MW)"
+
title = translate("Power plant activity by temperature daily optim \nPlant policy = BAU, Year = 2005"),
)
+
y = translate("Average daily activity (MW)")
 +
)
  
 
fu <- fuelUse / 3.6E+6 # From MJ/a -> GWh/a
 
fu <- fuelUse / 3.6E+6 # From MJ/a -> GWh/a
 +
fu <- fu[fu$EnergySavingPolicy == "Energy saving total" , ]
 
fu$Burner <- NULL
 
fu$Burner <- NULL
 
fu$Time <- as.numeric(as.character(fu$Time))
 
fu$Time <- as.numeric(as.character(fu$Time))
Line 445: Line 571:
 
futemp <- truncateIndex(futemp, cols = "Plant", bins = 7) * -1
 
futemp <- truncateIndex(futemp, cols = "Plant", bins = 7) * -1
  
oggplot(futemp, x = "Fuel", fill = "Plant", turnx = TRUE) + facet_grid(Time ~ EnergySavingPolicy) +
+
oggplot(futemp, x = "Fuel", fill = "Plant", turnx = TRUE) +  
 +
{if(fi) facet_grid(Aika ~ Energiansäästöpolitiikka) else facet_grid(Time ~ EnergySavingPolicy)} +
 
labs(
 
labs(
title = "Energy commodity flows \n Plant policy = BAU",
+
title = translate("Energy commodity flows \n Plant policy = BAU"),
y = "Total annual energy (GWh/a)"
+
y = translate("Total annual energy (GWh/a)")
 
)
 
)
  
Line 455: Line 582:
  
 
oggplot(futemp, x = "Fuel", fill = "Plant", turnx = TRUE) +
 
oggplot(futemp, x = "Fuel", fill = "Plant", turnx = TRUE) +
labs(
+
labs(
title = "Energy commodity flows in 2015 \n Plant policy = BAU, Energy saving policy == total",
+
title = translate("Energy commodity flows in 2005 \n Plant policy = BAU"),
y = "Total annual energy (GWh/a)"
+
y = translate("Total annual energy (GWh/a)")
)
+
)
  
 
futemp <- fu[fu$Fuel %in% c("Heat") , ]
 
futemp <- fu[fu$Fuel %in% c("Heat") , ]
Line 464: Line 591:
  
 
oggplot(futemp,
 
oggplot(futemp,
x = "Time", fill = "Plant", binwidth = 5) + facet_wrap(~ PlantPolicy) +
+
x = "Time", fill = "Plant", binwidth = 5) +  
labs(
+
{if(fi) facet_wrap(~ Voimalapolitiikka) else facet_wrap(~ PlantPolicy)} +
title = "District heat flow",
+
labs(
y = "Total annual energy (GWh/a)"
+
title = translate("District heat flow"),
)
+
y = translate("Total annual energy (GWh/a)")
 +
)
  
futemp <- fu[fu$Fuel %in% c("Electricity") , ]
+
savefig("Helsingin vuotuinen kaukolämpötase")
futemp <- truncateIndex(futemp, cols = "Plant", bins = 10) * -1
 
  
oggplot(futemp, x = "Time", fill = "Plant", binwidth = 5) + facet_wrap(~ PlantPolicy) +
+
futemp <- fu[fu$Fuel %in% c("Electricity") & fu$Plant != "Kymijoki River's plants", ]
labs(
+
futemp <- truncateIndex(futemp, cols = "Plant", bins = 7) * -1
title = "Electricity flow",
+
 
y = "Total annual energy (GWh/a)"
+
# Does not contain plants outside Helsinki: Kymijoki River's plants, a share of Olkiluoto nuclear plant.
)
+
oggplot(futemp, x = "Time", fill = "Plant", binwidth = 5) +  
 +
{if(fi) facet_wrap(~ Voimalapolitiikka) else facet_wrap(~ PlantPolicy)} +
 +
labs(
 +
title = translate("Electricity flow"),
 +
y = translate("Total annual energy (GWh/a)")
 +
)
 +
 
 +
savefig("Helsingin vuotuinen sähkötase")
  
 
emis <- truncateIndex(emissions, cols = "Emission_site", bins = 5)
 
emis <- truncateIndex(emissions, cols = "Emission_site", bins = 5)
oggplot(emis, x = "Time", fill = "Fuel", binwidth = 5) + facet_grid(Pollutant ~ PlantPolicy, scale = "free_y") +
+
emis <- emis[emis$EnergySavingPolicy == "Energy saving total" & emis$Fuel != "Electricity" , ]
labs(
+
levels(emis$Fuel)[levels(emis$Fuel) == "Electricity_taxed"] <- "Electricity bought"
title = "Emissions from heating in Helsinki",
+
emis$Time <- as.numeric(as.character(emis$Time))
y = "Emissions (ton /a)"
+
oggplot(emis, x = "Time", fill = "Fuel", binwidth = 5) +  
)
+
{if(fi) facet_grid(Saaste ~ Voimalapolitiikka, scale = "free_y") else facet_grid(Pollutant ~ PlantPolicy, scale = "free_y")} +
 +
labs(
 +
title = translate("Emissions from heating in Helsinki"),
 +
y = translate("Emissions (ton /a)")
 +
) +
 +
scale_x_continuous(breaks = c(2000, 2050))
 +
 
 +
savefig("Helsingin energiantuotannon päästöt")
 +
 
 +
da <- DALYs[DALYs$EnergySavingPolicy == "Energy saving total" & DALYs$Fuel != "Electricity" , ]
 +
levels(da$Fuel)[levels(da$Fuel) == "Electricity_taxed"] <- "Electricity bought"
 +
da$Time <- as.numeric(as.character(da$Time))
 +
oggplot(da, x = "Time", fill = "Fuel", binwidth = 5) +
 +
{if(fi) facet_wrap(~ Voimalapolitiikka) else facet_wrap(~ PlantPolicy)} +
 +
labs(
 +
title = translate("Health effects of PM2.5 from heating in Helsinki"),
 +
y = translate("Health effects (DALY /a)")
 +
)
  
oggplot(DALYs, x = "Time", fill = "Fuel", binwidth = 5) + facet_wrap(~ PlantPolicy) +
+
savefig("Helsingin energiantuotannon terveysvaikutukset")
labs(
 
title = "Health effects in DALYs of PM2.5 from heating in Helsinki",
 
y = "Health effects (DALY /a)"
 
)
 
  
 
fp <- fuelPrice[fuelPrice$Fuel %in% c(
 
fp <- fuelPrice[fuelPrice$Fuel %in% c(
Line 505: Line 652:
 
levels(fp$Fuel)[levels(fp$Fuel) == "Electricity_taxed"] <- "Electricity"
 
levels(fp$Fuel)[levels(fp$Fuel) == "Electricity_taxed"] <- "Electricity"
  
ggplot(fp@output, aes(x = Time, y = fuelPriceResult, colour = Fuel, group = Fuel))+
+
ggplot(translate(fp@output), if(fi) {
 +
aes(x = Aika, y = fuelPriceResult, colour = Polttoaine, group = Polttoaine)
 +
} else {
 +
aes(x = Time, y = fuelPriceResult, colour = Fuel, group = Fuel)
 +
}) +
 
geom_line(size = 2)+theme_gray(base_size = BS) +
 
geom_line(size = 2)+theme_gray(base_size = BS) +
 
labs(
 
labs(
title = "Fuel prices (with tax)",
+
title = translate("Fuel prices (with tax)"),
y = "Price (Eur / MWh)"
+
y = translate("Price (Eur/MWh)")
 
)
 
)
  
tc <- truncateIndex(totalCost, cols = "Plant", bins = 11) / 10 # Yearly costs
+
savefig("Polttoaineiden verolliset hinnat")
 +
 
 +
tc <- truncateIndex(totalCost, cols = "Plant", bins = 11) / 10 * -1 # Yearly benefits (costs are negative)
 +
tc <- tc[tc$EnergySavingPolicy == "Energy saving total" , ]
  
oggplot(tc, x = "Time", fill = "Cost", binwidth = 10) + facet_wrap( ~ PlantPolicy) +
+
oggplot(tc, x = "Time", fill = "Cost", binwidth = 10) +  
 +
{if(fi) facet_wrap(~ Voimalapolitiikka) else facet_wrap( ~ PlantPolicy)} +
 
labs(
 
labs(
y = "Yearly costs (Meur)",
+
y = translate("Yearly cash flow (Meur)"),
title = "Total costs of energy production"
+
title = translate("Total benefits and costs of energy production")
)
+
)+
 +
scale_x_continuous(breaks = c(2000, 2020, 2040, 2060))
  
oggplot(tc, x = "Time", fill = "Plant", binwidth = 10) + facet_wrap( ~ PlantPolicy) +
+
savefig("Energiantuotannon kokonaiskustannus Helsingissä kustannuksittain")
 +
 
 +
oggplot(tc, x = "Time", fill = "Plant", binwidth = 10) +  
 +
{if(fi) facet_wrap(~ Voimalapolitiikka) else facet_wrap(~ PlantPolicy)} +
 
labs(
 
labs(
y = "Yearly costs (Meur)",
+
y = translate("Yearly cash flow (Meur)"),
title = "Total costs of energy production"
+
title = translate("Total benefits and costs of energy production")
)
+
)+
 +
scale_x_continuous(breaks = c(2000, 2020, 2040, 2060))
 +
 
 +
savefig("Energiantuotannon kokonaiskustannus Helsingissä voimaloittain")
 +
 
 +
eac <- EAC[EAC$EnergySavingPolicy == "Energy saving total" , ] * -1
  
eb <-EnergyNetworkOptim[EnergyNetworkOptim$Process_variable_type == "Activity",]
+
BS <- BSbase * 0.7 # Plot the next two graphs with smaller font because they are busy graphs.
colnames(eb@output)[colnames(eb@output) == "Process_variable_name"] <- "Plant"
 
eb$Process_variable_type <- NULL
 
  
ebtemp <- eb[eb$Time %in% c("2035") , ]
+
eac2 <- eac[!eac$Plant %in% c(
ebtemp <- truncateIndex(ebtemp, cols = "Plant", bins = 11)
+
'Household air conditioning',
 +
'Household solar',
 +
'Katri Vala cooling',
 +
'Kellosaari back-up plant',
 +
'Sea heat pump for cooling',
 +
'Small-scale wood burning',
 +
'Suvilahti power storage',
 +
'Suvilahti solar',
 +
'Vanhakaupunki museum',
 +
'Wind mills'
 +
) , ]
  
oggplot(ebtemp, x = "Temperature", fill = "Plant", turnx = TRUE) + facet_wrap(~ PlantPolicy) +
+
oggplot(eac2, x = "PlantPolicy", fill = "Cost", turnx = TRUE) +
 +
{if(fi) facet_wrap(~ Voimala, scale = "free_y") else facet_wrap(~ Plant, scale = "free_y")} +
 
labs(
 
labs(
title = "Power plant activity by temperature daily optim in 2035",
+
title = translate("Incomes and costs by plant"),  
x = "Temperature of the day",
+
y = translate("Effective annual cash flow (Meur/a)")
y = "Average daily activity (MW)"
 
 
)
 
)
  
eac <- truncateIndex(EAC * -1, cols = "Plant", bins = 11)
+
savefig("Helsingin voimalaitosten kustannustehokkuus")
  
oggplot(eac, x = "PlantPolicy", fill = "Plant", turnx = TRUE)+
+
oggplot(eac2, x = "PlantPolicy", fill = "Cost", turnx = TRUE)+
labs(title = "Incomes and costs by plant policy\ntotal energy saving", y = "Effective annual cash flow (Meur/a)")
+
{if(fi) facet_wrap(~ Voimala) else facet_wrap(~ Plant)} +
 +
labs(
 +
title = translate("Incomes and costs by plant"),
 +
y = translate("Effective annual cash flow (Meur/a)")
 +
)
 +
 
 +
savefig("Helsingin voimalaitosten kustannustehokkuus yhtenäisasteikolla")
 +
 
 +
BS <- BSbase
 +
eac <- truncateIndex(eac, cols = "Plant", bins = 11)
 +
 
 +
oggplot(eac, x = "PlantPolicy", fill = "Plant", turnx = TRUE)+
 +
labs(
 +
title = translate("Incomes and costs by plant policy"),  
 +
y = translate("Effective annual cash flow (Meur/a)")
 +
)
  
 
oggplot(eac, x = "PlantPolicy", fill = "Cost", turnx = TRUE)+
 
oggplot(eac, x = "PlantPolicy", fill = "Cost", turnx = TRUE)+
labs(title = "Incomes and costs by plant policy\ntotal energy saving", y = "Effective annual cash flow (Meur/a)")
+
labs(
 +
title = translate("Incomes and costs by plant policy"),  
 +
y = translate("Effective annual cash flow (Meur/a)")
 +
)
 +
 
 +
savefig("Teholliset tulot ja menot energiantuotannosta Helsingissä kustannuksittain")
  
 
temp <- truncateIndex(plantParameters[plantParameters$Parameter == "Max" , ], cols = "Plant", bins = 11)
 
temp <- truncateIndex(plantParameters[plantParameters$Parameter == "Max" , ], cols = "Plant", bins = 11)
 
temp <- temp[temp$Time >= 2000 & temp$Time <=2070 , ]
 
temp <- temp[temp$Time >= 2000 & temp$Time <=2070 , ]
oggplot(temp, x = "Time", fill = "Plant", binwidth = 1) + facet_wrap(~ PlantPolicy)+
+
oggplot(temp, x = "Time", fill = "Plant", binwidth = 1) +  
labs(title = "Energy production capacity by plant policy", y = "Maximum capacity (MW)")
+
{if(fi) facet_wrap(~ Voimalapolitiikka) else facet_wrap(~ PlantPolicy)} +
 +
labs(
 +
title = translate("Energy production capacity by plant policy"),  
 +
y = translate("Maximum capacity (MW)")
 +
)
  
####################### Post-processing and graphs ORIGINAL
+
savefig("Energiantuotantokapasiteetin kehitys Helsingissä")
  
cat("Total DALYs/a by different combinations of policy options.\n")
+
# odag() #Plots a directed acyclic graph of ovariables used in the model.
 +
# This causes an internal error, so it must be the last row of the model.
  
temp <- DALYs[as.character(DALYs$Time) %in% c("2015", "2035") & DALYs$Response == "Total mortality" , ]
+
</rcode>
 +
<noinclude>
  
oprint(
+
=== Results ===
oapply(temp, INDEX = c("Time", "EnergySavingPolicy", "PlantPolicy"), FUN = sum),
 
caption = "Table 1: Total DALYs/a by different combinations of policy options.",
 
caption.placement = "top",
 
include.rownames = FALSE
 
)
 
  
eb <-EnergyNetworkOptim[EnergyNetworkOptim$Process_variable_type == "Activity",]
+
<gallery widths=400px heights=400px>
colnames(eb@output)[colnames(eb@output) == "Process_variable_name"] <- "Plant"
+
File:Daily energy balance in Helsinki.png|Daily average production of district heat energy in the city of Helsinki depending on the outside temperature for energy saving total scenario and year 2035.
eb$Process_variable_type <- NULL
+
File:Yearly energy balance in Helsinki.png|Total annual expenditure and production of district heat energy in the city of Helsinki in 2035 after energy saving total policy.
 +
File:Building stock in Helsinki by heating.png|Current data and estimation of future building stock of Helsinki by heating type.
 +
File:Energy used in heating in Helsinki.png|Energy used in heating, consumer electricity, and hot water in Helsinki in the energy saving total policy.
 +
File:fuelprices.png|Fuel prices used in optimising.
 +
File:Energy production capacity in Helsinki.png|Energy production capacity in Helsinki by plant policy
 +
File:Incomes and costs of energy production in Helsinki.png|Incomes and costs of energy production in Helsinki by power plant. Note that the y axes are on different scales.
 +
File:Flow of electric power in Helsinki.png|Flow of electric power in Helsinki by plant policy. Many policies result in severe electricity demand from outside the city. This is possibly not a problem, but the decision maker should be aware of such side effect.
 +
File:District heat flow in Helsinki.png|Flow of district heat in Helsinki. The supply is always matched with the demand.
 +
File:Health effects of PM2.5 from heating in Helsinki.png|Health effects of PM2.5 from heating in Helsinki.
 +
File:Emissions from heating in Helsinki.png|Emissions of CO2 and PM2.5 from heating in Helsinki.
 +
</gallery>
  
ebtemp <- eb[eb$Time %in% c("2035") & eb$EnergySavingPolicy == "BAU" & eb$PlantPolicy == "BAU" , ]
+
=== Conclusions ===
ebtemp <- truncateIndex(ebtemp, cols = "Plant", bins = 7)
 
  
oggplot(ebtemp, x = "Temperature", fill = "Plant") +
+
See summary in the beginning.
labs(
+
</noinclude>
title = "Power plant activity by temperature daily optim \nPlant policy = BAU, Year = 2035",
 
x = "Temperature of the day",
 
y = "Power output daily average (MW)"
 
)
 
  
ebtemp <- eb[eb$Time %in% c("2035") & eb$EnergySavingPolicy == "Energy saving moderate" , ]
+
== Rationale ==
ebtemp <- truncateIndex(ebtemp, cols = "Plant", bins = 10)
+
[[image:Helsinki energy decision 2015.png|thumb|400px|Causal diagram for the assessment.]]
oggplot(ebtemp, x = "Temperature", fill = "Plant") + facet_wrap(~ PlantPolicy)
+
<noinclude>
labs(
 
title = "Power plant activity by temperature daily optim \nmoderate energy saving in 2035",
 
x = "Temperature of the day",
 
y = "Power plant activity daily average (MW)"
 
)
 
  
ebtemp <- eb[eb$Time %in% c("2005") & eb$EnergySavingPolicy == "BAU" & eb$PlantPolicy == "BAU" & eb$Temperature == "(0,3]" , ]
+
=== Stakeholders ===
ebtemp <- truncateIndex(ebtemp, cols = "Plant", bins = 10)
 
  
oggplot(ebtemp, x = "Plant", fill = "Plant") + facet_wrap( ~ Temperature) +
+
The impacts are assessed and valued from the point of view of the following stakeholders:
theme(axis.text.x = element_blank()) + # Turn text and adjust to right
+
* The city of Helsinki
labs(
+
* Helen Oy energy company
title = "Power plant activity by temperature daily optim \nPlant policy = BAU, Year = 2005",
+
* A citizen of Helsinki
y = "Power output daily average (MW)"
+
* Finland
)
+
* Global view
  
oggplot(plantParameters[plantParameters$Parameter == "Max" , ], x = "Time", fill = "Plant") + facet_wrap(~ PlantPolicy) +
+
=== Dependencies ===
labs(title = "Total energy production capacity", y = "Max capacity (MW)")
 
  
fu <- fuelUse / 3.6E+6 # From MJ/a -> GWh/a
+
;List of key pages used in model
fu$Burner <- NULL
+
* [[Helsinki energy decision 2015]]: Main page of assessment.
fu$Time <- as.numeric(as.character(fu$Time))
+
* [[Helsinki energy decision options 2015]]: More detailed information on the different options available.
 +
* [[Building model]]: Method of estimating the size of the building stock of a city, including heating properties and renovations.
 +
** [[Building stock in Helsinki]]: Data on the building stock in Helsinki and its projected future.
 +
* [[Energy use of buildings]]: Method of estimating energy need based on building stock and outdoor temperature.
 +
** [[Helsinki energy consumption]]: Data on the energy consumption of buildings.
 +
* [[Energy balance]]: Method of calculating energy balance.
 +
** [[Helsinki energy production]]: Data on the energy production in Helsinki.
 +
** [[Energy balance in Helsinki]]: Data on the amounts of energy produced, consumed, imported, and exported in Helsinki.
 +
* [[Emission factors for burning processes]]: Data on the emission factors for burning processes in Finland.
 +
* [[Prices of fuels in heat production]]: Data on market prices of fuels used in Helsinki
  
futemp <- fu[fu$Time %in% c("2015", "2035", "2065") & fu$PlantPolicy == "BAU" , ]
 
futemp <- truncateIndex(futemp, cols = "Plant", bins = 7) * -1
 
  
oggplot(futemp, x = "Fuel", fill = "Plant", turnx = TRUE) + facet_grid(Time ~ EnergySavingPolicy) +
+
;Other models used in the Helsinki assessment (but are not in the core of this assessment)
labs(
+
* [[Burden of disease in Finland]]: Data on disease burden.
title = "Energy commodity flows \n Plant policy = BAU",
+
* [[Exposure-response function]]: Description of ERF, a mathematical construct used to describe a probability of different responses to a given exposure.
y = "Total annual energy (GWh/a)"
+
* [[Health impact assessment]]: Method of estimating the health impacts of a particular event or policy.
)
+
** [[ERFs of environmental pollutants]]: Data on the exposure-response function of several environmental pollutants that do not have their own pages.
 +
** [[Exposures in Finland]]: Data on the typical exposure levels of common pollutants in Finland.
 +
** [[Disease risk]]: Data on the incidence or prevalence rates of different diseases in Finland.
 +
** [[Population attributable fraction]]: Method of calculating the fraction of disease that would disappear if the exposure to that agent would disappear.
 +
* [[Population of Helsinki metropolitan area]]: Data on the total population of Helsinki metropolitan area.
 +
* [[Intake fractions of PM]]: Data on the intake fractions of airborne particulate matter for different emission sources and locations.
 +
* [[Exposure to PM2.5 in Finland]]: Method of estimating exposure to fine particles (PM2.5) in the Finnish population.
 +
* [[Emission assessment of small-scale energy production in the Helsinki metropolitan area]]: Assessment evaluating the greenhouse gas emissions and emission trading costs of small-scale (output less than 50 MW) energy production in the Helsinki metropolitan area.
 +
* [[OpasnetUtils/Drafts]]
  
#oggplot(fu, x = "Time", fill = "Plant", binwidth = 10)+facet_grid(PlantPolicy ~ EnergySavingPolicy)
 
#oggplot(fu, x = "Time", fill = "Fuel")+facet_grid(PlantPolicy ~ EnergySavingPolicy)
 
  
futemp <- fu[fu$Time %in% c("2005") & fu$PlantPolicy == "BAU" & fu$EnergySavingPolicy == "BAU" , ]
+
{| {{prettytable}} class="wikitable collapsible collapsed"
futemp <- truncateIndex(futemp, cols = "Plant", bins = 7) * -1
+
|+'''Variables in the assessment model
 
+
! Variable || Measure || Indices
oggplot(futemp, x = "Fuel", fill = "Plant", turnx = TRUE) +
+
|----
labs(
+
| colspan="3"| buildings (from the [[Building model]])
title = "Energy commodity flows in 2015 \n Plant policy = BAU, Energy saving policy == BAU",
+
|----
y = "Total annual energy (GWh/a)"
+
| stockBuildings [[Building stock in Helsinki#Building stock|From statistics]] [http://en.opasnet.org/w/Special:Opasnet_Base?id=op_en7115.stock_details data in OB]
)
+
| Building stock in floor-m2 at given timepoints: Stock details in Opasnet Base
 
+
| Time (Valmistusmisaika), City_area (Sijainti), Building (Käyttötarkoitus), Heating (Lämmitystapa, Polttoaine), Efficiency (Varusteena koneellinen ilmanvaihto, Perusparannus)
futemp <- fu[fu$Fuel %in% c("Heat") , ]
+
|----
futemp <- truncateIndex(futemp, cols = "Plant", bins = 10) * -1
+
| heatingShares = 1 [[Building stock in Helsinki]]
 
+
| Fractions of heating types. Should sum up to 1 within each group defined by optional indices. Data is already in stockBuildings, so we use 1 here.
oggplot(futemp, x = "Time", fill = "Plant", binwidth = 5) + facet_grid(EnergySavingPolicy ~ PlantPolicy) +
+
| Heating, Time, Building
labs(
+
|----
title = "District heat flow",
+
| efficiencyShares [[Energy use of buildings#Energy efficiency in heating|Energy efficiency of new buildings in the future]]. [http://en.opasnet.org/w/Special:Opasnet_Base?id=op_en5488.energy_efficiency_of_new_buildings_in_the_future OpasnetBase]
y = "Total annual energy (GWh/a)"
+
| Fraction of energy efficiency types of new buildings in the future. Should sum up to 1 for each group defined by other indices. Fractions of heating and energy efficiency: from Facta data and [https://www.energiatodistusrekisteri.fi/public_html?command=browse&s=todistushaku_section Energiatodistusrekisteri] This can be used to derive energy classes and the U values for buildings in Helsinki.
)
+
| Efficiency, Time, Building.
 
+
|----
oggplot(futemp[futemp$EnergySavingPolicy == "Energy saving moderate" , ],
+
| changeBuildings = stockBuildings * 0.02 /a
x = "Time", fill = "Plant", binwidth = 5) + facet_wrap(~ PlantPolicy) +
+
| Construction or demolition rate as floor-m2 at given timepoints. Implemented in code.
labs(
+
| Time, Efficiency, Heating. changeBuildings should have all indices in stockBuildings, heatingShares, and efficiencyShares.
title = "District heat flow",
+
|----
y = "Total annual energy (GWh/a)"
+
| renovationShares [[Building stock in Helsinki#Renovations|Guesstimate]] [http://en.opasnet.org/w/Special:Opasnet_Base?id=op_en7115.popularity_of_renovation_types data in OB]
)
+
| Fraction of renovation types when renovation is done. Should sum to 1 for each group defined by other indices.
 
+
| Renovation, Startyear. Startyear is the time when the renovation is done, and it must be different than the Time index.
futemp <- fu[fu$Fuel %in% c("Electricity") & fu$EnergySavingPolicy == "Energy saving moderate" , ]
+
|----
futemp <- truncateIndex(futemp, cols = "Plant", bins = 10) * -1
+
| renovationRate [[Building stock in Helsinki#Renovations|Guesstimate]] [http://en.opasnet.org/w/Special:Opasnet_Base?id=op_en7115.fraction_of_houses_renovated_per_year data in OB]
 
+
| Rate of renovation (fraction per time unit).
oggplot(futemp, x = "Time", fill = "Plant", binwidth = 5) + facet_wrap(~ PlantPolicy) +
+
| Age (the time difference between construction and renovation, i.e. Startyear - Time for each building).
labs(
+
|----
title = "Electricity flow",
+
| obstime Ten-year intervals 1980 - 2060.
y = "Total annual energy (GWh/a)"
+
| one-column data.frame about the years to be used in output.
)
+
| Startyear
 
+
|----
#futemp <- fu[fu$Fuel %in% c("Cooling") , ]
+
| heating_before = FALSE
#futemp <- truncateIndex(futemp, cols = "Plant", bins = 10) * -1
+
| If TRUE, heatingShares contains data and is added to buildings before obstime.
 
+
|
#oggplot(futemp, x = "Time", fill = "Plant", binwidth = 5) + #facet_grid(EnergySavingPolicy ~ PlantPolicy) +
+
|----
# labs(
+
| efficiency_before = TRUE
# title = "Cooling flow",
+
| If TRUE, efficiencyShares contains data and is added to buildings before obstime.
# y = "Total annual energy (GWh/a)"
+
|
# )
+
|----
 
+
|colspan="3"| heatingEnergy: Energy consumption from the [[Building model]] {{defend|# |Move code to [[Heating consumption of buildings]]|--[[User:Jouni|Jouni]] ([[User talk:Jouni|talk]]) 03:48, 9 June 2015 (UTC)}}
emis <- truncateIndex(emissions, cols = "Emission_site", bins = 5)
+
|----
emis <- emis[emis$EnergySavingPolicy == "BAU" , ]
+
| energyUse [[Energy use of buildings#Baseline energy consumption|Baseline energy consumption]] [http://en.opasnet.org/w/Special:Opasnet_Base?id=op_en5488.baseline_energy_consumption_per_area_unit] {{defend|# |Update this to use U values and ambient temperatures.|--[[User:Jouni|Jouni]] ([[User talk:Jouni|talk]]) 12:22, 24 May 2015 (UTC)}} Also use [[Building stock in Helsinki]], Table 6.
oggplot(emis, x = "Time", fill = "Fuel", binwidth = 5) + facet_grid(Pollutant ~ PlantPolicy, scale = "free_y") +
+
| Energy consumption per floor area (kWh / m2 /a) (U: W/m2/K * T: K * Area: m2)
labs(
+
| Building, Heating.
title = "Emissions from heating in Helsinki",
+
|----
x = "Time (Energy saving policy = BAU)",
+
| efficiencyRatio  [[Energy use of buildings#Energy efficiency in heating]]) [http://en.opasnet.org/w/Special:Opasnet_Base?id=op_en5488.energy_use_by_energy_class_of_building Opasnet Base]
y = "Emissions (ton /a)"
+
| Relative energy consumption compared with the efficiency group Old.
)
+
| Efficiency.
 
+
|----
oggplot(DALYs, x = "Time", fill = "Fuel", binwidth = 5) + facet_grid(EnergySavingPolicy ~ PlantPolicy) +
+
| renovationRatio [[Energy use of buildings#Impact of renovations|Impact of renovations]] [http://en.opasnet.org/w/Special:Opasnet_Base?id=op_en5488.energy_saving_potential_of_different_renovations Opasnet Base]
labs(
+
| Relative energy consumption compared with the Renovation location None.
title = "Health effects in DALYs of PM2.5 from heating in Helsinki",
+
| Renovation.
y = "Health effects (DALY /a)"
+
|----
)
+
|colspan="3"| energyBalance [[Energy balance in Helsinki]]
 
+
|----
fp <- fuelPrice[fuelPrice$Fuel %in% c(
+
| heatingEnergy (see above)
"Biofuel",
+
|
"Coal",
+
|
"Electricity_taxed",
+
|----
"Fuel oil",
+
| consumerElectricity: from [[Energy use of buildings#Baseline energy consumption|Baseline energy consumption]] [http://en.opasnet.org/w/Special:Opasnet_Base?id=op_en5488.baseline_energy_consumption_per_area_unit Opasnet Base] based on floor area
"Heat",
+
| Amount of consumer electricity use (MW) calculated based on either amount of people or floor-m2
"Light oil",
+
| Hour (time of day), others?
"Natural gas",
+
|----
"Peat"
+
| otherEnergy [[Helsinki energy consumption]]
) , ]
+
| Other energy consumption (industry, transport, other): from statistics of Helsinki [http://www.helsinginymparistotilasto.fi/ Helsingin ympäristötilasto]. [[Thermal energy need in Helsinki Metropolitan Area]]
fp$Time <- as.numeric(as.character(fp$Time))
+
| Time
levels(fp$Fuel)[levels(fp$Fuel) == "Electricity_taxed"] <- "Electricity"
+
|----
 
+
| windElectricity Check <ref name="professors"/> about possibilities and Wind pattern [http://www.tuuliatlas.fi/fi/index.html Tuuliatlas] about useful wind mill sites in Helsinki.
ggplot(fp@output, aes(x = Time, y = fuelPriceResult, colour = Fuel, group = Fuel))+
+
| Amount of wind power produced (MW) by wind type. We also need amounts of hours with different wind patterns per year.
geom_line(size = 2)+theme_gray(base_size = BS) +
+
| Hour (do we need this, is wind power production dependent on time of day?), Weather (temperature and weather types), maybe Wind (Windy, Normal, Calm)
labs(
+
|----
title = "Fuel prices (with tax)",
+
| solarElectricity
y = "Price (Eur / MWh)"
+
| Amount of solar energy produced (MW) in certain conditions. Data source?
)
+
| Hour, Month, Weather, maybe Sun (Sunny, Cloudy, Dark) {{comment|# |Have to decide which of these is used.|--[[User:Jouni|Jouni]] ([[User talk:Jouni|talk]]) 17:27, 24 May 2015 (UTC)}}
 
+
|----
tc <- truncateIndex(totalCost[totalCost$EnergySavingPolicy == "Energy saving moderate" , ], cols = "Plant", bins = 10) / 10 # Yearly costs
+
| airpumpHeat
 
+
| This means air-driven heat pumps installed in individual homes and run based on ambient temperature. The efficiency of air heat pump reduces with very cold weather. We assume that the heat pump will be used for cooling as well, if it is installed. (We assume that cooling is not used in apartments without heat pump; cooling is otherwise only used in offices etc).
oggplot(tc, x = "Time", fill = "Cost", binwidth = 10) + facet_wrap( ~ PlantPolicy) +
+
| Weather, Hour, maybe Temperature. {{comment|# |Should we have index for day/night so that daily storage of heat/cool can be assessed?|--[[User:Jouni|Jouni]] ([[User talk:Jouni|talk]]) 17:27, 24 May 2015 (UTC)}}
labs(
+
|----
y = "Yearly costs (Meur)",
+
| energyProduction [[Helsinki energy production]]
title = "Total costs of energy production"
+
| Energy production based on need: basically, we need to know a) what power plants exist, b) what fuels they use and what (heat, power or both) they produce, c) what emissions they produce, d) what is their maximum capacity, e) at what demand level are they turned on.
)
+
* [[District heating production units in Helsinki metropolitan area]]
 
+
* Geothermal heat pumps: this means both individual geothermal heat pumps and district heat pumps for heating and cooling, such as the one in Katri Vala's park. Its efficiency is not reduced with very cold weather. See [https://www.helen.fi/en/households/services/district-cooling/ District cooling by Helen], [[:en:Absorption refrigerator]], [[:en:District cooling]].
oggplot(tc, x = "Time", fill = "Plant", binwidth = 10) + facet_grid(~ PlantPolicy) +
+
|
labs(
+
|----
y = "Yearly costs (Meur)",
+
| colspan="3"| emissions (from the model) (emissions in mass per time) Emissions of energy production (ton/a). [[Emission assessment of small-scale energy production in the Helsinki metropolitan area]]
title = "Total costs of energy production"
+
|----
)
+
| energyBalance (from the model; see above)
 
+
|
pr <- oapply(totalCost[totalCost$EnergySavingPolicy == "Energy saving moderate" , ], cols = c("Cost"), FUN = sum) / -10 # Values per year
+
|
oggplot(pr, x = "Time", fill = "Plant", binwidth = 10)+facet_wrap(~ PlantPolicy)+
+
|----
labs(title = "Total costs with moderate energy saving", y = "Cost Meur")
+
| fuelShares [[Energy balance in Helsinki]]<ref name="judl">Jáchym Judl, Sirkka Koskela, Timo Korpela, Niko Karvosenoja, Anna Häyrinen, Jari Rantsi. Net environmental impacts of low-share wood pellet co-combustion in an existing coal-fired CHP (combined heat and power) production in Helsinki, Finland. Energy 77 (2014) 844-851. {{doi|10.1016/j.energy.2014.09.068}}</ref>
 
+
| Tells how much of fuel is used for a certain neating energy need. {{comment|# |Should this be on page [[Energy balance in Helsinki]] or, like in Kuopio and Basel, a separate table?|--[[User:Jouni|Jouni]] ([[User talk:Jouni|talk]]) 17:27, 24 May 2015 (UTC)}}
oggplot(truncateIndex(EAC, cols = "Plant", bins = 10), x = "PlantPolicy", fill = "Cost")
+
{{comment|# | Use shares of different fuels. Currently this data is on page [[Emission factors for burning processes]] Table Fuel use in different heating types. However, this is clearly case-specific data and should be on a case-specific page. This should be done retrospectively to Kuopio and Basel as well.|--[[User:Jouni|Jouni]] ([[User talk:Jouni|talk]]) 12:22, 24 May 2015 (UTC)}}
BS <- 14
+
| Fuel_type.
oggplot(EAC[EAC$PlantPolicy == "BAU" , ], x = "EnergySavingPolicy", fill = "Cost")+facet_wrap(~ Plant, scale = "free_y")
+
|----
oggplot(EAC[EAC$EnergySavingPolicy == "Energy saving moderate" , ], x = "PlantPolicy", fill = "Cost", turnx = TRUE)+
+
| emissionFactors [[Emission factors for burning processes]]
facet_wrap(~ Plant, scale = "free_y") +
+
| emissions per unit of energy produced (g / J or similar unit) <ref>[http://www.doria.fi/bitstream/handle/10024/94404/isbn9789522655578.pdf?sequence=2 Sanni Väisänen]: Greenhouse gas emissions from peat and biomass-derived fuels, electricity and heat — Estimation of various production chains by using LCA methodology</ref>
labs(title = "Costs and incomes by plant\nmoderate energy saving", y = "Cash flow (Meur)")
+
| Exposure_agent,  Emission_height.
 
+
|----
oggplot(EAC[EAC$EnergySavingPolicy == "Energy saving moderate" , ], x = "PlantPolicy", fill = "Cost")+facet_wrap(~ Plant)+
+
| colspan="3"|exposure is in ug/m3 in ambient air average concentration. [[Exposure to PM2.5 in Finland]]  
facet_wrap(~ Plant, scale = "free_y") +
+
|----
labs(title = "Costs and incomes by plant\nmoderate energy saving", y = "Cash flow (Meur)")
+
| emissions
 
+
| (from the model; see above) is in ton /a
oggplot(plantParameters[plantParameters$Parameter == "Max" , ], x = "Time", fill = "Plant", binwidth = 10) + facet_grid(PlantPolicy ~ .)+
+
| Time, City_area, Exposure_agent, Emission_height.
labs(title = "Energy production capacity by plant policy", y = "Maximum capacity (MW)")
+
|----
 
+
| iF (generic data but depends on population density, emission height etc) [[Intake fractions of PM]].
</rcode>
+
| conc (g /m3) * pop (#) * BR (m3 /s) / emis (g /s) <=> conc = emis * iF / BR / pop # conc is the exposure
 
+
{{attack|# |This is NOT the right page, but there are some pages such as [[Exposure to PM2.5 in Finland]] that should be merged. |--[[User:Jouni|Jouni]] ([[User talk:Jouni|talk]]) 15:45, 17 May 2015 (UTC)}} {{attack|# |Rather use iFs based on Piltti?|--[[User:Jouni|Jouni]] ([[User talk:Jouni|talk]]) 12:22, 24 May 2015 (UTC)}}
=== Results ===
+
** Fate and dispersion: is embedded in intake fractions and is not separately needed. Rename?
 
+
** Time use and activity: not explicitly needed? Remove? With transport it would make a difference.
<gallery widths=400px heights=400px>
+
| Emission_height, Pollutant, Area
File:Daily energy balance in Helsinki.png|Daily average production of energy in the city of Helsinki depending on the outside temperature for business-as-usual (BAU) scenario and year 2035.
+
|----
File:Yearly energy balance in Helsinki.png|Total annual expenditure and production of energy in the city of Helsinki in years 2015, 2035 and 2065 depending on the energy policy adopted.
+
| population [[Population of Helsinki metropolitan area]]
File:Building stock in Helsinki by heating.png|Current data and estimation of future building stock of Helsinki by heating type.
+
| Amount of population exposed. Data from Statistics Finland?
File:Energy used in heating in Helsinki.png|Energy used in heating in Helsinki by energy saving policy and different energy renovations that are done to buildings older than 30 a.
+
| Time, Area, Age, Sex
</gallery>
+
|----
 
+
| ambientTemperature: [[Weather in Helsinki]] (also contains solar radiation and wind patterns)
[[File:fuelprices.png|600px]]
+
| Ambient temperatures. {{comment|# |We actually need hourly temperatures. How do we manage this in the model? Temperatures should match indices Sun, Wind, Hour, and Month.|--[[User:Jouni|Jouni]] ([[User talk:Jouni|talk]]) 17:27, 24 May 2015 (UTC)}}
 
+
|
Development of prices of power plant fuels over time.
+
|----
 
+
|colspan="3"| [[Health impact assessment]]
=== Conclusions ===
+
|----
 
+
| exposure (see above)
== Rationale ==
+
|
[[image:Helsinki energy decision 2015.png|thumb|400px|Causal diagram for the assessment.]]
+
|
 
+
|----
=== Stakeholders ===
+
| [[Disease risk]]
 
+
| Incidences of diseases of interest. {{comment|# |What if prevalence values would be more useful?|--[[User:Jouni|Jouni]] ([[User talk:Jouni|talk]]) 17:27, 24 May 2015 (UTC)}}
The impacts are assessed and valued from the point of view of the following stakeholders:
+
| Age, Sex, Response
* The city of Helsinki
+
|----
* Helen Oy energy company
+
| ERF [[Exposure-response function]]
* A citizen of Helsinki
+
| Exposure-response functions of all relevant exposure agents
* Finland
+
|
* Global view
+
|----
 
+
| [[Burden of disease in Finland]]
=== Dependencies ===
+
|
 
+
|
;List of key pages used in model
+
|----
* [[Helsinki energy decision 2015]]: Main page of assessment.
+
| Other human health effects, indoor environment, and well-being is not probably handled here? Remove or keep as an important placeholder?
* [[Helsinki energy decision options 2015]]: More detailed information on the different options available.
+
|
* [[Building model]]: Method of estimating the size of the building stock of a city, including heating properties and renovations.
+
|
** [[Building stock in Helsinki]]: Data on the building stock in Helsinki and its projected future.
+
|----
* [[Energy use of buildings]]: Method of estimating energy need based on building stock and outdoor temperature.
+
| Costs: Where do we get this? From Vuosaari YVA? From <ref name="professors"/>?
** [[Helsinki energy consumption]]: Data on the energy consumption of buildings.
+
| Costs of activities (energy production mainly) but also health impacts.
* [[Energy balance]]: Method of calculating energy balance.
+
| Time
** [[Helsinki energy production]]: Data on the energy production in Helsinki.
+
|}
** [[Energy balance in Helsinki]]: Data on the amounts of energy produced, consumed, imported, and exported in Helsinki.
 
* [[Emission factors for burning processes]]: Data on the emission factors for burning processes in Finland.
 
* [[Prices of fuels in heat production]]: Data on market prices of fuels used in Helsinki
 
  
 +
=== Analyses ===
  
;Other models used in the Helsinki assessment (but are not in the core of this assessment)
+
* Cost-benefit analysis of different options. Costs considered: capital and operational costs of energy production, climate costs (CO2e emissions converted to euros), health (DALYs converted to euros).
* [[Burden of disease in Finland]]: Data on disease burden.
+
* Total capacity availability and feasibility (applies especially to decentralised option).
* [[Exposure-response function]]: Description of ERF, a mathematical construct used to describe a probability of different responses to a given exposure.
+
* Temporal heat and power demand and supply (hourly resolution).
* [[Health impact assessment]]: Method of estimating the health impacts of a particular event or policy.
 
** [[ERFs of environmental pollutants]]: Data on the exposure-response function of several environmental pollutants that do not have their own pages.
 
** [[Exposures in Finland]]: Data on the typical exposure levels of common pollutants in Finland.
 
** [[Disease risk]]: Data on the incidence or prevalence rates of different diseases in Finland.
 
** [[Population attributable fraction]]: Method of calculating the fraction of disease that would disappear if the exposure to that agent would disappear.
 
* [[Population of Helsinki metropolitan area]]: Data on the total population of Helsinki metropolitan area.
 
* [[Intake fractions of PM]]: Data on the intake fractions of airborne particulate matter for different emission sources and locations.
 
* [[Exposure to PM2.5 in Finland]]: Method of estimating exposure to fine particles (PM2.5) in the Finnish population.
 
* [[Emission assessment of small-scale energy production in the Helsinki metropolitan area]]: Assessment evaluating the greenhouse gas emissions and emission trading costs of small-scale (output less than 50 MW) energy production in the Helsinki metropolitan area.
 
* [[OpasnetUtils/Drafts]]
 
  
 +
=== Indices ===
  
{| {{prettytable}} class="wikitable collapsible collapsed"
+
* Temporal:  Time (5-year observation periods)
|+'''Variables in the assessment model
+
* Temperature (3-degree-Celsius intervals for ambient daily average temperatures. It is assumed that heating is not needed above 17 C and cooling is not needed below 24 C. Hot water need is independent of ambient temperature.
! Variable || Measure || Indices
+
* Decisions: EnergySavingPolicy contains options that reduce the energy need of the building stock and other consumption. PlantPolicy contains options about which energy plants to build (or demolish).
|----
+
* Stakeholder (Citizen, City, Helen, Finland)
| colspan="3"| buildings (from the [[Building model]])
+
* Spatial: City area (summed up after energy need)
|----
+
* Health: Response (any disease that is linked to Exposure agents emitted)
| stockBuildings [[Building stock in Helsinki#Building stock|From statistics]] [http://en.opasnet.org/w/Special:Opasnet_Base?id=op_en7115.stock_details data in OB]
+
* Emission, exposure: Pollutant or Exposure agent (any agent that is emitted by energy production)
| Building stock in floor-m2 at given timepoints: Stock details in Opasnet Base
+
* Energy production: Burner (type of burner used in the facility where energy is produced), Fuel (type of fuel used in energy production), Heating (type of heating in the building).
| Time (Valmistusmisaika), City_area (Sijainti), Building (Käyttötarkoitus), Heating (Lämmitystapa, Polttoaine), Efficiency (Varusteena koneellinen ilmanvaihto, Perusparannus)
+
* Buildings: Building [use type], Heating, Constructed, City area, Renovation, Efficiency.
|----
+
</noinclude>
| heatingShares = 1 [[Building stock in Helsinki]]
+
 
| Fractions of heating types. Should sum up to 1 within each group defined by optional indices. Data is already in stockBuildings, so we use 1 here.
+
=== Case-specific ovariables ===
| Heating, Time, Building
+
 
|----
+
Name is the name of ovariable that has case-specific rather than default content. Ident is the indentifier of the code that defines the case-specific ovariable. Token is the same as Ident but it uses a specific version of the code rather than the newest version. Latest is the code for an ovariable whose dependencies will be changed, i.e. who has the case-specific ovariable as parent. Get is the same as Latest but a specific version rather than the newest version is fetched.
| efficiencyShares [[Energy use of buildings#Energy efficiency in heating|Energy efficiency of new buildings in the future]]. [http://en.opasnet.org/w/Special:Opasnet_Base?id=op_en5488.energy_efficiency_of_new_buildings_in_the_future OpasnetBase]
+
 
| Fraction of energy efficiency types of new buildings in the future. Should sum up to 1 for each group defined by other indices. Fractions of heating and energy efficiency: from Facta data and [https://www.energiatodistusrekisteri.fi/public_html?command=browse&s=todistushaku_section Energiatodistusrekisteri] This can be used to derive energy classes and the U values for buildings in Helsinki.
+
<t2b name="Case-specific ovariables" index="Name,Ident,Token,Latest,Get" obs="Description" unit="-">
| Efficiency, Time, Building.
+
buildings|Op_en6289/buildingstest||Op_en5488/EnergyConsumerDemand||[[Building model]] buildings # Generic building model
|----
+
changeBuildings|Op_en7115/changeBuildings||Op_en6289/buildingstest||
| changeBuildings = stockBuildings * 0.02 /a
+
demolitionRate|Op_en7115/demolitionRate||Op_en6289/buildingstest||
| Construction or demolition rate as floor-m2 at given timepoints. Implemented in code.
+
efficiencyShares|Op_en5488/efficiencyShares||Op_en6289/buildingstest||
| Time, Efficiency, Heating. changeBuildings should have all indices in stockBuildings, heatingShares, and efficiencyShares.
+
emissionLocations|Op_en7311/emissionLocationsPerPlant||Op_en2791/emissionstest||[[Helsinki energy production]] emissionLocations, used by[[Emission factors for burning processes]] emissions
|----
+
energyProcess|Op_en7311/energyProcess||Op_en5141/EnergyNetworkOptim||[[Helsinki energy production]] energyProcess, used by [[Energy balance]] EnergyConsumerDemandTotal
| renovationShares [[Building stock in Helsinki#Renovations|Guesstimate]] [http://en.opasnet.org/w/Special:Opasnet_Base?id=op_en7115.popularity_of_renovation_types data in OB]
+
exposure|Op_en5813/exposure|||| [[Intake fractions of PM]] exposure # uses Humbert iF as default.
| Fraction of renovation types when renovation is done. Should sum to 1 for each group defined by other indices.
+
fuelShares|Op_en7311/fuelShares||Op_en2791/emissionFactors||[[Helsinki energy production]] fuelShares, used by ([[Emission factors for burning processes]] emissionFactors?)
| Renovation, Startyear. Startyear is the time when the renovation is done, and it must be different than the Time index.
+
plantParameters|Op_en7311/plantParameters||Op_en3283/totalCost||[[Helsinki energy production]] plantParameters, used by [[Economic impacts]] plantCost
|----
+
renovationRate|Op_en7115/renovationRate||Op_en6289/buildingstest||[[Building stock in Helsinki]] renovationRate
| renovationRate [[Building stock in Helsinki#Renovations|Guesstimate]] [http://en.opasnet.org/w/Special:Opasnet_Base?id=op_en7115.fraction_of_houses_renovated_per_year data in OB]
+
|||Op_en7115/renovationRate||[[Building stock in Helsinki]] renovationRate case-specific adjustment in formula
| Rate of renovation (fraction per time unit).
+
renovationShares|Op_en7115/renovationShares||Op_en6289/buildingstest||
| Age (the time difference between construction and renovation, i.e. Startyear - Time for each building).
+
stockBuildings|Op_en7115/stockBuildings||Op_en6289/buildingstest||
|----
+
temperatures|Op_en2959/temperatures||Op_en5488/EnergyConsumerDemand|| [[Outdoor air temperature in Finland]], used by [[Energy use of buildings]] EnergyConsumerDemand
| obstime Ten-year intervals 1980 - 2060.
+
temperdays|Op_en2959/temperatures||Op_en5488/EnergyConsumerDemand|| [[Outdoor air temperature in Finland]]
| one-column data.frame about the years to be used in output.
+
</t2b>
| Startyear
+
 
|----
+
=== Calculations ===
| heating_before = FALSE
+
 
| If TRUE, heatingShares contains data and is added to buildings before obstime.
+
* [http://en.opasnet.org/en-opwiki/index.php?title=Special:RTools&id=N5yJnBbYuXKXcWAO Model run 25.10.2015]. Archived version with several updates
|
+
* Model run 17.12.2018 for HNH2035 [http://en.opasnet.org/en-opwiki/index.php?title=Special:RTools&id=1Eo9xxSX45YldilV]
|----
+
 
| efficiency_before = TRUE
+
<rcode name="intermediates" label="Store intermediates (for developers only)" graphics=1 store=1>
| If TRUE, efficiencyShares contains data and is added to buildings before obstime.
+
## This code is Op_en7237/intermediates on page [[Helsinki energy decision 2015]]
|
+
library(OpasnetUtils)
|----
+
library(ggplot2)
|colspan="3"| heatingEnergy: Energy consumption from the [[Building model]] {{defend|# |Move code to [[Heating consumption of buildings]]|--[[User:Jouni|Jouni]] ([[User talk:Jouni|talk]]) 03:48, 9 June 2015 (UTC)}}
+
library(rgdal)
|----
+
#library(maptools)
| energyUse [[Energy use of buildings#Baseline energy consumption|Baseline energy consumption]] [http://en.opasnet.org/w/Special:Opasnet_Base?id=op_en5488.baseline_energy_consumption_per_area_unit] {{defend|# |Update this to use U values and ambient temperatures.|--[[User:Jouni|Jouni]] ([[User talk:Jouni|talk]]) 12:22, 24 May 2015 (UTC)}} Also use [[Building stock in Helsinki]], Table 6.
+
library(RColorBrewer)
| Energy consumption per floor area (kWh / m2 /a) (U: W/m2/K * T: K * Area: m2)
+
#library(classInt)
| Building, Heating.
+
#library(RgoogleMaps)
|----
+
 
| efficiencyRatio  [[Energy use of buildings#Energy efficiency in heating]]) [http://en.opasnet.org/w/Special:Opasnet_Base?id=op_en5488.energy_use_by_energy_class_of_building Opasnet Base]
+
### Technical parameters
| Relative energy consumption compared with the efficiency group Old.
+
 
| Efficiency.  
+
openv.setN(0) # use medians instead of whole sampled distributions
|----
+
BS <- 24 # base_size = font size in graphs
| renovationRatio [[Energy use of buildings#Impact of renovations|Impact of renovations]] [http://en.opasnet.org/w/Special:Opasnet_Base?id=op_en5488.energy_saving_potential_of_different_renovations Opasnet Base]
+
figstofile <- FALSE
| Relative energy consumption compared with the Renovation location None.
+
saveobjects <- TRUE
| Renovation.
+
 
|----
+
########################## Case-specific data and submodels
|colspan="3"| energyBalance [[Energy balance in Helsinki]]
+
 
|----
+
### Decisions
| heatingEnergy (see above)
+
decisions <- opbase.data("Op_en7237", subset = "Decisions") # [[Helsinki energy decision 2015]]
|
+
 
|
+
oprint(decisions)
|----
+
 
| consumerElectricity: from [[Energy use of buildings#Baseline energy consumption|Baseline energy consumption]] [http://en.opasnet.org/w/Special:Opasnet_Base?id=op_en5488.baseline_energy_consumption_per_area_unit Opasnet Base] based on floor area
+
### Energy production in Helsinki
| Amount of consumer electricity use (MW) calculated based on either amount of people or floor-m2
+
 
| Hour (time of day), others?
+
objects.latest("Op_en6007", code_name = "answer") # [[OpasnetUtils/Drafts]] findrest
|----
+
objects.latest("Op_en7311", code_name = "energyProcess") # [[Helsinki energy production]]
| otherEnergy [[Helsinki energy consumption]]
+
objects.latest("Op_en7311", code_name = "plantParameters") # [[Helsinki energy production]]
| Other energy consumption (industry, transport, other): from statistics of Helsinki [http://www.helsinginymparistotilasto.fi/ Helsingin ympäristötilasto]. [[Thermal energy need in Helsinki Metropolitan Area]]
+
objects.latest("Op_en4151", code_name = "fuelPrice") # [[Prices of fuels in heat production]]
| Time
+
 
|----
+
objects.latest("Op_en5141", code_name = "EnergyNetworkOptim") # [[Energy balance]] incl EnergyNetworkCost
| windElectricity Check <ref name="professors"/> about possibilities and Wind pattern [http://www.tuuliatlas.fi/fi/index.html Tuuliatlas] about useful wind mill sites in Helsinki.
+
 
| Amount of wind power produced (MW) by wind type. We also need amounts of hours with different wind patterns per year.
+
### Building data in Helsinki
| Hour (do we need this, is wind power production dependent on time of day?), Weather (temperature and weather types), maybe Wind (Windy, Normal, Calm)
+
 
|----
+
# Observation years must be defined for an assessment.
| solarElectricity
+
obstime <- Ovariable("obstime", data = data.frame(Obsyear = factor(seq(1985, 2065, 10), ordered = TRUE), Result = 1))
| Amount of solar energy produced (MW) in certain conditions. Data source?
+
heatingShares <- 1 # Shares of different heating types in the building stock (already in the building data)
| Hour, Month, Weather, maybe Sun (Sunny, Cloudy, Dark) {{comment|# |Have to decide which of these is used.|--[[User:Jouni|Jouni]] ([[User talk:Jouni|talk]]) 17:27, 24 May 2015 (UTC)}}
+
heating_before <- FALSE # Should heatingShares be calculated before renovate and timepoints (or after)?
|----
+
efficiency_before <- TRUE # Should efficiencyShares be calculated before renovate and timepoints (or after)?
| airpumpHeat
+
 
| This means air-driven heat pumps installed in individual homes and run based on ambient temperature. The efficiency of air heat pump reduces with very cold weather. We assume that the heat pump will be used for cooling as well, if it is installed. (We assume that cooling is not used in apartments without heat pump; cooling is otherwise only used in offices etc).
+
objects.latest("Op_en7115", code_name = "stockBuildings") # [[Building stock in Helsinki]]
| Weather, Hour, maybe Temperature. {{comment|# |Should we have index for day/night so that daily storage of heat/cool can be assessed?|--[[User:Jouni|Jouni]] ([[User talk:Jouni|talk]]) 17:27, 24 May 2015 (UTC)}}
+
objects.latest("Op_en7115", code_name = "changeBuildings") # [[Building stock in Helsinki]]
|----
+
objects.latest("Op_en7115", code_name = "demolitionRate") # [[Building stock in Helsinki]]
| energyProduction [[Helsinki energy production]]
+
objects.latest("Op_en7115", code_name = "renovationRate") # [[Building stock in Helsinki]]
| Energy production based on need: basically, we need to know a) what power plants exist, b) what fuels they use and what (heat, power or both) they produce, c) what emissions they produce, d) what is their maximum capacity, e) at what demand level are they turned on.
+
objects.latest("Op_en7115", code_name = "renovationShares") # [[Building stock in Helsinki]]
* [[District heating production units in Helsinki metropolitan area]]
+
objects.latest("Op_en5488", code_name = "efficiencyShares") # [[Energy use of buildings]]  
* Geothermal heat pumps: this means both individual geothermal heat pumps and district heat pumps for heating and cooling, such as the one in Katri Vala's park. Its efficiency is not reduced with very cold weather. See [https://www.helen.fi/en/households/services/district-cooling/ District cooling by Helen], [[:en:Absorption refrigerator]], [[:en:District cooling]].
+
 
|
+
objects.latest("Op_en6289", code_name = "buildingstest") # [[Building model]] # Generic building model.
|----
+
 
| colspan="3"| emissions (from the model) (emissions in mass per time) Emissions of energy production (ton/a). [[Emission assessment of small-scale energy production in the Helsinki metropolitan area]]
+
## Energy use
|----
+
#objects.latest("Op_en5488", code_name = "energyUseTemperature")       # [[Energy use of buildings]] temperature version of energyUse
| energyBalance (from the model; see above)
+
objects.latest("Op_en5488", code_name = "temperene")       # [[Energy use of buildings]] temperature version of energyUse
|
+
objects.latest("Op_en5488", code_name = "nontemperene")        # [[Energy use of buildings]] temperature version of energyUse
|
+
objects.latest("Op_en2959", code_name = "temperatures") # [[Outdoor air temperature in Finland]]
|----
+
#objects.latest("Op_en5488", code_name = "energyUseTemperature") # [[Energy use of buildings]]
| fuelShares [[Energy balance in Helsinki]]<ref name="judl">Jáchym Judl, Sirkka Koskela, Timo Korpela, Niko Karvosenoja, Anna Häyrinen, Jari Rantsi. Net environmental impacts of low-share wood pellet co-combustion in an existing coal-fired CHP (combined heat and power) production in Helsinki, Finland. Energy 77 (2014) 844-851. {{doi|10.1016/j.energy.2014.09.068}}</ref>
+
objects.latest("Op_en5488", code_name = "EnergyConsumerDemand") # [[Energy use of buildings]]
| Tells how much of fuel is used for a certain neating energy need. {{comment|# |Should this be on page [[Energy balance in Helsinki]] or, like in Kuopio and Basel, a separate table?|--[[User:Jouni|Jouni]] ([[User talk:Jouni|talk]]) 17:27, 24 May 2015 (UTC)}}
+
 
{{comment|# | Use shares of different fuels. Currently this data is on page [[Emission factors for burning processes]] Table Fuel use in different heating types. However, this is clearly case-specific data and should be on a case-specific page. This should be done retrospectively to Kuopio and Basel as well.|--[[User:Jouni|Jouni]] ([[User talk:Jouni|talk]]) 12:22, 24 May 2015 (UTC)}}
+
requiredName <- "Heat" # Name of the fuel type that must match for input and output
| Fuel_type.
+
 
|----
+
### Energy and emissions
| emissionFactors [[Emission factors for burning processes]]
+
objects.latest("Op_en7311", code_name = "emissionLocationsPerPlant") # [[Helsinki energy production]] also heatingShares
| emissions per unit of energy produced (g / J or similar unit) <ref>[http://www.doria.fi/bitstream/handle/10024/94404/isbn9789522655578.pdf?sequence=2 Sanni Väisänen]: Greenhouse gas emissions from peat and biomass-derived fuels, electricity and heat — Estimation of various production chains by using LCA methodology</ref>
+
objects.latest("Op_en2791", code_name = "emissionFactors") # [[Emission factors for burning processes]]
| Exposure_agent, Emission_height.
+
objects.latest("Op_en2791", code_name = "emissionstest") # [[Emission factors for burning processes]]
|----
+
objects.latest("Op_en7311", code_name = "fuelShares") # [[Helsinki energy production]]
| colspan="3"|exposure is in ug/m3 in ambient air average concentration. [[Exposure to PM2.5 in Finland]]  
+
objects.latest("Op_en7311", code_name = "nondynsupply") # [[Helsinki energy production]]
|----
+
timelylimit <- 10000 # The largest production (MW) available at each plant (used to describe time-varying limits).
| emissions
+
 
| (from the model; see above) is in ton /a
+
## Exposure
| Time, City_area, Exposure_agent, Emission_height.
+
 
|----
+
objects.latest("Op_en5813", code_name = "exposure") # [[Intake fractions of PM]] uses Humbert iF as default.
| iF (generic data but depends on population density, emission height etc) [[Intake fractions of PM]].
+
 
| conc (g /m3) * pop (#) * BR (m3 /s) / emis (g /s) <=> conc = emis * iF / BR / pop # conc is the exposure
+
## Health assessment
{{attack|# |This is NOT the right page, but there are some pages such as [[Exposure to PM2.5 in Finland]] that should be merged. |--[[User:Jouni|Jouni]] ([[User talk:Jouni|talk]]) 15:45, 17 May 2015 (UTC)}} {{attack|# |Rather use iFs based on Piltti?|--[[User:Jouni|Jouni]] ([[User talk:Jouni|talk]]) 12:22, 24 May 2015 (UTC)}}
+
 
** Fate and dispersion: is embedded in intake fractions and is not separately needed. Rename?
+
objects.latest('Op_en2261', code_name = 'totcases') # [[Health impact assessment]] totcases and dependencies.
** Time use and activity: not explicitly needed? Remove? With transport it would make a difference.
+
objects.latest('Op_en5461', code_name = 'DALYs') # [[Climate change policies and health in Kuopio]] DALYs, DW, L
| Emission_height, Pollutant, Area
+
 
|----
+
population <- 623732 # Contains only the Helsinki city, i.e. assumes no exposure outside city. (Wikipedia)
| population [[Population of Helsinki metropolitan area]]
+
# Note: the population size does NOT affect the health impact if the exposure-response function in linear.
| Amount of population exposed. Data from Statistics Finland?
+
# However, it DOES affect exposure estimates.
| Time, Area, Age, Sex
+
 
|----
+
# DALYshortcut is for a quicker health impact calculations, as it directly uses the Helsinki conditions.
| ambientTemperature: [[Weather in Helsinki]] (also contains solar radiation and wind patterns)
+
 
| Ambient temperatures. {{comment|# |We actually need hourly temperatures. How do we manage this in the model? Temperatures should match indices Sun, Wind, Hour, and Month.|--[[User:Jouni|Jouni]] ([[User talk:Jouni|talk]]) 17:27, 24 May 2015 (UTC)}}
+
objects.latest("Op_en7237", code_name = "DALYshortcut") # [[Helsinki energy decision 2015]]
|
+
 
|----
+
objects.latest("Op_en7379", code_name = "externalities") # [[External cost]]
|colspan="3"| [[Health impact assessment]]
+
objects.latest("Op_en3283", code_name = "totalCost") # [[Economic impacts]]
|----
+
objects.latest("Op_en3283", code_name = "EAC") # [[Economic impacts]]
| exposure (see above)
+
 
|
+
################################# Actual model and some intermediate processing.
|
+
 
|----
+
DecisionTableParser(decisions)
| [[Disease risk]]
+
 
| Incidences of diseases of interest. {{comment|# |What if prevalence values would be more useful?|--[[User:Jouni|Jouni]] ([[User talk:Jouni|talk]]) 17:27, 24 May 2015 (UTC)}}
+
# Remove previous decisions, if any.  
| Age, Sex, Response
+
 
|----
+
forgetDecisions()
| ERF [[Exposure-response function]]
+
 
| Exposure-response functions of all relevant exposure agents
+
renovationRate <- EvalOutput(renovationRate) * 10 # Rates for 10-year periods
|
+
 
|----
+
buildings <- EvalOutput(buildings)
| [[Burden of disease in Finland]]
+
 
|
+
buildings$EnergySavingPolicy <- factor(
|
+
buildings$EnergySavingPolicy,
|----
+
levels = c("BAU", "Energy saving moderate", "Energy saving total", "WWF energy saving"),
| Other human health effects, indoor environment, and well-being is not probably handled here? Remove or keep as an important placeholder?
+
ordered = TRUE
|
+
)
|
+
 
|----
+
EnergyConsumerDemand <- EvalOutput(EnergyConsumerDemand)
| Costs: Where do we get this? From Vuosaari YVA? From <ref name="professors"/>?
+
 
| Costs of activities (energy production mainly) but also health impacts.
+
EnergyNetworkDemand <- EvalOutput(EnergyNetworkDemand)
| Time
+
 
|}
+
EnergyNetworkDemand@output <- rbind(
 +
EnergyNetworkDemand@output,
 +
data.frame(
 +
Time = rep(c(2025, 2035, 2045, 2055, 2065), each = 4),
 +
EnergySavingPolicy = rep(c("BAU", "Energy saving moderate", "Energy saving total", "WWF energy saving"), times = 5),
 +
Temperature = "(-18,-15]",
 +
EnergyConsumerDemandSource = "Formula",
 +
EnergyConsumerDemandTotalSource = "Formula",
 +
Fuel = "Cooling",
 +
fuelSharesSource = "Formula",
 +
EnergyNetworkDemandResult = 0,
 +
EnergyNetworkDemandSource = "Formula"
 +
)
 +
)
 +
 
 +
########################### SAVE OBJECTS
 +
 
 +
if(saveobjects) {
 +
 +
# Clean decisions and previous results not wanted/needed by the half-model
 +
 +
energyProcess@output <- data.frame()
 +
plantParameters@output <- data.frame()
 +
EnergyNetworkOptim@output <- data.frame()
 +
#EnergyConsumerDemand@output <- data.frame()
 +
 +
totcases@output <- data.frame()
 +
DALYs@output <- data.frame()
 +
exposure@output <- data.frame()
 +
rm(saveobjects, dictionary) # Remove technical objects that may be updated independently of the model
 +
 +
objects.store(list = ls()) # Save all objects of the global environment.
 +
cat("All objects stored for later use:\n", paste(ls(), collapse = ", "), "\n")
 +
}
 +
 
 +
############################ Output tables and graphs
 +
if(FALSE) {
 +
 
 +
fuelUse <- EvalOutput(fuelUse)
  
=== Analyses ===
+
fuelUse$Fuel <- factor(
 
+
fuelUse$Fuel, levels = c(
* Cost-benefit analysis of different options. Costs considered: capital and operational costs of energy production, climate costs (CO2e emissions converted to euros), health (DALYs converted to euros).
+
"Biofuel",
* Total capacity availability and feasibility (applies especially to decentralised option).
+
"Coal",
* Temporal heat and power demand and supply (hourly resolution).
+
"Fuel oil",
 
+
"Gas",
=== Indices ===
+
"Light oil",
 +
"Wood",
 +
"Electricity",
 +
"Electricity_taxed",
 +
"Heat",
 +
"Cooling"
 +
), ordered = TRUE
 +
)
  
* Temporal:  Time (5-year observation periods)
+
# Calculate exposure based on average iF.
* Temperature (3-degree-Celsius intervals for ambient daily average temperatures. It is assumed that heating is not needed above 17 C and cooling is not needed below 24 C. Hot water need is independent of ambient temperature.
+
exposure <- EvalOutput(exposure)
* Decisions: EnergySavingPolicy contains options that reduce the energy need of the building stock and other consumption. PlantPolicy contains options about which energy plants to build (or demolish).
+
exposure <- exposure[exposure$Area == "Average" , ]
* Stakeholder (Citizen, City, Helen, Finland)
+
exposure <- oapply(exposure, cols = c("Plant", "Emission_site", "Emission_height", "Area"), FUN = sum)
* Spatial: City area (summed up after energy need)
+
totcases <- EvalOutput(totcases)
* Health: Response (any disease that is linked to Exposure agents emitted)
+
DALYs <- EvalOutput(DALYs)
* Emission, exposure: Pollutant or Exposure agent (any agent that is emitted by energy production)
+
EnergyNetworkCost <- EvalOutput(EnergyNetworkCost)
* Energy production: Burner (type of burner used in the facility where energy is produced), Fuel (type of fuel used in energy production), Heating (type of heating in the building).
 
* Buildings: Building [use type], Heating, Constructed, City area, Renovation, Efficiency.
 
  
=== Calculations ===
+
cat("Total DALYs/a by different combinations of policy options.\n")
  
* [http://en.opasnet.org/en-opwiki/index.php?title=Special:RTools&id=vjTT6BjPtWIkLcAl Model run 2.7.2015] with intermediate result tables but a problem with totcases.
+
temp <- DALYs[as.character(DALYs$Time) %in% c("2015", "2035", "2065") & DALYs$Response == "Total mortality" , ]
* [http://en.opasnet.org/en-opwiki/index.php?title=Special:RTools&id=pP2FsmdaijIfcz80 Model run 5.7.2015]
 
* [http://en.opasnet.org/en-opwiki/index.php?title=Special:RTools&id=any4I2Y1gXfWtxER Model run 6.7.2015] with corrected energyBalance model.
 
* [http://en.opasnet.org/en-opwiki/index.php?title=Special:RTools&id=xmzcj8gvOZsYpScd Model run 7.7.2015]
 
* [http://en.opasnet.org/en-opwiki/index.php?title=Special:RTools&id=PNSmPRBuFdxysbRO Model run 8.7.2015] with daily heat optimising
 
* [http://en.opasnet.org/en-opwiki/index.php?title=Special:RTools&id=x0t1a3M44AeiWg4F Model run 9.7.2015] with also consumer electricity and cooling
 
* [http://en.opasnet.org/en-opwiki/index.php?title=Special:RTools&id=KTNmnTh1Ai1FXOW2 Model run 9.7.2015] attempt to adjust decisions to plausible
 
* [http://en.opasnet.org/en-opwiki/index.php?title=Special:RTools&id=VXYsYzhq5wihX8g0 Model run 11.7.2015] updated emission factors and decision options
 
* [http://en.opasnet.org/en-opwiki/index.php?title=Special:RTools&id=oABWo0x0u6zsA8ZY Model run 12.7.2015]
 
* [http://en.opasnet.org/en-opwiki/index.php?title=Special:RTools&id=ixOkV2SnjMo1Pne1 Model run 15.7.2015] the whole model works but there seems to be a unit conversion error or similar from energy balance on.
 
* [http://en.opasnet.org/en-opwiki/index.php?title=Special:RTools&id=kZuzQaO3mnpkl8Wz Model run 15.7.2015] long-term plant activity and fuel use added
 
* [http://en.opasnet.org/en-opwiki/index.php?title=Special:RTools&id=uqEh554tIfmDKjvW Model run 16.7.2015] used to store intermediate results for Answer code.
 
* [http://en.opasnet.org/en-opwiki/index.php?title=Special:RTools&id=2EIjgeJ0OnJjfJcZ New model initial run 23.7.2015]
 
* [http://en.opasnet.org/en-opwiki/index.php?title=Special:RTools&id=IxmleCN7hW80URAd Model run 24.7.2015]
 
* [http://en.opasnet.org/en-opwiki/index.php?title=Special:RTools&id=GQGqRQUwrTX7lzzi Model run 27.7.2015]
 
* [http://en.opasnet.org/en-opwiki/index.php?title=Special:RTools&id=ejNvy1EscdzooTxP Model run 27.7.2015] with shorter names and clearer graphs.
 
* [http://en.opasnet.org/en-opwiki/index.php?title=Special:RTools&id=9PE7a4B1mBhUjlcR Model run 29.7.2015]
 
* [http://en.opasnet.org/en-opwiki/index.php?title=Special:RTools&id=6KeCs0rS7dpdrtHQ Model run 14.8.2015] Total construction corrected but oil heating not yet. Objects saved.
 
* [http://en.opasnet.org/en-opwiki/index.php?title=Special:RTools&id=yc7vpnJErCPYLoSJ Model run 16.8.2016] With first cost estimates
 
* [http://en.opasnet.org/en-opwiki/index.php?title=Special:RTools&id=HrRkCq1EyAd0V7bj Model run 16.8.2015] Better cost estimates. Objects stored.
 
* [http://en.opasnet.org/en-opwiki/index.php?title=Special:RTools&id=POPfXqpcyS9s7Adf Model run 17.8.2015] Incremental oil heating conversion to geothermal implemented.
 
* [http://en.opasnet.org/en-opwiki/index.php?title=Special:RTools&id=5uDBil9PcGEsv9LJ Model run 29.8.2015] Fixed plot scaling
 
* [http://en.opasnet.org/en-opwiki/index.php?title=Special:RTools&id=goJdvrDzXp3Toedb Model run 2.9.2015] with updated process and price parameters.
 
* [http://en.opasnet.org/en-opwiki/index.php?title=Special:RTools&id=NTkgZ2NfWGeQhdMM Model run 4.9.2015] BAU and Helen's bio decision updated.
 
* [http://en.opasnet.org/en-opwiki/index.php?title=Special:RTools&id=8hJVMdh8aAy1E0sV Model run 5.9.2015] with technical improvements
 
* [http://en.opasnet.org/en-opwiki/index.php?title=Special:RTools&id=wCUnFoiRLYePywae] some bugs fixed, no the whole model works
 
  
Name intermediates temporarily removed so than nobody accidentally runs a version that does not store objects.
+
oprint(
 
+
oapply(temp, INDEX = c("Time", "EnergySavingPolicy", "PlantPolicy"), FUN = sum),
<rcode name="intermediates" graphics=1 store=1>
+
caption = "Table 1: Total DALYs/a by different combinations of policy options.",
## This code is Op_en7237/intermediates on page [[Helsinki energy decision 2015]]
+
caption.placement = "top",
library(OpasnetUtils)
+
include.rownames = FALSE
library(ggplot2)
+
)
library(rgdal)
 
library(maptools)
 
library(RColorBrewer)
 
library(classInt)
 
library(RgoogleMaps)
 
  
### Technical parameters
+
####################### Post-processing and graphs
  
openv.setN(0) # use medians instead of whole sampled distributions
+
bui <- oapply(buildings * 1E-6, cols = c("City_area", "buildingsSource"), FUN = sum)
BS <- 24 # base_size = font size in graphs
+
bui <- truncateIndex(bui, cols = "Heating", bins = 4)
figstofile <- FALSE
 
saveobjects <- TRUE
 
  
########################## Case-specific data and submodels
+
oggplot(bui[bui$EnergySavingPolicy == "BAU" , ], x = "Time", fill = "Heating", binwidth = 5) +
 +
labs(
 +
title = "Building stock in Helsinki by heating",
 +
y = "Floor area (M m2)"
 +
)
  
### Decisions
+
oggplot(bui, x = "Time", fill = "Efficiency", binwidth = 5) +
decisions <- opbase.data("Op_en7237", subset = "Decisions") # [[Helsinki energy decision 2015]]
+
facet_grid(. ~ EnergySavingPolicy) +
 
+
labs(
oprint(decisions)
+
title = "Building stock in Helsinki by efficiency policy",
 +
y = "Floor area (M m2)"
 +
)
  
### Energy production in Helsinki
+
oggplot(bui, x = "Time", fill = "Renovation", binwidth = 5) +
 +
facet_grid(. ~ EnergySavingPolicy) +
 +
labs(
 +
title = "Building stock in Helsinki by renovation policy",
 +
y = "Floor area (M m2)"
 +
)
  
objects.latest("Op_en6007", code_name = "answer") # [[OpasnetUtils/Drafts]] findrest
+
oggplot(bui[bui$EnergySavingPolicy == "BAU" , ], x = "Time", fill = "Building", binwidth = 5) +
objects.latest("Op_en7311", code_name = "energyProcess") # [[Helsinki energy production]]
+
labs(
objects.latest("Op_en7311", code_name = "plantParameters") # [[Helsinki energy production]]
+
title = "Building stock in Helsinki",
objects.latest("Op_en4151", code_name = "fuelPrice") # [[Prices of fuels in heat production]]
+
y = "Floor area (M m2)"
 +
)
  
objects.latest("Op_en5141", code_name = "EnergyNetworkOptim") # [[Energy balance]] incl EnergyNetworkCost
+
oggplot(buildings, x = "Time", fill = "Efficiency", binwidth = 5)+
 +
facet_grid(EnergySavingPolicy ~ Renovation) +
 +
labs(
 +
title = "Renovation of buildings by policy and efficiency",
 +
y = "Floor area (M m2)"
 +
)
  
### Building data in Helsinki
+
emissions$Time <- as.numeric(as.character(emissions$Time))
  
# Observation years must be defined for an assessment.
+
# Plot energy need and emissions
obstime <- Ovariable("obstime", data = data.frame(Obsyear = factor(seq(1985, 2065, 10), ordered = TRUE), Result = 1))
+
 
heatingShares <- 1 # Shares of different heating types in the building stock (already in the building data)
+
hea <- EnergyConsumerDemand * temperdays * 24 * 1E-9 # From W -> GWh /a.
heating_before <- FALSE # Should heatingShares be calculated before renovate and timepoints (or after)?
+
hea <- hea[hea$Consumable == "Heating" , ]
efficiency_before <- TRUE # Should efficiencyShares be calculated before renovate and timepoints (or after)?
+
hea <- oapply(hea, cols = c("City_area", "buildingsSource"), FUN = sum)
 +
hea <- truncateIndex(hea, cols = "Heating", bins = 4)
  
objects.latest("Op_en7115", code_name = "stockBuildings") # [[Building stock in Helsinki]]
+
oggplot(hea, x = "Time", fill = "Renovation", binwidth = 5) +
objects.latest("Op_en7115", code_name = "changeBuildings") # [[Building stock in Helsinki]]
+
facet_wrap( ~ EnergySavingPolicy) +
objects.latest("Op_en7115", code_name = "renovationRate") # [[Building stock in Helsinki]]
+
labs(
objects.latest("Op_en7115", code_name = "renovationShares") # [[Building stock in Helsinki]]
+
title = "Energy used in heating in Helsinki",
objects.latest("Op_en5488", code_name = "efficiencyShares") # [[Energy use of buildings]]
+
x = "Time",
 +
y = "Heating energy (GWh /a)"
 +
)
  
objects.latest("Op_en6289", code_name = "buildingstest") # [[Building model]] # Generic building model.
+
eb <-EnergyNetworkOptim[EnergyNetworkOptim$Process_variable_type == "Activity",]
 +
colnames(eb@output)[colnames(eb@output) == "Process_variable_name"] <- "Plant"
 +
eb$Process_variable_type <- NULL
  
## Energy use
+
ebtemp <- eb[eb$Time %in% c("2035") & eb$EnergySavingPolicy == "BAU" & eb$PlantPolicy == "BAU" , ]
#objects.latest("Op_en5488", code_name = "energyUseTemperature")        # [[Energy use of buildings]] temperature version of energyUse
+
ebtemp <- truncateIndex(ebtemp, cols = "Plant", bins = 7)
objects.latest("Op_en5488", code_name = "temperene")        # [[Energy use of buildings]] temperature version of energyUse
 
objects.latest("Op_en5488", code_name = "nontemperene")        # [[Energy use of buildings]] temperature version of energyUse
 
objects.latest("Op_en7317", code_name = "temperatures") # [[Helsinki energy consumption]]
 
#objects.latest("Op_en5488", code_name = "energyUseTemperature") # [[Energy use of buildings]]
 
objects.latest("Op_en5488", code_name = "EnergyConsumerDemand") # [[Energy use of buildings]]
 
  
requiredName <- "Heat" # Name of the fuel type that must match for input and output
+
oggplot(ebtemp, x = "Plant", fill = "Plant") + facet_wrap( ~ Temperature) +
 +
theme(axis.text.x = element_blank()) + # Turn text and adjust to right
 +
labs(
 +
title = "Power plant activity by temperature daily optim \nPlant policy = BAU, Year = 2035",
 +
y = "Power output daily average (MW)"
 +
)
  
### Energy and emissions
+
fu <- fuelUse
objects.latest("Op_en7311", code_name = "emissionLocationsPerPlant") # [[Helsinki energy production]] also heatingShares
+
fu$Burner <- NULL
objects.latest("Op_en2791", code_name = "emissionFactors") # [[Emission factors for burning processes]]
+
fu <- fu / 3.6E+6 # From MJ/a -> GWh/a
objects.latest("Op_en2791", code_name = "emissionstest") # [[Emission factors for burning processes]]
+
fu$Time <- as.numeric(as.character(fu$Time))
objects.latest("Op_en7311", code_name = "fuelShares") # [[Helsinki energy production]]
 
objects.latest("Op_en7311", code_name = "nondynsupply") # [[Helsinki energy production]]
 
timelylimit <- 10000 # The largest production (MW) available at each plant (used to describe time-varying limits).
 
  
## Exposure
+
futemp <- fu[fu$Time %in% c("2015", "2035", "2065") & fu$PlantPolicy == "BAU" , ]
 
+
futemp <- truncateIndex(futemp, cols = "Plant", bins = 7) * -1
objects.latest("Op_en5813", code_name = "exposure") # [[Intake fractions of PM]] uses Humbert iF as default.
+
oggplot(futemp, x = "Fuel", fill = "Plant", turnx = TRUE) + facet_grid(Time ~ EnergySavingPolicy) +
 +
labs(
 +
title = "Energy commodity flows \n Plant policy = BAU",
 +
y = "Total annual energy (GWh/a)"
 +
)
  
## Health assessment
+
futemp <- fu[fu$Fuel %in% c("Heat") , ]
 +
futemp <- truncateIndex(futemp, cols = "Plant", bins = 10) * -1
 +
oggplot(futemp, x = "Time", fill = "Plant", binwidth = 5) + facet_grid(EnergySavingPolicy ~ PlantPolicy) +
 +
labs(
 +
title = "District heat flow",
 +
y = "Total annual energy (GWh/a)"
 +
)
  
objects.latest('Op_en2261', code_name = 'totcases') # [[Health impact assessment]] totcases and dependencies.
+
futemp <- fu[fu$Fuel %in% c("Electricity") , ]
objects.latest('Op_en5461', code_name = 'DALYs') # [[Climate change policies and health in Kuopio]] DALYs, DW, L
+
futemp <- truncateIndex(futemp, cols = "Plant", bins = 10) * -1
 +
oggplot(futemp, x = "Time", fill = "Plant", binwidth = 5) + facet_grid(EnergySavingPolicy ~ PlantPolicy) +
 +
labs(
 +
title = "Electricity flow",
 +
y = "Total annual energy (GWh/a)"
 +
)
  
population <- 623732 # Contains only the Helsinki city, i.e. assumes no exposure outside city. (Wikipedia)
+
oggplot(emissions[emissions$EnergySavingPolicy == "BAU" , ], x = "Time", fill = "Fuel", binwidth = 5) +
# Note: the population size does NOT affect the health impact if the exposure-response function in linear.
+
facet_grid(Pollutant ~ PlantPolicy, scale = "free_y") +
# However, it DOES affect exposure estimates.
+
labs(
 +
title = "Emissions from heating in Helsinki",
 +
x = "Time (Energy saving policy = BAU)",
 +
y = "Emissions (ton /a)"
 +
)
  
# DALYshortcut is for a quicker health impact calculations, as it directly uses the Helsinki conditions.
+
oggplot(exposure[exposure$Exposure_agent == "PM2.5" , ], x = "Time", fill = "Fuel", binwidth = 5) +
 +
facet_grid(EnergySavingPolicy ~ PlantPolicy) +
 +
labs(
 +
title = "Exposure to PM2.5 from heating in Helsinki",
 +
x = "Time",
 +
y = "Average PM2.5 (µg/m3)"
 +
)
  
objects.latest("Op_en7237", code_name = "DALYshortcut") # [[Helsinki energy decision 2015]]
+
oggplot(DALYs, x = "Time", fill = "Fuel", binwidth = 5) + facet_grid(EnergySavingPolicy ~ PlantPolicy) +
 +
labs(
 +
title = "Health effects in DALYs of PM2.5 from heating in Helsinki",
 +
y = "Health effects (DALY /a)"
 +
)
 +
} # END if(FALSE)
 +
</rcode>
 +
<noinclude>
  
objects.latest("Op_en7379", code_name = "externalities") # [[External cost]]
+
==== Preference order ====
objects.latest("Op_en3283", code_name = "totalCost") # [[Economic impacts]]
 
objects.latest("Op_en3283", code_name = "EAC") # [[Economic impacts]]
 
  
################################# Actual model and some intermediate processing.
+
'''This code should be used for new model runs. It is newer but not fully adjusted for its purpose yet.
  
DecisionTableParser(decisions)
+
<rcode name="preferenceorder" graphics=1>
 +
# This code is Op_en7237/finalresults on page [[Helsinki energy decision 2015]]
 +
library(OpasnetUtils)
 +
library(ggplot2)
  
# Remove previous decisions, if any.
+
openv.setN(0) # use medians instead of whole sampled distributions
  
forgetDecisions()
+
# Download all pre-calculated inputs, e.g. building stock.
 +
objects.latest("Op_en7237", code_name = "intermediates") # [[Helsinki energy decision 2015]]
 +
objects.latest("Op_en6007", code_name = "answer") # [[OpasnetUtils/Drafts]] oggplot
 +
objects.latest("Op_en7392", code_name = "translate") # [[OpasnetUtils/Translate]] translate
 +
objects.latest("Op_en7392", code_name = "dictionary") # [[OpasnetUtils/Translate]] dictionary
 +
BS <- 24 # base_size for graph fonts
 +
saveobjects <- FALSE
 +
language <- "Finnish"
 +
fi <- language == "Finnish"
 +
EnergyNetworkDemand <- EnergyNetworkDemand[EnergyNetworkDemand$EnergySavingPolicy == "Energy saving total" , ]
  
renovationRate <- EvalOutput(renovationRate) * 10 # Rates for 10-year periods
+
decisions <- opbase.data("Op_en7237", subset = "Decisions") # [[Helsinki energy decision 2015]]
 +
decisions$Obs <- NULL
 +
temp <- decisions[decisions$Decision== "PlantPolicy",][1,]
 +
decisions <- decisions[decisions$Decision!= "PlantPolicy" , ] # & decisions$Option == "Energy saving total" , ]
 +
temp$Option <- "All1"
 +
temp$Variable <- "plantParameters"
 +
temp$Cell <- ""
 +
temp$Change <- "Identity"
 +
decisions <- rbind(decisions, temp)
  
buildings <- EvalOutput(buildings)
+
allplants <- list(
 
+
Loviisa2 = c(
buildings$EnergySavingPolicy <- factor(
+
'Sea heat pump for cooling',
buildings$EnergySavingPolicy,
+
'Household air conditioning',
levels = c("BAU", "Energy saving moderate", "Energy saving total"),
+
'Household solar',
ordered = TRUE
+
"Kymijoki River's plants",
)
+
'Small-scale wood burning',
 
+
'Suvilahti power storage',
EnergyConsumerDemand <- EvalOutput(EnergyConsumerDemand)
+
'Suvilahti solar',
 
+
'Vanhakaupunki museum',
########################### SAVE OBJECTS
+
'Wind mills'
 
+
),
if(saveobjects) {
+
DataAndSea3 = c(
+
'Loviisa nuclear heat'
# Clean decisions and previous results not wanted/needed by the half-model
+
),
+
NesteAndDeep4 = c(
energyProcess@output <- data.frame()
+
'Data center heat',
plantParameters@output <- data.frame()
+
'Sea heat pump',
EnergyNetworkOptim@output <- data.frame()
+
'Household air heat pumps',
#EnergyConsumerDemand@output <- data.frame()
+
'Household geothermal heat'
+
),
totcases@output <- data.frame()
+
Existing5 = c(
DALYs@output <- data.frame()
+
'Katri Vala heat',
exposure@output <- data.frame()
+
'Neste oil refinery heat',
+
'Vuosaari C biofuel',
objects.store(list = ls()) # Save all objects of the global environment.
+
'Deep-drill heat'
cat("All objects of the global environment are stored.\n")
+
),
}
+
Backup6 = c(
 +
'Biofuel heat plants',
 +
'CHP diesel generators',
 +
'Hanasaari',
 +
'Salmisaari A&B',
 +
'Vuosaari A',
 +
'Vuosaari B'
 +
),
 +
Lowcost = c(
 +
'Katri Vala cooling',
 +
'Kellosaari back-up plant',
 +
'Small fuel oil heat plants',
 +
'Small gas heat plants'
 +
)
 +
)
  
############################ Output tables and graphs
+
cheapest <- c(
 
+
'Loviisa nuclear heat',
fuelUse <- EvalOutput(fuelUse)
+
'Data center heat',
 
+
'Household air heat pumps',
fuelUse$Fuel <- factor(
+
'Katri Vala heat',
fuelUse$Fuel, levels = c(
+
'Neste oil refinery heat',
"Biofuel",
+
'Small fuel oil heat plants'
"Coal",
 
"Fuel oil",
 
"Gas",
 
"Light oil",
 
"Wood",
 
"Electricity",
 
"Electricity_taxed",
 
"Heat",
 
"Cooling"
 
), ordered = TRUE
 
 
)
 
)
  
# Calculate exposure based on average iF.
+
existing <- c( # Major existing plants are only closed at 2026 if they are closed
exposure <- EvalOutput(exposure)
+
"Kymijoki River's plants",
exposure <- exposure[exposure$Area == "Average" , ]
+
'Small-scale wood burning',
exposure <- oapply(exposure, cols = c("Plant", "Emission_site", "Emission_height", "Area"), FUN = sum)
+
'Katri Vala heat',
totcases <- EvalOutput(totcases)
+
'Hanasaari',
DALYs <- EvalOutput(DALYs)
+
'Salmisaari A&B',
EnergyNetworkCost <- EvalOutput(EnergyNetworkCost)
+
'Vuosaari A',
 +
'Vuosaari B',
 +
'Kellosaari back-up plant',
 +
'Small fuel oil heat plants',
 +
'Small gas heat plants'
 +
)
 +
for(i in 1:6) {
 +
shutdown <- unlist(allplants[1:i])
 +
if(i == 6) shutdown <- unlist(allplants)[!unlist(allplants) %in% cheapest]
  
#oprint(head(buildings@output))
+
temp <- data.frame(
#oprint(head(EnergyConsumerDemand@output))
+
Decision_maker = "Helen",
#oprint(head(EnergyNetworkOptim@output))
+
Decision = "PlantPolicy",
#oprint(head(emissions@output))
+
Option = names(allplants[i]),
#oprint(head(exposure@output))
+
Variable = c("plantParameters"),
#oprint(head(totcases@output))
+
Cell = c(
#oprint(head(DALYs@output))
+
paste("Plant:", paste(shutdown[!shutdown %in% existing], collapse = ","), ";Parameter:Max,Min,Investment cost;Time:>=2016", sep = ""),
 +
paste("Plant:", paste(shutdown[shutdown %in% existing], collapse = ","), ";Parameter:Max,Min,Investment cost;Time:>=2026", sep = "")
 +
),
 +
Change = c("Replace"),
 +
Unit = NA,
 +
Result = 0
 +
)
 +
decisions <- rbind(decisions, temp)
 +
}
  
cat("Total DALYs/a by different combinations of policy options.\n")
+
DecisionTableParser(decisions)
  
temp <- DALYs[as.character(DALYs$Time) %in% c("2015", "2035", "2065") & DALYs$Response == "Total mortality" , ]
+
oprint(decisions)
 +
 
 +
oprint(data.frame(
 +
Shutdown_order = c(
 +
"Plants are shut down in this order (most cost efficient first):",
 +
paste(allplants[[1]], collapse = ", "),
 +
paste(allplants[[2]], collapse = ", "),
 +
paste(allplants[[3]], collapse = ", "),
 +
paste(allplants[[4]], collapse = ", "),
 +
paste(allplants[[5]], collapse = ", "),
 +
paste(allplants[[6]], collapse = ", "),
 +
paste(c("All but the cheapest", cheapest), collapse = ", ")
 +
)
 +
))
  
oprint(
+
#EnergyNetworkDemand <- EvalOutput(EnergyNetworkDemand)
oapply(temp, INDEX = c("Time", "EnergySavingPolicy", "PlantPolicy"), FUN = sum),
 
caption = "Table 1: Total DALYs/a by different combinations of policy options.",
 
caption.placement = "top",
 
include.rownames = FALSE
 
)
 
  
####################### Post-processing and graphs
+
oprint(oapply(EnergyNetworkDemand, INDEX = c("Time", "Fuel"), FUN = length)@output)
  
bui <- oapply(buildings * 1E-6, cols = c("City_area", "buildingsSource"), FUN = sum)
+
oprint(EnergyNetworkDemand@output)
bui <- truncateIndex(bui, cols = "Heating", bins = 4)
 
  
oggplot(bui[bui$EnergySavingPolicy == "BAU" , ], x = "Time", fill = "Heating", binwidth = 5) +
+
EnergyNetworkOptim <- EvalOutput(EnergyNetworkOptim)
labs(
 
title = "Building stock in Helsinki by heating",
 
y = "Floor area (M m2)"
 
)
 
  
oggplot(bui, x = "Time", fill = "Efficiency", binwidth = 5) +
+
#EnergyNetworkDemand@output <- rbind(
facet_grid(. ~ EnergySavingPolicy) +
+
# EnergyNetworkDemand@output,
labs(
+
# data.frame(
title = "Building stock in Helsinki by efficiency policy",
+
# Time = rep(c(2025, 2035, 2045, 2055, 2065), each = 4),
y = "Floor area (M m2)"
+
# EnergySavingPolicy = rep(c("BAU", "Energy saving moderate", "Energy saving total", "WWF energy saving"), times = 5),
)
+
# Temperature = "(-18,-15]",
 +
# EnergyConsumerDemandSource = "Formula",
 +
# EnergyConsumerDemandTotalSource = "Formula",
 +
# Fuel = "Cooling",
 +
# fuelSharesSource = "Formula",
 +
# EnergyNetworkDemandResult = 0,
 +
# EnergyNetworkDemandSource = "Formula"
 +
# )
 +
#)
  
oggplot(bui, x = "Time", fill = "Renovation", binwidth = 5) +
+
fuelUse <- EvalOutput(fuelUse)
facet_grid(. ~ EnergySavingPolicy) +
 
labs(
 
title = "Building stock in Helsinki by renovation policy",
 
y = "Floor area (M m2)"
 
)
 
  
oggplot(bui[bui$EnergySavingPolicy == "BAU" , ], x = "Time", fill = "Building", binwidth = 5) +
+
fuelUse$Fuel <- factor(
labs(
+
fuelUse$Fuel, levels = c(
title = "Building stock in Helsinki",
+
"Biofuel",
y = "Floor area (M m2)"
+
"Coal",
)
+
"Fuel oil",
 
+
"Gas",
oggplot(buildings, x = "Time", fill = "Efficiency", binwidth = 5)+
+
"Light oil",
facet_grid(EnergySavingPolicy ~ Renovation) +
+
"Wood",
labs(
+
"Electricity",
title = "Renovation of buildings by policy and efficiency",
+
"Electricity_taxed",
y = "Floor area (M m2)"
+
"Heat",
)
+
"Cooling"
 +
), ordered = TRUE
 +
)
 +
 
 +
DALY <- EvalOutput(DALYs)
 +
DALYs <- unkeep(DALY, cols = c("Age", "Sex", "Population"))
 +
DALYs <- oapply(DALYs, cols = c("Emission_site", "Emission_height", "Area"), FUN = sum)
 +
DALYs <- DALYs[DALYs$Response == "Total mortality" , ]
  
emissions$Time <- as.numeric(as.character(emissions$Time))
+
EnergyNetworkCost <- EvalOutput(EnergyNetworkCost)
  
# Plot energy need and emissions
+
EnergyNetworkCost$Time <- as.numeric(as.character(EnergyNetworkCost$Time))
  
hea <- EnergyConsumerDemand * temperdays * 24 * 1E-9 # From W -> GWh /a.
+
totalCost <- EvalOutput(totalCost)
hea <- hea[hea$Consumable == "Heating" , ]
+
totalCost@output$Time <- as.numeric(as.character(totalCost@output$Time))
hea <- oapply(hea, cols = c("City_area", "buildingsSource"), FUN = sum)
+
totalCost <- unkeep(totalCost[totalCost$Time >= 2015 & totalCost$Time <=2065 , ], sources = TRUE)
hea <- truncateIndex(hea, cols = "Heating", bins = 4)
 
  
oggplot(hea, x = "Time", fill = "Renovation", binwidth = 5) +
+
# Net present value and effective annual cost
facet_wrap( ~ EnergySavingPolicy) +
 
labs(
 
title = "Energy used in heating in Helsinki",
 
x = "Time",
 
y = "Heating energy (GWh /a)"
 
)
 
  
eb <-EnergyNetworkOptim[EnergyNetworkOptim$Process_variable_type == "Activity",]
+
discount <- 0.03
colnames(eb@output)[colnames(eb@output) == "Process_variable_name"] <- "Plant"
+
times <- c(2015, 2065)
eb$Process_variable_type <- NULL
+
EAC <- EvalOutput(EAC)
  
ebtemp <- eb[eb$Time %in% c("2035") & eb$EnergySavingPolicy == "BAU" & eb$PlantPolicy == "BAU" , ]
+
if(saveobjects) {
ebtemp <- truncateIndex(ebtemp, cols = "Plant", bins = 7)
+
objects.store(list = ls())
 +
cat("All objects stored for later use:\n", paste(ls(), collapse = ", "), "\n")
 +
}
  
oggplot(ebtemp, x = "Plant", fill = "Plant") + facet_wrap( ~ Temperature) +
+
############## POST_PROCESSING AND GRAPHS, VERSION FROM PERFERENCE ANALYSIS
theme(axis.text.x = element_blank()) + # Turn text and adjust to right
 
labs(
 
title = "Power plant activity by temperature daily optim \nPlant policy = BAU, Year = 2035",
 
y = "Power output daily average (MW)"
 
)
 
  
fu <- fuelUse
+
cat(translate("NOTE! In all graphs and tables, the Total energy saving policy is assumed unless otherwise noted\n"))
fu$Burner <- NULL
+
cat(translate("Total DALYs/a by different combinations of policy options.\n"))
fu <- fu / 3.6E+6 # From MJ/a -> GWh/a
 
fu$Time <- as.numeric(as.character(fu$Time))
 
  
futemp <- fu[fu$Time %in% c("2015", "2035", "2065") & fu$PlantPolicy == "BAU" , ]
+
temp <- DALYs[as.character(DALYs$Time) %in% c("2015", "2035") & DALYs$Response == "Total mortality" , ]
futemp <- truncateIndex(futemp, cols = "Plant", bins = 7) * -1
+
 
oggplot(futemp, x = "Fuel", fill = "Plant", turnx = TRUE) + facet_grid(Time ~ EnergySavingPolicy) +
+
oprint(
 +
translate(oapply(temp, INDEX = c("Time", "EnergySavingPolicy", "PlantPolicy"), FUN = sum)),
 +
caption = translate("Table 1: Total DALYs/a by different combinations of policy options."),
 +
caption.placement = "top",
 +
include.rownames = FALSE
 +
)
 +
 
 +
bui <- oapply(buildings * 1E-6, cols = c("City_area", "buildingsSource"), FUN = sum)
 +
bui <- truncateIndex(bui, cols = "Heating", bins = 4)
 +
 
 +
oggplot(bui[bui$EnergySavingPolicy == "BAU" , ], x = "Time", fill = "Heating", binwidth = 5) +  
 
labs(
 
labs(
title = "Energy commodity flows \n Plant policy = BAU",
+
title = translate("Building stock in Helsinki by heating"),
y = "Total annual energy (GWh/a)"
+
y = translate("Floor area (M m2)")
 
)
 
)
  
futemp <- fu[fu$Fuel %in% c("Heat") , ]
+
oggplot(bui, x = "Time", fill = "Efficiency", binwidth = 5) +  
futemp <- truncateIndex(futemp, cols = "Plant", bins = 10) * -1
+
{if(fi) facet_wrap(~ Energiansäästöpolitiikka) else facet_wrap(~ EnergySavingPolicy)} +  
oggplot(futemp, x = "Time", fill = "Plant", binwidth = 5) + facet_grid(EnergySavingPolicy ~ PlantPolicy) +
 
 
labs(
 
labs(
title = "District heat flow",
+
title = translate("Building stock in Helsinki by efficiency policy"),
y = "Total annual energy (GWh/a)"
+
y = translate("Floor area (M m2)")
 
)
 
)
  
futemp <- fu[fu$Fuel %in% c("Electricity") , ]
+
oggplot(bui, x = "Time", fill = "Renovation", binwidth = 5) +  
futemp <- truncateIndex(futemp, cols = "Plant", bins = 10) * -1
+
{if(fi) facet_wrap(~ Energiansäästöpolitiikka) else facet_wrap(~ EnergySavingPolicy)} +
oggplot(futemp, x = "Time", fill = "Plant", binwidth = 5) + facet_grid(EnergySavingPolicy ~ PlantPolicy) +
 
 
labs(
 
labs(
title = "Electricity flow",
+
title = translate("Building stock in Helsinki by renovation policy"),
y = "Total annual energy (GWh/a)"
+
y = translate("Floor area (M m2)")
 
)
 
)
  
oggplot(emissions[emissions$EnergySavingPolicy == "BAU" , ], x = "Time", fill = "Fuel", binwidth = 5) +  
+
oggplot(bui[bui$EnergySavingPolicy == "BAU" , ], x = "Time", fill = "Building", binwidth = 5) +  
facet_grid(Pollutant ~ PlantPolicy, scale = "free_y") +
+
labs(
labs(
+
title = translate("Building stock in Helsinki"),
title = "Emissions from heating in Helsinki",
+
y = translate("Floor area (M m2)")
x = "Time (Energy saving policy = BAU)",
+
)
y = "Emissions (ton /a)"
 
)
 
  
oggplot(exposure[exposure$Exposure_agent == "PM2.5" , ], x = "Time", fill = "Fuel", binwidth = 5) +
+
oggplot(buildings, x = "Time", fill = "Efficiency", binwidth = 5)+
facet_grid(EnergySavingPolicy ~ PlantPolicy) +
+
{if(fi) facet_grid(Energiansäästöpolitiikka ~ Korjaukset) else facet_grid(EnergySavingPolicy ~ Renovation)} +  
labs(
+
labs(
title = "Exposure to PM2.5 from heating in Helsinki",
+
title = translate("Renovation of buildings by policy and efficiency"),
x = "Time",
+
y = translate("Floor area (M m2)")
y = "Average PM2.5 (µg/m3)"
+
)
)
 
  
oggplot(DALYs, x = "Time", fill = "Fuel", binwidth = 5) + facet_grid(EnergySavingPolicy ~ PlantPolicy) +
+
# Contains also other buildings than district heating and other energy than heating
labs(
+
hea <- EnergyConsumerDemandTotal * temperdays * 24 * 1E-3 # MW -> GWh
title = "Health effects in DALYs of PM2.5 from heating in Helsinki",
+
hea <- hea[hea$EnergySavingPolicy == "Energy saving total" & !hea$Consumable %in% c("District cooling", "Electric cooling") , ]
y = "Health effects (DALY /a)"
+
hea$Time <- as.numeric(as.character(hea$Time))
)
 
  
</rcode>
+
oggplot(truncateIndex(hea, cols = "Temperature", bins = 7), x = "Time", fill = "Temperature", binwidth = 5) +
 +
{if(fi) facet_wrap(~ Hyödyke) else facet_wrap(~ Consumable)} +
 +
labs(
 +
title = translate("Energy consumption in all buildings"),
 +
y = translate("Total energy (GWh /a)")
 +
)
  
==== Preference order ====
+
hea2 <- EnergyNetworkDemand * temperdays * 24 / 1000 # MW -> GWh
 +
hea2$Time <- as.numeric(as.character(hea2$Time))
  
* [http://en.opasnet.org/en-opwiki/index.php?title=Special:RTools&id=LwgipxX9IFCdAIRI Model run 8.9.2015]
+
oggplot(hea2, x = "Time", fill = "Fuel", binwidth = 5) +
* [http://en.opasnet.org/en-opwiki/index.php?title=Special:RTools&id=6XrzKix5Cbp0Ol9S Model run 9.9.2015] with much more graphs
+
{if(fi) facet_wrap(~ Energiansäästöpolitiikka) else facet_wrap(~ EnergySavingPolicy)} +
 +
labs(
 +
title = translate("Energy demand in the network"),
 +
fill = translate("Consumable"),
 +
y = translate("Total energy (GWh /a)")
 +
)
  
<rcode graphics=1>
+
eb <-EnergyNetworkOptim[EnergyNetworkOptim$Process_variable_type == "Activity",]
library(OpasnetUtils)
+
eb <- eb[eb$EnergySavingPolicy == "Energy saving total" , ]
library(ggplot2)
+
colnames(eb@output)[colnames(eb@output) == "Process_variable_name"] <- "Plant"
 +
eb$Process_variable_type <- NULL
 +
 
 +
ebtemp <- eb[eb$Time %in% c("2035") & eb$PlantPolicy == "BAU" & eb$Temperature != "(-18,-15]" , ]
 +
ebtemp <- truncateIndex(ebtemp, cols = "Plant", bins = 7)
  
openv.setN(0) # use medians instead of whole sampled distributions
+
oggplot(ebtemp, x = "Temperature", fill = "Plant", turnx = TRUE) +
BS <- 14 # base_size for graph fonts
+
labs(
objects.latest("Op_en6007", code_name = "answer") # [[OpasnetUtils/Drafts]]
+
title = translate("Power plant activity by temperature daily optim \nPlant policy = BAU, Year = 2035"),
saveobjects <- FALSE
+
x = translate("Temperature of the day"),
 +
y = translate("Average daily activity (MW)")
 +
)
  
# Download all pre-calculated inputs, e.g. building stock.
+
ebtemp <- eb[eb$Time %in% c("2035") & eb$Temperature != "(-18,-15]" , ]
#objects.latest("Op_en7237", code_name = "intermediates") # [[Helsinki energy decision 2015]]
+
ebtemp <- truncateIndex(ebtemp, cols = "Plant", bins = 10)
 +
oggplot(ebtemp, x = "Temperature", fill = "Plant", turnx = TRUE) +
 +
{if(fi) facet_wrap(~ Voimalapolitiikka) else facet_wrap(~ PlantPolicy)} +
 +
labs(
 +
title = translate("Power plant activity by temperature daily optim in 2035"),
 +
x = translate("Temperature of the day"),
 +
y = translate("Average daily activity (MW)")
 +
)
  
decisions <- opbase.data("Op_en7237", subset = "Decisions") # [[Helsinki energy decision 2015]]
+
ebtemp <- eb[eb$Time %in% c("2005") & eb$PlantPolicy == "BAU" & eb$Temperature == "(0,3]" , ]
decisions$Obs <- NULL
+
ebtemp <- truncateIndex(ebtemp, cols = "Plant", bins = 10)
temp <- decisions[decisions$Decision== "PlantPolicy",][1,]
 
decisions <- decisions[decisions$Decision!= "PlantPolicy" , ] # & decisions$Option == "Energy saving total" , ]
 
temp$Option <- "All1"
 
temp$Variable <- "plantParameters"
 
temp$Cell <- ""
 
temp$Change <- "Identity"
 
decisions <- rbind(decisions, temp)
 
  
allplants <- list(
+
oggplot(ebtemp, x = "Plant", fill = "Plant", turnx = TRUE) +
Loviisa2 = c(
+
{if(fi) facet_wrap(~ Lämpötila) else facet_wrap( ~ Temperature)} +
'Sea heat pump for cooling',
+
theme(axis.text.x = element_blank()) + # Turn text and adjust to right
'Household air conditioning',
+
labs(
'Household solar',
+
title = translate("Power plant activity by temperature daily optim \nPlant policy = BAU, Year = 2005"),
"Kymijoki River's plants",
+
y = translate("Average daily activity (MW)")
'Small-scale wood burning',
+
)
'Suvilahti power storage',
+
 
'Suvilahti solar',
+
fu <- fuelUse / 3.6E+6 # From MJ/a -> GWh/a
'Vanhakaupunki museum',
+
fu <- fu[fu$EnergySavingPolicy == "Energy saving total" , ]
'Wind mills'
+
fu$Burner <- NULL
),
+
fu$Time <- as.numeric(as.character(fu$Time))
DataAndSea3 = c(
+
 
'Loviisa nuclear heat'
+
futemp <- fu[fu$Time %in% c("2015", "2035", "2065") & fu$PlantPolicy == "BAU" , ]
),
+
futemp <- truncateIndex(futemp, cols = "Plant", bins = 7) * -1
NesteAndDeep4 = c(
+
 
'Data center heat',
+
oggplot(futemp, x = "Fuel", fill = "Plant", turnx = TRUE) +
'Sea heat pump',
+
{if(fi) facet_grid(Aika ~ Energiansäästöpolitiikka) else facet_grid(Time ~ EnergySavingPolicy)} +
'Household air heat pumps',
+
labs(
'Household geothermal heat'
+
title = translate("Energy commodity flows \n Plant policy = BAU"),
),
+
y = translate("Total annual energy (GWh/a)")
Existing5 = c(
+
)
'Katri Vala heat',
+
 
'Neste oil refinery heat',
+
futemp <- fu[fu$Time %in% c("2005") & fu$PlantPolicy == "BAU" , ]
'Vuosaari C biofuel',
+
futemp <- truncateIndex(futemp, cols = "Plant", bins = 7) * -1
'Deep-drill heat'
+
 
),
+
oggplot(futemp, x = "Fuel", fill = "Plant", turnx = TRUE) +
Backup6 = c(
+
labs(
'Biofuel heat plants',
+
title = translate("Energy commodity flows in 2005 \n Plant policy = BAU"),
'CHP diesel generators',
+
y = translate("Total annual energy (GWh/a)")
'Hanasaari',
 
'Salmisaari A&B',
 
'Vuosaari A',
 
'Vuosaari B'
 
),
 
Lowcost = c(
 
'Katri Vala cooling',
 
'Kellosaari back-up plant',
 
'Small fuel oil heat plants',
 
'Small gas heat plants'
 
 
)
 
)
)
 
  
cheapest <- c(
+
futemp <- fu[fu$Fuel %in% c("Heat") , ]
'Loviisa nuclear heat',
+
futemp <- truncateIndex(futemp, cols = "Plant", bins = 10) * -1
'Data center heat',
 
'Household air heat pumps',
 
'Katri Vala heat',
 
'Neste oil refinery heat',
 
'Small fuel oil heat plants'
 
)
 
  
existing <- c( # Major existing plants are only closed at 2026 if they are closed
+
oggplot(futemp,
"Kymijoki River's plants",
+
x = "Time", fill = "Plant", binwidth = 5) +
'Small-scale wood burning',
+
{if(fi) facet_wrap(~ Voimalapolitiikka) else facet_wrap(~ PlantPolicy)} +
'Katri Vala heat',
+
labs(
'Hanasaari',
+
title = translate("District heat flow"),
'Salmisaari A&B',
+
y = translate("Total annual energy (GWh/a)")
'Vuosaari A',
+
)
'Vuosaari B',
 
'Kellosaari back-up plant',
 
'Small fuel oil heat plants',
 
'Small gas heat plants'
 
)
 
for(i in 1:6) {
 
shutdown <- unlist(allplants[1:i])
 
if(i == 6) shutdown <- unlist(allplants)[!unlist(allplants) %in% cheapest]
 
  
temp <- data.frame(
+
futemp <- fu[fu$Fuel %in% c("Electricity") , ]
Decision_maker = "Helen",
+
futemp <- truncateIndex(futemp, cols = "Plant", bins = 10) * -1
Decision = "PlantPolicy",
+
 
Option = names(allplants[i]),
+
oggplot(futemp, x = "Time", fill = "Plant", binwidth = 5) +
Variable = c("plantParameters"),
+
{if(fi) facet_wrap(~ Voimalapolitiikka) else facet_wrap(~ PlantPolicy)} +
Cell = c(
+
labs(
paste("Plant:", paste(shutdown[!shutdown %in% existing], collapse = ","), ";Parameter:Max,Min,Investment cost;Time:>=2016", sep = ""),
+
title = translate("Electricity flow"),
paste("Plant:", paste(shutdown[shutdown %in% existing], collapse = ","), ";Parameter:Max,Min,Investment cost;Time:>=2026", sep = "")
+
y = translate("Total annual energy (GWh/a)")
),
+
)
Change = c("Replace"),
 
Unit = NA,
 
Result = 0
 
)
 
decisions <- rbind(decisions, temp)
 
}
 
  
DecisionTableParser(decisions)
+
emis <- truncateIndex(emissions, cols = "Emission_site", bins = 5)
 +
emis <- emis[emis$EnergySavingPolicy == "Energy saving total" , ]
 +
emis$Time <- as.numeric(as.character(emis$Time))
 +
oggplot(emis, x = "Time", fill = "Fuel", binwidth = 5) +
 +
{if(fi) facet_grid(Saaste ~ Voimalapolitiikka, scale = "free_y") else facet_grid(Pollutant ~ PlantPolicy, scale = "free_y")} +
 +
labs(
 +
title = translate("Emissions from heating in Helsinki"),
 +
y = translate("Emissions (ton /a)")
 +
)
  
oprint(decisions)
+
da <- DALYs[DALYs$EnergySavingPolicy == "Energy saving total" , ]
 +
da$Time <- as.numeric(as.character(da$Time))
 +
oggplot(da, x = "Time", fill = "Fuel", binwidth = 5) +
 +
{if(fi) facet_wrap(~ Voimalapolitiikka) else facet_wrap(~ PlantPolicy)} +
 +
labs(
 +
title = translate("Health effects of PM2.5 from heating in Helsinki"),
 +
y = translate("Health effects (DALY /a)")
 +
)
  
oprint(data.frame(
+
fp <- fuelPrice[fuelPrice$Fuel %in% c(
Shutdown_order = c(
+
"Biofuel",
"Plants are shut down in this order (most cost efficient first):",
+
"Coal",
paste(allplants[[1]], collapse = ", "),
+
"Electricity_taxed",
paste(allplants[[2]], collapse = ", "),
+
"Fuel oil",
paste(allplants[[3]], collapse = ", "),
+
"Heat",
paste(allplants[[4]], collapse = ", "),
+
"Light oil",
paste(allplants[[5]], collapse = ", "),
+
"Natural gas",
paste(allplants[[6]], collapse = ", "),
+
"Peat"
paste(c("All but the cheapest", cheapest), collapse = ", ")
+
) , ]
 +
fp$Time <- as.numeric(as.character(fp$Time))
 +
levels(fp$Fuel)[levels(fp$Fuel) == "Electricity_taxed"] <- "Electricity"
 +
 
 +
ggplot(translate(fp@output), if(fi) {
 +
aes(x = Aika, y = fuelPriceResult, colour = Polttoaine, group = Polttoaine)
 +
} else {
 +
aes(x = Time, y = fuelPriceResult, colour = Fuel, group = Fuel)
 +
}) +
 +
geom_line(size = 2)+theme_gray(base_size = BS) +
 +
labs(
 +
title = translate("Fuel prices (with tax)"),
 +
y = translate("Price (Eur/MWh)")
 
)
 
)
))
 
  
### Energy production in Helsinki
+
tc <- truncateIndex(totalCost, cols = "Plant", bins = 11) / 10 * -1 # Yearly benefits (costs are negative)
 +
tc <- tc[tc$EnergySavingPolicy == "Energy saving total" , ]
  
objects.latest("Op_en6007", code_name = "answer") # [[OpasnetUtils/Drafts]] findrest
+
oggplot(tc, x = "Time", fill = "Cost", binwidth = 10) +
objects.latest("Op_en7311", code_name = "energyProcess") # [[Helsinki energy production]]
+
{if(fi) facet_wrap(~ Voimalapolitiikka) else facet_wrap( ~ PlantPolicy)} +
objects.latest("Op_en7311", code_name = "plantParameters") # [[Helsinki energy production]]
+
labs(
objects.latest("Op_en4151", code_name = "fuelPrice") # [[Prices of fuels in heat production]]
+
y = translate("Yearly cash flow (Meur)"),
 +
title = translate("Total benefits and costs of energy production")
 +
)
  
objects.latest("Op_en5141", code_name = "EnergyNetworkOptim") # [[Energy balance]] incl EnergyNetworkCost
+
oggplot(tc, x = "Time", fill = "Plant", binwidth = 10) +
 +
{if(fi) facet_wrap(~ Voimalapolitiikka) else facet_wrap(~ PlantPolicy)} +
 +
labs(
 +
y = translate("Yearly cash flow (Meur)"),
 +
title = translate("Total benefits and costs of energy production")
 +
)
  
### Building data in Helsinki
+
eac <- EAC[EAC$EnergySavingPolicy == "Energy saving total" , ] * -1
  
# Observation years must be defined for an assessment.
+
BS <- 14 # Plot the next two graphs with smaller font because they are busy graphs.
obstime <- Ovariable("obstime", data = data.frame(Obsyear = factor(seq(1985, 2065, 10), ordered = TRUE), Result = 1))
 
heatingShares <- 1 # Shares of different heating types in the building stock (already in the building data)
 
heating_before <- FALSE # Should heatingShares be calculated before renovate and timepoints (or after)?
 
efficiency_before <- TRUE # Should efficiencyShares be calculated before renovate and timepoints (or after)?
 
  
objects.latest("Op_en7115", code_name = "stockBuildings") # [[Building stock in Helsinki]]
+
oggplot(eac, x = "PlantPolicy", fill = "Cost", turnx = TRUE) +
objects.latest("Op_en7115", code_name = "changeBuildings") # [[Building stock in Helsinki]]
+
{if(fi) facet_wrap(~ Voimala, scale = "free_y") else facet_wrap(~ Plant, scale = "free_y")} +
objects.latest("Op_en7115", code_name = "renovationRate") # [[Building stock in Helsinki]]
+
labs(
objects.latest("Op_en7115", code_name = "renovationShares") # [[Building stock in Helsinki]]
+
title = translate("Incomes and costs by plant"),  
objects.latest("Op_en5488", code_name = "efficiencyShares") # [[Energy use of buildings]]
+
y = translate("Effective annual cash flow (Meur/a)")
 +
)
  
objects.latest("Op_en6289", code_name = "buildingstest") # [[Building model]] # Generic building model.
+
oggplot(eac, x = "PlantPolicy", fill = "Cost", turnx = TRUE)+
 +
{if(fi) facet_wrap(~ Voimala) else facet_wrap(~ Plant)} +
 +
labs(
 +
title = translate("Incomes and costs by plant"),
 +
y = translate("Effective annual cash flow (Meur/a)")
 +
)
  
## Energy use
+
BS <- 24
##objects.latest("Op_en5488", code_name = "energyUseTemperature")        # [[Energy use of buildings]] temperature version of energyUse
+
eac <- truncateIndex(eac, cols = "Plant", bins = 11)
objects.latest("Op_en5488", code_name = "temperene")        # [[Energy use of buildings]] temperature version of energyUse
 
objects.latest("Op_en5488", code_name = "nontemperene")        # [[Energy use of buildings]] temperature version of energyUse
 
objects.latest("Op_en7317", code_name = "temperatures") # [[Helsinki energy consumption]]
 
##objects.latest("Op_en5488", code_name = "energyUseTemperature") # [[Energy use of buildings]]
 
objects.latest("Op_en5488", code_name = "EnergyConsumerDemand") # [[Energy use of buildings]]
 
  
requiredName <- "Heat" # Name of the fuel type that must match for input and output
+
oggplot(eac, x = "PlantPolicy", fill = "Plant", turnx = TRUE)+
 +
labs(
 +
title = translate("Incomes and costs by plant policy"),
 +
y = translate("Effective annual cash flow (Meur/a)")
 +
)
  
### Energy and emissions
+
oggplot(eac, x = "PlantPolicy", fill = "Cost", turnx = TRUE)+
objects.latest("Op_en7311", code_name = "emissionLocationsPerPlant") # [[Helsinki energy production]] also heatingShares
+
labs(
objects.latest("Op_en2791", code_name = "emissionFactors") # [[Emission factors for burning processes]]
+
title = translate("Incomes and costs by plant policy"),
objects.latest("Op_en2791", code_name = "emissionstest") # [[Emission factors for burning processes]]
+
y = translate("Effective annual cash flow (Meur/a)")
objects.latest("Op_en7311", code_name = "fuelShares") # [[Helsinki energy production]]
+
)
objects.latest("Op_en7311", code_name = "nondynsupply") # [[Helsinki energy production]]
 
timelylimit <- 10000 # The largest production (MW) available at each plant (used to describe time-varying limits).
 
  
## Exposure
+
temp <- truncateIndex(plantParameters[plantParameters$Parameter == "Max" , ], cols = "Plant", bins = 11)
 +
temp <- temp[temp$Time >= 2000 & temp$Time <=2070 , ]
 +
oggplot(temp, x = "Time", fill = "Plant", binwidth = 1) +
 +
{if(fi) facet_wrap(~ Voimalapolitiikka) else facet_wrap(~ PlantPolicy)} +
 +
labs(
 +
title = translate("Energy production capacity by plant policy"),
 +
y = translate("Maximum capacity (MW)")
 +
)
  
objects.latest("Op_en5813", code_name = "exposure") # [[Intake fractions of PM]] uses Humbert iF as default.
+
odag() #Plots a directed acyclic graph of ovariables used in the model.
 +
# This causes an internal error, so it must be the last row of the model.
 +
</rcode>
  
## Health assessment
+
* [http://en.opasnet.org/en-opwiki/index.php?title=Special:RTools&id=mJ2PgbC7TBP6w6RA Model run 22.10.2015] with updated fuel prices. This is NOT used for the assessment report, because the scenarios were based on the previous fuel prices.
  
objects.latest('Op_en2261', code_name = 'totcases') # [[Health impact assessment]] totcases and dependencies.
+
'''This code was used for prioritizing before fuel prices were updated.
objects.latest('Op_en5461', code_name = 'DALYs') # [[Climate change policies and health in Kuopio]] DALYs, DW, L
 
  
population <- 623732 # Contains only the Helsinki city, i.e. assumes no exposure outside city. (Wikipedia)
+
<rcode name="preferenceorder" graphics=1>
# Note: the population size does NOT affect the health impact if the exposure-response function in linear.
+
# This code is Op_en7237/preferenceorder on page [[Helsinki energy decision 2015]]
# However, it DOES affect exposure estimates.
+
library(OpasnetUtils)
 +
library(ggplot2)
  
# DALYshortcut is for a quicker health impact calculations, as it directly uses the Helsinki conditions.
+
openv.setN(0) # use medians instead of whole sampled distributions
 +
BS <- 14 # base_size for graph fonts
 +
objects.latest("Op_en6007", code_name = "answer") # [[OpasnetUtils/Drafts]]
 +
saveobjects <- FALSE
  
objects.latest("Op_en7237", code_name = "DALYshortcut") # [[Helsinki energy decision 2015]]
+
# Download all pre-calculated inputs, e.g. building stock.
 +
#objects.latest("Op_en7237", code_name = "intermediates") # [[Helsinki energy decision 2015]]
  
objects.latest("Op_en7379", code_name = "externalities") # [[External cost]]
+
decisions <- opbase.data("Op_en7237", subset = "Decisions") # [[Helsinki energy decision 2015]]
objects.latest("Op_en3283", code_name = "totalCost") # [[Economic impacts]]
+
decisions$Obs <- NULL
objects.latest("Op_en3283", code_name = "EAC") # [[Economic impacts]]
+
temp <- decisions[decisions$Decision== "PlantPolicy",][1,]
 +
decisions <- decisions[decisions$Decision!= "PlantPolicy" , ] # & decisions$Option == "Energy saving total" , ]
 +
temp$Option <- "All1"
 +
temp$Variable <- "plantParameters"
 +
temp$Cell <- ""
 +
temp$Change <- "Identity"
 +
decisions <- rbind(decisions, temp)
  
################################# Actual model and some intermediate processing.
+
allplants <- list(
 
+
Loviisa2 = c(
DecisionTableParser(decisions)
+
'Sea heat pump for cooling',
 
+
'Household air conditioning',
# Remove previous decisions, if any.
+
'Household solar',
 
+
"Kymijoki River's plants",
forgetDecisions()
+
'Small-scale wood burning',
 
+
'Suvilahti power storage',
renovationRate <- EvalOutput(renovationRate) * 10 # Rates for 10-year periods
+
'Suvilahti solar',
 
+
'Vanhakaupunki museum',
buildings <- EvalOutput(buildings)
+
'Wind mills'
 
+
),
buildings <- buildings[buildings$EnergySavingPolicy == "Energy saving total" , ]
+
DataAndSea3 = c(
cat("Only energy saving total considered in this run.\n")
+
'Loviisa nuclear heat'
 
+
),
EnergyConsumerDemand <- EvalOutput(EnergyConsumerDemand)
+
NesteAndDeep4 = c(
 
+
'Data center heat',
fuelUse <- EvalOutput(fuelUse)
+
'Sea heat pump',
 
+
'Household air heat pumps',
fuelUse$Fuel <- factor(
+
'Household geothermal heat'
fuelUse$Fuel, levels = c(
+
),
"Biofuel",
+
Existing5 = c(
"Coal",
+
'Katri Vala heat',
"Fuel oil",
+
'Neste oil refinery heat',
"Gas",
+
'Vuosaari C biofuel',
"Light oil",
+
'Deep-drill heat'
"Wood",
+
),
"Electricity",
+
Backup6 = c(
"Electricity_taxed",
+
'Biofuel heat plants',
"Heat",
+
'CHP diesel generators',
"Cooling"
+
'Hanasaari',
), ordered = TRUE
+
'Salmisaari A&B',
)
+
'Vuosaari A',
 +
'Vuosaari B'
 +
),
 +
Lowcost = c(
 +
'Katri Vala cooling',
 +
'Kellosaari back-up plant',
 +
'Small fuel oil heat plants',
 +
'Small gas heat plants'
 +
)
 +
)
  
DALY <- EvalOutput(DALYs)
+
cheapest <- c(
DALYs <- unkeep(DALY, cols = c("Age", "Sex", "Population"))
+
'Loviisa nuclear heat',
DALYs <- oapply(DALYs, cols = c("Emission_site", "Emission_height", "Area"), FUN = sum)
+
'Data center heat',
DALYs <- DALYs[DALYs$Response == "Total mortality" , ]
+
'Household air heat pumps',
 +
'Katri Vala heat',
 +
'Neste oil refinery heat',
 +
'Small fuel oil heat plants'
 +
)
  
EnergyNetworkCost <- EvalOutput(EnergyNetworkCost)
+
existing <- c( # Major existing plants are only closed at 2026 if they are closed
 
+
"Kymijoki River's plants",
EnergyNetworkCost$Time <- as.numeric(as.character(EnergyNetworkCost$Time))
+
'Small-scale wood burning',
 
+
'Katri Vala heat',
totalCost <- EvalOutput(totalCost)
+
'Hanasaari',
totalCost@output$Time <- as.numeric(as.character(totalCost@output$Time))
+
'Salmisaari A&B',
totalCost <- unkeep(totalCost[totalCost$Time >= 2015 & totalCost$Time <=2065 , ], sources = TRUE)
+
'Vuosaari A',
 +
'Vuosaari B',
 +
'Kellosaari back-up plant',
 +
'Small fuel oil heat plants',
 +
'Small gas heat plants'
 +
)
 +
for(i in 1:6) {
 +
shutdown <- unlist(allplants[1:i])
 +
if(i == 6) shutdown <- unlist(allplants)[!unlist(allplants) %in% cheapest]
  
# Net present value and effective annual cost
+
temp <- data.frame(
 +
Decision_maker = "Helen",
 +
Decision = "PlantPolicy",
 +
Option = names(allplants[i]),
 +
Variable = c("plantParameters"),
 +
Cell = c(
 +
paste("Plant:", paste(shutdown[!shutdown %in% existing], collapse = ","), ";Parameter:Max,Min,Investment cost;Time:>=2016", sep = ""),
 +
paste("Plant:", paste(shutdown[shutdown %in% existing], collapse = ","), ";Parameter:Max,Min,Investment cost;Time:>=2026", sep = "")
 +
),
 +
Change = c("Replace"),
 +
Unit = NA,
 +
Result = 0
 +
)
 +
decisions <- rbind(decisions, temp)
 +
}
  
discount <- 0.03
+
DecisionTableParser(decisions)
times <- c(2015, 2065)
 
EAC <- EvalOutput(EAC)
 
  
if(saveobjects) {
+
oprint(decisions)
objects.store(list = ls())
 
cat("All objects stored for later use:\n", paste(ls(), collapse = ", "), "\n")
 
}
 
  
####################### Post-processing and graphs
+
oprint(data.frame(
 +
Shutdown_order = c(
 +
"Plants are shut down in this order (most cost efficient first):",
 +
paste(allplants[[1]], collapse = ", "),
 +
paste(allplants[[2]], collapse = ", "),
 +
paste(allplants[[3]], collapse = ", "),
 +
paste(allplants[[4]], collapse = ", "),
 +
paste(allplants[[5]], collapse = ", "),
 +
paste(allplants[[6]], collapse = ", "),
 +
paste(c("All but the cheapest", cheapest), collapse = ", ")
 +
)
 +
))
  
cat("Total DALYs/a by different combinations of policy options.\n")
+
### Energy production in Helsinki
  
temp <- DALYs[as.character(DALYs$Time) %in% c("2015", "2035") & DALYs$Response == "Total mortality" , ]
+
objects.latest("Op_en6007", code_name = "answer") # [[OpasnetUtils/Drafts]] findrest
 +
objects.latest("Op_en7311", code_name = "energyProcess") # [[Helsinki energy production]]
 +
objects.latest("Op_en7311", code_name = "plantParameters") # [[Helsinki energy production]]
 +
objects.latest("Op_en4151", code_name = "fuelPrice") # [[Prices of fuels in heat production]]
  
oprint(
+
objects.latest("Op_en5141", code_name = "EnergyNetworkOptim") # [[Energy balance]] incl EnergyNetworkCost
oapply(temp, INDEX = c("Time", "EnergySavingPolicy", "PlantPolicy"), FUN = sum),
 
caption = "Table 1: Total DALYs/a by different combinations of policy options.",
 
caption.placement = "top",
 
include.rownames = FALSE
 
)
 
  
BS <- 14
+
### Building data in Helsinki
  
eac <- EAC * -1
+
# Observation years must be defined for an assessment.
 +
obstime <- Ovariable("obstime", data = data.frame(Obsyear = factor(seq(1985, 2065, 10), ordered = TRUE), Result = 1))
 +
heatingShares <- 1 # Shares of different heating types in the building stock (already in the building data)
 +
heating_before <- FALSE # Should heatingShares be calculated before renovate and timepoints (or after)?
 +
efficiency_before <- TRUE # Should efficiencyShares be calculated before renovate and timepoints (or after)?
  
oggplot(eac, x = "PlantPolicy", fill = "Cost", turnx = TRUE)+
+
objects.latest("Op_en7115", code_name = "stockBuildings") # [[Building stock in Helsinki]]
facet_wrap(~ Plant, scale = "free_y") +
+
objects.latest("Op_en7115", code_name = "changeBuildings") # [[Building stock in Helsinki]]
labs(title = "Incomes and costs by plant, total energy saving", y = "Effective annual cash flow (Meur/a)")
+
objects.latest("Op_en7115", code_name = "demolitionRate") # [[Building stock in Helsinki]]
 +
objects.latest("Op_en7115", code_name = "renovationRate") # [[Building stock in Helsinki]]
 +
objects.latest("Op_en7115", code_name = "renovationShares") # [[Building stock in Helsinki]]
 +
objects.latest("Op_en5488", code_name = "efficiencyShares") # [[Energy use of buildings]]
  
oggplot(eac, x = "PlantPolicy", fill = "Cost", turnx = TRUE)+
+
objects.latest("Op_en6289", code_name = "buildingstest") # [[Building model]] # Generic building model.
facet_wrap(~ Plant)+
 
labs(title = "Incomes and costs by plant, total energy saving", y = "Effective annual cash flow (Meur/a)")
 
  
BS <- 24
+
## Energy use
 +
##objects.latest("Op_en5488", code_name = "energyUseTemperature")        # [[Energy use of buildings]] temperature version of energyUse
 +
objects.latest("Op_en5488", code_name = "temperene")        # [[Energy use of buildings]] temperature version of energyUse
 +
objects.latest("Op_en5488", code_name = "nontemperene")        # [[Energy use of buildings]] temperature version of energyUse
 +
objects.latest("Op_en7317", code_name = "temperatures") # [[Helsinki energy consumption]]
 +
##objects.latest("Op_en5488", code_name = "energyUseTemperature") # [[Energy use of buildings]]
 +
objects.latest("Op_en5488", code_name = "EnergyConsumerDemand") # [[Energy use of buildings]]
 +
 
 +
requiredName <- "Heat" # Name of the fuel type that must match for input and output
  
eb <-EnergyNetworkOptim[EnergyNetworkOptim$Process_variable_type == "Activity",]
+
### Energy and emissions
colnames(eb@output)[colnames(eb@output) == "Process_variable_name"] <- "Plant"
+
objects.latest("Op_en7311", code_name = "emissionLocationsPerPlant") # [[Helsinki energy production]] also heatingShares
eb$Process_variable_type <- NULL
+
objects.latest("Op_en2791", code_name = "emissionFactors") # [[Emission factors for burning processes]]  
 +
objects.latest("Op_en2791", code_name = "emissionstest") # [[Emission factors for burning processes]]
 +
objects.latest("Op_en7311", code_name = "fuelShares") # [[Helsinki energy production]]
 +
objects.latest("Op_en7311", code_name = "nondynsupply") # [[Helsinki energy production]]
 +
timelylimit <- 10000 # The largest production (MW) available at each plant (used to describe time-varying limits).
  
ebtemp <- eb[eb$Time %in% c("2035") & eb$PlantPolicy == "All1" , ]
+
## Exposure
ebtemp <- truncateIndex(ebtemp, cols = "Plant", bins = 7)
 
  
oggplot(ebtemp, x = "Temperature", fill = "Plant") +
+
objects.latest("Op_en5813", code_name = "exposure") # [[Intake fractions of PM]] uses Humbert iF as default.
labs(
 
title = "Power plant activity by temperature daily optim \nPlant policy = All1, Year = 2035",
 
x = "Temperature of the day",
 
y = "Power output daily average (MW)"
 
)
 
  
ebtemp <- eb[eb$Time %in% c("2035") , ]
+
## Health assessment
ebtemp <- truncateIndex(ebtemp, cols = "Plant", bins = 10)
 
oggplot(ebtemp, x = "Temperature", fill = "Plant") + facet_wrap(~ PlantPolicy)
 
labs(
 
title = "Power plant activity by temperature daily optim \nmoderate energy saving in 2035",
 
x = "Temperature of the day",
 
y = "Power plant activity daily average (MW)"
 
)
 
  
ebtemp <- eb[eb$Time %in% c("2005") & eb$PlantPolicy == "All1" & eb$Temperature == "(0,3]" , ]
+
objects.latest('Op_en2261', code_name = 'totcases') # [[Health impact assessment]] totcases and dependencies.
ebtemp <- truncateIndex(ebtemp, cols = "Plant", bins = 10)
+
objects.latest('Op_en5461', code_name = 'DALYs') # [[Climate change policies and health in Kuopio]] DALYs, DW, L
  
oggplot(ebtemp, x = "Plant", fill = "Plant") + facet_wrap( ~ Temperature) +
+
population <- 623732 # Contains only the Helsinki city, i.e. assumes no exposure outside city. (Wikipedia)
theme(axis.text.x = element_blank()) + # Turn text and adjust to right
+
# Note: the population size does NOT affect the health impact if the exposure-response function in linear.
labs(
+
# However, it DOES affect exposure estimates.
title = "Power plant activity by temperature daily optim \nPlant policy = All1, Year = 2005",
 
y = "Power output daily average (MW)"
 
)
 
  
fu <- fuelUse / 3.6E+6 # From MJ/a -> GWh/a
+
# DALYshortcut is for a quicker health impact calculations, as it directly uses the Helsinki conditions.
fu$Burner <- NULL
 
fu$Time <- as.numeric(as.character(fu$Time))
 
  
futemp <- fu[fu$Time %in% c("2015", "2035", "2065") & fu$PlantPolicy == "All1" , ]
+
objects.latest("Op_en7237", code_name = "DALYshortcut") # [[Helsinki energy decision 2015]]
futemp <- truncateIndex(futemp, cols = "Plant", bins = 7) * -1
 
  
oggplot(futemp, x = "Fuel", fill = "Plant", turnx = TRUE) + facet_grid(Time ~ EnergySavingPolicy) +
+
objects.latest("Op_en7379", code_name = "externalities") # [[External cost]]
labs(
+
objects.latest("Op_en3283", code_name = "totalCost") # [[Economic impacts]]
title = "Energy commodity flows \n Plant policy = All1",
+
objects.latest("Op_en3283", code_name = "EAC") # [[Economic impacts]]
y = "Total annual energy (GWh/a)"
 
)
 
  
futemp <- fu[fu$Time %in% c("2005") & fu$PlantPolicy == "All1" , ]
+
################################# Actual model and some intermediate processing.
futemp <- truncateIndex(futemp, cols = "Plant", bins = 7) * -1
 
  
oggplot(futemp, x = "Fuel", fill = "Plant", turnx = TRUE) +
+
DecisionTableParser(decisions)
labs(
 
title = "Energy commodity flows in 2015 \n Plant policy = All1, Energy saving policy == total",
 
y = "Total annual energy (GWh/a)"
 
)
 
  
futemp <- fu[fu$Fuel %in% c("Heat") , ]
+
# Remove previous decisions, if any.
futemp <- truncateIndex(futemp, cols = "Plant", bins = 10) * -1
 
  
oggplot(futemp,
+
forgetDecisions()
x = "Time", fill = "Plant", binwidth = 5) + facet_wrap(~ PlantPolicy) +
 
labs(
 
title = "District heat flow",
 
y = "Total annual energy (GWh/a)"
 
)
 
  
futemp <- fu[fu$Fuel %in% c("Electricity") , ]
+
renovationRate <- EvalOutput(renovationRate) * 10 # Rates for 10-year periods
futemp <- truncateIndex(futemp, cols = "Plant", bins = 10) * -1
 
  
oggplot(futemp, x = "Time", fill = "Plant", binwidth = 5) + facet_wrap(~ PlantPolicy) +
+
buildings <- EvalOutput(buildings)
labs(
+
 
title = "Electricity flow",
+
buildings <- buildings[buildings$EnergySavingPolicy == "Energy saving total" , ]
y = "Total annual energy (GWh/a)"
+
cat("Only energy saving total considered in this run.\n")
)
 
  
emis <- truncateIndex(emissions, cols = "Emission_site", bins = 5)
+
EnergyConsumerDemand <- EvalOutput(EnergyConsumerDemand)
oggplot(emis, x = "Time", fill = "Fuel", binwidth = 5) + facet_grid(Pollutant ~ PlantPolicy, scale = "free_y") +
 
labs(
 
title = "Emissions from heating in Helsinki",
 
y = "Emissions (ton /a)"
 
)
 
  
oggplot(DALYs, x = "Time", fill = "Fuel", binwidth = 5) + facet_wrap(~ PlantPolicy) +
+
fuelUse <- EvalOutput(fuelUse)
labs(
 
title = "Health effects in DALYs of PM2.5 from heating in Helsinki",
 
y = "Health effects (DALY /a)"
 
)
 
  
fp <- fuelPrice[fuelPrice$Fuel %in% c(
+
fuelUse$Fuel <- factor(
"Biofuel",
+
fuelUse$Fuel, levels = c(
"Coal",
+
"Biofuel",
"Electricity_taxed",
+
"Coal",
"Fuel oil",
+
"Fuel oil",
"Heat",
+
"Gas",
"Light oil",
+
"Light oil",
"Natural gas",
+
"Wood",
"Peat"
+
"Electricity",
) , ]
+
"Electricity_taxed",
fp$Time <- as.numeric(as.character(fp$Time))
+
"Heat",
levels(fp$Fuel)[levels(fp$Fuel) == "Electricity_taxed"] <- "Electricity"
+
"Cooling"
 +
), ordered = TRUE
 +
)
  
ggplot(fp@output, aes(x = Time, y = fuelPriceResult, colour = Fuel, group = Fuel))+
+
DALY <- EvalOutput(DALYs)
geom_line(size = 2)+theme_gray(base_size = BS) +
+
DALYs <- unkeep(DALY, cols = c("Age", "Sex", "Population"))
labs(
+
DALYs <- oapply(DALYs, cols = c("Emission_site", "Emission_height", "Area"), FUN = sum)
title = "Fuel prices (with tax)",
+
DALYs <- DALYs[DALYs$Response == "Total mortality" , ]
y = "Price (Eur / MWh)"
 
)
 
  
tc <- truncateIndex(totalCost, cols = "Plant", bins = 11) / 10 # Yearly costs
+
EnergyNetworkCost <- EvalOutput(EnergyNetworkCost)
  
oggplot(tc, x = "Time", fill = "Cost", binwidth = 10) + facet_wrap( ~ PlantPolicy) +
+
EnergyNetworkCost$Time <- as.numeric(as.character(EnergyNetworkCost$Time))
labs(
 
y = "Yearly costs (Meur)",
 
title = "Total costs of energy production"
 
)
 
  
oggplot(tc, x = "Time", fill = "Plant", binwidth = 10) + facet_wrap( ~ PlantPolicy) +
+
totalCost <- EvalOutput(totalCost)
labs(
+
totalCost@output$Time <- as.numeric(as.character(totalCost@output$Time))
y = "Yearly costs (Meur)",
+
totalCost <- unkeep(totalCost[totalCost$Time >= 2015 & totalCost$Time <=2065 , ], sources = TRUE)
title = "Total costs of energy production"
 
)
 
  
eb <-EnergyNetworkOptim[EnergyNetworkOptim$Process_variable_type == "Activity",]
+
# Net present value and effective annual cost
colnames(eb@output)[colnames(eb@output) == "Process_variable_name"] <- "Plant"
 
eb$Process_variable_type <- NULL
 
  
ebtemp <- eb[eb$Time %in% c("2035") , ]
+
discount <- 0.03
ebtemp <- truncateIndex(ebtemp, cols = "Plant", bins = 11)
+
times <- c(2015, 2065)
 +
EAC <- EvalOutput(EAC)
  
oggplot(ebtemp, x = "Temperature", fill = "Plant", turnx = TRUE) + facet_wrap(~ PlantPolicy) +
+
if(saveobjects) {
labs(
+
objects.store(list = ls())
title = "Power plant activity by temperature daily optim in 2035",
+
cat("All objects stored for later use:\n", paste(ls(), collapse = ", "), "\n")
x = "Temperature of the day",
+
}
y = "Average daily activity (MW)"
 
)
 
  
eac <- truncateIndex(EAC * -1, cols = "Plant", bins = 11)
+
####################### Post-processing and graphs
  
oggplot(eac, x = "PlantPolicy", fill = "Plant", turnx = TRUE)+
+
cat("Total DALYs/a by different combinations of policy options.\n")
labs(title = "Incomes and costs by plant policy\ntotal energy saving", y = "Effective annual cash flow (Meur/a)")
 
  
oggplot(eac, x = "PlantPolicy", fill = "Cost", turnx = TRUE)+
+
temp <- DALYs[as.character(DALYs$Time) %in% c("2015", "2035") & DALYs$Response == "Total mortality" , ]
labs(title = "Incomes and costs by plant policy\ntotal energy saving", y = "Effective annual cash flow (Meur/a)")
 
  
temp <- truncateIndex(plantParameters[plantParameters$Parameter == "Max" , ], cols = "Plant", bins = 11)
+
oprint(
temp <- temp[temp$Time >= 2000 & temp$Time <=2070 , ]
+
oapply(temp, INDEX = c("Time", "EnergySavingPolicy", "PlantPolicy"), FUN = sum),
oggplot(temp, x = "Time", fill = "Plant", binwidth = 1) + facet_wrap(~ PlantPolicy)+
+
caption = "Table 1: Total DALYs/a by different combinations of policy options.",
labs(title = "Energy production capacity by plant policy", y = "Maximum capacity (MW)")
+
caption.placement = "top",
 +
include.rownames = FALSE
 +
)
  
</rcode>
+
BS <- 14
  
==== DALY shortcut ====
+
eac <- EAC * -1
  
This code creates a ready-made DALYs estimate for 1 ug/m^3 PM2.5. It is much quicker to calculate health impacts of case-specific emissions with this ovariable, if there is a large emissions ovariable and if the exposure is such that proportionality can be assumed in health impacts.
+
oggplot(eac, x = "PlantPolicy", fill = "Cost", turnx = TRUE)+
 +
facet_wrap(~ Plant, scale = "free_y") +
 +
labs(title = "Incomes and costs by plant, total energy saving", y = "Effective annual cash flow (Meur/a)")
  
<rcode name="DALYshortcut" label="Initiate DALYshortcut(developers only)" embed=0>
+
oggplot(eac, x = "PlantPolicy", fill = "Cost", turnx = TRUE)+
library(OpasnetUtils)
+
facet_wrap(~ Plant)+
 +
labs(title = "Incomes and costs by plant, total energy saving", y = "Effective annual cash flow (Meur/a)")
  
openv.setN(1000)
+
BS <- 24
  
objects.latest("Op_en5813", code_name = "exposure") # [[Intake fractions of PM]] uses Humbert iF as default.
+
eb <-EnergyNetworkOptim[EnergyNetworkOptim$Process_variable_type == "Activity",]
objects.latest('Op_en2261', code_name = 'totcases') # [[Health impact assessment]] totcases and dependencies.
+
colnames(eb@output)[colnames(eb@output) == "Process_variable_name"] <- "Plant"
objects.latest('Op_en5461', code_name = 'DALYs') # [[Climate change policies and health in Kuopio]] DALYs, DW, L
+
eb$Process_variable_type <- NULL
  
emissions <- Ovariable(output = data.frame(Pollutant = "PM2.5", Result = 1))
+
ebtemp <- eb[eb$Time %in% c("2035") & eb$PlantPolicy == "All1" , ]
population <- 623732
+
ebtemp <- truncateIndex(ebtemp, cols = "Plant", bins = 7)
  
exposure <- EvalOutput(exposure)  
+
oggplot(ebtemp, x = "Temperature", fill = "Plant") +
exposure <- exposure[exposure$Area == "Average" , ]
+
labs(
exposure <- oapply(exposure, cols = c("Plant", "Emission_site", "Emission_height", "Area"), FUN = sum)
+
title = "Power plant activity by temperature daily optim \nPlant policy = All1, Year = 2035",
totcases <- EvalOutput(totcases)
+
x = "Temperature of the day",
DALYs <- EvalOutput(DALYs)
+
y = "Power output daily average (MW)"
DALYs$Pollutant <- "PM2.5" # Why do you have this line? The Pollutant is "PM2.5" already. To get rid of other levels?
+
)
 +
 
 +
ebtemp <- eb[eb$Time %in% c("2035") , ]
 +
ebtemp <- truncateIndex(ebtemp, cols = "Plant", bins = 10)
 +
oggplot(ebtemp, x = "Temperature", fill = "Plant") + facet_wrap(~ PlantPolicy)
 +
labs(
 +
title = "Power plant activity by temperature daily optim \nmoderate energy saving in 2035",
 +
x = "Temperature of the day",
 +
y = "Power plant activity daily average (MW)"
 +
)
  
DALYper1 <- unkeep(DALYs, sources = TRUE, prevresults = TRUE)
+
ebtemp <- eb[eb$Time %in% c("2005") & eb$PlantPolicy == "All1" & eb$Temperature == "(0,3]" , ]
DALYper1$Result <- DALYper1$DALYsResult
+
ebtemp <- truncateIndex(ebtemp, cols = "Plant", bins = 10)
DALYper1$DALYsResult <- NULL
 
DALYper1@name <- ""
 
  
# Short version of DALYs
+
oggplot(ebtemp, x = "Plant", fill = "Plant") + facet_wrap( ~ Temperature) +
DALYs <- Ovariable(
+
theme(axis.text.x = element_blank()) + # Turn text and adjust to right
"DALYs",
+
labs(
dependencies = data.frame(Name = c("DALYper1", "emissions")),  
+
title = "Power plant activity by temperature daily optim \nPlant policy = All1, Year = 2005",
formula = function(...) {
+
y = "Power output daily average (MW)"
if(!"Iter" %in% colnames(emissions@output) & "Iter" %in% colnames(DALYper1@output)) {
+
)
out <- oapply(DALYper1, cols = "Iter", FUN = mean)
+
 
} else {
+
fu <- fuelUse / 3.6E+6 # From MJ/a -> GWh/a
out <- DALYper1
+
fu$Burner <- NULL
}
+
fu$Time <- as.numeric(as.character(fu$Time))
out <- emissions * out
+
 
return(out)
+
futemp <- fu[fu$Time %in% c("2015", "2035", "2065") & fu$PlantPolicy == "All1" , ]
}
+
futemp <- truncateIndex(futemp, cols = "Plant", bins = 7) * -1
)
+
 
 
+
oggplot(futemp, x = "Fuel", fill = "Plant", turnx = TRUE) + facet_grid(Time ~ EnergySavingPolicy) +
objects.store(DALYper1, DALYs)
+
labs(
 
+
title = "Energy commodity flows \n Plant policy = All1",
</rcode>
+
y = "Total annual energy (GWh/a)"
 
+
)
== See also ==
+
 
 
+
futemp <- fu[fu$Time %in% c("2005") & fu$PlantPolicy == "All1" , ]
{{assessment|moderator=Jouni|status=ongoing}}
+
futemp <- truncateIndex(futemp, cols = "Plant", bins = 7) * -1
{{Helsinki energy decision 2015}}  
+
 
 
+
oggplot(futemp, x = "Fuel", fill = "Plant", turnx = TRUE) +
* [https://www.entsoe.eu/Documents/Publications/Statistics/Factsheet/entsoe_sfs2014_web.pdf Entsoe Statistical fact sheet 2014]
+
labs(
* [http://www.talouselama.fi/Tebatti/kysymykset/pienkuluttaja+on+tuulisahkon+maksumies/a2238751 Timo Korpela: Pienkuluttaja on tuulisähkön maksumies]
+
title = "Energy commodity flows in 2015 \n Plant policy = All1, Energy saving policy == total",
* [http://www.hs.fi/mielipide/a1427173539858 Timo Korpela: Helsingin energiaratkaisu tulee harkita tarkoin]
+
y = "Total annual energy (GWh/a)"
* http://energia.fi/sahkomarkkinat/sahkon-hinta-ja-sopimukset/sahkon-alkupera
+
)
* http://energia.fi/julkaisut/sahkomarkkinavisio-2030 (ehkä vähän vanha, 2011??)
+
 
* http://energia.fi/sites/default/files/sahkomarkkinakatsaus_20150701.pdf
+
futemp <- fu[fu$Fuel %in% c("Heat") , ]
* https://www.entsoe.eu/Documents/Publications/Statistics/Factsheet/entsoe_sfs2014_web.pdf
+
futemp <- truncateIndex(futemp, cols = "Plant", bins = 10) * -1
* http://www.nordpoolspot.com/How-does-it-work/The-market-members/Producers/
+
 
* http://energia.fi/sites/default/files/et_labelling_suositus2013_final.pdf
+
oggplot(futemp,
* http://www.vtt.fi/inf/pdf/technology/2014/T165.pdf
+
x = "Time", fill = "Plant", binwidth = 5) + facet_wrap(~ PlantPolicy) +
* http://www.hel.fi/static/ymk/julkaisut/julkaisu-07-14.pdf  
+
labs(
* https://www.tem.fi/files/36292/Energia-_ja_ilmastostrategia_nettijulkaisu_ENGLANNINKIELINEN.pdf
+
title = "District heat flow",
* [[Climate change policies in Helsinki]]: Related assessment on reducing GHG emissions in Helsinki.
+
y = "Total annual energy (GWh/a)"
* [[Climate change policies and health in Kuopio]]: Related assessment on reducing GHG emissions in Kuopio.
+
)
 +
 
 +
futemp <- fu[fu$Fuel %in% c("Electricity") , ]
 +
futemp <- truncateIndex(futemp, cols = "Plant", bins = 10) * -1
 +
 
 +
oggplot(futemp, x = "Time", fill = "Plant", binwidth = 5) + facet_wrap(~ PlantPolicy) +
 +
labs(
 +
title = "Electricity flow",
 +
y = "Total annual energy (GWh/a)"
 +
)
 +
 
 +
emis <- truncateIndex(emissions, cols = "Emission_site", bins = 5)
 +
oggplot(emis, x = "Time", fill = "Fuel", binwidth = 5) + facet_grid(Pollutant ~ PlantPolicy, scale = "free_y") +
 +
labs(
 +
title = "Emissions from heating in Helsinki",
 +
y = "Emissions (ton /a)"
 +
)
 +
 
 +
oggplot(DALYs, x = "Time", fill = "Fuel", binwidth = 5) + facet_wrap(~ PlantPolicy) +
 +
labs(
 +
title = "Health effects in DALYs of PM2.5 from heating in Helsinki",
 +
y = "Health effects (DALY /a)"
 +
)
 +
 
 +
fp <- fuelPrice[fuelPrice$Fuel %in% c(
 +
"Biofuel",
 +
"Coal",
 +
"Electricity_taxed",
 +
"Fuel oil",
 +
"Heat",
 +
"Light oil",
 +
"Natural gas",
 +
"Peat"
 +
) , ]
 +
fp$Time <- as.numeric(as.character(fp$Time))
 +
levels(fp$Fuel)[levels(fp$Fuel) == "Electricity_taxed"] <- "Electricity"
 +
 
 +
ggplot(fp@output, aes(x = Time, y = fuelPriceResult, colour = Fuel, group = Fuel))+
 +
geom_line(size = 2)+theme_gray(base_size = BS) +
 +
labs(
 +
title = "Fuel prices (with tax)",
 +
y = "Price (Eur / MWh)"
 +
)
 +
 
 +
tc <- truncateIndex(totalCost, cols = "Plant", bins = 11) / 10 # Yearly costs
 +
 
 +
oggplot(tc, x = "Time", fill = "Cost", binwidth = 10) + facet_wrap( ~ PlantPolicy) +
 +
labs(
 +
y = "Yearly costs (Meur)",
 +
title = "Total costs of energy production"
 +
)
 +
 
 +
oggplot(tc, x = "Time", fill = "Plant", binwidth = 10) + facet_wrap( ~ PlantPolicy) +
 +
labs(
 +
y = "Yearly costs (Meur)",
 +
title = "Total costs of energy production"
 +
)
 +
 
 +
eb <-EnergyNetworkOptim[EnergyNetworkOptim$Process_variable_type == "Activity",]
 +
colnames(eb@output)[colnames(eb@output) == "Process_variable_name"] <- "Plant"
 +
eb$Process_variable_type <- NULL
 +
 
 +
ebtemp <- eb[eb$Time %in% c("2035") , ]
 +
ebtemp <- truncateIndex(ebtemp, cols = "Plant", bins = 11)
 +
 
 +
oggplot(ebtemp, x = "Temperature", fill = "Plant", turnx = TRUE) + facet_wrap(~ PlantPolicy) +
 +
labs(
 +
title = "Power plant activity by temperature daily optim in 2035",
 +
x = "Temperature of the day",
 +
y = "Average daily activity (MW)"
 +
)
 +
 
 +
eac <- truncateIndex(EAC * -1, cols = "Plant", bins = 11)
 +
 
 +
oggplot(eac, x = "PlantPolicy", fill = "Plant", turnx = TRUE)+
 +
labs(title = "Incomes and costs by plant policy\ntotal energy saving", y = "Effective annual cash flow (Meur/a)")
 +
 
 +
oggplot(eac, x = "PlantPolicy", fill = "Cost", turnx = TRUE)+
 +
labs(title = "Incomes and costs by plant policy\ntotal energy saving", y = "Effective annual cash flow (Meur/a)")
 +
 
 +
temp <- truncateIndex(plantParameters[plantParameters$Parameter == "Max" , ], cols = "Plant", bins = 11)
 +
temp <- temp[temp$Time >= 2000 & temp$Time <=2070 , ]
 +
oggplot(temp, x = "Time", fill = "Plant", binwidth = 1) + facet_wrap(~ PlantPolicy)+
 +
labs(title = "Energy production capacity by plant policy", y = "Maximum capacity (MW)")
 +
 
 +
</rcode>
 +
 
 +
==== DALY shortcut ====
 +
 
 +
This code creates a ready-made DALYs estimate for 1 ug/m^3 PM2.5. It is much quicker to calculate health impacts of case-specific emissions with this ovariable, if there is a large emissions ovariable and if the exposure is such that proportionality can be assumed in health impacts.
 +
 
 +
<rcode name="DALYshortcut" label="Initiate DALYshortcut(developers only)" embed=0>
 +
library(OpasnetUtils)
 +
 
 +
openv.setN(1000)
 +
 
 +
objects.latest("Op_en5813", code_name = "exposure") # [[Intake fractions of PM]] uses Humbert iF as default.
 +
objects.latest('Op_en2261', code_name = 'totcases') # [[Health impact assessment]] totcases and dependencies.
 +
objects.latest('Op_en5461', code_name = 'DALYs') # [[Climate change policies and health in Kuopio]] DALYs, DW, L
 +
 
 +
emissions <- Ovariable(output = data.frame(Pollutant = "PM2.5", Result = 1))
 +
population <- 623732
 +
 
 +
exposure <- EvalOutput(exposure)
 +
exposure <- exposure[exposure$Area == "Average" , ]
 +
exposure <- oapply(exposure, cols = c("Plant", "Emission_site", "Emission_height", "Area"), FUN = sum)
 +
totcases <- EvalOutput(totcases)
 +
DALYs <- EvalOutput(DALYs)
 +
DALYs$Pollutant <- "PM2.5" # Why do you have this line? The Pollutant is "PM2.5" already. To get rid of other levels?
 +
 
 +
DALYper1 <- unkeep(DALYs, sources = TRUE, prevresults = TRUE)
 +
DALYper1$Result <- DALYper1$DALYsResult
 +
DALYper1$DALYsResult <- NULL
 +
DALYper1@name <- ""
 +
 
 +
# Short version of DALYs
 +
DALYs <- Ovariable(
 +
"DALYs",
 +
dependencies = data.frame(Name = c("DALYper1", "emissions")),  
 +
formula = function(...) {
 +
if(!"Iter" %in% colnames(emissions@output) & "Iter" %in% colnames(DALYper1@output)) {
 +
out <- oapply(DALYper1, cols = "Iter", FUN = mean)
 +
} else {
 +
out <- DALYper1
 +
}
 +
out <- emissions * out
 +
return(out)
 +
}
 +
)
 +
 
 +
objects.store(DALYper1, DALYs)
 +
 
 +
</rcode>
 +
 
 +
== See also ==
 +
 
 +
{{assessment|moderator=Jouni|status=ongoing}}
 +
{{Helsinki energy decision 2015}}  
 +
 
 +
{| class="wikitable collapsible collapsed"
 +
! Previous model runs and links
 +
|----
 +
|
 +
 
 +
=== Previous model runs ===
 +
 
 +
==== Final model ====
 +
 
 +
* [http://en.opasnet.org/en-opwiki/index.php?title=Special:RTools&id=pKBjzl8RJnwvvrHA Model run 26.10.2015] nuisance power plants removed from plant-wise cash flow graphs.
 +
* [http://en.opasnet.org/en-opwiki/index.php?title=Special:RTools&id=nZL5q8sr2yvOi2xN Model run 25.10.2015] benefits always positive, costs negative
 +
* [http://en.opasnet.org/en-opwiki/index.php?title=Special:RTools&id=oap5s3pqqrZz9eAP Model run 22.10.2015] contains also energy consumption graphs but objects were not stored.
 +
* [http://en.opasnet.org/en-opwiki/index.php?title=Special:RTools&id=NN5k0XgmmQBsjWb3 Model run 22.10.2015] with Finnish texts and new fuel prices. Objects stored for later examination.
 +
* 5.10.2015 with Finnish texts [http://en.opasnet.org/en-opwiki/index.php?title=Special:RTools&id=UcIL6G6OmFwk1sOg]
 +
* 10.9.2015 model run for the seminar 11.9.: [http://en.opasnet.org/en-opwiki/index.php?title=Special:RTools&id=Lxpx944xwD5V0DBw Preference model] [http://en.opasnet.org/en-opwiki/index.php?title=Special:RTools&id=JOI0ZXiISnNkUNK8 model part 1]  [http://en.opasnet.org/en-opwiki/index.php?title=Special:RTools&id=k7zUPAo436wEbFAg model part 2]
 +
** An additional model run 25.9.2015 to show a directed acyclic graph of the model ovariables [http://en.opasnet.org/en-opwiki/index.php?title=Special:RTools&id=ufoXJLoL8bJSDdki].
 +
* [http://en.opasnet.org/en-opwiki/index.php?title=Special:RTools&id=W9GaPYU04pdgLVtD Model run 9.9.2015] with old and new graphs. ''Custom'' option is the same as ''Cheapest'' in the preference analysis
 +
* [http://en.opasnet.org/en-opwiki/index.php?title=Special:RTools&id=eSpi8FBqfKbl7NKD Model run 6.9.2015]
 +
* [http://en.opasnet.org/en-opwiki/index.php?title=Special:RTools&id=E2jFkLL7QuCFQ0Tt Model run 5.9.2015]
 +
* [http://en.opasnet.org/en-opwiki/index.php?title=Special:RTools&id=d3bp5VSYGCagxhWl Model run 4.9.2015] Cost calculations are up to profit including external costs.
 +
* [http://en.opasnet.org/en-opwiki/index.php?title=Special:RTools&id=9PE7a4B1mBhUjlcR Model run 29.7.2015] Full run with lots of graphs.
 +
 
 +
* [http://en.opasnet.org/en-opwiki/index.php?title=Special:RTools&id=4klHVl14kKW0RqDF What happens if you shut down both fossil and biofuel plants?]
 +
* [http://en.opasnet.org/en-opwiki/index.php?title=Special:RTools&id=lJf2oQkm1wjHOqtE What happens if you shut down coal and gas power plants?]
 +
* [http://en.opasnet.org/en-opwiki/index.php?title=Special:RTools&id=9c3Otq1qJIO19qzx What happens if you shut down both coal-fired power plants?]
 +
 
 +
==== Intermediate calculations without plant optimising ====
 +
 
 +
* [http://en.opasnet.org/en-opwiki/index.php?title=Special:RTools&id=vjTT6BjPtWIkLcAl Model run 2.7.2015] with intermediate result tables but a problem with totcases.
 +
* [http://en.opasnet.org/en-opwiki/index.php?title=Special:RTools&id=pP2FsmdaijIfcz80 Model run 5.7.2015]
 +
* [http://en.opasnet.org/en-opwiki/index.php?title=Special:RTools&id=any4I2Y1gXfWtxER Model run 6.7.2015] with corrected energyBalance model.
 +
* [http://en.opasnet.org/en-opwiki/index.php?title=Special:RTools&id=xmzcj8gvOZsYpScd Model run 7.7.2015]
 +
* [http://en.opasnet.org/en-opwiki/index.php?title=Special:RTools&id=PNSmPRBuFdxysbRO Model run 8.7.2015] with daily heat optimising
 +
* [http://en.opasnet.org/en-opwiki/index.php?title=Special:RTools&id=x0t1a3M44AeiWg4F Model run 9.7.2015] with also consumer electricity and cooling
 +
* [http://en.opasnet.org/en-opwiki/index.php?title=Special:RTools&id=KTNmnTh1Ai1FXOW2 Model run 9.7.2015] attempt to adjust decisions to plausible
 +
* [http://en.opasnet.org/en-opwiki/index.php?title=Special:RTools&id=VXYsYzhq5wihX8g0 Model run 11.7.2015] updated emission factors and decision options
 +
* [http://en.opasnet.org/en-opwiki/index.php?title=Special:RTools&id=oABWo0x0u6zsA8ZY Model run 12.7.2015]
 +
* [http://en.opasnet.org/en-opwiki/index.php?title=Special:RTools&id=ixOkV2SnjMo1Pne1 Model run 15.7.2015] the whole model works but there seems to be a unit conversion error or similar from energy balance on.
 +
* [http://en.opasnet.org/en-opwiki/index.php?title=Special:RTools&id=kZuzQaO3mnpkl8Wz Model run 15.7.2015] long-term plant activity and fuel use added
 +
* [http://en.opasnet.org/en-opwiki/index.php?title=Special:RTools&id=uqEh554tIfmDKjvW Model run 16.7.2015] used to store intermediate results for Answer code.
 +
* [http://en.opasnet.org/en-opwiki/index.php?title=Special:RTools&id=2EIjgeJ0OnJjfJcZ New model initial run 23.7.2015]
 +
* [http://en.opasnet.org/en-opwiki/index.php?title=Special:RTools&id=IxmleCN7hW80URAd Model run 24.7.2015]
 +
* [http://en.opasnet.org/en-opwiki/index.php?title=Special:RTools&id=GQGqRQUwrTX7lzzi Model run 27.7.2015]
 +
* [http://en.opasnet.org/en-opwiki/index.php?title=Special:RTools&id=ejNvy1EscdzooTxP Model run 27.7.2015] with shorter names and clearer graphs.
 +
* [http://en.opasnet.org/en-opwiki/index.php?title=Special:RTools&id=9PE7a4B1mBhUjlcR Model run 29.7.2015]
 +
* [http://en.opasnet.org/en-opwiki/index.php?title=Special:RTools&id=6KeCs0rS7dpdrtHQ Model run 14.8.2015] Total construction corrected but oil heating not yet. Objects saved.
 +
* [http://en.opasnet.org/en-opwiki/index.php?title=Special:RTools&id=yc7vpnJErCPYLoSJ Model run 16.8.2016] With first cost estimates
 +
* [http://en.opasnet.org/en-opwiki/index.php?title=Special:RTools&id=HrRkCq1EyAd0V7bj Model run 16.8.2015] Better cost estimates. Objects stored.
 +
* [http://en.opasnet.org/en-opwiki/index.php?title=Special:RTools&id=POPfXqpcyS9s7Adf Model run 17.8.2015] Incremental oil heating conversion to geothermal implemented.
 +
* [http://en.opasnet.org/en-opwiki/index.php?title=Special:RTools&id=5uDBil9PcGEsv9LJ Model run 29.8.2015] Fixed plot scaling
 +
* [http://en.opasnet.org/en-opwiki/index.php?title=Special:RTools&id=goJdvrDzXp3Toedb Model run 2.9.2015] with updated process and price parameters.
 +
* [http://en.opasnet.org/en-opwiki/index.php?title=Special:RTools&id=NTkgZ2NfWGeQhdMM Model run 4.9.2015] BAU and Helen's bio decision updated.
 +
* [http://en.opasnet.org/en-opwiki/index.php?title=Special:RTools&id=8hJVMdh8aAy1E0sV Model run 5.9.2015] with technical improvements
 +
* [http://en.opasnet.org/en-opwiki/index.php?title=Special:RTools&id=wCUnFoiRLYePywae] some bugs fixed, no the whole model works
 +
* [http://en.opasnet.org/en-opwiki/index.php?title=Special:RTools&id=4jqvkC2hjuJQcvPH Model run 12.10.2015] New temperature data from FMI and WWF energy saving policy (from 8.10.2015 report) added
 +
* [http://en.opasnet.org/en-opwiki/index.php?title=Special:RTools&id=64BJmkBocy0ZEKEu Model run 22.10.2015] with updated fuel prices (no graphs in this run)
 +
 
 +
==== Preference order calculations ====
 +
 
 +
* [http://en.opasnet.org/en-opwiki/index.php?title=Special:RTools&id=LwgipxX9IFCdAIRI Model run 8.9.2015]
 +
* [http://en.opasnet.org/en-opwiki/index.php?title=Special:RTools&id=6XrzKix5Cbp0Ol9S Model run 9.9.2015] with much more graphs
 +
 
 +
=== Relevant links ===
 +
 
 +
* [https://www.entsoe.eu/Documents/Publications/Statistics/Factsheet/entsoe_sfs2014_web.pdf Entsoe Statistical fact sheet 2014]
 +
* [http://www.talouselama.fi/Tebatti/kysymykset/pienkuluttaja+on+tuulisahkon+maksumies/a2238751 Timo Korpela: Pienkuluttaja on tuulisähkön maksumies]
 +
* [http://www.hs.fi/mielipide/a1427173539858 Timo Korpela: Helsingin energiaratkaisu tulee harkita tarkoin]
 +
* http://energia.fi/sahkomarkkinat/sahkon-hinta-ja-sopimukset/sahkon-alkupera
 +
* http://energia.fi/julkaisut/sahkomarkkinavisio-2030 (ehkä vähän vanha, 2011??)
 +
* http://energia.fi/sites/default/files/sahkomarkkinakatsaus_20150701.pdf
 +
* https://www.entsoe.eu/Documents/Publications/Statistics/Factsheet/entsoe_sfs2014_web.pdf
 +
* http://www.nordpoolspot.com/How-does-it-work/The-market-members/Producers/
 +
* http://energia.fi/sites/default/files/et_labelling_suositus2013_final.pdf
 +
* http://www.vtt.fi/inf/pdf/technology/2014/T165.pdf
 +
* http://www.hel.fi/static/ymk/julkaisut/julkaisu-07-14.pdf  
 +
* https://www.tem.fi/files/36292/Energia-_ja_ilmastostrategia_nettijulkaisu_ENGLANNINKIELINEN.pdf
 +
* [[Climate change policies in Helsinki]]: Related assessment on reducing GHG emissions in Helsinki.
 +
* [[Climate change policies and health in Kuopio]]: Related assessment on reducing GHG emissions in Kuopio.
 
* [https://www.edx.org/course/making-sense-climate-science-denial-uqx-denial101x-0 Making sense of climate science denial] a web course by University of Queensland
 
* [https://www.edx.org/course/making-sense-climate-science-denial-uqx-denial101x-0 Making sense of climate science denial] a web course by University of Queensland
 
* [http://www.hs.fi/m/talous/a1434854766302 HS: Kivihiilikielto lässähtänee visioksi] 22,6,2015
 
* [http://www.hs.fi/m/talous/a1434854766302 HS: Kivihiilikielto lässähtänee visioksi] 22,6,2015
Line 1,813: Line 2,379:
 
* [http://www.hel.fi/www/rakvv/fi/tietopankki/ohjeet/ Helsingin rakennusvalvonnan ohjeet]
 
* [http://www.hel.fi/www/rakvv/fi/tietopankki/ohjeet/ Helsingin rakennusvalvonnan ohjeet]
 
* [[:op_fi:Tiedosto:Helsingin_30_prosentin_päästövähennysselvitys.pdf|Helsingin 30 % päästövähennysselvitys]]
 
* [[:op_fi:Tiedosto:Helsingin_30_prosentin_päästövähennysselvitys.pdf|Helsingin 30 % päästövähennysselvitys]]
 +
 +
|}
  
 
== Keywords ==
 
== Keywords ==
  
Energy, renewable energy, nuclear energy, fossil energy, wood pellets, power plants, district heating, decentralised energy production, centralised energy production, cost-effectiveness
+
Energy, renewable energy, nuclear energy, fossil energy, wood pellets, power plants, district heating, decentralised energy production, centralised energy production, cost-effectiveness, Helsinki, climate change, health effects, fine particles, biofuels, energy saving.
  
 
== References ==
 
== References ==
Line 1,825: Line 2,393:
  
 
* {{#l:Assessment of small-scale energy production in Helsinki Metropolitan area.zip}} {{defend|# |This contains all Pasi's assessment's data tables and is very useful!|--[[User:Jouni|Jouni]] ([[User talk:Jouni|talk]]) 17:05, 14 May 2015 (UTC)}}
 
* {{#l:Assessment of small-scale energy production in Helsinki Metropolitan area.zip}} {{defend|# |This contains all Pasi's assessment's data tables and is very useful!|--[[User:Jouni|Jouni]] ([[User talk:Jouni|talk]]) 17:05, 14 May 2015 (UTC)}}
 +
</noinclude>

Latest revision as of 16:11, 28 April 2019

Main message:
Question:

Helsinki will make a large energy decision during fall 2015. it will impact energy production for decades. An important decision requires systematic information. How do we guarantee a continuous and sufficient supply of district heat and electricity in Helsinki around the year for the next fifty years in such a way that the impacts on costs, health, climate change, and sustainable growth are as beneficial as possible? How can decentralised energy production and energy efficiency renovations improve the situation? The latter question was asked by the City Council, and another assessment (coordinated by the city of Helsinki and Helen energy company) will answer that soon.

Answer:

National Institute for Health and Welfare (THL) performed an open assessment on the Opasnet web-workspace during summer and fall 2015 aiming at shared understanding. We utilised knowledge crystals, i.e. regurlarly updated collaborative online answers to specific research questions. Based on them, we built a model called Sofia to assess impacts and implementability of several different energy options in Helsinki. An assessment report| has been published in Finnish.

Sofia can estimate the building stock and energy consumption based on average energy efficiency, floor area, and ambient temperature. Sofia is an energy balance model that optimises costs of energy production while ensuring the supply of district heating in Helsinki for each day. The situation is followed from 1985 to 2065. Sofia looks also at other heat, fuel, and electric power consumption, but not those of industry and traffic.

Based on balanced energy production Sofia estimates the fuel and other costs and greenhouse gas and fine particle emissions from power plants and other energy processes. The model can assess several scenarios and thus compare the overall impacts of different actions, such as energy renovations or new power plants.

Sofia's main conclusion is that the energy solutions seem to fall into two categories: those that produce electric power as a side stream of district heat, like in Hanasaari coal plant and the suggested Vuosaari C biofuel plant; and those that do not produce or even consume a large amount of electricity, like decentralised biofuel heat plants or sea heat pumps. Based on current discussions, the self-sufficiency of electric power in Helsinki seems to be disappearing and probably changing into a deep dependency of outside electricity. The development of the Nordic electric market determines whether this will be a problem or not in the future.

Unfortunately, the electric market is under strong transition, and for example the wind power tariffes complicate the situation, making future predictions of this crucial issue even more difficult. Local heat production solutions are in a great need of a clear and systematic national electric policy. Otherwise, the previously very efficient combined heat and power production will be replaced with something much less efficient in Finland in the future.

If we forget the question about self-sufficiency of electric power and focus only on district heat, there are several cost-effective solutions available. Excess heat from different processes such as data centres or Neste oil refinery seem to be more cost-effective than e.g. Vuosaari C biofuel plant. Also small and large heat pumps that take heat from the environment are cost-effective. District heat from Loviisa 3 nuclear power plant is also cost-effective in our estimates, but we were not able to fully charaterise uncertainties in the investment cost; and we must remember that the decision to build or not to build the reactor is not in the hands of Helsinki.

A major problem with the process heat solutions is that they consume electric power exactly when the demand for power is the largest and price the highest. We were not able to assess the variability of the price of electricity in this assessment, but it is substantial and might change conclusions. Also for this reason, there is a need for a national energy balance model with hourly resolution including eletricity, industry, and traffic.

Health and climate impacts are important in every single option we looked at, together ranging between a fifth and a fourth of all costs, health and climate comprising a half of that each. Surprisingly, differences between policy options in this respect were small even if the reputation of the climate-friendliness of the options was very different. According to Sofia, this is due to several reasons. All large power plants filter fine particles out very effectively, and therefore there are no large differences in health impacts; a clear exception is small-scale wood burning in houses, which has several times larger health problems than any other option despite its marginal role in energy production. Also, the life cycle emissions of fine particles and greenhouse gases is also important: even if the direct emissions from a heat pump are zero, the electric power imported has produced emissions somewhere. Biofuels are considered climate neutral in emission trade, but they still produce emissions during their life cycle. Therefore, even a fuel switch does not produce the expected results.

Of course, the conclusions based on the model depend on the goodness of the data used. There are several uncertainties that should have been clarified had there been more time to work on the topic. Especially the fuel prices are very difficult to predict into the future. Also the fuel taxes are very high for some fuels but not for others. Effectively, the society decides, using taxes, which solutions make sense on the city level. This is a third reason why there should be a national, long-term, and clear energy policy - and tax policy supporting it - based on detailed, open energy balance modelling the best available information.


Scope

Question

Helsinki must be able to provide its residents with reliable, climate-friendly and cost-effective district heating and electricity every day all year round for the decades to come. When this energy balance is assessed, what options does Helsinki have for main energy solutions? What kind of impacts do these options have in terms of

  • climate mitigation,
  • stability (fuel availability etc),
  • cost to the city and citizens,
  • environment,
  • biofuel use,
  • national energy balance,
  • domestic source,
  • health?[1]

Intended use and users

Helsinki City Council will make a major decision in autumn 2015 about renovating old power plants, building a new one, or some other option replacing the need of the old power plants. Therefore, the City Council is the major user of the assessment. There are also secondary uses, such as informing national energy discussion and demonstrating the usefulness of an open combined energy balance and building model.

Participants

The work is coordinated by Jouni Tuomisto from THL / Impact Assessment Unit. Their motivation is to contribute to the decision-making process by bringing quantitative results to help assess the health and other impacts of different options in a transparent manner. Participants that we hope get involved when they are informed about the assessment include

  • THL: Jouni, Pauli, Teemu, Matleena, Julia
  • the City of Helsinki,
  • Helen energy company
  • Uusi energiapolitiikka group
  • Energiaremontti 2015

Boundaries

  • Time: 1985 - 2065
  • Energy need estimated for Helsinki.
  • Main focus is on local heat and power need. Energy balance estimated for Helsinki (electricity nationally).
  • Health impacts estimated for the regional area (ca. 300 km radius)
  • Impacts are assessed separately for the citizen, the city, Helen energy company, and Finland.
  • Transport is not looked at although it is an important energy consumer. This is because there is no interaction with heating except via city structure, and there are no resources to look at that in this assessment. Electric cars would have an interaction with electricity production, but that applies to the total electricity market area (Finland, partly Scandinavia) and is too complex to look at.

Decisions and scenarios

Main article: Helsinki energy decision options 2015

The two options in the official decision preparation as of May 2015 are i) Hanasaari shutdown and Vuosaari C, and ii) Hanasaari 40 bio and Salmisaari 40 bio. However, also other options have been suggested, and also they are evaluated at least superficially.

  1. BAU: Only small, essential renovations are made to current power plants to stay within new emission limits.
  2. Vuosaari C: A new power plant is built in Vuosaari with the capacity to burn 100 % wood-based fuel or any combination of wood-based fuels and coal.
  3. Hanasaari shutdown: The Hanasaari powerplant is shut down, demolished and apartment buildings are built in its place.
  4. Hanasaari 40 bio: The Hanasaari power plant is renovated to burn 40% wood-based fuels and 60% coal.
  5. Salmisaari 40 bio: The Salmisaari power plants are renovated to burn 40% wood-based fuels and 60% coal.
  6. Biofueled heat production units: Salmisaari oilfueled heat plant is shut down and new biofuel burning heat plants are built in Salmisaari and Vuorsaari.
  7. Loviisa nuclear CHP: A third nuclear power plant is built in Loviisa and the heat is used for district heating in Helsinki.
  8. Neste excess heat: The excess heat from the Neste's oil refinery in Porvoo is used for district heating in Helsinki.
  9. Decentralised energy production: The amount of decentralised energy production is increased as much as possible. Practically this means building a lot more solar panels, geothermal power, small-scale wood burning and wind mills around Helsinki.
  10. Large heat pumps: Big heat pumps are installed to draw heat from the Baltic sea or deep from the ground to produce district heating.
  11. Energy saving: With huge energy saving campaigns and by renovating buildings to be more energy efficient the amount of required energy is decreased significantly.
BAU Process heat Helen proposition Zero investment Carbon neutral 2050 CHP bio Distributed and sea
Biofuel heat plants No No Yes No Yes No No
CHP diesel generators No No No No No No Yes
Data center heat No Yes No No No No Yes
Deep-drill heat No No No No No No Yes
Hanasaari renovated for biofuels Yes No Yes No No No
Household air heat pumps Yes No Yes Yes Yes Yes Yes
Household air conditioning Yes No Yes Yes Yes Yes Yes
Household geothermal heat Yes No Yes Yes Yes Yes Yes
Household solar Yes No Yes Yes Yes Yes Yes
Katri Vala cooling Yes Yes Yes Yes Yes Yes Yes
Katri Vala heat Yes Yes Yes Yes Yes Yes Yes
Kellosaari back-up plant Yes Yes Yes Yes Yes Yes Yes
Kymijoki River's plants Yes Yes Yes Yes Yes Yes Yes
Loviisa nuclear heat No Yes No No No No No
Neste oil refinery heat No Yes No No Yes No No
Salmisaari A&B renovated for biofuels Yes Yes Yes No renovated for biofuels Yes
Sea heat pump No No No No Yes No Yes
Sea heat pump for cooling No No No No No No Yes
Small-scale wood burning No No No No No No No
Small gas heat plants Yes Yes Yes Yes No Yes Yes
Small fuel oil heat plants Yes Yes Yes Yes No Yes Yes
Suvilahti power storage Yes Yes Yes Yes Yes Yes Yes
Vanhakaupunki museum Yes Yes Yes Yes Yes Yes Yes
Vuosaari A Yes Yes Yes Yes No Yes Yes
Vuosaari B Yes Yes Yes Yes No Yes Yes
Vuosaari C biofuel No No No No Yes Yes No
Wind mills No No No No Yes Yes Yes



There are two policies that are currently implemented in the model. Each has several options:

  • Energy saving policy: take several actions that reduce the energy demand of the building stock.
    • BAU: business as usual, e.g. renovate 1 % of buildings per year if age > 30 a.
    • Energy saving moderate: renovate 2 %/a
    • Energy saving total: renovate 4 %/a, in addition increase the share of passive buildings up by 25 %-units since 2025, and add the share of sheath reform renovations up by 25 %-units.
    • WWF energy saving: energy saving according to WWF energy saving plan published 8th October 2015. It is based on efficient energy saving actions on buildings and consequental possibility to reduce coal energy. The savings are based on increased energy renovations (2.5 % per year), more effective renovations in 10 % of renovation cases, and demolition of old buildings (1 % per year).[2]
  • Plant policy: Choose an optimal selection of power plant infrastructure. These poicy options are the main focus of the assessment. There is a separate table describing these options.

Timing

The assessment started in May 2015. First draft results are expected before midsummer 2015. Final results should be available well before the City Council makes the decision in autumn, which means that results should exist by September 15th, 2015. There will be a public meeting to present the near-final results and discuss their implications. The meeting was held in THL, Helsinki on 11st September 2015 at noon. The final report was published on 27th October 2015.

Answer

Model with user interface

The final results results can be found from model run 1.11.2015 (token 144638929414). It is the final archived version in English. Objects were stored, so you can download the whole assessment to R in your own computer.

Choose power plants you want to build (or keep running if they already exist) (the default selection is Helen's bio). This will become PlantPolicy: Custom.:
Biofuel heat plants
CHP diesel generators
Data center heat
Deep-drill heat
Hanasaari
Household air heat pumps
Household air conditioning
Household geothermal heat
Katri Vala cooling
Katri Vala heat
Kellosaari back-up plant
Loviisa nuclear heat
Neste oil refinery heat
Salmisaari A&B
Salmisaari biofuel renovation
Sea heat pump
Sea heat pump for cooling
Small gas heat plants
Small fuel oil heat plants
Small-scale wood burning
Vuosaari A
Vuosaari B
Vuosaari C biofuel

Choose power plants to be renovated (PlantPolicy: Custom):
Hanasaari biofuel renovation

+ Show code


Results

Conclusions

See summary in the beginning.


Rationale

Causal diagram for the assessment.


Stakeholders

The impacts are assessed and valued from the point of view of the following stakeholders:

  • The city of Helsinki
  • Helen Oy energy company
  • A citizen of Helsinki
  • Finland
  • Global view

Dependencies

List of key pages used in model


Other models used in the Helsinki assessment (but are not in the core of this assessment)


Analyses

  • Cost-benefit analysis of different options. Costs considered: capital and operational costs of energy production, climate costs (CO2e emissions converted to euros), health (DALYs converted to euros).
  • Total capacity availability and feasibility (applies especially to decentralised option).
  • Temporal heat and power demand and supply (hourly resolution).

Indices

  • Temporal: Time (5-year observation periods)
  • Temperature (3-degree-Celsius intervals for ambient daily average temperatures. It is assumed that heating is not needed above 17 C and cooling is not needed below 24 C. Hot water need is independent of ambient temperature.
  • Decisions: EnergySavingPolicy contains options that reduce the energy need of the building stock and other consumption. PlantPolicy contains options about which energy plants to build (or demolish).
  • Stakeholder (Citizen, City, Helen, Finland)
  • Spatial: City area (summed up after energy need)
  • Health: Response (any disease that is linked to Exposure agents emitted)
  • Emission, exposure: Pollutant or Exposure agent (any agent that is emitted by energy production)
  • Energy production: Burner (type of burner used in the facility where energy is produced), Fuel (type of fuel used in energy production), Heating (type of heating in the building).
  • Buildings: Building [use type], Heating, Constructed, City area, Renovation, Efficiency.


Case-specific ovariables

Name is the name of ovariable that has case-specific rather than default content. Ident is the indentifier of the code that defines the case-specific ovariable. Token is the same as Ident but it uses a specific version of the code rather than the newest version. Latest is the code for an ovariable whose dependencies will be changed, i.e. who has the case-specific ovariable as parent. Get is the same as Latest but a specific version rather than the newest version is fetched.

Case-specific ovariables(-)
ObsNameIdentTokenLatestGetDescription
1buildingsOp_en6289/buildingstestOp_en5488/EnergyConsumerDemand[[Building model]] buildings # Generic building model
2changeBuildingsOp_en7115/changeBuildingsOp_en6289/buildingstest
3demolitionRateOp_en7115/demolitionRateOp_en6289/buildingstest
4efficiencySharesOp_en5488/efficiencySharesOp_en6289/buildingstest
5emissionLocationsOp_en7311/emissionLocationsPerPlantOp_en2791/emissionstest[[Helsinki energy production]] emissionLocations, used by[[Emission factors for burning processes]] emissions
6energyProcessOp_en7311/energyProcessOp_en5141/EnergyNetworkOptim[[Helsinki energy production]] energyProcess, used by [[Energy balance]] EnergyConsumerDemandTotal
7exposureOp_en5813/exposure [[Intake fractions of PM]] exposure # uses Humbert iF as default.
8fuelSharesOp_en7311/fuelSharesOp_en2791/emissionFactors[[Helsinki energy production]] fuelShares, used by ([[Emission factors for burning processes]] emissionFactors?)
9plantParametersOp_en7311/plantParametersOp_en3283/totalCost[[Helsinki energy production]] plantParameters, used by [[Economic impacts]] plantCost
10renovationRateOp_en7115/renovationRateOp_en6289/buildingstest[[Building stock in Helsinki]] renovationRate
11Op_en7115/renovationRate[[Building stock in Helsinki]] renovationRate case-specific adjustment in formula
12renovationSharesOp_en7115/renovationSharesOp_en6289/buildingstest
13stockBuildingsOp_en7115/stockBuildingsOp_en6289/buildingstest
14temperaturesOp_en2959/temperaturesOp_en5488/EnergyConsumerDemand [[Outdoor air temperature in Finland]], used by [[Energy use of buildings]] EnergyConsumerDemand
15temperdaysOp_en2959/temperaturesOp_en5488/EnergyConsumerDemand [[Outdoor air temperature in Finland]]

Calculations

+ Show code


Preference order

This code should be used for new model runs. It is newer but not fully adjusted for its purpose yet.

+ Show code

  • Model run 22.10.2015 with updated fuel prices. This is NOT used for the assessment report, because the scenarios were based on the previous fuel prices.

This code was used for prioritizing before fuel prices were updated.

+ Show code

DALY shortcut

This code creates a ready-made DALYs estimate for 1 ug/m^3 PM2.5. It is much quicker to calculate health impacts of case-specific emissions with this ovariable, if there is a large emissions ovariable and if the exposure is such that proportionality can be assumed in health impacts.

+ Show code

See also

Helsinki energy decision 2015
In English
Assessment Main page | Helsinki energy decision options 2015
Helsinki data Building stock in Helsinki | Helsinki energy production | Helsinki energy consumption | Energy use of buildings | Emission factors for burning processes | Prices of fuels in heat production | External cost
Models Building model | Energy balance | Health impact assessment | Economic impacts
Related assessments Climate change policies in Helsinki | Climate change policies and health in Kuopio | Climate change policies in Basel
In Finnish
Yhteenveto Helsingin energiapäätös 2015 | Helsingin energiapäätöksen vaihtoehdot 2015 | Helsingin energiapäätökseen liittyviä arvoja | Helsingin energiapäätös 2015.pptx