Branch data Line data Source code
1 : : /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
2 : :
3 : : Module: FGSummer.cpp
4 : : Author: Jon S. Berndt
5 : : Date started: 4/2000
6 : :
7 : : ------------- Copyright (C) 2000 -------------
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 "FGSummer.h"
41 : : #include "input_output/FGXMLElement.h"
42 : : #include <iostream>
43 : :
44 : : using namespace std;
45 : :
46 : : namespace JSBSim {
47 : :
48 : : static const char *IdSrc = "$Id: FGSummer.cpp,v 1.8 2010/08/21 22:56:11 jberndt Exp $";
49 : : static const char *IdHdr = ID_SUMMER;
50 : :
51 : : /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
52 : : CLASS IMPLEMENTATION
53 : : %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
54 : :
55 : 4 : FGSummer::FGSummer(FGFCS* fcs, Element* element) : FGFCSComponent(fcs, element)
56 : : {
57 : 4 : Bias = 0.0;
58 : :
59 [ - + ][ # # ]: 4 : if (element->FindElement("bias")) Bias = element->FindElementValueAsNumber("bias");
60 : :
61 : 4 : FGFCSComponent::bind();
62 : :
63 : 4 : Debug(0);
64 : 4 : }
65 : :
66 : : //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
67 : :
68 : 4 : FGSummer::~FGSummer()
69 : : {
70 : 4 : Debug(1);
71 [ + - ][ # # ]: 4 : }
[ # # ]
72 : :
73 : : //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
74 : :
75 : 216020 : bool FGSummer::Run(void )
76 : : {
77 : : unsigned int idx;
78 : :
79 : 216020 : Output = 0.0;
80 : :
81 [ + + ]: 648060 : for (idx=0; idx<InputNodes.size(); idx++) {
82 : 432040 : Output += InputNodes[idx]->getDoubleValue() * InputSigns[idx];
83 : : }
84 : :
85 : 216020 : Output += Bias;
86 : :
87 : 216020 : Clip();
88 [ - + ]: 216020 : if (IsOutput) SetOutput();
89 : :
90 : 216020 : return true;
91 : : }
92 : :
93 : : //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
94 : : // The bitmasked value choices are as follows:
95 : : // unset: In this case (the default) JSBSim would only print
96 : : // out the normally expected messages, essentially echoing
97 : : // the config files as they are read. If the environment
98 : : // variable is not set, debug_lvl is set to 1 internally
99 : : // 0: This requests JSBSim not to output any messages
100 : : // whatsoever.
101 : : // 1: This value explicity requests the normal JSBSim
102 : : // startup messages
103 : : // 2: This value asks for a message to be printed out when
104 : : // a class is instantiated
105 : : // 4: When this value is set, a message is displayed when a
106 : : // FGModel object executes its Run() method
107 : : // 8: When this value is set, various runtime state variables
108 : : // are printed out periodically
109 : : // 16: When set various parameters are sanity checked and
110 : : // a message is printed out when they go out of bounds
111 : :
112 : 8 : void FGSummer::Debug(int from)
113 : : {
114 [ + - ]: 8 : if (debug_lvl <= 0) return;
115 : :
116 [ + - ]: 8 : if (debug_lvl & 1) { // Standard console startup message output
117 [ + + ]: 8 : if (from == 0) { // Constructor
118 : 4 : cout << " INPUTS: " << endl;
119 [ + + ]: 12 : for (unsigned i=0;i<InputNodes.size();i++) {
120 [ + + ]: 8 : if (InputSigns[i] < 0)
121 : 4 : cout << " -" << InputNames[i] << endl;
122 : : else
123 : 4 : cout << " " << InputNames[i] << endl;
124 : : }
125 [ - + ]: 4 : if (Bias != 0.0) cout << " Bias: " << Bias << endl;
126 [ - + ]: 4 : if (IsOutput) {
127 [ # # ]: 0 : for (unsigned int i=0; i<OutputNodes.size(); i++)
128 : 0 : cout << " OUTPUT: " << OutputNodes[i]->getName() << endl;
129 : : }
130 : : }
131 : : }
132 [ - + ]: 8 : if (debug_lvl & 2 ) { // Instantiation/Destruction notification
133 [ # # ]: 0 : if (from == 0) cout << "Instantiated: FGSummer" << endl;
134 [ # # ]: 0 : if (from == 1) cout << "Destroyed: FGSummer" << endl;
135 : : }
136 : 8 : if (debug_lvl & 4 ) { // Run() method entry print for FGModel-derived objects
137 : : }
138 : 8 : if (debug_lvl & 8 ) { // Runtime state variables
139 : : }
140 : 8 : if (debug_lvl & 16) { // Sanity checking
141 : : }
142 [ - + ]: 8 : if (debug_lvl & 64) {
143 [ # # ]: 0 : if (from == 0) { // Constructor
144 : 0 : cout << IdSrc << endl;
145 : 0 : cout << IdHdr << endl;
146 : : }
147 : : }
148 : : }
149 : :
150 [ + + ][ + - ]: 12 : } //namespace JSBSim
151 : :
|