Pitch natural frequency shift

Hi Jason
I was trying to model the semi-sub with turbulent wind. I found with turbulent wind+wave conditions, the platform pitch natural frequency has an offset. I have tried steady wind+wave, the natural frequency matches well with reference. According to my knowledge, the system natural frequency has nothing to do with the excitation. But i was wondering how it happens.


Besides, i have calculated the theoretic solution for RAO for the whole wind turbine without mooring. But when it comes to moored turbine, it seems there is a need to recalculate the center of gravity? i have no idea how to consider the mooring part, except the Fi^lines in the definition of the semisubmersible floating system.

Also for the turbsim, I generated full-field wind field with IECKAI model. I get the time series for wind velocity from turbsim as well as the output from inflowWind, I don’t know whether it is reasonable to have some bumps at f>2Hz. And the spectrum at low frequency is not quite flat. For f*Sw, there is not a significant peak. Is it reasonable?


Thank you for your dedicated help.

Best regards
Lulu

Dear @Lulu.Liu,

Regarding the change of pitch natural frequency with wind loads, I would guess this has to do with the thrust of the wind turbine causing a mean offset of the semi (e.g., in surge and pitch), which results in different mooring stiffness due to the geometric nonlinearity of the mooring system.

I’m not sure I understand your question regarding RAO without moorings.

Regarding your Turbsim results, the oscillations around the target spectrum are likely the result of resampling, e.g., not outputting the full time series (resulting in a different delta frequency) or a change in the time step between the TurbSim calculation and OpenFAST output.

Best regards,

Hi Jason
Thank you for your quick reply.

For the first questions, it means that the platform pitch natural frequency may vary when subjected to turbulent wind. Is it right?

About the turbine without mooring, I mean I calculated the center of gravity considering the platform,tower and tower-top mass and the mass matrix. Then i solve the equation of motion for RAO using the hydrodynamic coefficient from wamit output files. When it comes to the wind turbine with mooring system( to make the solution more accurate), I add the term Fi^lines, which includes the pretension force at the fairleads and restoring matrix from the literature" Definition of the Semisubmersible Floating System for Phase II of OC4". In this case, I think the wind turbine may have a new center of gravity,which means the mass matrix need modification? I feel that the turbine reach a new equilibrum state, but i have no idea how to solve it. From the plot, the heave response seems incorrect at very low frequenciws.

Yes, the delta frequency is the same. But the time step between the TurbSim calculation and OpenFAST output is different. But i cannot understand the strange bump starting from f=2Hz

Best regards

Dear @Lulu.Liu,

Regarding the first question, I would say the frequency changes because of the displacement of the floater and impact on the mooring stiffness. The displacement comes from the thrust load, whether from turbulent or steady wind.

Normally RAOs are computed with the full system mass matrix in its undisplaced condition, although, you could figure out the influence of the displaced condition on the matrices and compute RAOs about that. The moorings would influence the displaced condition, but you should not need to include the mooring mass in the full-system mass matrix because the mass contribution from the moorings is typically minimal.

Regarding the wind PSDs, my answer is unchanged.

Best regards,

Hi Jason,
Thank you. I solved my problem. I originally believe the center of platfrom and the tower would be different when with mooring system or without mooring system. But i realized that for the undisplaced position, the pretension at the fairleads balance the weight of the mooring line not resting on the seafloor in water. It seems the center of gravity for the whole system wouldn’t change and can be obtained through simple algebraic calculation. Thank you for your help.

Best regards

Hi Jason
When you say this, do you mean that the mooring stiffness matrix is a function of time, rather than a constant? I have seen some topics about obtaining the mooring stiffness matrix. Unlike the hydrodynamic coefficient which is a constant input from WAMIT, the mooring stiffness matrix is calculated by the relation between the load and the displacement of the platform. So it varies with time series? I am not sure my understanding is correct. I have chosen the moordyn in the glue-code, and didn’t find something i can do to change the output file format or output a summary file for the Moordyn. Currently the only output information is fairlead and anchor tension.

Best regards

Dear @Lulu.Liu,

I’m saying that the mooring stiffness can change with platform displacement due to the geometric nonlinearity of the mooring system.

Best regards,

