GlobalPressureTemperatureModel.java

  1. /* Copyright 2002-2019 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.models.earth;

  18. import org.hipparchus.util.CombinatoricsUtils;
  19. import org.hipparchus.util.FastMath;
  20. import org.orekit.forces.gravity.potential.GravityFieldFactory;
  21. import org.orekit.frames.Frame;
  22. import org.orekit.time.AbsoluteDate;
  23. import org.orekit.time.DateTimeComponents;
  24. import org.orekit.time.TimeScalesFactory;

  25. /** The Global Pressure and Temperature model.
  26.  * This model is an empirical model that provides the temperature and the pressure depending
  27.  * the latitude and the longitude of the station.
  28.  * <p>
  29.  * The Global Pressure and Temperature model is based on spherical harmonics up
  30.  * to degree and order of 9. The residual values ​​of this model can reach 20 hPa
  31.  * for pressure and 10 ° C for temperature. They are significant for higher latitudes and
  32.  * small near the equator (Böhm, 2007)
  33.  * </p>
  34.  *
  35.  * @see J. Böhm, R. Heinkelmann, and H. Schuh (2007),
  36.  * Short Note: A global model of pressure and temperature for geodetic applications. J Geod,
  37.  * doi:10.1007/s00190-007-0135-3.
  38.  *
  39.  * @author Bryan Cazabonne
  40.  *
  41.  */
  42. public class GlobalPressureTemperatureModel implements WeatherModel {

  43.     /** Temperature gradient (°C/m). */
  44.     private static final double TEMPERATURE_GRADIENT = -6.5e-3;

  45.     /** Geodetic latitude, in radians. */
  46.     private final double latitude;

  47.     /** Geodetic longitude, in radians. */
  48.     private final double longitude;

  49.     /** Temperature site, in kelvins. */
  50.     private double temperature;

  51.     /** Pressure site, in hPa. */
  52.     private double pressure;

  53.     /** Body frame related to body shape. */
  54.     private final Frame bodyFrame;

  55.     /** Build a new instance.
  56.      * <p>
  57.      * At the initialization the values of the pressure and the temperature are set to NaN.
  58.      * The user has to call {@link #weatherParameters(double, AbsoluteDate)} method before using
  59.      * the values of the pressure and the temperature.
  60.      * </p>
  61.      * @param latitude geodetic latitude, in radians
  62.      * @param longitude geodetic longitude, in radians
  63.      * @param bodyFrame the frame to attach to the ellipsoid. The origin is at
  64.      *                  the center of mass, the z axis is the minor axis.
  65.      */
  66.     public GlobalPressureTemperatureModel(final double latitude, final double longitude, final Frame bodyFrame) {
  67.         this.bodyFrame   = bodyFrame;
  68.         this.latitude    = latitude;
  69.         this.longitude   = longitude;
  70.         this.temperature = Double.NaN;
  71.         this.pressure    = Double.NaN;
  72.     }

  73.     /** Get the atmospheric temperature of the station depending its position.
  74.      * @return the temperature in kelvins
  75.      */
  76.     public double getTemperature() {
  77.         return temperature;
  78.     }

  79.     /** Get the atmospheric pressure of the station depending its position.
  80.      * @return the pressure in hPa
  81.      */
  82.     public double getPressure() {
  83.         return pressure;
  84.     }

  85.     @Override
  86.     public void weatherParameters(final double height, final AbsoluteDate date) {

  87.         // Day of year computation
  88.         final DateTimeComponents dtc = date.getComponents(TimeScalesFactory.getUTC());
  89.         final int dofyear = dtc.getDate().getDayOfYear();

  90.         // Reference day: 28 January 1980 (Niell, 1996)
  91.         final int t0 = 28;
  92.         final double coef = ((dofyear + 1 - t0) / 365.25) * 2 * FastMath.PI;
  93.         final double cosCoef = FastMath.cos(coef);

  94.         // Compute Legendre Polynomials Pnm(sin(phi))
  95.         final int degree = 9;
  96.         final int order  = 9;
  97.         final LegendrePolynomials p = new LegendrePolynomials(degree, order);

  98.         // Geoid for height computation
  99.         final Geoid geoid = new Geoid(GravityFieldFactory.getNormalizedProvider(degree, order),
  100.                                       ReferenceEllipsoid.getWgs84(bodyFrame));

  101.         // Corrected height
  102.         final double correctedheight = FastMath.max(0.0, height - geoid.getUndulation(latitude, longitude, date));

  103.         // Eq. 4 (Ref)
  104.         double meanT0      = 0.0;
  105.         double amplitudeT0 = 0.0;
  106.         double meanP0      = 0.0;
  107.         double amplitudeP0 = 0.0;
  108.         final ABCoefficients abCoef = new ABCoefficients();
  109.         int j = 0;
  110.         for (int n = 0; n <= 9; n++) {
  111.             for (int m = 0; m <= n; m++) {
  112.                 final double pCosmLambda = p.getPnm(n, m) * FastMath.cos(m * longitude);
  113.                 final double pSinmLambda = p.getPnm(n, m) * FastMath.sin(m * longitude);

  114.                 meanT0      = meanT0 +
  115.                                 (abCoef.getAnmTemperatureMean(j) * pCosmLambda + abCoef.getBnmTemperatureMean(j) * pSinmLambda);
  116.                 amplitudeT0 = amplitudeT0 +
  117.                                 (abCoef.getAnmTemperatureAmpl(j) * pCosmLambda + abCoef.getBnmTemperatureAmpl(j) * pSinmLambda);
  118.                 meanP0      = meanP0 +
  119.                                 (abCoef.getAnmPressureMean(j) * pCosmLambda + abCoef.getBnmPressureMean(j) * pSinmLambda);
  120.                 amplitudeP0 = amplitudeP0 +
  121.                                 (abCoef.getAnmPressureAmpl(j) * pCosmLambda + abCoef.getBnmPressureAmpl(j) * pSinmLambda);

  122.                 j = j + 1;
  123.             }
  124.         }

  125.         // Eq. 3 (Ref)
  126.         final double temp0 = meanT0 + amplitudeT0 * cosCoef;
  127.         final double pres0 = meanP0 + amplitudeP0 * cosCoef;

  128.         // Compute pressure and temperature Eq. 1 and 2 (Ref)
  129.         final double degrees = temp0 + TEMPERATURE_GRADIENT * correctedheight;
  130.         this.temperature = degrees + 273.15;
  131.         this.pressure    = pres0 * FastMath.pow(1.0 - correctedheight * 0.0000226, 5.225);
  132.     }

  133.     /** Computes the P<sub>nm</sub>(sin(&#934)) coefficients of Eq. 4 (Ref).
  134.      *  The computation of the Legendre polynomials is performed following:
  135.      *  Heiskanen and Moritz, Physical Geodesy, 1967, eq. 1-62
  136.      */
  137.     private class LegendrePolynomials {

  138.         /** Array for the Legendre polynomials. */
  139.         private double[][] pCoef;

  140.         /** Create Legendre polynomials for the given degree and order.
  141.          * @param degree degree of the spherical harmonics
  142.          * @param order order of the spherical harmonics
  143.          */
  144.         LegendrePolynomials(final int degree, final int order) {

  145.             this.pCoef = new double[degree + 1][order + 1];

  146.             final double t  = FastMath.sin(latitude);
  147.             final double t2 = t * t;

  148.             for (int n = 0; n <= degree; n++) {

  149.                 // m shall be <= n (Heiskanen and Moritz, 1967, pp 21)
  150.                 for (int m = 0; m <= FastMath.min(n, order); m++) {

  151.                     // r = int((n - m) / 2)
  152.                     final int r = (int) (n - m) / 2;
  153.                     double sum = 0.;
  154.                     for (int k = 0; k <= r; k++) {
  155.                         final double term = FastMath.pow(-1.0, k) * CombinatoricsUtils.factorialDouble(2 * n - 2 * k) /
  156.                                         (CombinatoricsUtils.factorialDouble(k) * CombinatoricsUtils.factorialDouble(n - k) *
  157.                                          CombinatoricsUtils.factorialDouble(n - m - 2 * k)) *
  158.                                          FastMath.pow(t, n - m - 2 * k);
  159.                         sum = sum + term;
  160.                     }

  161.                     pCoef[n][m] = FastMath.pow(2, -n) * FastMath.pow(1.0 - t2, 0.5 * m) * sum;

  162.                 }

  163.             }

  164.         }

  165.         /** Return the coefficient P<sub>nm</sub>.
  166.          * @param n index
  167.          * @param m index
  168.          * @return The coefficient P<sub>nm</sub>
  169.          */
  170.         public double getPnm(final int n, final int m) {
  171.             return pCoef[n][m];
  172.         }

  173.     }

  174.     private static class ABCoefficients {

  175.         /** Mean A<sub>nm</sub> coefficients for the pressure. */
  176.         private static final double[] A_PRESSURE_MEAN = {
  177.             1.0108e+03,
  178.             8.4886e+00,
  179.             1.4799e+00,
  180.             -1.3897e+01,
  181.             3.7516e-03,
  182.             -1.4936e-01,
  183.             1.2232e+01,
  184.             -7.6615e-01,
  185.             -6.7699e-02,
  186.             8.1002e-03,
  187.             -1.5874e+01,
  188.             3.6614e-01,
  189.             -6.7807e-02,
  190.             -3.6309e-03,
  191.             5.9966e-04,
  192.             4.8163e+00,
  193.             -3.7363e-01,
  194.             -7.2071e-02,
  195.             1.9998e-03,
  196.             -6.2385e-04,
  197.             -3.7916e-04,
  198.             4.7609e+00,
  199.             -3.9534e-01,
  200.             8.6667e-03,
  201.             1.1569e-02,
  202.             1.1441e-03,
  203.             -1.4193e-04,
  204.             -8.5723e-05,
  205.             6.5008e-01,
  206.             -5.0889e-01,
  207.             -1.5754e-02,
  208.             -2.8305e-03,
  209.             5.7458e-04,
  210.             3.2577e-05,
  211.             -9.6052e-06,
  212.             -2.7974e-06,
  213.             1.3530e+00,
  214.             -2.7271e-01,
  215.             -3.0276e-04,
  216.             3.6286e-03,
  217.             -2.0398e-04,
  218.             1.5846e-05,
  219.             -7.7787e-06,
  220.             1.1210e-06,
  221.             9.9020e-08,
  222.             5.5046e-01,
  223.             -2.7312e-01,
  224.             3.2532e-03,
  225.             -2.4277e-03,
  226.             1.1596e-04,
  227.             2.6421e-07,
  228.             -1.3263e-06,
  229.             2.7322e-07,
  230.             1.4058e-07,
  231.             4.9414e-09
  232.         };

  233.         /** Mean B<sub>nm</sub> coefficients for the pressure. */
  234.         private static final double[] B_PRESSURE_MEAN = {
  235.             0.0000e+00,
  236.             0.0000e+00,
  237.             -1.2878e+00,
  238.             0.0000e+00,
  239.             7.0444e-01,
  240.             3.3222e-01,
  241.             0.0000e+00,
  242.             -2.9636e-01,
  243.             7.2248e-03,
  244.             7.9655e-03,
  245.             0.0000e+00,
  246.             1.0854e+00,
  247.             1.1145e-02,
  248.             -3.6513e-02,
  249.             3.1527e-03,
  250.             0.0000e+00,
  251.             -4.8434e-01,
  252.             5.2023e-02,
  253.             -1.3091e-02,
  254.             1.8515e-03,
  255.             1.5422e-04,
  256.             0.0000e+00,
  257.             6.8298e-01,
  258.             2.5261e-03,
  259.             -9.9703e-04,
  260.             -1.0829e-03,
  261.             +1.7688e-04,
  262.             -3.1418e-05,
  263.             +0.0000e+00,
  264.             -3.7018e-01,
  265.             4.3234e-02,
  266.             7.2559e-03,
  267.             3.1516e-04,
  268.             2.0024e-05,
  269.             -8.0581e-06,
  270.             -2.3653e-06,
  271.             0.0000e+00,
  272.             1.0298e-01,
  273.             -1.5086e-02,
  274.             5.6186e-03,
  275.             3.2613e-05,
  276.             4.0567e-05,
  277.             -1.3925e-06,
  278.             -3.6219e-07,
  279.             -2.0176e-08,
  280.             0.0000e+00,
  281.             -1.8364e-01,
  282.             1.8508e-02,
  283.             7.5016e-04,
  284.             -9.6139e-05,
  285.             -3.1995e-06,
  286.             1.3868e-07,
  287.             -1.9486e-07,
  288.             3.0165e-10,
  289.             -6.4376e-10
  290.         };

  291.         /** Amplitude A<sub>nm</sub> coefficients for the pressure. */
  292.         private static final double[] A_PRESSURE_AMPLITUDE = {
  293.             -1.0444e-01,
  294.             1.6618e-01,
  295.             -6.3974e-02,
  296.             1.0922e+00,
  297.             5.7472e-01,
  298.             -3.0277e-01,
  299.             -3.5087e+00,
  300.             7.1264e-03,
  301.             -1.4030e-01,
  302.             3.7050e-02,
  303.             4.0208e-01,
  304.             -3.0431e-01,
  305.             -1.3292e-01,
  306.             4.6746e-03,
  307.             -1.5902e-04,
  308.             2.8624e+00,
  309.             -3.9315e-01,
  310.             -6.4371e-02,
  311.             1.6444e-02,
  312.             -2.3403e-03,
  313.             4.2127e-05,
  314.             1.9945e+00,
  315.             -6.0907e-01,
  316.             -3.5386e-02,
  317.             -1.0910e-03,
  318.             -1.2799e-04,
  319.             4.0970e-05,
  320.             2.2131e-05,
  321.             -5.3292e-01,
  322.             -2.9765e-01,
  323.             -3.2877e-02,
  324.             1.7691e-03,
  325.             5.9692e-05,
  326.             3.1725e-05,
  327.             2.0741e-05,
  328.             -3.7622e-07,
  329.             2.6372e+00,
  330.             -3.1165e-01,
  331.             1.6439e-02,
  332.             2.1633e-04,
  333.             1.7485e-04,
  334.             2.1587e-05,
  335.             6.1064e-06,
  336.             -1.3755e-08,
  337.             -7.8748e-08,
  338.             -5.9152e-01,
  339.             -1.7676e-01,
  340.             8.1807e-03,
  341.             1.0445e-03,
  342.             2.3432e-04,
  343.             9.3421e-06,
  344.             2.8104e-06,
  345.             -1.5788e-07,
  346.             -3.0648e-08,
  347.             2.6421e-10
  348.         };

  349.         /** Amplitude B<sub>nm</sub> coefficients for the pressure. */
  350.         private static final double[] B_PRESSURE_AMPLITUDE = {
  351.             0.0000e+00,
  352.             0.0000e+00,
  353.             9.3340e-01,
  354.             0.0000e+00,
  355.             8.2346e-01,
  356.             2.2082e-01,
  357.             0.0000e+00,
  358.             9.6177e-01,
  359.             -1.5650e-02,
  360.             1.2708e-03,
  361.             0.0000e+00,
  362.             -3.9913e-01,
  363.             2.8020e-02,
  364.             2.8334e-02,
  365.             8.5980e-04,
  366.             0.0000e+00,
  367.             3.0545e-01,
  368.             -2.1691e-02,
  369.             6.4067e-04,
  370.             -3.6528e-05,
  371.             -1.1166e-04,
  372.             0.0000e+00,
  373.             -7.6974e-02,
  374.             -1.8986e-02,
  375.             +5.6896e-03,
  376.             -2.4159e-04,
  377.             -2.3033e-04,
  378.             -9.6783e-06,
  379.             0.0000e+00,
  380.             -1.0218e-01,
  381.             -1.3916e-02,
  382.             -4.1025e-03,
  383.             -5.1340e-05,
  384.             -7.0114e-05,
  385.             -3.3152e-07,
  386.             1.6901e-06,
  387.             0.0000e+00,
  388.             -1.2422e-02,
  389.             +2.5072e-03,
  390.             +1.1205e-03,
  391.             -1.3034e-04,
  392.             -2.3971e-05,
  393.             -2.6622e-06,
  394.             5.7852e-07,
  395.             4.5847e-08,
  396.             0.0000e+00,
  397.             4.4777e-02,
  398.             -3.0421e-03,
  399.             2.6062e-05,
  400.             -7.2421e-05,
  401.             1.9119e-06,
  402.             3.9236e-07,
  403.             2.2390e-07,
  404.             2.9765e-09,
  405.             -4.6452e-09
  406.         };

  407.         /** Mean A<sub>nm</sub> coefficients for the temperature. */
  408.         private static final double[] A_TEMPERATURE_MEAN = {
  409.             1.6257e+01,
  410.             2.1224e+00,
  411.             9.2569e-01,
  412.             -2.5974e+01,
  413.             1.4510e+00,
  414.             9.2468e-02,
  415.             -5.3192e-01,
  416.             2.1094e-01,
  417.             -6.9210e-02,
  418.             -3.4060e-02,
  419.             -4.6569e+00,
  420.             2.6385e-01,
  421.             -3.6093e-02,
  422.             1.0198e-02,
  423.             -1.8783e-03,
  424.             7.4983e-01,
  425.             1.1741e-01,
  426.             3.9940e-02,
  427.             5.1348e-03,
  428.             5.9111e-03,
  429.             8.6133e-06,
  430.             6.3057e-01,
  431.             1.5203e-01,
  432.             3.9702e-02,
  433.             4.6334e-03,
  434.             2.4406e-04,
  435.             1.5189e-04,
  436.             1.9581e-07,
  437.             5.4414e-01,
  438.             3.5722e-01,
  439.             5.2763e-02,
  440.             4.1147e-03,
  441.             -2.7239e-04,
  442.             -5.9957e-05,
  443.             1.6394e-06,
  444.             -7.3045e-07,
  445.             -2.9394e+00,
  446.             5.5579e-02,
  447.             1.8852e-02,
  448.             3.4272e-03,
  449.             -2.3193e-05,
  450.             -2.9349e-05,
  451.             3.6397e-07,
  452.             2.0490e-06,
  453.             -6.4719e-08,
  454.             -5.2225e-01,
  455.             2.0799e-01,
  456.             1.3477e-03,
  457.             3.1613e-04,
  458.             -2.2285e-04,
  459.             -1.8137e-05,
  460.             -1.5177e-07,
  461.             6.1343e-07,
  462.             7.8566e-08,
  463.             1.0749e-09
  464.         };

  465.         /** Mean B<sub>nm</sub> coefficients for the temperature. */
  466.         private static final double[] B_TEMPERATURE_MEAN = {
  467.             0.0000e+00,
  468.             0.0000e+00,
  469.             1.0210e+00,
  470.             0.0000e+00,
  471.             6.0194e-01,
  472.             1.2292e-01,
  473.             0.0000e+00,
  474.             -4.2184e-01,
  475.             1.8230e-01,
  476.             4.2329e-02,
  477.             0.0000e+00,
  478.             9.3312e-02,
  479.             9.5346e-02,
  480.             -1.9724e-03,
  481.             5.8776e-03,
  482.             0.0000e+00,
  483.             -2.0940e-01,
  484.             3.4199e-02,
  485.             -5.7672e-03,
  486.             -2.1590e-03,
  487.             5.6815e-04,
  488.             0.0000e+00,
  489.             2.2858e-01,
  490.             1.2283e-02,
  491.             -9.3679e-03,
  492.             -1.4233e-03,
  493.             -1.5962e-04,
  494.             4.0160e-05,
  495.             0.0000e+00,
  496.             3.6353e-02,
  497.             -9.4263e-04,
  498.             -3.6762e-03,
  499.             5.8608e-05,
  500.             -2.6391e-05,
  501.             3.2095e-06,
  502.             -1.1605e-06,
  503.             0.0000e+00,
  504.             1.6306e-01,
  505.             1.3293e-02,
  506.             -1.1395e-03,
  507.             5.1097e-05,
  508.             3.3977e-05,
  509.             7.6449e-06,
  510.             -1.7602e-07,
  511.             -7.6558e-08,
  512.             0.0000e+00,
  513.             -4.5415e-02,
  514.             -1.8027e-02,
  515.             3.6561e-04,
  516.             -1.1274e-04,
  517.             1.3047e-05,
  518.             2.0001e-06,
  519.             -1.5152e-07,
  520.             -2.7807e-08,
  521.             7.7491e-09
  522.         };

  523.         /** Amplitude A<sub>nm</sub> coefficients for the temperature. */
  524.         private static final double[] A_TEMPERATURE_AMPLITUDE = {
  525.             -1.8654e+00,
  526.             -9.0041e+00,
  527.             -1.2974e-01,
  528.             -3.6053e+00,
  529.             2.0284e-02,
  530.             2.1872e-01,
  531.             -1.3015e+00,
  532.             4.0355e-01,
  533.             2.2216e-01,
  534.             -4.0605e-03,
  535.             1.9623e+00,
  536.             4.2887e-01,
  537.             2.1437e-01,
  538.             -1.0061e-02,
  539.             -1.1368e-03,
  540.             -6.9235e-02,
  541.             5.6758e-01,
  542.             1.1917e-01,
  543.             -7.0765e-03,
  544.             3.0017e-04,
  545.             3.0601e-04,
  546.             1.6559e+00,
  547.             2.0722e-01,
  548.             6.0013e-02,
  549.             1.7023e-04,
  550.             -9.2424e-04,
  551.             1.1269e-05,
  552.             -6.9911e-06,
  553.             -2.0886e+00,
  554.             -6.7879e-02,
  555.             -8.5922e-04,
  556.             -1.6087e-03,
  557.             -4.5549e-05,
  558.             3.3178e-05,
  559.             -6.1715e-06,
  560.             -1.4446e-06,
  561.             -3.7210e-01,
  562.             1.5775e-01,
  563.             -1.7827e-03,
  564.             -4.4396e-04,
  565.             2.2844e-04,
  566.             -1.1215e-05,
  567.             -2.1120e-06,
  568.             -9.6421e-07,
  569.             -1.4170e-08,
  570.             7.8720e-01,
  571.             -4.4238e-02,
  572.             -1.5120e-03,
  573.             -9.4119e-04,
  574.             4.0645e-06,
  575.             -4.9253e-06,
  576.             -1.8656e-06,
  577.             -4.0736e-07,
  578.             -4.9594e-08,
  579.             1.6134e-09
  580.         };

  581.         /** Amplitude B<sub>nm</sub> coefficients for the temperature. */
  582.         private static final double[] B_TEMPERATURE_AMPLITUDE = {
  583.             0.0000e+00,
  584.             0.0000e+00,
  585.             -8.9895e-01,
  586.             0.0000e+00,
  587.             -1.0790e+00,
  588.             -1.2699e-01,
  589.             0.0000e+00,
  590.             -5.9033e-01,
  591.             3.4865e-02,
  592.             -3.2614e-02,
  593.             0.0000e+00,
  594.             -2.4310e-02,
  595.             1.5607e-02,
  596.             -2.9833e-02,
  597.             -5.9048e-03,
  598.             0.0000e+00,
  599.             2.8383e-01,
  600.             4.0509e-02,
  601.             -1.8834e-02,
  602.             -1.2654e-03,
  603.             -1.3794e-04,
  604.             0.0000e+00,
  605.             1.3306e-01,
  606.             3.4960e-02,
  607.             -3.6799e-03,
  608.             -3.5626e-04,
  609.             1.4814e-04,
  610.             3.7932e-06,
  611.             0.0000e+00,
  612.             2.0801e-01,
  613.             6.5640e-03,
  614.             -3.4893e-03,
  615.             -2.7395e-04,
  616.             7.4296e-05,
  617.             -7.9927e-06,
  618.             -1.0277e-06,
  619.             0.0000e+00,
  620.             3.6515e-02,
  621.             -7.4319e-03,
  622.             -6.2873e-04,
  623.             8.2461e-05,
  624.             3.1095e-05,
  625.             -5.3860e-07,
  626.             -1.2055e-07,
  627.             -1.1517e-07,
  628.             0.0000e+00,
  629.             3.1404e-02,
  630.             1.5580e-02,
  631.             -1.1428e-03,
  632.             3.3529e-05,
  633.             1.0387e-05,
  634.             -1.9378e-06,
  635.             -2.7327e-07,
  636.             7.5833e-09,
  637.             -9.2323e-09
  638.         };

  639.         /** Build a new instance. */
  640.         ABCoefficients() {

  641.         }

  642.         /** Get the value of the mean A<sub>nm</sub> pressure coefficient for the given index.
  643.          * @param index index
  644.          * @return the mean A<sub>nm</sub> pressure coefficient for the given index
  645.          */
  646.         public double getAnmPressureMean(final int index) {
  647.             return A_PRESSURE_MEAN[index];
  648.         }

  649.         /** Get the value of the mean B<sub>nm</sub> pressure coefficient for the given index.
  650.          * @param index index
  651.          * @return the mean B<sub>nm</sub> pressure coefficient for the given index
  652.          */
  653.         public double getBnmPressureMean(final int index) {
  654.             return B_PRESSURE_MEAN[index];
  655.         }

  656.         /** Get the value of the amplitude A<sub>nm</sub> pressure coefficient for the given index.
  657.          * @param index index
  658.          * @return the amplitude A<sub>nm</sub> pressure coefficient for the given index.
  659.          */
  660.         public double getAnmPressureAmpl(final int index) {
  661.             return A_PRESSURE_AMPLITUDE[index];
  662.         }

  663.         /** Get the value of the amplitude B<sub>nm</sub> pressure coefficient for the given index.
  664.          * @param index index
  665.          * @return the amplitude B<sub>nm</sub> pressure coefficient for the given index
  666.          */
  667.         public double getBnmPressureAmpl(final int index) {
  668.             return B_PRESSURE_AMPLITUDE[index];
  669.         }

  670.         /** Get the value of the mean A<sub>nm</sub> temperature coefficient for the given index.
  671.          * @param index index
  672.          * @return the mean A<sub>nm</sub> temperature coefficient for the given index
  673.          */
  674.         public double getAnmTemperatureMean(final int index) {
  675.             return A_TEMPERATURE_MEAN[index];
  676.         }

  677.         /** Get the value of the mean B<sub>nm</sub> temperature coefficient for the given index.
  678.          * @param index index
  679.          * @return the mean B<sub>nm</sub> temperature coefficient for the given index
  680.          */
  681.         public double getBnmTemperatureMean(final int index) {
  682.             return B_TEMPERATURE_MEAN[index];
  683.         }

  684.         /** Get the value of the amplitude A<sub>nm</sub> temperature coefficient for the given index.
  685.          * @param index index
  686.          * @return the amplitude A<sub>nm</sub> temperature coefficient for the given index.
  687.          */
  688.         public double getAnmTemperatureAmpl(final int index) {
  689.             return A_TEMPERATURE_AMPLITUDE[index];
  690.         }

  691.         /** Get the value of the amplitude B<sub>nm</sub> temperature coefficient for the given index.
  692.          * @param index index
  693.          * @return the amplitude B<sub>nm</sub> temperature coefficient for the given index
  694.          */
  695.         public double getBnmTemperatureAmpl(final int index) {
  696.             return B_TEMPERATURE_AMPLITUDE[index];
  697.         }
  698.     }

  699. }