PTDM implementation

Dear @Emanuel.Rergis,

The dimensions of the nacelle (length, width, height) were never specified for the NREL 5-MW baseline wind turbine. You’ll have to make your own assumptions for your own purposes.

Best regards,

Dear Dr @Jason.Jonkman:

After ten months of arduous study of the physical characteristics of TMDs and PTMDs, I return to you. Apparently, after everything I’ve seen, I’m afraid I’ll have to modify the source code in the structural control part. Where in the program files or glue codes can I access that code? Who can I contact to obtain these codes in case they are unavailable for alteration in my OpenFAST glue codes?

Thank you very much.
Best wishes.
Emanuel M. Rergis

Dear @Emanuel.Rergis,

The structural control source files are included with the rest of the OpenFAST source code in the OpenFAST repository on GitHub. You can find the structural control source files specifically with the other source files of ServoDyn here: openfast/modules/servodyn/src at main · OpenFAST/openfast · GitHub.

Best regards,

Thank you very much, @Jason.Jonkman. Another question: Is the language used in the OpenFAST source codes Fortran? Can I change the files in the repository on GitHub directly?
Thanks again.
Kind regards.
Emanuel M. Rergis

Dear @Emanuel.Rergis,

The OpenFAST source code is predominately modern Fortran, but there are other languages used in places such as Python and C. That said, the structural control source files are Fortran-based.

You wouldn’t have write permission to change files directly within repository, but you could change local copies, or if you prefer to use Git, you could create a fork of the OpenFAST repository and change the files in your local repository. The latter would be required if you intended to submit the changes back into the NREL repository. For the latter, documentation on the how to contribute to OpenFAST development is provided here: 5. Developer Documentation — OpenFAST v3.5.2 documentation.

Best regards,

Thank you very much Dr. @Jason.Jonkman, for your reply. The following might be a silly question, but I don’t manage to understand if OpenFast is relating the wave height to wind speed and water depth. Or are those parameters independent? One more thing: how can I determine if the value I have is reasonable for the wind speed (mean value: 12m/s) and water depth in my simulations? Please find attached the corresponding plot.

Thank you very much.
Kind regards.
Emanuel

Dear @Emanuel.Rergis,

The wind speed, wave height, and water depth are set independently in OpenFAST; it is up the user to specify “reasonable” values. Typically you’d be running OpenFAST for a set of load-case simulations that cover the range of possible conditions experienced by the offshore wind turbine, whereby the wind speeds and wave heights/periods would be taken from a metocean design basis that is dependent on the installation site, for example, the joint probability distribution of wind speed, wave height, and wave period.

Best regards,

Thank you very much Dr @Jason.Jonkman. I’m so sorry to bother you again. This time, I’m trying to implement multiple tuned mass dampers throughout the tower. Let’s say for example, that I want 2 of them acting in the fore-aft direction, the first one allocated at 30m from the SWL (still water level) and the other one at 60m from the same reference point.

  1. Should I write in the blue-dotted line section the number 2 and deactivate the previous two lines?
  2. What is the proper syntax to name the corresponding ServoDyn_StC.dat files, provided that there might be more than one?
  3. Is the black-dotted line section the right place to define where the TMD will be allocated? If this is so, can I write these 2 values (30, 60) or do I need to create another file for the second TMD (60m)?
    Please, find attached some snapshots.

Thank you very much.
Kind regards!
Emanuel

Dear @Emanuel.Rergis,

If you want to place two TMDs at different heights in the tower, you should set NumNStC = 0 and NumTStC = 2 and use two different StC files, one for the lower and one for the upper TMD. Each StC file should have a unique name and both names should be specified via TStCfiles. The following r-test provides an example you could follow: r-test/glue-codes/openfast/StC_test_OC4Semi at main · OpenFAST/r-test · GitHub.

Best regards,

Dear Dr @Jason.Jonkman :slight_smile:
Thanks a lot for your reply. I have made the sensible changes, and now I’m getting this (please find attached the snapshot). Apparently, there’s a mistake in the AeroDyn15 file or in the ElastoDyn file. Unfortunately, I can’t spot where the error is coming from. Could you advise me on what to do?.

Kind Regards!


AeroDyn15
ElastoDyn

Emanuel

Dear @Emanuel.Rergis,

