1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.orekit.propagation.semianalytical.dsst.utilities;
18
19 import org.apache.commons.math3.util.FastMath;
20
21
22
23
24
25
26
27
28
29 public class GHmsjPolynomials {
30
31
32
33
34 private final CjSjCoefficient cjsjKH;
35
36
37
38
39 private final CjSjCoefficient cjsjAB;
40
41
42
43
44 private int I;
45
46
47
48
49
50
51
52
53 public GHmsjPolynomials(final double k, final double h,
54 final double alpha, final double beta,
55 final int retroFactor) {
56 this.cjsjKH = new CjSjCoefficient(k, h);
57 this.cjsjAB = new CjSjCoefficient(alpha, beta);
58 this.I = retroFactor;
59 }
60
61
62
63
64
65
66
67 public double getGmsj(final int m, final int s, final int j) {
68 final int sMj = FastMath.abs(s - j);
69 double gms = 0d;
70 if (FastMath.abs(s) <= m) {
71 final int mMis = m - I * s;
72 gms = cjsjKH.getCj(sMj) * cjsjAB.getCj(mMis) -
73 I * sgn(s - j) * cjsjKH.getSj(sMj) * cjsjAB.getSj(mMis);
74 } else {
75 final int sMim = FastMath.abs(s - I * m);
76 gms = cjsjKH.getCj(sMj) * cjsjAB.getCj(sMim) +
77 sgn(s - j) * sgn(s - m) * cjsjKH.getSj(sMj) * cjsjAB.getSj(sMim);
78 }
79 return gms;
80 }
81
82
83
84
85
86
87
88 public double getHmsj(final int m, final int s, final int j) {
89 final int sMj = FastMath.abs(s - j);
90 double hms = 0d;
91 if (FastMath.abs(s) <= m) {
92 final int mMis = m - I * s;
93 hms = I * cjsjKH.getCj(sMj) * cjsjAB.getSj(mMis) + sgn(s - j) *
94 cjsjKH.getSj(sMj) * cjsjAB.getCj(mMis);
95 } else {
96 final int sMim = FastMath.abs(s - I * m);
97 hms = -sgn(s - m) * cjsjKH.getCj(sMj) * cjsjAB.getSj(sMim) +
98 sgn(s - j) * cjsjKH.getSj(sMj) * cjsjAB.getCj(sMim);
99 }
100 return hms;
101 }
102
103
104
105
106
107
108
109 public double getdGmsdk(final int m, final int s, final int j) {
110 final int sMj = FastMath.abs(s - j);
111 double dGmsdk = 0d;
112 if (FastMath.abs(s) <= m) {
113 final int mMis = m - I * s;
114 dGmsdk = cjsjKH.getDcjDk(sMj) * cjsjAB.getCj(mMis) -
115 I * sgn(s - j) * cjsjKH.getDsjDk(sMj) * cjsjAB.getSj(mMis);
116 } else {
117 final int sMim = FastMath.abs(s - I * m);
118 dGmsdk = cjsjKH.getDcjDk(sMj) * cjsjAB.getCj(sMim) +
119 sgn(s - j) * sgn(s - m) * cjsjKH.getDsjDk(sMj) * cjsjAB.getSj(sMim);
120 }
121 return dGmsdk;
122 }
123
124
125
126
127
128
129
130 public double getdGmsdh(final int m, final int s, final int j) {
131 final int sMj = FastMath.abs(s - j);
132 double dGmsdh = 0d;
133 if (FastMath.abs(s) <= m) {
134 final int mMis = m - I * s;
135 dGmsdh = cjsjKH.getDcjDh(sMj) * cjsjAB.getCj(mMis) -
136 I * sgn(s - j) * cjsjKH.getDsjDh(sMj) * cjsjAB.getSj(mMis);
137 } else {
138 final int sMim = FastMath.abs(s - I * m);
139 dGmsdh = cjsjKH.getDcjDh(sMj) * cjsjAB.getCj(sMim) +
140 sgn(s - j) * sgn(s - m) * cjsjKH.getDsjDh(sMj) * cjsjAB.getSj(sMim);
141 }
142 return dGmsdh;
143 }
144
145
146
147
148
149
150
151 public double getdGmsdAlpha(final int m, final int s, final int j) {
152 final int sMj = FastMath.abs(s - j);
153 double dGmsdAl = 0d;
154 if (FastMath.abs(s) <= m) {
155 final int mMis = m - I * s;
156 dGmsdAl = cjsjKH.getCj(sMj) * cjsjAB.getDcjDk(mMis) -
157 I * sgn(s - j) * cjsjKH.getSj(sMj) * cjsjAB.getDsjDk(mMis);
158 } else {
159 final int sMim = FastMath.abs(s - I * m);
160 dGmsdAl = cjsjKH.getCj(sMj) * cjsjAB.getDcjDk(sMim) +
161 sgn(s - j) * sgn(s - m) * cjsjKH.getSj(sMj) * cjsjAB.getDsjDk(sMim);
162 }
163 return dGmsdAl;
164 }
165
166
167
168
169
170
171
172 public double getdGmsdBeta(final int m, final int s, final int j) {
173 final int sMj = FastMath.abs(s - j);
174 double dGmsdBe = 0d;
175 if (FastMath.abs(s) <= m) {
176 final int mMis = m - I * s;
177 dGmsdBe = cjsjKH.getCj(sMj) * cjsjAB.getDcjDh(mMis) -
178 I * sgn(s - j) * cjsjKH.getSj(sMj) * cjsjAB.getDsjDh(mMis);
179 } else {
180 final int sMim = FastMath.abs(s - I * m);
181 dGmsdBe = cjsjKH.getCj(sMj) * cjsjAB.getDcjDh(sMim) +
182 sgn(s - j) * sgn(s - m) * cjsjKH.getSj(sMj) * cjsjAB.getDsjDh(sMim);
183 }
184 return dGmsdBe;
185 }
186
187
188
189
190
191
192
193 public double getdHmsdk(final int m, final int s, final int j) {
194 final int sMj = FastMath.abs(s - j);
195 double dHmsdk = 0d;
196 if (FastMath.abs(s) <= m) {
197 final int mMis = m - I * s;
198 dHmsdk = I * cjsjKH.getDcjDk(sMj) * cjsjAB.getSj(mMis) +
199 sgn(s - j) * cjsjKH.getDsjDk(sMj) * cjsjAB.getCj(mMis);
200 } else {
201 final int sMim = FastMath.abs(s - I * m);
202 dHmsdk = -sgn(s - m) * cjsjKH.getDcjDk(sMj) * cjsjAB.getSj(sMim) +
203 sgn(s - j) * cjsjKH.getDsjDk(sMj) * cjsjAB.getCj(sMim);
204 }
205 return dHmsdk;
206 }
207
208
209
210
211
212
213
214 public double getdHmsdh(final int m, final int s, final int j) {
215 final int sMj = FastMath.abs(s - j);
216 double dHmsdh = 0d;
217 if (FastMath.abs(s) <= m) {
218 final int mMis = m - I * s;
219 dHmsdh = I * cjsjKH.getDcjDh(sMj) * cjsjAB.getSj(mMis) +
220 sgn(s - j) * cjsjKH.getDsjDh(sMj) * cjsjAB.getCj(mMis);
221 } else {
222 final int sMim = FastMath.abs(s - I * m);
223 dHmsdh = -sgn(s - m) * cjsjKH.getDcjDh(sMj) * cjsjAB.getSj(sMim) +
224 sgn(s - j) * cjsjKH.getDsjDh(sMj) * cjsjAB.getCj(sMim);
225 }
226 return dHmsdh;
227 }
228
229
230
231
232
233
234
235 public double getdHmsdAlpha(final int m, final int s, final int j) {
236 final int sMj = FastMath.abs(s - j);
237 double dHmsdAl = 0d;
238 if (FastMath.abs(s) <= m) {
239 final int mMis = m - I * s;
240 dHmsdAl = I * cjsjKH.getCj(sMj) * cjsjAB.getDsjDk(mMis) +
241 sgn(s - j) * cjsjKH.getSj(sMj) * cjsjAB.getDcjDk(mMis);
242 } else {
243 final int sMim = FastMath.abs(s - I * m);
244 dHmsdAl = -sgn(s - m) * cjsjKH.getCj(sMj) * cjsjAB.getDsjDk(sMim) +
245 sgn(s - j) * cjsjKH.getSj(sMj) * cjsjAB.getDcjDk(sMim);
246 }
247 return dHmsdAl;
248 }
249
250
251
252
253
254
255
256 public double getdHmsdBeta(final int m, final int s, final int j) {
257 final int sMj = FastMath.abs(s - j);
258 double dHmsdBe = 0d;
259 if (FastMath.abs(s) <= m) {
260 final int mMis = m - I * s;
261 dHmsdBe = I * cjsjKH.getCj(sMj) * cjsjAB.getDsjDh(mMis) +
262 sgn(s - j) * cjsjKH.getSj(sMj) * cjsjAB.getDcjDh(mMis);
263 } else {
264 final int sMim = FastMath.abs(s - I * m);
265 dHmsdBe = -sgn(s - m) * cjsjKH.getCj(sMj) * cjsjAB.getDsjDh(sMim) +
266 sgn(s - j) * cjsjKH.getSj(sMj) * cjsjAB.getDcjDh(sMim);
267 }
268 return dHmsdBe;
269 }
270
271
272
273
274
275 private int sgn(final int i) {
276 return (i < 0) ? -1 : 1;
277 }
278 }