]> git.mxchange.org Git - flightgear.git/commitdiff
Revamped the "External" flight model.
authorcurt <curt>
Fri, 19 Nov 1999 02:12:46 +0000 (02:12 +0000)
committercurt <curt>
Fri, 19 Nov 1999 02:12:46 +0000 (02:12 +0000)
src/FDM/External.cxx [new file with mode: 0644]
src/FDM/External.hxx [new file with mode: 0644]
src/FDM/Makefile.am
src/FDM/flight.cxx

diff --git a/src/FDM/External.cxx b/src/FDM/External.cxx
new file mode 100644 (file)
index 0000000..9284c9a
--- /dev/null
@@ -0,0 +1,49 @@
+// External.cxx -- interface to the "External"-ly driven flight model
+//
+// Written by Curtis Olson, started November 1999.
+//
+// Copyright (C) 1999  Curtis L. Olson  - curt@flightgear.org
+//
+// This program is free software; you can redistribute it and/or
+// modify it under the terms of the GNU General Public License as
+// published by the Free Software Foundation; either version 2 of the
+// License, or (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful, but
+// WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program; if not, write to the Free Software
+// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+//
+// $Id$
+
+
+#include "External.hxx"
+
+
+// Initialize the External flight model, dt is the time increment
+// for each subsequent iteration through the EOM
+int FGExternal::init( double dt ) {
+    // cout << "FGExternal::init()" << endl;
+
+    // set valid time for this record
+    stamp_time();
+
+    return 1;
+}
+
+
+// Run an iteration of the EOM.  This is essentially a NOP here
+// because these values are getting filled in elsewhere based on
+// external input.
+int FGExternal::update( int multiloop ) {
+    // cout << "FGExternal::update()" << endl;
+
+    // double time_step = (1.0 / current_options.get_model_hz()) * multiloop;
+
+
+    return 1;
+}
diff --git a/src/FDM/External.hxx b/src/FDM/External.hxx
new file mode 100644 (file)
index 0000000..1596159
--- /dev/null
@@ -0,0 +1,42 @@
+// External.hxx -- interface to the "External"-ly driven flight model
+//
+// Written by Curtis Olson, started November 1999.
+//
+// Copyright (C) 1999  Curtis L. Olson  - curt@flightgear.org
+//
+// This program is free software; you can redistribute it and/or
+// modify it under the terms of the GNU General Public License as
+// published by the Free Software Foundation; either version 2 of the
+// License, or (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful, but
+// WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program; if not, write to the Free Software
+// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+//
+// $Id$
+
+
+#ifndef _EXTERNAL_HXX
+#define _EXTERNAL_HXX
+
+
+#include "flight.hxx"
+
+
+class FGExternal: public FGInterface {
+
+public:
+    // reset flight params to a specific position 
+    int init( double dt );
+
+    // update position based on inputs, positions, velocities, etc.
+    int update( int multiloop );
+};
+
+
+#endif // _EXTERNAL_HXX
index 597e436691ea07a386a8304c725b3ad4a32774d9..a70cf69ef93233787dad89e463c4a7a01a67a676 100644 (file)
@@ -1,9 +1,10 @@
-SUBDIRS        = Balloon External JSBsim LaRCsim
+SUBDIRS        = Balloon JSBsim LaRCsim
 
 noinst_LIBRARIES = libFlight.a
 
 libFlight_a_SOURCES = \
        Balloon.cxx Balloon.h \
+       External.cxx External.hxx \
        flight.cxx flight.hxx \
        JSBsim.cxx JSBsim.hxx \
        LaRCsim.cxx LaRCsim.hxx \
index 57f73d937c37805ccd008ff62d08c16917d8bc81..2f33024b9067197e1a5a26adeb6d00e898c82ce3 100644 (file)
 #include <stdio.h>
 
 #include <Debug/logstream.hxx>
-#include <FDM/External/external.hxx>
 #include <FDM/LaRCsim/ls_interface.h>
 #include <Include/fg_constants.h>
 #include <Main/options.hxx>
 #include <Math/fg_geodesy.hxx>
 #include <Time/timestamp.hxx>
 
+#include "External.hxx"
 #include "flight.hxx"
 #include "JSBsim.hxx"
 #include "LaRCsim.hxx"
