From 8d645359689252d373744c94ec916101f6a4a6cc Mon Sep 17 00:00:00 2001 From: KentWheeler <48744654+KentWheeler@users.noreply.github.com> Date: Thu, 2 Mar 2023 13:40:07 +0800 Subject: [PATCH 1/3] Correction to comments and instructions --- geodepy/survey.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/geodepy/survey.py b/geodepy/survey.py index 5383535..ad1927d 100644 --- a/geodepy/survey.py +++ b/geodepy/survey.py @@ -14,7 +14,7 @@ def first_vel_params(wavelength, frequency, n_REF=None, unit_length=None): """ Calculates the constant First Velocity Correction Parameters C and D for a given set of standard instrument settings - :param wavelength: Instrument Carrier Wavelength (Nanometers) - Mandatory + :param wavelength: Instrument Carrier Wavelength (Micrometers) - Mandatory :param frequency: Instrument modulation frequency (Hz) - Mandatory :param n_REF: manufacturers reference refractive index - Recommended :param unit_length: unit length of instrument - Optional @@ -78,7 +78,7 @@ def first_vel_corrn(dist, first_vel_param, temp, pressure, :param temp: Observed Temperature (degrees Celsius) :param pressure: Observed Pressure (hectopascals or millibars) :param rel_humidity: Observed Relative Humidity (percentage) - :return: Slope Distance with First Velocity Correction applied + :return: Slope Distance First Velocity Correction amount """ param_c = first_vel_param[0] param_d = first_vel_param[1] From bfb819ce8997aac5b61eb2b692e809c62e9556b2 Mon Sep 17 00:00:00 2001 From: KentWheeler <48744654+KentWheeler@users.noreply.github.com> Date: Tue, 21 Mar 2023 15:51:30 +0800 Subject: [PATCH 2/3] =?UTF-8?q?Inclusion=20of=20the=20Formulae=20for=20the?= =?UTF-8?q?=20phase=20and=20group=20refractive=20index=20of=20air=20as=20p?= =?UTF-8?q?ublished=20in=20Ciddor=20&=20Hill=20in=20Applied=20Optics=20(19?= =?UTF-8?q?99,=20Vol.38,=20No.9,=201663-1667)=20[Ciddor=20&=20Hill=201999]?= =?UTF-8?q?=20and=20Ciddor=20in=20Applied=20Optics=20(1996,=20Vol.=2035,?= =?UTF-8?q?=20No.9,=201566-1573)=20[Ciddor=201996]=20The=20code=20has=20be?= =?UTF-8?q?en=20translated=20and=20integrated=20from=20UNSW=20FORTRAN=20co?= =?UTF-8?q?de=20kindly=20supplied=20by=20Dr=20Jean=20R=C3=BCeger?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- geodepy/survey.py | 443 ++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 427 insertions(+), 16 deletions(-) diff --git a/geodepy/survey.py b/geodepy/survey.py index ad1927d..0dad709 100644 --- a/geodepy/survey.py +++ b/geodepy/survey.py @@ -15,17 +15,18 @@ def first_vel_params(wavelength, frequency, n_REF=None, unit_length=None): Calculates the constant First Velocity Correction Parameters C and D for a given set of standard instrument settings :param wavelength: Instrument Carrier Wavelength (Micrometers) - Mandatory - :param frequency: Instrument modulation frequency (Hz) - Mandatory + :param frequency: Instrument modulation frequency (Hz) - Optional :param n_REF: manufacturers reference refractive index - Recommended :param unit_length: unit length of instrument - Optional :return: First Velocity Correction Parameters C and D Reference Rueger, J.M., 2012, Electronic Distance Measurement – An Introduction, 4rd edition, Springer, Berlin """ - if not n_REF and not unit_length: - raise ValueError('Error - n_REF and unit_length cannot both be None') - - if not n_REF: + if not n_REF : + if not unit_length: + raise ValueError('Error - n_REF and unit_length cannot both be None') + if not frequency: + raise ValueError('Error - n_REF and frequency cannot both be None') # Rueger eq 6.3 n_REF = 299792458 / (2 * unit_length * frequency) @@ -56,7 +57,7 @@ def part_h2o_vap_press(dry_temp, pressure, rel_humidity=None, wet_temp=None): if rel_humidity: wet_temp = dry_temp # Rueger eq 5.27 - E_w = ((1.0007 + ((3.46 * pressure) * (10 ** -6))) + E_w = ((1.0007 + ((3.46 * pressure) * (10**-6))) * 6.1121 * exp((17.502 * wet_temp) / (240.94 + wet_temp))) if rel_humidity: @@ -69,7 +70,8 @@ def part_h2o_vap_press(dry_temp, pressure, rel_humidity=None, wet_temp=None): def first_vel_corrn(dist, first_vel_param, temp, pressure, - rel_humidity=None, wet_temp=None): + rel_humidity=None, wet_temp=None, CO2_ppm=None, + wavelength=None): """ Carries out First Velocity Correction of Electronic Distance Measurement, given correction parameters and atmospheric observations @@ -78,17 +80,33 @@ def first_vel_corrn(dist, first_vel_param, temp, pressure, :param temp: Observed Temperature (degrees Celsius) :param pressure: Observed Pressure (hectopascals or millibars) :param rel_humidity: Observed Relative Humidity (percentage) - :return: Slope Distance First Velocity Correction amount + :return: Slope Distance with First Velocity Correction applied """ param_c = first_vel_param[0] - param_d = first_vel_param[1] - e = part_h2o_vap_press(temp, pressure, rel_humidity, wet_temp) - - # Rueger eq 6.11 - t_273_15 = temp+273.15 - first_vel_corrn_ppm = (param_c-((param_d*pressure)/t_273_15)+((11.27*e)/t_273_15)) - first_vel_corrn_metres = dist * first_vel_corrn_ppm * (10 ** -6) - + if not CO2_ppm: + param_d = first_vel_param[1] + e = part_h2o_vap_press(temp, pressure, rel_humidity, wet_temp) + + # Rueger eq 6.11 + t_273_15 = temp+273.15 + first_vel_corrn_ppm = (param_c- + ((param_d*pressure)/t_273_15)+ + ((11.27*e)/t_273_15)) + first_vel_corrn_metres = dist * first_vel_corrn_ppm * (10 ** -6) + + else: + if all([temp, pressure, rel_humidity, wavelength]): + e = humidity2part_water_vapour_press(rel_humidity, temp) + NPROPG_1 = group_refractivity( + wavelength, temp, pressure, e, CO2_ppm) + else: + raise ValueError('Error - temp, pressure, rel_humidity and wavelength '+ + 'are all mandatory when CO2_ppm is not None') + + n_ref = 1 + (param_c / 1.0e6) + n_g = 1 + (NPROPG_1 / 1.0e8) + first_vel_corrn_metres = ((n_ref / n_g)-1) * dist + return first_vel_corrn_metres @@ -194,3 +212,396 @@ def va_conv(zenith_angle, slope_dist, height_inst=0, height_tgt=0): vert_angle_pt = atan(delta_ht / hz_dist) vert_angle_pt = degrees(vert_angle_pt) return vert_angle_pt, slope_dist_pt, hz_dist, delta_ht + +""" +The following has been translated from UNSW FORTRAN code +""" +""" + PROGRAM RINDEX + + ----------------------------------------------------------------- + Date : 6 July 1995 + + Version 4.0 with CF = 1.022 + + This program calculates the phase and group refractive index + using equations for the visible and near infrared developed by + P.E. Ciddor of the National Measurement Laboratory, CSIRO, + Division of the Applied Physics, Australia. (see reference below) + + Program originally written by S.K. Johnson and J.M. R?eger of the + School of Geomatic Engineering, University of New South + Wales, Australia. + Program converted from FORTRAN to python by Kent Wheeler of Landgate. + + Main References: + P.E. Ciddor, 1996, Refractive Index of Air: New Equations for the + Visible and Near Infrared, Applied Optics (Lasers, Phototonics, + and Environmental optics), 35(9): 1566-73. + R.S. Davies, 1992, Equations for Determination of the Density of Moist + Air (1981/91), Metrologia, 29: 67-70. + P. Giacomo, 1982, Equation for Determination of the Density of Moist + Air, Metrologia, 18: 33-40. + E.P. Peck and K. Reeder, 1972, Dispersion of Air, Journal of the + Optical Society of America, 62(8): 958-962. + J.C. Owens, 1967, Optical Refractive Index of Air: Dependence on + Pressure, Temperature and Composition, Applied Optics, 6(1): 51-59 + K.P Birch and M.J. Downs, 1994, Correction to the updated Edlen Equation + for the Refractive Index of Air, Metrologia, 31: 315-316. + K.P. Birch and M.J. Downs, 1993, An Updated Edlen Equation for the + Refractive Index of Air, Metrologia, 30: 155-162. + + Variables used: + + A,B,C,D = constants used to calculate SVP + A0,A1,A2,B0,B1,C0,C1,DLC,E = constants used to calculate Z + ALPHA, BETA, GAMMA = constants to calculate enhancement factor of + water vapour in air + CF = correction factor + CTERM = reference refractivity + DIST_UC = uncorrected distance (m) + DIST_CO = corrected distance (m) + F = enhanvement factor of water vapour in air + H = humidity (%) + K0,K1,K2,K3 = constants used to calculate NASX + LAMDA = wavelength (micrometre) + MA = molar mass of dry air containing a fraction XC + of Carbon Dioxide (kg/mol) + MV = molar mass of water vapour (kg/mol) + NAS_1 = refractivity of standard air with 450 ppm = (NAS-1)10E8 + NASX_1 = refractivity of standard air with XC ppm = (NASX-1)10E8 + NPROPG_1 = group refractivity = (NPROPgroup-1)10E8 + NPROPP_1 = phase refractivity = (NPROPphase-1)10E8 + NWS_1 = refractivity of water vapour at standard + conditions = (NWS-1)10E8 + P = pressure (hPa) + PV = partial water vapour pressure (Pa) + RHOA = density of dry air (kg per cubic metre) + RHOASX = density of standard air (kg per cubic metre) + RHOW = density of pure water vapour (kg per cubic metre) + RHOWS = density of standard water vapour (kg per cubic metre) + SIGMA = wavenumber (1/micrometre) + SVP = saturation vapour pressure of water vapour (Pa) + in air at temperature (TK) + TC = temperature (degrees Celcius) + TK = temperature (Kelvin) + W0,W1,W2,W3 = constants used to calculate NWS + XC = carbon dioxide content (ppm) + Z = compressibility of air + ZA = compressibility of dry air + ZWV = compressibility of water vapour + ----------------------------------------------------------------- +""" + + +def refractivity_constants(): + # PECK & REEDER (1972) AS AMMENDED BY CIDDOR + # (DRY AIR REFRACTIVITY) + (K0, K1, K2, K3) = (238.0185, 5792105.0, 57.362, 167917.0) + + # OWENS (1967) WATER VAPOUR REFRACTIVITY + (W0, W1, W2, W3) = (295.235, 2.6422, -0.032380, 0.004028) + + # ENHANCEMENT FACTOR (DAVIES, 1992) + (ALPHA, BETA, GAMMA) = (1.00062, 3.14e-8, 5.6e-7) + + # COMPRESSIBILITY (DAVIES 1992) + (A0, A1, A2, B0, B1, C0, C1, DLC, E) = ( + 1.58123e-6, -2.9331e-8, 1.1043e-10, 5.707e-6, -2.051e-8, + 1.9898e-4, -2.376e-6, 1.83e-11, -0.765e-8) + + # CIDDOR 1995 AND DAVIES 1992. NEW CF ON 28/06/95 + (CF, R, MV) = (1.022, 8.314510, 0.018015) + + # STANDARD CONDITION DRY AIR (PECK & REEDER 1972) + (TCSTDAIR, TKSTDAIR, PSTDAIR) = (15.0, 288.15, 101325.0) + (TCSTDWV, TKSTDWV, PSTDWV) = (20.0, 293.15, 1333.0) + + return ((K0, K1, K2, K3), + (W0, W1, W2, W3), + (ALPHA, BETA, GAMMA), + (A0, A1, A2, B0, B1, C0, C1, DLC, E), + (CF, R, MV), + (TCSTDAIR, TKSTDAIR, PSTDAIR), + (TCSTDWV, TKSTDWV, PSTDWV)) + + +def phase_refractivity(LAMDA, TC, P, PV, XC=420): + """ + Input + LAMDA = wavelength (micrometre) + TC = temperature (degrees Celcius) + P = pressure (hPa) + PV = partial water vapour pressure (Pa) + XC = carbon dioxide content (ppm) + Return + NPROPP_1 = phase refractivity = (NPROPphase-1)10E8 + """ + + ((K0, K1, K2, K3), + (W0, W1, W2, W3), + (ALPHA, BETA, GAMMA), + (A0, A1, A2, B0, B1, C0, C1, DLC, E), + (CF, R, MV), + (TCSTDAIR, TKSTDAIR, PSTDAIR), + (TCSTDWV, TKSTDWV, PSTDWV)) = refractivity_constants() + + # CONVERT LAMDA TO SIGMA, THE PRESSURE UNITS TO PASCAL AND CREATE TC AND PP + SIGMA = 1.0 / LAMDA + + # CONVERSION FROM hPa TO Pa AND C TO K + P = P * 100.0 + PV = PV * 100.0 + TK = TC + 273.15 + + # CALCULATE REFRACTIVITY OF STANDARD AIR (TC=15, P=101325) + TEMP1 = SIGMA * SIGMA + + # CIDDOR EQ.(1) + NAS_1 = (K1 / (K0 - TEMP1)) + (K3 / (K2 - TEMP1)) + + # CIDDOR EQ.(2) FOR AMBIENT C02 CONTENT (XC) + NASX_1 = NAS_1 * (1 + 0.534e-6 * (XC - 450.0)) + STD_AIR = { + '(Nas-1)10E8': NAS_1, + '(Nasx-1)10E8':NASX_1} + + # USING EQ. 2, CALCULATE REFRACTIVITY OF WATER VAPOUR AT STANDARD CONDITIONS + # (TC=20, P=1333) + TEMP2 = TEMP1 * TEMP1 + TEMP3 = TEMP1 * TEMP2 + + # FOLLOWING OWENS (1967) AS AMENDED TO FIT BIRCH & DOWNS (1988) + NWS_1 = CF * (W0 + W1 * TEMP1 + W2 * TEMP2 + W3 * TEMP3) + STD_WATER_VAPOUR = { + '(Nws-1)10E8': NWS_1} + + # CALCULATE THE DENSITY OF STANDARD AIR (XV=0, TC=15, P=101325) + # EQ.(2) DAVIS (1992) XC = MOLECULAR FRACTION OF C02 + # XC IN CIDDOR'S FORMULA IS IN PPM, CONVERTED TO A FRACTION + MA = (28.9635 + 12.011e-6 * (XC - 400.0)) * 1.0e-3 + + # USING CIDDOR EQ.(A1) WITH XV = 0 : DRY AIR COMPRESSIBILITY + ZA = (1.0 - (PSTDAIR / TKSTDAIR) * (A0 + (A1 * TCSTDAIR) + + (A2 * TCSTDAIR * TCSTDAIR)) + ((PSTDAIR / TKSTDAIR) * + (PSTDAIR / TKSTDAIR) * DLC)) + + # USING EQ. 3 FOR DRY AIR + RHOASX = (PSTDAIR * MA) / (ZA * R * TKSTDAIR) + DENSITY_OF_STD_AIR = { + 'Ma': MA, + 'Z_(DRY AIR)': ZA, + 'RHOasx': RHOASX} + + # CALCULATE THE DENSITY OF WATER VAPOUR AT STANDARD CONDITIONS + # (XV=1, TC=20, P=1333) + + # USING CIDDOR EQUATION A1 WITH XV = 1 AND PARTIAL + # WATER VAPOUR PRESSURE + ZWV = (1.0 - (PSTDWV / TKSTDWV) * (A0 + (A1 * TCSTDWV) + + (A2 * TCSTDWV * TCSTDWV) + (B0 + B1 * TCSTDWV) + + (C0 + C1 * TCSTDWV)) + ((PSTDWV / TKSTDWV) * + (PSTDWV / TKSTDWV) * (DLC + E))) + + # USING EQ. 3 + RHOWS = (PSTDWV * MV) / (ZWV * R * TKSTDWV) + + DENSITY_OF_STD_WATER_VAPOUR = { + 'Z_(WATER VAPOUR)': ZWV, + 'RHOws':RHOWS} + + # CALCULATE THE DENSITY OF DRY AMBIENT AIR (TC= USER, P=USER) + F = ALPHA + (BETA * P) + (GAMMA * TC * TC) + XV = F * PV / P + + # USING CIDDOR EQUATION A1 + Z = (1.0 - (P / TK) * (A0 + (A1 * TC) + (A2 * TC * TC) + + ((B0 + B1 * TC) * XV) + ((C0 + C1 * TC) * XV * XV)) + + ((P / TK) * (P / TK) * (DLC + (E * XV * XV)))) + + RHOA = (P * MA * (1.0 - XV)) / (Z * R * TK) + + DENSITY_OF_DRY_AMBIENT_AIR = { + 'f': F, + 'Xv': XV, + 'Z_(AMB. AIR)': Z, + 'RHOa':RHOA} + + # CALCULATE THE DENSITY OF AMBIENT WATER VAPOUR + # USING EQ. 3 + RHOW = (P * MV * XV) / (Z * R * TK) + + # CALCULATE THE PHASE REFRACTIVITY OF MOIST AIR FROM CIDDOR EQ.(4) + TEMP1 = RHOA / RHOASX + TEMP2 = RHOW / RHOWS + + DENSITY_OF_AMBIENT_WATER_VAPOUR = { + 'RHOw' : RHOW, + 'Da' : TEMP1, + 'Dv' : TEMP2} + + TEMP1 = TEMP1 * NASX_1 + TEMP2 = TEMP2 * NWS_1 + + DENSITY_OF_AMBIENT_WATER_VAPOUR['DaNasx'] = TEMP1 + DENSITY_OF_AMBIENT_WATER_VAPOUR['DvNvs'] = TEMP2 + + NPROPP_1 = TEMP1 + TEMP2 + + REFRACTIVITY_OF_MOIST_AIR = { + '(NpropP-1)10E8': NPROPP_1} + + return NPROPP_1 + + +def group_refractivity(LAMDA, TC, P, PV, XC=420): + """ + Input + LAMDA = wavelength (micrometre) + TC = temperature (degrees Celcius) + P = pressure (hPa) + PV = partial water vapour pressure (Pa) + XC = carbon dioxide content (ppm) + Return + NPROPG_1 = group refractivity = (NPROPgroup-1)10E8 + """ + + ((K0, K1, K2, K3), + (W0, W1, W2, W3), + (ALPHA, BETA, GAMMA), + (A0, A1, A2, B0, B1, C0, C1, DLC, E), + (CF, R, MV), + (TCSTDAIR, TKSTDAIR, PSTDAIR), + (TCSTDWV, TKSTDWV, PSTDWV)) = refractivity_constants() + + # CONVERT LAMDA TO SIGMA, THE PRESSURE UNITS TO PASCAL AND CREATE TC AND PP + SIGMA = 1.0 / LAMDA + + # CONVERSION FROM hPa TO Pa AND C TO K + P = P * 100.0 + PV = PV * 100.0 + TK = TC + 273.15 + + # CALCULATE REFRACTIVITY OF STANDARD AIR (TC=15, P=101325) + TEMP1 = SIGMA * SIGMA + + # CIDDOR EQ.(9) + NGAS_1 = (K1 * ((K0 + TEMP1) / ((K0 - TEMP1) * (K0 - TEMP1))) + + K3 * ((K2 + TEMP1) / ((K2 - TEMP1) * (K2 - TEMP1)))) + + # CIDDOR EQ.(2) FOR AMBIENT C02 CONTENT (XC) + NGASX_1 = NGAS_1 * (1 + 0.534e-6 * (XC - 450.0)) + STD_AIR = { + '(Ngas-1)10E8': NGAS_1, + '(Ngasx-1)10E8':NGASX_1} + + # USING EQ. 2, CALCULATE REFRACTIVITY OF WATER VAPOUR AT STANDARD CONDITIONS + # (TC=20, P=1333) + TEMP2 = TEMP1 * TEMP1 + TEMP3 = TEMP1 * TEMP2 + + # FOLLOWING OWENS (1967) AS AMENDED TO FIT BIRCH & DOWNS (1988) + NGWS_1 = (CF * (W0 + 3.0 * W1 * TEMP1 + 5.0 * W2 * TEMP2 + + 7.0 * W3 * TEMP3)) + STD_WATER_VAPOUR = { + '(Ngws-1)10E8': NGWS_1} + + # CALCULATE THE DENSITY OF STANDARD AIR (XV=0, TC=15, P=101325) + # EQ.(2) DAVIS (1992) XC = MOLECULAR FRACTION OF C02 + # XC IN CIDDOR'S FORMULA IS IN PPM, CONVERTED TO A FRACTION + MA = (28.9635 + 12.011e-6 * (XC - 400.0)) * 1.0e-3 + + # USING CIDDOR EQ.(A1) WITH XV = 0 : DRY AIR COMPRESSIBILITY + ZA = (1.0 - (PSTDAIR / TKSTDAIR) * (A0 + (A1 * TCSTDAIR) + + (A2 * TCSTDAIR * TCSTDAIR)) + ((PSTDAIR / TKSTDAIR) * + (PSTDAIR / TKSTDAIR) * DLC)) + + # USING EQ. 3 FOR DRY AIR + RHOASX = (PSTDAIR * MA) / (ZA * R * TKSTDAIR) + DENSITY_OF_STD_AIR = { + 'Ma': MA, + 'Z_(DRY AIR)': ZA, + 'RHOasx': RHOASX} + + # CALCULATE THE DENSITY OF WATER VAPOUR AT STANDARD CONDITIONS + # (XV=1, TC=20, P=1333) + + # USING CIDDOR EQUATION A1 WITH XV = 1 AND PARTIAL + # WATER VAPOUR PRESSURE + ZWV = (1.0 - (PSTDWV / TKSTDWV) * (A0 + (A1 * TCSTDWV) + + (A2 * TCSTDWV * TCSTDWV) + (B0 + B1 * TCSTDWV) + + (C0 + C1 * TCSTDWV)) + ((PSTDWV / TKSTDWV) * + (PSTDWV / TKSTDWV) * (DLC + E))) + + # USING EQ. 3 + RHOWS = (PSTDWV * MV) / (ZWV * R * TKSTDWV) + + DENSITY_OF_STD_WATER_VAPOUR = { + 'Z_(WATER VAPOUR)': ZWV, + 'RHOws':RHOWS} + + # CALCULATE THE DENSITY OF DRY AMBIENT AIR (TC= USER, P=USER) + F = ALPHA + (BETA * P) + (GAMMA * TC * TC) + XV = F * PV / P + + # USING CIDDOR EQUATION A1 + Z = (1.0 - (P / TK) * (A0 + (A1 * TC) + (A2 * TC * TC) + + ((B0 + B1 * TC) * XV) + ((C0 + C1 * TC) * XV * XV)) + + ((P / TK) * (P / TK) * (DLC + (E * XV * XV)))) + + # USING EQ. 3 + RHOA = (P * MA * (1.0 - XV)) / (Z * R * TK) + + DENSITY_OF_DRY_AMBIENT_AIR = { + 'f': F, + 'Xv': XV, + 'Z_(AMB. AIR)': Z, + 'RHOa':RHOA} + + # CALCULATE THE DENSITY OF AMBIENT WATER VAPOUR + # USING EQ. 3 + RHOW = (P * MV * XV) / (Z * R * TK) + + # CALCULATE THE GROUP REFRACTIVITY OF MOIST AIR FROM CIDDOR EQ.(4) + TEMP1 = RHOA / RHOASX + TEMP2 = RHOW / RHOWS + + DENSITY_OF_AMBIENT_WATER_VAPOUR = { + 'RHOw' : RHOW, + 'Da' : TEMP1, + 'Dv' : TEMP2} + + TEMP1 = TEMP1 * NGASX_1 + TEMP2 = TEMP2 * NGWS_1 + + DENSITY_OF_AMBIENT_WATER_VAPOUR['DaNgasx'] = TEMP1 + DENSITY_OF_AMBIENT_WATER_VAPOUR['DvNgvs'] = TEMP2 + + NPROPG_1 = TEMP1 + TEMP2 + + REFRACTIVITY_OF_MOIST_AIR = { + '(NpropG-1)10E8': NPROPG_1} + + return NPROPG_1 + + +def humidity2part_water_vapour_press(H, TC): + """ + Input + H = humidity (%) + TC = temperature (degrees Celcius) + Return + PV = partial water vapour pressure (Pa) + """ + + (A, B, C, D) = (1.2378847e-5, -1.9121316e-2, + 33.93711047, -6.3431645e3) + TK = TC + 273.15 + + # NOW CONVERT THE RELATIVE HUMIDITY TO PATIAL WATER VAPOUR PRESSURE (hPa) + # SEE EQ.(22) GIACOMO 1982 + SVP = exp(A * TK * TK + B * TK + C + D / TK) + PV = (H / 100.0) * SVP + PV = PV / 100.0 + + return PV \ No newline at end of file From 9c3c97ea798fdac75e5a144951d25cb9370ca134 Mon Sep 17 00:00:00 2001 From: KentWheeler <48744654+KentWheeler@users.noreply.github.com> Date: Tue, 21 Mar 2023 16:35:09 +0800 Subject: [PATCH 3/3] Include test_first_vel_corrn_with_CO2 in TestSurveyConvert --- geodepy/tests/test_survey.py | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/geodepy/tests/test_survey.py b/geodepy/tests/test_survey.py index f129c3e..ad06595 100644 --- a/geodepy/tests/test_survey.py +++ b/geodepy/tests/test_survey.py @@ -25,6 +25,21 @@ def test_first_vel_corrn(self): obs_pressure, obs_relative_humidity) corrected_obs_distance = raw_obs_distance + correction self.assertEqual(round(corrected_obs_distance, 4), 1117.8624) + + def test_first_vel_corrn_with_CO2(self): + edm_wavelength = 0.850 + params = first_vel_params(edm_wavelength,49951.33424,1.000281783) + raw_obs_distance = 1117.8517 + obs_temperature = 6.8 + obs_pressure = 960.8 + obs_relative_humidity = 58.6 + CO2_ppm_2022 = 420 + correction = first_vel_corrn(raw_obs_distance, params, obs_temperature, + obs_pressure, obs_relative_humidity, + CO2_ppm = CO2_ppm_2022, + wavelength = edm_wavelength) + corrected_obs_distance = raw_obs_distance + correction + self.assertEqual(round(corrected_obs_distance, 4), 1117.8624) def test_mets_partial_differentials(self): group_ref_Index = 1.00028