/** * Build a set of coefficients. * * @param date the current date * @param m m index * @param j j index */ private void buildCoefficients(final AbsoluteDate date, final int m, final int j) { // Create local arrays final double[] currentCijm = new double[] {0., 0., 0., 0., 0., 0.}; final double[] currentSijm = new double[] {0., 0., 0., 0., 0., 0.}; // compute the term 1 / (jn - mθ<sup>.</sup>) final double oojnmt = 1. / (j * meanMotion - m * centralBodyRotationRate); // initialise the coeficients for (int i = 0; i < 6; i++) { currentCijm[i] = -cjsjFourier.getSijm(i, j, m); currentSijm[i] = cjsjFourier.getCijm(i, j, m); } // Add the separate part for δ<sub>6i</sub> currentCijm[5] += tnota * oojnmt * cjsjFourier.getCijm(0, j, m); currentSijm[5] += tnota * oojnmt * cjsjFourier.getSijm(0, j, m); // Multiply by 1 / (jn - mθ<sup>.</sup>) for (int i = 0; i < 6; i++) { currentCijm[i] *= oojnmt; currentSijm[i] *= oojnmt; } // Add the coefficients to the interpolation grid for (int i = 0; i < 6; i++) { cijm[m][j + jMax][i].addGridPoint(date, currentCijm[i]); sijm[m][j + jMax][i].addGridPoint(date, currentSijm[i]); } }
/** * Compute the short periodic coefficients. * * @param date the current date * @throws OrekitException if an error occurs */ public void computeCoefficients(final AbsoluteDate date) throws OrekitException { // Compute only if there is at least one non-resonant tesseral if (!nonResOrders.isEmpty() || mDailiesOnly) { // Generate the fourrier coefficients cjsjFourier.generateCoefficients(date); // the coefficient 3n / 2a tnota = 1.5 * meanMotion / a; // build the mDaily coefficients for (int m = 1; m <= maxOrderMdailyTesseralSP; m++) { // build the coefficients buildCoefficients(date, m, 0); } if (!mDailiesOnly) { // generate the other coefficients, if required for (int m : nonResOrders.keySet()) { final List<Integer> listJ = nonResOrders.get(m); for (int j : listJ) { // build the coefficients buildCoefficients(date, m, j); } } } } }