Esempio n. 1
0
        /// <summary>
        /// troposphere mapping function
        /// compute tropospheric mapping function by GMF or NMF or......
        /// </summary>
        /// <param name="time">time</param>
        /// <param name="pos">receiver position {lat, lon, h} (rad, m)</param>
        /// <param name="zael">azimuth/elevation angle {az, el} (rad)</param>
        /// <param name="mapfw">wet mapping function (null : not output)</param>
        /// <returns></returns>
        public double tropmapf(Time time, GeoCoord pos, double[] azel, ref double mapfw)
        {
            Time ep = new Time(2000, 1, 1, 12);

            Geoid geoid = new Geoid();

            if (pos.Height < -1000.0 || pos.Height > 20000.0)
            {
                mapfw = 0.0;
                return(0.0);
            }


            double mjd = 51544.5 + (double)(time - ep) / 86400.0;

            double lat = pos.Lat * SunMoonPosition.DegToRad;

            double lon = pos.Lon * SunMoonPosition.DegToRad;

            double hgt = pos.Height - geoid.geoidh(pos);

            double zd = SunMoonPosition.PI / 2.0 - azel[1];

            double gmfh = 0.0, mapf = 0.0;

            gmf(mjd, lat, lon, hgt, zd, ref gmfh, ref mapf);

            mapfw = mapf;

            return(gmfh);
        }