@@ -89,110 +89,6 @@ void FGInterface::extrapolate( int time_offset ) {
 }
 
 
-#if 0
-// Initialize the flight model parameters
-int fgFDMInit(int model, FGInterface& f, double dt) {
-    double save_alt = 0.0;
-
-    FG_LOG( FG_FLIGHT ,FG_INFO, "Initializing flight model" );
-
-    base_fdm_state = f;
-
-    if ( model == FGInterface::FG_SLEW ) {
-       // fgSlewInit(dt);
-#ifndef __MWERKS__   // -dw- 04/22/99 JSB sim not ported yet
-    } else if ( model == FGInterface::FG_JSBSIM ) {
-       fgJSBsimInit(dt, f);
-       fgJSBsim_2_FGInterface(base_fdm_state);
-#endif
-    } else if ( model == FGInterface::FG_LARCSIM ) {
-       // lets try to avoid really screwing up the LaRCsim model
-       if ( base_fdm_state.get_Altitude() < -9000.0 ) {
-           save_alt = base_fdm_state.get_Altitude();
-           base_fdm_state.set_Altitude( 0.0 );
-       }
-
-       // translate FG to LaRCsim structure
-       FGInterface_2_LaRCsim(base_fdm_state);
-
-       // initialize LaRCsim
-       fgLaRCsimInit(dt);
-
-       FG_LOG( FG_FLIGHT, FG_INFO, "FG pos = " << 
-               base_fdm_state.get_Latitude() );
-
-       // translate LaRCsim back to FG structure
-       fgLaRCsim_2_FGInterface(base_fdm_state);
-
-       // but lets restore our original bogus altitude when we are done
-       if ( save_alt < -9000.0 ) {
-           base_fdm_state.set_Altitude( save_alt );
-       }
-    } else if ( model == FGInterface::FG_EXTERNAL ) {
-       fgExternalInit(base_fdm_state);
-    } else {
-       FG_LOG( FG_FLIGHT, FG_WARN,
-               "Unimplemented flight model == " << model );
-    }
-
-    // set valid time for this record
-    base_fdm_state.stamp_time();
-       
-    f = base_fdm_state;
-
-    return 1;
-}
-#endif
-
-
-#if 0
-// Run multiloop iterations of the flight model
-int fgFDMUpdate(int model, FGInterface& f, int multiloop, int time_offset) {
-    double time_step, start_elev, end_elev;
-
-    // printf("Altitude = %.2f\n", FG_Altitude * 0.3048);
-
-    // set valid time for this record
-    base_fdm_state.stamp_time();
-
-    time_step = (1.0 / current_options.get_model_hz()) * multiloop;
-    start_elev = base_fdm_state.get_Altitude();
-
-    if ( model == FGInterface::FG_SLEW ) {
-       // fgSlewUpdate(f, multiloop);
-#ifndef __MWERKS__   // -dw- 04/22/99 JSB sim not ported yet
-    } else if ( model == FGInterface::FG_JSBSIM ) {
-       fgJSBsimUpdate(base_fdm_state, multiloop);
-       f = base_fdm_state;
-#endif
-    } else if ( model == FGInterface::FG_LARCSIM ) {
-       fgLaRCsimUpdate(base_fdm_state, multiloop);
-       // extrapolate position based on actual time
-       // f = extrapolate_fdm( base_fdm_state, time_offset );
-       f = base_fdm_state;
-    } else if ( model == FGInterface::FG_EXTERNAL ) {
-       // fgExternalUpdate(f, multiloop);
-       FGTimeStamp current;
-       current.stamp();
-       f = base_fdm_state;
-       f.extrapolate( current - base_fdm_state.get_time_stamp() );
-    } else {
-       FG_LOG( FG_FLIGHT, FG_WARN,
-               "Unimplemented flight model == " <<  model );
-    }
-
-    end_elev = base_fdm_state.get_Altitude();
-
-    if ( time_step > 0.0 ) {
-       // feet per second
-       base_fdm_state.set_Climb_Rate( (end_elev - start_elev) / time_step );
-    }
-
-    return 1;
-}
-#endif
-
-
 // Set the altitude (force)
 void fgFDMForceAltitude(int model, double alt_meters) {
     double sea_level_radius_meters;