1 /**********************************************************************
3 FILENAME: uiuc_menu_CY.cpp
5 ----------------------------------------------------------------------
7 DESCRIPTION: reads input data for specified aircraft and creates
8 approporiate data storage space
10 ----------------------------------------------------------------------
14 ----------------------------------------------------------------------
16 REFERENCES: based on "menu reader" format of Michael Selig
18 ----------------------------------------------------------------------
20 HISTORY: 04/04/2003 initial release
22 ----------------------------------------------------------------------
24 AUTHOR(S): Robert Deters <rdeters@uiuc.edu>
25 Michael Selig <m-selig@uiuc.edu>
27 ----------------------------------------------------------------------
31 ----------------------------------------------------------------------
35 ----------------------------------------------------------------------
39 ----------------------------------------------------------------------
41 CALLED BY: uiuc_menu()
43 ----------------------------------------------------------------------
45 CALLS TO: check_float() if needed
51 ----------------------------------------------------------------------
53 COPYRIGHT: (C) 2003 by Michael Selig
55 This program is free software; you can redistribute it and/or
56 modify it under the terms of the GNU General Public License
57 as published by the Free Software Foundation.
59 This program is distributed in the hope that it will be useful,
60 but WITHOUT ANY WARRANTY; without even the implied warranty of
61 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
62 GNU General Public License for more details.
64 You should have received a copy of the GNU General Public License
65 along with this program; if not, write to the Free Software
66 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
67 USA or view http://www.gnu.org/copyleft/gpl.html.
69 **********************************************************************/
71 #include <simgear/compiler.h>
73 #if defined( __MWERKS__ )
74 // -dw- optimizer chokes (big-time) trying to optimize humongous
75 // loop/switch statements
76 #pragma optimization_level 0
83 #include "uiuc_menu_CY.h"
93 void parse_CY( const string& linetoken2, const string& linetoken3,
94 const string& linetoken4, const string& linetoken5,
95 const string& linetoken6, const string& linetoken7,
96 const string& linetoken8, const string& linetoken9,
97 const string& linetoken10, const string& aircraft_directory,
100 int token_value_convert1, token_value_convert2, token_value_convert3;
101 int token_value_convert4;
102 double datafile_xArray[100][100], datafile_yArray[100];
103 double datafile_zArray[100][100];
105 int datafile_nxArray[100], datafile_ny;
106 istrstream token3(linetoken3.c_str());
107 istrstream token4(linetoken4.c_str());
108 istrstream token5(linetoken5.c_str());
109 istrstream token6(linetoken6.c_str());
110 istrstream token7(linetoken7.c_str());
111 istrstream token8(linetoken8.c_str());
112 istrstream token9(linetoken9.c_str());
113 istrstream token10(linetoken10.c_str());
115 static bool CYfabetaf_first = true;
116 static bool CYfadaf_first = true;
117 static bool CYfadrf_first = true;
118 static bool CYfapf_first = true;
119 static bool CYfarf_first = true;
121 switch(CY_map[linetoken2])
125 if (check_float(linetoken3))
126 token3 >> token_value;
128 uiuc_warnings_errors(1, *command_line);
132 aeroSideforceParts -> storeCommands (*command_line);
137 if (check_float(linetoken3))
138 token3 >> token_value;
140 uiuc_warnings_errors(1, *command_line);
142 CY_beta = token_value;
143 CY_beta_clean = CY_beta;
144 aeroSideforceParts -> storeCommands (*command_line);
149 if (check_float(linetoken3))
150 token3 >> token_value;
152 uiuc_warnings_errors(1, *command_line);
156 aeroSideforceParts -> storeCommands (*command_line);
161 if (check_float(linetoken3))
162 token3 >> token_value;
164 uiuc_warnings_errors(1, *command_line);
168 aeroSideforceParts -> storeCommands (*command_line);
173 if (check_float(linetoken3))
174 token3 >> token_value;
176 uiuc_warnings_errors(1, *command_line);
180 aeroSideforceParts -> storeCommands (*command_line);
185 if (check_float(linetoken3))
186 token3 >> token_value;
188 uiuc_warnings_errors(2, *command_line);
192 aeroSideforceParts -> storeCommands (*command_line);
197 if (check_float(linetoken3))
198 token3 >> token_value;
200 uiuc_warnings_errors(2, *command_line);
202 CY_dra = token_value;
203 CY_dra_clean = CY_dra;
204 aeroSideforceParts -> storeCommands (*command_line);
209 if (check_float(linetoken3))
210 token3 >> token_value;
212 uiuc_warnings_errors(2, *command_line);
214 CY_bdot = token_value;
215 CY_bdot_clean = CY_bdot;
216 aeroSideforceParts -> storeCommands (*command_line);
221 CYfada = aircraft_directory + linetoken3;
222 token4 >> token_value_convert1;
223 token5 >> token_value_convert2;
224 token6 >> token_value_convert3;
225 convert_z = uiuc_convert(token_value_convert1);
226 convert_x = uiuc_convert(token_value_convert2);
227 convert_y = uiuc_convert(token_value_convert3);
228 /* call 2D File Reader with file name (CYfada) and
229 conversion factors; function returns array of
230 aileron deflections (daArray) and corresponding
231 alpha (aArray) and delta CY (CYArray) values and
232 max number of terms in alpha arrays (nAlphaArray)
233 and deflection array (nda) */
234 uiuc_2DdataFileReader(CYfada,
240 aeroSideforceParts -> storeCommands (*command_line);
245 CYfbetadr = aircraft_directory + linetoken3;
246 token4 >> token_value_convert1;
247 token5 >> token_value_convert2;
248 token6 >> token_value_convert3;
249 convert_z = uiuc_convert(token_value_convert1);
250 convert_x = uiuc_convert(token_value_convert2);
251 convert_y = uiuc_convert(token_value_convert3);
252 /* call 2D File Reader with file name (CYfbetadr) and
253 conversion factors; function returns array of
254 rudder deflections (drArray) and corresponding
255 beta (betaArray) and delta CY (CYArray) values and
256 max number of terms in beta arrays (nBetaArray)
257 and deflection array (ndr) */
258 uiuc_2DdataFileReader(CYfbetadr,
262 CYfbetadr_nBetaArray,
264 aeroSideforceParts -> storeCommands (*command_line);
269 int CYfabetaf_index, i;
270 string CYfabetaf_file;
272 CYfabetaf_file = aircraft_directory + linetoken3;
273 token4 >> CYfabetaf_index;
274 if (CYfabetaf_index < 0 || CYfabetaf_index >= 30)
275 uiuc_warnings_errors(1, *command_line);
276 if (CYfabetaf_index > CYfabetaf_nf)
277 CYfabetaf_nf = CYfabetaf_index;
278 token5 >> flap_value;
279 token6 >> token_value_convert1;
280 token7 >> token_value_convert2;
281 token8 >> token_value_convert3;
282 token9 >> token_value_convert4;
283 token10 >> CYfabetaf_nice;
284 convert_z = uiuc_convert(token_value_convert1);
285 convert_x = uiuc_convert(token_value_convert2);
286 convert_y = uiuc_convert(token_value_convert3);
287 convert_f = uiuc_convert(token_value_convert4);
288 CYfabetaf_fArray[CYfabetaf_index] = flap_value * convert_f;
289 /* call 2D File Reader with file name (CYfabetaf_file) and
290 conversion factors; function returns array of
291 elevator deflections (deArray) and corresponding
292 alpha (aArray) and delta CZ (CZArray) values and
293 max number of terms in alpha arrays (nAlphaArray)
294 and delfection array (nde) */
295 uiuc_2DdataFileReader(CYfabetaf_file,
301 d_2_to_3(datafile_xArray, CYfabetaf_aArray, CYfabetaf_index);
302 d_1_to_2(datafile_yArray, CYfabetaf_betaArray, CYfabetaf_index);
303 d_2_to_3(datafile_zArray, CYfabetaf_CYArray, CYfabetaf_index);
304 i_1_to_2(datafile_nxArray, CYfabetaf_nAlphaArray, CYfabetaf_index);
305 CYfabetaf_nbeta[CYfabetaf_index] = datafile_ny;
306 if (CYfabetaf_first==true)
308 if (CYfabetaf_nice == 1)
310 CYfabetaf_na_nice = datafile_nxArray[1];
311 CYfabetaf_nb_nice = datafile_ny;
312 d_1_to_1(datafile_yArray, CYfabetaf_bArray_nice);
313 for (i=1; i<=CYfabetaf_na_nice; i++)
314 CYfabetaf_aArray_nice[i] = datafile_xArray[1][i];
316 aeroSideforceParts -> storeCommands (*command_line);
317 CYfabetaf_first=false;
323 int CYfadaf_index, i;
326 CYfadaf_file = aircraft_directory + linetoken3;
327 token4 >> CYfadaf_index;
328 if (CYfadaf_index < 0 || CYfadaf_index >= 30)
329 uiuc_warnings_errors(1, *command_line);
330 if (CYfadaf_index > CYfadaf_nf)
331 CYfadaf_nf = CYfadaf_index;
332 token5 >> flap_value;
333 token6 >> token_value_convert1;
334 token7 >> token_value_convert2;
335 token8 >> token_value_convert3;
336 token9 >> token_value_convert4;
337 token10 >> CYfadaf_nice;
338 convert_z = uiuc_convert(token_value_convert1);
339 convert_x = uiuc_convert(token_value_convert2);
340 convert_y = uiuc_convert(token_value_convert3);
341 convert_f = uiuc_convert(token_value_convert4);
342 CYfadaf_fArray[CYfadaf_index] = flap_value * convert_f;
343 /* call 2D File Reader with file name (CYfadaf_file) and
344 conversion factors; function returns array of
345 elevator deflections (deArray) and corresponding
346 alpha (aArray) and delta CZ (CZArray) values and
347 max number of terms in alpha arrays (nAlphaArray)
348 and delfection array (nde) */
349 uiuc_2DdataFileReader(CYfadaf_file,
355 d_2_to_3(datafile_xArray, CYfadaf_aArray, CYfadaf_index);
356 d_1_to_2(datafile_yArray, CYfadaf_daArray, CYfadaf_index);
357 d_2_to_3(datafile_zArray, CYfadaf_CYArray, CYfadaf_index);
358 i_1_to_2(datafile_nxArray, CYfadaf_nAlphaArray, CYfadaf_index);
359 CYfadaf_nda[CYfadaf_index] = datafile_ny;
360 if (CYfadaf_first==true)
362 if (CYfadaf_nice == 1)
364 CYfadaf_na_nice = datafile_nxArray[1];
365 CYfadaf_nda_nice = datafile_ny;
366 d_1_to_1(datafile_yArray, CYfadaf_daArray_nice);
367 for (i=1; i<=CYfadaf_na_nice; i++)
368 CYfadaf_aArray_nice[i] = datafile_xArray[1][i];
370 aeroSideforceParts -> storeCommands (*command_line);
377 int CYfadrf_index, i;
380 CYfadrf_file = aircraft_directory + linetoken3;
381 token4 >> CYfadrf_index;
382 if (CYfadrf_index < 0 || CYfadrf_index >= 30)
383 uiuc_warnings_errors(1, *command_line);
384 if (CYfadrf_index > CYfadrf_nf)
385 CYfadrf_nf = CYfadrf_index;
386 token5 >> flap_value;
387 token6 >> token_value_convert1;
388 token7 >> token_value_convert2;
389 token8 >> token_value_convert3;
390 token9 >> token_value_convert4;
391 token10 >> CYfadrf_nice;
392 convert_z = uiuc_convert(token_value_convert1);
393 convert_x = uiuc_convert(token_value_convert2);
394 convert_y = uiuc_convert(token_value_convert3);
395 convert_f = uiuc_convert(token_value_convert4);
396 CYfadrf_fArray[CYfadrf_index] = flap_value * convert_f;
397 /* call 2D File Reader with file name (CYfadrf_file) and
398 conversion factors; function returns array of
399 elevator deflections (deArray) and corresponding
400 alpha (aArray) and delta CZ (CZArray) values and
401 max number of terms in alpha arrays (nAlphaArray)
402 and delfection array (nde) */
403 uiuc_2DdataFileReader(CYfadrf_file,
409 d_2_to_3(datafile_xArray, CYfadrf_aArray, CYfadrf_index);
410 d_1_to_2(datafile_yArray, CYfadrf_drArray, CYfadrf_index);
411 d_2_to_3(datafile_zArray, CYfadrf_CYArray, CYfadrf_index);
412 i_1_to_2(datafile_nxArray, CYfadrf_nAlphaArray, CYfadrf_index);
413 CYfadrf_ndr[CYfadrf_index] = datafile_ny;
414 if (CYfadrf_first==true)
416 if (CYfadrf_nice == 1)
418 CYfadrf_na_nice = datafile_nxArray[1];
419 CYfadrf_ndr_nice = datafile_ny;
420 d_1_to_1(datafile_yArray, CYfadrf_drArray_nice);
421 for (i=1; i<=CYfadrf_na_nice; i++)
422 CYfadrf_aArray_nice[i] = datafile_xArray[1][i];
424 aeroSideforceParts -> storeCommands (*command_line);
434 CYfapf_file = aircraft_directory + linetoken3;
435 token4 >> CYfapf_index;
436 if (CYfapf_index < 0 || CYfapf_index >= 30)
437 uiuc_warnings_errors(1, *command_line);
438 if (CYfapf_index > CYfapf_nf)
439 CYfapf_nf = CYfapf_index;
440 token5 >> flap_value;
441 token6 >> token_value_convert1;
442 token7 >> token_value_convert2;
443 token8 >> token_value_convert3;
444 token9 >> token_value_convert4;
445 token10 >> CYfapf_nice;
446 convert_z = uiuc_convert(token_value_convert1);
447 convert_x = uiuc_convert(token_value_convert2);
448 convert_y = uiuc_convert(token_value_convert3);
449 convert_f = uiuc_convert(token_value_convert4);
450 CYfapf_fArray[CYfapf_index] = flap_value * convert_f;
451 /* call 2D File Reader with file name (CYfapf_file) and
452 conversion factors; function returns array of
453 elevator deflections (deArray) and corresponding
454 alpha (aArray) and delta CZ (CZArray) values and
455 max number of terms in alpha arrays (nAlphaArray)
456 and delfection array (nde) */
457 uiuc_2DdataFileReader(CYfapf_file,
463 d_2_to_3(datafile_xArray, CYfapf_aArray, CYfapf_index);
464 d_1_to_2(datafile_yArray, CYfapf_pArray, CYfapf_index);
465 d_2_to_3(datafile_zArray, CYfapf_CYArray, CYfapf_index);
466 i_1_to_2(datafile_nxArray, CYfapf_nAlphaArray, CYfapf_index);
467 CYfapf_np[CYfapf_index] = datafile_ny;
468 if (CYfapf_first==true)
470 if (CYfapf_nice == 1)
472 CYfapf_na_nice = datafile_nxArray[1];
473 CYfapf_np_nice = datafile_ny;
474 d_1_to_1(datafile_yArray, CYfapf_pArray_nice);
475 for (i=1; i<=CYfapf_na_nice; i++)
476 CYfapf_aArray_nice[i] = datafile_xArray[1][i];
478 aeroSideforceParts -> storeCommands (*command_line);
488 CYfarf_file = aircraft_directory + linetoken3;
489 token4 >> CYfarf_index;
490 if (CYfarf_index < 0 || CYfarf_index >= 30)
491 uiuc_warnings_errors(1, *command_line);
492 if (CYfarf_index > CYfarf_nf)
493 CYfarf_nf = CYfarf_index;
494 token5 >> flap_value;
495 token6 >> token_value_convert1;
496 token7 >> token_value_convert2;
497 token8 >> token_value_convert3;
498 token9 >> token_value_convert4;
499 token10 >> CYfarf_nice;
500 convert_z = uiuc_convert(token_value_convert1);
501 convert_x = uiuc_convert(token_value_convert2);
502 convert_y = uiuc_convert(token_value_convert3);
503 convert_f = uiuc_convert(token_value_convert4);
504 CYfarf_fArray[CYfarf_index] = flap_value * convert_f;
505 /* call 2D File Reader with file name (CYfarf_file) and
506 conversion factors; function returns array of
507 elevator deflections (deArray) and corresponding
508 alpha (aArray) and delta CZ (CZArray) values and
509 max number of terms in alpha arrays (nAlphaArray)
510 and delfection array (nde) */
511 uiuc_2DdataFileReader(CYfarf_file,
517 d_2_to_3(datafile_xArray, CYfarf_aArray, CYfarf_index);
518 d_1_to_2(datafile_yArray, CYfarf_rArray, CYfarf_index);
519 d_2_to_3(datafile_zArray, CYfarf_CYArray, CYfarf_index);
520 i_1_to_2(datafile_nxArray, CYfarf_nAlphaArray, CYfarf_index);
521 CYfarf_nr[CYfarf_index] = datafile_ny;
522 if (CYfarf_first==true)
524 if (CYfarf_nice == 1)
526 CYfarf_na_nice = datafile_nxArray[1];
527 CYfarf_nr_nice = datafile_ny;
528 d_1_to_1(datafile_yArray, CYfarf_rArray_nice);
529 for (i=1; i<=CYfarf_na_nice; i++)
530 CYfarf_aArray_nice[i] = datafile_xArray[1][i];
532 aeroSideforceParts -> storeCommands (*command_line);
539 if (ignore_unknown_keywords) {
542 // print error message
543 uiuc_warnings_errors(2, *command_line);