1   /* Contributed in the public domain.
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.forces.gravity.potential;
18  
19  import java.util.List;
20  
21  import org.orekit.time.AbsoluteDate;
22  
23  /**
24   * Defines methods for obtaining gravity fields.
25   *
26   * @author Evan Ward
27   * @author Fabien Maussion
28   * @author Pascal Parraud
29   * @author Luc Maisonobe
30   * @see GravityFieldFactory
31   * @since 10.1
32   */
33  public interface GravityFields {
34  
35      /** Get a constant gravity field normalized coefficients provider
36       * frozen at a given epoch.
37       *
38       * @param degree maximal degree
39       * @param order maximal order
40       * @param freezingDate freezing epoch
41       * @return a gravity field coefficients provider containing already loaded data
42       * @since 12.0
43       * @see #getNormalizedProvider(int, int)
44       */
45      NormalizedSphericalHarmonicsProvider getConstantNormalizedProvider(int degree, int order,
46                                                                         AbsoluteDate freezingDate);
47  
48      /** Get a gravity field normalized coefficients provider.
49       *
50       * @param degree maximal degree
51       * @param order maximal order
52       * @return a gravity field coefficients provider containing already loaded data
53       * @since 6.0
54       * @see #getConstantNormalizedProvider(int, int, AbsoluteDate)
55       */
56      NormalizedSphericalHarmonicsProvider getNormalizedProvider(int degree,
57                                                                 int order);
58  
59      /** Get a constant gravity field unnormalized coefficients provider
60       * frozen at a given epoch.
61       *
62       * @param degree maximal degree
63       * @param order maximal order
64       * @param freezingDate freezing epoch
65       * @return a gravity field coefficients provider containing already loaded data
66       * @since 12.0
67       * @see #getUnnormalizedProvider(int, int)
68       */
69      UnnormalizedSphericalHarmonicsProvider getConstantUnnormalizedProvider(int degree, int order,
70                                                                             AbsoluteDate freezingDate);
71  
72      /** Get a gravity field unnormalized coefficients provider.
73       *
74       * @param degree maximal degree
75       * @param order maximal order
76       * @return a gravity field coefficients provider containing already loaded data
77       * @since 6.0
78       * @see #getConstantUnnormalizedProvider(int, int, AbsoluteDate)
79       */
80      UnnormalizedSphericalHarmonicsProvider getUnnormalizedProvider(int degree,
81                                                                     int order);
82  
83      /** Get the ocean tides waves.
84       *
85       * <p><span style="color:red">
86       * WARNING: as of 2013-11-17, there seem to be an inconsistency when loading
87       * one or the other file, for wave Sa (Doodson number 56.554) and P1 (Doodson
88       * number 163.555). The sign of the coefficients are different. We think the
89       * problem lies in the input files from IERS and not in the conversion (which
90       * works for all other waves), but cannot be sure. For this reason, ocean
91       * tides are still considered experimental at this date.
92       * </span></p>
93       * @param degree maximal degree
94       * @param order maximal order
95       * @return list of tides waves containing already loaded data
96       * @since 6.1
97       */
98      List<OceanTidesWave> getOceanTidesWaves(int degree, int order);
99  }