[3880] | 1 | #ifdef RS6K |
---|
| 2 | @PROCESS HOT(NOVECTOR) NOSTRICT |
---|
| 3 | #endif |
---|
| 4 | SUBROUTINE SRTM_GAS_OPTICAL_DEPTH & |
---|
| 5 | & ( KIDIA , KFDIA , KLEV , PONEMINUS, & |
---|
| 6 | & PRMU0, & |
---|
| 7 | & KLAYTROP,& |
---|
| 8 | & PCOLCH4 , PCOLCO2 , PCOLH2O , PCOLMOL , PCOLO2 , PCOLO3 ,& |
---|
| 9 | & PFORFAC , PFORFRAC , KINDFOR , PSELFFAC, PSELFFRAC, KINDSELF ,& |
---|
| 10 | & PFAC00 , PFAC01 , PFAC10 , PFAC11 ,& |
---|
| 11 | & KJP , KJT , KJT1 ,& |
---|
| 12 | !-- output arrays |
---|
| 13 | & POD, PSSA, PINCSOL) |
---|
| 14 | |
---|
| 15 | |
---|
| 16 | !**** *SRTM_GAS_OPTICAL_DEPTH* - SPECTRAL LOOP TO COMPUTE THE SHORTWAVE RADIATION FLUXES. |
---|
| 17 | |
---|
| 18 | ! PURPOSE. |
---|
| 19 | ! -------- |
---|
| 20 | |
---|
| 21 | ! COMPUTE THE GAS OPTICAL DEPTH AT EACH SHORTWAVE G POINT |
---|
| 22 | |
---|
| 23 | !** INTERFACE. |
---|
| 24 | ! ---------- |
---|
| 25 | |
---|
| 26 | ! *SRTM_GAS_OPTICAL_DEPTH* IS CALLED FROM THE NEW RADIATION SCHEME |
---|
| 27 | |
---|
| 28 | ! IMPLICIT ARGUMENTS : |
---|
| 29 | ! -------------------- |
---|
| 30 | |
---|
| 31 | ! ==== INPUTS === |
---|
| 32 | ! ==== OUTPUTS === |
---|
| 33 | |
---|
| 34 | ! METHOD. |
---|
| 35 | ! ------- |
---|
| 36 | |
---|
| 37 | ! EXTERNALS. |
---|
| 38 | ! ---------- |
---|
| 39 | |
---|
| 40 | ! REFERENCE. |
---|
| 41 | ! ---------- |
---|
| 42 | |
---|
| 43 | ! SEE RADIATION'S PART OF THE ECMWF RESEARCH DEPARTMENT |
---|
| 44 | ! DOCUMENTATION |
---|
| 45 | ! AUTHOR. |
---|
| 46 | ! ------- |
---|
| 47 | ! ADAPTED FROM SRTM_SPCVRT_MCICA (BY JEAN-JACQUES MORCRETTE) BY |
---|
| 48 | ! ROBIN HOGAN |
---|
| 49 | ! |
---|
| 50 | ! MODIFICATIONS. |
---|
| 51 | ! -------------- |
---|
| 52 | ! ORIGINAL : 2015-07-16 |
---|
| 53 | |
---|
| 54 | ! ------------------------------------------------------------------ |
---|
| 55 | |
---|
| 56 | USE PARKIND1 , ONLY : JPIM, JPRB |
---|
| 57 | USE YOMHOOK , ONLY : LHOOK, DR_HOOK |
---|
| 58 | USE PARSRTM , ONLY : JPB1, JPB2 |
---|
| 59 | USE YOESRTM , ONLY : JPGPT |
---|
| 60 | USE YOESRTWN , ONLY : NGC |
---|
| 61 | |
---|
| 62 | IMPLICIT NONE |
---|
| 63 | |
---|
| 64 | ! ------------------------------------------------------------------ |
---|
| 65 | |
---|
| 66 | !* 0.1 ARGUMENTS |
---|
| 67 | ! --------- |
---|
| 68 | |
---|
| 69 | INTEGER(KIND=JPIM),INTENT(IN) :: KIDIA, KFDIA |
---|
| 70 | INTEGER(KIND=JPIM),INTENT(IN) :: KLEV |
---|
| 71 | REAL(KIND=JPRB) ,INTENT(IN) :: PONEMINUS(KIDIA:KFDIA) |
---|
| 72 | REAL(KIND=JPRB) ,INTENT(IN) :: PRMU0(KIDIA:KFDIA) |
---|
| 73 | INTEGER(KIND=JPIM),INTENT(IN) :: KLAYTROP(KIDIA:KFDIA) |
---|
| 74 | REAL(KIND=JPRB) ,INTENT(IN) :: PCOLCH4(KIDIA:KFDIA,KLEV) |
---|
| 75 | REAL(KIND=JPRB) ,INTENT(IN) :: PCOLCO2(KIDIA:KFDIA,KLEV) |
---|
| 76 | REAL(KIND=JPRB) ,INTENT(IN) :: PCOLH2O(KIDIA:KFDIA,KLEV) |
---|
| 77 | REAL(KIND=JPRB) ,INTENT(IN) :: PCOLMOL(KIDIA:KFDIA,KLEV) |
---|
| 78 | REAL(KIND=JPRB) ,INTENT(IN) :: PCOLO2(KIDIA:KFDIA,KLEV) |
---|
| 79 | REAL(KIND=JPRB) ,INTENT(IN) :: PCOLO3(KIDIA:KFDIA,KLEV) |
---|
| 80 | REAL(KIND=JPRB) ,INTENT(IN) :: PFORFAC(KIDIA:KFDIA,KLEV) |
---|
| 81 | REAL(KIND=JPRB) ,INTENT(IN) :: PFORFRAC(KIDIA:KFDIA,KLEV) |
---|
| 82 | INTEGER(KIND=JPIM),INTENT(IN) :: KINDFOR(KIDIA:KFDIA,KLEV) |
---|
| 83 | REAL(KIND=JPRB) ,INTENT(IN) :: PSELFFAC(KIDIA:KFDIA,KLEV) |
---|
| 84 | REAL(KIND=JPRB) ,INTENT(IN) :: PSELFFRAC(KIDIA:KFDIA,KLEV) |
---|
| 85 | INTEGER(KIND=JPIM),INTENT(IN) :: KINDSELF(KIDIA:KFDIA,KLEV) |
---|
| 86 | REAL(KIND=JPRB) ,INTENT(IN) :: PFAC00(KIDIA:KFDIA,KLEV) |
---|
| 87 | REAL(KIND=JPRB) ,INTENT(IN) :: PFAC01(KIDIA:KFDIA,KLEV) |
---|
| 88 | REAL(KIND=JPRB) ,INTENT(IN) :: PFAC10(KIDIA:KFDIA,KLEV) |
---|
| 89 | REAL(KIND=JPRB) ,INTENT(IN) :: PFAC11(KIDIA:KFDIA,KLEV) |
---|
| 90 | INTEGER(KIND=JPIM),INTENT(IN) :: KJP(KIDIA:KFDIA,KLEV) |
---|
| 91 | INTEGER(KIND=JPIM),INTENT(IN) :: KJT(KIDIA:KFDIA,KLEV) |
---|
| 92 | INTEGER(KIND=JPIM),INTENT(IN) :: KJT1(KIDIA:KFDIA,KLEV) |
---|
| 93 | |
---|
| 94 | REAL(KIND=JPRB) ,INTENT(OUT) :: POD(KIDIA:KFDIA,KLEV,JPGPT) ! Optical depth |
---|
| 95 | REAL(KIND=JPRB) ,INTENT(OUT) :: PSSA(KIDIA:KFDIA,KLEV,JPGPT) ! Single scattering albedo |
---|
| 96 | REAL(KIND=JPRB) ,INTENT(OUT) :: PINCSOL(KIDIA:KFDIA,JPGPT) ! Incoming solar flux |
---|
| 97 | |
---|
| 98 | |
---|
| 99 | ! ------------------------------------------------------------------ |
---|
| 100 | |
---|
| 101 | INTEGER(KIND=JPIM) :: IB1, IB2, IBM, IGT, IW(KIDIA:KFDIA), JB, JG, JK, JL, IC, ICOUNT |
---|
| 102 | |
---|
| 103 | INTEGER(KIND=JPIM) :: IND(KFDIA-KIDIA+1) |
---|
| 104 | |
---|
| 105 | |
---|
| 106 | !-- Output of SRTM_TAUMOLn routines |
---|
| 107 | REAL(KIND=JPRB) :: ZTAUG(KIDIA:KFDIA,KLEV,16) ! Absorption optical depth |
---|
| 108 | REAL(KIND=JPRB) :: ZTAUR(KIDIA:KFDIA,KLEV,16) ! Rayleigh optical depth |
---|
| 109 | REAL(KIND=JPRB) :: ZSFLXZEN(KIDIA:KFDIA,16) ! Incoming solar flux |
---|
| 110 | |
---|
| 111 | |
---|
| 112 | REAL(KIND=JPRB) :: ZTAU, ZPAO, ZPTO |
---|
| 113 | REAL(KIND=JPRB) :: ZPAOJ(KIDIA:KFDIA,KLEV) |
---|
| 114 | REAL(KIND=JPRB) :: ZPTOJ(KIDIA:KFDIA,KLEV) |
---|
| 115 | REAL(KIND=JPRB) :: ZRMU0D(KIDIA:KFDIA) |
---|
| 116 | |
---|
| 117 | REAL(KIND=JPRB) :: ZHOOK_HANDLE |
---|
| 118 | |
---|
| 119 | |
---|
| 120 | #include "srtm_taumol16.intfb.h" |
---|
| 121 | #include "srtm_taumol17.intfb.h" |
---|
| 122 | #include "srtm_taumol18.intfb.h" |
---|
| 123 | #include "srtm_taumol19.intfb.h" |
---|
| 124 | #include "srtm_taumol20.intfb.h" |
---|
| 125 | #include "srtm_taumol21.intfb.h" |
---|
| 126 | #include "srtm_taumol22.intfb.h" |
---|
| 127 | #include "srtm_taumol23.intfb.h" |
---|
| 128 | #include "srtm_taumol24.intfb.h" |
---|
| 129 | #include "srtm_taumol25.intfb.h" |
---|
| 130 | #include "srtm_taumol26.intfb.h" |
---|
| 131 | #include "srtm_taumol27.intfb.h" |
---|
| 132 | #include "srtm_taumol28.intfb.h" |
---|
| 133 | #include "srtm_taumol29.intfb.h" |
---|
| 134 | |
---|
| 135 | ! ------------------------------------------------------------------ |
---|
| 136 | ASSOCIATE(NFLEVG=>KLEV) |
---|
| 137 | IF (LHOOK) CALL DR_HOOK('SRTM_GAS_OPTICAL_DEPTH',0,ZHOOK_HANDLE) |
---|
| 138 | |
---|
| 139 | IB1=JPB1 |
---|
| 140 | IB2=JPB2 |
---|
| 141 | |
---|
| 142 | IC=0 |
---|
| 143 | DO JL = KIDIA, KFDIA |
---|
| 144 | IF (PRMU0(JL) > 0.0_JPRB) THEN |
---|
| 145 | IC=IC+1 |
---|
| 146 | IND(IC)=JL |
---|
| 147 | IW(JL)=0 |
---|
| 148 | ENDIF |
---|
| 149 | ENDDO |
---|
| 150 | ICOUNT=IC |
---|
| 151 | IF(ICOUNT==0)THEN |
---|
| 152 | IF (LHOOK) CALL DR_HOOK('SRTM_SPCVRT_MCICA',1,ZHOOK_HANDLE) |
---|
| 153 | RETURN |
---|
| 154 | ENDIF |
---|
| 155 | |
---|
| 156 | JB=IB1-1 |
---|
| 157 | DO JB = IB1, IB2 |
---|
| 158 | DO IC=1,ICOUNT |
---|
| 159 | JL=IND(IC) |
---|
| 160 | IBM = JB-15 |
---|
| 161 | IGT = NGC(IBM) |
---|
| 162 | ENDDO |
---|
| 163 | |
---|
| 164 | !-- for each band, computes the gaseous and Rayleigh optical thickness |
---|
| 165 | ! for all g-points within the band |
---|
| 166 | |
---|
| 167 | IF (JB == 16) THEN |
---|
| 168 | CALL SRTM_TAUMOL16 & |
---|
| 169 | & ( KIDIA , KFDIA , KLEV ,& |
---|
| 170 | & PFAC00 , PFAC01 , PFAC10 , PFAC11 ,& |
---|
| 171 | & KJP , KJT , KJT1 , PONEMINUS,& |
---|
| 172 | & PCOLH2O , PCOLCH4 , PCOLMOL ,& |
---|
| 173 | & KLAYTROP, PSELFFAC , PSELFFRAC, KINDSELF, PFORFAC , PFORFRAC, KINDFOR ,& |
---|
| 174 | & ZSFLXZEN, ZTAUG , ZTAUR , PRMU0 & |
---|
| 175 | & ) |
---|
| 176 | |
---|
| 177 | ELSEIF (JB == 17) THEN |
---|
| 178 | CALL SRTM_TAUMOL17 & |
---|
| 179 | & ( KIDIA , KFDIA , KLEV ,& |
---|
| 180 | & PFAC00 , PFAC01 , PFAC10 , PFAC11 ,& |
---|
| 181 | & KJP , KJT , KJT1 , PONEMINUS ,& |
---|
| 182 | & PCOLH2O , PCOLCO2 , PCOLMOL ,& |
---|
| 183 | & KLAYTROP, PSELFFAC, PSELFFRAC, KINDSELF , PFORFAC, PFORFRAC, KINDFOR ,& |
---|
| 184 | & ZSFLXZEN, ZTAUG , ZTAUR , PRMU0 & |
---|
| 185 | & ) |
---|
| 186 | |
---|
| 187 | ELSEIF (JB == 18) THEN |
---|
| 188 | CALL SRTM_TAUMOL18 & |
---|
| 189 | & ( KIDIA , KFDIA , KLEV ,& |
---|
| 190 | & PFAC00 , PFAC01 , PFAC10 , PFAC11 ,& |
---|
| 191 | & KJP , KJT , KJT1 , PONEMINUS ,& |
---|
| 192 | & PCOLH2O , PCOLCH4 , PCOLMOL ,& |
---|
| 193 | & KLAYTROP, PSELFFAC, PSELFFRAC, KINDSELF , PFORFAC, PFORFRAC, KINDFOR ,& |
---|
| 194 | & ZSFLXZEN, ZTAUG , ZTAUR , PRMU0 & |
---|
| 195 | & ) |
---|
| 196 | |
---|
| 197 | ELSEIF (JB == 19) THEN |
---|
| 198 | CALL SRTM_TAUMOL19 & |
---|
| 199 | & ( KIDIA , KFDIA , KLEV ,& |
---|
| 200 | & PFAC00 , PFAC01 , PFAC10 , PFAC11 ,& |
---|
| 201 | & KJP , KJT , KJT1 , PONEMINUS ,& |
---|
| 202 | & PCOLH2O , PCOLCO2 , PCOLMOL ,& |
---|
| 203 | & KLAYTROP, PSELFFAC, PSELFFRAC, KINDSELF , PFORFAC, PFORFRAC, KINDFOR ,& |
---|
| 204 | & ZSFLXZEN, ZTAUG , ZTAUR , PRMU0 & |
---|
| 205 | & ) |
---|
| 206 | |
---|
| 207 | ELSEIF (JB == 20) THEN |
---|
| 208 | CALL SRTM_TAUMOL20 & |
---|
| 209 | & ( KIDIA , KFDIA , KLEV ,& |
---|
| 210 | & PFAC00 , PFAC01 , PFAC10 , PFAC11 ,& |
---|
| 211 | & KJP , KJT , KJT1 ,& |
---|
| 212 | & PCOLH2O , PCOLCH4 , PCOLMOL ,& |
---|
| 213 | & KLAYTROP, PSELFFAC, PSELFFRAC, KINDSELF , PFORFAC, PFORFRAC, KINDFOR ,& |
---|
| 214 | & ZSFLXZEN, ZTAUG , ZTAUR , PRMU0 & |
---|
| 215 | & ) |
---|
| 216 | |
---|
| 217 | ELSEIF (JB == 21) THEN |
---|
| 218 | CALL SRTM_TAUMOL21 & |
---|
| 219 | & ( KIDIA , KFDIA , KLEV ,& |
---|
| 220 | & PFAC00 , PFAC01 , PFAC10 , PFAC11 ,& |
---|
| 221 | & KJP , KJT , KJT1 , PONEMINUS ,& |
---|
| 222 | & PCOLH2O , PCOLCO2 , PCOLMOL ,& |
---|
| 223 | & KLAYTROP, PSELFFAC, PSELFFRAC, KINDSELF , PFORFAC, PFORFRAC, KINDFOR ,& |
---|
| 224 | & ZSFLXZEN, ZTAUG , ZTAUR , PRMU0 & |
---|
| 225 | & ) |
---|
| 226 | |
---|
| 227 | ELSEIF (JB == 22) THEN |
---|
| 228 | CALL SRTM_TAUMOL22 & |
---|
| 229 | & ( KIDIA , KFDIA , KLEV ,& |
---|
| 230 | & PFAC00 , PFAC01 , PFAC10 , PFAC11 ,& |
---|
| 231 | & KJP , KJT , KJT1 , PONEMINUS ,& |
---|
| 232 | & PCOLH2O , PCOLMOL , PCOLO2 ,& |
---|
| 233 | & KLAYTROP, PSELFFAC, PSELFFRAC, KINDSELF , PFORFAC, PFORFRAC, KINDFOR ,& |
---|
| 234 | & ZSFLXZEN, ZTAUG , ZTAUR , PRMU0 & |
---|
| 235 | & ) |
---|
| 236 | |
---|
| 237 | ELSEIF (JB == 23) THEN |
---|
| 238 | CALL SRTM_TAUMOL23 & |
---|
| 239 | & ( KIDIA , KFDIA , KLEV ,& |
---|
| 240 | & PFAC00 , PFAC01 , PFAC10 , PFAC11 ,& |
---|
| 241 | & KJP , KJT , KJT1 ,& |
---|
| 242 | & PCOLH2O , PCOLMOL ,& |
---|
| 243 | & KLAYTROP, PSELFFAC, PSELFFRAC, KINDSELF , PFORFAC, PFORFRAC, KINDFOR ,& |
---|
| 244 | & ZSFLXZEN, ZTAUG , ZTAUR , PRMU0 & |
---|
| 245 | & ) |
---|
| 246 | |
---|
| 247 | ELSEIF (JB == 24) THEN |
---|
| 248 | CALL SRTM_TAUMOL24 & |
---|
| 249 | & ( KIDIA , KFDIA , KLEV ,& |
---|
| 250 | & PFAC00 , PFAC01 , PFAC10 , PFAC11 ,& |
---|
| 251 | & KJP , KJT , KJT1 , PONEMINUS ,& |
---|
| 252 | & PCOLH2O , PCOLMOL , PCOLO2 , PCOLO3 ,& |
---|
| 253 | & KLAYTROP, PSELFFAC, PSELFFRAC, KINDSELF , PFORFAC, PFORFRAC, KINDFOR ,& |
---|
| 254 | & ZSFLXZEN, ZTAUG , ZTAUR , PRMU0 & |
---|
| 255 | & ) |
---|
| 256 | |
---|
| 257 | ELSEIF (JB == 25) THEN |
---|
| 258 | !--- visible 16000-22650 cm-1 0.4415 - 0.6250 um |
---|
| 259 | CALL SRTM_TAUMOL25 & |
---|
| 260 | & ( KIDIA , KFDIA , KLEV ,& |
---|
| 261 | & PFAC00 , PFAC01 , PFAC10 , PFAC11 ,& |
---|
| 262 | & KJP , KJT , KJT1 ,& |
---|
| 263 | & PCOLH2O , PCOLMOL , PCOLO3 ,& |
---|
| 264 | & KLAYTROP ,& |
---|
| 265 | & ZSFLXZEN, ZTAUG , ZTAUR , PRMU0 & |
---|
| 266 | & ) |
---|
| 267 | |
---|
| 268 | ELSEIF (JB == 26) THEN |
---|
| 269 | !--- UV-A 22650-29000 cm-1 0.3448 - 0.4415 um |
---|
| 270 | CALL SRTM_TAUMOL26 & |
---|
| 271 | & ( KIDIA , KFDIA , KLEV ,& |
---|
| 272 | & PCOLMOL ,KLAYTROP,& |
---|
| 273 | & ZSFLXZEN, ZTAUG , ZTAUR , PRMU0 & |
---|
| 274 | & ) |
---|
| 275 | |
---|
| 276 | ELSEIF (JB == 27) THEN |
---|
| 277 | !--- UV-B 29000-38000 cm-1 0.2632 - 0.3448 um |
---|
| 278 | CALL SRTM_TAUMOL27 & |
---|
| 279 | & ( KIDIA , KFDIA , KLEV ,& |
---|
| 280 | & PFAC00 , PFAC01 , PFAC10 , PFAC11 ,& |
---|
| 281 | & KJP , KJT , KJT1 ,& |
---|
| 282 | & PCOLMOL , PCOLO3 ,& |
---|
| 283 | & KLAYTROP ,& |
---|
| 284 | & ZSFLXZEN, ZTAUG , ZTAUR , PRMU0 & |
---|
| 285 | & ) |
---|
| 286 | |
---|
| 287 | ELSEIF (JB == 28) THEN |
---|
| 288 | !--- UV-C 38000-50000 cm-1 0.2000 - 0.2632 um |
---|
| 289 | CALL SRTM_TAUMOL28 & |
---|
| 290 | & ( KIDIA , KFDIA , KLEV ,& |
---|
| 291 | & PFAC00 , PFAC01 , PFAC10 , PFAC11 ,& |
---|
| 292 | & KJP , KJT , KJT1 , PONEMINUS ,& |
---|
| 293 | & PCOLMOL , PCOLO2 , PCOLO3 ,& |
---|
| 294 | & KLAYTROP ,& |
---|
| 295 | & ZSFLXZEN, ZTAUG , ZTAUR , PRMU0 & |
---|
| 296 | & ) |
---|
| 297 | |
---|
| 298 | ELSEIF (JB == 29) THEN |
---|
| 299 | CALL SRTM_TAUMOL29 & |
---|
| 300 | & ( KIDIA , KFDIA , KLEV ,& |
---|
| 301 | & PFAC00 , PFAC01 , PFAC10 , PFAC11 ,& |
---|
| 302 | & KJP , KJT , KJT1 ,& |
---|
| 303 | & PCOLH2O , PCOLCO2 , PCOLMOL ,& |
---|
| 304 | & KLAYTROP , PSELFFAC, PSELFFRAC, KINDSELF , PFORFAC, PFORFRAC, KINDFOR ,& |
---|
| 305 | & ZSFLXZEN , ZTAUG , ZTAUR , PRMU0 & |
---|
| 306 | & ) |
---|
| 307 | |
---|
| 308 | ENDIF |
---|
| 309 | |
---|
| 310 | DO JG=1,IGT |
---|
| 311 | DO IC=1,ICOUNT |
---|
| 312 | JL=IND(IC) |
---|
| 313 | IW(JL)=IW(JL)+1 |
---|
| 314 | |
---|
| 315 | ! Incoming solar flux into plane perp to incoming radiation |
---|
| 316 | PINCSOL(JL,IW(JL)) = ZSFLXZEN(JL,JG) |
---|
| 317 | ENDDO |
---|
| 318 | |
---|
| 319 | DO JK=1,KLEV |
---|
| 320 | DO IC=1,ICOUNT |
---|
| 321 | JL=IND(IC) |
---|
| 322 | POD (JL,JK,IW(JL)) = ZTAUR(JL,JK,JG) + ZTAUG(JL,JK,JG) |
---|
| 323 | PSSA(JL,JK,IW(JL)) = ZTAUR(JL,JK,JG) / POD(JL,JK,IW(JL)) |
---|
| 324 | ENDDO |
---|
| 325 | ENDDO |
---|
| 326 | |
---|
| 327 | ENDDO !-- end loop on JG (g point) |
---|
| 328 | |
---|
| 329 | ENDDO !-- end loop on JB (band) |
---|
| 330 | |
---|
| 331 | ! ------------------------------------------------------------------ |
---|
| 332 | IF (LHOOK) CALL DR_HOOK('SRTM_GAS_OPTICAL_DEPTH',1,ZHOOK_HANDLE) |
---|
| 333 | END ASSOCIATE |
---|
| 334 | END SUBROUTINE SRTM_GAS_OPTICAL_DEPTH |
---|