Open Source · MIT License

Sequestrix

CO2 Transport Network Optimization for Carbon Sequestration Projects

Design optimal pipeline networks, embed existing infrastructure, and evaluate project economics.
Published in the SPE Journal (2026).

What is Sequestrix?

An open-source tool for designing, optimizing, and evaluating the economics of CO2 pipeline transport networks for carbon sequestration.

Large-scale carbon sequestration projects require connecting CO2 capture sources to geological storage sinks through pipeline networks. Determining the most cost-efficient pipeline routes is crucial during project scoping, as transportation costs are driven by pipeline length, diameter, terrain, and existing infrastructure.

Sequestrix builds on the foundations laid by SimCCS and extends them with a key capability: embedding existing pipelines directly into the candidate network and optimization. This allows operators to evaluate cost savings from repurposing existing CO2 transport lines, a critical consideration as the 2022 amendments to the 45Q tax credits (up to $85/tCO2 for permanent storage) make many previously uneconomical projects viable.

Sequestrix controls pipeline entry and egress using four configurable algorithms for tie-in points and exclusion zones, then solves a Mixed-Integer Linear Program (MILP) to find the minimum-cost sequestration network. Results are displayed on an interactive web interface powered by Streamlit with Plotly/Mapbox visualizations and analytics dashboards.

Built for Real-World Sequestration

From data import to optimized economics, Sequestrix handles the full pipeline design workflow.

Existing Pipeline Embedding

Encode existing pipelines as zero-cost (or custom-cost) arcs in the cost surface graph. Four tie-in algorithms control entry and egress: unrestricted, fixed points, permitted segments with exclusion zones, and single tie-in with directional exclusion.

Delaunay Triangulation

Generate candidate pipeline networks using Delaunay triangulation to pair sources and sinks, then compute least-cost paths on the weighted cost surface graph for each pair.

MILP Optimization

Minimize total sequestration cost (capture + storage + pipeline build + transport) using Gurobi as the primary solver, with automatic fallback to CPLEX via PuLP for larger models exceeding free license limits.

Multiperiod Planning

Extend optimization across multiple planning periods with time-varying capture capacities, storage injectivity limits, and per-period or cumulative CO2 targets via optional Excel input sheets.

Scenario Management

Save optimization runs as named scenarios with metadata and network maps. Load, compare, and delete scenarios through a dedicated analysis page with side-by-side visualizations.

Interactive Web Interface

Streamlit-powered multi-page application with Plotly and Mapbox visualizations. Upload data, configure solves, view results dashboards, and export solutions from the browser.

Results Dashboard

View key metrics, cost breakdowns by category (capture, storage, transport), economic classification (profitable/marginal/uneconomic), and time-series analytics for multiperiod solves.

How It Works

Six steps from raw data to optimized network and project economics.

1

Prepare Cost Surface

Generate or import a rasterized construction cost surface using CostMAP. This graph encodes the relative cost of constructing pipeline between any two grid cells, accounting for terrain, land cover, population, and barriers.

2

Import Source & Sink Data

Prepare CO2 source and sink data (geolocation, capture/storage capacity, unit costs) as an Excel file. Optionally include existing pipeline geolocation data from operator records or the NPMS Public Viewer.

3

Embed Existing Pipelines

If existing pipelines are provided, their paths are encoded as zero-cost edges on the cost surface. Tie-in points and exclusion zones are configured to control where new connections can enter or exit the pipeline.

4

Generate Candidate Network

Delaunay triangulation determines source-sink pairings. Least-cost paths are computed for each pair on the weighted graph. Redundant edges are removed and the network is refined to produce a tractable candidate network.

5

Solve MILP Optimization

The candidate network is formulated as a Mixed-Integer Linear Program minimizing total sequestration cost. Gurobi (or CPLEX) finds optimal source-sink pairings, pipeline routes, flow volumes, and build decisions. Supports single-period or multiperiod planning.

6

View Results & Compare Scenarios

The solution is displayed on interactive Plotly/Mapbox maps with cost breakdowns, economic indicators, and time-series charts. Save runs as named scenarios and compare them side-by-side.

Streamlit App Pages

A step-by-step visual walkthrough with screenshots is available in the Quick User Guide (PDF).

1

Input Data

Upload your source/sink Excel file and optional pipeline file. Configure pipeline direction, tie-in points, and exclusion zones. Preview all locations on an interactive Mapbox map with pipeline polylines and tie-in markers.

2

Solve

Set project duration, CO2 sequestration target, and capital recovery factor. Toggle multiperiod mode to enable per-period planning with configurable period count and cumulative or per-period target modes. Click solve to run the full pipeline: cost surface loading, network generation, and MILP optimization. Save the run as a named scenario.

3

Results Dashboard

View key metrics: sources and sinks used, total CO2 sequestered, and unit costs for capture, storage, transport, and total. Tabs break down capture, storage, and transport details. Economic classification highlights profitability. When multiperiod mode is active, a Time Series tab shows per-period capture and storage line charts with cumulative storage area charts. Export results as CSV.

4

Scenario Analysis

Browse saved scenarios with metadata (date, duration, target, solver used). View a single scenario in detail with metrics, cost breakdown tabs, and the saved network map. Select multiple scenarios for side-by-side comparison: summary tables, unit cost bar charts, capture/storage/transport comparisons, and network maps displayed together.

Tech Stack & Modules

Python backend with Streamlit frontend. No database required; all data flows through Excel/CSV files.

geotransformation.py

Loads the construction cost surface CSV and converts geographic coordinates to grid positions on the cost graph.

alternateNetworkGeo.py

Builds the candidate pipeline network using NetworkX directed graphs, shortest-path algorithms, and existing pipeline embedding.

networkDelanunay.py

Generates Delaunay triangulation pairings between source and sink nodes using SciPy spatial algorithms.

input_data.py

Reads Excel input files for sources, sinks, pipelines, and optional multiperiod time-series sheets. Returns structured data for the optimizer.

math_model.py

Single-period MILP formulation using Gurobi (gurobipy). Defines variables, constraints, objective function, and solution extraction. Falls back to CPLEX via PuLP for large models.

math_model_multiperiod.py

Multiperiod MILP extension. Time-indexes flows, capture, and injection while keeping build and activation decisions time-invariant. Supports per-period or cumulative targets.

scenario_manager.py

File-based scenario persistence: save/load/delete named runs with solution CSV, metadata JSON, and optional Plotly network map snapshots.

dummyCostSurface.py

Generates synthetic cost surfaces for testing when CostMAP data is unavailable.

Key Dependencies

PackageRole
gurobipyPrimary MILP solver (Gurobi Python API)
pulpFallback solver interface for CPLEX on large models
networkxGraph construction, shortest paths, network analysis
streamlitWeb application framework
plotlyInteractive charts and Mapbox geospatial maps
pandasData manipulation and I/O
scipyDelaunay triangulation and spatial algorithms
geopyGeodesic distance calculations
numpyNumerical computing
openpyxlExcel file reading

Installation Guide

Get Sequestrix running locally in a few steps. Requires Python 3.9+ and pip.

Clone the Repository

git clone https://github.com/davidpcg01/SEQUESTRIX.git
cd SEQUESTRIX

Download Cost Surface Data

Download the construction cost surface subset CSV and place it in the repository root:

Download construction-costs-subset.csv from Mediafire

This file is too large for GitHub and is required for generating candidate pipeline networks. If you have access to CostMAP, you can generate your own cost surface instead.

Install Python Dependencies

pip install -r requirements.txt

If you plan to use CPLEX as a fallback solver, also install PuLP:

pip install pulp

Set Up a Solver

Sequestrix requires either Gurobi or IBM CPLEX. See the Solver Selection section below for details.

Quickest path: The Gurobi Python API (gurobipy) is installed with the requirements. The free license supports models with up to 2,000 variables and constraints. For academic use, apply for a free academic license which removes these limits.

Run Sequestrix

streamlit run Sequestrix/Home.py

