Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Alpha release #31

Merged
merged 154 commits into from
Dec 30, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
154 commits
Select commit Hold shift + click to select a range
24c354c
readme/other stuff update. we can call #1 done.
cfrontin Oct 3, 2024
64748a0
initial black reformat
cfrontin Oct 3, 2024
483a08d
work towards issue #12. needs improvement.
cfrontin Oct 3, 2024
58bcffb
silly fix
cfrontin Oct 3, 2024
6562b11
updated the wind query object. working on issue #8.
cfrontin Oct 4, 2024
05851bd
more progress glacial
cfrontin Oct 4, 2024
2291759
some fixes to wind query representation
cfrontin Oct 4, 2024
e99c1aa
making some progress on issue #5, got a FLORIS power computation exam…
cfrontin Oct 7, 2024
71033aa
improved documentation of the aero kernel templates
cfrontin Oct 7, 2024
5739560
updated TI computations
cfrontin Oct 7, 2024
f6a270a
Forgot to actually use IEC TI. now tested and bugfixed.
cfrontin Oct 7, 2024
5025506
black reformat
cfrontin Oct 7, 2024
135eee9
better organization of template/super classes
cfrontin Oct 7, 2024
4de3761
black reformat
cfrontin Oct 7, 2024
c67b60a
floris power component seems to be working well. progress towards #5,…
cfrontin Oct 8, 2024
2a4fa78
added grid farm layout, some refactoring
cfrontin Oct 8, 2024
24447b3
testing for layout component
cfrontin Oct 9, 2024
53b79ad
black reformat. should complete #15.
cfrontin Oct 9, 2024
31efbac
attempting to add CI/CD
cfrontin Oct 9, 2024
67a892c
added actual install of the package for coverage testing ... progress…
cfrontin Oct 9, 2024
794c520
add coverage limit
cfrontin Oct 9, 2024
366ff50
remove coverage uploads
cfrontin Oct 9, 2024
d18993d
attempt bugfix for coverage
cfrontin Oct 9, 2024
45b8ed7
adding init files to fix coverage misses
cfrontin Oct 9, 2024
9bd1eda
added init files
cfrontin Oct 9, 2024
53f4307
updated test/unit structure
cfrontin Oct 9, 2024
09aa416
continuing to improve coverage
cfrontin Oct 9, 2024
d7e9da0
update a bunch of testing
cfrontin Oct 9, 2024
fe45e58
attempt fix on floris location for unit testing
cfrontin Oct 9, 2024
684e92b
attempt fix on floris location for unit testing 2
cfrontin Oct 9, 2024
55dfafe
attempt fix on floris location for unit testing 3
cfrontin Oct 9, 2024
31c5a64
added testing hooks to clear out pytest results
cfrontin Oct 9, 2024
5214d7d
add Black checking
cfrontin Oct 9, 2024
c307544
black reformat
cfrontin Oct 9, 2024
710b9ad
added pyrite testing to floris module
cfrontin Oct 9, 2024
98c7527
pyrite tol adjust
cfrontin Oct 9, 2024
ed73304
pyrite tol adjust 2
cfrontin Oct 9, 2024
e53c624
pyrite tol adjust 3, try sum
cfrontin Oct 10, 2024
5bcb890
pyrite tol adjust 4, try better size
cfrontin Oct 10, 2024
42a4f50
pyrite tol adjust 5, try better size again
cfrontin Oct 10, 2024
618a4b9
tol adjust
cfrontin Oct 10, 2024
d343a8f
black reformat, and we can call #6 closed.
cfrontin Oct 10, 2024
1d950b6
working prototype of design-to-LCOE
cfrontin Oct 10, 2024
aefdbb3
added WISDEM cost components. progress on issue #17.
cfrontin Oct 11, 2024
93a64d6
updated example case, restructured data use for construction of ard O…
cfrontin Oct 14, 2024
2deb4b3
significant progress toward #7
cfrontin Oct 14, 2024
bc2599e
can't figure out busted gridfarm compass area computation
cfrontin Oct 15, 2024
94230e7
added full layout land use calculations
cfrontin Oct 15, 2024
6c3fb7d
added layback to full farm geometry
cfrontin Oct 15, 2024
02b8a66
black reformat and derivative fix
cfrontin Oct 15, 2024
72b5214
Add installation instructions to README
rafmudaf Oct 30, 2024
d846a05
Clean up project configuration
rafmudaf Oct 31, 2024
c82fcee
Delete requirements.txt file
rafmudaf Oct 31, 2024
db90ef0
got landuse working, passing tests. needs better derivatives
cfrontin Nov 4, 2024
23f63a4
black reformatting
cfrontin Nov 4, 2024
4ab9a34
pre-parternity leave progress
cfrontin Nov 15, 2024
974bfd5
black reformat...
cfrontin Nov 15, 2024
aa1e913
Change repository organization name
rafmudaf Nov 22, 2024
eb01aab
Add basic Jupyter Book documentation project
rafmudaf Nov 22, 2024
411b184
Rename software to Ard
rafmudaf Dec 5, 2024
4b36561
fixed up asset naming
cfrontin Dec 9, 2024
ee9f5f8
Create a turbine dict, write to file on command
rafmudaf Nov 27, 2024
c5f2a64
Start FLORIS with defaults and change as needed
rafmudaf Nov 27, 2024
d88bcf6
Update reference wind height on turbine change
rafmudaf Dec 9, 2024
1ed5469
improved warning catching
cfrontin Dec 10, 2024
4ab8dfe
fix pytest issue
cfrontin Dec 10, 2024
f71e265
updated example directory structure to move examples data to shared l…
cfrontin Dec 10, 2024
536fcd9
pin wisdem due to interface changes
cfrontin Dec 10, 2024
9ae8acc
pyproject typo fix
cfrontin Dec 10, 2024
2d6e3d6
black reformat
cfrontin Dec 10, 2024
cf5fd13
Merge branch 'develop' into floris_api
rafmudaf Dec 10, 2024
f2c8fa9
Clean up examples and tests
rafmudaf Dec 10, 2024
1b19549
Require FLORIS > v4.2.1
rafmudaf Dec 10, 2024
717b0d4
update example to be working
cfrontin Dec 10, 2024
0076361
Use a fork of FLORIS until features are merged
rafmudaf Dec 10, 2024
22d8785
Remove hard-coded FLORIS input
rafmudaf Dec 10, 2024
8bcc42c
Merge branch 'develop' into floris_api
rafmudaf Dec 10, 2024
32c6c11
Add default wind shear if not user-provided
rafmudaf Dec 10, 2024
97956b2
Black formatting
rafmudaf Dec 10, 2024
b5f9b36
Merge pull request #24 from WISDEM/floris_api
cfrontin Dec 10, 2024
5ce3b27
updated lcoe example to run cobyla
cfrontin Dec 10, 2024
3fb4ab1
Merge branch 'develop' of github.com:WISDEM/Ard into develop
cfrontin Dec 10, 2024
90238b5
Add missing wrg file
rafmudaf Dec 10, 2024
aed9341
refactor mostly working
cfrontin Dec 11, 2024
9133ad0
update examples to conform
cfrontin Dec 11, 2024
ef900dc
black reformat
cfrontin Dec 11, 2024
3998791
fix unit test
cfrontin Dec 11, 2024
cde8b90
make turbine spec file update its own filename automaticcaly so the p…
cfrontin Dec 11, 2024
d895695
updated turbine spec loading
cfrontin Dec 11, 2024
f35b03b
black reformat
cfrontin Dec 11, 2024
5e026f2
rename util function
cfrontin Dec 11, 2024
148efe1
Revert "black reformat"
cfrontin Dec 11, 2024
4c8cdda
black reformat 2: electric boogaloo
cfrontin Dec 11, 2024
43fe6d6
everything working with a solution that's fine
cfrontin Dec 11, 2024
ba33f51
black reformat
cfrontin Dec 11, 2024
4caae3f
cleanup debug statements in operational code
cfrontin Dec 11, 2024
a95f437
cleaner pathlib use
cfrontin Dec 11, 2024
9100532
Merge pull request #26 from WISDEM/config_file_refactor
cfrontin Dec 11, 2024
28bf586
added basic system testing and improved pyrite testing framework
cfrontin Dec 12, 2024
de84c49
black reformat
cfrontin Dec 12, 2024
fab5d28
Update python-tests-unit.yml
cfrontin Dec 12, 2024
b0affd9
add pyrite testing for LCOE stack system test
cfrontin Dec 12, 2024
7e16a41
black reformat
cfrontin Dec 12, 2024
e9e560a
fix testing setup
cfrontin Dec 12, 2024
3e4c9ed
Merge pull request #28 from WISDEM/system_testing
cfrontin Dec 17, 2024
ca07d9f
removes extraneous testing and closes #10
cfrontin Dec 17, 2024
2b71717
updated LCOE demo and analysis with full documentation and cleanup. c…
cfrontin Dec 20, 2024
723ea6b
first black reformat on some notebooks
cfrontin Dec 20, 2024
34014d4
full numpy doc of ard/layout components.
cfrontin Dec 20, 2024
df82178
black reformat of doc changes
cfrontin Dec 20, 2024
0ec0fd3
documentation of ard/wind_query.py WindQuery class, contributing to #…
cfrontin Dec 20, 2024
f3801d0
bunch of new documentation and slight tweaks.
cfrontin Dec 20, 2024
1399244
add documentation to wisdem_wrap. closes #18.
cfrontin Dec 20, 2024
c1c2d87
just need FLORIS now.
cfrontin Dec 20, 2024
025d40c
all documentation done for layout-to-LCOE stack. completes #5. comple…
cfrontin Dec 20, 2024
af26b6f
added copyright file and copyright statment to readme.
cfrontin Dec 20, 2024
a576a02
Merge branch 'develop' into feature/documentation-revamp
cfrontin Dec 20, 2024
8d32c72
touch up copyright file.
cfrontin Dec 20, 2024
a5a4f46
Merge branch 'develop' into feature/documentation-revamp
cfrontin Dec 20, 2024
af8987f
Spell check
rafmudaf Dec 23, 2024
793489f
Use pipe for Union in type hint
rafmudaf Dec 23, 2024
047ead4
Add clarity to a docstring
rafmudaf Dec 23, 2024
2f39aab
remove not-implemented accountability lol
cfrontin Dec 23, 2024
062127e
black reformat
cfrontin Dec 23, 2024
7e2809f
update to readme and some outstanding gitignore fixes
cfrontin Dec 23, 2024
6d2285a
README/intro touchup
cfrontin Dec 23, 2024
5b8408d
Little bit of clean up
rafmudaf Dec 26, 2024
2d06deb
Remove unused pages and add API reference
rafmudaf Dec 26, 2024
0f9e98a
Add CI workflow to build the docs
rafmudaf Dec 26, 2024
9053441
Configure autodoc/autosummary
rafmudaf Dec 26, 2024
3a00924
Require python < 3.12 temporarily
rafmudaf Dec 26, 2024
7ebcc20
Update deploy-pages.yaml
cfrontin Dec 26, 2024
17662f9
Add pyproject link to docs
rafmudaf Dec 26, 2024
e4ddfcb
Build docs on develop branch when docs are changed
rafmudaf Dec 26, 2024
4020532
Add example to docs
rafmudaf Dec 26, 2024
a48d592
Add wisdem optimization packages as dependencies
rafmudaf Dec 26, 2024
bc9a372
make updates work on pr
cfrontin Dec 27, 2024
772222f
update pyproject alpha number
cfrontin Dec 27, 2024
c295180
update pyproject alpha number
cfrontin Dec 27, 2024
5c4185f
try update order fix
cfrontin Dec 27, 2024
1ff7211
clean the wisdem opt code because it was breaking stuff
cfrontin Dec 27, 2024
192e7ba
Merge branch 'develop' into feature/documentation-revamp
cfrontin Dec 27, 2024
d3b73c6
downgrade deploy-pages python version to 3.11
cfrontin Dec 27, 2024
a480a93
upgrade GH actions versions
cfrontin Dec 27, 2024
a9242a1
push copyright symbols into 2025
cfrontin Dec 27, 2024
0adde95
update readme and version numbering for consistency and completeness
cfrontin Dec 27, 2024
072635d
attempt mod to deploy-pages tests
cfrontin Dec 27, 2024
111e8c0
go to operational deploy-pages configuration
cfrontin Dec 27, 2024
8121278
Merge pull request #29 from WISDEM/feature/documentation-revamp
cfrontin Dec 27, 2024
58ef8e7
i think this fixed the wisdem thing for raf
cfrontin Dec 30, 2024
4e6bd13
rollback python dependency for pinned wisdem[opt] compatibility
cfrontin Dec 30, 2024
5721c43
attempt nlopt sideload to avoid pyoptsparse issue with wisdem/pypi
cfrontin Dec 30, 2024
5e89e76
rollforward python now with nlopt fix
cfrontin Dec 30, 2024
36eb6e3
respecify python in pyproject toml and fix omission
cfrontin Dec 30, 2024
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
33 changes: 33 additions & 0 deletions .github/workflows/black.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
name: Format code with Black

