1 /**********************************************************************
3 FILENAME: uiuc_menu_Cm.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., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
70 USA or view http://www.gnu.org/copyleft/gpl.html.
72 **********************************************************************/
74 #include <simgear/compiler.h>
76 #if defined( __MWERKS__ )
77 // -dw- optimizer chokes (big-time) trying to optimize humongous
78 // loop/switch statements
79 #pragma optimization_level 0
86 #include "uiuc_menu_Cm.h"
96 void parse_Cm( const string& linetoken2, const string& linetoken3,
97 const string& linetoken4, const string& linetoken5,
98 const string& linetoken6, const string& linetoken7,
99 const string& linetoken8, const string& linetoken9,
100 const string& linetoken10, const string& aircraft_directory,
101 LIST command_line ) {
103 int token_value_convert1, token_value_convert2, token_value_convert3;
104 int token_value_convert4;
105 double datafile_xArray[100][100], datafile_yArray[100];
106 double datafile_zArray[100][100];
108 int datafile_nxArray[100], datafile_ny;
109 istringstream token3(linetoken3.c_str());
110 istringstream token4(linetoken4.c_str());
111 istringstream token5(linetoken5.c_str());
112 istringstream token6(linetoken6.c_str());
113 istringstream token7(linetoken7.c_str());
114 istringstream token8(linetoken8.c_str());
115 istringstream token9(linetoken9.c_str());
116 istringstream token10(linetoken10.c_str());
118 static bool Cmfabetaf_first = true;
119 static bool Cmfadef_first = true;
120 static bool Cmfaqf_first = true;
122 switch(Cm_map[linetoken2])
126 if (check_float(linetoken3))
127 token3 >> token_value;
129 uiuc_warnings_errors(1, *command_line);
133 aeroPitchParts -> storeCommands (*command_line);
138 if (check_float(linetoken3))
139 token3 >> token_value;
141 uiuc_warnings_errors(1, *command_line);
145 aeroPitchParts -> storeCommands (*command_line);
150 if (check_float(linetoken3))
151 token3 >> token_value;
153 uiuc_warnings_errors(1, *command_line);
157 aeroPitchParts -> storeCommands (*command_line);
162 if (check_float(linetoken3))
163 token3 >> token_value;
165 uiuc_warnings_errors(1, *command_line);
167 Cm_adot = token_value;
168 Cm_adot_clean = Cm_adot;
169 aeroPitchParts -> storeCommands (*command_line);
174 if (check_float(linetoken3))
175 token3 >> token_value;
177 uiuc_warnings_errors(1, *command_line);
181 aeroPitchParts -> storeCommands (*command_line);
186 if (check_float(linetoken3))
187 token3 >> token_value;
189 uiuc_warnings_errors(1, *command_line);
192 aeroPitchParts -> storeCommands (*command_line);
197 if (check_float(linetoken3))
198 token3 >> token_value;
200 uiuc_warnings_errors(1, *command_line);
204 aeroPitchParts -> storeCommands (*command_line);
209 if (check_float(linetoken3))
210 token3 >> token_value;
212 uiuc_warnings_errors(1, *command_line);
216 aeroPitchParts -> storeCommands (*command_line);
221 if (check_float(linetoken3))
222 token3 >> token_value;
224 uiuc_warnings_errors(1, *command_line);
228 aeroPitchParts -> storeCommands (*command_line);
233 if (check_float(linetoken3))
234 token3 >> token_value;
236 uiuc_warnings_errors(1, *command_line);
240 aeroPitchParts -> storeCommands (*command_line);
245 if (check_float(linetoken3))
246 token3 >> token_value;
248 uiuc_warnings_errors(1, *command_line);
251 aeroPitchParts -> storeCommands (*command_line);
256 if (check_float(linetoken3))
257 token3 >> token_value;
259 uiuc_warnings_errors(1, *command_line);
262 aeroPitchParts -> storeCommands (*command_line);
267 Cmfa = aircraft_directory + linetoken3;
268 token4 >> token_value_convert1;
269 token5 >> token_value_convert2;
270 convert_y = uiuc_convert(token_value_convert1);
271 convert_x = uiuc_convert(token_value_convert2);
272 /* call 1D File Reader with file name (Cmfa) and conversion
273 factors; function returns array of alphas (aArray) and
274 corresponding Cm values (CmArray) and max number of
275 terms in arrays (nAlpha) */
276 uiuc_1DdataFileReader(Cmfa,
280 aeroPitchParts -> storeCommands (*command_line);
285 Cmfade = aircraft_directory + linetoken3;
286 token4 >> token_value_convert1;
287 token5 >> token_value_convert2;
288 token6 >> token_value_convert3;
289 convert_z = uiuc_convert(token_value_convert1);
290 convert_x = uiuc_convert(token_value_convert2);
291 convert_y = uiuc_convert(token_value_convert3);
292 /* call 2D File Reader with file name (Cmfade) and
293 conversion factors; function returns array of
294 elevator deflections (deArray) and corresponding
295 alpha (aArray) and delta Cm (CmArray) values and
296 max number of terms in alpha arrays (nAlphaArray)
297 and deflection array (nde) */
298 uiuc_2DdataFileReader(Cmfade,
304 aeroPitchParts -> storeCommands (*command_line);
309 Cmfdf = aircraft_directory + linetoken3;
310 token4 >> token_value_convert1;
311 token5 >> token_value_convert2;
312 convert_y = uiuc_convert(token_value_convert1);
313 convert_x = uiuc_convert(token_value_convert2);
314 /* call 1D File Reader with file name (Cmfdf) and conversion
315 factors; function returns array of dfs (dfArray) and
316 corresponding Cm values (CmArray) and max number of
317 terms in arrays (ndf) */
318 uiuc_1DdataFileReader(Cmfdf,
322 aeroPitchParts -> storeCommands (*command_line);
327 Cmfadf = aircraft_directory + linetoken3;
328 token4 >> token_value_convert1;
329 token5 >> token_value_convert2;
330 token6 >> token_value_convert3;
331 convert_z = uiuc_convert(token_value_convert1);
332 convert_x = uiuc_convert(token_value_convert2);
333 convert_y = uiuc_convert(token_value_convert3);
334 /* call 2D File Reader with file name (Cmfadf) and
335 conversion factors; function returns array of
336 flap deflections (dfArray) and corresponding
337 alpha (aArray) and delta Cm (CmArray) values and
338 max number of terms in alpha arrays (nAlphaArray)
339 and deflection array (ndf) */
340 uiuc_2DdataFileReader(Cmfadf,
346 aeroPitchParts -> storeCommands (*command_line);
351 int Cmfabetaf_index, i;
352 string Cmfabetaf_file;
354 Cmfabetaf_file = aircraft_directory + linetoken3;
355 token4 >> Cmfabetaf_index;
356 if (Cmfabetaf_index < 0 || Cmfabetaf_index >= 30)
357 uiuc_warnings_errors(1, *command_line);
358 if (Cmfabetaf_index > Cmfabetaf_nf)
359 Cmfabetaf_nf = Cmfabetaf_index;
360 token5 >> flap_value;
361 token6 >> token_value_convert1;
362 token7 >> token_value_convert2;
363 token8 >> token_value_convert3;
364 token9 >> token_value_convert4;
365 token10 >> Cmfabetaf_nice;
366 convert_z = uiuc_convert(token_value_convert1);
367 convert_x = uiuc_convert(token_value_convert2);
368 convert_y = uiuc_convert(token_value_convert3);
369 convert_f = uiuc_convert(token_value_convert4);
370 Cmfabetaf_fArray[Cmfabetaf_index] = flap_value * convert_f;
371 /* call 2D File Reader with file name (Cmfabetaf_file) and
372 conversion factors; function returns array of
373 elevator deflections (deArray) and corresponding
374 alpha (aArray) and delta CZ (CZArray) values and
375 max number of terms in alpha arrays (nAlphaArray)
376 and delfection array (nde) */
377 uiuc_2DdataFileReader(Cmfabetaf_file,
383 d_2_to_3(datafile_xArray, Cmfabetaf_aArray, Cmfabetaf_index);
384 d_1_to_2(datafile_yArray, Cmfabetaf_betaArray, Cmfabetaf_index);
385 d_2_to_3(datafile_zArray, Cmfabetaf_CmArray, Cmfabetaf_index);
386 i_1_to_2(datafile_nxArray, Cmfabetaf_nAlphaArray, Cmfabetaf_index);
387 Cmfabetaf_nbeta[Cmfabetaf_index] = datafile_ny;
388 if (Cmfabetaf_first==true)
390 if (Cmfabetaf_nice == 1)
392 Cmfabetaf_na_nice = datafile_nxArray[1];
393 Cmfabetaf_nb_nice = datafile_ny;
394 d_1_to_1(datafile_yArray, Cmfabetaf_bArray_nice);
395 for (i=1; i<=Cmfabetaf_na_nice; i++)
396 Cmfabetaf_aArray_nice[i] = datafile_xArray[1][i];
398 aeroPitchParts -> storeCommands (*command_line);
399 Cmfabetaf_first=false;
405 int Cmfadef_index, i;
408 Cmfadef_file = aircraft_directory + linetoken3;
409 token4 >> Cmfadef_index;
410 if (Cmfadef_index < 0 || Cmfadef_index >= 30)
411 uiuc_warnings_errors(1, *command_line);
412 if (Cmfadef_index > Cmfadef_nf)
413 Cmfadef_nf = Cmfadef_index;
414 token5 >> flap_value;
415 token6 >> token_value_convert1;
416 token7 >> token_value_convert2;
417 token8 >> token_value_convert3;
418 token9 >> token_value_convert4;
419 token10 >> Cmfadef_nice;
420 convert_z = uiuc_convert(token_value_convert1);
421 convert_x = uiuc_convert(token_value_convert2);
422 convert_y = uiuc_convert(token_value_convert3);
423 convert_f = uiuc_convert(token_value_convert4);
424 Cmfadef_fArray[Cmfadef_index] = flap_value * convert_f;
425 /* call 2D File Reader with file name (Cmfadef_file) and
426 conversion factors; function returns array of
427 elevator deflections (deArray) and corresponding
428 alpha (aArray) and delta CZ (CZArray) values and
429 max number of terms in alpha arrays (nAlphaArray)
430 and delfection array (nde) */
431 uiuc_2DdataFileReader(Cmfadef_file,
437 d_2_to_3(datafile_xArray, Cmfadef_aArray, Cmfadef_index);
438 d_1_to_2(datafile_yArray, Cmfadef_deArray, Cmfadef_index);
439 d_2_to_3(datafile_zArray, Cmfadef_CmArray, Cmfadef_index);
440 i_1_to_2(datafile_nxArray, Cmfadef_nAlphaArray, Cmfadef_index);
441 Cmfadef_nde[Cmfadef_index] = datafile_ny;
442 if (Cmfadef_first==true)
444 if (Cmfadef_nice == 1)
446 Cmfadef_na_nice = datafile_nxArray[1];
447 Cmfadef_nde_nice = datafile_ny;
448 d_1_to_1(datafile_yArray, Cmfadef_deArray_nice);
449 for (i=1; i<=Cmfadef_na_nice; i++)
450 Cmfadef_aArray_nice[i] = datafile_xArray[1][i];
452 aeroPitchParts -> storeCommands (*command_line);
462 Cmfaqf_file = aircraft_directory + linetoken3;
463 token4 >> Cmfaqf_index;
464 if (Cmfaqf_index < 0 || Cmfaqf_index >= 30)
465 uiuc_warnings_errors(1, *command_line);
466 if (Cmfaqf_index > Cmfaqf_nf)
467 Cmfaqf_nf = Cmfaqf_index;
468 token5 >> flap_value;
469 token6 >> token_value_convert1;
470 token7 >> token_value_convert2;
471 token8 >> token_value_convert3;
472 token9 >> token_value_convert4;
473 token10 >> Cmfaqf_nice;
474 convert_z = uiuc_convert(token_value_convert1);
475 convert_x = uiuc_convert(token_value_convert2);
476 convert_y = uiuc_convert(token_value_convert3);
477 convert_f = uiuc_convert(token_value_convert4);
478 Cmfaqf_fArray[Cmfaqf_index] = flap_value * convert_f;
479 /* call 2D File Reader with file name (Cmfaqf_file) and
480 conversion factors; function returns array of
481 elevator deflections (deArray) and corresponding
482 alpha (aArray) and delta CZ (CZArray) values and
483 max number of terms in alpha arrays (nAlphaArray)
484 and delfection array (nde) */
485 uiuc_2DdataFileReader(Cmfaqf_file,
491 d_2_to_3(datafile_xArray, Cmfaqf_aArray, Cmfaqf_index);
492 d_1_to_2(datafile_yArray, Cmfaqf_qArray, Cmfaqf_index);
493 d_2_to_3(datafile_zArray, Cmfaqf_CmArray, Cmfaqf_index);
494 i_1_to_2(datafile_nxArray, Cmfaqf_nAlphaArray, Cmfaqf_index);
495 Cmfaqf_nq[Cmfaqf_index] = datafile_ny;
496 if (Cmfaqf_first==true)
498 if (Cmfaqf_nice == 1)
500 Cmfaqf_na_nice = datafile_nxArray[1];
501 Cmfaqf_nq_nice = datafile_ny;
502 d_1_to_1(datafile_yArray, Cmfaqf_qArray_nice);
503 for (i=1; i<=Cmfaqf_na_nice; i++)
504 Cmfaqf_aArray_nice[i] = datafile_xArray[1][i];
506 aeroPitchParts -> storeCommands (*command_line);
513 if (ignore_unknown_keywords) {
516 // print error message
517 uiuc_warnings_errors(2, *command_line);