]> git.mxchange.org Git - flightgear.git/blob - src/FDM/LaRCsim/ls_interface.c
I tested:
[flightgear.git] / src / FDM / LaRCsim / ls_interface.c
1 /**************************************************************************
2  * ls_interface.c -- the FG interface to the LaRCsim routines
3  *                   This is a heavily modified version of LaRCsim.c
4  *                   As a result there is much old baggage left in this file.
5  *
6  * Originally Written 921230 by Bruce Jackson
7  * Modified by Curtis Olson, started May 1997.
8  *
9  * This program is free software; you can redistribute it and/or
10  * modify it under the terms of the GNU General Public License as
11  * published by the Free Software Foundation; either version 2 of the
12  * License, or (at your option) any later version.
13  *
14  * This program is distributed in the hope that it will be useful, but
15  * WITHOUT ANY WARRANTY; without even the implied warranty of
16  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
17  * General Public License for more details.
18  *
19  * You should have received a copy of the GNU General Public License
20  * along with this program; if not, write to the Free Software
21  * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
22  *
23  * $Id$
24  * (Log is kept at end of this file)
25  **************************************************************************/
26
27 /* Original headers follow: */
28
29 /***************************************************************************
30
31         TITLE:          LaRCsim.c
32         
33 ----------------------------------------------------------------------------
34
35         FUNCTION:       Top level routine for LaRCSIM.  Includes
36                         global variable declarations.
37
38 ----------------------------------------------------------------------------
39
40         MODULE STATUS:  Developmental
41
42 ----------------------------------------------------------------------------
43
44         GENEALOGY:      Written 921230 by Bruce Jackson
45
46 ----------------------------------------------------------------------------
47
48         DESIGNED BY:    EBJ
49         
50         CODED BY:       EBJ
51         
52         MAINTAINED BY:  EBJ
53
54 ----------------------------------------------------------------------------
55
56         MODIFICATION HISTORY:
57         
58         DATE    PURPOSE                                         BY
59
60         930111  Added "progname" variable to keep name of invoking command.
61                                                                         EBJ
62         931012  Removed altitude < 0. test to support gear development. EBJ
63         931214  Added various pressures (Impact, Dynamic, Static, etc.) EBJ
64         931215  Adopted new generic variable structure.                 EBJ
65         931218  Added command line options decoding.                    EBJ
66         940110  Changed file type of matrix file to ".m"                EBJ
67         940513  Renamed this routine "LaRCsim.c" from "ls_main.c"       EBJ
68         940513  Added time_stamp routine,  t_stamp.                     EBJ
69         950225  Added options flag, 'i', to set I/O output rate.        EBJ
70         950306  Added calls to ls_get_settings() and ls_put_settings()  EBJ
71         950314  Options flag 'i' now reads IC file; 'o' is output rate  EBJ
72         950406  Many changes: added definition of default value macros;
73                 removed local variables term_update_hz, model_dt, endtime,
74                 substituted sim_control_ globals for these; removed
75                 initialization of sim_control_.tape_channels; moved optarg
76                 to generic extern; added mod_end_time & mod_buf_size flags
77                 and temporary buffer_time and data_rate locals to
78                 ls_checkopts(); added additional command line switches '-s'
79                 and '-b'; made psuedo-mandatory file names for data output
80                 switches; considerable rewrite of logic for setting data
81                 buffer length and interleave parameters; updated '-h' help
82                 output message; added protection logic to calculations of
83                 these parameters; added check of return value on first call
84                 to ls_cockpit() so <esc> abort works from initial pause
85                 state; added call to ls_unsync() immediately following
86                 first ls_sync() call, if paused (to avoid alarm clock
87                 timeout); moved call to ls_record() into non-paused
88                 multiloop path (was filling buffer with identical data
89                 during pause); put check of paused flag before calling sync
90                 routine ls_pause(); and added call to exit() on termination.
91
92
93 $Header$
94 $Original log: LaRCsim.c,v $
95  * Revision 1.4.1.7  1995/04/07  01:04:37  bjax
96  * Many changes made to support storage of sim options from run to run,
97  * as well as restructuring storage buffer sizing and some loop logic
98  * changes. See the modification log for details.
99  *
100  * Revision 1.4.1.6  1995/03/29  16:12:09  bjax
101  * Added argument to -o switch; changed run loop to pass dt=0
102  * if in paused mode. EBj
103  *
104  * Revision 1.4.1.5  1995/03/15  12:30:20  bjax
105  * Set paused flag to non-zero by default; moved 'i' I/O rate flag
106  * switch to 'o'; made 'i' an initial conditions file switch; added
107  * null string to ls_get_settings() call so that default settings
108  * file will be read. EBJ
109  *
110  * Revision 1.4.1.4  1995/03/08  12:31:34  bjax
111  * Added userid retrieval and proper termination of time & date strings.
112  *
113  * Revision 1.4.1.3  1995/03/08  12:00:21  bjax
114  * Moved setting of default options to ls_setdefopts from
115  * ls_checkopts; rearranged order of ls_get_settings() call
116  * to between ls_setdefopts and ls_checkopts, so command
117  * line options will override settings file options.
118  * EBJ
119  *
120  * Revision 1.4.1.2  1995/03/06  18:48:49  bjax
121  * Added calles to ls_get_settings() and ls_put_settings(); added
122  * passing of dt and init flags in ls_model(). EBJ
123  *
124  * Revision 1.4.1.1  1995/03/03  02:23:08  bjax
125  * Beta version for LaRCsim, version 1.4
126  *
127  * Revision 1.3.2.7  1995/02/27  20:00:21  bjax
128  * Rebuilt LaRCsim
129  *
130  * Revision 1.3.2.6  1995/02/25  16:52:31  bjax
131  * Added 'i' option to set I/O iteration rate. EBJ
132  *
133  * Revision 1.3.2.5  1995/02/06  19:33:15  bjax
134  * Rebuilt LaRCsim
135  *
136  * Revision 1.3.2.4  1995/02/06  19:30:30  bjax
137  * Oops, should really compile these before checking in. Fixed capitailzation of
138  * Initialize in ls_loop parameter.
139  *
140  * Revision 1.3.2.3  1995/02/06  19:25:44  bjax
141  * Moved main simulation loop into subroutine ls_loop. EBJ
142  *
143  * Revision 1.3.2.2  1994/05/20  21:46:45  bjax
144  * A little better logic on checking for option arguments.
145  *
146  * Revision 1.3.2.1  1994/05/20  19:29:51  bjax
147  * Added options arguments to command line.
148  *
149  * Revision 1.3.1.16  1994/05/17  15:08:45  bjax
150  * Corrected so that full name to directyr and file is saved
151  * in new global variable "fullname"; this allows symbol table
152  * to be extracted when in another default directory.
153  *
154  * Revision 1.3.1.15  1994/05/17  14:50:24  bjax
155  * Rebuilt LaRCsim
156  *
157  * Revision 1.3.1.14  1994/05/17  14:50:23  bjax
158  * Rebuilt LaRCsim
159  *
160  * Revision 1.3.1.13  1994/05/17  14:50:21  bjax
161  * Rebuilt LaRCsim
162  *
163  * Revision 1.3.1.12  1994/05/17  14:50:20  bjax
164  * Rebuilt LaRCsim
165  *
166  * Revision 1.3.1.11  1994/05/17  13:56:24  bjax
167  * Rebuilt LaRCsim
168  *
169  * Revision 1.3.1.10  1994/05/17  13:23:03  bjax
170  * Rebuilt LaRCsim
171  *
172  * Revision 1.3.1.9  1994/05/17  13:20:03  bjax
173  * Rebuilt LaRCsim
174  *
175  * Revision 1.3.1.8  1994/05/17  13:19:23  bjax
176  * Rebuilt LaRCsim
177  *
178  * Revision 1.3.1.7  1994/05/17  13:18:29  bjax
179  * Rebuilt LaRCsim
180  *
181  * Revision 1.3.1.6  1994/05/17  13:16:30  bjax
182  * Rebuilt LaRCsim
183  *
184  * Revision 1.3.1.5  1994/05/17  13:03:44  bjax
185  * Rebuilt LaRCsim
186  *
187  * Revision 1.3.1.4  1994/05/17  13:03:38  bjax
188  * Rebuilt LaRCsim
189  *
190  * Revision 1.3.1.3  1994/05/17  12:49:08  bjax
191  * Rebuilt LaRCsim
192  *
193  * Revision 1.3.1.2  1994/05/17  12:48:45  bjax
194  * *** empty log message ***
195  *
196  * Revision 1.3.1.1  1994/05/13  20:39:17  bjax
197  * Top of 1.3 branch.
198  *
199  * Revision 1.2  1994/05/13  19:51:50  bjax
200  * Skip rev
201  *
202
203 ----------------------------------------------------------------------------
204
205         REFERENCES:
206
207 ----------------------------------------------------------------------------
208
209         CALLED BY:
210
211 ----------------------------------------------------------------------------
212
213         CALLS TO:
214
215 ----------------------------------------------------------------------------
216
217         INPUTS:
218
219 ----------------------------------------------------------------------------
220
221         OUTPUTS:
222
223 --------------------------------------------------------------------------*/
224
225 /* #include <sys/types.h> */
226 /* #include <sys/stat.h> */
227 #include <stdlib.h>
228 #include <stdio.h>
229 #include <math.h>
230 #include <time.h>
231
232 #include "ls_types.h"
233 #include "ls_constants.h"
234 #include "ls_geodesy.h"
235 #include "ls_generic.h"
236 #include "ls_sim_control.h"
237 #include "ls_cockpit.h"
238 #include "ls_interface.h"
239 #include "ls_step.h"
240 #include "ls_accel.h"
241 #include "ls_aux.h"
242 #include "ls_model.h"
243 #include "ls_init.h"
244
245 // #include <Flight/flight.h>
246 // #include <Aircraft/aircraft.h>
247 // #include <Debug/fg_debug.h>
248
249
250 /* global variable declarations */
251
252 /* TAPE         *Tape; */
253 GENERIC         generic_;
254 SIM_CONTROL     sim_control_;
255 COCKPIT         cockpit_;
256
257 SCALAR          Simtime;
258
259 #define DEFAULT_TERM_UPDATE_HZ 20
260 #define DEFAULT_MODEL_HZ 120
261 #define DEFAULT_END_TIME 3600.
262 #define DEFAULT_SAVE_SPACING 8
263 #define DEFAULT_WRITE_SPACING 1
264 #define MAX_FILE_NAME_LENGTH 80
265
266 /* global variables */
267
268 char    *progname;
269 char    *fullname;
270
271 /* file variables - default simulation settings */
272
273 static double model_dt;
274 static double speedup;
275 static char  asc1name[MAX_FILE_NAME_LENGTH] = "run.asc1";
276 static char  tabname[MAX_FILE_NAME_LENGTH]  = "run.dat";
277 static char  fltname[MAX_FILE_NAME_LENGTH]  = "run.flt";
278 static char  matname[MAX_FILE_NAME_LENGTH]  = "run.m";
279
280
281
282 void ls_stamp( void ) {
283     char rcsid[] = "$Id$";
284     char revid[] = "$Revision$";
285     char dateid[] = "$Date$";
286     struct tm *nowtime;
287     time_t nowtime_t;
288     long date;
289     
290     /* report version of LaRCsim*/
291     printf("\nLaRCsim %s, %s\n\n", revid, dateid); 
292     
293     nowtime_t = time( 0 );
294     nowtime = localtime( &nowtime_t ); /* set fields to correct time values */
295     date = (nowtime->tm_year)*10000 
296          + (nowtime->tm_mon + 1)*100
297          + (nowtime->tm_mday);
298     sprintf(sim_control_.date_string, "%06d\0", date);
299     sprintf(sim_control_.time_stamp, "%02d:%02d:%02d\0", 
300         nowtime->tm_hour, nowtime->tm_min, nowtime->tm_sec);
301 #ifdef COMPILE_THIS_CODE_THIS_USELESS_CODE
302     cuserid( sim_control_.userid );     /* set up user id */
303 #endif /* COMPILE_THIS_CODE_THIS_USELESS_CODE */
304     return;
305 }
306
307 void ls_setdefopts( void ) {
308     /* set default values for most options */
309
310     sim_control_.debug = 0;             /* change to non-zero if in dbx! */
311     sim_control_.vision = 0;
312     sim_control_.write_av = 0;          /* write Agile-Vu '.flt' file */
313     sim_control_.write_mat = 0;         /* write matrix-x/matlab script */
314     sim_control_.write_tab = 0;         /* write tab delim. history file */
315     sim_control_.write_asc1 = 0;        /* write GetData file */
316     sim_control_.save_spacing = DEFAULT_SAVE_SPACING;   
317                                         /* interpolation on recording */
318     sim_control_.write_spacing = DEFAULT_WRITE_SPACING; 
319                                         /* interpolation on output */
320     sim_control_.end_time = DEFAULT_END_TIME;
321     sim_control_.model_hz = DEFAULT_MODEL_HZ;
322     sim_control_.term_update_hz = DEFAULT_TERM_UPDATE_HZ;
323     sim_control_.time_slices = (long int)(DEFAULT_END_TIME * DEFAULT_MODEL_HZ / 
324         DEFAULT_SAVE_SPACING);
325     sim_control_.paused = 0;
326
327     speedup = 1.0;
328 }
329
330
331 /* return result codes from ls_checkopts */
332
333 #define OPT_OK 0
334 #define OPT_ERR 1
335
336 #ifdef COMPILE_THIS_CODE_THIS_USELESS_CODE
337
338 extern char *optarg;
339 extern int optind;
340
341 int ls_checkopts(argc, argv)    /* check and set options flags */
342   int argc;
343   char *argv[];
344   {
345     int c;
346     int opt_err = 0;
347     int mod_end_time = 0;
348     int mod_buf_size = 0;
349     float buffer_time, data_rate;
350
351     /* set default values */
352
353     buffer_time = sim_control_.time_slices * sim_control_.save_spacing / 
354         sim_control_.model_hz;
355     data_rate   = sim_control_.model_hz / sim_control_.save_spacing;
356
357     while ((c = getopt(argc, argv, "Aa:b:de:f:hi:kmo:r:s:t:x:")) != EOF)
358         switch (c) {
359             case 'A':
360                 if (sim_control_.sim_type == GLmouse)
361                   {
362                     fprintf(stderr, "Cannot specify both keyboard (k) and ACES (A) cockpits option\n");
363                     fprintf(stderr, "Keyboard operation assumed.\n");
364                     break;
365                   }
366                 sim_control_.sim_type = cockpit;
367                 break;
368             case 'a':
369                 sim_control_.write_av = 1;
370                 if (optarg != NULL)
371                 if (*optarg != '-') 
372                     strncpy(fltname, optarg, MAX_FILE_NAME_LENGTH);
373                 else
374                     optind--;
375                 break;
376             case 'b':   
377                 buffer_time = atof(optarg);
378                 if (buffer_time <= 0.) opt_err = -1;
379                 mod_buf_size++;
380                 break;
381             case 'd':
382                 sim_control_.debug = 1;
383                 break;
384             case 'e':
385                 sim_control_.end_time = atof(optarg);
386                 mod_end_time++;
387                 break;
388             case 'f':
389                 sim_control_.model_hz = atof(optarg);
390                 break;
391             case 'h': 
392                 opt_err = 1;
393                 break;
394             case 'i':
395                 /* ls_get_settings( optarg ); */
396                 break;
397             case 'k':
398                 sim_control_.sim_type = GLmouse;
399                 break;
400             case 'm':
401                 sim_control_.vision = 1;
402                 break;
403             case 'o': 
404                 sim_control_.term_update_hz = atof(optarg);
405                 if (sim_control_.term_update_hz <= 0.) opt_err = 1;
406                 break;
407             case 'r':
408                 sim_control_.write_mat = 1;
409                 if (optarg != NULL)
410                 if (*optarg != '-') 
411                     strncpy(matname, optarg, MAX_FILE_NAME_LENGTH);
412                 else
413                     optind--;
414                 break;
415             case 's':
416                 data_rate = atof(optarg);
417                 if (data_rate <= 0.) opt_err = -1;
418                 break;
419             case 't':
420                 sim_control_.write_tab = 1;
421                 if (optarg != NULL)
422                 if (*optarg != '-') 
423                     strncpy(tabname, optarg, MAX_FILE_NAME_LENGTH);
424                 else
425                     optind--;
426                 break;
427             case 'x':
428                 sim_control_.write_asc1 = 1;
429                 if (optarg != NULL)
430                 if (*optarg != '-') 
431                     strncpy(asc1name, optarg, MAX_FILE_NAME_LENGTH);
432                 else
433                     optind--;
434                 break;
435             default:
436                 opt_err = 1;
437             
438         }
439
440     if (opt_err)
441       {
442         fprintf(stderr, "Usage: %s [-options]\n", progname);
443         fprintf(stderr, "\n");
444         fprintf(stderr, "  where [-options] is zero or more of the following:\n");
445         fprintf(stderr, "\n");
446         fprintf(stderr, "  [A|k]           Run mode: [A]CES cockpit   [default]\n");
447         fprintf(stderr, "                         or [k]eyboard\n");
448         fprintf(stderr, "\n");
449         fprintf(stderr, "  [i <filename>]  [i]nitial conditions filename\n");
450         fprintf(stderr, "\n");
451         fprintf(stderr, "  [f <value>]     Iteration rate [f]requency, Hz (default is %5.2f Hz)\n", 
452                                                 sim_control_.model_hz);
453         fprintf(stderr, "\n");
454         fprintf(stderr, "  [o <value>]     Display [o]utput frequency, Hz (default is %5.2f Hz)\n", 
455                                                 sim_control_.term_update_hz);
456         fprintf(stderr, "\n");
457         fprintf(stderr, "  [s <value>]     Data storage frequency, Hz (default is %5.2f Hz)\n",
458                                                 data_rate);
459         fprintf(stderr, "\n");
460         fprintf(stderr, "  [e <value>]     [e]nd time in seconds (default %5.1f seconds)\n", 
461                                                 sim_control_.end_time);
462         fprintf(stderr, "\n");
463         fprintf(stderr, "  [b <value>]     circular time history storage [b]uffer size, in seconds \n");
464         fprintf(stderr, "                  (default %5.1f seconds) (normally same as end time)\n", 
465                                                 sim_control_.time_slices*sim_control_.save_spacing/
466                                                         sim_control_.model_hz);
467         fprintf(stderr, "\n");
468         fprintf(stderr, "  [atxr [<filename>]] Output: [a]gile-vu  (default name: %s )\n", fltname);
469         fprintf(stderr, "                       and/or [t]ab delimited ( '' name: %s )\n", tabname);
470         fprintf(stderr, "                       and/or [x]plot     (default name: %s)\n", asc1name);
471         fprintf(stderr, "                       and/or mat[r]ix script ( '' name: %s   )\n", matname);
472         fprintf(stderr, "\n");
473         return OPT_ERR;
474       }
475
476 /* calculate additional controls */
477
478     sim_control_.save_spacing = (int) (0.5 + sim_control_.model_hz / data_rate);
479     if (sim_control_.save_spacing < 1) sim_control_.save_spacing = 1;
480
481     sim_control_.time_slices = buffer_time * sim_control_.model_hz / 
482         sim_control_.save_spacing;
483     if (sim_control_.time_slices < 2) sim_control_.time_slices = 2;
484          
485     return OPT_OK;
486   }
487 #endif /* COMPILE_THIS_CODE_THIS_USELESS_CODE */
488
489 void ls_set_model_dt(double dt) {
490   model_dt = dt;
491 }  
492
493 void ls_loop( SCALAR dt, int initialize ) {
494     /* printf ("  In ls_loop()\n"); */
495     ls_step( dt, initialize );
496     /* if (sim_control_.sim_type == cockpit ) ls_ACES();  */
497     ls_aux();
498     ls_model( dt, initialize );
499     ls_accel();
500 }
501
502
503
504 int ls_cockpit( void ) {
505     // fgCONTROLS *c;
506
507     sim_control_.paused = 0;
508
509     // c = current_aircraft.controls;
510
511     // Lat_control = FG_Aileron;
512     // Long_control = FG_Elevator;
513     // Long_trim = FG_Elev_Trim;
514     // Rudder_pedal = FG_Rudder;
515     // Throttle_pct = FG_Throttle[0];
516
517     /* printf("Mach = %.2f  ", Mach_number);
518     printf("%.4f,%.4f,%.2f  ", Latitude, Longitude, Altitude);
519     printf("%.2f,%.2f,%.2f\n", Phi, Theta, Psi); */
520
521     return( 0 );
522 }
523
524
525 /* Initialize the LaRCsim flight model, dt is the time increment for
526    each subsequent iteration through the EOM */
527 int ls_toplevel_init(double dt, char * aircraft) {
528     model_dt = dt;
529
530     ls_setdefopts();            /* set default options */
531         
532     ls_stamp();   /* ID stamp; record time and date of run */
533
534     if (speedup == 0.0) {
535         fprintf(stderr, "%s: Cannot run with speedup of 0.\n", progname);
536         return 1;
537     }
538
539     /* printf("LS pre Init pos = %.2f\n", Latitude); */
540
541     ls_init(aircraft);
542
543     /* printf("LS post Init pos = %.2f\n", Latitude); */
544
545     if (speedup > 0) {
546         /* Initialize (get) cockpit (controls) settings */
547         ls_cockpit();
548     }
549
550     return(1);
551 }
552
553
554 /* Run an iteration of the EOM (equations of motion) */
555 int ls_update(int multiloop) {
556     int i;
557
558     if (speedup > 0) {
559         ls_cockpit();
560     }
561
562     for ( i = 0; i < multiloop; i++ ) {
563         ls_loop( model_dt, 0);
564     }
565
566     return 1;
567 }
568
569
570 /* Set the altitude (force) */
571 int ls_ForceAltitude(double alt_feet) {
572     Altitude = alt_feet;
573     ls_geod_to_geoc( Latitude, Altitude, &Sea_level_radius, &Lat_geocentric);
574     Radius_to_vehicle = Altitude + Sea_level_radius;
575 }
576
577
578 /* Flight Gear Modification Log
579  *
580  * $Log$
581  * Revision 1.3  2000/10/23 22:34:54  curt
582  * I tested:
583  * LaRCsim c172 on-ground and in-air starts, reset: all work
584  * UIUC Cessna172 on-ground and in-air starts work as expected, reset
585  * results in an aircraft that is upside down but does not crash FG.   I
586  * don't know what it was like before, so it may well be no change.
587  * JSBSim c172 and X15 in-air starts work fine, resets now work (and are
588  * trimmed), on-ground starts do not -- the c172 ends up on its back.  I
589  * suspect this is no worse than before.
590  *
591  * I did not test:
592  * Balloon (the weather code returns nan's for the atmosphere data --this
593  * is in the weather module and apparently is a linux only bug)
594  * ADA (don't know how)
595  * MagicCarpet  (needs work yet)
596  * External (don't know how)
597  *
598  * known to be broken:
599  * LaRCsim c172 on-ground starts with a negative terrain altitude (this
600  * happens at KPAO when the scenery is not present).   The FDM inits to
601  * about 50 feet AGL and the model falls to the ground.  It does stay
602  * upright, however, and seems to be fine once it settles out, FWIW.
603  *
604  * To do:
605  * --implement set_Model on the bus
606  * --bring Christian's weather data into JSBSim
607  * -- add default method to bus for updating things like the sin and cos of
608  * latitude (for Balloon, MagicCarpet)
609  * -- lots of cleanup
610  *
611  * The files:
612  * src/FDM/flight.cxx
613  * src/FDM/flight.hxx
614  * -- all data members now declared protected instead of private.
615  * -- eliminated all but a small set of 'setters', no change to getters.
616  * -- that small set is declared virtual, the default implementation
617  * provided preserves the old behavior
618  * -- all of the vector data members are now initialized.
619  * -- added busdump() method -- FG_LOG's  all the bus data when called,
620  * useful for diagnostics.
621  *
622  * src/FDM/ADA.cxx
623  * -- bus data members now directly assigned to
624  *
625  * src/FDM/Balloon.cxx
626  * -- bus data members now directly assigned to
627  * -- changed V_equiv_kts to V_calibrated_kts
628  *
629  * src/FDM/JSBSim.cxx
630  * src/FDM/JSBSim.hxx
631  * -- bus data members now directly assigned to
632  * -- implemented the FGInterface virtual setters with JSBSim specific
633  * logic
634  * -- changed the static FDMExec to a dynamic fdmex (needed so that the
635  * JSBSim object can be deleted when a model change is called for)
636  * -- implemented constructor and destructor, moved some of the logic
637  * formerly in init() to constructor
638  * -- added logic to bring up FGEngInterface objects and set the RPM and
639  * throttle values.
640  *
641  * src/FDM/LaRCsim.cxx
642  * src/FDM/LaRCsim.hxx
643  * -- bus data members now directly assigned to
644  * -- implemented the FGInterface virtual setters with LaRCsim specific
645  * logic, uses LaRCsimIC
646  * -- implemented constructor and destructor, moved some of the logic
647  * formerly in init() to constructor
648  * -- moved default inertias to here from fg_init.cxx
649  * -- eliminated the climb rate calculation.  The equivalent, climb_rate =
650  * -1*vdown, is now in copy_from_LaRCsim().
651  *
652  * src/FDM/LaRCsimIC.cxx
653  * src/FDM/LaRCsimIC.hxx
654  * -- similar to FGInitialCondition, this class has all the logic needed to
655  * turn data like Vc and Mach into the more fundamental quantities LaRCsim
656  * needs to initialize.
657  * -- put it in src/FDM since it is a class
658  *
659  * src/FDM/MagicCarpet.cxx
660  *  -- bus data members now directly assigned to
661  *
662  * src/FDM/Makefile.am
663  * -- adds LaRCsimIC.hxx and cxx
664  *
665  * src/FDM/JSBSim/FGAtmosphere.h
666  * src/FDM/JSBSim/FGDefs.h
667  * src/FDM/JSBSim/FGInitialCondition.cpp
668  * src/FDM/JSBSim/FGInitialCondition.h
669  * src/FDM/JSBSim/JSBSim.cpp
670  * -- changes to accomodate the new bus
671  *
672  * src/FDM/LaRCsim/atmos_62.h
673  * src/FDM/LaRCsim/ls_geodesy.h
674  * -- surrounded prototypes with #ifdef __cplusplus ... #endif , functions
675  * here are needed in LaRCsimIC
676  *
677  * src/FDM/LaRCsim/c172_main.c
678  * src/FDM/LaRCsim/cherokee_aero.c
679  * src/FDM/LaRCsim/ls_aux.c
680  * src/FDM/LaRCsim/ls_constants.h
681  * src/FDM/LaRCsim/ls_geodesy.c
682  * src/FDM/LaRCsim/ls_geodesy.h
683  * src/FDM/LaRCsim/ls_step.c
684  * src/FDM/UIUCModel/uiuc_betaprobe.cpp
685  * -- changed PI to LS_PI, eliminates preprocessor naming conflict with
686  * weather module
687  *
688  * src/FDM/LaRCsim/ls_interface.c
689  * src/FDM/LaRCsim/ls_interface.h
690  * -- added function ls_set_model_dt()
691  *
692  * src/Main/bfi.cxx
693  * -- eliminated calls that set the NED speeds to body components.  They
694  * are no longer needed and confuse the new bus.
695  *
696  * src/Main/fg_init.cxx
697  * -- eliminated calls that just brought the bus data up-to-date (e.g.
698  * set_sin_cos_latitude). or set default values.   The bus now handles the
699  * defaults and updates itself when the setters are called (for LaRCsim and
700  * JSBSim).  A default method for doing this needs to be added to the bus.
701  * -- added fgVelocityInit() to set the speed the user asked for.  Both
702  * JSBSim and LaRCsim can now be initialized using any of:
703  * vc,mach, NED components, UVW components.
704  *
705  * src/Main/main.cxx
706  * --eliminated call to fgFDMSetGroundElevation, this data is now 'pulled'
707  * onto the bus every update()
708  *
709  * src/Main/options.cxx
710  * src/Main/options.hxx
711  * -- added enum to keep track of the speed requested by the user
712  * -- eliminated calls to set NED velocity properties to body speeds, they
713  * are no longer needed.
714  * -- added options for the NED components.
715  *
716  * src/Network/garmin.cxx
717  * src/Network/nmea.cxx
718  * --eliminated calls that just brought the bus data up-to-date (e.g.
719  * set_sin_cos_latitude).  The bus now updates itself when the setters are
720  * called (for LaRCsim and JSBSim).  A default method for doing this needs
721  * to be added to the bus.
722  * -- changed set_V_equiv_kts to set_V_calibrated_kts.  set_V_equiv_kts no
723  * longer exists ( get_V_equiv_kts still does, though)
724  *
725  * src/WeatherCM/FGLocalWeatherDatabase.cpp
726  * -- commented out the code to put the weather data on the bus, a
727  * different scheme for this is needed.
728  *
729  * Revision 1.2  2000/04/10 18:09:41  curt
730  * David Megginson made a few (mostly minor) mods to the LaRCsim files, and
731  * it's now possible to choose the LaRCsim model at runtime, as in
732  *
733  *   fgfs --aircraft=c172
734  *
735  * or
736  *
737  *   fgfs --aircraft=uiuc --aircraft-dir=Aircraft-uiuc/Boeing747
738  *
739  * I did this so that I could play with the UIUC stuff without losing
740  * Tony's C172 with its flaps, etc.  I did my best to respect the design
741  * of the LaRCsim code by staying in C, making only minimal changes, and
742  * not introducing any dependencies on the rest of FlightGear.  The
743  * modified files are attached.
744  *
745  * Revision 1.1.1.1  1999/06/17 18:07:33  curt
746  * Start of 0.7.x branch
747  *
748  * Revision 1.2  1999/04/27 19:28:04  curt
749  * Changes for the MacOS port contributed by Darrell Walisser.
750  *
751  * Revision 1.1.1.1  1999/04/05 21:32:45  curt
752  * Start of 0.6.x branch.
753  *
754  * Revision 1.25  1999/01/19 20:57:02  curt
755  * MacOS portability changes contributed by "Robert Puyol" <puyol@abvent.fr>
756  *
757  * Revision 1.24  1998/12/14 13:27:47  curt
758  * Removed some old, outdated, no longer needed code.
759  *
760  * Revision 1.23  1998/10/16 23:27:44  curt
761  * C++-ifying.
762  *
763  * Revision 1.22  1998/09/29 02:02:59  curt
764  * Added a brake + autopilot mods.
765  *
766  * Revision 1.21  1998/08/22  14:49:56  curt
767  * Attempting to iron out seg faults and crashes.
768  * Did some shuffling to fix a initialization order problem between view
769  * position, scenery elevation.
770  *
771  * Revision 1.20  1998/07/12 03:11:03  curt
772  * Removed some printf()'s.
773  * Fixed the autopilot integration so it should be able to update it's control
774  *   positions every time the internal flight model loop is run, and not just
775  *   once per rendered frame.
776  * Added a routine to do the necessary stuff to force an arbitrary altitude
777  *   change.
778  * Gave the Navion engine just a tad more power.
779  *
780  * Revision 1.19  1998/05/11 18:17:28  curt
781  * Output message tweaking.
782  *
783  * Revision 1.18  1998/04/21 16:59:38  curt
784  * Integrated autopilot.
785  * Prepairing for C++ integration.
786  *
787  * Revision 1.17  1998/02/23 19:07:58  curt
788  * Incorporated Durk's Astro/ tweaks.  Includes unifying the sun position
789  * calculation code between sun display, and other FG sections that use this
790  * for things like lighting.
791  *
792  * Revision 1.16  1998/02/07 15:29:38  curt
793  * Incorporated HUD changes and struct/typedef changes from Charlie Hotchkiss
794  * <chotchkiss@namg.us.anritsu.com>
795  *
796  * Revision 1.15  1998/01/22 22:03:47  curt
797  * Removed #include <sys/stat.h>
798  *
799  * Revision 1.14  1998/01/19 19:27:04  curt
800  * Merged in make system changes from Bob Kuehne <rpk@sgi.com>
801  * This should simplify things tremendously.
802  *
803  * Revision 1.13  1998/01/19 18:40:26  curt
804  * Tons of little changes to clean up the code and to remove fatal errors
805  * when building with the c++ compiler.
806  *
807  * Revision 1.12  1998/01/06 01:20:16  curt
808  * Tweaks to help building with MSVC++
809  *
810  * Revision 1.11  1998/01/05 22:19:26  curt
811  * #ifdef'd out some unused code that was problematic for MSVC++ to compile.
812  *
813  * Revision 1.10  1997/12/10 22:37:43  curt
814  * Prepended "fg" on the name of all global structures that didn't have it yet.
815  * i.e. "struct WEATHER {}" became "struct fgWEATHER {}"
816  *
817  * Revision 1.9  1997/08/27 03:30:08  curt
818  * Changed naming scheme of basic shared structures.
819  *
820  * Revision 1.8  1997/06/21 17:12:50  curt
821  * Capitalized subdirectory names.
822  *
823  * Revision 1.7  1997/05/31 19:16:28  curt
824  * Elevator trim added.
825  *
826  * Revision 1.6  1997/05/31 04:13:53  curt
827  * WE CAN NOW FLY!!!
828  *
829  * Continuing work on the LaRCsim flight model integration.
830  * Added some MSFS-like keyboard input handling.
831  *
832  * Revision 1.5  1997/05/30 23:26:25  curt
833  * Added elevator/aileron controls.
834  *
835  * Revision 1.4  1997/05/30 19:30:15  curt
836  * The LaRCsim flight model is starting to look like it is working.
837  *
838  * Revision 1.3  1997/05/30 03:54:12  curt
839  * Made a bit more progress towards integrating the LaRCsim flight model.
840  *
841  * Revision 1.2  1997/05/29 22:39:59  curt
842  * Working on incorporating the LaRCsim flight model.
843  *
844  * Revision 1.1  1997/05/29 00:09:57  curt
845  * Initial Flight Gear revision.
846  *
847  */