JSBSim Flight Dynamics Model
1.2.0 (05 Nov 2023)
An Open Source Flight Dynamics and Control Software Library in C++
|
FGPropeller models a propeller given the tabular data for Ct (thrust) and Cp (power), indexed by the advance ratio "J".
<ixx> - Propeller rotational inertia. <diameter> - Propeller disk diameter. <numblades> - Number of blades. <gearratio> - Ratio of (engine rpm) / (prop rpm). <minpitch> - Minimum blade pitch angle. <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). Sense is specified in the parent tag of the propeller. <p_factor> - P factor. It is specified in the parent tag of the propeller. <ct_factor> - A multiplier for the coefficients of thrust. <cp_factor> - A multiplier for the coefficients of power.
Two tables are needed. One for coefficient of thrust (Ct) and one for coefficient of power (Cp).
Two tables are optional. They apply a factor to Ct and Cp based on the helical tip Mach.
The parameters <sense> and <p_factor> must be specified at the parent level i.e. in the <thruster> element. This allows to specify different sense and P factor values for each propeller of the model while using the same definition file for all the propellers.
In addition to thrust, the propeller applies two moments to the aircraft:
It should be noted that historically the gyroscopic moment had an incorrect sign. The correct sign can be obtained by specifying a version attribute higher than 1.0 to the propeller definition
For backward compatibility, the absence of the version attribute will result in the gyroscopic moment to be computed with the legacy incorrect sign.
Several references were helpful, here:
Definition at line 169 of file FGPropeller.h.
#include <FGPropeller.h>
Public Member Functions | |
FGPropeller (FGFDMExec *exec, Element *el, int num=0) | |
Constructor for FGPropeller. More... | |
~FGPropeller () | |
Destructor for FGPropeller - deletes the FGTable objects. | |
double | Calculate (double EnginePower) |
Calculates and returns the thrust produced by this propeller. More... | |
int | GetConstantSpeed (void) const |
Returns a non-zero value if the propeller is constant speed. | |
double | GetCpFactor (void) const |
Retrieves the coefficient of power multiplier. | |
FGTable * | GetCpMachTable (void) const |
Retrieves propeller power Mach effects factor. | |
FGTable * | GetCPowerTable (void) const |
Retrieves propeller power table. | |
double | GetCtFactor (void) const |
Retrieves the coefficient of thrust multiplier. | |
FGTable * | GetCThrustTable (void) const |
Retrieves propeller thrust table. | |
FGTable * | GetCtMachTable (void) const |
Retrieves propeller thrust Mach effects factor. | |
double | GetDiameter (void) const |
Retrieves the propeller diameter. | |
double | GetEngineRPM (void) const |
Calculates the RPMs of the engine based on gear ratio. | |
bool | GetFeather (void) const |
Returns true if the propeller is in feathered position. | |
double | GetHelicalTipMach (void) const |
Retrieves the Mach number at the propeller tips. | |
double | GetInducedVelocity (void) const |
Get the propeller induced velocity. | |
double | GetIxx (void) const |
Retrieves the propeller moment of inertia. | |
FGColumnVector3 | GetPFactor (void) const |
Retrieves the P-Factor constant. | |
double | GetPitch (void) const |
Retrieves the pitch of the propeller in degrees. | |
double | GetPowerRequired (void) |
Retrieves the power required (or "absorbed") by the propeller - i.e. More... | |
bool | GetReverse (void) const |
Returns true if the propeller is in reverse position. | |
double | GetReverseCoef (void) const |
Retrieves the reverse pitch command. | |
double | GetRPM (void) const |
Retrieves the RPMs of the propeller. | |
double | GetThrustCoefficient (void) const |
Retrieves the thrust coefficient. | |
std::string | GetThrusterLabels (int id, const std::string &delimeter) |
Generate the labels for the thruster standard CSV output. | |
std::string | GetThrusterValues (int id, const std::string &delimeter) |
Generate the values for the thruster standard CSV output. | |
double | GetTorque (void) const |
Retrieves the Torque in foot-pounds (Don't you love the English system?) | |
bool | IsVPitch (void) const |
Returns true of this propeller is variable pitch. | |
void | ResetToIC (void) |
Reset the initial conditions. | |
void | SetAdvance (double advance) |
Set the propeller pitch. More... | |
void | SetConstantSpeed (int mode) |
Sets propeller into constant speed mode, or manual pitch mode. | |
void | SetCpFactor (double cpf) |
Sets coefficient of power multiplier. | |
void | SetCtFactor (double ctf) |
Sets coefficient of thrust multiplier. | |
void | SetEngineRPM (double rpm) |
Sets the Revolutions Per Minute for the propeller using the engine gear ratio. | |
void | SetFeather (bool f) |
If true, sets the propeller in feathered position. | |
void | SetInducedVelocity (double Vi) |
Set the propeller induced velocity. | |
void | SetPFactor (double pf) |
Sets the P-Factor constant. | |
void | SetPitch (double pitch) |
This commands the pitch of the blade to change to the value supplied. More... | |
void | SetReverse (bool r) |
If true, sets the propeller in reversed position. | |
void | SetReverseCoef (double c) |
Set the propeller reverse pitch. More... | |
void | SetRPM (double rpm) |
Sets the Revolutions Per Minute for the propeller. More... | |
void | SetSense (double s) |
Sets the rotation sense of the propeller. More... | |
Public Member Functions inherited from FGThruster | |
FGThruster (FGFDMExec *FDMExec, Element *el, int num) | |
Constructor. | |
virtual | ~FGThruster () |
Destructor. | |
double | GetGearRatio (void) |
std::string | GetName (void) |
double | GetReverserAngle (void) const |
double | GetThrust (void) const |
eType | GetType (void) |
void | SetName (std::string name) |
void | SetReverserAngle (double angle) |
Public Member Functions inherited from FGForce | |
FGForce (FGFDMExec *FDMExec) | |
Constructor. | |
virtual | ~FGForce () |
Destructor. | |
const FGColumnVector3 & | GetActingLocation (void) const |
double | GetActingLocationX (void) const |
double | GetActingLocationY (void) const |
double | GetActingLocationZ (void) const |
double | GetAnglesToBody (int axis) const |
const FGColumnVector3 & | GetAnglesToBody (void) const |
virtual const FGColumnVector3 & | GetBodyForces (void) |
double | GetBodyXForce (void) const |
double | GetBodyYForce (void) const |
double | GetBodyZForce (void) const |
const FGColumnVector3 & | GetLocation (void) const |
double | GetLocationX (void) const |
double | GetLocationY (void) const |
double | GetLocationZ (void) const |
const FGColumnVector3 & | GetMoments (void) const |
double | GetPitch (void) const |
TransformType | GetTransformType (void) const |
double | GetYaw (void) const |
void | SetActingLocation (const FGColumnVector3 &vv) |
void | SetActingLocation (double x, double y, double z) |
Acting point of application. More... | |
double | SetActingLocationX (double x) |
double | SetActingLocationY (double y) |
double | SetActingLocationZ (double z) |
void | SetAnglesToBody (const FGColumnVector3 &vv) |
void | SetAnglesToBody (double broll, double bpitch, double byaw) |
void | SetLocation (const FGColumnVector3 &vv) |
void | SetLocation (double x, double y, double z) |
void | SetLocationX (double x) |
void | SetLocationY (double y) |
void | SetLocationZ (double z) |
void | SetPitch (double pitch) |
void | SetTransformType (TransformType ii) |
void | SetYaw (double yaw) |
const FGMatrix33 & | Transform (void) const |
void | UpdateCustomTransformMatrix (void) |
Public Member Functions inherited from FGJSBBase | |
FGJSBBase () | |
Constructor for FGJSBBase. | |
virtual | ~FGJSBBase () |
Destructor for FGJSBBase. | |
void | disableHighLighting (void) |
Disables highlighting in the console output. | |
Additional Inherited Members | |
Public Types inherited from FGThruster | |
enum | eType { ttNozzle , ttRotor , ttPropeller , ttDirect } |
Public Types inherited from FGForce | |
enum | TransformType { tNone , tWindBody , tLocalBody , tInertialBody , tCustom } |
Public Types inherited from FGJSBBase | |
enum | { eL = 1 , eM , eN } |
Moments L, M, N. | |
enum | { eP = 1 , eQ , eR } |
Rates P, Q, R. | |
enum | { eU = 1 , eV , eW } |
Velocities U, V, W. | |
enum | { eX = 1 , eY , eZ } |
Positions X, Y, Z. | |
enum | { ePhi = 1 , eTht , ePsi } |
Euler angles Phi, Theta, Psi. | |
enum | { eDrag = 1 , eSide , eLift } |
Stability axis forces, Drag, Side force, Lift. | |
enum | { eRoll = 1 , ePitch , eYaw } |
Local frame orientation Roll, Pitch, Yaw. | |
enum | { eNorth = 1 , eEast , eDown } |
Local frame position North, East, Down. | |
enum | { eLat = 1 , eLong , eRad } |
Locations Radius, Latitude, Longitude. | |
enum | { inNone = 0 , inDegrees , inRadians , inMeters , inFeet } |
Conversion specifiers. | |
Static Public Member Functions inherited from FGJSBBase | |
static const std::string & | GetVersion (void) |
Returns the version number of JSBSim. More... | |
static constexpr double | KelvinToFahrenheit (double kelvin) |
Converts from degrees Kelvin to degrees Fahrenheit. More... | |
static constexpr double | CelsiusToRankine (double celsius) |
Converts from degrees Celsius to degrees Rankine. More... | |
static constexpr double | RankineToCelsius (double rankine) |
Converts from degrees Rankine to degrees Celsius. More... | |
static constexpr double | KelvinToRankine (double kelvin) |
Converts from degrees Kelvin to degrees Rankine. More... | |
static constexpr double | RankineToKelvin (double rankine) |
Converts from degrees Rankine to degrees Kelvin. More... | |
static constexpr double | FahrenheitToCelsius (double fahrenheit) |
Converts from degrees Fahrenheit to degrees Celsius. More... | |
static constexpr double | CelsiusToFahrenheit (double celsius) |
Converts from degrees Celsius to degrees Fahrenheit. More... | |
static constexpr double | CelsiusToKelvin (double celsius) |
Converts from degrees Celsius to degrees Kelvin. More... | |
static constexpr double | KelvinToCelsius (double kelvin) |
Converts from degrees Kelvin to degrees Celsius. More... | |
static constexpr double | FeetToMeters (double measure) |
Converts from feet to meters. More... | |
static bool | EqualToRoundoff (double a, double b) |
Finite precision comparison. More... | |
static bool | EqualToRoundoff (float a, float b) |
Finite precision comparison. More... | |
static bool | EqualToRoundoff (float a, double b) |
Finite precision comparison. More... | |
static bool | EqualToRoundoff (double a, float b) |
Finite precision comparison. More... | |
static constexpr double | Constrain (double min, double value, double max) |
Constrain a value between a minimum and a maximum value. | |
static constexpr double | sign (double num) |
Public Attributes inherited from FGThruster | |
struct JSBSim::FGThruster::Inputs | in |
Static Public Attributes inherited from FGJSBBase | |
static char | highint [5] = {27, '[', '1', 'm', '\0' } |
highlights text | |
static char | halfint [5] = {27, '[', '2', 'm', '\0' } |
low intensity text | |
static char | normint [6] = {27, '[', '2', '2', 'm', '\0' } |
normal intensity text | |
static char | reset [5] = {27, '[', '0', 'm', '\0' } |
resets text properties | |
static char | underon [5] = {27, '[', '4', 'm', '\0' } |
underlines text | |
static char | underoff [6] = {27, '[', '2', '4', 'm', '\0' } |
underline off | |
static char | fgblue [6] = {27, '[', '3', '4', 'm', '\0' } |
blue text | |
static char | fgcyan [6] = {27, '[', '3', '6', 'm', '\0' } |
cyan text | |
static char | fgred [6] = {27, '[', '3', '1', 'm', '\0' } |
red text | |
static char | fggreen [6] = {27, '[', '3', '2', 'm', '\0' } |
green text | |
static char | fgdef [6] = {27, '[', '3', '9', 'm', '\0' } |
default text | |
static short | debug_lvl = 1 |
Static Protected Member Functions inherited from FGJSBBase | |
static std::string | CreateIndexedPropertyName (const std::string &Property, int index) |
Protected Attributes inherited from FGThruster | |
int | EngineNum |
double | GearRatio |
std::string | Name |
double | PowerRequired |
double | ReverserAngle |
double | Thrust |
double | ThrustCoeff |
eType | Type |
Protected Attributes inherited from FGForce | |
FGFDMExec * | fdmex |
std::shared_ptr< FGMassBalance > | MassBalance |
FGMatrix33 | mT |
TransformType | ttype |
FGColumnVector3 | vActingXYZn |
FGColumnVector3 | vFn |
FGColumnVector3 | vMn |
FGColumnVector3 | vOrient |
FGColumnVector3 | vXYZn |
Static Protected Attributes inherited from FGJSBBase | |
static constexpr double | radtodeg = 180. / M_PI |
static constexpr double | degtorad = M_PI / 180. |
static constexpr double | hptoftlbssec = 550.0 |
static constexpr double | psftoinhg = 0.014138 |
static constexpr double | psftopa = 47.88 |
static constexpr double | fttom = 0.3048 |
static constexpr double | ktstofps = 1852./(3600*fttom) |
static constexpr double | fpstokts = 1.0 / ktstofps |
static constexpr double | inchtoft = 1.0/12.0 |
static constexpr double | m3toft3 = 1.0/(fttom*fttom*fttom) |
static constexpr double | in3tom3 = inchtoft*inchtoft*inchtoft/m3toft3 |
static constexpr double | inhgtopa = 3386.38 |
static constexpr double | slugtolb = 32.174049 |
Note that definition of lbtoslug by the inverse of slugtolb and not to a different constant you can also get from some tables will make lbtoslug*slugtolb == 1 up to the magnitude of roundoff. More... | |
static constexpr double | lbtoslug = 1.0/slugtolb |
static constexpr double | kgtolb = 2.20462 |
static constexpr double | kgtoslug = 0.06852168 |
static const std::string | needed_cfg_version = "2.0" |
static const std::string | JSBSim_version = JSBSIM_VERSION " " __DATE__ " " __TIME__ |
FGPropeller | ( | FGFDMExec * | exec, |
Element * | el, | ||
int | num = 0 |
||
) |
Constructor for FGPropeller.
exec | a pointer to the main executive object |
el | a pointer to the thruster config file XML element |
num | the number of this propeller |
Definition at line 53 of file FGPropeller.cpp.
|
virtual |
Calculates and returns the thrust produced by this propeller.
Given the excess power available from the engine (in foot-pounds), the thrust is calculated, as well as the current RPM. The RPM is calculated by integrating the torque provided by the engine over what the propeller "absorbs" (essentially the "drag" of the propeller).
PowerAvailable | this is the excess power provided by the engine to accelerate the prop. It could be negative, dictating that the propeller would be slowed. |
Reimplemented from FGThruster.
Definition at line 207 of file FGPropeller.cpp.
|
virtual |
Retrieves the power required (or "absorbed") by the propeller - i.e.
the power required to keep spinning the propeller at the current velocity, air density, and rotational rate.
Reimplemented from FGThruster.
Definition at line 302 of file FGPropeller.cpp.
|
inline |
Set the propeller pitch.
advance | the pitch command in percent (0.0 - 1.0) |
Definition at line 211 of file FGPropeller.h.
|
inline |
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 control system (perhaps to maintain constant RPM for a constant-speed propeller). This value will be limited to be within whatever is specified in the config file for Max and Min pitch. It is also one of the lookup indices to the power and thrust tables for variable-pitch propellers.
pitch | the pitch of the blade in degrees. |
Definition at line 206 of file FGPropeller.h.
|
inline |
Set the propeller reverse pitch.
c | the reverse pitch command in percent (0.0 - 1.0) |
Definition at line 289 of file FGPropeller.h.
|
inlinevirtual |
Sets the Revolutions Per Minute for the propeller.
Normally the propeller instance will calculate its own rotational velocity, given the Torque produced by the engine and integrating over time using the standard equation for rotational acceleration \(a\): \(a = Q/I\) , where \(Q\) is Torque and \(I\) is moment of inertia for the propeller.
rpm | the rotational velocity of the propeller |
Reimplemented from FGThruster.
Definition at line 190 of file FGPropeller.h.
|
inline |
Sets the rotation sense of the propeller.
s | this value should be +/- 1 ONLY. +1 indicates clockwise rotation as viewed by someone standing behind the engine looking forward into the direction of flight. |
Definition at line 229 of file FGPropeller.h.