FlightGear next
JSBSim::FGFunction Class Reference

Represents a mathematical function. More...

#include <FGFunction.h>

Inherits JSBSim::FGParameter, and JSBSim::FGJSBBase.

Inherited by JSBSim::aFunc< func_t, 0 >, JSBSim::FGTemplateFunc, JSBSim::aFunc< func_t, Nmin >, and JSBSim::aFunc< func_t, 0 >.

Public Types

enum class  OddEven { Either , Odd , Even }
 
- Public Types inherited from JSBSim::FGJSBBase
enum  { eL = 1 , eM , eN }
 Moments L, M, N. More...
 
enum  { eP = 1 , eQ , eR }
 Rates P, Q, R. More...
 
enum  { eU = 1 , eV , eW }
 Velocities U, V, W. More...
 
enum  { eX = 1 , eY , eZ }
 Positions X, Y, Z. More...
 
enum  { ePhi = 1 , eTht , ePsi }
 Euler angles Phi, Theta, Psi. More...
 
enum  { eDrag = 1 , eSide , eLift }
 Stability axis forces, Drag, Side force, Lift. More...
 
enum  { eRoll = 1 , ePitch , eYaw }
 Local frame orientation Roll, Pitch, Yaw. More...
 
enum  { eNorth = 1 , eEast , eDown }
 Local frame position North, East, Down. More...
 
enum  { eLat = 1 , eLong , eRad }
 Locations Radius, Latitude, Longitude. More...
 
enum  {
  inNone = 0 , inDegrees , inRadians , inMeters ,
  inFeet
}
 Conversion specifiers. More...
 

Public Member Functions

 FGFunction ()
 Default constructor.
 
 FGFunction (FGPropertyManager *pm)
 
 FGFunction (FGFDMExec *fdmex, Element *element, const std::string &prefix="", FGPropertyValue *var=0L)
 Constructor.
 
 ~FGFunction (void) override
 Destructor Make sure the function is untied before destruction.
 
double GetValue (void) const override
 Retrieves the value of the function object.
 
std::string GetValueAsString (void) const
 The value that the function evaluates to, as a string.
 
std::string GetName (void) const override
 Retrieves the name of the function.
 
