LMDZ
rrtm_taumol8.F90
Go to the documentation of this file.
1 !*******************************************************************************
2 SUBROUTINE rrtm_taumol8 (KLEV,TAU,WX,&
3  &tauaerl,fac00,fac01,fac10,fac11,jp,jt,jt1,&
4  &colh2o,colo3,coln2o,co2mult,layswtch,selffac,selffrac,indself,pfrac)
5 
6 ! BAND 8: 1080-1180 cm-1 (low (i.e.>~300mb) - H2O; high - O3)
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 , ngs7
17 USE yoerrtwn , ONLY : ng ,nspa ,nspb
18 USE yoerrta8 , ONLY : ng8 ,absa ,absb ,fracrefa, fracrefb,&
19  &ka , kb ,selfref,absco2a , absco2b ,&
21  &n2oref , o3ref
22 
23 ! Input
24 !#include "yoeratm.h"
25 
26 
27 IMPLICIT NONE
28 
29 real_b :: wx(jpxsec,jplay) ! Amount of trace gases
30 ! Output
31 real_b :: tau(jpgpt,jplay)
32 
33 ! DUMMY INTEGER SCALARS
34 integer_m :: klev
35 
36 !- from AER
37 real_b :: tauaerl(jplay,jpband)
38 
39 !- from INTFAC
40 real_b :: fac00(jplay)
41 real_b :: fac01(jplay)
42 real_b :: fac10(jplay)
43 real_b :: fac11(jplay)
44 
45 !- from INTIND
46 integer_m :: jp(jplay)
47 integer_m :: jt(jplay)
48 integer_m :: jt1(jplay)
49 
50 !- from PROFDATA
51 real_b :: colh2o(jplay)
52 real_b :: colo3(jplay)
53 real_b :: coln2o(jplay)
54 real_b :: co2mult(jplay)
55 integer_m :: layswtch
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 :: ind0(jplay),ind1(jplay),inds(jplay)
66 
67 ! REAL TAUAER(JPLAY)
68 real_b :: n2omult(jplay)
69 
70 ! LOCAL INTEGER SCALARS
71 integer_m :: ig, lay
72 
73 ! LOCAL REAL SCALARS
74 real_b :: colref1, colref2, currn2o, fp, ratio, wcomb1, wcomb2
75 
76 ! EQUIVALENCE (TAUAERL(1,8),TAUAER)
77 
78 ! Compute the optical depth by interpolating in ln(pressure) and
79 ! temperature.
80 
81 DO lay = 1, layswtch
82  fp = fac01(lay) + fac11(lay)
83  ind0(lay) = ((jp(lay)-1)*5+(jt(lay)-1))*nspa(8) + 1
84  ind1(lay) = (jp(lay)*5+(jt1(lay)-1))*nspa(8) + 1
85  inds(lay) = indself(lay)
86  colref1 = n2oref(jp(lay))
87  colref2 = n2oref(jp(lay)+1)
88  wcomb1 = _one_/h2oref(jp(lay))
89  wcomb2 = _one_/h2oref(jp(lay)+1)
90  ratio = (colref1*wcomb1)+fp*((colref2*wcomb2)-(colref1*wcomb1))
91  currn2o = colh2o(lay) * ratio
92  n2omult(lay) = coln2o(lay) - currn2o
93 ENDDO
94 
95 !-- DS_000515
96 DO ig = 1, ng8
97  DO lay = 1, layswtch
98 !-- DS_000515
99  tau(ngs7+ig,lay) = colh2o(lay) *&
100  &(fac00(lay) * absa(ind0(lay) ,ig) +&
101  & fac10(lay) * absa(ind0(lay)+1,ig) +&
102  & fac01(lay) * absa(ind1(lay) ,ig) +&
103  & fac11(lay) * absa(ind1(lay)+1,ig) +&
104  &selffac(lay) * (selfref(inds(lay),ig) + &
105  &selffrac(lay) *&
106  &(selfref(inds(lay)+1,ig) - selfref(inds(lay),ig))))&
107  &+ wx(3,lay) * cfc12(ig)&
108  &+ wx(4,lay) * cfc22adj(ig)&
109  &+ co2mult(lay) * absco2a(ig)&
110  &+ n2omult(lay) * absn2oa(ig)&
111  &+ tauaerl(lay,8)
112  pfrac(ngs7+ig,lay) = fracrefa(ig)
113  ENDDO
114 ENDDO
115 
116 DO lay = layswtch+1, klev
117  fp = fac01(lay) + fac11(lay)
118  ind0(lay) = ((jp(lay)-7)*5+(jt(lay)-1))*nspb(8) + 1
119  ind1(lay) = ((jp(lay)-6)*5+(jt1(lay)-1))*nspb(8) + 1
120  colref1 = n2oref(jp(lay))
121  colref2 = n2oref(jp(lay)+1)
122  wcomb1 = _one_/o3ref(jp(lay))
123  wcomb2 = _one_/o3ref(jp(lay)+1)
124  ratio = (colref1*wcomb1)+fp*((colref2*wcomb2)-(colref1*wcomb1))
125  currn2o = colo3(lay) * ratio
126  n2omult(lay) = coln2o(lay) - currn2o
127 ENDDO
128 
129 !-- JJM_000517
130 DO ig = 1, ng8
131  DO lay = layswtch+1, klev
132 !-- JJM_000517
133  tau(ngs7+ig,lay) = colo3(lay) *&
134  &(fac00(lay) * absb(ind0(lay) ,ig) +&
135  & fac10(lay) * absb(ind0(lay)+1,ig) +&
136  & fac01(lay) * absb(ind1(lay) ,ig) +&
137  & fac11(lay) * absb(ind1(lay)+1,ig)) &
138  &+ wx(3,lay) * cfc12(ig)&
139  &+ wx(4,lay) * cfc22adj(ig)&
140  &+ co2mult(lay) * absco2b(ig)&
141  &+ n2omult(lay) * absn2ob(ig)&
142  &+ tauaerl(lay,8)
143  pfrac(ngs7+ig,lay) = fracrefb(ig)
144  ENDDO
145 ENDDO
146 
147 RETURN
148 END SUBROUTINE rrtm_taumol8
real(kind=jprb), dimension(ng8) cfc22adj
Definition: yoerrta8.F90:19
real(kind=jprb), dimension(ng8) absn2oa
Definition: yoerrta8.F90:22
integer, save klev
Definition: dimphy.F90:7
integer(kind=jpim), parameter jpgpt
Definition: parrrtm.F90:21
real(kind=jprb), dimension(59) o3ref
Definition: yoerrta8.F90:26
integer(kind=jpim), parameter jpband
Definition: parrrtm.F90:18
subroutine rrtm_taumol8(KLEV, P_TAU, P_WX, P_TAUAERL, P_FAC00, P_FAC01, P_FAC10, P_FAC11, K_JP, K_JT, K_JT1, P_COLH2O, P_COLO3, P_COLN2O, P_CO2MULT, K_LAYSWTCH, P_SELFFAC, P_SELFFRAC, K_INDSELF, PFRAC)
Definition: rrtm_taumol8.F90:5
real(kind=jprb), dimension(35, ng8) absa
Definition: yoerrta8.F90:28
real(kind=jprb), dimension(5, 7:59, ng8) kb
Definition: yoerrta8.F90:29
integer(kind=jpim), dimension(16) nspb
Definition: yoerrtwn.F90:13
integer(kind=jpim), dimension(16) ng
Definition: yoerrtwn.F90:11
real(kind=jprb), dimension(10, ng8) selfref
Definition: yoerrta8.F90:30
real(kind=jprb), dimension(ng8) fracrefb
Definition: yoerrta8.F90:17
integer(kind=jpim), dimension(16) nspa
Definition: yoerrtwn.F90:12
real(kind=jprb), dimension(ng8) absco2b
Definition: yoerrta8.F90:21
real(kind=jprb), dimension(59) n2oref
Definition: yoerrta8.F90:25
integer(kind=jpim), parameter ng8
Definition: yoerrta8.F90:14
integer(kind=jpim), parameter ngs7
Definition: parrrtm.F90:46
real(kind=jprb), dimension(ng8) absco2a
Definition: yoerrta8.F90:20
real(kind=jprb), dimension(59) h2oref
Definition: yoerrta8.F90:24
integer(kind=jpim), parameter jplay
Definition: parrrtm.F90:15
real(kind=jprb), dimension(5, 7, ng8) ka
Definition: yoerrta8.F90:28
real(kind=jprb), dimension(ng8) absn2ob
Definition: yoerrta8.F90:23
real(kind=jprb), dimension(ng8) cfc12
Definition: yoerrta8.F90:18
real(kind=jprb), dimension(ng8) fracrefa
Definition: yoerrta8.F90:16
real(kind=jprb), dimension(265, ng8) absb
Definition: yoerrta8.F90:29
integer(kind=jpim), parameter jpxsec
Definition: parrrtm.F90:19