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
648 stars 447 forks source link

Use of (part of) OpenFAST in conjunction with another structural analysis software #893

Closed zz17635 closed 4 weeks ago

zz17635 commented 2 years ago

Dear developers,

Under operational-level load combinations, the existing ability of OpenFAST to consider a linear-elastic tower and transition piece, together with SSI effects represented by a 6-DOF elastic stiffness matrix is admittedly sufficient. However, supposed that a detailed modelling of the tower, transition piece as well as the adjacent soil is desirable, such as in a scenario of studying how soil degradation/densification behaviours may affect the SSI of an OWT, for example, is it possible to replace the structural part of OpenFAST with an external programme and proceed the simulation? An illustration of the idea is shown in Figure 1. Essentially it is to put together a bespoke multi-platform analysis, in which the soil-foundation-structure system would be simulated in Abaqus or other structural/geotechnical FE programmes, and the turbine in (part of) OpenFAST. For every time step, the information (motions and forces) at the interfacing degree-of-freedoms (basically 6 DOFs at the top of the tower) should be exchanged to make the analysis two-way coupled. image Figure 1: The idea of a multi-platform analysis, combining OpenFAST and Abaqus.

Based on my limited understanding, I see two possible ways to implement, and I want to know if any one of them is feasible from the perspective of OpenFAST’s software structure:

  1. The idea of the first approach came from the structure of OpenFAST itself. So it looks that OpenFAST itself is already a platform coordinating multiple sub-programmes, as you guys called it “glue-code” (Figure 2a). For SubDyn, in particular, which represents the transition piece and the SSI effect, it interacts with the glue-code in terms of exchanging inputs and outputs of motions and forces. Abaqus, on the other hand, can do that as well. So the idea would be to first de-couple OpenFAST, then replace SubDyn (or more) with Abaqus there, and finally, perhaps to modify the FAST-driver a bit to make the data exchange formatted for Abaqus (Figure 2b). (Another thing, I’m not sure, but it seems ElastoDyn governs both the structural analyses of the blades as well as the tower, so you cannot easily split the two? i.e., in such case, the “substructuring interface” shown in Figure 1 perhaps needs to be placed in between the tower-base and the top of the transition piece, rather than between the nacelle and the tower-top?) image Figure 2a: SubDyn, HydroDyn, and FAST 8 coupled interaction (figure from SubDyn documentation). image Figure 2b: The idea of replacing SubDyn with Abaqus within the OpenFAST framework.

  2. The second possible approach is to “manually” two-way couple these two analysis processes shown in Figure 1. So basically:

Step 1-1: Start a “partial-OpenFAST” analysis, enforce interfacing DOFs’ motions from Abaqus at t = 0 s (initial motions) as boundary conditions, and analyse only a single time step (say, 0.001 s), starting with the status of the partial-OpenFAST model at t = 0 s (initial status of the turbine). ( by saying “partial-OpenFAST”, my understanding is possibly to use the independent version of AeroDyn + ServoDyn +ElastoDyn + HydroDyn). Step 1-2: Kill the partial-OpenFAST simulation at t = 0.001 s, read output forces from partial-OpenFAST at the 6 interfacing DOFs at moment t = 0.001 s, and record the status of the partial-OpenFAST model at t = 0.001 s. Step 1-3: Start an Abaqus simulation, enforce interfacing DOFs’ forces from partial-OpenFAST at t = 0.001 s as boundary conditions, and analyse only a single time step, starting with the status of the Abaqus model at t = 0 s. Step 1-4: Kill the Abaqus simulation at t = 0.001 s, read output motions from Abaqus at the 6 interfacing DOFs at moment t = 0.001 s, and record the status of the Abaqus model at t = 0.001 s. Step 2-1: Start the 2nd partial-OpenFAST analysis, enforce interfacing DOFs’ motions from Abaqus at t = 0.001 s as boundary conditions, and analyse only a single time step, starting with the status of the partial-OpenFAST model at t = 0.001 s. Step 2-2: Kill the 2nd partial-OpenFAST simulation at t = 0.002 s, read output forces from partial-OpenFAST at the 6 interfacing DOFs at moment t = 0.002 s, and record the status of the partial-OpenFAST model at t = 0.002 s. Step 2-3: Start the 2nd Abaqus simulation, enforce interfacing DOFs’ forces from partial-OpenFAST at t = 0.002 s as boundary conditions, and analyse only a single time step, starting with the status of the Abaqus model at t = 0.001 s. Step 2-4: Kill the 2nd Abaqus simulation at t = 0.002 s, read output motions from Abaqus at the 6 interfacing DOFs at moment t = 0.002 s, and record the status of the Abaqus model at t = 0.002 s. Subsequent steps: Start the 3rd partial-OpenFAST analysis … Loop over to the end.

