Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
70 commits
Select commit Hold shift + click to select a range
f03ad31
add wombat bones
RHammond2 Oct 2, 2025
446c74e
add basics for wombat API entrypoint
RHammond2 Oct 2, 2025
24ec954
replace remaining orbit naming references
RHammond2 Oct 2, 2025
40a23db
add basic outputs
RHammond2 Oct 2, 2025
4b40dd6
continue tinkering
RHammond2 Oct 10, 2025
04a6f8c
add more bones to the skeleton
RHammond2 Oct 29, 2025
7869ded
move config-scenario setup to setup
RHammond2 Nov 3, 2025
88510c0
add start of turbine options
RHammond2 Nov 3, 2025
47f0650
add missing default value
RHammond2 Nov 3, 2025
88f5b04
add placeholders for the key failure data for all model inputs
RHammond2 Nov 6, 2025
a2b28a2
add wombat as dependency
RHammond2 Nov 6, 2025
b2d6804
add turbine configuration inputs
RHammond2 Nov 6, 2025
36eaee0
update compute to use configuration inputs
RHammond2 Nov 6, 2025
f31b27b
update orbit dependency for incoming features
RHammond2 Nov 6, 2025
0d97725
add layout to orbit output, and use it for wombat's layout
RHammond2 Nov 6, 2025
c2e8496
add wombat outputs
RHammond2 Nov 6, 2025
2ba419b
create hooks for wisdem integration
ptrbortolotti Nov 10, 2025
d1c39b0
start adding appropriate level of user inputs
RHammond2 Nov 12, 2025
a7bf747
add schema documentation to the base opex inputs
RHammond2 Nov 12, 2025
37dfb95
update none and number
RHammond2 Nov 12, 2025
a5ea16b
update number to n
RHammond2 Nov 12, 2025
e8667bb
create glue code
RHammond2 Nov 12, 2025
1d73158
connect inputs during compile
RHammond2 Nov 12, 2025
1e126ac
add weather
RHammond2 Nov 13, 2025
40cb9bf
fix units
RHammond2 Nov 13, 2025
686331c
fix incorrect encoding and reorder scenario-specific inputs
RHammond2 Nov 13, 2025
23b50aa
convert turbine costs to proportional and fix bad default library ref…
RHammond2 Nov 13, 2025
646008d
fix todo notes
RHammond2 Nov 13, 2025
a77712d
ensure inputs are included in setup
RHammond2 Nov 14, 2025
d7ecda1
start adding outputs
RHammond2 Nov 14, 2025
dd5f254
update outputs
RHammond2 Nov 14, 2025
3e230ec
fix runtime setup issues
RHammond2 Nov 14, 2025
f58bd76
resolving improper use of discrete/continuous connections
RHammond2 Nov 17, 2025
d52e48d
hook two connections to wisdem
ptrbortolotti Nov 18, 2025
d39fc04
enable ivc for user inputs and remove internally connected information
RHammond2 Nov 18, 2025
2c7bfe0
fix missing connections
RHammond2 Nov 18, 2025
4773436
fix inputs compilation errors
RHammond2 Nov 19, 2025
562f823
fix improper weather loading usage and simply read the data
RHammond2 Nov 19, 2025
2475406
fix improper weather loading usage and simply read the data
RHammond2 Nov 19, 2025
c7b4339
check for none before formatting actual inputs
RHammond2 Nov 19, 2025
d08427a
convert input lists to single values
RHammond2 Nov 19, 2025
3d85c24
fix capacity reference
RHammond2 Nov 19, 2025
0fb9b7f
fix bad output values
RHammond2 Nov 19, 2025
1a715b6
connect annual opex to financese
RHammond2 Nov 19, 2025
b235ce8
cleanup completed todos
RHammond2 Nov 19, 2025
6436fcc
remove years from user input
RHammond2 Nov 20, 2025
2ed9d3c
connect random seed and add missing connections
RHammond2 Nov 21, 2025
85e8918
merge develop and fix conflict
RHammond2 Nov 25, 2025
5af2eb1
add wombat documentation reference
RHammond2 Dec 4, 2025
e24a129
move wombat computation to be fore financese model is run
RHammond2 Dec 4, 2025
f83ec1d
add final outputs
RHammond2 Dec 4, 2025
80c6c1e
include wombat page in docs
RHammond2 Dec 4, 2025
08b6d78
add wombat input variables to input guide
RHammond2 Dec 4, 2025
af67221
run pre-commit on wombat api
RHammond2 Dec 4, 2025
03d4774
remove manually generated input docs
RHammond2 Dec 4, 2025
230961b
add land-based connections and shared inputs from offshore
RHammond2 Jan 5, 2026
bc1abd4
update scenario handling
RHammond2 Jan 5, 2026
bad8561
update error
RHammond2 Jan 5, 2026
3538e25
update pre-commit
RHammond2 Jan 5, 2026
1dbf672
add landbosse outputs for wombat usage and layout creation
RHammond2 Jan 6, 2026
5200258
enable wombat for all reference examples
RHammond2 Jan 6, 2026
d06c2d5
fix bad input connections and typos
RHammond2 Jan 6, 2026
21bef1c
fix missing connection for docstring build
RHammond2 Jan 7, 2026
08afda1
fix typos in docs
RHammond2 Jan 7, 2026
1a85733
udpate input and output variable guides
RHammond2 Jan 7, 2026
81dcdd6
add missing docs requirement
RHammond2 Jan 7, 2026
53024c8
bump wombat version for capacity check fix
RHammond2 Jan 7, 2026
541bf36
bump orbit for latest release
RHammond2 Jan 8, 2026
19af462
merge develop and fix conflicts
RHammond2 Jan 8, 2026
b69828f
update orbit release number after versioning patch
RHammond2 Jan 12, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions .pre-commit-config.yaml
Original file line number Diff line number Diff line change
@@ -1,21 +1,21 @@
repos:
- repo: https://github.com/PyCQA/isort
rev: 5.12.0
rev: 7.0.0
hooks:
- id: isort
name: isort
stages: [pre-commit]

