1 /* Copyright 2002-2013 CS Systèmes d'Information 2 * Licensed to CS Systèmes d'Information (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 org.orekit.time.AbsoluteDate; 20 21 /** 22 * Interface used to provide spherical harmonics coefficients. 23 * <p/> 24 * Two interfaces are provided to distinguish between normalized and un-normalized 25 * coefficients: {@link NormalizedSphericalHarmonicsProvider} and {@link 26 * UnnormalizedSphericalHarmonicsProvider}. To account for gravity pertubations all 27 * providers are capable of providing the coefficients on specific dates, using the {@link 28 * NormalizedSphericalHarmonicsProvider#onDate(AbsoluteDate) onDate(AbsoluteDate)} 29 * methods. 30 * <p> 31 * Typical usage when evaluating the geopotential: 32 * <pre><code> 33 * NormalizedSphericalHarmonicsProvider provider = ...; 34 * NormalizedShpericalHarmonics coeffs = provider.onDate(date); 35 * double c20 = coeffs.getNormalizedCnm(2, 0); 36 * </code></pre> 37 * 38 * @author Luc Maisonobe 39 * @see GravityFieldFactory 40 * @since 6.0 41 */ 42 public interface SphericalHarmonicsProvider extends TideSystemProvider { 43 44 /** Get the maximal supported degree. 45 * @return maximal supported degree 46 */ 47 int getMaxDegree(); 48 49 /** Get the maximal supported order. 50 * @return maximal supported order 51 */ 52 int getMaxOrder(); 53 54 /** Get the central body attraction coefficient. 55 * @return mu (m<sup>3</sup>/s<sup>2</sup>) 56 */ 57 double getMu(); 58 59 /** Get the value of the central body reference radius. 60 * @return ae (m) 61 */ 62 double getAe(); 63 64 /** Get the reference date for the harmonics. 65 * @return reference date for the harmonics 66 */ 67 AbsoluteDate getReferenceDate(); 68 69 /** Get the offset from {@link #getReferenceDate reference date} for the harmonics. 70 * @param date current date 71 * @return offset between current date and reference date if there is a reference 72 * date, or 0.0 if there are no reference dates (i.e. if {@link #getReferenceDate} 73 * returns null) 74 */ 75 double getOffset(AbsoluteDate date); 76 77 }