Changeset 1711
- Timestamp:
- 03/17/10 16:10:43 (15 years ago)
- Location:
- trunk/src
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/STAtmosphere.cpp
r1710 r1711 181 181 * @param[in] pVapour partial pressure of water vapour (Pascals) 182 182 * @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). 183 187 **/ 184 188 std::complex<double> STAtmosphere::dryRefractivity(double freq, double temperature, … … 253 257 (2*3.07e-4/(gamma0*(1+std::pow(fGHz/gamma0,2))*(1+std::pow(fGHz/60,2))) + 254 258 ap*kPaPDry*std::pow(theta,2.5))*fGHz*kPaPDry*theta*theta); 259 255 260 // sum the contributions of all the lines 256 261 for (size_t l = 0; l < nLines; ++l) { … … 269 274 return result; 270 275 } 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 **/ 290 std::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 143 143 * @param[in] pVapour partial pressure of water vapour (Pascals) 144 144 * @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, 147 151 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 149 169 private: 150 170
Note:
See TracChangeset
for help on using the changeset viewer.