Hi Jason
I was wondering in the Fast code mooring stiffness would change with platform displacement or it was only calculated once for the undisplaced position?

Best regards

Dear @Lulu.Liu,

Yes, if you’ve enabled one of the mooring modules in FAST / OpenFAST, the mooring stiffness will depend on floater displacement, which is why your results are as you’ve shown.

Best regards,

Dear Jason.Jonkman
I’m tring to plot PSD of wind generated by Turbsim, and compare it with ideal IECKAI model. I extract wind-time series of hub high from .u file, use MATLAB function “periodogram” to calculate its PSD, here is my MATLAB script:

%% plot PSD of Turbsim wind
path1 = 'D:\FAST\OPENFAST\r-test-master-2.4\test\5MW_Baseline\Wind\90m_12mps_twr.u';
[v, y, z, dt, ny, nz] = loadFFtxt(path1);
y_cor = find(y==0);
z_cor = find(z==90);
v_hub = v(:,y_cor,z_cor);
Fs = 1/dt;
N = length(v_hub);
[psdestx,Fxx] = periodogram(v_hub,rectwin(N),N*10,Fs);
loglog(Fxx,pow2db(psdestx),'b');
hold on;

%% plot PSD of ideal IECKAI mode
v_hub = 15;                                                                             %Mean wind speed of hub
Lk = 8.10*0.7*60;
sigma_k = 0.14*(0.75*v_hub+5.6);
f = (0.001:0.001:1);
s_k = 4*sigma_k^2*Lk/u_hub./(1+6.*f*Lk/u_hub).^(5/3);       %Kaimal PSD from IEC61400-1
loglog(f, s_k, 'r');
xlabel('Frequency(Hz)');
ylabel('Sw(m²/s²)');
legend({'Ideal IECKAI';'Turbsim result'});

here is my Turbsim setting:

TurbSim Input File. Valid for TurbSim v1.50; 17-May-2010; Example file that can be used with simulations for the NREL 5MW Baseline Turbine; note that UsableTime has been decreased in this file so that the file distributed with the FAST CertTest isn't as large

---------Runtime Options-----------------------------------
13428          RandSeed1       - First random seed  (-2147483648 to 2147483647)
RanLux         RandSeed2       - Second random seed (-2147483648 to 2147483647) for intrinsic pRNG, or an alternative pRNG: "RanLux" or "RNSNLW"
False          WrBHHTP         - Output hub-height turbulence parameters in binary form?  (Generates RootName.bin)
True          WrFHHTP         - Output hub-height turbulence parameters in formatted form?  (Generates RootName.dat)
False          WrADHH          - Output hub-height time-series data in AeroDyn form?  (Generates RootName.hh)
True           WrADFF          - Output full-field time-series data in TurbSim/AeroDyn form? (Generates RootName.bts)
False          WrBLFF          - Output full-field time-series data in BLADED/AeroDyn form?  (Generates RootName.wnd)
True           WrADTWR         - Output tower time-series data? (Generates RootName.twr)
True           WrFMTFF         - Output full-field time-series data in formatted (readable) form?  (Generates RootName.u, RootName.v, RootName.w)
False          WrACT           - Output coherent turbulence time steps in AeroDyn form? (Generates RootName.cts)
False           Clockwise       - Clockwise rotation looking downwind? (used only for full-field binary files - not necessary for AeroDyn)
0              ScaleIEC        - Scale IEC turbulence models to exact target standard deviation? [0=no additional scaling; 1=use hub scale uniformly; 2=use individual scales]

--------Turbine/Model Specifications-----------------------
 31            NumGrid_Z       - Vertical grid-point matrix dimension
 31            NumGrid_Y       - Horizontal grid-point matrix dimension
0.05         TimeStep        - Time step [seconds]
600          AnalysisTime    - Length of analysis time series [seconds]
600          UsableTime      - Usable length of output time series [seconds] (program will add GridWidth/MeanHHWS seconds) [bjj: was 630]
90.0          HubHt           - Hub height [m] (should be > 0.5*GridHeight)
145.0          GridHeight      - Grid height [m]
145.0          GridWidth       - Grid width [m] (should be >= 2*(RotorRadius+ShaftLength))
  0            VFlowAng        - Vertical mean flow (uptilt) angle [degrees]
  0            HFlowAng        - Horizontal mean flow (skew) angle [degrees]

