LMDZ
rrtm_taumol16.F90
Go to the documentation of this file.
1 !----------------------------------------------------------------------------
2 SUBROUTINE rrtm_taumol16 (KLEV,TAU,&
3  &tauaerl,fac00,fac01,fac10,fac11,jp,jt,jt1,oneminus,&
4  &colh2o,colch4,laytrop,selffac,selffrac,indself,pfrac)
5 
6 ! BAND 16: 2600-3000 cm-1 (low - H2O,CH4; high - nothing)
7 
8 ! Modifications
9 !
10 ! D Salmond 1999-07-14 speed-up
11 
12 
13 #include "tsmbkind.h"
14 
15 USE parrrtm , ONLY : jplay ,jpband ,jpgpt ,jpxsec ,ngs15
16 USE yoerrtwn , ONLY : ng ,nspa ,nspb
18 
19 
20 IMPLICIT NONE
21 
22 ! Output
23 real_b :: tau(jpgpt,jplay)
24 
25 ! DUMMY INTEGER SCALARS
26 integer_m :: klev
27 
28 !- from AER
29 real_b :: tauaerl(jplay,jpband)
30 
31 !- from INTFAC
32 real_b :: fac00(jplay)
33 real_b :: fac01(jplay)
34 real_b :: fac10(jplay)
35 real_b :: fac11(jplay)
36 
37 !- from INTIND
38 integer_m :: jp(jplay)
39 integer_m :: jt(jplay)
40 integer_m :: jt1(jplay)
41 
42 !- from PRECISE
43 real_b :: oneminus
44 
45 !- from PROFDATA
46 real_b :: colh2o(jplay)
47 real_b :: colch4(jplay)
48 integer_m :: laytrop
49 
50 !- from SELF
51 real_b :: selffac(jplay)
52 real_b :: selffrac(jplay)
53 integer_m :: indself(jplay)
54 
55 !- from SP
56 real_b :: pfrac(jpgpt,jplay)
57 
58 
59 ! LOCAL INTEGER SCALARS
60 integer_m :: ig, ind0, ind1, inds, js, lay
61 
62 ! LOCAL REAL SCALARS
63 real_b :: fac000, fac001, fac010, fac011, fac100, fac101,&
64  &fac110, fac111, fs, speccomb, specmult, specparm
65 
66 
67 ! Input
68 !#include "yoeratm.h"
69 
70 ! REAL TAUAER(JPLAY)
71 ! EQUIVALENCE (TAUAERL(1,16),TAUAER)
72 
73 ! Compute the optical depth by interpolating in ln(pressure),
74 ! temperature, and appropriate species. Below LAYTROP, the water
75 ! vapor self-continuum is interpolated (in temperature) separately.
76 
77 DO lay = 1, laytrop
78  speccomb = colh2o(lay) + strrat*colch4(lay)
79  specparm = colh2o(lay)/speccomb
80  specparm = min(specparm,oneminus)
81  specmult = 8._jprb*(specparm)
82  js = 1 + int(specmult)
83  fs = mod(specmult,_one_)
84 !----jjm
85  fac000 = (_one_ - fs) * fac00(lay)
86  fac010 = (_one_ - fs) * fac10(lay)
87  fac100 = fs * fac00(lay)
88  fac110 = fs * fac10(lay)
89  fac001 = (_one_ - fs) * fac01(lay)
90  fac011 = (_one_ - fs) * fac11(lay)
91  fac101 = fs * fac01(lay)
92  fac111 = fs * fac11(lay)
93 !-----
94  ind0 = ((jp(lay)-1)*5+(jt(lay)-1))*nspa(16) + js
95  ind1 = (jp(lay)*5+(jt1(lay)-1))*nspa(16) + js
96  inds = indself(lay)
97 ! DO IG = 1, NG16
98 !-- DS_990714
99  ig=1
100  tau(ngs15+ig,lay) = speccomb *&
101 ! &((1. - FS)*(FAC00(LAY) * ABSA(IND0 ,IG) +
102 ! & FAC10(LAY) * ABSA(IND0+ 9,IG) +
103 ! & FAC01(LAY) * ABSA(IND1 ,IG) +
104 ! & FAC11(LAY) * ABSA(IND1+ 9,IG))+
105 ! & FS * ( FAC01(LAY) * ABSA(IND1+ 1,IG) +
106 ! & FAC10(LAY) * ABSA(IND0+10,IG) +
107 ! & FAC00(LAY) * ABSA(IND0+ 1,IG) +
108 ! & FAC11(LAY) * ABSA(IND1+10,IG))) +
109  &(fac000 * absa(ind0 ,ig) +&
110  & fac100 * absa(ind0+ 1,ig) +&
111  & fac010 * absa(ind0+ 9,ig) +&
112  & fac110 * absa(ind0+10,ig) +&
113  & fac001 * absa(ind1 ,ig) +&
114  & fac101 * absa(ind1+ 1,ig) +&
115  & fac011 * absa(ind1+ 9,ig) +&
116  & fac111 * absa(ind1+10,ig))+&
117  &colh2o(lay) * &
118  &selffac(lay) * (selfref(inds,ig) + &
119  &selffrac(lay) *&
120  &(selfref(inds+1,ig) - selfref(inds,ig)))&
121  &+ tauaerl(lay,16)
122  pfrac(ngs15+ig,lay) = fracrefa(ig,js) + fs *&
123  &(fracrefa(ig,js+1) - fracrefa(ig,js))
124  ig=2
125  tau(ngs15+ig,lay) = speccomb *&
126 ! &((1. - FS)*(FAC00(LAY) * ABSA(IND0 ,IG) +
127 ! & FAC10(LAY) * ABSA(IND0+ 9,IG) +
128 ! & FAC01(LAY) * ABSA(IND1 ,IG) +
129 ! & FAC11(LAY) * ABSA(IND1+ 9,IG))+
130 ! & FS * ( FAC01(LAY) * ABSA(IND1+ 1,IG) +
131 ! & FAC10(LAY) * ABSA(IND0+10,IG) +
132 ! & FAC00(LAY) * ABSA(IND0+ 1,IG) +
133 ! & FAC11(LAY) * ABSA(IND1+10,IG))) +
134  &(fac000 * absa(ind0 ,ig) +&
135  & fac100 * absa(ind0+ 1,ig) +&
136  & fac010 * absa(ind0+ 9,ig) +&
137  & fac110 * absa(ind0+10,ig) +&
138  & fac001 * absa(ind1 ,ig) +&
139  & fac101 * absa(ind1+ 1,ig) +&
140  & fac011 * absa(ind1+ 9,ig) +&
141  & fac111 * absa(ind1+10,ig))+&
142  &colh2o(lay) *&
143  &selffac(lay) * (selfref(inds,ig) +&
144  &selffrac(lay) *&
145  &(selfref(inds+1,ig) - selfref(inds,ig)))&
146  &+ tauaerl(lay,16)
147  pfrac(ngs15+ig,lay) = fracrefa(ig,js) + fs *&
148  &(fracrefa(ig,js+1) - fracrefa(ig,js))
149 
150 ! END DO
151 !-- DS_990714
152 ENDDO
153 
154 DO lay = laytrop+1, klev
155 ! DO IG = 1, NG16
156 !-- DS_990714
157  ig=1
158  tau(ngs15+ig,lay) = tauaerl(lay,16)
159  pfrac(ngs15+ig,lay) = _zero_
160  ig=2
161  tau(ngs15+ig,lay) = tauaerl(lay,16)
162  pfrac(ngs15+ig,lay) = _zero_
163 !-- DS_990714
164 ! END DO
165 ENDDO
166 
167 RETURN
168 END SUBROUTINE rrtm_taumol16
real(kind=jprb) strrat
Definition: yoerrta16.F90:20
integer(kind=jpim), parameter ng16
Definition: yoerrta16.F90:14
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(585, ng16) absa
Definition: yoerrta16.F90:18
integer(kind=jpim), dimension(16) nspb
Definition: yoerrtwn.F90:13
integer(kind=jpim), dimension(16) ng
Definition: yoerrtwn.F90:11
real(kind=jprb), dimension(ng16, 9) fracrefa
Definition: yoerrta16.F90:16
integer(kind=jpim), dimension(16) nspa
Definition: yoerrtwn.F90:12
real(kind=jprb), dimension(9, 5, 13, ng16) ka
Definition: yoerrta16.F90:18
real(kind=jprb), dimension(10, ng16) selfref
Definition: yoerrta16.F90:19
subroutine rrtm_taumol16(KLEV, P_TAU, P_TAUAERL, P_FAC00, P_FAC01, P_FAC10, P_FAC11, K_JP, K_JT, K_JT1, P_ONEMINUS, P_COLH2O, P_COLCH4, K_LAYTROP, P_SELFFAC, P_SELFFRAC, K_INDSELF, PFRAC)
integer(kind=jpim), parameter jplay
Definition: parrrtm.F90:15
integer(kind=jpim), parameter ngs15
Definition: parrrtm.F90:54
integer(kind=jpim), parameter jpxsec
Definition: parrrtm.F90:19