| Directory: | ./ |
|---|---|
| File: | rad/swde.f90 |
| Date: | 2022-01-11 19:19:34 |
| Exec | Total | Coverage | |
|---|---|---|---|
| Lines: | 76 | 83 | 91.6% |
| Branches: | 10 | 20 | 50.0% |
| Line | Branch | Exec | Source |
|---|---|---|---|
| 1 | !OPTIONS XOPT(HSFUN) | ||
| 2 | 56160 | SUBROUTINE SWDE & | |
| 3 | & ( KIDIA, KFDIA, KLON,& | ||
| 4 | & PGG , PREF , PRMUZ, PTO1, PW,& | ||
| 5 | & PRE1 , PRE2 , PTR1 , PTR2 & | ||
| 6 | & ) | ||
| 7 | |||
| 8 | !**** *SWDE* - DELTA-EDDINGTON IN A CLOUDY LAYER | ||
| 9 | |||
| 10 | ! PURPOSE. | ||
| 11 | ! -------- | ||
| 12 | ! COMPUTES THE REFLECTIVITY AND TRANSMISSIVITY OF A CLOUDY | ||
| 13 | ! LAYER USING THE DELTA-EDDINGTON'S APPROXIMATION. | ||
| 14 | |||
| 15 | !** INTERFACE. | ||
| 16 | ! ---------- | ||
| 17 | ! *SWDE* IS CALLED BY *SWR*, *SWNI* | ||
| 18 | |||
| 19 | ! EXPLICIT ARGUMENTS : | ||
| 20 | ! -------------------- | ||
| 21 | ! PGG : (KLON) ; ASSYMETRY FACTOR | ||
| 22 | ! PREF : (KLON) ; REFLECTIVITY OF THE UNDERLYING LAYER | ||
| 23 | ! PRMUZ : (KLON) ; COSINE OF SOLAR ZENITH ANGLE | ||
| 24 | ! PTO1 : (KLON) ; OPTICAL THICKNESS | ||
| 25 | ! PW : (KLON) ; SINGLE SCATTERING ALBEDO | ||
| 26 | ! ==== OUTPUTS === | ||
| 27 | ! PRE1 : (KLON) ; LAYER REFLECTIVITY ASSUMING NO | ||
| 28 | ! ; REFLECTION FROM UNDERLYING LAYER | ||
| 29 | ! PTR1 : (KLON) ; LAYER TRANSMISSIVITY ASSUMING NO | ||
| 30 | ! ; REFLECTION FROM UNDERLYING LAYER | ||
| 31 | ! PRE2 : (KLON) ; LAYER REFLECTIVITY ASSUMING | ||
| 32 | ! ; REFLECTION FROM UNDERLYING LAYER | ||
| 33 | ! PTR2 : (KLON) ; LAYER TRANSMISSIVITY ASSUMING | ||
| 34 | ! ; REFLECTION FROM UNDERLYING LAYER | ||
| 35 | |||
| 36 | ! IMPLICIT ARGUMENTS : NONE | ||
| 37 | ! -------------------- | ||
| 38 | |||
| 39 | ! METHOD. | ||
| 40 | ! ------- | ||
| 41 | |||
| 42 | ! STANDARD DELTA-EDDINGTON LAYER CALCULATIONS. | ||
| 43 | |||
| 44 | ! EXTERNALS. | ||
| 45 | ! ---------- | ||
| 46 | |||
| 47 | ! NONE | ||
| 48 | |||
| 49 | ! REFERENCE. | ||
| 50 | ! ---------- | ||
| 51 | |||
| 52 | ! SEE RADIATION'S PART OF THE MODEL'S DOCUMENTATION AND | ||
| 53 | ! ECMWF RESEARCH DEPARTMENT DOCUMENTATION OF THE IFS | ||
| 54 | |||
| 55 | ! AUTHOR. | ||
| 56 | ! ------- | ||
| 57 | ! JEAN-JACQUES MORCRETTE *ECMWF* | ||
| 58 | |||
| 59 | ! MODIFICATIONS. | ||
| 60 | ! -------------- | ||
| 61 | ! ORIGINAL: 88-12-15 | ||
| 62 | ! 96-05-30 Michel Deque (security in EXP()) | ||
| 63 | ! M.Hamrud 01-Oct-2003 CY28 Cleaning | ||
| 64 | ! Modified: 03-10-10 Deborah Salmond and Marta Janiskova Optimisation | ||
| 65 | ! Modified: 03-12-13 John Hague - MASS Vector Fns | ||
| 66 | ! Y.Seity 06-09-09 : add modset from O.Thouron (MesoNH) under NOVLP tests | ||
| 67 | ! ------------------------------------------------------------------ | ||
| 68 | |||
| 69 | ! ------------------------------------------------------------------ | ||
| 70 | |||
| 71 | !* 0.1 ARGUMENTS | ||
| 72 | ! --------- | ||
| 73 | |||
| 74 | USE PARKIND1 ,ONLY : JPIM ,JPRB | ||
| 75 | USE YOMHOOK ,ONLY : LHOOK, DR_HOOK | ||
| 76 | |||
| 77 | USE YOERDU , ONLY : REPLOG | ||
| 78 | USE YOMJFH , ONLY : N_VMASS | ||
| 79 | !++MODIFCODE | ||
| 80 | USE YOERAD , ONLY : NOVLP | ||
| 81 | !--MODIFCODE | ||
| 82 | IMPLICIT NONE | ||
| 83 | |||
| 84 | INTEGER(KIND=JPIM),INTENT(IN) :: KLON | ||
| 85 | INTEGER(KIND=JPIM),INTENT(IN) :: KIDIA | ||
| 86 | INTEGER(KIND=JPIM),INTENT(IN) :: KFDIA | ||
| 87 | REAL(KIND=JPRB) ,INTENT(IN) :: PGG(KLON) | ||
| 88 | REAL(KIND=JPRB) ,INTENT(IN) :: PREF(KLON) | ||
| 89 | REAL(KIND=JPRB) ,INTENT(IN) :: PRMUZ(KLON) | ||
| 90 | REAL(KIND=JPRB) ,INTENT(IN) :: PTO1(KLON) | ||
| 91 | REAL(KIND=JPRB) ,INTENT(IN) :: PW(KLON) | ||
| 92 | REAL(KIND=JPRB) ,INTENT(OUT) :: PRE1(KLON) | ||
| 93 | REAL(KIND=JPRB) ,INTENT(OUT) :: PRE2(KLON) | ||
| 94 | REAL(KIND=JPRB) ,INTENT(OUT) :: PTR1(KLON) | ||
| 95 | REAL(KIND=JPRB) ,INTENT(OUT) :: PTR2(KLON) | ||
| 96 | 112320 | REAL(KIND=JPRB) :: ZTMP (4,KFDIA-KIDIA+1) | |
| 97 | 112320 | REAL(KIND=JPRB) :: ZTMP2 (KFDIA-KIDIA+1+N_VMASS) | |
| 98 | 112320 | REAL(KIND=JPRB) :: ZTMP3 (KFDIA-KIDIA+1+N_VMASS) | |
| 99 | 112320 | REAL(KIND=JPRB) :: ZZARG (KFDIA-KIDIA+1+N_VMASS) | |
| 100 | 112320 | REAL(KIND=JPRB) :: ZZARG2 (KFDIA-KIDIA+1+N_VMASS) | |
| 101 | |||
| 102 | INTEGER(KIND=JPIM) :: JL, JLL, JLEN | ||
| 103 | |||
| 104 | REAL(KIND=JPRB) :: ZA11, ZA12, ZA13, ZA21, ZA22, ZA23, ZALPHA,& | ||
| 105 | & ZAM2B, ZAP2B, ZB21, ZB22, ZB23, & | ||
| 106 | & ZBETA, ZC1A, ZC1B, ZC2A, ZC2B, ZDENA, ZDENB, & | ||
| 107 | & ZDT, ZEXKM, ZEXKP, ZEXMU0, ZFF, ZGP, ZRI0A, & | ||
| 108 | & ZRI0B, ZRI0C, ZRI0D, ZRI1A, ZRI1B, ZRI1C, & | ||
| 109 | & ZRI1D, ZRK, ZRM2, ZRP, ZTOP, ZWCP, ZWM, ZX1, & | ||
| 110 | & ZX2, ZXM2P, ZXP2P | ||
| 111 | |||
| 112 | |||
| 113 | REAL(KIND=JPRB) :: MINJ, MAXJ, X, Y | ||
| 114 | REAL(KIND=JPRB) :: ZPRMUZ,ZIDENA,ZIDENB,ZRR | ||
| 115 | REAL(KIND=JPRB) :: ZHOOK_HANDLE | ||
| 116 | |||
| 117 | ! STATEMENT DUNCTIONS | ||
| 118 | MINJ(X,Y) = Y - 0.5_JPRB*(ABS(X-Y)-(X-Y)) | ||
| 119 | MAXJ(X,Y) = Y + 0.5_JPRB*(ABS(X-Y)+(X-Y)) | ||
| 120 | |||
| 121 | ! ------------------------------------------------------------------ | ||
| 122 | |||
| 123 | !* 1. DELTA-EDDINGTON CALCULATIONS | ||
| 124 | |||
| 125 |
1/2✓ Branch 0 taken 56160 times.
✗ Branch 1 not taken.
|
56160 | IF (LHOOK) CALL DR_HOOK('SWDE',0,ZHOOK_HANDLE) |
| 126 | |||
| 127 | ZDT = 2.0_JPRB/3._JPRB | ||
| 128 | |||
| 129 |
2/2✓ Branch 0 taken 55823040 times.
✓ Branch 1 taken 56160 times.
|
55879200 | DO JL = KIDIA,KFDIA |
| 130 | 55823040 | JLL=JL-KIDIA+1 | |
| 131 | 55823040 | ZPRMUZ=1.0_JPRB/PRMUZ(JL) | |
| 132 | !++MODIFCODE | ||
| 133 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 55823040 times.
|
55823040 | IF (NOVLP >= 5) THEN !MESONH_VERSION |
| 134 | ✗ | ZGP = PGG(JL) | |
| 135 | ✗ | ZTOP = PTO1(JL) | |
| 136 | ✗ | ZWCP = PW(JL) | |
| 137 | ELSE !ECMWF VERSION | ||
| 138 | 55823040 | ZFF = PGG(JL)*PGG(JL) | |
| 139 | 55823040 | ZGP = PGG(JL)/(1.0_JPRB+PGG(JL)) | |
| 140 | 55823040 | ZTOP = (1.0_JPRB- PW(JL) * ZFF) * PTO1(JL) | |
| 141 | 55823040 | ZWCP = (1-ZFF)* PW(JL) /(1.0_JPRB- PW(JL) * ZFF) | |
| 142 | ENDIF | ||
| 143 | !--MODIFCODE | ||
| 144 | 55823040 | ZX1 = 1.0_JPRB-ZWCP*ZGP | |
| 145 | 55823040 | ZWM = 1.0_JPRB-ZWCP | |
| 146 | 55823040 | ZRM2 = PRMUZ(JL) * PRMUZ(JL) | |
| 147 | 55823040 | ZRK = SQRT(MAXJ(REPLOG,3._JPRB*ZWM*ZX1)) | |
| 148 | 55823040 | ZX2 = (1.0_JPRB-ZRK*ZRK*ZRM2)*(4._JPRB/3._JPRB) | |
| 149 | 55823040 | ZRR = 1.0_JPRB/ZX2 | |
| 150 | 55823040 | ZRP=ZRK/ZX1 | |
| 151 | 55823040 | ZALPHA = ZWCP*ZRM2*(1.0_JPRB+ZGP*ZWM)*ZRR | |
| 152 | 55823040 | ZBETA = ZWCP* PRMUZ(JL) *(1.0_JPRB+3._JPRB*ZGP*ZRM2*ZWM)*ZRR | |
| 153 | 55823040 | ZZARG(JLL) = -MAXJ( -200._JPRB, MINJ( ZTOP*ZPRMUZ, 200._JPRB) ) | |
| 154 | 55823040 | ZZARG2(JLL) = MINJ( ZRK*ZTOP, 200._JPRB) | |
| 155 | 55823040 | ZTMP(1,JLL) = ZPRMUZ | |
| 156 | 55823040 | ZTMP(2,JLL) = ZALPHA | |
| 157 | 55823040 | ZTMP(3,JLL) = ZBETA | |
| 158 | 55879200 | ZTMP(4,JLL) = ZRP | |
| 159 | ENDDO | ||
| 160 | |||
| 161 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 56160 times.
|
56160 | IF(N_VMASS /= 0 ) THEN !USING VECTOR MASS |
| 162 | ✗ | JLEN=KFDIA-KIDIA+N_VMASS-MOD(KFDIA-KIDIA,N_VMASS) | |
| 163 | ✗ | IF(KFDIA-KIDIA+1 /= JLEN) THEN | |
| 164 | ✗ | ZZARG (KFDIA-KIDIA+2:JLEN)=1.0_JPRB | |
| 165 | ✗ | ZZARG2 (KFDIA-KIDIA+2:JLEN)=1.0_JPRB | |
| 166 | ENDIF | ||
| 167 | ! Commente par MPL le 21.11.08 | ||
| 168 | ! CALL VEXP(ZTMP2,ZZARG, JLEN) | ||
| 169 | ! CALL VEXP(ZTMP3,ZZARG2,JLEN) | ||
| 170 | ELSE | ||
| 171 |
2/2✓ Branch 0 taken 56160 times.
✓ Branch 1 taken 55823040 times.
|
55879200 | DO JL = KIDIA,KFDIA |
| 172 | 55823040 | JLL=JL-KIDIA+1 | |
| 173 | 55823040 | ZTMP2(JLL) = EXP(ZZARG(JLL)) | |
| 174 | 55879200 | ZTMP3(JLL) = EXP(ZZARG2(JLL)) | |
| 175 | ENDDO | ||
| 176 | ENDIF | ||
| 177 | |||
| 178 |
2/2✓ Branch 0 taken 55823040 times.
✓ Branch 1 taken 56160 times.
|
55879200 | DO JL = KIDIA,KFDIA |
| 179 | 55823040 | JLL=JL-KIDIA+1 | |
| 180 | 55823040 | ZEXMU0 = ZTMP2(JLL) | |
| 181 | 55823040 | ZEXKP = ZTMP3(JLL) | |
| 182 | 55823040 | ZPRMUZ = ZTMP(1,JLL) | |
| 183 | 55823040 | ZALPHA = ZTMP(2,JLL) | |
| 184 | 55823040 | ZBETA = ZTMP(3,JLL) | |
| 185 | 55823040 | ZRP = ZTMP(4,JLL) | |
| 186 | 55823040 | ZEXKM = 1.0_JPRB/ZEXKP | |
| 187 | 55823040 | ZXP2P = 1.0_JPRB+ZDT*ZRP | |
| 188 | 55823040 | ZXM2P = 1.0_JPRB-ZDT*ZRP | |
| 189 | 55823040 | ZAP2B = ZALPHA+ZDT*ZBETA | |
| 190 | 55823040 | ZAM2B = ZALPHA-ZDT*ZBETA | |
| 191 | |||
| 192 | !* 1.2 WITHOUT REFLECTION FROM THE UNDERLYING LAYER | ||
| 193 | |||
| 194 | ZA11 = ZXP2P | ||
| 195 | ZA12 = ZXM2P | ||
| 196 | ZA13 = ZAP2B | ||
| 197 | 55823040 | ZA22 = ZXP2P*ZEXKP | |
| 198 | 55823040 | ZA21 = ZXM2P*ZEXKM | |
| 199 | 55823040 | ZA23 = ZAM2B*ZEXMU0 | |
| 200 | 55823040 | ZDENA = ZA11 * ZA22 - ZA21 * ZA12 | |
| 201 | 55823040 | ZIDENA=1.0_JPRB/ZDENA | |
| 202 | 55823040 | ZC1A = (ZA22*ZA13-ZA12*ZA23)*ZIDENA | |
| 203 | 55823040 | ZC2A = (ZA11*ZA23-ZA21*ZA13)*ZIDENA | |
| 204 | 55823040 | ZRI0A = ZC1A+ZC2A-ZALPHA | |
| 205 | 55823040 | ZRI1A = ZRP*(ZC1A-ZC2A)-ZBETA | |
| 206 | 55823040 | PRE1(JL) = (ZRI0A-ZDT*ZRI1A)*ZPRMUZ | |
| 207 | 55823040 | ZRI0B = ZC1A*ZEXKM+ZC2A*ZEXKP-ZALPHA*ZEXMU0 | |
| 208 | 55823040 | ZRI1B = ZRP*(ZC1A*ZEXKM-ZC2A*ZEXKP)-ZBETA*ZEXMU0 | |
| 209 | 55823040 | PTR1(JL) = ZEXMU0+(ZRI0B+ZDT*ZRI1B)*ZPRMUZ | |
| 210 | |||
| 211 | !* 1.3 WITH REFLECTION FROM THE UNDERLYING LAYER | ||
| 212 | |||
| 213 | 55823040 | ZB21 = ZA21- PREF(JL) *ZXP2P*ZEXKM | |
| 214 | 55823040 | ZB22 = ZA22- PREF(JL) *ZXM2P*ZEXKP | |
| 215 | 55823040 | ZB23 = ZA23- PREF(JL) *ZEXMU0*(ZAP2B - PRMUZ(JL) ) | |
| 216 | 55823040 | ZDENB = ZA11 * ZB22 - ZB21 * ZA12 | |
| 217 | 55823040 | ZIDENB= 1.0_JPRB/ZDENB | |
| 218 | 55823040 | ZC1B = (ZB22*ZA13-ZA12*ZB23)*ZIDENB | |
| 219 | 55823040 | ZC2B = (ZA11*ZB23-ZB21*ZA13)*ZIDENB | |
| 220 | 55823040 | ZRI0C = ZC1B+ZC2B-ZALPHA | |
| 221 | 55823040 | ZRI1C = ZRP*(ZC1B-ZC2B)-ZBETA | |
| 222 | 55823040 | PRE2(JL) = (ZRI0C-ZDT*ZRI1C) * ZPRMUZ | |
| 223 | 55823040 | ZRI0D = ZC1B*ZEXKM + ZC2B*ZEXKP - ZALPHA*ZEXMU0 | |
| 224 | 55823040 | ZRI1D = ZRP * (ZC1B*ZEXKM - ZC2B*ZEXKP) - ZBETA*ZEXMU0 | |
| 225 | 55879200 | PTR2(JL) = ZEXMU0 + (ZRI0D + ZDT*ZRI1D) * ZPRMUZ | |
| 226 | ENDDO | ||
| 227 | |||
| 228 |
1/2✓ Branch 0 taken 56160 times.
✗ Branch 1 not taken.
|
56160 | IF (LHOOK) CALL DR_HOOK('SWDE',1,ZHOOK_HANDLE) |
| 229 | 56160 | END SUBROUTINE SWDE | |
| 230 | |||
| 231 |