--------Meteorological Boundary Conditions-------------------
IECKAI         TurbModel       - Turbulence model ("IECKAI"=Kaimal, "IECVKM"=von Karman, "GP_LLJ", "NWTCUP", "SMOOTH", "WF_UPW", "WF_07D", "WF_14D", or "NONE")
"1-ed3"        IECstandard     - Number of IEC 61400-x standard (x=1,2, or 3 with optional 61400-1 edition number (i.e. "1-Ed2") )
"B"            IECturbc        - IEC turbulence characteristic ("A", "B", "C" or the turbulence intensity in percent) ("KHTEST" option with NWTCUP, not used for other models)
NTM            IEC_WindType    - IEC turbulence type ("NTM"=normal, "xETM"=extreme turbulence, "xEWM1"=extreme 1-year wind, "xEWM50"=extreme 50-year wind, where x=wind turbine class 1, 2, or 3)
default        ETMc            - IEC Extreme turbulence model "c" parameter [m/s]
PL             WindProfileType - Wind profile type ("JET"=Low-level jet,"LOG"=Logarithmic,"PL"=Power law, or "default", or "USR"=User-defined)
80.           RefHt           - Height of the reference wind speed [m]
15         URef            - Mean (total) wind speed at the reference height [m/s]
default        ZJetMax         - Jet height [m] (used only for JET wind profile, valid 70-490 m)
default        PLExp           - Power law exponent [-] (or "default")
default        Z0              - Surface roughness length [m] (or "default")

--------Non-IEC Meteorological Boundary Conditions------------
default        Latitude        - Site latitude [degrees] (or "default")
0           RICH_NO         - Gradient Richardson number
default        UStar           - Friction or shear velocity [m/s] (or "default")
default        ZI              - Mixing layer depth [m] (or "default")
default        PC_UW           - Hub mean u'w' Reynolds stress [(m/s)^2] (or "default")
default        PC_UV           - Hub mean u'v' Reynolds stress [(m/s)^2] (or "default")
default        PC_VW           - Hub mean v'w' Reynolds stress [(m/s)^2] (or "default")
default        IncDec1         - u-component coherence parameters (e.g. "10.0  0.3e-3" in quotes) (or "default")
default        IncDec2         - v-component coherence parameters (e.g. "10.0  0.3e-3" in quotes) (or "default")
default        IncDec3         - w-component coherence parameters (e.g. "10.0  0.3e-3" in quotes) (or "default")
default        CohExp          - Coherence exponent (or "default")

--------Coherent Turbulence Scaling Parameters-------------------
"M:\coh_events\eventdata"  CTEventPath     -   Name of the path where event data files are located
"Random"       CTEventFile     - Type of event files ("random", "les" or "dns")
true           Randomize       - Randomize disturbance scale and location? (true/false)
 1.0           DistScl         - Disturbance scale (ratio of dataset height to rotor disk).
 0.5           CTLy            - Fractional location of tower centerline from right (looking downwind) to left side of the dataset.
 0.5           CTLz            - Fractional location of hub height from the bottom of the dataset.
10.0           CTStartTime     - Minimum start time for coherent structures in RootName.cts [seconds]

==================================================
NOTE: Do not add or remove any lines in this file!
==================================================

here is my Matlab result:


I have no idea about Why these two curves trending differently, could you give me some suggestions?

Best regards,
Jiantao

Dear @Jiantao.Liu

One issue I see is that you’ve set v_hub to 15 m/s, but in TurbSim, you define URef = 15 m/s at RefHt = 80 m, which differs from the HubHt of 90 m, so, the wind speed at HubHt will be higher as a result of the shear.

Best regards,

Dear Jason.Jonkman

Thank you for your reply. I correct this issue, here is the new Turbsim setting:

TurbSim Input File. Valid for TurbSim v1.50; 17-May-2010; Example file that can be used with simulations for the NREL 5MW Baseline Turbine; note that UsableTime has been decreased in this file so that the file distributed with the FAST CertTest isn't as large

