Skip to content

Commit 539a292

Browse files
authored
Merge pull request #3 from calliope-project/add-machteld-filtering
Add filtering based on van den Broek et al 2010
2 parents 51404fa + 76596fb commit 539a292

6 files changed

Lines changed: 225 additions & 71 deletions

File tree

config/config.yaml

Lines changed: 62 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -4,16 +4,65 @@ crs:
44
projected: "epsg:3035"
55

66
imputation:
7-
bounds_mtco2:
8-
co2stop_polygons:
9-
# Constrain rows within the CO2Stop database
10-
lower: 0
11-
upper: 300000
12-
aggregated_polygons:
13-
# Constrain rows within your requested regions
14-
lower: 5
15-
upper: 5000000 # TtCO2 -> essentially no upper limit
16-
filter:
17-
surface_issues: False
18-
subsurface_issues: False
19-
artificial_polygons: True
7+
# Applies after aggregating to the requested shapes.parquet file
8+
# Upper of 5 TtCO2 -> essentially no upper limit
9+
aggregated:
10+
aquifer:
11+
bounds_mtco2:
12+
lower: 5
13+
upper: 5000000
14+
gas:
15+
bounds_mtco2:
16+
lower: 5
17+
upper: 5000000
18+
oil:
19+
bounds_mtco2:
20+
lower: 5
21+
upper: 5000000
22+
# Applies per reservoir polygon within the CO2Stop database
23+
co2stop:
24+
# minimums/bounds based on van den Broek et al 2010 (Table 2)
25+
# Seal thickness and permeability have been set to 0 due to missing data.
26+
# https://doi.org/10.1016/j.envsoft.2010.06.015
27+
aquifer:
28+
bounds_mtco2:
29+
lower: 2
30+
upper: 300000
31+
minimums:
32+
porosity_ratio: 0.1
33+
depth_m: 800
34+
reservoir_thickness_m: 10
35+
seal_thickness_m: 0
36+
permeability_md: 0
37+
remove_w_remarks:
38+
surface_issues: False
39+
subsurface_issues: False
40+
artificial_polygons: True
41+
gas:
42+
bounds_mtco2:
43+
lower: 4
44+
upper: 300000
45+
minimums:
46+
porosity_ratio: 0
47+
depth_m: 800
48+
reservoir_thickness_m: 10
49+
seal_thickness_m: 0
50+
permeability_md: 0
51+
remove_w_remarks:
52+
surface_issues: False
53+
subsurface_issues: False
54+
artificial_polygons: True
55+
oil:
56+
bounds_mtco2:
57+
lower: 4
58+
upper: 300000
59+
minimums:
60+
porosity_ratio: 0
61+
depth_m: 800
62+
reservoir_thickness_m: 10
63+
seal_thickness_m: 0
64+
permeability_md: 0
65+
remove_w_remarks:
66+
surface_issues: False
67+
subsurface_issues: False
68+
artificial_polygons: True

