Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
41 commits
Select commit Hold shift + click to select a range
4196016
famodel_base node-node attachments are now hierarchical:
mattEhall Jan 25, 2025
22bf547
famodel_base class work in progress for more versatile edges/poly
mattEhall Jan 31, 2025
b073d51
famodel_base refactor work in progress...
mattEhall Jun 16, 2025
023d627
famodel_base updates for hierarchical connections finished (hopefully)
mattEhall Jun 18, 2025
b5d69b0
Merge remote-tracking branch 'origin/main' into new_base
lsirkis Jul 7, 2025
e225215
Significant update
lsirkis Jul 15, 2025
597a4b6
famodel_base updates to support parallel things in edges:
mattEhall Jul 18, 2025
ea00174
In progress commit
lsirkis Jul 18, 2025
8b86cc7
famodel_base subcomponent fixes and Edge.getSubcomponent method:
mattEhall Jul 21, 2025
2b193ab
In progress update
lsirkis Jul 22, 2025
94d2fe3
WIP update
lsirkis Jul 23, 2025
1b93d0d
WIP update calc_midpoint, bug fixes, test with shared example
lsirkis Jul 24, 2025
3b0e1f0
Bug fix famodel_base, fairlead ontology adjusted, add comments
lsirkis Jul 29, 2025
83e4686
WIP creating MoorPy objects for Moorings with bridle/parallel parts
mattEhall Jul 29, 2025
8a25a28
Mooring.positionSubcomponents and Project.getMoorPyArray progress
mattEhall Jul 30, 2025
88a91fa
WIP parallels tests, fix example input folder, bug fixes
lsirkis Jul 30, 2025
240f1ff
Mooring.positionSubcomponents done, Project.getMoorPyArray progress
mattEhall Jul 30, 2025
9eee5b6
Bit of cleanup in Project/Mooring
mattEhall Jul 30, 2025
9639f75
Connector.makeMoorPyConnector now makes fixed point when joined:
mattEhall Aug 1, 2025
47cdce4
Tiny bug fix famodel_base, bug fix helpers, add tests
lsirkis Aug 5, 2025
8d0f950
bug fix examples join path for windows and other systems properly
lsirkis Aug 5, 2025
ae40a54
Still trying to fix joining dir & filename for conda CI tests....
lsirkis Aug 5, 2025
20f9dd5
hopefully final adjustment to dir for examples...
lsirkis Aug 6, 2025
d782f3c
still working on github CI issues
lsirkis Aug 6, 2025
469598f
final adjust github CI
lsirkis Aug 6, 2025
2c6c796
Small edit in Project.laodSite to work with different directories
mattEhall Aug 8, 2025
d6f0515
misc. updates
lsirkis Aug 12, 2025
6ffec51
small loadDesign bug fix
lsirkis Aug 12, 2025
27085a5
Merge branch 'main' into new_base
lsirkis Aug 12, 2025
fe178a7
addCablesConnections bug fix, helpers bug fix, connectors pointProps …
lsirkis Aug 20, 2025
d3437f8
Merge remote-tracking branch 'origin/main' into new_base
lsirkis Aug 20, 2025
f50ec16
Fix circular import
lsirkis Aug 20, 2025
e0213b6
Add option to switch sides in cable routing
lsirkis Aug 26, 2025
d06c329
Merge remote-tracking branch 'origin/main' into new_base
lsirkis Aug 26, 2025
29334fd
Merge remote-tracking branch 'origin/main' into new_base
lsirkis Aug 28, 2025
7788d50
Merge remote-tracking branch 'origin/main' into new_base
lsirkis Aug 28, 2025
3d3a775
Merge remote-tracking branch 'origin/main' into new_base
lsirkis Sep 8, 2025
b7aa6a0
Merge remote-tracking branch 'origin/main' into new_base
lsirkis Sep 24, 2025
7ab71cc
Add interpolation between cable designs to adjust for depth;
lsirkis Sep 29, 2025
52908f8
small bug fix cable safety factor update
lsirkis Sep 29, 2025
743aae4
Merge remote-tracking branch 'origin/main' into new_base
lsirkis Sep 30, 2025
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
8 changes: 4 additions & 4 deletions examples/01_Visualization/02_visual_moorings.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -30,11 +30,11 @@ mooring_systems:
ms1:
name: 2-line semi-taut polyester mooring system with a third line shared

keys: [MooringConfigID, heading, anchorType, lengthAdjust]
keys: [MooringConfigID, heading, anchorType]
data:
- [ semitaut-poly_1, 150 , drag-embedment1, 0 ]
- [ semitaut-poly_1, 270 , drag-embedment1, 0 ]
- [ semitaut-poly_1, 30 , drag-embedment1, 0 ]
- [ semitaut-poly_1, 150 , drag-embedment1]
- [ semitaut-poly_1, 270 , drag-embedment1]
- [ semitaut-poly_1, 30 , drag-embedment1]


