Tower cost optimization

Dear all,

I am trying to use Wisdem to perform a simple optimization task on the tower, following the tower example, modified for a different turbine size (using a simplified preliminary scaling to a 15 MW turbine). The modeling_options and analysis_options files are reported below:

Generic modeling options file to run standard WISDEM case

General:
verbosity: False # When set to True, the code prints to screen many infos
WISDEM:
n_dlc: 2 # Number of design load cases
RotorSE:
flag: False
DriveSE:
flag: False
TowerSE: # Options of TowerSE module
flag: True
wind: PowerWind # Wind used
gamma_f: 1.35 # Safety factor for fatigue loads
gamma_m: 1.3 # Safety factor for material properties
gamma_n: 1.0 # Safety factor for …
gamma_b: 1.1 # Safety factor for …
gamma_fatigue: 1.755 # Safety factor for fatigue loads
buckling_method: eurocode # Buckling code type [eurocode or dnvgl]
buckling_length: 30 # Buckling parameter
frame3dd:
shear: True
geom: True
tol: 1e-9
FixedBottomSE:
flag: False
BOS:
flag: False

Loading:
    mass: 969075.438
    center_of_mass: [-4.720, 0.0, 4.275]
    moment_of_inertia: [1.14930678e08, 2.20354030e07, 1.87597425e07, 0.0, 5.03710467e05, 0.0]
    loads:
        - force: [4736864,	0.0,	-10744406]
          moment: [28061815,	-16106931,	-2455091]
          velocity: 11.4
        - force: [3429651,	0.0,	-10630040]
          moment: [-11919778,	-17858226,	1042845]
          velocity: 70.0

general:
folder_output: outputs_15MW
fname_output: tower_output
design_variables:

tower:
outer_diameter:
flag: True
# lower_bound: 3.87
# upper_bound: 9.0
lower_bound: 5.0
upper_bound: 14.0
layer_thickness:
flag: True
lower_bound: 4e-3
# upper_bound: 2e-1
upper_bound: 4e-1

merit_figure: tower_cost

constraints:
tower:
height_constraint:
flag: False
lower_bound: 1.e-2
upper_bound: 1.e-2
stress:
flag: True
global_buckling:
flag: True
shell_buckling:
flag: True
d_to_t:
flag: True
lower_bound: 80.0
upper_bound: 500.0
taper:
flag: True
lower_bound: 0.2
slope:
flag: True
# thickness_slope:
# flag: True
frequency_1:
flag: True
lower_bound: 0.13
upper_bound: 0.40

driver:
optimization:
flag: True # Flag to enable optimization
tol: 1.e-6 # Optimality tolerance
# max_major_iter: 10 # Maximum number of major design iterations (SNOPT)
# max_minor_iter: 100 # Maximum number of minor design iterations (SNOPT)
max_iter: 30 # Maximum number of iterations (SLSQP)
solver: SLSQP # Optimization solver. Other options are ‘SLSQP’ - ‘CONMIN’
step_size: 1.e-6 # Step size for finite differencing
form: forward # Finite differencing mode, either forward or central
design_of_experiments:
flag: False # Flag to enable design of experiments
run_parallel: False # Flag to run using parallel processing
generator: Uniform # Type of input generator. (Uniform)
num_samples: 15 # number of samples for (Uniform only)
debug_print: True
recorder:
flag: True # Flag to activate OpenMDAO recorder
file_name: log_opt.sql # Name of OpenMDAO recorder

The example assumes a set of assigned external loads on tower top.

I am able to get an optimized thickness and diameter distribution (using SLSQP driver), considering tower cost as merit figure.
SLSQP_opt_tower_cost_output

The resulting thickness distribution follows a non-monotonic trend as reported below:

The tower is currently divided in only 2 section (for simplicity), I would at least find a montonic decreasing trend for the thickness. Moreover, i would like to constrait a constant thickness for each tower section, with a piecewise constant thickness for each section. Is it possible impose such type of constraint.

Furthermore, I would like to know if there is any way to account also for fatigue effects (a fatigue safety factor is defined in the modeling options, but I did not find any detailed information on the wisdem documentation).

Thanks in advance for your support.
Best regards,

Thanks for your interest in WISDEM and the tower optimization capability. To get a monotonic thickness profile, add

thickness_slope: 
  flag: True

to the tower constraints section in the analysis options yaml-file.

Note that with only two sections, it will be difficult for the optimizer to satisfy all of the constraints. Good luck!

Dear @Garrett.Barter ,
thanks for your quick reply. I will try with a larger number of section (for the moment I ran a test case with only 2 sections for semplicity).
Moreover, I will add the thickness slope constraint.
Regarding the overall thickness trend along the tower height, is there any possibilities to set a constant thickness for each tower section?

Thanks for your support.
Best regards,

Hello Vincenzo,

WISDEM already makes a piecewise-constant assumption about thickness and interprets the WindIO input file in that way. This assumption comes from the manufacturing approach of rolling large steel plates to create the sections. So, if you just plot the thickness profile from the yaml file, that isn’t exactly what WISDEM is using. A more accurate plot is given by the compare_designs script which is explained here.