/// <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); }