---------Runtime Options-----------------------------------
13428          RandSeed1       - First random seed  (-2147483648 to 2147483647)
RanLux         RandSeed2       - Second random seed (-2147483648 to 2147483647) for intrinsic pRNG, or an alternative pRNG: "RanLux" or "RNSNLW"
False          WrBHHTP         - Output hub-height turbulence parameters in binary form?  (Generates RootName.bin)
True          WrFHHTP         - Output hub-height turbulence parameters in formatted form?  (Generates RootName.dat)
False          WrADHH          - Output hub-height time-series data in AeroDyn form?  (Generates RootName.hh)
True           WrADFF          - Output full-field time-series data in TurbSim/AeroDyn form? (Generates RootName.bts)
False          WrBLFF          - Output full-field time-series data in BLADED/AeroDyn form?  (Generates RootName.wnd)
True           WrADTWR         - Output tower time-series data? (Generates RootName.twr)
True           WrFMTFF         - Output full-field time-series data in formatted (readable) form?  (Generates RootName.u, RootName.v, RootName.w)
False          WrACT           - Output coherent turbulence time steps in AeroDyn form? (Generates RootName.cts)
False           Clockwise       - Clockwise rotation looking downwind? (used only for full-field binary files - not necessary for AeroDyn)
0              ScaleIEC        - Scale IEC turbulence models to exact target standard deviation? [0=no additional scaling; 1=use hub scale uniformly; 2=use individual scales]

--------Turbine/Model Specifications-----------------------
 31            NumGrid_Z       - Vertical grid-point matrix dimension
 31            NumGrid_Y       - Horizontal grid-point matrix dimension
0.05         TimeStep        - Time step [seconds]
600          AnalysisTime    - Length of analysis time series [seconds]
600          UsableTime      - Usable length of output time series [seconds] (program will add GridWidth/MeanHHWS seconds) [bjj: was 630]
90.0          HubHt           - Hub height [m] (should be > 0.5*GridHeight)
145.0          GridHeight      - Grid height [m]
145.0          GridWidth       - Grid width [m] (should be >= 2*(RotorRadius+ShaftLength))
  0            VFlowAng        - Vertical mean flow (uptilt) angle [degrees]
  0            HFlowAng        - Horizontal mean flow (skew) angle [degrees]

--------Meteorological Boundary Conditions-------------------
IECKAI         TurbModel       - Turbulence model ("IECKAI"=Kaimal, "IECVKM"=von Karman, "GP_LLJ", "NWTCUP", "SMOOTH", "WF_UPW", "WF_07D", "WF_14D", or "NONE")
"1-ed3"        IECstandard     - Number of IEC 61400-x standard (x=1,2, or 3 with optional 61400-1 edition number (i.e. "1-Ed2") )
"B"            IECturbc        - IEC turbulence characteristic ("A", "B", "C" or the turbulence intensity in percent) ("KHTEST" option with NWTCUP, not used for other models)
NTM            IEC_WindType    - IEC turbulence type ("NTM"=normal, "xETM"=extreme turbulence, "xEWM1"=extreme 1-year wind, "xEWM50"=extreme 50-year wind, where x=wind turbine class 1, 2, or 3)
default        ETMc            - IEC Extreme turbulence model "c" parameter [m/s]
PL             WindProfileType - Wind profile type ("JET"=Low-level jet,"LOG"=Logarithmic,"PL"=Power law, or "default", or "USR"=User-defined)
90.           RefHt           - Height of the reference wind speed [m]
15         URef            - Mean (total) wind speed at the reference height [m/s]
default        ZJetMax         - Jet height [m] (used only for JET wind profile, valid 70-490 m)
default        PLExp           - Power law exponent [-] (or "default")
default        Z0              - Surface roughness length [m] (or "default")

--------Non-IEC Meteorological Boundary Conditions------------
default        Latitude        - Site latitude [degrees] (or "default")
0           RICH_NO         - Gradient Richardson number
default        UStar           - Friction or shear velocity [m/s] (or "default")
default        ZI              - Mixing layer depth [m] (or "default")
default        PC_UW           - Hub mean u'w' Reynolds stress [(m/s)^2] (or "default")
default        PC_UV           - Hub mean u'v' Reynolds stress [(m/s)^2] (or "default")
default        PC_VW           - Hub mean v'w' Reynolds stress [(m/s)^2] (or "default")
default        IncDec1         - u-component coherence parameters (e.g. "10.0  0.3e-3" in quotes) (or "default")
default        IncDec2         - v-component coherence parameters (e.g. "10.0  0.3e-3" in quotes) (or "default")
default        IncDec3         - w-component coherence parameters (e.g. "10.0  0.3e-3" in quotes) (or "default")
default        CohExp          - Coherence exponent (or "default")