bool IsConstant (void) const override
 Does the function always return the same result (i.e.
 
void cacheValue (bool shouldCache)
 Specifies whether to cache the value of the function, so it is calculated only once per frame.
 
- Public Member Functions inherited from JSBSim::FGParameter
virtual ~FGParameter (void)
 
double getDoubleValue (void) const
 
- Public Member Functions inherited from JSBSim::FGJSBBase
 FGJSBBase ()
 Constructor for FGJSBBase.
 
virtual ~FGJSBBase ()
 Destructor for FGJSBBase.
 
void PutMessage (const Message &msg)
 Places a Message structure on the Message queue.
 
void PutMessage (const std::string &text)
 Creates a message with the given text and places it on the queue.
 
void PutMessage (const std::string &text, bool bVal)
 Creates a message with the given text and boolean value and places it on the queue.
 
void PutMessage (const std::string &text, int iVal)
 Creates a message with the given text and integer value and places it on the queue.
 
void PutMessage (const std::string &text, double dVal)
 Creates a message with the given text and double value and places it on the queue.
 
int SomeMessages (void) const
 Reads the message on the queue (but does not delete it).
 
void ProcessMessage (void)
 Reads the message on the queue and removes it from the queue.
 
MessageProcessNextMessage (void)
 Reads the next message on the queue and removes it from the queue.
 
void disableHighLighting (void)
 Disables highlighting in the console output.
 

Protected Member Functions

void Load (Element *element, FGPropertyValue *var, FGFDMExec *fdmex, const std::string &prefix="")
 
virtual void bind (Element *, const std::string &)
 
void CheckMinArguments (Element *el, unsigned int _min)
 
void CheckMaxArguments (Element *el, unsigned int _max)
 
void CheckOddOrEvenArguments (Element *el, OddEven odd_even)
 
std::string CreateOutputNode (Element *el, const std::string &Prefix)
 

Protected Attributes

bool cached
 
double cachedValue
 
std::vector< FGParameter_ptrParameters
 
FGPropertyManagerPropertyManager
 
FGPropertyNode_ptr pNode
 

Additional Inherited Members

static const std::string & GetVersion (void)
 Returns the version number of JSBSim.
 
static constexpr double KelvinToFahrenheit (double kelvin)
 Converts from degrees Kelvin to degrees Fahrenheit.
 
static constexpr double CelsiusToRankine (double celsius)
 Converts from degrees Celsius to degrees Rankine.
 
static constexpr double RankineToCelsius (double rankine)
 Converts from degrees Rankine to degrees Celsius.
 
static constexpr double KelvinToRankine (double kelvin)
 Converts from degrees Kelvin to degrees Rankine.
 
static constexpr double RankineToKelvin (double rankine)
 Converts from degrees Rankine to degrees Kelvin.
 
static constexpr double FahrenheitToCelsius (double fahrenheit)
 Converts from degrees Fahrenheit to degrees Celsius.
 
static constexpr double CelsiusToFahrenheit (double celsius)
 Converts from degrees Celsius to degrees Fahrenheit.
 
static constexpr double CelsiusToKelvin (double celsius)
 Converts from degrees Celsius to degrees Kelvin.
 
static constexpr double KelvinToCelsius (double kelvin)
 Converts from degrees Kelvin to degrees Celsius.
 
static constexpr double FeetToMeters (double measure)
 Converts from feet to meters.
 
static double PitotTotalPressure (double mach, double p)
 Compute the total pressure in front of the Pitot tube.
 
static double MachFromImpactPressure (double qc, double p)
 Compute the Mach number from the differential pressure (qc) and the static pressure.
 
static double VcalibratedFromMach (double mach, double p)
 Calculate the calibrated airspeed from the Mach number.
 
static double MachFromVcalibrated (double vcas, double p)
 Calculate the Mach number from the calibrated airspeed.Based on the formulas in the US Air Force Aircraft Performance Flight Testing Manual (AFFTC-TIH-99-01).
 
static bool EqualToRoundoff (double a, double b)
 Finite precision comparison.
 
static bool EqualToRoundoff (float a, float b)
 Finite precision comparison.
 
static bool EqualToRoundoff (float a, double b)
 Finite precision comparison.
 
static bool EqualToRoundoff (double a, float b)
 Finite precision comparison.
 
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)
 
static double GaussianRandomNumber (void)
 
- Static Public Attributes inherited from JSBSim::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 std::string CreateIndexedPropertyName (const std::string &Property, int index)
 
static Message localMsg
 
static std::queue< MessageMessages
 
static unsigned int messageId = 0
 
static constexpr double radtodeg = 180. / 3.14159265358979323846
 
static constexpr double degtorad = 3.14159265358979323846 / 180.
 
static constexpr double hptoftlbssec = 550.0
 
static constexpr double psftoinhg = 0.014138
 
static constexpr double psftopa = 47.88
 
static constexpr double ktstofps = 1.68781
 
static constexpr double fpstokts = 1.0 / ktstofps
 
static constexpr double inchtoft = 1.0/12.0
 
static constexpr double fttom = 0.3048
 
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.
 
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__
 
static int gaussian_random_number_phase = 0
 

Detailed Description

Represents a mathematical function.

