Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
17 changes: 6 additions & 11 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
name: CI_LandBOSSE
name: CI Tests

# We run CI on push commits and pull requests on all branches
on: [push, pull_request]
Expand All @@ -9,12 +9,12 @@ jobs:
runs-on: ubuntu-latest
strategy:
matrix:
python-version: ["3.9", "3.10", "3.11", "3.12"]
python-version: ["3.10", "3.11", "3.12", "3.13", "3.14"]

steps:
- uses: actions/checkout@v4
- uses: actions/checkout@v6
- name: Set up Miniconda Python ${{ matrix.python-version }}
uses: conda-incubator/setup-miniconda@v3
uses: conda-incubator/setup-miniconda@v4
with:
auto-update-conda: true
python-version: ${{ matrix.python-version }}
Expand All @@ -23,14 +23,9 @@ jobs:
- name: Install Dependencies
run: |
python -m pip install --upgrade pip
python -m pip install pytest pandas numpy scipy xlsxwriter openpyxl openmdao
pip install -e .[develop]

- name: Pip Install LandBOSSE
run: |
pip install -e . -v

# Run tests
- name: Pip Run pytest
- name: Run Tests
run: |
pytest landbosse/tests

2 changes: 1 addition & 1 deletion .github/workflows/gh_pages.yml
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ jobs:
jupyter-book build docs

- name: Upload artifact
uses: actions/upload-pages-artifact@v4
uses: actions/upload-pages-artifact@v5
with:
path: "docs/_build/html"

Expand Down
6 changes: 3 additions & 3 deletions .github/workflows/python-publish-test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -20,12 +20,12 @@ jobs:
id-token: write

steps:
- uses: actions/checkout@v4
- uses: actions/checkout@v6

- name: Set up Python
uses: actions/setup-python@v5
uses: actions/setup-python@v6
with:
python-version: '3.11'
python-version: '3.13'

- name: Build package
run: |
Expand Down
6 changes: 3 additions & 3 deletions .github/workflows/python-publish.yml
Original file line number Diff line number Diff line change
Expand Up @@ -19,12 +19,12 @@ jobs:
id-token: write

steps:
- uses: actions/checkout@v4
- uses: actions/checkout@v6

- name: Set up Python
uses: actions/setup-python@v5
uses: actions/setup-python@v6
with:
python-version: '3.11'
python-version: '3.13'

