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