Changeset 4171 for LMDZ6/branches/LMDZ-ECRAD/libf/phylmd/radlwsw_m.F90
- Timestamp:
- Jun 17, 2022, 4:24:49 PM (2 years ago)
- Location:
- LMDZ6/branches/LMDZ-ECRAD
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
LMDZ6/branches/LMDZ-ECRAD
- Property svn:mergeinfo changed
-
LMDZ6/branches/LMDZ-ECRAD/libf/phylmd/radlwsw_m.F90
r3880 r4171 16 16 t,q,wo,& 17 17 cldfra, cldemi, cldtaupd,& 18 ok_ade, ok_aie, ok_volcan, flag_ aerosol,&18 ok_ade, ok_aie, ok_volcan, flag_volc_surfstrat, flag_aerosol,& 19 19 flag_aerosol_strat, flag_aer_feedback, & 20 20 tau_aero, piz_aero, cg_aero,& … … 40 40 toplwad_aero, sollwad_aero,& 41 41 toplwai_aero, sollwai_aero, & 42 toplwad0_aero, sollwad0_aero, &42 toplwad0_aero, sollwad0_aero, & 43 43 !-end 44 44 ZLWFT0_i, ZFLDN0, ZFLUP0,& … … 48 48 USE DIMPHY 49 49 USE assert_m, ONLY : assert 50 USE infotrac_phy, ONLY : type _trac50 USE infotrac_phy, ONLY : types_trac 51 51 USE write_field_phy 52 52 … … 107 107 ! ok_aie--- input-L- apply the Aerosol Indirect Effect or not? 108 108 ! ok_volcan input-L- activate volcanic diags (SW heat & LW cool rate, SW & LW flux) 109 ! flag_volc_surfstrat input-I- activate volcanic surf cooling or strato heating (or nothing) 109 110 ! flag_aerosol input-I- aerosol flag from 0 to 6 110 111 ! flag_aerosol_strat input-I- use stratospheric aerosols flag (0, 1, 2) … … 210 211 LOGICAL, INTENT(in) :: ok_ade, ok_aie ! switches whether to use aerosol direct (indirect) effects or not 211 212 LOGICAL, INTENT(in) :: ok_volcan ! produce volcanic diags (SW/LW heat flux and rate) 212 LOGICAL :: lldebug 213 INTEGER, INTENT(in) :: flag_volc_surfstrat ! allow to impose volcanic cooling rate at surf or heating in strato 214 LOGICAL :: lldebug=.false. 213 215 INTEGER, INTENT(in) :: flag_aerosol ! takes value 0 (no aerosol) or 1 to 6 (aerosols) 214 216 INTEGER, INTENT(in) :: flag_aerosol_strat ! use stratospheric aerosols … … 222 224 REAL, INTENT(in) :: piz_aero_sw_rrtm(KLON,KLEV,2,NSW) ! aerosol optical properties RRTM 223 225 REAL, INTENT(in) :: cg_aero_sw_rrtm(KLON,KLEV,2,NSW) ! aerosol optical properties RRTM 226 ! AI 224 227 !--OB fin 225 228 … … 302 305 ! ATTENTION les dimensions klon, kdlon ??? 303 306 ! INPUTS 307 REAL, DIMENSION(kdlon,kflev+1) :: ZSWFT0_ii, ZLWFT0_ii 304 308 REAL(KIND=8) ZEMISW(klon), & ! LW emissivity inside the window region 305 309 ZEMIS(klon) ! LW emissivity outside the window region 306 310 REAL(KIND=8) ZGELAM(klon), & ! longitudes en rad 307 311 ZGEMU(klon) ! sin(latitude) 308 REAL(KIND=8) ZCO2(klon,klev), & ! CO2 mass mixing ratios on full levels 309 ZCH4(klon,klev), & ! CH4 mass mixing ratios on full levels 310 ZN2O(klon,klev), & ! N2O mass mixing ratios on full levels 311 ZNO2(klon,klev), & ! NO2 mass mixing ratios on full levels 312 ZCFC11(klon,klev), & ! CFC11 313 ZCFC12(klon,klev), & ! CFC12 314 ZHCFC22(klon,klev), & ! HCFC22 315 ZCCL4(klon,klev), & ! CCL4 316 ZO3_DP(klon,klev), ZO3_DP_i(klon,klev) ! Ozone 312 REAL(KIND=8) ZCO2, & ! CO2 mass mixing ratios on full levels 313 ZCH4, & ! CH4 mass mixing ratios on full levels 314 ZN2O, & ! N2O mass mixing ratios on full levels 315 ZNO2, & ! NO2 mass mixing ratios on full levels 316 ZCFC11, & ! CFC11 317 ZCFC12, & ! CFC12 318 ZHCFC22, & ! HCFC22 319 ZCCL4, & ! CCL4 320 ZO2 ! O2 321 317 322 REAL(KIND=8) ZQ_RAIN(klon,klev), & ! Rain cloud mass mixing ratio (kg/kg) ? 318 323 ZQ_SNOW(klon,klev) ! Snow cloud mass mixing ratio (kg/kg) ? … … 331 336 REAL(KIND=8) ZSWDIFFUSEBAND(klon,NSW), & ! SW DN flux in diffuse albedo band 332 337 ZSWDIRECTBAND(klon,NSW) ! SW DN flux in direct albedo band 338 REAL(KIND=8) SOLARIRAD 339 REAL(KIND=8) seuilmach 340 ! AI 10 mars 22 : Pour les tests Offline 341 logical :: lldebug_for_offline = .false. 342 REAL(KIND=8) solaire_off(klon), & 343 ZCO2_off(klon,klev), & 344 ZCH4_off(klon,klev), & ! CH4 mass mixing ratios on full levels 345 ZN2O_off(klon,klev), & ! N2O mass mixing ratios on full levels 346 ZNO2_off(klon,klev), & ! NO2 mass mixing ratios on full levels 347 ZCFC11_off(klon,klev), & ! CFC11 348 ZCFC12_off(klon,klev), & ! CFC12 349 ZHCFC22_off(klon,klev), & ! HCFC22 350 ZCCL4_off(klon,klev), & ! CCL4 351 ZO2_off(klon,klev) ! O2#endif 333 352 #endif 334 353 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! … … 364 383 REAL(KIND=8) ztopswaiaero(kdlon), zsolswaiaero(kdlon) ! dito, indirect 365 384 !--NL 366 REAL(KIND=8) zswadaero(kdlon,kflev+1) ! SW Aerosol direct forcing 367 REAL(KIND=8) zlwadaero(kdlon,kflev+1) ! LW Aerosol direct forcing 385 REAL(KIND=8) zswadaero(kdlon,kflev+1) ! SW Aerosol direct forcing 386 REAL(KIND=8) zlwadaero(kdlon,kflev+1) ! LW Aerosol direct forcing 387 REAL(KIND=8) volmip_solsw(kdlon) ! SW clear sky in the case of VOLMIP 368 388 !-LW by CK 369 389 REAL(KIND=8) ztoplwadaero(kdlon), zsollwadaero(kdlon) ! LW Aerosol direct forcing at TOAand surface … … 449 469 450 470 ! ========= INITIALISATIONS ============================================== 471 IF (lldebug) THEN 451 472 print*,'Entree dans radlwsw ' 452 473 print*,'************* INITIALISATIONS *****************************' 453 474 print*,'klon, kdlon, klev, kflev =',klon, kdlon, klev, kflev 475 ENDIF 454 476 455 477 CALL assert(size(wo, 1) == klon, size(wo, 2) == klev, "radlwsw wo") … … 463 485 pizaero(:,:,:,:)=0. 464 486 cgaero(:,:,:,:)=0. 465 lldebug=.FALSE.487 ! lldebug=.FALSE. 466 488 467 489 ztopsw_aero(:,:) = 0. !ym missing init : warning : not initialized in SW_AEROAR4 … … 480 502 481 503 ! 504 ! AI 02.2021 505 #ifdef CPP_ECRAD 506 ZEMIS = 1.0 507 ZEMISW = 1.0 508 ZGELAM = longitude 509 ZGEMU = sin(latitude) 510 ZCO2 = RCO2 511 ZCH4 = RCH4 512 ZN2O = RN2O 513 ZNO2 = 0.0 514 ZCFC11 = RCFC11 515 ZCFC12 = RCFC12 516 ZHCFC22 = 0.0 517 ZO2 = 0.0 518 ZCCL4 = 0.0 519 ZQ_RAIN = 0.0 520 ZQ_SNOW = 0.0 521 ZAEROSOL_OLD = 0.0 522 ZAEROSOL = 0.0 523 seuilmach=tiny(seuilmach) 524 #endif 525 482 526 !------------------------------------------- 483 527 nb_gr = KLON / kdlon … … 506 550 PSCT = solaire/zdist/zdist 507 551 508 IF ( type_trac == 'repr') THEN552 IF (ANY(types_trac == 'repr')) THEN 509 553 #ifdef REPROBUS 510 554 IF (iflag_rrtm==0) THEN … … 515 559 ENDIF 516 560 561 IF (lldebug) THEN 517 562 print*,'************** Debut boucle de 1 a ', nb_gr 563 ENDIF 564 518 565 DO j = 1, nb_gr 519 566 iof = kdlon*(j-1) … … 588 635 ENDDO 589 636 590 IF ( type_trac == 'repr') THEN637 IF (ANY(types_trac == 'repr')) THEN 591 638 #ifdef REPROBUS 592 639 ndimozon = size(wo, 3) … … 890 937 ! RII0 = RIP0M15 ! =rip0m if Morcrette non-each time step call. 891 938 RII0=solaire/zdist/zdist 892 !print*,'+++ radlwsw: solaire ,RII0',solaire,RII0893 939 ! %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 894 940 ! Ancien appel a RECMWF (celui du cy25) … … 925 971 ! PALBD , PALBP , PAPRS , PAPRSF , PCCO2 , PCLFR 926 972 POZON_i , PAER_i , PDP_i , PEMIS , rmu0 ,& 927 ! PQO3 , PAER , PDP , PEMIS , PMU0 928 q_i , qsat_i , fiwc_i , flwc_i , zmasq , t_i ,tsol,& 973 q_i , qsat_i , fiwc_i , flwc_i , zmasq , t_i ,tsol,& 929 974 ! PQ , PQS , PQIWP , PQLWP , PSLM , PT , PTS, 930 975 ref_liq_i, ref_ice_i, & … … 960 1005 ZTOPLWAIAERO,ZSOLLWAIAERO, & 961 1006 ZLWADAERO, & !--NL 1007 volmip_solsw, flag_volc_surfstrat, & !--VOLMIP 962 1008 ok_ade, ok_aie, ok_volcan, flag_aerosol,flag_aerosol_strat, flag_aer_feedback) ! flags aerosols 963 1009 … … 1003 1049 CALL writefield_phy('zfcup_i',ZFCUP_i,klev+1) 1004 1050 ENDIF 1005 ! --------- output RECMWFL 1006 ! ZEMTD (KPROMA,KLEV+1) ; TOTAL DOWNWARD LONGWAVE EMISSIVITY 1007 ! ZEMTU (KPROMA,KLEV+1) ; TOTAL UPWARD LONGWAVE EMISSIVITY 1008 ! ZTRSO (KPROMA,KLEV+1) ; TOTAL SHORTWAVE TRANSMISSIVITY 1009 ! ZTH (KPROMA,KLEV+1) ; HALF LEVEL TEMPERATURE 1010 ! ZCTRSO (KPROMA,2) ; CLEAR-SKY SHORTWAVE TRANSMISSIVITY 1011 ! ZCEMTR (KPROMA,2) ; CLEAR-SKY NET LONGWAVE EMISSIVITY 1012 ! ZTRSOD (KPROMA) ; TOTAL-SKY SURFACE SW TRANSMISSITY 1013 ! ZLWFC (KPROMA,2) ; CLEAR-SKY LONGWAVE FLUXES 1014 ! ZLWFT (KPROMA,KLEV+1) ; TOTAL-SKY LONGWAVE FLUXES 1015 ! ZSWFC (KPROMA,2) ; CLEAR-SKY SHORTWAVE FLUXES 1016 ! ZSWFT (KPROMA,KLEV+1) ; TOTAL-SKY SHORTWAVE FLUXES 1017 ! PPIZA_TOT (KPROMA,KLEV,NSW); Single scattering albedo of total aerosols 1018 ! PCGA_TOT (KPROMA,KLEV,NSW); Assymetry factor for total aerosols 1019 ! PTAU_TOT (KPROMA,KLEV,NSW); Optical depth of total aerosols 1020 ! PPIZA_NAT (KPROMA,KLEV,NSW); Single scattering albedo of natural aerosols 1021 ! PCGA_NAT (KPROMA,KLEV,NSW); Assymetry factor for natural aerosols 1022 ! PTAU_NAT (KPROMA,KLEV,NSW); Optical depth of natiral aerosols 1023 ! PTAU_LW_TOT (KPROMA,KLEV,NLW); LW Optical depth of total aerosols 1024 ! PTAU_LW_NAT (KPROMA,KLEV,NLW); LW Optical depth of natural aerosols 1025 ! PSFSWDIR (KPROMA,NSW) ; 1026 ! PSFSWDIF (KPROMA,NSW) ; 1027 ! PFSDNN (KPROMA) ; 1028 ! PFSDNV (KPROMA) ; 1051 1029 1052 ! --------- 1030 1053 ! --------- … … 1084 1107 ZSOLSWCF_AERO(:,3)=ZSOLSWCF_AERO(:,3)*fract(:) 1085 1108 1086 ! print*,'SW_RRTM ZFSDN0 1 , klev:',ZFSDN0(1:klon,1),ZFSDN0(1:klon,klev)1087 ! print*,'SW_RRTM ZFSUP0 1 , klev:',ZFSUP0(1:klon,1),ZFSUP0(1:klon,klev)1088 ! print*,'SW_RRTM ZFSDN 1 , klev:',ZFSDN(1:klon,1),ZFSDN(1:klon,klev)1089 ! print*,'SW_RRTM ZFSUP 1 , klev:',ZFSUP(1:klon,1),ZFSUP(1:klon,klev)1090 ! print*,'OK1'1091 1109 ! --------- 1092 1110 ! --------- … … 1135 1153 ! print*,'OK2' 1136 1154 1155 !--add VOLMIP (surf cool or strat heat activate) 1156 IF (flag_volc_surfstrat > 0) THEN 1157 DO i = 1, kdlon 1158 zsolsw(i) = volmip_solsw(i)*fract(i) 1159 ENDDO 1160 ENDIF 1161 1137 1162 ! extrait de SW_AR4 1138 1163 ! DO k = 1, KFLEV … … 1166 1191 ELSE IF(iflag_rrtm == 2) THEN 1167 1192 print*,'Traitement cas iflag_rrtm = ',iflag_rrtm 1168 print*,'Mise a zero des flux '1193 ! print*,'Mise a zero des flux ' 1169 1194 #ifdef CPP_ECRAD 1170 1195 DO k = 1, kflev+1 … … 1191 1216 ENDDO 1192 1217 ! 1193 ! A erosols A REVOIR1218 ! AI ATTENTION Aerosols A REVOIR 1194 1219 ! DO i = 1, kdlon 1195 1220 ! DO k = 1, kflev 1221 ! DO kk= 1, naero_tot 1196 1222 ! DO kk=1, NSW 1197 1223 ! … … 1203 1229 ! PPIZA_NAT(i,kflev+1-k,kk)=piz_aero_sw_rrtm(i,k,1,kk) 1204 1230 ! PCGA_NAT(i,kflev+1-k,kk)=cg_aero_sw_rrtm(i,k,1,kk) 1231 ! ZAEROSOL(i,kflev+1-k,kk)=m_allaer(i,k,kk) 1205 1232 ! 1206 1233 ! ENDDO … … 1241 1268 1242 1269 ! On met les donnees dans l'ordre des niveaux ecrad 1243 print*,'On inverse sur la verticale '1270 ! print*,'On inverse sur la verticale ' 1244 1271 paprs_i(:,1)=paprs(:,klev+1) 1245 1272 DO k=1,klev … … 1253 1280 flwc_i(1:klon,k) =flwc(1:klon,klev+1-k) 1254 1281 fiwc_i(1:klon,k) =fiwc(1:klon,klev+1-k) 1255 ref_liq_i(1:klon,k) =ref_liq(1:klon,klev+1-k) 1256 ref_ice_i(1:klon,k) =ref_ice(1:klon,klev+1-k) 1282 ref_liq_i(1:klon,k) =ref_liq(1:klon,klev+1-k)*1.0e-6 1283 ref_ice_i(1:klon,k) =ref_ice(1:klon,klev+1-k)*1.0e-6 1257 1284 !-OB 1258 1285 ref_liq_pi_i(1:klon,k) =ref_liq_pi(1:klon,klev+1-k) … … 1260 1287 ENDDO 1261 1288 DO k=1,kflev 1262 ZO3_DP_i(1:klon,k)=ZO3_DP(1:klon,kflev+1-k) 1263 DO i=1,6 1264 PAER_i(1:klon,k,i)=PAER(1:klon,kflev+1-k,i) 1265 ENDDO 1289 POZON_i(1:klon,k,:)=POZON(1:klon,kflev+1-k,:) 1290 ! ZO3_DP_i(1:klon,k)=ZO3_DP(1:klon,kflev+1-k) 1291 ! DO i=1,6 1292 PAER_i(1:klon,k,:)=PAER(1:klon,kflev+1-k,:) 1293 ! ENDDO 1266 1294 ENDDO 1267 ! AI 02.2021 1268 ! Calcul of ZTH_i 1295 1296 ! AI 11.2021 1297 ! Calcul de ZTH_i (temp aux interfaces 1:klev+1) 1298 ! IFS currently sets the half-level temperature at the surface to be 1299 ! equal to the skin temperature. The radiation scheme takes as input 1300 ! only the half-level temperatures and assumes the Planck function to 1301 ! vary linearly in optical depth between half levels. In the lowest 1302 ! atmospheric layer, where the atmospheric temperature can be much 1303 ! cooler than the skin temperature, this can lead to significant 1304 ! differences between the effective temperature of this lowest layer 1305 ! and the true value in the model. 1306 ! We may approximate the temperature profile in the lowest model level 1307 ! as piecewise linear between the top of the layer T[k-1/2], the 1308 ! centre of the layer T[k] and the base of the layer Tskin. The mean 1309 ! temperature of the layer is then 0.25*T[k-1/2] + 0.5*T[k] + 1310 ! 0.25*Tskin, which can be achieved by setting the atmospheric 1311 ! temperature at the half-level corresponding to the surface as 1312 ! follows: 1313 ! AI ATTENTION fais dans interface radlw 1314 !thermodynamics%temperature_hl(KIDIA:KFDIA,KLEV+1) & 1315 ! & = PTEMPERATURE(KIDIA:KFDIA,KLEV) & 1316 ! & + 0.5_JPRB * (PTEMPERATURE_H(KIDIA:KFDIA,KLEV+1) & 1317 ! & -PTEMPERATURE_H(KIDIA:KFDIA,KLEV)) 1318 1269 1319 DO K=2,KLEV 1270 ZTH_i(:,K)=& 1271 & (t_i(:,K-1)*pplay_i(:,K-1)*(pplay_i(:,K)-paprs_i(:,K))& 1272 & +t_i(:,K)*pplay_i(:,K)*(paprs_i(:,K)-pplay_i(:,K-1)))& 1273 & *(1.0/(paprs_i(:,K)*(pplay_i(:,K)-pplay_i(:,K-1)))) 1320 DO i = 1, kdlon 1321 ZTH_i(i,K)=& 1322 & (t_i(i,K-1)*pplay_i(i,K-1)*(pplay_i(i,K)-paprs_i(i,K))& 1323 & +t_i(i,K)*pplay_i(i,K)*(paprs_i(i,K)-pplay_i(i,K-1)))& 1324 & *(1.0/(paprs_i(i,K)*(pplay_i(i,K)-pplay_i(i,K-1)))) 1325 ENDDO 1274 1326 ENDDO 1275 ZTH_i(:,KLEV+1)=tsol(:) 1276 ZTH_i(:,1)=t_i(:,1)-pplay_i(:,1)*(t_i(:,1)-ZTH_i(:,2))& 1277 & /(pplay_i(:,1)-paprs_i(:,2)) 1327 DO i = 1, kdlon 1328 ! Sommet 1329 ZTH_i(i,1)=t_i(i,1)-pplay_i(i,1)*(t_i(i,1)-ZTH_i(i,2))& 1330 & /(pplay_i(i,1)-paprs_i(i,2)) 1331 ! Vers le sol 1332 ZTH_i(i,KLEV+1)=t_i(i,KLEV) + 0.5 * & 1333 (tsol(i) - ZTH_i(i,KLEV)) 1334 ENDDO 1335 1278 1336 1279 1337 print *,'RADLWSW: avant RADIATION_SCHEME ' 1280 IF (lldebug) THEN 1338 1339 ! AI mars 2022 1340 SOLARIRAD = solaire/zdist/zdist 1341 !! diagnos pour la comparaison a la version offline 1342 !!! - Gas en VMR pour offline et MMR pour online 1343 !!! - on utilise pour solarirrad une valeur constante 1344 if (lldebug_for_offline) then 1345 SOLARIRAD = 1366.0896 1346 ZCH4_off = CH4_ppb*1e-9 1347 ZN2O_off = N2O_ppb*1e-9 1348 ZNO2_off = 0.0 1349 ZCFC11_off = CFC11_ppt*1e-12 1350 ZCFC12_off = CFC12_ppt*1e-12 1351 ZHCFC22_off = 0.0 1352 ZCCL4_off = 0.0 1353 ZO2_off = 0.0 1354 ZCO2_off = co2_ppm*1e-6 1355 1281 1356 CALL writefield_phy('rmu0',rmu0,1) 1282 1357 CALL writefield_phy('tsol',tsol,1) 1283 1358 CALL writefield_phy('emissiv_out',ZEMIS,1) 1284 CALL writefield_phy('emissiv_in',ZEMISW,1)1285 CALL writefield_phy('pctsrf_ter',pctsrf(:,is_ter),1)1286 CALL writefield_phy('pctsrf_oce',pctsrf(:,is_oce),1)1287 CALL writefield_phy('ZGELAM',ZGELAM,1)1288 CALL writefield_phy('ZGEMU',ZGEMU,1)1289 CALL writefield_phy('zmasq',zmasq,1)1290 1359 CALL writefield_phy('paprs_i',paprs_i,klev+1) 1291 CALL writefield_phy('pplay_i',pplay_i,klev)1292 CALL writefield_phy('t_i',t_i,klev)1293 1360 CALL writefield_phy('ZTH_i',ZTH_i,klev+1) 1294 1361 CALL writefield_phy('cldfra_i',cldfra_i,klev) 1295 CALL writefield_phy('paer_i',PAER_i,klev)1296 1362 CALL writefield_phy('q_i',q_i,klev) 1297 1363 CALL writefield_phy('fiwc_i',fiwc_i,klev) … … 1299 1365 CALL writefield_phy('palbd_new',PALBD_NEW,NSW) 1300 1366 CALL writefield_phy('palbp_new',PALBP_NEW,NSW) 1301 CALL writefield_phy('ZO3_DP',ZO3_DP,klev) 1302 ENDIF 1303 1367 CALL writefield_phy('POZON',POZON_i(:,:,1),klev) 1368 CALL writefield_phy('ZCO2',ZCO2_off,klev) 1369 CALL writefield_phy('ZCH4',ZCH4_off,klev) 1370 CALL writefield_phy('ZN2O',ZN2O_off,klev) 1371 CALL writefield_phy('ZO2',ZO2_off,klev) 1372 CALL writefield_phy('ZNO2',ZNO2_off,klev) 1373 CALL writefield_phy('ZCFC11',ZCFC11_off,klev) 1374 CALL writefield_phy('ZCFC12',ZCFC12_off,klev) 1375 CALL writefield_phy('ZHCFC22',ZHCFC22_off,klev) 1376 CALL writefield_phy('ZCCL4',ZCCL4_off,klev) 1377 CALL writefield_phy('ref_liq_i',ref_liq_i,klev) 1378 CALL writefield_phy('ref_ice_i',ref_ice_i,klev) 1379 endif 1380 ! lldebug_for_offline 1381 1304 1382 CALL RADIATION_SCHEME & 1305 1383 & (ist, iend, klon, klev, naero_tot, NSW, & 1306 1384 ! ??? naero_tot 1307 1385 & day_cur, current_time, & 1308 & solaire, & 1309 & rmu0, tsol, PALBD_NEW,PALBP_NEW, & 1310 ! PEMIS_WINDOW (???), & 1311 & ZEMIS, ZEMISW, & 1386 & SOLARIRAD, & 1387 & rmu0, tsol, & 1388 ! Albedo diffuse et directe 1389 & PALBD_NEW,PALBP_NEW, & 1390 ! Emessivite : PEMIS_WINDOW (???), & 1391 & ZEMIS, ZEMISW, & 1312 1392 ! PCCN_LAND, PCCN_SEA, & ??? 1313 1393 & pctsrf(:,is_ter), pctsrf(:,is_oce), & 1314 1394 ! longitude(rad), sin(latitude), PMASQ_ ??? 1315 1395 & ZGELAM, ZGEMU, zmasq, & 1396 ! pression et temp aux milieux 1316 1397 & pplay_i, t_i, & 1317 ! PTEMPERATURE_H ?, &1398 ! PTEMPERATURE_H ?, 1318 1399 & paprs_i, ZTH_i, q_i, qsat_i, & 1319 & ZCO2, ZCH4, ZN2O, ZNO2, ZCFC11, ZCFC12, ZHCFC22, ZCCL4, ZO3_DP_i, & 1400 ! Gas 1401 & ZCO2, ZCH4, ZN2O, ZNO2, ZCFC11, ZCFC12, ZHCFC22, & 1402 & ZCCL4, POZON_i(:,:,1), ZO2, & 1403 ! nuages : 1320 1404 & cldfra_i, flwc_i, fiwc_i, ZQ_RAIN, ZQ_SNOW, & 1321 1405 & ref_liq_i, ref_ice_i, & … … 1323 1407 & ZAEROSOL_OLD, ZAEROSOL, & 1324 1408 ! Outputs 1325 ! Net flux 1326 & ZSWFT_i, ZLWFT_i, ZSWFT0_i , ZLWFT0_i, &1327 ! D N flux1409 ! Net flux : 1410 & ZSWFT_i, ZLWFT_i, ZSWFT0_ii, ZLWFT0_ii, & 1411 ! DWN flux : 1328 1412 & ZFSDWN_i, ZFLUX_i(:,2,:), ZFCDWN_i, ZFLUC_i(:,2,:), & 1329 ! UP flux 1413 ! UP flux : 1330 1414 & ZFSUP_i, ZFLUX_i(:,1,:), ZFCUP_i, ZFLUC_i(:,1,:), & 1331 ! Surf Direct flux 1415 ! Surf Direct flux : ATTENTION 1332 1416 & ZFLUX_DIR, ZFLUX_DIR_CLEAR, ZFLUX_DIR_INTO_SUN, & 1333 1417 ! UV and para flux … … 1338 1422 1339 1423 print *,'========= RADLWSW: apres RADIATION_SCHEME ==================== ' 1340 if (0.eq.0) then 1341 print *,' Net Flux ' 1342 print *,'ZSWFT_i =', ZSWFT_i 1343 print *,'ZLWFT_i =', ZLWFT_i 1344 print *,'ZSWFT0_i =', ZSWFT0_i 1345 print*,'ZLWFT0_i =', ZLWFT0_i 1346 1347 print*,'DN Flux ' 1348 print*,'ZFSDWN_i =', ZFSDWN_i 1349 print*,'ZFLUX_i(:,2,:)', ZFLUX_i(:,2,:) 1350 print*,'ZFCDWN_i =', ZFCDWN_i 1351 print*,'ZFLUC_i(:,2,:) =', ZFLUC_i(:,2,:) 1352 1353 print*,'UP Flux ' 1354 print*,'ZFSUP_i =', ZFSUP_i 1355 print*,'ZFLUX_i(:,1,:) =', ZFLUX_i(:,1,:) 1356 print*,'ZFCUP_i =', ZFCUP_i 1357 print*,'ZFLUC_i(:,1,:) =', ZFLUC_i(:,1,:) 1358 1359 print*,'UV and para flux ' 1360 print*,'ZFLUX_DIR =', ZFLUX_DIR 1361 print*,'ZFLUX_DIR_CLEAR', ZFLUX_DIR_CLEAR 1362 print*,'ZFLUX_DIR_INTO_SUN', ZFLUX_DIR_INTO_SUN 1363 endif 1364 1365 IF (lldebug) THEN 1366 CALL writefield_phy('zlwft_i',ZLWFT_i,klev+1) 1367 CALL writefield_phy('zlwft0_i',ZLWFT0_i,klev+1) 1368 CALL writefield_phy('zswft_i',ZSWFT_i,klev+1) 1369 CALL writefield_phy('zswft0_i',ZSWFT0_i,klev+1) 1370 CALL writefield_phy('psfswdir',PSFSWDIR,6) 1371 CALL writefield_phy('psfswdif',PSFSWDIF,6) 1372 CALL writefield_phy('zflux_i',ZFLUX_i,klev+1) 1373 CALL writefield_phy('zfluc_i',ZFLUC_i,klev+1) 1374 CALL writefield_phy('zfsdwn_i',ZFSDWN_i,klev+1) 1375 CALL writefield_phy('zfsup_i',ZFSUP_i,klev+1) 1376 CALL writefield_phy('zfcdwn_i',ZFCDWN_i,klev+1) 1377 CALL writefield_phy('zfcup_i',ZFCUP_i,klev+1) 1378 ENDIF 1424 1425 if (lldebug_for_offline) then 1426 CALL writefield_phy('FLUX_LW',ZLWFT_i,klev+1) 1427 CALL writefield_phy('FLUX_LW_CLEAR',ZLWFT0_ii,klev+1) 1428 CALL writefield_phy('FLUX_SW',ZSWFT_i,klev+1) 1429 CALL writefield_phy('FLUX_SW_CLEAR',ZSWFT0_ii,klev+1) 1430 CALL writefield_phy('FLUX_DN_SW',ZFSDWN_i,klev+1) 1431 CALL writefield_phy('FLUX_DN_LW',ZFLUX_i(:,2,:),klev+1) 1432 CALL writefield_phy('FLUX_DN_SW_CLEAR',ZFCDWN_i,klev+1) 1433 CALL writefield_phy('FLUX_DN_LW_CLEAR',ZFLUC_i(:,2,:),klev+1) 1434 CALL writefield_phy('PSFSWDIR',PSFSWDIR,6) 1435 CALL writefield_phy('PSFSWDIF',PSFSWDIF,6) 1436 CALL writefield_phy('FLUX_UP_LW',ZFLUX_i(:,1,:),klev+1) 1437 CALL writefield_phy('FLUX_UP_LW_CLEAR',ZFLUC_i(:,1,:),klev+1) 1438 CALL writefield_phy('FLUX_UP_SW',ZFSUP_i,klev+1) 1439 CALL writefield_phy('FLUX_UP_SW_CLEAR',ZFCUP_i,klev+1) 1440 endif 1441 1379 1442 ! --------- 1380 1443 ! On retablit l'ordre des niveaux lmd pour les tableaux de sortie … … 1382 1445 ! avec l ancien rayonnement AR4. Si nuit, fract=0 donc pas de 1383 1446 ! rayonnement SW. (MPL 260609) 1384 print*,'On retablit ordre des niveaux verticaux'1385 print*,'On multiplie les flux SW par fract ?'1447 print*,'On retablit l ordre des niveaux verticaux pour LMDZ' 1448 print*,'On multiplie les flux SW par fract et LW dwn par -1' 1386 1449 DO k=0,klev 1387 1450 DO i=1,klon 1388 ZEMTD(i,k+1) = ZEMTD_i(i,k+1) 1389 ZEMTU(i,k+1) = ZEMTU_i(i,k+1) 1390 ZTRSO(i,k+1) = ZTRSO_i(i,k+1) 1391 ZTH(i,k+1) = ZTH_i(i,k+1) 1392 ZFLUP(i,k+1) = ZFLUX_i(i,1,k+1) 1393 ZFLDN(i,k+1) = ZFLUX_i(i,2,k+1) 1394 ZFLUP0(i,k+1) = ZFLUC_i(i,1,k+1) 1395 ZFLDN0(i,k+1) = ZFLUC_i(i,2,k+1) 1396 ZFSDN(i,k+1) = ZFSDWN_i(i,k+1)*fract(i) 1397 ZFSDN0(i,k+1) = ZFCDWN_i(i,k+1)*fract(i) 1398 ZFSDNC0(i,k+1)= ZFCCDWN_i(i,k+1)*fract(i) 1399 ZFSUP (i,k+1) = ZFSUP_i(i,k+1)*fract(i) 1400 ZFSUP0(i,k+1) = ZFCUP_i(i,k+1)*fract(i) 1401 ZFSUPC0(i,k+1)= ZFCCUP_i(i,k+1)*fract(i) 1402 ZFLDNC0(i,k+1)= ZFLCCDWN_i(i,k+1) 1403 ZFLUPC0(i,k+1)= ZFLCCUP_i(i,k+1) 1451 ZEMTD(i,k+1) = ZEMTD_i(i,klev+1-k) 1452 ZEMTU(i,k+1) = ZEMTU_i(i,klev+1-k) 1453 ZTRSO(i,k+1) = ZTRSO_i(i,klev+1-k) 1454 ! ZTH(i,k+1) = ZTH_i(i,klev+1-k) 1455 ! AI ATTENTION 1456 ZLWFT(i,k+1) = ZLWFT_i(i,klev+1-k) 1457 ZSWFT(i,k+1) = ZSWFT_i(i,klev+1-k)*fract(i) 1458 ZSWFT0_i(i,k+1) = ZSWFT0_ii(i,klev+1-k)*fract(i) 1459 ZLWFT0_i(i,k+1) = ZLWFT0_ii(i,klev+1-k) 1460 ! 1461 ZFLUP(i,k+1) = ZFLUX_i(i,1,klev+1-k) 1462 ZFLDN(i,k+1) = -1.*ZFLUX_i(i,2,klev+1-k) 1463 ZFLUP0(i,k+1) = ZFLUC_i(i,1,klev+1-k) 1464 ZFLDN0(i,k+1) = -1.*ZFLUC_i(i,2,klev+1-k) 1465 ZFSDN(i,k+1) = ZFSDWN_i(i,klev+1-k)*fract(i) 1466 ZFSDN0(i,k+1) = ZFCDWN_i(i,klev+1-k)*fract(i) 1467 ZFSDNC0(i,k+1)= ZFCCDWN_i(i,klev+1-k)*fract(i) 1468 ZFSUP (i,k+1) = ZFSUP_i(i,klev+1-k)*fract(i) 1469 ZFSUP0(i,k+1) = ZFCUP_i(i,klev+1-k)*fract(i) 1470 ZFSUPC0(i,k+1)= ZFCCUP_i(i,klev+1-k)*fract(i) 1471 ZFLDNC0(i,k+1)= -1.*ZFLCCDWN_i(i,klev+1-k) 1472 ZFLUPC0(i,k+1)= ZFLCCUP_i(i,klev+1-k) 1404 1473 IF (ok_volcan) THEN 1405 ZSWADAERO(i,k+1)=ZSWADAERO(i,k +1)*fract(i) !--NL1474 ZSWADAERO(i,k+1)=ZSWADAERO(i,klev+1-k)*fract(i) !--NL 1406 1475 ENDIF 1407 1476 1408 1477 ! Nouveau calcul car visiblement ZSWFT et ZSWFC sont nuls dans RRTM cy32 1409 1478 ! en sortie de radlsw.F90 - MPL 7.01.09 1410 ZSWFT(i,k+1) = (ZFSDWN_i(i,k+1)-ZFSUP_i(i,k+1))*fract(i) 1411 ZSWFT0_i(i,k+1) = (ZFCDWN_i(i,k+1)-ZFCUP_i(i,k+1))*fract(i) 1412 ZLWFT(i,k+1) =-ZFLUX_i(i,2,k+1)-ZFLUX_i(i,1,k+1) 1413 ZLWFT0_i(i,k+1)=-ZFLUC_i(i,2,k+1)-ZFLUC_i(i,1,k+1) 1479 ! AI ATTENTION 1480 ! ZSWFT(i,k+1) = (ZFSDWN_i(i,k+1)-ZFSUP_i(i,k+1))*fract(i) 1481 ! ZSWFT0_i(i,k+1) = (ZFCDWN_i(i,k+1)-ZFCUP_i(i,k+1))*fract(i) 1482 ! ZLWFT(i,k+1) =-ZFLUX_i(i,2,k+1)-ZFLUX_i(i,1,k+1) 1483 ! ZLWFT0_i(i,k+1)=-ZFLUC_i(i,2,k+1)-ZFLUC_i(i,1,k+1) 1414 1484 ENDDO 1415 1485 ENDDO … … 1435 1505 !--fraction of diffuse radiation in surface SW downward radiation 1436 1506 DO i = 1, kdlon 1437 IF (fract(i).GT.0.0) THEN1438 1507 zdir=SUM(PSFSWDIR(i,:)) 1439 1508 zdif=SUM(PSFSWDIF(i,:)) 1509 IF (fract(i).GT.0.0.and.(zdir+zdif).gt.seuilmach) THEN 1440 1510 zsolswfdiff(i) = zdif/(zdir+zdif) 1441 1511 ELSE !--night … … 1578 1648 ENDDO ! j = 1, nb_gr 1579 1649 1650 IF (lldebug) THEN 1651 if (0.eq.1) then 1652 ! Verifs dans le cas 1D 1653 print*,'================== Sortie de radlw =================' 1654 print*,'******** LW LW LW *******************' 1655 print*,'ZLWFT =',ZLWFT 1656 print*,'ZLWFT0_i =',ZLWFT0_i 1657 print*,'ZFLUP0 =',ZFLUP0 1658 print*,'ZFLDN0 =',ZFLDN0 1659 print*,'ZFLDNC0 =',ZFLDNC0 1660 print*,'ZFLUPC0 =',ZFLUPC0 1661 1662 print*,'******** SW SW SW *******************' 1663 print*,'ZSWFT =',ZSWFT 1664 print*,'ZSWFT0_i =',ZSWFT0_i 1665 print*,'ZFSDN =',ZFSDN 1666 print*,'ZFSDN0 =',ZFSDN0 1667 print*,'ZFSDNC0 =',ZFSDNC0 1668 print*,'ZFSUP =',ZFSUP 1669 print*,'ZFSUP0 =',ZFSUP0 1670 print*,'ZFSUPC0 =',ZFSUPC0 1671 1672 print*,'******** LMDZ *******************' 1673 print*,'cool = ', cool 1674 print*,'heat = ', heat 1675 print*,'topsw = ', topsw 1676 print*,'toplw = ', toplw 1677 print*,'sollw = ', sollw 1678 print*,'solsw = ', solsw 1679 print*,'lwdn = ', lwdn 1680 print*,'lwup = ', lwup 1681 print*,'swdn = ', swdn 1682 print*,'swup =', swup 1683 endif 1684 ENDIF 1685 1580 1686 END SUBROUTINE radlwsw 1581 1687
Note: See TracChangeset
for help on using the changeset viewer.