Difference between revisions of "Climate change policies in Helsinki"

From Testiwiki
Jump to: navigation, search
m (Calculations)
(Calculations: rcode reordered: model first, plots into the end. bugfix to work without City_area)
Line 121: Line 121:
 
=== Calculations ===
 
=== Calculations ===
  
*[http://en.opasnet.org/en-opwiki/index.php?title=Special:RTools&id=SOUKa2NQJJkFy9Sz Model run 11.6.2015]
+
*[http://en.opasnet.org/en-opwiki/index.php?title=Special:RTools&id=Iamlt4BsYhUWlQ1q Model run 11.6.2015]
  
 
<rcode graphics=1>
 
<rcode graphics=1>
Line 150: Line 150:
 
############################ City-specific data
 
############################ City-specific data
  
####!------------------------------------------------
+
##########################!------------------------------------------------
 +
## Decisions
 +
decisions <- opbase.data("Op_en7063", subset = "Decisions") # [[Climate change policies in Helsinki]]
 +
 
 +
## Building stock
 
objects.latest("Op_en7115", code_name = "stockBuildings") # [[Building stock in Helsinki]]
 
objects.latest("Op_en7115", code_name = "stockBuildings") # [[Building stock in Helsinki]]
 
objects.latest("Op_en7115", code_name = "changeBuildings") # [[Building stock in Helsinki]]
 
objects.latest("Op_en7115", code_name = "changeBuildings") # [[Building stock in Helsinki]]
Line 156: Line 160:
 
objects.latest("Op_en7115", code_name = "renovationShares") # [[Building stock in Helsinki]]
 
objects.latest("Op_en7115", code_name = "renovationShares") # [[Building stock in Helsinki]]
  
 +
objects.latest("Op_en6289", code_name = "initiate") # [[Building model]] # Generic building model.
 +
 +
## Energy use (needed for buildings submodel)
 +
objects.latest("Op_en5488", code_name = "initiate") # [[Energy use of buildings]]
 +
 +
## Energy and emissions
 
objects.latest("Op_en7311", code_name = "emissionLocations") # [[Helsinki energy production]] also heatingShares
 
objects.latest("Op_en7311", code_name = "emissionLocations") # [[Helsinki energy production]] also heatingShares
 +
objects.latest("Op_en2791", code_name = "initiate") # [[Emission factors for burning processes]]
 +
objects.latest("Op_en7311", code_name = "fuelShares") # [[Helsinki energy production]]
 +
 +
## Exposure
 +
 +
## Health assessment
 +
 +
objects.latest('Op_en2261', code_name = 'initiate') # [[Health impact assessment]] dose, RR, totcases.
 +
objects.latest('Op_en5917', code_name = 'initiate') # [[Disease risk]] disincidence
 +
objects.latest('Op_en5461', code_name = 'DALYs') # [[Climate change policies and health in Kuopio]] DALYs, DW, L
 +
 +
frexposed <- 1 # fraction of population that is exposed
 +
bgexposure <- 0 # Background exposure to an agent (a level below which you cannot get in practice)
 +
BW <- 70 # Body weight (is needed for RR calculations although it is irrelevant for PM2.5)
 +
 +
population <- 623732 # Contains only the Helsinki city, i.e. assumes no exposure outside city. (Wikipedia)
 +
# Note: the population size does NOT affect the health impact as it cancels out. However, it DOES affect
 +
# exposure estimates.
 +
 +
#########################i--------------------------------------------------
 +
  
###################### Decisions
+
################# Actual model and some intermediate processing.
#
 
decisions <- opbase.data("Op_en7063", subset = "Decisions") # [[Climate change policies in Helsinki]]
 
  
 
DecisionTableParser(decisions)
 
DecisionTableParser(decisions)
Line 176: Line 205:
  
 
renovationRate <- EvalOutput(renovationRate) * 10 # Rates for 10-year periods
 
renovationRate <- EvalOutput(renovationRate) * 10 # Rates for 10-year periods
 
#################### Energy use (needed for buildings submodel)
 
 
####!------------------------------------------------
 
objects.latest("Op_en5488", code_name = "initiate") # [[Energy use of buildings]]
 
####i------------------------------------------------
 
 
###################### Actual building model
 
# The building stock is measured as m^2 floor area.
 
 
####!------------------------------------------------
 
objects.latest("Op_en6289", code_name = "initiate") # [[Building model]] # Generic building model.
 
####i------------------------------------------------
 
  
 
buildings <- EvalOutput(buildings)
 
buildings <- EvalOutput(buildings)
Line 203: Line 219:
 
ordered = TRUE
 
ordered = TRUE
 
)
 
)
 +
 +
