diff --git a/schemas/input/model.yaml b/schemas/input/model.yaml index 82f527587..402c56edf 100644 --- a/schemas/input/model.yaml +++ b/schemas/input/model.yaml @@ -91,10 +91,6 @@ properties: type: number description: The relative tolerance for price convergence in the ironing out loop default: 1e-6 - capacity_margin: - type: number - description: Slack proportion for assets selected during cycle balancing to absorb small demand shifts - default: 0.2 mothball_years: type: integer default: 0 diff --git a/src/asset.rs b/src/asset.rs index 143750998..8c491d650 100644 --- a/src/asset.rs +++ b/src/asset.rs @@ -983,6 +983,7 @@ impl AssetRef { self.region_id(), self.commission_year, self.agent_id(), + hash_unit(self.capacity().tranche_size()), )) } } @@ -1168,7 +1169,7 @@ impl Hash for AssetRef { #[derive(PartialEq, PartialOrd, Eq, Ord, Hash)] enum AssetCmp<'a> { WithID(AssetID), - WithoutID((&'a ProcessID, &'a RegionID, u32, Option<&'a AgentID>)), + WithoutID((&'a ProcessID, &'a RegionID, u32, Option<&'a AgentID>, u64)), } /// Additional methods for iterating over assets diff --git a/src/graph/investment.rs b/src/graph/investment.rs index 5f30ac1ec..b4dcd94a4 100644 --- a/src/graph/investment.rs +++ b/src/graph/investment.rs @@ -129,13 +129,19 @@ fn compress_cycles(graph: &InvestmentGraph) -> InvestmentGraph { |_, node_weight| match node_weight.len() { 0 => unreachable!("Condensed graph node must have at least one member"), 1 => node_weight[0].clone(), - _ => MarketSet::Cycle( - node_weight + _ => MarketSet::Cycle { + first_pass: node_weight .iter() .flat_map(|s| s.iter_markets()) .cloned() .collect(), - ), + second_pass: node_weight // TODO: placeholder + .iter() + .flat_map(|s| s.iter_markets()) + .cloned() + .collect(), + excluded_processes: vec![], // TODO: placeholder + }, }, // Keep edges the same |_, edge_weight| edge_weight.clone(), diff --git a/src/model/parameters.rs b/src/model/parameters.rs index f1a37b766..72e86a43a 100644 --- a/src/model/parameters.rs +++ b/src/model/parameters.rs @@ -113,13 +113,6 @@ pub struct ModelParameters { /// The relative tolerance for price convergence in the ironing out loop #[serde(deserialize_with = "deserialise_finite_non_negative")] pub price_tolerance: Dimensionless, - /// Slack applied during cycle balancing, allowing newly selected assets to flex their capacity - /// by this proportion. - /// - /// Existing assets remain fixed; this gives newly selected assets the wiggle-room to absorb - /// small demand changes before we would otherwise need to break for re-investment. - #[serde(deserialize_with = "deserialise_finite_non_negative")] - pub capacity_margin: Dimensionless, /// Number of years an asset can remain unused before being decommissioned pub mothball_years: u32, /// Absolute tolerance when checking if remaining demand is close enough to zero @@ -152,7 +145,6 @@ impl Default for ModelParameters { annual_utilisation_penalty: MoneyPerCapacityPerYear(1e-6), max_ironing_out_iterations: 1, price_tolerance: Dimensionless(1e-6), - capacity_margin: Dimensionless(0.2), mothball_years: 0, remaining_demand_absolute_tolerance: DEFAULT_REMAINING_DEMAND_ABSOLUTE_TOLERANCE, highs: HighsOptions::default(), @@ -355,8 +347,6 @@ impl ModelParameters { // price_tolerance already validated with deserialise_finite_non_negative - // capacity_margin already validated with deserialise_finite_non_negative - // remaining_demand_absolute_tolerance already validated with // deserialise_finite_non_negative; check remaining constraints here check_remaining_demand_absolute_tolerance( diff --git a/src/output.rs b/src/output.rs index 810fd0edb..ace9e06ef 100644 --- a/src/output.rs +++ b/src/output.rs @@ -430,16 +430,11 @@ impl DebugDataWriter { return Ok(()); } - // If the unmet demand writer already exist, we panic, as it should not happen - assert!( - self.unmet_demand_writer.is_none(), - "Unmet demand file already exists!" - ); - let run_description = self.with_context(run_description); - let writer = self - .unmet_demand_writer - .insert(csv::Writer::from_path(&self.unmet_demand_file_path)?); + if self.unmet_demand_writer.is_none() { + self.unmet_demand_writer = Some(csv::Writer::from_path(&self.unmet_demand_file_path)?); + } + let writer = self.unmet_demand_writer.as_mut().unwrap(); for (commodity_id, region_id, time_slice, value) in rows { let row = UnmetDemandRow { milestone_year, diff --git a/src/simulation/market.rs b/src/simulation/market.rs index c1e70b276..37eb1f247 100644 --- a/src/simulation/market.rs +++ b/src/simulation/market.rs @@ -1,7 +1,7 @@ //! Code for creating sets of markets. use super::optimisation::DispatchRun; use crate::agent::Agent; -use crate::asset::{Asset, AssetCapacity, AssetIterator, AssetRef, AssetState}; +use crate::asset::{Asset, AssetCapacity, AssetIterator, AssetRef}; use crate::commodity::{Commodity, CommodityID}; use crate::model::Model; use crate::output::DataWriter; @@ -14,8 +14,7 @@ use crate::simulation::investment::{ use crate::simulation::prices::Prices; use crate::time_slice::TimeSliceInfo; use crate::units::{Capacity, Dimensionless, Flow}; -use anyhow::{Context, Result}; -use indexmap::IndexMap; +use anyhow::{Context, Result, bail}; use itertools::{Itertools, chain}; use log::debug; use std::collections::HashMap; @@ -29,7 +28,14 @@ pub enum MarketSet { /// Assets are selected for a group of markets which forms a cycle. /// Experimental: handled by [`select_assets_for_cycle`] and guarded by the broken options /// parameter. - Cycle(Vec<(CommodityID, RegionID)>), + Cycle { + /// Investment order for first pass + first_pass: Vec<(CommodityID, RegionID)>, + /// Investment order for second pass + second_pass: Vec<(CommodityID, RegionID)>, + /// Processes to exclude from the second pass + excluded_processes: Vec, + }, /// Assets are selected for a layer of independent [`MarketSet`]s Layer(Vec), } @@ -41,7 +47,7 @@ impl MarketSet { ) -> Box + 'a> { match self { MarketSet::Single(market) => Box::new(std::iter::once(market)), - MarketSet::Cycle(markets) => Box::new(markets.iter()), + MarketSet::Cycle { first_pass, .. } => Box::new(first_pass.iter()), MarketSet::Layer(set) => Box::new(set.iter().flat_map(|s| s.iter_markets())), } } @@ -80,13 +86,14 @@ impl MarketSet { demand, existing_assets, prices, + &[], writer, ), - MarketSet::Cycle(markets) => { + MarketSet::Cycle { .. } => { debug!("Starting investment for cycle '{self}'"); select_assets_for_cycle( model, - markets, + self, year, demand, existing_assets, @@ -133,11 +140,14 @@ impl Display for MarketSet { MarketSet::Single((commodity_id, region_id)) => { write!(f, "{commodity_id}|{region_id}") } - MarketSet::Cycle(markets) => { + MarketSet::Cycle { first_pass, .. } => { write!( f, "({})", - markets.iter().map(|(c, r)| format!("{c}|{r}")).join(", ") + first_pass + .iter() + .map(|(c, r)| format!("{c}|{r}")) + .join(", ") ) } MarketSet::Layer(ids) => { @@ -159,6 +169,7 @@ pub fn select_assets_for_single_market( demand: &AllDemandMap, existing_assets: &[AssetRef], prices: &Prices, + excluded_processes: &[ProcessID], writer: &mut DataWriter, ) -> Result> { let commodity = &model.commodities[commodity_id]; @@ -182,7 +193,7 @@ pub fn select_assets_for_single_market( ); // Existing and candidate assets from which to choose - let opt_assets = get_asset_options( + let mut opt_assets = get_asset_options( existing_assets, &demand_portion_for_market, agent, @@ -193,6 +204,9 @@ pub fn select_assets_for_single_market( ) .collect::>(); + // Exclude certain processes from the options + opt_assets.retain(|asset| !excluded_processes.contains(asset.process_id())); + // Calculate the agent's share of addition limits for candidate processes let agent_addition_limits = collect_agent_limits( agent, @@ -233,24 +247,16 @@ pub fn select_assets_for_single_market( Ok(selected_assets) } -/// Iterates through the a pre-ordered set of markets forming a cycle, selecting assets for each +/// Iterates through a pre-ordered set of markets forming a cycle, selecting assets for each /// market in turn. /// -/// Dispatch optimisation is performed after each market is visited to rebalance demand. -/// While dispatching, newly selected (`Ready`) assets are given flexible capacity (bounded by -/// `capacity_margin`) so small demand shifts caused by later markets can be absorbed. After all -/// markets have been visited once, the final set of assets is returned, applying any capacity -/// adjustments from the final full-system dispatch optimisation. +/// Dispatch optimisation is performed after each market is visited. /// -/// Dispatch may fail at any point if new demands are encountered for previously visited markets, -/// and the `capacity_margin` is not sufficient to absorb the demand shift. At this point, the -/// simulation is terminated with an error prompting the user to increase the `capacity_margin`. -/// A longer-term solution (TODO) may be to trigger re-investment for the affected markets. Other -/// yet-to-implement features may also help to stabilise the cycle, such as capacity growth limits. +/// Dispatch may fail at any point if new demands are encountered for previously visited markets. #[allow(clippy::too_many_arguments)] pub fn select_assets_for_cycle( model: &Model, - markets: &[(CommodityID, RegionID)], + market_set: &MarketSet, year: u32, demand: &AllDemandMap, existing_assets: &[AssetRef], @@ -259,118 +265,157 @@ pub fn select_assets_for_cycle( previously_selected_assets: &[AssetRef], writer: &mut DataWriter, ) -> Result> { + let MarketSet::Cycle { + first_pass, + second_pass, + excluded_processes, + } = market_set + else { + bail!("expected MarketSet::Cycle"); + }; + // Precompute a joined string for logging - let markets_str = markets.iter().map(|(c, r)| format!("{c}|{r}")).join(", "); + let markets_str = first_pass + .iter() + .map(|(c, r)| format!("{c}|{r}")) + .join(", "); + + // STEP 1 + // Iterate over the markets in order1, considering all processes // Iterate over the markets to select assets - let mut current_demand = demand.clone(); - let mut assets_for_cycle = IndexMap::new(); - let mut last_solution = None; - for (idx, (commodity_id, region_id)) in markets.iter().enumerate() { + let mut net_demand = demand.clone(); + let mut assets_for_first_pass = Vec::new(); + let mut final_pass_1_solution = None; + for (idx, (commodity_id, region_id)) in first_pass.iter().enumerate() { // Select assets for this market - let assets = select_assets_for_single_market( + debug!("Running {commodity_id}|{region_id} selection pass 1"); + let selected_assets = select_assets_for_single_market( model, commodity_id, region_id, year, - ¤t_demand, + &net_demand, existing_assets, prices, + &[], writer, )?; - assets_for_cycle.insert((commodity_id.clone(), region_id.clone()), assets); + debug!("Completed {commodity_id}|{region_id} selection pass 1"); + assets_for_first_pass.extend(selected_assets.iter().cloned()); // Assemble full list of assets for dispatch (previously selected + all chosen so far) let mut all_assets = previously_selected_assets.to_vec(); - let assets_for_cycle_flat: Vec<_> = assets_for_cycle - .values() - .flat_map(|v| v.iter().cloned()) - .collect(); - all_assets.extend_from_slice(&assets_for_cycle_flat); + all_assets.extend(assets_for_first_pass.iter().cloned()); // We balance all previously seen markets plus all cycle markets up to and including this one let mut markets_to_balance = seen_markets.to_vec(); - markets_to_balance.extend_from_slice(&markets[0..=idx]); - - // We allow all `Ready` state assets to have flexible capacity - let flexible_capacity_assets: Vec<_> = assets_for_cycle_flat - .iter() - .filter(|asset| matches!(asset.state(), AssetState::Ready { .. })) - .cloned() - .collect(); - - // Retrieve installable capacity limits for flexible capacity assets. - let mut agent_share_cache = HashMap::new(); - let capacity_limits = flexible_capacity_assets - .iter() - .filter_map(|asset| { - let agent_id = asset.agent_id().unwrap(); - let commodity_id = asset.primary_output_commodity().unwrap(); - let agent_share = *agent_share_cache - .entry((agent_id, commodity_id)) - .or_insert_with(|| { - model.agents[agent_id].commodity_portions[&(commodity_id.clone(), year)] - }); - asset - .process() - .agent_addition_limit(asset.region_id(), asset.commission_year(), agent_share) - .map(|max_capacity| (asset.clone(), max_capacity)) - }) - .collect::>(); + markets_to_balance.extend_from_slice(&first_pass[0..=idx]); // Run dispatch + debug!("Running cycle ({markets_str}) post {commodity_id}|{region_id} investment pass 1"); let solution = DispatchRun::new(model, &all_assets, year) + .allow_unmet_demand() .without_commodity_constraints() .with_market_balance_subset(&markets_to_balance) - .with_flexible_capacity_assets( - &flexible_capacity_assets, - Some(&capacity_limits), - // Gives newly selected cycle assets limited capacity wiggle-room; existing assets stay fixed. - model.parameters.capacity_margin, - ) .run( - &format!("cycle ({markets_str}) post {commodity_id}|{region_id} investment"), + &format!("cycle ({markets_str}) post {commodity_id}|{region_id} investment pass 1"), writer, ) - .with_context(|| { - format!( - "Cycle balancing failed for cycle ({markets_str}), capacity_margin: {}. \ - Try increasing the capacity_margin.", - model.parameters.capacity_margin - ) - })?; + .with_context(|| format!("Dispatch failed for cycle ({markets_str})"))?; + debug!("Completed cycle ({markets_str}) post {commodity_id}|{region_id} investment pass 1"); - // Calculate new net demand map with all assets selected so far - current_demand.clone_from(demand); + // Update demand map update_net_demand_map( - &mut current_demand, + &mut net_demand, &solution.create_flow_map(), - &assets_for_cycle_flat, + &selected_assets, ); - last_solution = Some(solution); + final_pass_1_solution = Some(solution); } - // Finally, update flexible capacity assets based on the final solution - let mut all_cycle_assets: Vec<_> = assets_for_cycle.into_values().flatten().collect(); - if let Some(solution) = last_solution { - let new_capacities: HashMap<_, _> = solution.iter_capacity().collect(); - for asset in &mut all_cycle_assets { - if let Some(new_capacity) = new_capacities.get(asset) { - debug!( - "Capacity of asset '{}' modified during cycle balancing ({} to {})", - asset.process_id(), - asset.total_capacity(), - new_capacity.total_capacity() - ); - asset.make_mut().set_capacity(*new_capacity); - } + // Use the final pass-1 dispatch residual as the starting demand for pass 2. The dispatch + // solution is authoritative for balanced markets; retain the existing demand for markets + // which were not included in that dispatch subset. + if let Some(solution) = final_pass_1_solution.as_ref() { + for (commodity_id, region_id, time_slice, unmet_demand) in solution.iter_unmet_demand() { + net_demand.insert( + (commodity_id.clone(), region_id.clone(), time_slice.clone()), + unmet_demand, + ); } } - // Drop any assets who's capacities were dropped to zero - all_cycle_assets.retain(|asset| asset.num_tranches() > 0); + // STEP 2 + // Iterate over the markets in order2, excluding the specified processes + // This time we disallow unmet demand + + let mut assets_for_second_pass = Vec::new(); + for (idx, (commodity_id, region_id)) in second_pass.iter().enumerate() { + // Select assets for this market + debug!("Running {commodity_id}|{region_id} selection pass 2"); + let selected_assets = select_assets_for_single_market( + model, + commodity_id, + region_id, + year, + &net_demand, + existing_assets, + prices, + &excluded_processes, + writer, + )?; + debug!("Completed {commodity_id}|{region_id} selection pass 2"); + assets_for_second_pass.extend(selected_assets.iter().cloned()); + + // Assemble full list of assets for dispatch (previously selected + all chosen so far) + let mut all_assets = previously_selected_assets.to_vec(); + all_assets.extend(assets_for_first_pass.iter().cloned()); + all_assets.extend(assets_for_second_pass.iter().cloned()); + + // We balance all previously seen markets plus all cycle markets up to and including this one + let mut markets_to_balance = seen_markets.to_vec(); + markets_to_balance.extend_from_slice(&second_pass[0..=idx]); + + // Run dispatch + debug!("Running cycle ({markets_str}) post {commodity_id}|{region_id} investment pass 2"); + let solution = DispatchRun::new(model, &all_assets, year) + .without_commodity_constraints() + .with_market_balance_subset(&markets_to_balance) + .run( + &format!("cycle ({markets_str}) post {commodity_id}|{region_id} investment pass 2"), + writer, + ) + .with_context(|| format!("Dispatch failed for cycle ({markets_str})"))?; + debug!("Completed cycle ({markets_str}) post {commodity_id}|{region_id} investment pass 2"); + + // Update demand map + update_net_demand_map( + &mut net_demand, + &solution.create_flow_map(), + &selected_assets, + ); + } + + // Combine equivalent candidate assets + let mut combined_assets: Vec = Vec::new(); + for asset in assets_for_first_pass + .into_iter() + .chain(assets_for_second_pass) + { + if let Some(existing_asset) = combined_assets + .iter_mut() + .find(|existing| **existing == asset) + { + existing_asset + .make_mut() + .increase_capacity(asset.capacity()); + } else { + combined_assets.push(asset); + } + } - Ok(all_cycle_assets) + Ok(combined_assets) } /// Get a portion of the demand profile for this market diff --git a/src/simulation/optimisation.rs b/src/simulation/optimisation.rs index 3b42e591e..78c7824c5 100644 --- a/src/simulation/optimisation.rs +++ b/src/simulation/optimisation.rs @@ -1,25 +1,20 @@ //! Code for performing dispatch optimisation. //! //! This is used to calculate commodity flows and prices. -use crate::asset::{Asset, AssetCapacity, AssetRef, AssetState}; +use crate::asset::{Asset, AssetRef}; use crate::commodity::CommodityID; -use crate::finance::annual_capital_cost; use crate::input::format_items_with_cap; use crate::model::Model; use crate::output::DataWriter; use crate::region::RegionID; use crate::simulation::PriceMap; use crate::time_slice::{TimeSliceID, TimeSliceInfo, TimeSliceSelection}; -use crate::units::{ - Activity, Capacity, Dimensionless, Flow, Money, MoneyPerActivity, MoneyPerCapacity, - MoneyPerFlow, Year, -}; +use crate::units::{Activity, Flow, Money, MoneyPerActivity, MoneyPerFlow}; use anyhow::{Context, Result, anyhow, bail}; use highs::{HighsModelStatus, RowProblem as Problem, Sense}; use indexmap::{IndexMap, IndexSet}; use itertools::{chain, iproduct}; use log::warn; -use std::collections::HashMap; use std::error::Error; use std::ops::Range; @@ -38,9 +33,6 @@ type Variable = highs::Col; /// The map of activity variables for assets type ActivityVariableMap = IndexMap<(AssetRef, TimeSliceID), Variable>; -/// A map of capacity variables for assets -type CapacityVariableMap = IndexMap; - /// Variables representing unmet demand for a given market type UnmetDemandVariableMap = IndexMap<(CommodityID, RegionID, TimeSliceID), Variable>; @@ -57,8 +49,6 @@ pub struct VariableMap { activity_vars: ActivityVariableMap, existing_asset_var_idx: Range, candidate_asset_var_idx: Range, - capacity_vars: CapacityVariableMap, - capacity_var_idx: Range, unmet_demand_vars: UnmetDemandVariableMap, unmet_demand_var_idx: Range, } @@ -104,8 +94,6 @@ impl VariableMap { activity_vars, existing_asset_var_idx, candidate_asset_var_idx, - capacity_vars: CapacityVariableMap::new(), - capacity_var_idx: Range::default(), unmet_demand_vars: UnmetDemandVariableMap::default(), unmet_demand_var_idx: Range::default(), } @@ -173,11 +161,6 @@ impl VariableMap { fn activity_var_keys(&self) -> indexmap::map::Keys<'_, (AssetRef, TimeSliceID), Variable> { self.activity_vars.keys() } - - /// Iterate over capacity variables - fn iter_capacity_vars(&self) -> impl Iterator { - self.capacity_vars.iter().map(|(asset, var)| (asset, *var)) - } } /// The solution to the dispatch optimisation problem @@ -261,22 +244,6 @@ impl Solution<'_> { }) } - /// Iterate over capacity values - pub fn iter_capacity(&self) -> impl Iterator { - self.variables - .capacity_vars - .keys() - .zip(self.solution.columns()[self.variables.capacity_var_idx.clone()].iter()) - .map(|(asset, capacity_var)| { - // The capacity variable represents number of tranches - let tranche_size = asset.capacity().tranche_size(); - #[allow(clippy::cast_possible_truncation, clippy::cast_sign_loss)] - let asset_capacity = AssetCapacity::new(capacity_var.round() as u32, tranche_size); - - (asset, asset_capacity) - }) - } - /// Keys and dual values for commodity balance constraints. pub fn iter_commodity_balance_duals( &self, @@ -296,11 +263,7 @@ impl Solution<'_> { /// Keys and dual values for activity constraints. /// - /// Note: if there are any flexible capacity assets, these will have two duals with identical - /// keys, and there will be no way to distinguish between them in the resulting iterator. - /// Recommended for now only to use this function when there are no flexible capacity assets. - /// - /// Also note: this excludes seasonal and annual constraints. Recommended for now not to use + /// Note: this excludes seasonal and annual constraints. Recommended for now not to use /// this for models that include seasonal or annual availability constraints. pub fn iter_activity_duals( &self, @@ -436,14 +399,12 @@ fn filter_input_prices( pub struct DispatchRun<'model, 'run> { model: &'model Model, existing_assets: &'run [AssetRef], - flexible_capacity_assets: &'run [AssetRef], - capacity_limits: Option<&'run HashMap>, candidate_assets: &'run [AssetRef], markets_to_balance: &'run [(CommodityID, RegionID)], input_prices: Option<&'run PriceMap>, include_commodity_constraints: bool, + allow_unmet_demand: bool, year: u32, - capacity_margin: Dimensionless, } impl<'model, 'run> DispatchRun<'model, 'run> { @@ -452,29 +413,12 @@ impl<'model, 'run> DispatchRun<'model, 'run> { Self { model, existing_assets: assets, - flexible_capacity_assets: &[], - capacity_limits: None, candidate_assets: &[], markets_to_balance: &[], input_prices: None, include_commodity_constraints: true, + allow_unmet_demand: false, year, - capacity_margin: Dimensionless(0.0), - } - } - - /// Include the specified flexible capacity assets in the dispatch run - pub fn with_flexible_capacity_assets( - self, - flexible_capacity_assets: &'run [AssetRef], - capacity_limits: Option<&'run HashMap>, - capacity_margin: Dimensionless, - ) -> Self { - Self { - flexible_capacity_assets, - capacity_limits, - capacity_margin, - ..self } } @@ -494,6 +438,14 @@ impl<'model, 'run> DispatchRun<'model, 'run> { } } + /// Allow unmet demand in the dispatch solution. + pub fn allow_unmet_demand(self) -> Self { + Self { + allow_unmet_demand: true, + ..self + } + } + /// Only apply commodity balance constraints to the specified subset of markets pub fn with_market_balance_subset( self, @@ -542,6 +494,17 @@ impl<'model, 'run> DispatchRun<'model, 'run> { .map(|prices| filter_input_prices(prices, markets_to_balance)); let input_prices = input_prices_owned.as_ref(); + if self.allow_unmet_demand { + let solution = self.run_internal( + markets_to_balance, + self.include_commodity_constraints, + true, + input_prices, + )?; + writer.write_dispatch_debug_info(self.year, run_description, &solution)?; + return Ok(solution); + } + // First solve the configured dispatch problem. If it is infeasible, run diagnostic solves // below to distinguish unmet demand from infeasibility caused by explicit constraints. match self.run_without_unmet_demand_variables(markets_to_balance, input_prices) { @@ -741,25 +704,6 @@ impl<'model, 'run> DispatchRun<'model, 'run> { variables.add_unmet_demand_variables(&mut problem, self.model, markets_to_balance); } - // Check flexible capacity assets is a subset of existing assets - for asset in self.flexible_capacity_assets { - assert!( - self.existing_assets.contains(asset), - "Flexible capacity assets must be a subset of existing assets. Offending asset: {asset:?}" - ); - } - - // Add capacity variables for flexible capacity assets - if !self.flexible_capacity_assets.is_empty() { - variables.capacity_var_idx = add_capacity_variables( - &mut problem, - &mut variables.capacity_vars, - self.flexible_capacity_assets, - self.capacity_limits, - self.capacity_margin, - ); - } - // Add constraints let all_assets = chain(self.existing_assets.iter(), self.candidate_assets.iter()); let constraint_keys = add_model_constraints( @@ -821,51 +765,6 @@ fn add_activity_variables( start..problem.num_cols() } -fn add_capacity_variables( - problem: &mut Problem, - variables: &mut CapacityVariableMap, - assets: &[AssetRef], - capacity_limits: Option<&HashMap>, - capacity_margin: Dimensionless, -) -> Range { - let capacity_margin = capacity_margin.value(); - - // This line **must** come before we add more variables - let start = problem.num_cols(); - - for asset in assets { - // Can only have flexible capacity for `Ready` assets - assert!( - matches!(asset.state(), AssetState::Ready { .. }), - "Flexible capacity can only be assigned to `Ready` type assets. Offending asset: {asset:?}" - ); - - // Coefficient: cost per capacity - let coeff = calculate_capacity_coefficient(asset); - - // Add a capacity variable for each asset - // Bounds are calculated based on current capacity with wiggle-room defined by - // `capacity_margin`, and limited by `capacity_limit` if provided. - // Since capacity variables are numbers of tranches, we apply constraints to the tranche count - let tranche_size = asset.capacity().tranche_size(); - let current_tranches = asset.capacity().num_tranches(); - - let lower = (current_tranches as f64 * (1.0 - capacity_margin)).max(0.0); - - let mut upper = current_tranches as f64 * (1.0 + capacity_margin); - if let Some(limit) = capacity_limits.and_then(|limits| limits.get(asset)) { - upper = upper.min((*limit / tranche_size).value()); - } - - let var = problem.add_integer_column((coeff * tranche_size).value(), lower..=upper); - - let existing = variables.insert(asset.clone(), var).is_some(); - assert!(!existing, "Duplicate entry for var"); - } - - start..problem.num_cols() -} - /// Calculate the cost coefficient for an activity variable. /// /// Normally, the cost coefficient is the same as the asset's operating costs for the given year and @@ -895,13 +794,3 @@ fn calculate_activity_coefficient( opex } } - -/// Calculate the cost coefficient for a capacity variable (for flexible capacity assets only). -/// -/// This includes both the annual fixed operating cost and the annual capital cost. -fn calculate_capacity_coefficient(asset: &AssetRef) -> MoneyPerCapacity { - let param = asset.process_parameter(); - let annual_fixed_operating_cost = param.fixed_operating_cost * Year(1.0); - annual_fixed_operating_cost - + annual_capital_cost(param.capital_cost, param.lifetime, param.discount_rate) -} diff --git a/src/simulation/optimisation/constraints.rs b/src/simulation/optimisation/constraints.rs index fd233408a..17d89ed96 100644 --- a/src/simulation/optimisation/constraints.rs +++ b/src/simulation/optimisation/constraints.rs @@ -9,7 +9,7 @@ use crate::time_slice::{Season, TimeSliceInfo, TimeSliceSelection}; use crate::units::{Flow, MoneyPerCapacityPerYear, UnitType, Year}; use highs::RowProblem as Problem; use indexmap::IndexMap; -use std::collections::{HashMap, HashSet}; +use std::collections::HashMap; /// Corresponding variables for a constraint along with the row offset in the solution pub struct KeysWithOffset { @@ -456,9 +456,7 @@ fn candidate_balance_epsilon( /// /// Returns an `ActivityKeys` where `offset` is the row index of the first /// activity constraint added and `keys` enumerates the `(asset, time_selection)` -/// entries in the same row order. Note that for flexible-capacity assets two rows -/// (upper and lower bounds) are added per selection; in that case the same key is -/// stored twice to match the solver ordering. +/// entries in the same row order. /// #[doc = concat!("[1]: ", crate::docs_url!("model/dispatch_optimisation.html#asset-activity-limits"))] fn add_activity_constraints<'a, I>( @@ -476,61 +474,23 @@ where let offset = problem.num_rows(); let mut keys = Vec::new(); - let capacity_vars: IndexMap<&AssetRef, highs::Col> = variables.iter_capacity_vars().collect(); // Create constraints for each asset for asset in assets { - if let Some(&capacity_var) = capacity_vars.get(asset) { - // Asset with flexible capacity - for (ts_selection, limits) in asset.iter_activity_per_capacity_limits() { - let mut upper_limit = limits.end().value(); - let mut lower_limit = limits.start().value(); - - // The capacity variable represents number of tranches, so we need to multiply the - // per-capacity limits by the tranche size. - let tranche_size = asset.capacity().tranche_size(); - upper_limit *= tranche_size.value(); - lower_limit *= tranche_size.value(); - - // Collect capacity and activity terms - // We have a single capacity term, and activity terms for all time slices in the selection - let mut terms_upper = vec![(capacity_var, -upper_limit)]; - let mut terms_lower = vec![(capacity_var, -lower_limit)]; - for (time_slice, _) in ts_selection.iter(time_slice_info) { - let var = variables.get_activity_var(asset, time_slice); - terms_upper.push((var, 1.0)); - terms_lower.push((var, 1.0)); - } - - // Upper bound: sum(activity) - (capacity * upper_limit_per_capacity) ≤ 0 - problem.add_row(..=0.0, &terms_upper); + for (ts_selection, limits) in asset.iter_activity_limits() { + let limits = limits.start().value()..=limits.end().value(); - // Lower bound: sum(activity) - (capacity * lower_limit_per_capacity) ≥ 0 - problem.add_row(0.0.., &terms_lower); - - // Store keys for retrieving duals later. - // TODO: a bit of a hack pushing identical keys twice. Safe for now so long as we don't - // use the activity duals for anything important when using flexible capacity assets. - keys.push((asset.clone(), ts_selection.clone())); - keys.push((asset.clone(), ts_selection.clone())); - } - } else { - // Fixed-capacity asset: simple absolute activity limits. - for (ts_selection, limits) in asset.iter_activity_limits() { - let limits = limits.start().value()..=limits.end().value(); - - // Collect activity terms for the time slices in this selection - let terms = ts_selection - .iter(time_slice_info) - .map(|(time_slice, _)| (variables.get_activity_var(asset, time_slice), 1.0)) - .collect::>(); + // Collect activity terms for the time slices in this selection + let terms = ts_selection + .iter(time_slice_info) + .map(|(time_slice, _)| (variables.get_activity_var(asset, time_slice), 1.0)) + .collect::>(); - // Constraint: sum of activities in selection within limits - problem.add_row(limits, &terms); + // Constraint: sum of activities in selection within limits + problem.add_row(limits, &terms); - // Store keys for retrieving duals later. - keys.push((asset.clone(), ts_selection.clone())); - } + // Store keys for retrieving duals later. + keys.push((asset.clone(), ts_selection.clone())); } } @@ -544,7 +504,7 @@ where /// which is the authoritative check for equivalence. This also handles hash collisions correctly. /// /// The caller must ensure that `assets` contains only assets eligible for equal-utilisation -/// constraints (i.e. flexible-capacity assets have already been filtered out). +/// constraints. fn group_dispatch_equivalent_assets<'a, I>(assets: I) -> Vec> where I: Iterator, @@ -581,8 +541,7 @@ where /// Add constraints requiring dispatch-equivalent assets to have equal utilisation in each time /// slice. /// -/// Flexible-capacity assets are excluded because their maximum activity depends on a decision -/// variable. The constraints added here are not included in [`ConstraintKeys`], as their duals +/// The constraints added here are not included in [`ConstraintKeys`], as their duals /// are not currently used. fn add_equal_utilisation_constraints<'a, I>( problem: &mut Problem, @@ -592,14 +551,7 @@ fn add_equal_utilisation_constraints<'a, I>( ) where I: Iterator + 'a, { - // Identify flexible-capacity assets so we can exclude them from the constraints - let flexible_assets: HashSet<_> = variables - .iter_capacity_vars() - .map(|(asset, _)| asset) - .collect(); - - let asset_groups = - group_dispatch_equivalent_assets(assets.filter(|asset| !flexible_assets.contains(asset))); + let asset_groups = group_dispatch_equivalent_assets(assets); // For each group of assets, add constraints to force equal utilisation in each time slice // This is done by anchoring each asset to the first asset in the group (-> (n-1) constraints diff --git a/src/simulation/prices.rs b/src/simulation/prices.rs index d40e897ab..62c698997 100644 --- a/src/simulation/prices.rs +++ b/src/simulation/prices.rs @@ -163,13 +163,13 @@ fn price_market_set( strategy_override, ); } - MarketSet::Cycle(markets) => { + MarketSet::Cycle { first_pass, .. } => { price_cycle( model, solution_without_candidates, solution_with_candidates, year, - markets, + first_pass, shadow_prices, annual_activities, market_prices, diff --git a/tests/data/circularity/asset_capacities.csv b/tests/data/circularity/asset_capacities.csv index 43062092a..79dd1a8f8 100644 --- a/tests/data/circularity/asset_capacities.csv +++ b/tests/data/circularity/asset_capacities.csv @@ -26,21 +26,21 @@ milestone_year,asset_id,capacity,num_tranches,mothballed_capacity,mothballed_tra 2030,17,3680.183145405077,26,0.0,0 2030,18,298.6475820926018,57,0.0,0 2030,19,2944.1465163240614,16,0.0,0 -2030,20,165.3505808753475,27,0.0,0 +2030,20,165.35058087534748,27,0.0,0 2040,5,3.964844,1,0.0,0 2040,6,2.999,1,0.0,0 2040,16,1849.28399075358,36,0.0,0 2040,18,298.6475820926018,57,0.0,0 2040,19,1288.064100891777,7,0.0,0 -2040,20,165.3505808753475,27,0.0,0 +2040,20,165.35058087534748,27,0.0,0 2040,21,942.563016229748,28,0.0,0 2040,22,2198.390989008045,39,0.0,0 -2040,23,38.755532680196005,17,0.0,0 -2040,24,5.471369319196239,6,0.0,0 -2040,25,8.10573232473517,8,0.0,0 -2040,26,153.84953248060512,21,0.0,0 -2040,27,358.63594983962076,37,0.0,0 -2040,28,972.485651665613,26,0.0,0 +2040,23,47.87448154612448,21,0.0,0 +2040,24,4.559474432663533,5,0.0,0 +2040,25,7.0925157841432735,7,0.0,0 +2040,26,153.49186905289415,45,0.0,0 +2040,27,241.2806473380193,57,0.0,0 +2040,28,972.4856516656132,26,0.0,0 2040,29,2349.6972514094086,33,0.0,0 -2040,30,376.5677473316019,37,0.0,0 +2040,30,253.34467970492025,57,0.0,0 2040,31,2627.9227668603858,37,0.0,0 diff --git a/tests/data/circularity/commodity_flows.csv b/tests/data/circularity/commodity_flows.csv index 47bbbcb80..91d24e554 100644 --- a/tests/data/circularity/commodity_flows.csv +++ b/tests/data/circularity/commodity_flows.csv @@ -647,14 +647,14 @@ milestone_year,asset_id,commodity_id,time_slice,flow 2030,0,CO2EMT,summer.peak,0.0 2030,0,GASPRD,summer.evening,0.0 2030,0,CO2EMT,summer.evening,0.0 -2030,0,GASPRD,autumn.night,18.92207366424135 -2030,0,CO2EMT,autumn.night,96.74856264526602 -2030,0,GASPRD,autumn.day,27.031533768987256 -2030,0,CO2EMT,autumn.day,138.21223216083186 -2030,0,GASPRD,autumn.peak,8.109460104745903 -2030,0,CO2EMT,autumn.peak,41.463669515565805 -2030,0,GASPRD,autumn.evening,10.81261355949544 -2030,0,CO2EMT,autumn.evening,55.28489312970019 +2030,0,GASPRD,autumn.night,18.92207366424136 +2030,0,CO2EMT,autumn.night,96.74856264526608 +2030,0,GASPRD,autumn.day,27.031533768987273 +2030,0,CO2EMT,autumn.day,138.21223216083195 +2030,0,GASPRD,autumn.peak,8.109460104745908 +2030,0,CO2EMT,autumn.peak,41.46366951556583 +2030,0,GASPRD,autumn.evening,10.812613559495437 +2030,0,CO2EMT,autumn.evening,55.28489312970017 2030,1,OILCRD,winter.night,89.65022397810527 2030,1,GASPRD,winter.night,8.965022397810527 2030,1,CO2EMT,winter.night,657.405092431446 @@ -739,18 +739,18 @@ milestone_year,asset_id,commodity_id,time_slice,flow 2030,2,GASPRD,summer.evening,-0.0 2030,2,GASNAT,summer.evening,0.0 2030,2,CO2EMT,summer.evening,0.0 -2030,2,GASPRD,autumn.night,-43.07327566636766 -2030,2,GASNAT,autumn.night,41.02216730130253 -2030,2,CO2EMT,autumn.night,104.87317070577993 -2030,2,GASPRD,autumn.day,-61.53325086756534 -2030,2,GASNAT,autumn.day,58.603096064347945 -2030,2,CO2EMT,autumn.day,149.81881508850554 -2030,2,GASPRD,autumn.peak,-18.459975201197683 -2030,2,GASNAT,autumn.peak,17.58092876304541 -2030,2,CO2EMT,autumn.peak,44.9456443827256 -2030,2,GASPRD,autumn.evening,-24.613300465169978 -2030,2,GASNAT,autumn.evening,23.44123853825712 -2030,2,CO2EMT,autumn.evening,59.92752632305434 +2030,2,GASPRD,autumn.night,-43.073275666367664 +2030,2,GASNAT,autumn.night,41.02216730130254 +2030,2,CO2EMT,autumn.night,104.87317070577994 +2030,2,GASPRD,autumn.day,-61.53325086756536 +2030,2,GASNAT,autumn.day,58.60309606434796 +2030,2,CO2EMT,autumn.day,149.81881508850557 +2030,2,GASPRD,autumn.peak,-18.459975201197686 +2030,2,GASNAT,autumn.peak,17.580928763045414 +2030,2,CO2EMT,autumn.peak,44.945644382725604 +2030,2,GASPRD,autumn.evening,-24.61330046516998 +2030,2,GASNAT,autumn.evening,23.441238538257124 +2030,2,CO2EMT,autumn.evening,59.927526323054344 2030,5,ELCTRI,winter.night,4.435312795545212 2030,5,ELCTRI,winter.day,7.075379933645912 2030,5,ELCTRI,winter.peak,1.9712501261051125 @@ -827,9 +827,9 @@ milestone_year,asset_id,commodity_id,time_slice,flow 2030,13,GASNAT,winter.evening,-71.44063561968 2030,13,RSHEAT,winter.evening,62.1222918432 2030,13,CO2EMT,winter.evening,3652.7596992342387 -2030,13,GASNAT,peak.night,-9.665895533424854 -2030,13,RSHEAT,peak.night,8.405126550804221 -2030,13,CO2EMT,peak.night,494.2172386240128 +2030,13,GASNAT,peak.night,-9.665895533424857 +2030,13,RSHEAT,peak.night,8.405126550804225 +2030,13,CO2EMT,peak.night,494.217238624013 2030,13,GASNAT,peak.day,-80.49245678381253 2030,13,RSHEAT,peak.day,69.99344068157612 2030,13,CO2EMT,peak.day,4115.579315356335 @@ -851,9 +851,9 @@ milestone_year,asset_id,commodity_id,time_slice,flow 2030,13,GASNAT,summer.evening,-0.0 2030,13,RSHEAT,summer.evening,0.0 2030,13,CO2EMT,summer.evening,0.0 -2030,13,GASNAT,autumn.night,-2.389279049096679 -2030,13,RSHEAT,autumn.night,2.0776339557362427 -2030,13,CO2EMT,autumn.night,122.1638377803132 +2030,13,GASNAT,autumn.night,-2.3892790490967144 +2030,13,RSHEAT,autumn.night,2.0776339557362737 +2030,13,CO2EMT,autumn.night,122.16383778031503 2030,13,GASNAT,autumn.day,-67.97422666003601 2030,13,RSHEAT,autumn.day,59.10802318264001 2030,13,CO2EMT,autumn.day,3475.5222091276414 @@ -951,12 +951,12 @@ milestone_year,asset_id,commodity_id,time_slice,flow 2030,16,RSHEAT,winter.peak,25.761012681171703 2030,16,BIOPEL,winter.evening,-0.0 2030,16,RSHEAT,winter.evening,0.0 -2030,16,BIOPEL,peak.night,-11.482679279946936 -2030,16,RSHEAT,peak.night,9.56889939995578 -2030,16,BIOPEL,peak.day,-16.403827520284658 -2030,16,RSHEAT,peak.day,13.669856266903881 -2030,16,BIOPEL,peak.peak,-4.921148240337723 -2030,16,RSHEAT,peak.peak,4.100956866948103 +2030,16,BIOPEL,peak.night,-11.482679279946932 +2030,16,RSHEAT,peak.night,9.568899399955777 +2030,16,BIOPEL,peak.day,-16.403827520284654 +2030,16,RSHEAT,peak.day,13.66985626690388 +2030,16,BIOPEL,peak.peak,-4.921148240337722 +2030,16,RSHEAT,peak.peak,4.100956866948102 2030,16,BIOPEL,peak.evening,-6.561531039609214 2030,16,RSHEAT,peak.evening,5.467942533007679 2030,16,BIOPEL,summer.night,-1.073113352519217 @@ -967,8 +967,8 @@ milestone_year,asset_id,commodity_id,time_slice,flow 2030,16,RSHEAT,summer.peak,0.0 2030,16,BIOPEL,summer.evening,-0.0 2030,16,RSHEAT,summer.evening,0.0 -2030,16,BIOPEL,autumn.night,-8.455970862772512 -2030,16,RSHEAT,autumn.night,7.046642385643761 +2030,16,BIOPEL,autumn.night,-8.455970862772475 +2030,16,RSHEAT,autumn.night,7.04664238564373 2030,16,BIOPEL,autumn.day,-0.0 2030,16,RSHEAT,autumn.day,0.0 2030,16,BIOPEL,autumn.peak,-30.91321521740604 @@ -1039,22 +1039,22 @@ milestone_year,asset_id,commodity_id,time_slice,flow 2030,17,GASOLI,autumn.evening,53.07956502182511 2030,17,DIESEL,autumn.evening,53.07956502182511 2030,17,CO2EMT,autumn.evening,2335.394701830261 -2030,18,BIOPRD,winter.night,-12.056813243944285 -2030,18,BIOPEL,winter.night,11.482679279946938 -2030,18,BIOPRD,winter.day,-17.22401889629889 -2030,18,BIOPEL,winter.day,16.403827520284658 -2030,18,BIOPRD,winter.peak,-5.167205652354611 -2030,18,BIOPEL,winter.peak,4.9211482403377245 -2030,18,BIOPRD,winter.evening,-6.889607591589674 -2030,18,BIOPEL,winter.evening,6.561531039609213 -2030,18,BIOPRD,peak.night,-12.056813243944285 -2030,18,BIOPEL,peak.night,11.482679279946938 -2030,18,BIOPRD,peak.day,-17.224018896298894 -2030,18,BIOPEL,peak.day,16.40382752028466 -2030,18,BIOPRD,peak.peak,-5.16720565235461 -2030,18,BIOPEL,peak.peak,4.921148240337724 -2030,18,BIOPRD,peak.evening,-6.889607591589673 -2030,18,BIOPEL,peak.evening,6.561531039609212 +2030,18,BIOPRD,winter.night,-12.05681324394428 +2030,18,BIOPEL,winter.night,11.482679279946932 +2030,18,BIOPRD,winter.day,-17.224018896298894 +2030,18,BIOPEL,winter.day,16.40382752028466 +2030,18,BIOPRD,winter.peak,-5.167205652354608 +2030,18,BIOPEL,winter.peak,4.921148240337722 +2030,18,BIOPRD,winter.evening,-6.889607591589671 +2030,18,BIOPEL,winter.evening,6.561531039609211 +2030,18,BIOPRD,peak.night,-12.056813243944283 +2030,18,BIOPEL,peak.night,11.482679279946936 +2030,18,BIOPRD,peak.day,-17.22401889629889 +2030,18,BIOPEL,peak.day,16.403827520284658 +2030,18,BIOPRD,peak.peak,-5.167205652354609 +2030,18,BIOPEL,peak.peak,4.921148240337723 +2030,18,BIOPRD,peak.evening,-6.889607591589672 +2030,18,BIOPEL,peak.evening,6.5615310396092115 2030,18,BIOPRD,summer.night,-0.328640964396805 2030,18,BIOPEL,summer.night,0.3129913946636238 2030,18,BIOPRD,summer.day,-0.46948709135156785 @@ -1063,14 +1063,14 @@ milestone_year,asset_id,commodity_id,time_slice,flow 2030,18,BIOPEL,summer.peak,0.13413916852834543 2030,18,BIOPRD,summer.evening,-0.18779483744204228 2030,18,BIOPEL,summer.evening,0.17885222613527835 -2030,18,BIOPRD,autumn.night,-12.056813243944285 -2030,18,BIOPEL,autumn.night,11.482679279946938 -2030,18,BIOPRD,autumn.day,-17.22401889629889 -2030,18,BIOPEL,autumn.day,16.403827520284658 -2030,18,BIOPRD,autumn.peak,-5.167205652354611 -2030,18,BIOPEL,autumn.peak,4.9211482403377245 -2030,18,BIOPRD,autumn.evening,-6.889607591589674 -2030,18,BIOPEL,autumn.evening,6.561531039609213 +2030,18,BIOPRD,autumn.night,-12.05681324394428 +2030,18,BIOPEL,autumn.night,11.482679279946932 +2030,18,BIOPRD,autumn.day,-17.224018896298894 +2030,18,BIOPEL,autumn.day,16.40382752028466 +2030,18,BIOPRD,autumn.peak,-5.167205652354608 +2030,18,BIOPEL,autumn.peak,4.921148240337722 +2030,18,BIOPRD,autumn.evening,-6.889607591589671 +2030,18,BIOPEL,autumn.evening,6.561531039609211 2030,19,OILCRD,winter.night,151.86179604315782 2030,19,GASPRD,winter.night,15.186179604315782 2030,19,CO2EMT,winter.night,1113.6025503844764 @@ -1119,86 +1119,86 @@ milestone_year,asset_id,commodity_id,time_slice,flow 2030,19,OILCRD,autumn.evening,86.77816946504392 2030,19,GASPRD,autumn.evening,8.677816946504391 2030,19,CO2EMT,autumn.evening,636.3443166871671 -2030,20,BIOPRD,winter.night,12.056813243944283 -2030,20,BIOPRD,winter.day,17.224018896298894 -2030,20,BIOPRD,winter.peak,5.1672056523546095 -2030,20,BIOPRD,winter.evening,6.889607591589672 -2030,20,BIOPRD,peak.night,12.056813243944283 -2030,20,BIOPRD,peak.day,17.224018896298894 -2030,20,BIOPRD,peak.peak,5.1672056523546095 -2030,20,BIOPRD,peak.evening,6.889607591589672 +2030,20,BIOPRD,winter.night,12.056813243944282 +2030,20,BIOPRD,winter.day,17.22401889629889 +2030,20,BIOPRD,winter.peak,5.167205652354609 +2030,20,BIOPRD,winter.evening,6.889607591589671 +2030,20,BIOPRD,peak.night,12.056813243944282 +2030,20,BIOPRD,peak.day,17.22401889629889 +2030,20,BIOPRD,peak.peak,5.167205652354609 +2030,20,BIOPRD,peak.evening,6.889607591589671 2030,20,BIOPRD,summer.night,0.32864096439680507 2030,20,BIOPRD,summer.day,0.46948709135156785 2030,20,BIOPRD,summer.peak,0.14084612695476273 2030,20,BIOPRD,summer.evening,0.18779483744204223 -2030,20,BIOPRD,autumn.night,12.056813243944283 -2030,20,BIOPRD,autumn.day,17.224018896298894 -2030,20,BIOPRD,autumn.peak,5.1672056523546095 -2030,20,BIOPRD,autumn.evening,6.889607591589672 -2040,5,ELCTRI,winter.night,1.9156830851254099 -2040,5,ELCTRI,winter.day,7.075379933645912 -2040,5,ELCTRI,winter.peak,1.9712501261051125 -2040,5,ELCTRI,winter.evening,2.569665359840533 -2040,5,ELCTRI,peak.night,1.9156830851254099 +2030,20,BIOPRD,autumn.night,12.056813243944282 +2030,20,BIOPRD,autumn.day,17.22401889629889 +2030,20,BIOPRD,autumn.peak,5.167205652354609 +2030,20,BIOPRD,autumn.evening,6.889607591589671 +2040,5,ELCTRI,winter.night,0.4349787353781742 +2040,5,ELCTRI,winter.day,6.213981720283963 +2040,5,ELCTRI,winter.peak,1.864194498487193 +2040,5,ELCTRI,winter.evening,2.485592679314587 +2040,5,ELCTRI,peak.night,1.3669869082241213 2040,5,ELCTRI,peak.day,6.371362032003979 -2040,5,ELCTRI,peak.peak,1.7776452018191915 -2040,5,ELCTRI,peak.evening,1.7248438738150702 -2040,5,ELCTRI,summer.night,1.6368416242136155 +2040,5,ELCTRI,peak.peak,1.7776452018191917 +2040,5,ELCTRI,peak.evening,1.7248438738150698 +2040,5,ELCTRI,summer.night,1.5760403466487078 2040,5,ELCTRI,summer.day,4.55851592811161 -2040,5,ELCTRI,summer.peak,1.3376340127470945 +2040,5,ELCTRI,summer.peak,1.3376340127470943 2040,5,ELCTRI,summer.evening,1.0560268601370622 -2040,5,ELCTRI,autumn.night,1.9156830851254099 +2040,5,ELCTRI,autumn.night,1.5760403466487078 2040,5,ELCTRI,autumn.day,6.001752635595889 2040,5,ELCTRI,autumn.peak,1.5488393825638174 2040,5,ELCTRI,autumn.evening,1.9008483513729915 2040,6,GASNAT,winter.night,0.0 2040,6,ELCTRI,winter.night,-0.0 2040,6,CO2EMT,winter.night,-0.0 -2040,6,GASNAT,winter.day,-0.13461070355775817 -2040,6,ELCTRI,winter.day,0.08974046903850545 -2040,6,CO2EMT,winter.day,6.882645272908175 -2040,6,GASNAT,winter.peak,-0.8931204907957104 -2040,6,ELCTRI,winter.peak,0.5954136605304736 -2040,6,CO2EMT,winter.peak,45.66525069438467 -2040,6,GASNAT,winter.evening,-1.1908273305875654 -2040,6,ELCTRI,winter.evening,0.793884887058377 -2040,6,CO2EMT,winter.evening,60.88700141294222 +2040,6,GASNAT,winter.day,0.0 +2040,6,ELCTRI,winter.day,-0.0 +2040,6,CO2EMT,winter.day,-0.0 +2040,6,GASNAT,winter.peak,0.0 +2040,6,ELCTRI,winter.peak,-0.0 +2040,6,CO2EMT,winter.peak,-0.0 +2040,6,GASNAT,winter.evening,0.0 +2040,6,ELCTRI,winter.evening,-0.0 +2040,6,CO2EMT,winter.evening,-0.0 2040,6,GASNAT,peak.night,0.0 2040,6,ELCTRI,peak.night,-0.0 2040,6,CO2EMT,peak.night,-0.0 -2040,6,GASNAT,peak.day,-5.102655934559747 -2040,6,ELCTRI,peak.day,3.4017706230398312 -2040,6,CO2EMT,peak.day,260.8987979340398 -2040,6,GASNAT,peak.peak,-1.7289002390649735 -2040,6,ELCTRI,peak.peak,1.152600159376649 -2040,6,CO2EMT,peak.peak,88.39866922339209 -2040,6,GASNAT,peak.evening,-2.992497723358964 -2040,6,ELCTRI,peak.evening,1.9949984822393094 -2040,6,CO2EMT,peak.evening,153.00640859534383 +2040,6,GASNAT,peak.day,0.0 +2040,6,ELCTRI,peak.day,-0.0 +2040,6,CO2EMT,peak.day,-0.0 +2040,6,GASNAT,peak.peak,0.0 +2040,6,ELCTRI,peak.peak,-0.0 +2040,6,CO2EMT,peak.peak,-0.0 +2040,6,GASNAT,peak.evening,-1.7628830195632355 +2040,6,ELCTRI,peak.evening,1.1752553463754902 +2040,6,CO2EMT,peak.evening,90.13620879026821 2040,6,GASNAT,summer.night,0.0 2040,6,ELCTRI,summer.night,-0.0 2040,6,CO2EMT,summer.night,-0.0 -2040,6,GASNAT,summer.day,-13.062629180566177 -2040,6,ELCTRI,summer.day,8.708419453710784 -2040,6,CO2EMT,summer.day,667.8922300023485 -2040,6,GASNAT,summer.peak,-4.4338340625 -2040,6,ELCTRI,summer.peak,2.955889375 -2040,6,CO2EMT,summer.peak,226.70193561562496 -2040,6,GASNAT,summer.evening,-5.91177879729423 -2040,6,ELCTRI,summer.evening,3.94118586486282 -2040,6,CO2EMT,summer.evening,302.26924990565396 +2040,6,GASNAT,summer.day,-8.993550220093514 +2040,6,ELCTRI,summer.day,5.995700146729009 +2040,6,CO2EMT,summer.day,459.8402227533813 +2040,6,GASNAT,summer.peak,-3.0689712837432177 +2040,6,ELCTRI,summer.peak,2.045980855828812 +2040,6,CO2EMT,summer.peak,156.91650173779072 +2040,6,GASNAT,summer.evening,-5.660973105399682 +2040,6,ELCTRI,summer.evening,3.7739820702664546 +2040,6,CO2EMT,summer.evening,289.4455548790857 2040,6,GASNAT,autumn.night,0.0 2040,6,ELCTRI,autumn.night,-0.0 2040,6,CO2EMT,autumn.night,-0.0 -2040,6,GASNAT,autumn.day,-4.9338002681413755 -2040,6,ELCTRI,autumn.day,3.289200178760917 -2040,6,CO2EMT,autumn.day,252.2652077100685 -2040,6,GASNAT,autumn.peak,-2.57871157541815 -2040,6,ELCTRI,autumn.peak,1.7191410502787667 -2040,6,CO2EMT,autumn.peak,131.84952285113 -2040,6,GASNAT,autumn.evening,-4.1552984889807085 -2040,6,ELCTRI,autumn.evening,2.7701989926538055 -2040,6,CO2EMT,autumn.evening,212.46041174158358 +2040,6,GASNAT,autumn.day,0.0 +2040,6,ELCTRI,autumn.day,-0.0 +2040,6,CO2EMT,autumn.day,-0.0 +2040,6,GASNAT,autumn.peak,-0.9426522446674833 +2040,6,ELCTRI,autumn.peak,0.6284348297783222 +2040,6,CO2EMT,autumn.peak,48.19780926984842 +2040,6,GASNAT,autumn.evening,-2.214295253528559 +2040,6,ELCTRI,autumn.evening,1.476196835685706 +2040,6,CO2EMT,autumn.evening,113.21691631291522 2040,16,BIOPEL,winter.night,-40.48351055539363 2040,16,RSHEAT,winter.night,33.73625879616136 2040,16,BIOPEL,winter.day,-139.77917968782327 @@ -1278,27 +1278,27 @@ milestone_year,asset_id,commodity_id,time_slice,flow 2040,19,OILCRD,peak.night,64.31028942216543 2040,19,GASPRD,peak.night,6.4310289422165425 2040,19,CO2EMT,peak.night,471.5873523327391 -2040,19,OILCRD,peak.day,91.87184190566923 -2040,19,GASPRD,peak.day,9.187184190566922 -2040,19,CO2EMT,peak.day,673.6962166942725 -2040,19,OILCRD,peak.peak,27.561552483503796 +2040,19,OILCRD,peak.day,91.87184190566924 +2040,19,GASPRD,peak.day,9.187184190566924 +2040,19,CO2EMT,peak.day,673.6962166942726 +2040,19,OILCRD,peak.peak,27.5615524835038 2040,19,GASPRD,peak.peak,2.75615524835038 -2040,19,CO2EMT,peak.peak,202.10886436153334 -2040,19,OILCRD,peak.evening,36.74873693866162 -2040,19,GASPRD,peak.evening,3.6748736938661626 -2040,19,CO2EMT,peak.evening,269.4784879712057 +2040,19,CO2EMT,peak.peak,202.10886436153336 +2040,19,OILCRD,peak.evening,36.74873693866158 +2040,19,GASPRD,peak.evening,3.674873693866158 +2040,19,CO2EMT,peak.evening,269.47848797120537 2040,19,OILCRD,summer.night,64.31028942216543 2040,19,GASPRD,summer.night,6.4310289422165425 2040,19,CO2EMT,summer.night,471.5873523327391 -2040,19,OILCRD,summer.day,91.87184190566924 -2040,19,GASPRD,summer.day,9.187184190566924 -2040,19,CO2EMT,summer.day,673.6962166942726 -2040,19,OILCRD,summer.peak,27.5615524835038 +2040,19,OILCRD,summer.day,91.87184190566923 +2040,19,GASPRD,summer.day,9.187184190566922 +2040,19,CO2EMT,summer.day,673.6962166942725 +2040,19,OILCRD,summer.peak,27.561552483503796 2040,19,GASPRD,summer.peak,2.75615524835038 -2040,19,CO2EMT,summer.peak,202.10886436153336 -2040,19,OILCRD,summer.evening,36.74873693866158 -2040,19,GASPRD,summer.evening,3.674873693866158 -2040,19,CO2EMT,summer.evening,269.47848797120537 +2040,19,CO2EMT,summer.peak,202.10886436153334 +2040,19,OILCRD,summer.evening,36.74873693866162 +2040,19,GASPRD,summer.evening,3.6748736938661626 +2040,19,CO2EMT,summer.evening,269.4784879712057 2040,19,OILCRD,autumn.night,64.31028942216543 2040,19,GASPRD,autumn.night,6.4310289422165425 2040,19,CO2EMT,autumn.night,471.5873523327391 @@ -1311,22 +1311,22 @@ milestone_year,asset_id,commodity_id,time_slice,flow 2040,19,OILCRD,autumn.evening,36.74873693866158 2040,19,GASPRD,autumn.evening,3.674873693866158 2040,19,CO2EMT,autumn.evening,269.47848797120537 -2040,20,BIOPRD,winter.night,11.760873987058854 -2040,20,BIOPRD,winter.day,16.801248529899503 -2040,20,BIOPRD,winter.peak,5.0403745428406515 -2040,20,BIOPRD,winter.evening,6.720499444218198 -2040,20,BIOPRD,peak.night,6.801953962775658 -2040,20,BIOPRD,peak.day,9.71707707635323 -2040,20,BIOPRD,peak.peak,2.915123113577575 -2040,20,BIOPRD,peak.evening,3.8868308491980796 +2040,20,BIOPRD,winter.night,11.760873987058853 +2040,20,BIOPRD,winter.day,16.8012485298995 +2040,20,BIOPRD,winter.peak,5.040374542840651 +2040,20,BIOPRD,winter.evening,6.720499444218196 +2040,20,BIOPRD,peak.night,6.801953962775656 +2040,20,BIOPRD,peak.day,9.717077076353227 +2040,20,BIOPRD,peak.peak,2.9151231135775744 +2040,20,BIOPRD,peak.evening,3.8868308491980788 2040,20,BIOPRD,summer.night,0.5063757966156501 -2040,20,BIOPRD,summer.day,0.7233939941731311 -2040,20,BIOPRD,summer.peak,0.21701819755748109 +2040,20,BIOPRD,summer.day,0.723393994173131 +2040,20,BIOPRD,summer.peak,0.21701819755748106 2040,20,BIOPRD,summer.evening,0.2893575990581689 -2040,20,BIOPRD,autumn.night,5.456414089121369 -2040,20,BIOPRD,autumn.day,7.794877259483269 -2040,20,BIOPRD,autumn.peak,2.3384631703618988 -2040,20,BIOPRD,autumn.evening,3.117950918759472 +2040,20,BIOPRD,autumn.night,5.456414089121367 +2040,20,BIOPRD,autumn.day,7.794877259483268 +2040,20,BIOPRD,autumn.peak,2.338463170361898 +2040,20,BIOPRD,autumn.evening,3.1179509187594716 2040,21,ELCTRI,winter.night,-5.687236186067019 2040,21,GASOLI,winter.night,-6.656518738655801 2040,21,TPASKM,winter.night,6.656518738655801 @@ -1407,182 +1407,182 @@ milestone_year,asset_id,commodity_id,time_slice,flow 2040,22,RSHEAT,autumn.peak,33.37111099736366 2040,22,BIOPEL,autumn.evening,-23.969297616016814 2040,22,RSHEAT,autumn.evening,19.97441468001401 -2040,23,ELCTRI,winter.night,18.725407206557566 -2040,23,ELCTRI,winter.day,69.1603801418712 -2040,23,ELCTRI,winter.peak,19.26856357604667 -2040,23,ELCTRI,winter.evening,25.117949112365434 -2040,23,ELCTRI,peak.night,18.725407206557566 -2040,23,ELCTRI,peak.day,62.278750298546484 -2040,23,ELCTRI,peak.peak,17.37611535608899 -2040,23,ELCTRI,peak.evening,16.85999326073758 -2040,23,ELCTRI,summer.night,15.99978941403896 -2040,23,ELCTRI,summer.day,44.55855338195488 -2040,23,ELCTRI,summer.peak,13.07509669867509 -2040,23,ELCTRI,summer.evening,10.322444840000436 -2040,23,ELCTRI,autumn.night,18.725407206557566 -2040,23,ELCTRI,autumn.day,58.66589464990022 -2040,23,ELCTRI,autumn.peak,15.139585645066143 -2040,23,ELCTRI,autumn.evening,18.580400742559522 +2040,23,ELCTRI,winter.night,5.2522574506888455 +2040,23,ELCTRI,winter.day,75.03224671530316 +2040,23,ELCTRI,winter.peak,22.509673802099627 +2040,23,ELCTRI,winter.evening,30.012898579875596 +2040,23,ELCTRI,peak.night,16.506018776922737 +2040,23,ELCTRI,peak.day,76.93257389820448 +2040,23,ELCTRI,peak.peak,21.46461308693346 +2040,23,ELCTRI,peak.evening,20.827050498558183 +2040,23,ELCTRI,summer.night,19.030285804833984 +2040,23,ELCTRI,summer.day,55.04291888359132 +2040,23,ELCTRI,summer.peak,16.151590039539816 +2040,23,ELCTRI,summer.evening,12.751255390588774 +2040,23,ELCTRI,autumn.night,19.030285804833984 +2040,23,ELCTRI,autumn.day,72.4696345675238 +2040,23,ELCTRI,autumn.peak,18.70184109096406 +2040,23,ELCTRI,autumn.evening,22.952259740808824 2040,24,H2YPRD,winter.night,-0.0 2040,24,ELCTRI,winter.night,0.0 -2040,24,H2YPRD,winter.day,-7.017264450390703 -2040,24,ELCTRI,winter.day,4.678176300260469 -2040,24,H2YPRD,winter.peak,-1.3940248839738376 -2040,24,ELCTRI,winter.peak,0.929349922649225 -2040,24,H2YPRD,winter.evening,-2.806905793629429 -2040,24,ELCTRI,winter.evening,1.8712705290862859 +2040,24,H2YPRD,winter.day,-0.0 +2040,24,ELCTRI,winter.day,0.0 +2040,24,H2YPRD,winter.peak,-0.0 +2040,24,ELCTRI,winter.peak,0.0 +2040,24,H2YPRD,winter.evening,-0.0 +2040,24,ELCTRI,winter.evening,0.0 2040,24,H2YPRD,peak.night,-0.0 2040,24,ELCTRI,peak.night,0.0 2040,24,H2YPRD,peak.day,-0.0 2040,24,ELCTRI,peak.day,0.0 -2040,24,H2YPRD,peak.peak,-1.4283695596707782 -2040,24,ELCTRI,peak.peak,0.9522463731138521 -2040,24,H2YPRD,peak.evening,-9.789825568323192 -2040,24,ELCTRI,peak.evening,6.526550378882128 +2040,24,H2YPRD,peak.peak,-1.6974150177512468 +2040,24,ELCTRI,peak.peak,1.1316100118341645 +2040,24,H2YPRD,peak.evening,-8.987864047290902 +2040,24,ELCTRI,peak.evening,5.991909364860601 2040,24,H2YPRD,summer.night,-0.0 2040,24,ELCTRI,summer.night,0.0 -2040,24,H2YPRD,summer.day,-0.0 -2040,24,ELCTRI,summer.day,0.0 +2040,24,H2YPRD,summer.day,-2.2042514556465864 +2040,24,ELCTRI,summer.day,1.4695009704310575 2040,24,H2YPRD,summer.peak,-0.0 2040,24,ELCTRI,summer.peak,0.0 -2040,24,H2YPRD,summer.evening,-9.789825568323192 -2040,24,ELCTRI,summer.evening,6.526550378882128 +2040,24,H2YPRD,summer.evening,-8.987864047290902 +2040,24,ELCTRI,summer.evening,5.991909364860601 2040,24,H2YPRD,autumn.night,-0.0 2040,24,ELCTRI,autumn.night,0.0 -2040,24,H2YPRD,autumn.day,-6.598938306858228 -2040,24,ELCTRI,autumn.day,4.399292204572152 -2040,24,H2YPRD,autumn.peak,-1.9796814857224874 -2040,24,ELCTRI,autumn.peak,1.319787657148325 -2040,24,H2YPRD,autumn.evening,-2.6395753354132534 -2040,24,ELCTRI,autumn.evening,1.7597168902755023 +2040,24,H2YPRD,autumn.day,-4.1622618487011405 +2040,24,ELCTRI,autumn.day,2.774841232467427 +2040,24,H2YPRD,autumn.peak,-3.0127944094713746 +2040,24,ELCTRI,autumn.peak,2.0085296063142497 +2040,24,H2YPRD,autumn.evening,-4.017059244764973 +2040,24,ELCTRI,autumn.evening,2.678039496509982 2040,25,GASNAT,winter.night,-0.0 2040,25,ELCTRI,winter.night,0.0 2040,25,CO2EMT,winter.night,0.0 -2040,25,GASNAT,winter.day,-0.3638273861565402 -2040,25,ELCTRI,winter.day,0.24255159077102678 -2040,25,CO2EMT,winter.day,18.6024942541839 -2040,25,GASNAT,winter.peak,-2.413936522883004 -2040,25,ELCTRI,winter.peak,1.6092910152553361 -2040,25,CO2EMT,winter.peak,123.424574415008 -2040,25,GASNAT,winter.evening,-3.218582056259328 -2040,25,ELCTRI,winter.evening,2.145721370839552 -2040,25,CO2EMT,winter.evening,164.5661005365394 +2040,25,GASNAT,winter.day,-0.0 +2040,25,ELCTRI,winter.day,0.0 +2040,25,CO2EMT,winter.day,0.0 +2040,25,GASNAT,winter.peak,-0.0 +2040,25,ELCTRI,winter.peak,0.0 +2040,25,CO2EMT,winter.peak,0.0 +2040,25,GASNAT,winter.evening,-0.0 +2040,25,ELCTRI,winter.evening,0.0 +2040,25,CO2EMT,winter.evening,0.0 2040,25,GASNAT,peak.night,-0.0 2040,25,ELCTRI,peak.night,0.0 2040,25,CO2EMT,peak.night,0.0 -2040,25,GASNAT,peak.day,-13.791518222995226 -2040,25,ELCTRI,peak.day,9.194345481996818 -2040,25,CO2EMT,peak.day,705.1603267417458 -2040,25,GASNAT,peak.peak,-4.6728918152822 -2040,25,ELCTRI,peak.peak,3.1152612101881334 -2040,25,CO2EMT,peak.peak,238.92495851537888 -2040,25,GASNAT,peak.evening,-8.088157895274145 -2040,25,ELCTRI,peak.evening,5.392105263516097 -2040,25,CO2EMT,peak.evening,413.547513185367 +2040,25,GASNAT,peak.day,-0.0 +2040,25,ELCTRI,peak.day,0.0 +2040,25,CO2EMT,peak.day,0.0 +2040,25,GASNAT,peak.peak,-0.0 +2040,25,ELCTRI,peak.peak,0.0 +2040,25,CO2EMT,peak.peak,0.0 +2040,25,GASNAT,peak.evening,-4.169148263371257 +2040,25,ELCTRI,peak.evening,2.779432175580838 +2040,25,CO2EMT,peak.evening,213.16855070617237 2040,25,GASNAT,summer.night,-0.0 2040,25,ELCTRI,summer.night,0.0 2040,25,CO2EMT,summer.night,0.0 -2040,25,GASNAT,summer.day,-35.305827140694944 -2040,25,ELCTRI,summer.day,23.53721809379663 -2040,25,CO2EMT,summer.day,1805.1869417037321 -2040,25,GASNAT,summer.peak,-11.983818633850653 -2040,25,ELCTRI,summer.peak,7.9892124225671015 -2040,25,CO2EMT,summer.peak,612.7326467487838 -2040,25,GASNAT,summer.evening,-15.978424972961601 -2040,25,ELCTRI,summer.evening,10.652283315307734 -2040,25,CO2EMT,summer.evening,816.9768688675266 +2040,25,GASNAT,summer.day,-21.26938876008618 +2040,25,ELCTRI,summer.day,14.17959250672412 +2040,25,CO2EMT,summer.day,1087.5038473032064 +2040,25,GASNAT,summer.peak,-7.257995088706643 +2040,25,ELCTRI,summer.peak,4.838663392471095 +2040,25,CO2EMT,summer.peak,371.1012888855706 +2040,25,GASNAT,summer.evening,-13.387976360005938 +2040,25,ELCTRI,summer.evening,8.925317573337292 +2040,25,CO2EMT,summer.evening,684.5272312871035 2040,25,GASNAT,autumn.night,-0.0 2040,25,ELCTRI,autumn.night,0.0 2040,25,CO2EMT,autumn.night,0.0 -2040,25,GASNAT,autumn.day,-13.335133150136908 -2040,25,ELCTRI,autumn.day,8.89008876675794 -2040,25,CO2EMT,autumn.day,681.8253579665001 -2040,25,GASNAT,autumn.peak,-6.9697718482946485 -2040,25,ELCTRI,autumn.peak,4.646514565529766 -2040,25,CO2EMT,autumn.peak,356.36443460330537 -2040,25,GASNAT,autumn.evening,-11.230989423492542 -2040,25,ELCTRI,autumn.evening,7.487326282328361 -2040,25,CO2EMT,autumn.evening,574.2404892231737 -2040,26,ELCTRI,winter.night,-14.95385410561596 -2040,26,H2YPRD,winter.night,11.218195127993969 +2040,25,GASNAT,autumn.day,-0.0 +2040,25,ELCTRI,autumn.day,0.0 +2040,25,CO2EMT,autumn.day,0.0 +2040,25,GASNAT,autumn.peak,-2.229335086449554 +2040,25,ELCTRI,autumn.peak,1.4862233909663694 +2040,25,CO2EMT,autumn.peak,113.98590297016568 +2040,25,GASNAT,autumn.evening,-5.236720252219019 +2040,25,ELCTRI,autumn.evening,3.4911468348126795 +2040,25,CO2EMT,autumn.evening,267.75350649595845 +2040,26,ELCTRI,winter.night,-0.0 +2040,26,H2YPRD,winter.night,0.0 2040,26,ELCTRI,winter.day,-0.0 2040,26,H2YPRD,winter.day,0.0 2040,26,ELCTRI,winter.peak,-0.0 2040,26,H2YPRD,winter.peak,0.0 2040,26,ELCTRI,winter.evening,-0.0 2040,26,H2YPRD,winter.evening,0.0 -2040,26,ELCTRI,peak.night,-14.95385410561596 -2040,26,H2YPRD,peak.night,11.218195127993969 -2040,26,ELCTRI,peak.day,-0.0 -2040,26,H2YPRD,peak.day,0.0 +2040,26,ELCTRI,peak.night,-12.185769499079838 +2040,26,H2YPRD,peak.night,9.141612527441739 +2040,26,ELCTRI,peak.day,-2.0577074946213467 +2040,26,H2YPRD,peak.day,1.5436665376004102 2040,26,ELCTRI,peak.peak,-0.0 2040,26,H2YPRD,peak.peak,0.0 2040,26,ELCTRI,peak.evening,-0.0 2040,26,H2YPRD,peak.evening,0.0 -2040,26,ELCTRI,summer.night,-11.949394852185556 -2040,26,H2YPRD,summer.night,8.964287210941903 -2040,26,ELCTRI,summer.day,-0.1164784219867897 -2040,26,H2YPRD,summer.day,0.08738066165550616 -2040,26,ELCTRI,summer.peak,-0.983964208402468 -2040,26,H2YPRD,summer.peak,0.7381576957257825 +2040,26,ELCTRI,summer.night,-14.919089965415672 +2040,26,H2YPRD,summer.night,11.192115502937488 +2040,26,ELCTRI,summer.day,-0.0 +2040,26,H2YPRD,summer.day,0.0 +2040,26,ELCTRI,summer.peak,-0.0 +2040,26,H2YPRD,summer.peak,0.0 2040,26,ELCTRI,summer.evening,-0.0 2040,26,H2YPRD,summer.evening,0.0 -2040,26,ELCTRI,autumn.night,-14.95385410561596 -2040,26,H2YPRD,autumn.night,11.218195127993969 +2040,26,ELCTRI,autumn.night,-14.919089965415672 +2040,26,H2YPRD,autumn.night,11.192115502937488 2040,26,ELCTRI,autumn.day,-0.0 2040,26,H2YPRD,autumn.day,0.0 2040,26,ELCTRI,autumn.peak,-0.0 2040,26,H2YPRD,autumn.peak,0.0 2040,26,ELCTRI,autumn.evening,-0.0 2040,26,H2YPRD,autumn.evening,0.0 -2040,27,GASPRD,winter.night,-2.5158145015735793 -2040,27,GASNAT,winter.night,2.3960138110224563 -2040,27,CO2EMT,winter.night,6.12540930787891 -2040,27,GASPRD,winter.day,-3.5940207116047427 -2040,27,GASNAT,winter.day,3.422876868194993 -2040,27,CO2EMT,winter.day,8.7505847135405 -2040,27,GASPRD,winter.peak,-1.0782062100311627 -2040,27,GASNAT,winter.peak,1.026863057172536 -2040,27,CO2EMT,winter.peak,2.6251754056615884 -2040,27,GASPRD,winter.evening,-1.4376082915424158 -2040,27,GASNAT,winter.evening,1.3691507538499197 -2040,27,CO2EMT,winter.evening,3.50023390221732 -2040,27,GASPRD,peak.night,-11.140340441967332 -2040,27,GASNAT,peak.night,10.609848039968888 -2040,27,CO2EMT,peak.night,27.124076514180466 -2040,27,GASPRD,peak.day,-15.914772038127358 -2040,27,GASNAT,peak.day,15.156925750597484 -2040,27,CO2EMT,peak.day,38.74868068140247 -2040,27,GASPRD,peak.peak,-4.774431596160027 -2040,27,GASNAT,peak.peak,4.547077710628597 -2040,27,CO2EMT,peak.peak,11.624604167222008 -2040,27,GASPRD,peak.evening,-6.365908845807305 -2040,27,GASNAT,peak.evening,6.062770329340291 -2040,27,CO2EMT,peak.evening,15.499472346958454 -2040,27,GASPRD,summer.night,-26.5446208064528 -2040,27,GASNAT,summer.night,25.280591244240764 -2040,27,CO2EMT,summer.night,64.62983151590151 -2040,27,GASPRD,summer.day,-37.920886814355384 -2040,27,GASNAT,summer.day,36.11513029938608 -2040,27,CO2EMT,summer.day,92.32833061038052 -2040,27,GASPRD,summer.peak,-11.376266007902558 -2040,27,GASNAT,summer.peak,10.834539055145292 -2040,27,CO2EMT,summer.peak,27.698499094478944 -2040,27,GASPRD,summer.evening,-15.168354798550247 -2040,27,GASNAT,summer.evening,14.446052189095473 -2040,27,CO2EMT,summer.evening,36.93133242142258 -2040,27,GASPRD,autumn.night,-13.231134588615348 -2040,27,GASNAT,autumn.night,12.601080560586045 -2040,27,CO2EMT,autumn.night,32.214662453138224 -2040,27,GASPRD,autumn.day,-18.901620814956853 -2040,27,GASNAT,autumn.day,18.00154363329224 -2040,27,CO2EMT,autumn.day,46.02094629851162 -2040,27,GASPRD,autumn.peak,-5.670486226341498 -2040,27,GASNAT,autumn.peak,5.400463072706188 -2040,27,CO2EMT,autumn.peak,13.80628384537337 -2040,27,GASPRD,autumn.evening,-7.56064836227385 -2040,27,GASNAT,autumn.evening,7.200617487879857 -2040,27,CO2EMT,autumn.evening,18.408378607764856 +2040,27,GASPRD,winter.night,-0.0 +2040,27,GASNAT,winter.night,0.0 +2040,27,CO2EMT,winter.night,0.0 +2040,27,GASPRD,winter.day,-0.0 +2040,27,GASNAT,winter.day,0.0 +2040,27,CO2EMT,winter.day,0.0 +2040,27,GASPRD,winter.peak,-0.0 +2040,27,GASNAT,winter.peak,0.0 +2040,27,CO2EMT,winter.peak,0.0 +2040,27,GASPRD,winter.evening,-0.0 +2040,27,GASNAT,winter.evening,0.0 +2040,27,CO2EMT,winter.evening,0.0 +2040,27,GASPRD,peak.night,-1.8166845814367938 +2040,27,GASNAT,peak.night,1.7301757918445655 +2040,27,CO2EMT,peak.night,4.423194411850632 +2040,27,GASPRD,peak.day,-2.5952636842076298 +2040,27,GASNAT,peak.day,2.4716796992453616 +2040,27,CO2EMT,peak.day,6.318849151120768 +2040,27,GASPRD,peak.peak,-0.7785791027708356 +2040,27,GASNAT,peak.peak,0.7415039074007959 +2040,27,CO2EMT,peak.peak,1.8956547392701348 +2040,27,GASPRD,peak.evening,-1.038105478665959 +2040,27,GASNAT,peak.evening,0.9886718844437703 +2040,27,CO2EMT,peak.evening,2.527539672580499 +2040,27,GASPRD,summer.night,-18.264399298460074 +2040,27,GASNAT,summer.night,17.3946659985334 +2040,27,CO2EMT,summer.night,44.46946362525065 +2040,27,GASPRD,summer.day,-26.0919989620168 +2040,27,GASNAT,summer.day,24.849522820968378 +2040,27,CO2EMT,summer.day,63.52780509180566 +2040,27,GASPRD,summer.peak,-7.827599663556718 +2040,27,GASNAT,summer.peak,7.454856822434969 +2040,27,CO2EMT,summer.peak,19.058341466555 +2040,27,GASPRD,summer.evening,-10.436799634903354 +2040,27,GASNAT,summer.evening,9.939809176098432 +2040,27,CO2EMT,summer.evening,25.411122158695644 +2040,27,GASPRD,autumn.night,-3.253294620648814 +2040,27,GASNAT,autumn.night,3.0983758291893464 +2040,27,CO2EMT,autumn.night,7.920997807322565 +2040,27,GASPRD,autumn.day,-4.647563737410218 +2040,27,GASNAT,autumn.day,4.426251178485922 +2040,27,CO2EMT,autumn.day,11.31571113779926 +2040,27,GASPRD,autumn.peak,-1.394269116761404 +2040,27,GASNAT,autumn.peak,1.3278753492965754 +2040,27,CO2EMT,autumn.peak,3.394713330476695 +2040,27,GASPRD,autumn.evening,-1.8590255038874077 +2040,27,GASNAT,autumn.evening,1.7705004798927693 +2040,27,CO2EMT,autumn.evening,4.526284476845865 2040,28,OILCRD,winter.night,-64.31028942216543 2040,28,GASOLI,winter.night,49.09182398638582 2040,28,CO2EMT,winter.night,1080.020127700488 @@ -1595,30 +1595,30 @@ milestone_year,asset_id,commodity_id,time_slice,flow 2040,28,OILCRD,winter.evening,-36.748736938661594 2040,28,GASOLI,winter.evening,28.052470945543202 2040,28,CO2EMT,winter.evening,617.1543608019505 -2040,28,OILCRD,peak.night,-64.31028942216541 -2040,28,GASOLI,peak.night,49.09182398638581 -2040,28,CO2EMT,peak.night,1080.0201277004878 +2040,28,OILCRD,peak.night,-64.31028942216543 +2040,28,GASOLI,peak.night,49.09182398638582 +2040,28,CO2EMT,peak.night,1080.020127700488 2040,28,OILCRD,peak.day,-91.87184190566923 2040,28,GASOLI,peak.day,70.13117702722842 2040,28,CO2EMT,peak.day,1542.8858945990253 -2040,28,OILCRD,peak.peak,-27.561552483503796 -2040,28,GASOLI,peak.peak,21.03935304084259 -2040,28,CO2EMT,peak.peak,462.865766898537 -2040,28,OILCRD,peak.evening,-36.74873693866162 -2040,28,GASOLI,peak.evening,28.05247094554322 -2040,28,CO2EMT,peak.evening,617.1543608019508 -2040,28,OILCRD,summer.night,-64.31028942216543 -2040,28,GASOLI,summer.night,49.09182398638582 -2040,28,CO2EMT,summer.night,1080.020127700488 +2040,28,OILCRD,peak.peak,-27.5615524835038 +2040,28,GASOLI,peak.peak,21.039353040842595 +2040,28,CO2EMT,peak.peak,462.8657668985371 +2040,28,OILCRD,peak.evening,-36.748736938661594 +2040,28,GASOLI,peak.evening,28.052470945543202 +2040,28,CO2EMT,peak.evening,617.1543608019505 +2040,28,OILCRD,summer.night,-64.31028942216541 +2040,28,GASOLI,summer.night,49.09182398638581 +2040,28,CO2EMT,summer.night,1080.0201277004878 2040,28,OILCRD,summer.day,-91.87184190566923 2040,28,GASOLI,summer.day,70.13117702722842 2040,28,CO2EMT,summer.day,1542.8858945990253 -2040,28,OILCRD,summer.peak,-27.5615524835038 -2040,28,GASOLI,summer.peak,21.039353040842595 -2040,28,CO2EMT,summer.peak,462.8657668985371 -2040,28,OILCRD,summer.evening,-36.748736938661594 -2040,28,GASOLI,summer.evening,28.052470945543202 -2040,28,CO2EMT,summer.evening,617.1543608019505 +2040,28,OILCRD,summer.peak,-27.561552483503796 +2040,28,GASOLI,summer.peak,21.03935304084259 +2040,28,CO2EMT,summer.peak,462.865766898537 +2040,28,OILCRD,summer.evening,-36.74873693866162 +2040,28,GASOLI,summer.evening,28.05247094554322 +2040,28,CO2EMT,summer.evening,617.1543608019508 2040,28,OILCRD,autumn.night,-64.31028942216543 2040,28,GASOLI,autumn.night,49.09182398638582 2040,28,CO2EMT,autumn.night,1080.020127700488 @@ -1671,30 +1671,30 @@ milestone_year,asset_id,commodity_id,time_slice,flow 2040,30,CO2EMT,winter.peak,0.0 2040,30,GASPRD,winter.evening,0.0 2040,30,CO2EMT,winter.evening,0.0 -2040,30,GASPRD,peak.night,4.7093114997507906 -2040,30,CO2EMT,peak.night,24.078709698225794 -2040,30,GASPRD,peak.day,6.7275878475604385 -2040,30,CO2EMT,peak.day,34.398156664576526 -2040,30,GASPRD,peak.peak,2.018276347809647 -2040,30,CO2EMT,peak.peak,10.319446966350727 -2040,30,GASPRD,peak.evening,2.6910351519411435 -2040,30,CO2EMT,peak.evening,13.759262731875069 -2040,30,GASPRD,summer.night,20.11359186423627 -2040,30,CO2EMT,summer.night,102.84079520184005 -2040,30,GASPRD,summer.day,28.73370262378845 -2040,30,CO2EMT,summer.day,146.91542151543035 -2040,30,GASPRD,summer.peak,8.62011075955218 -2040,30,CO2EMT,summer.peak,44.0746263135903 -2040,30,GASPRD,summer.evening,11.493481104684088 -2040,30,CO2EMT,summer.evening,58.766168888249744 -2040,30,GASPRD,autumn.night,6.800105646398808 -2040,30,CO2EMT,autumn.night,34.768940170037105 -2040,30,GASPRD,autumn.day,9.714436624389927 -2040,30,CO2EMT,autumn.day,49.6699144605057 -2040,30,GASPRD,autumn.peak,2.914330977991119 -2040,30,CO2EMT,autumn.peak,14.900974290468591 -2040,30,GASPRD,autumn.evening,3.885774668407689 -2040,30,CO2EMT,autumn.evening,19.867965879568516 +2040,30,GASPRD,peak.night,0.0 +2040,30,CO2EMT,peak.night,0.0 +2040,30,GASPRD,peak.day,0.0 +2040,30,CO2EMT,peak.day,0.0 +2040,30,GASPRD,peak.peak,0.0 +2040,30,CO2EMT,peak.peak,0.0 +2040,30,GASPRD,peak.evening,0.0 +2040,30,CO2EMT,peak.evening,0.0 +2040,30,GASPRD,summer.night,11.833370356243531 +2040,30,CO2EMT,summer.night,60.50402263147318 +2040,30,GASPRD,summer.day,16.904814771449875 +2040,30,CO2EMT,summer.day,86.43431792642322 +2040,30,GASPRD,summer.peak,5.071444415206333 +2040,30,CO2EMT,summer.peak,25.930295294949982 +2040,30,GASPRD,summer.evening,6.761925941037193 +2040,30,CO2EMT,summer.evening,34.57372733652317 +2040,30,GASPRD,autumn.night,0.0 +2040,30,CO2EMT,autumn.night,0.0 +2040,30,GASPRD,autumn.day,0.0 +2040,30,CO2EMT,autumn.day,0.0 +2040,30,GASPRD,autumn.peak,0.0 +2040,30,CO2EMT,autumn.peak,0.0 +2040,30,GASPRD,autumn.evening,0.0 +2040,30,CO2EMT,autumn.evening,0.0 2040,31,BIOPRD,winter.night,186.91599597141777 2040,31,BIOPRD,winter.day,267.0228510215368 2040,31,BIOPRD,winter.peak,80.1068550501191 diff --git a/tests/data/circularity/commodity_prices.csv b/tests/data/circularity/commodity_prices.csv index ac0087c86..916264996 100644 --- a/tests/data/circularity/commodity_prices.csv +++ b/tests/data/circularity/commodity_prices.csv @@ -187,10 +187,10 @@ milestone_year,commodity_id,region_id,time_slice,price 2030,GASPRD,GBR,summer.day,5.695927420926498 2030,GASPRD,GBR,summer.peak,5.695927420926498 2030,GASPRD,GBR,summer.evening,5.695927420926498 -2030,GASPRD,GBR,autumn.night,8.448257530546275 -2030,GASPRD,GBR,autumn.day,8.448257530546275 -2030,GASPRD,GBR,autumn.peak,8.448257530546275 -2030,GASPRD,GBR,autumn.evening,8.448257530546275 +2030,GASPRD,GBR,autumn.night,8.448257530546277 +2030,GASPRD,GBR,autumn.day,8.448257530546277 +2030,GASPRD,GBR,autumn.peak,8.448257530546277 +2030,GASPRD,GBR,autumn.evening,8.448257530546277 2030,OILCRD,GBR,winter.night,5.695927420926498 2030,OILCRD,GBR,winter.day,5.695927420926498 2030,OILCRD,GBR,winter.peak,5.695927420926498 @@ -337,48 +337,48 @@ milestone_year,commodity_id,region_id,time_slice,price 2030,TPASKM,GBR,autumn.evening,30.833894962930774 2030,RSHEAT,GBR,winter.night,52.16456575149094 2030,RSHEAT,GBR,winter.day,62.05014150781135 -2030,RSHEAT,GBR,winter.peak,81.46109188104124 +2030,RSHEAT,GBR,winter.peak,81.46109188104126 2030,RSHEAT,GBR,winter.evening,58.49223845482817 -2030,RSHEAT,GBR,peak.night,65.09118000607619 -2030,RSHEAT,GBR,peak.day,63.760912933240284 -2030,RSHEAT,GBR,peak.peak,63.44465892036649 -2030,RSHEAT,GBR,peak.evening,64.28083618915869 -2030,RSHEAT,GBR,summer.night,50.658788493930096 +2030,RSHEAT,GBR,peak.night,65.0911800060762 +2030,RSHEAT,GBR,peak.day,63.76091293324029 +2030,RSHEAT,GBR,peak.peak,63.44465892036651 +2030,RSHEAT,GBR,peak.evening,64.2808361891587 +2030,RSHEAT,GBR,summer.night,50.65878849393011 2030,RSHEAT,GBR,summer.day,32.119896220460745 2030,RSHEAT,GBR,summer.peak,32.119896220460745 2030,RSHEAT,GBR,summer.evening,32.119896220460745 -2030,RSHEAT,GBR,autumn.night,59.06847156929996 +2030,RSHEAT,GBR,autumn.night,59.06847156929989 2030,RSHEAT,GBR,autumn.day,50.8262403129185 -2030,RSHEAT,GBR,autumn.peak,98.13878163369219 +2030,RSHEAT,GBR,autumn.peak,98.1387816336922 2030,RSHEAT,GBR,autumn.evening,48.89768270671781 2040,GASPRD,GBR,winter.night,5.785387816705663 2040,GASPRD,GBR,winter.day,5.785387816705663 2040,GASPRD,GBR,winter.peak,5.785387816705663 2040,GASPRD,GBR,winter.evening,5.785387816705663 -2040,GASPRD,GBR,peak.night,6.329611733271024 -2040,GASPRD,GBR,peak.day,6.329611733271024 -2040,GASPRD,GBR,peak.peak,6.329611733271024 -2040,GASPRD,GBR,peak.evening,6.329611733271024 -2040,GASPRD,GBR,summer.night,6.760897929308668 -2040,GASPRD,GBR,summer.day,6.760897929308668 -2040,GASPRD,GBR,summer.peak,6.760897929308668 -2040,GASPRD,GBR,summer.evening,6.760897929308668 -2040,GASPRD,GBR,autumn.night,6.447051412930846 -2040,GASPRD,GBR,autumn.day,6.447051412930846 -2040,GASPRD,GBR,autumn.peak,6.447051412930846 -2040,GASPRD,GBR,autumn.evening,6.447051412930846 +2040,GASPRD,GBR,peak.night,5.785387816705663 +2040,GASPRD,GBR,peak.day,5.785387816705663 +2040,GASPRD,GBR,peak.peak,5.785387816705663 +2040,GASPRD,GBR,peak.evening,5.785387816705663 +2040,GASPRD,GBR,summer.night,9.136143227234705 +2040,GASPRD,GBR,summer.day,9.136143227234705 +2040,GASPRD,GBR,summer.peak,9.136143227234705 +2040,GASPRD,GBR,summer.evening,9.136143227234705 +2040,GASPRD,GBR,autumn.night,5.785387816705663 +2040,GASPRD,GBR,autumn.day,5.785387816705663 +2040,GASPRD,GBR,autumn.peak,5.785387816705663 +2040,GASPRD,GBR,autumn.evening,5.785387816705663 2040,OILCRD,GBR,winter.night,5.785387816705664 2040,OILCRD,GBR,winter.day,5.785387816705664 2040,OILCRD,GBR,winter.peak,5.785387816705664 2040,OILCRD,GBR,winter.evening,5.785387816705664 -2040,OILCRD,GBR,peak.night,5.785387816705663 -2040,OILCRD,GBR,peak.day,5.785387816705663 -2040,OILCRD,GBR,peak.peak,5.785387816705663 -2040,OILCRD,GBR,peak.evening,5.785387816705663 -2040,OILCRD,GBR,summer.night,5.785387816705664 -2040,OILCRD,GBR,summer.day,5.785387816705664 -2040,OILCRD,GBR,summer.peak,5.785387816705664 -2040,OILCRD,GBR,summer.evening,5.785387816705664 +2040,OILCRD,GBR,peak.night,5.785387816705664 +2040,OILCRD,GBR,peak.day,5.785387816705664 +2040,OILCRD,GBR,peak.peak,5.785387816705664 +2040,OILCRD,GBR,peak.evening,5.785387816705664 +2040,OILCRD,GBR,summer.night,5.785387816705663 +2040,OILCRD,GBR,summer.day,5.785387816705663 +2040,OILCRD,GBR,summer.peak,5.785387816705663 +2040,OILCRD,GBR,summer.evening,5.785387816705663 2040,OILCRD,GBR,autumn.night,5.785387816705664 2040,OILCRD,GBR,autumn.day,5.785387816705664 2040,OILCRD,GBR,autumn.peak,5.785387816705664 @@ -399,22 +399,22 @@ milestone_year,commodity_id,region_id,time_slice,price 2040,BIOPRD,GBR,autumn.day,0.8586931712935483 2040,BIOPRD,GBR,autumn.peak,0.8586931712935483 2040,BIOPRD,GBR,autumn.evening,0.8586931712935483 -2040,GASNAT,GBR,winter.night,8.69378001598546 -2040,GASNAT,GBR,winter.day,8.69378001598546 -2040,GASNAT,GBR,winter.peak,8.69378001598546 -2040,GASNAT,GBR,winter.evening,8.69378001598546 -2040,GASNAT,GBR,peak.night,9.26521512837909 -2040,GASNAT,GBR,peak.day,9.26521512837909 -2040,GASNAT,GBR,peak.peak,9.26521512837909 -2040,GASNAT,GBR,peak.evening,9.26521512837909 -2040,GASNAT,GBR,summer.night,9.718065634218616 -2040,GASNAT,GBR,summer.day,9.718065634218616 -2040,GASNAT,GBR,summer.peak,9.718065634218616 -2040,GASNAT,GBR,summer.evening,9.718065634218616 -2040,GASNAT,GBR,autumn.night,9.388526792021903 -2040,GASNAT,GBR,autumn.day,9.388526792021903 -2040,GASNAT,GBR,autumn.peak,9.388526792021903 -2040,GASNAT,GBR,autumn.evening,9.388526792021903 +2040,GASNAT,GBR,winter.night,9.78397612865817 +2040,GASNAT,GBR,winter.day,9.78397612865817 +2040,GASNAT,GBR,winter.peak,9.78397612865817 +2040,GASNAT,GBR,winter.evening,9.78397612865817 +2040,GASNAT,GBR,peak.night,9.78397612865817 +2040,GASNAT,GBR,peak.day,9.78397612865817 +2040,GASNAT,GBR,peak.peak,9.78397612865817 +2040,GASNAT,GBR,peak.evening,9.78397612865817 +2040,GASNAT,GBR,summer.night,13.302269309713664 +2040,GASNAT,GBR,summer.day,13.302269309713664 +2040,GASNAT,GBR,summer.peak,13.302269309713664 +2040,GASNAT,GBR,summer.evening,13.302269309713664 +2040,GASNAT,GBR,autumn.night,9.783976128658171 +2040,GASNAT,GBR,autumn.day,9.783976128658171 +2040,GASNAT,GBR,autumn.peak,9.783976128658171 +2040,GASNAT,GBR,autumn.evening,9.783976128658171 2040,GASOLI,GBR,winter.night,11.020289470145302 2040,GASOLI,GBR,winter.day,11.020289470145302 2040,GASOLI,GBR,winter.peak,11.020289470145302 @@ -447,54 +447,54 @@ milestone_year,commodity_id,region_id,time_slice,price 2040,BIOPEL,GBR,autumn.day,2.0521757118191575 2040,BIOPEL,GBR,autumn.peak,2.0521757118191575 2040,BIOPEL,GBR,autumn.evening,2.0521757118191575 -2040,ELCTRI,GBR,winter.night,12.674145938031948 -2040,ELCTRI,GBR,winter.day,14.339976439520271 -2040,ELCTRI,GBR,winter.peak,14.92481876929989 -2040,ELCTRI,GBR,winter.evening,15.46948631976746 -2040,ELCTRI,GBR,peak.night,12.674145938031948 -2040,ELCTRI,GBR,peak.day,14.834682567014008 -2040,ELCTRI,GBR,peak.peak,16.2082588450763 -2040,ELCTRI,GBR,peak.evening,21.465272750980397 -2040,ELCTRI,GBR,summer.night,12.67414593803195 -2040,ELCTRI,GBR,summer.day,18.466340027583783 -2040,ELCTRI,GBR,summer.peak,18.982342291193035 -2040,ELCTRI,GBR,summer.evening,27.90957856268472 -2040,ELCTRI,GBR,autumn.night,12.674145938031948 -2040,ELCTRI,GBR,autumn.day,16.307136738382315 -2040,ELCTRI,GBR,autumn.peak,17.878218828227617 -2040,ELCTRI,GBR,autumn.evening,18.647279983667556 -2040,H2YPRD,GBR,winter.night,10.559756733182441 -2040,H2YPRD,GBR,winter.day,10.559756733182441 -2040,H2YPRD,GBR,winter.peak,10.559756733182441 -2040,H2YPRD,GBR,winter.evening,10.559756733182441 -2040,H2YPRD,GBR,peak.night,10.559756733182441 -2040,H2YPRD,GBR,peak.day,10.559756733182441 -2040,H2YPRD,GBR,peak.peak,10.559756733182441 -2040,H2YPRD,GBR,peak.evening,10.559756733182441 -2040,H2YPRD,GBR,summer.night,20.681654985604197 -2040,H2YPRD,GBR,summer.day,20.681654985604197 -2040,H2YPRD,GBR,summer.peak,20.681654985604197 -2040,H2YPRD,GBR,summer.evening,20.681654985604197 -2040,H2YPRD,GBR,autumn.night,10.559756733182441 -2040,H2YPRD,GBR,autumn.day,10.559756733182441 -2040,H2YPRD,GBR,autumn.peak,10.559756733182441 -2040,H2YPRD,GBR,autumn.evening,10.559756733182441 -2040,TPASKM,GBR,winter.night,22.484745428933703 -2040,TPASKM,GBR,winter.day,23.908007629474238 -2040,TPASKM,GBR,winter.peak,24.407688707775844 -2040,TPASKM,GBR,winter.evening,24.873045018486266 -2040,TPASKM,GBR,peak.night,22.484745428933703 -2040,TPASKM,GBR,peak.day,24.330677601604386 -2040,TPASKM,GBR,peak.peak,25.504241895437747 -2040,TPASKM,GBR,peak.evening,29.995760794452032 -2040,TPASKM,GBR,summer.night,22.484745428933703 -2040,TPASKM,GBR,summer.day,27.43351476560274 -2040,TPASKM,GBR,summer.peak,27.874379857538717 -2040,TPASKM,GBR,summer.evening,35.50168523414014 -2040,TPASKM,GBR,autumn.night,22.484745428933703 -2040,TPASKM,GBR,autumn.day,25.588721779727173 -2040,TPASKM,GBR,autumn.peak,26.93103226715387 -2040,TPASKM,GBR,autumn.evening,27.588107324588435 +2040,ELCTRI,GBR,winter.night,13.696824265811934 +2040,ELCTRI,GBR,winter.day,13.696824265811934 +2040,ELCTRI,GBR,winter.peak,13.696824265811935 +2040,ELCTRI,GBR,winter.evening,13.696824265811934 +2040,ELCTRI,GBR,peak.night,13.696824265811934 +2040,ELCTRI,GBR,peak.day,13.696824265811934 +2040,ELCTRI,GBR,peak.peak,15.25997363701509 +2040,ELCTRI,GBR,peak.evening,22.766764933751844 +2040,ELCTRI,GBR,summer.night,13.696824265811935 +2040,ELCTRI,GBR,summer.day,21.457136597887633 +2040,ELCTRI,GBR,summer.peak,21.83127194563093 +2040,ELCTRI,GBR,summer.evening,31.158016169523705 +2040,ELCTRI,GBR,autumn.night,13.696824265811935 +2040,ELCTRI,GBR,autumn.day,14.846732223243713 +2040,ELCTRI,GBR,autumn.peak,18.51198227578117 +2040,ELCTRI,GBR,autumn.evening,20.066475465377646 +2040,H2YPRD,GBR,winter.night,13.488361683311915 +2040,H2YPRD,GBR,winter.day,13.488361683311915 +2040,H2YPRD,GBR,winter.peak,13.488361683311915 +2040,H2YPRD,GBR,winter.evening,13.488361683311915 +2040,H2YPRD,GBR,peak.night,13.488362136362374 +2040,H2YPRD,GBR,peak.day,13.488362136362374 +2040,H2YPRD,GBR,peak.peak,13.488362136362374 +2040,H2YPRD,GBR,peak.evening,13.488362136362374 +2040,H2YPRD,GBR,summer.night,13.488361641048124 +2040,H2YPRD,GBR,summer.day,13.488361641048124 +2040,H2YPRD,GBR,summer.peak,13.488361641048124 +2040,H2YPRD,GBR,summer.evening,13.488361641048124 +2040,H2YPRD,GBR,autumn.night,13.488361641048124 +2040,H2YPRD,GBR,autumn.day,13.488361641048124 +2040,H2YPRD,GBR,autumn.peak,13.488361641048124 +2040,H2YPRD,GBR,autumn.evening,13.488361641048124 +2040,TPASKM,GBR,winter.night,23.35850743889859 +2040,TPASKM,GBR,winter.day,23.35850743889859 +2040,TPASKM,GBR,winter.peak,23.358507438898595 +2040,TPASKM,GBR,winter.evening,23.35850743889859 +2040,TPASKM,GBR,peak.night,23.35850743889859 +2040,TPASKM,GBR,peak.day,23.35850743889859 +2040,TPASKM,GBR,peak.peak,24.69404032285314 +2040,TPASKM,GBR,peak.evening,31.10773744896918 +2040,TPASKM,GBR,summer.night,23.3585074388986 +2040,TPASKM,GBR,summer.day,29.98880937944049 +2040,TPASKM,GBR,summer.peak,30.308465369562757 +2040,TPASKM,GBR,summer.evening,38.277104733601554 +2040,TPASKM,GBR,autumn.night,23.3585074388986 +2040,TPASKM,GBR,autumn.day,24.34097265877012 +2040,TPASKM,GBR,autumn.peak,27.472510861873634 +2040,TPASKM,GBR,autumn.evening,28.800648025752956 2040,RSHEAT,GBR,winter.night,31.73564906753376 2040,RSHEAT,GBR,winter.day,31.73564906753376 2040,RSHEAT,GBR,winter.peak,31.73564906753376 diff --git a/tests/data/circularity_npv/asset_capacities.csv b/tests/data/circularity_npv/asset_capacities.csv index 43062092a..79dd1a8f8 100644 --- a/tests/data/circularity_npv/asset_capacities.csv +++ b/tests/data/circularity_npv/asset_capacities.csv @@ -26,21 +26,21 @@ milestone_year,asset_id,capacity,num_tranches,mothballed_capacity,mothballed_tra 2030,17,3680.183145405077,26,0.0,0 2030,18,298.6475820926018,57,0.0,0 2030,19,2944.1465163240614,16,0.0,0 -2030,20,165.3505808753475,27,0.0,0 +2030,20,165.35058087534748,27,0.0,0 2040,5,3.964844,1,0.0,0 2040,6,2.999,1,0.0,0 2040,16,1849.28399075358,36,0.0,0 2040,18,298.6475820926018,57,0.0,0 2040,19,1288.064100891777,7,0.0,0 -2040,20,165.3505808753475,27,0.0,0 +2040,20,165.35058087534748,27,0.0,0 2040,21,942.563016229748,28,0.0,0 2040,22,2198.390989008045,39,0.0,0 -2040,23,38.755532680196005,17,0.0,0 -2040,24,5.471369319196239,6,0.0,0 -2040,25,8.10573232473517,8,0.0,0 -2040,26,153.84953248060512,21,0.0,0 -2040,27,358.63594983962076,37,0.0,0 -2040,28,972.485651665613,26,0.0,0 +2040,23,47.87448154612448,21,0.0,0 +2040,24,4.559474432663533,5,0.0,0 +2040,25,7.0925157841432735,7,0.0,0 +2040,26,153.49186905289415,45,0.0,0 +2040,27,241.2806473380193,57,0.0,0 +2040,28,972.4856516656132,26,0.0,0 2040,29,2349.6972514094086,33,0.0,0 -2040,30,376.5677473316019,37,0.0,0 +2040,30,253.34467970492025,57,0.0,0 2040,31,2627.9227668603858,37,0.0,0 diff --git a/tests/data/circularity_npv/commodity_flows.csv b/tests/data/circularity_npv/commodity_flows.csv index 47bbbcb80..91d24e554 100644 --- a/tests/data/circularity_npv/commodity_flows.csv +++ b/tests/data/circularity_npv/commodity_flows.csv @@ -647,14 +647,14 @@ milestone_year,asset_id,commodity_id,time_slice,flow 2030,0,CO2EMT,summer.peak,0.0 2030,0,GASPRD,summer.evening,0.0 2030,0,CO2EMT,summer.evening,0.0 -2030,0,GASPRD,autumn.night,18.92207366424135 -2030,0,CO2EMT,autumn.night,96.74856264526602 -2030,0,GASPRD,autumn.day,27.031533768987256 -2030,0,CO2EMT,autumn.day,138.21223216083186 -2030,0,GASPRD,autumn.peak,8.109460104745903 -2030,0,CO2EMT,autumn.peak,41.463669515565805 -2030,0,GASPRD,autumn.evening,10.81261355949544 -2030,0,CO2EMT,autumn.evening,55.28489312970019 +2030,0,GASPRD,autumn.night,18.92207366424136 +2030,0,CO2EMT,autumn.night,96.74856264526608 +2030,0,GASPRD,autumn.day,27.031533768987273 +2030,0,CO2EMT,autumn.day,138.21223216083195 +2030,0,GASPRD,autumn.peak,8.109460104745908 +2030,0,CO2EMT,autumn.peak,41.46366951556583 +2030,0,GASPRD,autumn.evening,10.812613559495437 +2030,0,CO2EMT,autumn.evening,55.28489312970017 2030,1,OILCRD,winter.night,89.65022397810527 2030,1,GASPRD,winter.night,8.965022397810527 2030,1,CO2EMT,winter.night,657.405092431446 @@ -739,18 +739,18 @@ milestone_year,asset_id,commodity_id,time_slice,flow 2030,2,GASPRD,summer.evening,-0.0 2030,2,GASNAT,summer.evening,0.0 2030,2,CO2EMT,summer.evening,0.0 -2030,2,GASPRD,autumn.night,-43.07327566636766 -2030,2,GASNAT,autumn.night,41.02216730130253 -2030,2,CO2EMT,autumn.night,104.87317070577993 -2030,2,GASPRD,autumn.day,-61.53325086756534 -2030,2,GASNAT,autumn.day,58.603096064347945 -2030,2,CO2EMT,autumn.day,149.81881508850554 -2030,2,GASPRD,autumn.peak,-18.459975201197683 -2030,2,GASNAT,autumn.peak,17.58092876304541 -2030,2,CO2EMT,autumn.peak,44.9456443827256 -2030,2,GASPRD,autumn.evening,-24.613300465169978 -2030,2,GASNAT,autumn.evening,23.44123853825712 -2030,2,CO2EMT,autumn.evening,59.92752632305434 +2030,2,GASPRD,autumn.night,-43.073275666367664 +2030,2,GASNAT,autumn.night,41.02216730130254 +2030,2,CO2EMT,autumn.night,104.87317070577994 +2030,2,GASPRD,autumn.day,-61.53325086756536 +2030,2,GASNAT,autumn.day,58.60309606434796 +2030,2,CO2EMT,autumn.day,149.81881508850557 +2030,2,GASPRD,autumn.peak,-18.459975201197686 +2030,2,GASNAT,autumn.peak,17.580928763045414 +2030,2,CO2EMT,autumn.peak,44.945644382725604 +2030,2,GASPRD,autumn.evening,-24.61330046516998 +2030,2,GASNAT,autumn.evening,23.441238538257124 +2030,2,CO2EMT,autumn.evening,59.927526323054344 2030,5,ELCTRI,winter.night,4.435312795545212 2030,5,ELCTRI,winter.day,7.075379933645912 2030,5,ELCTRI,winter.peak,1.9712501261051125 @@ -827,9 +827,9 @@ milestone_year,asset_id,commodity_id,time_slice,flow 2030,13,GASNAT,winter.evening,-71.44063561968 2030,13,RSHEAT,winter.evening,62.1222918432 2030,13,CO2EMT,winter.evening,3652.7596992342387 -2030,13,GASNAT,peak.night,-9.665895533424854 -2030,13,RSHEAT,peak.night,8.405126550804221 -2030,13,CO2EMT,peak.night,494.2172386240128 +2030,13,GASNAT,peak.night,-9.665895533424857 +2030,13,RSHEAT,peak.night,8.405126550804225 +2030,13,CO2EMT,peak.night,494.217238624013 2030,13,GASNAT,peak.day,-80.49245678381253 2030,13,RSHEAT,peak.day,69.99344068157612 2030,13,CO2EMT,peak.day,4115.579315356335 @@ -851,9 +851,9 @@ milestone_year,asset_id,commodity_id,time_slice,flow 2030,13,GASNAT,summer.evening,-0.0 2030,13,RSHEAT,summer.evening,0.0 2030,13,CO2EMT,summer.evening,0.0 -2030,13,GASNAT,autumn.night,-2.389279049096679 -2030,13,RSHEAT,autumn.night,2.0776339557362427 -2030,13,CO2EMT,autumn.night,122.1638377803132 +2030,13,GASNAT,autumn.night,-2.3892790490967144 +2030,13,RSHEAT,autumn.night,2.0776339557362737 +2030,13,CO2EMT,autumn.night,122.16383778031503 2030,13,GASNAT,autumn.day,-67.97422666003601 2030,13,RSHEAT,autumn.day,59.10802318264001 2030,13,CO2EMT,autumn.day,3475.5222091276414 @@ -951,12 +951,12 @@ milestone_year,asset_id,commodity_id,time_slice,flow 2030,16,RSHEAT,winter.peak,25.761012681171703 2030,16,BIOPEL,winter.evening,-0.0 2030,16,RSHEAT,winter.evening,0.0 -2030,16,BIOPEL,peak.night,-11.482679279946936 -2030,16,RSHEAT,peak.night,9.56889939995578 -2030,16,BIOPEL,peak.day,-16.403827520284658 -2030,16,RSHEAT,peak.day,13.669856266903881 -2030,16,BIOPEL,peak.peak,-4.921148240337723 -2030,16,RSHEAT,peak.peak,4.100956866948103 +2030,16,BIOPEL,peak.night,-11.482679279946932 +2030,16,RSHEAT,peak.night,9.568899399955777 +2030,16,BIOPEL,peak.day,-16.403827520284654 +2030,16,RSHEAT,peak.day,13.66985626690388 +2030,16,BIOPEL,peak.peak,-4.921148240337722 +2030,16,RSHEAT,peak.peak,4.100956866948102 2030,16,BIOPEL,peak.evening,-6.561531039609214 2030,16,RSHEAT,peak.evening,5.467942533007679 2030,16,BIOPEL,summer.night,-1.073113352519217 @@ -967,8 +967,8 @@ milestone_year,asset_id,commodity_id,time_slice,flow 2030,16,RSHEAT,summer.peak,0.0 2030,16,BIOPEL,summer.evening,-0.0 2030,16,RSHEAT,summer.evening,0.0 -2030,16,BIOPEL,autumn.night,-8.455970862772512 -2030,16,RSHEAT,autumn.night,7.046642385643761 +2030,16,BIOPEL,autumn.night,-8.455970862772475 +2030,16,RSHEAT,autumn.night,7.04664238564373 2030,16,BIOPEL,autumn.day,-0.0 2030,16,RSHEAT,autumn.day,0.0 2030,16,BIOPEL,autumn.peak,-30.91321521740604 @@ -1039,22 +1039,22 @@ milestone_year,asset_id,commodity_id,time_slice,flow 2030,17,GASOLI,autumn.evening,53.07956502182511 2030,17,DIESEL,autumn.evening,53.07956502182511 2030,17,CO2EMT,autumn.evening,2335.394701830261 -2030,18,BIOPRD,winter.night,-12.056813243944285 -2030,18,BIOPEL,winter.night,11.482679279946938 -2030,18,BIOPRD,winter.day,-17.22401889629889 -2030,18,BIOPEL,winter.day,16.403827520284658 -2030,18,BIOPRD,winter.peak,-5.167205652354611 -2030,18,BIOPEL,winter.peak,4.9211482403377245 -2030,18,BIOPRD,winter.evening,-6.889607591589674 -2030,18,BIOPEL,winter.evening,6.561531039609213 -2030,18,BIOPRD,peak.night,-12.056813243944285 -2030,18,BIOPEL,peak.night,11.482679279946938 -2030,18,BIOPRD,peak.day,-17.224018896298894 -2030,18,BIOPEL,peak.day,16.40382752028466 -2030,18,BIOPRD,peak.peak,-5.16720565235461 -2030,18,BIOPEL,peak.peak,4.921148240337724 -2030,18,BIOPRD,peak.evening,-6.889607591589673 -2030,18,BIOPEL,peak.evening,6.561531039609212 +2030,18,BIOPRD,winter.night,-12.05681324394428 +2030,18,BIOPEL,winter.night,11.482679279946932 +2030,18,BIOPRD,winter.day,-17.224018896298894 +2030,18,BIOPEL,winter.day,16.40382752028466 +2030,18,BIOPRD,winter.peak,-5.167205652354608 +2030,18,BIOPEL,winter.peak,4.921148240337722 +2030,18,BIOPRD,winter.evening,-6.889607591589671 +2030,18,BIOPEL,winter.evening,6.561531039609211 +2030,18,BIOPRD,peak.night,-12.056813243944283 +2030,18,BIOPEL,peak.night,11.482679279946936 +2030,18,BIOPRD,peak.day,-17.22401889629889 +2030,18,BIOPEL,peak.day,16.403827520284658 +2030,18,BIOPRD,peak.peak,-5.167205652354609 +2030,18,BIOPEL,peak.peak,4.921148240337723 +2030,18,BIOPRD,peak.evening,-6.889607591589672 +2030,18,BIOPEL,peak.evening,6.5615310396092115 2030,18,BIOPRD,summer.night,-0.328640964396805 2030,18,BIOPEL,summer.night,0.3129913946636238 2030,18,BIOPRD,summer.day,-0.46948709135156785 @@ -1063,14 +1063,14 @@ milestone_year,asset_id,commodity_id,time_slice,flow 2030,18,BIOPEL,summer.peak,0.13413916852834543 2030,18,BIOPRD,summer.evening,-0.18779483744204228 2030,18,BIOPEL,summer.evening,0.17885222613527835 -2030,18,BIOPRD,autumn.night,-12.056813243944285 -2030,18,BIOPEL,autumn.night,11.482679279946938 -2030,18,BIOPRD,autumn.day,-17.22401889629889 -2030,18,BIOPEL,autumn.day,16.403827520284658 -2030,18,BIOPRD,autumn.peak,-5.167205652354611 -2030,18,BIOPEL,autumn.peak,4.9211482403377245 -2030,18,BIOPRD,autumn.evening,-6.889607591589674 -2030,18,BIOPEL,autumn.evening,6.561531039609213 +2030,18,BIOPRD,autumn.night,-12.05681324394428 +2030,18,BIOPEL,autumn.night,11.482679279946932 +2030,18,BIOPRD,autumn.day,-17.224018896298894 +2030,18,BIOPEL,autumn.day,16.40382752028466 +2030,18,BIOPRD,autumn.peak,-5.167205652354608 +2030,18,BIOPEL,autumn.peak,4.921148240337722 +2030,18,BIOPRD,autumn.evening,-6.889607591589671 +2030,18,BIOPEL,autumn.evening,6.561531039609211 2030,19,OILCRD,winter.night,151.86179604315782 2030,19,GASPRD,winter.night,15.186179604315782 2030,19,CO2EMT,winter.night,1113.6025503844764 @@ -1119,86 +1119,86 @@ milestone_year,asset_id,commodity_id,time_slice,flow 2030,19,OILCRD,autumn.evening,86.77816946504392 2030,19,GASPRD,autumn.evening,8.677816946504391 2030,19,CO2EMT,autumn.evening,636.3443166871671 -2030,20,BIOPRD,winter.night,12.056813243944283 -2030,20,BIOPRD,winter.day,17.224018896298894 -2030,20,BIOPRD,winter.peak,5.1672056523546095 -2030,20,BIOPRD,winter.evening,6.889607591589672 -2030,20,BIOPRD,peak.night,12.056813243944283 -2030,20,BIOPRD,peak.day,17.224018896298894 -2030,20,BIOPRD,peak.peak,5.1672056523546095 -2030,20,BIOPRD,peak.evening,6.889607591589672 +2030,20,BIOPRD,winter.night,12.056813243944282 +2030,20,BIOPRD,winter.day,17.22401889629889 +2030,20,BIOPRD,winter.peak,5.167205652354609 +2030,20,BIOPRD,winter.evening,6.889607591589671 +2030,20,BIOPRD,peak.night,12.056813243944282 +2030,20,BIOPRD,peak.day,17.22401889629889 +2030,20,BIOPRD,peak.peak,5.167205652354609 +2030,20,BIOPRD,peak.evening,6.889607591589671 2030,20,BIOPRD,summer.night,0.32864096439680507 2030,20,BIOPRD,summer.day,0.46948709135156785 2030,20,BIOPRD,summer.peak,0.14084612695476273 2030,20,BIOPRD,summer.evening,0.18779483744204223 -2030,20,BIOPRD,autumn.night,12.056813243944283 -2030,20,BIOPRD,autumn.day,17.224018896298894 -2030,20,BIOPRD,autumn.peak,5.1672056523546095 -2030,20,BIOPRD,autumn.evening,6.889607591589672 -2040,5,ELCTRI,winter.night,1.9156830851254099 -2040,5,ELCTRI,winter.day,7.075379933645912 -2040,5,ELCTRI,winter.peak,1.9712501261051125 -2040,5,ELCTRI,winter.evening,2.569665359840533 -2040,5,ELCTRI,peak.night,1.9156830851254099 +2030,20,BIOPRD,autumn.night,12.056813243944282 +2030,20,BIOPRD,autumn.day,17.22401889629889 +2030,20,BIOPRD,autumn.peak,5.167205652354609 +2030,20,BIOPRD,autumn.evening,6.889607591589671 +2040,5,ELCTRI,winter.night,0.4349787353781742 +2040,5,ELCTRI,winter.day,6.213981720283963 +2040,5,ELCTRI,winter.peak,1.864194498487193 +2040,5,ELCTRI,winter.evening,2.485592679314587 +2040,5,ELCTRI,peak.night,1.3669869082241213 2040,5,ELCTRI,peak.day,6.371362032003979 -2040,5,ELCTRI,peak.peak,1.7776452018191915 -2040,5,ELCTRI,peak.evening,1.7248438738150702 -2040,5,ELCTRI,summer.night,1.6368416242136155 +2040,5,ELCTRI,peak.peak,1.7776452018191917 +2040,5,ELCTRI,peak.evening,1.7248438738150698 +2040,5,ELCTRI,summer.night,1.5760403466487078 2040,5,ELCTRI,summer.day,4.55851592811161 -2040,5,ELCTRI,summer.peak,1.3376340127470945 +2040,5,ELCTRI,summer.peak,1.3376340127470943 2040,5,ELCTRI,summer.evening,1.0560268601370622 -2040,5,ELCTRI,autumn.night,1.9156830851254099 +2040,5,ELCTRI,autumn.night,1.5760403466487078 2040,5,ELCTRI,autumn.day,6.001752635595889 2040,5,ELCTRI,autumn.peak,1.5488393825638174 2040,5,ELCTRI,autumn.evening,1.9008483513729915 2040,6,GASNAT,winter.night,0.0 2040,6,ELCTRI,winter.night,-0.0 2040,6,CO2EMT,winter.night,-0.0 -2040,6,GASNAT,winter.day,-0.13461070355775817 -2040,6,ELCTRI,winter.day,0.08974046903850545 -2040,6,CO2EMT,winter.day,6.882645272908175 -2040,6,GASNAT,winter.peak,-0.8931204907957104 -2040,6,ELCTRI,winter.peak,0.5954136605304736 -2040,6,CO2EMT,winter.peak,45.66525069438467 -2040,6,GASNAT,winter.evening,-1.1908273305875654 -2040,6,ELCTRI,winter.evening,0.793884887058377 -2040,6,CO2EMT,winter.evening,60.88700141294222 +2040,6,GASNAT,winter.day,0.0 +2040,6,ELCTRI,winter.day,-0.0 +2040,6,CO2EMT,winter.day,-0.0 +2040,6,GASNAT,winter.peak,0.0 +2040,6,ELCTRI,winter.peak,-0.0 +2040,6,CO2EMT,winter.peak,-0.0 +2040,6,GASNAT,winter.evening,0.0 +2040,6,ELCTRI,winter.evening,-0.0 +2040,6,CO2EMT,winter.evening,-0.0 2040,6,GASNAT,peak.night,0.0 2040,6,ELCTRI,peak.night,-0.0 2040,6,CO2EMT,peak.night,-0.0 -2040,6,GASNAT,peak.day,-5.102655934559747 -2040,6,ELCTRI,peak.day,3.4017706230398312 -2040,6,CO2EMT,peak.day,260.8987979340398 -2040,6,GASNAT,peak.peak,-1.7289002390649735 -2040,6,ELCTRI,peak.peak,1.152600159376649 -2040,6,CO2EMT,peak.peak,88.39866922339209 -2040,6,GASNAT,peak.evening,-2.992497723358964 -2040,6,ELCTRI,peak.evening,1.9949984822393094 -2040,6,CO2EMT,peak.evening,153.00640859534383 +2040,6,GASNAT,peak.day,0.0 +2040,6,ELCTRI,peak.day,-0.0 +2040,6,CO2EMT,peak.day,-0.0 +2040,6,GASNAT,peak.peak,0.0 +2040,6,ELCTRI,peak.peak,-0.0 +2040,6,CO2EMT,peak.peak,-0.0 +2040,6,GASNAT,peak.evening,-1.7628830195632355 +2040,6,ELCTRI,peak.evening,1.1752553463754902 +2040,6,CO2EMT,peak.evening,90.13620879026821 2040,6,GASNAT,summer.night,0.0 2040,6,ELCTRI,summer.night,-0.0 2040,6,CO2EMT,summer.night,-0.0 -2040,6,GASNAT,summer.day,-13.062629180566177 -2040,6,ELCTRI,summer.day,8.708419453710784 -2040,6,CO2EMT,summer.day,667.8922300023485 -2040,6,GASNAT,summer.peak,-4.4338340625 -2040,6,ELCTRI,summer.peak,2.955889375 -2040,6,CO2EMT,summer.peak,226.70193561562496 -2040,6,GASNAT,summer.evening,-5.91177879729423 -2040,6,ELCTRI,summer.evening,3.94118586486282 -2040,6,CO2EMT,summer.evening,302.26924990565396 +2040,6,GASNAT,summer.day,-8.993550220093514 +2040,6,ELCTRI,summer.day,5.995700146729009 +2040,6,CO2EMT,summer.day,459.8402227533813 +2040,6,GASNAT,summer.peak,-3.0689712837432177 +2040,6,ELCTRI,summer.peak,2.045980855828812 +2040,6,CO2EMT,summer.peak,156.91650173779072 +2040,6,GASNAT,summer.evening,-5.660973105399682 +2040,6,ELCTRI,summer.evening,3.7739820702664546 +2040,6,CO2EMT,summer.evening,289.4455548790857 2040,6,GASNAT,autumn.night,0.0 2040,6,ELCTRI,autumn.night,-0.0 2040,6,CO2EMT,autumn.night,-0.0 -2040,6,GASNAT,autumn.day,-4.9338002681413755 -2040,6,ELCTRI,autumn.day,3.289200178760917 -2040,6,CO2EMT,autumn.day,252.2652077100685 -2040,6,GASNAT,autumn.peak,-2.57871157541815 -2040,6,ELCTRI,autumn.peak,1.7191410502787667 -2040,6,CO2EMT,autumn.peak,131.84952285113 -2040,6,GASNAT,autumn.evening,-4.1552984889807085 -2040,6,ELCTRI,autumn.evening,2.7701989926538055 -2040,6,CO2EMT,autumn.evening,212.46041174158358 +2040,6,GASNAT,autumn.day,0.0 +2040,6,ELCTRI,autumn.day,-0.0 +2040,6,CO2EMT,autumn.day,-0.0 +2040,6,GASNAT,autumn.peak,-0.9426522446674833 +2040,6,ELCTRI,autumn.peak,0.6284348297783222 +2040,6,CO2EMT,autumn.peak,48.19780926984842 +2040,6,GASNAT,autumn.evening,-2.214295253528559 +2040,6,ELCTRI,autumn.evening,1.476196835685706 +2040,6,CO2EMT,autumn.evening,113.21691631291522 2040,16,BIOPEL,winter.night,-40.48351055539363 2040,16,RSHEAT,winter.night,33.73625879616136 2040,16,BIOPEL,winter.day,-139.77917968782327 @@ -1278,27 +1278,27 @@ milestone_year,asset_id,commodity_id,time_slice,flow 2040,19,OILCRD,peak.night,64.31028942216543 2040,19,GASPRD,peak.night,6.4310289422165425 2040,19,CO2EMT,peak.night,471.5873523327391 -2040,19,OILCRD,peak.day,91.87184190566923 -2040,19,GASPRD,peak.day,9.187184190566922 -2040,19,CO2EMT,peak.day,673.6962166942725 -2040,19,OILCRD,peak.peak,27.561552483503796 +2040,19,OILCRD,peak.day,91.87184190566924 +2040,19,GASPRD,peak.day,9.187184190566924 +2040,19,CO2EMT,peak.day,673.6962166942726 +2040,19,OILCRD,peak.peak,27.5615524835038 2040,19,GASPRD,peak.peak,2.75615524835038 -2040,19,CO2EMT,peak.peak,202.10886436153334 -2040,19,OILCRD,peak.evening,36.74873693866162 -2040,19,GASPRD,peak.evening,3.6748736938661626 -2040,19,CO2EMT,peak.evening,269.4784879712057 +2040,19,CO2EMT,peak.peak,202.10886436153336 +2040,19,OILCRD,peak.evening,36.74873693866158 +2040,19,GASPRD,peak.evening,3.674873693866158 +2040,19,CO2EMT,peak.evening,269.47848797120537 2040,19,OILCRD,summer.night,64.31028942216543 2040,19,GASPRD,summer.night,6.4310289422165425 2040,19,CO2EMT,summer.night,471.5873523327391 -2040,19,OILCRD,summer.day,91.87184190566924 -2040,19,GASPRD,summer.day,9.187184190566924 -2040,19,CO2EMT,summer.day,673.6962166942726 -2040,19,OILCRD,summer.peak,27.5615524835038 +2040,19,OILCRD,summer.day,91.87184190566923 +2040,19,GASPRD,summer.day,9.187184190566922 +2040,19,CO2EMT,summer.day,673.6962166942725 +2040,19,OILCRD,summer.peak,27.561552483503796 2040,19,GASPRD,summer.peak,2.75615524835038 -2040,19,CO2EMT,summer.peak,202.10886436153336 -2040,19,OILCRD,summer.evening,36.74873693866158 -2040,19,GASPRD,summer.evening,3.674873693866158 -2040,19,CO2EMT,summer.evening,269.47848797120537 +2040,19,CO2EMT,summer.peak,202.10886436153334 +2040,19,OILCRD,summer.evening,36.74873693866162 +2040,19,GASPRD,summer.evening,3.6748736938661626 +2040,19,CO2EMT,summer.evening,269.4784879712057 2040,19,OILCRD,autumn.night,64.31028942216543 2040,19,GASPRD,autumn.night,6.4310289422165425 2040,19,CO2EMT,autumn.night,471.5873523327391 @@ -1311,22 +1311,22 @@ milestone_year,asset_id,commodity_id,time_slice,flow 2040,19,OILCRD,autumn.evening,36.74873693866158 2040,19,GASPRD,autumn.evening,3.674873693866158 2040,19,CO2EMT,autumn.evening,269.47848797120537 -2040,20,BIOPRD,winter.night,11.760873987058854 -2040,20,BIOPRD,winter.day,16.801248529899503 -2040,20,BIOPRD,winter.peak,5.0403745428406515 -2040,20,BIOPRD,winter.evening,6.720499444218198 -2040,20,BIOPRD,peak.night,6.801953962775658 -2040,20,BIOPRD,peak.day,9.71707707635323 -2040,20,BIOPRD,peak.peak,2.915123113577575 -2040,20,BIOPRD,peak.evening,3.8868308491980796 +2040,20,BIOPRD,winter.night,11.760873987058853 +2040,20,BIOPRD,winter.day,16.8012485298995 +2040,20,BIOPRD,winter.peak,5.040374542840651 +2040,20,BIOPRD,winter.evening,6.720499444218196 +2040,20,BIOPRD,peak.night,6.801953962775656 +2040,20,BIOPRD,peak.day,9.717077076353227 +2040,20,BIOPRD,peak.peak,2.9151231135775744 +2040,20,BIOPRD,peak.evening,3.8868308491980788 2040,20,BIOPRD,summer.night,0.5063757966156501 -2040,20,BIOPRD,summer.day,0.7233939941731311 -2040,20,BIOPRD,summer.peak,0.21701819755748109 +2040,20,BIOPRD,summer.day,0.723393994173131 +2040,20,BIOPRD,summer.peak,0.21701819755748106 2040,20,BIOPRD,summer.evening,0.2893575990581689 -2040,20,BIOPRD,autumn.night,5.456414089121369 -2040,20,BIOPRD,autumn.day,7.794877259483269 -2040,20,BIOPRD,autumn.peak,2.3384631703618988 -2040,20,BIOPRD,autumn.evening,3.117950918759472 +2040,20,BIOPRD,autumn.night,5.456414089121367 +2040,20,BIOPRD,autumn.day,7.794877259483268 +2040,20,BIOPRD,autumn.peak,2.338463170361898 +2040,20,BIOPRD,autumn.evening,3.1179509187594716 2040,21,ELCTRI,winter.night,-5.687236186067019 2040,21,GASOLI,winter.night,-6.656518738655801 2040,21,TPASKM,winter.night,6.656518738655801 @@ -1407,182 +1407,182 @@ milestone_year,asset_id,commodity_id,time_slice,flow 2040,22,RSHEAT,autumn.peak,33.37111099736366 2040,22,BIOPEL,autumn.evening,-23.969297616016814 2040,22,RSHEAT,autumn.evening,19.97441468001401 -2040,23,ELCTRI,winter.night,18.725407206557566 -2040,23,ELCTRI,winter.day,69.1603801418712 -2040,23,ELCTRI,winter.peak,19.26856357604667 -2040,23,ELCTRI,winter.evening,25.117949112365434 -2040,23,ELCTRI,peak.night,18.725407206557566 -2040,23,ELCTRI,peak.day,62.278750298546484 -2040,23,ELCTRI,peak.peak,17.37611535608899 -2040,23,ELCTRI,peak.evening,16.85999326073758 -2040,23,ELCTRI,summer.night,15.99978941403896 -2040,23,ELCTRI,summer.day,44.55855338195488 -2040,23,ELCTRI,summer.peak,13.07509669867509 -2040,23,ELCTRI,summer.evening,10.322444840000436 -2040,23,ELCTRI,autumn.night,18.725407206557566 -2040,23,ELCTRI,autumn.day,58.66589464990022 -2040,23,ELCTRI,autumn.peak,15.139585645066143 -2040,23,ELCTRI,autumn.evening,18.580400742559522 +2040,23,ELCTRI,winter.night,5.2522574506888455 +2040,23,ELCTRI,winter.day,75.03224671530316 +2040,23,ELCTRI,winter.peak,22.509673802099627 +2040,23,ELCTRI,winter.evening,30.012898579875596 +2040,23,ELCTRI,peak.night,16.506018776922737 +2040,23,ELCTRI,peak.day,76.93257389820448 +2040,23,ELCTRI,peak.peak,21.46461308693346 +2040,23,ELCTRI,peak.evening,20.827050498558183 +2040,23,ELCTRI,summer.night,19.030285804833984 +2040,23,ELCTRI,summer.day,55.04291888359132 +2040,23,ELCTRI,summer.peak,16.151590039539816 +2040,23,ELCTRI,summer.evening,12.751255390588774 +2040,23,ELCTRI,autumn.night,19.030285804833984 +2040,23,ELCTRI,autumn.day,72.4696345675238 +2040,23,ELCTRI,autumn.peak,18.70184109096406 +2040,23,ELCTRI,autumn.evening,22.952259740808824 2040,24,H2YPRD,winter.night,-0.0 2040,24,ELCTRI,winter.night,0.0 -2040,24,H2YPRD,winter.day,-7.017264450390703 -2040,24,ELCTRI,winter.day,4.678176300260469 -2040,24,H2YPRD,winter.peak,-1.3940248839738376 -2040,24,ELCTRI,winter.peak,0.929349922649225 -2040,24,H2YPRD,winter.evening,-2.806905793629429 -2040,24,ELCTRI,winter.evening,1.8712705290862859 +2040,24,H2YPRD,winter.day,-0.0 +2040,24,ELCTRI,winter.day,0.0 +2040,24,H2YPRD,winter.peak,-0.0 +2040,24,ELCTRI,winter.peak,0.0 +2040,24,H2YPRD,winter.evening,-0.0 +2040,24,ELCTRI,winter.evening,0.0 2040,24,H2YPRD,peak.night,-0.0 2040,24,ELCTRI,peak.night,0.0 2040,24,H2YPRD,peak.day,-0.0 2040,24,ELCTRI,peak.day,0.0 -2040,24,H2YPRD,peak.peak,-1.4283695596707782 -2040,24,ELCTRI,peak.peak,0.9522463731138521 -2040,24,H2YPRD,peak.evening,-9.789825568323192 -2040,24,ELCTRI,peak.evening,6.526550378882128 +2040,24,H2YPRD,peak.peak,-1.6974150177512468 +2040,24,ELCTRI,peak.peak,1.1316100118341645 +2040,24,H2YPRD,peak.evening,-8.987864047290902 +2040,24,ELCTRI,peak.evening,5.991909364860601 2040,24,H2YPRD,summer.night,-0.0 2040,24,ELCTRI,summer.night,0.0 -2040,24,H2YPRD,summer.day,-0.0 -2040,24,ELCTRI,summer.day,0.0 +2040,24,H2YPRD,summer.day,-2.2042514556465864 +2040,24,ELCTRI,summer.day,1.4695009704310575 2040,24,H2YPRD,summer.peak,-0.0 2040,24,ELCTRI,summer.peak,0.0 -2040,24,H2YPRD,summer.evening,-9.789825568323192 -2040,24,ELCTRI,summer.evening,6.526550378882128 +2040,24,H2YPRD,summer.evening,-8.987864047290902 +2040,24,ELCTRI,summer.evening,5.991909364860601 2040,24,H2YPRD,autumn.night,-0.0 2040,24,ELCTRI,autumn.night,0.0 -2040,24,H2YPRD,autumn.day,-6.598938306858228 -2040,24,ELCTRI,autumn.day,4.399292204572152 -2040,24,H2YPRD,autumn.peak,-1.9796814857224874 -2040,24,ELCTRI,autumn.peak,1.319787657148325 -2040,24,H2YPRD,autumn.evening,-2.6395753354132534 -2040,24,ELCTRI,autumn.evening,1.7597168902755023 +2040,24,H2YPRD,autumn.day,-4.1622618487011405 +2040,24,ELCTRI,autumn.day,2.774841232467427 +2040,24,H2YPRD,autumn.peak,-3.0127944094713746 +2040,24,ELCTRI,autumn.peak,2.0085296063142497 +2040,24,H2YPRD,autumn.evening,-4.017059244764973 +2040,24,ELCTRI,autumn.evening,2.678039496509982 2040,25,GASNAT,winter.night,-0.0 2040,25,ELCTRI,winter.night,0.0 2040,25,CO2EMT,winter.night,0.0 -2040,25,GASNAT,winter.day,-0.3638273861565402 -2040,25,ELCTRI,winter.day,0.24255159077102678 -2040,25,CO2EMT,winter.day,18.6024942541839 -2040,25,GASNAT,winter.peak,-2.413936522883004 -2040,25,ELCTRI,winter.peak,1.6092910152553361 -2040,25,CO2EMT,winter.peak,123.424574415008 -2040,25,GASNAT,winter.evening,-3.218582056259328 -2040,25,ELCTRI,winter.evening,2.145721370839552 -2040,25,CO2EMT,winter.evening,164.5661005365394 +2040,25,GASNAT,winter.day,-0.0 +2040,25,ELCTRI,winter.day,0.0 +2040,25,CO2EMT,winter.day,0.0 +2040,25,GASNAT,winter.peak,-0.0 +2040,25,ELCTRI,winter.peak,0.0 +2040,25,CO2EMT,winter.peak,0.0 +2040,25,GASNAT,winter.evening,-0.0 +2040,25,ELCTRI,winter.evening,0.0 +2040,25,CO2EMT,winter.evening,0.0 2040,25,GASNAT,peak.night,-0.0 2040,25,ELCTRI,peak.night,0.0 2040,25,CO2EMT,peak.night,0.0 -2040,25,GASNAT,peak.day,-13.791518222995226 -2040,25,ELCTRI,peak.day,9.194345481996818 -2040,25,CO2EMT,peak.day,705.1603267417458 -2040,25,GASNAT,peak.peak,-4.6728918152822 -2040,25,ELCTRI,peak.peak,3.1152612101881334 -2040,25,CO2EMT,peak.peak,238.92495851537888 -2040,25,GASNAT,peak.evening,-8.088157895274145 -2040,25,ELCTRI,peak.evening,5.392105263516097 -2040,25,CO2EMT,peak.evening,413.547513185367 +2040,25,GASNAT,peak.day,-0.0 +2040,25,ELCTRI,peak.day,0.0 +2040,25,CO2EMT,peak.day,0.0 +2040,25,GASNAT,peak.peak,-0.0 +2040,25,ELCTRI,peak.peak,0.0 +2040,25,CO2EMT,peak.peak,0.0 +2040,25,GASNAT,peak.evening,-4.169148263371257 +2040,25,ELCTRI,peak.evening,2.779432175580838 +2040,25,CO2EMT,peak.evening,213.16855070617237 2040,25,GASNAT,summer.night,-0.0 2040,25,ELCTRI,summer.night,0.0 2040,25,CO2EMT,summer.night,0.0 -2040,25,GASNAT,summer.day,-35.305827140694944 -2040,25,ELCTRI,summer.day,23.53721809379663 -2040,25,CO2EMT,summer.day,1805.1869417037321 -2040,25,GASNAT,summer.peak,-11.983818633850653 -2040,25,ELCTRI,summer.peak,7.9892124225671015 -2040,25,CO2EMT,summer.peak,612.7326467487838 -2040,25,GASNAT,summer.evening,-15.978424972961601 -2040,25,ELCTRI,summer.evening,10.652283315307734 -2040,25,CO2EMT,summer.evening,816.9768688675266 +2040,25,GASNAT,summer.day,-21.26938876008618 +2040,25,ELCTRI,summer.day,14.17959250672412 +2040,25,CO2EMT,summer.day,1087.5038473032064 +2040,25,GASNAT,summer.peak,-7.257995088706643 +2040,25,ELCTRI,summer.peak,4.838663392471095 +2040,25,CO2EMT,summer.peak,371.1012888855706 +2040,25,GASNAT,summer.evening,-13.387976360005938 +2040,25,ELCTRI,summer.evening,8.925317573337292 +2040,25,CO2EMT,summer.evening,684.5272312871035 2040,25,GASNAT,autumn.night,-0.0 2040,25,ELCTRI,autumn.night,0.0 2040,25,CO2EMT,autumn.night,0.0 -2040,25,GASNAT,autumn.day,-13.335133150136908 -2040,25,ELCTRI,autumn.day,8.89008876675794 -2040,25,CO2EMT,autumn.day,681.8253579665001 -2040,25,GASNAT,autumn.peak,-6.9697718482946485 -2040,25,ELCTRI,autumn.peak,4.646514565529766 -2040,25,CO2EMT,autumn.peak,356.36443460330537 -2040,25,GASNAT,autumn.evening,-11.230989423492542 -2040,25,ELCTRI,autumn.evening,7.487326282328361 -2040,25,CO2EMT,autumn.evening,574.2404892231737 -2040,26,ELCTRI,winter.night,-14.95385410561596 -2040,26,H2YPRD,winter.night,11.218195127993969 +2040,25,GASNAT,autumn.day,-0.0 +2040,25,ELCTRI,autumn.day,0.0 +2040,25,CO2EMT,autumn.day,0.0 +2040,25,GASNAT,autumn.peak,-2.229335086449554 +2040,25,ELCTRI,autumn.peak,1.4862233909663694 +2040,25,CO2EMT,autumn.peak,113.98590297016568 +2040,25,GASNAT,autumn.evening,-5.236720252219019 +2040,25,ELCTRI,autumn.evening,3.4911468348126795 +2040,25,CO2EMT,autumn.evening,267.75350649595845 +2040,26,ELCTRI,winter.night,-0.0 +2040,26,H2YPRD,winter.night,0.0 2040,26,ELCTRI,winter.day,-0.0 2040,26,H2YPRD,winter.day,0.0 2040,26,ELCTRI,winter.peak,-0.0 2040,26,H2YPRD,winter.peak,0.0 2040,26,ELCTRI,winter.evening,-0.0 2040,26,H2YPRD,winter.evening,0.0 -2040,26,ELCTRI,peak.night,-14.95385410561596 -2040,26,H2YPRD,peak.night,11.218195127993969 -2040,26,ELCTRI,peak.day,-0.0 -2040,26,H2YPRD,peak.day,0.0 +2040,26,ELCTRI,peak.night,-12.185769499079838 +2040,26,H2YPRD,peak.night,9.141612527441739 +2040,26,ELCTRI,peak.day,-2.0577074946213467 +2040,26,H2YPRD,peak.day,1.5436665376004102 2040,26,ELCTRI,peak.peak,-0.0 2040,26,H2YPRD,peak.peak,0.0 2040,26,ELCTRI,peak.evening,-0.0 2040,26,H2YPRD,peak.evening,0.0 -2040,26,ELCTRI,summer.night,-11.949394852185556 -2040,26,H2YPRD,summer.night,8.964287210941903 -2040,26,ELCTRI,summer.day,-0.1164784219867897 -2040,26,H2YPRD,summer.day,0.08738066165550616 -2040,26,ELCTRI,summer.peak,-0.983964208402468 -2040,26,H2YPRD,summer.peak,0.7381576957257825 +2040,26,ELCTRI,summer.night,-14.919089965415672 +2040,26,H2YPRD,summer.night,11.192115502937488 +2040,26,ELCTRI,summer.day,-0.0 +2040,26,H2YPRD,summer.day,0.0 +2040,26,ELCTRI,summer.peak,-0.0 +2040,26,H2YPRD,summer.peak,0.0 2040,26,ELCTRI,summer.evening,-0.0 2040,26,H2YPRD,summer.evening,0.0 -2040,26,ELCTRI,autumn.night,-14.95385410561596 -2040,26,H2YPRD,autumn.night,11.218195127993969 +2040,26,ELCTRI,autumn.night,-14.919089965415672 +2040,26,H2YPRD,autumn.night,11.192115502937488 2040,26,ELCTRI,autumn.day,-0.0 2040,26,H2YPRD,autumn.day,0.0 2040,26,ELCTRI,autumn.peak,-0.0 2040,26,H2YPRD,autumn.peak,0.0 2040,26,ELCTRI,autumn.evening,-0.0 2040,26,H2YPRD,autumn.evening,0.0 -2040,27,GASPRD,winter.night,-2.5158145015735793 -2040,27,GASNAT,winter.night,2.3960138110224563 -2040,27,CO2EMT,winter.night,6.12540930787891 -2040,27,GASPRD,winter.day,-3.5940207116047427 -2040,27,GASNAT,winter.day,3.422876868194993 -2040,27,CO2EMT,winter.day,8.7505847135405 -2040,27,GASPRD,winter.peak,-1.0782062100311627 -2040,27,GASNAT,winter.peak,1.026863057172536 -2040,27,CO2EMT,winter.peak,2.6251754056615884 -2040,27,GASPRD,winter.evening,-1.4376082915424158 -2040,27,GASNAT,winter.evening,1.3691507538499197 -2040,27,CO2EMT,winter.evening,3.50023390221732 -2040,27,GASPRD,peak.night,-11.140340441967332 -2040,27,GASNAT,peak.night,10.609848039968888 -2040,27,CO2EMT,peak.night,27.124076514180466 -2040,27,GASPRD,peak.day,-15.914772038127358 -2040,27,GASNAT,peak.day,15.156925750597484 -2040,27,CO2EMT,peak.day,38.74868068140247 -2040,27,GASPRD,peak.peak,-4.774431596160027 -2040,27,GASNAT,peak.peak,4.547077710628597 -2040,27,CO2EMT,peak.peak,11.624604167222008 -2040,27,GASPRD,peak.evening,-6.365908845807305 -2040,27,GASNAT,peak.evening,6.062770329340291 -2040,27,CO2EMT,peak.evening,15.499472346958454 -2040,27,GASPRD,summer.night,-26.5446208064528 -2040,27,GASNAT,summer.night,25.280591244240764 -2040,27,CO2EMT,summer.night,64.62983151590151 -2040,27,GASPRD,summer.day,-37.920886814355384 -2040,27,GASNAT,summer.day,36.11513029938608 -2040,27,CO2EMT,summer.day,92.32833061038052 -2040,27,GASPRD,summer.peak,-11.376266007902558 -2040,27,GASNAT,summer.peak,10.834539055145292 -2040,27,CO2EMT,summer.peak,27.698499094478944 -2040,27,GASPRD,summer.evening,-15.168354798550247 -2040,27,GASNAT,summer.evening,14.446052189095473 -2040,27,CO2EMT,summer.evening,36.93133242142258 -2040,27,GASPRD,autumn.night,-13.231134588615348 -2040,27,GASNAT,autumn.night,12.601080560586045 -2040,27,CO2EMT,autumn.night,32.214662453138224 -2040,27,GASPRD,autumn.day,-18.901620814956853 -2040,27,GASNAT,autumn.day,18.00154363329224 -2040,27,CO2EMT,autumn.day,46.02094629851162 -2040,27,GASPRD,autumn.peak,-5.670486226341498 -2040,27,GASNAT,autumn.peak,5.400463072706188 -2040,27,CO2EMT,autumn.peak,13.80628384537337 -2040,27,GASPRD,autumn.evening,-7.56064836227385 -2040,27,GASNAT,autumn.evening,7.200617487879857 -2040,27,CO2EMT,autumn.evening,18.408378607764856 +2040,27,GASPRD,winter.night,-0.0 +2040,27,GASNAT,winter.night,0.0 +2040,27,CO2EMT,winter.night,0.0 +2040,27,GASPRD,winter.day,-0.0 +2040,27,GASNAT,winter.day,0.0 +2040,27,CO2EMT,winter.day,0.0 +2040,27,GASPRD,winter.peak,-0.0 +2040,27,GASNAT,winter.peak,0.0 +2040,27,CO2EMT,winter.peak,0.0 +2040,27,GASPRD,winter.evening,-0.0 +2040,27,GASNAT,winter.evening,0.0 +2040,27,CO2EMT,winter.evening,0.0 +2040,27,GASPRD,peak.night,-1.8166845814367938 +2040,27,GASNAT,peak.night,1.7301757918445655 +2040,27,CO2EMT,peak.night,4.423194411850632 +2040,27,GASPRD,peak.day,-2.5952636842076298 +2040,27,GASNAT,peak.day,2.4716796992453616 +2040,27,CO2EMT,peak.day,6.318849151120768 +2040,27,GASPRD,peak.peak,-0.7785791027708356 +2040,27,GASNAT,peak.peak,0.7415039074007959 +2040,27,CO2EMT,peak.peak,1.8956547392701348 +2040,27,GASPRD,peak.evening,-1.038105478665959 +2040,27,GASNAT,peak.evening,0.9886718844437703 +2040,27,CO2EMT,peak.evening,2.527539672580499 +2040,27,GASPRD,summer.night,-18.264399298460074 +2040,27,GASNAT,summer.night,17.3946659985334 +2040,27,CO2EMT,summer.night,44.46946362525065 +2040,27,GASPRD,summer.day,-26.0919989620168 +2040,27,GASNAT,summer.day,24.849522820968378 +2040,27,CO2EMT,summer.day,63.52780509180566 +2040,27,GASPRD,summer.peak,-7.827599663556718 +2040,27,GASNAT,summer.peak,7.454856822434969 +2040,27,CO2EMT,summer.peak,19.058341466555 +2040,27,GASPRD,summer.evening,-10.436799634903354 +2040,27,GASNAT,summer.evening,9.939809176098432 +2040,27,CO2EMT,summer.evening,25.411122158695644 +2040,27,GASPRD,autumn.night,-3.253294620648814 +2040,27,GASNAT,autumn.night,3.0983758291893464 +2040,27,CO2EMT,autumn.night,7.920997807322565 +2040,27,GASPRD,autumn.day,-4.647563737410218 +2040,27,GASNAT,autumn.day,4.426251178485922 +2040,27,CO2EMT,autumn.day,11.31571113779926 +2040,27,GASPRD,autumn.peak,-1.394269116761404 +2040,27,GASNAT,autumn.peak,1.3278753492965754 +2040,27,CO2EMT,autumn.peak,3.394713330476695 +2040,27,GASPRD,autumn.evening,-1.8590255038874077 +2040,27,GASNAT,autumn.evening,1.7705004798927693 +2040,27,CO2EMT,autumn.evening,4.526284476845865 2040,28,OILCRD,winter.night,-64.31028942216543 2040,28,GASOLI,winter.night,49.09182398638582 2040,28,CO2EMT,winter.night,1080.020127700488 @@ -1595,30 +1595,30 @@ milestone_year,asset_id,commodity_id,time_slice,flow 2040,28,OILCRD,winter.evening,-36.748736938661594 2040,28,GASOLI,winter.evening,28.052470945543202 2040,28,CO2EMT,winter.evening,617.1543608019505 -2040,28,OILCRD,peak.night,-64.31028942216541 -2040,28,GASOLI,peak.night,49.09182398638581 -2040,28,CO2EMT,peak.night,1080.0201277004878 +2040,28,OILCRD,peak.night,-64.31028942216543 +2040,28,GASOLI,peak.night,49.09182398638582 +2040,28,CO2EMT,peak.night,1080.020127700488 2040,28,OILCRD,peak.day,-91.87184190566923 2040,28,GASOLI,peak.day,70.13117702722842 2040,28,CO2EMT,peak.day,1542.8858945990253 -2040,28,OILCRD,peak.peak,-27.561552483503796 -2040,28,GASOLI,peak.peak,21.03935304084259 -2040,28,CO2EMT,peak.peak,462.865766898537 -2040,28,OILCRD,peak.evening,-36.74873693866162 -2040,28,GASOLI,peak.evening,28.05247094554322 -2040,28,CO2EMT,peak.evening,617.1543608019508 -2040,28,OILCRD,summer.night,-64.31028942216543 -2040,28,GASOLI,summer.night,49.09182398638582 -2040,28,CO2EMT,summer.night,1080.020127700488 +2040,28,OILCRD,peak.peak,-27.5615524835038 +2040,28,GASOLI,peak.peak,21.039353040842595 +2040,28,CO2EMT,peak.peak,462.8657668985371 +2040,28,OILCRD,peak.evening,-36.748736938661594 +2040,28,GASOLI,peak.evening,28.052470945543202 +2040,28,CO2EMT,peak.evening,617.1543608019505 +2040,28,OILCRD,summer.night,-64.31028942216541 +2040,28,GASOLI,summer.night,49.09182398638581 +2040,28,CO2EMT,summer.night,1080.0201277004878 2040,28,OILCRD,summer.day,-91.87184190566923 2040,28,GASOLI,summer.day,70.13117702722842 2040,28,CO2EMT,summer.day,1542.8858945990253 -2040,28,OILCRD,summer.peak,-27.5615524835038 -2040,28,GASOLI,summer.peak,21.039353040842595 -2040,28,CO2EMT,summer.peak,462.8657668985371 -2040,28,OILCRD,summer.evening,-36.748736938661594 -2040,28,GASOLI,summer.evening,28.052470945543202 -2040,28,CO2EMT,summer.evening,617.1543608019505 +2040,28,OILCRD,summer.peak,-27.561552483503796 +2040,28,GASOLI,summer.peak,21.03935304084259 +2040,28,CO2EMT,summer.peak,462.865766898537 +2040,28,OILCRD,summer.evening,-36.74873693866162 +2040,28,GASOLI,summer.evening,28.05247094554322 +2040,28,CO2EMT,summer.evening,617.1543608019508 2040,28,OILCRD,autumn.night,-64.31028942216543 2040,28,GASOLI,autumn.night,49.09182398638582 2040,28,CO2EMT,autumn.night,1080.020127700488 @@ -1671,30 +1671,30 @@ milestone_year,asset_id,commodity_id,time_slice,flow 2040,30,CO2EMT,winter.peak,0.0 2040,30,GASPRD,winter.evening,0.0 2040,30,CO2EMT,winter.evening,0.0 -2040,30,GASPRD,peak.night,4.7093114997507906 -2040,30,CO2EMT,peak.night,24.078709698225794 -2040,30,GASPRD,peak.day,6.7275878475604385 -2040,30,CO2EMT,peak.day,34.398156664576526 -2040,30,GASPRD,peak.peak,2.018276347809647 -2040,30,CO2EMT,peak.peak,10.319446966350727 -2040,30,GASPRD,peak.evening,2.6910351519411435 -2040,30,CO2EMT,peak.evening,13.759262731875069 -2040,30,GASPRD,summer.night,20.11359186423627 -2040,30,CO2EMT,summer.night,102.84079520184005 -2040,30,GASPRD,summer.day,28.73370262378845 -2040,30,CO2EMT,summer.day,146.91542151543035 -2040,30,GASPRD,summer.peak,8.62011075955218 -2040,30,CO2EMT,summer.peak,44.0746263135903 -2040,30,GASPRD,summer.evening,11.493481104684088 -2040,30,CO2EMT,summer.evening,58.766168888249744 -2040,30,GASPRD,autumn.night,6.800105646398808 -2040,30,CO2EMT,autumn.night,34.768940170037105 -2040,30,GASPRD,autumn.day,9.714436624389927 -2040,30,CO2EMT,autumn.day,49.6699144605057 -2040,30,GASPRD,autumn.peak,2.914330977991119 -2040,30,CO2EMT,autumn.peak,14.900974290468591 -2040,30,GASPRD,autumn.evening,3.885774668407689 -2040,30,CO2EMT,autumn.evening,19.867965879568516 +2040,30,GASPRD,peak.night,0.0 +2040,30,CO2EMT,peak.night,0.0 +2040,30,GASPRD,peak.day,0.0 +2040,30,CO2EMT,peak.day,0.0 +2040,30,GASPRD,peak.peak,0.0 +2040,30,CO2EMT,peak.peak,0.0 +2040,30,GASPRD,peak.evening,0.0 +2040,30,CO2EMT,peak.evening,0.0 +2040,30,GASPRD,summer.night,11.833370356243531 +2040,30,CO2EMT,summer.night,60.50402263147318 +2040,30,GASPRD,summer.day,16.904814771449875 +2040,30,CO2EMT,summer.day,86.43431792642322 +2040,30,GASPRD,summer.peak,5.071444415206333 +2040,30,CO2EMT,summer.peak,25.930295294949982 +2040,30,GASPRD,summer.evening,6.761925941037193 +2040,30,CO2EMT,summer.evening,34.57372733652317 +2040,30,GASPRD,autumn.night,0.0 +2040,30,CO2EMT,autumn.night,0.0 +2040,30,GASPRD,autumn.day,0.0 +2040,30,CO2EMT,autumn.day,0.0 +2040,30,GASPRD,autumn.peak,0.0 +2040,30,CO2EMT,autumn.peak,0.0 +2040,30,GASPRD,autumn.evening,0.0 +2040,30,CO2EMT,autumn.evening,0.0 2040,31,BIOPRD,winter.night,186.91599597141777 2040,31,BIOPRD,winter.day,267.0228510215368 2040,31,BIOPRD,winter.peak,80.1068550501191 diff --git a/tests/data/circularity_npv/commodity_prices.csv b/tests/data/circularity_npv/commodity_prices.csv index ac0087c86..916264996 100644 --- a/tests/data/circularity_npv/commodity_prices.csv +++ b/tests/data/circularity_npv/commodity_prices.csv @@ -187,10 +187,10 @@ milestone_year,commodity_id,region_id,time_slice,price 2030,GASPRD,GBR,summer.day,5.695927420926498 2030,GASPRD,GBR,summer.peak,5.695927420926498 2030,GASPRD,GBR,summer.evening,5.695927420926498 -2030,GASPRD,GBR,autumn.night,8.448257530546275 -2030,GASPRD,GBR,autumn.day,8.448257530546275 -2030,GASPRD,GBR,autumn.peak,8.448257530546275 -2030,GASPRD,GBR,autumn.evening,8.448257530546275 +2030,GASPRD,GBR,autumn.night,8.448257530546277 +2030,GASPRD,GBR,autumn.day,8.448257530546277 +2030,GASPRD,GBR,autumn.peak,8.448257530546277 +2030,GASPRD,GBR,autumn.evening,8.448257530546277 2030,OILCRD,GBR,winter.night,5.695927420926498 2030,OILCRD,GBR,winter.day,5.695927420926498 2030,OILCRD,GBR,winter.peak,5.695927420926498 @@ -337,48 +337,48 @@ milestone_year,commodity_id,region_id,time_slice,price 2030,TPASKM,GBR,autumn.evening,30.833894962930774 2030,RSHEAT,GBR,winter.night,52.16456575149094 2030,RSHEAT,GBR,winter.day,62.05014150781135 -2030,RSHEAT,GBR,winter.peak,81.46109188104124 +2030,RSHEAT,GBR,winter.peak,81.46109188104126 2030,RSHEAT,GBR,winter.evening,58.49223845482817 -2030,RSHEAT,GBR,peak.night,65.09118000607619 -2030,RSHEAT,GBR,peak.day,63.760912933240284 -2030,RSHEAT,GBR,peak.peak,63.44465892036649 -2030,RSHEAT,GBR,peak.evening,64.28083618915869 -2030,RSHEAT,GBR,summer.night,50.658788493930096 +2030,RSHEAT,GBR,peak.night,65.0911800060762 +2030,RSHEAT,GBR,peak.day,63.76091293324029 +2030,RSHEAT,GBR,peak.peak,63.44465892036651 +2030,RSHEAT,GBR,peak.evening,64.2808361891587 +2030,RSHEAT,GBR,summer.night,50.65878849393011 2030,RSHEAT,GBR,summer.day,32.119896220460745 2030,RSHEAT,GBR,summer.peak,32.119896220460745 2030,RSHEAT,GBR,summer.evening,32.119896220460745 -2030,RSHEAT,GBR,autumn.night,59.06847156929996 +2030,RSHEAT,GBR,autumn.night,59.06847156929989 2030,RSHEAT,GBR,autumn.day,50.8262403129185 -2030,RSHEAT,GBR,autumn.peak,98.13878163369219 +2030,RSHEAT,GBR,autumn.peak,98.1387816336922 2030,RSHEAT,GBR,autumn.evening,48.89768270671781 2040,GASPRD,GBR,winter.night,5.785387816705663 2040,GASPRD,GBR,winter.day,5.785387816705663 2040,GASPRD,GBR,winter.peak,5.785387816705663 2040,GASPRD,GBR,winter.evening,5.785387816705663 -2040,GASPRD,GBR,peak.night,6.329611733271024 -2040,GASPRD,GBR,peak.day,6.329611733271024 -2040,GASPRD,GBR,peak.peak,6.329611733271024 -2040,GASPRD,GBR,peak.evening,6.329611733271024 -2040,GASPRD,GBR,summer.night,6.760897929308668 -2040,GASPRD,GBR,summer.day,6.760897929308668 -2040,GASPRD,GBR,summer.peak,6.760897929308668 -2040,GASPRD,GBR,summer.evening,6.760897929308668 -2040,GASPRD,GBR,autumn.night,6.447051412930846 -2040,GASPRD,GBR,autumn.day,6.447051412930846 -2040,GASPRD,GBR,autumn.peak,6.447051412930846 -2040,GASPRD,GBR,autumn.evening,6.447051412930846 +2040,GASPRD,GBR,peak.night,5.785387816705663 +2040,GASPRD,GBR,peak.day,5.785387816705663 +2040,GASPRD,GBR,peak.peak,5.785387816705663 +2040,GASPRD,GBR,peak.evening,5.785387816705663 +2040,GASPRD,GBR,summer.night,9.136143227234705 +2040,GASPRD,GBR,summer.day,9.136143227234705 +2040,GASPRD,GBR,summer.peak,9.136143227234705 +2040,GASPRD,GBR,summer.evening,9.136143227234705 +2040,GASPRD,GBR,autumn.night,5.785387816705663 +2040,GASPRD,GBR,autumn.day,5.785387816705663 +2040,GASPRD,GBR,autumn.peak,5.785387816705663 +2040,GASPRD,GBR,autumn.evening,5.785387816705663 2040,OILCRD,GBR,winter.night,5.785387816705664 2040,OILCRD,GBR,winter.day,5.785387816705664 2040,OILCRD,GBR,winter.peak,5.785387816705664 2040,OILCRD,GBR,winter.evening,5.785387816705664 -2040,OILCRD,GBR,peak.night,5.785387816705663 -2040,OILCRD,GBR,peak.day,5.785387816705663 -2040,OILCRD,GBR,peak.peak,5.785387816705663 -2040,OILCRD,GBR,peak.evening,5.785387816705663 -2040,OILCRD,GBR,summer.night,5.785387816705664 -2040,OILCRD,GBR,summer.day,5.785387816705664 -2040,OILCRD,GBR,summer.peak,5.785387816705664 -2040,OILCRD,GBR,summer.evening,5.785387816705664 +2040,OILCRD,GBR,peak.night,5.785387816705664 +2040,OILCRD,GBR,peak.day,5.785387816705664 +2040,OILCRD,GBR,peak.peak,5.785387816705664 +2040,OILCRD,GBR,peak.evening,5.785387816705664 +2040,OILCRD,GBR,summer.night,5.785387816705663 +2040,OILCRD,GBR,summer.day,5.785387816705663 +2040,OILCRD,GBR,summer.peak,5.785387816705663 +2040,OILCRD,GBR,summer.evening,5.785387816705663 2040,OILCRD,GBR,autumn.night,5.785387816705664 2040,OILCRD,GBR,autumn.day,5.785387816705664 2040,OILCRD,GBR,autumn.peak,5.785387816705664 @@ -399,22 +399,22 @@ milestone_year,commodity_id,region_id,time_slice,price 2040,BIOPRD,GBR,autumn.day,0.8586931712935483 2040,BIOPRD,GBR,autumn.peak,0.8586931712935483 2040,BIOPRD,GBR,autumn.evening,0.8586931712935483 -2040,GASNAT,GBR,winter.night,8.69378001598546 -2040,GASNAT,GBR,winter.day,8.69378001598546 -2040,GASNAT,GBR,winter.peak,8.69378001598546 -2040,GASNAT,GBR,winter.evening,8.69378001598546 -2040,GASNAT,GBR,peak.night,9.26521512837909 -2040,GASNAT,GBR,peak.day,9.26521512837909 -2040,GASNAT,GBR,peak.peak,9.26521512837909 -2040,GASNAT,GBR,peak.evening,9.26521512837909 -2040,GASNAT,GBR,summer.night,9.718065634218616 -2040,GASNAT,GBR,summer.day,9.718065634218616 -2040,GASNAT,GBR,summer.peak,9.718065634218616 -2040,GASNAT,GBR,summer.evening,9.718065634218616 -2040,GASNAT,GBR,autumn.night,9.388526792021903 -2040,GASNAT,GBR,autumn.day,9.388526792021903 -2040,GASNAT,GBR,autumn.peak,9.388526792021903 -2040,GASNAT,GBR,autumn.evening,9.388526792021903 +2040,GASNAT,GBR,winter.night,9.78397612865817 +2040,GASNAT,GBR,winter.day,9.78397612865817 +2040,GASNAT,GBR,winter.peak,9.78397612865817 +2040,GASNAT,GBR,winter.evening,9.78397612865817 +2040,GASNAT,GBR,peak.night,9.78397612865817 +2040,GASNAT,GBR,peak.day,9.78397612865817 +2040,GASNAT,GBR,peak.peak,9.78397612865817 +2040,GASNAT,GBR,peak.evening,9.78397612865817 +2040,GASNAT,GBR,summer.night,13.302269309713664 +2040,GASNAT,GBR,summer.day,13.302269309713664 +2040,GASNAT,GBR,summer.peak,13.302269309713664 +2040,GASNAT,GBR,summer.evening,13.302269309713664 +2040,GASNAT,GBR,autumn.night,9.783976128658171 +2040,GASNAT,GBR,autumn.day,9.783976128658171 +2040,GASNAT,GBR,autumn.peak,9.783976128658171 +2040,GASNAT,GBR,autumn.evening,9.783976128658171 2040,GASOLI,GBR,winter.night,11.020289470145302 2040,GASOLI,GBR,winter.day,11.020289470145302 2040,GASOLI,GBR,winter.peak,11.020289470145302 @@ -447,54 +447,54 @@ milestone_year,commodity_id,region_id,time_slice,price 2040,BIOPEL,GBR,autumn.day,2.0521757118191575 2040,BIOPEL,GBR,autumn.peak,2.0521757118191575 2040,BIOPEL,GBR,autumn.evening,2.0521757118191575 -2040,ELCTRI,GBR,winter.night,12.674145938031948 -2040,ELCTRI,GBR,winter.day,14.339976439520271 -2040,ELCTRI,GBR,winter.peak,14.92481876929989 -2040,ELCTRI,GBR,winter.evening,15.46948631976746 -2040,ELCTRI,GBR,peak.night,12.674145938031948 -2040,ELCTRI,GBR,peak.day,14.834682567014008 -2040,ELCTRI,GBR,peak.peak,16.2082588450763 -2040,ELCTRI,GBR,peak.evening,21.465272750980397 -2040,ELCTRI,GBR,summer.night,12.67414593803195 -2040,ELCTRI,GBR,summer.day,18.466340027583783 -2040,ELCTRI,GBR,summer.peak,18.982342291193035 -2040,ELCTRI,GBR,summer.evening,27.90957856268472 -2040,ELCTRI,GBR,autumn.night,12.674145938031948 -2040,ELCTRI,GBR,autumn.day,16.307136738382315 -2040,ELCTRI,GBR,autumn.peak,17.878218828227617 -2040,ELCTRI,GBR,autumn.evening,18.647279983667556 -2040,H2YPRD,GBR,winter.night,10.559756733182441 -2040,H2YPRD,GBR,winter.day,10.559756733182441 -2040,H2YPRD,GBR,winter.peak,10.559756733182441 -2040,H2YPRD,GBR,winter.evening,10.559756733182441 -2040,H2YPRD,GBR,peak.night,10.559756733182441 -2040,H2YPRD,GBR,peak.day,10.559756733182441 -2040,H2YPRD,GBR,peak.peak,10.559756733182441 -2040,H2YPRD,GBR,peak.evening,10.559756733182441 -2040,H2YPRD,GBR,summer.night,20.681654985604197 -2040,H2YPRD,GBR,summer.day,20.681654985604197 -2040,H2YPRD,GBR,summer.peak,20.681654985604197 -2040,H2YPRD,GBR,summer.evening,20.681654985604197 -2040,H2YPRD,GBR,autumn.night,10.559756733182441 -2040,H2YPRD,GBR,autumn.day,10.559756733182441 -2040,H2YPRD,GBR,autumn.peak,10.559756733182441 -2040,H2YPRD,GBR,autumn.evening,10.559756733182441 -2040,TPASKM,GBR,winter.night,22.484745428933703 -2040,TPASKM,GBR,winter.day,23.908007629474238 -2040,TPASKM,GBR,winter.peak,24.407688707775844 -2040,TPASKM,GBR,winter.evening,24.873045018486266 -2040,TPASKM,GBR,peak.night,22.484745428933703 -2040,TPASKM,GBR,peak.day,24.330677601604386 -2040,TPASKM,GBR,peak.peak,25.504241895437747 -2040,TPASKM,GBR,peak.evening,29.995760794452032 -2040,TPASKM,GBR,summer.night,22.484745428933703 -2040,TPASKM,GBR,summer.day,27.43351476560274 -2040,TPASKM,GBR,summer.peak,27.874379857538717 -2040,TPASKM,GBR,summer.evening,35.50168523414014 -2040,TPASKM,GBR,autumn.night,22.484745428933703 -2040,TPASKM,GBR,autumn.day,25.588721779727173 -2040,TPASKM,GBR,autumn.peak,26.93103226715387 -2040,TPASKM,GBR,autumn.evening,27.588107324588435 +2040,ELCTRI,GBR,winter.night,13.696824265811934 +2040,ELCTRI,GBR,winter.day,13.696824265811934 +2040,ELCTRI,GBR,winter.peak,13.696824265811935 +2040,ELCTRI,GBR,winter.evening,13.696824265811934 +2040,ELCTRI,GBR,peak.night,13.696824265811934 +2040,ELCTRI,GBR,peak.day,13.696824265811934 +2040,ELCTRI,GBR,peak.peak,15.25997363701509 +2040,ELCTRI,GBR,peak.evening,22.766764933751844 +2040,ELCTRI,GBR,summer.night,13.696824265811935 +2040,ELCTRI,GBR,summer.day,21.457136597887633 +2040,ELCTRI,GBR,summer.peak,21.83127194563093 +2040,ELCTRI,GBR,summer.evening,31.158016169523705 +2040,ELCTRI,GBR,autumn.night,13.696824265811935 +2040,ELCTRI,GBR,autumn.day,14.846732223243713 +2040,ELCTRI,GBR,autumn.peak,18.51198227578117 +2040,ELCTRI,GBR,autumn.evening,20.066475465377646 +2040,H2YPRD,GBR,winter.night,13.488361683311915 +2040,H2YPRD,GBR,winter.day,13.488361683311915 +2040,H2YPRD,GBR,winter.peak,13.488361683311915 +2040,H2YPRD,GBR,winter.evening,13.488361683311915 +2040,H2YPRD,GBR,peak.night,13.488362136362374 +2040,H2YPRD,GBR,peak.day,13.488362136362374 +2040,H2YPRD,GBR,peak.peak,13.488362136362374 +2040,H2YPRD,GBR,peak.evening,13.488362136362374 +2040,H2YPRD,GBR,summer.night,13.488361641048124 +2040,H2YPRD,GBR,summer.day,13.488361641048124 +2040,H2YPRD,GBR,summer.peak,13.488361641048124 +2040,H2YPRD,GBR,summer.evening,13.488361641048124 +2040,H2YPRD,GBR,autumn.night,13.488361641048124 +2040,H2YPRD,GBR,autumn.day,13.488361641048124 +2040,H2YPRD,GBR,autumn.peak,13.488361641048124 +2040,H2YPRD,GBR,autumn.evening,13.488361641048124 +2040,TPASKM,GBR,winter.night,23.35850743889859 +2040,TPASKM,GBR,winter.day,23.35850743889859 +2040,TPASKM,GBR,winter.peak,23.358507438898595 +2040,TPASKM,GBR,winter.evening,23.35850743889859 +2040,TPASKM,GBR,peak.night,23.35850743889859 +2040,TPASKM,GBR,peak.day,23.35850743889859 +2040,TPASKM,GBR,peak.peak,24.69404032285314 +2040,TPASKM,GBR,peak.evening,31.10773744896918 +2040,TPASKM,GBR,summer.night,23.3585074388986 +2040,TPASKM,GBR,summer.day,29.98880937944049 +2040,TPASKM,GBR,summer.peak,30.308465369562757 +2040,TPASKM,GBR,summer.evening,38.277104733601554 +2040,TPASKM,GBR,autumn.night,23.3585074388986 +2040,TPASKM,GBR,autumn.day,24.34097265877012 +2040,TPASKM,GBR,autumn.peak,27.472510861873634 +2040,TPASKM,GBR,autumn.evening,28.800648025752956 2040,RSHEAT,GBR,winter.night,31.73564906753376 2040,RSHEAT,GBR,winter.day,31.73564906753376 2040,RSHEAT,GBR,winter.peak,31.73564906753376