The FGFunction class is a powerful and versatile resource that allows algebraic functions to be defined in a JSBSim configuration file. It is similar in concept to MathML (Mathematical Markup Language, www.w3.org/Math/), but simpler and more terse. A function definition consists of an operation, a value, a table, or a property (which evaluates to a value). The currently supported operations are:

  • sum (takes n args)
  • difference (takes n args)
  • product (takes n args)
  • quotient (takes 2 args)
  • pow (takes 2 args)
  • sqrt (takes one argument)
  • toradians (takes one argument)
  • todegrees (takes one argument)
  • exp (takes 2 args)
  • log2 (takes 1 arg)
  • ln (takes 1 arg)
  • log10 (takes 1 arg)
  • abs (takes 1 arg)
  • sin (takes 1 arg)
  • cos (takes 1 arg)
  • tan (takes 1 arg)
  • asin (takes 1 arg)
  • acos (takes 1 arg)
  • atan (takes 1 arg)
  • atan2 (takes 2 args)
  • min (takes n args)
  • max (takes n args)
  • avg (takes n args)
  • fraction
  • mod
  • floor (takes 1 arg)
  • ceil (takes 1 arg)
  • fmod (takes 2 args)
  • lt (less than, takes 2 args)
  • le (less equal, takes 2 args)
  • gt (greater than, takes 2 args)
  • ge (greater than, takes 2 args)
  • eq (equal, takes 2 args)
  • nq (not equal, takes 2 args)
  • and (takes n args)
  • or (takes n args)
  • not (takes 1 args)
  • if-then (takes 2-3 args)
  • switch (takes 2 or more args)
  • random (Gaussian distribution random number)
  • urandom (Uniform random number between -1 and +1)
  • pi
  • integer
  • interpolate 1-dimensional (takes a minimum of five arguments, odd number)

An operation is defined in the configuration file as in the following example:

<sum>
<value> 3.14159 </value>
<property> velocities/qbar </property>
<product>
<value> 0.125 </value>
<property> metrics/wingarea </property>
</product>
</sum>

A full function definition, such as is used in the aerodynamics section of a configuration file includes the function element, and other elements. It should be noted that there can be only one non-optional (non-documentation) element - that is, one operation element - in the top-level function definition. Multiple value and/or property elements cannot be immediate child members of the function element. Almost always, the first operation within the function element will be a product or sum. For example:

<function name="aero/moment/Clr">
<description>Roll moment due to yaw rate</description>
<product>
<property>aero/qbar-area</property>
<property>metrics/bw-ft</property>
<property>aero/bi2vel</property>
<property>velocities/r-aero-rad_sec</property>
<table>
<independentVar>aero/alpha-rad</independentVar>
<tableData>
0.000 0.08
0.094 0.19
</tableData>
</table>
</product>
</function>
const char * name

The "lowest level" in a function is always a value or a property, which cannot itself contain another element. As shown, operations can contain values, properties, tables, or other operations. In the first above example, the sum element contains all three. What is evaluated is written algebraically as:

3.14159 + qbar + (0.125 * wingarea)

Some operations can take only a single argument. That argument, however, can be an operation (such as sum) which can contain other items. The point to keep in mind is that it evaluates to a single value - which is just what the trigonometric functions require (except atan2, which takes two arguments).

Specific Function Definitions

