LCOE calculation problems

Dear all,

I am studying an optimization problem for a floating wind turbine. I have used the example at link , using RAFT for the computation of the FOWT response.
I have tried to run two different optimization considering the column draft and radial distance from central column as design variables. The two optimization runs differ in the range of variation of the design variables: the first one has a smaller variation range than the second one. The final configurations have different masses (with a difference of about 12%), the estimated AEP remains unchanged between the two final designs, however, the LCOE values reported among the “financese” variables are the same for both cases. I am not sure if the LCOE estimation performed in financese is insensitive to platform mass calculation? I report the analysis options and modeling options below.

general:
folder_output: outputs/15_RAFT_Rect
fname_output: refturb_output

design_variables:

control:

servo:

pitch_control:

omega:

flag: True

min: 0.1

max: 0.5

floating:
joints:
flag: True
z_coordinate:
- names: [main_keel, col1_keel, col2_keel, col3_keel]
lower_bound: -40.0
upper_bound: -10.0
r_coordinate:
- names: [col1_keel, col1_freeboard, col2_keel, col2_freeboard, col3_keel, col3_freeboard]
lower_bound: 38.8125
upper_bound: 64.6875
# members:
# flag: True
# groups:
# - names: [column1,column2,column3]
# diameter:
# lower_bound: 9.375
# upper_bound: 15.625
# constant: True
# thickness:
# lower_bound: 0.05
# upper_bound: 0.25
# constant: True
# - names: [Y_pontoon_lower1, Y_pontoon_lower2, Y_pontoon_lower3]
# diameter:
# lower_bound: 7.5
# upper_bound: 12.5

constraints:
control:
rotor_overspeed:
flag: False
min: 0.0
max: 0.25
Max_PtfmPitch:
flag: True
max: 5.5
Std_PtfmPitch:
flag: True
max: 2.
Max_Offset:
flag: True
max: 30.
floating:
stress:
flag: True
global_buckling:
flag: True
shell_buckling:
flag: True

merit_figure: platform_mass # Merit figure of the optimization problem. The options are ‘AEP’ - ‘LCOE’ - ‘Cp’ - ‘blade_mass’ - ‘blade_tip_deflection’

driver:
optimization:
flag: True # Flag to enable optimization
solver: LN_COBYLA # Optimization solver. Other options are ‘SLSQP’ - ‘CONMIN’
tol: 1.e-2 # Optimality tolerance
max_iter: 50 # Maximum number of iterations (SLSQP)

design_of_experiments:

flag: True # Flag to enable design of experiments

run_parallel: False # Flag to run using parallel processing

generator: LatinHypercube # Type of input generator. (Uniform)

num_samples: 12 # number of samples for (Uniform only)

recorder:
flag: True # Flag to activate OpenMDAO recorder
file_name: log_opt.sql # Name of OpenMDAO recorder
includes: [‘raft’,‘floating’,‘platform’]

General:
verbosity: False # When set to True, the code prints to screen many infos
openfast_configuration:
use_exe: True
allow_fails: True
fail_value: 9999

WISDEM:
RotorSE:
flag: True
spar_cap_ss: Spar_Cap_SS
spar_cap_ps: Spar_Cap_PS
te_ss: TE_reinforcement_SS
te_ps: TE_reinforcement_PS
TowerSE:
flag: True
DriveSE:
flag: True
FloatingSE:
flag: True
# BOS:
# flag: True

