]> git.mxchange.org Git - flightgear.git/blobdiff - src/FDM/JSBSim/FGPropeller.h
Updated to match changes in radiostack.[ch]xx
[flightgear.git] / src / FDM / JSBSim / FGPropeller.h
index 23c9aaadc62484123e1032c74fd230ce5e4a5907..f6ed849afed5d28eb250849c6db9fa6f524a6568 100644 (file)
-/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\r
-\r
- Header:       FGPropeller.h\r
- Author:       Jon S. Berndt\r
- Date started: 08/24/00\r
-\r
- ------------- Copyright (C) 2000  Jon S. Berndt (jsb@hal-pc.org) -------------\r
-\r
- This program is free software; you can redistribute it and/or modify it under\r
- the terms of the GNU General Public License as published by the Free Software\r
- Foundation; either version 2 of the License, or (at your option) any later\r
- version.\r
-\r
- This program is distributed in the hope that it will be useful, but WITHOUT\r
- ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\r
- FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more\r
- details.\r
-\r
- You should have received a copy of the GNU General Public License along with\r
- this program; if not, write to the Free Software Foundation, Inc., 59 Temple\r
- Place - Suite 330, Boston, MA  02111-1307, USA.\r
-\r
- Further information about the GNU General Public License can also be found on\r
- the world wide web at http://www.gnu.org.\r
-\r
-HISTORY\r
---------------------------------------------------------------------------------\r
-08/24/00  JSB  Created\r
-\r
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\r
-SENTRY\r
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/\r
-\r
-#ifndef FGPROPELLER_H\r
-#define FGPROPELLER_H\r
-\r
-/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\r
-INCLUDES\r
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/\r
-\r
-#include "FGThruster.h"\r
-#include "FGTable.h"\r
-#include "FGTranslation.h"\r
-#include "FGRotation.h"\r
-\r
-/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\r
-DEFINITIONS\r
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/\r
-\r
-#define ID_PROPELLER "$Id$"\r
-\r
-/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\r
-FORWARD DECLARATIONS\r
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/\r
-\r
-/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\r
-COMMENTS, REFERENCES, and NOTES [use "class documentation" below for API docs]\r
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/\r
-\r
-/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\r
-CLASS DOCUMENTATION\r
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/\r
-\r
-/** Propeller modeling class.\r
-    FGPropeller models a propeller given the tabular data for Ct and Cp\r
-    indexed by advance ratio "J". The data for the propeller is\r
-    stored in a config file named "prop_name.xml". The propeller config file\r
-    is referenced from the main aircraft config file in the "Propulsion" section.\r
-    See the constructor for FGPropeller to see what is read in and what should\r
-    be stored in the config file.<br>\r
-    Several references were helpful, here:<ul>\r
-    <li>Barnes W. McCormick, "Aerodynamics, Aeronautics, and Flight Mechanics",\r
-     Wiley & Sons, 1979 ISBN 0-471-03032-5</li>\r
-    <li>Edwin Hartman, David Biermann, "The Aerodynamic Characteristics of\r
-    Full Scale Propellers Having 2, 3, and 4 Blades of Clark Y and R.A.F. 6\r
-    Airfoil Sections", NACA Report TN-640, 1938 (?)</li>\r
-    <li>Various NACA Technical Notes and Reports</li>\r
-    <ul>\r
-    @author Jon S. Berndt\r
-    @version $Id$\r
-    @see FGEngine\r
-    @see FGThruster\r
-    @see FGTable\r
-*/\r
-\r
-/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\r
-CLASS DECLARATION\r
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/\r
-\r
-class FGPropeller : public FGThruster {\r
-\r
-public:\r
-  /** Constructor for FGPropeller.\r
-      @param exec a pointer to the main executive object\r
-      @param AC_cfg a pointer to the main aircraft config file object */\r
-  FGPropeller(FGFDMExec* exec, FGConfigFile* AC_cfg);\r
-\r
-  /// Destructor for FGPropeller - deletes the FGTable objects\r
-  ~FGPropeller();\r
-\r
-  /** Sets the Revolutions Per Minute for the propeller. Normally the propeller\r
-      instance will calculate its own rotational velocity, given the Torque\r
-      produced by the engine and integrating over time using the standard\r
-      equation for rotational acceleration "a": a = Q/I , where Q is Torque and\r
-      I is moment of inertia for the propeller.\r
-      @param rpm the rotational velocity of the propeller */\r
-  void SetRPM(double rpm) {RPM = rpm;}\r
-\r
-  /** This commands the pitch of the blade to change to the value supplied.\r
-      This call is meant to be issued either from the cockpit or by the flight\r
-      control system (perhaps to maintain constant RPM for a constant-speed\r
-      propeller). This value will be limited to be within whatever is specified\r
-      in the config file for Max and Min pitch. It is also one of the lookup\r
-      indices to the power and thrust tables for variable-pitch propellers.\r
-      @param pitch the pitch of the blade in degrees. */\r
-  void SetPitch(double pitch) {Pitch = pitch;}\r
-  \r
-  void SetPFactor(double pf) {P_Factor = pf;}\r
-  \r
-  void SetSense(double s) { Sense = s;}\r
-\r
-  /// Retrieves the pitch of the propeller in degrees.\r
-  double GetPitch(void)         { return Pitch;         }\r
-  \r
-  /// Retrieves the RPMs of the propeller\r
-  double GetRPM(void)           { return RPM;           }\r
-  \r
-  /// Retrieves the propeller moment of inertia\r
-  double GetIxx(void)           { return Ixx;           }\r
-  \r
-  /// Retrieves the Torque in foot-pounds (Don't you love the English system?)\r
-  double GetTorque(void)        { return vTorque(eX);    }\r
-  \r
-  /** Retrieves the power required (or "absorbed") by the propeller -\r
-      i.e. the power required to keep spinning the propeller at the current\r
-      velocity, air density,  and rotational rate. */\r
-  double GetPowerRequired(void);\r
-  \r
-  /** Calculates and returns the thrust produced by this propeller.\r
-      Given the excess power available from the engine (in foot-pounds), the thrust is\r
-      calculated, as well as the current RPM. The RPM is calculated by integrating\r
-      the torque provided by the engine over what the propeller "absorbs"\r
-      (essentially the "drag" of the propeller).\r
-      @param PowerAvailable this is the excess power provided by the engine to\r
-      accelerate the prop. It could be negative, dictating that the propeller\r
-      would be slowed.\r
-      @return the thrust in pounds */\r
-  double Calculate(double PowerAvailable);\r
-\r
-private:\r
-  int   numBlades;\r
-  double RPM;\r
-  double Ixx;\r
-  double Diameter;\r
-  double MaxPitch;\r
-  double MinPitch;\r
-  double MinRPM;\r
-  double MaxRPM;\r
-  double P_Factor;\r
-  double Sense;\r
-  double Pitch;\r
-  double ExcessTorque;\r
-  FGColumnVector3 vTorque;\r
-  FGTable *cThrust;\r
-  FGTable *cPower;\r
-  void Debug(void);\r
-};\r
-\r
-//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\r
-#endif\r
-\r
+/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+ Header:       FGPropeller.h
+ Author:       Jon S. Berndt
+ Date started: 08/24/00
+
+ ------------- Copyright (C) 2000  Jon S. Berndt (jsb@hal-pc.org) -------------
+
+ This program is free software; you can redistribute it and/or modify it under
+ the terms of the GNU General Public License as published by the Free Software
+ Foundation; either version 2 of the License, or (at your option) any later
+ version.
+
+ This program is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more
+ details.
+
+ You should have received a copy of the GNU General Public License along with
+ this program; if not, write to the Free Software Foundation, Inc., 59 Temple
+ Place - Suite 330, Boston, MA  02111-1307, USA.
+
+ Further information about the GNU General Public License can also be found on
+ the world wide web at http://www.gnu.org.
+
+HISTORY
+--------------------------------------------------------------------------------
+08/24/00  JSB  Created
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+SENTRY
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
+
+#ifndef FGPROPELLER_H
+#define FGPROPELLER_H
+
+/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+INCLUDES
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
+
+#include "FGThruster.h"
+#include "FGTable.h"
+#include "FGTranslation.h"
+#include "FGRotation.h"
+
+/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+DEFINITIONS
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
+
+#define ID_PROPELLER "$Id$"
+
+/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+FORWARD DECLARATIONS
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
+
+/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+COMMENTS, REFERENCES, and NOTES [use "class documentation" below for API docs]
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
+
+/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+CLASS DOCUMENTATION
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
+
+/** Propeller modeling class.
+    FGPropeller models a propeller given the tabular data for Ct and Cp
+    indexed by advance ratio "J". The data for the propeller is
+    stored in a config file named "prop_name.xml". The propeller config file
+    is referenced from the main aircraft config file in the "Propulsion" section.
+    See the constructor for FGPropeller to see what is read in and what should
+    be stored in the config file.<br>
+    Several references were helpful, here:<ul>
+    <li>Barnes W. McCormick, "Aerodynamics, Aeronautics, and Flight Mechanics",
+     Wiley & Sons, 1979 ISBN 0-471-03032-5</li>
+    <li>Edwin Hartman, David Biermann, "The Aerodynamic Characteristics of
+    Full Scale Propellers Having 2, 3, and 4 Blades of Clark Y and R.A.F. 6
+    Airfoil Sections", NACA Report TN-640, 1938 (?)</li>
+    <li>Various NACA Technical Notes and Reports</li>
+    <ul>
+    @author Jon S. Berndt
+    @version $Id$
+    @see FGEngine
+    @see FGThruster
+    @see FGTable
+    @see <a href="http://cvs.sourceforge.net/cgi-bin/viewcvs.cgi/jsbsim/JSBSim/FGPropeller.h?rev=HEAD&content-type=text/vnd.viewcvs-markup">
+         Header File </a>
+    @see <a href="http://cvs.sourceforge.net/cgi-bin/viewcvs.cgi/jsbsim/JSBSim/FGPropeller.cpp?rev=HEAD&content-type=text/vnd.viewcvs-markup">
+         Source File </a>
+*/
+
+/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+CLASS DECLARATION
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
+
+class FGPropeller : public FGThruster {
+
+public:
+  /** Constructor for FGPropeller.
+      @param exec a pointer to the main executive object
+      @param AC_cfg a pointer to the main aircraft config file object */
+  FGPropeller(FGFDMExec* exec, FGConfigFile* AC_cfg);
+
+  /// Destructor for FGPropeller - deletes the FGTable objects
+  ~FGPropeller();
+
+  /** 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.
+      @param rpm the rotational velocity of the propeller */
+  void SetRPM(double rpm) {RPM = rpm;}
+
+  /// Returns true of this propeller is variable pitch
+  bool IsVPitch(void) {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
+      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.
+      @param pitch the pitch of the blade in degrees. */
+  void SetPitch(double pitch) {Pitch = pitch;}
+
+  /// Sets the P-Factor constant
+  void SetPFactor(double pf) {P_Factor = pf;}
+
+  /** Sets the rotation sense of the propeller.
+      @param 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. */
+  void SetSense(double s) { Sense = s;}
+
+  /// Retrieves the pitch of the propeller in degrees.
+  double GetPitch(void)         { return Pitch;         }
+  
+  /// Retrieves the RPMs of the propeller
+  double GetRPM(void)           { return RPM;           }
+  
+  /// Retrieves the propeller moment of inertia
+  double GetIxx(void)           { return Ixx;           }
+  
+  /// Retrieves the Torque in foot-pounds (Don't you love the English system?)
+  double GetTorque(void)        { 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
+      velocity, air density,  and rotational rate. */
+  double GetPowerRequired(void);
+  
+  /** 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).
+      @param 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.
+      @return the thrust in pounds */
+  double Calculate(double PowerAvailable);
+  FGColumnVector3 GetPFactor(void);
+
+private:
+  int   numBlades;
+  double RPM;
+  double Ixx;
+  double Diameter;
+  double MaxPitch;
+  double MinPitch;
+  double MinRPM;
+  double MaxRPM;
+  double P_Factor;
+  double Sense;
+  double Pitch;
+  double ExcessTorque;
+  FGColumnVector3 vTorque;
+  FGTable *cThrust;
+  FGTable *cPower;
+  void Debug(int from);
+};
+
+//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+#endif
+