--------Coherent Turbulence Scaling Parameters-------------------
"M:\coh_events\eventdata"  CTEventPath     -   Name of the path where event data files are located
"Random"       CTEventFile     - Type of event files ("random", "les" or "dns")
true           Randomize       - Randomize disturbance scale and location? (true/false)
 1.0           DistScl         - Disturbance scale (ratio of dataset height to rotor disk).
 0.5           CTLy            - Fractional location of tower centerline from right (looking downwind) to left side of the dataset.
 0.5           CTLz            - Fractional location of hub height from the bottom of the dataset.
10.0           CTStartTime     - Minimum start time for coherent structures in RootName.cts [seconds]

==================================================
NOTE: Do not add or remove any lines in this file!
==================================================

And here is the new matlab result:


We can find that at 10^-3 Hz, The trajectories of the two curves are still inconsistent. I see s(f) has been called “velocity spectra” in 《Turbsim User Guide》, Is there a difference between velocity spectrum and PSD? I also wonder if the problem is with my incorrect usage of Matlab function ‘periodogram’?

Best regards,
Jiantao

Dear @Jiantao.Liu,

Yes, by “velocity spectra”, the TurbSim User’s Guide means PSD of the velocity time series.

I have not used the MATLAB function periodogram myself, but you could see if a simpler PSD function produces different results, e.g., you can use my script that calculates the PSD directly via FFT without windowing (but with optional binning to smooth the PSD). This script, Jason_PSD.m can be found in the following forum post: User defined spectrum from routine UserWaveSpctrm in HydroDYn - #7 by Jason.Jonkman.

Best regards,

Dear Jason.Jonkman

Thank you very much for your script, after using your scirpt, I get a ideal result.

Best regards,
Jiantao

1 Like

Dear @Jason.Jonkman

Thank you for your MATLAB script again. Now i’m tring to understand the calculation process of this script, and i’m confusing about line 44:

Somega2 = ( Data_fft/N ).*( conj( Data_fft/N ) )/domega;

“Data_fft” is the result of the Fourier transform of the original signal, in my opinion “Data_fft.* conj( Data_fft)” is the total energy of the time series, “N*domega” is the frequency bandwith, PSD should be calculated by total energy devide frequency bandwith:

Somega2 = ( Data_fft).* ( conj( Data_fft ) )./(N*domega);

Could you explain the calculation principle of the line 44?

Best regards,
Jiantao

Dear @Jiantao.Liu,

The 1/N factor on Data_fft comes because of the definition of function fft used by MATLAB. (Different FFT definitions put the 1/N factor in different places.)

The energy is computed for each frequency component, so, domega is necessary rather than N*domega.

Best regards,

Dear @Jason.Jonkman

Thank you for your reply again! After carefully reading the matlab related documentation, I figured out why I was wrong before. I mistook “domega” for signal sampling frequency “Fs”, so the real PSD calculate function should be:

Somega2 = ( Data_fft ).* ( conj( Data_fft ) )/(N*Fs)

Because domega=Fs/N, So the above formula can be changed to the following form:

Somega2 = ( Data_fft ).* ( conj( Data_fft ) )/(N^2*domega)

The formula is the same as the formula in the script.

Best regards,
Jiantao

Dear @Jiantao.Liu,

I’m not understanding why you say domega = Fs/N. I would say, domega = 2 * pi * df, where df is the frequency step in Hz (and domega is in rad/s). df equals 1/tmax, where tmax is the simulation length in seconds.

Best regards,

Dear @Jason.Jonkman

I’m sorry about my mistake, The correct formula would be domega = 2* pi *N ./Fs, In my script N is data length, Fs is sampling frequency, so Fs devide N is equal to 1/tmax.

Best regards,
Jiantao

Dear @Jiantao.Liu,

I see. You mean Fs = 1/dt, where dt is the time step, which differs from the df of the FFT.

Best regards,