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 org.hipparchus.util.FastMath;
20 import org.junit.Assert;
21 import org.junit.Before;
22 import org.junit.Test;
23 import org.orekit.Utils;
24 import org.orekit.forces.gravity.potential.GravityFieldFactory;
25 import org.orekit.forces.gravity.potential.TideSystem;
26 import org.orekit.forces.gravity.potential.UnnormalizedSphericalHarmonicsProvider;
27 import org.orekit.forces.gravity.potential.UnnormalizedSphericalHarmonicsProvider.UnnormalizedSphericalHarmonics;
28 import org.orekit.frames.Frame;
29 import org.orekit.frames.FramesFactory;
30 import org.orekit.orbits.KeplerianOrbit;
31 import org.orekit.orbits.Orbit;
32 import org.orekit.orbits.OrbitType;
33 import org.orekit.orbits.PositionAngle;
34 import org.orekit.propagation.analytical.BrouwerLyddanePropagator;
35 import org.orekit.time.AbsoluteDate;
36 import org.orekit.utils.ParameterDriver;
37
38 public class BrouwerLyddanePropagatorBuilderTest {
39
40 private Orbit orbit;
41 private UnnormalizedSphericalHarmonicsProvider provider;
42
43 @Test
44 public void doTestBuildPropagator() {
45
46 final double eps = 2.0e-10;
47
48
49 AbsoluteDate initDate = AbsoluteDate.J2000_EPOCH.shiftedBy(583.);
50 BrouwerLyddanePropagator propagator = new BrouwerLyddanePropagator(orbit, provider, BrouwerLyddanePropagator.M2);
51
52 final Orbit orbitWithPropagator = propagator.propagate(initDate.shiftedBy(60000)).getOrbit();
53
54
55 UnnormalizedSphericalHarmonics harmonics = provider.onDate(orbit.getDate());
56
57
58
59 BrouwerLyddanePropagatorBuilder builder = new BrouwerLyddanePropagatorBuilder(orbit,
60 provider.getAe(),
61 provider.getMu(),
62 provider.getTideSystem(),
63 harmonics.getUnnormalizedCnm(2, 0),
64 harmonics.getUnnormalizedCnm(3, 0),
65 harmonics.getUnnormalizedCnm(4, 0),
66 harmonics.getUnnormalizedCnm(5, 0),
67 OrbitType.KEPLERIAN,
68 PositionAngle.TRUE,
69 1.0,
70 BrouwerLyddanePropagator.M2);
71
72 final BrouwerLyddanePropagator prop = builder.buildPropagator(builder.getSelectedNormalizedParameters());
73 final Orbit orbitWithBuilder = prop.propagate(initDate.shiftedBy(60000)).getOrbit();
74
75
76 Assert.assertEquals(orbitWithPropagator.getA(), orbitWithBuilder.getA(), 1.e-1);
77 Assert.assertEquals(orbitWithPropagator.getEquinoctialEx(), orbitWithBuilder.getEquinoctialEx(), eps);
78 Assert.assertEquals(orbitWithPropagator.getEquinoctialEy(), orbitWithBuilder.getEquinoctialEy(), eps);
79 Assert.assertEquals(orbitWithPropagator.getHx(), orbitWithBuilder.getHx(), eps);
80 Assert.assertEquals(orbitWithPropagator.getHy(), orbitWithBuilder.getHy(), eps);
81 Assert.assertEquals(orbitWithPropagator.getLM(), orbitWithBuilder.getLM(), 8.0e-10);
82
83 }
84
85 @Test
86 public void doTestBuildPropagatorWithDrag() {
87
88
89 final double M2 = 1.0e-15;
90
91
92 UnnormalizedSphericalHarmonics harmonics = provider.onDate(orbit.getDate());
93
94
95 BrouwerLyddanePropagatorBuilder builder = new BrouwerLyddanePropagatorBuilder(orbit,
96 provider.getAe(),
97 provider.getMu(),
98 provider.getTideSystem(),
99 harmonics.getUnnormalizedCnm(2, 0),
100 harmonics.getUnnormalizedCnm(3, 0),
101 harmonics.getUnnormalizedCnm(4, 0),
102 harmonics.getUnnormalizedCnm(5, 0),
103 OrbitType.KEPLERIAN,
104 PositionAngle.TRUE,
105 1.0,
106 M2);
107
108
109 for (ParameterDriver driver : builder.getPropagationParametersDrivers().getDrivers()) {
110 if (BrouwerLyddanePropagator.M2_NAME.equals(driver.getName())) {
111 driver.setSelected(true);
112 }
113 }
114
115
116 final BrouwerLyddanePropagator prop = builder.buildPropagator(builder.getSelectedNormalizedParameters());
117
118
119 Assert.assertEquals(M2, prop.getM2(), Double.MIN_VALUE);
120 Assert.assertTrue(prop.getParametersDrivers().get(0).isSelected());
121
122 }
123
124 @Before
125 public void setUp() {
126 Utils.setDataRoot("regular-data");
127
128 AbsoluteDate initDate = AbsoluteDate.J2000_EPOCH.shiftedBy(583.);
129 final Frame inertialFrame = FramesFactory.getEME2000();
130
131
132 double mu = 3.9860047e14;
133 double ae = 6.378137e6;
134 double[][] cnm = new double[][] {
135 { 0 }, { 0 }, { -1.08263e-3 }, { 2.54e-6 }, { 1.62e-6 }, { 2.3e-7 }
136 };
137 double[][] snm = new double[][] {
138 { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }
139 };
140 provider = GravityFieldFactory.getUnnormalizedProvider(ae, mu, TideSystem.UNKNOWN, cnm, snm);
141
142
143 final double a = 24396159;
144 final double e = 0.01;
145 final double i = FastMath.toRadians(47.);
146 final double omega = FastMath.toRadians(180);
147 final double raan = FastMath.toRadians(261);
148 final double lM = 0;
149 orbit = new KeplerianOrbit(a, e, i, omega, raan, lM, PositionAngle.TRUE, inertialFrame, initDate, mu);
150 }
151
152 }