Skip to content

Commit d27d5e2

Browse files
committed
Merge remote-tracking branch 'origin/dev' into irma
2 parents 58cf844 + 91213c8 commit d27d5e2

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

63 files changed

+14489
-1021
lines changed

.github/workflows/CI_FAModel.yml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@ jobs:
4040
- name: Extras
4141
run: |
4242
conda install -y pytest meson ninja nlopt
43+
pip install scipy==1.11.2 # specific SciPy version needed for current LineDesign test results
4344
conda info
4445
4546
- name: Conda Install famodel
@@ -48,6 +49,7 @@ jobs:
4849
4950
- name: Overwrite MoorPy
5051
run: |
52+
pip uninstall -y moorpy # need to uninstall the old version to install the current dev branch
5153
pip install git+https://github.com/NREL/MoorPy@dev
5254
5355
- name: Example run

README.md

Lines changed: 60 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,12 @@
1-
# FAModel
1+
# Floating Array Design Toolset
22

3-
The FAModel (or Floating Array Model) package serves as a high-level library for
3+
The Floating Array Design (FAD) Toolset is a collection of tools for
4+
modeling and designing arrays of floating offshore structures. It was
5+
originally designed for floating wind systems but has applicability
6+
for many offshore applications.
7+
8+
A core part of the FAD Toolset is the Floating Array Model (FAModel),
9+
which serves as a high-level library for efficiently
410
modeling a floating wind array. It combines site condition information and a
511
description of the floating array design, and contains functions for evaluating
612
the array's behavior considering the site conditions. For example, it combines
@@ -10,27 +16,37 @@ estimate the holding capacity of each anchor.
1016
The library works in conjunction with the tools RAFT, MoorPy, and FLORIS to model floating
1117
wind turbines, mooring systems, and array wakes respectively.
1218

