diff --git a/articles/enhanced-weathering-fluxes/components/custom-bar.js b/articles/enhanced-weathering-fluxes/components/custom-bar.js new file mode 100644 index 00000000..f167cc16 --- /dev/null +++ b/articles/enhanced-weathering-fluxes/components/custom-bar.js @@ -0,0 +1,81 @@ +import React, { memo, useMemo } from 'react' +import { useThemeUI } from 'theme-ui' +import { useChart } from '@carbonplan/charts' + +const Bar = ({ + data, + width = 0.8, + direction = 'vertical', + color = 'primary', + onBarClick, // Add an onBarClick prop for handling clicks + ...props +}) => { + const { x: _x, y: _y } = useChart() + const { theme } = useThemeUI() + + const flipped = direction === 'horizontal' + + const xValues = data.map((d) => d[0]) + const minDelta = useMemo( + () => + xValues + .sort() + .slice(1) + .reduce((min, el, i) => { + const transform = flipped ? _y : _x + const diff = Math.abs(transform(el) - transform(xValues[i])) + if (typeof min !== 'number' || diff < min) { + return diff + } else { + return min + } + }, null), + + [_x, _y, flipped, xValues] + ) + const fixedWidth = minDelta * width + if (Array.isArray(color) && color.length !== data.length) { + throw new Error( + `Unexpected color array provided. Expected length ${data.length}, received length ${color.length}` + ) + } + + return ( + <> + {data.map((d, i) => { + const fixedPosition = flipped ? _y(d[0]) : _x(d[0]) + const varying = [d.length === 3 ? d[1] : 0, d[d.length - 1]] + const varyingPositions = varying.map(flipped ? _x : _y) + const lower = Math.min(...varyingPositions) + const upper = Math.max(...varyingPositions) + + const position = [`${fixedPosition - fixedWidth / 2}`, `${lower}`] // x, y + const dimensions = [fixedWidth, `${upper - lower}`] // width, height + + if (flipped) { + position.reverse() + dimensions.reverse() + } + + const [x, y] = position + const [width, height] = dimensions + + const colorString = typeof color === 'string' ? color : color[i] + const fill = theme.rawColors[colorString] || colorString + + return ( + onBarClick && onBarClick(d)} + {...props} + /> + ) + })} + + ) +} + +export default memo(Bar) diff --git a/articles/enhanced-weathering-fluxes/components/data.js b/articles/enhanced-weathering-fluxes/components/data.js new file mode 100644 index 00000000..675b5c75 --- /dev/null +++ b/articles/enhanced-weathering-fluxes/components/data.js @@ -0,0 +1,1524 @@ +const data = [ + { + estimate_type: 'model', + feedstock_group: 'basalt', + CDR_efficiency_annual_percent: 30.810810810810807, + CDR_consistentWithZero: 'N', + CDRflux_tonsCO2_ha_yr: 1.14, + 'short reference': 'Baek et al., 2023', + link: 'https://doi.org/10.1029/2023EF003698', + CDR_ineff_code_main: 'downstream', + count_group: 'soil', + application_rate_ton_ha_yr: 10.0, + particle_diameter_um: 100.0, + }, + { + estimate_type: 'model', + feedstock_group: 'basalt', + CDR_efficiency_annual_percent: 31.351351351351347, + CDR_consistentWithZero: 'N', + CDRflux_tonsCO2_ha_yr: 1.16, + 'short reference': 'Baek et al., 2023', + link: 'https://doi.org/10.1029/2023EF003698', + CDR_ineff_code_main: 'downstream', + count_group: 'soil', + application_rate_ton_ha_yr: 10.0, + particle_diameter_um: 100.0, + }, + { + estimate_type: 'model', + feedstock_group: 'basalt', + CDR_efficiency_annual_percent: 21.89189189189189, + CDR_consistentWithZero: 'N', + CDRflux_tonsCO2_ha_yr: 0.81, + 'short reference': 'Baek et al., 2023', + link: 'https://doi.org/10.1029/2023EF003698', + CDR_ineff_code_main: 'downstream', + count_group: 'soil', + application_rate_ton_ha_yr: 10.0, + particle_diameter_um: 1220.0, + }, + { + estimate_type: 'model', + feedstock_group: 'basalt', + CDR_efficiency_annual_percent: 22.43243243243243, + CDR_consistentWithZero: 'N', + CDRflux_tonsCO2_ha_yr: 0.83, + 'short reference': 'Baek et al., 2023', + link: 'https://doi.org/10.1029/2023EF003698', + CDR_ineff_code_main: 'downstream', + count_group: 'soil', + application_rate_ton_ha_yr: 10.0, + particle_diameter_um: 1220.0, + }, + { + estimate_type: 'model', + feedstock_group: 'olivine or dunite', + CDR_efficiency_annual_percent: 0.00016, + CDR_consistentWithZero: 'N', + CDRflux_tonsCO2_ha_yr: 0.0002, + 'short reference': 'Cipolla et al., 2021', + link: 'https://doi.org/10.1016/j.advwatres.2021.103949', + CDR_ineff_code_main: 'local', + count_group: 'export_deep', + application_rate_ton_ha_yr: 100.0, + particle_diameter_um: 200.0, + }, + { + estimate_type: 'model', + feedstock_group: 'olivine or dunite', + CDR_efficiency_annual_percent: 0.00344, + CDR_consistentWithZero: 'N', + CDRflux_tonsCO2_ha_yr: 0.0043, + 'short reference': 'Cipolla et al., 2021', + link: 'https://doi.org/10.1016/j.advwatres.2021.103949', + CDR_ineff_code_main: 'local', + count_group: 'export_deep', + application_rate_ton_ha_yr: 100.0, + particle_diameter_um: 200.0, + }, + { + estimate_type: 'model', + feedstock_group: 'olivine or dunite', + CDR_efficiency_annual_percent: 0.00704, + CDR_consistentWithZero: 'N', + CDRflux_tonsCO2_ha_yr: 0.0088, + 'short reference': 'Cipolla et al., 2021', + link: 'https://doi.org/10.1016/j.advwatres.2021.103949', + CDR_ineff_code_main: 'local', + count_group: 'export_deep', + application_rate_ton_ha_yr: 100.0, + particle_diameter_um: 200.0, + }, + { + estimate_type: 'model', + feedstock_group: 'olivine or dunite', + CDR_efficiency_annual_percent: 0.0033599999999999, + CDR_consistentWithZero: 'N', + CDRflux_tonsCO2_ha_yr: 0.0042, + 'short reference': 'Cipolla et al., 2022', + link: 'https://doi.org/10.5194/bg-19-3877-2022', + CDR_ineff_code_main: 'local', + count_group: 'export_deep', + application_rate_ton_ha_yr: 100.0, + particle_diameter_um: 200.0, + }, + { + estimate_type: 'model', + feedstock_group: 'olivine or dunite', + CDR_efficiency_annual_percent: 0.001768, + CDR_consistentWithZero: 'N', + CDRflux_tonsCO2_ha_yr: 0.00221, + 'short reference': 'Cipolla et al., 2022', + link: 'https://doi.org/10.5194/bg-19-3877-2022', + CDR_ineff_code_main: 'local', + count_group: 'export_deep', + application_rate_ton_ha_yr: 100.0, + particle_diameter_um: 200.0, + }, + { + estimate_type: 'model', + feedstock_group: 'olivine or dunite', + CDR_efficiency_annual_percent: 0.000496, + CDR_consistentWithZero: 'N', + CDRflux_tonsCO2_ha_yr: 0.00062, + 'short reference': 'Cipolla et al., 2022', + link: 'https://doi.org/10.5194/bg-19-3877-2022', + CDR_ineff_code_main: 'local', + count_group: 'export_deep', + application_rate_ton_ha_yr: 100.0, + particle_diameter_um: 200.0, + }, + { + estimate_type: 'model', + feedstock_group: 'olivine or dunite', + CDR_efficiency_annual_percent: 0.000312, + CDR_consistentWithZero: 'N', + CDRflux_tonsCO2_ha_yr: 0.00039, + 'short reference': 'Cipolla et al., 2022', + link: 'https://doi.org/10.5194/bg-19-3877-2022', + CDR_ineff_code_main: 'local', + count_group: 'export_deep', + application_rate_ton_ha_yr: 100.0, + particle_diameter_um: 200.0, + }, + { + estimate_type: 'model', + feedstock_group: 'basalt', + CDR_efficiency_annual_percent: 0.0648148148148148, + CDR_consistentWithZero: 'N', + CDRflux_tonsCO2_ha_yr: 0.035, + 'short reference': 'Chen et al., 2023', + link: 'https://doi.org/10.1016/j.scitotenv.2023.165766', + CDR_ineff_code_main: 'upstream', + count_group: 'soil', + application_rate_ton_ha_yr: 180.0, + particle_diameter_um: 214.0, + }, + { + estimate_type: 'model', + feedstock_group: 'olivine or dunite', + CDR_efficiency_annual_percent: 0.0573192239858906, + CDR_consistentWithZero: 'N', + CDRflux_tonsCO2_ha_yr: 0.065, + 'short reference': 'Chen et al., 2023', + link: 'https://doi.org/10.1016/j.scitotenv.2023.165766', + CDR_ineff_code_main: 'upstream', + count_group: 'soil', + application_rate_ton_ha_yr: 180.0, + particle_diameter_um: 214.0, + }, + { + estimate_type: 'laboratory', + feedstock_group: 'olivine or dunite', + CDR_efficiency_annual_percent: 0.0124458874458874, + CDR_consistentWithZero: 'N', + CDRflux_tonsCO2_ha_yr: 0.023, + 'short reference': 'Amann et al., 2020', + link: 'https://bg.copernicus.org/articles/17/103/2020/', + CDR_ineff_code_main: 'local', + count_group: 'export_shallow', + application_rate_ton_ha_yr: 220.0, + particle_diameter_um: 1020.0, + }, + { + estimate_type: 'laboratory', + feedstock_group: 'olivine or dunite', + CDR_efficiency_annual_percent: 0.0265151515151515, + CDR_consistentWithZero: 'N', + CDRflux_tonsCO2_ha_yr: 0.049, + 'short reference': 'Amann et al., 2020', + link: 'https://bg.copernicus.org/articles/17/103/2020/', + CDR_ineff_code_main: 'local', + count_group: 'export_shallow', + application_rate_ton_ha_yr: 220.0, + particle_diameter_um: 43.5, + }, + { + estimate_type: 'field', + feedstock_group: 'basalt', + CDR_efficiency_annual_percent: 35.61904761904762, + CDR_consistentWithZero: 'N', + CDRflux_tonsCO2_ha_yr: 3.74, + 'short reference': 'Kantola et al., 2023', + link: 'https://doi.org/10.1111/gcb.16903', + CDR_ineff_code_main: 'downstream', + count_group: 'export_shallow', + application_rate_ton_ha_yr: 50.0, + particle_diameter_um: 267.0, + }, + { + estimate_type: 'field', + feedstock_group: 'basalt', + CDR_efficiency_annual_percent: 81.61904761904762, + CDR_consistentWithZero: 'N', + CDRflux_tonsCO2_ha_yr: 8.57, + 'short reference': 'Kantola et al., 2023', + link: 'https://doi.org/10.1111/gcb.16903', + CDR_ineff_code_main: 'downstream', + count_group: 'export_shallow', + application_rate_ton_ha_yr: 50.0, + particle_diameter_um: 267.0, + }, + { + estimate_type: 'model', + feedstock_group: 'basalt', + CDR_efficiency_annual_percent: 4.666666666666667, + CDR_consistentWithZero: 'N', + CDRflux_tonsCO2_ha_yr: 0.56, + 'short reference': 'Lewis et al., 2021', + link: 'https://doi.org/10.1016/j.apgeochem.2021.105023', + CDR_ineff_code_main: 'downstream', + count_group: 'soil', + application_rate_ton_ha_yr: 50.0, + particle_diameter_um: 1531.0, + }, + { + estimate_type: 'model', + feedstock_group: 'basalt', + CDR_efficiency_annual_percent: 2.4375, + CDR_consistentWithZero: 'N', + CDRflux_tonsCO2_ha_yr: 0.39, + 'short reference': 'Lewis et al., 2021', + link: 'https://doi.org/10.1016/j.apgeochem.2021.105023', + CDR_ineff_code_main: 'downstream', + count_group: 'soil', + application_rate_ton_ha_yr: 50.0, + particle_diameter_um: 1561.0, + }, + { + estimate_type: 'model', + feedstock_group: 'basalt', + CDR_efficiency_annual_percent: 2.875, + CDR_consistentWithZero: 'N', + CDRflux_tonsCO2_ha_yr: 0.23, + 'short reference': 'Lewis et al., 2021', + link: 'https://doi.org/10.1016/j.apgeochem.2021.105023', + CDR_ineff_code_main: 'downstream', + count_group: 'soil', + application_rate_ton_ha_yr: 50.0, + particle_diameter_um: 714.0, + }, + { + estimate_type: 'model', + feedstock_group: 'basalt', + CDR_efficiency_annual_percent: 2.0, + CDR_consistentWithZero: 'N', + CDRflux_tonsCO2_ha_yr: 0.21, + 'short reference': 'Lewis et al., 2021', + link: 'https://doi.org/10.1016/j.apgeochem.2021.105023', + CDR_ineff_code_main: 'downstream', + count_group: 'soil', + application_rate_ton_ha_yr: 50.0, + particle_diameter_um: 267.0, + }, + { + estimate_type: 'model', + feedstock_group: 'basalt', + CDR_efficiency_annual_percent: 2.666666666666667, + CDR_consistentWithZero: 'N', + CDRflux_tonsCO2_ha_yr: 0.2, + 'short reference': 'Lewis et al., 2021', + link: 'https://doi.org/10.1016/j.apgeochem.2021.105023', + CDR_ineff_code_main: 'downstream', + count_group: 'soil', + application_rate_ton_ha_yr: 50.0, + particle_diameter_um: 1767.0, + }, + { + estimate_type: 'model', + feedstock_group: 'basalt', + CDR_efficiency_annual_percent: 0.8571428571428572, + CDR_consistentWithZero: 'N', + CDRflux_tonsCO2_ha_yr: 0.09, + 'short reference': 'Lewis et al., 2021', + link: 'https://doi.org/10.1016/j.apgeochem.2021.105023', + CDR_ineff_code_main: 'downstream', + count_group: 'soil', + application_rate_ton_ha_yr: 50.0, + particle_diameter_um: 1138.0, + }, + { + estimate_type: 'field', + feedstock_group: 'basalt', + CDR_efficiency_annual_percent: 25.047619047619047, + CDR_consistentWithZero: 'N', + CDRflux_tonsCO2_ha_yr: 2.63, + 'short reference': 'Beerling et al., 2024', + link: 'https://doi.org/10.1073/pnas.2319436121', + CDR_ineff_code_main: 'local', + count_group: 'export_shallow', + application_rate_ton_ha_yr: 50.0, + particle_diameter_um: 267.0, + }, + { + estimate_type: 'laboratory', + feedstock_group: 'basalt', + CDR_efficiency_annual_percent: 100.0, + CDR_consistentWithZero: 'Y', + CDRflux_tonsCO2_ha_yr: 20.8, + 'short reference': 'Vienne et al., 2022', + link: 'https://doi.org/10.3389/fclim.2022.869456', + CDR_ineff_code_main: 'none', + count_group: 'soil', + application_rate_ton_ha_yr: 50.0, + particle_diameter_um: 375.0, + }, + { + estimate_type: 'model', + feedstock_group: 'basalt', + CDR_efficiency_annual_percent: 8.798076923076923, + CDR_consistentWithZero: 'N', + CDRflux_tonsCO2_ha_yr: 1.83, + 'short reference': 'Vienne et al., 2022', + link: 'https://doi.org/10.3389/fclim.2022.869456', + CDR_ineff_code_main: 'local', + count_group: 'soil', + application_rate_ton_ha_yr: 50.0, + particle_diameter_um: 375.0, + }, + { + estimate_type: 'model', + feedstock_group: 'basalt', + CDR_efficiency_annual_percent: 4.326923076923077, + CDR_consistentWithZero: 'N', + CDRflux_tonsCO2_ha_yr: 0.9, + 'short reference': 'Vienne et al., 2022', + link: 'https://doi.org/10.3389/fclim.2022.869456', + CDR_ineff_code_main: 'local', + count_group: 'soil', + application_rate_ton_ha_yr: 50.0, + particle_diameter_um: 375.0, + }, + { + estimate_type: 'laboratory', + feedstock_group: 'other', + CDR_efficiency_annual_percent: 0.0065573770491803, + CDR_consistentWithZero: 'N', + CDRflux_tonsCO2_ha_yr: 0.002, + 'short reference': 'Buckingham and Henderson, 2024', + link: 'https://doi.org/10.1016/j.scitotenv.2023.167701', + CDR_ineff_code_main: 'downstream', + count_group: 'soil', + application_rate_ton_ha_yr: 50.0, + particle_diameter_um: null, + }, + { + estimate_type: 'laboratory', + feedstock_group: 'other', + CDR_efficiency_annual_percent: 0.032, + CDR_consistentWithZero: 'N', + CDRflux_tonsCO2_ha_yr: 0.016, + 'short reference': 'Buckingham and Henderson, 2024', + link: 'https://doi.org/10.1016/j.scitotenv.2023.167701', + CDR_ineff_code_main: 'downstream', + count_group: 'soil', + application_rate_ton_ha_yr: 50.0, + particle_diameter_um: null, + }, + { + estimate_type: 'laboratory', + feedstock_group: 'basalt', + CDR_efficiency_annual_percent: 0.0714285714285714, + CDR_consistentWithZero: 'N', + CDRflux_tonsCO2_ha_yr: 0.005, + 'short reference': 'Buckingham and Henderson, 2024', + link: 'https://doi.org/10.1016/j.scitotenv.2023.167701', + CDR_ineff_code_main: 'downstream', + count_group: 'soil', + application_rate_ton_ha_yr: 50.0, + particle_diameter_um: null, + }, + { + estimate_type: 'laboratory', + feedstock_group: 'olivine or dunite', + CDR_efficiency_annual_percent: 0.0, + CDR_consistentWithZero: 'Y', + CDRflux_tonsCO2_ha_yr: 0.0, + 'short reference': 'Buckingham and Henderson, 2024', + link: 'https://doi.org/10.1016/j.scitotenv.2023.167701', + CDR_ineff_code_main: 'downstream', + count_group: 'soil', + application_rate_ton_ha_yr: 50.0, + particle_diameter_um: null, + }, + { + estimate_type: 'laboratory', + feedstock_group: 'other', + CDR_efficiency_annual_percent: 0.0588235294117647, + CDR_consistentWithZero: 'N', + CDRflux_tonsCO2_ha_yr: 0.02, + 'short reference': 'Buckingham and Henderson, 2024', + link: 'https://doi.org/10.1016/j.scitotenv.2023.167701', + CDR_ineff_code_main: 'downstream', + count_group: 'soil', + application_rate_ton_ha_yr: 50.0, + particle_diameter_um: null, + }, + { + estimate_type: 'laboratory', + feedstock_group: 'other', + CDR_efficiency_annual_percent: 0.04, + CDR_consistentWithZero: 'Y', + CDRflux_tonsCO2_ha_yr: 0.003, + 'short reference': 'Buckingham and Henderson, 2024', + link: 'https://doi.org/10.1016/j.scitotenv.2023.167701', + CDR_ineff_code_main: 'downstream', + count_group: 'soil', + application_rate_ton_ha_yr: 50.0, + particle_diameter_um: null, + }, + { + estimate_type: 'laboratory', + feedstock_group: 'basalt', + CDR_efficiency_annual_percent: 26.666666666666668, + CDR_consistentWithZero: 'N', + CDRflux_tonsCO2_ha_yr: 2.8, + 'short reference': 'Vanderkloot and Ryan, 2023', + link: 'https://doi.org/10.1016/j.apgeochem.2023.105728', + CDR_ineff_code_main: 'local', + count_group: 'soil', + application_rate_ton_ha_yr: 50.0, + particle_diameter_um: 502.0, + }, + { + estimate_type: 'laboratory', + feedstock_group: 'basalt', + CDR_efficiency_annual_percent: 45.71428571428572, + CDR_consistentWithZero: 'N', + CDRflux_tonsCO2_ha_yr: 4.8, + 'short reference': 'Vanderkloot and Ryan, 2023', + link: 'https://doi.org/10.1016/j.apgeochem.2023.105728', + CDR_ineff_code_main: 'local', + count_group: 'soil', + application_rate_ton_ha_yr: 50.0, + particle_diameter_um: 32.0, + }, + { + estimate_type: 'laboratory', + feedstock_group: 'basalt', + CDR_efficiency_annual_percent: 64.76190476190476, + CDR_consistentWithZero: 'N', + CDRflux_tonsCO2_ha_yr: 6.8, + 'short reference': 'Vanderkloot and Ryan, 2023', + link: 'https://doi.org/10.1016/j.apgeochem.2023.105728', + CDR_ineff_code_main: 'local', + count_group: 'soil', + application_rate_ton_ha_yr: 50.0, + particle_diameter_um: 9.96, + }, + { + estimate_type: 'laboratory', + feedstock_group: 'basalt', + CDR_efficiency_annual_percent: 33.33333333333333, + CDR_consistentWithZero: 'N', + CDRflux_tonsCO2_ha_yr: 4.0, + 'short reference': 'Vanderkloot and Ryan, 2023', + link: 'https://doi.org/10.1016/j.apgeochem.2023.105728', + CDR_ineff_code_main: 'local', + count_group: 'soil', + application_rate_ton_ha_yr: 50.0, + particle_diameter_um: 265.0, + }, + { + estimate_type: 'laboratory', + feedstock_group: 'basalt', + CDR_efficiency_annual_percent: 38.33333333333333, + CDR_consistentWithZero: 'N', + CDRflux_tonsCO2_ha_yr: 4.6, + 'short reference': 'Vanderkloot and Ryan, 2023', + link: 'https://doi.org/10.1016/j.apgeochem.2023.105728', + CDR_ineff_code_main: 'local', + count_group: 'soil', + application_rate_ton_ha_yr: 50.0, + particle_diameter_um: 60.0, + }, + { + estimate_type: 'laboratory', + feedstock_group: 'basalt', + CDR_efficiency_annual_percent: 54.99999999999999, + CDR_consistentWithZero: 'N', + CDRflux_tonsCO2_ha_yr: 6.6, + 'short reference': 'Vanderkloot and Ryan, 2023', + link: 'https://doi.org/10.1016/j.apgeochem.2023.105728', + CDR_ineff_code_main: 'local', + count_group: 'soil', + application_rate_ton_ha_yr: 50.0, + particle_diameter_um: 10.3, + }, + { + estimate_type: 'model', + feedstock_group: 'forsterite', + CDR_efficiency_annual_percent: 82.85714285714285, + CDR_consistentWithZero: 'N', + CDRflux_tonsCO2_ha_yr: 0.87, + 'short reference': 'Haque et al., 2023', + link: 'https://doi.org/10.1021/acsearthspacechem.2c00374', + CDR_ineff_code_main: 'none', + count_group: 'soil', + application_rate_ton_ha_yr: 1.0, + particle_diameter_um: 100.0, + }, + { + estimate_type: 'model', + feedstock_group: 'other', + CDR_efficiency_annual_percent: 86.41975308641973, + CDR_consistentWithZero: 'N', + CDRflux_tonsCO2_ha_yr: 0.7, + 'short reference': 'Haque et al., 2023', + link: 'https://doi.org/10.1021/acsearthspacechem.2c00374', + CDR_ineff_code_main: 'none', + count_group: 'soil', + application_rate_ton_ha_yr: 1.0, + particle_diameter_um: 100.0, + }, + { + estimate_type: 'model', + feedstock_group: 'wollastonite', + CDR_efficiency_annual_percent: 63.33333333333333, + CDR_consistentWithZero: 'N', + CDRflux_tonsCO2_ha_yr: 0.57, + 'short reference': 'Haque et al., 2023', + link: 'https://doi.org/10.1021/acsearthspacechem.2c00374', + CDR_ineff_code_main: 'none', + count_group: 'soil', + application_rate_ton_ha_yr: 1.0, + particle_diameter_um: 100.0, + }, + { + estimate_type: 'model', + feedstock_group: 'wollastonite', + CDR_efficiency_annual_percent: 62.22222222222222, + CDR_consistentWithZero: 'N', + CDRflux_tonsCO2_ha_yr: 0.56, + 'short reference': 'Haque et al., 2023', + link: 'https://doi.org/10.1021/acsearthspacechem.2c00374', + CDR_ineff_code_main: 'none', + count_group: 'soil', + application_rate_ton_ha_yr: 1.0, + particle_diameter_um: 100.0, + }, + { + estimate_type: 'model', + feedstock_group: 'wollastonite', + CDR_efficiency_annual_percent: 57.777777777777786, + CDR_consistentWithZero: 'N', + CDRflux_tonsCO2_ha_yr: 0.52, + 'short reference': 'Haque et al., 2023', + link: 'https://doi.org/10.1021/acsearthspacechem.2c00374', + CDR_ineff_code_main: 'none', + count_group: 'soil', + application_rate_ton_ha_yr: 1.0, + particle_diameter_um: 100.0, + }, + { + estimate_type: 'model', + feedstock_group: 'forsterite', + CDR_efficiency_annual_percent: 18.09523809523809, + CDR_consistentWithZero: 'N', + CDRflux_tonsCO2_ha_yr: 0.19, + 'short reference': 'Haque et al., 2023', + link: 'https://doi.org/10.1021/acsearthspacechem.2c00374', + CDR_ineff_code_main: 'none', + count_group: 'soil', + application_rate_ton_ha_yr: 1.0, + particle_diameter_um: 100.0, + }, + { + estimate_type: 'model', + feedstock_group: 'other', + CDR_efficiency_annual_percent: 9.876543209876544, + CDR_consistentWithZero: 'N', + CDRflux_tonsCO2_ha_yr: 0.08, + 'short reference': 'Haque et al., 2023', + link: 'https://doi.org/10.1021/acsearthspacechem.2c00374', + CDR_ineff_code_main: 'none', + count_group: 'soil', + application_rate_ton_ha_yr: 1.0, + particle_diameter_um: 100.0, + }, + { + estimate_type: 'model', + feedstock_group: 'forsterite', + CDR_efficiency_annual_percent: 0.9523809523809524, + CDR_consistentWithZero: 'N', + CDRflux_tonsCO2_ha_yr: 0.01, + 'short reference': 'Haque et al., 2023', + link: 'https://doi.org/10.1021/acsearthspacechem.2c00374', + CDR_ineff_code_main: 'none', + count_group: 'soil', + application_rate_ton_ha_yr: 1.0, + particle_diameter_um: 100.0, + }, + { + estimate_type: 'model', + feedstock_group: 'other', + CDR_efficiency_annual_percent: 0.0, + CDR_consistentWithZero: 'N', + CDRflux_tonsCO2_ha_yr: 0.0, + 'short reference': 'Haque et al., 2023', + link: 'https://doi.org/10.1021/acsearthspacechem.2c00374', + CDR_ineff_code_main: 'none', + count_group: 'soil', + application_rate_ton_ha_yr: 1.0, + particle_diameter_um: 100.0, + }, + { + estimate_type: 'laboratory', + feedstock_group: 'wollastonite', + CDR_efficiency_annual_percent: 100.0, + CDR_consistentWithZero: 'N', + CDRflux_tonsCO2_ha_yr: 14.5, + 'short reference': 'Khalidy et al., 2023', + link: 'https://doi.org/10.1016/j.catena.2023.107524', + CDR_ineff_code_main: 'none', + count_group: 'soil', + application_rate_ton_ha_yr: 50.0, + particle_diameter_um: 375.0, + }, + { + estimate_type: 'laboratory', + feedstock_group: 'wollastonite', + CDR_efficiency_annual_percent: 47.172413793103445, + CDR_consistentWithZero: 'N', + CDRflux_tonsCO2_ha_yr: 6.84, + 'short reference': 'Khalidy et al., 2023', + link: 'https://doi.org/10.1016/j.catena.2023.107524', + CDR_ineff_code_main: 'none', + count_group: 'soil', + application_rate_ton_ha_yr: 50.0, + particle_diameter_um: 375.0, + }, + { + estimate_type: 'model', + feedstock_group: 'forsterite', + CDR_efficiency_annual_percent: 19.96527777777777, + CDR_consistentWithZero: 'N', + CDRflux_tonsCO2_ha_yr: 23.0, + 'short reference': 'Deng et al., 2023', + link: 'https://doi.org/10.1038/s41598-023-36113-4', + CDR_ineff_code_main: 'local', + count_group: 'soil', + application_rate_ton_ha_yr: 160.0, + particle_diameter_um: null, + }, + { + estimate_type: 'model', + feedstock_group: 'forsterite', + CDR_efficiency_annual_percent: 0.0, + CDR_consistentWithZero: 'Y', + CDRflux_tonsCO2_ha_yr: 0.0, + 'short reference': 'Deng et al., 2023', + link: 'https://doi.org/10.1038/s41598-023-36113-4', + CDR_ineff_code_main: 'local', + count_group: 'soil', + application_rate_ton_ha_yr: 160.0, + particle_diameter_um: null, + }, + { + estimate_type: 'model', + feedstock_group: 'forsterite', + CDR_efficiency_annual_percent: 8.680555555555555, + CDR_consistentWithZero: 'N', + CDRflux_tonsCO2_ha_yr: 10.0, + 'short reference': 'Deng et al., 2023', + link: 'https://doi.org/10.1038/s41598-023-36113-4', + CDR_ineff_code_main: 'local', + count_group: 'soil', + application_rate_ton_ha_yr: 160.0, + particle_diameter_um: null, + }, + { + estimate_type: 'model', + feedstock_group: 'olivine or dunite', + CDR_efficiency_annual_percent: 1.2, + CDR_consistentWithZero: 'N', + CDRflux_tonsCO2_ha_yr: 0.015, + 'short reference': 'Vink and Knops, 2023', + link: 'https://doi.org/10.3390/min13020235', + CDR_ineff_code_main: 'none', + count_group: 'soil', + application_rate_ton_ha_yr: 1.0, + particle_diameter_um: 900.0, + }, + { + estimate_type: 'field', + feedstock_group: 'other', + CDR_efficiency_annual_percent: 4.965517241379311, + CDR_consistentWithZero: 'N', + CDRflux_tonsCO2_ha_yr: 1.44, + 'short reference': 'Guo et al., 2023', + link: 'https://doi.org/10.1016/j.agsy.2023.103691', + CDR_ineff_code_main: 'none', + count_group: 'soil', + application_rate_ton_ha_yr: 100.0, + particle_diameter_um: 38.0, + }, + { + estimate_type: 'field', + feedstock_group: 'other', + CDR_efficiency_annual_percent: 3.137931034482759, + CDR_consistentWithZero: 'N', + CDRflux_tonsCO2_ha_yr: 0.91, + 'short reference': 'Guo et al., 2023', + link: 'https://doi.org/10.1016/j.agsy.2023.103691', + CDR_ineff_code_main: 'upstream', + count_group: 'soil', + application_rate_ton_ha_yr: 100.0, + particle_diameter_um: 38.0, + }, + { + estimate_type: 'field', + feedstock_group: 'other', + CDR_efficiency_annual_percent: 1.944, + CDR_consistentWithZero: 'N', + CDRflux_tonsCO2_ha_yr: 0.243, + 'short reference': 'Dietzen and Rosing, 2023', + link: 'https://doi.org/10.1016/j.ijggc.2023.103872', + CDR_ineff_code_main: 'local', + count_group: 'soil', + application_rate_ton_ha_yr: 50.0, + particle_diameter_um: 2.6, + }, + { + estimate_type: 'field', + feedstock_group: 'other', + CDR_efficiency_annual_percent: 0.0, + CDR_consistentWithZero: 'Y', + CDRflux_tonsCO2_ha_yr: 0.0, + 'short reference': 'Dietzen and Rosing, 2023', + link: 'https://doi.org/10.1016/j.ijggc.2023.103872', + CDR_ineff_code_main: 'local', + count_group: 'soil', + application_rate_ton_ha_yr: 10.0, + particle_diameter_um: 2.6, + }, + { + estimate_type: 'model', + feedstock_group: 'olivine or dunite', + CDR_efficiency_annual_percent: 1.993421708362404, + CDR_consistentWithZero: 'N', + CDRflux_tonsCO2_ha_yr: 2.0, + 'short reference': 'Pogge von Strandman et al., 2022', + link: 'https://www.frontiersin.org/articles/10.3389/fclim.2022.827698/full', + CDR_ineff_code_main: 'none', + count_group: 'soil', + application_rate_ton_ha_yr: 127.0, + particle_diameter_um: 125.0, + }, + { + estimate_type: 'model', + feedstock_group: 'olivine or dunite', + CDR_efficiency_annual_percent: 12.957241104355626, + CDR_consistentWithZero: 'N', + CDRflux_tonsCO2_ha_yr: 13.0, + 'short reference': 'Pogge von Strandman et al., 2022', + link: 'https://www.frontiersin.org/articles/10.3389/fclim.2022.827698/full', + CDR_ineff_code_main: 'none', + count_group: 'soil', + application_rate_ton_ha_yr: 127.0, + particle_diameter_um: 125.0, + }, + { + estimate_type: 'laboratory', + feedstock_group: 'other', + CDR_efficiency_annual_percent: 1.8856341811993231, + CDR_consistentWithZero: 'N', + CDRflux_tonsCO2_ha_yr: 7.3, + 'short reference': 'Amann et al., 2022', + link: 'https://www.frontiersin.org/articles/10.3389/fclim.2022.929268/full', + CDR_ineff_code_main: 'local', + count_group: 'export_shallow', + application_rate_ton_ha_yr: 3226.0, + particle_diameter_um: 43.5, + }, + { + estimate_type: 'laboratory', + feedstock_group: 'other', + CDR_efficiency_annual_percent: 10.531593583274722, + CDR_consistentWithZero: 'N', + CDRflux_tonsCO2_ha_yr: 0.96, + 'short reference': 'Amann et al., 2022', + link: 'https://www.frontiersin.org/articles/10.3389/fclim.2022.929268/full', + CDR_ineff_code_main: 'local', + count_group: 'export_shallow', + application_rate_ton_ha_yr: 2279.0, + particle_diameter_um: 23.5, + }, + { + estimate_type: 'laboratory', + feedstock_group: 'other', + CDR_efficiency_annual_percent: 0.2079317495155515, + CDR_consistentWithZero: 'N', + CDRflux_tonsCO2_ha_yr: 2.19, + 'short reference': 'Amann et al., 2022', + link: 'https://www.frontiersin.org/articles/10.3389/fclim.2022.929268/full', + CDR_ineff_code_main: 'local', + count_group: 'export_shallow', + application_rate_ton_ha_yr: 3291.0, + particle_diameter_um: 74.0, + }, + { + estimate_type: 'laboratory', + feedstock_group: 'olivine or dunite', + CDR_efficiency_annual_percent: 0.1017942657299759, + CDR_consistentWithZero: 'N', + CDRflux_tonsCO2_ha_yr: 3.13, + 'short reference': 'Amann et al., 2022', + link: 'https://www.frontiersin.org/articles/10.3389/fclim.2022.929268/full', + CDR_ineff_code_main: 'local', + count_group: 'export_shallow', + application_rate_ton_ha_yr: 3661.0, + particle_diameter_um: 43.5, + }, + { + estimate_type: 'laboratory', + feedstock_group: 'olivine or dunite', + CDR_efficiency_annual_percent: 0.0864617773897847, + CDR_consistentWithZero: 'N', + CDRflux_tonsCO2_ha_yr: 2.9, + 'short reference': 'Amann et al., 2022', + link: 'https://www.frontiersin.org/articles/10.3389/fclim.2022.929268/full', + CDR_ineff_code_main: 'local', + count_group: 'export_shallow', + application_rate_ton_ha_yr: 3993.0, + particle_diameter_um: 1020.0, + }, + { + estimate_type: 'field', + feedstock_group: 'basalt', + CDR_efficiency_annual_percent: -0.9333333333333336, + CDR_consistentWithZero: 'Y', + CDRflux_tonsCO2_ha_yr: -0.07, + 'short reference': 'Larkin et al., 2022', + link: 'https://www.frontiersin.org/articles/10.3389/fclim.2022.959229/full', + CDR_ineff_code_main: 'local', + count_group: 'river', + application_rate_ton_ha_yr: 50.0, + particle_diameter_um: 1767.0, + }, + { + estimate_type: 'field', + feedstock_group: 'basalt', + CDR_efficiency_annual_percent: -1.866666666666667, + CDR_consistentWithZero: 'Y', + CDRflux_tonsCO2_ha_yr: -0.14, + 'short reference': 'Larkin et al., 2022', + link: 'https://www.frontiersin.org/articles/10.3389/fclim.2022.959229/full', + CDR_ineff_code_main: 'local', + count_group: 'river', + application_rate_ton_ha_yr: 50.0, + particle_diameter_um: 1767.0, + }, + { + estimate_type: 'field', + feedstock_group: 'basalt', + CDR_efficiency_annual_percent: 4.666666666666666, + CDR_consistentWithZero: 'N', + CDRflux_tonsCO2_ha_yr: 0.35, + 'short reference': 'Larkin et al., 2022', + link: 'https://www.frontiersin.org/articles/10.3389/fclim.2022.959229/full', + CDR_ineff_code_main: 'local', + count_group: 'river', + application_rate_ton_ha_yr: 50.0, + particle_diameter_um: 1767.0, + }, + { + estimate_type: 'field', + feedstock_group: 'olivine or dunite', + CDR_efficiency_annual_percent: 2.9702970297029703, + CDR_consistentWithZero: 'N', + CDRflux_tonsCO2_ha_yr: 1.5, + 'short reference': 'Deltares field trials, 2022', + link: 'https://publications.deltares.nl/11204378_000_0002.pdf', + CDR_ineff_code_main: 'none', + count_group: 'soil', + application_rate_ton_ha_yr: 40.4, + particle_diameter_um: 1500.0, + }, + { + estimate_type: 'field', + feedstock_group: 'olivine or dunite', + CDR_efficiency_annual_percent: 3.564356435643565, + CDR_consistentWithZero: 'N', + CDRflux_tonsCO2_ha_yr: 1.8, + 'short reference': 'Deltares field trials, 2022', + link: 'https://publications.deltares.nl/11204378_000_0002.pdf', + CDR_ineff_code_main: 'none', + count_group: 'soil', + application_rate_ton_ha_yr: 40.4, + particle_diameter_um: 1500.0, + }, + { + estimate_type: 'field', + feedstock_group: 'olivine or dunite', + CDR_efficiency_annual_percent: 3.1683168316831685, + CDR_consistentWithZero: 'N', + CDRflux_tonsCO2_ha_yr: 1.6, + 'short reference': 'Deltares field trials, 2022', + link: 'https://publications.deltares.nl/11204378_000_0002.pdf', + CDR_ineff_code_main: 'none', + count_group: 'soil', + application_rate_ton_ha_yr: 40.4, + particle_diameter_um: 1500.0, + }, + { + estimate_type: 'field', + feedstock_group: 'olivine or dunite', + CDR_efficiency_annual_percent: 4.158415841584159, + CDR_consistentWithZero: 'N', + CDRflux_tonsCO2_ha_yr: 2.1, + 'short reference': 'Deltares field trials, 2022', + link: 'https://publications.deltares.nl/11204378_000_0002.pdf', + CDR_ineff_code_main: 'none', + count_group: 'soil', + application_rate_ton_ha_yr: 40.4, + particle_diameter_um: 1500.0, + }, + { + estimate_type: 'field', + feedstock_group: 'olivine or dunite', + CDR_efficiency_annual_percent: 3.1683168316831685, + CDR_consistentWithZero: 'N', + CDRflux_tonsCO2_ha_yr: 1.6, + 'short reference': 'Deltares field trials, 2022', + link: 'https://publications.deltares.nl/11204378_000_0002.pdf', + CDR_ineff_code_main: 'none', + count_group: 'soil', + application_rate_ton_ha_yr: 40.4, + particle_diameter_um: 1500.0, + }, + { + estimate_type: 'field', + feedstock_group: 'olivine or dunite', + CDR_efficiency_annual_percent: 4.158415841584159, + CDR_consistentWithZero: 'N', + CDRflux_tonsCO2_ha_yr: 2.1, + 'short reference': 'Deltares field trials, 2022', + link: 'https://publications.deltares.nl/11204378_000_0002.pdf', + CDR_ineff_code_main: 'none', + count_group: 'soil', + application_rate_ton_ha_yr: 40.4, + particle_diameter_um: 1500.0, + }, + { + estimate_type: 'laboratory', + feedstock_group: 'basalt', + CDR_efficiency_annual_percent: 0.0728571428571428, + CDR_consistentWithZero: 'N', + CDRflux_tonsCO2_ha_yr: 0.0102, + 'short reference': 'Buckingham et al., 2022', + link: 'https://doi.org/10.1016/j.apgeochem.2022.105482', + CDR_ineff_code_main: 'downstream', + count_group: 'export_deep', + application_rate_ton_ha_yr: 100.0, + particle_diameter_um: 187.0, + }, + { + estimate_type: 'laboratory', + feedstock_group: 'wollastonite', + CDR_efficiency_annual_percent: 0.6926987319144182, + CDR_consistentWithZero: 'N', + CDRflux_tonsCO2_ha_yr: 12.4, + 'short reference': 'Wood et al., 2023', + link: 'https://doi.org/10.1016/j.apgeochem.2022.105511', + CDR_ineff_code_main: 'local', + count_group: 'export_shallow', + application_rate_ton_ha_yr: 1989.0, + particle_diameter_um: 93.8, + }, + { + estimate_type: 'laboratory', + feedstock_group: 'wollastonite', + CDR_efficiency_annual_percent: 0.5642142897044857, + CDR_consistentWithZero: 'N', + CDRflux_tonsCO2_ha_yr: 10.1, + 'short reference': 'Wood et al., 2023', + link: 'https://doi.org/10.1016/j.apgeochem.2022.105511', + CDR_ineff_code_main: 'local', + count_group: 'export_shallow', + application_rate_ton_ha_yr: 1989.0, + particle_diameter_um: 93.8, + }, + { + estimate_type: 'laboratory', + feedstock_group: 'wollastonite', + CDR_efficiency_annual_percent: 19.457013574660635, + CDR_consistentWithZero: 'N', + CDRflux_tonsCO2_ha_yr: 38.7, + 'short reference': 'Wood et al., 2023', + link: 'https://doi.org/10.1016/j.apgeochem.2022.105511', + CDR_ineff_code_main: 'local', + count_group: 'export_shallow', + application_rate_ton_ha_yr: 221.0, + particle_diameter_um: 93.8, + }, + { + estimate_type: 'laboratory', + feedstock_group: 'wollastonite', + CDR_efficiency_annual_percent: 21.2166918049271, + CDR_consistentWithZero: 'N', + CDRflux_tonsCO2_ha_yr: 42.2, + 'short reference': 'Wood et al., 2023', + link: 'https://doi.org/10.1016/j.apgeochem.2022.105511', + CDR_ineff_code_main: 'local', + count_group: 'export_shallow', + application_rate_ton_ha_yr: 221.0, + particle_diameter_um: 93.8, + }, + { + estimate_type: 'model', + feedstock_group: 'basalt', + CDR_efficiency_annual_percent: 0.5, + CDR_consistentWithZero: 'Y', + CDRflux_tonsCO2_ha_yr: 0.14, + 'short reference': 'Rinder and von Hagke, 2021', + link: 'https://doi.org/10.1016/j.jclepro.2021.128178', + CDR_ineff_code_main: 'upstream', + count_group: 'soil', + application_rate_ton_ha_yr: 100.0, + particle_diameter_um: 100.0, + }, + { + estimate_type: 'model', + feedstock_group: 'basalt', + CDR_efficiency_annual_percent: 2.964285714285714, + CDR_consistentWithZero: 'N', + CDRflux_tonsCO2_ha_yr: 0.83, + 'short reference': 'Rinder and von Hagke, 2021', + link: 'https://doi.org/10.1016/j.jclepro.2021.128178', + CDR_ineff_code_main: 'upstream', + count_group: 'soil', + application_rate_ton_ha_yr: 100.0, + particle_diameter_um: 10.0, + }, + { + estimate_type: 'model', + feedstock_group: 'basalt', + CDR_efficiency_annual_percent: 3.928571428571429, + CDR_consistentWithZero: 'N', + CDRflux_tonsCO2_ha_yr: 1.1, + 'short reference': 'Rinder and von Hagke, 2021', + link: 'https://doi.org/10.1016/j.jclepro.2021.128178', + CDR_ineff_code_main: 'upstream', + count_group: 'soil', + application_rate_ton_ha_yr: 100.0, + particle_diameter_um: 1.0, + }, + { + estimate_type: 'model', + feedstock_group: 'basalt', + CDR_efficiency_annual_percent: 1.2272727272727273, + CDR_consistentWithZero: 'N', + CDRflux_tonsCO2_ha_yr: 1.08, + 'short reference': 'Rinder and von Hagke, 2021', + link: 'https://doi.org/10.1016/j.jclepro.2021.128178', + CDR_ineff_code_main: 'upstream', + count_group: 'soil', + application_rate_ton_ha_yr: 100.0, + particle_diameter_um: 100.0, + }, + { + estimate_type: 'model', + feedstock_group: 'basalt', + CDR_efficiency_annual_percent: 4.670454545454546, + CDR_consistentWithZero: 'N', + CDRflux_tonsCO2_ha_yr: 4.11, + 'short reference': 'Rinder and von Hagke, 2021', + link: 'https://doi.org/10.1016/j.jclepro.2021.128178', + CDR_ineff_code_main: 'upstream', + count_group: 'soil', + application_rate_ton_ha_yr: 100.0, + particle_diameter_um: 10.0, + }, + { + estimate_type: 'model', + feedstock_group: 'basalt', + CDR_efficiency_annual_percent: 8.045454545454547, + CDR_consistentWithZero: 'N', + CDRflux_tonsCO2_ha_yr: 7.08, + 'short reference': 'Rinder and von Hagke, 2021', + link: 'https://doi.org/10.1016/j.jclepro.2021.128178', + CDR_ineff_code_main: 'upstream', + count_group: 'soil', + application_rate_ton_ha_yr: 100.0, + particle_diameter_um: 1.0, + }, + { + estimate_type: 'model', + feedstock_group: 'basalt', + CDR_efficiency_annual_percent: 4.0, + CDR_consistentWithZero: 'N', + CDRflux_tonsCO2_ha_yr: 0.56, + 'short reference': 'Kelland et al., 2020', + link: 'https://doi.org/10.1111/gcb.15089', + CDR_ineff_code_main: 'local', + count_group: 'export_shallow', + application_rate_ton_ha_yr: 100.0, + particle_diameter_um: 1250.0, + }, + { + estimate_type: 'field', + feedstock_group: 'wollastonite', + CDR_efficiency_annual_percent: 100.0, + CDR_consistentWithZero: 'N', + CDRflux_tonsCO2_ha_yr: 0.5952, + 'short reference': 'Haque et al., 2020a', + link: 'https://doi.org/10.1016/j.ijggc.2020.103017', + CDR_ineff_code_main: 'local', + count_group: 'soil', + application_rate_ton_ha_yr: 1.24, + particle_diameter_um: 13.8, + }, + { + estimate_type: 'field', + feedstock_group: 'wollastonite', + CDR_efficiency_annual_percent: 43.333333333333336, + CDR_consistentWithZero: 'N', + CDRflux_tonsCO2_ha_yr: 1.04, + 'short reference': 'Haque et al., 2020a', + link: 'https://doi.org/10.1016/j.ijggc.2020.103017', + CDR_ineff_code_main: 'local', + count_group: 'soil', + application_rate_ton_ha_yr: 5.0, + particle_diameter_um: 8.2, + }, + { + estimate_type: 'field', + feedstock_group: 'wollastonite', + CDR_efficiency_annual_percent: 47.5, + CDR_consistentWithZero: 'N', + CDRflux_tonsCO2_ha_yr: 0.57, + 'short reference': 'Haque et al., 2020a', + link: 'https://doi.org/10.1016/j.ijggc.2020.103017', + CDR_ineff_code_main: 'local', + count_group: 'soil', + application_rate_ton_ha_yr: 2.5, + particle_diameter_um: 8.2, + }, + { + estimate_type: 'field', + feedstock_group: 'wollastonite', + CDR_efficiency_annual_percent: 40.27777777777778, + CDR_consistentWithZero: 'N', + CDRflux_tonsCO2_ha_yr: 0.29, + 'short reference': 'Haque et al., 2020a', + link: 'https://doi.org/10.1016/j.ijggc.2020.103017', + CDR_ineff_code_main: 'local', + count_group: 'soil', + application_rate_ton_ha_yr: 1.5, + particle_diameter_um: 8.2, + }, + { + estimate_type: 'laboratory', + feedstock_group: 'wollastonite', + CDR_efficiency_annual_percent: 5.833333333333333, + CDR_consistentWithZero: 'Y', + CDRflux_tonsCO2_ha_yr: 0.84, + 'short reference': 'Haque et al., 2020b', + link: 'https://doi.org/10.3389/fpls.2020.01012', + CDR_ineff_code_main: 'local', + count_group: 'soil', + application_rate_ton_ha_yr: 30.0, + particle_diameter_um: 63.7, + }, + { + estimate_type: 'laboratory', + feedstock_group: 'wollastonite', + CDR_efficiency_annual_percent: 4.500000000000001, + CDR_consistentWithZero: 'N', + CDRflux_tonsCO2_ha_yr: 2.16, + 'short reference': 'Haque et al., 2020b', + link: 'https://doi.org/10.3389/fpls.2020.01012', + CDR_ineff_code_main: 'local', + count_group: 'soil', + application_rate_ton_ha_yr: 100.0, + particle_diameter_um: 63.7, + }, + { + estimate_type: 'laboratory', + feedstock_group: 'wollastonite', + CDR_efficiency_annual_percent: 6.5, + CDR_consistentWithZero: 'N', + CDRflux_tonsCO2_ha_yr: 4.68, + 'short reference': 'Haque et al., 2020b', + link: 'https://doi.org/10.3389/fpls.2020.01012', + CDR_ineff_code_main: 'local', + count_group: 'soil', + application_rate_ton_ha_yr: 150.0, + particle_diameter_um: 63.7, + }, + { + estimate_type: 'laboratory', + feedstock_group: 'wollastonite', + CDR_efficiency_annual_percent: 7.625, + CDR_consistentWithZero: 'N', + CDRflux_tonsCO2_ha_yr: 7.32, + 'short reference': 'Haque et al., 2020b', + link: 'https://doi.org/10.3389/fpls.2020.01012', + CDR_ineff_code_main: 'local', + count_group: 'soil', + application_rate_ton_ha_yr: 200.0, + particle_diameter_um: 63.7, + }, + { + estimate_type: 'laboratory', + feedstock_group: 'wollastonite', + CDR_efficiency_annual_percent: 6.666666666666667, + CDR_consistentWithZero: 'N', + CDRflux_tonsCO2_ha_yr: 9.6, + 'short reference': 'Haque et al., 2020b', + link: 'https://doi.org/10.3389/fpls.2020.01012', + CDR_ineff_code_main: 'local', + count_group: 'soil', + application_rate_ton_ha_yr: 300.0, + particle_diameter_um: 63.7, + }, + { + estimate_type: 'laboratory', + feedstock_group: 'wollastonite', + CDR_efficiency_annual_percent: 0.75, + CDR_consistentWithZero: 'N', + CDRflux_tonsCO2_ha_yr: 1.44, + 'short reference': 'Haque et al., 2020b', + link: 'https://doi.org/10.3389/fpls.2020.01012', + CDR_ineff_code_main: 'local', + count_group: 'soil', + application_rate_ton_ha_yr: 400.0, + particle_diameter_um: 63.7, + }, + { + estimate_type: 'laboratory', + feedstock_group: 'wollastonite', + CDR_efficiency_annual_percent: 7.5, + CDR_consistentWithZero: 'N', + CDRflux_tonsCO2_ha_yr: 1.08, + 'short reference': 'Haque et al., 2020b', + link: 'https://doi.org/10.3389/fpls.2020.01012', + CDR_ineff_code_main: 'local', + count_group: 'soil', + application_rate_ton_ha_yr: 30.0, + particle_diameter_um: 63.7, + }, + { + estimate_type: 'laboratory', + feedstock_group: 'wollastonite', + CDR_efficiency_annual_percent: 5.5, + CDR_consistentWithZero: 'N', + CDRflux_tonsCO2_ha_yr: 2.64, + 'short reference': 'Haque et al., 2020b', + link: 'https://doi.org/10.3389/fpls.2020.01012', + CDR_ineff_code_main: 'local', + count_group: 'soil', + application_rate_ton_ha_yr: 100.0, + particle_diameter_um: 63.7, + }, + { + estimate_type: 'laboratory', + feedstock_group: 'wollastonite', + CDR_efficiency_annual_percent: 5.5, + CDR_consistentWithZero: 'N', + CDRflux_tonsCO2_ha_yr: 3.96, + 'short reference': 'Haque et al., 2020b', + link: 'https://doi.org/10.3389/fpls.2020.01012', + CDR_ineff_code_main: 'local', + count_group: 'soil', + application_rate_ton_ha_yr: 150.0, + particle_diameter_um: 63.7, + }, + { + estimate_type: 'laboratory', + feedstock_group: 'wollastonite', + CDR_efficiency_annual_percent: 4.375, + CDR_consistentWithZero: 'N', + CDRflux_tonsCO2_ha_yr: 4.2, + 'short reference': 'Haque et al., 2020b', + link: 'https://doi.org/10.3389/fpls.2020.01012', + CDR_ineff_code_main: 'local', + count_group: 'soil', + application_rate_ton_ha_yr: 200.0, + particle_diameter_um: 63.7, + }, + { + estimate_type: 'laboratory', + feedstock_group: 'wollastonite', + CDR_efficiency_annual_percent: 0.0, + CDR_consistentWithZero: 'Y', + CDRflux_tonsCO2_ha_yr: 0.0, + 'short reference': 'Haque et al., 2020b', + link: 'https://doi.org/10.3389/fpls.2020.01012', + CDR_ineff_code_main: 'local', + count_group: 'soil', + application_rate_ton_ha_yr: 30.0, + particle_diameter_um: 63.7, + }, + { + estimate_type: 'laboratory', + feedstock_group: 'wollastonite', + CDR_efficiency_annual_percent: 0.0, + CDR_consistentWithZero: 'Y', + CDRflux_tonsCO2_ha_yr: 0.0, + 'short reference': 'Haque et al., 2020b', + link: 'https://doi.org/10.3389/fpls.2020.01012', + CDR_ineff_code_main: 'local', + count_group: 'soil', + application_rate_ton_ha_yr: 100.0, + particle_diameter_um: 63.7, + }, + { + estimate_type: 'laboratory', + feedstock_group: 'wollastonite', + CDR_efficiency_annual_percent: 0.6666666666666666, + CDR_consistentWithZero: 'N', + CDRflux_tonsCO2_ha_yr: 0.48, + 'short reference': 'Haque et al., 2020b', + link: 'https://doi.org/10.3389/fpls.2020.01012', + CDR_ineff_code_main: 'local', + count_group: 'soil', + application_rate_ton_ha_yr: 150.0, + particle_diameter_um: 63.7, + }, + { + estimate_type: 'laboratory', + feedstock_group: 'wollastonite', + CDR_efficiency_annual_percent: 0.75, + CDR_consistentWithZero: 'N', + CDRflux_tonsCO2_ha_yr: 0.72, + 'short reference': 'Haque et al., 2020b', + link: 'https://doi.org/10.3389/fpls.2020.01012', + CDR_ineff_code_main: 'local', + count_group: 'soil', + application_rate_ton_ha_yr: 200.0, + particle_diameter_um: 63.7, + }, + { + estimate_type: 'laboratory', + feedstock_group: 'wollastonite', + CDR_efficiency_annual_percent: 0.5833333333333333, + CDR_consistentWithZero: 'N', + CDRflux_tonsCO2_ha_yr: 0.84, + 'short reference': 'Haque et al., 2020b', + link: 'https://doi.org/10.3389/fpls.2020.01012', + CDR_ineff_code_main: 'local', + count_group: 'soil', + application_rate_ton_ha_yr: 300.0, + particle_diameter_um: 63.7, + }, + { + estimate_type: 'laboratory', + feedstock_group: 'wollastonite', + CDR_efficiency_annual_percent: 0.1875, + CDR_consistentWithZero: 'Y', + CDRflux_tonsCO2_ha_yr: 0.36, + 'short reference': 'Haque et al., 2020b', + link: 'https://doi.org/10.3389/fpls.2020.01012', + CDR_ineff_code_main: 'local', + count_group: 'soil', + application_rate_ton_ha_yr: 400.0, + particle_diameter_um: 63.7, + }, + { + estimate_type: 'laboratory', + feedstock_group: 'olivine or dunite', + CDR_efficiency_annual_percent: 100.0, + CDR_consistentWithZero: 'N', + CDRflux_tonsCO2_ha_yr: 6.9, + 'short reference': 'Dietzen et al., 2018', + link: 'https://doi.org/10.1016/j.ijggc.2018.05.007', + CDR_ineff_code_main: 'none', + count_group: 'soil', + application_rate_ton_ha_yr: 10.0, + particle_diameter_um: 20.0, + }, + { + estimate_type: 'laboratory', + feedstock_group: 'olivine or dunite', + CDR_efficiency_annual_percent: 48.30917874396136, + CDR_consistentWithZero: 'N', + CDRflux_tonsCO2_ha_yr: 16.6, + 'short reference': 'Dietzen et al., 2018', + link: 'https://doi.org/10.1016/j.ijggc.2018.05.007', + CDR_ineff_code_main: 'none', + count_group: 'soil', + application_rate_ton_ha_yr: 49.8, + particle_diameter_um: 20.0, + }, + { + estimate_type: 'laboratory', + feedstock_group: 'olivine or dunite', + CDR_efficiency_annual_percent: 24.028629856850717, + CDR_consistentWithZero: 'N', + CDRflux_tonsCO2_ha_yr: 0.47, + 'short reference': 'ten Berge et al., 2012', + link: 'https://doi.org/10.1371/journal.pone.0042098', + CDR_ineff_code_main: 'local', + count_group: 'soil', + application_rate_ton_ha_yr: 1.63, + particle_diameter_um: 50.0, + }, + { + estimate_type: 'laboratory', + feedstock_group: 'olivine or dunite', + CDR_efficiency_annual_percent: 8.997955010224949, + CDR_consistentWithZero: 'N', + CDRflux_tonsCO2_ha_yr: 0.88, + 'short reference': 'ten Berge et al., 2012', + link: 'https://doi.org/10.1371/journal.pone.0042098', + CDR_ineff_code_main: 'local', + count_group: 'soil', + application_rate_ton_ha_yr: 8.15, + particle_diameter_um: 50.0, + }, + { + estimate_type: 'laboratory', + feedstock_group: 'olivine or dunite', + CDR_efficiency_annual_percent: 3.378378378378378, + CDR_consistentWithZero: 'N', + CDRflux_tonsCO2_ha_yr: 1.65, + 'short reference': 'ten Berge et al., 2012', + link: 'https://doi.org/10.1371/journal.pone.0042098', + CDR_ineff_code_main: 'local', + count_group: 'soil', + application_rate_ton_ha_yr: 40.7, + particle_diameter_um: 50.0, + }, + { + estimate_type: 'laboratory', + feedstock_group: 'olivine or dunite', + CDR_efficiency_annual_percent: 1.772875816993464, + CDR_consistentWithZero: 'N', + CDRflux_tonsCO2_ha_yr: 4.34, + 'short reference': 'ten Berge et al., 2012', + link: 'https://doi.org/10.1371/journal.pone.0042098', + CDR_ineff_code_main: 'local', + count_group: 'soil', + application_rate_ton_ha_yr: 204.0, + particle_diameter_um: 50.0, + }, + { + estimate_type: 'field', + feedstock_group: 'basalt', + CDR_efficiency_annual_percent: null, + CDR_consistentWithZero: 'N', + CDRflux_tonsCO2_ha_yr: 0.62, + 'short reference': 'Linke et al., preprint', + link: 'https://doi.org/10.21203/rs.3.rs-3439312/v1', + CDR_ineff_code_main: 'local', + count_group: 'export_deep', + application_rate_ton_ha_yr: 6.5, + particle_diameter_um: 36.0, + }, + { + estimate_type: 'laboratory', + feedstock_group: 'basalt', + CDR_efficiency_annual_percent: 28.369565217391308, + CDR_consistentWithZero: 'N', + CDRflux_tonsCO2_ha_yr: 2.61, + 'short reference': 'Reershemius et al., 2023', + link: 'https://doi.org/10.1021/acs.est.3c03609', + CDR_ineff_code_main: 'local', + count_group: 'export_shallow', + application_rate_ton_ha_yr: 50.0, + particle_diameter_um: 35.0, + }, + { + estimate_type: 'laboratory', + feedstock_group: 'basalt', + CDR_efficiency_annual_percent: 17.717391304347828, + CDR_consistentWithZero: 'N', + CDRflux_tonsCO2_ha_yr: 1.63, + 'short reference': 'Reershemius et al., 2023', + link: 'https://doi.org/10.1021/acs.est.3c03609', + CDR_ineff_code_main: 'local', + count_group: 'export_shallow', + application_rate_ton_ha_yr: 50.0, + particle_diameter_um: 35.0, + }, + { + estimate_type: 'laboratory', + feedstock_group: 'basalt', + CDR_efficiency_annual_percent: 31.086956521739133, + CDR_consistentWithZero: 'N', + CDRflux_tonsCO2_ha_yr: 2.86, + 'short reference': 'Reershemius et al., 2023', + link: 'https://doi.org/10.1021/acs.est.3c03609', + CDR_ineff_code_main: 'local', + count_group: 'export_shallow', + application_rate_ton_ha_yr: 50.0, + particle_diameter_um: 35.0, + }, + { + estimate_type: 'laboratory', + feedstock_group: 'basalt', + CDR_efficiency_annual_percent: 17.608695652173918, + CDR_consistentWithZero: 'N', + CDRflux_tonsCO2_ha_yr: 1.62, + 'short reference': 'Reershemius et al., 2023', + link: 'https://doi.org/10.1021/acs.est.3c03609', + CDR_ineff_code_main: 'local', + count_group: 'export_shallow', + application_rate_ton_ha_yr: 50.0, + particle_diameter_um: 35.0, + }, +] +export default data diff --git a/articles/enhanced-weathering-fluxes/components/diagram.js b/articles/enhanced-weathering-fluxes/components/diagram.js new file mode 100644 index 00000000..d4abda6b --- /dev/null +++ b/articles/enhanced-weathering-fluxes/components/diagram.js @@ -0,0 +1,275 @@ +import { Box, useThemeUI } from 'theme-ui' + +const Desktop = ({ sx }) => { + const { theme } = useThemeUI() + + return ( + + + + + + + + + + + + + + + + + + + + + + + + + + + ) +} +const Mobile = ({ sx }) => { + const { theme } = useThemeUI() + + return ( + + + + + + + + + + + + + + + + + + + + + + + + + + + ) +} + +const Diagram = () => { + return ( + <> + + + + ) +} + +export default Diagram diff --git a/articles/enhanced-weathering-fluxes/components/erw-efficiencies.js b/articles/enhanced-weathering-fluxes/components/erw-efficiencies.js new file mode 100644 index 00000000..8ea87d73 --- /dev/null +++ b/articles/enhanced-weathering-fluxes/components/erw-efficiencies.js @@ -0,0 +1,210 @@ +import React, { useState, useMemo } from 'react' +import { Box, Flex, useThemeUI } from 'theme-ui' +import { useBreakpointIndex } from '@theme-ui/match-media' +import { + Axis, + AxisLabel, + Chart, + Plot, + TickLabels, + Ticks, +} from '@carbonplan/charts' +import { Row, Column } from '@carbonplan/components' +import { mix } from '@theme-ui/color' + +import EstFeedSelect from './est-feed-select' +import { replacePlaceholder } from './utils' +import Bar from './custom-bar' +import Selected from './selected' + +import data from './data' + +const options = [ + { + value: 'annual', + key: 'CDR_efficiency_annual_percent', + color: 'grey', + unit: '%', + }, +] + +const noDataValue = -999 +const Y_TICKS = [ + 0.0001, 0.0002, 0.0003, 0.0004, 0.0005, 0.0006, 0.0007, 0.0008, 0.0009, 0.001, + 0.002, 0.003, 0.004, 0.005, 0.006, 0.007, 0.008, 0.009, 0.01, 0.02, 0.03, + 0.04, 0.05, 0.06, 0.07, 0.08, 0.09, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, + 0.9, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 20, 30, 40, 50, 60, 70, 80, 90, 100, +] + +const ErwEfficiencies = ({ children }) => { + const { theme } = useThemeUI() + const [estimateType, setEstimateType] = useState(null) + const [feedstockType, setFeedstockType] = useState(null) + const [log, setLog] = useState(false) + const [selected, setSelected] = useState(null) + + const selectedOption = options[0] + + const index = useBreakpointIndex({ defaultIndex: 2 }) + const chartPadding = { left: index === 3 ? 80 : 70, bottom: 32 } + + const sortedData = useMemo(() => { + return data + .filter( + (d) => + !isNaN(d[selectedOption.key]) && + d[selectedOption.key] !== null && + d.CDR_consistentWithZero !== 'Y' && + d.CDRflux_tonsCO2_ha_yr > 0 + ) + .sort((a, b) => b[selectedOption.key] - a[selectedOption.key]) + }, [selectedOption]) + + const unfilteredOptionData = useMemo(() => { + return sortedData.map((item, index) => [ + index + 1, + item[selectedOption.key], + ]) + }, [selectedOption, sortedData]) + + const filteredOptionData = useMemo(() => { + setSelected(null) + const newData = sortedData.map((item, index) => { + const estimateMatch = + estimateType === null || item.estimate_type === estimateType + const feedstockMatch = + feedstockType === null || item.feedstock_group === feedstockType + if (estimateMatch && feedstockMatch) { + return [index + 1, item[selectedOption.key]] + } else { + return [index + 1, noDataValue] + } + }) + return newData + }, [selectedOption, estimateType, feedstockType, sortedData]) + + const domain = [0, unfilteredOptionData.length] + const range = log ? [0.0001, 100] : [0, 100] + const barsFilled = unfilteredOptionData.map((_, i) => [i + 1, range[1]]) + const barsFilledSelected = filteredOptionData.map((d) => [ + d[0], + d[1] === noDataValue ? 0 : range[1], + ]) + const barsFilledUserSelected = barsFilled.map((d, i) => [ + d[0], + selected && i === selected.index ? range[1] : 0, + ]) + + return ( + <> + + + + + + + + + + {filteredOptionData.filter((d) => d[1] !== noDataValue).length === 0 + ? 'No results for this combination' + : ''} + + + + + + `${d}%`} + /> + Removal efficiency + + Individual estimates + + + setSelected(null)} + width={1} + stroke={theme.rawColors.background} + strokeWidth={0.1} + /> + + + { + e.target.style.opacity = 0.3 + }} + onMouseLeave={(e) => { + e.target.style.opacity = 0 + }} + onBarClick={(d) => { + setSelected({ ...sortedData[d[0] - 1], index: d[0] - 1 }) + }} + width={1} + /> + setSelected(null)} + /> + + + + {replacePlaceholder(children, log, setLog)} + + ) +} + +export default ErwEfficiencies diff --git a/articles/enhanced-weathering-fluxes/components/erw-estimates.js b/articles/enhanced-weathering-fluxes/components/erw-estimates.js new file mode 100644 index 00000000..c358bb7c --- /dev/null +++ b/articles/enhanced-weathering-fluxes/components/erw-estimates.js @@ -0,0 +1,225 @@ +import React, { useMemo } from 'react' +import { Box, useThemeUI } from 'theme-ui' +import { + Chart, + AxisLabel, + Ticks, + TickLabels, + Axis, + Plot, + Bar, + StackedBar, +} from '@carbonplan/charts' +import { mix } from '@theme-ui/color' +import { useBreakpointIndex } from '@theme-ui/match-media' + +import data from './data' + +const createLogHistogramBins = (data, stacked, numBins) => { + const min = Math.min(...data) + const max = Math.max(...data) + const logMin = Math.log10(min) + const logMax = Math.log10(max) + const logRange = logMax - logMin + const bins = new Array(numBins).fill(0) + const stackedBins = new Array(numBins).fill(0) + const formattedBins = [] + + data.forEach((value) => { + if (value > 0) { + const binIndex = Math.floor( + (numBins * (Math.log10(value) - logMin)) / logRange + ) + if (binIndex >= 0 && binIndex < numBins) { + bins[binIndex] += 1 + } + } + }) + + if (stacked) { + stacked.forEach((value) => { + if (value > 0) { + const binIndex = Math.floor( + (numBins * (Math.log10(value) - logMin)) / logRange + ) + if (binIndex >= 0 && binIndex < numBins) { + stackedBins[binIndex] += 1 + } + } + }) + } + + for (let i = 0; i < numBins; i++) { + const binStart = Math.pow(10, logMin + (i * logRange) / numBins) + const binEnd = Math.pow(10, logMin + ((i + 1) * logRange) / numBins) + const binMidpoint = (binStart + binEnd) / 2 + formattedBins.push([ + binMidpoint, + ...(stacked ? [0, stackedBins[i], bins[i]] : [bins[i]]), + ]) + } + return formattedBins +} + +const nonPositivePlaceholder = 0.000071 + +const options = [ + { + value: 'carbon removal', + key: 'CDRflux_tonsCO2_ha_yr', + color: 'grey', + unit: 'tons CO₂ / ha / yr', + xTicks: [nonPositivePlaceholder, 0.0001, 0.001, 0.01, 0.1, 1, 10], + }, +] + +const ErwEstimates = ({ numBins = 20, columnFilters, filterLabel }) => { + const { theme } = useThemeUI() + const index = useBreakpointIndex({ defaultIndex: 2 }) + const { unfiltered, filtered } = useMemo(() => { + const processData = (data, applyFilters = false) => + data.reduce( + (acc, d) => { + const isRelevant = + !applyFilters || + Object.keys(columnFilters).every( + (key) => d[key] === columnFilters[key] + ) + + if (isRelevant) { + if (d.CDR_consistentWithZero === 'Y') { + acc.negative.push(d) + } else if (d.CDR_consistentWithZero === 'N') { + // need additional check since some values are 0 even tho CDR_consistentWithZero is N + if (d[options[0].key] > 0) { + acc.positive.push(+d[options[0].key]) + } + } else { + console.error('CDR_consistentWithZero is not Y or N', d) + } + } + return acc + }, + { positive: [], negative: [] } + ) + + return { + unfiltered: processData(data), + filtered: columnFilters ? processData(data, true) : null, + } + }, [columnFilters]) + + const bars = createLogHistogramBins( + unfiltered.positive, + filtered?.positive, + numBins + ) + + if (filtered) { + bars.unshift([ + nonPositivePlaceholder, + 0, + filtered.negative.length, + unfiltered.negative.length, + ]) + } else { + bars.unshift([nonPositivePlaceholder, unfiltered.negative.length]) + } + + const domain = [0.00005, Math.max(...unfiltered.positive)] + const range = [0, Math.max(...bars.map((bar) => bar[bar.length - 1])) + 1] + + const fullGrey = mix('grey', 'background', 0.9)(theme) + const lightGrey = mix('grey', 'background', 0.2)(theme) + + const barColors = [ + `url(#hatchPattern-0)`, + ...Array(bars.length - 1).fill(fullGrey), + ] + + const stackedBarColors = [ + ['url(#hatchPattern-0)', 'url(#hatchPattern-1)'], + ...Array(bars.length - 1).fill([fullGrey, lightGrey]), + ] + + return ( + + + + + {[fullGrey, lightGrey].map((color, i) => ( + + + + ))} + + {filtered ? ( + + ) : ( + + )} + + Number of Estimates + + {options[0].value} + + + + + + { + if (d === 0.0001) return + if (d === nonPositivePlaceholder) { + return 'none' + } + return d + }} + /> + + + + + {filterLabel + ? filtered.negative.length + filtered.positive.length + : unfiltered.negative.length + unfiltered.positive.length}{' '} + + {filterLabel ?? 'total estimates'} + + + ) +} + +export default ErwEstimates diff --git a/articles/enhanced-weathering-fluxes/components/est-feed-select.js b/articles/enhanced-weathering-fluxes/components/est-feed-select.js new file mode 100644 index 00000000..5630cc8c --- /dev/null +++ b/articles/enhanced-weathering-fluxes/components/est-feed-select.js @@ -0,0 +1,105 @@ +import React from 'react' +import { Box, Flex } from 'theme-ui' +import { Column } from '@carbonplan/components' + +import Selector from './selector' +import data from './data' + +const ALL_EST_TYPES = 'All' +const ALL_FEED_TYPES = 'All' + +const estimateTypes = [ + ALL_EST_TYPES, + ...new Set( + data.map((item) => item.estimate_type).sort((a, b) => a.localeCompare(b)) + ), +] +const feedstockTypes = [ + ALL_FEED_TYPES, + ...new Set( + data + .map((item) => item.feedstock_group) + .filter((d) => d !== null && d !== '' && d !== 'carbonate') + .sort((a, b) => { + if (a === 'other') return 1 + if (b === 'other') return -1 + return a.localeCompare(b) + }) + ), +] + +const EstFeedSelect = ({ + estimateType, + setEstimateType, + feedstockType, + setFeedstockType, +}) => { + const estType = estimateType === null ? ALL_EST_TYPES : estimateType + const feedType = feedstockType === null ? ALL_FEED_TYPES : feedstockType + + const handleChange = (value, setType, allTypesConst) => { + if (value === allTypesConst) { + setType(null) + } else { + setType(value) + } + } + + return ( + <> + + + + Estimate type + + + handleChange(value, setEstimateType, ALL_EST_TYPES) + } + options={estimateTypes} + color='green' + onReset={!estimateType ? null : () => setEstimateType(null)} + /> + + + + + + Feedstock + + + + handleChange(value, setFeedstockType, ALL_FEED_TYPES) + } + options={feedstockTypes} + color='purple' + onReset={!feedstockType ? null : () => setFeedstockType(null)} + /> + + + + ) +} + +export default EstFeedSelect diff --git a/articles/enhanced-weathering-fluxes/components/hatching-key.js b/articles/enhanced-weathering-fluxes/components/hatching-key.js new file mode 100644 index 00000000..ea59aa9b --- /dev/null +++ b/articles/enhanced-weathering-fluxes/components/hatching-key.js @@ -0,0 +1,53 @@ +import React from 'react' +import { Box, useThemeUI } from 'theme-ui' +import { mix } from '@theme-ui/color' + +export const HatchingKey = () => { + const { theme } = useThemeUI() + const fullGrey = mix('grey', 'background', 0.9)(theme) + + return ( + + ( + + + + + + + + + ) + + ) +} + +export default HatchingKey diff --git a/articles/enhanced-weathering-fluxes/components/scatter-chart.js b/articles/enhanced-weathering-fluxes/components/scatter-chart.js new file mode 100644 index 00000000..1203bd0e --- /dev/null +++ b/articles/enhanced-weathering-fluxes/components/scatter-chart.js @@ -0,0 +1,191 @@ +import React, { useMemo, useState } from 'react' +import { + Axis, + AxisLabel, + Chart, + Circle, + Plot, + TickLabels, + Ticks, +} from '@carbonplan/charts' +import { Column, Row } from '@carbonplan/components' +import { Box, Flex, useThemeUI } from 'theme-ui' + +import EstFeedSelect from './est-feed-select' +import { replacePlaceholder } from './utils' +import { alpha, mix } from '@theme-ui/color' +import Selected from './selected' + +import data from './data' + +const AXES = { + particle_diameter_um: { + label: 'Particle diameter', + value: 'particle_diameter_um', + units: 'µm', + }, + application_rate_ton_ha_yr: { + label: 'Application rate', + value: 'application_rate_ton_ha_yr', + units: 'tons / ha / yr', + }, +} + +const X_TICKS = [ + 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, + 20, 30, 40, 50, 60, 70, 80, 90, 100, 200, 300, 400, 500, 600, 700, 800, 900, + 1000, 2000, 3000, 4000, 5000, 6000, 7000, 8000, 9000, 10000, +] +const Y_TICKS = [ + 0.0001, 0.0002, 0.0003, 0.0004, 0.0005, 0.0006, 0.0007, 0.0008, 0.0009, 0.001, + 0.002, 0.003, 0.004, 0.005, 0.006, 0.007, 0.008, 0.009, 0.01, 0.02, 0.03, + 0.04, 0.05, 0.06, 0.07, 0.08, 0.09, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, + 0.9, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 20, 30, 40, 50, 60, 70, 80, 90, 100, +] + +const ScatterChart = ({ children }) => { + const { theme } = useThemeUI() + const [xAxis, setXAxis] = useState('particle_diameter_um') + const [estimateType, setEstimateType] = useState('laboratory') + const [feedstockType, setFeedstockType] = useState(null) + const [selected, setSelected] = useState(null) + const [log, setLog] = useState(false) + + const scatters = useMemo(() => { + setSelected(null) + return data.reduce( + (a, item) => { + const { + CDRflux_tonsCO2_ha_yr: cdr, + feedstock_group: feedstock, + estimate_type, + [xAxis]: xValue, + CDR_consistentWithZero: zero, + } = item + if (cdr > 0 && zero === 'N' && xValue !== 'NA' && xValue !== null) { + const isEstimateMatch = + estimateType === null || estimate_type === estimateType + const isFeedstockMatch = + feedstockType === null || feedstock === feedstockType + if (isEstimateMatch && isFeedstockMatch) { + a.selected.push({ ...item, x: xValue, y: cdr }) + } else { + a.unselected.push({ ...item, x: xValue, y: cdr }) + } + } + return a + }, + { selected: [], unselected: [] } + ) + }, [xAxis, feedstockType, estimateType]) + + return ( + <> + + + + + + + + + + + {AXES[xAxis].label} + + + CDR + + + + + + setSelected(null)}> + {scatters.unselected.map((scatter, i) => ( + + ))} + {scatters.selected.map((scatter, i) => ( + { + e.stopPropagation() + setSelected(scatter) + }} + /> + ))} + {selected && ( + setSelected(null)} + /> + )} + + + {scatters.selected.length === 0 + ? 'No results for this combination' + : ''} + + + + {replacePlaceholder(children, log, setLog, xAxis, setXAxis)} + + ) +} + +export default ScatterChart diff --git a/articles/enhanced-weathering-fluxes/components/selected.js b/articles/enhanced-weathering-fluxes/components/selected.js new file mode 100644 index 00000000..272a5fd6 --- /dev/null +++ b/articles/enhanced-weathering-fluxes/components/selected.js @@ -0,0 +1,65 @@ +import { Button } from '@carbonplan/components' +import { RotatingArrow } from '@carbonplan/icons' +import React from 'react' +import { Box } from 'theme-ui' + +const Selected = ({ selected }) => { + return ( + <> + + Selected + + + {selected ? ( + + ) : ( + + (click to select) + + )} + + + ) +} + +export default Selected diff --git a/articles/enhanced-weathering-fluxes/components/selector.js b/articles/enhanced-weathering-fluxes/components/selector.js new file mode 100644 index 00000000..18bee47a --- /dev/null +++ b/articles/enhanced-weathering-fluxes/components/selector.js @@ -0,0 +1,79 @@ +import React from 'react' +import { Box, Flex, IconButton } from 'theme-ui' +import { Select } from '@carbonplan/components' +import { X } from '@carbonplan/icons' + +const capitalizeFirstLetter = (str) => { + if (typeof str !== 'string' || str.length === 0) { + return str + } + return str.charAt(0).toUpperCase() + str.slice(1) +} + +const Selector = ({ + value, + setValue, + options, + color, + onReset, + sx, + includeClear = false, +}) => ( + + + + + {includeClear && ( + + {onReset && ( + + + + )} + + )} + +) + +export default Selector diff --git a/articles/enhanced-weathering-fluxes/components/spatial-boundary.js b/articles/enhanced-weathering-fluxes/components/spatial-boundary.js new file mode 100644 index 00000000..735abff0 --- /dev/null +++ b/articles/enhanced-weathering-fluxes/components/spatial-boundary.js @@ -0,0 +1,67 @@ +import { Box, Flex } from 'theme-ui' +import { Row, Column } from '@carbonplan/components' +import { useState } from 'react' + +import Selector from './selector' +import ERWEstimates from './erw-estimates' + +const OPTIONS = [ + { label: 'None', value: 'none' }, + { label: 'Upstream + local', value: 'upstream' }, + { label: 'Local only', value: 'local' }, + { label: 'Downstream + local', value: 'downstream' }, + { label: 'All', value: 'all' }, +] + +const SpatialBoundary = () => { + const [boundary, setBoundary] = useState('local') + + return ( + + + + + Inefficiencies + + + + + + + estimates{' '} + {boundary === 'none' ? 'did not consider ' : 'considered '} + + {boundary === 'none' + ? 'inefficiencies' + : `${boundary} inefficiencies`} + + + } + /> + + + ) +} + +export default SpatialBoundary diff --git a/articles/enhanced-weathering-fluxes/components/temporal-boundary.js b/articles/enhanced-weathering-fluxes/components/temporal-boundary.js new file mode 100644 index 00000000..cf724574 --- /dev/null +++ b/articles/enhanced-weathering-fluxes/components/temporal-boundary.js @@ -0,0 +1,75 @@ +import { Box, Flex } from 'theme-ui' +import { Row, Column } from '@carbonplan/components' +import { useState } from 'react' + +import Selector from './selector' +import ERWEstimates from './erw-estimates' + +const OPTIONS = [ + { label: 'Soil', labelLong: 'entry to soil', value: 'soil' }, + { + label: 'Shallow', + labelLong: 'export to shallow soil (<50 cm)', + value: 'export_shallow', + }, + { + label: 'Deep', + labelLong: 'export to deep soil (>50 cm)', + value: 'export_deep', + }, + { + label: 'River', + labelLong: 'reaching the nearest stream or river', + value: 'river', + }, +] + +const TemporalBoundary = () => { + const [boundary, setBoundary] = useState('export_deep') + + return ( + + + + + Removal threshold + + + + + + + estimates counted removal upon{' '} + + {OPTIONS.find((option) => option.value === boundary).labelLong} + + + } + /> + + + ) +} + +export default TemporalBoundary diff --git a/articles/enhanced-weathering-fluxes/components/utils.js b/articles/enhanced-weathering-fluxes/components/utils.js new file mode 100644 index 00000000..e29624b1 --- /dev/null +++ b/articles/enhanced-weathering-fluxes/components/utils.js @@ -0,0 +1,76 @@ +import React from 'react' +import { Box } from 'theme-ui' + +export const replacePlaceholder = (children, log, setLog, xAxis, setXAxis) => { + const placeholders = { + linear: { + onClick: () => setLog(false), + getColor: () => (log ? 'secondary' : 'primary'), + }, + logarithmic: { + onClick: () => setLog(true), + getColor: () => (log ? 'primary' : 'secondary'), + }, + particle_diameter: { + onClick: () => setXAxis('particle_diameter_um'), + getColor: () => + xAxis === 'particle_diameter_um' ? 'primary' : 'secondary', + }, + application_rate: { + onClick: () => setXAxis('application_rate_ton_ha_yr'), + getColor: () => + xAxis === 'application_rate_ton_ha_yr' ? 'primary' : 'secondary', + }, + } + + const regexPattern = Object.keys(placeholders) + .map((key) => `%%${key}%%`) + .join('|') + const regex = new RegExp(regexPattern, 'g') + + const replaceTextWithComponents = (text) => { + let lastIndex = 0 + const result = [] + text.replace(regex, (match, index) => { + const beforeText = text.slice(lastIndex, index) + if (beforeText) result.push(beforeText) + const cleanMatch = match.replace(/^%%|%%$/g, '').replace(/\s+/g, ' ') + const placeholder = placeholders[cleanMatch.toLowerCase()] + if (placeholder) { + result.push( + + {cleanMatch.replace('_', ' ')} + + ) + } + lastIndex = index + match.length + }) + if (lastIndex < text.length) { + result.push(text.slice(lastIndex)) + } + return result + } + + return React.Children.map(children, (child) => { + if (typeof child === 'string') { + return <>{replaceTextWithComponents(child)} + } else if (React.isValidElement(child)) { + return React.cloneElement( + child, + child.props, + replacePlaceholder(child.props.children, log, setLog, xAxis, setXAxis) + ) + } + return child + }) +} diff --git a/articles/enhanced-weathering-fluxes/index.md b/articles/enhanced-weathering-fluxes/index.md new file mode 100644 index 00000000..de23798f --- /dev/null +++ b/articles/enhanced-weathering-fluxes/index.md @@ -0,0 +1,205 @@ +--- +version: 1.0.0 +title: Does enhanced weathering work? We’re still learning. +authors: + - Tyler Kukla + - Tim Jesper Suhrhoff + - Shane Loeffler + - Kata Martin + - Freya Chay +date: 3-18-2024 +summary: There are lots of carbon removal estimates for enhanced weathering in the scientific literature, but making sense of them is hard. We synthesized these estimates to clarify the current state of the science and grapple with its limitations. +quickLook: A synthesis of carbon removal estimates from the enhanced weathering literature. +color: grey +card: enhanced-weathering-fluxes +background: articles/025/slovenia +icon: articles/025/slovenia-small +components: + - name: ErwEstimates + src: ./components/erw-estimates.js + - name: ScatterChart + src: ./components/scatter-chart.js + - name: ErwEfficiencies + src: ./components/erw-efficiencies.js + - name: Diagram + src: ./components/diagram.js + - name: SpatialBoundary + src: ./components/spatial-boundary.js + - name: TemporalBoundary + src: ./components/temporal-boundary.js + - name: HatchingKey + src: ./components/hatching-key.js +--- + +Just spread crushed up rock over a field, wait for it to dissolve, and (hopefully) atmospheric CO₂ will be sequestered. Enhanced rock weathering for carbon dioxide removal seems simple enough. And its simplicity as a climate solution is understandably garnering [media](https://heatmap.news/podcast/shift-key-episode-4-enhanced-rock-weathering) [attention](https://www.bbc.com/news/science-environment-65648361): it doesn’t require a lot of new technology; the infrastructure for crushing, transporting, and spreading rock already exists; and there is a lot of land, especially farm land, available to scale it up quickly. + +But physical infrastructure is not the only thing that determines whether enhanced rock weathering is feasible. Scientists and carbon removal companies are still figuring out how quickly we can expect spreading rock to result in carbon removal, and how the scale of that removal compares to the emissions produced by the project itself. And there is unlikely to be a universal answer. + +That’s because enhanced rock weathering outcomes [depend on a wide range of variables](https://carbonplan.org/research/ew-quantification-explainer), and what results in net carbon removal in one setup might not work everywhere else. Moreover, important aspects of the carbon cycle and its intersection with weathering remain poorly understood, and there is still a lack of widespread agreement about the right way to count how much carbon gets removed. These challenges can make carbon removal estimates from enhanced weathering studies hard to interpret. It’s tempting to treat these results as answers that tell us if enhanced weathering works at scale. But doing so misses the nuance that makes the estimates more limited — and, arguably, more useful. + +To provide context on the existing science, we drew on a [public database](https://tinyurl.com/ERWlit) of enhanced weathering research papers to compile more than 100 carbon removal estimates and the factors that influence them. The removal estimates span four orders of magnitude and represent a wide range of analytical and operational choices. Below, we discuss four patterns that illustrate why care should be taken when interpreting these estimates or using them to make broader inferences about enhanced weathering’s efficacy. While enhanced weathering might seem easier than other carbon removal approaches logistically, quantifying its impact on the atmosphere is far from straightforward. + +## What we did + +We compiled carbon removal estimates from the existing enhanced weathering literature and collected associated data to help characterize how the underlying studies are alike or different. The resulting dataset is downloadable as a [CSV file](https://carbonplan-carbon-removal.s3.amazonaws.com/enhanced-weathering-fluxes/v1.0/dataset.csv) with [metadata](https://carbonplan-carbon-removal.s3.amazonaws.com/enhanced-weathering-fluxes/v1.0/metadata.csv). + +
+ + + Summary of the key variables we gathered to characterize each enhanced + weathering carbon removal estimate in the dataset. + +
+ +The starting point for this compilation was Tim Jesper Suhrhoff’s [public database](https://tinyurl.com/ERWlit) of enhanced rock weathering papers. In our analysis, we included the terrestrial and agricultural papers and preprints from that database that were available online on or before January 2024, and we filtered them by three key criteria. First, the paper presents a carbon removal estimate that can be interpreted in terms of a carbon flux (i.e., a mass of carbon removed per area per time).Papers that present results as emissions per unit of CO₂ removed (e.g., [Lefebvre et al., 2019](https://doi.org/10.1016/j.jclepro.2019.06.099) or mass of CO₂ removed per mass of soil (e.g., [Haque et al., 2019](https://pubs.acs.org/doi/10.1021/acsomega.8b02477)) were excluded. Second, the underlying experiment explicitly accounts for the rock weathering process rather than modeling the result of assumed weathering. Studies that sidestep the weathering process were excluded, including modeling studies that calculate the carbon transport capacity of rivers (e.g., [Zhang et al., 2022](https://aslopubs.onlinelibrary.wiley.com/doi/full/10.1002/lno.12244)) and studies that calculate weathering based on the potential removal capacity of a feedstock (e.g., [Jia et al., 2022](https://doi.org/10.1016/j.resconrec.2021.105910)). Third, the estimate reflects carbon removal that is directly caused by chemical weathering of the rocks, and not indirect removal from the impact of weathering on organic carbon stocks. See, for example, [Goll et al., 2021](https://doi.org/10.1038/s41561-021-00798-x) and [Taylor et al., 2021](https://doi.org/10.5194/bg-18-169-2021), which include biomass changes in their removal estimate. These were excluded because the durability of such biomass storage is debated. These constraints narrowed the original database of 174 papers down to 32, with most papers containing multiple carbon removal estimates under different conditions. + +For each estimate, we used a set of qualitative and quantitative characteristics to describe the underlying experiment (Figure 1), including the type of estimate (model, laboratory, or field study), the time horizon of analysis, and details about the rock application (such as the feedstock type, particle diameter, and application rate).Where available, we also recorded the specific surface area of the feedstock. Additionally, we noted how carbon removal calculations were influenced by two key accounting choices: the "removal threshold" defining where in the soil or watershed carbon is considered removed from the atmosphere, and the "accounting boundary" indicating if the estimate considers potential inefficiencies from upstream, weathering site, or downstream processes. + +Wherever possible, our compilation reflects data as it was directly reported in the papers we analyzed.In some cases, we used a [graphclick software](https://apps.automeris.io/wpd/) to extract the relevant information and noted it in the compilation. However, there are a few areas in which we did extra work to harmonize the presentation of results. + +First, we converted all estimates to the common units of tons of CO₂ removed per hectare per year (tCO₂ / ha / yr). For papers that presented a removal flux in different units (e.g., kgCO₂ / m² / yr), the conversion is straightforward. In rare cases, the paper presented only a carbon removal rate (e.g., tCO₂ / yr), but we were able to convert the rate to a flux by accounting for the spatial footprint of the experiment. More commonly, a paper presented removal in terms of the mass per area (e.g., tCO₂ / ha), in which case we converted the result to mass per area per year by accounting for the duration of the experiment. Such extrapolation can lead to anomalously high annual fluxes for experiments run over a short time interval since weathering rates are often highest in the first weeks of an experiment. In the dataset, out of 116 total data points, there are 10 estimates with a time horizon of less than 3 months and 35 span less than 6 months. + +For each removal estimate, we also noted the maximum potential carbon removal per ton of rock based on its geochemistry. For studies that did not report maximum potential removal, we derived it from the chemical composition of the rock using the modified Steinour equation presented in Renforth (2012). Although there are multiple ways to perform this calculation, we chose this approach for consistency with the majority of papers that did report maximum potential carbon removal. Where needed, we used the maximum removal as an upper bound on our extrapolations (for example, when extrapolating sub-annual studies to annual rates). + +Altogether, the compiled data provide a snapshot of the carbon removal estimates currently scattered across the literature, along with a basic framework for identifying the similarities and differences in the underlying studies. + +## What we found + +The most striking result is that the compiled carbon removal estimates span more than four orders of magnitude (Figure 2). This massive span could be explained by a number of factors. Distinct climate and environmental conditions will certainly affect carbon removal outcomes, though in global models that simulate these factors, the variability in removal is generally much smaller (within ~1 order of magnitude). Another factor that could explain the spread is the diversity of experimental designs. + +
+ + + This histogram shows carbon removal flux estimates that span more than four + orders of magnitude. Estimates in the “none” category are + consistent with no removal, meaning the removal estimate or its uncertainty + bound is not strictly positive. + +
+ +Many decisions that go into designing an enhanced weathering study influence the resulting carbon removal estimates. For example, lab experiments are often optimized for fast dissolution, but this is much harder to do in a field study where inefficiencies can be more prevalent. Similarly, the type of rock and its grain size might be determined by what’s readily available for field studies, but the “virtual” rocks in model-based studies have no such constraints. Through this lens, the variability in Figure 2 indicates that enhanced weathering studies are exploring many approaches to expand the body of knowledge. That is useful. But it also means care is required when drawing more general conclusions from any one estimate. Below, we walk through the experimental details that could explain some of this variability, and offer four takeaways to help shape the way we interpret and talk about the enhanced weathering literature. + +### 01 — Not all estimates report successful carbon removal + +Since rock weathering is a natural process known to take carbon out of the atmosphere over geologic timescales, it’s easy to assume that enhanced rock weathering will do the same thing, just faster. However, as noted in Figure 2, some of the estimates we compiled don’t actually report carbon removal. In twelve out of 116 cases, the estimate or its uncertainty range is consistent with zero removal — or even net emissions. For some estimates, that happens because the weathering signal was too small or the analytical precision was too low. In others, the signal appears in some but not all measured variables and a model is used to derive the final carbon removal estimate. Less common, the carbon removal from weathering is not enough to outweigh the emissions from conducting the project. + +These “null results” are a minority of compiled estimates, but the bias toward publishing positive results tells us they should not be ignored. Detecting a signal above the noise and balancing project emissions with carbon removal are likely to present real challenges for enhanced weathering deployments, and these problems require different solutions. Improving measurement approaches or making the weathering signal bigger may address signal-to-noise issues in some contexts. And ensuring that removals outweigh upstream emissions requires site-specific life-cycle assessment, which may reveal that certain setups are not feasible. These challenges affect different components of enhanced weathering operations and, as it stands, they have no simple solution. + +### 02 — Carbon removal efficiency can be low on short timescales + +Rocks applied for enhanced weathering often dissolve slowly or incompletely. Based on the chemistry of the rock and the quantity applied, we compared each estimate’s maximum potential carbon removal against the carbon removal observed by the study.“Maximum potential removal” assumes (near) perfect efficiency. It does not account for any emissions associated with the project activity, nor any natural processes except degassing of CO₂ from rivers and oceans as accounted for in the Renforth, (2012) equation. Higher “removal efficiency” occurs when a larger fraction of the rock has weathered and upstream or downstream losses (if accounted for) are small. Because rocks weather over time, the removal efficiency depends on how much time has passed since the rock was applied. + +Figure 3 shows the removal efficiency for each estimate within one year of application. We focused on the annual efficiency to offer a common temporal baseline and because most studies apply rock each year. We also calculated efficiency based on the duration of each study (see the [dataset](https://carbonplan-carbon-removal.s3.amazonaws.com/enhanced-weathering-fluxes/v1.0/dataset.csv)), and the results are very similar. With either framing, we found that the estimated carbon removal was often less than 10% of the maximum potential removal — and many estimates were well below 1%. The efficiency would be even lower if we did not account for the 15% loss in the maximum potential calculation. + +
+ + + The efficiency of enhanced weathering carbon removal, defined as the + percentage reported compared to the project’s theoretical maximum carbon + removal. This efficiency is shown for each estimate as a single bar. + Switch from a %%linear%% to %%logarithmic%% scale to see the lowest + efficiency estimates in more detail. + + +
+ +The most efficient estimates are those where the largest fraction of material weathers. These usually involve laboratory conditions or models designed for fast dissolution that have not yet been replicated in the field. Meanwhile, studies with lower efficiency estimates have noted that only a small fraction of the applied material dissolves each year, with dissolution continuing for years to decades after application. Across the dataset, the speed at which rock dissolves is a primary limitation on the carbon removal efficiency. + +These time dynamics primarily impact _how fast_ carbon gets removed, rather than _how much_. On the one hand, this could be viewed positively: for studies reporting low efficiency, there could be a long tail of unobserved carbon removal. On the other hand, speed matters, both from the perspective of the climate and from the perspective of enhanced weathering companies. Slow dissolution may cause financial strain if companies spend money to spread rock but get paid when atmospheric carbon removal occurs. Moreover, if credits are issued based on models that inaccurately capture slow dissolution, the credits' removal claim could fail to reflect real atmospheric outcomes. Slow dissolution also means that annual rock application could be unsustainable if unweathered material builds up with time. Such buildup might impact soil hydrology, limit weathering efficiency, and result in soil pH increasing above desired levels. Avoiding these consequences could mean less carbon removal compared to published estimates that assume long-term annual application despite incomplete weathering. + +### 03 — Studies represent a wide range of operational decisions + +Operational decisions like choosing a rock application rate or grain size come with trade-offs. Applying a lot of rock and grinding it very finely both tend to increase annual carbon removal fluxes — this has been documented across a number of studies. But sourcing more rock and grinding it more finely both cost more money and, critically, also use more energy and produce more upfront deployment emissions. And even if total weathering fluxes increase, applying more rock can result in lower efficiency, causing a smaller fraction of the total rock applied to weather each year. Enhanced weathering deployments therefore have to balance how much carbon they remove with the emissions resulting from these operational decisions. + +Focusing on these variables highlights a limitation of our approach — aggregating the data makes it difficult to compare the carbon removal estimates to any one variable, like particle size, while controlling for everything else. Different experimental conditions will mask the well-documented effects of particle size and application rate found in more controlled studies. + +In Figure 4, you can explore how the compiled carbon removal estimates relate to the particle diameter and the application rate of the rock. The scattered data demonstrate that these are not the only variables that affect enhanced weathering outcomes. Others, like soil conditions, climate, rock type, and more, contribute to the variability. That’s not to say the effects of particle size and application rate are absent. Indeed, the highest removal fluxes generally use finer particles and higher application rates, and finer particles also correspond with the highest removal efficiencies (not shown). But confounding variables clearly cannot be ignored, making removal estimates hard to directly compare to each other on the basis of just one or two variables alone. + +
+ + + Scatterplot of estimated carbon removal compared to the + %%particle_diameter%% and the %%application_rate%% of the applied rock. + These plots aggregate many different experimental conditions, masking the + importance of particle size and application rate in controlled settings. + Nonetheless, the highest removal fluxes generally have smaller particle + sizes and higher application rates, indicating these decisions can open + the door to more carbon removal in the right conditions. Switch between + %%linear%% or %%logarithmic%% scale to further explore the data. + + +
+ +Another caveat of our analysis is that many scientific studies don’t reflect common field practices, in part because they don’t have the same economic optimization challenges as a real deployment. For example, all estimates with application rates exceeding 1,000 tons / ha / yr come from laboratory experiments where powdered rock was added to some form of weathering reactor. At such small scales, it is reasonable (and useful) to probe end-member conditions such as extreme rock application rates. But recent field trials have applied much less rock — around 40-50 tons per hectare per year, which amounts to a layer about a couple of millimeters thick. And even these application rates could be considered high by some. Farmers that use crushed limestone to manage soil pH often apply 1-10 tons per hectare, or less. + +At this stage, it is too early to know how much of the extreme variation in Figure 4 will be reflected in real enhanced weathering deployments. Models and laboratory studies are inherently limited in their ability to represent field conditions. Meanwhile, field estimates make up less than 20 percent of the compiled data, and industry constraints could lead to deployment choices that are very different from the academic literature. Extrapolating industry-wide outcomes from the current science cannot yet be done with confidence — there’s support for nearly any answer. This limitation underpins the importance of making data from early deployments publicly available. + +### 04 — Studies use diverse definitions of “removal” + +The studies we analyzed all report an estimated carbon removal flux, but they don’t always agree on how to define it. This is not surprising. There aren’t yet widely accepted standards around carbon accounting in the enhanced weathering community and, even if there were, it might not be appropriate for academic studies to use them. In many cases, how a study counts carbon removal will hinge on its analytical methods — lab, field, and modeling studies may each track carbon differently over space and time. Because studies use diverse accounting approaches, the carbon removal results they report cannot always be directly compared to each other. + +All enhanced weathering studies make choices about potential inefficiencies they will consider in their estimation of carbon removal. We represent this choice via the accounting boundary (Figure 5). Most of the estimates we compiled do _not_ reflect upstream emissions or downstream inefficiencies. They focus strictly on carbon removed from weathering alone (the “none” group), or inefficiencies that occur at the weathering site, such as chemical reactions that release carbon or fail to sequester it (the “local” group). A handful of studies account for these local inefficiencies and then go a step farther. Some incorporate either observed or estimated effects of downstream processes in rivers and oceans (the “downstream + local” group). Theoretically, these processes could increase or decrease net carbon removal depending on the specific environment in question, but many studies simply apply a ~15% haircut to account for potential downstream losses of captured carbon. Very few studies incorporated the upstream emissions associated with sourcing and applying the rock (the “upstream + local” group). Including them would strictly decrease the reported net carbon removal achieved. + +Notably, none of the studies we analyzed tracked carbon mechanistically across the entire downstream reach. Some studies that did not meet our selection criteria do attempt to assess CO₂ leakage in rivers and oceans, but each study usually only looks at one component of the weathering-transport-storage cascade. A clear, mechanistic source-to-storage tracking approach for weathering products has yet to emerge. + +
+ + + Carbon removal estimates use a wide range of spatial boundaries when + accounting for processes that decrease net removal. Some estimates include + no inefficiencies (“none”), some only consider local losses that occur at + the site where the rock weathers (“local only”), some also account for + project activities that happen before the rock is spread (“upstream + + local”), and some account for the carbon losses that can occur after the + carbon leaves its weathering site (“downstream + local”). + +
+ +The boundary decision that seems to have the largest effect is where the carbon must go — or how disconnected it should be from the atmosphere — before it counts as removed. We refer to this as the “removal threshold.” This boundary matters because we usually consider the carbon to be durably removed“Durable” in this context means the carbon remains out of the atmosphere for a long time, usually more than 1,000 years. when it reaches the ocean. But it can take years or decades to get there, and most studies don’t wait that long. On shorter time horizons, you’re likely to count more carbon at the soil than in the ocean. + +In Figure 6, we map different removal thresholds onto the carbon removal estimates. These thresholds can be thought of as different signposts the carbon crosses as it moves from the atmosphere to its final storage reservoir. Some estimates count the carbon as removed at the first step, the moment it leaves the atmosphere and enters the soil (the “soil” group). Some wait until it has leached beneath some shallow depth (the “shallow” group), or a deeper threshold defined here as greater than 50 cm (the “deep” group). Others wait for the carbon to reach the nearest stream or river (the “river” group). In most cases this decision is based on the study design — it’s not a normative indication of when the removal _should_ count. Many of the shallow estimates, for example, are laboratory experiments that measure the chemistry of water after it leaches out of a shallow weathering reactor. Many of the soil estimates are from models where it is easy to track soil carbon and its exchange with the atmosphere. + +Nonetheless, the estimates that count the carbon once it is exported from the deep soil are among the lowest removal estimates in the dataset (Figure 6). That’s because, in the short time horizon of most studies, very little of the dissolved atmospheric carbon makes it that deep. For example, Cipolla et al., (2021) found that about 1,000 times more carbon entered the soil due to enhanced weathering compared to what leached below 80 cm depth over five years. They only counted the leached carbon because it’s less connected to the atmosphere and to topsoil that is heavily influenced by agriculture, so it’s more likely to stay removed. Of course, local factors can increase how quickly carbon moves through the soil. The sole river estimates come from Larkin et al., (2022), which attempted to measure removal in stream discharge from steep catchments with high water infiltration rates. These factors tend to help carbon move through the soil faster, though Larkin et al. only detected net carbon removal at one of their three sites. + +
+ + + There is no single definition for when we count the carbon as removed. This + histogram shows the carbon removal estimates with a dropdown menu to group + them by their removal threshold. “Soil” means the carbon is counted as soon + as it exits the atmosphere, “shallow” means it surpasses a set depth in the + column that is less than 50 cm, “deep” means it surpasses 50 cm, and “river” + means the carbon is exported to a river or stream before it’s counted. The + “deep” threshold contains many of the lowest estimates in the dataset. + +
+ +One boundary decision that separated a small number of estimates involves what _kind_ of carbon counts. Most studies counted the carbon that was dissolved in water since that’s the carbon that (hopefully) ends up being durably stored in the ocean. But some studies also counted the carbon that ended up forming solid carbonate minerals in the soil, arguing that this is a durable reservoir, too. Debate continues as to whether this solid carbonate is durable. Its effects on carbon removal depend on many factors, including whether it dissolves later and by the same chemical pathway; whether the field gets a lot of fertilizer; and whether the project itself creates the conditions for the carbonate to stay undissolved. These challenges, and many others, are still being investigated. For now, it’s notable that even basic questions like “what kind of carbon counts?” have no simple answer. + +## Takeaways + +Stepping back, it’s clear that we are still in the early stages of learning about enhanced weathering. As results continue to roll in, we would encourage caution when interpreting carbon removal estimates in the literature. + +As this analysis illustrates, estimates of carbon removal from enhanced weathering studies embed significant variability into analytical approaches and the details of rock application. There is also significant variability connected to the accounting frameworks used to define what counts as carbon removal and when. But, at this stage we believe this diversity is a feature of the scientific literature, not a flaw. It means researchers have the flexibility to design projects to fit their expertise and, consequently, that more conditions get studied. In the face of vast uncertainty around which deployment conditions are reasonable, which methods are best, and how removal should be counted, even a deep dive into the literature is unlikely to surface a single best answer. + +Today, any estimate — no matter how well it captures the challenges of real enhanced weathering deployments — will be limited both by known-unknowns and potential unknown-unknowns. Some are related to challenges like downstream losses, the role of biology, and the impact of enhanced weathering on natural weathering processes. All of these factors clearly require more research. Today’s experiments are fundamental to building the body of work that we need to understand how and where enhanced weathering works. But, at least for now, major caveats come with any given answer. + +Moving forward, we hope research starts to more systematically disentangle the observed variability and reconcile carbon removal estimates across lab, field, and modeling studies. Doing so will require industry and scientific research to progress in step, and for all results — including null results — to be shared openly. We recommend that data sharing be more formally established as a basic expectation for any enhanced weathering deployment, and look forward to supporting continued efforts to make public data more accessible and interpretable. + + + +Tyler performed the analysis and wrote the first draft of the article. Jesper developed the underlying database of enhanced weathering papers. Jesper and Freya helped write and edit the article. Tyler, Shane, Kata, and Freya designed the figures, and Shane and Kata built them. + +Please cite as: + +T Kukla et al. (2024) “Does enhanced weathering work? We’re still learning.” CarbonPlan [https://carbonplan.org/research/enhanced-weathering-fluxes](https://carbonplan.org/research/enhanced-weathering-fluxes) + + + + + +CarbonPlan’s work on this explainer was supported by a [grant](https://carbonplan.org/funding) from the Patrick J. McGovern Foundation. No one except the authors exercised control over the research process or products. The authors are solely responsible for the content of this article, which does not reflect the views of any other individuals or organizations. + +Article text, figures, and underlying data made available under a [CC BY 4.0 International license](https://creativecommons.org/licenses/by/4.0/). + + diff --git a/articles/enhanced-weathering-fluxes/references.json b/articles/enhanced-weathering-fluxes/references.json new file mode 100644 index 00000000..924b94fd --- /dev/null +++ b/articles/enhanced-weathering-fluxes/references.json @@ -0,0 +1,468 @@ +{ + "amann.2022": { + "authors": "T Amann et al.", + "year": 2022, + "title": "Enhanced weathering potentials—the role of in situ CO₂ and grain size distribution", + "journal": "Frontiers in Climate", + "editors": "", + "url": "https://doi.org/10.3389/fclim.2022.929268" + }, + + "baek.2023": { + "authors": "S H Baek et al.", + "year": 2023, + "title": "Impact of Climate on the Global Capacity for Enhanced Rock Weathering on Croplands", + "journal": "Earth's Future", + "editors": "", + "url": "https://doi.org/10.1029/2023EF003698" + }, + + "bach.2024": { + "authors": "L T Bach", + "year": 2024, + "title": "The additionality problem of ocean alkalinity enhancement", + "journal": "Biogeosciences", + "editors": "", + "url": "https://doi.org/10.5194/bg-21-261-2024" + }, + + "beerling.2020": { + "authors": "D J Beerling et al.", + "year": 2020, + "title": "Potential for large-scale CO₂ removal via enhanced rock weathering with croplands", + "journal": "Nature", + "editors": "", + "url": "https://doi.org/10.1038/s41586-020-2448-9" + }, + + "tenBerge.2012": { + "authors": "H F M ten Berge et al.", + "year": 2012, + "title": "Olivine Weathering in Soil, and Its Effects on Growth and Nutrient Uptake in Ryegrass (Lolium perenne L.): A Pot Experiment", + "journal": "Plos One", + "editors": "", + "url": "https://doi.org/10.1371/journal.pone.0042098" + }, + + "bond.1961a": { + "authors": "F Bond", + "year": 1961, + "title": "Crushing and grinding calculations Part I", + "journal": "British Chemical Engineering", + "editors": "", + "url": "https://www.911metallurgist.com/blog/wp-content/uploads/2015/11/Bond-F-C-1961-Crushing-and-Grinding-Calculations.pdf" + }, + + "bond.1961b": { + "authors": "F Bond", + "year": 1961, + "title": "Crushing and grinding calculations Part II", + "journal": "British Chemical Engineering", + "editors": "", + "url": "https://www.911metallurgist.com/blog/wp-content/uploads/2015/11/Bond-F-C-1961-Crushing-and-Grinding-Calculations.pdf" + }, + + "brantley.2011": { + "authors": "S L Brantley et al.", + "year": 2011, + "title": "Twelve testable hypotheses on the geobiology of weathering", + "journal": "Geobiology", + "editors": "", + "url": "https://doi.org/10.1111/j.1472-4669.2010.00264.x" + }, + + "buckingham.2024": { + "authors": "F L Buckingham and G M Henderson", + "year": 2024, + "title": "The enhanced weathering potential of a range of silicate and carbonate additions in a UK agricultural soil", + "journal": "Science of the Total Environment", + "editors": "", + "url": "https://doi.org/10.1016/j.scitotenv.2023.167701" + }, + + "calabrese.2022": { + "authors": "S Calabrese et al.", + "year": 2022, + "title": "Nano- to Global-Scale Uncertainties in Terrestrial Enhanced Weathering", + "journal": "Environmental Science & Technology", + "editors": "", + "url": "https://doi.org/10.1021/acs.est.2c03163" + }, + + "cipolla.2021": { + "authors": "G Cipolla et al.", + "year": 2021, + "title": "The role of hydrology on enhanced weathering for carbon sequestration II. From hydroclimatic scenarios to carbon-sequestration efficiencies", + "journal": "Advances in Water Resources", + "editors": "", + "url": "https://doi.org/10.1016/j.advwatres.2021.103949" + }, + + "deng.2023": { + "authors": "H Deng et al.", + "year": 2023, + "title": "The environmental controls on efficiency of enhanced rock weathering in soils", + "journal": "Scientific Reports", + "editors": "", + "url": "https://doi.org/10.1038/s41598-023-36113-4" + }, + + "dietzen.2018": { + "authors": "C Dietzen et al.", + "year": 2018, + "title": "Effectiveness of enhanced mineral weathering as a carbon sequestration tool and alternative to agricultural lime: An incubation experiment", + "journal": "International Journal of Greenhouse Gas Control", + "editors": "", + "url": "https://doi.org/10.1016/j.ijggc.2018.05.007" + }, + + "dietzen.2023": { + "authors": "C Dietzen and M T Rosing", + "year": 2023, + "title": "Quantification of CO₂ uptake by enhanced weathering of silicate minerals applied to acidic soils", + "journal": "International Journal of Greenhouse Gas Control", + "editors": "", + "url": "https://doi.org/10.1016/j.ijggc.2023.103872" + }, + + "fanelli.2012": { + "authors": "D Fanelli", + "year": 2012, + "title": "Negative results are disappearing from most disciplines and countries", + "journal": "Scientometrics", + "editors": "", + "url": "https://link.springer.com/article/10.1007/s11192-011-0494-7" + }, + + "goll.2021": { + "authors": "D Goll et al.", + "year": 2021, + "title": "Potential CO₂ removal from enhanced weathering by ecosystem responses to powdered rock", + "journal": "Nature Geoscience", + "editors": "", + "url": "https://doi.org/10.1038/s41561-021-00798-x" + }, + + "goulding.2016": { + "authors": "K W T Goulding", + "year": 2016, + "title": "Soil acidification and the importance of liming agricultural soils with particular reference to the United Kingdom", + "journal": "Soil use and management", + "editors": "", + "url": "https://doi.org/10.1111/sum.12270" + }, + + "guo.2023": { + "authors": "F Guo et al.", + "year": 2023, + "title": "Crop productivity and soil inorganic carbon change mediated by enhanced rock weathering in farmland: A comparative field analysis of multi-agroclimatic regions in central China", + "journal": "Agricultural Systems", + "editors": "", + "url": "https://doi.org/10.1016/j.agsy.2023.103691" + }, + + "haque.2019": { + "authors": "F Haque et al.", + "year": 2019, + "title": "Co-Benefits of Wollastonite Weathering in Agriculture: CO₂ Sequestration and Promoted Plant Growth", + "journal": "ACS Omega", + "editors": "", + "url": "http://dx.doi.org/10.1021/acsomega.8b02477" + }, + + "haque.2020": { + "authors": "F Haque et al.", + "year": 2020, + "title": "Optimizing Inorganic Carbon Sequestration and Crop Yield With Wollastonite Soil Amendment in a Microplot Study", + "journal": "Frontiers in Plant Science", + "editors": "", + "url": "https://doi.org/10.3389/fpls.2020.01012" + }, + + "haque.2023": { + "authors": "F Haque et al.", + "year": 2023, + "title": "Constraining the Capacity of Global Croplands to CO₂ Drawdown via Mineral Weathering", + "journal": "ACS Earth and Space Chemistry", + "editors": "", + "url": "https://doi.org/10.1021/acsearthspacechem.2c00374" + }, + + "jia.2022": { + "authors": "X Jia et al.", + "year": 2022, + "title": "Regional carbon drawdown with enhanced weathering of non-hazardous industrial wastes", + "journal": "Resources, Conservation & Recycling", + "editors": "", + "url": "https://doi.org/10.1016/j.resconrec.2021.105910" + }, + + "kantzas.2022": { + "authors": "E P Kantzas et al.", + "year": 2022, + "title": "Substantial carbon drawdown potential from enhanced rock weathering in the United Kingdom", + "journal": "Nature Geoscience", + "editors": "", + "url": "https://doi.org/10.1038/s41561-022-00925-2" + }, + + "kanzaki.2023": { + "authors": "Y Kanzaki et al.", + "year": 2023, + "title": "New estimates of the storage permanence and ocean co-benefits of enhanced rock weathering", + "journal": "PNAS Nexus", + "editors": "", + "url": "https://doi.org/10.1093/pnasnexus/pgad059" + }, + + "kanzaki.2024p": { + "authors": "Y Kanzaki et al.", + "year": "Preprint", + "title": "Soil cation storage as a key control on the timescales of carbon dioxide removal through enhanced weathering", + "journal": "", + "editors": "", + "url": "https://essopenarchive.org/users/749955/articles/721069-soil-cation-storage-as-a-key-control-on-the-timescales-of-carbon-dioxide-removal-through-enhanced-weathering" + }, + + "kelland.2020": { + "authors": "M E Kelland et al.", + "year": 2020, + "title": "Increased yield and CO₂ sequestration potential with the C4 cereal Sorghum bicolor cultivated in basaltic rock dust-amended agricultural soil", + "journal": "Global Change Biology", + "editors": "", + "url": "https://doi.org/10.1111/gcb.15089" + }, + + "khalidy.2023": { + "authors": "R Khalidy et al.", + "year": 2023, + "title": "Fate and migration of enhanced rock weathering products through soil horizons; implications of irrigation and percolation regimes", + "journal": "Catena", + "editors": "", + "url": "https://doi.org/10.1016/j.catena.2023.107524" + }, + + "knapp.2022": { + "authors": "W J Knapp and E T Tipper", + "year": 2022, + "title": "The efficacy of enhancing carbonate weathering for carbon dioxide sequestration", + "journal": "Frontiers in Climate", + "editors": "", + "url": "https://doi.org/10.3389/fclim.2022.928215" + }, + + "larkin.2022": { + "authors": "C S Larkin et al.", + "year": 2022, + "title": "Quantification of CO₂ removal in a large-scale enhanced weathering field trial on an oil palm plantation in Sabah, Malaysia", + "journal": "Frontiers in Climate", + "editors": "", + "url": "https://doi.org/10.3389/fclim.2022.959229" + }, + + "lefebvre.2019": { + "authors": "D Lefebvre et al.", + "year": 2019, + "title": "Assessing the potential of soil carbonation and enhanced weathering through Life Cycle Assessment: A case study for Sao Paulo State, Brazil", + "journal": "Journal of Cleaner Production", + "editors": "", + "url": "https://doi.org/10.1016/j.jclepro.2019.06.099" + }, + + "liu.2018": { + "authors": "Z Liu et al.", + "year": 2018, + "title": "Large and active CO₂ uptake by coupled carbonate weathering", + "journal": "Earth-Science Reviews", + "editors": "", + "url": "https://doi.org/10.1016/j.earscirev.2018.05.007" + }, + + "mallarino.2013": { + "authors": "A P Mallarino et al.", + "year": 2013, + "title": "A General Guide for Crop Nutrient and Limestome Recommendations in Iowa", + "journal": "Iowa State University Extension and Outreach", + "editors": "", + "url": "https://naturalresources.extension.iastate.edu/files/page/files/general_guide_for_nutrient_and_limestone_recommendations_in_iowa.pdf" + }, + + "mamo.2009": { + "authors": "M Mamo et al.", + "year": 2009, + "title": "Lime Use for Soil Acidity Management", + "journal": "University of Nebraska-Lincoln Extension Publications", + "editors": "", + "url": "https://extensionpubs.unl.edu/publication/g1504/html/view" + }, + + "michalopoulos.1995": { + "authors": "P Michalopoulos and R C Aller", + "year": 1995, + "title": "Rapid Clay Mineral Formation in Amazon Delta Sediments: Reverse Weathering and Oceanic Elemental Cycles", + "journal": "Science", + "editors": "", + "url": "https://www.jstor.org/stable/2888328" + }, + + "moosdorf.2014": { + "authors": "N Moosdorf et al.", + "year": 2014, + "title": "Carbon Dioxide Efficiency of Terrestrial Enhanced Weathering", + "journal": "Environmental Science & Technology", + "editors": "", + "url": "https://doi.org/10.1021/es4052022" + }, + + "rahman.2023": { + "authors": "S Rahman and E J Trower", + "year": 2023, + "title": "Probing surface Earth reactive silica cycling using stable Si isotopes: Mass balance, fluxes, and deep time implications", + "journal": "Science Advances", + "editors": "", + "url": "https://doi.org/10.1126/sciadv.adi2440" + }, + + "reershemius.2023a": { + "authors": "T Reershemius et al.", + "year": 2023, + "title": "Initial Validation of a Soil-Based Mass-Balance Approach for Empirical Monitoring of Enhanced Rock Weathering Rates", + "journal": "Environmental Science & Technology", + "editors": "", + "url": "https://doi.org/10.1021/acs.est.3c03609" + }, + + "reershemius.2023b": { + "authors": "T Reershemius and T J Suhrhoff", + "year": 2023, + "title": "On error, uncertainty, and assumptions in calculating carbon dioxide removal rates by enhanced rock weathering in Kantola et al., 2023", + "journal": "Global Change Biology", + "editors": "", + "url": "https://doi.org/10.1111/gcb.17025" + }, + + "renforth.2012": { + "authors": "P Renforth", + "year": 2012, + "title": "The potential of enhanced weathering in the UK", + "journal": "International Journal of Greenhouse Gas Control", + "editors": "", + "url": "https://doi.org/10.1016/j.ijggc.2012.06.011" + }, + + "rinder.2021": { + "authors": "T Rinder and C von Hagke", + "year": 2021, + "title": "The influence of particle size on the potential of enhanced basalt weathering for carbon dioxide removal - Insights from a regional assessment", + "journal": "Journal of Cleaner Production", + "editors": "", + "url": "https://doi.org/10.1016/j.jclepro.2021.128178" + }, + + "strefler.2018": { + "authors": "J Strefler et al.", + "year": 2018, + "title": "Potential and costs of carbon dioxide removal by enhanced weathering of rocks", + "journal": "Environmental Research Letters", + "editors": "", + "url": "https://doi.org/10.1088/1748-9326/aaa9c4" + }, + + "taylor.2021": { + "authors": "L L Taylor et al.", + "year": 2021, + "title": "Increased carbon capture by a silicate-treated forested watershed affected by acid deposition", + "journal": "Biogeosciences", + "editors": "", + "url": "https://doi.org/10.5194/bg-18-169-2021" + }, + + "tripney.2021": { + "authors": "M Tripney et al.", + "year": 2021, + "title": "Review of soil acidity and liming guidance", + "journal": "", + "editors": "", + "url": "https://projectblue.blob.core.windows.net/media/Default/Research%20Papers/2021AHDBLimingReview.pdf" + }, + + "vanderkloot.2023": { + "authors": "A Vanderkloot and P Ryan", + "year": 2023, + "title": "Quantifying the effect of grain size on weathering of basaltic powders: Implications for negative emission technologies via soil carbon sequestration", + "journal": "Applied Geochemistry", + "editors": "", + "url": "https://doi.org/10.1016/j.apgeochem.2023.105728" + }, + + "vicca.2022": { + "authors": "S Vicca et al.", + "year": 2022, + "title": "Is the climate change mitigation effect of enhanced silicate weathering governed by biological proceses?", + "journal": "Global Change Biology", + "editors": "", + "url": "https://doi.org/10.1111/gcb.15993" + }, + + "vienne.2022": { + "authors": "A Viene et al.", + "year": 2022, + "title": "Enhanced Weathering Using Basalt Rock Powder: Carbon Sequestration, Co-benefits and Risks in a Mesocosm Study With Solanum tuberosum", + "journal": "Frontiers in Climate", + "editors": "", + "url": "https://doi.org/10.3389/fclim.2022.869456" + }, + + "vink.2023": { + "authors": "J P M Vink and P Knops", + "year": 2023, + "title": "Size-Fractionated Weathering of Olivine, Its CO₂-Sequestration Rate, and Ecotoxicological Risk Assessment of Nickel Release", + "journal": "minerals", + "editors": "", + "url": "https://doi.org/10.3390/min13020235" + }, + + "welbel.2023": { + "authors": "G Welbel", + "year": 2023, + "title": "Enhanced Rock Weathering in Agricultural Settings: Field Trial at Zumwalt Acres in Sheldon, IL", + "journal": "Thesis", + "editors": "", + "url": "https://earth.yale.edu/sites/default/files/files/SeniorEssays/Welbel_Thesis_Final.pdf" + }, + + "wolf.2023": { + "authors": "A Wolf et al.", + "year": 2023, + "title": "Validating assumptions in calculating carbon dioxide removal by enhanced rock weathering in Kantola et al., 2023", + "journal": "Global Change Biology", + "editors": "", + "url": "https://doi.org/10.1111/gcb.17031" + }, + + "wood.2023": { + "authors": "C Wood et al.", + "year": 2023, + "title": "Impacts of dissolved phosphorus and soil-mineral-fluid interactions on CO₂ removal through enhanced weathering of wollastonite in soils", + "journal": "Applied Geochemistry", + "editors": "", + "url": "https://doi.org/10.1016/j.apgeochem.2022.105511" + }, + + "zhang.2023": { + "authors": "B Zhang et al.", + "year": 2023, + "title": "Techno-Economic and Life Cycle Assessment of Enhanced Rock Weathering: A Case Study from the Midwestern United States", + "journal": "Environmental Science & Technology", + "editors": "", + "url": "https://doi.org/10.1021/acs.est.3c01658" + }, + + "sidenote.1": { + "note": "We use the version of Renforth's equation that accounts for a 15% loss due to downstream re-equilibration of the carbonate system." + }, + + "sidenote.2": { + "note": "Taylor et al. add ecosystem carbon responses to their removal estimate, but this removal might not be durable on thousand-year timescales. Without the ecosystem responses, the project is net emitting (see their Table 4), though their operations were not optimized for carbon removal." + } +} diff --git a/components/mdx/page-components.js b/components/mdx/page-components.js index 85e23046..2bfae6ed 100644 --- a/components/mdx/page-components.js +++ b/components/mdx/page-components.js @@ -3,6 +3,43 @@ import dynamic from 'next/dynamic' // NOTE: This is a dynamically generated file based on the config specified under the // `components` key in each article's frontmatter. const components = { + 'enhanced-weathering-fluxes': { + ErwEstimates: dynamic(() => + import( + '../../articles/enhanced-weathering-fluxes/components/erw-estimates.js' + ).then((mod) => mod.ErwEstimates || mod.default) + ), + ScatterChart: dynamic(() => + import( + '../../articles/enhanced-weathering-fluxes/components/scatter-chart.js' + ).then((mod) => mod.ScatterChart || mod.default) + ), + ErwEfficiencies: dynamic(() => + import( + '../../articles/enhanced-weathering-fluxes/components/erw-efficiencies.js' + ).then((mod) => mod.ErwEfficiencies || mod.default) + ), + Diagram: dynamic(() => + import( + '../../articles/enhanced-weathering-fluxes/components/diagram.js' + ).then((mod) => mod.Diagram || mod.default) + ), + SpatialBoundary: dynamic(() => + import( + '../../articles/enhanced-weathering-fluxes/components/spatial-boundary.js' + ).then((mod) => mod.SpatialBoundary || mod.default) + ), + TemporalBoundary: dynamic(() => + import( + '../../articles/enhanced-weathering-fluxes/components/temporal-boundary.js' + ).then((mod) => mod.TemporalBoundary || mod.default) + ), + HatchingKey: dynamic(() => + import( + '../../articles/enhanced-weathering-fluxes/components/hatching-key.js' + ).then((mod) => mod.HatchingKey || mod.default) + ), + }, 'offsets-db-explainer': { Diagram: dynamic(() => import('../../articles/offsets-db-explainer/components/diagram.js').then(