diff --git a/.github/workflows/deploy-pages.yaml b/.github/workflows/deploy-pages.yaml index bfb91cf3..466ca733 100644 --- a/.github/workflows/deploy-pages.yaml +++ b/.github/workflows/deploy-pages.yaml @@ -27,6 +27,7 @@ jobs: - name: Make copies of example docs run: | mkdir -vp docs/examples + cp -v example_case_folders/05_floris_wind_standin_and_electrolyzer/README.md docs/examples/05_floris_wind_standin_and_electrolyzer.md cp -v example_case_folders/06_amr_wind_standin_and_battery/README.md docs/examples/06_amr_wind_standin_and_battery.md cp -v example_case_folders/07_amr_wind_standin_and_solar_pysam/README.md docs/examples/07_amr_wind_standin_and_solar_pysam.md ls -l docs/examples diff --git a/docs/_toc.yml b/docs/_toc.yml index 3b6cc1dc..b9e5e458 100644 --- a/docs/_toc.yml +++ b/docs/_toc.yml @@ -21,6 +21,7 @@ parts: - caption: Examples chapters: - file: examples_overview + - file: examples/05_floris_wind_standin_and_electrolyzer - file: examples/06_amr_wind_standin_and_battery - file: examples/07_amr_wind_standin_and_solar_pysam diff --git a/example_case_folders/05_amr_wind_standin_and_electrolzyer/bash_script.sh b/example_case_folders/05_amr_wind_standin_and_electrolzyer/bash_script.sh deleted file mode 100644 index 23821576..00000000 --- a/example_case_folders/05_amr_wind_standin_and_electrolzyer/bash_script.sh +++ /dev/null @@ -1,23 +0,0 @@ -# Example bash for running things locally -# I just run these one at a t time - -# A lot of modules and conda stuff -conda activate hercules - -# Set the helics port to use: -export HELICS_PORT=32000 - -#make sure you use the same port number in the amr_input.inp and hercules_input_000.yaml files. -# Set up the helics broker -helics_broker -f 2 --consoleloglevel=trace --loglevel=debug --local_port=$HELICS_PORT & - -# Need to set this to your hercules folder -# cd /home/pfleming/hercules/hercules -python3 hercules_runscript.py hercules_input_000.yaml >> loghercules 2>&1 & # Start the controller center and pass in input file - - -python3 hercules_runscript_amr_standin.py amr_input.inp >> logstandin 2>&1 -# Now go back to scratch folder and launch the job - -# cd /scratch/pfleming/c2c/example_sim_02 -# mpirun -n 72 /home/pfleming/amr-wind/build/amr_wind amr_input.inp >> logamr \ No newline at end of file diff --git a/example_case_folders/05_amr_wind_standin_and_electrolzyer/hercules_runscript.py b/example_case_folders/05_amr_wind_standin_and_electrolzyer/hercules_runscript.py deleted file mode 100644 index 7c807733..00000000 --- a/example_case_folders/05_amr_wind_standin_and_electrolzyer/hercules_runscript.py +++ /dev/null @@ -1,16 +0,0 @@ -import sys - -from hercules.controller_standin import ControllerStandin -from hercules.emulator import Emulator -from hercules.py_sims import PySims -from hercules.utilities import load_yaml - -input_dict = load_yaml(sys.argv[1]) - -controller = ControllerStandin(input_dict) -py_sims = PySims(input_dict) - - -emulator = Emulator(controller, py_sims, input_dict) -emulator.run_helics_setup() -emulator.enter_execution(function_targets=[], function_arguments=[[]]) diff --git a/example_case_folders/05_amr_wind_standin_and_electrolzyer/hercules_runscript_amr_standin.py b/example_case_folders/05_amr_wind_standin_and_electrolzyer/hercules_runscript_amr_standin.py deleted file mode 100644 index 7cc665c7..00000000 --- a/example_case_folders/05_amr_wind_standin_and_electrolzyer/hercules_runscript_amr_standin.py +++ /dev/null @@ -1,15 +0,0 @@ -import sys - -from hercules.amr_wind_standin import launch_amr_wind_standin - -# Check that one command line argument was given -if len(sys.argv) != 2: - raise Exception("Usage: python hercules_runscript_amr_standin.py ") - -# # Get the first command line argument -# This is the name of the file to read -amr_input_file = sys.argv[1] -print(f"Running AMR-Wind standin with input file: {amr_input_file}") - - -launch_amr_wind_standin(amr_input_file) diff --git a/example_case_folders/05_amr_wind_standin_and_electrolzyer/readme.txt b/example_case_folders/05_amr_wind_standin_and_electrolzyer/readme.txt deleted file mode 100644 index 5481a8a2..00000000 --- a/example_case_folders/05_amr_wind_standin_and_electrolzyer/readme.txt +++ /dev/null @@ -1 +0,0 @@ -This example is a local (non-eagle) example with the amr_wind_standin (using battery instead of solar) adding an electrolyzer plant diff --git a/example_case_folders/05_amr_wind_standin_and_electrolzyer/test_read_output.ipynb b/example_case_folders/05_amr_wind_standin_and_electrolzyer/test_read_output.ipynb deleted file mode 100644 index 618b4105..00000000 --- a/example_case_folders/05_amr_wind_standin_and_electrolzyer/test_read_output.ipynb +++ /dev/null @@ -1,446 +0,0 @@ -{ - "cells": [ - { - "cell_type": "code", - "execution_count": 3, - "metadata": {}, - "outputs": [], - "source": [ - "import matplotlib.pyplot as plt\n", - "import pandas as pd" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
dthercules_comms.amr_wind.wind_farm_0.num_turbineshercules_comms.amr_wind.wind_farm_0.rotor_diameterhercules_comms.amr_wind.wind_farm_0.turbine_powers.000hercules_comms.amr_wind.wind_farm_0.turbine_powers.001hercules_comms.amr_wind.wind_farm_0.sim_time_s_amr_windhercules_comms.helics.config.use_dash_frontendhercules_comms.helics.config.KAFKAhercules_comms.helics.config.helics.helicsporthercules_comms.helics.config.helics.deltat...py_sims.electrolyzer_stack_0.electrolyzer.stack.stack_rating_kWpy_sims.electrolyzer_stack_0.electrolyzer.stack.include_degradation_penaltypy_sims.electrolyzer_stack_0.electrolyzer.stack.dtpy_sims.electrolyzer_stack_0.electrolyzer.control.n_stackspy_sims.electrolyzer_stack_0.electrolyzer.dtpy_sims.electrolyzer_stack_0.initial_conditions.power_available_kwpy_sims.electrolyzer_stack_0.outputs.H2_outputpy_sims.electrolyzer_stack_0.outputs.stacks_onpy_sims.inputs.available_powerclock_time
00.52240.00.0000000.0000000.0FalseFalse320000.5...500True0.5100.530000.00108870.00002023-11-20 12:39:16.167140
10.52240.00.0000000.0000000.0FalseFalse320000.5...500True0.5100.530000.00098760.00002023-11-20 12:39:16.172991
20.52240.00.0000000.0000000.0FalseFalse320000.5...500True0.5100.530000.00074650.00002023-11-20 12:39:16.179023
30.52240.0517.190773388.0140270.0FalseFalse320000.5...500True0.5100.530000.0005424905.20482023-11-20 12:39:16.183878
40.52240.0517.190773388.0140270.0FalseFalse320000.5...500True0.5100.530000.0004924905.20482023-11-20 12:39:16.185576
\n", - "

