diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index aca9372..87d8d50 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -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] @@ -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 }} @@ -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 diff --git a/.github/workflows/gh_pages.yml b/.github/workflows/gh_pages.yml index 80b6067..6a6f89a 100644 --- a/.github/workflows/gh_pages.yml +++ b/.github/workflows/gh_pages.yml @@ -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" diff --git a/.github/workflows/python-publish-test.yml b/.github/workflows/python-publish-test.yml index 7067618..73ae8ae 100644 --- a/.github/workflows/python-publish-test.yml +++ b/.github/workflows/python-publish-test.yml @@ -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: | diff --git a/.github/workflows/python-publish.yml b/.github/workflows/python-publish.yml index 862358a..a01595b 100644 --- a/.github/workflows/python-publish.yml +++ b/.github/workflows/python-publish.yml @@ -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: | diff --git a/README.md b/README.md index ec8348b..11f834a 100644 --- a/README.md +++ b/README.md @@ -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! @@ -14,15 +14,15 @@ 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 @@ -30,7 +30,7 @@ LandBOSSE is primarily developed with the support of the U.S. Department of Ener 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. @@ -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 diff --git a/docs/_config.yml b/docs/_config.yml index 0630f8c..a80cb01 100644 --- a/docs/_config.yml +++ b/docs/_config.yml @@ -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: diff --git a/docs/_toc.yml b/docs/_toc.yml index c2942f7..95a9f2e 100644 --- a/docs/_toc.yml +++ b/docs/_toc.yml @@ -4,6 +4,6 @@ format: jb-book root: intro chapters: -- file: api - file: example -- file: contributing \ No newline at end of file +- file: contributing +- file: api \ No newline at end of file diff --git a/docs/contributing.md b/docs/contributing.md index 1d8f2ed..a051e5d 100644 --- a/docs/contributing.md +++ b/docs/contributing.md @@ -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 diff --git a/docs/example.md b/docs/example.md index 4bb9e38..eb85fe2 100644 --- a/docs/example.md +++ b/docs/example.md @@ -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. @@ -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 @@ -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 | @@ -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 @@ -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. @@ -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. @@ -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$. @@ -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. @@ -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`. @@ -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 @@ -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 diff --git a/pyproject.toml b/pyproject.toml index ae057b7..64a86df 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -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", @@ -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