Octave-oriented adaptation by Parsa Yazdi
CUFSM Octave CLI is a command-line-oriented adaptation of CUFSM, the constrained and unconstrained finite strip method software for elastic buckling analysis of thin-walled member cross-sections.
This repository adapts CUFSM numerical routines for headless execution with GNU Octave. The main workflow runs signature-curve analyses from JSON input files and writes machine-readable JSON results plus text reports.
For citation details, please use the repository’s citation file: CITATION.cff, or cite the archived release as: Yazdi, P. (2026). CUFSM Octave CLI. Zenodo. https://doi.org/10.5281/zenodo.20635622
- Runs CUFSM signature-curve analysis from
octave-cli. - Supports reproducible JSON input for model, loading, analysis, and output settings.
- Includes Python helpers for generating JSON inputs from common section templates.
- Includes Python post-processing helpers for reading result JSON and plotting signature curves.
- Includes Python workflow examples for batch sweeps and simple grid-search optimisation.
- Supports generated loading from reference actions or direct stress-table loading.
- Inserts declared member lengths into the solved length set.
- Reports signature curves, critical points, classified minima, and cFSM mode participation.
- Writes JSON and text outputs suitable for automation and manual review.
- Retains the broader CUFSM numerical source as a basis for continued CLI development.
Install GNU Octave, then clone and enter the repository:
git clone https://github.com/someparsa/cufsm-octave.git
cd cufsm-octaveCheck Octave:
octave-cli --versionRun the JSON example:
octave-cli --quiet cufsm_json.m examples/lipped-channel.jsonThe example writes:
examples/lipped-channel-results.json
examples/lipped-channel-results.txt
The older hardcoded example is also available:
octave-cli --quiet cufsm-octave-example.mIt writes:
cufsm-results.txt
| Topic | Document |
|---|---|
| Installation and first run | docs/getting-started.md |
| JSON input fields | docs/json-input-format.md |
| JSON and text output fields | docs/json-output-format.md |
| Example walkthrough | docs/examples.md |
| Signature-curve and mode-family background | docs/theory-and-cufsm-background.md |
| Compatibility and regression scope | docs/compatibility-and-regression.md |
| Python tooling | docs/python-tooling.md |
| Development direction | docs/development-roadmap.md |
| Backend code map | docs/backend-code-map.md |
The JSON schema is tracked at schema/input-v1.schema.json.
This repository uses separate version identifiers for separate compatibility surfaces:
| Version surface | Current version | Meaning |
|---|---|---|
| Project release | v2.5.66 |
CUFSM Octave CLI release version. The leading project number identifies this repository's interface/tooling generation. |
| CUFSM compatibility | 5.66 |
Original CUFSM numerical source version that this project is compatible with or derived from. |
| Python package | 0.2.0 |
Version in pyproject.toml; this follows its own Python tooling release track. |
| JSON input schema | 1.0 |
Version of the JSON input contract used inside input files and the JSON schema. |
For this release, v2.5.66 means the second-generation CUFSM Octave
interface/tooling release built around compatibility with CUFSM 5.66. The
Python package is versioned separately as 0.2.0, and the JSON input schema
remains 1.0 because the JSON contract has not been version-bumped.
The preferred runner is:
octave-cli --quiet cufsm_json.m path/to/input.jsonThe input JSON is the source of truth for model and analysis settings. The CLI should remain thin and should not duplicate engineering options that belong in the JSON file.
Key input sections:
| JSON section | Purpose |
|---|---|
model |
Materials, nodes, elements, springs, and constraints. |
loading |
Stress-table loading or generated stresses from actions. |
analysis |
Signature-curve settings, boundary condition, lengths, member lengths, eigenmodes, mesh refinement, and cFSM settings. |
output |
JSON and text output paths. |
Mode-family participation uses numeric dominant-family codes:
| Code | Buckling mode family |
|---|---|
1 |
Global |
2 |
Distortional |
3 |
Local |
4 |
Other |
Important output fields:
| JSON output key | Meaning |
|---|---|
signature_curve |
Lowest eigenvalue at each analyzed length. |
critical_points.local_minima_classified |
Detected local minima with cFSM participation and dominant family. |
critical_points.family_minima |
Lowest detected minimum for each dominant family that appears. |
mode_participation.lowest_modes |
Lowest-mode participation at every analyzed length. |
mode_participation.member_lengths |
All solved eigenmodes at declared member lengths. |
mode_participation.signature_minima |
All solved eigenmodes at detected signature-curve minima. |
The included JSON example defines a lipped channel under generated uniform compression. It uses simply supported loaded edges and evaluates a logarithmically spaced signature curve with an inserted member length:
"lengths": {
"type": "logspace",
"min": 1.0,
"max": 1000.0,
"count": 100,
"member_lengths": [120.0]
}See docs/examples.md for details.
This repository is under active development. The JSON workflow executes successfully with GNU Octave, and current development focuses on the headless runner contract, JSON/Python interoperability, examples, and compatibility checks against known CUFSM workflows.
See TODO.md, IMPROVEMENTS.md, and docs/development-roadmap.md.
The finite strip implementation and core engineering methods originate from the official thinwalled/cufsm-git repository. CUFSM was developed by Benjamin W. Schafer and contributors.
This repository is an independent CLI-oriented development project. It is not a replacement for the official CUFSM distribution, GUI, documentation, or compiled applications.
CLI-oriented development and maintenance:
Parsa Yazdi
University of Waikato
Original CUFSM development and contributors are documented by the upstream project and its citation metadata:
Users publishing research based on this software should cite the official CUFSM project and the relevant finite strip method literature identified by the upstream repository.
This project is distributed under the MIT License, consistent with the upstream CUFSM project. See LICENSE.