00001 #pragma ident "$Id: SolarRadiationPressure.hpp 2457 2010-08-18 14:20:12Z coandrei $"
00002
00009 #ifndef GPSTK_SOLAR_RADIATION_PRESSURE_HPP
00010 #define GPSTK_SOLAR_RADIATION_PRESSURE_HPP
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035 #include "ForceModel.hpp"
00036
00037
00038 namespace gpstk
00039 {
00042
00048 class SolarRadiationPressure : public ForceModel
00049 {
00050 public:
00051 enum ShadowModel
00052 {
00053 SM_CYLINDRICAL,
00054 SM_CONICAL
00055 };
00056
00057 public:
00059 SolarRadiationPressure() {}
00060
00062 virtual ~SolarRadiationPressure() {}
00063
00064
00072 double getShadowFunction(Vector<double> r,
00073 Vector<double> r_Sun,
00074 Vector<double> r_Moon,
00075 SolarRadiationPressure::ShadowModel sm = SM_CONICAL);
00076
00077
00078 virtual void doCompute(UTCTime t, EarthBody& bRef, Spacecraft& sc);
00079
00081 virtual std::string modelName() const
00082 { return "SolarRadiationPressure"; }
00083
00085 virtual int forceIndex() const
00086 { return FMI_SRP; }
00087
00093 Vector<double> accelSRP(Vector<double> r, Vector<double> r_Sun);
00094
00095
00102 double partial_illumination(Vector<double> r, Vector<double> r_Sun );
00103
00104
00105 protected:
00106
00107
00108
00110 double crossArea;
00111 double srpArea;
00112
00114 double dryMass;
00115
00117 double reflectCoeff;
00118
00120 Vector<double> dadcr;
00121
00122 };
00123
00124
00125
00126 }
00127
00128 #endif // GPSTK_SOLAR_RADIATION_PRESSURE_HPP
00129
00130