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