00001 ////////////////////////////////////////////////////////////////////////////////////////////////// 00002 /*! \file Propagator.h 00003 * \brief Interface to the Propagator abstract class. 00004 * \author $Author: jayhawk_hokie $ 00005 * \version $Revision: 1.2 $ 00006 * \date $Date: 2005/06/10 12:53:28 $ 00007 *////////////////////////////////////////////////////////////////////////////////////////////////// 00008 /* \todo Finish documentation 00009 * 00010 */ 00011 ////////////////////////////////////////////////////////////////////////////////////////////////// 00012 00013 #ifndef __OSESSAME_PROPAGATOR_H__ 00014 #define __OSESSAME_PROPAGATOR_H__ 00015 00016 #include <rotation/Rotation.h> 00017 #include <utils/Integrator.h> 00018 #include <orbit/Orbit.h> 00019 #include <attitude/Attitude.h> 00020 #include <datahandling/AttitudeHistory.h> 00021 #include <datahandling/OrbitHistory.h> 00022 00023 00024 namespace O_SESSAME { 00025 ////////////////////////////////////////////////////////////////////////////////////////////////// 00026 /*! @defgroup PropagatorToolkit Propagator Toolkit 00027 * The propagator toolkit contains all the functionality required to propagate the full dynamics 00028 * of a spacecraft. This can include only attitude or orbit dynamics, combined, or even propagation 00029 * using an external source of states, such as another simulation program or hardware. 00030 * 00031 * \par 00032 * The Propagator class offers an abstract interface to the specific propagation strategies 00033 * that implement each of the examples given above, as well as any further user defined algorithms. 00034 A propagator requires the following parts: 00035 - Orbit object (if propagating with an orbit), including: 00036 - Dynamic equations, the right-hand side, or time derivate equations (odeFunctor) 00037 - A state conversion function that converts the integrated state variables to an 00038 object stored in OrbitHistory. 00039 - An Interpolator in the OrbitHistory. 00040 - Attitude object (if propagating with an attitude), including: 00041 - Dynamic equations, the right-hand side, or time derivate equations (odeFunctor) 00042 - A state conversion function that converts the integrated state variables to an 00043 object stored in AttitudeHistory 00044 - An Interpolator in the AttitudeHistory 00045 - An attitude state propagator 00046 - Use either an Integrator 00047 - Tie in the external source to the AttitudeHistory object (Exporter, Communications) 00048 - An orbit state propagator 00049 - Use either an Integrator 00050 - Tie in the external source to the OrbitHistory object (Exporter, Communications) 00051 - An Environment object 00052 - Environmental force and torque disturbance functions (EnvFunction) 00053 - A CentralBody (EarthCentralBody, MoonCentralBody, etc.) 00054 00055 An example of a propagator use is included in testPropagation.cpp. 00056 00057 * 00058 * \par Extension Points: 00059 * The propagation toolkit currently has functionality for independent attitude \& orbit 00060 * propagation, as well as combined propagation using weak coupling, and full coupling. Any new 00061 * propagation schemes should be derived from the appropriate AnalyticPropagator or NumericPropagator 00062 * interface classes as necessary. 00063 */ 00064 00065 class Attitude; 00066 class Orbit; 00067 00068 00069 /*! \brief Encapsulation of the propagation of the spacecraft dynamics (attitude, orbital, etc.) 00070 * \ingroup PropagatorToolkit 00071 * 00072 * The propagator is used to tie together the various spacecraft dynamics that are desired to be 00073 * propagated. The user has the ability to set the time derivative equations, integrators, parameters, 00074 * etc. as necessary. Furthermore, the Propagator class can be derived for more functionality. 00075 */ 00076 class Propagator 00077 { 00078 public: 00079 /*! \brief Default Deconstructor */ 00080 virtual ~Propagator(); 00081 00082 /*! \brief Propagates the dynamics forward through time 00083 * @param _propTime STL vector of values specifying beginning, ending times of propagation as well as time step [initialTime, timeStep, finalTime] (s) 00084 */ 00085 virtual void Propagate(const vector<ssfTime> &_propTime); 00086 00087 /*! \brief Sets the Attitude Representation object to be propagated 00088 * @param _AttitudeObject pointer to the attitude representation 00089 */ 00090 virtual void SetAttitudeObject(Attitude *_pAttitudeObject); 00091 00092 /*! \brief Sets the Orbit Representation object to be propagated 00093 * @param _OrbitObject pointer to the Orbit representation 00094 */ 00095 virtual void SetOrbitObject(Orbit *_pOrbitObject); 00096 00097 protected: 00098 /*! \brief Propagate the orbit through a specified time 00099 * @param _propTime vector of values specifying beginning, ending times of propagation as well as time step [initialTime, timeStep, finalTime] (s) 00100 * @param _initConditions Vector of initial conditions of the orbit propagation. 00101 * @return Matrix of integrated times and states as returned by the orbit dynamics equation 00102 */ 00103 virtual Matrix PropagateOrbit(const vector<ssfTime> &_propTime, const Vector &_initConditions); 00104 00105 /*! \brief Propagate the attitude through a specified time 00106 * @param _propTime Vector of values specifying beginning, ending times of propagation as well as time step [initialTime, timeStep, finalTime] (s) 00107 * @param _initConditions Vector of initial conditions of the attitude propagation. 00108 * @return Matrix of integrated times and states as returned by the attitude dynamics equation 00109 */ 00110 virtual Matrix PropagateAttitude(const vector<ssfTime> &_propTime, const Vector &_initConditions); 00111 00112 protected: 00113 /*! \brief Default Constructor */ 00114 Propagator(); 00115 00116 /*! Pointer to the Orbit Representation being propagated */ 00117 Orbit *m_pOrbitObject; 00118 /*! Pointer to the Attitude Representation being propagated */ 00119 Attitude *m_pAttitudeObject; 00120 00121 /*! Collection of calculated orbit state mesh points */ 00122 OrbitHistory m_OrbitStateMeshPoints; 00123 /*! Collection of calculated attitude state mesh points */ 00124 AttitudeHistory m_AttitudeStateMeshPoints; 00125 00126 }; 00127 // end of Propagator 00128 } 00129 #endif 00130 /***************************************************************************** 00131 * $Log: Propagator.h,v $ 00132 * Revision 1.2 2005/06/10 12:53:28 jayhawk_hokie 00133 * Changed header file format to make it easier to link to the spacecraft code by only having to specify dsacss/dep/spacecraft/src (ex. "file.h" changed to <dir/file.h> where dir is a folder in src). 00134 * 00135 * Revision 1.1.1.1 2005/04/26 17:40:56 cakinli 00136 * Adding OpenSESSAME to DSACSS distrib to capture fixed version. 00137 * 00138 * Revision 1.11 2003/10/18 21:37:27 rsharo 00139 * Removed "../utils" from all qmake project paths. Prepended "utils 00140 * /" to all #include directives for utils. Removed ".h" extensions from STL header 00141 * s and referenced STL components from "std::" namespace. Overall, changed to be 00142 * more portable. 00143 * 00144 * Revision 1.10 2003/06/10 02:24:04 nilspace 00145 * Updated moving of StateConversion functions to Attitude and Orbit. 00146 * 00147 * Revision 1.9 2003/05/22 15:09:46 nilspace 00148 * Updated documentation. 00149 * 00150 * Revision 1.8 2003/05/20 17:55:35 nilspace 00151 * Updated comments, also now use derived CombinedNumericProp. 00152 * 00153 * Revision 1.7 2003/05/13 18:52:45 nilspace 00154 * Fixed comments. Passed in initial conditions to propagate functions. 00155 * 00156 * Revision 1.6 2003/04/27 22:04:33 nilspace 00157 * Created the namespace O_SESSAME. 00158 * 00159 * Revision 1.5 2003/04/25 18:23:43 nilspace 00160 * Added implementation of ~Propagator() 00161 * 00162 * Revision 1.4 2003/04/25 13:43:52 nilspace 00163 * Updated to actually work. Still needs verification. 00164 * 00165 * Revision 1.3 2003/04/23 16:30:58 nilspace 00166 * Various bugfixes & uploading of all changed code for new programmers. 00167 * 00168 * Revision 1.2 2003/04/08 22:50:28 nilspace 00169 * Updated to derive classes based on numeric or analytical nature. 00170 * 00171 * Revision 1.1 2003/03/27 02:49:20 nilspace 00172 * Initial submission 00173 * 00174 ******************************************************************************/