00001 #pragma ident "$Id: AtmosphericDrag.hpp 2457 2010-08-18 14:20:12Z coandrei $"
00002
00010 #ifndef GPSTK_ATMOSPHERIC_DRAG_HPP
00011 #define GPSTK_ATMOSPHERIC_DRAG_HPP
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036 #include "ForceModel.hpp"
00037 #include "ASConstant.hpp"
00038 #include "Spacecraft.hpp"
00039
00040 namespace gpstk
00041 {
00042
00045
00054 class AtmosphericDrag : public ForceModel
00055 {
00056 public:
00057
00059 AtmosphericDrag() : dailyF107(150.0), averageF107(150.0), dailyKp(3.0)
00060 {};
00061
00063 virtual ~AtmosphericDrag() {};
00064
00065
00072 virtual double computeDensity(UTCTime t, EarthBody& rb, Vector<double> r,Vector<double> v) = 0;
00073
00074
00076 virtual std::string modelName() const
00077 {return "AtmosphericDrag";}
00078
00080 virtual int forceIndex() const
00081 { return FMI_DRAG; }
00082
00084 virtual void doCompute(UTCTime utc, EarthBody& rb, Spacecraft& sc);
00085
00086 virtual void setSpaceData(double dayF107,double aveF107, double dayKp)
00087 { dailyF107 = dayF107; averageF107 = aveF107; dailyKp = dayKp; }
00088
00089
00090 protected:
00091 double dailyF107;
00092 double averageF107;
00093 double dailyKp;
00094
00096 Vector<double> dadcd;
00097
00098
00099 enum CiraSize{ CIRA_SIZE = 24 };
00100
00102 static const double rho_0[CIRA_SIZE];
00103 static const double H[CIRA_SIZE];
00104 static const double h0[CIRA_SIZE];
00105
00106 };
00107
00108
00109
00110 }
00111
00112 #endif // GPSTK_ATMOSPHERIC_DRAG_HPP
00113