Skip to content

Repository files navigation

CUFSM Octave CLI

DOI License Octave Platform Status

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

Current Capabilities

  • 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.

Quick Start

Install GNU Octave, then clone and enter the repository:

git clone https://github.com/someparsa/cufsm-octave.git
cd cufsm-octave

Check Octave:

octave-cli --version

Run the JSON example:

octave-cli --quiet cufsm_json.m examples/lipped-channel.json

The 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.m

It writes:

cufsm-results.txt

Documentation

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.

Versioning

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.

JSON Workflow Summary

The preferred runner is:

octave-cli --quiet cufsm_json.m path/to/input.json

The 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.

Example Model

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.

Project Status

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.

Upstream Project

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.

Authorship And Attribution

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.

License

This project is distributed under the MIT License, consistent with the upstream CUFSM project. See LICENSE.

About

GNU Octave-compatible version of CUFSM. CUFSM is a cross-section elastic buckling analysis tool using the finite strip method.

Topics

Resources

Stars

2 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages