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>
80 #include "uiuc_menu_CY.h"
90 void parse_CY( const string& linetoken2, const string& linetoken3,
91 const string& linetoken4, const string& linetoken5,
92 const string& linetoken6, const string& linetoken7,
93 const string& linetoken8, const string& linetoken9,
94 const string& linetoken10, const string& aircraft_directory,
97 int token_value_convert1, token_value_convert2, token_value_convert3;
98 int token_value_convert4;
99 double datafile_xArray[100][100], datafile_yArray[100];
100 double datafile_zArray[100][100];
102 int datafile_nxArray[100], datafile_ny;
103 istringstream token3(linetoken3.c_str());
104 istringstream token4(linetoken4.c_str());
105 istringstream token5(linetoken5.c_str());
106 istringstream token6(linetoken6.c_str());
107 istringstream token7(linetoken7.c_str());
108 istringstream token8(linetoken8.c_str());
109 istringstream token9(linetoken9.c_str());
110 istringstream token10(linetoken10.c_str());
112 static bool CYfabetaf_first = true;
113 static bool CYfadaf_first = true;
114 static bool CYfadrf_first = true;
115 static bool CYfapf_first = true;
116 static bool CYfarf_first = true;
118 switch(CY_map[linetoken2])
122 if (check_float(linetoken3))
123 token3 >> token_value;
125 uiuc_warnings_errors(1, *command_line);
129 aeroSideforceParts -> storeCommands (*command_line);
134 if (check_float(linetoken3))
135 token3 >> token_value;
137 uiuc_warnings_errors(1, *command_line);
139 CY_beta = token_value;
140 CY_beta_clean = CY_beta;
141 aeroSideforceParts -> storeCommands (*command_line);
146 if (check_float(linetoken3))
147 token3 >> token_value;
149 uiuc_warnings_errors(1, *command_line);
153 aeroSideforceParts -> storeCommands (*command_line);
158 if (check_float(linetoken3))
159 token3 >> token_value;
161 uiuc_warnings_errors(1, *command_line);
165 aeroSideforceParts -> storeCommands (*command_line);
170 if (check_float(linetoken3))
171 token3 >> token_value;
173 uiuc_warnings_errors(1, *command_line);
177 aeroSideforceParts -> storeCommands (*command_line);
182 if (check_float(linetoken3))
183 token3 >> token_value;
185 uiuc_warnings_errors(2, *command_line);
189 aeroSideforceParts -> storeCommands (*command_line);
194 if (check_float(linetoken3))
195 token3 >> token_value;
197 uiuc_warnings_errors(2, *command_line);
199 CY_dra = token_value;
200 CY_dra_clean = CY_dra;
201 aeroSideforceParts -> storeCommands (*command_line);
206 if (check_float(linetoken3))
207 token3 >> token_value;
209 uiuc_warnings_errors(2, *command_line);
211 CY_bdot = token_value;
212 CY_bdot_clean = CY_bdot;
213 aeroSideforceParts -> storeCommands (*command_line);
218 CYfada = aircraft_directory + linetoken3;
219 token4 >> token_value_convert1;
220 token5 >> token_value_convert2;
221 token6 >> token_value_convert3;
222 convert_z = uiuc_convert(token_value_convert1);
223 convert_x = uiuc_convert(token_value_convert2);
224 convert_y = uiuc_convert(token_value_convert3);
225 /* call 2D File Reader with file name (CYfada) and
226 conversion factors; function returns array of
227 aileron deflections (daArray) and corresponding
228 alpha (aArray) and delta CY (CYArray) values and
229 max number of terms in alpha arrays (nAlphaArray)
230 and deflection array (nda) */
231 uiuc_2DdataFileReader(CYfada,
237 aeroSideforceParts -> storeCommands (*command_line);
242 CYfbetadr = aircraft_directory + linetoken3;
243 token4 >> token_value_convert1;
244 token5 >> token_value_convert2;
245 token6 >> token_value_convert3;
246 convert_z = uiuc_convert(token_value_convert1);
247 convert_x = uiuc_convert(token_value_convert2);
248 convert_y = uiuc_convert(token_value_convert3);
249 /* call 2D File Reader with file name (CYfbetadr) and
250 conversion factors; function returns array of
251 rudder deflections (drArray) and corresponding
252 beta (betaArray) and delta CY (CYArray) values and
253 max number of terms in beta arrays (nBetaArray)
254 and deflection array (ndr) */
255 uiuc_2DdataFileReader(CYfbetadr,
259 CYfbetadr_nBetaArray,
261 aeroSideforceParts -> storeCommands (*command_line);
266 int CYfabetaf_index, i;
267 string CYfabetaf_file;
269 CYfabetaf_file = aircraft_directory + linetoken3;
270 token4 >> CYfabetaf_index;
271 if (CYfabetaf_index < 0 || CYfabetaf_index >= 30)
272 uiuc_warnings_errors(1, *command_line);
273 if (CYfabetaf_index > CYfabetaf_nf)
274 CYfabetaf_nf = CYfabetaf_index;
275 token5 >> flap_value;
276 token6 >> token_value_convert1;
277 token7 >> token_value_convert2;
278 token8 >> token_value_convert3;
279 token9 >> token_value_convert4;
280 token10 >> CYfabetaf_nice;
281 convert_z = uiuc_convert(token_value_convert1);
282 convert_x = uiuc_convert(token_value_convert2);
283 convert_y = uiuc_convert(token_value_convert3);
284 convert_f = uiuc_convert(token_value_convert4);
285 CYfabetaf_fArray[CYfabetaf_index] = flap_value * convert_f;
286 /* call 2D File Reader with file name (CYfabetaf_file) and
287 conversion factors; function returns array of
288 elevator deflections (deArray) and corresponding
289 alpha (aArray) and delta CZ (CZArray) values and
290 max number of terms in alpha arrays (nAlphaArray)
291 and delfection array (nde) */
292 uiuc_2DdataFileReader(CYfabetaf_file,
298 d_2_to_3(datafile_xArray, CYfabetaf_aArray, CYfabetaf_index);
299 d_1_to_2(datafile_yArray, CYfabetaf_betaArray, CYfabetaf_index);
300 d_2_to_3(datafile_zArray, CYfabetaf_CYArray, CYfabetaf_index);
301 i_1_to_2(datafile_nxArray, CYfabetaf_nAlphaArray, CYfabetaf_index);
302 CYfabetaf_nbeta[CYfabetaf_index] = datafile_ny;
303 if (CYfabetaf_first==true)
305 if (CYfabetaf_nice == 1)
307 CYfabetaf_na_nice = datafile_nxArray[1];
308 CYfabetaf_nb_nice = datafile_ny;
309 d_1_to_1(datafile_yArray, CYfabetaf_bArray_nice);
310 for (i=1; i<=CYfabetaf_na_nice; i++)
311 CYfabetaf_aArray_nice[i] = datafile_xArray[1][i];
313 aeroSideforceParts -> storeCommands (*command_line);
314 CYfabetaf_first=false;
320 int CYfadaf_index, i;
323 CYfadaf_file = aircraft_directory + linetoken3;
324 token4 >> CYfadaf_index;
325 if (CYfadaf_index < 0 || CYfadaf_index >= 30)
326 uiuc_warnings_errors(1, *command_line);
327 if (CYfadaf_index > CYfadaf_nf)
328 CYfadaf_nf = CYfadaf_index;
329 token5 >> flap_value;
330 token6 >> token_value_convert1;
331 token7 >> token_value_convert2;
332 token8 >> token_value_convert3;
333 token9 >> token_value_convert4;
334 token10 >> CYfadaf_nice;
335 convert_z = uiuc_convert(token_value_convert1);
336 convert_x = uiuc_convert(token_value_convert2);
337 convert_y = uiuc_convert(token_value_convert3);
338 convert_f = uiuc_convert(token_value_convert4);
339 CYfadaf_fArray[CYfadaf_index] = flap_value * convert_f;
340 /* call 2D File Reader with file name (CYfadaf_file) and
341 conversion factors; function returns array of
342 elevator deflections (deArray) and corresponding
343 alpha (aArray) and delta CZ (CZArray) values and
344 max number of terms in alpha arrays (nAlphaArray)
345 and delfection array (nde) */
346 uiuc_2DdataFileReader(CYfadaf_file,
352 d_2_to_3(datafile_xArray, CYfadaf_aArray, CYfadaf_index);
353 d_1_to_2(datafile_yArray, CYfadaf_daArray, CYfadaf_index);
354 d_2_to_3(datafile_zArray, CYfadaf_CYArray, CYfadaf_index);
355 i_1_to_2(datafile_nxArray, CYfadaf_nAlphaArray, CYfadaf_index);
356 CYfadaf_nda[CYfadaf_index] = datafile_ny;
357 if (CYfadaf_first==true)
359 if (CYfadaf_nice == 1)
361 CYfadaf_na_nice = datafile_nxArray[1];
362 CYfadaf_nda_nice = datafile_ny;
363 d_1_to_1(datafile_yArray, CYfadaf_daArray_nice);
364 for (i=1; i<=CYfadaf_na_nice; i++)
365 CYfadaf_aArray_nice[i] = datafile_xArray[1][i];
367 aeroSideforceParts -> storeCommands (*command_line);
374 int CYfadrf_index, i;
377 CYfadrf_file = aircraft_directory + linetoken3;
378 token4 >> CYfadrf_index;
379 if (CYfadrf_index < 0 || CYfadrf_index >= 30)
380 uiuc_warnings_errors(1, *command_line);
381 if (CYfadrf_index > CYfadrf_nf)
382 CYfadrf_nf = CYfadrf_index;
383 token5 >> flap_value;
384 token6 >> token_value_convert1;
385 token7 >> token_value_convert2;
386 token8 >> token_value_convert3;
387 token9 >> token_value_convert4;
388 token10 >> CYfadrf_nice;
389 convert_z = uiuc_convert(token_value_convert1);
390 convert_x = uiuc_convert(token_value_convert2);
391 convert_y = uiuc_convert(token_value_convert3);
392 convert_f = uiuc_convert(token_value_convert4);
393 CYfadrf_fArray[CYfadrf_index] = flap_value * convert_f;
394 /* call 2D File Reader with file name (CYfadrf_file) and
395 conversion factors; function returns array of
396 elevator deflections (deArray) and corresponding
397 alpha (aArray) and delta CZ (CZArray) values and
398 max number of terms in alpha arrays (nAlphaArray)
399 and delfection array (nde) */
400 uiuc_2DdataFileReader(CYfadrf_file,
406 d_2_to_3(datafile_xArray, CYfadrf_aArray, CYfadrf_index);
407 d_1_to_2(datafile_yArray, CYfadrf_drArray, CYfadrf_index);
408 d_2_to_3(datafile_zArray, CYfadrf_CYArray, CYfadrf_index);
409 i_1_to_2(datafile_nxArray, CYfadrf_nAlphaArray, CYfadrf_index);
410 CYfadrf_ndr[CYfadrf_index] = datafile_ny;
411 if (CYfadrf_first==true)
413 if (CYfadrf_nice == 1)
415 CYfadrf_na_nice = datafile_nxArray[1];
416 CYfadrf_ndr_nice = datafile_ny;
417 d_1_to_1(datafile_yArray, CYfadrf_drArray_nice);
418 for (i=1; i<=CYfadrf_na_nice; i++)
419 CYfadrf_aArray_nice[i] = datafile_xArray[1][i];
421 aeroSideforceParts -> storeCommands (*command_line);
431 CYfapf_file = aircraft_directory + linetoken3;
432 token4 >> CYfapf_index;
433 if (CYfapf_index < 0 || CYfapf_index >= 30)
434 uiuc_warnings_errors(1, *command_line);
435 if (CYfapf_index > CYfapf_nf)
436 CYfapf_nf = CYfapf_index;
437 token5 >> flap_value;
438 token6 >> token_value_convert1;
439 token7 >> token_value_convert2;
440 token8 >> token_value_convert3;
441 token9 >> token_value_convert4;
442 token10 >> CYfapf_nice;
443 convert_z = uiuc_convert(token_value_convert1);
444 convert_x = uiuc_convert(token_value_convert2);
445 convert_y = uiuc_convert(token_value_convert3);
446 convert_f = uiuc_convert(token_value_convert4);
447 CYfapf_fArray[CYfapf_index] = flap_value * convert_f;
448 /* call 2D File Reader with file name (CYfapf_file) and
449 conversion factors; function returns array of
450 elevator deflections (deArray) and corresponding
451 alpha (aArray) and delta CZ (CZArray) values and
452 max number of terms in alpha arrays (nAlphaArray)
453 and delfection array (nde) */
454 uiuc_2DdataFileReader(CYfapf_file,
460 d_2_to_3(datafile_xArray, CYfapf_aArray, CYfapf_index);
461 d_1_to_2(datafile_yArray, CYfapf_pArray, CYfapf_index);
462 d_2_to_3(datafile_zArray, CYfapf_CYArray, CYfapf_index);
463 i_1_to_2(datafile_nxArray, CYfapf_nAlphaArray, CYfapf_index);
464 CYfapf_np[CYfapf_index] = datafile_ny;
465 if (CYfapf_first==true)
467 if (CYfapf_nice == 1)
469 CYfapf_na_nice = datafile_nxArray[1];
470 CYfapf_np_nice = datafile_ny;
471 d_1_to_1(datafile_yArray, CYfapf_pArray_nice);
472 for (i=1; i<=CYfapf_na_nice; i++)
473 CYfapf_aArray_nice[i] = datafile_xArray[1][i];
475 aeroSideforceParts -> storeCommands (*command_line);
485 CYfarf_file = aircraft_directory + linetoken3;
486 token4 >> CYfarf_index;
487 if (CYfarf_index < 0 || CYfarf_index >= 30)
488 uiuc_warnings_errors(1, *command_line);
489 if (CYfarf_index > CYfarf_nf)
490 CYfarf_nf = CYfarf_index;
491 token5 >> flap_value;
492 token6 >> token_value_convert1;
493 token7 >> token_value_convert2;
494 token8 >> token_value_convert3;
495 token9 >> token_value_convert4;
496 token10 >> CYfarf_nice;
497 convert_z = uiuc_convert(token_value_convert1);
498 convert_x = uiuc_convert(token_value_convert2);
499 convert_y = uiuc_convert(token_value_convert3);
500 convert_f = uiuc_convert(token_value_convert4);
501 CYfarf_fArray[CYfarf_index] = flap_value * convert_f;
502 /* call 2D File Reader with file name (CYfarf_file) and
503 conversion factors; function returns array of
504 elevator deflections (deArray) and corresponding
505 alpha (aArray) and delta CZ (CZArray) values and
506 max number of terms in alpha arrays (nAlphaArray)
507 and delfection array (nde) */
508 uiuc_2DdataFileReader(CYfarf_file,
514 d_2_to_3(datafile_xArray, CYfarf_aArray, CYfarf_index);
515 d_1_to_2(datafile_yArray, CYfarf_rArray, CYfarf_index);
516 d_2_to_3(datafile_zArray, CYfarf_CYArray, CYfarf_index);
517 i_1_to_2(datafile_nxArray, CYfarf_nAlphaArray, CYfarf_index);
518 CYfarf_nr[CYfarf_index] = datafile_ny;
519 if (CYfarf_first==true)
521 if (CYfarf_nice == 1)
523 CYfarf_na_nice = datafile_nxArray[1];
524 CYfarf_nr_nice = datafile_ny;
525 d_1_to_1(datafile_yArray, CYfarf_rArray_nice);
526 for (i=1; i<=CYfarf_na_nice; i++)
527 CYfarf_aArray_nice[i] = datafile_xArray[1][i];
529 aeroSideforceParts -> storeCommands (*command_line);
536 if (ignore_unknown_keywords) {
539 // print error message
540 uiuc_warnings_errors(2, *command_line);