Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
141 commits
Select commit Hold shift + click to select a range
fab3388
Squashed commit of the following:
mattEhall Jul 23, 2025
8efe33f
Anchor.getSizeAnchor updates to support previous anchor design work
shousner Jul 30, 2025
b808038
Modifications in anchor class to include mass_update flag and minor c…
Jul 31, 2025
30ca6d1
Updated project; replaced anchor_soil example with layered/uniform va…
Aug 1, 2025
3509fc8
Save WIP changes before switching to main
Aug 13, 2025
7f284cb
Merge branch 'dev' into anchor_clean. Some things to check:
mattEhall Sep 30, 2025
e885676
Fix tests/test_anchors.py after merge edits
Sep 30, 2025
1edd095
Getting LineDesign to work in new repo format
shousner Oct 1, 2025
c0023f0
Fixing imports to old fadesign module
shousner Oct 1, 2025
90bb873
Fixing errors in new LineDesign test
shousner Oct 1, 2025
fab48cd
Adding a -y command to pip uninstall moorpy to say yes
shousner Oct 1, 2025
b0f66a6
Tests: resolve conflicts in test_anchors.py
Oct 2, 2025
2dcb3b3
Anchors: update setLineProperties and getForces methods for consistency
Oct 2, 2025
4485556
Project: add convertLayeredToUniform method to complement convertUnif…
Oct 2, 2025
5d94109
small bug fixes for MBL and plot2d edits
erickaloz Oct 2, 2025
4bbf5e2
Suggestive comments + mirror and addFairlead methods in project.py:
Yuksel-Rudy Oct 2, 2025
38ba6b7
Updated anchor type labels in the yaml files
Oct 3, 2025
166fa76
update for FFarm compatible moordyn output:
Oct 3, 2025
876b336
LineDesign Update:
Yuksel-Rudy Oct 5, 2025
19aa6ab
A new feature to enable plot2d to show the line depth in 2D. This fea…
Yuksel-Rudy Oct 5, 2025
e4dc36f
fixing reorientation + resetArray for the new base code:
Oct 6, 2025
0b73ab7
enhancing plot2d feature to color lines based on their depth in the w…
Yuksel-Rudy Oct 6, 2025
9a7d575
improving on the plot Optimization function:
Yuksel-Rudy Oct 6, 2025
447b3c0
switching default layout to tall
Yuksel-Rudy Oct 6, 2025
857bd41
Update to platform to have an option to not rotate attached objects
shousner Oct 7, 2025
dd22138
Change anchor label from 'dandg' to 'drilled'
Oct 8, 2025
c4b24f4
adding feature to retreive figure handles when calling plotOptimizati…
Yuksel-Rudy Oct 9, 2025
9ad867f
Merge pull request #28 from FloatingArrayDesign/lineDepth_coloring
Yuksel-Rudy Oct 9, 2025
956ed5e
Merge pull request #27 from FloatingArrayDesign/LineDesignUpdate
Yuksel-Rudy Oct 9, 2025
b2ad1d7
removing additional subplot in case layout=='grid' in plotOptimization.
Yuksel-Rudy Oct 9, 2025
859ef0c
additional feature to continue the optimization from the last point:
Yuksel-Rudy Oct 9, 2025
694440c
default numSeg factor to 1 in FFarmCompatible MD output function in p…
Oct 11, 2025
53eb678
fixing a type from dettach to detach in separate method in Node
Yuksel-Rudy Oct 13, 2025
5b7fe9c
project plot2d option to pass legend location
erickaloz Oct 13, 2025
7a2c155
adding the option to control linewith multiplier for the line Depth 2…
Yuksel-Rudy Oct 16, 2025
892a992
Many important updates/bug fixes
lsirkis Oct 23, 2025
ef1be13
minor marine growth bug fix, clean up __init__ methods
lsirkis Oct 29, 2025
dde66e5
overwrite colors in plot3d:
Yuksel-Rudy Oct 30, 2025
8fb1ad1
addCreep functionality added to project and mooring:
Yuksel-Rudy Oct 30, 2025
154a7f3
Unload fairleads/jtubes bug fix
lsirkis Oct 30, 2025
a4ab5f6
Updating addCreep functionality:
Yuksel-Rudy Oct 30, 2025
af0eaf0
switch between lower and upper bounds:
Yuksel-Rudy Oct 30, 2025
91213c8
add addCorrosion function to Mooring.py:
Yuksel-Rudy Oct 30, 2025
3e596e0
Let's keep making sure the tests pass with new commits
shousner Oct 31, 2025
0f2bc42
Towards cleaning up the geography module and seabed_tools
shousner Oct 31, 2025
7e84738
corrosion and creep adjustments:
Yuksel-Rudy Oct 31, 2025
9d492ce
switchStiffnessBounds can differentiate if a lower bound or upper bou…
Yuksel-Rudy Oct 31, 2025
3f33761
Mooring: adding self.lineProps, adjustSectionType(), and some edits
mattEhall Oct 31, 2025
c4a8536
updateState and other fixes for creep, corrosion, and stiffness bounds:
Yuksel-Rudy Oct 31, 2025
699e72d
Merging functions from seabed_tools to geography
shousner Nov 3, 2025
10499f2
Moving seabed_tools to main FAModel folder (and deleting submodule)
shousner Nov 3, 2025
114b99c
Deleting the submodule from setup.py
shousner Nov 3, 2025
fb63f3f
lineProps yaml specification, marine growth description conformity, u…
lsirkis Nov 3, 2025
fea61cd
Bug fix pass in lineProps to mooring, LineDesign: add lineProps pass …
lsirkis Nov 3, 2025
2dab396
Corrosion/creep/MG update #1/2:
Yuksel-Rudy Nov 3, 2025
6f150d8
setCorrosion, setCreep are now changing the subsystem. Bug fixes in L…
Yuksel-Rudy Nov 4, 2025
faaed56
Corrosion/creep/MG updated #2/2
lsirkis Nov 4, 2025
56dc0bf
small fix from merge overwrites
lsirkis Nov 4, 2025
4407646
Uncomment example run step in CI workflow
lsirkis Nov 4, 2025
b424d93
add geopandas to environment yaml
lsirkis Nov 4, 2025
d0bf550
Removed stiffness from applied states dictionary
Yuksel-Rudy Nov 5, 2025
eb66ba8
fixing 'color' issue in plot3d
Yuksel-Rudy Nov 5, 2025
acf5d4b
mooring-related functions like creep and corrosion are removed from P…
Yuksel-Rudy Nov 5, 2025
21bf46a
Editing some files to make merge easier
lsirkis Nov 5, 2025
261a534
Merge branch 'dev' into anchor_clean - geography.py still needs clean…
lsirkis Nov 5, 2025
e6a6f2c
Update project.unload() to work with updated marine growth data stora…
lsirkis Nov 5, 2025
a3a69dc
Remove extra getSizeAnchor functions to AnchorDesign_temp.py
lsirkis Nov 6, 2025
8b1d47d
Small change anchor.py cost dict for uniformity with other components
lsirkis Nov 6, 2025
123bcc0
Merge branch 'dev' into anchor_clean
lsirkis Nov 7, 2025
c1d470e
Merge pull request #23 from FloatingArrayDesign/anchor_clean
lsirkis Nov 7, 2025
cf99e6d
quick fix on generating profile_map converted from uniform:
Yuksel-Rudy Nov 11, 2025
2922567
Integrate soil plotting features from Jun Tanemoto
lsirkis Nov 11, 2025
007caf8
Merge pull request #29 from FloatingArrayDesign/anchor_clean
lsirkis Nov 11, 2025
5b7ca8b
Small update 2d plotting
lsirkis Nov 11, 2025
64b7354
Update suction pile examples + anchor and project logic
Nov 13, 2025
35dff1d
getSoilAtLocation returns modified to pass tests
Nov 13, 2025
e83d2e0
Merge remote-tracking branch 'origin' into dev
lsirkis Nov 17, 2025
08f1852
adding dynamic stiffness option for FFarmCompatibleMDOutput function …
Nov 21, 2025
587c21f
adding dynamicStiffness to options (forgot to do in last commit_
Yuksel-Rudy Nov 21, 2025
fc3eed2
FFarm MD output function now assumes the project.ms is already conver…
Yuksel-Rudy Nov 21, 2025
c5dda2e
extractFarmInfo gives an integer value for the rotor diameter. A way …
Yuksel-Rudy Nov 21, 2025
f152ed2
Update anchor modules and remove obsolete DragConfig.yml
Nov 24, 2025
a1e7308
Bug fix platform.setPosition(update_moorings=False)
lsirkis Nov 25, 2025
85bee3f
updating extractFarmInfo function to apply a force and get the initia…
Nov 26, 2025
6b83756
fixing an if statement
Nov 26, 2025
888b0c0
fixing force default value to 1.95e6N
Nov 26, 2025
c4bf2d6
mooring update
lsirkis Dec 2, 2025
0d4da0f
Documentation updates, revert renaming in mooring.addMarineGrowth()
lsirkis Dec 5, 2025
0c3803d
cleanLineTypeName option set to True when FFarmCompatibleMDOutput is …
Dec 6, 2025
b0f70e9
Examples yaml commenting for clarity, especially in 01_visualization …
lsirkis Dec 9, 2025
d5bfef2
Outlined an Anchor.calcAnchorLoads function
mattEhall Dec 9, 2025
277bdd9
RAFT model update, documentation improvements, fairlead warning
lsirkis Dec 10, 2025
56cc77a
Turbine thrust calculation, platform external forces, !include yamls
lsirkis Dec 11, 2025
47aee9a
Adding needed file for previous commit
lsirkis Dec 11, 2025
5560099
Added marine growth example in examples/02_Mooring_Analysis_MoorPy/05…
lsirkis Dec 11, 2025
feed874
Small suspended cable heading bug fix
lsirkis Dec 12, 2025
c241c1a
allowing users to define a specific creep_rate in the state dictionary
Dec 16, 2025
c1691c2
edits to adjustMooring for multiple line sections
erickaloz Dec 18, 2025
971740d
adding a maximum lay length constraint to LineDesign
Yuksel-Rudy Dec 18, 2025
6035de1
Anchor calcMudlineLoads & new helper function
lsirkis Dec 18, 2025
4e8ab81
Add envelope dicitonary property to anchors
lsirkis Dec 23, 2025
7c4a7e5
Updating ReadMes
lsirkis Dec 29, 2025
0608500
Added example with a shared anchor using new calcMudlineLoads
lsirkis Dec 30, 2025
6d31e7c
change mass_update default to False in anchor.getCost
erickaloz Jan 7, 2026
a8db9f8
Small bug fix platform.setPosition, loadDesign update, helpers, docum…
lsirkis Jan 8, 2026
949bca2
Unload updates, small mooring/platform fixes
lsirkis Jan 20, 2026
349c1c6
Updates for loading and unloading cable info
lsirkis Jan 21, 2026
3a9f66a
Bug fix cableDesignInterpolation and unload joint cost
lsirkis Jan 21, 2026
24ce4dd
small bug fix removeMooring
lsirkis Jan 21, 2026
f3d6a96
update to dynamic_cable create_subsystem function
erickaloz Jan 26, 2026
92e7aeb
Cable inload bug fix, starting unload platform type bug fix (WIP)
lsirkis Jan 26, 2026
c8af3ce
added argument for maxcableSize to project.plot2d
erickaloz Feb 11, 2026
d29f752
Changes to layout.py from old FADesign repo
erickaloz Feb 18, 2026
56574a3
small edits to project
erickaloz Feb 18, 2026
1e6c3e5
Couple fixes and work on easier layout initiation:
Feb 20, 2026
382ea6f
layout bug fix and updates to layout demo files
erickaloz Feb 24, 2026
9e610b8
Removing unuse layoutdemo bathymetry file
mattEhall Feb 25, 2026
5ab018e
Removing all the files I accidentally added last commit (9e610b8)!
mattEhall Mar 3, 2026
91f884a
project.plot3d legend capability and layout.py import fix
erickaloz Mar 3, 2026
85be497
Unload platform def bug fix and a few small thigns
lsirkis Mar 12, 2026
c994dae
Mooring.fairleads() bridle bug fix
lsirkis Mar 16, 2026
b2b5e29
Reorg examples, some documentation updates, mooring.mirror bug fix
lsirkis Mar 20, 2026
c7667ab
Fix file location issues in a few examples
lsirkis Mar 20, 2026
eb50638
Add BSD 3-Clause License file
shousner Mar 26, 2026
8ecf17e
New installation/setup files, README, CI
shousner Mar 26, 2026
f64f3b5
Minor updates so that all other examples work
shousner Mar 26, 2026
c61e9c8
early rename of famodel-env to fad-env - reverting back before larger…
shousner Mar 26, 2026
ee370e4
Working to get CI to run with only python v3.11 and not v3.12
shousner Mar 26, 2026
c8dcf8f
Small layout.py & project fix, add layout official example
lsirkis Mar 27, 2026
352b7b2
README install order update
lsirkis Mar 30, 2026
3c24172
Deprecated fadesign, MoorSolve inputs
shousner Mar 30, 2026
fb7d140
Adding LineDesign example files
shousner Mar 30, 2026
6cba044
small marineGrowth fix
lsirkis Mar 30, 2026
903c684
Breaking CI to merge from FAModel->FAD-Toolset
shousner Mar 30, 2026
157981c
Renaming source code folder from 'famodel' to 'fad'
shousner Mar 30, 2026
dea7638
Updating 'famodel' imports to 'fad'
shousner Mar 31, 2026
f532b29
Updating CI file to use 'fad-env.yaml' instead of 'famodel-env.yaml'
shousner Mar 31, 2026
b6757eb
Making sure all hyperlinks and names reference 'fad' instead of 'famo…
shousner Apr 1, 2026
4c437f5
Minor change to License name in pyproject.toml
shousner Apr 1, 2026
1fe0d56
Adding args to LinearSystem eval_func
shousner Apr 2, 2026
1ca1465
Update readmes to remove FAModel to avoid confusion
lsirkis Apr 3, 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
72 changes: 72 additions & 0 deletions .github/workflows/CI_FAD.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,72 @@
name: CI_FAD

# Run CI on push commits and pull requests on main branches and dev
on:
push:
branches: [ main, dev ]
pull_request:
branches: [ main, dev ]
# Allow manual triggering of the workflow
workflow_dispatch:

# Workflow jobs for comprehensive testing
jobs:
# Comprehensive integration tests
build_conda:
name: Conda Build (${{ matrix.os }}) - Python ${{ matrix.python-version }}
runs-on: ${{ matrix.os }}
defaults:
run:
shell: bash -el {0}

strategy:
fail-fast: false
matrix:
os: ["ubuntu-latest", "macOS-latest", "windows-latest"]
python-version: ["3.11"]


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

- name: Setup Miniconda
uses: conda-incubator/setup-miniconda@v3
with:
# Use mamba for faster package resolution
#mamba-version: "*"
miniforge-version: "latest"
auto-update-conda: true
python-version: ${{ matrix.python-version }}
environment-file: fad-env.yaml
activate-environment: fad-env
auto-activate-base: false
channels: conda-forge
channel-priority: true
#use-mamba: true

- name: Install additional dependencies
run: |
conda install -y pytest meson ninja nlopt
pip install scipy==1.11.2 # specific SciPy version needed for current LineDesign test results
conda info

- name: Install FAD-Toolset package
run: |
pip install -e .

- name: Update MoorPy to dev version
run: |
pip uninstall -y moorpy # need to uninstall the old version to install the current dev branch
pip install git+https://github.com/NREL/MoorPy@dev

- name: Run example driver
run: |
cd examples
python example_driver.py false

- name: Run comprehensive tests
run: |
cd tests
pytest .

62 changes: 0 additions & 62 deletions .github/workflows/CI_FAModel.yml

This file was deleted.

28 changes: 28 additions & 0 deletions LICENSE
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
BSD 3-Clause License

Copyright (c) 2026, The NLR Floating Array Design Team

Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:

1. Redistributions of source code must retain the above copyright notice, this
list of conditions and the following disclaimer.

2. Redistributions in binary form must reproduce the above copyright notice,
this list of conditions and the following disclaimer in the documentation
and/or other materials provided with the distribution.

3. Neither the name of the copyright holder nor the names of its
contributors may be used to endorse or promote products derived from
this software without specific prior written permission.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
101 changes: 66 additions & 35 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,23 +5,23 @@ modeling and designing arrays of floating offshore structures. It was
originally designed for floating wind systems but has applicability
for many offshore applications.

A core part of the FAD Toolset is the Floating Array Model (FAModel),
A core part of the FAD Toolset is the floating array model,
which serves as a high-level library for efficiently
modeling a floating wind array. It combines site condition information and a
modeling a floating array, such as a floating wind array. It combines site condition information and a
description of the floating array design, and contains functions for evaluating
the array's behavior considering the site conditions. For example, it combines
information about site soil conditions and an array's anchor characteristics to
estimate the holding capacity of each anchor.
information about site soil conditions, mooring line loads, and an array's anchor characteristics to
estimate the holding capacity of each anchor.

The library works in conjunction with the tools RAFT, MoorPy, and FLORIS to model floating
wind turbines, mooring systems, and array wakes respectively.
platforms, wind turbines, mooring systems, power cables, and array wakes respectively.

Layered on top of the floating array model is a set of design tools that can
be used for algorithmically adjusting or optimizing parts of the a floating
array. Specific tools existing for mooring lines, shared mooring systems,
dynamic power cables, static power cable routing, and overall array layout.
These capabilities work with the design representation and evaluation functions
in FAModel, and they can be applied by users in various combinations to suit
in the floating array model, and they can be applied by users in various combinations to suit
different purposes.

In addition to standalone uses of the FAD Toolset, a coupling has been made with
Expand All @@ -36,50 +36,72 @@ and designs.

See example use cases in our [examples](./examples/README.md) folder.

## Pre-installation Requirements
The FAD Toolset is built entirely in Python. It is recommended that users
familiarize themselves with basic Python commands before use.
For working with the library, it is important to understand the floating array
model structure, which is described more [here](./famodel/README.md).
model structure, which is described more [here](./fad/README.md).


## Installation
To install the FAD Toolset itself, first clone this FAD-Toolset repository.

The dependencies required by FAD depend on how it is used. To install all
possible required dependencies, you can create a
new python virtual environment based on the included yaml listing the required
dependencies.
FAD-Toolset is built entirely in Python. It is recommended that users familiarize themselves with Python and install Python onto their machine through Anaconda or Miniconda distributions.

In the terminal (Anaconda Powershell Prompt), clone this repository to a
directory of your choice, navigate into the main folder of the repository, and
run the following command:
The following describes the steps to set up a python virtual environment, install FAD-Toolset, and all install required dependencies into the environment.

conda env create -f famodel-env.yaml
First, in a terminal such as the Anaconda Powershell Prompt, clone the GitHub repository to access the files. Navigate to a directory of your choice to download the repository and then navigate into the FAD-Toolset folder.

This command will install all the dependencies required to run FAD.
Activate your virtual environment before using FAD with ```conda activate famodel-env```
```
(base) YOUR_PATH> git clone https://github.com/FloatingArrayDesign/FAD-Toolset.git
(base) YOUR_PATH> cd FAD-Toolset
```

To install the FAD Toolset package in your environment, enter the
following in the command line from the FAD-Toolset directory.
Next, create a new python virtual environment with an environment name of your choice. We will use 'fad-env' as an example.

For development use:
```
(base) YOUR_PATH\FAD-Toolset> conda env create -n fad-env -f fad-env.yaml
(base) YOUR_PATH\FAD-Toolset> conda activate fad-env # run `conda deactivate` to deactivate
(fad-env) YOUR_PATH\FAD-Toolset>
```

run ```python setup.py develop``` or ```pip install -e .``` from the command
line in the main FAD-Toolset directory.
Within the new python virtual environment, we can install FAD-Toolset.

For non-development use:
Use ```pip``` to install the contents of this folder. Ensure you are still within the root directory of FAD-Toolset.

run ```python setup.py``` or ```pip install .``` from the command line in
the main FAD-Toolset directory.
```
(fad-env) YOUR_PATH\FAD-Toolset> pip install -e .
```

You can test the installation by running ```pytest``` from the main FAD-Toolset directory.
This command tells `pip` to look at the `pyproject.toml` file to install the FAD-Toolset program into the current virtual environment, along with all the dependencies listed in the `pyproject.toml` file. There is overlap between the python packages listed in the `pyproject.toml` and the `fad-env.yaml` file since the installation can be done by either or both of the package installation managers, `conda` and `pip`. Specific versions of packages like scipy are listed in the `pyproject.toml` file to ensure they get installed properly. The `-e` option allows users to make local changes to their FAD-Toolset files and have those changes be reflected in the FAD-Toolset installation.

Lastly, we can test the installation by running `pytest` from the main FAD-Toolset directory.

```
(fad-env) YOUR_PATH\FAD-Toolset> pytest
```

<!-- FAD requires MoorPy and we currently install it separately. If you don't already have it,
you can install MoorPy with ```git clone https://github.com/NREL/MoorPy.git```
then navigate to the MoorPy folder and install with ```pip install .```.
Make sure your virtual enviroment is activated before installing MoorPy. -->

For future changes to dependencies like MoorPy or RAFT, as long as those changes come through a new release of the software and an updated version is listed on PyPI, users should manually re-install the dependencies in their virtual environment to gather those new changes (i.e., `pip install moorpy`).

FAD-Toolset is also pip installable and can be installed using `pip install fad-toolset`. The main source code folder in the repo is named `fad`, which is how classes and functions will be imported (i.e., `import fad.Project as Project` or `from fad.anchors.anchor import Anchor`).



### Installation/Dependency Issues

Some of the toolset's functionality requires RAFT, which in turn requires
CCBlade, which recently can only be installed as part of WISDEM. Some issues
can occur from the associated dependencies, but some have quick fixes:

- Getting a readline error when breakpoint() is called? Check if the
pyreadline3 package is installed in the conda environment. If so, try
removing it.

- Wanting to use both WEIS and FAD Toolset in the same environment, but
getting errors related to "smt" when installing WEIS? Try commenting out
the smt requirement in environment.yml and pyproject.toml.


## Subpackages

Expand All @@ -93,24 +115,33 @@ collection of subpackages for specific functions. The current subpackages are:

Please navigate into the subfolders above for additional information.


## Getting Started

The easiest way to create a FAD project is to provide the array
information in an ontology yaml file. FAD has been designed
to work with a specific ontology yaml setup, which is described
in detail in the [Ontology ReadMe](./famodel/ontology/README.md).
in detail in the [Ontology ReadMe](./fad/ontology/README.md).

For examples of ontologies and driver files of common use cases,
we recommend starting with the numbered examples in the examples folder.
The [visualization examples](./examples/01_Visualization/) are a good place
to start. Run the .py files and inspect the .yaml files with the same name
to see what information is required for different uses and how they are conveyed
in the ontology.

The [example driver file](./famodel/example_driver.py) creates a FAD Project
To see an example with all use cases, the [example driver file](./examples/example_driver.py) creates a FAD Project
object from a pre-set ontology file and shows the syntax and outputs of
various capabilities. For guidance on creating your own ontology yaml file,
it is recommended to read through the [Ontology ReadMe](./famodel/ontology/README.md),
it is recommended to read through the [Ontology ReadMe](./fad/ontology/README.md),
then either adapt one of the ontology samples or fill in the ontology template.

The [core model readme](./famodel/README.md) describes the Project class structure,
The [core model readme](./fad/README.md) describes the Project class structure,
as well as the properties and methods of each component class.

There are some limited helper functions to automatically fill in sections
of a yaml from a MoorPy system or a list of platform locations.
See [helpers](./famodel/helpers.py) for the full list of yaml writing capabilities.
See [helpers](./fad/helpers.py) for the full list of yaml writing capabilities.


## Authors
Expand Down
6 changes: 4 additions & 2 deletions examples/01_Visualization/01_2D-visual_turbine_locations.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,11 +5,13 @@
site condition information, etc.)
"""

from famodel import Project
from fad import Project
import matplotlib.pyplot as plt
import os

# define name of ontology input file
input_file = '01_2D-visual_turbine_locations.yaml'
dir = os.path.dirname(os.path.realpath(__file__))
input_file = os.path.join(dir,'01_2D-visual_turbine_locations.yaml')

# initialize Project class with input file, we don't need RAFT for this so mark False
project = Project(file=input_file,raft=False)
Expand Down
17 changes: 15 additions & 2 deletions examples/01_Visualization/01_2D-visual_turbine_locations.yaml
Original file line number Diff line number Diff line change
@@ -1,9 +1,22 @@

# ----- Array-level inputs -----

# Wind turbine array layout
# platform array layout
array:
keys : [ID, topsideID, platformID, mooringID, x_location, y_location, heading_adjust]
# ID: unique identifier for that platform/turbine system (can be anything you want)
# topside ID: index in list of topsides, which includes wind turbines (indices starting at 1. 0 means there is no topside).
# In this case, we have no topside design defined, so all are 0.
# platform ID: index in list of platforms, which includes FOWT platforms, substation platforms, etc.
# (indices starting at 1, 0 means there is no platform). In this case, we only have 1 platform design defined, so all are 1.
# mooringID: string/id of mooring system to apply to this platform if using mooring_system.
# If there is no mooring or you want to define the mooring lines individually (i.e. through array_mooring table),
# then set mooringID=0, which means there is no mooring system and we've instead individually defined the mooring lines in the array_mooring table.
# In this case, we have no mooring system defined, so all are 0.
# x_location: x coord of platform location
# y_location: y coord of platform location
# z_location: z coord of platform location. For FOWTs generally is 0
# heading_adjust: rotation of platform relative to its 0 position defined for that platformID
data : # ID# ID# ID# [m] [m] [deg]
- [fowt0, 0, 1, 0, -1600, -1600, 0 ]
- [fowt1, 0, 1, 0, 0, -1600, 0 ]
Expand All @@ -16,4 +29,4 @@ array:
- [fowt8, 0, 1, 0, 1600, 1600, 0 ]

platform:
type : FOWT
type : FOWT # type of platform, can be FOWT, substation, WEC, or other
6 changes: 4 additions & 2 deletions examples/01_Visualization/02_visual_moorings.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,11 +7,13 @@
site condition information, etc.)
"""

from famodel import Project
from fad import Project
import matplotlib.pyplot as plt
import os

# define name of ontology input file
input_file = '02_visual_moorings.yaml'
dir = os.path.dirname(os.path.realpath(__file__))
input_file = os.path.join(dir,'02_visual_moorings.yaml')

# initialize Project class with input file, we don't need RAFT for this so mark False
project = Project(file=input_file,raft=False)
Expand Down
Loading
Loading