exposure <- EvalOutput(exposure)
 +
 +
exposure@output <- exposure@output[exposure@output$Area == "Average" , ] # Helsinki is an average area,
 +
# rather than rural or urban.
 +
 +
totcases <- EvalOutput(totcases)
 +
totcases@output$Time <- as.numeric(as.character(totcases@output$Time))
 +
totcases <- oapply(totcases, cols = c("Age", "Sex"), FUN = sum)
 +
 +
totcases <- truncateIndex(totcases, cols = "Heating", bins = 5)
 +
#levels(totcases@output$Heating)[levels(totcases@output$Heating) == "Long-distance heating"] <- "District heating"
 +
 +
DALYs <- EvalOutput(DALYs)
 +
 +
####################### Post-processing and graphs
  
 
bui <- oapply(buildings * 1E-6, cols = c("City_area", "buildingsSource"), FUN = sum)
 
bui <- oapply(buildings * 1E-6, cols = c("City_area", "buildingsSource"), FUN = sum)
Line 250: Line 282:
 
)
 
)
  
###################### Energy and emissions
+
#heatingEnergy <- EvalOutput(heatingEnergy)
 
 
#############################
 
# Toinen korjaus
 
#############################
 
#energyUse <- EvalOutput(energyUse)
 
#levels(energyUse@output$Building)[levels(energyUse@output$Building) == "Detached houses"] <- "Residential"
 
#temp <- energyUse@output[energyUse@output$Heating == "Oil",]
 
#temp$Heating <- "Other"
 
#energyUse@output <- rbind(energyUse@output, temp)
 
#############################
 
 
 
####!------------------------------------------------
 
objects.latest("Op_en2791", code_name = "initiate") # [[Emission factors for burning processes]]
 
objects.latest("Op_en7311", code_name = "fuelShares") # [[Helsinki energy production]]
 
####i------------------------------------------------
 
 
 
heatingEnergy <- EvalOutput(heatingEnergy)
 
 
 
################ Transport and fate
 
 
 
####!------------------------------------------------
 
#iF <- Ovariable("iF", ddata = "Op_en3435", subset = "Intake fractions of PM")
 
# [[Exposure to PM2.5 in Finland]] Humbert et al 2011 data
 
####i------------------------------------------------
 
  
#colnames(iF@data) <- gsub("[ \\.]", "_", colnames(iF@data))
+
#emissions <- EvalOutput(emissions)
#iF@data$iFResult <- iF@data$iFResult * 1E-6
 
 
 
#################################
 
# Kolmas korjaus
 
# fuelShares:sta puuttuu Heating-Other lokaatio
 
# emissionLocations:sta puuttuu Heating-Oil,Other lokaatiot (myös "District heating")
 
# heatingEnergy:n Heating-District vastaa fuelShares:ssa jotain turvepohjaista tuotantoa
 
# emissions@formula:ssa yksi rivi bugaa
 
#################################
 
#temp <- as.character(heatingEnergy@output$Heating)
 
#temp[temp == "District"]  <- "District heating"
 
#heatingEnergy@output$Heating <- temp
 
 
 
#emissionLocations <- EvalOutput(emissionLocations)
 
#levels(emissionLocations@output$Building)[levels(emissionLocations@output$Building) == "Detached houses"] <- "Residential"
 
#temp <- emissionLocations@output[emissionLocations@output$Heating == "District",]
 
#temp$Heating <- rep("District heating", nrow(temp))
 
#emissionLocations@output <- rbind(emissionLocations@output, temp)
 
#temp <- emissionLocations@output[emissionLocations@output$Heating == "Heating oil",]
 
#temp$Heating <- rep("Oil", nrow(temp))
 
#emissionLocations@output <- rbind(emissionLocations@output, temp)
 
#temp <- emissionLocations@output[emissionLocations@output$Heating == "Other sources",]
 
