Skip to content

Commit

Permalink
ROSCO 2.6.0 (#162)
Browse files Browse the repository at this point in the history
* FOCAL Updates (#64)

* Update headers

* fix bullets

* make uppercase

* Update turbine.py (#56)

* Update turbine.py

This add several lines for fixing the problem of repeated maximum values in the performance tables. This will cause the error (' the length of x and y is different.') of 'interpolate.interp1d.'

* Add comments and catch when there are multiple optimal pitch angles

Co-authored-by: dzalkind <dzalkind@nrel.gov>

* increment version

* Update for OpenFAST v3.0.0

* Update for OpenFAST v3.0.0

* Install OF3.0.0 for tests

* update for OF v3.0.0

* add publish to pypi on release

* Update to ROSCO v2.3.0

* Update Testing (#58)

* Update scripts to run on eagle

* Update IEA-15MW semi example: use peak shaving w/ ps_percen=0.8

* Add comparison plots to testing scripts

* Update submit script for testing

* Update for latest eagle runs

* Add future to install dependencies

* add TMax to self, define tmin in print_results

* run tests in CI

* generic ROSCO path

* default to overwrite

* fix path

* import platform

* separate run_testing

* cleanup, specify lite test

* don't run testing in after examples, oops.

Co-authored-by: nikhar-abbas <40865984+nikhar-abbas@users.noreply.github.com>
Co-authored-by: Nikhar Abbas <nikhar.abbas@colorado.edu>

* increment version

* Update for OpenFAST v3.0.0

* Install OF3.0.0 for tests

* update for OF v3.0.0

* add publish to pypi on release

* Update to ROSCO v2.3.0

* Increment Version, OF3.0 (#57)

* increment version

* Update for OpenFAST v3.0.0

* Install OF3.0.0 for tests

* update for OF v3.0.0

* add publish to pypi on release

* Update to ROSCO v2.3.0

* increment version

* Update for OpenFAST v3.0.0

* Install OF3.0.0 for tests

* update for OF v3.0.0

* add publish to pypi on release

* Update to ROSCO v2.3.0

* add ROSCO without submodule

* move ROSCO source to ROSCO folder

* Move cmake-related files to ROSCO

* Add back pesky ErrVar

* Remove parameters_files

* Merge ROSCO and _toolbox gitignore

* Fix .gitignore

* Remove Examples/DISCON.IN from git

* Fix and point example_01 to Tune_Cases/

* Update verbiage around using ofTools vs. weis

* Fix and point example_04 to Tune_Cases/

* Clean up example_06

* Clean up example_07

* Only check FlpCornerFreq if using Flp control, fixes example 05

* Make example_04 consistent with others

* Let example_05 run independently from 04

* Clean up example_05, wind files

* Add schema and update empty tuning yaml inputs, not connected yet

* Integrate schema into turbine, controller, and examples

* Only check Fl filter parameters if Fl_Mode > 0, fix example_05

* bump version to 2.3

* Compile ROSCO from ROSCO dir

* Rename to CI_rosco

* Add omega vs. windspeed functionality

* Fix tests: 5MW U_pc and 06 example dir

* Make _Toolbox vs_minspeed in rotor frame to match ROSCO

* Revert ServoDyn change

* change rotor speed constraint to be epsilon

* rename for clarity

* docs major refresh

* fix FA_AccF units in debug file

* docs that build locally

* Deallocate arrays in ROSCO, check in example_05

* Clean up comments

* remove gitmodules

* furo theme

* furo in requirements

* move readthedocs config file, remove furo import in conf.py

* add docs requirements file

* typo

* move index out of source folder

* trying to get furo to work

* import date

* fix versions and titles, cleanup readthedocs requirements

* typo fix, remove extras

* more cleanup

* bump version

* no furo extension, "hack" to load RT version

* proper toctree paths

* specify method

* add mock modules

* fix typos

* update python install requirements

* running locally

* move index to main docs dir again

* update to build locally

* error during warnings

* automated version

* cleanup

* remove old docs

* re-add docs

* simplify

* fix figure path

* try alabaster

* remove archived docs

* Add omega vs. windspeed functionality

* Fix tests: 5MW U_pc and 06 example dir

* more detailed sp.optimize settings

* run MBC3 in parallel

* restructure driver, run initialization doe for tuning

* Try new dlclose function

* Update example_05 to run simple simulation twice and check result

* Revert deallocation stuff

* Close discon library after every sim run

* Test examples on macOS and windows

* Run examples instead of testing on other platforms

* Skip examples in windows for now

* update paths and yaml load funciton

* Skip mac testing of examples

* provide default U_pc for single omega/zeta case

* allow for float or list-like pc tuning inputs

* Change name in setup.py

* WE_Vw unit fix

* Pass through kp_float, if desired

* Minor fixes: schema error and InputReader defaults

* cleeanup for improved stability

* check for doe_logs as string in load_DOE

* major restructure for rsched_driver class

* cleanup verbosity

* run serial by default

* load_parallel as linturb_option

* specific IEA15MW yaml for multi omega

* remove unused module imports

* fix error message types

* lin_file as input

* add comments on inputs to LinearTurbineModel init method

* remove relative file paths

* provide OpenFAST linearizations for IEA15MW UMaineSemi

* put plotting in specific function

* fix WE_lambda units

* add self in on a few necessary variables

* creaete example 12 for robust scheduling

* try a few mbc3 locations for import

* allow list-like or numpy arrays for omega_pc and zeta_pc schedules

* create and use recorder setup function

* Pass Through Kp_float (#57)

* Pass through kp_float, if desired

* Minor fixes: schema error and InputReader defaults

* fix setup_recorder to work for optimization driver too

* Allow pass through of Kp_float = 0

* cleanup om problems, update om0 calc

* doe levels as input

* negative k_float to account for OF conventions

* cleanup print statements

* variable name cleanup, use calculated k_float

* Add defaults to omega_,zeta_ pc and vs, allow to be numbers

* use standard tuning k_float as IC

* formatting update

* update problem setup methods

* cleanup add_dv, enable adding design variables after problem is setup

* change optimization step size

* more setup restructure

* update verbosity

* use sphinx-rtd-theme

* master doc and sphinx rtd theme

* index back to root folder

* only ignore install folders

* remove hidden toctree

* furo theme

* update paths

* convert rt version to string

* update sphinx settings

* move conf

* furo theme

* Mostly a docs update (#61)

* rename for clarity

* docs major refresh

* fix FA_AccF units in debug file

* docs that build locally

* remove gitmodules

* furo theme

* furo in requirements

* move readthedocs config file, remove furo import in conf.py

* add docs requirements file

* typo

* move index out of source folder

* trying to get furo to work

* import date

* fix versions and titles, cleanup readthedocs requirements

* typo fix, remove extras

* more cleanup

* bump version

* no furo extension, "hack" to load RT version

* proper toctree paths

* specify method

* add mock modules

* fix typos

* update python install requirements

* running locally

* move index to main docs dir again

* update to build locally

* error during warnings

* automated version

* cleanup

* remove old docs

* re-add docs

* simplify

* fix figure path

* try alabaster

* remove archived docs

* use sphinx-rtd-theme

* master doc and sphinx rtd theme

* index back to root folder

* only ignore install folders

* remove hidden toctree

* furo theme

* update paths

* convert rt version to string

* update sphinx settings

* move conf

* furo theme

* Pass through Kp_float = 0 (#59)

* Pass through kp_float, if desired

* Minor fixes: schema error and InputReader defaults

* Allow pass through of Kp_float = 0

* Add flp parameters to schema

* Change Fl_Mode default to 0

* Add defaults to omega_,zeta_ pc and vs, allow to be numbers

* Allow single pitch tuning values in code, default U_pc to 0

* use nac acceleration for floating feedback

* Fix TSR saturation for region 2.5operation

* Modify system for constant power operation

* Only modify pole for constant power above-rated

* Remove GenEff from K calc

* Update tuning, use constant power

* use load_rosco_yaml

* constant power

* Fix broken tests

* Include Fl_Mode=2 for nacelle pitching feedback

* Add FOCAL inputs
- hpf on floating feedback
- lpf on wind speed estimator
- associated schema updates

* Set notch and check frequencies when Fl_Mode = 1 (fixes bug)

* Skip filter step if there's an error

* Update IEA-15MW test case DISCON with focal inputs

* Allow Fl_Mode = 2 in ROSCO

* Pass through lpf frequency

* Add FOCAL tuning yaml

* Set Cp contour number of levels

* Add FOCAL params to various writers

* Update/tune focal yaml

* Add scripts for running FAST, tuning various parameters and cases

* Add notebook for FAST plotting

* Set up step case for testing

* Change doubles to C_doubles

* Define real and integer kinds, assign to all of ROSCO

* Add ADJUSTL to DISCON error message

* Fix Fl_Mode == 2

* Fix Fl_Mode == 2 again

* Call yaw, flap, and debug only if enabled in DISOCN.IN

* Make avrSWAP a ReKi and set constant kinds

* Add DISCONs for testing - revert this later

* Fix DISCON comparison, before DISCON's were overwritten by model

* Rename DEBUG2.dbg to RootName.dbg2

* Update TestCase DISCONs to new input file

* Add API change page in docs

* Add link to API change on main page

* Fix table headers

* Fix title underlines

* Fix tables again

* Fix tables again

* Fix version numbering in docs

* Simplify FAST_directory in run_FAST

* Versioning (#65)

* use sphinx-rtd-theme

* master doc and sphinx rtd theme

* index back to root folder

* only ignore install folders

* remove hidden toctree

* furo theme

* update paths

* convert rt version to string

* update sphinx settings

* move conf

* furo theme

* remove git versioning from cmake

* use hard coded rosco_version

* update intro write method

* set nowrap for intel compilers

* Add transfer of error message and clear message after each call

* update install instructions

* Catch nans in ROSCO at end of WSE

* fix conda install typo

* cleanup docs

* Rename DEBUG2.dbg to RootName.dbg2

* Fix Fl_Mode == 2

* Fix Fl_Mode == 2 again

* Allow Fl_Mode = 2 in ROSCO

* Set notch and check frequencies when Fl_Mode = 1 (fixes bug)

* Update FOCAL tuning yaml

* Update TSR

* Clean up and doc fix

* Remove publish to pypi

* Define all constant inputs to functions with kind typing

* Generate Test_Case/ inputs automatically

* Fix IEA15 DISCON path

* Fix example 11 paths

* Auto-generate tuning input yaml using schema

* Add toolbox_input to doc index

* Add toctree

* Re-name title of toolbox_input

Co-authored-by: Nikhar Abbas <nikhar.abbas@colorado.edu>
Co-authored-by: Xianping Du <38188001+Seager1989@users.noreply.github.com>
Co-authored-by: nikhar-abbas <40865984+nikhar-abbas@users.noreply.github.com>

* update listcheck method for numpy arrays

* Open Loop Control (#98)

* create rosco types yaml

* Add more descriptions, add integer_c default, cleanup

* updates for allocatability and shapes

* python scripts to write ROSCO_types.f90

* reemove superfulous modules

* use types from ROSCO registry

* create rosco types yaml

* Add more descriptions, add integer_c default, cleanup

* updates for allocatability and shapes

* python scripts to write ROSCO_types.f90

* reemove superfulous modules

* use types from ROSCO registry

* Saturate inputs to WSE.  Needs some TLC, but seems to work

* Reduce saturation limits on speed, torque

* Re-organize, set saturation limits.  Working at 3 m/s

* Initial add of OL control to ROSCO: builds

* Update DISCONs with open loop inputs

* Fix file reading for OL_Filename

* Add open loop control generation and file writing

* Use DISCON_dict for more manageable DISCON file writing

* Add open loop example, fix constant timeseries

* Make open loop example generate power

* Handle relative paths and calling from outside the run directory:
- Some helper functions borrowed from OpenFAST, f/ext_control
- Updated file writing

* Clean up: versions, print statements

* Fix SysFiles paths in CMakeLists

* Tidy up Ext_DLL names

* More Ext_DLL name tidying

* Test write_registry.py

* Update for OL Control

* Move preprocessor lines

* add zenodo DOI

* Regenerated Types

* fix shape

* revert filepath change

* give all  types a size, ProcAddr size = 3

* update types

* test registry in compile step

* specify default shell

* update write_registry path

* remove default shell

* Document API changes, provide OL input example

* Fix example 14 (yaw input)

* Add error catching to yaw control

* Tidy up OL_Input Reading: error catching, generalize

* More yaw control fixes, to model

* Checkout develop CMakeLists for ROSCO

* Update DISCON.INs for TestCases/

* Revert "Checkout develop CMakeLists for ROSCO"

This reverts commit 87a491359d73806e3aaa59b4cfdc00f2838875df.

* Revert windows cmake stuff to develop

* Fix CMake again

* Revert "Revert windows cmake stuff to develop"

This reverts commit 39df122449b0e2055f2e12e3ce38a0c010c7bd91.

* Make last cmake fix - hopefully

Co-authored-by: Nikhar Abbas <nikhar.abbas@colorado.edu>

* Restart & registry (#99)

* Convert WE saved variables to WE type

* Put restart flag in localvars

* Use saved filter params from LocalVar

* save pitcomt last

* Move IPC saved variables to localvars

* Saved pi controller variables to localvar

* Save RootMyb_Last to localvar

* ROSCO_IO - initial commit. Include restart and debug functions

* Use ROSCO IO and call restart functions

* Remove debug from function.f90

* Save ACC Infile info

* update for restart capabilities

* add rosco_io with restart and debug functions

* cleanup debug call

* use registry generate types and IO

* delete DFController

* fix timestep mismatch

* remove unnecessaray istatus check

* close files

* add reg test for restart

* add restart option to run_openfast

* add testing to CI, ignore generate files

* fix fastcall

* remove extra commas

* specify gfortran-10

* testing flag cleanup

* Use lv_strings to generate debug output

* Revert "testing flag cleanup"

This reverts commit 6f295563832413e96347acd82716f9aadac6d46c.

* Revert "specify gfortran-10"

This reverts commit 4c3154491523bcd542133ca2bce5803cdc94523f.

* minor cleanup

* Use kind from constants

* Add some comments for clarity

* put debug in if statements

* separate reg tests from oother tests

* Fl_Mode>0

* Remove hard coded values

* Add filtered signals and WE_Vw to debug varrs

* cd for regtest

* Check logging level before calling debug

* add fl_pitcom and pc_minpit to debugvars

Co-authored-by: dzalkind <dzalkind@nrel.gov>

* Break up if statement in open loop pitch (#100)

* Break up if statement in open loop pitch

* Make torque and yaw consistent with pitch: can start after some time

* add bld edgewise freq to robust dict_inputs

* Fix ccrotor inputs (#104)

* remove interpolation of blade chord and twist

* rename aerodynblade inputs

* Update surface and DISCON.INs

* Fix performance table paths

* Allow default inputs (#110)

* Allow defaults for AeroDyn inputs

* Allow AeroDyn inputs to be floats, too

* ipc (#105)

* remove interpolation of blade chord and twist

* rename aerodynblade inputs

* Update surface and DISCON.INs

* Fix performance table paths

* Add proportional control and cleanup IPC

* Add IPC and filtered RootMyc to registry

* Better logic for filtering RootMOOP and fix notch filter slopes bug

* Add cyclic flap conrol

* Fix comments in ColemanTransformInverse

* Addd IPC_KP to DISCON.IN

* Error checking foro flp or ipc

* add mutichannel plotting with tuples

* add CMakeFiles to gitignore

* Add IPC_KP to api changes

* numerical qualifiers for error handling

* add IPC gains to schema for pass-through ability

* fix variable names

* fix ipc gain printing bug

* make sure IPC_KP is positive

* Update Polars to point to coord files

* ignore dbg2 files

* Add IEA15MW_OL.yaml

* update coord reader/writer

* expand pitch_initial to 30 degrees

* Add example 13 for IPC

* Update cp surfaces and DISCONS

* add examples to readme

* cleanup and streaamline run_examples

* Add IPC tuning vars

* Allow IPC to command pitch value below peak shaving saturation limit

* shorten simulation time

* Fix Material parameter path

* Update DISCONs again

* Fix OL_Input reading

* Set wind speed, rotor speed IC in example 14

* Debug OL reading

* Add more debugging lines

* Add more debugging lines 2

* Clean up, hone in on debug call

* Disable logging level

* Update discons - resolve conflict

* Print when finished with ROSCO

* add control packageg

* Use PriPath and RootName to name dbg files

* Print AvrSWAP

* Revert "Use PriPath and RootName to name dbg files"

This reverts commit 062fcaa55b3bf42d44f8a3f163aa883ab9552412.

* Disable other examples

* Print OL inputs

* Allow logging level 3

* Print OL inputs

* Make example shorter

* Print more stuf

* Print shape

* Revert "Print OL inputs"

This reverts commit 8e2a642bb35e46850f579ca4e69ca6d6fc93f4cc.

* Update ROSCO Simulink model with IPC example

* refactor flap tuning for normalization methods

* improved flap controller filtering

* delete extra F_FlpCornerFrerq

* Update inputs, reader, and writer for OF 3.1.0

* Make sigma default interp type for multi_sigma

* Use openfast 3.1.0 in CI

* Fix leak...maybe

* Use OF 3.1.0 in testing

* Use gfotran for compile

* Clean up print statements

* Re-enable all examples

* Update NREL-5MW AD file

* Only check airfoil controls if more than one table

* Update BAR models

* Revert "Use gfotran for compile"

This reverts commit 5a6e2b7e30287a09a09781e2ba12f9b578132e1f.

* Install pyFAST for CI

* Fix some paths in ex12

* Disable example 12

* Fix example 12 linear path, re-enable

* Skip compilers install for mac

* Try gfortran-9, no compilers

* Try gfortran-10, no compilers

* Skip windows compile in pytools

* Re-enable windows, use gfortran as FC

* Unset FC in windows

* Set environment for windows when dependencies installed

* Try setting environment in installation

* Put conditional env setting in correct place

* Try in setup again

* Break up tasks: Windows vs. not

* Update DISCONs

* Update docs with new variables

* Add example documentation

* Update ROSCO Simulink model for 3.1.0

* Make IEA model float again

* Reduce IEA timestep

* Match DT to checkpoint time

Co-authored-by: dzalkind <dzalkind@nrel.gov>

* Increment version number

* Bladed docs (#116)

* Added image of Bladed control screen setup

* Delete Bladed control screen.png

* Adding image of Bladed control screen

* Add files via upload

* Minor edit 1

* Minor change 2

* Minor change 3

* Minor change 4

* Change 6

* Change 7

* Change 8

* Minor change 9

Co-authored-by: nikhar-abbas <40865984+nikhar-abbas@users.noreply.github.com>
Co-authored-by: WillC-DNV <100850534+WillC-DNV@users.noreply.github.com>

* Update version in API change docs

* Bladed readthedocs (#117)

* Added image of Bladed control screen setup

* Delete Bladed control screen.png

* Adding image of Bladed control screen

* Add files via upload

* Minor edit 1

* Minor change 2

* Minor change 3

* Minor change 4

* Change 6

* Change 7

* Change 8

* Minor change 9

* Tinker with characters in bladed instructions

* Add bladed instructions to index

* Change bladed toctree label

* Do underline stuff

* Make toctree label same as file

* Remove colons from headers

Co-authored-by: nikhar-abbas <40865984+nikhar-abbas@users.noreply.github.com>
Co-authored-by: WillC-DNV <100850534+WillC-DNV@users.noreply.github.com>

* Update docs to reflect CI process

* sigma + ipc (#125)

* cleanup api change table

* Update inverted notch to move frequency properly

* Saturate inv notch corner frequency at 0

* add sigma function

* Use IPC_Vramp for IPC cut-in

* Add IPC_Vramp DISCON inputs

* update registry

* Update DISCONs

* Update docs for API change

* Fix IPC_Vramp data type

* update comments

Co-authored-by: dzalkind <dzalkind@nrel.gov>

* Flip Ct and Cq table allocation (#130)

* Pitch Actuator and IPC updates (#123)

* Convert WE saved variables to WE type

* Put restart flag in localvars

* Use saved filter params from LocalVar

* save pitcomt last

* Move IPC saved variables to localvars

* Saved pi controller variables to localvar

* Save RootMyb_Last to localvar

* ROSCO_IO - initial commit. Include restart and debug functions

* Use ROSCO IO and call restart functions

* Remove debug from function.f90

* Save ACC Infile info

* update for restart capabilities

* add rosco_io with restart and debug functions

* cleanup debug call

* use registry generate types and IO

* delete DFController

* fix timestep mismatch

* remove unnecessaray istatus check

* close files

* add reg test for restart

* add restart option to run_openfast

* add testing to CI, ignore generate files

* fix fastcall

* remove extra commas

* specify gfortran-10

* testing flag cleanup

* Use lv_strings to generate debug output

* Revert "testing flag cleanup"

This reverts commit 6f295563832413e96347acd82716f9aadac6d46c.

* Revert "specify gfortran-10"

This reverts commit 4c3154491523bcd542133ca2bce5803cdc94523f.

* minor cleanup

* Use kind from constants

* Add some comments for clarity

* put debug in if statements

* separate reg tests from oother tests

* Fl_Mode>0

* Remove hard coded values

* Add filtered signals and WE_Vw to debug varrs

* cd for regtest

* Check logging level before calling debug

* add fl_pitcom and pc_minpit to debugvars

* Turn runFAST into a class

* Refactor/simplify CaseLibrary

* Implement initial pitch actuator

* Set up steps case

* Add actuator variable

* Print first time step in debug outs

* Fix FOCAL yaml

* Set actuator to 0.25 Hz bandwidth

* ROSCO 2.5.0 (#115)

* FOCAL Updates (#64)

* Update headers

* fix bullets

* make uppercase

* Update turbine.py (#56)

* Update turbine.py

This add several lines for fixing the problem of repeated maximum values in the performance tables. This will cause the error (' the length of x and y is different.') of 'interpolate.interp1d.'

* Add comments and catch when there are multiple optimal pitch angles

Co-authored-by: dzalkind <dzalkind@nrel.gov>

* increment version

* Update for OpenFAST v3.0.0

* Update for OpenFAST v3.0.0

* Install OF3.0.0 for tests

* update for OF v3.0.0

* add publish to pypi on release

* Update to ROSCO v2.3.0

* Update Testing (#58)

* Update scripts to run on eagle

* Update IEA-15MW semi example: use peak shaving w/ ps_percen=0.8

* Add comparison plots to testing scripts

* Update submit script for testing

* Update for latest eagle runs

* Add future to install dependencies

* add TMax to self, define tmin in print_results

* run tests in CI

* generic ROSCO path

* default to overwrite

* fix path

* import platform

* separate run_testing

* cleanup, specify lite test

* don't run testing in after examples, oops.

Co-authored-by: nikhar-abbas <40865984+nikhar-abbas@users.noreply.github.com>
Co-authored-by: Nikhar Abbas <nikhar.abbas@colorado.edu>

* increment version

* Update for OpenFAST v3.0.0

* Install OF3.0.0 for tests

* update for OF v3.0.0

* add publish to pypi on release

* Update to ROSCO v2.3.0

* Increment Version, OF3.0 (#57)

* increment version

* Update for OpenFAST v3.0.0

* Install OF3.0.0 for tests

* update for OF v3.0.0

* add publish to pypi on release

* Update to ROSCO v2.3.0

* increment version

* Update for OpenFAST v3.0.0

* Install OF3.0.0 for tests

* update for OF v3.0.0

* add publish to pypi on release

* Update to ROSCO v2.3.0

* add ROSCO without submodule

* move ROSCO source to ROSCO folder

* Move cmake-related files to ROSCO

* Add back pesky ErrVar

* Remove parameters_files

* Merge ROSCO and _toolbox gitignore

* Fix .gitignore

* Remove Examples/DISCON.IN from git

* Fix and point example_01 to Tune_Cases/

* Update verbiage around using ofTools vs. weis

* Fix and point example_04 to Tune_Cases/

* Clean up example_06

* Clean up example_07

* Only check FlpCornerFreq if using Flp control, fixes example 05

* Make example_04 consistent with others

* Let example_05 run independently from 04

* Clean up example_05, wind files

* Add schema and update empty tuning yaml inputs, not connected yet

* Integrate schema into turbine, controller, and examples

* Only check Fl filter parameters if Fl_Mode > 0, fix example_05

* bump version to 2.3

* Compile ROSCO from ROSCO dir

* Rename to CI_rosco

* Add omega vs. windspeed functionality

* Fix tests: 5MW U_pc and 06 example dir

* Make _Toolbox vs_minspeed in rotor frame to match ROSCO

* Revert ServoDyn change

* change rotor speed constraint to be epsilon

* rename for clarity

* docs major refresh

* fix FA_AccF units in debug file

* docs that build locally

* Deallocate arrays in ROSCO, check in example_05

* Clean up comments

* remove gitmodules

* furo theme

* furo in requirements

* move readthedocs config file, remove furo import in conf.py

* add docs requirements file

* typo

* move index out of source folder

* trying to get furo to work

* import date

* fix versions and titles, cleanup readthedocs requirements

* typo fix, remove extras

* more cleanup

* bump version

* no furo extension, "hack" to load RT version

* proper toctree paths

* specify method

* add mock modules

* fix typos

* update python install requirements

* running locally

* move index to main docs dir again

* update to build locally

* error during warnings

* automated version

* cleanup

* remove old docs

* re-add docs

* simplify

* fix figure path

* try alabaster

* remove archived docs

* Add omega vs. windspeed functionality

* Fix tests: 5MW U_pc and 06 example dir

* more detailed sp.optimize settings

* run MBC3 in parallel

* restructure driver, run initialization doe for tuning

* Try new dlclose function

* Update example_05 to run simple simulation twice and check result

* Revert deallocation stuff

* Close discon library after every sim run

* Test examples on macOS and windows

* Run examples instead of testing on other platforms

* Skip examples in windows for now

* update paths and yaml load funciton

* Skip mac testing of examples

* provide default U_pc for single omega/zeta case

* allow for float or list-like pc tuning inputs

* Change name in setup.py

* WE_Vw unit fix

* Pass through kp_float, if desired

* Minor fixes: schema error and InputReader defaults

* cleeanup for improved stability

* check for doe_logs as string in load_DOE

* major restructure for rsched_driver class

* cleanup verbosity

* run serial by default

* load_parallel as linturb_option

* specific IEA15MW yaml for multi omega

* remove unused module imports

* fix error message types

* lin_file as input

* add comments on inputs to LinearTurbineModel init method

* remove relative file paths

* provide OpenFAST linearizations for IEA15MW UMaineSemi

* put plotting in specific function

* fix WE_lambda units

* add self in on a few necessary variables

* creaete example 12 for robust scheduling

* try a few mbc3 locations for import

* allow list-like or numpy arrays for omega_pc and zeta_pc schedules

* create and use recorder setup function

* Pass Through Kp_float (#57)

* Pass through kp_float, if desired

* Minor fixes: schema error and InputReader defaults

* fix setup_recorder to work for optimization driver too

* Allow pass through of Kp_float = 0

* cleanup om problems, update om0 calc

* doe levels as input

* negative k_float to account for OF conventions

* cleanup print statements

* variable name cleanup, use calculated k_float

* Add defaults to omega_,zeta_ pc and vs, allow to be numbers

* use standard tuning k_float as IC

* formatting update

* update problem setup methods

* cleanup add_dv, enable adding design variables after problem is setup

* change optimization step size

* more setup restructure

* update verbosity

* use sphinx-rtd-theme

* master doc and sphinx rtd theme

* index back to root folder

* only ignore install folders

* remove hidden toctree

* furo theme

* update paths

* convert rt version to string

* update sphinx settings

* move conf

* furo theme

* Mostly a docs update (#61)

* rename for clarity

* docs major refresh

* fix FA_AccF units in debug file

* docs that build locally

* remove gitmodules

* furo theme

* furo in requirements

* move readthedocs config file, remove furo import in conf.py

* add docs requirements file

* typo

* move index out of source folder

* trying to get furo to work

* import date

* fix versions and titles, cleanup readthedocs requirements

* typo fix, remove extras

* more cleanup

* bump version

* no furo extension, "hack" to load RT version

* proper toctree paths

* specify method

* add mock modules

* fix typos

* update python install requirements

* running locally

* move index to main docs dir again

* update to build locally

* error during warnings

* automated version

* cleanup

* remove old docs

* re-add docs

* simplify

* fix figure path

* try alabaster

* remove archived docs

* use sphinx-rtd-theme

* master doc and sphinx rtd theme

* index back to root folder

* only ignore install folders

* remove hidden toctree

* furo theme

* update paths

* convert rt version to string

* update sphinx settings

* move conf

* furo theme

* Pass through Kp_float = 0 (#59)

* Pass through kp_float, if desired

* Minor fixes: schema error and InputReader defaults

* Allow pass through of Kp_float = 0

* Add flp parameters to schema

* Change Fl_Mode default to 0

* Add defaults to omega_,zeta_ pc and vs, allow to be numbers

* Allow single pitch tuning values in code, default U_pc to 0

* use nac acceleration for floating feedback

* Fix TSR saturation for region 2.5operation

* Modify system for constant power operation

* Only modify pole for constant power above-rated

* Remove GenEff from K calc

* Update tuning, use constant power

* use load_rosco_yaml

* constant power

* Fix broken tests

* Include Fl_Mode=2 for nacelle pitching feedback

* Add FOCAL inputs
- hpf on floating feedback
- lpf on wind speed estimator
- associated schema updates

* Set notch and check frequencies when Fl_Mode = 1 (fixes bug)

* Skip filter step if there's an error

* Update IEA-15MW test case DISCON with focal inputs

* Allow Fl_Mode = 2 in ROSCO

* Pass through lpf frequency

* Add FOCAL tuning yaml

* Set Cp contour number of levels

* Add FOCAL params to various writers

* Update/tune focal yaml

* Add scripts for running FAST, tuning various parameters and cases

* Add notebook for FAST plotting

* Set up step case for testing

* Change doubles to C_doubles

* Define real and integer kinds, assign to all of ROSCO

* Add ADJUSTL to DISCON error message

* Fix Fl_Mode == 2

* Fix Fl_Mode == 2 again

* Call yaw, flap, and debug only if enabled in DISOCN.IN

* Make avrSWAP a ReKi and set constant kinds

* Add DISCONs for testing - revert this later

* Fix DISCON comparison, before DISCON's were overwritten by model

* Rename DEBUG2.dbg to RootName.dbg2

* Update TestCase DISCONs to new input file

* Add API change page in docs

* Add link to API change on main page

* Fix table headers

* Fix title underlines

* Fix tables again

* Fix tables again

* Fix version numbering in docs

* Simplify FAST_directory in run_FAST

* Versioning (#65)

* use sphinx-rtd-theme

* master doc and sphinx rtd theme

* index back to root folder

* only ignore install folders

* remove hidden toctree

* furo theme

* update paths

* convert rt version to string

* update sphinx settings

* move conf

* furo theme

* remove git versioning from cmake

* use hard coded rosco_version

* update intro write method

* set nowrap for intel compilers

* Add transfer of error message and clear message after each call

* update install instructions

* Catch nans in ROSCO at end of WSE

* fix conda install typo

* cleanup docs

* Rename DEBUG2.dbg to RootName.dbg2

* Fix Fl_Mode == 2

* Fix Fl_Mode == 2 again

* Allow Fl_Mode = 2 in ROSCO

* Set notch and check frequencies when Fl_Mode = 1 (fixes bug)

* Update FOCAL tuning yaml

* Update TSR

* Clean up and doc fix

* Remove publish to pypi

* Define all constant inputs to functions with kind typing

* Generate Test_Case/ inputs automatically

* Fix IEA15 DISCON path

* Fix example 11 paths

* Auto-generate tuning input yaml using schema

* Add toolbox_input to doc index

* Add toctree

* Re-name title of toolbox_input

Co-authored-by: Nikhar Abbas <nikhar.abbas@colorado.edu>
Co-authored-by: Xianping Du <38188001+Seager1989@users.noreply.github.com>
Co-authored-by: nikhar-abbas <40865984+nikhar-abbas@users.noreply.github.com>

* update listcheck method for numpy arrays

* Open Loop Control (#98)

* create rosco types yaml

* Add more descriptions, add integer_c default, cleanup

* updates for allocatability and shapes

* python scripts to write ROSCO_types.f90

* reemove superfulous modules

* use types from ROSCO registry

* create rosco types yaml

* Add more descriptions, add integer_c default, cleanup

* updates for allocatability and shapes

* python scripts to write ROSCO_types.f90

* reemove superfulous modules

* use types from ROSCO registry

* Saturate inputs to WSE.  Needs some TLC, but seems to work

* Reduce saturation limits on speed, torque

* Re-organize, set saturation limits.  Working at 3 m/s

* Initial add of OL control to ROSCO: builds

* Update DISCONs with open loop inputs

* Fix file reading for OL_Filename

* Add open loop control generation and file writing

* Use DISCON_dict for more manageable DISCON file writing

* Add open loop example, fix constant timeseries

* Make open loop example generate power

* Handle relative paths and calling from outside the run directory:
- Some helper functions borrowed from OpenFAST, f/ext_control
- Updated file writing

* Clean up: versions, print statements

* Fix SysFiles paths in CMakeLists

* Tidy up Ext_DLL names

* More Ext_DLL name tidying

* Test write_registry.py

* Update for OL Control

* Move preprocessor lines

* add zenodo DOI

* Regenerated Types

* fix shape

* revert filepath change

* give all  types a size, ProcAddr size = 3

* update types

* test registry in compile step

* specify default shell

* update write_registry path

* remove default shell

* Document API changes, provide OL input example

* Fix example 14 (yaw input)

* Add error catching to yaw control

* Tidy up OL_Input Reading: error catching, generalize

* More yaw control fixes, to model

* Checkout develop CMakeLists for ROSCO

* Update DISCON.INs for TestCases/

* Revert "Checkout develop CMakeLists for ROSCO"

This reverts commit 87a491359d73806e3aaa59b4cfdc00f2838875df.

* Revert windows cmake stuff to develop

* Fix CMake again

* Revert "Revert windows cmake stuff to develop"

This reverts commit 39df122449b0e2055f2e12e3ce38a0c010c7bd91.

* Make last cmake fix - hopefully

Co-authored-by: Nikhar Abbas <nikhar.abbas@colorado.edu>

* Restart & registry (#99)

* Convert WE saved variables to WE type

* Put restart flag in localvars

* Use saved filter params from LocalVar

* save pitcomt last

* Move IPC saved variables to localvars

* Saved pi controller variables to localvar

* Save RootMyb_Last to localvar

* ROSCO_IO - initial commit. Include restart and debug functions

* Use ROSCO IO and call restart functions

* Remove debug from function.f90

* Save ACC Infile info

* update for restart capabilities

* add rosco_io with restart and debug functions

* cleanup debug call

* use registry generate types and IO

* delete DFController

* fix timestep mismatch

* remove unnecessaray istatus check

* close files

* add reg test for restart

* add restart option to run_openfast

* add testing to CI, ignore generate files

* fix fastcall

* remove extra commas

* specify gfortran-10

* testing flag cleanup

* Use lv_strings to generate debug output

* Revert "testing flag cleanup"

This reverts commit 6f295563832413e96347acd82716f9aadac6d46c.

* Revert "specify gfortran-10"

This reverts commit 4c3154491523bcd542133ca2bce5803cdc94523f.

* minor cleanup

* Use kind from constants

* Add some comments for clarity

* put debug in if statements

* separate reg tests from oother tests

* Fl_Mode>0

* Remove hard coded values

* Add filtered signals and WE_Vw to debug varrs

* cd for regtest

* Check logging level before calling debug

* add fl_pitcom and pc_minpit to debugvars

Co-authored-by: dzalkind <dzalkind@nrel.gov>

* Break up if statement in open loop pitch (#100)

* Break up if statement in open loop pitch

* Make torque and yaw consistent with pitch: can start after some time

* add bld edgewise freq to robust dict_inputs

* Fix ccrotor inputs (#104)

* remove interpolation of blade chord and twist

* rename aerodynblade inputs

* Update surface and DISCON.INs

* Fix performance table paths

* Allow default inputs (#110)

* Allow defaults for AeroDyn inputs

* Allow AeroDyn inputs to be floats, too

* ipc (#105)

* remove interpolation of blade chord and twist

* rename aerodynblade inputs

* Update surface and DISCON.INs

* Fix performance table paths

* Add proportional control and cleanup IPC

* Add IPC and filtered RootMyc to registry

* Better logic for filtering RootMOOP and fix notch filter slopes bug

* Add cyclic flap conrol

* Fix comments in ColemanTransformInverse

* Addd IPC_KP to DISCON.IN

* Error checking foro flp or ipc

* add mutichannel plotting with tuples

* add CMakeFiles to gitignore

* Add IPC_KP to api changes

* numerical qualifiers for error handling

* add IPC gains to schema for pass-through ability

* fix variable names

* fix ipc gain printing bug

* make sure IPC_KP is positive

* Update Polars to point to coord files

* ignore dbg2 files

* Add IEA15MW_OL.yaml

* update coord reader/writer

* expand pitch_initial to 30 degrees

* Add example 13 for IPC

* Update cp surfaces and DISCONS

* add examples to readme

* cleanup and streaamline run_examples

* Add IPC tuning vars

* Allow IPC to command pitch value below peak shaving saturation limit

* shorten simulation time

* Fix Material parameter path

* Update DISCONs again

* Fix OL_Input reading

* Set wind speed, rotor speed IC in example 14

* Debug OL reading

* Add more debugging lines

* Add more debugging lines 2

* Clean up, hone in on debug call

* Disable logging level

* Update discons - resolve conflict

* Print when finished with ROSCO

* add control packageg

* Use PriPath and RootName to name dbg files

* Print AvrSWAP

* Revert "Use PriPath and RootName to name dbg files"

This reverts commit 062fcaa55b3bf42d44f8a3f163aa883ab9552412.

* Disable other examples

* Print OL inputs

* Allow logging level 3

* Print OL inputs

* Make example shorter

* Print more stuf

* Print shape

* Revert "Print OL inputs"

This reverts commit 8e2a642bb35e46850f579ca4e69ca6d6fc93f4cc.

* Update ROSCO Simulink model with IPC example

* refactor flap tuning for normalization methods

* improved flap controller filtering

* delete extra F_FlpCornerFrerq

* Update inputs, reader, and writer for OF 3.1.0

* Make sigma default interp type for multi_sigma

* Use openfast 3.1.0 in CI

* Fix leak...maybe

* Use OF 3.1.0 in testing

* Use gfotran for compile

* Clean up print statements

* Re-enable all examples

* Update NREL-5MW AD file

* Only check airfoil controls if more than one table

* Update BAR models

* Revert "Use gfotran for compile"

This reverts commit 5a6e2b7e30287a09a09781e2ba12f9b578132e1f.

* Install pyFAST for CI

* Fix some paths in ex12

* Disable example 12

* Fix example 12 linear path, re-enable

* Skip compilers install for mac

* Try gfortran-9, no compilers

* Try gfortran-10, no compilers

* Skip windows compile in pytools

* Re-enable windows, use gfortran as FC

* Unset FC in windows

* Set environment for windows when dependencies installed

* Try setting environment in installation

* Put conditional env setting in correct place

* Try in setup again

* Break up tasks: Windows vs. not

* Update DISCONs

* Update docs with new variables

* Add example documentation

* Update ROSCO Simulink model for 3.1.0

* Make IEA model float again

* Reduce IEA timestep

* Match DT to checkpoint time

Co-authored-by: dzalkind <dzalkind@nrel.gov>

* Increment version number

* Bladed docs (#116)

* Added image of Bladed control screen setup

* Delete Bladed control screen.png

* Adding image of Bladed control screen

* Add files via upload

* Minor edit 1

* Minor change 2

* Minor change 3

* Minor change 4

* Change 6

* Change 7

* Change 8

* Minor change 9

Co-authored-by: nikhar-abbas <40865984+nikhar-abbas@users.noreply.github.com>
Co-authored-by: WillC-DNV <100850534+WillC-DNV@users.noreply.github.com>

* Update version in API change docs

* Bladed readthedocs (#117)

* Added image of Bladed control screen setup

* Delete Bladed control screen.png

* Adding image of Bladed control screen

* Add files via upload

* Minor edit 1

* Minor change 2

* Minor change 3

* Minor change 4

* Change 6

* Change 7

* Change 8

* Minor change 9

* Tinker with characters in bladed instructions

* Add bladed instructions to index

* Change bladed toctree label

* Do underline stuff

* Make toctree label same as file

* Remove colons from headers

Co-authored-by: nikhar-abbas <40865984+nikhar-abbas@users.noreply.github.com>
Co-authored-by: WillC-DNV <100850534+WillC-DNV@users.noreply.github.com>

* Update docs to reflect CI process

Co-authored-by: Nikhar Abbas <nikhar.abbas@colorado.edu>
Co-authored-by: Xianping Du <38188001+Seager1989@users.noreply.github.com>
Co-authored-by: nikhar-abbas <40865984+nikhar-abbas@users.noreply.github.com>
Co-authored-by: WillC-DNV <100850534+WillC-DNV@users.noreply.github.com>

* Fixed wrong formatting of list items (#122)

extra newline required between list elements

* Regenerate types, IO with registry

* Update registry so first timestep is printed

* Update inverted notch to move frequency properly

* Saturate inv notch corner frequency at 0

* Add tower damper mode flag

* Flip Ct and Cq table allocation

* Regen types

* Remove print statements used for debugging

* Update input files: IEA model has pitch actuator

* Add back flap control (no idea when it was deleted)

* Update discons, docs with API change

Co-authored-by: nikhar-abbas <40865984+nikhar-abbas@users.noreply.github.com>
Co-authored-by: Nikhar Abbas <nikhar.abbas@colorado.edu>
Co-authored-by: Xianping Du <38188001+Seager1989@users.noreply.github.com>
Co-authored-by: WillC-DNV <100850534+WillC-DNV@users.noreply.github.com>
Co-authored-by: Gustavo Hylander <74593034+ghylander@users.noreply.github.com>

* Add OpenFAST channels that Simulink reads (#135)

* RAAW Updates (#133)

* Convert WE saved variables to WE type

* Put restart flag in localvars

* Use saved filter params from LocalVar

* save pitcomt last

* Move IPC saved variables to localvars

* Saved pi controller variables to localvar

* Save RootMyb_Last to localvar

* ROSCO_IO - initial commit. Include restart and debug functions

* Use ROSCO IO and call restart functions

* Remove debug from function.f90

* Save ACC Infile info

* update for restart capabilities

* add rosco_io with restart and debug functions

* cleanup debug call

* use registry generate types and IO

* delete DFController

* fix timestep mismatch

* remove unnecessaray istatus check

* close files

* add reg test for restart

* add restart option to run_openfast

* add testing to CI, ignore generate files

* fix fastcall

* remove extra commas

* specify gfortran-10

* testing flag cleanup

* Use lv_strings to generate debug output

* Revert "testing flag cleanup"

This reverts commit 6f295563832413e96347acd82716f9aadac6d46c.

* Revert "specify gfortran-10"

This reverts commit 4c3154491523bcd542133ca2bce5803cdc94523f.

* minor cleanup

* Use kind from constants

* Add some comments for clarity

* put debug in if statements

* separate reg tests from oother tests

* Fl_Mode>0

* Remove hard coded values

* Add filtered signals and WE_Vw to debug varrs

* cd for regtest

* Check logging level before calling debug

* add fl_pitcom and pc_minpit to debugvars

* Turn runFAST into a class

* Refactor/simplify CaseLibrary

* Implement initial pitch actuator

* Set up steps case

* Add actuator variable

* Print first time step in debug outs

* Fix FOCAL yaml

* Set actuator to 0.25 Hz bandwidth

* ROSCO 2.5.0 (#115)

* FOCAL Updates (#64)

* Update headers

* fix bullets

* make uppercase

* Update turbine.py (#56)

* Update turbine.py

This add several lines for fixing the problem of repeated maximum values in the performance tables. This will cause the error (' the length of x and y is different.') of 'interpolate.interp1d.'

* Add comments and catch when there are multiple optimal pitch angles

Co-authored-by: dzalkind <dzalkind@nrel.gov>

* increment version

* Update for OpenFAST v3.0.0

* Update for OpenFAST v3.0.0

* Install OF3.0.0 for tests

* update for OF v3.0.0

* add publish to pypi on release

* Update to ROSCO v2.3.0

* Update Testing (#58)

* Update scripts to run on eagle

* Update IEA-15MW semi example: use peak shaving w/ ps_percen=0.8

* Add comparison plots to testing scripts

* Update submit script for testing

* Update for latest eagle runs

* Add future to install dependencies

* add TMax to self, define tmin in print_results

* run tests in CI

* generic ROSCO path

* default to overwrite

* fix path

* import platform

* separate run_testing

* cleanup, specify lite test

* don't run testing in after examples, oops.

Co-authored-by: nikhar-abbas <40865984+nikhar-abbas@users.noreply.github.com>
Co-authored-by: Nikhar Abbas <nikhar.abbas@colorado.edu>

* increment version

* Update for OpenFAST v3.0.0

* Install OF3.0.0 for tests

* update for OF v3.0.0

* add publish to pypi on release

* Update to ROSCO v2.3.0

* Increment Version, OF3.0 (#57)

* increment version

* Update for OpenFAST v3.0.0

* Install OF3.0.0 for tests

* update for OF v3.0.0

* add publish to pypi on release

* Update to ROSCO v2.3.0

* increment version

* Update for OpenFAST v3.0.0

* Install OF3.0.0 for tests

* update for OF v3.0.0

* add publish to pypi on release

* Update to ROSCO v2.3.0

* add ROSCO without submodule

* move ROSCO source to ROSCO folder

* Move cmake-related files to ROSCO

* Add back pesky ErrVar

* Remove parameters_files

* Merge ROSCO and _toolbox gitignore

* Fix .gitignore

* Remove Examples/DISCON.IN from git

* Fix and point example_01 to Tune_Cases/

* Update verbiage around using ofTools vs. weis

* Fix and point example_04 to Tune_Cases/

* Clean up example_06

* Clean up example_07

* Only check FlpCornerFreq if using Flp control, fixes example 05

* Make example_04 consistent with others

* Let example_05 run independently from 04

* Clean up example_05, wind files

* Add schema and update empty tuning yaml inputs, not connected yet

* Integrate schema into turbine, controller, and examples

* Only check Fl filter parameters if Fl_Mode > 0, fix example_05

* bump version to 2.3

* Compile ROSCO from ROSCO dir

* Rename to CI_rosco

* Add omega vs. windspeed functionality

* Fix tests: 5MW U_pc and 06 example dir

* Make _Toolbox vs_minspeed in rotor frame to match ROSCO

* Revert ServoDyn change

* change rotor speed constraint to be epsilon

* rename for clarity

* docs major refresh

* fix FA_AccF units in debug file

* docs that build locally

* Deallocate arrays in ROSCO, check in example_05

* Clean up comments

* remove gitmodules

* furo theme

* furo in requirements

* move readthedocs config file, remove furo import in conf.py

* add docs requirements file

* typo

* move index out of source folder

* trying to get furo to work

* import date

* fix versions and titles, cleanup readthedocs requirements

* typo fix, remove extras

* more cleanup

* bump version

* no furo extension, "hack" to load RT version

* proper toctree paths

* specify method

* add mock modules

* fix typos

* update python install requirements

* running locally

* move index to main docs dir again

* update to build locally

* error during warnings

* automated version

* cleanup

* remove old docs

* re-add docs

* simplify

* fix figure path

* try alabaster

* remove archived docs

* Add omega vs. windspeed functionality

* Fix tests: 5MW U_pc and 06 example dir

* more detailed sp.optimize settings

* run MBC3 in parallel

* restructure driver, run initialization doe for tuning

* Try new dlclose function

* Update example_05 to run simple simulation twice and check result

* Revert deallocation stuff

* Close discon library after every sim run

* Test examples on macOS and windows

* Run examples instead of testing on other platforms

* Skip examples in windows for now

* update paths and yaml load funciton

* Skip mac testing of examples

* provide default U_pc for single omega/zeta case

* allow for float or list-like pc tuning inputs

* Change name in setup.py

* WE_Vw unit fix

* Pass through kp_float, if desired

* Minor fixes: schema error and InputReader defaults

* cleeanup for improved stability

* check for doe_logs as string in load_DOE

* major restructure for rsched_driver class

* cleanup verbosity

* run serial by default

* load_parallel as linturb_option

* specific IEA15MW yaml for multi omega

* remove unused module imports

* fix error message types

* lin_file as input

* add comments on inputs to LinearTurbineModel init method

* remove relative file paths

* provide OpenFAST linearizations for IEA15MW UMaineSemi

* put plotting in specific function

* fix WE_lambda units

* add self in on a few necessary variables

* creaete example 12 for robust scheduling

* try a few mbc3 locations for import

* allow list-like or numpy arrays for omega_pc and zeta_pc schedules

* create and use recorder setup function

* Pass Through Kp_float (#57)

* Pass through kp_float, if desired

* Minor fixes: schema error and InputReader defaults

* fix setup_recorder to work for optimization driver too

* Allow pass through of Kp_float = 0

* cleanup om problems, update om0 calc

* doe levels as input

* negative k_float to account for OF conventions

* cleanup print statements

* variable name cleanup, use calculated k_float

* Add defaults to omega_,zeta_ pc and vs, allow to be numbers

* use standard tuning k_float as IC

* formatting update

* update problem setup methods

* cleanup add_dv, enable adding design variables after problem is setup

* change optimization step size

* more setup restructure

* update verbosity

* use sphinx-rtd-theme

* master doc and sphinx rtd theme

* index back to root folder

* only ignore install folders

* remove hidden toctree

* furo theme

* update paths

* convert rt version to string

* update sphinx settings

* move conf

* furo theme

* Mostly a docs update (#61)

* rename for clarity

* docs major refresh

* fix FA_AccF units in debug file

* docs that build locally

* remove gitmodules

* furo theme

* furo in requirements

* move readthedocs config file, remove furo import in conf.py

* add docs requirements file

* typo

* move index out of source folder

* trying to get furo to work

* import date

* fix versions and titles, cleanup readthedocs requirements

* typo fix, remove extras

* more cleanup

* bump version

* no furo extension, "hack" to load RT version

* proper toctree paths

* specify method

* add mock modules

* fix typos

* update python install requirements

* running locally

* move index to main docs dir again

* update to build locally

* error during warnings

* automated version

* cleanup

* remove old docs

* re-add docs

* simplify

* fix figure path

* try alabaster

* remove archived docs

* use sphinx-rtd-theme

* master doc and sphinx rtd theme

* index back to root folder

* only ignore install folders

* remove hidden toctree

* furo theme

* update paths

* convert rt version to string

* update sphinx settings

* move conf

* furo theme

* Pass through Kp_float = 0 (#59)

* Pass through kp_float, if desired

* Minor fixes: schema error and InputReader defaults

* Allow pass through of Kp_float = 0

* Add flp parameters to schema

* Change Fl_Mode default to 0

* Add defaults to omega_,zeta_ pc and vs, allow to be numbers

* Allow single pitch tuning values in code, default U_pc to 0

* use nac acceleration for floating feedback

* Fix TSR saturation for region 2.5operation

* Modify system for constant power operation

* Only modify pole for constant power above-rated

* Remove GenEff from K calc

* Update tuning, use constant power

* use load_rosco_yaml

* constant power

* Fix broken tests

* Include Fl_Mode=2 for nacelle pitching feedback

* Add FOCAL inputs
- hpf on floating feedback
- lpf on wind speed estimator
- associated schema updates

* Set notch and check frequencies when Fl_Mode = 1 (fixes bug)

* Skip filter step if there's an error

* Update IEA-15MW test case DISCON with focal inputs

* Allow Fl_Mode = 2 in ROSCO

* Pass through lpf frequency

* Add FOCAL tuning yaml

* Set Cp contour number of levels

* Add FOCAL params to various writers

* Update/tune focal yaml

* Add scripts for running FAST, tuning various parameters and cases

* Add notebook for FAST plotting

* Set up step case for testing

* Change doubles to C_doubles

* Define real and integer kinds, assign to all of ROSCO

* Add ADJUSTL to DISCON error message

* Fix Fl_Mode == 2

* Fix Fl_Mode == 2 again

* Call yaw, flap, and debug only if enabled in DISOCN.IN

* Make avrSWAP a ReKi and set constant kinds

* Add DISCONs for testing - revert this later

* Fix DISCON comparison, before DISCON's were overwritten by model

* Rename DEBUG2.dbg to RootName.dbg2

* Update TestCase DISCONs to new input file

* Add API change page in docs

* Add link to API change on main page

* Fix table headers

* Fix title underlines

* Fix tables again

* Fix tables again

* Fix version numbering in docs

* Simplify FAST_directory in run_FAST

* Versioning (#65)

* use sphinx-rtd-theme

* master doc and sphinx rtd theme

* index back to root folder

* only ignore install folders

* remove hidden toctree

* furo theme

* update paths

* convert rt version to string

* update sphinx settings

* move conf

* furo theme

* remove git versioning from cmake

* use hard coded rosco_version

* update intro write method

* set nowrap for intel compilers

* Add transfer of error message and clear message after each call

* update install instructions

* Catch nans in ROSCO at end of WSE

* fix conda install typo

* cleanup docs

* Rename DEBUG2.dbg to RootName.dbg2

* Fix Fl_Mode == 2

* Fix Fl_Mode == 2 again

* Allow Fl_Mode = 2 in ROSCO

* Set notch and check frequencies when Fl_Mode = 1 (fixes bug)

* Update FOCAL tuning yaml

* Update TSR

* Clean up and doc fix

* Remove publish to pypi

* Define all constant inputs to functions with kind typing

* Generate Test_Case/ inputs automatically

* Fix IEA15 DISCON path

* Fix example 11 paths

* Auto-generate tuning input yaml using schema

* Add toolbox_input to doc index

* Add toctree

* Re-name title of toolbox_input

Co-authored-by: Nikhar Abbas <nikhar.abbas@colorado.edu>
Co-authored-by: Xianping Du <38188001+Seager1989@users.noreply.github.com>
Co-authored-by: nikhar-abbas <40865984+nikhar-abbas@users.noreply.github.com>

* update listcheck method for numpy arrays

* Open Loop Control (#98)

* create rosco types yaml

* Add more descriptions, add integer_c default, cleanup

* updates for allocatability and shapes

* python scripts to write ROSCO_types.f90

* reemove superfulous modules

* use types from ROSCO registry

* create rosco types yaml

* Add more descriptions, add integer_c default, cleanup

* updates for allocatability and shapes

* python scripts to write ROSCO_types.f90

* reemove superfulous modules

* use types from ROSCO registry

* Saturate inputs to WSE.  Needs some TLC, but seems to work

* Reduce saturation limits on speed, torque

* Re-organize, set saturation limits.  Working at 3 m/s

* Initial add of OL control to ROSCO: builds

* Update DISCONs with open loop inputs

* Fix file reading for OL_Filename

* Add open loop control generation and file writing

* Use DISCON_dict for more manageable DISCON file writing

* Add open loop example, fix constant timeseries

* Make open loop example generate power

* Handle relative paths and calling from outside the run directory:
- Some helper functions borrowed from OpenFAST, f/ext_control
- Updated file writing

* Clean up: versions, print statements

* Fix SysFiles paths in CMakeLists

* Tidy up Ext_DLL names

* More Ext_DLL name tidying

* Test write_registry.py

* Update for OL Control

* Move preprocessor lines

* add zenodo DOI

* Regenerated Types

* fix shape

* revert filepath change

* give all  types a size, ProcAddr size = 3

* update types

* test registry in compile step

* specify default shell

* update write_registry path

* remove default shell

* Document API changes, provide OL input example

* Fix example 14 (yaw input)

* Add error catching to yaw control

* Tidy up OL_Input Reading: error catching, generalize

* More yaw control fixes, to model

* Checkout develop CMakeLists for ROSCO

* Update DISCON.INs for TestCases/

* Revert "Checkout develop CMakeLists for ROSCO"

This reverts commit 87a491359d73806e3aaa59b4cfdc00f2838875df.

* Revert windows cmake stuff to develop

* Fix CMake again

* Revert "Revert windows cmake stuff to develop"

This reverts commit 39df122449b0e2055f2e12e3ce38a0c010c7bd91.

* Make last cmake fix - hopefully

Co-authored-by: Nikhar Abbas <nikhar.abbas@colorado.edu>

* Restart & registry (#99)

* Convert WE saved variables to WE type

* Put restart flag in localvars

* Use saved filter params from LocalVar

* save pitcomt last

* Move IPC saved variables to localvars

* Saved pi controller variables to localvar

* Save RootMyb_Last to localvar

* ROSCO_IO - initial commit. Include restart and debug functions

* Use ROSCO IO and call restart functions

* Remove debug from function.f90

* Save ACC Infile info

* update for restart capabilities

* add rosco_io with restart and debug functions

* cleanup debug call

* use registry generate types and IO

* delete DFController

* fix timestep mismatch

* remove unnecessaray istatus check

* close files

* add reg test for restart

* add restart option to run_openfast

* add testing to CI, ignore generate files

* fix fastcall

* remove extra commas

* specify gfortran-10

* testing flag cleanup

* Use lv_strings to generate debug output

* Revert "testing flag cleanup"

This reverts commit 6f295563832413e96347acd82716f9aadac6d46c.

* Revert "specify gfortran-10"

This reverts commit 4c3154491523bcd542133ca2bce5803cdc94523f.

* minor cleanup

* Use kind from constants

* Add some comments for clarity

* put debug in if statements

* separate reg tests from oother tests

* Fl_Mode>0

* Remove hard coded values

* Add filtered signals and WE_Vw to debug varrs

* cd for regtest

* Check logging level before calling debug

* add fl_pitcom and pc_minpit to debugvars

Co-authored-by: dzalkind <dzalkind@nrel.gov>

* Break up if statement in open loop pitch (#100)

* Break up if statement in open loop pitch

* Make torque and yaw consistent with pitch: can start after some time

* add bld edgewise freq to robust dict_inputs

* Fix ccrotor inputs (#104)

* remove interpolation of blade chord and twist

* rename aerodynblade inputs

* Update surface and DISCON.INs

* Fix performance table paths

* Allow default inputs (#110)

* Allow defaults for AeroDyn inputs

* Allow AeroDyn inputs to be floats, too

* ipc (#105)

* remove interpolation of blade chord and twist

* rename aerodynblade inputs

* Update surface and DISCON.INs

* Fix performance table paths

* Add proportional control and cleanup IPC

* Add IPC and filtered RootMyc to registry

* Better logic for filtering RootMOOP and fix notch filter slopes bug

* Add cyclic flap conrol

* Fix comments in ColemanTransformInverse

* Addd IPC_KP to DISCON.IN

* Error checking foro flp or ipc

* add mutichannel plotting with tuples

* add CMakeFiles to gitignore

* Add IPC_KP to api changes

* numerical qualifiers for error handling

* add IPC gains to schema for pass-through ability

* fix variable names

* fix ipc gain printing bug

* make sure IPC_KP is positive

* Update Polars to point to coord files

* ignore dbg2 files

* Add IEA15MW_OL.yaml

* update coord reader/writer

* expand pitch_initial to 30 degrees

* Add example 13 for IPC

* Update cp surfaces and DISCONS

* add examples to readme

* cleanup and streaamline run_examples

* Add IPC tuning vars

* Allow IPC to command pitch value below peak shaving saturation limit

* shorten simulation time

* Fix Material parameter path

* Update DISCONs again

* Fix OL_Input reading

* Set wind speed, rotor speed IC in example 14

* Debug OL reading

* Add more debugging lines

* Add more debugging lines 2

* Clean up, hone in on debug call

* Disable logging level

* Update discons - resolve conflict

* Print when finished with ROSCO

* add control packageg

* Use PriPath and RootName to name dbg files

* Print AvrSWAP

* Revert "Use PriPath and RootName to name dbg files"

This reverts commit 062fcaa55b3bf42d44f8a3f163aa883ab9552412.

* Disable other examples

* Print OL inputs

* Allow logging level 3

* Print OL inputs

* Make example shorter

* Print more stuf

* Print shape

* Revert "Print OL inputs"

This reverts commit 8e2a642bb35e46850f579ca4e69ca6d6fc93f4cc.

* Update ROSCO Simulink model with IPC example

* refactor flap tuning for normalization methods

* improved flap controller filtering

* delete extra F_FlpCorne…
  • Loading branch information
6 people authored Aug 9, 2022
1 parent 77278f5 commit 5162966
Show file tree
Hide file tree
Showing 75 changed files with 5,855 additions and 2,593 deletions.
10 changes: 10 additions & 0 deletions .github/pull_request_template.md
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,16 @@ _Select the appropriate type(s) that describe this PR_
- [ ] Maintenance update
- [ ] Other (please describe)

TODO Items General:
- [ ] Add example/test for new feature
- [ ] Update registry
- [ ] Run testing

TODO Items API Change:
- [ ] Update docs with API change
- [ ] Run update_rosco_discons.py in Test_Cases/
- [ ] Update DISCON schema

## Github issues addressed, if one exists

## Examples/Testing, if applicable
Expand Down
52 changes: 38 additions & 14 deletions .github/workflows/CI_rosco-pytools.yml
Original file line number Diff line number Diff line change
Expand Up @@ -92,41 +92,66 @@ jobs:
python-version: 3.8
environment-file: environment.yml

# setup cmake
- name: Setup Workspace
run: cmake -E make_directory ${{runner.workspace}}/ROSCO/ROSCO/build

# Install dependencies of ROSCO toolbox
- name: Add dependencies ubuntu specific
if: false == contains( matrix.os, 'windows')
run: |
conda install -y wisdem
- name: Add dependencies windows specific
if: true == contains( matrix.os, 'windows')
run: |
conda install -y m2w64-toolchain libpython
conda install -y wisdem
- name: Add pyFAST dependency
if: false == contains( matrix.os, 'windows')
run: |
git clone http://github.com/OpenFAST/python-toolbox
cd python-toolbox
python -m pip install -e .
# Install ZeroMQ
- name: Install ZeroMQ
run: sudo apt-get install libzmq3-dev

# Install ROSCO toolbox
- name: Install ROSCO toolbox
run: |
python setup.py install --compile-rosco
python setup.py develop
- name: Configure and Build ROSCO - unix
working-directory: ${{runner.workspace}}/ROSCO/ROSCO/build
run: |
cmake \
-DCMAKE_INSTALL_PREFIX:PATH=${{runner.workspace}}/ROSCO/ROSCO/install \
-DZMQ_CLIENT=ON \
-DCMAKE_Fortran_COMPILER:STRING=${{env.FORTRAN_COMPILER}} \
..
cmake --build . --target install
# Install OpenFAST
- name: Install OpenFAST
run: |
conda install openfast==3.1.0
conda install openfast==3.2.0
# Run examples
- name: Run examples
run: |
cd Examples
python run_examples.py
# Test walkthrough notebook
- name: Test walkthrough notebook
run: |
cd Examples
treon ROSCO_walkthrough.ipynb
# Archive artifacts
- name: Archive production artifacts
if: success() || failure()
uses: actions/upload-artifact@v3
with:
name: ROSCO-artifacts
path: |
${{runner.workspace}}
run_testing:
name: Run Testing
runs-on: ${{ matrix.os }}
Expand Down Expand Up @@ -156,21 +181,20 @@ jobs:


# Install dependencies of ROSCO toolbox
- name: Add dependencies ubuntu specific
if: false == contains( matrix.os, 'windows')
- name: Add dependencies
run: |
conda install -y wisdem
# Install ROSCO toolbox
- name: Install ROSCO toolbox
run: |
python setup.py develop --compile-rosco
python setup.py install --compile-rosco
# Install OpenFAST
- name: Install OpenFAST
run: |
conda install openfast==3.1.0
conda install openfast==3.2.0
# Run ROSCO Testing
- name: Run ROSCO testing
Expand All @@ -182,4 +206,4 @@ jobs:
- name: Run regression testing
run: |
cd ROSCO_testing
python regtest.py
python test_checkpoint.py
4 changes: 4 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -76,6 +76,7 @@ examples/cp_ct_cq_lut.p

# Files Generated in Examples
Examples/DISCON.IN
Examples/DISCON_zmq.IN
Examples/*.p

# Exclude testing results
Expand All @@ -86,3 +87,6 @@ ROSCO_testing/results/
*.autosave
*.mat

# OpenFAST outputs
outputs/

310 changes: 227 additions & 83 deletions Examples/ROSCO_walkthrough.ipynb

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion Examples/example_01.py
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@
path_params['FAST_InputFile'],
os.path.join(tune_dir,path_params['FAST_directory']),
dev_branch=True,
rot_source='txt',txt_filename=os.path.join(tune_dir,path_params['rotor_performance_filename'])
rot_source='txt',txt_filename=os.path.join(tune_dir,path_params['FAST_directory'],path_params['rotor_performance_filename'])
)

# Print some basic turbine info
Expand Down
8 changes: 6 additions & 2 deletions Examples/example_04.py
Original file line number Diff line number Diff line change
Expand Up @@ -34,19 +34,23 @@
controller = ROSCO_controller.Controller(controller_params)

# Load turbine data from OpenFAST and rotor performance text file
cp_filename = os.path.join(tune_dir,path_params['FAST_directory'],path_params['rotor_performance_filename'])
turbine.load_from_fast(
path_params['FAST_InputFile'],
os.path.join(tune_dir,path_params['FAST_directory']),
dev_branch=True,
rot_source='txt',txt_filename=os.path.join(tune_dir,path_params['rotor_performance_filename'])
rot_source='txt',txt_filename= cp_filename
)

# Tune controller
controller.tune_controller(turbine)

# Write parameter input file
param_file = os.path.join(this_dir,'DISCON.IN')
write_DISCON(turbine,controller,param_file=param_file, txt_filename=os.path.join(tune_dir,path_params['rotor_performance_filename']))
write_DISCON(turbine,controller,
param_file=param_file,
txt_filename=cp_filename
)

# Plot gain schedule
fig, ax = plt.subplots(2,2,constrained_layout=True,sharex=True)
Expand Down
9 changes: 7 additions & 2 deletions Examples/example_05.py
Original file line number Diff line number Diff line change
Expand Up @@ -55,11 +55,12 @@
# controller = ROSCO_controller.Controller(controller_params)

# Load turbine data from OpenFAST and rotor performance text file
cp_filename = os.path.join(tune_dir,path_params['FAST_directory'],path_params['rotor_performance_filename'])
turbine.load_from_fast(
path_params['FAST_InputFile'],
os.path.join(tune_dir,path_params['FAST_directory']),
dev_branch=True,
rot_source='txt',txt_filename=os.path.join(tune_dir,path_params['rotor_performance_filename'])
rot_source='txt',txt_filename=cp_filename
)

# Tune controller
Expand All @@ -68,7 +69,11 @@

# Write parameter input file
param_filename = os.path.join(this_dir,'DISCON.IN')
write_DISCON(turbine,controller,param_file=param_filename, txt_filename=os.path.join(tune_dir,path_params['rotor_performance_filename']))
write_DISCON(
turbine,controller,
param_file=param_filename,
txt_filename=cp_filename
)


# Load controller library
Expand Down
2 changes: 1 addition & 1 deletion Examples/example_07.py
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@
path_params['FAST_InputFile'],
os.path.join(tune_dir,path_params['FAST_directory']),
dev_branch=True,
rot_source='txt',txt_filename=os.path.join(tune_dir,path_params['rotor_performance_filename'])
rot_source='txt',txt_filename=os.path.join(tune_dir,path_params['FAST_directory'],path_params['rotor_performance_filename'])
)
# Tune controller
controller.tune_controller(turbine)
Expand Down
1 change: 0 additions & 1 deletion Examples/example_10.py
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,6 @@

# Load turbine data from openfast model
turbine = ROSCO_turbine.Turbine(turbine_params)
# turbine.load_from_fast(path_params['FAST_InputFile'],path_params['FAST_directory'],dev_branch=True,rot_source='txt',txt_filename=path_params['rotor_performance_filename'])
turbine.load_from_fast(path_params['FAST_InputFile'], \
os.path.join(this_dir,path_params['FAST_directory']),dev_branch=True)

Expand Down
2 changes: 1 addition & 1 deletion Examples/example_11.py
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@
os.path.join(this_dir,path_params['FAST_directory']),
dev_branch=True,
rot_source='txt',
txt_filename=os.path.join(tune_dir,path_params['rotor_performance_filename'])
txt_filename=os.path.join(tune_dir,path_params['FAST_directory'],path_params['rotor_performance_filename'])
)

# Tune controller
Expand Down
27 changes: 25 additions & 2 deletions Examples/example_12.py
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,8 @@
import numpy as np
import matplotlib.pyplot as plt
from ROSCO_toolbox.inputs.validation import load_rosco_yaml
from ROSCO_toolbox.linear.robust_scheduling import rsched_driver
from ROSCO_toolbox.linear.robust_scheduling import rsched_driver, load_linturb
from ROSCO_toolbox.linear.lin_vis import lin_plotting
from ROSCO_toolbox import turbine as ROSCO_turbine
from ROSCO_toolbox import controller as ROSCO_controller

Expand Down Expand Up @@ -123,6 +124,28 @@ def run_example():
if False:
plt.show()
else:
plt.savefig(os.path.join(example_out_dir, '12_RobustSched.png'))
fig.savefig(os.path.join(example_out_dir, '12_RobustSched.png'))

# ---- Plot nyquist ----
# Re-load and trimlinturb for plotting
linturb = load_linturb(options['linturb_options']['linfile_path'], load_parallel=True) #
linturb.trim_system(desInputs=['collective'], desOutputs=['RtSpeed'])

# Plotting parameters
u = 12
omega = 0.1
k_float = 0.0
controller.zeta_pc = controller.zeta_pc[0]

# plot
lv = lin_plotting(controller, turbine, linturb)
xlim=ylim=[-2,2]
lv.plot_nyquist(u, omega, k_float=k_float, xlim=xlim, ylim=ylim)

if False:
plt.show()
else:
plt.savefig(os.path.join(example_out_dir, '12_Nyquist.png'))

if __name__ == '__main__':
run_example()
5 changes: 2 additions & 3 deletions Examples/example_13.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,8 +10,7 @@
'''
# Python Modules
import yaml, os, platform
import numpy as np
import os, platform
import matplotlib.pyplot as plt

# ROSCO toolbox modules
Expand Down Expand Up @@ -85,7 +84,7 @@
channels['BldPitch3'] = True

# Run FAST cases
fastBatch = runFAST_pywrapper_batch(FAST_ver='OpenFAST',dev_branch = True)
fastBatch = runFAST_pywrapper_batch()

fastBatch.FAST_directory = os.path.realpath(os.path.join(rosco_dir,'Tune_Cases',path_params['FAST_directory']))
fastBatch.FAST_InputFile = path_params['FAST_InputFile']
Expand Down
2 changes: 1 addition & 1 deletion Examples/example_14.py
Original file line number Diff line number Diff line change
Expand Up @@ -122,7 +122,7 @@
channels = set_channels()

# Run FAST cases
fastBatch = runFAST_pywrapper_batch(FAST_ver='OpenFAST',dev_branch = True)
fastBatch = runFAST_pywrapper_batch()

fastBatch.FAST_directory = os.path.realpath(os.path.join(rosco_dir,'Tune_Cases',path_params['FAST_directory']))
fastBatch.FAST_InputFile = path_params['FAST_InputFile']
Expand Down
45 changes: 45 additions & 0 deletions Examples/example_15.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
'''
----------- Example_15 --------------
Use the runFAST scripts to set up an example, use pass through in yaml
-------------------------------------
In this example:
- use run_FAST_ROSCO class to set up a test case
'''

import os
from ROSCO_toolbox.ofTools.case_gen.run_FAST import run_FAST_ROSCO
from ROSCO_toolbox.ofTools.case_gen import CaseLibrary as cl


#directories
this_dir = os.path.dirname(os.path.abspath(__file__))
rosco_dir = os.path.dirname(this_dir)
example_out_dir = os.path.join(this_dir,'examples_out')
os.makedirs(example_out_dir,exist_ok=True)


def main():
# Simulation config
r = run_FAST_ROSCO()

parameter_filename = os.path.join(rosco_dir,'Tune_Cases/NREL5MW_PassThrough.yaml')
run_dir = os.path.join(example_out_dir,'15_PassThrough')
os.makedirs(run_dir,exist_ok=True)

# Step wind simulation
r.tuning_yaml = parameter_filename
r.wind_case_fcn = cl.simp_step
r.wind_case_opts = {
'U_start': [10],
'U_end': [15],
'wind_dir': run_dir
}
r.save_dir = run_dir

r.run_FAST()


if __name__=="__main__":
main()
Loading

0 comments on commit 5162966

Please sign in to comment.