/[PAMELA software]/YodaProfiler/inc/sgp4.h
ViewVC logotype

Diff of /YodaProfiler/inc/sgp4.h

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1.2 by mocchiut, Tue Oct 31 15:58:04 2006 UTC revision 1.3 by mocchiut, Tue Jan 23 17:04:09 2007 UTC
# Line 377  protected: Line 377  protected:
377     cJulian  m_date;     cJulian  m_date;
378     VecUnits m_VecUnits;     VecUnits m_VecUnits;
379  };  };
380    //
381    // cNoradBase.h
382    //
383    // This class provides a base class for the NORAD SGP4/SDP4
384    // orbit models.
385    //
386    // Copyright (c) 2003 Michael F. Henry
387    //
388    #pragma once
389    
390    //////////////////////////////////////////////////////////////////////////////
391    
392    class cEci;
393    class cOrbit;
394    
395    //////////////////////////////////////////////////////////////////////////////
396    
397    class cNoradBase
398    {
399    public:
400       cNoradBase(const cOrbit&);
401       virtual ~cNoradBase() {};
402    
403       virtual bool getPosition(double tsince, cEci &eci) = 0;
404    
405    protected:
406       cNoradBase& operator=(const cNoradBase&);
407    
408       void Initialize();
409       bool FinalPosition(double  incl, double omega,  double     e,  
410                          double     a, double    xl,  double xnode,
411                          double    xn, double tsince, cEci &eci);
412    
413       const cOrbit &m_Orbit;
414    
415       // Orbital parameter variables which need only be calculated one
416       // time for a given orbit (ECI position time-independent).
417       double m_satInc;  // inclination
418       double m_satEcc;  // eccentricity
419    
420       double m_cosio;   double m_theta2;  double m_x3thm1;  double m_eosq;  
421       double m_betao2;  double m_betao;   double m_aodp;    double m_xnodp;
422       double m_s4;      double m_qoms24;  double m_perigee; double m_tsi;
423       double m_eta;     double m_etasq;   double m_eeta;    double m_coef;
424       double m_coef1;   double m_c1;      double m_c2;      double m_c3;
425       double m_c4;      double m_sinio;   double m_a3ovk2;  double m_x1mth2;
426       double m_xmdot;   double m_omgdot;  double m_xhdot1;  double m_xnodot;
427       double m_xnodcf;  double m_t2cof;   double m_xlcof;   double m_aycof;
428       double m_x7thm1;
429    };
430    //
431    // cOrbit.h
432    //
433    // This is the header file for the class cOrbit. This class accepts a
434    // single satellite's NORAD two-line element set and provides information
435    // regarding the satellite's orbit such as period, axis length,
436    // ECI coordinates/velocity, etc., using the SGP4/SDP4 orbital models.
437    //
438    // Copyright (c) 2002-2003 Michael F. Henry
439    //
440    #pragma once
441    
442    #include "math.h"
443    
444    using namespace std;
445    //////////////////////////////////////////////////////////////////////////////
446    
447    class cVector;
448    class cGeoCoord;
449    class cEci;
450    
451    //////////////////////////////////////////////////////////////////////////////
452    class cOrbit  
453    {
454    public:
455       cOrbit(const cTle &tle);
456       virtual ~cOrbit();
457    
458       // Return satellite ECI data at given minutes since element's epoch.
459       bool getPosition(double tsince, cEci *pEci) const;
460      
461       double Inclination()  const { return radGet(cTle::FLD_I);                 }
462       double Eccentricity() const { return m_tle.getField(cTle::FLD_E);         }
463       double RAAN()         const { return radGet(cTle::FLD_RAAN);              }
464       double ArgPerigee()   const { return radGet(cTle::FLD_ARGPER);            }
465       double BStar()        const { return m_tle.getField(cTle::FLD_BSTAR) / AE;}
466       double Drag()         const { return m_tle.getField(cTle::FLD_MMOTIONDT); }
467       double mnMotion()     const { return m_tle.getField(cTle::FLD_MMOTION);   }
468       double mnAnomaly()    const { return radGet(cTle::FLD_M);                 }
469       double mnAnomaly(cJulian t) const;  // mean anomaly (in radians) at time t
470    
471       cJulian Epoch() const { return m_jdEpoch; }
472    
473       double TPlusEpoch(const cJulian &t) const;    // time span [t - epoch] in secs
474    
475       string SatName(bool fAppendId = false) const;
476      
477       // "Recovered" from the input elements
478       double SemiMajor()   const { return m_aeAxisSemiMajorRec; }
479       double SemiMinor()   const { return m_aeAxisSemiMinorRec; }
480       double mnMotionRec() const { return m_mnMotionRec; }  // mn motion, rads/min
481       double Major()   const { return 2.0 * SemiMajor(); }  // major axis in AE
482       double Minor()   const { return 2.0 * SemiMinor(); }  // minor axis in AE
483       double Perigee() const { return m_kmPerigeeRec;    }  // perigee in km
484       double Apogee()  const { return m_kmApogeeRec;     }  // apogee in km
485       double Period()  const;                               // period in seconds
486    
487    protected:
488       double radGet(cTle::eField fld) const
489          { return m_tle.getField(fld, cTle::U_RAD); }
490    
491       double degGet(cTle::eField fld) const
492          { return m_tle.getField(fld, cTle::U_DEG); }
493    
494    private:
495       cTle        m_tle;
496       cJulian     m_jdEpoch;
497       cNoradBase *m_pNoradModel;
498    
499       // Caching variables; note units are not necessarily the same as tle units
500       mutable double m_secPeriod;
501    
502       // Caching variables recovered from the input TLE elements
503       double m_aeAxisSemiMinorRec;  // semi-minor axis, in AE units
504       double m_aeAxisSemiMajorRec;  // semi-major axis, in AE units
505       double m_mnMotionRec;         // radians per minute
506       double m_kmPerigeeRec;        // perigee, in km
507       double m_kmApogeeRec;         // apogee, in km
508    };
509    
510    //
511    // cNoradSGP4.h
512    //
513    // This class implements the NORAD Simple General Perturbation 4 orbit
514    // model. This model provides the ECI coordiantes/velocity of satellites
515    // with orbit periods less than 225 minutes.
516    //
517    // Copyright (c) 2003 Michael F. Henry
518    //
519    #pragma once
520    
521    class cOrbit;
522    
523    //////////////////////////////////////////////////////////////////////////////
524    class cNoradSGP4 : public cNoradBase
525    {
526    public:
527       cNoradSGP4(const cOrbit &orbit);
528       virtual ~cNoradSGP4() {};
529    
530       virtual bool getPosition(double tsince, cEci &eci);
531    
532    protected:
533       double m_c5;
534       double m_omgcof;
535       double m_xmcof;
536       double m_delmo;
537       double m_sinmo;
538    };
539    
540    //
541    // cNoradSDP4.h
542    //
543    // This class implements the NORAD Simple Deep Perturbation 4 orbit
544    // model. This model provides the ECI coordinates/velocity of satellites
545    // with periods >= 225 minutes.
546    //
547    // Copyright (c) 2003 Michael F. Henry
548    //
549    #pragma once
550    
551    class cOrbit;
552    
553    //////////////////////////////////////////////////////////////////////////////
554    class cNoradSDP4 : public cNoradBase
555    {
556    public:
557       cNoradSDP4(const cOrbit &orbit);
558       virtual ~cNoradSDP4() {};
559    
560       virtual bool getPosition(double tsince, cEci &eci);
561    
562    protected:
563       bool DeepInit(double *eosq,    double *sinio,    double *cosio,  double *m_betao,
564                     double *m_aodp,  double *m_theta2, double *m_sing, double *m_cosg,
565                     double *m_betao2,double *xmdot,    double *omgdot, double *xnodott);
566    
567       bool DeepSecular(double *xmdf,  double *omgadf,double *xnode, double *emm,
568                        double *xincc, double *xnn,   double *tsince);
569       bool DeepCalcDotTerms  (double *pxndot, double *pxnddt, double *pxldot);
570       void DeepCalcIntegrator(double *pxndot, double *pxnddt, double *pxldot,
571                               const double &delt);
572       bool DeepPeriodics(double *e,     double *xincc,  double *omgadf,
573                          double *xnode, double *xmam);
574       double m_sing;
575       double m_cosg;
576    
577       // Deep Initialization
578       double eqsq;   double siniq;  double cosiq;  double rteqsq; double ao;  
579       double cosq2;  double sinomo; double cosomo; double bsq;    double xlldot;
580       double omgdt;  double xnodot;
581      
582       // Deep Secular, Periodic
583       double xll;    double omgasm; double xnodes; double _em;    
584       double xinc;   double xn;     double t;
585    
586       // Variables shared by "Deep" routines
587       double dp_e3;     double dp_ee2;    double dp_savtsn; double dp_se2;
588       double dp_se3;    double dp_sgh2;   double dp_sgh3;   double dp_sgh4;
589       double dp_sghs;   double dp_sh2;    double dp_sh3;    double dp_si2;
590       double dp_si3;    double dp_sl2;    double dp_sl3;    double dp_sl4;
591       double dp_xgh2;   double dp_xgh3;   double dp_xgh4;   double dp_xh2;
592       double dp_xh3;    double dp_xi2;    double dp_xi3;    double dp_xl2;
593       double dp_xl3;    double dp_xl4;    double dp_xqncl;  double dp_zmol;
594       double dp_zmos;
595    
596       double dp_atime;  double dp_d2201;  double dp_d2211;  double dp_d3210;
597       double dp_d3222;  double dp_d4410;  double dp_d4422;  double dp_d5220;
598       double dp_d5232;  double dp_d5421;  double dp_d5433;  double dp_del1;
599       double dp_del2;   double dp_del3;   double dp_fasx2;  double dp_fasx4;
600       double dp_fasx6;  double dp_omegaq; double dp_sse;    double dp_ssg;
601       double dp_ssh;    double dp_ssi;    double dp_ssl;    double dp_step2;
602       double dp_stepn;  double dp_stepp;  double dp_thgr;   double dp_xfact;
603       double dp_xlamo;  double dp_xli;    double dp_xni;
604    
605       bool dp_iresfl;
606       bool dp_isynfl;
607    
608       // DeepInit vars that change with epoch
609       double dpi_c;      double dpi_ctem;   double dpi_day;    double dpi_gam;
610       double dpi_stem;   double dpi_xnodce; double dpi_zcosgl; double dpi_zcoshl;
611       double dpi_zcosil; double dpi_zsingl; double dpi_zsinhl; double dpi_zsinil;
612       double dpi_zx;     double dpi_zy;
613    
614    };
615    
616  #endif  #endif

Legend:
Removed from v.1.2  
changed lines
  Added in v.1.3

  ViewVC Help
Powered by ViewVC 1.1.23