#temp$Heating <- rep("Other", nrow(temp))
 
#emissionLocations@output <- rbind(emissionLocations@output, temp)
 
 
 
#temp <- fuelShares@data[1,]
 
#temp$Heating <- "Other"
 
#temp$Burner <- "*"
 
#temp$Fuel <- "*"
 
#temp$Time <- "*"
 
#temp$fuelSharesResult <- 0
 
#fuelShares@data <- rbind(fuelShares@data, temp)
 
 
 
#temp <- function(...){
 
# out <- oapply(heatingEnergy, cols = c("Building", "Efficiency"), FUN = sum)
 
# out <- out * fuelShares * emissionFactors * 3.6 * 1e-09
 
# out <- unkeep(out * emissionLocations, sources = TRUE, prevresults = TRUE)
 
# out@output$Emission_site <- as.factor(
 
# ifelse(
 
# out@output$Emission_site == "At site of consumption",
 
# as.character(out@output$City_area),
 
# as.character(out@output$Emission_site)
 
# )
 
# )
 
# out <- oapply(out, cols = c("Burner", "City_area"), FUN = sum)
 
# return(out)
 
#}
 
#################################
 
 
 
emissions <- EvalOutput(emissions)
 
 
emissions@output$Time <- as.numeric(as.character(emissions@output$Time))
 
emissions@output$Time <- as.numeric(as.character(emissions@output$Time))
  
Line 333: Line 291:
 
hea <- oapply(heatingEnergy * 1E-6, cols = c("City_area", "buildingsSource"), FUN = sum)
 
hea <- oapply(heatingEnergy * 1E-6, cols = c("City_area", "buildingsSource"), FUN = sum)
 
hea <- truncateIndex(hea, cols = "Heating", bins = 4)@output
 
hea <- truncateIndex(hea, cols = "Heating", bins = 4)@output
#levels(hea$Heating)[levels(hea$Heating) == "Long-distance heating"] <- "District heating"
 
  
 
ggplot(hea, aes(x = Time, weight = heatingEnergyResult, fill = Heating)) + geom_bar(binwidth = 5) + # Tuplamuunnos *1e-6 pois
 
ggplot(hea, aes(x = Time, weight = heatingEnergyResult, fill = Heating)) + geom_bar(binwidth = 5) + # Tuplamuunnos *1e-6 pois
Line 343: Line 300:
 
)
 
)
  
emis <- truncateIndex(emissions, cols = "Emission_site", bins = 5)@output
+
if("Emission_site" %in% colnames(emissions@output)) {
 +
emis <- truncateIndex(emissions, cols = "Emission_site", bins = 5)@output
  
ggplot(subset(emis, EfficiencyPolicy == "BAU" & FuelPolicy == "BAU"), aes(x = Time, weight = emissionsResult, fill = Emission_site)) + geom_bar(binwidth = 5) +
+
ggplot(subset(emis, EfficiencyPolicy == "BAU" & FuelPolicy == "BAU"), aes(x = Time, weight = emissionsResult, fill = Emission_site)) + geom_bar(binwidth = 5) +
facet_grid(Pollutant ~ RenovationPolicy, scale = "free_y") + theme_gray(base_size = BS) +
+
facet_grid(Pollutant ~ RenovationPolicy, scale = "free_y") + theme_gray(base_size = BS) +
labs(
+
labs(
title = "Emissions from heating in Helsinki",
+
title = "Emissions from heating in Helsinki",
x = "Time",
+
x = "Time",
y = "Emissions (ton /a)"
+
y = "Emissions (ton /a)"
)
+
)
 +
}
  
ggplot(subset(emis, EfficiencyPolicy == "BAU" & RenovationPolicy == "BAU"), aes(x = Time, weight = emissionsResult, fill = Fuel)) + geom_bar(binwidth = 5) +
+
ggplot(subset(emissions@output, EfficiencyPolicy == "BAU" & RenovationPolicy == "BAU"), aes(x = Time, weight = emissionsResult, fill = Fuel)) + geom_bar(binwidth = 5) +
 
facet_grid(Pollutant ~ FuelPolicy, scale = "free_y") + theme_gray(base_size = BS) +
 
