]> git.mxchange.org Git - flightgear.git/blob - src/FDM/JSBSim/filtersjb/FGSummer.cpp
Updates from the Jon and Tony show.
[flightgear.git] / src / FDM / JSBSim / filtersjb / FGSummer.cpp
1
2 /*******************************************************************************
3
4  Module:       FGSummer.cpp
5  Author:       
6  Date started: 
7  
8  ------------- Copyright (C) 2000 -------------
9
10  This program is free software; you can redistribute it and/or modify it under
11  the terms of the GNU 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 General Public License for more
18  details.
19
20  You should have received a copy of the GNU 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 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
33 ********************************************************************************
34 COMMENTS, REFERENCES,  and NOTES
35 ********************************************************************************
36
37 ********************************************************************************
38 INCLUDES
39 *******************************************************************************/
40
41 #include "FGSummer.h"                                   
42
43 /*******************************************************************************
44 ************************************ CODE **************************************
45 *******************************************************************************/
46
47 // *****************************************************************************
48 //  Function:   Constructor
49 //  Purpose:
50 //  Parameters: void
51 //  Comments:
52
53 FGSummer::FGSummer(FGFCS* fcs, FGConfigFile* AC_cfg) : FGFCSComponent(fcs),
54                                                        AC_cfg(AC_cfg)
55 {
56   string token;
57   int tmpInputIndex;
58
59   clip = false;
60   InputIndices.clear();
61   InputTypes.clear();
62
63   Type = AC_cfg->GetValue("TYPE");
64   Name = AC_cfg->GetValue("NAME");
65   AC_cfg->GetNextConfigLine();
66
67   while ((token = AC_cfg->GetValue()) != "/COMPONENT") {
68     *AC_cfg >> token;
69     if (token == "ID") {
70       *AC_cfg >> ID;
71           cout << "      ID: " << ID << endl;
72     } else if (token == "INPUT") {
73       token = AC_cfg->GetValue("INPUT");
74           cout << "      INPUT: " << token << endl;
75       if (token.find("FG_") != token.npos) {
76         *AC_cfg >> token;
77         tmpInputIndex = fcs->GetState()->GetParameterIndex(token);
78         InputIndices.push_back(tmpInputIndex);
79         InputTypes.push_back(itPilotAC);
80       } else {
81         *AC_cfg >> tmpInputIndex;
82         InputIndices.push_back(tmpInputIndex);
83         InputTypes.push_back(itFCS);
84       }
85         } else if (token == "CLIPTO") {
86                 *AC_cfg >> clipmin >> clipmax;
87                 if(clipmax > clipmin) {
88                         clip=true;
89             cout << "      CLIPTO: " << clipmin << ", " << clipmax << endl;
90         }     
91     } else if (token == "OUTPUT") {
92           
93       IsOutput = true;
94       *AC_cfg >> sOutputIdx;
95           cout << "      OUTPUT: " <<sOutputIdx <<  endl;
96       OutputIdx = fcs->GetState()->GetParameterIndex(sOutputIdx);
97     }
98   }
99 }
100
101 // *****************************************************************************
102 //  Function:   Run
103 //  Purpose:
104 //  Parameters: void
105 //  Comments:
106
107 bool FGSummer::Run(void )
108 {
109   unsigned int idx;
110
111   // The Summer takes several inputs, so do not call the base class Run()
112   // FGFCSComponent::Run(); 
113
114   Output = 0.0;
115   for (idx=0; idx<InputIndices.size(); idx++) {
116     switch (InputTypes[idx]) {
117     case itPilotAC:
118       Output += fcs->GetState()->GetParameter(InputIndices[idx]);
119       break;
120     case itFCS:
121       Output += fcs->GetComponentOutput(InputIndices[idx]);
122     }
123         
124   }
125   if(clip) {
126         if(Output > clipmax) 
127                 Output=clipmax;
128         else if(Output < clipmin)
129                 Output=clipmin;
130   }                     
131   
132   if (IsOutput) { SetOutput();  }
133   //cout << "Out FGSummer::Run" << endl;
134   return true;
135 }
136