[3331] | 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 |
---|