]> git.mxchange.org Git - flightgear.git/blob - src/FDM/UIUCModel/uiuc_wrapper.cpp
5867826c44f8ec1cde3fa003f5dbb09ee3bccf47
[flightgear.git] / src / FDM / UIUCModel / uiuc_wrapper.cpp
1 /********************************************************************** 
2  
3  FILENAME:     uiuc_wrapper.cpp 
4
5 ---------------------------------------------------------------------- 
6
7  DESCRIPTION:  A wrapper(interface) between the UIUC Aeromodel (C++ files) 
8                and the LaRCsim FDM (C files)
9
10 ----------------------------------------------------------------------
11  
12  STATUS:       alpha version
13
14 ----------------------------------------------------------------------
15  
16  REFERENCES:   
17  
18 ----------------------------------------------------------------------
19
20  HISTORY:      01/26/2000   initial release
21  
22 ----------------------------------------------------------------------
23  
24  AUTHOR(S):    Bipin Sehgal       <bsehgal@uiuc.edu>
25  
26 ----------------------------------------------------------------------
27
28  VARIABLES:
29
30 ----------------------------------------------------------------------
31
32  INPUTS:       *
33
34 ----------------------------------------------------------------------
35
36  OUTPUTS:      *
37
38 ----------------------------------------------------------------------
39  
40  CALLED BY:    *
41  
42 ----------------------------------------------------------------------
43  
44  CALLS TO:     *
45  
46 ----------------------------------------------------------------------
47  
48  COPYRIGHT:    (C) 2000 by Michael Selig
49  
50  This program is free software; you can redistribute it and/or
51  modify it under the terms of the GNU General Public License
52  as published by the Free Software Foundation.
53  
54  This program is distributed in the hope that it will be useful,
55  but WITHOUT ANY WARRANTY; without even the implied warranty of
56  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
57  GNU General Public License for more details.
58  
59  You should have received a copy of the GNU General Public License
60  along with this program; if not, write to the Free Software
61  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
62  USA or view http://www.gnu.org/copyleft/gpl.html.
63  
64 **********************************************************************/
65
66 #include "uiuc_aircraft.h"
67 #include "uiuc_aircraftdir.h"
68 #include "uiuc_coefficients.h"
69 #include "uiuc_engine.h"
70 #include "uiuc_aerodeflections.h"
71 #include "uiuc_recorder.h"
72 #include "uiuc_menu.h"
73 #include "uiuc_betaprobe.h"
74 #include <FDM/LaRCsim/ls_generic.h>
75
76 extern "C" void uiuc_init_aeromodel ();
77 extern "C" void uiuc_force_moment(double dt);
78 extern "C" void uiuc_engine_routine();
79
80 AIRCRAFT *aircraft_ = new AIRCRAFT;
81 AIRCRAFTDIR *aircraftdir_ = new AIRCRAFTDIR;
82
83 void uiuc_init_aeromodel ()
84 {
85   string aircraft;
86
87   if (aircraft_dir != "")
88     aircraft = aircraft_dir + "/";
89
90   aircraft += "aircraft.dat";
91   cout << "We are using "<< aircraft << endl;
92   uiuc_initializemaps(); // Initialize the <string,int> maps
93   uiuc_menu(aircraft);   // Read the specified aircraft file 
94 }
95
96 void uiuc_force_moment(double dt)
97 {
98   double qS = Dynamic_pressure * Sw;
99   double qScbar = qS * cbar;
100   double qSb = qS * bw;
101
102   uiuc_aerodeflections(dt);
103   uiuc_coefficients();
104
105   /* Calculate the wind axis forces */
106   if (CX && CZ)
107     {
108       CD = -CX * cos(Alpha) - CZ * sin(Alpha);
109       CL =  CX * sin(Alpha) - CZ * cos(Alpha);
110     }
111   F_X_wind = -1 * CD * qS;
112   F_Y_wind = CY * qS;
113   F_Z_wind = -1 * CL * qS;
114
115   /* wind-axis to body-axis transformation */
116   F_X_aero = F_X_wind * Cos_alpha * Cos_beta - F_Y_wind * Cos_alpha * Sin_beta - F_Z_wind * Sin_alpha;
117   F_Y_aero = F_X_wind * Sin_beta + F_Y_wind * Cos_beta;
118   F_Z_aero = F_X_wind * Sin_alpha * Cos_beta - F_Y_wind * Sin_alpha * Sin_beta + F_Z_wind * Cos_alpha;
119
120   /* Moment calculations */
121   M_l_aero = Cl * qSb;
122   M_m_aero = Cm * qScbar;
123   M_n_aero = Cn * qSb;
124
125   /* Call fligt data recorder */
126   if (Simtime >= recordStartTime)
127       uiuc_recorder(dt);
128 }
129
130 void uiuc_engine_routine()
131 {
132   uiuc_engine();
133 }
134
135 //end uiuc_wrapper.cpp