Repository: WISDEM/ORBIT (language: python)

Issue:
Add the IEA-22MW turbine
Using the geometry and mass from https://github.com/IEAWindTask37/IEA-22-280-RWT, create a 22MW_generic turbine yaml file and add to the library. Update any tests along the way to ensure that the size/scale of the turbine does not raise any warnings/errors.


Discussion / hints:

Fix patch:
diff --git a/library/turbines/22MW_generic.yaml b/library/turbines/22MW_generic.yaml
new file mode 100644
index 00000000..7e6639e5
--- /dev/null
+++ b/library/turbines/22MW_generic.yaml
@@ -0,0 +1,22 @@
+# Most Data comes from IEA Wind 22-MW Reference Turbine (IEA-22MW-RWT)
+blade:
+  deck_space: 744.12      # m^2 [IEA-22MW-RWT Value] assuming area = blade length * max chord * 0.75 (assume 25% overhang) = 137.8 * 7.2 * 0.75
+  length: 137.8          # m tonnes [IEA-22MW-RWT Value]
+  type: Blade
+  mass: 82.301         # tonnes [IEA-22MW-RWT Value]
+hub_height: 170        # m [IEA-22MW-RWT Value]
+nacelle:
+  deck_space: 198      # m^2 [IEA-22MW-RWT Value] "The outer dimenesions of the nacelle are estimated equal to 18 m in length, 11 m in width, and 11 m in height" area = 18 * 11
+  type: Nacelle
+  mass: 941.2        # tonnes [IEA-22MW-RWT Value] Nacelle assembly mass + Hub system mass = 120.0 +  821.2
+name: 22MW_generic
+rated_windspeed: 11.00 # m/s [IEA-22MW-RWT Value]
+rotor_diameter: 284   # m [IEA-22MW-RWT Value]
+tower:
+  deck_space: 78.54    # m^2 [IEA-22MW-RWT Value] and assuming erected tower, deck space = tower base = pi * max outer tower diameter^2 /4 = pi * 10^2 / 4
+  sections: 3        # guess
+  type: Tower
+  length: 164.4        # m [IEA-22MW-RWT Value] Hub height - Vertical distance between tower top and hub center
+  mass: 1574         # tonnes [IEA-22MW-RWT Value]
+turbine_rating: 22     # MW 
+


Test patch:
diff --git a/tests/data/library/project/config/turbine_install_22mw_generic.yaml b/tests/data/library/project/config/turbine_install_22mw_generic.yaml
new file mode 100644
index 00000000..25fbf83b
--- /dev/null
+++ b/tests/data/library/project/config/turbine_install_22mw_generic.yaml
@@ -0,0 +1,10 @@
+plant:
+  num_turbines: 50
+port:
+  monthly_rate: 100000
+  num_cranes: 1
+site:
+  depth: 40
+  distance: 50
+turbine: 22MW_generic
+wtiv: test_wtiv
diff --git a/tests/phases/install/turbine_install/test_turbine_install.py b/tests/phases/install/turbine_install/test_turbine_install.py
index aac2de9f..1124a792 100644
--- a/tests/phases/install/turbine_install/test_turbine_install.py
+++ b/tests/phases/install/turbine_install/test_turbine_install.py
@@ -26,6 +26,8 @@
 config_wtiv_multi_feeder["num_feeders"] = 2
 floating = extract_library_specs("config", "floating_turbine_install_feeder")
 
+config_22mw = extract_library_specs("config", "turbine_install_22mw_generic")
+
 
 @pytest.mark.parametrize(
     "config",
@@ -250,3 +252,36 @@ def test_multiple_tower_sections():
         vl = vl.assign(shift=(vl["time"] - vl["time"].shift(1)))
 
         assert (vl["shift"] - vl["duration"]).abs().max() < 1e-9
+
+
+def test_large_turbine_installation():
+    """Test a library extracted 22MW turbine differs from the
+    project test config"""
+
+    sim = TurbineInstallation(config_wtiv)
+    sim.run()
+
+    sim_22 = TurbineInstallation(config_22mw)
+    sim_22.run()
+
+    def count_component(list, component):
+
+        return sum(1 for i in list if i == component)
+
+    assert sim.config != sim_22.config
+    assert sim.capex_category == sim_22.capex_category
+
+    assert sim.installation_capex < sim_22.installation_capex
+    assert sim.total_phase_time != sim_22.total_phase_time
+
+    # sim has 1 Nacelle, 3 Blades, and 1 TowerSection
+    # sim_22 has 1 Nacelle, 3 Blades, and 3 TowerSections
+    assert count_component(sim.component_list, "Blade") == count_component(
+        sim_22.component_list, "Blade"
+    )
+    assert count_component(sim.component_list, "Nacelle") == count_component(
+        sim_22.component_list, "Nacelle"
+    )
+    assert count_component(
+        sim.component_list, "TowerSection"
+    ) < count_component(sim_22.component_list, "TowerSection")