Skip to content

Commit 7779d41

Browse files
committed
Include fixed asset duals as debug CSV file
1 parent fde6126 commit 7779d41

2 files changed

Lines changed: 279 additions & 3 deletions

File tree

src/output.rs

Lines changed: 150 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,9 @@ const COMMODITY_BALANCE_DUALS_FILE_NAME: &str = "debug_commodity_balance_duals.c
3232
/// The output file name for capacity duals
3333
const CAPACITY_DUALS_FILE_NAME: &str = "debug_capacity_duals.csv";
3434

35+
/// The output file name for fixed asset duals
36+
const FIXED_ASSET_DUALS_FILE_NAME: &str = "debug_fixed_asset_duals.csv";
37+
3538
/// Get the model name from the specified directory path
3639
pub fn get_output_dir(model_dir: &Path) -> Result<PathBuf> {
3740
// Get the model name from the dir path. This ends up being convoluted because we need to check
@@ -123,10 +126,21 @@ struct CommodityBalanceDualsRow {
123126
value: f64,
124127
}
125128

129+
#[derive(Serialize, Deserialize, Debug, PartialEq)]
130+
struct FixedAssetDualsRow {
131+
pac: CommodityID,
132+
pac_flow: f64,
133+
commodity_id: CommodityID,
134+
commodity_flow: f64,
135+
time_slice: TimeSliceID,
136+
value: f64,
137+
}
138+
126139
/// For writing extra debug information about the model
127140
struct DebugDataWriter {
128141
commodity_balance_duals_writer: csv::Writer<File>,
129142
capacity_duals_writer: csv::Writer<File>,
143+
fixed_asset_duals_writer: csv::Writer<File>,
130144
}
131145

132146
impl DebugDataWriter {
@@ -144,6 +158,7 @@ impl DebugDataWriter {
144158
Ok(Self {
145159
commodity_balance_duals_writer: new_writer(COMMODITY_BALANCE_DUALS_FILE_NAME)?,
146160
capacity_duals_writer: new_writer(CAPACITY_DUALS_FILE_NAME)?,
161+
fixed_asset_duals_writer: new_writer(FIXED_ASSET_DUALS_FILE_NAME)?,
147162
})
148163
}
149164

@@ -158,6 +173,7 @@ impl DebugDataWriter {
158173
milestone_year,
159174
solution.iter_commodity_balance_duals(),
160175
)?;
176+
self.write_fixed_asset_duals(milestone_year, solution.iter_fixed_asset_duals(), assets)?;
161177
Ok(())
162178
}
163179

@@ -202,10 +218,40 @@ impl DebugDataWriter {
202218
Ok(())
203219
}
204220

221+
fn write_fixed_asset_duals<'a, I>(
222+
&mut self,
223+
milestone_year: u32,
224+
iter: I,
225+
assets: &AssetPool,
226+
) -> Result<()>
227+
where
228+
I: Iterator<Item = (AssetID, &'a CommodityID, &'a TimeSliceID, f64)>,
229+
{
230+
for (asset_id, commodity_id, time_slice, value) in iter {
231+
let asset = assets.get(asset_id).unwrap();
232+
let asset_row = AssetRow::new(milestone_year, asset);
233+
let pac1 = asset.iter_pacs().next().unwrap();
234+
let commodity_flow = asset.get_flow(commodity_id).unwrap().flow;
235+
let dual_row = FixedAssetDualsRow {
236+
pac: pac1.commodity.id.clone(),
237+
pac_flow: pac1.flow,
238+
commodity_id: commodity_id.clone(),
239+
commodity_flow,
240+
time_slice: time_slice.clone(),
241+
value,
242+
};
243+
self.fixed_asset_duals_writer
244+
.serialize((asset_row, dual_row))?;
245+
}
246+
247+
Ok(())
248+
}
249+
205250
/// Flush the underlying streams
206251
fn flush(&mut self) -> Result<()> {
207252
self.commodity_balance_duals_writer.flush()?;
208253
self.capacity_duals_writer.flush()?;
254+
self.fixed_asset_duals_writer.flush()?;
209255

210256
Ok(())
211257
}
@@ -330,12 +376,20 @@ impl DataWriter {
330376
#[cfg(test)]
331377
mod tests {
332378
use super::*;
333-
334-
use crate::fixture::{asset, assets, commodity_id, region_id, time_slice};
335-
use crate::time_slice::TimeSliceID;
379+
use crate::commodity::{Commodity, CommodityCostMap, CommodityType, DemandMap};
380+
use crate::fixture::{
381+
asset, assets, commodity_id, process_parameter_map, region_id, region_ids, time_slice,
382+
};
383+
use crate::process::{
384+
FlowType, Process, ProcessEnergyLimitsMap, ProcessFlow, ProcessParameterMap,
385+
};
386+
use crate::time_slice::{TimeSliceID, TimeSliceLevel};
387+
use indexmap::indexmap;
336388
use itertools::{assert_equal, Itertools};
337389
use rstest::rstest;
390+
use std::collections::HashSet;
338391
use std::iter;
392+
use std::rc::Rc;
339393
use tempfile::tempdir;
340394

341395
#[rstest]
@@ -498,4 +552,97 @@ mod tests {
498552
.unwrap();
499553
assert_equal(records, iter::once(expected));
500554
}
555+
556+
fn create_process_flow(commodity: Rc<Commodity>, flow: f64, is_pac: bool) -> ProcessFlow {
557+
ProcessFlow {
558+
commodity,
559+
flow,
560+
flow_type: FlowType::Fixed,
561+
flow_cost: 0.0,
562+
is_pac,
563+
}
564+
}
565+
566+
#[rstest]
567+
fn test_write_fixed_asset_duals(
568+
process_parameter_map: ProcessParameterMap,
569+
region_id: RegionID,
570+
region_ids: HashSet<RegionID>,
571+
time_slice: TimeSliceID,
572+
) {
573+
let commodity1 = Rc::new(Commodity {
574+
id: "commodity1".into(),
575+
description: "A commodity".into(),
576+
kind: CommodityType::ServiceDemand,
577+
demand: DemandMap::default(),
578+
time_slice_level: TimeSliceLevel::Annual,
579+
costs: CommodityCostMap::default(),
580+
});
581+
let commodity2 = Rc::new(Commodity {
582+
id: "commodity2".into(),
583+
description: "Another commodity".into(),
584+
kind: CommodityType::ServiceDemand,
585+
demand: DemandMap::default(),
586+
time_slice_level: TimeSliceLevel::Annual,
587+
costs: CommodityCostMap::default(),
588+
});
589+
let flows = indexmap! {
590+
commodity1.id.clone() => create_process_flow(commodity1.clone(), 1.0, true),
591+
commodity2.id.clone() => create_process_flow(commodity2.clone(), 1.0, false),
592+
};
593+
let process = Process {
594+
id: "process1".into(),
595+
description: "Description".into(),
596+
years: vec![2010, 2020],
597+
energy_limits: ProcessEnergyLimitsMap::new(),
598+
flows: iter::once(((region_id.clone(), 2015), flows)).collect(),
599+
parameters: process_parameter_map,
600+
regions: region_ids,
601+
};
602+
let agent_id = "agent1".into();
603+
let commission_year = 2015;
604+
let asset = Asset::new(agent_id, process.into(), region_id, 2.0, commission_year).unwrap();
605+
let year = asset.commission_year;
606+
let mut assets = AssetPool::new(iter::once(asset).collect());
607+
assets.commission_new(year);
608+
609+
let milestone_year = 2020;
610+
let value = 0.5;
611+
let dir = tempdir().unwrap();
612+
613+
// Write fixed asset dual
614+
{
615+
let mut writer = DebugDataWriter::create(dir.path()).unwrap();
616+
writer
617+
.write_fixed_asset_duals(
618+
milestone_year,
619+
iter::once((
620+
assets.iter().next().unwrap().id,
621+
&commodity2.id,
622+
&time_slice,
623+
value,
624+
)),
625+
&assets,
626+
)
627+
.unwrap();
628+
writer.flush().unwrap();
629+
}
630+
631+
// Read back and compare
632+
let expected = FixedAssetDualsRow {
633+
pac: commodity1.id.clone(),
634+
pac_flow: 1.0,
635+
commodity_id: commodity2.id.clone(),
636+
commodity_flow: 1.0,
637+
time_slice,
638+
value,
639+
};
640+
let records: Vec<FixedAssetDualsRow> =
641+
csv::Reader::from_path(dir.path().join(FIXED_ASSET_DUALS_FILE_NAME))
642+
.unwrap()
643+
.into_deserialize()
644+
.try_collect()
645+
.unwrap();
646+
assert_equal(records, iter::once(expected));
647+
}
501648
}
Lines changed: 129 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,129 @@
1+
milestone_year,process_id,region_id,agent_id,commission_year,pac,pac_flow,commodity_id,commodity_flow,time_slice,value
2+
2020,GASDRV,GBR,A0_GEX,2020,GASPRD,1.0,CO2EMT,5.113,winter.night,0.20452
3+
2020,GASDRV,GBR,A0_GEX,2020,GASPRD,1.0,CO2EMT,5.113,winter.day,0.20452
4+
2020,GASDRV,GBR,A0_GEX,2020,GASPRD,1.0,CO2EMT,5.113,winter.peak,0.20452
5+
2020,GASDRV,GBR,A0_GEX,2020,GASPRD,1.0,CO2EMT,5.113,winter.evening,0.20452
6+
2020,GASDRV,GBR,A0_GEX,2020,GASPRD,1.0,CO2EMT,5.113,peak.night,0.20452
7+
2020,GASDRV,GBR,A0_GEX,2020,GASPRD,1.0,CO2EMT,5.113,peak.day,0.20452
8+
2020,GASDRV,GBR,A0_GEX,2020,GASPRD,1.0,CO2EMT,5.113,peak.peak,0.20452
9+
2020,GASDRV,GBR,A0_GEX,2020,GASPRD,1.0,CO2EMT,5.113,peak.evening,0.20452
10+
2020,GASDRV,GBR,A0_GEX,2020,GASPRD,1.0,CO2EMT,5.113,summer.night,0.20452
11+
2020,GASDRV,GBR,A0_GEX,2020,GASPRD,1.0,CO2EMT,5.113,summer.day,0.20452
12+
2020,GASDRV,GBR,A0_GEX,2020,GASPRD,1.0,CO2EMT,5.113,summer.peak,0.20452
13+
2020,GASDRV,GBR,A0_GEX,2020,GASPRD,1.0,CO2EMT,5.113,summer.evening,0.20452
14+
2020,GASDRV,GBR,A0_GEX,2020,GASPRD,1.0,CO2EMT,5.113,autumn.night,0.20452
15+
2020,GASDRV,GBR,A0_GEX,2020,GASPRD,1.0,CO2EMT,5.113,autumn.day,0.20452
16+
2020,GASDRV,GBR,A0_GEX,2020,GASPRD,1.0,CO2EMT,5.113,autumn.peak,0.20452
17+
2020,GASDRV,GBR,A0_GEX,2020,GASPRD,1.0,CO2EMT,5.113,autumn.evening,0.20452
18+
2020,GASPRC,GBR,A0_GPR,2020,GASNAT,1.0,GASPRD,-1.05,winter.night,2.314746
19+
2020,GASPRC,GBR,A0_GPR,2020,GASNAT,1.0,CO2EMT,2.5565,winter.night,0.10226
20+
2020,GASPRC,GBR,A0_GPR,2020,GASNAT,1.0,GASPRD,-1.05,winter.day,2.314746
21+
2020,GASPRC,GBR,A0_GPR,2020,GASNAT,1.0,CO2EMT,2.5565,winter.day,0.10226
22+
2020,GASPRC,GBR,A0_GPR,2020,GASNAT,1.0,GASPRD,-1.05,winter.peak,2.314746
23+
2020,GASPRC,GBR,A0_GPR,2020,GASNAT,1.0,CO2EMT,2.5565,winter.peak,0.10226
24+
2020,GASPRC,GBR,A0_GPR,2020,GASNAT,1.0,GASPRD,-1.05,winter.evening,2.314746
25+
2020,GASPRC,GBR,A0_GPR,2020,GASNAT,1.0,CO2EMT,2.5565,winter.evening,0.10226
26+
2020,GASPRC,GBR,A0_GPR,2020,GASNAT,1.0,GASPRD,-1.05,peak.night,2.314746
27+
2020,GASPRC,GBR,A0_GPR,2020,GASNAT,1.0,CO2EMT,2.5565,peak.night,0.10226
28+
2020,GASPRC,GBR,A0_GPR,2020,GASNAT,1.0,GASPRD,-1.05,peak.day,2.314746
29+
2020,GASPRC,GBR,A0_GPR,2020,GASNAT,1.0,CO2EMT,2.5565,peak.day,0.10226
30+
2020,GASPRC,GBR,A0_GPR,2020,GASNAT,1.0,GASPRD,-1.05,peak.peak,2.314746
31+
2020,GASPRC,GBR,A0_GPR,2020,GASNAT,1.0,CO2EMT,2.5565,peak.peak,0.10226
32+
2020,GASPRC,GBR,A0_GPR,2020,GASNAT,1.0,GASPRD,-1.05,peak.evening,2.314746
33+
2020,GASPRC,GBR,A0_GPR,2020,GASNAT,1.0,CO2EMT,2.5565,peak.evening,0.10226
34+
2020,GASPRC,GBR,A0_GPR,2020,GASNAT,1.0,GASPRD,-1.05,summer.night,2.314746
35+
2020,GASPRC,GBR,A0_GPR,2020,GASNAT,1.0,CO2EMT,2.5565,summer.night,0.10226
36+
2020,GASPRC,GBR,A0_GPR,2020,GASNAT,1.0,GASPRD,-1.05,summer.day,2.314746
37+
2020,GASPRC,GBR,A0_GPR,2020,GASNAT,1.0,CO2EMT,2.5565,summer.day,0.10226
38+
2020,GASPRC,GBR,A0_GPR,2020,GASNAT,1.0,GASPRD,-1.05,summer.peak,2.314746
39+
2020,GASPRC,GBR,A0_GPR,2020,GASNAT,1.0,CO2EMT,2.5565,summer.peak,0.10226
40+
2020,GASPRC,GBR,A0_GPR,2020,GASNAT,1.0,GASPRD,-1.05,summer.evening,2.314746
41+
2020,GASPRC,GBR,A0_GPR,2020,GASNAT,1.0,CO2EMT,2.5565,summer.evening,0.10226
42+
2020,GASPRC,GBR,A0_GPR,2020,GASNAT,1.0,GASPRD,-1.05,autumn.night,2.314746
43+
2020,GASPRC,GBR,A0_GPR,2020,GASNAT,1.0,CO2EMT,2.5565,autumn.night,0.10226
44+
2020,GASPRC,GBR,A0_GPR,2020,GASNAT,1.0,GASPRD,-1.05,autumn.day,2.314746
45+
2020,GASPRC,GBR,A0_GPR,2020,GASNAT,1.0,CO2EMT,2.5565,autumn.day,0.10226
46+
2020,GASPRC,GBR,A0_GPR,2020,GASNAT,1.0,GASPRD,-1.05,autumn.peak,2.314746
47+
2020,GASPRC,GBR,A0_GPR,2020,GASNAT,1.0,CO2EMT,2.5565,autumn.peak,0.10226
48+
2020,GASPRC,GBR,A0_GPR,2020,GASNAT,1.0,GASPRD,-1.05,autumn.evening,2.314746
49+
2020,GASPRC,GBR,A0_GPR,2020,GASNAT,1.0,CO2EMT,2.5565,autumn.evening,0.10226
50+
2020,GASCGT,GBR,A0_ELC,2020,ELCTRI,1.0,GASNAT,-1.5,winter.night,4.375508999999999
51+
2020,GASCGT,GBR,A0_ELC,2020,ELCTRI,1.0,CO2EMT,76.695,winter.night,3.0678
52+
2020,GASCGT,GBR,A0_ELC,2020,ELCTRI,1.0,GASNAT,-1.5,winter.day,4.375508999999999
53+
2020,GASCGT,GBR,A0_ELC,2020,ELCTRI,1.0,CO2EMT,76.695,winter.day,3.0678
54+
2020,GASCGT,GBR,A0_ELC,2020,ELCTRI,1.0,GASNAT,-1.5,winter.peak,4.375508999999999
55+
2020,GASCGT,GBR,A0_ELC,2020,ELCTRI,1.0,CO2EMT,76.695,winter.peak,3.0678
56+
2020,GASCGT,GBR,A0_ELC,2020,ELCTRI,1.0,GASNAT,-1.5,winter.evening,4.375508999999999
57+
2020,GASCGT,GBR,A0_ELC,2020,ELCTRI,1.0,CO2EMT,76.695,winter.evening,3.0678
58+
2020,GASCGT,GBR,A0_ELC,2020,ELCTRI,1.0,GASNAT,-1.5,peak.night,4.375508999999999
59+
2020,GASCGT,GBR,A0_ELC,2020,ELCTRI,1.0,CO2EMT,76.695,peak.night,3.0678
60+
2020,GASCGT,GBR,A0_ELC,2020,ELCTRI,1.0,GASNAT,-1.5,peak.day,4.375508999999999
61+
2020,GASCGT,GBR,A0_ELC,2020,ELCTRI,1.0,CO2EMT,76.695,peak.day,3.0678
62+
2020,GASCGT,GBR,A0_ELC,2020,ELCTRI,1.0,GASNAT,-1.5,peak.peak,4.375508999999999
63+
2020,GASCGT,GBR,A0_ELC,2020,ELCTRI,1.0,CO2EMT,76.695,peak.peak,3.0678
64+
2020,GASCGT,GBR,A0_ELC,2020,ELCTRI,1.0,GASNAT,-1.5,peak.evening,4.375508999999999
65+
2020,GASCGT,GBR,A0_ELC,2020,ELCTRI,1.0,CO2EMT,76.695,peak.evening,3.0678
66+
2020,GASCGT,GBR,A0_ELC,2020,ELCTRI,1.0,GASNAT,-1.5,summer.night,4.375509
67+
2020,GASCGT,GBR,A0_ELC,2020,ELCTRI,1.0,CO2EMT,76.695,summer.night,3.0678
68+
2020,GASCGT,GBR,A0_ELC,2020,ELCTRI,1.0,GASNAT,-1.5,summer.day,4.375508999999999
69+
2020,GASCGT,GBR,A0_ELC,2020,ELCTRI,1.0,CO2EMT,76.695,summer.day,3.0678
70+
2020,GASCGT,GBR,A0_ELC,2020,ELCTRI,1.0,GASNAT,-1.5,summer.peak,4.375508999999999
71+
2020,GASCGT,GBR,A0_ELC,2020,ELCTRI,1.0,CO2EMT,76.695,summer.peak,3.0678
72+
2020,GASCGT,GBR,A0_ELC,2020,ELCTRI,1.0,GASNAT,-1.5,summer.evening,4.375508999999999
73+
2020,GASCGT,GBR,A0_ELC,2020,ELCTRI,1.0,CO2EMT,76.695,summer.evening,3.0678
74+
2020,GASCGT,GBR,A0_ELC,2020,ELCTRI,1.0,GASNAT,-1.5,autumn.night,4.375508999999999
75+
2020,GASCGT,GBR,A0_ELC,2020,ELCTRI,1.0,CO2EMT,76.695,autumn.night,3.0678
76+
2020,GASCGT,GBR,A0_ELC,2020,ELCTRI,1.0,GASNAT,-1.5,autumn.day,4.375508999999999
77+
2020,GASCGT,GBR,A0_ELC,2020,ELCTRI,1.0,CO2EMT,76.695,autumn.day,3.0678
78+
2020,GASCGT,GBR,A0_ELC,2020,ELCTRI,1.0,GASNAT,-1.5,autumn.peak,4.375508999999999
79+
2020,GASCGT,GBR,A0_ELC,2020,ELCTRI,1.0,CO2EMT,76.695,autumn.peak,3.0678
80+
2020,GASCGT,GBR,A0_ELC,2020,ELCTRI,1.0,GASNAT,-1.5,autumn.evening,4.375508999999999
81+
2020,GASCGT,GBR,A0_ELC,2020,ELCTRI,1.0,CO2EMT,76.695,autumn.evening,3.0678
82+
2020,RGASBR,GBR,A0_RES,2020,RSHEAT,1.0,GASNAT,-1.15,winter.night,3.3545568999999995
83+
2020,RGASBR,GBR,A0_RES,2020,RSHEAT,1.0,CO2EMT,58.7995,winter.night,2.35198
84+
2020,RGASBR,GBR,A0_RES,2020,RSHEAT,1.0,GASNAT,-1.15,winter.day,3.3545568999999995
85+
2020,RGASBR,GBR,A0_RES,2020,RSHEAT,1.0,CO2EMT,58.7995,winter.day,2.35198
86+
2020,RGASBR,GBR,A0_RES,2020,RSHEAT,1.0,GASNAT,-1.15,winter.peak,3.3545568999999995
87+
2020,RGASBR,GBR,A0_RES,2020,RSHEAT,1.0,CO2EMT,58.7995,winter.peak,2.35198
88+
2020,RGASBR,GBR,A0_RES,2020,RSHEAT,1.0,GASNAT,-1.15,winter.evening,3.3545568999999995
89+
2020,RGASBR,GBR,A0_RES,2020,RSHEAT,1.0,CO2EMT,58.7995,winter.evening,2.35198
90+
2020,RGASBR,GBR,A0_RES,2020,RSHEAT,1.0,GASNAT,-1.15,peak.night,3.3545568999999995
91+
2020,RGASBR,GBR,A0_RES,2020,RSHEAT,1.0,CO2EMT,58.7995,peak.night,2.35198
92+
2020,RGASBR,GBR,A0_RES,2020,RSHEAT,1.0,GASNAT,-1.15,peak.day,3.3545568999999995
93+
2020,RGASBR,GBR,A0_RES,2020,RSHEAT,1.0,CO2EMT,58.7995,peak.day,2.35198
94+
2020,RGASBR,GBR,A0_RES,2020,RSHEAT,1.0,GASNAT,-1.15,peak.peak,3.3545568999999995
95+
2020,RGASBR,GBR,A0_RES,2020,RSHEAT,1.0,CO2EMT,58.7995,peak.peak,2.35198
96+
2020,RGASBR,GBR,A0_RES,2020,RSHEAT,1.0,GASNAT,-1.15,peak.evening,3.3545568999999995
97+
2020,RGASBR,GBR,A0_RES,2020,RSHEAT,1.0,CO2EMT,58.7995,peak.evening,2.35198
98+
2020,RGASBR,GBR,A0_RES,2020,RSHEAT,1.0,GASNAT,-1.15,summer.night,3.3545568999999995
99+
2020,RGASBR,GBR,A0_RES,2020,RSHEAT,1.0,CO2EMT,58.7995,summer.night,2.35198
100+
2020,RGASBR,GBR,A0_RES,2020,RSHEAT,1.0,GASNAT,-1.15,summer.day,3.3545568999999995
101+
2020,RGASBR,GBR,A0_RES,2020,RSHEAT,1.0,CO2EMT,58.7995,summer.day,2.35198
102+
2020,RGASBR,GBR,A0_RES,2020,RSHEAT,1.0,GASNAT,-1.15,summer.peak,3.3545568999999995
103+
2020,RGASBR,GBR,A0_RES,2020,RSHEAT,1.0,CO2EMT,58.7995,summer.peak,2.35198
104+
2020,RGASBR,GBR,A0_RES,2020,RSHEAT,1.0,GASNAT,-1.15,summer.evening,3.3545568999999995
105+
2020,RGASBR,GBR,A0_RES,2020,RSHEAT,1.0,CO2EMT,58.7995,summer.evening,2.35198
106+
2020,RGASBR,GBR,A0_RES,2020,RSHEAT,1.0,GASNAT,-1.15,autumn.night,3.3545568999999995
107+
2020,RGASBR,GBR,A0_RES,2020,RSHEAT,1.0,CO2EMT,58.7995,autumn.night,2.35198
108+
2020,RGASBR,GBR,A0_RES,2020,RSHEAT,1.0,GASNAT,-1.15,autumn.day,3.3545568999999995
109+
2020,RGASBR,GBR,A0_RES,2020,RSHEAT,1.0,CO2EMT,58.7995,autumn.day,2.35198
110+
2020,RGASBR,GBR,A0_RES,2020,RSHEAT,1.0,GASNAT,-1.15,autumn.peak,3.3545568999999995
111+
2020,RGASBR,GBR,A0_RES,2020,RSHEAT,1.0,CO2EMT,58.7995,autumn.peak,2.35198
112+
2020,RGASBR,GBR,A0_RES,2020,RSHEAT,1.0,GASNAT,-1.15,autumn.evening,3.3545568999999995
113+
2020,RGASBR,GBR,A0_RES,2020,RSHEAT,1.0,CO2EMT,58.7995,autumn.evening,2.35198
114+
2020,RELCHP,GBR,A0_RES,2020,ELCTRI,-0.33,RSHEAT,1.0,winter.night,-5.8665369
115+
2020,RELCHP,GBR,A0_RES,2020,ELCTRI,-0.33,RSHEAT,1.0,winter.day,-5.8665369
116+
2020,RELCHP,GBR,A0_RES,2020,ELCTRI,-0.33,RSHEAT,1.0,winter.peak,-5.8665369
117+
2020,RELCHP,GBR,A0_RES,2020,ELCTRI,-0.33,RSHEAT,1.0,winter.evening,-5.8665369
118+
2020,RELCHP,GBR,A0_RES,2020,ELCTRI,-0.33,RSHEAT,1.0,peak.night,-5.8665369
119+
2020,RELCHP,GBR,A0_RES,2020,ELCTRI,-0.33,RSHEAT,1.0,peak.day,-5.8665369
120+
2020,RELCHP,GBR,A0_RES,2020,ELCTRI,-0.33,RSHEAT,1.0,peak.peak,-5.8665369
121+
2020,RELCHP,GBR,A0_RES,2020,ELCTRI,-0.33,RSHEAT,1.0,peak.evening,-5.8665369
122+
2020,RELCHP,GBR,A0_RES,2020,ELCTRI,-0.33,RSHEAT,1.0,summer.night,-2.69389197
123+
2020,RELCHP,GBR,A0_RES,2020,ELCTRI,-0.33,RSHEAT,1.0,summer.day,-0.18810000000000002
124+
2020,RELCHP,GBR,A0_RES,2020,ELCTRI,-0.33,RSHEAT,1.0,summer.peak,-0.18810000000000002
125+
2020,RELCHP,GBR,A0_RES,2020,ELCTRI,-0.33,RSHEAT,1.0,summer.evening,-0.18810000000000002
126+
2020,RELCHP,GBR,A0_RES,2020,ELCTRI,-0.33,RSHEAT,1.0,autumn.night,-5.8665369
127+
2020,RELCHP,GBR,A0_RES,2020,ELCTRI,-0.33,RSHEAT,1.0,autumn.day,-5.8665369
128+
2020,RELCHP,GBR,A0_RES,2020,ELCTRI,-0.33,RSHEAT,1.0,autumn.peak,-5.8665369
129+
2020,RELCHP,GBR,A0_RES,2020,ELCTRI,-0.33,RSHEAT,1.0,autumn.evening,-5.8665369

0 commit comments

Comments
 (0)