| 1 | SUBROUTINE comp_slant_tec_tl(nstate,nobs,r_leo,r_gps,x,x_tl,impact,slant_tec,slant_tec_tl)
|
|---|
| 2 |
|
|---|
| 3 | IMPLICIT NONE
|
|---|
| 4 |
|
|---|
| 5 | INTEGER, INTENT(IN) :: nstate,nobs
|
|---|
| 6 | REAL, INTENT(IN) :: r_leo(nobs),r_gps(nobs)
|
|---|
| 7 | REAL, INTENT(IN) :: x(nstate)
|
|---|
| 8 | REAL, INTENT(IN) :: x_tl(nstate)
|
|---|
| 9 | REAL, INTENT(IN) :: impact(nobs)
|
|---|
| 10 | REAL, INTENT(OUT) :: slant_tec(nobs)
|
|---|
| 11 | REAL, INTENT(OUT) :: slant_tec_tl(nobs)
|
|---|
| 12 |
|
|---|
| 13 | ! local variables
|
|---|
| 14 |
|
|---|
| 15 | INTEGER :: nstep_leo,nstep_gps
|
|---|
| 16 |
|
|---|
| 17 | INTEGER :: i,j,k
|
|---|
| 18 |
|
|---|
| 19 | REAL :: ne_max,rmax,H0,H_grad
|
|---|
| 20 |
|
|---|
| 21 | REAL :: ne_max_tl,rmax_tl,H0_tl,H_grad_tl
|
|---|
| 22 |
|
|---|
| 23 | REAL :: dtheta,theta_leo,theta_gps
|
|---|
| 24 |
|
|---|
| 25 | REAL :: x_leo,x_gps
|
|---|
| 26 | REAL :: theta(3),h(3)
|
|---|
| 27 | REAL :: h_tl(3)
|
|---|
| 28 |
|
|---|
| 29 | REAL :: rad(3)
|
|---|
| 30 | REAL :: u(3)
|
|---|
| 31 | REAL :: ne(3)
|
|---|
| 32 |
|
|---|
| 33 | REAL :: u_tl(3)
|
|---|
| 34 | REAL :: ne_tl(3)
|
|---|
| 35 |
|
|---|
| 36 | REAL :: afac,S_term,S_term_tl
|
|---|
| 37 |
|
|---|
| 38 | ! for integral - quick test
|
|---|
| 39 |
|
|---|
| 40 | nstep_leo = 40
|
|---|
| 41 | nstep_gps = 20
|
|---|
| 42 |
|
|---|
| 43 | ! state vector contents
|
|---|
| 44 |
|
|---|
| 45 | ne_max = x(1)
|
|---|
| 46 | rmax = x(2)
|
|---|
| 47 | H0 = x(3)
|
|---|
| 48 | H_grad = x(4)
|
|---|
| 49 |
|
|---|
| 50 | ne_max_tl = x_tl(1)
|
|---|
| 51 | rmax_tl = x_tl(2)
|
|---|
| 52 | H0_tl = x_tl(3)
|
|---|
| 53 | H_grad_tl = x_tl(4)
|
|---|
| 54 |
|
|---|
| 55 |
|
|---|
| 56 | ! Maximum for the VaryCHAP
|
|---|
| 57 |
|
|---|
| 58 | !
|
|---|
| 59 | ! Compute slant TECs for impact parameters
|
|---|
| 60 | !
|
|---|
| 61 |
|
|---|
| 62 | slant_tec(:) = -9998765.0 ! missing
|
|---|
| 63 |
|
|---|
| 64 | slant_tec_tl(:) = -9998765.0 ! missing
|
|---|
| 65 |
|
|---|
| 66 | DO i = 1, nobs
|
|---|
| 67 |
|
|---|
| 68 | IF (r_leo(i) < impact(i) .OR. impact(i) < 0.0) CYCLE
|
|---|
| 69 |
|
|---|
| 70 | x_leo = r_leo(i)/impact(i)
|
|---|
| 71 |
|
|---|
| 72 | x_gps = r_gps(i)/impact(i)
|
|---|
| 73 |
|
|---|
| 74 | theta_leo = log(x_leo+SQRT(MAX(1.0E-20,(x_leo*x_leo-1.0))))
|
|---|
| 75 |
|
|---|
| 76 | theta_gps = log(x_gps+SQRT(MAX(1.0E-20,(x_gps*x_gps-1.0))))
|
|---|
| 77 |
|
|---|
| 78 | ! integrate to LEO
|
|---|
| 79 |
|
|---|
| 80 | slant_tec(i) = 0.0
|
|---|
| 81 |
|
|---|
| 82 | slant_tec_tl(i) = 0.0
|
|---|
| 83 |
|
|---|
| 84 | DO j = 1,(nstep_leo+nstep_gps)
|
|---|
| 85 |
|
|---|
| 86 | IF (j <= nstep_leo) THEN
|
|---|
| 87 |
|
|---|
| 88 | ! path from tangent point to LEO
|
|---|
| 89 |
|
|---|
| 90 | dtheta = theta_leo/REAL(nstep_leo)
|
|---|
| 91 |
|
|---|
| 92 | afac = 0.33333333
|
|---|
| 93 |
|
|---|
| 94 | ELSE
|
|---|
| 95 |
|
|---|
| 96 | ! path from LEO to GPS
|
|---|
| 97 |
|
|---|
| 98 | dtheta = (theta_gps-theta_leo)/nstep_gps
|
|---|
| 99 |
|
|---|
| 100 | afac = 0.16666667
|
|---|
| 101 |
|
|---|
| 102 | ENDIF
|
|---|
| 103 |
|
|---|
| 104 | DO k = 1,3
|
|---|
| 105 |
|
|---|
| 106 | IF (j <= nstep_leo) THEN
|
|---|
| 107 |
|
|---|
| 108 | theta(k) = REAL(j-1)*dtheta + REAL(k-1)*0.5*dtheta
|
|---|
| 109 |
|
|---|
| 110 | ELSE
|
|---|
| 111 |
|
|---|
| 112 | theta(k) = theta_leo + REAL(j-nstep_leo-1)*dtheta + REAL(k-1)*0.5*dtheta
|
|---|
| 113 |
|
|---|
| 114 | ENDIF
|
|---|
| 115 |
|
|---|
| 116 | rad(k) = impact(i)*COSH(theta(k))
|
|---|
| 117 |
|
|---|
| 118 | IF (h_grad > 1.0e-6 .AND. rad(k) > rmax ) THEN
|
|---|
| 119 |
|
|---|
| 120 | u(k) = LOG(1.0+H_grad*(rad(k)-rmax)/H0)/H_grad
|
|---|
| 121 |
|
|---|
| 122 | u_tl(k) = -(u(k)/H_grad)*H_grad_tl + &
|
|---|
| 123 | &((1.0/(1.0+H_grad*(rad(k)-rmax)/H0))*(H_grad_tl*(rad(k)-rmax)/H0 - &
|
|---|
| 124 | &(H_grad/H0)*rmax_tl - (H_grad*(rad(k)-rmax)/H0**2)*H0_tl ))/H_grad
|
|---|
| 125 |
|
|---|
| 126 | h(k) = H0 + h_grad*(rad(k)-rmax)
|
|---|
| 127 |
|
|---|
| 128 | h_tl(k) = H0_tl + h_grad_tl*(rad(k)-rmax) - h_grad*rmax_tl
|
|---|
| 129 |
|
|---|
| 130 | ELSE
|
|---|
| 131 |
|
|---|
| 132 | u(k) = (rad(k)-rmax)/H0
|
|---|
| 133 |
|
|---|
| 134 | u_tl(k) = -rmax_tl/H0 - (u(k)/H0)*H0_tl
|
|---|
| 135 |
|
|---|
| 136 | h(k) = H0
|
|---|
| 137 |
|
|---|
| 138 | h_tl(k) = H0_tl
|
|---|
| 139 |
|
|---|
| 140 | ENDIF
|
|---|
| 141 |
|
|---|
| 142 | ne(k) = ne_max*EXP(0.5*(1.0-u(k)-EXP(-u(k))))*SQRT(H0/h(k))
|
|---|
| 143 |
|
|---|
| 144 | ne_tl(k) = ne(k)*(ne_max_tl/ne_max + 0.5*(EXP(-u(k))-1.0)*u_tl(k) + &
|
|---|
| 145 | & 0.5*(H0_tl/H0 - h_tl(k)/h(k)))
|
|---|
| 146 |
|
|---|
| 147 |
|
|---|
| 148 | ENDDO ! k
|
|---|
| 149 |
|
|---|
| 150 | !!! write (6,*) j,'ne',2.0*(ne_up-ne_low)/(ne_low+ne_up),ne_up,ne_low
|
|---|
| 151 |
|
|---|
| 152 | !!! write (6,*) j,theta(1),dtheta,rad(1)-6.371e6,rad(3)-6.371e6,ne(1),ne(3)
|
|---|
| 153 |
|
|---|
| 154 | ! Simpson's rule
|
|---|
| 155 |
|
|---|
| 156 | S_term = (ne(1)*rad(1) + 4.0*ne(2)*rad(2) + ne(3)*rad(3))
|
|---|
| 157 |
|
|---|
| 158 | S_term_tl = (ne_tl(1)*rad(1) + 4.0*ne_tl(2)*rad(2) + ne_tl(3)*rad(3))
|
|---|
| 159 | !
|
|---|
| 160 | ! afac depends on which section of path
|
|---|
| 161 | !
|
|---|
| 162 | slant_tec(i) = slant_tec(i) + afac*S_term*dtheta
|
|---|
| 163 |
|
|---|
| 164 | slant_tec_tl(i) = slant_tec_tl(i) + afac*S_term_tl*dtheta
|
|---|
| 165 |
|
|---|
| 166 | ENDDO ! j
|
|---|
| 167 |
|
|---|
| 168 |
|
|---|
| 169 | !! write (6,*) i,impact(i),slant_tec(i),slant_tec_tl(i)
|
|---|
| 170 |
|
|---|
| 171 | ENDDO ! i
|
|---|
| 172 |
|
|---|
| 173 |
|
|---|
| 174 | END
|
|---|
| 175 |
|
|---|
| 176 |
|
|---|