LMDZ
rrtm_taumol2.F90
Go to the documentation of this file.
1 !----------------------------------------------------------------------------
2 SUBROUTINE rrtm_taumol2 (KLEV,TAU,COLDRY,&
3  &tauaerl,fac00,fac01,fac10,fac11,forfac,jp,jt,jt1,&
4  &colh2o,laytrop,selffac,selffrac,indself,pfrac)
5 
6 ! BAND 2: 250-500 cm-1 (low - H2O; high - H2O)
7 
8 ! Modifications
9 !
10 ! D Salmond 2000-05-15 speed-up
11 ! JJMorcrette 2000-05-17 speed-up
12 ! JJMorcrette 2000-07-14 bugfix
13 
14 
15 #include "tsmbkind.h"
16 
17 USE parrrtm , ONLY : jplay ,jpband ,jpgpt ,jpxsec , ngs1
18 USE yoerrtwn , ONLY : ng ,nspa ,nspb
19 USE yoerrta2 , ONLY : ng2 ,absa ,absb ,fracrefa, fracrefb,&
21 USE yoerrtbg2, ONLY : corr1 ,corr2
22 
23 ! Input
24 !#include "yoeratm.h"
25 
26 
27 IMPLICIT NONE
28 
29 real_b :: coldry(jplay)
30 
31 ! Output
32 real_b :: tau(jpgpt,jplay)
33 
34 ! DUMMY INTEGER SCALARS
35 integer_m :: klev
36 
37 !- from AER
38 real_b :: tauaerl(jplay,jpband)
39 
40 !- from INTFAC
41 real_b :: fac00(jplay)
42 real_b :: fac01(jplay)
43 real_b :: fac10(jplay)
44 real_b :: fac11(jplay)
45 real_b :: forfac(jplay)
46 
47 !- from INTIND
48 integer_m :: jp(jplay)
49 integer_m :: jt(jplay)
50 integer_m :: jt1(jplay)
51 
52 !- from PROFDATA
53 real_b :: colh2o(jplay)
54 integer_m :: laytrop
55 
56 !- from SELF
57 real_b :: selffac(jplay)
58 real_b :: selffrac(jplay)
59 integer_m :: indself(jplay)
60 
61 !- from SP
62 real_b :: pfrac(jpgpt,jplay)
63 
64 real_b :: fc00(jplay),fc01(jplay),fc10(jplay),fc11(jplay)
65 ! REAL TAUAER(JPLAY)
66 real_b :: fracint(jplay)
67 integer_m :: ind0(jplay),ind1(jplay),inds(jplay), index(jplay)
68 
69 ! LOCAL INTEGER SCALARS
70 integer_m :: ifp, ifrac, ig, jfrac, lay
71 
72 ! LOCAL REAL SCALARS
73 real_b :: fp, h2oparam, water
74 
75 ! EQUIVALENCE (TAUAERL(1,2),TAUAER)
76 
77 ! Compute the optical depth by interpolating in ln(pressure) and
78 ! temperature. Below LAYTROP, the water vapor self-continuum is
79 ! interpolated (in temperature) separately.
80 
81 DO lay = 1, laytrop
82  water = 1.e20_jprb * colh2o(lay) / coldry(lay)
83  h2oparam = water/(water +.002_jprb)
84 
85 ! DO IFRAC = 2, 12
86 ! IF (H2OPARAM >= REFPARAM(IFRAC)) GO TO 1900
87 ! ENDDO
88 ! 1900 CONTINUE
89 ! FRACINT(LAY) = (H2OPARAM-REFPARAM(IFRAC))/&
90 ! &(REFPARAM(IFRAC-1)-REFPARAM(IFRAC))
91 
92  IF (h2oparam >= refparam(2)) THEN
93  index(lay)=2
94  ELSE
95  DO jfrac = 2, 12
96  IF (h2oparam < refparam(jfrac)) THEN
97  index(lay)=jfrac+1
98  END IF
99  ENDDO
100  ENDIF
101 
102 !---- JJM_000714
103  ifrac=index(lay)
104  fracint(lay) = (h2oparam-refparam(ifrac))/&
105  &(refparam(ifrac-1)-refparam(ifrac))
106 ENDDO
107 
108 DO lay = 1, laytrop
109 
110  fp = fac11(lay) + fac01(lay)
111  ifp = 2.e2_jprb*fp+_half_
112 
113 !---MI 981104
114 ! IF (IFP.LE.0) IFP=0
115 
116  ifp=max(0,int(ifp))
117 
118  fc00(lay) = fac00(lay) * corr2(ifp)
119  fc10(lay) = fac10(lay) * corr2(ifp)
120  fc01(lay) = fac01(lay) * corr1(ifp)
121  fc11(lay) = fac11(lay) * corr1(ifp)
122  ind0(lay) = ((jp(lay)-1)*5+(jt(lay)-1))*nspa(2) + 1
123  ind1(lay) = (jp(lay)*5+(jt1(lay)-1))*nspa(2) + 1
124  inds(lay) = indself(lay)
125 ENDDO
126 
127 !-- DS_000515
128 DO ig = 1, ng2
129  DO lay = 1, laytrop
130 !-- JJM_000714
131  ifrac=index(lay)
132 !-- DS_000515
133  tau(ngs1+ig,lay) = colh2o(lay) *&
134  &(fc00(lay) * absa(ind0(lay) ,ig) +&
135  & fc10(lay) * absa(ind0(lay)+1,ig) +&
136  & fc01(lay) * absa(ind1(lay) ,ig) +&
137  & fc11(lay) * absa(ind1(lay)+1,ig) +&
138  &selffac(lay) * (selfref(inds(lay),ig) + &
139  &selffrac(lay) *&
140  &(selfref(inds(lay)+1,ig) - selfref(inds(lay),ig)))&
141  &+ forfac(lay) * forref(ig) ) &
142  &+ tauaerl(lay,2)
143  pfrac(ngs1+ig,lay) = fracrefa(ig,ifrac) + fracint(lay) *&
144  &(fracrefa(ig,ifrac-1)-fracrefa(ig,ifrac))
145  ENDDO
146 ENDDO
147 
148 DO lay = laytrop+1, klev
149  fp = fac11(lay) + fac01(lay)
150  ifp = 2.e2_jprb*fp+_half_
151 
152 !---MI 981104
153  IF (ifp <= 0) ifp=0
154 
155  fc00(lay) = fac00(lay) * corr2(ifp)
156  fc10(lay) = fac10(lay) * corr2(ifp)
157  fc01(lay) = fac01(lay) * corr1(ifp)
158  fc11(lay) = fac11(lay) * corr1(ifp)
159  ind0(lay) = ((jp(lay)-13)*5+(jt(lay)-1))*nspb(2) + 1
160  ind1(lay) = ((jp(lay)-12)*5+(jt1(lay)-1))*nspb(2) + 1
161 ENDDO
162 
163 !-- JJM_000517
164 DO ig = 1, ng2
165  DO lay = laytrop+1, klev
166 !-- JJM_000517
167  tau(ngs1+ig,lay) = colh2o(lay) *&
168  &(fc00(lay) * absb(ind0(lay) ,ig) +&
169  & fc10(lay) * absb(ind0(lay)+1,ig) +&
170  & fc01(lay) * absb(ind1(lay) ,ig) +&
171  & fc11(lay) * absb(ind1(lay)+1,ig)&
172  &+ forfac(lay) * forref(ig) ) &
173  &+ tauaerl(lay,2)
174  pfrac(ngs1+ig,lay) = fracrefb(ig)
175  ENDDO
176 ENDDO
177 
178 RETURN
179 END SUBROUTINE rrtm_taumol2
real(kind=jprb), dimension(13) refparam
Definition: yoerrta2.F90:18
real(kind=jprb), dimension(0:200) corr2
Definition: yoerrtbg2.F90:16
integer, save klev
Definition: dimphy.F90:7
integer(kind=jpim), parameter jpgpt
Definition: parrrtm.F90:21
integer(kind=jpim), parameter jpband
Definition: parrrtm.F90:18
real(kind=jprb), dimension(5, 13, ng2) ka
Definition: yoerrta2.F90:19
real(kind=jprb), dimension(ng2) forref
Definition: yoerrta2.F90:21
real(kind=jprb), dimension(235, ng2) absb
Definition: yoerrta2.F90:20
integer(kind=jpim), dimension(16) nspb
Definition: yoerrtwn.F90:13
integer(kind=jpim), dimension(16) ng
Definition: yoerrtwn.F90:11
integer(kind=jpim), dimension(16) nspa
Definition: yoerrtwn.F90:12
real(kind=jprb), dimension(65, ng2) absa
Definition: yoerrta2.F90:19
real(kind=jprb), dimension(5, 13:59, ng2) kb
Definition: yoerrta2.F90:20
real(kind=jprb), dimension(ng2, 13) fracrefa
Definition: yoerrta2.F90:18
real(kind=jprb), dimension(10, ng2) selfref
Definition: yoerrta2.F90:21
integer(kind=jpim), parameter jplay
Definition: parrrtm.F90:15
real(kind=jprb), dimension(ng2) fracrefb
Definition: yoerrta2.F90:18
integer(kind=jpim), parameter ng2
Definition: yoerrta2.F90:14
subroutine rrtm_taumol2(KLEV, P_TAU, P_COLDRY, P_TAUAERL, P_FAC00, P_FAC01, P_FAC10, P_FAC11, P_FORFAC, K_JP, K_JT, K_JT1, P_COLH2O, K_LAYTROP, P_SELFFAC, P_SELFFRAC, K_INDSELF, PFRAC)
Definition: rrtm_taumol2.F90:5
integer(kind=jpim), parameter ngs1
Definition: parrrtm.F90:40
real(kind=jprb), dimension(0:200) corr1
Definition: yoerrtbg2.F90:15
integer(kind=jpim), parameter jpxsec
Definition: parrrtm.F90:19