Learn R Programming

bReeze (version 0.4-4)

windprofile: Calculate wind profile

Description

Calculates a wind profile, using on the Hellman exponential law.

Usage

windprofile(mast, v.set, dir.set, num.sectors=12, 
  method=c("hellman", "loglm", "fixed"), alpha=NULL, 
  subset, digits=3, print=TRUE)
pro(mast, v.set, dir.set, num.sectors=12, 
  method=c("hellman", "loglm", "fixed"), alpha=NULL, 
  subset, digits=3, print=TRUE)

# S3 method for windprofile plot(x, sector, measured=TRUE, ...)

Value

Returns a list of:

profile

Data frame containing alpha and reference wind speed for each direction sector.

h.ref

Reference height of the profile (the height of the first given dataset in v.set).

Arguments

mast

Met mast object created by mast.

v.set

Set(s) to be used for wind speed, specified as set number or set name. The first given dataset is used as reference height. If one single dataset is given, the same Hellman exponent is assumed for each sector and can be specified using alpha (see Details for empirical values). If two or more datasets are given, the Hellman exponent is calculated for each sector. If more than two datasets are given, currently only the first two datasets are used.

dir.set

Set to be used for wind direction, specified as set number or set name.

num.sectors

Number of wind direction sectors as integer value greater 1. Default is 12.

method

Method to be used for the calculation. One of "hellman", "loglm" or "fixed" (see Details section). Optional argument: "fixed" is used if v.set is a single dataset, "hellman" is used if v.set specifies two, "loglm" if v.set specifies three datasets.

alpha

Hellman exponent -- one general exponent or a vector of exponents (one per sector). Optional and only used if the choosen method is "fixed". If alpha is NULL (the default), 0.2 is used as default.

subset

Optional start and end time stamp for a data subset, as string vector c(start, end). The time stamps format shall follow the rules of ISO 8601 international standard, e.g. "2012-08-08 22:55:00".

digits

Number of decimal places to be used for results as numeric value. Default is 3.

print

If TRUE (the default), results are printed directly.

x

Wind profile object created by profile.

sector

Direction sector as integer (sector number) or string (sector code). If missing or NULL, all sectors are plotted. For plotting the general profile only use "all".

measured

If TRUE (the default), measured sector mean wind speeds are added to the plot.

...

Arguments to be passed to methods. For optional graphical parameters see below.

Optional graphical parameters

The following graphical parameters can optionally be added to customize the plot:

  • bty: Type of box to be drawn around the plot region. Allowed values are "o" (the default), "l", "7", "c", "u", or "]". The resulting box resembles the corresponding upper case letter. A value of "n" suppresses the box.

  • bty.leg: Type of box to be drawn around the legend. Allowed values are "n" (no box, the default) and "o".

  • cex: Amount by which text on the plot should be scaled relative to the default (which is 1), as numeric. To be used for scaling of all texts at once.

  • cex.axis: Amount by which axis annotations should be scaled, as numeric value.

  • cex.lab: Amount by which axis labels should be scaled, as numeric value.

  • cex.leg: Amount by which legend text should be scaled, as numeric value.

  • col: Vector of colours, one for each set plotted.

  • col.axis: Colour to be used for axis annotations -- default is "black".

  • col.box: Colour to be used for the box around the plot region (if bty) -- default is "black".

  • col.lab: Colour to be used for axis labels -- default is "black".

  • col.leg: Colour to be used for legend text -- default is "black".

  • col.ticks: Colours for the axis line and the tick marks respectively -- default is "black".

  • las: Style of axis labels. One of 0 (always parallel to the axis, default), 1 (always horizontal), 2 (always perpendicular to the axis), 3 (always vertical).

  • lty: Line type(s) of the profile lines -- assigned like col. See par for available line types.

  • lwd: Line width(s) of the profile lines -- assigned like col. See par for usage.

  • mar: A numerical vector of the form c(bottom, left, top, right) which gives the number of lines of margin to be specified on the four sides of the plot -- default is c(4, 4, 1, 1).

  • mgp: A numerical vector of the form c(label, annotation, line), which gives the margin line for the axis label, axis annotation and axis line. The default is c(2.5, 0.7, 0).

  • pos.leg: Position of legend -- one of "bottomright", "bottom", "bottomleft", "left", "topleft", "top", "topright", "right" or "center". Use NULL to hide the legend.

  • xlab: Alternative label for the x axis.

  • ylab: Alternative label for the y axis.

  • xlim: Numeric vector of the x limits of the plot.

  • ylim: Numeric vector of the y limits.

  • x.intersp: Horizontal interspacing factor for legend text, as numeric -- default is 0.4.

  • y.intersp: Vertical line distance for legend text, as numeric -- default is 0.8.

Author

Christian Graul

Details

The average wind speed as a function of height above ground gives a site's wind profile. For reasons of cost-efficiency met mast heights are usually below hub heights of modern wind turbines, thus measured wind speeds must be extrapolated by based wind profile. A common method is the Hellman exponential law or power law ("hellman"), defined as: $$\frac{v_2}{v_1} = \left(\frac{h_2}{h_1} \right)^\alpha$$ where \(v_2\) is the wind speed at height \(h_2\), \(v_1\) is the wind speed at height \(h_1\) and \(\alpha\) is the Hellman exponent (also power law exponent or shear exponent).

