LCOV - code coverage report
Current view: top level - models/propulsion - FGThruster.cpp (source / functions) Hit Total Coverage
Test: JSBSim-Coverage-Statistics Lines: 38 54 70.4 %
Date: 2010-08-24 Functions: 6 11 54.5 %
Legend: Lines: hit not hit | Branches: + taken - not taken # not executed Branches: 10 34 29.4 %

           Branch data     Line data    Source code
       1                 :            : /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
       2                 :            : 
       3                 :            :  Module:       FGThruster.cpp
       4                 :            :  Author:       Jon S. Berndt
       5                 :            :  Date started: 08/23/00
       6                 :            :  Purpose:      Encapsulates the thruster object
       7                 :            : 
       8                 :            :  ------------- Copyright (C) 2000  Jon S. Berndt (jon@jsbsim.org) -------------
       9                 :            : 
      10                 :            :  This program is free software; you can redistribute it and/or modify it under
      11                 :            :  the terms of the GNU Lesser General Public License as published by the Free Software
      12                 :            :  Foundation; either version 2 of the License, or (at your option) any later
      13                 :            :  version.
      14                 :            : 
      15                 :            :  This program is distributed in the hope that it will be useful, but WITHOUT
      16                 :            :  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
      17                 :            :  FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public License for more
      18                 :            :  details.
      19                 :            : 
      20                 :            :  You should have received a copy of the GNU Lesser General Public License along with
      21                 :            :  this program; if not, write to the Free Software Foundation, Inc., 59 Temple
      22                 :            :  Place - Suite 330, Boston, MA  02111-1307, USA.
      23                 :            : 
      24                 :            :  Further information about the GNU Lesser General Public License can also be found on
      25                 :            :  the world wide web at http://www.gnu.org.
      26                 :            : 
      27                 :            : FUNCTIONAL DESCRIPTION
      28                 :            : --------------------------------------------------------------------------------
      29                 :            : 
      30                 :            : HISTORY
      31                 :            : --------------------------------------------------------------------------------
      32                 :            : 08/23/00  JSB  Created
      33                 :            : 
      34                 :            : %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
      35                 :            : INCLUDES
      36                 :            : %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
      37                 :            : 
      38                 :            : #include <iostream>
      39                 :            : #include <sstream>
      40                 :            : 
      41                 :            : #include "FGThruster.h"
      42                 :            : #include "input_output/FGXMLElement.h"
      43                 :            : 
      44                 :            : using namespace std;
      45                 :            : 
      46                 :            : namespace JSBSim {
      47                 :            : 
      48                 :            : static const char *IdSrc = "$Id: FGThruster.cpp,v 1.13 2010/08/21 22:56:11 jberndt Exp $";
      49                 :            : static const char *IdHdr = ID_THRUSTER;
      50                 :            : 
      51                 :            : /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
      52                 :            : CLASS IMPLEMENTATION
      53                 :            : %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
      54                 :            : 
      55                 :            : 
      56                 :         12 : FGThruster::FGThruster(FGFDMExec *FDMExec, Element *el, int num ): FGForce(FDMExec)
      57                 :            : {
      58                 :         12 :   Element* thruster_element = el->GetParent();
      59                 :            :   Element* element;
      60                 :         12 :   FGColumnVector3 location, orientation;
      61                 :            : 
      62                 :         12 :   Type = ttDirect;
      63                 :         12 :   SetTransformType(FGForce::tCustom);
      64                 :            : 
      65                 :         24 :   Name = el->GetAttributeValue("name");
      66                 :            : 
      67                 :         12 :   GearRatio = 1.0;
      68                 :         12 :   ReverserAngle = 0.0;
      69                 :         12 :   EngineNum = num;
      70                 :         12 :   PropertyManager = FDMExec->GetPropertyManager();
      71                 :            : 
      72                 :            : // Determine the initial location and orientation of this thruster and load the
      73                 :            : // thruster with this information.
      74                 :            : 
      75                 :         12 :   element = thruster_element->FindElement("location");
      76 [ #  # ][ +  - ]:         12 :   if (element)  location = element->FindElementTripletConvertTo("IN");
      77                 :          0 :   else          cerr << fgred << "      No thruster location found." << reset << endl;
      78                 :            : 
      79                 :         12 :   element = thruster_element->FindElement("orient");
      80 [ #  # ][ -  + ]:         12 :   if (element)  orientation = element->FindElementTripletConvertTo("RAD");
      81                 :         12 :   else          cerr << "      No thruster orientation found." << endl;
      82                 :            : 
      83                 :         12 :   SetLocation(location);
      84                 :         12 :   SetAnglesToBody(orientation);
      85                 :            : 
      86                 :         12 :   string property_name, base_property_name;
      87                 :         24 :   base_property_name = CreateIndexedPropertyName("propulsion/engine", EngineNum);
      88                 :         24 :   property_name = base_property_name + "/pitch-angle-rad";
      89                 :         12 :   PropertyManager->Tie( property_name.c_str(), (FGForce *)this, &FGForce::GetPitch, &FGForce::SetPitch);
      90                 :         24 :   property_name = base_property_name + "/yaw-angle-rad";
      91                 :         12 :   PropertyManager->Tie( property_name.c_str(), (FGForce *)this, &FGForce::GetYaw, &FGForce::SetYaw);
      92                 :            : 
      93   [ #  #  -  + ]:         12 :   if (el->GetName() == "direct") // this is a direct thruster. At this time
      94                 :            :                                  // only a direct thruster can be reversed.
      95                 :            :   {
      96                 :          0 :     property_name = base_property_name + "/reverser-angle-rad";
      97                 :            :     PropertyManager->Tie( property_name.c_str(), (FGThruster *)this, &FGThruster::GetReverserAngle,
      98                 :          0 :                                                           &FGThruster::SetReverserAngle);
      99                 :            :   }
     100                 :            : 
     101                 :         12 :   Debug(0);
     102                 :         12 : }
     103                 :            : 
     104                 :            : //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
     105                 :            : 
     106                 :         12 : FGThruster::~FGThruster()
     107                 :            : {
     108                 :         12 :   Debug(1);
     109 [ #  # ][ #  # ]:         12 : }
                 [ -  + ]
     110                 :            : 
     111                 :            : //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
     112                 :            : 
     113                 :          0 : string FGThruster::GetThrusterLabels(int id, string delimeter)
     114                 :            : {
     115                 :          0 :   std::ostringstream buf;
     116                 :            : 
     117                 :          0 :   buf << Name << " Thrust (engine " << id << " in lbs)";
     118                 :            : 
     119                 :          0 :   return buf.str();
     120                 :            : }
     121                 :            : 
     122                 :            : //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
     123                 :            : 
     124                 :          0 : string FGThruster::GetThrusterValues(int id, string delimeter)
     125                 :            : {
     126                 :          0 :   std::ostringstream buf;
     127                 :            : 
     128                 :          0 :   buf << Thrust;
     129                 :            : 
     130                 :          0 :   return buf.str();
     131                 :            : }
     132                 :            : 
     133                 :            : //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
     134                 :            : //    The bitmasked value choices are as follows:
     135                 :            : //    unset: In this case (the default) JSBSim would only print
     136                 :            : //       out the normally expected messages, essentially echoing
     137                 :            : //       the config files as they are read. If the environment
     138                 :            : //       variable is not set, debug_lvl is set to 1 internally
     139                 :            : //    0: This requests JSBSim not to output any messages
     140                 :            : //       whatsoever.
     141                 :            : //    1: This value explicity requests the normal JSBSim
     142                 :            : //       startup messages
     143                 :            : //    2: This value asks for a message to be printed out when
     144                 :            : //       a class is instantiated
     145                 :            : //    4: When this value is set, a message is displayed when a
     146                 :            : //       FGModel object executes its Run() method
     147                 :            : //    8: When this value is set, various runtime state variables
     148                 :            : //       are printed out periodically
     149                 :            : //    16: When set various parameters are sanity checked and
     150                 :            : //       a message is printed out when they go out of bounds
     151                 :            : 
     152                 :         24 : void FGThruster::Debug(int from)
     153                 :            : {
     154         [ +  - ]:         24 :   if (debug_lvl <= 0) return;
     155                 :            : 
     156                 :         24 :   if (debug_lvl & 1) { // Standard console startup message output
     157                 :            :     if (from == 0) { // Constructor
     158                 :            : 
     159                 :            :     }
     160                 :            :   }
     161         [ -  + ]:         24 :   if (debug_lvl & 2 ) { // Instantiation/Destruction notification
     162         [ #  # ]:          0 :     if (from == 0) cout << "Instantiated: FGThruster" << endl;
     163         [ #  # ]:          0 :     if (from == 1) cout << "Destroyed:    FGThruster" << endl;
     164                 :            :   }
     165                 :         24 :   if (debug_lvl & 4 ) { // Run() method entry print for FGModel-derived objects
     166                 :            :   }
     167                 :         24 :   if (debug_lvl & 8 ) { // Runtime state variables
     168                 :            :   }
     169                 :         24 :   if (debug_lvl & 16) { // Sanity checking
     170                 :            :   }
     171         [ -  + ]:         24 :   if (debug_lvl & 64) {
     172         [ #  # ]:          0 :     if (from == 0) { // Constructor
     173                 :          0 :       cout << IdSrc << endl;
     174                 :          0 :       cout << IdHdr << endl;
     175                 :            :     }
     176                 :            :   }
     177                 :            : }
     178 [ +  + ][ +  - ]:         12 : }

Generated by: LCOV version 1.9