Changeset 5791 for LMDZ6/branches/contrails/libf/phylmd/radlwsw_m.F90
- Timestamp:
- Jul 28, 2025, 7:23:15 PM (3 weeks ago)
- Location:
- LMDZ6/branches/contrails
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
LMDZ6/branches/contrails
- Property svn:mergeinfo changed
/LMDZ6/trunk merged: 5654-5683,5685-5690,5692-5715,5718-5721,5726-5727,5729,5744-5761,5763-5778,5780,5785-5789
- Property svn:mergeinfo changed
-
LMDZ6/branches/contrails/libf/phylmd/radlwsw_m.F90
r5589 r5791 10 10 SUBROUTINE radlwsw( & 11 11 debut, dist, rmu0, fract, & 12 !albedo SB >>>13 ! paprs, pplay,tsol,alb1, alb2, &12 !albedo SB >>> 13 ! paprs, pplay,tsol,alb1, alb2, & 14 14 paprs, pplay,tsol,SFRWL,alb_dir, alb_dif, & 15 !albedo SB <<<15 !albedo SB <<< 16 16 t,q,wo,& 17 17 cldfra, cldemi, cldtaupd,& … … 31 31 topsw0,toplw0,solsw0,sollw0,& 32 32 lwdnc0, lwdn0, lwdn, lwupc0, lwup0, lwup,& 33 lwtoa0b, lwtoab , & !FC flux spectraux LW TOA 33 34 swdnc0, swdn0, swdn, swupc0, swup0, swup,& 34 35 topswad_aero, solswad_aero,& … … 38 39 solsw_aero, solsw0_aero, & 39 40 topswcf_aero, solswcf_aero,& 40 !-C. Kleinschmitt for LW diagnostics41 !-C. Kleinschmitt for LW diagnostics 41 42 toplwad_aero, sollwad_aero,& 42 43 toplwai_aero, sollwai_aero, & 43 44 toplwad0_aero, sollwad0_aero, & 44 !-end45 !-end 45 46 ZLWFT0_i, ZFLDN0, ZFLUP0, & 46 47 ZSWFT0_i, ZFSDN0, ZFSUP0, & 48 ZFLUX_DIR, ZFLUX_DIR_CLEAR, ZFLUX_DIR_INTO_SUN, & 47 49 cloud_cover_sw, & 48 50 !--AB contrails radiative effects … … 93 95 USE yoethf_mod_h 94 96 USE phys_constants_mod, ONLY: dobson_u 97 USE wxios_mod, ONLY: missing_val 95 98 96 99 !====================================================================== … … 266 269 REAL, INTENT(out) :: lwdn(KLON,kflev+1),lwdn0(KLON,kflev+1), lwdnc0(KLON,kflev+1) 267 270 REAL, INTENT(out) :: lwup(KLON,kflev+1),lwup0(KLON,kflev+1), lwupc0(KLON,kflev+1) 271 !FC je remplace NLW par nbands_lw_rrtm qui est defini dans aero_mod peut etre que a ce niveau NLW est attribué? 272 REAL, INTENT(out) :: lwtoa0b(KLON,nbands_lw_rrtm), lwtoab(KLON,nbands_lw_rrtm) !FC flux TOA LW par bandes 273 268 274 REAL, INTENT(out) :: topswad_aero(KLON), solswad_aero(KLON) ! output: aerosol direct forcing at TOA and surface 269 275 REAL, INTENT(out) :: topswai_aero(KLON), solswai_aero(KLON) ! output: aerosol indirect forcing atTOA and surface … … 305 311 REAL(KIND=8) ZFLDNC0(KDLON,KFLEV+1) 306 312 REAL(KIND=8) zx_alpha1, zx_alpha2 307 INTEGER k, kk, i, j, iof, nb_gr 313 INTEGER k, kk, i, j, iof, nb_gr,jb !FC 308 314 INTEGER ist,iend,ktdia,kmode 309 315 REAL(KIND=8) PSCT … … 319 325 320 326 REAL(KIND=8) cloud_cover_sw(klon) 321 322 !!!!!!! Declarations specifiques pour ECRAD !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 327 REAL(KIND=8), dimension(klon,klev+1) :: ZFLUX_DIR_i, & ! Direct compt of surf flux into horizontal plane 328 ZFLUX_DIR_CLEAR_i ! CS Direct 329 REAL(KIND=8), dimension(klon,klev+1) :: ZFLUX_DIR, & ! Direct compt of surf flux into horizontal plane 330 ZFLUX_DIR_CLEAR ! CS Direct 331 REAL(KIND=8), dimension(klon) :: ZFLUX_DIR_INTO_SUN 332 333 ! Declarations specifiques pour ECRAD ! 323 334 ! AI 02.2021 324 335 #ifdef CPP_ECRAD … … 344 355 REAL(KIND=8) ZAEROSOL_OLD(KLON,6,KLEV), & ! 345 356 ZAEROSOL(KLON,KLEV,naero_spc) ! 346 ! OUTPUTS 347 REAL(KIND=8) ZFLUX_DIR(klon), & ! Direct compt of surf flux into horizontal plane 348 ZFLUX_DIR_CLEAR(klon), & ! CS Direct 349 ZFLUX_DIR_INTO_SUN(klon), & ! 350 ZFLUX_UV(klon), & ! UV flux 351 ZFLUX_PAR(klon), & ! photosynthetically active radiation similarly 352 ZFLUX_PAR_CLEAR(klon), & ! CS photosynthetically 357 ! Interm 358 REAL(KIND=8), dimension(klon) :: ZFLUX_UV, & ! UV flux 359 ZFLUX_PAR, & ! photosynthetically active radiation similarly 360 ZFLUX_PAR_CLEAR, & ! CS photosynthetically 353 361 ZFLUX_SW_DN_TOA(klon), & ! DN SW flux at TOA 354 ZEMIS_OUT (klon)! effective broadband emissivity355 356 REAL(KIND=8) ZLWDERIVATIVE(klon,klev+1) ! LW derivatives 357 REAL(KIND=8) ZSWDIFFUSEBAND(klon,NSW), & ! SW DN flux in diffuse albedo band358 ZSWDIRECTBAND(klon,NSW) ! SW DN flux in direct albedo band362 ZEMIS_OUT ! effective broadband emissivity 363 REAL(KIND=8), dimension(klon,klev+1) :: ZLWDERIVATIVE ! LW derivatives 364 365 ! REAL(KIND=8) ZSWDIFFUSEBAND(klon,NSW), & ! SW DN flux in diffuse albedo band 366 ! ZSWDIRECTBAND(klon,NSW) ! SW DN flux in direct albedo band 359 367 REAL(KIND=8) SOLARIRAD 360 368 REAL(KIND=8) seuilmach … … 372 380 ZO2_off(klon,klev) ! O2#endif 373 381 #endif 374 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!382 ! 375 383 376 384 REAL(kind=8) POZON(kdlon, kflev, size(wo, 3)) ! mass fraction of ozone 377 385 ! "POZON(:, :, 1)" is for the average day-night field, 378 386 ! "POZON(:, :, 2)" is for daylight time. 379 !!!!! Modif MPL 6.01.09 avec RRTM, on passe de 5 a 6387 ! Modif MPL 6.01.09 avec RRTM, on passe de 5 a 6 380 388 REAL(KIND=8) PAER(kdlon,kflev,6) 381 389 REAL(KIND=8) PCLDLD(kdlon,kflev) … … 432 440 ! "POZON(:, :, 1)" is for the average day-night field, 433 441 ! "POZON(:, :, 2)" is for daylight time. 434 !!!!! Modif MPL 6.01.09 avec RRTM, on passe de 5 a 6442 ! Modif MPL 6.01.09 avec RRTM, on passe de 5 a 6 435 443 REAL(KIND=8) PAER_i(kdlon,kflev,6) 436 444 REAL(KIND=8) PDP_i(klon,klev) … … 470 478 REAL(KIND=8) ZFLUX_i (klon,2,klev+1) 471 479 REAL(KIND=8) ZFLUC_i (klon,2,klev+1) 480 !FC 481 !FC je remplace NLW par nbands_lw_rrtm qui est defini dans aero_mod 482 483 REAL(KIND=8) ZTOAB_i (klon,nbands_lw_rrtm) 484 REAL(KIND=8) ZTOACB_i (klon,nbands_lw_rrtm) 485 !FC 486 472 487 REAL(KIND=8) ZFSDWN_i (klon,klev+1) 473 488 REAL(KIND=8) ZFCDWN_i (klon,klev+1) … … 578 593 579 594 IF (type_trac == 'repr') THEN 580 IF (CPPKEY_REPROBUS) THEN581 IF (iflag_rrtm==0) THEN582 IF (ok_SUNTIME) PSCT = solaireTIME/zdist/zdist583 print*,'Constante solaire: ',PSCT*zdist*zdist584 ENDIF585 END IF595 IF (CPPKEY_REPROBUS) THEN 596 IF (iflag_rrtm==0) THEN 597 IF (ok_SUNTIME) PSCT = solaireTIME/zdist/zdist 598 print*,'Constante solaire: ',PSCT*zdist*zdist 599 ENDIF 600 END IF 586 601 ENDIF 587 602 … … 613 628 !albedo SB <<< 614 629 615 PEMIS(i) = 1.0 ! !!!!A REVOIR (MPL)630 PEMIS(i) = 1.0 ! A REVOIR (MPL) 616 631 PVIEW(i) = 1.66 617 632 PPSOL(i) = paprs(iof+i,1) … … 662 677 663 678 IF (type_trac == 'repr') THEN 664 IF (CPPKEY_REPROBUS) THEN665 ndimozon = size(wo, 3)666 CALL RAD_INTERACTIF(POZON,iof)667 END IF679 IF (CPPKEY_REPROBUS) THEN 680 ndimozon = size(wo, 3) 681 CALL RAD_INTERACTIF(POZON,iof) 682 END IF 668 683 ENDIF 669 684 ! … … 674 689 ENDDO 675 690 ! 676 !!!!! Modif MPL 6.01.09 avec RRTM, on passe de 5 a 6691 ! Modif MPL 6.01.09 avec RRTM, on passe de 5 a 6 677 692 DO kk = 1, 6 678 693 DO k = 1, kflev 679 694 DO i = 1, kdlon 680 PAER(i,k,kk) = 1.0E-15 ! !!!!A REVOIR (MPL)695 PAER(i,k,kk) = 1.0E-15 ! A REVOIR (MPL) 681 696 ENDDO 682 697 ENDDO … … 695 710 !===== iflag_rrtm ================================================ 696 711 ! 697 IF (iflag_rrtm == 0) THEN !!!! remettre 0 juste pour tester l'ancien rayt via rrtm698 ! 712 test_iflag_rrtm: IF (iflag_rrtm == 0) THEN ! remettre 0 juste pour tester l'ancien rayt via rrtm 713 ! {{{ 699 714 !--- Mise a zero des tableaux output du rayonnement LW-AR4 ---------- 700 715 DO k = 1, kflev+1 … … 817 832 ENDDO 818 833 ENDDO 819 ! 820 ELSE IF (iflag_rrtm == 1) then 834 ! }}} 835 ELSE IF (iflag_rrtm == 1) then test_iflag_rrtm 821 836 #ifdef CPP_RRTM 822 837 ! if (prt_level.gt.10)write(lunout,*)'CPP_RRTM=.T.' … … 928 943 DO k=1,kflev 929 944 POZON_i(1:klon,k,:)=POZON(1:klon,kflev+1-k,:) 930 !!! POZON_i(1:klon,k)=POZON(1:klon,k) !!! on laisse 1=sol et klev=top945 ! POZON_i(1:klon,k)=POZON(1:klon,k) ! on laisse 1=sol et klev=top 931 946 ! print *,'Juste avant RECMWFL: k tsol temp',k,tsol,t(1,k) 932 !!!!!!! Modif MPL 6.01.09 avec RRTM, on passe de 5 a 6947 ! Modif MPL 6.01.09 avec RRTM, on passe de 5 a 6 933 948 DO i=1,6 934 949 PAER_i(1:klon,k,i)=PAER(1:klon,kflev+1-k,i) … … 994 1009 PTAU_LW_TOT, PTAU_LW_NAT, & ! rajoute par C. Kleinschmitt 995 1010 ZFLUX_i , ZFLUC_i ,& 1011 ZTOAB_i , ZTOACB_i, & ! FC flux spectraux TOA 996 1012 ZFSDWN_i , ZFSUP_i , ZFCDWN_i, ZFCUP_i, ZFCCDWN_i, ZFCCUP_i, ZFLCCDWN_i, ZFLCCUP_i, & 997 1013 ZTOPSWADAERO,ZSOLSWADAERO,& ! rajoute par OB pour diagnostics … … 1014 1030 ! & PTOPSWCFAERO,PSOLSWCFAERO,& 1015 1031 ! & PSWADAERO,& !--NL 1016 ! !--LW diagnostics CK1032 !--LW diagnostics CK 1017 1033 ! & PTOPLWADAERO,PSOLLWADAERO,& 1018 1034 ! & PTOPLWAD0AERO,PSOLLWAD0AERO,& 1019 1035 ! & PTOPLWAIAERO,PSOLLWAIAERO,& 1020 1036 ! & PLWADAERO,& !--NL 1021 ! !..end1037 !..end 1022 1038 ! & ok_ade, ok_aie, ok_volcan, flag_aerosol,flag_aerosol_strat,& 1023 1039 ! & flag_aer_feedback) … … 1149 1165 ! 1150 1166 IF (fract(i) == 0.) THEN 1151 !!!!! A REVOIR MPL (20090630) ca n a pas de sens quand fract=01167 ! A REVOIR MPL (20090630) ca n a pas de sens quand fract=0 1152 1168 ! pas plus que dans le sw_AR4 1153 1169 zalbpla(i) = 1.0e+39 … … 1155 1171 zalbpla(i) = ZFSUP(i,klev+1)/ZFSDN(i,klev+1) 1156 1172 ENDIF 1157 !!! 5 juin 20151158 !!! Correction MP bug RRTM1173 ! 5 juin 2015 1174 ! Correction MP bug RRTM 1159 1175 zsollwdown(i)= -1.*ZFLDN(i,1) 1160 1176 ENDDO … … 1191 1207 ENDDO 1192 1208 ENDDO 1209 !FC 1210 DO i=1,kdlon 1211 DO jb = 1, nbands_lw_rrtm !FC 1212 lwtoab(i,jb) = ZTOAB_i(i,jb) 1213 lwtoa0b(i,jb) = ZTOACB_i(i,jb) 1214 ENDDO 1215 ENDDO 1216 1193 1217 #else 1194 1218 abort_message="You should compile with -rrtm if running with iflag_rrtm=1" … … 1197 1221 !====================================================================== 1198 1222 ! AI fev 2021 1199 ELSE IF(iflag_rrtm == 2) THEN 1223 ELSE IF(iflag_rrtm == 2) THEN test_iflag_rrtm 1200 1224 print*,'Traitement cas iflag_rrtm = ',iflag_rrtm 1201 1225 ! print*,'Mise a zero des flux ' … … 1348 1372 ! AI mars 2022 1349 1373 SOLARIRAD = solaire/zdist/zdist 1350 ! !diagnos pour la comparaison a la version offline1351 !!! - Gas en VMR pour offline et MMR pour online1352 !!! - on utilise pour solarirrad une valeur constante1374 ! diagnos pour la comparaison a la version offline 1375 ! - Gas en VMR pour offline et MMR pour online 1376 ! - on utilise pour solarirrad une valeur constante 1353 1377 if (lldebug_for_offline) then 1354 1378 SOLARIRAD = 1366.0896 … … 1397 1421 & debut, ok_volcan, flag_aerosol_strat, & 1398 1422 & day_cur, current_time, & 1399 ! Cste solaire/(d_Terre-Soleil)**21423 ! Cste solaire/(d_Terre-Soleil)**2 1400 1424 & SOLARIRAD, & 1401 ! Cos(angle zin), temp sol1425 ! Cos(angle zin), temp sol 1402 1426 & rmu0, tsol, & 1403 ! Albedo diffuse et directe1427 ! Albedo diffuse et directe 1404 1428 & PALBD_NEW,PALBP_NEW, & 1405 ! Emessivite : PEMIS_WINDOW (???), &1429 ! Emessivite : PEMIS_WINDOW (???), & 1406 1430 & ZEMIS, ZEMISW, & 1407 ! longitude(rad), sin(latitude), PMASQ_ ???1431 ! longitude(rad), sin(latitude), PMASQ_ ??? 1408 1432 & ZGELAM, ZGEMU, & 1409 ! Temp et pres aux interf, vapeur eau, Satur spec humid1433 ! Temp et pres aux interf, vapeur eau, Satur spec humid 1410 1434 & paprs_i, ZTH_i, q_i, qsat_i, & 1411 ! Gas1435 ! Gas 1412 1436 & ZCO2, ZCH4, ZN2O, ZNO2, ZCFC11, ZCFC12, ZHCFC22, & 1413 1437 & ZCCL4, POZON_i(:,:,1), ZO2, & 1414 ! nuages :1438 ! nuages : 1415 1439 & cldfra_i, flwc_i, fiwc_i, ZQ_SNOW, & 1416 ! rayons effectifs des gouttelettes1440 ! rayons effectifs des gouttelettes 1417 1441 & ref_liq_i, ref_ice_i, & 1418 ! aerosols1442 ! aerosols 1419 1443 & ZAEROSOL_OLD, ZAEROSOL, & 1420 ! Outputs1421 ! Net flux :1444 ! Outputs 1445 ! Net flux : 1422 1446 & ZSWFT_i, ZLWFT_i, ZSWFT0_ii, ZLWFT0_ii, & 1423 ! DWN flux :1447 ! DWN flux : 1424 1448 & ZFSDWN_i, ZFLUX_i(:,2,:), ZFCDWN_i, ZFLUC_i(:,2,:), & 1425 ! UP flux :1449 ! UP flux : 1426 1450 & ZFSUP_i, ZFLUX_i(:,1,:), ZFCUP_i, ZFLUC_i(:,1,:), & 1427 ! Surf Direct flux : ATTENTION1428 & ZFLUX_DIR , ZFLUX_DIR_CLEAR, ZFLUX_DIR_INTO_SUN, &1429 ! UV and para flux1451 ! Surf Direct flux : ATTENTION 1452 & ZFLUX_DIR_i, ZFLUX_DIR_CLEAR_i, ZFLUX_DIR_INTO_SUN, & 1453 ! UV and para flux 1430 1454 & ZFLUX_UV, ZFLUX_PAR, ZFLUX_PAR_CLEAR, & 1431 ! & ZFLUX_SW_DN_TOA,1455 ! & ZFLUX_SW_DN_TOA, 1432 1456 & ZEMIS_OUT, ZLWDERIVATIVE, & 1433 1457 & PSFSWDIF, PSFSWDIR, & … … 1441 1465 & debut, ok_volcan, flag_aerosol_strat, & 1442 1466 & day_cur, current_time, & 1443 ! Cste solaire/(d_Terre-Soleil)**21467 ! Cste solaire/(d_Terre-Soleil)**2 1444 1468 & SOLARIRAD, & 1445 ! Cos(angle zin), temp sol1469 ! Cos(angle zin), temp sol 1446 1470 & rmu0, tsol, & 1447 ! Albedo diffuse et directe1471 ! Albedo diffuse et directe 1448 1472 & PALBD_NEW,PALBP_NEW, & 1449 ! Emessivite : PEMIS_WINDOW (???), &1473 ! Emessivite : PEMIS_WINDOW (???), & 1450 1474 & ZEMIS, ZEMISW, & 1451 ! longitude(rad), sin(latitude), PMASQ_ ???1475 ! longitude(rad), sin(latitude), PMASQ_ ??? 1452 1476 & ZGELAM, ZGEMU, & 1453 ! Temp et pres aux interf, vapeur eau, Satur spec humid1477 ! Temp et pres aux interf, vapeur eau, Satur spec humid 1454 1478 & paprs_i, ZTH_i, q_i, qsat_i, & 1455 ! Gas1479 ! Gas 1456 1480 & ZCO2, ZCH4, ZN2O, ZNO2, ZCFC11, ZCFC12, ZHCFC22, & 1457 1481 & ZCCL4, POZON_i(:,:,1), ZO2, & 1458 ! nuages :1482 ! nuages : 1459 1483 & cldfra_i, flwc_i, fiwc_i, ZQ_SNOW, & 1460 ! rayons effectifs des gouttelettes1484 ! rayons effectifs des gouttelettes 1461 1485 & ref_liq_i, ref_ice_i, & 1462 ! aerosols1486 ! aerosols 1463 1487 & ZAEROSOL_OLD, ZAEROSOL, & 1464 ! Outputs1465 ! Net flux :1488 ! Outputs 1489 ! Net flux : 1466 1490 & ZSWFT_i, ZLWFT_i, ZSWFT0_ii, ZLWFT0_ii, & 1467 ! DWN flux :1491 ! DWN flux : 1468 1492 & ZFSDWN_i, ZFLUX_i(:,2,:), ZFCDWN_i, ZFLUC_i(:,2,:), & 1469 ! UP flux :1493 ! UP flux : 1470 1494 & ZFSUP_i, ZFLUX_i(:,1,:), ZFCUP_i, ZFLUC_i(:,1,:), & 1471 ! Surf Direct flux : ATTENTION1472 & ZFLUX_DIR , ZFLUX_DIR_CLEAR, ZFLUX_DIR_INTO_SUN, &1473 ! UV and para flux1495 ! Surf Direct flux : ATTENTION 1496 & ZFLUX_DIR_i, ZFLUX_DIR_CLEAR_i, ZFLUX_DIR_INTO_SUN, & 1497 ! UV and para flux 1474 1498 & ZFLUX_UV, ZFLUX_PAR, ZFLUX_PAR_CLEAR, & 1475 ! & ZFLUX_SW_DN_TOA,1499 ! & ZFLUX_SW_DN_TOA, 1476 1500 & ZEMIS_OUT, ZLWDERIVATIVE, & 1477 1501 & PSFSWDIF, PSFSWDIR, & … … 1530 1554 ZFLDNC0(i,k+1)= -1.*ZFLCCDWN_i(i,klev+1-k) 1531 1555 ZFLUPC0(i,k+1)= ZFLCCUP_i(i,klev+1-k) 1556 ! Direct flux 1557 ZFLUX_DIR(i,k+1) = ZFLUX_DIR_i(i,klev+1-k) 1558 ZFLUX_DIR_CLEAR = ZFLUX_DIR_CLEAR_i(i,klev+1-k) 1532 1559 IF (ok_volcan) THEN 1533 1560 ZSWADAERO(i,k+1)=ZSWADAERO(i,klev+1-k)*fract(i) !--NL … … 1557 1584 ZSOLSWCF_AERO(:,2)=ZSOLSWCF_AERO(:,2)*fract(:) 1558 1585 ZSOLSWCF_AERO(:,3)=ZSOLSWCF_AERO(:,3)*fract(:) 1586 ztoplwadaero = missing_val 1587 ztoplwad0aero = missing_val 1559 1588 1560 1589 ! --------- … … 1601 1630 print*,'Fin traitement ECRAD' 1602 1631 ! Fin ECRAD 1603 ENDIF !iflag_rrtm1632 ENDIF test_iflag_rrtm 1604 1633 ! ecrad 1605 1634 !======================================================================
Note: See TracChangeset
for help on using the changeset viewer.