Skip to content

Commit d4420ba

Browse files
dzalkindgbarternikhar-abbasWillC-DNVSeager1989
authored
ROSCO v2.10 Release (#439)
* Add message about use case * Add pkg-config to environment * Fix pypi (#342) * Print when finished with ROSCO * add control packageg * Add twr frequency exclusion zone * fix units for exclusion zone * Add exclusion zone mode to * Add exclusion zone to example * Update DISCONs * Fix print var type for WE_CP * 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 <[email protected]> * 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 <[email protected]> Co-authored-by: WillC-DNV <[email protected]> * 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 <[email protected]> Co-authored-by: WillC-DNV <[email protected]> * 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 <[email protected]> * 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 <[email protected]> * 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 <[email protected]> Co-authored-by: Nikhar Abbas <[email protected]> * 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 <[email protected]> Co-authored-by: Xianping Du <[email protected]> Co-authored-by: nikhar-abbas <[email protected]> * 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 <[email protected]> * 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 <[email protected]> * 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 <[email protected]> * 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 <[email protected]> Co-authored-by: WillC-DNV <[email protected]> * 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 <[email protected]> Co-authored-by: WillC-DNV <[email protected]> * Update docs to reflect CI process Co-authored-by: Nikhar Abbas <[email protected]> Co-authored-by: Xianping Du <[email protected]> Co-authored-by: nikhar-abbas <[email protected]> Co-authored-by: WillC-DNV <[email protected]> * 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 <[email protected]> Co-authored-by: Nikhar Abbas <[email protected]> Co-authored-by: Xianping Du <[email protected]> Co-authored-by: WillC-DNV <[email protected]> Co-authored-by: Gustavo Hylander <[email protected]> * 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 <[email protected]> * 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 <[email protected]> Co-authored-by: Nikhar Abbas <[email protected]> * 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 <[email protected]> Co-authored-by: Xianping Du <[email protected]> Co-authored-by: nikhar-abbas <[email protected]> * 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 <[email protected]> * 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 <[email protected]> * 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 <[email protected]> * 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 <[email protected]> Co-authored-by: WillC-DNV <[email protected]> * 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 <[email protected]> Co-authored-by: WillC-DNV <[email protected]> * Update docs to reflect CI process Co-authored-by: Nikhar Abbas <[email protected]> Co-authored-by: Xianping Du <[email protected]> Co-authored-by: nikhar-abbas <[email protected]> Co-authored-by: WillC-DNV <[email protected]> * 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 * Add Azimuth tracking controller in Simulink * Always enable GenDOF, add options for simp_step * Add sweep for IPC gains and FA damper * Fix NumCoords in FAST_writer * Add turbulent case to runFAST/CaseLibrary * Add peak shaving sweep function * Increase default IPC_IntSat, make input parameter in future * Flip Ct and Cq table allocation (#129) * 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 * Add user-defined hh case * Fix AddF0 and RayleighDamp in FAST_reader * Add max_torque_factor for constant power control, flexible upper limit * Make update discons relative to tuning yaml * Update AddF0 and NumCoords in FAST_reader/writer * Remove matlab/rotor position control stuff Co-authored-by: nikhar-abbas <[email protected]> Co-authored-by: Nikhar Abbas <[email protected]> Co-authored-by: Xianping Du <[email protected]> Co-authored-by: WillC-DNV <[email protected]> Co-authored-by: Gustavo Hylander <[email protected]> * Pass through (#136) * 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 <[email protected]> * 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 <[email protected]> Co-authored-by: Nikhar Abbas <[email protected]> * 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 …
1 parent 0329215 commit d4420ba

File tree

170 files changed

+6674
-4016
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

170 files changed

+6674
-4016
lines changed

.github/workflows/Publish_ROSCO.yml

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ jobs:
1212
strategy:
1313
fail-fast: false
1414
matrix:
15-
os: [ubuntu-latest, windows-latest, macOS-latest]
15+
os: [ubuntu-latest, windows-latest, macos-13, macos-14, macos-15]
1616

1717
steps:
1818
- name: Set up QEMU
@@ -23,7 +23,7 @@ jobs:
2323

2424
- name: Setup GNU Fortran
2525
if: false == contains( matrix.os, 'windows')
26-
uses: awvwgk/setup-fortran@v1
26+
uses: fortran-lang/setup-fortran@v1
2727

2828
- name: Install compiler
2929
if: false == contains( matrix.os, 'windows')
@@ -59,38 +59,38 @@ jobs:
5959

6060
- name: Build wheels linux
6161
if: contains( matrix.os, 'ubuntu')
62-
uses: pypa/cibuildwheel@v2.18.1
62+
uses: pypa/cibuildwheel@v2.23.3
6363
env:
6464
CC: ${{ steps.install_cc.outputs.cc }}
6565
CXX: ${{ steps.install_cc.outputs.cxx }}
6666

67-
- name: Build wheels mac-12
68-
if: contains( matrix.os, 'macos-12')
69-
uses: pypa/[email protected]
70-
env:
71-
CC: ${{ steps.install_cc.outputs.cc }}
72-
CXX: ${{ steps.install_cc.outputs.cxx }}
73-
CIBW_ENVIRONMENT_MACOS: MACOSX_DEPLOYMENT_TARGET="12.0"
74-
7567
- name: Build wheels mac-13
7668
if: contains( matrix.os, 'macos-13')
77-
uses: pypa/cibuildwheel@v2.18.1
69+
uses: pypa/cibuildwheel@v2.23.3
7870
env:
7971
CC: ${{ steps.install_cc.outputs.cc }}
8072
CXX: ${{ steps.install_cc.outputs.cxx }}
8173
CIBW_ENVIRONMENT_MACOS: MACOSX_DEPLOYMENT_TARGET="13.0"
8274

8375
- name: Build wheels mac-14
8476
if: contains( matrix.os, 'macos-14')
85-
uses: pypa/cibuildwheel@v2.18.1
77+
uses: pypa/cibuildwheel@v2.23.3
8678
env:
8779
CC: ${{ steps.install_cc.outputs.cc }}
8880
CXX: ${{ steps.install_cc.outputs.cxx }}
8981
CIBW_ENVIRONMENT_MACOS: MACOSX_DEPLOYMENT_TARGET="14.0"
9082

83+
- name: Build wheels mac-15
84+
if: contains( matrix.os, 'macos-15')
85+
uses: pypa/[email protected]
86+
env:
87+
CC: ${{ steps.install_cc.outputs.cc }}
88+
CXX: ${{ steps.install_cc.outputs.cxx }}
89+
CIBW_ENVIRONMENT_MACOS: MACOSX_DEPLOYMENT_TARGET="15.0"
90+
9191
- name: Build wheels windows
9292
if: contains( matrix.os, 'windows')
93-
uses: pypa/cibuildwheel@v2.18.1
93+
uses: pypa/cibuildwheel@v2.23.3
9494

9595
- uses: actions/upload-artifact@v4
9696
with:
@@ -101,7 +101,7 @@ jobs:
101101
name: Build source distribution
102102
runs-on: ubuntu-latest
103103
steps:
104-
- uses: actions/checkout@v3
104+
- uses: actions/checkout@v4
105105

106106
- name: Build sdist
107107
run: pipx run build --sdist

.gitignore

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@ _build
6767
# Binaries
6868
*.dylib
6969
*.so
70-
*.dll
70+
*.dll.*
7171
*.bts
7272

7373
# Other

.readthedocs.yaml

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,14 @@ build:
1313
jobs:
1414
# Read the docs needs a couple packages not in the environment file
1515
pre_install:
16-
- conda install -y cmake compilers sphinx sphinxcontrib-bibtex
16+
- conda install -y cmake compilers sphinx sphinxcontrib-bibtex sphinx-jsonschema
1717
- conda install sphinx_rtd_theme>=1.3
18+
- pip install json-schema-for-humans
19+
pre_build:
20+
- pwd
21+
- ls
22+
- pip install -e .
23+
- generate-schema-doc --no-copy-css --no-copy-js rosco/toolbox/inputs/toolbox_schema.yaml docs/_static/toolbox_doc.html
1824

1925
conda:
2026
environment: environment.yml

Examples/01_turbine_model.py

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,20 @@
11
"""
22
01_turbine_model
33
----------------
4-
Load and save a turbine model.
4+
Interact with a ROSCO turbine model:
55
66
* Read .yaml input file
77
* Load an openfast turbine model
8-
* Read text file with rotor performance properties
8+
* Read text file with rotor performance properties (Cp, Ct, and Cq surface)
99
* Print some basic turbine properties
10-
* Save the turbine as a picklle
10+
* Save the turbine as a pickle
11+
* Plot the Cp surface
12+
13+
.. figure:: /images/examples/01_NREL5MW_Cp.png
14+
:align: center
15+
:width: 70%
16+
17+
1118
1219
Note: Uses the NREL 5MW included in the Test Cases and is a part of the OpenFAST distribution
1320
"""

Examples/02_ccblade.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
* Read .yaml input file
88
* Load an openfast turbine model
99
* Run ccblade to get rotor performance properties
10-
* Write a text file with rotor performance properties
10+
* Write a text file (``'02_Cp_Ct_Cq.Ex03.txt'``) with rotor performance properties
1111
"""
1212

1313
# Python modules

Examples/03_tune_controller.py

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,15 @@
55
In this example:
66
77
* Read a .yaml file
8-
* Load a turbine model from OpenFAST
9-
* Tune a controller
10-
* Write a controller input file
11-
* Plot gain schedule
8+
* Create a ROSCO turbine object fromt he OpenFAST model
9+
* Tune a ROSCO controller object
10+
* Write a controller input file (``'03_DISCON.IN'``)
11+
* Plot gain schedule (``PC_GS_KP`` and ``PC_GS_KI`` versus ``PS_GS_angles``):
12+
13+
.. figure:: /images/examples/03_GainSched.png
14+
:align: center
15+
:width: 70%
16+
1217
"""
1318

1419
# Python modules
@@ -46,7 +51,8 @@ def main():
4651
controller.tune_controller(turbine)
4752

4853
# Write parameter input file
49-
param_file = os.path.join(this_dir,'DISCON.IN')
54+
example_out_dir = os.path.join(this_dir,'examples_out')
55+
param_file = os.path.join(example_out_dir,'03_DISCON.IN')
5056
write_DISCON(turbine,controller,
5157
param_file=param_file,
5258
txt_filename=cp_filename
@@ -71,7 +77,6 @@ def main():
7177

7278
plt.suptitle('Pitch Controller Gains')
7379

74-
example_out_dir = os.path.join(this_dir,'examples_out')
7580
if not os.path.isdir(example_out_dir):
7681
os.makedirs(example_out_dir)
7782

Examples/04_simple_sim.py

Lines changed: 15 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,24 @@
11
"""
22
04_simple_sim
33
-------------
4-
Run and plot a simple simple step wind simulation
4+
Demonstrate the simple 1-DOF wind turbine simulator with ROSCO
5+
56
In this example:
67
7-
* Load turbine from saved pickle
8-
* Tune a controller
9-
* Run and plot a simple step wind simulation
8+
* Load turbine from saved pickle and tune a ROSCO controller
9+
* Run and plot a step wind simulation using 1-DOF model in ``rosco.toolbox.sim`` and the ROSCO dynamic library
10+
11+
.. figure:: /images/examples/03_GainSched.png
12+
:align: center
13+
:width: 70%
14+
1015
1116
Notes:
1217
13-
* You will need to have a compiled controller in ROSCO, and properly point to it in the `lib_name` variable.
14-
* Using wind speed estimators in this simple simulation is known to cause problems. We suggesting using WE_Mode = 0 in DISCON.IN or increasing sampling rate of simulation
18+
* You must have a compiled controller in ROSCO/rosco/lib/, and properly point to it using the `lib_name` variable.
19+
* Using wind speed estimators in this simple simulation is known to cause problems. We suggest using WE_Mode = 0 in the DISCON.IN or increasing sampling rate of simulation as workarounds.
20+
* The simple simulation is run twice to check that arrays are deallocated properly.
21+
1522
"""
1623
# Python modules
1724
import matplotlib.pyplot as plt
@@ -46,7 +53,6 @@ def main():
4653
# # Load turbine model from saved pickle
4754
turbine = ROSCO_turbine.Turbine
4855
turbine = turbine.load(os.path.join(example_out_dir,'01_NREL5MW_saved.p'))
49-
# controller = ROSCO_controller.Controller(controller_params)
5056

5157
# Load turbine data from OpenFAST and rotor performance text file
5258
cp_filename = os.path.join(tune_dir,path_params['rotor_performance_filename'])
@@ -101,8 +107,8 @@ def main():
101107
if False:
102108
plt.show()
103109
else:
104-
plt.savefig(os.path.join(example_out_dir,'04_NREL5MW_SimpSim.png'))
110+
plt.savefig(os.path.join(example_out_dir,'04_NREL5MW_SimpSim.png'), bbox_inches='tight')
105111

106-
if __name__=='__main__':
112+
if __name__ == "__main__":
107113
main()
108114

Examples/05_openfast_sim.py

Lines changed: 5 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
"""
22
05_openfast_sim
33
---------------
4-
Load a turbine, tune a controller, run OpenFAST simulation
4+
Load a turbine, tune a controller, and run an OpenFAST simulation.
55
In this example:
66
77
* Load a turbine from OpenFAST
@@ -10,15 +10,11 @@
1010
1111
Note
1212
13-
* you will need to have a compiled controller in ROSCO/build/
13+
* You must have a compiled controller in ROSCO/rosco/lib/
1414
"""
1515

16-
# Python Modules
17-
#import yaml
16+
1817
import os
19-
#import numpy as np
20-
#import matplotlib.pyplot as plt
21-
# ROSCO toolbox modules
2218
from rosco.toolbox import controller as ROSCO_controller
2319
from rosco.toolbox import turbine as ROSCO_turbine
2420
from rosco.toolbox.utilities import write_DISCON, run_openfast
@@ -56,7 +52,7 @@ def main():
5652
controller.tune_controller(turbine)
5753

5854
# Write parameter input file
59-
param_file = os.path.join(this_dir,'DISCON.IN') # This must be named DISCON.IN to be seen by the compiled controller binary.
55+
param_file = os.path.join(this_dir,'DISCON.IN')
6056
write_DISCON(turbine,controller,param_file=param_file, txt_filename=path_params['rotor_performance_filename'])
6157

6258
# Run OpenFAST
@@ -71,4 +67,4 @@ def main():
7167
)
7268

7369
if __name__ == "__main__":
74-
main()
70+
main()

Examples/06_peak_shaving.py

Lines changed: 25 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,33 @@
11
"""
2-
06_peak_shavings
2+
06_peak_shaving
33
----------------
4-
Load saved turbine, tune controller, plot minimum pitch schedule
5-
In this example:
64
7-
* Load a yaml file
8-
* Load a turbine from openfast
9-
* Tune a controller
10-
* Plot minimum pitch schedule
5+
This example demonstrates the minimum pitch schedule of the NREL 5MW RWT.
6+
In the ROSCO controller, the minimum pitch is determined from a lookup table from the (estimated) wind speed to the limit.
7+
The ROSCO DISCON controller only has PS_Mode of 0 (disable) or 1 (enabled).
8+
9+
When creating a DISCON using the ROSCO toolbox, a few more options are available.
10+
For PS_Mode = 1, the minimum pitch limit is calculated to limit the maximum thrust to a fraction of the un-limited maximum thrust, computed from the rotor's Ct table.
11+
The ``ps_percent`` input (to the tuning yaml) is the fraction of the allowed thrust to the maximum, un-limited thrust.
12+
For example, if the maximum thrust is 1e5 N, and we want to limite the maximum thrust to 8e4 N, ``ps_percent`` = 0.8.
13+
Note that "percent" is a bit of a misnomer.
14+
15+
For PS_Mode = 2, the minimum pitch limit is calculated to maximize the Cp surface in below rated; this usually results in a non-zero pitch at low wind speeds.
16+
For large rotors, sometimes a minimum rotor speed is enforced to avoid resonance between the rotor period and the tower natural frequency; this results in a non-constant TSR across the below-rated operating points.
17+
In this case, different pitch angles will be required to maximize Cp.
18+
19+
For PS_Mode = 3, both the thrust limiting and the power maximizing tuning routines determine the minimum pitch limit.
20+
This example demonstrates PS_Mode = 3 as follows, compared to the steady state blade pitch operating points of the turbine.
21+
The ROSCO toolbox uses Cp and Ct tables to compute these inputs to the ROSCO controller.
22+
23+
.. figure:: /source/figures/06_MinPitch.png
24+
:align: center
25+
:width: 70%
26+
1127
"""
1228

29+
# Figure copy: cp ../Examples/examples_out/06_MinPitch.png source/figures/
30+
1331
# Python modules
1432
import matplotlib.pyplot as plt
1533
import os

Examples/07_openfast_outputs.py

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,14 @@
11
"""
22
07_openfast_outputs
33
-------------------
4-
Plot some OpenFAST output data
5-
In this example:
4+
Demonstrate the ROSCO routines for reading OpenFAST I/O files.
5+
Nearly all the figures in the example documentation rely on a version of these scripts, which can also be used to load ROSCO *.dbg* files, including
66
7-
* Load openfast output data
8-
* Trim the time series
9-
* Plot some available channels
7+
# .dbg files output basic ROSCO internal variables, like the inputs and outputs to the wind speed estimator
8+
# .dbg2 files output all the ROSCO LocalVariables. If the variable is an array, only the first entry is recorded.
9+
# .dbg3 files output the avrSWAP array at each timestep that is transfered between ROSCO and the multi-physics solver
1010
11-
Note: need to run openfast model in 'Test_Cases/5MW_Land_DLL_WTurb/' to plot
11+
Note: this example relies on the previous running of the OpenFAST model in 'Test_Cases/NREL-5MW/' to plot.
1212
"""
1313

1414
# Python Modules

0 commit comments

Comments
 (0)