Note: In the definitions below, a "property" refers to a single property specified within either the <property></property> tag or the shortcut tag, <p></p>. The keyword "value" refers to a single numeric value specified either within the <value></value> tag or the shortcut <v></v> tag. The keyword "table" refers to a single table specified either within the <table></table> tag or the shortcut <t></t> tag. The plural form of any of the three words refers to one or more instances of a property, value, or table.

  • sum, sums the values of all immediate child elements:
    <sum>
    {properties, values, tables, or other function elements}
    </sum>
    Example: Mach + 0.01
    <sum>
    <p> velocities/mach </p>
    <v> 0.01 </v>
    </sum>
    #define p(x)
  • difference, subtracts the values of all immediate child elements from the value of the first child element:
    <difference>
    {properties, values, tables, or other function elements}
    </difference>
    Example: Mach - 0.01
    <difference>
    <p> velocities/mach </p>
    <v> 0.01 </v>
    </difference>
  • product multiplies together the values of all immediate child elements:
    <product>
    {properties, values, tables, or other function elements}
    </product>
    Example: qbar*S*beta*CY_beta
    <product>
    <property> aero/qbar-psf </property>
    <property> metrics/Sw-sqft </property>
    <property> aero/beta-rad </property>
    <property> aero/coefficient/CY_beta </property>
    </product>
  • quotient, divides the value of the first immediate child element by the second immediate child element:
    <quotient>
    {property, value, table, or other function element}
    {property, value, table, or other function element}
    </quotient>
    Example: (2*GM)/R
    <quotient>
    <product>
    <v> 2.0 </v>
    <p> guidance/executive/gm </p>
    </product>
    <p> position/radius-to-vehicle-ft </p>
    </quotient>
    #define R
  • pow, raises the value of the first immediate child element to the power of the value of the second immediate child element:
    <pow>
    {property, value, table, or other function element}
    {property, value, table, or other function element}
    </pow>
    Example: Mach^2
    <pow>
    <p> velocities/mach </p>
    <v> 2.0 </v>
    </pow>
  • sqrt, takes the square root of the value of the immediate child element:
    <sqrt>
    {property, value, table, or other function element}
    </sqrt>
    Example: square root of 25
    <sqrt> <v> 25.0 </v> </sqrt>
  • toradians, converts a presumed argument in degrees to radians by multiplying the value of the immediate child element by pi/180:
    <toradians>
    {property, value, table, or other function element}
    </toradians>
    Example: convert 45 degrees to radians
    <toradians> <v> 45 </v> </toradians>
  • todegrees, converts a presumed argument in radians to degrees by multiplying the value of the immediate child element by 180/pi:
    <todegrees>
    {property, value, table, or other function element}
    </todegrees>
    Example: convert 0.5*pi radians to degrees
    <todegrees>
    <product> <v> 0.5 </v> <pi/> </product>
    </todegrees>
    static const double pi
    Definition sview.cxx:59
  • exp, raises "e" to the power of the immediate child element:
    <exp>
    {property, value, table, or other function element}
    </exp>
    Example: raise "e" to the 1.5 power, e^1.5
    <exp> <v> 1.5 </v> </exp>
  • log2, calculates the log base 2 value of the immediate child element:
    <log2>
    {property, value, table, or other function element}
    </log2>
    Example:
    <log2> <v> 128 </v> </log2>
  • ln, calculates the natural logarithm of the value of the immediate child element:
    <ln>
    {property, value, table, or other function element}
    </ln>
    Example: ln(128)
    <ln> <v> 200 </v> </ln>
  • log10, calculates the base 10 logarithm of the value of the immediate child element
    <log10>
    {property, value, table, or other function element}
    </log10>
    Example log(Mach)
    <log10> <p> velocities/mach </p> </log10>
  • abs calculates the absolute value of the immediate child element
    <abs>
    {property, value, table, or other function element}
    </abs>
    Example:
    <abs> <p> flight-path/gamma-rad </p> </abs>
  • sin, calculates the sine of the value of the immediate child element (the argument is expected to be in radians)
    <sin>
    {property, value, table, or other function element}
    </sin>
    Example:
    <sin> <toradians> <p> fcs/heading-true-degrees </p> </toradians> </sin>
  • cos, calculates the cosine of the value of the immediate child element (the argument is expected to be in radians)
    <cos>
    {property, value, table, or other function element}
    </cos>
    Example:
    <cos> <toradians> <p> fcs/heading-true-degrees </p> </toradians> </cos>
  • tan, calculates the tangent of the value of the immediate child element (the argument is expected to be in radians)
    <tan>
    {property, value, table, or other function element}
    </tan>
    Example:
    <tan> <toradians> <p> fcs/heading-true-degrees </p> </toradians> </tan>
  • asin, calculates the arcsine (inverse sine) of the value of the immediate child element. The value provided should be in the range from -1 to +1. The value returned will be expressed in radians, and will be in the range from -pi/2 to +pi/2.
    <asin>
    {property, value, table, or other function element}
    </asin>
    Example:
    <asin> <v> 0.5 </v> </asin>
  • acos, calculates the arccosine (inverse cosine) of the value of the immediate child element. The value provided should be in the range from -1 to +1. The value returned will be expressed in radians, and will be in the range from 0 to pi.
    <acos>
    {property, value, table, or other function element}
    </acos>
    Example:
    <acos> <v> 0.5 </v> </acos>
  • atan, calculates the inverse tangent of the value of the immediate child element. The value returned will be expressed in radians, and will be in the range from -pi/2 to +pi/2.
    <atan>
    {property, value, table, or other function element}
    </atan>
    Example:
    <atan> <v> 0.5 </v> </atan>
  • atan2 calculates the inverse tangent of the value of the immediate child elements, Y/X (in that order). It even works for X values near zero. The value returned will be expressed in radians, and in the range -pi to +pi.
    <atan2>
    {property, value, table, or other function element} {property, value, table, or other function element}
    </atan2>
    Example: inverse tangent of 0.5/0.25, evaluates to: 1.107 radians
    <atan2> <v> 0.5 </<v> <v> 0.25 </v> </atan2>
  • min returns the smallest value from all the immediate child elements
    <min>
    {properties, values, tables, or other function elements}
    </min>
    Example: returns the lesser of velocity and 2500
    <min>
    <p> velocities/eci-velocity-mag-fps </p>
    <v> 2500.0 </v>
    </min>
    #define min(X, Y)
  • max returns the largest value from all the immediate child elements
    <max>
    {properties, values, tables, or other function elements}
    </max>
    Example: returns the greater of velocity and 15000
    <max>
    <p> velocities/eci-velocity-mag-fps </p>
    <v> 15000.0 </v>
    </max>
  • avg returns the average value of all the immediate child elements
    <avg>
    {properties, values, tables, or other function elements}
    </avg>
    Example: returns the average of the four numbers below, evaluates to 0.50.
    <avg>
    <v> 0.25 </v>
    <v> 0.50 </v>
    <v> 0.75 </v>
    <v> 0.50 </v>
    </avg>
  • fraction, returns the fractional part of the value of the immediate child element
    <fraction>
    {property, value, table, or other function element}
    </fraction>
    Example: returns the fractional part of pi - or, roughly, 0.1415926...
    <fraction> <pi/> </fraction>
  • integer, returns the integer portion of the value of the immediate child element
    <integer>
    {property, value, table, or other function element}
    </integer>
  • mod returns the remainder from the integer division of the value of the first immediate child element by the second immediate child element, X/Y (X modulo Y). The value returned is the value X-I*Y, for the largest integer I such that if Y is nonzero, the result has the same sign as X and magnitude less than the magnitude of Y. For instance, the expression "5 mod 2" would evaluate to 1 because 5 divided by 2 leaves a quotient of 2 and a remainder of 1, while "9 mod 3" would evaluate to 0 because the division of 9 by 3 has a quotient of 3 and leaves a remainder of 0.
    <mod>
    {property, value, table, or other function element}
    {property, value, table, or other function element}
    </mod>
    Example: 5 mod 2, evaluates to 1
    <mod> <v> 5 </v> <v> 2 </v> </mod>
  • floor returns the largest integral value that is not greater than X.
    <floor>
    {property, value, table, or other function element}
    </floor>
    Examples: floor(2.3) evaluates to 2.0 while floor(-2.3) evaluates to -3.0
  • ceil returns the smallest integral value that is not less than X.
    <ceil>
    {property, value, table, or other function element}
    </ceil>
    Examples: ceil(2.3) evaluates to 3.0 while ceil(-2.3) evaluates to -2.0
  • fmod returns the floating-point remainder of X/Y (rounded towards zero)
    <fmod>
    {property, value, table, or other function element}
    {property, value, table, or other function element}
    </fmod>
    Example: fmod(18.5, 4.2) evaluates to 1.7
  • lt returns a 1 if the value of the first immediate child element is less than the value of the second immediate child element, returns 0 otherwise
    <lt>
    {property, value, table, or other function element}
    {property, value, table, or other function element}
    </lt>
    Example: returns 1 if thrust is less than 10,000, returns 0 otherwise
    <lt>
    <p> propulsion/engine[2]/thrust-lbs </p>
    <v> 10000.0 </v>
    </lt>
  • le, returns a 1 if the value of the first immediate child element is less than or equal to the value of the second immediate child element, returns 0 otherwise
    <le>
    {property, value, table, or other function element}
    {property, value, table, or other function element}
    </le>
    Example: returns 1 if thrust is less than or equal to 10,000, returns 0 otherwise
    <le>
    <p> propulsion/engine[2]/thrust-lbs </p>
    <v> 10000.0 </v>
    </le>
  • gt returns a 1 if the value of the first immediate child element is greater than the value of the second immediate child element, returns 0 otherwise
    <gt>
    {property, value, table, or other function element}
    {property, value, table, or other function element}
    </gt>
    Example: returns 1 if thrust is greater than 10,000, returns 0 otherwise
    <gt>
    <p> propulsion/engine[2]/thrust-lbs </p>
    <v> 10000.0 </v>
    </gt>
  • ge, returns a 1 if the value of the first immediate child element is greater than or equal to the value of the second immediate child element, returns 0 otherwise
    <ge>
    {property, value, table, or other function element}
    {property, value, table, or other function element}
    </ge>
    Example: returns 1 if thrust is greater than or equal to 10,000, returns 0
    otherwise
    <ge>
    <p> propulsion/engine[2]/thrust-lbs </p>
    <v> 10000.0 </v>
    </ge>
  • eq returns a 1 if the value of the first immediate child element is equal to the second immediate child element, returns 0 otherwise
    <eq>
    {property, value, table, or other function element}
    {property, value, table, or other function element}
    </eq>
    Example: returns 1 if thrust is equal to 10,000, returns 0 otherwise
    <eq>
    <p> propulsion/engine[2]/thrust-lbs </p>
    <v> 10000.0 </v>
    </eq>
  • nq returns a 1 if the value of the first immediate child element is not equal to the value of the second immediate child element, returns 0 otherwise
    <nq>
    {property, value, table, or other function element}
    {property, value, table, or other function element}
    </nq>
    Example: returns 1 if thrust is not 0, returns 0 otherwise
    <nq>
    <p> propulsion/engine[2]/thrust-lbs </p>
    <v> 0.0 </v>
    </nq>
  • and returns a 1 if the values of the immediate child elements are all 1, returns 0 otherwise. Values provided are expected to be either 1 or 0 within machine precision.
    <and>
    {properties, values, tables, or other function elements}
    </and>
    Example: returns 1 if the specified flags are all 1
    <and>
    <p> guidance/first-stage-flight-flag </p>
    <p> control/engines-running-flag </p>
    </and>
  • or returns a 1 if the values of any of the immediate child elements 1, returns 0 otherwise. Values provided are expected to be either 1 or 0 within machine precision.
    <or>
    {properties, values, tables, or other function elements}
    </or>
    Example: returns 1 if any of the specified flags are 1
    <or>
    <p> guidance/first-stage-flight-flag </p>
    <p> control/engines-running-flag </p>
    </or>
  • not, returns the inverse of the value of the supplied immediate child element (e.g., returns 1 if supplied a 0)
    <not>
    {property, value, table, or other function element}
    </not>
    Example: returns 0 if the value of the supplied flag is 1
    <not> <p> guidance/first-stage-flight-flag </p> </not>
  • ifthen if the value of the first immediate child element is 1, then the value of the second immediate child element is returned, otherwise the value of the third child element is returned
    <ifthen>
    {property, value, table, or other function element}
    {property, value, table, or other function element}
    {property, value, table, or other function element}
    </ifthen>
    Example: if flight-mode is greater than 2, then a value of 0.00 is
    returned, otherwise the value of the property control/pitch-lag is
    returned.
    <ifthen>
    <gt> <p> executive/flight-mode </p> <v> 2 </v> </gt>
    <v> 0.00 </v>
    <p> control/pitch-lag </p>
    </ifthen>
  • switch uses the integer value of the first immediate child element as an index to select one of the subsequent immediate child elements to return the value of
    <switch>
    {property, value, table, or other function element}
    {property, value, table, or other function element}
    {property, value, table, or other function element}
    ...
    </switch>
    Example: if flight-mode is 2, the switch function returns 0.50
    <switch>
    <p> executive/flight-mode </p>
    <v> 0.25 </v>
    <v> 0.50 </v>
    <v> 0.75 </v>
    <v> 1.00 </v>
    </switch>
  • random Returns a normal distributed random number. The function, without parameters, returns a normal distributed random value with a distribution defined by the parameters mean = 0.0 and standard deviation (stddev) = 1.0 The Mean of the distribution (its expected value, μ). Which coincides with the location of its peak. Standard deviation (σ): The square root of variance, representing the dispersion of values from the distribution mean. This shall be a positive value (σ>0).
    <random/>
    <random seed="1234"/>
    <random seed="time_now"/>
    <random seed="time_now" mean="0.0" stddev="1.0"/>
    static mt seed
    Definition fgclouds.cxx:49
  • urandom Returns a uniformly distributed random number. The function, without parameters, returns a random value between the minimum value -1.0 and the maximum value of 1.0 The two maximum and minimum values can be modified using the lower and upper parameters.
    <urandom/>
    <random seed="1234"/>
    <random seed="time_now"/>
    <random seed="time_now" lower="-1.0" upper="1.0"/>
  • pi Takes no argument and returns the value of Pi
    <pi/>
  • interpolate1d returns the result from a 1-dimensional interpolation of the supplied values, with the value of the first immediate child element representing the lookup value into the table, and the following pairs of values representing the independent and dependent values. The first provided child element is expected to be a property. The interpolation does not extrapolate, but holds the highest value if the provided lookup value goes outside of the provided range.
    <interpolate1d>
    {property, value, table, or other function element}
    {property, value, table, or other function element} {property, value, table, or other function element}
    ...
    </interpolate1d>
    Example: If mach is 0.4, the interpolation will return 0.375. If mach is
    1.5, the interpolation will return 0.60.
    <interpolate1d>
    <p> velocities/mach </p>
    <v> 0.00 </v> <v> 0.25 </v>
    <v> 0.80 </v> <v> 0.50 </v>
    <v> 0.90 </v> <v> 0.60 </v>
    </interpolate1d>
    Author
    Jon Berndt