Level3: # Options for WEIS fidelity level 3 = nonlinear time domain
flag: False
simulation:
DT: 0.01
CompElast: 1
CompInflow: 1
CompAero: 2
CompServo: 1
CompHydro: 1
CompSub: 0
CompMooring: 3
CompIce: 0
OutFileFmt: 3
linearization:
Linearize: False
ElastoDyn:
FlapDOF1: True
FlapDOF2: True
EdgeDOF: True
TeetDOF: False
DrTrDOF: False
GenDOF: True
YawDOF: False
TwFADOF1 : True
TwFADOF2 : True
TwSSDOF1 : True
TwSSDOF2 : True
PtfmSgDOF: True
PtfmSwDOF: True
PtfmHvDOF: True
PtfmRDOF : True
PtfmPDOF : True
PtfmYDOF : True
HydroDyn:
WvLowCOff: 0.15708
WvHiCOff: 3.2
WaveSeed1: 123456789
AddBQuad1: [9.23e5, 0.0, 0.0, 0.0, -8.92e6, 0.0]
AddBQuad2: [0.0, 9.23e5, 0.0, 8.92e6, 0.0, 0.0]
AddBQuad3: [0.0, 0.0, 2.3e6, 0.0, 0.0, 0.0]
AddBQuad4: [0.0, 8.92e6, 0.0, 1.68e10, 0.0, 0.0]
AddBQuad5: [-8.92e6, 0.0, 0.0, 0.0, 1.68e10, 0.0]
AddBQuad6: [0.0, 0.0, 0.0, 0.0, 0.0, 4.8e10]
PotMod: 1
# WaveMod: 0

Level1:
flag: True
potential_model_override: 0
trim_ballast: 2
heave_tol: 1
save_designs: True

ROSCO:
flag: True
SD_Mode: 0
PS_Mode: 1
ps_percent: 0.85
F_LPFType: 2
F_NotchType: 2
Fl_Mode: 2
tuning_yaml: …/…/examples/01_aeroelasticse/OpenFAST_models/IEA-15-240-RWT/IEA-15-240-RWT-UMaineSemi/IEA15MW-UMaineSemi.yaml
zeta_pc: [1]
omega_pc: [0.2]
U_pc: [12]
zeta_vs: 0.85 # Torque controller desired damping ratio [-]
omega_vs: 0.12
twr_freq: 3.2
ptfm_freq: 0.2
Kp_float: -10

DLC_driver:
metocean_conditions:
wind_speed: [4., 6., 8., 10., 12., 14., 16., 18., 20., 22., 24.]
wave_height_NSS: [0.83, 0.88, 0.94, 1.03, 1.16, 1.34, 1.57, 1.86, 2.22, 2.62, 3.07]
wave_period_NSS: [6.9, 6.96, 7.02, 7.12, 7.25, 7.43, 7.66, 7.94, 8.27, 8.63, 9.01]
wave_height_SSS: [6.3, 8, 8, 8.1, 8.5, 8.5, 9.8, 9.8, 9.8, 9.8, 9.9]
wave_period_SSS: [11.5, 12.7, 12.7, 12.8, 13.1, 13.1, 14.1, 14.1, 14.1, 14.1, 14.1]
wave_height1: 6.98
wave_period1: 11.7
wave_height50: 10.68
wave_period50: 14.2
DLCs:
- DLC: “1.1”
n_seeds: 1
# - DLC: “1.3”
# n_seeds: 6
- DLC: “1.4”
- DLC: “1.5”
- DLC: “1.6”
n_seeds: 1
- DLC: “6.1”
n_seeds: 1
# - DLC: “6.3”
# n_seeds: 6

I also noticed that in the generated output file the units reproted for the variable financese.plant_aep are USD/kW/h. Is this correct?

Moreover, I am not sure about the meaning of the “constant” keyword in the design variable in the member diameter and thickness. Does it constrain the diameter or thickness to be constant along member axis? Setting this parameter to false, the run terminated with the following error.

Thanks in advance for your support.

Best regards,

Hi Vincenzo,

I can answer about the constant input. That will keep the diameter and thickness of the member constant throughout. I would recommend using that for now. In previous work, we saw that the model tended to increase the diameter near the water line, which increased the hydrostatic stiffness, but was exploiting gaps in the model. Nonetheless, the issue you raise seems like a bug we should fix.

Best, Dan

Dear @Daniel.Zalkind ,
thanks for your explanation, it was clear. I still have some troubles running the optimization with the settings shown above. I have also tried to set LCOE as merit figure, but the code produced the following error:

