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