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    integer, intent(in)  :: npred,nlevels
20    real,    intent(in)  :: temp(nlevels), hum(nlevels), T_skin
21    real,    intent(in)  :: pm(nlevels), pf(0:nlevels)
22    real,    intent(out) :: pred(npred)
23 
24    real, parameter :: Kth = gas_constant/gravity
25    real, parameter :: Kpc = 100.0/gravity
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    if (trace_use) call da_trace_entry("da_predictor_crtm")
44 
45    qm=hum*0.001  ! g/kg to kg/kg
46 
47    ! If first time compute log P(i)/P(i-1) and P(i)-P(i-1)
48    !if (FIRST) then
49      DLP(1:nlevels) = LOG(pf(1:nlevels)) - LOG(pf(0:nlevels-1))
50       DP(1:nlevels) =     pf(1:nlevels)  -     pf(0:nlevels-1)
51      !FIRST = .false.
52    !end if
53 
54    ! 1.0 Convert all temperatures to virtual temperatures
55    ! ----------------------------------------------------
56    tv =  temp/(1.0 - 0.6*qm)
57 
58    ! 2.0 Construct averages for NESDIS thick layers
59    ! ----------------------------------------------
60 
61    pred(1) = Kth*sum( tv(12:nlevels)*DLP(12:nlevels) )
62    pred(2) = Kth*sum( tv(1:11) *DLP(1:11) )
63    pred(3) = T_skin
64    pred(4) = Kpc*sum( qm(1:nlevels)*DP(1:nlevels) )
65 
66    !if (npred == 6) then
67    ! pred(5) = Kth*sum((tv(5:8)  + tv(4:7))*DLP(4:7))
68    ! pred(6) = Kth*sum((tv(8:13)  + tv(7:12))*DLP(7:12))
69    !end if
70 
71    if (trace_use) call da_trace_exit("da_predictor_crtm")
72 
73 
74 end subroutine da_predictor_crtm
75