To calculate \(\alpha\), profile uses the inverted equation as: $$\alpha = \frac{\log \left(\frac{v_2}{v_1} \right)}{\log \left(\frac{h_2}{h_1} \right)}$$

If data is available for two or more heights, a log-linear model fit can be used for the computation of \(\alpha\). In this case the data is logarithmized to allow for fitting a linear model. The models slope is then used as \(\alpha\). Please note: depending on the data this method might result in negative \(\alpha\).

If the wind speed is only known for one height, \(\alpha\) must be estimated. \(\alpha\) depends on various issues, including roughness and terrain of the site. Some empirical values for temperate climates are:

Site conditions\(\alpha\)
Open water0.08--0.15
Flat terrain, open land cover0.16--0.22
Complex terrain with mixed or continuous forest0.25--0.40
Exposed ridgetops, open land cover0.10--0.14
Sloping terrain with drainage flows0.10--0.15

References

Bañuelos-Ruedas, F., Camacho, C.A., Rios-Marcuello, S. (2011) Methodologies Used in the Extrapolation of Wind Speed Data at Different Heights and Its Impact in the Wind Energy Resource Assessment in a Region. In: Gastón O. Suvire (Ed.), Wind Farm -- Technical Regulations, Potential Estimation and Siting Assessment, Chapter 4, p. 97--114, InTech

Brower, M., Marcus, M., Taylor, M., Bernadett, D., Filippelli, M., Beaucage, P., Hale, E., Elsholz, K., Doane, J., Eberhard, M., Tensen, J., Ryan, D. (2010) Wind Resource Assessment Handbook. http://www.renewablenrgsystems.com/TechSupport/~/media/Files/PDFs/wind_resource_handbook.ashx

International Electrotechnical Commission (2005) IEC 61400-12 Wind Turbines -- Part 12-1: Power Performance Measurements of Electricity Producing Wind Turbines. IEC Standard

See Also

mast

Examples

Run this code
if (FALSE) {
## load and prepare data
data("winddata", package="bReeze")
set40 <- set(height=40, v.avg=winddata[,2], dir.avg=winddata[,14])
set30 <- set(height=30, v.avg=winddata[,6], dir.avg=winddata[,16])
set20 <- set(height=20, v.avg=winddata[,10], v.std=winddata[,13])
ts <- timestamp(timestamp=winddata[,1])
neubuerg <- mast(timestamp=ts, set40, set30, set20)
neubuerg <- clean(mast=neubuerg)


## calculate profile
# create profile based on one height
windprofile(mast=neubuerg, v.set=1, dir.set=1)	# default alpha=0.2
windprofile(mast=neubuerg, v.set=1, dir.set=1, alpha=0.15)

# calculate profile based on two heights
windprofile(mast=neubuerg, v.set=c(1,2), dir.set=1)
windprofile(mast=neubuerg, v.set=c(1,3), dir.set=1)
# same as above
windprofile(mast=neubuerg, v.set=c("set1", "set3"), dir.set="set1")

# calculate profile based on three heights
windprofile(mast=neubuerg, v.set=c(1,2,3), dir.set=1)

# change the method used for computation
# note: negative alphas!
windprofile(mast=neubuerg, v.set=c(1,2), dir.set=1, method="loglm")

# change number of direction sectors
windprofile(mast=neubuerg, v.set=c(1,2), dir.set=1, num.sectors=8)

# data subsets
windprofile(mast=neubuerg, v.set=1, dir.set=1, 
  subset=c("2009-12-01 00:00:00", "2009-12-31 23:50:00"))
windprofile(mast=neubuerg, v.set=c(1,2), dir.set=1, 
  subset=c("2010-01-01 00:00:00", NA)) # just 'start' time stamp
windprofile(mast=neubuerg, v.set=c(1:3), dir.set=1, 
  subset=c(NA, "2009-12-31 23:50:00")) # just 'end' time stamp

# change number of digits and hide results
windprofile(mast=neubuerg, v.set=1, dir.set=1, digits=2)
neubuerg.wp <- windprofile(mast=neubuerg, v.set=1, dir.set=1, print=FALSE)
neubuerg.wp


## plot profile objects
plot(neubuerg.wp)  # default
plot(neubuerg.wp, measured=FALSE)  # omit 'measured' points

# plot only one sector
plot(neubuerg.wp, sector=3)	# ENE by sector number
plot(neubuerg.wp, sector="ene")	# ENE by sector code
plot(neubuerg.wp, sector="all")	# general profile

# customize plot
plot(neubuerg.wp, bty="l", bty.leg="o", cex.axis=0.8, 
  cex.lab=0.9, cex.leg=0.7, col=rainbow(13), col.axis=gray(0.2), 
  col.box=gray(0.2), col.lab=gray(0.2), col.leg=gray(0.2), 
  col.ticks=gray(0.2), las=0, lty=c(rep(3,12),1), 
  lwd=c(rep(1.2,12), 1.7), mar=c(3,3,0.5,0.5), mgp=c(2,0.7,0), 
  pos.leg="right", xlab="velocity [m/s]", ylab="height [m]", 
  xlim=c(0,11), ylim=c(0,150), x.intersp=1, y.intersp=1.2)
}

Run the code above in your browser using DataLab