Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
23 commits
Select commit Hold shift + click to select a range
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
4 changes: 2 additions & 2 deletions .github/workflows/CI_IEA15.yml
Original file line number Diff line number Diff line change
Expand Up @@ -12,10 +12,10 @@ jobs:
fail-fast: False
matrix:
os: ["ubuntu-latest"]
python-version: [3.11]
python-version: [3.13]

steps:
- uses: actions/checkout@v4
- uses: actions/checkout@v5
- uses: conda-incubator/setup-miniconda@v3
# https://github.com/marketplace/actions/setup-miniconda
with:
Expand Down
Binary file modified Documentation/IEA-15-240-RWT_tabular.xlsx
Binary file not shown.
Original file line number Diff line number Diff line change
Expand Up @@ -73,6 +73,7 @@ True PtfmYDOF - Platform yaw rotation DOF (flag)
0.0 TipMass(3) - Tip-brake mass, blade 3 (kg) [unused for 2 blades]
69131 HubMass - Hub mass (kg)
969952 HubIner - Hub inertia about rotor axis [3 blades] or teeter axis [2 blades] (kg m^2)
0 HubIner_Teeter - Hub inertia about teeter axis (2-blades) (kg m^2)
1836784 GenIner - Generator inertia about HSS (kg m^2)
644857 NacMass - Nacelle mass (kg)
32929058 NacYIner - Nacelle inertia about yaw axis (kg m^2)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -73,6 +73,7 @@ True PtfmYDOF - Platform yaw rotation DOF (flag)
0 TipMass(3) - Tip-brake mass, blade 3 (kg) [unused for 2 blades]
69131 HubMass - Hub mass (kg)
969952 HubIner - Hub inertia about rotor axis [3 blades] or teeter axis [2 blades] (kg m^2)
0 HubIner_Teeter - Hub inertia about teeter axis (2-blades) (kg m^2)
1836784 GenIner - Generator inertia about HSS (kg m^2)
644857 NacMass - Nacelle mass (kg)
32929058 NacYIner - Nacelle inertia about yaw axis (kg m^2)
Expand Down
362 changes: 161 additions & 201 deletions WISDEM/generateTables.py

Large diffs are not rendered by default.

39 changes: 39 additions & 0 deletions WISDEM/modeling_options_floating.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -37,3 +37,42 @@ WISDEM:
gamma_fatigue: 1.755 # Safety factor for fatigue loads
BOS:
flag: True
plant_turbine_spacing: 7
plant_row_spacing: 7
commissioning_cost_kW: 44.0
decommissioning_cost_kW: 58.0
distance_to_substation: 1.0
distance_to_interconnection: 8.5
interconnect_voltage: 130.
distance_to_site: 115.
distance_to_landfall: 50.
port_cost_per_month: 2e6
construction_insurance: 44.0
construction_financing: 183.0
contingency: 316.0
site_auction_price: 100e6
site_assessment_cost: 50e6
construction_plan_cost: 2.5e5
installation_plan_cost: 1e6
LCOE:
flag: True
wake_loss_factor: 0.15
fixed_charge_rate: 0.056
bos_per_kW: 4053.
opex_per_kW: 137.
turbine_number: 40.
labor_rate: 58.8
painting_rate: 30.0
Environment:
air_density: 1.225
air_dyn_viscosity: 1.81e-5
weib_shape_parameter: 2.
air_speed_sound: 340.
shear_exp: 0.12
water_density: 1025.0
water_dyn_viscosity: 1.3351e-3
soil_shear_modulus: 140.e+6
soil_poisson: 0.4
water_depth: 200.0
significant_wave_height: 4.52
significant_wave_period: 9.45
61 changes: 61 additions & 0 deletions WISDEM/modeling_options_monopile.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -43,3 +43,64 @@ WISDEM:
tol: 1e-9
BOS:
flag: True
plant_turbine_spacing: 7
plant_row_spacing: 7
commissioning_cost_kW: 44.0
decommissioning_cost_kW: 58.0
distance_to_substation: 1.0
distance_to_interconnection: 8.5
interconnect_voltage: 130.
distance_to_site: 115.
distance_to_landfall: 50.
port_cost_per_month: 2e6
review_cost: 0.0
construction_insurance: 44.0
construction_financing: 183.0
contingency: 316.0
site_auction_price: 100e6
site_assessment_cost: 50e6
construction_plan_cost: 2.5e5
installation_plan_cost: 1e6
LCOE:
flag: True
wake_loss_factor: 0.15
fixed_charge_rate: 0.056
bos_per_kW: 4053.0
opex_per_kW: 137.0
turbine_number: 40.0
labor_rate: 58.8
painting_rate: 30.0
blade_mass_cost_coeff: 14.6
hub_mass_cost_coeff: 3.9
pitch_system_mass_cost_coeff: 22.1
spinner_mass_cost_coeff: 11.1
lss_mass_cost_coeff: 11.9
bearing_mass_cost_coeff: 4.5
gearbox_mass_cost_coeff: 12.9
hss_mass_cost_coeff: 6.8
generator_mass_cost_coeff: 12.4
bedplate_mass_cost_coeff: 2.9
yaw_mass_cost_coeff: 8.3
converter_mass_cost_coeff: 18.8
transformer_mass_cost_coeff: 18.8
hvac_mass_cost_coeff: 124.0
cover_mass_cost_coeff: 5.7
elec_connec_machine_rating_cost_coeff: 41.85
platforms_mass_cost_coeff: 17.1
tower_mass_cost_coeff: 2.9
controls_machine_rating_cost_coeff: 21.15
crane_cost: 12000.0

