LMDZ
rrtm_taumol5.F90
Go to the documentation of this file.
1 !----------------------------------------------------------------------------
2 SUBROUTINE rrtm_taumol5 (KLEV,TAU,WX,&
3  &tauaerl,fac00,fac01,fac10,fac11,forfac,jp,jt,jt1,oneminus,&
4  &colh2o,colco2, colo3,laytrop,selffac,selffrac,indself,pfrac)
5 
6 ! BAND 5: 700-820 cm-1 (low - H2O,CO2; high - O3,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 , ngs4
16 USE yoerrtwn , ONLY : ng ,nspa ,nspb
17 USE yoerrta5 , ONLY : ng5 ,absa ,absb ,ccl4 , fracrefa, fracrefb,&
19 
20 ! Input
21 !#include "yoeratm.h"
22 
23 ! REAL TAUAER(JPLAY)
24 
25 
26 IMPLICIT NONE
27 
28 real_b :: wx(jpxsec,jplay) ! Amount of trace gases
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 :: colo3(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 
71 ! LOCAL INTEGER SCALARS
72 integer_m :: ig, js, lay
73 
74 ! LOCAL REAL SCALARS
75 real_b :: fac000, fac001, fac010, fac011, fac100, fac101,&
76  &fac110, fac111, fs, specmult, specparm
77 
78 
79 ! EQUIVALENCE (TAUAERL(1,5),TAUAER)
80 
81 ! Compute the optical depth by interpolating in ln(pressure),
82 ! temperature, and appropriate species. Below LAYTROP, the water
83 ! vapor self-continuum is interpolated (in temperature) separately.
84 
85 DO lay = 1, laytrop
86  speccomb(lay) = colh2o(lay) + strrat1*colco2(lay)
87  specparm = colh2o(lay)/speccomb(lay)
88  specparm=min(oneminus,specparm)
89  specmult = 8._jprb*(specparm)
90  js = 1 + int(specmult)
91  fs = mod(specmult,_one_)
92  ind0(lay) = ((jp(lay)-1)*5+(jt(lay)-1))*nspa(5) + js
93  ind1(lay) = (jp(lay)*5+(jt1(lay)-1))*nspa(5) + js
94  inds(lay) = indself(lay)
95 
96  zfs(lay)=fs
97  ijs(lay)=js
98 
99 ENDDO
100 
101 !-- DS_000515
102 DO ig = 1, ng5
103  DO lay = 1, laytrop
104 !-- DS_000515
105 
106  fs=zfs(lay)
107  js=ijs(lay)
108 !---jjm
109 ! FAC000 = (_ONE_ - FS) * FAC00(LAY)
110 ! FAC010 = (_ONE_ - FS) * FAC10(LAY)
111 ! FAC100 = FS * FAC00(LAY)
112 ! FAC110 = FS * FAC10(LAY)
113 ! FAC001 = (_ONE_ - FS) * FAC01(LAY)
114 ! FAC011 = (_ONE_ - FS) * FAC11(LAY)
115 ! FAC101 = FS * FAC01(LAY)
116 ! FAC111 = FS * FAC11(LAY)
117 !-----
118 
119  tau(ngs4+ig,lay) = speccomb(lay) * &
120 !-- DS_000515
121  &( (1. - fs) *(fac00(lay) * absa(ind0(lay) ,ig) + &
122  & fac10(lay) * absa(ind0(lay)+ 9,ig) + &
123  & fac01(lay) * absa(ind1(lay) ,ig) + &
124  & fac11(lay) * absa(ind1(lay)+ 9,ig))+ &
125  & fs *(fac00(lay) * absa(ind0(lay)+ 1,ig) + &
126  & fac10(lay) * absa(ind0(lay)+10,ig) + &
127  & fac01(lay) * absa(ind1(lay)+ 1,ig) + &
128  & fac11(lay) * absa(ind1(lay)+10,ig))) + &
129 ! &(FAC000 * ABSA(IND0(LAY) ,IG) +&
130 ! & FAC100 * ABSA(IND0(LAY)+ 1,IG) +&
131 ! & FAC010 * ABSA(IND0(LAY)+ 9,IG) +&
132 ! & FAC110 * ABSA(IND0(LAY)+10,IG) +&
133 ! & FAC001 * ABSA(IND1(LAY) ,IG) +&
134 ! & FAC101 * ABSA(IND1(LAY)+ 1,IG) +&
135 ! & FAC011 * ABSA(IND1(LAY)+ 9,IG) +&
136 ! & FAC111 * ABSA(IND1(LAY)+10,IG))+&
137 !-- DS_000515
138  &colh2o(lay) * &
139  &selffac(lay) * (selfref(inds(lay),ig) + &
140  &selffrac(lay) *&
141  &(selfref(inds(lay)+1,ig) - selfref(inds(lay),ig)))&
142  &+ wx(1,lay) * ccl4(ig)&
143  &+ tauaerl(lay,5)
144  pfrac(ngs4+ig,lay) = fracrefa(ig,js) + fs *&
145  &(fracrefa(ig,js+1) - fracrefa(ig,js))
146  ENDDO
147 ENDDO
148 
149 DO lay = laytrop+1, klev
150  speccomb(lay) = colo3(lay) + strrat2*colco2(lay)
151  specparm = colo3(lay)/speccomb(lay)
152  specparm=min(oneminus,specparm)
153  specmult = 4._jprb*(specparm)
154  js = 1 + int(specmult)
155  fs = mod(specmult,_one_)
156  ind0(lay) = ((jp(lay)-13)*5+(jt(lay)-1))*nspb(5) + js
157  ind1(lay) = ((jp(lay)-12)*5+(jt1(lay)-1))*nspb(5) + js
158  zfs(lay)=fs
159  ijs(lay)=js
160 ENDDO
161 
162 DO lay = laytrop+1, klev
163  fs=zfs(lay)
164  js=ijs(lay)
165 !----jjm
166 ! FAC000 = (_ONE_ - FS) * FAC00(LAY)
167 ! FAC010 = (_ONE_ - FS) * FAC10(LAY)
168 ! FAC100 = FS * FAC00(LAY)
169 ! FAC110 = FS * FAC10(LAY)
170 ! FAC001 = (_ONE_ - FS) * FAC01(LAY)
171 ! FAC011 = (_ONE_ - FS) * FAC11(LAY)
172 ! FAC101 = FS * FAC01(LAY)
173 ! FAC111 = FS * FAC11(LAY)
174 !----
175  DO ig = 1, ng5
176 !-- DS_000515
177  tau(ngs4+ig,lay) = speccomb(lay) * &
178  &( (1. - fs) *(fac00(lay) * absb(ind0(lay) ,ig) + &
179  & fac10(lay) * absb(ind0(lay)+5,ig) + &
180  & fac01(lay) * absb(ind1(lay) ,ig) + &
181  & fac11(lay) * absb(ind1(lay)+5,ig))+ &
182  & fs *(fac00(lay) * absb(ind0(lay)+1,ig) + &
183  & fac10(lay) * absb(ind0(lay)+6,ig) + &
184  & fac01(lay) * absb(ind1(lay)+1,ig) + &
185  & fac11(lay) * absb(ind1(lay)+6,ig))) &
186 ! &(FAC000 * ABSB(IND0(LAY) ,IG) +&
187 ! & FAC100 * ABSB(IND0(LAY)+1,IG) +&
188 ! & FAC010 * ABSB(IND0(LAY)+5,IG) +&
189 ! & FAC110 * ABSB(IND0(LAY)+6,IG) +&
190 ! & FAC001 * ABSB(IND1(LAY) ,IG) +&
191 ! & FAC101 * ABSB(IND1(LAY)+1,IG) +&
192 ! & FAC011 * ABSB(IND1(LAY)+5,IG) +&
193 ! & FAC111 * ABSB(IND1(LAY)+6,IG))&
194 !-- DS_000515
195  &+ wx(1,lay) * ccl4(ig)&
196  &+ tauaerl(lay,5)
197  pfrac(ngs4+ig,lay) = fracrefb(ig,js) + fs *&
198  &(fracrefb(ig,js+1) - fracrefb(ig,js))
199  ENDDO
200 ENDDO
201 
202 RETURN
203 END SUBROUTINE rrtm_taumol5
real(kind=jprb) strrat2
Definition: yoerrta5.F90:24
real(kind=jprb), dimension(9, 5, 13, ng5) ka
Definition: yoerrta5.F90:20
subroutine rrtm_taumol5(KLEV, P_TAU, P_WX, 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_COLO3, K_LAYTROP, P_SELFFAC, P_SELFFRAC, K_INDSELF, PFRAC)
Definition: rrtm_taumol5.F90:5
real(kind=jprb), dimension(ng5, 9) fracrefa
Definition: yoerrta5.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(1175, ng5) absb
Definition: yoerrta5.F90:21
real(kind=jprb), dimension(10, ng5) selfref
Definition: yoerrta5.F90:22
real(kind=jprb), dimension(ng5) ccl4
Definition: yoerrta5.F90:18
integer(kind=jpim), parameter ng5
Definition: yoerrta5.F90:14
integer(kind=jpim), dimension(16) nspb
Definition: yoerrtwn.F90:13
integer(kind=jpim), dimension(16) ng
Definition: yoerrtwn.F90:11
integer(kind=jpim), parameter ngs4
Definition: parrrtm.F90:43
integer(kind=jpim), dimension(16) nspa
Definition: yoerrtwn.F90:12
real(kind=jprb), dimension(ng5, 5) fracrefb
Definition: yoerrta5.F90:16
real(kind=jprb), dimension(585, ng5) absa
Definition: yoerrta5.F90:20
integer(kind=jpim), parameter jplay
Definition: parrrtm.F90:15
real(kind=jprb) strrat1
Definition: yoerrta5.F90:23
real(kind=jprb), dimension(5, 5, 13:59, ng5) kb
Definition: yoerrta5.F90:21
integer(kind=jpim), parameter jpxsec
Definition: parrrtm.F90:19