How to reproduce five-height CERRA wind profiles as faithfully as possible in TurbSim/OpenFAST?

Hi all,

I am preparing environmental input data for my PhD research on offshore wind conditions in the Black Sea, with the intention of running simulations in OpenFAST/WEIS using the IEA 15 MW and IEA 22 MW reference turbines, including both fixed-bottom and floating configurations.

My wind dataset comes from CERRA and provides wind speed and direction at five heights:

100, 150, 200, 250 and 300 m

For each representative or extreme environmental scenario, I preserve the original values at all five heights and construct the corresponding vertical wind-speed and directional/veer profiles. I would like to avoid replacing these profiles with a simple generic power-law profile if TurbSim/OpenFAST can reproduce the actual CERRA vertical structure more faithfully.

My main question is:

What is the recommended way to make TurbSim/OpenFAST reproduce a prescribed five-height wind-speed and wind-direction profile as closely as possible?

In particular, I would appreciate advice on:

  • whether the five measured/reanalysis heights can be supplied directly as a user-defined vertical profile;
  • how TurbSim treats interpolation between the supplied heights;
  • how best to prescribe directional shear / wind veer together with the speed profile;
  • whether it is preferable to generate the full TurbSim wind field around the prescribed profile or to prepare the wind input externally;
  • and what validation checks you would recommend to confirm that the final OpenFAST inflow actually reproduces the intended CERRA profile.

The goal is to keep the 100–300 m CERRA information as the primary data, rather than fitting a generic atmospheric profile unless TurbSim requires it.

Any recommendations on the most defensible workflow for this would be greatly appreciated.

Dear @Petrov.Mihov,

You can specify your own wind profile (without fitting power law) via WindProfileType = “USR” option, which allows you to specify the mean wind speed and direction as a function of height in the user-defined ProfileFile. See the UserShear case of the CertTest in the TurbSim v2 archive for an example: https://www.nlr.gov/docs/libraries/wind-docs/turbsim_v2-00-07a-bjj-exe.exe?sfvrsn=aa667e46_1&download=true. TurbSim will use linear interpolation of the wind profile for points between those specified in the ProfileFile. The TurbSim summary file should report the profile used by TurbSim.

Best regards,

Dear Jason,

Thank you very much for the clarification. This was very helpful, and I have now checked the implementation against your recommendation.

I implemented these 5 profiles in TurbSim using WindProfileType = “USR”, rather than fitting a power-law profile. The five CERRA levels are supplied as the environmental profile, and TurbSim performs the interpolation between them. I also checked the generated TurbSim .sum files, which explicitly report: “Linear interpolation of user-defined profile”. Later verified this independently for both the IEA 15 MW and IEA 22 MW reference turbines. The wind speeds and height-dependent directions reported by TurbSim reproduce the supplied profiles correctly, including the hub-relative directional transformation.

An interesting issue arose because the computational wind grids do not always coincide with the vertical range of the environmental dataset. I therefore make an explicit distinction between the environmental validity domain (100–300 m) and the additional vertical extent required purely by the numerical model. Within 100–300 m, the profile is based on the actual CERRA values and TurbSim’s linear interpolation between the available levels. Outside this range I do not extrapolate the CERRA profile using a fitted shear law. Instead, where the TurbSim grid requires values below 100 m or above 300 m, I currently use constant nearest-boundary continuation:

U(z<100)=U(100), U(z>300)=U(300), >

with the corresponding boundary wind direction treated in the same way. I classify these values explicitly as model-imposed computational closure, rather than environmental data. This became particularly relevant when comparing the two reference turbines. For the IEA 15 MW case, the upper computational grid remains below 300 m (approximately 295 m), so the upper part of the grid remains within the CERRA-supported vertical domain. For the IEA 22 MW case, however, the required grid extends to approximately 335 m, meaning that the 300-335 m portion necessarily lies outside the available CERRA profile.

What I find scientifically interesting is that retaining the user-defined profile also preserves vertical directional variation (veer). A conventional single power-law representation would primarily reproduce the variation of wind-speed magnitude with height and could discard this directional structure. Using the USR profile therefore allows the original multi-height environmental information to be carried much more directly into the turbulent wind-field generation. I am treating the turbulence itself separately: the mean speed/direction profile is site-derived from CERRA, whereas the turbulent fluctuations are generated using the selected TurbSim/IEC turbulence model. I therefore distinguish in the methodology between environmental inputs, interpolation, computational closure, and turbulence-model assumptions rather than describing the complete .bts field as directly derived from CERRA.The resulting workflow is therefore:

CERRA multi-height wind data → USR profile → linear vertical interpolation → TurbSim turbulence generation → OpenFAST wind field

The remaining methodological question I am considering is the treatment outside the 100–300 m environmental validity range. Constant continuation is transparent and avoids inventing a site-specific shear trend unsupported by the available data, but it is nevertheless a modelling assumption. I would be very interested in your view on whether you consider this a reasonable computational closure for the limited portions of the TurbSim grid outside the available profile, or whether you would recommend another treatment. Thank you again. Your clarification on the USR option was very useful for confirming the methodology.

Dear @Petrov.Mihov,

Regarding the wind profile outside your measured data range, below 100 m, I would say it would preferred to assume some profile that brings the wind speed down to zero at ground level, as that is physically correct. Perhaps a simple linear interpolation from U(100) to 0 would be sufficient. Above 300 m, it is difficult to guess what would happen physically, so, your assumption of using the data at U(300) above sounds reasonable; linear extrapolation may be OK as well; either way, it is a guess.

Best regards,