- repo: https://github.com/psf/black
rev: stable
rev: 25.12.0
hooks:
- id: black
name: black
stages: [pre-commit]
language_version: python3

- repo: https://github.com/pre-commit/pre-commit-hooks
rev: v4.4.0
rev: v6.0.0
hooks:
- id: trailing-whitespace
- id: end-of-file-fixer
Expand Down
3,475 changes: 2,674 additions & 801 deletions docs/docstrings/input_variable_guide.csv

Large diffs are not rendered by default.

8,439 changes: 8,438 additions & 1 deletion docs/docstrings/input_variable_guide.json

Large diffs are not rendered by default.

5,843 changes: 3,007 additions & 2,836 deletions docs/docstrings/output_variable_guide.csv

Large diffs are not rendered by default.

9,714 changes: 9,713 additions & 1 deletion docs/docstrings/output_variable_guide.json

Large diffs are not rendered by default.

34 changes: 19 additions & 15 deletions docs/docstrings/update_variable_guides.py
Original file line number Diff line number Diff line change
@@ -1,10 +1,11 @@
#!/usr/bin/env python
import numpy as np
import os.path as osp

import numpy as np
from get_docstrings import get_all_docstrings

from wisdem import run_wisdem
from wisdem.commonse import fileIO
from get_docstrings import get_all_docstrings

# Get all docstrings from WISDEM files
parsed_dict = get_all_docstrings()
Expand All @@ -14,6 +15,8 @@
mydir = osp.join(examp_dir, "02_reference_turbines")
iea15_mono_geom = osp.join(mydir, "IEA-15-240-RWT.yaml")
iea3p4_geom = osp.join(mydir, "IEA-3p4-130-RWT.yaml")
iea15_float_modeling = osp.join(mydir, "modeling_options_iea15.yaml")
iea3p4_float_modeling = osp.join(mydir, "modeling_options_iea3p4.yaml")
rwt_modeling = osp.join(mydir, "modeling_options.yaml")
rwt_analysis = osp.join(mydir, "analysis_options.yaml")

Expand All @@ -27,10 +30,12 @@
rwt_jack_modeling = osp.join(mydir, "modeling_options_jacket.yaml")
rwt_jack_analysis = osp.join(mydir, "analysis_options_jacket.yaml")

iea15_mono_prob, model_dict, anal_dict = run_wisdem(iea15_mono_geom, rwt_modeling, rwt_analysis)
iea3p4_prob, _, _ = run_wisdem(iea3p4_geom , rwt_modeling, rwt_analysis)
iea15_float_prob, model_float_dict, anal_float_dict = run_wisdem(iea15_float_geom, rwt_float_modeling, rwt_float_analysis)
nrel_jack_prob, model_jack_dict, anal_jack_dict = run_wisdem(iea15_float_geom, rwt_float_modeling, rwt_float_analysis)
iea15_mono_prob, model_dict, anal_dict = run_wisdem(iea15_mono_geom, iea15_float_modeling, rwt_analysis)
iea3p4_prob, _, _ = run_wisdem(iea3p4_geom, iea3p4_float_modeling, rwt_analysis)
iea15_float_prob, model_float_dict, anal_float_dict = run_wisdem(
iea15_float_geom, rwt_float_modeling, rwt_float_analysis
)
nrel_jack_prob, model_jack_dict, anal_jack_dict = run_wisdem(iea15_float_geom, rwt_float_modeling, rwt_float_analysis)