Definition at line 752 of file FGFunction.h.

Member Enumeration Documentation

◆ OddEven

enum class JSBSim::FGFunction::OddEven
strong
Enumerator
Either 
Odd 
Even 

Definition at line 814 of file FGFunction.h.

Constructor & Destructor Documentation

◆ FGFunction() [1/3]

JSBSim::FGFunction::FGFunction ( )
inline

Default constructor.

Definition at line 756 of file FGFunction.h.

◆ FGFunction() [2/3]

JSBSim::FGFunction::FGFunction ( FGPropertyManager * pm)
inlineexplicit

Definition at line 760 of file FGFunction.h.

◆ FGFunction() [3/3]

JSBSim::FGFunction::FGFunction ( FGFDMExec * fdmex,
Element * element,
const std::string & prefix = "",
FGPropertyValue * var = 0L )

Constructor.

When this constructor is called, the XML element pointed to in memory by the element argument is traversed. If other FGParameter-derived objects (values, functions, properties, or tables) are encountered, this instance of the FGFunction object will store a pointer to the found object and pass the relevant Element pointer to the constructor for the new object. In other words, each FGFunction object maintains a list of "child" FGParameter-derived objects which in turn may each contain its own list, and so on. At runtime, each object evaluates its child parameters, which each may have its own child parameters to evaluate.