5 rows × 32 columns

\n", - "
" - ], - "text/plain": [ - " dt hercules_comms.amr_wind.wind_farm_0.num_turbines \\\n", - "0 0.5 2 \n", - "1 0.5 2 \n", - "2 0.5 2 \n", - "3 0.5 2 \n", - "4 0.5 2 \n", - "\n", - " hercules_comms.amr_wind.wind_farm_0.rotor_diameter \\\n", - "0 240.0 \n", - "1 240.0 \n", - "2 240.0 \n", - "3 240.0 \n", - "4 240.0 \n", - "\n", - " hercules_comms.amr_wind.wind_farm_0.turbine_powers.000 \\\n", - "0 0.000000 \n", - "1 0.000000 \n", - "2 0.000000 \n", - "3 517.190773 \n", - "4 517.190773 \n", - "\n", - " hercules_comms.amr_wind.wind_farm_0.turbine_powers.001 \\\n", - "0 0.000000 \n", - "1 0.000000 \n", - "2 0.000000 \n", - "3 388.014027 \n", - "4 388.014027 \n", - "\n", - " hercules_comms.amr_wind.wind_farm_0.sim_time_s_amr_wind \\\n", - "0 0.0 \n", - "1 0.0 \n", - "2 0.0 \n", - "3 0.0 \n", - "4 0.0 \n", - "\n", - " hercules_comms.helics.config.use_dash_frontend \\\n", - "0 False \n", - "1 False \n", - "2 False \n", - "3 False \n", - "4 False \n", - "\n", - " hercules_comms.helics.config.KAFKA \\\n", - "0 False \n", - "1 False \n", - "2 False \n", - "3 False \n", - "4 False \n", - "\n", - " hercules_comms.helics.config.helics.helicsport \\\n", - "0 32000 \n", - "1 32000 \n", - "2 32000 \n", - "3 32000 \n", - "4 32000 \n", - "\n", - " hercules_comms.helics.config.helics.deltat ... \\\n", - "0 0.5 ... \n", - "1 0.5 ... \n", - "2 0.5 ... \n", - "3 0.5 ... \n", - "4 0.5 ... \n", - "\n", - " py_sims.electrolyzer_stack_0.electrolyzer.stack.stack_rating_kW \\\n", - "0 500 \n", - "1 500 \n", - "2 500 \n", - "3 500 \n", - "4 500 \n", - "\n", - " py_sims.electrolyzer_stack_0.electrolyzer.stack.include_degradation_penalty \\\n", - "0 True \n", - "1 True \n", - "2 True \n", - "3 True \n", - "4 True \n", - "\n", - " py_sims.electrolyzer_stack_0.electrolyzer.stack.dt \\\n", - "0 0.5 \n", - "1 0.5 \n", - "2 0.5 \n", - "3 0.5 \n", - "4 0.5 \n", - "\n", - " py_sims.electrolyzer_stack_0.electrolyzer.control.n_stacks \\\n", - "0 10 \n", - "1 10 \n", - "2 10 \n", - "3 10 \n", - "4 10 \n", - "\n", - " py_sims.electrolyzer_stack_0.electrolyzer.dt \\\n", - "0 0.5 \n", - "1 0.5 \n", - "2 0.5 \n", - "3 0.5 \n", - "4 0.5 \n", - "\n", - " py_sims.electrolyzer_stack_0.initial_conditions.power_available_kw \\\n", - "0 3000 \n", - "1 3000 \n", - "2 3000 \n", - "3 3000 \n", - "4 3000 \n", - "\n", - " py_sims.electrolyzer_stack_0.outputs.H2_output \\\n", - "0 0.001088 \n", - "1 0.000987 \n", - "2 0.000746 \n", - "3 0.000542 \n", - "4 0.000492 \n", - "\n", - " py_sims.electrolyzer_stack_0.outputs.stacks_on \\\n", - "0 7 \n", - "1 6 \n", - "2 5 \n", - "3 4 \n", - "4 4 \n", - "\n", - " py_sims.inputs.available_power clock_time \n", - "0 0.0000 2023-11-20 12:39:16.167140 \n", - "1 0.0000 2023-11-20 12:39:16.172991 \n", - "2 0.0000 2023-11-20 12:39:16.179023 \n", - "3 905.2048 2023-11-20 12:39:16.183878 \n", - "4 905.2048 2023-11-20 12:39:16.185576 \n", - "\n", - "[5 rows x 32 columns]" - ] - }, - "execution_count": 2, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "# Read the output file\n", - "df = pd.read_csv(\"hercules_output.csv\", index_col=False)\n", - "df.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "Index(['dt', 'hercules_comms.amr_wind.wind_farm_0.num_turbines',\n", - " 'hercules_comms.amr_wind.wind_farm_0.rotor_diameter',\n", - " 'hercules_comms.amr_wind.wind_farm_0.turbine_powers.000',\n", - " 'hercules_comms.amr_wind.wind_farm_0.turbine_powers.001',\n", - " 'hercules_comms.amr_wind.wind_farm_0.sim_time_s_amr_wind',\n", - " 'hercules_comms.helics.config.use_dash_frontend',\n", - " 'hercules_comms.helics.config.KAFKA',\n", - " 'hercules_comms.helics.config.helics.helicsport',\n", - " 'hercules_comms.helics.config.helics.deltat',\n", - " 'hercules_comms.helics.config.publication_interval',\n", - " 'hercules_comms.helics.config.endpoint_interval',\n", - " 'hercules_comms.helics.config.starttime',\n", - " 'hercules_comms.helics.config.stoptime',\n", - " 'py_sims.electrolyzer_stack_0.general.verbose',\n", - " 'py_sims.electrolyzer_stack_0.electrolyzer.initialize',\n", - " 'py_sims.electrolyzer_stack_0.electrolyzer.initial_power_kW',\n", - " 'py_sims.electrolyzer_stack_0.electrolyzer.stack.cell_area',\n", - " 'py_sims.electrolyzer_stack_0.electrolyzer.stack.max_current',\n", - " 'py_sims.electrolyzer_stack_0.electrolyzer.stack.temperature',\n", - " 'py_sims.electrolyzer_stack_0.electrolyzer.stack.n_cells',\n", - " 'py_sims.electrolyzer_stack_0.electrolyzer.stack.min_power',\n", - " 'py_sims.electrolyzer_stack_0.electrolyzer.stack.stack_rating_kW',\n", - " 'py_sims.electrolyzer_stack_0.electrolyzer.stack.include_degradation_penalty',\n", - " 'py_sims.electrolyzer_stack_0.electrolyzer.stack.dt',\n", - " 'py_sims.electrolyzer_stack_0.electrolyzer.control.n_stacks',\n", - " 'py_sims.electrolyzer_stack_0.electrolyzer.dt',\n", - " 'py_sims.electrolyzer_stack_0.initial_conditions.power_available_kw',\n", - " 'py_sims.electrolyzer_stack_0.outputs.H2_output',\n", - " 'py_sims.electrolyzer_stack_0.outputs.stacks_on',\n", - " 'py_sims.inputs.available_power', 'clock_time'],\n", - " dtype='object')" - ] - }, - "execution_count": 5, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "df.columns" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "" - ] - }, - "execution_count": 4, - "metadata": {}, - "output_type": "execute_result" - }, - { - "data": { - "image/png": "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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "plt.figure()\n", - "time = df[\"hercules_comms.amr_wind.wind_farm_0.sim_time_s_amr_wind\"]\n", - "plt.plot(time, df[\"hercules_comms.amr_wind.wind_farm_0.turbine_powers.000\"], label=\"WT000\")\n", - "plt.plot(time, df[\"hercules_comms.amr_wind.wind_farm_0.turbine_powers.001\"], label=\"WT001\")\n", - "plt.plot(time, df[\"py_sims.inputs.available_power\"], label=\"available power\")\n", - "plt.ylabel(\"Power\")\n", - "plt.xlabel(\"Time\")\n", - "plt.legend()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - } - ], - "metadata": { - "kernelspec": { - "display_name": "hercules", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.12.0" - }, - "orig_nbformat": 4 - }, - "nbformat": 4, - "nbformat_minor": 2 -} diff --git a/example_case_folders/05_floris_wind_standin_and_electrolyzer/README.md b/example_case_folders/05_floris_wind_standin_and_electrolyzer/README.md new file mode 100644 index 00000000..35de3940 --- /dev/null +++ b/example_case_folders/05_floris_wind_standin_and_electrolyzer/README.md @@ -0,0 +1,17 @@ +# Example 05: FLORIS Wind Standin and Electrolyzer + +## Description + +This example demonstrates how to use the FLORIS as the wind standin model combined with and electrolyzer plant in a simple case. This example also uses a WHOC controller to allow the user to give set points to the wind farm to control the wind farm power output, set in the 'wind_power_reference_data.csv' file. The wind speed and wind directions inputs are given in 'floris_standin_data.csv' and can be changed to vary the conditions of the wind simulation. The 'test_read_output.ipynb' file contains a jupyter notebook that allows the user to plot the wind turbine and farm power outputs and the electrolyzer plant hydrogen output. + +## Running + +To run the example, execute the following command in the terminal: + +```bash +bash bash_script.sh +``` + +## Notes + +Make sure hercules conda or venv is activated before running the example. \ No newline at end of file diff --git a/example_case_folders/05_amr_wind_standin_and_electrolzyer/amr_input.inp b/example_case_folders/05_floris_wind_standin_and_electrolyzer/amr_input.inp similarity index 68% rename from example_case_folders/05_amr_wind_standin_and_electrolzyer/amr_input.inp rename to example_case_folders/05_floris_wind_standin_and_electrolyzer/amr_input.inp index 735a1e6f..65931d09 100644 --- a/example_case_folders/05_amr_wind_standin_and_electrolzyer/amr_input.inp +++ b/example_case_folders/05_floris_wind_standin_and_electrolyzer/amr_input.inp @@ -76,7 +76,7 @@ ABL.stats_output_format = netcdf # Whether to use helics helics.activated = true -helics.broker_port =32000 +helics.broker_port = 32000 #¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨# # ADAPTIVE MESH REFINEMENT # @@ -149,33 +149,18 @@ samplingLine.z_line.end = 5.0 5.0 1275.0 Actuator.type = UniformCtDisk Actuator.UniformCtDisk.rotor_diameter = 126.0 Actuator.UniformCtDisk.hub_height = 90.0 -Actuator.UniformCtDisk.thrust_coeff = 0.0 0.7 1.2 -Actuator.UniformCtDisk.wind_speed = 0.0 10.0 12.0 +Actuator.UniformCtDisk.thrust_coeff = 0.0 0.0 1.132034888 0.999470963 0.917697381 0.860849503 0.815371198 0.811614904 0.807939328 0.80443352 0.800993851 0.79768116 0.794529244 0.791495834 0.788560434 0.787217182 0.787127977 0.785839257 0.783812219 0.783568108 0.783328285 0.781194418 0.777292539 0.773464375 0.769690236 0.766001924 0.762348072 0.758760824 0.755242872 0.751792927 0.748434131 0.745113997 0.717806682 0.672204789 0.63831272 0.610176496 0.585456847 0.563222111 0.542912273 0.399312061 0.310517829 0.248633226 0.203543725 0.169616419 0.143478955 0.122938861 0.106515296 0.093026095 0.081648606 0.072197368 0.064388275 0.057782745 0.0 0.0 +Actuator.UniformCtDisk.wind_speed = 0.0 2.9 3.0 4.0 5.0 6.0 7.0 7.1 7.2 7.3 7.4 7.5 7.6 7.7 7.8 7.9 8.0 9.0 10.0 10.1 10.2 10.3 10.4 10.5 10.6 10.7 10.8 10.9 11.0 11.1 11.2 11.3 11.4 11.5 11.6 11.7 11.8 11.9 12.0 13.0 14.0 15.0 16.0 17.0 18.0 19.0 20.0 21.0 22.0 23.0 24.0 25.0 25.1 50.0 Actuator.UniformCtDisk.epsilon = 10.0 Actuator.UniformCtDisk.density = 1.225 Actuator.UniformCtDisk.diameters_to_sample = 1.0 Actuator.UniformCtDisk.num_points_r = 20 Actuator.UniformCtDisk.num_points_t = 5 +#Actuator.UniformCtDisk.yaw = 240.0 -Actuator.labels = T00 T01 -# T02 T03 T04 T05 T06 T07 -Actuator.JoukowskyDisk.thrust_coeff = 8.1672e-01 7.9044e-01 7.8393e-01 7.8624e-01 7.8824e-01 7.8942e-01 7.8902e-01 7.8740e-01 7.8503e-01 7.8237e-01 7.7955e-01 7.7583e-01 7.7583e-01 7.7583e-01 7.7583e-01 7.7583e-01 7.7583e-01 7.7583e-01 7.7583e-01 7.7583e-01 7.7583e-01 7.7583e-01 7.7583e-01 7.7583e-01 7.7583e-01 7.7583e-01 7.7583e-01 7.7583e-01 7.6922e-01 7.4270e-01 5.5949e-01 4.6163e-01 3.8786e-01 3.2901e-01 2.8093e-01 2.4114e-01 2.0795e-01 1.8010e-01 1.5663e-01 1.3679e-01 1.1995e-01 1.0562e-01 9.3384e-02 8.2908e-02 7.3910e-02 6.6159e-02 5.9463e-02 5.3662e-02 4.8622e-02 4.4230e-02 -Actuator.JoukowskyDisk.wind_speed = 3.0000e+00 3.5495e+00 4.0679e+00 4.5539e+00 5.0064e+00 5.4244e+00 5.8069e+00 6.1530e+00 6.4619e+00 6.7330e+00 6.9655e+00 7.1589e+00 7.3128e+00 7.4269e+00 7.5009e+00 7.5345e+00 7.5412e+00 7.5883e+00 7.6757e+00 7.8031e+00 7.9702e+00 8.1767e+00 8.4221e+00 8.7059e+00 9.0273e+00 9.3856e+00 9.7800e+00 1.0210e+01 1.0659e+01 1.0673e+01 1.1170e+01 1.1699e+01 1.2259e+01 1.2848e+01 1.3465e+01 1.4109e+01 1.4778e+01 1.5471e+01 1.6185e+01 1.6921e+01 1.7674e+01 1.8445e+01 1.9231e+01 2.0030e+01 2.0841e+01 2.1661e+01 2.2489e+01 2.3323e+01 2.4160e+01 2.5000e+01 -Actuator.JoukowskyDisk.rpm = 5.0000e+00 5.0000e+00 5.0000e+00 5.0000e+00 5.0000e+00 5.0000e+00 5.0000e+00 5.0000e+00 5.0000e+00 5.0000e+00 5.0000e+00 5.0861e+00 5.1954e+00 5.2765e+00 5.3290e+00 5.3529e+00 5.3577e+00 5.3912e+00 5.4532e+00 5.5437e+00 5.6625e+00 5.8092e+00 5.9836e+00 6.1851e+00 6.4135e+00 6.6681e+00 6.9483e+00 7.2535e+00 7.4992e+00 7.4992e+00 7.4992e+00 7.4992e+00 7.4992e+00 7.4992e+00 7.4992e+00 7.4992e+00 7.4992e+00 7.4992e+00 7.4992e+00 7.4992e+00 7.4992e+00 7.4992e+00 7.4992e+00 7.4992e+00 7.4992e+00 7.4992e+00 7.4992e+00 7.4992e+00 7.4992e+00 7.4992e+00 -Actuator.JoukowskyDisk.rotor_diameter = 240.0 -Actuator.JoukowskyDisk.hub_height = 150.0 -Actuator.JoukowskyDisk.output_frequency = 100 -Actuator.JoukowskyDisk.diameters_to_sample = 1.0 -Actuator.JoukowskyDisk.num_points_r = 40 -Actuator.JoukowskyDisk.num_points_t = 5 -Actuator.JoukowskyDisk.num_blades = 3 -Actuator.JoukowskyDisk.use_tip_correction = true -Actuator.JoukowskyDisk.use_root_correction = true -Actuator.JoukowskyDisk.epsilon = 5.0 -Actuator.JoukowskyDisk.vortex_core_size = 24.0 - -Actuator.UniformCtDisk.yaw = 240.0 - -Actuator.T00.base_position = 2000.0 2000.0 0.0 -Actuator.T01.base_position = 2500.0 2500.0 0.0 +Actuator.labels = T00 T01 + + +Actuator.T00.base_position = 0.0 0.0 0.0 +Actuator.T01.base_position = 1000.0 0.0 0.0 diff --git a/example_case_folders/05_floris_wind_standin_and_electrolyzer/bash_script.sh b/example_case_folders/05_floris_wind_standin_and_electrolyzer/bash_script.sh new file mode 100644 index 00000000..2bcc3dcd --- /dev/null +++ b/example_case_folders/05_floris_wind_standin_and_electrolyzer/bash_script.sh @@ -0,0 +1,19 @@ +# Example bash for running things locally +# I just run these one at a t time + +# A lot of modules and conda stuff +conda activate hercules + +# Delete old log files +rm hercules_output_control.csv log_test_client.log loghercules_cl logfloris_cl + +# Set the helics port to use: +export HELICS_PORT=32000 + +#make sure you use the same port number in the amr_input.inp and hercules_input_000.yaml files. +# Set up the helics broker + +helics_broker -t zmq -f 2 --loglevel="debug" --local_port=$HELICS_PORT & +python3 hercules_runscript_CLcontrol.py hercules_input_000.yaml >> loghercules_cl 2>&1 & +python3 floris_runscript.py amr_input.inp floris_standin_data.csv >> logfloris_cl 2>&1 + diff --git a/example_case_folders/05_floris_wind_standin_and_electrolyzer/floris_runscript.py b/example_case_folders/05_floris_wind_standin_and_electrolyzer/floris_runscript.py new file mode 100644 index 00000000..322bd431 --- /dev/null +++ b/example_case_folders/05_floris_wind_standin_and_electrolyzer/floris_runscript.py @@ -0,0 +1,19 @@ +import sys + +from hercules.floris_standin import launch_floris + +# Check that one command line argument was given +if len(sys.argv) < 2: + raise Exception("Usage: python floris_runscript.py ") + +# # Get the first command line argument +# This is the name of the file to read +amr_input_file = sys.argv[1] +print(f"Running FLORIS standin with input file: {amr_input_file}") +if len(sys.argv) > 2: + amr_standin_data_file = sys.argv[2] + print(f"Using standin data for AMR-Wind from file: {amr_standin_data_file}") +else: + amr_standin_data_file = None + +launch_floris(amr_input_file, amr_standin_data_file) \ No newline at end of file diff --git a/example_case_folders/05_floris_wind_standin_and_electrolyzer/floris_standin_data.csv b/example_case_folders/05_floris_wind_standin_and_electrolyzer/floris_standin_data.csv new file mode 100644 index 00000000..40640cd8 --- /dev/null +++ b/example_case_folders/05_floris_wind_standin_and_electrolyzer/floris_standin_data.csv @@ -0,0 +1,201 @@ +,time,amr_wind_speed,amr_wind_direction +0,0.0,11.0,270.0 +1,0.5,11.0,270.0 +2,1.0,11.0,270.0 +3,1.5,11.0,270.0 +4,2.0,11.0,270.0 +5,2.5,11.0,270.0 +6,3.0,11.0,270.0 +7,3.5,11.0,270.0 +8,4.0,11.0,270.0 +9,4.5,11.0,270.0 +10,5.0,11.0,270.0 +11,5.5,11.0,270.0 +12,6.0,11.0,270.0 +13,6.5,11.0,270.0 +14,7.0,11.0,270.0 +15,7.5,11.0,270.0 +16,8.0,11.0,270.0 +17,8.5,11.0,270.0 +18,9.0,11.0,270.0 +19,9.5,11.0,270.0 +20,10.0,11.0,270.0 +21,10.5,11.0,270.0 +22,11.0,11.0,270.0 +23,11.5,11.0,270.0 +24,12.0,11.0,270.0 +25,12.5,11.0,270.0 +26,13.0,11.0,270.0 +27,13.5,11.0,270.0 +28,14.0,11.0,270.0 +29,14.5,11.0,270.0 +30,15.0,11.0,270.0 +31,15.5,11.0,270.0 +32,16.0,11.0,270.0 +33,16.5,11.0,270.0 +34,17.0,11.0,270.0 +35,17.5,11.0,270.0 +36,18.0,11.0,270.0 +37,18.5,11.0,270.0 +38,19.0,11.0,270.0 +39,19.5,11.0,270.0 +40,20.0,11.0,270.0 +41,20.5,11.0,270.0 +42,21.0,11.0,270.0 +43,21.5,11.0,270.0 +44,22.0,11.0,270.0 +45,22.5,11.0,270.0 +46,23.0,11.0,270.0 +47,23.5,11.0,270.0 +48,24.0,11.0,270.0 +49,24.5,11.0,270.0 +50,25.0,11.0,270.0 +51,25.5,11.0,270.0 +52,26.0,11.0,270.0 +53,26.5,11.0,270.0 +54,27.0,11.0,270.0 +55,27.5,11.0,270.0 +56,28.0,11.0,270.0 +57,28.5,11.0,270.0 +58,29.0,11.0,270.0 +59,29.5,11.0,270.0 +60,30.0,11.0,270.0 +61,30.5,11.0,270.0 +62,31.0,11.0,270.0 +63,31.5,11.0,270.0 +64,32.0,11.0,270.0 +65,32.5,11.0,270.0 +66,33.0,11.0,270.0 +67,33.5,11.0,270.0 +68,34.0,11.0,270.0 +69,34.5,11.0,270.0 +70,35.0,11.0,270.0 +71,35.5,11.0,270.0 +72,36.0,11.0,270.0 +73,36.5,11.0,270.0 +74,37.0,11.0,270.0 +75,37.5,11.0,270.0 +76,38.0,11.0,270.0 +77,38.5,11.0,270.0 +78,39.0,11.0,270.0 +79,39.5,11.0,270.0 +80,40.0,11.0,270.0 +81,40.5,11.0,270.0 +82,41.0,11.0,270.0 +83,41.5,11.0,270.0 +84,42.0,11.0,270.0 +85,42.5,11.0,270.0 +86,43.0,11.0,270.0 +87,43.5,11.0,270.0 +88,44.0,11.0,270.0 +89,44.5,11.0,270.0 +90,45.0,11.0,270.0 +91,45.5,11.0,270.0 +92,46.0,11.0,270.0 +93,46.5,11.0,270.0 +94,47.0,11.0,270.0 +95,47.5,11.0,270.0 +96,48.0,11.0,270.0 +97,48.5,11.0,270.0 +98,49.0,11.0,270.0 +99,49.5,11.0,270.0 +100,50.0,11.0,270.0 +101,50.5,11.0,270.0 +102,51.0,11.0,270.0 +103,51.5,11.0,270.0 +104,52.0,11.0,270.0 +105,52.5,11.0,270.0 +106,53.0,11.0,270.0 +107,53.5,11.0,270.0 +108,54.0,11.0,270.0 +109,54.5,11.0,270.0 +110,55.0,11.0,270.0 +111,55.5,11.0,270.0 +112,56.0,11.0,270.0 +113,56.5,11.0,270.0 +114,57.0,11.0,270.0 +115,57.5,11.0,270.0 +116,58.0,11.0,270.0 +117,58.5,11.0,270.0 +118,59.0,11.0,270.0 +119,59.5,11.0,270.0 +120,60.0,11.0,270.0 +121,60.5,11.0,270.0 +122,61.0,11.0,270.0 +123,61.5,11.0,270.0 +124,62.0,11.0,270.0 +125,62.5,11.0,270.0 +126,63.0,11.0,270.0 +127,63.5,11.0,270.0 +128,64.0,11.0,270.0 +129,64.5,11.0,270.0 +130,65.0,11.0,270.0 +131,65.5,11.0,270.0 +132,66.0,11.0,270.0 +133,66.5,11.0,270.0 +134,67.0,11.0,270.0 +135,67.5,11.0,270.0 +136,68.0,11.0,270.0 +137,68.5,11.0,270.0 +138,69.0,11.0,270.0 +139,69.5,11.0,270.0 +140,70.0,11.0,270.0 +141,70.5,11.0,270.0 +142,71.0,11.0,270.0 +143,71.5,11.0,270.0 +144,72.0,11.0,270.0 +145,72.5,11.0,270.0 +146,73.0,11.0,270.0 +147,73.5,11.0,270.0 +148,74.0,11.0,270.0 +149,74.5,11.0,270.0 +150,75.0,11.0,270.0 +151,75.5,11.0,270.0 +152,76.0,11.0,270.0 +153,76.5,11.0,270.0 +154,77.0,11.0,270.0 +155,77.5,11.0,270.0 +156,78.0,11.0,270.0 +157,78.5,11.0,270.0 +158,79.0,11.0,270.0 +159,79.5,11.0,270.0 +160,80.0,11.0,270.0 +161,80.5,11.0,270.0 +162,81.0,11.0,270.0 +163,81.5,11.0,270.0 +164,82.0,11.0,270.0 +165,82.5,11.0,270.0 +166,83.0,11.0,270.0 +167,83.5,11.0,270.0 +168,84.0,11.0,270.0 +169,84.5,11.0,270.0 +170,85.0,11.0,270.0 +171,85.5,11.0,270.0 +172,86.0,11.0,270.0 +173,86.5,11.0,270.0 +174,87.0,11.0,270.0 +175,87.5,11.0,270.0 +176,88.0,11.0,270.0 +177,88.5,11.0,270.0 +178,89.0,11.0,270.0 +179,89.5,11.0,270.0 +180,90.0,11.0,270.0 +181,90.5,11.0,270.0 +182,91.0,11.0,270.0 +183,91.5,11.0,270.0 +184,92.0,11.0,270.0 +185,92.5,11.0,270.0 +186,93.0,11.0,270.0 +187,93.5,11.0,270.0 +188,94.0,11.0,270.0 +189,94.5,11.0,270.0 +190,95.0,11.0,270.0 +191,95.5,11.0,270.0 +192,96.0,11.0,270.0 +193,96.5,11.0,270.0 +194,97.0,11.0,270.0 +195,97.5,11.0,270.0 +196,98.0,11.0,270.0 +197,98.5,11.0,270.0 +198,99.0,11.0,270.0 +199,99.5,11.0,270.0 diff --git a/example_case_folders/05_amr_wind_standin_and_electrolzyer/hercules_input_000.yaml b/example_case_folders/05_floris_wind_standin_and_electrolyzer/hercules_input_000.yaml similarity index 74% rename from example_case_folders/05_amr_wind_standin_and_electrolzyer/hercules_input_000.yaml rename to example_case_folders/05_floris_wind_standin_and_electrolyzer/hercules_input_000.yaml index 62bd014b..2cca1a62 100644 --- a/example_case_folders/05_amr_wind_standin_and_electrolzyer/hercules_input_000.yaml +++ b/example_case_folders/05_floris_wind_standin_and_electrolyzer/hercules_input_000.yaml @@ -5,7 +5,7 @@ name: example_000 ### # Describe this emulator setup -description: Wind standin plant plus electrolyzer plant +description: Wind standin plant using FLORIS plus electrolyzer plant dt: 0.5 @@ -16,6 +16,7 @@ hercules_comms: wind_farm_0: type: amr_wind_local #options are amr_wind or amr_wind_local amr_wind_input_file: amr_input.inp + yaw_simulator_name: yaw_system_0 # can also use "none" (without quotes) helics: @@ -63,21 +64,33 @@ py_sims: stack_rating_kW: 500 # Determines whether degradation is applied to the Stack operation include_degradation_penalty: True + control: # Number of electrolyzer Stacks in plant n_stacks: 10 # Controller type for electrolyzer plant operation - control_type: BaselineDeg # default + control_type: PowerSharingRotation + # policy: + # eager_on: False + # eager_off: False + # sequential: False + # even_dist: False + # baseline: True + costs: initial_conditions: # Initial power input to electrolyzer power_available_kw: 3000 +controller: + controller_type: SimpleYawController # This may not be needed + num_turbines: 2 # Should match AMR-Wind! Ideally, would come from AMR-wind + initial_conditions: + yaw: 270. # degrees (same for all turbines) (will this work?) - -controller: +external_data_file: wind_power_reference_data.csv diff --git a/example_case_folders/05_floris_wind_standin_and_electrolyzer/hercules_runscript_CLcontrol.py b/example_case_folders/05_floris_wind_standin_and_electrolyzer/hercules_runscript_CLcontrol.py new file mode 100644 index 00000000..7bc65a3e --- /dev/null +++ b/example_case_folders/05_floris_wind_standin_and_electrolyzer/hercules_runscript_CLcontrol.py @@ -0,0 +1,37 @@ +# Copyright 2021 NREL + +# Licensed under the Apache License, Version 2.0 (the "License"); you may not +# use this file except in compliance with the License. You may obtain a copy of +# the License at http://www.apache.org/licenses/LICENSE-2.0 + +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +# License for the specific language governing permissions and limitations under +# the License. + +# See https://nrel.github.io/wind-hybrid-open-controller for documentation + +import sys + +from hercules.emulator import Emulator +from hercules.py_sims import PySims +from hercules.utilities import load_yaml +from whoc.controllers.wind_farm_power_tracking_controller import WindFarmPowerTrackingController +from whoc.interfaces.hercules_actuator_disk_interface import HerculesADInterface + +input_dict = load_yaml(sys.argv[1]) +input_dict["output_file"] = "hercules_output_control.csv" + +interface = HerculesADInterface(input_dict) + +print("Running closed-loop controller...") +controller = WindFarmPowerTrackingController(interface, input_dict) + +py_sims = PySims(input_dict) + +emulator = Emulator(controller, py_sims, input_dict) +emulator.run_helics_setup() +emulator.enter_execution(function_targets=[], function_arguments=[[]]) + +print("Finished running closed-loop controller.") \ No newline at end of file diff --git a/example_case_folders/05_floris_wind_standin_and_electrolyzer/test_read_output.ipynb b/example_case_folders/05_floris_wind_standin_and_electrolyzer/test_read_output.ipynb new file mode 100644 index 00000000..02918e92 --- /dev/null +++ b/example_case_folders/05_floris_wind_standin_and_electrolyzer/test_read_output.ipynb @@ -0,0 +1,473 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "import matplotlib.pyplot as plt\n", + "import pandas as pd" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
dthercules_comms.amr_wind.wind_farm_0.num_turbineshercules_comms.amr_wind.wind_farm_0.rotor_diameterhercules_comms.amr_wind.wind_farm_0.turbine_powers.000hercules_comms.amr_wind.wind_farm_0.turbine_powers.001hercules_comms.amr_wind.wind_farm_0.turbine_wind_directions.000hercules_comms.amr_wind.wind_farm_0.turbine_wind_directions.001hercules_comms.amr_wind.wind_farm_0.wind_directionhercules_comms.amr_wind.wind_farm_0.sim_time_s_amr_windhercules_comms.amr_wind.wind_farm_0.turbine_yaw_angles.000...py_sims.electrolyzer_stack_0.outputs.H2_outputpy_sims.electrolyzer_stack_0.outputs.stacks_onpy_sims.inputs.available_powerpy_sims.inputs.sim_time_scontroller.num_turbinescontroller.initial_conditions.yawexternal_signals.timeexternal_signals.wind_power_referencetimeclock_time
00.52126.00.0000000.0000000.00.00.00.0-1000...0.00073960.0000000.02270.00.54000.00.52024-04-02 14:35:46.039279
10.52126.02843.0047001314.059412270.0270.0270.00.5-1000...0.00067164157.0641120.52270.01.04000.01.02024-04-02 14:35:46.168555
20.52126.04264.5070501971.089119270.0270.0270.01.0-1000...0.00111266235.5961681.02270.01.54000.01.52024-04-02 14:35:46.220656
30.52126.03132.2535251985.544559270.0270.0270.01.5-1000...0.00158665117.7980841.52270.02.04000.02.02024-04-02 14:35:46.274141
40.52126.02948.3630841610.535958270.0270.0270.02.0-1000...0.00201564558.8990422.02270.02.54000.02.52024-04-02 14:35:46.328384
\n", + "