# Mooring line configurations
Expand Down
4 changes: 2 additions & 2 deletions examples/01_Visualization/03_visual_cables.py
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
# -*- coding: utf-8 -*-
"""
Simple driver file to create a 2d plot of an platform locations with
mooring lines in an array.
cables in an array.
The input file only contains the bare minimum information to build a 2d plot
of the turbine locations and moorings (no cables, platform design, turbines,
of the turbine locations and cables (no moorings, platform design, turbines,
site condition information, etc.)
"""

Expand Down
4 changes: 1 addition & 3 deletions examples/01_Visualization/03_visual_cables.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,6 @@ dynamic_cable_configs:
A: 300 # cable conductor area [mm^2]
cable_type: dynamic_cable_66 # ID of a cable section type from famodel/cables/cableProps_default.yaml. Cable props loaded automatically from this!
length: 353.505 # [m] length (unstretched)
rJTube : 5 # [m] radial distance from center of platform that J-tube is located

sections:
- type: Buoyancy_750m # name of buoy type from famodel/cables/cableProps_default.yaml - buoy design info read in automatically from this!
Expand All @@ -51,8 +50,7 @@ dynamic_cable_configs:
span: 1512 # [m]
cable_type: dynamic_cable_66 # ID of a cable section type from famodel/cables/cableProps_default.yaml. Cable props loaded automatically from this!
A: 300 # cable conductor area [mm^2]
length: 1550 # [m] length (unstretched)
rJTube : 58 # [m] radial distance from center of platform that J-tube is located
length: 1650 # [m] length (unstretched)

sections:
- type: Buoyancy_750m
Expand Down
68 changes: 68 additions & 0 deletions examples/08_Design_Adjustment/01_Fairleads.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,68 @@

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

# Wind turbine array layout
array:
keys : [ID, topsideID, platformID, mooringID, x_location, y_location, heading_adjust]
data : # ID# ID# ID# [m] [m] [deg]
- [fowt0, 0, 1, ms1, -1600, -1600, 180 ]
- [fowt1, 0, 1, ms1, 0, -1600, 0 ]
- [fowt2, 0, 1, ms1, 1600, -1600, 0 ]
- [fowt3, 0, 1, ms1, -1600, 0, 0 ]
- [fowt4, 0, 1, ms1, 0, 0, 45 ]
- [fowt5, 0, 1, ms1, 1600, 0, 0 ]
- [fowt6, 0, 1, ms1, -1600, 1600, 0 ]
- [fowt7, 0, 1, ms1, 0, 1600, 0 ]
- [fowt8, 0, 1, ms1, 1600, 1600, 0 ]

platform:
type : FOWT
fairleads : # list of fairlead coordinates for the platform relative to platform coordinate and 0-degree heading
- name : fairlead1
r_rel : [58, 0, -14]
headings : [30, 150, 270]




# ----- Mooring system -----

# Mooring system descriptions (each for an individual FOWT with no sharing)
mooring_systems:

ms1:
name: 2-line semi-taut polyester mooring system with a third line shared

keys: [MooringConfigID, heading, anchorType, fairlead]
data:
- [ semitaut-poly_1, 135 , drag-embedment1, 2]
- [ semitaut-poly_1, 270 , drag-embedment1, 3]
- [ semitaut-poly_1, 45 , drag-embedment1, 1]


# Mooring line configurations
mooring_line_configs:

semitaut-poly_1: # mooring line configuration identifier, matches MooringConfigID

name: Semitaut polyester configuration 1 # descriptive name

span: 642 # 2D x-y distance from fairlead to anchor

sections: #in order from anchor to fairlead
- mooringFamily: chain # ID of a mooring line section type
d_nom: .1549 # nominal diameter of material [m]
length: 497.7 # [m] usntretched length of line section
- mooringFamily: polyester # ID of a mooring line section type
d_nom: .182 # nominal diameter of material [m]
length: 199.8 # [m] length (unstretched)



# Anchor type properties
anchor_types:

drag-embedment1:
type : DEA # type of anchor (drag-embedment anchor)


27 changes: 27 additions & 0 deletions examples/08_Design_Adjustment/02_Jtubes.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
# -*- coding: utf-8 -*-
"""
Simple driver file to create a 2d plot of an platform locations with
cables in an array using Jtubes to define platform connection location.
The input file only contains the bare minimum information to build a 2d plot
of the turbine locations and cables connected to Jtubes (no moorings, platform design, turbines,
site condition information, etc.)
"""

from famodel import Project
import matplotlib.pyplot as plt

# define name of ontology input file
input_file = '02_Jtubes.yaml'

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

# plot
project.plot2d()

# to plot cables in 3d, we'll need to add depth and create a moorpy model of the system
project.depth = 200 # depth added because we did not include the site conditions section of the yaml
project.getMoorPyArray()
project.plot3d()

plt.show()
71 changes: 71 additions & 0 deletions examples/08_Design_Adjustment/02_Jtubes.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,71 @@

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

# Wind turbine array layout
array:
keys : [ID, topsideID, platformID, mooringID, x_location, y_location, heading_adjust]
data : # ID# ID# ID# [m] [m] [deg]
- [fowt0, 0, 1, 0, -1600, -1600, 0 ]
- [fowt1, 0, 1, 0, 0, -1600, 0 ]
- [fowt2, 0, 1, 0, 1600, -1600, 0 ]
- [fowt3, 0, 1, 0, -1600, 0, 0 ]
- [fowt4, 0, 1, 0, 0, 0, 0 ]
- [fowt5, 0, 1, 0, 1600, 0, 0 ]
- [fowt6, 0, 1, 0, -1600, 1600, 0 ]
- [fowt7, 0, 1, 0, 0, 1600, 0 ]
- [fowt8, 0, 1, 0, 1600, 1600, 0 ]

platform:
type : FOWT
Jtubes :
- name: Jtube1
r : 5
z : -20
headings : [90, 210, 330] # headings in degrees for the Jtube (if multiple headings, the Jtube will be repeated for each heading)

# Array cables
array_cables:
keys: [ AttachA, AttachB, DynCableA, DynCableB, headingA, headingB, JtubeA, JtubeB, cableType]
data:
- [ fowt0, fowt1, suspended_1, None, 90, 270, 1, 2, None] # suspended cable, so only one dynamic cable configuration, no static cable
- [ fowt1, fowt2, lazy_wave1, lazy_wave1, 90, 270, 1, 3, static_cable_66]

# Dynamic and cable configurations
dynamic_cable_configs:
# contains the subsections that make up each section of the subsea cable (i.e., what sections make up the lazywave cable in array_cable_1)
lazy_wave1:
name: Lazy wave configuration 1 (simpler approach)
voltage: 66 # [kV]
span : 195 # [m] horizontal distance to end of dynamic cable from attachment point
A: 300 # cable conductor area [mm^2]
cable_type: dynamic_cable_66 # ID of a cable section type from famodel/cables/cableProps_default.yaml. Cable props loaded automatically from this!
length: 353.505 # [m] length (unstretched)

sections:
- type: Buoyancy_750m # name of buoy type from famodel/cables/cableProps_default.yaml - buoy design info read in automatically from this!
L_mid: 200 # [m] from platform connection
N_modules: 6
spacing: 11.23 # [m]
V: 1 # [m^3]


suspended_1:
name: Dynamic suspended cable configuration 1
voltage: 33 # [kV]
span: 1512 # [m]
cable_type: dynamic_cable_66 # ID of a cable section type from famodel/cables/cableProps_default.yaml. Cable props loaded automatically from this!
A: 300 # cable conductor area [mm^2]
length: 1650 # [m] length (unstretched)

sections:
- type: Buoyancy_750m
L_mid: 510 # [m] from end A
N_modules: 6
spacing: 18 # [m]
V: 2 # [m^3]

- type: Buoyancy_750m
L_mid: 1040 # [m] from end A
N_modules: 6
spacing: 18 # [m]
V: 2 # [m^3]
31 changes: 31 additions & 0 deletions examples/08_Design_Adjustment/02_fairleads.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
# -*- coding: utf-8 -*-
"""
Simple driver file to create an array showing moorings attached to fairelead objects.

This allows you to connect moorings to platforms at a specific point and then run
mooring headings independent of the heading of this connection point.
The input file only contains the bare minimum information to build a 2d plot
of the turbine locations and moorings with fairleads (no cables, platform design, turbines,
site condition information, etc.)
"""

from famodel import Project
import matplotlib.pyplot as plt

# define name of ontology input file
input_file = '01_Fairleads.yaml'

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

# plot
project.plot2d()


# to moorings plot in 3d, we'll need to add depth and create a moorpy model of the system
project.depth = 200 # depth added because we did not include the site conditions section of the yaml
project.getMoorPyArray()
project.plot3d()

plt.show()

39 changes: 39 additions & 0 deletions examples/08_Design_Adjustment/02_rotations.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
# -*- coding: utf-8 -*-
"""
Simple driver file to create an array with moorings and rotate the platforms and array.

This allows you to rotate platforms including all of their moorings, anchors, and fairleads
The input file only contains the bare minimum information to build a 2d plot
of the turbine locations and moorings with fairleads (no cables, platform design, turbines,
site condition information, etc.)
"""

from famodel import Project
import matplotlib.pyplot as plt

# define name of ontology input file
input_file = '01_Fairleads.yaml'

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

# plot
project.plot2d()

# let's rotate a platform but keep in the same x,y position
pf_loc = project.platformList['fowt0'].r
new_heading = 143 # [deg]
project.platformList['fowt0'].setPosition(r=pf_loc, heading=new_heading,
degrees=True, project=project)

# plot again to see the difference
project.plot2d()

# let's now change the platform's position
new_r = [-2000, -2200]
project.platformList['fowt0'].setPosition(r=new_r, project=project)

# plot again
project.plot2d()


55 changes: 0 additions & 55 deletions examples/Inputs/output_MD.dat

This file was deleted.

Loading
Loading