Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
20 commits
Select commit Hold shift + click to select a range
0238c73
Feature: Add $/yr option for fixed costs (#214)
RHammond2 Oct 9, 2025
0d7378a
Feature: Enable distance-based coordinates (#215)
RHammond2 Oct 10, 2025
15fbb5f
merge patch release and fix conflict
RHammond2 Oct 14, 2025
4ff0d07
Data: Incorporate Avanessava, 2025 results (#218)
RHammond2 Oct 15, 2025
a3ed5ad
fix merge conflict
RHammond2 Oct 17, 2025
abe60b4
Feature: Enable Parquet weather (#220)
RHammond2 Oct 17, 2025
efbf222
Fix: Ensure primary port distance is applied to the `PortConfig` when…
RHammond2 Oct 31, 2025
2fa6db9
Feature: Realistic port-based vessel mobilization and management (#222)
RHammond2 Oct 31, 2025
4fb0f7c
Feature: Simplify multi-tugboat defintion (#223)
RHammond2 Nov 3, 2025
5cce00b
Feature: Port use fee & monthly fee input (#224)
RHammond2 Nov 11, 2025
c0c8f82
Create library and analysis notebook for replicable O&M results (fixe…
dmulash Nov 18, 2025
7b91492
Fix: Implement missing data and type validations (#226)
RHammond2 Nov 20, 2025
2970fcd
fix pytest v9 compatibility issue (#229)
RHammond2 Nov 21, 2025
f888f32
Fix: error from PR #216: use layout with 4 turbines per string (#228)
dmulash Nov 25, 2025
11e6d8d
merge main and resolve conflicts
RHammond2 Dec 11, 2025
143f70c
Fix: Add more robust request checks for newly dispatched servicing eq…
RHammond2 Dec 17, 2025
8dd9237
Merge branch 'develop' of https://github.com/WISDEM/WOMBAT into develop
RHammond2 Dec 17, 2025
feb51c0
Feature: Experimental Land-Based Data and Documentation Updates (#232)
RHammond2 Dec 23, 2025
bf6dd67
Merge branch 'develop' of https://github.com/WISDEM/WOMBAT into develop
RHammond2 Dec 23, 2025
319447f
Release v0.13 Preparation (#233)
RHammond2 Dec 23, 2025
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
2 changes: 1 addition & 1 deletion .github/PULL_REQUEST_TEMPLATE.md
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,7 @@ Replace the below example with any added or modified files, and briefly describe

## Additional supporting information

<!--Fil out at least the versions listed below and those of any packages that may be related.-->
<!--Fill out at least the versions listed below and those of any packages that may be related.-->
Python version: 3.x
WOMBAT version (`wombat.__version__`): 0.x

Expand Down
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -156,7 +156,9 @@ ENV/
/library/code_comparison/iea26/outputs
/library/code_comparison/dinwoodie/results
/library/code_comparison/iea26/results
/library/code_comparison/avanessova_diss/results
/library/corewind/results
/library/default/results
/tests/library/results

# Text editors
Expand Down
87 changes: 86 additions & 1 deletion CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,90 @@
# CHANGELOG

## v0.13 - 23 December 2025

### Default Data Now Available

- For complete details, please see the
[default data section of the user guide](https://wisdem.github.io/WOMBAT/examples/index.html#default-data)
- `"default"` library is now made available with a validated fixed and floating offshore wind reference
case based on the 2025 Cost of Wind Energy Review (COWER), and an experimental land-based
reference data set based on a variety of incomplete sources in onshore O&M studies.
- A new example
([examples/default_data_demonstration.ipynb](https://github.com/WISDEM/WOMBAT/blob/develop/examples/default_data_demonstration.ipynb))
is available to see key statistics of each scenario.
- A new example
([examples/COWER_om_workflow.ipynb](https://github.com/WISDEM/WOMBAT/blob/develop/examples/COWER_om_workflow.ipynb))
is available to reproduce the current year's offshore COWER results.

### Tow-To-Port Improvements

- Creation of the `PortManager` to manage the tugboats and other port-managed vessels.
- Tugboats are now mobilized when there are no currently available tugboats, including when another
tugboat might be busy towing or returning from site.
- Tugboats accumulate downtime costs while at port and unused.
- Ensures that a nonexistent `site_distance` passed to the `PortConfig` is still set from the
primary configuration's `port_distance`.
- Fixes a bug where the towing costs are logged twice, and double counting the values in the results.
- Fixes a bug in `Metrics.equipment_labor_cost_breakdown()` filters out some costs because a
filtering column has a NaN value. This primarily occurred in the towing operations.
- Fixes a bug in `Metrics.equipment_labor_cost_breakdown()` where the mooring and unmooring
processes were entirely removed from the cost breakdown.
- Adds the `monthly_fee` as an alternative to the `annual_fee` to the port configuration inputs.
- Adds the `daily_use_fee` for use when turbine(s) are at the port.

### Convenience Upgrades

- Adds the `units` input to `FixedCosts` that allows for costs to be defined on per kW
basis (default, "\$/kw/yr") or as a set cost ("\$/yr").
- Adds distance-based coordinates in meters that can be used by providing
`layout_coords: distance` in the primary configuration file. The default is "wgs-84
to maintain compatibility with existing workflows.
- Moves the standard weather loading routines to the `wombat/core/library.py, which includes the
following:
- Ability to read pre-processed Parquet data files for smaller file sizes and efficient I/O.
- `load_weather()` automatically reads the Parquet data or reads and transforms the CSV data.
- `read_weather_csv()` reads and converts the datetime column from standard datetime formats.
- `format_weather()` converts a resultant DataFrame from `read_weather_csv()` into a
WOMBAT-compatible weather profile.
- `Port` and `ServiceEquipment` now have a `name` attribute that allows for quicker access to the
highly used `.settings.name` attribute.
- The COREWIND Morro Bay Port has been updated to a 139 km `site_distance`, and the associated
tugboats have charter periods of 10 days.
- Tugboats can be defined in the `vessels` section of the primary configuration and be configured
as copies of each other similar to the vessels in the primary configuration, as seen below.

```yaml
...
tugboats:
- - tugboat.yaml
- 2
...
```

### Minor Improvements and Bug Fixes

- Adds the configuration data and analysis code used in the code comparison study,
published at http://dx.doi.org/10.7488/era/5854.
- Adds an internal validation routine for the wind farm layout file to avoid uncaught layout
creation errors.
- Add more robust type handling and checking for `format_weather()`
- Allow for a `FixedCosts` `dict` to be passed directly to `Metrics` without loading additional data.
- Fixes a test collection error introduced in Pytest v9.
- Updates the bibliography style in the documentation.
- Fixes a previously rare bug where an ongoing repair at a system can cause a queued
servicing equipment dispatching to be canceled, and derail the remainder of the
simulation. Servicing equipment now check for the existence of any matching requests
instead of a failed repair attempt prior to canceling its dispatching.
- Servicing equipment now check for new requests every two hours rather than waiting
for the next shift to avoid previously rare scenarios where requests go unaddressed
during a chartering.

## v0.12.3 - 1 December 2025

- Converts `PosixPath` objects to `str` before passing to pytest's `args` during custom unit and
regression test collection.
- Pins the maximum version of Jupyter-Book to be "<2" until the documentation has been migrated.

## v0.12.3 - 1 December 2025

- Converts `PosixPath` objects to `str` before passing to pytest's `args` during custom unit and
Expand Down Expand Up @@ -33,7 +118,7 @@
- Fixes a bug primarily impacting tow-to-port scenarios where individual maintenance and failure
models are not being reset upon either replacement or following a tow-to-port repair under
certain conditions. This allows for these additional processes to be perpetuated throughout the lifecycle
of the simulation while succumbing to the same inital flaw, compounding the number of erroneously
of the simulation while succumbing to the same initial flaw, compounding the number of erroneously
additional events. The issue is resolved by the following:
1. Multiple subassemblies can now be passed to a `Cable` or `System` object during an
interruption, allowing for simpler logic handling.
Expand Down
28 changes: 13 additions & 15 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -16,11 +16,11 @@ distributed, land-based, and offshore windfarms using a discrete event simultaio
framework.

WOMBAT is written around the [`SimPy`](https://gitlab.com/team-simpy/simpy) discrete
event simulation framework. Additionally, this is supported using a flexible and modular
event simulation framework. Additionally, this is supported using a flexible
object-oriented code base, which enables the modeling of arbitrarily large (or small)
windfarms with as many or as few failure and maintenance tasks that can be encoded.

Please note that this is still heavily under development, so you may find some functionality
Please note that this is still under development, so you may find some functionality
to be incomplete at the current moment, but rest assured the functionality is expanding.
With that said, it would be greatly appreciated for issues or PRs to be submitted for
any improvements at all, from fixing typos (guaranteed to be a few) to features to
Expand Down Expand Up @@ -66,12 +66,11 @@ folder, but here are a few highlights:
`validation exercise <https://github.com/WISDEM/WOMBAT/blob/main/examples/iea_26_validation.ipynb>`_.
* Presentations: `slides <https://github.com/WISDEM/WOMBAT/blob/main/presentation_material/>`_.


## Setup

### Requirements

* Python 3.11 through 3.13. Python 3.14 will be compatible once PyArrow 22.0 is released.
* Python 3.11+

### Environment Setup

Expand Down Expand Up @@ -117,10 +116,7 @@ Install it directly into an activated virtual environment:

```console
git clone https://github.com/WISDEM/WOMBAT.git
cd wombat
python setup.py install

# Alternatively:
cd WOMBAT
pip install .
```

Expand Down Expand Up @@ -187,16 +183,16 @@ Basic pre-commit issues that users might encounter and their remedies:

```console
git clone https://github.com/WISDEM/WOMBAT.git
cd wombat
cd WOMBAT
pip install -e '.[docs]'
```

Build the site

> **Note**
> You may want to change the "execute_notebooks" parameter in the `docs/_config.yaml`
> file to "off" unless you're updating the coded examples, or they will be run every
> time you build the site.
> file to "off" unless you're updating the coded examples, or they will run every time
> there is an update to the base files.

```console
jupyter-book build docs
Expand All @@ -216,11 +212,11 @@ pip install -e '.[all]'

Standard dependencies:

* attrs>=21
* attrs>=24.1
* numpy>=1.21
* scipy>=1.8
* pandas>=2
* polars>=0.17
* polars>=1.33.1
* pyarrow>=10
* jupyterlab>=3
* simpy>=4.0.1
Expand All @@ -232,20 +228,22 @@ Standard dependencies:
* types-typed-ast>=1.5
* types-PyYAML>=6
* types-python-dateutil>=2.8
* python-dateutil
* "polars-lts-cpu; sys_platform == 'darwin'",

Optional "dev" dependencies:

* pre-commit>=2.20
* isort>=5.10
* pytest>=7
* pytest-cov>=4
* mypy==0.991
* mypy
* ruff>=0.2
* pyupgrade

Optional "docs" dependencies:

* jupyter-book>=0.15
* jupyter-book>1,<2
* myst-nb>=0.16
* myst-parser>=0.17
* linkify-it-py>=2
Expand Down
13 changes: 10 additions & 3 deletions docs/API/core.md
Original file line number Diff line number Diff line change
Expand Up @@ -51,14 +51,21 @@ how each of the APIs are powered to enable the full flexibility of modeling.

```{eval-rst}
.. automodule:: wombat.core.port
:exclude-members: Port
:exclude-members: Port, PortManager

.. autoclass:: wombat.core.port.PortManager
:members: register_tugboat, update_charter_map, manage_vessels, dispatch_vessel,
return_vessel
:inherited-members:
:undoc-members:
:exclude-members:

.. autoclass:: wombat.core.port.Port
:members: transfer_requests_from_manager, repair_single, run_repairs,
wait_until_next_shift, run_tow_to_port, run_unscheduled_in_situ
:inherited-members:
:undoc-members:
:exclude-members: env, windfarm, manager, settings, requests_serviced, turbine_manager,
crew_manager, tugboat_manager, active_repairs, GetQueue, PutQueue, capacity, get,
get_queue, items, put, put_queue
crew_manager, service_equipment_manager, active_repairs, GetQueue, PutQueue,
capacity, get, get_queue, items, put, put_queue
```
8 changes: 7 additions & 1 deletion docs/API/utilities.md
Original file line number Diff line number Diff line change
@@ -1,11 +1,17 @@
# Helpers and Plotting

(converting-and-structuring)=
## Importing and Converting From Old Versions
## Importing and Converting Data

```{eval-rst}
.. autofunction:: wombat.core.library.load_yaml

.. autofunction:: wombat.core.library.load_weather

.. autofunction:: wombat.core.library.read_weather_csv

.. autofunction:: wombat.core.library.format_weather

.. autofunction:: wombat.core.library.create_library_structure

.. autofunction:: wombat.core.library.convert_failure_data
Expand Down
12 changes: 5 additions & 7 deletions docs/_config.yml
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,10 @@ latex:

# Add a bibtex file so that we can create citations
bibtex_bibfiles:
- references.bib
- refs.bib

bibliography:
- refs.bib

# Information about where the book exists on the web
repository:
Expand Down Expand Up @@ -79,6 +82,7 @@ sphinx:
- sphinxcontrib.autoyaml
- sphinxcontrib.bibtex
config:
bibtex_bibfiles: ["refs.bib"]
html_theme: sphinx_book_theme
html_theme_options:
icon_links: [
Expand All @@ -93,12 +97,6 @@ sphinx:
icon: "https://img.shields.io/pypi/v/WOMBAT",
type: url,
},
{
name: PyPI downloads,
url: "https://pypi.org/project/WOMBAT/",
icon: "https://img.shields.io/pypi/dm/WOMBAT",
type: url,
},
{
name: Launch Binder,
url: "https://mybinder.org/v2/gh/WISDEM/WOMBAT/main?filepath=examples",
Expand Down
1 change: 1 addition & 0 deletions docs/_toc.yml
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ parts:
- file: examples/how_to
- file: examples/strategy_demonstration
- file: examples/metrics_demonstration
- file: examples/default_data_demonstration
- file: examples/examples_reference
- file: API/index
sections:
Expand Down
Loading