From b653e9fab35b7e2fc3da27d901c98f0bed6ed4b4 Mon Sep 17 00:00:00 2001
From: Dachet Victor <victor.dachet@uliege.be>
Date: Thu, 13 Jun 2024 08:16:31 +0000
Subject: [PATCH] Upload New File

---
 .../GBOML/Ammonia.txt                         | 293 ++++++++++++++++++
 1 file changed, 293 insertions(+)
 create mode 100644 examples/energy_carrier_comparison/GBOML/Ammonia.txt

diff --git a/examples/energy_carrier_comparison/GBOML/Ammonia.txt b/examples/energy_carrier_comparison/GBOML/Ammonia.txt
new file mode 100644
index 0000000..508d0bb
--- /dev/null
+++ b/examples/energy_carrier_comparison/GBOML/Ammonia.txt
@@ -0,0 +1,293 @@
+#TIMEHORIZON
+T=43800;  // hours 
+
+#GLOBAL
+wacc = 0.07;
+number_years_horizon = T/8760;
+
+#NODE SOLAR_PV_PLANTS = import SOLAR_PV_PLANTS from "GENERAL.txt";
+
+#NODE WIND_PLANTS = import WIND_PLANTS from "GENERAL.txt";
+
+#NODE BATTERY_STORAGE = import BATTERY_STORAGE from "GENERAL.txt";
+
+#NODE HVDC = import HVDC from "GENERAL.txt";
+
+#NODE ELECTROLYSIS_PLANTS = import ELECTROLYSIS_PLANTS from "GENERAL.txt";
+
+#NODE DESALINATION_PLANTS = import DESALINATION_PLANTS from "GENERAL.txt";
+
+#NODE HYDROGEN_STORAGE = import HYDROGEN_STORAGE from "GENERAL.txt";
+
+#NODE WATER_STORAGE = import WATER_STORAGE from "GENERAL.txt";
+
+#NODE ASU
+// Article from Eric R. Morgan, 2013 was used for the node
+#PARAMETERS
+full_capex = 850; // M€/(kt/h) - nitrogen is the reference flow for sizing
+lifetime = 30.0;  // year
+annualised_capex = full_capex * global.wacc * (1 + global.wacc)**lifetime / ((1 + global.wacc)**lifetime - 1); // MEur
+fom = 50.0; // M€/year
+vom = 0.0; // M€/kt
+conversion_factor_electricity = 0.1081;
+minimum_level = 1.0;
+ramp_rate_up = 0.0;
+ramp_rate_down = 0.0;
+#VARIABLES
+internal: capacity; // kt/h 
+external: electricity[T];  // GWh
+external: nitrogen[T];  // kt/h
+#CONSTRAINTS
+nitrogen[t] <= capacity;
+minimum_level * capacity <= nitrogen[t];
+electricity[t] == conversion_factor_electricity * nitrogen[t];
+nitrogen[t] <= nitrogen[t-1] + ramp_rate_up * capacity;
+nitrogen[t-1] <= nitrogen[t] + ramp_rate_down * capacity;
+capacity >= 0;
+electricity[t] >= 0;
+nitrogen[t] >= 0;
+#OBJECTIVES
+min: global.number_years_horizon * (annualised_capex + fom) * capacity;
+min: vom * nitrogen[t];
+
+#NODE NITROGEN_STORAGE
+// Hypothesis : capex same as capex from hydrogen storage 
+// Conversion factor electricity from ASPEN 
+#PARAMETERS
+full_capex_stock = 45.0;  // M€/kt - nitrogen is the reference flow for sizing
+full_capex_flow = 0.0;  // M€/(kt/h)
+lifetime_stock = 30.0;  // year
+lifetime_flow = 30.0;  // year
+annualised_capex_stock = full_capex_stock * global.wacc * (1 + global.wacc)**lifetime_stock / ((1 + global.wacc)**lifetime_stock - 1); // M€
+annualised_capex_flow = full_capex_flow * global.wacc * (1 + global.wacc)**lifetime_flow / ((1 + global.wacc)**lifetime_flow - 1); // M€
+fom_stock = 2.25;  // MEur/(kt)-year
+fom_flow = 0.0;  // MEur/(kt/h)-year 
+vom_stock = 0.0;  // M€/kt
+vom_flow = 0.0;  // M€/kt
+conversion_factor_electricity = 0.1081;
+#VARIABLES
+internal: capacity_flow;  // kt/h
+internal: capacity_stock;  // kt 
+internal: nitrogen_stored[T];  // kt 
+external: electricity[T];  // GWh
+external: nitrogen_in[T];  // kt/h
+external: nitrogen_out[T];  // kt/h
+#CONSTRAINTS
+nitrogen_in[t] <= capacity_flow;
+nitrogen_out[t] <= capacity_flow;
+nitrogen_stored[t] <= capacity_stock;
+nitrogen_stored[0] == nitrogen_stored[T-1];
+nitrogen_stored[t+1] == nitrogen_stored[t] + nitrogen_in[t] - nitrogen_out[t];
+electricity[t] == conversion_factor_electricity * nitrogen_in[t];
+capacity_flow >= 0;
+capacity_stock >= 0;
+nitrogen_stored[t] >= 0;
+nitrogen_in[t] >= 0;
+nitrogen_out[t] >= 0;
+electricity[t] >= 0;
+#OBJECTIVES
+min: global.number_years_horizon * (annualised_capex_stock + fom_stock) * capacity_stock + global.number_years_horizon * (annualised_capex_flow + fom_flow) * capacity_flow;
+min: vom_stock * nitrogen_stored[t] + vom_flow * nitrogen_in[t];
+
+#NODE NH3_PROD
+// Data from ens.dk 
+#PARAMETERS
+full_capex = 6825;  // M€ per kt/h NH3
+lifetime = 30.0;  // year
+annualised_capex = full_capex * global.wacc * (1 + global.wacc)**lifetime / ((1 + global.wacc)**lifetime - 1); // M€
+fom = 204.75; // M€/y per kt/h
+vom = 0.000105; // M€ per kt
+conversion_factor_electricity = 0.32; 
+conversion_factor_hydrogen = 0.18;
+conversion_factor_nitrogen = 0.84;
+minimum_level = 0.2;
+ramp_rate_up = 1; // hypo : stockage N2 (&H2) FR FRD =Ramp 100% within less than 30s 
+ramp_rate_down = 1; // hypo : stockage N2 FCR-D =Ramp 50% within 5s and 100% within 30s
+#VARIABLES
+internal: capacity; // kt/h
+external: electricity[T];  // GWh
+external: hydrogen[T];  // kt
+external: ammonia[T];  // kt
+external: nitrogen[T];  // kt 
+#CONSTRAINTS
+ammonia[t] <= capacity;
+minimum_level * capacity <= ammonia[t];
+hydrogen[t] == conversion_factor_hydrogen * ammonia[t];
+electricity[t] == conversion_factor_electricity * ammonia[t];
+nitrogen[t] == conversion_factor_nitrogen * ammonia[t];
+ammonia[t] <= ammonia[t-1] + ramp_rate_up * capacity;
+ammonia[t-1] <= ammonia[t] + ramp_rate_down * capacity;
+capacity >= 0;
+ammonia[t] >= 0 ;
+electricity[t] >= 0;
+hydrogen[T] >= 0;
+nitrogen[T]>= 0;
+#OBJECTIVES
+min: global.number_years_horizon * (annualised_capex + fom) * capacity;
+min: vom * ammonia[T];
+
+#NODE LIQUEFIED_NH3_STORAGE_HUB
+// Capex_flow, fom_flow and vom_flow from ens.dk 
+// Capex_stock, fomm_stock and vo_stock from Eric R. Morgan, 2013
+// Efficencies from DNV.GL, october 2020
+#PARAMETERS
+full_capex_stock = 0.867; // M€ per kt
+full_capex_flow = 0.10; // M€ per kt/h 
+lifetime_stock = 30.0;  // year
+lifetime_flow = 50.0;  // year
+annualised_capex_stock = full_capex_stock * global.wacc * (1 + global.wacc)**lifetime_stock / ((1 + global.wacc)**lifetime_stock - 1); // M€
+annualised_capex_flow = full_capex_flow * global.wacc * (1 + global.wacc)**lifetime_flow / ((1 + global.wacc)**lifetime_flow - 1); // M€
+fom_stock = 0.01735;  // M€/kt-yr
+fom_flow = 0.001;  // M€/(kt/h)-yr
+vom_stock =0 ;  // M€/kt  
+vom_flow = 0;  // M€/kt
+charge_discharge_ratio = 1.0;
+self_discharge = 0.00003;
+efficiency_in = 1.0;
+efficiency_out = 1.0;
+#VARIABLES
+internal: capacity_flow;  // kt/h
+internal: capacity_stock;  // kt
+internal: liquefied_ammonia_stored[T]; // kt
+external: liquefied_ammonia_in[T]; // kt
+external: liquefied_ammonia_out[T];  // kt 
+#CONSTRAINTS
+liquefied_ammonia_in[t] <= capacity_flow;
+liquefied_ammonia_out[t] <= capacity_flow;
+liquefied_ammonia_stored[t] <= capacity_stock;
+liquefied_ammonia_stored[0] == liquefied_ammonia_stored[T-1];
+liquefied_ammonia_stored[t+1] == (1 - self_discharge) * liquefied_ammonia_stored[t] + liquefied_ammonia_in[t] - liquefied_ammonia_out[t];
+capacity_flow >= 0;
+capacity_stock >= 0;
+liquefied_ammonia_stored[t] >= 0;
+liquefied_ammonia_in[t] >= 0;
+liquefied_ammonia_out[t] >= 0;
+#OBJECTIVES
+min: global.number_years_horizon * (annualised_capex_stock + fom_stock) * capacity_stock + global.number_years_horizon * (annualised_capex_flow + fom_flow) * capacity_flow;
+min: vom_stock * liquefied_ammonia_stored[t] + vom_flow * liquefied_ammonia_in[t];
+
+#NODE LIQUEFIED_NH3_STORAGE_DESTINATION
+// Capex_flow, fom_flow and vom_flow from ens.dk 
+// Capex_stock, fomm_stock and vo_stock from Eric R. Morgan, 2013
+// Efficencies from DNV.GL, october 2020
+#PARAMETERS
+full_capex_stock = 0.867;  // M€ per kt
+full_capex_flow = 0.10;  // M€ per kt/h 
+lifetime_stock = 30.0;  // year
+lifetime_flow = 50.0;  // year
+annualised_capex_stock = full_capex_stock * global.wacc * (1 + global.wacc)**lifetime_stock / ((1 + global.wacc)**lifetime_stock - 1); // M€
+annualised_capex_flow = full_capex_flow * global.wacc * (1 + global.wacc)**lifetime_flow / ((1 + global.wacc)**lifetime_flow - 1); // M€
+fom_stock = 0.01735;  // M€/kt-yr
+fom_flow = 0.001;  // M€/(kt/h)-yr
+vom_stock = 0.0;  // M€/kt
+vom_flow = 0.0;  // M€/kt
+charge_discharge_ratio = 1.0;
+self_discharge = 0.00003;
+efficiency_in = 1.0;
+efficiency_out = 1.0;
+#VARIABLES
+internal: capacity_flow;  // kt/h
+internal: capacity_stock;  // kt
+internal: liquefied_ammonia_stored[T];  // kt
+external: liquefied_ammonia_in[T];  // kt/h
+external: liquefied_ammonia_out[T];  // kt/h
+#CONSTRAINTS
+liquefied_ammonia_in[t] <= capacity_flow;
+liquefied_ammonia_out[t] <= capacity_flow;
+liquefied_ammonia_stored[t] <= capacity_stock;
+liquefied_ammonia_stored[0] == liquefied_ammonia_stored[T-1];
+liquefied_ammonia_stored[t+1] == (1 - self_discharge) * liquefied_ammonia_stored[t] + liquefied_ammonia_in[t] - liquefied_ammonia_out[t];
+capacity_flow >= 0;
+capacity_stock >= 0;
+liquefied_ammonia_stored[t] >= 0;
+liquefied_ammonia_in[t] >= 0;
+liquefied_ammonia_out[t] >= 0;
+#OBJECTIVES
+min: global.number_years_horizon * (annualised_capex_stock + fom_stock) * capacity_stock + global.number_years_horizon * (annualised_capex_flow + fom_flow) * capacity_flow;
+min: vom_stock * liquefied_ammonia_stored[t] + vom_flow * liquefied_ammonia_in[t];
+
+#NODE LIQUEFIED_NH3_CARRIERS
+// Data from ens.dk
+#PARAMETERS
+number_carriers = 7;
+full_capex = 1.75;  //M€ per kt
+lifetime = 20.0;  // year
+annualised_capex = full_capex * global.wacc * (1 + global.wacc)**lifetime / ((1 + global.wacc)**lifetime - 1);  // M€
+fom = 0.009; // M€/kt-year
+vom = 0.0;  // M€/kt
+schedule = import "Data/carrier_schedule.csv";
+loading_time = 24;
+travel_time = 116;
+conversion_factor = 0.994;
+#VARIABLES
+internal: capacity; // kt
+external: liquefied_ammonia_in[T];  // kt/h
+external: liquefied_ammonia_out[T];  // kt/h
+#CONSTRAINTS
+liquefied_ammonia_in[t] <= schedule[t] * capacity;
+liquefied_ammonia_out[t+travel_time] == conversion_factor * liquefied_ammonia_in[t];
+liquefied_ammonia_out[t] == 0 where t < travel_time;
+capacity >= 0;
+liquefied_ammonia_in[t] >= 0;
+liquefied_ammonia_out[t] >= 0;
+#OBJECTIVES
+min: global.number_years_horizon * (annualised_capex + fom) * capacity * loading_time * number_carriers;
+min: vom * liquefied_ammonia_in[t];
+
+#NODE LIQUEFIED_NH3_REGASIFICATION
+// Hypothesis : data same as natural gas 
+// Data from Pospisil et al, 2019
+#PARAMETERS
+full_capex = 1248.3;  // M€/kt/h
+lifetime = 30.0;  // year
+annualised_capex = full_capex * global.wacc * (1 + global.wacc)**lifetime / ((1 + global.wacc)**lifetime - 1); // M€
+fom = 41.62; // M€/(kt/h)-year
+vom = 0.0;  // M€/kt
+conversion_factor = 0.98;
+#VARIABLES
+internal: capacity;  // kt/h
+external: liquefied_ammonia[T];  //kt
+external: ammonia[T]; // kt 
+#CONSTRAINTS
+liquefied_ammonia[t] <= capacity;
+ammonia[t] == conversion_factor * liquefied_ammonia[t];
+capacity >= 0;
+ammonia[t] >= 0;
+liquefied_ammonia[t] >= 0;
+#OBJECTIVES
+min: global.number_years_horizon * (annualised_capex + fom) * capacity;
+min: vom * liquefied_ammonia[t];
+
+#HYPEREDGE INLAND_POWER_BALANCE
+#CONSTRAINTS
+SOLAR_PV_PLANTS.electricity[t] + WIND_PLANTS.electricity[t] + BATTERY_STORAGE.electricity_out[t] == BATTERY_STORAGE.electricity_in[t] + HVDC.electricity_in[t];
+
+#HYPEREDGE COASTAL_POWER_BALANCE
+#CONSTRAINTS
+HVDC.electricity_out[t] == ELECTROLYSIS_PLANTS.electricity[t] + HYDROGEN_STORAGE.electricity[t] + DESALINATION_PLANTS.electricity[t] + WATER_STORAGE.electricity[t] + NH3_PROD.electricity[t] + NITROGEN_STORAGE.electricity[t] + ASU.electricity[t];
+
+#HYPEREDGE NITROGEN_BALANCE
+#CONSTRAINTS
+ASU.nitrogen[t] + NITROGEN_STORAGE.nitrogen_out[t] == NITROGEN_STORAGE.nitrogen_in[t] + NH3_PROD.nitrogen[t];
+
+#HYPEREDGE COASTAL_HYDROGEN_BALANCE
+#CONSTRAINTS
+ELECTROLYSIS_PLANTS.hydrogen[t] + HYDROGEN_STORAGE.hydrogen_out[t] == HYDROGEN_STORAGE.hydrogen_in[t] + NH3_PROD.hydrogen[t];
+
+#HYPEREDGE COASTAL_WATER_BALANCE
+#CONSTRAINTS
+DESALINATION_PLANTS.water[t] + WATER_STORAGE.water_out[t] == WATER_STORAGE.water_in[t] + ELECTROLYSIS_PLANTS.water[t];
+
+#HYPEREDGE COASTAL_LIQUEFIED_NH3_BALANCE
+#CONSTRAINTS
+NH3_PROD.ammonia[t] + LIQUEFIED_NH3_STORAGE_HUB.liquefied_ammonia_out[t] == LIQUEFIED_NH3_STORAGE_HUB.liquefied_ammonia_in[t] + LIQUEFIED_NH3_CARRIERS.liquefied_ammonia_in[t];
+
+#HYPEREDGE DESTINATION_LIQUEFIED_NH3_BALANCE
+#CONSTRAINTS
+LIQUEFIED_NH3_CARRIERS.liquefied_ammonia_out[t] + LIQUEFIED_NH3_STORAGE_DESTINATION.liquefied_ammonia_out[t] == LIQUEFIED_NH3_STORAGE_DESTINATION.liquefied_ammonia_in[t] + LIQUEFIED_NH3_REGASIFICATION.liquefied_ammonia[t] ;
+
+#HYPEREDGE DESTINATION_GAS_NH3_BALANCE
+#PARAMETERS
+demand = import "Data/NH3_demand.csv";
+#CONSTRAINTS
+LIQUEFIED_NH3_REGASIFICATION.ammonia[t] == demand[t];
-- 
GitLab