You are on page 1of 30

See discussions, stats, and author profiles for this publication at: https://www.researchgate.

net/publication/303802609

BLADE GEOMETRY DESIGN AND PERFORMANCE PREDICTION USING BEMT


EQUATIONS AND ALGORITHM

Thesis · September 2014


DOI: 10.13140/RG.2.1.3112.6644

CITATIONS READS

0 216

1 author:

Sudeepto Bose
Dublin Institute of Technology
10 PUBLICATIONS   0 CITATIONS   

SEE PROFILE

Some of the authors of this publication are also working on these related projects:

LADE GEOMETRY DESIGN AND PERFORMANCE PREDICTION USING BEMT EQUATIONS AND ALGORITHM View project

All content following this page was uploaded by Sudeepto Bose on 04 June 2016.

The user has requested enhancement of the downloaded file.


BLADE GEOMETRY DESIGN USING BEMT EQUATIONS AND ALGORITHM

The fundamental equations of BEMT are relatively reliable for use over a certain low
range of fluid velocities, especially over the streamline flow domain with low Reynolds’
numbers. The guiding fluid (sea water) velocities in our design exercise are the two
unique velocities obtained from the two sites of our choice, namely, Bulls Mouth and
Shannon Estuary, with respective values of 1.01 metres per second and 2.02 metres per
second, obtained through ADCP (Acoustic Doppler Current Profilers) measurements at
these two sites by the SEAI. Certain realistic assumptions and dimensionless quantities
are included, however, to mimic conditions above a streamline flow and into the higher
Reynolds’ number domain. In both the cases, using the BEMT equations alone on their
own is not sufficient to derive an optimum blade geometry for a given flow condition
and or for performance prediction. These equations are rather used in conjunction with
an iterative solution in the algorithm, whereby the iterative loop begins with certain
assumptions for the variables in the loop and continue to run until the program output
values match the starting or initial guesses closely, to within a desired allowance. This
is when convergence is said to have been established. We are going to take a closer
look at this procedure in the sections to come.

Once the algorithm is determined, it is then fed into a software program


using the software specific coding language. In this research project, Visual Basic for
Applications or VBA in has been used for the purpose of obtaining the output and MS
Excel has been used to obtain the data output from the VBA code.

Certain columns of data then, from the output, has been imported into
a suitable file format and used in conjunction with the coordinate data of two distinct
airfoil surfaces or blade elements that were pre-selected for designing the blade
geometry. We will now take a look in details at the entire procedure and the
consequent data tables, graphs and the VBA code in the sections to follow.

1
BEMT has a distinct advantage over other methods of turbine or propeller design and
or performance prediction, and that is its relative simplicity. It assumes that the forces
on the blades are solely determined by the Lift and Drag coefficients. An algorithm can
be developed for the purpose with a minimum number of simple equations from the
theory and this holds good over a significant range of fluid velocities, reproducing
acceptably rational data. To begin the algorithm, a single blade spar is considered of a
chosen airfoil section like the National Advisory Committee for Aeronautics or NACA
and the length of the blade or span is divided up into a number of segments or strips of
equal radial width, from the hub to the tip of the blade. A blade element may be
considered as being a small part of a 2-dimensional infinitely long aerofoil [1].

A blade section is characterised by 2 (two) major dimensions, the chord


length and the twist angle. Each of these blade radial sections will have a slightly
different chord length and a twist angle value, from the hub to the tip. The BEMT
algorithm is specifically used to predict the chord length and twist angle distribution
over the number of blade sections chosen for the analysis. Blade sections can be of
many types, but for the purpose of this project, only two particular airfoil sections
belonging to the NACA series were chosen.

12.1 Algorithm steps

The algorithm essentially consists of three phases, which are:

1. Inputs,

2. Solver and

3. Outputs.

Sequentially enlisted and described overleaf, are the specific steps in the
algorithm.

INPUTS
 The required power output from the rotor is either initialised with a sensible
guess and the rotor radius calculated from a formula (relating power to blade radius and
the power coefficient) or alternately, the rotor radius is assumed and initialised. In this
case, output power from the rotor was assumed to be 300kW for each rotor. Calculation
of the respective blade radii are shown in the program itself.

2
 The fluid (sea water) density (ρ) is specified. In this case, the density is 1025
kg/m3.
 The fluid velocities are then specified. In this project, we have two different fluid