facet_grid(Pollutant ~ FuelPolicy, scale = "free_y") + theme_gray(base_size = BS) +
 
labs(
 
labs(
Line 361: Line 320:
 
)
 
)
  
ggplot(subset(emis, EfficiencyPolicy == "BAU" & FuelPolicy == "BAU"), aes(x = Time, weight = emissionsResult, fill = Fuel)) + geom_bar(binwidth = 5) +
+
ggplot(subset(emissions@output, EfficiencyPolicy == "BAU" & FuelPolicy == "BAU"), aes(x = Time, weight = emissionsResult, fill = Fuel)) + geom_bar(binwidth = 5) +
 
facet_grid(Pollutant ~ RenovationPolicy, scale = "free_y") + theme_gray(base_size = BS) +
 
facet_grid(Pollutant ~ RenovationPolicy, scale = "free_y") + theme_gray(base_size = BS) +
 
labs(
 
labs(
Line 369: Line 328:
 
)
 
)
  
###################### Health assessment
+
#exposure <- EvalOutput(exposure)
 
 
####!------------------------------------------------
 
objects.latest('Op_en2261', code_name = 'initiate') # [[Health impact assessment]] dose, RR, totcases.
 
objects.latest('Op_en5917', code_name = 'initiate') # [[Disease risk]] disincidence
 
directs <- tidy(opbase.data("Op_en5461", subset = "Direct inputs"), direction = "wide") # [[Climate change policies and health in Kuopio]]
 
####i------------------------------------------------
 
 
 
colnames(directs) <- gsub(" ", "_", colnames(directs))
 
 
 
### Use these population and iF values in health impact assessment. Why?
 
 
 
frexposed <- 1 # fraction of population that is exposed
 
bgexposure <- 0 # Background exposure to an agent (a level below which you cannot get in practice)
 
BW <- 70 # Body weight (is needed for RR calculations although it is irrelevant for PM2.5)
 
 
 
population <- 623732 # Contains only the Helsinki city, i.e. assumes no exposure outside city. (Wikipedia)
 
# Note: the population size does NOT affect the health impact as it cancels out. However, it DOES affect
 
# exposure estimates.
 
 
 
exposure <- EvalOutput(exposure)
 
  
 
ggplot(subset(exposure@output, RenovationPolicy == "BAU" & EfficiencyPolicy == "BAU" & FuelPolicy == "BAU"), aes(x = Time, weight = exposureResult, fill = Heating)) + geom_bar(binwidth = 5) + facet_grid(Area ~ Emission_height) + theme_gray(base_size = BS) +
 
ggplot(subset(exposure@output, RenovationPolicy == "BAU" & EfficiencyPolicy == "BAU" & FuelPolicy == "BAU"), aes(x = Time, weight = exposureResult, fill = Heating)) + geom_bar(binwidth = 5) + facet_grid(Area ~ Emission_height) + theme_gray(base_size = BS) +
Line 397: Line 336:
 
y = "Average PM2.5 (µg/m3)"
 
y = "Average PM2.5 (µg/m3)"
 
)
 
)
 
exposure@output <- exposure@output[exposure@output$Area == "Urban" , ] # Helsinki is an urban area,
 
# rather than rural or urban.
 
  
 
ggplot(subset(exposure@output, EfficiencyPolicy == "BAU"), aes(x = Time, weight = exposureResult, fill = Heating)) + geom_bar(binwidth = 5) + facet_grid(FuelPolicy ~ RenovationPolicy) + theme_gray(base_size = BS) +
 
ggplot(subset(exposure@output, EfficiencyPolicy == "BAU"), aes(x = Time, weight = exposureResult, fill = Heating)) + geom_bar(binwidth = 5) + facet_grid(FuelPolicy ~ RenovationPolicy) + theme_gray(base_size = BS) +
Line 407: Line 343:
 
y = "Average PM2.5 (µg/m3)"
 
y = "Average PM2.5 (µg/m3)"
 
)
 
)
 
totcases <- EvalOutput(totcases)
 
#totcases@output$Time <- as.numeric(as.character(totcases@output$Time))
 
totcases <- oapply(totcases, cols = c("Age", "Sex"), FUN = sum)
 
 
totcases <- truncateIndex(totcases, cols = "Heating", bins = 5)
 