# Extract inputs and outputs from the models
all_inputs = []
Expand All @@ -44,35 +49,34 @@
all_inputs.extend(input_k)
all_outputs.extend(output_k)


# Use Pandas for some data cleansing and writing to csv
def write_guide(in_dict, fname):
mydf = fileIO.variable_dict2df(in_dict)
mydf.rename(columns={"variables":"Variable",
"units":"Units",
"description":"Description"}, inplace=True)
mydf.rename(columns={"variables": "Variable", "units": "Units", "description": "Description"}, inplace=True)
mydf = mydf[["Variable", "Units", "Description"]]
mydf.set_index("Variable", inplace=True)
mydf = mydf[~mydf.index.duplicated(keep='first')]
mydf = mydf[~mydf.index.duplicated(keep="first")]
mydf.reset_index(inplace=True)

# Fold in docstrings
mynames = mydf["Variable"].to_list()
mydesc = mydf["Description"].to_list()
mydesc = mydf["Description"].to_list()
for k in range(len(mynames)):
ivar = mynames[k]
if ivar in parsed_dict:
idesc = parsed_dict[ivar]
mydesc[k] += "" if idesc is None else idesc
mydf["Description"] = mydesc
mydf['Units'] = mydf['Units'].replace(np.nan, '-')
mydf['Description'] = mydf['Description'].replace(np.nan,'None')
mydf["Units"] = mydf["Units"].replace(np.nan, "-")
mydf["Description"] = mydf["Description"].replace(np.nan, "None")

# Write everything out
mydf.to_csv(fname, index=False)
mydf.to_json(fname.replace('csv','json'))#, index=False)
mydf.to_json(fname.replace("csv", "json")) # , index=False)

return mydf


inputs_df = write_guide(all_inputs, "input_variable_guide.csv")
outputs_df = write_guide(all_outputs, "output_variable_guide.csv")

2 changes: 1 addition & 1 deletion docs/examples/02_refturb/tutorial.rst
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ Alternatively, you can create a summary WISDEM file that points to each file,

Where the contents of ``nrel5mw_driver.yaml`` are,

.. literalinclude:: /../examples/02_reference_turbines/nrel5mw_driver.yaml
.. literalinclude:: /../examples/02_reference_turbines/nrel5mw.yaml
:language: yaml

Note that to run the IEA Wind 15-MW reference wind turbine, simply substitute the file, ``IEA-15-240-RWT.yaml``, in as the geometry file. The ``modeling_options.yaml`` and ``analysis_options.yaml`` file can remain the same.
Expand Down
1 change: 1 addition & 0 deletions docs/modules.rst
Original file line number Diff line number Diff line change
Expand Up @@ -24,3 +24,4 @@ Module documentation
wisdem/pyframe3dd/index
wisdem/rotorse/index
wisdem/towerse/index
wisdem/wombat/index
2 changes: 1 addition & 1 deletion docs/wisdem/ccblade/documentation.rst
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,6 @@ A Polar object is meant to represent the variation in lift, drag, and pitching m

.. module:: wisdem.ccblade.Polar

.. autoclass:: wisdem.ccblae.Polar.Polar
.. autoclass:: wisdem.ccblade.Polar.Polar

.. _polar-class-label:
38 changes: 38 additions & 0 deletions docs/wisdem/wombat/index.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
WOMBAT
=====

Overview
--------

The land-based and offshore Windfarm Operations and Maintenance cost-Beneft Anaylysis Tool (WOMBAT) is a low fidelity,
process-based, discrete event simulation model to understand the cost, energy production, and downtime implications
of technological and maintenance-based changes to the operations and maintenance (O&M) phase of the wind life cycle.

WOMBAT allows for the modeling of arbitrarily simple or complex wind turbines, substations, cables, and hydrogen
electrolyzers through fixed-interval maintenance and Weibull-distributed failure events. Paired with the ability
to generically model many servicing equipment, WOMBAT enables users to model a plethora of wind O&M scenarios.

Documentation
-------------

WOMBAT maintains its own Github `repository <https://github.com/WISDEM/WOMBAT>`_ and
`documentation <https://wisdem.github.io/WOMBAT/>`_. WISDEM uses the default scenarios included in
the WOMBAT package, so annual updates for inflation and improved assumptions are automatically
applied to the the model.


Usage
_____

WOMBAT can be easily used as a standalone module through WISDEM or by installing from its own
`repository <https://github.com/WISDEM/WOMBAT>`_ as a separate project. For examples and
documentation on WOMBAT usage, please read the
`How To Use WOMBAT guide <https://wisdem.github.io/WOMBAT/examples/how_to.html>`_ and the linked
`API reference <https://wisdem.github.io/WOMBAT/API/index.html>`_ guides. When using WOMBAT through
WISDEM, use the following import:

>>> import wisdem.wombat

instead of

