OpenFAST / openfast

Main repository for the NREL-supported OpenFAST whole-turbine and FAST.Farm wind farm simulation codes.
http://openfast.readthedocs.io
Apache License 2.0
691 stars 458 forks source link

Tower Strike in Openfast/3.1.0 #1507

Open Violinde01 opened 1 year ago

Violinde01 commented 1 year ago

Hi all, I'm comparing the behavior of a floating and a bottom-fixed wind turbine in OpenFAST. However, for both the UMaine Semi-Submersible and for the Monopile, I get the same error after a short simulation time, being 'Tower Strike'. I somewhere read that this issue could be solved by disabling TwSSDOF2 and TwFADOF2, but the error still remains (even when also disabling TwSSDOF1 and TwFADOF1). I'm using the input files as given here (https://github.com/IEAWindTask37/IEA-15-240-RWT/tree/master/OpenFAST), using OpenFAST/3.1.0. Does anyone have an idea where this error could come from? Thanks in advance, Violinde.

jjonkman commented 1 year ago

Dear @Violinde01,

Tower deflections are typically small, so, I would not expect that disabling the tower degrees of freedom in ElastoDyn would eliminate a tower strike error.

And I would not expect the IEA Wind 15-MW reference wind turbine models to trigger a tower strike error if set up properly. Can you clarify what you changed in the OpenFAST model from the IEA Wind 15-MW reference wind turbine GitHub repository? Is active turbine control enabled? Have you set proper initial conditions on rotor speed and blade-pitch angles for the given wind condition you are simulating?

Best regards,

Violinde01 commented 1 year ago

Hi @jjonkman,

Thanks a lot for the quick reply! The main difference between my case and the one at the GitHub is in the inflow-file: I'm not using InflowWind, but instead I'm using an external software to simulate weather conditions. This coupling is working well when I disable ServoDyn. However, I'm now trying to find the differences in flow field and power output for a bottomfixed and a floating wind turbine, but the results are exactly the same if I'm not using ServoDyn. I actually don't understand why, because the UMaine Semi does give reasonable platform motions in all directions but it does not influence the flow field nor the power output. It seems like the rotor does not feel the movements....? I would expect a higher turbulence for the UMaine compared to the Monopile, right?

Best, Violinde.

jjonkman commented 1 year ago

Hi @Violinde01,

I'm not really following. It sounds like you changed the OpenFAST source code, replacing InflowWind with something else to provide OpenFAST with ambient wind data; is that correct?

When disabling ServoDyn, presumably you are disabling the generator degree of freedom in ElastoDyn (GenDOF = False); is that correct? (Otherwise, the generator/rotor would likely overspeed in the absence of pitch and torque control.) When you enable ServoDyn, are you enabling the generator DOF in ElastoDyn (GenDOF = True)?

I'm not sure what you changed in OpenFAST, but when InflowWind is enabled, AeroDyn does use the relative wind velocity (ambient wind velocity minus structural velocity) in its aerodynamic load calculations. The structural velocity here includes both elasticity of the blades/tower, and rigid-body motion from rotor rotation, floater motion, etc.

Best regards,

Violinde01 commented 1 year ago

Hi @jjonkman, I'm sorry for being unclear. Indeed, you are right about the ambient wind data (CompInflow=2).

The goal is to compare the flow field and the power output for a floating wind turbine (UMaine Semi) and for a bottom-fixed wind turbine (Monopile) under the same inflow conditions. I'm now using a uniform input velocity profile. Both simulations run without errors. However, the obtained results are exactly the same, so I definitely disabled some degrees of freedom or modules that I should not. The platform degrees of freedom are enabled and the obtained platform motions are reasonable. I would expect a different result for the different cases, for example in turbulence intensity around the turbine.

For the floating turbine I enabled the following modules in the .fst file: 1 CompElast - Compute structural dynamics (switch) {1=ElastoDyn; 2=ElastoDyn + BeamDyn for blades}
2 CompInflow - Compute inflow wind velocities (switch) {0=still air; 1=InflowWind; 2=external from OpenFOAM} 2 CompAero - Compute aerodynamic loads (switch) {0=None; 1=AeroDyn v14; 2=AeroDyn v15} 0 CompServo - Compute control and electrical-drive dynamics (switch) {0=None; 1=ServoDyn} 1 CompHydro - Compute hydrodynamic loads (switch) {0=None; 1=HydroDyn} 0 CompSub - Compute sub-structural dynamics (switch) {0=None; 1=SubDyn; 2=External Platform MCKF} 3 CompMooring - Compute mooring system (switch) {0=None; 1=MAP++; 2=FEAMooring; 3=MoorDyn; 4=OrcaFlex} 0 CompIce - Compute ice loads (switch) {0=None; 1=IceFloe; 2=IceDyn} 0 MHK - MHK turbine type (switch) {0=Not an MHK turbine; 1=Fixed MHK turbine; 2=Floating MHK turbine} I disabled all degrees of freedom, except for the six platform DOF's.

For the fixed turbine, I enabled these modules in the .fst file: 1 CompElast - Compute structural dynamics (switch) {1=ElastoDyn; 2=ElastoDyn + BeamDyn for blades} 2 CompInflow - Compute inflow wind velocities (switch) {0=still air; 1=InflowWind; 2=external from OpenFOAM} 2 CompAero - Compute aerodynamic loads (switch) {0=None; 1=AeroDyn v14; 2=AeroDyn v15} 0 CompServo - Compute control and electrical-drive dynamics (switch) {0=None; 1=ServoDyn} 0 CompHydro - Compute hydrodynamic loads (switch) {0=None; 1=HydroDyn} 0 CompSub - Compute sub-structural dynamics (switch) {0=None; 1=SubDyn; 2=External Platform MCKF} 0 CompMooring - Compute mooring system (switch) {0=None; 1=MAP++; 2=FEAMooring; 3=MoorDyn; 4=OrcaFlex} 0 CompIce - Compute ice loads (switch) {0=None; 1=IceFloe; 2=IceDyn} I disabled all degrees of freedom in the ElastoDyn file.

Which degrees of freedom should I enable to see a difference between the Monopile and the UMaine Semi? Or should I enable ServoDyn?

Hopefully I described the problem clearly right now. Thanks a lot in advance, Violinde.

jjonkman commented 1 year ago

Dear @Violinde01,

Regarding CompInflow = 2, does this mean you are using OpenFAST coupled to a CFD solver, such as SOWFA or AMR-Wind? Or you have coupled OpenFAST to your own flow solver?

Your floating settings look reasonable for the case with fixed rotor speed and only the 6 rigid-body motion DOFs enabled.

Your fixed settings don't look reasonable for the monopile, unless you want a full rigid support structure (and, again, a fixed rotor speed). To model the actual monopile, I would expect that you'd set CompHydro = 1 to enable HydroDyn, set CompSub = 1 to enable SubDyn, and enable all 6 platform DOFs in ElastoDyn to enable coupling between ElastoDyn and SubDyn (but then the support structure would no longer be rigid).

Can you clarify what you mean when you say the results are "exactly the same"; what results are you speaking about? (You also mentioned reasonable platform motions, so, these must be different between the two cases.) I would also expect the floater motions to impact the aerodynamic loads. Can you clarify how you are computing turbulence intensity (via which OpenFAST output)?

Best regards,

Violinde01 commented 1 year ago

Hi @jjonkman,

Thanks a lot for your elaborate reply, your suggestions greatly improved my model.

One question about the example cases on the GitHub: when I copy paste the files and run the simulations for the Monopile and for the UMaine Semi, I obtain the following power curves: image Are these curves correct for the example case on the GitHub? And if so, could you maybe explain to me why the power is going to zero? I would expect a power of ~13 MW (obtained from the power curve), since the velocity equals 10 m/s. I did not change anything from the files in the GitHub, except the DISCON.dll file, since I'm running on Windows. If the curves are not correct, I know that my compiled .dll file is incorrect.

I'm sorry for the confusion; from now on I will first run the files with CompInflow=1 so that we understand each other. I coupled OpenFAST to a LES model, which is able to compute the flow field behind the rotor, and thus also the turbulence intensity and velocity deficit. These are the values I were referring to, but of course you couldn't know.... Sorry!

Best, Violinde.

jjonkman commented 1 year ago

Dear @Violinde01,

I agree that a 10 m/s, the IEA Wind 15-MW reference turbine should generate a power closer to 13 MW. I'm not sure why your results are not what you are expecting. What are the rotor speed and blade-pitch doing? You mention changing the controller DLL; are you not using the Windows controller DLL of ROSCO provided here: https://github.com/IEAWindTask37/IEA-15-240-RWT/tree/master/OpenFAST/IEA-15-240-RWT/ServoData?

Best regards,

Violinde01 commented 1 year ago

Hi @jjonkman,

I'm not using the files provided in the github because I'm running on a 64-bit machine and the files seems to be for a 32bit: image I downloaded a DISCON-file for 64bit from another github, but I cannot find it anymore. It works for the IEA 5MW turbine, so I'm afraid it is compiled for the wrong turbine, can that be? Or should the discon file be the same for every turbine? Do you know where to find the discon-file for windows 64bit? Then I will try to download it again. As said before, all files from ServoData given in the mentioned GitHub give the same error.

Best, Violinde.

jjonkman commented 1 year ago

Dear @Violinde01,

In the ServoData directory of the IEA Wind 15-MW reference wind turbine GitHub repository I linked to above, the 64-bit ROSCO controller for Windows is named libdiscon.dll.

The original NREL 5-MW baseline wind turbine controller used a DISCON.dll, but this was different from the ROSCO controller used by the IEA Wind 15-MW reference wind turbine. My guess is that you are not using the correct controller.

Best regards,