JSBSim Flight Dynamics Model 1.3.0 (09 Apr 2026)
An Open Source Flight Dynamics and Control Software Library in C++
Loading...
Searching...
No Matches
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
11 Software Foundation; either version 2 of the License, or (at your option) any
12 later 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
20 with this program; if not, write to the Free Software Foundation, Inc., 59
21 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
22
23 Further information about the GNU Lesser General Public License can also be
24 found on the world wide web at http://www.gnu.org.
25
26FUNCTIONAL DESCRIPTION
27--------------------------------------------------------------------------------
28
29HISTORY
30--------------------------------------------------------------------------------
31
32%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
33COMMENTS, REFERENCES, and NOTES
34%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
35
36%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
37INCLUDES
38%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
39
40#include "FGFCSFunction.h"
41#include "models/FGFCS.h"
42#include "input_output/FGXMLElement.h"
43#include "input_output/FGLog.h"
44
45using namespace std;
46
47namespace JSBSim {
48
49/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
50CLASS IMPLEMENTATION
51%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
52
53//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
54
55FGFCSFunction::FGFCSFunction(FGFCS* fcs, Element* element)
56 : FGFCSComponent(fcs, element)
57{
58 Element *function_element = element->FindElement("function");
59
60 if (function_element)
61 function = new FGFunction(fcs->GetExec(), function_element);
62 else {
63 XMLLogException err(element);
64 err << "FCS Function should contain a \"function\" element\n";
65 throw err;
66 }
67
68 bind(element, fcs->GetPropertyManager().get());
69 Debug(0);
70}
71
72//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
73
74FGFCSFunction::~FGFCSFunction()
75{
76 delete function;
77 Debug(1);
78}
79
80//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
81
82bool FGFCSFunction::Run(void )
83{
84 Output = function->GetValue();
85
86 if (!InputNodes.empty()) {
87 Input = InputNodes[0]->getDoubleValue();
88 Output *= Input;
89 }
90
91 Clip();
92 SetOutput();
93
94 return true;
95}
96
97//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
98// The bitmasked value choices are as follows:
99// unset: In this case (the default) JSBSim would only print
100// out the normally expected messages, essentially echoing
101// the config files as they are read. If the environment
102// variable is not set, debug_lvl is set to 1 internally
103// 0: This requests JSBSim not to output any messages
104// whatsoever.
105// 1: This value explicitly requests the normal JSBSim
106// startup messages
107// 2: This value asks for a message to be printed out when
108// a class is instantiated
109// 4: When this value is set, a message is displayed when a
110// FGModel object executes its Run() method
111// 8: When this value is set, various runtime state variables
112// are printed out periodically
113// 16: When set various parameters are sanity checked and
114// a message is printed out when they go out of bounds
115
116void FGFCSFunction::Debug(int from)
117{
118 if (debug_lvl <= 0) return;
119
120 if (debug_lvl & 1) { // Standard console startup message output
121 if (from == 0) { // Constructor
122 FGLogging log(LogLevel::DEBUG);
123 if (!InputNodes.empty())
124 log << " INPUT: " << InputNodes[0]->GetName() << "\n";
125 for (auto node: OutputNodes)
126 log << " OUTPUT: " << node->getNameString() << "\n";
127 }
128 }
129 if (debug_lvl & 2 ) { // Instantiation/Destruction notification
130 FGLogging log(LogLevel::DEBUG);
131 if (from == 0) log << "Instantiated: FGFCSFunction\n";
132 if (from == 1) log << "Destroyed: FGFCSFunction\n";
133 }
134 if (debug_lvl & 4 ) { // Run() method entry print for FGModel-derived objects
135 }
136 if (debug_lvl & 8 ) { // Runtime state variables
137 }
138 if (debug_lvl & 16) { // Sanity checking
139 }
140 if (debug_lvl & 64) {
141 if (from == 0) { // Constructor
142 }
143 }
144}
145}
Main namespace for the JSBSim Flight Dynamics Model.
Definition FGFDMExec.cpp:71