1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.orekit.propagation.conversion;
18
19 import static org.orekit.propagation.conversion.AbstractPropagatorBuilderTest.assertPropagatorBuilderIsACopy;
20
21 import org.hipparchus.geometry.euclidean.threed.Vector3D;
22 import org.hipparchus.util.FastMath;
23 import org.junit.jupiter.api.Assertions;
24 import org.junit.jupiter.api.BeforeEach;
25 import org.junit.jupiter.api.Test;
26 import org.orekit.Utils;
27 import org.orekit.forces.gravity.potential.GravityFieldFactory;
28 import org.orekit.forces.gravity.potential.TideSystem;
29 import org.orekit.forces.gravity.potential.UnnormalizedSphericalHarmonicsProvider;
30 import org.orekit.forces.gravity.potential.UnnormalizedSphericalHarmonicsProvider.UnnormalizedSphericalHarmonics;
31 import org.orekit.frames.Frame;
32 import org.orekit.frames.FramesFactory;
33 import org.orekit.orbits.CartesianOrbit;
34 import org.orekit.orbits.KeplerianOrbit;
35 import org.orekit.orbits.Orbit;
36 import org.orekit.orbits.OrbitType;
37 import org.orekit.orbits.PositionAngleType;
38 import org.orekit.propagation.Propagator;
39 import org.orekit.propagation.analytical.BrouwerLyddanePropagator;
40 import org.orekit.time.AbsoluteDate;
41 import org.orekit.utils.Constants;
42 import org.orekit.utils.PVCoordinates;
43 import org.orekit.utils.ParameterDriver;
44
45 public class BrouwerLyddanePropagatorBuilderTest {
46
47 private Orbit orbit;
48 private UnnormalizedSphericalHarmonicsProvider provider;
49
50 @Test
51 public void doTestBuildPropagator() {
52
53 final double eps = 2.0e-10;
54
55
56 AbsoluteDate initDate = AbsoluteDate.J2000_EPOCH.shiftedBy(583.);
57 BrouwerLyddanePropagator propagator = new BrouwerLyddanePropagator(orbit, provider, BrouwerLyddanePropagator.M2);
58
59 final Orbit orbitWithPropagator = propagator.propagate(initDate.shiftedBy(60000)).getOrbit();
60
61
62 UnnormalizedSphericalHarmonics harmonics = provider.onDate(orbit.getDate());
63
64
65
66 BrouwerLyddanePropagatorBuilder builder = new BrouwerLyddanePropagatorBuilder(orbit,
67 provider.getAe(),
68 provider.getMu(),
69 provider.getTideSystem(),
70 harmonics.getUnnormalizedCnm(2, 0),
71 harmonics.getUnnormalizedCnm(3, 0),
72 harmonics.getUnnormalizedCnm(4, 0),
73 harmonics.getUnnormalizedCnm(5, 0),
74 OrbitType.KEPLERIAN,
75 PositionAngleType.TRUE,
76 1.0,
77 BrouwerLyddanePropagator.M2);
78
79 final Propagator prop = builder.buildPropagator();
80 final Orbit orbitWithBuilder = prop.propagate(initDate.shiftedBy(60000)).getOrbit();
81
82
83 Assertions.assertEquals(orbitWithPropagator.getA(), orbitWithBuilder.getA(), 1.e-1);
84 Assertions.assertEquals(orbitWithPropagator.getEquinoctialEx(), orbitWithBuilder.getEquinoctialEx(), eps);
85 Assertions.assertEquals(orbitWithPropagator.getEquinoctialEy(), orbitWithBuilder.getEquinoctialEy(), eps);
86 Assertions.assertEquals(orbitWithPropagator.getHx(), orbitWithBuilder.getHx(), eps);
87 Assertions.assertEquals(orbitWithPropagator.getHy(), orbitWithBuilder.getHy(), eps);
88 Assertions.assertEquals(orbitWithPropagator.getLM(), orbitWithBuilder.getLM(), 8.0e-10);
89
90 }
91
92 @Test
93 public void doTestBuildPropagatorWithDrag() {
94
95
96 final double M2 = 1.0e-15;
97
98
99 UnnormalizedSphericalHarmonics harmonics = provider.onDate(orbit.getDate());
100
101
102 BrouwerLyddanePropagatorBuilder builder = new BrouwerLyddanePropagatorBuilder(orbit,
103 provider.getAe(),
104 provider.getMu(),
105 provider.getTideSystem(),
106 harmonics.getUnnormalizedCnm(2, 0),
107 harmonics.getUnnormalizedCnm(3, 0),
108 harmonics.getUnnormalizedCnm(4, 0),
109 harmonics.getUnnormalizedCnm(5, 0),
110 OrbitType.KEPLERIAN,
111 PositionAngleType.TRUE,
112 1.0,
113 M2);
114
115
116 for (ParameterDriver driver : builder.getPropagationParametersDrivers().getDrivers()) {
117 if (BrouwerLyddanePropagator.M2_NAME.equals(driver.getName())) {
118 driver.setSelected(true);
119 }
120 }
121
122
123 final BrouwerLyddanePropagator prop = (BrouwerLyddanePropagator) builder.buildPropagator();
124
125
126 Assertions.assertEquals(M2, prop.getM2(), Double.MIN_VALUE);
127 Assertions.assertTrue(prop.getParametersDrivers().get(0).isSelected());
128
129 }
130
131 @BeforeEach
132 public void setUp() {
133 Utils.setDataRoot("potential:regular-data");
134
135 AbsoluteDate initDate = AbsoluteDate.J2000_EPOCH.shiftedBy(583.);
136 final Frame inertialFrame = FramesFactory.getEME2000();
137
138
139 double mu = 3.9860047e14;
140 double ae = 6.378137e6;
141 double[][] cnm = new double[][] {
142 { 0 }, { 0 }, { -1.08263e-3 }, { 2.54e-6 }, { 1.62e-6 }, { 2.3e-7 }
143 };
144 double[][] snm = new double[][] {
145 { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }
146 };
147 provider = GravityFieldFactory.getUnnormalizedProvider(ae, mu, TideSystem.UNKNOWN, cnm, snm);
148
149
150 final double a = 24396159;
151 final double e = 0.01;
152 final double i = FastMath.toRadians(47.);
153 final double omega = FastMath.toRadians(180);
154 final double raan = FastMath.toRadians(261);
155 final double lM = 0;
156 orbit = new KeplerianOrbit(a, e, i, omega, raan, lM, PositionAngleType.TRUE, inertialFrame, initDate, mu);
157 }
158
159 @Test
160 void testClone() {
161
162
163 final Orbit orbit = new CartesianOrbit(new PVCoordinates(
164 new Vector3D(Constants.EIGEN5C_EARTH_EQUATORIAL_RADIUS + 400000, 0, 0),
165 new Vector3D(10, 7668.6, 3)), FramesFactory.getGCRF(),
166 new AbsoluteDate(), Constants.EIGEN5C_EARTH_MU);
167 final UnnormalizedSphericalHarmonicsProvider harmonicsProvider = GravityFieldFactory.getUnnormalizedProvider(5, 0);
168
169 final BrouwerLyddanePropagatorBuilder builder = new BrouwerLyddanePropagatorBuilder(orbit, harmonicsProvider,
170 PositionAngleType.MEAN, 10.0, 1.0e-8);
171 builder.getPropagationParametersDrivers().getDrivers().forEach(driver -> driver.setSelected(true));
172
173
174 final BrouwerLyddanePropagatorBuilder copyBuilder = (BrouwerLyddanePropagatorBuilder) builder.clone();
175
176
177 assertPropagatorBuilderIsACopy(builder, copyBuilder);
178 Assertions.assertEquals(builder.getM2Value(), copyBuilder.getM2Value());
179 Assertions.assertTrue(builder.getPropagationParametersDrivers().getDrivers().get(0).isSelected());
180 Assertions.assertTrue(copyBuilder.getPropagationParametersDrivers().getDrivers().get(0).isSelected());
181 }
182
183 }