# Sandia method

The Sandia method (also known as Veers method) is a method for generating a turbulent wind profile that can be used in aero-elastic software to evaluate the fatigue imparted on a turbine in a turbulent environment. That is, it generates time series of wind speeds at a set of points on a surface, say the plane of the rotor of a wind turbine. Analysis is performed initially in the frequency domain, where turbulence can be described quantitatively with more ease than the time domain. Then, the time series are obtained by inverse fast Fourier transforms.
In its original form, the Sandia method only simulates the u-component of the wind; that is, the wind was modelled as propagating in a direction perpendicular to the plane of the rotor. Work carried out by NREL, specifically Kelley, suggested that a considerable amount of turbulent energy existed in the v-component (the v-component is parallel to both the plane of the rotor and the Earth). As such, the Sandia method was upgraded such that it included the v-component and w-component. Further upgrades have been performed such that the wind profile exhibits cross-axis correlation (turbulent fluctuations in one component being somehow connected to turbulent fluctuations in another). However, these are not considered in this article.

## Point-wind speed spectra

Although turbulence leads to unpredictable results in the time domain, it can, to some extent, be characterized in the frequency domain. Turbulent fluctuations are dominated by low frequency components, with higher frequency components having less influence. For further information, see Kolmogorov's theory on turbulence.
Several models of frequency domain representations of point wind speeds have been developed: the von Kármán wind turbulence model and Dryden Wind Turbulence Model are examples of such.

### Discretizing a spectrum

A spectrum in its original form is a continuous function. However, computer programmes operate on discrete functions. Thus a modification to whatever type of spectrum, be it Kaimal, von Karman, or some other spectrum, is needed. This is given below:
    $S(\omega _{k})=S(\omega =\omega _{k})\Delta \omega /2$
where $S(\omega _{k})$ is the discretized spectrum evaluated only at the discrete frequencies $\omega _{k}$, $S(\omega =\omega _{k})$ is the continuous spectrum evaluated at $\omega =\omega _{k}$ and $\Delta \omega$ is the size of the step between consecutive frequencies being considered.

## Coherence

When generating a time series of wind speeds for a set of points across a surface, coherence needs to be taken into account. That is, the instantaneous wind speed at some point, A, will bear some resemblance to the wind speed at some other point, B. Clearly, the resemblance is influenced by the separation of points A and B. That is, two points separated by a large distance will show less similarity to each other than two neighbouring points on the surface. In addition, one would expect low frequency components of the wind speeds at points A and B to show more correlation than high frequency components. As such, many coherence functions have been proposed: Davenport, Solari, etc. The Solari coherence spectrum is provided as an example:
    $Coh_{ijk}=\exp ^{-2C\Delta r_{ij}\omega _{k}/(u_{i}+u_{j})}$
where $C$ is a constant, $\Delta r_{ij}$ is the separation of points $i$ and $j$ on the surface, $\omega _{k}$ is the frequency, and $u_{i}$ and $u_{j}$ are the mean wind speeds at points $i$ and $j$ respectively. The indices $i$ and $j$ run from 1 to n, and the index $k$ covers the frequency range. From the coherence function stems the coherence matrix. To cover all relationships between all points, the coherence function must be an $n^{2}$-by-$n^{2}$-by-$\omega$ matrix. Clearly, the coherence matrix is symmetric about the main diagonal if we are restricting ourselves to looking at the coherence function at a single frequency. This is because the spatial separation between points A and B is the same as the spatial separation between B and A. That is, for a n-by-n grid, only $(n^{4}+n^{2})/2$ elements need to be calculated for each frequency.
It is worth noting at this point that whilst the coherence matrix is strictly a 3-dimensional matrix (i, j, and k), computer programmes which implement the Sandia method typically reduce the coherence matrix to a 2-dimensional matrix where the frequency dimension has been 'removed'. This is to ease computational requirements. A 2-dimensional matrix is also required to perform some of the actions on the spectral matrix, such as a Cholesky decomposition, which is mentioned later. Of course, variation in frequency is still applied. However, the following process is carried out in full for one given frequency before proceeding to the next frequency. As such, in the following section, a power spectrum refers to the value of the power spectrum at a given frequency and not the full set of values across the frequency range being used. That is,
    $Coh_{ijk}\rightarrow Coh_{ij}(\omega _{k})$
and
$S_{ijk}\rightarrow S_{ij}(\omega _{k})$
where an element of S, $S_{ijk}$ , would have given the strength of the spectrum at a particular frequency $\omega _{k}$ at a particular point in space.

## Generating turbulence

Power spectra are needed for each of the $n^{2}$ points on the surface; this encapsulates information about the turbulence intensity for each point. Under IEC standards, only one power spectrum is used; that is, all $n^{2}$ points have the same turbulence intensity.
With the power spectra, the spectral matrix can be formed. This a $n^{2}$-by-$n^{2}$ matrix. The main diagonal of the spectral matrix contains the previously defined spectra for all $n^{2}$ points on the surface. The off-main diagonal elements contain all the cross spectra between the points. The cross spectra are determined by the following function:
    $S_{ij}(\omega _{k})=Coh_{ij}(\omega _{k}){\sqrt {S_{ii}(\omega _{k})S_{jj}(\omega _{k})}}$
Due to the symmetry of the coherence matrix, only $(n^{4}+n^{2})/2$ elements are independent. This property can be exploited to lighten memory requirements when writing a programme to simulate the Sandia method.
The spectral matrix, $S(\omega _{k})$, can be written as the matrix product of a matrix, $H(\omega _{k})$, and its transpose. That is,
    $S(\omega _{k})=H(\omega _{k})H(\omega _{k})^{T}$
$H(\omega _{k})$ is ultimately needed to obtain the complex Fourier co-efficients of the Fourier transforms of the time series of the wind speeds at all the points on the surface. Note - if the Fourier transform of a time domain function, $x(t)$, is $X(\omega )$, then the resultant spectrum is $S(\omega )\propto X(\omega )X^{*}(\omega )$; for multiple time domain functions, the Fourier co-efficients can be stored in a matrix, which then means that the above equation is applicable.
Obviously, there are an infinite number of solutions to the above expression; consequently, the assumption that $H(\omega _{k})$ is a lower triangular matrix is made such that only one solution exists. The solution can be found via a Cholesky decomposition. The resultant $H(\omega _{k})$ matrix can be thought of as the weighting factors for the linear combination of N independent, unit-magnitude, white-noise inputs that will yield N correlated outputs with the correct spectral matrix.
To get the complex Fourier co-efficients associated with the Fourier transform of the time series of the wind speeds, a column vector, $V$ is obtained by multiply the $H(\omega _{k})$ matrix by a column vector containing $n^{2}$ values of Gaussian white noise, $X(\omega _{k})$, as shown below:
    $V(\omega _{k})=H(\omega _{k})X(\omega _{k})$
The column vector gives the Fourier co-efficients for all points on the grid at a given frequency. This is then built up into a two dimensional matrix which covers the complex Fourier co-efficients for all points across all frequencies. Then, an inverse fast Fourier transform is performed to get the time series. That is,
    $V_{i}(\omega _{k})\rightarrow V_{ik}$