Parameters
PropertyManagera pointer to the property manager instance.
elementa pointer to the Element object containing the function definition.
prefixan optional prefix to prepend to the name given to the property that represents this function (if given).

◆ ~FGFunction()

JSBSim::FGFunction::~FGFunction ( void )
override

Destructor Make sure the function is untied before destruction.

Definition at line 891 of file FGFunction.cpp.

Member Function Documentation

◆ bind()

void JSBSim::FGFunction::bind ( Element * ,
const std::string &  )
protectedvirtual

Definition at line 984 of file FGFunction.cpp.

◆ cacheValue()

void JSBSim::FGFunction::cacheValue ( bool shouldCache)

Specifies whether to cache the value of the function, so it is calculated only once per frame.

If shouldCache is true, then the value of the function is calculated, and a flag is set so further calculations done this frame will use the cached value. In order to turn off caching, cacheValue must be called with a false argument.

Parameters
shouldCachespecifies whether the function should cache the computed value.

Definition at line 913 of file FGFunction.cpp.

◆ CheckMaxArguments()

void JSBSim::FGFunction::CheckMaxArguments ( Element * el,
unsigned int _max )
protected

Definition at line 255 of file FGFunction.cpp.

◆ CheckMinArguments()

void JSBSim::FGFunction::CheckMinArguments ( Element * el,
unsigned int _min )
protected

