Tutorial 3#
Why are you doing this tutorial?
The purpose of this tutorial is to introduce you to the concept of modularization of the Navigate files. Essentially splitting the instructions into multiple .inc files in order to make them more readable and easier to maintain and update. This is especially relevant when working with scenarios, uncertainties, and sensitivities where there are often only a handful of assumptions that are changed while the majority remain the same across all simulations.
Setting the scene:
In this tutorial, you will first be introduced to the structure of the simulation environment we use and have designed for working with multiple projects, scenarios, and uncertainties. This will serve as guidance but is not a mandatory structure. Then you will create your own folder structure for this tutorial.
You will then divide the content of Tutorial 2’s DEFINE file up into several smaller .inc files and store them in the relevant tutorial folders. In the last part, you will run three simulations with different LSFO prices (baseline: 250 USD/ton, Scenario 170 USD/ton, Scenario 100 USD/ton) and briefly review the results.
How does it work?
In this document, you have several action points. Mostly, these action points involve writing instructions to define nodes and their attributes (which you do by writing/copying the Navigate instructions from this document into your own working file) or copying and pasting files between folders and editing them.
You should follow the guide in order as the parts build up on each other.
Proposed structure of a simulation environment#
The way we have structured our simulation environment is as follows:
production/
├── 0_includes_global/
├── project_1/
│ ├── 0_includes_local/
│ ├── simulation_1/
│ │ ├── plots/
│ │ └── file_name_1.nav
│ ├── simulation_2/
│ │ ├── plots/
│ │ └── file_name_2.nav
│ └── ...
├── project_2/
│ ├── 0_includes_local/
│ ├── simulation_1/
│ │ ├── plots/
│ │ └── file_name_1.nav
│ ├── simulation_2/
│ │ ├── plots/
│ │ └── file_name_2.nav
│ └── ...
└── ...
In the context of the tutorials the folder project_1 would correspond to Tutorial_1, project_2 would correspond to Tutorial_2, etc. The scenarios you will test in this tutorial then corresponds to the folders simulation_1, simulation_2, etc., under the relevant project or tutorial.
The folder 0_includes_global is placed in the folder with the project folders. This folder contains global assumptions that is not dependent on a project or scenario. The 0_includes_local under the individual projects contains assumptions that are specific to a project or scenario.
Build your folder structure#
The tutorial_3 folder will correspond to the production folder from the above graphic.
In
tutorial_3, create two new folders:0_includes_global. This will include.incfiles with all of your base assumptions.tutorial_3_scenarios(this is your “project” in the tree structure)
Within the folder
tutorial_3_scenarios, create four new folders. These are your “simulations” in the tree structure:0_includes_localbaseline. This folder will include the .nav file for the baseline scenario.scenario_170scenario_100
Within each of the three folders
baseline,scenario_170, andscenario_100: Create an empty folder calledplots
Your folder structure should now look like this:
tutorial_3/
├── 0_includes_global/
└── tutorial_3_scenarios/
├── 0_includes_local/
├── baseline/
│ ├── plots/
│ └── (baseline .nav file)
├── scenario_170/
│ └── plots/
└── scenario_100/
└── plots/
Split DEFINE content into individual .inc files.#
In the next step, you will split the content from your tutorial 2 DEFINE file into several smaller files.
You can complete this by opening your finalized DEFINE file from tutorial 2, and paste copies of each individual node, or each section into new .inc files, and save these new files into your tutorial_3 folder.
Almost all assumptions are going to stay the same as in tutorial 2, and are constant across the three scenarios (baseline, 100, 170) in this tutorial 3. Those assumptions are going to be saved in the 0_includes_global folder, because we consider them our ‘default’ assumptions.
However, the assumptions (files) about LSFO costs are going to be defined (saved) separately outside of the 0_includes_local folder, because the different assumptions are unique to their respective scenarios and are therefore considered to be ‘local’ assumptions.
Recap Tutorial 2#
Let’s recap the different files we had under tutorial 2.
Open your tutorial_2 folder and files to remind yourself of the contents.
In the includes folder we had a:
define.incfile: defining the different assumptions related to the definition of nodes (e.g., about vessel and fuel specifications, emissions related with specific fuels, costs, route details etc.)events.incfile containing the timesteps of the simulations.tutorial_2.navfile: including ‘instructions’ on running the simulation and on which files to include (e.g., define and events files)
New Structure#
While all defined nodes and assumptions were in the one DEFINE file, you are now going to split some up and save them into different files.
There are multiple different ways/logics of how you could split the content of the DEFINE file up, but for this tutorial we are using the following structure:
(The order of the list is approximately aligned with the order the nodes/assumptions appear in the DEFINE file).
.inc files (0_includes_global):#
model_definition.incbunker_logistics.incfleet_bulk.incfleet_container.incfleet_uptake.inccontainer_ice_oil.inccontainer_ice_methane.incbulk_ice_methanol.incbulk_ice_ammonia.inctanks.incroute.incport.incproducer.incproducer_uptake.incplant.incfuel.incemissions.incprocess.incfeedstock.incregion.incsource.increport.incplot.inctime_steps_yearly.inc
Each section in the list represents a separate .inc file in the new file structure.
We have taken the liberty of creating empty working files for you in the folder tutorial_3 that you can copy into your newly constructed simulation environment. The .inc files should be copied into 0_includes_global subfolders and the .nav files should be placed in the respective scenario folders.
DEFINE File: General Nodes#
Open these files:
From folder ‘tutorial_3/0_includes_global:
model_definition.incbunker_logistics.inc
From the folder
tutorial_2:define.inc(T2DEF)
Copy the relevant section from T2DEF into the corresponding empty file.
Copy the node
ModelDefinitioninto the filemodel_definition.inc. Copy the nodeBunkerLogisticsinto the filebunker_logistics.inc.
DEFINE File: Definition of the Fleets#
Open your Tutorial 2 define.inc file and copy the depicted nodes into their respective .inc file.
fleet_bulk.inc#
Copy the relevant section from T2DEF into the empty file.
Remove the attribute definitions
InterFuelSensitivityandIntraFuelSensitivityfrom the node definition (they will be set for all fleets at once infleet_uptake.inc).
Fleet "bulk_fleet" {
Vessels = [Vessel("bulk_ice_methanol"), Vessel("bulk_ice_ammonia")]
InitialVessels = 100
TradeGrowth = 0.05
}
fleet_container.inc#
Copy the relevant section from T2DEF into the empty file.
Remove the attribute definitions
InterFuelSensitivityandIntraFuelSensitivityfrom the node definition (they will be set for all fleets at once infleet_uptake.inc).
Fleet "container_fleet" {
Vessels = [Vessel("container_ice_oil"), Vessel("container_ice_methane")]
InitialVessels = 100
TradeGrowth = 0.05
}
fleet_uptake.inc#
Assign the attributes
InterFuelSensitivityandIntraFuelSensitivityto all defined nodes of the typeFleet.The star
*is a ‘wildcard’. So, when we define the nodeFleet "*"the listed attributes under it will apply to any node that has the node-typeFleet.A value of
0.5is an odds ratio: a fuel or technology whose levelized cost of transport (LCOT) is 10% higher receives half the odds of an otherwise identical option (lower cost is better, so use a value below1).
Fleet "*" {
InterFuelSensitivity = 0.5
IntraFuelSensitivity = 0.5
}
DEFINE File: Definition of the Vessels#
Create the listed files in your Tutorial 3
0_includes_globalfolder.Open these files:
From folder
tutorial_3/0_includes_global:container_ice_oil.inccontainer_ice_methane.incbulk_ice_methanol.incbulk_ice_ammonia.inc
From the folder
tutorial_2:define.inc(T2DEF)
Copy the relevant section from T2DEF into the corresponding empty file. All nodes, Vessel, Powersystem and converters should be copied into the corresponding file. E.g. all nodes under Bi) in your T2DEF file should be copied and pasted into the file “container_ice_oil”
DEFINE File: General Specifications for Vessels#
Create the listed files in your Tutorial 3
0_includes_globalfolder.Open these files:
From folder
tutorial_3/0_includes_global:route.inctanks.incport.inc
From the folder
tutorial_2:define.inc(T2DEF)
Copy the relevant section from T2DEF into the corresponding empty file.
For the
route.incfile, copy and paste the nodeRoute "route". For port copy node"port"and pace in file"port"in0_include_global.For the file
tanks.incinclude all tank nodes:Tank("main_oil"),Tank("pilot_oil"),Tank("main_methane"),Tank("main_methanol"), andTank("main_ammonia").
DEFINE File: Definition of all Fuels#
Create the listed files in your Tutorial 3
0_includes_globalfolder.Open these files:
From folder ‘tutorial_3/0_includes_global’:
Fuel.incProcess.incFeedstock.inc
From the folder
tutorial_2:define.inc(T2DEF)
For each of the 3 mentioned files, perform the following action points, resulting in files that contain each of the depicted nodes of code. Remember to save before running any code or closing any files.
Open your Tutorial 2
define.incfile and copy the depicted nodes into their respective .inc file:
fuel.inc#
Copy the relevant section from T2DEF into the empty file:
Fuel "heavy_fuel_oil"Fuel "methane_electro"Fuel "methanol_bio"Fuel "ammonia_blue"
Fuel "heavy_fuel_oil" {
FuelType = OIL
LowerHeatingValue = 41.2
MassDensity = 0.9
set_ttw("carbon_dioxide", 3.114)
set_ttw("methane", 0.00005)
set_ttw("nitrous_oxide", 0.00018)
}
Fuel "methane_electro" {
FuelType = METHANE
LowerHeatingValue = 50.0
MassDensity = 0.43
set_ttw("carbon_dioxide", 2.75)
}
Fuel "methanol_bio" {
FuelType = METHANOL
LowerHeatingValue = 19.9
MassDensity = 0.791
set_ttw("carbon_dioxide", 1.38)
}
Fuel "ammonia_blue" {
FuelType = AMMONIA
LowerHeatingValue = 18.8
MassDensity = 0.623
}
‘emissions.inc’#
Copy the relevant section from T2DEF into the empty file.
Emission "carbon_dioxide"Emission "methane"Emission "nitrous_oxide"
Emission "carbon_dioxide" {
GlobalWarmingPotential = 1
}
Emission "methane" {
GlobalWarmingPotential = 25
}
Emission "nitrous_oxide" {
GlobalWarmingPotential = 273
}
process.inc#
Copy the relevant section from T2DEF into the empty file.
Process "methane_liquefaction_electro"Process "methane_synthesis_electro"Process "methanol_synthesis_bio_gasification"Process "haber_bosch_ccs_integrated_blue"Process "nitrogen_air_seperation"
Process "methane_liquefaction_electro" {
Feeds = [Process("methane_synthesis_electro")]
Conversions = [1]
}
Process "methane_synthesis_electro" {
Feeds = [Feedstock("demineralized_water"), Feedstock("carbon_dioxide_biogenic")]
Conversions = [4.5, 2.75]
}
Process "methanol_synthesis_bio_gasification" {
Feeds = [Feedstock("organic_wet_waste"), Feedstock("dry_wood_biomass")]
Conversions = [1.21, 1.21]
}
Process "haber_bosch_ccs_integrated_blue" {
Feeds = [Process("nitrogen_air_seperation"), Feedstock("natural_gas")]
Conversions = [0.64, 0.822]
}
Process "nitrogen_air_seperation" {
}
feedstock.inc#
Copy the relevant section from T2DEF into the empty file.
Feedstock "demineralized_water"Feedstock "carbon_dioxide_biogenic"Feedstock "organic_wet_waste"Feedstock "dry_wood_biomass"Feedstock "natural_gas"
Feedstock "demineralized_water" {
}
Feedstock "carbon_dioxide_biogenic" {
}
Feedstock "organic_wet_waste" {
}
Feedstock "dry_wood_biomass" {
}
Feedstock "natural_gas" {
}
DEFINE File: Definition of Plant Nodes and Region#
Create the listed files in your Tutorial 3
0_includes_globalfolder.Open these files:
From folder
tutorial_3/0_includes_global:plant.incsource.incregion.inc
From the folder
tutorial_2:define.inc(T2DEF)
Copy the relevant section from T2DEF into the corresponding empty file. Follow the principle of Fuels, copy the Plant nodes for every fuel and place them into the file plant.inc in
0_includes_global. Copy the node“region”into theregion.incfile. Copy the nodes Source"renewable"and"grid"into the filesource.inc.
DEFINE File: Definition of Producer and producer_uptake#
Create the listed files in your Tutorial 3
0_includes_globalfolder.For producer, copy the node Producer
"engineering_procurement_construction"and past into fileproducer.incin0_includes_globalThis assigns the attribute"engineering_procurement_construction"
And the decision sensitivities to all fuel production plants.
Producer "engineering_procurement_construction" {
Plants = [Plant("plant_methane_electro"),
Plant("plant_methanol_bio_gasification"),
Plant("plant_ammonia_blue")]
MaximumDevelopment = 10
FuelDemandSensitivity = 1.5
FuelCostSensitivity = 0.5
}
FuelDemandSensitivity = 1.5 favours the fuel pathways with the largest expected demand (a 10% higher demand gives 1.5x the odds), while FuelCostSensitivity = 0.5 favours the cheaper plants within a pathway (a 10% higher levelized cost of fuel halves the odds).
The decision sensitivities are now set directly on the
Producer, so theproducer_uptake.incfile is left empty — there are no separate uptake nodes to define.
DEFINE File: Definition of Plot#
The Plot node defines which output plots Navigate produces and where they are saved. Navigate only generates plots when at least one Plot node is defined.
Open the file
plot.incin your0_includes_globalfolder.Define a node
"plots"with the node typePlot.Set the
Directoryattribute to"./plots/". This is theplotssubfolder you created in each scenario folder; the path is relative to the.navfile being run. Navigate creates the folder if it does not already exist.Use the
add_plot(...)command once per plot you want produced.
Plot "plots" {
Directory = "./plots/"
add_plot("global_emission_absolute")
add_plot("global_fuel_consumed")
add_plot("plant_production_cost")
add_plot("port_bunker_price")
}
Because the same plots are produced for every scenario, plot.inc lives in 0_includes_global and is included by each scenario’s .nav file (see the next section).
Run the Baseline Scenario#
Open the terminal and change directory to where the tutorial simulation files are. Once positioned in the folder use the following command to run Navigate:
# Example cd workflow (linux)
cd tutorial/tutorial_3/tutorial_3_scenarios/baseline/
# Run Navigate
navigate baseline.nav
Create Sensitivities: HFO Price#
Next, you are going to run a sensitivity analysis on the price of HFO. This means that you are going to create several different scenarios which differ only in the price of LSFO while other assumptions stay constant across all scenarios.
Comparing e.g., the projected fuel mix over time, can give you insights about the impact that the price of HFO has on the shipping industry and on the transition. For example, if all scenarios lead to very similar projected fuel mixes, we might conclude that the price of HFO has a very small influence on the overall transition, and that other factors, like bio-methane or vessel availability might be the driving factors in the transition.
However, if the scenarios lead to very different fuel mix projections, this is an indicator that the HFO price is very important in influencing the transition. Implications of this include that it is very important to be confident in the values we assume to be the ‘true’ HFO prices today (and in the future). This is because the results of our simulations might be skewed/wrong, if our assumed HFO prices are inaccurate, and might ultimately lead us to drawing the wrong conclusions.
You are going to create two additional scenarios with different HFO costs – a low (ca. 100 USD/ton) and a medium (ca. 170 USD/ton). In the ‘scenario 100’, HFO will be the cheapest fuel available, in the ‘scenario 170’ LSFO price will be cheaper than some fuels but more expensive than others. In the baseline scenario, HFO is the most expensive fuel.
Create an .inc file for Scenario 100: Lowest Cost#
You will create an .inc-file to define the HFO price for Scenario 100, and you will create a .nav file for the scenario.
The structure will be the exact same as in the input file you already created for the baseline scenario, cost_emissions_lsfo.inc.
Open the folder
\tutorial_3\scenario_files.Copy the file
scenario_100.incand paste it into your personal folder:\tutorial_3\tutorial_3_scenarios\0_includes_local.Assign a price for heavy fuel oil of 100 USD/ton to the port node
"port".
Port "port" {
set_bunker_price_overwrite("heavy_fuel_oil", 100)
}
Run the scenarios and compare them with baseline#
Open the plot folders for the baseline, scenario 100 and scenario 170 next to each other. Review some of the plots and compare them across scenarios.
Making a report for further analysis in Excel#
If you want to extract results from Navigate into excel to create your own graph or make additional analysis you can have Navigate extract a report, including all the parameters you need.
Open the
report.incfrom your 0_includes_global folder.Create a
Reportnode namedreport, and set itsDirectoryattribute to"./plots/"so the Excel report is saved in the same subfolder as the plots.Add the results from the simulation that you would like exported into an excel sheet, from where it can be used for analysis in other programs than Navigate.
Port: First, we would like to extract bunker price and WTT intensity.
Fleet: The fleet properties extracted is the emissions and total energy consumption from the fleets.
Global: Here properties of emissions, energy consumption, and installed engine power is extracted at a global level (so across fleets).
Report "report" {
# export the report to the same "plots" subfolder as the plots.
Directory = "./plots/"
# port
add_port_property("*", BunkerIntensityPrice) # USD/GJ
add_port_property("*", BunkerIntensityTotalEquivalentWTT) # kg/GJ
# fleet
add_fleet_property("*", TotalEquivalentWTT) # ton/year
add_fleet_property("*", TotalEquivalentTTW) # ton/year
add_fleet_property("*", TotalEquivalentWTW) # ton/year
add_fleet_property("*", TotalConsumedEnergy) # GJ/year
# global
add_property(TotalEquivalentWTT) # ton/year
add_property(TotalEquivalentTTW) # ton/year
add_property(TotalEquivalentWTW) # ton/year
add_property(WTW) # ton/year
add_property(TotalConsumedEnergy) # GJ/year
add_property(ConsumedEnergy) # GJ/year
add_property(InstalledPower) # MW
}
In each scenario
.navfile (baseline.nav,scenario_100.navandscenario_170.nav), inside theDEFINEblock add the lineInclude "../../0_includes_global/report.inc", placing it just before theplot.incinclude. If you only add it tobaseline.nav, the other two scenarios will run but produce no Excel report.Run the Baseline scenario in Navigate