# jjmoraa/stablib architecture

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

- Interactive diagram: https://gitdiagram.com/jjmoraa/stablib
- Repository: https://github.com/jjmoraa/stablib

## Overview

stablib is a Python library for Floquet stability analysis of linear time-periodic systems, with rotating-structure examples and OpenFAST-oriented inputs. The typical workflow is to supply a periodic system matrix, integrate it over a period, derive Floquet quantities, then interpret and visualize modes. The README documents this workflow; sampled code shows parametric analysis, mode projection, and rotor-model construction. Some subsystem links below reflect documented capabilities and tree paths, not inspected implementation details.

Main entry points: [`stablib/a_matrix.py`](https://github.com/jjmoraa/stablib/blob/main/stablib/a_matrix.py) (Periodic A(t)), [`stablib/floquet.py`](https://github.com/jjmoraa/stablib/blob/main/stablib/floquet.py) (LTP Integrator), [`stablib/floquetParam.py`](https://github.com/jjmoraa/stablib/blob/main/stablib/floquetParam.py) (Parameter Sweep), [`stablib/dyn_sys_Param.py`](https://github.com/jjmoraa/stablib/blob/main/stablib/dyn_sys_Param.py) (Dynamic Sweep)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_analysis["Floquet Analysis"]
  node_periodic_matrix["Periodic A&#40;t&#41;<br/>[a_matrix.py]"]
  node_parameter_sweep["Parameter Sweep<br/>[floquetParam.py]"]
  node_dynamic_sweep["Dynamic Sweep<br/>[dyn_sys_Param.py]"]
  node_integrator["LTP Integrator<br/>[floquet.py]"]
  node_monodromy["Monodromy Analysis<br/>[floquet.py]"]
  node_floquet_results["Floquet Results<br/>[floquet.py]"]
end

subgraph group_interpretation["Modal Interpretation"]
  node_mode_projection["Mode Projection<br/>[modeProjection.py]"]
  node_postprocessing["Post-Processing<br/>[PostProcessing.py]"]
end

subgraph group_models["System Models"]
  node_state_space["State-Space Builder<br/>[state_space.py]"]
  node_rotor_models["Rotor Models"]
  node_turbine["Turbine Utilities<br/>[turbine.py]"]
end

subgraph group_inputs["Simulation Inputs"]
  node_openfast_reader["OpenFAST Reader<br/>[openfast.py]"]
  node_linear_reader["Linear File Reader<br/>[readlinfiles.py]"]
  node_mbc["MBC Transform<br/>[mbc.py]"]
end

node_analyst(("Analyst"))

node_analyst -->|"defines system"| node_periodic_matrix
node_periodic_matrix -->|"supplies A&#40;t&#41;"| node_parameter_sweep
node_periodic_matrix -->|"supplies A&#40;t&#41;"| node_dynamic_sweep
node_parameter_sweep -->|"runs analysis"| node_integrator
node_dynamic_sweep -->|"runs analysis"| node_integrator
node_integrator -->|"integrates period"| node_monodromy
node_monodromy -->|"derives multipliers"| node_floquet_results
node_floquet_results -->|"provides modes"| node_mode_projection
node_mode_projection -->|"provides modal measures"| node_postprocessing
node_rotor_models -->|"builds matrices"| node_state_space
node_state_space -->|"produces A&#40;t&#41;"| node_periodic_matrix
node_openfast_reader -.->|"reads linear data"| node_linear_reader
node_linear_reader -.->|"supplies periodic data"| node_mbc
node_mbc -.->|"transforms system"| node_periodic_matrix
node_turbine -->|"supports turbine models"| node_rotor_models

click node_periodic_matrix "https://github.com/jjmoraa/stablib/blob/main/stablib/a_matrix.py"
click node_parameter_sweep "https://github.com/jjmoraa/stablib/blob/main/stablib/floquetParam.py"
click node_dynamic_sweep "https://github.com/jjmoraa/stablib/blob/main/stablib/dyn_sys_Param.py"
click node_integrator "https://github.com/jjmoraa/stablib/blob/main/stablib/floquet.py"
click node_monodromy "https://github.com/jjmoraa/stablib/blob/main/stablib/floquet.py"
click node_floquet_results "https://github.com/jjmoraa/stablib/blob/main/stablib/floquet.py"
click node_state_space "https://github.com/jjmoraa/stablib/blob/main/stablib/state_space.py"
click node_rotor_models "https://github.com/jjmoraa/stablib/tree/main/stablib/models"
click node_openfast_reader "https://github.com/jjmoraa/stablib/blob/main/stablib/openfast.py"
click node_linear_reader "https://github.com/jjmoraa/stablib/blob/main/stablib/readlinfiles.py"
click node_mbc "https://github.com/jjmoraa/stablib/blob/main/stablib/mbc.py"
click node_mode_projection "https://github.com/jjmoraa/stablib/blob/main/stablib/modeProjection.py"
click node_postprocessing "https://github.com/jjmoraa/stablib/blob/main/stablib/PostProcessing.py"
click node_turbine "https://github.com/jjmoraa/stablib/blob/main/stablib/turbine.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_periodic_matrix,node_parameter_sweep,node_dynamic_sweep,node_integrator,node_monodromy,node_floquet_results toneBlue
class node_mode_projection,node_postprocessing toneAmber
class node_state_space,node_rotor_models,node_turbine toneMint
class node_openfast_reader,node_linear_reader,node_mbc toneRose
class node_analyst toneIndigo
```

## Components

### Floquet Analysis

- [Periodic A(t)](https://github.com/jjmoraa/stablib/blob/main/stablib/a_matrix.py): `stablib/a_matrix.py`
- [Parameter Sweep](https://github.com/jjmoraa/stablib/blob/main/stablib/floquetParam.py): `stablib/floquetParam.py`
- [Dynamic Sweep](https://github.com/jjmoraa/stablib/blob/main/stablib/dyn_sys_Param.py): `stablib/dyn_sys_Param.py`
- [LTP Integrator](https://github.com/jjmoraa/stablib/blob/main/stablib/floquet.py): `stablib/floquet.py`
- [Monodromy Analysis](https://github.com/jjmoraa/stablib/blob/main/stablib/floquet.py): `stablib/floquet.py`
- [Floquet Results](https://github.com/jjmoraa/stablib/blob/main/stablib/floquet.py): `stablib/floquet.py`

### Modal Interpretation

- [Mode Projection](https://github.com/jjmoraa/stablib/blob/main/stablib/modeProjection.py): `stablib/modeProjection.py`
- [Post-Processing](https://github.com/jjmoraa/stablib/blob/main/stablib/PostProcessing.py): `stablib/PostProcessing.py`

### System Models

- [State-Space Builder](https://github.com/jjmoraa/stablib/blob/main/stablib/state_space.py): `stablib/state_space.py`
- [Rotor Models](https://github.com/jjmoraa/stablib/tree/main/stablib/models): `stablib/models`
- [Turbine Utilities](https://github.com/jjmoraa/stablib/blob/main/stablib/turbine.py): `stablib/turbine.py`

### Simulation Inputs

- [OpenFAST Reader](https://github.com/jjmoraa/stablib/blob/main/stablib/openfast.py): `stablib/openfast.py`
- [Linear File Reader](https://github.com/jjmoraa/stablib/blob/main/stablib/readlinfiles.py): `stablib/readlinfiles.py`
- [MBC Transform](https://github.com/jjmoraa/stablib/blob/main/stablib/mbc.py): `stablib/mbc.py`

### Other components

- **Analyst**

## Connections

- Analyst → Periodic A(t): defines system
- Periodic A(t) → Parameter Sweep: supplies A(t)
- Periodic A(t) → Dynamic Sweep: supplies A(t)
- Parameter Sweep → LTP Integrator: runs analysis
- Dynamic Sweep → LTP Integrator: runs analysis
- LTP Integrator → Monodromy Analysis: integrates period
- Monodromy Analysis → Floquet Results: derives multipliers
- Floquet Results → Mode Projection: provides modes
- Mode Projection → Post-Processing: provides modal measures
- Rotor Models → State-Space Builder: builds matrices
- State-Space Builder → Periodic A(t): produces A(t)
- OpenFAST Reader → Linear File Reader: reads linear data
- Linear File Reader → MBC Transform: supplies periodic data
- MBC Transform → Periodic A(t): transforms system
- Turbine Utilities → Rotor Models: supports turbine models
