LMDZ
rrtm_taumol8.F90
Go to the documentation of this file.
1 !*******************************************************************************
2 SUBROUTINE rrtm_taumol8 (KLEV,P_TAU,P_WX,&
3  & p_tauaerl,p_fac00,p_fac01,p_fac10,p_fac11,k_jp,k_jt,k_jt1,&
4  & p_colh2o,p_colo3,p_coln2o,p_co2mult,k_layswtch,p_selffac,p_selffrac,k_indself,pfrac)
5 
6 ! BAND 8: 1080-1180 cm-1 (low (i.e.>~300mb) - H2O; high - O3)
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 ,jpxsec ,ng8 ,ngs7
18 USE yoerrtwn , ONLY : nspa ,nspb
21  & n2oref , o3ref
22 
23 ! Input
24 !#include "yoeratm.h"
25 
26 IMPLICIT NONE
27 
28 INTEGER(KIND=JPIM),INTENT(IN) :: KLEV
29 REAL(KIND=JPRB) ,INTENT(OUT) :: P_TAU(jpgpt,jplay)
30 REAL(KIND=JPRB) ,INTENT(IN) :: P_WX(jpxsec,jplay) ! Amount of trace gases
31 REAL(KIND=JPRB) ,INTENT(IN) :: P_TAUAERL(jplay,jpband)
32 REAL(KIND=JPRB) ,INTENT(IN) :: P_FAC00(jplay)
33 REAL(KIND=JPRB) ,INTENT(IN) :: P_FAC01(jplay)
34 REAL(KIND=JPRB) ,INTENT(IN) :: P_FAC10(jplay)
35 REAL(KIND=JPRB) ,INTENT(IN) :: P_FAC11(jplay)
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_COLH2O(jplay)
40 REAL(KIND=JPRB) ,INTENT(IN) :: P_COLO3(jplay)
41 REAL(KIND=JPRB) ,INTENT(IN) :: P_COLN2O(jplay)
42 REAL(KIND=JPRB) ,INTENT(IN) :: P_CO2MULT(jplay)
43 INTEGER(KIND=JPIM),INTENT(IN) :: K_LAYSWTCH
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 PROFDATA
53 !- from SELF
54 !- from SP
55 INTEGER(KIND=JPIM) :: IND0(jplay),IND1(jplay),INDS(jplay)
56 
57 ! REAL TAUAER(JPLAY)
58 REAL(KIND=JPRB) :: Z_N2OMULT(jplay)
59 
60 INTEGER(KIND=JPIM) :: IG, I_LAY
61 
62 REAL(KIND=JPRB) :: Z_COLREF1, Z_COLREF2, Z_CURRN2O, Z_FP, Z_RATIO, Z_WCOMB1, Z_WCOMB2
63 REAL(KIND=JPRB) :: ZHOOK_HANDLE
64 
65 ! EQUIVALENCE (TAUAERL(1,8),TAUAER)
66 
67 ! Compute the optical depth by interpolating in ln(pressure) and
68 ! temperature.
69 
70 IF (lhook) CALL dr_hook('RRTM_TAUMOL8',0,zhook_handle)
71 DO i_lay = 1, k_layswtch
72  z_fp = p_fac01(i_lay) + p_fac11(i_lay)
73  ind0(i_lay) = ((k_jp(i_lay)-1)*5+(k_jt(i_lay)-1))*nspa(8) + 1
74  ind1(i_lay) = (k_jp(i_lay)*5+(k_jt1(i_lay)-1))*nspa(8) + 1
75  inds(i_lay) = k_indself(i_lay)
76  z_colref1 = n2oref(k_jp(i_lay))
77  z_colref2 = n2oref(k_jp(i_lay)+1)
78  z_wcomb1 = 1.0_jprb/h2oref(k_jp(i_lay))
79  z_wcomb2 = 1.0_jprb/h2oref(k_jp(i_lay)+1)
80  z_ratio = (z_colref1*z_wcomb1)+z_fp*((z_colref2*z_wcomb2)-(z_colref1*z_wcomb1))
81  z_currn2o = p_colh2o(i_lay) * z_ratio
82  z_n2omult(i_lay) = p_coln2o(i_lay) - z_currn2o
83 ENDDO
84 
85 !-- DS_000515
86 DO ig = 1, ng8
87  DO i_lay = 1, k_layswtch
88 !-- DS_000515
89  p_tau(ngs7+ig,i_lay) = p_colh2o(i_lay) *&
90  & (p_fac00(i_lay) * absa(ind0(i_lay) ,ig) +&
91  & p_fac10(i_lay) * absa(ind0(i_lay)+1,ig) +&
92  & p_fac01(i_lay) * absa(ind1(i_lay) ,ig) +&
93  & p_fac11(i_lay) * absa(ind1(i_lay)+1,ig) +&
94  & p_selffac(i_lay) * (selfref(inds(i_lay),ig) + &
95  & p_selffrac(i_lay) *&
96  & (selfref(inds(i_lay)+1,ig) - selfref(inds(i_lay),ig))))&
97  & + p_wx(3,i_lay) * cfc12(ig)&
98  & + p_wx(4,i_lay) * cfc22adj(ig)&
99  & + p_co2mult(i_lay) * absco2a(ig)&
100  & + z_n2omult(i_lay) * absn2oa(ig)&
101  & + p_tauaerl(i_lay,8)
102  pfrac(ngs7+ig,i_lay) = fracrefa(ig)
103  ENDDO
104 ENDDO
105 
106 DO i_lay = k_layswtch+1, klev
107  z_fp = p_fac01(i_lay) + p_fac11(i_lay)
108  ind0(i_lay) = ((k_jp(i_lay)-7)*5+(k_jt(i_lay)-1))*nspb(8) + 1
109  ind1(i_lay) = ((k_jp(i_lay)-6)*5+(k_jt1(i_lay)-1))*nspb(8) + 1
110  z_colref1 = n2oref(k_jp(i_lay))
111  z_colref2 = n2oref(k_jp(i_lay)+1)
112  z_wcomb1 = 1.0_jprb/o3ref(k_jp(i_lay))
113  z_wcomb2 = 1.0_jprb/o3ref(k_jp(i_lay)+1)
114  z_ratio = (z_colref1*z_wcomb1)+z_fp*((z_colref2*z_wcomb2)-(z_colref1*z_wcomb1))
115  z_currn2o = p_colo3(i_lay) * z_ratio
116  z_n2omult(i_lay) = p_coln2o(i_lay) - z_currn2o
117 ENDDO
118 
119 !-- JJM_000517
120 DO ig = 1, ng8
121  DO i_lay = k_layswtch+1, klev
122 !-- JJM_000517
123  p_tau(ngs7+ig,i_lay) = p_colo3(i_lay) *&
124  & (p_fac00(i_lay) * absb(ind0(i_lay) ,ig) +&
125  & p_fac10(i_lay) * absb(ind0(i_lay)+1,ig) +&
126  & p_fac01(i_lay) * absb(ind1(i_lay) ,ig) +&
127  & p_fac11(i_lay) * absb(ind1(i_lay)+1,ig)) &
128  & + p_wx(3,i_lay) * cfc12(ig)&
129  & + p_wx(4,i_lay) * cfc22adj(ig)&
130  & + p_co2mult(i_lay) * absco2b(ig)&
131  & + z_n2omult(i_lay) * absn2ob(ig)&
132  & + p_tauaerl(i_lay,8)
133  pfrac(ngs7+ig,i_lay) = fracrefb(ig)
134  ENDDO
135 ENDDO
136 
137 IF (lhook) CALL dr_hook('RRTM_TAUMOL8',1,zhook_handle)
138 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(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
integer, parameter jprb
Definition: parkind1.F90:31
integer(kind=jpim), dimension(16) nspb
Definition: yoerrtwn.F90:13
integer(kind=jpim), parameter ng8
Definition: parrrtm.F90:30
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
logical lhook
Definition: yomhook.F90:12
real(kind=jprb), dimension(59) n2oref
Definition: yoerrta8.F90:25
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
subroutine dr_hook(CDNAME, KSWITCH, PKEY)
Definition: yomhook.F90:17
integer, parameter jpim
Definition: parkind1.F90:13
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