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   real, parameter :: Kth = gas_constant*0.5/gravity
19   real, parameter :: Kpc = 100.0*0.5/gravity
20 
21   integer, intent(in)  :: npred
22   real, intent(in)     :: temp(JPRTLEV), hum(JPRTLEV), T_skin
23   real, intent(out)    :: pred(npred)
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 first time compute log P(i)/P(i-1) and P(i)-P(i-1)
42   if (FIRST) then
43     DLP(1:JPRTLEV-1) = LOG(PLEVS(2:JPRTLEV)) - LOG(PLEVS(1:JPRTLEV-1))
44     DP(1:JPRTLEV-1) = PLEVS(2:JPRTLEV) - PLEVS(1:JPRTLEV-1)
45     FIRST = .false.
46   end if
47 
48 ! 1.0 Convert all temperatures to virtual temperatures
49 ! ----------------------------------------------------
50   tv =  temp/(1.0 - 0.6*hum)
51 
52 ! 2.0 Construct averages for NESDIS thick layers
53 ! ----------------------------------------------
54 
55   pred(1) = Kth*sum((tv(26:42) + tv(25:41))*DLP(25:41))
56   pred(2) = Kth*sum((tv(14:21) + tv(13:20))*DLP(13:20))
57   pred(3) = T_skin
58   pred(4) = Kpc*sum((hum(2:43) + hum(1:42))*DP(1:42))
59 
60   if (npred == 6) then
61    pred(5) = Kth*sum((tv(5:8)  + tv(4:7))*DLP(4:7))
62    pred(6) = Kth*sum((tv(8:13)  + tv(7:12))*DLP(7:12))
63   end if
64 
65   RETURN
66   end subroutine da_predictor_rttov
67 
68