From fd1ac2bb5136ea683446b764fdec60eef0b8a107 Mon Sep 17 00:00:00 2001 From: Abhineet Gupta Date: Tue, 13 Jan 2026 08:22:56 -0700 Subject: [PATCH 1/5] Fix startup routine to add gearbox ratio to calculations --- rosco/controller/src/ControllerBlocks.f90 | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/rosco/controller/src/ControllerBlocks.f90 b/rosco/controller/src/ControllerBlocks.f90 index 1d096a7f..ac5dc779 100644 --- a/rosco/controller/src/ControllerBlocks.f90 +++ b/rosco/controller/src/ControllerBlocks.f90 @@ -605,13 +605,13 @@ SUBROUTINE Startup(LocalVar, CntrPar, objInst,ErrVar) ! Set PRC_R_Speed, SU_PrevLoad based on SU_Stage IF (LocalVar%SU_Stage == 1) THEN - LocalVar%PRC_R_Speed = CntrPar%SU_RotorSpeedThresh / CntrPar%PC_RefSpd + LocalVar%PRC_R_Speed = CntrPar%SU_RotorSpeedThresh / CntrPar%PC_RefSpd * CntrPar%WE_GearboxRatio ELSEIF (LocalVar%SU_Stage == 2) THEN SU_PrevLoad = 0.0_DbKi ! Ramp up PRC_R_Speed to 1.0 in duration = SU_LoadRampDuration(1) LocalVar%PRC_R_Speed = sigma(LocalVar%Time,LocalVar%SU_LoadStageStartTime, & LocalVar%SU_LoadStageStartTime + CntrPar%SU_LoadRampDuration(LocalVar%SU_Stage - 1), & - CntrPar%SU_RotorSpeedThresh / CntrPar%PC_RefSpd ,1.0_DbKi,ErrVar) + CntrPar%SU_RotorSpeedThresh * CntrPar%WE_GearboxRatio / CntrPar%PC_RefSpd ,1.0_DbKi,ErrVar) ELSEIF ((LocalVar%SU_Stage .ge. 2) .AND. (LocalVar%SU_Stage .le. CntrPar%SU_LoadStages_N + 1)) THEN SU_PrevLoad = CntrPar%SU_LoadStages(LocalVar%SU_Stage-2) ELSEIF (LocalVar%SU_Stage == CntrPar%SU_LoadStages_N + 2) THEN From c3fbee8f16e5ac0ece3aa7d44cbb990b53296449 Mon Sep 17 00:00:00 2001 From: Abhineet Gupta Date: Tue, 13 Jan 2026 09:22:06 -0700 Subject: [PATCH 2/5] Fix order of operation for startup routine --- rosco/controller/src/ControllerBlocks.f90 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rosco/controller/src/ControllerBlocks.f90 b/rosco/controller/src/ControllerBlocks.f90 index ac5dc779..3593e476 100644 --- a/rosco/controller/src/ControllerBlocks.f90 +++ b/rosco/controller/src/ControllerBlocks.f90 @@ -605,7 +605,7 @@ SUBROUTINE Startup(LocalVar, CntrPar, objInst,ErrVar) ! Set PRC_R_Speed, SU_PrevLoad based on SU_Stage IF (LocalVar%SU_Stage == 1) THEN - LocalVar%PRC_R_Speed = CntrPar%SU_RotorSpeedThresh / CntrPar%PC_RefSpd * CntrPar%WE_GearboxRatio + LocalVar%PRC_R_Speed = CntrPar%SU_RotorSpeedThresh * CntrPar%WE_GearboxRatio / CntrPar%PC_RefSpd ELSEIF (LocalVar%SU_Stage == 2) THEN SU_PrevLoad = 0.0_DbKi ! Ramp up PRC_R_Speed to 1.0 in duration = SU_LoadRampDuration(1) From d8560661bd04f5c8bfbebaa9e8eac626ca8c470a Mon Sep 17 00:00:00 2001 From: dzalkind Date: Thu, 22 Jan 2026 11:48:14 -0700 Subject: [PATCH 3/5] Fix a float cast for new numpy --- rosco/toolbox/utilities.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rosco/toolbox/utilities.py b/rosco/toolbox/utilities.py index a4b116b4..c2f91f07 100644 --- a/rosco/toolbox/utilities.py +++ b/rosco/toolbox/utilities.py @@ -770,7 +770,7 @@ def list_check(x, return_bool=True): elif isinstance(x, np.ndarray): if x.size == 1: is_list = False - y = float(x) + y = float(x[0]) else: is_list = True y = x From e37b7f84e77287f01fb2b9745c33c41707b0cc02 Mon Sep 17 00:00:00 2001 From: dzalkind Date: Thu, 22 Jan 2026 14:06:47 -0700 Subject: [PATCH 4/5] Increment version for release --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index 4e64e501..ccaa0ec8 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta" [project] name = "rosco" -version = "2.10.3" +version = "2.10.4" description = "A reference open source controller toolset for wind turbine applications." readme = "README.md" requires-python = ">=3.9" From cffa7f116e0a15df82f24b4beaaa8d71747e6f80 Mon Sep 17 00:00:00 2001 From: dzalkind Date: Thu, 22 Jan 2026 16:24:22 -0700 Subject: [PATCH 5/5] Add write_yaml function for rosco tuning yaml --- rosco/toolbox/inputs/validation.py | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/rosco/toolbox/inputs/validation.py b/rosco/toolbox/inputs/validation.py index aacdac6d..59ef7a45 100644 --- a/rosco/toolbox/inputs/validation.py +++ b/rosco/toolbox/inputs/validation.py @@ -1,5 +1,8 @@ import os from wisdem.inputs.validation import _validate +from openfast_io.FileTools import remove_numpy +from windIO.yaml import write_yaml + schema_dir = os.path.dirname(os.path.abspath(__file__)) @@ -7,10 +10,18 @@ def load_rosco_yaml(finput, rank_0=False): rosco_schema = os.path.join(schema_dir,'toolbox_schema.yaml') return _validate(finput, rosco_schema, defaults=True, rank_0=rank_0) +def write_rosco_yaml(instance, foutput): + rosco_schema = os.path.join(schema_dir,'toolbox_schema.yaml') + _validate(instance, rosco_schema, restrictive=False, removal=True, defaults=False, rank_0=True) + instance2 = remove_numpy(instance) + write_yaml(instance2, foutput) + if __name__=='__main__': - fname = '/Users/dzalkind/Tools/ROSCO/Tune_Cases/NREL5MW.yaml' + fname = '/Users/dzalkind/Tools/ROSCO-PRC/Examples/Tune_Cases/NREL5MW.yaml' new_input = load_rosco_yaml(fname) + + write_rosco_yaml(new_input, 'test_output.yaml') print('here')