| Directory: | ./ |
|---|---|
| File: | rad/rrtm_ecrt_140gp.f90 |
| Date: | 2022-01-11 19:19:34 |
| Exec | Total | Coverage | |
|---|---|---|---|
| Lines: | 103 | 118 | 87.3% |
| Branches: | 41 | 58 | 70.7% |
| Line | Branch | Exec | Source |
|---|---|---|---|
| 1 | ! | ||
| 2 | ! $Id: rrtm_ecrt_140gp.F90 2626 2016-09-15 14:20:56Z musat $ | ||
| 3 | ! | ||
| 4 | !****************** SUBROUTINE RRTM_ECRT_140GP ************************** | ||
| 5 | |||
| 6 | 9423120 | SUBROUTINE RRTM_ECRT_140GP & | |
| 7 | & ( K_IPLON, klon , klev, kcld,& | ||
| 8 | 119280 | & paer , paph , pap,& | |
| 9 | & pts , pth , pt,& | ||
| 10 | 119280 | & P_ZEMIS, P_ZEMIW,& | |
| 11 | & pq , pcco2, pozn, pcldf, ptaucld, ptclear,& | ||
| 12 | & P_CLDFRAC,P_TAUCLD,& | ||
| 13 | 119280 | & PTAU_LW,& | |
| 14 | & P_COLDRY,P_WKL,P_WX,& | ||
| 15 | & P_TAUAERL,PAVEL,P_TAVEL,PZ,P_TZ,P_TBOUND,K_NLAYERS,P_SEMISS,K_IREFLECT ) | ||
| 16 | |||
| 17 | ! Reformatted for F90 by JJMorcrette, ECMWF, 980714 | ||
| 18 | |||
| 19 | ! Read in atmospheric profile from ECMWF radiation code, and prepare it | ||
| 20 | ! for use in RRTM. Set other RRTM input parameters. Values are passed | ||
| 21 | ! back through existing RRTM arrays and commons. | ||
| 22 | |||
| 23 | !- Modifications | ||
| 24 | |||
| 25 | ! 2000-05-15 Deborah Salmond Speed-up | ||
| 26 | |||
| 27 | USE PARKIND1 ,ONLY : JPIM ,JPRB | ||
| 28 | USE YOMHOOK ,ONLY : LHOOK, DR_HOOK | ||
| 29 | |||
| 30 | USE PARRRTM , ONLY : JPBAND ,JPXSEC ,JPLAY ,& | ||
| 31 | & JPINPX | ||
| 32 | USE YOERAD , ONLY : NLW ,NOVLP | ||
| 33 | !MPL/IM 20160915 on prend GES de phylmd USE YOERDI , ONLY : RCH4 ,RN2O ,RCFC11 ,RCFC12 | ||
| 34 | USE YOESW , ONLY : RAER | ||
| 35 | |||
| 36 | !------------------------------Arguments-------------------------------- | ||
| 37 | |||
| 38 | IMPLICIT NONE | ||
| 39 | |||
| 40 | |||
| 41 | INTEGER(KIND=JPIM),INTENT(IN) :: KLON! Number of atmospheres (longitudes) | ||
| 42 | INTEGER(KIND=JPIM),INTENT(IN) :: KLEV! Number of atmospheric layers | ||
| 43 | INTEGER(KIND=JPIM),INTENT(IN) :: K_IPLON | ||
| 44 | INTEGER(KIND=JPIM),INTENT(OUT) :: KCLD | ||
| 45 | REAL(KIND=JPRB) ,INTENT(IN) :: PAER(KLON,6,KLEV) ! Aerosol optical thickness | ||
| 46 | REAL(KIND=JPRB) ,INTENT(IN) :: PAPH(KLON,KLEV+1) ! Interface pressures (Pa) | ||
| 47 | REAL(KIND=JPRB) ,INTENT(IN) :: PAP(KLON,KLEV) ! Layer pressures (Pa) | ||
| 48 | REAL(KIND=JPRB) ,INTENT(IN) :: PTS(KLON) ! Surface temperature (K) | ||
| 49 | REAL(KIND=JPRB) ,INTENT(IN) :: PTH(KLON,KLEV+1) ! Interface temperatures (K) | ||
| 50 | REAL(KIND=JPRB) ,INTENT(IN) :: PT(KLON,KLEV) ! Layer temperature (K) | ||
| 51 | REAL(KIND=JPRB) ,INTENT(IN) :: P_ZEMIS(KLON) ! Non-window surface emissivity | ||
| 52 | REAL(KIND=JPRB) ,INTENT(IN) :: P_ZEMIW(KLON) ! Window surface emissivity | ||
| 53 | REAL(KIND=JPRB) ,INTENT(IN) :: PQ(KLON,KLEV) ! H2O specific humidity (mmr) | ||
| 54 | REAL(KIND=JPRB) ,INTENT(IN) :: PCCO2 ! CO2 mass mixing ratio | ||
| 55 | REAL(KIND=JPRB) ,INTENT(IN) :: POZN(KLON,KLEV) ! O3 mass mixing ratio | ||
| 56 | REAL(KIND=JPRB) ,INTENT(IN) :: PCLDF(KLON,KLEV) ! Cloud fraction | ||
| 57 | REAL(KIND=JPRB) ,INTENT(IN) :: PTAUCLD(KLON,KLEV,JPBAND) ! Cloud optical depth | ||
| 58 | !--C.Kleinschmitt | ||
| 59 | REAL(KIND=JPRB) ,INTENT(IN) :: PTAU_LW(KLON,KLEV,NLW) ! LW Optical depth of aerosols | ||
| 60 | !--end | ||
| 61 | REAL(KIND=JPRB) ,INTENT(OUT) :: PTCLEAR | ||
| 62 | REAL(KIND=JPRB) ,INTENT(OUT) :: P_CLDFRAC(JPLAY) ! Cloud fraction | ||
| 63 | REAL(KIND=JPRB) ,INTENT(OUT) :: P_TAUCLD(JPLAY,JPBAND) ! Spectral optical thickness | ||
| 64 | REAL(KIND=JPRB) ,INTENT(OUT) :: P_COLDRY(JPLAY) | ||
| 65 | REAL(KIND=JPRB) ,INTENT(OUT) :: P_WKL(JPINPX,JPLAY) | ||
| 66 | REAL(KIND=JPRB) ,INTENT(OUT) :: P_WX(JPXSEC,JPLAY) ! Amount of trace gases | ||
| 67 | REAL(KIND=JPRB) ,INTENT(OUT) :: P_TAUAERL(JPLAY,JPBAND) | ||
| 68 | REAL(KIND=JPRB) ,INTENT(OUT) :: PAVEL(JPLAY) | ||
| 69 | REAL(KIND=JPRB) ,INTENT(OUT) :: P_TAVEL(JPLAY) | ||
| 70 | REAL(KIND=JPRB) ,INTENT(OUT) :: PZ(0:JPLAY) | ||
| 71 | REAL(KIND=JPRB) ,INTENT(OUT) :: P_TZ(0:JPLAY) | ||
| 72 | REAL(KIND=JPRB) ,INTENT(OUT) :: P_TBOUND | ||
| 73 | INTEGER(KIND=JPIM),INTENT(OUT) :: K_NLAYERS | ||
| 74 | REAL(KIND=JPRB) ,INTENT(OUT) :: P_SEMISS(JPBAND) | ||
| 75 | INTEGER(KIND=JPIM),INTENT(OUT) :: K_IREFLECT | ||
| 76 | ! real rch4 ! CH4 mass mixing ratio | ||
| 77 | ! real rn2o ! N2O mass mixing ratio | ||
| 78 | ! real rcfc11 ! CFC11 mass mixing ratio | ||
| 79 | ! real rcfc12 ! CFC12 mass mixing ratio | ||
| 80 | !- from AER | ||
| 81 | !- from PROFILE | ||
| 82 | !- from SURFACE | ||
| 83 | REAL(KIND=JPRB) :: ztauaer(5) | ||
| 84 | 238560 | REAL(KIND=JPRB) :: zc1j(0:klev) ! total cloud from top and level k | |
| 85 | REAL(KIND=JPRB) :: Z_AMD ! Effective molecular weight of dry air (g/mol) | ||
| 86 | REAL(KIND=JPRB) :: Z_AMW ! Molecular weight of water vapor (g/mol) | ||
| 87 | REAL(KIND=JPRB) :: Z_AMCO2 ! Molecular weight of carbon dioxide (g/mol) | ||
| 88 | REAL(KIND=JPRB) :: Z_AMO ! Molecular weight of ozone (g/mol) | ||
| 89 | REAL(KIND=JPRB) :: Z_AMCH4 ! Molecular weight of methane (g/mol) | ||
| 90 | REAL(KIND=JPRB) :: Z_AMN2O ! Molecular weight of nitrous oxide (g/mol) | ||
| 91 | REAL(KIND=JPRB) :: Z_AMC11 ! Molecular weight of CFC11 (g/mol) - CFCL3 | ||
| 92 | REAL(KIND=JPRB) :: Z_AMC12 ! Molecular weight of CFC12 (g/mol) - CF2CL2 | ||
| 93 | REAL(KIND=JPRB) :: Z_AVGDRO ! Avogadro's number (molecules/mole) | ||
| 94 | REAL(KIND=JPRB) :: Z_GRAVIT ! Gravitational acceleration (cm/sec2) | ||
| 95 | |||
| 96 | ! Atomic weights for conversion from mass to volume mixing ratios; these | ||
| 97 | ! are the same values used in ECRT to assure accurate conversion to vmr | ||
| 98 | data Z_AMD / 28.970_JPRB / | ||
| 99 | data Z_AMW / 18.0154_JPRB / | ||
| 100 | data Z_AMCO2 / 44.011_JPRB / | ||
| 101 | data Z_AMO / 47.9982_JPRB / | ||
| 102 | data Z_AMCH4 / 16.043_JPRB / | ||
| 103 | data Z_AMN2O / 44.013_JPRB / | ||
| 104 | data Z_AMC11 / 137.3686_JPRB / | ||
| 105 | data Z_AMC12 / 120.9140_JPRB / | ||
| 106 | data Z_AVGDRO/ 6.02214E23_JPRB / | ||
| 107 | data Z_GRAVIT/ 9.80665E02_JPRB / | ||
| 108 | |||
| 109 | INTEGER(KIND=JPIM) :: IATM, IMOL, IXMAX, J1, J2, JAE, JB, JK, JL, I_L | ||
| 110 | INTEGER(KIND=JPIM) :: I_NMOL, I_NXMOL | ||
| 111 | |||
| 112 | REAL(KIND=JPRB) :: Z_AMM, ZCLDLY, ZCLEAR, ZCLOUD, ZEPSEC | ||
| 113 | REAL(KIND=JPRB) :: ZHOOK_HANDLE | ||
| 114 | |||
| 115 | !MPL/IM 20160915 on prend GES de phylmd | ||
| 116 | ! $Id: clesphys.h 3435 2019-01-22 15:21:59Z fairhead $ | ||
| 117 | ! | ||
| 118 | ! ATTENTION!!!!: ce fichier include est compatible format fixe/format libre | ||
| 119 | ! veillez \`a n'utiliser que des ! pour les commentaires | ||
| 120 | ! et \`a bien positionner les & des lignes de continuation | ||
| 121 | ! (les placer en colonne 6 et en colonne 73) | ||
| 122 | ! | ||
| 123 | !..include cles_phys.h | ||
| 124 | ! | ||
| 125 | INTEGER iflag_cycle_diurne | ||
| 126 | LOGICAL soil_model,new_oliq,ok_orodr,ok_orolf | ||
| 127 | LOGICAL ok_limitvrai | ||
| 128 | LOGICAL ok_all_xml | ||
| 129 | LOGICAL ok_lwoff | ||
| 130 | INTEGER nbapp_rad, iflag_con, nbapp_cv, nbapp_wk, iflag_ener_conserv | ||
| 131 | REAL co2_ppm, co2_ppm0, solaire | ||
| 132 | !FC | ||
| 133 | REAL Cd_frein | ||
| 134 | LOGICAL ok_suntime_rrtm | ||
| 135 | REAL(kind=8) RCO2, RCH4, RN2O, RCFC11, RCFC12 | ||
| 136 | REAL(kind=8) RCO2_act, RCH4_act, RN2O_act, RCFC11_act, RCFC12_act | ||
| 137 | REAL(kind=8) CH4_ppb, N2O_ppb, CFC11_ppt, CFC12_ppt | ||
| 138 | !IM ajout CFMIP2/CMIP5 | ||
| 139 | REAL(kind=8) RCO2_per,RCH4_per,RN2O_per,RCFC11_per,RCFC12_per | ||
| 140 | REAL(kind=8) CH4_ppb_per,N2O_ppb_per,CFC11_ppt_per,CFC12_ppt_per | ||
| 141 | |||
| 142 | !OM ---> correction du bilan d'eau global | ||
| 143 | !OM Correction sur precip KE | ||
| 144 | REAL cvl_corr | ||
| 145 | !OM Fonte calotte dans bilan eau | ||
| 146 | LOGICAL ok_lic_melt | ||
| 147 | !OB Depot de vapeur d eau sur la calotte pour le bilan eau | ||
| 148 | LOGICAL ok_lic_cond | ||
| 149 | |||
| 150 | !IM simulateur ISCCP | ||
| 151 | INTEGER top_height, overlap | ||
| 152 | !IM seuils cdrm, cdrh | ||
| 153 | REAL cdmmax, cdhmax | ||
| 154 | !IM param. stabilite s/ terres et en dehors | ||
| 155 | REAL ksta, ksta_ter, f_ri_cd_min | ||
| 156 | !IM ok_kzmin : clef calcul Kzmin dans la CL de surface cf FH | ||
| 157 | LOGICAL ok_kzmin | ||
| 158 | !IM, MAFo fmagic, pmagic : parametres - additionnel et multiplicatif - | ||
| 159 | ! pour regler l albedo sur ocean | ||
| 160 | REAL pbl_lmixmin_alpha | ||
| 161 | REAL fmagic, pmagic | ||
| 162 | ! Hauteur (imposee) du contenu en eau du sol | ||
| 163 | REAL qsol0,albsno0,evap0 | ||
| 164 | ! Frottement au sol (Cdrag) | ||
| 165 | Real f_cdrag_ter,f_cdrag_oce | ||
| 166 | REAL min_wind_speed,f_gust_wk,f_gust_bl,f_qsat_oce,f_z0qh_oce | ||
| 167 | REAL z0m_seaice,z0h_seaice | ||
| 168 | INTEGER iflag_gusts,iflag_z0_oce | ||
| 169 | |||
| 170 | ! Rugoro | ||
| 171 | Real f_rugoro,z0min | ||
| 172 | |||
| 173 | ! tau_gl : constante de rappel de la temperature a la surface de la glace | ||
| 174 | REAL tau_gl | ||
| 175 | |||
| 176 | !IM lev_histhf : niveau sorties 6h | ||
| 177 | !IM lev_histday : niveau sorties journalieres | ||
| 178 | !IM lev_histmth : niveau sorties mensuelles | ||
| 179 | !IM lev_histdayNMC : on peut sortir soit sur 8 (comme AR5) ou bien | ||
| 180 | ! sur 17 niveaux de pression | ||
| 181 | INTEGER lev_histhf, lev_histday, lev_histmth | ||
| 182 | INTEGER lev_histdayNMC | ||
| 183 | Integer lev_histins, lev_histLES | ||
| 184 | !IM ok_histNMC : sortie fichiers niveaux de pression (histmthNMC, histdayNMC, histhfNMC) | ||
| 185 | !IM freq_outNMC : frequences de sortie fichiers niveaux de pression (histmthNMC, histdayNMC, histhfNMC) | ||
| 186 | !IM freq_calNMC : frequences de calcul fis. hist*NMC.nc | ||
| 187 | LOGICAL ok_histNMC(3) | ||
| 188 | INTEGER levout_histNMC(3) | ||
| 189 | REAL freq_outNMC(3) , freq_calNMC(3) | ||
| 190 | CHARACTER(len=4) type_run | ||
| 191 | ! aer_type: pour utiliser un fichier constant dans readaerosol | ||
| 192 | CHARACTER(len=8) :: aer_type | ||
| 193 | LOGICAL ok_regdyn | ||
| 194 | REAL lonmin_ins, lonmax_ins, latmin_ins, latmax_ins | ||
| 195 | REAL ecrit_ins, ecrit_hf, ecrit_day | ||
| 196 | REAL ecrit_mth, ecrit_tra, ecrit_reg | ||
| 197 | REAL ecrit_LES | ||
| 198 | REAL freq_ISCCP, ecrit_ISCCP | ||
| 199 | REAL freq_COSP, freq_AIRS | ||
| 200 | LOGICAL :: ok_cosp,ok_mensuelCOSP,ok_journeCOSP,ok_hfCOSP | ||
| 201 | LOGICAL :: ok_airs | ||
| 202 | INTEGER :: ip_ebil_phy, iflag_rrtm, iflag_ice_thermo, NSW, iflag_albedo | ||
| 203 | LOGICAL :: ok_chlorophyll | ||
| 204 | LOGICAL :: ok_strato | ||
| 205 | LOGICAL :: ok_hines, ok_gwd_rando | ||
| 206 | LOGICAL :: ok_qch4 | ||
| 207 | LOGICAL :: ok_conserv_q | ||
| 208 | LOGICAL :: adjust_tropopause | ||
| 209 | LOGICAL :: ok_daily_climoz | ||
| 210 | ! flag to bypass or not the phytrac module | ||
| 211 | INTEGER :: iflag_phytrac | ||
| 212 | |||
| 213 | COMMON/clesphys/ & | ||
| 214 | ! REAL FIRST | ||
| 215 | & co2_ppm, solaire & | ||
| 216 | & , RCO2, RCH4, RN2O, RCFC11, RCFC12 & | ||
| 217 | & , RCO2_act, RCH4_act, RN2O_act, RCFC11_act, RCFC12_act & | ||
| 218 | & , RCO2_per, RCH4_per, RN2O_per, RCFC11_per, RCFC12_per & | ||
| 219 | & , CH4_ppb, N2O_ppb, CFC11_ppt, CFC12_ppt & | ||
| 220 | & , CH4_ppb_per, N2O_ppb_per, CFC11_ppt_per, CFC12_ppt_per & | ||
| 221 | & , cdmmax,cdhmax,ksta,ksta_ter,f_ri_cd_min,pbl_lmixmin_alpha & | ||
| 222 | & , fmagic, pmagic & | ||
| 223 | & , f_cdrag_ter,f_cdrag_oce,f_rugoro,z0min,tau_gl & | ||
| 224 | & , min_wind_speed,f_gust_wk,f_gust_bl,f_qsat_oce,f_z0qh_oce & | ||
| 225 | & , z0m_seaice,z0h_seaice & | ||
| 226 | & , freq_outNMC, freq_calNMC & | ||
| 227 | & , lonmin_ins, lonmax_ins, latmin_ins, latmax_ins & | ||
| 228 | & , freq_ISCCP, ecrit_ISCCP, freq_COSP, freq_AIRS & | ||
| 229 | & , cvl_corr & | ||
| 230 | & , qsol0,albsno0,evap0 & | ||
| 231 | & , co2_ppm0 & | ||
| 232 | !FC | ||
| 233 | & , Cd_frein & | ||
| 234 | & , ecrit_LES & | ||
| 235 | & , ecrit_ins, ecrit_hf, ecrit_day & | ||
| 236 | & , ecrit_mth, ecrit_tra, ecrit_reg & | ||
| 237 | ! THEN INTEGER AND LOGICALS | ||
| 238 | & , top_height & | ||
| 239 | & , iflag_cycle_diurne, soil_model, new_oliq & | ||
| 240 | & , ok_orodr, ok_orolf, ok_limitvrai, nbapp_rad & | ||
| 241 | & , iflag_con, nbapp_cv, nbapp_wk & | ||
| 242 | & , iflag_ener_conserv & | ||
| 243 | & , ok_suntime_rrtm & | ||
| 244 | & , overlap & | ||
| 245 | & , ok_kzmin & | ||
| 246 | & , lev_histhf, lev_histday, lev_histmth & | ||
| 247 | & , lev_histins, lev_histLES, lev_histdayNMC, levout_histNMC & | ||
| 248 | & , ok_histNMC & | ||
| 249 | & , type_run, ok_regdyn, ok_cosp, ok_airs & | ||
| 250 | & , ok_mensuelCOSP,ok_journeCOSP,ok_hfCOSP & | ||
| 251 | & , ip_ebil_phy & | ||
| 252 | & , iflag_gusts ,iflag_z0_oce & | ||
| 253 | & , ok_lic_melt, ok_lic_cond, aer_type & | ||
| 254 | & , iflag_rrtm, ok_strato,ok_hines, ok_qch4 & | ||
| 255 | & , iflag_ice_thermo, ok_gwd_rando, NSW, iflag_albedo & | ||
| 256 | & , ok_chlorophyll,ok_conserv_q, adjust_tropopause & | ||
| 257 | & , ok_daily_climoz, ok_all_xml, ok_lwoff & | ||
| 258 | & , iflag_phytrac | ||
| 259 | |||
| 260 | save /clesphys/ | ||
| 261 | !$OMP THREADPRIVATE(/clesphys/) | ||
| 262 | ! *** | ||
| 263 | |||
| 264 | ! *** mji | ||
| 265 | ! Initialize all molecular amounts and aerosol optical depths to zero here, | ||
| 266 | ! then pass ECRT amounts into RRTM arrays below. | ||
| 267 | |||
| 268 | ! DATA ZWKL /MAXPRDW*0.0/ | ||
| 269 | ! DATA ZWX /MAXPROD*0.0/ | ||
| 270 | ! DATA KREFLECT /0/ | ||
| 271 | |||
| 272 | ! Activate cross section molecules: | ||
| 273 | ! NXMOL - number of cross-sections input by user | ||
| 274 | ! IXINDX(I) - index of cross-section molecule corresponding to Ith | ||
| 275 | ! cross-section specified by user | ||
| 276 | ! = 0 -- not allowed in RRTM | ||
| 277 | ! = 1 -- CCL4 | ||
| 278 | ! = 2 -- CFC11 | ||
| 279 | ! = 3 -- CFC12 | ||
| 280 | ! = 4 -- CFC22 | ||
| 281 | ! DATA KXMOL /2/ | ||
| 282 | ! DATA KXINDX /0,2,3,0,31*0/ | ||
| 283 | |||
| 284 | ! IREFLECT=KREFLECT | ||
| 285 | ! NXMOL=KXMOL | ||
| 286 | |||
| 287 |
1/2✓ Branch 0 taken 119280 times.
✗ Branch 1 not taken.
|
119280 | IF (LHOOK) CALL DR_HOOK('RRTM_ECRT_140GP',0,ZHOOK_HANDLE) |
| 288 | 119280 | K_IREFLECT=0 | |
| 289 | I_NXMOL=2 | ||
| 290 | |||
| 291 |
2/2✓ Branch 0 taken 4174800 times.
✓ Branch 1 taken 119280 times.
|
4294080 | DO J1=1,35 |
| 292 | ! IXINDX(J1)=0 | ||
| 293 |
2/2✓ Branch 0 taken 162817200 times.
✓ Branch 1 taken 4174800 times.
|
167111280 | DO J2=1,KLEV |
| 294 | 166992000 | P_WKL(J1,J2)=0.0_JPRB | |
| 295 | ENDDO | ||
| 296 | ENDDO | ||
| 297 | !IXINDX(2)=2 | ||
| 298 | !IXINDX(3)=3 | ||
| 299 | |||
| 300 | ! Set parameters needed for RRTM execution: | ||
| 301 | IATM = 0 | ||
| 302 | ! IXSECT = 1 | ||
| 303 | ! NUMANGS = 0 | ||
| 304 | ! IOUT = -1 | ||
| 305 | IXMAX = 4 | ||
| 306 | |||
| 307 | ! Bands 6,7,8 are considered the 'window' and allowed to have a | ||
| 308 | ! different surface emissivity (as in ECMWF). Eli wrote this part.... | ||
| 309 | 119280 | P_SEMISS(1) = P_ZEMIS(K_IPLON) | |
| 310 | 119280 | P_SEMISS(2) = P_ZEMIS(K_IPLON) | |
| 311 | 119280 | P_SEMISS(3) = P_ZEMIS(K_IPLON) | |
| 312 | 119280 | P_SEMISS(4) = P_ZEMIS(K_IPLON) | |
| 313 | 119280 | P_SEMISS(5) = P_ZEMIS(K_IPLON) | |
| 314 | 119280 | P_SEMISS(6) = P_ZEMIW(K_IPLON) | |
| 315 | 119280 | P_SEMISS(7) = P_ZEMIW(K_IPLON) | |
| 316 | 119280 | P_SEMISS(8) = P_ZEMIW(K_IPLON) | |
| 317 | 119280 | P_SEMISS(9) = P_ZEMIS(K_IPLON) | |
| 318 | 119280 | P_SEMISS(10) = P_ZEMIS(K_IPLON) | |
| 319 | 119280 | P_SEMISS(11) = P_ZEMIS(K_IPLON) | |
| 320 | 119280 | P_SEMISS(12) = P_ZEMIS(K_IPLON) | |
| 321 | 119280 | P_SEMISS(13) = P_ZEMIS(K_IPLON) | |
| 322 | 119280 | P_SEMISS(14) = P_ZEMIS(K_IPLON) | |
| 323 | 119280 | P_SEMISS(15) = P_ZEMIS(K_IPLON) | |
| 324 | 119280 | P_SEMISS(16) = P_ZEMIS(K_IPLON) | |
| 325 | |||
| 326 | ! Set surface temperature. | ||
| 327 | |||
| 328 | 119280 | P_TBOUND = pts(K_IPLON) | |
| 329 | |||
| 330 | ! Install ECRT arrays into RRTM arrays for pressure, temperature, | ||
| 331 | ! and molecular amounts. Pressures are converted from Pascals | ||
| 332 | ! (ECRT) to mb (RRTM). H2O, CO2, O3 and trace gas amounts are | ||
| 333 | ! converted from mass mixing ratio to volume mixing ratio. CO2 | ||
| 334 | ! converted with same dry air and CO2 molecular weights used in | ||
| 335 | ! ECRT to assure correct conversion back to the proper CO2 vmr. | ||
| 336 | ! The dry air column COLDRY (in molec/cm2) is calculated from | ||
| 337 | ! the level pressures PZ (in mb) based on the hydrostatic equation | ||
| 338 | ! and includes a correction to account for H2O in the layer. The | ||
| 339 | ! molecular weight of moist air (amm) is calculated for each layer. | ||
| 340 | ! Note: RRTM levels count from bottom to top, while the ECRT input | ||
| 341 | ! variables count from the top down and must be reversed here. | ||
| 342 | |||
| 343 | 119280 | K_NLAYERS = klev | |
| 344 | I_NMOL = 6 | ||
| 345 | 119280 | PZ(0) = paph(K_IPLON,klev+1)/100._JPRB | |
| 346 | 119280 | P_TZ(0) = pth(K_IPLON,klev+1) | |
| 347 |
2/2✓ Branch 0 taken 119280 times.
✓ Branch 1 taken 4651920 times.
|
4771200 | DO I_L = 1, KLEV |
| 348 | 4651920 | PAVEL(I_L) = pap(K_IPLON,KLEV-I_L+1)/100._JPRB | |
| 349 | 4651920 | P_TAVEL(I_L) = pt(K_IPLON,KLEV-I_L+1) | |
| 350 | 4651920 | PZ(I_L) = paph(K_IPLON,KLEV-I_L+1)/100._JPRB | |
| 351 | 4651920 | P_TZ(I_L) = pth(K_IPLON,KLEV-I_L+1) | |
| 352 | 4651920 | P_WKL(1,I_L) = pq(K_IPLON,KLEV-I_L+1)*Z_AMD/Z_AMW | |
| 353 | 4651920 | P_WKL(2,I_L) = pcco2*Z_AMD/Z_AMCO2 | |
| 354 | 4651920 | P_WKL(3,I_L) = pozn(K_IPLON,KLEV-I_L+1)*Z_AMD/Z_AMO | |
| 355 | 4651920 | P_WKL(4,I_L) = rn2o*Z_AMD/Z_AMN2O | |
| 356 | 4651920 | P_WKL(6,I_L) = rch4*Z_AMD/Z_AMCH4 | |
| 357 | 4651920 | Z_AMM = (1-P_WKL(1,I_L))*Z_AMD + P_WKL(1,I_L)*Z_AMW | |
| 358 | 4771200 | P_COLDRY(I_L) = (PZ(I_L-1)-PZ(I_L))*1.E3_JPRB*Z_AVGDRO/(Z_GRAVIT*Z_AMM*(1+P_WKL(1,I_L))) | |
| 359 | ENDDO | ||
| 360 | |||
| 361 | !- Fill RRTM aerosol arrays with operational ECMWF aerosols, | ||
| 362 | ! do the mixing and distribute over the 16 spectral intervals | ||
| 363 | |||
| 364 |
2/2✓ Branch 0 taken 119280 times.
✓ Branch 1 taken 4651920 times.
|
4771200 | DO I_L=1,KLEV |
| 365 | 4651920 | JK=KLEV-I_L+1 | |
| 366 | ! DO JAE=1,5 | ||
| 367 | JAE=1 | ||
| 368 | ZTAUAER(JAE) =& | ||
| 369 | & RAER(JAE,1)*PAER(K_IPLON,1,JK)+RAER(JAE,2)*PAER(K_IPLON,2,JK)& | ||
| 370 | & +RAER(JAE,3)*PAER(K_IPLON,3,JK)+RAER(JAE,4)*PAER(K_IPLON,4,JK)& | ||
| 371 | 4651920 | & +RAER(JAE,5)*PAER(K_IPLON,5,JK)+RAER(JAE,6)*PAER(K_IPLON,6,JK) | |
| 372 | 4651920 | P_TAUAERL(I_L, 1)=ZTAUAER(1) | |
| 373 | 4651920 | P_TAUAERL(I_L, 2)=ZTAUAER(1) | |
| 374 | JAE=2 | ||
| 375 | ZTAUAER(JAE) =& | ||
| 376 | & RAER(JAE,1)*PAER(K_IPLON,1,JK)+RAER(JAE,2)*PAER(K_IPLON,2,JK)& | ||
| 377 | & +RAER(JAE,3)*PAER(K_IPLON,3,JK)+RAER(JAE,4)*PAER(K_IPLON,4,JK)& | ||
| 378 | 4651920 | & +RAER(JAE,5)*PAER(K_IPLON,5,JK)+RAER(JAE,6)*PAER(K_IPLON,6,JK) | |
| 379 | 4651920 | P_TAUAERL(I_L, 3)=ZTAUAER(2) | |
| 380 | 4651920 | P_TAUAERL(I_L, 4)=ZTAUAER(2) | |
| 381 | 4651920 | P_TAUAERL(I_L, 5)=ZTAUAER(2) | |
| 382 | JAE=3 | ||
| 383 | ZTAUAER(JAE) =& | ||
| 384 | & RAER(JAE,1)*PAER(K_IPLON,1,JK)+RAER(JAE,2)*PAER(K_IPLON,2,JK)& | ||
| 385 | & +RAER(JAE,3)*PAER(K_IPLON,3,JK)+RAER(JAE,4)*PAER(K_IPLON,4,JK)& | ||
| 386 | 4651920 | & +RAER(JAE,5)*PAER(K_IPLON,5,JK)+RAER(JAE,6)*PAER(K_IPLON,6,JK) | |
| 387 | 4651920 | P_TAUAERL(I_L, 6)=ZTAUAER(3) | |
| 388 | 4651920 | P_TAUAERL(I_L, 8)=ZTAUAER(3) | |
| 389 | 4651920 | P_TAUAERL(I_L, 9)=ZTAUAER(3) | |
| 390 | JAE=4 | ||
| 391 | ZTAUAER(JAE) =& | ||
| 392 | & RAER(JAE,1)*PAER(K_IPLON,1,JK)+RAER(JAE,2)*PAER(K_IPLON,2,JK)& | ||
| 393 | & +RAER(JAE,3)*PAER(K_IPLON,3,JK)+RAER(JAE,4)*PAER(K_IPLON,4,JK)& | ||
| 394 | 4651920 | & +RAER(JAE,5)*PAER(K_IPLON,5,JK)+RAER(JAE,6)*PAER(K_IPLON,6,JK) | |
| 395 | 4651920 | P_TAUAERL(I_L, 7)=ZTAUAER(4) | |
| 396 | JAE=5 | ||
| 397 | ZTAUAER(JAE) =& | ||
| 398 | & RAER(JAE,1)*PAER(K_IPLON,1,JK)+RAER(JAE,2)*PAER(K_IPLON,2,JK)& | ||
| 399 | & +RAER(JAE,3)*PAER(K_IPLON,3,JK)+RAER(JAE,4)*PAER(K_IPLON,4,JK)& | ||
| 400 | 4651920 | & +RAER(JAE,5)*PAER(K_IPLON,5,JK)+RAER(JAE,6)*PAER(K_IPLON,6,JK) | |
| 401 | ! END DO | ||
| 402 | 4651920 | P_TAUAERL(I_L,10)=ZTAUAER(5) | |
| 403 | 4651920 | P_TAUAERL(I_L,11)=ZTAUAER(5) | |
| 404 | 4651920 | P_TAUAERL(I_L,12)=ZTAUAER(5) | |
| 405 | 4651920 | P_TAUAERL(I_L,13)=ZTAUAER(5) | |
| 406 | 4651920 | P_TAUAERL(I_L,14)=ZTAUAER(5) | |
| 407 | 4651920 | P_TAUAERL(I_L,15)=ZTAUAER(5) | |
| 408 | 4771200 | P_TAUAERL(I_L,16)=ZTAUAER(5) | |
| 409 | ENDDO | ||
| 410 | !--Use LW AOD from own Mie calculations (C. Kleinschmitt) | ||
| 411 |
2/2✓ Branch 0 taken 119280 times.
✓ Branch 1 taken 4651920 times.
|
4771200 | DO I_L=1,KLEV |
| 412 | 4651920 | JK=KLEV-I_L+1 | |
| 413 |
2/2✓ Branch 0 taken 74430720 times.
✓ Branch 1 taken 4651920 times.
|
79201920 | DO JAE=1, NLW |
| 414 | 79082640 | P_TAUAERL(I_L,JAE) = MAX( PTAU_LW(K_IPLON, JK, JAE), 1e-30 ) | |
| 415 | ENDDO | ||
| 416 | ENDDO | ||
| 417 | !--end C. Kleinschmitt | ||
| 418 | |||
| 419 |
2/2✓ Branch 0 taken 4651920 times.
✓ Branch 1 taken 119280 times.
|
4771200 | DO J2=1,KLEV |
| 420 |
2/2✓ Branch 0 taken 18607680 times.
✓ Branch 1 taken 4651920 times.
|
23378880 | DO J1=1,JPXSEC |
| 421 | 23259600 | P_WX(J1,J2)=0.0_JPRB | |
| 422 | ENDDO | ||
| 423 | ENDDO | ||
| 424 | |||
| 425 |
2/2✓ Branch 0 taken 4651920 times.
✓ Branch 1 taken 119280 times.
|
4771200 | DO I_L = 1, KLEV |
| 426 | !- Set cross section molecule amounts from ECRT; convert to vmr | ||
| 427 | 4651920 | P_WX(2,I_L) = rcfc11*Z_AMD/Z_AMC11 | |
| 428 | 4651920 | P_WX(3,I_L) = rcfc12*Z_AMD/Z_AMC12 | |
| 429 | 4651920 | P_WX(2,I_L) = P_COLDRY(I_L) * P_WX(2,I_L) * 1.E-20_JPRB | |
| 430 | 4651920 | P_WX(3,I_L) = P_COLDRY(I_L) * P_WX(3,I_L) * 1.E-20_JPRB | |
| 431 | |||
| 432 | !- Here, all molecules in WKL and WX are in volume mixing ratio; convert to | ||
| 433 | ! molec/cm2 based on COLDRY for use in RRTM | ||
| 434 | |||
| 435 |
2/2✓ Branch 0 taken 27911520 times.
✓ Branch 1 taken 4651920 times.
|
32682720 | DO IMOL = 1, I_NMOL |
| 436 | 32563440 | P_WKL(IMOL,I_L) = P_COLDRY(I_L) * P_WKL(IMOL,I_L) | |
| 437 | ENDDO | ||
| 438 | |||
| 439 | ! DO IX = 1,JPXSEC | ||
| 440 | ! IF (IXINDX(IX) /= 0) THEN | ||
| 441 | ! WX(IXINDX(IX),L) = COLDRY(L) * WX(IX,L) * 1.E-20_JPRB | ||
| 442 | ! ENDIF | ||
| 443 | ! END DO | ||
| 444 | |||
| 445 | ENDDO | ||
| 446 | |||
| 447 | !- Approximate treatment for various cloud overlaps | ||
| 448 | ZCLEAR=1.0_JPRB | ||
| 449 | ZCLOUD=0.0_JPRB | ||
| 450 | 119280 | ZC1J(0)=0.0_JPRB | |
| 451 | ZEPSEC=1.E-03_JPRB | ||
| 452 | JL=K_IPLON | ||
| 453 | |||
| 454 | !++MODIFCODE | ||
| 455 |
1/4✓ Branch 0 taken 119280 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
119280 | IF ((NOVLP == 1).OR.(NOVLP ==6).OR.(NOVLP ==8)) THEN |
| 456 | !--MODIFCODE | ||
| 457 | |||
| 458 |
2/2✓ Branch 0 taken 4651920 times.
✓ Branch 1 taken 119280 times.
|
4771200 | DO JK=1,KLEV |
| 459 |
2/2✓ Branch 0 taken 1092037 times.
✓ Branch 1 taken 3559883 times.
|
4771200 | IF (pcldf(JL,JK) > ZEPSEC) THEN |
| 460 | ZCLDLY=pcldf(JL,JK) | ||
| 461 | ZCLEAR=ZCLEAR & | ||
| 462 | & *(1.0_JPRB-MAX( ZCLDLY , ZCLOUD ))& | ||
| 463 | 1092037 | & /(1.0_JPRB-MIN( ZCLOUD , 1.0_JPRB-ZEPSEC )) | |
| 464 | ZCLOUD = ZCLDLY | ||
| 465 | 1092037 | ZC1J(JK)= 1.0_JPRB - ZCLEAR | |
| 466 | ELSE | ||
| 467 | ZCLDLY=0.0_JPRB | ||
| 468 | ZCLEAR=ZCLEAR & | ||
| 469 | & *(1.0_JPRB-MAX( ZCLDLY , ZCLOUD ))& | ||
| 470 | 3559883 | & /(1.0_JPRB-MIN( ZCLOUD , 1.0_JPRB-ZEPSEC )) | |
| 471 | ZCLOUD = ZCLDLY | ||
| 472 | 3559883 | ZC1J(JK)= 1.0_JPRB - ZCLEAR | |
| 473 | ENDIF | ||
| 474 | ENDDO | ||
| 475 | |||
| 476 | !++MODIFCODE | ||
| 477 | ✗ | ELSEIF ((NOVLP == 2).OR.(NOVLP ==7)) THEN | |
| 478 | !--MODIFCODE | ||
| 479 | |||
| 480 | ✗ | DO JK=1,KLEV | |
| 481 | ✗ | IF (pcldf(JL,JK) > ZEPSEC) THEN | |
| 482 | ZCLDLY=pcldf(JL,JK) | ||
| 483 | ✗ | ZCLOUD = MAX( ZCLDLY , ZCLOUD ) | |
| 484 | ✗ | ZC1J(JK) = ZCLOUD | |
| 485 | ELSE | ||
| 486 | ZCLDLY=0.0_JPRB | ||
| 487 | ✗ | ZCLOUD = MAX( ZCLDLY , ZCLOUD ) | |
| 488 | ✗ | ZC1J(JK) = ZCLOUD | |
| 489 | ENDIF | ||
| 490 | ENDDO | ||
| 491 | |||
| 492 | !++MODIFCODE | ||
| 493 | ✗ | ELSEIF ((NOVLP == 3).OR.(NOVLP ==5)) THEN | |
| 494 | !--MODIFCODE | ||
| 495 | |||
| 496 | ✗ | DO JK=1,KLEV | |
| 497 | ✗ | IF (pcldf(JL,JK) > ZEPSEC) THEN | |
| 498 | ZCLDLY=pcldf(JL,JK) | ||
| 499 | ✗ | ZCLEAR = ZCLEAR * (1.0_JPRB-ZCLDLY) | |
| 500 | ✗ | ZCLOUD = 1.0_JPRB - ZCLEAR | |
| 501 | ✗ | ZC1J(JK) = ZCLOUD | |
| 502 | ELSE | ||
| 503 | ZCLDLY=0.0_JPRB | ||
| 504 | ZCLEAR = ZCLEAR * (1.0_JPRB-ZCLDLY) | ||
| 505 | ✗ | ZCLOUD = 1.0_JPRB - ZCLEAR | |
| 506 | ✗ | ZC1J(JK) = ZCLOUD | |
| 507 | ENDIF | ||
| 508 | ENDDO | ||
| 509 | |||
| 510 | ELSEIF (NOVLP == 4) THEN | ||
| 511 | |||
| 512 | ENDIF | ||
| 513 | 119280 | PTCLEAR=1.0_JPRB-ZC1J(KLEV) | |
| 514 | |||
| 515 | ! Transfer cloud fraction and cloud optical depth to RRTM arrays; | ||
| 516 | ! invert array index for pcldf to go from bottom to top for RRTM | ||
| 517 | |||
| 518 | !- clear-sky column | ||
| 519 |
2/2✓ Branch 0 taken 2880 times.
✓ Branch 1 taken 116400 times.
|
119280 | IF (PTCLEAR > 1.0_JPRB-ZEPSEC) THEN |
| 520 | 2880 | KCLD=0 | |
| 521 |
2/2✓ Branch 0 taken 2880 times.
✓ Branch 1 taken 112320 times.
|
115200 | DO I_L = 1, KLEV |
| 522 | 115200 | P_CLDFRAC(I_L) = 0.0_JPRB | |
| 523 | ENDDO | ||
| 524 |
2/2✓ Branch 0 taken 46080 times.
✓ Branch 1 taken 2880 times.
|
48960 | DO JB=1,JPBAND |
| 525 |
2/2✓ Branch 0 taken 1797120 times.
✓ Branch 1 taken 46080 times.
|
1846080 | DO I_L=1,KLEV |
| 526 | 1843200 | P_TAUCLD(I_L,JB) = 0.0_JPRB | |
| 527 | ENDDO | ||
| 528 | ENDDO | ||
| 529 | |||
| 530 | ELSE | ||
| 531 | |||
| 532 | !- cloudy column | ||
| 533 | ! The diffusivity factor (Savijarvi, 1997) on the cloud optical | ||
| 534 | ! thickness TAUCLD has already been applied in RADLSW | ||
| 535 | |||
| 536 | 116400 | KCLD=1 | |
| 537 |
2/2✓ Branch 0 taken 116400 times.
✓ Branch 1 taken 4539600 times.
|
4656000 | DO I_L=1,KLEV |
| 538 | 4656000 | P_CLDFRAC(I_L) = pcldf(K_IPLON,I_L) | |
| 539 | ENDDO | ||
| 540 |
2/2✓ Branch 0 taken 116400 times.
✓ Branch 1 taken 1862400 times.
|
1978800 | DO JB=1,JPBAND |
| 541 |
2/2✓ Branch 0 taken 72633600 times.
✓ Branch 1 taken 1862400 times.
|
74612400 | DO I_L=1,KLEV |
| 542 | 74496000 | P_TAUCLD(I_L,JB) = ptaucld(K_IPLON,I_L,JB) | |
| 543 | ENDDO | ||
| 544 | ENDDO | ||
| 545 | |||
| 546 | ENDIF | ||
| 547 | |||
| 548 | ! ------------------------------------------------------------------ | ||
| 549 | |||
| 550 |
1/2✓ Branch 0 taken 119280 times.
✗ Branch 1 not taken.
|
119280 | IF (LHOOK) CALL DR_HOOK('RRTM_ECRT_140GP',1,ZHOOK_HANDLE) |
| 551 | 119280 | END SUBROUTINE RRTM_ECRT_140GP | |
| 552 |