LCA Assignment2 Training - 23-24
LCA Assignment2 Training - 23-24
Life-Cycle Assessment
A Bridge Example
[email protected]
Choices engineers make during design of a civil engineered product have a significant impact on all
other stages such as construction, operation, or maintenance. Life cycle analysis allows us to have a
sneak peek into the future implications of design decisions. For example, we can assess what will be
the impact on the environment of a specific civil system during its life cycle. We provide you with a
step-by-step tutorial to show how to implement such as analysis in R. We also show how to implement
two methods to support your multi-criteria decision-making process.
1. Engineering aspects
At each step, engineers need to make decisions about product configuration, materials, construction,
operation and maintenance. These decisions are linked to life-cycle costs and the environmental
impact. This example illustrates the possibility to conduct a life cycle assessment of a concrete bridge.
To this end, we start defining the goal and the scope of this assessment in the following subsection.
page1
Life-Cycle Assessment – Individual Project Assignment 2
This example focuses on the decisions practitioners need to take when designing the deck of a
concrete bridge. You need to think about the goal and scope of your own assessment.
The design alternatives we are going to analyze are presented in the figure below.
page2
Life-Cycle Assessment – Individual Project Assignment 2
Materials selection plays an important role during civil system design. Each alternative can
accommodate different material strategies. Here we provide 7 different design options, but you should
focus on only 3 for your assignment.
Design option Girders Material Deck Material Deck surface
Option 1 Prefab concrete Cast in place concrete Asphalt
The table below presents the materials used in this tutorial for different elements under analysis. For
your own system, you will probably have a different set of elements that accompany material
specifications and cross-sectional areas.
Deck (width = 15m, thickness = 0.25m) 3.75 20MPa, mix 5 (Marceau, 2007)
1.2 Life Cycle Inventory of different materials, Performance, and environmental indicators
The following table presents the composition of different materials used. For each material, we
collected information about energy consumption for fabrication and processing (MJ/t), CO2, NOx,
SO2 (kg/m3) and cost associated with extraction, processing, manufacture, and construction.
Remember that you will need to do the same based on your own goals and boundaries.
page3
Life-Cycle Assessment – Individual Project Assignment 2
Fine Aggregates RC 831 0.0023 0.0053 0.009 0.009
The scope column indicates the use of a specific material in the composition of a specific mix, such
as RC = reinforced concrete, FRP = fiber-reinforced polymer, PRC = Precast reinforced concrete.
The “quantities” column has a different meaning, depending on the materials. For RC and PRC those
are the quantities of materials consumed to produce a cubic meter of concrete, respectively the
reinforcement in Kg usually used for 1cubic meter of concrete. For steel and FRP is indicated 1,
because the energy consumed as well as the emissions are indicated for each Kg of materials produced
and consumed. For asphalt, the values indicated represent percentages of various materials used in 1
cubic meter of asphalt, such as 5% is asphalt cement and 95% aggregates.
Various sources were used to extract these values, which are indicated at the end of this tutorial.
1. Prerequisite – supporting tools
As a first step, we need to start by installing R and RStudio. This tutorial is using the following
versions:
• R: 4.3.1
• RStudio 2023.06.0+421 "Mountain Hydrangea"
Go to https://cran.r-project.org/ and download the R distribution suitable for your system. Use the
downloaded installer to install R on your machine.
Start RStudio and run the following lines on the console to install the required packages we are going
to use through this tutorial:
> install.packages(“Shiny“)
> install.packages(“dplyr")
> install.packages(“ggplot2")
page4
Life-Cycle Assessment – Individual Project Assignment 2
> install.packages(“scales")
> install.packages(“reshape2")
> install.packages(“tibble")
> install.packages(“lubridate")
Please note that these need to be run only once on your machine. Do not include these in your RScript,
as it is not necessary to run these commands every time as the script.
To get started with the next part, please got to the main menu File → New File → R Script to start a
new script. The shortcut for this is represented by the following combination of keys: Ctrl+Shift+N.
On the new appeared window, right on top, write the following code line:
rm (list = ls())
Every time you run your script, this command will clean your environment. By this, you make sure
that you cannot use any of the variables you created previously, and the environment is clean, allowing
you to use only the data and variables you initialize with your current script.
Make sure that you save your newly created file. By this you will be able to open it later. Go to File
→ Save As and choose a name for your file, as well as a location were you want to save it and to
access it later. You will have to do this only one, and later on, as you are working and adding more
code lines to your file, you can use File → Save of the shortcut Ctrl+S to save your progress. Make
sure that you save your script file on a regular basis, in order to avoid possible data loss.
To use the packages you previously installed, please add the following lines of code to your script:
library(shiny)
library(readr)
library(dplyr)
library(ggplot2)
library(scales)
library(reshape2)
library(tibble)
library(lubridate)
By using the above commands, we specify that we want to use the specified libraries in the script we
develop.
At this point, we are ready to start with the next part of our assignment.
page5
Life-Cycle Assessment – Individual Project Assignment 2
2. Life-Cycle timeline
Visualizing the life cycle of civil-engineered systems provides a clear representation of when specific
interventions, such as repairs, replacements, and maintenance, are required. Using Shiny, a powerful
web application framework for R, we've developed an app that enables you to easily input and display
these interventions on a timeline.
The first step is to know interventions associated with the system with specific design option you
have. For our bridge example, we have this list of interventions with frequency of occurrence for each
design option.
For your own system, these interventions should be defined either from literature, practices, or
professional experiences. Also, the lifespan for each system is different; you should refer to your own
system.
page6
Life-Cycle Assessment – Individual Project Assignment 2
Make sure that you add your data as csv to be easily readable by the app.
Then you can simply show different design options with different interventions:
page7
Life-Cycle Assessment – Individual Project Assignment 2
3. Life Cycle Inventory and Analysis
As mentioned before, this tutorial will walk you step by step through the life cycle analysis of different
bridge deck design options. We will use the materials defined at step 1.2 and read the table which was
exported to csv.
That means either your file name is incorrect, or R cannot localize the file in your computer, then you
would need to edit the code to exactly where the file is like the following for example:
LCI.materials <- read.csv("/Users/Mohamed Abdelfattah/LCA
2023/my_shiny_app/data/LCImaterials.csv")
As a next step, we will define a function which, based on a bridge’s dimensions and different design
options for the deck and girders will compute the total amount of energy consumed, as well as the
total amount of emissions.
As a first step, we include the geometrical characteristics of the possible design elements as defined
in section 1.1. Add the following lines of code to the function’s body.
Next we use the split() function to create subsets of materials based on the different scopes we defined.
Different deck options lead to different amount of materials, as well as different interventions as per
our timelines. To take this into account, we will add the following block of code to the function’s
body. Note that functions like interventions.deck refers to the number of times that interventions occur
during the lifetime of the system. For you system, this needs to be defined based on the lifetime of
your system and frequency of interventions.
page8
Life-Cycle Assessment – Individual Project Assignment 2
} else if (deck.Option == "FRP") {
deck.volume <- 0.2 * length * width * height
interventions.deck <- 1
}
#girder options
if (girder.Option == "PRC") {
#get the numbers of girders
n <-round(width / 3.75, 0)
interventions.girders <- 2
#get the volume of the concrete
for the prefab girders
girders.V <- n *
prefab.girder.Section * length
} else if (girder.Option ==
"steel")
{
n <- round(width / 3, 0)
girders.V <- n *
steel.girders.unitWeight *
length
interventions.girders <- 2
} else if (girder.Option ==
"none") {
n <- 0
girders.V <- 0
interventions.girders <- 0
}
Now, we are going to use this data, which will be automatically selected, to create a matrix containing
the information we need for life cycle analysis. The first part, which is similar for all the design
options, is the asphalt.
Next, we consider the deck option, and we supplement the data with specific information.
For the girder options, we need to consider the fact that in the last option we do not have girders. To
sort this out, we add an if statement checking if the option provided has or does not have girders.
if (!is.null(materials.split[[girder.Option]])) {
girders <- mutate(materials.split[[girder.Option]], bridge.Q = girders.V,
interventions = interventions.girders)
LCA.matrix <- rbind(deck, girders, asphalt)
} else {
LCA.matrix <- rbind(deck, asphalt)
}
LCA.matrix <- rbind() creates the matrix with all the materials based on the options we defined.
page9
Life-Cycle Assessment – Individual Project Assignment 2
Based on the information we have, we now calculate the total amount of materials for the bridge
elements, as well as, the total amount of materials consumed during the lifecycle. Based on this, we
will calculate the total amount of energy and emissions per materials.
return(LCA.results)
Now that we have the function defined, we need to initialize the variables we need.
We will create two vectors, which will contain different design options for girders and for deck.
At this point, it is important to mention that these identifiers must be identical with the ones defined
in the scope column of the table defined at point 1.2. This way the function will extract the information
specific to that design option.
To get the LCA results, we will net the add the following lines of code.
page10
Life-Cycle Assessment – Individual Project Assignment 2
We will create a matrix containing the results for all the options we defined by adding the following
line of code.
results <- as.data.frame(rbind(Option1 = unlist(Option1),
Option2 = unlist(Option2),
Option3 = unlist(Option3),
Option4 = unlist(Option4),
Option5 = unlist(Option5),
Option6 = unlist(Option6),
Option7 = unlist(Option7)))
Using the following lines of code, we create barplots to visualize different levels of energy
consumption for the life cycle of our design options.
barplot(results$Energy, names.arg = row.names(results))
The plot we obtain is similar to the one presented in the figure below.
Following a similar logic, we will create bar plots for the other indicators.
page11
Life-Cycle Assessment – Individual Project Assignment 2
page12
Life-Cycle Assessment – Individual Project Assignment 2
4. MCDM – Analytic hierarchy process (AHP)
In our case, the goal is to rank design options. The criteria (attributes on which the design options will
be compared) include energy, CO2, NOX, and SO2. The alternatives are the design options
("Option1", "Option2", ..., "Option7").
To have these, we will extract as vectors the names of the design options (alternatives) as well as the
names of the indicators (criteria/attributes).
The primary aim of AHP is to derive relative weights for each criterion and alternative. The method
converts subjective assessments into ratio scales.
• Eigenvectors: In AHP, eigenvectors of the pairwise comparison matrices represent the
relative weights of the criteria or alternatives. The principal eigenvector (associated with the
largest eigenvalue) is the one used to determine the weights.
• Intuitively, this principal eigenvector reveals a stable and consistent set of values
(weights) that maintain the ratio scale of comparisons as closely as possible. When
you multiply the matrix with this vector, the result is a scaled version of the vector
itself. That's why it is considered the best representative of relative weights.
• Normalization: Once the principal eigenvector is derived, it's normalized (divided by its sum)
to ensure that the weights sum up to 1.
page13
Life-Cycle Assessment – Individual Project Assignment 2
c. Pairwise Comparisons:
You compare the criteria and alternatives pairwise to determine which is more important and by how
much. These comparisons are often represented using a matrix. If an element in the matrix (i,j) has a
value of 5, it means the ith element is five times as important as the jth element. A value of 1/5 would
mean the jth element is five times as important as the ith element.
The numbers in the tutorials are based on the 1-9 Saaty’s scale as seen in the table below (Saaty,
1980):
For each performance criteria, we will have to define the score matrix. To do this for energy, add the
following line of code.
energy <- t(matrix(c(1, 1/4, 4, 1/6, 5, 3, 2,
4, 1, 4, 1/4, 2, 2, 4,
1/4, 1/4, 1, 0.2, 3, 5, 4,
6, 4, 5, 1, 2, 3, 7,
1/5, 1/2, 1/3, 1/2, 1, 1/5, 1/6,
1/3, 1/2, 1/5, 1/3, 5, 1, 6,
1/2, 1/4, 1/4, 1/7, 6, 1/6, 1),
nrow=length(alternatives),ncol=length(alternatives),
dimnames = list(alternatives, alternatives)))
To easily test the reciprocal condition of your matrix we can use the following line of code:
energy == t(1/energy)
In case the condition is met, then on your console, will be printed a matrix containing TRUE elements.
Similarly, we will define the score matrices for the CO2, NOX and SO2 criteria. Also, add the
reciprocal check. Add the following lines of code to your script.
page14
Life-Cycle Assessment – Individual Project Assignment 2
CO2 <- t(matrix(c(1, 2, 5, 1, 3, 2, 4,
1/2, 1 , 3 , 2, 1/4, 1/3, 1/5 ,
1/5,1/3,1, 1/4, 2, 4, 6,
1, 1/2, 4, 1, 3, 2, 1/2,
1/3, 4, 1/2, 1/3, 1, 2, 4,
1/2, 3, 1/4, 1/2, 1/2, 1, 1/3,
1/4, 5, 1/6, 2, 1/4, 3, 1),
nrow=length(alternatives),ncol=length(alternatives),
dimnames = list(alternatives, alternatives)))
#check for reciprocal condition
CO2 == t(1/CO2)
Note: for your specific example, you would need to explain the numbers. In practice, these numbers
are computed from the exact values you just calculated in the LCA step. So, you compare real numbers
to each other’s so that you can get realistic results of ranking.
These score matrices we defined above represent the pairwise comparison matrices of the alternatives.
We will bundle these matrices in one list using the following line of code.
APCL <- list(energy=energy,
CO2=CO2,
NOX=NOX,
SO2 = SO2)
With this, we create a list of matrices, each one getting the name of the matrix as indicated by the left-
hand term.
Next, we will define the pairwise comparison matrix for each criterion. Each criterion (which in our
case is represented by the performance indicators we defined) will be ranked against the others.
What does this mean? Basically, you define which criterion has more value and which has less value
than the others.
page15
Life-Cycle Assessment – Individual Project Assignment 2
How to get these comparison numbers? This is based on the goal, specific case study, boundaries, etc.
So, it is crucial to explain what are the bases on which you got your comparison numbers. For
example, why criterion 1 (energy) is 3 times more important than criterion 3 (NOX).
Similar to the alternatives pairwise comparison, the matrix we define needs to meet the reciprocal
condition. To do this, we will add the following lines of code.
1/2, 3, 2, 1)
nrow=length(APCL),ncol=length(APCL),
CWPC == t(1/CWPC)
d. Compute Results:
To visually represent the results, we can create a pie chart. To do this, add the following line of codes.
page16
Life-Cycle Assessment – Individual Project Assignment 2
Previously, looking at the bar plots we created for the levels of each indicator, our favorite option was
Option5 which actually had the lowest level of all the indicators. Now from the Pie chart we can see
that a more detailed analysis of our preferences changed the ranking, which in this case as shown in
the results of the AHP method is Option4 by having the highest score.
page17
Life-Cycle Assessment – Individual Project Assignment 2
References used:
Please do not hesitate to contact us in case you should have any questions or you are stuck
([email protected]). Very often, we can solve problems quickly. Please also
make use of the support sessions (Monday 14:00 – 16:00, Tuesday 12:00, 14:00).
page18