5 rows × 45 columns

\n", + "
" + ], + "text/plain": [ + " dt hercules_comms.amr_wind.wind_farm_0.num_turbines \\\n", + "0 0.5 2 \n", + "1 0.5 2 \n", + "2 0.5 2 \n", + "3 0.5 2 \n", + "4 0.5 2 \n", + "\n", + " hercules_comms.amr_wind.wind_farm_0.rotor_diameter \\\n", + "0 126.0 \n", + "1 126.0 \n", + "2 126.0 \n", + "3 126.0 \n", + "4 126.0 \n", + "\n", + " hercules_comms.amr_wind.wind_farm_0.turbine_powers.000 \\\n", + "0 0.000000 \n", + "1 2843.004700 \n", + "2 4264.507050 \n", + "3 3132.253525 \n", + "4 2948.363084 \n", + "\n", + " hercules_comms.amr_wind.wind_farm_0.turbine_powers.001 \\\n", + "0 0.000000 \n", + "1 1314.059412 \n", + "2 1971.089119 \n", + "3 1985.544559 \n", + "4 1610.535958 \n", + "\n", + " hercules_comms.amr_wind.wind_farm_0.turbine_wind_directions.000 \\\n", + "0 0.0 \n", + "1 270.0 \n", + "2 270.0 \n", + "3 270.0 \n", + "4 270.0 \n", + "\n", + " hercules_comms.amr_wind.wind_farm_0.turbine_wind_directions.001 \\\n", + "0 0.0 \n", + "1 270.0 \n", + "2 270.0 \n", + "3 270.0 \n", + "4 270.0 \n", + "\n", + " hercules_comms.amr_wind.wind_farm_0.wind_direction \\\n", + "0 0.0 \n", + "1 270.0 \n", + "2 270.0 \n", + "3 270.0 \n", + "4 270.0 \n", + "\n", + " hercules_comms.amr_wind.wind_farm_0.sim_time_s_amr_wind \\\n", + "0 0.0 \n", + "1 0.5 \n", + "2 1.0 \n", + "3 1.5 \n", + "4 2.0 \n", + "\n", + " hercules_comms.amr_wind.wind_farm_0.turbine_yaw_angles.000 ... \\\n", + "0 -1000 ... \n", + "1 -1000 ... \n", + "2 -1000 ... \n", + "3 -1000 ... \n", + "4 -1000 ... \n", + "\n", + " py_sims.electrolyzer_stack_0.outputs.H2_output \\\n", + "0 0.000739 \n", + "1 0.000671 \n", + "2 0.001112 \n", + "3 0.001586 \n", + "4 0.002015 \n", + "\n", + " py_sims.electrolyzer_stack_0.outputs.stacks_on \\\n", + "0 6 \n", + "1 6 \n", + "2 6 \n", + "3 6 \n", + "4 6 \n", + "\n", + " py_sims.inputs.available_power py_sims.inputs.sim_time_s \\\n", + "0 0.000000 0.0 \n", + "1 4157.064112 0.5 \n", + "2 6235.596168 1.0 \n", + "3 5117.798084 1.5 \n", + "4 4558.899042 2.0 \n", + "\n", + " controller.num_turbines controller.initial_conditions.yaw \\\n", + "0 2 270.0 \n", + "1 2 270.0 \n", + "2 2 270.0 \n", + "3 2 270.0 \n", + "4 2 270.0 \n", + "\n", + " external_signals.time external_signals.wind_power_reference time \\\n", + "0 0.5 4000.0 0.5 \n", + "1 1.0 4000.0 1.0 \n", + "2 1.5 4000.0 1.5 \n", + "3 2.0 4000.0 2.0 \n", + "4 2.5 4000.0 2.5 \n", + "\n", + " clock_time \n", + "0 2024-04-02 14:35:46.039279 \n", + "1 2024-04-02 14:35:46.168555 \n", + "2 2024-04-02 14:35:46.220656 \n", + "3 2024-04-02 14:35:46.274141 \n", + "4 2024-04-02 14:35:46.328384 \n", + "\n", + "[5 rows x 45 columns]" + ] + }, + "execution_count": 2, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Read the output file\n", + "df = pd.read_csv(\"hercules_output_control.csv\", index_col=False)\n", + "df.head()" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "Index(['dt', 'hercules_comms.amr_wind.wind_farm_0.num_turbines',\n", + " 'hercules_comms.amr_wind.wind_farm_0.rotor_diameter',\n", + " 'hercules_comms.amr_wind.wind_farm_0.turbine_powers.000',\n", + " 'hercules_comms.amr_wind.wind_farm_0.turbine_powers.001',\n", + " 'hercules_comms.amr_wind.wind_farm_0.turbine_wind_directions.000',\n", + " 'hercules_comms.amr_wind.wind_farm_0.turbine_wind_directions.001',\n", + " 'hercules_comms.amr_wind.wind_farm_0.wind_direction',\n", + " 'hercules_comms.amr_wind.wind_farm_0.sim_time_s_amr_wind',\n", + " 'hercules_comms.amr_wind.wind_farm_0.turbine_yaw_angles.000',\n", + " 'hercules_comms.amr_wind.wind_farm_0.turbine_yaw_angles.001',\n", + " 'hercules_comms.amr_wind.wind_farm_0.turbine_power_setpoints.000',\n", + " 'hercules_comms.amr_wind.wind_farm_0.turbine_power_setpoints.001',\n", + " 'hercules_comms.helics.config.use_dash_frontend',\n", + " 'hercules_comms.helics.config.KAFKA',\n", + " 'hercules_comms.helics.config.helics.helicsport',\n", + " 'hercules_comms.helics.config.helics.deltat',\n", + " 'hercules_comms.helics.config.publication_interval',\n", + " 'hercules_comms.helics.config.endpoint_interval',\n", + " 'hercules_comms.helics.config.starttime',\n", + " 'hercules_comms.helics.config.stoptime',\n", + " 'py_sims.electrolyzer_stack_0.general.verbose',\n", + " 'py_sims.electrolyzer_stack_0.electrolyzer.initialize',\n", + " 'py_sims.electrolyzer_stack_0.electrolyzer.initial_power_kW',\n", + " 'py_sims.electrolyzer_stack_0.electrolyzer.stack.cell_area',\n", + " 'py_sims.electrolyzer_stack_0.electrolyzer.stack.max_current',\n", + " 'py_sims.electrolyzer_stack_0.electrolyzer.stack.temperature',\n", + " 'py_sims.electrolyzer_stack_0.electrolyzer.stack.n_cells',\n", + " 'py_sims.electrolyzer_stack_0.electrolyzer.stack.min_power',\n", + " 'py_sims.electrolyzer_stack_0.electrolyzer.stack.stack_rating_kW',\n", + " 'py_sims.electrolyzer_stack_0.electrolyzer.stack.include_degradation_penalty',\n", + " 'py_sims.electrolyzer_stack_0.electrolyzer.stack.dt',\n", + " 'py_sims.electrolyzer_stack_0.electrolyzer.control.n_stacks',\n", + " 'py_sims.electrolyzer_stack_0.electrolyzer.dt',\n", + " 'py_sims.electrolyzer_stack_0.initial_conditions.power_available_kw',\n", + " 'py_sims.electrolyzer_stack_0.outputs.H2_output',\n", + " 'py_sims.electrolyzer_stack_0.outputs.stacks_on',\n", + " 'py_sims.inputs.available_power', 'py_sims.inputs.sim_time_s',\n", + " 'controller.num_turbines', 'controller.initial_conditions.yaw',\n", + " 'external_signals.time', 'external_signals.wind_power_reference',\n", + " 'time', 'clock_time'],\n", + " dtype='object')" + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.columns" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "plt.figure()\n", + "time = df[\"hercules_comms.amr_wind.wind_farm_0.sim_time_s_amr_wind\"]\n", + "plt.plot(time, df[\"hercules_comms.amr_wind.wind_farm_0.turbine_powers.000\"], label=\"WT000\")\n", + "plt.plot(time, df[\"hercules_comms.amr_wind.wind_farm_0.turbine_powers.001\"], label=\"WT001\")\n", + "plt.plot(time, df[\"py_sims.inputs.available_power\"], label=\"available power\")\n", + "plt.ylabel(\"Power [kW]\")\n", + "plt.xlabel(\"Time\")\n", + "plt.legend()" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Number of stacks operating: 6\n" + ] + }, + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "plt.figure()\n", + "plt.plot(time, df[\"py_sims.electrolyzer_stack_0.outputs.H2_output\"], label=\"H2 Output\")\n", + "# plt.plot(time, df[\"hercules_comms.amr_wind.wind_farm_0.turbine_powers.001\"], label=\"WT001\")\n", + "# plt.plot(time, df[\"py_sims.inputs.available_power\"], label=\"available power\")\n", + "plt.ylabel(\"H2 [kg]\")\n", + "plt.xlabel(\"Time\")\n", + "plt.legend()\n", + "\n", + "\n", + "print(\"Number of stacks operating:\",df[\"py_sims.electrolyzer_stack_0.outputs.stacks_on\"].iloc[-1])" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3.9.12 ('floris')", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.9.12" + }, + "orig_nbformat": 4, + "vscode": { + "interpreter": { + "hash": "84dac6dfeb94e81eb3bb704d3842b6c67eed1a5870ed9173cf9ee805d8458b59" + } + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/example_case_folders/05_floris_wind_standin_and_electrolyzer/wind_power_reference_data.csv b/example_case_folders/05_floris_wind_standin_and_electrolyzer/wind_power_reference_data.csv new file mode 100644 index 00000000..5472901a --- /dev/null +++ b/example_case_folders/05_floris_wind_standin_and_electrolyzer/wind_power_reference_data.csv @@ -0,0 +1,12 @@ +time,wind_power_reference +0.0,4000.0 +10.0,4000.0 +20.0,3000.0 +30.0,3000.0 +39.0,3000.0 +40.0,2000.0 +50.0,2000.0 +59.0,2000.0 +60.0,3000.0 +70.0,3000.0 +80.0,4000.0 \ No newline at end of file diff --git a/hercules/python_simulators/electrolyzer_plant.py b/hercules/python_simulators/electrolyzer_plant.py index b162f977..ffb66647 100644 --- a/hercules/python_simulators/electrolyzer_plant.py +++ b/hercules/python_simulators/electrolyzer_plant.py @@ -43,7 +43,6 @@ def step(self, inputs): power_in = inputs["py_sims"]["inputs"][ "available_power" ] # TODO check what units this is in - # Run electrolyzer forward one step ######## Electrolyzer needs input in Watts ######## H2_produced, H2_mfr, power_left, power_curtailed = self.elec_sys.run_control(power_in * 1e3)