From 36f00b1c126f3f88f874bfc502bbd3fa0f442cae Mon Sep 17 00:00:00 2001
From: david <david>
Date: Tue, 25 Dec 2001 00:02:25 +0000
Subject: [PATCH] Updated to latest JSBSim, including preliminary support for
 windmilling propellers.

---
 src/FDM/JSBSim/FGPropeller.cpp | 12 +++++++++++-
 1 file changed, 11 insertions(+), 1 deletion(-)

diff --git a/src/FDM/JSBSim/FGPropeller.cpp b/src/FDM/JSBSim/FGPropeller.cpp
index 5804117fc..bd0567c0a 100644
--- a/src/FDM/JSBSim/FGPropeller.cpp
+++ b/src/FDM/JSBSim/FGPropeller.cpp
@@ -154,9 +154,18 @@ double FGPropeller::Calculate(double PowerAvailable)
   }
 
   Thrust = C_Thrust*RPS*RPS*Diameter*Diameter*Diameter*Diameter*rho;
-  vFn(1) = Thrust;
   omega = RPS*2.0*M_PI;
 
+  // Check for windmilling.
+  double radius = Diameter * 0.375; // 75% of radius
+  double windmill_cutoff = tan(Pitch * 1.745329E-2) * omega * radius;
+  if (Vel > windmill_cutoff) {
+    cout << "Windmilling: " << Vel << " > " << windmill_cutoff << endl;
+    Thrust = -Thrust;
+  }
+
+  vFn(1) = Thrust;
+
   // The Ixx value and rotation speed given below are for rotation about the
   // natural axis of the engine. The transform takes place in the base class
   // FGForce::GetBodyForces() function.
@@ -187,6 +196,7 @@ double FGPropeller::GetPowerRequired(void)
   double rho = fdmex->GetAtmosphere()->GetDensity();
 
   if (MaxPitch == MinPitch) { // Fixed pitch prop
+    Pitch = MinPitch;
     cPReq = cPower->GetValue(J);
   } else {                    // Variable pitch prop
     double advance = fdmex->GetFCS()->GetPropAdvance(ThrusterNumber);