LCOV - code coverage report
Current view: top level - home/jon/JSBSim/src - FGFDMExec.h (source / functions) Hit Total Coverage
Test: JSBSim-Coverage-Statistics Lines: 36 57 63.2 %
Date: 2010-08-24 Functions: 2 3 66.7 %
Legend: Lines: hit not hit | Branches: + taken - not taken # not executed Branches: 0 4 0.0 %

           Branch data     Line data    Source code
       1                 :            : /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
       2                 :            :  Header:       FGFDMExec.h
       3                 :            :  Author:       Jon Berndt
       4                 :            :  Date started: 11/17/98
       5                 :            :  file The header file for the JSBSim executive.
       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/17/98   JSB   Created
      29                 :            : 7/31/99     TP   Added RunIC function that runs the sim so that every frame
      30                 :            :                  begins with the IC values from the given FGInitialCondition
      31                 :            :                  object and dt=0.
      32                 :            : 
      33                 :            : %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
      34                 :            : SENTRY
      35                 :            : %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
      36                 :            : 
      37                 :            : #ifndef FGFDMEXEC_HEADER_H
      38                 :            : #define FGFDMEXEC_HEADER_H
      39                 :            : 
      40                 :            : /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
      41                 :            : INCLUDES
      42                 :            : %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
      43                 :            : 
      44                 :            : #include "models/FGModel.h"
      45                 :            : #include "models/FGOutput.h"
      46                 :            : #include "models/FGInput.h"
      47                 :            : #include "initialization/FGTrim.h"
      48                 :            : #include "initialization/FGInitialCondition.h"
      49                 :            : #include "FGJSBBase.h"
      50                 :            : #include "input_output/FGPropertyManager.h"
      51                 :            : #include "input_output/FGGroundCallback.h"
      52                 :            : #include "input_output/FGXMLFileRead.h"
      53                 :            : #include "models/FGPropagate.h"
      54                 :            : #include "math/FGColumnVector3.h"
      55                 :            : 
      56                 :            : #include <vector>
      57                 :            : #include <string>
      58                 :            : 
      59                 :            : /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
      60                 :            : DEFINITIONS
      61                 :            : %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
      62                 :            : 
      63                 :            : #define ID_FDMEXEC "$Id: FGFDMExec.h,v 1.52 2010/07/04 13:50:21 jberndt Exp $"
      64                 :            : 
      65                 :            : /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
      66                 :            : FORWARD DECLARATIONS
      67                 :            : %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
      68                 :            : 
      69                 :            : namespace JSBSim {
      70                 :            : 
      71                 :            : class FGScript;
      72                 :            : class FGTrim;
      73                 :            : 
      74                 :            : /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
      75                 :            : CLASS DOCUMENTATION
      76                 :            : %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
      77                 :            : 
      78                 :            : /** Encapsulates the JSBSim simulation executive.
      79                 :            :     This class is the executive class through which all other simulation classes
      80                 :            :     are instantiated, initialized, and run. When integrated with FlightGear (or
      81                 :            :     other flight simulator) this class is typically instantiated by an interface
      82                 :            :     class on the simulator side.
      83                 :            : 
      84                 :            :     At the time of simulation initialization, the interface
      85                 :            :     class creates an instance of this executive class. The
      86                 :            :     executive is subsequently directed to load the chosen aircraft specification
      87                 :            :     file:
      88                 :            : 
      89                 :            :     @code
      90                 :            :     fdmex = new FGFDMExec( … );
      91                 :            :     result = fdmex->LoadModel( … );
      92                 :            :     @endcode
      93                 :            : 
      94                 :            :     When an aircraft model is loaded, the config file is parsed and for each of the
      95                 :            :     sections of the config file (propulsion, flight control, etc.) the
      96                 :            :     corresponding Load() method is called (e.g. FGFCS::Load()).
      97                 :            : 
      98                 :            :     Subsequent to the creation of the executive and loading of the model,
      99                 :            :     initialization is performed. Initialization involves copying control inputs
     100                 :            :     into the appropriate JSBSim data storage locations, configuring it for the set
     101                 :            :     of user supplied initial conditions, and then copying state variables from
     102                 :            :     JSBSim. The state variables are used to drive the instrument displays and to
     103                 :            :     place the vehicle model in world space for visual rendering:
     104                 :            : 
     105                 :            :     @code
     106                 :            :     copy_to_JSBsim(); // copy control inputs to JSBSim
     107                 :            :     fdmex->RunIC(); // loop JSBSim once w/o integrating
     108                 :            :     copy_from_JSBsim(); // update the bus
     109                 :            :     @endcode
     110                 :            : 
     111                 :            :     Once initialization is complete, cyclic execution proceeds:
     112                 :            : 
     113                 :            :     @code
     114                 :            :     copy_to_JSBsim(); // copy control inputs to JSBSim
     115                 :            :     fdmex->Run(); // execute JSBSim
     116                 :            :     copy_from_JSBsim(); // update the bus
     117                 :            :     @endcode
     118                 :            : 
     119                 :            :     JSBSim can be used in a standalone mode by creating a compact stub program
     120                 :            :     that effectively performs the same progression of steps as outlined above for
     121                 :            :     the integrated version, but with two exceptions. First, the copy_to_JSBSim()
     122                 :            :     and copy_from_JSBSim() functions are not used because the control inputs are
     123                 :            :     handled directly by the scripting facilities and outputs are handled by the
     124                 :            :     output (data logging) class. Second, the name of a script file can be supplied
     125                 :            :     to the stub program. Scripting (see FGScript) provides a way to supply command
     126                 :            :     inputs to the simulation:
     127                 :            : 
     128                 :            :     @code
     129                 :            :     FDMExec = new JSBSim::FGFDMExec();
     130                 :            :     FDMExec->LoadScript( ScriptName ); // the script loads the aircraft and ICs
     131                 :            :     result = FDMExec->Run();
     132                 :            :     while (result) { // cyclic execution
     133                 :            :       result = FDMExec->Run(); // execute JSBSim
     134                 :            :     }
     135                 :            :     @endcode
     136                 :            : 
     137                 :            :     The standalone mode has been useful for verifying changes before committing
     138                 :            :     updates to the source code repository. It is also useful for running sets of
     139                 :            :     tests that reveal some aspects of simulated aircraft performance, such as
     140                 :            :     range, time-to-climb, takeoff distance, etc.
     141                 :            : 
     142                 :            :     <h3>JSBSim Debugging Directives</h3>
     143                 :            : 
     144                 :            :     This describes to any interested entity the debug level
     145                 :            :     requested by setting the JSBSIM_DEBUG environment variable.
     146                 :            :     The bitmasked value choices are as follows:
     147                 :            :     - <b>unset</b>: In this case (the default) JSBSim would only print
     148                 :            :        out the normally expected messages, essentially echoing
     149                 :            :        the config files as they are read. If the environment
     150                 :            :        variable is not set, debug_lvl is set to 1 internally
     151                 :            :     - <b>0</b>: This requests JSBSim not to output any messages
     152                 :            :        whatsoever
     153                 :            :     - <b>1</b>: This value explicity requests the normal JSBSim
     154                 :            :        startup messages
     155                 :            :     - <b>2</b>: This value asks for a message to be printed out when
     156                 :            :        a class is instantiated
     157                 :            :     - <b>4</b>: When this value is set, a message is displayed when a
     158                 :            :        FGModel object executes its Run() method
     159                 :            :     - <b>8</b>: When this value is set, various runtime state variables
     160                 :            :        are printed out periodically
     161                 :            :     - <b>16</b>: When set various parameters are sanity checked and
     162                 :            :        a message is printed out when they go out of bounds
     163                 :            : 
     164                 :            :     <h3>Properties</h3>
     165                 :            :     @property simulator/do_trim (write only) Can be set to the integer equivalent to one of
     166                 :            :                                 tLongitudinal (0), tFull (1), tGround (2), tPullup (3),
     167                 :            :                                 tCustom (4), tTurn (5). Setting this to a legal value
     168                 :            :                                 (such as by a script) causes a trim to be performed. This
     169                 :            :                                 property actually maps toa function call of DoTrim().
     170                 :            : 
     171                 :            :     @author Jon S. Berndt
     172                 :            :     @version $Revision: 1.52 $
     173                 :            : */
     174                 :            : 
     175                 :            : /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
     176                 :            : CLASS DECLARATION
     177                 :            : %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
     178                 :            : 
     179                 :            : class FGFDMExec : public FGJSBBase, public FGXMLFileRead
     180                 :            : {
     181                 :            :   struct childData {
     182                 :            :     FGFDMExec* exec;
     183                 :            :     string info;
     184                 :            :     FGColumnVector3 Loc;
     185                 :            :     FGColumnVector3 Orient;
     186                 :            :     bool mated;
     187                 :            :     bool internal;
     188                 :            : 
     189                 :          0 :     childData(void) {
     190                 :          0 :       info = "";
     191                 :          0 :       Loc = FGColumnVector3(0,0,0);
     192                 :          0 :       Orient = FGColumnVector3(0,0,0);
     193                 :          0 :       mated = true;
     194                 :          0 :       internal = false;
     195                 :          0 :     }
     196                 :            :     
     197                 :          0 :     void Run(void) {exec->Run();}
     198                 :            :     void AssignState(FGPropagate* source_prop) {
     199                 :          0 :       exec->GetPropagate()->SetVState(source_prop->GetVState());
     200                 :            :     }
     201                 :            : 
     202                 :            :     ~childData(void) {
     203                 :            :       delete exec;
     204                 :            :     }
     205                 :            :   };
     206                 :            : 
     207                 :            : public:
     208                 :            : 
     209                 :            :   /// Default constructor
     210                 :            :   FGFDMExec(FGPropertyManager* root = 0);
     211                 :            : 
     212                 :            :   /// Default destructor
     213                 :            :   ~FGFDMExec();
     214                 :            : 
     215                 :            :   /** This routine places a model into the runlist at the specified rate. The
     216                 :            :       "rate" is not really a clock rate. It represents how many calls to the
     217                 :            :       FGFDMExec::Run() method must be made before the model is executed. A
     218                 :            :       value of 1 means that the model will be executed for each call to the
     219                 :            :       exec's Run() method. A value of 5 means that the model will only be
     220                 :            :       executed every 5th call to the exec's Run() method. Use of a rate other than
     221                 :            :       one is at this time not recommended.
     222                 :            :       @param model A pointer to the model being scheduled.
     223                 :            :       @param rate The rate at which to execute the model as described above.
     224                 :            :       @return Currently returns 0 always. */
     225                 :            :   void Schedule(FGModel* model, int rate);
     226                 :            : 
     227                 :            :   /** This function executes each scheduled model in succession.
     228                 :            :       @return true if successful, false if sim should be ended  */
     229                 :            :   bool Run(void);
     230                 :            : 
     231                 :            :   /** Initializes the sim from the initial condition object and executes
     232                 :            :       each scheduled model without integrating i.e. dt=0.
     233                 :            :       @return true if successful */
     234                 :            :   bool RunIC(void);
     235                 :            : 
     236                 :            :   /** Sets the ground callback pointer.
     237                 :            :       @param gc A pointer to a ground callback object.  */
     238                 :            :   void SetGroundCallback(FGGroundCallback* gc);
     239                 :            : 
     240                 :            :   /** Loads an aircraft model.
     241                 :            :       @param AircraftPath path to the aircraft/ directory. For instance:
     242                 :            :       "aircraft". Under aircraft, then, would be directories for various
     243                 :            :       modeled aircraft such as C172/, x15/, etc.
     244                 :            :       @param EnginePath path to the directory under which engine config
     245                 :            :       files are kept, for instance "engine"
     246                 :            :       @param SystemsPath path to the directory under which systems config
     247                 :            :       files are kept, for instance "systems"
     248                 :            :       @param model the name of the aircraft model itself. This file will
     249                 :            :       be looked for in the directory specified in the AircraftPath variable,
     250                 :            :       and in turn under the directory with the same name as the model. For
     251                 :            :       instance: "aircraft/x15/x15.xml"
     252                 :            :       @param addModelToPath set to true to add the model name to the
     253                 :            :       AircraftPath, defaults to true
     254                 :            :       @return true if successful */
     255                 :            :   bool LoadModel(string AircraftPath, string EnginePath, string SystemsPath,
     256                 :            :                  string model, bool addModelToPath = true);
     257                 :            : 
     258                 :            :   /** Loads an aircraft model.  The paths to the aircraft and engine
     259                 :            :       config file directories must be set prior to calling this.  See
     260                 :            :       below.
     261                 :            :       @param model the name of the aircraft model itself. This file will
     262                 :            :       be looked for in the directory specified in the AircraftPath variable,
     263                 :            :       and in turn under the directory with the same name as the model. For
     264                 :            :       instance: "aircraft/x15/x15.xml"
     265                 :            :       @param addModelToPath set to true to add the model name to the
     266                 :            :       AircraftPath, defaults to true
     267                 :            :       @return true if successful*/
     268                 :            :   bool LoadModel(string model, bool addModelToPath = true);
     269                 :            : 
     270                 :            :   /** Loads a script
     271                 :            :       @param Script the full path name and file name for the script to be loaded.
     272                 :            :       @return true if successfully loadsd; false otherwise. */
     273                 :            :   bool LoadScript(string Script, double deltaT);
     274                 :            : 
     275                 :            :   /** Sets the path to the engine config file directories.
     276                 :            :       @param path path to the directory under which engine config
     277                 :            :       files are kept, for instance "engine"  */
     278                 :          2 :   bool SetEnginePath(string path)   { EnginePath = RootDir + path; return true; }
     279                 :            : 
     280                 :            :   /** Sets the path to the aircraft config file directories.
     281                 :            :       @param path path to the aircraft directory. For instance:
     282                 :            :       "aircraft". Under aircraft, then, would be directories for various
     283                 :            :       modeled aircraft such as C172/, x15/, etc.  */
     284                 :          2 :   bool SetAircraftPath(string path) { AircraftPath = RootDir + path; return true; }
     285                 :            :   
     286                 :            :   /** Sets the path to the systems config file directories.
     287                 :            :       @param path path to the directory under which systems config
     288                 :            :       files are kept, for instance "systems"  */
     289                 :          2 :   bool SetSystemsPath(string path)   { SystemsPath = RootDir + path; return true; }
     290                 :            :   
     291                 :            :   /// @name Top-level executive State and Model retrieval mechanism
     292                 :            :   //@{
     293                 :            :   /// Returns the FGAtmosphere pointer.
     294                 :     648093 :   inline FGAtmosphere* GetAtmosphere(void)    {return Atmosphere;}
     295                 :            :   /// Returns the FGFCS pointer.
     296                 :         26 :   inline FGFCS* GetFCS(void)                  {return FCS;}
     297                 :            :   /// Returns the FGPropulsion pointer.
     298                 :         27 :   inline FGPropulsion* GetPropulsion(void)    {return Propulsion;}
     299                 :            :   /// Returns the FGAircraft pointer.
     300                 :     648074 :   inline FGMassBalance* GetMassBalance(void)  {return MassBalance;}
     301                 :            :   /// Returns the FGAerodynamics pointer
     302                 :         14 :   inline FGAerodynamics* GetAerodynamics(void){return Aerodynamics;}
     303                 :            :   /// Returns the FGInertial pointer.
     304                 :         15 :   inline FGInertial* GetInertial(void)        {return Inertial;}
     305                 :            :   /// Returns the FGGroundReactions pointer.
     306                 :         14 :   inline FGGroundReactions* GetGroundReactions(void) {return GroundReactions;}
     307                 :            :   /// Returns the FGExternalReactions pointer.
     308                 :         14 :   inline FGExternalReactions* GetExternalReactions(void) {return ExternalReactions;}
     309                 :            :   /// Returns the FGBuoyantForces pointer.
     310                 :         14 :   inline FGBuoyantForces* GetBuoyantForces(void) {return BuoyantForces;}
     311                 :            :   /// Returns the FGAircraft pointer.
     312                 :         26 :   inline FGAircraft* GetAircraft(void)        {return Aircraft;}
     313                 :            :   /// Returns the FGPropagate pointer.
     314                 :     108038 :   inline FGPropagate* GetPropagate(void)      {return Propagate;}
     315                 :            :   /// Returns the FGAuxiliary pointer.
     316                 :         26 :   inline FGAuxiliary* GetAuxiliary(void)      {return Auxiliary;}
     317                 :            :   /// Returns the FGInput pointer.
     318                 :          0 :   inline FGInput* GetInput(void)              {return Input;}
     319                 :            :   /// Returns the FGGroundCallback pointer.
     320                 :      58917 :   inline FGGroundCallback* GetGroundCallback(void) {return GroundCallback;}
     321                 :            :   /// Retrieves the script object
     322                 :            :   inline FGScript* GetScript(void) {return Script;}
     323                 :            :   // Returns a pointer to the FGInitialCondition object
     324                 :     108011 :   inline FGInitialCondition* GetIC(void)      {return IC;}
     325                 :            :   // Returns a pointer to the FGTrim object
     326                 :            :   FGTrim* GetTrim(void);
     327                 :            :   //@}
     328                 :            : 
     329                 :            :   /// Retrieves the engine path.
     330                 :         24 :   inline string GetEnginePath(void)          {return EnginePath;}
     331                 :            :   /// Retrieves the aircraft path.
     332                 :            :   inline string GetAircraftPath(void)        {return AircraftPath;}
     333                 :            :   /// Retrieves the systems path.
     334                 :          4 :   inline string GetSystemsPath(void)         {return SystemsPath;}
     335                 :            :   /// Retrieves the full aircraft path name.
     336                 :         29 :   inline string GetFullAircraftPath(void)    {return FullAircraftPath;}
     337                 :            : 
     338                 :            :   /** Retrieves the value of a property.
     339                 :            :       @param property the name of the property
     340                 :            :       @result the value of the specified property */
     341                 :            :   inline double GetPropertyValue(string property) {return instance->GetDouble(property);}
     342                 :            : 
     343                 :            :   /** Sets a property value.
     344                 :            :       @param property the property to be set
     345                 :            :       @param value the value to set the property to */
     346                 :            :   inline void SetPropertyValue(string property, double value) {
     347                 :          0 :     instance->SetDouble(property, value);
     348                 :            :   }
     349                 :            : 
     350                 :            :   /// Returns the model name.
     351                 :            :   string GetModelName(void) { return modelName; }
     352                 :            : /*
     353                 :            :   /// Returns the current time.
     354                 :            :   double GetSimTime(void);
     355                 :            : 
     356                 :            :   /// Returns the current frame time (delta T).
     357                 :            :   double GetDeltaT(void);
     358                 :            : */  
     359                 :            :   /// Returns a pointer to the property manager object.
     360                 :            :   FGPropertyManager* GetPropertyManager(void);
     361                 :            :   /// Returns a vector of strings representing the names of all loaded models (future)
     362                 :            :   vector <string> EnumerateFDMs(void);
     363                 :            :   /// Gets the number of child FDMs.
     364                 :     108014 :   int GetFDMCount(void) {return (int)ChildFDMList.size();}
     365                 :            :   /// Gets a particular child FDM.
     366                 :          0 :   childData* GetChildFDM(int i) {return ChildFDMList[i];}
     367                 :            :   /// Marks this instance of the Exec object as a "child" object.
     368                 :          0 :   void SetChild(bool ch) {IsChild = ch;}
     369                 :            : 
     370                 :            :   /** Sets the output (logging) mechanism for this run.
     371                 :            :       Calling this function passes the name of an output directives file to
     372                 :            :       the FGOutput object associated with this run. The call to this function
     373                 :            :       should be made prior to loading an aircraft model. This call results in an
     374                 :            :       FGOutput object being built as the first Output object in the FDMExec-managed
     375                 :            :       list of Output objects that may be created for an aircraft model. If this call
     376                 :            :       is made after an aircraft model is loaded, there is no effect. Any Output
     377                 :            :       objects added by the aircraft model itself (in an &lt;output> element) will be
     378                 :            :       added after this one. Care should be taken not to refer to the same file
     379                 :            :       name.
     380                 :            :       An output directives file contains an &lt;output> &lt;/output> element, within
     381                 :            :       which should be specified the parameters or parameter groups that should
     382                 :            :       be logged.
     383                 :            :       @param fname the filename of an output directives file.
     384                 :            :     */
     385                 :            :   bool SetOutputDirectives(string fname);
     386                 :            : 
     387                 :            :   /** Sets (or overrides) the output filename
     388                 :            :       @param fname the name of the file to output data to
     389                 :            :       @return true if successful, false if there is no output specified for the flight model */
     390                 :            :   bool SetOutputFileName(string fname) {
     391         [ #  # ]:          0 :     if (Outputs.size() > 0) Outputs[0]->SetOutputFileName(fname);
     392                 :          0 :     else return false;
     393                 :          0 :     return true;
     394                 :            :   }
     395                 :            : 
     396                 :            :   /** Retrieves the current output filename.
     397                 :            :       @return the name of the output file for the first output specified by the flight model.
     398                 :            :               If none is specified, the empty string is returned. */
     399                 :            :   string GetOutputFileName(void) {
     400         [ #  # ]:          0 :     if (Outputs.size() > 0) return Outputs[0]->GetOutputFileName();
     401                 :          0 :     else return string("");
     402                 :            :   }
     403                 :            : 
     404                 :            :   /** Executes trimming in the selected mode.
     405                 :            :   *   @param mode Specifies how to trim:
     406                 :            :   * - tLongitudinal=0
     407                 :            :   * - tFull
     408                 :            :   * - tGround
     409                 :            :   * - tPullup
     410                 :            :   * - tCustom
     411                 :            :   * - tTurn
     412                 :            :   * - tNone  */
     413                 :            :   void DoTrim(int mode);
     414                 :            : //  void DoTrimAnalysis(int mode);
     415                 :            : 
     416                 :            :   /// Disables data logging to all outputs.
     417                 :            :   void DisableOutput(void);
     418                 :            :   /// Enables data logging to all outputs.
     419                 :            :   void EnableOutput(void);
     420                 :            :   /// Pauses execution by preventing time from incrementing.
     421                 :          0 :   void Hold(void) {holding = true;}
     422                 :            :   /// Resumes execution from a "Hold".
     423                 :          0 :   void Resume(void) {holding = false;}
     424                 :            :   /// Returns true if the simulation is Holding (i.e. simulation time is not moving).
     425                 :     760981 :   bool Holding(void) {return holding;}
     426                 :            :   /// Resets the initial conditions object and prepares the simulation to run again.
     427                 :            :   void ResetToInitialConditions(void);
     428                 :            :   /// Sets the debug level.
     429                 :          0 :   void SetDebugLevel(int level) {debug_lvl = level;}
     430                 :            : 
     431                 :        110 :   struct PropertyCatalogStructure {
     432                 :            :     /// Name of the property.
     433                 :            :     string base_string;
     434                 :            :     /// The node for the property.
     435                 :            :     FGPropertyManager *node;
     436                 :            :   };
     437                 :            : 
     438                 :            :   /** Builds a catalog of properties.
     439                 :            :   *   This function descends the property tree and creates a list (an STL vector)
     440                 :            :   *   containing the name and node for all properties.
     441                 :            :   *   @param pcs The "root" property catalog structure pointer.  */
     442                 :            :   void BuildPropertyCatalog(struct PropertyCatalogStructure* pcs);
     443                 :            : 
     444                 :            :   /** Retrieves property or properties matching the supplied string.
     445                 :            :   *   A string is returned that contains a carriage return delimited list of all
     446                 :            :   *   strings in the property catalog that matches the supplied check string.
     447                 :            :   *   @param check The string to search for in the property catalog.
     448                 :            :   *   @return the carriage-return-delimited string containing all matching strings
     449                 :            :   *               in the catalog.  */
     450                 :            :   string QueryPropertyCatalog(string check);
     451                 :            : 
     452                 :            :   // Print the contents of the property catalog for the loaded aircraft.
     453                 :            :   void PrintPropertyCatalog(void);
     454                 :            : 
     455                 :            :   vector<string>& GetPropertyCatalog(void) {return PropertyCatalog;}
     456                 :            : 
     457                 :            :   /// Use the MSIS atmosphere model.
     458                 :            :   void UseAtmosphereMSIS(void);
     459                 :            : 
     460                 :            :   /// Use the Mars atmosphere model. (Not operative yet.)
     461                 :            :   void UseAtmosphereMars(void);
     462                 :            : 
     463                 :            :   void SetTrimStatus(bool status){ trim_status = status; }
     464                 :            :   bool GetTrimStatus(void) const { return trim_status; }
     465                 :            :   void SetTrimMode(int mode){ ta_mode = mode; }
     466                 :            :   int GetTrimMode(void) const { return ta_mode; }
     467                 :            : 
     468                 :            :   /// Returns the cumulative simulation time in seconds.
     469                 :     490945 :   double GetSimTime(void) const { return sim_time; }
     470                 :            : 
     471                 :            :   /// Returns the simulation delta T.
     472                 :    1899027 :   double GetDeltaT(void) {return dT;}
     473                 :            : 
     474                 :            :   /// Suspends the simulation and sets the delta T to zero.
     475                 :          1 :   void SuspendIntegration(void) {saved_dT = dT; dT = 0.0;}
     476                 :            : 
     477                 :            :   /// Resumes the simulation by resetting delta T to the correct value.
     478                 :          1 :   void ResumeIntegration(void)  {dT = saved_dT;}
     479                 :            : 
     480                 :            :   /** Returns the simulation suspension state.
     481                 :            :       @return true if suspended, false if executing  */
     482                 :      58915 :   bool IntegrationSuspended(void) {return dT == 0.0;}
     483                 :            : 
     484                 :            :   /** Sets the current sim time.
     485                 :            :       @param cur_time the current time
     486                 :            :       @return the current simulation time.      */
     487                 :            :   double Setsim_time(double cur_time) {
     488                 :          1 :     sim_time = cur_time;
     489                 :          1 :     return sim_time;
     490                 :            :   }
     491                 :            : 
     492                 :            :   /** Sets the integration time step for the simulation executive.
     493                 :            :       @param delta_t the time step in seconds.     */
     494                 :          2 :   void Setdt(double delta_t) { dT = delta_t; }
     495                 :            : 
     496                 :            :   /** Sets the root directory where JSBSim starts looking for its system directories.
     497                 :            :       @param rootDir the string containing the root directory. */
     498                 :          1 :   void SetRootDir(string rootDir) {RootDir = rootDir;}
     499                 :            : 
     500                 :            :   /** Retrieves teh Root Directory.
     501                 :            :       @return the string representing the root (base) JSBSim directory. */
     502                 :          1 :   string GetRootDir(void) const {return RootDir;}
     503                 :            : 
     504                 :            :   /** Increments the simulation time.
     505                 :            :       @return the new simulation time.     */
     506                 :            :   double IncrTime(void) {
     507                 :      54005 :     sim_time += dT;
     508                 :      54005 :     return sim_time;
     509                 :            :   }
     510                 :            : 
     511                 :            :   /** Retrieves the current debug level setting. */
     512                 :          1 :   int GetDebugLevel(void) const {return debug_lvl;};
     513                 :            : 
     514                 :            : private:
     515                 :            :   static unsigned int FDMctr;
     516                 :            :   int Error;
     517                 :            :   unsigned int Frame;
     518                 :            :   unsigned int IdFDM;
     519                 :            :   unsigned short Terminate;
     520                 :            :   double dT;
     521                 :            :   double saved_dT;
     522                 :            :   double sim_time;
     523                 :            :   bool holding;
     524                 :            :   bool Constructing;
     525                 :            :   bool modelLoaded;
     526                 :            :   bool IsChild;
     527                 :            :   string modelName;
     528                 :            :   string AircraftPath;
     529                 :            :   string FullAircraftPath;
     530                 :            :   string EnginePath;
     531                 :            :   string SystemsPath;
     532                 :            :   string CFGVersion;
     533                 :            :   string Release;
     534                 :            :   string RootDir;
     535                 :            : 
     536                 :            :   bool trim_status;
     537                 :            :   int ta_mode;
     538                 :            : 
     539                 :            :   static FGPropertyManager *master;
     540                 :            : 
     541                 :            :   FGGroundCallback*   GroundCallback;
     542                 :            :   FGAtmosphere*       Atmosphere;
     543                 :            :   FGFCS*              FCS;
     544                 :            :   FGPropulsion*       Propulsion;
     545                 :            :   FGMassBalance*      MassBalance;
     546                 :            :   FGAerodynamics*     Aerodynamics;
     547                 :            :   FGInertial*         Inertial;
     548                 :            :   FGGroundReactions*  GroundReactions;
     549                 :            :   FGExternalReactions* ExternalReactions;
     550                 :            :   FGBuoyantForces*    BuoyantForces;
     551                 :            :   FGAircraft*         Aircraft;
     552                 :            :   FGPropagate*        Propagate;
     553                 :            :   FGAuxiliary*        Auxiliary;
     554                 :            :   FGInput*            Input;
     555                 :            :   FGScript*           Script;
     556                 :            :   FGInitialCondition* IC;
     557                 :            :   FGTrim*             Trim;
     558                 :            : 
     559                 :            :   FGPropertyManager* Root;
     560                 :            :   FGPropertyManager* instance;
     561                 :            : 
     562                 :            :   vector <string> PropertyCatalog;
     563                 :            :   vector <FGOutput*> Outputs;
     564                 :            :   vector <childData*> ChildFDMList;
     565                 :            :   vector <FGModel*> Models;
     566                 :            : 
     567                 :            :   bool ReadFileHeader(Element*);
     568                 :            :   bool ReadChild(Element*);
     569                 :            :   bool ReadPrologue(Element*);
     570                 :            :   void ResetToInitialConditions(int mode);
     571                 :            :   bool Allocate(void);
     572                 :            :   bool DeAllocate(void);
     573                 :            :   void Initialize(FGInitialCondition *FGIC);
     574                 :            : 
     575                 :            :   void Debug(int from);
     576                 :            : };
     577                 :            : }
     578                 :            : //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
     579                 :            : #endif

Generated by: LCOV version 1.9