1   /* Copyright 2002-2025 CS GROUP
2    * Licensed to CS GROUP (CS) under one or more
3    * contributor license agreements.  See the NOTICE file distributed with
4    * this work for additional information regarding copyright ownership.
5    * CS licenses this file to You under the Apache License, Version 2.0
6    * (the "License"); you may not use this file except in compliance with
7    * the License.  You may obtain a copy of the License at
8    *
9    *   http://www.apache.org/licenses/LICENSE-2.0
10   *
11   * Unless required by applicable law or agreed to in writing, software
12   * distributed under the License is distributed on an "AS IS" BASIS,
13   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14   * See the License for the specific language governing permissions and
15   * limitations under the License.
16   */
17  package org.orekit.propagation.analytical.tle;
18  
19  
20  /** Constants necessary to TLE propagation.
21   *
22   * This constants are used in the WGS-72 model, compliant with NORAD implementations.
23   *
24   * @author Fabien Maussion
25   */
26  public class TLEConstants {
27  
28      /** Constant 1.0 / 3.0. */
29      public static final double ONE_THIRD = 1.0 / 3.0;
30  
31      /** Constant 2.0 / 3.0. */
32      public static final double TWO_THIRD = 2.0 / 3.0;
33  
34      /** Earth radius in km. */
35      public static final double EARTH_RADIUS = 6378.135;
36  
37      /** Equatorial radius rescaled (1.0). */
38      public static final double NORMALIZED_EQUATORIAL_RADIUS = 1.0;
39  
40      /** Time units per julian day. */
41      public static final double MINUTES_PER_DAY = 1440.0;
42  
43      // Potential perturbation coefficients
44      /** XKE. */
45      public static final double XKE    = 0.0743669161331734132; // mu = 3.986008e+14;
46      /** XJ3. */
47      public static final double XJ3    = -2.53881e-6;
48      /** XJ2. */
49      public static final double XJ2    = 1.082616e-3;
50      /** XJ4. */
51      public static final double XJ4    = -1.65597e-6;
52      /** CK2. */
53      public static final double CK2    = 0.5 * XJ2 * NORMALIZED_EQUATORIAL_RADIUS * NORMALIZED_EQUATORIAL_RADIUS;
54      /** CK4. */
55      public static final double CK4    = -0.375 * XJ4 * NORMALIZED_EQUATORIAL_RADIUS * NORMALIZED_EQUATORIAL_RADIUS *
56                                          NORMALIZED_EQUATORIAL_RADIUS * NORMALIZED_EQUATORIAL_RADIUS;
57      /** S. */
58      public static final double S      = NORMALIZED_EQUATORIAL_RADIUS * (1. + 78. / EARTH_RADIUS);
59      /** QOMS2T. */
60      public static final double QOMS2T = 1.880279159015270643865e-9;
61      /** A3OVK2. */
62      public static final double A3OVK2 = -XJ3 / CK2 * NORMALIZED_EQUATORIAL_RADIUS * NORMALIZED_EQUATORIAL_RADIUS *
63                                          NORMALIZED_EQUATORIAL_RADIUS;
64  
65      // Deep SDP4 constants
66      /** ZNS. */
67      public static final double ZNS      = 1.19459E-5;
68      /** ZES. */
69      public static final double ZES      = 0.01675;
70      /** ZNL. */
71      public static final double ZNL      = 1.5835218E-4;
72      /** ZEL. */
73      public static final double ZEL      = 0.05490;
74      /** THDT. */
75      public static final double THDT     = 4.3752691E-3;
76      /** C1SS. */
77      public static final double C1SS     =  2.9864797E-6;
78      /** C1L. */
79      public static final double C1L      = 4.7968065E-7;
80  
81      /** ROOT22. */
82      public static final double ROOT22   = 1.7891679E-6;
83      /** ROOT32. */
84      public static final double ROOT32   = 3.7393792E-7;
85      /** ROOT44. */
86      public static final double ROOT44   = 7.3636953E-9;
87      /** ROOT52. */
88      public static final double ROOT52   = 1.1428639E-7;
89      /** ROOT54. */
90      public static final double ROOT54   = 2.1765803E-9;
91  
92      /** Q22. */
93      public static final double Q22      =  1.7891679E-6;
94      /** Q31. */
95      public static final double Q31      =  2.1460748E-6;
96      /** Q33. */
97      public static final double Q33      =  2.2123015E-7;
98  
99      /** C_FASX2. */
100     public static final double C_FASX2  =  0.99139134268488593;
101     /** S_FASX2. */
102     public static final double S_FASX2  =  0.13093206501640101;
103     /** C_2FASX4. */
104     public static final double C_2FASX4 =  0.87051638752972937;
105     /** S_2FASX4. */
106     public static final double S_2FASX4 = -0.49213943048915526;
107     /** C_3FASX6. */
108     public static final double C_3FASX6 =  0.43258117585763334;
109     /** S_3FASX6. */
110     public static final double S_3FASX6 =  0.90159499016666422;
111 
112     /** C_G22. */
113     public static final double C_G22    =  0.87051638752972937;
114     /** S_G22. */
115     public static final double S_G22    = -0.49213943048915526;
116     /** C_G32. */
117     public static final double C_G32    =  0.57972190187001149;
118     /** S_G32. */
119     public static final double S_G32    =  0.81481440616389245;
120     /** C_G44. */
121     public static final double C_G44    = -0.22866241528815548;
122     /** S_G44. */
123     public static final double S_G44    =  0.97350577801807991;
124     /** C_G52. */
125     public static final double C_G52    =  0.49684831179884198;
126     /** S_G52. */
127     public static final double S_G52    =  0.86783740128127729;
128     /** C_G54. */
129     public static final double C_G54    = -0.29695209575316894;
130     /** S_G54. */
131     public static final double S_G54    = -0.95489237761529999;
132 
133     /** Earth gravity coefficient in m³/s². */
134     public static final double MU = XKE * XKE * EARTH_RADIUS * EARTH_RADIUS * EARTH_RADIUS * (1000 * 1000 * 1000) / (60 * 60);
135 
136     /** Private constructor for a utility class.
137      */
138     private TLEConstants() {
139         // nothin to do
140     }
141 
142 }