Skip to content

Let ROSCO toolbox determine TSR - #476

Merged
ptrbortolotti merged 4 commits into
NLRWindSystems:developfrom
dzalkind:tsr_downstream
Jul 22, 2026
Merged

Let ROSCO toolbox determine TSR#476
ptrbortolotti merged 4 commits into
NLRWindSystems:developfrom
dzalkind:tsr_downstream

Conversation

@dzalkind

Copy link
Copy Markdown
Collaborator

Purpose

Allow the ROSCO toolbox to determine the optimal TSR from the Cp surface when tuning ROSCO, rather than only supporting a pre-set TSR from the tuning yaml or the value determined by WISDEM.

  • Adds resolve_tsr_operational() in weis/control/tune_rosco.py, which resolves TSR_operational (and the dependent rated wind speed, v_rated) used to tune ROSCO:
    • If TSR_operational is set to 0 in the ROSCO tuning inputs (rosco_tuning_inputs), it is auto-computed from the Cp surface (Cp.TSR_opt), matching standalone ROSCO's convention in rosco.toolbox.turbine.Turbine.
    • If TSR_operational is set to a positive value, it overrides the WISDEM-provided default (control.rated_TSR / optimal TSR).
    • If the key is absent, the WISDEM-provided default is used unchanged (pre-existing behavior).
  • Updates TuneROSCO.compute() to call resolve_tsr_operational() once the Cp surface is available, instead of computing v_rated and TSR_operational directly from the WISDEM tsr_operational input.

Type of change

  • Bugfix (non-breaking change which fixes an issue)
  • New feature (non-breaking change which adds functionality)
  • Breaking change (non-backwards-compatible fix or feature)
  • Code style update (formatting, renaming)
  • Refactoring (no functional changes, no API changes)
  • Documentation update
  • Maintenance update
  • Other (please describe)

Testing

Added weis/control/test/test_tune_rosco.py, a regression/unit test suite for resolve_tsr_operational() covering:

  • TSR_operational = 0 auto-computes the optimal TSR from a synthetic Cp surface (Cp.TSR_opt).
  • A positive TSR_operational overrides the WISDEM-provided default.
  • Omitting TSR_operational from the ROSCO tuning inputs leaves the WISDEM-provided default unchanged.

Checklist

  • I have run existing tests which pass locally with my changes
  • I have added new tests or examples that prove my fix is effective or that my feature works
  • I have added necessary documentation

dzalkind and others added 4 commits April 28, 2026 08:45
* Fully disable 2nd tower mode shapes if DOF is disabled

* Fully disable 2nd tower mode shapes if DOF is disabled (NLRWindSystems#466)

* Add moorpy version 1.2.1 to environment.yml

* move some pypi packages to the conda forge

* fix readme (NLRWindSystems#467)

* Add Mean_PtfmPitch as an optimization constraint

* trying updated wisdem to reduce package dependencies

* unlock openmdao

* Add some helper functions for platform design

* Cd into notebooks for testing

* Tidy platform optimization in RAFT

* Remove plot_tradeoff

* convert radians to degrees for heel constraints

* seeing if openmpi speeds up installation

* maybe without pyoptsparse for speedup?

* one more combo

* native mpi

* found solution, restoring full test matrix

* caught more rad to deg conversions

---------

Co-authored-by: Garrett Barter <garrett.barter@nrel.gov>
Co-authored-by: Pietro Bortolotti <ptrbortolotti@gmail.com>
Co-authored-by: Garrett Barter <gbarter@alum.mit.edu>
@dzalkind
dzalkind requested a review from ptrbortolotti July 22, 2026 14:02
@ptrbortolotti
ptrbortolotti merged commit aed024a into NLRWindSystems:develop Jul 22, 2026
17 of 18 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants