LMDZ
rrtm_taumol15.F90
Go to the documentation of this file.
1 !----------------------------------------------------------------------------
2 SUBROUTINE rrtm_taumol15 (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_colco2,p_coln2o,k_laytrop,p_selffac,p_selffrac,k_indself,pfrac)
5 
6 ! BAND 15: 2380-2600 cm-1 (low - N2O,CO2; high - nothing)
7 
8 ! Modifications
9 ! M.Hamrud 01-Oct-2003 CY28 Cleaning
10 
11 ! D Salmond 1999-07-14 speed-up
12 
13 USE parkind1 ,ONLY : jpim ,jprb
14 USE yomhook ,ONLY : lhook, dr_hook
15 
16 USE parrrtm , ONLY : jplay ,jpband ,jpgpt ,ngs14
17 USE yoerrtwn , ONLY : nspa
19 
20 IMPLICIT NONE
21 
22 ! Output
23 INTEGER(KIND=JPIM),INTENT(IN) :: KLEV
24 REAL(KIND=JPRB) ,INTENT(OUT) :: P_TAU(jpgpt,jplay)
25 REAL(KIND=JPRB) ,INTENT(IN) :: P_TAUAERL(jplay,jpband)
26 REAL(KIND=JPRB) ,INTENT(IN) :: P_FAC00(jplay)
27 REAL(KIND=JPRB) ,INTENT(IN) :: P_FAC01(jplay)
28 REAL(KIND=JPRB) ,INTENT(IN) :: P_FAC10(jplay)
29 REAL(KIND=JPRB) ,INTENT(IN) :: P_FAC11(jplay)
30 INTEGER(KIND=JPIM),INTENT(IN) :: K_JP(jplay)
31 INTEGER(KIND=JPIM),INTENT(IN) :: K_JT(jplay)
32 INTEGER(KIND=JPIM),INTENT(IN) :: K_JT1(jplay)
33 REAL(KIND=JPRB) ,INTENT(IN) :: P_ONEMINUS
34 REAL(KIND=JPRB) ,INTENT(IN) :: P_COLH2O(jplay)
35 REAL(KIND=JPRB) ,INTENT(IN) :: P_COLCO2(jplay)
36 REAL(KIND=JPRB) ,INTENT(IN) :: P_COLN2O(jplay)
37 INTEGER(KIND=JPIM),INTENT(IN) :: K_LAYTROP
38 REAL(KIND=JPRB) ,INTENT(IN) :: P_SELFFAC(jplay)
39 REAL(KIND=JPRB) ,INTENT(IN) :: P_SELFFRAC(jplay)
40 INTEGER(KIND=JPIM),INTENT(IN) :: K_INDSELF(jplay)
41 REAL(KIND=JPRB) ,INTENT(OUT) :: PFRAC(jpgpt,jplay)
42 !- from AER
43 !- from INTFAC
44 !- from INTIND
45 !- from PRECISE
46 !- from PROFDATA
47 !- from SELF
48 !- from SP
49 INTEGER(KIND=JPIM) :: IG, IND0, IND1, INDS, JS, I_LAY
50 
51 REAL(KIND=JPRB) :: Z_FAC000, Z_FAC001, Z_FAC010, Z_FAC011, Z_FAC100, Z_FAC101,&
52  & Z_FAC110, Z_FAC111, Z_FS, Z_SPECCOMB, Z_SPECMULT, Z_SPECPARM
53 REAL(KIND=JPRB) :: ZHOOK_HANDLE
54 
55 ! Input
56 !#include "yoeratm.h"
57 
58 ! REAL TAUAER(JPLAY)
59 ! EQUIVALENCE (TAUAERL(1,15),TAUAER)
60 
61 ! Compute the optical depth by interpolating in ln(pressure),
62 ! temperature, and appropriate species. Below LAYTROP, the water
63 ! vapor self-continuum is interpolated (in temperature) separately.
64 
65 IF (lhook) CALL dr_hook('RRTM_TAUMOL15',0,zhook_handle)
66 DO i_lay = 1, k_laytrop
67  z_speccomb = p_coln2o(i_lay) + strrat*p_colco2(i_lay)
68  z_specparm = p_coln2o(i_lay)/z_speccomb
69  z_specparm = min(z_specparm,p_oneminus)
70  z_specmult = 8._jprb*(z_specparm)
71  js = 1 + int(z_specmult)
72  z_fs = mod(z_specmult,1.0_jprb)
73 !-----jjm
74  z_fac000 = (1.0_jprb - z_fs) * p_fac00(i_lay)
75  z_fac010 = (1.0_jprb - z_fs) * p_fac10(i_lay)
76  z_fac100 = z_fs * p_fac00(i_lay)
77  z_fac110 = z_fs * p_fac10(i_lay)
78  z_fac001 = (1.0_jprb - z_fs) * p_fac01(i_lay)
79  z_fac011 = (1.0_jprb - z_fs) * p_fac11(i_lay)
80  z_fac101 = z_fs * p_fac01(i_lay)
81  z_fac111 = z_fs * p_fac11(i_lay)
82 !------
83  ind0 = ((k_jp(i_lay)-1)*5+(k_jt(i_lay)-1))*nspa(15) + js
84  ind1 = (k_jp(i_lay)*5+(k_jt1(i_lay)-1))*nspa(15) + js
85  inds = k_indself(i_lay)
86 !-- DS_990714
87 ! DO IG = 1, NG15
88  ig=1
89  p_tau(ngs14+ig,i_lay) = z_speccomb *&
90  ! &((1. - Z_FS)*(P_FAC00(I_LAY) * ABSA(IND0,IG) +
91  ! & P_FAC10(I_LAY) * ABSA(IND0+9,IG) +
92  ! & P_FAC01(I_LAY) * ABSA(IND1,IG) +
93  ! & P_FAC11(I_LAY) * ABSA(IND1+9,IG)) +
94  ! & Z_FS * (P_FAC01(I_LAY) * ABSA(IND1+1,IG) +
95  ! & P_FAC10(I_LAY) * ABSA(IND0+10,IG) +
96  ! & P_FAC00(I_LAY) * ABSA(IND0+1,IG) +
97  ! & P_FAC11(I_LAY) * ABSA(IND1+10,IG))) +
98  & (z_fac000 * absa(ind0 ,ig) +&
99  & z_fac100 * absa(ind0+ 1,ig) +&
100  & z_fac010 * absa(ind0+ 9,ig) +&
101  & z_fac110 * absa(ind0+10,ig) +&
102  & z_fac001 * absa(ind1 ,ig) +&
103  & z_fac101 * absa(ind1+ 1,ig) +&
104  & z_fac011 * absa(ind1+ 9,ig) +&
105  & z_fac111 * absa(ind1+10,ig))+&
106  & p_colh2o(i_lay) * &
107  & p_selffac(i_lay) * (selfref(inds,ig) + &
108  & p_selffrac(i_lay) *&
109  & (selfref(inds+1,ig) - selfref(inds,ig)))&
110  & + p_tauaerl(i_lay,15)
111  pfrac(ngs14+ig,i_lay) = fracrefa(ig,js) + z_fs *&
112  & (fracrefa(ig,js+1) - fracrefa(ig,js))
113  ig=2
114  p_tau(ngs14+ig,i_lay) = z_speccomb *&
115  ! &((1. - Z_FS)*(P_FAC00(I_LAY) * ABSA(IND0,IG) +
116  ! & P_FAC10(I_LAY) * ABSA(IND0+9,IG) +
117  ! & P_FAC01(I_LAY) * ABSA(IND1,IG) +
118  ! & P_FAC11(I_LAY) * ABSA(IND1+9,IG)) +
119  ! & Z_FS * (P_FAC01(I_LAY) * ABSA(IND1+1,IG) +
120  ! & P_FAC10(I_LAY) * ABSA(IND0+10,IG) +
121  ! & P_FAC00(I_LAY) * ABSA(IND0+1,IG) +
122  ! & P_FAC11(I_LAY) * ABSA(IND1+10,IG))) +
123  & (z_fac000 * absa(ind0 ,ig) +&
124  & z_fac100 * absa(ind0+ 1,ig) +&
125  & z_fac010 * absa(ind0+ 9,ig) +&
126  & z_fac110 * absa(ind0+10,ig) +&
127  & z_fac001 * absa(ind1 ,ig) +&
128  & z_fac101 * absa(ind1+ 1,ig) +&
129  & z_fac011 * absa(ind1+ 9,ig) +&
130  & z_fac111 * absa(ind1+10,ig))+&
131  & p_colh2o(i_lay) *&
132  & p_selffac(i_lay) * (selfref(inds,ig) +&
133  & p_selffrac(i_lay) *&
134  & (selfref(inds+1,ig) - selfref(inds,ig)))&
135  & + p_tauaerl(i_lay,15)
136  pfrac(ngs14+ig,i_lay) = fracrefa(ig,js) + z_fs *&
137  & (fracrefa(ig,js+1) - fracrefa(ig,js))
138 
139 ! END DO
140 !-- DS_990714
141 ENDDO
142 
143 DO i_lay = k_laytrop+1, klev
144 ! DO IG = 1, NG15
145 !-- DS_990714
146  ig=1
147  p_tau(ngs14+ig,i_lay) = p_tauaerl(i_lay,15)
148  pfrac(ngs14+ig,i_lay) = 0.0_jprb
149  ig=2
150  p_tau(ngs14+ig,i_lay) = p_tauaerl(i_lay,15)
151  pfrac(ngs14+ig,i_lay) = 0.0_jprb
152 !-- DS_990714
153 ! END DO
154 ENDDO
155 
156 IF (lhook) CALL dr_hook('RRTM_TAUMOL15',1,zhook_handle)
157 END SUBROUTINE rrtm_taumol15
real(kind=jprb) strrat
Definition: yoerrta15.F90:20
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, parameter jprb
Definition: parkind1.F90:31
integer(kind=jpim), dimension(16) nspa
Definition: yoerrtwn.F90:12
logical lhook
Definition: yomhook.F90:12
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
subroutine dr_hook(CDNAME, KSWITCH, PKEY)
Definition: yomhook.F90:17
integer, parameter jpim
Definition: parkind1.F90:13
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)