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
21 06/30/2003 (RD) replaced istrstream with istringstream
22 to get rid of the annoying warning about
23 using the strstream header
25 ----------------------------------------------------------------------
27 AUTHOR(S): Robert Deters <rdeters@uiuc.edu>
28 Michael Selig <m-selig@uiuc.edu>
30 ----------------------------------------------------------------------
34 ----------------------------------------------------------------------
38 ----------------------------------------------------------------------
42 ----------------------------------------------------------------------
44 CALLED BY: uiuc_menu()
46 ----------------------------------------------------------------------
48 CALLS TO: check_float() if needed
54 ----------------------------------------------------------------------
56 COPYRIGHT: (C) 2003 by Michael Selig
58 This program is free software; you can redistribute it and/or
59 modify it under the terms of the GNU General Public License
60 as published by the Free Software Foundation.
62 This program is distributed in the hope that it will be useful,
63 but WITHOUT ANY WARRANTY; without even the implied warranty of
64 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
65 GNU General Public License for more details.
67 You should have received a copy of the GNU General Public License
68 along with this program; if not, write to the Free Software
69 Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
71 **********************************************************************/
73 #include <simgear/compiler.h>
75 #if defined( __MWERKS__ )
76 // -dw- optimizer chokes (big-time) trying to optimize humongous
77 // loop/switch statements
78 #pragma optimization_level 0
85 #include "uiuc_menu_CY.h"
95 void parse_CY( const string& linetoken2, const string& linetoken3,
96 const string& linetoken4, const string& linetoken5,
97 const string& linetoken6, const string& linetoken7,
98 const string& linetoken8, const string& linetoken9,
99 const string& linetoken10, const string& aircraft_directory,
100 LIST command_line ) {
102 int token_value_convert1, token_value_convert2, token_value_convert3;
103 int token_value_convert4;
104 double datafile_xArray[100][100], datafile_yArray[100];
105 double datafile_zArray[100][100];
107 int datafile_nxArray[100], datafile_ny;
108 istringstream token3(linetoken3.c_str());
109 istringstream token4(linetoken4.c_str());
110 istringstream token5(linetoken5.c_str());
111 istringstream token6(linetoken6.c_str());
112 istringstream token7(linetoken7.c_str());
113 istringstream token8(linetoken8.c_str());
114 istringstream token9(linetoken9.c_str());
115 istringstream token10(linetoken10.c_str());
117 static bool CYfabetaf_first = true;
118 static bool CYfadaf_first = true;
119 static bool CYfadrf_first = true;
120 static bool CYfapf_first = true;
121 static bool CYfarf_first = true;
123 switch(CY_map[linetoken2])
127 if (check_float(linetoken3))
128 token3 >> token_value;
130 uiuc_warnings_errors(1, *command_line);
134 aeroSideforceParts -> storeCommands (*command_line);
139 if (check_float(linetoken3))
140 token3 >> token_value;
142 uiuc_warnings_errors(1, *command_line);
144 CY_beta = token_value;
145 CY_beta_clean = CY_beta;
146 aeroSideforceParts -> storeCommands (*command_line);
151 if (check_float(linetoken3))
152 token3 >> token_value;
154 uiuc_warnings_errors(1, *command_line);
158 aeroSideforceParts -> storeCommands (*command_line);
163 if (check_float(linetoken3))
164 token3 >> token_value;
166 uiuc_warnings_errors(1, *command_line);
170 aeroSideforceParts -> storeCommands (*command_line);
175 if (check_float(linetoken3))
176 token3 >> token_value;
178 uiuc_warnings_errors(1, *command_line);
182 aeroSideforceParts -> storeCommands (*command_line);
187 if (check_float(linetoken3))
188 token3 >> token_value;
190 uiuc_warnings_errors(2, *command_line);
194 aeroSideforceParts -> storeCommands (*command_line);
199 if (check_float(linetoken3))
200 token3 >> token_value;
202 uiuc_warnings_errors(2, *command_line);
204 CY_dra = token_value;
205 CY_dra_clean = CY_dra;
206 aeroSideforceParts -> storeCommands (*command_line);
211 if (check_float(linetoken3))
212 token3 >> token_value;
214 uiuc_warnings_errors(2, *command_line);
216 CY_bdot = token_value;
217 CY_bdot_clean = CY_bdot;
218 aeroSideforceParts -> storeCommands (*command_line);
223 CYfada = aircraft_directory + linetoken3;
224 token4 >> token_value_convert1;
225 token5 >> token_value_convert2;
226 token6 >> token_value_convert3;
227 convert_z = uiuc_convert(token_value_convert1);
228 convert_x = uiuc_convert(token_value_convert2);
229 convert_y = uiuc_convert(token_value_convert3);
230 /* call 2D File Reader with file name (CYfada) and
231 conversion factors; function returns array of
232 aileron deflections (daArray) and corresponding
233 alpha (aArray) and delta CY (CYArray) values and
234 max number of terms in alpha arrays (nAlphaArray)
235 and deflection array (nda) */
236 uiuc_2DdataFileReader(CYfada,
242 aeroSideforceParts -> storeCommands (*command_line);
247 CYfbetadr = aircraft_directory + linetoken3;
248 token4 >> token_value_convert1;
249 token5 >> token_value_convert2;
250 token6 >> token_value_convert3;
251 convert_z = uiuc_convert(token_value_convert1);
252 convert_x = uiuc_convert(token_value_convert2);
253 convert_y = uiuc_convert(token_value_convert3);
254 /* call 2D File Reader with file name (CYfbetadr) and
255 conversion factors; function returns array of
256 rudder deflections (drArray) and corresponding
257 beta (betaArray) and delta CY (CYArray) values and
258 max number of terms in beta arrays (nBetaArray)
259 and deflection array (ndr) */
260 uiuc_2DdataFileReader(CYfbetadr,
264 CYfbetadr_nBetaArray,
266 aeroSideforceParts -> storeCommands (*command_line);
271 int CYfabetaf_index, i;
272 string CYfabetaf_file;
274 CYfabetaf_file = aircraft_directory + linetoken3;
275 token4 >> CYfabetaf_index;
276 if (CYfabetaf_index < 0 || CYfabetaf_index >= 30)
277 uiuc_warnings_errors(1, *command_line);
278 if (CYfabetaf_index > CYfabetaf_nf)
279 CYfabetaf_nf = CYfabetaf_index;
280 token5 >> flap_value;
281 token6 >> token_value_convert1;
282 token7 >> token_value_convert2;
283 token8 >> token_value_convert3;
284 token9 >> token_value_convert4;
285 token10 >> CYfabetaf_nice;
286 convert_z = uiuc_convert(token_value_convert1);
287 convert_x = uiuc_convert(token_value_convert2);
288 convert_y = uiuc_convert(token_value_convert3);
289 convert_f = uiuc_convert(token_value_convert4);
290 CYfabetaf_fArray[CYfabetaf_index] = flap_value * convert_f;
291 /* call 2D File Reader with file name (CYfabetaf_file) and
292 conversion factors; function returns array of
293 elevator deflections (deArray) and corresponding
294 alpha (aArray) and delta CZ (CZArray) values and
295 max number of terms in alpha arrays (nAlphaArray)
296 and delfection array (nde) */
297 uiuc_2DdataFileReader(CYfabetaf_file,
303 d_2_to_3(datafile_xArray, CYfabetaf_aArray, CYfabetaf_index);
304 d_1_to_2(datafile_yArray, CYfabetaf_betaArray, CYfabetaf_index);
305 d_2_to_3(datafile_zArray, CYfabetaf_CYArray, CYfabetaf_index);
306 i_1_to_2(datafile_nxArray, CYfabetaf_nAlphaArray, CYfabetaf_index);
307 CYfabetaf_nbeta[CYfabetaf_index] = datafile_ny;
308 if (CYfabetaf_first==true)
310 if (CYfabetaf_nice == 1)
312 CYfabetaf_na_nice = datafile_nxArray[1];
313 CYfabetaf_nb_nice = datafile_ny;
314 d_1_to_1(datafile_yArray, CYfabetaf_bArray_nice);
315 for (i=1; i<=CYfabetaf_na_nice; i++)
316 CYfabetaf_aArray_nice[i] = datafile_xArray[1][i];
318 aeroSideforceParts -> storeCommands (*command_line);
319 CYfabetaf_first=false;
325 int CYfadaf_index, i;
328 CYfadaf_file = aircraft_directory + linetoken3;
329 token4 >> CYfadaf_index;
330 if (CYfadaf_index < 0 || CYfadaf_index >= 30)
331 uiuc_warnings_errors(1, *command_line);
332 if (CYfadaf_index > CYfadaf_nf)
333 CYfadaf_nf = CYfadaf_index;
334 token5 >> flap_value;
335 token6 >> token_value_convert1;
336 token7 >> token_value_convert2;
337 token8 >> token_value_convert3;
338 token9 >> token_value_convert4;
339 token10 >> CYfadaf_nice;
340 convert_z = uiuc_convert(token_value_convert1);
341 convert_x = uiuc_convert(token_value_convert2);
342 convert_y = uiuc_convert(token_value_convert3);
343 convert_f = uiuc_convert(token_value_convert4);
344 CYfadaf_fArray[CYfadaf_index] = flap_value * convert_f;
345 /* call 2D File Reader with file name (CYfadaf_file) and
346 conversion factors; function returns array of
347 elevator deflections (deArray) and corresponding
348 alpha (aArray) and delta CZ (CZArray) values and
349 max number of terms in alpha arrays (nAlphaArray)
350 and delfection array (nde) */
351 uiuc_2DdataFileReader(CYfadaf_file,
357 d_2_to_3(datafile_xArray, CYfadaf_aArray, CYfadaf_index);
358 d_1_to_2(datafile_yArray, CYfadaf_daArray, CYfadaf_index);
359 d_2_to_3(datafile_zArray, CYfadaf_CYArray, CYfadaf_index);
360 i_1_to_2(datafile_nxArray, CYfadaf_nAlphaArray, CYfadaf_index);
361 CYfadaf_nda[CYfadaf_index] = datafile_ny;
362 if (CYfadaf_first==true)
364 if (CYfadaf_nice == 1)
366 CYfadaf_na_nice = datafile_nxArray[1];
367 CYfadaf_nda_nice = datafile_ny;
368 d_1_to_1(datafile_yArray, CYfadaf_daArray_nice);
369 for (i=1; i<=CYfadaf_na_nice; i++)
370 CYfadaf_aArray_nice[i] = datafile_xArray[1][i];
372 aeroSideforceParts -> storeCommands (*command_line);
379 int CYfadrf_index, i;
382 CYfadrf_file = aircraft_directory + linetoken3;
383 token4 >> CYfadrf_index;
384 if (CYfadrf_index < 0 || CYfadrf_index >= 30)
385 uiuc_warnings_errors(1, *command_line);
386 if (CYfadrf_index > CYfadrf_nf)
387 CYfadrf_nf = CYfadrf_index;
388 token5 >> flap_value;
389 token6 >> token_value_convert1;
390 token7 >> token_value_convert2;
391 token8 >> token_value_convert3;
392 token9 >> token_value_convert4;
393 token10 >> CYfadrf_nice;
394 convert_z = uiuc_convert(token_value_convert1);
395 convert_x = uiuc_convert(token_value_convert2);
396 convert_y = uiuc_convert(token_value_convert3);
397 convert_f = uiuc_convert(token_value_convert4);
398 CYfadrf_fArray[CYfadrf_index] = flap_value * convert_f;
399 /* call 2D File Reader with file name (CYfadrf_file) and
400 conversion factors; function returns array of
401 elevator deflections (deArray) and corresponding
402 alpha (aArray) and delta CZ (CZArray) values and
403 max number of terms in alpha arrays (nAlphaArray)
404 and delfection array (nde) */
405 uiuc_2DdataFileReader(CYfadrf_file,
411 d_2_to_3(datafile_xArray, CYfadrf_aArray, CYfadrf_index);
412 d_1_to_2(datafile_yArray, CYfadrf_drArray, CYfadrf_index);
413 d_2_to_3(datafile_zArray, CYfadrf_CYArray, CYfadrf_index);
414 i_1_to_2(datafile_nxArray, CYfadrf_nAlphaArray, CYfadrf_index);
415 CYfadrf_ndr[CYfadrf_index] = datafile_ny;
416 if (CYfadrf_first==true)
418 if (CYfadrf_nice == 1)
420 CYfadrf_na_nice = datafile_nxArray[1];
421 CYfadrf_ndr_nice = datafile_ny;
422 d_1_to_1(datafile_yArray, CYfadrf_drArray_nice);
423 for (i=1; i<=CYfadrf_na_nice; i++)
424 CYfadrf_aArray_nice[i] = datafile_xArray[1][i];
426 aeroSideforceParts -> storeCommands (*command_line);
436 CYfapf_file = aircraft_directory + linetoken3;
437 token4 >> CYfapf_index;
438 if (CYfapf_index < 0 || CYfapf_index >= 30)
439 uiuc_warnings_errors(1, *command_line);
440 if (CYfapf_index > CYfapf_nf)
441 CYfapf_nf = CYfapf_index;
442 token5 >> flap_value;
443 token6 >> token_value_convert1;
444 token7 >> token_value_convert2;
445 token8 >> token_value_convert3;
446 token9 >> token_value_convert4;
447 token10 >> CYfapf_nice;
448 convert_z = uiuc_convert(token_value_convert1);
449 convert_x = uiuc_convert(token_value_convert2);
450 convert_y = uiuc_convert(token_value_convert3);
451 convert_f = uiuc_convert(token_value_convert4);
452 CYfapf_fArray[CYfapf_index] = flap_value * convert_f;
453 /* call 2D File Reader with file name (CYfapf_file) and
454 conversion factors; function returns array of
455 elevator deflections (deArray) and corresponding
456 alpha (aArray) and delta CZ (CZArray) values and
457 max number of terms in alpha arrays (nAlphaArray)
458 and delfection array (nde) */
459 uiuc_2DdataFileReader(CYfapf_file,
465 d_2_to_3(datafile_xArray, CYfapf_aArray, CYfapf_index);
466 d_1_to_2(datafile_yArray, CYfapf_pArray, CYfapf_index);
467 d_2_to_3(datafile_zArray, CYfapf_CYArray, CYfapf_index);
468 i_1_to_2(datafile_nxArray, CYfapf_nAlphaArray, CYfapf_index);
469 CYfapf_np[CYfapf_index] = datafile_ny;
470 if (CYfapf_first==true)
472 if (CYfapf_nice == 1)
474 CYfapf_na_nice = datafile_nxArray[1];
475 CYfapf_np_nice = datafile_ny;
476 d_1_to_1(datafile_yArray, CYfapf_pArray_nice);
477 for (i=1; i<=CYfapf_na_nice; i++)
478 CYfapf_aArray_nice[i] = datafile_xArray[1][i];
480 aeroSideforceParts -> storeCommands (*command_line);
490 CYfarf_file = aircraft_directory + linetoken3;
491 token4 >> CYfarf_index;
492 if (CYfarf_index < 0 || CYfarf_index >= 30)
493 uiuc_warnings_errors(1, *command_line);
494 if (CYfarf_index > CYfarf_nf)
495 CYfarf_nf = CYfarf_index;
496 token5 >> flap_value;
497 token6 >> token_value_convert1;
498 token7 >> token_value_convert2;
499 token8 >> token_value_convert3;
500 token9 >> token_value_convert4;
501 token10 >> CYfarf_nice;
502 convert_z = uiuc_convert(token_value_convert1);
503 convert_x = uiuc_convert(token_value_convert2);
504 convert_y = uiuc_convert(token_value_convert3);
505 convert_f = uiuc_convert(token_value_convert4);
506 CYfarf_fArray[CYfarf_index] = flap_value * convert_f;
507 /* call 2D File Reader with file name (CYfarf_file) and
508 conversion factors; function returns array of
509 elevator deflections (deArray) and corresponding
510 alpha (aArray) and delta CZ (CZArray) values and
511 max number of terms in alpha arrays (nAlphaArray)
512 and delfection array (nde) */
513 uiuc_2DdataFileReader(CYfarf_file,
519 d_2_to_3(datafile_xArray, CYfarf_aArray, CYfarf_index);
520 d_1_to_2(datafile_yArray, CYfarf_rArray, CYfarf_index);
521 d_2_to_3(datafile_zArray, CYfarf_CYArray, CYfarf_index);
522 i_1_to_2(datafile_nxArray, CYfarf_nAlphaArray, CYfarf_index);
523 CYfarf_nr[CYfarf_index] = datafile_ny;
524 if (CYfarf_first==true)
526 if (CYfarf_nice == 1)
528 CYfarf_na_nice = datafile_nxArray[1];
529 CYfarf_nr_nice = datafile_ny;
530 d_1_to_1(datafile_yArray, CYfarf_rArray_nice);
531 for (i=1; i<=CYfarf_na_nice; i++)
532 CYfarf_aArray_nice[i] = datafile_xArray[1][i];
534 aeroSideforceParts -> storeCommands (*command_line);
541 if (ignore_unknown_keywords) {
544 // print error message
545 uiuc_warnings_errors(2, *command_line);