Completed
Push — master ( 637022...8149d9 )
by Yannick
55:10 queued 27:13
created
require/libs/Predict/Predict/SGPObs.php 3 patches
Doc Comments   +4 added lines patch added patch discarded remove patch
@@ -56,6 +56,10 @@
 block discarded – undo
56 56
     /* It is intended to be used to determine the ground track of */
57 57
     /* a satellite.  The calculations  assume the earth to be an  */
58 58
     /* oblate spheroid as defined in WGS '72.                     */
59
+
60
+    /**
61
+     * @param double $_time
62
+     */
59 63
     public static function Calculate_LatLonAlt($_time, Predict_Vector $pos,  Predict_Geodetic $geodetic)
60 64
     {
61 65
         /* Reference:  The 1992 Astronomical Almanac, page K12. */
Please login to merge, or discard this patch.
Indentation   +127 added lines, -127 removed lines patch added patch discarded remove patch
@@ -25,131 +25,131 @@
 block discarded – undo
25 25
  */
26 26
 class Predict_SGPObs
27 27
 {
28
-    /* Procedure Calculate_User_PosVel passes the user's geodetic position */
29
-    /* and the time of interest and returns the ECI position and velocity  */
30
-    /* of the observer. The velocity calculation assumes the geodetic      */
31
-    /* position is stationary relative to the earth's surface.             */
32
-    public static function Calculate_User_PosVel(
33
-        $_time, Predict_Geodetic $geodetic, Predict_Vector $obs_pos, Predict_Vector $obs_vel
34
-    )
35
-    {
36
-        /* Reference:  The 1992 Astronomical Almanac, page K11. */
37
-
38
-        $sinGeodeticLat = sin($geodetic->lat); /* Only run sin($geodetic->lat) once */
39
-
40
-        $geodetic->theta = Predict_Math::FMod2p(Predict_Time::ThetaG_JD($_time) + $geodetic->lon);/*LMST*/
41
-        $c = 1 / sqrt(1 + Predict::__f * (Predict::__f - 2) * $sinGeodeticLat * $sinGeodeticLat);
42
-        $sq = (1 - Predict::__f) * (1 - Predict::__f) * $c;
43
-        $achcp = (Predict::xkmper * $c + $geodetic->alt) * cos($geodetic->lat);
44
-        $obs_pos->x = $achcp * cos($geodetic->theta); /*kilometers*/
45
-        $obs_pos->y = $achcp * sin($geodetic->theta);
46
-        $obs_pos->z = (Predict::xkmper * $sq + $geodetic->alt) * $sinGeodeticLat;
47
-        $obs_vel->x = -Predict::mfactor * $obs_pos->y; /*kilometers/second*/
48
-        $obs_vel->y =  Predict::mfactor * $obs_pos->x;
49
-        $obs_vel->z =  0;
50
-        $obs_pos->w = sqrt($obs_pos->x * $obs_pos->x + $obs_pos->y * $obs_pos->y + $obs_pos->z * $obs_pos->z);
51
-        $obs_vel->w = sqrt($obs_vel->x * $obs_vel->x + $obs_vel->y * $obs_vel->y + $obs_vel->z * $obs_vel->z);
52
-    }
53
-
54
-    /* Procedure Calculate_LatLonAlt will calculate the geodetic  */
55
-    /* position of an object given its ECI position pos and time. */
56
-    /* It is intended to be used to determine the ground track of */
57
-    /* a satellite.  The calculations  assume the earth to be an  */
58
-    /* oblate spheroid as defined in WGS '72.                     */
59
-    public static function Calculate_LatLonAlt($_time, Predict_Vector $pos,  Predict_Geodetic $geodetic)
60
-    {
61
-        /* Reference:  The 1992 Astronomical Almanac, page K12. */
62
-
63
-        /* double r,e2,phi,c; */
64
-
65
-        $geodetic->theta = Predict_Math::AcTan($pos->y, $pos->x); /*radians*/
66
-        $geodetic->lon = Predict_Math::FMod2p($geodetic->theta - Predict_Time::ThetaG_JD($_time)); /*radians*/
67
-        $r = sqrt(($pos->x * $pos->x) + ($pos->y * $pos->y));
68
-        $e2 = Predict::__f * (2 - Predict::__f);
69
-        $geodetic->lat = Predict_Math::AcTan($pos->z, $r); /*radians*/
70
-
71
-        do {
72
-            $phi    = $geodetic->lat;
73
-            $sinPhi = sin($phi);
74
-            $c      = 1 / sqrt(1 - $e2 * ($sinPhi * $sinPhi));
75
-            $geodetic->lat = Predict_Math::AcTan($pos->z + Predict::xkmper * $c * $e2 * $sinPhi, $r);
76
-        } while (abs($geodetic->lat - $phi) >= 1E-10);
77
-
78
-        $geodetic->alt = $r / cos($geodetic->lat) - Predict::xkmper * $c;/*kilometers*/
79
-
80
-        if ($geodetic->lat > Predict::pio2) {
81
-            $geodetic->lat -= Predict::twopi;
82
-        }
83
-    }
84
-
85
-    /* The procedures Calculate_Obs and Calculate_RADec calculate         */
86
-    /* the *topocentric* coordinates of the object with ECI position,     */
87
-    /* {pos}, and velocity, {vel}, from location {geodetic} at {time}.    */
88
-    /* The {obs_set} returned for Calculate_Obs consists of azimuth,      */
89
-    /* elevation, range, and range rate (in that order) with units of     */
90
-    /* radians, radians, kilometers, and kilometers/second, respectively. */
91
-    /* The WGS '72 geoid is used and the effect of atmospheric refraction */
92
-    /* (under standard temperature and pressure) is incorporated into the */
93
-    /* elevation calculation; the effect of atmospheric refraction on     */
94
-    /* range and range rate has not yet been quantified.                  */
95
-
96
-    /* The {obs_set} for Calculate_RADec consists of right ascension and  */
97
-    /* declination (in that order) in radians.  Again, calculations are   */
98
-    /* based on *topocentric* position using the WGS '72 geoid and        */
99
-    /* incorporating atmospheric refraction.                              */
100
-    public static function Calculate_Obs($_time, Predict_Vector $pos, Predict_Vector $vel, Predict_Geodetic $geodetic, Predict_ObsSet $obs_set)
101
-    {
102
-        $obs_pos = new Predict_Vector();
103
-        $obs_vel = new Predict_Vector();
104
-        $range   = new Predict_Vector();
105
-        $rgvel   = new Predict_Vector();
106
-
107
-        self::Calculate_User_PosVel($_time, $geodetic, $obs_pos, $obs_vel);
108
-
109
-        $range->x = $pos->x - $obs_pos->x;
110
-        $range->y = $pos->y - $obs_pos->y;
111
-        $range->z = $pos->z - $obs_pos->z;
112
-
113
-        $rgvel->x = $vel->x - $obs_vel->x;
114
-        $rgvel->y = $vel->y - $obs_vel->y;
115
-        $rgvel->z = $vel->z - $obs_vel->z;
116
-
117
-        $range->w = sqrt($range->x * $range->x + $range->y * $range->y + $range->z * $range->z);
118
-
119
-        $sin_lat   = sin($geodetic->lat);
120
-        $cos_lat   = cos($geodetic->lat);
121
-        $sin_theta = sin($geodetic->theta);
122
-        $cos_theta = cos($geodetic->theta);
123
-        $top_s = $sin_lat * $cos_theta * $range->x
124
-            + $sin_lat * $sin_theta * $range->y
125
-            - $cos_lat * $range->z;
126
-        $top_e = -$sin_theta * $range->x
127
-            + $cos_theta * $range->y;
128
-        $top_z = $cos_lat * $cos_theta * $range->x
129
-            + $cos_lat * $sin_theta * $range->y
130
-            + $sin_lat * $range->z;
131
-        $azim = atan(-$top_e / $top_s); /*Azimuth*/
132
-        if ($top_s > 0) {
133
-            $azim = $azim + Predict::pi;
134
-        }
135
-        if ($azim < 0 ) {
136
-            $azim = $azim + Predict::twopi;
137
-        }
138
-        $el = Predict_Math::ArcSin($top_z / $range->w);
139
-        $obs_set->az = $azim;        /* Azimuth (radians)  */
140
-        $obs_set->el = $el;          /* Elevation (radians)*/
141
-        $obs_set->range = $range->w; /* Range (kilometers) */
142
-
143
-        /* Range Rate (kilometers/second)*/
144
-        $obs_set->range_rate = Predict_Math::Dot($range, $rgvel) / $range->w;
145
-
146
-        /* Corrections for atmospheric refraction */
147
-        /* Reference:  Astronomical Algorithms by Jean Meeus, pp. 101-104    */
148
-        /* Correction is meaningless when apparent elevation is below horizon */
149
-        //	obs_set->el = obs_set->el + Radians((1.02/tan(Radians(Degrees(el)+
150
-        //							      10.3/(Degrees(el)+5.11))))/60);
151
-        if ($obs_set->el < 0) {
152
-            $obs_set->el = $el;  /*Reset to true elevation*/
153
-        }
154
-    }
28
+	/* Procedure Calculate_User_PosVel passes the user's geodetic position */
29
+	/* and the time of interest and returns the ECI position and velocity  */
30
+	/* of the observer. The velocity calculation assumes the geodetic      */
31
+	/* position is stationary relative to the earth's surface.             */
32
+	public static function Calculate_User_PosVel(
33
+		$_time, Predict_Geodetic $geodetic, Predict_Vector $obs_pos, Predict_Vector $obs_vel
34
+	)
35
+	{
36
+		/* Reference:  The 1992 Astronomical Almanac, page K11. */
37
+
38
+		$sinGeodeticLat = sin($geodetic->lat); /* Only run sin($geodetic->lat) once */
39
+
40
+		$geodetic->theta = Predict_Math::FMod2p(Predict_Time::ThetaG_JD($_time) + $geodetic->lon);/*LMST*/
41
+		$c = 1 / sqrt(1 + Predict::__f * (Predict::__f - 2) * $sinGeodeticLat * $sinGeodeticLat);
42
+		$sq = (1 - Predict::__f) * (1 - Predict::__f) * $c;
43
+		$achcp = (Predict::xkmper * $c + $geodetic->alt) * cos($geodetic->lat);
44
+		$obs_pos->x = $achcp * cos($geodetic->theta); /*kilometers*/
45
+		$obs_pos->y = $achcp * sin($geodetic->theta);
46
+		$obs_pos->z = (Predict::xkmper * $sq + $geodetic->alt) * $sinGeodeticLat;
47
+		$obs_vel->x = -Predict::mfactor * $obs_pos->y; /*kilometers/second*/
48
+		$obs_vel->y =  Predict::mfactor * $obs_pos->x;
49
+		$obs_vel->z =  0;
50
+		$obs_pos->w = sqrt($obs_pos->x * $obs_pos->x + $obs_pos->y * $obs_pos->y + $obs_pos->z * $obs_pos->z);
51
+		$obs_vel->w = sqrt($obs_vel->x * $obs_vel->x + $obs_vel->y * $obs_vel->y + $obs_vel->z * $obs_vel->z);
52
+	}
53
+
54
+	/* Procedure Calculate_LatLonAlt will calculate the geodetic  */
55
+	/* position of an object given its ECI position pos and time. */
56
+	/* It is intended to be used to determine the ground track of */
57
+	/* a satellite.  The calculations  assume the earth to be an  */
58
+	/* oblate spheroid as defined in WGS '72.                     */
59
+	public static function Calculate_LatLonAlt($_time, Predict_Vector $pos,  Predict_Geodetic $geodetic)
60
+	{
61
+		/* Reference:  The 1992 Astronomical Almanac, page K12. */
62
+
63
+		/* double r,e2,phi,c; */
64
+
65
+		$geodetic->theta = Predict_Math::AcTan($pos->y, $pos->x); /*radians*/
66
+		$geodetic->lon = Predict_Math::FMod2p($geodetic->theta - Predict_Time::ThetaG_JD($_time)); /*radians*/
67
+		$r = sqrt(($pos->x * $pos->x) + ($pos->y * $pos->y));
68
+		$e2 = Predict::__f * (2 - Predict::__f);
69
+		$geodetic->lat = Predict_Math::AcTan($pos->z, $r); /*radians*/
70
+
71
+		do {
72
+			$phi    = $geodetic->lat;
73
+			$sinPhi = sin($phi);
74
+			$c      = 1 / sqrt(1 - $e2 * ($sinPhi * $sinPhi));
75
+			$geodetic->lat = Predict_Math::AcTan($pos->z + Predict::xkmper * $c * $e2 * $sinPhi, $r);
76
+		} while (abs($geodetic->lat - $phi) >= 1E-10);
77
+
78
+		$geodetic->alt = $r / cos($geodetic->lat) - Predict::xkmper * $c;/*kilometers*/
79
+
80
+		if ($geodetic->lat > Predict::pio2) {
81
+			$geodetic->lat -= Predict::twopi;
82
+		}
83
+	}
84
+
85
+	/* The procedures Calculate_Obs and Calculate_RADec calculate         */
86
+	/* the *topocentric* coordinates of the object with ECI position,     */
87
+	/* {pos}, and velocity, {vel}, from location {geodetic} at {time}.    */
88
+	/* The {obs_set} returned for Calculate_Obs consists of azimuth,      */
89
+	/* elevation, range, and range rate (in that order) with units of     */
90
+	/* radians, radians, kilometers, and kilometers/second, respectively. */
91
+	/* The WGS '72 geoid is used and the effect of atmospheric refraction */
92
+	/* (under standard temperature and pressure) is incorporated into the */
93
+	/* elevation calculation; the effect of atmospheric refraction on     */
94
+	/* range and range rate has not yet been quantified.                  */
95
+
96
+	/* The {obs_set} for Calculate_RADec consists of right ascension and  */
97
+	/* declination (in that order) in radians.  Again, calculations are   */
98
+	/* based on *topocentric* position using the WGS '72 geoid and        */
99
+	/* incorporating atmospheric refraction.                              */
100
+	public static function Calculate_Obs($_time, Predict_Vector $pos, Predict_Vector $vel, Predict_Geodetic $geodetic, Predict_ObsSet $obs_set)
101
+	{
102
+		$obs_pos = new Predict_Vector();
103
+		$obs_vel = new Predict_Vector();
104
+		$range   = new Predict_Vector();
105
+		$rgvel   = new Predict_Vector();
106
+
107
+		self::Calculate_User_PosVel($_time, $geodetic, $obs_pos, $obs_vel);
108
+
109
+		$range->x = $pos->x - $obs_pos->x;
110
+		$range->y = $pos->y - $obs_pos->y;
111
+		$range->z = $pos->z - $obs_pos->z;
112
+
113
+		$rgvel->x = $vel->x - $obs_vel->x;
114
+		$rgvel->y = $vel->y - $obs_vel->y;
115
+		$rgvel->z = $vel->z - $obs_vel->z;
116
+
117
+		$range->w = sqrt($range->x * $range->x + $range->y * $range->y + $range->z * $range->z);
118
+
119
+		$sin_lat   = sin($geodetic->lat);
120
+		$cos_lat   = cos($geodetic->lat);
121
+		$sin_theta = sin($geodetic->theta);
122
+		$cos_theta = cos($geodetic->theta);
123
+		$top_s = $sin_lat * $cos_theta * $range->x
124
+			+ $sin_lat * $sin_theta * $range->y
125
+			- $cos_lat * $range->z;
126
+		$top_e = -$sin_theta * $range->x
127
+			+ $cos_theta * $range->y;
128
+		$top_z = $cos_lat * $cos_theta * $range->x
129
+			+ $cos_lat * $sin_theta * $range->y
130
+			+ $sin_lat * $range->z;
131
+		$azim = atan(-$top_e / $top_s); /*Azimuth*/
132
+		if ($top_s > 0) {
133
+			$azim = $azim + Predict::pi;
134
+		}
135
+		if ($azim < 0 ) {
136
+			$azim = $azim + Predict::twopi;
137
+		}
138
+		$el = Predict_Math::ArcSin($top_z / $range->w);
139
+		$obs_set->az = $azim;        /* Azimuth (radians)  */
140
+		$obs_set->el = $el;          /* Elevation (radians)*/
141
+		$obs_set->range = $range->w; /* Range (kilometers) */
142
+
143
+		/* Range Rate (kilometers/second)*/
144
+		$obs_set->range_rate = Predict_Math::Dot($range, $rgvel) / $range->w;
145
+
146
+		/* Corrections for atmospheric refraction */
147
+		/* Reference:  Astronomical Algorithms by Jean Meeus, pp. 101-104    */
148
+		/* Correction is meaningless when apparent elevation is below horizon */
149
+		//	obs_set->el = obs_set->el + Radians((1.02/tan(Radians(Degrees(el)+
150
+		//							      10.3/(Degrees(el)+5.11))))/60);
151
+		if ($obs_set->el < 0) {
152
+			$obs_set->el = $el;  /*Reset to true elevation*/
153
+		}
154
+	}
155 155
 }
Please login to merge, or discard this patch.
Spacing   +34 added lines, -34 removed lines patch added patch discarded remove patch
@@ -37,18 +37,18 @@  discard block
 block discarded – undo
37 37
 
38 38
         $sinGeodeticLat = sin($geodetic->lat); /* Only run sin($geodetic->lat) once */
39 39
 
40
-        $geodetic->theta = Predict_Math::FMod2p(Predict_Time::ThetaG_JD($_time) + $geodetic->lon);/*LMST*/
41
-        $c = 1 / sqrt(1 + Predict::__f * (Predict::__f - 2) * $sinGeodeticLat * $sinGeodeticLat);
42
-        $sq = (1 - Predict::__f) * (1 - Predict::__f) * $c;
43
-        $achcp = (Predict::xkmper * $c + $geodetic->alt) * cos($geodetic->lat);
44
-        $obs_pos->x = $achcp * cos($geodetic->theta); /*kilometers*/
45
-        $obs_pos->y = $achcp * sin($geodetic->theta);
46
-        $obs_pos->z = (Predict::xkmper * $sq + $geodetic->alt) * $sinGeodeticLat;
47
-        $obs_vel->x = -Predict::mfactor * $obs_pos->y; /*kilometers/second*/
48
-        $obs_vel->y =  Predict::mfactor * $obs_pos->x;
49
-        $obs_vel->z =  0;
50
-        $obs_pos->w = sqrt($obs_pos->x * $obs_pos->x + $obs_pos->y * $obs_pos->y + $obs_pos->z * $obs_pos->z);
51
-        $obs_vel->w = sqrt($obs_vel->x * $obs_vel->x + $obs_vel->y * $obs_vel->y + $obs_vel->z * $obs_vel->z);
40
+        $geodetic->theta = Predict_Math::FMod2p(Predict_Time::ThetaG_JD($_time) + $geodetic->lon); /*LMST*/
41
+        $c = 1/sqrt(1 + Predict::__f*(Predict::__f - 2)*$sinGeodeticLat*$sinGeodeticLat);
42
+        $sq = (1 - Predict::__f)*(1 - Predict::__f)*$c;
43
+        $achcp = (Predict::xkmper*$c + $geodetic->alt)*cos($geodetic->lat);
44
+        $obs_pos->x = $achcp*cos($geodetic->theta); /*kilometers*/
45
+        $obs_pos->y = $achcp*sin($geodetic->theta);
46
+        $obs_pos->z = (Predict::xkmper*$sq + $geodetic->alt)*$sinGeodeticLat;
47
+        $obs_vel->x = -Predict::mfactor*$obs_pos->y; /*kilometers/second*/
48
+        $obs_vel->y = Predict::mfactor*$obs_pos->x;
49
+        $obs_vel->z = 0;
50
+        $obs_pos->w = sqrt($obs_pos->x*$obs_pos->x + $obs_pos->y*$obs_pos->y + $obs_pos->z*$obs_pos->z);
51
+        $obs_vel->w = sqrt($obs_vel->x*$obs_vel->x + $obs_vel->y*$obs_vel->y + $obs_vel->z*$obs_vel->z);
52 52
     }
53 53
 
54 54
     /* Procedure Calculate_LatLonAlt will calculate the geodetic  */
@@ -56,7 +56,7 @@  discard block
 block discarded – undo
56 56
     /* It is intended to be used to determine the ground track of */
57 57
     /* a satellite.  The calculations  assume the earth to be an  */
58 58
     /* oblate spheroid as defined in WGS '72.                     */
59
-    public static function Calculate_LatLonAlt($_time, Predict_Vector $pos,  Predict_Geodetic $geodetic)
59
+    public static function Calculate_LatLonAlt($_time, Predict_Vector $pos, Predict_Geodetic $geodetic)
60 60
     {
61 61
         /* Reference:  The 1992 Astronomical Almanac, page K12. */
62 62
 
@@ -64,18 +64,18 @@  discard block
 block discarded – undo
64 64
 
65 65
         $geodetic->theta = Predict_Math::AcTan($pos->y, $pos->x); /*radians*/
66 66
         $geodetic->lon = Predict_Math::FMod2p($geodetic->theta - Predict_Time::ThetaG_JD($_time)); /*radians*/
67
-        $r = sqrt(($pos->x * $pos->x) + ($pos->y * $pos->y));
68
-        $e2 = Predict::__f * (2 - Predict::__f);
67
+        $r = sqrt(($pos->x*$pos->x) + ($pos->y*$pos->y));
68
+        $e2 = Predict::__f*(2 - Predict::__f);
69 69
         $geodetic->lat = Predict_Math::AcTan($pos->z, $r); /*radians*/
70 70
 
71 71
         do {
72 72
             $phi    = $geodetic->lat;
73 73
             $sinPhi = sin($phi);
74
-            $c      = 1 / sqrt(1 - $e2 * ($sinPhi * $sinPhi));
75
-            $geodetic->lat = Predict_Math::AcTan($pos->z + Predict::xkmper * $c * $e2 * $sinPhi, $r);
74
+            $c      = 1/sqrt(1 - $e2*($sinPhi*$sinPhi));
75
+            $geodetic->lat = Predict_Math::AcTan($pos->z + Predict::xkmper*$c*$e2*$sinPhi, $r);
76 76
         } while (abs($geodetic->lat - $phi) >= 1E-10);
77 77
 
78
-        $geodetic->alt = $r / cos($geodetic->lat) - Predict::xkmper * $c;/*kilometers*/
78
+        $geodetic->alt = $r/cos($geodetic->lat) - Predict::xkmper*$c; /*kilometers*/
79 79
 
80 80
         if ($geodetic->lat > Predict::pio2) {
81 81
             $geodetic->lat -= Predict::twopi;
@@ -114,34 +114,34 @@  discard block
 block discarded – undo
114 114
         $rgvel->y = $vel->y - $obs_vel->y;
115 115
         $rgvel->z = $vel->z - $obs_vel->z;
116 116
 
117
-        $range->w = sqrt($range->x * $range->x + $range->y * $range->y + $range->z * $range->z);
117
+        $range->w = sqrt($range->x*$range->x + $range->y*$range->y + $range->z*$range->z);
118 118
 
119 119
         $sin_lat   = sin($geodetic->lat);
120 120
         $cos_lat   = cos($geodetic->lat);
121 121
         $sin_theta = sin($geodetic->theta);
122 122
         $cos_theta = cos($geodetic->theta);
123
-        $top_s = $sin_lat * $cos_theta * $range->x
124
-            + $sin_lat * $sin_theta * $range->y
125
-            - $cos_lat * $range->z;
126
-        $top_e = -$sin_theta * $range->x
127
-            + $cos_theta * $range->y;
128
-        $top_z = $cos_lat * $cos_theta * $range->x
129
-            + $cos_lat * $sin_theta * $range->y
130
-            + $sin_lat * $range->z;
131
-        $azim = atan(-$top_e / $top_s); /*Azimuth*/
123
+        $top_s = $sin_lat*$cos_theta*$range->x
124
+            + $sin_lat*$sin_theta*$range->y
125
+            - $cos_lat*$range->z;
126
+        $top_e = -$sin_theta*$range->x
127
+            + $cos_theta*$range->y;
128
+        $top_z = $cos_lat*$cos_theta*$range->x
129
+            + $cos_lat*$sin_theta*$range->y
130
+            + $sin_lat*$range->z;
131
+        $azim = atan(-$top_e/$top_s); /*Azimuth*/
132 132
         if ($top_s > 0) {
133 133
             $azim = $azim + Predict::pi;
134 134
         }
135
-        if ($azim < 0 ) {
135
+        if ($azim < 0) {
136 136
             $azim = $azim + Predict::twopi;
137 137
         }
138
-        $el = Predict_Math::ArcSin($top_z / $range->w);
139
-        $obs_set->az = $azim;        /* Azimuth (radians)  */
140
-        $obs_set->el = $el;          /* Elevation (radians)*/
138
+        $el = Predict_Math::ArcSin($top_z/$range->w);
139
+        $obs_set->az = $azim; /* Azimuth (radians)  */
140
+        $obs_set->el = $el; /* Elevation (radians)*/
141 141
         $obs_set->range = $range->w; /* Range (kilometers) */
142 142
 
143 143
         /* Range Rate (kilometers/second)*/
144
-        $obs_set->range_rate = Predict_Math::Dot($range, $rgvel) / $range->w;
144
+        $obs_set->range_rate = Predict_Math::Dot($range, $rgvel)/$range->w;
145 145
 
146 146
         /* Corrections for atmospheric refraction */
147 147
         /* Reference:  Astronomical Algorithms by Jean Meeus, pp. 101-104    */
@@ -149,7 +149,7 @@  discard block
 block discarded – undo
149 149
         //	obs_set->el = obs_set->el + Radians((1.02/tan(Radians(Degrees(el)+
150 150
         //							      10.3/(Degrees(el)+5.11))))/60);
151 151
         if ($obs_set->el < 0) {
152
-            $obs_set->el = $el;  /*Reset to true elevation*/
152
+            $obs_set->el = $el; /*Reset to true elevation*/
153 153
         }
154 154
     }
155 155
 }
Please login to merge, or discard this patch.
require/libs/Predict/Predict/SGPSDP.php 5 patches
Doc Comments   +12 added lines patch added patch discarded remove patch
@@ -67,6 +67,10 @@  discard block
 block discarded – undo
67 67
     /* structure with Keplerian orbital elements and pos and vel    */
68 68
     /* are vector_t structures returning ECI satellite position and */
69 69
     /* velocity. Use Convert_Sat_State() to convert to km and km/s.*/
70
+
71
+    /**
72
+     * @param double $tsince
73
+     */
70 74
     public function SGP4(Predict_Sat $sat, $tsince)
71 75
     {
72 76
         /* Initialization */
@@ -312,6 +316,10 @@  discard block
 block discarded – undo
312 316
     /* structure with Keplerian orbital elements and pos and vel    */
313 317
     /* are vector_t structures returning ECI satellite position and */
314 318
     /* velocity. Use Convert_Sat_State() to convert to km and km/s. */
319
+
320
+    /**
321
+     * @param double $tsince
322
+     */
315 323
     public function SDP4(Predict_Sat $sat, $tsince)
316 324
     {
317 325
         /* Initialization */
@@ -538,6 +546,10 @@  discard block
 block discarded – undo
538 546
     /* DEEP */
539 547
     /* This function is used by SDP4 to add lunar and solar */
540 548
     /* perturbation effects to deep-space orbit objects.    */
549
+
550
+    /**
551
+     * @param integer $ientry
552
+     */
541 553
     public function Deep($ientry, Predict_Sat $sat)
542 554
     {
543 555
         switch ($ientry) {
Please login to merge, or discard this patch.
Indentation   +1031 added lines, -1031 removed lines patch added patch discarded remove patch
@@ -23,1037 +23,1037 @@
 block discarded – undo
23 23
  */
24 24
 class Predict_SGPSDP
25 25
 {
26
-    const ALL_FLAGS             = -1;
27
-    const SGP_INITIALIZED_FLAG  = 0x000001;
28
-    const SGP4_INITIALIZED_FLAG = 0x000002;
29
-    const SDP4_INITIALIZED_FLAG = 0x000004;
30
-    const SGP8_INITIALIZED_FLAG = 0x000008;
31
-    const SDP8_INITIALIZED_FLAG = 0x000010;
32
-    const SIMPLE_FLAG           = 0x000020;
33
-    const DEEP_SPACE_EPHEM_FLAG = 0x000040;
34
-    const LUNAR_TERMS_DONE_FLAG = 0x000080;
35
-    const NEW_EPHEMERIS_FLAG    = 0x000100;
36
-    const DO_LOOP_FLAG          = 0x000200;
37
-    const RESONANCE_FLAG        = 0x000400;
38
-    const SYNCHRONOUS_FLAG      = 0x000800;
39
-    const EPOCH_RESTART_FLAG    = 0x001000;
40
-    const VISIBLE_FLAG          = 0x002000;
41
-    const SAT_ECLIPSED_FLAG     = 0x004000;
42
-
43
-    /* orbit_type_t struct */
44
-    const ORBIT_TYPE_UNKNOWN = 0;
45
-    const ORBIT_TYPE_LEO     = 1;            /*!< Low Earth orbit, up to 1200 km. */
46
-    const ORBIT_TYPE_ICO     = 2;            /*!< Intermediate Circular Orbit, up to 1400 km. */
47
-    const ORBIT_TYPE_GEO     = 3;            /*!< Geostationary. */
48
-    const ORBIT_TYPE_GSO     = 4;            /*!< Geosynchronuous. */
49
-    const ORBIT_TYPE_MOLNIYA = 5;
50
-    const ORBIT_TYPE_TUNDRA  = 6;
51
-    const ORBIT_TYPE_POLAR   = 7;
52
-    const ORBIT_TYPE_SUNSYNC = 8;
53
-    const ORBIT_TYPE_DECAYED = 9;
54
-
55
-
56
-
57
-    /* Entry points of Deep()
26
+	const ALL_FLAGS             = -1;
27
+	const SGP_INITIALIZED_FLAG  = 0x000001;
28
+	const SGP4_INITIALIZED_FLAG = 0x000002;
29
+	const SDP4_INITIALIZED_FLAG = 0x000004;
30
+	const SGP8_INITIALIZED_FLAG = 0x000008;
31
+	const SDP8_INITIALIZED_FLAG = 0x000010;
32
+	const SIMPLE_FLAG           = 0x000020;
33
+	const DEEP_SPACE_EPHEM_FLAG = 0x000040;
34
+	const LUNAR_TERMS_DONE_FLAG = 0x000080;
35
+	const NEW_EPHEMERIS_FLAG    = 0x000100;
36
+	const DO_LOOP_FLAG          = 0x000200;
37
+	const RESONANCE_FLAG        = 0x000400;
38
+	const SYNCHRONOUS_FLAG      = 0x000800;
39
+	const EPOCH_RESTART_FLAG    = 0x001000;
40
+	const VISIBLE_FLAG          = 0x002000;
41
+	const SAT_ECLIPSED_FLAG     = 0x004000;
42
+
43
+	/* orbit_type_t struct */
44
+	const ORBIT_TYPE_UNKNOWN = 0;
45
+	const ORBIT_TYPE_LEO     = 1;            /*!< Low Earth orbit, up to 1200 km. */
46
+	const ORBIT_TYPE_ICO     = 2;            /*!< Intermediate Circular Orbit, up to 1400 km. */
47
+	const ORBIT_TYPE_GEO     = 3;            /*!< Geostationary. */
48
+	const ORBIT_TYPE_GSO     = 4;            /*!< Geosynchronuous. */
49
+	const ORBIT_TYPE_MOLNIYA = 5;
50
+	const ORBIT_TYPE_TUNDRA  = 6;
51
+	const ORBIT_TYPE_POLAR   = 7;
52
+	const ORBIT_TYPE_SUNSYNC = 8;
53
+	const ORBIT_TYPE_DECAYED = 9;
54
+
55
+
56
+
57
+	/* Entry points of Deep()
58 58
     // FIXME: Change to enu */
59
-    const dpinit = 1; /* Deep-space initialization code */
60
-    const dpsec  = 2; /* Deep-space secular code        */
61
-    const dpper  = 3; /* Deep-space periodic code       */
62
-
63
-    /* SGP4 */
64
-    /* This function is used to calculate the position and velocity */
65
-    /* of near-earth (period < 225 minutes) satellites. tsince is   */
66
-    /* time since epoch in minutes, tle is a pointer to a tle_t     */
67
-    /* structure with Keplerian orbital elements and pos and vel    */
68
-    /* are vector_t structures returning ECI satellite position and */
69
-    /* velocity. Use Convert_Sat_State() to convert to km and km/s.*/
70
-    public function SGP4(Predict_Sat $sat, $tsince)
71
-    {
72
-        /* Initialization */
73
-        if (~$sat->flags & self::SGP4_INITIALIZED_FLAG) {
74
-            $sat->flags |= self::SGP4_INITIALIZED_FLAG;
75
-
76
-            /* Recover original mean motion (xnodp) and   */
77
-            /* semimajor axis (aodp) from input elements. */
78
-            $a1 = pow(Predict::xke / $sat->tle->xno, Predict::tothrd);
79
-            $sat->sgps->cosio = cos($sat->tle->xincl);
80
-            $theta2 = $sat->sgps->cosio * $sat->sgps->cosio;
81
-            $sat->sgps->x3thm1 = 3 * $theta2 - 1.0;
82
-            $eosq = $sat->tle->eo * $sat->tle->eo;
83
-            $betao2 = 1 - $eosq;
84
-            $betao = sqrt($betao2);
85
-            $del1 = 1.5 * Predict::ck2 * $sat->sgps->x3thm1 / ($a1 * $a1 * $betao * $betao2);
86
-            $ao = $a1 * (1 - $del1 * (0.5 * Predict::tothrd + $del1 * (1 + 134.0 / 81.0 * $del1)));
87
-            $delo = 1.5 * Predict::ck2 * $sat->sgps->x3thm1 / ($ao * $ao * $betao * $betao2);
88
-            $sat->sgps->xnodp = $sat->tle->xno / (1.0 + $delo);
89
-            $sat->sgps->aodp = $ao / (1.0 - $delo);
90
-
91
-            /* For perigee less than 220 kilometers, the "simple" flag is set */
92
-            /* and the equations are truncated to linear variation in sqrt a  */
93
-            /* and quadratic variation in mean anomaly.  Also, the c3 term,   */
94
-            /* the delta omega term, and the delta m term are dropped.        */
95
-            if (($sat->sgps->aodp * (1.0 - $sat->tle->eo) / Predict::ae) < (220.0 / Predict::xkmper + Predict::ae)) {
96
-                $sat->flags |= self::SIMPLE_FLAG;
97
-            } else {
98
-                $sat->flags &= ~self::SIMPLE_FLAG;
99
-            }
100
-
101
-            /* For perigee below 156 km, the       */
102
-            /* values of s and qoms2t are altered. */
103
-            $s4 = Predict::__s__;
104
-            $qoms24 = Predict::qoms2t;
105
-            $perige = ($sat->sgps->aodp * (1 - $sat->tle->eo) - Predict::ae) * Predict::xkmper;
106
-            if ($perige < 156.0) {
107
-                if ($perige <= 98.0) {
108
-                    $s4 = 20.0;
109
-                } else {
110
-                    $s4 = $perige - 78.0;
111
-                }
112
-                $qoms24 = pow((120.0 - $s4) * Predict::ae / Predict::xkmper, 4);
113
-                $s4 = $s4 / Predict::xkmper + Predict::ae;
114
-            }; /* FIXME FIXME: End of if(perige <= 98) NO WAY!!!! */
115
-
116
-            $pinvsq = 1.0 / ($sat->sgps->aodp * $sat->sgps->aodp * $betao2 * $betao2);
117
-            $tsi = 1.0 / ($sat->sgps->aodp - $s4);
118
-            $sat->sgps->eta = $sat->sgps->aodp * $sat->tle->eo * $tsi;
119
-            $etasq = $sat->sgps->eta * $sat->sgps->eta;
120
-            $eeta = $sat->tle->eo * $sat->sgps->eta;
121
-            $psisq = abs(1.0 - $etasq);
122
-            $coef = $qoms24 * pow($tsi, 4);
123
-            $coef1 = $coef / pow($psisq, 3.5);
124
-            $c2 = $coef1 * $sat->sgps->xnodp * ($sat->sgps->aodp *
125
-                            (1.0 + 1.5 * $etasq + $eeta * (4.0 + $etasq)) +
126
-                            0.75 * Predict::ck2 * $tsi / $psisq * $sat->sgps->x3thm1 *
127
-                            (8.0 + 3.0 * $etasq * (8 + $etasq)));
128
-            $sat->sgps->c1 = $c2 * $sat->tle->bstar;
129
-            $sat->sgps->sinio = sin($sat->tle->xincl);
130
-            $a3ovk2 = -Predict::xj3 / Predict::ck2 * pow(Predict::ae, 3);
131
-            $c3 = $coef * $tsi * $a3ovk2 * $sat->sgps->xnodp * Predict::ae * $sat->sgps->sinio / $sat->tle->eo;
132
-            $sat->sgps->x1mth2 = 1.0 - $theta2;
133
-            $sat->sgps->c4 = 2.0 * $sat->sgps->xnodp * $coef1 * $sat->sgps->aodp * $betao2 *
134
-                ($sat->sgps->eta * (2.0 + 0.5 * $etasq) +
135
-                 $sat->tle->eo * (0.5 + 2.0 * $etasq) -
136
-                 2.0 * Predict::ck2 * $tsi / ($sat->sgps->aodp * $psisq) *
137
-                 (-3.0 * $sat->sgps->x3thm1 * (1.0 - 2.0 * $eeta + $etasq * (1.5 - 0.5 * $eeta)) +
138
-                  0.75 * $sat->sgps->x1mth2 * (2.0 * $etasq - $eeta * (1.0 + $etasq)) *
139
-                  cos(2.0 * $sat->tle->omegao)));
140
-            $sat->sgps->c5 = 2.0 * $coef1 * $sat->sgps->aodp * $betao2 *
141
-                (1.0 + 2.75 * ($etasq + $eeta) + $eeta * $etasq);
142
-            $theta4 = $theta2 * $theta2;
143
-            $temp1 = 3.0 * Predict::ck2 * $pinvsq * $sat->sgps->xnodp;
144
-            $temp2 = $temp1 * Predict::ck2 * $pinvsq;
145
-            $temp3 = 1.25 * Predict::ck4 * $pinvsq * $pinvsq * $sat->sgps->xnodp;
146
-            $sat->sgps->xmdot = $sat->sgps->xnodp + 0.5 * $temp1 * $betao * $sat->sgps->x3thm1 +
147
-                0.0625 * $temp2 * $betao * (13.0 - 78.0 * $theta2 + 137.0 * $theta4);
148
-            $x1m5th = 1.0 - 5.0 * $theta2;
149
-            $sat->sgps->omgdot = -0.5 * $temp1 * $x1m5th +
150
-                0.0625 * $temp2 * (7.0 - 114.0 * $theta2 + 395.0 * $theta4) +
151
-                $temp3 * (3.0 - 36.0 * $theta2 + 49.0 * $theta4);
152
-            $xhdot1 = -$temp1 * $sat->sgps->cosio;
153
-            $sat->sgps->xnodot = $xhdot1 + (0.5 * $temp2 * (4.0 - 19.0 * $theta2) +
154
-                             2.0 * $temp3 * (3.0 - 7.0 * $theta2)) * $sat->sgps->cosio;
155
-            $sat->sgps->omgcof = $sat->tle->bstar * $c3 * cos($sat->tle->omegao);
156
-            $sat->sgps->xmcof = -Predict::tothrd * $coef * $sat->tle->bstar * Predict::ae / $eeta;
157
-            $sat->sgps->xnodcf = 3.5 * $betao2 * $xhdot1 * $sat->sgps->c1;
158
-            $sat->sgps->t2cof = 1.5 * $sat->sgps->c1;
159
-            $sat->sgps->xlcof = 0.125 * $a3ovk2 * $sat->sgps->sinio *
160
-                (3.0 + 5.0 * $sat->sgps->cosio) / (1.0 + $sat->sgps->cosio);
161
-            $sat->sgps->aycof = 0.25 * $a3ovk2 * $sat->sgps->sinio;
162
-            $sat->sgps->delmo = pow(1.0 + $sat->sgps->eta * cos($sat->tle->xmo), 3);
163
-            $sat->sgps->sinmo = sin($sat->tle->xmo);
164
-            $sat->sgps->x7thm1 = 7.0 * $theta2 - 1.0;
165
-            if (~$sat->flags & self::SIMPLE_FLAG) {
166
-                $c1sq = $sat->sgps->c1 * $sat->sgps->c1;
167
-                $sat->sgps->d2 = 4.0 * $sat->sgps->aodp * $tsi * $c1sq;
168
-                $temp = $sat->sgps->d2 * $tsi * $sat->sgps->c1 / 3.0;
169
-                $sat->sgps->d3 = (17.0 * $sat->sgps->aodp + $s4) * $temp;
170
-                $sat->sgps->d4 = 0.5 * $temp * $sat->sgps->aodp * $tsi *
171
-                    (221.0 * $sat->sgps->aodp + 31.0 * $s4) * $sat->sgps->c1;
172
-                $sat->sgps->t3cof = $sat->sgps->d2 + 2.0 * $c1sq;
173
-                $sat->sgps->t4cof = 0.25 * (3.0 * $sat->sgps->d3 + $sat->sgps->c1 *
174
-                              (12.0 * $sat->sgps->d2 + 10.0 * $c1sq));
175
-                $sat->sgps->t5cof = 0.2 * (3.0 * $sat->sgps->d4 +
176
-                             12.0 * $sat->sgps->c1 * $sat->sgps->d3 +
177
-                             6.0 * $sat->sgps->d2 * $sat->sgps->d2 +
178
-                             15.0 * $c1sq * (2.0 * $sat->sgps->d2 + $c1sq));
179
-            }; /* End of if (isFlagClear(SIMPLE_FLAG)) */
180
-        }; /* End of SGP4() initialization */
181
-
182
-        /* Update for secular gravity and atmospheric drag. */
183
-        $xmdf = $sat->tle->xmo + $sat->sgps->xmdot * $tsince;
184
-        $omgadf = $sat->tle->omegao + $sat->sgps->omgdot * $tsince;
185
-        $xnoddf = $sat->tle->xnodeo + $sat->sgps->xnodot * $tsince;
186
-        $omega = $omgadf;
187
-        $xmp = $xmdf;
188
-        $tsq = $tsince * $tsince;
189
-        $xnode = $xnoddf + $sat->sgps->xnodcf * $tsq;
190
-        $tempa = 1.0 - $sat->sgps->c1 * $tsince;
191
-        $tempe = $sat->tle->bstar * $sat->sgps->c4 * $tsince;
192
-        $templ = $sat->sgps->t2cof * $tsq;
193
-        if (~$sat->flags & self::SIMPLE_FLAG) {
194
-            $delomg = $sat->sgps->omgcof * $tsince;
195
-            $delm = $sat->sgps->xmcof * (pow(1 + $sat->sgps->eta * cos($xmdf), 3) - $sat->sgps->delmo);
196
-            $temp = $delomg + $delm;
197
-            $xmp = $xmdf + $temp;
198
-            $omega = $omgadf - $temp;
199
-            $tcube = $tsq * $tsince;
200
-            $tfour = $tsince * $tcube;
201
-            $tempa = $tempa - $sat->sgps->d2 * $tsq - $sat->sgps->d3 * $tcube - $sat->sgps->d4 * $tfour;
202
-            $tempe = $tempe + $sat->tle->bstar * $sat->sgps->c5 * (sin($xmp) - $sat->sgps->sinmo);
203
-            $templ = $templ + $sat->sgps->t3cof * $tcube + $tfour *
204
-                ($sat->sgps->t4cof + $tsince * $sat->sgps->t5cof);
205
-        }; /* End of if (isFlagClear(SIMPLE_FLAG)) */
206
-
207
-        $a = $sat->sgps->aodp * pow($tempa, 2);
208
-        $e = $sat->tle->eo - $tempe;
209
-        $xl = $xmp + $omega + $xnode + $sat->sgps->xnodp * $templ;
210
-        $beta = sqrt(1.0 - ($e * $e));
211
-        $xn = Predict::xke / pow($a, 1.5);
212
-
213
-        /* Long period periodics */
214
-        $axn = $e * cos($omega);
215
-        $temp = 1.0 / ($a * $beta * $beta);
216
-        $xll = $temp * $sat->sgps->xlcof * $axn;
217
-        $aynl = $temp * $sat->sgps->aycof;
218
-        $xlt = $xl + $xll;
219
-        $ayn = $e * sin($omega) + $aynl;
220
-
221
-        /* Solve Kepler's' Equation */
222
-        $capu = Predict_Math::FMod2p($xlt - $xnode);
223
-        $temp2 = $capu;
224
-
225
-        $i = 0;
226
-        do {
227
-            $sinepw = sin($temp2);
228
-            $cosepw = cos($temp2);
229
-            $temp3 = $axn * $sinepw;
230
-            $temp4 = $ayn * $cosepw;
231
-            $temp5 = $axn * $cosepw;
232
-            $temp6 = $ayn * $sinepw;
233
-            $epw = ($capu - $temp4 + $temp3 - $temp2) / (1.0 - $temp5 - $temp6) + $temp2;
234
-            if (abs($epw - $temp2) <= Predict::e6a) {
235
-                break;
236
-            }
237
-            $temp2 = $epw;
238
-        } while ($i++ < 10);
239
-
240
-        /* Short period preliminary quantities */
241
-        $ecose = $temp5 + $temp6;
242
-        $esine = $temp3 - $temp4;
243
-        $elsq = $axn * $axn + $ayn * $ayn;
244
-        $temp = 1.0 - $elsq;
245
-        $pl = $a * $temp;
246
-        $r = $a * (1.0 - $ecose);
247
-        $temp1 = 1.0 / $r;
248
-        $rdot = Predict::xke * sqrt($a) * $esine * $temp1;
249
-        $rfdot = Predict::xke * sqrt($pl) * $temp1;
250
-        $temp2 = $a * $temp1;
251
-        $betal = sqrt($temp);
252
-        $temp3 = 1.0 / (1.0 + $betal);
253
-        $cosu = $temp2 * ($cosepw - $axn + $ayn * $esine * $temp3);
254
-        $sinu = $temp2 * ($sinepw - $ayn - $axn * $esine * $temp3);
255
-        $u = Predict_Math::AcTan($sinu, $cosu);
256
-        $sin2u = 2.0 * $sinu * $cosu;
257
-        $cos2u = 2.0 * $cosu * $cosu - 1.0;
258
-        $temp = 1.0 / $pl;
259
-        $temp1 = Predict::ck2 * $temp;
260
-        $temp2 = $temp1 * $temp;
261
-
262
-        /* Update for short periodics */
263
-        $rk = $r * (1.0 - 1.5 * $temp2 * $betal * $sat->sgps->x3thm1) +
264
-            0.5 * $temp1 * $sat->sgps->x1mth2 * $cos2u;
265
-        $uk = $u - 0.25 * $temp2 * $sat->sgps->x7thm1 * $sin2u;
266
-        $xnodek = $xnode + 1.5 * $temp2 * $sat->sgps->cosio * $sin2u;
267
-        $xinck = $sat->tle->xincl + 1.5 * $temp2 * $sat->sgps->cosio * $sat->sgps->sinio * $cos2u;
268
-        $rdotk = $rdot - $xn * $temp1 * $sat->sgps->x1mth2 * $sin2u;
269
-        $rfdotk = $rfdot + $xn * $temp1 * ($sat->sgps->x1mth2 * $cos2u + 1.5 * $sat->sgps->x3thm1);
270
-
271
-
272
-        /* Orientation vectors */
273
-        $sinuk = sin($uk);
274
-        $cosuk = cos($uk);
275
-        $sinik = sin($xinck);
276
-        $cosik = cos($xinck);
277
-        $sinnok = sin($xnodek);
278
-        $cosnok = cos($xnodek);
279
-        $xmx = -$sinnok * $cosik;
280
-        $xmy = $cosnok * $cosik;
281
-        $ux = $xmx * $sinuk + $cosnok * $cosuk;
282
-        $uy = $xmy * $sinuk + $sinnok * $cosuk;
283
-        $uz = $sinik * $sinuk;
284
-        $vx = $xmx * $cosuk - $cosnok * $sinuk;
285
-        $vy = $xmy * $cosuk - $sinnok * $sinuk;
286
-        $vz = $sinik * $cosuk;
287
-
288
-        /* Position and velocity */
289
-        $sat->pos->x = $rk * $ux;
290
-        $sat->pos->y = $rk * $uy;
291
-        $sat->pos->z = $rk * $uz;
292
-        $sat->vel->x = $rdotk * $ux + $rfdotk * $vx;
293
-        $sat->vel->y = $rdotk * $uy + $rfdotk * $vy;
294
-        $sat->vel->z = $rdotk * $uz + $rfdotk * $vz;
295
-
296
-        $sat->phase = $xlt - $xnode - $omgadf + Predict::twopi;
297
-        if ($sat->phase < 0) {
298
-            $sat->phase += Predict::twopi;
299
-        }
300
-        $sat->phase = Predict_Math::FMod2p($sat->phase);
301
-
302
-        $sat->tle->omegao1 = $omega;
303
-        $sat->tle->xincl1  = $xinck;
304
-        $sat->tle->xnodeo1 = $xnodek;
305
-
306
-    } /*SGP4*/
307
-
308
-    /* SDP4 */
309
-    /* This function is used to calculate the position and velocity */
310
-    /* of deep-space (period > 225 minutes) satellites. tsince is   */
311
-    /* time since epoch in minutes, tle is a pointer to a tle_t     */
312
-    /* structure with Keplerian orbital elements and pos and vel    */
313
-    /* are vector_t structures returning ECI satellite position and */
314
-    /* velocity. Use Convert_Sat_State() to convert to km and km/s. */
315
-    public function SDP4(Predict_Sat $sat, $tsince)
316
-    {
317
-        /* Initialization */
318
-        if (~$sat->flags & self::SDP4_INITIALIZED_FLAG) {
319
-
320
-            $sat->flags |= self::SDP4_INITIALIZED_FLAG;
321
-
322
-            /* Recover original mean motion (xnodp) and   */
323
-            /* semimajor axis (aodp) from input elements. */
324
-            $a1 = pow(Predict::xke / $sat->tle->xno, Predict::tothrd);
325
-            $sat->deep_arg->cosio = cos($sat->tle->xincl);
326
-            $sat->deep_arg->theta2 = $sat->deep_arg->cosio * $sat->deep_arg->cosio;
327
-            $sat->sgps->x3thm1 = 3.0 * $sat->deep_arg->theta2 - 1.0;
328
-            $sat->deep_arg->eosq = $sat->tle->eo * $sat->tle->eo;
329
-            $sat->deep_arg->betao2 = 1.0 - $sat->deep_arg->eosq;
330
-            $sat->deep_arg->betao = sqrt($sat->deep_arg->betao2);
331
-            $del1 = 1.5 * Predict::ck2 * $sat->sgps->x3thm1 /
332
-                ($a1 * $a1 * $sat->deep_arg->betao * $sat->deep_arg->betao2);
333
-            $ao = $a1 * (1.0 - $del1 * (0.5 * Predict::tothrd + $del1 * (1.0 + 134.0 / 81.0 * $del1)));
334
-            $delo = 1.5 * Predict::ck2 * $sat->sgps->x3thm1 /
335
-                ($ao * $ao * $sat->deep_arg->betao * $sat->deep_arg->betao2);
336
-            $sat->deep_arg->xnodp = $sat->tle->xno / (1.0 + $delo);
337
-            $sat->deep_arg->aodp = $ao / (1.0 - $delo);
338
-
339
-            /* For perigee below 156 km, the values */
340
-            /* of s and qoms2t are altered.         */
341
-            $s4 = Predict::__s__;
342
-            $qoms24 = Predict::qoms2t;
343
-            $perige = ($sat->deep_arg->aodp * (1.0 - $sat->tle->eo) - Predict::ae) * Predict::xkmper;
344
-            if ($perige < 156.0) {
345
-                if ($perige <= 98.0) {
346
-                    $s4 = 20.0;
347
-                } else {
348
-                    $s4 = $perige - 78.0;
349
-                }
350
-                $qoms24 = pow((120.0 - $s4) * Predict::ae / Predict::xkmper, 4);
351
-                $s4 = $s4 / Predict::xkmper + Predict::ae;
352
-            }
353
-            $pinvsq = 1.0 / ($sat->deep_arg->aodp * $sat->deep_arg->aodp *
354
-                    $sat->deep_arg->betao2 * $sat->deep_arg->betao2);
355
-            $sat->deep_arg->sing = sin($sat->tle->omegao);
356
-            $sat->deep_arg->cosg = cos($sat->tle->omegao);
357
-            $tsi = 1.0 / ($sat->deep_arg->aodp - $s4);
358
-            $eta = $sat->deep_arg->aodp * $sat->tle->eo * $tsi;
359
-            $etasq = $eta * $eta;
360
-            $eeta = $sat->tle->eo * $eta;
361
-            $psisq = abs(1.0 - $etasq);
362
-            $coef = $qoms24 * pow($tsi, 4);
363
-            $coef1 = $coef / pow($psisq, 3.5);
364
-            $c2 = $coef1 * $sat->deep_arg->xnodp * ($sat->deep_arg->aodp *
365
-                                (1.0 + 1.5 * $etasq + $eeta *
366
-                                 (4.0 + $etasq)) + 0.75 * Predict::ck2 * $tsi / $psisq *
367
-                                $sat->sgps->x3thm1 * (8.0 + 3.0 * $etasq *
368
-                                        (8.0 + $etasq)));
369
-            $sat->sgps->c1 = $sat->tle->bstar * $c2;
370
-            $sat->deep_arg->sinio = sin($sat->tle->xincl);
371
-            $a3ovk2 = -Predict::xj3 / Predict::ck2 * pow(Predict::ae, 3);
372
-            $sat->sgps->x1mth2 = 1.0 - $sat->deep_arg->theta2;
373
-            $sat->sgps->c4 = 2.0 * $sat->deep_arg->xnodp * $coef1 *
374
-                $sat->deep_arg->aodp * $sat->deep_arg->betao2 *
375
-                ($eta * (2.0 + 0.5 * $etasq) + $sat->tle->eo *
376
-                 (0.5 + 2.0 * $etasq) - 2.0 * Predict::ck2 * $tsi /
377
-                 ($sat->deep_arg->aodp * $psisq) * (-3.0 * $sat->sgps->x3thm1 *
378
-                                 (1.0 - 2.0 * $eeta + $etasq *
379
-                                  (1.5 - 0.5 * $eeta)) +
380
-                                 0.75 * $sat->sgps->x1mth2 *
381
-                                 (2.0 * $etasq - $eeta * (1.0 + $etasq)) *
382
-                                 cos(2.0 * $sat->tle->omegao)));
383
-            $theta4 = $sat->deep_arg->theta2 * $sat->deep_arg->theta2;
384
-            $temp1 = 3.0 * Predict::ck2 * $pinvsq * $sat->deep_arg->xnodp;
385
-            $temp2 = $temp1 * Predict::ck2 * $pinvsq;
386
-            $temp3 = 1.25 * Predict::ck4 * $pinvsq * $pinvsq * $sat->deep_arg->xnodp;
387
-            $sat->deep_arg->xmdot = $sat->deep_arg->xnodp + 0.5 * $temp1 * $sat->deep_arg->betao *
388
-                $sat->sgps->x3thm1 + 0.0625 * $temp2 * $sat->deep_arg->betao *
389
-                (13.0 - 78.0 * $sat->deep_arg->theta2 + 137.0 * $theta4);
390
-            $x1m5th = 1.0 - 5.0 * $sat->deep_arg->theta2;
391
-            $sat->deep_arg->omgdot = -0.5 * $temp1 * $x1m5th + 0.0625 * $temp2 *
392
-                            (7.0 - 114.0 * $sat->deep_arg->theta2 + 395.0 * $theta4) +
393
-                        $temp3 * (3.0 - 36.0 * $sat->deep_arg->theta2 + 49.0 * $theta4);
394
-            $xhdot1 = -$temp1 * $sat->deep_arg->cosio;
395
-            $sat->deep_arg->xnodot = $xhdot1 + (0.5 * $temp2 * (4.0 - 19.0 * $sat->deep_arg->theta2) +
396
-                             2.0 * $temp3 * (3.0 - 7.0 * $sat->deep_arg->theta2)) *
397
-                $sat->deep_arg->cosio;
398
-            $sat->sgps->xnodcf = 3.5 * $sat->deep_arg->betao2 * $xhdot1 * $sat->sgps->c1;
399
-            $sat->sgps->t2cof = 1.5 * $sat->sgps->c1;
400
-            $sat->sgps->xlcof = 0.125 * $a3ovk2 * $sat->deep_arg->sinio *
401
-                (3.0 + 5.0 * $sat->deep_arg->cosio) / (1.0 + $sat->deep_arg->cosio);
402
-            $sat->sgps->aycof = 0.25 * $a3ovk2 * $sat->deep_arg->sinio;
403
-            $sat->sgps->x7thm1 = 7.0 * $sat->deep_arg->theta2 - 1.0;
404
-
405
-            /* initialize Deep() */
406
-            $this->Deep(self::dpinit, $sat);
407
-        }; /*End of SDP4() initialization */
408
-
409
-        /* Update for secular gravity and atmospheric drag */
410
-        $xmdf = $sat->tle->xmo + $sat->deep_arg->xmdot * $tsince;
411
-        $sat->deep_arg->omgadf = $sat->tle->omegao + $sat->deep_arg->omgdot * $tsince;
412
-        $xnoddf = $sat->tle->xnodeo + $sat->deep_arg->xnodot * $tsince;
413
-        $tsq = $tsince * $tsince;
414
-        $sat->deep_arg->xnode = $xnoddf + $sat->sgps->xnodcf * $tsq;
415
-        $tempa = 1.0 - $sat->sgps->c1 * $tsince;
416
-        $tempe = $sat->tle->bstar * $sat->sgps->c4 * $tsince;
417
-        $templ = $sat->sgps->t2cof * $tsq;
418
-        $sat->deep_arg->xn = $sat->deep_arg->xnodp;
419
-
420
-        /* Update for deep-space secular effects */
421
-        $sat->deep_arg->xll = $xmdf;
422
-        $sat->deep_arg->t = $tsince;
423
-
424
-        $this->Deep(self::dpsec, $sat);
425
-
426
-        $xmdf = $sat->deep_arg->xll;
427
-        $a = pow(Predict::xke / $sat->deep_arg->xn, Predict::tothrd) * $tempa * $tempa;
428
-        $sat->deep_arg->em = $sat->deep_arg->em - $tempe;
429
-        $xmam = $xmdf + $sat->deep_arg->xnodp * $templ;
430
-
431
-        /* Update for deep-space periodic effects */
432
-        $sat->deep_arg->xll = $xmam;
433
-
434
-        $this->Deep(self::dpper, $sat);
435
-
436
-        $xmam = $sat->deep_arg->xll;
437
-        $xl = $xmam + $sat->deep_arg->omgadf + $sat->deep_arg->xnode;
438
-        $beta = sqrt(1.0 - $sat->deep_arg->em * $sat->deep_arg->em);
439
-        $sat->deep_arg->xn = Predict::xke / pow($a, 1.5);
440
-
441
-        /* Long period periodics */
442
-        $axn = $sat->deep_arg->em * cos($sat->deep_arg->omgadf);
443
-        $temp = 1.0 / ($a * $beta * $beta);
444
-        $xll = $temp * $sat->sgps->xlcof * $axn;
445
-        $aynl = $temp * $sat->sgps->aycof;
446
-        $xlt = $xl + $xll;
447
-        $ayn = $sat->deep_arg->em * sin($sat->deep_arg->omgadf) + $aynl;
448
-
449
-        /* Solve Kepler's Equation */
450
-        $capu = Predict_Math::FMod2p ($xlt - $sat->deep_arg->xnode);
451
-        $temp2 = $capu;
452
-
453
-        $i = 0;
454
-        do {
455
-            $sinepw = sin($temp2);
456
-            $cosepw = cos($temp2);
457
-            $temp3 = $axn * $sinepw;
458
-            $temp4 = $ayn * $cosepw;
459
-            $temp5 = $axn * $cosepw;
460
-            $temp6 = $ayn * $sinepw;
461
-            $epw = ($capu - $temp4 + $temp3 - $temp2) / (1.0 - $temp5 - $temp6) + $temp2;
462
-            if (abs($epw - $temp2) <= Predict::e6a) {
463
-                break;
464
-            }
465
-            $temp2 = $epw;
466
-        } while ($i++ < 10);
467
-
468
-        /* Short period preliminary quantities */
469
-        $ecose = $temp5 + $temp6;
470
-        $esine = $temp3 - $temp4;
471
-        $elsq = $axn * $axn + $ayn * $ayn;
472
-        $temp = 1.0 - $elsq;
473
-        $pl = $a * $temp;
474
-        $r = $a * (1.0 - $ecose);
475
-        $temp1 = 1.0 / $r;
476
-        $rdot = Predict::xke * sqrt($a) * $esine * $temp1;
477
-        $rfdot = Predict::xke * sqrt($pl) * $temp1;
478
-        $temp2 = $a * $temp1;
479
-        $betal = sqrt($temp);
480
-        $temp3 = 1.0 / (1.0 + $betal);
481
-        $cosu = $temp2 * ($cosepw - $axn + $ayn * $esine * $temp3);
482
-        $sinu = $temp2 * ($sinepw - $ayn - $axn * $esine * $temp3);
483
-        $u = Predict_Math::AcTan($sinu, $cosu);
484
-        $sin2u = 2.0 * $sinu * $cosu;
485
-        $cos2u = 2.0 * $cosu * $cosu - 1.0;
486
-        $temp = 1.0 / $pl;
487
-        $temp1 = Predict::ck2 * $temp;
488
-        $temp2 = $temp1 * $temp;
489
-
490
-        /* Update for short periodics */
491
-        $rk = $r * (1.0 - 1.5 * $temp2 * $betal * $sat->sgps->x3thm1) +
492
-             0.5 * $temp1 * $sat->sgps->x1mth2 * $cos2u;
493
-        $uk = $u - 0.25 * $temp2 * $sat->sgps->x7thm1 * $sin2u;
494
-        $xnodek = $sat->deep_arg->xnode + 1.5 * $temp2 * $sat->deep_arg->cosio * $sin2u;
495
-        $xinck = $sat->deep_arg->xinc + 1.5 * $temp2 *
496
-             $sat->deep_arg->cosio * $sat->deep_arg->sinio * $cos2u;
497
-        $rdotk = $rdot - $sat->deep_arg->xn * $temp1 * $sat->sgps->x1mth2 * $sin2u;
498
-        $rfdotk = $rfdot + $sat->deep_arg->xn * $temp1 *
499
-             ($sat->sgps->x1mth2 * $cos2u + 1.5 * $sat->sgps->x3thm1);
500
-
501
-        /* Orientation vectors */
502
-        $sinuk = sin($uk);
503
-        $cosuk = cos($uk);
504
-        $sinik = sin($xinck);
505
-        $cosik = cos($xinck);
506
-        $sinnok = sin($xnodek);
507
-        $cosnok = cos($xnodek);
508
-        $xmx = -$sinnok * $cosik;
509
-        $xmy = $cosnok * $cosik;
510
-        $ux = $xmx * $sinuk + $cosnok * $cosuk;
511
-        $uy = $xmy * $sinuk + $sinnok * $cosuk;
512
-        $uz = $sinik * $sinuk;
513
-        $vx = $xmx * $cosuk - $cosnok * $sinuk;
514
-        $vy = $xmy * $cosuk - $sinnok * $sinuk;
515
-        $vz = $sinik * $cosuk;
516
-
517
-        /* Position and velocity */
518
-        $sat->pos->x = $rk * $ux;
519
-        $sat->pos->y = $rk * $uy;
520
-        $sat->pos->z = $rk * $uz;
521
-        $sat->vel->x = $rdotk * $ux + $rfdotk * $vx;
522
-        $sat->vel->y = $rdotk * $uy + $rfdotk * $vy;
523
-        $sat->vel->z = $rdotk * $uz + $rfdotk * $vz;
524
-
525
-        /* Phase in rads */
526
-        $sat->phase = $xlt - $sat->deep_arg->xnode - $sat->deep_arg->omgadf + Predict::twopi;
527
-        if ($sat->phase < 0.0) {
528
-            $sat->phase += Predict::twopi;
529
-        }
530
-        $sat->phase = Predict_Math::FMod2p ($sat->phase);
531
-
532
-        $sat->tle->omegao1 = $sat->deep_arg->omgadf;
533
-        $sat->tle->xincl1  = $sat->deep_arg->xinc;
534
-        $sat->tle->xnodeo1 = $sat->deep_arg->xnode;
535
-    } /* SDP4 */
536
-
537
-
538
-    /* DEEP */
539
-    /* This function is used by SDP4 to add lunar and solar */
540
-    /* perturbation effects to deep-space orbit objects.    */
541
-    public function Deep($ientry, Predict_Sat $sat)
542
-    {
543
-        switch ($ientry) {
544
-        case self::dpinit : /* Entrance for deep space initialization */
545
-            $sat->dps->thgr = Predict_Time::ThetaG($sat->tle->epoch, $sat->deep_arg);
546
-            $eq = $sat->tle->eo;
547
-            $sat->dps->xnq = $sat->deep_arg->xnodp;
548
-            $aqnv = 1.0 / $sat->deep_arg->aodp;
549
-            $sat->dps->xqncl = $sat->tle->xincl;
550
-            $xmao = $sat->tle->xmo;
551
-            $xpidot = $sat->deep_arg->omgdot + $sat->deep_arg->xnodot;
552
-            $sinq = sin($sat->tle->xnodeo);
553
-            $cosq = cos($sat->tle->xnodeo);
554
-            $sat->dps->omegaq = $sat->tle->omegao;
555
-            $sat->dps->preep = 0;
556
-
557
-            /* Initialize lunar solar terms */
558
-            $day = $sat->deep_arg->ds50 + 18261.5;  /* Days since 1900 Jan 0.5 */
559
-            if ($day != $sat->dps->preep) {
560
-                $sat->dps->preep = $day;
561
-                $xnodce = 4.5236020 - 9.2422029E-4 * $day;
562
-                $stem = sin($xnodce);
563
-                $ctem = cos($xnodce);
564
-                $sat->dps->zcosil = 0.91375164 - 0.03568096 * $ctem;
565
-                $sat->dps->zsinil = sqrt(1.0 - $sat->dps->zcosil * $sat->dps->zcosil);
566
-                $sat->dps->zsinhl = 0.089683511 * $stem / $sat->dps->zsinil;
567
-                $sat->dps->zcoshl = sqrt(1.0 - $sat->dps->zsinhl * $sat->dps->zsinhl);
568
-                $c = 4.7199672 + 0.22997150 * $day;
569
-                $gam = 5.8351514 + 0.0019443680 * $day;
570
-                $sat->dps->zmol = Predict_Math::FMod2p($c - $gam);
571
-                $zx = 0.39785416 * $stem / $sat->dps->zsinil;
572
-                $zy = $sat->dps->zcoshl * $ctem + 0.91744867 * $sat->dps->zsinhl * $stem;
573
-                $zx = Predict_Math::AcTan($zx, $zy);
574
-                $zx = $gam + $zx - $xnodce;
575
-                $sat->dps->zcosgl = cos($zx);
576
-                $sat->dps->zsingl = sin($zx);
577
-                $sat->dps->zmos = 6.2565837 + 0.017201977 * $day;
578
-                $sat->dps->zmos = Predict_Math::FMod2p($sat->dps->zmos);
579
-            } /* End if(day != preep) */
580
-
581
-            /* Do solar terms */
582
-            $sat->dps->savtsn = 1E20;
583
-            $zcosg = Predict::zcosgs;
584
-            $zsing = Predict::zsings;
585
-            $zcosi = Predict::zcosis;
586
-            $zsini = Predict::zsinis;
587
-            $zcosh = $cosq;
588
-            $zsinh = $sinq;
589
-            $cc = Predict::c1ss;
590
-            $zn = Predict::zns;
591
-            $ze = Predict::zes;
592
-            $zmo = $sat->dps->zmos;
593
-            $xnoi = 1.0 / $sat->dps->xnq;
594
-
595
-            /* Loop breaks when Solar terms are done a second */
596
-            /* time, after Lunar terms are initialized        */
597
-            for(;;) {
598
-                /* Solar terms done again after Lunar terms are done */
599
-                $a1 = $zcosg * $zcosh + $zsing * $zcosi * $zsinh;
600
-                $a3 = -$zsing * $zcosh + $zcosg * $zcosi * $zsinh;
601
-                $a7 = -$zcosg * $zsinh + $zsing * $zcosi * $zcosh;
602
-                $a8 = $zsing * $zsini;
603
-                $a9 = $zsing * $zsinh + $zcosg * $zcosi * $zcosh;
604
-                $a10 = $zcosg * $zsini;
605
-                $a2 = $sat->deep_arg->cosio * $a7 + $sat->deep_arg->sinio * $a8;
606
-                $a4 = $sat->deep_arg->cosio * $a9 + $sat->deep_arg->sinio * $a10;
607
-                $a5 = -$sat->deep_arg->sinio * $a7 + $sat->deep_arg->cosio * $a8;
608
-                $a6 = -$sat->deep_arg->sinio * $a9 + $sat->deep_arg->cosio * $a10;
609
-                $x1 = $a1 * $sat->deep_arg->cosg + $a2 * $sat->deep_arg->sing;
610
-                $x2 = $a3 * $sat->deep_arg->cosg + $a4 * $sat->deep_arg->sing;
611
-                $x3 = -$a1 * $sat->deep_arg->sing + $a2 * $sat->deep_arg->cosg;
612
-                $x4 = -$a3 * $sat->deep_arg->sing + $a4 * $sat->deep_arg->cosg;
613
-                $x5 = $a5 * $sat->deep_arg->sing;
614
-                $x6 = $a6 * $sat->deep_arg->sing;
615
-                $x7 = $a5 * $sat->deep_arg->cosg;
616
-                $x8 = $a6 * $sat->deep_arg->cosg;
617
-                $z31 = 12 * $x1 * $x1 - 3 * $x3 * $x3;
618
-                $z32 = 24 * $x1 * $x2 - 6 * $x3 * $x4;
619
-                $z33 = 12 * $x2 * $x2 - 3 * $x4 * $x4;
620
-                $z1 = 3 * ($a1 * $a1 + $a2 * $a2) + $z31 * $sat->deep_arg->eosq;
621
-                $z2 = 6 * ($a1 * $a3 + $a2 * $a4) + $z32 * $sat->deep_arg->eosq;
622
-                $z3 = 3 * ($a3 * $a3 + $a4 * $a4) + $z33 * $sat->deep_arg->eosq;
623
-                $z11 = -6 * $a1 * $a5 + $sat->deep_arg->eosq * (-24 * $x1 * $x7 - 6 * $x3 * $x5);
624
-                $z12 = -6 * ($a1 * $a6 + $a3 * $a5) + $sat->deep_arg->eosq *
625
-                    (-24 * ($x2 * $x7 + $x1 * $x8) - 6 * ($x3 * $x6 + $x4 * $x5));
626
-                $z13 = -6 * $a3 * $a6 + $sat->deep_arg->eosq * (-24 * $x2 * $x8 - 6 * $x4 * $x6);
627
-                $z21 = 6 * $a2 * $a5 + $sat->deep_arg->eosq * (24 * $x1 * $x5 - 6 * $x3 * $x7);
628
-                $z22 = 6 * ($a4 * $a5 + $a2 * $a6) + $sat->deep_arg->eosq *
629
-                    (24 * ($x2 * $x5 + $x1 * $x6) - 6 * ($x4 * $x7 + $x3 * $x8));
630
-                $z23 = 6 * $a4 * $a6 + $sat->deep_arg->eosq * (24 * $x2 * $x6 - 6 * $x4 * $x8);
631
-                $z1 = $z1 + $z1 + $sat->deep_arg->betao2 * $z31;
632
-                $z2 = $z2 + $z2 + $sat->deep_arg->betao2 * $z32;
633
-                $z3 = $z3 + $z3 + $sat->deep_arg->betao2 * $z33;
634
-                $s3 = $cc * $xnoi;
635
-                $s2 = -0.5 * $s3 / $sat->deep_arg->betao;
636
-                $s4 = $s3 * $sat->deep_arg->betao;
637
-                $s1 = -15 * $eq * $s4;
638
-                $s5 = $x1 * $x3 + $x2 * $x4;
639
-                $s6 = $x2 * $x3 + $x1 * $x4;
640
-                $s7 = $x2 * $x4 - $x1 * $x3;
641
-                $se = $s1 * $zn * $s5;
642
-                $si = $s2 * $zn * ($z11 + $z13);
643
-                $sl = -$zn * $s3 * ($z1 + $z3 - 14 - 6 * $sat->deep_arg->eosq);
644
-                $sgh = $s4 * $zn * ($z31 + $z33 - 6);
645
-                $sh = -$zn * $s2 * ($z21 + $z23);
646
-                if ($sat->dps->xqncl < 5.2359877E-2) {
647
-                    $sh = 0;
648
-                }
649
-                $sat->dps->ee2 = 2 * $s1 * $s6;
650
-                $sat->dps->e3 = 2 * $s1 * $s7;
651
-                $sat->dps->xi2 = 2 * $s2 * $z12;
652
-                $sat->dps->xi3 = 2 * $s2 * ($z13 - $z11);
653
-                $sat->dps->xl2 = -2 * $s3 * $z2;
654
-                $sat->dps->xl3 = -2 * $s3 * ($z3 - $z1);
655
-                $sat->dps->xl4 = -2 * $s3 * (-21 - 9 * $sat->deep_arg->eosq) * $ze;
656
-                $sat->dps->xgh2 = 2 * $s4 * $z32;
657
-                $sat->dps->xgh3 = 2 * $s4 * ($z33 - $z31);
658
-                $sat->dps->xgh4 = -18 * $s4 * $ze;
659
-                $sat->dps->xh2 = -2 * $s2 * $z22;
660
-                $sat->dps->xh3 = -2 * $s2 * ($z23 - $z21);
661
-
662
-                if ($sat->flags & self::LUNAR_TERMS_DONE_FLAG) {
663
-                    break;
664
-                }
665
-
666
-                /* Do lunar terms */
667
-                $sat->dps->sse = $se;
668
-                $sat->dps->ssi = $si;
669
-                $sat->dps->ssl = $sl;
670
-                $sat->dps->ssh = $sh / $sat->deep_arg->sinio;
671
-                $sat->dps->ssg = $sgh - $sat->deep_arg->cosio * $sat->dps->ssh;
672
-                $sat->dps->se2 = $sat->dps->ee2;
673
-                $sat->dps->si2 = $sat->dps->xi2;
674
-                $sat->dps->sl2 = $sat->dps->xl2;
675
-                $sat->dps->sgh2 = $sat->dps->xgh2;
676
-                $sat->dps->sh2 = $sat->dps->xh2;
677
-                $sat->dps->se3 = $sat->dps->e3;
678
-                $sat->dps->si3 = $sat->dps->xi3;
679
-                $sat->dps->sl3 = $sat->dps->xl3;
680
-                $sat->dps->sgh3 = $sat->dps->xgh3;
681
-                $sat->dps->sh3 = $sat->dps->xh3;
682
-                $sat->dps->sl4 = $sat->dps->xl4;
683
-                $sat->dps->sgh4 = $sat->dps->xgh4;
684
-                $zcosg = $sat->dps->zcosgl;
685
-                $zsing = $sat->dps->zsingl;
686
-                $zcosi = $sat->dps->zcosil;
687
-                $zsini = $sat->dps->zsinil;
688
-                $zcosh = $sat->dps->zcoshl * $cosq + $sat->dps->zsinhl * $sinq;
689
-                $zsinh = $sinq * $sat->dps->zcoshl - $cosq * $sat->dps->zsinhl;
690
-                $zn = Predict::znl;
691
-                $cc = Predict::c1l;
692
-                $ze = Predict::zel;
693
-                $zmo = $sat->dps->zmol;
694
-                $sat->flags |= self::LUNAR_TERMS_DONE_FLAG;
695
-            } /* End of for(;;) */
696
-
697
-            $sat->dps->sse = $sat->dps->sse + $se;
698
-            $sat->dps->ssi = $sat->dps->ssi + $si;
699
-            $sat->dps->ssl = $sat->dps->ssl + $sl;
700
-            $sat->dps->ssg = $sat->dps->ssg + $sgh - $sat->deep_arg->cosio / $sat->deep_arg->sinio * $sh;
701
-            $sat->dps->ssh = $sat->dps->ssh + $sh / $sat->deep_arg->sinio;
702
-
703
-            /* Geopotential resonance initialization for 12 hour orbits */
704
-            $sat->flags &= ~self::RESONANCE_FLAG;
705
-            $sat->flags &= ~self::SYNCHRONOUS_FLAG;
706
-
707
-            if (!(($sat->dps->xnq < 0.0052359877) && ($sat->dps->xnq > 0.0034906585))) {
708
-                if( ($sat->dps->xnq < 0.00826) || ($sat->dps->xnq > 0.00924) ) {
709
-                    return;
710
-                }
711
-                if ($eq < 0.5) {
712
-                    return;
713
-                }
714
-                $sat->flags |= self::RESONANCE_FLAG;
715
-                $eoc = $eq * $sat->deep_arg->eosq;
716
-                $g201 = -0.306 - ($eq - 0.64) * 0.440;
717
-                if ($eq <= 0.65) {
718
-                    $g211 = 3.616 - 13.247 * $eq + 16.290 * $sat->deep_arg->eosq;
719
-                    $g310 = -19.302 + 117.390 * $eq - 228.419 *
720
-                        $sat->deep_arg->eosq + 156.591 * $eoc;
721
-                    $g322 = -18.9068 + 109.7927 * $eq - 214.6334 *
722
-                        $sat->deep_arg->eosq + 146.5816 * $eoc;
723
-                    $g410 = -41.122 + 242.694 * $eq - 471.094 *
724
-                        $sat->deep_arg->eosq + 313.953 * $eoc;
725
-                    $g422 = -146.407 + 841.880 * $eq - 1629.014 *
726
-                        $sat->deep_arg->eosq + 1083.435 * $eoc;
727
-                    $g520 = -532.114 + 3017.977 * $eq - 5740 *
728
-                        $sat->deep_arg->eosq + 3708.276 * $eoc;
729
-                } else {
730
-                    $g211 = -72.099 + 331.819 * $eq - 508.738 *
731
-                        $sat->deep_arg->eosq + 266.724 * $eoc;
732
-                    $g310 = -346.844 + 1582.851 * $eq - 2415.925 *
733
-                        $sat->deep_arg->eosq + 1246.113 * $eoc;
734
-                    $g322 = -342.585 + 1554.908 * $eq - 2366.899 *
735
-                        $sat->deep_arg->eosq + 1215.972 * $eoc;
736
-                    $g410 = -1052.797 + 4758.686 * $eq - 7193.992 *
737
-                        $sat->deep_arg->eosq + 3651.957 * $eoc;
738
-                    $g422 = -3581.69 + 16178.11 * $eq - 24462.77 *
739
-                        $sat->deep_arg->eosq+ 12422.52 * $eoc;
740
-                    if ($eq <= 0.715) {
741
-                        $g520 = 1464.74 - 4664.75 * $eq + 3763.64 * $sat->deep_arg->eosq;
742
-                    } else {
743
-                        $g520 = -5149.66 + 29936.92 * $eq - 54087.36 *
744
-                            $sat->deep_arg->eosq + 31324.56 * $eoc;
745
-                    }
746
-                } /* End if (eq <= 0.65) */
747
-
748
-                if ($eq < 0.7) {
749
-                    $g533 = -919.2277 + 4988.61 * $eq - 9064.77 *
750
-                        $sat->deep_arg->eosq + 5542.21 * $eoc;
751
-                    $g521 = -822.71072 + 4568.6173 * $eq - 8491.4146 *
752
-                        $sat->deep_arg->eosq + 5337.524 * $eoc;
753
-                    $g532 = -853.666 + 4690.25 * $eq - 8624.77 *
754
-                        $sat->deep_arg->eosq + 5341.4 * $eoc;
755
-                }
756
-                else {
757
-                    $g533 = -37995.78 + 161616.52 * $eq - 229838.2*
758
-                        $sat->deep_arg->eosq + 109377.94 * $eoc;
759
-                    $g521 = -51752.104 + 218913.95 * $eq - 309468.16*
760
-                        $sat->deep_arg->eosq + 146349.42 * $eoc;
761
-                    $g532 = -40023.88 + 170470.89 * $eq - 242699.48*
762
-                        $sat->deep_arg->eosq + 115605.82 * $eoc;
763
-                } /* End if (eq <= 0.7) */
764
-
765
-                $sini2 = $sat->deep_arg->sinio * $sat->deep_arg->sinio;
766
-                $f220 = 0.75 * (1 + 2 * $sat->deep_arg->cosio + $sat->deep_arg->theta2);
767
-                $f221 = 1.5 * $sini2;
768
-                $f321 = 1.875 * $sat->deep_arg->sinio * (1 - 2 *
769
-                                  $sat->deep_arg->cosio - 3 * $sat->deep_arg->theta2);
770
-                $f322 = -1.875 * $sat->deep_arg->sinio * (1 + 2*
771
-                                   $sat->deep_arg->cosio - 3 * $sat->deep_arg->theta2);
772
-                $f441 = 35 * $sini2 * $f220;
773
-                $f442 = 39.3750 * $sini2 * $sini2;
774
-                $f522 = 9.84375 * $sat->deep_arg->sinio * ($sini2 * (1 - 2 * $sat->deep_arg->cosio - 5 *
775
-                                       $sat->deep_arg->theta2) + 0.33333333 * (-2 + 4 * $sat->deep_arg->cosio +
776
-                                                     6 * $sat->deep_arg->theta2));
777
-                $f523 = $sat->deep_arg->sinio * (4.92187512 * $sini2 * (-2 - 4 *
778
-                                      $sat->deep_arg->cosio + 10 * $sat->deep_arg->theta2) + 6.56250012
779
-                            * (1 + 2 * $sat->deep_arg->cosio - 3 * $sat->deep_arg->theta2));
780
-                $f542 = 29.53125 * $sat->deep_arg->sinio * (2 - 8 *
781
-                                 $sat->deep_arg->cosio + $sat->deep_arg->theta2 *
782
-                                 (-12 + 8 * $sat->deep_arg->cosio + 10 * $sat->deep_arg->theta2));
783
-                $f543 = 29.53125 * $sat->deep_arg->sinio * (-2 - 8 * $sat->deep_arg->cosio +
784
-                                 $sat->deep_arg->theta2 * (12 + 8 * $sat->deep_arg->cosio - 10 *
785
-                                           $sat->deep_arg->theta2));
786
-                $xno2 = $sat->dps->xnq * $sat->dps->xnq;
787
-                $ainv2 = $aqnv * $aqnv;
788
-                $temp1 = 3 * $xno2 * $ainv2;
789
-                $temp = $temp1 * Predict::root22;
790
-                $sat->dps->d2201 = $temp * $f220 * $g201;
791
-                $sat->dps->d2211 = $temp * $f221 * $g211;
792
-                $temp1 = $temp1 * $aqnv;
793
-                $temp = $temp1 * Predict::root32;
794
-                $sat->dps->d3210 = $temp * $f321 * $g310;
795
-                $sat->dps->d3222 = $temp * $f322 * $g322;
796
-                $temp1 = $temp1 * $aqnv;
797
-                $temp = 2 * $temp1 * Predict::root44;
798
-                $sat->dps->d4410 = $temp * $f441 * $g410;
799
-                $sat->dps->d4422 = $temp * $f442 * $g422;
800
-                $temp1 = $temp1 * $aqnv;
801
-                $temp = $temp1 * Predict::root52;
802
-                $sat->dps->d5220 = $temp * $f522 * $g520;
803
-                $sat->dps->d5232 = $temp * $f523 * $g532;
804
-                $temp = 2 * $temp1 * Predict::root54;
805
-                $sat->dps->d5421 = $temp * $f542 * $g521;
806
-                $sat->dps->d5433 = $temp * $f543 * $g533;
807
-                $sat->dps->xlamo = $xmao + $sat->tle->xnodeo + $sat->tle->xnodeo - $sat->dps->thgr - $sat->dps->thgr;
808
-                $bfact = $sat->deep_arg->xmdot + $sat->deep_arg->xnodot +
809
-                    $sat->deep_arg->xnodot - Predict::thdt - Predict::thdt;
810
-                $bfact = $bfact + $sat->dps->ssl + $sat->dps->ssh + $sat->dps->ssh;
811
-            } else {
812
-                $sat->flags |= self::RESONANCE_FLAG;
813
-                $sat->flags |= self::SYNCHRONOUS_FLAG;
814
-                /* Synchronous resonance terms initialization */
815
-                $g200 = 1 + $sat->deep_arg->eosq * (-2.5 + 0.8125 * $sat->deep_arg->eosq);
816
-                $g310 = 1 + 2 * $sat->deep_arg->eosq;
817
-                $g300 = 1 + $sat->deep_arg->eosq * (-6 + 6.60937 * $sat->deep_arg->eosq);
818
-                $f220 = 0.75 * (1 + $sat->deep_arg->cosio) * (1 + $sat->deep_arg->cosio);
819
-                $f311 = 0.9375 * $sat->deep_arg->sinio * $sat->deep_arg->sinio *
820
-                    (1 + 3 * $sat->deep_arg->cosio) - 0.75 * (1 + $sat->deep_arg->cosio);
821
-                $f330 = 1 + $sat->deep_arg->cosio;
822
-                $f330 = 1.875 * $f330 * $f330 * $f330;
823
-                $sat->dps->del1 = 3 * $sat->dps->xnq * $sat->dps->xnq * $aqnv * $aqnv;
824
-                $sat->dps->del2 = 2 * $sat->dps->del1 * $f220 * $g200 * Predict::q22;
825
-                $sat->dps->del3 = 3 * $sat->dps->del1 * $f330 * $g300 * Predict::q33 * $aqnv;
826
-                $sat->dps->del1 = $sat->dps->del1 * $f311 * $g310 * Predict::q31 * $aqnv;
827
-                $sat->dps->fasx2 = 0.13130908;
828
-                $sat->dps->fasx4 = 2.8843198;
829
-                $sat->dps->fasx6 = 0.37448087;
830
-                $sat->dps->xlamo = $xmao + $sat->tle->xnodeo + $sat->tle->omegao - $sat->dps->thgr;
831
-                $bfact = $sat->deep_arg->xmdot + $xpidot - Predict::thdt;
832
-                $bfact = $bfact + $sat->dps->ssl + $sat->dps->ssg + $sat->dps->ssh;
833
-            } /* End if( !(xnq < 0.0052359877) && (xnq > 0.0034906585) ) */
834
-
835
-            $sat->dps->xfact = $bfact - $sat->dps->xnq;
836
-
837
-            /* Initialize integrator */
838
-            $sat->dps->xli = $sat->dps->xlamo;
839
-            $sat->dps->xni = $sat->dps->xnq;
840
-            $sat->dps->atime = 0;
841
-            $sat->dps->stepp = 720;
842
-            $sat->dps->stepn = -720;
843
-            $sat->dps->step2 = 259200;
844
-            /* End case self::dpinit: */
845
-            return;
846
-
847
-        case self::dpsec: /* Entrance for deep space secular effects */
848
-            $sat->deep_arg->xll = $sat->deep_arg->xll + $sat->dps->ssl * $sat->deep_arg->t;
849
-            $sat->deep_arg->omgadf = $sat->deep_arg->omgadf + $sat->dps->ssg * $sat->deep_arg->t;
850
-            $sat->deep_arg->xnode = $sat->deep_arg->xnode + $sat->dps->ssh * $sat->deep_arg->t;
851
-            $sat->deep_arg->em = $sat->tle->eo + $sat->dps->sse * $sat->deep_arg->t;
852
-            $sat->deep_arg->xinc = $sat->tle->xincl + $sat->dps->ssi * $sat->deep_arg->t;
853
-            if ($sat->deep_arg->xinc < 0) {
854
-                $sat->deep_arg->xinc = -$sat->deep_arg->xinc;
855
-                $sat->deep_arg->xnode = $sat->deep_arg->xnode + Predict::pi;
856
-                $sat->deep_arg->omgadf = $sat->deep_arg->omgadf - Predict::pi;
857
-            }
858
-            if(~$sat->flags & self::RESONANCE_FLAG ) {
859
-                return;
860
-            }
861
-
862
-            do {
863
-                if ( ($sat->dps->atime == 0) ||
864
-                    (($sat->deep_arg->t >= 0) && ($sat->dps->atime < 0)) ||
865
-                    (($sat->deep_arg->t < 0) && ($sat->dps->atime >= 0)) ) {
866
-                    /* Epoch restart */
867
-                    if ($sat->deep_arg->t >= 0) {
868
-                        $delt = $sat->dps->stepp;
869
-                    } else {
870
-                        $delt = $sat->dps->stepn;
871
-                    }
872
-
873
-                    $sat->dps->atime = 0;
874
-                    $sat->dps->xni = $sat->dps->xnq;
875
-                    $sat->dps->xli = $sat->dps->xlamo;
876
-                } else {
877
-                    if (abs($sat->deep_arg->t) >= abs($sat->dps->atime)) {
878
-                        if ($sat->deep_arg->t > 0) {
879
-                            $delt = $sat->dps->stepp;
880
-                        } else {
881
-                            $delt = $sat->dps->stepn;
882
-                        }
883
-                    }
884
-                }
885
-
886
-                do {
887
-                    if (abs($sat->deep_arg->t - $sat->dps->atime) >= $sat->dps->stepp) {
888
-                        $sat->flags |= self::DO_LOOP_FLAG;
889
-                        $sat->flags &= ~self::EPOCH_RESTART_FLAG;
890
-                    }
891
-                    else {
892
-                        $ft = $sat->deep_arg->t - $sat->dps->atime;
893
-                        $sat->flags &= ~self::DO_LOOP_FLAG;
894
-                    }
895
-
896
-                    if (abs($sat->deep_arg->t) < abs($sat->dps->atime)) {
897
-                        if ($sat->deep_arg->t >= 0) {
898
-                            $delt = $sat->dps->stepn;
899
-                        } else {
900
-                            $delt = $sat->dps->stepp;
901
-                        }
902
-                        $sat->flags |= (self::DO_LOOP_FLAG | self::EPOCH_RESTART_FLAG);
903
-                    }
904
-
905
-                    /* Dot terms calculated */
906
-                    if ($sat->flags & self::SYNCHRONOUS_FLAG) {
907
-                        $xndot = $sat->dps->del1 * sin($sat->dps->xli - $sat->dps->fasx2) + $sat->dps->del2 * sin(2 * ($sat->dps->xli - $sat->dps->fasx4))
908
-                            + $sat->dps->del3 * sin(3 * ($sat->dps->xli - $sat->dps->fasx6));
909
-                        $xnddt = $sat->dps->del1 * cos($sat->dps->xli - $sat->dps->fasx2) + 2 * $sat->dps->del2 * cos(2 * ($sat->dps->xli - $sat->dps->fasx4))
910
-                            + 3 * $sat->dps->del3 * cos(3 * ($sat->dps->xli - $sat->dps->fasx6));
911
-                    } else {
912
-                        $xomi = $sat->dps->omegaq + $sat->deep_arg->omgdot * $sat->dps->atime;
913
-                        $x2omi = $xomi + $xomi;
914
-                        $x2li = $sat->dps->xli + $sat->dps->xli;
915
-                        $xndot = $sat->dps->d2201 * sin($x2omi + $sat->dps->xli - Predict::g22)
916
-                            + $sat->dps->d2211 * sin($sat->dps->xli - Predict::g22)
917
-                            + $sat->dps->d3210 * sin($xomi + $sat->dps->xli - Predict::g32)
918
-                            + $sat->dps->d3222 * sin(-$xomi + $sat->dps->xli - Predict::g32)
919
-                            + $sat->dps->d4410 * sin($x2omi + $x2li- Predict::g44)
920
-                            + $sat->dps->d4422 * sin($x2li- Predict::g44)
921
-                            + $sat->dps->d5220 * sin($xomi + $sat->dps->xli- Predict::g52)
922
-                            + $sat->dps->d5232 * sin(-$xomi + $sat->dps->xli- Predict::g52)
923
-                            + $sat->dps->d5421 * sin($xomi + $x2li - Predict::g54)
924
-                            + $sat->dps->d5433 * sin(-$xomi + $x2li - Predict::g54);
925
-                        $xnddt = $sat->dps->d2201 * cos($x2omi + $sat->dps->xli- Predict::g22)
926
-                            + $sat->dps->d2211 * cos($sat->dps->xli - Predict::g22)
927
-                            + $sat->dps->d3210 * cos($xomi + $sat->dps->xli - Predict::g32)
928
-                            + $sat->dps->d3222 * cos(-$xomi + $sat->dps->xli - Predict::g32)
929
-                            + $sat->dps->d5220 * cos($xomi + $sat->dps->xli - Predict::g52)
930
-                            + $sat->dps->d5232 * cos(-$xomi + $sat->dps->xli - Predict::g52)
931
-                            + 2 * ($sat->dps->d4410 * cos($x2omi + $x2li - Predict::g44)
932
-                                + $sat->dps->d4422 * cos($x2li - Predict::g44)
933
-                                + $sat->dps->d5421 * cos($xomi + $x2li - Predict::g54)
934
-                                + $sat->dps->d5433 * cos(-$xomi + $x2li - Predict::g54));
935
-                    } /* End of if (isFlagSet(SYNCHRONOUS_FLAG)) */
936
-
937
-                    $xldot = $sat->dps->xni + $sat->dps->xfact;
938
-                    $xnddt = $xnddt * $xldot;
939
-
940
-                    if ($sat->flags & self::DO_LOOP_FLAG) {
941
-                        $sat->dps->xli = $sat->dps->xli + $xldot * $delt + $xndot * $sat->dps->step2;
942
-                        $sat->dps->xni = $sat->dps->xni + $xndot * $delt + $xnddt * $sat->dps->step2;
943
-                        $sat->dps->atime = $sat->dps->atime + $delt;
944
-                    }
945
-                } while (($sat->flags & self::DO_LOOP_FLAG) &&
946
-                        (~$sat->flags & self::EPOCH_RESTART_FLAG));
947
-            }
948
-            while (($sat->flags & self::DO_LOOP_FLAG) && ($sat->flags & self::EPOCH_RESTART_FLAG));
949
-
950
-            $sat->deep_arg->xn = $sat->dps->xni + $xndot * $ft + $xnddt * $ft * $ft * 0.5;
951
-            $xl = $sat->dps->xli + $xldot * $ft + $xndot * $ft * $ft * 0.5;
952
-            $temp = -$sat->deep_arg->xnode + $sat->dps->thgr + $sat->deep_arg->t * Predict::thdt;
953
-
954
-            if (~$sat->flags & self::SYNCHRONOUS_FLAG) {
955
-                $sat->deep_arg->xll = $xl + $temp + $temp;
956
-            } else {
957
-                $sat->deep_arg->xll = $xl - $sat->deep_arg->omgadf + $temp;
958
-            }
959
-
960
-            return;
961
-            /* End case dpsec: */
962
-
963
-        case self::dpper: /* Entrance for lunar-solar periodics */
964
-            $sinis = sin($sat->deep_arg->xinc);
965
-            $cosis = cos($sat->deep_arg->xinc);
966
-            if (abs($sat->dps->savtsn - $sat->deep_arg->t) >= 30) {
967
-                $sat->dps->savtsn = $sat->deep_arg->t;
968
-                $zm = $sat->dps->zmos + Predict::zns * $sat->deep_arg->t;
969
-                $zf = $zm + 2 * Predict::zes * sin($zm);
970
-                $sinzf = sin($zf);
971
-                $f2 = 0.5 * $sinzf * $sinzf - 0.25;
972
-                $f3 = -0.5 * $sinzf * cos($zf);
973
-                $ses = $sat->dps->se2 * $f2 + $sat->dps->se3 * $f3;
974
-                $sis = $sat->dps->si2 * $f2 + $sat->dps->si3 * $f3;
975
-                $sls = $sat->dps->sl2 * $f2 + $sat->dps->sl3 * $f3 + $sat->dps->sl4 * $sinzf;
976
-                $sat->dps->sghs = $sat->dps->sgh2 * $f2 + $sat->dps->sgh3 * $f3 + $sat->dps->sgh4 * $sinzf;
977
-                $sat->dps->shs = $sat->dps->sh2 * $f2 + $sat->dps->sh3 * $f3;
978
-                $zm = $sat->dps->zmol + Predict::znl * $sat->deep_arg->t;
979
-                $zf = $zm + 2 * Predict::zel * sin($zm);
980
-                $sinzf = sin($zf);
981
-                $f2 = 0.5 * $sinzf * $sinzf - 0.25;
982
-                $f3 = -0.5 * $sinzf * cos($zf);
983
-                $sel = $sat->dps->ee2 * $f2 + $sat->dps->e3 * $f3;
984
-                $sil = $sat->dps->xi2 * $f2 + $sat->dps->xi3 * $f3;
985
-                $sll = $sat->dps->xl2 * $f2 + $sat->dps->xl3 * $f3 + $sat->dps->xl4 * $sinzf;
986
-                $sat->dps->sghl = $sat->dps->xgh2 * $f2 + $sat->dps->xgh3 * $f3 + $sat->dps->xgh4 * $sinzf;
987
-                $sat->dps->sh1 = $sat->dps->xh2 * $f2 + $sat->dps->xh3 * $f3;
988
-                $sat->dps->pe = $ses + $sel;
989
-                $sat->dps->pinc = $sis + $sil;
990
-                $sat->dps->pl = $sls + $sll;
991
-            }
992
-
993
-            $pgh = $sat->dps->sghs + $sat->dps->sghl;
994
-            $ph = $sat->dps->shs + $sat->dps->sh1;
995
-            $sat->deep_arg->xinc = $sat->deep_arg->xinc + $sat->dps->pinc;
996
-            $sat->deep_arg->em = $sat->deep_arg->em + $sat->dps->pe;
997
-
998
-            if ($sat->dps->xqncl >= 0.2) {
999
-                /* Apply periodics directly */
1000
-                $ph = $ph / $sat->deep_arg->sinio;
1001
-                $pgh = $pgh - $sat->deep_arg->cosio * $ph;
1002
-                $sat->deep_arg->omgadf = $sat->deep_arg->omgadf + $pgh;
1003
-                $sat->deep_arg->xnode = $sat->deep_arg->xnode + $ph;
1004
-                $sat->deep_arg->xll = $sat->deep_arg->xll + $sat->dps->pl;
1005
-            } else {
1006
-                /* Apply periodics with Lyddane modification */
1007
-                $sinok = sin($sat->deep_arg->xnode);
1008
-                $cosok = cos($sat->deep_arg->xnode);
1009
-                $alfdp = $sinis * $sinok;
1010
-                $betdp = $sinis * $cosok;
1011
-                $dalf = $ph * $cosok + $sat->dps->pinc * $cosis * $sinok;
1012
-                $dbet = -$ph * $sinok + $sat->dps->pinc * $cosis * $cosok;
1013
-                $alfdp = $alfdp + $dalf;
1014
-                $betdp = $betdp + $dbet;
1015
-                $sat->deep_arg->xnode = Predict_Math::FMod2p($sat->deep_arg->xnode);
1016
-                $xls = $sat->deep_arg->xll + $sat->deep_arg->omgadf + $cosis * $sat->deep_arg->xnode;
1017
-                $dls = $sat->dps->pl + $pgh - $sat->dps->pinc * $sat->deep_arg->xnode * $sinis;
1018
-                $xls = $xls + $dls;
1019
-                $xnoh = $sat->deep_arg->xnode;
1020
-                $sat->deep_arg->xnode = Predict_Math::AcTan($alfdp, $betdp);
1021
-
1022
-                /* This is a patch to Lyddane modification */
1023
-                /* suggested by Rob Matson. */
1024
-                if(abs($xnoh - $sat->deep_arg->xnode) > Predict::pi) {
1025
-                    if ($sat->deep_arg->xnode < $xnoh) {
1026
-                        $sat->deep_arg->xnode += Predict::twopi;
1027
-                    } else {
1028
-                        $sat->deep_arg->xnode -= Predict::twopi;
1029
-                    }
1030
-                }
1031
-
1032
-                $sat->deep_arg->xll = $sat->deep_arg->xll + $sat->dps->pl;
1033
-                $sat->deep_arg->omgadf = $xls - $sat->deep_arg->xll - cos($sat->deep_arg->xinc) *
1034
-                    $sat->deep_arg->xnode;
1035
-            } /* End case dpper: */
1036
-            return;
1037
-
1038
-        } /* End switch(ientry) */
1039
-
1040
-    } /* End of Deep() */
1041
-
1042
-    /**
1043
-     * Singleton
1044
-     *
1045
-     * @param Predict_Sat $sat The current satellite data instance
1046
-     *
1047
-     * @return Predict_SGPSDP
1048
-     */
1049
-    public static function getInstance(Predict_Sat $sat)
1050
-    {
1051
-        static $instances = array();
1052
-        $catnr = $sat->tle->catnr;
1053
-        if (!isset($instances[$catnr])) {
1054
-            $instances[$catnr] = new self();
1055
-        }
1056
-        return $instances[$catnr];
1057
-    }
59
+	const dpinit = 1; /* Deep-space initialization code */
60
+	const dpsec  = 2; /* Deep-space secular code        */
61
+	const dpper  = 3; /* Deep-space periodic code       */
62
+
63
+	/* SGP4 */
64
+	/* This function is used to calculate the position and velocity */
65
+	/* of near-earth (period < 225 minutes) satellites. tsince is   */
66
+	/* time since epoch in minutes, tle is a pointer to a tle_t     */
67
+	/* structure with Keplerian orbital elements and pos and vel    */
68
+	/* are vector_t structures returning ECI satellite position and */
69
+	/* velocity. Use Convert_Sat_State() to convert to km and km/s.*/
70
+	public function SGP4(Predict_Sat $sat, $tsince)
71
+	{
72
+		/* Initialization */
73
+		if (~$sat->flags & self::SGP4_INITIALIZED_FLAG) {
74
+			$sat->flags |= self::SGP4_INITIALIZED_FLAG;
75
+
76
+			/* Recover original mean motion (xnodp) and   */
77
+			/* semimajor axis (aodp) from input elements. */
78
+			$a1 = pow(Predict::xke / $sat->tle->xno, Predict::tothrd);
79
+			$sat->sgps->cosio = cos($sat->tle->xincl);
80
+			$theta2 = $sat->sgps->cosio * $sat->sgps->cosio;
81
+			$sat->sgps->x3thm1 = 3 * $theta2 - 1.0;
82
+			$eosq = $sat->tle->eo * $sat->tle->eo;
83
+			$betao2 = 1 - $eosq;
84
+			$betao = sqrt($betao2);
85
+			$del1 = 1.5 * Predict::ck2 * $sat->sgps->x3thm1 / ($a1 * $a1 * $betao * $betao2);
86
+			$ao = $a1 * (1 - $del1 * (0.5 * Predict::tothrd + $del1 * (1 + 134.0 / 81.0 * $del1)));
87
+			$delo = 1.5 * Predict::ck2 * $sat->sgps->x3thm1 / ($ao * $ao * $betao * $betao2);
88
+			$sat->sgps->xnodp = $sat->tle->xno / (1.0 + $delo);
89
+			$sat->sgps->aodp = $ao / (1.0 - $delo);
90
+
91
+			/* For perigee less than 220 kilometers, the "simple" flag is set */
92
+			/* and the equations are truncated to linear variation in sqrt a  */
93
+			/* and quadratic variation in mean anomaly.  Also, the c3 term,   */
94
+			/* the delta omega term, and the delta m term are dropped.        */
95
+			if (($sat->sgps->aodp * (1.0 - $sat->tle->eo) / Predict::ae) < (220.0 / Predict::xkmper + Predict::ae)) {
96
+				$sat->flags |= self::SIMPLE_FLAG;
97
+			} else {
98
+				$sat->flags &= ~self::SIMPLE_FLAG;
99
+			}
100
+
101
+			/* For perigee below 156 km, the       */
102
+			/* values of s and qoms2t are altered. */
103
+			$s4 = Predict::__s__;
104
+			$qoms24 = Predict::qoms2t;
105
+			$perige = ($sat->sgps->aodp * (1 - $sat->tle->eo) - Predict::ae) * Predict::xkmper;
106
+			if ($perige < 156.0) {
107
+				if ($perige <= 98.0) {
108
+					$s4 = 20.0;
109
+				} else {
110
+					$s4 = $perige - 78.0;
111
+				}
112
+				$qoms24 = pow((120.0 - $s4) * Predict::ae / Predict::xkmper, 4);
113
+				$s4 = $s4 / Predict::xkmper + Predict::ae;
114
+			}; /* FIXME FIXME: End of if(perige <= 98) NO WAY!!!! */
115
+
116
+			$pinvsq = 1.0 / ($sat->sgps->aodp * $sat->sgps->aodp * $betao2 * $betao2);
117
+			$tsi = 1.0 / ($sat->sgps->aodp - $s4);
118
+			$sat->sgps->eta = $sat->sgps->aodp * $sat->tle->eo * $tsi;
119
+			$etasq = $sat->sgps->eta * $sat->sgps->eta;
120
+			$eeta = $sat->tle->eo * $sat->sgps->eta;
121
+			$psisq = abs(1.0 - $etasq);
122
+			$coef = $qoms24 * pow($tsi, 4);
123
+			$coef1 = $coef / pow($psisq, 3.5);
124
+			$c2 = $coef1 * $sat->sgps->xnodp * ($sat->sgps->aodp *
125
+							(1.0 + 1.5 * $etasq + $eeta * (4.0 + $etasq)) +
126
+							0.75 * Predict::ck2 * $tsi / $psisq * $sat->sgps->x3thm1 *
127
+							(8.0 + 3.0 * $etasq * (8 + $etasq)));
128
+			$sat->sgps->c1 = $c2 * $sat->tle->bstar;
129
+			$sat->sgps->sinio = sin($sat->tle->xincl);
130
+			$a3ovk2 = -Predict::xj3 / Predict::ck2 * pow(Predict::ae, 3);
131
+			$c3 = $coef * $tsi * $a3ovk2 * $sat->sgps->xnodp * Predict::ae * $sat->sgps->sinio / $sat->tle->eo;
132
+			$sat->sgps->x1mth2 = 1.0 - $theta2;
133
+			$sat->sgps->c4 = 2.0 * $sat->sgps->xnodp * $coef1 * $sat->sgps->aodp * $betao2 *
134
+				($sat->sgps->eta * (2.0 + 0.5 * $etasq) +
135
+				 $sat->tle->eo * (0.5 + 2.0 * $etasq) -
136
+				 2.0 * Predict::ck2 * $tsi / ($sat->sgps->aodp * $psisq) *
137
+				 (-3.0 * $sat->sgps->x3thm1 * (1.0 - 2.0 * $eeta + $etasq * (1.5 - 0.5 * $eeta)) +
138
+				  0.75 * $sat->sgps->x1mth2 * (2.0 * $etasq - $eeta * (1.0 + $etasq)) *
139
+				  cos(2.0 * $sat->tle->omegao)));
140
+			$sat->sgps->c5 = 2.0 * $coef1 * $sat->sgps->aodp * $betao2 *
141
+				(1.0 + 2.75 * ($etasq + $eeta) + $eeta * $etasq);
142
+			$theta4 = $theta2 * $theta2;
143
+			$temp1 = 3.0 * Predict::ck2 * $pinvsq * $sat->sgps->xnodp;
144
+			$temp2 = $temp1 * Predict::ck2 * $pinvsq;
145
+			$temp3 = 1.25 * Predict::ck4 * $pinvsq * $pinvsq * $sat->sgps->xnodp;
146
+			$sat->sgps->xmdot = $sat->sgps->xnodp + 0.5 * $temp1 * $betao * $sat->sgps->x3thm1 +
147
+				0.0625 * $temp2 * $betao * (13.0 - 78.0 * $theta2 + 137.0 * $theta4);
148
+			$x1m5th = 1.0 - 5.0 * $theta2;
149
+			$sat->sgps->omgdot = -0.5 * $temp1 * $x1m5th +
150
+				0.0625 * $temp2 * (7.0 - 114.0 * $theta2 + 395.0 * $theta4) +
151
+				$temp3 * (3.0 - 36.0 * $theta2 + 49.0 * $theta4);
152
+			$xhdot1 = -$temp1 * $sat->sgps->cosio;
153
+			$sat->sgps->xnodot = $xhdot1 + (0.5 * $temp2 * (4.0 - 19.0 * $theta2) +
154
+							 2.0 * $temp3 * (3.0 - 7.0 * $theta2)) * $sat->sgps->cosio;
155
+			$sat->sgps->omgcof = $sat->tle->bstar * $c3 * cos($sat->tle->omegao);
156
+			$sat->sgps->xmcof = -Predict::tothrd * $coef * $sat->tle->bstar * Predict::ae / $eeta;
157
+			$sat->sgps->xnodcf = 3.5 * $betao2 * $xhdot1 * $sat->sgps->c1;
158
+			$sat->sgps->t2cof = 1.5 * $sat->sgps->c1;
159
+			$sat->sgps->xlcof = 0.125 * $a3ovk2 * $sat->sgps->sinio *
160
+				(3.0 + 5.0 * $sat->sgps->cosio) / (1.0 + $sat->sgps->cosio);
161
+			$sat->sgps->aycof = 0.25 * $a3ovk2 * $sat->sgps->sinio;
162
+			$sat->sgps->delmo = pow(1.0 + $sat->sgps->eta * cos($sat->tle->xmo), 3);
163
+			$sat->sgps->sinmo = sin($sat->tle->xmo);
164
+			$sat->sgps->x7thm1 = 7.0 * $theta2 - 1.0;
165
+			if (~$sat->flags & self::SIMPLE_FLAG) {
166
+				$c1sq = $sat->sgps->c1 * $sat->sgps->c1;
167
+				$sat->sgps->d2 = 4.0 * $sat->sgps->aodp * $tsi * $c1sq;
168
+				$temp = $sat->sgps->d2 * $tsi * $sat->sgps->c1 / 3.0;
169
+				$sat->sgps->d3 = (17.0 * $sat->sgps->aodp + $s4) * $temp;
170
+				$sat->sgps->d4 = 0.5 * $temp * $sat->sgps->aodp * $tsi *
171
+					(221.0 * $sat->sgps->aodp + 31.0 * $s4) * $sat->sgps->c1;
172
+				$sat->sgps->t3cof = $sat->sgps->d2 + 2.0 * $c1sq;
173
+				$sat->sgps->t4cof = 0.25 * (3.0 * $sat->sgps->d3 + $sat->sgps->c1 *
174
+							  (12.0 * $sat->sgps->d2 + 10.0 * $c1sq));
175
+				$sat->sgps->t5cof = 0.2 * (3.0 * $sat->sgps->d4 +
176
+							 12.0 * $sat->sgps->c1 * $sat->sgps->d3 +
177
+							 6.0 * $sat->sgps->d2 * $sat->sgps->d2 +
178
+							 15.0 * $c1sq * (2.0 * $sat->sgps->d2 + $c1sq));
179
+			}; /* End of if (isFlagClear(SIMPLE_FLAG)) */
180
+		}; /* End of SGP4() initialization */
181
+
182
+		/* Update for secular gravity and atmospheric drag. */
183
+		$xmdf = $sat->tle->xmo + $sat->sgps->xmdot * $tsince;
184
+		$omgadf = $sat->tle->omegao + $sat->sgps->omgdot * $tsince;
185
+		$xnoddf = $sat->tle->xnodeo + $sat->sgps->xnodot * $tsince;
186
+		$omega = $omgadf;
187
+		$xmp = $xmdf;
188
+		$tsq = $tsince * $tsince;
189
+		$xnode = $xnoddf + $sat->sgps->xnodcf * $tsq;
190
+		$tempa = 1.0 - $sat->sgps->c1 * $tsince;
191
+		$tempe = $sat->tle->bstar * $sat->sgps->c4 * $tsince;
192
+		$templ = $sat->sgps->t2cof * $tsq;
193
+		if (~$sat->flags & self::SIMPLE_FLAG) {
194
+			$delomg = $sat->sgps->omgcof * $tsince;
195
+			$delm = $sat->sgps->xmcof * (pow(1 + $sat->sgps->eta * cos($xmdf), 3) - $sat->sgps->delmo);
196
+			$temp = $delomg + $delm;
197
+			$xmp = $xmdf + $temp;
198
+			$omega = $omgadf - $temp;
199
+			$tcube = $tsq * $tsince;
200
+			$tfour = $tsince * $tcube;
201
+			$tempa = $tempa - $sat->sgps->d2 * $tsq - $sat->sgps->d3 * $tcube - $sat->sgps->d4 * $tfour;
202
+			$tempe = $tempe + $sat->tle->bstar * $sat->sgps->c5 * (sin($xmp) - $sat->sgps->sinmo);
203
+			$templ = $templ + $sat->sgps->t3cof * $tcube + $tfour *
204
+				($sat->sgps->t4cof + $tsince * $sat->sgps->t5cof);
205
+		}; /* End of if (isFlagClear(SIMPLE_FLAG)) */
206
+
207
+		$a = $sat->sgps->aodp * pow($tempa, 2);
208
+		$e = $sat->tle->eo - $tempe;
209
+		$xl = $xmp + $omega + $xnode + $sat->sgps->xnodp * $templ;
210
+		$beta = sqrt(1.0 - ($e * $e));
211
+		$xn = Predict::xke / pow($a, 1.5);
212
+
213
+		/* Long period periodics */
214
+		$axn = $e * cos($omega);
215
+		$temp = 1.0 / ($a * $beta * $beta);
216
+		$xll = $temp * $sat->sgps->xlcof * $axn;
217
+		$aynl = $temp * $sat->sgps->aycof;
218
+		$xlt = $xl + $xll;
219
+		$ayn = $e * sin($omega) + $aynl;
220
+
221
+		/* Solve Kepler's' Equation */
222
+		$capu = Predict_Math::FMod2p($xlt - $xnode);
223
+		$temp2 = $capu;
224
+
225
+		$i = 0;
226
+		do {
227
+			$sinepw = sin($temp2);
228
+			$cosepw = cos($temp2);
229
+			$temp3 = $axn * $sinepw;
230
+			$temp4 = $ayn * $cosepw;
231
+			$temp5 = $axn * $cosepw;
232
+			$temp6 = $ayn * $sinepw;
233
+			$epw = ($capu - $temp4 + $temp3 - $temp2) / (1.0 - $temp5 - $temp6) + $temp2;
234
+			if (abs($epw - $temp2) <= Predict::e6a) {
235
+				break;
236
+			}
237
+			$temp2 = $epw;
238
+		} while ($i++ < 10);
239
+
240
+		/* Short period preliminary quantities */
241
+		$ecose = $temp5 + $temp6;
242
+		$esine = $temp3 - $temp4;
243
+		$elsq = $axn * $axn + $ayn * $ayn;
244
+		$temp = 1.0 - $elsq;
245
+		$pl = $a * $temp;
246
+		$r = $a * (1.0 - $ecose);
247
+		$temp1 = 1.0 / $r;
248
+		$rdot = Predict::xke * sqrt($a) * $esine * $temp1;
249
+		$rfdot = Predict::xke * sqrt($pl) * $temp1;
250
+		$temp2 = $a * $temp1;
251
+		$betal = sqrt($temp);
252
+		$temp3 = 1.0 / (1.0 + $betal);
253
+		$cosu = $temp2 * ($cosepw - $axn + $ayn * $esine * $temp3);
254
+		$sinu = $temp2 * ($sinepw - $ayn - $axn * $esine * $temp3);
255
+		$u = Predict_Math::AcTan($sinu, $cosu);
256
+		$sin2u = 2.0 * $sinu * $cosu;
257
+		$cos2u = 2.0 * $cosu * $cosu - 1.0;
258
+		$temp = 1.0 / $pl;
259
+		$temp1 = Predict::ck2 * $temp;
260
+		$temp2 = $temp1 * $temp;
261
+
262
+		/* Update for short periodics */
263
+		$rk = $r * (1.0 - 1.5 * $temp2 * $betal * $sat->sgps->x3thm1) +
264
+			0.5 * $temp1 * $sat->sgps->x1mth2 * $cos2u;
265
+		$uk = $u - 0.25 * $temp2 * $sat->sgps->x7thm1 * $sin2u;
266
+		$xnodek = $xnode + 1.5 * $temp2 * $sat->sgps->cosio * $sin2u;
267
+		$xinck = $sat->tle->xincl + 1.5 * $temp2 * $sat->sgps->cosio * $sat->sgps->sinio * $cos2u;
268
+		$rdotk = $rdot - $xn * $temp1 * $sat->sgps->x1mth2 * $sin2u;
269
+		$rfdotk = $rfdot + $xn * $temp1 * ($sat->sgps->x1mth2 * $cos2u + 1.5 * $sat->sgps->x3thm1);
270
+
271
+
272
+		/* Orientation vectors */
273
+		$sinuk = sin($uk);
274
+		$cosuk = cos($uk);
275
+		$sinik = sin($xinck);
276
+		$cosik = cos($xinck);
277
+		$sinnok = sin($xnodek);
278
+		$cosnok = cos($xnodek);
279
+		$xmx = -$sinnok * $cosik;
280
+		$xmy = $cosnok * $cosik;
281
+		$ux = $xmx * $sinuk + $cosnok * $cosuk;
282
+		$uy = $xmy * $sinuk + $sinnok * $cosuk;
283
+		$uz = $sinik * $sinuk;
284
+		$vx = $xmx * $cosuk - $cosnok * $sinuk;
285
+		$vy = $xmy * $cosuk - $sinnok * $sinuk;
286
+		$vz = $sinik * $cosuk;
287
+
288
+		/* Position and velocity */
289
+		$sat->pos->x = $rk * $ux;
290
+		$sat->pos->y = $rk * $uy;
291
+		$sat->pos->z = $rk * $uz;
292
+		$sat->vel->x = $rdotk * $ux + $rfdotk * $vx;
293
+		$sat->vel->y = $rdotk * $uy + $rfdotk * $vy;
294
+		$sat->vel->z = $rdotk * $uz + $rfdotk * $vz;
295
+
296
+		$sat->phase = $xlt - $xnode - $omgadf + Predict::twopi;
297
+		if ($sat->phase < 0) {
298
+			$sat->phase += Predict::twopi;
299
+		}
300
+		$sat->phase = Predict_Math::FMod2p($sat->phase);
301
+
302
+		$sat->tle->omegao1 = $omega;
303
+		$sat->tle->xincl1  = $xinck;
304
+		$sat->tle->xnodeo1 = $xnodek;
305
+
306
+	} /*SGP4*/
307
+
308
+	/* SDP4 */
309
+	/* This function is used to calculate the position and velocity */
310
+	/* of deep-space (period > 225 minutes) satellites. tsince is   */
311
+	/* time since epoch in minutes, tle is a pointer to a tle_t     */
312
+	/* structure with Keplerian orbital elements and pos and vel    */
313
+	/* are vector_t structures returning ECI satellite position and */
314
+	/* velocity. Use Convert_Sat_State() to convert to km and km/s. */
315
+	public function SDP4(Predict_Sat $sat, $tsince)
316
+	{
317
+		/* Initialization */
318
+		if (~$sat->flags & self::SDP4_INITIALIZED_FLAG) {
319
+
320
+			$sat->flags |= self::SDP4_INITIALIZED_FLAG;
321
+
322
+			/* Recover original mean motion (xnodp) and   */
323
+			/* semimajor axis (aodp) from input elements. */
324
+			$a1 = pow(Predict::xke / $sat->tle->xno, Predict::tothrd);
325
+			$sat->deep_arg->cosio = cos($sat->tle->xincl);
326
+			$sat->deep_arg->theta2 = $sat->deep_arg->cosio * $sat->deep_arg->cosio;
327
+			$sat->sgps->x3thm1 = 3.0 * $sat->deep_arg->theta2 - 1.0;
328
+			$sat->deep_arg->eosq = $sat->tle->eo * $sat->tle->eo;
329
+			$sat->deep_arg->betao2 = 1.0 - $sat->deep_arg->eosq;
330
+			$sat->deep_arg->betao = sqrt($sat->deep_arg->betao2);
331
+			$del1 = 1.5 * Predict::ck2 * $sat->sgps->x3thm1 /
332
+				($a1 * $a1 * $sat->deep_arg->betao * $sat->deep_arg->betao2);
333
+			$ao = $a1 * (1.0 - $del1 * (0.5 * Predict::tothrd + $del1 * (1.0 + 134.0 / 81.0 * $del1)));
334
+			$delo = 1.5 * Predict::ck2 * $sat->sgps->x3thm1 /
335
+				($ao * $ao * $sat->deep_arg->betao * $sat->deep_arg->betao2);
336
+			$sat->deep_arg->xnodp = $sat->tle->xno / (1.0 + $delo);
337
+			$sat->deep_arg->aodp = $ao / (1.0 - $delo);
338
+
339
+			/* For perigee below 156 km, the values */
340
+			/* of s and qoms2t are altered.         */
341
+			$s4 = Predict::__s__;
342
+			$qoms24 = Predict::qoms2t;
343
+			$perige = ($sat->deep_arg->aodp * (1.0 - $sat->tle->eo) - Predict::ae) * Predict::xkmper;
344
+			if ($perige < 156.0) {
345
+				if ($perige <= 98.0) {
346
+					$s4 = 20.0;
347
+				} else {
348
+					$s4 = $perige - 78.0;
349
+				}
350
+				$qoms24 = pow((120.0 - $s4) * Predict::ae / Predict::xkmper, 4);
351
+				$s4 = $s4 / Predict::xkmper + Predict::ae;
352
+			}
353
+			$pinvsq = 1.0 / ($sat->deep_arg->aodp * $sat->deep_arg->aodp *
354
+					$sat->deep_arg->betao2 * $sat->deep_arg->betao2);
355
+			$sat->deep_arg->sing = sin($sat->tle->omegao);
356
+			$sat->deep_arg->cosg = cos($sat->tle->omegao);
357
+			$tsi = 1.0 / ($sat->deep_arg->aodp - $s4);
358
+			$eta = $sat->deep_arg->aodp * $sat->tle->eo * $tsi;
359
+			$etasq = $eta * $eta;
360
+			$eeta = $sat->tle->eo * $eta;
361
+			$psisq = abs(1.0 - $etasq);
362
+			$coef = $qoms24 * pow($tsi, 4);
363
+			$coef1 = $coef / pow($psisq, 3.5);
364
+			$c2 = $coef1 * $sat->deep_arg->xnodp * ($sat->deep_arg->aodp *
365
+								(1.0 + 1.5 * $etasq + $eeta *
366
+								 (4.0 + $etasq)) + 0.75 * Predict::ck2 * $tsi / $psisq *
367
+								$sat->sgps->x3thm1 * (8.0 + 3.0 * $etasq *
368
+										(8.0 + $etasq)));
369
+			$sat->sgps->c1 = $sat->tle->bstar * $c2;
370
+			$sat->deep_arg->sinio = sin($sat->tle->xincl);
371
+			$a3ovk2 = -Predict::xj3 / Predict::ck2 * pow(Predict::ae, 3);
372
+			$sat->sgps->x1mth2 = 1.0 - $sat->deep_arg->theta2;
373
+			$sat->sgps->c4 = 2.0 * $sat->deep_arg->xnodp * $coef1 *
374
+				$sat->deep_arg->aodp * $sat->deep_arg->betao2 *
375
+				($eta * (2.0 + 0.5 * $etasq) + $sat->tle->eo *
376
+				 (0.5 + 2.0 * $etasq) - 2.0 * Predict::ck2 * $tsi /
377
+				 ($sat->deep_arg->aodp * $psisq) * (-3.0 * $sat->sgps->x3thm1 *
378
+								 (1.0 - 2.0 * $eeta + $etasq *
379
+								  (1.5 - 0.5 * $eeta)) +
380
+								 0.75 * $sat->sgps->x1mth2 *
381
+								 (2.0 * $etasq - $eeta * (1.0 + $etasq)) *
382
+								 cos(2.0 * $sat->tle->omegao)));
383
+			$theta4 = $sat->deep_arg->theta2 * $sat->deep_arg->theta2;
384
+			$temp1 = 3.0 * Predict::ck2 * $pinvsq * $sat->deep_arg->xnodp;
385
+			$temp2 = $temp1 * Predict::ck2 * $pinvsq;
386
+			$temp3 = 1.25 * Predict::ck4 * $pinvsq * $pinvsq * $sat->deep_arg->xnodp;
387
+			$sat->deep_arg->xmdot = $sat->deep_arg->xnodp + 0.5 * $temp1 * $sat->deep_arg->betao *
388
+				$sat->sgps->x3thm1 + 0.0625 * $temp2 * $sat->deep_arg->betao *
389
+				(13.0 - 78.0 * $sat->deep_arg->theta2 + 137.0 * $theta4);
390
+			$x1m5th = 1.0 - 5.0 * $sat->deep_arg->theta2;
391
+			$sat->deep_arg->omgdot = -0.5 * $temp1 * $x1m5th + 0.0625 * $temp2 *
392
+							(7.0 - 114.0 * $sat->deep_arg->theta2 + 395.0 * $theta4) +
393
+						$temp3 * (3.0 - 36.0 * $sat->deep_arg->theta2 + 49.0 * $theta4);
394
+			$xhdot1 = -$temp1 * $sat->deep_arg->cosio;
395
+			$sat->deep_arg->xnodot = $xhdot1 + (0.5 * $temp2 * (4.0 - 19.0 * $sat->deep_arg->theta2) +
396
+							 2.0 * $temp3 * (3.0 - 7.0 * $sat->deep_arg->theta2)) *
397
+				$sat->deep_arg->cosio;
398
+			$sat->sgps->xnodcf = 3.5 * $sat->deep_arg->betao2 * $xhdot1 * $sat->sgps->c1;
399
+			$sat->sgps->t2cof = 1.5 * $sat->sgps->c1;
400
+			$sat->sgps->xlcof = 0.125 * $a3ovk2 * $sat->deep_arg->sinio *
401
+				(3.0 + 5.0 * $sat->deep_arg->cosio) / (1.0 + $sat->deep_arg->cosio);
402
+			$sat->sgps->aycof = 0.25 * $a3ovk2 * $sat->deep_arg->sinio;
403
+			$sat->sgps->x7thm1 = 7.0 * $sat->deep_arg->theta2 - 1.0;
404
+
405
+			/* initialize Deep() */
406
+			$this->Deep(self::dpinit, $sat);
407
+		}; /*End of SDP4() initialization */
408
+
409
+		/* Update for secular gravity and atmospheric drag */
410
+		$xmdf = $sat->tle->xmo + $sat->deep_arg->xmdot * $tsince;
411
+		$sat->deep_arg->omgadf = $sat->tle->omegao + $sat->deep_arg->omgdot * $tsince;
412
+		$xnoddf = $sat->tle->xnodeo + $sat->deep_arg->xnodot * $tsince;
413
+		$tsq = $tsince * $tsince;
414
+		$sat->deep_arg->xnode = $xnoddf + $sat->sgps->xnodcf * $tsq;
415
+		$tempa = 1.0 - $sat->sgps->c1 * $tsince;
416
+		$tempe = $sat->tle->bstar * $sat->sgps->c4 * $tsince;
417
+		$templ = $sat->sgps->t2cof * $tsq;
418
+		$sat->deep_arg->xn = $sat->deep_arg->xnodp;
419
+
420
+		/* Update for deep-space secular effects */
421
+		$sat->deep_arg->xll = $xmdf;
422
+		$sat->deep_arg->t = $tsince;
423
+
424
+		$this->Deep(self::dpsec, $sat);
425
+
426
+		$xmdf = $sat->deep_arg->xll;
427
+		$a = pow(Predict::xke / $sat->deep_arg->xn, Predict::tothrd) * $tempa * $tempa;
428
+		$sat->deep_arg->em = $sat->deep_arg->em - $tempe;
429
+		$xmam = $xmdf + $sat->deep_arg->xnodp * $templ;
430
+
431
+		/* Update for deep-space periodic effects */
432
+		$sat->deep_arg->xll = $xmam;
433
+
434
+		$this->Deep(self::dpper, $sat);
435
+
436
+		$xmam = $sat->deep_arg->xll;
437
+		$xl = $xmam + $sat->deep_arg->omgadf + $sat->deep_arg->xnode;
438
+		$beta = sqrt(1.0 - $sat->deep_arg->em * $sat->deep_arg->em);
439
+		$sat->deep_arg->xn = Predict::xke / pow($a, 1.5);
440
+
441
+		/* Long period periodics */
442
+		$axn = $sat->deep_arg->em * cos($sat->deep_arg->omgadf);
443
+		$temp = 1.0 / ($a * $beta * $beta);
444
+		$xll = $temp * $sat->sgps->xlcof * $axn;
445
+		$aynl = $temp * $sat->sgps->aycof;
446
+		$xlt = $xl + $xll;
447
+		$ayn = $sat->deep_arg->em * sin($sat->deep_arg->omgadf) + $aynl;
448
+
449
+		/* Solve Kepler's Equation */
450
+		$capu = Predict_Math::FMod2p ($xlt - $sat->deep_arg->xnode);
451
+		$temp2 = $capu;
452
+
453
+		$i = 0;
454
+		do {
455
+			$sinepw = sin($temp2);
456
+			$cosepw = cos($temp2);
457
+			$temp3 = $axn * $sinepw;
458
+			$temp4 = $ayn * $cosepw;
459
+			$temp5 = $axn * $cosepw;
460
+			$temp6 = $ayn * $sinepw;
461
+			$epw = ($capu - $temp4 + $temp3 - $temp2) / (1.0 - $temp5 - $temp6) + $temp2;
462
+			if (abs($epw - $temp2) <= Predict::e6a) {
463
+				break;
464
+			}
465
+			$temp2 = $epw;
466
+		} while ($i++ < 10);
467
+
468
+		/* Short period preliminary quantities */
469
+		$ecose = $temp5 + $temp6;
470
+		$esine = $temp3 - $temp4;
471
+		$elsq = $axn * $axn + $ayn * $ayn;
472
+		$temp = 1.0 - $elsq;
473
+		$pl = $a * $temp;
474
+		$r = $a * (1.0 - $ecose);
475
+		$temp1 = 1.0 / $r;
476
+		$rdot = Predict::xke * sqrt($a) * $esine * $temp1;
477
+		$rfdot = Predict::xke * sqrt($pl) * $temp1;
478
+		$temp2 = $a * $temp1;
479
+		$betal = sqrt($temp);
480
+		$temp3 = 1.0 / (1.0 + $betal);
481
+		$cosu = $temp2 * ($cosepw - $axn + $ayn * $esine * $temp3);
482
+		$sinu = $temp2 * ($sinepw - $ayn - $axn * $esine * $temp3);
483
+		$u = Predict_Math::AcTan($sinu, $cosu);
484
+		$sin2u = 2.0 * $sinu * $cosu;
485
+		$cos2u = 2.0 * $cosu * $cosu - 1.0;
486
+		$temp = 1.0 / $pl;
487
+		$temp1 = Predict::ck2 * $temp;
488
+		$temp2 = $temp1 * $temp;
489
+
490
+		/* Update for short periodics */
491
+		$rk = $r * (1.0 - 1.5 * $temp2 * $betal * $sat->sgps->x3thm1) +
492
+			 0.5 * $temp1 * $sat->sgps->x1mth2 * $cos2u;
493
+		$uk = $u - 0.25 * $temp2 * $sat->sgps->x7thm1 * $sin2u;
494
+		$xnodek = $sat->deep_arg->xnode + 1.5 * $temp2 * $sat->deep_arg->cosio * $sin2u;
495
+		$xinck = $sat->deep_arg->xinc + 1.5 * $temp2 *
496
+			 $sat->deep_arg->cosio * $sat->deep_arg->sinio * $cos2u;
497
+		$rdotk = $rdot - $sat->deep_arg->xn * $temp1 * $sat->sgps->x1mth2 * $sin2u;
498
+		$rfdotk = $rfdot + $sat->deep_arg->xn * $temp1 *
499
+			 ($sat->sgps->x1mth2 * $cos2u + 1.5 * $sat->sgps->x3thm1);
500
+
501
+		/* Orientation vectors */
502
+		$sinuk = sin($uk);
503
+		$cosuk = cos($uk);
504
+		$sinik = sin($xinck);
505
+		$cosik = cos($xinck);
506
+		$sinnok = sin($xnodek);
507
+		$cosnok = cos($xnodek);
508
+		$xmx = -$sinnok * $cosik;
509
+		$xmy = $cosnok * $cosik;
510
+		$ux = $xmx * $sinuk + $cosnok * $cosuk;
511
+		$uy = $xmy * $sinuk + $sinnok * $cosuk;
512
+		$uz = $sinik * $sinuk;
513
+		$vx = $xmx * $cosuk - $cosnok * $sinuk;
514
+		$vy = $xmy * $cosuk - $sinnok * $sinuk;
515
+		$vz = $sinik * $cosuk;
516
+
517
+		/* Position and velocity */
518
+		$sat->pos->x = $rk * $ux;
519
+		$sat->pos->y = $rk * $uy;
520
+		$sat->pos->z = $rk * $uz;
521
+		$sat->vel->x = $rdotk * $ux + $rfdotk * $vx;
522
+		$sat->vel->y = $rdotk * $uy + $rfdotk * $vy;
523
+		$sat->vel->z = $rdotk * $uz + $rfdotk * $vz;
524
+
525
+		/* Phase in rads */
526
+		$sat->phase = $xlt - $sat->deep_arg->xnode - $sat->deep_arg->omgadf + Predict::twopi;
527
+		if ($sat->phase < 0.0) {
528
+			$sat->phase += Predict::twopi;
529
+		}
530
+		$sat->phase = Predict_Math::FMod2p ($sat->phase);
531
+
532
+		$sat->tle->omegao1 = $sat->deep_arg->omgadf;
533
+		$sat->tle->xincl1  = $sat->deep_arg->xinc;
534
+		$sat->tle->xnodeo1 = $sat->deep_arg->xnode;
535
+	} /* SDP4 */
536
+
537
+
538
+	/* DEEP */
539
+	/* This function is used by SDP4 to add lunar and solar */
540
+	/* perturbation effects to deep-space orbit objects.    */
541
+	public function Deep($ientry, Predict_Sat $sat)
542
+	{
543
+		switch ($ientry) {
544
+		case self::dpinit : /* Entrance for deep space initialization */
545
+			$sat->dps->thgr = Predict_Time::ThetaG($sat->tle->epoch, $sat->deep_arg);
546
+			$eq = $sat->tle->eo;
547
+			$sat->dps->xnq = $sat->deep_arg->xnodp;
548
+			$aqnv = 1.0 / $sat->deep_arg->aodp;
549
+			$sat->dps->xqncl = $sat->tle->xincl;
550
+			$xmao = $sat->tle->xmo;
551
+			$xpidot = $sat->deep_arg->omgdot + $sat->deep_arg->xnodot;
552
+			$sinq = sin($sat->tle->xnodeo);
553
+			$cosq = cos($sat->tle->xnodeo);
554
+			$sat->dps->omegaq = $sat->tle->omegao;
555
+			$sat->dps->preep = 0;
556
+
557
+			/* Initialize lunar solar terms */
558
+			$day = $sat->deep_arg->ds50 + 18261.5;  /* Days since 1900 Jan 0.5 */
559
+			if ($day != $sat->dps->preep) {
560
+				$sat->dps->preep = $day;
561
+				$xnodce = 4.5236020 - 9.2422029E-4 * $day;
562
+				$stem = sin($xnodce);
563
+				$ctem = cos($xnodce);
564
+				$sat->dps->zcosil = 0.91375164 - 0.03568096 * $ctem;
565
+				$sat->dps->zsinil = sqrt(1.0 - $sat->dps->zcosil * $sat->dps->zcosil);
566
+				$sat->dps->zsinhl = 0.089683511 * $stem / $sat->dps->zsinil;
567
+				$sat->dps->zcoshl = sqrt(1.0 - $sat->dps->zsinhl * $sat->dps->zsinhl);
568
+				$c = 4.7199672 + 0.22997150 * $day;
569
+				$gam = 5.8351514 + 0.0019443680 * $day;
570
+				$sat->dps->zmol = Predict_Math::FMod2p($c - $gam);
571
+				$zx = 0.39785416 * $stem / $sat->dps->zsinil;
572
+				$zy = $sat->dps->zcoshl * $ctem + 0.91744867 * $sat->dps->zsinhl * $stem;
573
+				$zx = Predict_Math::AcTan($zx, $zy);
574
+				$zx = $gam + $zx - $xnodce;
575
+				$sat->dps->zcosgl = cos($zx);
576
+				$sat->dps->zsingl = sin($zx);
577
+				$sat->dps->zmos = 6.2565837 + 0.017201977 * $day;
578
+				$sat->dps->zmos = Predict_Math::FMod2p($sat->dps->zmos);
579
+			} /* End if(day != preep) */
580
+
581
+			/* Do solar terms */
582
+			$sat->dps->savtsn = 1E20;
583
+			$zcosg = Predict::zcosgs;
584
+			$zsing = Predict::zsings;
585
+			$zcosi = Predict::zcosis;
586
+			$zsini = Predict::zsinis;
587
+			$zcosh = $cosq;
588
+			$zsinh = $sinq;
589
+			$cc = Predict::c1ss;
590
+			$zn = Predict::zns;
591
+			$ze = Predict::zes;
592
+			$zmo = $sat->dps->zmos;
593
+			$xnoi = 1.0 / $sat->dps->xnq;
594
+
595
+			/* Loop breaks when Solar terms are done a second */
596
+			/* time, after Lunar terms are initialized        */
597
+			for(;;) {
598
+				/* Solar terms done again after Lunar terms are done */
599
+				$a1 = $zcosg * $zcosh + $zsing * $zcosi * $zsinh;
600
+				$a3 = -$zsing * $zcosh + $zcosg * $zcosi * $zsinh;
601
+				$a7 = -$zcosg * $zsinh + $zsing * $zcosi * $zcosh;
602
+				$a8 = $zsing * $zsini;
603
+				$a9 = $zsing * $zsinh + $zcosg * $zcosi * $zcosh;
604
+				$a10 = $zcosg * $zsini;
605
+				$a2 = $sat->deep_arg->cosio * $a7 + $sat->deep_arg->sinio * $a8;
606
+				$a4 = $sat->deep_arg->cosio * $a9 + $sat->deep_arg->sinio * $a10;
607
+				$a5 = -$sat->deep_arg->sinio * $a7 + $sat->deep_arg->cosio * $a8;
608
+				$a6 = -$sat->deep_arg->sinio * $a9 + $sat->deep_arg->cosio * $a10;
609
+				$x1 = $a1 * $sat->deep_arg->cosg + $a2 * $sat->deep_arg->sing;
610
+				$x2 = $a3 * $sat->deep_arg->cosg + $a4 * $sat->deep_arg->sing;
611
+				$x3 = -$a1 * $sat->deep_arg->sing + $a2 * $sat->deep_arg->cosg;
612
+				$x4 = -$a3 * $sat->deep_arg->sing + $a4 * $sat->deep_arg->cosg;
613
+				$x5 = $a5 * $sat->deep_arg->sing;
614
+				$x6 = $a6 * $sat->deep_arg->sing;
615
+				$x7 = $a5 * $sat->deep_arg->cosg;
616
+				$x8 = $a6 * $sat->deep_arg->cosg;
617
+				$z31 = 12 * $x1 * $x1 - 3 * $x3 * $x3;
618
+				$z32 = 24 * $x1 * $x2 - 6 * $x3 * $x4;
619
+				$z33 = 12 * $x2 * $x2 - 3 * $x4 * $x4;
620
+				$z1 = 3 * ($a1 * $a1 + $a2 * $a2) + $z31 * $sat->deep_arg->eosq;
621
+				$z2 = 6 * ($a1 * $a3 + $a2 * $a4) + $z32 * $sat->deep_arg->eosq;
622
+				$z3 = 3 * ($a3 * $a3 + $a4 * $a4) + $z33 * $sat->deep_arg->eosq;
623
+				$z11 = -6 * $a1 * $a5 + $sat->deep_arg->eosq * (-24 * $x1 * $x7 - 6 * $x3 * $x5);
624
+				$z12 = -6 * ($a1 * $a6 + $a3 * $a5) + $sat->deep_arg->eosq *
625
+					(-24 * ($x2 * $x7 + $x1 * $x8) - 6 * ($x3 * $x6 + $x4 * $x5));
626
+				$z13 = -6 * $a3 * $a6 + $sat->deep_arg->eosq * (-24 * $x2 * $x8 - 6 * $x4 * $x6);
627
+				$z21 = 6 * $a2 * $a5 + $sat->deep_arg->eosq * (24 * $x1 * $x5 - 6 * $x3 * $x7);
628
+				$z22 = 6 * ($a4 * $a5 + $a2 * $a6) + $sat->deep_arg->eosq *
629
+					(24 * ($x2 * $x5 + $x1 * $x6) - 6 * ($x4 * $x7 + $x3 * $x8));
630
+				$z23 = 6 * $a4 * $a6 + $sat->deep_arg->eosq * (24 * $x2 * $x6 - 6 * $x4 * $x8);
631
+				$z1 = $z1 + $z1 + $sat->deep_arg->betao2 * $z31;
632
+				$z2 = $z2 + $z2 + $sat->deep_arg->betao2 * $z32;
633
+				$z3 = $z3 + $z3 + $sat->deep_arg->betao2 * $z33;
634
+				$s3 = $cc * $xnoi;
635
+				$s2 = -0.5 * $s3 / $sat->deep_arg->betao;
636
+				$s4 = $s3 * $sat->deep_arg->betao;
637
+				$s1 = -15 * $eq * $s4;
638
+				$s5 = $x1 * $x3 + $x2 * $x4;
639
+				$s6 = $x2 * $x3 + $x1 * $x4;
640
+				$s7 = $x2 * $x4 - $x1 * $x3;
641
+				$se = $s1 * $zn * $s5;
642
+				$si = $s2 * $zn * ($z11 + $z13);
643
+				$sl = -$zn * $s3 * ($z1 + $z3 - 14 - 6 * $sat->deep_arg->eosq);
644
+				$sgh = $s4 * $zn * ($z31 + $z33 - 6);
645
+				$sh = -$zn * $s2 * ($z21 + $z23);
646
+				if ($sat->dps->xqncl < 5.2359877E-2) {
647
+					$sh = 0;
648
+				}
649
+				$sat->dps->ee2 = 2 * $s1 * $s6;
650
+				$sat->dps->e3 = 2 * $s1 * $s7;
651
+				$sat->dps->xi2 = 2 * $s2 * $z12;
652
+				$sat->dps->xi3 = 2 * $s2 * ($z13 - $z11);
653
+				$sat->dps->xl2 = -2 * $s3 * $z2;
654
+				$sat->dps->xl3 = -2 * $s3 * ($z3 - $z1);
655
+				$sat->dps->xl4 = -2 * $s3 * (-21 - 9 * $sat->deep_arg->eosq) * $ze;
656
+				$sat->dps->xgh2 = 2 * $s4 * $z32;
657
+				$sat->dps->xgh3 = 2 * $s4 * ($z33 - $z31);
658
+				$sat->dps->xgh4 = -18 * $s4 * $ze;
659
+				$sat->dps->xh2 = -2 * $s2 * $z22;
660
+				$sat->dps->xh3 = -2 * $s2 * ($z23 - $z21);
661
+
662
+				if ($sat->flags & self::LUNAR_TERMS_DONE_FLAG) {
663
+					break;
664
+				}
665
+
666
+				/* Do lunar terms */
667
+				$sat->dps->sse = $se;
668
+				$sat->dps->ssi = $si;
669
+				$sat->dps->ssl = $sl;
670
+				$sat->dps->ssh = $sh / $sat->deep_arg->sinio;
671
+				$sat->dps->ssg = $sgh - $sat->deep_arg->cosio * $sat->dps->ssh;
672
+				$sat->dps->se2 = $sat->dps->ee2;
673
+				$sat->dps->si2 = $sat->dps->xi2;
674
+				$sat->dps->sl2 = $sat->dps->xl2;
675
+				$sat->dps->sgh2 = $sat->dps->xgh2;
676
+				$sat->dps->sh2 = $sat->dps->xh2;
677
+				$sat->dps->se3 = $sat->dps->e3;
678
+				$sat->dps->si3 = $sat->dps->xi3;
679
+				$sat->dps->sl3 = $sat->dps->xl3;
680
+				$sat->dps->sgh3 = $sat->dps->xgh3;
681
+				$sat->dps->sh3 = $sat->dps->xh3;
682
+				$sat->dps->sl4 = $sat->dps->xl4;
683
+				$sat->dps->sgh4 = $sat->dps->xgh4;
684
+				$zcosg = $sat->dps->zcosgl;
685
+				$zsing = $sat->dps->zsingl;
686
+				$zcosi = $sat->dps->zcosil;
687
+				$zsini = $sat->dps->zsinil;
688
+				$zcosh = $sat->dps->zcoshl * $cosq + $sat->dps->zsinhl * $sinq;
689
+				$zsinh = $sinq * $sat->dps->zcoshl - $cosq * $sat->dps->zsinhl;
690
+				$zn = Predict::znl;
691
+				$cc = Predict::c1l;
692
+				$ze = Predict::zel;
693
+				$zmo = $sat->dps->zmol;
694
+				$sat->flags |= self::LUNAR_TERMS_DONE_FLAG;
695
+			} /* End of for(;;) */
696
+
697
+			$sat->dps->sse = $sat->dps->sse + $se;
698
+			$sat->dps->ssi = $sat->dps->ssi + $si;
699
+			$sat->dps->ssl = $sat->dps->ssl + $sl;
700
+			$sat->dps->ssg = $sat->dps->ssg + $sgh - $sat->deep_arg->cosio / $sat->deep_arg->sinio * $sh;
701
+			$sat->dps->ssh = $sat->dps->ssh + $sh / $sat->deep_arg->sinio;
702
+
703
+			/* Geopotential resonance initialization for 12 hour orbits */
704
+			$sat->flags &= ~self::RESONANCE_FLAG;
705
+			$sat->flags &= ~self::SYNCHRONOUS_FLAG;
706
+
707
+			if (!(($sat->dps->xnq < 0.0052359877) && ($sat->dps->xnq > 0.0034906585))) {
708
+				if( ($sat->dps->xnq < 0.00826) || ($sat->dps->xnq > 0.00924) ) {
709
+					return;
710
+				}
711
+				if ($eq < 0.5) {
712
+					return;
713
+				}
714
+				$sat->flags |= self::RESONANCE_FLAG;
715
+				$eoc = $eq * $sat->deep_arg->eosq;
716
+				$g201 = -0.306 - ($eq - 0.64) * 0.440;
717
+				if ($eq <= 0.65) {
718
+					$g211 = 3.616 - 13.247 * $eq + 16.290 * $sat->deep_arg->eosq;
719
+					$g310 = -19.302 + 117.390 * $eq - 228.419 *
720
+						$sat->deep_arg->eosq + 156.591 * $eoc;
721
+					$g322 = -18.9068 + 109.7927 * $eq - 214.6334 *
722
+						$sat->deep_arg->eosq + 146.5816 * $eoc;
723
+					$g410 = -41.122 + 242.694 * $eq - 471.094 *
724
+						$sat->deep_arg->eosq + 313.953 * $eoc;
725
+					$g422 = -146.407 + 841.880 * $eq - 1629.014 *
726
+						$sat->deep_arg->eosq + 1083.435 * $eoc;
727
+					$g520 = -532.114 + 3017.977 * $eq - 5740 *
728
+						$sat->deep_arg->eosq + 3708.276 * $eoc;
729
+				} else {
730
+					$g211 = -72.099 + 331.819 * $eq - 508.738 *
731
+						$sat->deep_arg->eosq + 266.724 * $eoc;
732
+					$g310 = -346.844 + 1582.851 * $eq - 2415.925 *
733
+						$sat->deep_arg->eosq + 1246.113 * $eoc;
734
+					$g322 = -342.585 + 1554.908 * $eq - 2366.899 *
735
+						$sat->deep_arg->eosq + 1215.972 * $eoc;
736
+					$g410 = -1052.797 + 4758.686 * $eq - 7193.992 *
737
+						$sat->deep_arg->eosq + 3651.957 * $eoc;
738
+					$g422 = -3581.69 + 16178.11 * $eq - 24462.77 *
739
+						$sat->deep_arg->eosq+ 12422.52 * $eoc;
740
+					if ($eq <= 0.715) {
741
+						$g520 = 1464.74 - 4664.75 * $eq + 3763.64 * $sat->deep_arg->eosq;
742
+					} else {
743
+						$g520 = -5149.66 + 29936.92 * $eq - 54087.36 *
744
+							$sat->deep_arg->eosq + 31324.56 * $eoc;
745
+					}
746
+				} /* End if (eq <= 0.65) */
747
+
748
+				if ($eq < 0.7) {
749
+					$g533 = -919.2277 + 4988.61 * $eq - 9064.77 *
750
+						$sat->deep_arg->eosq + 5542.21 * $eoc;
751
+					$g521 = -822.71072 + 4568.6173 * $eq - 8491.4146 *
752
+						$sat->deep_arg->eosq + 5337.524 * $eoc;
753
+					$g532 = -853.666 + 4690.25 * $eq - 8624.77 *
754
+						$sat->deep_arg->eosq + 5341.4 * $eoc;
755
+				}
756
+				else {
757
+					$g533 = -37995.78 + 161616.52 * $eq - 229838.2*
758
+						$sat->deep_arg->eosq + 109377.94 * $eoc;
759
+					$g521 = -51752.104 + 218913.95 * $eq - 309468.16*
760
+						$sat->deep_arg->eosq + 146349.42 * $eoc;
761
+					$g532 = -40023.88 + 170470.89 * $eq - 242699.48*
762
+						$sat->deep_arg->eosq + 115605.82 * $eoc;
763
+				} /* End if (eq <= 0.7) */
764
+
765
+				$sini2 = $sat->deep_arg->sinio * $sat->deep_arg->sinio;
766
+				$f220 = 0.75 * (1 + 2 * $sat->deep_arg->cosio + $sat->deep_arg->theta2);
767
+				$f221 = 1.5 * $sini2;
768
+				$f321 = 1.875 * $sat->deep_arg->sinio * (1 - 2 *
769
+								  $sat->deep_arg->cosio - 3 * $sat->deep_arg->theta2);
770
+				$f322 = -1.875 * $sat->deep_arg->sinio * (1 + 2*
771
+								   $sat->deep_arg->cosio - 3 * $sat->deep_arg->theta2);
772
+				$f441 = 35 * $sini2 * $f220;
773
+				$f442 = 39.3750 * $sini2 * $sini2;
774
+				$f522 = 9.84375 * $sat->deep_arg->sinio * ($sini2 * (1 - 2 * $sat->deep_arg->cosio - 5 *
775
+									   $sat->deep_arg->theta2) + 0.33333333 * (-2 + 4 * $sat->deep_arg->cosio +
776
+													 6 * $sat->deep_arg->theta2));
777
+				$f523 = $sat->deep_arg->sinio * (4.92187512 * $sini2 * (-2 - 4 *
778
+									  $sat->deep_arg->cosio + 10 * $sat->deep_arg->theta2) + 6.56250012
779
+							* (1 + 2 * $sat->deep_arg->cosio - 3 * $sat->deep_arg->theta2));
780
+				$f542 = 29.53125 * $sat->deep_arg->sinio * (2 - 8 *
781
+								 $sat->deep_arg->cosio + $sat->deep_arg->theta2 *
782
+								 (-12 + 8 * $sat->deep_arg->cosio + 10 * $sat->deep_arg->theta2));
783
+				$f543 = 29.53125 * $sat->deep_arg->sinio * (-2 - 8 * $sat->deep_arg->cosio +
784
+								 $sat->deep_arg->theta2 * (12 + 8 * $sat->deep_arg->cosio - 10 *
785
+										   $sat->deep_arg->theta2));
786
+				$xno2 = $sat->dps->xnq * $sat->dps->xnq;
787
+				$ainv2 = $aqnv * $aqnv;
788
+				$temp1 = 3 * $xno2 * $ainv2;
789
+				$temp = $temp1 * Predict::root22;
790
+				$sat->dps->d2201 = $temp * $f220 * $g201;
791
+				$sat->dps->d2211 = $temp * $f221 * $g211;
792
+				$temp1 = $temp1 * $aqnv;
793
+				$temp = $temp1 * Predict::root32;
794
+				$sat->dps->d3210 = $temp * $f321 * $g310;
795
+				$sat->dps->d3222 = $temp * $f322 * $g322;
796
+				$temp1 = $temp1 * $aqnv;
797
+				$temp = 2 * $temp1 * Predict::root44;
798
+				$sat->dps->d4410 = $temp * $f441 * $g410;
799
+				$sat->dps->d4422 = $temp * $f442 * $g422;
800
+				$temp1 = $temp1 * $aqnv;
801
+				$temp = $temp1 * Predict::root52;
802
+				$sat->dps->d5220 = $temp * $f522 * $g520;
803
+				$sat->dps->d5232 = $temp * $f523 * $g532;
804
+				$temp = 2 * $temp1 * Predict::root54;
805
+				$sat->dps->d5421 = $temp * $f542 * $g521;
806
+				$sat->dps->d5433 = $temp * $f543 * $g533;
807
+				$sat->dps->xlamo = $xmao + $sat->tle->xnodeo + $sat->tle->xnodeo - $sat->dps->thgr - $sat->dps->thgr;
808
+				$bfact = $sat->deep_arg->xmdot + $sat->deep_arg->xnodot +
809
+					$sat->deep_arg->xnodot - Predict::thdt - Predict::thdt;
810
+				$bfact = $bfact + $sat->dps->ssl + $sat->dps->ssh + $sat->dps->ssh;
811
+			} else {
812
+				$sat->flags |= self::RESONANCE_FLAG;
813
+				$sat->flags |= self::SYNCHRONOUS_FLAG;
814
+				/* Synchronous resonance terms initialization */
815
+				$g200 = 1 + $sat->deep_arg->eosq * (-2.5 + 0.8125 * $sat->deep_arg->eosq);
816
+				$g310 = 1 + 2 * $sat->deep_arg->eosq;
817
+				$g300 = 1 + $sat->deep_arg->eosq * (-6 + 6.60937 * $sat->deep_arg->eosq);
818
+				$f220 = 0.75 * (1 + $sat->deep_arg->cosio) * (1 + $sat->deep_arg->cosio);
819
+				$f311 = 0.9375 * $sat->deep_arg->sinio * $sat->deep_arg->sinio *
820
+					(1 + 3 * $sat->deep_arg->cosio) - 0.75 * (1 + $sat->deep_arg->cosio);
821
+				$f330 = 1 + $sat->deep_arg->cosio;
822
+				$f330 = 1.875 * $f330 * $f330 * $f330;
823
+				$sat->dps->del1 = 3 * $sat->dps->xnq * $sat->dps->xnq * $aqnv * $aqnv;
824
+				$sat->dps->del2 = 2 * $sat->dps->del1 * $f220 * $g200 * Predict::q22;
825
+				$sat->dps->del3 = 3 * $sat->dps->del1 * $f330 * $g300 * Predict::q33 * $aqnv;
826
+				$sat->dps->del1 = $sat->dps->del1 * $f311 * $g310 * Predict::q31 * $aqnv;
827
+				$sat->dps->fasx2 = 0.13130908;
828
+				$sat->dps->fasx4 = 2.8843198;
829
+				$sat->dps->fasx6 = 0.37448087;
830
+				$sat->dps->xlamo = $xmao + $sat->tle->xnodeo + $sat->tle->omegao - $sat->dps->thgr;
831
+				$bfact = $sat->deep_arg->xmdot + $xpidot - Predict::thdt;
832
+				$bfact = $bfact + $sat->dps->ssl + $sat->dps->ssg + $sat->dps->ssh;
833
+			} /* End if( !(xnq < 0.0052359877) && (xnq > 0.0034906585) ) */
834
+
835
+			$sat->dps->xfact = $bfact - $sat->dps->xnq;
836
+
837
+			/* Initialize integrator */
838
+			$sat->dps->xli = $sat->dps->xlamo;
839
+			$sat->dps->xni = $sat->dps->xnq;
840
+			$sat->dps->atime = 0;
841
+			$sat->dps->stepp = 720;
842
+			$sat->dps->stepn = -720;
843
+			$sat->dps->step2 = 259200;
844
+			/* End case self::dpinit: */
845
+			return;
846
+
847
+		case self::dpsec: /* Entrance for deep space secular effects */
848
+			$sat->deep_arg->xll = $sat->deep_arg->xll + $sat->dps->ssl * $sat->deep_arg->t;
849
+			$sat->deep_arg->omgadf = $sat->deep_arg->omgadf + $sat->dps->ssg * $sat->deep_arg->t;
850
+			$sat->deep_arg->xnode = $sat->deep_arg->xnode + $sat->dps->ssh * $sat->deep_arg->t;
851
+			$sat->deep_arg->em = $sat->tle->eo + $sat->dps->sse * $sat->deep_arg->t;
852
+			$sat->deep_arg->xinc = $sat->tle->xincl + $sat->dps->ssi * $sat->deep_arg->t;
853
+			if ($sat->deep_arg->xinc < 0) {
854
+				$sat->deep_arg->xinc = -$sat->deep_arg->xinc;
855
+				$sat->deep_arg->xnode = $sat->deep_arg->xnode + Predict::pi;
856
+				$sat->deep_arg->omgadf = $sat->deep_arg->omgadf - Predict::pi;
857
+			}
858
+			if(~$sat->flags & self::RESONANCE_FLAG ) {
859
+				return;
860
+			}
861
+
862
+			do {
863
+				if ( ($sat->dps->atime == 0) ||
864
+					(($sat->deep_arg->t >= 0) && ($sat->dps->atime < 0)) ||
865
+					(($sat->deep_arg->t < 0) && ($sat->dps->atime >= 0)) ) {
866
+					/* Epoch restart */
867
+					if ($sat->deep_arg->t >= 0) {
868
+						$delt = $sat->dps->stepp;
869
+					} else {
870
+						$delt = $sat->dps->stepn;
871
+					}
872
+
873
+					$sat->dps->atime = 0;
874
+					$sat->dps->xni = $sat->dps->xnq;
875
+					$sat->dps->xli = $sat->dps->xlamo;
876
+				} else {
877
+					if (abs($sat->deep_arg->t) >= abs($sat->dps->atime)) {
878
+						if ($sat->deep_arg->t > 0) {
879
+							$delt = $sat->dps->stepp;
880
+						} else {
881
+							$delt = $sat->dps->stepn;
882
+						}
883
+					}
884
+				}
885
+
886
+				do {
887
+					if (abs($sat->deep_arg->t - $sat->dps->atime) >= $sat->dps->stepp) {
888
+						$sat->flags |= self::DO_LOOP_FLAG;
889
+						$sat->flags &= ~self::EPOCH_RESTART_FLAG;
890
+					}
891
+					else {
892
+						$ft = $sat->deep_arg->t - $sat->dps->atime;
893
+						$sat->flags &= ~self::DO_LOOP_FLAG;
894
+					}
895
+
896
+					if (abs($sat->deep_arg->t) < abs($sat->dps->atime)) {
897
+						if ($sat->deep_arg->t >= 0) {
898
+							$delt = $sat->dps->stepn;
899
+						} else {
900
+							$delt = $sat->dps->stepp;
901
+						}
902
+						$sat->flags |= (self::DO_LOOP_FLAG | self::EPOCH_RESTART_FLAG);
903
+					}
904
+
905
+					/* Dot terms calculated */
906
+					if ($sat->flags & self::SYNCHRONOUS_FLAG) {
907
+						$xndot = $sat->dps->del1 * sin($sat->dps->xli - $sat->dps->fasx2) + $sat->dps->del2 * sin(2 * ($sat->dps->xli - $sat->dps->fasx4))
908
+							+ $sat->dps->del3 * sin(3 * ($sat->dps->xli - $sat->dps->fasx6));
909
+						$xnddt = $sat->dps->del1 * cos($sat->dps->xli - $sat->dps->fasx2) + 2 * $sat->dps->del2 * cos(2 * ($sat->dps->xli - $sat->dps->fasx4))
910
+							+ 3 * $sat->dps->del3 * cos(3 * ($sat->dps->xli - $sat->dps->fasx6));
911
+					} else {
912
+						$xomi = $sat->dps->omegaq + $sat->deep_arg->omgdot * $sat->dps->atime;
913
+						$x2omi = $xomi + $xomi;
914
+						$x2li = $sat->dps->xli + $sat->dps->xli;
915
+						$xndot = $sat->dps->d2201 * sin($x2omi + $sat->dps->xli - Predict::g22)
916
+							+ $sat->dps->d2211 * sin($sat->dps->xli - Predict::g22)
917
+							+ $sat->dps->d3210 * sin($xomi + $sat->dps->xli - Predict::g32)
918
+							+ $sat->dps->d3222 * sin(-$xomi + $sat->dps->xli - Predict::g32)
919
+							+ $sat->dps->d4410 * sin($x2omi + $x2li- Predict::g44)
920
+							+ $sat->dps->d4422 * sin($x2li- Predict::g44)
921
+							+ $sat->dps->d5220 * sin($xomi + $sat->dps->xli- Predict::g52)
922
+							+ $sat->dps->d5232 * sin(-$xomi + $sat->dps->xli- Predict::g52)
923
+							+ $sat->dps->d5421 * sin($xomi + $x2li - Predict::g54)
924
+							+ $sat->dps->d5433 * sin(-$xomi + $x2li - Predict::g54);
925
+						$xnddt = $sat->dps->d2201 * cos($x2omi + $sat->dps->xli- Predict::g22)
926
+							+ $sat->dps->d2211 * cos($sat->dps->xli - Predict::g22)
927
+							+ $sat->dps->d3210 * cos($xomi + $sat->dps->xli - Predict::g32)
928
+							+ $sat->dps->d3222 * cos(-$xomi + $sat->dps->xli - Predict::g32)
929
+							+ $sat->dps->d5220 * cos($xomi + $sat->dps->xli - Predict::g52)
930
+							+ $sat->dps->d5232 * cos(-$xomi + $sat->dps->xli - Predict::g52)
931
+							+ 2 * ($sat->dps->d4410 * cos($x2omi + $x2li - Predict::g44)
932
+								+ $sat->dps->d4422 * cos($x2li - Predict::g44)
933
+								+ $sat->dps->d5421 * cos($xomi + $x2li - Predict::g54)
934
+								+ $sat->dps->d5433 * cos(-$xomi + $x2li - Predict::g54));
935
+					} /* End of if (isFlagSet(SYNCHRONOUS_FLAG)) */
936
+
937
+					$xldot = $sat->dps->xni + $sat->dps->xfact;
938
+					$xnddt = $xnddt * $xldot;
939
+
940
+					if ($sat->flags & self::DO_LOOP_FLAG) {
941
+						$sat->dps->xli = $sat->dps->xli + $xldot * $delt + $xndot * $sat->dps->step2;
942
+						$sat->dps->xni = $sat->dps->xni + $xndot * $delt + $xnddt * $sat->dps->step2;
943
+						$sat->dps->atime = $sat->dps->atime + $delt;
944
+					}
945
+				} while (($sat->flags & self::DO_LOOP_FLAG) &&
946
+						(~$sat->flags & self::EPOCH_RESTART_FLAG));
947
+			}
948
+			while (($sat->flags & self::DO_LOOP_FLAG) && ($sat->flags & self::EPOCH_RESTART_FLAG));
949
+
950
+			$sat->deep_arg->xn = $sat->dps->xni + $xndot * $ft + $xnddt * $ft * $ft * 0.5;
951
+			$xl = $sat->dps->xli + $xldot * $ft + $xndot * $ft * $ft * 0.5;
952
+			$temp = -$sat->deep_arg->xnode + $sat->dps->thgr + $sat->deep_arg->t * Predict::thdt;
953
+
954
+			if (~$sat->flags & self::SYNCHRONOUS_FLAG) {
955
+				$sat->deep_arg->xll = $xl + $temp + $temp;
956
+			} else {
957
+				$sat->deep_arg->xll = $xl - $sat->deep_arg->omgadf + $temp;
958
+			}
959
+
960
+			return;
961
+			/* End case dpsec: */
962
+
963
+		case self::dpper: /* Entrance for lunar-solar periodics */
964
+			$sinis = sin($sat->deep_arg->xinc);
965
+			$cosis = cos($sat->deep_arg->xinc);
966
+			if (abs($sat->dps->savtsn - $sat->deep_arg->t) >= 30) {
967
+				$sat->dps->savtsn = $sat->deep_arg->t;
968
+				$zm = $sat->dps->zmos + Predict::zns * $sat->deep_arg->t;
969
+				$zf = $zm + 2 * Predict::zes * sin($zm);
970
+				$sinzf = sin($zf);
971
+				$f2 = 0.5 * $sinzf * $sinzf - 0.25;
972
+				$f3 = -0.5 * $sinzf * cos($zf);
973
+				$ses = $sat->dps->se2 * $f2 + $sat->dps->se3 * $f3;
974
+				$sis = $sat->dps->si2 * $f2 + $sat->dps->si3 * $f3;
975
+				$sls = $sat->dps->sl2 * $f2 + $sat->dps->sl3 * $f3 + $sat->dps->sl4 * $sinzf;
976
+				$sat->dps->sghs = $sat->dps->sgh2 * $f2 + $sat->dps->sgh3 * $f3 + $sat->dps->sgh4 * $sinzf;
977
+				$sat->dps->shs = $sat->dps->sh2 * $f2 + $sat->dps->sh3 * $f3;
978
+				$zm = $sat->dps->zmol + Predict::znl * $sat->deep_arg->t;
979
+				$zf = $zm + 2 * Predict::zel * sin($zm);
980
+				$sinzf = sin($zf);
981
+				$f2 = 0.5 * $sinzf * $sinzf - 0.25;
982
+				$f3 = -0.5 * $sinzf * cos($zf);
983
+				$sel = $sat->dps->ee2 * $f2 + $sat->dps->e3 * $f3;
984
+				$sil = $sat->dps->xi2 * $f2 + $sat->dps->xi3 * $f3;
985
+				$sll = $sat->dps->xl2 * $f2 + $sat->dps->xl3 * $f3 + $sat->dps->xl4 * $sinzf;
986
+				$sat->dps->sghl = $sat->dps->xgh2 * $f2 + $sat->dps->xgh3 * $f3 + $sat->dps->xgh4 * $sinzf;
987
+				$sat->dps->sh1 = $sat->dps->xh2 * $f2 + $sat->dps->xh3 * $f3;
988
+				$sat->dps->pe = $ses + $sel;
989
+				$sat->dps->pinc = $sis + $sil;
990
+				$sat->dps->pl = $sls + $sll;
991
+			}
992
+
993
+			$pgh = $sat->dps->sghs + $sat->dps->sghl;
994
+			$ph = $sat->dps->shs + $sat->dps->sh1;
995
+			$sat->deep_arg->xinc = $sat->deep_arg->xinc + $sat->dps->pinc;
996
+			$sat->deep_arg->em = $sat->deep_arg->em + $sat->dps->pe;
997
+
998
+			if ($sat->dps->xqncl >= 0.2) {
999
+				/* Apply periodics directly */
1000
+				$ph = $ph / $sat->deep_arg->sinio;
1001
+				$pgh = $pgh - $sat->deep_arg->cosio * $ph;
1002
+				$sat->deep_arg->omgadf = $sat->deep_arg->omgadf + $pgh;
1003
+				$sat->deep_arg->xnode = $sat->deep_arg->xnode + $ph;
1004
+				$sat->deep_arg->xll = $sat->deep_arg->xll + $sat->dps->pl;
1005
+			} else {
1006
+				/* Apply periodics with Lyddane modification */
1007
+				$sinok = sin($sat->deep_arg->xnode);
1008
+				$cosok = cos($sat->deep_arg->xnode);
1009
+				$alfdp = $sinis * $sinok;
1010
+				$betdp = $sinis * $cosok;
1011
+				$dalf = $ph * $cosok + $sat->dps->pinc * $cosis * $sinok;
1012
+				$dbet = -$ph * $sinok + $sat->dps->pinc * $cosis * $cosok;
1013
+				$alfdp = $alfdp + $dalf;
1014
+				$betdp = $betdp + $dbet;
1015
+				$sat->deep_arg->xnode = Predict_Math::FMod2p($sat->deep_arg->xnode);
1016
+				$xls = $sat->deep_arg->xll + $sat->deep_arg->omgadf + $cosis * $sat->deep_arg->xnode;
1017
+				$dls = $sat->dps->pl + $pgh - $sat->dps->pinc * $sat->deep_arg->xnode * $sinis;
1018
+				$xls = $xls + $dls;
1019
+				$xnoh = $sat->deep_arg->xnode;
1020
+				$sat->deep_arg->xnode = Predict_Math::AcTan($alfdp, $betdp);
1021
+
1022
+				/* This is a patch to Lyddane modification */
1023
+				/* suggested by Rob Matson. */
1024
+				if(abs($xnoh - $sat->deep_arg->xnode) > Predict::pi) {
1025
+					if ($sat->deep_arg->xnode < $xnoh) {
1026
+						$sat->deep_arg->xnode += Predict::twopi;
1027
+					} else {
1028
+						$sat->deep_arg->xnode -= Predict::twopi;
1029
+					}
1030
+				}
1031
+
1032
+				$sat->deep_arg->xll = $sat->deep_arg->xll + $sat->dps->pl;
1033
+				$sat->deep_arg->omgadf = $xls - $sat->deep_arg->xll - cos($sat->deep_arg->xinc) *
1034
+					$sat->deep_arg->xnode;
1035
+			} /* End case dpper: */
1036
+			return;
1037
+
1038
+		} /* End switch(ientry) */
1039
+
1040
+	} /* End of Deep() */
1041
+
1042
+	/**
1043
+	 * Singleton
1044
+	 *
1045
+	 * @param Predict_Sat $sat The current satellite data instance
1046
+	 *
1047
+	 * @return Predict_SGPSDP
1048
+	 */
1049
+	public static function getInstance(Predict_Sat $sat)
1050
+	{
1051
+		static $instances = array();
1052
+		$catnr = $sat->tle->catnr;
1053
+		if (!isset($instances[$catnr])) {
1054
+			$instances[$catnr] = new self();
1055
+		}
1056
+		return $instances[$catnr];
1057
+	}
1058 1058
 }
1059 1059
 ?>
Please login to merge, or discard this patch.
Switch Indentation   +493 added lines, -493 removed lines patch added patch discarded remove patch
@@ -541,499 +541,499 @@
 block discarded – undo
541 541
     public function Deep($ientry, Predict_Sat $sat)
542 542
     {
543 543
         switch ($ientry) {
544
-        case self::dpinit : /* Entrance for deep space initialization */
545
-            $sat->dps->thgr = Predict_Time::ThetaG($sat->tle->epoch, $sat->deep_arg);
546
-            $eq = $sat->tle->eo;
547
-            $sat->dps->xnq = $sat->deep_arg->xnodp;
548
-            $aqnv = 1.0 / $sat->deep_arg->aodp;
549
-            $sat->dps->xqncl = $sat->tle->xincl;
550
-            $xmao = $sat->tle->xmo;
551
-            $xpidot = $sat->deep_arg->omgdot + $sat->deep_arg->xnodot;
552
-            $sinq = sin($sat->tle->xnodeo);
553
-            $cosq = cos($sat->tle->xnodeo);
554
-            $sat->dps->omegaq = $sat->tle->omegao;
555
-            $sat->dps->preep = 0;
556
-
557
-            /* Initialize lunar solar terms */
558
-            $day = $sat->deep_arg->ds50 + 18261.5;  /* Days since 1900 Jan 0.5 */
559
-            if ($day != $sat->dps->preep) {
560
-                $sat->dps->preep = $day;
561
-                $xnodce = 4.5236020 - 9.2422029E-4 * $day;
562
-                $stem = sin($xnodce);
563
-                $ctem = cos($xnodce);
564
-                $sat->dps->zcosil = 0.91375164 - 0.03568096 * $ctem;
565
-                $sat->dps->zsinil = sqrt(1.0 - $sat->dps->zcosil * $sat->dps->zcosil);
566
-                $sat->dps->zsinhl = 0.089683511 * $stem / $sat->dps->zsinil;
567
-                $sat->dps->zcoshl = sqrt(1.0 - $sat->dps->zsinhl * $sat->dps->zsinhl);
568
-                $c = 4.7199672 + 0.22997150 * $day;
569
-                $gam = 5.8351514 + 0.0019443680 * $day;
570
-                $sat->dps->zmol = Predict_Math::FMod2p($c - $gam);
571
-                $zx = 0.39785416 * $stem / $sat->dps->zsinil;
572
-                $zy = $sat->dps->zcoshl * $ctem + 0.91744867 * $sat->dps->zsinhl * $stem;
573
-                $zx = Predict_Math::AcTan($zx, $zy);
574
-                $zx = $gam + $zx - $xnodce;
575
-                $sat->dps->zcosgl = cos($zx);
576
-                $sat->dps->zsingl = sin($zx);
577
-                $sat->dps->zmos = 6.2565837 + 0.017201977 * $day;
578
-                $sat->dps->zmos = Predict_Math::FMod2p($sat->dps->zmos);
579
-            } /* End if(day != preep) */
580
-
581
-            /* Do solar terms */
582
-            $sat->dps->savtsn = 1E20;
583
-            $zcosg = Predict::zcosgs;
584
-            $zsing = Predict::zsings;
585
-            $zcosi = Predict::zcosis;
586
-            $zsini = Predict::zsinis;
587
-            $zcosh = $cosq;
588
-            $zsinh = $sinq;
589
-            $cc = Predict::c1ss;
590
-            $zn = Predict::zns;
591
-            $ze = Predict::zes;
592
-            $zmo = $sat->dps->zmos;
593
-            $xnoi = 1.0 / $sat->dps->xnq;
594
-
595
-            /* Loop breaks when Solar terms are done a second */
596
-            /* time, after Lunar terms are initialized        */
597
-            for(;;) {
598
-                /* Solar terms done again after Lunar terms are done */
599
-                $a1 = $zcosg * $zcosh + $zsing * $zcosi * $zsinh;
600
-                $a3 = -$zsing * $zcosh + $zcosg * $zcosi * $zsinh;
601
-                $a7 = -$zcosg * $zsinh + $zsing * $zcosi * $zcosh;
602
-                $a8 = $zsing * $zsini;
603
-                $a9 = $zsing * $zsinh + $zcosg * $zcosi * $zcosh;
604
-                $a10 = $zcosg * $zsini;
605
-                $a2 = $sat->deep_arg->cosio * $a7 + $sat->deep_arg->sinio * $a8;
606
-                $a4 = $sat->deep_arg->cosio * $a9 + $sat->deep_arg->sinio * $a10;
607
-                $a5 = -$sat->deep_arg->sinio * $a7 + $sat->deep_arg->cosio * $a8;
608
-                $a6 = -$sat->deep_arg->sinio * $a9 + $sat->deep_arg->cosio * $a10;
609
-                $x1 = $a1 * $sat->deep_arg->cosg + $a2 * $sat->deep_arg->sing;
610
-                $x2 = $a3 * $sat->deep_arg->cosg + $a4 * $sat->deep_arg->sing;
611
-                $x3 = -$a1 * $sat->deep_arg->sing + $a2 * $sat->deep_arg->cosg;
612
-                $x4 = -$a3 * $sat->deep_arg->sing + $a4 * $sat->deep_arg->cosg;
613
-                $x5 = $a5 * $sat->deep_arg->sing;
614
-                $x6 = $a6 * $sat->deep_arg->sing;
615
-                $x7 = $a5 * $sat->deep_arg->cosg;
616
-                $x8 = $a6 * $sat->deep_arg->cosg;
617
-                $z31 = 12 * $x1 * $x1 - 3 * $x3 * $x3;
618
-                $z32 = 24 * $x1 * $x2 - 6 * $x3 * $x4;
619
-                $z33 = 12 * $x2 * $x2 - 3 * $x4 * $x4;
620
-                $z1 = 3 * ($a1 * $a1 + $a2 * $a2) + $z31 * $sat->deep_arg->eosq;
621
-                $z2 = 6 * ($a1 * $a3 + $a2 * $a4) + $z32 * $sat->deep_arg->eosq;
622
-                $z3 = 3 * ($a3 * $a3 + $a4 * $a4) + $z33 * $sat->deep_arg->eosq;
623
-                $z11 = -6 * $a1 * $a5 + $sat->deep_arg->eosq * (-24 * $x1 * $x7 - 6 * $x3 * $x5);
624
-                $z12 = -6 * ($a1 * $a6 + $a3 * $a5) + $sat->deep_arg->eosq *
625
-                    (-24 * ($x2 * $x7 + $x1 * $x8) - 6 * ($x3 * $x6 + $x4 * $x5));
626
-                $z13 = -6 * $a3 * $a6 + $sat->deep_arg->eosq * (-24 * $x2 * $x8 - 6 * $x4 * $x6);
627
-                $z21 = 6 * $a2 * $a5 + $sat->deep_arg->eosq * (24 * $x1 * $x5 - 6 * $x3 * $x7);
628
-                $z22 = 6 * ($a4 * $a5 + $a2 * $a6) + $sat->deep_arg->eosq *
629
-                    (24 * ($x2 * $x5 + $x1 * $x6) - 6 * ($x4 * $x7 + $x3 * $x8));
630
-                $z23 = 6 * $a4 * $a6 + $sat->deep_arg->eosq * (24 * $x2 * $x6 - 6 * $x4 * $x8);
631
-                $z1 = $z1 + $z1 + $sat->deep_arg->betao2 * $z31;
632
-                $z2 = $z2 + $z2 + $sat->deep_arg->betao2 * $z32;
633
-                $z3 = $z3 + $z3 + $sat->deep_arg->betao2 * $z33;
634
-                $s3 = $cc * $xnoi;
635
-                $s2 = -0.5 * $s3 / $sat->deep_arg->betao;
636
-                $s4 = $s3 * $sat->deep_arg->betao;
637
-                $s1 = -15 * $eq * $s4;
638
-                $s5 = $x1 * $x3 + $x2 * $x4;
639
-                $s6 = $x2 * $x3 + $x1 * $x4;
640
-                $s7 = $x2 * $x4 - $x1 * $x3;
641
-                $se = $s1 * $zn * $s5;
642
-                $si = $s2 * $zn * ($z11 + $z13);
643
-                $sl = -$zn * $s3 * ($z1 + $z3 - 14 - 6 * $sat->deep_arg->eosq);
644
-                $sgh = $s4 * $zn * ($z31 + $z33 - 6);
645
-                $sh = -$zn * $s2 * ($z21 + $z23);
646
-                if ($sat->dps->xqncl < 5.2359877E-2) {
647
-                    $sh = 0;
648
-                }
649
-                $sat->dps->ee2 = 2 * $s1 * $s6;
650
-                $sat->dps->e3 = 2 * $s1 * $s7;
651
-                $sat->dps->xi2 = 2 * $s2 * $z12;
652
-                $sat->dps->xi3 = 2 * $s2 * ($z13 - $z11);
653
-                $sat->dps->xl2 = -2 * $s3 * $z2;
654
-                $sat->dps->xl3 = -2 * $s3 * ($z3 - $z1);
655
-                $sat->dps->xl4 = -2 * $s3 * (-21 - 9 * $sat->deep_arg->eosq) * $ze;
656
-                $sat->dps->xgh2 = 2 * $s4 * $z32;
657
-                $sat->dps->xgh3 = 2 * $s4 * ($z33 - $z31);
658
-                $sat->dps->xgh4 = -18 * $s4 * $ze;
659
-                $sat->dps->xh2 = -2 * $s2 * $z22;
660
-                $sat->dps->xh3 = -2 * $s2 * ($z23 - $z21);
661
-
662
-                if ($sat->flags & self::LUNAR_TERMS_DONE_FLAG) {
663
-                    break;
664
-                }
665
-
666
-                /* Do lunar terms */
667
-                $sat->dps->sse = $se;
668
-                $sat->dps->ssi = $si;
669
-                $sat->dps->ssl = $sl;
670
-                $sat->dps->ssh = $sh / $sat->deep_arg->sinio;
671
-                $sat->dps->ssg = $sgh - $sat->deep_arg->cosio * $sat->dps->ssh;
672
-                $sat->dps->se2 = $sat->dps->ee2;
673
-                $sat->dps->si2 = $sat->dps->xi2;
674
-                $sat->dps->sl2 = $sat->dps->xl2;
675
-                $sat->dps->sgh2 = $sat->dps->xgh2;
676
-                $sat->dps->sh2 = $sat->dps->xh2;
677
-                $sat->dps->se3 = $sat->dps->e3;
678
-                $sat->dps->si3 = $sat->dps->xi3;
679
-                $sat->dps->sl3 = $sat->dps->xl3;
680
-                $sat->dps->sgh3 = $sat->dps->xgh3;
681
-                $sat->dps->sh3 = $sat->dps->xh3;
682
-                $sat->dps->sl4 = $sat->dps->xl4;
683
-                $sat->dps->sgh4 = $sat->dps->xgh4;
684
-                $zcosg = $sat->dps->zcosgl;
685
-                $zsing = $sat->dps->zsingl;
686
-                $zcosi = $sat->dps->zcosil;
687
-                $zsini = $sat->dps->zsinil;
688
-                $zcosh = $sat->dps->zcoshl * $cosq + $sat->dps->zsinhl * $sinq;
689
-                $zsinh = $sinq * $sat->dps->zcoshl - $cosq * $sat->dps->zsinhl;
690
-                $zn = Predict::znl;
691
-                $cc = Predict::c1l;
692
-                $ze = Predict::zel;
693
-                $zmo = $sat->dps->zmol;
694
-                $sat->flags |= self::LUNAR_TERMS_DONE_FLAG;
695
-            } /* End of for(;;) */
696
-
697
-            $sat->dps->sse = $sat->dps->sse + $se;
698
-            $sat->dps->ssi = $sat->dps->ssi + $si;
699
-            $sat->dps->ssl = $sat->dps->ssl + $sl;
700
-            $sat->dps->ssg = $sat->dps->ssg + $sgh - $sat->deep_arg->cosio / $sat->deep_arg->sinio * $sh;
701
-            $sat->dps->ssh = $sat->dps->ssh + $sh / $sat->deep_arg->sinio;
702
-
703
-            /* Geopotential resonance initialization for 12 hour orbits */
704
-            $sat->flags &= ~self::RESONANCE_FLAG;
705
-            $sat->flags &= ~self::SYNCHRONOUS_FLAG;
706
-
707
-            if (!(($sat->dps->xnq < 0.0052359877) && ($sat->dps->xnq > 0.0034906585))) {
708
-                if( ($sat->dps->xnq < 0.00826) || ($sat->dps->xnq > 0.00924) ) {
709
-                    return;
710
-                }
711
-                if ($eq < 0.5) {
712
-                    return;
713
-                }
714
-                $sat->flags |= self::RESONANCE_FLAG;
715
-                $eoc = $eq * $sat->deep_arg->eosq;
716
-                $g201 = -0.306 - ($eq - 0.64) * 0.440;
717
-                if ($eq <= 0.65) {
718
-                    $g211 = 3.616 - 13.247 * $eq + 16.290 * $sat->deep_arg->eosq;
719
-                    $g310 = -19.302 + 117.390 * $eq - 228.419 *
720
-                        $sat->deep_arg->eosq + 156.591 * $eoc;
721
-                    $g322 = -18.9068 + 109.7927 * $eq - 214.6334 *
722
-                        $sat->deep_arg->eosq + 146.5816 * $eoc;
723
-                    $g410 = -41.122 + 242.694 * $eq - 471.094 *
724
-                        $sat->deep_arg->eosq + 313.953 * $eoc;
725
-                    $g422 = -146.407 + 841.880 * $eq - 1629.014 *
726
-                        $sat->deep_arg->eosq + 1083.435 * $eoc;
727
-                    $g520 = -532.114 + 3017.977 * $eq - 5740 *
728
-                        $sat->deep_arg->eosq + 3708.276 * $eoc;
729
-                } else {
730
-                    $g211 = -72.099 + 331.819 * $eq - 508.738 *
731
-                        $sat->deep_arg->eosq + 266.724 * $eoc;
732
-                    $g310 = -346.844 + 1582.851 * $eq - 2415.925 *
733
-                        $sat->deep_arg->eosq + 1246.113 * $eoc;
734
-                    $g322 = -342.585 + 1554.908 * $eq - 2366.899 *
735
-                        $sat->deep_arg->eosq + 1215.972 * $eoc;
736
-                    $g410 = -1052.797 + 4758.686 * $eq - 7193.992 *
737
-                        $sat->deep_arg->eosq + 3651.957 * $eoc;
738
-                    $g422 = -3581.69 + 16178.11 * $eq - 24462.77 *
739
-                        $sat->deep_arg->eosq+ 12422.52 * $eoc;
740
-                    if ($eq <= 0.715) {
741
-                        $g520 = 1464.74 - 4664.75 * $eq + 3763.64 * $sat->deep_arg->eosq;
742
-                    } else {
743
-                        $g520 = -5149.66 + 29936.92 * $eq - 54087.36 *
744
-                            $sat->deep_arg->eosq + 31324.56 * $eoc;
745
-                    }
746
-                } /* End if (eq <= 0.65) */
747
-
748
-                if ($eq < 0.7) {
749
-                    $g533 = -919.2277 + 4988.61 * $eq - 9064.77 *
750
-                        $sat->deep_arg->eosq + 5542.21 * $eoc;
751
-                    $g521 = -822.71072 + 4568.6173 * $eq - 8491.4146 *
752
-                        $sat->deep_arg->eosq + 5337.524 * $eoc;
753
-                    $g532 = -853.666 + 4690.25 * $eq - 8624.77 *
754
-                        $sat->deep_arg->eosq + 5341.4 * $eoc;
755
-                }
756
-                else {
757
-                    $g533 = -37995.78 + 161616.52 * $eq - 229838.2*
758
-                        $sat->deep_arg->eosq + 109377.94 * $eoc;
759
-                    $g521 = -51752.104 + 218913.95 * $eq - 309468.16*
760
-                        $sat->deep_arg->eosq + 146349.42 * $eoc;
761
-                    $g532 = -40023.88 + 170470.89 * $eq - 242699.48*
762
-                        $sat->deep_arg->eosq + 115605.82 * $eoc;
763
-                } /* End if (eq <= 0.7) */
764
-
765
-                $sini2 = $sat->deep_arg->sinio * $sat->deep_arg->sinio;
766
-                $f220 = 0.75 * (1 + 2 * $sat->deep_arg->cosio + $sat->deep_arg->theta2);
767
-                $f221 = 1.5 * $sini2;
768
-                $f321 = 1.875 * $sat->deep_arg->sinio * (1 - 2 *
769
-                                  $sat->deep_arg->cosio - 3 * $sat->deep_arg->theta2);
770
-                $f322 = -1.875 * $sat->deep_arg->sinio * (1 + 2*
771
-                                   $sat->deep_arg->cosio - 3 * $sat->deep_arg->theta2);
772
-                $f441 = 35 * $sini2 * $f220;
773
-                $f442 = 39.3750 * $sini2 * $sini2;
774
-                $f522 = 9.84375 * $sat->deep_arg->sinio * ($sini2 * (1 - 2 * $sat->deep_arg->cosio - 5 *
775
-                                       $sat->deep_arg->theta2) + 0.33333333 * (-2 + 4 * $sat->deep_arg->cosio +
776
-                                                     6 * $sat->deep_arg->theta2));
777
-                $f523 = $sat->deep_arg->sinio * (4.92187512 * $sini2 * (-2 - 4 *
778
-                                      $sat->deep_arg->cosio + 10 * $sat->deep_arg->theta2) + 6.56250012
779
-                            * (1 + 2 * $sat->deep_arg->cosio - 3 * $sat->deep_arg->theta2));
780
-                $f542 = 29.53125 * $sat->deep_arg->sinio * (2 - 8 *
781
-                                 $sat->deep_arg->cosio + $sat->deep_arg->theta2 *
782
-                                 (-12 + 8 * $sat->deep_arg->cosio + 10 * $sat->deep_arg->theta2));
783
-                $f543 = 29.53125 * $sat->deep_arg->sinio * (-2 - 8 * $sat->deep_arg->cosio +
784
-                                 $sat->deep_arg->theta2 * (12 + 8 * $sat->deep_arg->cosio - 10 *
785
-                                           $sat->deep_arg->theta2));
786
-                $xno2 = $sat->dps->xnq * $sat->dps->xnq;
787
-                $ainv2 = $aqnv * $aqnv;
788
-                $temp1 = 3 * $xno2 * $ainv2;
789
-                $temp = $temp1 * Predict::root22;
790
-                $sat->dps->d2201 = $temp * $f220 * $g201;
791
-                $sat->dps->d2211 = $temp * $f221 * $g211;
792
-                $temp1 = $temp1 * $aqnv;
793
-                $temp = $temp1 * Predict::root32;
794
-                $sat->dps->d3210 = $temp * $f321 * $g310;
795
-                $sat->dps->d3222 = $temp * $f322 * $g322;
796
-                $temp1 = $temp1 * $aqnv;
797
-                $temp = 2 * $temp1 * Predict::root44;
798
-                $sat->dps->d4410 = $temp * $f441 * $g410;
799
-                $sat->dps->d4422 = $temp * $f442 * $g422;
800
-                $temp1 = $temp1 * $aqnv;
801
-                $temp = $temp1 * Predict::root52;
802
-                $sat->dps->d5220 = $temp * $f522 * $g520;
803
-                $sat->dps->d5232 = $temp * $f523 * $g532;
804
-                $temp = 2 * $temp1 * Predict::root54;
805
-                $sat->dps->d5421 = $temp * $f542 * $g521;
806
-                $sat->dps->d5433 = $temp * $f543 * $g533;
807
-                $sat->dps->xlamo = $xmao + $sat->tle->xnodeo + $sat->tle->xnodeo - $sat->dps->thgr - $sat->dps->thgr;
808
-                $bfact = $sat->deep_arg->xmdot + $sat->deep_arg->xnodot +
809
-                    $sat->deep_arg->xnodot - Predict::thdt - Predict::thdt;
810
-                $bfact = $bfact + $sat->dps->ssl + $sat->dps->ssh + $sat->dps->ssh;
811
-            } else {
812
-                $sat->flags |= self::RESONANCE_FLAG;
813
-                $sat->flags |= self::SYNCHRONOUS_FLAG;
814
-                /* Synchronous resonance terms initialization */
815
-                $g200 = 1 + $sat->deep_arg->eosq * (-2.5 + 0.8125 * $sat->deep_arg->eosq);
816
-                $g310 = 1 + 2 * $sat->deep_arg->eosq;
817
-                $g300 = 1 + $sat->deep_arg->eosq * (-6 + 6.60937 * $sat->deep_arg->eosq);
818
-                $f220 = 0.75 * (1 + $sat->deep_arg->cosio) * (1 + $sat->deep_arg->cosio);
819
-                $f311 = 0.9375 * $sat->deep_arg->sinio * $sat->deep_arg->sinio *
820
-                    (1 + 3 * $sat->deep_arg->cosio) - 0.75 * (1 + $sat->deep_arg->cosio);
821
-                $f330 = 1 + $sat->deep_arg->cosio;
822
-                $f330 = 1.875 * $f330 * $f330 * $f330;
823
-                $sat->dps->del1 = 3 * $sat->dps->xnq * $sat->dps->xnq * $aqnv * $aqnv;
824
-                $sat->dps->del2 = 2 * $sat->dps->del1 * $f220 * $g200 * Predict::q22;
825
-                $sat->dps->del3 = 3 * $sat->dps->del1 * $f330 * $g300 * Predict::q33 * $aqnv;
826
-                $sat->dps->del1 = $sat->dps->del1 * $f311 * $g310 * Predict::q31 * $aqnv;
827
-                $sat->dps->fasx2 = 0.13130908;
828
-                $sat->dps->fasx4 = 2.8843198;
829
-                $sat->dps->fasx6 = 0.37448087;
830
-                $sat->dps->xlamo = $xmao + $sat->tle->xnodeo + $sat->tle->omegao - $sat->dps->thgr;
831
-                $bfact = $sat->deep_arg->xmdot + $xpidot - Predict::thdt;
832
-                $bfact = $bfact + $sat->dps->ssl + $sat->dps->ssg + $sat->dps->ssh;
833
-            } /* End if( !(xnq < 0.0052359877) && (xnq > 0.0034906585) ) */
834
-
835
-            $sat->dps->xfact = $bfact - $sat->dps->xnq;
836
-
837
-            /* Initialize integrator */
838
-            $sat->dps->xli = $sat->dps->xlamo;
839
-            $sat->dps->xni = $sat->dps->xnq;
840
-            $sat->dps->atime = 0;
841
-            $sat->dps->stepp = 720;
842
-            $sat->dps->stepn = -720;
843
-            $sat->dps->step2 = 259200;
844
-            /* End case self::dpinit: */
845
-            return;
846
-
847
-        case self::dpsec: /* Entrance for deep space secular effects */
848
-            $sat->deep_arg->xll = $sat->deep_arg->xll + $sat->dps->ssl * $sat->deep_arg->t;
849
-            $sat->deep_arg->omgadf = $sat->deep_arg->omgadf + $sat->dps->ssg * $sat->deep_arg->t;
850
-            $sat->deep_arg->xnode = $sat->deep_arg->xnode + $sat->dps->ssh * $sat->deep_arg->t;
851
-            $sat->deep_arg->em = $sat->tle->eo + $sat->dps->sse * $sat->deep_arg->t;
852
-            $sat->deep_arg->xinc = $sat->tle->xincl + $sat->dps->ssi * $sat->deep_arg->t;
853
-            if ($sat->deep_arg->xinc < 0) {
854
-                $sat->deep_arg->xinc = -$sat->deep_arg->xinc;
855
-                $sat->deep_arg->xnode = $sat->deep_arg->xnode + Predict::pi;
856
-                $sat->deep_arg->omgadf = $sat->deep_arg->omgadf - Predict::pi;
857
-            }
858
-            if(~$sat->flags & self::RESONANCE_FLAG ) {
859
-                return;
860
-            }
861
-
862
-            do {
863
-                if ( ($sat->dps->atime == 0) ||
864
-                    (($sat->deep_arg->t >= 0) && ($sat->dps->atime < 0)) ||
865
-                    (($sat->deep_arg->t < 0) && ($sat->dps->atime >= 0)) ) {
866
-                    /* Epoch restart */
867
-                    if ($sat->deep_arg->t >= 0) {
868
-                        $delt = $sat->dps->stepp;
869
-                    } else {
870
-                        $delt = $sat->dps->stepn;
871
-                    }
872
-
873
-                    $sat->dps->atime = 0;
874
-                    $sat->dps->xni = $sat->dps->xnq;
875
-                    $sat->dps->xli = $sat->dps->xlamo;
876
-                } else {
877
-                    if (abs($sat->deep_arg->t) >= abs($sat->dps->atime)) {
878
-                        if ($sat->deep_arg->t > 0) {
879
-                            $delt = $sat->dps->stepp;
880
-                        } else {
881
-                            $delt = $sat->dps->stepn;
882
-                        }
883
-                    }
884
-                }
885
-
886
-                do {
887
-                    if (abs($sat->deep_arg->t - $sat->dps->atime) >= $sat->dps->stepp) {
888
-                        $sat->flags |= self::DO_LOOP_FLAG;
889
-                        $sat->flags &= ~self::EPOCH_RESTART_FLAG;
890
-                    }
891
-                    else {
892
-                        $ft = $sat->deep_arg->t - $sat->dps->atime;
893
-                        $sat->flags &= ~self::DO_LOOP_FLAG;
894
-                    }
895
-
896
-                    if (abs($sat->deep_arg->t) < abs($sat->dps->atime)) {
897
-                        if ($sat->deep_arg->t >= 0) {
898
-                            $delt = $sat->dps->stepn;
899
-                        } else {
900
-                            $delt = $sat->dps->stepp;
901
-                        }
902
-                        $sat->flags |= (self::DO_LOOP_FLAG | self::EPOCH_RESTART_FLAG);
903
-                    }
904
-
905
-                    /* Dot terms calculated */
906
-                    if ($sat->flags & self::SYNCHRONOUS_FLAG) {
907
-                        $xndot = $sat->dps->del1 * sin($sat->dps->xli - $sat->dps->fasx2) + $sat->dps->del2 * sin(2 * ($sat->dps->xli - $sat->dps->fasx4))
908
-                            + $sat->dps->del3 * sin(3 * ($sat->dps->xli - $sat->dps->fasx6));
909
-                        $xnddt = $sat->dps->del1 * cos($sat->dps->xli - $sat->dps->fasx2) + 2 * $sat->dps->del2 * cos(2 * ($sat->dps->xli - $sat->dps->fasx4))
910
-                            + 3 * $sat->dps->del3 * cos(3 * ($sat->dps->xli - $sat->dps->fasx6));
911
-                    } else {
912
-                        $xomi = $sat->dps->omegaq + $sat->deep_arg->omgdot * $sat->dps->atime;
913
-                        $x2omi = $xomi + $xomi;
914
-                        $x2li = $sat->dps->xli + $sat->dps->xli;
915
-                        $xndot = $sat->dps->d2201 * sin($x2omi + $sat->dps->xli - Predict::g22)
916
-                            + $sat->dps->d2211 * sin($sat->dps->xli - Predict::g22)
917
-                            + $sat->dps->d3210 * sin($xomi + $sat->dps->xli - Predict::g32)
918
-                            + $sat->dps->d3222 * sin(-$xomi + $sat->dps->xli - Predict::g32)
919
-                            + $sat->dps->d4410 * sin($x2omi + $x2li- Predict::g44)
920
-                            + $sat->dps->d4422 * sin($x2li- Predict::g44)
921
-                            + $sat->dps->d5220 * sin($xomi + $sat->dps->xli- Predict::g52)
922
-                            + $sat->dps->d5232 * sin(-$xomi + $sat->dps->xli- Predict::g52)
923
-                            + $sat->dps->d5421 * sin($xomi + $x2li - Predict::g54)
924
-                            + $sat->dps->d5433 * sin(-$xomi + $x2li - Predict::g54);
925
-                        $xnddt = $sat->dps->d2201 * cos($x2omi + $sat->dps->xli- Predict::g22)
926
-                            + $sat->dps->d2211 * cos($sat->dps->xli - Predict::g22)
927
-                            + $sat->dps->d3210 * cos($xomi + $sat->dps->xli - Predict::g32)
928
-                            + $sat->dps->d3222 * cos(-$xomi + $sat->dps->xli - Predict::g32)
929
-                            + $sat->dps->d5220 * cos($xomi + $sat->dps->xli - Predict::g52)
930
-                            + $sat->dps->d5232 * cos(-$xomi + $sat->dps->xli - Predict::g52)
931
-                            + 2 * ($sat->dps->d4410 * cos($x2omi + $x2li - Predict::g44)
932
-                                + $sat->dps->d4422 * cos($x2li - Predict::g44)
933
-                                + $sat->dps->d5421 * cos($xomi + $x2li - Predict::g54)
934
-                                + $sat->dps->d5433 * cos(-$xomi + $x2li - Predict::g54));
935
-                    } /* End of if (isFlagSet(SYNCHRONOUS_FLAG)) */
936
-
937
-                    $xldot = $sat->dps->xni + $sat->dps->xfact;
938
-                    $xnddt = $xnddt * $xldot;
939
-
940
-                    if ($sat->flags & self::DO_LOOP_FLAG) {
941
-                        $sat->dps->xli = $sat->dps->xli + $xldot * $delt + $xndot * $sat->dps->step2;
942
-                        $sat->dps->xni = $sat->dps->xni + $xndot * $delt + $xnddt * $sat->dps->step2;
943
-                        $sat->dps->atime = $sat->dps->atime + $delt;
944
-                    }
945
-                } while (($sat->flags & self::DO_LOOP_FLAG) &&
946
-                        (~$sat->flags & self::EPOCH_RESTART_FLAG));
947
-            }
948
-            while (($sat->flags & self::DO_LOOP_FLAG) && ($sat->flags & self::EPOCH_RESTART_FLAG));
949
-
950
-            $sat->deep_arg->xn = $sat->dps->xni + $xndot * $ft + $xnddt * $ft * $ft * 0.5;
951
-            $xl = $sat->dps->xli + $xldot * $ft + $xndot * $ft * $ft * 0.5;
952
-            $temp = -$sat->deep_arg->xnode + $sat->dps->thgr + $sat->deep_arg->t * Predict::thdt;
953
-
954
-            if (~$sat->flags & self::SYNCHRONOUS_FLAG) {
955
-                $sat->deep_arg->xll = $xl + $temp + $temp;
956
-            } else {
957
-                $sat->deep_arg->xll = $xl - $sat->deep_arg->omgadf + $temp;
958
-            }
959
-
960
-            return;
961
-            /* End case dpsec: */
962
-
963
-        case self::dpper: /* Entrance for lunar-solar periodics */
964
-            $sinis = sin($sat->deep_arg->xinc);
965
-            $cosis = cos($sat->deep_arg->xinc);
966
-            if (abs($sat->dps->savtsn - $sat->deep_arg->t) >= 30) {
967
-                $sat->dps->savtsn = $sat->deep_arg->t;
968
-                $zm = $sat->dps->zmos + Predict::zns * $sat->deep_arg->t;
969
-                $zf = $zm + 2 * Predict::zes * sin($zm);
970
-                $sinzf = sin($zf);
971
-                $f2 = 0.5 * $sinzf * $sinzf - 0.25;
972
-                $f3 = -0.5 * $sinzf * cos($zf);
973
-                $ses = $sat->dps->se2 * $f2 + $sat->dps->se3 * $f3;
974
-                $sis = $sat->dps->si2 * $f2 + $sat->dps->si3 * $f3;
975
-                $sls = $sat->dps->sl2 * $f2 + $sat->dps->sl3 * $f3 + $sat->dps->sl4 * $sinzf;
976
-                $sat->dps->sghs = $sat->dps->sgh2 * $f2 + $sat->dps->sgh3 * $f3 + $sat->dps->sgh4 * $sinzf;
977
-                $sat->dps->shs = $sat->dps->sh2 * $f2 + $sat->dps->sh3 * $f3;
978
-                $zm = $sat->dps->zmol + Predict::znl * $sat->deep_arg->t;
979
-                $zf = $zm + 2 * Predict::zel * sin($zm);
980
-                $sinzf = sin($zf);
981
-                $f2 = 0.5 * $sinzf * $sinzf - 0.25;
982
-                $f3 = -0.5 * $sinzf * cos($zf);
983
-                $sel = $sat->dps->ee2 * $f2 + $sat->dps->e3 * $f3;
984
-                $sil = $sat->dps->xi2 * $f2 + $sat->dps->xi3 * $f3;
985
-                $sll = $sat->dps->xl2 * $f2 + $sat->dps->xl3 * $f3 + $sat->dps->xl4 * $sinzf;
986
-                $sat->dps->sghl = $sat->dps->xgh2 * $f2 + $sat->dps->xgh3 * $f3 + $sat->dps->xgh4 * $sinzf;
987
-                $sat->dps->sh1 = $sat->dps->xh2 * $f2 + $sat->dps->xh3 * $f3;
988
-                $sat->dps->pe = $ses + $sel;
989
-                $sat->dps->pinc = $sis + $sil;
990
-                $sat->dps->pl = $sls + $sll;
991
-            }
992
-
993
-            $pgh = $sat->dps->sghs + $sat->dps->sghl;
994
-            $ph = $sat->dps->shs + $sat->dps->sh1;
995
-            $sat->deep_arg->xinc = $sat->deep_arg->xinc + $sat->dps->pinc;
996
-            $sat->deep_arg->em = $sat->deep_arg->em + $sat->dps->pe;
997
-
998
-            if ($sat->dps->xqncl >= 0.2) {
999
-                /* Apply periodics directly */
1000
-                $ph = $ph / $sat->deep_arg->sinio;
1001
-                $pgh = $pgh - $sat->deep_arg->cosio * $ph;
1002
-                $sat->deep_arg->omgadf = $sat->deep_arg->omgadf + $pgh;
1003
-                $sat->deep_arg->xnode = $sat->deep_arg->xnode + $ph;
1004
-                $sat->deep_arg->xll = $sat->deep_arg->xll + $sat->dps->pl;
1005
-            } else {
1006
-                /* Apply periodics with Lyddane modification */
1007
-                $sinok = sin($sat->deep_arg->xnode);
1008
-                $cosok = cos($sat->deep_arg->xnode);
1009
-                $alfdp = $sinis * $sinok;
1010
-                $betdp = $sinis * $cosok;
1011
-                $dalf = $ph * $cosok + $sat->dps->pinc * $cosis * $sinok;
1012
-                $dbet = -$ph * $sinok + $sat->dps->pinc * $cosis * $cosok;
1013
-                $alfdp = $alfdp + $dalf;
1014
-                $betdp = $betdp + $dbet;
1015
-                $sat->deep_arg->xnode = Predict_Math::FMod2p($sat->deep_arg->xnode);
1016
-                $xls = $sat->deep_arg->xll + $sat->deep_arg->omgadf + $cosis * $sat->deep_arg->xnode;
1017
-                $dls = $sat->dps->pl + $pgh - $sat->dps->pinc * $sat->deep_arg->xnode * $sinis;
1018
-                $xls = $xls + $dls;
1019
-                $xnoh = $sat->deep_arg->xnode;
1020
-                $sat->deep_arg->xnode = Predict_Math::AcTan($alfdp, $betdp);
1021
-
1022
-                /* This is a patch to Lyddane modification */
1023
-                /* suggested by Rob Matson. */
1024
-                if(abs($xnoh - $sat->deep_arg->xnode) > Predict::pi) {
1025
-                    if ($sat->deep_arg->xnode < $xnoh) {
1026
-                        $sat->deep_arg->xnode += Predict::twopi;
1027
-                    } else {
1028
-                        $sat->deep_arg->xnode -= Predict::twopi;
1029
-                    }
1030
-                }
1031
-
1032
-                $sat->deep_arg->xll = $sat->deep_arg->xll + $sat->dps->pl;
1033
-                $sat->deep_arg->omgadf = $xls - $sat->deep_arg->xll - cos($sat->deep_arg->xinc) *
1034
-                    $sat->deep_arg->xnode;
1035
-            } /* End case dpper: */
1036
-            return;
544
+        	case self::dpinit : /* Entrance for deep space initialization */
545
+            	$sat->dps->thgr = Predict_Time::ThetaG($sat->tle->epoch, $sat->deep_arg);
546
+            	$eq = $sat->tle->eo;
547
+            	$sat->dps->xnq = $sat->deep_arg->xnodp;
548
+            	$aqnv = 1.0 / $sat->deep_arg->aodp;
549
+            	$sat->dps->xqncl = $sat->tle->xincl;
550
+            	$xmao = $sat->tle->xmo;
551
+            	$xpidot = $sat->deep_arg->omgdot + $sat->deep_arg->xnodot;
552
+            	$sinq = sin($sat->tle->xnodeo);
553
+            	$cosq = cos($sat->tle->xnodeo);
554
+            	$sat->dps->omegaq = $sat->tle->omegao;
555
+            	$sat->dps->preep = 0;
556
+
557
+            	/* Initialize lunar solar terms */
558
+            	$day = $sat->deep_arg->ds50 + 18261.5;  /* Days since 1900 Jan 0.5 */
559
+            	if ($day != $sat->dps->preep) {
560
+                	$sat->dps->preep = $day;
561
+                	$xnodce = 4.5236020 - 9.2422029E-4 * $day;
562
+                	$stem = sin($xnodce);
563
+                	$ctem = cos($xnodce);
564
+                	$sat->dps->zcosil = 0.91375164 - 0.03568096 * $ctem;
565
+                	$sat->dps->zsinil = sqrt(1.0 - $sat->dps->zcosil * $sat->dps->zcosil);
566
+                	$sat->dps->zsinhl = 0.089683511 * $stem / $sat->dps->zsinil;
567
+                	$sat->dps->zcoshl = sqrt(1.0 - $sat->dps->zsinhl * $sat->dps->zsinhl);
568
+                	$c = 4.7199672 + 0.22997150 * $day;
569
+                	$gam = 5.8351514 + 0.0019443680 * $day;
570
+                	$sat->dps->zmol = Predict_Math::FMod2p($c - $gam);
571
+                	$zx = 0.39785416 * $stem / $sat->dps->zsinil;
572
+                	$zy = $sat->dps->zcoshl * $ctem + 0.91744867 * $sat->dps->zsinhl * $stem;
573
+                	$zx = Predict_Math::AcTan($zx, $zy);
574
+                	$zx = $gam + $zx - $xnodce;
575
+                	$sat->dps->zcosgl = cos($zx);
576
+                	$sat->dps->zsingl = sin($zx);
577
+                	$sat->dps->zmos = 6.2565837 + 0.017201977 * $day;
578
+                	$sat->dps->zmos = Predict_Math::FMod2p($sat->dps->zmos);
579
+            	} /* End if(day != preep) */
580
+
581
+            	/* Do solar terms */
582
+            	$sat->dps->savtsn = 1E20;
583
+            	$zcosg = Predict::zcosgs;
584
+            	$zsing = Predict::zsings;
585
+            	$zcosi = Predict::zcosis;
586
+            	$zsini = Predict::zsinis;
587
+            	$zcosh = $cosq;
588
+            	$zsinh = $sinq;
589
+            	$cc = Predict::c1ss;
590
+            	$zn = Predict::zns;
591
+            	$ze = Predict::zes;
592
+            	$zmo = $sat->dps->zmos;
593
+            	$xnoi = 1.0 / $sat->dps->xnq;
594
+
595
+            	/* Loop breaks when Solar terms are done a second */
596
+            	/* time, after Lunar terms are initialized        */
597
+            	for(;;) {
598
+                	/* Solar terms done again after Lunar terms are done */
599
+                	$a1 = $zcosg * $zcosh + $zsing * $zcosi * $zsinh;
600
+                	$a3 = -$zsing * $zcosh + $zcosg * $zcosi * $zsinh;
601
+                	$a7 = -$zcosg * $zsinh + $zsing * $zcosi * $zcosh;
602
+                	$a8 = $zsing * $zsini;
603
+                	$a9 = $zsing * $zsinh + $zcosg * $zcosi * $zcosh;
604
+                	$a10 = $zcosg * $zsini;
605
+                	$a2 = $sat->deep_arg->cosio * $a7 + $sat->deep_arg->sinio * $a8;
606
+                	$a4 = $sat->deep_arg->cosio * $a9 + $sat->deep_arg->sinio * $a10;
607
+                	$a5 = -$sat->deep_arg->sinio * $a7 + $sat->deep_arg->cosio * $a8;
608
+                	$a6 = -$sat->deep_arg->sinio * $a9 + $sat->deep_arg->cosio * $a10;
609
+                	$x1 = $a1 * $sat->deep_arg->cosg + $a2 * $sat->deep_arg->sing;
610
+                	$x2 = $a3 * $sat->deep_arg->cosg + $a4 * $sat->deep_arg->sing;
611
+                	$x3 = -$a1 * $sat->deep_arg->sing + $a2 * $sat->deep_arg->cosg;
612
+                	$x4 = -$a3 * $sat->deep_arg->sing + $a4 * $sat->deep_arg->cosg;
613
+                	$x5 = $a5 * $sat->deep_arg->sing;
614
+                	$x6 = $a6 * $sat->deep_arg->sing;
615
+                	$x7 = $a5 * $sat->deep_arg->cosg;
616
+                	$x8 = $a6 * $sat->deep_arg->cosg;
617
+                	$z31 = 12 * $x1 * $x1 - 3 * $x3 * $x3;
618
+                	$z32 = 24 * $x1 * $x2 - 6 * $x3 * $x4;
619
+                	$z33 = 12 * $x2 * $x2 - 3 * $x4 * $x4;
620
+                	$z1 = 3 * ($a1 * $a1 + $a2 * $a2) + $z31 * $sat->deep_arg->eosq;
621
+                	$z2 = 6 * ($a1 * $a3 + $a2 * $a4) + $z32 * $sat->deep_arg->eosq;
622
+                	$z3 = 3 * ($a3 * $a3 + $a4 * $a4) + $z33 * $sat->deep_arg->eosq;
623
+                	$z11 = -6 * $a1 * $a5 + $sat->deep_arg->eosq * (-24 * $x1 * $x7 - 6 * $x3 * $x5);
624
+                	$z12 = -6 * ($a1 * $a6 + $a3 * $a5) + $sat->deep_arg->eosq *
625
+                    	(-24 * ($x2 * $x7 + $x1 * $x8) - 6 * ($x3 * $x6 + $x4 * $x5));
626
+                	$z13 = -6 * $a3 * $a6 + $sat->deep_arg->eosq * (-24 * $x2 * $x8 - 6 * $x4 * $x6);
627
+                	$z21 = 6 * $a2 * $a5 + $sat->deep_arg->eosq * (24 * $x1 * $x5 - 6 * $x3 * $x7);
628
+                	$z22 = 6 * ($a4 * $a5 + $a2 * $a6) + $sat->deep_arg->eosq *
629
+                    	(24 * ($x2 * $x5 + $x1 * $x6) - 6 * ($x4 * $x7 + $x3 * $x8));
630
+                	$z23 = 6 * $a4 * $a6 + $sat->deep_arg->eosq * (24 * $x2 * $x6 - 6 * $x4 * $x8);
631
+                	$z1 = $z1 + $z1 + $sat->deep_arg->betao2 * $z31;
632
+                	$z2 = $z2 + $z2 + $sat->deep_arg->betao2 * $z32;
633
+                	$z3 = $z3 + $z3 + $sat->deep_arg->betao2 * $z33;
634
+                	$s3 = $cc * $xnoi;
635
+                	$s2 = -0.5 * $s3 / $sat->deep_arg->betao;
636
+                	$s4 = $s3 * $sat->deep_arg->betao;
637
+                	$s1 = -15 * $eq * $s4;
638
+                	$s5 = $x1 * $x3 + $x2 * $x4;
639
+                	$s6 = $x2 * $x3 + $x1 * $x4;
640
+                	$s7 = $x2 * $x4 - $x1 * $x3;
641
+                	$se = $s1 * $zn * $s5;
642
+                	$si = $s2 * $zn * ($z11 + $z13);
643
+                	$sl = -$zn * $s3 * ($z1 + $z3 - 14 - 6 * $sat->deep_arg->eosq);
644
+                	$sgh = $s4 * $zn * ($z31 + $z33 - 6);
645
+                	$sh = -$zn * $s2 * ($z21 + $z23);
646
+                	if ($sat->dps->xqncl < 5.2359877E-2) {
647
+                    	$sh = 0;
648
+                	}
649
+                	$sat->dps->ee2 = 2 * $s1 * $s6;
650
+                	$sat->dps->e3 = 2 * $s1 * $s7;
651
+                	$sat->dps->xi2 = 2 * $s2 * $z12;
652
+                	$sat->dps->xi3 = 2 * $s2 * ($z13 - $z11);
653
+                	$sat->dps->xl2 = -2 * $s3 * $z2;
654
+                	$sat->dps->xl3 = -2 * $s3 * ($z3 - $z1);
655
+                	$sat->dps->xl4 = -2 * $s3 * (-21 - 9 * $sat->deep_arg->eosq) * $ze;
656
+                	$sat->dps->xgh2 = 2 * $s4 * $z32;
657
+                	$sat->dps->xgh3 = 2 * $s4 * ($z33 - $z31);
658
+                	$sat->dps->xgh4 = -18 * $s4 * $ze;
659
+                	$sat->dps->xh2 = -2 * $s2 * $z22;
660
+                	$sat->dps->xh3 = -2 * $s2 * ($z23 - $z21);
661
+
662
+                	if ($sat->flags & self::LUNAR_TERMS_DONE_FLAG) {
663
+                    	break;
664
+                	}
665
+
666
+                	/* Do lunar terms */
667
+                	$sat->dps->sse = $se;
668
+                	$sat->dps->ssi = $si;
669
+                	$sat->dps->ssl = $sl;
670
+                	$sat->dps->ssh = $sh / $sat->deep_arg->sinio;
671
+                	$sat->dps->ssg = $sgh - $sat->deep_arg->cosio * $sat->dps->ssh;
672
+                	$sat->dps->se2 = $sat->dps->ee2;
673
+                	$sat->dps->si2 = $sat->dps->xi2;
674
+                	$sat->dps->sl2 = $sat->dps->xl2;
675
+                	$sat->dps->sgh2 = $sat->dps->xgh2;
676
+                	$sat->dps->sh2 = $sat->dps->xh2;
677
+                	$sat->dps->se3 = $sat->dps->e3;
678
+                	$sat->dps->si3 = $sat->dps->xi3;
679
+                	$sat->dps->sl3 = $sat->dps->xl3;
680
+                	$sat->dps->sgh3 = $sat->dps->xgh3;
681
+                	$sat->dps->sh3 = $sat->dps->xh3;
682
+                	$sat->dps->sl4 = $sat->dps->xl4;
683
+                	$sat->dps->sgh4 = $sat->dps->xgh4;
684
+                	$zcosg = $sat->dps->zcosgl;
685
+                	$zsing = $sat->dps->zsingl;
686
+                	$zcosi = $sat->dps->zcosil;
687
+                	$zsini = $sat->dps->zsinil;
688
+                	$zcosh = $sat->dps->zcoshl * $cosq + $sat->dps->zsinhl * $sinq;
689
+                	$zsinh = $sinq * $sat->dps->zcoshl - $cosq * $sat->dps->zsinhl;
690
+                	$zn = Predict::znl;
691
+                	$cc = Predict::c1l;
692
+                	$ze = Predict::zel;
693
+                	$zmo = $sat->dps->zmol;
694
+                	$sat->flags |= self::LUNAR_TERMS_DONE_FLAG;
695
+            	} /* End of for(;;) */
696
+
697
+            	$sat->dps->sse = $sat->dps->sse + $se;
698
+            	$sat->dps->ssi = $sat->dps->ssi + $si;
699
+            	$sat->dps->ssl = $sat->dps->ssl + $sl;
700
+            	$sat->dps->ssg = $sat->dps->ssg + $sgh - $sat->deep_arg->cosio / $sat->deep_arg->sinio * $sh;
701
+            	$sat->dps->ssh = $sat->dps->ssh + $sh / $sat->deep_arg->sinio;
702
+
703
+            	/* Geopotential resonance initialization for 12 hour orbits */
704
+            	$sat->flags &= ~self::RESONANCE_FLAG;
705
+            	$sat->flags &= ~self::SYNCHRONOUS_FLAG;
706
+
707
+            	if (!(($sat->dps->xnq < 0.0052359877) && ($sat->dps->xnq > 0.0034906585))) {
708
+                	if( ($sat->dps->xnq < 0.00826) || ($sat->dps->xnq > 0.00924) ) {
709
+                    	return;
710
+                	}
711
+                	if ($eq < 0.5) {
712
+                    	return;
713
+                	}
714
+                	$sat->flags |= self::RESONANCE_FLAG;
715
+                	$eoc = $eq * $sat->deep_arg->eosq;
716
+                	$g201 = -0.306 - ($eq - 0.64) * 0.440;
717
+                	if ($eq <= 0.65) {
718
+                    	$g211 = 3.616 - 13.247 * $eq + 16.290 * $sat->deep_arg->eosq;
719
+                    	$g310 = -19.302 + 117.390 * $eq - 228.419 *
720
+                        	$sat->deep_arg->eosq + 156.591 * $eoc;
721
+                    	$g322 = -18.9068 + 109.7927 * $eq - 214.6334 *
722
+                        	$sat->deep_arg->eosq + 146.5816 * $eoc;
723
+                    	$g410 = -41.122 + 242.694 * $eq - 471.094 *
724
+                        	$sat->deep_arg->eosq + 313.953 * $eoc;
725
+                    	$g422 = -146.407 + 841.880 * $eq - 1629.014 *
726
+                        	$sat->deep_arg->eosq + 1083.435 * $eoc;
727
+                    	$g520 = -532.114 + 3017.977 * $eq - 5740 *
728
+                        	$sat->deep_arg->eosq + 3708.276 * $eoc;
729
+                	} else {
730
+                    	$g211 = -72.099 + 331.819 * $eq - 508.738 *
731
+                        	$sat->deep_arg->eosq + 266.724 * $eoc;
732
+                    	$g310 = -346.844 + 1582.851 * $eq - 2415.925 *
733
+                        	$sat->deep_arg->eosq + 1246.113 * $eoc;
734
+                    	$g322 = -342.585 + 1554.908 * $eq - 2366.899 *
735
+                        	$sat->deep_arg->eosq + 1215.972 * $eoc;
736
+                    	$g410 = -1052.797 + 4758.686 * $eq - 7193.992 *
737
+                        	$sat->deep_arg->eosq + 3651.957 * $eoc;
738
+                    	$g422 = -3581.69 + 16178.11 * $eq - 24462.77 *
739
+                        	$sat->deep_arg->eosq+ 12422.52 * $eoc;
740
+                    	if ($eq <= 0.715) {
741
+                        	$g520 = 1464.74 - 4664.75 * $eq + 3763.64 * $sat->deep_arg->eosq;
742
+                    	} else {
743
+                        	$g520 = -5149.66 + 29936.92 * $eq - 54087.36 *
744
+                            	$sat->deep_arg->eosq + 31324.56 * $eoc;
745
+                    	}
746
+                	} /* End if (eq <= 0.65) */
747
+
748
+                	if ($eq < 0.7) {
749
+                    	$g533 = -919.2277 + 4988.61 * $eq - 9064.77 *
750
+                        	$sat->deep_arg->eosq + 5542.21 * $eoc;
751
+                    	$g521 = -822.71072 + 4568.6173 * $eq - 8491.4146 *
752
+                        	$sat->deep_arg->eosq + 5337.524 * $eoc;
753
+                    	$g532 = -853.666 + 4690.25 * $eq - 8624.77 *
754
+                        	$sat->deep_arg->eosq + 5341.4 * $eoc;
755
+                	}
756
+                	else {
757
+                    	$g533 = -37995.78 + 161616.52 * $eq - 229838.2*
758
+                        	$sat->deep_arg->eosq + 109377.94 * $eoc;
759
+                    	$g521 = -51752.104 + 218913.95 * $eq - 309468.16*
760
+                        	$sat->deep_arg->eosq + 146349.42 * $eoc;
761
+                    	$g532 = -40023.88 + 170470.89 * $eq - 242699.48*
762
+                        	$sat->deep_arg->eosq + 115605.82 * $eoc;
763
+                	} /* End if (eq <= 0.7) */
764
+
765
+                	$sini2 = $sat->deep_arg->sinio * $sat->deep_arg->sinio;
766
+                	$f220 = 0.75 * (1 + 2 * $sat->deep_arg->cosio + $sat->deep_arg->theta2);
767
+                	$f221 = 1.5 * $sini2;
768
+                	$f321 = 1.875 * $sat->deep_arg->sinio * (1 - 2 *
769
+                                  	$sat->deep_arg->cosio - 3 * $sat->deep_arg->theta2);
770
+                	$f322 = -1.875 * $sat->deep_arg->sinio * (1 + 2*
771
+                                   	$sat->deep_arg->cosio - 3 * $sat->deep_arg->theta2);
772
+                	$f441 = 35 * $sini2 * $f220;
773
+                	$f442 = 39.3750 * $sini2 * $sini2;
774
+                	$f522 = 9.84375 * $sat->deep_arg->sinio * ($sini2 * (1 - 2 * $sat->deep_arg->cosio - 5 *
775
+                                       	$sat->deep_arg->theta2) + 0.33333333 * (-2 + 4 * $sat->deep_arg->cosio +
776
+                                                     	6 * $sat->deep_arg->theta2));
777
+                	$f523 = $sat->deep_arg->sinio * (4.92187512 * $sini2 * (-2 - 4 *
778
+                                      	$sat->deep_arg->cosio + 10 * $sat->deep_arg->theta2) + 6.56250012
779
+                            	* (1 + 2 * $sat->deep_arg->cosio - 3 * $sat->deep_arg->theta2));
780
+                	$f542 = 29.53125 * $sat->deep_arg->sinio * (2 - 8 *
781
+                                 	$sat->deep_arg->cosio + $sat->deep_arg->theta2 *
782
+                                 	(-12 + 8 * $sat->deep_arg->cosio + 10 * $sat->deep_arg->theta2));
783
+                	$f543 = 29.53125 * $sat->deep_arg->sinio * (-2 - 8 * $sat->deep_arg->cosio +
784
+                                 	$sat->deep_arg->theta2 * (12 + 8 * $sat->deep_arg->cosio - 10 *
785
+                                           	$sat->deep_arg->theta2));
786
+                	$xno2 = $sat->dps->xnq * $sat->dps->xnq;
787
+                	$ainv2 = $aqnv * $aqnv;
788
+                	$temp1 = 3 * $xno2 * $ainv2;
789
+                	$temp = $temp1 * Predict::root22;
790
+                	$sat->dps->d2201 = $temp * $f220 * $g201;
791
+                	$sat->dps->d2211 = $temp * $f221 * $g211;
792
+                	$temp1 = $temp1 * $aqnv;
793
+                	$temp = $temp1 * Predict::root32;
794
+                	$sat->dps->d3210 = $temp * $f321 * $g310;
795
+                	$sat->dps->d3222 = $temp * $f322 * $g322;
796
+                	$temp1 = $temp1 * $aqnv;
797
+                	$temp = 2 * $temp1 * Predict::root44;
798
+                	$sat->dps->d4410 = $temp * $f441 * $g410;
799
+                	$sat->dps->d4422 = $temp * $f442 * $g422;
800
+                	$temp1 = $temp1 * $aqnv;
801
+                	$temp = $temp1 * Predict::root52;
802
+                	$sat->dps->d5220 = $temp * $f522 * $g520;
803
+                	$sat->dps->d5232 = $temp * $f523 * $g532;
804
+                	$temp = 2 * $temp1 * Predict::root54;
805
+                	$sat->dps->d5421 = $temp * $f542 * $g521;
806
+                	$sat->dps->d5433 = $temp * $f543 * $g533;
807
+                	$sat->dps->xlamo = $xmao + $sat->tle->xnodeo + $sat->tle->xnodeo - $sat->dps->thgr - $sat->dps->thgr;
808
+                	$bfact = $sat->deep_arg->xmdot + $sat->deep_arg->xnodot +
809
+                    	$sat->deep_arg->xnodot - Predict::thdt - Predict::thdt;
810
+                	$bfact = $bfact + $sat->dps->ssl + $sat->dps->ssh + $sat->dps->ssh;
811
+            	} else {
812
+                	$sat->flags |= self::RESONANCE_FLAG;
813
+                	$sat->flags |= self::SYNCHRONOUS_FLAG;
814
+                	/* Synchronous resonance terms initialization */
815
+                	$g200 = 1 + $sat->deep_arg->eosq * (-2.5 + 0.8125 * $sat->deep_arg->eosq);
816
+                	$g310 = 1 + 2 * $sat->deep_arg->eosq;
817
+                	$g300 = 1 + $sat->deep_arg->eosq * (-6 + 6.60937 * $sat->deep_arg->eosq);
818
+                	$f220 = 0.75 * (1 + $sat->deep_arg->cosio) * (1 + $sat->deep_arg->cosio);
819
+                	$f311 = 0.9375 * $sat->deep_arg->sinio * $sat->deep_arg->sinio *
820
+                    	(1 + 3 * $sat->deep_arg->cosio) - 0.75 * (1 + $sat->deep_arg->cosio);
821
+                	$f330 = 1 + $sat->deep_arg->cosio;
822
+                	$f330 = 1.875 * $f330 * $f330 * $f330;
823
+                	$sat->dps->del1 = 3 * $sat->dps->xnq * $sat->dps->xnq * $aqnv * $aqnv;
824
+                	$sat->dps->del2 = 2 * $sat->dps->del1 * $f220 * $g200 * Predict::q22;
825
+                	$sat->dps->del3 = 3 * $sat->dps->del1 * $f330 * $g300 * Predict::q33 * $aqnv;
826
+                	$sat->dps->del1 = $sat->dps->del1 * $f311 * $g310 * Predict::q31 * $aqnv;
827
+                	$sat->dps->fasx2 = 0.13130908;
828
+                	$sat->dps->fasx4 = 2.8843198;
829
+                	$sat->dps->fasx6 = 0.37448087;
830
+                	$sat->dps->xlamo = $xmao + $sat->tle->xnodeo + $sat->tle->omegao - $sat->dps->thgr;
831
+                	$bfact = $sat->deep_arg->xmdot + $xpidot - Predict::thdt;
832
+                	$bfact = $bfact + $sat->dps->ssl + $sat->dps->ssg + $sat->dps->ssh;
833
+            	} /* End if( !(xnq < 0.0052359877) && (xnq > 0.0034906585) ) */
834
+
835
+            	$sat->dps->xfact = $bfact - $sat->dps->xnq;
836
+
837
+            	/* Initialize integrator */
838
+            	$sat->dps->xli = $sat->dps->xlamo;
839
+            	$sat->dps->xni = $sat->dps->xnq;
840
+            	$sat->dps->atime = 0;
841
+            	$sat->dps->stepp = 720;
842
+            	$sat->dps->stepn = -720;
843
+            	$sat->dps->step2 = 259200;
844
+            	/* End case self::dpinit: */
845
+            	return;
846
+
847
+        	case self::dpsec: /* Entrance for deep space secular effects */
848
+            	$sat->deep_arg->xll = $sat->deep_arg->xll + $sat->dps->ssl * $sat->deep_arg->t;
849
+            	$sat->deep_arg->omgadf = $sat->deep_arg->omgadf + $sat->dps->ssg * $sat->deep_arg->t;
850
+            	$sat->deep_arg->xnode = $sat->deep_arg->xnode + $sat->dps->ssh * $sat->deep_arg->t;
851
+            	$sat->deep_arg->em = $sat->tle->eo + $sat->dps->sse * $sat->deep_arg->t;
852
+            	$sat->deep_arg->xinc = $sat->tle->xincl + $sat->dps->ssi * $sat->deep_arg->t;
853
+            	if ($sat->deep_arg->xinc < 0) {
854
+                	$sat->deep_arg->xinc = -$sat->deep_arg->xinc;
855
+                	$sat->deep_arg->xnode = $sat->deep_arg->xnode + Predict::pi;
856
+                	$sat->deep_arg->omgadf = $sat->deep_arg->omgadf - Predict::pi;
857
+            	}
858
+            	if(~$sat->flags & self::RESONANCE_FLAG ) {
859
+                	return;
860
+            	}
861
+
862
+            	do {
863
+                	if ( ($sat->dps->atime == 0) ||
864
+                    	(($sat->deep_arg->t >= 0) && ($sat->dps->atime < 0)) ||
865
+                    	(($sat->deep_arg->t < 0) && ($sat->dps->atime >= 0)) ) {
866
+                    	/* Epoch restart */
867
+                    	if ($sat->deep_arg->t >= 0) {
868
+                        	$delt = $sat->dps->stepp;
869
+                    	} else {
870
+                        	$delt = $sat->dps->stepn;
871
+                    	}
872
+
873
+                    	$sat->dps->atime = 0;
874
+                    	$sat->dps->xni = $sat->dps->xnq;
875
+                    	$sat->dps->xli = $sat->dps->xlamo;
876
+                	} else {
877
+                    	if (abs($sat->deep_arg->t) >= abs($sat->dps->atime)) {
878
+                        	if ($sat->deep_arg->t > 0) {
879
+                            	$delt = $sat->dps->stepp;
880
+                        	} else {
881
+                            	$delt = $sat->dps->stepn;
882
+                        	}
883
+                    	}
884
+                	}
885
+
886
+                	do {
887
+                    	if (abs($sat->deep_arg->t - $sat->dps->atime) >= $sat->dps->stepp) {
888
+                        	$sat->flags |= self::DO_LOOP_FLAG;
889
+                        	$sat->flags &= ~self::EPOCH_RESTART_FLAG;
890
+                    	}
891
+                    	else {
892
+                        	$ft = $sat->deep_arg->t - $sat->dps->atime;
893
+                        	$sat->flags &= ~self::DO_LOOP_FLAG;
894
+                    	}
895
+
896
+                    	if (abs($sat->deep_arg->t) < abs($sat->dps->atime)) {
897
+                        	if ($sat->deep_arg->t >= 0) {
898
+                            	$delt = $sat->dps->stepn;
899
+                        	} else {
900
+                            	$delt = $sat->dps->stepp;
901
+                        	}
902
+                        	$sat->flags |= (self::DO_LOOP_FLAG | self::EPOCH_RESTART_FLAG);
903
+                    	}
904
+
905
+                    	/* Dot terms calculated */
906
+                    	if ($sat->flags & self::SYNCHRONOUS_FLAG) {
907
+                        	$xndot = $sat->dps->del1 * sin($sat->dps->xli - $sat->dps->fasx2) + $sat->dps->del2 * sin(2 * ($sat->dps->xli - $sat->dps->fasx4))
908
+                            	+ $sat->dps->del3 * sin(3 * ($sat->dps->xli - $sat->dps->fasx6));
909
+                        	$xnddt = $sat->dps->del1 * cos($sat->dps->xli - $sat->dps->fasx2) + 2 * $sat->dps->del2 * cos(2 * ($sat->dps->xli - $sat->dps->fasx4))
910
+                            	+ 3 * $sat->dps->del3 * cos(3 * ($sat->dps->xli - $sat->dps->fasx6));
911
+                    	} else {
912
+                        	$xomi = $sat->dps->omegaq + $sat->deep_arg->omgdot * $sat->dps->atime;
913
+                        	$x2omi = $xomi + $xomi;
914
+                        	$x2li = $sat->dps->xli + $sat->dps->xli;
915
+                        	$xndot = $sat->dps->d2201 * sin($x2omi + $sat->dps->xli - Predict::g22)
916
+                            	+ $sat->dps->d2211 * sin($sat->dps->xli - Predict::g22)
917
+                            	+ $sat->dps->d3210 * sin($xomi + $sat->dps->xli - Predict::g32)
918
+                            	+ $sat->dps->d3222 * sin(-$xomi + $sat->dps->xli - Predict::g32)
919
+                            	+ $sat->dps->d4410 * sin($x2omi + $x2li- Predict::g44)
920
+                            	+ $sat->dps->d4422 * sin($x2li- Predict::g44)
921
+                            	+ $sat->dps->d5220 * sin($xomi + $sat->dps->xli- Predict::g52)
922
+                            	+ $sat->dps->d5232 * sin(-$xomi + $sat->dps->xli- Predict::g52)
923
+                            	+ $sat->dps->d5421 * sin($xomi + $x2li - Predict::g54)
924
+                            	+ $sat->dps->d5433 * sin(-$xomi + $x2li - Predict::g54);
925
+                        	$xnddt = $sat->dps->d2201 * cos($x2omi + $sat->dps->xli- Predict::g22)
926
+                            	+ $sat->dps->d2211 * cos($sat->dps->xli - Predict::g22)
927
+                            	+ $sat->dps->d3210 * cos($xomi + $sat->dps->xli - Predict::g32)
928
+                            	+ $sat->dps->d3222 * cos(-$xomi + $sat->dps->xli - Predict::g32)
929
+                            	+ $sat->dps->d5220 * cos($xomi + $sat->dps->xli - Predict::g52)
930
+                            	+ $sat->dps->d5232 * cos(-$xomi + $sat->dps->xli - Predict::g52)
931
+                            	+ 2 * ($sat->dps->d4410 * cos($x2omi + $x2li - Predict::g44)
932
+                                	+ $sat->dps->d4422 * cos($x2li - Predict::g44)
933
+                                	+ $sat->dps->d5421 * cos($xomi + $x2li - Predict::g54)
934
+                                	+ $sat->dps->d5433 * cos(-$xomi + $x2li - Predict::g54));
935
+                    	} /* End of if (isFlagSet(SYNCHRONOUS_FLAG)) */
936
+
937
+                    	$xldot = $sat->dps->xni + $sat->dps->xfact;
938
+                    	$xnddt = $xnddt * $xldot;
939
+
940
+                    	if ($sat->flags & self::DO_LOOP_FLAG) {
941
+                        	$sat->dps->xli = $sat->dps->xli + $xldot * $delt + $xndot * $sat->dps->step2;
942
+                        	$sat->dps->xni = $sat->dps->xni + $xndot * $delt + $xnddt * $sat->dps->step2;
943
+                        	$sat->dps->atime = $sat->dps->atime + $delt;
944
+                    	}
945
+                	} while (($sat->flags & self::DO_LOOP_FLAG) &&
946
+                        	(~$sat->flags & self::EPOCH_RESTART_FLAG));
947
+            	}
948
+            	while (($sat->flags & self::DO_LOOP_FLAG) && ($sat->flags & self::EPOCH_RESTART_FLAG));
949
+
950
+            	$sat->deep_arg->xn = $sat->dps->xni + $xndot * $ft + $xnddt * $ft * $ft * 0.5;
951
+            	$xl = $sat->dps->xli + $xldot * $ft + $xndot * $ft * $ft * 0.5;
952
+            	$temp = -$sat->deep_arg->xnode + $sat->dps->thgr + $sat->deep_arg->t * Predict::thdt;
953
+
954
+            	if (~$sat->flags & self::SYNCHRONOUS_FLAG) {
955
+                	$sat->deep_arg->xll = $xl + $temp + $temp;
956
+            	} else {
957
+                	$sat->deep_arg->xll = $xl - $sat->deep_arg->omgadf + $temp;
958
+            	}
959
+
960
+            	return;
961
+            	/* End case dpsec: */
962
+
963
+        	case self::dpper: /* Entrance for lunar-solar periodics */
964
+            	$sinis = sin($sat->deep_arg->xinc);
965
+            	$cosis = cos($sat->deep_arg->xinc);
966
+            	if (abs($sat->dps->savtsn - $sat->deep_arg->t) >= 30) {
967
+                	$sat->dps->savtsn = $sat->deep_arg->t;
968
+                	$zm = $sat->dps->zmos + Predict::zns * $sat->deep_arg->t;
969
+                	$zf = $zm + 2 * Predict::zes * sin($zm);
970
+                	$sinzf = sin($zf);
971
+                	$f2 = 0.5 * $sinzf * $sinzf - 0.25;
972
+                	$f3 = -0.5 * $sinzf * cos($zf);
973
+                	$ses = $sat->dps->se2 * $f2 + $sat->dps->se3 * $f3;
974
+                	$sis = $sat->dps->si2 * $f2 + $sat->dps->si3 * $f3;
975
+                	$sls = $sat->dps->sl2 * $f2 + $sat->dps->sl3 * $f3 + $sat->dps->sl4 * $sinzf;
976
+                	$sat->dps->sghs = $sat->dps->sgh2 * $f2 + $sat->dps->sgh3 * $f3 + $sat->dps->sgh4 * $sinzf;
977
+                	$sat->dps->shs = $sat->dps->sh2 * $f2 + $sat->dps->sh3 * $f3;
978
+                	$zm = $sat->dps->zmol + Predict::znl * $sat->deep_arg->t;
979
+                	$zf = $zm + 2 * Predict::zel * sin($zm);
980
+                	$sinzf = sin($zf);
981
+                	$f2 = 0.5 * $sinzf * $sinzf - 0.25;
982
+                	$f3 = -0.5 * $sinzf * cos($zf);
983
+                	$sel = $sat->dps->ee2 * $f2 + $sat->dps->e3 * $f3;
984
+                	$sil = $sat->dps->xi2 * $f2 + $sat->dps->xi3 * $f3;
985
+                	$sll = $sat->dps->xl2 * $f2 + $sat->dps->xl3 * $f3 + $sat->dps->xl4 * $sinzf;
986
+                	$sat->dps->sghl = $sat->dps->xgh2 * $f2 + $sat->dps->xgh3 * $f3 + $sat->dps->xgh4 * $sinzf;
987
+                	$sat->dps->sh1 = $sat->dps->xh2 * $f2 + $sat->dps->xh3 * $f3;
988
+                	$sat->dps->pe = $ses + $sel;
989
+                	$sat->dps->pinc = $sis + $sil;
990
+                	$sat->dps->pl = $sls + $sll;
991
+            	}
992
+
993
+            	$pgh = $sat->dps->sghs + $sat->dps->sghl;
994
+            	$ph = $sat->dps->shs + $sat->dps->sh1;
995
+            	$sat->deep_arg->xinc = $sat->deep_arg->xinc + $sat->dps->pinc;
996
+            	$sat->deep_arg->em = $sat->deep_arg->em + $sat->dps->pe;
997
+
998
+            	if ($sat->dps->xqncl >= 0.2) {
999
+                	/* Apply periodics directly */
1000
+                	$ph = $ph / $sat->deep_arg->sinio;
1001
+                	$pgh = $pgh - $sat->deep_arg->cosio * $ph;
1002
+                	$sat->deep_arg->omgadf = $sat->deep_arg->omgadf + $pgh;
1003
+                	$sat->deep_arg->xnode = $sat->deep_arg->xnode + $ph;
1004
+                	$sat->deep_arg->xll = $sat->deep_arg->xll + $sat->dps->pl;
1005
+            	} else {
1006
+                	/* Apply periodics with Lyddane modification */
1007
+                	$sinok = sin($sat->deep_arg->xnode);
1008
+                	$cosok = cos($sat->deep_arg->xnode);
1009
+                	$alfdp = $sinis * $sinok;
1010
+                	$betdp = $sinis * $cosok;
1011
+                	$dalf = $ph * $cosok + $sat->dps->pinc * $cosis * $sinok;
1012
+                	$dbet = -$ph * $sinok + $sat->dps->pinc * $cosis * $cosok;
1013
+                	$alfdp = $alfdp + $dalf;
1014
+                	$betdp = $betdp + $dbet;
1015
+                	$sat->deep_arg->xnode = Predict_Math::FMod2p($sat->deep_arg->xnode);
1016
+                	$xls = $sat->deep_arg->xll + $sat->deep_arg->omgadf + $cosis * $sat->deep_arg->xnode;
1017
+                	$dls = $sat->dps->pl + $pgh - $sat->dps->pinc * $sat->deep_arg->xnode * $sinis;
1018
+                	$xls = $xls + $dls;
1019
+                	$xnoh = $sat->deep_arg->xnode;
1020
+                	$sat->deep_arg->xnode = Predict_Math::AcTan($alfdp, $betdp);
1021
+
1022
+                	/* This is a patch to Lyddane modification */
1023
+                	/* suggested by Rob Matson. */
1024
+                	if(abs($xnoh - $sat->deep_arg->xnode) > Predict::pi) {
1025
+                    	if ($sat->deep_arg->xnode < $xnoh) {
1026
+                        	$sat->deep_arg->xnode += Predict::twopi;
1027
+                    	} else {
1028
+                        	$sat->deep_arg->xnode -= Predict::twopi;
1029
+                    	}
1030
+                	}
1031
+
1032
+                	$sat->deep_arg->xll = $sat->deep_arg->xll + $sat->dps->pl;
1033
+                	$sat->deep_arg->omgadf = $xls - $sat->deep_arg->xll - cos($sat->deep_arg->xinc) *
1034
+                    	$sat->deep_arg->xnode;
1035
+            	} /* End case dpper: */
1036
+            	return;
1037 1037
 
1038 1038
         } /* End switch(ientry) */
1039 1039
 
Please login to merge, or discard this patch.
Spacing   +511 added lines, -511 removed lines patch added patch discarded remove patch
@@ -42,10 +42,10 @@  discard block
 block discarded – undo
42 42
 
43 43
     /* orbit_type_t struct */
44 44
     const ORBIT_TYPE_UNKNOWN = 0;
45
-    const ORBIT_TYPE_LEO     = 1;            /*!< Low Earth orbit, up to 1200 km. */
46
-    const ORBIT_TYPE_ICO     = 2;            /*!< Intermediate Circular Orbit, up to 1400 km. */
47
-    const ORBIT_TYPE_GEO     = 3;            /*!< Geostationary. */
48
-    const ORBIT_TYPE_GSO     = 4;            /*!< Geosynchronuous. */
45
+    const ORBIT_TYPE_LEO     = 1; /*!< Low Earth orbit, up to 1200 km. */
46
+    const ORBIT_TYPE_ICO     = 2; /*!< Intermediate Circular Orbit, up to 1400 km. */
47
+    const ORBIT_TYPE_GEO     = 3; /*!< Geostationary. */
48
+    const ORBIT_TYPE_GSO     = 4; /*!< Geosynchronuous. */
49 49
     const ORBIT_TYPE_MOLNIYA = 5;
50 50
     const ORBIT_TYPE_TUNDRA  = 6;
51 51
     const ORBIT_TYPE_POLAR   = 7;
@@ -70,29 +70,29 @@  discard block
 block discarded – undo
70 70
     public function SGP4(Predict_Sat $sat, $tsince)
71 71
     {
72 72
         /* Initialization */
73
-        if (~$sat->flags & self::SGP4_INITIALIZED_FLAG) {
73
+        if (~$sat->flags&self::SGP4_INITIALIZED_FLAG) {
74 74
             $sat->flags |= self::SGP4_INITIALIZED_FLAG;
75 75
 
76 76
             /* Recover original mean motion (xnodp) and   */
77 77
             /* semimajor axis (aodp) from input elements. */
78
-            $a1 = pow(Predict::xke / $sat->tle->xno, Predict::tothrd);
78
+            $a1 = pow(Predict::xke/$sat->tle->xno, Predict::tothrd);
79 79
             $sat->sgps->cosio = cos($sat->tle->xincl);
80
-            $theta2 = $sat->sgps->cosio * $sat->sgps->cosio;
81
-            $sat->sgps->x3thm1 = 3 * $theta2 - 1.0;
82
-            $eosq = $sat->tle->eo * $sat->tle->eo;
80
+            $theta2 = $sat->sgps->cosio*$sat->sgps->cosio;
81
+            $sat->sgps->x3thm1 = 3*$theta2 - 1.0;
82
+            $eosq = $sat->tle->eo*$sat->tle->eo;
83 83
             $betao2 = 1 - $eosq;
84 84
             $betao = sqrt($betao2);
85
-            $del1 = 1.5 * Predict::ck2 * $sat->sgps->x3thm1 / ($a1 * $a1 * $betao * $betao2);
86
-            $ao = $a1 * (1 - $del1 * (0.5 * Predict::tothrd + $del1 * (1 + 134.0 / 81.0 * $del1)));
87
-            $delo = 1.5 * Predict::ck2 * $sat->sgps->x3thm1 / ($ao * $ao * $betao * $betao2);
88
-            $sat->sgps->xnodp = $sat->tle->xno / (1.0 + $delo);
89
-            $sat->sgps->aodp = $ao / (1.0 - $delo);
85
+            $del1 = 1.5*Predict::ck2*$sat->sgps->x3thm1/($a1*$a1*$betao*$betao2);
86
+            $ao = $a1*(1 - $del1*(0.5*Predict::tothrd + $del1*(1 + 134.0/81.0*$del1)));
87
+            $delo = 1.5*Predict::ck2*$sat->sgps->x3thm1/($ao*$ao*$betao*$betao2);
88
+            $sat->sgps->xnodp = $sat->tle->xno/(1.0 + $delo);
89
+            $sat->sgps->aodp = $ao/(1.0 - $delo);
90 90
 
91 91
             /* For perigee less than 220 kilometers, the "simple" flag is set */
92 92
             /* and the equations are truncated to linear variation in sqrt a  */
93 93
             /* and quadratic variation in mean anomaly.  Also, the c3 term,   */
94 94
             /* the delta omega term, and the delta m term are dropped.        */
95
-            if (($sat->sgps->aodp * (1.0 - $sat->tle->eo) / Predict::ae) < (220.0 / Predict::xkmper + Predict::ae)) {
95
+            if (($sat->sgps->aodp*(1.0 - $sat->tle->eo)/Predict::ae) < (220.0/Predict::xkmper + Predict::ae)) {
96 96
                 $sat->flags |= self::SIMPLE_FLAG;
97 97
             } else {
98 98
                 $sat->flags &= ~self::SIMPLE_FLAG;
@@ -102,121 +102,121 @@  discard block
 block discarded – undo
102 102
             /* values of s and qoms2t are altered. */
103 103
             $s4 = Predict::__s__;
104 104
             $qoms24 = Predict::qoms2t;
105
-            $perige = ($sat->sgps->aodp * (1 - $sat->tle->eo) - Predict::ae) * Predict::xkmper;
105
+            $perige = ($sat->sgps->aodp*(1 - $sat->tle->eo) - Predict::ae)*Predict::xkmper;
106 106
             if ($perige < 156.0) {
107 107
                 if ($perige <= 98.0) {
108 108
                     $s4 = 20.0;
109 109
                 } else {
110 110
                     $s4 = $perige - 78.0;
111 111
                 }
112
-                $qoms24 = pow((120.0 - $s4) * Predict::ae / Predict::xkmper, 4);
113
-                $s4 = $s4 / Predict::xkmper + Predict::ae;
112
+                $qoms24 = pow((120.0 - $s4)*Predict::ae/Predict::xkmper, 4);
113
+                $s4 = $s4/Predict::xkmper + Predict::ae;
114 114
             }; /* FIXME FIXME: End of if(perige <= 98) NO WAY!!!! */
115 115
 
116
-            $pinvsq = 1.0 / ($sat->sgps->aodp * $sat->sgps->aodp * $betao2 * $betao2);
117
-            $tsi = 1.0 / ($sat->sgps->aodp - $s4);
118
-            $sat->sgps->eta = $sat->sgps->aodp * $sat->tle->eo * $tsi;
119
-            $etasq = $sat->sgps->eta * $sat->sgps->eta;
120
-            $eeta = $sat->tle->eo * $sat->sgps->eta;
116
+            $pinvsq = 1.0/($sat->sgps->aodp*$sat->sgps->aodp*$betao2*$betao2);
117
+            $tsi = 1.0/($sat->sgps->aodp - $s4);
118
+            $sat->sgps->eta = $sat->sgps->aodp*$sat->tle->eo*$tsi;
119
+            $etasq = $sat->sgps->eta*$sat->sgps->eta;
120
+            $eeta = $sat->tle->eo*$sat->sgps->eta;
121 121
             $psisq = abs(1.0 - $etasq);
122
-            $coef = $qoms24 * pow($tsi, 4);
123
-            $coef1 = $coef / pow($psisq, 3.5);
124
-            $c2 = $coef1 * $sat->sgps->xnodp * ($sat->sgps->aodp *
125
-                            (1.0 + 1.5 * $etasq + $eeta * (4.0 + $etasq)) +
126
-                            0.75 * Predict::ck2 * $tsi / $psisq * $sat->sgps->x3thm1 *
127
-                            (8.0 + 3.0 * $etasq * (8 + $etasq)));
128
-            $sat->sgps->c1 = $c2 * $sat->tle->bstar;
122
+            $coef = $qoms24*pow($tsi, 4);
123
+            $coef1 = $coef/pow($psisq, 3.5);
124
+            $c2 = $coef1*$sat->sgps->xnodp*($sat->sgps->aodp*
125
+                            (1.0 + 1.5*$etasq + $eeta*(4.0 + $etasq)) +
126
+                            0.75*Predict::ck2*$tsi/$psisq*$sat->sgps->x3thm1*
127
+                            (8.0 + 3.0*$etasq*(8 + $etasq)));
128
+            $sat->sgps->c1 = $c2*$sat->tle->bstar;
129 129
             $sat->sgps->sinio = sin($sat->tle->xincl);
130
-            $a3ovk2 = -Predict::xj3 / Predict::ck2 * pow(Predict::ae, 3);
131
-            $c3 = $coef * $tsi * $a3ovk2 * $sat->sgps->xnodp * Predict::ae * $sat->sgps->sinio / $sat->tle->eo;
130
+            $a3ovk2 = -Predict::xj3/Predict::ck2*pow(Predict::ae, 3);
131
+            $c3 = $coef*$tsi*$a3ovk2*$sat->sgps->xnodp*Predict::ae*$sat->sgps->sinio/$sat->tle->eo;
132 132
             $sat->sgps->x1mth2 = 1.0 - $theta2;
133
-            $sat->sgps->c4 = 2.0 * $sat->sgps->xnodp * $coef1 * $sat->sgps->aodp * $betao2 *
134
-                ($sat->sgps->eta * (2.0 + 0.5 * $etasq) +
135
-                 $sat->tle->eo * (0.5 + 2.0 * $etasq) -
136
-                 2.0 * Predict::ck2 * $tsi / ($sat->sgps->aodp * $psisq) *
137
-                 (-3.0 * $sat->sgps->x3thm1 * (1.0 - 2.0 * $eeta + $etasq * (1.5 - 0.5 * $eeta)) +
138
-                  0.75 * $sat->sgps->x1mth2 * (2.0 * $etasq - $eeta * (1.0 + $etasq)) *
139
-                  cos(2.0 * $sat->tle->omegao)));
140
-            $sat->sgps->c5 = 2.0 * $coef1 * $sat->sgps->aodp * $betao2 *
141
-                (1.0 + 2.75 * ($etasq + $eeta) + $eeta * $etasq);
142
-            $theta4 = $theta2 * $theta2;
143
-            $temp1 = 3.0 * Predict::ck2 * $pinvsq * $sat->sgps->xnodp;
144
-            $temp2 = $temp1 * Predict::ck2 * $pinvsq;
145
-            $temp3 = 1.25 * Predict::ck4 * $pinvsq * $pinvsq * $sat->sgps->xnodp;
146
-            $sat->sgps->xmdot = $sat->sgps->xnodp + 0.5 * $temp1 * $betao * $sat->sgps->x3thm1 +
147
-                0.0625 * $temp2 * $betao * (13.0 - 78.0 * $theta2 + 137.0 * $theta4);
148
-            $x1m5th = 1.0 - 5.0 * $theta2;
149
-            $sat->sgps->omgdot = -0.5 * $temp1 * $x1m5th +
150
-                0.0625 * $temp2 * (7.0 - 114.0 * $theta2 + 395.0 * $theta4) +
151
-                $temp3 * (3.0 - 36.0 * $theta2 + 49.0 * $theta4);
152
-            $xhdot1 = -$temp1 * $sat->sgps->cosio;
153
-            $sat->sgps->xnodot = $xhdot1 + (0.5 * $temp2 * (4.0 - 19.0 * $theta2) +
154
-                             2.0 * $temp3 * (3.0 - 7.0 * $theta2)) * $sat->sgps->cosio;
155
-            $sat->sgps->omgcof = $sat->tle->bstar * $c3 * cos($sat->tle->omegao);
156
-            $sat->sgps->xmcof = -Predict::tothrd * $coef * $sat->tle->bstar * Predict::ae / $eeta;
157
-            $sat->sgps->xnodcf = 3.5 * $betao2 * $xhdot1 * $sat->sgps->c1;
158
-            $sat->sgps->t2cof = 1.5 * $sat->sgps->c1;
159
-            $sat->sgps->xlcof = 0.125 * $a3ovk2 * $sat->sgps->sinio *
160
-                (3.0 + 5.0 * $sat->sgps->cosio) / (1.0 + $sat->sgps->cosio);
161
-            $sat->sgps->aycof = 0.25 * $a3ovk2 * $sat->sgps->sinio;
162
-            $sat->sgps->delmo = pow(1.0 + $sat->sgps->eta * cos($sat->tle->xmo), 3);
133
+            $sat->sgps->c4 = 2.0*$sat->sgps->xnodp*$coef1*$sat->sgps->aodp*$betao2*
134
+                ($sat->sgps->eta*(2.0 + 0.5*$etasq) +
135
+                 $sat->tle->eo*(0.5 + 2.0*$etasq) -
136
+                 2.0*Predict::ck2*$tsi/($sat->sgps->aodp*$psisq)*
137
+                 (-3.0*$sat->sgps->x3thm1*(1.0 - 2.0*$eeta + $etasq*(1.5 - 0.5*$eeta)) +
138
+                  0.75*$sat->sgps->x1mth2*(2.0*$etasq - $eeta*(1.0 + $etasq))*
139
+                  cos(2.0*$sat->tle->omegao)));
140
+            $sat->sgps->c5 = 2.0*$coef1*$sat->sgps->aodp*$betao2*
141
+                (1.0 + 2.75*($etasq + $eeta) + $eeta*$etasq);
142
+            $theta4 = $theta2*$theta2;
143
+            $temp1 = 3.0*Predict::ck2*$pinvsq*$sat->sgps->xnodp;
144
+            $temp2 = $temp1*Predict::ck2*$pinvsq;
145
+            $temp3 = 1.25*Predict::ck4*$pinvsq*$pinvsq*$sat->sgps->xnodp;
146
+            $sat->sgps->xmdot = $sat->sgps->xnodp + 0.5*$temp1*$betao*$sat->sgps->x3thm1 +
147
+                0.0625*$temp2*$betao*(13.0 - 78.0*$theta2 + 137.0*$theta4);
148
+            $x1m5th = 1.0 - 5.0*$theta2;
149
+            $sat->sgps->omgdot = -0.5*$temp1*$x1m5th +
150
+                0.0625*$temp2*(7.0 - 114.0*$theta2 + 395.0*$theta4) +
151
+                $temp3*(3.0 - 36.0*$theta2 + 49.0*$theta4);
152
+            $xhdot1 = -$temp1*$sat->sgps->cosio;
153
+            $sat->sgps->xnodot = $xhdot1 + (0.5*$temp2*(4.0 - 19.0*$theta2) +
154
+                             2.0*$temp3*(3.0 - 7.0*$theta2))*$sat->sgps->cosio;
155
+            $sat->sgps->omgcof = $sat->tle->bstar*$c3*cos($sat->tle->omegao);
156
+            $sat->sgps->xmcof = -Predict::tothrd*$coef*$sat->tle->bstar*Predict::ae/$eeta;
157
+            $sat->sgps->xnodcf = 3.5*$betao2*$xhdot1*$sat->sgps->c1;
158
+            $sat->sgps->t2cof = 1.5*$sat->sgps->c1;
159
+            $sat->sgps->xlcof = 0.125*$a3ovk2*$sat->sgps->sinio*
160
+                (3.0 + 5.0*$sat->sgps->cosio)/(1.0 + $sat->sgps->cosio);
161
+            $sat->sgps->aycof = 0.25*$a3ovk2*$sat->sgps->sinio;
162
+            $sat->sgps->delmo = pow(1.0 + $sat->sgps->eta*cos($sat->tle->xmo), 3);
163 163
             $sat->sgps->sinmo = sin($sat->tle->xmo);
164
-            $sat->sgps->x7thm1 = 7.0 * $theta2 - 1.0;
165
-            if (~$sat->flags & self::SIMPLE_FLAG) {
166
-                $c1sq = $sat->sgps->c1 * $sat->sgps->c1;
167
-                $sat->sgps->d2 = 4.0 * $sat->sgps->aodp * $tsi * $c1sq;
168
-                $temp = $sat->sgps->d2 * $tsi * $sat->sgps->c1 / 3.0;
169
-                $sat->sgps->d3 = (17.0 * $sat->sgps->aodp + $s4) * $temp;
170
-                $sat->sgps->d4 = 0.5 * $temp * $sat->sgps->aodp * $tsi *
171
-                    (221.0 * $sat->sgps->aodp + 31.0 * $s4) * $sat->sgps->c1;
172
-                $sat->sgps->t3cof = $sat->sgps->d2 + 2.0 * $c1sq;
173
-                $sat->sgps->t4cof = 0.25 * (3.0 * $sat->sgps->d3 + $sat->sgps->c1 *
174
-                              (12.0 * $sat->sgps->d2 + 10.0 * $c1sq));
175
-                $sat->sgps->t5cof = 0.2 * (3.0 * $sat->sgps->d4 +
176
-                             12.0 * $sat->sgps->c1 * $sat->sgps->d3 +
177
-                             6.0 * $sat->sgps->d2 * $sat->sgps->d2 +
178
-                             15.0 * $c1sq * (2.0 * $sat->sgps->d2 + $c1sq));
164
+            $sat->sgps->x7thm1 = 7.0*$theta2 - 1.0;
165
+            if (~$sat->flags&self::SIMPLE_FLAG) {
166
+                $c1sq = $sat->sgps->c1*$sat->sgps->c1;
167
+                $sat->sgps->d2 = 4.0*$sat->sgps->aodp*$tsi*$c1sq;
168
+                $temp = $sat->sgps->d2*$tsi*$sat->sgps->c1/3.0;
169
+                $sat->sgps->d3 = (17.0*$sat->sgps->aodp + $s4)*$temp;
170
+                $sat->sgps->d4 = 0.5*$temp*$sat->sgps->aodp*$tsi*
171
+                    (221.0*$sat->sgps->aodp + 31.0*$s4)*$sat->sgps->c1;
172
+                $sat->sgps->t3cof = $sat->sgps->d2 + 2.0*$c1sq;
173
+                $sat->sgps->t4cof = 0.25*(3.0*$sat->sgps->d3 + $sat->sgps->c1*
174
+                              (12.0*$sat->sgps->d2 + 10.0*$c1sq));
175
+                $sat->sgps->t5cof = 0.2*(3.0*$sat->sgps->d4 +
176
+                             12.0*$sat->sgps->c1*$sat->sgps->d3 +
177
+                             6.0*$sat->sgps->d2*$sat->sgps->d2 +
178
+                             15.0*$c1sq*(2.0*$sat->sgps->d2 + $c1sq));
179 179
             }; /* End of if (isFlagClear(SIMPLE_FLAG)) */
180 180
         }; /* End of SGP4() initialization */
181 181
 
182 182
         /* Update for secular gravity and atmospheric drag. */
183
-        $xmdf = $sat->tle->xmo + $sat->sgps->xmdot * $tsince;
184
-        $omgadf = $sat->tle->omegao + $sat->sgps->omgdot * $tsince;
185
-        $xnoddf = $sat->tle->xnodeo + $sat->sgps->xnodot * $tsince;
183
+        $xmdf = $sat->tle->xmo + $sat->sgps->xmdot*$tsince;
184
+        $omgadf = $sat->tle->omegao + $sat->sgps->omgdot*$tsince;
185
+        $xnoddf = $sat->tle->xnodeo + $sat->sgps->xnodot*$tsince;
186 186
         $omega = $omgadf;
187 187
         $xmp = $xmdf;
188
-        $tsq = $tsince * $tsince;
189
-        $xnode = $xnoddf + $sat->sgps->xnodcf * $tsq;
190
-        $tempa = 1.0 - $sat->sgps->c1 * $tsince;
191
-        $tempe = $sat->tle->bstar * $sat->sgps->c4 * $tsince;
192
-        $templ = $sat->sgps->t2cof * $tsq;
193
-        if (~$sat->flags & self::SIMPLE_FLAG) {
194
-            $delomg = $sat->sgps->omgcof * $tsince;
195
-            $delm = $sat->sgps->xmcof * (pow(1 + $sat->sgps->eta * cos($xmdf), 3) - $sat->sgps->delmo);
188
+        $tsq = $tsince*$tsince;
189
+        $xnode = $xnoddf + $sat->sgps->xnodcf*$tsq;
190
+        $tempa = 1.0 - $sat->sgps->c1*$tsince;
191
+        $tempe = $sat->tle->bstar*$sat->sgps->c4*$tsince;
192
+        $templ = $sat->sgps->t2cof*$tsq;
193
+        if (~$sat->flags&self::SIMPLE_FLAG) {
194
+            $delomg = $sat->sgps->omgcof*$tsince;
195
+            $delm = $sat->sgps->xmcof*(pow(1 + $sat->sgps->eta*cos($xmdf), 3) - $sat->sgps->delmo);
196 196
             $temp = $delomg + $delm;
197 197
             $xmp = $xmdf + $temp;
198 198
             $omega = $omgadf - $temp;
199
-            $tcube = $tsq * $tsince;
200
-            $tfour = $tsince * $tcube;
201
-            $tempa = $tempa - $sat->sgps->d2 * $tsq - $sat->sgps->d3 * $tcube - $sat->sgps->d4 * $tfour;
202
-            $tempe = $tempe + $sat->tle->bstar * $sat->sgps->c5 * (sin($xmp) - $sat->sgps->sinmo);
203
-            $templ = $templ + $sat->sgps->t3cof * $tcube + $tfour *
204
-                ($sat->sgps->t4cof + $tsince * $sat->sgps->t5cof);
199
+            $tcube = $tsq*$tsince;
200
+            $tfour = $tsince*$tcube;
201
+            $tempa = $tempa - $sat->sgps->d2*$tsq - $sat->sgps->d3*$tcube - $sat->sgps->d4*$tfour;
202
+            $tempe = $tempe + $sat->tle->bstar*$sat->sgps->c5*(sin($xmp) - $sat->sgps->sinmo);
203
+            $templ = $templ + $sat->sgps->t3cof*$tcube + $tfour*
204
+                ($sat->sgps->t4cof + $tsince*$sat->sgps->t5cof);
205 205
         }; /* End of if (isFlagClear(SIMPLE_FLAG)) */
206 206
 
207
-        $a = $sat->sgps->aodp * pow($tempa, 2);
207
+        $a = $sat->sgps->aodp*pow($tempa, 2);
208 208
         $e = $sat->tle->eo - $tempe;
209
-        $xl = $xmp + $omega + $xnode + $sat->sgps->xnodp * $templ;
210
-        $beta = sqrt(1.0 - ($e * $e));
211
-        $xn = Predict::xke / pow($a, 1.5);
209
+        $xl = $xmp + $omega + $xnode + $sat->sgps->xnodp*$templ;
210
+        $beta = sqrt(1.0 - ($e*$e));
211
+        $xn = Predict::xke/pow($a, 1.5);
212 212
 
213 213
         /* Long period periodics */
214
-        $axn = $e * cos($omega);
215
-        $temp = 1.0 / ($a * $beta * $beta);
216
-        $xll = $temp * $sat->sgps->xlcof * $axn;
217
-        $aynl = $temp * $sat->sgps->aycof;
214
+        $axn = $e*cos($omega);
215
+        $temp = 1.0/($a*$beta*$beta);
216
+        $xll = $temp*$sat->sgps->xlcof*$axn;
217
+        $aynl = $temp*$sat->sgps->aycof;
218 218
         $xlt = $xl + $xll;
219
-        $ayn = $e * sin($omega) + $aynl;
219
+        $ayn = $e*sin($omega) + $aynl;
220 220
 
221 221
         /* Solve Kepler's' Equation */
222 222
         $capu = Predict_Math::FMod2p($xlt - $xnode);
@@ -226,11 +226,11 @@  discard block
 block discarded – undo
226 226
         do {
227 227
             $sinepw = sin($temp2);
228 228
             $cosepw = cos($temp2);
229
-            $temp3 = $axn * $sinepw;
230
-            $temp4 = $ayn * $cosepw;
231
-            $temp5 = $axn * $cosepw;
232
-            $temp6 = $ayn * $sinepw;
233
-            $epw = ($capu - $temp4 + $temp3 - $temp2) / (1.0 - $temp5 - $temp6) + $temp2;
229
+            $temp3 = $axn*$sinepw;
230
+            $temp4 = $ayn*$cosepw;
231
+            $temp5 = $axn*$cosepw;
232
+            $temp6 = $ayn*$sinepw;
233
+            $epw = ($capu - $temp4 + $temp3 - $temp2)/(1.0 - $temp5 - $temp6) + $temp2;
234 234
             if (abs($epw - $temp2) <= Predict::e6a) {
235 235
                 break;
236 236
             }
@@ -240,33 +240,33 @@  discard block
 block discarded – undo
240 240
         /* Short period preliminary quantities */
241 241
         $ecose = $temp5 + $temp6;
242 242
         $esine = $temp3 - $temp4;
243
-        $elsq = $axn * $axn + $ayn * $ayn;
243
+        $elsq = $axn*$axn + $ayn*$ayn;
244 244
         $temp = 1.0 - $elsq;
245
-        $pl = $a * $temp;
246
-        $r = $a * (1.0 - $ecose);
247
-        $temp1 = 1.0 / $r;
248
-        $rdot = Predict::xke * sqrt($a) * $esine * $temp1;
249
-        $rfdot = Predict::xke * sqrt($pl) * $temp1;
250
-        $temp2 = $a * $temp1;
245
+        $pl = $a*$temp;
246
+        $r = $a*(1.0 - $ecose);
247
+        $temp1 = 1.0/$r;
248
+        $rdot = Predict::xke*sqrt($a)*$esine*$temp1;
249
+        $rfdot = Predict::xke*sqrt($pl)*$temp1;
250
+        $temp2 = $a*$temp1;
251 251
         $betal = sqrt($temp);
252
-        $temp3 = 1.0 / (1.0 + $betal);
253
-        $cosu = $temp2 * ($cosepw - $axn + $ayn * $esine * $temp3);
254
-        $sinu = $temp2 * ($sinepw - $ayn - $axn * $esine * $temp3);
252
+        $temp3 = 1.0/(1.0 + $betal);
253
+        $cosu = $temp2*($cosepw - $axn + $ayn*$esine*$temp3);
254
+        $sinu = $temp2*($sinepw - $ayn - $axn*$esine*$temp3);
255 255
         $u = Predict_Math::AcTan($sinu, $cosu);
256
-        $sin2u = 2.0 * $sinu * $cosu;
257
-        $cos2u = 2.0 * $cosu * $cosu - 1.0;
258
-        $temp = 1.0 / $pl;
259
-        $temp1 = Predict::ck2 * $temp;
260
-        $temp2 = $temp1 * $temp;
256
+        $sin2u = 2.0*$sinu*$cosu;
257
+        $cos2u = 2.0*$cosu*$cosu - 1.0;
258
+        $temp = 1.0/$pl;
259
+        $temp1 = Predict::ck2*$temp;
260
+        $temp2 = $temp1*$temp;
261 261
 
262 262
         /* Update for short periodics */
263
-        $rk = $r * (1.0 - 1.5 * $temp2 * $betal * $sat->sgps->x3thm1) +
264
-            0.5 * $temp1 * $sat->sgps->x1mth2 * $cos2u;
265
-        $uk = $u - 0.25 * $temp2 * $sat->sgps->x7thm1 * $sin2u;
266
-        $xnodek = $xnode + 1.5 * $temp2 * $sat->sgps->cosio * $sin2u;
267
-        $xinck = $sat->tle->xincl + 1.5 * $temp2 * $sat->sgps->cosio * $sat->sgps->sinio * $cos2u;
268
-        $rdotk = $rdot - $xn * $temp1 * $sat->sgps->x1mth2 * $sin2u;
269
-        $rfdotk = $rfdot + $xn * $temp1 * ($sat->sgps->x1mth2 * $cos2u + 1.5 * $sat->sgps->x3thm1);
263
+        $rk = $r*(1.0 - 1.5*$temp2*$betal*$sat->sgps->x3thm1) +
264
+            0.5*$temp1*$sat->sgps->x1mth2*$cos2u;
265
+        $uk = $u - 0.25*$temp2*$sat->sgps->x7thm1*$sin2u;
266
+        $xnodek = $xnode + 1.5*$temp2*$sat->sgps->cosio*$sin2u;
267
+        $xinck = $sat->tle->xincl + 1.5*$temp2*$sat->sgps->cosio*$sat->sgps->sinio*$cos2u;
268
+        $rdotk = $rdot - $xn*$temp1*$sat->sgps->x1mth2*$sin2u;
269
+        $rfdotk = $rfdot + $xn*$temp1*($sat->sgps->x1mth2*$cos2u + 1.5*$sat->sgps->x3thm1);
270 270
 
271 271
 
272 272
         /* Orientation vectors */
@@ -276,22 +276,22 @@  discard block
 block discarded – undo
276 276
         $cosik = cos($xinck);
277 277
         $sinnok = sin($xnodek);
278 278
         $cosnok = cos($xnodek);
279
-        $xmx = -$sinnok * $cosik;
280
-        $xmy = $cosnok * $cosik;
281
-        $ux = $xmx * $sinuk + $cosnok * $cosuk;
282
-        $uy = $xmy * $sinuk + $sinnok * $cosuk;
283
-        $uz = $sinik * $sinuk;
284
-        $vx = $xmx * $cosuk - $cosnok * $sinuk;
285
-        $vy = $xmy * $cosuk - $sinnok * $sinuk;
286
-        $vz = $sinik * $cosuk;
279
+        $xmx = -$sinnok*$cosik;
280
+        $xmy = $cosnok*$cosik;
281
+        $ux = $xmx*$sinuk + $cosnok*$cosuk;
282
+        $uy = $xmy*$sinuk + $sinnok*$cosuk;
283
+        $uz = $sinik*$sinuk;
284
+        $vx = $xmx*$cosuk - $cosnok*$sinuk;
285
+        $vy = $xmy*$cosuk - $sinnok*$sinuk;
286
+        $vz = $sinik*$cosuk;
287 287
 
288 288
         /* Position and velocity */
289
-        $sat->pos->x = $rk * $ux;
290
-        $sat->pos->y = $rk * $uy;
291
-        $sat->pos->z = $rk * $uz;
292
-        $sat->vel->x = $rdotk * $ux + $rfdotk * $vx;
293
-        $sat->vel->y = $rdotk * $uy + $rfdotk * $vy;
294
-        $sat->vel->z = $rdotk * $uz + $rfdotk * $vz;
289
+        $sat->pos->x = $rk*$ux;
290
+        $sat->pos->y = $rk*$uy;
291
+        $sat->pos->z = $rk*$uz;
292
+        $sat->vel->x = $rdotk*$ux + $rfdotk*$vx;
293
+        $sat->vel->y = $rdotk*$uy + $rfdotk*$vy;
294
+        $sat->vel->z = $rdotk*$uz + $rfdotk*$vz;
295 295
 
296 296
         $sat->phase = $xlt - $xnode - $omgadf + Predict::twopi;
297 297
         if ($sat->phase < 0) {
@@ -315,106 +315,106 @@  discard block
 block discarded – undo
315 315
     public function SDP4(Predict_Sat $sat, $tsince)
316 316
     {
317 317
         /* Initialization */
318
-        if (~$sat->flags & self::SDP4_INITIALIZED_FLAG) {
318
+        if (~$sat->flags&self::SDP4_INITIALIZED_FLAG) {
319 319
 
320 320
             $sat->flags |= self::SDP4_INITIALIZED_FLAG;
321 321
 
322 322
             /* Recover original mean motion (xnodp) and   */
323 323
             /* semimajor axis (aodp) from input elements. */
324
-            $a1 = pow(Predict::xke / $sat->tle->xno, Predict::tothrd);
324
+            $a1 = pow(Predict::xke/$sat->tle->xno, Predict::tothrd);
325 325
             $sat->deep_arg->cosio = cos($sat->tle->xincl);
326
-            $sat->deep_arg->theta2 = $sat->deep_arg->cosio * $sat->deep_arg->cosio;
327
-            $sat->sgps->x3thm1 = 3.0 * $sat->deep_arg->theta2 - 1.0;
328
-            $sat->deep_arg->eosq = $sat->tle->eo * $sat->tle->eo;
326
+            $sat->deep_arg->theta2 = $sat->deep_arg->cosio*$sat->deep_arg->cosio;
327
+            $sat->sgps->x3thm1 = 3.0*$sat->deep_arg->theta2 - 1.0;
328
+            $sat->deep_arg->eosq = $sat->tle->eo*$sat->tle->eo;
329 329
             $sat->deep_arg->betao2 = 1.0 - $sat->deep_arg->eosq;
330 330
             $sat->deep_arg->betao = sqrt($sat->deep_arg->betao2);
331
-            $del1 = 1.5 * Predict::ck2 * $sat->sgps->x3thm1 /
332
-                ($a1 * $a1 * $sat->deep_arg->betao * $sat->deep_arg->betao2);
333
-            $ao = $a1 * (1.0 - $del1 * (0.5 * Predict::tothrd + $del1 * (1.0 + 134.0 / 81.0 * $del1)));
334
-            $delo = 1.5 * Predict::ck2 * $sat->sgps->x3thm1 /
335
-                ($ao * $ao * $sat->deep_arg->betao * $sat->deep_arg->betao2);
336
-            $sat->deep_arg->xnodp = $sat->tle->xno / (1.0 + $delo);
337
-            $sat->deep_arg->aodp = $ao / (1.0 - $delo);
331
+            $del1 = 1.5*Predict::ck2*$sat->sgps->x3thm1/
332
+                ($a1*$a1*$sat->deep_arg->betao*$sat->deep_arg->betao2);
333
+            $ao = $a1*(1.0 - $del1*(0.5*Predict::tothrd + $del1*(1.0 + 134.0/81.0*$del1)));
334
+            $delo = 1.5*Predict::ck2*$sat->sgps->x3thm1/
335
+                ($ao*$ao*$sat->deep_arg->betao*$sat->deep_arg->betao2);
336
+            $sat->deep_arg->xnodp = $sat->tle->xno/(1.0 + $delo);
337
+            $sat->deep_arg->aodp = $ao/(1.0 - $delo);
338 338
 
339 339
             /* For perigee below 156 km, the values */
340 340
             /* of s and qoms2t are altered.         */
341 341
             $s4 = Predict::__s__;
342 342
             $qoms24 = Predict::qoms2t;
343
-            $perige = ($sat->deep_arg->aodp * (1.0 - $sat->tle->eo) - Predict::ae) * Predict::xkmper;
343
+            $perige = ($sat->deep_arg->aodp*(1.0 - $sat->tle->eo) - Predict::ae)*Predict::xkmper;
344 344
             if ($perige < 156.0) {
345 345
                 if ($perige <= 98.0) {
346 346
                     $s4 = 20.0;
347 347
                 } else {
348 348
                     $s4 = $perige - 78.0;
349 349
                 }
350
-                $qoms24 = pow((120.0 - $s4) * Predict::ae / Predict::xkmper, 4);
351
-                $s4 = $s4 / Predict::xkmper + Predict::ae;
350
+                $qoms24 = pow((120.0 - $s4)*Predict::ae/Predict::xkmper, 4);
351
+                $s4 = $s4/Predict::xkmper + Predict::ae;
352 352
             }
353
-            $pinvsq = 1.0 / ($sat->deep_arg->aodp * $sat->deep_arg->aodp *
354
-                    $sat->deep_arg->betao2 * $sat->deep_arg->betao2);
353
+            $pinvsq = 1.0/($sat->deep_arg->aodp*$sat->deep_arg->aodp*
354
+                    $sat->deep_arg->betao2*$sat->deep_arg->betao2);
355 355
             $sat->deep_arg->sing = sin($sat->tle->omegao);
356 356
             $sat->deep_arg->cosg = cos($sat->tle->omegao);
357
-            $tsi = 1.0 / ($sat->deep_arg->aodp - $s4);
358
-            $eta = $sat->deep_arg->aodp * $sat->tle->eo * $tsi;
359
-            $etasq = $eta * $eta;
360
-            $eeta = $sat->tle->eo * $eta;
357
+            $tsi = 1.0/($sat->deep_arg->aodp - $s4);
358
+            $eta = $sat->deep_arg->aodp*$sat->tle->eo*$tsi;
359
+            $etasq = $eta*$eta;
360
+            $eeta = $sat->tle->eo*$eta;
361 361
             $psisq = abs(1.0 - $etasq);
362
-            $coef = $qoms24 * pow($tsi, 4);
363
-            $coef1 = $coef / pow($psisq, 3.5);
364
-            $c2 = $coef1 * $sat->deep_arg->xnodp * ($sat->deep_arg->aodp *
365
-                                (1.0 + 1.5 * $etasq + $eeta *
366
-                                 (4.0 + $etasq)) + 0.75 * Predict::ck2 * $tsi / $psisq *
367
-                                $sat->sgps->x3thm1 * (8.0 + 3.0 * $etasq *
362
+            $coef = $qoms24*pow($tsi, 4);
363
+            $coef1 = $coef/pow($psisq, 3.5);
364
+            $c2 = $coef1*$sat->deep_arg->xnodp*($sat->deep_arg->aodp*
365
+                                (1.0 + 1.5*$etasq + $eeta*
366
+                                 (4.0 + $etasq)) + 0.75*Predict::ck2*$tsi/$psisq*
367
+                                $sat->sgps->x3thm1*(8.0 + 3.0*$etasq*
368 368
                                         (8.0 + $etasq)));
369
-            $sat->sgps->c1 = $sat->tle->bstar * $c2;
369
+            $sat->sgps->c1 = $sat->tle->bstar*$c2;
370 370
             $sat->deep_arg->sinio = sin($sat->tle->xincl);
371
-            $a3ovk2 = -Predict::xj3 / Predict::ck2 * pow(Predict::ae, 3);
371
+            $a3ovk2 = -Predict::xj3/Predict::ck2*pow(Predict::ae, 3);
372 372
             $sat->sgps->x1mth2 = 1.0 - $sat->deep_arg->theta2;
373
-            $sat->sgps->c4 = 2.0 * $sat->deep_arg->xnodp * $coef1 *
374
-                $sat->deep_arg->aodp * $sat->deep_arg->betao2 *
375
-                ($eta * (2.0 + 0.5 * $etasq) + $sat->tle->eo *
376
-                 (0.5 + 2.0 * $etasq) - 2.0 * Predict::ck2 * $tsi /
377
-                 ($sat->deep_arg->aodp * $psisq) * (-3.0 * $sat->sgps->x3thm1 *
378
-                                 (1.0 - 2.0 * $eeta + $etasq *
379
-                                  (1.5 - 0.5 * $eeta)) +
380
-                                 0.75 * $sat->sgps->x1mth2 *
381
-                                 (2.0 * $etasq - $eeta * (1.0 + $etasq)) *
382
-                                 cos(2.0 * $sat->tle->omegao)));
383
-            $theta4 = $sat->deep_arg->theta2 * $sat->deep_arg->theta2;
384
-            $temp1 = 3.0 * Predict::ck2 * $pinvsq * $sat->deep_arg->xnodp;
385
-            $temp2 = $temp1 * Predict::ck2 * $pinvsq;
386
-            $temp3 = 1.25 * Predict::ck4 * $pinvsq * $pinvsq * $sat->deep_arg->xnodp;
387
-            $sat->deep_arg->xmdot = $sat->deep_arg->xnodp + 0.5 * $temp1 * $sat->deep_arg->betao *
388
-                $sat->sgps->x3thm1 + 0.0625 * $temp2 * $sat->deep_arg->betao *
389
-                (13.0 - 78.0 * $sat->deep_arg->theta2 + 137.0 * $theta4);
390
-            $x1m5th = 1.0 - 5.0 * $sat->deep_arg->theta2;
391
-            $sat->deep_arg->omgdot = -0.5 * $temp1 * $x1m5th + 0.0625 * $temp2 *
392
-                            (7.0 - 114.0 * $sat->deep_arg->theta2 + 395.0 * $theta4) +
393
-                        $temp3 * (3.0 - 36.0 * $sat->deep_arg->theta2 + 49.0 * $theta4);
394
-            $xhdot1 = -$temp1 * $sat->deep_arg->cosio;
395
-            $sat->deep_arg->xnodot = $xhdot1 + (0.5 * $temp2 * (4.0 - 19.0 * $sat->deep_arg->theta2) +
396
-                             2.0 * $temp3 * (3.0 - 7.0 * $sat->deep_arg->theta2)) *
373
+            $sat->sgps->c4 = 2.0*$sat->deep_arg->xnodp*$coef1*
374
+                $sat->deep_arg->aodp*$sat->deep_arg->betao2*
375
+                ($eta*(2.0 + 0.5*$etasq) + $sat->tle->eo*
376
+                 (0.5 + 2.0*$etasq) - 2.0*Predict::ck2*$tsi/
377
+                 ($sat->deep_arg->aodp*$psisq)*(-3.0*$sat->sgps->x3thm1*
378
+                                 (1.0 - 2.0*$eeta + $etasq*
379
+                                  (1.5 - 0.5*$eeta)) +
380
+                                 0.75*$sat->sgps->x1mth2*
381
+                                 (2.0*$etasq - $eeta*(1.0 + $etasq))*
382
+                                 cos(2.0*$sat->tle->omegao)));
383
+            $theta4 = $sat->deep_arg->theta2*$sat->deep_arg->theta2;
384
+            $temp1 = 3.0*Predict::ck2*$pinvsq*$sat->deep_arg->xnodp;
385
+            $temp2 = $temp1*Predict::ck2*$pinvsq;
386
+            $temp3 = 1.25*Predict::ck4*$pinvsq*$pinvsq*$sat->deep_arg->xnodp;
387
+            $sat->deep_arg->xmdot = $sat->deep_arg->xnodp + 0.5*$temp1*$sat->deep_arg->betao*
388
+                $sat->sgps->x3thm1 + 0.0625*$temp2*$sat->deep_arg->betao*
389
+                (13.0 - 78.0*$sat->deep_arg->theta2 + 137.0*$theta4);
390
+            $x1m5th = 1.0 - 5.0*$sat->deep_arg->theta2;
391
+            $sat->deep_arg->omgdot = -0.5*$temp1*$x1m5th + 0.0625*$temp2*
392
+                            (7.0 - 114.0*$sat->deep_arg->theta2 + 395.0*$theta4) +
393
+                        $temp3*(3.0 - 36.0*$sat->deep_arg->theta2 + 49.0*$theta4);
394
+            $xhdot1 = -$temp1*$sat->deep_arg->cosio;
395
+            $sat->deep_arg->xnodot = $xhdot1 + (0.5*$temp2*(4.0 - 19.0*$sat->deep_arg->theta2) +
396
+                             2.0*$temp3*(3.0 - 7.0*$sat->deep_arg->theta2))*
397 397
                 $sat->deep_arg->cosio;
398
-            $sat->sgps->xnodcf = 3.5 * $sat->deep_arg->betao2 * $xhdot1 * $sat->sgps->c1;
399
-            $sat->sgps->t2cof = 1.5 * $sat->sgps->c1;
400
-            $sat->sgps->xlcof = 0.125 * $a3ovk2 * $sat->deep_arg->sinio *
401
-                (3.0 + 5.0 * $sat->deep_arg->cosio) / (1.0 + $sat->deep_arg->cosio);
402
-            $sat->sgps->aycof = 0.25 * $a3ovk2 * $sat->deep_arg->sinio;
403
-            $sat->sgps->x7thm1 = 7.0 * $sat->deep_arg->theta2 - 1.0;
398
+            $sat->sgps->xnodcf = 3.5*$sat->deep_arg->betao2*$xhdot1*$sat->sgps->c1;
399
+            $sat->sgps->t2cof = 1.5*$sat->sgps->c1;
400
+            $sat->sgps->xlcof = 0.125*$a3ovk2*$sat->deep_arg->sinio*
401
+                (3.0 + 5.0*$sat->deep_arg->cosio)/(1.0 + $sat->deep_arg->cosio);
402
+            $sat->sgps->aycof = 0.25*$a3ovk2*$sat->deep_arg->sinio;
403
+            $sat->sgps->x7thm1 = 7.0*$sat->deep_arg->theta2 - 1.0;
404 404
 
405 405
             /* initialize Deep() */
406 406
             $this->Deep(self::dpinit, $sat);
407 407
         }; /*End of SDP4() initialization */
408 408
 
409 409
         /* Update for secular gravity and atmospheric drag */
410
-        $xmdf = $sat->tle->xmo + $sat->deep_arg->xmdot * $tsince;
411
-        $sat->deep_arg->omgadf = $sat->tle->omegao + $sat->deep_arg->omgdot * $tsince;
412
-        $xnoddf = $sat->tle->xnodeo + $sat->deep_arg->xnodot * $tsince;
413
-        $tsq = $tsince * $tsince;
414
-        $sat->deep_arg->xnode = $xnoddf + $sat->sgps->xnodcf * $tsq;
415
-        $tempa = 1.0 - $sat->sgps->c1 * $tsince;
416
-        $tempe = $sat->tle->bstar * $sat->sgps->c4 * $tsince;
417
-        $templ = $sat->sgps->t2cof * $tsq;
410
+        $xmdf = $sat->tle->xmo + $sat->deep_arg->xmdot*$tsince;
411
+        $sat->deep_arg->omgadf = $sat->tle->omegao + $sat->deep_arg->omgdot*$tsince;
412
+        $xnoddf = $sat->tle->xnodeo + $sat->deep_arg->xnodot*$tsince;
413
+        $tsq = $tsince*$tsince;
414
+        $sat->deep_arg->xnode = $xnoddf + $sat->sgps->xnodcf*$tsq;
415
+        $tempa = 1.0 - $sat->sgps->c1*$tsince;
416
+        $tempe = $sat->tle->bstar*$sat->sgps->c4*$tsince;
417
+        $templ = $sat->sgps->t2cof*$tsq;
418 418
         $sat->deep_arg->xn = $sat->deep_arg->xnodp;
419 419
 
420 420
         /* Update for deep-space secular effects */
@@ -424,9 +424,9 @@  discard block
 block discarded – undo
424 424
         $this->Deep(self::dpsec, $sat);
425 425
 
426 426
         $xmdf = $sat->deep_arg->xll;
427
-        $a = pow(Predict::xke / $sat->deep_arg->xn, Predict::tothrd) * $tempa * $tempa;
427
+        $a = pow(Predict::xke/$sat->deep_arg->xn, Predict::tothrd)*$tempa*$tempa;
428 428
         $sat->deep_arg->em = $sat->deep_arg->em - $tempe;
429
-        $xmam = $xmdf + $sat->deep_arg->xnodp * $templ;
429
+        $xmam = $xmdf + $sat->deep_arg->xnodp*$templ;
430 430
 
431 431
         /* Update for deep-space periodic effects */
432 432
         $sat->deep_arg->xll = $xmam;
@@ -435,30 +435,30 @@  discard block
 block discarded – undo
435 435
 
436 436
         $xmam = $sat->deep_arg->xll;
437 437
         $xl = $xmam + $sat->deep_arg->omgadf + $sat->deep_arg->xnode;
438
-        $beta = sqrt(1.0 - $sat->deep_arg->em * $sat->deep_arg->em);
439
-        $sat->deep_arg->xn = Predict::xke / pow($a, 1.5);
438
+        $beta = sqrt(1.0 - $sat->deep_arg->em*$sat->deep_arg->em);
439
+        $sat->deep_arg->xn = Predict::xke/pow($a, 1.5);
440 440
 
441 441
         /* Long period periodics */
442
-        $axn = $sat->deep_arg->em * cos($sat->deep_arg->omgadf);
443
-        $temp = 1.0 / ($a * $beta * $beta);
444
-        $xll = $temp * $sat->sgps->xlcof * $axn;
445
-        $aynl = $temp * $sat->sgps->aycof;
442
+        $axn = $sat->deep_arg->em*cos($sat->deep_arg->omgadf);
443
+        $temp = 1.0/($a*$beta*$beta);
444
+        $xll = $temp*$sat->sgps->xlcof*$axn;
445
+        $aynl = $temp*$sat->sgps->aycof;
446 446
         $xlt = $xl + $xll;
447
-        $ayn = $sat->deep_arg->em * sin($sat->deep_arg->omgadf) + $aynl;
447
+        $ayn = $sat->deep_arg->em*sin($sat->deep_arg->omgadf) + $aynl;
448 448
 
449 449
         /* Solve Kepler's Equation */
450
-        $capu = Predict_Math::FMod2p ($xlt - $sat->deep_arg->xnode);
450
+        $capu = Predict_Math::FMod2p($xlt - $sat->deep_arg->xnode);
451 451
         $temp2 = $capu;
452 452
 
453 453
         $i = 0;
454 454
         do {
455 455
             $sinepw = sin($temp2);
456 456
             $cosepw = cos($temp2);
457
-            $temp3 = $axn * $sinepw;
458
-            $temp4 = $ayn * $cosepw;
459
-            $temp5 = $axn * $cosepw;
460
-            $temp6 = $ayn * $sinepw;
461
-            $epw = ($capu - $temp4 + $temp3 - $temp2) / (1.0 - $temp5 - $temp6) + $temp2;
457
+            $temp3 = $axn*$sinepw;
458
+            $temp4 = $ayn*$cosepw;
459
+            $temp5 = $axn*$cosepw;
460
+            $temp6 = $ayn*$sinepw;
461
+            $epw = ($capu - $temp4 + $temp3 - $temp2)/(1.0 - $temp5 - $temp6) + $temp2;
462 462
             if (abs($epw - $temp2) <= Predict::e6a) {
463 463
                 break;
464 464
             }
@@ -468,35 +468,35 @@  discard block
 block discarded – undo
468 468
         /* Short period preliminary quantities */
469 469
         $ecose = $temp5 + $temp6;
470 470
         $esine = $temp3 - $temp4;
471
-        $elsq = $axn * $axn + $ayn * $ayn;
471
+        $elsq = $axn*$axn + $ayn*$ayn;
472 472
         $temp = 1.0 - $elsq;
473
-        $pl = $a * $temp;
474
-        $r = $a * (1.0 - $ecose);
475
-        $temp1 = 1.0 / $r;
476
-        $rdot = Predict::xke * sqrt($a) * $esine * $temp1;
477
-        $rfdot = Predict::xke * sqrt($pl) * $temp1;
478
-        $temp2 = $a * $temp1;
473
+        $pl = $a*$temp;
474
+        $r = $a*(1.0 - $ecose);
475
+        $temp1 = 1.0/$r;
476
+        $rdot = Predict::xke*sqrt($a)*$esine*$temp1;
477
+        $rfdot = Predict::xke*sqrt($pl)*$temp1;
478
+        $temp2 = $a*$temp1;
479 479
         $betal = sqrt($temp);
480
-        $temp3 = 1.0 / (1.0 + $betal);
481
-        $cosu = $temp2 * ($cosepw - $axn + $ayn * $esine * $temp3);
482
-        $sinu = $temp2 * ($sinepw - $ayn - $axn * $esine * $temp3);
480
+        $temp3 = 1.0/(1.0 + $betal);
481
+        $cosu = $temp2*($cosepw - $axn + $ayn*$esine*$temp3);
482
+        $sinu = $temp2*($sinepw - $ayn - $axn*$esine*$temp3);
483 483
         $u = Predict_Math::AcTan($sinu, $cosu);
484
-        $sin2u = 2.0 * $sinu * $cosu;
485
-        $cos2u = 2.0 * $cosu * $cosu - 1.0;
486
-        $temp = 1.0 / $pl;
487
-        $temp1 = Predict::ck2 * $temp;
488
-        $temp2 = $temp1 * $temp;
484
+        $sin2u = 2.0*$sinu*$cosu;
485
+        $cos2u = 2.0*$cosu*$cosu - 1.0;
486
+        $temp = 1.0/$pl;
487
+        $temp1 = Predict::ck2*$temp;
488
+        $temp2 = $temp1*$temp;
489 489
 
490 490
         /* Update for short periodics */
491
-        $rk = $r * (1.0 - 1.5 * $temp2 * $betal * $sat->sgps->x3thm1) +
492
-             0.5 * $temp1 * $sat->sgps->x1mth2 * $cos2u;
493
-        $uk = $u - 0.25 * $temp2 * $sat->sgps->x7thm1 * $sin2u;
494
-        $xnodek = $sat->deep_arg->xnode + 1.5 * $temp2 * $sat->deep_arg->cosio * $sin2u;
495
-        $xinck = $sat->deep_arg->xinc + 1.5 * $temp2 *
496
-             $sat->deep_arg->cosio * $sat->deep_arg->sinio * $cos2u;
497
-        $rdotk = $rdot - $sat->deep_arg->xn * $temp1 * $sat->sgps->x1mth2 * $sin2u;
498
-        $rfdotk = $rfdot + $sat->deep_arg->xn * $temp1 *
499
-             ($sat->sgps->x1mth2 * $cos2u + 1.5 * $sat->sgps->x3thm1);
491
+        $rk = $r*(1.0 - 1.5*$temp2*$betal*$sat->sgps->x3thm1) +
492
+             0.5*$temp1*$sat->sgps->x1mth2*$cos2u;
493
+        $uk = $u - 0.25*$temp2*$sat->sgps->x7thm1*$sin2u;
494
+        $xnodek = $sat->deep_arg->xnode + 1.5*$temp2*$sat->deep_arg->cosio*$sin2u;
495
+        $xinck = $sat->deep_arg->xinc + 1.5*$temp2*
496
+             $sat->deep_arg->cosio*$sat->deep_arg->sinio*$cos2u;
497
+        $rdotk = $rdot - $sat->deep_arg->xn*$temp1*$sat->sgps->x1mth2*$sin2u;
498
+        $rfdotk = $rfdot + $sat->deep_arg->xn*$temp1*
499
+             ($sat->sgps->x1mth2*$cos2u + 1.5*$sat->sgps->x3thm1);
500 500
 
501 501
         /* Orientation vectors */
502 502
         $sinuk = sin($uk);
@@ -505,29 +505,29 @@  discard block
 block discarded – undo
505 505
         $cosik = cos($xinck);
506 506
         $sinnok = sin($xnodek);
507 507
         $cosnok = cos($xnodek);
508
-        $xmx = -$sinnok * $cosik;
509
-        $xmy = $cosnok * $cosik;
510
-        $ux = $xmx * $sinuk + $cosnok * $cosuk;
511
-        $uy = $xmy * $sinuk + $sinnok * $cosuk;
512
-        $uz = $sinik * $sinuk;
513
-        $vx = $xmx * $cosuk - $cosnok * $sinuk;
514
-        $vy = $xmy * $cosuk - $sinnok * $sinuk;
515
-        $vz = $sinik * $cosuk;
508
+        $xmx = -$sinnok*$cosik;
509
+        $xmy = $cosnok*$cosik;
510
+        $ux = $xmx*$sinuk + $cosnok*$cosuk;
511
+        $uy = $xmy*$sinuk + $sinnok*$cosuk;
512
+        $uz = $sinik*$sinuk;
513
+        $vx = $xmx*$cosuk - $cosnok*$sinuk;
514
+        $vy = $xmy*$cosuk - $sinnok*$sinuk;
515
+        $vz = $sinik*$cosuk;
516 516
 
517 517
         /* Position and velocity */
518
-        $sat->pos->x = $rk * $ux;
519
-        $sat->pos->y = $rk * $uy;
520
-        $sat->pos->z = $rk * $uz;
521
-        $sat->vel->x = $rdotk * $ux + $rfdotk * $vx;
522
-        $sat->vel->y = $rdotk * $uy + $rfdotk * $vy;
523
-        $sat->vel->z = $rdotk * $uz + $rfdotk * $vz;
518
+        $sat->pos->x = $rk*$ux;
519
+        $sat->pos->y = $rk*$uy;
520
+        $sat->pos->z = $rk*$uz;
521
+        $sat->vel->x = $rdotk*$ux + $rfdotk*$vx;
522
+        $sat->vel->y = $rdotk*$uy + $rfdotk*$vy;
523
+        $sat->vel->z = $rdotk*$uz + $rfdotk*$vz;
524 524
 
525 525
         /* Phase in rads */
526 526
         $sat->phase = $xlt - $sat->deep_arg->xnode - $sat->deep_arg->omgadf + Predict::twopi;
527 527
         if ($sat->phase < 0.0) {
528 528
             $sat->phase += Predict::twopi;
529 529
         }
530
-        $sat->phase = Predict_Math::FMod2p ($sat->phase);
530
+        $sat->phase = Predict_Math::FMod2p($sat->phase);
531 531
 
532 532
         $sat->tle->omegao1 = $sat->deep_arg->omgadf;
533 533
         $sat->tle->xincl1  = $sat->deep_arg->xinc;
@@ -545,7 +545,7 @@  discard block
 block discarded – undo
545 545
             $sat->dps->thgr = Predict_Time::ThetaG($sat->tle->epoch, $sat->deep_arg);
546 546
             $eq = $sat->tle->eo;
547 547
             $sat->dps->xnq = $sat->deep_arg->xnodp;
548
-            $aqnv = 1.0 / $sat->deep_arg->aodp;
548
+            $aqnv = 1.0/$sat->deep_arg->aodp;
549 549
             $sat->dps->xqncl = $sat->tle->xincl;
550 550
             $xmao = $sat->tle->xmo;
551 551
             $xpidot = $sat->deep_arg->omgdot + $sat->deep_arg->xnodot;
@@ -555,26 +555,26 @@  discard block
 block discarded – undo
555 555
             $sat->dps->preep = 0;
556 556
 
557 557
             /* Initialize lunar solar terms */
558
-            $day = $sat->deep_arg->ds50 + 18261.5;  /* Days since 1900 Jan 0.5 */
558
+            $day = $sat->deep_arg->ds50 + 18261.5; /* Days since 1900 Jan 0.5 */
559 559
             if ($day != $sat->dps->preep) {
560 560
                 $sat->dps->preep = $day;
561
-                $xnodce = 4.5236020 - 9.2422029E-4 * $day;
561
+                $xnodce = 4.5236020 - 9.2422029E-4*$day;
562 562
                 $stem = sin($xnodce);
563 563
                 $ctem = cos($xnodce);
564
-                $sat->dps->zcosil = 0.91375164 - 0.03568096 * $ctem;
565
-                $sat->dps->zsinil = sqrt(1.0 - $sat->dps->zcosil * $sat->dps->zcosil);
566
-                $sat->dps->zsinhl = 0.089683511 * $stem / $sat->dps->zsinil;
567
-                $sat->dps->zcoshl = sqrt(1.0 - $sat->dps->zsinhl * $sat->dps->zsinhl);
568
-                $c = 4.7199672 + 0.22997150 * $day;
569
-                $gam = 5.8351514 + 0.0019443680 * $day;
564
+                $sat->dps->zcosil = 0.91375164 - 0.03568096*$ctem;
565
+                $sat->dps->zsinil = sqrt(1.0 - $sat->dps->zcosil*$sat->dps->zcosil);
566
+                $sat->dps->zsinhl = 0.089683511*$stem/$sat->dps->zsinil;
567
+                $sat->dps->zcoshl = sqrt(1.0 - $sat->dps->zsinhl*$sat->dps->zsinhl);
568
+                $c = 4.7199672 + 0.22997150*$day;
569
+                $gam = 5.8351514 + 0.0019443680*$day;
570 570
                 $sat->dps->zmol = Predict_Math::FMod2p($c - $gam);
571
-                $zx = 0.39785416 * $stem / $sat->dps->zsinil;
572
-                $zy = $sat->dps->zcoshl * $ctem + 0.91744867 * $sat->dps->zsinhl * $stem;
571
+                $zx = 0.39785416*$stem/$sat->dps->zsinil;
572
+                $zy = $sat->dps->zcoshl*$ctem + 0.91744867*$sat->dps->zsinhl*$stem;
573 573
                 $zx = Predict_Math::AcTan($zx, $zy);
574 574
                 $zx = $gam + $zx - $xnodce;
575 575
                 $sat->dps->zcosgl = cos($zx);
576 576
                 $sat->dps->zsingl = sin($zx);
577
-                $sat->dps->zmos = 6.2565837 + 0.017201977 * $day;
577
+                $sat->dps->zmos = 6.2565837 + 0.017201977*$day;
578 578
                 $sat->dps->zmos = Predict_Math::FMod2p($sat->dps->zmos);
579 579
             } /* End if(day != preep) */
580 580
 
@@ -590,76 +590,76 @@  discard block
 block discarded – undo
590 590
             $zn = Predict::zns;
591 591
             $ze = Predict::zes;
592 592
             $zmo = $sat->dps->zmos;
593
-            $xnoi = 1.0 / $sat->dps->xnq;
593
+            $xnoi = 1.0/$sat->dps->xnq;
594 594
 
595 595
             /* Loop breaks when Solar terms are done a second */
596 596
             /* time, after Lunar terms are initialized        */
597
-            for(;;) {
597
+            for (;;) {
598 598
                 /* Solar terms done again after Lunar terms are done */
599
-                $a1 = $zcosg * $zcosh + $zsing * $zcosi * $zsinh;
600
-                $a3 = -$zsing * $zcosh + $zcosg * $zcosi * $zsinh;
601
-                $a7 = -$zcosg * $zsinh + $zsing * $zcosi * $zcosh;
602
-                $a8 = $zsing * $zsini;
603
-                $a9 = $zsing * $zsinh + $zcosg * $zcosi * $zcosh;
604
-                $a10 = $zcosg * $zsini;
605
-                $a2 = $sat->deep_arg->cosio * $a7 + $sat->deep_arg->sinio * $a8;
606
-                $a4 = $sat->deep_arg->cosio * $a9 + $sat->deep_arg->sinio * $a10;
607
-                $a5 = -$sat->deep_arg->sinio * $a7 + $sat->deep_arg->cosio * $a8;
608
-                $a6 = -$sat->deep_arg->sinio * $a9 + $sat->deep_arg->cosio * $a10;
609
-                $x1 = $a1 * $sat->deep_arg->cosg + $a2 * $sat->deep_arg->sing;
610
-                $x2 = $a3 * $sat->deep_arg->cosg + $a4 * $sat->deep_arg->sing;
611
-                $x3 = -$a1 * $sat->deep_arg->sing + $a2 * $sat->deep_arg->cosg;
612
-                $x4 = -$a3 * $sat->deep_arg->sing + $a4 * $sat->deep_arg->cosg;
613
-                $x5 = $a5 * $sat->deep_arg->sing;
614
-                $x6 = $a6 * $sat->deep_arg->sing;
615
-                $x7 = $a5 * $sat->deep_arg->cosg;
616
-                $x8 = $a6 * $sat->deep_arg->cosg;
617
-                $z31 = 12 * $x1 * $x1 - 3 * $x3 * $x3;
618
-                $z32 = 24 * $x1 * $x2 - 6 * $x3 * $x4;
619
-                $z33 = 12 * $x2 * $x2 - 3 * $x4 * $x4;
620
-                $z1 = 3 * ($a1 * $a1 + $a2 * $a2) + $z31 * $sat->deep_arg->eosq;
621
-                $z2 = 6 * ($a1 * $a3 + $a2 * $a4) + $z32 * $sat->deep_arg->eosq;
622
-                $z3 = 3 * ($a3 * $a3 + $a4 * $a4) + $z33 * $sat->deep_arg->eosq;
623
-                $z11 = -6 * $a1 * $a5 + $sat->deep_arg->eosq * (-24 * $x1 * $x7 - 6 * $x3 * $x5);
624
-                $z12 = -6 * ($a1 * $a6 + $a3 * $a5) + $sat->deep_arg->eosq *
625
-                    (-24 * ($x2 * $x7 + $x1 * $x8) - 6 * ($x3 * $x6 + $x4 * $x5));
626
-                $z13 = -6 * $a3 * $a6 + $sat->deep_arg->eosq * (-24 * $x2 * $x8 - 6 * $x4 * $x6);
627
-                $z21 = 6 * $a2 * $a5 + $sat->deep_arg->eosq * (24 * $x1 * $x5 - 6 * $x3 * $x7);
628
-                $z22 = 6 * ($a4 * $a5 + $a2 * $a6) + $sat->deep_arg->eosq *
629
-                    (24 * ($x2 * $x5 + $x1 * $x6) - 6 * ($x4 * $x7 + $x3 * $x8));
630
-                $z23 = 6 * $a4 * $a6 + $sat->deep_arg->eosq * (24 * $x2 * $x6 - 6 * $x4 * $x8);
631
-                $z1 = $z1 + $z1 + $sat->deep_arg->betao2 * $z31;
632
-                $z2 = $z2 + $z2 + $sat->deep_arg->betao2 * $z32;
633
-                $z3 = $z3 + $z3 + $sat->deep_arg->betao2 * $z33;
634
-                $s3 = $cc * $xnoi;
635
-                $s2 = -0.5 * $s3 / $sat->deep_arg->betao;
636
-                $s4 = $s3 * $sat->deep_arg->betao;
637
-                $s1 = -15 * $eq * $s4;
638
-                $s5 = $x1 * $x3 + $x2 * $x4;
639
-                $s6 = $x2 * $x3 + $x1 * $x4;
640
-                $s7 = $x2 * $x4 - $x1 * $x3;
641
-                $se = $s1 * $zn * $s5;
642
-                $si = $s2 * $zn * ($z11 + $z13);
643
-                $sl = -$zn * $s3 * ($z1 + $z3 - 14 - 6 * $sat->deep_arg->eosq);
644
-                $sgh = $s4 * $zn * ($z31 + $z33 - 6);
645
-                $sh = -$zn * $s2 * ($z21 + $z23);
599
+                $a1 = $zcosg*$zcosh + $zsing*$zcosi*$zsinh;
600
+                $a3 = -$zsing*$zcosh + $zcosg*$zcosi*$zsinh;
601
+                $a7 = -$zcosg*$zsinh + $zsing*$zcosi*$zcosh;
602
+                $a8 = $zsing*$zsini;
603
+                $a9 = $zsing*$zsinh + $zcosg*$zcosi*$zcosh;
604
+                $a10 = $zcosg*$zsini;
605
+                $a2 = $sat->deep_arg->cosio*$a7 + $sat->deep_arg->sinio*$a8;
606
+                $a4 = $sat->deep_arg->cosio*$a9 + $sat->deep_arg->sinio*$a10;
607
+                $a5 = -$sat->deep_arg->sinio*$a7 + $sat->deep_arg->cosio*$a8;
608
+                $a6 = -$sat->deep_arg->sinio*$a9 + $sat->deep_arg->cosio*$a10;
609
+                $x1 = $a1*$sat->deep_arg->cosg + $a2*$sat->deep_arg->sing;
610
+                $x2 = $a3*$sat->deep_arg->cosg + $a4*$sat->deep_arg->sing;
611
+                $x3 = -$a1*$sat->deep_arg->sing + $a2*$sat->deep_arg->cosg;
612
+                $x4 = -$a3*$sat->deep_arg->sing + $a4*$sat->deep_arg->cosg;
613
+                $x5 = $a5*$sat->deep_arg->sing;
614
+                $x6 = $a6*$sat->deep_arg->sing;
615
+                $x7 = $a5*$sat->deep_arg->cosg;
616
+                $x8 = $a6*$sat->deep_arg->cosg;
617
+                $z31 = 12*$x1*$x1 - 3*$x3*$x3;
618
+                $z32 = 24*$x1*$x2 - 6*$x3*$x4;
619
+                $z33 = 12*$x2*$x2 - 3*$x4*$x4;
620
+                $z1 = 3*($a1*$a1 + $a2*$a2) + $z31*$sat->deep_arg->eosq;
621
+                $z2 = 6*($a1*$a3 + $a2*$a4) + $z32*$sat->deep_arg->eosq;
622
+                $z3 = 3*($a3*$a3 + $a4*$a4) + $z33*$sat->deep_arg->eosq;
623
+                $z11 = -6*$a1*$a5 + $sat->deep_arg->eosq*(-24*$x1*$x7 - 6*$x3*$x5);
624
+                $z12 = -6*($a1*$a6 + $a3*$a5) + $sat->deep_arg->eosq*
625
+                    (-24*($x2*$x7 + $x1*$x8) - 6*($x3*$x6 + $x4*$x5));
626
+                $z13 = -6*$a3*$a6 + $sat->deep_arg->eosq*(-24*$x2*$x8 - 6*$x4*$x6);
627
+                $z21 = 6*$a2*$a5 + $sat->deep_arg->eosq*(24*$x1*$x5 - 6*$x3*$x7);
628
+                $z22 = 6*($a4*$a5 + $a2*$a6) + $sat->deep_arg->eosq*
629
+                    (24*($x2*$x5 + $x1*$x6) - 6*($x4*$x7 + $x3*$x8));
630
+                $z23 = 6*$a4*$a6 + $sat->deep_arg->eosq*(24*$x2*$x6 - 6*$x4*$x8);
631
+                $z1 = $z1 + $z1 + $sat->deep_arg->betao2*$z31;
632
+                $z2 = $z2 + $z2 + $sat->deep_arg->betao2*$z32;
633
+                $z3 = $z3 + $z3 + $sat->deep_arg->betao2*$z33;
634
+                $s3 = $cc*$xnoi;
635
+                $s2 = -0.5*$s3/$sat->deep_arg->betao;
636
+                $s4 = $s3*$sat->deep_arg->betao;
637
+                $s1 = -15*$eq*$s4;
638
+                $s5 = $x1*$x3 + $x2*$x4;
639
+                $s6 = $x2*$x3 + $x1*$x4;
640
+                $s7 = $x2*$x4 - $x1*$x3;
641
+                $se = $s1*$zn*$s5;
642
+                $si = $s2*$zn*($z11 + $z13);
643
+                $sl = -$zn*$s3*($z1 + $z3 - 14 - 6*$sat->deep_arg->eosq);
644
+                $sgh = $s4*$zn*($z31 + $z33 - 6);
645
+                $sh = -$zn*$s2*($z21 + $z23);
646 646
                 if ($sat->dps->xqncl < 5.2359877E-2) {
647 647
                     $sh = 0;
648 648
                 }
649
-                $sat->dps->ee2 = 2 * $s1 * $s6;
650
-                $sat->dps->e3 = 2 * $s1 * $s7;
651
-                $sat->dps->xi2 = 2 * $s2 * $z12;
652
-                $sat->dps->xi3 = 2 * $s2 * ($z13 - $z11);
653
-                $sat->dps->xl2 = -2 * $s3 * $z2;
654
-                $sat->dps->xl3 = -2 * $s3 * ($z3 - $z1);
655
-                $sat->dps->xl4 = -2 * $s3 * (-21 - 9 * $sat->deep_arg->eosq) * $ze;
656
-                $sat->dps->xgh2 = 2 * $s4 * $z32;
657
-                $sat->dps->xgh3 = 2 * $s4 * ($z33 - $z31);
658
-                $sat->dps->xgh4 = -18 * $s4 * $ze;
659
-                $sat->dps->xh2 = -2 * $s2 * $z22;
660
-                $sat->dps->xh3 = -2 * $s2 * ($z23 - $z21);
661
-
662
-                if ($sat->flags & self::LUNAR_TERMS_DONE_FLAG) {
649
+                $sat->dps->ee2 = 2*$s1*$s6;
650
+                $sat->dps->e3 = 2*$s1*$s7;
651
+                $sat->dps->xi2 = 2*$s2*$z12;
652
+                $sat->dps->xi3 = 2*$s2*($z13 - $z11);
653
+                $sat->dps->xl2 = -2*$s3*$z2;
654
+                $sat->dps->xl3 = -2*$s3*($z3 - $z1);
655
+                $sat->dps->xl4 = -2*$s3*(-21 - 9*$sat->deep_arg->eosq)*$ze;
656
+                $sat->dps->xgh2 = 2*$s4*$z32;
657
+                $sat->dps->xgh3 = 2*$s4*($z33 - $z31);
658
+                $sat->dps->xgh4 = -18*$s4*$ze;
659
+                $sat->dps->xh2 = -2*$s2*$z22;
660
+                $sat->dps->xh3 = -2*$s2*($z23 - $z21);
661
+
662
+                if ($sat->flags&self::LUNAR_TERMS_DONE_FLAG) {
663 663
                     break;
664 664
                 }
665 665
 
@@ -667,8 +667,8 @@  discard block
 block discarded – undo
667 667
                 $sat->dps->sse = $se;
668 668
                 $sat->dps->ssi = $si;
669 669
                 $sat->dps->ssl = $sl;
670
-                $sat->dps->ssh = $sh / $sat->deep_arg->sinio;
671
-                $sat->dps->ssg = $sgh - $sat->deep_arg->cosio * $sat->dps->ssh;
670
+                $sat->dps->ssh = $sh/$sat->deep_arg->sinio;
671
+                $sat->dps->ssg = $sgh - $sat->deep_arg->cosio*$sat->dps->ssh;
672 672
                 $sat->dps->se2 = $sat->dps->ee2;
673 673
                 $sat->dps->si2 = $sat->dps->xi2;
674 674
                 $sat->dps->sl2 = $sat->dps->xl2;
@@ -685,8 +685,8 @@  discard block
 block discarded – undo
685 685
                 $zsing = $sat->dps->zsingl;
686 686
                 $zcosi = $sat->dps->zcosil;
687 687
                 $zsini = $sat->dps->zsinil;
688
-                $zcosh = $sat->dps->zcoshl * $cosq + $sat->dps->zsinhl * $sinq;
689
-                $zsinh = $sinq * $sat->dps->zcoshl - $cosq * $sat->dps->zsinhl;
688
+                $zcosh = $sat->dps->zcoshl*$cosq + $sat->dps->zsinhl*$sinq;
689
+                $zsinh = $sinq*$sat->dps->zcoshl - $cosq*$sat->dps->zsinhl;
690 690
                 $zn = Predict::znl;
691 691
                 $cc = Predict::c1l;
692 692
                 $ze = Predict::zel;
@@ -697,113 +697,113 @@  discard block
 block discarded – undo
697 697
             $sat->dps->sse = $sat->dps->sse + $se;
698 698
             $sat->dps->ssi = $sat->dps->ssi + $si;
699 699
             $sat->dps->ssl = $sat->dps->ssl + $sl;
700
-            $sat->dps->ssg = $sat->dps->ssg + $sgh - $sat->deep_arg->cosio / $sat->deep_arg->sinio * $sh;
701
-            $sat->dps->ssh = $sat->dps->ssh + $sh / $sat->deep_arg->sinio;
700
+            $sat->dps->ssg = $sat->dps->ssg + $sgh - $sat->deep_arg->cosio/$sat->deep_arg->sinio*$sh;
701
+            $sat->dps->ssh = $sat->dps->ssh + $sh/$sat->deep_arg->sinio;
702 702
 
703 703
             /* Geopotential resonance initialization for 12 hour orbits */
704 704
             $sat->flags &= ~self::RESONANCE_FLAG;
705 705
             $sat->flags &= ~self::SYNCHRONOUS_FLAG;
706 706
 
707 707
             if (!(($sat->dps->xnq < 0.0052359877) && ($sat->dps->xnq > 0.0034906585))) {
708
-                if( ($sat->dps->xnq < 0.00826) || ($sat->dps->xnq > 0.00924) ) {
708
+                if (($sat->dps->xnq < 0.00826) || ($sat->dps->xnq > 0.00924)) {
709 709
                     return;
710 710
                 }
711 711
                 if ($eq < 0.5) {
712 712
                     return;
713 713
                 }
714 714
                 $sat->flags |= self::RESONANCE_FLAG;
715
-                $eoc = $eq * $sat->deep_arg->eosq;
716
-                $g201 = -0.306 - ($eq - 0.64) * 0.440;
715
+                $eoc = $eq*$sat->deep_arg->eosq;
716
+                $g201 = -0.306 - ($eq - 0.64)*0.440;
717 717
                 if ($eq <= 0.65) {
718
-                    $g211 = 3.616 - 13.247 * $eq + 16.290 * $sat->deep_arg->eosq;
719
-                    $g310 = -19.302 + 117.390 * $eq - 228.419 *
720
-                        $sat->deep_arg->eosq + 156.591 * $eoc;
721
-                    $g322 = -18.9068 + 109.7927 * $eq - 214.6334 *
722
-                        $sat->deep_arg->eosq + 146.5816 * $eoc;
723
-                    $g410 = -41.122 + 242.694 * $eq - 471.094 *
724
-                        $sat->deep_arg->eosq + 313.953 * $eoc;
725
-                    $g422 = -146.407 + 841.880 * $eq - 1629.014 *
726
-                        $sat->deep_arg->eosq + 1083.435 * $eoc;
727
-                    $g520 = -532.114 + 3017.977 * $eq - 5740 *
728
-                        $sat->deep_arg->eosq + 3708.276 * $eoc;
718
+                    $g211 = 3.616 - 13.247*$eq + 16.290*$sat->deep_arg->eosq;
719
+                    $g310 = -19.302 + 117.390*$eq - 228.419*
720
+                        $sat->deep_arg->eosq + 156.591*$eoc;
721
+                    $g322 = -18.9068 + 109.7927*$eq - 214.6334*
722
+                        $sat->deep_arg->eosq + 146.5816*$eoc;
723
+                    $g410 = -41.122 + 242.694*$eq - 471.094*
724
+                        $sat->deep_arg->eosq + 313.953*$eoc;
725
+                    $g422 = -146.407 + 841.880*$eq - 1629.014*
726
+                        $sat->deep_arg->eosq + 1083.435*$eoc;
727
+                    $g520 = -532.114 + 3017.977*$eq - 5740*
728
+                        $sat->deep_arg->eosq + 3708.276*$eoc;
729 729
                 } else {
730
-                    $g211 = -72.099 + 331.819 * $eq - 508.738 *
731
-                        $sat->deep_arg->eosq + 266.724 * $eoc;
732
-                    $g310 = -346.844 + 1582.851 * $eq - 2415.925 *
733
-                        $sat->deep_arg->eosq + 1246.113 * $eoc;
734
-                    $g322 = -342.585 + 1554.908 * $eq - 2366.899 *
735
-                        $sat->deep_arg->eosq + 1215.972 * $eoc;
736
-                    $g410 = -1052.797 + 4758.686 * $eq - 7193.992 *
737
-                        $sat->deep_arg->eosq + 3651.957 * $eoc;
738
-                    $g422 = -3581.69 + 16178.11 * $eq - 24462.77 *
739
-                        $sat->deep_arg->eosq+ 12422.52 * $eoc;
730
+                    $g211 = -72.099 + 331.819*$eq - 508.738*
731
+                        $sat->deep_arg->eosq + 266.724*$eoc;
732
+                    $g310 = -346.844 + 1582.851*$eq - 2415.925*
733
+                        $sat->deep_arg->eosq + 1246.113*$eoc;
734
+                    $g322 = -342.585 + 1554.908*$eq - 2366.899*
735
+                        $sat->deep_arg->eosq + 1215.972*$eoc;
736
+                    $g410 = -1052.797 + 4758.686*$eq - 7193.992*
737
+                        $sat->deep_arg->eosq + 3651.957*$eoc;
738
+                    $g422 = -3581.69 + 16178.11*$eq - 24462.77*
739
+                        $sat->deep_arg->eosq + 12422.52*$eoc;
740 740
                     if ($eq <= 0.715) {
741
-                        $g520 = 1464.74 - 4664.75 * $eq + 3763.64 * $sat->deep_arg->eosq;
741
+                        $g520 = 1464.74 - 4664.75*$eq + 3763.64*$sat->deep_arg->eosq;
742 742
                     } else {
743
-                        $g520 = -5149.66 + 29936.92 * $eq - 54087.36 *
744
-                            $sat->deep_arg->eosq + 31324.56 * $eoc;
743
+                        $g520 = -5149.66 + 29936.92*$eq - 54087.36*
744
+                            $sat->deep_arg->eosq + 31324.56*$eoc;
745 745
                     }
746 746
                 } /* End if (eq <= 0.65) */
747 747
 
748 748
                 if ($eq < 0.7) {
749
-                    $g533 = -919.2277 + 4988.61 * $eq - 9064.77 *
750
-                        $sat->deep_arg->eosq + 5542.21 * $eoc;
751
-                    $g521 = -822.71072 + 4568.6173 * $eq - 8491.4146 *
752
-                        $sat->deep_arg->eosq + 5337.524 * $eoc;
753
-                    $g532 = -853.666 + 4690.25 * $eq - 8624.77 *
754
-                        $sat->deep_arg->eosq + 5341.4 * $eoc;
749
+                    $g533 = -919.2277 + 4988.61*$eq - 9064.77*
750
+                        $sat->deep_arg->eosq + 5542.21*$eoc;
751
+                    $g521 = -822.71072 + 4568.6173*$eq - 8491.4146*
752
+                        $sat->deep_arg->eosq + 5337.524*$eoc;
753
+                    $g532 = -853.666 + 4690.25*$eq - 8624.77*
754
+                        $sat->deep_arg->eosq + 5341.4*$eoc;
755 755
                 }
756 756
                 else {
757
-                    $g533 = -37995.78 + 161616.52 * $eq - 229838.2*
758
-                        $sat->deep_arg->eosq + 109377.94 * $eoc;
759
-                    $g521 = -51752.104 + 218913.95 * $eq - 309468.16*
760
-                        $sat->deep_arg->eosq + 146349.42 * $eoc;
761
-                    $g532 = -40023.88 + 170470.89 * $eq - 242699.48*
762
-                        $sat->deep_arg->eosq + 115605.82 * $eoc;
757
+                    $g533 = -37995.78 + 161616.52*$eq - 229838.2*
758
+                        $sat->deep_arg->eosq + 109377.94*$eoc;
759
+                    $g521 = -51752.104 + 218913.95*$eq - 309468.16*
760
+                        $sat->deep_arg->eosq + 146349.42*$eoc;
761
+                    $g532 = -40023.88 + 170470.89*$eq - 242699.48*
762
+                        $sat->deep_arg->eosq + 115605.82*$eoc;
763 763
                 } /* End if (eq <= 0.7) */
764 764
 
765
-                $sini2 = $sat->deep_arg->sinio * $sat->deep_arg->sinio;
766
-                $f220 = 0.75 * (1 + 2 * $sat->deep_arg->cosio + $sat->deep_arg->theta2);
767
-                $f221 = 1.5 * $sini2;
768
-                $f321 = 1.875 * $sat->deep_arg->sinio * (1 - 2 *
769
-                                  $sat->deep_arg->cosio - 3 * $sat->deep_arg->theta2);
770
-                $f322 = -1.875 * $sat->deep_arg->sinio * (1 + 2*
771
-                                   $sat->deep_arg->cosio - 3 * $sat->deep_arg->theta2);
772
-                $f441 = 35 * $sini2 * $f220;
773
-                $f442 = 39.3750 * $sini2 * $sini2;
774
-                $f522 = 9.84375 * $sat->deep_arg->sinio * ($sini2 * (1 - 2 * $sat->deep_arg->cosio - 5 *
775
-                                       $sat->deep_arg->theta2) + 0.33333333 * (-2 + 4 * $sat->deep_arg->cosio +
776
-                                                     6 * $sat->deep_arg->theta2));
777
-                $f523 = $sat->deep_arg->sinio * (4.92187512 * $sini2 * (-2 - 4 *
778
-                                      $sat->deep_arg->cosio + 10 * $sat->deep_arg->theta2) + 6.56250012
779
-                            * (1 + 2 * $sat->deep_arg->cosio - 3 * $sat->deep_arg->theta2));
780
-                $f542 = 29.53125 * $sat->deep_arg->sinio * (2 - 8 *
781
-                                 $sat->deep_arg->cosio + $sat->deep_arg->theta2 *
782
-                                 (-12 + 8 * $sat->deep_arg->cosio + 10 * $sat->deep_arg->theta2));
783
-                $f543 = 29.53125 * $sat->deep_arg->sinio * (-2 - 8 * $sat->deep_arg->cosio +
784
-                                 $sat->deep_arg->theta2 * (12 + 8 * $sat->deep_arg->cosio - 10 *
765
+                $sini2 = $sat->deep_arg->sinio*$sat->deep_arg->sinio;
766
+                $f220 = 0.75*(1 + 2*$sat->deep_arg->cosio + $sat->deep_arg->theta2);
767
+                $f221 = 1.5*$sini2;
768
+                $f321 = 1.875*$sat->deep_arg->sinio*(1 - 2*
769
+                                  $sat->deep_arg->cosio - 3*$sat->deep_arg->theta2);
770
+                $f322 = -1.875*$sat->deep_arg->sinio*(1 + 2*
771
+                                   $sat->deep_arg->cosio - 3*$sat->deep_arg->theta2);
772
+                $f441 = 35*$sini2*$f220;
773
+                $f442 = 39.3750*$sini2*$sini2;
774
+                $f522 = 9.84375*$sat->deep_arg->sinio*($sini2*(1 - 2*$sat->deep_arg->cosio - 5*
775
+                                       $sat->deep_arg->theta2) + 0.33333333*(-2 + 4*$sat->deep_arg->cosio +
776
+                                                     6*$sat->deep_arg->theta2));
777
+                $f523 = $sat->deep_arg->sinio*(4.92187512*$sini2*(-2 - 4*
778
+                                      $sat->deep_arg->cosio + 10*$sat->deep_arg->theta2) + 6.56250012
779
+                            * (1 + 2*$sat->deep_arg->cosio - 3*$sat->deep_arg->theta2));
780
+                $f542 = 29.53125*$sat->deep_arg->sinio*(2 - 8*
781
+                                 $sat->deep_arg->cosio + $sat->deep_arg->theta2*
782
+                                 (-12 + 8*$sat->deep_arg->cosio + 10*$sat->deep_arg->theta2));
783
+                $f543 = 29.53125*$sat->deep_arg->sinio*(-2 - 8*$sat->deep_arg->cosio +
784
+                                 $sat->deep_arg->theta2*(12 + 8*$sat->deep_arg->cosio - 10*
785 785
                                            $sat->deep_arg->theta2));
786
-                $xno2 = $sat->dps->xnq * $sat->dps->xnq;
787
-                $ainv2 = $aqnv * $aqnv;
788
-                $temp1 = 3 * $xno2 * $ainv2;
789
-                $temp = $temp1 * Predict::root22;
790
-                $sat->dps->d2201 = $temp * $f220 * $g201;
791
-                $sat->dps->d2211 = $temp * $f221 * $g211;
792
-                $temp1 = $temp1 * $aqnv;
793
-                $temp = $temp1 * Predict::root32;
794
-                $sat->dps->d3210 = $temp * $f321 * $g310;
795
-                $sat->dps->d3222 = $temp * $f322 * $g322;
796
-                $temp1 = $temp1 * $aqnv;
797
-                $temp = 2 * $temp1 * Predict::root44;
798
-                $sat->dps->d4410 = $temp * $f441 * $g410;
799
-                $sat->dps->d4422 = $temp * $f442 * $g422;
800
-                $temp1 = $temp1 * $aqnv;
801
-                $temp = $temp1 * Predict::root52;
802
-                $sat->dps->d5220 = $temp * $f522 * $g520;
803
-                $sat->dps->d5232 = $temp * $f523 * $g532;
804
-                $temp = 2 * $temp1 * Predict::root54;
805
-                $sat->dps->d5421 = $temp * $f542 * $g521;
806
-                $sat->dps->d5433 = $temp * $f543 * $g533;
786
+                $xno2 = $sat->dps->xnq*$sat->dps->xnq;
787
+                $ainv2 = $aqnv*$aqnv;
788
+                $temp1 = 3*$xno2*$ainv2;
789
+                $temp = $temp1*Predict::root22;
790
+                $sat->dps->d2201 = $temp*$f220*$g201;
791
+                $sat->dps->d2211 = $temp*$f221*$g211;
792
+                $temp1 = $temp1*$aqnv;
793
+                $temp = $temp1*Predict::root32;
794
+                $sat->dps->d3210 = $temp*$f321*$g310;
795
+                $sat->dps->d3222 = $temp*$f322*$g322;
796
+                $temp1 = $temp1*$aqnv;
797
+                $temp = 2*$temp1*Predict::root44;
798
+                $sat->dps->d4410 = $temp*$f441*$g410;
799
+                $sat->dps->d4422 = $temp*$f442*$g422;
800
+                $temp1 = $temp1*$aqnv;
801
+                $temp = $temp1*Predict::root52;
802
+                $sat->dps->d5220 = $temp*$f522*$g520;
803
+                $sat->dps->d5232 = $temp*$f523*$g532;
804
+                $temp = 2*$temp1*Predict::root54;
805
+                $sat->dps->d5421 = $temp*$f542*$g521;
806
+                $sat->dps->d5433 = $temp*$f543*$g533;
807 807
                 $sat->dps->xlamo = $xmao + $sat->tle->xnodeo + $sat->tle->xnodeo - $sat->dps->thgr - $sat->dps->thgr;
808 808
                 $bfact = $sat->deep_arg->xmdot + $sat->deep_arg->xnodot +
809 809
                     $sat->deep_arg->xnodot - Predict::thdt - Predict::thdt;
@@ -812,18 +812,18 @@  discard block
 block discarded – undo
812 812
                 $sat->flags |= self::RESONANCE_FLAG;
813 813
                 $sat->flags |= self::SYNCHRONOUS_FLAG;
814 814
                 /* Synchronous resonance terms initialization */
815
-                $g200 = 1 + $sat->deep_arg->eosq * (-2.5 + 0.8125 * $sat->deep_arg->eosq);
816
-                $g310 = 1 + 2 * $sat->deep_arg->eosq;
817
-                $g300 = 1 + $sat->deep_arg->eosq * (-6 + 6.60937 * $sat->deep_arg->eosq);
818
-                $f220 = 0.75 * (1 + $sat->deep_arg->cosio) * (1 + $sat->deep_arg->cosio);
819
-                $f311 = 0.9375 * $sat->deep_arg->sinio * $sat->deep_arg->sinio *
820
-                    (1 + 3 * $sat->deep_arg->cosio) - 0.75 * (1 + $sat->deep_arg->cosio);
815
+                $g200 = 1 + $sat->deep_arg->eosq*(-2.5 + 0.8125*$sat->deep_arg->eosq);
816
+                $g310 = 1 + 2*$sat->deep_arg->eosq;
817
+                $g300 = 1 + $sat->deep_arg->eosq*(-6 + 6.60937*$sat->deep_arg->eosq);
818
+                $f220 = 0.75*(1 + $sat->deep_arg->cosio)*(1 + $sat->deep_arg->cosio);
819
+                $f311 = 0.9375*$sat->deep_arg->sinio*$sat->deep_arg->sinio*
820
+                    (1 + 3*$sat->deep_arg->cosio) - 0.75*(1 + $sat->deep_arg->cosio);
821 821
                 $f330 = 1 + $sat->deep_arg->cosio;
822
-                $f330 = 1.875 * $f330 * $f330 * $f330;
823
-                $sat->dps->del1 = 3 * $sat->dps->xnq * $sat->dps->xnq * $aqnv * $aqnv;
824
-                $sat->dps->del2 = 2 * $sat->dps->del1 * $f220 * $g200 * Predict::q22;
825
-                $sat->dps->del3 = 3 * $sat->dps->del1 * $f330 * $g300 * Predict::q33 * $aqnv;
826
-                $sat->dps->del1 = $sat->dps->del1 * $f311 * $g310 * Predict::q31 * $aqnv;
822
+                $f330 = 1.875*$f330*$f330*$f330;
823
+                $sat->dps->del1 = 3*$sat->dps->xnq*$sat->dps->xnq*$aqnv*$aqnv;
824
+                $sat->dps->del2 = 2*$sat->dps->del1*$f220*$g200*Predict::q22;
825
+                $sat->dps->del3 = 3*$sat->dps->del1*$f330*$g300*Predict::q33*$aqnv;
826
+                $sat->dps->del1 = $sat->dps->del1*$f311*$g310*Predict::q31*$aqnv;
827 827
                 $sat->dps->fasx2 = 0.13130908;
828 828
                 $sat->dps->fasx4 = 2.8843198;
829 829
                 $sat->dps->fasx6 = 0.37448087;
@@ -845,24 +845,24 @@  discard block
 block discarded – undo
845 845
             return;
846 846
 
847 847
         case self::dpsec: /* Entrance for deep space secular effects */
848
-            $sat->deep_arg->xll = $sat->deep_arg->xll + $sat->dps->ssl * $sat->deep_arg->t;
849
-            $sat->deep_arg->omgadf = $sat->deep_arg->omgadf + $sat->dps->ssg * $sat->deep_arg->t;
850
-            $sat->deep_arg->xnode = $sat->deep_arg->xnode + $sat->dps->ssh * $sat->deep_arg->t;
851
-            $sat->deep_arg->em = $sat->tle->eo + $sat->dps->sse * $sat->deep_arg->t;
852
-            $sat->deep_arg->xinc = $sat->tle->xincl + $sat->dps->ssi * $sat->deep_arg->t;
848
+            $sat->deep_arg->xll = $sat->deep_arg->xll + $sat->dps->ssl*$sat->deep_arg->t;
849
+            $sat->deep_arg->omgadf = $sat->deep_arg->omgadf + $sat->dps->ssg*$sat->deep_arg->t;
850
+            $sat->deep_arg->xnode = $sat->deep_arg->xnode + $sat->dps->ssh*$sat->deep_arg->t;
851
+            $sat->deep_arg->em = $sat->tle->eo + $sat->dps->sse*$sat->deep_arg->t;
852
+            $sat->deep_arg->xinc = $sat->tle->xincl + $sat->dps->ssi*$sat->deep_arg->t;
853 853
             if ($sat->deep_arg->xinc < 0) {
854 854
                 $sat->deep_arg->xinc = -$sat->deep_arg->xinc;
855 855
                 $sat->deep_arg->xnode = $sat->deep_arg->xnode + Predict::pi;
856 856
                 $sat->deep_arg->omgadf = $sat->deep_arg->omgadf - Predict::pi;
857 857
             }
858
-            if(~$sat->flags & self::RESONANCE_FLAG ) {
858
+            if (~$sat->flags&self::RESONANCE_FLAG) {
859 859
                 return;
860 860
             }
861 861
 
862 862
             do {
863
-                if ( ($sat->dps->atime == 0) ||
863
+                if (($sat->dps->atime == 0) ||
864 864
                     (($sat->deep_arg->t >= 0) && ($sat->dps->atime < 0)) ||
865
-                    (($sat->deep_arg->t < 0) && ($sat->dps->atime >= 0)) ) {
865
+                    (($sat->deep_arg->t < 0) && ($sat->dps->atime >= 0))) {
866 866
                     /* Epoch restart */
867 867
                     if ($sat->deep_arg->t >= 0) {
868 868
                         $delt = $sat->dps->stepp;
@@ -899,59 +899,59 @@  discard block
 block discarded – undo
899 899
                         } else {
900 900
                             $delt = $sat->dps->stepp;
901 901
                         }
902
-                        $sat->flags |= (self::DO_LOOP_FLAG | self::EPOCH_RESTART_FLAG);
902
+                        $sat->flags |= (self::DO_LOOP_FLAG|self::EPOCH_RESTART_FLAG);
903 903
                     }
904 904
 
905 905
                     /* Dot terms calculated */
906
-                    if ($sat->flags & self::SYNCHRONOUS_FLAG) {
907
-                        $xndot = $sat->dps->del1 * sin($sat->dps->xli - $sat->dps->fasx2) + $sat->dps->del2 * sin(2 * ($sat->dps->xli - $sat->dps->fasx4))
908
-                            + $sat->dps->del3 * sin(3 * ($sat->dps->xli - $sat->dps->fasx6));
909
-                        $xnddt = $sat->dps->del1 * cos($sat->dps->xli - $sat->dps->fasx2) + 2 * $sat->dps->del2 * cos(2 * ($sat->dps->xli - $sat->dps->fasx4))
910
-                            + 3 * $sat->dps->del3 * cos(3 * ($sat->dps->xli - $sat->dps->fasx6));
906
+                    if ($sat->flags&self::SYNCHRONOUS_FLAG) {
907
+                        $xndot = $sat->dps->del1*sin($sat->dps->xli - $sat->dps->fasx2) + $sat->dps->del2*sin(2*($sat->dps->xli - $sat->dps->fasx4))
908
+                            + $sat->dps->del3*sin(3*($sat->dps->xli - $sat->dps->fasx6));
909
+                        $xnddt = $sat->dps->del1*cos($sat->dps->xli - $sat->dps->fasx2) + 2*$sat->dps->del2*cos(2*($sat->dps->xli - $sat->dps->fasx4))
910
+                            + 3*$sat->dps->del3*cos(3*($sat->dps->xli - $sat->dps->fasx6));
911 911
                     } else {
912
-                        $xomi = $sat->dps->omegaq + $sat->deep_arg->omgdot * $sat->dps->atime;
912
+                        $xomi = $sat->dps->omegaq + $sat->deep_arg->omgdot*$sat->dps->atime;
913 913
                         $x2omi = $xomi + $xomi;
914 914
                         $x2li = $sat->dps->xli + $sat->dps->xli;
915
-                        $xndot = $sat->dps->d2201 * sin($x2omi + $sat->dps->xli - Predict::g22)
916
-                            + $sat->dps->d2211 * sin($sat->dps->xli - Predict::g22)
917
-                            + $sat->dps->d3210 * sin($xomi + $sat->dps->xli - Predict::g32)
918
-                            + $sat->dps->d3222 * sin(-$xomi + $sat->dps->xli - Predict::g32)
919
-                            + $sat->dps->d4410 * sin($x2omi + $x2li- Predict::g44)
920
-                            + $sat->dps->d4422 * sin($x2li- Predict::g44)
921
-                            + $sat->dps->d5220 * sin($xomi + $sat->dps->xli- Predict::g52)
922
-                            + $sat->dps->d5232 * sin(-$xomi + $sat->dps->xli- Predict::g52)
923
-                            + $sat->dps->d5421 * sin($xomi + $x2li - Predict::g54)
924
-                            + $sat->dps->d5433 * sin(-$xomi + $x2li - Predict::g54);
925
-                        $xnddt = $sat->dps->d2201 * cos($x2omi + $sat->dps->xli- Predict::g22)
926
-                            + $sat->dps->d2211 * cos($sat->dps->xli - Predict::g22)
927
-                            + $sat->dps->d3210 * cos($xomi + $sat->dps->xli - Predict::g32)
928
-                            + $sat->dps->d3222 * cos(-$xomi + $sat->dps->xli - Predict::g32)
929
-                            + $sat->dps->d5220 * cos($xomi + $sat->dps->xli - Predict::g52)
930
-                            + $sat->dps->d5232 * cos(-$xomi + $sat->dps->xli - Predict::g52)
931
-                            + 2 * ($sat->dps->d4410 * cos($x2omi + $x2li - Predict::g44)
932
-                                + $sat->dps->d4422 * cos($x2li - Predict::g44)
933
-                                + $sat->dps->d5421 * cos($xomi + $x2li - Predict::g54)
934
-                                + $sat->dps->d5433 * cos(-$xomi + $x2li - Predict::g54));
915
+                        $xndot = $sat->dps->d2201*sin($x2omi + $sat->dps->xli - Predict::g22)
916
+                            + $sat->dps->d2211*sin($sat->dps->xli - Predict::g22)
917
+                            + $sat->dps->d3210*sin($xomi + $sat->dps->xli - Predict::g32)
918
+                            + $sat->dps->d3222*sin(-$xomi + $sat->dps->xli - Predict::g32)
919
+                            + $sat->dps->d4410*sin($x2omi + $x2li - Predict::g44)
920
+                            + $sat->dps->d4422*sin($x2li - Predict::g44)
921
+                            + $sat->dps->d5220*sin($xomi + $sat->dps->xli - Predict::g52)
922
+                            + $sat->dps->d5232*sin(-$xomi + $sat->dps->xli - Predict::g52)
923
+                            + $sat->dps->d5421*sin($xomi + $x2li - Predict::g54)
924
+                            + $sat->dps->d5433*sin(-$xomi + $x2li - Predict::g54);
925
+                        $xnddt = $sat->dps->d2201*cos($x2omi + $sat->dps->xli - Predict::g22)
926
+                            + $sat->dps->d2211*cos($sat->dps->xli - Predict::g22)
927
+                            + $sat->dps->d3210*cos($xomi + $sat->dps->xli - Predict::g32)
928
+                            + $sat->dps->d3222*cos(-$xomi + $sat->dps->xli - Predict::g32)
929
+                            + $sat->dps->d5220*cos($xomi + $sat->dps->xli - Predict::g52)
930
+                            + $sat->dps->d5232*cos(-$xomi + $sat->dps->xli - Predict::g52)
931
+                            + 2*($sat->dps->d4410*cos($x2omi + $x2li - Predict::g44)
932
+                                + $sat->dps->d4422*cos($x2li - Predict::g44)
933
+                                + $sat->dps->d5421*cos($xomi + $x2li - Predict::g54)
934
+                                + $sat->dps->d5433*cos(-$xomi + $x2li - Predict::g54));
935 935
                     } /* End of if (isFlagSet(SYNCHRONOUS_FLAG)) */
936 936
 
937 937
                     $xldot = $sat->dps->xni + $sat->dps->xfact;
938
-                    $xnddt = $xnddt * $xldot;
938
+                    $xnddt = $xnddt*$xldot;
939 939
 
940
-                    if ($sat->flags & self::DO_LOOP_FLAG) {
941
-                        $sat->dps->xli = $sat->dps->xli + $xldot * $delt + $xndot * $sat->dps->step2;
942
-                        $sat->dps->xni = $sat->dps->xni + $xndot * $delt + $xnddt * $sat->dps->step2;
940
+                    if ($sat->flags&self::DO_LOOP_FLAG) {
941
+                        $sat->dps->xli = $sat->dps->xli + $xldot*$delt + $xndot*$sat->dps->step2;
942
+                        $sat->dps->xni = $sat->dps->xni + $xndot*$delt + $xnddt*$sat->dps->step2;
943 943
                         $sat->dps->atime = $sat->dps->atime + $delt;
944 944
                     }
945
-                } while (($sat->flags & self::DO_LOOP_FLAG) &&
946
-                        (~$sat->flags & self::EPOCH_RESTART_FLAG));
945
+                } while (($sat->flags&self::DO_LOOP_FLAG) &&
946
+                        (~$sat->flags&self::EPOCH_RESTART_FLAG));
947 947
             }
948
-            while (($sat->flags & self::DO_LOOP_FLAG) && ($sat->flags & self::EPOCH_RESTART_FLAG));
948
+            while (($sat->flags&self::DO_LOOP_FLAG) && ($sat->flags&self::EPOCH_RESTART_FLAG));
949 949
 
950
-            $sat->deep_arg->xn = $sat->dps->xni + $xndot * $ft + $xnddt * $ft * $ft * 0.5;
951
-            $xl = $sat->dps->xli + $xldot * $ft + $xndot * $ft * $ft * 0.5;
952
-            $temp = -$sat->deep_arg->xnode + $sat->dps->thgr + $sat->deep_arg->t * Predict::thdt;
950
+            $sat->deep_arg->xn = $sat->dps->xni + $xndot*$ft + $xnddt*$ft*$ft*0.5;
951
+            $xl = $sat->dps->xli + $xldot*$ft + $xndot*$ft*$ft*0.5;
952
+            $temp = -$sat->deep_arg->xnode + $sat->dps->thgr + $sat->deep_arg->t*Predict::thdt;
953 953
 
954
-            if (~$sat->flags & self::SYNCHRONOUS_FLAG) {
954
+            if (~$sat->flags&self::SYNCHRONOUS_FLAG) {
955 955
                 $sat->deep_arg->xll = $xl + $temp + $temp;
956 956
             } else {
957 957
                 $sat->deep_arg->xll = $xl - $sat->deep_arg->omgadf + $temp;
@@ -965,26 +965,26 @@  discard block
 block discarded – undo
965 965
             $cosis = cos($sat->deep_arg->xinc);
966 966
             if (abs($sat->dps->savtsn - $sat->deep_arg->t) >= 30) {
967 967
                 $sat->dps->savtsn = $sat->deep_arg->t;
968
-                $zm = $sat->dps->zmos + Predict::zns * $sat->deep_arg->t;
969
-                $zf = $zm + 2 * Predict::zes * sin($zm);
968
+                $zm = $sat->dps->zmos + Predict::zns*$sat->deep_arg->t;
969
+                $zf = $zm + 2*Predict::zes*sin($zm);
970 970
                 $sinzf = sin($zf);
971
-                $f2 = 0.5 * $sinzf * $sinzf - 0.25;
972
-                $f3 = -0.5 * $sinzf * cos($zf);
973
-                $ses = $sat->dps->se2 * $f2 + $sat->dps->se3 * $f3;
974
-                $sis = $sat->dps->si2 * $f2 + $sat->dps->si3 * $f3;
975
-                $sls = $sat->dps->sl2 * $f2 + $sat->dps->sl3 * $f3 + $sat->dps->sl4 * $sinzf;
976
-                $sat->dps->sghs = $sat->dps->sgh2 * $f2 + $sat->dps->sgh3 * $f3 + $sat->dps->sgh4 * $sinzf;
977
-                $sat->dps->shs = $sat->dps->sh2 * $f2 + $sat->dps->sh3 * $f3;
978
-                $zm = $sat->dps->zmol + Predict::znl * $sat->deep_arg->t;
979
-                $zf = $zm + 2 * Predict::zel * sin($zm);
971
+                $f2 = 0.5*$sinzf*$sinzf - 0.25;
972
+                $f3 = -0.5*$sinzf*cos($zf);
973
+                $ses = $sat->dps->se2*$f2 + $sat->dps->se3*$f3;
974
+                $sis = $sat->dps->si2*$f2 + $sat->dps->si3*$f3;
975
+                $sls = $sat->dps->sl2*$f2 + $sat->dps->sl3*$f3 + $sat->dps->sl4*$sinzf;
976
+                $sat->dps->sghs = $sat->dps->sgh2*$f2 + $sat->dps->sgh3*$f3 + $sat->dps->sgh4*$sinzf;
977
+                $sat->dps->shs = $sat->dps->sh2*$f2 + $sat->dps->sh3*$f3;
978
+                $zm = $sat->dps->zmol + Predict::znl*$sat->deep_arg->t;
979
+                $zf = $zm + 2*Predict::zel*sin($zm);
980 980
                 $sinzf = sin($zf);
981
-                $f2 = 0.5 * $sinzf * $sinzf - 0.25;
982
-                $f3 = -0.5 * $sinzf * cos($zf);
983
-                $sel = $sat->dps->ee2 * $f2 + $sat->dps->e3 * $f3;
984
-                $sil = $sat->dps->xi2 * $f2 + $sat->dps->xi3 * $f3;
985
-                $sll = $sat->dps->xl2 * $f2 + $sat->dps->xl3 * $f3 + $sat->dps->xl4 * $sinzf;
986
-                $sat->dps->sghl = $sat->dps->xgh2 * $f2 + $sat->dps->xgh3 * $f3 + $sat->dps->xgh4 * $sinzf;
987
-                $sat->dps->sh1 = $sat->dps->xh2 * $f2 + $sat->dps->xh3 * $f3;
981
+                $f2 = 0.5*$sinzf*$sinzf - 0.25;
982
+                $f3 = -0.5*$sinzf*cos($zf);
983
+                $sel = $sat->dps->ee2*$f2 + $sat->dps->e3*$f3;
984
+                $sil = $sat->dps->xi2*$f2 + $sat->dps->xi3*$f3;
985
+                $sll = $sat->dps->xl2*$f2 + $sat->dps->xl3*$f3 + $sat->dps->xl4*$sinzf;
986
+                $sat->dps->sghl = $sat->dps->xgh2*$f2 + $sat->dps->xgh3*$f3 + $sat->dps->xgh4*$sinzf;
987
+                $sat->dps->sh1 = $sat->dps->xh2*$f2 + $sat->dps->xh3*$f3;
988 988
                 $sat->dps->pe = $ses + $sel;
989 989
                 $sat->dps->pinc = $sis + $sil;
990 990
                 $sat->dps->pl = $sls + $sll;
@@ -997,8 +997,8 @@  discard block
 block discarded – undo
997 997
 
998 998
             if ($sat->dps->xqncl >= 0.2) {
999 999
                 /* Apply periodics directly */
1000
-                $ph = $ph / $sat->deep_arg->sinio;
1001
-                $pgh = $pgh - $sat->deep_arg->cosio * $ph;
1000
+                $ph = $ph/$sat->deep_arg->sinio;
1001
+                $pgh = $pgh - $sat->deep_arg->cosio*$ph;
1002 1002
                 $sat->deep_arg->omgadf = $sat->deep_arg->omgadf + $pgh;
1003 1003
                 $sat->deep_arg->xnode = $sat->deep_arg->xnode + $ph;
1004 1004
                 $sat->deep_arg->xll = $sat->deep_arg->xll + $sat->dps->pl;
@@ -1006,22 +1006,22 @@  discard block
 block discarded – undo
1006 1006
                 /* Apply periodics with Lyddane modification */
1007 1007
                 $sinok = sin($sat->deep_arg->xnode);
1008 1008
                 $cosok = cos($sat->deep_arg->xnode);
1009
-                $alfdp = $sinis * $sinok;
1010
-                $betdp = $sinis * $cosok;
1011
-                $dalf = $ph * $cosok + $sat->dps->pinc * $cosis * $sinok;
1012
-                $dbet = -$ph * $sinok + $sat->dps->pinc * $cosis * $cosok;
1009
+                $alfdp = $sinis*$sinok;
1010
+                $betdp = $sinis*$cosok;
1011
+                $dalf = $ph*$cosok + $sat->dps->pinc*$cosis*$sinok;
1012
+                $dbet = -$ph*$sinok + $sat->dps->pinc*$cosis*$cosok;
1013 1013
                 $alfdp = $alfdp + $dalf;
1014 1014
                 $betdp = $betdp + $dbet;
1015 1015
                 $sat->deep_arg->xnode = Predict_Math::FMod2p($sat->deep_arg->xnode);
1016
-                $xls = $sat->deep_arg->xll + $sat->deep_arg->omgadf + $cosis * $sat->deep_arg->xnode;
1017
-                $dls = $sat->dps->pl + $pgh - $sat->dps->pinc * $sat->deep_arg->xnode * $sinis;
1016
+                $xls = $sat->deep_arg->xll + $sat->deep_arg->omgadf + $cosis*$sat->deep_arg->xnode;
1017
+                $dls = $sat->dps->pl + $pgh - $sat->dps->pinc*$sat->deep_arg->xnode*$sinis;
1018 1018
                 $xls = $xls + $dls;
1019 1019
                 $xnoh = $sat->deep_arg->xnode;
1020 1020
                 $sat->deep_arg->xnode = Predict_Math::AcTan($alfdp, $betdp);
1021 1021
 
1022 1022
                 /* This is a patch to Lyddane modification */
1023 1023
                 /* suggested by Rob Matson. */
1024
-                if(abs($xnoh - $sat->deep_arg->xnode) > Predict::pi) {
1024
+                if (abs($xnoh - $sat->deep_arg->xnode) > Predict::pi) {
1025 1025
                     if ($sat->deep_arg->xnode < $xnoh) {
1026 1026
                         $sat->deep_arg->xnode += Predict::twopi;
1027 1027
                     } else {
@@ -1030,7 +1030,7 @@  discard block
 block discarded – undo
1030 1030
                 }
1031 1031
 
1032 1032
                 $sat->deep_arg->xll = $sat->deep_arg->xll + $sat->dps->pl;
1033
-                $sat->deep_arg->omgadf = $xls - $sat->deep_arg->xll - cos($sat->deep_arg->xinc) *
1033
+                $sat->deep_arg->omgadf = $xls - $sat->deep_arg->xll - cos($sat->deep_arg->xinc)*
1034 1034
                     $sat->deep_arg->xnode;
1035 1035
             } /* End case dpper: */
1036 1036
             return;
Please login to merge, or discard this patch.
Braces   +2 added lines, -4 removed lines patch added patch discarded remove patch
@@ -752,8 +752,7 @@  discard block
 block discarded – undo
752 752
                         $sat->deep_arg->eosq + 5337.524 * $eoc;
753 753
                     $g532 = -853.666 + 4690.25 * $eq - 8624.77 *
754 754
                         $sat->deep_arg->eosq + 5341.4 * $eoc;
755
-                }
756
-                else {
755
+                } else {
757 756
                     $g533 = -37995.78 + 161616.52 * $eq - 229838.2*
758 757
                         $sat->deep_arg->eosq + 109377.94 * $eoc;
759 758
                     $g521 = -51752.104 + 218913.95 * $eq - 309468.16*
@@ -887,8 +886,7 @@  discard block
 block discarded – undo
887 886
                     if (abs($sat->deep_arg->t - $sat->dps->atime) >= $sat->dps->stepp) {
888 887
                         $sat->flags |= self::DO_LOOP_FLAG;
889 888
                         $sat->flags &= ~self::EPOCH_RESTART_FLAG;
890
-                    }
891
-                    else {
889
+                    } else {
892 890
                         $ft = $sat->deep_arg->t - $sat->dps->atime;
893 891
                         $sat->flags &= ~self::DO_LOOP_FLAG;
894 892
                     }
Please login to merge, or discard this patch.
require/libs/Predict/Predict/Solar.php 3 patches
Doc Comments   +4 added lines patch added patch discarded remove patch
@@ -51,6 +51,10 @@
 block discarded – undo
51 51
     }
52 52
 
53 53
     /* Calculates stellite's eclipse status and depth */
54
+
55
+    /**
56
+     * @param double $depth
57
+     */
54 58
     public static function Sat_Eclipsed(Predict_Vector $pos, Predict_Vector $sol, &$depth)
55 59
     {
56 60
         $Rho   = new Predict_Vector();
Please login to merge, or discard this patch.
Indentation   +77 added lines, -77 removed lines patch added patch discarded remove patch
@@ -24,91 +24,91 @@
 block discarded – undo
24 24
  */
25 25
 class Predict_Solar
26 26
 {
27
-    /* Calculates solar position vector */
28
-    public static function Calculate_Solar_Position($time, Predict_Vector $solar_vector)
29
-    {
30
-        $mjd = $time - 2415020.0;
31
-        $year = 1900 + $mjd / 365.25;
32
-        $T = ($mjd + Predict_Time::Delta_ET($year) / Predict::secday) / 36525.0;
33
-        $M = Predict_Math::Radians(Predict_Math::Modulus(358.47583 + Predict_Math::Modulus(35999.04975 * $T, 360.0)
34
-             - (0.000150 + 0.0000033 * $T) * ($T * $T), 360.0));
35
-        $L = Predict_Math::Radians(Predict_Math::Modulus(279.69668 + Predict_Math::Modulus(36000.76892 * $T, 360.0)
36
-             + 0.0003025 * ($T * $T), 360.0));
37
-        $e = 0.01675104 - (0.0000418 + 0.000000126 * $T) * $T;
38
-        $C = Predict_Math::Radians((1.919460 - (0.004789 + 0.000014 * $T) * $T) * sin($M)
39
-             + (0.020094 - 0.000100 * $T) * sin(2 * $M) + 0.000293 * sin(3 * $M));
40
-        $O = Predict_Math::Radians(Predict_Math::Modulus(259.18 - 1934.142 * $T, 360.0));
41
-        $Lsa = Predict_Math::Modulus($L + $C - Predict_Math::Radians(0.00569 - 0.00479 * sin($O)), Predict::twopi);
42
-        $nu = Predict_Math::Modulus($M + $C, Predict::twopi);
43
-        $R = 1.0000002 * (1 - ($e * $e)) / (1 + $e * cos($nu));
44
-        $eps = Predict_Math::Radians(23.452294 - (0.0130125 + (0.00000164 - 0.000000503 * $T) * $T) * $T + 0.00256 * cos($O));
45
-        $R = Predict::AU * $R;
27
+	/* Calculates solar position vector */
28
+	public static function Calculate_Solar_Position($time, Predict_Vector $solar_vector)
29
+	{
30
+		$mjd = $time - 2415020.0;
31
+		$year = 1900 + $mjd / 365.25;
32
+		$T = ($mjd + Predict_Time::Delta_ET($year) / Predict::secday) / 36525.0;
33
+		$M = Predict_Math::Radians(Predict_Math::Modulus(358.47583 + Predict_Math::Modulus(35999.04975 * $T, 360.0)
34
+			 - (0.000150 + 0.0000033 * $T) * ($T * $T), 360.0));
35
+		$L = Predict_Math::Radians(Predict_Math::Modulus(279.69668 + Predict_Math::Modulus(36000.76892 * $T, 360.0)
36
+			 + 0.0003025 * ($T * $T), 360.0));
37
+		$e = 0.01675104 - (0.0000418 + 0.000000126 * $T) * $T;
38
+		$C = Predict_Math::Radians((1.919460 - (0.004789 + 0.000014 * $T) * $T) * sin($M)
39
+			 + (0.020094 - 0.000100 * $T) * sin(2 * $M) + 0.000293 * sin(3 * $M));
40
+		$O = Predict_Math::Radians(Predict_Math::Modulus(259.18 - 1934.142 * $T, 360.0));
41
+		$Lsa = Predict_Math::Modulus($L + $C - Predict_Math::Radians(0.00569 - 0.00479 * sin($O)), Predict::twopi);
42
+		$nu = Predict_Math::Modulus($M + $C, Predict::twopi);
43
+		$R = 1.0000002 * (1 - ($e * $e)) / (1 + $e * cos($nu));
44
+		$eps = Predict_Math::Radians(23.452294 - (0.0130125 + (0.00000164 - 0.000000503 * $T) * $T) * $T + 0.00256 * cos($O));
45
+		$R = Predict::AU * $R;
46 46
 
47
-        $solar_vector->x = $R * cos($Lsa);
48
-        $solar_vector->y = $R * sin($Lsa) * cos($eps);
49
-        $solar_vector->z = $R * sin($Lsa) * sin($eps);
50
-        $solar_vector->w = $R;
51
-    }
47
+		$solar_vector->x = $R * cos($Lsa);
48
+		$solar_vector->y = $R * sin($Lsa) * cos($eps);
49
+		$solar_vector->z = $R * sin($Lsa) * sin($eps);
50
+		$solar_vector->w = $R;
51
+	}
52 52
 
53
-    /* Calculates stellite's eclipse status and depth */
54
-    public static function Sat_Eclipsed(Predict_Vector $pos, Predict_Vector $sol, &$depth)
55
-    {
56
-        $Rho   = new Predict_Vector();
57
-        $earth = new Predict_Vector();
53
+	/* Calculates stellite's eclipse status and depth */
54
+	public static function Sat_Eclipsed(Predict_Vector $pos, Predict_Vector $sol, &$depth)
55
+	{
56
+		$Rho   = new Predict_Vector();
57
+		$earth = new Predict_Vector();
58 58
 
59
-        /* Determine partial eclipse */
60
-        $sd_earth = Predict_Math::ArcSin(Predict::xkmper / $pos->w);
61
-        Predict_Math::Vec_Sub($sol, $pos, $Rho);
62
-        $sd_sun = Predict_Math::ArcSin(Predict::__sr__ / $Rho->w);
63
-        Predict_Math::Scalar_Multiply(-1, $pos, $earth);
64
-        $delta = Predict_Math::Angle($sol, $earth);
65
-        $depth = $sd_earth - $sd_sun - $delta;
59
+		/* Determine partial eclipse */
60
+		$sd_earth = Predict_Math::ArcSin(Predict::xkmper / $pos->w);
61
+		Predict_Math::Vec_Sub($sol, $pos, $Rho);
62
+		$sd_sun = Predict_Math::ArcSin(Predict::__sr__ / $Rho->w);
63
+		Predict_Math::Scalar_Multiply(-1, $pos, $earth);
64
+		$delta = Predict_Math::Angle($sol, $earth);
65
+		$depth = $sd_earth - $sd_sun - $delta;
66 66
 
67
-        if ($sd_earth < $sd_sun) {
68
-            return 0;
69
-        } else if ($depth >= 0) {
70
-            return 1;
71
-        } else {
72
-            return 0;
73
-        }
74
-    }
67
+		if ($sd_earth < $sd_sun) {
68
+			return 0;
69
+		} else if ($depth >= 0) {
70
+			return 1;
71
+		} else {
72
+			return 0;
73
+		}
74
+	}
75 75
 
76
-    /**
77
-     * Finds the current location of the sun based on the observer location
78
-     *
79
-     * @param Predict_QTH $qth    The observer location
80
-     * @param int         $daynum The daynum or null to use the current daynum
81
-     *
82
-     * @return Predict_ObsSet
83
-     */
84
-    public static function FindSun(Predict_QTH $qth, $daynum = null)
85
-    {
86
-        if ($daynum === null) {
87
-            $daynum = Predict_Time::get_current_daynum();
88
-        }
76
+	/**
77
+	 * Finds the current location of the sun based on the observer location
78
+	 *
79
+	 * @param Predict_QTH $qth    The observer location
80
+	 * @param int         $daynum The daynum or null to use the current daynum
81
+	 *
82
+	 * @return Predict_ObsSet
83
+	 */
84
+	public static function FindSun(Predict_QTH $qth, $daynum = null)
85
+	{
86
+		if ($daynum === null) {
87
+			$daynum = Predict_Time::get_current_daynum();
88
+		}
89 89
 
90
-        $obs_geodetic = new Predict_Geodetic();
91
-        $obs_geodetic->lon   = $qth->lon * Predict::de2ra;
92
-        $obs_geodetic->lat   = $qth->lat * Predict::de2ra;
93
-        $obs_geodetic->alt   = $qth->alt / 1000.0;
94
-        $obs_geodetic->theta = 0;
90
+		$obs_geodetic = new Predict_Geodetic();
91
+		$obs_geodetic->lon   = $qth->lon * Predict::de2ra;
92
+		$obs_geodetic->lat   = $qth->lat * Predict::de2ra;
93
+		$obs_geodetic->alt   = $qth->alt / 1000.0;
94
+		$obs_geodetic->theta = 0;
95 95
 
96
-        $solar_vector = new Predict_Vector();
97
-        $zero_vector  = new Predict_Vector();
98
-        $solar_set    = new Predict_ObsSet();
96
+		$solar_vector = new Predict_Vector();
97
+		$zero_vector  = new Predict_Vector();
98
+		$solar_set    = new Predict_ObsSet();
99 99
 
100
-        self::Calculate_Solar_Position($daynum, $solar_vector);
101
-        Predict_SGPObs::Calculate_Obs(
102
-            $daynum,
103
-            $solar_vector,
104
-            $zero_vector,
105
-            $obs_geodetic,
106
-            $solar_set
107
-        );
100
+		self::Calculate_Solar_Position($daynum, $solar_vector);
101
+		Predict_SGPObs::Calculate_Obs(
102
+			$daynum,
103
+			$solar_vector,
104
+			$zero_vector,
105
+			$obs_geodetic,
106
+			$solar_set
107
+		);
108 108
 
109
-        $solar_set->az = Predict_Math::Degrees($solar_set->az);
110
-        $solar_set->el = Predict_Math::Degrees($solar_set->el);
109
+		$solar_set->az = Predict_Math::Degrees($solar_set->az);
110
+		$solar_set->el = Predict_Math::Degrees($solar_set->el);
111 111
 
112
-        return $solar_set;
113
-    }
112
+		return $solar_set;
113
+	}
114 114
 }
Please login to merge, or discard this patch.
Spacing   +22 added lines, -22 removed lines patch added patch discarded remove patch
@@ -28,25 +28,25 @@  discard block
 block discarded – undo
28 28
     public static function Calculate_Solar_Position($time, Predict_Vector $solar_vector)
29 29
     {
30 30
         $mjd = $time - 2415020.0;
31
-        $year = 1900 + $mjd / 365.25;
32
-        $T = ($mjd + Predict_Time::Delta_ET($year) / Predict::secday) / 36525.0;
33
-        $M = Predict_Math::Radians(Predict_Math::Modulus(358.47583 + Predict_Math::Modulus(35999.04975 * $T, 360.0)
34
-             - (0.000150 + 0.0000033 * $T) * ($T * $T), 360.0));
35
-        $L = Predict_Math::Radians(Predict_Math::Modulus(279.69668 + Predict_Math::Modulus(36000.76892 * $T, 360.0)
36
-             + 0.0003025 * ($T * $T), 360.0));
37
-        $e = 0.01675104 - (0.0000418 + 0.000000126 * $T) * $T;
38
-        $C = Predict_Math::Radians((1.919460 - (0.004789 + 0.000014 * $T) * $T) * sin($M)
39
-             + (0.020094 - 0.000100 * $T) * sin(2 * $M) + 0.000293 * sin(3 * $M));
40
-        $O = Predict_Math::Radians(Predict_Math::Modulus(259.18 - 1934.142 * $T, 360.0));
41
-        $Lsa = Predict_Math::Modulus($L + $C - Predict_Math::Radians(0.00569 - 0.00479 * sin($O)), Predict::twopi);
31
+        $year = 1900 + $mjd/365.25;
32
+        $T = ($mjd + Predict_Time::Delta_ET($year)/Predict::secday)/36525.0;
33
+        $M = Predict_Math::Radians(Predict_Math::Modulus(358.47583 + Predict_Math::Modulus(35999.04975*$T, 360.0)
34
+             - (0.000150 + 0.0000033*$T)*($T*$T), 360.0));
35
+        $L = Predict_Math::Radians(Predict_Math::Modulus(279.69668 + Predict_Math::Modulus(36000.76892*$T, 360.0)
36
+             + 0.0003025*($T*$T), 360.0));
37
+        $e = 0.01675104 - (0.0000418 + 0.000000126*$T)*$T;
38
+        $C = Predict_Math::Radians((1.919460 - (0.004789 + 0.000014*$T)*$T)*sin($M)
39
+             + (0.020094 - 0.000100*$T)*sin(2*$M) + 0.000293*sin(3*$M));
40
+        $O = Predict_Math::Radians(Predict_Math::Modulus(259.18 - 1934.142*$T, 360.0));
41
+        $Lsa = Predict_Math::Modulus($L + $C - Predict_Math::Radians(0.00569 - 0.00479*sin($O)), Predict::twopi);
42 42
         $nu = Predict_Math::Modulus($M + $C, Predict::twopi);
43
-        $R = 1.0000002 * (1 - ($e * $e)) / (1 + $e * cos($nu));
44
-        $eps = Predict_Math::Radians(23.452294 - (0.0130125 + (0.00000164 - 0.000000503 * $T) * $T) * $T + 0.00256 * cos($O));
45
-        $R = Predict::AU * $R;
43
+        $R = 1.0000002*(1 - ($e*$e))/(1 + $e*cos($nu));
44
+        $eps = Predict_Math::Radians(23.452294 - (0.0130125 + (0.00000164 - 0.000000503*$T)*$T)*$T + 0.00256*cos($O));
45
+        $R = Predict::AU*$R;
46 46
 
47
-        $solar_vector->x = $R * cos($Lsa);
48
-        $solar_vector->y = $R * sin($Lsa) * cos($eps);
49
-        $solar_vector->z = $R * sin($Lsa) * sin($eps);
47
+        $solar_vector->x = $R*cos($Lsa);
48
+        $solar_vector->y = $R*sin($Lsa)*cos($eps);
49
+        $solar_vector->z = $R*sin($Lsa)*sin($eps);
50 50
         $solar_vector->w = $R;
51 51
     }
52 52
 
@@ -57,9 +57,9 @@  discard block
 block discarded – undo
57 57
         $earth = new Predict_Vector();
58 58
 
59 59
         /* Determine partial eclipse */
60
-        $sd_earth = Predict_Math::ArcSin(Predict::xkmper / $pos->w);
60
+        $sd_earth = Predict_Math::ArcSin(Predict::xkmper/$pos->w);
61 61
         Predict_Math::Vec_Sub($sol, $pos, $Rho);
62
-        $sd_sun = Predict_Math::ArcSin(Predict::__sr__ / $Rho->w);
62
+        $sd_sun = Predict_Math::ArcSin(Predict::__sr__/$Rho->w);
63 63
         Predict_Math::Scalar_Multiply(-1, $pos, $earth);
64 64
         $delta = Predict_Math::Angle($sol, $earth);
65 65
         $depth = $sd_earth - $sd_sun - $delta;
@@ -88,9 +88,9 @@  discard block
 block discarded – undo
88 88
         }
89 89
 
90 90
         $obs_geodetic = new Predict_Geodetic();
91
-        $obs_geodetic->lon   = $qth->lon * Predict::de2ra;
92
-        $obs_geodetic->lat   = $qth->lat * Predict::de2ra;
93
-        $obs_geodetic->alt   = $qth->alt / 1000.0;
91
+        $obs_geodetic->lon   = $qth->lon*Predict::de2ra;
92
+        $obs_geodetic->lat   = $qth->lat*Predict::de2ra;
93
+        $obs_geodetic->alt   = $qth->alt/1000.0;
94 94
         $obs_geodetic->theta = 0;
95 95
 
96 96
         $solar_vector = new Predict_Vector();
Please login to merge, or discard this patch.
require/libs/Predict/Predict/Time.php 3 patches
Doc Comments   +22 added lines, -1 removed lines patch added patch discarded remove patch
@@ -36,6 +36,10 @@  discard block
 block discarded – undo
36 36
     /* the year 1999 assuming that two-digit years in the range 00-56   */
37 37
     /* correspond to 2000-2056. Until the two-line element set format   */
38 38
     /* is changed, it is only valid for dates through 2056 December 31. */
39
+
40
+    /**
41
+     * @param double $epoch
42
+     */
39 43
     public static function Julian_Date_of_Epoch($epoch)
40 44
     {
41 45
         $year = 0;
@@ -54,6 +58,11 @@  discard block
 block discarded – undo
54 58
     }
55 59
 
56 60
     /* Equivalent to the C modf function */
61
+
62
+    /**
63
+     * @param double $x
64
+     * @param integer $ipart
65
+     */
57 66
     public static function modf($x, &$ipart) {
58 67
         $ipart = (int)$x;
59 68
         return $x - $ipart;
@@ -63,6 +72,10 @@  discard block
 block discarded – undo
63 72
     /* of Day 0.0 of {year}. This function is used to calculate the */
64 73
     /* Julian Date of any date by using Julian_Date_of_Year, DOY,   */
65 74
     /* and Fraction_of_Day. */
75
+
76
+    /**
77
+     * @param integer $year
78
+     */
66 79
     public static function Julian_Date_of_Year($year)
67 80
     {
68 81
         /* Astronomical Formulae for Calculators, Jean Meeus, */
@@ -85,6 +98,10 @@  discard block
 block discarded – undo
85 98
     /* 1999, as described above. The function ThetaG_JD provides the   */
86 99
     /* same calculation except that it is based on an input in the     */
87 100
     /* form of a Julian Date. */
101
+
102
+    /**
103
+     * @param double $epoch
104
+     */
88 105
     public static function ThetaG($epoch, Predict_DeepArg $deep_arg)
89 106
     {
90 107
         /* Reference:  The 1992 Astronomical Almanac, page B6. */
@@ -157,6 +174,10 @@  discard block
 block discarded – undo
157 174
     /* (approximately the same as UTC) and ET (now referred to as TDT).*/
158 175
     /* This function is based on a least squares fit of data from 1950 */
159 176
     /* to 1991 and will need to be updated periodically. */
177
+
178
+    /**
179
+     * @param double $year
180
+     */
160 181
     public static function Delta_ET($year)
161 182
     {
162 183
       /* Values determined using data from 1950-1991 in the 1990
@@ -204,7 +225,7 @@  discard block
 block discarded – undo
204 225
      *
205 226
      * @param Predict_TLE $tle The TLE object
206 227
      *
207
-     * @return int
228
+     * @return double
208 229
      */
209 230
     public static function getEpochTimeStamp(Predict_TLE $tle)
210 231
     {
Please login to merge, or discard this patch.
Indentation   +188 added lines, -188 removed lines patch added patch discarded remove patch
@@ -30,194 +30,194 @@
 block discarded – undo
30 30
  */
31 31
 class Predict_Time
32 32
 {
33
-    /* The function Julian_Date_of_Epoch returns the Julian Date of     */
34
-    /* an epoch specified in the format used in the NORAD two-line      */
35
-    /* element sets. It has been modified to support dates beyond       */
36
-    /* the year 1999 assuming that two-digit years in the range 00-56   */
37
-    /* correspond to 2000-2056. Until the two-line element set format   */
38
-    /* is changed, it is only valid for dates through 2056 December 31. */
39
-    public static function Julian_Date_of_Epoch($epoch)
40
-    {
41
-        $year = 0;
42
-
43
-        /* Modification to support Y2K */
44
-        /* Valid 1957 through 2056     */
45
-        $day = self::modf($epoch * 1E-3, $year) * 1E3;
46
-        if ($year < 57) {
47
-            $year = $year + 2000;
48
-        } else {
49
-            $year = $year + 1900;
50
-        }
51
-        /* End modification */
52
-
53
-        return self::Julian_Date_of_Year($year) + $day;
54
-    }
55
-
56
-    /* Equivalent to the C modf function */
57
-    public static function modf($x, &$ipart) {
58
-        $ipart = (int)$x;
59
-        return $x - $ipart;
60
-    }
61
-
62
-    /* The function Julian_Date_of_Year calculates the Julian Date  */
63
-    /* of Day 0.0 of {year}. This function is used to calculate the */
64
-    /* Julian Date of any date by using Julian_Date_of_Year, DOY,   */
65
-    /* and Fraction_of_Day. */
66
-    public static function Julian_Date_of_Year($year)
67
-    {
68
-        /* Astronomical Formulae for Calculators, Jean Meeus, */
69
-        /* pages 23-25. Calculate Julian Date of 0.0 Jan year */
70
-        $year = $year - 1;
71
-        $i = (int) ($year / 100);
72
-        $A = $i;
73
-        $i = (int) ($A / 4);
74
-        $B = (int) (2 - $A + $i);
75
-        $i = (int) (365.25 * $year);
76
-        $i += (int) (30.6001 * 14);
77
-        $jdoy = $i + 1720994.5 + $B;
78
-
79
-        return $jdoy;
80
-    }
81
-
82
-    /* The function ThetaG calculates the Greenwich Mean Sidereal Time */
83
-    /* for an epoch specified in the format used in the NORAD two-line */
84
-    /* element sets. It has now been adapted for dates beyond the year */
85
-    /* 1999, as described above. The function ThetaG_JD provides the   */
86
-    /* same calculation except that it is based on an input in the     */
87
-    /* form of a Julian Date. */
88
-    public static function ThetaG($epoch, Predict_DeepArg $deep_arg)
89
-    {
90
-        /* Reference:  The 1992 Astronomical Almanac, page B6. */
91
-        // double year,day,UT,jd,TU,GMST,_ThetaG;
92
-
93
-        /* Modification to support Y2K */
94
-        /* Valid 1957 through 2056     */
95
-        $year = 0;
96
-        $day = self::modf($epoch * 1E-3, $year) * 1E3;
97
-
98
-        if ($year < 57) {
99
-            $year += 2000;
100
-        } else {
101
-            $year += 1900;
102
-        }
103
-        /* End modification */
104
-
105
-        $UT = fmod($day, $day);
106
-        $jd = self::Julian_Date_of_Year($year) + $day;
107
-        $TU = ($jd - 2451545.0) / 36525;
108
-        $GMST = 24110.54841 + $TU * (8640184.812866 + $TU * (0.093104 - $TU * 6.2E-6));
109
-        $GMST = Predict_Math::Modulus($GMST + Predict::secday * Predict::omega_E * $UT, Predict::secday);
110
-        $deep_arg->ds50 = $jd - 2433281.5 + $UT;
111
-
112
-        return Predict_Math::FMod2p(6.3003880987 * $deep_arg->ds50 + 1.72944494);
113
-    }
114
-
115
-    /* See the ThetaG doc block above */
116
-    public static function ThetaG_JD($jd)
117
-    {
118
-        /* Reference:  The 1992 Astronomical Almanac, page B6. */
119
-        $UT   = Predict_Math::Frac($jd + 0.5);
120
-        $jd   = $jd - $UT;
121
-        $TU   = ($jd - 2451545.0) / 36525;
122
-        $GMST = 24110.54841 + $TU * (8640184.812866 + $TU * (0.093104 - $TU * 6.2E-6));
123
-        $GMST = Predict_Math::Modulus($GMST + Predict::secday * Predict::omega_E * $UT, Predict::secday);
124
-
125
-        return Predict::twopi * $GMST / Predict::secday;
126
-    }
127
-
128
-    /**
129
-     * Read the system clock and return the current Julian day.  From phpPredict
130
-     *
131
-     * @return float
132
-     */
133
-    public static function get_current_daynum() {
134
-        // Gets the current decimal day number from microtime
135
-
136
-        list($usec, $sec) = explode(' ', microtime());
137
-        return self::unix2daynum($sec, $usec);
138
-    }
139
-
140
-    /**
141
-     * Converts a standard unix timestamp and optional
142
-     * milliseconds to a daynum
143
-     *
144
-     * @param int $sec  Seconds from the unix epoch
145
-     * @param int $usec Optional milliseconds
146
-     *
147
-     * @return float
148
-     */
149
-    public static function unix2daynum($sec, $usec = 0)
150
-    {
151
-        $time = ((($sec + $usec) / 86400.0) - 3651.0);
152
-        return $time + 2444238.5;
153
-    }
154
-
155
-    /* The function Delta_ET has been added to allow calculations on   */
156
-    /* the position of the sun.  It provides the difference between UT */
157
-    /* (approximately the same as UTC) and ET (now referred to as TDT).*/
158
-    /* This function is based on a least squares fit of data from 1950 */
159
-    /* to 1991 and will need to be updated periodically. */
160
-    public static function Delta_ET($year)
161
-    {
162
-      /* Values determined using data from 1950-1991 in the 1990
33
+	/* The function Julian_Date_of_Epoch returns the Julian Date of     */
34
+	/* an epoch specified in the format used in the NORAD two-line      */
35
+	/* element sets. It has been modified to support dates beyond       */
36
+	/* the year 1999 assuming that two-digit years in the range 00-56   */
37
+	/* correspond to 2000-2056. Until the two-line element set format   */
38
+	/* is changed, it is only valid for dates through 2056 December 31. */
39
+	public static function Julian_Date_of_Epoch($epoch)
40
+	{
41
+		$year = 0;
42
+
43
+		/* Modification to support Y2K */
44
+		/* Valid 1957 through 2056     */
45
+		$day = self::modf($epoch * 1E-3, $year) * 1E3;
46
+		if ($year < 57) {
47
+			$year = $year + 2000;
48
+		} else {
49
+			$year = $year + 1900;
50
+		}
51
+		/* End modification */
52
+
53
+		return self::Julian_Date_of_Year($year) + $day;
54
+	}
55
+
56
+	/* Equivalent to the C modf function */
57
+	public static function modf($x, &$ipart) {
58
+		$ipart = (int)$x;
59
+		return $x - $ipart;
60
+	}
61
+
62
+	/* The function Julian_Date_of_Year calculates the Julian Date  */
63
+	/* of Day 0.0 of {year}. This function is used to calculate the */
64
+	/* Julian Date of any date by using Julian_Date_of_Year, DOY,   */
65
+	/* and Fraction_of_Day. */
66
+	public static function Julian_Date_of_Year($year)
67
+	{
68
+		/* Astronomical Formulae for Calculators, Jean Meeus, */
69
+		/* pages 23-25. Calculate Julian Date of 0.0 Jan year */
70
+		$year = $year - 1;
71
+		$i = (int) ($year / 100);
72
+		$A = $i;
73
+		$i = (int) ($A / 4);
74
+		$B = (int) (2 - $A + $i);
75
+		$i = (int) (365.25 * $year);
76
+		$i += (int) (30.6001 * 14);
77
+		$jdoy = $i + 1720994.5 + $B;
78
+
79
+		return $jdoy;
80
+	}
81
+
82
+	/* The function ThetaG calculates the Greenwich Mean Sidereal Time */
83
+	/* for an epoch specified in the format used in the NORAD two-line */
84
+	/* element sets. It has now been adapted for dates beyond the year */
85
+	/* 1999, as described above. The function ThetaG_JD provides the   */
86
+	/* same calculation except that it is based on an input in the     */
87
+	/* form of a Julian Date. */
88
+	public static function ThetaG($epoch, Predict_DeepArg $deep_arg)
89
+	{
90
+		/* Reference:  The 1992 Astronomical Almanac, page B6. */
91
+		// double year,day,UT,jd,TU,GMST,_ThetaG;
92
+
93
+		/* Modification to support Y2K */
94
+		/* Valid 1957 through 2056     */
95
+		$year = 0;
96
+		$day = self::modf($epoch * 1E-3, $year) * 1E3;
97
+
98
+		if ($year < 57) {
99
+			$year += 2000;
100
+		} else {
101
+			$year += 1900;
102
+		}
103
+		/* End modification */
104
+
105
+		$UT = fmod($day, $day);
106
+		$jd = self::Julian_Date_of_Year($year) + $day;
107
+		$TU = ($jd - 2451545.0) / 36525;
108
+		$GMST = 24110.54841 + $TU * (8640184.812866 + $TU * (0.093104 - $TU * 6.2E-6));
109
+		$GMST = Predict_Math::Modulus($GMST + Predict::secday * Predict::omega_E * $UT, Predict::secday);
110
+		$deep_arg->ds50 = $jd - 2433281.5 + $UT;
111
+
112
+		return Predict_Math::FMod2p(6.3003880987 * $deep_arg->ds50 + 1.72944494);
113
+	}
114
+
115
+	/* See the ThetaG doc block above */
116
+	public static function ThetaG_JD($jd)
117
+	{
118
+		/* Reference:  The 1992 Astronomical Almanac, page B6. */
119
+		$UT   = Predict_Math::Frac($jd + 0.5);
120
+		$jd   = $jd - $UT;
121
+		$TU   = ($jd - 2451545.0) / 36525;
122
+		$GMST = 24110.54841 + $TU * (8640184.812866 + $TU * (0.093104 - $TU * 6.2E-6));
123
+		$GMST = Predict_Math::Modulus($GMST + Predict::secday * Predict::omega_E * $UT, Predict::secday);
124
+
125
+		return Predict::twopi * $GMST / Predict::secday;
126
+	}
127
+
128
+	/**
129
+	 * Read the system clock and return the current Julian day.  From phpPredict
130
+	 *
131
+	 * @return float
132
+	 */
133
+	public static function get_current_daynum() {
134
+		// Gets the current decimal day number from microtime
135
+
136
+		list($usec, $sec) = explode(' ', microtime());
137
+		return self::unix2daynum($sec, $usec);
138
+	}
139
+
140
+	/**
141
+	 * Converts a standard unix timestamp and optional
142
+	 * milliseconds to a daynum
143
+	 *
144
+	 * @param int $sec  Seconds from the unix epoch
145
+	 * @param int $usec Optional milliseconds
146
+	 *
147
+	 * @return float
148
+	 */
149
+	public static function unix2daynum($sec, $usec = 0)
150
+	{
151
+		$time = ((($sec + $usec) / 86400.0) - 3651.0);
152
+		return $time + 2444238.5;
153
+	}
154
+
155
+	/* The function Delta_ET has been added to allow calculations on   */
156
+	/* the position of the sun.  It provides the difference between UT */
157
+	/* (approximately the same as UTC) and ET (now referred to as TDT).*/
158
+	/* This function is based on a least squares fit of data from 1950 */
159
+	/* to 1991 and will need to be updated periodically. */
160
+	public static function Delta_ET($year)
161
+	{
162
+	  /* Values determined using data from 1950-1991 in the 1990
163 163
          Astronomical Almanac.  See DELTA_ET.WQ1 for details. */
164 164
 
165
-      $delta_et = 26.465 + 0.747622 * ($year - 1950) +
166
-                 1.886913 * sin(Predict::twopi * ($year - 1975) / 33);
167
-
168
-      return $delta_et;
169
-    }
170
-
171
-    /**
172
-     * Converts a daynum to a unix timestamp.  From phpPredict.
173
-     *
174
-     * @param float $dn Julian Daynum
175
-     *
176
-     * @return float
177
-     */
178
-    public static function daynum2unix($dn) {
179
-        // Converts a daynum to a UNIX timestamp
180
-
181
-        return (86400.0 * ($dn - 2444238.5 + 3651.0));
182
-    }
183
-
184
-    /**
185
-     * Converts a daynum to a readable time format.
186
-     *
187
-     * @param float $dn The julian date
188
-     * @param string $zone The zone string, defaults to America/Los_Angeles
189
-     * @param string $format The date() function's format string.  Defaults to m-d-Y H:i:s
190
-     *
191
-     * @return string
192
-     */
193
-    public static function daynum2readable($dn, $zone = 'America/Los_Angeles', $format = 'm-d-Y H:i:s')
194
-    {
195
-        $unix = self::daynum2unix($dn);
196
-        $date = new DateTime("@" . round($unix));
197
-        $dateTimezone = new DateTimezone($zone);
198
-        $date->setTimezone($dateTimezone);
199
-        return $date->format($format);
200
-    }
201
-
202
-    /**
203
-     * Returns the unix timestamp of a TLE's epoch
204
-     *
205
-     * @param Predict_TLE $tle The TLE object
206
-     *
207
-     * @return int
208
-     */
209
-    public static function getEpochTimeStamp(Predict_TLE $tle)
210
-    {
211
-        $year = $tle->epoch_year;
212
-        $day  = $tle->epoch_day;
213
-        $sec  = round(86400 * $tle->epoch_fod);
214
-
215
-        $zone = new DateTimeZone('GMT');
216
-        $date = new DateTime();
217
-        $date->setTimezone($zone);
218
-        $date->setDate($year, 1, 1);
219
-        $date->setTime(0, 0, 0);
220
-
221
-        return $date->format('U') + (86400 * $day) + $sec - 86400;
222
-    }
165
+	  $delta_et = 26.465 + 0.747622 * ($year - 1950) +
166
+				 1.886913 * sin(Predict::twopi * ($year - 1975) / 33);
167
+
168
+	  return $delta_et;
169
+	}
170
+
171
+	/**
172
+	 * Converts a daynum to a unix timestamp.  From phpPredict.
173
+	 *
174
+	 * @param float $dn Julian Daynum
175
+	 *
176
+	 * @return float
177
+	 */
178
+	public static function daynum2unix($dn) {
179
+		// Converts a daynum to a UNIX timestamp
180
+
181
+		return (86400.0 * ($dn - 2444238.5 + 3651.0));
182
+	}
183
+
184
+	/**
185
+	 * Converts a daynum to a readable time format.
186
+	 *
187
+	 * @param float $dn The julian date
188
+	 * @param string $zone The zone string, defaults to America/Los_Angeles
189
+	 * @param string $format The date() function's format string.  Defaults to m-d-Y H:i:s
190
+	 *
191
+	 * @return string
192
+	 */
193
+	public static function daynum2readable($dn, $zone = 'America/Los_Angeles', $format = 'm-d-Y H:i:s')
194
+	{
195
+		$unix = self::daynum2unix($dn);
196
+		$date = new DateTime("@" . round($unix));
197
+		$dateTimezone = new DateTimezone($zone);
198
+		$date->setTimezone($dateTimezone);
199
+		return $date->format($format);
200
+	}
201
+
202
+	/**
203
+	 * Returns the unix timestamp of a TLE's epoch
204
+	 *
205
+	 * @param Predict_TLE $tle The TLE object
206
+	 *
207
+	 * @return int
208
+	 */
209
+	public static function getEpochTimeStamp(Predict_TLE $tle)
210
+	{
211
+		$year = $tle->epoch_year;
212
+		$day  = $tle->epoch_day;
213
+		$sec  = round(86400 * $tle->epoch_fod);
214
+
215
+		$zone = new DateTimeZone('GMT');
216
+		$date = new DateTime();
217
+		$date->setTimezone($zone);
218
+		$date->setDate($year, 1, 1);
219
+		$date->setTime(0, 0, 0);
220
+
221
+		return $date->format('U') + (86400 * $day) + $sec - 86400;
222
+	}
223 223
 }
Please login to merge, or discard this patch.
Spacing   +22 added lines, -22 removed lines patch added patch discarded remove patch
@@ -42,7 +42,7 @@  discard block
 block discarded – undo
42 42
 
43 43
         /* Modification to support Y2K */
44 44
         /* Valid 1957 through 2056     */
45
-        $day = self::modf($epoch * 1E-3, $year) * 1E3;
45
+        $day = self::modf($epoch*1E-3, $year)*1E3;
46 46
         if ($year < 57) {
47 47
             $year = $year + 2000;
48 48
         } else {
@@ -55,7 +55,7 @@  discard block
 block discarded – undo
55 55
 
56 56
     /* Equivalent to the C modf function */
57 57
     public static function modf($x, &$ipart) {
58
-        $ipart = (int)$x;
58
+        $ipart = (int) $x;
59 59
         return $x - $ipart;
60 60
     }
61 61
 
@@ -68,12 +68,12 @@  discard block
 block discarded – undo
68 68
         /* Astronomical Formulae for Calculators, Jean Meeus, */
69 69
         /* pages 23-25. Calculate Julian Date of 0.0 Jan year */
70 70
         $year = $year - 1;
71
-        $i = (int) ($year / 100);
71
+        $i = (int) ($year/100);
72 72
         $A = $i;
73
-        $i = (int) ($A / 4);
73
+        $i = (int) ($A/4);
74 74
         $B = (int) (2 - $A + $i);
75
-        $i = (int) (365.25 * $year);
76
-        $i += (int) (30.6001 * 14);
75
+        $i = (int) (365.25*$year);
76
+        $i += (int) (30.6001*14);
77 77
         $jdoy = $i + 1720994.5 + $B;
78 78
 
79 79
         return $jdoy;
@@ -93,7 +93,7 @@  discard block
 block discarded – undo
93 93
         /* Modification to support Y2K */
94 94
         /* Valid 1957 through 2056     */
95 95
         $year = 0;
96
-        $day = self::modf($epoch * 1E-3, $year) * 1E3;
96
+        $day = self::modf($epoch*1E-3, $year)*1E3;
97 97
 
98 98
         if ($year < 57) {
99 99
             $year += 2000;
@@ -104,12 +104,12 @@  discard block
 block discarded – undo
104 104
 
105 105
         $UT = fmod($day, $day);
106 106
         $jd = self::Julian_Date_of_Year($year) + $day;
107
-        $TU = ($jd - 2451545.0) / 36525;
108
-        $GMST = 24110.54841 + $TU * (8640184.812866 + $TU * (0.093104 - $TU * 6.2E-6));
109
-        $GMST = Predict_Math::Modulus($GMST + Predict::secday * Predict::omega_E * $UT, Predict::secday);
107
+        $TU = ($jd - 2451545.0)/36525;
108
+        $GMST = 24110.54841 + $TU*(8640184.812866 + $TU*(0.093104 - $TU*6.2E-6));
109
+        $GMST = Predict_Math::Modulus($GMST + Predict::secday*Predict::omega_E*$UT, Predict::secday);
110 110
         $deep_arg->ds50 = $jd - 2433281.5 + $UT;
111 111
 
112
-        return Predict_Math::FMod2p(6.3003880987 * $deep_arg->ds50 + 1.72944494);
112
+        return Predict_Math::FMod2p(6.3003880987*$deep_arg->ds50 + 1.72944494);
113 113
     }
114 114
 
115 115
     /* See the ThetaG doc block above */
@@ -118,11 +118,11 @@  discard block
 block discarded – undo
118 118
         /* Reference:  The 1992 Astronomical Almanac, page B6. */
119 119
         $UT   = Predict_Math::Frac($jd + 0.5);
120 120
         $jd   = $jd - $UT;
121
-        $TU   = ($jd - 2451545.0) / 36525;
122
-        $GMST = 24110.54841 + $TU * (8640184.812866 + $TU * (0.093104 - $TU * 6.2E-6));
123
-        $GMST = Predict_Math::Modulus($GMST + Predict::secday * Predict::omega_E * $UT, Predict::secday);
121
+        $TU   = ($jd - 2451545.0)/36525;
122
+        $GMST = 24110.54841 + $TU*(8640184.812866 + $TU*(0.093104 - $TU*6.2E-6));
123
+        $GMST = Predict_Math::Modulus($GMST + Predict::secday*Predict::omega_E*$UT, Predict::secday);
124 124
 
125
-        return Predict::twopi * $GMST / Predict::secday;
125
+        return Predict::twopi*$GMST/Predict::secday;
126 126
     }
127 127
 
128 128
     /**
@@ -148,7 +148,7 @@  discard block
 block discarded – undo
148 148
      */
149 149
     public static function unix2daynum($sec, $usec = 0)
150 150
     {
151
-        $time = ((($sec + $usec) / 86400.0) - 3651.0);
151
+        $time = ((($sec + $usec)/86400.0) - 3651.0);
152 152
         return $time + 2444238.5;
153 153
     }
154 154
 
@@ -162,8 +162,8 @@  discard block
 block discarded – undo
162 162
       /* Values determined using data from 1950-1991 in the 1990
163 163
          Astronomical Almanac.  See DELTA_ET.WQ1 for details. */
164 164
 
165
-      $delta_et = 26.465 + 0.747622 * ($year - 1950) +
166
-                 1.886913 * sin(Predict::twopi * ($year - 1975) / 33);
165
+      $delta_et = 26.465 + 0.747622*($year - 1950) +
166
+                 1.886913*sin(Predict::twopi*($year - 1975)/33);
167 167
 
168 168
       return $delta_et;
169 169
     }
@@ -178,7 +178,7 @@  discard block
 block discarded – undo
178 178
     public static function daynum2unix($dn) {
179 179
         // Converts a daynum to a UNIX timestamp
180 180
 
181
-        return (86400.0 * ($dn - 2444238.5 + 3651.0));
181
+        return (86400.0*($dn - 2444238.5 + 3651.0));
182 182
     }
183 183
 
184 184
     /**
@@ -193,7 +193,7 @@  discard block
 block discarded – undo
193 193
     public static function daynum2readable($dn, $zone = 'America/Los_Angeles', $format = 'm-d-Y H:i:s')
194 194
     {
195 195
         $unix = self::daynum2unix($dn);
196
-        $date = new DateTime("@" . round($unix));
196
+        $date = new DateTime("@".round($unix));
197 197
         $dateTimezone = new DateTimezone($zone);
198 198
         $date->setTimezone($dateTimezone);
199 199
         return $date->format($format);
@@ -210,7 +210,7 @@  discard block
 block discarded – undo
210 210
     {
211 211
         $year = $tle->epoch_year;
212 212
         $day  = $tle->epoch_day;
213
-        $sec  = round(86400 * $tle->epoch_fod);
213
+        $sec  = round(86400*$tle->epoch_fod);
214 214
 
215 215
         $zone = new DateTimeZone('GMT');
216 216
         $date = new DateTime();
@@ -218,6 +218,6 @@  discard block
 block discarded – undo
218 218
         $date->setDate($year, 1, 1);
219 219
         $date->setTime(0, 0, 0);
220 220
 
221
-        return $date->format('U') + (86400 * $day) + $sec - 86400;
221
+        return $date->format('U') + (86400*$day) + $sec - 86400;
222 222
     }
223 223
 }
Please login to merge, or discard this patch.
require/libs/Predict/Predict/DeepArg.php 1 patch
Indentation   +24 added lines, -24 removed lines patch added patch discarded remove patch
@@ -6,30 +6,30 @@
 block discarded – undo
6 6
 /* Common arguments between deep-space functions */
7 7
 class Predict_DeepArg
8 8
 {
9
-    /* Used by dpinit part of Deep() */
10
-    public $eosq;
11
-    public $sinio;
12
-    public $cosio;
13
-    public $betao;
14
-    public $aodp;
15
-    public $theta2;
16
-    public $sing;
17
-    public $cosg;
18
-    public $betao2;
19
-    public $xmdot;
20
-    public $omgdot;
21
-    public $xnodot;
22
-    public $xnodp;
9
+	/* Used by dpinit part of Deep() */
10
+	public $eosq;
11
+	public $sinio;
12
+	public $cosio;
13
+	public $betao;
14
+	public $aodp;
15
+	public $theta2;
16
+	public $sing;
17
+	public $cosg;
18
+	public $betao2;
19
+	public $xmdot;
20
+	public $omgdot;
21
+	public $xnodot;
22
+	public $xnodp;
23 23
 
24
-    /* Used by dpsec and dpper parts of Deep() */
25
-    public $xll;
26
-    public $omgadf;
27
-    public $xnode;
28
-    public $em;
29
-    public $xinc;
30
-    public $xn;
31
-    public $t;
24
+	/* Used by dpsec and dpper parts of Deep() */
25
+	public $xll;
26
+	public $omgadf;
27
+	public $xnode;
28
+	public $em;
29
+	public $xinc;
30
+	public $xn;
31
+	public $t;
32 32
 
33
-    /* Used by thetg and Deep() */
34
-    public $ds50;
33
+	/* Used by thetg and Deep() */
34
+	public $ds50;
35 35
 }
Please login to merge, or discard this patch.
require/libs/Predict/Predict/Pass.php 2 patches
Indentation   +12 added lines, -12 removed lines patch added patch discarded remove patch
@@ -3,16 +3,16 @@
 block discarded – undo
3 3
 /** Brief satellite pass info. */
4 4
 class Predict_Pass
5 5
 {
6
-    public $satname;  /*!< satellite name */
7
-    public $aos;      /*!< AOS time in "jul_utc" */
8
-    public $tca;      /*!< TCA time in "jul_utc" */
9
-    public $los;      /*!< LOS time in "jul_utc" */
10
-    public $max_el;   /*!< Maximum elevation during pass */
11
-    public $aos_az;   /*!< Azimuth at AOS */
12
-    public $los_az;   /*!< Azimuth at LOS */
13
-    public $orbit;    /*!< Orbit number */
14
-    public $maxel_az; /*!< Azimuth at maximum elevation */
15
-    public $vis;      /*!< Visibility string, e.g. VSE, -S-, V-- */
16
-    public $details = array();  /*!< List of pass_detail_t entries */
17
-    public $max_apparent_magnitude = null; /* maximum apparent magnitude, experimental */
6
+	public $satname;  /*!< satellite name */
7
+	public $aos;      /*!< AOS time in "jul_utc" */
8
+	public $tca;      /*!< TCA time in "jul_utc" */
9
+	public $los;      /*!< LOS time in "jul_utc" */
10
+	public $max_el;   /*!< Maximum elevation during pass */
11
+	public $aos_az;   /*!< Azimuth at AOS */
12
+	public $los_az;   /*!< Azimuth at LOS */
13
+	public $orbit;    /*!< Orbit number */
14
+	public $maxel_az; /*!< Azimuth at maximum elevation */
15
+	public $vis;      /*!< Visibility string, e.g. VSE, -S-, V-- */
16
+	public $details = array();  /*!< List of pass_detail_t entries */
17
+	public $max_apparent_magnitude = null; /* maximum apparent magnitude, experimental */
18 18
 }
Please login to merge, or discard this patch.
Spacing   +10 added lines, -10 removed lines patch added patch discarded remove patch
@@ -3,16 +3,16 @@
 block discarded – undo
3 3
 /** Brief satellite pass info. */
4 4
 class Predict_Pass
5 5
 {
6
-    public $satname;  /*!< satellite name */
7
-    public $aos;      /*!< AOS time in "jul_utc" */
8
-    public $tca;      /*!< TCA time in "jul_utc" */
9
-    public $los;      /*!< LOS time in "jul_utc" */
10
-    public $max_el;   /*!< Maximum elevation during pass */
11
-    public $aos_az;   /*!< Azimuth at AOS */
12
-    public $los_az;   /*!< Azimuth at LOS */
13
-    public $orbit;    /*!< Orbit number */
6
+    public $satname; /*!< satellite name */
7
+    public $aos; /*!< AOS time in "jul_utc" */
8
+    public $tca; /*!< TCA time in "jul_utc" */
9
+    public $los; /*!< LOS time in "jul_utc" */
10
+    public $max_el; /*!< Maximum elevation during pass */
11
+    public $aos_az; /*!< Azimuth at AOS */
12
+    public $los_az; /*!< Azimuth at LOS */
13
+    public $orbit; /*!< Orbit number */
14 14
     public $maxel_az; /*!< Azimuth at maximum elevation */
15
-    public $vis;      /*!< Visibility string, e.g. VSE, -S-, V-- */
16
-    public $details = array();  /*!< List of pass_detail_t entries */
15
+    public $vis; /*!< Visibility string, e.g. VSE, -S-, V-- */
16
+    public $details = array(); /*!< List of pass_detail_t entries */
17 17
     public $max_apparent_magnitude = null; /* maximum apparent magnitude, experimental */
18 18
 }
Please login to merge, or discard this patch.
require/libs/Predict/Predict/DeepStatic.php 1 patch
Indentation   +74 added lines, -74 removed lines patch added patch discarded remove patch
@@ -6,78 +6,78 @@
 block discarded – undo
6 6
 /* static data for DEEP */
7 7
 class Predict_DeepStatic
8 8
 {
9
-    public $thgr;
10
-    public $xnq;
11
-    public $xqncl;
12
-    public $omegaq;
13
-    public $zmol;
14
-    public $zmos;
15
-    public $savtsn;
16
-    public $ee2;
17
-    public $e3;
18
-    public $xi2;
19
-    public $xl2;
20
-    public $xl3;
21
-    public $xl4;
22
-    public $xgh2;
23
-    public $xgh3;
24
-    public $xgh4;
25
-    public $xh2;
26
-    public $xh3;
27
-    public $sse;
28
-    public $ssi;
29
-    public $ssg;
30
-    public $xi3;
31
-    public $se2;
32
-    public $si2;
33
-    public $sl2;
34
-    public $sgh2;
35
-    public $sh2;
36
-    public $se3;
37
-    public $si3;
38
-    public $sl3;
39
-    public $sgh3;
40
-    public $sh3;
41
-    public $sl4;
42
-    public $sgh4;
43
-    public $ssl;
44
-    public $ssh;
45
-    public $d3210;
46
-    public $d3222;
47
-    public $d4410;
48
-    public $d4422;
49
-    public $d5220;
50
-    public $d5232;
51
-    public $d5421;
52
-    public $d5433;
53
-    public $del1;
54
-    public $del2;
55
-    public $del3;
56
-    public $fasx2;
57
-    public $fasx4;
58
-    public $fasx6;
59
-    public $xlamo;
60
-    public $xfact;
61
-    public $xni;
62
-    public $atime;
63
-    public $stepp;
64
-    public $stepn;
65
-    public $step2;
66
-    public $preep;
67
-    public $pl;
68
-    public $sghs;
69
-    public $xli;
70
-    public $d2201;
71
-    public $d2211;
72
-    public $sghl;
73
-    public $sh1;
74
-    public $pinc;
75
-    public $pe;
76
-    public $shs;
77
-    public $zsingl;
78
-    public $zcosgl;
79
-    public $zsinhl;
80
-    public $zcoshl;
81
-    public $zsinil;
82
-    public $zcosil;
9
+	public $thgr;
10
+	public $xnq;
11
+	public $xqncl;
12
+	public $omegaq;
13
+	public $zmol;
14
+	public $zmos;
15
+	public $savtsn;
16
+	public $ee2;
17
+	public $e3;
18
+	public $xi2;
19
+	public $xl2;
20
+	public $xl3;
21
+	public $xl4;
22
+	public $xgh2;
23
+	public $xgh3;
24
+	public $xgh4;
25
+	public $xh2;
26
+	public $xh3;
27
+	public $sse;
28
+	public $ssi;
29
+	public $ssg;
30
+	public $xi3;
31
+	public $se2;
32
+	public $si2;
33
+	public $sl2;
34
+	public $sgh2;
35
+	public $sh2;
36
+	public $se3;
37
+	public $si3;
38
+	public $sl3;
39
+	public $sgh3;
40
+	public $sh3;
41
+	public $sl4;
42
+	public $sgh4;
43
+	public $ssl;
44
+	public $ssh;
45
+	public $d3210;
46
+	public $d3222;
47
+	public $d4410;
48
+	public $d4422;
49
+	public $d5220;
50
+	public $d5232;
51
+	public $d5421;
52
+	public $d5433;
53
+	public $del1;
54
+	public $del2;
55
+	public $del3;
56
+	public $fasx2;
57
+	public $fasx4;
58
+	public $fasx6;
59
+	public $xlamo;
60
+	public $xfact;
61
+	public $xni;
62
+	public $atime;
63
+	public $stepp;
64
+	public $stepn;
65
+	public $step2;
66
+	public $preep;
67
+	public $pl;
68
+	public $sghs;
69
+	public $xli;
70
+	public $d2201;
71
+	public $d2211;
72
+	public $sghl;
73
+	public $sh1;
74
+	public $pinc;
75
+	public $pe;
76
+	public $shs;
77
+	public $zsingl;
78
+	public $zcosgl;
79
+	public $zsinhl;
80
+	public $zcoshl;
81
+	public $zsinil;
82
+	public $zcosil;
83 83
 }
Please login to merge, or discard this patch.
require/libs/Predict/Predict/PassDetail.php 2 patches
Indentation   +21 added lines, -21 removed lines patch added patch discarded remove patch
@@ -12,26 +12,26 @@
 block discarded – undo
12 12
  */
13 13
 class Predict_PassDetail
14 14
 {
15
-    public $time;   /*!< time in "jul_utc" */
16
-    public $pos;    /*!< Raw unprocessed position at time */
17
-    public $vel;    /*!< Raw unprocessed velocity at time */
18
-    public $velo;
19
-    public $az;
20
-    public $el;
21
-    public $range;
22
-    public $range_rate;
23
-    public $lat;
24
-    public $lon;
25
-    public $alt;
26
-    public $ma;
27
-    public $phase;
28
-    public $footprint;
29
-    public $vis;
30
-    public $orbit;
15
+	public $time;   /*!< time in "jul_utc" */
16
+	public $pos;    /*!< Raw unprocessed position at time */
17
+	public $vel;    /*!< Raw unprocessed velocity at time */
18
+	public $velo;
19
+	public $az;
20
+	public $el;
21
+	public $range;
22
+	public $range_rate;
23
+	public $lat;
24
+	public $lon;
25
+	public $alt;
26
+	public $ma;
27
+	public $phase;
28
+	public $footprint;
29
+	public $vis;
30
+	public $orbit;
31 31
 
32
-    public function __construct()
33
-    {
34
-        $this->pos = new Predict_Vector();
35
-        $this->vel = new Predict_Vector();
36
-    }
32
+	public function __construct()
33
+	{
34
+		$this->pos = new Predict_Vector();
35
+		$this->vel = new Predict_Vector();
36
+	}
37 37
 }
Please login to merge, or discard this patch.
Spacing   +3 added lines, -3 removed lines patch added patch discarded remove patch
@@ -12,9 +12,9 @@
 block discarded – undo
12 12
  */
13 13
 class Predict_PassDetail
14 14
 {
15
-    public $time;   /*!< time in "jul_utc" */
16
-    public $pos;    /*!< Raw unprocessed position at time */
17
-    public $vel;    /*!< Raw unprocessed velocity at time */
15
+    public $time; /*!< time in "jul_utc" */
16
+    public $pos; /*!< Raw unprocessed position at time */
17
+    public $vel; /*!< Raw unprocessed velocity at time */
18 18
     public $velo;
19 19
     public $az;
20 20
     public $el;
Please login to merge, or discard this patch.
require/libs/Predict/Predict/ObsSet.php 2 patches
Indentation   +4 added lines, -4 removed lines patch added patch discarded remove patch
@@ -5,8 +5,8 @@
 block discarded – undo
5 5
  */
6 6
 class Predict_ObsSet
7 7
 {
8
-    public $az         = 0.0;  /*!< Azimuth [deg] */
9
-    public $el         = 0.0;  /*!< Elevation [deg] */
10
-    public $range      = 0.0;  /*!< Range [km] */
11
-    public $range_rate = 0.0;  /*!< Velocity [km/sec] */
8
+	public $az         = 0.0;  /*!< Azimuth [deg] */
9
+	public $el         = 0.0;  /*!< Elevation [deg] */
10
+	public $range      = 0.0;  /*!< Range [km] */
11
+	public $range_rate = 0.0;  /*!< Velocity [km/sec] */
12 12
 }
Please login to merge, or discard this patch.
Spacing   +4 added lines, -4 removed lines patch added patch discarded remove patch
@@ -5,8 +5,8 @@
 block discarded – undo
5 5
  */
6 6
 class Predict_ObsSet
7 7
 {
8
-    public $az         = 0.0;  /*!< Azimuth [deg] */
9
-    public $el         = 0.0;  /*!< Elevation [deg] */
10
-    public $range      = 0.0;  /*!< Range [km] */
11
-    public $range_rate = 0.0;  /*!< Velocity [km/sec] */
8
+    public $az         = 0.0; /*!< Azimuth [deg] */
9
+    public $el         = 0.0; /*!< Elevation [deg] */
10
+    public $range      = 0.0; /*!< Range [km] */
11
+    public $range_rate = 0.0; /*!< Velocity [km/sec] */
12 12
 }
Please login to merge, or discard this patch.