1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.orekit.models.earth.displacement;
18
19 import org.orekit.data.BodiesElements;
20
21
22
23
24
25
26 public class Tide {
27
28
29 public static final Tide M2 = new Tide(255555);
30
31
32 public static final Tide S2 = new Tide(273555);
33
34
35 public static final Tide N2 = new Tide(245655);
36
37
38 public static final Tide K2 = new Tide(275555);
39
40
41 public static final Tide K1 = new Tide(165555);
42
43
44 public static final Tide O1 = new Tide(145555);
45
46
47 public static final Tide P1 = new Tide(163555);
48
49
50 public static final Tide Q1 = new Tide(135655);
51
52
53 public static final Tide MF = new Tide(75555);
54
55
56 public static final Tide MM = new Tide(65455);
57
58
59 public static final Tide SSA = new Tide(57555);
60
61
62 private final int doodsonNumber;
63
64
65 private final int[] doodsonMultipliers;
66
67
68 private final int[] delaunayMultipliers;
69
70
71
72
73
74
75
76
77
78 public Tide(final int cTau, final int cS, final int cH, final int cP, final int cNprime, final int cPs) {
79 doodsonNumber = doodsonMultipliersToDoodsonNumber(cTau, cS, cH, cP, cNprime, cPs);
80 doodsonMultipliers = new int[] {
81 cTau, cS, cH, cP, cNprime, cPs
82 };
83 this.delaunayMultipliers = doodsonMultipliersToDelaunayMultipliers(doodsonMultipliers);
84 }
85
86
87
88
89 public Tide(final int doodsonNumber) {
90 this.doodsonNumber = doodsonNumber;
91 this.doodsonMultipliers = doodsonNumberToDoodsonMultipliers(doodsonNumber);
92 this.delaunayMultipliers = doodsonMultipliersToDelaunayMultipliers(doodsonMultipliers);
93 }
94
95
96
97
98
99 private static int[] doodsonNumberToDoodsonMultipliers(final int doodsonNumber) {
100
101 return new int[] {
102 (doodsonNumber / 100000) % 10,
103 ((doodsonNumber / 10000) % 10) - 5,
104 ((doodsonNumber / 1000) % 10) - 5,
105 ((doodsonNumber / 100) % 10) - 5,
106 ((doodsonNumber / 10) % 10) - 5,
107 (doodsonNumber % 10) - 5
108 };
109
110 }
111
112
113
114
115
116
117
118
119
120
121 private static int doodsonMultipliersToDoodsonNumber(final int cTau, final int cS, final int cH,
122 final int cP, final int cNprime, final int cPs) {
123 return ((((cTau * 10 + (cS + 5)) * 10 + (cH + 5)) * 10 + (cP + 5)) * 10 + (cNprime + 5)) * 10 + (cPs + 5);
124 }
125
126
127
128
129
130 private static int[] doodsonMultipliersToDelaunayMultipliers(final int[] dom) {
131 return new int[] {
132 dom[3],
133 dom[5],
134 dom[0] - dom[1] - dom[2] - dom[3] - dom[5],
135 dom[2] + dom[5],
136 dom[0] - dom[1] - dom[2] - dom[3] + dom[4] - dom[5]
137 };
138 }
139
140
141
142
143
144
145
146
147
148 public int[] getDelaunayMultipliers() {
149 return delaunayMultipliers.clone();
150 }
151
152
153
154
155 public int[] getDoodsonMultipliers() {
156 return doodsonMultipliers.clone();
157 }
158
159
160
161
162 public int getDoodsonNumber() {
163 return doodsonNumber;
164 }
165
166
167
168
169
170
171
172
173 public int getTauMultiplier() {
174 return doodsonMultipliers[0];
175 }
176
177
178
179
180
181 public double getPhase(final BodiesElements elements) {
182 return doodsonMultipliers[0] * elements.getGamma() -
183 delaunayMultipliers[0] * elements.getL() -
184 delaunayMultipliers[1] * elements.getLPrime() -
185 delaunayMultipliers[2] * elements.getF() -
186 delaunayMultipliers[3] * elements.getD() -
187 delaunayMultipliers[4] * elements.getOmega();
188 }
189
190
191
192
193
194 public double getRate(final BodiesElements elements) {
195 return doodsonMultipliers[0] * elements.getGammaDot() -
196 delaunayMultipliers[0] * elements.getLDot() -
197 delaunayMultipliers[1] * elements.getLPrimeDot() -
198 delaunayMultipliers[2] * elements.getFDot() -
199 delaunayMultipliers[3] * elements.getDDot() -
200 delaunayMultipliers[4] * elements.getOmegaDot();
201 }
202
203 @Override
204 public boolean equals(final Object object) {
205 if (object instanceof Tide) {
206 return doodsonNumber == ((Tide) object).doodsonNumber;
207 }
208 return false;
209 }
210
211 @Override
212 public int hashCode() {
213 return doodsonNumber;
214 }
215
216 }
217