docs/README.md

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -16,9 +16,8 @@ Storage units and traps are removed according to the following.
1616
- Cases that were not assessed or for which data was undisclosed.
1717
- Ambiguous duplicates (these are two small traps located in the north sea with repeated IDs and capacities).
1818
- Optionally, details from the dataset are used to remove the following, if configured:
19-
- Cases marked as having surface issues (e.g., a protected area).
20-
- Cases marked as having subsurface issues (e.g., ground water).
21-
- Artificial polygons created by the CO2Stop authors (i.e., the true spatial extent is unknown).
19+
- Qualitative cases marked as having surface or subsurface issues, and artificially created polygons.
20+
- Quantitative values (e.g., porosity, depth, ...).
2221
1. To avoid double-counting, traps within the remaining storage units are removed as their capacity is already included in the storage unit total.
2322
Please consult the [CO2Stop Final report](https://energy.ec.europa.eu/publications/assessment-co2-storage-potential-europe-co2stop_en) (section 2.3.1) for details.
2423
1. Three scenarios (`low`, `medium`, `high`) are created for each sequestration type (`aquifer`, `gas`, `oil`) for the remaining CO2Stop data.
@@ -30,10 +29,10 @@ These shapes should follow the schema provided by the [geo-boundaries module](ht
3029

3130
>[!WARNING]
3231
>Estimates from the CO2Stop dataset are biased by disclosure (or lack thereof), and the filtering settings used.
33-
>Some countries are affected more than others, with Germany being heavily affected by lack of disclosure.
34-
>We provide automated figures so users can evaluate how these aspects affect polygon selection.
32+
>Some countries are affected more than others, with Germany having particularly poor disclosure.
33+
>We provide automated figures and logging so users can evaluate how their settings affect polygon selection.
3534
>
36-
>Below is an example for storage unit aquifers where only undisclosed and artificial polygons have been removed:
35+
>Below is an example for storage unit aquifers where only undisclosed and artificial polygons have been removed. This can be seen as a _MINIMUM_ amount of removals.
3736
>![filters](./aquifer_kept.png)
3837
3938
## Configuration
@@ -46,10 +45,13 @@ See the [interface file](./../INTERFACE.yaml).
4645

4746
## Data sources
4847

49-
- Poulsen, N., Holloway, S., Neele, F., Smith, N.A., Kirk, K., 2012. CO2StoP Executive Summary (No. ENER/C1/154-2011-SI2.611598). GEOLOGICAL SURVEY OF DENMARK AND GREENLAND.
48+
- Poulsen, N., Holloway, S., Neele, F., Smith, N.A., Kirk, K., 2012. CO2StoP Executive Summary (No. ENER/C1/154-2011-SI2.611598). GEOLOGICAL SURVEY OF DENMARK AND GREENLAND. <https://energy.ec.europa.eu/publications/assessment-co2-storage-potential-europe-co2stop_en>.
5049

5150
## References
5251

5352
This module relies on code and methods from the following sources.
5453

55-
- [Ruiz Manuel, I. clio - module_geo_boundaries [Computer software].](https://github.com/calliope-project/module_geo_boundaries/)
54+
- **Shape schema definition:**
55+
Ruiz Manuel, I. clio - module_geo_boundaries [Computer software]. <https://github.com/calliope-project/module_geo_boundaries/>.
56+
- **Filtering minimum defaults:**
57+
Van Den Broek, M., Brederode, E., Ramírez, A., Kramers, L., Van Der Kuip, M., Wildenborg, T., Turkenburg, W., Faaij, A., 2010. Designing a cost-effective CO2 storage infrastructure using a GIS based linear optimization energy model. Environmental Modelling & Software 25, 1754–1768. <https://doi.org/10.1016/j.envsoft.2010.06.015>.

workflow/internal/config.schema.yaml

Lines changed: 94 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,8 @@ $defs:
1111
- type: string
1212
- type: integer
1313

14-
nonNegativeInteger:
15-
type: integer
14+
nonNegativeNumber:
15+
type: number
1616
minimum: 0
1717

1818
boundsMtco2:
@@ -22,50 +22,60 @@ $defs:
2222
required: [lower, upper]
2323
properties:
2424
lower:
25-
$ref: "#/$defs/nonNegativeInteger"
25+
$ref: "#/$defs/nonNegativeNumber"
2626
upper:
27-
$ref: "#/$defs/nonNegativeInteger"
27+
$ref: "#/$defs/nonNegativeNumber"
2828

29-
properties:
30-
crs:
31-
description: "CRS values to use during projections."
29+
aggregatedConfig:
30+
description: "Settings for each aggregated CDR group."
3231
type: object
3332
additionalProperties: false
34-
required: [geographic, projected]
33+
required: [bounds_mtco2]
3534
properties:
36-
geographic:
37-
description: "Geographic CRS (for lat/lon operations)."
38-
allOf:
39-
- $ref: "#/$defs/crsValue"
40-
projected:
41-
description: "Projected CRS (for area operations)."
35+
bounds_mtco2:
36+
description: "These bounds will be applied to each shape_id case after aggregation."
4237
allOf:
43-
- $ref: "#/$defs/crsValue"
38+
- $ref: "#/$defs/boundsMtco2"
4439

45-
imputation:
46-
description: "These settings alter how data is processed."
40+
co2stopConfig:
41+
description: "Settings for each CDR group in the CO2Stop dataset."
4742
type: object
4843
additionalProperties: false
49-
required: [filter, bounds_mtco2]
44+
required: [bounds_mtco2, minimums, remove_w_remarks]
5045
properties:
5146
bounds_mtco2:
47+
description: "These bounds will be applied to each row in the CO2Stop dataset."
48+
allOf:
49+
- $ref: "#/$defs/boundsMtco2"
50+
minimums:
5251
description: |
53-
Lower and upper bounds for the CO2Stop polygons.
54-
These are applied before aggregation.
52+
Minimum values for key reservoir attributes. Cases below them will be dropped.
53+
IMPORTANT: CO2Stop uses '0' for missing values, making NaN and actual 0 indistinguishable.
54+
Some of these settings may result in a lot of removed data due to this dataset limitation!
5555
type: object
56-
required: [co2stop_polygons, aggregated_polygons]
56+
additionalProperties: false
57+
required: [porosity_ratio, depth_m, reservoir_thickness_m, seal_thickness_m, permeability_md]
5758
properties:
58-
co2stop_polygons:
59-
description: "These bounds will be applied to each row in the CO2Stop dataset."
60-
allOf:
61-
- $ref: "#/$defs/boundsMtco2"
62-
aggregated_polygons:
63-
description: "These bounds will be applied to each shape requested for aggregation."
64-
allOf:
65-
- $ref: "#/$defs/boundsMtco2"
66-
filter:
59+
porosity_ratio:
60+
description: Minimum mean porosity ratio
61+
type: number
62+
minimum: 0
63+
maximum: 1
64+
depth_m:
65+
description: Minimum mean depth in metres
66+
$ref: "#/$defs/nonNegativeNumber"
67+
reservoir_thickness_m:
68+
description: Minimum mean reservoir thickness in metres
69+
$ref: "#/$defs/nonNegativeNumber"
70+
seal_thickness_m:
71+
description: Minimum seal thickness in metres
72+
$ref: "#/$defs/nonNegativeNumber"
73+
permeability_md:
74+
description: Permeability in millidarcy (md)
75+
$ref: "#/$defs/nonNegativeNumber"
76+
remove_w_remarks:
6777
description: |
68-
If enabled, these will remove CO2Stop polygons in certain cases.
78+
Remove CO2Stop polygons in certain cases.
6979
Note that CO2Stop settings and comments are the only thing used for these filters.
7080
Quality may vary due to the inconsistent nature of the dataset.
7181
type: object
@@ -83,3 +93,56 @@ properties:
8393
These are cases where the authors state that polygons do not reflect the actual extent of storage.
8494
RECOMMENDED TO LEAVE AS 'True'.
8595
type: boolean
96+
97+
properties:
98+
crs:
99+
description: "CRS values to use during projections."
100+
type: object
101+
additionalProperties: false
102+
required: [geographic, projected]
103+
properties:
104+
geographic:
105+
description: "Geographic CRS (for lat/lon operations)."
106+
allOf:
107+
- $ref: "#/$defs/crsValue"
108+
projected:
109+
description: "Projected CRS (for area operations)."
110+
allOf:
111+
- $ref: "#/$defs/crsValue"
112+
113+
imputation:
114+
description: "These settings alter how data is processed."
115+
type: object
116+
additionalProperties: false
117+
required: [aggregated, co2stop]
118+
properties:
119+
aggregated:
120+
description: Settings applied after aggregating to the provided shapes file.
121+
type: object
122+
additionalProperties: false
123+
required: [aquifer, gas, oil]
124+
properties:
125+
aquifer:
126+
allOf:
127+
- $ref: "#/$defs/aggregatedConfig"
128+
gas:
129+
allOf:
130+
- $ref: "#/$defs/aggregatedConfig"
131+
oil:
132+
allOf:
133+
- $ref: "#/$defs/aggregatedConfig"
134+
co2stop:
135+
description: Settings applied while preparing / standardising the CO2Stop dataset.
136+
type: object
137+
additionalProperties: false
138+
required: [aquifer, gas, oil]
139+
properties:
140+
aquifer:
141+
allOf:
142+
- $ref: "#/$defs/co2stopConfig"
143+
gas:
144+
allOf:
145+
- $ref: "#/$defs/co2stopConfig"
146+
oil:
147+
allOf:
148+
- $ref: "#/$defs/co2stopConfig"

workflow/rules/aggregate.smk

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,9 @@ rule aggregate_co2stop:
55
message:
66
"Aggregating '{wildcards.shapes}-{wildcards.scenario}-{wildcards.cdr_group}'."
77
params:
8-
bounds_mtco2=config["imputation"]["bounds_mtco2"]["aggregated_polygons"],
8+
bounds_mtco2=lambda wc: config["imputation"]["aggregated"][wc.cdr_group][
9+
"bounds_mtco2"
10+
],
911
proj_crs=config["crs"]["projected"],
1012
input:
1113
shapes="resources/user/{shapes}/shapes.parquet",

workflow/rules/prepare.smk

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,7 @@ rule prepare_co2stop_storage_units:
77
message:
88
"Harmonising CO2Stop {wildcards.dataset}:{wildcards.cdr_group}."
99
params:
10-
bounds_mtco2=lambda wc: config["imputation"]["bounds_mtco2"]["co2stop_polygons"],
11-
filters=config["imputation"]["filter"],
10+
cdr_group_config=lambda wc: config["imputation"]["co2stop"][wc.cdr_group],
1211
geo_crs=config["crs"]["geographic"],
1312
input:
1413
table="resources/automatic/co2stop/storage_table.csv",
@@ -43,8 +42,7 @@ rule prepare_co2stop_traps:
4342
message:
4443
"Harmonising CO2Stop {wildcards.dataset}:{wildcards.cdr_group}."
4544
params:
46-
bounds_mtco2=config["imputation"]["bounds_mtco2"]["co2stop_polygons"],
47-
filters=config["imputation"]["filter"],
45+
cdr_group_config=lambda wc: config["imputation"]["co2stop"][wc.cdr_group],
4846
geo_crs=config["crs"]["geographic"],
4947
input:
5048
table=rules.unzip_co2stop.output.traps_data,

0 commit comments

Comments
 (0)