LnsCoefficients.java
- /* Copyright 2002-2018 CS Systèmes d'Information
- * Licensed to CS Systèmes d'Information (CS) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * CS licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
- package org.orekit.propagation.semianalytical.dsst.utilities;
- import java.util.TreeMap;
- import org.orekit.propagation.semianalytical.dsst.utilities.CoefficientsFactory.NSKey;
- /** Compute the L<sub>n</sub><sup>s</sup>(γ).
- * <p>
- * The fomula used is: <br>
- * L<sub>n</sub><sup>s</sup>(γ) = ( R / a )<sup>n</sup>V<sub>ns</sub>Q<sup>ns</sup>(γ)
- * </p>
- * @author Lucian Barbulescu
- */
- public class LnsCoefficients {
- /** The coefficients L<sub>n</sub><sup>s</sup>(γ). */
- private final double[][] lns;
- /** The coefficients dL<sub>n</sub><sup>s</sup>(γ) / dγ. */
- private final double[][] dlns;
- /** Create a set of L<sub>n</sub><sup>s</sup>(γ) coefficients.
- *
- * @param nMax maximum value for n
- * @param sMax maximum value for s
- * @param Qns the Q<sup>ns</sup>(γ) coefficients
- * @param Vns the V<sub>ns</sub> coefficients
- * @param roa (R / a)
- */
- public LnsCoefficients(final int nMax, final int sMax,
- final double[][] Qns, final TreeMap<NSKey, Double> Vns, final double roa) {
- final int rows = nMax + 1;
- final int columns = sMax + 1;
- this.lns = new double[rows][columns];
- this.dlns = new double[rows][columns];
- final double[] roaPow = new double[rows];
- roaPow[0] = 1.;
- for (int i = 1; i <= nMax; i++) {
- roaPow[i] = roa * roaPow[i - 1];
- }
- for (int s = 0; s <= sMax; s++) {
- for (int n = s; n <= nMax; n++) {
- // if (n - s) is not even L<sub>n</sub><sup>s</sup>(γ) is 0
- if ((n - s) % 2 == 0) {
- final double coef = roaPow[n] * Vns.get(new NSKey(n, s));
- lns[n][s] = coef * Qns[n][s];
- if ( n == s) {
- // if n == s the derivative is 0 because Q[n][s+1] == Q[n][n+1] is 0
- dlns[n][s] = 0;
- } else {
- dlns[n][s] = coef * Qns[n][s + 1];
- }
- } else {
- lns[n][s] = 0.;
- dlns[n][s] = 0;
- }
- }
- }
- }
- /**Get the value of L<sub>n</sub><sup>s</sup>(γ).
- *
- * @param n n index
- * @param s s index
- * @return L<sub>n</sub><sup>s</sup>(γ)
- */
- public double getLns(final int n, final int s) {
- return lns[n][s];
- }
- /**Get the value of dL<sub>n</sub><sup>s</sup> / dγ (γ).
- *
- * @param n n index
- * @param s s index
- * @return L<sub>n</sub><sup>s</sup>(γ)
- */
- public double getdLnsdGamma(final int n, final int s) {
- return dlns[n][s];
- }
- }