da_predictor_crtm.inc

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