Author: Jon S. Berndt
Date started: 08/24/00
- ------------- Copyright (C) 2000 Jon S. Berndt (jsb@hal-pc.org) -------------
+ ------------- Copyright (C) 2000 Jon S. Berndt (jon@jsbsim.org) -------------
This program is free software; you can redistribute it and/or modify it under
the terms of the GNU Lesser General Public License as published by the Free Software
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
#include "FGThruster.h"
-#include <math/FGTable.h>
+#include "math/FGTable.h"
/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
DEFINITIONS
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
-#define ID_PROPELLER "$Id$"
+#define ID_PROPELLER "$Id: FGPropeller.h,v 1.20 2011/10/31 14:54:41 bcoconni Exp $"
/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
FORWARD DECLARATIONS
<h3>Configuration File Format:</h3>
@code
+<sense> {1 | -1} </sense>
<propeller name="{string}">
<ixx> {number} </ixx>
<diameter unit="IN"> {number} </diameter>
<maxpitch> {number} </maxpitch>
<minrpm> {number} </minrpm>
<maxrpm> {number} </maxrpm>
+ <constspeed> {number} </constspeed>
<reversepitch> {number} </reversepitch>
- <sense> {1 | -1} </sense>
<p_factor> {number} </p_factor>
<ct_factor> {number} </ct_factor>
<cp_factor> {number} </cp_factor>
</tableData>
</table>
+ <table name="CT_MACH" type="internal">
+ <tableData>
+ {numbers}
+ </tableData>
+ </table>
+
+ <table name="CP_MACH" type="internal">
+ <tableData>
+ {numbers}
+ </tableData>
+ </table>
+
+
</propeller>
@endcode
\<maxpitch> - Maximum blade pitch angle.
\<minrpm> - Minimum rpm target for constant speed propeller.
\<maxrpm> - Maximum rpm target for constant speed propeller.
+ \<constspeed> - 1 = constant speed mode, 0 = manual pitch mode.
\<reversepitch> - Blade pitch angle for reverse.
\<sense> - Direction of rotation (1=clockwise as viewed from cockpit,
- -1=anti-clockwise as viewed from cockpit).
+ -1=anti-clockwise as viewed from cockpit). Sense is
+ specified in the parent tag of the propeller.
\<p_factor> - P factor.
\<ct_factor> - A multiplier for the coefficients of thrust.
\<cp_factor> - A multiplier for the coefficients of power.
</pre>
Two tables are needed. One for coefficient of thrust (Ct) and one for
- coefficient of power (Cp).
+ coefficient of power (Cp).
+
+ Two tables are optional. They apply a factor to Ct and Cp based on the
+ helical tip Mach.
<br>
Several references were helpful, here:<ul>
<li>Various NACA Technical Notes and Reports</li>
</ul>
@author Jon S. Berndt
- @version $Id$
+ @version $Id: FGPropeller.h,v 1.20 2011/10/31 14:54:41 bcoconni Exp $
@see FGEngine
@see FGThruster
*/
@param rpm the rotational velocity of the propeller */
void SetRPM(double rpm) {RPM = rpm;}
+ /** Sets the Revolutions Per Minute for the propeller using the engine gear ratio **/
+ void SetEngineRPM(double rpm) {RPM = rpm/GearRatio;}
+
/// Returns true of this propeller is variable pitch
- bool IsVPitch(void) {return MaxPitch != MinPitch;}
+ bool IsVPitch(void) const {return MaxPitch != MinPitch;}
/** This commands the pitch of the blade to change to the value supplied.
This call is meant to be issued either from the cockpit or by the flight
/// Sets the P-Factor constant
void SetPFactor(double pf) {P_Factor = pf;}
+ /// Sets propeller into constant speed mode, or manual pitch mode
+ void SetConstantSpeed(int mode) {ConstantSpeed = mode;}
+
/// Sets coefficient of thrust multiplier
void SetCtFactor(double ctf) {CtFactor = ctf;}
void SetSense(double s) { Sense = s;}
/// Retrieves the pitch of the propeller in degrees.
- double GetPitch(void) { return Pitch; }
+ double GetPitch(void) const { return Pitch; }
/// Retrieves the RPMs of the propeller
- double GetRPM(void) const { return RPM; }
+ double GetRPM(void) const { return RPM; }
+
+ /// Calculates the RPMs of the engine based on gear ratio
+ double GetEngineRPM(void) const { return RPM * GearRatio; }
/// Retrieves the propeller moment of inertia
- double GetIxx(void) { return Ixx; }
+ double GetIxx(void) const { return Ixx; }
/// Retrieves the coefficient of thrust multiplier
- double GetCtFactor(void) { return CtFactor; }
+ double GetCtFactor(void) const { return CtFactor; }
/// Retrieves the coefficient of power multiplier
- double GetCpFactor(void) { return CpFactor; }
+ double GetCpFactor(void) const { return CpFactor; }
/// Retrieves the propeller diameter
- double GetDiameter(void) { return Diameter; }
+ double GetDiameter(void) const { return Diameter; }
/// Retrieves propeller thrust table
FGTable* GetCThrustTable(void) const { return cThrust;}
/// Retrieves propeller power table
FGTable* GetCPowerTable(void) const { return cPower; }
+ /// Retrieves propeller thrust Mach effects factor
+ FGTable* GetCtMachTable(void) const { return CtMach; }
+ /// Retrieves propeller power Mach effects factor
+ FGTable* GetCpMachTable(void) const { return CpMach; }
+
/// Retrieves the Torque in foot-pounds (Don't you love the English system?)
- double GetTorque(void) { return vTorque(eX); }
+ double GetTorque(void) const { return vTorque(eX); }
/** Retrieves the power required (or "absorbed") by the propeller -
i.e. the power required to keep spinning the propeller at the current
accelerate the prop. It could be negative, dictating that the propeller
would be slowed.
@return the thrust in pounds */
- double Calculate(double PowerAvailable);
- FGColumnVector3 GetPFactor(void);
- string GetThrusterLabels(int id, string delimeter);
- string GetThrusterValues(int id, string delimeter);
+ double Calculate(double EnginePower);
+ FGColumnVector3 GetPFactor(void) const;
+ string GetThrusterLabels(int id, const string& delimeter);
+ string GetThrusterValues(int id, const string& delimeter);
void SetReverseCoef (double c) { Reverse_coef = c; }
- double GetReverseCoef (void) { return Reverse_coef; }
+ double GetReverseCoef (void) const { return Reverse_coef; }
void SetReverse (bool r) { Reversed = r; }
- bool GetReverse (void) { return Reversed; }
+ bool GetReverse (void) const { return Reversed; }
void SetFeather (bool f) { Feathered = f; }
- bool GetFeather (void) { return Feathered; }
+ bool GetFeather (void) const { return Feathered; }
double GetThrustCoefficient(void) const {return ThrustCoeff;}
+ double GetHelicalTipMach(void) const {return HelicalTipMach;}
+ int GetConstantSpeed(void) const {return ConstantSpeed;}
+ void SetInducedVelocity(double Vi) {Vinduced = Vi;}
+ double GetInducedVelocity(void) const {return Vinduced;}
private:
int numBlades;
double ExcessTorque;
double D4;
double D5;
+ double HelicalTipMach;
+ double Vinduced;
FGColumnVector3 vTorque;
FGTable *cThrust;
FGTable *cPower;
+ FGTable *CtMach;
+ FGTable *CpMach;
double CtFactor;
double CpFactor;
+ int ConstantSpeed;
void Debug(int from);
double ReversePitch; // Pitch, when fully reversed
- bool Reversed; // true, when propeller is reversed
+ bool Reversed; // true, when propeller is reversed
double Reverse_coef; // 0 - 1 defines AdvancePitch (0=MIN_PITCH 1=REVERSE_PITCH)
bool Feathered; // true, if feather command
};