+ Show code- Hide code library(OpasnetUtils)
#########3# Calculate all building events (constructions, demolitions, renovations)
buildings <- Ovariable("buildings",
dependencies = data.frame(Name = c(
"buildingStock", # Current building stock
"heatingShares", # Heating types of current buildings
"efficiencies", # Energy efficiencies of current buildings
"construction", # Construction rate in the future
"efficienciesNew", # Energy efficiencies in the future
"buildingTypes", # A dummy variable to combine two different indices: Building and Building2
"heatingSharesNew", # Heating types of the buildings in the future
"renovationShares", # Fraction of renovation type when renovation is done.
"renovation", # Percentage of renovations per year
"year" # A dummy variable to combine time periods to numerical time axis.
)),
formula = function(...) {
# Current building stock
Now <- buildingStock * heatingShares * efficiencies * year
# Construction in ten years multiplied by fraction of energy classes and heating types.
New <- construction * 10 * efficienciesNew * buildingTypes * heatingSharesNew * year
out <- EvalOutput(Ovariable("out", data = orbind(Now, New)))
out <- unkeep(out, cols = "Building2", sources = TRUE, prevresults = TRUE)
# All source indices can be unkept, because each has only one location.
buildings <- oapply(buildings, cols = c("Constructed", "Renovationyear", "Age"), FUN = "sum", na.rm = TRUE)
buildings@output$Year <- as.numeric(levels(buildings@output$Year)[buildings@output$Year])
# tapply (and therefore oapply) changes continuous indices to factors! Must change back by hand.
buildings@output <- buildings@output[!is.na(result(buildings)) , ]
colnames(buildings@output)[colnames(buildings@output) == "City area"] <- "City.area"
renovationyear <- Ovariable("renovationyear", data = data.frame(
Renovationyear = (201:205) * 10,
Age = NA,
Result = 1
))
temp <- out * renovationyear # temp is the building stock repeated for every potential renovation decade.
temp@output$Age <- temp@output$Renovationyear - temp@output$Year
# Floor area of renovations in ten years. Combine with continuous index Age.
renovations <- continuousOps(temp, renovation, '*') * renovationShares * 10
out <- orbind(out, renovations * -1) # Equal amount stops being non-renovated.
out$Renovation <- "None"
out <- orbind(out, renovations)
out$Renovation <- as.factor(out$Renovation)
return(out)
}
)
### HeatingEnergy
heatingEnergy <- Ovariable("heatingEnergy",
dependencies = data.frame(Name = c("energyUse", "savingPotential", "buildings")),
formula = function(...) {
out <- energyUse * savingPotential * buildings
return(out)
}
)
# Calculate the cumulative impact of the events on building stock to given years
timepoints <- function(X, obstimes) {
# Function timepoints takes an event list and turns that into existing crosscutting situations at
# timepoints defined by years.
# X must be an ovariable with index Year.
# obstimes must be a vector of years.
out <- data.frame()
for(i in obstimes) {
out <- rbind(out, data.frame(
Obstime = i,
X@output[X@output$Year <= i , ]
))
}
X@output <- out
X@marginal <- c(TRUE, X@marginal) # Add Obstime to marginal
return(X)
}
objects.store(buildings, heatingEnergy, timepoints)
cat("Saved ovariables buildings, heatingEnergy, timepoints\n")
| |