Definition at line 242 of file FGFunction.cpp.

◆ CheckOddOrEvenArguments()

void JSBSim::FGFunction::CheckOddOrEvenArguments ( Element * el,
OddEven odd_even )
protected

Definition at line 268 of file FGFunction.cpp.

◆ CreateOutputNode()

string JSBSim::FGFunction::CreateOutputNode ( Element * el,
const std::string & Prefix )
protected

Definition at line 948 of file FGFunction.cpp.

◆ GetName()

std::string JSBSim::FGFunction::GetName ( void ) const
inlineoverridevirtual

Retrieves the name of the function.

Implements JSBSim::FGParameter.

Definition at line 798 of file FGFunction.h.

◆ GetValue()

double JSBSim::FGFunction::GetValue ( void ) const
overridevirtual

Retrieves the value of the function object.

Returns
the total value of the function.

Implements JSBSim::FGParameter.

Definition at line 925 of file FGFunction.cpp.

◆ GetValueAsString()

string JSBSim::FGFunction::GetValueAsString ( void ) const

The value that the function evaluates to, as a string.

Returns
the value of the function as a string.

Definition at line 938 of file FGFunction.cpp.

◆ IsConstant()

bool JSBSim::FGFunction::IsConstant ( void ) const
overridevirtual

Does the function always return the same result (i.e.

does it apply to constant parameters) ?

Reimplemented from JSBSim::FGParameter.

Definition at line 901 of file FGFunction.cpp.

◆ Load()

void JSBSim::FGFunction::Load ( Element * element,
FGPropertyValue * var,
FGFDMExec * fdmex,
const std::string & prefix = "" )
protected

Definition at line 310 of file FGFunction.cpp.

Member Data Documentation

◆ cached

bool JSBSim::FGFunction::cached
protected

Definition at line 817 of file FGFunction.h.

◆ cachedValue

double JSBSim::FGFunction::cachedValue
protected

Definition at line 818 of file FGFunction.h.

◆ Parameters

std::vector<FGParameter_ptr> JSBSim::FGFunction::Parameters
protected

Definition at line 819 of file FGFunction.h.

◆ pNode

FGPropertyNode_ptr JSBSim::FGFunction::pNode
protected

Definition at line 821 of file FGFunction.h.

◆ PropertyManager

FGPropertyManager* JSBSim::FGFunction::PropertyManager
protected

Definition at line 820 of file FGFunction.h.


The documentation for this class was generated from the following files: