Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Preposterous Windmilling Behavior #195

Open
Octal450 opened this issue Jul 7, 2019 · 30 comments
Open

Preposterous Windmilling Behavior #195

Octal450 opened this issue Jul 7, 2019 · 30 comments

Comments

@Octal450
Copy link

Octal450 commented Jul 7, 2019

image
^ IDG A32X
Hi guys -- even at a high speed, this makes no sense. At low speeds too, the windmilling is too high. This can be see here:
image
^ IDG MD-11

I will get the values of what it should be about windmilling at. N2 seems plausible, but N1 is just nonsensical.
Any thoughts?

Kind Regards,
Josh

@bcoconni
Copy link
Member

bcoconni commented Jul 8, 2019

This may be unrelated but as I mentioned in the issue #178

N1 and N2 are hard coded to be respectively equal to qbar/10 and qbar/15 when the engine is off. The mass airflow would more relevant than the dynamic pressure for that matter.

During windmilling it can be assumed that the airflow is proportional to the ram airflow which is proportional to in.Density (air density) times the aircraft velocity forward velocity in.aeroUVW(eU). The file src/models/propulsion/FGTurbine.cpp could be modified as shown below:

@@ -190,8 +190,9 @@ double FGTurbine::Off(void)
   FuelFlow_pph = Seek(&FuelFlow_pph, 0, 1000.0, 10000.0);
   // some engines have inlets that close when they are off. So, if a flag is true disable windmilling
   if (disableWindmill == false) {
-    N1 = Seek(&N1, in.qbar/10.0, N1/2.0, N1/N1_spindown);
-    N2 = Seek(&N2, in.qbar/15.0, N2/2.0, N2/N2_spindown);
+    double AirFlow = in.Density * in.AeroUVW(eU);
+    N1 = Seek(&N1, AirFlow/10.0, N1/2.0, N1/N1_spindown);
+    N2 = Seek(&N2, AirFlow/15.0, N2/2.0, N2/N2_spindown);
   } else {
     N1 = Seek(&N1, 0, N1/2.0, N1/N1_spindown);
     N2 = Seek(&N2, 0, N2/2.0, N2/N2_spindown);

and the constants 10.0 and 15.0 might need to be updated to reach the expected rotation speeds N1 and N2.

If you can compile FlightGear could you please check the above and let me know if that fixes the problem ?

@Octal450
Copy link
Author

Octal450 commented Jul 8, 2019

Dear Bertrand, thank you for your response. I do not personally have time for compiling, but I know someone who may be able to test this for me, I will get back to you. Thanks

Kind Regards,
Josh

@legoboyvdlp
Copy link
Contributor

Didn't I add a flag to disable windmilling?

@bcoconni
Copy link
Member

bcoconni commented Jul 9, 2019 via email

@legoboyvdlp
Copy link
Contributor

Ah, I see, thanks. Ok, sure - I can do that.

@Octal450
Copy link
Author

Bertrand,
It looks like they are now 0.319 and 0.125 - which isn't quite right.
I also believe the N1 factor should be changed from 10 to 20, so that the N1 behaves more properly.

We will test these factors with the qbar code and see if the ratios seem better.

Kind Regards,
Josh

@bcoconni
Copy link
Member

It looks like they are now 0.319 and 0.125 - which isn't quite right.

I guess you are talking about N1 and N2 ? What are the values you are expecting ? Where are they coming from ?

I also believe the N1 factor should be changed from 10 to 20, so that the N1 behaves more properly.

As I mentioned above, the coefficients by which the mass air flow is divided likely need some adjustments.

We will test these factors with the qbar code and see if the ratios seem better.

The dynamic pressure (aka qbar) is irrelevant for windmilling. The engine behavior is driven by the air flow as I said earlier: qbar is increasing as the square of the velocity while the air flow is increasing linearly with the velocity. If you continue to use the dynamic pressure, N1 and N2 will increase too much at higher velocities.

@Octal450
Copy link
Author

Hi Bertrand,
N2 and N1 respectively, according to lego - to me that is odd numbers - without changing the factor, it is strange that they have reversed behavior. I do wonder if it was actually N1 and N2 - I will ask for another test.

Yes, the reason I would test that on qbar is so that I can see the ratio between N1 and N2 to check the coefficient - since it seems after your changes the numbers are very very low and it is not easy to check.

Kind Regards,
Josh

@bcoconni
Copy link
Member

the reason I would test that on qbar is so that I can see the ratio between N1 and N2 to check the coefficient

Since the value N1 is equal to x/10 and N2 is equal to x/15 then whatever is x the ratio between N2 and N1 will always be 1.5 whether x=qbar or x=AirFlow. If you find otherwise then there is most likely an error in the code you are testing.

it seems after your changes the numbers are very very low and it is not easy to check.

As I already mentioned, the constants 10 and 15 probably need to be tweaked. If you find the value N1 and N2 to be too low then you need to replace the constants 10.0 and 15.0 by smaller values.

    double AirFlow = in.Density * in.AeroUVW(eU);
    N1 = Seek(&N1, AirFlow/10.0, N1/2.0, N1/N1_spindown);y
    N2 = Seek(&N2, AirFlow/15.0, N2/2.0, N2/N2_spindown);

Also I would like to mention that the windmilling engine in FGTurbine does not produce drag (or negative thrust) which is much more unrealistic than the fact that the values of N1 and N2 are erroneous.

@Octal450
Copy link
Author

I see what you mean, sorry - I had a stupid moment there - of course the coefficient will change with a new value being used not qbar.
So I'll get back to you on the numbers.

Kind Regards,
Josh

@bcoconni
Copy link
Member

@Octal450

So I'll get back to you on the numbers.

Any progress on this topic ?

@Octal450
Copy link
Author

Apologies, I've been particular busy with my life especially my health. I'll try to get it as soon as possible for you

Kind Regards,
Josh

@bcoconni
Copy link
Member

Apologies, I've been particular busy with my life especially my health. I'll try to get it as soon as possible for you

Oh ! Sorry, my apologies. There is no rush answering this topic.

@Octal450
Copy link
Author

No worries! I am glad you did as I had forgotten in the time. I've written it in my to-do.

Kind Regards,
Josh

@Octal450
Copy link
Author

Apologies for further delays - my health is recovered and I am now back at FG so I'll definitely get this soon.
Josh

@ghost
Copy link

ghost commented Dec 14, 2019

By the way, I don't know if this is related, but...

If I throw the model up in the air or disable seized property in flight, engine will not windmill unless it has either had starter=1 or been running.

@bcoconni
Copy link
Member

@Octal450, speaking of windmilling in issue #494. Is there any progress on this issue ?

@Octal450
Copy link
Author

Hi,
Sorry for slowly. With my health everything been all over the place.

I need to do more research first before I can make a recommendation. I got some conflicting info but didn't have time to check further.

Thanks for your patience.
Josh

@seanmcleod
Copy link
Member

Here is a potentially useful paper (I haven't paid the $25 to download it) - Modelling and Analysis of Turbofan Engines Under Windmilling Conditions

I'm not suggesting that we implement a full high-fidelity windmilling model, but rather that we should be able to find some first or 2nd order approximation from the paper that we can use to generate at least semi-realistic N1/N2 values.

@seanmcleod
Copy link
Member

Or if we could get hold of the DFDR data from the B767 Gimli Glider or A330 Azores Glider we could take a look at their N1/N2 windmilling values as they both glided down from cruising altitude.

@seanmcleod
Copy link
Member

While looking into something else I came across this table.

Now if you look at the qbar values in the table and the fact that under windmilling conditions N1 = qbar/10 currently in JSBSim means the figures seen in your original image of the IDG MD11 makes rough sense, but it doesn't make any sense for the IDG A32X image showing N1 = 158% given the 420KIAS at 7000ft.

image

@seanmcleod
Copy link
Member

@Octal450 @bcoconni I've recreated the table above and added in a column to show the ram airflow as suggested by @bcoconni.

double AirFlow = in.Density * in.AeroUVW(eU);

And then shown what the current JSBSim will output for N1 based on qbar\10 and what N1 would look like if we used the ram airflow instead. For the ram airflow case I've gone with a 10x factor.

image

Now if we could get some real-world windmilling data we could compare and see which one, qbar versus ram airflow would be a better match for the real-world.

@bcoconni
Copy link
Member

bcoconni commented Oct 24, 2021

Thanks @seanmcleod. Unsurprisingly, the values are much lower using the intake airflow than qbar.

I'd suggest comparing the N1 values with the pilot manual and more specifically to the restart/relight flight envelope. As a rule of thumb, N1 should be below the idle regime in the restart envelope and closer to (or above ?) the idle regime in the relight envelope. See the image below showing a typical restart envelope for a civil turbofan (from Gas Turbine Performance - 2nd edition, P.P. Walsh & P. Fletcher)

IMG_20211024_125238

@seanmcleod
Copy link
Member

So looking at the left edge of the windmill regime, i.e. line passing through points (M0.3, 0m), (M0.4, 4000m), (M0.5, 8000m).

image

Now I thought it might turn out the line represented a linear mapping from airflow to some minimum N1 % for engine start, e.g. 20%. But it doesn't. Maybe it's a naïve assumption that the line represents a constant N1 % though?

It does end up pretty much as being fairly close to linear to qbar though.

@seanmcleod
Copy link
Member

seanmcleod commented Oct 24, 2021

@bcoconni I see chapter 10 in Gas Turbine Performance - 2nd edition, P.P. Walsh & P. Fletcher, is all about windmilling. In particular information on the drag produced when windmilling, which as you mentioned is currently missing in JSBSim and also rotational speeds.

Just taken a quick initial glance at the chapter so far. In terms of rotational speeds for turbofans.

image

So we should be able to get at least representative figures. There are references to:

The levels are indicative only, being dependent on engine design

@Octal450
Copy link
Author

Yes that looks pretty good @seanmcleod , sadly I still haven't received any info about the actual numbers...perhaps such data is not available to the pilots.

Kind Regards,
Josh

@seanmcleod
Copy link
Member

I've written some code to compare the N1 speeds based on using our current qbar/10 approach to a model based on the chart (10.8) from Gas Turbine Performance - 2nd edition, P.P. Walsh & P. Fletcher and to a version using the ram airflow.

See the following Jupyter notebook for the code - https://github.com/seanmcleod/JSBSimTesting/blob/main/Turbofan%20Windmilling.ipynb

Here are the results.

image

image

Let me know if you spot any errors with the code that produced them.

@Octal450
Copy link
Author

I'm no expert in that language, but the result from your "model" looks quite nice.

Kind Regards,
Josh

@seanmcleod
Copy link
Member

@bcoconni please take a look at the notebook above when you get a chance.

@bcoconni
Copy link
Member

bcoconni commented Nov 2, 2021

@seanmcleod looks good to me.

I guess the reason why the curves do not match is that the engine components downstream of the inlet have an influence on the air mass flow and that we cannot simply assume that the air velocity at the inlet equals the aircraft velocity.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

4 participants