From 29f0a9808a5e729b44214e6f753585e032654934 Mon Sep 17 00:00:00 2001 From: Jae Hoon Seo Date: Mon, 6 Jul 2026 08:20:09 +0900 Subject: [PATCH] chore: bump version to 1.16.1, promote CHANGELOG WindIO auto-RNA rotor-inertia fix (#130) plus the angle_units control and one/two-bladed guard that came out of review. --- CHANGELOG.md | 28 +++++++++++++++++++++++++++- CITATION.cff | 4 ++-- pyproject.toml | 2 +- src/pybmodes/__init__.py | 2 +- 4 files changed, 31 insertions(+), 5 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index a2810ed..38950b3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,6 +8,21 @@ The format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/). ## [Unreleased] +(nothing yet) + +## [1.16.1] — 2026-07-06 + +### Added + +- **`angle_units` control on the WindIO auto-RNA.** `read_windio_rna` + gains `angle_units` (`"auto"` / `"rad"` / `"deg"`), forwarded from + `Tower.from_windio` and `Tower.from_windio_with_monopile` as + `rna_angle_units`. The WindIO v2 schema annotates `cone_angle` / + `uptilt` as degrees while the IEA reference ontologies store radians; + `"auto"` (default) disambiguates by magnitude, and `"rad"` / `"deg"` + take the file at its word for the rare all-sub-degree case `"auto"` + cannot resolve. + ### Fixed - **WindIO auto-RNA now carries the rotor inertia from the spanwise blade @@ -31,7 +46,18 @@ The format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/). tower frequencies), and the CM for coned rotors, relative to 1.16.0; the total mass is unchanged. This intentionally goes beyond the ElastoDyn deck path's point-mass lumping, which the WindIO per-station blade mass - makes possible. + makes possible. The rotor lever now folds in the coned hub radius + (`(hub_radius + span)·cos(cone)`, matching WISDEM/ElastoDyn), prebend and + sweep, and measures the span from the blade root (so a `reference_axis.z` + offset from zero no longer places sections too far out); a hub tensor's + off-diagonal terms are rotated with the correct WindIO hub-frame + handedness. +- **The auto-RNA rejects one- and two-bladed rotors.** The axisymmetric + `I_polar/2` transverse split holds only for three or more evenly spaced + blades; a one- or two-bladed rotor has an azimuth-dependent transverse + inertia that a single rigid tower-top lump cannot represent, so + `read_windio_rna` now raises a clear `ValueError` pointing at an explicit + `tip_mass` rather than emitting a corrupted fore-aft / side-side inertia. ## [1.16.0] — 2026-07-03 diff --git a/CITATION.cff b/CITATION.cff index 464fa5e..382d909 100644 --- a/CITATION.cff +++ b/CITATION.cff @@ -22,8 +22,8 @@ authors: email: jaehoon.seo@inha.ac.kr affiliation: "Marine Structural Mechanics and Integrity Lab (SMI Lab), Inha University" orcid: "https://orcid.org/0000-0003-1047-2119" -version: 1.16.0 -date-released: "2026-07-03" +version: 1.16.1 +date-released: "2026-07-06" license: Apache-2.0 repository-code: "https://github.com/SMI-Lab-Inha/pyBModes" url: "https://github.com/SMI-Lab-Inha/pyBModes" diff --git a/pyproject.toml b/pyproject.toml index afba4de..850bbe5 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta" [project] name = "pybmodes" -version = "1.16.0" +version = "1.16.1" description = "Python finite-element library for wind turbine blade and tower modal analysis (OpenFAST/ElastoDyn)" readme = "README.md" license = { file = "LICENSE" } diff --git a/src/pybmodes/__init__.py b/src/pybmodes/__init__.py index 0ba8a9d..6fe9042 100644 --- a/src/pybmodes/__init__.py +++ b/src/pybmodes/__init__.py @@ -214,7 +214,7 @@ except PackageNotFoundError: # Fallback for an uninstalled source tree (no package metadata). # Keep in step with ``pyproject.toml`` ``[project] version``. - __version__ = "1.16.0" + __version__ = "1.16.1" __all__ = [ "CheckOptions",