Environment:
air_density: 1.225
air_dyn_viscosity: 1.81e-05
weib_shape_parameter: 2.0
air_speed_sound: 340.0
shear_exp: 0.12
water_density: 1025.0
water_dyn_viscosity: 0.0013351
soil_shear_modulus: 140000000.0
soil_poisson: 0.4
water_depth: 30.0
significant_wave_height: 4.52
significant_wave_period: 9.45
16 changes: 16 additions & 0 deletions WISDEM/modeling_options_monopile_only.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,8 @@ WISDEM:
tol: 1e-9
BOS:
flag: False
LCOE:
flag: False

Loading:
mass: 967074.89012356
Expand All @@ -52,3 +54,17 @@ WISDEM:
- force: [2427925.55809699, 29094.73368413, -7074256.2758736]
moment: [-278500.68674037, -12634193.44789813, 1299461.07383137]
velocity: 11.73732

Environment:
air_density: 1.225
air_dyn_viscosity: 1.81e-05
weib_shape_parameter: 2.0
air_speed_sound: 340.0
shear_exp: 0.12
water_density: 1025.0
water_dyn_viscosity: 0.0013351
soil_shear_modulus: 140000000.0
soil_poisson: 0.4
water_depth: 30.0
significant_wave_height: 4.52
significant_wave_period: 9.45
26 changes: 8 additions & 18 deletions WISDEM/run_model.py
Original file line number Diff line number Diff line change
Expand Up @@ -33,17 +33,7 @@ def run_15mw(fname_wt_input):
bladeStiffDF = getter.get_blade_elasticity(prob)

# Blade internal laminate layer details
layerDF = []
l_s = prob.get_val("blade.internal_structure_2d_fem.s")
lthick = prob.get_val("blade.internal_structure_2d_fem.layer_thickness", 'm')
lorient = prob.get_val("blade.internal_structure_2d_fem.layer_orientation", 'deg')
lstart = prob.get_val("blade.internal_structure_2d_fem.layer_start_nd")
lend = prob.get_val("blade.internal_structure_2d_fem.layer_end_nd")
nlay = lthick.shape[0]
layer_cols = ['Span','Thickness [m]','Fiber angle [deg]','Layer Start','Layer End']
for k in range(nlay):
ilay = np.c_[l_s, lthick[k,:], lorient[k,:], lstart[k,:], lend[k,:]]
layerDF.append( pd.DataFrame(data=ilay, columns=layer_cols) )
layerDF, webDF = getter.get_blade_layers(prob)

# Tabular output: Rotor Performance
perfDF = getter.get_rotor_performance(prob)
Expand Down Expand Up @@ -136,17 +126,17 @@ def run_15mw(fname_wt_input):
overview['Airfoil series'] = 'FFA-W3'
overview['Hub height [m]'] = prob['configuration.hub_height_user']
overview['Hub diameter [m]'] = prob['hub.diameter']
overview['Hub Overhang [m]'] = -prob['nacelle.overhang']
overview['Hub Overhang [m]'] = -prob['drivetrain.overhang']
overview['Drive train'] = 'Low speed, Direct drive'
overview['Design tip speed ratio'] = prob['control.rated_TSR']
overview['Minimum rotor speed [rpm]'] = prob.get_val('control.minOmega','rpm')
overview['Maximum rotor speed [rpm]'] = prob.get_val('control.maxOmega','rpm')
overview['Maximum tip speed [m/s]'] = prob['control.max_TS']
overview['Shaft tilt angle [deg]'] = prob.get_val('nacelle.uptilt','deg')
overview['Maximum tip speed [m/s]'] = prob['control.max_allowable_blade_tip_speed']
overview['Shaft tilt angle [deg]'] = prob.get_val('drivetrain.uptilt','deg')
overview['Rotor cone angle [deg]'] = prob.get_val('hub.cone','deg')
overview['Tower top to hub flange height [m]'] = prob['nacelle.distance_tt_hub']
overview['Tower top to hub flange height [m]'] = prob['drivetrain.distance_tt_hub']
overview['Generator rated efficiency [%]'] = prob['rotorse.rp.powercurve.rated_efficiency']
overview['Blade pre-bend [m]'] = prob['blade.outer_shape_bem.ref_axis'][-1,0]
overview['Blade pre-bend [m]'] = prob['blade.ref_axis'][-1,0]
overview['Blade mass [t]'] = 1e-3*prob['rotorse.blade_mass']
overview['Hub mass [t]'] = 1e-3*prob['drivese.hub_mass']
overview['Generator mass [t]'] = 1e-3*prob['drivese.generator_mass']
Expand All @@ -171,8 +161,8 @@ def run_15mw(fname_wt_input):
overview['Volturn-S draft [m]'] = 20.0

# Write all tabular data to xlsx
myobj = RWT_Tabular(fname_wt_input, towDF=towDF, rotDF=perfDF,
nacDF=nacDF, layerDF=layerDF, overview=overview)
myobj = RWT_Tabular(fname_wt_input, bladeDF=bladeDF, towDF=towDF, rotDF=perfDF,
nacDF=nacDF, layerDF=layerDF, webDF=webDF, overview=overview)
myobj.write_all()


Expand Down
Loading
Loading