JSBSim Flight Dynamics Model  1.0 (02 March 2017)
An Open Source Flight Dynamics and Control Software Library in C++
FGFCSFunction.cpp
1 /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
2 
3  Module: FGFCSFunction.cpp
4  Author: Jon S. Berndt
5  Date started: 6/2005
6 
7  ------------- Copyright (C) 2005 -------------
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 FUNCTIONAL DESCRIPTION
27 --------------------------------------------------------------------------------
28 
29 HISTORY
30 --------------------------------------------------------------------------------
31 
32 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
33 COMMENTS, REFERENCES, and NOTES
34 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
35 
36 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
37 INCLUDES
38 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
39 
40 #include <cstdlib>
41 #include <iostream>
42 
43 #include "FGFCSFunction.h"
44 #include "input_output/FGXMLElement.h"
45 
46 using namespace std;
47 
48 namespace JSBSim {
49 
50 IDENT(IdSrc,"$Id: FGFCSFunction.cpp,v 1.15 2014/01/13 10:46:08 ehofman Exp $");
51 IDENT(IdHdr,ID_FCSFUNCTION);
52 
53 /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
54 CLASS IMPLEMENTATION
55 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
56 
57 //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
58 
59 FGFCSFunction::FGFCSFunction(FGFCS* fcs, Element* element) : FGFCSComponent(fcs, element)
60 {
61  Element *function_element = element->FindElement("function");
62 
63  if (function_element)
64  function = new FGFunction(PropertyManager, function_element);
65  else {
66  cerr << "FCS Function should contain a \"function\" element" << endl;
67  exit(-1);
68  }
69 
70  FGFCSComponent::bind();
71  Debug(0);
72 }
73 
74 //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
75 
76 FGFCSFunction::~FGFCSFunction()
77 {
78  delete function;
79  Debug(1);
80 }
81 
82 //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
83 
84 bool FGFCSFunction::Run(void )
85 {
86  Output = function->GetValue();
87 
88  if (InputNodes.size() > 0) {
89  Input = InputNodes[0]->getDoubleValue() * InputSigns[0];
90  Output*= Input;
91  }
92 
93  Clip();
94  if (IsOutput) SetOutput();
95 
96  return true;
97 }
98 
99 //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
100 // The bitmasked value choices are as follows:
101 // unset: In this case (the default) JSBSim would only print
102 // out the normally expected messages, essentially echoing
103 // the config files as they are read. If the environment
104 // variable is not set, debug_lvl is set to 1 internally
105 // 0: This requests JSBSim not to output any messages
106 // whatsoever.
107 // 1: This value explicity requests the normal JSBSim
108 // startup messages
109 // 2: This value asks for a message to be printed out when
110 // a class is instantiated
111 // 4: When this value is set, a message is displayed when a
112 // FGModel object executes its Run() method
113 // 8: When this value is set, various runtime state variables
114 // are printed out periodically
115 // 16: When set various parameters are sanity checked and
116 // a message is printed out when they go out of bounds
117 
118 void FGFCSFunction::Debug(int from)
119 {
120  if (debug_lvl <= 0) return;
121 
122  if (debug_lvl & 1) { // Standard console startup message output
123  if (from == 0) { // Constructor
124  if (InputNodes.size()>0)
125  cout << " INPUT: " << InputNodes[0]->GetName() << endl;
126 // cout << " Function: " << endl;
127  if (IsOutput) {
128  for (unsigned int i=0; i<OutputNodes.size(); i++)
129  cout << " OUTPUT: " << OutputNodes[i]->getName() << endl;
130  }
131  }
132  }
133  if (debug_lvl & 2 ) { // Instantiation/Destruction notification
134  if (from == 0) cout << "Instantiated: FGFCSFunction" << endl;
135  if (from == 1) cout << "Destroyed: FGFCSFunction" << endl;
136  }
137  if (debug_lvl & 4 ) { // Run() method entry print for FGModel-derived objects
138  }
139  if (debug_lvl & 8 ) { // Runtime state variables
140  }
141  if (debug_lvl & 16) { // Sanity checking
142  }
143  if (debug_lvl & 64) {
144  if (from == 0) { // Constructor
145  cout << IdSrc << endl;
146  cout << IdHdr << endl;
147  }
148  }
149 }
150 }
STL namespace.