LCOV - code coverage report
Current view: top level - models - FGAuxiliary.h (source / functions) Hit Total Coverage
Test: JSBSim-Coverage-Statistics Lines: 48 58 82.8 %
Date: 2010-08-24 Functions: 38 48 79.2 %
Legend: Lines: hit not hit | Branches: + taken - not taken # not executed Branches: 7 20 35.0 %

           Branch data     Line data    Source code
       1                 :            : /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
       2                 :            : 
       3                 :            :  Header:       FGAuxiliary.h
       4                 :            :  Author:       Jon Berndt
       5                 :            :  Date started: 01/26/99
       6                 :            : 
       7                 :            :  ------------- Copyright (C) 1999  Jon S. Berndt (jon@jsbsim.org) -------------
       8                 :            : 
       9                 :            :  This program is free software; you can redistribute it and/or modify it under
      10                 :            :  the terms of the GNU Lesser General Public License as published by the Free Software
      11                 :            :  Foundation; either version 2 of the License, or (at your option) any later
      12                 :            :  version.
      13                 :            : 
      14                 :            :  This program is distributed in the hope that it will be useful, but WITHOUT
      15                 :            :  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
      16                 :            :  FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public License for more
      17                 :            :  details.
      18                 :            : 
      19                 :            :  You should have received a copy of the GNU Lesser General Public License along with
      20                 :            :  this program; if not, write to the Free Software Foundation, Inc., 59 Temple
      21                 :            :  Place - Suite 330, Boston, MA  02111-1307, USA.
      22                 :            : 
      23                 :            :  Further information about the GNU Lesser General Public License can also be found on
      24                 :            :  the world wide web at http://www.gnu.org.
      25                 :            : 
      26                 :            : HISTORY
      27                 :            : --------------------------------------------------------------------------------
      28                 :            : 11/22/98   JSB   Created
      29                 :            :   1/1/00   TP    Added calcs and getters for VTAS, VCAS, VEAS, Vground, in knots
      30                 :            : 
      31                 :            : %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
      32                 :            : SENTRY
      33                 :            : %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
      34                 :            : 
      35                 :            : #ifndef FGAUXILIARY_H
      36                 :            : #define FGAUXILIARY_H
      37                 :            : 
      38                 :            : /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
      39                 :            : INCLUDES
      40                 :            : %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
      41                 :            : 
      42                 :            : #include "FGModel.h"
      43                 :            : #include "math/FGColumnVector3.h"
      44                 :            : #include "math/FGLocation.h"
      45                 :            : #include "FGPropagate.h"
      46                 :            : 
      47                 :            : /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
      48                 :            : DEFINITIONS
      49                 :            : %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
      50                 :            : 
      51                 :            : #define ID_AUXILIARY "$Id: FGAuxiliary.h,v 1.18 2010/07/25 17:35:20 jberndt Exp $"
      52                 :            : 
      53                 :            : /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
      54                 :            : FORWARD DECLARATIONS
      55                 :            : %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
      56                 :            : 
      57                 :            : namespace JSBSim {
      58                 :            : 
      59                 :            : /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
      60                 :            : CLASS DOCUMENTATION
      61                 :            : %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
      62                 :            : 
      63                 :            : /** Encapsulates various uncategorized scheduled functions.
      64                 :            :     Pilot sensed accelerations are calculated here. This is used
      65                 :            :     for the coordinated turn ball instrument. Motion base platforms sometimes
      66                 :            :     use the derivative of pilot sensed accelerations as the driving parameter,
      67                 :            :     rather than straight accelerations.
      68                 :            : 
      69                 :            :     The theory behind pilot-sensed calculations is presented:
      70                 :            : 
      71                 :            :     For purposes of discussion and calculation, assume for a minute that the
      72                 :            :     pilot is in space and motionless in inertial space. She will feel
      73                 :            :     no accelerations. If the aircraft begins to accelerate along any axis or
      74                 :            :     axes (without rotating), the pilot will sense those accelerations. If
      75                 :            :     any rotational moment is applied, the pilot will sense an acceleration
      76                 :            :     due to that motion in the amount:
      77                 :            : 
      78                 :            :     [wdot X R]  +  [w X (w X R)]
      79                 :            :     Term I          Term II
      80                 :            : 
      81                 :            :     where:
      82                 :            : 
      83                 :            :     wdot = omegadot, the rotational acceleration rate vector
      84                 :            :     w    = omega, the rotational rate vector
      85                 :            :     R    = the vector from the aircraft CG to the pilot eyepoint
      86                 :            : 
      87                 :            :     The sum total of these two terms plus the acceleration of the aircraft
      88                 :            :     body axis gives the acceleration the pilot senses in inertial space.
      89                 :            :     In the presence of a large body such as a planet, a gravity field also
      90                 :            :     provides an accelerating attraction. This acceleration can be transformed
      91                 :            :     from the reference frame of the planet so as to be expressed in the frame
      92                 :            :     of reference of the aircraft. This gravity field accelerating attraction
      93                 :            :     is felt by the pilot as a force on her tushie as she sits in her aircraft
      94                 :            :     on the runway awaiting takeoff clearance.
      95                 :            : 
      96                 :            :     In JSBSim the acceleration of the body frame in inertial space is given
      97                 :            :     by the F = ma relation. If the vForces vector is divided by the aircraft
      98                 :            :     mass, the acceleration vector is calculated. The term wdot is equivalent
      99                 :            :     to the JSBSim vPQRdot vector, and the w parameter is equivalent to vPQR.
     100                 :            :     The radius R is calculated below in the vector vToEyePt.
     101                 :            : 
     102                 :            :     @author Tony Peden, Jon Berndt
     103                 :            :     @version $Id: FGAuxiliary.h,v 1.18 2010/07/25 17:35:20 jberndt Exp $
     104                 :            : */
     105                 :            : 
     106                 :            : /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
     107                 :            : CLASS DECLARATION
     108                 :            : %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
     109                 :            : 
     110                 :            : class FGAuxiliary : public FGModel {
     111                 :            : public:
     112                 :            :   /** Constructor
     113                 :            :       @param Executive a pointer to the parent executive object */
     114                 :            :   FGAuxiliary(FGFDMExec* Executive);
     115                 :            : 
     116                 :            :   /// Destructor
     117                 :            :   ~FGAuxiliary();
     118                 :            : 
     119                 :            :   bool InitModel(void);
     120                 :            : 
     121                 :            :   /** Runs the Auxiliary routines; called by the Executive
     122                 :            :       @return false if no error */
     123                 :            :   bool Run(void);
     124                 :            : 
     125                 :            : // GET functions
     126                 :            : 
     127                 :            :   // Atmospheric parameters GET functions
     128                 :            :   /** Returns Calibrated airspeed in feet/second.*/
     129                 :          1 :   double GetVcalibratedFPS(void) const { return vcas; }
     130                 :            :   /** Returns Calibrated airspeed in knots.*/
     131                 :         46 :   double GetVcalibratedKTS(void) const { return vcas*fpstokts; }
     132                 :            :   /** Returns equivalent airspeed in feet/second. */
     133                 :          1 :   double GetVequivalentFPS(void) const { return veas; }
     134                 :            :   /** Returns equivalent airspeed in knots. */
     135                 :          1 :   double GetVequivalentKTS(void) const { return veas*fpstokts; }
     136                 :            : 
     137                 :            :   /** Returns the total pressure.
     138                 :            :       Total pressure is freestream total pressure for
     139                 :            :       subsonic only. For supersonic it is the 1D total pressure
     140                 :            :       behind a normal shock. */
     141                 :          1 :   double GetTotalPressure(void) const { return pt; }
     142                 :            : 
     143                 :            :   /** Returns the total temperature.
     144                 :            :     The total temperature ("tat", isentropic flow) is calculated:
     145                 :            :     @code
     146                 :            :     tat = sat*(1 + 0.2*Mach*Mach)
     147                 :            :     @endcode
     148                 :            :     (where "sat" is standard temperature) */
     149                 :            : 
     150                 :          1 :   double GetTotalTemperature(void) const { return tat; }
     151                 :          1 :   double GetTAT_C(void) const { return tatc; }
     152                 :            : 
     153                 :          3 :   double GetPilotAccel(int idx)  const { return vPilotAccel(idx);  }
     154                 :          3 :   double GetNpilot(int idx)      const { return vPilotAccelN(idx); }
     155                 :          3 :   double GetAeroPQR(int axis)    const { return vAeroPQR(axis);    }
     156                 :          3 :   double GetEulerRates(int axis) const { return vEulerRates(axis); }
     157                 :            : 
     158                 :            :   const FGColumnVector3& GetPilotAccel (void) const { return vPilotAccel;  }
     159                 :            :   const FGColumnVector3& GetNpilot     (void) const { return vPilotAccelN; }
     160                 :          0 :   const FGColumnVector3& GetAeroPQR    (void) const { return vAeroPQR;     }
     161                 :            :   const FGColumnVector3& GetEulerRates (void) const { return vEulerRates;  }
     162                 :       4909 :   const FGColumnVector3& GetAeroUVW    (void) const { return vAeroUVW;     }
     163                 :            :   const FGLocation&      GetLocationVRP(void) const { return vLocationVRP; }
     164                 :            : 
     165                 :            :   double GethVRP(void) const { return vLocationVRP.GetRadius() - Propagate->GetSeaLevelRadius(); }
     166                 :          3 :   double GetAeroUVW (int idx) const { return vAeroUVW(idx); }
     167                 :     324031 :   double Getalpha   (void) const { return alpha;      }
     168                 :     270026 :   double Getbeta    (void) const { return beta;       }
     169                 :          1 :   double Getadot    (void) const { return adot;       }
     170                 :          1 :   double Getbdot    (void) const { return bdot;       }
     171                 :          1 :   double GetMagBeta (void) const { return fabs(beta); }
     172                 :            : 
     173 [ +  - ][ #  # ]:       4910 :   double Getalpha   (int unit) const { if (unit == inDegrees) return alpha*radtodeg;
                 [ +  - ]
     174                 :          1 :                                        else return BadUnits(); }
     175 [ +  - ][ #  # ]:       4910 :   double Getbeta    (int unit) const { if (unit == inDegrees) return beta*radtodeg;
         [ #  # ][ +  - ]
     176                 :          1 :                                        else return BadUnits(); }
     177         [ +  - ]:          1 :   double Getadot    (int unit) const { if (unit == inDegrees) return adot*radtodeg;
     178                 :          1 :                                        else return BadUnits(); }
     179         [ +  - ]:          1 :   double Getbdot    (int unit) const { if (unit == inDegrees) return bdot*radtodeg;
     180                 :          1 :                                        else return BadUnits(); }
     181         [ +  - ]:          1 :   double GetMagBeta (int unit) const { if (unit == inDegrees) return fabs(beta)*radtodeg;
     182                 :          1 :                                        else return BadUnits(); }
     183                 :            : 
     184                 :     345067 :   double Getqbar          (void) const { return qbar;       }
     185                 :          1 :   double GetqbarUW        (void) const { return qbarUW;     }
     186                 :          1 :   double GetqbarUV        (void) const { return qbarUV;     }
     187                 :       4910 :   double GetReynoldsNumber(void) const { return Re;         }
     188                 :            : 
     189                 :            :   /** Gets the magnitude of total vehicle velocity including wind effects in feet per second. */
     190                 :      58915 :   double GetVt            (void) const { return Vt;         }
     191                 :            : 
     192                 :            :   /** Gets the ground speed in feet per second.
     193                 :            :       The magnitude is the square root of the sum of the squares (RSS) of the 
     194                 :            :       vehicle north and east velocity components.
     195                 :            :       @return The magnitude of the vehicle velocity in the horizontal plane. */
     196                 :          1 :   double GetVground       (void) const { return Vground;    }
     197                 :            : 
     198                 :            :   /** Gets the Mach number. */
     199                 :     162019 :   double GetMach          (void) const { return Mach;       }
     200                 :            : 
     201                 :            :   /** The mach number calculated using the vehicle X axis velocity. */
     202                 :          1 :   double GetMachU         (void) const { return MachU;      }
     203                 :            : 
     204                 :            :   /** The vertical acceleration in g's of the aircraft center of gravity. */
     205                 :          1 :   double GetNz            (void) const { return Nz;         }
     206                 :            : 
     207                 :          1 :   double GetHOverBCG(void) const { return hoverbcg; }
     208                 :          1 :   double GetHOverBMAC(void) const { return hoverbmac; }
     209                 :            : 
     210                 :      54006 :   double GetGamma(void)              const { return gamma;         }
     211                 :          1 :   double GetGroundTrack(void)        const { return psigt;         }
     212                 :            : 
     213                 :            :   double GetHeadWind(void) const;
     214                 :            :   double GetCrossWind(void) const;
     215                 :            : 
     216                 :            : // SET functions
     217                 :            : 
     218                 :            :   void SetAeroUVW(FGColumnVector3 tt) { vAeroUVW = tt; }
     219                 :            : 
     220                 :          0 :   void Setalpha  (double tt) { alpha = tt;  }
     221                 :          0 :   void Setbeta   (double tt) { beta  = tt;  }
     222                 :          1 :   void Setqbar   (double tt) { qbar = tt;   }
     223                 :          0 :   void SetqbarUW (double tt) { qbarUW = tt; }
     224                 :          0 :   void SetqbarUV (double tt) { qbarUV = tt; }
     225                 :          1 :   void SetVt     (double tt) { Vt = tt;     }
     226                 :          1 :   void SetMach   (double tt) { Mach=tt;     }
     227                 :          0 :   void Setadot   (double tt) { adot = tt;   }
     228                 :          0 :   void Setbdot   (double tt) { bdot = tt;   }
     229                 :            : 
     230                 :          1 :   void SetAB    (double t1, double t2) { alpha=t1; beta=t2; }
     231                 :          0 :   void SetGamma (double tt)            { gamma = tt;        }
     232                 :            : 
     233                 :            : // Time routines, SET and GET functions, used by FGMSIS atmosphere
     234                 :            : 
     235                 :            :   void SetDayOfYear    (int doy)    { day_of_year = doy;    }
     236                 :            :   void SetSecondsInDay (double sid) { seconds_in_day = sid; }
     237                 :            : 
     238                 :          0 :   int    GetDayOfYear    (void) const { return day_of_year;    }
     239                 :          0 :   double GetSecondsInDay (void) const { return seconds_in_day; }
     240                 :            : 
     241                 :          1 :   double GetLongitudeRelativePosition (void) const { return lon_relative_position; }
     242                 :          1 :   double GetLatitudeRelativePosition  (void) const { return lat_relative_position; }
     243                 :          1 :   double GetDistanceRelativePosition  (void) const { return relative_position; }
     244                 :            : 
     245                 :            :   void SetAeroPQR(FGColumnVector3 tt) { vAeroPQR = tt; }
     246                 :            : 
     247                 :            : private:
     248                 :            :   double vcas, veas;
     249                 :            :   double rhosl, rho, p, psl, pt, tat, sat, tatc; // Don't add a getter for pt!
     250                 :            : 
     251                 :            :   FGColumnVector3 vPilotAccel;
     252                 :            :   FGColumnVector3 vPilotAccelN;
     253                 :            :   FGColumnVector3 vToEyePt;
     254                 :            :   FGColumnVector3 vAeroPQR;
     255                 :            :   FGColumnVector3 vAeroUVW;
     256                 :            :   FGColumnVector3 vEuler;
     257                 :            :   FGColumnVector3 vEulerRates;
     258                 :            :   FGColumnVector3 vMachUVW;
     259                 :            :   FGColumnVector3 vAircraftAccel;
     260                 :            :   FGLocation vLocationVRP;
     261                 :            : 
     262                 :            :   double Vt, Vground, Mach, MachU;
     263                 :            :   double qbar, qbarUW, qbarUV;
     264                 :            :   double Re; // Reynolds Number = V*c/mu
     265                 :            :   double alpha, beta;
     266                 :            :   double adot,bdot;
     267                 :            :   double psigt, gamma;
     268                 :            :   double Nz;
     269                 :            :   double seconds_in_day;  // seconds since current GMT day began
     270                 :            :   int    day_of_year;     // GMT day, 1 .. 366
     271                 :            : 
     272                 :            :   double hoverbcg, hoverbmac;
     273                 :            : 
     274                 :            :   // helper data, calculation of distance from initial position
     275                 :            : 
     276                 :            :   double lon_relative_position;
     277                 :            :   double lat_relative_position;
     278                 :            :   double relative_position;
     279                 :            : 
     280                 :            :   void CalculateRelativePosition(void);
     281                 :            : 
     282                 :            :   void bind(void);
     283                 :            :   double BadUnits(void) const;
     284                 :            :   void Debug(int from);
     285                 :            : };
     286                 :            : 
     287                 :            : } // namespace JSBSim
     288                 :            : 
     289                 :            : //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
     290                 :            : #endif

Generated by: LCOV version 1.9