# matias-vm/acopf architecture

> Architecture diagram of the GitHub repository matias-vm/acopf, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-27). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/matias-vm/acopf
- Repository: https://github.com/matias-vm/acopf

## Overview

This repository contains three power-system optimization workflows: AC optimal power flow and SOCP relaxations, single- and multi-period cutting-plane relaxations, and DC optimal power flow. Users provide a case and configuration; each workflow parses network data, formulates or refines an optimization model, and reports a solution. The graph preserves the README’s documented period and model variants. Source excerpts confirm only some entry-point wiring, so uncertain links in unsampled modules are omitted.

Main entry points: [`ampl_acopf/singleperiod/src/main.py`](https://github.com/matias-vm/acopf/blob/main/ampl_acopf/singleperiod/src/main.py) (AC entry point), [`cutplane/singleperiod/src/main.py`](https://github.com/matias-vm/acopf/blob/main/cutplane/singleperiod/src/main.py) (Cut-plane entry), [`cutplane/singleperiod/src/cutplane.py`](https://github.com/matias-vm/acopf/blob/main/cutplane/singleperiod/src/cutplane.py) (Cut-plane model), [`dcopf/singleperiod/src/main.py`](https://github.com/matias-vm/acopf/blob/main/dcopf/singleperiod/src/main.py) (DC entry point)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_ac["AC and SOCP"]
  node_ampl_sp_main["AC entry point<br/>[main.py]"]
  node_ampl_sp_reader["Network reader<br/>[reader.py]"]
  node_ampl_sp_ac["AC solver<br/>[ac.py]"]
  node_ampl_sp_socp["SOCP solver<br/>[socp.py]"]
  node_ampl_mp_main["Multi-period entry<br/>[main_mtp.py]"]
  node_ampl_mp_reader["Network reader<br/>[reader.py]"]
  node_ampl_mp_ac["AC time model<br/>[ac_mtp.py]"]
  node_ampl_mp_ac2["AC variant<br/>[ac_mtp2.py]"]
  node_ampl_mp_socp["SOCP time model<br/>[socp_mtp.py]"]
end

subgraph group_cuts["Cutting Plane"]
  node_cp_sp_main["Cut-plane entry<br/>[main.py]"]
  node_cp_sp_reader["Network reader<br/>[reader.py]"]
  node_cp_sp_model["Cut-plane model<br/>[cutplane.py]"]
  node_cp_sp_cuts["Cut generation<br/>[cuts.py]"]
  node_cp_mp_main["Multi-period entry<br/>[main_mtp.py]"]
  node_cp_mp_reader["Network reader<br/>[reader.py]"]
  node_cp_mp_model["Time cut-plane model<br/>[cutplane_mtp.py]"]
  node_cp_mp_cuts["Time cut generation<br/>[cuts_mtp.py]"]
end

subgraph group_dc["DCOPF"]
  node_dc_sp_main["DC entry point<br/>[main.py]"]
  node_dc_sp_reader["Network reader<br/>[reader.py]"]
  node_dc_sp_model["DC formulation<br/>[dc.py]"]
  node_dc_mp_main["Multi-period entry<br/>[main_mtp.py]"]
  node_dc_mp_reader["Network reader<br/>[reader.py]"]
  node_dc_mp_model["Time DC model<br/>[dc_mtp.py]"]
end

node_user(("Analyst"))
node_case["Case and config"]
node_ampl_solver{{"AMPL solver"}}
node_gurobi{{"Gurobi solver"}}

node_user -->|"provides"| node_case
node_case -->|"configures"| node_ampl_sp_main
node_ampl_sp_main -->|"reads case"| node_ampl_sp_reader
node_ampl_sp_main -->|"dispatches"| node_ampl_sp_ac
node_ampl_sp_main -->|"dispatches"| node_ampl_sp_socp
node_ampl_sp_ac -.->|"solves with"| node_ampl_solver
node_ampl_sp_socp -.->|"solves with"| node_ampl_solver
node_case -->|"configures"| node_ampl_mp_main
node_ampl_mp_ac -.->|"solves with"| node_ampl_solver
node_ampl_mp_ac2 -.->|"solves with"| node_ampl_solver
node_ampl_mp_socp -.->|"solves with"| node_ampl_solver
node_case -->|"configures"| node_cp_sp_main
node_cp_sp_main -->|"reads case"| node_cp_sp_reader
node_cp_sp_main -->|"runs"| node_cp_sp_model
node_cp_sp_model -->|"adds cuts"| node_cp_sp_cuts
node_cp_sp_model -.->|"optimizes with"| node_gurobi
node_case -->|"configures"| node_cp_mp_main
node_cp_mp_model -->|"adds cuts"| node_cp_mp_cuts
node_cp_mp_model -.->|"optimizes with"| node_gurobi
node_case -->|"configures"| node_dc_sp_main
node_dc_sp_main -->|"reads case"| node_dc_sp_reader
node_dc_sp_main -->|"formulates"| node_dc_sp_model
node_dc_sp_model -.->|"optimizes with"| node_gurobi
node_case -->|"configures"| node_dc_mp_main
node_dc_mp_model -.->|"optimizes with"| node_gurobi

click node_ampl_sp_main "https://github.com/matias-vm/acopf/blob/main/ampl_acopf/singleperiod/src/main.py"
click node_ampl_sp_reader "https://github.com/matias-vm/acopf/blob/main/ampl_acopf/singleperiod/src/reader.py"
click node_ampl_sp_ac "https://github.com/matias-vm/acopf/blob/main/ampl_acopf/singleperiod/src/ac.py"
click node_ampl_sp_socp "https://github.com/matias-vm/acopf/blob/main/ampl_acopf/singleperiod/src/socp.py"
click node_ampl_mp_main "https://github.com/matias-vm/acopf/blob/main/ampl_acopf/multiperiod/src/main_mtp.py"
click node_ampl_mp_reader "https://github.com/matias-vm/acopf/blob/main/ampl_acopf/multiperiod/src/reader.py"
click node_ampl_mp_ac "https://github.com/matias-vm/acopf/blob/main/ampl_acopf/multiperiod/src/ac_mtp.py"
click node_ampl_mp_ac2 "https://github.com/matias-vm/acopf/blob/main/ampl_acopf/multiperiod/src/ac_mtp2.py"
click node_ampl_mp_socp "https://github.com/matias-vm/acopf/blob/main/ampl_acopf/multiperiod/src/socp_mtp.py"
click node_cp_sp_main "https://github.com/matias-vm/acopf/blob/main/cutplane/singleperiod/src/main.py"
click node_cp_sp_reader "https://github.com/matias-vm/acopf/blob/main/cutplane/singleperiod/src/reader.py"
click node_cp_sp_model "https://github.com/matias-vm/acopf/blob/main/cutplane/singleperiod/src/cutplane.py"
click node_cp_sp_cuts "https://github.com/matias-vm/acopf/blob/main/cutplane/singleperiod/src/cuts.py"
click node_cp_mp_main "https://github.com/matias-vm/acopf/blob/main/cutplane/multiperiod/src/main_mtp.py"
click node_cp_mp_reader "https://github.com/matias-vm/acopf/blob/main/cutplane/multiperiod/src/reader.py"
click node_cp_mp_model "https://github.com/matias-vm/acopf/blob/main/cutplane/multiperiod/src/cutplane_mtp.py"
click node_cp_mp_cuts "https://github.com/matias-vm/acopf/blob/main/cutplane/multiperiod/src/cuts_mtp.py"
click node_dc_sp_main "https://github.com/matias-vm/acopf/blob/main/dcopf/singleperiod/src/main.py"
click node_dc_sp_reader "https://github.com/matias-vm/acopf/blob/main/dcopf/singleperiod/src/reader.py"
click node_dc_sp_model "https://github.com/matias-vm/acopf/blob/main/dcopf/singleperiod/src/dc.py"
click node_dc_mp_main "https://github.com/matias-vm/acopf/blob/main/dcopf/multiperiod/src/main_mtp.py"
click node_dc_mp_reader "https://github.com/matias-vm/acopf/blob/main/dcopf/multiperiod/src/reader.py"
click node_dc_mp_model "https://github.com/matias-vm/acopf/blob/main/dcopf/multiperiod/src/dc_mtp.py"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_ampl_sp_main,node_ampl_sp_reader,node_ampl_sp_ac,node_ampl_sp_socp,node_ampl_mp_main,node_ampl_mp_reader,node_ampl_mp_ac,node_ampl_mp_ac2,node_ampl_mp_socp toneBlue
class node_cp_sp_main,node_cp_sp_reader,node_cp_sp_model,node_cp_sp_cuts,node_cp_mp_main,node_cp_mp_reader,node_cp_mp_model,node_cp_mp_cuts toneAmber
class node_dc_sp_main,node_dc_sp_reader,node_dc_sp_model,node_dc_mp_main,node_dc_mp_reader,node_dc_mp_model toneMint
class node_user,node_case,node_ampl_solver,node_gurobi toneIndigo
```

## Components

### AC and SOCP

- [AC entry point](https://github.com/matias-vm/acopf/blob/main/ampl_acopf/singleperiod/src/main.py): `ampl_acopf/singleperiod/src/main.py`
- [Network reader](https://github.com/matias-vm/acopf/blob/main/ampl_acopf/singleperiod/src/reader.py): `ampl_acopf/singleperiod/src/reader.py`
- [AC solver](https://github.com/matias-vm/acopf/blob/main/ampl_acopf/singleperiod/src/ac.py): `ampl_acopf/singleperiod/src/ac.py`
- [SOCP solver](https://github.com/matias-vm/acopf/blob/main/ampl_acopf/singleperiod/src/socp.py): `ampl_acopf/singleperiod/src/socp.py`
- [Multi-period entry](https://github.com/matias-vm/acopf/blob/main/ampl_acopf/multiperiod/src/main_mtp.py): `ampl_acopf/multiperiod/src/main_mtp.py`
- [Network reader](https://github.com/matias-vm/acopf/blob/main/ampl_acopf/multiperiod/src/reader.py): `ampl_acopf/multiperiod/src/reader.py`
- [AC time model](https://github.com/matias-vm/acopf/blob/main/ampl_acopf/multiperiod/src/ac_mtp.py): `ampl_acopf/multiperiod/src/ac_mtp.py`
- [AC variant](https://github.com/matias-vm/acopf/blob/main/ampl_acopf/multiperiod/src/ac_mtp2.py): `ampl_acopf/multiperiod/src/ac_mtp2.py`
- [SOCP time model](https://github.com/matias-vm/acopf/blob/main/ampl_acopf/multiperiod/src/socp_mtp.py): `ampl_acopf/multiperiod/src/socp_mtp.py`

### Cutting Plane

- [Cut-plane entry](https://github.com/matias-vm/acopf/blob/main/cutplane/singleperiod/src/main.py): `cutplane/singleperiod/src/main.py`
- [Network reader](https://github.com/matias-vm/acopf/blob/main/cutplane/singleperiod/src/reader.py): `cutplane/singleperiod/src/reader.py`
- [Cut-plane model](https://github.com/matias-vm/acopf/blob/main/cutplane/singleperiod/src/cutplane.py): `cutplane/singleperiod/src/cutplane.py`
- [Cut generation](https://github.com/matias-vm/acopf/blob/main/cutplane/singleperiod/src/cuts.py): `cutplane/singleperiod/src/cuts.py`
- [Multi-period entry](https://github.com/matias-vm/acopf/blob/main/cutplane/multiperiod/src/main_mtp.py): `cutplane/multiperiod/src/main_mtp.py`
- [Network reader](https://github.com/matias-vm/acopf/blob/main/cutplane/multiperiod/src/reader.py): `cutplane/multiperiod/src/reader.py`
- [Time cut-plane model](https://github.com/matias-vm/acopf/blob/main/cutplane/multiperiod/src/cutplane_mtp.py): `cutplane/multiperiod/src/cutplane_mtp.py`
- [Time cut generation](https://github.com/matias-vm/acopf/blob/main/cutplane/multiperiod/src/cuts_mtp.py): `cutplane/multiperiod/src/cuts_mtp.py`

### DCOPF

- [DC entry point](https://github.com/matias-vm/acopf/blob/main/dcopf/singleperiod/src/main.py): `dcopf/singleperiod/src/main.py`
- [Network reader](https://github.com/matias-vm/acopf/blob/main/dcopf/singleperiod/src/reader.py): `dcopf/singleperiod/src/reader.py`
- [DC formulation](https://github.com/matias-vm/acopf/blob/main/dcopf/singleperiod/src/dc.py): `dcopf/singleperiod/src/dc.py`
- [Multi-period entry](https://github.com/matias-vm/acopf/blob/main/dcopf/multiperiod/src/main_mtp.py): `dcopf/multiperiod/src/main_mtp.py`
- [Network reader](https://github.com/matias-vm/acopf/blob/main/dcopf/multiperiod/src/reader.py): `dcopf/multiperiod/src/reader.py`
- [Time DC model](https://github.com/matias-vm/acopf/blob/main/dcopf/multiperiod/src/dc_mtp.py): `dcopf/multiperiod/src/dc_mtp.py`

### Other components

- **Analyst**
- **Case and config**
- **AMPL solver**
- **Gurobi solver**

## Connections

- Analyst → Case and config: provides
- Case and config → AC entry point: configures
- AC entry point → Network reader: reads case
- AC entry point → AC solver: dispatches
- AC entry point → SOCP solver: dispatches
- AC solver → AMPL solver: solves with
- SOCP solver → AMPL solver: solves with
- Case and config → Multi-period entry: configures
- AC time model → AMPL solver: solves with
- AC variant → AMPL solver: solves with
- SOCP time model → AMPL solver: solves with
- Case and config → Cut-plane entry: configures
- Cut-plane entry → Network reader: reads case
- Cut-plane entry → Cut-plane model: runs
- Cut-plane model → Cut generation: adds cuts
- Cut-plane model → Gurobi solver: optimizes with
- Case and config → Multi-period entry: configures
- Time cut-plane model → Time cut generation: adds cuts
- Time cut-plane model → Gurobi solver: optimizes with
- Case and config → DC entry point: configures
- DC entry point → Network reader: reads case
- DC entry point → DC formulation: formulates
- DC formulation → Gurobi solver: optimizes with
- Case and config → Multi-period entry: configures
- Time DC model → Gurobi solver: optimizes with