levels(totcases@output$Heating)[levels(totcases@output$Heating) == "Long-distance heating"] <- "District heating"
 
  
 
ggplot(subset(totcases@output, EfficiencyPolicy == "BAU" & FuelPolicy == "BAU"), aes(x = Time, weight = totcasesResult, fill = Heating))+geom_bar(binwidth = 5) +  
 
ggplot(subset(totcases@output, EfficiencyPolicy == "BAU" & FuelPolicy == "BAU"), aes(x = Time, weight = totcasesResult, fill = Heating))+geom_bar(binwidth = 5) +  
Line 425: Line 354:
  
 
if(figstofile) ggsave("Figure8.eps", width = 11, height = 7)
 
if(figstofile) ggsave("Figure8.eps", width = 11, height = 7)
 
DW <- Ovariable("DW", data = data.frame(directs["Trait"], Result = directs$DW))
 
L <- Ovariable("L", data = data.frame(directs["Trait"], Result = directs$L))
 
 
DALYs <- totcases * DW * L
 
  
 
#cat("Total DALYs/a by different combinations of policy options.\n")
 
#cat("Total DALYs/a by different combinations of policy options.\n")
Line 446: Line 370:
 
)
 
)
  
ggplot(subset(DALYs@output, FuelPolicy == "BAU" & Trait == "Total mortality"), aes(x = Time, weight = Result, fill = Heating))+geom_bar(binwidth = 5) +  
+
ggplot(subset(DALYs@output, FuelPolicy == "BAU" & Trait == "Total mortality"), aes(x = Time, weight = DALYsResult, fill = Heating))+geom_bar(binwidth = 5) +  
 
facet_grid(EfficiencyPolicy ~ RenovationPolicy) +
 
facet_grid(EfficiencyPolicy ~ RenovationPolicy) +
 
theme_gray(base_size = BS) +
 
theme_gray(base_size = BS) +
Line 455: Line 379:
 
)
 
)
  
ggplot(subset(DALYs@output, Time == 2030 & Trait == "Total mortality"), aes(x = FuelPolicy, weight = Result, fill = Heating))+geom_bar() +  
+
ggplot(subset(DALYs@output, Time == 2030 & Trait == "Total mortality"), aes(x = FuelPolicy, weight = DALYsResult, fill = Heating))+geom_bar() +  
 
facet_grid(EfficiencyPolicy ~ RenovationPolicy) +
 
facet_grid(EfficiencyPolicy ~ RenovationPolicy) +
 
theme_gray(base_size = BS) +
 
theme_gray(base_size = BS) +
Line 467: Line 391:
 
koord <- tidy(koord, widecol = "Location")
 
koord <- tidy(koord, widecol = "Location")
 
colnames(koord)[colnames(koord) == "City_area"] <- "Emission_site"
 
colnames(koord)[colnames(koord) == "City_area"] <- "Emission_site"
colnames(koord)[colnames(koord) == "N"] <- "X"
+
#colnames(koord)[colnames(koord) == "N"] <- "X"
colnames(koord)[colnames(koord) == "E"] <- "Y"
+
#colnames(koord)[colnames(koord) == "E"] <- "Y"
 
koord$Result <- 1
 
koord$Result <- 1
 
koord <- Ovariable("koord", output = koord, marginal = colnames(koord) != "Result")
 
koord <- Ovariable("koord", output = koord, marginal = colnames(koord) != "Result")
  