Moreover, I have used structural cost as merit_figure, but I still have an error:

It seems that the structural cost variable is not defined in my current version.

Do you have any suggestions on the proper settings to successfully run the optimization? Or, may you suggest me a reference to look for information?

Best regards,

Hi Vincenzo,

From searching the code, I can see that structural_cost is only a valid merit figure for tower and monopile optimizations.

I suggest starting from examples, like these:

If you review the output file from WISDEM (it should be a .csv file), you can see the full list of inputs and outputs for each connection. The user can now specify any of them as merit figures or constraints.

I hope this helps.

Best, Dan

Dera @Daniel.Zalkind ,
thank you very much for the support. Following the IEA22MW example (applied to my IEA15MW case) I have set a user defined merit_figure, considering the “floatingse.lcoe” variable. I have assumed as designed variables draft, diameter, thickness and positions of the columns. As constraints I have considered the platform pitch, offset and structural stress.

general:
folder_output: outputs/15_RAFT_Rect
fname_output: refturb_output

design_variables:
tower:
outer_diameter:
flag: False
lower_bound: 4.0
upper_bound: 10.0
layer_thickness:
flag: False
lower_bound: 4.e-3
upper_bound: 2.e-1

floating:
joints:
flag: True
z_coordinate:
- names: [main_keel, col1_keel, col2_keel, col3_keel]
lower_bound: -40.0
upper_bound: -10.0
r_coordinate:
- names: [col1_keel, col1_freeboard, col2_keel, col2_freeboard, col3_keel, col3_freeboard]
lower_bound: 38.8125
upper_bound: 64.6875
members:
flag: True
groups:
- names: [column1,column2,column3]
diameter:
lower_bound: 9.375
upper_bound: 15.625
constant: True
thickness:
lower_bound: 0.05
upper_bound: 0.25
constant: True
# - names: [Y_pontoon_lower1, Y_pontoon_lower2, Y_pontoon_lower3]
# diameter:
# lower_bound: 7.5
# upper_bound: 12.5

constraints:
control:
rotor_overspeed:
flag: False
min: 0.0
max: 0.25
Max_PtfmPitch:
flag: True
max: 5.5
Std_PtfmPitch:
flag: True
max: 2.
Max_Offset:
flag: True
max: 30.
floating:
stress:
flag: True
global_buckling:
flag: True
shell_buckling:
flag: True

merit_figure: LCOE # Merit figure of the optimization problem. The options are ‘AEP’ - ‘LCOE’ - ‘Cp’ - ‘blade_mass’ - ‘blade_tip_deflection’

merit_figure_user:
name: financese.lcoe

driver:
optimization:
flag: True # Flag to enable optimization
solver: LN_COBYLA # Optimization solver. Other options are ‘SLSQP’ - ‘CONMIN’
tol: 1.e-4 # Optimality tolerance
max_iter: 150 # Maximum number of iterations (SLSQP)

design_of_experiments:

flag: True # Flag to enable design of experiments

run_parallel: False # Flag to run using parallel processing

generator: LatinHypercube # Type of input generator. (Uniform)

num_samples: 12 # number of samples for (Uniform only)

recorder:
flag: True # Flag to activate OpenMDAO recorder
file_name: log_opt.sql # Name of OpenMDAO recorder
includes: [‘raft’,‘floating’,‘platform’]

The optimization runs successfully, using the LN_COBYLA solver. The run stops after 50 iterations, and I am not able to further increase the iteration number, by changing the solver parameter. I have obtained a very high LCOE value around 300 $/MWh for a single turbine. Does this value is reasonable? I have also seen that the LCOE reduction from the initial configuration is relatively small.
LCOE_iterations_plot

To better understand the cost calculation process, could you indicate us which part of the code is used for cost estimation?

Moreover, I have seen that in the material section of turbine definition file, some fatigue related parameters are reported. I would like to add a constraint on the platform structure fatigue limit. Is there a way to account for such constraint in WISDEM/WEIS?