LMDZ
rrtm_taumol5.F90
Go to the documentation of this file.
1 !----------------------------------------------------------------------------
2 SUBROUTINE rrtm_taumol5 (KLEV,P_TAU,P_WX,&
3  & p_tauaerl,p_fac00,p_fac01,p_fac10,p_fac11,p_forfac,k_jp,k_jt,k_jt1,p_oneminus,&
4  & p_colh2o,p_colco2, p_colo3,k_laytrop,p_selffac,p_selffrac,k_indself,pfrac)
5 
6 ! BAND 5: 700-820 cm-1 (low - H2O,CO2; high - O3,CO2)
7 
8 ! Modifications
9 ! M.Hamrud 01-Oct-2003 CY28 Cleaning
10 
11 ! D Salmond 2000-05-15 speed-up
12 
13 USE parkind1 ,ONLY : jpim ,jprb
14 USE yomhook ,ONLY : lhook, dr_hook
15 
16 USE parrrtm , ONLY : jplay ,jpband ,jpgpt ,jpxsec ,ng5 ,ngs4
17 USE yoerrtwn , ONLY : nspa ,nspb
19 
20 ! Input
21 !#include "yoeratm.h"
22 
23 ! REAL TAUAER(JPLAY)
24 
25 IMPLICIT NONE
26 
27 INTEGER(KIND=JPIM),INTENT(IN) :: KLEV
28 REAL(KIND=JPRB) ,INTENT(OUT) :: P_TAU(jpgpt,jplay)
29 REAL(KIND=JPRB) ,INTENT(IN) :: P_WX(jpxsec,jplay) ! Amount of trace gases
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 REAL(KIND=JPRB) :: P_FORFAC(jplay) ! Argument NOT used
36 INTEGER(KIND=JPIM),INTENT(IN) :: K_JP(jplay)
37 INTEGER(KIND=JPIM),INTENT(IN) :: K_JT(jplay)
38 INTEGER(KIND=JPIM),INTENT(IN) :: K_JT1(jplay)
39 REAL(KIND=JPRB) ,INTENT(IN) :: P_ONEMINUS
40 REAL(KIND=JPRB) ,INTENT(IN) :: P_COLH2O(jplay)
41 REAL(KIND=JPRB) ,INTENT(IN) :: P_COLCO2(jplay)
42 REAL(KIND=JPRB) ,INTENT(IN) :: P_COLO3(jplay)
43 INTEGER(KIND=JPIM),INTENT(IN) :: K_LAYTROP
44 REAL(KIND=JPRB) ,INTENT(IN) :: P_SELFFAC(jplay)
45 REAL(KIND=JPRB) ,INTENT(IN) :: P_SELFFRAC(jplay)
46 INTEGER(KIND=JPIM),INTENT(IN) :: K_INDSELF(jplay)
47 REAL(KIND=JPRB) ,INTENT(OUT) :: PFRAC(jpgpt,jplay)
48 ! Output
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) :: IJS(jplay)
57 REAL(KIND=JPRB) :: ZFS(jplay),Z_SPECCOMB(jplay)
58 INTEGER(KIND=JPIM) :: IND0(jplay),IND1(jplay),INDS(jplay)
59 
60 INTEGER(KIND=JPIM) :: IG, JS, I_LAY
61 
62 REAL(KIND=JPRB) :: Z_FAC000, Z_FAC001, Z_FAC010, Z_FAC011, Z_FAC100, Z_FAC101,&
63  & Z_FAC110, Z_FAC111, Z_FS, Z_SPECMULT, Z_SPECPARM
64 REAL(KIND=JPRB) :: ZHOOK_HANDLE
65 
66 ! EQUIVALENCE (TAUAERL(1,5),TAUAER)
67 
68 ! Compute the optical depth by interpolating in ln(pressure),
69 ! temperature, and appropriate species. Below LAYTROP, the water
70 ! vapor self-continuum is interpolated (in temperature) separately.
71 
72 IF (lhook) CALL dr_hook('RRTM_TAUMOL5',0,zhook_handle)
73 DO i_lay = 1, k_laytrop
74  z_speccomb(i_lay) = p_colh2o(i_lay) + strrat1*p_colco2(i_lay)
75  z_specparm = p_colh2o(i_lay)/z_speccomb(i_lay)
76  z_specparm=min(p_oneminus,z_specparm)
77  z_specmult = 8._jprb*(z_specparm)
78  js = 1 + int(z_specmult)
79  z_fs = mod(z_specmult,1.0_jprb)
80  ind0(i_lay) = ((k_jp(i_lay)-1)*5+(k_jt(i_lay)-1))*nspa(5) + js
81  ind1(i_lay) = (k_jp(i_lay)*5+(k_jt1(i_lay)-1))*nspa(5) + js
82  inds(i_lay) = k_indself(i_lay)
83 
84  zfs(i_lay)=z_fs
85  ijs(i_lay)=js
86 
87 ENDDO
88 
89 !-- DS_000515
90 DO i_lay = 1, k_laytrop
91 !-- DS_000515
92 
93  z_fs=zfs(i_lay)
94  js=ijs(i_lay)
95  DO ig = 1, ng5
96 !---jjm
97 ! FAC000 = (_ONE_ - FS) * FAC00(LAY)
98 ! FAC010 = (_ONE_ - FS) * FAC10(LAY)
99 ! FAC100 = FS * FAC00(LAY)
100 ! FAC110 = FS * FAC10(LAY)
101 ! FAC001 = (_ONE_ - FS) * FAC01(LAY)
102 ! FAC011 = (_ONE_ - FS) * FAC11(LAY)
103 ! FAC101 = FS * FAC01(LAY)
104 ! FAC111 = FS * FAC11(LAY)
105 !-----
106 
107  p_tau(ngs4+ig,i_lay) = z_speccomb(i_lay) * &
108  !-- DS_000515
109  & ( (1. - z_fs) *(p_fac00(i_lay) * absa(ind0(i_lay) ,ig) + &
110  & p_fac10(i_lay) * absa(ind0(i_lay)+ 9,ig) + &
111  & p_fac01(i_lay) * absa(ind1(i_lay) ,ig) + &
112  & p_fac11(i_lay) * absa(ind1(i_lay)+ 9,ig))+ &
113  & z_fs *(p_fac00(i_lay) * absa(ind0(i_lay)+ 1,ig) + &
114  & p_fac10(i_lay) * absa(ind0(i_lay)+10,ig) + &
115  & p_fac01(i_lay) * absa(ind1(i_lay)+ 1,ig) + &
116  & p_fac11(i_lay) * absa(ind1(i_lay)+10,ig))) + &
117  ! &(Z_FAC000 * ABSA(IND0(I_LAY) ,IG) +&
118  ! & Z_FAC100 * ABSA(IND0(I_LAY)+ 1,IG) +&
119  ! & Z_FAC010 * ABSA(IND0(I_LAY)+ 9,IG) +&
120  ! & Z_FAC110 * ABSA(IND0(I_LAY)+10,IG) +&
121  ! & Z_FAC001 * ABSA(IND1(I_LAY) ,IG) +&
122  ! & Z_FAC101 * ABSA(IND1(I_LAY)+ 1,IG) +&
123  ! & Z_FAC011 * ABSA(IND1(I_LAY)+ 9,IG) +&
124  ! & Z_FAC111 * ABSA(IND1(I_LAY)+10,IG))+&
125  !-- DS_000515
126  & p_colh2o(i_lay) * &
127  & p_selffac(i_lay) * (selfref(inds(i_lay),ig) + &
128  & p_selffrac(i_lay) *&
129  & (selfref(inds(i_lay)+1,ig) - selfref(inds(i_lay),ig)))&
130  & + p_wx(1,i_lay) * ccl4(ig)&
131  & + p_tauaerl(i_lay,5)
132  pfrac(ngs4+ig,i_lay) = fracrefa(ig,js) + z_fs *&
133  & (fracrefa(ig,js+1) - fracrefa(ig,js))
134  ENDDO
135 ENDDO
136 
137 DO i_lay = k_laytrop+1, klev
138  z_speccomb(i_lay) = p_colo3(i_lay) + strrat2*p_colco2(i_lay)
139  z_specparm = p_colo3(i_lay)/z_speccomb(i_lay)
140  z_specparm=min(p_oneminus,z_specparm)
141  z_specmult = 4._jprb*(z_specparm)
142  js = 1 + int(z_specmult)
143  z_fs = mod(z_specmult,1.0_jprb)
144  ind0(i_lay) = ((k_jp(i_lay)-13)*5+(k_jt(i_lay)-1))*nspb(5) + js
145  ind1(i_lay) = ((k_jp(i_lay)-12)*5+(k_jt1(i_lay)-1))*nspb(5) + js
146  zfs(i_lay)=z_fs
147  ijs(i_lay)=js
148 ENDDO
149 
150 !----jjm
151 ! FAC000 = (_ONE_ - FS) * FAC00(LAY)
152 ! FAC010 = (_ONE_ - FS) * FAC10(LAY)
153 ! FAC100 = FS * FAC00(LAY)
154 ! FAC110 = FS * FAC10(LAY)
155 ! FAC001 = (_ONE_ - FS) * FAC01(LAY)
156 ! FAC011 = (_ONE_ - FS) * FAC11(LAY)
157 ! FAC101 = FS * FAC01(LAY)
158 ! FAC111 = FS * FAC11(LAY)
159 !----
160 DO i_lay = k_laytrop+1, klev
161  z_fs=zfs(i_lay)
162  js=ijs(i_lay)
163  DO ig = 1, ng5
164 !-- DS_000515
165  p_tau(ngs4+ig,i_lay) = z_speccomb(i_lay) * &
166  & ( (1. - z_fs) *(p_fac00(i_lay) * absb(ind0(i_lay) ,ig) + &
167  & p_fac10(i_lay) * absb(ind0(i_lay)+5,ig) + &
168  & p_fac01(i_lay) * absb(ind1(i_lay) ,ig) + &
169  & p_fac11(i_lay) * absb(ind1(i_lay)+5,ig))+ &
170  & z_fs *(p_fac00(i_lay) * absb(ind0(i_lay)+1,ig) + &
171  & p_fac10(i_lay) * absb(ind0(i_lay)+6,ig) + &
172  & p_fac01(i_lay) * absb(ind1(i_lay)+1,ig) + &
173  & p_fac11(i_lay) * absb(ind1(i_lay)+6,ig))) &
174  ! &(Z_FAC000 * ABSB(IND0(I_LAY) ,IG) +&
175  ! & Z_FAC100 * ABSB(IND0(I_LAY)+1,IG) +&
176  ! & Z_FAC010 * ABSB(IND0(I_LAY)+5,IG) +&
177  ! & Z_FAC110 * ABSB(IND0(I_LAY)+6,IG) +&
178  ! & Z_FAC001 * ABSB(IND1(I_LAY) ,IG) +&
179  ! & Z_FAC101 * ABSB(IND1(I_LAY)+1,IG) +&
180  ! & Z_FAC011 * ABSB(IND1(I_LAY)+5,IG) +&
181  ! & Z_FAC111 * ABSB(IND1(I_LAY)+6,IG))&
182  !-- DS_000515
183  & + p_wx(1,i_lay) * ccl4(ig)&
184  & + p_tauaerl(i_lay,5)
185  pfrac(ngs4+ig,i_lay) = fracrefb(ig,js) + z_fs *&
186  & (fracrefb(ig,js+1) - fracrefb(ig,js))
187  ENDDO
188 ENDDO
189 
190 IF (lhook) CALL dr_hook('RRTM_TAUMOL5',1,zhook_handle)
191 END SUBROUTINE rrtm_taumol5
real(kind=jprb) strrat2
Definition: yoerrta5.F90:24
subroutine rrtm_taumol5(KLEV, P_TAU, P_WX, P_TAUAERL, P_FAC00, P_FAC01, P_FAC10, P_FAC11, P_FORFAC, K_JP, K_JT, K_JT1, P_ONEMINUS, P_COLH2O, P_COLCO2, P_COLO3, K_LAYTROP, P_SELFFAC, P_SELFFRAC, K_INDSELF, PFRAC)
Definition: rrtm_taumol5.F90:5
real(kind=jprb), dimension(ng5, 9) fracrefa
Definition: yoerrta5.F90:16
integer(kind=jpim), parameter jpgpt
Definition: parrrtm.F90:21
integer(kind=jpim), parameter jpband
Definition: parrrtm.F90:18
real(kind=jprb), dimension(1175, ng5) absb
Definition: yoerrta5.F90:21
real(kind=jprb), dimension(10, ng5) selfref
Definition: yoerrta5.F90:22
integer, parameter jprb
Definition: parkind1.F90:31
real(kind=jprb), dimension(ng5) ccl4
Definition: yoerrta5.F90:18
integer(kind=jpim), dimension(16) nspb
Definition: yoerrtwn.F90:13
integer(kind=jpim), parameter ngs4
Definition: parrrtm.F90:43
integer(kind=jpim), dimension(16) nspa
Definition: yoerrtwn.F90:12
logical lhook
Definition: yomhook.F90:12
real(kind=jprb), dimension(ng5, 5) fracrefb
Definition: yoerrta5.F90:16
real(kind=jprb), dimension(585, ng5) absa
Definition: yoerrta5.F90:20
integer(kind=jpim), parameter jplay
Definition: parrrtm.F90:15
subroutine dr_hook(CDNAME, KSWITCH, PKEY)
Definition: yomhook.F90:17
real(kind=jprb) strrat1
Definition: yoerrta5.F90:23
integer, parameter jpim
Definition: parkind1.F90:13
integer(kind=jpim), parameter ng5
Definition: parrrtm.F90:27
integer(kind=jpim), parameter jpxsec
Definition: parrrtm.F90:19