1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.orekit.forces.gravity.potential;
18
19 import org.hipparchus.util.FastMath;
20 import org.orekit.time.AbsoluteDate;
21
22
23
24
25
26 class ConstantSphericalHarmonics implements RawSphericalHarmonicsProvider {
27
28
29 private final double ae;
30
31
32 private final double mu;
33
34
35 private final TideSystem tideSystem;
36
37
38
39
40 private final Flattener flattener;
41
42
43 private final double[] rawC;
44
45
46 private final double[] rawS;
47
48
49
50
51
52
53
54
55
56
57 ConstantSphericalHarmonics(final double ae, final double mu, final TideSystem tideSystem,
58 final Flattener flattener, final double[] rawC, final double[] rawS) {
59 this.ae = ae;
60 this.mu = mu;
61 this.tideSystem = tideSystem;
62 this.flattener = flattener;
63 this.rawC = rawC;
64 this.rawS = rawS;
65 }
66
67
68
69
70
71
72 ConstantSphericalHarmonics(final AbsoluteDate freezingDate, final RawSphericalHarmonicsProvider raw) {
73
74 this.ae = raw.getAe();
75 this.mu = raw.getMu();
76 this.tideSystem = raw.getTideSystem();
77 this.flattener = new Flattener(raw.getMaxDegree(), raw.getMaxOrder());
78 this.rawC = new double[flattener.arraySize()];
79 this.rawS = new double[flattener.arraySize()];
80
81
82 final RawSphericalHarmonics frozen = raw.onDate(freezingDate);
83 for (int n = 0; n <= flattener.getDegree(); ++n) {
84 for (int m = 0; m <= FastMath.min(n, flattener.getOrder()); ++m) {
85 final int index = flattener.index(n, m);
86 rawC[index] = frozen.getRawCnm(n, m);
87 rawS[index] = frozen.getRawSnm(n, m);
88 }
89 }
90
91 }
92
93
94 public int getMaxDegree() {
95 return flattener.getDegree();
96 }
97
98
99 public int getMaxOrder() {
100 return flattener.getOrder();
101 }
102
103
104 public double getMu() {
105 return mu;
106 }
107
108
109 public double getAe() {
110 return ae;
111 }
112
113
114
115
116
117
118 public AbsoluteDate getReferenceDate() {
119 return null;
120 }
121
122
123 public TideSystem getTideSystem() {
124 return tideSystem;
125 }
126
127 @Override
128 public RawSphericalHarmonics onDate(final AbsoluteDate date) {
129 return new RawSphericalHarmonics() {
130
131 @Override
132 public AbsoluteDate getDate() {
133 return date;
134 }
135
136
137 public double getRawCnm(final int n, final int m) {
138 return rawC[flattener.index(n, m)];
139 }
140
141
142 public double getRawSnm(final int n, final int m) {
143 return rawS[flattener.index(n, m)];
144 }
145
146 };
147 }
148
149 }
150