LMDZ
rrtm_gasabs1a_140gp.F90
Go to the documentation of this file.
1 SUBROUTINE rrtm_gasabs1a_140gp (KLEV,P_ATR1,P_OD,P_TF1,P_COLDRY,P_WX,&
2  & p_tauaerl,p_fac00,p_fac01,p_fac10,p_fac11,p_forfac,k_jp,k_jt,k_jt1,p_oneminus,&
3  & p_colh2o,p_colco2,p_colo3,p_coln2o,p_colch4,p_colo2,p_co2mult,&
4  & k_laytrop,k_layswtch,k_laylow,p_selffac,p_selffrac,k_indself,pfrac)
5 
6 ! Reformatted for F90 by JJMorcrette, ECMWF, 980714
7 
8 USE parkind1 ,ONLY : jpim ,jprb
9 USE yomhook ,ONLY : lhook, dr_hook
10 
11 USE parrrtm , ONLY : jplay ,jpband ,jpgpt ,jpxsec
12 USE yoerrtab , ONLY : trans ,bpade
13 
14 IMPLICIT NONE
15 
16 INTEGER(KIND=JPIM),INTENT(IN) :: KLEV
17 REAL(KIND=JPRB) ,INTENT(OUT) :: P_ATR1(jpgpt,jplay)
18 REAL(KIND=JPRB) ,INTENT(OUT) :: P_OD(jpgpt,jplay)
19 REAL(KIND=JPRB) ,INTENT(OUT) :: P_TF1(jpgpt,jplay)
20 REAL(KIND=JPRB) ,INTENT(IN) :: P_COLDRY(jplay)
21 REAL(KIND=JPRB) ,INTENT(IN) :: P_WX(jpxsec,jplay) ! Amount of trace gases
22 REAL(KIND=JPRB) ,INTENT(IN) :: P_TAUAERL(jplay,jpband)
23 REAL(KIND=JPRB) ,INTENT(IN) :: P_FAC00(jplay)
24 REAL(KIND=JPRB) ,INTENT(IN) :: P_FAC01(jplay)
25 REAL(KIND=JPRB) ,INTENT(IN) :: P_FAC10(jplay)
26 REAL(KIND=JPRB) ,INTENT(IN) :: P_FAC11(jplay)
27 REAL(KIND=JPRB) ,INTENT(IN) :: P_FORFAC(jplay)
28 INTEGER(KIND=JPIM),INTENT(IN) :: K_JP(jplay)
29 INTEGER(KIND=JPIM),INTENT(IN) :: K_JT(jplay)
30 INTEGER(KIND=JPIM),INTENT(IN) :: K_JT1(jplay)
31 REAL(KIND=JPRB) ,INTENT(IN) :: P_ONEMINUS
32 REAL(KIND=JPRB) ,INTENT(IN) :: P_COLH2O(jplay)
33 REAL(KIND=JPRB) ,INTENT(IN) :: P_COLCO2(jplay)
34 REAL(KIND=JPRB) ,INTENT(IN) :: P_COLO3(jplay)
35 REAL(KIND=JPRB) ,INTENT(IN) :: P_COLN2O(jplay)
36 REAL(KIND=JPRB) ,INTENT(IN) :: P_COLCH4(jplay)
37 REAL(KIND=JPRB) :: P_COLO2(jplay) ! Argument NOT used
38 REAL(KIND=JPRB) ,INTENT(IN) :: P_CO2MULT(jplay)
39 INTEGER(KIND=JPIM),INTENT(IN) :: K_LAYTROP
40 INTEGER(KIND=JPIM),INTENT(IN) :: K_LAYSWTCH
41 INTEGER(KIND=JPIM),INTENT(IN) :: K_LAYLOW
42 REAL(KIND=JPRB) ,INTENT(IN) :: P_SELFFAC(jplay)
43 REAL(KIND=JPRB) ,INTENT(IN) :: P_SELFFRAC(jplay)
44 INTEGER(KIND=JPIM),INTENT(IN) :: K_INDSELF(jplay)
45 REAL(KIND=JPRB) ,INTENT(OUT) :: PFRAC(jpgpt,jplay)
46 !- from AER
47 !- from INTFAC
48 !- from INTIND
49 !- from PRECISE
50 !- from PROFDATA
51 !- from SELF
52 !- from SP
53 REAL(KIND=JPRB) :: Z_TAU (jpgpt,jplay)
54 
55 INTEGER(KIND=JPIM) :: IPR, ITR, I_LAY
56 
57 REAL(KIND=JPRB) :: Z_ODEPTH, Z_SECANG, Z_TF
58 REAL(KIND=JPRB) :: ZHOOK_HANDLE
59 
60 #include "rrtm_taumol1.intfb.h"
61 #include "rrtm_taumol10.intfb.h"
62 #include "rrtm_taumol11.intfb.h"
63 #include "rrtm_taumol12.intfb.h"
64 #include "rrtm_taumol13.intfb.h"
65 #include "rrtm_taumol14.intfb.h"
66 #include "rrtm_taumol15.intfb.h"
67 #include "rrtm_taumol16.intfb.h"
68 #include "rrtm_taumol2.intfb.h"
69 #include "rrtm_taumol3.intfb.h"
70 #include "rrtm_taumol4.intfb.h"
71 #include "rrtm_taumol5.intfb.h"
72 #include "rrtm_taumol6.intfb.h"
73 #include "rrtm_taumol7.intfb.h"
74 #include "rrtm_taumol8.intfb.h"
75 #include "rrtm_taumol9.intfb.h"
76 
77 !- SECANG is equal to the secant of the diffusivity angle.
78 IF (lhook) CALL dr_hook('RRTM_GASABS1A_140GP',0,zhook_handle)
79 z_secang = 1.66_jprb
80 
81 CALL rrtm_taumol1 (klev,z_tau,&
82  & p_tauaerl,p_fac00,p_fac01,p_fac10,p_fac11,p_forfac,k_jp,k_jt,k_jt1,&
83  & p_colh2o,k_laytrop,p_selffac,p_selffrac,k_indself,pfrac)
84 CALL rrtm_taumol2 (klev,z_tau,p_coldry,&
85  & p_tauaerl,p_fac00,p_fac01,p_fac10,p_fac11,p_forfac,k_jp,k_jt,k_jt1,&
86  & p_colh2o,k_laytrop,p_selffac,p_selffrac,k_indself,pfrac)
87 CALL rrtm_taumol3 (klev,z_tau,&
88  & p_tauaerl,p_fac00,p_fac01,p_fac10,p_fac11,p_forfac,k_jp,k_jt,k_jt1,p_oneminus,&
89  & p_colh2o,p_colco2,p_coln2o,k_laytrop,p_selffac,p_selffrac,k_indself,pfrac)
90 CALL rrtm_taumol4 (klev,z_tau,&
91  & p_tauaerl,p_fac00,p_fac01,p_fac10,p_fac11,p_forfac,k_jp,k_jt,k_jt1,p_oneminus,&
92  & p_colh2o,p_colco2,p_colo3,k_laytrop,p_selffac,p_selffrac,k_indself,pfrac)
93 CALL rrtm_taumol5 (klev,z_tau,p_wx,&
94  & p_tauaerl,p_fac00,p_fac01,p_fac10,p_fac11,p_forfac,k_jp,k_jt,k_jt1,p_oneminus,&
95  & p_colh2o,p_colco2,p_colo3,k_laytrop,p_selffac,p_selffrac,k_indself,pfrac)
96 CALL rrtm_taumol6 (klev,z_tau,p_wx,&
97  & p_tauaerl,p_fac00,p_fac01,p_fac10,p_fac11,k_jp,k_jt,k_jt1,&
98  & p_colh2o,p_co2mult,k_laytrop,p_selffac,p_selffrac,k_indself,pfrac)
99 CALL rrtm_taumol7 (klev,z_tau,&
100  & p_tauaerl,p_fac00,p_fac01,p_fac10,p_fac11,k_jp,k_jt,k_jt1,p_oneminus,&
101  & p_colh2o,p_colo3,p_co2mult,k_laytrop,p_selffac,p_selffrac,k_indself,pfrac)
102 CALL rrtm_taumol8 (klev,z_tau,p_wx,&
103  & p_tauaerl,p_fac00,p_fac01,p_fac10,p_fac11,k_jp,k_jt,k_jt1,&
104  & p_colh2o,p_colo3,p_coln2o,p_co2mult,k_layswtch,p_selffac,p_selffrac,k_indself,pfrac)
105 CALL rrtm_taumol9 (klev,z_tau,&
106  & p_tauaerl,p_fac00,p_fac01,p_fac10,p_fac11,k_jp,k_jt,k_jt1,p_oneminus,&
107  & p_colh2o,p_coln2o,p_colch4,k_laytrop,k_layswtch,k_laylow,p_selffac,p_selffrac,k_indself,pfrac)
108 CALL rrtm_taumol10 (klev,z_tau,&
109  & p_tauaerl,p_fac00,p_fac01,p_fac10,p_fac11,k_jp,k_jt,k_jt1,&
110  & p_colh2o,k_laytrop,pfrac)
111 CALL rrtm_taumol11 (klev,z_tau,&
112  & p_tauaerl,p_fac00,p_fac01,p_fac10,p_fac11,k_jp,k_jt,k_jt1,&
113  & p_colh2o,k_laytrop,p_selffac,p_selffrac,k_indself,pfrac)
114 CALL rrtm_taumol12 (klev,z_tau,&
115  & p_tauaerl,p_fac00,p_fac01,p_fac10,p_fac11,k_jp,k_jt,k_jt1,p_oneminus,&
116  & p_colh2o,p_colco2,k_laytrop,p_selffac,p_selffrac,k_indself,pfrac)
117 CALL rrtm_taumol13 (klev,z_tau,&
118  & p_tauaerl,p_fac00,p_fac01,p_fac10,p_fac11,k_jp,k_jt,k_jt1,p_oneminus,&
119  & p_colh2o,p_coln2o,k_laytrop,p_selffac,p_selffrac,k_indself,pfrac)
120 CALL rrtm_taumol14 (klev,z_tau,&
121  & p_tauaerl,p_fac00,p_fac01,p_fac10,p_fac11,k_jp,k_jt,k_jt1,&
122  & p_colco2,k_laytrop,p_selffac,p_selffrac,k_indself,pfrac)
123 CALL rrtm_taumol15 (klev,z_tau,&
124  & p_tauaerl,p_fac00,p_fac01,p_fac10,p_fac11,k_jp,k_jt,k_jt1,p_oneminus,&
125  & p_colh2o,p_colco2,p_coln2o,k_laytrop,p_selffac,p_selffrac,k_indself,pfrac)
126 CALL rrtm_taumol16 (klev,z_tau,&
127  & p_tauaerl,p_fac00,p_fac01,p_fac10,p_fac11,k_jp,k_jt,k_jt1,p_oneminus,&
128  & p_colh2o,p_colch4,k_laytrop,p_selffac,p_selffrac,k_indself,pfrac)
129 
130 !- Loop over g-channels.
131 DO i_lay = 1, klev
132  DO ipr = 1, jpgpt
133  z_odepth = z_secang * z_tau(ipr,i_lay)
134  p_od(ipr,i_lay) = z_odepth
135  z_odepth=0.5d0*(abs(z_odepth)+z_odepth)
136 
137 !-- revised code to get the pre-computed transmission
138 ! IF (ODEPTH.LE.0.) PRINT*, 'ODEPTH = ',ODEPTH
139 !! IF (ODEPTH <= _ZERO_)THEN
140 !! ATR1(IPR,LAY) = _ONE_ - TRANS(0)
141 !! TF1(IPR,LAY) = _ZERO_
142 !! ELSE
143 
144  z_tf = z_odepth/(bpade+z_odepth)
145  itr=int(5.e+03_jprb*z_tf+0.5_jprb)
146  IF (itr.LT.0) itr=0 ! MPL 12.12.08
147  p_atr1(ipr,i_lay) = 1.0_jprb - trans(itr)
148  p_tf1(ipr,i_lay) = z_tf
149 
150 !! ENDIF
151  ENDDO
152 ENDDO
153 
154 ! -----------------------------------------------------------------
155 
156 IF (lhook) CALL dr_hook('RRTM_GASABS1A_140GP',1,zhook_handle)
157 END SUBROUTINE rrtm_gasabs1a_140gp
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
subroutine rrtm_taumol4(KLEV, P_TAU, 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_taumol4.F90:5
subroutine rrtm_taumol6(KLEV, P_TAU, P_WX, P_TAUAERL, P_FAC00, P_FAC01, P_FAC10, P_FAC11, K_JP, K_JT, K_JT1, P_COLH2O, P_CO2MULT, K_LAYTROP, P_SELFFAC, P_SELFFRAC, K_INDSELF, PFRAC)
Definition: rrtm_taumol6.F90:5
subroutine rrtm_taumol13(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, K_LAYTROP, P_SELFFAC, P_SELFFRAC, K_INDSELF, PFRAC)
subroutine rrtm_taumol11(KLEV, P_TAU, P_TAUAERL, P_FAC00, P_FAC01, P_FAC10, P_FAC11, K_JP, K_JT, K_JT1, P_COLH2O, K_LAYTROP, P_SELFFAC, P_SELFFRAC, K_INDSELF, PFRAC)
subroutine rrtm_taumol14(KLEV, P_TAU, P_TAUAERL, P_FAC00, P_FAC01, P_FAC10, P_FAC11, K_JP, K_JT, K_JT1, P_COLCO2, K_LAYTROP, P_SELFFAC, P_SELFFRAC, K_INDSELF, PFRAC)
integer(kind=jpim), parameter jpgpt
Definition: parrrtm.F90:21
subroutine rrtm_taumol7(KLEV, P_TAU, P_TAUAERL, P_FAC00, P_FAC01, P_FAC10, P_FAC11, K_JP, K_JT, K_JT1, P_ONEMINUS, P_COLH2O, P_COLO3, P_CO2MULT, K_LAYTROP, P_SELFFAC, P_SELFFRAC, K_INDSELF, PFRAC)
Definition: rrtm_taumol7.F90:5
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
subroutine rrtm_taumol3(KLEV, P_TAU, 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_COLN2O, K_LAYTROP, P_SELFFAC, P_SELFFRAC, K_INDSELF, PFRAC)
Definition: rrtm_taumol3.F90:5
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
subroutine rrtm_taumol10(KLEV, P_TAU, P_TAUAERL, P_FAC00, P_FAC01, P_FAC10, P_FAC11, K_JP, K_JT, K_JT1, P_COLH2O, K_LAYTROP, PFRAC)
real(kind=jprb), dimension(0:5000) trans
Definition: yoerrtab.F90:13
integer, parameter jprb
Definition: parkind1.F90:31
subroutine rrtm_taumol12(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, K_LAYTROP, P_SELFFAC, P_SELFFRAC, K_INDSELF, PFRAC)
logical lhook
Definition: yomhook.F90:12
subroutine rrtm_gasabs1a_140gp(KLEV, P_ATR1, P_OD, P_TF1, P_COLDRY, 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, P_COLN2O, P_COLCH4, P_COLO2, P_CO2MULT, K_LAYTROP, K_LAYSWTCH, K_LAYLOW, P_SELFFAC, P_SELFFRAC, K_INDSELF, PFRAC)
subroutine rrtm_taumol16(KLEV, P_TAU, P_TAUAERL, P_FAC00, P_FAC01, P_FAC10, P_FAC11, K_JP, K_JT, K_JT1, P_ONEMINUS, P_COLH2O, P_COLCH4, K_LAYTROP, P_SELFFAC, P_SELFFRAC, K_INDSELF, PFRAC)
integer(kind=jpim), parameter jplay
Definition: parrrtm.F90:15
subroutine dr_hook(CDNAME, KSWITCH, PKEY)
Definition: yomhook.F90:17
subroutine rrtm_taumol1(KLEV, P_TAU, P_TAUAERL, P_FAC00, P_FAC01, P_FAC10, P_FAC11, P_FORFAC, K_JP, K_JT, K_JT1, P_COLH2O, K_LAYTROP, P_SELFFAC, P_SELFFRAC, K_INDSELF, PFRAC)
real(kind=jprb) bpade
Definition: yoerrtab.F90:14
integer, parameter jpim
Definition: parkind1.F90:13
subroutine rrtm_taumol2(KLEV, P_TAU, P_COLDRY, P_TAUAERL, P_FAC00, P_FAC01, P_FAC10, P_FAC11, P_FORFAC, K_JP, K_JT, K_JT1, P_COLH2O, K_LAYTROP, P_SELFFAC, P_SELFFRAC, K_INDSELF, PFRAC)
Definition: rrtm_taumol2.F90:5
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)
integer(kind=jpim), parameter jpxsec
Definition: parrrtm.F90:19