Skip to main content

Coupling Abaqus with an aeroedynamic BEM code to compute aeroelastic respons

Submitted by Anonymous (not verified) on

For my graduation work (student at the Delft university of Technology, The Netherlands), I am trying to model the aeroelastic behavior of a wind turbine rotor. For this end I use an Abaqus model of a wind turbine blade (which is a composite structure with different fiber layers and corresponding orientation). The aerodynamic force is calculated by a BEM code (Blade Element Momentum theory), which is a simplified engineering aerodynamic code: fast but still quite good. Using CFD to calculate the loads is out of the question since it requires far too much time to calculate.



The problem to calculate the aeroelastic response is that by using two separate solvers (Abaqus and the self written but very simple BEM aerodynamic code), they have to communicate with each other. We call this method the staggered approach: the inherently coupled physical problem is split into two and solved one at the time.

I start with an assumed initial loading which is applied on the structure. Abaqus calculates the deformations. The deformations are feed back to the aerodynamic code which recalculates the aerodynamic forces. Forces back to Abaqus for changed deformations etc... This cycle continues till convergence is reached and the true aeroelastic deformation is known. By doing so, the aerodynamic BEM code and Abaqus are run approximately twenty times (depending on how fast the coupled aero structure converge).



As far I understand at the moment (I am nor an Abaqus, nor a FEM expert), there are two ways of implementing this coupled approach in Abaqus: by using user subroutines or via the phyton interface.



For the user subroutines however, some complications emerge. I assume to use the user subroutine DLOAD (defining a distributed load). The actual aerodynamic load varies both span wise and chord wise along the blade (how to implement that on one surface?). To simulate the several coupling steps between Abaqus and the aerodynamic code, I thought of manually defining, say, 35 steps. At each step the user subroutine DLOAD is called to calculate the aerodynamic loads. In order to be relevant, the user subroutine DLOAD should calculated at each step the load as function of the current blade state (deformations). However, is it possible to call the current blade state (deformations) in the user subroutine DLOAD to use as input for the aerodynamic code?

The convergence criteria should be called upon each step as well. It should be able to abstract the deformations of a previous step and compare it with the current. If the convergence criteria are met it should exits the Abaqus analysis and write away the final deformations into the output database.



The python approach seems to be a little less complicated. Calling the model and reading the output database of a previous step, to extract the blade state. Calculate the aerodynamic loading, apply it on the model, write responses into a new output database, to be used for the next step. And so on and so forth. However, could it be that this approach is slower then compared to the user subroutine attack?



Any thoughts on this coupled aeroelastic problem in Abaqus would be greatly appreciated.

You don't say so specifically, but I inferred that your

problem is static rather than dynamic (i.e. inertial forces

are not important).



I suppose I should say first that the Simulia-documented

approach for this type of coupled problem is to use

the MpCCI co-simulation approach. Possibly you have looked

at this and decided it is too complicated or not necessary

for your particular problem. If the fluid and structure

are not too strongly coupled, a simpler approach may work fine.



So, lets consider alternative approaches like the ones in

your note. Before trying to answer your specific questions

let me say a couple of things about coupling external codes

with abaqus. Within a step, at each increment (in a static

problem there might be only one), abaqus performs Newton-Raphson

iterations to solve the nonlinear equations. Ideally you would

like to recalculate your fluid forces at each iteration-- because

the displacements are changing at each iteration. When abaqus determined

that it had obtained a converged solution, the problem would be solved.

Unfortunately, I don't know how to tell abaqus to provide the displacement

vector at each iteration. As far as

I know, the best you can do is get the displacement vector at the last

converged increment.



So, to answer your specific question about DLOAD, you can

access the abaqus result database (ODB file) during the run

to read displacements at the last converged increment. A good place to do

this is external subroutine UEXTERNALDB. You will need to use the documented

C++ interface to the ODB to do the actual operations. When

argument LOP=1, you could read the current displacements, do your BEM

calculation, and save the pressures (maybe to an external file)

so they are available to your DLOAD routine.



However, you don't have to predefine some number of abaqus steps

to use this approach. A single nonlinear step with multiple increments

will achieve the same goal. You probably will have to predefine some

number of increments. Although you can evaluate the convergence of

the process (possibly also in UEXTERNALDB at the end of the increment),

you can't easily add more increments if the solution is not converged.



As far as your second approach, using Python, I have never actually

done this, myself. A similar approach, that can work, is to invoke

abaqus in a series of restart runs. In each restart run, a small

program reads the output database, calculates the new pressure loads,

writes a new restart input deck, and invokes abaqus. Typically, this

process is controlled by a small operating system shell script.

This approach has the advantage that you can perform as many abaqus

analyses as needed to reach convergence.





Good luck.

Mon, 01/19/2009 - 18:38 Permalink
David (not verified)

Mister Greene, many thanks for your thoughts on this subject.

Indeed, for starters only the static case is considered.

I have looked into the possibility of the MpCCI coupling server, but have abondend that route since this BEM code generates only a set of lift forces and moments, distributed as discrete points along the blade. It is a very reasonable task to convert this single loading point into a continues pressure distrubtion (per radial blade section). However, there is not such a thing as a mesh for the aerodynamic BEM code. As such, the added value (and complexity, costs) of the MpCCI coupling has been considered as not important.

Wed, 01/21/2009 - 09:34 Permalink
AUN

In reply to by David (not verified)

 

Dear David,

I am undergraduate student of Aerospace Engineering and I am trying to perform a 'static' aero-elastic analysis of a wind turbine rotor in ANSYS. I was earlier trying to couple the structural and aerodynamic fields using ANSYS Multifield on Workbench, however, as I was not quite succesful on that front, therefore, I am now reverting to MPCCI and Mechanical APDL and Fluent.

A few things that I'd like to ask you are:

1.Why did you use ABAQUS and why not ANSYS for your simulation?

2. How do we actually define the 'static' aero-elastic behaviour of a wind turbine rotor. Based on my limited understanding of the subject at hand, I believe that the transient behaviour of the blade under the action of wind and aero-elastic considerations would require far greater computational power therefore a steady state rotation of the rotor would be adequate. (With reference to the static analysis. Please correct me if this is an invalid assumption.

3. Why not CFD and why BEM? Putting the computational time aside. ( Like I assumed earlier, a steady-state rotation of the rotor would not require as much time as the 6-DOF Solver in Fluent).

Best Regards,

AUN 

Mon, 05/30/2011 - 18:37 Permalink

 

Hi

I have this error in MpCCI , Could you help me ?

Validating MPICH-1 service daemon "mpd.exe" ...Stopping the MPICH-1 service daemon "mpd.exe", please wait ...

Starting the MPICH-1 service daemon "mpd.exe", please wait ...

mpccish start server:

   Can't get a connection to the MPICH-1 service daemon "mpd.exe".

   Error message received:

      "FAIL: Unable to read the credentials from the registry."

   Please start the MPICH-1 service daemon "mpd.exe" before you use MpCCI.

Tue, 05/12/2009 - 12:07 Permalink