Changeset 1711 for trunk


Ignore:
Timestamp:
03/17/10 16:10:43 (15 years ago)
Author:
Max Voronkov
Message:

added model of water vapour refractivity

Location:
trunk/src
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/STAtmosphere.cpp

    r1710 r1711  
    181181 * @param[in] pVapour partial pressure of water vapour (Pascals)
    182182 * @return complex refractivity
     183 *
     184 * Reference:
     185 * Liebe, An updated model for millimeter wave propogation in moist air,
     186 * Radio Science, 20, 1069-1089 (1985).
    183187 **/
    184188std::complex<double> STAtmosphere::dryRefractivity(double freq, double temperature,
     
    253257         (2*3.07e-4/(gamma0*(1+std::pow(fGHz/gamma0,2))*(1+std::pow(fGHz/60,2))) +
    254258          ap*kPaPDry*std::pow(theta,2.5))*fGHz*kPaPDry*theta*theta);
     259         
    255260  // sum the contributions of all the lines
    256261  for (size_t l = 0; l < nLines; ++l) {
     
    269274  return result;
    270275}
     276
     277/**
     278 * Compute the complex refractivity of the water vapour monomers
     279 * at the given frequency.
     280 * @param[in] freq frequency (Hz)
     281 * @param[in] temperature air temperature (K)
     282 * @param[in] pDry partial pressure of dry components (Pascals)
     283 * @param[in] pVapour partial pressure of water vapour (Pascals)
     284 * @return complex refractivity
     285 *
     286 * Reference:
     287 * Liebe, An updated model for millimeter wave propogation in moist air,
     288 * Radio Science, 20, 1069-1089 (1985).
     289 **/
     290std::complex<double> STAtmosphere::vapourRefractivity(double freq, double temperature,
     291                     double pDry, double pVapour)
     292{
     293  // the number of parameters per atmospheric line and the number of lines taken into account
     294  const size_t nLineParams = 4;
     295  const size_t nLines = 30;
     296  // actual tabulated values
     297  const double lines[nLines][nLineParams] =
     298    {{22.235080,  0.1090, 2.143, 27.84E-3},
     299     {67.813960,  0.0011, 8.730, 27.60E-3},
     300     {119.995940,  0.0007, 8.347, 27.00E-3},
     301     {183.310117,  2.3000, 0.653, 28.35E-3},
     302     {321.225644,  0.0464, 6.156, 21.40E-3},
     303     {325.152919,  1.5400, 1.515, 27.00E-3},
     304     {336.187000,  0.0010, 9.802, 26.50E-3},
     305     {380.197372, 11.9000, 1.018, 27.60E-3},
     306     {390.134508,  0.0044, 7.318, 19.00E-3},
     307     {437.346667,  0.0637, 5.015, 13.70E-3},
     308     {439.150812,  0.9210, 3.561, 16.40E-3},
     309     {443.018295,  0.1940, 5.015, 14.40E-3},
     310     {448.001075, 10.6000, 1.370, 23.80E-3},
     311     {470.888947,  0.3300, 3.561, 18.20E-3},
     312     {474.689127,  1.2800, 2.342, 19.80E-3},
     313     {488.491133,  0.2530, 2.814, 24.90E-3},
     314     {503.568532,  0.0374, 6.693, 11.50E-3},
     315     {504.482692,  0.0125, 6.693, 11.90E-3},
     316     {556.936002, 510.000, 0.114, 30.00E-3},
     317     {620.700807,  5.0900, 2.150, 22.30E-3},
     318     {658.006500,  0.2740, 7.767, 30.00E-3},
     319     {752.033227, 250.000, 0.336, 28.60E-3},
     320     {841.073593,  0.0130, 8.113, 14.10E-3},
     321     {859.865000,  0.1330, 7.989, 28.60E-3},
     322     {899.407000,  0.0550, 7.845, 28.60E-3},
     323     {902.555000,  0.0380, 8.360, 26.40E-3},
     324     {906.205524,  0.1830, 5.039, 23.40E-3},
     325     {916.171582,  8.5600, 1.369, 25.30E-3},
     326     {970.315022,  9.1600, 1.842, 24.00E-3},
     327     {987.926764, 138.000, 0.178, 28.60E-3}};
     328
     329  // convert to the units of Liebe
     330  const double theta = 300./temperature;
     331  const double kPaPVap = 0.001*pVapour;
     332  const double kPaPDry = 0.001*pDry;
     333  const double fGHz = freq * 1e-9;
     334 
     335  // initial refractivity
     336  std::complex<double> result(2.39*kPaPVap*theta + 41.6*kPaPVap*theta*theta +
     337            6.47e-6*std::pow(fGHz,2.05)*kPaPVap*std::pow(theta,2.4),
     338            (0.915*1.40e-6*kPaPDry + 5.41e-5*kPaPVap*theta*theta*theta)*
     339             fGHz*kPaPVap*std::pow(theta,2.5));
     340             
     341  // sum contributions of all the lines
     342  for (size_t l = 0; l < nLines; ++l) {
     343       const double S = lines[l][1]*kPaPVap*std::pow(theta,3.5)*exp(lines[l][2]*(1.-theta));
     344       const double gamma = lines[l][3]*(kPaPDry*std::pow(theta,0.8) + 4.80*kPaPVap*theta);
     345       const double x = (lines[l][0]-fGHz)*(lines[l][0]-fGHz) + gamma*gamma;
     346       const double y = (lines[l][0]+fGHz)*(lines[l][0]+fGHz) + gamma*gamma;
     347       const double z = (lines[l][0]+gamma*gamma/lines[l][0]);
     348       result += std::complex<double>(S*((z-fGHz)/x + (z+fGHz)/y - 2./lines[l][0]),
     349                           S*((1./x+1./y)*gamma*fGHz/lines[l][0]));
     350  }
     351 
     352  return result;
     353}
     354
  • trunk/src/STAtmosphere.h

    r1710 r1711  
    143143   * @param[in] pVapour partial pressure of water vapour (Pascals)
    144144   * @return complex refractivity
    145    **/
    146    static std::complex<double> dryRefractivity(double freq, double temperature,
     145   *
     146   * Reference:
     147   * Liebe, An updated model for millimeter wave propogation in moist air,
     148   * Radio Science, 20, 1069-1089 (1985).
     149   **/
     150  static std::complex<double> dryRefractivity(double freq, double temperature,
    147151                     double pDry, double pVapour);
    148    
     152 
     153  /**
     154   * Compute the complex refractivity of the water vapour monomers
     155   * at the given frequency.
     156   * @param[in] freq frequency (Hz)
     157   * @param[in] temperature air temperature (K)
     158   * @param[in] pDry partial pressure of dry components (Pascals)
     159   * @param[in] pVapour partial pressure of water vapour (Pascals)
     160   * @return complex refractivity
     161   *
     162   * Reference:
     163   * Liebe, An updated model for millimeter wave propogation in moist air,
     164   * Radio Science, 20, 1069-1089 (1985).
     165   **/
     166  static std::complex<double> vapourRefractivity(double freq, double temperature,
     167                     double pDry, double pVapour);
     168     
    149169private:
    150170 
Note: See TracChangeset for help on using the changeset viewer.