on:
push:
branches:
- main
- develop
pull_request:
branches:
- main
- develop

jobs:
format:
runs-on: ubuntu-latest

steps:
- name: Checkout code
uses: actions/checkout@v2

- name: Set up Python
uses: actions/setup-python@v2
with:
python-version: '3.12' # Specify the Python version you want to use

- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install black

- name: Run Black
run: |
black --check . # This checks if the code is formatted correctly
38 changes: 38 additions & 0 deletions .github/workflows/deploy-pages.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
name: deploy-pages

on:
push:
branches:
- main
paths:
- docs/**

# This job installs dependencies, builds the book, and pushes it to `gh-pages`
jobs:
deploy-book:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4

# Install dependencies
- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: "3.11"

- name: Install dependencies
run: |
pip install -e ".[docs]"

# Build the book
- name: Build the book
working-directory: ${{runner.workspace}}/Ard/docs/
run: |
jupyter-book build .

# Push the book's HTML to github-pages
- name: GitHub Pages action
uses: peaceiris/actions-gh-pages@v4
with:
github_token: ${{ secrets.ARD_PAGES_TOKEN }}
publish_dir: ./docs/_build/html
46 changes: 46 additions & 0 deletions .github/workflows/python-tests-system.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
name: Python System Tests with Coverage

on:
push:
branches:
- main
- develop
pull_request:
branches:
- main
- develop

jobs:
test:
runs-on: ubuntu-latest

steps:
- name: Checkout code
uses: actions/checkout@v4

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

- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install .[dev]

- name: Install Ard
run: |
pip install .[dev]

- name: Run system tests with coverage
run: |
pytest --cov=ard --cov-fail-under=50 test/system
# pytest --cov=ard --cov-fail-under=80 test/system

# - name: Upload coverage report
# uses: codecov/codecov-action@v2
# with:
# file: ./coverage.xml
# flags: unittests
# name: codecov-umbrella

45 changes: 45 additions & 0 deletions .github/workflows/python-tests-unit.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
name: Python Unit Tests with Coverage

on:
push:
branches:
- main
- develop
pull_request:
branches:
- main
- develop

jobs:
test:
runs-on: ubuntu-latest

steps:
- name: Checkout code
uses: actions/checkout@v4

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

- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install .[dev]

- name: Install Ard
run: |
pip install .[dev]

- name: Run unit tests with coverage
run: |
pytest --cov=ard --cov-fail-under=80 test/unit

# - name: Upload coverage report
# uses: codecov/codecov-action@v2
# with:
# file: ./coverage.xml
# flags: unittests
# name: codecov-umbrella

8 changes: 7 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
@@ -1,5 +1,10 @@

### WINDARD DEVELOPMENT IGNORES
### ARD DEVELOPMENT IGNORES

.vscode
case_files/

### MACOS DEFAULT IGNORES

.DS_Store

Expand Down Expand Up @@ -77,6 +82,7 @@ instance/

# Sphinx documentation
docs/_build/
_autosummary/

# PyBuilder
.pybuilder/
Expand Down
14 changes: 14 additions & 0 deletions COPYRIGHT
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@

Copyright (c) 2024-2025, Alliance for Sustainable Energy, LLC

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file or any file found in this repository 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.
92 changes: 65 additions & 27 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,40 +1,78 @@
# windArd

`windArd` is an optimization suite for multi-disciplinary optimization of wind farms.
# Ard

## Name
**Dig into wind farm design.**

`windArd` is not a typo in the middle of "windward".
It is a portmanteau of "wind" and ["ard"](https://en.wikipedia.org/wiki/Ard_\(plough\)), which is a type of simple and lightweight plow used through the single-digit centuries to prepare a farm for planting.
<!-- The (aspirationally) foolproof tool for preparing wind farm layouts. -->

## Goals
[An ard is a type of simple and lightweight plow](https://en.wikipedia.org/wiki/Ard_\(plough\)), used through the single-digit centuries to prepare a farm for planting.
The intent of `Ard` is to be a modular, full-stack multi-disciplinary optimization tool for wind farms.

The technical goals of `windArd` are to:
1) allow optimization of wind farm layouts for specific wind resource profiles
2) target wholistic, system-level optimization objectives
3) incorporate multi-fidelity analyses to integrate physics-resolving simulation
The problem with wind farms is that they are complicated, multi-disciplinary objects.
They are aerodynamic machines, with complicated control systems, power electronic devices, social and political objects, and the core value (and cost) of complicated financial instruments.
Moreover, the design of *one* of these aspects affects all the rest!

`Ard` seeks to make plant-level design choices that can incorporate these different aspects _and their interactions_ to make wind energy projects more successful.

## Installation instructions

<!-- `Ard` can be installed locally from the source code with `pip` or through a package manager from PyPI with `pip` or conda-forge with `conda`. -->
<!-- For Windows systems, `conda` is required due to constraints in the WISDEM installation system. -->
<!-- For macOS and Linux, any option is available. -->
`Ard` is currently in pre-release and is only available as a source-code installation.
The source can be cloned from github using the following command in your preferred location:
```shell
git clone [email protected]:WISDEM/Ard.git
```
Once downloaded, you can enter the `Ard` root directory using
```shell
cd Ard
```

From here, installation can be handled by `pip`:
```shell
pip install .
```
will install Ard in its most basic and static configuration.
For development (and really for everyone during pre-release), we recommend a full development installation:
```shell
pip install -e .[dev,docs]
```
which will install in "editable mode" (`-e`), such that changes made to the source will not require re-installation, and with additional optional packages for development and documentation (`[dev,docs]`).

As a code, the goal of `windArd` is to be:
1) modular: choose the parts you want, skip the ones you don't, build yourself the ones we don't have
2) clean: fully documented, and adhering to best-practices for code development
3) effective: fully tested and testable at the unit and system level, and built with a derivative-forward approach
There can be some hardware-software mis-specification issues with WISDEM installation from `pip` for MacOS 12 and 13 on machines with Apple Silicon.
In the event of issues, WISDEM can be installed manually or using `conda` without issues, then `pip` installation can proceed.

These will not always be possible, but they are the goal.
For user information, in pre-release, we are using some co-developed changes to the `FLORIS` library.

## Prototype design problem
## Current capabilities

In the following figure, we have a prototype case for windArd:
For the alpha pre-release of `Ard`, we have concentrated on optimization of wind plants, starting from a structured layout and optimizing to minimize the levelized cost of energy, or LCOE.
This capability is demonstrated in `examples/LCOE_stack` and tested in an abridged form in `test/system/LCOE_stack/test_LCOE_stack.py`.
In the alpha pre-release stage, the constituent subcomponents of these problems are known to work and fully tested; any capabilities not touched in the layout-to-LCOE stack should be treated as experimental.

![`windArd` demonstration image](/assets/windard_xdsm/windard_xdsm.png)
These cases start from a four parameter farm layout, compute landuse area, make FLORIS AEP estimates, compute turbine capital costs, balance-of-station (BOS), and operational costs using WISDEM components, and finally give summary estimates of plant finance figures.
The components that achieve this can be assembled to either run a single top-down analysis run, or run an optimization.

## Roadmap to future capabilities

The future development of `Ard` is centered around two user cases:
1) systems energy researchers who are focusing on one specific subdiscipline (e.g. layout strategies, social impacts, or aerodynamic modeling) but want to be able to easily keep track of how it impacts the entire value chain down to production, cost, and/or value of energy or even optimize with respect to it, and
2) private industry researchers who are interested in how public-sector research results change when proprietary analysis tools are dropped in and coupled the other tools in a systems-level simulation.

`Ard` is being developed as a modular tool to enable these types of research queries.
This starts from our research goals, which are that `Ard` should be:
1) principled: fully documented, and adhering to best-practices for code development
1) modular and extensible: choose the parts you want, skip the ones you don't, build yourself the ones we don't have
1) effective: fully tested and testable at the unit and system level, and built with a derivative-forward approach

This, then, allows us to attempt to accomplish the technical goals of `Ard`, to:
1) allow optimization of wind farm layouts for specific wind resource profiles
1) target wholistic and complex system-level optimization objectives like LCOE and beyond-LCOE metrics
1) naturally incorporate multi-fidelity analyses to efficiently integrate physics-resolving simulation

This example shows the variable interactions for an LCOE minimization problem for a farm with a structured layout that can be parametrized by two spacing lengths and two angles.
The problem is also set up to be constrained by the amount of area that is occupied by a wind farm, which can be calculated using the layout parameters.
---

The layout parameterization is controlled by an optimization loop which controls the layout design variables to minimize LCOE while satisfying a landuse constraint.
These layout design variables are passed to a unit that determines the $(x,y)$ locations of the turbines for the parametrized layout, as well as to an area computation for the land use.
The wind resource is passed in as a set of datapoints to a "de-multiplexer" ("demux") component which takes the single wind resource description and outputs the set of specific wind conditions that should be queried by aerodynamic solvers.
The aerodynamic solvers result in an evaluation of the farm power for a given layout at the set of wind conditions to be queried.
These powers, with the "weights" provided by the demux component allow the integration of AEP.
Finally, the BOS costs can be calculated based on the layout variables, and along with input CapEx and OpEx costs, LCOE can be computed.
Released as open-source software by the National Renewable Energy Laboratory under NREL software record number SWR-25-18.

<!-- FIN -->
Copyright &copy; 2024-2025, Alliance for Sustainable Energy, LLC.
45 changes: 45 additions & 0 deletions ard/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@

# Component types

The design intention of `Ard` is to offer a principled, modular, extensible wind farm layout optimization tool.

In order to balance focus with the modularity and extensibility intended for the code, we will classify different types of components, and build "base `Ard`" with a set of default components.
Each type of component will be defined below, and each type of component will have a template parent class which can be used to derive custom user-defined components to serve as drop in replacements in `Ard`.

## Layout DV Components (`layout`)

Wind farm layout optimization is a significantly challenging problem for global optimization, due to the existence of many local minima.
One strategy for reducing the dimensionality of the design space is the use of layout models.
`layout` components are for connecting some reduced layout variables to (`x_turbines`, `y_turbines`) variables that explicitly describe the layout of a farm for computing the farm aerodynamics.

The default `layout` component is the grid farm layout defined in `ard/layout/gridfarm.py`, which parameterizes a structured parallelogram-shaped farm in terms of a primary axis, aligned with respect to North by an orientation angle coincident with compass rose angles, with rows spaced along this axis by a constant spacing measured in rotor diameters; and a secondary axis, skewed from orthagonal by a skew angle in the direction of compass angles, with rows spaced along this axis by a constant spacing.
This results in four parameters, two nondimensional spacing values and two angles.

**tl;dr:** `layout` components map from a simplified parameter set to Cartesian farm coordinates

## Farm Aero Components (`farm_aero`)

Fundamentally, `farm_aero` components will take in a set of farm layout design variables, in terms of `x_turbines` and `y_turbines` components of turbine locations, and potentially with some control command input, namely `yaw_turbines`.

In addition to these design variables, the turbine definitions to be used and some (possibly comprehensive) set of wind conditions to be queried will also be provided to a given `farm_aero` component.

The result of a `farm_aero` component will be a power or energy production quantity of interest.
Typically, these will be a power output estimate for the set of provided conditions or annual energy production estimate for the farm given the wind resource.

The default `farm_aero` component is [NREL's FLORIS tool](https://nrel.github.io/floris), which can be found at `ard/farm_aero/floris.py`.
We wrap FLORIS to map from `x_turbines`, `y_turbines`, and `yaw_turbines` to turbine powers, turbine thrusts, farm power, and, optionally, farm AEP.

**tl;dr:** `farm_aero` components map from a farm layouts and possibly control settings to some measure of farm power production

## Economics and Finance Components (`cost`)

The `cost` components are less formally structured than the components above, but generally take inputs that are consumable stocks or marketable products of a wind system.
Meanwhile, they give as outputs some measure of the monetary trade value that the wind system can create.
Complete details are provided in the components in the `ard/cost` folder.

The default `cost` component set are the WISDEM tools given in `ard/cost/windse_wrap.py`, which include WISDEM's `LandBOSSE` module for BOS calculation and WISDEM's `PlantFinance` module for computation of LCOE.

**tl;dr:** `cost` components map from machines and their production of energy to money inputs and outputs


<!-- FIN! -->
Empty file added ard/__init__.py
Empty file.
Empty file added ard/cost/__init__.py
Empty file.
Loading
Loading