emis <- emissions * koord
+
if("Emission_site" %in% colnames(emissions@output)) {
  
emis@output <- subset(emis@output, RenovationPolicy == "BAU" & EfficiencyPolicy == "BAU" & FuelPolicy == "BAU" & Pollutant == "PM2.5")
+
emis <- emissions * koord
emis <- oapply(emis, INDEX = c("Emission_site", "X", "Y"), FUN = sum)
 
  
MyRmap(
+
emis@output <- subset(emis@output, RenovationPolicy == "BAU" & EfficiencyPolicy == "BAU" &
 +
FuelPolicy == "BAU" & Pollutant == "PM2.5")
 +
emis <- oapply(emis, INDEX = c("Emission_site", "N", "E"), FUN = sum)
 +
 
 +
MyRmap(
 
ova2spat(
 
ova2spat(
emis,  
+
emis,  
coord = c("X", "Y"),  
+
coord = c("E", "N"),  
proj4string = "+init=epsg:21781"
+
proj4string = "+init=epsg:3067"
), # Swiss Land Survey uses CH1903
+
), # National Land Survey Finland uses ETRS89 / ETRS-TM35FIN
# http://spatialreference.org/ref/epsg/21782/
+
#http://spatialreference.org/ref/epsg/etrs89-etrs-tm35fin/
# http://en.wikipedia.org/wiki/Swiss_coordinate_system
 
 
plotvar = "Result",  
 
plotvar = "Result",  
 
legend_title = "PM2.5 emissions (ton/a)",  
 
legend_title = "PM2.5 emissions (ton/a)",  
Line 490: Line 416:
 
pch = 19,  
 
pch = 19,  
 
cex = sqrt(result(emis)) * 3
 
cex = sqrt(result(emis)) * 3
)
+
)
 +
}
 +
 
 
# Map saved manually to .eps with width = 1280, height = 960 px.
 
# Map saved manually to .eps with width = 1280, height = 960 px.
 
</rcode>
 
</rcode>

Revision as of 18:33, 11 June 2015



This assessment was used for training in Decision analysis and risk management 2015 course. To see student contributions, see a previous version.

Scope

Question

What is the energy need of buildings in Helsinki and the related greenhouse gas emissions and health impacts? How can these be affected by renovation of buildings and fuel changes in district heating?

Intended use and users

A problem in the climate policy practices in the City of Helsinki is that there is not enough information about different costs and impacts of different climate change mitigation measures, especially in the long term. This is slowing down the decision-making process. The results of this course will be used at the City of Helsinki Environment Centre to assess the outcomes of different ways to reduce GHG emissions. The results will help in identifying the most favourable ways to cut GHG emissions.

Participants

Boundaries

  • Time: 2010-2040
  • Spatial: the city of Helainki

Decisions and scenarios

  • Renovate 1 or 2 % of buildings per year.
  • Change the district heating fuel from 100 % fossil to 50 % fossil, 50 % wood-based fuel.

See also decisions in Climate change policies and health in Kuopio.



Timing

The data will be collected before the end of the Decision analysis and risk management 2015 course (12th May, 2015). The model runs will be finalised soon after that. Results will be available before September 2015.

Answer

Results

Conclusions

Rationale

Error creating thumbnail: Unable to save thumbnail to destination
Causal diagram of climate change policies in Helsinki. This assessment only relates to the building stock part of the diagram.

Stakeholders

  • City of Helsinki

Dependencies

Data files

Discussions

These are some resolutions of discussions within the assessment.

  • City level climate change mitigation is not useless although international treaties are important for success.D↷
  • Climate change adaptation is not more important than mitigation on city level.R↻
  • Citizens may have a key role in implementing city climate policies.D↷
  • Food issues are underrepresented in climate discussions although food is a major emission source.R↻
  • The role of district heating by nuclear energy in Helsinki is unclear.D↷
  • There may be large uncertainty in CO2 emission factors of biofuels.D↷

Analyses

Indices

The data will be classified according to these indices:

  • Building: Residential, Public, Industrial, Other. For separating different use purposes of buildings.
  • Constructed: Years of construction of the buildings in the format 1990-1999, 2000-2009, 2010-2013.
  • Heating: District, Electricity, Geothermal, Oil, Wood,

The results of each ovariable will be measuring these things:

  • buildings: total floor area in m2.

Calculations

+ Show code


# : In the results the graph "Energy used in heating in Helsinki" shows a twice or thrice bigger energy use for Oil and Other than the table "Total energy consumption in Helsinki in 2013 (GWh)" on Helsinki energy consumption would suggest. --Heta (talk) 08:18, 11 June 2015 (UTC)

# : Effective floor area of buildings by building type -table on page Building stock in Helsinki has the current building stock at 7 million m2 more than the graphs in the result, and the future estimates are even more higher than the code result estimates --Heta (talk) 10:49, 11 June 2015 (UTC)

See also

Other related assessments
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

Other variables and pages to look at

Possibly useful variables
Almost empty pages that should be removed

Keywords

Helsinki, energy, building stock, heating, renovation.

References


Related files