13-
In addition to the code, this repository defines a
14-
[Floating Array Ontology](https://github.com/FloatingArrayDesign/FAModel/tree/main/famodel/ontology),
15-
which provides a standardized description format for floating wind farms.
19+
Layered on top of the floating array model is a set of design tools that can
20+
be used for algorithmically adjusting or optimizing parts of the a floating
21+
array. Specific tools existing for mooring lines, shared mooring systems,
22+
dynamic power cables, static power cable routing, and overall array layout.
23+
These capabilities work with the design representation and evaluation functions
24+
in FAModel, and they can be applied by users in various combinations to suit
25+
different purposes.
1626

17-
An example of use of these tools to model three mooring lines over the bathymetry
18-
of the Humboldt lease area is shown below.
27+
In addition to standalone uses of the FAD Toolset, a coupling has been made with
28+
[Ard](https://github.com/WISDEM/Ard), a sophisticated and flexible wind farm
29+
optimization tool. This coupling allows Ard to use certain mooring system
30+
capabilities from FAD to perform layout optimization of floating wind farms
31+
with Ard's more advanced layout optimization capabilities.
1932

20-
![Humboldt](famodel/seabed/images/slopeview4.PNG)
33+
The FAD Toolset works with the [IEA Wind Task 49 Ontology](https://github.com/IEAWindTask49/Ontology),
34+
which provides a standardized format for describing floating wind farm sites
35+
and designs.
2136

22-
See example use cases in our [examples](https://github.com/FloatingArrayDesign/FAModel/tree/main/examples/README.md) folder.
37+
See example use cases in our [examples](./examples/README.md) folder.
2338

2439
## Pre-installation Requirements
25-
The FAModel package is built entirely in Python. It is recommended that users familiarize themselves with basic Python commands before use.
26-
It is important to understand the general structure of FAModel and how to access models and stored information. Please see the model structure
27-
document (./famodel/README.md).
40+
The FAD Toolset is built entirely in Python. It is recommended that users
41+
familiarize themselves with basic Python commands before use.
42+
For working with the library, it is important to understand the floating array
43+
model structure, which is described more [here](./famodel/README.md).
2844

2945

3046
## Installation
31-
To install FAModel itself, first clone the FAModel repository.
47+
To install the FAD Toolset itself, first clone this FAD-Toolset repository.
3248

33-
The dependencies required by FAModel depend on how it is used. To install all
49+
The dependencies required by FAD depend on how it is used. To install all
3450
possible required dependencies, you can create a
3551
new python virtual environment based on the included yaml listing the required
3652
dependencies.
@@ -41,24 +57,25 @@ run the following command:
4157

4258
conda env create -f famodel-env.yaml
4359

44-
This command will install all the dependencies required to run FAModel.
45-
Activate your virtual environment before using FAModel with ```conda activate famodel-env```
60+
This command will install all the dependencies required to run FAD.
61+
Activate your virtual environment before using FAD with ```conda activate famodel-env```
4662

47-
To install the FAModel package in your environment, enter the
48-
following in the command line from the FAModel directory.
63+
To install the FAD Toolset package in your environment, enter the
64+
following in the command line from the FAD-Toolset directory.
4965

5066
For development use:
5167

52-
run ```python setup.py develop``` or ```pip install -e .``` from the command line in the main FAModel directory.
68+
run ```python setup.py develop``` or ```pip install -e .``` from the command
69+
line in the main FAD-Toolset directory.
5370

5471
For non-development use:
5572

56-
run ```python setup.py``` or ```pip install .``` from the command line in the main FAModel directory.
73+
run ```python setup.py``` or ```pip install .``` from the command line in
74+
the main FAD-Toolset directory.
5775

58-
** At this time, FAModel requires the latest MoorPy development branch version to be used. **
59-
Therefore, you must install MoorPy with ```git clone https://github.com/NREL/MoorPy.git```
60-
then navigate to the MoorPy folder and checkout the development branch with ```git checkout dev```
61-
Finally, install this version into your environment with ```pip install -e .```.
76+
FAD requires MoorPy and we currently install it separately. If you don't already have it,
77+
you can install MoorPy with ```git clone https://github.com/NREL/MoorPy.git```
78+
then navigate to the MoorPy folder and install with ```pip install .```.
6279
Make sure your virtual enviroment is activated before installing MoorPy.
6380

6481

@@ -68,19 +85,30 @@ The library has a core Project class for organizing information, classes for eac
6885
collection of subpackages for specific functions. The current subpackages are:
6986

7087
- anchors: contains modules for anchor capacity calculations, in addition to the anchor class
71-
- failures: contains modules for failure modeling with graph theory, and allows for enactment of a failure mode in integrated FAModel tools such as MoorPy and RAFT.
88+
- failures: contains modules for failure modeling with graph theory, and allows for enactment of a failure mode.
7289
- seabed: contains modules for seabed bathymetry and boundary information
90+
- design: contains various tools for performing design steps.
7391

7492
Please navigate into the subfolders above for additional information.
7593

7694
## Getting Started
77-
The easiest way to create an FAModel project is to provide the array information in an ontology yaml file. FAModel has been designed to work with a specific ontology yaml setup, which is described in detail in the [Ontology ReadMe](./famodel/ontology/README.md).
78-
79-
The [example driver file](./famodel/example_driver.py) creates an FAModel project 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), then either adapt one of the ontology samples or fill in the ontology template.
80-
81-
The [FAModel core readme](./famodel/README.md) describes the FAModel class structure, as well as the properties and methods of each component class.
82-
83-
There are some limited helper functions to auntomatically fill in sections of a yaml from a moorpy system or a list of platform locations. See [FAModel helpers](./famodel/helpers.py) for the full list of yaml writing capabilities. Many of these are a work in progress.
95+
The easiest way to create a FAD project is to provide the array
96+
information in an ontology yaml file. FAD has been designed
97+
to work with a specific ontology yaml setup, which is described
98+
in detail in the [Ontology ReadMe](./famodel/ontology/README.md).
99+
100+
The [example driver file](./famodel/example_driver.py) creates a FAD Project
101+
object from a pre-set ontology file and shows the syntax and outputs of
102+
various capabilities. For guidance on creating your own ontology yaml file,
103+
it is recommended to read through the [Ontology ReadMe](./famodel/ontology/README.md),
104+
then either adapt one of the ontology samples or fill in the ontology template.
105+
106+
The [core model readme](./famodel/README.md) describes the Project class structure,
107+
as well as the properties and methods of each component class.
108+
109+
There are some limited helper functions to automatically fill in sections
110+
of a yaml from a MoorPy system or a list of platform locations.
111+
See [helpers](./famodel/helpers.py) for the full list of yaml writing capabilities.
84112

85113

86114
## Authors

examples/01_Visualization/01_2D-visual_turbine_locations.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,11 @@
77

88
from famodel import Project
99
import matplotlib.pyplot as plt
10+
import os
1011

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

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

examples/01_Visualization/02_visual_moorings.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,9 +9,11 @@
99

1010
from famodel import Project
1111
import matplotlib.pyplot as plt
12+
import os
1213

1314
# define name of ontology input file
14-
input_file = '02_visual_moorings.yaml'
15+
dir = os.path.dirname(os.path.realpath(__file__))
16+
input_file = os.path.join(dir,'02_visual_moorings.yaml')
1517

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

examples/01_Visualization/03_visual_cables.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,9 +9,11 @@
99

1010
from famodel import Project
1111
import matplotlib.pyplot as plt
12+
import os
1213

1314
# define name of ontology input file
14-
input_file = '03_visual_cables.yaml'
15+
dir = os.path.dirname(os.path.realpath(__file__))
16+
input_file = os.path.join(dir,'03_visual_cables.yaml')
1517

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

examples/01_Visualization/04_visual_bathymetry.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,11 @@
88

99
from famodel import Project
1010
import matplotlib.pyplot as plt
11+
import os
1112

1213
# define name of ontology input file
13-
input_file = '04_visual_bathymetry.yaml'
14+
dir = os.path.dirname(os.path.realpath(__file__))
15+
input_file = os.path.join(dir,'04_visual_bathymetry.yaml')
1416

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

examples/01_Visualization/05_visual_lease_boundaries.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,9 +9,11 @@
99

1010
from famodel import Project
1111
import matplotlib.pyplot as plt
12+
import os
1213

1314
# define name of ontology input file
14-
input_file = '06_visual_lease_boundaries.yaml'
15+
dir = os.path.dirname(os.path.realpath(__file__))
16+
input_file = os.path.join(dir,'05_visual_lease_boundaries.yaml')
1517

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

examples/01_Visualization/06_2D-visual_misc_platforms.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,11 @@
77

88
from famodel import Project
99
import matplotlib.pyplot as plt
10+
import os
1011

1112
# define name of ontology input file
12-
input_file = '06_2D-visual_misc_platforms.yaml'
13+
dir = os.path.dirname(os.path.realpath(__file__))
14+
input_file = os.path.join(dir,'06_2D-visual_misc_platforms.yaml')
1315

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

examples/01_Visualization/07_3D-visual_platform.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,14 +7,16 @@
77

88
from famodel import Project
99
import matplotlib.pyplot as plt
10+
import os
1011

1112
# define name of ontology input file
12-
input_file = '07_3D-visual_platform.yaml'
13+
dir = os.path.dirname(os.path.realpath(__file__))
14+
input_file = os.path.join(dir,'07_3D-visual_platform.yaml')
1315

1416
# initialize Project class with input file, we don't need RAFT for this so mark False
1517
project = Project(file=input_file,raft=True)
1618

1719
# plot
18-
project.plot3d(fowt=True)
20+
project.plot3d(plot_fowt=True)
1921

2022
plt.show()

examples/01_Visualization/07_3D-visual_platform.yaml

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ platform:
3434
members: # list all members here
3535

3636
- name : center_column # [-] an identifier (no longer has to be number)
37-
type : 2 # [-]
37+
type : rigid # [-]
3838
rA : [ 0, 0, -20] # [m] end A coordinates
3939
rB : [ 0, 0, 15] # [m] and B coordinates
4040
shape : circ # [-] circular or rectangular
@@ -56,7 +56,7 @@ platform:
5656

5757

5858
- name : outer_column # [-] an identifier (no longer has to be number)
59-
type : 2 # [-]
59+
type : rigid # [-]
6060
rA : [51.75, 0, -20] # [m] end A coordinates
6161
rB : [51.75, 0, 15] # [m] and B coordinates
6262
heading : [ 60, 180, 300] # [deg] heading rotation of column about z axis (for repeated members)
@@ -82,7 +82,7 @@ platform:
8282

8383

8484
- name : pontoon # [-] an identifier (no longer has to be number)
85-
type : 2 # [-]
85+
type : rigid # [-]
8686
rA : [ 5 , 0, -16.5] # [m] end A coordinates
8787
rB : [ 45.5, 0, -16.5] # [m] and B coordinates
8888
heading : [ 60, 180, 300] # [deg] heading rotation of column about z axis (for repeated members)
@@ -103,7 +103,7 @@ platform:
103103

104104

105105
- name : upper_support # [-] an identifier (no longer has to be number)
106-
type : 2 # [-]
106+
type : rigid # [-]
107107
rA : [ 5 , 0, 14.545] # [m] end A coordinates
108108
rB : [ 45.5, 0, 14.545] # [m] and B coordinates
109109
heading : [ 60, 180, 300] # [deg] heading rotation of column about z axis (for repeated members)

0 commit comments

Comments
 (0)