- Timestamp:
- Jan 12, 2026, 4:40:41 PM (9 days ago)
- File:
-
- 1 edited
-
LMDZ6/trunk/libf/phylmd/radlwsw_m.F90 (modified) (24 diffs)
Legend:
- Unmodified
- Added
- Removed
-
LMDZ6/trunk/libf/phylmd/radlwsw_m.F90
r5939 r6018 301 301 REAL(KIND=8) ZFLDNC0(KDLON,KFLEV+1) 302 302 REAL(KIND=8) zx_alpha1, zx_alpha2 303 INTEGER k, kk, i, j, iof, nb_gr,jb !FC303 INTEGER k, kk, i, j, l, iof, nb_gr,jb !FC 304 304 INTEGER ist,iend,ktdia,kmode 305 305 REAL(KIND=8) PSCT … … 490 490 CHARACTER (LEN=80) :: modname='radlwsw_m' 491 491 492 REAL zdir, zdif 492 REAL zdir(klon), zdif(klon) 493 INTEGER :: dimoz 494 495 dimoz=size(wo,3) 493 496 494 497 ! ========= INITIALISATIONS ============================================== … … 592 595 zfract(i) = fract(iof+i) 593 596 zrmu0(i) = rmu0(iof+i) 594 595 596 IF (iflag_rrtm==0) THEN 597 ENDDO 598 599 600 IF (iflag_rrtm==0) THEN 601 DO i = 1, kdlon 602 597 603 ! Albedo 598 604 PALBD(i,1)=alb_dif(iof+i,1) … … 601 607 PALBP(i,2)=alb_dir(iof+i,2) 602 608 ! AI 02.2021 cas iflag_rrtm=1 et 2 603 ELSEIF (iflag_rrtm==1.OR.iflag_rrtm==2) THEN 604 DO kk=1,NSW 609 ENDDO 610 611 ELSEIF (iflag_rrtm==1.OR.iflag_rrtm==2) THEN 612 DO kk=1,NSW 613 DO i = 1, kdlon 614 605 615 PALBD_NEW(i,kk)=alb_dif(iof+i,kk) 606 616 PALBP_NEW(i,kk)=alb_dir(iof+i,kk) 607 ENDDO 617 ENDDO 618 ENDDO 619 608 620 ! 609 ENDIF621 ENDIF 610 622 !albedo SB <<< 611 623 DO i = 1, kdlon 612 624 PEMIS(i) = 1.0 ! A REVOIR (MPL) 613 625 PVIEW(i) = 1.66 … … 619 631 PDT0(i) = tsol(iof+i) - PTL(i,1) 620 632 ENDDO 633 621 634 DO k = 2, kflev 622 635 DO i = 1, kdlon … … 624 637 ENDDO 625 638 ENDDO 639 640 ! Confert from column density of ozone in a cell, in kDU, to a mass fraction 641 DO l=1, dimoz 642 DO k = 1, kflev 643 DO i = 1, kdlon 644 POZON(i,k, l) = wo(iof+i, k, l) * RG * dobson_u * 1e3 & 645 / (paprs(iof+i, k) - paprs(iof+i, k+1)) 646 ! A activer pour CCMVAL on prend l'ozone impose (MPL 07042010) 647 ! POZON(i,k,:) = wo(i,k,:) 648 ! print *,'RADLWSW: POZON',k, POZON(i,k,1) 649 ENDDO 650 ENDDO 651 ENDDO 652 626 653 DO k = 1, kflev 627 654 DO i = 1, kdlon … … 630 657 PWV(i,k) = MAX (q(iof+i,k), 1.0e-12) 631 658 PQS(i,k) = PWV(i,k) 632 ! Confert from column density of ozone in a cell, in kDU, to a mass fraction633 POZON(i,k, :) = wo(iof+i, k, :) * RG * dobson_u * 1e3 &634 / (paprs(iof+i, k) - paprs(iof+i, k+1))635 ! A activer pour CCMVAL on prend l'ozone impose (MPL 07042010)636 ! POZON(i,k,:) = wo(i,k,:)637 ! print *,'RADLWSW: POZON',k, POZON(i,k,1)638 659 PCLDLD(i,k) = cldfra(iof+i,k)*cldemi(iof+i,k) 639 660 PCLDLU(i,k) = cldfra(iof+i,k)*cldemi(iof+i,k) … … 679 700 ENDDO 680 701 ENDDO 702 703 704 DO l=1,naero_grp 681 705 DO k = 1, kflev 682 706 DO i = 1, kdlon 683 tauaero(i,k, :,1)=tau_aero(iof+i,k,:,1)684 pizaero(i,k, :,1)=piz_aero(iof+i,k,:,1)685 cgaero(i,k, :,1) =cg_aero(iof+i,k,:,1)686 tauaero(i,k, :,2)=tau_aero(iof+i,k,:,2)687 pizaero(i,k, :,2)=piz_aero(iof+i,k,:,2)688 cgaero(i,k, :,2) =cg_aero(iof+i,k,:,2)707 tauaero(i,k,l,1)=tau_aero(iof+i,k,l,1) 708 pizaero(i,k,l,1)=piz_aero(iof+i,k,l,1) 709 cgaero(i,k,l,1) =cg_aero(iof+i,k,l,1) 710 tauaero(i,k,l,2)=tau_aero(iof+i,k,l,2) 711 pizaero(i,k,l,2)=piz_aero(iof+i,k,l,2) 712 cgaero(i,k,l,2) =cg_aero(iof+i,k,l,2) 689 713 ENDDO 690 714 ENDDO 715 ENDDO 691 716 ! 692 717 !===== iflag_rrtm ================================================ … … 847 872 !--aerosol NAT - natural only - index 1 848 873 ! 849 DO i = 1, kdlon850 DO k = 1, kflev851 DO kk=1, NSW874 DO kk=1, NSW 875 DO k = 1, kflev 876 DO i = 1, kdlon 852 877 ! 853 878 PTAU_TOT(i,kflev+1-k,kk)=tau_aero_sw_rrtm(i,k,2,kk) … … 868 893 !--aerosol NAT - natural only - index 1 869 894 ! 870 DO i = 1, kdlon871 DO k = 1, kflev872 DO kk=1, NLW895 DO kk=1, NLW 896 DO k = 1, kflev 897 DO i = 1, kdlon 873 898 ! 874 899 PTAU_LW_TOT(i,kflev+1-k,kk)=tau_aero_lw_rrtm(i,k,2,kk) … … 892 917 PFSDNN(i)=0. 893 918 PFSDNV(i)=0. 894 DO kk = 1, NSW 919 ENDDO 920 921 DO kk = 1, NSW 922 DO i = 1, kdlon 895 923 PSFSWDIR(i,kk)=0. 896 924 PSFSWDIF(i,kk)=0. … … 902 930 paprs_i(:,1)=paprs(:,klev+1) 903 931 DO k=1,klev 904 paprs_i(1:klon,k+1) =paprs(1:klon,klev+1-k) 905 pplay_i(1:klon,k) =pplay(1:klon,klev+1-k) 906 cldfra_i(1:klon,k) =cldfra(1:klon,klev+1-k) 907 PDP_i(1:klon,k) =PDP(1:klon,klev+1-k) 908 t_i(1:klon,k) =t(1:klon,klev+1-k) 909 q_i(1:klon,k) =q(1:klon,klev+1-k) 910 qsat_i(1:klon,k) =qsat(1:klon,klev+1-k) 911 flwc_i(1:klon,k) =flwc(1:klon,klev+1-k) 912 fiwc_i(1:klon,k) =fiwc(1:klon,klev+1-k) 913 ref_liq_i(1:klon,k) =ref_liq(1:klon,klev+1-k) 914 ref_ice_i(1:klon,k) =ref_ice(1:klon,klev+1-k) 932 DO i = 1, klon 933 paprs_i(i,k+1) =paprs(i,klev+1-k) 934 pplay_i(i,k) =pplay(i,klev+1-k) 935 cldfra_i(i,k) =cldfra(i,klev+1-k) 936 PDP_i(i,k) =PDP(i,klev+1-k) 937 t_i(i,k) =t(i,klev+1-k) 938 q_i(i,k) =q(i,klev+1-k) 939 qsat_i(i,k) =qsat(i,klev+1-k) 940 flwc_i(i,k) =flwc(i,klev+1-k) 941 fiwc_i(i,k) =fiwc(i,klev+1-k) 942 ref_liq_i(i,k) =ref_liq(i,klev+1-k) 943 ref_ice_i(i,k) =ref_ice(i,klev+1-k) 915 944 !-OB 916 ref_liq_pi_i(1:klon,k) =ref_liq_pi(1:klon,klev+1-k) 917 ref_ice_pi_i(1:klon,k) =ref_ice_pi(1:klon,klev+1-k) 918 ENDDO 919 DO k=1,kflev 920 POZON_i(1:klon,k,:)=POZON(1:klon,kflev+1-k,:) 945 ref_liq_pi_ii,k) =ref_liq_pi(i,klev+1-k) 946 ref_ice_pi_i(i,k) =ref_ice_pi(i,klev+1-k) 947 ENDDO 948 ENDDO 949 950 DO l=1,dimoz 951 DO k=1,kflev 952 POZON_i(1:klon,k,l)=POZON(1:klon,kflev+1-k,l) 921 953 ! POZON_i(1:klon,k)=POZON(1:klon,k) ! on laisse 1=sol et klev=top 922 954 ! print *,'Juste avant RECMWFL: k tsol temp',k,tsol,t(1,k) 923 955 ! Modif MPL 6.01.09 avec RRTM, on passe de 5 a 6 924 DO i=1,6 925 PAER_i(1:klon,k,i)=PAER(1:klon,kflev+1-k,i) 926 ENDDO 927 ENDDO 956 ENDDO 957 ENDDO 958 959 DO l=1,6 960 DO k=1,kflev 961 PAER_i(1:klon,k,l)=PAER(1:klon,kflev+1-k,l) 962 ENDDO 963 ENDDO 928 964 929 965 ! print *,'RADLWSW: avant RECMWFL, RI0,rmu0=',solaire,rmu0 … … 1107 1143 1108 1144 !--fraction of diffuse radiation in surface SW downward radiation 1109 DO i = 1, kdlon 1110 IF (fract(i).GT.0.0) THEN 1111 zdir=SUM(PSFSWDIR(i,:)) 1112 zdif=SUM(PSFSWDIF(i,:)) 1113 zsolswfdiff(i) = zdif/(zdir+zdif) 1114 ELSE !--night 1115 zsolswfdiff(i) = 1.0 1116 ENDIF 1145 zdir(:)=0. 1146 zdif(:)=0. 1147 DO k=1,NSW 1148 DO i = 1, kdlon 1149 zdir(i)=zdir(i) + PSFSWDIR(i,k) 1150 zdif(i)=zdif(i) + PSFSWDIF(i,k) 1151 ENDDO 1152 ENDDO 1153 1154 DO i = 1, kdlon 1155 IF (fract(i).GT.0.0) THEN 1156 zsolswfdiff(i) = zdif(i)/(zdir(i)+zdif(i)) 1157 ELSE !--night 1158 zsolswfdiff(i) = 1.0 1159 ENDIF 1117 1160 ENDDO 1118 1161 ! … … 1178 1221 ENDDO 1179 1222 !FC 1180 DO i=1,kdlon1181 1223 DO jb = 1, nbands_lw_rrtm !FC 1182 lwtoab(i,jb) = ZTOAB_i(i,jb) 1183 lwtoa0b(i,jb) = ZTOACB_i(i,jb) 1184 ENDDO 1224 DO i=1,kdlon 1225 lwtoab(i,jb) = ZTOAB_i(i,jb) 1226 lwtoa0b(i,jb) = ZTOACB_i(i,jb) 1227 ENDDO 1185 1228 ENDDO 1186 1229 … … 1219 1262 ! 1220 1263 ! AI ATTENTION Aerosols A REVOIR 1221 DO i = 1, kdlon1264 DO kk= 1, naero_spc 1222 1265 DO k = 1, kflev 1223 DO kk= 1, naero_spc1266 DO i = 1, kdlon 1224 1267 ! DO kk=1, NSW 1225 1268 ! … … 1263 1306 PFSDNN(i)=0. 1264 1307 PFSDNV(i)=0. 1265 DO kk = 1, NSW 1308 ENDDO 1309 1310 DO kk = 1, NSW 1311 DO i = 1, kdlon 1266 1312 PSFSWDIR(i,kk)=0. 1267 1313 PSFSWDIF(i,kk)=0. … … 1274 1320 paprs_i(:,1)=paprs(:,klev+1) 1275 1321 DO k=1,klev 1276 paprs_i(1:klon,k+1) =paprs(1:klon,klev+1-k) 1277 pplay_i(1:klon,k) =pplay(1:klon,klev+1-k) 1278 cldfra_i(1:klon,k) =cldfra(1:klon,klev+1-k) 1279 PDP_i(1:klon,k) =PDP(1:klon,klev+1-k) 1280 t_i(1:klon,k) =t(1:klon,klev+1-k) 1281 q_i(1:klon,k) =q(1:klon,klev+1-k) 1282 qsat_i(1:klon,k) =qsat(1:klon,klev+1-k) 1283 flwc_i(1:klon,k) =flwc(1:klon,klev+1-k) 1284 fiwc_i(1:klon,k) =fiwc(1:klon,klev+1-k) 1285 ref_liq_i(1:klon,k) =ref_liq(1:klon,klev+1-k)*1.0e-6 1286 ref_ice_i(1:klon,k) =ref_ice(1:klon,klev+1-k)*1.0e-6 1322 DO i=1,klon 1323 paprs_i(i,k+1) =paprs(i,klev+1-k) 1324 pplay_i(i,k) =pplay(i,klev+1-k) 1325 cldfra_i(i,k) =cldfra(i,klev+1-k) 1326 PDP_i(i,k) =PDP(i,klev+1-k) 1327 t_i(i,k) =t(i,klev+1-k) 1328 q_i(i,k) =q(i,klev+1-k) 1329 qsat_i(i,k) =qsat(i,klev+1-k) 1330 flwc_i(i,k) =flwc(i,klev+1-k) 1331 fiwc_i(i,k) =fiwc(i,klev+1-k) 1332 ref_liq_i(i,k) =ref_liq(i,klev+1-k)*1.0e-6 1333 ref_ice_i(i,k) =ref_ice(i,klev+1-k)*1.0e-6 1287 1334 !-OB 1288 ref_liq_pi_i(1:klon,k) =ref_liq_pi(1:klon,klev+1-k) 1289 ref_ice_pi_i(1:klon,k) =ref_ice_pi(1:klon,klev+1-k) 1290 ENDDO 1291 DO k=1,kflev 1292 POZON_i(1:klon,k,:)=POZON(1:klon,kflev+1-k,:) 1335 ref_liq_pi_i(i,k) =ref_liq_pi(i,klev+1-k) 1336 ref_ice_pi_i(i,k) =ref_ice_pi(i,klev+1-k) 1337 ENDDO 1338 ENDDO 1339 1340 DO l=1,dimoz 1341 DO k=1,kflev 1342 POZON_i(1:klon,k,l)=POZON(1:klon,kflev+1-k,l) 1293 1343 ! ZO3_DP_i(1:klon,k)=ZO3_DP(1:klon,kflev+1-k) 1294 1344 ! DO i=1,6 1295 PAER_i(1:klon,k, :)=PAER(1:klon,kflev+1-k,:)1345 PAER_i(1:klon,k,l)=PAER(1:klon,kflev+1-k,l) 1296 1346 ! ENDDO 1347 ENDDO 1297 1348 ENDDO 1298 1349 … … 1526 1577 ! Direct flux 1527 1578 ZFLUX_DIR(i,k+1) = ZFLUX_DIR_i(i,klev+1-k) 1528 ZFLUX_DIR_CLEAR = ZFLUX_DIR_CLEAR_i(i,klev+1-k)1579 ZFLUX_DIR_CLEAR(i,k+1) = ZFLUX_DIR_CLEAR_i(i,klev+1-k) 1529 1580 IF (ok_volcan) THEN 1530 1581 ZSWADAERO(i,k+1)=ZSWADAERO(i,klev+1-k)*fract(i) !--NL … … 1562 1613 1563 1614 !--fraction of diffuse radiation in surface SW downward radiation 1564 DO i = 1, kdlon 1565 zdir=SUM(PSFSWDIR(i,:)) 1566 zdif=SUM(PSFSWDIF(i,:)) 1567 IF (fract(i).GT.0.0.and.(zdir+zdif).gt.seuilmach) THEN 1568 zsolswfdiff(i) = zdif/(zdir+zdif) 1615 1616 zdir(:)=0. 1617 zdif(:)=0. 1618 DO k=1,klev 1619 DO i = 1, kdlon 1620 zdir(i)=zdir(i)+PSFSWDIR(i,k) 1621 zdif(i)=zdif(i)+PSFSWDIF(i,k) 1622 ENDDO 1623 ENDDO 1624 1625 DO i = 1, kdlon 1626 IF (fract(i).GT.0.0.and.(zdir(i)+zdif(i)).gt.seuilmach) THEN 1627 zsolswfdiff(i) = zdif(i)/(zdir(i)+zdif(i)) 1569 1628 ELSE !--night 1570 1629 zsolswfdiff(i) = 1.0 … … 1611 1670 sollw(iof+i) = zsollw(i) 1612 1671 sollwdown(iof+i) = zsollwdown(i) 1613 DO k = 1, kflev+1 1672 ENDDO 1673 1674 DO k = 1, kflev+1 1675 DO i = 1, kdlon 1614 1676 lwdn0 ( iof+i,k) = ZFLDN0 ( i,k) 1615 1677 lwdn ( iof+i,k) = ZFLDN ( i,k) … … 1617 1679 lwup ( iof+i,k) = ZFLUP ( i,k) 1618 1680 ENDDO 1681 ENDDO 1682 1683 DO i = 1, kdlon 1619 1684 topsw0(iof+i) = ztopsw0(i) 1620 1685 toplw0(iof+i) = ztoplw0(i) … … 1622 1687 sollw0(iof+i) = zsollw0(i) 1623 1688 albpla(iof+i) = zalbpla(i) 1624 1625 DO k = 1, kflev+1 1689 ENDDO 1690 1691 DO k = 1, kflev+1 1692 DO i = 1, kdlon 1626 1693 swdnc0( iof+i,k) = ZFSDNC0( i,k) 1627 1694 swdn0 ( iof+i,k) = ZFSDN0 ( i,k) … … 1642 1709 solswad_aero(iof+i) = zsolswadaero(i) 1643 1710 solswad0_aero(iof+i) = zsolswad0aero(i) 1644 topsw_aero(iof+i,:) = ztopsw_aero(i,:) 1645 topsw0_aero(iof+i,:) = ztopsw0_aero(i,:) 1646 solsw_aero(iof+i,:) = zsolsw_aero(i,:) 1647 solsw0_aero(iof+i,:) = zsolsw0_aero(i,:) 1648 topswcf_aero(iof+i,:) = ztopswcf_aero(i,:) 1649 solswcf_aero(iof+i,:) = zsolswcf_aero(i,:) 1711 ENDDO 1712 1713 topsw_aero(:,:) = ztopsw_aero(:,:) 1714 topsw0_aero(:,:) = ztopsw0_aero(:,:) 1715 solsw_aero(:,:) = zsolsw_aero(:,:) 1716 solsw0_aero(:,:) = zsolsw0_aero(:,:) 1717 topswcf_aero(:,:) = ztopswcf_aero(:,:) 1718 solswcf_aero(:,:) = zsolswcf_aero(:,:) 1650 1719 !-LW 1720 DO i = 1, kdlon 1651 1721 toplwad_aero(iof+i) = ztoplwadaero(i) 1652 1722 toplwad0_aero(iof+i) = ztoplwad0aero(i) … … 1660 1730 topswad0_aero(iof+i) = 0.0 1661 1731 solswad0_aero(iof+i) = 0.0 1662 topsw_aero(iof+i,:) = 0. 1663 topsw0_aero(iof+i,:) =0. 1664 solsw_aero(iof+i,:) = 0. 1665 solsw0_aero(iof+i,:) = 0. 1732 ENDDO 1733 topsw_aero(:,:) = 0. 1734 topsw0_aero(:,:) =0. 1735 solsw_aero(:,:) = 0. 1736 solsw0_aero(:,:) = 0. 1666 1737 !-LW 1738 DO i = 1, kdlon 1667 1739 toplwad_aero(iof+i) = 0.0 1668 1740 sollwad_aero(iof+i) = 0.0
Note: See TracChangeset
for help on using the changeset viewer.
