User login


You are here

Coupling Abaqus with an aeroedynamic BEM code to compute aeroelastic respons

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.

attash3099's picture


i need help

abaqus+aero code with details

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.


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,




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.

Subscribe to Comments for "Coupling Abaqus with an aeroedynamic BEM code to compute aeroelastic respons"

Recent comments

More comments


Subscribe to Syndicate