velocities to program for. We have considered the power output of the turbines at the
peak spring-tide velocities for both the sites, namely Bulls Mouth and Shannon Estuary.
The peak spring-tide velocities are 1.01m/s and 2.02 m/s respectively at the two sites.
 A sensible assumption is made for the starting value of power coefficient (CP).
The range of CP values is between 0.4-0.5. Our chosen value was 0.45.
 A value of the tip speed ratio (λ) is then chosen, within a certain standard range.
A good estimate for TSR is between 4 and 10 for a 3-bladed rotor [2]. Our assumption
was 8 (eight). Higher the tip-speed ratio (or TSR), faster the turbine relative to the
velocity of the fluid in which it operates. During later stages of this design, more
significance of this parameter will emerge along with its impact on the value of the
turbine power coefficient CP.
 Depending on the tip speed ratio (TSR), the number of blades is chosen. In our
case, the rotor was assumed to be a 3-bladed rotor. Lesser than 3 blades would mean
that the turbine would have to rotate faster in order to successfully extract the desired
energy from the fluid stream to meet its efficiency or power coefficient challenge[3].
 The type of airfoil is then selected, depending on the nature of application of the
device. Blade design for an MCT can be reliably done by using airfoil sections for wind
turbines. For the purpose of this project, blade profiles NACA 0012 and NACA 0018 were
chosen. These airfoils are ‘symmetric’, which means they have no ‘camber’ to enhance
lift and that the y coordinates at chosen points on the blade section chord are equally
spaced on the top and bottom of the chord line along the x axis. These were chosen
based on the lift and drag characteristics of these airfoil sections, which offer an
acceptable ‘buy-off’ between reduced complication of section design due to symmetry
in geometry of section while achieving the required lift by incorporating a ‘twist angle’
along the blade span.

SOLVER
This section consists of the computational steps and instructions required to
generate the necessary outputs in the subsequent section.
 The axial induction factor (a) and angular induction factor (a’) are initialised with
certain values that can either be derived with formulae or assumed as per standard and

3
current practice mentioned in cited articles and journals on the topic. In this case, the
following values were chosen within the limits of practicality and as per standard
practice.
a = 1/3 = 0.3
a’= 0.003
 The value of the relative fluid flow angle (ϕ) is calculated based on the starting
values of a and a’ above or alternately, calculated using formulae as shown overleaf.

This expression can be used for the initial guess at every blade radial segment [4].
2
𝜙 = 90° − tan−1 (1/𝜆𝑟 )
3
Where λr is the local speed ratio and equal to the tip speed ratio at the blade tip.
 To account for the blade tip flow losses, we next need to compute the value for
Prandtl’s tip loss correction factor ‘f’. This is specific for each radial segment of the blade
as it dependant on radius ‘r’.
 The local solidity ratio is calculated next, denoted by (σ). Every blade section will
have a distinct value for σ.
 Once solidity is calculated, the Lift Coefficient (CL) is computed using the relation
between (ϕ), (σ) and (CL).
 With the value of the design lift coefficient known, it is easy to look up available
data sheet/curve for CL vs. α to determine the angle of attack corresponding to the design
lift coefficient for the blade section as well as the corresponding value for the Drag
Coefficient CD.
 Next, the local thrust and torque force coefficients (CN) and (Ct) are calculated
using their relationship with the lift and drag coefficients and relative flow angle. These
are also, like the dependant variables, specific to each radial blade segment.
 The values of the axial and angular induction factors are next updated with the
Prandtl’s tip loss correction factor.
 If the two induction factors change by more than a set allowance (~5% in this
analysis), the fluid flow angle is to be recalculated. If within the limit, the loop may be
terminated.
 At this stage, the overall thrust (CT) and power coefficient (CP) are calculated. If
these values change by more than a set allowance, algorithm will need to run with
revised estimate of power coefficient. Alternately, if within the set allowance, the
iterative loop may be terminated and results tabulated.

4
OUTPUT
The typical outputs of a blade design algorithm using BEMT are as below.
Depending upon the requirements for the design, outputs can be reduced in number
than the ones stated below or kept the same. The criteria for convergence of our output
data centres around a single major determinant, namely, the overall power coefficient
CP. In our design, we shall allow a maximum of 10% deviation in the calculated output
value of CP relative to our initial guess of 0.45.

 Overall Power coefficient


 Overall Thrust coefficient
 Local radii values
 Local solidity ratios
 Local tip speed ratios
 Local angles of attack
 Lift and drag coefficients
 Local normal and tangential force coefficients
 Local twist angles
 Local chord length values

About the programming software selected


