Discretization
As a user, the key concept to understand in order to take full advantage of TowerSE is its discretization. This is presented in some examples and bullet points below, for the standard land-based tower and the extension of that to include a monopile.
Land-Based Tower
The tower assumed to be divided into sections (“cans”), where the outer diameter varies linearly from the base to the top of each section and the wall thickness is constant. This is consistent with rolling a steel plate of constant thickness that is cut into a trapezoid and rolled into a tapered cylinder, or frustum. Sections are created by the grid point nodes in the reference_axis
section of the yaml ontology or in the non-dimensional tower_s
coordinates that vary from 0 to 1 applied to tower_height
when using the TowerSE Python code directly. This means that the outer diameter is specified at each node, but the wall thickness is specified at each section, so internally the wall thickness vector is always one element less than the diameter vector. When using Python, this this done directly, with examples provided in the 05_tower_monopile
case. When using the yaml ontology is used for input, there are some other considerations that users should be aware of:
The tower height determined by the
reference_axis
is re-scaled to meet the user-specified hub height. The tower grid nodes are similarly stretched.The foundation height is taken from the bottom z-coordinate of the
reference_axis
The section wall thickness is taken as the average of the grid point values specified in the
internal_structure.layers.thicknenss
entry. This can either be an accepted approximation, such as in the NREL 5-MW example, or accounted for by creating tiny sections at each true section interface where the thickness changes but the outer diameter stays the same, as the IEA 15-MW example does.
To demonstrate, with the following yaml input,
assembly:
hub_height: 90.
...
components:
tower:
outer_shape_bem:
reference_axis: &ref_axis_tower
x:
grid: [0.0, 1.0]
values: [0.0, 0.0]
y:
grid: [0.0, 1.0]
values: [0.0, 0.0]
z:
grid: &grid_tower [0., 0.5, 1.]
values: [0., 40.0, 80.0]
outer_diameter:
grid: *grid_tower
values: [6.0, 5.0, 4.0]
internal_structure_2d_fem:
reference_axis: *ref_axis_tower
layers:
- name: tower_wall
material: steel
thickness:
grid: *grid_tower
values: [0.03, 0.02, 0.01]
The 80m tower would be re-scaled to 90m with two sections of 45m each, one with a wall thickness of 25mm and the other with a thickness of 15mm. To be able too set the wall thickness directly, do instead something similar to:
components:
tower:
outer_shape_bem:
reference_axis: &ref_axis_tower
z:
grid: &grid_tower [0., 0.5, 0.501, 1.]
values: [0., 40.0, 40.001, 80.0]
outer_diameter:
grid: *grid_tower
values: [6.0, 5.0, 5.0, 4.0]
internal_structure_2d_fem:
reference_axis: *ref_axis_tower
layers:
- name: tower_wall
material: steel
thickness:
grid: *grid_tower
values: [0.03, 0.03, 0.02, 0.02]
Offshore Tower with Monopile
The monopile discretization adheres to the same pattern as the tower discretization, with some additional assumptions. Chief among these is that the transition piece height, where the monopile mates with the tower, is taken as the bottom z-coordinate of the tower (same point as the tower foundation height). The monopile reference_axis
is shifted such that this is always true. From this transition point, the monopile extends into the water column and the beneath the sea floor according to the grid and length in the monopile reference_axis
(the suctionpile_depth
parameter is an output of with this approach). If the monopile does not reach the sea floor, the suction pile depth will be output as negative value so that it can be trapped as a design constraint. For gravity-based foundations, the user should set the monopile length to meet the sea floor exactly.
Due to numerical limitations in the soil boundary condition representation, the submerged pile segment will be represented as a single section that terminates at the mudline (sea floor). If the user specifies multiple sections in the submerged pile or a single section that extends into the water column, these will be forcibly altered to comply with this condition.
In the following example,
components:
tower:
outer_shape_bem:
reference_axis:
z:
grid: [0., 0.5, 1.]
values: [20., 60.0, 100.0]
monopile:
outer_shape_bem:
reference_axis:
z:
grid: [0., 0.3846, 0.8462, 1.0]
values: [-55.0, -30.0, 0.0, 10.0]
env:
water_depth: 30.0
The monopile grid would be shifted to meet the transition piece height of 20m, and the 65m monopile length would extend through the 30m water column to a 15m embedded pile depth in the soil.