LMDZ
rrtm_taumol3.F90
Go to the documentation of this file.
1 !----------------------------------------------------------------------------
2 SUBROUTINE rrtm_taumol3 (KLEV,TAU,&
3  &tauaerl,fac00,fac01,fac10,fac11,forfac,jp,jt,jt1,oneminus,&
4  &colh2o,colco2,coln2o,laytrop,selffac,selffrac,indself,pfrac)
5 
6 ! BAND 3: 500-630 cm-1 (low - H2O,CO2; high - H2O,CO2)
7 
8 ! Modifications
9 !
10 ! D Salmond 2000-05-15 speed-up
11 
12 
13 #include "tsmbkind.h"
14 
15 USE parrrtm , ONLY : jplay ,jpband ,jpgpt ,jpxsec , ngs2
16 USE yoerrtwn , ONLY : ng ,nspa ,nspb
17 USE yoerrta3 , ONLY : ng3 ,absa ,absb ,fracrefa, fracrefb,&
18  &forref ,ka ,kb ,selfref , absn2oa ,&
20  &strrat
21 
22 ! Input
23 !#include "yoeratm.h"
24 
25 ! REAL TAUAER(JPLAY)
26 
27 IMPLICIT NONE
28 
29 ! Output
30 real_b :: tau(jpgpt,jplay)
31 
32 ! DUMMY INTEGER SCALARS
33 integer_m :: klev
34 
35 !- from AER
36 real_b :: tauaerl(jplay,jpband)
37 
38 !- from INTFAC
39 real_b :: fac00(jplay)
40 real_b :: fac01(jplay)
41 real_b :: fac10(jplay)
42 real_b :: fac11(jplay)
43 real_b :: forfac(jplay)
44 
45 !- from INTIND
46 integer_m :: jp(jplay)
47 integer_m :: jt(jplay)
48 integer_m :: jt1(jplay)
49 
50 !- from PRECISE
51 real_b :: oneminus
52 
53 !- from PROFDATA
54 real_b :: colh2o(jplay)
55 real_b :: colco2(jplay)
56 real_b :: coln2o(jplay)
57 integer_m :: laytrop
58 
59 !- from SELF
60 real_b :: selffac(jplay)
61 real_b :: selffrac(jplay)
62 integer_m :: indself(jplay)
63 
64 !- from SP
65 real_b :: pfrac(jpgpt,jplay)
66 
67 integer_m :: ijs(jplay)
68 real_b :: zfs(jplay),speccomb(jplay)
69 integer_m :: ind0(jplay),ind1(jplay),inds(jplay)
70 real_b :: n2omult(jplay)
71 
72 ! LOCAL INTEGER SCALARS
73 integer_m :: ig, js, lay, ns
74 
75 ! LOCAL REAL SCALARS
76 real_b :: colref1, colref2, currn2o, fac000, fac001,&
77  &fac010, fac011, fac100, fac101, fac110, fac111, &
78  &fp, fs, ratio, specmult, specparm, wcomb1, &
79  &wcomb2
80 
81 ! EQUIVALENCE (TAUAERL(1,3),TAUAER)
82 
83 ! Compute the optical depth by interpolating in ln(pressure),
84 ! temperature, and appropriate species. Below LAYTROP, the water
85 ! vapor self-continuum is interpolated (in temperature) separately.
86 
87 DO lay = 1, laytrop
88  speccomb(lay) = colh2o(lay) + strrat*colco2(lay)
89  specparm = colh2o(lay)/speccomb(lay)
90  specparm=min(oneminus,specparm)
91  specmult = 8._jprb*(specparm)
92  js = 1 + int(specmult)
93  fs = mod(specmult,_one_)
94  IF (js == 8) THEN
95  IF (fs >= 0.9_jprb) THEN
96  js = 9
97  fs = 10._jprb * (fs - 0.9_jprb)
98  ELSE
99  fs = fs/0.9_jprb
100  ENDIF
101  ENDIF
102 
103  ns = js + int(fs + _half_)
104  fp = fac01(lay) + fac11(lay)
105  ind0(lay) = ((jp(lay)-1)*5+(jt(lay)-1))*nspa(3) + js
106  ind1(lay) = (jp(lay)*5+(jt1(lay)-1))*nspa(3) + js
107  inds(lay) = indself(lay)
108  colref1 = n2oref(jp(lay))
109  colref2 = n2oref(jp(lay)+1)
110  IF (ns == 10) THEN
111  wcomb1 = _one_/h2oref(jp(lay))
112  wcomb2 = _one_/h2oref(jp(lay)+1)
113  ELSE
114  wcomb1 = (_one_-etaref(ns))/(strrat * co2ref(jp(lay)))
115  wcomb2 = (_one_-etaref(ns))/(strrat * co2ref(jp(lay)+1))
116  ENDIF
117  ratio = (colref1*wcomb1)+fp*((colref2*wcomb2)-(colref1*wcomb1))
118  currn2o = speccomb(lay) * ratio
119  n2omult(lay) = coln2o(lay) - currn2o
120 
121  zfs(lay)=fs
122  ijs(lay)=js
123 
124 ENDDO
125 
126 !-- DS_000515
127 DO ig = 1, ng3
128  DO lay = 1, laytrop
129 !-- DS_000515
130 
131  fs=zfs(lay)
132  js=ijs(lay)
133 
134 !---jjm
135 ! FAC000 = (_ONE_ - FS) * FAC00(LAY)
136 ! FAC010 = (_ONE_ - FS) * FAC10(LAY)
137 ! FAC100 = FS * FAC00(LAY)
138 ! FAC110 = FS * FAC10(LAY)
139 ! FAC001 = (_ONE_ - FS) * FAC01(LAY)
140 ! FAC011 = (_ONE_ - FS) * FAC11(LAY)
141 ! FAC101 = FS * FAC01(LAY)
142 ! FAC111 = FS * FAC11(LAY)
143 !------
144 
145  tau(ngs2+ig,lay) = speccomb(lay) * &
146 !-- DS_000515
147  & ( (1. - fs) *(fac00(lay) * absa(ind0(lay) ,ig) + &
148  & fac10(lay) * absa(ind0(lay)+10,ig) + &
149  & fac01(lay) * absa(ind1(lay) ,ig) + &
150  & fac11(lay) * absa(ind1(lay)+10,ig))+ &
151  & fs *(fac00(lay) * absa(ind0(lay)+ 1,ig) + &
152  & fac10(lay) * absa(ind0(lay)+11,ig) + &
153  & fac01(lay) * absa(ind1(lay)+ 1,ig) + &
154  & fac11(lay) * absa(ind1(lay)+11,ig))) + &
155 ! &(FAC000 * ABSA(IND0(LAY) ,IG) +&
156 ! & FAC100 * ABSA(IND0(LAY)+ 1,IG) +&
157 ! & FAC010 * ABSA(IND0(LAY)+10,IG) +&
158 ! & FAC110 * ABSA(IND0(LAY)+11,IG) +&
159 ! & FAC001 * ABSA(IND1(LAY), IG) +&
160 ! & FAC101 * ABSA(IND1(LAY)+ 1,IG) +&
161 ! & FAC011 * ABSA(IND1(LAY)+10,IG) +&
162 ! & FAC111 * ABSA(IND1(LAY)+11,IG))+&
163 !-- DS_000515
164  &colh2o(lay) * &
165  &selffac(lay) * (selfref(inds(lay),ig) + &
166  &selffrac(lay) *&
167  &(selfref(inds(lay)+1,ig) - selfref(inds(lay),ig))&
168  &+ forfac(lay) * forref(ig) ) &
169  &+ n2omult(lay) * absn2oa(ig) &
170  &+ tauaerl(lay,3)
171  pfrac(ngs2+ig,lay) = fracrefa(ig,js) + fs *&
172  &(fracrefa(ig,js+1) - fracrefa(ig,js))
173  ENDDO
174 ENDDO
175 
176 DO lay = laytrop+1, klev
177  speccomb(lay) = colh2o(lay) + strrat*colco2(lay)
178  specparm = colh2o(lay)/speccomb(lay)
179  specparm=min(oneminus,specparm)
180  specmult = 4._jprb*(specparm)
181  js = 1 + int(specmult)
182  fs = mod(specmult,_one_)
183  ns = js + int(fs + _half_)
184  fp = fac01(lay) + fac11(lay)
185  ind0(lay) = ((jp(lay)-13)*5+(jt(lay)-1))*nspb(3) + js
186  ind1(lay) = ((jp(lay)-12)*5+(jt1(lay)-1))*nspb(3) + js
187  colref1 = n2oref(jp(lay))
188  colref2 = n2oref(jp(lay)+1)
189  IF (ns == 5) THEN
190  wcomb1 = _one_/h2oref(jp(lay))
191  wcomb2 = _one_/h2oref(jp(lay)+1)
192  ELSE
193  wcomb1 = (_one_-etaref(ns))/(strrat * co2ref(jp(lay)))
194  wcomb2 = (_one_-etaref(ns))/(strrat * co2ref(jp(lay)+1))
195  ENDIF
196  ratio = (colref1*wcomb1)+fp*((colref2*wcomb2)-(colref1*wcomb1))
197  currn2o = speccomb(lay) * ratio
198  n2omult(lay) = coln2o(lay) - currn2o
199 
200  zfs(lay)=fs
201  ijs(lay)=js
202 
203 ENDDO
204 
205 DO lay = laytrop+1, klev
206 
207  fs=zfs(lay)
208  js=ijs(lay)
209 !---jjm
210 ! FAC000 = (_ONE_ - FS) * FAC00(LAY)
211 ! FAC010 = (_ONE_ - FS) * FAC10(LAY)
212 ! FAC100 = FS * FAC00(LAY)
213 ! FAC110 = FS * FAC10(LAY)
214 ! FAC001 = (_ONE_ - FS) * FAC01(LAY)
215 ! FAC011 = (_ONE_ - FS) * FAC11(LAY)
216 ! FAC101 = FS * FAC01(LAY)
217 ! FAC111 = FS * FAC11(LAY)
218 !---
219 
220  DO ig = 1, ng3
221  tau(ngs2+ig,lay) = speccomb(lay) * &
222 !-- DS_000515
223  & ( (1. - fs) *(fac00(lay) * absb(ind0(lay) ,ig) + &
224  & fac10(lay) * absb(ind0(lay)+5,ig) + &
225  & fac01(lay) * absb(ind1(lay) ,ig) + &
226  & fac11(lay) * absb(ind1(lay)+5,ig))+ &
227  & fs *(fac00(lay) * absb(ind0(lay)+1,ig) + &
228  & fac10(lay) * absb(ind0(lay)+6,ig) + &
229  & fac01(lay) * absb(ind1(lay)+1,ig) + &
230  & fac11(lay) * absb(ind1(lay)+6,ig))) &
231 ! &(FAC000 * ABSB(IND0(LAY) ,IG) +&
232 ! & FAC100 * ABSB(IND0(LAY)+1,IG) +&
233 ! & FAC010 * ABSB(IND0(LAY)+5,IG) +&
234 ! & FAC110 * ABSB(IND0(LAY)+6,IG) +&
235 ! & FAC001 * ABSB(IND1(LAY) ,IG) +&
236 ! & FAC101 * ABSB(IND1(LAY)+1,IG) +&
237 ! & FAC011 * ABSB(IND1(LAY)+5,IG) +&
238 ! & FAC111 * ABSB(IND1(LAY)+6,IG))&
239 !-- DS_000515
240  &+ colh2o(lay)*forfac(lay)*forref(ig) &
241  &+ n2omult(lay) * absn2ob(ig)&
242  &+ tauaerl(lay,3)
243  pfrac(ngs2+ig,lay) = fracrefb(ig,js) + fs *&
244  &(fracrefb(ig,js+1) - fracrefb(ig,js))
245  ENDDO
246 ENDDO
247 
248 RETURN
249 END SUBROUTINE rrtm_taumol3
real(kind=jprb), dimension(ng3, 10) fracrefa
Definition: yoerrta3.F90:16
real(kind=jprb), dimension(ng3, 5) fracrefb
Definition: yoerrta3.F90:16
integer(kind=jpim), parameter ng3
Definition: yoerrta3.F90:14
real(kind=jprb), dimension(1175, ng3) absb
Definition: yoerrta3.F90:27
real(kind=jprb), dimension(16) absn2ob
Definition: yoerrta3.F90:20
integer, save klev
Definition: dimphy.F90:7
real(kind=jprb), dimension(10, 5, 13, ng3) ka
Definition: yoerrta3.F90:26
integer(kind=jpim), parameter jpgpt
Definition: parrrtm.F90:21
real(kind=jprb), dimension(16) forref
Definition: yoerrta3.F90:18
real(kind=jprb), dimension(650, ng3) absa
Definition: yoerrta3.F90:26
subroutine rrtm_taumol3(KLEV, P_TAU, P_TAUAERL, P_FAC00, P_FAC01, P_FAC10, P_FAC11, P_FORFAC, K_JP, K_JT, K_JT1, P_ONEMINUS, P_COLH2O, P_COLCO2, P_COLN2O, K_LAYTROP, P_SELFFAC, P_SELFFRAC, K_INDSELF, PFRAC)
Definition: rrtm_taumol3.F90:5
integer(kind=jpim), parameter jpband
Definition: parrrtm.F90:18
real(kind=jprb), dimension(5, 5, 13:59, ng3) kb
Definition: yoerrta3.F90:27
real(kind=jprb), dimension(59) h2oref
Definition: yoerrta3.F90:22
real(kind=jprb), dimension(59) co2ref
Definition: yoerrta3.F90:24
real(kind=jprb), dimension(59) n2oref
Definition: yoerrta3.F90:23
real(kind=jprb), dimension(16) absn2oa
Definition: yoerrta3.F90:19
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(10) etaref
Definition: yoerrta3.F90:21
real(kind=jprb) strrat
Definition: yoerrta3.F90:29
integer(kind=jpim), parameter ngs2
Definition: parrrtm.F90:41
integer(kind=jpim), parameter jplay
Definition: parrrtm.F90:15
real(kind=jprb), dimension(10, ng3) selfref
Definition: yoerrta3.F90:28
integer(kind=jpim), parameter jpxsec
Definition: parrrtm.F90:19