This error is in reference to a mesh-mapping error between the StC within ServoDyn and the tower in ElastoDyn. It appears that you are trying to locate the StC outside the range of the tower, which OpenFAST does not know how to map. I would guess the error is in the setting of StC_P_Z within the StC input file, which should be between 0 (to locate the StC at the tower base) and 77.6 (to locate StC at the tower top).

Best regards,

Thank you for your reply, Dr. @Jason.Jonkman. I changed the location of the StC, and the simulation ran as expected. Now, I’m trying to use some time-force series to emulate a Pendulum-tuned Mass Damper. I saw in this forum that some users have successfully used this option via SStCfiles. Can this be done through NStCfiles? Are these files the same as those from the Prescribed Time Series section in the Servo_Dyn_StC module?

Thank you, once again for your help and advice.
Best regards!
Emanuel

Dear @Emanuel.Rergis

The same Structural Control (StC) submodel of ServoDyn is used for the blades, nacelle, tower, and substructure. You can define as many StCs as you want and place them wherever you want. Really the only difference between these is the reference origin/coordinate system of the StC, which differs for the blade-, nacelle-, tower-, and substructure-based StCs.

Best regards,

Thank you very much Dr. @Jason.Jonkman. Your information is, as always, very helpful. Now I’m trying to implement 4 TMD in my model (3 throughout the tower and 1 in the nacelle). Unfortunately, I get the following error (see the snapshot).

I’m also attaching the values I used for the TMDs. What can I do to solve this problem?
Thanks once again and best regards.
Emanuel




Dear @Emanuel.Rergis,

Well, it looks like your model is numerically unstable. Does your model remain stable if you only have one TMD enabled? How about two or three? Is there a specific TMD that is causing the problem? Does reducing overall simulation time step (DT) or adding a correction step (NumCrctn > 0) solve the issue?

Best regards,

Hi again, Dr. @Jason.Jonkman. Thank you for your reply. The model becomes stable again if I enable just one TMD in the nacelle. According to what I realised, TMD2 and TMD3 are the ones causing this problem, but they do it for values higher than 2%. My overall simulation time step is 0.05 right now. How much would you advise me to reduce it? One more thing: what number could you recommend for NumCrctn? Thanks a lot once again.

Kind regards!
Emanuel

Dear @Emanuel.Rergis,

What do you mean when you say?:

I would try reducing DT by a factor of 2, and if that doesn’t work, try another factor of 2. If NumCrctn is currently zero, I would first try NumCrctn = 1, and if that doesn’t work, try 2.

Best regards,

Thanks for your advice, Dr. @Jason.Jonkman. What I meant was that the system becomes unstable when I add 2 or 3 TMDs throughout the tower, which have values ​​greater than 2% of the total mass value of the tower, nacelle, and blades. On the other hand, the TMD in the nacelle does not cause any instability. When the TMDs in the tower are less than 2% of the system’s total mass, there is no instability either. I’m sorry I wasn’t clear in my previous comment. Thank you very much; your information is invaluable.

Best regards for you!
Emanuel

Dear @Emanuel.Rergis,

Does the solution work if you have one TMD in the tower and one in the nacelle?

I can certainly foresee potential issues with the coupling between the StC submodel of ServoDyn with other OpenFAST modules (such as ElastoDyn) if the TMD mass is sizeable (more than 2%) of the full-system mass.

Let me know if reducing DT or increasing NumCrctn solves the issue.

Best regards,

Dear Dr @Jason.Jonkman:

Thank you for your comments. The solution is unnecessary for one TMD in the tower and one in the nacelle. Actually, the system works well without it. The solution becomes necessary when a second TMD with a sizeable mass of more than 2% is installed. I didn’t change the DT value because that would mean more computational time, so I increased NumCrctn to 2 instead of 0. After this, the simulation ran without problems.
I need to ask you some more questions: I’m trying to analyse the performance of these TMDs under hydrodynamic loads only. For that sake, I’ll need to run a large simulation (maybe 86400s, which is 24 hours).

  1. What is the maximum value of WaveTmax that I can use?
  2. Should I set this value to 86400s? Wouldn’t OpenFAST collapse?
  3. I understand that if my WaveTmax value is less than the simulation time, the wave data will repeat every WaveTMax seconds. Is this assumption correct? Would my simulations be reliable if this repetition occurs? It is important to point out that I’m trying to eliminate transient responses that take place during the first 20-50 seconds of my simulations, and I’m afraid they could repeat if I allow this wave data to repeat. Am I right?