Challenges in designing TMD controller

Dear YingHao.Zhang,

I don’t see anything odd with your StC input file and the TMD mass is not large relative to the RNA mass (of 350,000 kg for the NREL 5-MW baseline wind turbine). Again, which DOF (or DOFs), when enabled, cause the model to go unstable?

Regarding the tower deflection (without TMD), this sounds as expected given that the thrust force will cause a downwind tilt (pitch) of the rotor.

Best regards,

Hi Jason,

I get an error when I enable the following three degrees of freedom, and when off, I can run with TMD (without my source code changes)

     FlapDOF1    - First flapwise blade mode DOF (flag)
     FlapDOF2    - Second flapwise blade mode DOF (flag)
     EdgeDOF     - First edgewise blade mode DOF (flag)

Best regards.

Dear YingHao.Zhang,

If you make the rotor rigid (by disabling the blade DOFs), is the response of the system stable (with reasonable platform-pitch displacement, tower deflection, and TMD displacement?

Does enabling just one of the blade DOFs cause the model to go unstable, or do you need all three blade DOFs enabled to induce the unstable response?

Best regards,

Hi Jason,

When I close these degrees of freedom(make the rotor rigid), the response of the system is stable.

When I open any of these, it causes an error.

     FlapDOF1    - First flapwise blade mode DOF (flag)
     FlapDOF2    - Second flapwise blade mode DOF (flag)
     EdgeDOF     - First edgewise blade mode DOF (flag)

Best regards.

Dear YingHao.Zhang,

I’m not sure; I’ve not seen such behavior before. It is not clear to me why enabling a blade DOF would introduce an instability when a TMD is included in the nacelle.

What I would do is perform a linearization analysis of the model and look at the eigensolution; if the model is truly physically unstable, eigenvalues for one or more modes should reveal negative damping. This may point to where adding damping to the model could eliminate the instability. (If the model is numerically unstable, I would think reducing the time step would solve the problem.) The linearization functionality of OpenFAST with TMDs enabled has been implemented, but has not yet been merged into the dev or main branches. If you don’t want to wait for that to happen, you could access the functionality from the source code in the pull request: github.com/OpenFAST/openfast/pull/803.

Best regards,

Hi Jason,

I found an interesting setting.

When I set NREloffSHRBsline5MW_ITIbarge4_Elastodyn.dat to(The default is “3”) : “2”
2 Method - Integration method: {1: RK4, 2: AB4, or 3: ABM4} (-)

I can open the first and third degrees of freedom (add passive TMD) :
FlapDOF1 - First flapwise blade mode DOF (flag)
FlapDOF2 - Second flapwise blade mode DOF (flag)
EdgeDOF - First edgewise blade mode DOF (flag)

Error still occurs when the second degree of freedom is opened.

I will keep trying.

Best regards.

Dear YingHao.Zhang,

So, it sounds like the numerical solution may have an influence on the stability after all. I asked a colleague at NREL and he suggested one thing to try is to add a correction step to the solve, that is, set NumCrctn = 1 in the OpenFAST primary (*.fst) input file. Does that resolve the instability?

Best regards,

Dear YingHao.Zhang,

Thank you for letting us know about the issue with a TMD on the tower with blade DOFs turned on. This does sound like it may be a solver instability as Jason.Jonkman mentioned. If so, adding a single correction step may clear it.

You may also be interested in a feature recently introduced into the StC module for active controls from a DLL controller. This is in a feature branch that has not been merged in yet, but can be found in both the pull request #803 that Jason.Jonkman previously mentioned, or in pull request #664. To use this feature, set StC_CMode==5 and assign a control channel group in the StC input file. You will want to turn on the ServoDyn summary file to see which controller channel numbers are then used for doing your controller. The summary file should then contain controller channel information in the summary file such as the following:

        2821     -->    SStC2                  StC control channel group 2 -- StC_Disp_X
        2822     -->    SStC2                  StC control channel group 2 -- StC_Disp_Y
        2823     -->    SStC2                  StC control channel group 2 -- StC_Disp_Z
        2824     -->    SStC2                  StC control channel group 2 -- StC_Vel_X
        2825     -->    SStC2                  StC control channel group 2 -- StC_Vel_Y
        2826     -->    SStC2                  StC control channel group 2 -- StC_Vel_Z
        2827     <--    SStC2                  StC control channel group 2 -- StC_Stiff_X (override spring  constant)
        2828     <--    SStC2                  StC control channel group 2 -- StC_Stiff_Y (override spring  constant)
        2829     <--    SStC2                  StC control channel group 2 -- StC_Stiff_Z (override spring  constant)
        2830     <--    SStC2                  StC control channel group 2 -- StC_Damp_X  (override damping constant)
        2831     <--    SStC2                  StC control channel group 2 -- StC_Damp_Y  (override damping constant)
        2832     <--    SStC2                  StC control channel group 2 -- StC_Damp_Z  (override damping constant)
        2833     <--    SStC2                  StC control channel group 2 -- StC_Brake_X (braking force)
        2834     <--    SStC2                  StC control channel group 2 -- StC_Brake_Y (braking force)
        2835     <--    SStC2                  StC control channel group 2 -- StC_Brake_Z (braking force)
        2836     <--    SStC2                  StC control channel group 2 -- StC_Force_X (additional force)
        2837     <--    SStC2                  StC control channel group 2 -- StC_Force_Y (additional force)
        2838     <--    SStC2                  StC control channel group 2 -- StC_Force_Z (additional force)
        2839     <--    SStC2                  StC control channel group 2 -- Reserved for future
        2840     <--    SStC2                  StC control channel group 2 -- Reserved for future

Regards,
Andy

Hi Jason, Andy

Thank you very much for your advice, which is really helpful to me.

The error was resolved, and two warnings followed, which I don’t know if affected the results.

Once again, thank you very much for your advice.

Best regards.

Dear YingHao.Zhang,

Those warnings about “an explicit-loose coupling scheme” are expected when adding a correction step. I’m glad that solved your problem.

Best regards,

Hi Jason

In servodyn.dat, you can set up dampers in four different positions. I was a little confused, when I added a damper to the nacelle reference point, whether I also needed to set StC LOCATION in servodyn_stc.dat. In other words, is the StC LOCATION set in servodyn_stc.dat for global or local coordinates?

Best regards.

Dear YingHao.Zhang,

For a nacelle-based structural controller (StC), the StC LOCATION specified in the StC input file is specified in the nacelle coordinate system, where (StC_P_X, StC_P_Y, StC_P_Z) = (0,0,0) is the yaw bearing.

Best regards,

Hi Jason

Thank you for your answer.

As you’ve said, in the nacelle coordinate system, where (StC_P_X, StC_P_Y, StC_P_Z) = (0,0,0) is the yaw bearing. I was wondering if a damper in the nacelle should be in a higher position (eg. Z>0).

I have another thought: I would like to use option “4” (existing force) in STC module, and thus achieving a constant force over time for the nacelle. Thus, when the floating wind turbine is stationary, the effect of tilting the wind turbine to an angle is realized in the simulation. Whether or not this idea is feasible?

Best regards.

Hi Jason

I conducted a test today to add a Prescribed force(stc module) in the nacelle.

My idea is to give a floating wind turbine an initial pitch of the platform while it’s still and let it swing, and apply the right amount of force to the nacelle (I want to apply it to the hub) and keep the floating wind turbine at an Angle(It is equivalent to the inclination Angle of the wind turbine unit under normal working conditions). But in my tests, I couldn’t achieve this effect no matter how much I adjusted the force. The state of the wind turbine does not change with or without the addition of this force.

Can I realize this idea by Prescribed force? Is there any other way I can implement my idea?

Best regards.
[*]
NACTimeForceSeries.txt (1.78 MB)

Dear YingHao.Zhang,

Yes, I would expect a nacelle-based TMD to be located above the yaw bearing with StC_P_Z > 0.

You should be able to apply a nacelle-based force through the StC module to pitch a floating wind turbine. I’m not sure why this is not working for you. Have you set StC_DOF_MODE = 4 in the nacelle-based StC input file? Have you enabled platform and/or tower DOFs in your ElastoDyn module?

Best regards,

Hi Jason

Today should be your holiday, and I wish you a merry Christmas! Thank you for solving my confusion during the holidays.

I tried to solve the problem of prescribed force and got an interesting phenomenon when I set the prescribed force to:

Time, Fx, Fy, Fz, Mx, My, Mz

(s) (N) (N) (N) (N-m) (N-m) (N-m)

0.0 2.0e5 0.0 0.0 0.0 0.0 0.0

I did a simplified model comparison, and I was pleasantly surprised to find that the force worked.

I now have a guess: the force that was applied at one point will continue to apply after that. I don’t know if I’m right, but I’ll keep trying.

Best regards.

Hi Jason

I found an interesting phenomenon when I applied the same amount of prescribed force to the nacelle (Simplified model, only initial perturbation).

The output is the same regardless of the time applied at any time. I found that the prescribed force would start to work at 0s, and only by changing the size of the force would different outputs appear. Although this situation meets my needs, I don’t know if this situation is reasonable.

Best regards.

Dear YingHao.Zhang,

Can you clarify what you are seeing?

Please note that if your prescribed load time series ends before the end of the simulation, the last values of the prescribed load will be applied for all remaining time.

Best regards,

Hi Jason,

I understand my question through your explanation, and now I have another problem.

When I impose two StC modules in nacelle position, one set into a single DOF damper (“1”), a set into a prescribed force (“4”). When they were added separately to the nacelle, they worked as expected. But when they are applied
simultaneously to the cabin, only one of them is effective. the module set in front of the other.

Eg: When I set it in ServoDyn.dat:
0 NumBStC - Number of blade structural controllers (integer)
“unused” BStCfiles - Name of the files for blade structural controllers (quoted strings)
2 NumNStC - Number of nacelle structural controllers (integer)
“StCNACPrescribedForce.dat” “NRELOffshrBsline5MW_ServoDyn_StC.dat” NstCfiles

Only prescribed force will work.

When I set it in ServoDyn.dat:
0 NumBStC - Number of blade structural controllers (integer)
“unused” BStCfiles - Name of the files for blade structural controllers (quoted strings)
2 NumNStC - Number of nacelle structural controllers (integer)
“NRELOffshrBsline5MW_ServoDyn_StC.dat” “StCNACPrescribedForce.dat” NstCfiles

Only TMD works.

I want both modules to work at the same time, but I haven’t done that yet. Can StC modules of different modes be implemented in the same location?

Best regards.

Dear YingHao.Zhang,

Which version of the OpenFAST code are you running?

There is a bug in the latest release and dev branch affecting how loads are applied when multiple nacelle StCs are present – only one gets applied. There is an update for the StC that will be merged into the dev branch later this week that corrects this issue (github.com/OpenFAST/openfast/pull/664).

Regards,
Andy