- name: Build package
run: |
Expand Down
18 changes: 9 additions & 9 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
[![PyPI version](https://badge.fury.io/py/NREL-landbosse.svg)](https://badge.fury.io/py/NREL-landbosse)
[![Apache 2.0](https://img.shields.io/badge/License-Apache%202.0-blue.svg)](https://opensource.org/licenses/Apache-2.0)
[![image](https://img.shields.io/pypi/pyversions/NREL-landbosse.svg)](https://pypi.python.org/pypi/NREL-landbosse)
[![Jupyter Book](https://jupyterbook.org/badge.svg)](https://nlrwindsystems.github.io/LandBOSSE)
[![Jupyter Book Badge](https://raw.githubusercontent.com/jupyter-book/jupyter-book/next/docs/media/images/badge.svg)](nlrwindsystems.github.io/LandBOSSE)

## Welcome to LandBOSSE!

Expand All @@ -14,23 +14,23 @@ The methods used to develop this model (specifically, LandBOSSE Version 2.1.0) a
Eberle, Annika, Owen Roberts, Alicia Key, Parangat Bhaskar, and Katherine Dykes.
2019. NREL’s Balance-of-System Cost Model for Land-Based Wind. Golden, CO:
National Renewable Energy Laboratory. NREL/TP-6A20-72201.
https://www.nrel.gov/docs/fy19osti/72201.pdf.
https://www.nlr.gov/docs/fy19osti/72201.pdf.

## Part of the WETO Stack

LandBOSSE is primarily developed with the support of the U.S. Department of Energy and is part of the [WETO Software Stack](https://nrel.github.io/WETOStack). For more information and other integrated modeling software, see:
- [Portfolio Overview](https://nrel.github.io/WETOStack/portfolio_analysis/overview.html)
- [Entry Guide](https://nrel.github.io/WETOStack/_static/entry_guide/index.html)
- [Techno-Economic Modeling Workshop](https://nrel.github.io/WETOStack/workshops/user_workshops_2024.html#tea-and-cost-modeling)
- [Systems Engineering Workshop](https://nrel.github.io/WETOStack/workshops/user_workshops_2024.html#systems-engineering)
LandBOSSE is primarily developed with the support of the U.S. Department of Energy and is part of the [WETO Software Stack](https://natlabrockies.github.io/WETOStack). For more information and other integrated modeling software, see:
- [Portfolio Overview](https://natlabrockies.github.io/WETOStack/portfolio_analysis/overview.html)
- [Entry Guide](https://natlabrockies.github.io/WETOStack/_static/entry_guide/index.html)
- [Techno-Economic Modeling Workshop](https://natlabrockies.github.io/WETOStack/workshops/user_workshops_2024.html#tea-and-cost-modeling)
- [Systems Engineering Workshop](https://natlabrockies.github.io/WETOStack/workshops/user_workshops_2024.html#systems-engineering)

## User Guide

### Installation

For any installation, users should use a virtual environment. We recommend Miniconda or Anaconda,
but any supporting PyPI or source installations are possible. Here, we'll work with conda for
compatibility with other NREL tools.
compatibility with other NLR tools.

In the below, you can replace the name "landbosse" with any name you choose, and the Python version
can be any that you prefer as long as it's supported by LandBOSSE.
Expand Down Expand Up @@ -65,7 +65,7 @@ pip install NREL-landbosse

### First time running the model

At its most basic, the following setup is required, though the provided input data in `project_inpute_template`
At its most basic, the following setup is required, though the provided input data in `project_input_template`
can be used to test out the model and view results before diving into configuring custom scenarios.

1. Create an input and output folder for LandBOSSE to access. If you are using a source
Expand Down
19 changes: 0 additions & 19 deletions docs/_config.yml
Original file line number Diff line number Diff line change
Expand Up @@ -56,25 +56,6 @@ sphinx:
show_toc_level: 2
repository_url: "https://github.com/NLRWindSystems/LandBOSSE"
repository_branch: main
# icon_links: [
# {
# name: GitHub,
# url: "https://github.com/NREL/WAVES",
# icon: fa-brands fa-github,
# },
# {
# name: PyPI version,
# url: "https://pypi.org/project/WAVES/",
# icon: "https://img.shields.io/pypi/v/WAVES?link=https%3A%2F%2Fpypi.org%2Fproject%2FWAVES%2F",
# type: url,
# },
# {
# name: Binder,
# url: "https://mybinder.org/v2/gh/NREL/WAVES/main?filepath=examples",
# icon: "https://mybinder.org/badge_logo.svg",
# type: url,
# },
# ]
language: 'python'
autosummary_generate: true
autodoc_default_options:
Expand Down
4 changes: 2 additions & 2 deletions docs/_toc.yml
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,6 @@
format: jb-book
root: intro
chapters:
- file: api
- file: example
- file: contributing
- file: contributing
- file: api
2 changes: 1 addition & 1 deletion docs/contributing.md
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@
## Testing the Code

Run LandBOSSE's testing suite using the following command. Please note the tests are not
particularly robust at this time, so passing tests after modifying the codeshould be viewed with
particularly robust at this time, so passing tests after modifying the code should be viewed with
caution.

```bash
Expand Down
22 changes: 11 additions & 11 deletions docs/example.md
Original file line number Diff line number Diff line change
Expand Up @@ -113,7 +113,7 @@ Lift height m

Surface area sq m
: Total surface area, in $m^2$, of a cross-section of the component. This will be used for
calculating thefoundational load.
calculating the foundational load.

Coeff drag
: Coefficient of drag. This will be used to understand the effective mass while lifting the component.
Expand All @@ -138,7 +138,7 @@ Offload hook height m
Offload cycle time hrs
: Amount of time (in hours) required to detach the component from the crane.

Multplier drag rotor
Multiplier drag rotor
: Multiplier for accounting for the additional drag of the rotor for computing the foundation load.
This should only apply to the nacelle and blades

Expand All @@ -147,7 +147,7 @@ Multiplier tower drag

The following data are used for the GE 1.5 MW public example (`ge15_public.xlsx`).

| Component | Mass tonne | Lift height m | Surface area sq m | Coeff drag | Coeff drag (installed) | Section height m | Lever arm m | Cycle time installation hrs | Offload hook height m | Offload cycle time hrs | Multplier drag rotor | Multiplier tower drag |
| Component | Mass tonne | Lift height m | Surface area sq m | Coeff drag | Coeff drag (installed) | Section height m | Lever arm m | Cycle time installation hrs | Offload hook height m | Offload cycle time hrs | Multiplier drag rotor | Multiplier tower drag |
|-------------------|--------------|-----------------|---------------------|--------------|--------------------------|--------------------|---------------|-------------------------------|-------------------------|--------------------------|------------------------|-------------------------|
| Nacelle GE 1.5SLE | 50 | 90 | 33 | 0.8 | 0.8 | 0 | 80 | 1.5 | 6 | 0.5 | 1 | 0 |
| Hub | 15.4 | 90 | 11.3 | 1.1 | 1.1 | 0 | 80 | 1 | 6 | 0.5 | 0 | 0 |
Expand Down Expand Up @@ -204,7 +204,7 @@ category. The optimal equipment will be chosen based on a comparison of the equi
capabilities and the components being lifted.

Equipment ID
: Unique identififer for the equipment group.
: Unique identifier for the equipment group.

Operation
: One of "Top", "Base", or "Offload" to indicate what grouping of operations the equipment can
Expand All @@ -214,7 +214,7 @@ Equipment name
: Name of the equipment in the equipment group.

Crane capacity tonne
: Maximum capacityof the crane, in metric tonnes.
: Maximum capacity of the crane, in metric tonnes.

Number of equipment
: Number of the equipment used during the operation.
Expand Down Expand Up @@ -259,7 +259,7 @@ Hoist speed m per min
: Crane lifting rate, in $m/min$.

Crew type ID
: Unique identifer for the type of crew required for the operation.
: Unique identifier for the type of crew required for the operation.

Equipment ID
: Unique identifier matching with the `equip` sheet.
Expand All @@ -272,7 +272,7 @@ Breakdown time hr
lift location.

Max wind speed m per s
: Maximum allowable windspeed allowed during operations, in $m/s$.
: Maximum allowable wind speed allowed during operations, in $m/s$.

Hub height m
: Maximum lift height for the crane, in $m$.
Expand Down Expand Up @@ -474,7 +474,7 @@ Rate USD per unit
: Cost per unit, in $USD/unit$

Units
: Measurment units.
: Measurement units.

Daily output
: Daily output of the operation.
Expand Down Expand Up @@ -580,7 +580,7 @@ has been created and LandBOSSE has been installed.
environment:

```bash
conda activate landbose
conda activate landbosse
```

6. Run all validLandBOSSE, where `-i` can be substituted for `--input`, and `-o` for `--output`.
Expand All @@ -604,7 +604,7 @@ has been created and LandBOSSE has been installed.

The below code snippet demonstrates how to convert the project list file for a given project, such
as the "foundation_validation_ge15" project found in `project_list_simplified.xlsx` that is
expemplified throughout this walkthrough. Please read the in-code comments for further context
exemplified throughout this walkthrough. Please read the in-code comments for further context
about what steps are being taken and why.

```python
Expand Down Expand Up @@ -714,7 +714,7 @@ inputs["data_tables"] = pd.read_excel(
lb.run()
```

4. Once the above code (or similar) is successfully run, the `result` object is created and attched
4. Once the above code (or similar) is successfully run, the `result` object is created and attached
to the `LandBOSSERunner`. For complete details please see the `LandBOSSEResult` API documentation.
The `lb.result` (using the above examples naming convention for the runner object) contains the
following attributes as separate Pandas Series or DataFrames, and can be saved to CSV or one
Expand Down
47 changes: 8 additions & 39 deletions pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -11,27 +11,16 @@ requires-python = ">=3.10"
license = { text = "Apache-2.0" }
keywords = ["wind", "turbine", "mdao", "design", "optimization"]
authors = [
{ name = "NREL WISDEM Team", email = "systems.engineering@nrel.gov" },
{ name = "NLR WISDEM Team", email = "systems.engineering@nlr.gov" },
]
maintainers = [
{ name = "NREL WISDEM Team", email = "systems.engineering@nrel.gov" },
{ name = "NLR WISDEM Team", email = "systems.engineering@nlr.gov" },
]
classifiers = [ # Optional
# How mature is this project? Common values are
# 3 - Alpha
# 4 - Beta
# 5 - Production/Stable
classifiers = [
"Development Status :: 4 - Beta",

# Indicate who your project is intended for
"Intended Audience :: Science/Research",
"Topic :: Scientific/Engineering",

"License :: OSI Approved :: Apache Software License",

# Specify the Python versions you support here. In particular, ensure
# that you indicate you support Python 3. These classifiers are *not*
# checked by "pip install". See instead "python_requires" below.
"Programming Language :: Python :: 3",
"Programming Language :: Python :: 3.10",
"Programming Language :: Python :: 3.11",
Expand All @@ -43,41 +32,21 @@ classifiers = [ # Optional
"Programming Language :: Fortran",
]

dependencies = ['numpy', 'openpyxl', 'pandas', 'scipy', 'xlsxwriter']
dependencies = ['numpy', 'openpyxl', 'pandas', 'scipy', 'xlsxwriter', 'openmdao']

# List additional groups of dependencies here (e.g. development
# dependencies). Users will be able to install these using the "extras"
# syntax, for example:
#
# $ pip install sampleproject[dev]
#
# Similar to `dependencies` above, these must be valid existing
# projects.
[project.optional-dependencies] # Optional
test = ["coveralls", "pytest"]
docs = ["jupyter-book==1.*", "myst-parser", "sphinxcontrib-napoleon"]
develop = ["NREL-landbosse[test, docs]"]

# List URLs that are relevant to your project
#
# This field corresponds to the "Project-URL" and "Home-Page" metadata fields:
# https://packaging.python.org/specifications/core-metadata/#project-url-multiple-use
# https://packaging.python.org/specifications/core-metadata/#home-page-optional
#
# Examples listed include a pattern for specifying where the package tracks
# issues, where the source is hosted, where to say thanks to the package
# maintainers, and where to support the project financially. The key is
# what's used to render the link text on PyPI.
[project.urls] # Optional
"Homepage" = "https://github.com/WISDEM/LandBOSSE"
#"Documentation" = "https://wisdem.readthedocs.io"
"Project" = "https://www.nrel.gov/wind/systems-engineering.html"
[project.urls]
"Homepage" = "https://github.com/NLRWIndSystems/LandBOSSE"
"Documentation" = "https://nlrwindsystems.readthedocs.io"
"Project" = "https://www.nlr.gov/wind/systems-engineering.html"

#[project.scripts]
# What to do about main.py program

# This is configuration specific to the `setuptools` build backend.
# If you are using a different build backend, you will need to change this.
[tool.setuptools]
include-package-data = true

Expand Down