The questions for this second approach are: 1). Can I run AeroDyn + ServoDyn +ElastoDyn as a whole and see them as a “partial-OpenFAST model” representing the substructured turbine? 2). Is it possible to define these new “partial-OpenFAST models” with user-defined inputs of: A) prescribed motions at the 6 interfacing DOFs, and, B) prescribed status of the turbine and wind inputs at the particular moment as initial conditions of these new analyses? 3). Is it possible to record the status of the turbine and the wind profile at the end of each analysis precisely?

Do any of these ideas seem feasible? Any comments or advice on the implementation of these ideas? Your helps will be much appreciated!

Thanks for your time and efforts! Best regards,

jjonkman commented 2 years ago

Dear @zz17635,

Just a few comments:

I hope that helps.

Best regards,

zz17635 commented 2 years ago

Hi Dr Jonkman,

I love the discussion in #801, I feel I need to say thank you here as well, Dr Jonkman.

At one point, the papers and code by Yang et al. looked promising as a reference, base on which only minor modifications are needed, but... Now that their code might be flawed, my impression is that to rearrange the EoM in any of the programmes would be too demanding, I quite like them to work as they are.

Anyways, just to comfirm, what you are saying is that, althouth SubDyn inputs and outputs both motions and forces, but one set is with Hydro only (for SubDyn: hydro forces in, motions out for hydro) and the other with Elasto only (for SubDyn: aeroelastic motions in, reaction forces out), as marked in Figure 3? image Figure 3: Input/Output of SubDyn (from https : //www.nrel.gov/docs/fy20osti/76822.pdf)

If that's correct then I guess the data flow direction in my original Figure 1 needs to be modified, so it becomes Figure 4 below, is this correct?

image Figure 4: Reversed deta-flow.

Ok if Figure 4 looks reasonable, then please let me assume that computational efficiency isn't the priority at the moment (the model can probably be reduced later, by using nonlinear beam column element + degradable springs and dashpots), and if I apply my second approach (time-step-by-time-step staggering with file I/O), for Abaqus I think it is possible to:

I feel like this is somehow like a force-controlled lab experiment being modified to displacement-control. So this makes the second approach different from the first one, I don't have to reverse inputs/outputs on the ElastoDyn side. Given these, then I will be needing an I/O access to the "SubDyn-surpressed-OpenFAST" as well. So, for me, the indipendent AeroDyn, ElastoDyn, etc. will be of no use, because I need AeroDyn, ElastoDyn and ServoDyn to be coupled as they are so to represent a relistic operating wind turbine above the yaw bearing. I've ignored HydroDyn at the moment.

As @ZahidUllah33400 mentioned,

I have to develop a DLL which will exchange the parameters between the OpenFAST and the external floater code.

I'm not familiar with DLL at all, but I imagine it would be difficult to develop such a DLL that allows the Abaqus model to be "displacement-controlled" and outputs forces? So more realistically, can I do the equivalent thing, but in the form of file I/O? (Does that requires modifying the OpenFAST source too? If so, I need to learn coding in Fortran right? where do I start and how much work is expected?)

Then you mentioned the following, which I didn't quite get it:

The interface between ElastoDyn and SubDyn is not trivial, involving a sophisticated input-output solve to ensure the motion inputs to SubDyn and load inputs to ElastoDyn are internally consistent every time step (what we refer to as an "Option 1" solve in the OpenFAST glue code).

Are you effectively saying that the information exchange of the 6-DOFs at yaw bearing is not enough for the structural coupling? Or that there are deeper level connections in terms of time-stepping algorithms or other algorithms, so my "manually stepwise staggering by means of file I/O approach" is foundamentally not possible or so impractical to achieve? OR, it is a matter of "an extreamely small time step needs to be used if I try to do this"?

Best regards,

jjonkman commented 2 years ago

Dear @zz17635,

Just a few comments:

Best regards,

zz17635 commented 2 years ago

Thank you for these thorough comments, indeed OpenFAST is structured as it is for very good reasons, looks I've underestimated the degree of complexity.

One other thing, I saw this physical-numerical coupled wave tank test of FOWT, where the floater was physically tested in a wave tank, and the tower + turbine was numerically modelled in what they mentioned as "modifyed FAST". The test scheme is shown in Figure 5 below. You can see why I came up with my idea in the first place. image Figure 5. Soft-in-the-loop (SiL) diagram from Azcona et al. (2019) (attached at the end).

Based on the figure, it seems the nemerical part intakes motions and outputs forces. Besides, being partialily physical, the coupling between the two parts were even less then the 6-DOF (it was 1-DOF or 3-DOF depending on actuation arrangement). Not too much infomation was provided on how FAST was coupled, and unfortunately I couldn't reach out to the authors (from CENER España) for further details. In the paper it was only mentioned:

image

and

image

and importantly

image

So I imagine they must have modified the FAST source code, so to make data communications via TCP/IP?

Second, If the structure was assumed rigid, then it was no longer an aero-elasto coupled analysis was it, but reduced to a pure aerodynamics simulation based only on the shape of the aerofoil. Given no aeroelastic effect was considered, the reason for using such a coupling scheme, rather than simply using a predefined rotor thrust time history, was only becuase the computed aerodynamics would be different due to the different roll, yaw, pitch of the entire wind turbine. But then, you also mentioned in #801 that:

The tower is likely the most flexible element of the support structure; as such, we recommend modeling the tower in ElastoDyn instead of SubDyn.

Do you think this SiL was accurate and stable? (in the paper the comparisons were made against a full FAST-8 numerical model that was built to mimic the SiL test's conditions and assumptions, not to simulate the FOWT prototype as accurately as possible.)

And because tower and blades were rigid, then the motions of the entire numerical part were governed only by the motions of the floater, so essentially the DOFs in ElastoDyn could be all disabled? and the issue of reversing EoM was circumvented? Just curious.

Many thanks!

=============================================================================== In case of need: A one minute demonstration video of this SiL test: https://youtu.be/YotP2dcAfgs The paper itself: Azcona, Bouchotrouch, Vittori - 2019 - Low‐frequency dynamics of a floating wind turbine in wave tank–scaled experiments with SiL hybrid.pdf

jjonkman commented 2 years ago

Dear @zz17635,

I'm vaguely familiar with the work of Azcona et al that you reference, but I was not involved in the details. But my understanding (which you could reach out to Azcona et al to confirm) is that only the aerodynamics and inflow calculations from FAST v6 were used in the hybrid SiL coupling. That is, there was no structural part on the numerical simulation side of the hybrid SiL approach. This is akin to coupling the AeroDyn and InflowWind modules from OpenFAST (but not ElastoDyn or other modules) to the physical model in the wave tank, where the physical model accounts for all structural components (with the rotor mass/inertia lumped rather than represented as physical blades). Tower flexibility could be considered in the physical model in the wave tank, if desired.

From what I've heard, this SiL approach worked as desired, given limitations on which aerodynamic loads are applied and the rigid rotor assumption.

Similar SiL approaches have been implemented at other wave tanks using cables rather than fans.

Best regards,

zz17635 commented 2 years ago

Thanks Dr Jonkman. I've tried to reach out to them some time ago but didn't get response, but I think it is fair to believe that the structural aspect were not coupled in these tests.

This information is important. So back to where my questions started, if I abandon the idea of a full aeroelastic coupling, but only consider the coupling on the calculation of the turbine's rotur thrust in a Numerical-Numerical way (by following the same idea in these wave tank tests), then what I need is supposed to be only the AeroDyn module itself. But even with that, still:

Are these impressions making sense?

Best regards,

===============================================================================

Information below about the cable-actuated hybrid wave tank test is for potential future viewers:

They've used FAST too, and looks like only AeroDyn too, with the rigid rotor assumption:

image

image Figure 6. SiL using cables rather than fans, from Hall and Goupee (2018). (attached at the end)

image Figure 7. Hybrid testing scheme, from Hall and Goupee (2018). (attached at the end)

The paper: Hall, Goupee - 2018 - Validation of a hybrid modeling approach to floating wind turbine basin testing.pdf

jjonkman commented 2 years ago

Dear @zz17635,

Yes, I agree with your comments. Please note that I typically use the term "standalone" to refer to the driver of a specific module. I would use the term module to refer to the main routines of a given module that are called by a driver or glue code. In your case, you don't need the AeroDyn driver, but you do need the AeroDyn and InflowWind modules, as discussed in https://github.com/OpenFAST/openfast/discussions/801.

Best regards,

zz17635 commented 2 years ago

I see, the driver or the glue-code, a module doesn't care, they play the same role from the AeroDyn module perspective. Thank you Dr Jonkman, I do appreciate your time these days and your invaluable comments!