1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.orekit.models.earth.troposphere;
18
19 import org.hipparchus.CalculusFieldElement;
20 import org.hipparchus.util.FastMath;
21 import org.hipparchus.util.MathArrays;
22 import org.orekit.bodies.FieldGeodeticPoint;
23 import org.orekit.bodies.GeodeticPoint;
24 import org.orekit.models.earth.weather.FieldPressureTemperatureHumidity;
25 import org.orekit.models.earth.weather.PressureTemperatureHumidity;
26 import org.orekit.time.AbsoluteDate;
27 import org.orekit.time.FieldAbsoluteDate;
28 import org.orekit.utils.FieldTrackingCoordinates;
29 import org.orekit.utils.TrackingCoordinates;
30
31
32
33
34
35
36
37
38 public class AbstractChaoMappingFunction implements TroposphereMappingFunction {
39
40
41 private final double ad;
42
43
44 private final double bd;
45
46
47 private final double aw;
48
49
50 private final double bw;
51
52
53
54
55
56
57
58 protected AbstractChaoMappingFunction(final double ad, final double bd, final double aw, final double bw) {
59 this.ad = ad;
60 this.bd = bd;
61 this.aw = aw;
62 this.bw = bw;
63 }
64
65
66 @Override
67 public double[] mappingFactors(final TrackingCoordinates trackingCoordinates, final GeodeticPoint point,
68 final PressureTemperatureHumidity weather,
69 final AbsoluteDate date) {
70 final double sinE = FastMath.sin(trackingCoordinates.getElevation());
71 final double tanE = FastMath.tan(trackingCoordinates.getElevation());
72 return new double[] {
73 1 / (sinE + ad / (tanE + bd)),
74 1 / (sinE + aw / (tanE + bw))
75 };
76 }
77
78
79 @Override
80 public <T extends CalculusFieldElement<T>> T[] mappingFactors(final FieldTrackingCoordinates<T> trackingCoordinates,
81 final FieldGeodeticPoint<T> point,
82 final FieldPressureTemperatureHumidity<T> weather,
83 final FieldAbsoluteDate<T> date) {
84 final T sinE = FastMath.sin(trackingCoordinates.getElevation());
85 final T tanE = FastMath.tan(trackingCoordinates.getElevation());
86 final T[] mapping = MathArrays.buildArray(date.getField(), 2);
87 mapping[0] = sinE.add(tanE.add(bd).reciprocal().multiply(ad)).reciprocal();
88 mapping[1] = sinE.add(tanE.add(bw).reciprocal().multiply(aw)).reciprocal();
89 return mapping;
90 }
91
92 }