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