da_predictor_rttov.inc
References to this file elsewhere.
1 subroutine da_predictor_rttov(pred,npred,temp,hum,T_skin)
2
3 implicit none
4
5 ! temp - 43 level temperatures
6 ! hum - 43 level moistures
7 ! T-skin - model skin temperature
8
9 ! pred(1) - 1000-300 thickness 43 1005.43-521.46 thickness
10 ! pred(2) - 200-50 thickness 43 194.36-56.73 thickness
11 ! pred(3) - T_skin
12 ! pred(4) - total column precipitable water
13 ! pred(5) - 10 -2 thickness 43 10.37-2.61 thickness
14 ! pred(6) - 50 -10thickness 43 45.29-10.37 thickness
15
16 integer, parameter :: JPRTLEV = 43
17
18 integer, intent(in) :: npred
19 real, intent(in) :: temp(JPRTLEV), hum(JPRTLEV), T_skin
20 real, intent(out) :: pred(npred)
21
22 real, parameter :: Kth = gas_constant*0.5/gravity
23 real, parameter :: Kpc = 100.0*0.5/gravity
24
25 real :: tv(JPRTLEV)
26
27 logical, SAVE :: FIRST = .true.
28
29 real :: PLEVS(JPRTLEV) = (/ 0.10, 0.29, 0.69, 1.42, 2.61, &
30 4.41, 6.95, 10.37, 14.81, 20.40, &
31 27.26, 35.51, 45.29, 56.73, 69.97, &
32 85.18, 102.05, 122.04, 143.84, 167.95, &
33 194.36, 222.94, 253.71, 286.60, 321.50, &
34 358.28, 396.81, 436.95, 478.54, 521.46, &
35 565.54, 610.60, 656.43, 702.73, 749.12, &
36 795.09, 839.95, 882.80, 922.46, 957.44, &
37 985.88, 1005.43, 1013.25 /)
38
39 real, SAVE :: DLP(JPRTLEV-1), DP(JPRTLEV-1)
40
41 if (trace_use) call da_trace_entry("da_predictor_rttov")
42
43 ! If first time compute log P(i)/P(i-1) and P(i)-P(i-1)
44 if (FIRST) then
45 DLP(1:JPRTLEV-1) = LOG(PLEVS(2:JPRTLEV)) - LOG(PLEVS(1:JPRTLEV-1))
46 DP(1:JPRTLEV-1) = PLEVS(2:JPRTLEV) - PLEVS(1:JPRTLEV-1)
47 FIRST = .false.
48 end if
49
50 ! 1.0 Convert all temperatures to virtual temperatures
51 ! ----------------------------------------------------
52 tv = temp/(1.0 - 0.6*hum)
53
54 ! 2.0 Construct averages for NESDIS thick layers
55 ! ----------------------------------------------
56
57 pred(1) = Kth*sum((tv(26:42) + tv(25:41))*DLP(25:41))
58 pred(2) = Kth*sum((tv(14:21) + tv(13:20))*DLP(13:20))
59 pred(3) = T_skin
60 pred(4) = Kpc*sum((hum(2:43) + hum(1:42))*DP(1:42))
61
62 if (npred == 6) then
63 pred(5) = Kth*sum((tv(5:8) + tv(4:7))*DLP(4:7))
64 pred(6) = Kth*sum((tv(8:13) + tv(7:12))*DLP(7:12))
65 end if
66
67 if (trace_use) call da_trace_exit("da_predictor_rttov")
68
69 end subroutine da_predictor_rttov
70
71