]> git.mxchange.org Git - flightgear.git/blob - src/FDM/UIUCModel/uiuc_wrapper.cpp
90bbdf5ff87a9929eb8c5d5ff54bebec8120a88e
[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
67 #include "uiuc_aircraft.h"
68 #include "uiuc_aircraftdir.h"
69 #include "uiuc_coefficients.h"
70 #include "uiuc_engine.h"
71 #include "uiuc_aerodeflections.h"
72 #include "uiuc_recorder.h"
73 #include "uiuc_menu.h"
74 #include "../LaRCsim/ls_generic.h"
75
76
77 extern "C" void uiuc_init_aeromodel ();
78 extern "C" void uiuc_force_moment(double dt);
79 extern "C" void uiuc_engine_routine();
80
81 AIRCRAFT *aircraft_ = new AIRCRAFT;
82 AIRCRAFTDIR *aircraftdir_ = new AIRCRAFTDIR;
83
84 void uiuc_init_aeromodel ()
85 {
86   string aircraft;
87
88   if (aircraft_dir != "")
89     aircraft = aircraft_dir + "/";
90
91   aircraft += "aircraft.dat";
92   cout << "We are using "<< aircraft << endl;
93   uiuc_initializemaps(); // Initialize the <string,int> maps
94   uiuc_menu(aircraft);   // Read the specified aircraft file 
95 }
96
97 void uiuc_force_moment(double dt)
98 {
99   double qS = Dynamic_pressure * Sw;
100   double qScbar = qS * cbar;
101   double qSb = qS * bw;
102
103   uiuc_aerodeflections();
104   uiuc_coefficients();
105   
106   /* Calculate the wind axis forces */
107   F_X_wind = -1 * CD * qS;
108   F_Y_wind = CY * qS;
109   F_Z_wind = -1 * CL * qS;
110     
111   /* wind-axis to body-axis transformation */
112   F_X_aero = F_X_wind * Cos_alpha * Cos_beta - F_Y_wind * Cos_alpha * Sin_beta - F_Z_wind * Sin_alpha;
113   F_Y_aero = F_X_wind * Sin_beta + F_Y_wind * Cos_beta;
114   F_Z_aero = F_X_wind * Sin_alpha * Cos_beta - F_Y_wind * Sin_alpha * Sin_beta + F_Z_wind * Cos_alpha;
115   
116   /* Moment calculations  */
117   M_l_aero = Cl * qSb;
118   M_m_aero = Cm * qScbar;
119   M_n_aero = Cn * qSb; 
120
121   uiuc_recorder(dt);
122 }
123
124 void uiuc_engine_routine()
125 {
126   uiuc_engine();
127 }
128
129 //end uiuc_wrapper.cpp