# wannier-developers/wannier90 architecture

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

- Interactive diagram: https://gitdiagram.com/wannier-developers/wannier90
- Repository: https://github.com/wannier-developers/wannier90

## Overview

Wannier90 generates maximally localised Wannier functions from electronic-structure data, then uses them to compute advanced material properties. The documented in-memory workflow lets a host code configure options and provide overlap, projection and eigenvalue arrays, then invoke disentanglement, optimisation and plotting/transport; the standalone executables provide the corresponding user-facing route. The Fortran implementation and post-processing internals were not sampled, so those components use existing source directories and documented capabilities; edges reflect README statements or the visible C-to-Fortran wrapper calls.

Main entry points: [`src/wannier90.h`](https://github.com/wannier-developers/wannier90/blob/develop/src/wannier90.h) (Library API), [`src`](https://github.com/wannier-developers/wannier90/tree/develop/src) (wannier90.x), [`src/wannier90.c`](https://github.com/wannier-developers/wannier90/blob/develop/src/wannier90.c) (C bindings), [`src/postw90`](https://github.com/wannier-developers/wannier90/tree/develop/src/postw90) (postw90.x)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_wannier["Wannierisation"]
  node_inputs["Electronic data"]
  node_standalone["wannier90.x"]
  node_disentangle["Disentanglement"]
  node_optimise["MLWF optimisation"]
end

subgraph group_library["Library interface"]
  node_library_api["Library API<br/>[wannier90.h]"]
  node_c_wrapper["C bindings<br/>[wannier90.c]"]
end

subgraph group_properties["Property analysis"]
  node_post["postw90.x"]
  node_advanced["Advanced properties"]
end

node_host(("Host code"))
node_user(("Wannier90 user"))

node_user -->|"runs"| node_standalone
node_host -->|"configures and calls"| node_library_api
node_inputs -->|"provides data"| node_standalone
node_host -->|"provides arrays"| node_library_api
node_library_api -.->|"uses C bindings"| node_c_wrapper
node_c_wrapper -->|"calls Fortran wrappers"| node_library_api
node_standalone -.->|"runs"| node_disentangle
node_standalone -.->|"runs"| node_optimise
node_library_api -->|"invokes"| node_disentangle
node_library_api -->|"invokes"| node_optimise
node_user -->|"runs"| node_post
node_post -->|"computes"| node_advanced
node_library_api -->|"invokes plotting and transport"| node_advanced

click node_standalone "https://github.com/wannier-developers/wannier90/tree/develop/src"
click node_disentangle "https://github.com/wannier-developers/wannier90/tree/develop/src"
click node_optimise "https://github.com/wannier-developers/wannier90/tree/develop/src"
click node_library_api "https://github.com/wannier-developers/wannier90/blob/develop/src/wannier90.h"
click node_c_wrapper "https://github.com/wannier-developers/wannier90/blob/develop/src/wannier90.c"
click node_post "https://github.com/wannier-developers/wannier90/tree/develop/src/postw90"
click node_advanced "https://github.com/wannier-developers/wannier90/tree/develop/src/postw90"

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_inputs,node_standalone,node_disentangle,node_optimise,node_user toneBlue
class node_library_api,node_c_wrapper toneAmber
class node_post,node_advanced toneMint
class node_host toneIndigo
```

## Components

### Wannierisation

- **Electronic data**
- [wannier90.x](https://github.com/wannier-developers/wannier90/tree/develop/src): `src`
- [Disentanglement](https://github.com/wannier-developers/wannier90/tree/develop/src): `src`
- [MLWF optimisation](https://github.com/wannier-developers/wannier90/tree/develop/src): `src`

### Library interface

- [Library API](https://github.com/wannier-developers/wannier90/blob/develop/src/wannier90.h): `src/wannier90.h`
- [C bindings](https://github.com/wannier-developers/wannier90/blob/develop/src/wannier90.c): `src/wannier90.c`

### Property analysis

- [postw90.x](https://github.com/wannier-developers/wannier90/tree/develop/src/postw90): `src/postw90`
- [Advanced properties](https://github.com/wannier-developers/wannier90/tree/develop/src/postw90): `src/postw90`

### Other components

- **Host code**
- **Wannier90 user**

## Connections

- Wannier90 user → wannier90.x: runs (evidence: `README.md`)
- Host code → Library API: configures and calls (evidence: `README.md`)
- Electronic data → wannier90.x: provides data (evidence: `README.md`)
- Host code → Library API: provides arrays (evidence: `README.md`)
- Library API → C bindings: uses C bindings (evidence: `src/wannier90.c`)
- C bindings → Library API: calls Fortran wrappers (evidence: `src/wannier90.c`)
- wannier90.x → Disentanglement: runs
- wannier90.x → MLWF optimisation: runs
- Library API → Disentanglement: invokes (evidence: `README.md`)
- Library API → MLWF optimisation: invokes (evidence: `README.md`)
- Wannier90 user → postw90.x: runs (evidence: `README.md`)
- postw90.x → Advanced properties: computes (evidence: `README.md`)
- Library API → Advanced properties: invokes plotting and transport (evidence: `README.md`)
