11 use fckit_log_module,
only: fckit_log
12 use kinds,
only: kind_real
15 use missing_values_mod
41 INTEGER,
INTENT(IN) :: nlevq
42 REAL(kind_real),
INTENT(IN) :: refrac(:)
43 REAL(kind_real),
INTENT(IN) :: zb(:)
44 REAL(kind_real),
INTENT(IN) :: zstation
45 REAL(kind_real),
INTENT(INOUT) :: model_ztd
48 REAL(kind_real) :: localzenithdelay
50 REAL(kind_real) :: stationrefrac
52 REAL(kind_real) :: const
53 REAL(kind_real) :: term1
54 REAL(kind_real) :: term2
55 INTEGER :: lowest_level
64 IF (zb(level) > zstation)
THEN
72 DO level = lowest_level, nlevq
74 localzenithdelay = 0.0
76 IF (level == lowest_level .AND. level /= 1)
THEN
81 c = (log(refrac(level) / refrac(level - 1))) / (zb(level - 1) - zb(level))
82 stationrefrac = refrac(level - 1) * exp(-c * (zstation - zb(level - 1)))
83 const = -stationrefrac / c * exp(c * zstation)
84 term1 = exp(-c * (zb(level)))
85 term2 = exp(-c * zstation)
86 localzenithdelay =
refrac_scale * const * (term1 - term2)
88 ELSE IF (level == 1)
THEN
94 c = (log(refrac(level + 1) / refrac(level))) / (zb(level) - zb(level + 1))
95 const = -refrac(level) / c * exp(c * (zb(level)))
96 term1 = exp(-c * (zb(level + 1)))
97 term2 = exp(-c * zstation)
98 localzenithdelay =
refrac_scale * const * (term1 - term2)
100 ELSE IF (level <= nlevq .AND. level > 2)
THEN
104 c = (log(refrac(level) / refrac(level - 1))) / (zb(level - 1) - zb(level))
105 const = -refrac(level - 1) / c * exp(c * (zb(level - 1)))
106 term1 = exp(-c * (zb(level)))
107 term2 = exp(-c * (zb(level - 1)))
108 localzenithdelay =
refrac_scale * const * (term1 - term2)
112 model_ztd = model_ztd + localzenithdelay
125 REAL(kind_real),
INTENT(IN) :: p(:)
126 INTEGER,
INTENT(IN) :: nlevq
127 REAL(kind_real),
INTENT(IN) :: za(:)
128 REAL(kind_real),
INTENT(IN) :: zb(:)
129 REAL(kind_real),
INTENT(INOUT) :: topcorrection
133 REAL(kind_real) :: pn(nlevq)
134 REAL(kind_real) :: pwt1
135 REAL(kind_real) :: pwt2
136 REAL(kind_real) :: tcconstant
137 REAL(kind_real),
PARAMETER :: hpa_to_pa = 100.0
142 pwt1 = (za(level + 1) - zb(level)) / (za(level + 1) - za(level))
145 pn(level) = exp(pwt1 * log(p(level)) + pwt2 * log(p(level + 1)))
151 topcorrection = tcconstant * pn(nlevq)
real(kind_real), parameter, public rd
subroutine, public ops_groundgnss_topcorrection(P, nlevq, za, zb, TopCorrection)
real(kind_real), parameter refrac_scale
subroutine, public ops_groundgnss_ztd(nlevq, refrac, zb, zStation, Model_ZTD)