The program was written in a high level programming language using VB.NET,
which is really the Visual Basic language on the .NET framework. MS Visual Studio was
used to generate the program. This allows the use of statements in rational syntax for
command execution and enables structured programming using the ‘Do until….Loop’,
‘for …to’ and ‘for each’ commands for iterative looping. This program could have been
written in other high level languages like MATLAB and or FORTRAN. Choice of VB.NET
was per direction by the supervisor of the project. A sample screenshot of the program
is cited below in figure below, for reference by the reader. The program is used to create
a ‘User Form’ where blank ‘text boxes’ are created against corresponding ‘labels’, that
assign a variable name to each of the text boxes.

5
Fig: Screenshot from MS Visual Studio program for the User Form to generate blade
radius from power output

Starting and terminating the Code


The program starts by defining the main sections under a tab auto-assigned as
‘frmDesign.vb’, which can be renamed as preferred. The main sections in the program
are as shown below in the screenshot in figure below.

Fig: Main sections of the program in VBA

The ‘toolbox’ tab to the extreme left shown above actually contains the
necessary software tools to design the form and its contents. While much of the code for
the user form graphics is auto created by the program itself, the logical syntax to make
the form work and yield the desired output is entered by the user and contained in the

6
sections marked in blue in the above picture. Each section or ‘Region’ when expanded
using the ‘+’ button to the left, unfolds the code written under them, as shown below in
figure below, using the region ‘Form Events’.

Fig: Expanded Region of Form Events in the VBA program

Further sections in the Code


Every region in the code is then populated with the required logical syntax to
carry forward the loop. The ‘constants and variables’ are populated first to ensure the
code knows what values to expect from which components of the program (screenshot
below in figure).

Fig: Screenshot showing the region for constants and variables

The next region defined is the ‘Button events’ that contains the instructions for
the button click outputs on the user form. Below is a snapshot of the buttons used and
the corresponding code in the program for the region specified, in figure.

7
Fig: Button events code screenshot

Continuing on, the next region in the form design code contains the description
for ‘common functions’. This specifies the nature of data for the different required input
and output parameters like blade radius, solidity and chord length and the other
variables and constants, viz. decimal/integer and the likes and also, assigns the relevant
equations for deriving the values of these variables. A screen shot is presented below
for reference, in figure.

Fig: Screenshot of region common functions with sample code

The program code is instructed to generate the output from all calculations and
iterative loops in the last but one region, namely, the ‘form events’, whereby it displays
the desired output to the viewer. Below screenshot in figure from the actual program
showing this.

8
Fig: Screenshot of region Form Event with code to generate data output for variables
At this point, it should be understood that the examples and illustrations cited
so far above summarises the hierarchy followed in the program structure and it suffices
to convey to the reader an appreciable amount of information about a program in VBA,
with specifics of data pertaining to this project.

Data output from the VBA program


The output from the VBA program was found to contain data for the exact variables
chosen to give an output. Figure below shows a screenshot from the same.

Fig: Sample output screenshot from Excel file off the VBA program

Glimpses of input data to the VBA program


The VBA program had the following data inputs. Some were straight integers
while some others were calculated using formulae and compiled in a table prior to being
embedded into the program.
 Data fed into the VBA program for initialising axial and angular induction factors (a and
a’ respectively), with respective values of 0.3 and 0.03.
 Relative fluid angle (ϕ) was calculated based on the initial guesses for a and a’.
 Value of tip speed ratio λ was taken to 8, when a good guess is between 4 and 10. This
would later change to bring CP within set tolerance of (initial guess±10%).
 Power coefficient CP was taken to be 0.45.
 Number of blades was taken to be 3.

9
 Number of blade sections was calculated by dividing the blade radius by the segment
steps, which was 0.5m in this case. In other words, it was sought to derive the desired
data output for every 0.5m radial blade section from the program. This would ensure a
smooth transition of significant data values from section to section.
 Type of aerofoils chosen were the NACA symmetric aerofoils, namely, 0012 and 0018.
The fluid velocities at the two sites of choice were 1.01 m/s and 2.02 m/s as per data
gathered from literature review earlier. Both type of aerofoils were applied to these two
velocities and the data computed through the VBA program.
 The power output from each turbine was taken to be 300 kW for a 3-bladed rotor, which
yields 100 kW per blade per turbine.
 The algorithm for blade radius calculation was supplied to the program, based on the
expression mentioned below.

𝑃
𝑟=√
0.5( 𝜋)(𝐶𝑝)(𝜌)(𝑈 3 )