The app will open in your default browser, or you can navigate to the Local URL printed in the terminal (typically http://localhost:8501).

Input Data Format

Sequestrix reads Excel (.xlsx) files with specific sheet names and column structures.

sources Required

CO2 emission source data. Each row is a capture facility.

ColumnDescriptionUnits
IDUnique numeric identifier
Unique NameFacility name
Capture CapacityAnnual CO2 capture capacityMTCO2/yr
Total Unit CostUnit capture costUSD/tCO2
LatLatitudeDecimal degrees
LongLongitudeDecimal degrees

sinks Required

CO2 storage site data. Each row is an injection/storage location.

ColumnDescriptionUnits
IDUnique numeric identifier
Unique NameStorage site name
Storage CapacityTotal CO2 storage capacityMTCO2
Total Unit CostUnit storage cost (negative if using tax credits)USD/tCO2
LatLatitudeDecimal degrees
LongLongitudeDecimal degrees

pipeline Optional

Existing pipeline geolocation sequences. Lat-Long points along the pipeline path, capacity, and transport cost. Uploaded as a separate Excel file on the Input Data page.

Multiperiod Sheets Optional

Add these sheets to the same input Excel file to enable multiperiod optimization.

source_periods

Time-varying capture capacities. Columns: ID, Period (1-indexed integer), Capture Capacity (MTCO2/yr).

sink_periods

Time-varying injectivity limits. Columns: ID, Period, Injectivity (MTCO2/yr).

targets

Per-period CO2 capture targets. Columns: Period, Target (MTCO2/yr). Used when per-period target mode is selected on the Solve page.

Solver Selection

Sequestrix supports two MILP solvers. Gurobi is the primary solver; CPLEX is the automatic fallback for larger models.

AspectGurobiIBM CPLEX
Python APIgurobipy (pip installable)cplex + pulp
Free TierUp to 2,000 variables and constraintsCommunity edition with limits
Academic LicenseFree, unlimited (apply via Gurobi website)Free via IBM Academic Initiative
Sequestrix IntegrationPrimary solver; native APIFallback via PuLP from MPS file
Auto-FallbackIf model exceeds Gurobi free limits (>2,000 vars/constraints), Sequestrix automatically exports to MPS and solves with CPLEX via PuLP

Recommendation: Install Gurobi (included in requirements.txt). For small to medium problems, the free tier is sufficient. If you are in academia, apply for the free academic license for unlimited model sizes. Install CPLEX separately only if needed as a fallback.

Demonstrated Applications

From the SPE Journal publication: two real-world case studies demonstrating pipeline embedding and sequestration economics.

Enid-Purdy Pipeline, Central Oklahoma

The Enid-Purdy pipeline (117 miles, 8-inch diameter, operated by Anadarko) was embedded into the cost surface to evaluate transport cost savings across five scenarios: a base case without the pipeline, and four configurations with varying tie-in and exclusion rules.

Eight CO2 sources (4.77 MTCO2/yr combined capture capacity) and eight sinks (15.5 MTCO2 storage) were evaluated with a target of 1.55 MTCO2/yr over 10 years.

44%
Max transport cost reduction
15%
Total unit cost reduction
268 km
Pipeline reused (best case)
5
Scenarios compared

Key finding: Unrestricted ingress/egress (Scenario a) yielded the largest savings. However, discrete tie-in points (Scenario b) can produce suboptimal routes that avoid the pipeline entirely, increasing costs. The result underscores the importance of configurable tie-in rules.

CarbonSAFE II, Osage County, Oklahoma

As part of the DOE CarbonSAFE Phase II initiative, Sequestrix was used to evaluate storing 50 MTCO2 over 30 years in the Arbuckle formation in Osage County. A new pipeline parallel to the existing Coffeyville-Burbank line was proposed, and Sequestrix identified the optimal additional CO2 source tie-in point.

Using the NETL CO2 transport cost model (CO2_T_M) for pipeline costing and the 2022 45Q tax credits ($85/tCO2 for permanent storage), the project economics were evaluated.

-$28.63
Unit cost (USD/tCO2)
50 MT
Total CO2 stored
30 yr
Project duration
84 km
New pipeline to tie-in

Key finding: The negative unit cost (-$28.63/tCO2) demonstrates that the project generates net revenue per ton of CO2 stored, driven by the 45Q tax credits offsetting capture, transport, and injection costs. Sequestrix identified the Ash-Grove cement plant in Kansas as the optimal additional source for tie-in.

Mathematical Model

The MILP minimizes total sequestration cost subject to flow, capacity, and target constraints. Full details in the SPE Journal paper.

Single-Period Objective

$$\min \left[ \underbrace{\sum_{i \in S} \left( F_i^S s_i + V_i^S a_i \right)}_{\text{capture}} + \underbrace{\sum_{j \in R} \left( F_j^R r_j + V_j^R b_j \right)}_{\text{storage}} + \underbrace{\sum_{a \in A} \sum_{c \in C} \beta_{ac} y_{ac}}_{\text{pipe build}} + \underbrace{\sum_{a \in A} \sum_{c \in C} \alpha_{ac} f_{ac}}_{\text{transport}} \right]$$

Key Constraints

Arc capacity bounds:

$$Q_{ac}^{\min} \leq f_{ac} \leq Q_{ac}^{\max} \quad \forall\, a \in A,\; c \in C$$

Single direction per arc:

$$\sum_{c \in C} y_{ac} \leq 1 \quad \forall\, a \in A$$

Flow balance at transshipment nodes:

$$\sum_{\substack{a \in A, c \in C \\ \text{src}(a)=n}} f_{ac} - \sum_{\substack{a \in A, c \in C \\ \text{dst}(a)=n}} f_{ac} = 0 \quad \forall\, n \in N$$

Capture target:

$$\sum_{i \in S} a_i \geq \text{CO}_2^T$$

Multiperiod Extension

Flows become time-indexed ($f_{ac,t}$, $a_{i,t}$, $b_{j,t}$) while build decisions ($y_{ac}$, $s_i$, $r_j$) remain time-invariant. The objective sums costs over all periods $t \in \mathcal{T}$.

Cumulative target (default):

$$\sum_{t \in \mathcal{T}} \sum_{i \in S} a_{i,t} \geq \text{CO}_2^T \cdot |\mathcal{T}|$$

Per-period target (optional):

$$\sum_{i \in S} a_{i,t} \geq \text{CO}_{2,t}^T \quad \forall\, t \in \mathcal{T}$$

Cumulative storage bound:

$$\sum_{t \in \mathcal{T}} b_{j,t} \leq Q_j^R \cdot r_j \quad \forall\, j \in R$$

Notation

SymbolDescription
$S$Set of CO2 capture source nodes
$R$Set of CO2 sink / storage nodes
$N$Set of transshipment nodes
$A$Set of all arcs (new-build and existing pipeline)
$C$Set of pipeline cost trends (piecewise-linear segments)
$\mathcal{T}$Set of planning periods (multiperiod only)
$f_{ac}$CO2 flow on arc $a$ with trend $c$ (tCO2/yr)
$y_{ac}$Binary: 1 if arc $a$ with trend $c$ is built
$a_i$CO2 captured at source $i$ (tCO2/yr)
$b_j$CO2 stored at sink $j$ (tCO2/yr)
$s_i, r_j$Binary activation for source $i$ / sink $j$
$\alpha_{ac}$Transport cost for arc $a$, trend $c$ (USD/tCO2)
$\beta_{ac}$Build cost for arc $a$, trend $c$ (USD M/yr)
$\text{CO}_2^T$Target CO2 sequestration (MTCO2/yr)

Citation

If you use Sequestrix in your research, please cite the following publication.

Nnamdi, D. and Moghanloo, R. G. 2026. Embedding Existing Pipelines in Design of CO2 Transportation Networks for Optimal Sequestration Economics. SPE Journal 31 (01): 643-660. SPE-214917-PA. https://doi.org/10.2118/214917-PA

BibTeX

@article{nnamdi2026sequestrix,
  title     = {Embedding Existing Pipelines in Design of {CO2}
               Transportation Networks for Optimal Sequestration
               Economics},
  author    = {Nnamdi, David and Moghanloo, R. G.},
  journal   = {SPE Journal},
  volume    = {31},
  number    = {01},
  pages     = {643--660},
  year      = {2026},
  month     = jan,
  note      = {SPE-214917-PA},
  doi       = {10.2118/214917-PA},
  publisher = {Society of Petroleum Engineers}
}