Coupling BeamDyn with external fluid dynamics solver

Hello everyone,

I’m currently thinking about (weakly) coupling BeamDyn with an external fluid dynamics solver to compute fluid structure interaction problems. I am currently digging through documentation and source code of BeamDyn and maybe some of you can help me with open questions.

Since BeamDyn uses an implicit time integration, it needs the loads at t+dt to advance in time. In the BeamDyn standalone version these loads can be calculated since they are constant (or maybe a function of time only), however this is of curse not the case for coupled calculations. There would be several coupling strategies for that, like assuming a constant aerodynamic load during one structural time step or extrapolating the load at t+dt using information from t, t-dt and t-2*dt (I believe in the coupled FAST computation this is done). Or as a last resort subiterations. My question would be if anyone has experiences with using BeamDyn in a weakly coupled setting and can talk about what is maybe sufficient or can point out references for that.

Another question is regarding the output of displacements etc. I found the appropriate array BD_ContinuousState%q in the code which gives me displacements and rotation-parameters as well as BD_ContinuousState%dqdt which gives velocities and rotational velocities. But I could not quite figure out in which coordinate system these quantities are represented. Does anyone have information on that?

Best Regards,
Nico Krais

Dear Nico,

I’m not an expert at coupling a structural solver to a CFD solver, but I agree with the options you’ve laid. I also confirm that FAST uses extrapolation (either linear from t and t-dt, or quadratic from t, t-dt, and t-2dt) to predict inputs at t+dt (FAST also has optional correction steps, if enabled). If the density of the fluid is much less than the density of the structure (e.g. for a wind turbine blade), then a weak coupling approach is likely sufficient for numerical stability. For large fluid densities (e.g. for underwater turbine blades), a tight coupling approach is likely required.

Regarding the displacement outputs, rather than using internal variables or states, I would use the existing mesh data structures already output from BeamDyn for coupling e.g. to AeroDyn, where the position/orientation, velocities and accelerations of various nodes along the blade are stored in global coordinates.

Best regards,

Dear Jason,

thank you very much for your advice, I think I found the appropriate output arrays in the mesh structure.

During a first simple test I stumbled across a problem regarding the rotation between global and blade reference frame. After some time I think this might be a bug and wanted to report it. Otherwise I simply have not fully understood the used coordinate systems.

The setup is very simple, I want to compute a cantilever, as sketched in the figure below. The global coordinate system (X,Y,Z) is also presented there, with Z pointing towards you. The initial blade reference frame is also sketched there, with Z_r0 pointing from root to tip and X_r0 pointing away from you.

So the transformation from global to blade reference frame is simply a rotation of 90° around the Y axis, leading to a DCM of [0,0,-1;0,1,0;1,0,0]. There is no rotation of the blade root.

When I start the simulation, the blade itself seems to be at the expected position. The BD_Output%BldMotion%Position array gives me the position of the nodes (in the global system) along the X axis, which is what I wanted. But if you for instance look at the output of the tip displacement, at the first time step the output reads:

Time TipTDxr TipTDyr TipTDzr (s) (m) (m) (m) 0.000000 4.000E+00 0.000E+00 -4.000E+00

So we have a finite displacement at the first time step, which itself should not be possible. Also, the displacement is pointing from the desired position of the tip (X=4,Y=0,Z=0) to the position of the tip if the blade reference frame is taken as the global frame (X=0,Y=0,Z=4) and the rotation is not correctly taken into account. In the course of the simulation (employing a very small time step to get a stable solution with this big initial displacements), these unrealistic displacements are actually getting damped away. So for me it seems that during initialization some quantity is not properly rotated, leading to this huge initial displacements, while during the simulation itself everything is fine.

I am using v1.01.04 of BeamDyn and I attached my input files.
inputFiles.tar (60 KB)

Dear Nico,

BeamDyn v1.01.04 distributed with FAST v8.16 is known to have several issues. We have been working collaboratively with Envision Energy to fix many of these issues. Bonnie Jonkman of Envision tested your input files with her newest BeamDyn code base and found that the problem you report has been resolved. You can find her newest BeamDyn code base–together with other updates to FAST–here: github.com/bjonkman/openfast/tr … on-BeamDyn.

We are expecting to announce a new release of FAST and its various modules soon.

Best regards,

Dear Jason,

thank you very much, indeed the bug that has been causing the problems has been fixed on the Envision-BeamDyn branch! So far everything works as expected.

Best regards,
Nico