Where symbols have their usual meaning described in earlier sections.


This yielded the two blade radii as 4 metre (rounded off to the nearest whole number)
for the higher velocity and 11 metre (rounded off to the nearest whole number) for the
lower velocity, when the program was run.
 The chord length was calculated from a formula as shown below [5]. This gave a linear
distribution for the chord length over each section of the blade.
𝑐 = 8𝜋𝑟𝑐𝑜𝑠∅/3𝐵𝜆𝑟
 Syntax for the blade twist angle (γ) and solidity (σ) was fed using the expression shown
earlier, into the program.
 On calculation using equation, Prandtl’s tip loss correction was evaluated at ~1, which
was also fed into the program code.

Assumptions and hypothesis


 Prandtl’s tip loss correction factor output value was always around 0.9 with multiple
values of blade radius. For ease of inclusion and computation of the two induction factors
and other expressions using this factor, this was conveniently rounded off to be 1.0.
 In the computation for the overall power coefficient, drag force coefficient (CD) was
neglected as its values remained significantly low compared to the value of lift force
coefficient (CL) for all iterations.
 The hub diameter is assumed to occupy approximately 20% of the overall rotor diameter.

10
 Set tolerance for the delta between the initial guess of the overall power coefficient CP
and the final calculated value has been set to 20%. This high delta has been assumed to
compensate for the high power output expectation (300kW) from a relatively low source
velocity of fluid (1.01m/s) and the relatively large rotor radius of 11 metres.

Output data validation


The values of a, a’ and λr are taken from each blade segment step iteration and using the
Trapezoidal Rule of approximate integration, the overall power coefficient value is
calculated. Sample calculation is shown below for a particular step and then for the entire
blade. As mentioned afore, drag force effects are neglected, being significantly low that
the lift force and the Prandtl’s tip loss factor is taken to be unity.
Calculation for Cp:
Actual equation:

8 𝜆 ′ 𝐶
𝐶𝑃 = ∫ 𝐹𝑎 (1 − 𝑎)[1 − ( 𝑑⁄𝐶 ) 𝑐𝑜𝑡𝜃]𝜆3𝑟 𝑑𝜆𝑟
𝜆2 𝜆ℎ 𝑙

Neglecting drag coefficient CD and considering F= 1, this reduces to,

8 𝜆 3
𝐶𝑃 = ∫ 𝜆 𝑎′(1 − 𝑎)𝑑𝜆𝑟
𝜆2 0 𝑟