>>> import wombat
1 change: 1 addition & 0 deletions environment_dev.yml
Original file line number Diff line number Diff line change
Expand Up @@ -43,3 +43,4 @@ dependencies:
- sphinx_rtd_theme>=1.3
- sphinx-jsonschema
- sphinx-copybutton
- docstring-parser
14 changes: 14 additions & 0 deletions examples/02_reference_turbines/modeling_options_iea10.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -69,6 +69,20 @@ WISDEM:
tower_mass_cost_coeff: 2.9
controls_machine_rating_cost_coeff: 21.15
crane_cost: 12000.0
OpEx:
flag: True
workday_start: 7
workday_end: 19
equipment_dispatch_distance: 116
n_ctv: 3
maintenance_start: None
non_operational_start: None
non_operational_end: None
reduced_speed_start: None
reduced_speed_end: None
reduced_speed: 0
n_hlv: 1
random_seed: 42

Environment:
air_density: 1.225
Expand Down
23 changes: 22 additions & 1 deletion examples/02_reference_turbines/modeling_options_iea15.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ WISDEM:
distance_to_substation: 1.0
distance_to_interconnection: 8.5
interconnect_voltage: 130.
distance_to_site: 115.
distance_to_site: 115. # TODO: check on updated COWER asumptions
distance_to_landfall: 50.
port_cost_per_month: 2e6
review_cost: 0.0
Expand All @@ -35,6 +35,27 @@ WISDEM:
site_assessment_cost: 50e6
construction_plan_cost: 2.5e5
installation_plan_cost: 1e6
OpEx:
flag: True
workday_start: 7
workday_end: 19
equipment_dispatch_distance: 116
n_ctv: 3
maintenance_start: None
non_operational_start: None
non_operational_end: None
reduced_speed_start: None
reduced_speed_end: None
reduced_speed: 0
n_hlv: 1
random_seed: 42
# TODO: move to floating example?
# n_tugboat: 2
# port_workday_start: 6
# port_workday_end: 18
# n_port_crews: 2
# max_port_operations: 2
# repair_port_distance: 116
LCOE:
flag: True
wake_loss_factor: 0.15
Expand Down
14 changes: 14 additions & 0 deletions examples/02_reference_turbines/modeling_options_iea22.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -68,6 +68,20 @@ WISDEM:
reserve_margin_price: 120.0
capacity_credit: 0.0
benchmark_price: 0.071
OpEx:
flag: True
workday_start: 7
workday_end: 19
equipment_dispatch_distance: 116
n_ctv: 3
maintenance_start: None
non_operational_start: None
non_operational_end: None
reduced_speed_start: None
reduced_speed_end: None
reduced_speed: 0
n_hlv: 1
random_seed: 42

Environment:
air_density: 1.225
Expand Down
14 changes: 14 additions & 0 deletions examples/02_reference_turbines/modeling_options_iea3p4.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,20 @@ WISDEM:
tower_mass_cost_coeff: 2.9
controls_machine_rating_cost_coeff: 21.15
crane_cost: 12.e+3
OpEx:
flag: True
workday_start: 7
workday_end: 19
equipment_dispatch_distance: 116
n_ctv: 3
maintenance_start: None
non_operational_start: None
non_operational_end: None
reduced_speed_start: None
reduced_speed_end: None
reduced_speed: 0
n_hlv: 1
random_seed: 42
Environment:
air_density: 1.225
air_dyn_viscosity: 1.81e-5
Expand Down
14 changes: 14 additions & 0 deletions examples/02_reference_turbines/modeling_options_nrel5.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,20 @@ WISDEM:
tower_mass_cost_coeff: 2.9
controls_machine_rating_cost_coeff: 21.15
crane_cost: 12e3
OpEx:
flag: True
workday_start: 7
workday_end: 19
equipment_dispatch_distance: 0
n_ctv: 3
maintenance_start: None
non_operational_start: None
non_operational_end: None
reduced_speed_start: None
reduced_speed_end: None
reduced_speed: 0
n_hlv: 1
random_seed: 42
Environment:
air_density: 1.225
air_dyn_viscosity: 1.81e-5
Expand Down
4 changes: 3 additions & 1 deletion pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -56,14 +56,15 @@ dependencies = [
"numpy",
"openmdao",
"openpyxl",
"orbit-nrel>=1.2.1",
"orbit-nrel>=1.2.5",
"pandas",
"pydoe3",
"pyyaml",
"scipy",
"sortedcontainers",
"statsmodels>=0.14.5",
"windIO",
"wombat>=0.13.1"
]

# List additional groups of dependencies here (e.g. development
Expand All @@ -85,6 +86,7 @@ docs = [
"sphinx-jsonschema",
"sphinx-copybutton",
"numpydoc",
"docstring-parser",
]
opt = ["pyoptsparse","nlopt"]

Expand Down
Loading
Loading