LMDZ
rrtm_taumol9.F90
Go to the documentation of this file.
1 !----------------------------------------------------------------------------
2 SUBROUTINE rrtm_taumol9 (KLEV,P_TAU,&
3  & p_tauaerl,p_fac00,p_fac01,p_fac10,p_fac11,k_jp,k_jt,k_jt1,p_oneminus,&
4  & p_colh2o,p_coln2o,p_colch4,k_laytrop,k_layswtch,k_laylow,p_selffac,p_selffrac,k_indself,pfrac)
5 
6 ! BAND 9: 1180-1390 cm-1 (low - H2O,CH4; high - CH4)
7 
8 ! Modifications
9 ! M.Hamrud 01-Oct-2003 CY28 Cleaning
10 
11 ! D Salmond 2000-05-15 speed-up
12 ! JJMorcrette 2000-05-17 speed-up
13 
14 USE parkind1 ,ONLY : jpim ,jprb
15 USE yomhook ,ONLY : lhook, dr_hook
16 
17 USE parrrtm , ONLY : jplay ,jpband ,jpgpt ,ng9 ,ngs8
18 USE yoerrtwn , ONLY : nspa ,nspb
20  & etaref , h2oref ,n2oref ,strrat
21 
22 ! Input
23 !#include "yoeratm.h"
24 
25 IMPLICIT NONE
26 
27 ! Output
28 INTEGER(KIND=JPIM),INTENT(IN) :: KLEV
29 REAL(KIND=JPRB) ,INTENT(OUT) :: P_TAU(jpgpt,jplay)
30 REAL(KIND=JPRB) ,INTENT(IN) :: P_TAUAERL(jplay,jpband)
31 REAL(KIND=JPRB) ,INTENT(IN) :: P_FAC00(jplay)
32 REAL(KIND=JPRB) ,INTENT(IN) :: P_FAC01(jplay)
33 REAL(KIND=JPRB) ,INTENT(IN) :: P_FAC10(jplay)
34 REAL(KIND=JPRB) ,INTENT(IN) :: P_FAC11(jplay)
35 INTEGER(KIND=JPIM),INTENT(IN) :: K_JP(jplay)
36 INTEGER(KIND=JPIM),INTENT(IN) :: K_JT(jplay)
37 INTEGER(KIND=JPIM),INTENT(IN) :: K_JT1(jplay)
38 REAL(KIND=JPRB) ,INTENT(IN) :: P_ONEMINUS
39 REAL(KIND=JPRB) ,INTENT(IN) :: P_COLH2O(jplay)
40 REAL(KIND=JPRB) ,INTENT(IN) :: P_COLN2O(jplay)
41 REAL(KIND=JPRB) ,INTENT(IN) :: P_COLCH4(jplay)
42 INTEGER(KIND=JPIM),INTENT(IN) :: K_LAYTROP
43 INTEGER(KIND=JPIM),INTENT(IN) :: K_LAYSWTCH
44 INTEGER(KIND=JPIM),INTENT(IN) :: K_LAYLOW
45 REAL(KIND=JPRB) ,INTENT(IN) :: P_SELFFAC(jplay)
46 REAL(KIND=JPRB) ,INTENT(IN) :: P_SELFFRAC(jplay)
47 INTEGER(KIND=JPIM),INTENT(IN) :: K_INDSELF(jplay)
48 REAL(KIND=JPRB) ,INTENT(OUT) :: PFRAC(jpgpt,jplay)
49 !- from AER
50 !- from INTFAC
51 !- from INTIND
52 !- from PRECISE
53 !- from PROFDATA
54 !- from SELF
55 !- from SP
56 INTEGER(KIND=JPIM) :: JFRAC(jplay)
57 REAL(KIND=JPRB) :: Z_FFRAC(jplay),ZFS(jplay),Z_SPECCOMB(jplay)
58 INTEGER(KIND=JPIM) :: IND0(jplay),IND1(jplay),INDS(jplay),IIOFF(jplay)
59 
60 ! REAL TAUAER(JPLAY)
61 REAL(KIND=JPRB) :: Z_N2OMULT(jplay)
62 
63 INTEGER(KIND=JPIM) :: IG, IOFF, JS, I_LAY, I_NS
64 
65 REAL(KIND=JPRB) :: Z_COLREF1, Z_COLREF2, Z_CURRN2O, Z_FAC000, Z_FAC001,&
66  & Z_FAC010, Z_FAC011, Z_FAC100, Z_FAC101, Z_FAC110, Z_FAC111, &
67  & Z_FP, Z_FS, Z_RATIO, Z_SPECMULT, Z_SPECPARM, Z_WCOMB1, &
68  & Z_WCOMB2
69 REAL(KIND=JPRB) :: ZHOOK_HANDLE
70 
71 ! EQUIVALENCE (TAUAERL(1,9),TAUAER)
72 
73 IF (lhook) CALL dr_hook('RRTM_TAUMOL9',0,zhook_handle)
74 ioff = 0
75 
76 ! Compute the optical depth by interpolating in ln(pressure),
77 ! temperature, and appropriate species. Below LAYTROP, the water
78 ! vapor self-continuum is interpolated (in temperature) separately.
79 
80 DO i_lay = 1, k_laytrop
81  z_speccomb(i_lay) = p_colh2o(i_lay) + strrat*p_colch4(i_lay)
82  z_specparm = p_colh2o(i_lay)/z_speccomb(i_lay)
83  z_specparm=min(p_oneminus,z_specparm)
84  z_specmult = 8._jprb*(z_specparm)
85  js = 1 + int(z_specmult)
86  jfrac(i_lay) = js
87  z_fs = mod(z_specmult,1.0_jprb)
88  z_ffrac(i_lay) = z_fs
89  IF (js == 8) THEN
90  IF (z_fs <= 0.68_jprb) THEN
91  z_fs = z_fs/0.68_jprb
92  ELSEIF (z_fs <= 0.92_jprb) THEN
93  js = js + 1
94  z_fs = (z_fs-0.68_jprb)/0.24_jprb
95  ELSE
96  js = js + 2
97  z_fs = (z_fs-0.92_jprb)/0.08_jprb
98  ENDIF
99  ELSEIF (js == 9) THEN
100  js = 10
101  z_fs = 1.0_jprb
102  jfrac(i_lay) = 8
103  z_ffrac(i_lay) = 1.0_jprb
104  ENDIF
105  z_fp = p_fac01(i_lay) + p_fac11(i_lay)
106  i_ns = js + int(z_fs + 0.5_jprb)
107  ind0(i_lay) = ((k_jp(i_lay)-1)*5+(k_jt(i_lay)-1))*nspa(9) + js
108  ind1(i_lay) = (k_jp(i_lay)*5+(k_jt1(i_lay)-1))*nspa(9) + js
109  inds(i_lay) = k_indself(i_lay)
110  IF (i_lay == k_laylow) ioff = ng9
111  IF (i_lay == k_layswtch) ioff = 2*ng9
112  z_colref1 = n2oref(k_jp(i_lay))
113  z_colref2 = n2oref(k_jp(i_lay)+1)
114  IF (i_ns == 11) THEN
115  z_wcomb1 = 1.0_jprb/h2oref(k_jp(i_lay))
116  z_wcomb2 = 1.0_jprb/h2oref(k_jp(i_lay)+1)
117  ELSE
118  z_wcomb1 = (1.0_jprb-etaref(i_ns))/(strrat * ch4ref(k_jp(i_lay)))
119  z_wcomb2 = (1.0_jprb-etaref(i_ns))/(strrat * ch4ref(k_jp(i_lay)+1))
120  ENDIF
121  z_ratio = (z_colref1*z_wcomb1)+z_fp*((z_colref2*z_wcomb2)-(z_colref1*z_wcomb1))
122  z_currn2o = z_speccomb(i_lay) * z_ratio
123  z_n2omult(i_lay) = p_coln2o(i_lay) - z_currn2o
124 
125  zfs(i_lay)=z_fs
126  iioff(i_lay)=ioff
127 
128 ENDDO
129 
130 !-- DS_000515
131 DO ig = 1, ng9
132  DO i_lay = 1, k_laytrop
133 !-- DS_000515
134 
135  z_fs=zfs(i_lay)
136  ioff=iioff(i_lay)
137 !---jjm
138 ! FAC000 = (_ONE_ - FS) * FAC00(LAY)
139 ! FAC010 = (_ONE_ - FS) * FAC10(LAY)
140 ! FAC100 = FS * FAC00(LAY)
141 ! FAC110 = FS * FAC10(LAY)
142 ! FAC001 = (_ONE_ - FS) * FAC01(LAY)
143 ! FAC011 = (_ONE_ - FS) * FAC11(LAY)
144 ! FAC101 = FS * FAC01(LAY)
145 ! FAC111 = FS * FAC11(LAY)
146 !------
147 
148  p_tau(ngs8+ig,i_lay) = z_speccomb(i_lay) *&
149  !-- DS_000515
150  ! &(Z_FAC000 * ABSA(IND0(I_LAY) ,IG) +&
151  ! & Z_FAC100 * ABSA(IND0(I_LAY)+ 1,IG) +&
152  ! & Z_FAC010 * ABSA(IND0(I_LAY)+11,IG) +&
153  ! & Z_FAC110 * ABSA(IND0(I_LAY)+12,IG) +&
154  ! & Z_FAC001 * ABSA(IND1(I_LAY) ,IG) +&
155  ! & Z_FAC101 * ABSA(IND1(I_LAY)+ 1,IG) +&
156  ! & Z_FAC011 * ABSA(IND1(I_LAY)+11,IG) +&
157  ! & Z_FAC111 * ABSA(IND1(I_LAY)+12,IG))+&
158  & ( (1. - z_fs) *(p_fac00(i_lay) * absa(ind0(i_lay) ,ig) + &
159  & p_fac10(i_lay) * absa(ind0(i_lay)+11,ig) + &
160  & p_fac01(i_lay) * absa(ind1(i_lay) ,ig) + &
161  & p_fac11(i_lay) * absa(ind1(i_lay)+11,ig))+ &
162  & z_fs *(p_fac00(i_lay) * absa(ind0(i_lay)+ 1,ig) + &
163  & p_fac10(i_lay) * absa(ind0(i_lay)+12,ig) + &
164  & p_fac01(i_lay) * absa(ind1(i_lay)+ 1,ig) + &
165  & p_fac11(i_lay) * absa(ind1(i_lay)+12,ig))) + &
166  !-- DS_000515
167  & p_colh2o(i_lay) * &
168  & p_selffac(i_lay) * (selfref(inds(i_lay),ig) + &
169  & p_selffrac(i_lay) *&
170  & (selfref(inds(i_lay)+1,ig) - selfref(inds(i_lay),ig)))&
171  & + z_n2omult(i_lay) * absn2o(ig+ioff)&
172  & + p_tauaerl(i_lay,9)
173  pfrac(ngs8+ig,i_lay) = fracrefa(ig,jfrac(i_lay)) + z_ffrac(i_lay) *&
174  & (fracrefa(ig,jfrac(i_lay)+1) - fracrefa(ig,jfrac(i_lay)))
175  ENDDO
176 ENDDO
177 
178 DO i_lay = k_laytrop+1, klev
179  ind0(i_lay) = ((k_jp(i_lay)-13)*5+(k_jt(i_lay)-1))*nspb(9) + 1
180  ind1(i_lay) = ((k_jp(i_lay)-12)*5+(k_jt1(i_lay)-1))*nspb(9) + 1
181 ENDDO
182 
183 !-- JJM_000517
184 DO ig = 1, ng9
185  DO i_lay = k_laytrop+1, klev
186 !-- JJM_000517
187  p_tau(ngs8+ig,i_lay) = p_colch4(i_lay) *&
188  & (p_fac00(i_lay) * absb(ind0(i_lay) ,ig) +&
189  & p_fac10(i_lay) * absb(ind0(i_lay)+1,ig) +&
190  & p_fac01(i_lay) * absb(ind1(i_lay) ,ig) +&
191  & p_fac11(i_lay) * absb(ind1(i_lay)+1,ig))&
192  & + p_tauaerl(i_lay,9)
193  pfrac(ngs8+ig,i_lay) = fracrefb(ig)
194  ENDDO
195 ENDDO
196 
197 IF (lhook) CALL dr_hook('RRTM_TAUMOL9',1,zhook_handle)
198 END SUBROUTINE rrtm_taumol9
real(kind=jprb), dimension(10, ng9) selfref
Definition: yoerrta9.F90:28
integer(kind=jpim), parameter jpgpt
Definition: parrrtm.F90:21
subroutine rrtm_taumol9(KLEV, P_TAU, P_TAUAERL, P_FAC00, P_FAC01, P_FAC10, P_FAC11, K_JP, K_JT, K_JT1, P_ONEMINUS, P_COLH2O, P_COLN2O, P_COLCH4, K_LAYTROP, K_LAYSWTCH, K_LAYLOW, P_SELFFAC, P_SELFFRAC, K_INDSELF, PFRAC)
Definition: rrtm_taumol9.F90:5
integer(kind=jpim), parameter jpband
Definition: parrrtm.F90:18
integer(kind=jpim), parameter ng9
Definition: parrrtm.F90:31
real(kind=jprb), dimension(ng9) fracrefb
Definition: yoerrta9.F90:18
integer, parameter jprb
Definition: parkind1.F90:31
real(kind=jprb), dimension(ng9, 9) fracrefa
Definition: yoerrta9.F90:16
real(kind=jprb), dimension(13) ch4ref
Definition: yoerrta9.F90:21
integer(kind=jpim), dimension(16) nspb
Definition: yoerrtwn.F90:13
integer(kind=jpim), dimension(16) nspa
Definition: yoerrtwn.F90:12
real(kind=jprb), dimension(13) n2oref
Definition: yoerrta9.F90:19
logical lhook
Definition: yomhook.F90:12
real(kind=jprb), dimension(36) absn2o
Definition: yoerrta9.F90:24
real(kind=jprb) strrat
Definition: yoerrta9.F90:29
integer(kind=jpim), parameter jplay
Definition: parrrtm.F90:15
subroutine dr_hook(CDNAME, KSWITCH, PKEY)
Definition: yomhook.F90:17
integer, parameter jpim
Definition: parkind1.F90:13
real(kind=jprb), dimension(11) etaref
Definition: yoerrta9.F90:22
integer(kind=jpim), parameter ngs8
Definition: parrrtm.F90:47
real(kind=jprb), dimension(235, ng9) absb
Definition: yoerrta9.F90:27
real(kind=jprb), dimension(13) h2oref
Definition: yoerrta9.F90:20
real(kind=jprb), dimension(715, ng9) absa
Definition: yoerrta9.F90:26