To calculate the area under the curve, the trapezoidal rule is applied, which states,
𝑥𝑛
∫ 𝑓(𝑥)𝑑𝑥 ≈ 𝑥𝑛 − 𝑥0 /2𝑛[(𝑦0 + 𝑦𝑛 ) + 2(𝑦1 + 𝑦2 + ⋯ + 𝑦𝑛−1 )
𝑥0

Considering the data table from the program output below, we shall attempt to calculate
the value of overall CP. We shall calculate the value of CP using the actual trapezoidal rule formula in
equation above, using the data output from the VBA program.

Our data for the variables in equation above are as below:

𝑥𝑛 =8 (which the value of λr at 11 metres for the 11 metre long blade)

𝑥0 = 7.6 (This is the value of λr at 10.5 metres for the 11 metre long blade)

Hence, (𝑥𝑛 − 𝑥0 )/2 = 0.2

At the 11m section (tip of blade),

Axial Induction factor a = 0.3 and angular induction factor a’ = 0.03.

To evaluate 𝑓(𝑥) = 𝜆3𝑟 𝑎′ (1 − 𝑎) = 83 (0.03)(1 − 0.3) = 𝟏𝟎. 𝟕𝟓𝟐

Similarly, to evaluate at 2m section of the 11m blade (the root), where λr = 1.45, a=0.0456 and
a’=0.0133,

𝑓(𝑥) = 𝜆3𝑟 𝑎′ (1 − 𝑎) = 1.453 (0.0133)(1 − 0.0456) = 𝟎. 𝟎𝟑𝟖𝟔

11
We are now in a position to evaluate the rest of the 𝑓(𝑥) terms for every section of the
blade and this yields the following values, as shown in table 1 below, truncated due to space crunch
on page.

r f(x)
11 10.752
10.5 0.852527
10 0.855111
9.5 0.774811
9 0.698693
8.5 0.607147
8 0.590791
7.5 0.509506
7 0.440545
6.5 0.398714
Table 1: Calculated values of 𝑓(𝑥) from data output of VBA program

Once we have all the values of 𝑓(𝑥) at every segment of blade from root to the tip, we are in
position to calculate the overall power coefficient, as shown below.

∫ 𝑓(𝑥) = 0.2((10.752 + 0.0386) + 2(0.8525 + 0.8551 + ⋯ + .0597) = 5.031


8 8
𝐶𝑃 = 2
(∫ 𝑓(𝑥)) = 2 (5.031) = 0.628
𝜆 8
This value is reached by truncating the numbers to 3 points after decimal. This seems to be a
relatively high value compared to the maximum power coefficient of an ideal turbine which is 0.59
(Betz limit) and also exceed our target of 10% allowance over our initial guess of CP which was 0.45!
We now take a look at what can be done better to improve this output.

As a preliminary step to ensure data accuracy, we do the same calculations using Excel and
keeping the number strings after decimal unchanged. Results came to as shown below in figure
below.

Fig: CP output value from VBA program based on TSR initial guess of 8 for the 11m blade

As is evident from above, although we did leave a wide opportunity for the delta in the value of our
power coefficient CP, the final value still is in tune with the Betz limit for an ideal turbine at 0.59
approximately. It is clear that the choice of significant values after decimal can change the outcome
considerably.

The next important factor to be taken into consideration is the initial guess for the TSR. In
our initial guess, we assumed the TSR to be at 8 (eight) for both the airfoil sections, for both the

12
blades. Although cited texts do recommend a value between 4 (four) to 10 (ten) for a 3 bladed rotor,
this assumption in our case is resulting in the CP value exceeding the 10% allowance over the initial
guess, as we have just seen. To mitigate this issue, we now rerun the program with a reduced initial
guess for our TSR, at 6 (six) for the 4 metre long blade. We leave the guess value for the 11 metre
blade at 8 (eight). The output data with the changed guess values are shown below in the
screenshots in figures below, for the NACA 0012 and NACA 0018 airfoils respectively. These are for
the 4 metre blade. Tables for 11 metre blade are not shown here.

Fig: CP value with reduced initial guess for TSR for 4m blade using NACA0012 airfoil

Fig: CP value with reduced initial guess for TSR for 4m blade using NACA0018 airfoil

While it is clear from above that the values don’t change significantly with change in airfoil
type for the same blade radius (or length), it is also very clear that tweaking our initial guess for the
TSR did positively impact our value for the calculated CP and actually brought it to within the set
tolerance of ‘output value = (initial guess±10%)’.

We can happily draw inference that our VBA program output has given us what we wanted!

13
APPENDIXES

APPENDIX I

Curves for blade geometrical parameters versus aerodynamics

1. Blade radius vs twist angle for NACA0012 with 11m blade……………………………..15

2. Blade radius vs twist angle for NACA0018 with 11m blade……………………………..16

3. Blade radius vs twist angle for NACA0012 with 4m blade………………………………17

4. Blade radius vs twist angle for NACA0018 with 4m blade………………………………18

5. Lift Coefficient versus Angle of Attack for NACA0012 airfoil...………..……………….19

6. Lift coefficient versus Angle of Attack for NACA0018 airfoil…………………………..20

APPENDIX II

1. Excerpts from the program for BEMT algorithm……………………………………………….21

2. User Form & Data output from VBA program run…………………………….……………...27

14
APPENDIX I

NACA0012 FOR 11 METRE LONG BLADES

Blade radius vs twist angle (100% Lift coefficient)

Blade radius vs twist angle (80% Lift coefficient)

15
NACA0018 FOR 11 METRE LONG BLADES

Blade radius vs twist angle (100% Lift coefficient)

Blade radius vs twist angle (100% Lift coefficient)

16
NACA0012 FOR 4 METRE LONG BLADES

Blade radius vs Twist angle (100% CL)

Blade radius vs Twist angle (80% CL)

17
NACA0018 FOR 4 METRE LONG BLADES

Blade radius vs Twist angle (100% CL)

Blade radius vs Twist angle (80% CL)

18
LIFT COEFFICIENT VS ANGLE OF ATTACK - 4 M BLADES

NACA0012

NACA0018

19
LIFT COEFFICIENT VS ANGLE OF ATTACK - 11 M BLADES

NACA0012

NACA0018

20
APPENDIX II
EXCERPTS FROM THE PROGRAM IN VB.NET

Imports System
Imports System.Data
Imports System.IO
Imports System.Configuration
Imports OfficeOpenXml
Imports OfficeOpenXml.Table

Public Class FrmDesign

#Region "[Constants and Variables]"


Private Const NACA_0012 As String = "NACA 0012"
Private Const NACA_0018 As String = "NACA 0018"
Dim DTPowerOutPut As DataTable
Dim DTLiftCoefficient As DataTable
Dim drPower As DataRow
Dim DTOutput As DataTable
Dim DTPowerCoefficient As DataTable

''Radius of the Blade


Dim bladeradius As Decimal = 0
''axial induction factor
Dim a As Decimal = 0.3

''angular induction factor


Dim aprime As Decimal = 0.03

''Power per blade


Dim powerperblade As Decimal = 0
''Number of blades
Dim noblades As Integer = 0
''Number of Annular Sections
Dim noAnnularSections As Integer = 0
''Fluid Velocity
Dim fluidVelocity As Decimal = 0
''Fluid Density
Dim fluidDensity As Decimal = 0
''Tip Speed Ratio - lambda
Dim tipSpeedRatio As Decimal '' It is taken from the table Table 1: Number of
Blades in Wind Turbine Blade Analysis
''Fluid Flow Angle
Dim Beta As Decimal
''Solidity
Dim sigma As Decimal
''Lambda r - Local Speed Ratio
Dim lr As Decimal
''Gamma - Twist angle
Dim gamma As Decimal '' Taken from the table in the Page 16
''angle of attack
Dim alpha As Decimal

''Lift Coefficient - Get it from the Lift Coefficient table


Dim CL As Decimal

''Drag Coefficient - Get it from the Lift Coefficient table


Dim Cd As Decimal

21
''Normal Force
Dim CN As Decimal

''Tangetial Force
Dim Ct As Decimal

''Chord Length
Dim c As Decimal

''Power Coefficient
Dim Cp As Decimal = 0.45

''Local Chord length


Dim r As Decimal

''Local Chord length


Dim r1 As Decimal

''Prandt's correction factor


Dim F As Decimal = 1

''Relative Fluid Angle


Dim fi As Decimal = 0
#End Region

#Region "[Button Events]"

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles btnNew.Click


ClearAll()
End Sub

Private Sub BtnClear_Click(sender As Object, e As EventArgs) Handles


BtnClear.Click
TxtBladeRadius.Clear()
TxtFlVelocity.Clear()
TxtNoBlades.Clear()
TxtNoSections.Clear()
TxtPower.Clear()
TxtSeaDensity.Clear()
ddlAFType.SelectedIndex = 0
End Sub

Private Sub btnCalcRadius_Click(sender As Object, e As EventArgs) Handles


btnCalcRadius.Click
Dim powerRequired As Decimal = CDec(TxtPower.Text)
fluidDensity = CDec(TxtSeaDensity.Text)
fluidVelocity = CDec(TxtFlVelocity.Text)
noblades = CInt(TxtNoBlades.Text)
Dim upper As Decimal = powerRequired / noblades
Dim lower As Decimal = 0.5 * Math.PI * Cp * fluidDensity * (fluidVelocity ^ 3)
bladeradius = Math.Sqrt((upper / lower))
bladeradius = Math.Floor(bladeradius)
TxtBladeRadius.Text = bladeradius
End Sub
#End Region

#Region "[Common Functions]"

Private Sub GenerateBladeData()


If bladeradius = 4 Then
tipSpeedRatio = 6
ElseIf bladeradius = 11 Then

22
tipSpeedRatio = 8
End If
Dim rad As Decimal = bladeradius
noAnnularSections = CDec(TxtNoSections.Text)
Dim segment As Decimal = bladeradius / noAnnularSections

Do
lr = 0
CN = 0
Ct = 0
Cp = 0
c = 0
gamma = 0

Dim drChord As DataRow() = DTLiftCoefficient.Select("r='" & Format(rad,


"0.00") & "'")

If Not drChord Is Nothing AndAlso drChord.Length > 0 Then


alpha = CDec(drChord(0)("alpha"))
c = CDec(drChord(0)("c"))
gamma = CDec(drChord(0)("Gamma"))
CL = CDec(drChord(0)("CL"))
Cd = CDec(drChord(0)("CD"))
lr = CDec(drChord(0)("Lr"))
End If

Dim thrustCoefficient As Decimal =


Math.Round(CalculateThrustCoefficient(sigma, a, CL, Cd, cosAngle, sinAngle), 4)

Dim drCp As DataRow = DTPowerCoefficient.NewRow()


drCp("r") = rad
drCp("a") = a
drCp("aprime") = aprime
drCp("lr") = lr
drCp("l") = tipSpeedRatio
drCp("fx") = (lr ^ 3) * aprime * (1 - a)
DTPowerCoefficient.Rows.Add(drCp)

For idx As Integer = 1 To bladeradius

Dim upper As Decimal = 0


Dim lower As Decimal = 0

fi = Math.Round(Math.Atan((((1 + aprime) * lr) / (1 - a))), 4)

sigma = Math.Round(((noblades * c) / (2 * Math.PI * rad)), 4)

cosAngle = Math.Cos(fi)
sinAngle = Math.Sin(fi)

CN = Math.Round((CL * cosAngle) + (Cd * sinAngle), 4)


Ct = Math.Round((CL * sinAngle) - (Cd * cosAngle), 4)

F = 1

thrustCoefficient = Math.Round(CalculateThrustCoefficient(sigma, a,
CL, Cd, cosAngle, sinAngle), 4)

drOutput = DTOutput.NewRow()
drOutput("alpha") = alpha
drOutput("r") = rad

23
drOutput("c") = c
drOutput("Gamma") = gamma
drOutput("Cn") = CN
drOutput("Ct") = Ct
drOutput("lr") = lr
drOutput("CT") = thrustCoefficient
drOutput("a") = a
drOutput("aprime") = aprime
drOutput("fi") = fi
DTOutput.Rows.Add(drOutput)

upper = Math.Round(((4 * (cosAngle * cosAngle))), 4)


lower = Math.Round((sigma * CL * sinAngle), 4)

a = 1 + (upper / lower)
a = Math.Round((1 / a), 4)

lower = (4 * lr * cosAngle)
upper = (sigma * CL)

aprime = (upper / lower) * (1 - a)


aprime = Math.Round(aprime, 4)

Next
rad = rad - segment
Loop Until rad <= 0
CalculatePowerCoefficient(DTPowerCoefficient)
GenerateExcel(DTOutput, "Output")
End Sub

Private Sub ClearAll()


TxtBladeRadius.Clear()
TxtFlVelocity.Clear()
TxtNoBlades.Clear()
TxtNoSections.Clear()
TxtPower.Clear()
TxtSeaDensity.Clear()
ddlAFType.SelectedIndex = 0
Cp = 0.45
a = 0.3
aprime = 0.03
End Sub

Private Function DegreetoRadian(ByVal degrees As Decimal) As Single


Return (Math.PI / 180) * degrees
End Function

Private Sub FormPowerOutputTable()


DTPowerOutPut = New DataTable()
DTPowerOutPut.Columns.Add("Radius", GetType(Decimal))
DTPowerOutPut.Columns.Add("Lambda", GetType(Decimal))
DTPowerOutPut.Columns.Add("Chord", GetType(Decimal))

drPower = DTPowerOutPut.NewRow()
drPower("Radius") = 0.2
drPower("Lambda") = 61.0
drPower("Chord") = 0.7
DTPowerOutPut.Rows.Add(drPower)

drPower = DTPowerOutPut.NewRow()
drPower("Radius") = 1

24
drPower("Lambda") = 74.3
drPower("Chord") = 0.71
DTPowerOutPut.Rows.Add(drPower)

drPower = DTPowerOutPut.NewRow()
drPower("Radius") = 2
drPower("Lambda") = 84.9
drPower("Chord") = 0.44
DTPowerOutPut.Rows.Add(drPower)

drPower = DTPowerOutPut.NewRow()
drPower("Radius") = 3
drPower("Lambda") = 89.1
drPower("Chord") = 0.3
DTPowerOutPut.Rows.Add(drPower)

drPower = DTPowerOutPut.NewRow()
drPower("Radius") = 4
drPower("Lambda") = 91.3
drPower("Chord") = 0.23
DTPowerOutPut.Rows.Add(drPower)
End Sub

Private Sub FormCoefficientTable()


Dim path As String = AppDomain.CurrentDomain.BaseDirectory
path = path & "\AirfoilGraphs\AIRFOIL_GRAPHS.xlsx"
DTLiftCoefficient = New DataTable()
Dim AFType As String
If ddlAFType.Text = NACA_0012 Then
AFType = "0012"
ElseIf ddlAFType.Text = NACA_0018 Then
AFType = "0018"
End If
If TxtBladeRadius.Text.Trim() = 4 Then
AFType += "_4"
ElseIf TxtBladeRadius.Text.Trim() = 11 Then
AFType += "_11"
End If
FillTable(path, AFType, DTLiftCoefficient)
End Sub

Private Sub FormOutPutTable()


DTOutput = New DataTable()
DTOutput.Columns.Add("alpha", GetType(Decimal))
DTOutput.Columns.Add("Cn", GetType(Decimal))
DTOutput.Columns.Add("Ct", GetType(Decimal))
DTOutput.Columns.Add("r", GetType(Decimal))
DTOutput.Columns.Add("c", GetType(Decimal))
DTOutput.Columns.Add("Gamma", GetType(Decimal))
DTOutput.Columns.Add("lr", GetType(Decimal))
DTOutput.Columns.Add("CT", GetType(Decimal))
DTOutput.Columns.Add("fi", GetType(Decimal))
DTOutput.Columns.Add("a", GetType(Decimal))
DTOutput.Columns.Add("aprime", GetType(Decimal))
End Sub

Private Function GetLiftCoefficient(alpha As Decimal, ByRef Cd As Decimal) As


Decimal
If alpha > 30 Then
Return 1
End If

25
Dim roundalpha As Decimal = Round(alpha)

If roundalpha = 0 Then
alpha = CDec(Math.Truncate(alpha) + 1)
Else
alpha = CDec(Math.Truncate(alpha) + roundalpha)
End If

Dim Cl As Decimal
Dim dr As DataRow() = DTLiftCoefficient.Select("alpha = '" & Format(alpha,
"0.000") & "'")
If Not dr Is Nothing And dr.Length > 0 Then
Cl = Convert.ToDecimal(dr(0)("CL").ToString())
Cd = Convert.ToDecimal(dr(0)("CD").ToString())
End If
Return Cl
End Function

'Private Function GetDragCoefficient(alpha As Decimal) As Decimal


' If alpha < 22 Then
' GetDragCoefficient = 0.0717 * (alpha - 0.0269)
' ElseIf alpha > 22 Then
' GetDragCoefficient = (-0.05 * alpha) + 2.3
' End If
' Return GetDragCoefficient
'End Function

Public Sub FillTable(ByVal path As String, ByVal airFoil As String, ByVal tbl As
DataTable)
Dim pck = New OfficeOpenXml.ExcelPackage()
pck.Load(New IO.FileInfo(path).OpenRead)
Dim ws = pck.Workbook.Worksheets(airFoil)
Dim hasHeader = True
For Each firstRowCell In ws.Cells(1, 1, 1, ws.Dimension.End.Column)
tbl.Columns.Add(
If(hasHeader,
firstRowCell.Text,
String.Format("Column {0}", firstRowCell.Start.Column)))
Next
Dim startRow = If(hasHeader, 2, 1)
For rowNum = startRow To ws.Dimension.End.Row
Dim wsRow = ws.Cells(rowNum, 1, rowNum, ws.Dimension.End.Column)
Dim row = tbl.NewRow
For Each cell In wsRow
row(cell.Start.Column - 1) = cell.Text
Next
tbl.Rows.Add(row)
Next
End Sub

26
THE USER FORM TO GENERATE THE DATA OUTPUT

This form, when run with the relevant input parameters, gave a decision output as desired,
indicating that the output file has been created successfully.

27
Data output from VBA program (MS Excel format)

Above is a screenshot for a portion of the 11m blade data output.

******

28
Reference:
[1] Hadi Winarto; Propeller performance prediction algorithm; BEMT Algorithm for the Prediction
of the Performance of Arbitrary Propellers; pp. 27-33, [online resource] available at
http://mirror.unpad.ac.id/orari/library/library-non-ict/aero/docs/CoEAL%20report%20BEMT.pdf

[3] Magdi Ragheb and Adam M. Ragheb; Wind Turbines Theory - The Betz Equation and Optimal
Rotor Tip Speed Ratio; Rotor optimal Tip Speed Ratio, TSR; [online resource], available at
http://cdn.intechopen.com/pdfs-wm/16242.pdf.

[2], [4], [5] Grant Ingram; Blade Design Procedure; Wind Turbine Blade Analysis using the Blade
Element Momentum Method. Version 1.1; [online resource], available at
https://community.dur.ac.uk/g.l.ingram/download/wind_turbine_design.pdf

[6] Seagen S; Technology development; Marine current turbines; [online resource], available at
http://www.marineturbines.com/SeaGen-Products/SeaGen-S.

29

View publication stats

You might also like